xref: /linux/arch/loongarch/mm/page.S (revision e6b9d8eddb1772d99a676a906d42865293934edd)
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
4 */
5#include <linux/linkage.h>
6#include <asm/asm.h>
7#include <asm/export.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