| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | /* * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com) * Copyright (C) 2007 ARC International (UK) LTD * * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. */#include <sysdep.h>/* This memcpy implementation does not support objects of 1GB or larger -   the check for alignment does not work then.  *//* We assume that most sources and destinations are aligned, and   that also lengths are mostly a multiple of four, although to a lesser   extent.  */ENTRY(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]END(memcpy)libc_hidden_def(memcpy)
 |