1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#include "PR/R4300.h"
#include "sys/asm.h"
#include "sys/regdef.h"
.text
#ifdef __sgi
WEAK(bzero, _bzero)
WEAK(blkclr, _blkclr)
#else
#define _bzero bzero
#define _blkclr blkclr
#endif
LEAF(_bzero)
XLEAF(_blkclr)
negu v1, a0
blt a1, 12, bytezero
andi v1, v1, 0x3
subu a1, a1, v1
beqz v1, blkzero
swl zero, 0(a0)
addu a0, a0, v1
blkzero:
and a3, a1, ~31
subu a1, a1, a3
beqz a3, wordzero
addu a3, a3, a0
1:
sw zero, 0(a0)
sw zero, 4(a0)
sw zero, 8(a0)
sw zero, 12(a0)
addiu a0, a0, 32
sw zero, -16(a0)
sw zero, -12(a0)
sw zero, -8(a0)
sw zero, -4(a0)
bne a0, a3, 1b
wordzero:
and a3, a1, ~3
subu a1, a1, a3
beqz a3, bytezero
addu a3, a3, a0
1:
addiu a0, a0, 4
sw zero, -4(a0)
bne a0, a3, 1b
bytezero:
blez a1, zerodone
#nop
addu a1, a1, a0
1:
addiu a0, a0, 1
sb zero, -1(a0)
bne a0, a1, 1b
zerodone:
jr ra
.end _bzero
|