xref: /linux/arch/loongarch/mm/page.S (revision fb7fd2a14a503b9a23fe10303923fc0605c22288)
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
4 */
5#include <linux/export.h>
6#include <linux/linkage.h>
7#include <asm/asm.h>
8#include <asm/page.h>
9#include <asm/regdef.h>
10
11	.align 5
12SYM_FUNC_START(clear_page)
13	lu12i.w	t0, 1 << (PAGE_SHIFT - 12)
14	add.d	t0, t0, a0
151:
16	st.d	zero, a0, 0
17	st.d	zero, a0, 8
18	st.d	zero, a0, 16
19	st.d	zero, a0, 24
20	st.d	zero, a0, 32
21	st.d	zero, a0, 40
22	st.d	zero, a0, 48
23	st.d	zero, a0, 56
24	addi.d	a0,   a0, 128
25	st.d	zero, a0, -64
26	st.d	zero, a0, -56
27	st.d	zero, a0, -48
28	st.d	zero, a0, -40
29	st.d	zero, a0, -32
30	st.d	zero, a0, -24
31	st.d	zero, a0, -16
32	st.d	zero, a0, -8
33	bne	t0,   a0, 1b
34
35	jr	ra
36SYM_FUNC_END(clear_page)
37EXPORT_SYMBOL(clear_page)
38
39.align 5
40SYM_FUNC_START(copy_page)
41	lu12i.w	t8, 1 << (PAGE_SHIFT - 12)
42	add.d	t8, t8, a0
431:
44	ld.d	t0, a1, 0
45	ld.d	t1, a1, 8
46	ld.d	t2, a1, 16
47	ld.d	t3, a1, 24
48	ld.d	t4, a1, 32
49	ld.d	t5, a1, 40
50	ld.d	t6, a1, 48
51	ld.d	t7, a1, 56
52
53	st.d	t0, a0, 0
54	st.d	t1, a0, 8
55	ld.d	t0, a1, 64
56	ld.d	t1, a1, 72
57	st.d	t2, a0, 16
58	st.d	t3, a0, 24
59	ld.d	t2, a1, 80
60	ld.d	t3, a1, 88
61	st.d	t4, a0, 32
62	st.d	t5, a0, 40
63	ld.d	t4, a1, 96
64	ld.d	t5, a1, 104
65	st.d	t6, a0, 48
66	st.d	t7, a0, 56
67	ld.d	t6, a1, 112
68	ld.d	t7, a1, 120
69	addi.d	a0, a0, 128
70	addi.d	a1, a1, 128
71
72	st.d	t0, a0, -64
73	st.d	t1, a0, -56
74	st.d	t2, a0, -48
75	st.d	t3, a0, -40
76	st.d	t4, a0, -32
77	st.d	t5, a0, -24
78	st.d	t6, a0, -16
79	st.d	t7, a0, -8
80
81	bne	t8, a0, 1b
82	jr	ra
83SYM_FUNC_END(copy_page)
84EXPORT_SYMBOL(copy_page)
85