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