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=8ac7c30a59659a45b05fb70996f17e1015e96ebf;hp=ddc37140ec404f20d8edbd184428043fe5ab9ec1;hb=8a55ebcc07d4f860633db8c77bb9e16bcfa03313;hpb=5c6457c3a3e44b0f39be5221ad4a9d94a432d694 diff --git a/plugins/dfsound/arm_utils.S b/plugins/dfsound/arm_utils.S index ddc37140..8ac7c30a 100644 --- a/plugins/dfsound/arm_utils.S +++ b/plugins/dfsound/arm_utils.S @@ -10,28 +10,36 @@ #include "arm_features.h" +#ifdef TEXRELS_FORBIDDEN +.data +.align 2 +ptr_ChanBuf: .word ESYM(ChanBuf) +#endif + .text .align 2 .macro load_varadr reg var -#if defined(__ARM_ARCH_7A__) && !defined(__PIC__) - movw \reg, #:lower16:EVAR(\var) - movt \reg, #:upper16:EVAR(\var) +#if defined(HAVE_ARMV7) && defined(TEXRELS_FORBIDDEN) + movw \reg, #:lower16:(ptr_\var-(1678f+8)) + movt \reg, #:upper16:(ptr_\var-(1678f+8)) +1678: + ldr \reg, [pc, \reg] +#elif defined(HAVE_ARMV7) && !defined(__PIC__) + movw \reg, #:lower16:ESYM(\var) + movt \reg, #:upper16:ESYM(\var) #else - ldr \reg, =EVAR(\var) + ldr \reg, =ESYM(\var) #endif .endm #ifdef __ARM_NEON__ -FUNCTION(mix_chan): @ (int start, int count, int lv, int rv) +FUNCTION(mix_chan): @ (int *SSumLR, int count, int lv, int rv) vmov.32 d14[0], r2 vmov.32 d14[1], r3 @ multipliers - mov r12, r0 + mov r2, r0 load_varadr r0, ChanBuf - load_varadr r2, SSumLR - add r0, r12, lsl #2 - add r2, r12, lsl #3 0: vldmia r0!, {d0-d1} vldmia r2, {d2-d5} @@ -57,17 +65,12 @@ mc_finish: bx lr -FUNCTION(mix_chan_rvb): @ (int start, int count, int lv, int rv) +FUNCTION(mix_chan_rvb): @ (int *SSumLR, int count, int lv, int rv, int *rvb) vmov.32 d14[0], r2 vmov.32 d14[1], r3 @ multipliers - mov r12, r0 + mov r2, r0 load_varadr r0, ChanBuf - load_varadr r3, sRVBStart - load_varadr r2, SSumLR - ldr r3, [r3] - add r0, r12, lsl #2 - add r2, r12, lsl #3 - add r3, r12, lsl #3 + ldr r3, [sp] @ rvb 0: vldmia r0!, {d0-d1} vldmia r2, {d2-d5} @@ -101,15 +104,12 @@ mcr_finish: #elif defined(HAVE_ARMV5) -FUNCTION(mix_chan): @ (int start, int count, int lv, int rv) +FUNCTION(mix_chan): @ (int *SSumLR, int count, int lv, int rv) stmfd sp!, {r4-r8,lr} orr r3, r2, r3, lsl #16 lsl r3, #1 @ packed multipliers << 1 - mov r12, r0 + mov r2, r0 load_varadr r0, ChanBuf - load_varadr r2, SSumLR - add r0, r12, lsl #2 - add r2, r12, lsl #3 0: ldmia r0!, {r4,r5} ldmia r2, {r6-r8,lr} @@ -130,17 +130,13 @@ mc_finish: ldmfd sp!, {r4-r8,pc} -FUNCTION(mix_chan_rvb): @ (int start, int count, int lv, int rv) +FUNCTION(mix_chan_rvb): @ (int *SSumLR, int count, int lv, int rv, int *rvb) stmfd sp!, {r4-r8,lr} orr lr, r2, r3, lsl #16 lsl lr, #1 - load_varadr r3, sRVBStart - load_varadr r2, SSumLR - load_varadr r4, ChanBuf - ldr r3, [r3] - add r2, r2, r0, lsl #3 - add r3, r3, r0, lsl #3 - add r0, r4, r0, lsl #2 + mov r2, r0 + load_varadr r0, ChanBuf + ldr r3, [sp, #6*4] @ rvb 0: ldr r4, [r0], #4 ldmia r2, {r6,r7}