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