67 lines
		
	
	
	
		
			1.2 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
		
		
			
		
	
	
			67 lines
		
	
	
	
		
			1.2 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * 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.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <asm/linkage.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ARC_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]
							 | 
						||
| 
								 | 
							
								ARC_EXIT memcpy
							 |