Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arc/lib/memset.S
26424 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
4
*/
5
6
#include <linux/linkage.h>
7
8
#define SMALL 7 /* Must be at least 6 to deal with alignment/loop issues. */
9
10
ENTRY_CFI(memset)
11
mov_s r4,r0
12
or r12,r0,r2
13
bmsk.f r12,r12,1
14
extb_s r1,r1
15
asl r3,r1,8
16
beq.d .Laligned
17
or_s r1,r1,r3
18
brls r2,SMALL,.Ltiny
19
add r3,r2,r0
20
stb r1,[r3,-1]
21
bclr_s r3,r3,0
22
stw r1,[r3,-2]
23
bmsk.f r12,r0,1
24
add_s r2,r2,r12
25
sub.ne r2,r2,4
26
stb.ab r1,[r4,1]
27
and r4,r4,-2
28
stw.ab r1,[r4,2]
29
and r4,r4,-4
30
.Laligned: ; This code address should be aligned for speed.
31
asl r3,r1,16
32
lsr.f lp_count,r2,2
33
or_s r1,r1,r3
34
lpne .Loop_end
35
st.ab r1,[r4,4]
36
.Loop_end:
37
j_s [blink]
38
39
.balign 4
40
.Ltiny:
41
mov.f lp_count,r2
42
lpne .Ltiny_end
43
stb.ab r1,[r4,1]
44
.Ltiny_end:
45
j_s [blink]
46
END_CFI(memset)
47
48
; memzero: @r0 = mem, @r1 = size_t
49
; memset: @r0 = mem, @r1 = char, @r2 = size_t
50
51
ENTRY_CFI(memzero)
52
; adjust bzero args to memset args
53
mov r2, r1
54
mov r1, 0
55
b memset ;tail call so need to tinker with blink
56
END_CFI(memzero)
57
58