diff --git a/configure b/configure
index 00405ba..c6cb40a 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,8 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68.
+# Generated by GNU Autoconf 2.68 for opus 1.1.
+#
+# Report bugs to <opus@xiph.org>.
 #
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -244,10 +246,11 @@
     $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
     $as_echo "$0: be upgraded to zsh 4.3.4 or later."
   else
-    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
+    $as_echo "$0: Please tell bug-autoconf@gnu.org and opus@xiph.org
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
   fi
   exit 1
 fi
@@ -565,12 +568,12 @@
 MAKEFLAGS=
 
 # Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
+PACKAGE_NAME='opus'
+PACKAGE_TARNAME='opus'
+PACKAGE_VERSION='1.1'
+PACKAGE_STRING='opus 1.1'
+PACKAGE_BUGREPORT='opus@xiph.org'
+PACKAGE_URL=''
 
 ac_unique_file="src/opus_encoder.c"
 # Factoring default headers for most tests.
@@ -613,19 +616,35 @@
 am__EXEEXT_TRUE
 LTLIBOBJS
 LIBOBJS
-PC_LIBM
 PC_BUILD
-CUSTOM_MODES_FALSE
-CUSTOM_MODES_TRUE
-FIXED_POINT_FALSE
-FIXED_POINT_TRUE
-SIZE32
-SIZE16
-SYMBOL_VISIBILITY
+EXTRA_PROGRAMS_FALSE
+EXTRA_PROGRAMS_TRUE
 HAVE_DOXYGEN_FALSE
 HAVE_DOXYGEN_TRUE
 HAVE_DOXYGEN
+OPUS_HAVE_RTCD
+CPU_ARM_FALSE
+CPU_ARM_TRUE
+OPUS_ARM_MAY_HAVE_NEON
+OPUS_ARM_MAY_HAVE_MEDIA
+OPUS_ARM_MAY_HAVE_EDSP
+OPUS_ARM_EXTERNAL_ASM_FALSE
+OPUS_ARM_EXTERNAL_ASM_TRUE
+HAVE_PERL
+OPUS_ARM_INLINE_ASM_FALSE
+OPUS_ARM_INLINE_ASM_TRUE
+CUSTOM_MODES_FALSE
+CUSTOM_MODES_TRUE
+DISABLE_FLOAT_API_FALSE
+DISABLE_FLOAT_API_TRUE
+FIXED_POINT_FALSE
+FIXED_POINT_TRUE
 LIBM
+am__fastdepCCAS_FALSE
+am__fastdepCCAS_TRUE
+CCASDEPMODE
+CCASFLAGS
+CCAS
 CPP
 OTOOL64
 OTOOL
@@ -702,7 +721,6 @@
 OPUS_LT_AGE
 OPUS_LT_REVISION
 OPUS_LT_CURRENT
-OPUS_VERSION
 AM_BACKSLASH
 AM_DEFAULT_VERBOSITY
 AM_DEFAULT_V
@@ -760,11 +778,15 @@
 enable_libtool_lock
 enable_fixed_point
 enable_fixed_point_debug
+enable_float_api
 enable_custom_modes
 enable_float_approx
+enable_asm
+enable_rtcd
 enable_assertions
 enable_fuzzing
 enable_doc
+enable_extra_programs
 '
       ac_precious_vars='build_alias
 host_alias
@@ -774,7 +796,9 @@
 LDFLAGS
 LIBS
 CPPFLAGS
-CPP'
+CPP
+CCAS
+CCASFLAGS'
 
 
 # Initialize some variables set by options.
@@ -815,7 +839,7 @@
 localstatedir='${prefix}/var'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
 infodir='${datarootdir}/info'
 htmldir='${docdir}'
 dvidir='${docdir}'
@@ -1317,7 +1341,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
+\`configure' configures opus 1.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1365,7 +1389,7 @@
   --infodir=DIR           info documentation [DATAROOTDIR/info]
   --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
   --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/opus]
   --htmldir=DIR           html documentation [DOCDIR]
   --dvidir=DIR            dvi documentation [DOCDIR]
   --pdfdir=DIR            pdf documentation [DOCDIR]
@@ -1386,7 +1410,9 @@
 fi
 
 if test -n "$ac_init_help"; then
-
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of opus 1.1:";;
+   esac
   cat <<\_ACEOF
 
 Optional Features:
@@ -1404,13 +1430,21 @@
   --disable-dependency-tracking  speeds up one-time build
   --enable-dependency-tracking   do not reject slow dependency extractors
   --disable-libtool-lock  avoid locking (might break parallel builds)
-  --enable-fixed-point       compile without floating point (for machines without a fast enough FPU)
-  --enable-fixed-point-debug debug fixed-point implementation
-  --enable-custom-modes      enable non-Opus modes, e.g. 44.1 kHz & 2^n frames
-  --enable-float-approx      enable fast approximations for floating point
-  --enable-assertions        enable additional software error checking
-  --enable-fuzzing           causes the encoder to make random decisions
+  --enable-fixed-point    compile without floating point (for machines without
+                          a fast enough FPU)
+  --enable-fixed-point-debug
+                          debug fixed-point implementation
+  --disable-float-api     compile without the floating point API (for machines
+                          with no float library)
+  --enable-custom-modes   enable non-Opus modes, e.g. 44.1 kHz & 2^n frames
+  --enable-float-approx   enable fast approximations for floating point
+  --disable-asm           Disable assembly optimizations
+  --disable-rtcd          Disable run-time CPU capabilities detection
+  --enable-assertions     enable additional software error checking
+  --enable-fuzzing        causes the encoder to make random decisions
   --disable-doc           Do not build API documentation
+  --disable-extra-programs
+                          Do not build extra programs (demo and tests)
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -1430,11 +1464,13 @@
   CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
               you have headers in a nonstandard directory <include dir>
   CPP         C preprocessor
+  CCAS        assembler compiler command (defaults to CC)
+  CCASFLAGS   assembler compiler flags (defaults to CFLAGS)
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
 
-Report bugs to the package provider.
+Report bugs to <opus@xiph.org>.
 _ACEOF
 ac_status=$?
 fi
@@ -1497,7 +1533,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-configure
+opus configure 1.1
 generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -1842,6 +1878,10 @@
 $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ---------------------------- ##
+## Report this to opus@xiph.org ##
+## ---------------------------- ##"
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
@@ -1858,189 +1898,11 @@
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
-# --------------------------------------------
-# Tries to find the compile-time value of EXPR in a program that includes
-# INCLUDES, setting VAR accordingly. Returns whether the value could be
-# computed
-ac_fn_c_compute_int ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if test "$cross_compiling" = yes; then
-    # Depending upon the size, compute the lo and hi bounds.
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=$ac_mid; break
-else
-  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
-			if test $ac_lo -le $ac_mid; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) < 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_lo=$ac_mid; break
-else
-  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
-			if test $ac_mid -le $ac_hi; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  ac_lo= ac_hi=
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=$ac_mid
-else
-  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in #((
-?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
-'') ac_retval=1 ;;
-esac
-  else
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    return 1;
-  if (($2) < 0)
-    {
-      long int i = longval ();
-      if (i != ($2))
-	return 1;
-      fprintf (f, "%ld", i);
-    }
-  else
-    {
-      unsigned long int i = ulongval ();
-      if (i != ($2))
-	return 1;
-      fprintf (f, "%lu", i);
-    }
-  /* Do not output a trailing newline, as this causes \r\n confusion
-     on some platforms.  */
-  return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
-  ac_retval=1
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-rm -f conftest.val
-
-  fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_compute_int
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by $as_me, which was
+It was created by opus $as_me 1.1, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
@@ -2389,7 +2251,7 @@
 
 
 
-ac_config_headers="$ac_config_headers config.h"
+
 
 
 # Check whether --enable-silent-rules was given.
@@ -2432,63 +2294,10 @@
 AM_BACKSLASH='\'
 
 
-# Read our default version string from version.mk.
-# Please update this file for releases.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking version.mk" >&5
-$as_echo_n "checking version.mk... " >&6; }
-MK_VERSION=$(awk 'BEGIN { FS = "=" }
-                  /OPUS_VERSION/ { ver = $2}
-                  END {
-                        gsub(/"/, "", ver);
-                        gsub(/^ /, "", ver);
-                        gsub(/ $/, "", ver);
-                        print ver;
-                  }' $srcdir/version.mk)
-if test -z "$MK_VERSION"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MK_VERSION" >&5
-$as_echo "$MK_VERSION" >&6; }
-  OPUS_VERSION="$MK_VERSION"
-fi
-
-# Override with the git version, if available.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking git revision" >&5
-$as_echo_n "checking git revision... " >&6; }
-GIT_VERSION=$(git describe --tags --match 'v*' 2>/dev/null | sed 's/^v//')
-if test -z "$GIT_VERSION"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GIT_VERSION" >&5
-$as_echo "$GIT_VERSION" >&6; }
-  OPUS_VERSION="$GIT_VERSION"
-fi
-
-# Use 'unknown' if all else fails.
-if test -z "$OPUS_VERSION"; then
-  OPUS_VERSION="unknown"
-fi
-
-# For automake.
-PACKAGE=opus
-VERSION=$OPUS_VERSION
-
-# For autoconf
-
-
-# For config.h.
-
-cat >>confdefs.h <<_ACEOF
-#define OPUS_VERSION "$OPUS_VERSION"
-_ACEOF
-
-
 # For libtool.
-OPUS_LT_CURRENT=3
+OPUS_LT_CURRENT=5
 OPUS_LT_REVISION=0
-OPUS_LT_AGE=3
+OPUS_LT_AGE=5
 
 
 
@@ -2960,8 +2769,8 @@
 
 
 # Define the identity of the package.
- PACKAGE=$PACKAGE
- VERSION=$VERSION
+ PACKAGE='opus'
+ VERSION='1.1'
 
 
 # Some tools Automake needs.
@@ -8042,6 +7851,10 @@
 $RM -r conftest*
 
 
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
 if test -n "$compiler"; then
 
 lt_prog_compiler_no_builtin_flag=
@@ -12012,8 +11825,148 @@
 esac
 
 
+# By default we simply use the C compiler to build assembly code.
+
+test "${CCAS+set}" = set || CCAS=$CC
+test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+
+
+
+depcc="$CCAS"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CCAS_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CCAS_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CCAS_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CCAS_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; }
+CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then
+  am__fastdepCCAS_TRUE=
+  am__fastdepCCAS_FALSE='#'
+else
+  am__fastdepCCAS_TRUE='#'
+  am__fastdepCCAS_FALSE=
+fi
+
+
+
+
+$as_echo "#define OPUS_BUILD /**/" >>confdefs.h
+
+
 #Use a hacked up version of autoconf's AC_C_RESTRICT because it's not
 #strong enough a test to detect old buggy versions of GCC (e.g. 2.95.3)
+#Note: Both this and the test for variable-size arrays below are also
+#      done by AC_PROG_CC_C99, but not thoroughly enough apparently.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
 $as_echo_n "checking for C/C++ restrict keyword... " >&6; }
 if ${ac_cv_c_restrict+:} false; then :
@@ -12025,16 +11978,16 @@
      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 typedef int * int_ptr;
-	int foo (int_ptr $ac_kw ip, int * $ac_kw baz[]) {
-	return ip[0];
+        int foo (int_ptr $ac_kw ip, int * $ac_kw baz[]) {
+        return ip[0];
        }
 int
 main ()
 {
 int s[1];
-	int * $ac_kw t = s;
-	t[0] = 0;
-	return foo(t, (void *)0)
+        int * $ac_kw t = s;
+        t[0] = 0;
+        return foo(t, (void *)0)
   ;
   return 0;
 }
@@ -12050,7 +12003,9 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
 $as_echo "$ac_cv_c_restrict" >&6; }
 
- case $ac_cv_c_restrict in
+
+
+case $ac_cv_c_restrict in
    restrict) ;;
    no) $as_echo "#define restrict /**/" >>confdefs.h
  ;;
@@ -12058,11 +12013,7 @@
 #define restrict $ac_cv_c_restrict
 _ACEOF
  ;;
- esac
-
-
-$as_echo "#define OPUS_BUILD /**/" >>confdefs.h
-
+esac
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C99 variable-size arrays" >&5
 $as_echo_n "checking for C99 variable-size arrays... " >&6; }
@@ -12078,75 +12029,114 @@
 }
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-  has_var_arrays=yes;
-$as_echo "#define VAR_ARRAYS /**/" >>confdefs.h
+   has_var_arrays=yes
+      use_alloca="no (using var arrays)"
+
+$as_echo "#define VAR_ARRAYS 1" >>confdefs.h
 
 
 else
-  has_var_arrays=no
+
+      has_var_arrays=no
 
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_var_arrays" >&5
 $as_echo "$has_var_arrays" >&6; }
 
-for ac_header in alloca.h getopt.h
+if test "$has_var_arrays" = "no"; then :
+
+   for ac_header in alloca.h
 do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  ac_fn_c_check_header_mongrel "$LINENO" "alloca.h" "ac_cv_header_alloca_h" "$ac_includes_default"
+if test "x$ac_cv_header_alloca_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_ALLOCA_H 1
 _ACEOF
 
 fi
 
 done
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
 $as_echo_n "checking for alloca... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <alloca.h>
 int
 main ()
 {
-
-int foo=10;
-int *array = alloca(foo);
-
+int foo=10; int *array = alloca(foo);
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-
-has_alloca=yes;
-if test x$has_var_arrays = "xno" ; then
+   use_alloca=yes;
 
 $as_echo "#define USE_ALLOCA /**/" >>confdefs.h
 
-fi
 
 else
-  has_alloca=no
+
+       use_alloca=no
 
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_alloca" >&5
-$as_echo "$has_alloca" >&6; }
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_alloca" >&5
+$as_echo "$use_alloca" >&6; }
 
-ac_fn_c_check_func "$LINENO" "exp" "ac_cv_func_exp"
-if test "x$ac_cv_func_exp" = xyes; then :
-  fp_libm_not_needed=yes;LIBM=
-else
-  fp_libm_not_needed=dunno
 fi
 
-if test x"$fp_libm_not_needed" = xdunno; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for exp in -lm" >&5
-$as_echo_n "checking for exp in -lm... " >&6; }
-if ${ac_cv_lib_m_exp+:} false; then :
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _mwvalidcheckl in -lmw" >&5
+$as_echo_n "checking for _mwvalidcheckl in -lmw... " >&6; }
+if ${ac_cv_lib_mw__mwvalidcheckl+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmw  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char _mwvalidcheckl ();
+int
+main ()
+{
+return _mwvalidcheckl ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_mw__mwvalidcheckl=yes
+else
+  ac_cv_lib_mw__mwvalidcheckl=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mw__mwvalidcheckl" >&5
+$as_echo "$ac_cv_lib_mw__mwvalidcheckl" >&6; }
+if test "x$ac_cv_lib_mw__mwvalidcheckl" = xyes; then :
+  LIBM="-lmw"
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5
+$as_echo_n "checking for cos in -lm... " >&6; }
+if ${ac_cv_lib_m_cos+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12160,32 +12150,173 @@
 #ifdef __cplusplus
 extern "C"
 #endif
-char exp ();
+char cos ();
 int
 main ()
 {
-return exp ();
+return cos ();
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_m_exp=yes
+  ac_cv_lib_m_cos=yes
 else
-  ac_cv_lib_m_exp=no
+  ac_cv_lib_m_cos=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_exp" >&5
-$as_echo "$ac_cv_lib_m_exp" >&6; }
-if test "x$ac_cv_lib_m_exp" = xyes; then :
-  LIBS="-lm $LIBS"; LIBM="-lm"
-else
-  LIBM=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5
+$as_echo "$ac_cv_lib_m_cos" >&6; }
+if test "x$ac_cv_lib_m_cos" = xyes; then :
+  LIBM="$LIBM -lm"
 fi
 
+  ;;
+*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5
+$as_echo_n "checking for cos in -lm... " >&6; }
+if ${ac_cv_lib_m_cos+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cos ();
+int
+main ()
+{
+return cos ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_m_cos=yes
+else
+  ac_cv_lib_m_cos=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5
+$as_echo "$ac_cv_lib_m_cos" >&6; }
+if test "x$ac_cv_lib_m_cos" = xyes; then :
+  LIBM="-lm"
+fi
+
+  ;;
+esac
+
+
+
+# Check whether --enable-fixed-point was given.
+if test "${enable_fixed_point+set}" = set; then :
+  enableval=$enable_fixed_point;
+else
+  enable_fixed_point=no
+fi
+
+
+if test "$enable_fixed_point" = "yes"; then :
+
+  enable_float="no"
+
+$as_echo "#define FIXED_POINT 1" >>confdefs.h
+
+  PC_BUILD="fixed-point"
+
+else
+
+  enable_float="yes";
+  PC_BUILD="floating-point"
+
+fi
+
+ if test "$enable_fixed_point" = "yes"; then
+  FIXED_POINT_TRUE=
+  FIXED_POINT_FALSE='#'
+else
+  FIXED_POINT_TRUE='#'
+  FIXED_POINT_FALSE=
+fi
+
+
+# Check whether --enable-fixed-point-debug was given.
+if test "${enable_fixed_point_debug+set}" = set; then :
+  enableval=$enable_fixed_point_debug;
+else
+  enable_fixed_point_debug=no
+fi
+
+
+if test "$enable_fixed_point_debug" = "yes"; then :
+
+
+$as_echo "#define FIXED_DEBUG 1" >>confdefs.h
+
+
+fi
+
+# Check whether --enable-float_api was given.
+if test "${enable_float_api+set}" = set; then :
+  enableval=$enable_float_api;
+else
+  enable_float_api=yes
+fi
+
+
+ if test "$enable_float_api" = "no"; then
+  DISABLE_FLOAT_API_TRUE=
+  DISABLE_FLOAT_API_FALSE='#'
+else
+  DISABLE_FLOAT_API_TRUE='#'
+  DISABLE_FLOAT_API_FALSE=
+fi
+
+
+if test "$enable_float_api" = "no"; then :
+
+
+$as_echo "#define DISABLE_FLOAT_API 1" >>confdefs.h
+
+
+fi
+
+# Check whether --enable-custom-modes was given.
+if test "${enable_custom_modes+set}" = set; then :
+  enableval=$enable_custom_modes;
+else
+  enable_custom_modes=no
+fi
+
+
+if test "$enable_custom_modes" = "yes"; then :
+
+
+$as_echo "#define CUSTOM_MODES 1" >>confdefs.h
+
+  PC_BUILD="$PC_BUILD, custom modes"
+
+fi
+
+ if test "$enable_custom_modes" = "yes"; then
+  CUSTOM_MODES_TRUE=
+  CUSTOM_MODES_FALSE='#'
+else
+  CUSTOM_MODES_TRUE='#'
+  CUSTOM_MODES_FALSE=
 fi
 
 
@@ -12196,96 +12327,564 @@
 #  ;;
 #esac
 
-ac_enable_fixed="no";
-ac_enable_float="yes";
-# Check whether --enable-fixed-point was given.
-if test "${enable_fixed_point+set}" = set; then :
-  enableval=$enable_fixed_point; if test "$enableval" = yes; then
-  ac_enable_fixed="yes";
-  ac_enable_float="no";
-
-$as_echo "#define FIXED_POINT 1" >>confdefs.h
-
-fi
-fi
-
-
-ac_enable_fixed_debug="no"
-# Check whether --enable-fixed-point-debug was given.
-if test "${enable_fixed_point_debug+set}" = set; then :
-  enableval=$enable_fixed_point_debug; if test "$enableval" = yes; then
-  ac_enable_fixed_debug="yes"
-
-$as_echo "#define FIXED_DEBUG /**/" >>confdefs.h
-
-fi
-fi
-
-
-ac_enable_custom_modes="no"
-# Check whether --enable-custom-modes was given.
-if test "${enable_custom_modes+set}" = set; then :
-  enableval=$enable_custom_modes; if test "$enableval" = yes; then
-  ac_enable_custom_modes="yes"
-
-$as_echo "#define CUSTOM_MODES /**/" >>confdefs.h
-
-fi
-fi
-
-
-float_approx=$has_float_approx
 # Check whether --enable-float-approx was given.
 if test "${enable_float_approx+set}" = set; then :
-  enableval=$enable_float_approx;  if test "$enableval" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Floating point approximations are not supported on all platforms." >&5
+  enableval=$enable_float_approx; if test "$enable_float_approx" = "yes"; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Floating point approximations are not supported on all platforms." >&5
 $as_echo "$as_me: WARNING: Floating point approximations are not supported on all platforms." >&2;}
-    float_approx=yes
-    else
-    float_approx=no
-    fi
+     fi
+
 else
-   float_approx=$has_float_approx
+  enable_float_approx=$has_float_approx
 fi
 
 
-if test "x${float_approx}" = "xyes"; then
+if test "$enable_float_approx" = "yes"; then :
 
-$as_echo "#define FLOAT_APPROX /**/" >>confdefs.h
+
+$as_echo "#define FLOAT_APPROX 1" >>confdefs.h
+
 
 fi
 
-ac_enable_assertions="no"
+# Check whether --enable-asm was given.
+if test "${enable_asm+set}" = set; then :
+  enableval=$enable_asm;
+else
+  enable_asm=yes
+fi
+
+
+# Check whether --enable-rtcd was given.
+if test "${enable_rtcd+set}" = set; then :
+  enableval=$enable_rtcd;
+else
+  enable_rtcd=yes
+fi
+
+
+rtcd_support=no
+cpu_arm=no
+
+if test x"${enable_asm}" = x"yes"; then :
+
+    inline_optimization="No ASM for your platform, please send patches"
+    case $host_cpu in
+      arm*)
+                if test "$enable_float" != "yes"; then :
+
+            cpu_arm=yes
+
+$as_echo "#define OPUS_ARM_ASM /**/" >>confdefs.h
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports gcc-style inline assembly" >&5
+$as_echo_n "checking if compiler supports gcc-style inline assembly... " >&6; }
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+#ifdef __GNUC_MINOR__
+#if (__GNUC__ * 1000 + __GNUC_MINOR__) < 3004
+#error GCC before 3.4 has critical bugs compiling inline assembly
+#endif
+#endif
+__asm__ (""::)
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+  if test "X$flag_ok" = Xyes ; then
+    inline_optimization="ARM"
+    true
+  else
+    inline_optimization="disabled"
+
+    true
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if assembler supports EDSP instructions on ARM" >&5
+$as_echo_n "checking if assembler supports EDSP instructions on ARM... " >&6; }
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+__asm__("qadd r3,r3,r3")
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+                     OPUS_ARM_INLINE_EDSP=1
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                     OPUS_ARM_INLINE_EDSP=0
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if assembler supports ARMv6 media instructions on ARM" >&5
+$as_echo_n "checking if assembler supports ARMv6 media instructions on ARM... " >&6; }
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+__asm__("shadd8 r3,r3,r3")
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+                     OPUS_ARM_INLINE_MEDIA=1
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                     OPUS_ARM_INLINE_MEDIA=0
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if assembler supports NEON instructions on ARM" >&5
+$as_echo_n "checking if assembler supports NEON instructions on ARM... " >&6; }
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+__asm__("vorr d0,d0,d0")
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+                     OPUS_ARM_INLINE_NEON=1
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                     OPUS_ARM_INLINE_NEON=0
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+            if test x"$inline_optimization" = x"ARM"; then :
+
+                 if true; then
+  OPUS_ARM_INLINE_ASM_TRUE=
+  OPUS_ARM_INLINE_ASM_FALSE='#'
+else
+  OPUS_ARM_INLINE_ASM_TRUE='#'
+  OPUS_ARM_INLINE_ASM_FALSE=
+fi
+
+
+$as_echo "#define OPUS_ARM_INLINE_ASM 1" >>confdefs.h
+
+                if test x"$OPUS_ARM_INLINE_EDSP" = x"1"; then :
+
+
+$as_echo "#define OPUS_ARM_INLINE_EDSP 1" >>confdefs.h
+
+                    inline_optimization="$inline_optimization (EDSP)"
+
+fi
+                if test x"$OPUS_ARM_INLINE_MEDIA" = x"1"; then :
+
+
+$as_echo "#define OPUS_ARM_INLINE_MEDIA 1" >>confdefs.h
+
+                    inline_optimization="$inline_optimization (Media)"
+
+fi
+                if test x"$OPUS_ARM_INLINE_NEON" = x"1"; then :
+
+
+$as_echo "#define OPUS_ARM_INLINE_NEON 1" >>confdefs.h
+
+                    inline_optimization="$inline_optimization (NEON)"
+
+fi
+
+fi
+                        # Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_HAVE_PERL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_PERL"; then
+  ac_cv_prog_HAVE_PERL="$HAVE_PERL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_HAVE_PERL="yes"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_prog_HAVE_PERL" && ac_cv_prog_HAVE_PERL="no"
+fi
+fi
+HAVE_PERL=$ac_cv_prog_HAVE_PERL
+if test -n "$HAVE_PERL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_PERL" >&5
+$as_echo "$HAVE_PERL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+            if test x"$HAVE_PERL" = x"yes"; then :
+
+                 if true; then
+  OPUS_ARM_EXTERNAL_ASM_TRUE=
+  OPUS_ARM_EXTERNAL_ASM_FALSE='#'
+else
+  OPUS_ARM_EXTERNAL_ASM_TRUE='#'
+  OPUS_ARM_EXTERNAL_ASM_FALSE=
+fi
+
+                asm_optimization="ARM"
+                if test x"$OPUS_ARM_INLINE_EDSP" = x"1"; then :
+
+                    OPUS_ARM_PRESUME_EDSP=1
+                    OPUS_ARM_MAY_HAVE_EDSP=1
+
+else
+
+                    OPUS_ARM_PRESUME_EDSP=0
+                    OPUS_ARM_MAY_HAVE_EDSP=0
+
+fi
+                if test x"$OPUS_ARM_INLINE_MEDIA" = x"1"; then :
+
+                    OPUS_ARM_PRESUME_MEDIA=1
+                    OPUS_ARM_MAY_HAVE_MEDIA=1
+
+else
+
+                    OPUS_ARM_PRESUME_MEDIA=0
+                    OPUS_ARM_MAY_HAVE_MEDIA=0
+
+fi
+                if test x"$OPUS_ARM_INLINE_NEON" = x"1"; then :
+
+                    OPUS_ARM_PRESUME_NEON=1
+                    OPUS_ARM_MAY_HAVE_NEON=1
+
+else
+
+                    OPUS_ARM_PRESUME_NEON=0
+                    OPUS_ARM_MAY_HAVE_NEON=0
+
+fi
+                if test x"$enable_rtcd" = x"yes"; then :
+
+                    if test x"$OPUS_ARM_MAY_HAVE_EDSP" != x"1"; then :
+
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: Trying to force-enable armv5e EDSP instructions..." >&5
+$as_echo "$as_me: Trying to force-enable armv5e EDSP instructions..." >&6;}
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if assembler supports EDSP instructions on ARM" >&5
+$as_echo_n "checking if assembler supports EDSP instructions on ARM... " >&6; }
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+__asm__(".arch armv5te\n.object_arch armv4t\nqadd r3,r3,r3")
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+                     OPUS_ARM_MAY_HAVE_EDSP=1
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+fi
+                    if test x"$OPUS_ARM_MAY_HAVE_MEDIA" != x"1"; then :
+
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: Trying to force-enable ARMv6 media instructions..." >&5
+$as_echo "$as_me: Trying to force-enable ARMv6 media instructions..." >&6;}
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if assembler supports ARMv6 media instructions on ARM" >&5
+$as_echo_n "checking if assembler supports ARMv6 media instructions on ARM... " >&6; }
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+__asm__(".arch armv6\n.object_arch armv4t\nshadd8 r3,r3,r3")
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+                     OPUS_ARM_MAY_HAVE_MEDIA=1
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+fi
+                    if test x"$OPUS_ARM_MAY_HAVE_NEON" != x"1"; then :
+
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: Trying to force-enable NEON instructions..." >&5
+$as_echo "$as_me: Trying to force-enable NEON instructions..." >&6;}
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if assembler supports NEON instructions on ARM" >&5
+$as_echo_n "checking if assembler supports NEON instructions on ARM... " >&6; }
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+__asm__(".arch armv7-a\n.fpu neon\n.object_arch armv4t\nvorr d0,d0,d0")
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+                     OPUS_ARM_MAY_HAVE_NEON=1
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+fi
+
+fi
+                rtcd_support=
+                if test x"$OPUS_ARM_MAY_HAVE_EDSP" = x"1"; then :
+
+
+$as_echo "#define OPUS_ARM_MAY_HAVE_EDSP 1" >>confdefs.h
+
+                    if test x"$OPUS_ARM_PRESUME_EDSP" = x"1"; then :
+
+
+$as_echo "#define OPUS_ARM_PRESUME_EDSP 1" >>confdefs.h
+
+                        asm_optimization="$asm_optimization (EDSP)"
+
+else
+  rtcd_support="$rtcd_support (EDSP)"
+
+fi
+
+fi
+
+                if test x"$OPUS_ARM_MAY_HAVE_MEDIA" = x"1"; then :
+
+
+$as_echo "#define OPUS_ARM_MAY_HAVE_MEDIA 1" >>confdefs.h
+
+                    if test x"$OPUS_ARM_PRESUME_MEDIA" = x"1"; then :
+
+
+$as_echo "#define OPUS_ARM_PRESUME_MEDIA 1" >>confdefs.h
+
+                        asm_optimization="$asm_optimization (Media)"
+
+else
+  rtcd_support="$rtcd_support (Media)"
+
+fi
+
+fi
+
+                if test x"$OPUS_ARM_MAY_HAVE_NEON" = x"1"; then :
+
+
+$as_echo "#define OPUS_ARM_MAY_HAVE_NEON 1" >>confdefs.h
+
+                    if test x"$OPUS_ARM_PRESUME_NEON" = x"1"; then :
+
+
+$as_echo "#define OPUS_ARM_PRESUME_NEON 1" >>confdefs.h
+
+                        asm_optimization="$asm_optimization (NEON)"
+
+else
+  rtcd_support="$rtcd_support (NEON)"
+
+fi
+
+fi
+
+                                                if test x"$rtcd_support" != x""; then :
+  rtcd_support=ARM"$rtcd_support"
+else
+  rtcd_support="no"
+
+fi
+
+else
+
+                { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** ARM assembly requires perl -- disabling optimizations" >&5
+$as_echo "$as_me: WARNING: *** ARM assembly requires perl -- disabling optimizations" >&2;}
+                asm_optimization="(missing perl dependency for ARM)"
+
+fi
+
+fi
+        ;;
+    esac
+
+else
+
+   inline_optimization="disabled"
+   asm_optimization="disabled"
+
+fi
+
+ if test "$cpu_arm" = "yes"; then
+  CPU_ARM_TRUE=
+  CPU_ARM_FALSE='#'
+else
+  CPU_ARM_TRUE='#'
+  CPU_ARM_FALSE=
+fi
+
+ if test x"${inline_optimization:0:3}" = x"ARM"; then
+  OPUS_ARM_INLINE_ASM_TRUE=
+  OPUS_ARM_INLINE_ASM_FALSE='#'
+else
+  OPUS_ARM_INLINE_ASM_TRUE='#'
+  OPUS_ARM_INLINE_ASM_FALSE=
+fi
+
+ if test x"${asm_optimization:0:3}" = x"ARM"; then
+  OPUS_ARM_EXTERNAL_ASM_TRUE=
+  OPUS_ARM_EXTERNAL_ASM_FALSE='#'
+else
+  OPUS_ARM_EXTERNAL_ASM_TRUE='#'
+  OPUS_ARM_EXTERNAL_ASM_FALSE=
+fi
+
+
+if test x"$enable_rtcd" = x"yes"; then :
+
+    if test x"$rtcd_support" != x"no"; then :
+
+
+$as_echo "#define OPUS_HAVE_RTCD 1" >>confdefs.h
+
+        OPUS_HAVE_RTCD=1
+
+
+fi
+
+else
+
+    rtcd_support="disabled"
+
+fi
+
 # Check whether --enable-assertions was given.
 if test "${enable_assertions+set}" = set; then :
-  enableval=$enable_assertions; if test "$enableval" = yes; then
-  ac_enable_assertions="yes"
-
-$as_echo "#define ENABLE_ASSERTIONS /**/" >>confdefs.h
-
-fi
+  enableval=$enable_assertions;
+else
+  enable_assertions=no
 fi
 
 
-ac_enable_fuzzing="no"
+if test "$enable_assertions" = "yes"; then :
+
+
+$as_echo "#define ENABLE_ASSERTIONS 1" >>confdefs.h
+
+
+fi
+
 # Check whether --enable-fuzzing was given.
 if test "${enable_fuzzing+set}" = set; then :
-  enableval=$enable_fuzzing; if test "$enableval" = yes; then
-  ac_enable_fuzzing="yes"
-
-$as_echo "#define FUZZING /**/" >>confdefs.h
-
-fi
+  enableval=$enable_fuzzing;
+else
+  enable_fuzzing=no
 fi
 
 
-ac_enable_doc="yes"
+if test "$enable_fuzzing" = "yes"; then :
+
+
+$as_echo "#define FUZZING 1" >>confdefs.h
+
+
+fi
+
 # Check whether --enable-doc was given.
 if test "${enable_doc+set}" = set; then :
-  enableval=$enable_doc; ac_enable_doc=$enableval
+  enableval=$enable_doc;
+else
+  enable_doc=yes
 fi
 
-# Extract the first word of "doxygen", so it can be a program name with args.
+
+if test "$enable_doc" = "yes"; then :
+
+  # Extract the first word of "doxygen", so it can be a program name with args.
 set dummy doxygen; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
@@ -12323,11 +12922,14 @@
 fi
 
 
-if test "$HAVE_DOXYGEN" != "yes" -o "$ac_enable_doc" != "yes"; then
-  HAVE_DOXYGEN="false"
-  ac_enable_doc="no"
+
+else
+
+  HAVE_DOXYGEN=no
+
 fi
- if test $HAVE_DOXYGEN = yes; then
+
+ if test "$HAVE_DOXYGEN" = "yes"; then
   HAVE_DOXYGEN_TRUE=
   HAVE_DOXYGEN_FALSE='#'
 else
@@ -12336,6 +12938,24 @@
 fi
 
 
+# Check whether --enable-extra-programs was given.
+if test "${enable_extra_programs+set}" = set; then :
+  enableval=$enable_extra_programs;
+else
+  enable_extra_programs=yes
+fi
+
+
+ if test "$enable_extra_programs" = "yes"; then
+  EXTRA_PROGRAMS_TRUE=
+  EXTRA_PROGRAMS_FALSE='#'
+else
+  EXTRA_PROGRAMS_TRUE='#'
+  EXTRA_PROGRAMS_FALSE=
+fi
+
+
+
 saved_CFLAGS="$CFLAGS"
 CFLAGS="$CFLAGS -fvisibility=hidden"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ${CC} supports -fvisibility=hidden" >&5
@@ -12347,21 +12967,21 @@
 if ac_fn_c_try_compile "$LINENO"; then :
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-        SYMBOL_VISIBILITY="-fvisibility=hidden"
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
+      CFLAGS="$saved_CFLAGS"
+
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$saved_CFLAGS $SYMBOL_VISIBILITY"
-
 
 CFLAGS="$CFLAGS -W"
 
+warn_CFLAGS="-Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes"
 saved_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if ${CC} supports -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes" >&5
-$as_echo_n "checking if ${CC} supports -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes... " >&6; }
+CFLAGS="$CFLAGS $warn_CFLAGS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if ${CC} supports ${warn_CFLAGS}" >&5
+$as_echo_n "checking if ${CC} supports ${warn_CFLAGS}... " >&6; }
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 char foo;
@@ -12369,14 +12989,16 @@
 if ac_fn_c_try_compile "$LINENO"; then :
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-        EXTRA_WARNS="-Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes"
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
+      CFLAGS="$saved_CFLAGS"
+
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$saved_CFLAGS $EXTRA_WARNS"
 
+saved_LIBS="$LIBS"
+LIBS="$LIBS $LIBM"
 for ac_func in lrintf
 do :
   ac_fn_c_check_func "$LINENO" "lrintf" "ac_cv_func_lrintf"
@@ -12399,6 +13021,8 @@
 fi
 done
 
+LIBS="$saved_LIBS"
+
 for ac_func in __malloc_hook
 do :
   ac_fn_c_check_func "$LINENO" "__malloc_hook" "ac_cv_func___malloc_hook"
@@ -12411,201 +13035,11 @@
 done
 
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
-$as_echo_n "checking size of short... " >&6; }
-if ${ac_cv_sizeof_short+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_short" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (short)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_short=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
-$as_echo "$ac_cv_sizeof_short" >&6; }
 
 
+ac_config_files="$ac_config_files Makefile opus.pc opus-uninstalled.pc celt/arm/armopts.s doc/Makefile doc/Doxyfile"
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SHORT $ac_cv_sizeof_short
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if ${ac_cv_sizeof_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_int" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (int)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_int=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if ${ac_cv_sizeof_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_long=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
-$as_echo_n "checking size of long long... " >&6; }
-if ${ac_cv_sizeof_long_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_long_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_long_long=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
-$as_echo "$ac_cv_sizeof_long_long" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
-_ACEOF
-
-
-
-if test x$has_char16 = "xyes" ; then
-        case 1 in
-                $ac_cv_sizeof_short) SIZE16="short";;
-                $ac_cv_sizeof_int) SIZE16="int";;
-        esac
-else
-        case 2 in
-                $ac_cv_sizeof_short) SIZE16="short";;
-                $ac_cv_sizeof_int) SIZE16="int";;
-        esac
-fi
-
-if test x$has_char16 = "xyes" ; then
-        case 2 in
-                $ac_cv_sizeof_int) SIZE32="int";;
-                $ac_cv_sizeof_long) SIZE32="long";;
-                $ac_cv_sizeof_short) SIZE32="short";;
-        esac
-else
-        case 4 in
-                $ac_cv_sizeof_int) SIZE32="int";;
-                $ac_cv_sizeof_long) SIZE32="long";;
-                $ac_cv_sizeof_short) SIZE32="short";;
-        esac
-fi
-
-
-
-
- if test x$ac_enable_fixed = xyes; then
-  FIXED_POINT_TRUE=
-  FIXED_POINT_FALSE='#'
-else
-  FIXED_POINT_TRUE='#'
-  FIXED_POINT_FALSE=
-fi
-
- if test x$ac_enable_custom_modes = xyes; then
-  CUSTOM_MODES_TRUE=
-  CUSTOM_MODES_FALSE='#'
-else
-  CUSTOM_MODES_TRUE='#'
-  CUSTOM_MODES_FALSE=
-fi
-
-
-if test x$ac_enable_float = xyes; then
-  PC_BUILD="floating-point"
-  PC_LIBM=$LIBM
-else
-  PC_BUILD="fixed-point"
-  PC_LIBM=
-fi
-if test x$ac_enable_custom_modes = xyes; then
-  PC_BUILD="${PC_BUILD}, custom modes"
-  PC_LIBM=$LIBM
-fi
-
-
-
-
-ac_config_files="$ac_config_files Makefile opus.pc opus-uninstalled.pc doc/Makefile doc/Doxyfile"
+ac_config_headers="$ac_config_headers config.h"
 
 
 cat >confcache <<\_ACEOF
@@ -12737,18 +13171,50 @@
   as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${HAVE_DOXYGEN_TRUE}" && test -z "${HAVE_DOXYGEN_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_DOXYGEN\" was never defined.
+if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${FIXED_POINT_TRUE}" && test -z "${FIXED_POINT_FALSE}"; then
   as_fn_error $? "conditional \"FIXED_POINT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${DISABLE_FLOAT_API_TRUE}" && test -z "${DISABLE_FLOAT_API_FALSE}"; then
+  as_fn_error $? "conditional \"DISABLE_FLOAT_API\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${CUSTOM_MODES_TRUE}" && test -z "${CUSTOM_MODES_FALSE}"; then
   as_fn_error $? "conditional \"CUSTOM_MODES\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${OPUS_ARM_INLINE_ASM_TRUE}" && test -z "${OPUS_ARM_INLINE_ASM_FALSE}"; then
+  as_fn_error $? "conditional \"OPUS_ARM_INLINE_ASM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${OPUS_ARM_EXTERNAL_ASM_TRUE}" && test -z "${OPUS_ARM_EXTERNAL_ASM_FALSE}"; then
+  as_fn_error $? "conditional \"OPUS_ARM_EXTERNAL_ASM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CPU_ARM_TRUE}" && test -z "${CPU_ARM_FALSE}"; then
+  as_fn_error $? "conditional \"CPU_ARM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${OPUS_ARM_INLINE_ASM_TRUE}" && test -z "${OPUS_ARM_INLINE_ASM_FALSE}"; then
+  as_fn_error $? "conditional \"OPUS_ARM_INLINE_ASM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${OPUS_ARM_EXTERNAL_ASM_TRUE}" && test -z "${OPUS_ARM_EXTERNAL_ASM_FALSE}"; then
+  as_fn_error $? "conditional \"OPUS_ARM_EXTERNAL_ASM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_DOXYGEN_TRUE}" && test -z "${HAVE_DOXYGEN_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_DOXYGEN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${EXTRA_PROGRAMS_TRUE}" && test -z "${EXTRA_PROGRAMS_FALSE}"; then
+  as_fn_error $? "conditional \"EXTRA_PROGRAMS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 
 : "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
@@ -13158,7 +13624,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by $as_me, which was
+This file was extended by opus $as_me 1.1, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -13218,13 +13684,13 @@
 Configuration commands:
 $config_commands
 
-Report bugs to the package provider."
+Report bugs to <opus@xiph.org>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-config.status
+opus config.status 1.1
 configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
@@ -13630,14 +14096,15 @@
 for ac_config_target in $ac_config_targets
 do
   case $ac_config_target in
-    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
     "opus.pc") CONFIG_FILES="$CONFIG_FILES opus.pc" ;;
     "opus-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES opus-uninstalled.pc" ;;
+    "celt/arm/armopts.s") CONFIG_FILES="$CONFIG_FILES celt/arm/armopts.s" ;;
     "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
     "doc/Doxyfile") CONFIG_FILES="$CONFIG_FILES doc/Doxyfile" ;;
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
@@ -14997,50 +15464,62 @@
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
+{ $as_echo "$as_me:${as_lineno-$LINENO}:
 ------------------------------------------------------------------------
-  $PACKAGE $VERSION:  Automatic configuration OK.
+  $PACKAGE_NAME $PACKAGE_VERSION:  Automatic configuration OK.
 
     Compiler support:
 
       C99 var arrays: ................ ${has_var_arrays}
       C99 lrintf: .................... ${ac_cv_func_lrintf}
-      Alloca: ........................ ${has_alloca}
+      Use alloca: .................... ${use_alloca}
 
     General configuration:
 
-      Floating point support: ........ ${ac_enable_float}
-      Fast float approximations: ..... ${float_approx}
-      Fixed point debugging: ......... ${ac_enable_fixed_debug}
-      Custom modes: .................. ${ac_enable_custom_modes}
-      Assertion checking: ............ ${ac_enable_assertions}
-      Fuzzing: ....................... ${ac_enable_fuzzing}
+      Floating point support: ........ ${enable_float}
+      Fast float approximations: ..... ${enable_float_approx}
+      Fixed point debugging: ......... ${enable_fixed_point_debug}
+      Inline Assembly Optimizations: . ${inline_optimization}
+      External Assembly Optimizations: ${asm_optimization}
+      Run-time CPU detection: ........ ${rtcd_support}
+      Custom modes: .................. ${enable_custom_modes}
+      Assertion checking: ............ ${enable_assertions}
+      Fuzzing: ....................... ${enable_fuzzing}
 
-      API documentation: ............. ${ac_enable_doc}
+      API documentation: ............. ${enable_doc}
+      Extra programs: ................ ${enable_extra_programs}
 ------------------------------------------------------------------------
+
+ Type \"make; make install\" to compile and install
+ Type \"make check\" to run the test suite
 " >&5
-$as_echo "
+$as_echo "$as_me:
 ------------------------------------------------------------------------
-  $PACKAGE $VERSION:  Automatic configuration OK.
+  $PACKAGE_NAME $PACKAGE_VERSION:  Automatic configuration OK.
 
     Compiler support:
 
       C99 var arrays: ................ ${has_var_arrays}
       C99 lrintf: .................... ${ac_cv_func_lrintf}
-      Alloca: ........................ ${has_alloca}
+      Use alloca: .................... ${use_alloca}
 
     General configuration:
 
-      Floating point support: ........ ${ac_enable_float}
-      Fast float approximations: ..... ${float_approx}
-      Fixed point debugging: ......... ${ac_enable_fixed_debug}
-      Custom modes: .................. ${ac_enable_custom_modes}
-      Assertion checking: ............ ${ac_enable_assertions}
-      Fuzzing: ....................... ${ac_enable_fuzzing}
+      Floating point support: ........ ${enable_float}
+      Fast float approximations: ..... ${enable_float_approx}
+      Fixed point debugging: ......... ${enable_fixed_point_debug}
+      Inline Assembly Optimizations: . ${inline_optimization}
+      External Assembly Optimizations: ${asm_optimization}
+      Run-time CPU detection: ........ ${rtcd_support}
+      Custom modes: .................. ${enable_custom_modes}
+      Assertion checking: ............ ${enable_assertions}
+      Fuzzing: ....................... ${enable_fuzzing}
 
-      API documentation: ............. ${ac_enable_doc}
+      API documentation: ............. ${enable_doc}
+      Extra programs: ................ ${enable_extra_programs}
 ------------------------------------------------------------------------
-" >&6; }
 
-echo "Type \"make; make install\" to compile and install";
-echo "Type \"make check\" to run the test suite";
+ Type \"make; make install\" to compile and install
+ Type \"make check\" to run the test suite
+" >&6;}
+
