diff options
author | Johan Hedberg <johan.hedberg@nokia.com> | 2008-02-22 13:41:02 +0000 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@nokia.com> | 2008-02-22 13:41:02 +0000 |
commit | 4170955ad1f97eb8b7bf4f96025a654dab531571 (patch) | |
tree | b77899724cce4a9391a33f3f95d095f6ad485809 /sbc/sbc_math.h | |
parent | e814491d3ecb0049db3c50a9e6583e7e0ee4e3dc (diff) |
Replace 64bits multiplies by 32bits to further optimize the code
Diffstat (limited to 'sbc/sbc_math.h')
-rw-r--r-- | sbc/sbc_math.h | 54 |
1 files changed, 25 insertions, 29 deletions
diff --git a/sbc/sbc_math.h b/sbc/sbc_math.h index 6c3fe2f2..5d3da8d9 100644 --- a/sbc/sbc_math.h +++ b/sbc/sbc_math.h @@ -28,49 +28,45 @@ always be correct and every compiler *should* generate optimal code */ #define ASR(val, bits) ((-2 >> 1 == -1) ? \ ((int32_t)(val)) >> (bits) : ((int32_t) (val)) / (1 << (bits))) -#define ASR_64(val, bits) ((-2 >> 1 == -1) ? \ - ((long long)(val)) >> (bits) : ((long long) (val)) / (1 << (bits))) #define SCALE_PROTO4_TBL 15 #define SCALE_ANA4_TBL 16 -#define SCALE_PROTO8_TBL 15 -#define SCALE_ANA8_TBL 16 -#define SCALE_SPROTO4_TBL 16 -#define SCALE_SPROTO8_TBL 16 -#define SCALE_NPROTO4_TBL 10 -#define SCALE_NPROTO8_TBL 12 -#define SCALE_SAMPLES 14 +#define SCALE_PROTO8_TBL 16 +#define SCALE_ANA8_TBL 17 +#define SCALE_SPROTO4_TBL 15 +#define SCALE_SPROTO8_TBL 14 +#define SCALE_NPROTO4_TBL 13 +#define SCALE_NPROTO8_TBL 11 #define SCALE4_STAGE1_BITS 16 -#define SCALE4_STAGE2_BITS 16 -#define SCALE4_STAGED1_BITS 14 -#define SCALE4_STAGED2_BITS 14 -#define SCALE8_STAGE1_BITS 16 -#define SCALE8_STAGE2_BITS 16 -#define SCALE8_STAGED1_BITS 14 -#define SCALE8_STAGED2_BITS 14 +#define SCALE4_STAGE2_BITS 15 +#define SCALE4_STAGED1_BITS 12 +#define SCALE4_STAGED2_BITS 16 +#define SCALE8_STAGE1_BITS 15 +#define SCALE8_STAGE2_BITS 15 +#define SCALE8_STAGED1_BITS 15 +#define SCALE8_STAGED2_BITS 16 typedef int32_t sbc_fixed_t; -typedef long long sbc_extended_t; -#define SCALE4_STAGE1(src) ASR_64(src, SCALE4_STAGE1_BITS) -#define SCALE4_STAGE2(src) ASR_64(src, SCALE4_STAGE2_BITS) -#define SCALE4_STAGED1(src) ASR_64(src, SCALE4_STAGED1_BITS) -#define SCALE4_STAGED2(src) ASR_64(src, SCALE4_STAGED2_BITS) -#define SCALE8_STAGE1(src) ASR_64(src, SCALE8_STAGE1_BITS) -#define SCALE8_STAGE2(src) ASR_64(src, SCALE8_STAGE2_BITS) -#define SCALE8_STAGED1(src) ASR_64(src, SCALE8_STAGED1_BITS) -#define SCALE8_STAGED2(src) ASR_64(src, SCALE8_STAGED2_BITS) +#define SCALE4_STAGE1(src) ASR(src, SCALE4_STAGE1_BITS) +#define SCALE4_STAGE2(src) ASR(src, SCALE4_STAGE2_BITS) +#define SCALE4_STAGED1(src) ASR(src, SCALE4_STAGED1_BITS) +#define SCALE4_STAGED2(src) ASR(src, SCALE4_STAGED2_BITS) +#define SCALE8_STAGE1(src) ASR(src, SCALE8_STAGE1_BITS) +#define SCALE8_STAGE2(src) ASR(src, SCALE8_STAGE2_BITS) +#define SCALE8_STAGED1(src) ASR(src, SCALE8_STAGED1_BITS) +#define SCALE8_STAGED2(src) ASR(src, SCALE8_STAGED2_BITS) #define SBC_FIXED_0(val) { val = 0; } -#define MUL(a, b) ((sbc_extended_t)(a) * (b)) +#define MUL(a, b) ((a) * (b)) #ifdef __arm__ #define MULA(a, b, res) ({ \ - long long tmp = res; \ + int tmp = res; \ __asm__( \ - "smlal %Q0, %R0, %2, %3" \ + "mla %0, %2, %3, %0" \ : "=&r" (tmp) \ : "0" (tmp), "r" (a), "r" (b)); \ tmp; }) #else -#define MULA(a, b, res) ((sbc_extended_t)(a) * (b) + (res)) +#define MULA(a, b, res) ((a) * (b) + (res)) #endif |