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>
13 .section .noinstr.text, "ax"
15 SYM_FUNC_START(memcpy)
17 * Some CPUs support hardware unaligned access
19 ALTERNATIVE "b __memcpy_generic", \
20 "b __memcpy_fast", CPU_FEATURE_UAL
22 SYM_FUNC_ALIAS(__memcpy, memcpy)
25 EXPORT_SYMBOL(__memcpy)
28 _ASM_NOKPROBE(__memcpy)
31 * void *__memcpy_generic(void *dst, const void *src, size_t n)
37 SYM_FUNC_START(__memcpy_generic)
50 SYM_FUNC_END(__memcpy_generic)
51 _ASM_NOKPROBE(__memcpy_generic)
54 SYM_FUNC_START_NOALIGN(__memcpy_small)
110 SYM_FUNC_END(__memcpy_small)
111 _ASM_NOKPROBE(__memcpy_small)
114 * void *__memcpy_fast(void *dst, const void *src, size_t n)
120 SYM_FUNC_START(__memcpy_fast)
122 bnez t0, __memcpy_small
129 /* align up destination address */
139 /* copy 64 bytes at a time */
159 bltu a1, a4, .Lloop64
161 /* copy the remaining bytes */
198 SYM_FUNC_END(__memcpy_fast)
199 _ASM_NOKPROBE(__memcpy_fast)