fa1e5e29 |
1 | |
2 | @ vim:filetype=armasm |
3 | |
4 | |
5 | .global memcpy16 @ unsigned short *dest, unsigned short *src, int count |
6 | |
7 | memcpy16: |
8 | eor r3, r0, r1 |
9 | tst r3, #2 |
10 | bne mcp16_cant_align |
11 | |
12 | tst r0, #2 |
13 | ldrneh r3, [r1], #2 |
14 | subne r2, r2, #1 |
15 | strneh r3, [r0], #2 |
16 | |
17 | subs r2, r2, #4 |
18 | bmi mcp16_fin |
19 | |
20 | mcp16_loop: |
21 | ldmia r1!, {r3,r12} |
22 | subs r2, r2, #4 |
23 | stmia r0!, {r3,r12} |
24 | bpl mcp16_loop |
25 | |
26 | mcp16_fin: |
27 | tst r2, #2 |
28 | ldrne r3, [r1], #4 |
29 | strne r3, [r0], #4 |
30 | ands r2, r2, #1 |
31 | bxeq lr |
32 | |
33 | mcp16_cant_align: |
34 | ldrh r3, [r1], #2 |
35 | subs r2, r2, #1 |
36 | strh r3, [r0], #2 |
37 | bne mcp16_cant_align |
38 | |
39 | bx lr |
40 | |
41 | |
42 | |
43 | .global memcpy32 @ int *dest, int *src, int count |
44 | |
45 | memcpy32: |
46 | stmfd sp!, {r4,lr} |
47 | |
48 | subs r2, r2, #4 |
49 | bmi mcp32_fin |
50 | |
51 | mcp32_loop: |
52 | ldmia r1!, {r3,r4,r12,lr} |
53 | subs r2, r2, #4 |
54 | stmia r0!, {r3,r4,r12,lr} |
55 | bpl mcp32_loop |
56 | |
57 | mcp32_fin: |
58 | tst r2, #3 |
59 | ldmeqfd sp!, {r4,pc} |
60 | tst r2, #1 |
61 | ldrne r3, [r1], #4 |
62 | strne r3, [r0], #4 |
63 | |
64 | mcp32_no_unal1: |
65 | tst r2, #2 |
66 | ldmneia r1!, {r3,r12} |
67 | ldmfd sp!, {r4,lr} |
68 | stmneia r0!, {r3,r12} |
69 | bx lr |
70 | |
71 | |
72 | |
73 | .global memset32 @ int *dest, int c, int count |
74 | |
75 | memset32: |
76 | stmfd sp!, {lr} |
77 | |
78 | mov r3, r1 |
79 | subs r2, r2, #4 |
80 | bmi mst32_fin |
81 | |
82 | mov r12,r1 |
83 | mov lr, r1 |
84 | |
85 | mst32_loop: |
86 | subs r2, r2, #4 |
87 | stmia r0!, {r1,r3,r12,lr} |
88 | bpl mst32_loop |
89 | |
90 | mst32_fin: |
91 | tst r2, #1 |
92 | strne r1, [r0], #4 |
93 | |
94 | tst r2, #2 |
95 | stmneia r0!, {r1,r3} |
96 | |
97 | ldmfd sp!, {lr} |
98 | bx lr |
99 | |
100 | |
101 | |