| 
									
										
										
										
											2013-01-18 15:12:18 +05:30
										 |  |  | /* | 
					
						
							|  |  |  |  * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software; you can redistribute it and/or modify
 | 
					
						
							|  |  |  |  * it under the terms of the GNU General Public License version 2 as | 
					
						
							|  |  |  |  * published by the Free Software Foundation. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-07 13:47:43 +05:30
										 |  |  | #include <linux/linkage.h> | 
					
						
							| 
									
										
										
										
											2013-01-18 15:12:18 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-07 13:47:43 +05:30
										 |  |  | ENTRY(memcpy) | 
					
						
							| 
									
										
										
										
											2013-01-18 15:12:18 +05:30
										 |  |  | 	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] | 
					
						
							| 
									
										
										
										
											2014-02-07 13:47:43 +05:30
										 |  |  | END(memcpy) |