mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 07:17:45 -04:00

git-svn-id: file:///home/notaz/opt/svn/PicoDrive@874 be3aeb3a-fb24-0410-a615-afba39da0efa
108 lines
2.3 KiB
ArmAsm
108 lines
2.3 KiB
ArmAsm
@ vim:filetype=armasm
|
|
|
|
|
|
@ FIXME: handle dual issue
|
|
.global clut_line2x2 @ void *dest, void *src, unsigned short *pal, int pixels_mask
|
|
|
|
clut_line2x2:
|
|
stmfd sp!, {r4-r11,lr}
|
|
|
|
and lr, r3, #0xff0000
|
|
mov lr, lr, lsr #15 @ mask
|
|
mov r3, r3, lsr #3
|
|
and r3, r3, #0xff @ counter
|
|
add r11,r0, #800*2
|
|
|
|
clut_line_2x2_loop:
|
|
ldmia r1!, {r10,r12}
|
|
|
|
and r4, lr, r10, lsl #1
|
|
ldrh r4, [r2, r4]
|
|
and r5, lr, r10, lsr #7
|
|
ldrh r5, [r2, r5]
|
|
orr r4, r4, r4, lsl #16
|
|
|
|
and r6, lr, r10, lsr #15
|
|
ldrh r6, [r2, r6]
|
|
orr r5, r5, r5, lsl #16
|
|
|
|
and r7, lr, r10, lsr #23
|
|
ldrh r7, [r2, r7]
|
|
orr r6, r6, r6, lsl #16
|
|
|
|
and r8, lr, r12, lsl #1
|
|
ldrh r8, [r2, r8]
|
|
orr r7, r7, r7, lsl #16
|
|
|
|
and r9, lr, r12, lsr #7
|
|
ldrh r9, [r2, r9]
|
|
orr r8, r8, r8, lsl #16
|
|
|
|
and r10,lr, r12, lsr #15
|
|
ldrh r10,[r2, r10]
|
|
orr r9, r9, r9, lsl #16
|
|
|
|
and r12,lr, r12, lsr #23
|
|
ldrh r12,[r2, r12]
|
|
orr r10,r10,r10, lsl #16
|
|
|
|
subs r3, r3, #1
|
|
orr r12,r12,r12, lsl #16
|
|
|
|
stmia r0!, {r4-r10,r12}
|
|
stmia r11!,{r4-r10,r12}
|
|
bne clut_line_2x2_loop
|
|
|
|
ldmfd sp!, {r4-r11,pc}
|
|
|
|
|
|
@ 00 01 11 22 23 33
|
|
@ r4 r5 r6 r7 r8 r9
|
|
|
|
.macro do_4_to_12 rs
|
|
and r4, lr, \rs, lsl #1
|
|
and r6, lr, \rs, lsr #7
|
|
and r7, lr, \rs, lsr #15
|
|
and r9, lr, \rs, lsr #23
|
|
ldrh r4, [r2, r4]
|
|
ldrh r6, [r2, r6]
|
|
ldrh r7, [r2, r7]
|
|
ldrh r9, [r2, r9]
|
|
|
|
orr r5, r4, r6, lsl #16
|
|
orr r4, r4, r4, lsl #16
|
|
orr r6, r6, r6, lsl #16
|
|
|
|
orr r8, r7, r9, lsl #16
|
|
orr r7, r7, r7, lsl #16
|
|
orr r9, r9, r9, lsl #16
|
|
.endm
|
|
|
|
|
|
.global clut_line3x2 @ void *dest, void *src, unsigned short *pal, int pixels_mask
|
|
|
|
clut_line3x2:
|
|
stmfd sp!, {r4-r11,lr}
|
|
|
|
and lr, r3, #0xff0000
|
|
mov lr, lr, lsr #15 @ mask
|
|
mov r3, r3, lsr #3
|
|
and r3, r3, #0xff @ counter
|
|
add r11,r0, #800*2
|
|
|
|
clut_line3x2_loop:
|
|
ldmia r1!, {r10,r12}
|
|
|
|
do_4_to_12 r10
|
|
stmia r0!, {r4-r9}
|
|
stmia r11!,{r4-r9}
|
|
|
|
do_4_to_12 r12
|
|
subs r3, r3, #1
|
|
stmia r0!, {r4-r9}
|
|
stmia r11!,{r4-r9}
|
|
|
|
bne clut_line3x2_loop
|
|
|
|
ldmfd sp!, {r4-r11,pc}
|
|
|