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