/* * Copyright (C) 2004, 2007-2010, 2011-2014 Synopsys, Inc. All rights reserved. * * SPDX-License-Identifier: GPL-2.0+ */ .global memcpy .align 4 memcpy: or %r3, %r0, %r1 asl_s %r3, %r3, 30 mov_s %r5, %r0 brls.d %r2, %r3, .Lcopy_bytewise sub.f %r3, %r2, 1 ld_s %r12, [%r1, 0] asr.f %lp_count, %r3, 3 bbit0.d %r3, 2, .Lnox4 bmsk_s %r2, %r2, 1 st.ab %r12, [%r5, 4] ld.a %r12, [%r1, 4] .Lnox4: lppnz .Lendloop ld_s %r3, [%r1, 4] st.ab %r12, [%r5, 4] ld.a %r12, [%r1, 8] st.ab %r3, [%r5, 4] .Lendloop: breq %r2, 0, .Last_store ld %r3, [%r5, 0] #ifdef __LITTLE_ENDIAN__ add3 %r2, -1, %r2 /* uses long immediate */ xor_s %r12, %r12, %r3 bmsk %r12, %r12, %r2 xor_s %r12, %r12, %r3 #else /* __BIG_ENDIAN__ */ sub3 %r2, 31, %r2 /* uses long immediate */ xor_s %r3, %r3, %r12 bmsk %r3, %r3, %r2 xor_s %r12, %r12, %r3 #endif /* _ENDIAN__ */ .Last_store: j_s.d [%blink] st %r12, [%r5, 0] .balign 4 .Lcopy_bytewise: jcs [%blink] ldb_s %r12, [%r1, 0] lsr.f %lp_count, %r3 bhs_s .Lnox1 stb.ab %r12, [%r5, 1] ldb.a %r12, [%r1, 1] .Lnox1: lppnz .Lendbloop ldb_s %r3, [%r1, 1] stb.ab %r12, [%r5, 1] ldb.a %r12, [%r1, 2] stb.ab %r3, [%r5, 1] .Lendbloop: j_s.d [%blink] stb %r12, [%r5, 0]