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