Initial standalone code, some stuff runs
[sdl_omap.git] / src / video / omapdss / arm_utils.s
diff --git a/src/video/omapdss/arm_utils.s b/src/video/omapdss/arm_utils.s
new file mode 100644 (file)
index 0000000..a316597
--- /dev/null
@@ -0,0 +1,27 @@
+@ vim:filetype=armasm
+
+.global do_clut @ void *dest, void *src, unsigned short *pal, int count
+
+do_clut:
+    stmfd   sp!, {r4-r7,lr}
+    mov     lr, #0xff
+    mov     r3, r3, lsr #2
+    mov     lr, lr, lsl #1
+0:
+    ldr     r7, [r1], #4
+    subs    r3, r3, #1
+    and     r4, lr, r7, lsl #1
+    and     r5, lr, r7, lsr #7
+    and     r6, lr, r7, lsr #15
+    and     r7, lr, r7, lsr #23
+    ldrh    r4, [r2, r4]
+    ldrh    r5, [r2, r5]
+    ldrh    r6, [r2, r6]
+    ldrh    r7, [r2, r7]
+    orr     r4, r4, r5, lsl #16
+    orr     r6, r6, r7, lsl #16
+    stmia   r0!, {r4,r6}
+    bne     0b
+
+    ldmfd   sp!, {r4-r7,pc}
+