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 .macro load_varadr reg var
16 #if defined(__ARM_ARCH_7A__) && !defined(__PIC__)
17 movw \reg, #:lower16:\var
18 movt \reg, #:upper16:\var
26 .global mix_chan @ (int start, int count, int lv, int rv)
29 vmov.32 d14[1], r3 @ multipliers
31 load_varadr r0, ChanBuf
32 load_varadr r2, SSumLR
38 vmul.s32 d10, d14, d0[0]
39 vmul.s32 d11, d14, d0[1]
40 vmul.s32 d12, d14, d1[0]
41 vmul.s32 d13, d14, d1[1]
60 .global mix_chan_rvb @ (int start, int count, int lv, int rv)
63 vmov.32 d14[1], r3 @ multipliers
65 load_varadr r0, ChanBuf
66 load_varadr r3, sRVBStart
67 load_varadr r2, SSumLR
76 vmul.s32 d10, d14, d0[0]
77 vmul.s32 d11, d14, d0[1]
78 vmul.s32 d12, d14, d1[0]
79 vmul.s32 d13, d14, d1[1]
105 .global mix_chan @ (int start, int count, int lv, int rv)
107 stmfd sp!, {r4-r8,lr}
108 orr r3, r2, r3, lsl #16
109 lsl r3, #1 @ packed multipliers << 1
111 load_varadr r0, ChanBuf
112 load_varadr r2, SSumLR
118 lsl r4, #1 @ adjust for mul
120 smlawb r6, r4, r3, r6
121 smlawt r7, r4, r3, r7
122 smlawb r8, r5, r3, r8
123 smlawt lr, r5, r3, lr
126 stmia r2!, {r6-r8,lr}
128 ldmeqfd sp!, {r4-r8,pc}
132 ldmfd sp!, {r4-r8,pc}
135 .global mix_chan_rvb @ (int start, int count, int lv, int rv)
137 stmfd sp!, {r4-r8,lr}
138 orr lr, r2, r3, lsl #16
140 load_varadr r3, sRVBStart
141 load_varadr r2, SSumLR
142 load_varadr r4, ChanBuf
144 add r2, r2, r0, lsl #3
145 add r3, r3, r0, lsl #3
146 add r0, r4, r0, lsl #2
152 smlawb r6, r4, lr, r6 @ supposedly takes single cycle?
153 smlawt r7, r4, lr, r7
154 smlawb r8, r4, lr, r8
155 smlawt r12,r4, lr, r12
160 ldmfd sp!, {r4-r8,pc}
164 @ vim:filetype=armasm