frontend: add armv6 color space converter
[pcsx_rearmed.git] / frontend / cspace_arm.S
CommitLineData
d57557c0 1/*
2 * (C) GraÅžvydas "notaz" Ignotas, 2013
3 *
4 * This work is licensed under the terms of GNU GPL version 2 or later.
5 * See the COPYING file in the top-level directory.
6 */
7
8#include "arm_features.h"
9
10.text
11.align 2
12
13@ lr=0x001f001f
14@ trashes r11, r12
15.macro bgr555_to_rgb565_one rn
16 and r11, lr, \rn
17 and r12, lr, \rn, lsr #5
18 and \rn, lr, \rn, lsr #10
19 orr r12, r11, lsl #5
20 orr \rn, r12, lsl #6
21.endm
22
23.macro pld_ reg offs=#0
24#ifdef HAVE_ARMV6
25 pld [\reg, \offs]
26#endif
27.endm
28
29.global bgr555_to_rgb565 @ void *dst, const void *src, int bytes
30bgr555_to_rgb565:
31 pld_ r1
32 push {r4-r11,lr}
33 mov lr, #0x001f
34 subs r2, #4*8
35 orr lr, lr, lsl #16
36 blt 1f
37
380:
39 ldmia r1!, {r3-r10}
40 subs r2, #4*8
41 bgr555_to_rgb565_one r3
42
43 pld_ r1, #32*2
44 bgr555_to_rgb565_one r4
45 bgr555_to_rgb565_one r5
46 bgr555_to_rgb565_one r6
47 bgr555_to_rgb565_one r7
48 bgr555_to_rgb565_one r8
49 bgr555_to_rgb565_one r9
50 bgr555_to_rgb565_one r10
51 stmia r0!, {r3-r10}
52 bge 0b
53
541:
55 adds r2, #4*8
56 popeq {r4-r11,pc}
57
582:
59 ldr r3, [r1], #4
60 subs r2, #4
61 bgr555_to_rgb565_one r3
62 str r3, [r0], #4
63 bgt 2b
64
65 pop {r4-r11,pc}