56 lines · 1.1 KB · Assembly
RawDownload
/* 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 blinkEND_CFI(memzero)