| 1 | # vim:filetype=mips |
| 2 | |
| 3 | # only CLUT for now.. |
| 4 | |
| 5 | .set noreorder # don't reorder any instructions |
| 6 | .set noat # don't use $at |
| 7 | |
| 8 | |
| 9 | # void amips_clut(unsigned short *dst, unsigned char *src, unsigned short *pal, int count) |
| 10 | |
| 11 | .global amips_clut |
| 12 | |
| 13 | amips_clut: |
| 14 | srl $a3, 2 |
| 15 | amips_clut_loop: |
| 16 | lbu $t0, 0($a1) # tried lw here, no improvement noticed |
| 17 | lbu $t1, 1($a1) |
| 18 | lbu $t2, 2($a1) |
| 19 | lbu $t3, 3($a1) |
| 20 | sll $t0, 1 |
| 21 | sll $t1, 1 |
| 22 | sll $t2, 1 |
| 23 | sll $t3, 1 |
| 24 | addu $t0, $a2 |
| 25 | addu $t1, $a2 |
| 26 | addu $t2, $a2 |
| 27 | addu $t3, $a2 |
| 28 | lhu $t0, 0($t0) |
| 29 | lhu $t1, 0($t1) |
| 30 | lhu $t2, 0($t2) |
| 31 | lhu $t3, 0($t3) |
| 32 | ins $t0, $t1, 16, 16 # ins rt, rs, pos, size - Insert size bits starting |
| 33 | ins $t2, $t3, 16, 16 # from the LSB of rs into rt starting at position pos |
| 34 | sw $t0, 0($a0) |
| 35 | sw $t2, 4($a0) |
| 36 | addiu $a0, 8 |
| 37 | addiu $a3, -1 |
| 38 | bnez $a3, amips_clut_loop |
| 39 | addiu $a1, 4 |
| 40 | jr $ra |
| 41 | nop |
| 42 | |