gint/src/render-fx/bopti-asm-mono-scsp.S

65 lines
1009 B
ArmAsm

#include <gint/config.h>
#if GINT_RENDER_MONO
.global _bopti_asm_mono_scsp
.global _bopti_asm_mono_alpha_scsp
/* REGISTER ALLOCATION:
r0: layer
r1: -
r2: (temp)
r3: vram longword
--
r4: vram pointer
r5: layer pointer
r6: mask
r7: -(x&31) */
_bopti_asm_mono_scsp:
/* Read layer longword and shift it */
mov.l @r5, r0
shld r7, r0
/* Clear the target VRAM and unwanted image data */
mov.l @r4, r3
and r6, r0
not r6, r6
and r6, r3
/* Blit and return */
or r0, r3
rts
mov.l r3, @r4
/* REGISTER ALLOCATION:
r0: AND layer
r1: OR layer
r2: (temp)
r3: vram longword
--
r4: vram pointer
r5: layer pointer
r6: mask
r7: -(x&31) */
_bopti_asm_mono_alpha_scsp:
/* Read layer longwords and shift them */
mov.l @r5, r0
mov.l @(4,r5), r1
shld r7, r0
shld r7, r1
/* Apply masks to clear layer data */
and r6, r0
and r6, r1
/* Blit to VRAM */
mov.l @r4, r3
not r0, r0
and r0, r3
or r1, r3
rts
mov.l r3, @r4
#endif /* GINT_RENDER_MONO */