b17618c0 |
1 | /* |
2 | * (C) GraÅžvydas "notaz" Ignotas, 2011 |
3 | * |
4 | * This work is licensed under the terms of any of these licenses |
5 | * (at your option): |
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. |
9 | */ |
10 | |
11 | |
12 | .text |
13 | .align 2 |
14 | |
15 | |
16 | .global mix_chan @ (int start, int count, int lv, int rv) |
17 | mix_chan: |
18 | vmov.32 d14[0], r2 |
19 | vmov.32 d14[1], r3 @ multipliers |
20 | mov r12, r0 |
21 | movw r0, #:lower16:ChanBuf |
22 | movw r2, #:lower16:SSumLR |
23 | movt r0, #:upper16:ChanBuf |
24 | movt r2, #:upper16:SSumLR |
25 | add r0, r12, lsl #2 |
26 | add r2, r12, lsl #3 |
27 | 0: |
28 | vldmia r0!, {d0-d1} |
29 | vldmia r2, {d2-d5} |
30 | vmul.s32 d10, d14, d0[0] |
31 | vmul.s32 d11, d14, d0[1] |
32 | vmul.s32 d12, d14, d1[0] |
33 | vmul.s32 d13, d14, d1[1] |
34 | vsra.s32 q1, q5, #14 |
35 | vsra.s32 q2, q6, #14 |
36 | subs r1, #4 |
37 | blt mc_finish |
38 | vstmia r2!, {d2-d5} |
39 | bgt 0b |
40 | nop |
41 | bxeq lr |
42 | |
43 | mc_finish: |
44 | vstmia r2!, {d2} |
587fa7de |
45 | cmp r1, #-2 |
b17618c0 |
46 | vstmiage r2!, {d3} |
587fa7de |
47 | cmp r1, #-1 |
b17618c0 |
48 | vstmiage r2!, {d4} |
49 | bx lr |
50 | |
51 | |
52 | .global mix_chan_rvb @ (int start, int count, int lv, int rv) |
53 | mix_chan_rvb: |
54 | vmov.32 d14[0], r2 |
55 | vmov.32 d14[1], r3 @ multipliers |
56 | mov r12, r0 |
57 | movw r0, #:lower16:ChanBuf |
58 | movw r3, #:lower16:sRVBStart |
59 | movw r2, #:lower16:SSumLR |
60 | movt r0, #:upper16:ChanBuf |
61 | movt r3, #:upper16:sRVBStart |
62 | movt r2, #:upper16:SSumLR |
63 | ldr r3, [r3] |
64 | add r0, r12, lsl #2 |
65 | add r2, r12, lsl #3 |
66 | add r3, r12, lsl #3 |
67 | 0: |
68 | vldmia r0!, {d0-d1} |
69 | vldmia r2, {d2-d5} |
70 | vldmia r3, {d6-d9} |
71 | vmul.s32 d10, d14, d0[0] |
72 | vmul.s32 d11, d14, d0[1] |
73 | vmul.s32 d12, d14, d1[0] |
74 | vmul.s32 d13, d14, d1[1] |
75 | vsra.s32 q1, q5, #14 |
76 | vsra.s32 q2, q6, #14 |
77 | vsra.s32 q3, q5, #14 |
78 | vsra.s32 q4, q6, #14 |
79 | subs r1, #4 |
80 | blt mcr_finish |
81 | vstmia r2!, {d2-d5} |
82 | vstmia r3!, {d6-d9} |
83 | bgt 0b |
84 | nop |
85 | bxeq lr |
86 | |
87 | mcr_finish: |
88 | vstmia r2!, {d2} |
89 | vstmia r3!, {d6} |
587fa7de |
90 | cmp r1, #-2 |
b17618c0 |
91 | vstmiage r2!, {d3} |
92 | vstmiage r3!, {d7} |
587fa7de |
93 | cmp r1, #-1 |
b17618c0 |
94 | vstmiage r2!, {d4} |
95 | vstmiage r3!, {d8} |
96 | bx lr |
97 | |
98 | @ vim:filetype=armasm |