1*559671e0SHuacai Chen/* SPDX-License-Identifier: GPL-2.0 */ 2*559671e0SHuacai Chen/* 3*559671e0SHuacai Chen * Copyright (C) 2020-2022 Loongson Technology Corporation Limited 4*559671e0SHuacai Chen */ 5*559671e0SHuacai Chen 6*559671e0SHuacai Chen#include <asm/asm.h> 7*559671e0SHuacai Chen#include <asm/asmmacro.h> 8*559671e0SHuacai Chen#include <asm/export.h> 9*559671e0SHuacai Chen#include <asm/regdef.h> 10*559671e0SHuacai Chen 11*559671e0SHuacai Chen.macro fixup_ex from, to, offset, fix 12*559671e0SHuacai Chen.if \fix 13*559671e0SHuacai Chen .section .fixup, "ax" 14*559671e0SHuacai Chen\to: addi.d a0, a1, \offset 15*559671e0SHuacai Chen jr ra 16*559671e0SHuacai Chen .previous 17*559671e0SHuacai Chen.endif 18*559671e0SHuacai Chen .section __ex_table, "a" 19*559671e0SHuacai Chen PTR \from\()b, \to\()b 20*559671e0SHuacai Chen .previous 21*559671e0SHuacai Chen.endm 22*559671e0SHuacai Chen 23*559671e0SHuacai Chen/* 24*559671e0SHuacai Chen * unsigned long __clear_user(void *addr, size_t size) 25*559671e0SHuacai Chen * 26*559671e0SHuacai Chen * a0: addr 27*559671e0SHuacai Chen * a1: size 28*559671e0SHuacai Chen */ 29*559671e0SHuacai ChenSYM_FUNC_START(__clear_user) 30*559671e0SHuacai Chen beqz a1, 2f 31*559671e0SHuacai Chen 32*559671e0SHuacai Chen1: st.b zero, a0, 0 33*559671e0SHuacai Chen addi.d a0, a0, 1 34*559671e0SHuacai Chen addi.d a1, a1, -1 35*559671e0SHuacai Chen bgt a1, zero, 1b 36*559671e0SHuacai Chen 37*559671e0SHuacai Chen2: move a0, a1 38*559671e0SHuacai Chen jr ra 39*559671e0SHuacai Chen 40*559671e0SHuacai Chen fixup_ex 1, 3, 0, 1 41*559671e0SHuacai ChenSYM_FUNC_END(__clear_user) 42*559671e0SHuacai Chen 43*559671e0SHuacai ChenEXPORT_SYMBOL(__clear_user) 44