FDS fixed for asm core
[fceu.git] / drivers / gp2x / asmutils.s
CommitLineData
937bf65b 1@ vim:filetype=armasm
2
3@ test
4.global flushcache @ beginning_addr, end_addr, flags
5
6flushcache:
7 swi #0x9f0002
8 mov pc, lr
9
c0bf6f9f 10
6587f346 11.global block_or @ void *src, size_t n, int pat
12
13block_or:
14 stmfd sp!, {r4-r5}
15 orr r2, r2, r2, lsl #8
16 orr r2, r2, r2, lsl #16
17 mov r1, r1, lsr #4
18block_loop_or:
19 ldmia r0, {r3-r5,r12}
20 subs r1, r1, #1
21 orr r3, r3, r2
22 orr r4, r4, r2
23 orr r5, r5, r2
24 orr r12,r12,r2
25 stmia r0!, {r3-r5,r12}
26 bne block_loop_or
27 ldmfd sp!, {r4-r5}
28 bx lr
29
30
31.global block_andor @ void *src, size_t n, int andpat, int orpat
32
33block_andor:
34 stmfd sp!, {r4-r6}
35 orr r2, r2, r2, lsl #8
36 orr r2, r2, r2, lsl #16
37 orr r3, r3, r3, lsl #8
38 orr r3, r3, r3, lsl #16
39 mov r1, r1, lsr #4
40block_loop_andor:
41 ldmia r0, {r4-r6,r12}
42 subs r1, r1, #1
43 and r4, r4, r2
44 orr r4, r4, r3
45 and r5, r5, r2
46 orr r5, r5, r3
47 and r6, r6, r2
48 orr r6, r6, r3
49 and r12,r12,r2
50 orr r12,r12,r3
51 stmia r0!, {r4-r6,r12}
52 bne block_loop_andor
53 ldmfd sp!, {r4-r6}
54 bx lr
55
56
57
c0bf6f9f 58/* buggy and slow, probably because function call overhead
59@ renderer helper, based on bitbank's method
60.global draw8pix @ uint8 *P, uint8 *C, uint8 *PALRAM @ dest, src, pal
61
62draw8pix:
63 stmfd sp!, {r4,r5}
64
65 ldrb r3, [r1] @ get bit 0 pixels
66 mov r12,#1
67 orr r12,r12,r12,lsl #8
68 orr r12,r12,r12,lsl #16
69 ldrb r1, [r1, #8] @ get bit 1 pixels
70 orr r3, r3, r3, lsl #9 @ shift them over 1 byte + 1 bit
71 orr r3, r3, r3, lsl #18 @ now 4 pixels take up 4 bytes
72 and r4, r12,r3, lsr #7 @ mask off the upper nibble pixels we want
73 and r5, r12,r3, lsr #3 @ mask off the lower nibble pixels we want
74 ldr r2, [r2]
75
76 orr r1, r1, r1, lsl #9 @ process the bit 1 pixels
77 orr r1, r1, r1, lsl #18
78 and r3, r12,r1, lsr #7 @ mask off the upper nibble pixels we want
79 and r1, r12,r1, lsr #3 @ mask off the lower nibble
80 orr r4, r4, r3, lsl #1
81 orr r5, r5, r1, lsl #5
82
83 @ can this be avoided?
84 mov r4, r4, lsl #3 @ *8
85 mov r3, r2, ror r4
86 strb r3, [r0], #1
87 mov r4, r4, lsr #8
88 mov r3, r2, ror r4
89 strb r3, [r0], #1
90 mov r4, r4, lsr #8
91 mov r3, r2, ror r4
92 strb r3, [r0], #1
93 mov r4, r4, lsr #8
94 mov r3, r2, ror r4
95 strb r3, [r0], #1
96
97 mov r5, r5, lsl #3 @ *8
98 mov r3, r2, ror r5
99 strb r3, [r0], #1
100 mov r5, r5, lsr #8
101 mov r3, r2, ror r5
102 strb r3, [r0], #1
103 mov r5, r5, lsr #8
104 mov r3, r2, ror r5
105 strb r3, [r0], #1
106 mov r5, r5, lsr #8
107 mov r3, r2, ror r5
108 strb r3, [r0], #1
109
110 ldmfd sp!, {r4,r5}
111 bx lr
112*/
113