| /* SPDX-License-Identifier: GPL-2.0-only */ | 
 | /* | 
 |  * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) | 
 |  */ | 
 |  | 
 | #include <linux/linkage.h> | 
 |  | 
 | #define SMALL	7 /* Must be at least 6 to deal with alignment/loop issues.  */ | 
 |  | 
 | ENTRY_CFI(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] | 
 | END_CFI(memset) | 
 |  | 
 | ; memzero: @r0 = mem, @r1 = size_t | 
 | ; memset:  @r0 = mem, @r1 = char, @r2 = size_t | 
 |  | 
 | ENTRY_CFI(memzero) | 
 |     ; adjust bzero args to memset args | 
 |     mov r2, r1 | 
 |     mov r1, 0 | 
 |     b  memset    ;tail call so need to tinker with blink | 
 | END_CFI(memzero) |