blob: dc8d2a216a6e647e93972687207f212f3ddeb6b3 [file] [log] [blame]
David Brazdil0f672f62019-12-10 10:32:29 +00001/* SPDX-License-Identifier: GPL-2.0-only */
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00002/*
3 * Copyright (C) 2013 ARM Ltd.
4 * Copyright (C) 2013 Linaro.
5 *
6 * This code is based on glibc cortex strings work originally authored by Linaro
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00007 * be found @
8 *
9 * http://bazaar.launchpad.net/~linaro-toolchain-dev/cortex-strings/trunk/
10 * files/head:/src/aarch64/
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000011 */
12
13#include <linux/linkage.h>
14#include <asm/assembler.h>
15#include <asm/cache.h>
16
17/*
18 * Copy a buffer from src to dest (alignment handled by the hardware)
19 *
20 * Parameters:
21 * x0 - dest
22 * x1 - src
23 * x2 - n
24 * Returns:
25 * x0 - dest
26 */
Olivier Deprez157378f2022-04-04 15:47:50 +020027 .macro ldrb1 reg, ptr, val
28 ldrb \reg, [\ptr], \val
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000029 .endm
30
Olivier Deprez157378f2022-04-04 15:47:50 +020031 .macro strb1 reg, ptr, val
32 strb \reg, [\ptr], \val
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000033 .endm
34
Olivier Deprez157378f2022-04-04 15:47:50 +020035 .macro ldrh1 reg, ptr, val
36 ldrh \reg, [\ptr], \val
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000037 .endm
38
Olivier Deprez157378f2022-04-04 15:47:50 +020039 .macro strh1 reg, ptr, val
40 strh \reg, [\ptr], \val
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000041 .endm
42
Olivier Deprez157378f2022-04-04 15:47:50 +020043 .macro ldr1 reg, ptr, val
44 ldr \reg, [\ptr], \val
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000045 .endm
46
Olivier Deprez157378f2022-04-04 15:47:50 +020047 .macro str1 reg, ptr, val
48 str \reg, [\ptr], \val
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000049 .endm
50
Olivier Deprez157378f2022-04-04 15:47:50 +020051 .macro ldp1 reg1, reg2, ptr, val
52 ldp \reg1, \reg2, [\ptr], \val
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000053 .endm
54
Olivier Deprez157378f2022-04-04 15:47:50 +020055 .macro stp1 reg1, reg2, ptr, val
56 stp \reg1, \reg2, [\ptr], \val
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000057 .endm
58
Olivier Deprez0e641232021-09-23 10:07:05 +020059SYM_FUNC_START_ALIAS(__memcpy)
60SYM_FUNC_START_WEAK_PI(memcpy)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000061#include "copy_template.S"
62 ret
Olivier Deprez0e641232021-09-23 10:07:05 +020063SYM_FUNC_END_PI(memcpy)
David Brazdil0f672f62019-12-10 10:32:29 +000064EXPORT_SYMBOL(memcpy)
Olivier Deprez0e641232021-09-23 10:07:05 +020065SYM_FUNC_END_ALIAS(__memcpy)
David Brazdil0f672f62019-12-10 10:32:29 +000066EXPORT_SYMBOL(__memcpy)