annotate src/opus-1.3/silk/MacroCount.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 Redistribution and use in source and binary forms, with or without
cannam@154 4 modification, are permitted provided that the following conditions
cannam@154 5 are met:
cannam@154 6 - Redistributions of source code must retain the above copyright notice,
cannam@154 7 this list of conditions and the following disclaimer.
cannam@154 8 - Redistributions in binary form must reproduce the above copyright
cannam@154 9 notice, this list of conditions and the following disclaimer in the
cannam@154 10 documentation and/or other materials provided with the distribution.
cannam@154 11 - Neither the name of Internet Society, IETF or IETF Trust, nor the
cannam@154 12 names of specific contributors, may be used to endorse or promote
cannam@154 13 products derived from this software without specific prior written
cannam@154 14 permission.
cannam@154 15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
cannam@154 16 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
cannam@154 17 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
cannam@154 18 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
cannam@154 19 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
cannam@154 20 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
cannam@154 21 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
cannam@154 22 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
cannam@154 23 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
cannam@154 24 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
cannam@154 25 POSSIBILITY OF SUCH DAMAGE.
cannam@154 26 ***********************************************************************/
cannam@154 27
cannam@154 28 #ifndef SIGPROCFIX_API_MACROCOUNT_H
cannam@154 29 #define SIGPROCFIX_API_MACROCOUNT_H
cannam@154 30 #include <stdio.h>
cannam@154 31
cannam@154 32 #ifdef silk_MACRO_COUNT
cannam@154 33 #define varDefine opus_int64 ops_count = 0;
cannam@154 34
cannam@154 35 extern opus_int64 ops_count;
cannam@154 36
cannam@154 37 static OPUS_INLINE opus_int64 silk_SaveCount(){
cannam@154 38 return(ops_count);
cannam@154 39 }
cannam@154 40
cannam@154 41 static OPUS_INLINE opus_int64 silk_SaveResetCount(){
cannam@154 42 opus_int64 ret;
cannam@154 43
cannam@154 44 ret = ops_count;
cannam@154 45 ops_count = 0;
cannam@154 46 return(ret);
cannam@154 47 }
cannam@154 48
cannam@154 49 static OPUS_INLINE silk_PrintCount(){
cannam@154 50 printf("ops_count = %d \n ", (opus_int32)ops_count);
cannam@154 51 }
cannam@154 52
cannam@154 53 #undef silk_MUL
cannam@154 54 static OPUS_INLINE opus_int32 silk_MUL(opus_int32 a32, opus_int32 b32){
cannam@154 55 opus_int32 ret;
cannam@154 56 ops_count += 4;
cannam@154 57 ret = a32 * b32;
cannam@154 58 return ret;
cannam@154 59 }
cannam@154 60
cannam@154 61 #undef silk_MUL_uint
cannam@154 62 static OPUS_INLINE opus_uint32 silk_MUL_uint(opus_uint32 a32, opus_uint32 b32){
cannam@154 63 opus_uint32 ret;
cannam@154 64 ops_count += 4;
cannam@154 65 ret = a32 * b32;
cannam@154 66 return ret;
cannam@154 67 }
cannam@154 68 #undef silk_MLA
cannam@154 69 static OPUS_INLINE opus_int32 silk_MLA(opus_int32 a32, opus_int32 b32, opus_int32 c32){
cannam@154 70 opus_int32 ret;
cannam@154 71 ops_count += 4;
cannam@154 72 ret = a32 + b32 * c32;
cannam@154 73 return ret;
cannam@154 74 }
cannam@154 75
cannam@154 76 #undef silk_MLA_uint
cannam@154 77 static OPUS_INLINE opus_int32 silk_MLA_uint(opus_uint32 a32, opus_uint32 b32, opus_uint32 c32){
cannam@154 78 opus_uint32 ret;
cannam@154 79 ops_count += 4;
cannam@154 80 ret = a32 + b32 * c32;
cannam@154 81 return ret;
cannam@154 82 }
cannam@154 83
cannam@154 84 #undef silk_SMULWB
cannam@154 85 static OPUS_INLINE opus_int32 silk_SMULWB(opus_int32 a32, opus_int32 b32){
cannam@154 86 opus_int32 ret;
cannam@154 87 ops_count += 5;
cannam@154 88 ret = (a32 >> 16) * (opus_int32)((opus_int16)b32) + (((a32 & 0x0000FFFF) * (opus_int32)((opus_int16)b32)) >> 16);
cannam@154 89 return ret;
cannam@154 90 }
cannam@154 91 #undef silk_SMLAWB
cannam@154 92 static OPUS_INLINE opus_int32 silk_SMLAWB(opus_int32 a32, opus_int32 b32, opus_int32 c32){
cannam@154 93 opus_int32 ret;
cannam@154 94 ops_count += 5;
cannam@154 95 ret = ((a32) + ((((b32) >> 16) * (opus_int32)((opus_int16)(c32))) + ((((b32) & 0x0000FFFF) * (opus_int32)((opus_int16)(c32))) >> 16)));
cannam@154 96 return ret;
cannam@154 97 }
cannam@154 98
cannam@154 99 #undef silk_SMULWT
cannam@154 100 static OPUS_INLINE opus_int32 silk_SMULWT(opus_int32 a32, opus_int32 b32){
cannam@154 101 opus_int32 ret;
cannam@154 102 ops_count += 4;
cannam@154 103 ret = (a32 >> 16) * (b32 >> 16) + (((a32 & 0x0000FFFF) * (b32 >> 16)) >> 16);
cannam@154 104 return ret;
cannam@154 105 }
cannam@154 106 #undef silk_SMLAWT
cannam@154 107 static OPUS_INLINE opus_int32 silk_SMLAWT(opus_int32 a32, opus_int32 b32, opus_int32 c32){
cannam@154 108 opus_int32 ret;
cannam@154 109 ops_count += 4;
cannam@154 110 ret = a32 + ((b32 >> 16) * (c32 >> 16)) + (((b32 & 0x0000FFFF) * ((c32 >> 16)) >> 16));
cannam@154 111 return ret;
cannam@154 112 }
cannam@154 113
cannam@154 114 #undef silk_SMULBB
cannam@154 115 static OPUS_INLINE opus_int32 silk_SMULBB(opus_int32 a32, opus_int32 b32){
cannam@154 116 opus_int32 ret;
cannam@154 117 ops_count += 1;
cannam@154 118 ret = (opus_int32)((opus_int16)a32) * (opus_int32)((opus_int16)b32);
cannam@154 119 return ret;
cannam@154 120 }
cannam@154 121 #undef silk_SMLABB
cannam@154 122 static OPUS_INLINE opus_int32 silk_SMLABB(opus_int32 a32, opus_int32 b32, opus_int32 c32){
cannam@154 123 opus_int32 ret;
cannam@154 124 ops_count += 1;
cannam@154 125 ret = a32 + (opus_int32)((opus_int16)b32) * (opus_int32)((opus_int16)c32);
cannam@154 126 return ret;
cannam@154 127 }
cannam@154 128
cannam@154 129 #undef silk_SMULBT
cannam@154 130 static OPUS_INLINE opus_int32 silk_SMULBT(opus_int32 a32, opus_int32 b32 ){
cannam@154 131 opus_int32 ret;
cannam@154 132 ops_count += 4;
cannam@154 133 ret = ((opus_int32)((opus_int16)a32)) * (b32 >> 16);
cannam@154 134 return ret;
cannam@154 135 }
cannam@154 136
cannam@154 137 #undef silk_SMLABT
cannam@154 138 static OPUS_INLINE opus_int32 silk_SMLABT(opus_int32 a32, opus_int32 b32, opus_int32 c32){
cannam@154 139 opus_int32 ret;
cannam@154 140 ops_count += 1;
cannam@154 141 ret = a32 + ((opus_int32)((opus_int16)b32)) * (c32 >> 16);
cannam@154 142 return ret;
cannam@154 143 }
cannam@154 144
cannam@154 145 #undef silk_SMULTT
cannam@154 146 static OPUS_INLINE opus_int32 silk_SMULTT(opus_int32 a32, opus_int32 b32){
cannam@154 147 opus_int32 ret;
cannam@154 148 ops_count += 1;
cannam@154 149 ret = (a32 >> 16) * (b32 >> 16);
cannam@154 150 return ret;
cannam@154 151 }
cannam@154 152
cannam@154 153 #undef silk_SMLATT
cannam@154 154 static OPUS_INLINE opus_int32 silk_SMLATT(opus_int32 a32, opus_int32 b32, opus_int32 c32){
cannam@154 155 opus_int32 ret;
cannam@154 156 ops_count += 1;
cannam@154 157 ret = a32 + (b32 >> 16) * (c32 >> 16);
cannam@154 158 return ret;
cannam@154 159 }
cannam@154 160
cannam@154 161
cannam@154 162 /* multiply-accumulate macros that allow overflow in the addition (ie, no asserts in debug mode)*/
cannam@154 163 #undef silk_MLA_ovflw
cannam@154 164 #define silk_MLA_ovflw silk_MLA
cannam@154 165
cannam@154 166 #undef silk_SMLABB_ovflw
cannam@154 167 #define silk_SMLABB_ovflw silk_SMLABB
cannam@154 168
cannam@154 169 #undef silk_SMLABT_ovflw
cannam@154 170 #define silk_SMLABT_ovflw silk_SMLABT
cannam@154 171
cannam@154 172 #undef silk_SMLATT_ovflw
cannam@154 173 #define silk_SMLATT_ovflw silk_SMLATT
cannam@154 174
cannam@154 175 #undef silk_SMLAWB_ovflw
cannam@154 176 #define silk_SMLAWB_ovflw silk_SMLAWB
cannam@154 177
cannam@154 178 #undef silk_SMLAWT_ovflw
cannam@154 179 #define silk_SMLAWT_ovflw silk_SMLAWT
cannam@154 180
cannam@154 181 #undef silk_SMULL
cannam@154 182 static OPUS_INLINE opus_int64 silk_SMULL(opus_int32 a32, opus_int32 b32){
cannam@154 183 opus_int64 ret;
cannam@154 184 ops_count += 8;
cannam@154 185 ret = ((opus_int64)(a32) * /*(opus_int64)*/(b32));
cannam@154 186 return ret;
cannam@154 187 }
cannam@154 188
cannam@154 189 #undef silk_SMLAL
cannam@154 190 static OPUS_INLINE opus_int64 silk_SMLAL(opus_int64 a64, opus_int32 b32, opus_int32 c32){
cannam@154 191 opus_int64 ret;
cannam@154 192 ops_count += 8;
cannam@154 193 ret = a64 + ((opus_int64)(b32) * /*(opus_int64)*/(c32));
cannam@154 194 return ret;
cannam@154 195 }
cannam@154 196 #undef silk_SMLALBB
cannam@154 197 static OPUS_INLINE opus_int64 silk_SMLALBB(opus_int64 a64, opus_int16 b16, opus_int16 c16){
cannam@154 198 opus_int64 ret;
cannam@154 199 ops_count += 4;
cannam@154 200 ret = a64 + ((opus_int64)(b16) * /*(opus_int64)*/(c16));
cannam@154 201 return ret;
cannam@154 202 }
cannam@154 203
cannam@154 204 #undef SigProcFIX_CLZ16
cannam@154 205 static OPUS_INLINE opus_int32 SigProcFIX_CLZ16(opus_int16 in16)
cannam@154 206 {
cannam@154 207 opus_int32 out32 = 0;
cannam@154 208 ops_count += 10;
cannam@154 209 if( in16 == 0 ) {
cannam@154 210 return 16;
cannam@154 211 }
cannam@154 212 /* test nibbles */
cannam@154 213 if( in16 & 0xFF00 ) {
cannam@154 214 if( in16 & 0xF000 ) {
cannam@154 215 in16 >>= 12;
cannam@154 216 } else {
cannam@154 217 out32 += 4;
cannam@154 218 in16 >>= 8;
cannam@154 219 }
cannam@154 220 } else {
cannam@154 221 if( in16 & 0xFFF0 ) {
cannam@154 222 out32 += 8;
cannam@154 223 in16 >>= 4;
cannam@154 224 } else {
cannam@154 225 out32 += 12;
cannam@154 226 }
cannam@154 227 }
cannam@154 228 /* test bits and return */
cannam@154 229 if( in16 & 0xC ) {
cannam@154 230 if( in16 & 0x8 )
cannam@154 231 return out32 + 0;
cannam@154 232 else
cannam@154 233 return out32 + 1;
cannam@154 234 } else {
cannam@154 235 if( in16 & 0xE )
cannam@154 236 return out32 + 2;
cannam@154 237 else
cannam@154 238 return out32 + 3;
cannam@154 239 }
cannam@154 240 }
cannam@154 241
cannam@154 242 #undef SigProcFIX_CLZ32
cannam@154 243 static OPUS_INLINE opus_int32 SigProcFIX_CLZ32(opus_int32 in32)
cannam@154 244 {
cannam@154 245 /* test highest 16 bits and convert to opus_int16 */
cannam@154 246 ops_count += 2;
cannam@154 247 if( in32 & 0xFFFF0000 ) {
cannam@154 248 return SigProcFIX_CLZ16((opus_int16)(in32 >> 16));
cannam@154 249 } else {
cannam@154 250 return SigProcFIX_CLZ16((opus_int16)in32) + 16;
cannam@154 251 }
cannam@154 252 }
cannam@154 253
cannam@154 254 #undef silk_DIV32
cannam@154 255 static OPUS_INLINE opus_int32 silk_DIV32(opus_int32 a32, opus_int32 b32){
cannam@154 256 ops_count += 64;
cannam@154 257 return a32 / b32;
cannam@154 258 }
cannam@154 259
cannam@154 260 #undef silk_DIV32_16
cannam@154 261 static OPUS_INLINE opus_int32 silk_DIV32_16(opus_int32 a32, opus_int32 b32){
cannam@154 262 ops_count += 32;
cannam@154 263 return a32 / b32;
cannam@154 264 }
cannam@154 265
cannam@154 266 #undef silk_SAT8
cannam@154 267 static OPUS_INLINE opus_int8 silk_SAT8(opus_int64 a){
cannam@154 268 opus_int8 tmp;
cannam@154 269 ops_count += 1;
cannam@154 270 tmp = (opus_int8)((a) > silk_int8_MAX ? silk_int8_MAX : \
cannam@154 271 ((a) < silk_int8_MIN ? silk_int8_MIN : (a)));
cannam@154 272 return(tmp);
cannam@154 273 }
cannam@154 274
cannam@154 275 #undef silk_SAT16
cannam@154 276 static OPUS_INLINE opus_int16 silk_SAT16(opus_int64 a){
cannam@154 277 opus_int16 tmp;
cannam@154 278 ops_count += 1;
cannam@154 279 tmp = (opus_int16)((a) > silk_int16_MAX ? silk_int16_MAX : \
cannam@154 280 ((a) < silk_int16_MIN ? silk_int16_MIN : (a)));
cannam@154 281 return(tmp);
cannam@154 282 }
cannam@154 283 #undef silk_SAT32
cannam@154 284 static OPUS_INLINE opus_int32 silk_SAT32(opus_int64 a){
cannam@154 285 opus_int32 tmp;
cannam@154 286 ops_count += 1;
cannam@154 287 tmp = (opus_int32)((a) > silk_int32_MAX ? silk_int32_MAX : \
cannam@154 288 ((a) < silk_int32_MIN ? silk_int32_MIN : (a)));
cannam@154 289 return(tmp);
cannam@154 290 }
cannam@154 291 #undef silk_POS_SAT32
cannam@154 292 static OPUS_INLINE opus_int32 silk_POS_SAT32(opus_int64 a){
cannam@154 293 opus_int32 tmp;
cannam@154 294 ops_count += 1;
cannam@154 295 tmp = (opus_int32)((a) > silk_int32_MAX ? silk_int32_MAX : (a));
cannam@154 296 return(tmp);
cannam@154 297 }
cannam@154 298
cannam@154 299 #undef silk_ADD_POS_SAT8
cannam@154 300 static OPUS_INLINE opus_int8 silk_ADD_POS_SAT8(opus_int64 a, opus_int64 b){
cannam@154 301 opus_int8 tmp;
cannam@154 302 ops_count += 1;
cannam@154 303 tmp = (opus_int8)((((a)+(b)) & 0x80) ? silk_int8_MAX : ((a)+(b)));
cannam@154 304 return(tmp);
cannam@154 305 }
cannam@154 306 #undef silk_ADD_POS_SAT16
cannam@154 307 static OPUS_INLINE opus_int16 silk_ADD_POS_SAT16(opus_int64 a, opus_int64 b){
cannam@154 308 opus_int16 tmp;
cannam@154 309 ops_count += 1;
cannam@154 310 tmp = (opus_int16)((((a)+(b)) & 0x8000) ? silk_int16_MAX : ((a)+(b)));
cannam@154 311 return(tmp);
cannam@154 312 }
cannam@154 313
cannam@154 314 #undef silk_ADD_POS_SAT32
cannam@154 315 static OPUS_INLINE opus_int32 silk_ADD_POS_SAT32(opus_int64 a, opus_int64 b){
cannam@154 316 opus_int32 tmp;
cannam@154 317 ops_count += 1;
cannam@154 318 tmp = (opus_int32)((((a)+(b)) & 0x80000000) ? silk_int32_MAX : ((a)+(b)));
cannam@154 319 return(tmp);
cannam@154 320 }
cannam@154 321
cannam@154 322 #undef silk_LSHIFT8
cannam@154 323 static OPUS_INLINE opus_int8 silk_LSHIFT8(opus_int8 a, opus_int32 shift){
cannam@154 324 opus_int8 ret;
cannam@154 325 ops_count += 1;
cannam@154 326 ret = a << shift;
cannam@154 327 return ret;
cannam@154 328 }
cannam@154 329 #undef silk_LSHIFT16
cannam@154 330 static OPUS_INLINE opus_int16 silk_LSHIFT16(opus_int16 a, opus_int32 shift){
cannam@154 331 opus_int16 ret;
cannam@154 332 ops_count += 1;
cannam@154 333 ret = a << shift;
cannam@154 334 return ret;
cannam@154 335 }
cannam@154 336 #undef silk_LSHIFT32
cannam@154 337 static OPUS_INLINE opus_int32 silk_LSHIFT32(opus_int32 a, opus_int32 shift){
cannam@154 338 opus_int32 ret;
cannam@154 339 ops_count += 1;
cannam@154 340 ret = a << shift;
cannam@154 341 return ret;
cannam@154 342 }
cannam@154 343 #undef silk_LSHIFT64
cannam@154 344 static OPUS_INLINE opus_int64 silk_LSHIFT64(opus_int64 a, opus_int shift){
cannam@154 345 ops_count += 1;
cannam@154 346 return a << shift;
cannam@154 347 }
cannam@154 348
cannam@154 349 #undef silk_LSHIFT_ovflw
cannam@154 350 static OPUS_INLINE opus_int32 silk_LSHIFT_ovflw(opus_int32 a, opus_int32 shift){
cannam@154 351 ops_count += 1;
cannam@154 352 return a << shift;
cannam@154 353 }
cannam@154 354
cannam@154 355 #undef silk_LSHIFT_uint
cannam@154 356 static OPUS_INLINE opus_uint32 silk_LSHIFT_uint(opus_uint32 a, opus_int32 shift){
cannam@154 357 opus_uint32 ret;
cannam@154 358 ops_count += 1;
cannam@154 359 ret = a << shift;
cannam@154 360 return ret;
cannam@154 361 }
cannam@154 362
cannam@154 363 #undef silk_RSHIFT8
cannam@154 364 static OPUS_INLINE opus_int8 silk_RSHIFT8(opus_int8 a, opus_int32 shift){
cannam@154 365 ops_count += 1;
cannam@154 366 return a >> shift;
cannam@154 367 }
cannam@154 368 #undef silk_RSHIFT16
cannam@154 369 static OPUS_INLINE opus_int16 silk_RSHIFT16(opus_int16 a, opus_int32 shift){
cannam@154 370 ops_count += 1;
cannam@154 371 return a >> shift;
cannam@154 372 }
cannam@154 373 #undef silk_RSHIFT32
cannam@154 374 static OPUS_INLINE opus_int32 silk_RSHIFT32(opus_int32 a, opus_int32 shift){
cannam@154 375 ops_count += 1;
cannam@154 376 return a >> shift;
cannam@154 377 }
cannam@154 378 #undef silk_RSHIFT64
cannam@154 379 static OPUS_INLINE opus_int64 silk_RSHIFT64(opus_int64 a, opus_int64 shift){
cannam@154 380 ops_count += 1;
cannam@154 381 return a >> shift;
cannam@154 382 }
cannam@154 383
cannam@154 384 #undef silk_RSHIFT_uint
cannam@154 385 static OPUS_INLINE opus_uint32 silk_RSHIFT_uint(opus_uint32 a, opus_int32 shift){
cannam@154 386 ops_count += 1;
cannam@154 387 return a >> shift;
cannam@154 388 }
cannam@154 389
cannam@154 390 #undef silk_ADD_LSHIFT
cannam@154 391 static OPUS_INLINE opus_int32 silk_ADD_LSHIFT(opus_int32 a, opus_int32 b, opus_int32 shift){
cannam@154 392 opus_int32 ret;
cannam@154 393 ops_count += 1;
cannam@154 394 ret = a + (b << shift);
cannam@154 395 return ret; /* shift >= 0*/
cannam@154 396 }
cannam@154 397 #undef silk_ADD_LSHIFT32
cannam@154 398 static OPUS_INLINE opus_int32 silk_ADD_LSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){
cannam@154 399 opus_int32 ret;
cannam@154 400 ops_count += 1;
cannam@154 401 ret = a + (b << shift);
cannam@154 402 return ret; /* shift >= 0*/
cannam@154 403 }
cannam@154 404 #undef silk_ADD_LSHIFT_uint
cannam@154 405 static OPUS_INLINE opus_uint32 silk_ADD_LSHIFT_uint(opus_uint32 a, opus_uint32 b, opus_int32 shift){
cannam@154 406 opus_uint32 ret;
cannam@154 407 ops_count += 1;
cannam@154 408 ret = a + (b << shift);
cannam@154 409 return ret; /* shift >= 0*/
cannam@154 410 }
cannam@154 411 #undef silk_ADD_RSHIFT
cannam@154 412 static OPUS_INLINE opus_int32 silk_ADD_RSHIFT(opus_int32 a, opus_int32 b, opus_int32 shift){
cannam@154 413 opus_int32 ret;
cannam@154 414 ops_count += 1;
cannam@154 415 ret = a + (b >> shift);
cannam@154 416 return ret; /* shift > 0*/
cannam@154 417 }
cannam@154 418 #undef silk_ADD_RSHIFT32
cannam@154 419 static OPUS_INLINE opus_int32 silk_ADD_RSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){
cannam@154 420 opus_int32 ret;
cannam@154 421 ops_count += 1;
cannam@154 422 ret = a + (b >> shift);
cannam@154 423 return ret; /* shift > 0*/
cannam@154 424 }
cannam@154 425 #undef silk_ADD_RSHIFT_uint
cannam@154 426 static OPUS_INLINE opus_uint32 silk_ADD_RSHIFT_uint(opus_uint32 a, opus_uint32 b, opus_int32 shift){
cannam@154 427 opus_uint32 ret;
cannam@154 428 ops_count += 1;
cannam@154 429 ret = a + (b >> shift);
cannam@154 430 return ret; /* shift > 0*/
cannam@154 431 }
cannam@154 432 #undef silk_SUB_LSHIFT32
cannam@154 433 static OPUS_INLINE opus_int32 silk_SUB_LSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){
cannam@154 434 opus_int32 ret;
cannam@154 435 ops_count += 1;
cannam@154 436 ret = a - (b << shift);
cannam@154 437 return ret; /* shift >= 0*/
cannam@154 438 }
cannam@154 439 #undef silk_SUB_RSHIFT32
cannam@154 440 static OPUS_INLINE opus_int32 silk_SUB_RSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){
cannam@154 441 opus_int32 ret;
cannam@154 442 ops_count += 1;
cannam@154 443 ret = a - (b >> shift);
cannam@154 444 return ret; /* shift > 0*/
cannam@154 445 }
cannam@154 446
cannam@154 447 #undef silk_RSHIFT_ROUND
cannam@154 448 static OPUS_INLINE opus_int32 silk_RSHIFT_ROUND(opus_int32 a, opus_int32 shift){
cannam@154 449 opus_int32 ret;
cannam@154 450 ops_count += 3;
cannam@154 451 ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1;
cannam@154 452 return ret;
cannam@154 453 }
cannam@154 454
cannam@154 455 #undef silk_RSHIFT_ROUND64
cannam@154 456 static OPUS_INLINE opus_int64 silk_RSHIFT_ROUND64(opus_int64 a, opus_int32 shift){
cannam@154 457 opus_int64 ret;
cannam@154 458 ops_count += 6;
cannam@154 459 ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1;
cannam@154 460 return ret;
cannam@154 461 }
cannam@154 462
cannam@154 463 #undef silk_abs_int64
cannam@154 464 static OPUS_INLINE opus_int64 silk_abs_int64(opus_int64 a){
cannam@154 465 ops_count += 1;
cannam@154 466 return (((a) > 0) ? (a) : -(a)); /* Be careful, silk_abs returns wrong when input equals to silk_intXX_MIN*/
cannam@154 467 }
cannam@154 468
cannam@154 469 #undef silk_abs_int32
cannam@154 470 static OPUS_INLINE opus_int32 silk_abs_int32(opus_int32 a){
cannam@154 471 ops_count += 1;
cannam@154 472 return silk_abs(a);
cannam@154 473 }
cannam@154 474
cannam@154 475
cannam@154 476 #undef silk_min
cannam@154 477 static silk_min(a, b){
cannam@154 478 ops_count += 1;
cannam@154 479 return (((a) < (b)) ? (a) : (b));
cannam@154 480 }
cannam@154 481 #undef silk_max
cannam@154 482 static silk_max(a, b){
cannam@154 483 ops_count += 1;
cannam@154 484 return (((a) > (b)) ? (a) : (b));
cannam@154 485 }
cannam@154 486 #undef silk_sign
cannam@154 487 static silk_sign(a){
cannam@154 488 ops_count += 1;
cannam@154 489 return ((a) > 0 ? 1 : ( (a) < 0 ? -1 : 0 ));
cannam@154 490 }
cannam@154 491
cannam@154 492 #undef silk_ADD16
cannam@154 493 static OPUS_INLINE opus_int16 silk_ADD16(opus_int16 a, opus_int16 b){
cannam@154 494 opus_int16 ret;
cannam@154 495 ops_count += 1;
cannam@154 496 ret = a + b;
cannam@154 497 return ret;
cannam@154 498 }
cannam@154 499
cannam@154 500 #undef silk_ADD32
cannam@154 501 static OPUS_INLINE opus_int32 silk_ADD32(opus_int32 a, opus_int32 b){
cannam@154 502 opus_int32 ret;
cannam@154 503 ops_count += 1;
cannam@154 504 ret = a + b;
cannam@154 505 return ret;
cannam@154 506 }
cannam@154 507
cannam@154 508 #undef silk_ADD64
cannam@154 509 static OPUS_INLINE opus_int64 silk_ADD64(opus_int64 a, opus_int64 b){
cannam@154 510 opus_int64 ret;
cannam@154 511 ops_count += 2;
cannam@154 512 ret = a + b;
cannam@154 513 return ret;
cannam@154 514 }
cannam@154 515
cannam@154 516 #undef silk_SUB16
cannam@154 517 static OPUS_INLINE opus_int16 silk_SUB16(opus_int16 a, opus_int16 b){
cannam@154 518 opus_int16 ret;
cannam@154 519 ops_count += 1;
cannam@154 520 ret = a - b;
cannam@154 521 return ret;
cannam@154 522 }
cannam@154 523
cannam@154 524 #undef silk_SUB32
cannam@154 525 static OPUS_INLINE opus_int32 silk_SUB32(opus_int32 a, opus_int32 b){
cannam@154 526 opus_int32 ret;
cannam@154 527 ops_count += 1;
cannam@154 528 ret = a - b;
cannam@154 529 return ret;
cannam@154 530 }
cannam@154 531
cannam@154 532 #undef silk_SUB64
cannam@154 533 static OPUS_INLINE opus_int64 silk_SUB64(opus_int64 a, opus_int64 b){
cannam@154 534 opus_int64 ret;
cannam@154 535 ops_count += 2;
cannam@154 536 ret = a - b;
cannam@154 537 return ret;
cannam@154 538 }
cannam@154 539
cannam@154 540 #undef silk_ADD_SAT16
cannam@154 541 static OPUS_INLINE opus_int16 silk_ADD_SAT16( opus_int16 a16, opus_int16 b16 ) {
cannam@154 542 opus_int16 res;
cannam@154 543 /* Nb will be counted in AKP_add32 and silk_SAT16*/
cannam@154 544 res = (opus_int16)silk_SAT16( silk_ADD32( (opus_int32)(a16), (b16) ) );
cannam@154 545 return res;
cannam@154 546 }
cannam@154 547
cannam@154 548 #undef silk_ADD_SAT32
cannam@154 549 static OPUS_INLINE opus_int32 silk_ADD_SAT32(opus_int32 a32, opus_int32 b32){
cannam@154 550 opus_int32 res;
cannam@154 551 ops_count += 1;
cannam@154 552 res = ((((a32) + (b32)) & 0x80000000) == 0 ? \
cannam@154 553 ((((a32) & (b32)) & 0x80000000) != 0 ? silk_int32_MIN : (a32)+(b32)) : \
cannam@154 554 ((((a32) | (b32)) & 0x80000000) == 0 ? silk_int32_MAX : (a32)+(b32)) );
cannam@154 555 return res;
cannam@154 556 }
cannam@154 557
cannam@154 558 #undef silk_ADD_SAT64
cannam@154 559 static OPUS_INLINE opus_int64 silk_ADD_SAT64( opus_int64 a64, opus_int64 b64 ) {
cannam@154 560 opus_int64 res;
cannam@154 561 ops_count += 1;
cannam@154 562 res = ((((a64) + (b64)) & 0x8000000000000000LL) == 0 ? \
cannam@154 563 ((((a64) & (b64)) & 0x8000000000000000LL) != 0 ? silk_int64_MIN : (a64)+(b64)) : \
cannam@154 564 ((((a64) | (b64)) & 0x8000000000000000LL) == 0 ? silk_int64_MAX : (a64)+(b64)) );
cannam@154 565 return res;
cannam@154 566 }
cannam@154 567
cannam@154 568 #undef silk_SUB_SAT16
cannam@154 569 static OPUS_INLINE opus_int16 silk_SUB_SAT16( opus_int16 a16, opus_int16 b16 ) {
cannam@154 570 opus_int16 res;
cannam@154 571 silk_assert(0);
cannam@154 572 /* Nb will be counted in sub-macros*/
cannam@154 573 res = (opus_int16)silk_SAT16( silk_SUB32( (opus_int32)(a16), (b16) ) );
cannam@154 574 return res;
cannam@154 575 }
cannam@154 576
cannam@154 577 #undef silk_SUB_SAT32
cannam@154 578 static OPUS_INLINE opus_int32 silk_SUB_SAT32( opus_int32 a32, opus_int32 b32 ) {
cannam@154 579 opus_int32 res;
cannam@154 580 ops_count += 1;
cannam@154 581 res = ((((a32)-(b32)) & 0x80000000) == 0 ? \
cannam@154 582 (( (a32) & ((b32)^0x80000000) & 0x80000000) ? silk_int32_MIN : (a32)-(b32)) : \
cannam@154 583 ((((a32)^0x80000000) & (b32) & 0x80000000) ? silk_int32_MAX : (a32)-(b32)) );
cannam@154 584 return res;
cannam@154 585 }
cannam@154 586
cannam@154 587 #undef silk_SUB_SAT64
cannam@154 588 static OPUS_INLINE opus_int64 silk_SUB_SAT64( opus_int64 a64, opus_int64 b64 ) {
cannam@154 589 opus_int64 res;
cannam@154 590 ops_count += 1;
cannam@154 591 res = ((((a64)-(b64)) & 0x8000000000000000LL) == 0 ? \
cannam@154 592 (( (a64) & ((b64)^0x8000000000000000LL) & 0x8000000000000000LL) ? silk_int64_MIN : (a64)-(b64)) : \
cannam@154 593 ((((a64)^0x8000000000000000LL) & (b64) & 0x8000000000000000LL) ? silk_int64_MAX : (a64)-(b64)) );
cannam@154 594
cannam@154 595 return res;
cannam@154 596 }
cannam@154 597
cannam@154 598 #undef silk_SMULWW
cannam@154 599 static OPUS_INLINE opus_int32 silk_SMULWW(opus_int32 a32, opus_int32 b32){
cannam@154 600 opus_int32 ret;
cannam@154 601 /* Nb will be counted in sub-macros*/
cannam@154 602 ret = silk_MLA(silk_SMULWB((a32), (b32)), (a32), silk_RSHIFT_ROUND((b32), 16));
cannam@154 603 return ret;
cannam@154 604 }
cannam@154 605
cannam@154 606 #undef silk_SMLAWW
cannam@154 607 static OPUS_INLINE opus_int32 silk_SMLAWW(opus_int32 a32, opus_int32 b32, opus_int32 c32){
cannam@154 608 opus_int32 ret;
cannam@154 609 /* Nb will be counted in sub-macros*/
cannam@154 610 ret = silk_MLA(silk_SMLAWB((a32), (b32), (c32)), (b32), silk_RSHIFT_ROUND((c32), 16));
cannam@154 611 return ret;
cannam@154 612 }
cannam@154 613
cannam@154 614 #undef silk_min_int
cannam@154 615 static OPUS_INLINE opus_int silk_min_int(opus_int a, opus_int b)
cannam@154 616 {
cannam@154 617 ops_count += 1;
cannam@154 618 return (((a) < (b)) ? (a) : (b));
cannam@154 619 }
cannam@154 620
cannam@154 621 #undef silk_min_16
cannam@154 622 static OPUS_INLINE opus_int16 silk_min_16(opus_int16 a, opus_int16 b)
cannam@154 623 {
cannam@154 624 ops_count += 1;
cannam@154 625 return (((a) < (b)) ? (a) : (b));
cannam@154 626 }
cannam@154 627 #undef silk_min_32
cannam@154 628 static OPUS_INLINE opus_int32 silk_min_32(opus_int32 a, opus_int32 b)
cannam@154 629 {
cannam@154 630 ops_count += 1;
cannam@154 631 return (((a) < (b)) ? (a) : (b));
cannam@154 632 }
cannam@154 633 #undef silk_min_64
cannam@154 634 static OPUS_INLINE opus_int64 silk_min_64(opus_int64 a, opus_int64 b)
cannam@154 635 {
cannam@154 636 ops_count += 1;
cannam@154 637 return (((a) < (b)) ? (a) : (b));
cannam@154 638 }
cannam@154 639
cannam@154 640 /* silk_min() versions with typecast in the function call */
cannam@154 641 #undef silk_max_int
cannam@154 642 static OPUS_INLINE opus_int silk_max_int(opus_int a, opus_int b)
cannam@154 643 {
cannam@154 644 ops_count += 1;
cannam@154 645 return (((a) > (b)) ? (a) : (b));
cannam@154 646 }
cannam@154 647 #undef silk_max_16
cannam@154 648 static OPUS_INLINE opus_int16 silk_max_16(opus_int16 a, opus_int16 b)
cannam@154 649 {
cannam@154 650 ops_count += 1;
cannam@154 651 return (((a) > (b)) ? (a) : (b));
cannam@154 652 }
cannam@154 653 #undef silk_max_32
cannam@154 654 static OPUS_INLINE opus_int32 silk_max_32(opus_int32 a, opus_int32 b)
cannam@154 655 {
cannam@154 656 ops_count += 1;
cannam@154 657 return (((a) > (b)) ? (a) : (b));
cannam@154 658 }
cannam@154 659
cannam@154 660 #undef silk_max_64
cannam@154 661 static OPUS_INLINE opus_int64 silk_max_64(opus_int64 a, opus_int64 b)
cannam@154 662 {
cannam@154 663 ops_count += 1;
cannam@154 664 return (((a) > (b)) ? (a) : (b));
cannam@154 665 }
cannam@154 666
cannam@154 667
cannam@154 668 #undef silk_LIMIT_int
cannam@154 669 static OPUS_INLINE opus_int silk_LIMIT_int(opus_int a, opus_int limit1, opus_int limit2)
cannam@154 670 {
cannam@154 671 opus_int ret;
cannam@154 672 ops_count += 6;
cannam@154 673
cannam@154 674 ret = ((limit1) > (limit2) ? ((a) > (limit1) ? (limit1) : ((a) < (limit2) ? (limit2) : (a))) \
cannam@154 675 : ((a) > (limit2) ? (limit2) : ((a) < (limit1) ? (limit1) : (a))));
cannam@154 676
cannam@154 677 return(ret);
cannam@154 678 }
cannam@154 679
cannam@154 680 #undef silk_LIMIT_16
cannam@154 681 static OPUS_INLINE opus_int16 silk_LIMIT_16(opus_int16 a, opus_int16 limit1, opus_int16 limit2)
cannam@154 682 {
cannam@154 683 opus_int16 ret;
cannam@154 684 ops_count += 6;
cannam@154 685
cannam@154 686 ret = ((limit1) > (limit2) ? ((a) > (limit1) ? (limit1) : ((a) < (limit2) ? (limit2) : (a))) \
cannam@154 687 : ((a) > (limit2) ? (limit2) : ((a) < (limit1) ? (limit1) : (a))));
cannam@154 688
cannam@154 689 return(ret);
cannam@154 690 }
cannam@154 691
cannam@154 692
cannam@154 693 #undef silk_LIMIT_32
cannam@154 694 static OPUS_INLINE opus_int32 silk_LIMIT_32(opus_int32 a, opus_int32 limit1, opus_int32 limit2)
cannam@154 695 {
cannam@154 696 opus_int32 ret;
cannam@154 697 ops_count += 6;
cannam@154 698
cannam@154 699 ret = ((limit1) > (limit2) ? ((a) > (limit1) ? (limit1) : ((a) < (limit2) ? (limit2) : (a))) \
cannam@154 700 : ((a) > (limit2) ? (limit2) : ((a) < (limit1) ? (limit1) : (a))));
cannam@154 701 return(ret);
cannam@154 702 }
cannam@154 703
cannam@154 704 #else
cannam@154 705 #define varDefine
cannam@154 706 #define silk_SaveCount()
cannam@154 707
cannam@154 708 #endif
cannam@154 709 #endif
cannam@154 710