Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/sh/lib/memset.S
10817 views
1
/* $Id: memset.S,v 1.1 2000/04/14 16:49:01 mjd Exp $
2
*
3
* "memset" implementation of SuperH
4
*
5
* Copyright (C) 1999 Niibe Yutaka
6
*
7
*/
8
9
/*
10
* void *memset(void *s, int c, size_t n);
11
*/
12
13
#include <linux/linkage.h>
14
15
ENTRY(memset)
16
tst r6,r6
17
bt/s 5f ! if n=0, do nothing
18
add r6,r4
19
mov #12,r0
20
cmp/gt r6,r0
21
bt/s 4f ! if it's too small, set a byte at once
22
mov r4,r0
23
and #3,r0
24
cmp/eq #0,r0
25
bt/s 2f ! It's aligned
26
sub r0,r6
27
1:
28
dt r0
29
bf/s 1b
30
mov.b r5,@-r4
31
2: ! make VVVV
32
extu.b r5,r5
33
swap.b r5,r0 ! V0
34
or r0,r5 ! VV
35
swap.w r5,r0 ! VV00
36
or r0,r5 ! VVVV
37
!
38
mov r6,r0
39
shlr2 r0
40
shlr r0 ! r0 = r6 >> 3
41
3:
42
dt r0
43
mov.l r5,@-r4 ! set 8-byte at once
44
bf/s 3b
45
mov.l r5,@-r4
46
!
47
mov #7,r0
48
and r0,r6
49
tst r6,r6
50
bt 5f
51
! fill bytes
52
4:
53
dt r6
54
bf/s 4b
55
mov.b r5,@-r4
56
5:
57
rts
58
mov r4,r0
59
60