X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fdfsound%2Farm_utils.s;h=70ff24dce5259815443b979eed97d31787048ac9;hp=a278174d29d514c60c3dfce95e5f028ab8f6f4a7;hb=3a721c1f5582bac7475788bb0018207a3deb2bca;hpb=b17618c006c1a79ea0aa38c5e452a384f7f2bc95 diff --git a/plugins/dfsound/arm_utils.s b/plugins/dfsound/arm_utils.s index a278174d..70ff24dc 100644 --- a/plugins/dfsound/arm_utils.s +++ b/plugins/dfsound/arm_utils.s @@ -12,6 +12,8 @@ .text .align 2 +@ XXX: should be HAVE_NEON +.if HAVE_ARMV7 .global mix_chan @ (int start, int count, int lv, int rv) mix_chan: @@ -42,9 +44,9 @@ mix_chan: mc_finish: vstmia r2!, {d2} - cmp r1, #2 + cmp r1, #-2 vstmiage r2!, {d3} - cmp r1, #3 + cmp r1, #-1 vstmiage r2!, {d4} bx lr @@ -87,12 +89,73 @@ mix_chan_rvb: mcr_finish: vstmia r2!, {d2} vstmia r3!, {d6} - cmp r1, #2 + cmp r1, #-2 vstmiage r2!, {d3} vstmiage r3!, {d7} - cmp r1, #3 + cmp r1, #-1 vstmiage r2!, {d4} vstmiage r3!, {d8} bx lr +.else + +.global mix_chan @ (int start, int count, int lv, int rv) +mix_chan: + stmfd sp!, {r4-r8,lr} + orr r3, r2, r3, lsl #16 + lsl r3, #1 @ packed multipliers << 1 + mov r12, r0 + ldr r0, =ChanBuf + ldr r2, =SSumLR + add r0, r12, lsl #2 + add r2, r12, lsl #3 +0: + ldmia r0!, {r4,r5} + ldmia r2, {r6-r8,lr} + lsl r4, #1 @ adjust for mul + lsl r5, #1 + smlawb r6, r4, r3, r6 + smlawt r7, r4, r3, r7 + smlawb r8, r5, r3, r8 + smlawt lr, r5, r3, lr + subs r1, #2 + blt mc_finish + stmia r2!, {r6-r8,lr} + bgt 0b + ldmeqfd sp!, {r4-r8,pc} + +mc_finish: + stmia r2!, {r6,r7} + ldmfd sp!, {r4-r8,pc} + + +.global mix_chan_rvb @ (int start, int count, int lv, int rv) +mix_chan_rvb: + stmfd sp!, {r4-r8,lr} + orr lr, r2, r3, lsl #16 + lsl lr, #1 + ldr r3, =sRVBStart + ldr r2, =SSumLR + ldr r4, =ChanBuf + ldr r3, [r3] + add r2, r2, r0, lsl #3 + add r3, r3, r0, lsl #3 + add r0, r4, r0, lsl #2 +0: + ldr r4, [r0], #4 + ldmia r2, {r6,r7} + ldmia r3, {r8,r12} + lsl r4, #1 + smlawb r6, r4, lr, r6 @ supposedly takes single cycle? + smlawt r7, r4, lr, r7 + smlawb r8, r4, lr, r8 + smlawt r12,r4, lr, r12 + subs r1, #1 + stmia r2!, {r6,r7} + stmia r3!, {r8,r12} + bgt 0b + ldmfd sp!, {r4-r8,pc} + +.endif + @ vim:filetype=armasm