]> git.lizzy.rs Git - plan9front.git/blob - sys/src/9/alphapc/memset.s
merge
[plan9front.git] / sys / src / 9 / alphapc / memset.s
1 TEXT memset(SB), $0
2         MOVL    R0, R6
3         MOVBU   data+4(FP), R2
4         MOVL    n+8(FP), R10
5
6         ADDL    R10, R0, R8
7
8         CMPUGE  $8, R10, R1             /* need at least 8 bytes */
9         BNE     R1, _1loop
10
11         SLLQ    $8, R2, R1              /* replicate the byte */
12         OR      R1, R2
13         SLLQ    $16, R2, R1
14         OR      R1, R2
15         SLLQ    $32, R2, R1
16         OR      R1, R2
17
18 _align:
19         AND     $(8-1), R6, R1
20         BEQ     R1, _aligned
21
22         MOVB    R2, (R6)
23         ADDL    $1, R6, R6
24         JMP     _align
25
26 _aligned:
27         SUBL    $(64-1), R8, R9         /* end pointer minus slop */
28 _64loop:
29         CMPUGT  R9, R6, R1
30         BEQ     R1, _8tail
31
32         MOVQ    R2, (R6)
33         MOVQ    R2, 8(R6)
34         MOVQ    R2, 16(R6)
35         MOVQ    R2, 24(R6)
36         MOVQ    R2, 32(R6)
37         MOVQ    R2, 40(R6)
38         MOVQ    R2, 48(R6)
39         MOVQ    R2, 56(R6)
40         ADDL    $64, R6, R6
41         JMP     _64loop
42
43 _8tail:
44         SUBL    $(8-1), R8, R9
45 _8loop:
46         CMPUGT  R9, R6, R1
47         BEQ     R1, _1loop
48
49         MOVQ    R2, (R6)
50         ADDL    $8, R6
51         JMP     _8loop
52
53 _1loop:
54         CMPUGT  R8, R6, R1
55         BEQ     R1, _ret
56         MOVB    R2, (R6)
57         ADDL    $1, R6
58         JMP     _1loop
59
60 _ret:
61         RET