| 1 | @ vim:filetype=armasm |
| 2 | |
| 3 | |
| 4 | .global clut_line @ void *dest, void *src, unsigned short *pal, int pixels_mask |
| 5 | |
| 6 | clut_line: |
| 7 | stmfd sp!, {r4-r11,lr} |
| 8 | |
| 9 | and lr, r3, #0xff0000 |
| 10 | mov lr, lr, lsr #15 @ mask |
| 11 | mov r3, r3, lsr #3 |
| 12 | and r3, r3, #0xff @ counter |
| 13 | add r11,r0, #800*2 |
| 14 | |
| 15 | clut_line_loop: |
| 16 | ldmia r1!, {r10,r12} |
| 17 | |
| 18 | and r4, lr, r10, lsl #1 |
| 19 | ldrh r4, [r2, r4] |
| 20 | and r5, lr, r10, lsr #7 |
| 21 | ldrh r5, [r2, r5] |
| 22 | orr r4, r4, r4, lsl #16 |
| 23 | |
| 24 | and r6, lr, r10, lsr #15 |
| 25 | ldrh r6, [r2, r6] |
| 26 | orr r5, r5, r5, lsl #16 |
| 27 | |
| 28 | and r7, lr, r10, lsr #23 |
| 29 | ldrh r7, [r2, r7] |
| 30 | orr r6, r6, r6, lsl #16 |
| 31 | |
| 32 | and r8, lr, r12, lsl #1 |
| 33 | ldrh r8, [r2, r8] |
| 34 | orr r7, r7, r7, lsl #16 |
| 35 | |
| 36 | and r9, lr, r12, lsr #7 |
| 37 | ldrh r9, [r2, r9] |
| 38 | orr r8, r8, r8, lsl #16 |
| 39 | |
| 40 | and r10,lr, r12, lsr #15 |
| 41 | ldrh r10,[r2, r10] |
| 42 | orr r9, r9, r9, lsl #16 |
| 43 | |
| 44 | and r12,lr, r12, lsr #23 |
| 45 | ldrh r12,[r2, r12] |
| 46 | orr r10,r10,r10, lsl #16 |
| 47 | |
| 48 | subs r3, r3, #1 |
| 49 | orr r12,r12,r12, lsl #16 |
| 50 | |
| 51 | stmia r0!, {r4-r10,r12} |
| 52 | stmia r11!,{r4-r10,r12} |
| 53 | bne clut_line_loop |
| 54 | |
| 55 | ldmfd sp!, {r4-r11,pc} |
| 56 | |