giz port wip
[picodrive.git] / platform / gizmondo / asm_utils.s
1 @ vim:filetype=armasm
2
3
4 .global vidCpy8to16_40 @ void *dest, void *src, short *pal, int lines
5
6 vidCpy8to16_40:
7     stmfd   sp!, {r4-r9,lr}
8
9     mov     r3, r3, lsr #1
10     orr     r3, r3, r3, lsl #8
11     add     r1, r1, #8
12     orr     r3, r3, #(320/8-1)<<24
13
14     @ even lines
15 vcloop_40_aligned:
16     ldr     r12, [r1], #4
17     ldr     r7,  [r1], #4
18
19     and     r4, lr, r12, lsl #1
20     ldrh    r4, [r2, r4]
21     and     r5, lr, r12, lsr #7
22     ldrh    r5, [r2, r5]
23     and     r6, lr, r12, lsr #15
24     ldrh    r6, [r2, r6]
25     orr     r4, r4, r5, lsl #16
26
27     and     r5, lr, r12, lsr #23
28     ldrh    r5, [r2, r5]
29     and     r8, lr, r7, lsl #1
30     ldrh    r8, [r2, r8]
31     orr     r5, r6, r5, lsl #16
32
33     and     r6, lr, r7, lsr #7
34     ldrh    r6, [r2, r6]
35     and     r12,lr, r7, lsr #15
36     ldrh    r12,[r2, r12]
37     and     r9, lr, r7, lsr #23
38     ldrh    r9, [r2, r9]
39     orr     r8, r8, r6, lsl #16
40
41     subs    r3, r3, #1<<24
42     orr     r12,r12, r9, lsl #16
43
44     stmia   r0!, {r4,r5,r8,r12}
45     bpl     vcloop_40_aligned
46
47     add     r1, r1, #336             @ skip a line and 1 col
48     add     r0, r0, #320*2+2*2
49     add     r3, r3, #(320/8)<<24
50     sub     r3, r3, #1
51     tst     r3, #0xff
52     bne     vcloop_40_aligned
53
54     and     r4, r3, #0xff00
55     orr     r3, r3, r4, lsr #8
56     mov     r4, r4, lsr #7
57     sub     r6, r4, #1
58     mov     r5, #320*2
59     add     r5, r5, #2
60     mul     r4, r5, r6
61     sub     r0, r0, r4
62     mov     r5, #328
63     mul     r4, r5, r6
64     sub     r1, r1, r4
65
66  @ FIXME FIXME FIXME
67  ldmfd   sp!, {r4-r9,lr}
68  bx      lr
69
70 vcloop_40_unaligned:
71     ldr     r12, [r1], #4
72     ldr     r7,  [r1], #4
73
74     and     r4, lr, r12, lsl #1
75     ldrh    r4, [r2, r4]
76     and     r5, lr, r12, lsr #7
77     ldrh    r5, [r2, r5]
78    strh    r4, [r0]!
79     and     r6, lr, r12, lsr #15
80     ldrh    r6, [r2, r6]
81
82     and     r4, lr, r12, lsr #23
83     ldrh    r4, [r2, r4]
84      orr     r5, r5, r6, lsl #16
85
86     and     r8, lr, r7, lsl #1
87     ldrh    r8, [r2, r8]
88
89     and     r6, lr, r7, lsr #7
90     ldrh    r6, [r2, r6]
91      orr     r8, r4, r8, lsl #16
92
93     and     r12,lr, r7, lsr #15
94     ldrh    r12,[r2, r12]
95
96     and     r4, lr, r7, lsr #23
97     ldrh    r4, [r2, r6]
98      orr     r12,r6, r12,lsl #16
99     subs    r3, r3, #1<<24
100
101     stmia   r0!, {r5,r8,r12}
102    strh    r4, [r0]!
103     bpl     vcloop_40_unaligned
104
105     add     r1, r1, #336             @ skip a line and 1 col
106     add     r0, r0, #320*2+2*2
107     add     r3, r3, #(320/8)<<24
108     sub     r3, r3, #1
109     tst     r3, #0xff
110     bne     vcloop_40_unaligned
111
112     ldmfd   sp!, {r4-r9,lr}
113     bx      lr
114
115
116