forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.1 KiB
56 lines
1.1 KiB
/* 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)
|
|
|