diff options
Diffstat (limited to 'src/modules')
-rw-r--r-- | src/modules/bluetooth/sbc/sbc_primitives_neon.c | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/src/modules/bluetooth/sbc/sbc_primitives_neon.c b/src/modules/bluetooth/sbc/sbc_primitives_neon.c index 1f39213e..c233d3c6 100644 --- a/src/modules/bluetooth/sbc/sbc_primitives_neon.c +++ b/src/modules/bluetooth/sbc/sbc_primitives_neon.c @@ -247,8 +247,11 @@ static void sbc_calc_scalefactors_neon( int blk = blocks; int32_t *in = &sb_sample_f[0][ch][sb]; asm volatile ( - "vmov.s32 q0, %[c1]\n" + "vmov.s32 q0, #0\n" "vmov.s32 q1, %[c1]\n" + "vmov.s32 q14, #1\n" + "vmov.s32 q15, %[c2]\n" + "vadd.s32 q1, q1, q14\n" "1:\n" "vld1.32 {d16, d17}, [%[in], :128], %[inc]\n" "vabs.s32 q8, q8\n" @@ -258,22 +261,14 @@ static void sbc_calc_scalefactors_neon( "vabs.s32 q10, q10\n" "vld1.32 {d22, d23}, [%[in], :128], %[inc]\n" "vabs.s32 q11, q11\n" - "vcgt.s32 q12, q8, #0\n" - "vcgt.s32 q13, q9, #0\n" - "vcgt.s32 q14, q10, #0\n" - "vcgt.s32 q15, q11, #0\n" - "vadd.s32 q8, q8, q12\n" - "vadd.s32 q9, q9, q13\n" - "vadd.s32 q10, q10, q14\n" - "vadd.s32 q11, q11, q15\n" - "vorr.s32 q0, q0, q8\n" - "vorr.s32 q1, q1, q9\n" - "vorr.s32 q0, q0, q10\n" - "vorr.s32 q1, q1, q11\n" + "vmax.s32 q0, q0, q8\n" + "vmax.s32 q1, q1, q9\n" + "vmax.s32 q0, q0, q10\n" + "vmax.s32 q1, q1, q11\n" "subs %[blk], %[blk], #4\n" "bgt 1b\n" - "vorr.s32 q0, q0, q1\n" - "vmov.s32 q15, %[c2]\n" + "vmax.s32 q0, q0, q1\n" + "vsub.s32 q0, q0, q14\n" "vclz.s32 q0, q0\n" "vsub.s32 q0, q15, q0\n" "vst1.32 {d0, d1}, [%[out], :128]\n" |