1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
6 #include <linux/export.h>
7 #include <asm/alternative-asm.h>
9 #include <asm/asmmacro.h>
11 #include <asm/regdef.h>
14 bstrins.d \r0, \r0, 15, 8
15 bstrins.d \r0, \r0, 31, 16
16 bstrins.d \r0, \r0, 63, 32
19 SYM_FUNC_START(memset)
21 * Some CPUs support hardware unaligned access
23 ALTERNATIVE "b __memset_generic", \
24 "b __memset_fast", CPU_FEATURE_UAL
31 * void *__memset_generic(void *s, int c, size_t n)
37 SYM_FUNC_START(__memset_generic)
48 SYM_FUNC_END(__memset_generic)
49 _ASM_NOKPROBE(__memset_generic)
52 * void *__memset_fast(void *s, int c, size_t n)
58 SYM_FUNC_START(__memset_fast)
59 /* fill a1 to 64 bits */
68 /* align up address */
70 bstrins.d a3, zero, 2, 0
75 /* set 64 bytes at a time */
88 /* set the remaining bytes */
161 SYM_FUNC_END(__memset_fast)
162 _ASM_NOKPROBE(__memset_fast)