162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <linux/linkage.h> 762306a36Sopenharmony_ci 862306a36Sopenharmony_ciENTRY_CFI(memcpy) 962306a36Sopenharmony_ci or r3,r0,r1 1062306a36Sopenharmony_ci asl_s r3,r3,30 1162306a36Sopenharmony_ci mov_s r5,r0 1262306a36Sopenharmony_ci brls.d r2,r3,.Lcopy_bytewise 1362306a36Sopenharmony_ci sub.f r3,r2,1 1462306a36Sopenharmony_ci ld_s r12,[r1,0] 1562306a36Sopenharmony_ci asr.f lp_count,r3,3 1662306a36Sopenharmony_ci bbit0.d r3,2,.Lnox4 1762306a36Sopenharmony_ci bmsk_s r2,r2,1 1862306a36Sopenharmony_ci st.ab r12,[r5,4] 1962306a36Sopenharmony_ci ld.a r12,[r1,4] 2062306a36Sopenharmony_ci.Lnox4: 2162306a36Sopenharmony_ci lppnz .Lendloop 2262306a36Sopenharmony_ci ld_s r3,[r1,4] 2362306a36Sopenharmony_ci st.ab r12,[r5,4] 2462306a36Sopenharmony_ci ld.a r12,[r1,8] 2562306a36Sopenharmony_ci st.ab r3,[r5,4] 2662306a36Sopenharmony_ci.Lendloop: 2762306a36Sopenharmony_ci breq r2,0,.Last_store 2862306a36Sopenharmony_ci ld r3,[r5,0] 2962306a36Sopenharmony_ci#ifdef __LITTLE_ENDIAN__ 3062306a36Sopenharmony_ci add3 r2,-1,r2 3162306a36Sopenharmony_ci ; uses long immediate 3262306a36Sopenharmony_ci xor_s r12,r12,r3 3362306a36Sopenharmony_ci bmsk r12,r12,r2 3462306a36Sopenharmony_ci xor_s r12,r12,r3 3562306a36Sopenharmony_ci#else /* BIG ENDIAN */ 3662306a36Sopenharmony_ci sub3 r2,31,r2 3762306a36Sopenharmony_ci ; uses long immediate 3862306a36Sopenharmony_ci xor_s r3,r3,r12 3962306a36Sopenharmony_ci bmsk r3,r3,r2 4062306a36Sopenharmony_ci xor_s r12,r12,r3 4162306a36Sopenharmony_ci#endif /* ENDIAN */ 4262306a36Sopenharmony_ci.Last_store: 4362306a36Sopenharmony_ci j_s.d [blink] 4462306a36Sopenharmony_ci st r12,[r5,0] 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci .balign 4 4762306a36Sopenharmony_ci.Lcopy_bytewise: 4862306a36Sopenharmony_ci jcs [blink] 4962306a36Sopenharmony_ci ldb_s r12,[r1,0] 5062306a36Sopenharmony_ci lsr.f lp_count,r3 5162306a36Sopenharmony_ci bhs_s .Lnox1 5262306a36Sopenharmony_ci stb.ab r12,[r5,1] 5362306a36Sopenharmony_ci ldb.a r12,[r1,1] 5462306a36Sopenharmony_ci.Lnox1: 5562306a36Sopenharmony_ci lppnz .Lendbloop 5662306a36Sopenharmony_ci ldb_s r3,[r1,1] 5762306a36Sopenharmony_ci stb.ab r12,[r5,1] 5862306a36Sopenharmony_ci ldb.a r12,[r1,2] 5962306a36Sopenharmony_ci stb.ab r3,[r5,1] 6062306a36Sopenharmony_ci.Lendbloop: 6162306a36Sopenharmony_ci j_s.d [blink] 6262306a36Sopenharmony_ci stb r12,[r5,0] 6362306a36Sopenharmony_ciEND_CFI(memcpy) 64