X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pandora%2Fasm_utils.s;h=74dd3fdcca0bbe59afe43c1ad36b56519d924bf6;hb=e99d80480196f551f7e6c06deae3750de19b4c0e;hp=7d57c54e816273e946254ce02cfed1e7d5c8964c;hpb=5d239ae7a46330845af01f9e5f429e78a099fbd9;p=libpicofe.git diff --git a/pandora/asm_utils.s b/pandora/asm_utils.s index 7d57c54..74dd3fd 100644 --- a/pandora/asm_utils.s +++ b/pandora/asm_utils.s @@ -1,17 +1,10 @@ @ vim:filetype=armasm -.global cache_flush_d_inval_i +@ FIXME: handle dual issue +.global clut_line2x2 @ void *dest, void *src, unsigned short *pal, int pixels_mask -cache_flush_d_inval_i: - mov r2, #0x0 @ must be 0 ??? - swi 0x9f0002 - bx lr - - -.global clut_line @ void *dest, void *src, unsigned short *pal, int pixels_mask - -clut_line: +clut_line2x2: stmfd sp!, {r4-r11,lr} and lr, r3, #0xff0000 @@ -20,7 +13,7 @@ clut_line: and r3, r3, #0xff @ counter add r11,r0, #800*2 -clut_line_loop: +clut_line_2x2_loop: ldmia r1!, {r10,r12} and r4, lr, r10, lsl #1 @@ -58,7 +51,58 @@ clut_line_loop: stmia r0!, {r4-r10,r12} stmia r11!,{r4-r10,r12} - bne clut_line_loop + 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}