diff options
author | Jean-Marc Valin <jmvalin@amazon.com> | 2023-11-28 06:57:32 +0300 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@amazon.com> | 2023-11-28 07:08:56 +0300 |
commit | df637713aac51cb6c14ebfe07fad00819a99401f (patch) | |
tree | 91830115e971fe1e036e05e04b4d8bcea1da6c8e | |
parent | c143b72c4c321b5907cbe839079efd3b2455ac9a (diff) |
Fixes for ARMv7/AArch32
1) Enable asm/intrinsics even for floating-point
2) Make sure ARMv8 asimd enables EDSP/MEDIA/Neon
3) Add dotp architecture to rtcd table since AArch *can* have dotp
-rw-r--r-- | celt/arm/armcpu.c | 3 | ||||
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | silk/arm/arm_silk_map.c | 5 |
3 files changed, 10 insertions, 2 deletions
diff --git a/celt/arm/armcpu.c b/celt/arm/armcpu.c index 6fbfb904..73feec0b 100644 --- a/celt/arm/armcpu.c +++ b/celt/arm/armcpu.c @@ -127,6 +127,9 @@ opus_uint32 opus_cpu_capabilities(void) p = strstr(buf, " neon"); if(p != NULL && (p[5] == ' ' || p[5] == '\n')) flags |= OPUS_CPU_ARM_NEON_FLAG; + p = strstr(buf, " asimd"); + if(p != NULL && (p[6] == ' ' || p[6] == '\n')) + flags |= OPUS_CPU_ARM_NEON_FLAG | OPUS_CPU_ARM_MEDIA_FLAG | OPUS_CPU_ARM_EDSP_FLAG; # endif # if defined(OPUS_ARM_MAY_HAVE_DOTPROD) p = strstr(buf, " asimddp"); diff --git a/configure.ac b/configure.ac index 8cab79b2..b4c5f2a5 100644 --- a/configure.ac +++ b/configure.ac @@ -220,7 +220,7 @@ AS_IF([test x"${enable_asm}" = x"yes"],[ case $host_cpu in arm*) dnl Currently we only have asm for fixed-point - AS_IF([test "$enable_float" != "yes"],[ + #AS_IF([test "$enable_float" != "yes"],[ cpu_arm=yes AC_DEFINE([OPUS_ARM_ASM], [], [Make use of ARM asm optimization]) AS_GCC_INLINE_ASSEMBLY( @@ -366,7 +366,7 @@ AS_IF([test x"${enable_asm}" = x"yes"],[ [*** ARM assembly requires perl -- disabling optimizations]) asm_optimization="(missing perl dependency for ARM)" ]) - ]) + #]) ;; esac ],[ diff --git a/silk/arm/arm_silk_map.c b/silk/arm/arm_silk_map.c index 7487207c..a91f79b5 100644 --- a/silk/arm/arm_silk_map.c +++ b/silk/arm/arm_silk_map.c @@ -49,6 +49,7 @@ void (*const SILK_BIQUAD_ALT_STRIDE2_IMPL[OPUS_ARCHMASK + 1])( silk_biquad_alt_stride2_c, /* EDSP */ silk_biquad_alt_stride2_c, /* Media */ silk_biquad_alt_stride2_neon, /* Neon */ + silk_biquad_alt_stride2_neon, /* dotprod */ }; opus_int32 (*const SILK_LPC_INVERSE_PRED_GAIN_IMPL[OPUS_ARCHMASK + 1])( /* O Returns inverse prediction gain in energy domain, Q30 */ @@ -59,6 +60,7 @@ opus_int32 (*const SILK_LPC_INVERSE_PRED_GAIN_IMPL[OPUS_ARCHMASK + 1])( /* O R silk_LPC_inverse_pred_gain_c, /* EDSP */ silk_LPC_inverse_pred_gain_c, /* Media */ silk_LPC_inverse_pred_gain_neon, /* Neon */ + silk_LPC_inverse_pred_gain_neon, /* dotprod */ }; void (*const SILK_NSQ_DEL_DEC_IMPL[OPUS_ARCHMASK + 1])( @@ -82,6 +84,7 @@ void (*const SILK_NSQ_DEL_DEC_IMPL[OPUS_ARCHMASK + 1])( silk_NSQ_del_dec_c, /* EDSP */ silk_NSQ_del_dec_c, /* Media */ silk_NSQ_del_dec_neon, /* Neon */ + silk_NSQ_del_dec_neon, /* dotprod */ }; /*There is no table for silk_noise_shape_quantizer_short_prediction because the @@ -97,6 +100,7 @@ opus_int32 silk_NSQ_noise_shape_feedback_loop_c, /* EDSP */ silk_NSQ_noise_shape_feedback_loop_c, /* Media */ silk_NSQ_noise_shape_feedback_loop_neon, /* NEON */ + silk_NSQ_noise_shape_feedback_loop_neon, /* dotprod */ }; # endif @@ -116,6 +120,7 @@ void (*const SILK_WARPED_AUTOCORRELATION_FIX_IMPL[OPUS_ARCHMASK + 1])( silk_warped_autocorrelation_FIX_c, /* EDSP */ silk_warped_autocorrelation_FIX_c, /* Media */ silk_warped_autocorrelation_FIX_neon, /* Neon */ + silk_warped_autocorrelation_FIX_neon, /* dotprod */ }; # endif |