| 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 |
| 12 | SYM_FUNC_START(clear_page) |
| 13 | lu12i.w t0, 1 << (PAGE_SHIFT - 12) |
| 14 | PTR_ADD t0, t0, a0 |
| 15 | 1: |
| 16 | LONG_S zero, a0, (LONGSIZE * 0) |
| 17 | LONG_S zero, a0, (LONGSIZE * 1) |
| 18 | LONG_S zero, a0, (LONGSIZE * 2) |
| 19 | LONG_S zero, a0, (LONGSIZE * 3) |
| 20 | LONG_S zero, a0, (LONGSIZE * 4) |
| 21 | LONG_S zero, a0, (LONGSIZE * 5) |
| 22 | LONG_S zero, a0, (LONGSIZE * 6) |
| 23 | LONG_S zero, a0, (LONGSIZE * 7) |
| 24 | PTR_ADDI a0, a0, (LONGSIZE * 16) |
| 25 | LONG_S zero, a0, -(LONGSIZE * 8) |
| 26 | LONG_S zero, a0, -(LONGSIZE * 7) |
| 27 | LONG_S zero, a0, -(LONGSIZE * 6) |
| 28 | LONG_S zero, a0, -(LONGSIZE * 5) |
| 29 | LONG_S zero, a0, -(LONGSIZE * 4) |
| 30 | LONG_S zero, a0, -(LONGSIZE * 3) |
| 31 | LONG_S zero, a0, -(LONGSIZE * 2) |
| 32 | LONG_S zero, a0, -(LONGSIZE * 1) |
| 33 | bne t0, a0, 1b |
| 34 | |
| 35 | jr ra |
| 36 | SYM_FUNC_END(clear_page) |
| 37 | EXPORT_SYMBOL(clear_page) |
| 38 | |
| 39 | .align 5 |
| 40 | SYM_FUNC_START(copy_page) |
| 41 | lu12i.w t8, 1 << (PAGE_SHIFT - 12) |
| 42 | PTR_ADD t8, t8, a0 |
| 43 | 1: |
| 44 | LONG_L t0, a1, (LONGSIZE * 0) |
| 45 | LONG_L t1, a1, (LONGSIZE * 1) |
| 46 | LONG_L t2, a1, (LONGSIZE * 2) |
| 47 | LONG_L t3, a1, (LONGSIZE * 3) |
| 48 | LONG_L t4, a1, (LONGSIZE * 4) |
| 49 | LONG_L t5, a1, (LONGSIZE * 5) |
| 50 | LONG_L t6, a1, (LONGSIZE * 6) |
| 51 | LONG_L t7, a1, (LONGSIZE * 7) |
| 52 | |
| 53 | LONG_S t0, a0, (LONGSIZE * 0) |
| 54 | LONG_S t1, a0, (LONGSIZE * 1) |
| 55 | LONG_L t0, a1, (LONGSIZE * 8) |
| 56 | LONG_L t1, a1, (LONGSIZE * 9) |
| 57 | LONG_S t2, a0, (LONGSIZE * 2) |
| 58 | LONG_S t3, a0, (LONGSIZE * 3) |
| 59 | LONG_L t2, a1, (LONGSIZE * 10) |
| 60 | LONG_L t3, a1, (LONGSIZE * 11) |
| 61 | LONG_S t4, a0, (LONGSIZE * 4) |
| 62 | LONG_S t5, a0, (LONGSIZE * 5) |
| 63 | LONG_L t4, a1, (LONGSIZE * 12) |
| 64 | LONG_L t5, a1, (LONGSIZE * 13) |
| 65 | LONG_S t6, a0, (LONGSIZE * 6) |
| 66 | LONG_S t7, a0, (LONGSIZE * 7) |
| 67 | LONG_L t6, a1, (LONGSIZE * 14) |
| 68 | LONG_L t7, a1, (LONGSIZE * 15) |
| 69 | PTR_ADDI a0, a0, (LONGSIZE * 16) |
| 70 | PTR_ADDI a1, a1, (LONGSIZE * 16) |
| 71 | |
| 72 | LONG_S t0, a0, -(LONGSIZE * 8) |
| 73 | LONG_S t1, a0, -(LONGSIZE * 7) |
| 74 | LONG_S t2, a0, -(LONGSIZE * 6) |
| 75 | LONG_S t3, a0, -(LONGSIZE * 5) |
| 76 | LONG_S t4, a0, -(LONGSIZE * 4) |
| 77 | LONG_S t5, a0, -(LONGSIZE * 3) |
| 78 | LONG_S t6, a0, -(LONGSIZE * 2) |
| 79 | LONG_S t7, a0, -(LONGSIZE * 1) |
| 80 | |
| 81 | bne t8, a0, 1b |
| 82 | jr ra |
| 83 | SYM_FUNC_END(copy_page) |
| 84 | EXPORT_SYMBOL(copy_page) |
| 85 | |