162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2020-2022 Loongson Technology Corporation Limited 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci#include <linux/export.h> 662306a36Sopenharmony_ci#include <linux/linkage.h> 762306a36Sopenharmony_ci#include <asm/asm.h> 862306a36Sopenharmony_ci#include <asm/page.h> 962306a36Sopenharmony_ci#include <asm/regdef.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci .align 5 1262306a36Sopenharmony_ciSYM_FUNC_START(clear_page) 1362306a36Sopenharmony_ci lu12i.w t0, 1 << (PAGE_SHIFT - 12) 1462306a36Sopenharmony_ci add.d t0, t0, a0 1562306a36Sopenharmony_ci1: 1662306a36Sopenharmony_ci st.d zero, a0, 0 1762306a36Sopenharmony_ci st.d zero, a0, 8 1862306a36Sopenharmony_ci st.d zero, a0, 16 1962306a36Sopenharmony_ci st.d zero, a0, 24 2062306a36Sopenharmony_ci st.d zero, a0, 32 2162306a36Sopenharmony_ci st.d zero, a0, 40 2262306a36Sopenharmony_ci st.d zero, a0, 48 2362306a36Sopenharmony_ci st.d zero, a0, 56 2462306a36Sopenharmony_ci addi.d a0, a0, 128 2562306a36Sopenharmony_ci st.d zero, a0, -64 2662306a36Sopenharmony_ci st.d zero, a0, -56 2762306a36Sopenharmony_ci st.d zero, a0, -48 2862306a36Sopenharmony_ci st.d zero, a0, -40 2962306a36Sopenharmony_ci st.d zero, a0, -32 3062306a36Sopenharmony_ci st.d zero, a0, -24 3162306a36Sopenharmony_ci st.d zero, a0, -16 3262306a36Sopenharmony_ci st.d zero, a0, -8 3362306a36Sopenharmony_ci bne t0, a0, 1b 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci jr ra 3662306a36Sopenharmony_ciSYM_FUNC_END(clear_page) 3762306a36Sopenharmony_ciEXPORT_SYMBOL(clear_page) 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci.align 5 4062306a36Sopenharmony_ciSYM_FUNC_START(copy_page) 4162306a36Sopenharmony_ci lu12i.w t8, 1 << (PAGE_SHIFT - 12) 4262306a36Sopenharmony_ci add.d t8, t8, a0 4362306a36Sopenharmony_ci1: 4462306a36Sopenharmony_ci ld.d t0, a1, 0 4562306a36Sopenharmony_ci ld.d t1, a1, 8 4662306a36Sopenharmony_ci ld.d t2, a1, 16 4762306a36Sopenharmony_ci ld.d t3, a1, 24 4862306a36Sopenharmony_ci ld.d t4, a1, 32 4962306a36Sopenharmony_ci ld.d t5, a1, 40 5062306a36Sopenharmony_ci ld.d t6, a1, 48 5162306a36Sopenharmony_ci ld.d t7, a1, 56 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci st.d t0, a0, 0 5462306a36Sopenharmony_ci st.d t1, a0, 8 5562306a36Sopenharmony_ci ld.d t0, a1, 64 5662306a36Sopenharmony_ci ld.d t1, a1, 72 5762306a36Sopenharmony_ci st.d t2, a0, 16 5862306a36Sopenharmony_ci st.d t3, a0, 24 5962306a36Sopenharmony_ci ld.d t2, a1, 80 6062306a36Sopenharmony_ci ld.d t3, a1, 88 6162306a36Sopenharmony_ci st.d t4, a0, 32 6262306a36Sopenharmony_ci st.d t5, a0, 40 6362306a36Sopenharmony_ci ld.d t4, a1, 96 6462306a36Sopenharmony_ci ld.d t5, a1, 104 6562306a36Sopenharmony_ci st.d t6, a0, 48 6662306a36Sopenharmony_ci st.d t7, a0, 56 6762306a36Sopenharmony_ci ld.d t6, a1, 112 6862306a36Sopenharmony_ci ld.d t7, a1, 120 6962306a36Sopenharmony_ci addi.d a0, a0, 128 7062306a36Sopenharmony_ci addi.d a1, a1, 128 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci st.d t0, a0, -64 7362306a36Sopenharmony_ci st.d t1, a0, -56 7462306a36Sopenharmony_ci st.d t2, a0, -48 7562306a36Sopenharmony_ci st.d t3, a0, -40 7662306a36Sopenharmony_ci st.d t4, a0, -32 7762306a36Sopenharmony_ci st.d t5, a0, -24 7862306a36Sopenharmony_ci st.d t6, a0, -16 7962306a36Sopenharmony_ci st.d t7, a0, -8 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci bne t8, a0, 1b 8262306a36Sopenharmony_ci jr ra 8362306a36Sopenharmony_ciSYM_FUNC_END(copy_page) 8462306a36Sopenharmony_ciEXPORT_SYMBOL(copy_page) 85