From 923f3e95f3e332d26f03cf6782f0ab61596ceef2 Mon Sep 17 00:00:00 2001 From: Jakub Stachowski Date: Tue, 14 Aug 2012 21:59:32 +0200 Subject: Do schur_div with a direct 64 bit division instead of a loop on x86 This speeds up HE-AACv2 encoding from 3.85 s to 3.42 s on a Core i7. --- libFDK/src/fixpoint_math.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/libFDK/src/fixpoint_math.cpp b/libFDK/src/fixpoint_math.cpp index 000820c..7d5fbb5 100644 --- a/libFDK/src/fixpoint_math.cpp +++ b/libFDK/src/fixpoint_math.cpp @@ -443,6 +443,15 @@ FIXP_DBL sqrtFixp(FIXP_DBL op) *****************************************************************************/ +#if defined(__x86__) +FIXP_DBL schur_div(FIXP_DBL num, FIXP_DBL denum, INT count) +{ + INT64 tmp=(INT64)num<<31; + LONG div=(tmp/denum)>>(DFRACT_BITS-count); + return (FIXP_DBL)(div) << (DFRACT_BITS-count); +} + +#else FIXP_DBL schur_div(FIXP_DBL num, FIXP_DBL denum, INT count) { @@ -469,6 +478,7 @@ FIXP_DBL schur_div(FIXP_DBL num, FIXP_DBL denum, INT count) return (FIXP_DBL)(div << (DFRACT_BITS - count)); } +#endif #endif /* !defined(FUNCTION_schur_div) */ -- cgit v1.2.3