44 #error You cannot compile as floating point and fixed point at the same time
47 #error SSE is only for floating-point
49 #if ((defined (ARM4_ASM)||defined (ARM4_ASM)) && defined(BFIN_ASM)) || (defined (ARM4_ASM)&&defined(ARM5E_ASM))
50 #error Make up your mind. What CPU do you have?
53 #error Vorbis-psy model currently not implemented in fixed-point
58 #ifndef FLOATING_POINT
59 #error You now need to define either FIXED_POINT or FLOATING_POINT
61 #if defined (ARM4_ASM) || defined(ARM5E_ASM) || defined(BFIN_ASM)
62 #error I suppose you can have a [ARM4/ARM5E/Blackfin] that has float instructions?
64 #ifdef FIXED_POINT_DEBUG
65 #error "Don't you think enabling fixed-point is a good thing to do if you want to debug that?"
72 #include "speex/speexdsp_types.h"
75 #define ABS(x) ((x) < 0 ? (-(x)) : (x))
76 #define ABS16(x) ((x) < 0 ? (-(x)) : (x))
77 #define MIN16(a,b) ((a) < (b) ? (a) : (b))
78 #define MAX16(a,b) ((a) > (b) ? (a) : (b))
79 #define ABS32(x) ((x) < 0 ? (-(x)) : (x))
80 #define MIN32(a,b) ((a) < (b) ? (a) : (b))
81 #define MAX32(a,b) ((a) > (b) ? (a) : (b))
85 typedef spx_int16_t spx_word16_t;
86 typedef spx_int32_t spx_word32_t;
87 typedef spx_word32_t spx_mem_t;
88 typedef spx_word16_t spx_coef_t;
89 typedef spx_word16_t spx_lsp_t;
90 typedef spx_word32_t spx_sig_t;
94 #define LPC_SCALING 8192
95 #define SIG_SCALING 16384
96 #define LSP_SCALING 8192.
97 #define GAMMA_SCALING 32768.
98 #define GAIN_SCALING 64
99 #define GAIN_SCALING_1 0.015625
107 #define VERY_LARGE32 ((spx_word32_t)2147483647)
108 #define VERY_LARGE16 ((spx_word16_t)32767)
109 #define Q15_ONE ((spx_word16_t)32767)
113 #include "fixed_debug.h"
119 #include "fixed_arm5e.h"
120 #elif defined (ARM4_ASM)
121 #include "fixed_arm4.h"
122 #elif defined (BFIN_ASM)
123 #include "fixed_bfin.h"
131 typedef float spx_mem_t;
132 typedef float spx_coef_t;
133 typedef float spx_lsp_t;
134 typedef float spx_sig_t;
135 typedef float spx_word16_t;
136 typedef float spx_word32_t;
139 #define LPC_SCALING 1.f
140 #define SIG_SCALING 1.f
141 #define LSP_SCALING 1.f
142 #define GAMMA_SCALING 1.f
143 #define GAIN_SCALING 1.f
144 #define GAIN_SCALING_1 1.f
147 #define VERY_SMALL 1e-15f
148 #define VERY_LARGE32 1e15f
149 #define VERY_LARGE16 1e15f
150 #define Q15_ONE ((spx_word16_t)1.f)
152 #define QCONST16(x,bits) (x)
153 #define QCONST32(x,bits) (x)
155 #define NEG16(x) (-(x))
156 #define NEG32(x) (-(x))
157 #define EXTRACT16(x) (x)
158 #define EXTEND32(x) (x)
159 #define SHR16(a,shift) (a)
160 #define SHL16(a,shift) (a)
161 #define SHR32(a,shift) (a)
162 #define SHL32(a,shift) (a)
163 #define PSHR16(a,shift) (a)
164 #define PSHR32(a,shift) (a)
165 #define VSHR32(a,shift) (a)
166 #define SATURATE16(x,a) (x)
167 #define SATURATE32(x,a) (x)
168 #define SATURATE32PSHR(x,shift,a) (x)
170 #define PSHR(a,shift) (a)
171 #define SHR(a,shift) (a)
172 #define SHL(a,shift) (a)
173 #define SATURATE(x,a) (x)
175 #define ADD16(a,b) ((a)+(b))
176 #define SUB16(a,b) ((a)-(b))
177 #define ADD32(a,b) ((a)+(b))
178 #define SUB32(a,b) ((a)-(b))
179 #define MULT16_16_16(a,b) ((a)*(b))
180 #define MULT16_16(a,b) ((spx_word32_t)(a)*(spx_word32_t)(b))
181 #define MAC16_16(c,a,b) ((c)+(spx_word32_t)(a)*(spx_word32_t)(b))
183 #define MULT16_32_Q11(a,b) ((a)*(b))
184 #define MULT16_32_Q13(a,b) ((a)*(b))
185 #define MULT16_32_Q14(a,b) ((a)*(b))
186 #define MULT16_32_Q15(a,b) ((a)*(b))
187 #define MULT16_32_P15(a,b) ((a)*(b))
189 #define MAC16_32_Q11(c,a,b) ((c)+(a)*(b))
190 #define MAC16_32_Q15(c,a,b) ((c)+(a)*(b))
192 #define MAC16_16_Q11(c,a,b) ((c)+(a)*(b))
193 #define MAC16_16_Q13(c,a,b) ((c)+(a)*(b))
194 #define MAC16_16_P13(c,a,b) ((c)+(a)*(b))
195 #define MULT16_16_Q11_32(a,b) ((a)*(b))
196 #define MULT16_16_Q13(a,b) ((a)*(b))
197 #define MULT16_16_Q14(a,b) ((a)*(b))
198 #define MULT16_16_Q15(a,b) ((a)*(b))
199 #define MULT16_16_P15(a,b) ((a)*(b))
200 #define MULT16_16_P13(a,b) ((a)*(b))
201 #define MULT16_16_P14(a,b) ((a)*(b))
203 #define DIV32_16(a,b) (((spx_word32_t)(a))/(spx_word16_t)(b))
204 #define PDIV32_16(a,b) (((spx_word32_t)(a))/(spx_word16_t)(b))
205 #define DIV32(a,b) (((spx_word32_t)(a))/(spx_word32_t)(b))
206 #define PDIV32(a,b) (((spx_word32_t)(a))/(spx_word32_t)(b))
212 #if defined (CONFIG_TI_C54X) || defined (CONFIG_TI_C55X)
215 #define BYTES_PER_CHAR 2
216 #define BITS_PER_CHAR 16
217 #define LOG2_BITS_PER_CHAR 4
221 #define BYTES_PER_CHAR 1
222 #define BITS_PER_CHAR 8
223 #define LOG2_BITS_PER_CHAR 3
230 extern long long spx_mips;
Generic fixed-point operations.