60 lines
		
	
	
	
		
			1.2 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
		
		
			
		
	
	
			60 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> | ||
|  | 
 | ||
|  | #define SMALL	7 /* Must be at least 6 to deal with alignment/loop issues.  */ | ||
|  | 
 | ||
|  | ARC_ENTRY memset | ||
|  | 	mov_s	r4,r0 | ||
|  | 	or	r12,r0,r2 | ||
|  | 	bmsk.f	r12,r12,1 | ||
|  | 	extb_s	r1,r1 | ||
|  | 	asl	r3,r1,8 | ||
|  | 	beq.d	.Laligned | ||
|  | 	or_s	r1,r1,r3 | ||
|  | 	brls	r2,SMALL,.Ltiny | ||
|  | 	add	r3,r2,r0 | ||
|  | 	stb	r1,[r3,-1] | ||
|  | 	bclr_s	r3,r3,0 | ||
|  | 	stw	r1,[r3,-2] | ||
|  | 	bmsk.f	r12,r0,1 | ||
|  | 	add_s	r2,r2,r12 | ||
|  | 	sub.ne	r2,r2,4 | ||
|  | 	stb.ab	r1,[r4,1] | ||
|  | 	and	r4,r4,-2 | ||
|  | 	stw.ab	r1,[r4,2] | ||
|  | 	and	r4,r4,-4 | ||
|  | .Laligned:	; This code address should be aligned for speed.
 | ||
|  | 	asl	r3,r1,16 | ||
|  | 	lsr.f	lp_count,r2,2 | ||
|  | 	or_s	r1,r1,r3 | ||
|  | 	lpne	.Loop_end | ||
|  | 	st.ab	r1,[r4,4] | ||
|  | .Loop_end: | ||
|  | 	j_s	[blink] | ||
|  | 
 | ||
|  | 	.balign	4
 | ||
|  | .Ltiny: | ||
|  | 	mov.f	lp_count,r2 | ||
|  | 	lpne	.Ltiny_end | ||
|  | 	stb.ab	r1,[r4,1] | ||
|  | .Ltiny_end: | ||
|  | 	j_s	[blink] | ||
|  | ARC_EXIT memset | ||
|  | 
 | ||
|  | ; memzero: @r0 = mem, @r1 = size_t
 | ||
|  | ; memset:  @r0 = mem, @r1 = char, @r2 = size_t
 | ||
|  | 
 | ||
|  | ARC_ENTRY memzero | ||
|  |     ; adjust bzero args to memset args
 | ||
|  |     mov r2, r1 | ||
|  |     mov r1, 0 | ||
|  |     b  memset    ;tail call so need to tinker with blink
 | ||
|  | ARC_EXIT memzero |