xref: /linux/arch/loongarch/mm/page.S (revision b8fc42dc065742bc68df6a61a2aff8cbe364fa17)
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