5e0f16880628c90dcb6ac26cde764f9d3f3d136e
[drnoksnes] / memset.s
1                 .text
2                 .global gp2x_memset;
3                 ;@.type gp2x_memset,%function
4                 .align 4;
5
6 gp2x_memset:
7         mov     a4, a1
8         cmp     a3, $8          @ at least 8 bytes to do?
9         blt     2f
10         orr     a2, a2, a2, lsl $8
11         orr     a2, a2, a2, lsl $16
12 1:
13         tst     a4, $3          @ aligned yet?
14         strneb  a2, [a4], $1
15         subne   a3, a3, $1
16         bne     1b
17         mov     ip, a2
18 1:
19         cmp     a3, $8          @ 8 bytes still to do?
20         blt     2f
21         stmia   a4!, {a2, ip}
22         sub     a3, a3, $8
23         cmp     a3, $8          @ 8 bytes still to do?
24         blt     2f
25         stmia   a4!, {a2, ip}
26         sub     a3, a3, $8
27         cmp     a3, $8          @ 8 bytes still to do?
28         blt     2f
29         stmia   a4!, {a2, ip}
30         sub     a3, a3, $8
31         cmp     a3, $8          @ 8 bytes still to do?
32         stmgeia a4!, {a2, ip}
33         subge   a3, a3, $8
34         bge     1b
35 2:
36         movs    a3, a3          @ anything left?
37         moveq   pc, lr          @ nope
38         rsb     a3, a3, $7
39         add     pc, pc, a3, lsl $2
40         mov     r0, r0
41         strb    a2, [a4], $1
42         strb    a2, [a4], $1
43         strb    a2, [a4], $1
44         strb    a2, [a4], $1
45         strb    a2, [a4], $1
46         strb    a2, [a4], $1
47         strb    a2, [a4], $1
48         mov     pc, lr
49
50
51