get rid of custom memcpy funcs
[picodrive.git] / pico / misc_arm.s
CommitLineData
cff531af 1/*
2 * Generic memory routines.
3 * (C) notaz, 2007-2008
4 *
5 * This work is licensed under the terms of MAME license.
6 * See COPYING file in the top-level directory.
7 */
fa1e5e29 8
0a051f55 9@ 0x12345678 -> 0x34127856
10@ r4=temp, lr=0x00ff00ff
11.macro bswap reg
12 and r4, \reg, lr
13 and \reg, lr, \reg, lsr #8
14 orr \reg, \reg, r4, lsl #8
15.endm
16
0a051f55 17@ dest must be halfword aligned, src can be unaligned
18.global memcpy16bswap @ unsigned short *dest, void *src, int count
19
20memcpy16bswap:
21 tst r1, #1
22 bne mcp16bs_cant_align2
23
24 eor r3, r0, r1
25 tst r3, #2
26 bne mcp16bs_cant_align
27
28 tst r0, #2
29 beq mcp16bs_aligned
30 ldrh r3, [r1], #2
31 sub r2, r2, #1
32 orr r3, r3, r3, lsl #16
33 mov r3, r3, lsr #8
34 strh r3, [r0], #2
35
36mcp16bs_aligned:
37 stmfd sp!, {r4,lr}
38 mov lr, #0xff
39 orr lr, lr, lr, lsl #16
40
41 subs r2, r2, #4
42 bmi mcp16bs_fin4
43
44mcp16bs_loop:
45 ldmia r1!, {r3,r12}
46 subs r2, r2, #4
47 bswap r3
48 bswap r12
49 stmia r0!, {r3,r12}
50 bpl mcp16bs_loop
51
52mcp16bs_fin4:
53 tst r2, #2
54 beq mcp16bs_fin2
55 ldr r3, [r1], #4
56 bswap r3
57 str r3, [r0], #4
58
59mcp16bs_fin2:
60 ldmfd sp!, {r4,lr}
61 ands r2, r2, #1
62 bxeq lr
63
64mcp16bs_cant_align:
65 ldrh r3, [r1], #2
66 subs r2, r2, #1
67 orr r3, r3, r3, lsl #16
68 mov r3, r3, lsr #8
69 strh r3, [r0], #2
70 bne mcp16bs_cant_align
71 bx lr
72
73 @ worst case
74mcp16bs_cant_align2:
75 ldrb r3, [r1], #1
76 ldrb r12,[r1], #1
77 subs r2, r2, #1
78 mov r3, r3, lsl #8
79 orr r3, r3, r12
80 strh r3, [r0], #2
81 bne mcp16bs_cant_align2
82 bx lr
83
84
fa1e5e29 85.global memset32 @ int *dest, int c, int count
86
87memset32:
88 stmfd sp!, {lr}
89
90 mov r3, r1
91 subs r2, r2, #4
92 bmi mst32_fin
93
94 mov r12,r1
95 mov lr, r1
96
97mst32_loop:
98 subs r2, r2, #4
99 stmia r0!, {r1,r3,r12,lr}
100 bpl mst32_loop
101
102mst32_fin:
103 tst r2, #1
104 strne r1, [r0], #4
105
106 tst r2, #2
107 stmneia r0!, {r1,r3}
108
109 ldmfd sp!, {lr}
110 bx lr
111
cff531af 112@ vim:filetype=armasm