Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arc/lib/memcpy-archs-unaligned.S
26424 views
1
/* SPDX-License-Identifier: GPL-2.0+ */
2
/*
3
* ARCv2 memcpy implementation optimized for unaligned memory access using.
4
*
5
* Copyright (C) 2019 Synopsys
6
* Author: Eugeniy Paltsev <[email protected]>
7
*/
8
9
#include <linux/linkage.h>
10
11
#ifdef CONFIG_ARC_HAS_LL64
12
# define LOADX(DST,RX) ldd.ab DST, [RX, 8]
13
# define STOREX(SRC,RX) std.ab SRC, [RX, 8]
14
# define ZOLSHFT 5
15
# define ZOLAND 0x1F
16
#else
17
# define LOADX(DST,RX) ld.ab DST, [RX, 4]
18
# define STOREX(SRC,RX) st.ab SRC, [RX, 4]
19
# define ZOLSHFT 4
20
# define ZOLAND 0xF
21
#endif
22
23
ENTRY_CFI(memcpy)
24
mov r3, r0 ; don;t clobber ret val
25
26
lsr.f lp_count, r2, ZOLSHFT
27
lpnz @.Lcopy32_64bytes
28
;; LOOP START
29
LOADX (r6, r1)
30
LOADX (r8, r1)
31
LOADX (r10, r1)
32
LOADX (r4, r1)
33
STOREX (r6, r3)
34
STOREX (r8, r3)
35
STOREX (r10, r3)
36
STOREX (r4, r3)
37
.Lcopy32_64bytes:
38
39
and.f lp_count, r2, ZOLAND ;Last remaining 31 bytes
40
lpnz @.Lcopyremainingbytes
41
;; LOOP START
42
ldb.ab r5, [r1, 1]
43
stb.ab r5, [r3, 1]
44
.Lcopyremainingbytes:
45
46
j [blink]
47
END_CFI(memcpy)
48
49