media/libspeex_resampler/src/arch.h

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

michael@0 1 /* Copyright (C) 2003 Jean-Marc Valin */
michael@0 2 /**
michael@0 3 @file arch.h
michael@0 4 @brief Various architecture definitions Speex
michael@0 5 */
michael@0 6 /*
michael@0 7 Redistribution and use in source and binary forms, with or without
michael@0 8 modification, are permitted provided that the following conditions
michael@0 9 are met:
michael@0 10
michael@0 11 - Redistributions of source code must retain the above copyright
michael@0 12 notice, this list of conditions and the following disclaimer.
michael@0 13
michael@0 14 - Redistributions in binary form must reproduce the above copyright
michael@0 15 notice, this list of conditions and the following disclaimer in the
michael@0 16 documentation and/or other materials provided with the distribution.
michael@0 17
michael@0 18 - Neither the name of the Xiph.org Foundation nor the names of its
michael@0 19 contributors may be used to endorse or promote products derived from
michael@0 20 this software without specific prior written permission.
michael@0 21
michael@0 22 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
michael@0 23 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
michael@0 24 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
michael@0 25 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
michael@0 26 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
michael@0 27 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
michael@0 28 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
michael@0 29 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
michael@0 30 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
michael@0 31 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
michael@0 32 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
michael@0 33 */
michael@0 34
michael@0 35 #ifndef ARCH_H
michael@0 36 #define ARCH_H
michael@0 37
michael@0 38 #ifndef SPEEX_VERSION
michael@0 39 #define SPEEX_MAJOR_VERSION 1 /**< Major Speex version. */
michael@0 40 #define SPEEX_MINOR_VERSION 1 /**< Minor Speex version. */
michael@0 41 #define SPEEX_MICRO_VERSION 15 /**< Micro Speex version. */
michael@0 42 #define SPEEX_EXTRA_VERSION "" /**< Extra Speex version. */
michael@0 43 #define SPEEX_VERSION "speex-1.2beta3" /**< Speex version string. */
michael@0 44 #endif
michael@0 45
michael@0 46 /* A couple test to catch stupid option combinations */
michael@0 47 #ifdef FIXED_POINT
michael@0 48
michael@0 49 #ifdef FLOATING_POINT
michael@0 50 #error You cannot compile as floating point and fixed point at the same time
michael@0 51 #endif
michael@0 52 #ifdef _USE_SSE
michael@0 53 #error SSE is only for floating-point
michael@0 54 #endif
michael@0 55 #if ((defined (ARM4_ASM)||defined (ARM4_ASM)) && defined(BFIN_ASM)) || (defined (ARM4_ASM)&&defined(ARM5E_ASM))
michael@0 56 #error Make up your mind. What CPU do you have?
michael@0 57 #endif
michael@0 58 #ifdef VORBIS_PSYCHO
michael@0 59 #error Vorbis-psy model currently not implemented in fixed-point
michael@0 60 #endif
michael@0 61
michael@0 62 #else
michael@0 63
michael@0 64 #ifndef FLOATING_POINT
michael@0 65 #error You now need to define either FIXED_POINT or FLOATING_POINT
michael@0 66 #endif
michael@0 67 #if defined (ARM4_ASM) || defined(ARM5E_ASM) || defined(BFIN_ASM)
michael@0 68 #error I suppose you can have a [ARM4/ARM5E/Blackfin] that has float instructions?
michael@0 69 #endif
michael@0 70 #ifdef FIXED_POINT_DEBUG
michael@0 71 #error "Don't you think enabling fixed-point is a good thing to do if you want to debug that?"
michael@0 72 #endif
michael@0 73
michael@0 74
michael@0 75 #endif
michael@0 76
michael@0 77 #ifndef OUTSIDE_SPEEX
michael@0 78 #include "../include/speex/speex_types.h"
michael@0 79 #endif
michael@0 80
michael@0 81 #define ABS(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute integer value. */
michael@0 82 #define ABS16(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute 16-bit value. */
michael@0 83 #define MIN16(a,b) ((a) < (b) ? (a) : (b)) /**< Maximum 16-bit value. */
michael@0 84 #define MAX16(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum 16-bit value. */
michael@0 85 #define ABS32(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute 32-bit value. */
michael@0 86 #define MIN32(a,b) ((a) < (b) ? (a) : (b)) /**< Maximum 32-bit value. */
michael@0 87 #define MAX32(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum 32-bit value. */
michael@0 88
michael@0 89 #ifdef FIXED_POINT
michael@0 90
michael@0 91 typedef spx_int16_t spx_word16_t;
michael@0 92 typedef spx_int32_t spx_word32_t;
michael@0 93 typedef spx_word32_t spx_mem_t;
michael@0 94 typedef spx_word16_t spx_coef_t;
michael@0 95 typedef spx_word16_t spx_lsp_t;
michael@0 96 typedef spx_word32_t spx_sig_t;
michael@0 97
michael@0 98 #define Q15ONE 32767
michael@0 99
michael@0 100 #define LPC_SCALING 8192
michael@0 101 #define SIG_SCALING 16384
michael@0 102 #define LSP_SCALING 8192.
michael@0 103 #define GAMMA_SCALING 32768.
michael@0 104 #define GAIN_SCALING 64
michael@0 105 #define GAIN_SCALING_1 0.015625
michael@0 106
michael@0 107 #define LPC_SHIFT 13
michael@0 108 #define LSP_SHIFT 13
michael@0 109 #define SIG_SHIFT 14
michael@0 110 #define GAIN_SHIFT 6
michael@0 111
michael@0 112 #define VERY_SMALL 0
michael@0 113 #define VERY_LARGE32 ((spx_word32_t)2147483647)
michael@0 114 #define VERY_LARGE16 ((spx_word16_t)32767)
michael@0 115 #define Q15_ONE ((spx_word16_t)32767)
michael@0 116
michael@0 117
michael@0 118 #ifdef FIXED_DEBUG
michael@0 119 #include "fixed_debug.h"
michael@0 120 #else
michael@0 121
michael@0 122 #include "fixed_generic.h"
michael@0 123
michael@0 124 #ifdef ARM5E_ASM
michael@0 125 #include "fixed_arm5e.h"
michael@0 126 #elif defined (ARM4_ASM)
michael@0 127 #include "fixed_arm4.h"
michael@0 128 #elif defined (BFIN_ASM)
michael@0 129 #include "fixed_bfin.h"
michael@0 130 #endif
michael@0 131
michael@0 132 #endif
michael@0 133
michael@0 134
michael@0 135 #else
michael@0 136
michael@0 137 typedef float spx_mem_t;
michael@0 138 typedef float spx_coef_t;
michael@0 139 typedef float spx_lsp_t;
michael@0 140 typedef float spx_sig_t;
michael@0 141 typedef float spx_word16_t;
michael@0 142 typedef float spx_word32_t;
michael@0 143
michael@0 144 #define Q15ONE 1.0f
michael@0 145 #define LPC_SCALING 1.f
michael@0 146 #define SIG_SCALING 1.f
michael@0 147 #define LSP_SCALING 1.f
michael@0 148 #define GAMMA_SCALING 1.f
michael@0 149 #define GAIN_SCALING 1.f
michael@0 150 #define GAIN_SCALING_1 1.f
michael@0 151
michael@0 152
michael@0 153 #define VERY_SMALL 1e-15f
michael@0 154 #define VERY_LARGE32 1e15f
michael@0 155 #define VERY_LARGE16 1e15f
michael@0 156 #define Q15_ONE ((spx_word16_t)1.f)
michael@0 157
michael@0 158 #define QCONST16(x,bits) (x)
michael@0 159 #define QCONST32(x,bits) (x)
michael@0 160
michael@0 161 #define NEG16(x) (-(x))
michael@0 162 #define NEG32(x) (-(x))
michael@0 163 #define EXTRACT16(x) (x)
michael@0 164 #define EXTEND32(x) (x)
michael@0 165 #define SHR16(a,shift) (a)
michael@0 166 #define SHL16(a,shift) (a)
michael@0 167 #define SHR32(a,shift) (a)
michael@0 168 #define SHL32(a,shift) (a)
michael@0 169 #define PSHR16(a,shift) (a)
michael@0 170 #define PSHR32(a,shift) (a)
michael@0 171 #define VSHR32(a,shift) (a)
michael@0 172 #define SATURATE16(x,a) (x)
michael@0 173 #define SATURATE32(x,a) (x)
michael@0 174
michael@0 175 #define PSHR(a,shift) (a)
michael@0 176 #define SHR(a,shift) (a)
michael@0 177 #define SHL(a,shift) (a)
michael@0 178 #define SATURATE(x,a) (x)
michael@0 179
michael@0 180 #define ADD16(a,b) ((a)+(b))
michael@0 181 #define SUB16(a,b) ((a)-(b))
michael@0 182 #define ADD32(a,b) ((a)+(b))
michael@0 183 #define SUB32(a,b) ((a)-(b))
michael@0 184 #define MULT16_16_16(a,b) ((a)*(b))
michael@0 185 #define MULT16_16(a,b) ((spx_word32_t)(a)*(spx_word32_t)(b))
michael@0 186 #define MAC16_16(c,a,b) ((c)+(spx_word32_t)(a)*(spx_word32_t)(b))
michael@0 187
michael@0 188 #define MULT16_32_Q11(a,b) ((a)*(b))
michael@0 189 #define MULT16_32_Q13(a,b) ((a)*(b))
michael@0 190 #define MULT16_32_Q14(a,b) ((a)*(b))
michael@0 191 #define MULT16_32_Q15(a,b) ((a)*(b))
michael@0 192 #define MULT16_32_P15(a,b) ((a)*(b))
michael@0 193
michael@0 194 #define MAC16_32_Q11(c,a,b) ((c)+(a)*(b))
michael@0 195 #define MAC16_32_Q15(c,a,b) ((c)+(a)*(b))
michael@0 196
michael@0 197 #define MAC16_16_Q11(c,a,b) ((c)+(a)*(b))
michael@0 198 #define MAC16_16_Q13(c,a,b) ((c)+(a)*(b))
michael@0 199 #define MAC16_16_P13(c,a,b) ((c)+(a)*(b))
michael@0 200 #define MULT16_16_Q11_32(a,b) ((a)*(b))
michael@0 201 #define MULT16_16_Q13(a,b) ((a)*(b))
michael@0 202 #define MULT16_16_Q14(a,b) ((a)*(b))
michael@0 203 #define MULT16_16_Q15(a,b) ((a)*(b))
michael@0 204 #define MULT16_16_P15(a,b) ((a)*(b))
michael@0 205 #define MULT16_16_P13(a,b) ((a)*(b))
michael@0 206 #define MULT16_16_P14(a,b) ((a)*(b))
michael@0 207
michael@0 208 #define DIV32_16(a,b) (((spx_word32_t)(a))/(spx_word16_t)(b))
michael@0 209 #define PDIV32_16(a,b) (((spx_word32_t)(a))/(spx_word16_t)(b))
michael@0 210 #define DIV32(a,b) (((spx_word32_t)(a))/(spx_word32_t)(b))
michael@0 211 #define PDIV32(a,b) (((spx_word32_t)(a))/(spx_word32_t)(b))
michael@0 212
michael@0 213
michael@0 214 #endif
michael@0 215
michael@0 216
michael@0 217 #if defined (CONFIG_TI_C54X) || defined (CONFIG_TI_C55X)
michael@0 218
michael@0 219 /* 2 on TI C5x DSP */
michael@0 220 #define BYTES_PER_CHAR 2
michael@0 221 #define BITS_PER_CHAR 16
michael@0 222 #define LOG2_BITS_PER_CHAR 4
michael@0 223
michael@0 224 #else
michael@0 225
michael@0 226 #define BYTES_PER_CHAR 1
michael@0 227 #define BITS_PER_CHAR 8
michael@0 228 #define LOG2_BITS_PER_CHAR 3
michael@0 229
michael@0 230 #endif
michael@0 231
michael@0 232
michael@0 233
michael@0 234 #ifdef FIXED_DEBUG
michael@0 235 extern long long spx_mips;
michael@0 236 #endif
michael@0 237
michael@0 238
michael@0 239 #endif

mercurial