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 .section .noinstr.text, "ax"
21 SYM_FUNC_START(memset)
23 * Some CPUs support hardware unaligned access
25 ALTERNATIVE "b __memset_generic", \
26 "b __memset_fast", CPU_FEATURE_UAL
28 SYM_FUNC_ALIAS(__memset, memset)
31 EXPORT_SYMBOL(__memset)
34 _ASM_NOKPROBE(__memset)
37 * void *__memset_generic(void *s, int c, size_t n)
43 SYM_FUNC_START(__memset_generic)
54 SYM_FUNC_END(__memset_generic)
55 _ASM_NOKPROBE(__memset_generic)
58 * void *__memset_fast(void *s, int c, size_t n)
64 SYM_FUNC_START(__memset_fast)
65 /* fill a1 to 64 bits */
74 /* align up address */
76 bstrins.d a3, zero, 2, 0
81 /* set 64 bytes at a time */
94 /* set the remaining bytes */
167 SYM_FUNC_END(__memset_fast)
168 _ASM_NOKPROBE(__memset_fast)