From 9c57fdb4695d2d99c68085771fff4d027a337ddd Mon Sep 17 00:00:00 2001 From: Chris Moeller Date: Wed, 21 Jan 2015 18:03:50 -0800 Subject: [PATCH] Updated stack allocation system used by DUMB and Opus --- .../Dumb/Dumb.xcodeproj/project.pbxproj | 15 ++- .../Dumb/dumb/include/internal/stack_alloc.h | 121 +++++++++--------- Frameworks/Dumb/dumb/src/helpers/lpc.c | 6 +- Frameworks/Opus/Opus/opus/config.h | 2 +- 4 files changed, 74 insertions(+), 70 deletions(-) diff --git a/Frameworks/Dumb/Dumb.xcodeproj/project.pbxproj b/Frameworks/Dumb/Dumb.xcodeproj/project.pbxproj index 01a83a7e0..58c3873bf 100644 --- a/Frameworks/Dumb/Dumb.xcodeproj/project.pbxproj +++ b/Frameworks/Dumb/Dumb.xcodeproj/project.pbxproj @@ -635,10 +635,6 @@ GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = ( - _USE_SSE, - "DEBUG=1", - ); HEADER_SEARCH_PATHS = dumb/include; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "@loader_path/../Frameworks"; @@ -663,7 +659,6 @@ GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = _USE_SSE; HEADER_SEARCH_PATHS = dumb/include; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "@loader_path/../Frameworks"; @@ -680,7 +675,11 @@ 1DEB91B208733DA50010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "VAR_ARRAYS=1", + "_USE_SSE=1", + ); GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.7; @@ -696,6 +695,10 @@ isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "VAR_ARRAYS=1", + "_USE_SSE=1", + ); GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.7; diff --git a/Frameworks/Dumb/dumb/include/internal/stack_alloc.h b/Frameworks/Dumb/dumb/include/internal/stack_alloc.h index b82edec05..ed892a279 100644 --- a/Frameworks/Dumb/dumb/include/internal/stack_alloc.h +++ b/Frameworks/Dumb/dumb/include/internal/stack_alloc.h @@ -1,47 +1,50 @@ -/* Copyright (C) 2002 Jean-Marc Valin */ +/* Copyright (C) 2002-2003 Jean-Marc Valin + Copyright (C) 2007-2009 Xiph.Org Foundation */ /** - @file stack_alloc.h - @brief Temporary memory allocation on stack -*/ + @file stack_alloc.h + @brief Temporary memory allocation on stack + */ /* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #ifndef STACK_ALLOC_H #define STACK_ALLOC_H -#ifdef WIN32 -# include -#else -# ifdef HAVE_ALLOCA_H -# include +#if (!defined (VAR_ARRAYS) && !defined (USE_ALLOCA)) +#error "Dumb requires one of VAR_ARRAYS or USE_ALLOCA be defined to select the temporary allocation mode." +#endif + +#ifdef USE_ALLOCA +# ifdef WIN32 +# include # else -# include +# ifdef HAVE_ALLOCA_H +# include +# else +# include +# endif # endif #endif @@ -82,32 +85,28 @@ * @param type Type of element */ -#ifdef ENABLE_VALGRIND - -#include - -#define ALIGN(stack, size) ((stack) += ((size) - (long)(stack)) & ((size) - 1)) - -#define PUSH(stack, size, type) (VALGRIND_MAKE_NOACCESS(stack, 1000),ALIGN((stack),sizeof(type)),VALGRIND_MAKE_WRITABLE(stack, ((size)*sizeof(type))),(stack)+=((size)*sizeof(type)),(type*)((stack)-((size)*sizeof(type)))) - -#else - -#define ALIGN(stack, size) ((stack) += ((size) - (long)(stack)) & ((size) - 1)) - -#define PUSH(stack, size, type) (ALIGN((stack),sizeof(type)),(stack)+=((size)*sizeof(type)),(type*)((stack)-((size)*sizeof(type)))) - -#endif - #if defined(VAR_ARRAYS) -#define VARDECL(var) + +#define VARDECL(type, var) #define ALLOC(var, size, type) type var[size] +#define SAVE_STACK +#define RESTORE_STACK +#define ALLOC_STACK + #elif defined(USE_ALLOCA) -#define VARDECL(var) var -#define ALLOC(var, size, type) var = alloca(sizeof(type)*(size)) -#else -#define VARDECL(var) var -#define ALLOC(var, size, type) var = PUSH(stack, size, type) -#endif +#define VARDECL(type, var) type *var -#endif +# ifdef WIN32 +# define ALLOC(var, size, type) var = ((type*)_alloca(sizeof(type)*(size))) +# else +# define ALLOC(var, size, type) var = ((type*)alloca(sizeof(type)*(size))) +# endif + +#define SAVE_STACK +#define RESTORE_STACK +#define ALLOC_STACK + +#endif /* VAR_ARRAYS */ + +#endif /* STACK_ALLOC_H */ diff --git a/Frameworks/Dumb/dumb/src/helpers/lpc.c b/Frameworks/Dumb/dumb/src/helpers/lpc.c index 6eb53a977..75d76b3d3 100644 --- a/Frameworks/Dumb/dumb/src/helpers/lpc.c +++ b/Frameworks/Dumb/dumb/src/helpers/lpc.c @@ -56,8 +56,10 @@ Carsten Bormann Output: m lpc coefficients, excitation energy */ float vorbis_lpc_from_data(float *data,float *lpci,int n,int m){ - double *aut=alloca(sizeof(*aut)*(m+1)); - double *lpc=alloca(sizeof(*lpc)*(m)); + VARDECL(double, aut); + VARDECL(double, lpc); + ALLOC(aut, m+1, double); + ALLOC(lpc, m, double); double error; double epsilon; int i,j; diff --git a/Frameworks/Opus/Opus/opus/config.h b/Frameworks/Opus/Opus/opus/config.h index cb8bcc690..10ae1c183 100644 --- a/Frameworks/Opus/Opus/opus/config.h +++ b/Frameworks/Opus/Opus/opus/config.h @@ -30,7 +30,7 @@ POSSIBILITY OF SUCH DAMAGE. #define inline __inline -#define USE_ALLOCA 1 +#define VAR_ARRAYS 1 /* Comment out the next line for floating-point code */ /*#define FIXED_POINT 1 */