workaround a problem with the harmattan gcc
[drnoksnes] / misc_armel.s
1 @ vim:filetype=armasm
2
3 @ Generic memory routines.
4 @ (c) Copyright 2007, Grazvydas "notaz" Ignotas
5
6 .text
7
8 .global memcpy32 @ int *dest, int *src, int count
9 .type memcpy32, function
10
11 memcpy32:
12     stmfd   sp!, {r4,lr}
13
14     subs    r2, r2, #4
15     bmi     mcp32_fin
16
17 mcp32_loop:
18     ldmia   r1!, {r3,r4,r12,lr}
19     subs    r2, r2, #4
20     stmia   r0!, {r3,r4,r12,lr}
21     bpl     mcp32_loop
22
23 mcp32_fin:
24     tst     r2, #3
25     ldmeqfd sp!, {r4,pc}
26     tst     r2, #1
27     ldrne   r3, [r1], #4
28     strne   r3, [r0], #4
29
30 mcp32_no_unal1:
31     tst     r2, #2
32     ldmneia r1!, {r3,r12}
33     ldmfd   sp!, {r4,lr}
34     stmneia r0!, {r3,r12}
35     bx      lr
36
37 .size memcpy32, .-memcpy32
38
39 .global memset32 @ int *dest, int c, int count
40 .type memset32, function
41
42 memset32:
43     stmfd   sp!, {lr}
44
45     mov     r3, r1
46     subs    r2, r2, #4
47     bmi     mst32_fin
48
49     mov     r12,r1
50     mov     lr, r1
51
52 mst32_loop:
53     subs    r2, r2, #4
54     stmia   r0!, {r1,r3,r12,lr}
55     bpl     mst32_loop
56
57 mst32_fin:
58     tst     r2, #1
59     strne   r1, [r0], #4
60
61     tst     r2, #2
62     stmneia r0!, {r1,r3}
63
64     ldmfd   sp!, {lr}
65     bx      lr
66
67 .size memset32, .-memset32
68