shithub: opus-tools

Download patch

ref: d1354febb0fad9e5e9016530666e5b5974c2aba7
parent: 53fa20951694bd4193addd8f9da413494e345751
author: Gregory Maxwell <[email protected]>
date: Mon Jul 23 07:48:17 EDT 2012

Autoconf -msse for mingw/32bit builds, kill some warnings.

Also default to -O3/-ffast-math which is a ~3% speed
gain for opusdec while resampling on x86_64.

--- a/configure.ac
+++ b/configure.ac
@@ -104,6 +104,17 @@
   AC_DEFINE([ENABLE_ASSERTIONS], , [Assertions])
 fi])
 
+if test "x$CFLAGS" = "x-g -O2"; then
+saved_CFLAGS="$CFLAGS"
+CFLAGS="-O3 -ffast-math"
+AC_MSG_CHECKING([if ${CC} supports -O3 -ffast-math])
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([char foo;])],
+      [ AC_MSG_RESULT([yes])
+        saved_CFLAGS="-O3 -ffast-math" ],
+        AC_MSG_RESULT([no]))
+CFLAGS="$saved_CFLAGS"
+fi
+
 dnl check for Ogg
 HAVE_OGG=no
 
@@ -172,10 +183,6 @@
 fi
 
 
-dnl Enable stack-protector-all only on x86 where it's well supported.
-dnl on some platforms it causes crashes. Hopefully the OS's default's
-dnl include this on platforms that work but have been missed here.
-
 on_x86=no
 case "$host_cpu" in
 i[[3456]]86 | x86_64)
@@ -182,6 +189,21 @@
   on_x86=yes
   ;;
 esac
+
+if test "x$on_x86" = "xyes"; then
+saved_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -msse"
+AC_MSG_CHECKING([if ${CC} supports -msse])
+AC_LINK_IFELSE([AC_LANG_SOURCE([void main(void){char foo;}])],
+      [ AC_MSG_RESULT([yes])
+        SSE="-msse"; ac_build_sse=yes ],
+        AC_MSG_RESULT([no]))
+CFLAGS="$saved_CFLAGS $SSE"
+fi
+
+dnl Enable stack-protector-all only on x86 where it's well supported.
+dnl on some platforms it causes crashes. Hopefully the OS's default's
+dnl include this on platforms that work but have been missed here.
 
 ac_build_stack_protector=no
 if test "x$ac_cv_c_compiler_gnu" = "xyes" && test "x$on_x86" = "xyes"; then
--- a/src/resample.c
+++ b/src/resample.c
@@ -337,7 +337,6 @@
    const int frac_advance = st->frac_advance;
    const spx_uint32_t den_rate = st->den_rate;
    spx_word32_t sum;
-   int j;
 
    while (!(last_sample >= (spx_int32_t)*in_len || out_sample >= (spx_int32_t)*out_len))
    {
@@ -345,6 +344,7 @@
       const spx_word16_t *iptr = & in[last_sample];
 
 #ifndef OVERRIDE_INNER_PRODUCT_SINGLE
+      int j;
       sum = 0;
       for(j=0;j<N;j++) sum += MULT16_16(sinct[j], iptr[j]);
 
@@ -394,7 +394,6 @@
    const int frac_advance = st->frac_advance;
    const spx_uint32_t den_rate = st->den_rate;
    double sum;
-   int j;
 
    while (!(last_sample >= (spx_int32_t)*in_len || out_sample >= (spx_int32_t)*out_len))
    {
@@ -402,6 +401,7 @@
       const spx_word16_t *iptr = & in[last_sample];
 
 #ifndef OVERRIDE_INNER_PRODUCT_DOUBLE
+      int j;
       double accum[4] = {0,0,0,0};
 
       for(j=0;j<N;j+=4) {
@@ -441,7 +441,6 @@
    const int int_advance = st->int_advance;
    const int frac_advance = st->frac_advance;
    const spx_uint32_t den_rate = st->den_rate;
-   int j;
    spx_word32_t sum;
 
    while (!(last_sample >= (spx_int32_t)*in_len || out_sample >= (spx_int32_t)*out_len))
@@ -458,6 +457,7 @@
 
 
 #ifndef OVERRIDE_INTERPOLATE_PRODUCT_SINGLE
+      int j;
       spx_word32_t accum[4] = {0,0,0,0};
 
       for(j=0;j<N;j++) {
@@ -503,7 +503,6 @@
    const int int_advance = st->int_advance;
    const int frac_advance = st->frac_advance;
    const spx_uint32_t den_rate = st->den_rate;
-   int j;
    spx_word32_t sum;
 
    while (!(last_sample >= (spx_int32_t)*in_len || out_sample >= (spx_int32_t)*out_len))
@@ -520,6 +519,7 @@
 
 
 #ifndef OVERRIDE_INTERPOLATE_PRODUCT_DOUBLE
+      int j;
       double accum[4] = {0,0,0,0};
 
       for(j=0;j<N;j++) {
--- a/src/resample_sse.h
+++ b/src/resample_sse.h
@@ -41,7 +41,7 @@
 #else
 #include <intrin.h>
 
-static inline int query_cpu_support_sse()
+static inline int query_cpu_support_sse(void)
 {
    static int initialized = 0;
    static int return_value;