X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fgp2x%2Fasmutils.s;h=a91cfaf2b817d7a4308d715547a48ad4ee21439a;hb=21afaa365c97896da6ccbdd6540e20f2d2bb4990;hp=4a2e1a3b99d47623aa2b5d12d9c211adb7ff3756;hpb=989672f4f2b4b4b2b373271374e6546546091c10;p=fceu.git diff --git a/drivers/gp2x/asmutils.s b/drivers/gp2x/asmutils.s index 4a2e1a3..a91cfaf 100644 --- a/drivers/gp2x/asmutils.s +++ b/drivers/gp2x/asmutils.s @@ -28,6 +28,26 @@ block_loop_or: bx lr +.global block_and @ void *src, size_t n, int andpat + +block_and: + stmfd sp!, {r4-r5} + orr r2, r2, r2, lsl #8 + orr r2, r2, r2, lsl #16 + mov r1, r1, lsr #4 +block_loop_and: + ldmia r0, {r3-r5,r12} + subs r1, r1, #1 + and r3, r3, r2 + and r4, r4, r2 + and r5, r5, r2 + and r12,r12,r2 + stmia r0!, {r3-r5,r12} + bne block_loop_and + ldmfd sp!, {r4-r5} + bx lr + + .global block_andor @ void *src, size_t n, int andpat, int orpat block_andor: @@ -66,7 +86,36 @@ spend_cycles: bx lr -.global soft_scale @ void *dst, unsigned short *pal, int offs, int lines +.global memset32 @ int *dest, int c, int count + +memset32: + stmfd sp!, {lr} + + mov r3, r1 + subs r2, r2, #4 + bmi mst32_fin + + mov r12,r1 + mov lr, r1 + +mst32_loop: + subs r2, r2, #4 + stmia r0!, {r1,r3,r12,lr} + bpl mst32_loop + +mst32_fin: + tst r2, #1 + strne r1, [r0], #4 + + tst r2, #2 + stmneia r0!, {r1,r3} + + ldmfd sp!, {lr} + bx lr + + + +.global soft_scale @ void *dst, unsigned short *pal, int line_offs, int lines soft_scale: stmfd sp!,{r4-r11,lr}