]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libc/arm/memset.s
pool: do poolcheck when free nodes get corrupted instead of assert
[plan9front.git] / sys / src / libc / arm / memset.s
1 TO = 1
2 TOE = 2
3 N = 3
4 TMP = 3                                 /* N and TMP don't overlap */
5
6 TEXT memset(SB), $0
7         MOVW    R0, R(TO)
8         MOVW    data+4(FP), R(4)
9         MOVW    n+8(FP), R(N)
10
11         ADD     R(N), R(TO), R(TOE)     /* to end pointer */
12
13         CMP     $4, R(N)                /* need at least 4 bytes to copy */
14         BLT     _1tail
15
16         AND     $0xFF, R(4)
17         ORR     R(4)<<8, R(4)
18         ORR     R(4)<<16, R(4)          /* replicate to word */
19
20 _4align:                                /* align on 4 */
21         AND.S   $3, R(TO), R(TMP)
22         BEQ     _4aligned
23
24         MOVBU.P R(4), 1(R(TO))          /* implicit write back */
25         B       _4align
26
27 _4aligned:
28         SUB     $15, R(TOE), R(TMP)     /* do 16-byte chunks if possible */
29         CMP     R(TMP), R(TO)
30         BHS     _4tail
31
32         MOVW    R4, R5                  /* replicate */
33         MOVW    R4, R6
34         MOVW    R4, R7
35
36 _f16loop:
37         CMP     R(TMP), R(TO)
38         BHS     _4tail
39
40         MOVM.IA.W [R4-R7], (R(TO))
41         B       _f16loop
42
43 _4tail:
44         SUB     $3, R(TOE), R(TMP)      /* do remaining words if possible */
45 _4loop:
46         CMP     R(TMP), R(TO)
47         BHS     _1tail
48
49         MOVW.P  R(4), 4(R(TO))          /* implicit write back */
50         B       _4loop
51
52 _1tail:
53         CMP     R(TO), R(TOE)
54         BEQ     _return
55
56         MOVBU.P R(4), 1(R(TO))          /* implicit write back */
57         B       _1tail
58
59 _return:
60         RET