mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-04 05:50:17 +00:00 
			
		
		
		
	These are library functions used by ARC700 architecture. Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> Cc: Vineet Gupta <vgupta@synopsys.com> Cc: Francois Bedard <fbedard@synopsys.com> Cc: Wolfgang Denk <wd@denx.de> Cc: Heiko Schocher <hs@denx.de>
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (C) 2004, 2007-2010, 2011-2014 Synopsys, Inc. All rights reserved.
 | 
						|
 *
 | 
						|
 * SPDX-License-Identifier:	GPL-2.0+
 | 
						|
 */
 | 
						|
 | 
						|
#define SMALL	7 /* Must be at least 6 to deal with alignment/loop issues.  */
 | 
						|
 | 
						|
.global memset
 | 
						|
.align 4
 | 
						|
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
 | 
						|
 | 
						|
	.balign	4
 | 
						|
.Laligned:
 | 
						|
	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]
 | 
						|
 | 
						|
/*
 | 
						|
 * memzero: @r0 = mem, @r1 = size_t
 | 
						|
 * memset:  @r0 = mem, @r1 = char, @r2 = size_t
 | 
						|
 */
 | 
						|
 | 
						|
.global memzero
 | 
						|
.align 4
 | 
						|
memzero:
 | 
						|
	/* adjust bzero args to memset args */
 | 
						|
	mov	%r2, %r1
 | 
						|
	mov	%r1, 0
 | 
						|
	/* tail call so need to tinker with blink */
 | 
						|
	b	memset
 |