diff options
author | Linfeng Zhang <linfengz@google.com> | 2016-07-14 02:40:48 +0300 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2017-04-14 01:30:27 +0300 |
commit | 8e19536baa5064a89abe93570fcc99412b6c68a1 (patch) | |
tree | 95eb80319a5cc30193dfe78726ca070f4365a7c8 /silk/arm | |
parent | c43633d1a9d3747f96fc30a32f6fdaa322195aed (diff) |
Optimize silk_warped_autocorrelation_FIX() for ARM NEON
The optimization is bit exact with C function.
This optimization speeds up fixed-point SILK encoder on NEON about
5% to 8%. (Tested on Acer Chromebook, ARMv7 Processor rev 3 (v7l).)
Change-Id: I582f6f3585b7946149e16a2ad3084ebc0ae79a4f
Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
Diffstat (limited to 'silk/arm')
-rw-r--r-- | silk/arm/arm_silk_map.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/silk/arm/arm_silk_map.c b/silk/arm/arm_silk_map.c index 0966cfde..7ac9ad38 100644 --- a/silk/arm/arm_silk_map.c +++ b/silk/arm/arm_silk_map.c @@ -87,4 +87,23 @@ opus_int32 # endif +# if defined(FIXED_POINT) && \ + defined(OPUS_ARM_MAY_HAVE_NEON_INTR) && !defined(OPUS_ARM_PRESUME_NEON_INTR) + +void (*const SILK_WARPED_AUTOCORRELATION_FIX_IMPL[OPUS_ARCHMASK + 1])( + opus_int32 *corr, /* O Result [order + 1] */ + opus_int *scale, /* O Scaling of the correlation vector */ + const opus_int16 *input, /* I Input data to correlate */ + const opus_int warping_Q16, /* I Warping coefficient */ + const opus_int length, /* I Length of input */ + const opus_int order /* I Correlation order (even) */ +) = { + silk_warped_autocorrelation_FIX_c, /* ARMv4 */ + silk_warped_autocorrelation_FIX_c, /* EDSP */ + silk_warped_autocorrelation_FIX_c, /* Media */ + MAY_HAVE_NEON(silk_warped_autocorrelation_FIX), /* Neon */ +}; + +# endif + #endif /* OPUS_HAVE_RTCD */ |