xref: /kernel/linux/linux-5.10/arch/arm64/lib/memcpy.S (revision 8c2ecf20)
18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (C) 2013 ARM Ltd.
48c2ecf20Sopenharmony_ci * Copyright (C) 2013 Linaro.
58c2ecf20Sopenharmony_ci *
68c2ecf20Sopenharmony_ci * This code is based on glibc cortex strings work originally authored by Linaro
78c2ecf20Sopenharmony_ci * be found @
88c2ecf20Sopenharmony_ci *
98c2ecf20Sopenharmony_ci * http://bazaar.launchpad.net/~linaro-toolchain-dev/cortex-strings/trunk/
108c2ecf20Sopenharmony_ci * files/head:/src/aarch64/
118c2ecf20Sopenharmony_ci */
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#include <linux/linkage.h>
148c2ecf20Sopenharmony_ci#include <asm/assembler.h>
158c2ecf20Sopenharmony_ci#include <asm/cache.h>
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci/*
188c2ecf20Sopenharmony_ci * Copy a buffer from src to dest (alignment handled by the hardware)
198c2ecf20Sopenharmony_ci *
208c2ecf20Sopenharmony_ci * Parameters:
218c2ecf20Sopenharmony_ci *	x0 - dest
228c2ecf20Sopenharmony_ci *	x1 - src
238c2ecf20Sopenharmony_ci *	x2 - n
248c2ecf20Sopenharmony_ci * Returns:
258c2ecf20Sopenharmony_ci *	x0 - dest
268c2ecf20Sopenharmony_ci */
278c2ecf20Sopenharmony_ci	.macro ldrb1 reg, ptr, val
288c2ecf20Sopenharmony_ci	ldrb  \reg, [\ptr], \val
298c2ecf20Sopenharmony_ci	.endm
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci	.macro strb1 reg, ptr, val
328c2ecf20Sopenharmony_ci	strb \reg, [\ptr], \val
338c2ecf20Sopenharmony_ci	.endm
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ci	.macro ldrh1 reg, ptr, val
368c2ecf20Sopenharmony_ci	ldrh  \reg, [\ptr], \val
378c2ecf20Sopenharmony_ci	.endm
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci	.macro strh1 reg, ptr, val
408c2ecf20Sopenharmony_ci	strh \reg, [\ptr], \val
418c2ecf20Sopenharmony_ci	.endm
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ci	.macro ldr1 reg, ptr, val
448c2ecf20Sopenharmony_ci	ldr \reg, [\ptr], \val
458c2ecf20Sopenharmony_ci	.endm
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci	.macro str1 reg, ptr, val
488c2ecf20Sopenharmony_ci	str \reg, [\ptr], \val
498c2ecf20Sopenharmony_ci	.endm
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci	.macro ldp1 reg1, reg2, ptr, val
528c2ecf20Sopenharmony_ci	ldp \reg1, \reg2, [\ptr], \val
538c2ecf20Sopenharmony_ci	.endm
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci	.macro stp1 reg1, reg2, ptr, val
568c2ecf20Sopenharmony_ci	stp \reg1, \reg2, [\ptr], \val
578c2ecf20Sopenharmony_ci	.endm
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ciSYM_FUNC_START_ALIAS(__memcpy)
608c2ecf20Sopenharmony_ciSYM_FUNC_START_WEAK_PI(memcpy)
618c2ecf20Sopenharmony_ci#include "copy_template.S"
628c2ecf20Sopenharmony_ci	ret
638c2ecf20Sopenharmony_ciSYM_FUNC_END_PI(memcpy)
648c2ecf20Sopenharmony_ciEXPORT_SYMBOL(memcpy)
658c2ecf20Sopenharmony_ciSYM_FUNC_END_ALIAS(__memcpy)
668c2ecf20Sopenharmony_ciEXPORT_SYMBOL(__memcpy)
67