@@ -123,6 +123,25 @@ extern char *global_stack;
123123extern char *scratch_ptr;
124124#endif /* CELT_C */
125125
126+ #if __STDC_VERSION__ >= 201112L
127+ # include < stdalign.h>
128+ # define ALIGNOF (T ) alignof (T)
129+ #elif defined(__GNUC__) || defined(__clang__)
130+ # define ALIGNOF (T ) __alignof__(T)
131+ #else
132+ # include < stddef.h>
133+ # ifdef __cplusplus
134+ template <typename T>
135+ struct alignment_helper {
136+ char c;
137+ T member;
138+ };
139+ # define ALIGNOF (T ) (offsetof(alignment_helper<T>, member))
140+ # else
141+ # define ALIGNOF (T ) (offsetof(struct { char c; T member; }, member))
142+ # endif
143+ #endif
144+
126145#ifdef ENABLE_VALGRIND
127146
128147#include < valgrind/memcheck.h>
@@ -134,26 +153,26 @@ extern char *global_stack_top;
134153#endif /* CELT_C */
135154
136155#define ALIGN (stack, size ) ((stack) += ((size) - (long )(stack)) & ((size) - 1 ))
137- #define PUSH (stack , size , type ) (VALGRIND_MAKE_MEM_NOACCESS(stack, global_stack_top-stack),ALIGN((stack),sizeof (type)/sizeof(char )),VALGRIND_MAKE_MEM_UNDEFINED(stack, ((size)*sizeof(type)/sizeof(char))),(stack)+=(2*(size)*sizeof(type)/sizeof(char)),(type*)((stack)-(2*(size)*sizeof(type)/sizeof(char))))
156+ #define PUSH (stack, size, type ) (VALGRIND_MAKE_MEM_NOACCESS(stack, global_stack_top-stack),ALIGN((stack),ALIGNOF (type)),VALGRIND_MAKE_MEM_UNDEFINED(stack, ((size)*sizeof (type)/sizeof (char ))),(stack)+=(2 *(size)*sizeof (type)/sizeof (char )),(type*)((stack)-(2 *(size)*sizeof (type)/sizeof (char ))))
138157#define RESTORE_STACK ((global_stack = _saved_stack),VALGRIND_MAKE_MEM_NOACCESS(global_stack, global_stack_top-global_stack))
139- #define ALLOC_STACK char *_saved_stack; ((global_stack = (global_stack==0) ? ((global_stack_top=opus_alloc_scratch(GLOBAL_STACK_SIZE*2)+(GLOBAL_STACK_SIZE*2))-(GLOBAL_STACK_SIZE*2)) : global_stack),VALGRIND_MAKE_MEM_NOACCESS(global_stack, global_stack_top-global_stack)); _saved_stack = global_stack;
158+ #define ALLOC_STACK char *_saved_stack; ((global_stack = (global_stack==0 ) ? ((global_stack_top=( char *) opus_alloc_scratch(GLOBAL_STACK_SIZE*2 )+(GLOBAL_STACK_SIZE*2 ))-(GLOBAL_STACK_SIZE*2 )) : global_stack),VALGRIND_MAKE_MEM_NOACCESS(global_stack, global_stack_top-global_stack)); _saved_stack = global_stack;
140159
141160#else
142161
143162#define ALIGN (stack, size ) ((stack) += ((size) - (long )(stack)) & ((size) - 1 ))
144163#ifdef ENABLE_HARDENING
145164#include " arch.h"
146- #define PUSH (stack , size , type ) (ALIGN((stack),sizeof (type)/(sizeof(char) )),(void)(((int)((size)*(sizeof(type)/(sizeof(char)))) <= (scratch_ptr)+GLOBAL_STACK_SIZE-(stack))?0:CELT_FATAL("pseudostack overflow")),(stack)+=(size)*(sizeof(type)/(sizeof(char))),(type*)(void*)((stack)-(size)*(sizeof(type)/(sizeof(char)))))
165+ #define PUSH (stack, size, type ) (ALIGN((stack),ALIGNOF (type)),(void )(((int )((size)*(sizeof (type)/(sizeof (char )))) <= (scratch_ptr)+GLOBAL_STACK_SIZE-(stack))?0 :CELT_FATAL(" pseudostack overflow" )),(stack)+=(size)*(sizeof (type)/(sizeof (char ))),(type*)(void *)((stack)-(size)*(sizeof (type)/(sizeof (char )))))
147166#else
148- #define PUSH (stack , size , type ) (ALIGN((stack),sizeof (type)/(sizeof(char) )),(stack)+=(size)*(sizeof(type)/(sizeof(char))),(type*)(void*)((stack)-(size)*(sizeof(type)/(sizeof(char)))))
167+ #define PUSH (stack, size, type ) (ALIGN((stack),ALIGNOF (type)),(stack)+=(size)*(sizeof (type)/(sizeof (char ))),(type*)(void *)((stack)-(size)*(sizeof (type)/(sizeof (char )))))
149168#endif
150169
151170#if 0 /* Set this to 1 to instrument pseudostack usage */
152171#define RESTORE_STACK (printf("%ld %s:%d\n", global_stack-scratch_ptr, __FILE__, __LINE__),global_stack = _saved_stack)
153172#else
154173#define RESTORE_STACK (global_stack = _saved_stack)
155174#endif
156- #define ALLOC_STACK char *_saved_stack; (global_stack = (global_stack==0) ? (scratch_ptr=opus_alloc_scratch(GLOBAL_STACK_SIZE)) : global_stack); _saved_stack = global_stack;
175+ #define ALLOC_STACK char *_saved_stack; (global_stack = (global_stack==0 ) ? (scratch_ptr=( char *) opus_alloc_scratch(GLOBAL_STACK_SIZE)) : global_stack); _saved_stack = global_stack;
157176
158177#endif /* ENABLE_VALGRIND */
159178
0 commit comments