Loading...
1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
4 */
5
6#include <linux/linkage.h>
7
8ENTRY_CFI(memcpy)
9 or r3,r0,r1
10 asl_s r3,r3,30
11 mov_s r5,r0
12 brls.d r2,r3,.Lcopy_bytewise
13 sub.f r3,r2,1
14 ld_s r12,[r1,0]
15 asr.f lp_count,r3,3
16 bbit0.d r3,2,.Lnox4
17 bmsk_s r2,r2,1
18 st.ab r12,[r5,4]
19 ld.a r12,[r1,4]
20.Lnox4:
21 lppnz .Lendloop
22 ld_s r3,[r1,4]
23 st.ab r12,[r5,4]
24 ld.a r12,[r1,8]
25 st.ab r3,[r5,4]
26.Lendloop:
27 breq r2,0,.Last_store
28 ld r3,[r5,0]
29#ifdef __LITTLE_ENDIAN__
30 add3 r2,-1,r2
31 ; uses long immediate
32 xor_s r12,r12,r3
33 bmsk r12,r12,r2
34 xor_s r12,r12,r3
35#else /* BIG ENDIAN */
36 sub3 r2,31,r2
37 ; uses long immediate
38 xor_s r3,r3,r12
39 bmsk r3,r3,r2
40 xor_s r12,r12,r3
41#endif /* ENDIAN */
42.Last_store:
43 j_s.d [blink]
44 st r12,[r5,0]
45
46 .balign 4
47.Lcopy_bytewise:
48 jcs [blink]
49 ldb_s r12,[r1,0]
50 lsr.f lp_count,r3
51 bhs_s .Lnox1
52 stb.ab r12,[r5,1]
53 ldb.a r12,[r1,1]
54.Lnox1:
55 lppnz .Lendbloop
56 ldb_s r3,[r1,1]
57 stb.ab r12,[r5,1]
58 ldb.a r12,[r1,2]
59 stb.ab r3,[r5,1]
60.Lendbloop:
61 j_s.d [blink]
62 stb r12,[r5,0]
63END_CFI(memcpy)
1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
4 */
5
6#include <linux/linkage.h>
7
8ENTRY_CFI(memcpy)
9 or r3,r0,r1
10 asl_s r3,r3,30
11 mov_s r5,r0
12 brls.d r2,r3,.Lcopy_bytewise
13 sub.f r3,r2,1
14 ld_s r12,[r1,0]
15 asr.f lp_count,r3,3
16 bbit0.d r3,2,.Lnox4
17 bmsk_s r2,r2,1
18 st.ab r12,[r5,4]
19 ld.a r12,[r1,4]
20.Lnox4:
21 lppnz .Lendloop
22 ld_s r3,[r1,4]
23 st.ab r12,[r5,4]
24 ld.a r12,[r1,8]
25 st.ab r3,[r5,4]
26.Lendloop:
27 breq r2,0,.Last_store
28 ld r3,[r5,0]
29#ifdef __LITTLE_ENDIAN__
30 add3 r2,-1,r2
31 ; uses long immediate
32 xor_s r12,r12,r3
33 bmsk r12,r12,r2
34 xor_s r12,r12,r3
35#else /* BIG ENDIAN */
36 sub3 r2,31,r2
37 ; uses long immediate
38 xor_s r3,r3,r12
39 bmsk r3,r3,r2
40 xor_s r12,r12,r3
41#endif /* ENDIAN */
42.Last_store:
43 j_s.d [blink]
44 st r12,[r5,0]
45
46 .balign 4
47.Lcopy_bytewise:
48 jcs [blink]
49 ldb_s r12,[r1,0]
50 lsr.f lp_count,r3
51 bhs_s .Lnox1
52 stb.ab r12,[r5,1]
53 ldb.a r12,[r1,1]
54.Lnox1:
55 lppnz .Lendbloop
56 ldb_s r3,[r1,1]
57 stb.ab r12,[r5,1]
58 ldb.a r12,[r1,2]
59 stb.ab r3,[r5,1]
60.Lendbloop:
61 j_s.d [blink]
62 stb r12,[r5,0]
63END_CFI(memcpy)