dreamcast/unpack_pixel.s

85 lines
1.5 KiB
ArmAsm

/* unpack the next 8 pixels */
/*
mov.l @r13,r9
extu.b r9,r1
shlr8 r9
extu.b r9,r2
add r1,r2
shlr8 r9
extu.b r9,r1
add r1,r2
shlr8 r9
add r2,r9
lds r9,fpul
add #4,r13
*/
.macro unpack_pixel_inner_nibs
mov.w @r13+,r9
mov r9,r1 /* nib0 */
shlr2 r9
shlr2 r9
and r14,r1
mov r9,r2 /* nib1 */
shlr2 r9
shlr2 r9
and r14,r2
add r2,r1
mov r9,r2 /* nib3 */
shlr2 r9
shlr2 r9
and r14,r2
add r2,r1
and r14,r9 /* nib4 */
add r9,r1
lds r1,fpul
.endm
.macro unpack_pixel_8
unpack_pixel_inner_nibs
float fpul,fr0
unpack_pixel_inner_nibs
float fpul,fr1
unpack_pixel_inner_nibs
float fpul,fr2
unpack_pixel_inner_nibs
float fpul,fr3
unpack_pixel_inner_nibs
float fpul,fr4
unpack_pixel_inner_nibs
float fpul,fr5
unpack_pixel_inner_nibs
float fpul,fr6
unpack_pixel_inner_nibs
float fpul,fr7
fmov dr0,@r12
add #8,r12
fmov dr2,@r12
add #8,r12
fmov dr4,@r12
add #8,r12
fmov dr6,@r12
add #8,r12
.endm
.macro unpack_pixel_16
ocbi @r13
pref @r13 /* 32 bytes, 16 pixels */
mov #15,r14
fschg
unpack_pixel_8
unpack_pixel_8
fschg
.endm