libpicofe/psp/asm_utils.s
notaz 93c0d147a1 psp fixes, gamma
git-svn-id: file:///home/notaz/opt/svn/PicoDrive/platform@302 be3aeb3a-fb24-0410-a615-afba39da0efa
2007-11-24 15:04:47 +00:00

122 lines
2.7 KiB
ArmAsm

# vim:filetype=mips
# some asm utils
# (c) Copyright 2007, Grazvydas "notaz" Ignotas
# All Rights Reserved
.set noreorder
.set noat
.data
.align 4
.byte 0, 1, 6, 11, 16, 21, 26, 31 # -4
.byte 0, 2, 7, 12, 16, 21, 26, 31 # -3
.byte 0, 3, 7, 12, 17, 22, 26, 31 # -2
.byte 0, 4, 8, 13, 17, 22, 26, 31 # -1
gmtab:
.byte 0, 5, 10, 15, 16, 21, 26, 31 # 0
.byte 0, 6, 10, 15, 19, 23, 27, 31
.byte 0, 7, 11, 15, 19, 23, 27, 31
.byte 0, 8, 12, 16, 19, 23, 27, 31
.byte 0, 9, 12, 16, 20, 24, 27, 31
.byte 0, 10, 13, 17, 20, 24, 27, 31
.byte 0, 10, 14, 17, 21, 24, 28, 31
.byte 0, 11, 15, 18, 21, 24, 28, 31
.byte 0, 12, 15, 18, 22, 25, 28, 31
.byte 0, 13, 16, 19, 22, 25, 28, 31
.byte 0, 14, 17, 20, 22, 25, 28, 31 # 10
.byte 0, 15, 17, 20, 23, 26, 28, 31
.byte 0, 16, 18, 21, 23, 26, 28, 31
.byte 0, 16, 19, 21, 24, 26, 29, 31
.byte 0, 17, 20, 22, 24, 26, 29, 31
.byte 0, 18, 20, 22, 25, 27, 29, 31
.byte 0, 19, 21, 23, 25, 27, 29, 31 # 16
.text
.align 4
# bbbb bggg gggr rrrr
.global do_pal_convert # dest, src, gammaa_val
do_pal_convert:
bnez $a2, dpc_gma
li $t0, 64/2
lui $t2, 0x00e
ori $t2, 0x00e
lui $t3, 0x006
ori $t3, 0x006
lui $t4, 0x0e0
ori $t4, 0x0e0
lui $t6, 0xe00
ori $t6, 0xe00
lui $t7, 0x600
ori $t7, 0x600
dpc_loop:
lw $v0, 0($a1)
addiu $a1, 4
and $v1, $v0, $t2 # r
sll $v1, 1
and $t9, $v0, $t3
srl $t9, 1
or $v1, $t9 # r
and $t9, $v0, $t4 # g
sll $t8, $t9, 3
or $v1, $t8
or $v1, $t9 # g
and $t9, $v0, $t6 # b
sll $t9, 4
or $v1, $t9
and $t9, $v0, $t7
sll $t9, 2
or $v1, $t9 # b
sw $v1, 0($a0)
addiu $t0, -1
bnez $t0, dpc_loop
addiu $a0, 4
jr $ra
nop
dpc_gma:
sll $a2, 3
lui $t1, %hi(gmtab)
addiu $t1, %lo(gmtab)
addu $a2, $t1
dpc_gma_loop:
lw $v0, 0($a1)
addiu $a1, 4
ext $v1, $v0, 1, 3
addu $v1, $a2
lb $v1, 0($v1)
ext $t1, $v0, 5, 3
addu $t1, $a2
lb $t1, 0($t1)
ext $t2, $v0, 9, 3
addu $t2, $a2
lb $t2, 0($t2)
ext $t3, $v0, 17, 3
addu $t3, $a2
lb $t3, 0($t3)
ext $t4, $v0, 21, 3
addu $t4, $a2
lb $t4, 0($t4)
ext $t5, $v0, 25, 3
addu $t5, $a2
lb $t5, 0($t5)
ins $v1, $t1, 6, 5
ins $v1, $t2, 11, 5
ins $v1, $t3, 16, 5
ins $v1, $t4, 22, 5
ins $v1, $t5, 27, 5
sw $v1, 0($a0)
addiu $t0, -1
bnez $t0, dpc_gma_loop
addiu $a0, 4
jr $ra
nop