1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
6 #include <asm/alternative-asm.h>
8 #include <asm/asmmacro.h>
9 #include <asm/asm-extable.h>
11 #include <asm/export.h>
12 #include <asm/regdef.h>
14 .irp to, 0, 1, 2, 3, 4, 5, 6, 7
15 .L_fixup_handle_\to\():
16 addi.d a0, a1, (\to) * (-8)
20 SYM_FUNC_START(__clear_user)
22 * Some CPUs support hardware unaligned access
24 ALTERNATIVE "b __clear_user_generic", \
25 "b __clear_user_fast", CPU_FEATURE_UAL
26 SYM_FUNC_END(__clear_user)
28 EXPORT_SYMBOL(__clear_user)
31 * unsigned long __clear_user_generic(void *addr, size_t size)
36 SYM_FUNC_START(__clear_user_generic)
47 _asm_extable 1b, .L_fixup_handle_0
48 SYM_FUNC_END(__clear_user_generic)
51 * unsigned long __clear_user_fast(void *addr, unsigned long size)
56 SYM_FUNC_START(__clear_user_fast)
62 /* set 64 bytes at a time */
78 /* set the remaining bytes */
88 /* fixup and ex_table */
89 _asm_extable 1b, .L_fixup_handle_0
90 _asm_extable 2b, .L_fixup_handle_1
91 _asm_extable 3b, .L_fixup_handle_2
92 _asm_extable 4b, .L_fixup_handle_3
93 _asm_extable 5b, .L_fixup_handle_4
94 _asm_extable 6b, .L_fixup_handle_5
95 _asm_extable 7b, .L_fixup_handle_6
96 _asm_extable 8b, .L_fixup_handle_7
97 _asm_extable 9b, .L_fixup_handle_0
98 SYM_FUNC_END(__clear_user_fast)