annotate src/opus-1.3/silk/MacroDebug.h @ 169:223a55898ab9 tip default

Add null config files
author Chris Cannam <cannam@all-day-breakfast.com>
date Mon, 02 Mar 2020 14:03:47 +0000
parents 4664ac0c1032
children
rev   line source
cannam@154 1 /***********************************************************************
cannam@154 2 Copyright (c) 2006-2011, Skype Limited. All rights reserved.
cannam@154 3 Copyright (C) 2012 Xiph.Org Foundation
cannam@154 4 Redistribution and use in source and binary forms, with or without
cannam@154 5 modification, are permitted provided that the following conditions
cannam@154 6 are met:
cannam@154 7 - Redistributions of source code must retain the above copyright notice,
cannam@154 8 this list of conditions and the following disclaimer.
cannam@154 9 - Redistributions in binary form must reproduce the above copyright
cannam@154 10 notice, this list of conditions and the following disclaimer in the
cannam@154 11 documentation and/or other materials provided with the distribution.
cannam@154 12 - Neither the name of Internet Society, IETF or IETF Trust, nor the
cannam@154 13 names of specific contributors, may be used to endorse or promote
cannam@154 14 products derived from this software without specific prior written
cannam@154 15 permission.
cannam@154 16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
cannam@154 17 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
cannam@154 18 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
cannam@154 19 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
cannam@154 20 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
cannam@154 21 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
cannam@154 22 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
cannam@154 23 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
cannam@154 24 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
cannam@154 25 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
cannam@154 26 POSSIBILITY OF SUCH DAMAGE.
cannam@154 27 ***********************************************************************/
cannam@154 28
cannam@154 29 #ifndef MACRO_DEBUG_H
cannam@154 30 #define MACRO_DEBUG_H
cannam@154 31
cannam@154 32 /* Redefine macro functions with extensive assertion in DEBUG mode.
cannam@154 33 As functions can't be undefined, this file can't work with SigProcFIX_MacroCount.h */
cannam@154 34
cannam@154 35 #if ( defined (FIXED_DEBUG) || ( 0 && defined (_DEBUG) ) ) && !defined (silk_MACRO_COUNT)
cannam@154 36
cannam@154 37 #undef silk_ADD16
cannam@154 38 #define silk_ADD16(a,b) silk_ADD16_((a), (b), __FILE__, __LINE__)
cannam@154 39 static OPUS_INLINE opus_int16 silk_ADD16_(opus_int16 a, opus_int16 b, char *file, int line){
cannam@154 40 opus_int16 ret;
cannam@154 41
cannam@154 42 ret = a + b;
cannam@154 43 if ( ret != silk_ADD_SAT16( a, b ) )
cannam@154 44 {
cannam@154 45 fprintf (stderr, "silk_ADD16(%d, %d) in %s: line %d\n", a, b, file, line);
cannam@154 46 #ifdef FIXED_DEBUG_ASSERT
cannam@154 47 silk_assert( 0 );
cannam@154 48 #endif
cannam@154 49 }
cannam@154 50 return ret;
cannam@154 51 }
cannam@154 52
cannam@154 53 #undef silk_ADD32
cannam@154 54 #define silk_ADD32(a,b) silk_ADD32_((a), (b), __FILE__, __LINE__)
cannam@154 55 static OPUS_INLINE opus_int32 silk_ADD32_(opus_int32 a, opus_int32 b, char *file, int line){
cannam@154 56 opus_int32 ret;
cannam@154 57
cannam@154 58 ret = a + b;
cannam@154 59 if ( ret != silk_ADD_SAT32( a, b ) )
cannam@154 60 {
cannam@154 61 fprintf (stderr, "silk_ADD32(%d, %d) in %s: line %d\n", a, b, file, line);
cannam@154 62 #ifdef FIXED_DEBUG_ASSERT
cannam@154 63 silk_assert( 0 );
cannam@154 64 #endif
cannam@154 65 }
cannam@154 66 return ret;
cannam@154 67 }
cannam@154 68
cannam@154 69 #undef silk_ADD64
cannam@154 70 #define silk_ADD64(a,b) silk_ADD64_((a), (b), __FILE__, __LINE__)
cannam@154 71 static OPUS_INLINE opus_int64 silk_ADD64_(opus_int64 a, opus_int64 b, char *file, int line){
cannam@154 72 opus_int64 ret;
cannam@154 73
cannam@154 74 ret = a + b;
cannam@154 75 if ( ret != silk_ADD_SAT64( a, b ) )
cannam@154 76 {
cannam@154 77 fprintf (stderr, "silk_ADD64(%lld, %lld) in %s: line %d\n", (long long)a, (long long)b, file, line);
cannam@154 78 #ifdef FIXED_DEBUG_ASSERT
cannam@154 79 silk_assert( 0 );
cannam@154 80 #endif
cannam@154 81 }
cannam@154 82 return ret;
cannam@154 83 }
cannam@154 84
cannam@154 85 #undef silk_SUB16
cannam@154 86 #define silk_SUB16(a,b) silk_SUB16_((a), (b), __FILE__, __LINE__)
cannam@154 87 static OPUS_INLINE opus_int16 silk_SUB16_(opus_int16 a, opus_int16 b, char *file, int line){
cannam@154 88 opus_int16 ret;
cannam@154 89
cannam@154 90 ret = a - b;
cannam@154 91 if ( ret != silk_SUB_SAT16( a, b ) )
cannam@154 92 {
cannam@154 93 fprintf (stderr, "silk_SUB16(%d, %d) in %s: line %d\n", a, b, file, line);
cannam@154 94 #ifdef FIXED_DEBUG_ASSERT
cannam@154 95 silk_assert( 0 );
cannam@154 96 #endif
cannam@154 97 }
cannam@154 98 return ret;
cannam@154 99 }
cannam@154 100
cannam@154 101 #undef silk_SUB32
cannam@154 102 #define silk_SUB32(a,b) silk_SUB32_((a), (b), __FILE__, __LINE__)
cannam@154 103 static OPUS_INLINE opus_int32 silk_SUB32_(opus_int32 a, opus_int32 b, char *file, int line){
cannam@154 104 opus_int32 ret;
cannam@154 105
cannam@154 106 ret = a - b;
cannam@154 107 if ( ret != silk_SUB_SAT32( a, b ) )
cannam@154 108 {
cannam@154 109 fprintf (stderr, "silk_SUB32(%d, %d) in %s: line %d\n", a, b, file, line);
cannam@154 110 #ifdef FIXED_DEBUG_ASSERT
cannam@154 111 silk_assert( 0 );
cannam@154 112 #endif
cannam@154 113 }
cannam@154 114 return ret;
cannam@154 115 }
cannam@154 116
cannam@154 117 #undef silk_SUB64
cannam@154 118 #define silk_SUB64(a,b) silk_SUB64_((a), (b), __FILE__, __LINE__)
cannam@154 119 static OPUS_INLINE opus_int64 silk_SUB64_(opus_int64 a, opus_int64 b, char *file, int line){
cannam@154 120 opus_int64 ret;
cannam@154 121
cannam@154 122 ret = a - b;
cannam@154 123 if ( ret != silk_SUB_SAT64( a, b ) )
cannam@154 124 {
cannam@154 125 fprintf (stderr, "silk_SUB64(%lld, %lld) in %s: line %d\n", (long long)a, (long long)b, file, line);
cannam@154 126 #ifdef FIXED_DEBUG_ASSERT
cannam@154 127 silk_assert( 0 );
cannam@154 128 #endif
cannam@154 129 }
cannam@154 130 return ret;
cannam@154 131 }
cannam@154 132
cannam@154 133 #undef silk_ADD_SAT16
cannam@154 134 #define silk_ADD_SAT16(a,b) silk_ADD_SAT16_((a), (b), __FILE__, __LINE__)
cannam@154 135 static OPUS_INLINE opus_int16 silk_ADD_SAT16_( opus_int16 a16, opus_int16 b16, char *file, int line) {
cannam@154 136 opus_int16 res;
cannam@154 137 res = (opus_int16)silk_SAT16( silk_ADD32( (opus_int32)(a16), (b16) ) );
cannam@154 138 if ( res != silk_SAT16( (opus_int32)a16 + (opus_int32)b16 ) )
cannam@154 139 {
cannam@154 140 fprintf (stderr, "silk_ADD_SAT16(%d, %d) in %s: line %d\n", a16, b16, file, line);
cannam@154 141 #ifdef FIXED_DEBUG_ASSERT
cannam@154 142 silk_assert( 0 );
cannam@154 143 #endif
cannam@154 144 }
cannam@154 145 return res;
cannam@154 146 }
cannam@154 147
cannam@154 148 #undef silk_ADD_SAT32
cannam@154 149 #define silk_ADD_SAT32(a,b) silk_ADD_SAT32_((a), (b), __FILE__, __LINE__)
cannam@154 150 static OPUS_INLINE opus_int32 silk_ADD_SAT32_(opus_int32 a32, opus_int32 b32, char *file, int line){
cannam@154 151 opus_int32 res;
cannam@154 152 res = ((((opus_uint32)(a32) + (opus_uint32)(b32)) & 0x80000000) == 0 ? \
cannam@154 153 ((((a32) & (b32)) & 0x80000000) != 0 ? silk_int32_MIN : (a32)+(b32)) : \
cannam@154 154 ((((a32) | (b32)) & 0x80000000) == 0 ? silk_int32_MAX : (a32)+(b32)) );
cannam@154 155 if ( res != silk_SAT32( (opus_int64)a32 + (opus_int64)b32 ) )
cannam@154 156 {
cannam@154 157 fprintf (stderr, "silk_ADD_SAT32(%d, %d) in %s: line %d\n", a32, b32, file, line);
cannam@154 158 #ifdef FIXED_DEBUG_ASSERT
cannam@154 159 silk_assert( 0 );
cannam@154 160 #endif
cannam@154 161 }
cannam@154 162 return res;
cannam@154 163 }
cannam@154 164
cannam@154 165 #undef silk_ADD_SAT64
cannam@154 166 #define silk_ADD_SAT64(a,b) silk_ADD_SAT64_((a), (b), __FILE__, __LINE__)
cannam@154 167 static OPUS_INLINE opus_int64 silk_ADD_SAT64_( opus_int64 a64, opus_int64 b64, char *file, int line) {
cannam@154 168 opus_int64 res;
cannam@154 169 int fail = 0;
cannam@154 170 res = ((((a64) + (b64)) & 0x8000000000000000LL) == 0 ? \
cannam@154 171 ((((a64) & (b64)) & 0x8000000000000000LL) != 0 ? silk_int64_MIN : (a64)+(b64)) : \
cannam@154 172 ((((a64) | (b64)) & 0x8000000000000000LL) == 0 ? silk_int64_MAX : (a64)+(b64)) );
cannam@154 173 if( res != a64 + b64 ) {
cannam@154 174 /* Check that we saturated to the correct extreme value */
cannam@154 175 if ( !(( res == silk_int64_MAX && ( ( a64 >> 1 ) + ( b64 >> 1 ) > ( silk_int64_MAX >> 3 ) ) ) ||
cannam@154 176 ( res == silk_int64_MIN && ( ( a64 >> 1 ) + ( b64 >> 1 ) < ( silk_int64_MIN >> 3 ) ) ) ) )
cannam@154 177 {
cannam@154 178 fail = 1;
cannam@154 179 }
cannam@154 180 } else {
cannam@154 181 /* Saturation not necessary */
cannam@154 182 fail = res != a64 + b64;
cannam@154 183 }
cannam@154 184 if ( fail )
cannam@154 185 {
cannam@154 186 fprintf (stderr, "silk_ADD_SAT64(%lld, %lld) in %s: line %d\n", (long long)a64, (long long)b64, file, line);
cannam@154 187 #ifdef FIXED_DEBUG_ASSERT
cannam@154 188 silk_assert( 0 );
cannam@154 189 #endif
cannam@154 190 }
cannam@154 191 return res;
cannam@154 192 }
cannam@154 193
cannam@154 194 #undef silk_SUB_SAT16
cannam@154 195 #define silk_SUB_SAT16(a,b) silk_SUB_SAT16_((a), (b), __FILE__, __LINE__)
cannam@154 196 static OPUS_INLINE opus_int16 silk_SUB_SAT16_( opus_int16 a16, opus_int16 b16, char *file, int line ) {
cannam@154 197 opus_int16 res;
cannam@154 198 res = (opus_int16)silk_SAT16( silk_SUB32( (opus_int32)(a16), (b16) ) );
cannam@154 199 if ( res != silk_SAT16( (opus_int32)a16 - (opus_int32)b16 ) )
cannam@154 200 {
cannam@154 201 fprintf (stderr, "silk_SUB_SAT16(%d, %d) in %s: line %d\n", a16, b16, file, line);
cannam@154 202 #ifdef FIXED_DEBUG_ASSERT
cannam@154 203 silk_assert( 0 );
cannam@154 204 #endif
cannam@154 205 }
cannam@154 206 return res;
cannam@154 207 }
cannam@154 208
cannam@154 209 #undef silk_SUB_SAT32
cannam@154 210 #define silk_SUB_SAT32(a,b) silk_SUB_SAT32_((a), (b), __FILE__, __LINE__)
cannam@154 211 static OPUS_INLINE opus_int32 silk_SUB_SAT32_( opus_int32 a32, opus_int32 b32, char *file, int line ) {
cannam@154 212 opus_int32 res;
cannam@154 213 res = ((((opus_uint32)(a32)-(opus_uint32)(b32)) & 0x80000000) == 0 ? \
cannam@154 214 (( (a32) & ((b32)^0x80000000) & 0x80000000) ? silk_int32_MIN : (a32)-(b32)) : \
cannam@154 215 ((((a32)^0x80000000) & (b32) & 0x80000000) ? silk_int32_MAX : (a32)-(b32)) );
cannam@154 216 if ( res != silk_SAT32( (opus_int64)a32 - (opus_int64)b32 ) )
cannam@154 217 {
cannam@154 218 fprintf (stderr, "silk_SUB_SAT32(%d, %d) in %s: line %d\n", a32, b32, file, line);
cannam@154 219 #ifdef FIXED_DEBUG_ASSERT
cannam@154 220 silk_assert( 0 );
cannam@154 221 #endif
cannam@154 222 }
cannam@154 223 return res;
cannam@154 224 }
cannam@154 225
cannam@154 226 #undef silk_SUB_SAT64
cannam@154 227 #define silk_SUB_SAT64(a,b) silk_SUB_SAT64_((a), (b), __FILE__, __LINE__)
cannam@154 228 static OPUS_INLINE opus_int64 silk_SUB_SAT64_( opus_int64 a64, opus_int64 b64, char *file, int line ) {
cannam@154 229 opus_int64 res;
cannam@154 230 int fail = 0;
cannam@154 231 res = ((((a64)-(b64)) & 0x8000000000000000LL) == 0 ? \
cannam@154 232 (( (a64) & ((b64)^0x8000000000000000LL) & 0x8000000000000000LL) ? silk_int64_MIN : (a64)-(b64)) : \
cannam@154 233 ((((a64)^0x8000000000000000LL) & (b64) & 0x8000000000000000LL) ? silk_int64_MAX : (a64)-(b64)) );
cannam@154 234 if( res != a64 - b64 ) {
cannam@154 235 /* Check that we saturated to the correct extreme value */
cannam@154 236 if( !(( res == silk_int64_MAX && ( ( a64 >> 1 ) + ( b64 >> 1 ) > ( silk_int64_MAX >> 3 ) ) ) ||
cannam@154 237 ( res == silk_int64_MIN && ( ( a64 >> 1 ) + ( b64 >> 1 ) < ( silk_int64_MIN >> 3 ) ) ) ))
cannam@154 238 {
cannam@154 239 fail = 1;
cannam@154 240 }
cannam@154 241 } else {
cannam@154 242 /* Saturation not necessary */
cannam@154 243 fail = res != a64 - b64;
cannam@154 244 }
cannam@154 245 if ( fail )
cannam@154 246 {
cannam@154 247 fprintf (stderr, "silk_SUB_SAT64(%lld, %lld) in %s: line %d\n", (long long)a64, (long long)b64, file, line);
cannam@154 248 #ifdef FIXED_DEBUG_ASSERT
cannam@154 249 silk_assert( 0 );
cannam@154 250 #endif
cannam@154 251 }
cannam@154 252 return res;
cannam@154 253 }
cannam@154 254
cannam@154 255 #undef silk_MUL
cannam@154 256 #define silk_MUL(a,b) silk_MUL_((a), (b), __FILE__, __LINE__)
cannam@154 257 static OPUS_INLINE opus_int32 silk_MUL_(opus_int32 a32, opus_int32 b32, char *file, int line){
cannam@154 258 opus_int32 ret;
cannam@154 259 opus_int64 ret64;
cannam@154 260 ret = a32 * b32;
cannam@154 261 ret64 = (opus_int64)a32 * (opus_int64)b32;
cannam@154 262 if ( (opus_int64)ret != ret64 )
cannam@154 263 {
cannam@154 264 fprintf (stderr, "silk_MUL(%d, %d) in %s: line %d\n", a32, b32, file, line);
cannam@154 265 #ifdef FIXED_DEBUG_ASSERT
cannam@154 266 silk_assert( 0 );
cannam@154 267 #endif
cannam@154 268 }
cannam@154 269 return ret;
cannam@154 270 }
cannam@154 271
cannam@154 272 #undef silk_MUL_uint
cannam@154 273 #define silk_MUL_uint(a,b) silk_MUL_uint_((a), (b), __FILE__, __LINE__)
cannam@154 274 static OPUS_INLINE opus_uint32 silk_MUL_uint_(opus_uint32 a32, opus_uint32 b32, char *file, int line){
cannam@154 275 opus_uint32 ret;
cannam@154 276 ret = a32 * b32;
cannam@154 277 if ( (opus_uint64)ret != (opus_uint64)a32 * (opus_uint64)b32 )
cannam@154 278 {
cannam@154 279 fprintf (stderr, "silk_MUL_uint(%u, %u) in %s: line %d\n", a32, b32, file, line);
cannam@154 280 #ifdef FIXED_DEBUG_ASSERT
cannam@154 281 silk_assert( 0 );
cannam@154 282 #endif
cannam@154 283 }
cannam@154 284 return ret;
cannam@154 285 }
cannam@154 286
cannam@154 287 #undef silk_MLA
cannam@154 288 #define silk_MLA(a,b,c) silk_MLA_((a), (b), (c), __FILE__, __LINE__)
cannam@154 289 static OPUS_INLINE opus_int32 silk_MLA_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
cannam@154 290 opus_int32 ret;
cannam@154 291 ret = a32 + b32 * c32;
cannam@154 292 if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (opus_int64)c32 )
cannam@154 293 {
cannam@154 294 fprintf (stderr, "silk_MLA(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
cannam@154 295 #ifdef FIXED_DEBUG_ASSERT
cannam@154 296 silk_assert( 0 );
cannam@154 297 #endif
cannam@154 298 }
cannam@154 299 return ret;
cannam@154 300 }
cannam@154 301
cannam@154 302 #undef silk_MLA_uint
cannam@154 303 #define silk_MLA_uint(a,b,c) silk_MLA_uint_((a), (b), (c), __FILE__, __LINE__)
cannam@154 304 static OPUS_INLINE opus_int32 silk_MLA_uint_(opus_uint32 a32, opus_uint32 b32, opus_uint32 c32, char *file, int line){
cannam@154 305 opus_uint32 ret;
cannam@154 306 ret = a32 + b32 * c32;
cannam@154 307 if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (opus_int64)c32 )
cannam@154 308 {
cannam@154 309 fprintf (stderr, "silk_MLA_uint(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
cannam@154 310 #ifdef FIXED_DEBUG_ASSERT
cannam@154 311 silk_assert( 0 );
cannam@154 312 #endif
cannam@154 313 }
cannam@154 314 return ret;
cannam@154 315 }
cannam@154 316
cannam@154 317 #undef silk_SMULWB
cannam@154 318 #define silk_SMULWB(a,b) silk_SMULWB_((a), (b), __FILE__, __LINE__)
cannam@154 319 static OPUS_INLINE opus_int32 silk_SMULWB_(opus_int32 a32, opus_int32 b32, char *file, int line){
cannam@154 320 opus_int32 ret;
cannam@154 321 ret = (a32 >> 16) * (opus_int32)((opus_int16)b32) + (((a32 & 0x0000FFFF) * (opus_int32)((opus_int16)b32)) >> 16);
cannam@154 322 if ( (opus_int64)ret != ((opus_int64)a32 * (opus_int16)b32) >> 16 )
cannam@154 323 {
cannam@154 324 fprintf (stderr, "silk_SMULWB(%d, %d) in %s: line %d\n", a32, b32, file, line);
cannam@154 325 #ifdef FIXED_DEBUG_ASSERT
cannam@154 326 silk_assert( 0 );
cannam@154 327 #endif
cannam@154 328 }
cannam@154 329 return ret;
cannam@154 330 }
cannam@154 331
cannam@154 332 #undef silk_SMLAWB
cannam@154 333 #define silk_SMLAWB(a,b,c) silk_SMLAWB_((a), (b), (c), __FILE__, __LINE__)
cannam@154 334 static OPUS_INLINE opus_int32 silk_SMLAWB_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
cannam@154 335 opus_int32 ret;
cannam@154 336 ret = silk_ADD32( a32, silk_SMULWB( b32, c32 ) );
cannam@154 337 if ( silk_ADD32( a32, silk_SMULWB( b32, c32 ) ) != silk_ADD_SAT32( a32, silk_SMULWB( b32, c32 ) ) )
cannam@154 338 {
cannam@154 339 fprintf (stderr, "silk_SMLAWB(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
cannam@154 340 #ifdef FIXED_DEBUG_ASSERT
cannam@154 341 silk_assert( 0 );
cannam@154 342 #endif
cannam@154 343 }
cannam@154 344 return ret;
cannam@154 345 }
cannam@154 346
cannam@154 347 #undef silk_SMULWT
cannam@154 348 #define silk_SMULWT(a,b) silk_SMULWT_((a), (b), __FILE__, __LINE__)
cannam@154 349 static OPUS_INLINE opus_int32 silk_SMULWT_(opus_int32 a32, opus_int32 b32, char *file, int line){
cannam@154 350 opus_int32 ret;
cannam@154 351 ret = (a32 >> 16) * (b32 >> 16) + (((a32 & 0x0000FFFF) * (b32 >> 16)) >> 16);
cannam@154 352 if ( (opus_int64)ret != ((opus_int64)a32 * (b32 >> 16)) >> 16 )
cannam@154 353 {
cannam@154 354 fprintf (stderr, "silk_SMULWT(%d, %d) in %s: line %d\n", a32, b32, file, line);
cannam@154 355 #ifdef FIXED_DEBUG_ASSERT
cannam@154 356 silk_assert( 0 );
cannam@154 357 #endif
cannam@154 358 }
cannam@154 359 return ret;
cannam@154 360 }
cannam@154 361
cannam@154 362 #undef silk_SMLAWT
cannam@154 363 #define silk_SMLAWT(a,b,c) silk_SMLAWT_((a), (b), (c), __FILE__, __LINE__)
cannam@154 364 static OPUS_INLINE opus_int32 silk_SMLAWT_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
cannam@154 365 opus_int32 ret;
cannam@154 366 ret = a32 + ((b32 >> 16) * (c32 >> 16)) + (((b32 & 0x0000FFFF) * ((c32 >> 16)) >> 16));
cannam@154 367 if ( (opus_int64)ret != (opus_int64)a32 + (((opus_int64)b32 * (c32 >> 16)) >> 16) )
cannam@154 368 {
cannam@154 369 fprintf (stderr, "silk_SMLAWT(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
cannam@154 370 #ifdef FIXED_DEBUG_ASSERT
cannam@154 371 silk_assert( 0 );
cannam@154 372 #endif
cannam@154 373 }
cannam@154 374 return ret;
cannam@154 375 }
cannam@154 376
cannam@154 377 #undef silk_SMULL
cannam@154 378 #define silk_SMULL(a,b) silk_SMULL_((a), (b), __FILE__, __LINE__)
cannam@154 379 static OPUS_INLINE opus_int64 silk_SMULL_(opus_int64 a64, opus_int64 b64, char *file, int line){
cannam@154 380 opus_int64 ret64;
cannam@154 381 int fail = 0;
cannam@154 382 ret64 = a64 * b64;
cannam@154 383 if( b64 != 0 ) {
cannam@154 384 fail = a64 != (ret64 / b64);
cannam@154 385 } else if( a64 != 0 ) {
cannam@154 386 fail = b64 != (ret64 / a64);
cannam@154 387 }
cannam@154 388 if ( fail )
cannam@154 389 {
cannam@154 390 fprintf (stderr, "silk_SMULL(%lld, %lld) in %s: line %d\n", (long long)a64, (long long)b64, file, line);
cannam@154 391 #ifdef FIXED_DEBUG_ASSERT
cannam@154 392 silk_assert( 0 );
cannam@154 393 #endif
cannam@154 394 }
cannam@154 395 return ret64;
cannam@154 396 }
cannam@154 397
cannam@154 398 /* no checking needed for silk_SMULBB */
cannam@154 399 #undef silk_SMLABB
cannam@154 400 #define silk_SMLABB(a,b,c) silk_SMLABB_((a), (b), (c), __FILE__, __LINE__)
cannam@154 401 static OPUS_INLINE opus_int32 silk_SMLABB_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
cannam@154 402 opus_int32 ret;
cannam@154 403 ret = a32 + (opus_int32)((opus_int16)b32) * (opus_int32)((opus_int16)c32);
cannam@154 404 if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (opus_int16)c32 )
cannam@154 405 {
cannam@154 406 fprintf (stderr, "silk_SMLABB(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
cannam@154 407 #ifdef FIXED_DEBUG_ASSERT
cannam@154 408 silk_assert( 0 );
cannam@154 409 #endif
cannam@154 410 }
cannam@154 411 return ret;
cannam@154 412 }
cannam@154 413
cannam@154 414 /* no checking needed for silk_SMULBT */
cannam@154 415 #undef silk_SMLABT
cannam@154 416 #define silk_SMLABT(a,b,c) silk_SMLABT_((a), (b), (c), __FILE__, __LINE__)
cannam@154 417 static OPUS_INLINE opus_int32 silk_SMLABT_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
cannam@154 418 opus_int32 ret;
cannam@154 419 ret = a32 + ((opus_int32)((opus_int16)b32)) * (c32 >> 16);
cannam@154 420 if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (c32 >> 16) )
cannam@154 421 {
cannam@154 422 fprintf (stderr, "silk_SMLABT(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
cannam@154 423 #ifdef FIXED_DEBUG_ASSERT
cannam@154 424 silk_assert( 0 );
cannam@154 425 #endif
cannam@154 426 }
cannam@154 427 return ret;
cannam@154 428 }
cannam@154 429
cannam@154 430 /* no checking needed for silk_SMULTT */
cannam@154 431 #undef silk_SMLATT
cannam@154 432 #define silk_SMLATT(a,b,c) silk_SMLATT_((a), (b), (c), __FILE__, __LINE__)
cannam@154 433 static OPUS_INLINE opus_int32 silk_SMLATT_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
cannam@154 434 opus_int32 ret;
cannam@154 435 ret = a32 + (b32 >> 16) * (c32 >> 16);
cannam@154 436 if ( (opus_int64)ret != (opus_int64)a32 + (b32 >> 16) * (c32 >> 16) )
cannam@154 437 {
cannam@154 438 fprintf (stderr, "silk_SMLATT(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
cannam@154 439 #ifdef FIXED_DEBUG_ASSERT
cannam@154 440 silk_assert( 0 );
cannam@154 441 #endif
cannam@154 442 }
cannam@154 443 return ret;
cannam@154 444 }
cannam@154 445
cannam@154 446 #undef silk_SMULWW
cannam@154 447 #define silk_SMULWW(a,b) silk_SMULWW_((a), (b), __FILE__, __LINE__)
cannam@154 448 static OPUS_INLINE opus_int32 silk_SMULWW_(opus_int32 a32, opus_int32 b32, char *file, int line){
cannam@154 449 opus_int32 ret, tmp1, tmp2;
cannam@154 450 opus_int64 ret64;
cannam@154 451 int fail = 0;
cannam@154 452
cannam@154 453 ret = silk_SMULWB( a32, b32 );
cannam@154 454 tmp1 = silk_RSHIFT_ROUND( b32, 16 );
cannam@154 455 tmp2 = silk_MUL( a32, tmp1 );
cannam@154 456
cannam@154 457 fail |= (opus_int64)tmp2 != (opus_int64) a32 * (opus_int64) tmp1;
cannam@154 458
cannam@154 459 tmp1 = ret;
cannam@154 460 ret = silk_ADD32( tmp1, tmp2 );
cannam@154 461 fail |= silk_ADD32( tmp1, tmp2 ) != silk_ADD_SAT32( tmp1, tmp2 );
cannam@154 462
cannam@154 463 ret64 = silk_RSHIFT64( silk_SMULL( a32, b32 ), 16 );
cannam@154 464 fail |= (opus_int64)ret != ret64;
cannam@154 465
cannam@154 466 if ( fail )
cannam@154 467 {
cannam@154 468 fprintf (stderr, "silk_SMULWT(%d, %d) in %s: line %d\n", a32, b32, file, line);
cannam@154 469 #ifdef FIXED_DEBUG_ASSERT
cannam@154 470 silk_assert( 0 );
cannam@154 471 #endif
cannam@154 472 }
cannam@154 473
cannam@154 474 return ret;
cannam@154 475 }
cannam@154 476
cannam@154 477 #undef silk_SMLAWW
cannam@154 478 #define silk_SMLAWW(a,b,c) silk_SMLAWW_((a), (b), (c), __FILE__, __LINE__)
cannam@154 479 static OPUS_INLINE opus_int32 silk_SMLAWW_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
cannam@154 480 opus_int32 ret, tmp;
cannam@154 481
cannam@154 482 tmp = silk_SMULWW( b32, c32 );
cannam@154 483 ret = silk_ADD32( a32, tmp );
cannam@154 484 if ( ret != silk_ADD_SAT32( a32, tmp ) )
cannam@154 485 {
cannam@154 486 fprintf (stderr, "silk_SMLAWW(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
cannam@154 487 #ifdef FIXED_DEBUG_ASSERT
cannam@154 488 silk_assert( 0 );
cannam@154 489 #endif
cannam@154 490 }
cannam@154 491 return ret;
cannam@154 492 }
cannam@154 493
cannam@154 494 /* Multiply-accumulate macros that allow overflow in the addition (ie, no asserts in debug mode) */
cannam@154 495 #undef silk_MLA_ovflw
cannam@154 496 #define silk_MLA_ovflw(a32, b32, c32) ((a32) + ((b32) * (c32)))
cannam@154 497 #undef silk_SMLABB_ovflw
cannam@154 498 #define silk_SMLABB_ovflw(a32, b32, c32) ((a32) + ((opus_int32)((opus_int16)(b32))) * (opus_int32)((opus_int16)(c32)))
cannam@154 499
cannam@154 500 /* no checking needed for silk_SMULL
cannam@154 501 no checking needed for silk_SMLAL
cannam@154 502 no checking needed for silk_SMLALBB
cannam@154 503 no checking needed for SigProcFIX_CLZ16
cannam@154 504 no checking needed for SigProcFIX_CLZ32*/
cannam@154 505
cannam@154 506 #undef silk_DIV32
cannam@154 507 #define silk_DIV32(a,b) silk_DIV32_((a), (b), __FILE__, __LINE__)
cannam@154 508 static OPUS_INLINE opus_int32 silk_DIV32_(opus_int32 a32, opus_int32 b32, char *file, int line){
cannam@154 509 if ( b32 == 0 )
cannam@154 510 {
cannam@154 511 fprintf (stderr, "silk_DIV32(%d, %d) in %s: line %d\n", a32, b32, file, line);
cannam@154 512 #ifdef FIXED_DEBUG_ASSERT
cannam@154 513 silk_assert( 0 );
cannam@154 514 #endif
cannam@154 515 }
cannam@154 516 return a32 / b32;
cannam@154 517 }
cannam@154 518
cannam@154 519 #undef silk_DIV32_16
cannam@154 520 #define silk_DIV32_16(a,b) silk_DIV32_16_((a), (b), __FILE__, __LINE__)
cannam@154 521 static OPUS_INLINE opus_int32 silk_DIV32_16_(opus_int32 a32, opus_int32 b32, char *file, int line){
cannam@154 522 int fail = 0;
cannam@154 523 fail |= b32 == 0;
cannam@154 524 fail |= b32 > silk_int16_MAX;
cannam@154 525 fail |= b32 < silk_int16_MIN;
cannam@154 526 if ( fail )
cannam@154 527 {
cannam@154 528 fprintf (stderr, "silk_DIV32_16(%d, %d) in %s: line %d\n", a32, b32, file, line);
cannam@154 529 #ifdef FIXED_DEBUG_ASSERT
cannam@154 530 silk_assert( 0 );
cannam@154 531 #endif
cannam@154 532 }
cannam@154 533 return a32 / b32;
cannam@154 534 }
cannam@154 535
cannam@154 536 /* no checking needed for silk_SAT8
cannam@154 537 no checking needed for silk_SAT16
cannam@154 538 no checking needed for silk_SAT32
cannam@154 539 no checking needed for silk_POS_SAT32
cannam@154 540 no checking needed for silk_ADD_POS_SAT8
cannam@154 541 no checking needed for silk_ADD_POS_SAT16
cannam@154 542 no checking needed for silk_ADD_POS_SAT32 */
cannam@154 543
cannam@154 544 #undef silk_LSHIFT8
cannam@154 545 #define silk_LSHIFT8(a,b) silk_LSHIFT8_((a), (b), __FILE__, __LINE__)
cannam@154 546 static OPUS_INLINE opus_int8 silk_LSHIFT8_(opus_int8 a, opus_int32 shift, char *file, int line){
cannam@154 547 opus_int8 ret;
cannam@154 548 int fail = 0;
cannam@154 549 ret = a << shift;
cannam@154 550 fail |= shift < 0;
cannam@154 551 fail |= shift >= 8;
cannam@154 552 fail |= (opus_int64)ret != ((opus_int64)a) << shift;
cannam@154 553 if ( fail )
cannam@154 554 {
cannam@154 555 fprintf (stderr, "silk_LSHIFT8(%d, %d) in %s: line %d\n", a, shift, file, line);
cannam@154 556 #ifdef FIXED_DEBUG_ASSERT
cannam@154 557 silk_assert( 0 );
cannam@154 558 #endif
cannam@154 559 }
cannam@154 560 return ret;
cannam@154 561 }
cannam@154 562
cannam@154 563 #undef silk_LSHIFT16
cannam@154 564 #define silk_LSHIFT16(a,b) silk_LSHIFT16_((a), (b), __FILE__, __LINE__)
cannam@154 565 static OPUS_INLINE opus_int16 silk_LSHIFT16_(opus_int16 a, opus_int32 shift, char *file, int line){
cannam@154 566 opus_int16 ret;
cannam@154 567 int fail = 0;
cannam@154 568 ret = a << shift;
cannam@154 569 fail |= shift < 0;
cannam@154 570 fail |= shift >= 16;
cannam@154 571 fail |= (opus_int64)ret != ((opus_int64)a) << shift;
cannam@154 572 if ( fail )
cannam@154 573 {
cannam@154 574 fprintf (stderr, "silk_LSHIFT16(%d, %d) in %s: line %d\n", a, shift, file, line);
cannam@154 575 #ifdef FIXED_DEBUG_ASSERT
cannam@154 576 silk_assert( 0 );
cannam@154 577 #endif
cannam@154 578 }
cannam@154 579 return ret;
cannam@154 580 }
cannam@154 581
cannam@154 582 #undef silk_LSHIFT32
cannam@154 583 #define silk_LSHIFT32(a,b) silk_LSHIFT32_((a), (b), __FILE__, __LINE__)
cannam@154 584 static OPUS_INLINE opus_int32 silk_LSHIFT32_(opus_int32 a, opus_int32 shift, char *file, int line){
cannam@154 585 opus_int32 ret;
cannam@154 586 int fail = 0;
cannam@154 587 ret = a << shift;
cannam@154 588 fail |= shift < 0;
cannam@154 589 fail |= shift >= 32;
cannam@154 590 fail |= (opus_int64)ret != ((opus_int64)a) << shift;
cannam@154 591 if ( fail )
cannam@154 592 {
cannam@154 593 fprintf (stderr, "silk_LSHIFT32(%d, %d) in %s: line %d\n", a, shift, file, line);
cannam@154 594 #ifdef FIXED_DEBUG_ASSERT
cannam@154 595 silk_assert( 0 );
cannam@154 596 #endif
cannam@154 597 }
cannam@154 598 return ret;
cannam@154 599 }
cannam@154 600
cannam@154 601 #undef silk_LSHIFT64
cannam@154 602 #define silk_LSHIFT64(a,b) silk_LSHIFT64_((a), (b), __FILE__, __LINE__)
cannam@154 603 static OPUS_INLINE opus_int64 silk_LSHIFT64_(opus_int64 a, opus_int shift, char *file, int line){
cannam@154 604 opus_int64 ret;
cannam@154 605 int fail = 0;
cannam@154 606 ret = a << shift;
cannam@154 607 fail |= shift < 0;
cannam@154 608 fail |= shift >= 64;
cannam@154 609 fail |= (ret>>shift) != ((opus_int64)a);
cannam@154 610 if ( fail )
cannam@154 611 {
cannam@154 612 fprintf (stderr, "silk_LSHIFT64(%lld, %d) in %s: line %d\n", (long long)a, shift, file, line);
cannam@154 613 #ifdef FIXED_DEBUG_ASSERT
cannam@154 614 silk_assert( 0 );
cannam@154 615 #endif
cannam@154 616 }
cannam@154 617 return ret;
cannam@154 618 }
cannam@154 619
cannam@154 620 #undef silk_LSHIFT_ovflw
cannam@154 621 #define silk_LSHIFT_ovflw(a,b) silk_LSHIFT_ovflw_((a), (b), __FILE__, __LINE__)
cannam@154 622 static OPUS_INLINE opus_int32 silk_LSHIFT_ovflw_(opus_int32 a, opus_int32 shift, char *file, int line){
cannam@154 623 if ( (shift < 0) || (shift >= 32) ) /* no check for overflow */
cannam@154 624 {
cannam@154 625 fprintf (stderr, "silk_LSHIFT_ovflw(%d, %d) in %s: line %d\n", a, shift, file, line);
cannam@154 626 #ifdef FIXED_DEBUG_ASSERT
cannam@154 627 silk_assert( 0 );
cannam@154 628 #endif
cannam@154 629 }
cannam@154 630 return a << shift;
cannam@154 631 }
cannam@154 632
cannam@154 633 #undef silk_LSHIFT_uint
cannam@154 634 #define silk_LSHIFT_uint(a,b) silk_LSHIFT_uint_((a), (b), __FILE__, __LINE__)
cannam@154 635 static OPUS_INLINE opus_uint32 silk_LSHIFT_uint_(opus_uint32 a, opus_int32 shift, char *file, int line){
cannam@154 636 opus_uint32 ret;
cannam@154 637 ret = a << shift;
cannam@154 638 if ( (shift < 0) || ((opus_int64)ret != ((opus_int64)a) << shift))
cannam@154 639 {
cannam@154 640 fprintf (stderr, "silk_LSHIFT_uint(%u, %d) in %s: line %d\n", a, shift, file, line);
cannam@154 641 #ifdef FIXED_DEBUG_ASSERT
cannam@154 642 silk_assert( 0 );
cannam@154 643 #endif
cannam@154 644 }
cannam@154 645 return ret;
cannam@154 646 }
cannam@154 647
cannam@154 648 #undef silk_RSHIFT8
cannam@154 649 #define silk_RSHITF8(a,b) silk_RSHIFT8_((a), (b), __FILE__, __LINE__)
cannam@154 650 static OPUS_INLINE opus_int8 silk_RSHIFT8_(opus_int8 a, opus_int32 shift, char *file, int line){
cannam@154 651 if ( (shift < 0) || (shift>=8) )
cannam@154 652 {
cannam@154 653 fprintf (stderr, "silk_RSHITF8(%d, %d) in %s: line %d\n", a, shift, file, line);
cannam@154 654 #ifdef FIXED_DEBUG_ASSERT
cannam@154 655 silk_assert( 0 );
cannam@154 656 #endif
cannam@154 657 }
cannam@154 658 return a >> shift;
cannam@154 659 }
cannam@154 660
cannam@154 661 #undef silk_RSHIFT16
cannam@154 662 #define silk_RSHITF16(a,b) silk_RSHIFT16_((a), (b), __FILE__, __LINE__)
cannam@154 663 static OPUS_INLINE opus_int16 silk_RSHIFT16_(opus_int16 a, opus_int32 shift, char *file, int line){
cannam@154 664 if ( (shift < 0) || (shift>=16) )
cannam@154 665 {
cannam@154 666 fprintf (stderr, "silk_RSHITF16(%d, %d) in %s: line %d\n", a, shift, file, line);
cannam@154 667 #ifdef FIXED_DEBUG_ASSERT
cannam@154 668 silk_assert( 0 );
cannam@154 669 #endif
cannam@154 670 }
cannam@154 671 return a >> shift;
cannam@154 672 }
cannam@154 673
cannam@154 674 #undef silk_RSHIFT32
cannam@154 675 #define silk_RSHIFT32(a,b) silk_RSHIFT32_((a), (b), __FILE__, __LINE__)
cannam@154 676 static OPUS_INLINE opus_int32 silk_RSHIFT32_(opus_int32 a, opus_int32 shift, char *file, int line){
cannam@154 677 if ( (shift < 0) || (shift>=32) )
cannam@154 678 {
cannam@154 679 fprintf (stderr, "silk_RSHITF32(%d, %d) in %s: line %d\n", a, shift, file, line);
cannam@154 680 #ifdef FIXED_DEBUG_ASSERT
cannam@154 681 silk_assert( 0 );
cannam@154 682 #endif
cannam@154 683 }
cannam@154 684 return a >> shift;
cannam@154 685 }
cannam@154 686
cannam@154 687 #undef silk_RSHIFT64
cannam@154 688 #define silk_RSHIFT64(a,b) silk_RSHIFT64_((a), (b), __FILE__, __LINE__)
cannam@154 689 static OPUS_INLINE opus_int64 silk_RSHIFT64_(opus_int64 a, opus_int64 shift, char *file, int line){
cannam@154 690 if ( (shift < 0) || (shift>=64) )
cannam@154 691 {
cannam@154 692 fprintf (stderr, "silk_RSHITF64(%lld, %lld) in %s: line %d\n", (long long)a, (long long)shift, file, line);
cannam@154 693 #ifdef FIXED_DEBUG_ASSERT
cannam@154 694 silk_assert( 0 );
cannam@154 695 #endif
cannam@154 696 }
cannam@154 697 return a >> shift;
cannam@154 698 }
cannam@154 699
cannam@154 700 #undef silk_RSHIFT_uint
cannam@154 701 #define silk_RSHIFT_uint(a,b) silk_RSHIFT_uint_((a), (b), __FILE__, __LINE__)
cannam@154 702 static OPUS_INLINE opus_uint32 silk_RSHIFT_uint_(opus_uint32 a, opus_int32 shift, char *file, int line){
cannam@154 703 if ( (shift < 0) || (shift>32) )
cannam@154 704 {
cannam@154 705 fprintf (stderr, "silk_RSHIFT_uint(%u, %d) in %s: line %d\n", a, shift, file, line);
cannam@154 706 #ifdef FIXED_DEBUG_ASSERT
cannam@154 707 silk_assert( 0 );
cannam@154 708 #endif
cannam@154 709 }
cannam@154 710 return a >> shift;
cannam@154 711 }
cannam@154 712
cannam@154 713 #undef silk_ADD_LSHIFT
cannam@154 714 #define silk_ADD_LSHIFT(a,b,c) silk_ADD_LSHIFT_((a), (b), (c), __FILE__, __LINE__)
cannam@154 715 static OPUS_INLINE int silk_ADD_LSHIFT_(int a, int b, int shift, char *file, int line){
cannam@154 716 opus_int16 ret;
cannam@154 717 ret = a + (b << shift);
cannam@154 718 if ( (shift < 0) || (shift>15) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) << shift)) )
cannam@154 719 {
cannam@154 720 fprintf (stderr, "silk_ADD_LSHIFT(%d, %d, %d) in %s: line %d\n", a, b, shift, file, line);
cannam@154 721 #ifdef FIXED_DEBUG_ASSERT
cannam@154 722 silk_assert( 0 );
cannam@154 723 #endif
cannam@154 724 }
cannam@154 725 return ret; /* shift >= 0 */
cannam@154 726 }
cannam@154 727
cannam@154 728 #undef silk_ADD_LSHIFT32
cannam@154 729 #define silk_ADD_LSHIFT32(a,b,c) silk_ADD_LSHIFT32_((a), (b), (c), __FILE__, __LINE__)
cannam@154 730 static OPUS_INLINE opus_int32 silk_ADD_LSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){
cannam@154 731 opus_int32 ret;
cannam@154 732 ret = a + (b << shift);
cannam@154 733 if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) << shift)) )
cannam@154 734 {
cannam@154 735 fprintf (stderr, "silk_ADD_LSHIFT32(%d, %d, %d) in %s: line %d\n", a, b, shift, file, line);
cannam@154 736 #ifdef FIXED_DEBUG_ASSERT
cannam@154 737 silk_assert( 0 );
cannam@154 738 #endif
cannam@154 739 }
cannam@154 740 return ret; /* shift >= 0 */
cannam@154 741 }
cannam@154 742
cannam@154 743 #undef silk_ADD_LSHIFT_uint
cannam@154 744 #define silk_ADD_LSHIFT_uint(a,b,c) silk_ADD_LSHIFT_uint_((a), (b), (c), __FILE__, __LINE__)
cannam@154 745 static OPUS_INLINE opus_uint32 silk_ADD_LSHIFT_uint_(opus_uint32 a, opus_uint32 b, opus_int32 shift, char *file, int line){
cannam@154 746 opus_uint32 ret;
cannam@154 747 ret = a + (b << shift);
cannam@154 748 if ( (shift < 0) || (shift>32) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) << shift)) )
cannam@154 749 {
cannam@154 750 fprintf (stderr, "silk_ADD_LSHIFT_uint(%u, %u, %d) in %s: line %d\n", a, b, shift, file, line);
cannam@154 751 #ifdef FIXED_DEBUG_ASSERT
cannam@154 752 silk_assert( 0 );
cannam@154 753 #endif
cannam@154 754 }
cannam@154 755 return ret; /* shift >= 0 */
cannam@154 756 }
cannam@154 757
cannam@154 758 #undef silk_ADD_RSHIFT
cannam@154 759 #define silk_ADD_RSHIFT(a,b,c) silk_ADD_RSHIFT_((a), (b), (c), __FILE__, __LINE__)
cannam@154 760 static OPUS_INLINE int silk_ADD_RSHIFT_(int a, int b, int shift, char *file, int line){
cannam@154 761 opus_int16 ret;
cannam@154 762 ret = a + (b >> shift);
cannam@154 763 if ( (shift < 0) || (shift>15) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) >> shift)) )
cannam@154 764 {
cannam@154 765 fprintf (stderr, "silk_ADD_RSHIFT(%d, %d, %d) in %s: line %d\n", a, b, shift, file, line);
cannam@154 766 #ifdef FIXED_DEBUG_ASSERT
cannam@154 767 silk_assert( 0 );
cannam@154 768 #endif
cannam@154 769 }
cannam@154 770 return ret; /* shift > 0 */
cannam@154 771 }
cannam@154 772
cannam@154 773 #undef silk_ADD_RSHIFT32
cannam@154 774 #define silk_ADD_RSHIFT32(a,b,c) silk_ADD_RSHIFT32_((a), (b), (c), __FILE__, __LINE__)
cannam@154 775 static OPUS_INLINE opus_int32 silk_ADD_RSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){
cannam@154 776 opus_int32 ret;
cannam@154 777 ret = a + (b >> shift);
cannam@154 778 if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) >> shift)) )
cannam@154 779 {
cannam@154 780 fprintf (stderr, "silk_ADD_RSHIFT32(%d, %d, %d) in %s: line %d\n", a, b, shift, file, line);
cannam@154 781 #ifdef FIXED_DEBUG_ASSERT
cannam@154 782 silk_assert( 0 );
cannam@154 783 #endif
cannam@154 784 }
cannam@154 785 return ret; /* shift > 0 */
cannam@154 786 }
cannam@154 787
cannam@154 788 #undef silk_ADD_RSHIFT_uint
cannam@154 789 #define silk_ADD_RSHIFT_uint(a,b,c) silk_ADD_RSHIFT_uint_((a), (b), (c), __FILE__, __LINE__)
cannam@154 790 static OPUS_INLINE opus_uint32 silk_ADD_RSHIFT_uint_(opus_uint32 a, opus_uint32 b, opus_int32 shift, char *file, int line){
cannam@154 791 opus_uint32 ret;
cannam@154 792 ret = a + (b >> shift);
cannam@154 793 if ( (shift < 0) || (shift>32) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) >> shift)) )
cannam@154 794 {
cannam@154 795 fprintf (stderr, "silk_ADD_RSHIFT_uint(%u, %u, %d) in %s: line %d\n", a, b, shift, file, line);
cannam@154 796 #ifdef FIXED_DEBUG_ASSERT
cannam@154 797 silk_assert( 0 );
cannam@154 798 #endif
cannam@154 799 }
cannam@154 800 return ret; /* shift > 0 */
cannam@154 801 }
cannam@154 802
cannam@154 803 #undef silk_SUB_LSHIFT32
cannam@154 804 #define silk_SUB_LSHIFT32(a,b,c) silk_SUB_LSHIFT32_((a), (b), (c), __FILE__, __LINE__)
cannam@154 805 static OPUS_INLINE opus_int32 silk_SUB_LSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){
cannam@154 806 opus_int32 ret;
cannam@154 807 ret = a - (b << shift);
cannam@154 808 if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a - (((opus_int64)b) << shift)) )
cannam@154 809 {
cannam@154 810 fprintf (stderr, "silk_SUB_LSHIFT32(%d, %d, %d) in %s: line %d\n", a, b, shift, file, line);
cannam@154 811 #ifdef FIXED_DEBUG_ASSERT
cannam@154 812 silk_assert( 0 );
cannam@154 813 #endif
cannam@154 814 }
cannam@154 815 return ret; /* shift >= 0 */
cannam@154 816 }
cannam@154 817
cannam@154 818 #undef silk_SUB_RSHIFT32
cannam@154 819 #define silk_SUB_RSHIFT32(a,b,c) silk_SUB_RSHIFT32_((a), (b), (c), __FILE__, __LINE__)
cannam@154 820 static OPUS_INLINE opus_int32 silk_SUB_RSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){
cannam@154 821 opus_int32 ret;
cannam@154 822 ret = a - (b >> shift);
cannam@154 823 if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a - (((opus_int64)b) >> shift)) )
cannam@154 824 {
cannam@154 825 fprintf (stderr, "silk_SUB_RSHIFT32(%d, %d, %d) in %s: line %d\n", a, b, shift, file, line);
cannam@154 826 #ifdef FIXED_DEBUG_ASSERT
cannam@154 827 silk_assert( 0 );
cannam@154 828 #endif
cannam@154 829 }
cannam@154 830 return ret; /* shift > 0 */
cannam@154 831 }
cannam@154 832
cannam@154 833 #undef silk_RSHIFT_ROUND
cannam@154 834 #define silk_RSHIFT_ROUND(a,b) silk_RSHIFT_ROUND_((a), (b), __FILE__, __LINE__)
cannam@154 835 static OPUS_INLINE opus_int32 silk_RSHIFT_ROUND_(opus_int32 a, opus_int32 shift, char *file, int line){
cannam@154 836 opus_int32 ret;
cannam@154 837 ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1;
cannam@154 838 /* the marco definition can't handle a shift of zero */
cannam@154 839 if ( (shift <= 0) || (shift>31) || ((opus_int64)ret != ((opus_int64)a + ((opus_int64)1 << (shift - 1))) >> shift) )
cannam@154 840 {
cannam@154 841 fprintf (stderr, "silk_RSHIFT_ROUND(%d, %d) in %s: line %d\n", a, shift, file, line);
cannam@154 842 #ifdef FIXED_DEBUG_ASSERT
cannam@154 843 silk_assert( 0 );
cannam@154 844 #endif
cannam@154 845 }
cannam@154 846 return ret;
cannam@154 847 }
cannam@154 848
cannam@154 849 #undef silk_RSHIFT_ROUND64
cannam@154 850 #define silk_RSHIFT_ROUND64(a,b) silk_RSHIFT_ROUND64_((a), (b), __FILE__, __LINE__)
cannam@154 851 static OPUS_INLINE opus_int64 silk_RSHIFT_ROUND64_(opus_int64 a, opus_int32 shift, char *file, int line){
cannam@154 852 opus_int64 ret;
cannam@154 853 /* the marco definition can't handle a shift of zero */
cannam@154 854 if ( (shift <= 0) || (shift>=64) )
cannam@154 855 {
cannam@154 856 fprintf (stderr, "silk_RSHIFT_ROUND64(%lld, %d) in %s: line %d\n", (long long)a, shift, file, line);
cannam@154 857 #ifdef FIXED_DEBUG_ASSERT
cannam@154 858 silk_assert( 0 );
cannam@154 859 #endif
cannam@154 860 }
cannam@154 861 ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1;
cannam@154 862 return ret;
cannam@154 863 }
cannam@154 864
cannam@154 865 /* silk_abs is used on floats also, so doesn't work... */
cannam@154 866 /*#undef silk_abs
cannam@154 867 static OPUS_INLINE opus_int32 silk_abs(opus_int32 a){
cannam@154 868 silk_assert(a != 0x80000000);
cannam@154 869 return (((a) > 0) ? (a) : -(a)); // Be careful, silk_abs returns wrong when input equals to silk_intXX_MIN
cannam@154 870 }*/
cannam@154 871
cannam@154 872 #undef silk_abs_int64
cannam@154 873 #define silk_abs_int64(a) silk_abs_int64_((a), __FILE__, __LINE__)
cannam@154 874 static OPUS_INLINE opus_int64 silk_abs_int64_(opus_int64 a, char *file, int line){
cannam@154 875 if ( a == silk_int64_MIN )
cannam@154 876 {
cannam@154 877 fprintf (stderr, "silk_abs_int64(%lld) in %s: line %d\n", (long long)a, file, line);
cannam@154 878 #ifdef FIXED_DEBUG_ASSERT
cannam@154 879 silk_assert( 0 );
cannam@154 880 #endif
cannam@154 881 }
cannam@154 882 return (((a) > 0) ? (a) : -(a)); /* Be careful, silk_abs returns wrong when input equals to silk_intXX_MIN */
cannam@154 883 }
cannam@154 884
cannam@154 885 #undef silk_abs_int32
cannam@154 886 #define silk_abs_int32(a) silk_abs_int32_((a), __FILE__, __LINE__)
cannam@154 887 static OPUS_INLINE opus_int32 silk_abs_int32_(opus_int32 a, char *file, int line){
cannam@154 888 if ( a == silk_int32_MIN )
cannam@154 889 {
cannam@154 890 fprintf (stderr, "silk_abs_int32(%d) in %s: line %d\n", a, file, line);
cannam@154 891 #ifdef FIXED_DEBUG_ASSERT
cannam@154 892 silk_assert( 0 );
cannam@154 893 #endif
cannam@154 894 }
cannam@154 895 return silk_abs(a);
cannam@154 896 }
cannam@154 897
cannam@154 898 #undef silk_CHECK_FIT8
cannam@154 899 #define silk_CHECK_FIT8(a) silk_CHECK_FIT8_((a), __FILE__, __LINE__)
cannam@154 900 static OPUS_INLINE opus_int8 silk_CHECK_FIT8_( opus_int64 a, char *file, int line ){
cannam@154 901 opus_int8 ret;
cannam@154 902 ret = (opus_int8)a;
cannam@154 903 if ( (opus_int64)ret != a )
cannam@154 904 {
cannam@154 905 fprintf (stderr, "silk_CHECK_FIT8(%lld) in %s: line %d\n", (long long)a, file, line);
cannam@154 906 #ifdef FIXED_DEBUG_ASSERT
cannam@154 907 silk_assert( 0 );
cannam@154 908 #endif
cannam@154 909 }
cannam@154 910 return( ret );
cannam@154 911 }
cannam@154 912
cannam@154 913 #undef silk_CHECK_FIT16
cannam@154 914 #define silk_CHECK_FIT16(a) silk_CHECK_FIT16_((a), __FILE__, __LINE__)
cannam@154 915 static OPUS_INLINE opus_int16 silk_CHECK_FIT16_( opus_int64 a, char *file, int line ){
cannam@154 916 opus_int16 ret;
cannam@154 917 ret = (opus_int16)a;
cannam@154 918 if ( (opus_int64)ret != a )
cannam@154 919 {
cannam@154 920 fprintf (stderr, "silk_CHECK_FIT16(%lld) in %s: line %d\n", (long long)a, file, line);
cannam@154 921 #ifdef FIXED_DEBUG_ASSERT
cannam@154 922 silk_assert( 0 );
cannam@154 923 #endif
cannam@154 924 }
cannam@154 925 return( ret );
cannam@154 926 }
cannam@154 927
cannam@154 928 #undef silk_CHECK_FIT32
cannam@154 929 #define silk_CHECK_FIT32(a) silk_CHECK_FIT32_((a), __FILE__, __LINE__)
cannam@154 930 static OPUS_INLINE opus_int32 silk_CHECK_FIT32_( opus_int64 a, char *file, int line ){
cannam@154 931 opus_int32 ret;
cannam@154 932 ret = (opus_int32)a;
cannam@154 933 if ( (opus_int64)ret != a )
cannam@154 934 {
cannam@154 935 fprintf (stderr, "silk_CHECK_FIT32(%lld) in %s: line %d\n", (long long)a, file, line);
cannam@154 936 #ifdef FIXED_DEBUG_ASSERT
cannam@154 937 silk_assert( 0 );
cannam@154 938 #endif
cannam@154 939 }
cannam@154 940 return( ret );
cannam@154 941 }
cannam@154 942
cannam@154 943 /* no checking for silk_NSHIFT_MUL_32_32
cannam@154 944 no checking for silk_NSHIFT_MUL_16_16
cannam@154 945 no checking needed for silk_min
cannam@154 946 no checking needed for silk_max
cannam@154 947 no checking needed for silk_sign
cannam@154 948 */
cannam@154 949
cannam@154 950 #endif
cannam@154 951 #endif /* MACRO_DEBUG_H */