1/* 2 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 as 6 * published by the Free Software Foundation. 7 */ 8 9#include <linux/linkage.h> 10 11ENTRY(memcpy) 12 or r3,r0,r1 13 asl_s r3,r3,30 14 mov_s r5,r0 15 brls.d r2,r3,.Lcopy_bytewise 16 sub.f r3,r2,1 17 ld_s r12,[r1,0] 18 asr.f lp_count,r3,3 19 bbit0.d r3,2,.Lnox4 20 bmsk_s r2,r2,1 21 st.ab r12,[r5,4] 22 ld.a r12,[r1,4] 23.Lnox4: 24 lppnz .Lendloop 25 ld_s r3,[r1,4] 26 st.ab r12,[r5,4] 27 ld.a r12,[r1,8] 28 st.ab r3,[r5,4] 29.Lendloop: 30 breq r2,0,.Last_store 31 ld r3,[r5,0] 32#ifdef __LITTLE_ENDIAN__ 33 add3 r2,-1,r2 34 ; uses long immediate 35 xor_s r12,r12,r3 36 bmsk r12,r12,r2 37 xor_s r12,r12,r3 38#else /* BIG ENDIAN */ 39 sub3 r2,31,r2 40 ; uses long immediate 41 xor_s r3,r3,r12 42 bmsk r3,r3,r2 43 xor_s r12,r12,r3 44#endif /* ENDIAN */ 45.Last_store: 46 j_s.d [blink] 47 st r12,[r5,0] 48 49 .balign 4 50.Lcopy_bytewise: 51 jcs [blink] 52 ldb_s r12,[r1,0] 53 lsr.f lp_count,r3 54 bhs_s .Lnox1 55 stb.ab r12,[r5,1] 56 ldb.a r12,[r1,1] 57.Lnox1: 58 lppnz .Lendbloop 59 ldb_s r3,[r1,1] 60 stb.ab r12,[r5,1] 61 ldb.a r12,[r1,2] 62 stb.ab r3,[r5,1] 63.Lendbloop: 64 j_s.d [blink] 65 stb r12,[r5,0] 66END(memcpy) 67