spu: handle loop write vs loop flag race (bIgnoreLoop alternative)
[pcsx_rearmed.git] / plugins / dfsound / arm_utils.s
CommitLineData
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)
17mix_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
270:
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
43mc_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)
53mix_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
670:
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
87mcr_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