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