2 * (C) GraÅžvydas "notaz" Ignotas, 2011
4 * This work is licensed under the terms of any of these licenses
6 * - GNU GPL, version 2 or later.
7 * - GNU LGPL, version 2.1 or later.
8 * See the COPYING file in the top-level directory.
15 @ XXX: should be HAVE_NEON
18 .global mix_chan @ (int start, int count, int lv, int rv)
21 vmov.32 d14[1], r3 @ multipliers
23 movw r0, #:lower16:ChanBuf
24 movw r2, #:lower16:SSumLR
25 movt r0, #:upper16:ChanBuf
26 movt r2, #:upper16:SSumLR
32 vmul.s32 d10, d14, d0[0]
33 vmul.s32 d11, d14, d0[1]
34 vmul.s32 d12, d14, d1[0]
35 vmul.s32 d13, d14, d1[1]
54 .global mix_chan_rvb @ (int start, int count, int lv, int rv)
57 vmov.32 d14[1], r3 @ multipliers
59 movw r0, #:lower16:ChanBuf
60 movw r3, #:lower16:sRVBStart
61 movw r2, #:lower16:SSumLR
62 movt r0, #:upper16:ChanBuf
63 movt r3, #:upper16:sRVBStart
64 movt r2, #:upper16:SSumLR
73 vmul.s32 d10, d14, d0[0]
74 vmul.s32 d11, d14, d0[1]
75 vmul.s32 d12, d14, d1[0]
76 vmul.s32 d13, d14, d1[1]
102 .global mix_chan @ (int start, int count, int lv, int rv)
104 stmfd sp!, {r4-r8,lr}
105 orr r3, r2, r3, lsl #16
106 lsl r3, #1 @ packed multipliers << 1
115 lsl r4, #1 @ adjust for mul
117 smlawb r6, r4, r3, r6
118 smlawt r7, r4, r3, r7
119 smlawb r8, r5, r3, r8
120 smlawt lr, r5, r3, lr
123 stmia r2!, {r6-r8,lr}
125 ldmeqfd sp!, {r4-r8,pc}
129 ldmfd sp!, {r4-r8,pc}
132 .global mix_chan_rvb @ (int start, int count, int lv, int rv)
134 stmfd sp!, {r4-r8,lr}
135 orr lr, r2, r3, lsl #16
141 add r2, r2, r0, lsl #3
142 add r3, r3, r0, lsl #3
143 add r0, r4, r0, lsl #2
149 smlawb r6, r4, lr, r6 @ supposedly takes single cycle?
150 smlawt r7, r4, lr, r7
151 smlawb r8, r4, lr, r8
152 smlawt r12,r4, lr, r12
157 ldmfd sp!, {r4-r8,pc}
161 @ vim:filetype=armasm