/* 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)
/* 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)