summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Giacomelli <giac2000@hotmail.com>2008-09-04 18:02:10 +0000
committerMichael Giacomelli <giac2000@hotmail.com>2008-09-04 18:02:10 +0000
commit46f85c4c547188d08fd90bad7734d38c654f13ea (patch)
treef868536dccac3a8d4047d11f29310e99b896b03b
parent6c608263d7e19ea9189e6812eed8fc29996b4ef2 (diff)
downloadrockbox-46f85c4c547188d08fd90bad7734d38c654f13ea.tar.gz
rockbox-46f85c4c547188d08fd90bad7734d38c654f13ea.zip
Combine the Vorbis, WMA and AAC IMDCT functions and put them into the codeclib. Combined IMDCT is now based on existing Tremor transform. Reduces CPU for 192k AAC by 21MHz on Coldfire, and 5MHz on PP5024. WMA and Vorbis should have no functional changes since they already used this code. Further optimization is possible and would benefit all 3 codecs.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18412 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/codecs/Makefile2
-rw-r--r--apps/codecs/Tremor/SOURCES4
-rw-r--r--apps/codecs/Tremor/mapping0.c4
-rw-r--r--apps/codecs/Tremor/mdct.c522
-rw-r--r--apps/codecs/Tremor/mdct.h54
-rw-r--r--apps/codecs/Tremor/mdct_arm.S429
-rw-r--r--apps/codecs/Tremor/mdct_lookup.h540
-rw-r--r--apps/codecs/lib/Makefile8
-rw-r--r--apps/codecs/lib/SOURCES7
-rw-r--r--apps/codecs/lib/codeclib.h4
-rw-r--r--apps/codecs/libfaad/SOURCES2
-rw-r--r--apps/codecs/libfaad/cfft.c1015
-rw-r--r--apps/codecs/libfaad/cfft.h53
-rw-r--r--apps/codecs/libfaad/cfft_tab.h1820
-rw-r--r--apps/codecs/libfaad/decoder.c6
-rw-r--r--apps/codecs/libfaad/filtbank.c127
-rw-r--r--apps/codecs/libfaad/filtbank.h8
-rw-r--r--apps/codecs/libfaad/mdct.c298
-rw-r--r--apps/codecs/libfaad/mdct.h45
-rw-r--r--apps/codecs/libfaad/mdct_tab.h3652
-rw-r--r--apps/codecs/libfaad/specrec.c9
-rw-r--r--apps/codecs/libfaad/structs.h4
-rw-r--r--apps/codecs/libwma/SOURCES4
-rw-r--r--apps/codecs/libwma/asm_arm.h343
-rw-r--r--apps/codecs/libwma/asm_mcf5249.h327
-rw-r--r--apps/codecs/libwma/fft.c153
-rw-r--r--apps/codecs/libwma/fft.h43
-rw-r--r--apps/codecs/libwma/mdct.c167
-rw-r--r--apps/codecs/libwma/mdct.h37
-rw-r--r--apps/codecs/libwma/mdct2.c522
-rw-r--r--apps/codecs/libwma/mdct2.h81
-rw-r--r--apps/codecs/libwma/mdct_arm.S429
-rw-r--r--apps/codecs/libwma/mdct_lookup.h544
-rw-r--r--apps/codecs/libwma/misc.h291
-rw-r--r--apps/codecs/libwma/wmadeci.c5
35 files changed, 52 insertions, 11507 deletions
diff --git a/apps/codecs/Makefile b/apps/codecs/Makefile
index 9dd88e5e7d..7662b37e80 100644
--- a/apps/codecs/Makefile
+++ b/apps/codecs/Makefile
@@ -74,7 +74,7 @@ $(OBJDIR)/asap.elf : $(OBJDIR)/asap.o $(BUILDDIR)/libasap.a $(OBJDIR)/codec_crt0
74 74
75$(OBJDIR)/%.elf: $(OBJDIR)/codec_crt0.o 75$(OBJDIR)/%.elf: $(OBJDIR)/codec_crt0.o
76 $(call PRINTS,LD $(@F))$(CC) $(CFLAGS) -o $@ $^ -L$(BUILDDIR) -lcodec -lgcc \ 76 $(call PRINTS,LD $(@F))$(CC) $(CFLAGS) -o $@ $^ -L$(BUILDDIR) -lcodec -lgcc \
77 -T$(LINKCODEC) -Wl,-Map,$(OBJDIR)/$*.map 77 -T$(LINKCODEC) -Wl,--gc-sections,-Map,$(OBJDIR)/$*.map
78 78
79$(OBJDIR)/%.codec : $(OBJDIR)/%.elf 79$(OBJDIR)/%.codec : $(OBJDIR)/%.elf
80 $(call PRINTS,OBJCOPY $(@F))$(OC) -O binary $< $@ 80 $(call PRINTS,OBJCOPY $(@F))$(OC) -O binary $< $@
diff --git a/apps/codecs/Tremor/SOURCES b/apps/codecs/Tremor/SOURCES
index 9b8c05e340..c622699599 100644
--- a/apps/codecs/Tremor/SOURCES
+++ b/apps/codecs/Tremor/SOURCES
@@ -6,10 +6,6 @@ floor1.c
6framing.c 6framing.c
7info.c 7info.c
8mapping0.c 8mapping0.c
9mdct.c
10#ifdef CPU_ARM
11mdct_arm.S
12#endif
13registry.c 9registry.c
14res012.c 10res012.c
15sharedbook.c 11sharedbook.c
diff --git a/apps/codecs/Tremor/mapping0.c b/apps/codecs/Tremor/mapping0.c
index dde3088f29..6bcc717d86 100644
--- a/apps/codecs/Tremor/mapping0.c
+++ b/apps/codecs/Tremor/mapping0.c
@@ -21,7 +21,7 @@
21#include <math.h> 21#include <math.h>
22#include "ogg.h" 22#include "ogg.h"
23#include "ivorbiscodec.h" 23#include "ivorbiscodec.h"
24#include "mdct.h" 24#include <codecs/lib/codeclib.h>
25#include "codec_internal.h" 25#include "codec_internal.h"
26#include "codebook.h" 26#include "codebook.h"
27#include "window.h" 27#include "window.h"
@@ -303,7 +303,7 @@ static int mapping0_inverse(vorbis_block *vb,vorbis_look_mapping *l){
303 if(nonzero[i]) { 303 if(nonzero[i]) {
304 look->floor_func[submap]-> 304 look->floor_func[submap]->
305 inverse2(vb,look->floor_look[submap],floormemo[i],pcm); 305 inverse2(vb,look->floor_look[submap],floormemo[i],pcm);
306 mdct_backward(n, pcm, pcm); 306 mdct_backward(n, (int32_t*) pcm, (int32_t*) pcm);
307 /* window the data */ 307 /* window the data */
308 _vorbis_apply_window(pcm,b->window,ci->blocksizes,vb->lW,vb->W,vb->nW); 308 _vorbis_apply_window(pcm,b->window,ci->blocksizes,vb->lW,vb->W,vb->nW);
309 } 309 }
diff --git a/apps/codecs/Tremor/mdct.c b/apps/codecs/Tremor/mdct.c
deleted file mode 100644
index dce2a9d196..0000000000
--- a/apps/codecs/Tremor/mdct.c
+++ /dev/null
@@ -1,522 +0,0 @@
1/********************************************************************
2 * *
3 * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
4 * *
5 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
6 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
7 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
8 * *
9 * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
10 * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
11 * *
12 ********************************************************************
13
14 function: normalized modified discrete cosine transform
15 power of two length transform only [64 <= n ]
16 last mod: $Id$
17
18 Original algorithm adapted long ago from _The use of multirate filter
19 banks for coding of high quality digital audio_, by T. Sporer,
20 K. Brandenburg and B. Edler, collection of the European Signal
21 Processing Conference (EUSIPCO), Amsterdam, June 1992, Vol.1, pp
22 211-214
23
24 The below code implements an algorithm that no longer looks much like
25 that presented in the paper, but the basic structure remains if you
26 dig deep enough to see it.
27
28 This module DOES NOT INCLUDE code to generate/apply the window
29 function. Everybody has their own weird favorite including me... I
30 happen to like the properties of y=sin(.5PI*sin^2(x)), but others may
31 vehemently disagree.
32
33 ********************************************************************/
34
35#include "ivorbiscodec.h"
36#include "os.h"
37#include "misc.h"
38#include "mdct.h"
39#include "mdct_lookup.h"
40
41#if defined(CPU_ARM) && CONFIG_CPU != S3C2440
42/* C code is faster on S3C2440 */
43
44extern void mdct_butterfly_32(DATA_TYPE *x);
45extern void mdct_butterfly_generic_loop(DATA_TYPE *x1, DATA_TYPE *x2,
46 LOOKUP_T *T0, int step,
47 LOOKUP_T *Ttop);
48
49STIN void mdct_butterfly_generic(DATA_TYPE *x,int points, int step){
50 mdct_butterfly_generic_loop(x + points, x + (points>>1),
51 sincos_lookup0, step, sincos_lookup0+1024);
52}
53
54#else
55
56/* 8 point butterfly (in place) */
57STIN void mdct_butterfly_8(DATA_TYPE *x){
58 REG_TYPE r0 = x[4] + x[0];
59 REG_TYPE r1 = x[4] - x[0];
60 REG_TYPE r2 = x[5] + x[1];
61 REG_TYPE r3 = x[5] - x[1];
62 REG_TYPE r4 = x[6] + x[2];
63 REG_TYPE r5 = x[6] - x[2];
64 REG_TYPE r6 = x[7] + x[3];
65 REG_TYPE r7 = x[7] - x[3];
66
67 x[0] = r5 + r3;
68 x[1] = r7 - r1;
69 x[2] = r5 - r3;
70 x[3] = r7 + r1;
71 x[4] = r4 - r0;
72 x[5] = r6 - r2;
73 x[6] = r4 + r0;
74 x[7] = r6 + r2;
75 MB();
76}
77
78/* 16 point butterfly (in place, 4 register) */
79STIN void mdct_butterfly_16(DATA_TYPE *x){
80
81 REG_TYPE r0, r1;
82
83 r0 = x[ 0] - x[ 8]; x[ 8] += x[ 0];
84 r1 = x[ 1] - x[ 9]; x[ 9] += x[ 1];
85 x[ 0] = MULT31((r0 + r1) , cPI2_8);
86 x[ 1] = MULT31((r1 - r0) , cPI2_8);
87 MB();
88
89 r0 = x[10] - x[ 2]; x[10] += x[ 2];
90 r1 = x[ 3] - x[11]; x[11] += x[ 3];
91 x[ 2] = r1; x[ 3] = r0;
92 MB();
93
94 r0 = x[12] - x[ 4]; x[12] += x[ 4];
95 r1 = x[13] - x[ 5]; x[13] += x[ 5];
96 x[ 4] = MULT31((r0 - r1) , cPI2_8);
97 x[ 5] = MULT31((r0 + r1) , cPI2_8);
98 MB();
99
100 r0 = x[14] - x[ 6]; x[14] += x[ 6];
101 r1 = x[15] - x[ 7]; x[15] += x[ 7];
102 x[ 6] = r0; x[ 7] = r1;
103 MB();
104
105 mdct_butterfly_8(x);
106 mdct_butterfly_8(x+8);
107}
108
109/* 32 point butterfly (in place, 4 register) */
110STIN void mdct_butterfly_32(DATA_TYPE *x){
111
112 REG_TYPE r0, r1;
113
114 r0 = x[30] - x[14]; x[30] += x[14];
115 r1 = x[31] - x[15]; x[31] += x[15];
116 x[14] = r0; x[15] = r1;
117 MB();
118
119 r0 = x[28] - x[12]; x[28] += x[12];
120 r1 = x[29] - x[13]; x[29] += x[13];
121 XNPROD31( r0, r1, cPI1_8, cPI3_8, &x[12], &x[13] );
122 MB();
123
124 r0 = x[26] - x[10]; x[26] += x[10];
125 r1 = x[27] - x[11]; x[27] += x[11];
126 x[10] = MULT31((r0 - r1) , cPI2_8);
127 x[11] = MULT31((r0 + r1) , cPI2_8);
128 MB();
129
130 r0 = x[24] - x[ 8]; x[24] += x[ 8];
131 r1 = x[25] - x[ 9]; x[25] += x[ 9];
132 XNPROD31( r0, r1, cPI3_8, cPI1_8, &x[ 8], &x[ 9] );
133 MB();
134
135 r0 = x[22] - x[ 6]; x[22] += x[ 6];
136 r1 = x[ 7] - x[23]; x[23] += x[ 7];
137 x[ 6] = r1; x[ 7] = r0;
138 MB();
139
140 r0 = x[ 4] - x[20]; x[20] += x[ 4];
141 r1 = x[ 5] - x[21]; x[21] += x[ 5];
142 XPROD31 ( r0, r1, cPI3_8, cPI1_8, &x[ 4], &x[ 5] );
143 MB();
144
145 r0 = x[ 2] - x[18]; x[18] += x[ 2];
146 r1 = x[ 3] - x[19]; x[19] += x[ 3];
147 x[ 2] = MULT31((r1 + r0) , cPI2_8);
148 x[ 3] = MULT31((r1 - r0) , cPI2_8);
149 MB();
150
151 r0 = x[ 0] - x[16]; x[16] += x[ 0];
152 r1 = x[ 1] - x[17]; x[17] += x[ 1];
153 XPROD31 ( r0, r1, cPI1_8, cPI3_8, &x[ 0], &x[ 1] );
154 MB();
155
156 mdct_butterfly_16(x);
157 mdct_butterfly_16(x+16);
158}
159
160/* N/stage point generic N stage butterfly (in place, 4 register) */
161void mdct_butterfly_generic(DATA_TYPE *x,int points, int step)
162 ICODE_ATTR_TREMOR_MDCT;
163void mdct_butterfly_generic(DATA_TYPE *x,int points, int step){
164 LOOKUP_T *T = sincos_lookup0;
165 DATA_TYPE *x1 = x + points - 8;
166 DATA_TYPE *x2 = x + (points>>1) - 8;
167 REG_TYPE r0;
168 REG_TYPE r1;
169 REG_TYPE r2;
170 REG_TYPE r3;
171
172 do{
173 r0 = x1[6] - x2[6]; x1[6] += x2[6];
174 r1 = x2[7] - x1[7]; x1[7] += x2[7];
175 r2 = x1[4] - x2[4]; x1[4] += x2[4];
176 r3 = x2[5] - x1[5]; x1[5] += x2[5];
177 XPROD31( r1, r0, T[0], T[1], &x2[6], &x2[7] ); T+=step;
178 XPROD31( r3, r2, T[0], T[1], &x2[4], &x2[5] ); T+=step;
179
180 r0 = x1[2] - x2[2]; x1[2] += x2[2];
181 r1 = x2[3] - x1[3]; x1[3] += x2[3];
182 r2 = x1[0] - x2[0]; x1[0] += x2[0];
183 r3 = x2[1] - x1[1]; x1[1] += x2[1];
184 XPROD31( r1, r0, T[0], T[1], &x2[2], &x2[3] ); T+=step;
185 XPROD31( r3, r2, T[0], T[1], &x2[0], &x2[1] ); T+=step;
186
187 x1-=8; x2-=8;
188 }while(T<sincos_lookup0+1024);
189 do{
190 r0 = x1[6] - x2[6]; x1[6] += x2[6];
191 r1 = x1[7] - x2[7]; x1[7] += x2[7];
192 r2 = x1[4] - x2[4]; x1[4] += x2[4];
193 r3 = x1[5] - x2[5]; x1[5] += x2[5];
194 XNPROD31( r0, r1, T[0], T[1], &x2[6], &x2[7] ); T-=step;
195 XNPROD31( r2, r3, T[0], T[1], &x2[4], &x2[5] ); T-=step;
196
197 r0 = x1[2] - x2[2]; x1[2] += x2[2];
198 r1 = x1[3] - x2[3]; x1[3] += x2[3];
199 r2 = x1[0] - x2[0]; x1[0] += x2[0];
200 r3 = x1[1] - x2[1]; x1[1] += x2[1];
201 XNPROD31( r0, r1, T[0], T[1], &x2[2], &x2[3] ); T-=step;
202 XNPROD31( r2, r3, T[0], T[1], &x2[0], &x2[1] ); T-=step;
203
204 x1-=8; x2-=8;
205 }while(T>sincos_lookup0);
206 do{
207 r0 = x2[6] - x1[6]; x1[6] += x2[6];
208 r1 = x2[7] - x1[7]; x1[7] += x2[7];
209 r2 = x2[4] - x1[4]; x1[4] += x2[4];
210 r3 = x2[5] - x1[5]; x1[5] += x2[5];
211 XPROD31( r0, r1, T[0], T[1], &x2[6], &x2[7] ); T+=step;
212 XPROD31( r2, r3, T[0], T[1], &x2[4], &x2[5] ); T+=step;
213
214 r0 = x2[2] - x1[2]; x1[2] += x2[2];
215 r1 = x2[3] - x1[3]; x1[3] += x2[3];
216 r2 = x2[0] - x1[0]; x1[0] += x2[0];
217 r3 = x2[1] - x1[1]; x1[1] += x2[1];
218 XPROD31( r0, r1, T[0], T[1], &x2[2], &x2[3] ); T+=step;
219 XPROD31( r2, r3, T[0], T[1], &x2[0], &x2[1] ); T+=step;
220
221 x1-=8; x2-=8;
222 }while(T<sincos_lookup0+1024);
223 do{
224 r0 = x1[6] - x2[6]; x1[6] += x2[6];
225 r1 = x2[7] - x1[7]; x1[7] += x2[7];
226 r2 = x1[4] - x2[4]; x1[4] += x2[4];
227 r3 = x2[5] - x1[5]; x1[5] += x2[5];
228 XNPROD31( r1, r0, T[0], T[1], &x2[6], &x2[7] ); T-=step;
229 XNPROD31( r3, r2, T[0], T[1], &x2[4], &x2[5] ); T-=step;
230
231 r0 = x1[2] - x2[2]; x1[2] += x2[2];
232 r1 = x2[3] - x1[3]; x1[3] += x2[3];
233 r2 = x1[0] - x2[0]; x1[0] += x2[0];
234 r3 = x2[1] - x1[1]; x1[1] += x2[1];
235 XNPROD31( r1, r0, T[0], T[1], &x2[2], &x2[3] ); T-=step;
236 XNPROD31( r3, r2, T[0], T[1], &x2[0], &x2[1] ); T-=step;
237
238 x1-=8; x2-=8;
239 }while(T>sincos_lookup0);
240}
241
242#endif /* CPU_ARM */
243
244STIN void mdct_butterflies(DATA_TYPE *x,int points,int shift) {
245
246 int stages=8-shift;
247 int i,j;
248
249 for(i=0;--stages>0;i++){
250 for(j=0;j<(1<<i);j++)
251 mdct_butterfly_generic(x+(points>>i)*j,points>>i,4<<(i+shift));
252 }
253
254 for(j=0;j<points;j+=32)
255 mdct_butterfly_32(x+j);
256}
257
258
259static const unsigned char bitrev[16] ICONST_ATTR =
260 {0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15};
261
262STIN int bitrev12(int x){
263 return bitrev[x>>8]|(bitrev[(x&0x0f0)>>4]<<4)|(((int)bitrev[x&0x00f])<<8);
264}
265
266STIN void mdct_bitreverse(DATA_TYPE *x,int n,int step,int shift) {
267
268 int bit = 0;
269 DATA_TYPE *w0 = x;
270 DATA_TYPE *w1 = x = w0+(n>>1);
271 LOOKUP_T *T = (step>=4)?(sincos_lookup0+(step>>1)):sincos_lookup1;
272 LOOKUP_T *Ttop = T+1024;
273 REG_TYPE r2;
274
275 do{
276 REG_TYPE r3 = bitrev12(bit++);
277 DATA_TYPE *x0 = x + ((r3 ^ 0xfff)>>shift) -1;
278 DATA_TYPE *x1 = x + (r3>>shift);
279
280 REG_TYPE r0 = x0[0] + x1[0];
281 REG_TYPE r1 = x1[1] - x0[1];
282
283 XPROD32( r0, r1, T[1], T[0], r2, r3 ); T+=step;
284
285 w1 -= 4;
286
287 r0 = (x0[1] + x1[1])>>1;
288 r1 = (x0[0] - x1[0])>>1;
289 w0[0] = r0 + r2;
290 w0[1] = r1 + r3;
291 w1[2] = r0 - r2;
292 w1[3] = r3 - r1;
293
294 r3 = bitrev12(bit++);
295 x0 = x + ((r3 ^ 0xfff)>>shift) -1;
296 x1 = x + (r3>>shift);
297
298 r0 = x0[0] + x1[0];
299 r1 = x1[1] - x0[1];
300
301 XPROD32( r0, r1, T[1], T[0], r2, r3 ); T+=step;
302
303 r0 = (x0[1] + x1[1])>>1;
304 r1 = (x0[0] - x1[0])>>1;
305 w0[2] = r0 + r2;
306 w0[3] = r1 + r3;
307 w1[0] = r0 - r2;
308 w1[1] = r3 - r1;
309
310 w0 += 4;
311 }while(T<Ttop);
312 do{
313 REG_TYPE r3 = bitrev12(bit++);
314 DATA_TYPE *x0 = x + ((r3 ^ 0xfff)>>shift) -1;
315 DATA_TYPE *x1 = x + (r3>>shift);
316
317 REG_TYPE r0 = x0[0] + x1[0];
318 REG_TYPE r1 = x1[1] - x0[1];
319
320 T-=step; XPROD32( r0, r1, T[0], T[1], r2, r3 );
321
322 w1 -= 4;
323
324 r0 = (x0[1] + x1[1])>>1;
325 r1 = (x0[0] - x1[0])>>1;
326 w0[0] = r0 + r2;
327 w0[1] = r1 + r3;
328 w1[2] = r0 - r2;
329 w1[3] = r3 - r1;
330
331 r3 = bitrev12(bit++);
332 x0 = x + ((r3 ^ 0xfff)>>shift) -1;
333 x1 = x + (r3>>shift);
334
335 r0 = x0[0] + x1[0];
336 r1 = x1[1] - x0[1];
337
338 T-=step; XPROD32( r0, r1, T[0], T[1], r2, r3 );
339
340 r0 = (x0[1] + x1[1])>>1;
341 r1 = (x0[0] - x1[0])>>1;
342 w0[2] = r0 + r2;
343 w0[3] = r1 + r3;
344 w1[0] = r0 - r2;
345 w1[1] = r3 - r1;
346
347 w0 += 4;
348 }while(w0<w1);
349}
350
351
352void mdct_backward(int n, DATA_TYPE *in, DATA_TYPE *out)
353 ICODE_ATTR_TREMOR_MDCT;
354void mdct_backward(int n, DATA_TYPE *in, DATA_TYPE *out) {
355 int n2=n>>1;
356 int n4=n>>2;
357 DATA_TYPE *iX;
358 DATA_TYPE *oX;
359 LOOKUP_T *T;
360 LOOKUP_T *V;
361 int shift;
362 int step;
363
364 for (shift=6;!(n&(1<<shift));shift++);
365 shift=13-shift;
366 step=2<<shift;
367
368 /* rotate */
369
370 iX = in+n2-7;
371 oX = out+n2+n4;
372 T = sincos_lookup0;
373
374 do{
375 oX-=4;
376 XPROD31( iX[4], iX[6], T[0], T[1], &oX[2], &oX[3] ); T+=step;
377 XPROD31( iX[0], iX[2], T[0], T[1], &oX[0], &oX[1] ); T+=step;
378 iX-=8;
379 }while(iX>=in+n4);
380 do{
381 oX-=4;
382 XPROD31( iX[4], iX[6], T[1], T[0], &oX[2], &oX[3] ); T-=step;
383 XPROD31( iX[0], iX[2], T[1], T[0], &oX[0], &oX[1] ); T-=step;
384 iX-=8;
385 }while(iX>=in);
386
387 iX = in+n2-8;
388 oX = out+n2+n4;
389 T = sincos_lookup0;
390
391 do{
392 T+=step; XNPROD31( iX[6], iX[4], T[0], T[1], &oX[0], &oX[1] );
393 T+=step; XNPROD31( iX[2], iX[0], T[0], T[1], &oX[2], &oX[3] );
394 iX-=8;
395 oX+=4;
396 }while(iX>=in+n4);
397 do{
398 T-=step; XNPROD31( iX[6], iX[4], T[1], T[0], &oX[0], &oX[1] );
399 T-=step; XNPROD31( iX[2], iX[0], T[1], T[0], &oX[2], &oX[3] );
400 iX-=8;
401 oX+=4;
402 }while(iX>=in);
403
404 mdct_butterflies(out+n2,n2,shift);
405 mdct_bitreverse(out,n,step,shift);
406 /* rotate + window */
407
408 step>>=2;
409 {
410 DATA_TYPE *oX1=out+n2+n4;
411 DATA_TYPE *oX2=out+n2+n4;
412 DATA_TYPE *iX =out;
413
414 switch(step) {
415 default: {
416 T=(step>=4)?(sincos_lookup0+(step>>1)):sincos_lookup1;
417 do{
418 oX1-=4;
419 XPROD31( iX[0], -iX[1], T[0], T[1], &oX1[3], &oX2[0] ); T+=step;
420 XPROD31( iX[2], -iX[3], T[0], T[1], &oX1[2], &oX2[1] ); T+=step;
421 XPROD31( iX[4], -iX[5], T[0], T[1], &oX1[1], &oX2[2] ); T+=step;
422 XPROD31( iX[6], -iX[7], T[0], T[1], &oX1[0], &oX2[3] ); T+=step;
423 oX2+=4;
424 iX+=8;
425 }while(iX<oX1);
426 break;
427 }
428
429 case 1: {
430 /* linear interpolation between table values: offset=0.5, step=1 */
431 REG_TYPE t0,t1,v0,v1;
432 T = sincos_lookup0;
433 V = sincos_lookup1;
434 t0 = (*T++)>>1;
435 t1 = (*T++)>>1;
436 do{
437 oX1-=4;
438
439 t0 += (v0 = (*V++)>>1);
440 t1 += (v1 = (*V++)>>1);
441 XPROD31( iX[0], -iX[1], t0, t1, &oX1[3], &oX2[0] );
442 v0 += (t0 = (*T++)>>1);
443 v1 += (t1 = (*T++)>>1);
444 XPROD31( iX[2], -iX[3], v0, v1, &oX1[2], &oX2[1] );
445 t0 += (v0 = (*V++)>>1);
446 t1 += (v1 = (*V++)>>1);
447 XPROD31( iX[4], -iX[5], t0, t1, &oX1[1], &oX2[2] );
448 v0 += (t0 = (*T++)>>1);
449 v1 += (t1 = (*T++)>>1);
450 XPROD31( iX[6], -iX[7], v0, v1, &oX1[0], &oX2[3] );
451
452 oX2+=4;
453 iX+=8;
454 }while(iX<oX1);
455 break;
456 }
457
458 case 0: {
459 /* linear interpolation between table values: offset=0.25, step=0.5 */
460 REG_TYPE t0,t1,v0,v1,q0,q1;
461 T = sincos_lookup0;
462 V = sincos_lookup1;
463 t0 = *T++;
464 t1 = *T++;
465 do{
466 oX1-=4;
467
468 v0 = *V++;
469 v1 = *V++;
470 t0 += (q0 = (v0-t0)>>2);
471 t1 += (q1 = (v1-t1)>>2);
472 XPROD31( iX[0], -iX[1], t0, t1, &oX1[3], &oX2[0] );
473 t0 = v0-q0;
474 t1 = v1-q1;
475 XPROD31( iX[2], -iX[3], t0, t1, &oX1[2], &oX2[1] );
476
477 t0 = *T++;
478 t1 = *T++;
479 v0 += (q0 = (t0-v0)>>2);
480 v1 += (q1 = (t1-v1)>>2);
481 XPROD31( iX[4], -iX[5], v0, v1, &oX1[1], &oX2[2] );
482 v0 = t0-q0;
483 v1 = t1-q1;
484 XPROD31( iX[6], -iX[7], v0, v1, &oX1[0], &oX2[3] );
485
486 oX2+=4;
487 iX+=8;
488 }while(iX<oX1);
489 break;
490 }
491 }
492
493 iX=out+n2+n4;
494 oX1=out+n4;
495 oX2=oX1;
496
497 do{
498 oX1-=4;
499 iX-=4;
500
501 oX2[0] = -(oX1[3] = iX[3]);
502 oX2[1] = -(oX1[2] = iX[2]);
503 oX2[2] = -(oX1[1] = iX[1]);
504 oX2[3] = -(oX1[0] = iX[0]);
505
506 oX2+=4;
507 }while(oX2<iX);
508
509 iX=out+n2+n4;
510 oX1=out+n2+n4;
511 oX2=out+n2;
512
513 do{
514 oX1-=4;
515 oX1[0]= iX[3];
516 oX1[1]= iX[2];
517 oX1[2]= iX[1];
518 oX1[3]= iX[0];
519 iX+=4;
520 }while(oX1>oX2);
521 }
522}
diff --git a/apps/codecs/Tremor/mdct.h b/apps/codecs/Tremor/mdct.h
deleted file mode 100644
index bdfe0e7304..0000000000
--- a/apps/codecs/Tremor/mdct.h
+++ /dev/null
@@ -1,54 +0,0 @@
1/********************************************************************
2 * *
3 * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
4 * *
5 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
6 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
7 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
8 * *
9 * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
10 * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
11 * *
12 ********************************************************************
13
14 function: modified discrete cosine transform prototypes
15
16 ********************************************************************/
17
18#ifndef _OGG_mdct_H_
19#define _OGG_mdct_H_
20
21#include "ivorbiscodec.h"
22#include "misc.h"
23
24#define DATA_TYPE ogg_int32_t
25#define REG_TYPE register ogg_int32_t
26
27#ifdef _LOW_ACCURACY_
28#define cPI3_8 (0x0062)
29#define cPI2_8 (0x00b5)
30#define cPI1_8 (0x00ed)
31#else
32#define cPI3_8 (0x30fbc54d)
33#define cPI2_8 (0x5a82799a)
34#define cPI1_8 (0x7641af3d)
35#endif
36
37//extern void mdct_forward(int n, DATA_TYPE *in, DATA_TYPE *out);
38extern void mdct_backward(int n, DATA_TYPE *in, DATA_TYPE *out);
39//extern void mdct_bitreverse(DATA_TYPE *x,int n,int step,int shift);
40//extern void mdct_butterflies(DATA_TYPE *x,int points,int shift);
41
42#endif
43
44
45
46
47
48
49
50
51
52
53
54
diff --git a/apps/codecs/Tremor/mdct_arm.S b/apps/codecs/Tremor/mdct_arm.S
deleted file mode 100644
index f7858f2e4d..0000000000
--- a/apps/codecs/Tremor/mdct_arm.S
+++ /dev/null
@@ -1,429 +0,0 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id: $
9 *
10 * Copyright (C) 2007 by Tomasz Malesinski
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21
22#include "config.h"
23/* Codecs should not normally do this, but we need to check a macro, and
24 * codecs.h would confuse the assembler. */
25
26#define cPI3_8 (0x30fbc54d)
27#define cPI2_8 (0x5a82799a)
28#define cPI1_8 (0x7641af3d)
29
30#ifdef USE_IRAM
31 .section .icode,"ax",%progbits
32#else
33 .text
34#endif
35 .align
36
37 .global mdct_butterfly_32
38 .global mdct_butterfly_generic_loop
39
40mdct_butterfly_8:
41 add r9, r5, r1 @ x4 + x0
42 sub r5, r5, r1 @ x4 - x0
43 add r7, r6, r2 @ x5 + x1
44 sub r6, r6, r2 @ x5 - x1
45 add r8, r10, r3 @ x6 + x2
46 sub r10, r10, r3 @ x6 - x2
47 add r12, r11, r4 @ x7 + x3
48 sub r11, r11, r4 @ x7 - x3
49
50 add r1, r10, r6 @ y0 = (x6 - x2) + (x5 - x1)
51 sub r2, r11, r5 @ y1 = (x7 - x3) - (x4 - x0)
52 sub r3, r10, r6 @ y2 = (x6 - x2) - (x5 - x1)
53 add r4, r11, r5 @ y3 = (x7 - x3) + (x4 - x0)
54 sub r5, r8, r9 @ y4 = (x6 + x2) - (x4 + x0)
55 sub r6, r12, r7 @ y5 = (x7 + x3) - (x5 + x1)
56 add r10, r8, r9 @ y6 = (x6 + x2) + (x4 + x0)
57 add r11, r12, r7 @ y7 = (x7 + x3) + (x5 + x1)
58 stmia r0, {r1, r2, r3, r4, r5, r6, r10, r11}
59
60 mov pc, lr
61
62mdct_butterfly_16:
63 str lr, [sp, #-4]!
64 add r1, r0, #8*4
65
66 ldmia r0, {r2, r3, r4, r5}
67 ldmia r1, {r6, r7, r8, r9}
68 add r6, r6, r2 @ y8 = x8 + x0
69 rsb r2, r6, r2, asl #1 @ x0 - x8
70 add r7, r7, r3 @ y9 = x9 + x1
71 rsb r3, r7, r3, asl #1 @ x1 - x9
72 add r8, r8, r4 @ y10 = x10 + x2
73 sub r11, r8, r4, asl #1 @ x10 - x2
74 add r9, r9, r5 @ y11 = x11 + x3
75 rsb r10, r9, r5, asl #1 @ x3 - x11
76
77 stmia r1!, {r6, r7, r8, r9}
78
79 add r2, r2, r3 @ (x0 - x8) + (x1 - x9)
80 rsb r3, r2, r3, asl #1 @ (x1 - x9) - (x0 - x8)
81
82 ldr r12, =cPI2_8
83 smull r8, r5, r2, r12
84 mov r5, r5, asl #1
85 smull r8, r6, r3, r12
86 mov r6, r6, asl #1
87
88 stmia r0!, {r5, r6, r10, r11}
89
90 ldmia r0, {r2, r3, r4, r5}
91 ldmia r1, {r6, r7, r8, r9}
92 add r6, r6, r2 @ y12 = x12 + x4
93 sub r2, r6, r2, asl #1 @ x12 - x4
94 add r7, r7, r3 @ y13 = x13 + x5
95 sub r3, r7, r3, asl #1 @ x13 - x5
96 add r8, r8, r4 @ y10 = x14 + x6
97 sub r10, r8, r4, asl #1 @ x14 - x6
98 add r9, r9, r5 @ y11 = x15 + x7
99 sub r11, r9, r5, asl #1 @ x15 - x7
100
101 stmia r1, {r6, r7, r8, r9}
102
103 sub r2, r2, r3 @ (x12 - x4) - (x13 - x5)
104 add r3, r2, r3, asl #1 @ (x12 - x4) + (x13 - x5)
105
106 smull r8, r5, r2, r12
107 mov r5, r5, asl #1
108 smull r8, r6, r3, r12
109 mov r6, r6, asl #1
110 @ no stmia here, r5, r6, r10, r11 are passed to mdct_butterfly_8
111
112 sub r0, r0, #4*4
113 ldmia r0, {r1, r2, r3, r4}
114 bl mdct_butterfly_8
115 add r0, r0, #8*4
116 ldmia r0, {r1, r2, r3, r4, r5, r6, r10, r11}
117 bl mdct_butterfly_8
118
119 ldr pc, [sp], #4
120
121mdct_butterfly_32:
122 stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, lr}
123
124 add r1, r0, #16*4
125
126 ldmia r0, {r2, r3, r4, r5}
127 ldmia r1, {r6, r7, r8, r9}
128 add r6, r6, r2 @ y16 = x16 + x0
129 rsb r2, r6, r2, asl #1 @ x0 - x16
130 add r7, r7, r3 @ y17 = x17 + x1
131 rsb r3, r7, r3, asl #1 @ x1 - x17
132 add r8, r8, r4 @ y18 = x18 + x2
133 rsb r4, r8, r4, asl #1 @ x2 - x18
134 add r9, r9, r5 @ y19 = x19 + x3
135 rsb r5, r9, r5, asl #1 @ x3 - x19
136
137 stmia r1!, {r6, r7, r8, r9}
138
139 ldr r12, =cPI1_8
140 ldr lr, =cPI3_8
141 smull r10, r6, r2, r12
142 smlal r10, r6, r3, lr
143 rsb r2, r2, #0
144 smull r10, r7, r3, r12
145 smlal r10, r7, r2, lr
146 mov r6, r6, asl #1
147 mov r7, r7, asl #1
148
149 add r4, r4, r5 @ (x3 - x19) + (x2 - x18)
150 rsb r5, r4, r5, asl #1 @ (x3 - x19) - (x2 - x18)
151
152 ldr r11, =cPI2_8
153 smull r10, r8, r4, r11
154 mov r8, r8, asl #1
155 smull r10, r9, r5, r11
156 mov r9, r9, asl #1
157
158 stmia r0!, {r6, r7, r8, r9}
159
160 ldmia r0, {r2, r3, r4, r5}
161 ldmia r1, {r6, r7, r8, r9}
162 add r6, r6, r2 @ y20 = x20 + x4
163 rsb r2, r6, r2, asl #1 @ x4 - x20
164 add r7, r7, r3 @ y21 = x21 + x5
165 rsb r3, r7, r3, asl #1 @ x5 - x21
166 add r8, r8, r4 @ y22 = x22 + x6
167 sub r4, r8, r4, asl #1 @ x22 - x6
168 add r9, r9, r5 @ y23 = x23 + x7
169 rsb r5, r9, r5, asl #1 @ x7 - x23
170
171 stmia r1!, {r6, r7, r8, r9}
172
173 smull r10, r6, r2, lr
174 smlal r10, r6, r3, r12
175 rsb r2, r2, #0
176 smull r10, r7, r3, lr
177 smlal r10, r7, r2, r12
178 mov r6, r6, asl #1
179 mov r7, r7, asl #1
180
181 mov r8, r5
182 mov r9, r4
183 stmia r0!, {r6, r7, r8, r9}
184
185 ldmia r0, {r2, r3, r4, r5}
186 ldmia r1, {r6, r7, r8, r9}
187 add r6, r6, r2 @ y24 = x24 + x8
188 sub r2, r6, r2, asl #1 @ x24 - x8
189 add r7, r7, r3 @ y25 = x25 + x9
190 sub r3, r7, r3, asl #1 @ x25 - x9
191 add r8, r8, r4 @ y26 = x26 + x10
192 sub r4, r8, r4, asl #1 @ x26 - x10
193 add r9, r9, r5 @ y27 = x27 + x11
194 sub r5, r9, r5, asl #1 @ x27 - x11
195
196 stmia r1!, {r6, r7, r8, r9}
197
198 smull r10, r7, r2, r12
199 smlal r10, r7, r3, lr
200 rsb r3, r3, #0
201 smull r10, r6, r3, r12
202 smlal r10, r6, r2, lr
203 mov r6, r6, asl #1
204 mov r7, r7, asl #1
205
206 sub r4, r4, r5 @ (x26 - x10) - (x27 - x11)
207 add r5, r4, r5, asl #1 @ (x26 - x10) + (x27 - x11)
208
209 ldr r11, =cPI2_8
210 smull r10, r8, r4, r11
211 mov r8, r8, asl #1
212 smull r10, r9, r5, r11
213 mov r9, r9, asl #1
214
215 stmia r0!, {r6, r7, r8, r9}
216
217 ldmia r0, {r2, r3, r4, r5}
218 ldmia r1, {r6, r7, r8, r9}
219 add r6, r6, r2 @ y28 = x28 + x12
220 sub r2, r6, r2, asl #1 @ x28 - x12
221 add r7, r7, r3 @ y29 = x29 + x13
222 sub r3, r7, r3, asl #1 @ x29 - x13
223 add r8, r8, r4 @ y30 = x30 + x14
224 sub r4, r8, r4, asl #1 @ x30 - x14
225 add r9, r9, r5 @ y31 = x31 + x15
226 sub r5, r9, r5, asl #1 @ x31 - x15
227
228 stmia r1, {r6, r7, r8, r9}
229
230 smull r10, r7, r2, lr
231 smlal r10, r7, r3, r12
232 rsb r3, r3, #0
233 smull r10, r6, r3, lr
234 smlal r10, r6, r2, r12
235 mov r6, r6, asl #1
236 mov r7, r7, asl #1
237
238 mov r8, r4
239 mov r9, r5
240 stmia r0, {r6, r7, r8, r9}
241
242 sub r0, r0, #12*4
243 str r0, [sp, #-4]!
244 bl mdct_butterfly_16
245
246 ldr r0, [sp], #4
247 add r0, r0, #16*4
248 bl mdct_butterfly_16
249
250 ldmia sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, pc}
251
252 @ mdct_butterfly_generic_loop(x1, x2, T0, step, Ttop)
253mdct_butterfly_generic_loop:
254 stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, lr}
255 str r2, [sp, #-4]
256 ldr r4, [sp, #40]
2571:
258 ldmdb r0, {r6, r7, r8, r9}
259 ldmdb r1, {r10, r11, r12, r14}
260
261 add r6, r6, r10
262 sub r10, r6, r10, asl #1
263 add r7, r7, r11
264 rsb r11, r7, r11, asl #1
265 add r8, r8, r12
266 sub r12, r8, r12, asl #1
267 add r9, r9, r14
268 rsb r14, r9, r14, asl #1
269
270 stmdb r0!, {r6, r7, r8, r9}
271
272 ldmia r2, {r6, r7}
273 smull r5, r8, r14, r6
274 smlal r5, r8, r12, r7
275 rsb r14, r14, #0
276 smull r5, r9, r12, r6
277 smlal r5, r9, r14, r7
278
279 mov r8, r8, asl #1
280 mov r9, r9, asl #1
281 stmdb r1!, {r8, r9}
282 add r2, r2, r3, asl #2
283
284 ldmia r2, {r6, r7}
285 smull r5, r8, r11, r6
286 smlal r5, r8, r10, r7
287 rsb r11, r11, #0
288 smull r5, r9, r10, r6
289 smlal r5, r9, r11, r7
290
291 mov r8, r8, asl #1
292 mov r9, r9, asl #1
293 stmdb r1!, {r8, r9}
294 add r2, r2, r3, asl #2
295
296 cmp r2, r4
297 blo 1b
298
299 ldr r4, [sp, #-4]
3001:
301 ldmdb r0, {r6, r7, r8, r9}
302 ldmdb r1, {r10, r11, r12, r14}
303
304 add r6, r6, r10
305 sub r10, r6, r10, asl #1
306 add r7, r7, r11
307 sub r11, r7, r11, asl #1
308 add r8, r8, r12
309 sub r12, r8, r12, asl #1
310 add r9, r9, r14
311 sub r14, r9, r14, asl #1
312
313 stmdb r0!, {r6, r7, r8, r9}
314
315 ldmia r2, {r6, r7}
316 smull r5, r9, r14, r6
317 smlal r5, r9, r12, r7
318 rsb r14, r14, #0
319 smull r5, r8, r12, r6
320 smlal r5, r8, r14, r7
321
322 mov r8, r8, asl #1
323 mov r9, r9, asl #1
324 stmdb r1!, {r8, r9}
325 sub r2, r2, r3, asl #2
326
327 ldmia r2, {r6, r7}
328 smull r5, r9, r11, r6
329 smlal r5, r9, r10, r7
330 rsb r11, r11, #0
331 smull r5, r8, r10, r6
332 smlal r5, r8, r11, r7
333
334 mov r8, r8, asl #1
335 mov r9, r9, asl #1
336 stmdb r1!, {r8, r9}
337 sub r2, r2, r3, asl #2
338
339 cmp r2, r4
340 bhi 1b
341
342 ldr r4, [sp, #40]
3431:
344 ldmdb r0, {r6, r7, r8, r9}
345 ldmdb r1, {r10, r11, r12, r14}
346
347 add r6, r6, r10
348 rsb r10, r6, r10, asl #1
349 add r7, r7, r11
350 rsb r11, r7, r11, asl #1
351 add r8, r8, r12
352 rsb r12, r8, r12, asl #1
353 add r9, r9, r14
354 rsb r14, r9, r14, asl #1
355
356 stmdb r0!, {r6, r7, r8, r9}
357
358 ldmia r2, {r6, r7}
359 smull r5, r8, r12, r6
360 smlal r5, r8, r14, r7
361 rsb r12, r12, #0
362 smull r5, r9, r14, r6
363 smlal r5, r9, r12, r7
364
365 mov r8, r8, asl #1
366 mov r9, r9, asl #1
367 stmdb r1!, {r8, r9}
368 add r2, r2, r3, asl #2
369
370 ldmia r2, {r6, r7}
371 smull r5, r8, r10, r6
372 smlal r5, r8, r11, r7
373 rsb r10, r10, #0
374 smull r5, r9, r11, r6
375 smlal r5, r9, r10, r7
376
377 mov r8, r8, asl #1
378 mov r9, r9, asl #1
379 stmdb r1!, {r8, r9}
380 add r2, r2, r3, asl #2
381
382 cmp r2, r4
383 blo 1b
384
385 ldr r4, [sp, #-4]
3861:
387 ldmdb r0, {r6, r7, r8, r9}
388 ldmdb r1, {r10, r11, r12, r14}
389
390 add r6, r6, r10
391 sub r10, r6, r10, asl #1
392 add r7, r7, r11
393 rsb r11, r7, r11, asl #1
394 add r8, r8, r12
395 sub r12, r8, r12, asl #1
396 add r9, r9, r14
397 rsb r14, r9, r14, asl #1
398
399 stmdb r0!, {r6, r7, r8, r9}
400
401 ldmia r2, {r6, r7}
402 smull r5, r9, r12, r6
403 smlal r5, r9, r14, r7
404 rsb r12, r12, #0
405 smull r5, r8, r14, r6
406 smlal r5, r8, r12, r7
407
408 mov r8, r8, asl #1
409 mov r9, r9, asl #1
410 stmdb r1!, {r8, r9}
411 sub r2, r2, r3, asl #2
412
413 ldmia r2, {r6, r7}
414 smull r5, r9, r10, r6
415 smlal r5, r9, r11, r7
416 rsb r10, r10, #0
417 smull r5, r8, r11, r6
418 smlal r5, r8, r10, r7
419
420 mov r8, r8, asl #1
421 mov r9, r9, asl #1
422 stmdb r1!, {r8, r9}
423 sub r2, r2, r3, asl #2
424
425 cmp r2, r4
426 bhi 1b
427
428 ldmia sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, pc}
429
diff --git a/apps/codecs/Tremor/mdct_lookup.h b/apps/codecs/Tremor/mdct_lookup.h
deleted file mode 100644
index 8aade1e6a3..0000000000
--- a/apps/codecs/Tremor/mdct_lookup.h
+++ /dev/null
@@ -1,540 +0,0 @@
1/********************************************************************
2 * *
3 * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
4 * *
5 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
6 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
7 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
8 * *
9 * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
10 * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
11 * *
12 ********************************************************************
13
14 function: sin,cos lookup tables
15
16 ********************************************************************/
17
18#include "os_types.h"
19
20/* {sin(2*i*PI/4096), cos(2*i*PI/4096)}, with i = 0 to 512 */
21static LOOKUP_T sincos_lookup0[1026] ICONST_ATTR = {
22 X(0x00000000), X(0x7fffffff), X(0x003243f5), X(0x7ffff621),
23 X(0x006487e3), X(0x7fffd886), X(0x0096cbc1), X(0x7fffa72c),
24 X(0x00c90f88), X(0x7fff6216), X(0x00fb5330), X(0x7fff0943),
25 X(0x012d96b1), X(0x7ffe9cb2), X(0x015fda03), X(0x7ffe1c65),
26 X(0x01921d20), X(0x7ffd885a), X(0x01c45ffe), X(0x7ffce093),
27 X(0x01f6a297), X(0x7ffc250f), X(0x0228e4e2), X(0x7ffb55ce),
28 X(0x025b26d7), X(0x7ffa72d1), X(0x028d6870), X(0x7ff97c18),
29 X(0x02bfa9a4), X(0x7ff871a2), X(0x02f1ea6c), X(0x7ff75370),
30 X(0x03242abf), X(0x7ff62182), X(0x03566a96), X(0x7ff4dbd9),
31 X(0x0388a9ea), X(0x7ff38274), X(0x03bae8b2), X(0x7ff21553),
32 X(0x03ed26e6), X(0x7ff09478), X(0x041f6480), X(0x7feeffe1),
33 X(0x0451a177), X(0x7fed5791), X(0x0483ddc3), X(0x7feb9b85),
34 X(0x04b6195d), X(0x7fe9cbc0), X(0x04e8543e), X(0x7fe7e841),
35 X(0x051a8e5c), X(0x7fe5f108), X(0x054cc7b1), X(0x7fe3e616),
36 X(0x057f0035), X(0x7fe1c76b), X(0x05b137df), X(0x7fdf9508),
37 X(0x05e36ea9), X(0x7fdd4eec), X(0x0615a48b), X(0x7fdaf519),
38 X(0x0647d97c), X(0x7fd8878e), X(0x067a0d76), X(0x7fd6064c),
39 X(0x06ac406f), X(0x7fd37153), X(0x06de7262), X(0x7fd0c8a3),
40 X(0x0710a345), X(0x7fce0c3e), X(0x0742d311), X(0x7fcb3c23),
41 X(0x077501be), X(0x7fc85854), X(0x07a72f45), X(0x7fc560cf),
42 X(0x07d95b9e), X(0x7fc25596), X(0x080b86c2), X(0x7fbf36aa),
43 X(0x083db0a7), X(0x7fbc040a), X(0x086fd947), X(0x7fb8bdb8),
44 X(0x08a2009a), X(0x7fb563b3), X(0x08d42699), X(0x7fb1f5fc),
45 X(0x09064b3a), X(0x7fae7495), X(0x09386e78), X(0x7faadf7c),
46 X(0x096a9049), X(0x7fa736b4), X(0x099cb0a7), X(0x7fa37a3c),
47 X(0x09cecf89), X(0x7f9faa15), X(0x0a00ece8), X(0x7f9bc640),
48 X(0x0a3308bd), X(0x7f97cebd), X(0x0a6522fe), X(0x7f93c38c),
49 X(0x0a973ba5), X(0x7f8fa4b0), X(0x0ac952aa), X(0x7f8b7227),
50 X(0x0afb6805), X(0x7f872bf3), X(0x0b2d7baf), X(0x7f82d214),
51 X(0x0b5f8d9f), X(0x7f7e648c), X(0x0b919dcf), X(0x7f79e35a),
52 X(0x0bc3ac35), X(0x7f754e80), X(0x0bf5b8cb), X(0x7f70a5fe),
53 X(0x0c27c389), X(0x7f6be9d4), X(0x0c59cc68), X(0x7f671a05),
54 X(0x0c8bd35e), X(0x7f62368f), X(0x0cbdd865), X(0x7f5d3f75),
55 X(0x0cefdb76), X(0x7f5834b7), X(0x0d21dc87), X(0x7f531655),
56 X(0x0d53db92), X(0x7f4de451), X(0x0d85d88f), X(0x7f489eaa),
57 X(0x0db7d376), X(0x7f434563), X(0x0de9cc40), X(0x7f3dd87c),
58 X(0x0e1bc2e4), X(0x7f3857f6), X(0x0e4db75b), X(0x7f32c3d1),
59 X(0x0e7fa99e), X(0x7f2d1c0e), X(0x0eb199a4), X(0x7f2760af),
60 X(0x0ee38766), X(0x7f2191b4), X(0x0f1572dc), X(0x7f1baf1e),
61 X(0x0f475bff), X(0x7f15b8ee), X(0x0f7942c7), X(0x7f0faf25),
62 X(0x0fab272b), X(0x7f0991c4), X(0x0fdd0926), X(0x7f0360cb),
63 X(0x100ee8ad), X(0x7efd1c3c), X(0x1040c5bb), X(0x7ef6c418),
64 X(0x1072a048), X(0x7ef05860), X(0x10a4784b), X(0x7ee9d914),
65 X(0x10d64dbd), X(0x7ee34636), X(0x11082096), X(0x7edc9fc6),
66 X(0x1139f0cf), X(0x7ed5e5c6), X(0x116bbe60), X(0x7ecf1837),
67 X(0x119d8941), X(0x7ec8371a), X(0x11cf516a), X(0x7ec14270),
68 X(0x120116d5), X(0x7eba3a39), X(0x1232d979), X(0x7eb31e78),
69 X(0x1264994e), X(0x7eabef2c), X(0x1296564d), X(0x7ea4ac58),
70 X(0x12c8106f), X(0x7e9d55fc), X(0x12f9c7aa), X(0x7e95ec1a),
71 X(0x132b7bf9), X(0x7e8e6eb2), X(0x135d2d53), X(0x7e86ddc6),
72 X(0x138edbb1), X(0x7e7f3957), X(0x13c0870a), X(0x7e778166),
73 X(0x13f22f58), X(0x7e6fb5f4), X(0x1423d492), X(0x7e67d703),
74 X(0x145576b1), X(0x7e5fe493), X(0x148715ae), X(0x7e57dea7),
75 X(0x14b8b17f), X(0x7e4fc53e), X(0x14ea4a1f), X(0x7e47985b),
76 X(0x151bdf86), X(0x7e3f57ff), X(0x154d71aa), X(0x7e37042a),
77 X(0x157f0086), X(0x7e2e9cdf), X(0x15b08c12), X(0x7e26221f),
78 X(0x15e21445), X(0x7e1d93ea), X(0x16139918), X(0x7e14f242),
79 X(0x16451a83), X(0x7e0c3d29), X(0x1676987f), X(0x7e0374a0),
80 X(0x16a81305), X(0x7dfa98a8), X(0x16d98a0c), X(0x7df1a942),
81 X(0x170afd8d), X(0x7de8a670), X(0x173c6d80), X(0x7ddf9034),
82 X(0x176dd9de), X(0x7dd6668f), X(0x179f429f), X(0x7dcd2981),
83 X(0x17d0a7bc), X(0x7dc3d90d), X(0x1802092c), X(0x7dba7534),
84 X(0x183366e9), X(0x7db0fdf8), X(0x1864c0ea), X(0x7da77359),
85 X(0x18961728), X(0x7d9dd55a), X(0x18c7699b), X(0x7d9423fc),
86 X(0x18f8b83c), X(0x7d8a5f40), X(0x192a0304), X(0x7d808728),
87 X(0x195b49ea), X(0x7d769bb5), X(0x198c8ce7), X(0x7d6c9ce9),
88 X(0x19bdcbf3), X(0x7d628ac6), X(0x19ef0707), X(0x7d58654d),
89 X(0x1a203e1b), X(0x7d4e2c7f), X(0x1a517128), X(0x7d43e05e),
90 X(0x1a82a026), X(0x7d3980ec), X(0x1ab3cb0d), X(0x7d2f0e2b),
91 X(0x1ae4f1d6), X(0x7d24881b), X(0x1b161479), X(0x7d19eebf),
92 X(0x1b4732ef), X(0x7d0f4218), X(0x1b784d30), X(0x7d048228),
93 X(0x1ba96335), X(0x7cf9aef0), X(0x1bda74f6), X(0x7ceec873),
94 X(0x1c0b826a), X(0x7ce3ceb2), X(0x1c3c8b8c), X(0x7cd8c1ae),
95 X(0x1c6d9053), X(0x7ccda169), X(0x1c9e90b8), X(0x7cc26de5),
96 X(0x1ccf8cb3), X(0x7cb72724), X(0x1d00843d), X(0x7cabcd28),
97 X(0x1d31774d), X(0x7ca05ff1), X(0x1d6265dd), X(0x7c94df83),
98 X(0x1d934fe5), X(0x7c894bde), X(0x1dc4355e), X(0x7c7da505),
99 X(0x1df5163f), X(0x7c71eaf9), X(0x1e25f282), X(0x7c661dbc),
100 X(0x1e56ca1e), X(0x7c5a3d50), X(0x1e879d0d), X(0x7c4e49b7),
101 X(0x1eb86b46), X(0x7c4242f2), X(0x1ee934c3), X(0x7c362904),
102 X(0x1f19f97b), X(0x7c29fbee), X(0x1f4ab968), X(0x7c1dbbb3),
103 X(0x1f7b7481), X(0x7c116853), X(0x1fac2abf), X(0x7c0501d2),
104 X(0x1fdcdc1b), X(0x7bf88830), X(0x200d888d), X(0x7bebfb70),
105 X(0x203e300d), X(0x7bdf5b94), X(0x206ed295), X(0x7bd2a89e),
106 X(0x209f701c), X(0x7bc5e290), X(0x20d0089c), X(0x7bb9096b),
107 X(0x21009c0c), X(0x7bac1d31), X(0x21312a65), X(0x7b9f1de6),
108 X(0x2161b3a0), X(0x7b920b89), X(0x219237b5), X(0x7b84e61f),
109 X(0x21c2b69c), X(0x7b77ada8), X(0x21f3304f), X(0x7b6a6227),
110 X(0x2223a4c5), X(0x7b5d039e), X(0x225413f8), X(0x7b4f920e),
111 X(0x22847de0), X(0x7b420d7a), X(0x22b4e274), X(0x7b3475e5),
112 X(0x22e541af), X(0x7b26cb4f), X(0x23159b88), X(0x7b190dbc),
113 X(0x2345eff8), X(0x7b0b3d2c), X(0x23763ef7), X(0x7afd59a4),
114 X(0x23a6887f), X(0x7aef6323), X(0x23d6cc87), X(0x7ae159ae),
115 X(0x24070b08), X(0x7ad33d45), X(0x243743fa), X(0x7ac50dec),
116 X(0x24677758), X(0x7ab6cba4), X(0x2497a517), X(0x7aa8766f),
117 X(0x24c7cd33), X(0x7a9a0e50), X(0x24f7efa2), X(0x7a8b9348),
118 X(0x25280c5e), X(0x7a7d055b), X(0x2558235f), X(0x7a6e648a),
119 X(0x2588349d), X(0x7a5fb0d8), X(0x25b84012), X(0x7a50ea47),
120 X(0x25e845b6), X(0x7a4210d8), X(0x26184581), X(0x7a332490),
121 X(0x26483f6c), X(0x7a24256f), X(0x26783370), X(0x7a151378),
122 X(0x26a82186), X(0x7a05eead), X(0x26d809a5), X(0x79f6b711),
123 X(0x2707ebc7), X(0x79e76ca7), X(0x2737c7e3), X(0x79d80f6f),
124 X(0x27679df4), X(0x79c89f6e), X(0x27976df1), X(0x79b91ca4),
125 X(0x27c737d3), X(0x79a98715), X(0x27f6fb92), X(0x7999dec4),
126 X(0x2826b928), X(0x798a23b1), X(0x2856708d), X(0x797a55e0),
127 X(0x288621b9), X(0x796a7554), X(0x28b5cca5), X(0x795a820e),
128 X(0x28e5714b), X(0x794a7c12), X(0x29150fa1), X(0x793a6361),
129 X(0x2944a7a2), X(0x792a37fe), X(0x29743946), X(0x7919f9ec),
130 X(0x29a3c485), X(0x7909a92d), X(0x29d34958), X(0x78f945c3),
131 X(0x2a02c7b8), X(0x78e8cfb2), X(0x2a323f9e), X(0x78d846fb),
132 X(0x2a61b101), X(0x78c7aba2), X(0x2a911bdc), X(0x78b6fda8),
133 X(0x2ac08026), X(0x78a63d11), X(0x2aefddd8), X(0x789569df),
134 X(0x2b1f34eb), X(0x78848414), X(0x2b4e8558), X(0x78738bb3),
135 X(0x2b7dcf17), X(0x786280bf), X(0x2bad1221), X(0x7851633b),
136 X(0x2bdc4e6f), X(0x78403329), X(0x2c0b83fa), X(0x782ef08b),
137 X(0x2c3ab2b9), X(0x781d9b65), X(0x2c69daa6), X(0x780c33b8),
138 X(0x2c98fbba), X(0x77fab989), X(0x2cc815ee), X(0x77e92cd9),
139 X(0x2cf72939), X(0x77d78daa), X(0x2d263596), X(0x77c5dc01),
140 X(0x2d553afc), X(0x77b417df), X(0x2d843964), X(0x77a24148),
141 X(0x2db330c7), X(0x7790583e), X(0x2de2211e), X(0x777e5cc3),
142 X(0x2e110a62), X(0x776c4edb), X(0x2e3fec8b), X(0x775a2e89),
143 X(0x2e6ec792), X(0x7747fbce), X(0x2e9d9b70), X(0x7735b6af),
144 X(0x2ecc681e), X(0x77235f2d), X(0x2efb2d95), X(0x7710f54c),
145 X(0x2f29ebcc), X(0x76fe790e), X(0x2f58a2be), X(0x76ebea77),
146 X(0x2f875262), X(0x76d94989), X(0x2fb5fab2), X(0x76c69647),
147 X(0x2fe49ba7), X(0x76b3d0b4), X(0x30133539), X(0x76a0f8d2),
148 X(0x3041c761), X(0x768e0ea6), X(0x30705217), X(0x767b1231),
149 X(0x309ed556), X(0x76680376), X(0x30cd5115), X(0x7654e279),
150 X(0x30fbc54d), X(0x7641af3d), X(0x312a31f8), X(0x762e69c4),
151 X(0x3158970e), X(0x761b1211), X(0x3186f487), X(0x7607a828),
152 X(0x31b54a5e), X(0x75f42c0b), X(0x31e39889), X(0x75e09dbd),
153 X(0x3211df04), X(0x75ccfd42), X(0x32401dc6), X(0x75b94a9c),
154 X(0x326e54c7), X(0x75a585cf), X(0x329c8402), X(0x7591aedd),
155 X(0x32caab6f), X(0x757dc5ca), X(0x32f8cb07), X(0x7569ca99),
156 X(0x3326e2c3), X(0x7555bd4c), X(0x3354f29b), X(0x75419de7),
157 X(0x3382fa88), X(0x752d6c6c), X(0x33b0fa84), X(0x751928e0),
158 X(0x33def287), X(0x7504d345), X(0x340ce28b), X(0x74f06b9e),
159 X(0x343aca87), X(0x74dbf1ef), X(0x3468aa76), X(0x74c7663a),
160 X(0x34968250), X(0x74b2c884), X(0x34c4520d), X(0x749e18cd),
161 X(0x34f219a8), X(0x7489571c), X(0x351fd918), X(0x74748371),
162 X(0x354d9057), X(0x745f9dd1), X(0x357b3f5d), X(0x744aa63f),
163 X(0x35a8e625), X(0x74359cbd), X(0x35d684a6), X(0x74208150),
164 X(0x36041ad9), X(0x740b53fb), X(0x3631a8b8), X(0x73f614c0),
165 X(0x365f2e3b), X(0x73e0c3a3), X(0x368cab5c), X(0x73cb60a8),
166 X(0x36ba2014), X(0x73b5ebd1), X(0x36e78c5b), X(0x73a06522),
167 X(0x3714f02a), X(0x738acc9e), X(0x37424b7b), X(0x73752249),
168 X(0x376f9e46), X(0x735f6626), X(0x379ce885), X(0x73499838),
169 X(0x37ca2a30), X(0x7333b883), X(0x37f76341), X(0x731dc70a),
170 X(0x382493b0), X(0x7307c3d0), X(0x3851bb77), X(0x72f1aed9),
171 X(0x387eda8e), X(0x72db8828), X(0x38abf0ef), X(0x72c54fc1),
172 X(0x38d8fe93), X(0x72af05a7), X(0x39060373), X(0x7298a9dd),
173 X(0x3932ff87), X(0x72823c67), X(0x395ff2c9), X(0x726bbd48),
174 X(0x398cdd32), X(0x72552c85), X(0x39b9bebc), X(0x723e8a20),
175 X(0x39e6975e), X(0x7227d61c), X(0x3a136712), X(0x7211107e),
176 X(0x3a402dd2), X(0x71fa3949), X(0x3a6ceb96), X(0x71e35080),
177 X(0x3a99a057), X(0x71cc5626), X(0x3ac64c0f), X(0x71b54a41),
178 X(0x3af2eeb7), X(0x719e2cd2), X(0x3b1f8848), X(0x7186fdde),
179 X(0x3b4c18ba), X(0x716fbd68), X(0x3b78a007), X(0x71586b74),
180 X(0x3ba51e29), X(0x71410805), X(0x3bd19318), X(0x7129931f),
181 X(0x3bfdfecd), X(0x71120cc5), X(0x3c2a6142), X(0x70fa74fc),
182 X(0x3c56ba70), X(0x70e2cbc6), X(0x3c830a50), X(0x70cb1128),
183 X(0x3caf50da), X(0x70b34525), X(0x3cdb8e09), X(0x709b67c0),
184 X(0x3d07c1d6), X(0x708378ff), X(0x3d33ec39), X(0x706b78e3),
185 X(0x3d600d2c), X(0x70536771), X(0x3d8c24a8), X(0x703b44ad),
186 X(0x3db832a6), X(0x7023109a), X(0x3de4371f), X(0x700acb3c),
187 X(0x3e10320d), X(0x6ff27497), X(0x3e3c2369), X(0x6fda0cae),
188 X(0x3e680b2c), X(0x6fc19385), X(0x3e93e950), X(0x6fa90921),
189 X(0x3ebfbdcd), X(0x6f906d84), X(0x3eeb889c), X(0x6f77c0b3),
190 X(0x3f1749b8), X(0x6f5f02b2), X(0x3f430119), X(0x6f463383),
191 X(0x3f6eaeb8), X(0x6f2d532c), X(0x3f9a5290), X(0x6f1461b0),
192 X(0x3fc5ec98), X(0x6efb5f12), X(0x3ff17cca), X(0x6ee24b57),
193 X(0x401d0321), X(0x6ec92683), X(0x40487f94), X(0x6eaff099),
194 X(0x4073f21d), X(0x6e96a99d), X(0x409f5ab6), X(0x6e7d5193),
195 X(0x40cab958), X(0x6e63e87f), X(0x40f60dfb), X(0x6e4a6e66),
196 X(0x4121589b), X(0x6e30e34a), X(0x414c992f), X(0x6e174730),
197 X(0x4177cfb1), X(0x6dfd9a1c), X(0x41a2fc1a), X(0x6de3dc11),
198 X(0x41ce1e65), X(0x6dca0d14), X(0x41f93689), X(0x6db02d29),
199 X(0x42244481), X(0x6d963c54), X(0x424f4845), X(0x6d7c3a98),
200 X(0x427a41d0), X(0x6d6227fa), X(0x42a5311b), X(0x6d48047e),
201 X(0x42d0161e), X(0x6d2dd027), X(0x42faf0d4), X(0x6d138afb),
202 X(0x4325c135), X(0x6cf934fc), X(0x4350873c), X(0x6cdece2f),
203 X(0x437b42e1), X(0x6cc45698), X(0x43a5f41e), X(0x6ca9ce3b),
204 X(0x43d09aed), X(0x6c8f351c), X(0x43fb3746), X(0x6c748b3f),
205 X(0x4425c923), X(0x6c59d0a9), X(0x4450507e), X(0x6c3f055d),
206 X(0x447acd50), X(0x6c242960), X(0x44a53f93), X(0x6c093cb6),
207 X(0x44cfa740), X(0x6bee3f62), X(0x44fa0450), X(0x6bd3316a),
208 X(0x452456bd), X(0x6bb812d1), X(0x454e9e80), X(0x6b9ce39b),
209 X(0x4578db93), X(0x6b81a3cd), X(0x45a30df0), X(0x6b66536b),
210 X(0x45cd358f), X(0x6b4af279), X(0x45f7526b), X(0x6b2f80fb),
211 X(0x4621647d), X(0x6b13fef5), X(0x464b6bbe), X(0x6af86c6c),
212 X(0x46756828), X(0x6adcc964), X(0x469f59b4), X(0x6ac115e2),
213 X(0x46c9405c), X(0x6aa551e9), X(0x46f31c1a), X(0x6a897d7d),
214 X(0x471cece7), X(0x6a6d98a4), X(0x4746b2bc), X(0x6a51a361),
215 X(0x47706d93), X(0x6a359db9), X(0x479a1d67), X(0x6a1987b0),
216 X(0x47c3c22f), X(0x69fd614a), X(0x47ed5be6), X(0x69e12a8c),
217 X(0x4816ea86), X(0x69c4e37a), X(0x48406e08), X(0x69a88c19),
218 X(0x4869e665), X(0x698c246c), X(0x48935397), X(0x696fac78),
219 X(0x48bcb599), X(0x69532442), X(0x48e60c62), X(0x69368bce),
220 X(0x490f57ee), X(0x6919e320), X(0x49389836), X(0x68fd2a3d),
221 X(0x4961cd33), X(0x68e06129), X(0x498af6df), X(0x68c387e9),
222 X(0x49b41533), X(0x68a69e81), X(0x49dd282a), X(0x6889a4f6),
223 X(0x4a062fbd), X(0x686c9b4b), X(0x4a2f2be6), X(0x684f8186),
224 X(0x4a581c9e), X(0x683257ab), X(0x4a8101de), X(0x68151dbe),
225 X(0x4aa9dba2), X(0x67f7d3c5), X(0x4ad2a9e2), X(0x67da79c3),
226 X(0x4afb6c98), X(0x67bd0fbd), X(0x4b2423be), X(0x679f95b7),
227 X(0x4b4ccf4d), X(0x67820bb7), X(0x4b756f40), X(0x676471c0),
228 X(0x4b9e0390), X(0x6746c7d8), X(0x4bc68c36), X(0x67290e02),
229 X(0x4bef092d), X(0x670b4444), X(0x4c177a6e), X(0x66ed6aa1),
230 X(0x4c3fdff4), X(0x66cf8120), X(0x4c6839b7), X(0x66b187c3),
231 X(0x4c9087b1), X(0x66937e91), X(0x4cb8c9dd), X(0x6675658c),
232 X(0x4ce10034), X(0x66573cbb), X(0x4d092ab0), X(0x66390422),
233 X(0x4d31494b), X(0x661abbc5), X(0x4d595bfe), X(0x65fc63a9),
234 X(0x4d8162c4), X(0x65ddfbd3), X(0x4da95d96), X(0x65bf8447),
235 X(0x4dd14c6e), X(0x65a0fd0b), X(0x4df92f46), X(0x65826622),
236 X(0x4e210617), X(0x6563bf92), X(0x4e48d0dd), X(0x6545095f),
237 X(0x4e708f8f), X(0x6526438f), X(0x4e984229), X(0x65076e25),
238 X(0x4ebfe8a5), X(0x64e88926), X(0x4ee782fb), X(0x64c99498),
239 X(0x4f0f1126), X(0x64aa907f), X(0x4f369320), X(0x648b7ce0),
240 X(0x4f5e08e3), X(0x646c59bf), X(0x4f857269), X(0x644d2722),
241 X(0x4faccfab), X(0x642de50d), X(0x4fd420a4), X(0x640e9386),
242 X(0x4ffb654d), X(0x63ef3290), X(0x50229da1), X(0x63cfc231),
243 X(0x5049c999), X(0x63b0426d), X(0x5070e92f), X(0x6390b34a),
244 X(0x5097fc5e), X(0x637114cc), X(0x50bf031f), X(0x635166f9),
245 X(0x50e5fd6d), X(0x6331a9d4), X(0x510ceb40), X(0x6311dd64),
246 X(0x5133cc94), X(0x62f201ac), X(0x515aa162), X(0x62d216b3),
247 X(0x518169a5), X(0x62b21c7b), X(0x51a82555), X(0x6292130c),
248 X(0x51ced46e), X(0x6271fa69), X(0x51f576ea), X(0x6251d298),
249 X(0x521c0cc2), X(0x62319b9d), X(0x524295f0), X(0x6211557e),
250 X(0x5269126e), X(0x61f1003f), X(0x528f8238), X(0x61d09be5),
251 X(0x52b5e546), X(0x61b02876), X(0x52dc3b92), X(0x618fa5f7),
252 X(0x53028518), X(0x616f146c), X(0x5328c1d0), X(0x614e73da),
253 X(0x534ef1b5), X(0x612dc447), X(0x537514c2), X(0x610d05b7),
254 X(0x539b2af0), X(0x60ec3830), X(0x53c13439), X(0x60cb5bb7),
255 X(0x53e73097), X(0x60aa7050), X(0x540d2005), X(0x60897601),
256 X(0x5433027d), X(0x60686ccf), X(0x5458d7f9), X(0x604754bf),
257 X(0x547ea073), X(0x60262dd6), X(0x54a45be6), X(0x6004f819),
258 X(0x54ca0a4b), X(0x5fe3b38d), X(0x54efab9c), X(0x5fc26038),
259 X(0x55153fd4), X(0x5fa0fe1f), X(0x553ac6ee), X(0x5f7f8d46),
260 X(0x556040e2), X(0x5f5e0db3), X(0x5585adad), X(0x5f3c7f6b),
261 X(0x55ab0d46), X(0x5f1ae274), X(0x55d05faa), X(0x5ef936d1),
262 X(0x55f5a4d2), X(0x5ed77c8a), X(0x561adcb9), X(0x5eb5b3a2),
263 X(0x56400758), X(0x5e93dc1f), X(0x566524aa), X(0x5e71f606),
264 X(0x568a34a9), X(0x5e50015d), X(0x56af3750), X(0x5e2dfe29),
265 X(0x56d42c99), X(0x5e0bec6e), X(0x56f9147e), X(0x5de9cc33),
266 X(0x571deefa), X(0x5dc79d7c), X(0x5742bc06), X(0x5da5604f),
267 X(0x57677b9d), X(0x5d8314b1), X(0x578c2dba), X(0x5d60baa7),
268 X(0x57b0d256), X(0x5d3e5237), X(0x57d5696d), X(0x5d1bdb65),
269 X(0x57f9f2f8), X(0x5cf95638), X(0x581e6ef1), X(0x5cd6c2b5),
270 X(0x5842dd54), X(0x5cb420e0), X(0x58673e1b), X(0x5c9170bf),
271 X(0x588b9140), X(0x5c6eb258), X(0x58afd6bd), X(0x5c4be5b0),
272 X(0x58d40e8c), X(0x5c290acc), X(0x58f838a9), X(0x5c0621b2),
273 X(0x591c550e), X(0x5be32a67), X(0x594063b5), X(0x5bc024f0),
274 X(0x59646498), X(0x5b9d1154), X(0x598857b2), X(0x5b79ef96),
275 X(0x59ac3cfd), X(0x5b56bfbd), X(0x59d01475), X(0x5b3381ce),
276 X(0x59f3de12), X(0x5b1035cf), X(0x5a1799d1), X(0x5aecdbc5),
277 X(0x5a3b47ab), X(0x5ac973b5), X(0x5a5ee79a), X(0x5aa5fda5),
278 X(0x5a82799a), X(0x5a82799a)
279 };
280
281 /* {sin((2*i+1)*PI/4096), cos((2*i+1)*PI/4096)}, with i = 0 to 511 */
282static LOOKUP_T sincos_lookup1[1024] ICONST_ATTR = {
283 X(0x001921fb), X(0x7ffffd88), X(0x004b65ee), X(0x7fffe9cb),
284 X(0x007da9d4), X(0x7fffc251), X(0x00afeda8), X(0x7fff8719),
285 X(0x00e23160), X(0x7fff3824), X(0x011474f6), X(0x7ffed572),
286 X(0x0146b860), X(0x7ffe5f03), X(0x0178fb99), X(0x7ffdd4d7),
287 X(0x01ab3e97), X(0x7ffd36ee), X(0x01dd8154), X(0x7ffc8549),
288 X(0x020fc3c6), X(0x7ffbbfe6), X(0x024205e8), X(0x7ffae6c7),
289 X(0x027447b0), X(0x7ff9f9ec), X(0x02a68917), X(0x7ff8f954),
290 X(0x02d8ca16), X(0x7ff7e500), X(0x030b0aa4), X(0x7ff6bcf0),
291 X(0x033d4abb), X(0x7ff58125), X(0x036f8a51), X(0x7ff4319d),
292 X(0x03a1c960), X(0x7ff2ce5b), X(0x03d407df), X(0x7ff1575d),
293 X(0x040645c7), X(0x7fefcca4), X(0x04388310), X(0x7fee2e30),
294 X(0x046abfb3), X(0x7fec7c02), X(0x049cfba7), X(0x7feab61a),
295 X(0x04cf36e5), X(0x7fe8dc78), X(0x05017165), X(0x7fe6ef1c),
296 X(0x0533ab20), X(0x7fe4ee06), X(0x0565e40d), X(0x7fe2d938),
297 X(0x05981c26), X(0x7fe0b0b1), X(0x05ca5361), X(0x7fde7471),
298 X(0x05fc89b8), X(0x7fdc247a), X(0x062ebf22), X(0x7fd9c0ca),
299 X(0x0660f398), X(0x7fd74964), X(0x06932713), X(0x7fd4be46),
300 X(0x06c5598a), X(0x7fd21f72), X(0x06f78af6), X(0x7fcf6ce8),
301 X(0x0729bb4e), X(0x7fcca6a7), X(0x075bea8c), X(0x7fc9ccb2),
302 X(0x078e18a7), X(0x7fc6df08), X(0x07c04598), X(0x7fc3dda9),
303 X(0x07f27157), X(0x7fc0c896), X(0x08249bdd), X(0x7fbd9fd0),
304 X(0x0856c520), X(0x7fba6357), X(0x0888ed1b), X(0x7fb7132b),
305 X(0x08bb13c5), X(0x7fb3af4e), X(0x08ed3916), X(0x7fb037bf),
306 X(0x091f5d06), X(0x7facac7f), X(0x09517f8f), X(0x7fa90d8e),
307 X(0x0983a0a7), X(0x7fa55aee), X(0x09b5c048), X(0x7fa1949e),
308 X(0x09e7de6a), X(0x7f9dbaa0), X(0x0a19fb04), X(0x7f99ccf4),
309 X(0x0a4c1610), X(0x7f95cb9a), X(0x0a7e2f85), X(0x7f91b694),
310 X(0x0ab0475c), X(0x7f8d8de1), X(0x0ae25d8d), X(0x7f895182),
311 X(0x0b147211), X(0x7f850179), X(0x0b4684df), X(0x7f809dc5),
312 X(0x0b7895f0), X(0x7f7c2668), X(0x0baaa53b), X(0x7f779b62),
313 X(0x0bdcb2bb), X(0x7f72fcb4), X(0x0c0ebe66), X(0x7f6e4a5e),
314 X(0x0c40c835), X(0x7f698461), X(0x0c72d020), X(0x7f64aabf),
315 X(0x0ca4d620), X(0x7f5fbd77), X(0x0cd6da2d), X(0x7f5abc8a),
316 X(0x0d08dc3f), X(0x7f55a7fa), X(0x0d3adc4e), X(0x7f507fc7),
317 X(0x0d6cda53), X(0x7f4b43f2), X(0x0d9ed646), X(0x7f45f47b),
318 X(0x0dd0d01f), X(0x7f409164), X(0x0e02c7d7), X(0x7f3b1aad),
319 X(0x0e34bd66), X(0x7f359057), X(0x0e66b0c3), X(0x7f2ff263),
320 X(0x0e98a1e9), X(0x7f2a40d2), X(0x0eca90ce), X(0x7f247ba5),
321 X(0x0efc7d6b), X(0x7f1ea2dc), X(0x0f2e67b8), X(0x7f18b679),
322 X(0x0f604faf), X(0x7f12b67c), X(0x0f923546), X(0x7f0ca2e7),
323 X(0x0fc41876), X(0x7f067bba), X(0x0ff5f938), X(0x7f0040f6),
324 X(0x1027d784), X(0x7ef9f29d), X(0x1059b352), X(0x7ef390ae),
325 X(0x108b8c9b), X(0x7eed1b2c), X(0x10bd6356), X(0x7ee69217),
326 X(0x10ef377d), X(0x7edff570), X(0x11210907), X(0x7ed94538),
327 X(0x1152d7ed), X(0x7ed28171), X(0x1184a427), X(0x7ecbaa1a),
328 X(0x11b66dad), X(0x7ec4bf36), X(0x11e83478), X(0x7ebdc0c6),
329 X(0x1219f880), X(0x7eb6aeca), X(0x124bb9be), X(0x7eaf8943),
330 X(0x127d7829), X(0x7ea85033), X(0x12af33ba), X(0x7ea1039b),
331 X(0x12e0ec6a), X(0x7e99a37c), X(0x1312a230), X(0x7e922fd6),
332 X(0x13445505), X(0x7e8aa8ac), X(0x137604e2), X(0x7e830dff),
333 X(0x13a7b1bf), X(0x7e7b5fce), X(0x13d95b93), X(0x7e739e1d),
334 X(0x140b0258), X(0x7e6bc8eb), X(0x143ca605), X(0x7e63e03b),
335 X(0x146e4694), X(0x7e5be40c), X(0x149fe3fc), X(0x7e53d462),
336 X(0x14d17e36), X(0x7e4bb13c), X(0x1503153a), X(0x7e437a9c),
337 X(0x1534a901), X(0x7e3b3083), X(0x15663982), X(0x7e32d2f4),
338 X(0x1597c6b7), X(0x7e2a61ed), X(0x15c95097), X(0x7e21dd73),
339 X(0x15fad71b), X(0x7e194584), X(0x162c5a3b), X(0x7e109a24),
340 X(0x165dd9f0), X(0x7e07db52), X(0x168f5632), X(0x7dff0911),
341 X(0x16c0cef9), X(0x7df62362), X(0x16f2443e), X(0x7ded2a47),
342 X(0x1723b5f9), X(0x7de41dc0), X(0x17552422), X(0x7ddafdce),
343 X(0x17868eb3), X(0x7dd1ca75), X(0x17b7f5a3), X(0x7dc883b4),
344 X(0x17e958ea), X(0x7dbf298d), X(0x181ab881), X(0x7db5bc02),
345 X(0x184c1461), X(0x7dac3b15), X(0x187d6c82), X(0x7da2a6c6),
346 X(0x18aec0db), X(0x7d98ff17), X(0x18e01167), X(0x7d8f4409),
347 X(0x19115e1c), X(0x7d85759f), X(0x1942a6f3), X(0x7d7b93da),
348 X(0x1973ebe6), X(0x7d719eba), X(0x19a52ceb), X(0x7d679642),
349 X(0x19d669fc), X(0x7d5d7a74), X(0x1a07a311), X(0x7d534b50),
350 X(0x1a38d823), X(0x7d4908d9), X(0x1a6a0929), X(0x7d3eb30f),
351 X(0x1a9b361d), X(0x7d3449f5), X(0x1acc5ef6), X(0x7d29cd8c),
352 X(0x1afd83ad), X(0x7d1f3dd6), X(0x1b2ea43a), X(0x7d149ad5),
353 X(0x1b5fc097), X(0x7d09e489), X(0x1b90d8bb), X(0x7cff1af5),
354 X(0x1bc1ec9e), X(0x7cf43e1a), X(0x1bf2fc3a), X(0x7ce94dfb),
355 X(0x1c240786), X(0x7cde4a98), X(0x1c550e7c), X(0x7cd333f3),
356 X(0x1c861113), X(0x7cc80a0f), X(0x1cb70f43), X(0x7cbcccec),
357 X(0x1ce80906), X(0x7cb17c8d), X(0x1d18fe54), X(0x7ca618f3),
358 X(0x1d49ef26), X(0x7c9aa221), X(0x1d7adb73), X(0x7c8f1817),
359 X(0x1dabc334), X(0x7c837ad8), X(0x1ddca662), X(0x7c77ca65),
360 X(0x1e0d84f5), X(0x7c6c06c0), X(0x1e3e5ee5), X(0x7c602fec),
361 X(0x1e6f342c), X(0x7c5445e9), X(0x1ea004c1), X(0x7c4848ba),
362 X(0x1ed0d09d), X(0x7c3c3860), X(0x1f0197b8), X(0x7c3014de),
363 X(0x1f325a0b), X(0x7c23de35), X(0x1f63178f), X(0x7c179467),
364 X(0x1f93d03c), X(0x7c0b3777), X(0x1fc4840a), X(0x7bfec765),
365 X(0x1ff532f2), X(0x7bf24434), X(0x2025dcec), X(0x7be5ade6),
366 X(0x205681f1), X(0x7bd9047c), X(0x208721f9), X(0x7bcc47fa),
367 X(0x20b7bcfe), X(0x7bbf7860), X(0x20e852f6), X(0x7bb295b0),
368 X(0x2118e3dc), X(0x7ba59fee), X(0x21496fa7), X(0x7b989719),
369 X(0x2179f64f), X(0x7b8b7b36), X(0x21aa77cf), X(0x7b7e4c45),
370 X(0x21daf41d), X(0x7b710a49), X(0x220b6b32), X(0x7b63b543),
371 X(0x223bdd08), X(0x7b564d36), X(0x226c4996), X(0x7b48d225),
372 X(0x229cb0d5), X(0x7b3b4410), X(0x22cd12bd), X(0x7b2da2fa),
373 X(0x22fd6f48), X(0x7b1feee5), X(0x232dc66d), X(0x7b1227d3),
374 X(0x235e1826), X(0x7b044dc7), X(0x238e646a), X(0x7af660c2),
375 X(0x23beab33), X(0x7ae860c7), X(0x23eeec78), X(0x7ada4dd8),
376 X(0x241f2833), X(0x7acc27f7), X(0x244f5e5c), X(0x7abdef25),
377 X(0x247f8eec), X(0x7aafa367), X(0x24afb9da), X(0x7aa144bc),
378 X(0x24dfdf20), X(0x7a92d329), X(0x250ffeb7), X(0x7a844eae),
379 X(0x25401896), X(0x7a75b74f), X(0x25702cb7), X(0x7a670d0d),
380 X(0x25a03b11), X(0x7a584feb), X(0x25d0439f), X(0x7a497feb),
381 X(0x26004657), X(0x7a3a9d0f), X(0x26304333), X(0x7a2ba75a),
382 X(0x26603a2c), X(0x7a1c9ece), X(0x26902b39), X(0x7a0d836d),
383 X(0x26c01655), X(0x79fe5539), X(0x26effb76), X(0x79ef1436),
384 X(0x271fda96), X(0x79dfc064), X(0x274fb3ae), X(0x79d059c8),
385 X(0x277f86b5), X(0x79c0e062), X(0x27af53a6), X(0x79b15435),
386 X(0x27df1a77), X(0x79a1b545), X(0x280edb23), X(0x79920392),
387 X(0x283e95a1), X(0x79823f20), X(0x286e49ea), X(0x797267f2),
388 X(0x289df7f8), X(0x79627e08), X(0x28cd9fc1), X(0x79528167),
389 X(0x28fd4140), X(0x79427210), X(0x292cdc6d), X(0x79325006),
390 X(0x295c7140), X(0x79221b4b), X(0x298bffb2), X(0x7911d3e2),
391 X(0x29bb87bc), X(0x790179cd), X(0x29eb0957), X(0x78f10d0f),
392 X(0x2a1a847b), X(0x78e08dab), X(0x2a49f920), X(0x78cffba3),
393 X(0x2a796740), X(0x78bf56f9), X(0x2aa8ced3), X(0x78ae9fb0),
394 X(0x2ad82fd2), X(0x789dd5cb), X(0x2b078a36), X(0x788cf94c),
395 X(0x2b36ddf7), X(0x787c0a36), X(0x2b662b0e), X(0x786b088c),
396 X(0x2b957173), X(0x7859f44f), X(0x2bc4b120), X(0x7848cd83),
397 X(0x2bf3ea0d), X(0x7837942b), X(0x2c231c33), X(0x78264849),
398 X(0x2c52478a), X(0x7814e9df), X(0x2c816c0c), X(0x780378f1),
399 X(0x2cb089b1), X(0x77f1f581), X(0x2cdfa071), X(0x77e05f91),
400 X(0x2d0eb046), X(0x77ceb725), X(0x2d3db928), X(0x77bcfc3f),
401 X(0x2d6cbb10), X(0x77ab2ee2), X(0x2d9bb5f6), X(0x77994f11),
402 X(0x2dcaa9d5), X(0x77875cce), X(0x2df996a3), X(0x7775581d),
403 X(0x2e287c5a), X(0x776340ff), X(0x2e575af3), X(0x77511778),
404 X(0x2e863267), X(0x773edb8b), X(0x2eb502ae), X(0x772c8d3a),
405 X(0x2ee3cbc1), X(0x771a2c88), X(0x2f128d99), X(0x7707b979),
406 X(0x2f41482e), X(0x76f5340e), X(0x2f6ffb7a), X(0x76e29c4b),
407 X(0x2f9ea775), X(0x76cff232), X(0x2fcd4c19), X(0x76bd35c7),
408 X(0x2ffbe95d), X(0x76aa670d), X(0x302a7f3a), X(0x76978605),
409 X(0x30590dab), X(0x768492b4), X(0x308794a6), X(0x76718d1c),
410 X(0x30b61426), X(0x765e7540), X(0x30e48c22), X(0x764b4b23),
411 X(0x3112fc95), X(0x76380ec8), X(0x31416576), X(0x7624c031),
412 X(0x316fc6be), X(0x76115f63), X(0x319e2067), X(0x75fdec60),
413 X(0x31cc7269), X(0x75ea672a), X(0x31fabcbd), X(0x75d6cfc5),
414 X(0x3228ff5c), X(0x75c32634), X(0x32573a3f), X(0x75af6a7b),
415 X(0x32856d5e), X(0x759b9c9b), X(0x32b398b3), X(0x7587bc98),
416 X(0x32e1bc36), X(0x7573ca75), X(0x330fd7e1), X(0x755fc635),
417 X(0x333debab), X(0x754bafdc), X(0x336bf78f), X(0x7537876c),
418 X(0x3399fb85), X(0x75234ce8), X(0x33c7f785), X(0x750f0054),
419 X(0x33f5eb89), X(0x74faa1b3), X(0x3423d78a), X(0x74e63108),
420 X(0x3451bb81), X(0x74d1ae55), X(0x347f9766), X(0x74bd199f),
421 X(0x34ad6b32), X(0x74a872e8), X(0x34db36df), X(0x7493ba34),
422 X(0x3508fa66), X(0x747eef85), X(0x3536b5be), X(0x746a12df),
423 X(0x356468e2), X(0x74552446), X(0x359213c9), X(0x744023bc),
424 X(0x35bfb66e), X(0x742b1144), X(0x35ed50c9), X(0x7415ece2),
425 X(0x361ae2d3), X(0x7400b69a), X(0x36486c86), X(0x73eb6e6e),
426 X(0x3675edd9), X(0x73d61461), X(0x36a366c6), X(0x73c0a878),
427 X(0x36d0d746), X(0x73ab2ab4), X(0x36fe3f52), X(0x73959b1b),
428 X(0x372b9ee3), X(0x737ff9ae), X(0x3758f5f2), X(0x736a4671),
429 X(0x37864477), X(0x73548168), X(0x37b38a6d), X(0x733eaa96),
430 X(0x37e0c7cc), X(0x7328c1ff), X(0x380dfc8d), X(0x7312c7a5),
431 X(0x383b28a9), X(0x72fcbb8c), X(0x38684c19), X(0x72e69db7),
432 X(0x389566d6), X(0x72d06e2b), X(0x38c278d9), X(0x72ba2cea),
433 X(0x38ef821c), X(0x72a3d9f7), X(0x391c8297), X(0x728d7557),
434 X(0x39497a43), X(0x7276ff0d), X(0x39766919), X(0x7260771b),
435 X(0x39a34f13), X(0x7249dd86), X(0x39d02c2a), X(0x72333251),
436 X(0x39fd0056), X(0x721c7580), X(0x3a29cb91), X(0x7205a716),
437 X(0x3a568dd4), X(0x71eec716), X(0x3a834717), X(0x71d7d585),
438 X(0x3aaff755), X(0x71c0d265), X(0x3adc9e86), X(0x71a9bdba),
439 X(0x3b093ca3), X(0x71929789), X(0x3b35d1a5), X(0x717b5fd3),
440 X(0x3b625d86), X(0x7164169d), X(0x3b8ee03e), X(0x714cbbeb),
441 X(0x3bbb59c7), X(0x71354fc0), X(0x3be7ca1a), X(0x711dd220),
442 X(0x3c143130), X(0x7106430e), X(0x3c408f03), X(0x70eea28e),
443 X(0x3c6ce38a), X(0x70d6f0a4), X(0x3c992ec0), X(0x70bf2d53),
444 X(0x3cc5709e), X(0x70a7589f), X(0x3cf1a91c), X(0x708f728b),
445 X(0x3d1dd835), X(0x70777b1c), X(0x3d49fde1), X(0x705f7255),
446 X(0x3d761a19), X(0x70475839), X(0x3da22cd7), X(0x702f2ccd),
447 X(0x3dce3614), X(0x7016f014), X(0x3dfa35c8), X(0x6ffea212),
448 X(0x3e262bee), X(0x6fe642ca), X(0x3e52187f), X(0x6fcdd241),
449 X(0x3e7dfb73), X(0x6fb5507a), X(0x3ea9d4c3), X(0x6f9cbd79),
450 X(0x3ed5a46b), X(0x6f841942), X(0x3f016a61), X(0x6f6b63d8),
451 X(0x3f2d26a0), X(0x6f529d40), X(0x3f58d921), X(0x6f39c57d),
452 X(0x3f8481dd), X(0x6f20dc92), X(0x3fb020ce), X(0x6f07e285),
453 X(0x3fdbb5ec), X(0x6eeed758), X(0x40074132), X(0x6ed5bb10),
454 X(0x4032c297), X(0x6ebc8db0), X(0x405e3a16), X(0x6ea34f3d),
455 X(0x4089a7a8), X(0x6e89ffb9), X(0x40b50b46), X(0x6e709f2a),
456 X(0x40e064ea), X(0x6e572d93), X(0x410bb48c), X(0x6e3daaf8),
457 X(0x4136fa27), X(0x6e24175c), X(0x416235b2), X(0x6e0a72c5),
458 X(0x418d6729), X(0x6df0bd35), X(0x41b88e84), X(0x6dd6f6b1),
459 X(0x41e3abbc), X(0x6dbd1f3c), X(0x420ebecb), X(0x6da336dc),
460 X(0x4239c7aa), X(0x6d893d93), X(0x4264c653), X(0x6d6f3365),
461 X(0x428fbabe), X(0x6d551858), X(0x42baa4e6), X(0x6d3aec6e),
462 X(0x42e584c3), X(0x6d20afac), X(0x43105a50), X(0x6d066215),
463 X(0x433b2585), X(0x6cec03af), X(0x4365e65b), X(0x6cd1947c),
464 X(0x43909ccd), X(0x6cb71482), X(0x43bb48d4), X(0x6c9c83c3),
465 X(0x43e5ea68), X(0x6c81e245), X(0x44108184), X(0x6c67300b),
466 X(0x443b0e21), X(0x6c4c6d1a), X(0x44659039), X(0x6c319975),
467 X(0x449007c4), X(0x6c16b521), X(0x44ba74bd), X(0x6bfbc021),
468 X(0x44e4d71c), X(0x6be0ba7b), X(0x450f2edb), X(0x6bc5a431),
469 X(0x45397bf4), X(0x6baa7d49), X(0x4563be60), X(0x6b8f45c7),
470 X(0x458df619), X(0x6b73fdae), X(0x45b82318), X(0x6b58a503),
471 X(0x45e24556), X(0x6b3d3bcb), X(0x460c5cce), X(0x6b21c208),
472 X(0x46366978), X(0x6b0637c1), X(0x46606b4e), X(0x6aea9cf8),
473 X(0x468a624a), X(0x6acef1b2), X(0x46b44e65), X(0x6ab335f4),
474 X(0x46de2f99), X(0x6a9769c1), X(0x470805df), X(0x6a7b8d1e),
475 X(0x4731d131), X(0x6a5fa010), X(0x475b9188), X(0x6a43a29a),
476 X(0x478546de), X(0x6a2794c1), X(0x47aef12c), X(0x6a0b7689),
477 X(0x47d8906d), X(0x69ef47f6), X(0x48022499), X(0x69d3090e),
478 X(0x482badab), X(0x69b6b9d3), X(0x48552b9b), X(0x699a5a4c),
479 X(0x487e9e64), X(0x697dea7b), X(0x48a805ff), X(0x69616a65),
480 X(0x48d16265), X(0x6944da10), X(0x48fab391), X(0x6928397e),
481 X(0x4923f97b), X(0x690b88b5), X(0x494d341e), X(0x68eec7b9),
482 X(0x49766373), X(0x68d1f68f), X(0x499f8774), X(0x68b5153a),
483 X(0x49c8a01b), X(0x689823bf), X(0x49f1ad61), X(0x687b2224),
484 X(0x4a1aaf3f), X(0x685e106c), X(0x4a43a5b0), X(0x6840ee9b),
485 X(0x4a6c90ad), X(0x6823bcb7), X(0x4a957030), X(0x68067ac3),
486 X(0x4abe4433), X(0x67e928c5), X(0x4ae70caf), X(0x67cbc6c0),
487 X(0x4b0fc99d), X(0x67ae54ba), X(0x4b387af9), X(0x6790d2b6),
488 X(0x4b6120bb), X(0x677340ba), X(0x4b89badd), X(0x67559eca),
489 X(0x4bb24958), X(0x6737ecea), X(0x4bdacc28), X(0x671a2b20),
490 X(0x4c034345), X(0x66fc596f), X(0x4c2baea9), X(0x66de77dc),
491 X(0x4c540e4e), X(0x66c0866d), X(0x4c7c622d), X(0x66a28524),
492 X(0x4ca4aa41), X(0x66847408), X(0x4ccce684), X(0x6666531d),
493 X(0x4cf516ee), X(0x66482267), X(0x4d1d3b7a), X(0x6629e1ec),
494 X(0x4d455422), X(0x660b91af), X(0x4d6d60df), X(0x65ed31b5),
495 X(0x4d9561ac), X(0x65cec204), X(0x4dbd5682), X(0x65b0429f),
496 X(0x4de53f5a), X(0x6591b38c), X(0x4e0d1c30), X(0x657314cf),
497 X(0x4e34ecfc), X(0x6554666d), X(0x4e5cb1b9), X(0x6535a86b),
498 X(0x4e846a60), X(0x6516dacd), X(0x4eac16eb), X(0x64f7fd98),
499 X(0x4ed3b755), X(0x64d910d1), X(0x4efb4b96), X(0x64ba147d),
500 X(0x4f22d3aa), X(0x649b08a0), X(0x4f4a4f89), X(0x647bed3f),
501 X(0x4f71bf2e), X(0x645cc260), X(0x4f992293), X(0x643d8806),
502 X(0x4fc079b1), X(0x641e3e38), X(0x4fe7c483), X(0x63fee4f8),
503 X(0x500f0302), X(0x63df7c4d), X(0x50363529), X(0x63c0043b),
504 X(0x505d5af1), X(0x63a07cc7), X(0x50847454), X(0x6380e5f6),
505 X(0x50ab814d), X(0x63613fcd), X(0x50d281d5), X(0x63418a50),
506 X(0x50f975e6), X(0x6321c585), X(0x51205d7b), X(0x6301f171),
507 X(0x5147388c), X(0x62e20e17), X(0x516e0715), X(0x62c21b7e),
508 X(0x5194c910), X(0x62a219aa), X(0x51bb7e75), X(0x628208a1),
509 X(0x51e22740), X(0x6261e866), X(0x5208c36a), X(0x6241b8ff),
510 X(0x522f52ee), X(0x62217a72), X(0x5255d5c5), X(0x62012cc2),
511 X(0x527c4bea), X(0x61e0cff5), X(0x52a2b556), X(0x61c06410),
512 X(0x52c91204), X(0x619fe918), X(0x52ef61ee), X(0x617f5f12),
513 X(0x5315a50e), X(0x615ec603), X(0x533bdb5d), X(0x613e1df0),
514 X(0x536204d7), X(0x611d66de), X(0x53882175), X(0x60fca0d2),
515 X(0x53ae3131), X(0x60dbcbd1), X(0x53d43406), X(0x60bae7e1),
516 X(0x53fa29ed), X(0x6099f505), X(0x542012e1), X(0x6078f344),
517 X(0x5445eedb), X(0x6057e2a2), X(0x546bbdd7), X(0x6036c325),
518 X(0x54917fce), X(0x601594d1), X(0x54b734ba), X(0x5ff457ad),
519 X(0x54dcdc96), X(0x5fd30bbc), X(0x5502775c), X(0x5fb1b104),
520 X(0x55280505), X(0x5f90478a), X(0x554d858d), X(0x5f6ecf53),
521 X(0x5572f8ed), X(0x5f4d4865), X(0x55985f20), X(0x5f2bb2c5),
522 X(0x55bdb81f), X(0x5f0a0e77), X(0x55e303e6), X(0x5ee85b82),
523 X(0x5608426e), X(0x5ec699e9), X(0x562d73b2), X(0x5ea4c9b3),
524 X(0x565297ab), X(0x5e82eae5), X(0x5677ae54), X(0x5e60fd84),
525 X(0x569cb7a8), X(0x5e3f0194), X(0x56c1b3a1), X(0x5e1cf71c),
526 X(0x56e6a239), X(0x5dfade20), X(0x570b8369), X(0x5dd8b6a7),
527 X(0x5730572e), X(0x5db680b4), X(0x57551d80), X(0x5d943c4e),
528 X(0x5779d65b), X(0x5d71e979), X(0x579e81b8), X(0x5d4f883b),
529 X(0x57c31f92), X(0x5d2d189a), X(0x57e7afe4), X(0x5d0a9a9a),
530 X(0x580c32a7), X(0x5ce80e41), X(0x5830a7d6), X(0x5cc57394),
531 X(0x58550f6c), X(0x5ca2ca99), X(0x58796962), X(0x5c801354),
532 X(0x589db5b3), X(0x5c5d4dcc), X(0x58c1f45b), X(0x5c3a7a05),
533 X(0x58e62552), X(0x5c179806), X(0x590a4893), X(0x5bf4a7d2),
534 X(0x592e5e19), X(0x5bd1a971), X(0x595265df), X(0x5bae9ce7),
535 X(0x59765fde), X(0x5b8b8239), X(0x599a4c12), X(0x5b68596d),
536 X(0x59be2a74), X(0x5b452288), X(0x59e1faff), X(0x5b21dd90),
537 X(0x5a05bdae), X(0x5afe8a8b), X(0x5a29727b), X(0x5adb297d),
538 X(0x5a4d1960), X(0x5ab7ba6c), X(0x5a70b258), X(0x5a943d5e),
539};
540
diff --git a/apps/codecs/lib/Makefile b/apps/codecs/lib/Makefile
index 9f831d5f92..4a33a58f27 100644
--- a/apps/codecs/lib/Makefile
+++ b/apps/codecs/lib/Makefile
@@ -20,11 +20,17 @@ endif
20CFLAGS = $(INCLUDES) $(GCCOPTS) \ 20CFLAGS = $(INCLUDES) $(GCCOPTS) \
21$(TARGET) $(EXTRA_DEFINES) -DMEM=${MEMORYSIZE} -DCODEC 21$(TARGET) $(EXTRA_DEFINES) -DMEM=${MEMORYSIZE} -DCODEC
22 22
23# Sectioned compilation for target
24ifndef SIMVER
25 CFLAGS += -ffunction-sections -fdata-sections
26endif
27
23# This sets up 'SRC' based on the files mentioned in SOURCES 28# This sets up 'SRC' based on the files mentioned in SOURCES
24include $(TOOLSDIR)/makesrc.inc 29include $(TOOLSDIR)/makesrc.inc
25 30
26SOURCES = $(SRC) 31SOURCES = $(SRC)
27OBJS := $(SRC:%.c=$(OBJDIR)/%.o) 32OBJS2 := $(SRC:%.c=$(OBJDIR)/%.o)
33OBJS = $(patsubst %.S, $(OBJDIR)/%.o, $(OBJS2))
28DEPFILE = $(OBJDIR)/dep-codeclib 34DEPFILE = $(OBJDIR)/dep-codeclib
29DIRS = . 35DIRS = .
30 36
diff --git a/apps/codecs/lib/SOURCES b/apps/codecs/lib/SOURCES
index 65a656526a..9c6d4e7ff6 100644
--- a/apps/codecs/lib/SOURCES
+++ b/apps/codecs/lib/SOURCES
@@ -1,5 +1,12 @@
1#if CONFIG_CODEC == SWCODEC /* software codec platforms */ 1#if CONFIG_CODEC == SWCODEC /* software codec platforms */
2codeclib.c 2codeclib.c
3
4
5mdct2.c
6#ifdef CPU_ARM
7mdct_arm.S
8#endif
9
3#elif defined(SIMULATOR) && defined(__APPLE__) 10#elif defined(SIMULATOR) && defined(__APPLE__)
4osx.dummy.c 11osx.dummy.c
5#endif 12#endif
diff --git a/apps/codecs/lib/codeclib.h b/apps/codecs/lib/codeclib.h
index 1d95486c78..87cc926c6b 100644
--- a/apps/codecs/lib/codeclib.h
+++ b/apps/codecs/lib/codeclib.h
@@ -55,6 +55,10 @@ void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, con
55#define abs(x) ((x)>0?(x):-(x)) 55#define abs(x) ((x)>0?(x):-(x))
56#define labs(x) abs(x) 56#define labs(x) abs(x)
57 57
58/*MDCT library functions*/
59
60extern void mdct_backward(int n, int32_t *in, int32_t *out);
61
58/* Various codec helper functions */ 62/* Various codec helper functions */
59 63
60int codec_init(void); 64int codec_init(void);
diff --git a/apps/codecs/libfaad/SOURCES b/apps/codecs/libfaad/SOURCES
index 4c7a34d210..67fd6ad2d5 100644
--- a/apps/codecs/libfaad/SOURCES
+++ b/apps/codecs/libfaad/SOURCES
@@ -1,5 +1,4 @@
1bits.c 1bits.c
2cfft.c
3common.c 2common.c
4decoder.c 3decoder.c
5drc.c 4drc.c
@@ -11,7 +10,6 @@ huffman.c
11ic_predict.c 10ic_predict.c
12is.c 11is.c
13lt_predict.c 12lt_predict.c
14mdct.c
15mp4.c 13mp4.c
16ms.c 14ms.c
17output.c 15output.c
diff --git a/apps/codecs/libfaad/cfft.c b/apps/codecs/libfaad/cfft.c
deleted file mode 100644
index 806dc8f895..0000000000
--- a/apps/codecs/libfaad/cfft.c
+++ /dev/null
@@ -1,1015 +0,0 @@
1/*
2** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
3** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
4**
5** This program is free software; you can redistribute it and/or modify
6** it under the terms of the GNU General Public License as published by
7** the Free Software Foundation; either version 2 of the License, or
8** (at your option) any later version.
9**
10** This program is distributed in the hope that it will be useful,
11** but WITHOUT ANY WARRANTY; without even the implied warranty of
12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13** GNU General Public License for more details.
14**
15** You should have received a copy of the GNU General Public License
16** along with this program; if not, write to the Free Software
17** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18**
19** Any non-GPL usage of this software or parts of this software is strictly
20** forbidden.
21**
22** Commercial non-GPL licensing of this software is possible.
23** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
24**
25** $Id$
26**/
27
28/*
29 * Algorithmically based on Fortran-77 FFTPACK
30 * by Paul N. Swarztrauber(Version 4, 1985).
31 *
32 * Does even sized fft only
33 */
34
35/* isign is +1 for backward and -1 for forward transforms */
36
37#include "common.h"
38#include "structs.h"
39
40#include <stdlib.h>
41
42#include "cfft.h"
43#include "cfft_tab.h"
44
45
46/* static function declarations */
47static void passf2pos(const uint16_t ido, const uint16_t l1, const complex_t *cc,
48 complex_t *ch, const complex_t *wa);
49static void passf2neg(const uint16_t ido, const uint16_t l1, const complex_t *cc,
50 complex_t *ch, const complex_t *wa);
51static void passf3(const uint16_t ido, const uint16_t l1, const complex_t *cc,
52 complex_t *ch, const complex_t *wa1, const complex_t *wa2, const int8_t isign);
53static void passf4pos(const uint16_t ido, const uint16_t l1, const complex_t *cc, complex_t *ch,
54 const complex_t *wa1, const complex_t *wa2, const complex_t *wa3);
55static void passf4neg(const uint16_t ido, const uint16_t l1, const complex_t *cc, complex_t *ch,
56 const complex_t *wa1, const complex_t *wa2, const complex_t *wa3);
57static void passf5(const uint16_t ido, const uint16_t l1, const complex_t *cc, complex_t *ch,
58 const complex_t *wa1, const complex_t *wa2, const complex_t *wa3,
59 const complex_t *wa4, const int8_t isign);
60INLINE void cfftf1(uint16_t n, complex_t *c, complex_t *ch,
61 const uint16_t *ifac, const complex_t *wa, const int8_t isign);
62static void cffti1(uint16_t n, complex_t *wa, uint16_t *ifac);
63
64
65/*----------------------------------------------------------------------
66 passf2, passf3, passf4, passf5. Complex FFT passes fwd and bwd.
67 ----------------------------------------------------------------------*/
68
69static void passf2pos(const uint16_t ido, const uint16_t l1, const complex_t *cc,
70 complex_t *ch, const complex_t *wa)
71{
72 uint16_t i, k, ah, ac;
73
74 if (ido == 1)
75 {
76 for (k = 0; k < l1; k++)
77 {
78 ah = 2*k;
79 ac = 4*k;
80
81 RE(ch[ah]) = RE(cc[ac]) + RE(cc[ac+1]);
82 RE(ch[ah+l1]) = RE(cc[ac]) - RE(cc[ac+1]);
83 IM(ch[ah]) = IM(cc[ac]) + IM(cc[ac+1]);
84 IM(ch[ah+l1]) = IM(cc[ac]) - IM(cc[ac+1]);
85 }
86 } else {
87 for (k = 0; k < l1; k++)
88 {
89 ah = k*ido;
90 ac = 2*k*ido;
91
92 for (i = 0; i < ido; i++)
93 {
94 complex_t t2;
95
96 RE(ch[ah+i]) = RE(cc[ac+i]) + RE(cc[ac+i+ido]);
97 RE(t2) = RE(cc[ac+i]) - RE(cc[ac+i+ido]);
98
99 IM(ch[ah+i]) = IM(cc[ac+i]) + IM(cc[ac+i+ido]);
100 IM(t2) = IM(cc[ac+i]) - IM(cc[ac+i+ido]);
101
102#if 1
103 ComplexMult(&IM(ch[ah+i+l1*ido]), &RE(ch[ah+i+l1*ido]),
104 IM(t2), RE(t2), RE(wa[i]), IM(wa[i]));
105#else
106 ComplexMult(&RE(ch[ah+i+l1*ido]), &IM(ch[ah+i+l1*ido]),
107 RE(t2), IM(t2), RE(wa[i]), IM(wa[i]));
108#endif
109 }
110 }
111 }
112}
113
114static void passf2neg(const uint16_t ido, const uint16_t l1, const complex_t *cc,
115 complex_t *ch, const complex_t *wa)
116{
117 uint16_t i, k, ah, ac;
118
119 if (ido == 1)
120 {
121 for (k = 0; k < l1; k++)
122 {
123 ah = 2*k;
124 ac = 4*k;
125
126 RE(ch[ah]) = RE(cc[ac]) + RE(cc[ac+1]);
127 RE(ch[ah+l1]) = RE(cc[ac]) - RE(cc[ac+1]);
128 IM(ch[ah]) = IM(cc[ac]) + IM(cc[ac+1]);
129 IM(ch[ah+l1]) = IM(cc[ac]) - IM(cc[ac+1]);
130 }
131 } else {
132 for (k = 0; k < l1; k++)
133 {
134 ah = k*ido;
135 ac = 2*k*ido;
136
137 for (i = 0; i < ido; i++)
138 {
139 complex_t t2;
140
141 RE(ch[ah+i]) = RE(cc[ac+i]) + RE(cc[ac+i+ido]);
142 RE(t2) = RE(cc[ac+i]) - RE(cc[ac+i+ido]);
143
144 IM(ch[ah+i]) = IM(cc[ac+i]) + IM(cc[ac+i+ido]);
145 IM(t2) = IM(cc[ac+i]) - IM(cc[ac+i+ido]);
146
147#if 1
148 ComplexMult(&RE(ch[ah+i+l1*ido]), &IM(ch[ah+i+l1*ido]),
149 RE(t2), IM(t2), RE(wa[i]), IM(wa[i]));
150#else
151 ComplexMult(&IM(ch[ah+i+l1*ido]), &RE(ch[ah+i+l1*ido]),
152 IM(t2), RE(t2), RE(wa[i]), IM(wa[i]));
153#endif
154 }
155 }
156 }
157}
158
159
160static void passf3(const uint16_t ido, const uint16_t l1, const complex_t *cc,
161 complex_t *ch, const complex_t *wa1, const complex_t *wa2,
162 const int8_t isign)
163{
164 static real_t taur = FRAC_CONST(-0.5);
165 static real_t taui = FRAC_CONST(0.866025403784439);
166 uint16_t i, k, ac, ah;
167 complex_t c2, c3, d2, d3, t2;
168
169 if (ido == 1)
170 {
171 if (isign == 1)
172 {
173 for (k = 0; k < l1; k++)
174 {
175 ac = 3*k+1;
176 ah = k;
177
178 RE(t2) = RE(cc[ac]) + RE(cc[ac+1]);
179 IM(t2) = IM(cc[ac]) + IM(cc[ac+1]);
180 RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),taur);
181 IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),taur);
182
183 RE(ch[ah]) = RE(cc[ac-1]) + RE(t2);
184 IM(ch[ah]) = IM(cc[ac-1]) + IM(t2);
185
186 RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+1])), taui);
187 IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+1])), taui);
188
189 RE(ch[ah+l1]) = RE(c2) - IM(c3);
190 IM(ch[ah+l1]) = IM(c2) + RE(c3);
191 RE(ch[ah+2*l1]) = RE(c2) + IM(c3);
192 IM(ch[ah+2*l1]) = IM(c2) - RE(c3);
193 }
194 } else {
195 for (k = 0; k < l1; k++)
196 {
197 ac = 3*k+1;
198 ah = k;
199
200 RE(t2) = RE(cc[ac]) + RE(cc[ac+1]);
201 IM(t2) = IM(cc[ac]) + IM(cc[ac+1]);
202 RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),taur);
203 IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),taur);
204
205 RE(ch[ah]) = RE(cc[ac-1]) + RE(t2);
206 IM(ch[ah]) = IM(cc[ac-1]) + IM(t2);
207
208 RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+1])), taui);
209 IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+1])), taui);
210
211 RE(ch[ah+l1]) = RE(c2) + IM(c3);
212 IM(ch[ah+l1]) = IM(c2) - RE(c3);
213 RE(ch[ah+2*l1]) = RE(c2) - IM(c3);
214 IM(ch[ah+2*l1]) = IM(c2) + RE(c3);
215 }
216 }
217 } else {
218 if (isign == 1)
219 {
220 for (k = 0; k < l1; k++)
221 {
222 for (i = 0; i < ido; i++)
223 {
224 ac = i + (3*k+1)*ido;
225 ah = i + k * ido;
226
227 RE(t2) = RE(cc[ac]) + RE(cc[ac+ido]);
228 RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),taur);
229 IM(t2) = IM(cc[ac]) + IM(cc[ac+ido]);
230 IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),taur);
231
232 RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2);
233 IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2);
234
235 RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+ido])), taui);
236 IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+ido])), taui);
237
238 RE(d2) = RE(c2) - IM(c3);
239 IM(d3) = IM(c2) - RE(c3);
240 RE(d3) = RE(c2) + IM(c3);
241 IM(d2) = IM(c2) + RE(c3);
242
243#if 1
244 ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
245 IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
246 ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
247 IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
248#else
249 ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
250 RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
251 ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
252 RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
253#endif
254 }
255 }
256 } else {
257 for (k = 0; k < l1; k++)
258 {
259 for (i = 0; i < ido; i++)
260 {
261 ac = i + (3*k+1)*ido;
262 ah = i + k * ido;
263
264 RE(t2) = RE(cc[ac]) + RE(cc[ac+ido]);
265 RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),taur);
266 IM(t2) = IM(cc[ac]) + IM(cc[ac+ido]);
267 IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),taur);
268
269 RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2);
270 IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2);
271
272 RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+ido])), taui);
273 IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+ido])), taui);
274
275 RE(d2) = RE(c2) + IM(c3);
276 IM(d3) = IM(c2) + RE(c3);
277 RE(d3) = RE(c2) - IM(c3);
278 IM(d2) = IM(c2) - RE(c3);
279
280#if 1
281 ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
282 RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
283 ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
284 RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
285#else
286 ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
287 IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
288 ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
289 IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
290#endif
291 }
292 }
293 }
294 }
295}
296
297
298static void passf4pos(const uint16_t ido, const uint16_t l1, const complex_t *cc,
299 complex_t *ch, const complex_t *wa1, const complex_t *wa2,
300 const complex_t *wa3)
301{
302 uint16_t i, k, ac, ah;
303
304 if (ido == 1)
305 {
306 for (k = 0; k < l1; k++)
307 {
308 complex_t t1, t2, t3, t4;
309
310 ac = 4*k;
311 ah = k;
312
313 RE(t2) = RE(cc[ac]) + RE(cc[ac+2]);
314 RE(t1) = RE(cc[ac]) - RE(cc[ac+2]);
315 IM(t2) = IM(cc[ac]) + IM(cc[ac+2]);
316 IM(t1) = IM(cc[ac]) - IM(cc[ac+2]);
317 RE(t3) = RE(cc[ac+1]) + RE(cc[ac+3]);
318 IM(t4) = RE(cc[ac+1]) - RE(cc[ac+3]);
319 IM(t3) = IM(cc[ac+3]) + IM(cc[ac+1]);
320 RE(t4) = IM(cc[ac+3]) - IM(cc[ac+1]);
321
322 RE(ch[ah]) = RE(t2) + RE(t3);
323 RE(ch[ah+2*l1]) = RE(t2) - RE(t3);
324
325 IM(ch[ah]) = IM(t2) + IM(t3);
326 IM(ch[ah+2*l1]) = IM(t2) - IM(t3);
327
328 RE(ch[ah+l1]) = RE(t1) + RE(t4);
329 RE(ch[ah+3*l1]) = RE(t1) - RE(t4);
330
331 IM(ch[ah+l1]) = IM(t1) + IM(t4);
332 IM(ch[ah+3*l1]) = IM(t1) - IM(t4);
333 }
334 } else {
335 for (k = 0; k < l1; k++)
336 {
337 ac = 4*k*ido;
338 ah = k*ido;
339
340 for (i = 0; i < ido; i++)
341 {
342 complex_t c2, c3, c4, t1, t2, t3, t4;
343
344 RE(t2) = RE(cc[ac+i]) + RE(cc[ac+i+2*ido]);
345 RE(t1) = RE(cc[ac+i]) - RE(cc[ac+i+2*ido]);
346 IM(t2) = IM(cc[ac+i]) + IM(cc[ac+i+2*ido]);
347 IM(t1) = IM(cc[ac+i]) - IM(cc[ac+i+2*ido]);
348 RE(t3) = RE(cc[ac+i+ido]) + RE(cc[ac+i+3*ido]);
349 IM(t4) = RE(cc[ac+i+ido]) - RE(cc[ac+i+3*ido]);
350 IM(t3) = IM(cc[ac+i+3*ido]) + IM(cc[ac+i+ido]);
351 RE(t4) = IM(cc[ac+i+3*ido]) - IM(cc[ac+i+ido]);
352
353 RE(c2) = RE(t1) + RE(t4);
354 RE(c4) = RE(t1) - RE(t4);
355
356 IM(c2) = IM(t1) + IM(t4);
357 IM(c4) = IM(t1) - IM(t4);
358
359 RE(ch[ah+i]) = RE(t2) + RE(t3);
360 RE(c3) = RE(t2) - RE(t3);
361
362 IM(ch[ah+i]) = IM(t2) + IM(t3);
363 IM(c3) = IM(t2) - IM(t3);
364
365#if 1
366 ComplexMult(&IM(ch[ah+i+l1*ido]), &RE(ch[ah+i+l1*ido]),
367 IM(c2), RE(c2), RE(wa1[i]), IM(wa1[i]));
368 ComplexMult(&IM(ch[ah+i+2*l1*ido]), &RE(ch[ah+i+2*l1*ido]),
369 IM(c3), RE(c3), RE(wa2[i]), IM(wa2[i]));
370 ComplexMult(&IM(ch[ah+i+3*l1*ido]), &RE(ch[ah+i+3*l1*ido]),
371 IM(c4), RE(c4), RE(wa3[i]), IM(wa3[i]));
372#else
373 ComplexMult(&RE(ch[ah+i+l1*ido]), &IM(ch[ah+i+l1*ido]),
374 RE(c2), IM(c2), RE(wa1[i]), IM(wa1[i]));
375 ComplexMult(&RE(ch[ah+i+2*l1*ido]), &IM(ch[ah+i+2*l1*ido]),
376 RE(c3), IM(c3), RE(wa2[i]), IM(wa2[i]));
377 ComplexMult(&RE(ch[ah+i+3*l1*ido]), &IM(ch[ah+i+3*l1*ido]),
378 RE(c4), IM(c4), RE(wa3[i]), IM(wa3[i]));
379#endif
380 }
381 }
382 }
383}
384
385static void passf4neg(const uint16_t ido, const uint16_t l1, const complex_t *cc,
386 complex_t *ch, const complex_t *wa1, const complex_t *wa2,
387 const complex_t *wa3)
388{
389 uint16_t i, k, ac, ah;
390
391 if (ido == 1)
392 {
393 for (k = 0; k < l1; k++)
394 {
395 complex_t t1, t2, t3, t4;
396
397 ac = 4*k;
398 ah = k;
399
400 RE(t2) = RE(cc[ac]) + RE(cc[ac+2]);
401 RE(t1) = RE(cc[ac]) - RE(cc[ac+2]);
402 IM(t2) = IM(cc[ac]) + IM(cc[ac+2]);
403 IM(t1) = IM(cc[ac]) - IM(cc[ac+2]);
404 RE(t3) = RE(cc[ac+1]) + RE(cc[ac+3]);
405 IM(t4) = RE(cc[ac+1]) - RE(cc[ac+3]);
406 IM(t3) = IM(cc[ac+3]) + IM(cc[ac+1]);
407 RE(t4) = IM(cc[ac+3]) - IM(cc[ac+1]);
408
409 RE(ch[ah]) = RE(t2) + RE(t3);
410 RE(ch[ah+2*l1]) = RE(t2) - RE(t3);
411
412 IM(ch[ah]) = IM(t2) + IM(t3);
413 IM(ch[ah+2*l1]) = IM(t2) - IM(t3);
414
415 RE(ch[ah+l1]) = RE(t1) - RE(t4);
416 RE(ch[ah+3*l1]) = RE(t1) + RE(t4);
417
418 IM(ch[ah+l1]) = IM(t1) - IM(t4);
419 IM(ch[ah+3*l1]) = IM(t1) + IM(t4);
420 }
421 } else {
422 for (k = 0; k < l1; k++)
423 {
424 ac = 4*k*ido;
425 ah = k*ido;
426
427 for (i = 0; i < ido; i++)
428 {
429 complex_t c2, c3, c4, t1, t2, t3, t4;
430
431 RE(t2) = RE(cc[ac+i]) + RE(cc[ac+i+2*ido]);
432 RE(t1) = RE(cc[ac+i]) - RE(cc[ac+i+2*ido]);
433 IM(t2) = IM(cc[ac+i]) + IM(cc[ac+i+2*ido]);
434 IM(t1) = IM(cc[ac+i]) - IM(cc[ac+i+2*ido]);
435 RE(t3) = RE(cc[ac+i+ido]) + RE(cc[ac+i+3*ido]);
436 IM(t4) = RE(cc[ac+i+ido]) - RE(cc[ac+i+3*ido]);
437 IM(t3) = IM(cc[ac+i+3*ido]) + IM(cc[ac+i+ido]);
438 RE(t4) = IM(cc[ac+i+3*ido]) - IM(cc[ac+i+ido]);
439
440 RE(c2) = RE(t1) - RE(t4);
441 RE(c4) = RE(t1) + RE(t4);
442
443 IM(c2) = IM(t1) - IM(t4);
444 IM(c4) = IM(t1) + IM(t4);
445
446 RE(ch[ah+i]) = RE(t2) + RE(t3);
447 RE(c3) = RE(t2) - RE(t3);
448
449 IM(ch[ah+i]) = IM(t2) + IM(t3);
450 IM(c3) = IM(t2) - IM(t3);
451
452#if 1
453 ComplexMult(&RE(ch[ah+i+l1*ido]), &IM(ch[ah+i+l1*ido]),
454 RE(c2), IM(c2), RE(wa1[i]), IM(wa1[i]));
455 ComplexMult(&RE(ch[ah+i+2*l1*ido]), &IM(ch[ah+i+2*l1*ido]),
456 RE(c3), IM(c3), RE(wa2[i]), IM(wa2[i]));
457 ComplexMult(&RE(ch[ah+i+3*l1*ido]), &IM(ch[ah+i+3*l1*ido]),
458 RE(c4), IM(c4), RE(wa3[i]), IM(wa3[i]));
459#else
460 ComplexMult(&IM(ch[ah+i+l1*ido]), &RE(ch[ah+i+l1*ido]),
461 IM(c2), RE(c2), RE(wa1[i]), IM(wa1[i]));
462 ComplexMult(&IM(ch[ah+i+2*l1*ido]), &RE(ch[ah+i+2*l1*ido]),
463 IM(c3), RE(c3), RE(wa2[i]), IM(wa2[i]));
464 ComplexMult(&IM(ch[ah+i+3*l1*ido]), &RE(ch[ah+i+3*l1*ido]),
465 IM(c4), RE(c4), RE(wa3[i]), IM(wa3[i]));
466#endif
467 }
468 }
469 }
470}
471
472static void passf5(const uint16_t ido, const uint16_t l1, const complex_t *cc,
473 complex_t *ch, const complex_t *wa1, const complex_t *wa2, const complex_t *wa3,
474 const complex_t *wa4, const int8_t isign)
475{
476 static real_t tr11 = FRAC_CONST(0.309016994374947);
477 static real_t ti11 = FRAC_CONST(0.951056516295154);
478 static real_t tr12 = FRAC_CONST(-0.809016994374947);
479 static real_t ti12 = FRAC_CONST(0.587785252292473);
480 uint16_t i, k, ac, ah;
481 complex_t c2, c3, c4, c5, d3, d4, d5, d2, t2, t3, t4, t5;
482
483 if (ido == 1)
484 {
485 if (isign == 1)
486 {
487 for (k = 0; k < l1; k++)
488 {
489 ac = 5*k + 1;
490 ah = k;
491
492 RE(t2) = RE(cc[ac]) + RE(cc[ac+3]);
493 IM(t2) = IM(cc[ac]) + IM(cc[ac+3]);
494 RE(t3) = RE(cc[ac+1]) + RE(cc[ac+2]);
495 IM(t3) = IM(cc[ac+1]) + IM(cc[ac+2]);
496 RE(t4) = RE(cc[ac+1]) - RE(cc[ac+2]);
497 IM(t4) = IM(cc[ac+1]) - IM(cc[ac+2]);
498 RE(t5) = RE(cc[ac]) - RE(cc[ac+3]);
499 IM(t5) = IM(cc[ac]) - IM(cc[ac+3]);
500
501 RE(ch[ah]) = RE(cc[ac-1]) + RE(t2) + RE(t3);
502 IM(ch[ah]) = IM(cc[ac-1]) + IM(t2) + IM(t3);
503
504 RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
505 IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
506 RE(c3) = RE(cc[ac-1]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
507 IM(c3) = IM(cc[ac-1]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
508
509 ComplexMult(&RE(c5), &RE(c4),
510 ti11, ti12, RE(t5), RE(t4));
511 ComplexMult(&IM(c5), &IM(c4),
512 ti11, ti12, IM(t5), IM(t4));
513
514 RE(ch[ah+l1]) = RE(c2) - IM(c5);
515 IM(ch[ah+l1]) = IM(c2) + RE(c5);
516 RE(ch[ah+2*l1]) = RE(c3) - IM(c4);
517 IM(ch[ah+2*l1]) = IM(c3) + RE(c4);
518 RE(ch[ah+3*l1]) = RE(c3) + IM(c4);
519 IM(ch[ah+3*l1]) = IM(c3) - RE(c4);
520 RE(ch[ah+4*l1]) = RE(c2) + IM(c5);
521 IM(ch[ah+4*l1]) = IM(c2) - RE(c5);
522 }
523 } else {
524 for (k = 0; k < l1; k++)
525 {
526 ac = 5*k + 1;
527 ah = k;
528
529 RE(t2) = RE(cc[ac]) + RE(cc[ac+3]);
530 IM(t2) = IM(cc[ac]) + IM(cc[ac+3]);
531 RE(t3) = RE(cc[ac+1]) + RE(cc[ac+2]);
532 IM(t3) = IM(cc[ac+1]) + IM(cc[ac+2]);
533 RE(t4) = RE(cc[ac+1]) - RE(cc[ac+2]);
534 IM(t4) = IM(cc[ac+1]) - IM(cc[ac+2]);
535 RE(t5) = RE(cc[ac]) - RE(cc[ac+3]);
536 IM(t5) = IM(cc[ac]) - IM(cc[ac+3]);
537
538 RE(ch[ah]) = RE(cc[ac-1]) + RE(t2) + RE(t3);
539 IM(ch[ah]) = IM(cc[ac-1]) + IM(t2) + IM(t3);
540
541 RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
542 IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
543 RE(c3) = RE(cc[ac-1]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
544 IM(c3) = IM(cc[ac-1]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
545
546 ComplexMult(&RE(c4), &RE(c5),
547 ti12, ti11, RE(t5), RE(t4));
548 ComplexMult(&IM(c4), &IM(c5),
549 ti12, ti12, IM(t5), IM(t4));
550
551 RE(ch[ah+l1]) = RE(c2) + IM(c5);
552 IM(ch[ah+l1]) = IM(c2) - RE(c5);
553 RE(ch[ah+2*l1]) = RE(c3) + IM(c4);
554 IM(ch[ah+2*l1]) = IM(c3) - RE(c4);
555 RE(ch[ah+3*l1]) = RE(c3) - IM(c4);
556 IM(ch[ah+3*l1]) = IM(c3) + RE(c4);
557 RE(ch[ah+4*l1]) = RE(c2) - IM(c5);
558 IM(ch[ah+4*l1]) = IM(c2) + RE(c5);
559 }
560 }
561 } else {
562 if (isign == 1)
563 {
564 for (k = 0; k < l1; k++)
565 {
566 for (i = 0; i < ido; i++)
567 {
568 ac = i + (k*5 + 1) * ido;
569 ah = i + k * ido;
570
571 RE(t2) = RE(cc[ac]) + RE(cc[ac+3*ido]);
572 IM(t2) = IM(cc[ac]) + IM(cc[ac+3*ido]);
573 RE(t3) = RE(cc[ac+ido]) + RE(cc[ac+2*ido]);
574 IM(t3) = IM(cc[ac+ido]) + IM(cc[ac+2*ido]);
575 RE(t4) = RE(cc[ac+ido]) - RE(cc[ac+2*ido]);
576 IM(t4) = IM(cc[ac+ido]) - IM(cc[ac+2*ido]);
577 RE(t5) = RE(cc[ac]) - RE(cc[ac+3*ido]);
578 IM(t5) = IM(cc[ac]) - IM(cc[ac+3*ido]);
579
580 RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2) + RE(t3);
581 IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2) + IM(t3);
582
583 RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
584 IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
585 RE(c3) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
586 IM(c3) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
587
588 ComplexMult(&RE(c5), &RE(c4),
589 ti11, ti12, RE(t5), RE(t4));
590 ComplexMult(&IM(c5), &IM(c4),
591 ti11, ti12, IM(t5), IM(t4));
592
593 IM(d2) = IM(c2) + RE(c5);
594 IM(d3) = IM(c3) + RE(c4);
595 RE(d4) = RE(c3) + IM(c4);
596 RE(d5) = RE(c2) + IM(c5);
597 RE(d2) = RE(c2) - IM(c5);
598 IM(d5) = IM(c2) - RE(c5);
599 RE(d3) = RE(c3) - IM(c4);
600 IM(d4) = IM(c3) - RE(c4);
601
602#if 1
603 ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
604 IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
605 ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
606 IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
607 ComplexMult(&IM(ch[ah+3*l1*ido]), &RE(ch[ah+3*l1*ido]),
608 IM(d4), RE(d4), RE(wa3[i]), IM(wa3[i]));
609 ComplexMult(&IM(ch[ah+4*l1*ido]), &RE(ch[ah+4*l1*ido]),
610 IM(d5), RE(d5), RE(wa4[i]), IM(wa4[i]));
611#else
612 ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
613 RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
614 ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
615 RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
616 ComplexMult(&RE(ch[ah+3*l1*ido]), &IM(ch[ah+3*l1*ido]),
617 RE(d4), IM(d4), RE(wa3[i]), IM(wa3[i]));
618 ComplexMult(&RE(ch[ah+4*l1*ido]), &IM(ch[ah+4*l1*ido]),
619 RE(d5), IM(d5), RE(wa4[i]), IM(wa4[i]));
620#endif
621 }
622 }
623 } else {
624 for (k = 0; k < l1; k++)
625 {
626 for (i = 0; i < ido; i++)
627 {
628 ac = i + (k*5 + 1) * ido;
629 ah = i + k * ido;
630
631 RE(t2) = RE(cc[ac]) + RE(cc[ac+3*ido]);
632 IM(t2) = IM(cc[ac]) + IM(cc[ac+3*ido]);
633 RE(t3) = RE(cc[ac+ido]) + RE(cc[ac+2*ido]);
634 IM(t3) = IM(cc[ac+ido]) + IM(cc[ac+2*ido]);
635 RE(t4) = RE(cc[ac+ido]) - RE(cc[ac+2*ido]);
636 IM(t4) = IM(cc[ac+ido]) - IM(cc[ac+2*ido]);
637 RE(t5) = RE(cc[ac]) - RE(cc[ac+3*ido]);
638 IM(t5) = IM(cc[ac]) - IM(cc[ac+3*ido]);
639
640 RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2) + RE(t3);
641 IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2) + IM(t3);
642
643 RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
644 IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
645 RE(c3) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
646 IM(c3) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
647
648 ComplexMult(&RE(c4), &RE(c5),
649 ti12, ti11, RE(t5), RE(t4));
650 ComplexMult(&IM(c4), &IM(c5),
651 ti12, ti12, IM(t5), IM(t4));
652
653 IM(d2) = IM(c2) - RE(c5);
654 IM(d3) = IM(c3) - RE(c4);
655 RE(d4) = RE(c3) - IM(c4);
656 RE(d5) = RE(c2) - IM(c5);
657 RE(d2) = RE(c2) + IM(c5);
658 IM(d5) = IM(c2) + RE(c5);
659 RE(d3) = RE(c3) + IM(c4);
660 IM(d4) = IM(c3) + RE(c4);
661
662#if 1
663 ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
664 RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
665 ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
666 RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
667 ComplexMult(&RE(ch[ah+3*l1*ido]), &IM(ch[ah+3*l1*ido]),
668 RE(d4), IM(d4), RE(wa3[i]), IM(wa3[i]));
669 ComplexMult(&RE(ch[ah+4*l1*ido]), &IM(ch[ah+4*l1*ido]),
670 RE(d5), IM(d5), RE(wa4[i]), IM(wa4[i]));
671#else
672 ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
673 IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
674 ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
675 IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
676 ComplexMult(&IM(ch[ah+3*l1*ido]), &RE(ch[ah+3*l1*ido]),
677 IM(d4), RE(d4), RE(wa3[i]), IM(wa3[i]));
678 ComplexMult(&IM(ch[ah+4*l1*ido]), &RE(ch[ah+4*l1*ido]),
679 IM(d5), RE(d5), RE(wa4[i]), IM(wa4[i]));
680#endif
681 }
682 }
683 }
684 }
685}
686
687
688/*----------------------------------------------------------------------
689 cfftf1, cfftf, cfftb, cffti1, cffti. Complex FFTs.
690 ----------------------------------------------------------------------*/
691
692static INLINE void cfftf1pos(uint16_t n, complex_t *c, complex_t *ch,
693 const uint16_t *ifac, const complex_t *wa,
694 const int8_t isign)
695{
696 uint16_t i;
697 uint16_t k1, l1, l2;
698 uint16_t na, nf, ip, iw, ix2, ix3, ix4, ido, idl1;
699
700 nf = ifac[1];
701 na = 0;
702 l1 = 1;
703 iw = 0;
704
705 for (k1 = 2; k1 <= nf+1; k1++)
706 {
707 ip = ifac[k1];
708 l2 = ip*l1;
709 ido = n / l2;
710 idl1 = ido*l1;
711
712 switch (ip)
713 {
714 case 4:
715 ix2 = iw + ido;
716 ix3 = ix2 + ido;
717
718 if (na == 0)
719 passf4pos((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw], &wa[ix2], &wa[ix3]);
720 else
721 passf4pos((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw], &wa[ix2], &wa[ix3]);
722
723 na = 1 - na;
724 break;
725 case 2:
726 if (na == 0)
727 passf2pos((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw]);
728 else
729 passf2pos((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw]);
730
731 na = 1 - na;
732 break;
733 case 3:
734 ix2 = iw + ido;
735
736 if (na == 0)
737 passf3((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw], &wa[ix2], isign);
738 else
739 passf3((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw], &wa[ix2], isign);
740
741 na = 1 - na;
742 break;
743 case 5:
744 ix2 = iw + ido;
745 ix3 = ix2 + ido;
746 ix4 = ix3 + ido;
747
748 if (na == 0)
749 passf5((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4], isign);
750 else
751 passf5((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4], isign);
752
753 na = 1 - na;
754 break;
755 }
756
757 l1 = l2;
758 iw += (ip-1) * ido;
759 }
760
761 if (na == 0)
762 return;
763
764 for (i = 0; i < n; i++)
765 {
766 RE(c[i]) = RE(ch[i]);
767 IM(c[i]) = IM(ch[i]);
768 }
769}
770
771static INLINE void cfftf1neg(uint16_t n, complex_t *c, complex_t *ch,
772 const uint16_t *ifac, const complex_t *wa,
773 const int8_t isign)
774{
775 uint16_t i;
776 uint16_t k1, l1, l2;
777 uint16_t na, nf, ip, iw, ix2, ix3, ix4, ido, idl1;
778
779 nf = ifac[1];
780 na = 0;
781 l1 = 1;
782 iw = 0;
783
784 for (k1 = 2; k1 <= nf+1; k1++)
785 {
786 ip = ifac[k1];
787 l2 = ip*l1;
788 ido = n / l2;
789 idl1 = ido*l1;
790
791 switch (ip)
792 {
793 case 4:
794 ix2 = iw + ido;
795 ix3 = ix2 + ido;
796
797 if (na == 0)
798 passf4neg((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw], &wa[ix2], &wa[ix3]);
799 else
800 passf4neg((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw], &wa[ix2], &wa[ix3]);
801
802 na = 1 - na;
803 break;
804 case 2:
805 if (na == 0)
806 passf2neg((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw]);
807 else
808 passf2neg((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw]);
809
810 na = 1 - na;
811 break;
812 case 3:
813 ix2 = iw + ido;
814
815 if (na == 0)
816 passf3((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw], &wa[ix2], isign);
817 else
818 passf3((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw], &wa[ix2], isign);
819
820 na = 1 - na;
821 break;
822 case 5:
823 ix2 = iw + ido;
824 ix3 = ix2 + ido;
825 ix4 = ix3 + ido;
826
827 if (na == 0)
828 passf5((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4], isign);
829 else
830 passf5((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4], isign);
831
832 na = 1 - na;
833 break;
834 }
835
836 l1 = l2;
837 iw += (ip-1) * ido;
838 }
839
840 if (na == 0)
841 return;
842
843 for (i = 0; i < n; i++)
844 {
845 RE(c[i]) = RE(ch[i]);
846 IM(c[i]) = IM(ch[i]);
847 }
848}
849
850void cfftf(cfft_info *cfft, complex_t *c)
851{
852 const complex_t *ct = (const complex_t*)cfft->tab;
853 cfftf1neg(cfft->n, c, cfft->work, (const uint16_t*)cfft->ifac, ct, -1);
854}
855
856void cfftb(cfft_info *cfft, complex_t *c)
857{
858 const complex_t *ct = (const complex_t*)cfft->tab;
859 cfftf1pos(cfft->n, c, cfft->work, (const uint16_t*)cfft->ifac, ct, +1);
860}
861
862static void cffti1(uint16_t n, complex_t *wa, uint16_t *ifac)
863{
864 static uint16_t ntryh[4] = {3, 4, 2, 5};
865#ifndef FIXED_POINT
866 real_t arg, argh, argld, fi;
867 uint16_t ido, ipm;
868 uint16_t i1, k1, l1, l2;
869 uint16_t ld, ii, ip;
870#endif
871 uint16_t ntry = 0, i, j;
872 uint16_t ib;
873 uint16_t nf, nl, nq, nr;
874
875 (void)wa;
876 nl = n;
877 nf = 0;
878 j = 0;
879
880startloop:
881 j++;
882
883 if (j <= 4)
884 ntry = ntryh[j-1];
885 else
886 ntry += 2;
887
888 do
889 {
890 nq = nl / ntry;
891 nr = nl - ntry*nq;
892
893 if (nr != 0)
894 goto startloop;
895
896 nf++;
897 ifac[nf+1] = ntry;
898 nl = nq;
899
900 if (ntry == 2 && nf != 1)
901 {
902 for (i = 2; i <= nf; i++)
903 {
904 ib = nf - i + 2;
905 ifac[ib+1] = ifac[ib];
906 }
907 ifac[2] = 2;
908 }
909 } while (nl != 1);
910
911 ifac[0] = n;
912 ifac[1] = nf;
913
914#ifndef FIXED_POINT
915 argh = (real_t)2.0*(real_t)M_PI / (real_t)n;
916 i = 0;
917 l1 = 1;
918
919 for (k1 = 1; k1 <= nf; k1++)
920 {
921 ip = ifac[k1+1];
922 ld = 0;
923 l2 = l1*ip;
924 ido = n / l2;
925 ipm = ip - 1;
926
927 for (j = 0; j < ipm; j++)
928 {
929 i1 = i;
930 RE(wa[i]) = 1.0;
931 IM(wa[i]) = 0.0;
932 ld += l1;
933 fi = 0;
934 argld = ld*argh;
935
936 for (ii = 0; ii < ido; ii++)
937 {
938 i++;
939 fi++;
940 arg = fi * argld;
941 RE(wa[i]) = (real_t)cos(arg);
942#if 1
943 IM(wa[i]) = (real_t)sin(arg);
944#else
945 IM(wa[i]) = (real_t)-sin(arg);
946#endif
947 }
948
949 if (ip > 5)
950 {
951 RE(wa[i1]) = RE(wa[i]);
952 IM(wa[i1]) = IM(wa[i]);
953 }
954 }
955 l1 = l2;
956 }
957#endif
958}
959
960cfft_info *cffti(uint16_t n)
961{
962 cfft_info *cfft = (cfft_info*)faad_malloc(sizeof(cfft_info));
963
964 cfft->n = n;
965
966 if (n <= 512)
967 {
968 static complex_t work_buf[512] IBSS_ATTR;
969
970 cfft->work = work_buf;
971 }
972 else
973 {
974 cfft->work = (complex_t*)faad_malloc(n*sizeof(complex_t));
975 }
976
977#ifndef FIXED_POINT
978 cfft->tab = (complex_t*)faad_malloc(n*sizeof(complex_t));
979
980 cffti1(n, cfft->tab, cfft->ifac);
981#else
982 cffti1(n, NULL, cfft->ifac);
983
984 switch (n)
985 {
986 case 64: cfft->tab = (complex_t*)cfft_tab_64; break;
987 case 512: cfft->tab = (complex_t*)cfft_tab_512; break;
988#ifdef LD_DEC
989 case 256: cfft->tab = (complex_t*)cfft_tab_256; break;
990#endif
991
992#ifdef ALLOW_SMALL_FRAMELENGTH
993 case 60: cfft->tab = (complex_t*)cfft_tab_60; break;
994 case 480: cfft->tab = (complex_t*)cfft_tab_480; break;
995#ifdef LD_DEC
996 case 240: cfft->tab = (complex_t*)cfft_tab_240; break;
997#endif
998#endif
999 case 128: cfft->tab = (complex_t*)cfft_tab_128; break;
1000 }
1001#endif
1002
1003 return cfft;
1004}
1005
1006void cfftu(cfft_info *cfft)
1007{
1008 if (cfft->work) faad_free(cfft->work);
1009#ifndef FIXED_POINT
1010 if (cfft->tab) faad_free(cfft->tab);
1011#endif
1012
1013 if (cfft) faad_free(cfft);
1014}
1015
diff --git a/apps/codecs/libfaad/cfft.h b/apps/codecs/libfaad/cfft.h
deleted file mode 100644
index 04d410e5a9..0000000000
--- a/apps/codecs/libfaad/cfft.h
+++ /dev/null
@@ -1,53 +0,0 @@
1/*
2** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
3** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
4**
5** This program is free software; you can redistribute it and/or modify
6** it under the terms of the GNU General Public License as published by
7** the Free Software Foundation; either version 2 of the License, or
8** (at your option) any later version.
9**
10** This program is distributed in the hope that it will be useful,
11** but WITHOUT ANY WARRANTY; without even the implied warranty of
12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13** GNU General Public License for more details.
14**
15** You should have received a copy of the GNU General Public License
16** along with this program; if not, write to the Free Software
17** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18**
19** Any non-GPL usage of this software or parts of this software is strictly
20** forbidden.
21**
22** Commercial non-GPL licensing of this software is possible.
23** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
24**
25** $Id$
26**/
27
28#ifndef __CFFT_H__
29#define __CFFT_H__
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35typedef struct
36{
37 uint16_t n;
38 uint16_t ifac[15];
39 complex_t *work;
40 complex_t *tab;
41} cfft_info;
42
43
44void cfftf(cfft_info *cfft, complex_t *c);
45void cfftb(cfft_info *cfft, complex_t *c);
46cfft_info *cffti(uint16_t n);
47void cfftu(cfft_info *cfft);
48
49
50#ifdef __cplusplus
51}
52#endif
53#endif
diff --git a/apps/codecs/libfaad/cfft_tab.h b/apps/codecs/libfaad/cfft_tab.h
deleted file mode 100644
index b26653bd38..0000000000
--- a/apps/codecs/libfaad/cfft_tab.h
+++ /dev/null
@@ -1,1820 +0,0 @@
1/*
2** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
3** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
4**
5** This program is free software; you can redistribute it and/or modify
6** it under the terms of the GNU General Public License as published by
7** the Free Software Foundation; either version 2 of the License, or
8** (at your option) any later version.
9**
10** This program is distributed in the hope that it will be useful,
11** but WITHOUT ANY WARRANTY; without even the implied warranty of
12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13** GNU General Public License for more details.
14**
15** You should have received a copy of the GNU General Public License
16** along with this program; if not, write to the Free Software
17** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18**
19** Any non-GPL usage of this software or parts of this software is strictly
20** forbidden.
21**
22** Commercial non-GPL licensing of this software is possible.
23** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
24**
25** $Id$
26**/
27
28#ifndef __CFFT_TAB_H__
29#define __CFFT_TAB_H__
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35#ifdef FIXED_POINT
36
37ALIGN static const complex_t cfft_tab_512[] ICONST_ATTR =
38{
39 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
40 { FRAC_CONST(0.999924719333649), FRAC_CONST(0.012271538376808) },
41 { FRAC_CONST(0.999698817729950), FRAC_CONST(0.024541229009628) },
42 { FRAC_CONST(0.999322354793549), FRAC_CONST(0.036807224154472) },
43 { FRAC_CONST(0.998795449733734), FRAC_CONST(0.049067676067352) },
44 { FRAC_CONST(0.998118102550507), FRAC_CONST(0.061320740729570) },
45 { FRAC_CONST(0.997290432453156), FRAC_CONST(0.073564566671848) },
46 { FRAC_CONST(0.996312618255615), FRAC_CONST(0.085797317326069) },
47 { FRAC_CONST(0.995184719562531), FRAC_CONST(0.098017141222954) },
48 { FRAC_CONST(0.993906974792480), FRAC_CONST(0.110222205519676) },
49 { FRAC_CONST(0.992479562759399), FRAC_CONST(0.122410677373409) },
50 { FRAC_CONST(0.990902662277222), FRAC_CONST(0.134580716490746) },
51 { FRAC_CONST(0.989176511764526), FRAC_CONST(0.146730467677116) },
52 { FRAC_CONST(0.987301409244537), FRAC_CONST(0.158858150243759) },
53 { FRAC_CONST(0.985277652740479), FRAC_CONST(0.170961901545525) },
54 { FRAC_CONST(0.983105480670929), FRAC_CONST(0.183039888739586) },
55 { FRAC_CONST(0.980785250663757), FRAC_CONST(0.195090323686600) },
56 { FRAC_CONST(0.978317379951477), FRAC_CONST(0.207111388444901) },
57 { FRAC_CONST(0.975702106952667), FRAC_CONST(0.219101235270500) },
58 { FRAC_CONST(0.972939968109131), FRAC_CONST(0.231058120727539) },
59 { FRAC_CONST(0.970031261444092), FRAC_CONST(0.242980197072029) },
60 { FRAC_CONST(0.966976463794708), FRAC_CONST(0.254865676164627) },
61 { FRAC_CONST(0.963776051998138), FRAC_CONST(0.266712784767151) },
62 { FRAC_CONST(0.960430502891541), FRAC_CONST(0.278519690036774) },
63 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
64 { FRAC_CONST(0.953306019306183), FRAC_CONST(0.302005946636200) },
65 { FRAC_CONST(0.949528157711029), FRAC_CONST(0.313681751489639) },
66 { FRAC_CONST(0.945607304573059), FRAC_CONST(0.325310319662094) },
67 { FRAC_CONST(0.941544055938721), FRAC_CONST(0.336889863014221) },
68 { FRAC_CONST(0.937339007854462), FRAC_CONST(0.348418682813644) },
69 { FRAC_CONST(0.932992815971375), FRAC_CONST(0.359895050525665) },
70 { FRAC_CONST(0.928506076335907), FRAC_CONST(0.371317207813263) },
71 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
72 { FRAC_CONST(0.919113874435425), FRAC_CONST(0.393992066383362) },
73 { FRAC_CONST(0.914209723472595), FRAC_CONST(0.405241340398788) },
74 { FRAC_CONST(0.909167945384979), FRAC_CONST(0.416429579257965) },
75 { FRAC_CONST(0.903989315032959), FRAC_CONST(0.427555084228516) },
76 { FRAC_CONST(0.898674488067627), FRAC_CONST(0.438616245985031) },
77 { FRAC_CONST(0.893224298954010), FRAC_CONST(0.449611335992813) },
78 { FRAC_CONST(0.887639641761780), FRAC_CONST(0.460538715124130) },
79 { FRAC_CONST(0.881921231746674), FRAC_CONST(0.471396744251251) },
80 { FRAC_CONST(0.876070082187653), FRAC_CONST(0.482183754444122) },
81 { FRAC_CONST(0.870086967945099), FRAC_CONST(0.492898225784302) },
82 { FRAC_CONST(0.863972842693329), FRAC_CONST(0.503538370132446) },
83 { FRAC_CONST(0.857728600502014), FRAC_CONST(0.514102756977081) },
84 { FRAC_CONST(0.851355195045471), FRAC_CONST(0.524589717388153) },
85 { FRAC_CONST(0.844853579998016), FRAC_CONST(0.534997642040253) },
86 { FRAC_CONST(0.838224709033966), FRAC_CONST(0.545324981212616) },
87 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
88 { FRAC_CONST(0.824589252471924), FRAC_CONST(0.565731823444366) },
89 { FRAC_CONST(0.817584812641144), FRAC_CONST(0.575808227062225) },
90 { FRAC_CONST(0.810457170009613), FRAC_CONST(0.585797905921936) },
91 { FRAC_CONST(0.803207516670227), FRAC_CONST(0.595699310302734) },
92 { FRAC_CONST(0.795836925506592), FRAC_CONST(0.605511009693146) },
93 { FRAC_CONST(0.788346409797668), FRAC_CONST(0.615231633186340) },
94 { FRAC_CONST(0.780737221240997), FRAC_CONST(0.624859511852264) },
95 { FRAC_CONST(0.773010432720184), FRAC_CONST(0.634393334388733) },
96 { FRAC_CONST(0.765167236328125), FRAC_CONST(0.643831551074982) },
97 { FRAC_CONST(0.757208824157715), FRAC_CONST(0.653172850608826) },
98 { FRAC_CONST(0.749136388301849), FRAC_CONST(0.662415802478790) },
99 { FRAC_CONST(0.740951120853424), FRAC_CONST(0.671558976173401) },
100 { FRAC_CONST(0.732654273509979), FRAC_CONST(0.680601000785828) },
101 { FRAC_CONST(0.724247097969055), FRAC_CONST(0.689540565013886) },
102 { FRAC_CONST(0.715730786323547), FRAC_CONST(0.698376297950745) },
103 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
104 { FRAC_CONST(0.698376238346100), FRAC_CONST(0.715730845928192) },
105 { FRAC_CONST(0.689540505409241), FRAC_CONST(0.724247097969055) },
106 { FRAC_CONST(0.680601000785828), FRAC_CONST(0.732654273509979) },
107 { FRAC_CONST(0.671558916568756), FRAC_CONST(0.740951180458069) },
108 { FRAC_CONST(0.662415742874146), FRAC_CONST(0.749136388301849) },
109 { FRAC_CONST(0.653172791004181), FRAC_CONST(0.757208883762360) },
110 { FRAC_CONST(0.643831551074982), FRAC_CONST(0.765167295932770) },
111 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
112 { FRAC_CONST(0.624859452247620), FRAC_CONST(0.780737280845642) },
113 { FRAC_CONST(0.615231573581696), FRAC_CONST(0.788346409797668) },
114 { FRAC_CONST(0.605511009693146), FRAC_CONST(0.795836925506592) },
115 { FRAC_CONST(0.595699310302734), FRAC_CONST(0.803207516670227) },
116 { FRAC_CONST(0.585797846317291), FRAC_CONST(0.810457170009613) },
117 { FRAC_CONST(0.575808167457581), FRAC_CONST(0.817584812641144) },
118 { FRAC_CONST(0.565731823444366), FRAC_CONST(0.824589312076569) },
119 { FRAC_CONST(0.555570185184479), FRAC_CONST(0.831469655036926) },
120 { FRAC_CONST(0.545324981212616), FRAC_CONST(0.838224709033966) },
121 { FRAC_CONST(0.534997642040253), FRAC_CONST(0.844853579998016) },
122 { FRAC_CONST(0.524589657783508), FRAC_CONST(0.851355195045471) },
123 { FRAC_CONST(0.514102697372437), FRAC_CONST(0.857728660106659) },
124 { FRAC_CONST(0.503538429737091), FRAC_CONST(0.863972842693329) },
125 { FRAC_CONST(0.492898195981979), FRAC_CONST(0.870086967945099) },
126 { FRAC_CONST(0.482183724641800), FRAC_CONST(0.876070141792297) },
127 { FRAC_CONST(0.471396654844284), FRAC_CONST(0.881921291351318) },
128 { FRAC_CONST(0.460538715124130), FRAC_CONST(0.887639641761780) },
129 { FRAC_CONST(0.449611306190491), FRAC_CONST(0.893224298954010) },
130 { FRAC_CONST(0.438616186380386), FRAC_CONST(0.898674488067627) },
131 { FRAC_CONST(0.427555114030838), FRAC_CONST(0.903989315032959) },
132 { FRAC_CONST(0.416429549455643), FRAC_CONST(0.909168004989624) },
133 { FRAC_CONST(0.405241280794144), FRAC_CONST(0.914209783077240) },
134 { FRAC_CONST(0.393991947174072), FRAC_CONST(0.919113874435425) },
135 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
136 { FRAC_CONST(0.371317148208618), FRAC_CONST(0.928506076335907) },
137 { FRAC_CONST(0.359894961118698), FRAC_CONST(0.932992815971375) },
138 { FRAC_CONST(0.348418682813644), FRAC_CONST(0.937339007854462) },
139 { FRAC_CONST(0.336889833211899), FRAC_CONST(0.941544055938721) },
140 { FRAC_CONST(0.325310230255127), FRAC_CONST(0.945607364177704) },
141 { FRAC_CONST(0.313681662082672), FRAC_CONST(0.949528217315674) },
142 { FRAC_CONST(0.302005946636200), FRAC_CONST(0.953306019306183) },
143 { FRAC_CONST(0.290284633636475), FRAC_CONST(0.956940352916718) },
144 { FRAC_CONST(0.278519600629807), FRAC_CONST(0.960430562496185) },
145 { FRAC_CONST(0.266712754964828), FRAC_CONST(0.963776051998138) },
146 { FRAC_CONST(0.254865646362305), FRAC_CONST(0.966976463794708) },
147 { FRAC_CONST(0.242980122566223), FRAC_CONST(0.970031261444092) },
148 { FRAC_CONST(0.231058135628700), FRAC_CONST(0.972939968109131) },
149 { FRAC_CONST(0.219101220369339), FRAC_CONST(0.975702106952667) },
150 { FRAC_CONST(0.207111328840256), FRAC_CONST(0.978317379951477) },
151 { FRAC_CONST(0.195090234279633), FRAC_CONST(0.980785310268402) },
152 { FRAC_CONST(0.183039888739586), FRAC_CONST(0.983105480670929) },
153 { FRAC_CONST(0.170961856842041), FRAC_CONST(0.985277652740479) },
154 { FRAC_CONST(0.158858075737953), FRAC_CONST(0.987301409244537) },
155 { FRAC_CONST(0.146730497479439), FRAC_CONST(0.989176511764526) },
156 { FRAC_CONST(0.134580686688423), FRAC_CONST(0.990902662277222) },
157 { FRAC_CONST(0.122410625219345), FRAC_CONST(0.992479562759399) },
158 { FRAC_CONST(0.110222116112709), FRAC_CONST(0.993906974792480) },
159 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
160 { FRAC_CONST(0.085797272622585), FRAC_CONST(0.996312618255615) },
161 { FRAC_CONST(0.073564492166042), FRAC_CONST(0.997290432453156) },
162 { FRAC_CONST(0.061320748180151), FRAC_CONST(0.998118102550507) },
163 { FRAC_CONST(0.049067649990320), FRAC_CONST(0.998795449733734) },
164 { FRAC_CONST(0.036807164549828), FRAC_CONST(0.999322414398193) },
165 { FRAC_CONST(0.024541135877371), FRAC_CONST(0.999698817729950) },
166 { FRAC_CONST(0.012271529063582), FRAC_CONST(0.999924719333649) },
167 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
168 { FRAC_CONST(-0.012271616607904), FRAC_CONST(0.999924719333649) },
169 { FRAC_CONST(-0.024541223421693), FRAC_CONST(0.999698817729950) },
170 { FRAC_CONST(-0.036807250231504), FRAC_CONST(0.999322354793549) },
171 { FRAC_CONST(-0.049067739397287), FRAC_CONST(0.998795449733734) },
172 { FRAC_CONST(-0.061320833861828), FRAC_CONST(0.998118102550507) },
173 { FRAC_CONST(-0.073564574122429), FRAC_CONST(0.997290432453156) },
174 { FRAC_CONST(-0.085797362029552), FRAC_CONST(0.996312618255615) },
175 { FRAC_CONST(-0.098017223179340), FRAC_CONST(0.995184719562531) },
176 { FRAC_CONST(-0.110222205519676), FRAC_CONST(0.993906974792480) },
177 { FRAC_CONST(-0.122410707175732), FRAC_CONST(0.992479503154755) },
178 { FRAC_CONST(-0.134580776095390), FRAC_CONST(0.990902602672577) },
179 { FRAC_CONST(-0.146730571985245), FRAC_CONST(0.989176511764526) },
180 { FRAC_CONST(-0.158858165144920), FRAC_CONST(0.987301409244537) },
181 { FRAC_CONST(-0.170961946249008), FRAC_CONST(0.985277652740479) },
182 { FRAC_CONST(-0.183039978146553), FRAC_CONST(0.983105480670929) },
183 { FRAC_CONST(-0.195090323686600), FRAC_CONST(0.980785250663757) },
184 { FRAC_CONST(-0.207111418247223), FRAC_CONST(0.978317379951477) },
185 { FRAC_CONST(-0.219101309776306), FRAC_CONST(0.975702106952667) },
186 { FRAC_CONST(-0.231058210134506), FRAC_CONST(0.972939908504486) },
187 { FRAC_CONST(-0.242980197072029), FRAC_CONST(0.970031261444092) },
188 { FRAC_CONST(-0.254865705966949), FRAC_CONST(0.966976463794708) },
189 { FRAC_CONST(-0.266712844371796), FRAC_CONST(0.963776051998138) },
190 { FRAC_CONST(-0.278519690036774), FRAC_CONST(0.960430502891541) },
191 { FRAC_CONST(-0.290284723043442), FRAC_CONST(0.956940293312073) },
192 { FRAC_CONST(-0.302006036043167), FRAC_CONST(0.953306019306183) },
193 { FRAC_CONST(-0.313681721687317), FRAC_CONST(0.949528157711029) },
194 { FRAC_CONST(-0.325310319662094), FRAC_CONST(0.945607304573059) },
195 { FRAC_CONST(-0.336889922618866), FRAC_CONST(0.941544055938721) },
196 { FRAC_CONST(-0.348418772220612), FRAC_CONST(0.937338948249817) },
197 { FRAC_CONST(-0.359895050525665), FRAC_CONST(0.932992815971375) },
198 { FRAC_CONST(-0.371317237615585), FRAC_CONST(0.928506076335907) },
199 { FRAC_CONST(-0.382683515548706), FRAC_CONST(0.923879504203796) },
200 { FRAC_CONST(-0.393992036581039), FRAC_CONST(0.919113874435425) },
201 { FRAC_CONST(-0.405241340398788), FRAC_CONST(0.914209723472595) },
202 { FRAC_CONST(-0.416429519653320), FRAC_CONST(0.909168004989624) },
203 { FRAC_CONST(-0.427555084228516), FRAC_CONST(0.903989315032959) },
204 { FRAC_CONST(-0.438616245985031), FRAC_CONST(0.898674428462982) },
205 { FRAC_CONST(-0.449611365795136), FRAC_CONST(0.893224298954010) },
206 { FRAC_CONST(-0.460538804531097), FRAC_CONST(0.887639582157135) },
207 { FRAC_CONST(-0.471396833658218), FRAC_CONST(0.881921231746674) },
208 { FRAC_CONST(-0.482183903455734), FRAC_CONST(0.876070022583008) },
209 { FRAC_CONST(-0.492898166179657), FRAC_CONST(0.870087027549744) },
210 { FRAC_CONST(-0.503538370132446), FRAC_CONST(0.863972842693329) },
211 { FRAC_CONST(-0.514102756977081), FRAC_CONST(0.857728600502014) },
212 { FRAC_CONST(-0.524589717388153), FRAC_CONST(0.851355135440826) },
213 { FRAC_CONST(-0.534997701644897), FRAC_CONST(0.844853520393372) },
214 { FRAC_CONST(-0.545325100421906), FRAC_CONST(0.838224649429321) },
215 { FRAC_CONST(-0.555570363998413), FRAC_CONST(0.831469535827637) },
216 { FRAC_CONST(-0.565731763839722), FRAC_CONST(0.824589312076569) },
217 { FRAC_CONST(-0.575808167457581), FRAC_CONST(0.817584812641144) },
218 { FRAC_CONST(-0.585797905921936), FRAC_CONST(0.810457170009613) },
219 { FRAC_CONST(-0.595699369907379), FRAC_CONST(0.803207516670227) },
220 { FRAC_CONST(-0.605511128902435), FRAC_CONST(0.795836865901947) },
221 { FRAC_CONST(-0.615231692790985), FRAC_CONST(0.788346350193024) },
222 { FRAC_CONST(-0.624859631061554), FRAC_CONST(0.780737102031708) },
223 { FRAC_CONST(-0.634393274784088), FRAC_CONST(0.773010492324829) },
224 { FRAC_CONST(-0.643831551074982), FRAC_CONST(0.765167236328125) },
225 { FRAC_CONST(-0.653172850608826), FRAC_CONST(0.757208824157715) },
226 { FRAC_CONST(-0.662415802478790), FRAC_CONST(0.749136328697205) },
227 { FRAC_CONST(-0.671559035778046), FRAC_CONST(0.740951061248779) },
228 { FRAC_CONST(-0.680601119995117), FRAC_CONST(0.732654154300690) },
229 { FRAC_CONST(-0.689540684223175), FRAC_CONST(0.724246978759766) },
230 { FRAC_CONST(-0.698376238346100), FRAC_CONST(0.715730845928192) },
231 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
232 { FRAC_CONST(-0.715730845928192), FRAC_CONST(0.698376238346100) },
233 { FRAC_CONST(-0.724247157573700), FRAC_CONST(0.689540505409241) },
234 { FRAC_CONST(-0.732654333114624), FRAC_CONST(0.680600941181183) },
235 { FRAC_CONST(-0.740951240062714), FRAC_CONST(0.671558856964111) },
236 { FRAC_CONST(-0.749136507511139), FRAC_CONST(0.662415623664856) },
237 { FRAC_CONST(-0.757208824157715), FRAC_CONST(0.653172850608826) },
238 { FRAC_CONST(-0.765167295932770), FRAC_CONST(0.643831551074982) },
239 { FRAC_CONST(-0.773010492324829), FRAC_CONST(0.634393274784088) },
240 { FRAC_CONST(-0.780737280845642), FRAC_CONST(0.624859452247620) },
241 { FRAC_CONST(-0.788346469402313), FRAC_CONST(0.615231513977051) },
242 { FRAC_CONST(-0.795836985111237), FRAC_CONST(0.605510950088501) },
243 { FRAC_CONST(-0.803207635879517), FRAC_CONST(0.595699131488800) },
244 { FRAC_CONST(-0.810457170009613), FRAC_CONST(0.585797846317291) },
245 { FRAC_CONST(-0.817584812641144), FRAC_CONST(0.575808167457581) },
246 { FRAC_CONST(-0.824589312076569), FRAC_CONST(0.565731763839722) },
247 { FRAC_CONST(-0.831469655036926), FRAC_CONST(0.555570185184479) },
248 { FRAC_CONST(-0.838224768638611), FRAC_CONST(0.545324862003326) },
249 { FRAC_CONST(-0.844853639602661), FRAC_CONST(0.534997463226318) },
250 { FRAC_CONST(-0.851355314254761), FRAC_CONST(0.524589538574219) },
251 { FRAC_CONST(-0.857728600502014), FRAC_CONST(0.514102756977081) },
252 { FRAC_CONST(-0.863972842693329), FRAC_CONST(0.503538370132446) },
253 { FRAC_CONST(-0.870087027549744), FRAC_CONST(0.492898136377335) },
254 { FRAC_CONST(-0.876070141792297), FRAC_CONST(0.482183694839478) },
255 { FRAC_CONST(-0.881921350955963), FRAC_CONST(0.471396625041962) },
256 { FRAC_CONST(-0.887639701366425), FRAC_CONST(0.460538566112518) },
257 { FRAC_CONST(-0.893224298954010), FRAC_CONST(0.449611365795136) },
258 { FRAC_CONST(-0.898674488067627), FRAC_CONST(0.438616245985031) },
259 { FRAC_CONST(-0.903989315032959), FRAC_CONST(0.427555054426193) },
260 { FRAC_CONST(-0.909168004989624), FRAC_CONST(0.416429489850998) },
261 { FRAC_CONST(-0.914209783077240), FRAC_CONST(0.405241221189499) },
262 { FRAC_CONST(-0.919113874435425), FRAC_CONST(0.393991917371750) },
263 { FRAC_CONST(-0.923879623413086), FRAC_CONST(0.382683277130127) },
264 { FRAC_CONST(-0.928506076335907), FRAC_CONST(0.371317237615585) },
265 { FRAC_CONST(-0.932992815971375), FRAC_CONST(0.359895050525665) },
266 { FRAC_CONST(-0.937339007854462), FRAC_CONST(0.348418653011322) },
267 { FRAC_CONST(-0.941544115543365), FRAC_CONST(0.336889803409576) },
268 { FRAC_CONST(-0.945607364177704), FRAC_CONST(0.325310200452805) },
269 { FRAC_CONST(-0.949528217315674), FRAC_CONST(0.313681602478027) },
270 { FRAC_CONST(-0.953306078910828), FRAC_CONST(0.302005797624588) },
271 { FRAC_CONST(-0.956940352916718), FRAC_CONST(0.290284723043442) },
272 { FRAC_CONST(-0.960430502891541), FRAC_CONST(0.278519690036774) },
273 { FRAC_CONST(-0.963776051998138), FRAC_CONST(0.266712725162506) },
274 { FRAC_CONST(-0.966976463794708), FRAC_CONST(0.254865586757660) },
275 { FRAC_CONST(-0.970031261444092), FRAC_CONST(0.242980077862740) },
276 { FRAC_CONST(-0.972939968109131), FRAC_CONST(0.231057971715927) },
277 { FRAC_CONST(-0.975702166557312), FRAC_CONST(0.219101071357727) },
278 { FRAC_CONST(-0.978317379951477), FRAC_CONST(0.207111403346062) },
279 { FRAC_CONST(-0.980785310268402), FRAC_CONST(0.195090308785439) },
280 { FRAC_CONST(-0.983105480670929), FRAC_CONST(0.183039844036102) },
281 { FRAC_CONST(-0.985277652740479), FRAC_CONST(0.170961812138557) },
282 { FRAC_CONST(-0.987301409244537), FRAC_CONST(0.158858031034470) },
283 { FRAC_CONST(-0.989176511764526), FRAC_CONST(0.146730333566666) },
284 { FRAC_CONST(-0.990902662277222), FRAC_CONST(0.134580522775650) },
285 { FRAC_CONST(-0.992479503154755), FRAC_CONST(0.122410699725151) },
286 { FRAC_CONST(-0.993906974792480), FRAC_CONST(0.110222198069096) },
287 { FRAC_CONST(-0.995184719562531), FRAC_CONST(0.098017096519470) },
288 { FRAC_CONST(-0.996312618255615), FRAC_CONST(0.085797227919102) },
289 { FRAC_CONST(-0.997290492057800), FRAC_CONST(0.073564447462559) },
290 { FRAC_CONST(-0.998118102550507), FRAC_CONST(0.061320584267378) },
291 { FRAC_CONST(-0.998795449733734), FRAC_CONST(0.049067486077547) },
292 { FRAC_CONST(-0.999322354793549), FRAC_CONST(0.036807239055634) },
293 { FRAC_CONST(-0.999698817729950), FRAC_CONST(0.024541210383177) },
294 { FRAC_CONST(-0.999924719333649), FRAC_CONST(0.012271485291421) },
295 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
296 { FRAC_CONST(0.999698817729950), FRAC_CONST(0.024541229009628) },
297 { FRAC_CONST(0.998795449733734), FRAC_CONST(0.049067676067352) },
298 { FRAC_CONST(0.997290432453156), FRAC_CONST(0.073564566671848) },
299 { FRAC_CONST(0.995184719562531), FRAC_CONST(0.098017141222954) },
300 { FRAC_CONST(0.992479562759399), FRAC_CONST(0.122410677373409) },
301 { FRAC_CONST(0.989176511764526), FRAC_CONST(0.146730467677116) },
302 { FRAC_CONST(0.985277652740479), FRAC_CONST(0.170961901545525) },
303 { FRAC_CONST(0.980785250663757), FRAC_CONST(0.195090323686600) },
304 { FRAC_CONST(0.975702106952667), FRAC_CONST(0.219101235270500) },
305 { FRAC_CONST(0.970031261444092), FRAC_CONST(0.242980197072029) },
306 { FRAC_CONST(0.963776051998138), FRAC_CONST(0.266712784767151) },
307 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
308 { FRAC_CONST(0.949528157711029), FRAC_CONST(0.313681751489639) },
309 { FRAC_CONST(0.941544055938721), FRAC_CONST(0.336889863014221) },
310 { FRAC_CONST(0.932992815971375), FRAC_CONST(0.359895050525665) },
311 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
312 { FRAC_CONST(0.914209723472595), FRAC_CONST(0.405241340398788) },
313 { FRAC_CONST(0.903989315032959), FRAC_CONST(0.427555084228516) },
314 { FRAC_CONST(0.893224298954010), FRAC_CONST(0.449611335992813) },
315 { FRAC_CONST(0.881921231746674), FRAC_CONST(0.471396744251251) },
316 { FRAC_CONST(0.870086967945099), FRAC_CONST(0.492898225784302) },
317 { FRAC_CONST(0.857728600502014), FRAC_CONST(0.514102756977081) },
318 { FRAC_CONST(0.844853579998016), FRAC_CONST(0.534997642040253) },
319 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
320 { FRAC_CONST(0.817584812641144), FRAC_CONST(0.575808227062225) },
321 { FRAC_CONST(0.803207516670227), FRAC_CONST(0.595699310302734) },
322 { FRAC_CONST(0.788346409797668), FRAC_CONST(0.615231633186340) },
323 { FRAC_CONST(0.773010432720184), FRAC_CONST(0.634393334388733) },
324 { FRAC_CONST(0.757208824157715), FRAC_CONST(0.653172850608826) },
325 { FRAC_CONST(0.740951120853424), FRAC_CONST(0.671558976173401) },
326 { FRAC_CONST(0.724247097969055), FRAC_CONST(0.689540565013886) },
327 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
328 { FRAC_CONST(0.689540505409241), FRAC_CONST(0.724247097969055) },
329 { FRAC_CONST(0.671558916568756), FRAC_CONST(0.740951180458069) },
330 { FRAC_CONST(0.653172791004181), FRAC_CONST(0.757208883762360) },
331 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
332 { FRAC_CONST(0.615231573581696), FRAC_CONST(0.788346409797668) },
333 { FRAC_CONST(0.595699310302734), FRAC_CONST(0.803207516670227) },
334 { FRAC_CONST(0.575808167457581), FRAC_CONST(0.817584812641144) },
335 { FRAC_CONST(0.555570185184479), FRAC_CONST(0.831469655036926) },
336 { FRAC_CONST(0.534997642040253), FRAC_CONST(0.844853579998016) },
337 { FRAC_CONST(0.514102697372437), FRAC_CONST(0.857728660106659) },
338 { FRAC_CONST(0.492898195981979), FRAC_CONST(0.870086967945099) },
339 { FRAC_CONST(0.471396654844284), FRAC_CONST(0.881921291351318) },
340 { FRAC_CONST(0.449611306190491), FRAC_CONST(0.893224298954010) },
341 { FRAC_CONST(0.427555114030838), FRAC_CONST(0.903989315032959) },
342 { FRAC_CONST(0.405241280794144), FRAC_CONST(0.914209783077240) },
343 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
344 { FRAC_CONST(0.359894961118698), FRAC_CONST(0.932992815971375) },
345 { FRAC_CONST(0.336889833211899), FRAC_CONST(0.941544055938721) },
346 { FRAC_CONST(0.313681662082672), FRAC_CONST(0.949528217315674) },
347 { FRAC_CONST(0.290284633636475), FRAC_CONST(0.956940352916718) },
348 { FRAC_CONST(0.266712754964828), FRAC_CONST(0.963776051998138) },
349 { FRAC_CONST(0.242980122566223), FRAC_CONST(0.970031261444092) },
350 { FRAC_CONST(0.219101220369339), FRAC_CONST(0.975702106952667) },
351 { FRAC_CONST(0.195090234279633), FRAC_CONST(0.980785310268402) },
352 { FRAC_CONST(0.170961856842041), FRAC_CONST(0.985277652740479) },
353 { FRAC_CONST(0.146730497479439), FRAC_CONST(0.989176511764526) },
354 { FRAC_CONST(0.122410625219345), FRAC_CONST(0.992479562759399) },
355 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
356 { FRAC_CONST(0.073564492166042), FRAC_CONST(0.997290432453156) },
357 { FRAC_CONST(0.049067649990320), FRAC_CONST(0.998795449733734) },
358 { FRAC_CONST(0.024541135877371), FRAC_CONST(0.999698817729950) },
359 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
360 { FRAC_CONST(0.998795449733734), FRAC_CONST(0.049067676067352) },
361 { FRAC_CONST(0.995184719562531), FRAC_CONST(0.098017141222954) },
362 { FRAC_CONST(0.989176511764526), FRAC_CONST(0.146730467677116) },
363 { FRAC_CONST(0.980785250663757), FRAC_CONST(0.195090323686600) },
364 { FRAC_CONST(0.970031261444092), FRAC_CONST(0.242980197072029) },
365 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
366 { FRAC_CONST(0.941544055938721), FRAC_CONST(0.336889863014221) },
367 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
368 { FRAC_CONST(0.903989315032959), FRAC_CONST(0.427555084228516) },
369 { FRAC_CONST(0.881921231746674), FRAC_CONST(0.471396744251251) },
370 { FRAC_CONST(0.857728600502014), FRAC_CONST(0.514102756977081) },
371 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
372 { FRAC_CONST(0.803207516670227), FRAC_CONST(0.595699310302734) },
373 { FRAC_CONST(0.773010432720184), FRAC_CONST(0.634393334388733) },
374 { FRAC_CONST(0.740951120853424), FRAC_CONST(0.671558976173401) },
375 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
376 { FRAC_CONST(0.671558916568756), FRAC_CONST(0.740951180458069) },
377 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
378 { FRAC_CONST(0.595699310302734), FRAC_CONST(0.803207516670227) },
379 { FRAC_CONST(0.555570185184479), FRAC_CONST(0.831469655036926) },
380 { FRAC_CONST(0.514102697372437), FRAC_CONST(0.857728660106659) },
381 { FRAC_CONST(0.471396654844284), FRAC_CONST(0.881921291351318) },
382 { FRAC_CONST(0.427555114030838), FRAC_CONST(0.903989315032959) },
383 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
384 { FRAC_CONST(0.336889833211899), FRAC_CONST(0.941544055938721) },
385 { FRAC_CONST(0.290284633636475), FRAC_CONST(0.956940352916718) },
386 { FRAC_CONST(0.242980122566223), FRAC_CONST(0.970031261444092) },
387 { FRAC_CONST(0.195090234279633), FRAC_CONST(0.980785310268402) },
388 { FRAC_CONST(0.146730497479439), FRAC_CONST(0.989176511764526) },
389 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
390 { FRAC_CONST(0.049067649990320), FRAC_CONST(0.998795449733734) },
391 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
392 { FRAC_CONST(-0.049067739397287), FRAC_CONST(0.998795449733734) },
393 { FRAC_CONST(-0.098017223179340), FRAC_CONST(0.995184719562531) },
394 { FRAC_CONST(-0.146730571985245), FRAC_CONST(0.989176511764526) },
395 { FRAC_CONST(-0.195090323686600), FRAC_CONST(0.980785250663757) },
396 { FRAC_CONST(-0.242980197072029), FRAC_CONST(0.970031261444092) },
397 { FRAC_CONST(-0.290284723043442), FRAC_CONST(0.956940293312073) },
398 { FRAC_CONST(-0.336889922618866), FRAC_CONST(0.941544055938721) },
399 { FRAC_CONST(-0.382683515548706), FRAC_CONST(0.923879504203796) },
400 { FRAC_CONST(-0.427555084228516), FRAC_CONST(0.903989315032959) },
401 { FRAC_CONST(-0.471396833658218), FRAC_CONST(0.881921231746674) },
402 { FRAC_CONST(-0.514102756977081), FRAC_CONST(0.857728600502014) },
403 { FRAC_CONST(-0.555570363998413), FRAC_CONST(0.831469535827637) },
404 { FRAC_CONST(-0.595699369907379), FRAC_CONST(0.803207516670227) },
405 { FRAC_CONST(-0.634393274784088), FRAC_CONST(0.773010492324829) },
406 { FRAC_CONST(-0.671559035778046), FRAC_CONST(0.740951061248779) },
407 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
408 { FRAC_CONST(-0.740951240062714), FRAC_CONST(0.671558856964111) },
409 { FRAC_CONST(-0.773010492324829), FRAC_CONST(0.634393274784088) },
410 { FRAC_CONST(-0.803207635879517), FRAC_CONST(0.595699131488800) },
411 { FRAC_CONST(-0.831469655036926), FRAC_CONST(0.555570185184479) },
412 { FRAC_CONST(-0.857728600502014), FRAC_CONST(0.514102756977081) },
413 { FRAC_CONST(-0.881921350955963), FRAC_CONST(0.471396625041962) },
414 { FRAC_CONST(-0.903989315032959), FRAC_CONST(0.427555054426193) },
415 { FRAC_CONST(-0.923879623413086), FRAC_CONST(0.382683277130127) },
416 { FRAC_CONST(-0.941544115543365), FRAC_CONST(0.336889803409576) },
417 { FRAC_CONST(-0.956940352916718), FRAC_CONST(0.290284723043442) },
418 { FRAC_CONST(-0.970031261444092), FRAC_CONST(0.242980077862740) },
419 { FRAC_CONST(-0.980785310268402), FRAC_CONST(0.195090308785439) },
420 { FRAC_CONST(-0.989176511764526), FRAC_CONST(0.146730333566666) },
421 { FRAC_CONST(-0.995184719562531), FRAC_CONST(0.098017096519470) },
422 { FRAC_CONST(-0.998795449733734), FRAC_CONST(0.049067486077547) },
423 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
424 { FRAC_CONST(0.997290432453156), FRAC_CONST(0.073564566671848) },
425 { FRAC_CONST(0.989176511764526), FRAC_CONST(0.146730467677116) },
426 { FRAC_CONST(0.975702106952667), FRAC_CONST(0.219101235270500) },
427 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
428 { FRAC_CONST(0.932992815971375), FRAC_CONST(0.359895050525665) },
429 { FRAC_CONST(0.903989315032959), FRAC_CONST(0.427555084228516) },
430 { FRAC_CONST(0.870086967945099), FRAC_CONST(0.492898225784302) },
431 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
432 { FRAC_CONST(0.788346469402313), FRAC_CONST(0.615231573581696) },
433 { FRAC_CONST(0.740951120853424), FRAC_CONST(0.671558976173401) },
434 { FRAC_CONST(0.689540505409241), FRAC_CONST(0.724247097969055) },
435 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
436 { FRAC_CONST(0.575808227062225), FRAC_CONST(0.817584812641144) },
437 { FRAC_CONST(0.514102697372437), FRAC_CONST(0.857728660106659) },
438 { FRAC_CONST(0.449611306190491), FRAC_CONST(0.893224298954010) },
439 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
440 { FRAC_CONST(0.313681751489639), FRAC_CONST(0.949528157711029) },
441 { FRAC_CONST(0.242980241775513), FRAC_CONST(0.970031261444092) },
442 { FRAC_CONST(0.170961856842041), FRAC_CONST(0.985277652740479) },
443 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
444 { FRAC_CONST(0.024541255086660), FRAC_CONST(0.999698817729950) },
445 { FRAC_CONST(-0.049067739397287), FRAC_CONST(0.998795449733734) },
446 { FRAC_CONST(-0.122410707175732), FRAC_CONST(0.992479503154755) },
447 { FRAC_CONST(-0.195090323686600), FRAC_CONST(0.980785250663757) },
448 { FRAC_CONST(-0.266712725162506), FRAC_CONST(0.963776051998138) },
449 { FRAC_CONST(-0.336889803409576), FRAC_CONST(0.941544055938721) },
450 { FRAC_CONST(-0.405241340398788), FRAC_CONST(0.914209723472595) },
451 { FRAC_CONST(-0.471396833658218), FRAC_CONST(0.881921231746674) },
452 { FRAC_CONST(-0.534997701644897), FRAC_CONST(0.844853520393372) },
453 { FRAC_CONST(-0.595699369907379), FRAC_CONST(0.803207516670227) },
454 { FRAC_CONST(-0.653172850608826), FRAC_CONST(0.757208824157715) },
455 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
456 { FRAC_CONST(-0.757208824157715), FRAC_CONST(0.653172850608826) },
457 { FRAC_CONST(-0.803207516670227), FRAC_CONST(0.595699369907379) },
458 { FRAC_CONST(-0.844853520393372), FRAC_CONST(0.534997701644897) },
459 { FRAC_CONST(-0.881921231746674), FRAC_CONST(0.471396833658218) },
460 { FRAC_CONST(-0.914209783077240), FRAC_CONST(0.405241221189499) },
461 { FRAC_CONST(-0.941544115543365), FRAC_CONST(0.336889803409576) },
462 { FRAC_CONST(-0.963776051998138), FRAC_CONST(0.266712725162506) },
463 { FRAC_CONST(-0.980785310268402), FRAC_CONST(0.195090308785439) },
464 { FRAC_CONST(-0.992479503154755), FRAC_CONST(0.122410699725151) },
465 { FRAC_CONST(-0.998795449733734), FRAC_CONST(0.049067724496126) },
466 { FRAC_CONST(-0.999698817729950), FRAC_CONST(-0.024541147053242) },
467 { FRAC_CONST(-0.995184719562531), FRAC_CONST(-0.098017267882824) },
468 { FRAC_CONST(-0.985277652740479), FRAC_CONST(-0.170961990952492) },
469 { FRAC_CONST(-0.970031261444092), FRAC_CONST(-0.242980241775513) },
470 { FRAC_CONST(-0.949528157711029), FRAC_CONST(-0.313681781291962) },
471 { FRAC_CONST(-0.923879504203796), FRAC_CONST(-0.382683426141739) },
472 { FRAC_CONST(-0.893224298954010), FRAC_CONST(-0.449611306190491) },
473 { FRAC_CONST(-0.857728660106659), FRAC_CONST(-0.514102697372437) },
474 { FRAC_CONST(-0.817584872245789), FRAC_CONST(-0.575808107852936) },
475 { FRAC_CONST(-0.773010551929474), FRAC_CONST(-0.634393215179443) },
476 { FRAC_CONST(-0.724247038364410), FRAC_CONST(-0.689540624618530) },
477 { FRAC_CONST(-0.671558916568756), FRAC_CONST(-0.740951180458069) },
478 { FRAC_CONST(-0.615231573581696), FRAC_CONST(-0.788346469402313) },
479 { FRAC_CONST(-0.555570006370544), FRAC_CONST(-0.831469774246216) },
480 { FRAC_CONST(-0.492898195981979), FRAC_CONST(-0.870086967945099) },
481 { FRAC_CONST(-0.427554935216904), FRAC_CONST(-0.903989374637604) },
482 { FRAC_CONST(-0.359895110130310), FRAC_CONST(-0.932992756366730) },
483 { FRAC_CONST(-0.290284544229507), FRAC_CONST(-0.956940352916718) },
484 { FRAC_CONST(-0.219101369380951), FRAC_CONST(-0.975702106952667) },
485 { FRAC_CONST(-0.146730408072472), FRAC_CONST(-0.989176511764526) },
486 { FRAC_CONST(-0.073564760386944), FRAC_CONST(-0.997290432453156) },
487 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
488 { FRAC_CONST(0.995184719562531), FRAC_CONST(0.098017141222954) },
489 { FRAC_CONST(0.980785250663757), FRAC_CONST(0.195090323686600) },
490 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
491 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
492 { FRAC_CONST(0.881921231746674), FRAC_CONST(0.471396744251251) },
493 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
494 { FRAC_CONST(0.773010432720184), FRAC_CONST(0.634393334388733) },
495 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
496 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
497 { FRAC_CONST(0.555570185184479), FRAC_CONST(0.831469655036926) },
498 { FRAC_CONST(0.471396654844284), FRAC_CONST(0.881921291351318) },
499 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
500 { FRAC_CONST(0.290284633636475), FRAC_CONST(0.956940352916718) },
501 { FRAC_CONST(0.195090234279633), FRAC_CONST(0.980785310268402) },
502 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
503 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
504 { FRAC_CONST(0.980785250663757), FRAC_CONST(0.195090323686600) },
505 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
506 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
507 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
508 { FRAC_CONST(0.555570185184479), FRAC_CONST(0.831469655036926) },
509 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
510 { FRAC_CONST(0.195090234279633), FRAC_CONST(0.980785310268402) },
511 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
512 { FRAC_CONST(-0.195090323686600), FRAC_CONST(0.980785250663757) },
513 { FRAC_CONST(-0.382683515548706), FRAC_CONST(0.923879504203796) },
514 { FRAC_CONST(-0.555570363998413), FRAC_CONST(0.831469535827637) },
515 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
516 { FRAC_CONST(-0.831469655036926), FRAC_CONST(0.555570185184479) },
517 { FRAC_CONST(-0.923879623413086), FRAC_CONST(0.382683277130127) },
518 { FRAC_CONST(-0.980785310268402), FRAC_CONST(0.195090308785439) },
519 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
520 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
521 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
522 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
523 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
524 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
525 { FRAC_CONST(-0.195090323686600), FRAC_CONST(0.980785250663757) },
526 { FRAC_CONST(-0.471396833658218), FRAC_CONST(0.881921231746674) },
527 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
528 { FRAC_CONST(-0.881921231746674), FRAC_CONST(0.471396833658218) },
529 { FRAC_CONST(-0.980785310268402), FRAC_CONST(0.195090308785439) },
530 { FRAC_CONST(-0.995184719562531), FRAC_CONST(-0.098017267882824) },
531 { FRAC_CONST(-0.923879504203796), FRAC_CONST(-0.382683426141739) },
532 { FRAC_CONST(-0.773010551929474), FRAC_CONST(-0.634393215179443) },
533 { FRAC_CONST(-0.555570006370544), FRAC_CONST(-0.831469774246216) },
534 { FRAC_CONST(-0.290284544229507), FRAC_CONST(-0.956940352916718) },
535 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
536 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
537 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
538 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
539 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
540 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
541 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
542 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
543 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
544 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
545 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
546 { FRAC_CONST(-0.923879504203796), FRAC_CONST(-0.382683426141739) },
547 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
548 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
549 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
550 { FRAC_CONST(0.000000011924881), FRAC_CONST(-1.000000000000000) }
551};
552
553#ifdef ALLOW_SMALL_FRAMELENGTH
554ALIGN static const complex_t cfft_tab_480[] =
555{
556 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
557 { FRAC_CONST(0.999914348125458), FRAC_CONST(0.013089596293867) },
558 { FRAC_CONST(0.999657332897186), FRAC_CONST(0.026176949962974) },
559 { FRAC_CONST(0.999229013919830), FRAC_CONST(0.039259817451239) },
560 { FRAC_CONST(0.998629510402679), FRAC_CONST(0.052335958927870) },
561 { FRAC_CONST(0.997858941555023), FRAC_CONST(0.065403133630753) },
562 { FRAC_CONST(0.996917307376862), FRAC_CONST(0.078459098935127) },
563 { FRAC_CONST(0.995804905891418), FRAC_CONST(0.091501623392105) },
564 { FRAC_CONST(0.994521915912628), FRAC_CONST(0.104528464376926) },
565 { FRAC_CONST(0.993068456649780), FRAC_CONST(0.117537401616573) },
566 { FRAC_CONST(0.991444885730743), FRAC_CONST(0.130526199936867) },
567 { FRAC_CONST(0.989651381969452), FRAC_CONST(0.143492624163628) },
568 { FRAC_CONST(0.987688362598419), FRAC_CONST(0.156434476375580) },
569 { FRAC_CONST(0.985556066036224), FRAC_CONST(0.169349506497383) },
570 { FRAC_CONST(0.983254909515381), FRAC_CONST(0.182235524058342) },
571 { FRAC_CONST(0.980785250663757), FRAC_CONST(0.195090323686600) },
572 { FRAC_CONST(0.978147625923157), FRAC_CONST(0.207911700010300) },
573 { FRAC_CONST(0.975342333316803), FRAC_CONST(0.220697447657585) },
574 { FRAC_CONST(0.972369909286499), FRAC_CONST(0.233445376157761) },
575 { FRAC_CONST(0.969230890274048), FRAC_CONST(0.246153295040131) },
576 { FRAC_CONST(0.965925812721252), FRAC_CONST(0.258819043636322) },
577 { FRAC_CONST(0.962455213069916), FRAC_CONST(0.271440446376801) },
578 { FRAC_CONST(0.958819746971130), FRAC_CONST(0.284015357494354) },
579 { FRAC_CONST(0.955019950866699), FRAC_CONST(0.296541601419449) },
580 { FRAC_CONST(0.951056540012360), FRAC_CONST(0.309017002582550) },
581 { FRAC_CONST(0.946930110454559), FRAC_CONST(0.321439445018768) },
582 { FRAC_CONST(0.942641496658325), FRAC_CONST(0.333806872367859) },
583 { FRAC_CONST(0.938191354274750), FRAC_CONST(0.346117079257965) },
584 { FRAC_CONST(0.933580398559570), FRAC_CONST(0.358367949724197) },
585 { FRAC_CONST(0.928809583187103), FRAC_CONST(0.370557427406311) },
586 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
587 { FRAC_CONST(0.918791174888611), FRAC_CONST(0.394743889570236) },
588 { FRAC_CONST(0.913545429706573), FRAC_CONST(0.406736642122269) },
589 { FRAC_CONST(0.908143162727356), FRAC_CONST(0.418659746646881) },
590 { FRAC_CONST(0.902585268020630), FRAC_CONST(0.430511116981506) },
591 { FRAC_CONST(0.896872758865356), FRAC_CONST(0.442288726568222) },
592 { FRAC_CONST(0.891006529331207), FRAC_CONST(0.453990519046783) },
593 { FRAC_CONST(0.884987652301788), FRAC_CONST(0.465614527463913) },
594 { FRAC_CONST(0.878817081451416), FRAC_CONST(0.477158784866333) },
595 { FRAC_CONST(0.872496008872986), FRAC_CONST(0.488621264696121) },
596 { FRAC_CONST(0.866025388240814), FRAC_CONST(0.500000000000000) },
597 { FRAC_CONST(0.859406411647797), FRAC_CONST(0.511293113231659) },
598 { FRAC_CONST(0.852640151977539), FRAC_CONST(0.522498548030853) },
599 { FRAC_CONST(0.845727801322937), FRAC_CONST(0.533614516258240) },
600 { FRAC_CONST(0.838670551776886), FRAC_CONST(0.544639050960541) },
601 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
602 { FRAC_CONST(0.824126183986664), FRAC_CONST(0.566406250000000) },
603 { FRAC_CONST(0.816641509532928), FRAC_CONST(0.577145218849182) },
604 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
605 { FRAC_CONST(0.801253795623779), FRAC_CONST(0.598324596881866) },
606 { FRAC_CONST(0.793353319168091), FRAC_CONST(0.608761429786682) },
607 { FRAC_CONST(0.785316884517670), FRAC_CONST(0.619093954563141) },
608 { FRAC_CONST(0.777145922183990), FRAC_CONST(0.629320383071899) },
609 { FRAC_CONST(0.768841803073883), FRAC_CONST(0.639438986778259) },
610 { FRAC_CONST(0.760405957698822), FRAC_CONST(0.649448096752167) },
611 { FRAC_CONST(0.751839756965637), FRAC_CONST(0.659345865249634) },
612 { FRAC_CONST(0.743144810199738), FRAC_CONST(0.669130623340607) },
613 { FRAC_CONST(0.734322488307953), FRAC_CONST(0.678800761699677) },
614 { FRAC_CONST(0.725374400615692), FRAC_CONST(0.688354551792145) },
615 { FRAC_CONST(0.716301918029785), FRAC_CONST(0.697790503501892) },
616 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
617 { FRAC_CONST(0.697790443897247), FRAC_CONST(0.716301977634430) },
618 { FRAC_CONST(0.688354551792145), FRAC_CONST(0.725374400615692) },
619 { FRAC_CONST(0.678800702095032), FRAC_CONST(0.734322547912598) },
620 { FRAC_CONST(0.669130563735962), FRAC_CONST(0.743144869804382) },
621 { FRAC_CONST(0.659345805644989), FRAC_CONST(0.751839816570282) },
622 { FRAC_CONST(0.649448037147522), FRAC_CONST(0.760405957698822) },
623 { FRAC_CONST(0.639438986778259), FRAC_CONST(0.768841862678528) },
624 { FRAC_CONST(0.629320383071899), FRAC_CONST(0.777145981788635) },
625 { FRAC_CONST(0.619093954563141), FRAC_CONST(0.785316944122314) },
626 { FRAC_CONST(0.608761370182037), FRAC_CONST(0.793353378772736) },
627 { FRAC_CONST(0.598324596881866), FRAC_CONST(0.801253855228424) },
628 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
629 { FRAC_CONST(0.577145159244537), FRAC_CONST(0.816641569137573) },
630 { FRAC_CONST(0.566406250000000), FRAC_CONST(0.824126183986664) },
631 { FRAC_CONST(0.555570185184479), FRAC_CONST(0.831469655036926) },
632 { FRAC_CONST(0.544638991355896), FRAC_CONST(0.838670611381531) },
633 { FRAC_CONST(0.533614516258240), FRAC_CONST(0.845727801322937) },
634 { FRAC_CONST(0.522498488426209), FRAC_CONST(0.852640211582184) },
635 { FRAC_CONST(0.511293113231659), FRAC_CONST(0.859406411647797) },
636 { FRAC_CONST(0.499999970197678), FRAC_CONST(0.866025447845459) },
637 { FRAC_CONST(0.488621175289154), FRAC_CONST(0.872496068477631) },
638 { FRAC_CONST(0.477158755064011), FRAC_CONST(0.878817141056061) },
639 { FRAC_CONST(0.465614467859268), FRAC_CONST(0.884987652301788) },
640 { FRAC_CONST(0.453990519046783), FRAC_CONST(0.891006529331207) },
641 { FRAC_CONST(0.442288666963577), FRAC_CONST(0.896872758865356) },
642 { FRAC_CONST(0.430511027574539), FRAC_CONST(0.902585327625275) },
643 { FRAC_CONST(0.418659746646881), FRAC_CONST(0.908143162727356) },
644 { FRAC_CONST(0.406736612319946), FRAC_CONST(0.913545489311218) },
645 { FRAC_CONST(0.394743800163269), FRAC_CONST(0.918791234493256) },
646 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
647 { FRAC_CONST(0.370557397603989), FRAC_CONST(0.928809583187103) },
648 { FRAC_CONST(0.358367860317230), FRAC_CONST(0.933580458164215) },
649 { FRAC_CONST(0.346117049455643), FRAC_CONST(0.938191354274750) },
650 { FRAC_CONST(0.333806812763214), FRAC_CONST(0.942641496658325) },
651 { FRAC_CONST(0.321439474821091), FRAC_CONST(0.946930110454559) },
652 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
653 { FRAC_CONST(0.296541512012482), FRAC_CONST(0.955019950866699) },
654 { FRAC_CONST(0.284015327692032), FRAC_CONST(0.958819746971130) },
655 { FRAC_CONST(0.271440386772156), FRAC_CONST(0.962455272674561) },
656 { FRAC_CONST(0.258819073438644), FRAC_CONST(0.965925812721252) },
657 { FRAC_CONST(0.246153265237808), FRAC_CONST(0.969230890274048) },
658 { FRAC_CONST(0.233445301651955), FRAC_CONST(0.972369909286499) },
659 { FRAC_CONST(0.220697447657585), FRAC_CONST(0.975342333316803) },
660 { FRAC_CONST(0.207911655306816), FRAC_CONST(0.978147625923157) },
661 { FRAC_CONST(0.195090234279633), FRAC_CONST(0.980785310268402) },
662 { FRAC_CONST(0.182235524058342), FRAC_CONST(0.983254909515381) },
663 { FRAC_CONST(0.169349446892738), FRAC_CONST(0.985556066036224) },
664 { FRAC_CONST(0.156434372067451), FRAC_CONST(0.987688362598419) },
665 { FRAC_CONST(0.143492594361305), FRAC_CONST(0.989651381969452) },
666 { FRAC_CONST(0.130526125431061), FRAC_CONST(0.991444885730743) },
667 { FRAC_CONST(0.117537401616573), FRAC_CONST(0.993068456649780) },
668 { FRAC_CONST(0.104528419673443), FRAC_CONST(0.994521915912628) },
669 { FRAC_CONST(0.091501533985138), FRAC_CONST(0.995804905891418) },
670 { FRAC_CONST(0.078459084033966), FRAC_CONST(0.996917307376862) },
671 { FRAC_CONST(0.065403074026108), FRAC_CONST(0.997858941555023) },
672 { FRAC_CONST(0.052335973829031), FRAC_CONST(0.998629510402679) },
673 { FRAC_CONST(0.039259787648916), FRAC_CONST(0.999229013919830) },
674 { FRAC_CONST(0.026176875457168), FRAC_CONST(0.999657332897186) },
675 { FRAC_CONST(0.013089597225189), FRAC_CONST(0.999914348125458) },
676 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
677 { FRAC_CONST(-0.013089684769511), FRAC_CONST(0.999914348125458) },
678 { FRAC_CONST(-0.026176963001490), FRAC_CONST(0.999657332897186) },
679 { FRAC_CONST(-0.039259877055883), FRAC_CONST(0.999229013919830) },
680 { FRAC_CONST(-0.052336059510708), FRAC_CONST(0.998629510402679) },
681 { FRAC_CONST(-0.065403163433075), FRAC_CONST(0.997858941555023) },
682 { FRAC_CONST(-0.078459173440933), FRAC_CONST(0.996917307376862) },
683 { FRAC_CONST(-0.091501623392105), FRAC_CONST(0.995804905891418) },
684 { FRAC_CONST(-0.104528509080410), FRAC_CONST(0.994521915912628) },
685 { FRAC_CONST(-0.117537491023541), FRAC_CONST(0.993068456649780) },
686 { FRAC_CONST(-0.130526214838028), FRAC_CONST(0.991444885730743) },
687 { FRAC_CONST(-0.143492683768272), FRAC_CONST(0.989651381969452) },
688 { FRAC_CONST(-0.156434446573257), FRAC_CONST(0.987688362598419) },
689 { FRAC_CONST(-0.169349536299706), FRAC_CONST(0.985556066036224) },
690 { FRAC_CONST(-0.182235598564148), FRAC_CONST(0.983254909515381) },
691 { FRAC_CONST(-0.195090323686600), FRAC_CONST(0.980785250663757) },
692 { FRAC_CONST(-0.207911744713783), FRAC_CONST(0.978147566318512) },
693 { FRAC_CONST(-0.220697522163391), FRAC_CONST(0.975342273712158) },
694 { FRAC_CONST(-0.233445391058922), FRAC_CONST(0.972369909286499) },
695 { FRAC_CONST(-0.246153354644775), FRAC_CONST(0.969230890274048) },
696 { FRAC_CONST(-0.258819162845612), FRAC_CONST(0.965925812721252) },
697 { FRAC_CONST(-0.271440476179123), FRAC_CONST(0.962455213069916) },
698 { FRAC_CONST(-0.284015417098999), FRAC_CONST(0.958819687366486) },
699 { FRAC_CONST(-0.296541571617126), FRAC_CONST(0.955019950866699) },
700 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
701 { FRAC_CONST(-0.321439564228058), FRAC_CONST(0.946930110454559) },
702 { FRAC_CONST(-0.333806872367859), FRAC_CONST(0.942641496658325) },
703 { FRAC_CONST(-0.346117109060287), FRAC_CONST(0.938191294670105) },
704 { FRAC_CONST(-0.358367949724197), FRAC_CONST(0.933580458164215) },
705 { FRAC_CONST(-0.370557487010956), FRAC_CONST(0.928809523582459) },
706 { FRAC_CONST(-0.382683515548706), FRAC_CONST(0.923879504203796) },
707 { FRAC_CONST(-0.394743859767914), FRAC_CONST(0.918791234493256) },
708 { FRAC_CONST(-0.406736701726913), FRAC_CONST(0.913545429706573) },
709 { FRAC_CONST(-0.418659836053848), FRAC_CONST(0.908143103122711) },
710 { FRAC_CONST(-0.430511116981506), FRAC_CONST(0.902585268020630) },
711 { FRAC_CONST(-0.442288637161255), FRAC_CONST(0.896872758865356) },
712 { FRAC_CONST(-0.453990608453751), FRAC_CONST(0.891006469726563) },
713 { FRAC_CONST(-0.465614557266235), FRAC_CONST(0.884987592697144) },
714 { FRAC_CONST(-0.477158725261688), FRAC_CONST(0.878817141056061) },
715 { FRAC_CONST(-0.488621354103088), FRAC_CONST(0.872495949268341) },
716 { FRAC_CONST(-0.500000059604645), FRAC_CONST(0.866025388240814) },
717 { FRAC_CONST(-0.511293053627014), FRAC_CONST(0.859406411647797) },
718 { FRAC_CONST(-0.522498667240143), FRAC_CONST(0.852640092372894) },
719 { FRAC_CONST(-0.533614575862885), FRAC_CONST(0.845727801322937) },
720 { FRAC_CONST(-0.544639050960541), FRAC_CONST(0.838670551776886) },
721 { FRAC_CONST(-0.555570363998413), FRAC_CONST(0.831469535827637) },
722 { FRAC_CONST(-0.566406309604645), FRAC_CONST(0.824126124382019) },
723 { FRAC_CONST(-0.577145218849182), FRAC_CONST(0.816641569137573) },
724 { FRAC_CONST(-0.587785184383392), FRAC_CONST(0.809017002582550) },
725 { FRAC_CONST(-0.598324656486511), FRAC_CONST(0.801253736019135) },
726 { FRAC_CONST(-0.608761429786682), FRAC_CONST(0.793353319168091) },
727 { FRAC_CONST(-0.619093894958496), FRAC_CONST(0.785316944122314) },
728 { FRAC_CONST(-0.629320502281189), FRAC_CONST(0.777145862579346) },
729 { FRAC_CONST(-0.639439046382904), FRAC_CONST(0.768841803073883) },
730 { FRAC_CONST(-0.649448037147522), FRAC_CONST(0.760405957698822) },
731 { FRAC_CONST(-0.659345924854279), FRAC_CONST(0.751839697360992) },
732 { FRAC_CONST(-0.669130682945251), FRAC_CONST(0.743144810199738) },
733 { FRAC_CONST(-0.678800761699677), FRAC_CONST(0.734322488307953) },
734 { FRAC_CONST(-0.688354671001434), FRAC_CONST(0.725374281406403) },
735 { FRAC_CONST(-0.697790503501892), FRAC_CONST(0.716301858425140) },
736 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
737 { FRAC_CONST(-0.716302037239075), FRAC_CONST(0.697790324687958) },
738 { FRAC_CONST(-0.725374460220337), FRAC_CONST(0.688354492187500) },
739 { FRAC_CONST(-0.734322547912598), FRAC_CONST(0.678800702095032) },
740 { FRAC_CONST(-0.743144929409027), FRAC_CONST(0.669130444526672) },
741 { FRAC_CONST(-0.751839876174927), FRAC_CONST(0.659345746040344) },
742 { FRAC_CONST(-0.760406017303467), FRAC_CONST(0.649448037147522) },
743 { FRAC_CONST(-0.768841803073883), FRAC_CONST(0.639439046382904) },
744 { FRAC_CONST(-0.777146041393280), FRAC_CONST(0.629320263862610) },
745 { FRAC_CONST(-0.785316944122314), FRAC_CONST(0.619093894958496) },
746 { FRAC_CONST(-0.793353319168091), FRAC_CONST(0.608761429786682) },
747 { FRAC_CONST(-0.801253914833069), FRAC_CONST(0.598324477672577) },
748 { FRAC_CONST(-0.809017062187195), FRAC_CONST(0.587785184383392) },
749 { FRAC_CONST(-0.816641569137573), FRAC_CONST(0.577145218849182) },
750 { FRAC_CONST(-0.824126303195953), FRAC_CONST(0.566406130790710) },
751 { FRAC_CONST(-0.831469655036926), FRAC_CONST(0.555570185184479) },
752 { FRAC_CONST(-0.838670551776886), FRAC_CONST(0.544639050960541) },
753 { FRAC_CONST(-0.845727920532227), FRAC_CONST(0.533614337444305) },
754 { FRAC_CONST(-0.852640211582184), FRAC_CONST(0.522498488426209) },
755 { FRAC_CONST(-0.859406411647797), FRAC_CONST(0.511293053627014) },
756 { FRAC_CONST(-0.866025388240814), FRAC_CONST(0.500000059604645) },
757 { FRAC_CONST(-0.872496068477631), FRAC_CONST(0.488621145486832) },
758 { FRAC_CONST(-0.878817141056061), FRAC_CONST(0.477158725261688) },
759 { FRAC_CONST(-0.884987652301788), FRAC_CONST(0.465614557266235) },
760 { FRAC_CONST(-0.891006588935852), FRAC_CONST(0.453990370035172) },
761 { FRAC_CONST(-0.896872758865356), FRAC_CONST(0.442288637161255) },
762 { FRAC_CONST(-0.902585268020630), FRAC_CONST(0.430511116981506) },
763 { FRAC_CONST(-0.908143222332001), FRAC_CONST(0.418659597635269) },
764 { FRAC_CONST(-0.913545489311218), FRAC_CONST(0.406736582517624) },
765 { FRAC_CONST(-0.918791234493256), FRAC_CONST(0.394743859767914) },
766 { FRAC_CONST(-0.923879623413086), FRAC_CONST(0.382683277130127) },
767 { FRAC_CONST(-0.928809583187103), FRAC_CONST(0.370557337999344) },
768 { FRAC_CONST(-0.933580458164215), FRAC_CONST(0.358367919921875) },
769 { FRAC_CONST(-0.938191413879395), FRAC_CONST(0.346116900444031) },
770 { FRAC_CONST(-0.942641556262970), FRAC_CONST(0.333806753158569) },
771 { FRAC_CONST(-0.946930170059204), FRAC_CONST(0.321439445018768) },
772 { FRAC_CONST(-0.951056599617004), FRAC_CONST(0.309016793966293) },
773 { FRAC_CONST(-0.955020010471344), FRAC_CONST(0.296541452407837) },
774 { FRAC_CONST(-0.958819746971130), FRAC_CONST(0.284015297889709) },
775 { FRAC_CONST(-0.962455213069916), FRAC_CONST(0.271440476179123) },
776 { FRAC_CONST(-0.965925872325897), FRAC_CONST(0.258818924427032) },
777 { FRAC_CONST(-0.969230949878693), FRAC_CONST(0.246153235435486) },
778 { FRAC_CONST(-0.972369909286499), FRAC_CONST(0.233445376157761) },
779 { FRAC_CONST(-0.975342333316803), FRAC_CONST(0.220697283744812) },
780 { FRAC_CONST(-0.978147625923157), FRAC_CONST(0.207911610603333) },
781 { FRAC_CONST(-0.980785310268402), FRAC_CONST(0.195090308785439) },
782 { FRAC_CONST(-0.983254909515381), FRAC_CONST(0.182235360145569) },
783 { FRAC_CONST(-0.985556066036224), FRAC_CONST(0.169349402189255) },
784 { FRAC_CONST(-0.987688362598419), FRAC_CONST(0.156434446573257) },
785 { FRAC_CONST(-0.989651441574097), FRAC_CONST(0.143492430448532) },
786 { FRAC_CONST(-0.991444885730743), FRAC_CONST(0.130526080727577) },
787 { FRAC_CONST(-0.993068456649780), FRAC_CONST(0.117537356913090) },
788 { FRAC_CONST(-0.994521915912628), FRAC_CONST(0.104528494179249) },
789 { FRAC_CONST(-0.995804965496063), FRAC_CONST(0.091501489281654) },
790 { FRAC_CONST(-0.996917366981506), FRAC_CONST(0.078459039330482) },
791 { FRAC_CONST(-0.997858941555023), FRAC_CONST(0.065403148531914) },
792 { FRAC_CONST(-0.998629570007324), FRAC_CONST(0.052335809916258) },
793 { FRAC_CONST(-0.999229013919830), FRAC_CONST(0.039259742945433) },
794 { FRAC_CONST(-0.999657332897186), FRAC_CONST(0.026176951825619) },
795 { FRAC_CONST(-0.999914348125458), FRAC_CONST(0.013089434243739) },
796 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
797 { FRAC_CONST(0.999657332897186), FRAC_CONST(0.026176949962974) },
798 { FRAC_CONST(0.998629510402679), FRAC_CONST(0.052335958927870) },
799 { FRAC_CONST(0.996917307376862), FRAC_CONST(0.078459098935127) },
800 { FRAC_CONST(0.994521915912628), FRAC_CONST(0.104528464376926) },
801 { FRAC_CONST(0.991444885730743), FRAC_CONST(0.130526199936867) },
802 { FRAC_CONST(0.987688362598419), FRAC_CONST(0.156434476375580) },
803 { FRAC_CONST(0.983254909515381), FRAC_CONST(0.182235524058342) },
804 { FRAC_CONST(0.978147625923157), FRAC_CONST(0.207911700010300) },
805 { FRAC_CONST(0.972369909286499), FRAC_CONST(0.233445376157761) },
806 { FRAC_CONST(0.965925812721252), FRAC_CONST(0.258819043636322) },
807 { FRAC_CONST(0.958819746971130), FRAC_CONST(0.284015357494354) },
808 { FRAC_CONST(0.951056540012360), FRAC_CONST(0.309017002582550) },
809 { FRAC_CONST(0.942641496658325), FRAC_CONST(0.333806872367859) },
810 { FRAC_CONST(0.933580398559570), FRAC_CONST(0.358367949724197) },
811 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
812 { FRAC_CONST(0.913545429706573), FRAC_CONST(0.406736642122269) },
813 { FRAC_CONST(0.902585268020630), FRAC_CONST(0.430511116981506) },
814 { FRAC_CONST(0.891006529331207), FRAC_CONST(0.453990519046783) },
815 { FRAC_CONST(0.878817081451416), FRAC_CONST(0.477158784866333) },
816 { FRAC_CONST(0.866025388240814), FRAC_CONST(0.500000000000000) },
817 { FRAC_CONST(0.852640151977539), FRAC_CONST(0.522498548030853) },
818 { FRAC_CONST(0.838670551776886), FRAC_CONST(0.544639050960541) },
819 { FRAC_CONST(0.824126183986664), FRAC_CONST(0.566406250000000) },
820 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
821 { FRAC_CONST(0.793353319168091), FRAC_CONST(0.608761429786682) },
822 { FRAC_CONST(0.777145922183990), FRAC_CONST(0.629320383071899) },
823 { FRAC_CONST(0.760405957698822), FRAC_CONST(0.649448096752167) },
824 { FRAC_CONST(0.743144810199738), FRAC_CONST(0.669130623340607) },
825 { FRAC_CONST(0.725374400615692), FRAC_CONST(0.688354551792145) },
826 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
827 { FRAC_CONST(0.688354551792145), FRAC_CONST(0.725374400615692) },
828 { FRAC_CONST(0.669130563735962), FRAC_CONST(0.743144869804382) },
829 { FRAC_CONST(0.649448037147522), FRAC_CONST(0.760405957698822) },
830 { FRAC_CONST(0.629320383071899), FRAC_CONST(0.777145981788635) },
831 { FRAC_CONST(0.608761370182037), FRAC_CONST(0.793353378772736) },
832 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
833 { FRAC_CONST(0.566406250000000), FRAC_CONST(0.824126183986664) },
834 { FRAC_CONST(0.544638991355896), FRAC_CONST(0.838670611381531) },
835 { FRAC_CONST(0.522498488426209), FRAC_CONST(0.852640211582184) },
836 { FRAC_CONST(0.499999970197678), FRAC_CONST(0.866025447845459) },
837 { FRAC_CONST(0.477158755064011), FRAC_CONST(0.878817141056061) },
838 { FRAC_CONST(0.453990519046783), FRAC_CONST(0.891006529331207) },
839 { FRAC_CONST(0.430511027574539), FRAC_CONST(0.902585327625275) },
840 { FRAC_CONST(0.406736612319946), FRAC_CONST(0.913545489311218) },
841 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
842 { FRAC_CONST(0.358367860317230), FRAC_CONST(0.933580458164215) },
843 { FRAC_CONST(0.333806812763214), FRAC_CONST(0.942641496658325) },
844 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
845 { FRAC_CONST(0.284015327692032), FRAC_CONST(0.958819746971130) },
846 { FRAC_CONST(0.258819073438644), FRAC_CONST(0.965925812721252) },
847 { FRAC_CONST(0.233445301651955), FRAC_CONST(0.972369909286499) },
848 { FRAC_CONST(0.207911655306816), FRAC_CONST(0.978147625923157) },
849 { FRAC_CONST(0.182235524058342), FRAC_CONST(0.983254909515381) },
850 { FRAC_CONST(0.156434372067451), FRAC_CONST(0.987688362598419) },
851 { FRAC_CONST(0.130526125431061), FRAC_CONST(0.991444885730743) },
852 { FRAC_CONST(0.104528419673443), FRAC_CONST(0.994521915912628) },
853 { FRAC_CONST(0.078459084033966), FRAC_CONST(0.996917307376862) },
854 { FRAC_CONST(0.052335973829031), FRAC_CONST(0.998629510402679) },
855 { FRAC_CONST(0.026176875457168), FRAC_CONST(0.999657332897186) },
856 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
857 { FRAC_CONST(-0.026176963001490), FRAC_CONST(0.999657332897186) },
858 { FRAC_CONST(-0.052336059510708), FRAC_CONST(0.998629510402679) },
859 { FRAC_CONST(-0.078459173440933), FRAC_CONST(0.996917307376862) },
860 { FRAC_CONST(-0.104528509080410), FRAC_CONST(0.994521915912628) },
861 { FRAC_CONST(-0.130526214838028), FRAC_CONST(0.991444885730743) },
862 { FRAC_CONST(-0.156434446573257), FRAC_CONST(0.987688362598419) },
863 { FRAC_CONST(-0.182235598564148), FRAC_CONST(0.983254909515381) },
864 { FRAC_CONST(-0.207911744713783), FRAC_CONST(0.978147566318512) },
865 { FRAC_CONST(-0.233445391058922), FRAC_CONST(0.972369909286499) },
866 { FRAC_CONST(-0.258819162845612), FRAC_CONST(0.965925812721252) },
867 { FRAC_CONST(-0.284015417098999), FRAC_CONST(0.958819687366486) },
868 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
869 { FRAC_CONST(-0.333806872367859), FRAC_CONST(0.942641496658325) },
870 { FRAC_CONST(-0.358367949724197), FRAC_CONST(0.933580458164215) },
871 { FRAC_CONST(-0.382683515548706), FRAC_CONST(0.923879504203796) },
872 { FRAC_CONST(-0.406736701726913), FRAC_CONST(0.913545429706573) },
873 { FRAC_CONST(-0.430511116981506), FRAC_CONST(0.902585268020630) },
874 { FRAC_CONST(-0.453990608453751), FRAC_CONST(0.891006469726563) },
875 { FRAC_CONST(-0.477158725261688), FRAC_CONST(0.878817141056061) },
876 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
877 { FRAC_CONST(0.998629510402679), FRAC_CONST(0.052335958927870) },
878 { FRAC_CONST(0.994521915912628), FRAC_CONST(0.104528464376926) },
879 { FRAC_CONST(0.987688362598419), FRAC_CONST(0.156434476375580) },
880 { FRAC_CONST(0.978147625923157), FRAC_CONST(0.207911700010300) },
881 { FRAC_CONST(0.965925812721252), FRAC_CONST(0.258819043636322) },
882 { FRAC_CONST(0.951056540012360), FRAC_CONST(0.309017002582550) },
883 { FRAC_CONST(0.933580398559570), FRAC_CONST(0.358367949724197) },
884 { FRAC_CONST(0.913545429706573), FRAC_CONST(0.406736642122269) },
885 { FRAC_CONST(0.891006529331207), FRAC_CONST(0.453990519046783) },
886 { FRAC_CONST(0.866025388240814), FRAC_CONST(0.500000000000000) },
887 { FRAC_CONST(0.838670551776886), FRAC_CONST(0.544639050960541) },
888 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
889 { FRAC_CONST(0.777145922183990), FRAC_CONST(0.629320383071899) },
890 { FRAC_CONST(0.743144810199738), FRAC_CONST(0.669130623340607) },
891 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
892 { FRAC_CONST(0.669130563735962), FRAC_CONST(0.743144869804382) },
893 { FRAC_CONST(0.629320383071899), FRAC_CONST(0.777145981788635) },
894 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
895 { FRAC_CONST(0.544638991355896), FRAC_CONST(0.838670611381531) },
896 { FRAC_CONST(0.499999970197678), FRAC_CONST(0.866025447845459) },
897 { FRAC_CONST(0.453990519046783), FRAC_CONST(0.891006529331207) },
898 { FRAC_CONST(0.406736612319946), FRAC_CONST(0.913545489311218) },
899 { FRAC_CONST(0.358367860317230), FRAC_CONST(0.933580458164215) },
900 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
901 { FRAC_CONST(0.258819073438644), FRAC_CONST(0.965925812721252) },
902 { FRAC_CONST(0.207911655306816), FRAC_CONST(0.978147625923157) },
903 { FRAC_CONST(0.156434372067451), FRAC_CONST(0.987688362598419) },
904 { FRAC_CONST(0.104528419673443), FRAC_CONST(0.994521915912628) },
905 { FRAC_CONST(0.052335973829031), FRAC_CONST(0.998629510402679) },
906 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
907 { FRAC_CONST(-0.052336059510708), FRAC_CONST(0.998629510402679) },
908 { FRAC_CONST(-0.104528509080410), FRAC_CONST(0.994521915912628) },
909 { FRAC_CONST(-0.156434446573257), FRAC_CONST(0.987688362598419) },
910 { FRAC_CONST(-0.207911744713783), FRAC_CONST(0.978147566318512) },
911 { FRAC_CONST(-0.258819162845612), FRAC_CONST(0.965925812721252) },
912 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
913 { FRAC_CONST(-0.358367949724197), FRAC_CONST(0.933580458164215) },
914 { FRAC_CONST(-0.406736701726913), FRAC_CONST(0.913545429706573) },
915 { FRAC_CONST(-0.453990608453751), FRAC_CONST(0.891006469726563) },
916 { FRAC_CONST(-0.500000059604645), FRAC_CONST(0.866025388240814) },
917 { FRAC_CONST(-0.544639050960541), FRAC_CONST(0.838670551776886) },
918 { FRAC_CONST(-0.587785184383392), FRAC_CONST(0.809017002582550) },
919 { FRAC_CONST(-0.629320502281189), FRAC_CONST(0.777145862579346) },
920 { FRAC_CONST(-0.669130682945251), FRAC_CONST(0.743144810199738) },
921 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
922 { FRAC_CONST(-0.743144929409027), FRAC_CONST(0.669130444526672) },
923 { FRAC_CONST(-0.777146041393280), FRAC_CONST(0.629320263862610) },
924 { FRAC_CONST(-0.809017062187195), FRAC_CONST(0.587785184383392) },
925 { FRAC_CONST(-0.838670551776886), FRAC_CONST(0.544639050960541) },
926 { FRAC_CONST(-0.866025388240814), FRAC_CONST(0.500000059604645) },
927 { FRAC_CONST(-0.891006588935852), FRAC_CONST(0.453990370035172) },
928 { FRAC_CONST(-0.913545489311218), FRAC_CONST(0.406736582517624) },
929 { FRAC_CONST(-0.933580458164215), FRAC_CONST(0.358367919921875) },
930 { FRAC_CONST(-0.951056599617004), FRAC_CONST(0.309016793966293) },
931 { FRAC_CONST(-0.965925872325897), FRAC_CONST(0.258818924427032) },
932 { FRAC_CONST(-0.978147625923157), FRAC_CONST(0.207911610603333) },
933 { FRAC_CONST(-0.987688362598419), FRAC_CONST(0.156434446573257) },
934 { FRAC_CONST(-0.994521915912628), FRAC_CONST(0.104528494179249) },
935 { FRAC_CONST(-0.998629570007324), FRAC_CONST(0.052335809916258) },
936 { FRAC_CONST(-1.000000000000000), FRAC_CONST(-0.000000087422777) },
937 { FRAC_CONST(-0.998629510402679), FRAC_CONST(-0.052335985004902) },
938 { FRAC_CONST(-0.994521856307983), FRAC_CONST(-0.104528672993183) },
939 { FRAC_CONST(-0.987688302993774), FRAC_CONST(-0.156434610486031) },
940 { FRAC_CONST(-0.978147566318512), FRAC_CONST(-0.207911789417267) },
941 { FRAC_CONST(-0.965925812721252), FRAC_CONST(-0.258819073438644) },
942 { FRAC_CONST(-0.951056540012360), FRAC_CONST(-0.309016972780228) },
943 { FRAC_CONST(-0.933580398559570), FRAC_CONST(-0.358368098735809) },
944 { FRAC_CONST(-0.913545429706573), FRAC_CONST(-0.406736731529236) },
945 { FRAC_CONST(-0.891006529331207), FRAC_CONST(-0.453990548849106) },
946 { FRAC_CONST(-0.866025269031525), FRAC_CONST(-0.500000178813934) },
947 { FRAC_CONST(-0.838670492172241), FRAC_CONST(-0.544639170169830) },
948 { FRAC_CONST(-0.809016942977905), FRAC_CONST(-0.587785363197327) },
949 { FRAC_CONST(-0.777145922183990), FRAC_CONST(-0.629320442676544) },
950 { FRAC_CONST(-0.743144810199738), FRAC_CONST(-0.669130623340607) },
951 { FRAC_CONST(-0.707106649875641), FRAC_CONST(-0.707106888294220) },
952 { FRAC_CONST(-0.669130504131317), FRAC_CONST(-0.743144869804382) },
953 { FRAC_CONST(-0.629320323467255), FRAC_CONST(-0.777145981788635) },
954 { FRAC_CONST(-0.587785065174103), FRAC_CONST(-0.809017121791840) },
955 { FRAC_CONST(-0.544639110565186), FRAC_CONST(-0.838670551776886) },
956 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
957 { FRAC_CONST(0.996917307376862), FRAC_CONST(0.078459098935127) },
958 { FRAC_CONST(0.987688362598419), FRAC_CONST(0.156434476375580) },
959 { FRAC_CONST(0.972369909286499), FRAC_CONST(0.233445376157761) },
960 { FRAC_CONST(0.951056540012360), FRAC_CONST(0.309017002582550) },
961 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
962 { FRAC_CONST(0.891006529331207), FRAC_CONST(0.453990519046783) },
963 { FRAC_CONST(0.852640151977539), FRAC_CONST(0.522498548030853) },
964 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
965 { FRAC_CONST(0.760405957698822), FRAC_CONST(0.649448096752167) },
966 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
967 { FRAC_CONST(0.649448037147522), FRAC_CONST(0.760405957698822) },
968 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
969 { FRAC_CONST(0.522498488426209), FRAC_CONST(0.852640211582184) },
970 { FRAC_CONST(0.453990519046783), FRAC_CONST(0.891006529331207) },
971 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
972 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
973 { FRAC_CONST(0.233445301651955), FRAC_CONST(0.972369909286499) },
974 { FRAC_CONST(0.156434372067451), FRAC_CONST(0.987688362598419) },
975 { FRAC_CONST(0.078459084033966), FRAC_CONST(0.996917307376862) },
976 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
977 { FRAC_CONST(0.987688362598419), FRAC_CONST(0.156434476375580) },
978 { FRAC_CONST(0.951056540012360), FRAC_CONST(0.309017002582550) },
979 { FRAC_CONST(0.891006529331207), FRAC_CONST(0.453990519046783) },
980 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
981 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
982 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
983 { FRAC_CONST(0.453990519046783), FRAC_CONST(0.891006529331207) },
984 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
985 { FRAC_CONST(0.156434372067451), FRAC_CONST(0.987688362598419) },
986 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
987 { FRAC_CONST(-0.156434446573257), FRAC_CONST(0.987688362598419) },
988 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
989 { FRAC_CONST(-0.453990608453751), FRAC_CONST(0.891006469726563) },
990 { FRAC_CONST(-0.587785184383392), FRAC_CONST(0.809017002582550) },
991 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
992 { FRAC_CONST(-0.809017062187195), FRAC_CONST(0.587785184383392) },
993 { FRAC_CONST(-0.891006588935852), FRAC_CONST(0.453990370035172) },
994 { FRAC_CONST(-0.951056599617004), FRAC_CONST(0.309016793966293) },
995 { FRAC_CONST(-0.987688362598419), FRAC_CONST(0.156434446573257) },
996 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
997 { FRAC_CONST(0.972369909286499), FRAC_CONST(0.233445376157761) },
998 { FRAC_CONST(0.891006529331207), FRAC_CONST(0.453990519046783) },
999 { FRAC_CONST(0.760405957698822), FRAC_CONST(0.649448096752167) },
1000 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
1001 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1002 { FRAC_CONST(0.156434372067451), FRAC_CONST(0.987688362598419) },
1003 { FRAC_CONST(-0.078459173440933), FRAC_CONST(0.996917307376862) },
1004 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
1005 { FRAC_CONST(-0.522498667240143), FRAC_CONST(0.852640092372894) },
1006 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1007 { FRAC_CONST(-0.852640211582184), FRAC_CONST(0.522498488426209) },
1008 { FRAC_CONST(-0.951056599617004), FRAC_CONST(0.309016793966293) },
1009 { FRAC_CONST(-0.996917366981506), FRAC_CONST(0.078459039330482) },
1010 { FRAC_CONST(-0.987688302993774), FRAC_CONST(-0.156434610486031) },
1011 { FRAC_CONST(-0.923879504203796), FRAC_CONST(-0.382683426141739) },
1012 { FRAC_CONST(-0.809016942977905), FRAC_CONST(-0.587785363197327) },
1013 { FRAC_CONST(-0.649447917938232), FRAC_CONST(-0.760406076908112) },
1014 { FRAC_CONST(-0.453990221023560), FRAC_CONST(-0.891006648540497) },
1015 { FRAC_CONST(-0.233445450663567), FRAC_CONST(-0.972369909286499) },
1016 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1017 { FRAC_CONST(0.951056540012360), FRAC_CONST(0.309017002582550) },
1018 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
1019 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
1020 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
1021 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1022 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
1023 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
1024 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
1025 { FRAC_CONST(-0.809017062187195), FRAC_CONST(0.587785184383392) },
1026 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1027 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
1028 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
1029 { FRAC_CONST(-0.951056599617004), FRAC_CONST(0.309016793966293) },
1030 { FRAC_CONST(-0.809016942977905), FRAC_CONST(-0.587785363197327) },
1031 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1032 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1033 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1034 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1035 { FRAC_CONST(0.309017121791840), FRAC_CONST(-0.951056480407715) }
1036};
1037#endif
1038
1039ALIGN static const complex_t cfft_tab_64[] ICONST_ATTR =
1040{
1041 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1042 { FRAC_CONST(0.995184719562531), FRAC_CONST(0.098017141222954) },
1043 { FRAC_CONST(0.980785250663757), FRAC_CONST(0.195090323686600) },
1044 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
1045 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
1046 { FRAC_CONST(0.881921231746674), FRAC_CONST(0.471396744251251) },
1047 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
1048 { FRAC_CONST(0.773010432720184), FRAC_CONST(0.634393334388733) },
1049 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1050 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
1051 { FRAC_CONST(0.555570185184479), FRAC_CONST(0.831469655036926) },
1052 { FRAC_CONST(0.471396654844284), FRAC_CONST(0.881921291351318) },
1053 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1054 { FRAC_CONST(0.290284633636475), FRAC_CONST(0.956940352916718) },
1055 { FRAC_CONST(0.195090234279633), FRAC_CONST(0.980785310268402) },
1056 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
1057 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1058 { FRAC_CONST(0.980785250663757), FRAC_CONST(0.195090323686600) },
1059 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
1060 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
1061 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1062 { FRAC_CONST(0.555570185184479), FRAC_CONST(0.831469655036926) },
1063 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1064 { FRAC_CONST(0.195090234279633), FRAC_CONST(0.980785310268402) },
1065 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
1066 { FRAC_CONST(-0.195090323686600), FRAC_CONST(0.980785250663757) },
1067 { FRAC_CONST(-0.382683515548706), FRAC_CONST(0.923879504203796) },
1068 { FRAC_CONST(-0.555570363998413), FRAC_CONST(0.831469535827637) },
1069 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1070 { FRAC_CONST(-0.831469655036926), FRAC_CONST(0.555570185184479) },
1071 { FRAC_CONST(-0.923879623413086), FRAC_CONST(0.382683277130127) },
1072 { FRAC_CONST(-0.980785310268402), FRAC_CONST(0.195090308785439) },
1073 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1074 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
1075 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
1076 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
1077 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1078 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
1079 { FRAC_CONST(-0.195090323686600), FRAC_CONST(0.980785250663757) },
1080 { FRAC_CONST(-0.471396833658218), FRAC_CONST(0.881921231746674) },
1081 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1082 { FRAC_CONST(-0.881921231746674), FRAC_CONST(0.471396833658218) },
1083 { FRAC_CONST(-0.980785310268402), FRAC_CONST(0.195090308785439) },
1084 { FRAC_CONST(-0.995184719562531), FRAC_CONST(-0.098017267882824) },
1085 { FRAC_CONST(-0.923879504203796), FRAC_CONST(-0.382683426141739) },
1086 { FRAC_CONST(-0.773010551929474), FRAC_CONST(-0.634393215179443) },
1087 { FRAC_CONST(-0.555570006370544), FRAC_CONST(-0.831469774246216) },
1088 { FRAC_CONST(-0.290284544229507), FRAC_CONST(-0.956940352916718) },
1089 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1090 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
1091 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1092 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1093 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1094 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1095 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
1096 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1097 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1098 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1099 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1100 { FRAC_CONST(-0.923879504203796), FRAC_CONST(-0.382683426141739) },
1101 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1102 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1103 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1104 { FRAC_CONST(0.000000011924881), FRAC_CONST(-1.000000000000000) }
1105};
1106
1107#ifdef ALLOW_SMALL_FRAMELENGTH
1108ALIGN static const complex_t cfft_tab_60[] =
1109{
1110 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1111 { FRAC_CONST(0.994521915912628), FRAC_CONST(0.104528464376926) },
1112 { FRAC_CONST(0.978147625923157), FRAC_CONST(0.207911700010300) },
1113 { FRAC_CONST(0.951056540012360), FRAC_CONST(0.309017002582550) },
1114 { FRAC_CONST(0.913545429706573), FRAC_CONST(0.406736642122269) },
1115 { FRAC_CONST(0.866025388240814), FRAC_CONST(0.500000000000000) },
1116 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
1117 { FRAC_CONST(0.743144810199738), FRAC_CONST(0.669130623340607) },
1118 { FRAC_CONST(0.669130563735962), FRAC_CONST(0.743144869804382) },
1119 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
1120 { FRAC_CONST(0.499999970197678), FRAC_CONST(0.866025447845459) },
1121 { FRAC_CONST(0.406736612319946), FRAC_CONST(0.913545489311218) },
1122 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
1123 { FRAC_CONST(0.207911655306816), FRAC_CONST(0.978147625923157) },
1124 { FRAC_CONST(0.104528419673443), FRAC_CONST(0.994521915912628) },
1125 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
1126 { FRAC_CONST(-0.104528509080410), FRAC_CONST(0.994521915912628) },
1127 { FRAC_CONST(-0.207911744713783), FRAC_CONST(0.978147566318512) },
1128 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
1129 { FRAC_CONST(-0.406736701726913), FRAC_CONST(0.913545429706573) },
1130 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1131 { FRAC_CONST(0.978147625923157), FRAC_CONST(0.207911700010300) },
1132 { FRAC_CONST(0.913545429706573), FRAC_CONST(0.406736642122269) },
1133 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
1134 { FRAC_CONST(0.669130563735962), FRAC_CONST(0.743144869804382) },
1135 { FRAC_CONST(0.499999970197678), FRAC_CONST(0.866025447845459) },
1136 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
1137 { FRAC_CONST(0.104528419673443), FRAC_CONST(0.994521915912628) },
1138 { FRAC_CONST(-0.104528509080410), FRAC_CONST(0.994521915912628) },
1139 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
1140 { FRAC_CONST(-0.500000059604645), FRAC_CONST(0.866025388240814) },
1141 { FRAC_CONST(-0.669130682945251), FRAC_CONST(0.743144810199738) },
1142 { FRAC_CONST(-0.809017062187195), FRAC_CONST(0.587785184383392) },
1143 { FRAC_CONST(-0.913545489311218), FRAC_CONST(0.406736582517624) },
1144 { FRAC_CONST(-0.978147625923157), FRAC_CONST(0.207911610603333) },
1145 { FRAC_CONST(-1.000000000000000), FRAC_CONST(-0.000000087422777) },
1146 { FRAC_CONST(-0.978147566318512), FRAC_CONST(-0.207911789417267) },
1147 { FRAC_CONST(-0.913545429706573), FRAC_CONST(-0.406736731529236) },
1148 { FRAC_CONST(-0.809016942977905), FRAC_CONST(-0.587785363197327) },
1149 { FRAC_CONST(-0.669130504131317), FRAC_CONST(-0.743144869804382) },
1150 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1151 { FRAC_CONST(0.951056540012360), FRAC_CONST(0.309017002582550) },
1152 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
1153 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
1154 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
1155 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1156 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
1157 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
1158 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
1159 { FRAC_CONST(-0.809017062187195), FRAC_CONST(0.587785184383392) },
1160 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1161 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
1162 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
1163 { FRAC_CONST(-0.951056599617004), FRAC_CONST(0.309016793966293) },
1164 { FRAC_CONST(-0.809016942977905), FRAC_CONST(-0.587785363197327) },
1165 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1166 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1167 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1168 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1169 { FRAC_CONST(0.309017121791840), FRAC_CONST(-0.951056480407715) }
1170};
1171#endif
1172
1173#ifdef LD_DEC
1174
1175ALIGN static const complex_t cfft_tab_256[] =
1176{
1177 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1178 { FRAC_CONST(0.999698817729950), FRAC_CONST(0.024541229009628) },
1179 { FRAC_CONST(0.998795449733734), FRAC_CONST(0.049067676067352) },
1180 { FRAC_CONST(0.997290432453156), FRAC_CONST(0.073564566671848) },
1181 { FRAC_CONST(0.995184719562531), FRAC_CONST(0.098017141222954) },
1182 { FRAC_CONST(0.992479562759399), FRAC_CONST(0.122410677373409) },
1183 { FRAC_CONST(0.989176511764526), FRAC_CONST(0.146730467677116) },
1184 { FRAC_CONST(0.985277652740479), FRAC_CONST(0.170961901545525) },
1185 { FRAC_CONST(0.980785250663757), FRAC_CONST(0.195090323686600) },
1186 { FRAC_CONST(0.975702106952667), FRAC_CONST(0.219101235270500) },
1187 { FRAC_CONST(0.970031261444092), FRAC_CONST(0.242980197072029) },
1188 { FRAC_CONST(0.963776051998138), FRAC_CONST(0.266712784767151) },
1189 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
1190 { FRAC_CONST(0.949528157711029), FRAC_CONST(0.313681751489639) },
1191 { FRAC_CONST(0.941544055938721), FRAC_CONST(0.336889863014221) },
1192 { FRAC_CONST(0.932992815971375), FRAC_CONST(0.359895050525665) },
1193 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
1194 { FRAC_CONST(0.914209723472595), FRAC_CONST(0.405241340398788) },
1195 { FRAC_CONST(0.903989315032959), FRAC_CONST(0.427555084228516) },
1196 { FRAC_CONST(0.893224298954010), FRAC_CONST(0.449611335992813) },
1197 { FRAC_CONST(0.881921231746674), FRAC_CONST(0.471396744251251) },
1198 { FRAC_CONST(0.870086967945099), FRAC_CONST(0.492898225784302) },
1199 { FRAC_CONST(0.857728600502014), FRAC_CONST(0.514102756977081) },
1200 { FRAC_CONST(0.844853579998016), FRAC_CONST(0.534997642040253) },
1201 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
1202 { FRAC_CONST(0.817584812641144), FRAC_CONST(0.575808227062225) },
1203 { FRAC_CONST(0.803207516670227), FRAC_CONST(0.595699310302734) },
1204 { FRAC_CONST(0.788346409797668), FRAC_CONST(0.615231633186340) },
1205 { FRAC_CONST(0.773010432720184), FRAC_CONST(0.634393334388733) },
1206 { FRAC_CONST(0.757208824157715), FRAC_CONST(0.653172850608826) },
1207 { FRAC_CONST(0.740951120853424), FRAC_CONST(0.671558976173401) },
1208 { FRAC_CONST(0.724247097969055), FRAC_CONST(0.689540565013886) },
1209 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1210 { FRAC_CONST(0.689540505409241), FRAC_CONST(0.724247097969055) },
1211 { FRAC_CONST(0.671558916568756), FRAC_CONST(0.740951180458069) },
1212 { FRAC_CONST(0.653172791004181), FRAC_CONST(0.757208883762360) },
1213 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
1214 { FRAC_CONST(0.615231573581696), FRAC_CONST(0.788346409797668) },
1215 { FRAC_CONST(0.595699310302734), FRAC_CONST(0.803207516670227) },
1216 { FRAC_CONST(0.575808167457581), FRAC_CONST(0.817584812641144) },
1217 { FRAC_CONST(0.555570185184479), FRAC_CONST(0.831469655036926) },
1218 { FRAC_CONST(0.534997642040253), FRAC_CONST(0.844853579998016) },
1219 { FRAC_CONST(0.514102697372437), FRAC_CONST(0.857728660106659) },
1220 { FRAC_CONST(0.492898195981979), FRAC_CONST(0.870086967945099) },
1221 { FRAC_CONST(0.471396654844284), FRAC_CONST(0.881921291351318) },
1222 { FRAC_CONST(0.449611306190491), FRAC_CONST(0.893224298954010) },
1223 { FRAC_CONST(0.427555114030838), FRAC_CONST(0.903989315032959) },
1224 { FRAC_CONST(0.405241280794144), FRAC_CONST(0.914209783077240) },
1225 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1226 { FRAC_CONST(0.359894961118698), FRAC_CONST(0.932992815971375) },
1227 { FRAC_CONST(0.336889833211899), FRAC_CONST(0.941544055938721) },
1228 { FRAC_CONST(0.313681662082672), FRAC_CONST(0.949528217315674) },
1229 { FRAC_CONST(0.290284633636475), FRAC_CONST(0.956940352916718) },
1230 { FRAC_CONST(0.266712754964828), FRAC_CONST(0.963776051998138) },
1231 { FRAC_CONST(0.242980122566223), FRAC_CONST(0.970031261444092) },
1232 { FRAC_CONST(0.219101220369339), FRAC_CONST(0.975702106952667) },
1233 { FRAC_CONST(0.195090234279633), FRAC_CONST(0.980785310268402) },
1234 { FRAC_CONST(0.170961856842041), FRAC_CONST(0.985277652740479) },
1235 { FRAC_CONST(0.146730497479439), FRAC_CONST(0.989176511764526) },
1236 { FRAC_CONST(0.122410625219345), FRAC_CONST(0.992479562759399) },
1237 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
1238 { FRAC_CONST(0.073564492166042), FRAC_CONST(0.997290432453156) },
1239 { FRAC_CONST(0.049067649990320), FRAC_CONST(0.998795449733734) },
1240 { FRAC_CONST(0.024541135877371), FRAC_CONST(0.999698817729950) },
1241 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1242 { FRAC_CONST(0.998795449733734), FRAC_CONST(0.049067676067352) },
1243 { FRAC_CONST(0.995184719562531), FRAC_CONST(0.098017141222954) },
1244 { FRAC_CONST(0.989176511764526), FRAC_CONST(0.146730467677116) },
1245 { FRAC_CONST(0.980785250663757), FRAC_CONST(0.195090323686600) },
1246 { FRAC_CONST(0.970031261444092), FRAC_CONST(0.242980197072029) },
1247 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
1248 { FRAC_CONST(0.941544055938721), FRAC_CONST(0.336889863014221) },
1249 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
1250 { FRAC_CONST(0.903989315032959), FRAC_CONST(0.427555084228516) },
1251 { FRAC_CONST(0.881921231746674), FRAC_CONST(0.471396744251251) },
1252 { FRAC_CONST(0.857728600502014), FRAC_CONST(0.514102756977081) },
1253 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
1254 { FRAC_CONST(0.803207516670227), FRAC_CONST(0.595699310302734) },
1255 { FRAC_CONST(0.773010432720184), FRAC_CONST(0.634393334388733) },
1256 { FRAC_CONST(0.740951120853424), FRAC_CONST(0.671558976173401) },
1257 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1258 { FRAC_CONST(0.671558916568756), FRAC_CONST(0.740951180458069) },
1259 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
1260 { FRAC_CONST(0.595699310302734), FRAC_CONST(0.803207516670227) },
1261 { FRAC_CONST(0.555570185184479), FRAC_CONST(0.831469655036926) },
1262 { FRAC_CONST(0.514102697372437), FRAC_CONST(0.857728660106659) },
1263 { FRAC_CONST(0.471396654844284), FRAC_CONST(0.881921291351318) },
1264 { FRAC_CONST(0.427555114030838), FRAC_CONST(0.903989315032959) },
1265 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1266 { FRAC_CONST(0.336889833211899), FRAC_CONST(0.941544055938721) },
1267 { FRAC_CONST(0.290284633636475), FRAC_CONST(0.956940352916718) },
1268 { FRAC_CONST(0.242980122566223), FRAC_CONST(0.970031261444092) },
1269 { FRAC_CONST(0.195090234279633), FRAC_CONST(0.980785310268402) },
1270 { FRAC_CONST(0.146730497479439), FRAC_CONST(0.989176511764526) },
1271 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
1272 { FRAC_CONST(0.049067649990320), FRAC_CONST(0.998795449733734) },
1273 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
1274 { FRAC_CONST(-0.049067739397287), FRAC_CONST(0.998795449733734) },
1275 { FRAC_CONST(-0.098017223179340), FRAC_CONST(0.995184719562531) },
1276 { FRAC_CONST(-0.146730571985245), FRAC_CONST(0.989176511764526) },
1277 { FRAC_CONST(-0.195090323686600), FRAC_CONST(0.980785250663757) },
1278 { FRAC_CONST(-0.242980197072029), FRAC_CONST(0.970031261444092) },
1279 { FRAC_CONST(-0.290284723043442), FRAC_CONST(0.956940293312073) },
1280 { FRAC_CONST(-0.336889922618866), FRAC_CONST(0.941544055938721) },
1281 { FRAC_CONST(-0.382683515548706), FRAC_CONST(0.923879504203796) },
1282 { FRAC_CONST(-0.427555084228516), FRAC_CONST(0.903989315032959) },
1283 { FRAC_CONST(-0.471396833658218), FRAC_CONST(0.881921231746674) },
1284 { FRAC_CONST(-0.514102756977081), FRAC_CONST(0.857728600502014) },
1285 { FRAC_CONST(-0.555570363998413), FRAC_CONST(0.831469535827637) },
1286 { FRAC_CONST(-0.595699369907379), FRAC_CONST(0.803207516670227) },
1287 { FRAC_CONST(-0.634393274784088), FRAC_CONST(0.773010492324829) },
1288 { FRAC_CONST(-0.671559035778046), FRAC_CONST(0.740951061248779) },
1289 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1290 { FRAC_CONST(-0.740951240062714), FRAC_CONST(0.671558856964111) },
1291 { FRAC_CONST(-0.773010492324829), FRAC_CONST(0.634393274784088) },
1292 { FRAC_CONST(-0.803207635879517), FRAC_CONST(0.595699131488800) },
1293 { FRAC_CONST(-0.831469655036926), FRAC_CONST(0.555570185184479) },
1294 { FRAC_CONST(-0.857728600502014), FRAC_CONST(0.514102756977081) },
1295 { FRAC_CONST(-0.881921350955963), FRAC_CONST(0.471396625041962) },
1296 { FRAC_CONST(-0.903989315032959), FRAC_CONST(0.427555054426193) },
1297 { FRAC_CONST(-0.923879623413086), FRAC_CONST(0.382683277130127) },
1298 { FRAC_CONST(-0.941544115543365), FRAC_CONST(0.336889803409576) },
1299 { FRAC_CONST(-0.956940352916718), FRAC_CONST(0.290284723043442) },
1300 { FRAC_CONST(-0.970031261444092), FRAC_CONST(0.242980077862740) },
1301 { FRAC_CONST(-0.980785310268402), FRAC_CONST(0.195090308785439) },
1302 { FRAC_CONST(-0.989176511764526), FRAC_CONST(0.146730333566666) },
1303 { FRAC_CONST(-0.995184719562531), FRAC_CONST(0.098017096519470) },
1304 { FRAC_CONST(-0.998795449733734), FRAC_CONST(0.049067486077547) },
1305 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1306 { FRAC_CONST(0.997290432453156), FRAC_CONST(0.073564566671848) },
1307 { FRAC_CONST(0.989176511764526), FRAC_CONST(0.146730467677116) },
1308 { FRAC_CONST(0.975702106952667), FRAC_CONST(0.219101235270500) },
1309 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
1310 { FRAC_CONST(0.932992815971375), FRAC_CONST(0.359895050525665) },
1311 { FRAC_CONST(0.903989315032959), FRAC_CONST(0.427555084228516) },
1312 { FRAC_CONST(0.870086967945099), FRAC_CONST(0.492898225784302) },
1313 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
1314 { FRAC_CONST(0.788346469402313), FRAC_CONST(0.615231573581696) },
1315 { FRAC_CONST(0.740951120853424), FRAC_CONST(0.671558976173401) },
1316 { FRAC_CONST(0.689540505409241), FRAC_CONST(0.724247097969055) },
1317 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
1318 { FRAC_CONST(0.575808227062225), FRAC_CONST(0.817584812641144) },
1319 { FRAC_CONST(0.514102697372437), FRAC_CONST(0.857728660106659) },
1320 { FRAC_CONST(0.449611306190491), FRAC_CONST(0.893224298954010) },
1321 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1322 { FRAC_CONST(0.313681751489639), FRAC_CONST(0.949528157711029) },
1323 { FRAC_CONST(0.242980241775513), FRAC_CONST(0.970031261444092) },
1324 { FRAC_CONST(0.170961856842041), FRAC_CONST(0.985277652740479) },
1325 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
1326 { FRAC_CONST(0.024541255086660), FRAC_CONST(0.999698817729950) },
1327 { FRAC_CONST(-0.049067739397287), FRAC_CONST(0.998795449733734) },
1328 { FRAC_CONST(-0.122410707175732), FRAC_CONST(0.992479503154755) },
1329 { FRAC_CONST(-0.195090323686600), FRAC_CONST(0.980785250663757) },
1330 { FRAC_CONST(-0.266712725162506), FRAC_CONST(0.963776051998138) },
1331 { FRAC_CONST(-0.336889803409576), FRAC_CONST(0.941544055938721) },
1332 { FRAC_CONST(-0.405241340398788), FRAC_CONST(0.914209723472595) },
1333 { FRAC_CONST(-0.471396833658218), FRAC_CONST(0.881921231746674) },
1334 { FRAC_CONST(-0.534997701644897), FRAC_CONST(0.844853520393372) },
1335 { FRAC_CONST(-0.595699369907379), FRAC_CONST(0.803207516670227) },
1336 { FRAC_CONST(-0.653172850608826), FRAC_CONST(0.757208824157715) },
1337 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1338 { FRAC_CONST(-0.757208824157715), FRAC_CONST(0.653172850608826) },
1339 { FRAC_CONST(-0.803207516670227), FRAC_CONST(0.595699369907379) },
1340 { FRAC_CONST(-0.844853520393372), FRAC_CONST(0.534997701644897) },
1341 { FRAC_CONST(-0.881921231746674), FRAC_CONST(0.471396833658218) },
1342 { FRAC_CONST(-0.914209783077240), FRAC_CONST(0.405241221189499) },
1343 { FRAC_CONST(-0.941544115543365), FRAC_CONST(0.336889803409576) },
1344 { FRAC_CONST(-0.963776051998138), FRAC_CONST(0.266712725162506) },
1345 { FRAC_CONST(-0.980785310268402), FRAC_CONST(0.195090308785439) },
1346 { FRAC_CONST(-0.992479503154755), FRAC_CONST(0.122410699725151) },
1347 { FRAC_CONST(-0.998795449733734), FRAC_CONST(0.049067724496126) },
1348 { FRAC_CONST(-0.999698817729950), FRAC_CONST(-0.024541147053242) },
1349 { FRAC_CONST(-0.995184719562531), FRAC_CONST(-0.098017267882824) },
1350 { FRAC_CONST(-0.985277652740479), FRAC_CONST(-0.170961990952492) },
1351 { FRAC_CONST(-0.970031261444092), FRAC_CONST(-0.242980241775513) },
1352 { FRAC_CONST(-0.949528157711029), FRAC_CONST(-0.313681781291962) },
1353 { FRAC_CONST(-0.923879504203796), FRAC_CONST(-0.382683426141739) },
1354 { FRAC_CONST(-0.893224298954010), FRAC_CONST(-0.449611306190491) },
1355 { FRAC_CONST(-0.857728660106659), FRAC_CONST(-0.514102697372437) },
1356 { FRAC_CONST(-0.817584872245789), FRAC_CONST(-0.575808107852936) },
1357 { FRAC_CONST(-0.773010551929474), FRAC_CONST(-0.634393215179443) },
1358 { FRAC_CONST(-0.724247038364410), FRAC_CONST(-0.689540624618530) },
1359 { FRAC_CONST(-0.671558916568756), FRAC_CONST(-0.740951180458069) },
1360 { FRAC_CONST(-0.615231573581696), FRAC_CONST(-0.788346469402313) },
1361 { FRAC_CONST(-0.555570006370544), FRAC_CONST(-0.831469774246216) },
1362 { FRAC_CONST(-0.492898195981979), FRAC_CONST(-0.870086967945099) },
1363 { FRAC_CONST(-0.427554935216904), FRAC_CONST(-0.903989374637604) },
1364 { FRAC_CONST(-0.359895110130310), FRAC_CONST(-0.932992756366730) },
1365 { FRAC_CONST(-0.290284544229507), FRAC_CONST(-0.956940352916718) },
1366 { FRAC_CONST(-0.219101369380951), FRAC_CONST(-0.975702106952667) },
1367 { FRAC_CONST(-0.146730408072472), FRAC_CONST(-0.989176511764526) },
1368 { FRAC_CONST(-0.073564760386944), FRAC_CONST(-0.997290432453156) },
1369 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1370 { FRAC_CONST(0.995184719562531), FRAC_CONST(0.098017141222954) },
1371 { FRAC_CONST(0.980785250663757), FRAC_CONST(0.195090323686600) },
1372 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
1373 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
1374 { FRAC_CONST(0.881921231746674), FRAC_CONST(0.471396744251251) },
1375 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
1376 { FRAC_CONST(0.773010432720184), FRAC_CONST(0.634393334388733) },
1377 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1378 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
1379 { FRAC_CONST(0.555570185184479), FRAC_CONST(0.831469655036926) },
1380 { FRAC_CONST(0.471396654844284), FRAC_CONST(0.881921291351318) },
1381 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1382 { FRAC_CONST(0.290284633636475), FRAC_CONST(0.956940352916718) },
1383 { FRAC_CONST(0.195090234279633), FRAC_CONST(0.980785310268402) },
1384 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
1385 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1386 { FRAC_CONST(0.980785250663757), FRAC_CONST(0.195090323686600) },
1387 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
1388 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
1389 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1390 { FRAC_CONST(0.555570185184479), FRAC_CONST(0.831469655036926) },
1391 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1392 { FRAC_CONST(0.195090234279633), FRAC_CONST(0.980785310268402) },
1393 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
1394 { FRAC_CONST(-0.195090323686600), FRAC_CONST(0.980785250663757) },
1395 { FRAC_CONST(-0.382683515548706), FRAC_CONST(0.923879504203796) },
1396 { FRAC_CONST(-0.555570363998413), FRAC_CONST(0.831469535827637) },
1397 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1398 { FRAC_CONST(-0.831469655036926), FRAC_CONST(0.555570185184479) },
1399 { FRAC_CONST(-0.923879623413086), FRAC_CONST(0.382683277130127) },
1400 { FRAC_CONST(-0.980785310268402), FRAC_CONST(0.195090308785439) },
1401 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1402 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
1403 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
1404 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
1405 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1406 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
1407 { FRAC_CONST(-0.195090323686600), FRAC_CONST(0.980785250663757) },
1408 { FRAC_CONST(-0.471396833658218), FRAC_CONST(0.881921231746674) },
1409 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1410 { FRAC_CONST(-0.881921231746674), FRAC_CONST(0.471396833658218) },
1411 { FRAC_CONST(-0.980785310268402), FRAC_CONST(0.195090308785439) },
1412 { FRAC_CONST(-0.995184719562531), FRAC_CONST(-0.098017267882824) },
1413 { FRAC_CONST(-0.923879504203796), FRAC_CONST(-0.382683426141739) },
1414 { FRAC_CONST(-0.773010551929474), FRAC_CONST(-0.634393215179443) },
1415 { FRAC_CONST(-0.555570006370544), FRAC_CONST(-0.831469774246216) },
1416 { FRAC_CONST(-0.290284544229507), FRAC_CONST(-0.956940352916718) },
1417 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1418 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
1419 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1420 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1421 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1422 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1423 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
1424 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1425 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1426 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1427 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1428 { FRAC_CONST(-0.923879504203796), FRAC_CONST(-0.382683426141739) },
1429 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1430 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1431 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1432 { FRAC_CONST(0.000000011924881), FRAC_CONST(-1.000000000000000) }
1433};
1434
1435#ifdef ALLOW_SMALL_FRAMELENGTH
1436ALIGN static const complex_t cfft_tab_240[] =
1437{
1438 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1439 { FRAC_CONST(0.999657332897186), FRAC_CONST(0.026176949962974) },
1440 { FRAC_CONST(0.998629510402679), FRAC_CONST(0.052335958927870) },
1441 { FRAC_CONST(0.996917307376862), FRAC_CONST(0.078459098935127) },
1442 { FRAC_CONST(0.994521915912628), FRAC_CONST(0.104528464376926) },
1443 { FRAC_CONST(0.991444885730743), FRAC_CONST(0.130526199936867) },
1444 { FRAC_CONST(0.987688362598419), FRAC_CONST(0.156434476375580) },
1445 { FRAC_CONST(0.983254909515381), FRAC_CONST(0.182235524058342) },
1446 { FRAC_CONST(0.978147625923157), FRAC_CONST(0.207911700010300) },
1447 { FRAC_CONST(0.972369909286499), FRAC_CONST(0.233445376157761) },
1448 { FRAC_CONST(0.965925812721252), FRAC_CONST(0.258819043636322) },
1449 { FRAC_CONST(0.958819746971130), FRAC_CONST(0.284015357494354) },
1450 { FRAC_CONST(0.951056540012360), FRAC_CONST(0.309017002582550) },
1451 { FRAC_CONST(0.942641496658325), FRAC_CONST(0.333806872367859) },
1452 { FRAC_CONST(0.933580398559570), FRAC_CONST(0.358367949724197) },
1453 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
1454 { FRAC_CONST(0.913545429706573), FRAC_CONST(0.406736642122269) },
1455 { FRAC_CONST(0.902585268020630), FRAC_CONST(0.430511116981506) },
1456 { FRAC_CONST(0.891006529331207), FRAC_CONST(0.453990519046783) },
1457 { FRAC_CONST(0.878817081451416), FRAC_CONST(0.477158784866333) },
1458 { FRAC_CONST(0.866025388240814), FRAC_CONST(0.500000000000000) },
1459 { FRAC_CONST(0.852640151977539), FRAC_CONST(0.522498548030853) },
1460 { FRAC_CONST(0.838670551776886), FRAC_CONST(0.544639050960541) },
1461 { FRAC_CONST(0.824126183986664), FRAC_CONST(0.566406250000000) },
1462 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
1463 { FRAC_CONST(0.793353319168091), FRAC_CONST(0.608761429786682) },
1464 { FRAC_CONST(0.777145922183990), FRAC_CONST(0.629320383071899) },
1465 { FRAC_CONST(0.760405957698822), FRAC_CONST(0.649448096752167) },
1466 { FRAC_CONST(0.743144810199738), FRAC_CONST(0.669130623340607) },
1467 { FRAC_CONST(0.725374400615692), FRAC_CONST(0.688354551792145) },
1468 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1469 { FRAC_CONST(0.688354551792145), FRAC_CONST(0.725374400615692) },
1470 { FRAC_CONST(0.669130563735962), FRAC_CONST(0.743144869804382) },
1471 { FRAC_CONST(0.649448037147522), FRAC_CONST(0.760405957698822) },
1472 { FRAC_CONST(0.629320383071899), FRAC_CONST(0.777145981788635) },
1473 { FRAC_CONST(0.608761370182037), FRAC_CONST(0.793353378772736) },
1474 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
1475 { FRAC_CONST(0.566406250000000), FRAC_CONST(0.824126183986664) },
1476 { FRAC_CONST(0.544638991355896), FRAC_CONST(0.838670611381531) },
1477 { FRAC_CONST(0.522498488426209), FRAC_CONST(0.852640211582184) },
1478 { FRAC_CONST(0.499999970197678), FRAC_CONST(0.866025447845459) },
1479 { FRAC_CONST(0.477158755064011), FRAC_CONST(0.878817141056061) },
1480 { FRAC_CONST(0.453990519046783), FRAC_CONST(0.891006529331207) },
1481 { FRAC_CONST(0.430511027574539), FRAC_CONST(0.902585327625275) },
1482 { FRAC_CONST(0.406736612319946), FRAC_CONST(0.913545489311218) },
1483 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1484 { FRAC_CONST(0.358367860317230), FRAC_CONST(0.933580458164215) },
1485 { FRAC_CONST(0.333806812763214), FRAC_CONST(0.942641496658325) },
1486 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
1487 { FRAC_CONST(0.284015327692032), FRAC_CONST(0.958819746971130) },
1488 { FRAC_CONST(0.258819073438644), FRAC_CONST(0.965925812721252) },
1489 { FRAC_CONST(0.233445301651955), FRAC_CONST(0.972369909286499) },
1490 { FRAC_CONST(0.207911655306816), FRAC_CONST(0.978147625923157) },
1491 { FRAC_CONST(0.182235524058342), FRAC_CONST(0.983254909515381) },
1492 { FRAC_CONST(0.156434372067451), FRAC_CONST(0.987688362598419) },
1493 { FRAC_CONST(0.130526125431061), FRAC_CONST(0.991444885730743) },
1494 { FRAC_CONST(0.104528419673443), FRAC_CONST(0.994521915912628) },
1495 { FRAC_CONST(0.078459084033966), FRAC_CONST(0.996917307376862) },
1496 { FRAC_CONST(0.052335973829031), FRAC_CONST(0.998629510402679) },
1497 { FRAC_CONST(0.026176875457168), FRAC_CONST(0.999657332897186) },
1498 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
1499 { FRAC_CONST(-0.026176963001490), FRAC_CONST(0.999657332897186) },
1500 { FRAC_CONST(-0.052336059510708), FRAC_CONST(0.998629510402679) },
1501 { FRAC_CONST(-0.078459173440933), FRAC_CONST(0.996917307376862) },
1502 { FRAC_CONST(-0.104528509080410), FRAC_CONST(0.994521915912628) },
1503 { FRAC_CONST(-0.130526214838028), FRAC_CONST(0.991444885730743) },
1504 { FRAC_CONST(-0.156434446573257), FRAC_CONST(0.987688362598419) },
1505 { FRAC_CONST(-0.182235598564148), FRAC_CONST(0.983254909515381) },
1506 { FRAC_CONST(-0.207911744713783), FRAC_CONST(0.978147566318512) },
1507 { FRAC_CONST(-0.233445391058922), FRAC_CONST(0.972369909286499) },
1508 { FRAC_CONST(-0.258819162845612), FRAC_CONST(0.965925812721252) },
1509 { FRAC_CONST(-0.284015417098999), FRAC_CONST(0.958819687366486) },
1510 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
1511 { FRAC_CONST(-0.333806872367859), FRAC_CONST(0.942641496658325) },
1512 { FRAC_CONST(-0.358367949724197), FRAC_CONST(0.933580458164215) },
1513 { FRAC_CONST(-0.382683515548706), FRAC_CONST(0.923879504203796) },
1514 { FRAC_CONST(-0.406736701726913), FRAC_CONST(0.913545429706573) },
1515 { FRAC_CONST(-0.430511116981506), FRAC_CONST(0.902585268020630) },
1516 { FRAC_CONST(-0.453990608453751), FRAC_CONST(0.891006469726563) },
1517 { FRAC_CONST(-0.477158725261688), FRAC_CONST(0.878817141056061) },
1518 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1519 { FRAC_CONST(0.998629510402679), FRAC_CONST(0.052335958927870) },
1520 { FRAC_CONST(0.994521915912628), FRAC_CONST(0.104528464376926) },
1521 { FRAC_CONST(0.987688362598419), FRAC_CONST(0.156434476375580) },
1522 { FRAC_CONST(0.978147625923157), FRAC_CONST(0.207911700010300) },
1523 { FRAC_CONST(0.965925812721252), FRAC_CONST(0.258819043636322) },
1524 { FRAC_CONST(0.951056540012360), FRAC_CONST(0.309017002582550) },
1525 { FRAC_CONST(0.933580398559570), FRAC_CONST(0.358367949724197) },
1526 { FRAC_CONST(0.913545429706573), FRAC_CONST(0.406736642122269) },
1527 { FRAC_CONST(0.891006529331207), FRAC_CONST(0.453990519046783) },
1528 { FRAC_CONST(0.866025388240814), FRAC_CONST(0.500000000000000) },
1529 { FRAC_CONST(0.838670551776886), FRAC_CONST(0.544639050960541) },
1530 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
1531 { FRAC_CONST(0.777145922183990), FRAC_CONST(0.629320383071899) },
1532 { FRAC_CONST(0.743144810199738), FRAC_CONST(0.669130623340607) },
1533 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1534 { FRAC_CONST(0.669130563735962), FRAC_CONST(0.743144869804382) },
1535 { FRAC_CONST(0.629320383071899), FRAC_CONST(0.777145981788635) },
1536 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
1537 { FRAC_CONST(0.544638991355896), FRAC_CONST(0.838670611381531) },
1538 { FRAC_CONST(0.499999970197678), FRAC_CONST(0.866025447845459) },
1539 { FRAC_CONST(0.453990519046783), FRAC_CONST(0.891006529331207) },
1540 { FRAC_CONST(0.406736612319946), FRAC_CONST(0.913545489311218) },
1541 { FRAC_CONST(0.358367860317230), FRAC_CONST(0.933580458164215) },
1542 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
1543 { FRAC_CONST(0.258819073438644), FRAC_CONST(0.965925812721252) },
1544 { FRAC_CONST(0.207911655306816), FRAC_CONST(0.978147625923157) },
1545 { FRAC_CONST(0.156434372067451), FRAC_CONST(0.987688362598419) },
1546 { FRAC_CONST(0.104528419673443), FRAC_CONST(0.994521915912628) },
1547 { FRAC_CONST(0.052335973829031), FRAC_CONST(0.998629510402679) },
1548 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
1549 { FRAC_CONST(-0.052336059510708), FRAC_CONST(0.998629510402679) },
1550 { FRAC_CONST(-0.104528509080410), FRAC_CONST(0.994521915912628) },
1551 { FRAC_CONST(-0.156434446573257), FRAC_CONST(0.987688362598419) },
1552 { FRAC_CONST(-0.207911744713783), FRAC_CONST(0.978147566318512) },
1553 { FRAC_CONST(-0.258819162845612), FRAC_CONST(0.965925812721252) },
1554 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
1555 { FRAC_CONST(-0.358367949724197), FRAC_CONST(0.933580458164215) },
1556 { FRAC_CONST(-0.406736701726913), FRAC_CONST(0.913545429706573) },
1557 { FRAC_CONST(-0.453990608453751), FRAC_CONST(0.891006469726563) },
1558 { FRAC_CONST(-0.500000059604645), FRAC_CONST(0.866025388240814) },
1559 { FRAC_CONST(-0.544639050960541), FRAC_CONST(0.838670551776886) },
1560 { FRAC_CONST(-0.587785184383392), FRAC_CONST(0.809017002582550) },
1561 { FRAC_CONST(-0.629320502281189), FRAC_CONST(0.777145862579346) },
1562 { FRAC_CONST(-0.669130682945251), FRAC_CONST(0.743144810199738) },
1563 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1564 { FRAC_CONST(-0.743144929409027), FRAC_CONST(0.669130444526672) },
1565 { FRAC_CONST(-0.777146041393280), FRAC_CONST(0.629320263862610) },
1566 { FRAC_CONST(-0.809017062187195), FRAC_CONST(0.587785184383392) },
1567 { FRAC_CONST(-0.838670551776886), FRAC_CONST(0.544639050960541) },
1568 { FRAC_CONST(-0.866025388240814), FRAC_CONST(0.500000059604645) },
1569 { FRAC_CONST(-0.891006588935852), FRAC_CONST(0.453990370035172) },
1570 { FRAC_CONST(-0.913545489311218), FRAC_CONST(0.406736582517624) },
1571 { FRAC_CONST(-0.933580458164215), FRAC_CONST(0.358367919921875) },
1572 { FRAC_CONST(-0.951056599617004), FRAC_CONST(0.309016793966293) },
1573 { FRAC_CONST(-0.965925872325897), FRAC_CONST(0.258818924427032) },
1574 { FRAC_CONST(-0.978147625923157), FRAC_CONST(0.207911610603333) },
1575 { FRAC_CONST(-0.987688362598419), FRAC_CONST(0.156434446573257) },
1576 { FRAC_CONST(-0.994521915912628), FRAC_CONST(0.104528494179249) },
1577 { FRAC_CONST(-0.998629570007324), FRAC_CONST(0.052335809916258) },
1578 { FRAC_CONST(-1.000000000000000), FRAC_CONST(-0.000000087422777) },
1579 { FRAC_CONST(-0.998629510402679), FRAC_CONST(-0.052335985004902) },
1580 { FRAC_CONST(-0.994521856307983), FRAC_CONST(-0.104528672993183) },
1581 { FRAC_CONST(-0.987688302993774), FRAC_CONST(-0.156434610486031) },
1582 { FRAC_CONST(-0.978147566318512), FRAC_CONST(-0.207911789417267) },
1583 { FRAC_CONST(-0.965925812721252), FRAC_CONST(-0.258819073438644) },
1584 { FRAC_CONST(-0.951056540012360), FRAC_CONST(-0.309016972780228) },
1585 { FRAC_CONST(-0.933580398559570), FRAC_CONST(-0.358368098735809) },
1586 { FRAC_CONST(-0.913545429706573), FRAC_CONST(-0.406736731529236) },
1587 { FRAC_CONST(-0.891006529331207), FRAC_CONST(-0.453990548849106) },
1588 { FRAC_CONST(-0.866025269031525), FRAC_CONST(-0.500000178813934) },
1589 { FRAC_CONST(-0.838670492172241), FRAC_CONST(-0.544639170169830) },
1590 { FRAC_CONST(-0.809016942977905), FRAC_CONST(-0.587785363197327) },
1591 { FRAC_CONST(-0.777145922183990), FRAC_CONST(-0.629320442676544) },
1592 { FRAC_CONST(-0.743144810199738), FRAC_CONST(-0.669130623340607) },
1593 { FRAC_CONST(-0.707106649875641), FRAC_CONST(-0.707106888294220) },
1594 { FRAC_CONST(-0.669130504131317), FRAC_CONST(-0.743144869804382) },
1595 { FRAC_CONST(-0.629320323467255), FRAC_CONST(-0.777145981788635) },
1596 { FRAC_CONST(-0.587785065174103), FRAC_CONST(-0.809017121791840) },
1597 { FRAC_CONST(-0.544639110565186), FRAC_CONST(-0.838670551776886) },
1598 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1599 { FRAC_CONST(0.996917307376862), FRAC_CONST(0.078459098935127) },
1600 { FRAC_CONST(0.987688362598419), FRAC_CONST(0.156434476375580) },
1601 { FRAC_CONST(0.972369909286499), FRAC_CONST(0.233445376157761) },
1602 { FRAC_CONST(0.951056540012360), FRAC_CONST(0.309017002582550) },
1603 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
1604 { FRAC_CONST(0.891006529331207), FRAC_CONST(0.453990519046783) },
1605 { FRAC_CONST(0.852640151977539), FRAC_CONST(0.522498548030853) },
1606 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
1607 { FRAC_CONST(0.760405957698822), FRAC_CONST(0.649448096752167) },
1608 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1609 { FRAC_CONST(0.649448037147522), FRAC_CONST(0.760405957698822) },
1610 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
1611 { FRAC_CONST(0.522498488426209), FRAC_CONST(0.852640211582184) },
1612 { FRAC_CONST(0.453990519046783), FRAC_CONST(0.891006529331207) },
1613 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1614 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
1615 { FRAC_CONST(0.233445301651955), FRAC_CONST(0.972369909286499) },
1616 { FRAC_CONST(0.156434372067451), FRAC_CONST(0.987688362598419) },
1617 { FRAC_CONST(0.078459084033966), FRAC_CONST(0.996917307376862) },
1618 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1619 { FRAC_CONST(0.987688362598419), FRAC_CONST(0.156434476375580) },
1620 { FRAC_CONST(0.951056540012360), FRAC_CONST(0.309017002582550) },
1621 { FRAC_CONST(0.891006529331207), FRAC_CONST(0.453990519046783) },
1622 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
1623 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1624 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
1625 { FRAC_CONST(0.453990519046783), FRAC_CONST(0.891006529331207) },
1626 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
1627 { FRAC_CONST(0.156434372067451), FRAC_CONST(0.987688362598419) },
1628 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
1629 { FRAC_CONST(-0.156434446573257), FRAC_CONST(0.987688362598419) },
1630 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
1631 { FRAC_CONST(-0.453990608453751), FRAC_CONST(0.891006469726563) },
1632 { FRAC_CONST(-0.587785184383392), FRAC_CONST(0.809017002582550) },
1633 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1634 { FRAC_CONST(-0.809017062187195), FRAC_CONST(0.587785184383392) },
1635 { FRAC_CONST(-0.891006588935852), FRAC_CONST(0.453990370035172) },
1636 { FRAC_CONST(-0.951056599617004), FRAC_CONST(0.309016793966293) },
1637 { FRAC_CONST(-0.987688362598419), FRAC_CONST(0.156434446573257) },
1638 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1639 { FRAC_CONST(0.972369909286499), FRAC_CONST(0.233445376157761) },
1640 { FRAC_CONST(0.891006529331207), FRAC_CONST(0.453990519046783) },
1641 { FRAC_CONST(0.760405957698822), FRAC_CONST(0.649448096752167) },
1642 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
1643 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1644 { FRAC_CONST(0.156434372067451), FRAC_CONST(0.987688362598419) },
1645 { FRAC_CONST(-0.078459173440933), FRAC_CONST(0.996917307376862) },
1646 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
1647 { FRAC_CONST(-0.522498667240143), FRAC_CONST(0.852640092372894) },
1648 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1649 { FRAC_CONST(-0.852640211582184), FRAC_CONST(0.522498488426209) },
1650 { FRAC_CONST(-0.951056599617004), FRAC_CONST(0.309016793966293) },
1651 { FRAC_CONST(-0.996917366981506), FRAC_CONST(0.078459039330482) },
1652 { FRAC_CONST(-0.987688302993774), FRAC_CONST(-0.156434610486031) },
1653 { FRAC_CONST(-0.923879504203796), FRAC_CONST(-0.382683426141739) },
1654 { FRAC_CONST(-0.809016942977905), FRAC_CONST(-0.587785363197327) },
1655 { FRAC_CONST(-0.649447917938232), FRAC_CONST(-0.760406076908112) },
1656 { FRAC_CONST(-0.453990221023560), FRAC_CONST(-0.891006648540497) },
1657 { FRAC_CONST(-0.233445450663567), FRAC_CONST(-0.972369909286499) },
1658 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1659 { FRAC_CONST(0.951056540012360), FRAC_CONST(0.309017002582550) },
1660 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
1661 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
1662 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
1663 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1664 { FRAC_CONST(0.809017002582550), FRAC_CONST(0.587785243988037) },
1665 { FRAC_CONST(0.309016972780228), FRAC_CONST(0.951056540012360) },
1666 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
1667 { FRAC_CONST(-0.809017062187195), FRAC_CONST(0.587785184383392) },
1668 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1669 { FRAC_CONST(0.587785243988037), FRAC_CONST(0.809017002582550) },
1670 { FRAC_CONST(-0.309017032384872), FRAC_CONST(0.951056480407715) },
1671 { FRAC_CONST(-0.951056599617004), FRAC_CONST(0.309016793966293) },
1672 { FRAC_CONST(-0.809016942977905), FRAC_CONST(-0.587785363197327) },
1673 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1674 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1675 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1676 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1677 { FRAC_CONST(0.309017121791840), FRAC_CONST(-0.951056480407715) }
1678};
1679#endif
1680
1681#endif
1682
1683ALIGN static const complex_t cfft_tab_128[] ICONST_ATTR =
1684{
1685 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1686 { FRAC_CONST(0.998795449733734), FRAC_CONST(0.049067676067352) },
1687 { FRAC_CONST(0.995184719562531), FRAC_CONST(0.098017141222954) },
1688 { FRAC_CONST(0.989176511764526), FRAC_CONST(0.146730467677116) },
1689 { FRAC_CONST(0.980785250663757), FRAC_CONST(0.195090323686600) },
1690 { FRAC_CONST(0.970031261444092), FRAC_CONST(0.242980197072029) },
1691 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
1692 { FRAC_CONST(0.941544055938721), FRAC_CONST(0.336889863014221) },
1693 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
1694 { FRAC_CONST(0.903989315032959), FRAC_CONST(0.427555084228516) },
1695 { FRAC_CONST(0.881921231746674), FRAC_CONST(0.471396744251251) },
1696 { FRAC_CONST(0.857728600502014), FRAC_CONST(0.514102756977081) },
1697 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
1698 { FRAC_CONST(0.803207516670227), FRAC_CONST(0.595699310302734) },
1699 { FRAC_CONST(0.773010432720184), FRAC_CONST(0.634393334388733) },
1700 { FRAC_CONST(0.740951120853424), FRAC_CONST(0.671558976173401) },
1701 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1702 { FRAC_CONST(0.671558916568756), FRAC_CONST(0.740951180458069) },
1703 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
1704 { FRAC_CONST(0.595699310302734), FRAC_CONST(0.803207516670227) },
1705 { FRAC_CONST(0.555570185184479), FRAC_CONST(0.831469655036926) },
1706 { FRAC_CONST(0.514102697372437), FRAC_CONST(0.857728660106659) },
1707 { FRAC_CONST(0.471396654844284), FRAC_CONST(0.881921291351318) },
1708 { FRAC_CONST(0.427555114030838), FRAC_CONST(0.903989315032959) },
1709 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1710 { FRAC_CONST(0.336889833211899), FRAC_CONST(0.941544055938721) },
1711 { FRAC_CONST(0.290284633636475), FRAC_CONST(0.956940352916718) },
1712 { FRAC_CONST(0.242980122566223), FRAC_CONST(0.970031261444092) },
1713 { FRAC_CONST(0.195090234279633), FRAC_CONST(0.980785310268402) },
1714 { FRAC_CONST(0.146730497479439), FRAC_CONST(0.989176511764526) },
1715 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
1716 { FRAC_CONST(0.049067649990320), FRAC_CONST(0.998795449733734) },
1717 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
1718 { FRAC_CONST(-0.049067739397287), FRAC_CONST(0.998795449733734) },
1719 { FRAC_CONST(-0.098017223179340), FRAC_CONST(0.995184719562531) },
1720 { FRAC_CONST(-0.146730571985245), FRAC_CONST(0.989176511764526) },
1721 { FRAC_CONST(-0.195090323686600), FRAC_CONST(0.980785250663757) },
1722 { FRAC_CONST(-0.242980197072029), FRAC_CONST(0.970031261444092) },
1723 { FRAC_CONST(-0.290284723043442), FRAC_CONST(0.956940293312073) },
1724 { FRAC_CONST(-0.336889922618866), FRAC_CONST(0.941544055938721) },
1725 { FRAC_CONST(-0.382683515548706), FRAC_CONST(0.923879504203796) },
1726 { FRAC_CONST(-0.427555084228516), FRAC_CONST(0.903989315032959) },
1727 { FRAC_CONST(-0.471396833658218), FRAC_CONST(0.881921231746674) },
1728 { FRAC_CONST(-0.514102756977081), FRAC_CONST(0.857728600502014) },
1729 { FRAC_CONST(-0.555570363998413), FRAC_CONST(0.831469535827637) },
1730 { FRAC_CONST(-0.595699369907379), FRAC_CONST(0.803207516670227) },
1731 { FRAC_CONST(-0.634393274784088), FRAC_CONST(0.773010492324829) },
1732 { FRAC_CONST(-0.671559035778046), FRAC_CONST(0.740951061248779) },
1733 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1734 { FRAC_CONST(-0.740951240062714), FRAC_CONST(0.671558856964111) },
1735 { FRAC_CONST(-0.773010492324829), FRAC_CONST(0.634393274784088) },
1736 { FRAC_CONST(-0.803207635879517), FRAC_CONST(0.595699131488800) },
1737 { FRAC_CONST(-0.831469655036926), FRAC_CONST(0.555570185184479) },
1738 { FRAC_CONST(-0.857728600502014), FRAC_CONST(0.514102756977081) },
1739 { FRAC_CONST(-0.881921350955963), FRAC_CONST(0.471396625041962) },
1740 { FRAC_CONST(-0.903989315032959), FRAC_CONST(0.427555054426193) },
1741 { FRAC_CONST(-0.923879623413086), FRAC_CONST(0.382683277130127) },
1742 { FRAC_CONST(-0.941544115543365), FRAC_CONST(0.336889803409576) },
1743 { FRAC_CONST(-0.956940352916718), FRAC_CONST(0.290284723043442) },
1744 { FRAC_CONST(-0.970031261444092), FRAC_CONST(0.242980077862740) },
1745 { FRAC_CONST(-0.980785310268402), FRAC_CONST(0.195090308785439) },
1746 { FRAC_CONST(-0.989176511764526), FRAC_CONST(0.146730333566666) },
1747 { FRAC_CONST(-0.995184719562531), FRAC_CONST(0.098017096519470) },
1748 { FRAC_CONST(-0.998795449733734), FRAC_CONST(0.049067486077547) },
1749 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1750 { FRAC_CONST(0.995184719562531), FRAC_CONST(0.098017141222954) },
1751 { FRAC_CONST(0.980785250663757), FRAC_CONST(0.195090323686600) },
1752 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
1753 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
1754 { FRAC_CONST(0.881921231746674), FRAC_CONST(0.471396744251251) },
1755 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
1756 { FRAC_CONST(0.773010432720184), FRAC_CONST(0.634393334388733) },
1757 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1758 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
1759 { FRAC_CONST(0.555570185184479), FRAC_CONST(0.831469655036926) },
1760 { FRAC_CONST(0.471396654844284), FRAC_CONST(0.881921291351318) },
1761 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1762 { FRAC_CONST(0.290284633636475), FRAC_CONST(0.956940352916718) },
1763 { FRAC_CONST(0.195090234279633), FRAC_CONST(0.980785310268402) },
1764 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
1765 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1766 { FRAC_CONST(0.980785250663757), FRAC_CONST(0.195090323686600) },
1767 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
1768 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
1769 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1770 { FRAC_CONST(0.555570185184479), FRAC_CONST(0.831469655036926) },
1771 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1772 { FRAC_CONST(0.195090234279633), FRAC_CONST(0.980785310268402) },
1773 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
1774 { FRAC_CONST(-0.195090323686600), FRAC_CONST(0.980785250663757) },
1775 { FRAC_CONST(-0.382683515548706), FRAC_CONST(0.923879504203796) },
1776 { FRAC_CONST(-0.555570363998413), FRAC_CONST(0.831469535827637) },
1777 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1778 { FRAC_CONST(-0.831469655036926), FRAC_CONST(0.555570185184479) },
1779 { FRAC_CONST(-0.923879623413086), FRAC_CONST(0.382683277130127) },
1780 { FRAC_CONST(-0.980785310268402), FRAC_CONST(0.195090308785439) },
1781 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1782 { FRAC_CONST(0.956940352916718), FRAC_CONST(0.290284663438797) },
1783 { FRAC_CONST(0.831469595432281), FRAC_CONST(0.555570244789124) },
1784 { FRAC_CONST(0.634393274784088), FRAC_CONST(0.773010432720184) },
1785 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1786 { FRAC_CONST(0.098017133772373), FRAC_CONST(0.995184719562531) },
1787 { FRAC_CONST(-0.195090323686600), FRAC_CONST(0.980785250663757) },
1788 { FRAC_CONST(-0.471396833658218), FRAC_CONST(0.881921231746674) },
1789 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1790 { FRAC_CONST(-0.881921231746674), FRAC_CONST(0.471396833658218) },
1791 { FRAC_CONST(-0.980785310268402), FRAC_CONST(0.195090308785439) },
1792 { FRAC_CONST(-0.995184719562531), FRAC_CONST(-0.098017267882824) },
1793 { FRAC_CONST(-0.923879504203796), FRAC_CONST(-0.382683426141739) },
1794 { FRAC_CONST(-0.773010551929474), FRAC_CONST(-0.634393215179443) },
1795 { FRAC_CONST(-0.555570006370544), FRAC_CONST(-0.831469774246216) },
1796 { FRAC_CONST(-0.290284544229507), FRAC_CONST(-0.956940352916718) },
1797 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1798 { FRAC_CONST(0.923879504203796), FRAC_CONST(0.382683455944061) },
1799 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1800 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1801 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1802 { FRAC_CONST(0.707106769084930), FRAC_CONST(0.707106769084930) },
1803 { FRAC_CONST(-0.000000043711388), FRAC_CONST(1.000000000000000) },
1804 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1805 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1806 { FRAC_CONST(0.382683426141739), FRAC_CONST(0.923879504203796) },
1807 { FRAC_CONST(-0.707106769084930), FRAC_CONST(0.707106769084930) },
1808 { FRAC_CONST(-0.923879504203796), FRAC_CONST(-0.382683426141739) },
1809 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1810 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1811 { FRAC_CONST(1.000000000000000), FRAC_CONST(0.000000000000000) },
1812 { FRAC_CONST(0.000000011924881), FRAC_CONST(-1.000000000000000) }
1813};
1814
1815#endif
1816
1817#ifdef __cplusplus
1818}
1819#endif
1820#endif
diff --git a/apps/codecs/libfaad/decoder.c b/apps/codecs/libfaad/decoder.c
index 2285168253..db51d2ab6d 100644
--- a/apps/codecs/libfaad/decoder.c
+++ b/apps/codecs/libfaad/decoder.c
@@ -289,7 +289,7 @@ int32_t NEAACDECAPI NeAACDecInit(NeAACDecHandle hDecoder, uint8_t *buffer,
289 hDecoder->fb = ssr_filter_bank_init(hDecoder->frameLength/SSR_BANDS); 289 hDecoder->fb = ssr_filter_bank_init(hDecoder->frameLength/SSR_BANDS);
290 else 290 else
291#endif 291#endif
292 hDecoder->fb = filter_bank_init(hDecoder->frameLength); 292
293 293
294#ifdef LD_DEC 294#ifdef LD_DEC
295 if (hDecoder->object_type == LD) 295 if (hDecoder->object_type == LD)
@@ -383,7 +383,6 @@ int8_t NEAACDECAPI NeAACDecInit2(NeAACDecHandle hDecoder, uint8_t *pBuffer,
383 hDecoder->fb = ssr_filter_bank_init(hDecoder->frameLength/SSR_BANDS); 383 hDecoder->fb = ssr_filter_bank_init(hDecoder->frameLength/SSR_BANDS);
384 else 384 else
385#endif 385#endif
386 hDecoder->fb = filter_bank_init(hDecoder->frameLength);
387 386
388#ifdef LD_DEC 387#ifdef LD_DEC
389 if (hDecoder->object_type == LD) 388 if (hDecoder->object_type == LD)
@@ -429,7 +428,6 @@ int8_t NEAACDECAPI NeAACDecInitDRM(NeAACDecHandle *hDecoder, uint32_t samplerate
429 (*hDecoder)->sbr_present_flag = 1; 428 (*hDecoder)->sbr_present_flag = 1;
430#endif 429#endif
431 430
432 (*hDecoder)->fb = filter_bank_init((*hDecoder)->frameLength);
433 431
434 return 0; 432 return 0;
435} 433}
@@ -471,7 +469,7 @@ void NEAACDECAPI NeAACDecClose(NeAACDecHandle hDecoder)
471 ssr_filter_bank_end(hDecoder->fb); 469 ssr_filter_bank_end(hDecoder->fb);
472 else 470 else
473#endif 471#endif
474 filter_bank_end(hDecoder->fb); 472
475 473
476 drc_end(hDecoder->drc); 474 drc_end(hDecoder->drc);
477 475
diff --git a/apps/codecs/libfaad/filtbank.c b/apps/codecs/libfaad/filtbank.c
index 333bad6c70..e5c1bd3870 100644
--- a/apps/codecs/libfaad/filtbank.c
+++ b/apps/codecs/libfaad/filtbank.c
@@ -41,7 +41,7 @@
41#include "syntax.h" 41#include "syntax.h"
42#include "kbd_win.h" 42#include "kbd_win.h"
43#include "sine_win.h" 43#include "sine_win.h"
44#include "mdct.h" 44
45 45
46/*Windowing functions borrowed from libwmai*/ 46/*Windowing functions borrowed from libwmai*/
47 47
@@ -169,95 +169,6 @@ static inline void vector_fmul_reverse(real_t *dst, const real_t *src0, const re
169} 169}
170#endif 170#endif
171 171
172fb_info *filter_bank_init(uint16_t frame_len)
173{
174 uint16_t nshort = frame_len/8;
175#ifdef LD_DEC
176 uint16_t frame_len_ld = frame_len/2;
177#endif
178
179 fb_info *fb = (fb_info*)faad_malloc(sizeof(fb_info));
180 memset(fb, 0, sizeof(fb_info));
181
182 /* normal */
183 fb->mdct256 = faad_mdct_init(2*nshort);
184 fb->mdct2048 = faad_mdct_init(2*frame_len);
185#ifdef LD_DEC
186 /* LD */
187 fb->mdct1024 = faad_mdct_init(2*frame_len_ld);
188#endif
189
190#ifdef ALLOW_SMALL_FRAMELENGTH
191 if (frame_len == 1024)
192 {
193#endif
194 fb->long_window[0] = sine_long_1024;
195 fb->short_window[0] = sine_short_128;
196 fb->long_window[1] = kbd_long_1024;
197 fb->short_window[1] = kbd_short_128;
198#ifdef LD_DEC
199 fb->ld_window[0] = sine_mid_512;
200 fb->ld_window[1] = ld_mid_512;
201#endif
202#ifdef ALLOW_SMALL_FRAMELENGTH
203 } else /* (frame_len == 960) */ {
204 fb->long_window[0] = sine_long_960;
205 fb->short_window[0] = sine_short_120;
206 fb->long_window[1] = kbd_long_960;
207 fb->short_window[1] = kbd_short_120;
208#ifdef LD_DEC
209 fb->ld_window[0] = sine_mid_480;
210 fb->ld_window[1] = ld_mid_480;
211#endif
212 }
213#endif
214
215 return fb;
216}
217
218void filter_bank_end(fb_info *fb)
219{
220 if (fb != NULL)
221 {
222#ifdef PROFILE
223 printf("FB: %I64d cycles\n", fb->cycles);
224#endif
225
226 faad_mdct_end(fb->mdct256);
227 faad_mdct_end(fb->mdct2048);
228#ifdef LD_DEC
229 faad_mdct_end(fb->mdct1024);
230#endif
231
232 faad_free(fb);
233 }
234}
235
236static INLINE void imdct_long(fb_info *fb, real_t *in_data, real_t *out_data, uint16_t len)
237{
238#ifdef LD_DEC
239 mdct_info *mdct = NULL;
240
241 switch (len)
242 {
243 case 2048:
244 case 1920:
245 mdct = fb->mdct2048;
246 break;
247 case 1024:
248 case 960:
249 mdct = fb->mdct1024;
250 break;
251 }
252
253 faad_imdct(mdct, in_data, out_data);
254#else
255 (void) len;
256 faad_imdct(fb->mdct2048, in_data, out_data);
257#endif
258}
259
260
261#ifdef LTP_DEC 172#ifdef LTP_DEC
262static INLINE void mdct(fb_info *fb, real_t *in_data, real_t *out_data, uint16_t len) 173static INLINE void mdct(fb_info *fb, real_t *in_data, real_t *out_data, uint16_t len)
263{ 174{
@@ -287,8 +198,8 @@ static INLINE void mdct(fb_info *fb, real_t *in_data, real_t *out_data, uint16_t
287 198
288ALIGN real_t transf_buf[2*1024] IBSS_ATTR; 199ALIGN real_t transf_buf[2*1024] IBSS_ATTR;
289 200
290void ifilter_bank(fb_info *fb, uint8_t window_sequence, uint8_t window_shape, 201void ifilter_bank(uint8_t window_sequence,
291 uint8_t window_shape_prev, real_t *freq_in, 202 real_t *freq_in,
292 real_t *time_out, real_t *overlap, 203 real_t *time_out, real_t *overlap,
293 uint8_t object_type, uint16_t frame_len) 204 uint8_t object_type, uint16_t frame_len)
294{ 205{
@@ -320,10 +231,12 @@ void ifilter_bank(fb_info *fb, uint8_t window_sequence, uint8_t window_shape,
320#else 231#else
321 (void) object_type; 232 (void) object_type;
322#endif 233#endif
323 window_long = fb->long_window[window_shape]; 234
324 window_long_prev = fb->long_window[window_shape_prev]; 235 window_long = sine_long_1024;
325 window_short = fb->short_window[window_shape]; 236 window_long_prev = kbd_long_1024;
326 window_short_prev = fb->short_window[window_shape_prev]; 237 window_short = sine_short_128;
238 window_short_prev = kbd_short_128;
239
327#ifdef LD_DEC 240#ifdef LD_DEC
328 } 241 }
329#endif 242#endif
@@ -342,7 +255,7 @@ void ifilter_bank(fb_info *fb, uint8_t window_sequence, uint8_t window_shape,
342 { 255 {
343 case ONLY_LONG_SEQUENCE: 256 case ONLY_LONG_SEQUENCE:
344 /* perform iMDCT */ 257 /* perform iMDCT */
345 imdct_long(fb, freq_in, transf_buf, 2*nlong); 258 mdct_backward(2048, freq_in, transf_buf);
346 259
347 /* add second half output of previous frame to windowed output of current frame */ 260 /* add second half output of previous frame to windowed output of current frame */
348 vector_fmul_add_add(time_out, transf_buf, window_long_prev, overlap, nlong); 261 vector_fmul_add_add(time_out, transf_buf, window_long_prev, overlap, nlong);
@@ -354,7 +267,7 @@ void ifilter_bank(fb_info *fb, uint8_t window_sequence, uint8_t window_shape,
354 267
355 case LONG_START_SEQUENCE: 268 case LONG_START_SEQUENCE:
356 /* perform iMDCT */ 269 /* perform iMDCT */
357 imdct_long(fb, freq_in, transf_buf, 2*nlong); 270 mdct_backward(2048, freq_in, transf_buf);
358 271
359 /* add second half output of previous frame to windowed output of current frame */ 272 /* add second half output of previous frame to windowed output of current frame */
360 vector_fmul_add_add(time_out, transf_buf, window_long_prev, overlap, nlong); 273 vector_fmul_add_add(time_out, transf_buf, window_long_prev, overlap, nlong);
@@ -373,14 +286,14 @@ void ifilter_bank(fb_info *fb, uint8_t window_sequence, uint8_t window_shape,
373 /*this could be assemblerized too, but this case is extremely uncommon*/ 286 /*this could be assemblerized too, but this case is extremely uncommon*/
374 287
375 /* perform iMDCT for each short block */ 288 /* perform iMDCT for each short block */
376 faad_imdct(fb->mdct256, freq_in+0*nshort, transf_buf+2*nshort*0); 289 mdct_backward(256, freq_in+0*nshort, transf_buf+2*nshort*0);
377 faad_imdct(fb->mdct256, freq_in+1*nshort, transf_buf+2*nshort*1); 290 mdct_backward(256, freq_in+1*nshort, transf_buf+2*nshort*1);
378 faad_imdct(fb->mdct256, freq_in+2*nshort, transf_buf+2*nshort*2); 291 mdct_backward(256, freq_in+2*nshort, transf_buf+2*nshort*2);
379 faad_imdct(fb->mdct256, freq_in+3*nshort, transf_buf+2*nshort*3); 292 mdct_backward(256, freq_in+3*nshort, transf_buf+2*nshort*3);
380 faad_imdct(fb->mdct256, freq_in+4*nshort, transf_buf+2*nshort*4); 293 mdct_backward(256, freq_in+4*nshort, transf_buf+2*nshort*4);
381 faad_imdct(fb->mdct256, freq_in+5*nshort, transf_buf+2*nshort*5); 294 mdct_backward(256, freq_in+5*nshort, transf_buf+2*nshort*5);
382 faad_imdct(fb->mdct256, freq_in+6*nshort, transf_buf+2*nshort*6); 295 mdct_backward(256, freq_in+6*nshort, transf_buf+2*nshort*6);
383 faad_imdct(fb->mdct256, freq_in+7*nshort, transf_buf+2*nshort*7); 296 mdct_backward(256, freq_in+7*nshort, transf_buf+2*nshort*7);
384 297
385 /* add second half output of previous frame to windowed output of current frame */ 298 /* add second half output of previous frame to windowed output of current frame */
386 for (i = 0; i < nflat_ls; i++) 299 for (i = 0; i < nflat_ls; i++)
@@ -411,7 +324,7 @@ void ifilter_bank(fb_info *fb, uint8_t window_sequence, uint8_t window_shape,
411 324
412 case LONG_STOP_SEQUENCE: 325 case LONG_STOP_SEQUENCE:
413 /* perform iMDCT */ 326 /* perform iMDCT */
414 imdct_long(fb, freq_in, transf_buf, 2*nlong); 327 mdct_backward(2048, freq_in, transf_buf);
415 328
416 /* add second half output of previous frame to windowed output of current frame */ 329 /* add second half output of previous frame to windowed output of current frame */
417 /* construct first half window using padding with 1's and 0's */ 330 /* construct first half window using padding with 1's and 0's */
diff --git a/apps/codecs/libfaad/filtbank.h b/apps/codecs/libfaad/filtbank.h
index 5227566078..24c6017a35 100644
--- a/apps/codecs/libfaad/filtbank.h
+++ b/apps/codecs/libfaad/filtbank.h
@@ -32,10 +32,6 @@
32extern "C" { 32extern "C" {
33#endif 33#endif
34 34
35
36fb_info *filter_bank_init(uint16_t frame_len);
37void filter_bank_end(fb_info *fb);
38
39#ifdef LTP_DEC 35#ifdef LTP_DEC
40void filter_bank_ltp(fb_info *fb, 36void filter_bank_ltp(fb_info *fb,
41 uint8_t window_sequence, 37 uint8_t window_sequence,
@@ -47,8 +43,8 @@ void filter_bank_ltp(fb_info *fb,
47 uint16_t frame_len); 43 uint16_t frame_len);
48#endif 44#endif
49 45
50void ifilter_bank(fb_info *fb, uint8_t window_sequence, uint8_t window_shape, 46void ifilter_bank(uint8_t window_sequence,
51 uint8_t window_shape_prev, real_t *freq_in, 47 real_t *freq_in,
52 real_t *time_out, real_t *overlap, 48 real_t *time_out, real_t *overlap,
53 uint8_t object_type, uint16_t frame_len); 49 uint8_t object_type, uint16_t frame_len);
54 50
diff --git a/apps/codecs/libfaad/mdct.c b/apps/codecs/libfaad/mdct.c
deleted file mode 100644
index 902c3f303d..0000000000
--- a/apps/codecs/libfaad/mdct.c
+++ /dev/null
@@ -1,298 +0,0 @@
1/*
2** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
3** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
4**
5** This program is free software; you can redistribute it and/or modify
6** it under the terms of the GNU General Public License as published by
7** the Free Software Foundation; either version 2 of the License, or
8** (at your option) any later version.
9**
10** This program is distributed in the hope that it will be useful,
11** but WITHOUT ANY WARRANTY; without even the implied warranty of
12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13** GNU General Public License for more details.
14**
15** You should have received a copy of the GNU General Public License
16** along with this program; if not, write to the Free Software
17** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18**
19** Any non-GPL usage of this software or parts of this software is strictly
20** forbidden.
21**
22** Commercial non-GPL licensing of this software is possible.
23** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
24**
25** $Id$
26**/
27
28/*
29 * Fast (I)MDCT Implementation using (I)FFT ((Inverse) Fast Fourier Transform)
30 * and consists of three steps: pre-(I)FFT complex multiplication, complex
31 * (I)FFT, post-(I)FFT complex multiplication,
32 *
33 * As described in:
34 * P. Duhamel, Y. Mahieux, and J.P. Petit, "A Fast Algorithm for the
35 * Implementation of Filter Banks Based on 'Time Domain Aliasing
36 * Cancellation’," IEEE Proc. on ICASSP‘91, 1991, pp. 2209-2212.
37 *
38 *
39 * As of April 6th 2002 completely rewritten.
40 * This (I)MDCT can now be used for any data size n, where n is divisible by 8.
41 *
42 */
43
44#include "common.h"
45#include "structs.h"
46
47#include <stdlib.h>
48#ifdef _WIN32_WCE
49#define assert(x)
50#else
51#include <assert.h>
52#endif
53
54#include "cfft.h"
55#include "mdct.h"
56#include "mdct_tab.h"
57
58
59mdct_info *faad_mdct_init(uint16_t N)
60{
61 mdct_info *mdct = (mdct_info*)faad_malloc(sizeof(mdct_info));
62
63 //assert(N % 8 == 0);
64
65 mdct->N = N;
66
67 /* NOTE: For "small framelengths" in FIXED_POINT the coefficients need to be
68 * scaled by sqrt("(nearest power of 2) > N" / N) */
69
70 /* RE(mdct->sincos[k]) = scale*(real_t)(cos(2.0*M_PI*(k+1./8.) / (real_t)N));
71 * IM(mdct->sincos[k]) = scale*(real_t)(sin(2.0*M_PI*(k+1./8.) / (real_t)N)); */
72 /* scale is 1 for fixed point, sqrt(N) for floating point */
73 switch (N)
74 {
75 case 2048: mdct->sincos = (complex_t*)mdct_tab_2048; break;
76 case 256: mdct->sincos = (complex_t*)mdct_tab_256; break;
77#ifdef LD_DEC
78 case 1024: mdct->sincos = (complex_t*)mdct_tab_1024; break;
79#endif
80#ifdef ALLOW_SMALL_FRAMELENGTH
81 case 1920: mdct->sincos = (complex_t*)mdct_tab_1920; break;
82 case 240: mdct->sincos = (complex_t*)mdct_tab_240; break;
83#ifdef LD_DEC
84 case 960: mdct->sincos = (complex_t*)mdct_tab_960; break;
85#endif
86#endif
87#ifdef SSR_DEC
88 case 512: mdct->sincos = (complex_t*)mdct_tab_512; break;
89 case 64: mdct->sincos = (complex_t*)mdct_tab_64; break;
90#endif
91 }
92
93 /* initialise fft */
94 mdct->cfft = cffti(N/4);
95
96#ifdef PROFILE
97 mdct->cycles = 0;
98 mdct->fft_cycles = 0;
99#endif
100
101 return mdct;
102}
103
104void faad_mdct_end(mdct_info *mdct)
105{
106 if (mdct != NULL)
107 {
108#ifdef PROFILE
109 printf("MDCT[%.4d]: %I64d cycles\n", mdct->N, mdct->cycles);
110 printf("CFFT[%.4d]: %I64d cycles\n", mdct->N/4, mdct->fft_cycles);
111#endif
112
113 cfftu(mdct->cfft);
114
115 faad_free(mdct);
116 }
117}
118
119void faad_imdct(mdct_info *mdct, real_t *X_in, real_t *X_out)
120{
121 uint16_t k;
122
123 complex_t x;
124#ifdef ALLOW_SMALL_FRAMELENGTH
125#ifdef FIXED_POINT
126 real_t scale = 0, b_scale = 0;
127#endif
128#endif
129 ALIGN static complex_t Z1[512] IBSS_ATTR;
130 complex_t *sincos = mdct->sincos;
131
132 uint16_t N = mdct->N;
133 uint16_t N2 = N >> 1;
134 uint16_t N4 = N >> 2;
135 uint16_t N8 = N >> 3;
136
137#ifdef PROFILE
138 int64_t count1, count2 = faad_get_ts();
139#endif
140
141#ifdef ALLOW_SMALL_FRAMELENGTH
142#ifdef FIXED_POINT
143 /* detect non-power of 2 */
144 if (N & (N-1))
145 {
146 /* adjust scale for non-power of 2 MDCT */
147 /* 2048/1920 */
148 b_scale = 1;
149 scale = COEF_CONST(1.0666666666666667);
150 }
151#endif
152#endif
153
154 /* pre-IFFT complex multiplication */
155 for (k = 0; k < N4; k++)
156 {
157 ComplexMult(&IM(Z1[k]), &RE(Z1[k]),
158 X_in[2*k], X_in[N2 - 1 - 2*k], RE(sincos[k]), IM(sincos[k]));
159 }
160
161#ifdef PROFILE
162 count1 = faad_get_ts();
163#endif
164
165 /* complex IFFT, any non-scaling FFT can be used here */
166 cfftb(mdct->cfft, Z1);
167
168#ifdef PROFILE
169 count1 = faad_get_ts() - count1;
170#endif
171
172 /* post-IFFT complex multiplication */
173 for (k = 0; k < N4; k++)
174 {
175 RE(x) = RE(Z1[k]);
176 IM(x) = IM(Z1[k]);
177 ComplexMult(&IM(Z1[k]), &RE(Z1[k]),
178 IM(x), RE(x), RE(sincos[k]), IM(sincos[k]));
179
180#ifdef ALLOW_SMALL_FRAMELENGTH
181#ifdef FIXED_POINT
182 /* non-power of 2 MDCT scaling */
183 if (b_scale)
184 {
185 RE(Z1[k]) = MUL_C(RE(Z1[k]), scale);
186 IM(Z1[k]) = MUL_C(IM(Z1[k]), scale);
187 }
188#endif
189#endif
190 }
191
192 /* reordering */
193 for (k = 0; k < N8; k+=2)
194 {
195 X_out[ 2*k] = IM(Z1[N8 + k]);
196 X_out[ 2 + 2*k] = IM(Z1[N8 + 1 + k]);
197
198 X_out[ 1 + 2*k] = -RE(Z1[N8 - 1 - k]);
199 X_out[ 3 + 2*k] = -RE(Z1[N8 - 2 - k]);
200
201 X_out[N4 + 2*k] = RE(Z1[ k]);
202 X_out[N4 + + 2 + 2*k] = RE(Z1[ 1 + k]);
203
204 X_out[N4 + 1 + 2*k] = -IM(Z1[N4 - 1 - k]);
205 X_out[N4 + 3 + 2*k] = -IM(Z1[N4 - 2 - k]);
206
207 X_out[N2 + 2*k] = RE(Z1[N8 + k]);
208 X_out[N2 + + 2 + 2*k] = RE(Z1[N8 + 1 + k]);
209
210 X_out[N2 + 1 + 2*k] = -IM(Z1[N8 - 1 - k]);
211 X_out[N2 + 3 + 2*k] = -IM(Z1[N8 - 2 - k]);
212
213 X_out[N2 + N4 + 2*k] = -IM(Z1[ k]);
214 X_out[N2 + N4 + 2 + 2*k] = -IM(Z1[ 1 + k]);
215
216 X_out[N2 + N4 + 1 + 2*k] = RE(Z1[N4 - 1 - k]);
217 X_out[N2 + N4 + 3 + 2*k] = RE(Z1[N4 - 2 - k]);
218 }
219
220#ifdef PROFILE
221 count2 = faad_get_ts() - count2;
222 mdct->fft_cycles += count1;
223 mdct->cycles += (count2 - count1);
224#endif
225}
226
227#ifdef LTP_DEC
228void faad_mdct(mdct_info *mdct, real_t *X_in, real_t *X_out)
229{
230 uint16_t k;
231
232 complex_t x;
233 ALIGN static complex_t Z1[512];
234 complex_t *sincos = mdct->sincos;
235
236 uint16_t N = mdct->N;
237 uint16_t N2 = N >> 1;
238 uint16_t N4 = N >> 2;
239 uint16_t N8 = N >> 3;
240
241#ifndef FIXED_POINT
242 real_t scale = REAL_CONST(N);
243#else
244 real_t scale = REAL_CONST(4.0/N);
245#endif
246
247#ifdef ALLOW_SMALL_FRAMELENGTH
248#ifdef FIXED_POINT
249 /* detect non-power of 2 */
250 if (N & (N-1))
251 {
252 /* adjust scale for non-power of 2 MDCT */
253 /* *= sqrt(2048/1920) */
254 scale = MUL_C(scale, COEF_CONST(1.0327955589886444));
255 }
256#endif
257#endif
258
259 /* pre-FFT complex multiplication */
260 for (k = 0; k < N8; k++)
261 {
262 uint16_t n = k << 1;
263 RE(x) = X_in[N - N4 - 1 - n] + X_in[N - N4 + n];
264 IM(x) = X_in[ N4 + n] - X_in[ N4 - 1 - n];
265
266 ComplexMult(&RE(Z1[k]), &IM(Z1[k]),
267 RE(x), IM(x), RE(sincos[k]), IM(sincos[k]));
268
269 RE(Z1[k]) = MUL_R(RE(Z1[k]), scale);
270 IM(Z1[k]) = MUL_R(IM(Z1[k]), scale);
271
272 RE(x) = X_in[N2 - 1 - n] - X_in[ n];
273 IM(x) = X_in[N2 + n] + X_in[N - 1 - n];
274
275 ComplexMult(&RE(Z1[k + N8]), &IM(Z1[k + N8]),
276 RE(x), IM(x), RE(sincos[k + N8]), IM(sincos[k + N8]));
277
278 RE(Z1[k + N8]) = MUL_R(RE(Z1[k + N8]), scale);
279 IM(Z1[k + N8]) = MUL_R(IM(Z1[k + N8]), scale);
280 }
281
282 /* complex FFT, any non-scaling FFT can be used here */
283 cfftf(mdct->cfft, Z1);
284
285 /* post-FFT complex multiplication */
286 for (k = 0; k < N4; k++)
287 {
288 uint16_t n = k << 1;
289 ComplexMult(&RE(x), &IM(x),
290 RE(Z1[k]), IM(Z1[k]), RE(sincos[k]), IM(sincos[k]));
291
292 X_out[ n] = -RE(x);
293 X_out[N2 - 1 - n] = IM(x);
294 X_out[N2 + n] = -IM(x);
295 X_out[N - 1 - n] = RE(x);
296 }
297}
298#endif
diff --git a/apps/codecs/libfaad/mdct.h b/apps/codecs/libfaad/mdct.h
deleted file mode 100644
index 308be816f9..0000000000
--- a/apps/codecs/libfaad/mdct.h
+++ /dev/null
@@ -1,45 +0,0 @@
1/*
2** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
3** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
4**
5** This program is free software; you can redistribute it and/or modify
6** it under the terms of the GNU General Public License as published by
7** the Free Software Foundation; either version 2 of the License, or
8** (at your option) any later version.
9**
10** This program is distributed in the hope that it will be useful,
11** but WITHOUT ANY WARRANTY; without even the implied warranty of
12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13** GNU General Public License for more details.
14**
15** You should have received a copy of the GNU General Public License
16** along with this program; if not, write to the Free Software
17** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18**
19** Any non-GPL usage of this software or parts of this software is strictly
20** forbidden.
21**
22** Commercial non-GPL licensing of this software is possible.
23** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
24**
25** $Id$
26**/
27
28#ifndef __MDCT_H__
29#define __MDCT_H__
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35
36mdct_info *faad_mdct_init(uint16_t N);
37void faad_mdct_end(mdct_info *mdct);
38void faad_imdct(mdct_info *mdct, real_t *X_in, real_t *X_out);
39void faad_mdct(mdct_info *mdct, real_t *X_in, real_t *X_out);
40
41
42#ifdef __cplusplus
43}
44#endif
45#endif
diff --git a/apps/codecs/libfaad/mdct_tab.h b/apps/codecs/libfaad/mdct_tab.h
deleted file mode 100644
index 2442a4e9c3..0000000000
--- a/apps/codecs/libfaad/mdct_tab.h
+++ /dev/null
@@ -1,3652 +0,0 @@
1/*
2** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
3** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
4**
5** This program is free software; you can redistribute it and/or modify
6** it under the terms of the GNU General Public License as published by
7** the Free Software Foundation; either version 2 of the License, or
8** (at your option) any later version.
9**
10** This program is distributed in the hope that it will be useful,
11** but WITHOUT ANY WARRANTY; without even the implied warranty of
12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13** GNU General Public License for more details.
14**
15** You should have received a copy of the GNU General Public License
16** along with this program; if not, write to the Free Software
17** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18**
19** Any non-GPL usage of this software or parts of this software is strictly
20** forbidden.
21**
22** Commercial non-GPL licensing of this software is possible.
23** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
24**
25** $Id$
26**/
27
28#ifndef __MDCT_TAB_H__
29#define __MDCT_TAB_H__
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35#ifdef FIXED_POINT
36
37/* 256 (N/4) complex twiddle factors */
38ALIGN static const complex_t mdct_tab_2048[] ICONST_ATTR =
39{
40 { FRAC_CONST(0.999999926465718), FRAC_CONST(0.000383495187571) },
41 { FRAC_CONST(0.999994043728986), FRAC_CONST(0.003451449920136) },
42 { FRAC_CONST(0.999978748667469), FRAC_CONST(0.006519372166339) },
43 { FRAC_CONST(0.999954041425130), FRAC_CONST(0.009587233049729) },
44 { FRAC_CONST(0.999919922234523), FRAC_CONST(0.012655003694430) },
45 { FRAC_CONST(0.999876391416790), FRAC_CONST(0.015722655225417) },
46 { FRAC_CONST(0.999823449381662), FRAC_CONST(0.018790158768785) },
47 { FRAC_CONST(0.999761096627447), FRAC_CONST(0.021857485452022) },
48 { FRAC_CONST(0.999689333741034), FRAC_CONST(0.024924606404281) },
49 { FRAC_CONST(0.999608161397882), FRAC_CONST(0.027991492756653) },
50 { FRAC_CONST(0.999517580362017), FRAC_CONST(0.031058115642435) },
51 { FRAC_CONST(0.999417591486022), FRAC_CONST(0.034124446197403) },
52 { FRAC_CONST(0.999308195711029), FRAC_CONST(0.037190455560088) },
53 { FRAC_CONST(0.999189394066715), FRAC_CONST(0.040256114872041) },
54 { FRAC_CONST(0.999061187671285), FRAC_CONST(0.043321395278110) },
55 { FRAC_CONST(0.998923577731466), FRAC_CONST(0.046386267926707) },
56 { FRAC_CONST(0.998776565542496), FRAC_CONST(0.049450703970085) },
57 { FRAC_CONST(0.998620152488109), FRAC_CONST(0.052514674564603) },
58 { FRAC_CONST(0.998454340040525), FRAC_CONST(0.055578150871005) },
59 { FRAC_CONST(0.998279129760433), FRAC_CONST(0.058641104054683) },
60 { FRAC_CONST(0.998094523296980), FRAC_CONST(0.061703505285957) },
61 { FRAC_CONST(0.997900522387752), FRAC_CONST(0.064765325740340) },
62 { FRAC_CONST(0.997697128858759), FRAC_CONST(0.067826536598811) },
63 { FRAC_CONST(0.997484344624418), FRAC_CONST(0.070887109048088) },
64 { FRAC_CONST(0.997262171687536), FRAC_CONST(0.073947014280897) },
65 { FRAC_CONST(0.997030612139289), FRAC_CONST(0.077006223496246) },
66 { FRAC_CONST(0.996789668159205), FRAC_CONST(0.080064707899691) },
67 { FRAC_CONST(0.996539342015138), FRAC_CONST(0.083122438703613) },
68 { FRAC_CONST(0.996279636063255), FRAC_CONST(0.086179387127485) },
69 { FRAC_CONST(0.996010552748006), FRAC_CONST(0.089235524398144) },
70 { FRAC_CONST(0.995732094602106), FRAC_CONST(0.092290821750062) },
71 { FRAC_CONST(0.995444264246510), FRAC_CONST(0.095345250425618) },
72 { FRAC_CONST(0.995147064390386), FRAC_CONST(0.098398781675364) },
73 { FRAC_CONST(0.994840497831093), FRAC_CONST(0.101451386758302) },
74 { FRAC_CONST(0.994524567454152), FRAC_CONST(0.104503036942151) },
75 { FRAC_CONST(0.994199276233219), FRAC_CONST(0.107553703503616) },
76 { FRAC_CONST(0.993864627230060), FRAC_CONST(0.110603357728662) },
77 { FRAC_CONST(0.993520623594518), FRAC_CONST(0.113651970912782) },
78 { FRAC_CONST(0.993167268564487), FRAC_CONST(0.116699514361268) },
79 { FRAC_CONST(0.992804565465879), FRAC_CONST(0.119745959389480) },
80 { FRAC_CONST(0.992432517712594), FRAC_CONST(0.122791277323117) },
81 { FRAC_CONST(0.992051128806486), FRAC_CONST(0.125835439498487) },
82 { FRAC_CONST(0.991660402337333), FRAC_CONST(0.128878417262777) },
83 { FRAC_CONST(0.991260341982802), FRAC_CONST(0.131920181974320) },
84 { FRAC_CONST(0.990850951508414), FRAC_CONST(0.134960705002869) },
85 { FRAC_CONST(0.990432234767506), FRAC_CONST(0.137999957729863) },
86 { FRAC_CONST(0.990004195701201), FRAC_CONST(0.141037911548698) },
87 { FRAC_CONST(0.989566838338365), FRAC_CONST(0.144074537864995) },
88 { FRAC_CONST(0.989120166795573), FRAC_CONST(0.147109808096872) },
89 { FRAC_CONST(0.988664185277066), FRAC_CONST(0.150143693675208) },
90 { FRAC_CONST(0.988198898074718), FRAC_CONST(0.153176166043918) },
91 { FRAC_CONST(0.987724309567987), FRAC_CONST(0.156207196660216) },
92 { FRAC_CONST(0.987240424223882), FRAC_CONST(0.159236756994888) },
93 { FRAC_CONST(0.986747246596917), FRAC_CONST(0.162264818532558) },
94 { FRAC_CONST(0.986244781329065), FRAC_CONST(0.165291352771958) },
95 { FRAC_CONST(0.985733033149723), FRAC_CONST(0.168316331226195) },
96 { FRAC_CONST(0.985212006875659), FRAC_CONST(0.171339725423019) },
97 { FRAC_CONST(0.984681707410971), FRAC_CONST(0.174361506905094) },
98 { FRAC_CONST(0.984142139747039), FRAC_CONST(0.177381647230260) },
99 { FRAC_CONST(0.983593308962479), FRAC_CONST(0.180400117971807) },
100 { FRAC_CONST(0.983035220223096), FRAC_CONST(0.183416890718739) },
101 { FRAC_CONST(0.982467878781833), FRAC_CONST(0.186431937076042) },
102 { FRAC_CONST(0.981891289978725), FRAC_CONST(0.189445228664950) },
103 { FRAC_CONST(0.981305459240845), FRAC_CONST(0.192456737123217) },
104 { FRAC_CONST(0.980710392082254), FRAC_CONST(0.195466434105377) },
105 { FRAC_CONST(0.980106094103952), FRAC_CONST(0.198474291283016) },
106 { FRAC_CONST(0.979492570993821), FRAC_CONST(0.201480280345038) },
107 { FRAC_CONST(0.978869828526574), FRAC_CONST(0.204484372997927) },
108 { FRAC_CONST(0.978237872563701), FRAC_CONST(0.207486540966021) },
109 { FRAC_CONST(0.977596709053412), FRAC_CONST(0.210486755991770) },
110 { FRAC_CONST(0.976946344030582), FRAC_CONST(0.213484989836008) },
111 { FRAC_CONST(0.976286783616694), FRAC_CONST(0.216481214278217) },
112 { FRAC_CONST(0.975618034019782), FRAC_CONST(0.219475401116790) },
113 { FRAC_CONST(0.974940101534372), FRAC_CONST(0.222467522169302) },
114 { FRAC_CONST(0.974252992541423), FRAC_CONST(0.225457549272769) },
115 { FRAC_CONST(0.973556713508266), FRAC_CONST(0.228445454283916) },
116 { FRAC_CONST(0.972851270988544), FRAC_CONST(0.231431209079446) },
117 { FRAC_CONST(0.972136671622152), FRAC_CONST(0.234414785556295) },
118 { FRAC_CONST(0.971412922135171), FRAC_CONST(0.237396155631907) },
119 { FRAC_CONST(0.970680029339806), FRAC_CONST(0.240375291244489) },
120 { FRAC_CONST(0.969938000134324), FRAC_CONST(0.243352164353285) },
121 { FRAC_CONST(0.969186841502986), FRAC_CONST(0.246326746938829) },
122 { FRAC_CONST(0.968426560515983), FRAC_CONST(0.249299011003218) },
123 { FRAC_CONST(0.967657164329370), FRAC_CONST(0.252268928570371) },
124 { FRAC_CONST(0.966878660184996), FRAC_CONST(0.255236471686292) },
125 { FRAC_CONST(0.966091055410439), FRAC_CONST(0.258201612419335) },
126 { FRAC_CONST(0.965294357418935), FRAC_CONST(0.261164322860466) },
127 { FRAC_CONST(0.964488573709308), FRAC_CONST(0.264124575123528) },
128 { FRAC_CONST(0.963673711865903), FRAC_CONST(0.267082341345496) },
129 { FRAC_CONST(0.962849779558509), FRAC_CONST(0.270037593686751) },
130 { FRAC_CONST(0.962016784542291), FRAC_CONST(0.272990304331330) },
131 { FRAC_CONST(0.961174734657714), FRAC_CONST(0.275940445487197) },
132 { FRAC_CONST(0.960323637830474), FRAC_CONST(0.278887989386500) },
133 { FRAC_CONST(0.959463502071418), FRAC_CONST(0.281832908285833) },
134 { FRAC_CONST(0.958594335476470), FRAC_CONST(0.284775174466498) },
135 { FRAC_CONST(0.957716146226559), FRAC_CONST(0.287714760234765) },
136 { FRAC_CONST(0.956828942587535), FRAC_CONST(0.290651637922133) },
137 { FRAC_CONST(0.955932732910098), FRAC_CONST(0.293585779885591) },
138 { FRAC_CONST(0.955027525629714), FRAC_CONST(0.296517158507877) },
139 { FRAC_CONST(0.954113329266539), FRAC_CONST(0.299445746197740) },
140 { FRAC_CONST(0.953190152425337), FRAC_CONST(0.302371515390196) },
141 { FRAC_CONST(0.952258003795400), FRAC_CONST(0.305294438546792) },
142 { FRAC_CONST(0.951316892150466), FRAC_CONST(0.308214488155861) },
143 { FRAC_CONST(0.950366826348636), FRAC_CONST(0.311131636732785) },
144 { FRAC_CONST(0.949407815332292), FRAC_CONST(0.314045856820251) },
145 { FRAC_CONST(0.948439868128010), FRAC_CONST(0.316957120988508) },
146 { FRAC_CONST(0.947462993846478), FRAC_CONST(0.319865401835631) },
147 { FRAC_CONST(0.946477201682409), FRAC_CONST(0.322770671987771) },
148 { FRAC_CONST(0.945482500914454), FRAC_CONST(0.325672904099420) },
149 { FRAC_CONST(0.944478900905116), FRAC_CONST(0.328572070853664) },
150 { FRAC_CONST(0.943466411100659), FRAC_CONST(0.331468144962441) },
151 { FRAC_CONST(0.942445041031025), FRAC_CONST(0.334361099166799) },
152 { FRAC_CONST(0.941414800309736), FRAC_CONST(0.337250906237151) },
153 { FRAC_CONST(0.940375698633812), FRAC_CONST(0.340137538973532) },
154 { FRAC_CONST(0.939327745783671), FRAC_CONST(0.343020970205856) },
155 { FRAC_CONST(0.938270951623047), FRAC_CONST(0.345901172794169) },
156 { FRAC_CONST(0.937205326098888), FRAC_CONST(0.348778119628908) },
157 { FRAC_CONST(0.936130879241267), FRAC_CONST(0.351651783631155) },
158 { FRAC_CONST(0.935047621163287), FRAC_CONST(0.354522137752887) },
159 { FRAC_CONST(0.933955562060987), FRAC_CONST(0.357389154977241) },
160 { FRAC_CONST(0.932854712213241), FRAC_CONST(0.360252808318757) },
161 { FRAC_CONST(0.931745081981669), FRAC_CONST(0.363113070823639) },
162 { FRAC_CONST(0.930626681810532), FRAC_CONST(0.365969915570009) },
163 { FRAC_CONST(0.929499522226639), FRAC_CONST(0.368823315668154) },
164 { FRAC_CONST(0.928363613839244), FRAC_CONST(0.371673244260787) },
165 { FRAC_CONST(0.927218967339952), FRAC_CONST(0.374519674523293) },
166 { FRAC_CONST(0.926065593502609), FRAC_CONST(0.377362579663988) },
167 { FRAC_CONST(0.924903503183211), FRAC_CONST(0.380201932924366) },
168 { FRAC_CONST(0.923732707319793), FRAC_CONST(0.383037707579352) },
169 { FRAC_CONST(0.922553216932333), FRAC_CONST(0.385869876937555) },
170 { FRAC_CONST(0.921365043122642), FRAC_CONST(0.388698414341519) },
171 { FRAC_CONST(0.920168197074266), FRAC_CONST(0.391523293167972) },
172 { FRAC_CONST(0.918962690052376), FRAC_CONST(0.394344486828080) },
173 { FRAC_CONST(0.917748533403661), FRAC_CONST(0.397161968767692) },
174 { FRAC_CONST(0.916525738556228), FRAC_CONST(0.399975712467595) },
175 { FRAC_CONST(0.915294317019487), FRAC_CONST(0.402785691443764) },
176 { FRAC_CONST(0.914054280384047), FRAC_CONST(0.405591879247604) },
177 { FRAC_CONST(0.912805640321604), FRAC_CONST(0.408394249466208) },
178 { FRAC_CONST(0.911548408584834), FRAC_CONST(0.411192775722600) },
179 { FRAC_CONST(0.910282597007282), FRAC_CONST(0.413987431675985) },
180 { FRAC_CONST(0.909008217503247), FRAC_CONST(0.416778191021998) },
181 { FRAC_CONST(0.907725282067676), FRAC_CONST(0.419565027492947) },
182 { FRAC_CONST(0.906433802776045), FRAC_CONST(0.422347914858067) },
183 { FRAC_CONST(0.905133791784250), FRAC_CONST(0.425126826923762) },
184 { FRAC_CONST(0.903825261328488), FRAC_CONST(0.427901737533854) },
185 { FRAC_CONST(0.902508223725146), FRAC_CONST(0.430672620569827) },
186 { FRAC_CONST(0.901182691370685), FRAC_CONST(0.433439449951074) },
187 { FRAC_CONST(0.899848676741519), FRAC_CONST(0.436202199635144) },
188 { FRAC_CONST(0.898506192393902), FRAC_CONST(0.438960843617984) },
189 { FRAC_CONST(0.897155250963809), FRAC_CONST(0.441715355934187) },
190 { FRAC_CONST(0.895795865166814), FRAC_CONST(0.444465710657234) },
191 { FRAC_CONST(0.894428047797974), FRAC_CONST(0.447211881899738) },
192 { FRAC_CONST(0.893051811731707), FRAC_CONST(0.449953843813691) },
193 { FRAC_CONST(0.891667169921672), FRAC_CONST(0.452691570590701) },
194 { FRAC_CONST(0.890274135400645), FRAC_CONST(0.455425036462242) },
195 { FRAC_CONST(0.888872721280396), FRAC_CONST(0.458154215699893) },
196 { FRAC_CONST(0.887462940751569), FRAC_CONST(0.460879082615579) },
197 { FRAC_CONST(0.886044807083556), FRAC_CONST(0.463599611561814) },
198 { FRAC_CONST(0.884618333624370), FRAC_CONST(0.466315776931944) },
199 { FRAC_CONST(0.883183533800523), FRAC_CONST(0.469027553160387) },
200 { FRAC_CONST(0.881740421116898), FRAC_CONST(0.471734914722871) },
201 { FRAC_CONST(0.880289009156621), FRAC_CONST(0.474437836136679) },
202 { FRAC_CONST(0.878829311580933), FRAC_CONST(0.477136291960885) },
203 { FRAC_CONST(0.877361342129065), FRAC_CONST(0.479830256796594) },
204 { FRAC_CONST(0.875885114618104), FRAC_CONST(0.482519705287184) },
205 { FRAC_CONST(0.874400642942865), FRAC_CONST(0.485204612118542) },
206 { FRAC_CONST(0.872907941075761), FRAC_CONST(0.487884952019301) },
207 { FRAC_CONST(0.871407023066671), FRAC_CONST(0.490560699761082) },
208 { FRAC_CONST(0.869897903042806), FRAC_CONST(0.493231830158728) },
209 { FRAC_CONST(0.868380595208580), FRAC_CONST(0.495898318070542) },
210 { FRAC_CONST(0.866855113845470), FRAC_CONST(0.498560138398525) },
211 { FRAC_CONST(0.865321473311890), FRAC_CONST(0.501217266088610) },
212 { FRAC_CONST(0.863779688043047), FRAC_CONST(0.503869676130899) },
213 { FRAC_CONST(0.862229772550811), FRAC_CONST(0.506517343559899) },
214 { FRAC_CONST(0.860671741423578), FRAC_CONST(0.509160243454755) },
215 { FRAC_CONST(0.859105609326130), FRAC_CONST(0.511798350939487) },
216 { FRAC_CONST(0.857531390999499), FRAC_CONST(0.514431641183223) },
217 { FRAC_CONST(0.855949101260827), FRAC_CONST(0.517060089400432) },
218 { FRAC_CONST(0.854358755003227), FRAC_CONST(0.519683670851158) },
219 { FRAC_CONST(0.852760367195645), FRAC_CONST(0.522302360841255) },
220 { FRAC_CONST(0.851153952882715), FRAC_CONST(0.524916134722613) },
221 { FRAC_CONST(0.849539527184621), FRAC_CONST(0.527524967893398) },
222 { FRAC_CONST(0.847917105296951), FRAC_CONST(0.530128835798279) },
223 { FRAC_CONST(0.846286702490560), FRAC_CONST(0.532727713928659) },
224 { FRAC_CONST(0.844648334111418), FRAC_CONST(0.535321577822907) },
225 { FRAC_CONST(0.843002015580473), FRAC_CONST(0.537910403066589) },
226 { FRAC_CONST(0.841347762393502), FRAC_CONST(0.540494165292695) },
227 { FRAC_CONST(0.839685590120966), FRAC_CONST(0.543072840181872) },
228 { FRAC_CONST(0.838015514407864), FRAC_CONST(0.545646403462649) },
229 { FRAC_CONST(0.836337550973584), FRAC_CONST(0.548214830911668) },
230 { FRAC_CONST(0.834651715611756), FRAC_CONST(0.550778098353912) },
231 { FRAC_CONST(0.832958024190107), FRAC_CONST(0.553336181662932) },
232 { FRAC_CONST(0.831256492650303), FRAC_CONST(0.555889056761074) },
233 { FRAC_CONST(0.829547137007809), FRAC_CONST(0.558436699619704) },
234 { FRAC_CONST(0.827829973351730), FRAC_CONST(0.560979086259438) },
235 { FRAC_CONST(0.826105017844665), FRAC_CONST(0.563516192750365) },
236 { FRAC_CONST(0.824372286722551), FRAC_CONST(0.566047995212271) },
237 { FRAC_CONST(0.822631796294515), FRAC_CONST(0.568574469814869) },
238 { FRAC_CONST(0.820883562942715), FRAC_CONST(0.571095592778017) },
239 { FRAC_CONST(0.819127603122188), FRAC_CONST(0.573611340371945) },
240 { FRAC_CONST(0.817363933360698), FRAC_CONST(0.576121688917478) },
241 { FRAC_CONST(0.815592570258577), FRAC_CONST(0.578626614786261) },
242 { FRAC_CONST(0.813813530488567), FRAC_CONST(0.581126094400978) },
243 { FRAC_CONST(0.812026830795670), FRAC_CONST(0.583620104235573) },
244 { FRAC_CONST(0.810232487996982), FRAC_CONST(0.586108620815476) },
245 { FRAC_CONST(0.808430518981543), FRAC_CONST(0.588591620717823) },
246 { FRAC_CONST(0.806620940710170), FRAC_CONST(0.591069080571671) },
247 { FRAC_CONST(0.804803770215303), FRAC_CONST(0.593540977058226) },
248 { FRAC_CONST(0.802979024600843), FRAC_CONST(0.596007286911057) },
249 { FRAC_CONST(0.801146721041991), FRAC_CONST(0.598467986916314) },
250 { FRAC_CONST(0.799306876785086), FRAC_CONST(0.600923053912954) },
251 { FRAC_CONST(0.797459509147442), FRAC_CONST(0.603372464792950) },
252 { FRAC_CONST(0.795604635517188), FRAC_CONST(0.605816196501515) },
253 { FRAC_CONST(0.793742273353100), FRAC_CONST(0.608254226037314) },
254 { FRAC_CONST(0.791872440184440), FRAC_CONST(0.610686530452686) },
255 { FRAC_CONST(0.789995153610791), FRAC_CONST(0.613113086853855) },
256 { FRAC_CONST(0.788110431301888), FRAC_CONST(0.615533872401147) },
257 { FRAC_CONST(0.786218290997456), FRAC_CONST(0.617948864309208) },
258 { FRAC_CONST(0.784318750507039), FRAC_CONST(0.620358039847214) },
259 { FRAC_CONST(0.782411827709837), FRAC_CONST(0.622761376339086) },
260 { FRAC_CONST(0.780497540554532), FRAC_CONST(0.625158851163708) },
261 { FRAC_CONST(0.778575907059125), FRAC_CONST(0.627550441755132) },
262 { FRAC_CONST(0.776646945310762), FRAC_CONST(0.629936125602796) },
263 { FRAC_CONST(0.774710673465566), FRAC_CONST(0.632315880251738) },
264 { FRAC_CONST(0.772767109748464), FRAC_CONST(0.634689683302798) },
265 { FRAC_CONST(0.770816272453019), FRAC_CONST(0.637057512412839) },
266 { FRAC_CONST(0.768858179941253), FRAC_CONST(0.639419345294951) },
267 { FRAC_CONST(0.766892850643481), FRAC_CONST(0.641775159718664) },
268 { FRAC_CONST(0.764920303058128), FRAC_CONST(0.644124933510155) },
269 { FRAC_CONST(0.762940555751566), FRAC_CONST(0.646468644552458) },
270 { FRAC_CONST(0.760953627357928), FRAC_CONST(0.648806270785673) },
271 { FRAC_CONST(0.758959536578942), FRAC_CONST(0.651137790207170) },
272 { FRAC_CONST(0.756958302183750), FRAC_CONST(0.653463180871802) },
273 { FRAC_CONST(0.754949943008733), FRAC_CONST(0.655782420892106) },
274 { FRAC_CONST(0.752934477957330), FRAC_CONST(0.658095488438511) },
275 { FRAC_CONST(0.750911925999868), FRAC_CONST(0.660402361739545) },
276 { FRAC_CONST(0.748882306173375), FRAC_CONST(0.662703019082037) },
277 { FRAC_CONST(0.746845637581407), FRAC_CONST(0.664997438811325) },
278 { FRAC_CONST(0.744801939393863), FRAC_CONST(0.667285599331456) },
279 { FRAC_CONST(0.742751230846809), FRAC_CONST(0.669567479105392) },
280 { FRAC_CONST(0.740693531242296), FRAC_CONST(0.671843056655212) },
281 { FRAC_CONST(0.738628859948175), FRAC_CONST(0.674112310562312) },
282 { FRAC_CONST(0.736557236397919), FRAC_CONST(0.676375219467612) },
283 { FRAC_CONST(0.734478680090438), FRAC_CONST(0.678631762071749) },
284 { FRAC_CONST(0.732393210589896), FRAC_CONST(0.680881917135287) },
285 { FRAC_CONST(0.730300847525525), FRAC_CONST(0.683125663478909) },
286 { FRAC_CONST(0.728201610591445), FRAC_CONST(0.685362979983619) },
287 { FRAC_CONST(0.726095519546471), FRAC_CONST(0.687593845590942) },
288 { FRAC_CONST(0.723982594213936), FRAC_CONST(0.689818239303122) },
289 { FRAC_CONST(0.721862854481496), FRAC_CONST(0.692036140183319) },
290 { FRAC_CONST(0.719736320300951), FRAC_CONST(0.694247527355803) },
291 { FRAC_CONST(0.717603011688049), FRAC_CONST(0.696452380006158) },
292 { FRAC_CONST(0.715462948722304), FRAC_CONST(0.698650677381469) },
293 { FRAC_CONST(0.713316151546803), FRAC_CONST(0.700842398790526) },
294 { FRAC_CONST(0.711162640368018), FRAC_CONST(0.703027523604011) },
295 { FRAC_CONST(0.709002435455618), FRAC_CONST(0.705206031254698) },
296 { FRAC_CONST(0.706835557142274), FRAC_CONST(0.707377901237642) },
297 { FRAC_CONST(0.704662025823469), FRAC_CONST(0.709543113110377) },
298 { FRAC_CONST(0.702481861957308), FRAC_CONST(0.711701646493103) },
299 { FRAC_CONST(0.700295086064324), FRAC_CONST(0.713853481068882) },
300 { FRAC_CONST(0.698101718727284), FRAC_CONST(0.715998596583829) },
301 { FRAC_CONST(0.695901780590997), FRAC_CONST(0.718136972847297) },
302 { FRAC_CONST(0.693695292362118), FRAC_CONST(0.720268589732077) },
303 { FRAC_CONST(0.691482274808956), FRAC_CONST(0.722393427174578) },
304 { FRAC_CONST(0.689262748761273), FRAC_CONST(0.724511465175020) },
305 { FRAC_CONST(0.687036735110096), FRAC_CONST(0.726622683797623) },
306 { FRAC_CONST(0.684804254807511), FRAC_CONST(0.728727063170794) },
307 { FRAC_CONST(0.682565328866473), FRAC_CONST(0.730824583487312) },
308 { FRAC_CONST(0.680319978360607), FRAC_CONST(0.732915225004518) },
309 { FRAC_CONST(0.678068224424007), FRAC_CONST(0.734998968044497) },
310 { FRAC_CONST(0.675810088251037), FRAC_CONST(0.737075792994266) },
311 { FRAC_CONST(0.673545591096136), FRAC_CONST(0.739145680305957) },
312 { FRAC_CONST(0.671274754273613), FRAC_CONST(0.741208610497004) },
313 { FRAC_CONST(0.668997599157450), FRAC_CONST(0.743264564150321) },
314 { FRAC_CONST(0.666714147181098), FRAC_CONST(0.745313521914490) },
315 { FRAC_CONST(0.664424419837275), FRAC_CONST(0.747355464503940) },
316 { FRAC_CONST(0.662128438677769), FRAC_CONST(0.749390372699130) },
317 { FRAC_CONST(0.659826225313227), FRAC_CONST(0.751418227346727) },
318 { FRAC_CONST(0.657517801412960), FRAC_CONST(0.753439009359794) },
319 { FRAC_CONST(0.655203188704732), FRAC_CONST(0.755452699717958) },
320 { FRAC_CONST(0.652882408974559), FRAC_CONST(0.757459279467601) },
321 { FRAC_CONST(0.650555484066504), FRAC_CONST(0.759458729722028) },
322 { FRAC_CONST(0.648222435882470), FRAC_CONST(0.761451031661654) },
323 { FRAC_CONST(0.645883286381996), FRAC_CONST(0.763436166534172) },
324 { FRAC_CONST(0.643538057582048), FRAC_CONST(0.765414115654738) },
325 { FRAC_CONST(0.641186771556811), FRAC_CONST(0.767384860406142) },
326 { FRAC_CONST(0.638829450437486), FRAC_CONST(0.769348382238982) },
327 { FRAC_CONST(0.636466116412077), FRAC_CONST(0.771304662671845) },
328 { FRAC_CONST(0.634096791725184), FRAC_CONST(0.773253683291473) },
329 { FRAC_CONST(0.631721498677792), FRAC_CONST(0.775195425752941) },
330 { FRAC_CONST(0.629340259627066), FRAC_CONST(0.777129871779832) },
331 { FRAC_CONST(0.626953096986133), FRAC_CONST(0.779057003164401) },
332 { FRAC_CONST(0.624560033223877), FRAC_CONST(0.780976801767754) },
333 { FRAC_CONST(0.622161090864727), FRAC_CONST(0.782889249520015) },
334 { FRAC_CONST(0.619756292488441), FRAC_CONST(0.784794328420499) },
335 { FRAC_CONST(0.617345660729897), FRAC_CONST(0.786692020537877) },
336 { FRAC_CONST(0.614929218278880), FRAC_CONST(0.788582308010347) },
337 { FRAC_CONST(0.612506987879866), FRAC_CONST(0.790465173045805) },
338 { FRAC_CONST(0.610078992331810), FRAC_CONST(0.792340597922007) },
339 { FRAC_CONST(0.607645254487931), FRAC_CONST(0.794208564986741) },
340 { FRAC_CONST(0.605205797255497), FRAC_CONST(0.796069056657988) },
341 { FRAC_CONST(0.602760643595607), FRAC_CONST(0.797922055424093) },
342 { FRAC_CONST(0.600309816522980), FRAC_CONST(0.799767543843926) },
343 { FRAC_CONST(0.597853339105734), FRAC_CONST(0.801605504547046) },
344 { FRAC_CONST(0.595391234465169), FRAC_CONST(0.803435920233868) },
345 { FRAC_CONST(0.592923525775551), FRAC_CONST(0.805258773675822) },
346 { FRAC_CONST(0.590450236263896), FRAC_CONST(0.807074047715518) },
347 { FRAC_CONST(0.587971389209745), FRAC_CONST(0.808881725266904) },
348 { FRAC_CONST(0.585487007944951), FRAC_CONST(0.810681789315431) },
349 { FRAC_CONST(0.582997115853458), FRAC_CONST(0.812474222918210) },
350 { FRAC_CONST(0.580501736371077), FRAC_CONST(0.814259009204175) },
351 { FRAC_CONST(0.578000892985270), FRAC_CONST(0.816036131374237) },
352 { FRAC_CONST(0.575494609234928), FRAC_CONST(0.817805572701444) },
353 { FRAC_CONST(0.572982908710149), FRAC_CONST(0.819567316531142) },
354 { FRAC_CONST(0.570465815052013), FRAC_CONST(0.821321346281127) },
355 { FRAC_CONST(0.567943351952366), FRAC_CONST(0.823067645441802) },
356 { FRAC_CONST(0.565415543153590), FRAC_CONST(0.824806197576334) },
357 { FRAC_CONST(0.562882412448385), FRAC_CONST(0.826536986320810) },
358 { FRAC_CONST(0.560343983679541), FRAC_CONST(0.828259995384386) },
359 { FRAC_CONST(0.557800280739717), FRAC_CONST(0.829975208549444) },
360 { FRAC_CONST(0.555251327571214), FRAC_CONST(0.831682609671745) },
361 { FRAC_CONST(0.552697148165750), FRAC_CONST(0.833382182680580) },
362 { FRAC_CONST(0.550137766564234), FRAC_CONST(0.835073911578919) },
363 { FRAC_CONST(0.547573206856540), FRAC_CONST(0.836757780443567) },
364 { FRAC_CONST(0.545003493181281), FRAC_CONST(0.838433773425308) },
365 { FRAC_CONST(0.542428649725581), FRAC_CONST(0.840101874749058) },
366 { FRAC_CONST(0.539848700724848), FRAC_CONST(0.841762068714012) },
367 { FRAC_CONST(0.537263670462543), FRAC_CONST(0.843414339693793) },
368 { FRAC_CONST(0.534673583269956), FRAC_CONST(0.845058672136595) },
369 { FRAC_CONST(0.532078463525974), FRAC_CONST(0.846695050565337) },
370 { FRAC_CONST(0.529478335656852), FRAC_CONST(0.848323459577802) },
371 { FRAC_CONST(0.526873224135985), FRAC_CONST(0.849943883846782) },
372 { FRAC_CONST(0.524263153483673), FRAC_CONST(0.851556308120229) },
373 { FRAC_CONST(0.521648148266897), FRAC_CONST(0.853160717221390) },
374 { FRAC_CONST(0.519028233099081), FRAC_CONST(0.854757096048957) },
375 { FRAC_CONST(0.516403432639864), FRAC_CONST(0.856345429577204) },
376 { FRAC_CONST(0.513773771594868), FRAC_CONST(0.857925702856130) },
377 { FRAC_CONST(0.511139274715464), FRAC_CONST(0.859497901011602) },
378 { FRAC_CONST(0.508499966798541), FRAC_CONST(0.861062009245491) },
379 { FRAC_CONST(0.505855872686269), FRAC_CONST(0.862618012835817) },
380 { FRAC_CONST(0.503207017265869), FRAC_CONST(0.864165897136879) },
381 { FRAC_CONST(0.500553425469378), FRAC_CONST(0.865705647579402) },
382 { FRAC_CONST(0.497895122273411), FRAC_CONST(0.867237249670668) },
383 { FRAC_CONST(0.495232132698931), FRAC_CONST(0.868760688994655) },
384 { FRAC_CONST(0.492564481811011), FRAC_CONST(0.870275951212172) },
385 { FRAC_CONST(0.489892194718595), FRAC_CONST(0.871783022060993) },
386 { FRAC_CONST(0.487215296574269), FRAC_CONST(0.873281887355994) },
387 { FRAC_CONST(0.484533812574016), FRAC_CONST(0.874772532989284) },
388 { FRAC_CONST(0.481847767956986), FRAC_CONST(0.876254944930338) },
389 { FRAC_CONST(0.479157188005253), FRAC_CONST(0.877729109226132) },
390 { FRAC_CONST(0.476462098043581), FRAC_CONST(0.879195012001267) },
391 { FRAC_CONST(0.473762523439183), FRAC_CONST(0.880652639458111) },
392 { FRAC_CONST(0.471058489601483), FRAC_CONST(0.882101977876918) },
393 { FRAC_CONST(0.468350021981877), FRAC_CONST(0.883543013615962) },
394 { FRAC_CONST(0.465637146073494), FRAC_CONST(0.884975733111667) },
395 { FRAC_CONST(0.462919887410955), FRAC_CONST(0.886400122878730) },
396 { FRAC_CONST(0.460198271570134), FRAC_CONST(0.887816169510255) },
397 { FRAC_CONST(0.457472324167916), FRAC_CONST(0.889223859677868) },
398 { FRAC_CONST(0.454742070861955), FRAC_CONST(0.890623180131856) },
399 { FRAC_CONST(0.452007537350437), FRAC_CONST(0.892014117701280) },
400 { FRAC_CONST(0.449268749371830), FRAC_CONST(0.893396659294108) },
401 { FRAC_CONST(0.446525732704651), FRAC_CONST(0.894770791897330) },
402 { FRAC_CONST(0.443778513167218), FRAC_CONST(0.896136502577087) },
403 { FRAC_CONST(0.441027116617407), FRAC_CONST(0.897493778478790) },
404 { FRAC_CONST(0.438271568952410), FRAC_CONST(0.898842606827242) },
405 { FRAC_CONST(0.435511896108492), FRAC_CONST(0.900182974926757) },
406 { FRAC_CONST(0.432748124060744), FRAC_CONST(0.901514870161279) },
407 { FRAC_CONST(0.429980278822841), FRAC_CONST(0.902838279994503) },
408 { FRAC_CONST(0.427208386446796), FRAC_CONST(0.904153191969992) },
409 { FRAC_CONST(0.424432473022717), FRAC_CONST(0.905459593711293) },
410 { FRAC_CONST(0.421652564678558), FRAC_CONST(0.906757472922057) },
411 { FRAC_CONST(0.418868687579875), FRAC_CONST(0.908046817386148) },
412 { FRAC_CONST(0.416080867929579), FRAC_CONST(0.909327614967767) },
413 { FRAC_CONST(0.413289131967691), FRAC_CONST(0.910599853611559) },
414 { FRAC_CONST(0.410493505971093), FRAC_CONST(0.911863521342729) },
415 { FRAC_CONST(0.407694016253280), FRAC_CONST(0.913118606267154) },
416 { FRAC_CONST(0.404890689164118), FRAC_CONST(0.914365096571498) },
417 { FRAC_CONST(0.402083551089587), FRAC_CONST(0.915602980523320) },
418 { FRAC_CONST(0.399272628451541), FRAC_CONST(0.916832246471184) },
419 { FRAC_CONST(0.396457947707454), FRAC_CONST(0.918052882844770) },
420 { FRAC_CONST(0.393639535350173), FRAC_CONST(0.919264878154985) },
421 { FRAC_CONST(0.390817417907669), FRAC_CONST(0.920468220994067) },
422 { FRAC_CONST(0.387991621942785), FRAC_CONST(0.921662900035695) },
423 { FRAC_CONST(0.385162174052990), FRAC_CONST(0.922848904035094) },
424 { FRAC_CONST(0.382329100870125), FRAC_CONST(0.924026221829144) },
425 { FRAC_CONST(0.379492429060153), FRAC_CONST(0.925194842336480) },
426 { FRAC_CONST(0.376652185322910), FRAC_CONST(0.926354754557603) },
427 { FRAC_CONST(0.373808396391851), FRAC_CONST(0.927505947574975) },
428 { FRAC_CONST(0.370961089033802), FRAC_CONST(0.928648410553131) },
429 { FRAC_CONST(0.368110290048703), FRAC_CONST(0.929782132738772) },
430 { FRAC_CONST(0.365256026269360), FRAC_CONST(0.930907103460875) },
431 { FRAC_CONST(0.362398324561191), FRAC_CONST(0.932023312130786) },
432 { FRAC_CONST(0.359537211821973), FRAC_CONST(0.933130748242325) },
433 { FRAC_CONST(0.356672714981588), FRAC_CONST(0.934229401371881) },
434 { FRAC_CONST(0.353804861001772), FRAC_CONST(0.935319261178512) },
435 { FRAC_CONST(0.350933676875858), FRAC_CONST(0.936400317404042) },
436 { FRAC_CONST(0.348059189628526), FRAC_CONST(0.937472559873159) },
437 { FRAC_CONST(0.345181426315543), FRAC_CONST(0.938535978493509) },
438 { FRAC_CONST(0.342300414023514), FRAC_CONST(0.939590563255789) },
439 { FRAC_CONST(0.339416179869623), FRAC_CONST(0.940636304233848) },
440 { FRAC_CONST(0.336528751001382), FRAC_CONST(0.941673191584771) },
441 { FRAC_CONST(0.333638154596371), FRAC_CONST(0.942701215548982) },
442 { FRAC_CONST(0.330744417861983), FRAC_CONST(0.943720366450326) },
443 { FRAC_CONST(0.327847568035171), FRAC_CONST(0.944730634696168) },
444 { FRAC_CONST(0.324947632382188), FRAC_CONST(0.945732010777477) },
445 { FRAC_CONST(0.322044638198335), FRAC_CONST(0.946724485268921) },
446 { FRAC_CONST(0.319138612807696), FRAC_CONST(0.947708048828952) },
447 { FRAC_CONST(0.316229583562890), FRAC_CONST(0.948682692199895) },
448 { FRAC_CONST(0.313317577844809), FRAC_CONST(0.949648406208035) },
449 { FRAC_CONST(0.310402623062359), FRAC_CONST(0.950605181763705) },
450 { FRAC_CONST(0.307484746652204), FRAC_CONST(0.951553009861369) },
451 { FRAC_CONST(0.304563976078509), FRAC_CONST(0.952491881579706) },
452 { FRAC_CONST(0.301640338832679), FRAC_CONST(0.953421788081700) },
453 { FRAC_CONST(0.298713862433100), FRAC_CONST(0.954342720614716) },
454 { FRAC_CONST(0.295784574424884), FRAC_CONST(0.955254670510587) },
455 { FRAC_CONST(0.292852502379605), FRAC_CONST(0.956157629185692) },
456 { FRAC_CONST(0.289917673895041), FRAC_CONST(0.957051588141041) },
457 { FRAC_CONST(0.286980116594916), FRAC_CONST(0.957936538962351) },
458 { FRAC_CONST(0.284039858128637), FRAC_CONST(0.958812473320129) },
459 { FRAC_CONST(0.281096926171038), FRAC_CONST(0.959679382969747) },
460 { FRAC_CONST(0.278151348422115), FRAC_CONST(0.960537259751520) },
461 { FRAC_CONST(0.275203152606767), FRAC_CONST(0.961386095590786) },
462 { FRAC_CONST(0.272252366474537), FRAC_CONST(0.962225882497979) },
463 { FRAC_CONST(0.269299017799346), FRAC_CONST(0.963056612568704) },
464 { FRAC_CONST(0.266343134379238), FRAC_CONST(0.963878277983814) },
465 { FRAC_CONST(0.263384744036113), FRAC_CONST(0.964690871009481) },
466 { FRAC_CONST(0.260423874615468), FRAC_CONST(0.965494383997270) },
467 { FRAC_CONST(0.257460553986133), FRAC_CONST(0.966288809384210) },
468 { FRAC_CONST(0.254494810040011), FRAC_CONST(0.967074139692867) },
469 { FRAC_CONST(0.251526670691813), FRAC_CONST(0.967850367531414) },
470 { FRAC_CONST(0.248556163878797), FRAC_CONST(0.968617485593698) },
471 { FRAC_CONST(0.245583317560504), FRAC_CONST(0.969375486659311) },
472 { FRAC_CONST(0.242608159718497), FRAC_CONST(0.970124363593660) },
473 { FRAC_CONST(0.239630718356094), FRAC_CONST(0.970864109348029) },
474 { FRAC_CONST(0.236651021498106), FRAC_CONST(0.971594716959650) },
475 { FRAC_CONST(0.233669097190577), FRAC_CONST(0.972316179551765) },
476 { FRAC_CONST(0.230684973500512), FRAC_CONST(0.973028490333694) },
477 { FRAC_CONST(0.227698678515621), FRAC_CONST(0.973731642600896) },
478 { FRAC_CONST(0.224710240344050), FRAC_CONST(0.974425629735035) },
479 { FRAC_CONST(0.221719687114115), FRAC_CONST(0.975110445204039) },
480 { FRAC_CONST(0.218727046974045), FRAC_CONST(0.975786082562164) },
481 { FRAC_CONST(0.215732348091706), FRAC_CONST(0.976452535450054) },
482 { FRAC_CONST(0.212735618654346), FRAC_CONST(0.977109797594801) },
483 { FRAC_CONST(0.209736886868323), FRAC_CONST(0.977757862810003) },
484 { FRAC_CONST(0.206736180958844), FRAC_CONST(0.978396724995823) },
485 { FRAC_CONST(0.203733529169694), FRAC_CONST(0.979026378139048) },
486 { FRAC_CONST(0.200728959762976), FRAC_CONST(0.979646816313141) },
487 { FRAC_CONST(0.197722501018842), FRAC_CONST(0.980258033678304) },
488 { FRAC_CONST(0.194714181235226), FRAC_CONST(0.980860024481524) },
489 { FRAC_CONST(0.191704028727580), FRAC_CONST(0.981452783056636) },
490 { FRAC_CONST(0.188692071828605), FRAC_CONST(0.982036303824369) },
491 { FRAC_CONST(0.185678338887988), FRAC_CONST(0.982610581292405) },
492 { FRAC_CONST(0.182662858272129), FRAC_CONST(0.983175610055424) },
493 { FRAC_CONST(0.179645658363882), FRAC_CONST(0.983731384795162) },
494 { FRAC_CONST(0.176626767562281), FRAC_CONST(0.984277900280454) },
495 { FRAC_CONST(0.173606214282275), FRAC_CONST(0.984815151367289) },
496 { FRAC_CONST(0.170584026954464), FRAC_CONST(0.985343132998855) },
497 { FRAC_CONST(0.167560234024824), FRAC_CONST(0.985861840205587) },
498 { FRAC_CONST(0.164534863954446), FRAC_CONST(0.986371268105216) },
499 { FRAC_CONST(0.161507945219266), FRAC_CONST(0.986871411902812) },
500 { FRAC_CONST(0.158479506309796), FRAC_CONST(0.987362266890832) },
501 { FRAC_CONST(0.155449575730856), FRAC_CONST(0.987843828449162) },
502 { FRAC_CONST(0.152418182001307), FRAC_CONST(0.988316092045160) },
503 { FRAC_CONST(0.149385353653780), FRAC_CONST(0.988779053233702) },
504 { FRAC_CONST(0.146351119234411), FRAC_CONST(0.989232707657220) },
505 { FRAC_CONST(0.143315507302572), FRAC_CONST(0.989677051045747) },
506 { FRAC_CONST(0.140278546430595), FRAC_CONST(0.990112079216954) },
507 { FRAC_CONST(0.137240265203516), FRAC_CONST(0.990537788076189) },
508 { FRAC_CONST(0.134200692218792), FRAC_CONST(0.990954173616519) },
509 { FRAC_CONST(0.131159856086043), FRAC_CONST(0.991361231918763) },
510 { FRAC_CONST(0.128117785426777), FRAC_CONST(0.991758959151536) },
511 { FRAC_CONST(0.125074508874121), FRAC_CONST(0.992147351571276) },
512 { FRAC_CONST(0.122030055072553), FRAC_CONST(0.992526405522286) },
513 { FRAC_CONST(0.118984452677633), FRAC_CONST(0.992896117436766) },
514 { FRAC_CONST(0.115937730355728), FRAC_CONST(0.993256483834846) },
515 { FRAC_CONST(0.112889916783750), FRAC_CONST(0.993607501324622) },
516 { FRAC_CONST(0.109841040648883), FRAC_CONST(0.993949166602181) },
517 { FRAC_CONST(0.106791130648307), FRAC_CONST(0.994281476451642) },
518 { FRAC_CONST(0.103740215488939), FRAC_CONST(0.994604427745176) },
519 { FRAC_CONST(0.100688323887154), FRAC_CONST(0.994918017443043) },
520 { FRAC_CONST(0.097635484568517), FRAC_CONST(0.995222242593618) },
521 { FRAC_CONST(0.094581726267515), FRAC_CONST(0.995517100333418) },
522 { FRAC_CONST(0.091527077727285), FRAC_CONST(0.995802587887129) },
523 { FRAC_CONST(0.088471567699341), FRAC_CONST(0.996078702567634) },
524 { FRAC_CONST(0.085415224943307), FRAC_CONST(0.996345441776036) },
525 { FRAC_CONST(0.082358078226647), FRAC_CONST(0.996602803001684) },
526 { FRAC_CONST(0.079300156324388), FRAC_CONST(0.996850783822197) },
527 { FRAC_CONST(0.076241488018856), FRAC_CONST(0.997089381903483) },
528 { FRAC_CONST(0.073182102099403), FRAC_CONST(0.997318594999769) },
529 { FRAC_CONST(0.070122027362134), FRAC_CONST(0.997538420953611) },
530 { FRAC_CONST(0.067061292609637), FRAC_CONST(0.997748857695926) },
531 { FRAC_CONST(0.063999926650714), FRAC_CONST(0.997949903246001) },
532 { FRAC_CONST(0.060937958300107), FRAC_CONST(0.998141555711521) },
533 { FRAC_CONST(0.057875416378229), FRAC_CONST(0.998323813288578) },
534 { FRAC_CONST(0.054812329710890), FRAC_CONST(0.998496674261695) },
535 { FRAC_CONST(0.051748727129028), FRAC_CONST(0.998660137003838) },
536 { FRAC_CONST(0.048684637468439), FRAC_CONST(0.998814199976435) },
537 { FRAC_CONST(0.045620089569500), FRAC_CONST(0.998958861729386) },
538 { FRAC_CONST(0.042555112276904), FRAC_CONST(0.999094120901079) },
539 { FRAC_CONST(0.039489734439384), FRAC_CONST(0.999219976218404) },
540 { FRAC_CONST(0.036423984909444), FRAC_CONST(0.999336426496761) },
541 { FRAC_CONST(0.033357892543086), FRAC_CONST(0.999443470640078) },
542 { FRAC_CONST(0.030291486199539), FRAC_CONST(0.999541107640813) },
543 { FRAC_CONST(0.027224794740988), FRAC_CONST(0.999629336579970) },
544 { FRAC_CONST(0.024157847032300), FRAC_CONST(0.999708156627105) },
545 { FRAC_CONST(0.021090671940755), FRAC_CONST(0.999777567040333) },
546 { FRAC_CONST(0.018023298335774), FRAC_CONST(0.999837567166337) },
547 { FRAC_CONST(0.014955755088644), FRAC_CONST(0.999888156440373) },
548 { FRAC_CONST(0.011888071072252), FRAC_CONST(0.999929334386276) },
549 { FRAC_CONST(0.008820275160808), FRAC_CONST(0.999961100616463) },
550 { FRAC_CONST(0.005752396229574), FRAC_CONST(0.999983454831938) },
551 { FRAC_CONST(0.002684463154596), FRAC_CONST(0.999996396822294) }
552};
553
554/* 64 (N/4) complex twiddle factors */
555ALIGN static const complex_t mdct_tab_256[] ICONST_ATTR =
556{
557 { FRAC_CONST(0.999995293809576), FRAC_CONST(0.003067956762966) },
558 { FRAC_CONST(0.999618822495179), FRAC_CONST(0.027608145778966) },
559 { FRAC_CONST(0.998640218180265), FRAC_CONST(0.052131704680283) },
560 { FRAC_CONST(0.997060070339483), FRAC_CONST(0.076623861392031) },
561 { FRAC_CONST(0.994879330794806), FRAC_CONST(0.101069862754828) },
562 { FRAC_CONST(0.992099313142192), FRAC_CONST(0.125454983411546) },
563 { FRAC_CONST(0.988721691960324), FRAC_CONST(0.149764534677322) },
564 { FRAC_CONST(0.984748501801904), FRAC_CONST(0.173983873387464) },
565 { FRAC_CONST(0.980182135968117), FRAC_CONST(0.198098410717954) },
566 { FRAC_CONST(0.975025345066994), FRAC_CONST(0.222093620973204) },
567 { FRAC_CONST(0.969281235356549), FRAC_CONST(0.245955050335795) },
568 { FRAC_CONST(0.962953266873684), FRAC_CONST(0.269668325572915) },
569 { FRAC_CONST(0.956045251349996), FRAC_CONST(0.293219162694259) },
570 { FRAC_CONST(0.948561349915730), FRAC_CONST(0.316593375556166) },
571 { FRAC_CONST(0.940506070593268), FRAC_CONST(0.339776884406827) },
572 { FRAC_CONST(0.931884265581668), FRAC_CONST(0.362755724367397) },
573 { FRAC_CONST(0.922701128333879), FRAC_CONST(0.385516053843919) },
574 { FRAC_CONST(0.912962190428398), FRAC_CONST(0.408044162864979) },
575 { FRAC_CONST(0.902673318237259), FRAC_CONST(0.430326481340083) },
576 { FRAC_CONST(0.891840709392343), FRAC_CONST(0.452349587233771) },
577 { FRAC_CONST(0.880470889052161), FRAC_CONST(0.474100214650550) },
578 { FRAC_CONST(0.868570705971341), FRAC_CONST(0.495565261825773) },
579 { FRAC_CONST(0.856147328375194), FRAC_CONST(0.516731799017650) },
580 { FRAC_CONST(0.843208239641845), FRAC_CONST(0.537587076295645) },
581 { FRAC_CONST(0.829761233794523), FRAC_CONST(0.558118531220556) },
582 { FRAC_CONST(0.815814410806734), FRAC_CONST(0.578313796411656) },
583 { FRAC_CONST(0.801376171723140), FRAC_CONST(0.598160706996342) },
584 { FRAC_CONST(0.786455213599086), FRAC_CONST(0.617647307937804) },
585 { FRAC_CONST(0.771060524261814), FRAC_CONST(0.636761861236284) },
586 { FRAC_CONST(0.755201376896537), FRAC_CONST(0.655492852999615) },
587 { FRAC_CONST(0.738887324460615), FRAC_CONST(0.673829000378756) },
588 { FRAC_CONST(0.722128193929215), FRAC_CONST(0.691759258364158) },
589 { FRAC_CONST(0.704934080375905), FRAC_CONST(0.709272826438866) },
590 { FRAC_CONST(0.687315340891759), FRAC_CONST(0.726359155084346) },
591 { FRAC_CONST(0.669282588346636), FRAC_CONST(0.743007952135122) },
592 { FRAC_CONST(0.650846684996381), FRAC_CONST(0.759209188978388) },
593 { FRAC_CONST(0.632018735939809), FRAC_CONST(0.774953106594874) },
594 { FRAC_CONST(0.612810082429410), FRAC_CONST(0.790230221437310) },
595 { FRAC_CONST(0.593232295039800), FRAC_CONST(0.805031331142964) },
596 { FRAC_CONST(0.573297166698042), FRAC_CONST(0.819347520076797) },
597 { FRAC_CONST(0.553016705580028), FRAC_CONST(0.833170164701913) },
598 { FRAC_CONST(0.532403127877198), FRAC_CONST(0.846490938774052) },
599 { FRAC_CONST(0.511468850437971), FRAC_CONST(0.859301818357008) },
600 { FRAC_CONST(0.490226483288291), FRAC_CONST(0.871595086655951) },
601 { FRAC_CONST(0.468688822035828), FRAC_CONST(0.883363338665732) },
602 { FRAC_CONST(0.446868840162374), FRAC_CONST(0.894599485631383) },
603 { FRAC_CONST(0.424779681209109), FRAC_CONST(0.905296759318119) },
604 { FRAC_CONST(0.402434650859419), FRAC_CONST(0.915448716088268) },
605 { FRAC_CONST(0.379847208924051), FRAC_CONST(0.925049240782678) },
606 { FRAC_CONST(0.357030961233430), FRAC_CONST(0.934092550404259) },
607 { FRAC_CONST(0.333999651442009), FRAC_CONST(0.942573197601447) },
608 { FRAC_CONST(0.310767152749611), FRAC_CONST(0.950486073949482) },
609 { FRAC_CONST(0.287347459544730), FRAC_CONST(0.957826413027533) },
610 { FRAC_CONST(0.263754678974832), FRAC_CONST(0.964589793289813) },
611 { FRAC_CONST(0.240003022448742), FRAC_CONST(0.970772140728950) },
612 { FRAC_CONST(0.216106797076220), FRAC_CONST(0.976369731330021) },
613 { FRAC_CONST(0.192080397049892), FRAC_CONST(0.981379193313755) },
614 { FRAC_CONST(0.167938294974731), FRAC_CONST(0.985797509167567) },
615 { FRAC_CONST(0.143695033150295), FRAC_CONST(0.989622017463201) },
616 { FRAC_CONST(0.119365214810991), FRAC_CONST(0.992850414459865) },
617 { FRAC_CONST(0.094963495329639), FRAC_CONST(0.995480755491927) },
618 { FRAC_CONST(0.070504573389614), FRAC_CONST(0.997511456140303) },
619 { FRAC_CONST(0.046003182130915), FRAC_CONST(0.998941293186857) },
620 { FRAC_CONST(0.021474080275470), FRAC_CONST(0.999769405351215) }
621};
622
623#ifdef LD_DEC
624/* 256 (N/4) complex twiddle factors */
625ALIGN static const complex_t mdct_tab_1024[] =
626{
627 { FRAC_CONST(0.999999705862882), FRAC_CONST(0.000766990318743) },
628 { FRAC_CONST(0.999976174986898), FRAC_CONST(0.006902858724730) },
629 { FRAC_CONST(0.999914995573113), FRAC_CONST(0.013038467241987) },
630 { FRAC_CONST(0.999816169924900), FRAC_CONST(0.019173584868323) },
631 { FRAC_CONST(0.999679701762988), FRAC_CONST(0.025307980620025) },
632 { FRAC_CONST(0.999505596225325), FRAC_CONST(0.031441423540560) },
633 { FRAC_CONST(0.999293859866888), FRAC_CONST(0.037573682709270) },
634 { FRAC_CONST(0.999044500659429), FRAC_CONST(0.043704527250063) },
635 { FRAC_CONST(0.998757527991183), FRAC_CONST(0.049833726340107) },
636 { FRAC_CONST(0.998432952666508), FRAC_CONST(0.055961049218521) },
637 { FRAC_CONST(0.998070786905482), FRAC_CONST(0.062086265195060) },
638 { FRAC_CONST(0.997671044343441), FRAC_CONST(0.068209143658806) },
639 { FRAC_CONST(0.997233740030466), FRAC_CONST(0.074329454086846) },
640 { FRAC_CONST(0.996758890430818), FRAC_CONST(0.080446966052950) },
641 { FRAC_CONST(0.996246513422316), FRAC_CONST(0.086561449236251) },
642 { FRAC_CONST(0.995696628295664), FRAC_CONST(0.092672673429913) },
643 { FRAC_CONST(0.995109255753726), FRAC_CONST(0.098780408549800) },
644 { FRAC_CONST(0.994484417910748), FRAC_CONST(0.104884424643135) },
645 { FRAC_CONST(0.993822138291520), FRAC_CONST(0.110984491897163) },
646 { FRAC_CONST(0.993122441830496), FRAC_CONST(0.117080380647801) },
647 { FRAC_CONST(0.992385354870852), FRAC_CONST(0.123171861388280) },
648 { FRAC_CONST(0.991610905163495), FRAC_CONST(0.129258704777796) },
649 { FRAC_CONST(0.990799121866020), FRAC_CONST(0.135340681650134) },
650 { FRAC_CONST(0.989950035541609), FRAC_CONST(0.141417563022303) },
651 { FRAC_CONST(0.989063678157882), FRAC_CONST(0.147489120103154) },
652 { FRAC_CONST(0.988140083085693), FRAC_CONST(0.153555124301993) },
653 { FRAC_CONST(0.987179285097874), FRAC_CONST(0.159615347237193) },
654 { FRAC_CONST(0.986181320367928), FRAC_CONST(0.165669560744784) },
655 { FRAC_CONST(0.985146226468662), FRAC_CONST(0.171717536887050) },
656 { FRAC_CONST(0.984074042370776), FRAC_CONST(0.177759047961107) },
657 { FRAC_CONST(0.982964808441396), FRAC_CONST(0.183793866507478) },
658 { FRAC_CONST(0.981818566442553), FRAC_CONST(0.189821765318656) },
659 { FRAC_CONST(0.980635359529608), FRAC_CONST(0.195842517447658) },
660 { FRAC_CONST(0.979415232249635), FRAC_CONST(0.201855896216568) },
661 { FRAC_CONST(0.978158230539735), FRAC_CONST(0.207861675225075) },
662 { FRAC_CONST(0.976864401725313), FRAC_CONST(0.213859628358994) },
663 { FRAC_CONST(0.975533794518291), FRAC_CONST(0.219849529798779) },
664 { FRAC_CONST(0.974166459015280), FRAC_CONST(0.225831154028026) },
665 { FRAC_CONST(0.972762446695689), FRAC_CONST(0.231804275841965) },
666 { FRAC_CONST(0.971321810419786), FRAC_CONST(0.237768670355934) },
667 { FRAC_CONST(0.969844604426715), FRAC_CONST(0.243724113013852) },
668 { FRAC_CONST(0.968330884332445), FRAC_CONST(0.249670379596669) },
669 { FRAC_CONST(0.966780707127683), FRAC_CONST(0.255607246230807) },
670 { FRAC_CONST(0.965194131175725), FRAC_CONST(0.261534489396596) },
671 { FRAC_CONST(0.963571216210257), FRAC_CONST(0.267451885936678) },
672 { FRAC_CONST(0.961912023333112), FRAC_CONST(0.273359213064419) },
673 { FRAC_CONST(0.960216615011963), FRAC_CONST(0.279256248372291) },
674 { FRAC_CONST(0.958485055077976), FRAC_CONST(0.285142769840249) },
675 { FRAC_CONST(0.956717408723403), FRAC_CONST(0.291018555844085) },
676 { FRAC_CONST(0.954913742499131), FRAC_CONST(0.296883385163778) },
677 { FRAC_CONST(0.953074124312172), FRAC_CONST(0.302737036991819) },
678 { FRAC_CONST(0.951198623423113), FRAC_CONST(0.308579290941525) },
679 { FRAC_CONST(0.949287310443502), FRAC_CONST(0.314409927055337) },
680 { FRAC_CONST(0.947340257333192), FRAC_CONST(0.320228725813100) },
681 { FRAC_CONST(0.945357537397632), FRAC_CONST(0.326035468140330) },
682 { FRAC_CONST(0.943339225285108), FRAC_CONST(0.331829935416461) },
683 { FRAC_CONST(0.941285396983929), FRAC_CONST(0.337611909483075) },
684 { FRAC_CONST(0.939196129819570), FRAC_CONST(0.343381172652115) },
685 { FRAC_CONST(0.937071502451759), FRAC_CONST(0.349137507714085) },
686 { FRAC_CONST(0.934911594871516), FRAC_CONST(0.354880697946223) },
687 { FRAC_CONST(0.932716488398140), FRAC_CONST(0.360610527120662) },
688 { FRAC_CONST(0.930486265676150), FRAC_CONST(0.366326779512574) },
689 { FRAC_CONST(0.928221010672169), FRAC_CONST(0.372029239908285) },
690 { FRAC_CONST(0.925920808671770), FRAC_CONST(0.377717693613386) },
691 { FRAC_CONST(0.923585746276257), FRAC_CONST(0.383391926460809) },
692 { FRAC_CONST(0.921215911399409), FRAC_CONST(0.389051724818894) },
693 { FRAC_CONST(0.918811393264170), FRAC_CONST(0.394696875599434) },
694 { FRAC_CONST(0.916372282399289), FRAC_CONST(0.400327166265690) },
695 { FRAC_CONST(0.913898670635912), FRAC_CONST(0.405942384840403) },
696 { FRAC_CONST(0.911390651104122), FRAC_CONST(0.411542319913765) },
697 { FRAC_CONST(0.908848318229439), FRAC_CONST(0.417126760651388) },
698 { FRAC_CONST(0.906271767729258), FRAC_CONST(0.422695496802233) },
699 { FRAC_CONST(0.903661096609248), FRAC_CONST(0.428248318706532) },
700 { FRAC_CONST(0.901016403159702), FRAC_CONST(0.433785017303679) },
701 { FRAC_CONST(0.898337786951834), FRAC_CONST(0.439305384140100) },
702 { FRAC_CONST(0.895625348834030), FRAC_CONST(0.444809211377105) },
703 { FRAC_CONST(0.892879190928052), FRAC_CONST(0.450296291798709) },
704 { FRAC_CONST(0.890099416625192), FRAC_CONST(0.455766418819435) },
705 { FRAC_CONST(0.887286130582383), FRAC_CONST(0.461219386492092) },
706 { FRAC_CONST(0.884439438718254), FRAC_CONST(0.466654989515531) },
707 { FRAC_CONST(0.881559448209144), FRAC_CONST(0.472073023242369) },
708 { FRAC_CONST(0.878646267485068), FRAC_CONST(0.477473283686698) },
709 { FRAC_CONST(0.875700006225635), FRAC_CONST(0.482855567531766) },
710 { FRAC_CONST(0.872720775355914), FRAC_CONST(0.488219672137627) },
711 { FRAC_CONST(0.869708687042266), FRAC_CONST(0.493565395548775) },
712 { FRAC_CONST(0.866663854688111), FRAC_CONST(0.498892536501745) },
713 { FRAC_CONST(0.863586392929668), FRAC_CONST(0.504200894432690) },
714 { FRAC_CONST(0.860476417631632), FRAC_CONST(0.509490269484936) },
715 { FRAC_CONST(0.857334045882816), FRAC_CONST(0.514760462516501) },
716 { FRAC_CONST(0.854159395991739), FRAC_CONST(0.520011275107596) },
717 { FRAC_CONST(0.850952587482176), FRAC_CONST(0.525242509568095) },
718 { FRAC_CONST(0.847713741088654), FRAC_CONST(0.530453968944976) },
719 { FRAC_CONST(0.844442978751911), FRAC_CONST(0.535645457029741) },
720 { FRAC_CONST(0.841140423614298), FRAC_CONST(0.540816778365797) },
721 { FRAC_CONST(0.837806200015151), FRAC_CONST(0.545967738255818) },
722 { FRAC_CONST(0.834440433486103), FRAC_CONST(0.551098142769075) },
723 { FRAC_CONST(0.831043250746362), FRAC_CONST(0.556207798748740) },
724 { FRAC_CONST(0.827614779697938), FRAC_CONST(0.561296513819151) },
725 { FRAC_CONST(0.824155149420829), FRAC_CONST(0.566364096393064) },
726 { FRAC_CONST(0.820664490168157), FRAC_CONST(0.571410355678857) },
727 { FRAC_CONST(0.817142933361273), FRAC_CONST(0.576435101687722) },
728 { FRAC_CONST(0.813590611584799), FRAC_CONST(0.581438145240810) },
729 { FRAC_CONST(0.810007658581641), FRAC_CONST(0.586419297976361) },
730 { FRAC_CONST(0.806394209247956), FRAC_CONST(0.591378372356788) },
731 { FRAC_CONST(0.802750399628069), FRAC_CONST(0.596315181675744) },
732 { FRAC_CONST(0.799076366909352), FRAC_CONST(0.601229540065149) },
733 { FRAC_CONST(0.795372249417061), FRAC_CONST(0.606121262502186) },
734 { FRAC_CONST(0.791638186609126), FRAC_CONST(0.610990164816272) },
735 { FRAC_CONST(0.787874319070900), FRAC_CONST(0.615836063695985) },
736 { FRAC_CONST(0.784080788509870), FRAC_CONST(0.620658776695972) },
737 { FRAC_CONST(0.780257737750317), FRAC_CONST(0.625458122243814) },
738 { FRAC_CONST(0.776405310727940), FRAC_CONST(0.630233919646864) },
739 { FRAC_CONST(0.772523652484441), FRAC_CONST(0.634985989099049) },
740 { FRAC_CONST(0.768612909162058), FRAC_CONST(0.639714151687640) },
741 { FRAC_CONST(0.764673227998067), FRAC_CONST(0.644418229399988) },
742 { FRAC_CONST(0.760704757319237), FRAC_CONST(0.649098045130226) },
743 { FRAC_CONST(0.756707646536246), FRAC_CONST(0.653753422685936) },
744 { FRAC_CONST(0.752682046138055), FRAC_CONST(0.658384186794785) },
745 { FRAC_CONST(0.748628107686245), FRAC_CONST(0.662990163111121) },
746 { FRAC_CONST(0.744545983809307), FRAC_CONST(0.667571178222540) },
747 { FRAC_CONST(0.740435828196898), FRAC_CONST(0.672127059656412) },
748 { FRAC_CONST(0.736297795594053), FRAC_CONST(0.676657635886375) },
749 { FRAC_CONST(0.732132041795361), FRAC_CONST(0.681162736338795) },
750 { FRAC_CONST(0.727938723639099), FRAC_CONST(0.685642191399187) },
751 { FRAC_CONST(0.723717999001324), FRAC_CONST(0.690095832418600) },
752 { FRAC_CONST(0.719470026789933), FRAC_CONST(0.694523491719966) },
753 { FRAC_CONST(0.715194966938680), FRAC_CONST(0.698925002604414) },
754 { FRAC_CONST(0.710892980401152), FRAC_CONST(0.703300199357549) },
755 { FRAC_CONST(0.706564229144710), FRAC_CONST(0.707648917255684) },
756 { FRAC_CONST(0.702208876144392), FRAC_CONST(0.711970992572050) },
757 { FRAC_CONST(0.697827085376777), FRAC_CONST(0.716266262582953) },
758 { FRAC_CONST(0.693419021813812), FRAC_CONST(0.720534565573905) },
759 { FRAC_CONST(0.688984851416597), FRAC_CONST(0.724775740845711) },
760 { FRAC_CONST(0.684524741129142), FRAC_CONST(0.728989628720519) },
761 { FRAC_CONST(0.680038858872079), FRAC_CONST(0.733176070547833) },
762 { FRAC_CONST(0.675527373536339), FRAC_CONST(0.737334908710483) },
763 { FRAC_CONST(0.670990454976794), FRAC_CONST(0.741465986630563) },
764 { FRAC_CONST(0.666428274005865), FRAC_CONST(0.745569148775325) },
765 { FRAC_CONST(0.661841002387087), FRAC_CONST(0.749644240663033) },
766 { FRAC_CONST(0.657228812828643), FRAC_CONST(0.753691108868781) },
767 { FRAC_CONST(0.652591878976863), FRAC_CONST(0.757709601030268) },
768 { FRAC_CONST(0.647930375409685), FRAC_CONST(0.761699565853535) },
769 { FRAC_CONST(0.643244477630086), FRAC_CONST(0.765660853118662) },
770 { FRAC_CONST(0.638534362059467), FRAC_CONST(0.769593313685423) },
771 { FRAC_CONST(0.633800206031017), FRAC_CONST(0.773496799498899) },
772 { FRAC_CONST(0.629042187783036), FRAC_CONST(0.777371163595056) },
773 { FRAC_CONST(0.624260486452221), FRAC_CONST(0.781216260106276) },
774 { FRAC_CONST(0.619455282066924), FRAC_CONST(0.785031944266848) },
775 { FRAC_CONST(0.614626755540375), FRAC_CONST(0.788818072418420) },
776 { FRAC_CONST(0.609775088663868), FRAC_CONST(0.792574502015408) },
777 { FRAC_CONST(0.604900464099920), FRAC_CONST(0.796301091630359) },
778 { FRAC_CONST(0.600003065375389), FRAC_CONST(0.799997700959282) },
779 { FRAC_CONST(0.595083076874570), FRAC_CONST(0.803664190826924) },
780 { FRAC_CONST(0.590140683832249), FRAC_CONST(0.807300423192014) },
781 { FRAC_CONST(0.585176072326730), FRAC_CONST(0.810906261152460) },
782 { FRAC_CONST(0.580189429272832), FRAC_CONST(0.814481568950499) },
783 { FRAC_CONST(0.575180942414845), FRAC_CONST(0.818026211977813) },
784 { FRAC_CONST(0.570150800319470), FRAC_CONST(0.821540056780598) },
785 { FRAC_CONST(0.565099192368714), FRAC_CONST(0.825022971064580) },
786 { FRAC_CONST(0.560026308752760), FRAC_CONST(0.828474823700007) },
787 { FRAC_CONST(0.554932340462810), FRAC_CONST(0.831895484726578) },
788 { FRAC_CONST(0.549817479283891), FRAC_CONST(0.835284825358337) },
789 { FRAC_CONST(0.544681917787635), FRAC_CONST(0.838642717988527) },
790 { FRAC_CONST(0.539525849325029), FRAC_CONST(0.841969036194388) },
791 { FRAC_CONST(0.534349468019138), FRAC_CONST(0.845263654741918) },
792 { FRAC_CONST(0.529152968757791), FRAC_CONST(0.848526449590593) },
793 { FRAC_CONST(0.523936547186249), FRAC_CONST(0.851757297898029) },
794 { FRAC_CONST(0.518700399699835), FRAC_CONST(0.854956078024615) },
795 { FRAC_CONST(0.513444723436544), FRAC_CONST(0.858122669538086) },
796 { FRAC_CONST(0.508169716269615), FRAC_CONST(0.861256953218062) },
797 { FRAC_CONST(0.502875576800087), FRAC_CONST(0.864358811060534) },
798 { FRAC_CONST(0.497562504349319), FRAC_CONST(0.867428126282307) },
799 { FRAC_CONST(0.492230698951486), FRAC_CONST(0.870464783325398) },
800 { FRAC_CONST(0.486880361346047), FRAC_CONST(0.873468667861385) },
801 { FRAC_CONST(0.481511692970190), FRAC_CONST(0.876439666795714) },
802 { FRAC_CONST(0.476124895951244), FRAC_CONST(0.879377668271953) },
803 { FRAC_CONST(0.470720173099072), FRAC_CONST(0.882282561676009) },
804 { FRAC_CONST(0.465297727898435), FRAC_CONST(0.885154237640285) },
805 { FRAC_CONST(0.459857764501330), FRAC_CONST(0.887992588047806) },
806 { FRAC_CONST(0.454400487719304), FRAC_CONST(0.890797506036281) },
807 { FRAC_CONST(0.448926103015743), FRAC_CONST(0.893568886002136) },
808 { FRAC_CONST(0.443434816498138), FRAC_CONST(0.896306623604480) },
809 { FRAC_CONST(0.437926834910323), FRAC_CONST(0.899010615769039) },
810 { FRAC_CONST(0.432402365624690), FRAC_CONST(0.901680760692038) },
811 { FRAC_CONST(0.426861616634386), FRAC_CONST(0.904316957844028) },
812 { FRAC_CONST(0.421304796545480), FRAC_CONST(0.906919107973678) },
813 { FRAC_CONST(0.415732114569105), FRAC_CONST(0.909487113111505) },
814 { FRAC_CONST(0.410143780513590), FRAC_CONST(0.912020876573568) },
815 { FRAC_CONST(0.404540004776553), FRAC_CONST(0.914520302965104) },
816 { FRAC_CONST(0.398920998336983), FRAC_CONST(0.916985298184123) },
817 { FRAC_CONST(0.393286972747297), FRAC_CONST(0.919415769424947) },
818 { FRAC_CONST(0.387638140125373), FRAC_CONST(0.921811625181708) },
819 { FRAC_CONST(0.381974713146567), FRAC_CONST(0.924172775251791) },
820 { FRAC_CONST(0.376296905035705), FRAC_CONST(0.926499130739231) },
821 { FRAC_CONST(0.370604929559052), FRAC_CONST(0.928790604058057) },
822 { FRAC_CONST(0.364899001016267), FRAC_CONST(0.931047108935595) },
823 { FRAC_CONST(0.359179334232337), FRAC_CONST(0.933268560415712) },
824 { FRAC_CONST(0.353446144549481), FRAC_CONST(0.935454874862015) },
825 { FRAC_CONST(0.347699647819051), FRAC_CONST(0.937605969961000) },
826 { FRAC_CONST(0.341940060393402), FRAC_CONST(0.939721764725153) },
827 { FRAC_CONST(0.336167599117745), FRAC_CONST(0.941802179495998) },
828 { FRAC_CONST(0.330382481321983), FRAC_CONST(0.943847135947093) },
829 { FRAC_CONST(0.324584924812532), FRAC_CONST(0.945856557086984) },
830 { FRAC_CONST(0.318775147864118), FRAC_CONST(0.947830367262101) },
831 { FRAC_CONST(0.312953369211560), FRAC_CONST(0.949768492159607) },
832 { FRAC_CONST(0.307119808041533), FRAC_CONST(0.951670858810194) },
833 { FRAC_CONST(0.301274683984318), FRAC_CONST(0.953537395590833) },
834 { FRAC_CONST(0.295418217105532), FRAC_CONST(0.955368032227470) },
835 { FRAC_CONST(0.289550627897843), FRAC_CONST(0.957162699797670) },
836 { FRAC_CONST(0.283672137272669), FRAC_CONST(0.958921330733213) },
837 { FRAC_CONST(0.277782966551858), FRAC_CONST(0.960643858822638) },
838 { FRAC_CONST(0.271883337459360), FRAC_CONST(0.962330219213737) },
839 { FRAC_CONST(0.265973472112876), FRAC_CONST(0.963980348415994) },
840 { FRAC_CONST(0.260053593015495), FRAC_CONST(0.965594184302977) },
841 { FRAC_CONST(0.254123923047321), FRAC_CONST(0.967171666114677) },
842 { FRAC_CONST(0.248184685457075), FRAC_CONST(0.968712734459795) },
843 { FRAC_CONST(0.242236103853696), FRAC_CONST(0.970217331317979) },
844 { FRAC_CONST(0.236278402197920), FRAC_CONST(0.971685400042009) },
845 { FRAC_CONST(0.230311804793846), FRAC_CONST(0.973116885359925) },
846 { FRAC_CONST(0.224336536280494), FRAC_CONST(0.974511733377116) },
847 { FRAC_CONST(0.218352821623346), FRAC_CONST(0.975869891578341) },
848 { FRAC_CONST(0.212360886105879), FRAC_CONST(0.977191308829712) },
849 { FRAC_CONST(0.206360955321076), FRAC_CONST(0.978475935380617) },
850 { FRAC_CONST(0.200353255162940), FRAC_CONST(0.979723722865591) },
851 { FRAC_CONST(0.194338011817989), FRAC_CONST(0.980934624306142) },
852 { FRAC_CONST(0.188315451756732), FRAC_CONST(0.982108594112514) },
853 { FRAC_CONST(0.182285801725153), FRAC_CONST(0.983245588085407) },
854 { FRAC_CONST(0.176249288736168), FRAC_CONST(0.984345563417642) },
855 { FRAC_CONST(0.170206140061078), FRAC_CONST(0.985408478695768) },
856 { FRAC_CONST(0.164156583221016), FRAC_CONST(0.986434293901627) },
857 { FRAC_CONST(0.158100845978377), FRAC_CONST(0.987422970413855) },
858 { FRAC_CONST(0.152039156328246), FRAC_CONST(0.988374471009341) },
859 { FRAC_CONST(0.145971742489812), FRAC_CONST(0.989288759864625) },
860 { FRAC_CONST(0.139898832897777), FRAC_CONST(0.990165802557248) },
861 { FRAC_CONST(0.133820656193755), FRAC_CONST(0.991005566067049) },
862 { FRAC_CONST(0.127737441217662), FRAC_CONST(0.991808018777406) },
863 { FRAC_CONST(0.121649416999106), FRAC_CONST(0.992573130476429) },
864 { FRAC_CONST(0.115556812748755), FRAC_CONST(0.993300872358093) },
865 { FRAC_CONST(0.109459857849718), FRAC_CONST(0.993991217023329) },
866 { FRAC_CONST(0.103358781848900), FRAC_CONST(0.994644138481051) },
867 { FRAC_CONST(0.097253814448363), FRAC_CONST(0.995259612149133) },
868 { FRAC_CONST(0.091145185496681), FRAC_CONST(0.995837614855342) },
869 { FRAC_CONST(0.085033124980280), FRAC_CONST(0.996378124838200) },
870 { FRAC_CONST(0.078917863014785), FRAC_CONST(0.996881121747814) },
871 { FRAC_CONST(0.072799629836352), FRAC_CONST(0.997346586646633) },
872 { FRAC_CONST(0.066678655793002), FRAC_CONST(0.997774502010168) },
873 { FRAC_CONST(0.060555171335948), FRAC_CONST(0.998164851727646) },
874 { FRAC_CONST(0.054429407010919), FRAC_CONST(0.998517621102622) },
875 { FRAC_CONST(0.048301593449480), FRAC_CONST(0.998832796853528) },
876 { FRAC_CONST(0.042171961360348), FRAC_CONST(0.999110367114175) },
877 { FRAC_CONST(0.036040741520706), FRAC_CONST(0.999350321434199) },
878 { FRAC_CONST(0.029908164767517), FRAC_CONST(0.999552650779457) },
879 { FRAC_CONST(0.023774461988828), FRAC_CONST(0.999717347532362) },
880 { FRAC_CONST(0.017639864115082), FRAC_CONST(0.999844405492175) },
881 { FRAC_CONST(0.011504602110423), FRAC_CONST(0.999933819875236) },
882 { FRAC_CONST(0.005368906963996), FRAC_CONST(0.999985587315143) }
883};
884#endif // LD_DEC
885
886#ifdef ALLOW_SMALL_FRAMELENGTH
887/* 480 (N/4) complex twiddle factors */
888ALIGN static const complex_t mdct_tab_1920[] =
889{
890 { FRAC_CONST(0.999999916334328), FRAC_CONST(0.000409061532028) },
891 { FRAC_CONST(0.999993223088129), FRAC_CONST(0.003681545574400) },
892 { FRAC_CONST(0.999975820717897), FRAC_CONST(0.006953990190376) },
893 { FRAC_CONST(0.999947709409999), FRAC_CONST(0.010226360334704) },
894 { FRAC_CONST(0.999908889465485), FRAC_CONST(0.013498620962929) },
895 { FRAC_CONST(0.999859361300084), FRAC_CONST(0.016770737031768) },
896 { FRAC_CONST(0.999799125444203), FRAC_CONST(0.020042673499487) },
897 { FRAC_CONST(0.999728182542920), FRAC_CONST(0.023314395326274) },
898 { FRAC_CONST(0.999646533355977), FRAC_CONST(0.026585867474619) },
899 { FRAC_CONST(0.999554178757770), FRAC_CONST(0.029857054909681) },
900 { FRAC_CONST(0.999451119737344), FRAC_CONST(0.033127922599673) },
901 { FRAC_CONST(0.999337357398377), FRAC_CONST(0.036398435516228) },
902 { FRAC_CONST(0.999212892959173), FRAC_CONST(0.039668558634781) },
903 { FRAC_CONST(0.999077727752645), FRAC_CONST(0.042938256934941) },
904 { FRAC_CONST(0.998931863226306), FRAC_CONST(0.046207495400865) },
905 { FRAC_CONST(0.998775300942246), FRAC_CONST(0.049476239021636) },
906 { FRAC_CONST(0.998608042577122), FRAC_CONST(0.052744452791636) },
907 { FRAC_CONST(0.998430089922136), FRAC_CONST(0.056012101710921) },
908 { FRAC_CONST(0.998241444883019), FRAC_CONST(0.059279150785597) },
909 { FRAC_CONST(0.998042109480008), FRAC_CONST(0.062545565028192) },
910 { FRAC_CONST(0.997832085847824), FRAC_CONST(0.065811309458034) },
911 { FRAC_CONST(0.997611376235651), FRAC_CONST(0.069076349101624) },
912 { FRAC_CONST(0.997379983007114), FRAC_CONST(0.072340648993011) },
913 { FRAC_CONST(0.997137908640245), FRAC_CONST(0.075604174174166) },
914 { FRAC_CONST(0.996885155727469), FRAC_CONST(0.078866889695354) },
915 { FRAC_CONST(0.996621726975566), FRAC_CONST(0.082128760615515) },
916 { FRAC_CONST(0.996347625205645), FRAC_CONST(0.085389752002632) },
917 { FRAC_CONST(0.996062853353117), FRAC_CONST(0.088649828934106) },
918 { FRAC_CONST(0.995767414467660), FRAC_CONST(0.091908956497133) },
919 { FRAC_CONST(0.995461311713186), FRAC_CONST(0.095167099789075) },
920 { FRAC_CONST(0.995144548367810), FRAC_CONST(0.098424223917834) },
921 { FRAC_CONST(0.994817127823813), FRAC_CONST(0.101680294002229) },
922 { FRAC_CONST(0.994479053587606), FRAC_CONST(0.104935275172364) },
923 { FRAC_CONST(0.994130329279692), FRAC_CONST(0.108189132570007) },
924 { FRAC_CONST(0.993770958634630), FRAC_CONST(0.111441831348957) },
925 { FRAC_CONST(0.993400945500988), FRAC_CONST(0.114693336675426) },
926 { FRAC_CONST(0.993020293841312), FRAC_CONST(0.117943613728403) },
927 { FRAC_CONST(0.992629007732074), FRAC_CONST(0.121192627700032) },
928 { FRAC_CONST(0.992227091363634), FRAC_CONST(0.124440343795983) },
929 { FRAC_CONST(0.991814549040194), FRAC_CONST(0.127686727235827) },
930 { FRAC_CONST(0.991391385179751), FRAC_CONST(0.130931743253405) },
931 { FRAC_CONST(0.990957604314048), FRAC_CONST(0.134175357097202) },
932 { FRAC_CONST(0.990513211088533), FRAC_CONST(0.137417534030720) },
933 { FRAC_CONST(0.990058210262297), FRAC_CONST(0.140658239332849) },
934 { FRAC_CONST(0.989592606708036), FRAC_CONST(0.143897438298239) },
935 { FRAC_CONST(0.989116405411988), FRAC_CONST(0.147135096237670) },
936 { FRAC_CONST(0.988629611473887), FRAC_CONST(0.150371178478428) },
937 { FRAC_CONST(0.988132230106905), FRAC_CONST(0.153605650364672) },
938 { FRAC_CONST(0.987624266637598), FRAC_CONST(0.156838477257806) },
939 { FRAC_CONST(0.987105726505845), FRAC_CONST(0.160069624536852) },
940 { FRAC_CONST(0.986576615264794), FRAC_CONST(0.163299057598817) },
941 { FRAC_CONST(0.986036938580803), FRAC_CONST(0.166526741859069) },
942 { FRAC_CONST(0.985486702233375), FRAC_CONST(0.169752642751702) },
943 { FRAC_CONST(0.984925912115099), FRAC_CONST(0.172976725729910) },
944 { FRAC_CONST(0.984354574231587), FRAC_CONST(0.176198956266353) },
945 { FRAC_CONST(0.983772694701407), FRAC_CONST(0.179419299853531) },
946 { FRAC_CONST(0.983180279756024), FRAC_CONST(0.182637722004152) },
947 { FRAC_CONST(0.982577335739725), FRAC_CONST(0.185854188251500) },
948 { FRAC_CONST(0.981963869109555), FRAC_CONST(0.189068664149806) },
949 { FRAC_CONST(0.981339886435250), FRAC_CONST(0.192281115274616) },
950 { FRAC_CONST(0.980705394399163), FRAC_CONST(0.195491507223158) },
951 { FRAC_CONST(0.980060399796194), FRAC_CONST(0.198699805614714) },
952 { FRAC_CONST(0.979404909533716), FRAC_CONST(0.201905976090986) },
953 { FRAC_CONST(0.978738930631504), FRAC_CONST(0.205109984316464) },
954 { FRAC_CONST(0.978062470221657), FRAC_CONST(0.208311795978794) },
955 { FRAC_CONST(0.977375535548522), FRAC_CONST(0.211511376789145) },
956 { FRAC_CONST(0.976678133968618), FRAC_CONST(0.214708692482577) },
957 { FRAC_CONST(0.975970272950556), FRAC_CONST(0.217903708818409) },
958 { FRAC_CONST(0.975251960074958), FRAC_CONST(0.221096391580581) },
959 { FRAC_CONST(0.974523203034377), FRAC_CONST(0.224286706578026) },
960 { FRAC_CONST(0.973784009633218), FRAC_CONST(0.227474619645035) },
961 { FRAC_CONST(0.973034387787646), FRAC_CONST(0.230660096641619) },
962 { FRAC_CONST(0.972274345525510), FRAC_CONST(0.233843103453878) },
963 { FRAC_CONST(0.971503890986252), FRAC_CONST(0.237023605994367) },
964 { FRAC_CONST(0.970723032420820), FRAC_CONST(0.240201570202459) },
965 { FRAC_CONST(0.969931778191584), FRAC_CONST(0.243376962044711) },
966 { FRAC_CONST(0.969130136772239), FRAC_CONST(0.246549747515226) },
967 { FRAC_CONST(0.968318116747721), FRAC_CONST(0.249719892636022) },
968 { FRAC_CONST(0.967495726814114), FRAC_CONST(0.252887363457390) },
969 { FRAC_CONST(0.966662975778551), FRAC_CONST(0.256052126058264) },
970 { FRAC_CONST(0.965819872559127), FRAC_CONST(0.259214146546579) },
971 { FRAC_CONST(0.964966426184802), FRAC_CONST(0.262373391059634) },
972 { FRAC_CONST(0.964102645795299), FRAC_CONST(0.265529825764461) },
973 { FRAC_CONST(0.963228540641012), FRAC_CONST(0.268683416858178) },
974 { FRAC_CONST(0.962344120082907), FRAC_CONST(0.271834130568359) },
975 { FRAC_CONST(0.961449393592416), FRAC_CONST(0.274981933153391) },
976 { FRAC_CONST(0.960544370751341), FRAC_CONST(0.278126790902837) },
977 { FRAC_CONST(0.959629061251750), FRAC_CONST(0.281268670137799) },
978 { FRAC_CONST(0.958703474895872), FRAC_CONST(0.284407537211272) },
979 { FRAC_CONST(0.957767621595993), FRAC_CONST(0.287543358508512) },
980 { FRAC_CONST(0.956821511374351), FRAC_CONST(0.290676100447394) },
981 { FRAC_CONST(0.955865154363025), FRAC_CONST(0.293805729478766) },
982 { FRAC_CONST(0.954898560803832), FRAC_CONST(0.296932212086818) },
983 { FRAC_CONST(0.953921741048211), FRAC_CONST(0.300055514789431) },
984 { FRAC_CONST(0.952934705557117), FRAC_CONST(0.303175604138543) },
985 { FRAC_CONST(0.951937464900908), FRAC_CONST(0.306292446720504) },
986 { FRAC_CONST(0.950930029759229), FRAC_CONST(0.309406009156434) },
987 { FRAC_CONST(0.949912410920903), FRAC_CONST(0.312516258102580) },
988 { FRAC_CONST(0.948884619283808), FRAC_CONST(0.315623160250676) },
989 { FRAC_CONST(0.947846665854767), FRAC_CONST(0.318726682328294) },
990 { FRAC_CONST(0.946798561749429), FRAC_CONST(0.321826791099207) },
991 { FRAC_CONST(0.945740318192145), FRAC_CONST(0.324923453363742) },
992 { FRAC_CONST(0.944671946515855), FRAC_CONST(0.328016635959131) },
993 { FRAC_CONST(0.943593458161960), FRAC_CONST(0.331106305759876) },
994 { FRAC_CONST(0.942504864680205), FRAC_CONST(0.334192429678095) },
995 { FRAC_CONST(0.941406177728551), FRAC_CONST(0.337274974663880) },
996 { FRAC_CONST(0.940297409073052), FRAC_CONST(0.340353907705650) },
997 { FRAC_CONST(0.939178570587730), FRAC_CONST(0.343429195830507) },
998 { FRAC_CONST(0.938049674254446), FRAC_CONST(0.346500806104585) },
999 { FRAC_CONST(0.936910732162774), FRAC_CONST(0.349568705633406) },
1000 { FRAC_CONST(0.935761756509868), FRAC_CONST(0.352632861562230) },
1001 { FRAC_CONST(0.934602759600334), FRAC_CONST(0.355693241076410) },
1002 { FRAC_CONST(0.933433753846097), FRAC_CONST(0.358749811401739) },
1003 { FRAC_CONST(0.932254751766271), FRAC_CONST(0.361802539804806) },
1004 { FRAC_CONST(0.931065765987021), FRAC_CONST(0.364851393593340) },
1005 { FRAC_CONST(0.929866809241428), FRAC_CONST(0.367896340116568) },
1006 { FRAC_CONST(0.928657894369357), FRAC_CONST(0.370937346765559) },
1007 { FRAC_CONST(0.927439034317314), FRAC_CONST(0.373974380973575) },
1008 { FRAC_CONST(0.926210242138311), FRAC_CONST(0.377007410216418) },
1009 { FRAC_CONST(0.924971530991726), FRAC_CONST(0.380036402012783) },
1010 { FRAC_CONST(0.923722914143160), FRAC_CONST(0.383061323924602) },
1011 { FRAC_CONST(0.922464404964295), FRAC_CONST(0.386082143557389) },
1012 { FRAC_CONST(0.921196016932755), FRAC_CONST(0.389098828560595) },
1013 { FRAC_CONST(0.919917763631956), FRAC_CONST(0.392111346627946) },
1014 { FRAC_CONST(0.918629658750963), FRAC_CONST(0.395119665497795) },
1015 { FRAC_CONST(0.917331716084346), FRAC_CONST(0.398123752953462) },
1016 { FRAC_CONST(0.916023949532027), FRAC_CONST(0.401123576823585) },
1017 { FRAC_CONST(0.914706373099136), FRAC_CONST(0.404119104982459) },
1018 { FRAC_CONST(0.913379000895858), FRAC_CONST(0.407110305350386) },
1019 { FRAC_CONST(0.912041847137282), FRAC_CONST(0.410097145894012) },
1020 { FRAC_CONST(0.910694926143251), FRAC_CONST(0.413079594626675) },
1021 { FRAC_CONST(0.909338252338207), FRAC_CONST(0.416057619608744) },
1022 { FRAC_CONST(0.907971840251037), FRAC_CONST(0.419031188947965) },
1023 { FRAC_CONST(0.906595704514915), FRAC_CONST(0.422000270799800) },
1024 { FRAC_CONST(0.905209859867151), FRAC_CONST(0.424964833367766) },
1025 { FRAC_CONST(0.903814321149027), FRAC_CONST(0.427924844903780) },
1026 { FRAC_CONST(0.902409103305641), FRAC_CONST(0.430880273708497) },
1027 { FRAC_CONST(0.900994221385748), FRAC_CONST(0.433831088131649) },
1028 { FRAC_CONST(0.899569690541596), FRAC_CONST(0.436777256572384) },
1029 { FRAC_CONST(0.898135526028766), FRAC_CONST(0.439718747479604) },
1030 { FRAC_CONST(0.896691743206008), FRAC_CONST(0.442655529352306) },
1031 { FRAC_CONST(0.895238357535076), FRAC_CONST(0.445587570739915) },
1032 { FRAC_CONST(0.893775384580563), FRAC_CONST(0.448514840242624) },
1033 { FRAC_CONST(0.892302840009734), FRAC_CONST(0.451437306511726) },
1034 { FRAC_CONST(0.890820739592359), FRAC_CONST(0.454354938249958) },
1035 { FRAC_CONST(0.889329099200541), FRAC_CONST(0.457267704211826) },
1036 { FRAC_CONST(0.887827934808551), FRAC_CONST(0.460175573203949) },
1037 { FRAC_CONST(0.886317262492655), FRAC_CONST(0.463078514085383) },
1038 { FRAC_CONST(0.884797098430938), FRAC_CONST(0.465976495767966) },
1039 { FRAC_CONST(0.883267458903136), FRAC_CONST(0.468869487216642) },
1040 { FRAC_CONST(0.881728360290461), FRAC_CONST(0.471757457449795) },
1041 { FRAC_CONST(0.880179819075421), FRAC_CONST(0.474640375539586) },
1042 { FRAC_CONST(0.878621851841649), FRAC_CONST(0.477518210612278) },
1043 { FRAC_CONST(0.877054475273722), FRAC_CONST(0.480390931848569) },
1044 { FRAC_CONST(0.875477706156984), FRAC_CONST(0.483258508483922) },
1045 { FRAC_CONST(0.873891561377366), FRAC_CONST(0.486120909808896) },
1046 { FRAC_CONST(0.872296057921204), FRAC_CONST(0.488978105169472) },
1047 { FRAC_CONST(0.870691212875058), FRAC_CONST(0.491830063967383) },
1048 { FRAC_CONST(0.869077043425529), FRAC_CONST(0.494676755660442) },
1049 { FRAC_CONST(0.867453566859076), FRAC_CONST(0.497518149762867) },
1050 { FRAC_CONST(0.865820800561827), FRAC_CONST(0.500354215845611) },
1051 { FRAC_CONST(0.864178762019399), FRAC_CONST(0.503184923536685) },
1052 { FRAC_CONST(0.862527468816704), FRAC_CONST(0.506010242521482) },
1053 { FRAC_CONST(0.860866938637767), FRAC_CONST(0.508830142543107) },
1054 { FRAC_CONST(0.859197189265532), FRAC_CONST(0.511644593402696) },
1055 { FRAC_CONST(0.857518238581672), FRAC_CONST(0.514453564959741) },
1056 { FRAC_CONST(0.855830104566401), FRAC_CONST(0.517257027132414) },
1057 { FRAC_CONST(0.854132805298278), FRAC_CONST(0.520054949897887) },
1058 { FRAC_CONST(0.852426358954015), FRAC_CONST(0.522847303292655) },
1059 { FRAC_CONST(0.850710783808280), FRAC_CONST(0.525634057412856) },
1060 { FRAC_CONST(0.848986098233506), FRAC_CONST(0.528415182414593) },
1061 { FRAC_CONST(0.847252320699689), FRAC_CONST(0.531190648514252) },
1062 { FRAC_CONST(0.845509469774194), FRAC_CONST(0.533960425988819) },
1063 { FRAC_CONST(0.843757564121554), FRAC_CONST(0.536724485176205) },
1064 { FRAC_CONST(0.841996622503271), FRAC_CONST(0.539482796475555) },
1065 { FRAC_CONST(0.840226663777615), FRAC_CONST(0.542235330347571) },
1066 { FRAC_CONST(0.838447706899422), FRAC_CONST(0.544982057314827) },
1067 { FRAC_CONST(0.836659770919891), FRAC_CONST(0.547722947962084) },
1068 { FRAC_CONST(0.834862874986380), FRAC_CONST(0.550457972936605) },
1069 { FRAC_CONST(0.833057038342201), FRAC_CONST(0.553187102948470) },
1070 { FRAC_CONST(0.831242280326413), FRAC_CONST(0.555910308770889) },
1071 { FRAC_CONST(0.829418620373617), FRAC_CONST(0.558627561240515) },
1072 { FRAC_CONST(0.827586078013746), FRAC_CONST(0.561338831257758) },
1073 { FRAC_CONST(0.825744672871856), FRAC_CONST(0.564044089787093) },
1074 { FRAC_CONST(0.823894424667918), FRAC_CONST(0.566743307857377) },
1075 { FRAC_CONST(0.822035353216601), FRAC_CONST(0.569436456562150) },
1076 { FRAC_CONST(0.820167478427070), FRAC_CONST(0.572123507059955) },
1077 { FRAC_CONST(0.818290820302761), FRAC_CONST(0.574804430574639) },
1078 { FRAC_CONST(0.816405398941175), FRAC_CONST(0.577479198395666) },
1079 { FRAC_CONST(0.814511234533661), FRAC_CONST(0.580147781878420) },
1080 { FRAC_CONST(0.812608347365198), FRAC_CONST(0.582810152444517) },
1081 { FRAC_CONST(0.810696757814178), FRAC_CONST(0.585466281582107) },
1082 { FRAC_CONST(0.808776486352191), FRAC_CONST(0.588116140846181) },
1083 { FRAC_CONST(0.806847553543799), FRAC_CONST(0.590759701858874) },
1084 { FRAC_CONST(0.804909980046325), FRAC_CONST(0.593396936309773) },
1085 { FRAC_CONST(0.802963786609623), FRAC_CONST(0.596027815956215) },
1086 { FRAC_CONST(0.801008994075862), FRAC_CONST(0.598652312623592) },
1087 { FRAC_CONST(0.799045623379300), FRAC_CONST(0.601270398205654) },
1088 { FRAC_CONST(0.797073695546059), FRAC_CONST(0.603882044664808) },
1089 { FRAC_CONST(0.795093231693901), FRAC_CONST(0.606487224032418) },
1090 { FRAC_CONST(0.793104253032005), FRAC_CONST(0.609085908409106) },
1091 { FRAC_CONST(0.791106780860733), FRAC_CONST(0.611678069965050) },
1092 { FRAC_CONST(0.789100836571407), FRAC_CONST(0.614263680940283) },
1093 { FRAC_CONST(0.787086441646080), FRAC_CONST(0.616842713644988) },
1094 { FRAC_CONST(0.785063617657302), FRAC_CONST(0.619415140459796) },
1095 { FRAC_CONST(0.783032386267894), FRAC_CONST(0.621980933836084) },
1096 { FRAC_CONST(0.780992769230711), FRAC_CONST(0.624540066296266) },
1097 { FRAC_CONST(0.778944788388414), FRAC_CONST(0.627092510434089) },
1098 { FRAC_CONST(0.776888465673232), FRAC_CONST(0.629638238914927) },
1099 { FRAC_CONST(0.774823823106730), FRAC_CONST(0.632177224476073) },
1100 { FRAC_CONST(0.772750882799570), FRAC_CONST(0.634709439927031) },
1101 { FRAC_CONST(0.770669666951277), FRAC_CONST(0.637234858149809) },
1102 { FRAC_CONST(0.768580197850002), FRAC_CONST(0.639753452099206) },
1103 { FRAC_CONST(0.766482497872280), FRAC_CONST(0.642265194803105) },
1104 { FRAC_CONST(0.764376589482793), FRAC_CONST(0.644770059362758) },
1105 { FRAC_CONST(0.762262495234126), FRAC_CONST(0.647268018953079) },
1106 { FRAC_CONST(0.760140237766532), FRAC_CONST(0.649759046822928) },
1107 { FRAC_CONST(0.758009839807683), FRAC_CONST(0.652243116295397) },
1108 { FRAC_CONST(0.755871324172429), FRAC_CONST(0.654720200768098) },
1109 { FRAC_CONST(0.753724713762555), FRAC_CONST(0.657190273713446) },
1110 { FRAC_CONST(0.751570031566534), FRAC_CONST(0.659653308678945) },
1111 { FRAC_CONST(0.749407300659280), FRAC_CONST(0.662109279287469) },
1112 { FRAC_CONST(0.747236544201905), FRAC_CONST(0.664558159237545) },
1113 { FRAC_CONST(0.745057785441466), FRAC_CONST(0.666999922303638) },
1114 { FRAC_CONST(0.742871047710719), FRAC_CONST(0.669434542336425) },
1115 { FRAC_CONST(0.740676354427868), FRAC_CONST(0.671861993263083) },
1116 { FRAC_CONST(0.738473729096316), FRAC_CONST(0.674282249087562) },
1117 { FRAC_CONST(0.736263195304409), FRAC_CONST(0.676695283890867) },
1118 { FRAC_CONST(0.734044776725190), FRAC_CONST(0.679101071831334) },
1119 { FRAC_CONST(0.731818497116138), FRAC_CONST(0.681499587144906) },
1120 { FRAC_CONST(0.729584380318920), FRAC_CONST(0.683890804145412) },
1121 { FRAC_CONST(0.727342450259131), FRAC_CONST(0.686274697224838) },
1122 { FRAC_CONST(0.725092730946042), FRAC_CONST(0.688651240853606) },
1123 { FRAC_CONST(0.722835246472338), FRAC_CONST(0.691020409580841) },
1124 { FRAC_CONST(0.720570021013866), FRAC_CONST(0.693382178034651) },
1125 { FRAC_CONST(0.718297078829369), FRAC_CONST(0.695736520922392) },
1126 { FRAC_CONST(0.716016444260233), FRAC_CONST(0.698083413030944) },
1127 { FRAC_CONST(0.713728141730222), FRAC_CONST(0.700422829226978) },
1128 { FRAC_CONST(0.711432195745216), FRAC_CONST(0.702754744457225) },
1129 { FRAC_CONST(0.709128630892954), FRAC_CONST(0.705079133748748) },
1130 { FRAC_CONST(0.706817471842764), FRAC_CONST(0.707395972209203) },
1131 { FRAC_CONST(0.704498743345302), FRAC_CONST(0.709705235027113) },
1132 { FRAC_CONST(0.702172470232289), FRAC_CONST(0.712006897472128) },
1133 { FRAC_CONST(0.699838677416240), FRAC_CONST(0.714300934895292) },
1134 { FRAC_CONST(0.697497389890200), FRAC_CONST(0.716587322729308) },
1135 { FRAC_CONST(0.695148632727480), FRAC_CONST(0.718866036488799) },
1136 { FRAC_CONST(0.692792431081381), FRAC_CONST(0.721137051770570) },
1137 { FRAC_CONST(0.690428810184929), FRAC_CONST(0.723400344253874) },
1138 { FRAC_CONST(0.688057795350606), FRAC_CONST(0.725655889700665) },
1139 { FRAC_CONST(0.685679411970075), FRAC_CONST(0.727903663955865) },
1140 { FRAC_CONST(0.683293685513912), FRAC_CONST(0.730143642947616) },
1141 { FRAC_CONST(0.680900641531330), FRAC_CONST(0.732375802687543) },
1142 { FRAC_CONST(0.678500305649909), FRAC_CONST(0.734600119271009) },
1143 { FRAC_CONST(0.676092703575316), FRAC_CONST(0.736816568877370) },
1144 { FRAC_CONST(0.673677861091036), FRAC_CONST(0.739025127770231) },
1145 { FRAC_CONST(0.671255804058092), FRAC_CONST(0.741225772297702) },
1146 { FRAC_CONST(0.668826558414768), FRAC_CONST(0.743418478892647) },
1147 { FRAC_CONST(0.666390150176334), FRAC_CONST(0.745603224072940) },
1148 { FRAC_CONST(0.663946605434765), FRAC_CONST(0.747779984441716) },
1149 { FRAC_CONST(0.661495950358462), FRAC_CONST(0.749948736687619) },
1150 { FRAC_CONST(0.659038211191971), FRAC_CONST(0.752109457585056) },
1151 { FRAC_CONST(0.656573414255705), FRAC_CONST(0.754262123994441) },
1152 { FRAC_CONST(0.654101585945659), FRAC_CONST(0.756406712862448) },
1153 { FRAC_CONST(0.651622752733128), FRAC_CONST(0.758543201222251) },
1154 { FRAC_CONST(0.649136941164425), FRAC_CONST(0.760671566193777) },
1155 { FRAC_CONST(0.646644177860593), FRAC_CONST(0.762791784983948) },
1156 { FRAC_CONST(0.644144489517126), FRAC_CONST(0.764903834886923) },
1157 { FRAC_CONST(0.641637902903677), FRAC_CONST(0.767007693284345) },
1158 { FRAC_CONST(0.639124444863776), FRAC_CONST(0.769103337645580) },
1159 { FRAC_CONST(0.636604142314538), FRAC_CONST(0.771190745527961) },
1160 { FRAC_CONST(0.634077022246379), FRAC_CONST(0.773269894577026) },
1161 { FRAC_CONST(0.631543111722725), FRAC_CONST(0.775340762526760) },
1162 { FRAC_CONST(0.629002437879721), FRAC_CONST(0.777403327199831) },
1163 { FRAC_CONST(0.626455027925944), FRAC_CONST(0.779457566507828) },
1164 { FRAC_CONST(0.623900909142107), FRAC_CONST(0.781503458451498) },
1165 { FRAC_CONST(0.621340108880771), FRAC_CONST(0.783540981120982) },
1166 { FRAC_CONST(0.618772654566049), FRAC_CONST(0.785570112696050) },
1167 { FRAC_CONST(0.616198573693314), FRAC_CONST(0.787590831446332) },
1168 { FRAC_CONST(0.613617893828905), FRAC_CONST(0.789603115731555) },
1169 { FRAC_CONST(0.611030642609828), FRAC_CONST(0.791606944001769) },
1170 { FRAC_CONST(0.608436847743468), FRAC_CONST(0.793602294797585) },
1171 { FRAC_CONST(0.605836537007281), FRAC_CONST(0.795589146750397) },
1172 { FRAC_CONST(0.603229738248508), FRAC_CONST(0.797567478582619) },
1173 { FRAC_CONST(0.600616479383869), FRAC_CONST(0.799537269107905) },
1174 { FRAC_CONST(0.597996788399267), FRAC_CONST(0.801498497231381) },
1175 { FRAC_CONST(0.595370693349487), FRAC_CONST(0.803451141949871) },
1176 { FRAC_CONST(0.592738222357898), FRAC_CONST(0.805395182352117) },
1177 { FRAC_CONST(0.590099403616149), FRAC_CONST(0.807330597619008) },
1178 { FRAC_CONST(0.587454265383869), FRAC_CONST(0.809257367023803) },
1179 { FRAC_CONST(0.584802835988364), FRAC_CONST(0.811175469932349) },
1180 { FRAC_CONST(0.582145143824311), FRAC_CONST(0.813084885803304) },
1181 { FRAC_CONST(0.579481217353460), FRAC_CONST(0.814985594188359) },
1182 { FRAC_CONST(0.576811085104321), FRAC_CONST(0.816877574732454) },
1183 { FRAC_CONST(0.574134775671867), FRAC_CONST(0.818760807173997) },
1184 { FRAC_CONST(0.571452317717222), FRAC_CONST(0.820635271345081) },
1185 { FRAC_CONST(0.568763739967354), FRAC_CONST(0.822500947171703) },
1186 { FRAC_CONST(0.566069071214772), FRAC_CONST(0.824357814673971) },
1187 { FRAC_CONST(0.563368340317214), FRAC_CONST(0.826205853966327) },
1188 { FRAC_CONST(0.560661576197336), FRAC_CONST(0.828045045257756) },
1189 { FRAC_CONST(0.557948807842409), FRAC_CONST(0.829875368851995) },
1190 { FRAC_CONST(0.555230064304002), FRAC_CONST(0.831696805147750) },
1191 { FRAC_CONST(0.552505374697674), FRAC_CONST(0.833509334638900) },
1192 { FRAC_CONST(0.549774768202663), FRAC_CONST(0.835312937914713) },
1193 { FRAC_CONST(0.547038274061568), FRAC_CONST(0.837107595660044) },
1194 { FRAC_CONST(0.544295921580046), FRAC_CONST(0.838893288655553) },
1195 { FRAC_CONST(0.541547740126486), FRAC_CONST(0.840669997777901) },
1196 { FRAC_CONST(0.538793759131706), FRAC_CONST(0.842437703999961) },
1197 { FRAC_CONST(0.536034008088628), FRAC_CONST(0.844196388391019) },
1198 { FRAC_CONST(0.533268516551970), FRAC_CONST(0.845946032116980) },
1199 { FRAC_CONST(0.530497314137923), FRAC_CONST(0.847686616440563) },
1200 { FRAC_CONST(0.527720430523840), FRAC_CONST(0.849418122721510) },
1201 { FRAC_CONST(0.524937895447912), FRAC_CONST(0.851140532416778) },
1202 { FRAC_CONST(0.522149738708856), FRAC_CONST(0.852853827080745) },
1203 { FRAC_CONST(0.519355990165590), FRAC_CONST(0.854557988365401) },
1204 { FRAC_CONST(0.516556679736915), FRAC_CONST(0.856252998020546) },
1205 { FRAC_CONST(0.513751837401199), FRAC_CONST(0.857938837893991) },
1206 { FRAC_CONST(0.510941493196049), FRAC_CONST(0.859615489931744) },
1207 { FRAC_CONST(0.508125677217994), FRAC_CONST(0.861282936178208) },
1208 { FRAC_CONST(0.505304419622159), FRAC_CONST(0.862941158776375) },
1209 { FRAC_CONST(0.502477750621949), FRAC_CONST(0.864590139968012) },
1210 { FRAC_CONST(0.499645700488717), FRAC_CONST(0.866229862093855) },
1211 { FRAC_CONST(0.496808299551444), FRAC_CONST(0.867860307593799) },
1212 { FRAC_CONST(0.493965578196415), FRAC_CONST(0.869481459007080) },
1213 { FRAC_CONST(0.491117566866892), FRAC_CONST(0.871093298972471) },
1214 { FRAC_CONST(0.488264296062789), FRAC_CONST(0.872695810228461) },
1215 { FRAC_CONST(0.485405796340343), FRAC_CONST(0.874288975613440) },
1216 { FRAC_CONST(0.482542098311789), FRAC_CONST(0.875872778065888) },
1217 { FRAC_CONST(0.479673232645033), FRAC_CONST(0.877447200624553) },
1218 { FRAC_CONST(0.476799230063322), FRAC_CONST(0.879012226428633) },
1219 { FRAC_CONST(0.473920121344914), FRAC_CONST(0.880567838717962) },
1220 { FRAC_CONST(0.471035937322751), FRAC_CONST(0.882114020833179) },
1221 { FRAC_CONST(0.468146708884125), FRAC_CONST(0.883650756215917) },
1222 { FRAC_CONST(0.465252466970353), FRAC_CONST(0.885178028408975) },
1223 { FRAC_CONST(0.462353242576441), FRAC_CONST(0.886695821056495) },
1224 { FRAC_CONST(0.459449066750752), FRAC_CONST(0.888204117904136) },
1225 { FRAC_CONST(0.456539970594675), FRAC_CONST(0.889702902799251) },
1226 { FRAC_CONST(0.453625985262295), FRAC_CONST(0.891192159691058) },
1227 { FRAC_CONST(0.450707141960053), FRAC_CONST(0.892671872630812) },
1228 { FRAC_CONST(0.447783471946415), FRAC_CONST(0.894142025771977) },
1229 { FRAC_CONST(0.444855006531538), FRAC_CONST(0.895602603370393) },
1230 { FRAC_CONST(0.441921777076935), FRAC_CONST(0.897053589784447) },
1231 { FRAC_CONST(0.438983814995137), FRAC_CONST(0.898494969475242) },
1232 { FRAC_CONST(0.436041151749356), FRAC_CONST(0.899926727006758) },
1233 { FRAC_CONST(0.433093818853152), FRAC_CONST(0.901348847046022) },
1234 { FRAC_CONST(0.430141847870093), FRAC_CONST(0.902761314363272) },
1235 { FRAC_CONST(0.427185270413416), FRAC_CONST(0.904164113832116) },
1236 { FRAC_CONST(0.424224118145690), FRAC_CONST(0.905557230429701) },
1237 { FRAC_CONST(0.421258422778478), FRAC_CONST(0.906940649236866) },
1238 { FRAC_CONST(0.418288216071994), FRAC_CONST(0.908314355438308) },
1239 { FRAC_CONST(0.415313529834766), FRAC_CONST(0.909678334322736) },
1240 { FRAC_CONST(0.412334395923293), FRAC_CONST(0.911032571283032) },
1241 { FRAC_CONST(0.409350846241706), FRAC_CONST(0.912377051816407) },
1242 { FRAC_CONST(0.406362912741425), FRAC_CONST(0.913711761524555) },
1243 { FRAC_CONST(0.403370627420818), FRAC_CONST(0.915036686113806) },
1244 { FRAC_CONST(0.400374022324857), FRAC_CONST(0.916351811395282) },
1245 { FRAC_CONST(0.397373129544774), FRAC_CONST(0.917657123285050) },
1246 { FRAC_CONST(0.394367981217720), FRAC_CONST(0.918952607804266) },
1247 { FRAC_CONST(0.391358609526420), FRAC_CONST(0.920238251079332) },
1248 { FRAC_CONST(0.388345046698826), FRAC_CONST(0.921514039342042) },
1249 { FRAC_CONST(0.385327325007776), FRAC_CONST(0.922779958929729) },
1250 { FRAC_CONST(0.382305476770645), FRAC_CONST(0.924035996285410) },
1251 { FRAC_CONST(0.379279534348999), FRAC_CONST(0.925282137957935) },
1252 { FRAC_CONST(0.376249530148250), FRAC_CONST(0.926518370602127) },
1253 { FRAC_CONST(0.373215496617310), FRAC_CONST(0.927744680978929) },
1254 { FRAC_CONST(0.370177466248239), FRAC_CONST(0.928961055955541) },
1255 { FRAC_CONST(0.367135471575903), FRAC_CONST(0.930167482505564) },
1256 { FRAC_CONST(0.364089545177621), FRAC_CONST(0.931363947709140) },
1257 { FRAC_CONST(0.361039719672816), FRAC_CONST(0.932550438753087) },
1258 { FRAC_CONST(0.357986027722671), FRAC_CONST(0.933726942931039) },
1259 { FRAC_CONST(0.354928502029772), FRAC_CONST(0.934893447643582) },
1260 { FRAC_CONST(0.351867175337763), FRAC_CONST(0.936049940398387) },
1261 { FRAC_CONST(0.348802080430994), FRAC_CONST(0.937196408810347) },
1262 { FRAC_CONST(0.345733250134169), FRAC_CONST(0.938332840601705) },
1263 { FRAC_CONST(0.342660717311994), FRAC_CONST(0.939459223602190) },
1264 { FRAC_CONST(0.339584514868829), FRAC_CONST(0.940575545749145) },
1265 { FRAC_CONST(0.336504675748328), FRAC_CONST(0.941681795087657) },
1266 { FRAC_CONST(0.333421232933097), FRAC_CONST(0.942777959770684) },
1267 { FRAC_CONST(0.330334219444328), FRAC_CONST(0.943864028059183) },
1268 { FRAC_CONST(0.327243668341457), FRAC_CONST(0.944939988322235) },
1269 { FRAC_CONST(0.324149612721804), FRAC_CONST(0.946005829037171) },
1270 { FRAC_CONST(0.321052085720218), FRAC_CONST(0.947061538789691) },
1271 { FRAC_CONST(0.317951120508725), FRAC_CONST(0.948107106273994) },
1272 { FRAC_CONST(0.314846750296171), FRAC_CONST(0.949142520292891) },
1273 { FRAC_CONST(0.311739008327867), FRAC_CONST(0.950167769757930) },
1274 { FRAC_CONST(0.308627927885232), FRAC_CONST(0.951182843689513) },
1275 { FRAC_CONST(0.305513542285440), FRAC_CONST(0.952187731217013) },
1276 { FRAC_CONST(0.302395884881056), FRAC_CONST(0.953182421578893) },
1277 { FRAC_CONST(0.299274989059689), FRAC_CONST(0.954166904122818) },
1278 { FRAC_CONST(0.296150888243624), FRAC_CONST(0.955141168305771) },
1279 { FRAC_CONST(0.293023615889471), FRAC_CONST(0.956105203694164) },
1280 { FRAC_CONST(0.289893205487806), FRAC_CONST(0.957058999963955) },
1281 { FRAC_CONST(0.286759690562807), FRAC_CONST(0.958002546900750) },
1282 { FRAC_CONST(0.283623104671904), FRAC_CONST(0.958935834399920) },
1283 { FRAC_CONST(0.280483481405410), FRAC_CONST(0.959858852466706) },
1284 { FRAC_CONST(0.277340854386169), FRAC_CONST(0.960771591216325) },
1285 { FRAC_CONST(0.274195257269191), FRAC_CONST(0.961674040874080) },
1286 { FRAC_CONST(0.271046723741295), FRAC_CONST(0.962566191775459) },
1287 { FRAC_CONST(0.267895287520743), FRAC_CONST(0.963448034366243) },
1288 { FRAC_CONST(0.264740982356888), FRAC_CONST(0.964319559202607) },
1289 { FRAC_CONST(0.261583842029803), FRAC_CONST(0.965180756951218) },
1290 { FRAC_CONST(0.258423900349924), FRAC_CONST(0.966031618389343) },
1291 { FRAC_CONST(0.255261191157689), FRAC_CONST(0.966872134404937) },
1292 { FRAC_CONST(0.252095748323171), FRAC_CONST(0.967702295996750) },
1293 { FRAC_CONST(0.248927605745720), FRAC_CONST(0.968522094274417) },
1294 { FRAC_CONST(0.245756797353599), FRAC_CONST(0.969331520458559) },
1295 { FRAC_CONST(0.242583357103617), FRAC_CONST(0.970130565880871) },
1296 { FRAC_CONST(0.239407318980770), FRAC_CONST(0.970919221984218) },
1297 { FRAC_CONST(0.236228716997876), FRAC_CONST(0.971697480322728) },
1298 { FRAC_CONST(0.233047585195206), FRAC_CONST(0.972465332561878) },
1299 { FRAC_CONST(0.229863957640129), FRAC_CONST(0.973222770478587) },
1300 { FRAC_CONST(0.226677868426735), FRAC_CONST(0.973969785961306) },
1301 { FRAC_CONST(0.223489351675482), FRAC_CONST(0.974706371010097) },
1302 { FRAC_CONST(0.220298441532823), FRAC_CONST(0.975432517736727) },
1303 { FRAC_CONST(0.217105172170841), FRAC_CONST(0.976148218364747) },
1304 { FRAC_CONST(0.213909577786886), FRAC_CONST(0.976853465229579) },
1305 { FRAC_CONST(0.210711692603206), FRAC_CONST(0.977548250778596) },
1306 { FRAC_CONST(0.207511550866582), FRAC_CONST(0.978232567571202) },
1307 { FRAC_CONST(0.204309186847962), FRAC_CONST(0.978906408278914) },
1308 { FRAC_CONST(0.201104634842092), FRAC_CONST(0.979569765685441) },
1309 { FRAC_CONST(0.197897929167148), FRAC_CONST(0.980222632686756) },
1310 { FRAC_CONST(0.194689104164373), FRAC_CONST(0.980865002291179) },
1311 { FRAC_CONST(0.191478194197704), FRAC_CONST(0.981496867619447) },
1312 { FRAC_CONST(0.188265233653407), FRAC_CONST(0.982118221904791) },
1313 { FRAC_CONST(0.185050256939710), FRAC_CONST(0.982729058493005) },
1314 { FRAC_CONST(0.181833298486427), FRAC_CONST(0.983329370842520) },
1315 { FRAC_CONST(0.178614392744603), FRAC_CONST(0.983919152524473) },
1316 { FRAC_CONST(0.175393574186129), FRAC_CONST(0.984498397222776) },
1317 { FRAC_CONST(0.172170877303385), FRAC_CONST(0.985067098734184) },
1318 { FRAC_CONST(0.168946336608867), FRAC_CONST(0.985625250968360) },
1319 { FRAC_CONST(0.165719986634814), FRAC_CONST(0.986172847947943) },
1320 { FRAC_CONST(0.162491861932842), FRAC_CONST(0.986709883808609) },
1321 { FRAC_CONST(0.159261997073573), FRAC_CONST(0.987236352799134) },
1322 { FRAC_CONST(0.156030426646266), FRAC_CONST(0.987752249281460) },
1323 { FRAC_CONST(0.152797185258443), FRAC_CONST(0.988257567730749) },
1324 { FRAC_CONST(0.149562307535523), FRAC_CONST(0.988752302735447) },
1325 { FRAC_CONST(0.146325828120446), FRAC_CONST(0.989236448997339) },
1326 { FRAC_CONST(0.143087781673307), FRAC_CONST(0.989710001331608) },
1327 { FRAC_CONST(0.139848202870981), FRAC_CONST(0.990172954666889) },
1328 { FRAC_CONST(0.136607126406757), FRAC_CONST(0.990625304045323) },
1329 { FRAC_CONST(0.133364586989957), FRAC_CONST(0.991067044622612) },
1330 { FRAC_CONST(0.130120619345575), FRAC_CONST(0.991498171668069) },
1331 { FRAC_CONST(0.126875258213898), FRAC_CONST(0.991918680564670) },
1332 { FRAC_CONST(0.123628538350136), FRAC_CONST(0.992328566809103) },
1333 { FRAC_CONST(0.120380494524051), FRAC_CONST(0.992727826011815) },
1334 { FRAC_CONST(0.117131161519582), FRAC_CONST(0.993116453897061) },
1335 { FRAC_CONST(0.113880574134475), FRAC_CONST(0.993494446302948) },
1336 { FRAC_CONST(0.110628767179910), FRAC_CONST(0.993861799181482) },
1337 { FRAC_CONST(0.107375775480128), FRAC_CONST(0.994218508598608) },
1338 { FRAC_CONST(0.104121633872055), FRAC_CONST(0.994564570734255) },
1339 { FRAC_CONST(0.100866377204933), FRAC_CONST(0.994899981882376) },
1340 { FRAC_CONST(0.097610040339947), FRAC_CONST(0.995224738450986) },
1341 { FRAC_CONST(0.094352658149849), FRAC_CONST(0.995538836962204) },
1342 { FRAC_CONST(0.091094265518583), FRAC_CONST(0.995842274052287) },
1343 { FRAC_CONST(0.087834897340919), FRAC_CONST(0.996135046471667) },
1344 { FRAC_CONST(0.084574588522070), FRAC_CONST(0.996417151084987) },
1345 { FRAC_CONST(0.081313373977324), FRAC_CONST(0.996688584871134) },
1346 { FRAC_CONST(0.078051288631670), FRAC_CONST(0.996949344923269) },
1347 { FRAC_CONST(0.074788367419420), FRAC_CONST(0.997199428448862) },
1348 { FRAC_CONST(0.071524645283840), FRAC_CONST(0.997438832769720) },
1349 { FRAC_CONST(0.068260157176771), FRAC_CONST(0.997667555322013) },
1350 { FRAC_CONST(0.064994938058259), FRAC_CONST(0.997885593656308) },
1351 { FRAC_CONST(0.061729022896176), FRAC_CONST(0.998092945437590) },
1352 { FRAC_CONST(0.058462446665851), FRAC_CONST(0.998289608445286) },
1353 { FRAC_CONST(0.055195244349690), FRAC_CONST(0.998475580573295) },
1354 { FRAC_CONST(0.051927450936806), FRAC_CONST(0.998650859830004) },
1355 { FRAC_CONST(0.048659101422640), FRAC_CONST(0.998815444338313) },
1356 { FRAC_CONST(0.045390230808591), FRAC_CONST(0.998969332335654) },
1357 { FRAC_CONST(0.042120874101635), FRAC_CONST(0.999112522174011) },
1358 { FRAC_CONST(0.038851066313958), FRAC_CONST(0.999245012319936) },
1359 { FRAC_CONST(0.035580842462574), FRAC_CONST(0.999366801354564) },
1360 { FRAC_CONST(0.032310237568951), FRAC_CONST(0.999477887973635) },
1361 { FRAC_CONST(0.029039286658643), FRAC_CONST(0.999578270987499) },
1362 { FRAC_CONST(0.025768024760904), FRAC_CONST(0.999667949321134) },
1363 { FRAC_CONST(0.022496486908322), FRAC_CONST(0.999746922014158) },
1364 { FRAC_CONST(0.019224708136438), FRAC_CONST(0.999815188220837) },
1365 { FRAC_CONST(0.015952723483375), FRAC_CONST(0.999872747210095) },
1366 { FRAC_CONST(0.012680567989461), FRAC_CONST(0.999919598365521) },
1367 { FRAC_CONST(0.009408276696850), FRAC_CONST(0.999955741185376) },
1368 { FRAC_CONST(0.006135884649155), FRAC_CONST(0.999981175282601) },
1369 { FRAC_CONST(0.002863426891064), FRAC_CONST(0.999995900384816) }
1370};
1371
1372#ifdef LD_DEC
1373/* 240 (N/4) complex twiddle factors */
1374ALIGN static const complex_t mdct_tab_960[] =
1375{
1376 { FRAC_CONST(0.999999665337326), FRAC_CONST(0.000818122995607) },
1377 { FRAC_CONST(0.999972892444367), FRAC_CONST(0.007363041249780) },
1378 { FRAC_CONST(0.999903284040864), FRAC_CONST(0.013907644095771) },
1379 { FRAC_CONST(0.999790843108610), FRAC_CONST(0.020451651184577) },
1380 { FRAC_CONST(0.999635574464198), FRAC_CONST(0.026994782192715) },
1381 { FRAC_CONST(0.999437484758823), FRAC_CONST(0.033536756834230) },
1382 { FRAC_CONST(0.999196582477986), FRAC_CONST(0.040077294872701) },
1383 { FRAC_CONST(0.998912877941140), FRAC_CONST(0.046616116133247) },
1384 { FRAC_CONST(0.998586383301244), FRAC_CONST(0.053152940514528) },
1385 { FRAC_CONST(0.998217112544241), FRAC_CONST(0.059687488000744) },
1386 { FRAC_CONST(0.997805081488460), FRAC_CONST(0.066219478673630) },
1387 { FRAC_CONST(0.997350307783942), FRAC_CONST(0.072748632724445) },
1388 { FRAC_CONST(0.996852810911678), FRAC_CONST(0.079274670465961) },
1389 { FRAC_CONST(0.996312612182778), FRAC_CONST(0.085797312344440) },
1390 { FRAC_CONST(0.995729734737558), FRAC_CONST(0.092316278951614) },
1391 { FRAC_CONST(0.995104203544548), FRAC_CONST(0.098831291036650) },
1392 { FRAC_CONST(0.994436045399422), FRAC_CONST(0.105342069518114) },
1393 { FRAC_CONST(0.993725288923851), FRAC_CONST(0.111848335495926) },
1394 { FRAC_CONST(0.992971964564277), FRAC_CONST(0.118349810263305) },
1395 { FRAC_CONST(0.992176104590608), FRAC_CONST(0.124846215318711) },
1396 { FRAC_CONST(0.991337743094838), FRAC_CONST(0.131337272377774) },
1397 { FRAC_CONST(0.990456915989581), FRAC_CONST(0.137822703385212) },
1398 { FRAC_CONST(0.989533661006540), FRAC_CONST(0.144302230526747) },
1399 { FRAC_CONST(0.988568017694885), FRAC_CONST(0.150775576241001) },
1400 { FRAC_CONST(0.987560027419562), FRAC_CONST(0.157242463231389) },
1401 { FRAC_CONST(0.986509733359519), FRAC_CONST(0.163702614477995) },
1402 { FRAC_CONST(0.985417180505858), FRAC_CONST(0.170155753249442) },
1403 { FRAC_CONST(0.984282415659907), FRAC_CONST(0.176601603114742) },
1404 { FRAC_CONST(0.983105487431216), FRAC_CONST(0.183039887955141) },
1405 { FRAC_CONST(0.981886446235473), FRAC_CONST(0.189470331975943) },
1406 { FRAC_CONST(0.980625344292344), FRAC_CONST(0.195892659718330) },
1407 { FRAC_CONST(0.979322235623241), FRAC_CONST(0.202306596071156) },
1408 { FRAC_CONST(0.977977176049000), FRAC_CONST(0.208711866282735) },
1409 { FRAC_CONST(0.976590223187499), FRAC_CONST(0.215108195972610) },
1410 { FRAC_CONST(0.975161436451181), FRAC_CONST(0.221495311143304) },
1411 { FRAC_CONST(0.973690877044515), FRAC_CONST(0.227872938192063) },
1412 { FRAC_CONST(0.972178607961371), FRAC_CONST(0.234240803922570) },
1413 { FRAC_CONST(0.970624693982323), FRAC_CONST(0.240598635556650) },
1414 { FRAC_CONST(0.969029201671875), FRAC_CONST(0.246946160745958) },
1415 { FRAC_CONST(0.967392199375607), FRAC_CONST(0.253283107583640) },
1416 { FRAC_CONST(0.965713757217249), FRAC_CONST(0.259609204615985) },
1417 { FRAC_CONST(0.963993947095677), FRAC_CONST(0.265924180854051) },
1418 { FRAC_CONST(0.962232842681832), FRAC_CONST(0.272227765785273) },
1419 { FRAC_CONST(0.960430519415566), FRAC_CONST(0.278519689385053) },
1420 { FRAC_CONST(0.958587054502409), FRAC_CONST(0.284799682128326) },
1421 { FRAC_CONST(0.956702526910263), FRAC_CONST(0.291067475001103) },
1422 { FRAC_CONST(0.954777017366017), FRAC_CONST(0.297322799511998) },
1423 { FRAC_CONST(0.952810608352092), FRAC_CONST(0.303565387703730) },
1424 { FRAC_CONST(0.950803384102905), FRAC_CONST(0.309794972164597) },
1425 { FRAC_CONST(0.948755430601263), FRAC_CONST(0.316011286039934) },
1426 { FRAC_CONST(0.946666835574676), FRAC_CONST(0.322214063043544) },
1427 { FRAC_CONST(0.944537688491606), FRAC_CONST(0.328403037469105) },
1428 { FRAC_CONST(0.942368080557626), FRAC_CONST(0.334577944201551) },
1429 { FRAC_CONST(0.940158104711519), FRAC_CONST(0.340738518728429) },
1430 { FRAC_CONST(0.937907855621296), FRAC_CONST(0.346884497151231) },
1431 { FRAC_CONST(0.935617429680138), FRAC_CONST(0.353015616196696) },
1432 { FRAC_CONST(0.933286925002268), FRAC_CONST(0.359131613228090) },
1433 { FRAC_CONST(0.930916441418752), FRAC_CONST(0.365232226256457) },
1434 { FRAC_CONST(0.928506080473216), FRAC_CONST(0.371317193951838) },
1435 { FRAC_CONST(0.926055945417500), FRAC_CONST(0.377386255654469) },
1436 { FRAC_CONST(0.923566141207236), FRAC_CONST(0.383439151385947) },
1437 { FRAC_CONST(0.921036774497350), FRAC_CONST(0.389475621860365) },
1438 { FRAC_CONST(0.918467953637492), FRAC_CONST(0.395495408495417) },
1439 { FRAC_CONST(0.915859788667400), FRAC_CONST(0.401498253423481) },
1440 { FRAC_CONST(0.913212391312179), FRAC_CONST(0.407483899502658) },
1441 { FRAC_CONST(0.910525874977521), FRAC_CONST(0.413452090327791) },
1442 { FRAC_CONST(0.907800354744844), FRAC_CONST(0.419402570241451) },
1443 { FRAC_CONST(0.905035947366364), FRAC_CONST(0.425335084344881) },
1444 { FRAC_CONST(0.902232771260093), FRAC_CONST(0.431249378508924) },
1445 { FRAC_CONST(0.899390946504764), FRAC_CONST(0.437145199384900) },
1446 { FRAC_CONST(0.896510594834693), FRAC_CONST(0.443022294415467) },
1447 { FRAC_CONST(0.893591839634558), FRAC_CONST(0.448880411845433) },
1448 { FRAC_CONST(0.890634805934118), FRAC_CONST(0.454719300732547) },
1449 { FRAC_CONST(0.887639620402854), FRAC_CONST(0.460538710958240) },
1450 { FRAC_CONST(0.884606411344546), FRAC_CONST(0.466338393238348) },
1451 { FRAC_CONST(0.881535308691775), FRAC_CONST(0.472118099133784) },
1452 { FRAC_CONST(0.878426444000357), FRAC_CONST(0.477877581061184) },
1453 { FRAC_CONST(0.875279950443708), FRAC_CONST(0.483616592303511) },
1454 { FRAC_CONST(0.872095962807140), FRAC_CONST(0.489334887020625) },
1455 { FRAC_CONST(0.868874617482085), FRAC_CONST(0.495032220259813) },
1456 { FRAC_CONST(0.865616052460258), FRAC_CONST(0.500708347966279) },
1457 { FRAC_CONST(0.862320407327736), FRAC_CONST(0.506363026993605) },
1458 { FRAC_CONST(0.858987823258990), FRAC_CONST(0.511996015114162) },
1459 { FRAC_CONST(0.855618443010829), FRAC_CONST(0.517607071029487) },
1460 { FRAC_CONST(0.852212410916289), FRAC_CONST(0.523195954380619) },
1461 { FRAC_CONST(0.848769872878448), FRAC_CONST(0.528762425758396) },
1462 { FRAC_CONST(0.845290976364179), FRAC_CONST(0.534306246713712) },
1463 { FRAC_CONST(0.841775870397828), FRAC_CONST(0.539827179767727) },
1464 { FRAC_CONST(0.838224705554838), FRAC_CONST(0.545324988422046) },
1465 { FRAC_CONST(0.834637633955290), FRAC_CONST(0.550799437168844) },
1466 { FRAC_CONST(0.831014809257393), FRAC_CONST(0.556250291500956) },
1467 { FRAC_CONST(0.827356386650900), FRAC_CONST(0.561677317921925) },
1468 { FRAC_CONST(0.823662522850458), FRAC_CONST(0.567080283956001) },
1469 { FRAC_CONST(0.819933376088899), FRAC_CONST(0.572458958158102) },
1470 { FRAC_CONST(0.816169106110459), FRAC_CONST(0.577813110123727) },
1471 { FRAC_CONST(0.812369874163934), FRAC_CONST(0.583142510498826) },
1472 { FRAC_CONST(0.808535842995778), FRAC_CONST(0.588446930989624) },
1473 { FRAC_CONST(0.804667176843123), FRAC_CONST(0.593726144372402) },
1474 { FRAC_CONST(0.800764041426753), FRAC_CONST(0.598979924503229) },
1475 { FRAC_CONST(0.796826603943998), FRAC_CONST(0.604208046327650) },
1476 { FRAC_CONST(0.792855033061574), FRAC_CONST(0.609410285890327) },
1477 { FRAC_CONST(0.788849498908361), FRAC_CONST(0.614586420344631) },
1478 { FRAC_CONST(0.784810173068109), FRAC_CONST(0.619736227962191) },
1479 { FRAC_CONST(0.780737228572094), FRAC_CONST(0.624859488142386) },
1480 { FRAC_CONST(0.776630839891703), FRAC_CONST(0.629955981421804) },
1481 { FRAC_CONST(0.772491182930959), FRAC_CONST(0.635025489483633) },
1482 { FRAC_CONST(0.768318435018988), FRAC_CONST(0.640067795167023) },
1483 { FRAC_CONST(0.764112774902423), FRAC_CONST(0.645082682476378) },
1484 { FRAC_CONST(0.759874382737746), FRAC_CONST(0.650069936590618) },
1485 { FRAC_CONST(0.755603440083571), FRAC_CONST(0.655029343872374) },
1486 { FRAC_CONST(0.751300129892866), FRAC_CONST(0.659960691877147) },
1487 { FRAC_CONST(0.746964636505118), FRAC_CONST(0.664863769362399) },
1488 { FRAC_CONST(0.742597145638433), FRAC_CONST(0.669738366296610) },
1489 { FRAC_CONST(0.738197844381584), FRAC_CONST(0.674584273868271) },
1490 { FRAC_CONST(0.733766921185995), FRAC_CONST(0.679401284494831) },
1491 { FRAC_CONST(0.729304565857668), FRAC_CONST(0.684189191831585) },
1492 { FRAC_CONST(0.724810969549055), FRAC_CONST(0.688947790780520) },
1493 { FRAC_CONST(0.720286324750863), FRAC_CONST(0.693676877499095) },
1494 { FRAC_CONST(0.715730825283819), FRAC_CONST(0.698376249408973) },
1495 { FRAC_CONST(0.711144666290356), FRAC_CONST(0.703045705204703) },
1496 { FRAC_CONST(0.706528044226263), FRAC_CONST(0.707685044862340) },
1497 { FRAC_CONST(0.701881156852263), FRAC_CONST(0.712294069648014) },
1498 { FRAC_CONST(0.697204203225545), FRAC_CONST(0.716872582126442) },
1499 { FRAC_CONST(0.692497383691237), FRAC_CONST(0.721420386169390) },
1500 { FRAC_CONST(0.687760899873822), FRAC_CONST(0.725937286964068) },
1501 { FRAC_CONST(0.682994954668502), FRAC_CONST(0.730423091021479) },
1502 { FRAC_CONST(0.678199752232508), FRAC_CONST(0.734877606184707) },
1503 { FRAC_CONST(0.673375497976352), FRAC_CONST(0.739300641637149) },
1504 { FRAC_CONST(0.668522398555031), FRAC_CONST(0.743692007910687) },
1505 { FRAC_CONST(0.663640661859171), FRAC_CONST(0.748051516893805) },
1506 { FRAC_CONST(0.658730497006124), FRAC_CONST(0.752378981839648) },
1507 { FRAC_CONST(0.653792114331011), FRAC_CONST(0.756674217374021) },
1508 { FRAC_CONST(0.648825725377709), FRAC_CONST(0.760937039503328) },
1509 { FRAC_CONST(0.643831542889792), FRAC_CONST(0.765167265622459) },
1510 { FRAC_CONST(0.638809780801414), FRAC_CONST(0.769364714522605) },
1511 { FRAC_CONST(0.633760654228152), FRAC_CONST(0.773529206399025) },
1512 { FRAC_CONST(0.628684379457781), FRAC_CONST(0.777660562858748) },
1513 { FRAC_CONST(0.623581173941019), FRAC_CONST(0.781758606928213) },
1514 { FRAC_CONST(0.618451256282204), FRAC_CONST(0.785823163060853) },
1515 { FRAC_CONST(0.613294846229936), FRAC_CONST(0.789854057144609) },
1516 { FRAC_CONST(0.608112164667659), FRAC_CONST(0.793851116509396) },
1517 { FRAC_CONST(0.602903433604202), FRAC_CONST(0.797814169934493) },
1518 { FRAC_CONST(0.597668876164268), FRAC_CONST(0.801743047655882) },
1519 { FRAC_CONST(0.592408716578875), FRAC_CONST(0.805637581373517) },
1520 { FRAC_CONST(0.587123180175754), FRAC_CONST(0.809497604258536) },
1521 { FRAC_CONST(0.581812493369691), FRAC_CONST(0.813322950960406) },
1522 { FRAC_CONST(0.576476883652835), FRAC_CONST(0.817113457614006) },
1523 { FRAC_CONST(0.571116579584947), FRAC_CONST(0.820868961846646) },
1524 { FRAC_CONST(0.565731810783613), FRAC_CONST(0.824589302785025) },
1525 { FRAC_CONST(0.560322807914407), FRAC_CONST(0.828274321062119) },
1526 { FRAC_CONST(0.554889802681009), FRAC_CONST(0.831923858824010) },
1527 { FRAC_CONST(0.549433027815281), FRAC_CONST(0.835537759736646) },
1528 { FRAC_CONST(0.543952717067296), FRAC_CONST(0.839115868992540) },
1529 { FRAC_CONST(0.538449105195327), FRAC_CONST(0.842658033317402) },
1530 { FRAC_CONST(0.532922427955790), FRAC_CONST(0.846164100976699) },
1531 { FRAC_CONST(0.527372922093142), FRAC_CONST(0.849633921782164) },
1532 { FRAC_CONST(0.521800825329746), FRAC_CONST(0.853067347098221) },
1533 { FRAC_CONST(0.516206376355680), FRAC_CONST(0.856464229848356) },
1534 { FRAC_CONST(0.510589814818519), FRAC_CONST(0.859824424521420) },
1535 { FRAC_CONST(0.504951381313066), FRAC_CONST(0.863147787177854) },
1536 { FRAC_CONST(0.499291317371047), FRAC_CONST(0.866434175455865) },
1537 { FRAC_CONST(0.493609865450762), FRAC_CONST(0.869683448577516) },
1538 { FRAC_CONST(0.487907268926702), FRAC_CONST(0.872895467354761) },
1539 { FRAC_CONST(0.482183772079123), FRAC_CONST(0.876070094195407) },
1540 { FRAC_CONST(0.476439620083580), FRAC_CONST(0.879207193109004) },
1541 { FRAC_CONST(0.470675059000427), FRAC_CONST(0.882306629712678) },
1542 { FRAC_CONST(0.464890335764274), FRAC_CONST(0.885368271236879) },
1543 { FRAC_CONST(0.459085698173413), FRAC_CONST(0.888391986531075) },
1544 { FRAC_CONST(0.453261394879198), FRAC_CONST(0.891377646069366) },
1545 { FRAC_CONST(0.447417675375397), FRAC_CONST(0.894325121956035) },
1546 { FRAC_CONST(0.441554789987504), FRAC_CONST(0.897234287931024) },
1547 { FRAC_CONST(0.435672989862017), FRAC_CONST(0.900105019375345) },
1548 { FRAC_CONST(0.429772526955677), FRAC_CONST(0.902937193316419) },
1549 { FRAC_CONST(0.423853654024676), FRAC_CONST(0.905730688433339) },
1550 { FRAC_CONST(0.417916624613831), FRAC_CONST(0.908485385062073) },
1551 { FRAC_CONST(0.411961693045722), FRAC_CONST(0.911201165200584) },
1552 { FRAC_CONST(0.405989114409798), FRAC_CONST(0.913877912513892) },
1553 { FRAC_CONST(0.399999144551449), FRAC_CONST(0.916515512339049) },
1554 { FRAC_CONST(0.393992040061048), FRAC_CONST(0.919113851690058) },
1555 { FRAC_CONST(0.387968058262959), FRAC_CONST(0.921672819262709) },
1556 { FRAC_CONST(0.381927457204511), FRAC_CONST(0.924192305439348) },
1557 { FRAC_CONST(0.375870495644949), FRAC_CONST(0.926672202293573) },
1558 { FRAC_CONST(0.369797433044349), FRAC_CONST(0.929112403594856) },
1559 { FRAC_CONST(0.363708529552499), FRAC_CONST(0.931512804813095) },
1560 { FRAC_CONST(0.357604045997758), FRAC_CONST(0.933873303123091) },
1561 { FRAC_CONST(0.351484243875885), FRAC_CONST(0.936193797408954) },
1562 { FRAC_CONST(0.345349385338836), FRAC_CONST(0.938474188268430) },
1563 { FRAC_CONST(0.339199733183530), FRAC_CONST(0.940714378017165) },
1564 { FRAC_CONST(0.333035550840599), FRAC_CONST(0.942914270692887) },
1565 { FRAC_CONST(0.326857102363098), FRAC_CONST(0.945073772059514) },
1566 { FRAC_CONST(0.320664652415198), FRAC_CONST(0.947192789611197) },
1567 { FRAC_CONST(0.314458466260842), FRAC_CONST(0.949271232576274) },
1568 { FRAC_CONST(0.308238809752391), FRAC_CONST(0.951309011921168) },
1569 { FRAC_CONST(0.302005949319228), FRAC_CONST(0.953306040354194) },
1570 { FRAC_CONST(0.295760151956351), FRAC_CONST(0.955262232329299) },
1571 { FRAC_CONST(0.289501685212929), FRAC_CONST(0.957177504049732) },
1572 { FRAC_CONST(0.283230817180850), FRAC_CONST(0.959051773471624) },
1573 { FRAC_CONST(0.276947816483228), FRAC_CONST(0.960884960307514) },
1574 { FRAC_CONST(0.270652952262902), FRAC_CONST(0.962676986029777) },
1575 { FRAC_CONST(0.264346494170904), FRAC_CONST(0.964427773873996) },
1576 { FRAC_CONST(0.258028712354909), FRAC_CONST(0.966137248842248) },
1577 { FRAC_CONST(0.251699877447663), FRAC_CONST(0.967805337706313) },
1578 { FRAC_CONST(0.245360260555389), FRAC_CONST(0.969431969010818) },
1579 { FRAC_CONST(0.239010133246176), FRAC_CONST(0.971017073076290) },
1580 { FRAC_CONST(0.232649767538342), FRAC_CONST(0.972560582002147) },
1581 { FRAC_CONST(0.226279435888785), FRAC_CONST(0.974062429669605) },
1582 { FRAC_CONST(0.219899411181310), FRAC_CONST(0.975522551744506) },
1583 { FRAC_CONST(0.213509966714943), FRAC_CONST(0.976940885680082) },
1584 { FRAC_CONST(0.207111376192219), FRAC_CONST(0.978317370719628) },
1585 { FRAC_CONST(0.200703913707458), FRAC_CONST(0.979651947899104) },
1586 { FRAC_CONST(0.194287853735029), FRAC_CONST(0.980944560049668) },
1587 { FRAC_CONST(0.187863471117585), FRAC_CONST(0.982195151800116) },
1588 { FRAC_CONST(0.181431041054297), FRAC_CONST(0.983403669579260) },
1589 { FRAC_CONST(0.174990839089060), FRAC_CONST(0.984570061618221) },
1590 { FRAC_CONST(0.168543141098691), FRAC_CONST(0.985694277952645) },
1591 { FRAC_CONST(0.162088223281113), FRAC_CONST(0.986776270424848) },
1592 { FRAC_CONST(0.155626362143520), FRAC_CONST(0.987815992685872) },
1593 { FRAC_CONST(0.149157834490539), FRAC_CONST(0.988813400197476) },
1594 { FRAC_CONST(0.142682917412363), FRAC_CONST(0.989768450234042) },
1595 { FRAC_CONST(0.136201888272891), FRAC_CONST(0.990681101884405) },
1596 { FRAC_CONST(0.129715024697841), FRAC_CONST(0.991551316053606) },
1597 { FRAC_CONST(0.123222604562857), FRAC_CONST(0.992379055464567) },
1598 { FRAC_CONST(0.116724905981611), FRAC_CONST(0.993164284659685) },
1599 { FRAC_CONST(0.110222207293883), FRAC_CONST(0.993906970002356) },
1600 { FRAC_CONST(0.103714787053643), FRAC_CONST(0.994607079678411) },
1601 { FRAC_CONST(0.097202924017115), FRAC_CONST(0.995264583697482) },
1602 { FRAC_CONST(0.090686897130838), FRAC_CONST(0.995879453894286) },
1603 { FRAC_CONST(0.084166985519718), FRAC_CONST(0.996451663929828) },
1604 { FRAC_CONST(0.077643468475068), FRAC_CONST(0.996981189292537) },
1605 { FRAC_CONST(0.071116625442645), FRAC_CONST(0.997468007299307) },
1606 { FRAC_CONST(0.064586736010684), FRAC_CONST(0.997912097096476) },
1607 { FRAC_CONST(0.058054079897912), FRAC_CONST(0.998313439660714) },
1608 { FRAC_CONST(0.051518936941578), FRAC_CONST(0.998672017799843) },
1609 { FRAC_CONST(0.044981587085452), FRAC_CONST(0.998987816153567) },
1610 { FRAC_CONST(0.038442310367847), FRAC_CONST(0.999260821194138) },
1611 { FRAC_CONST(0.031901386909611), FRAC_CONST(0.999491021226926) },
1612 { FRAC_CONST(0.025359096902136), FRAC_CONST(0.999678406390929) },
1613 { FRAC_CONST(0.018815720595351), FRAC_CONST(0.999822968659191) },
1614 { FRAC_CONST(0.012271538285720), FRAC_CONST(0.999924701839145) },
1615 { FRAC_CONST(0.005726830304231), FRAC_CONST(0.999983601572879) }
1616};
1617#endif // LD_DEC
1618
1619/* 60 (N/4) complex twiddle factors */
1620ALIGN static const complex_t mdct_tab_240[] =
1621{
1622 { FRAC_CONST(0.999994645401696), FRAC_CONST(0.003272486506527) },
1623 { FRAC_CONST(0.999566308502021), FRAC_CONST(0.029448173247963) },
1624 { FRAC_CONST(0.998452918783950), FRAC_CONST(0.055603677682425) },
1625 { FRAC_CONST(0.996655239309180), FRAC_CONST(0.081721074133668) },
1626 { FRAC_CONST(0.994174502117428), FRAC_CONST(0.107782463042759) },
1627 { FRAC_CONST(0.991012407382049), FRAC_CONST(0.133769983235535) },
1628 { FRAC_CONST(0.987171122244825), FRAC_CONST(0.159665824163761) },
1629 { FRAC_CONST(0.982653279330712), FRAC_CONST(0.185452238111591) },
1630 { FRAC_CONST(0.977461974943572), FRAC_CONST(0.211111552358965) },
1631 { FRAC_CONST(0.971600766944121), FRAC_CONST(0.236626181293610) },
1632 { FRAC_CONST(0.965073672311547), FRAC_CONST(0.261978638463337) },
1633 { FRAC_CONST(0.957885164390477), FRAC_CONST(0.287151548560387) },
1634 { FRAC_CONST(0.950040169825165), FRAC_CONST(0.312127659329594) },
1635 { FRAC_CONST(0.941544065183021), FRAC_CONST(0.336889853392220) },
1636 { FRAC_CONST(0.932402673269775), FRAC_CONST(0.361421159977355) },
1637 { FRAC_CONST(0.922622259138823), FRAC_CONST(0.385704766552831) },
1638 { FRAC_CONST(0.912209525797468), FRAC_CONST(0.409724030347695) },
1639 { FRAC_CONST(0.901171609613013), FRAC_CONST(0.433462489758331) },
1640 { FRAC_CONST(0.889516075421856), FRAC_CONST(0.456903875630421) },
1641 { FRAC_CONST(0.877250911344924), FRAC_CONST(0.480032122409011) },
1642 { FRAC_CONST(0.864384523313017), FRAC_CONST(0.502831379149042) },
1643 { FRAC_CONST(0.850925729305802), FRAC_CONST(0.525286020378792) },
1644 { FRAC_CONST(0.836883753308409), FRAC_CONST(0.547380656808797) },
1645 { FRAC_CONST(0.822268218989775), FRAC_CONST(0.569100145878898) },
1646 { FRAC_CONST(0.807089143107059), FRAC_CONST(0.590429602136201) },
1647 { FRAC_CONST(0.791356928640660), FRAC_CONST(0.611354407436816) },
1648 { FRAC_CONST(0.775082357664531), FRAC_CONST(0.631860220964409) },
1649 { FRAC_CONST(0.758276583956687), FRAC_CONST(0.651932989058674) },
1650 { FRAC_CONST(0.740951125354959), FRAC_CONST(0.671558954847018) },
1651 { FRAC_CONST(0.723117855863248), FRAC_CONST(0.690724667672829) },
1652 { FRAC_CONST(0.704788997513670), FRAC_CONST(0.709416992313883) },
1653 { FRAC_CONST(0.685977111990193), FRAC_CONST(0.727623117984575) },
1654 { FRAC_CONST(0.666695092019479), FRAC_CONST(0.745330567115786) },
1655 { FRAC_CONST(0.646956152534857), FRAC_CONST(0.762527203906388) },
1656 { FRAC_CONST(0.626773821619469), FRAC_CONST(0.779201242640517) },
1657 { FRAC_CONST(0.606161931234795), FRAC_CONST(0.795341255764910) },
1658 { FRAC_CONST(0.585134607740916), FRAC_CONST(0.810936181720784) },
1659 { FRAC_CONST(0.563706262215017), FRAC_CONST(0.825975332524873) },
1660 { FRAC_CONST(0.541891580574752), FRAC_CONST(0.840448401094438) },
1661 { FRAC_CONST(0.519705513513249), FRAC_CONST(0.854345468311227) },
1662 { FRAC_CONST(0.497163266252654), FRAC_CONST(0.867657009819544) },
1663 { FRAC_CONST(0.474280288123229), FRAC_CONST(0.880373902553765) },
1664 { FRAC_CONST(0.451072261975153), FRAC_CONST(0.892487430990834) },
1665 { FRAC_CONST(0.427555093430282), FRAC_CONST(0.903989293123443) },
1666 { FRAC_CONST(0.403744899981227), FRAC_CONST(0.914871606149819) },
1667 { FRAC_CONST(0.379657999945233), FRAC_CONST(0.925126911876195) },
1668 { FRAC_CONST(0.355310901280416), FRAC_CONST(0.934748181828292) },
1669 { FRAC_CONST(0.330720290272038), FRAC_CONST(0.943728822068278) },
1670 { FRAC_CONST(0.305903020096554), FRAC_CONST(0.952062677713924) },
1671 { FRAC_CONST(0.280876099271292), FRAC_CONST(0.959744037156857) },
1672 { FRAC_CONST(0.255656679997665), FRAC_CONST(0.966767635977008) },
1673 { FRAC_CONST(0.230262046405902), FRAC_CONST(0.973128660550580) },
1674 { FRAC_CONST(0.204709602709380), FRAC_CONST(0.978822751349072) },
1675 { FRAC_CONST(0.179016861276633), FRAC_CONST(0.983846005927077) },
1676 { FRAC_CONST(0.153201430629259), FRAC_CONST(0.988194981596825) },
1677 { FRAC_CONST(0.127281003373913), FRAC_CONST(0.991866697787626) },
1678 { FRAC_CONST(0.101273344076683), FRAC_CONST(0.994858638088611) },
1679 { FRAC_CONST(0.075196277088140), FRAC_CONST(0.997168751973348) },
1680 { FRAC_CONST(0.049067674327418), FRAC_CONST(0.998795456205172) },
1681 { FRAC_CONST(0.022905443033697), FRAC_CONST(0.999737635922260) }
1682};
1683#endif // ALLOW_SMALL_FRAMELENGTH
1684
1685#ifdef SSR_DEC
1686/* 128 (N/4) complex twiddle factors */
1687ALIGN static const complex_t mdct_tab_512[] =
1688{
1689 { FRAC_CONST(0.999998823451702), FRAC_CONST(0.001533980186285) },
1690 { FRAC_CONST(0.999904701082853), FRAC_CONST(0.013805388528060) },
1691 { FRAC_CONST(0.999659996743959), FRAC_CONST(0.026074717829104) },
1692 { FRAC_CONST(0.999264747286594), FRAC_CONST(0.038340120373553) },
1693 { FRAC_CONST(0.998719012233873), FRAC_CONST(0.050599749036899) },
1694 { FRAC_CONST(0.998022873771486), FRAC_CONST(0.062851757564161) },
1695 { FRAC_CONST(0.997176436735326), FRAC_CONST(0.075094300847921) },
1696 { FRAC_CONST(0.996179828595697), FRAC_CONST(0.087325535206192) },
1697 { FRAC_CONST(0.995033199438119), FRAC_CONST(0.099543618660069) },
1698 { FRAC_CONST(0.993736721940725), FRAC_CONST(0.111746711211127) },
1699 { FRAC_CONST(0.992290591348257), FRAC_CONST(0.123932975118512) },
1700 { FRAC_CONST(0.990695025442665), FRAC_CONST(0.136100575175706) },
1701 { FRAC_CONST(0.988950264510303), FRAC_CONST(0.148247678986896) },
1702 { FRAC_CONST(0.987056571305751), FRAC_CONST(0.160372457242928) },
1703 { FRAC_CONST(0.985014231012240), FRAC_CONST(0.172473083996796) },
1704 { FRAC_CONST(0.982823551198705), FRAC_CONST(0.184547736938620) },
1705 { FRAC_CONST(0.980484861773469), FRAC_CONST(0.196594597670080) },
1706 { FRAC_CONST(0.977998514934557), FRAC_CONST(0.208611851978263) },
1707 { FRAC_CONST(0.975364885116657), FRAC_CONST(0.220597690108874) },
1708 { FRAC_CONST(0.972584368934732), FRAC_CONST(0.232550307038775) },
1709 { FRAC_CONST(0.969657385124292), FRAC_CONST(0.244467902747824) },
1710 { FRAC_CONST(0.966584374478333), FRAC_CONST(0.256348682489943) },
1711 { FRAC_CONST(0.963365799780954), FRAC_CONST(0.268190857063403) },
1712 { FRAC_CONST(0.960002145737666), FRAC_CONST(0.279992643080273) },
1713 { FRAC_CONST(0.956493918902395), FRAC_CONST(0.291752263234989) },
1714 { FRAC_CONST(0.952841647601199), FRAC_CONST(0.303467946572011) },
1715 { FRAC_CONST(0.949045881852701), FRAC_CONST(0.315137928752522) },
1716 { FRAC_CONST(0.945107193285261), FRAC_CONST(0.326760452320132) },
1717 { FRAC_CONST(0.941026175050889), FRAC_CONST(0.338333766965541) },
1718 { FRAC_CONST(0.936803441735922), FRAC_CONST(0.349856129790135) },
1719 { FRAC_CONST(0.932439629268462), FRAC_CONST(0.361325805568454) },
1720 { FRAC_CONST(0.927935394822618), FRAC_CONST(0.372741067009516) },
1721 { FRAC_CONST(0.923291416719528), FRAC_CONST(0.384100195016935) },
1722 { FRAC_CONST(0.918508394325212), FRAC_CONST(0.395401478947816) },
1723 { FRAC_CONST(0.913587047945251), FRAC_CONST(0.406643216870369) },
1724 { FRAC_CONST(0.908528118716306), FRAC_CONST(0.417823715820212) },
1725 { FRAC_CONST(0.903332368494512), FRAC_CONST(0.428941292055329) },
1726 { FRAC_CONST(0.898000579740740), FRAC_CONST(0.439994271309633) },
1727 { FRAC_CONST(0.892533555402765), FRAC_CONST(0.450980989045104) },
1728 { FRAC_CONST(0.886932118794342), FRAC_CONST(0.461899790702463) },
1729 { FRAC_CONST(0.881197113471222), FRAC_CONST(0.472749031950343) },
1730 { FRAC_CONST(0.875329403104111), FRAC_CONST(0.483527078932919) },
1731 { FRAC_CONST(0.869329871348607), FRAC_CONST(0.494232308515960) },
1732 { FRAC_CONST(0.863199421712124), FRAC_CONST(0.504863108531268) },
1733 { FRAC_CONST(0.856938977417829), FRAC_CONST(0.515417878019463) },
1734 { FRAC_CONST(0.850549481265603), FRAC_CONST(0.525895027471085) },
1735 { FRAC_CONST(0.844031895490066), FRAC_CONST(0.536292979065963) },
1736 { FRAC_CONST(0.837387201615662), FRAC_CONST(0.546610166910835) },
1737 { FRAC_CONST(0.830616400308846), FRAC_CONST(0.556845037275160) },
1738 { FRAC_CONST(0.823720511227391), FRAC_CONST(0.566996048825109) },
1739 { FRAC_CONST(0.816700572866828), FRAC_CONST(0.577061672855679) },
1740 { FRAC_CONST(0.809557642404051), FRAC_CONST(0.587040393520918) },
1741 { FRAC_CONST(0.802292795538116), FRAC_CONST(0.596930708062197) },
1742 { FRAC_CONST(0.794907126328237), FRAC_CONST(0.606731127034524) },
1743 { FRAC_CONST(0.787401747029031), FRAC_CONST(0.616440174530854) },
1744 { FRAC_CONST(0.779777787923015), FRAC_CONST(0.626056388404344) },
1745 { FRAC_CONST(0.772036397150385), FRAC_CONST(0.635578320488556) },
1746 { FRAC_CONST(0.764178740536117), FRAC_CONST(0.645004536815544) },
1747 { FRAC_CONST(0.756206001414395), FRAC_CONST(0.654333617831800) },
1748 { FRAC_CONST(0.748119380450404), FRAC_CONST(0.663564158612040) },
1749 { FRAC_CONST(0.739920095459516), FRAC_CONST(0.672694769070773) },
1750 { FRAC_CONST(0.731609381223893), FRAC_CONST(0.681724074171650) },
1751 { FRAC_CONST(0.723188489306527), FRAC_CONST(0.690650714134535) },
1752 { FRAC_CONST(0.714658687862769), FRAC_CONST(0.699473344640284) },
1753 { FRAC_CONST(0.706021261449340), FRAC_CONST(0.708190637033195) },
1754 { FRAC_CONST(0.697277510830887), FRAC_CONST(0.716801278521100) },
1755 { FRAC_CONST(0.688428752784091), FRAC_CONST(0.725303972373061) },
1756 { FRAC_CONST(0.679476319899365), FRAC_CONST(0.733697438114660) },
1757 { FRAC_CONST(0.670421560380173), FRAC_CONST(0.741980411720831) },
1758 { FRAC_CONST(0.661265837839992), FRAC_CONST(0.750151645806215) },
1759 { FRAC_CONST(0.652010531096960), FRAC_CONST(0.758209909813015) },
1760 { FRAC_CONST(0.642657033966227), FRAC_CONST(0.766153990196313) },
1761 { FRAC_CONST(0.633206755050057), FRAC_CONST(0.773982690606823) },
1762 { FRAC_CONST(0.623661117525695), FRAC_CONST(0.781694832071059) },
1763 { FRAC_CONST(0.614021558931038), FRAC_CONST(0.789289253168886) },
1764 { FRAC_CONST(0.604289530948156), FRAC_CONST(0.796764810208419) },
1765 { FRAC_CONST(0.594466499184665), FRAC_CONST(0.804120377398266) },
1766 { FRAC_CONST(0.584553942953015), FRAC_CONST(0.811354847017064) },
1767 { FRAC_CONST(0.574553355047716), FRAC_CONST(0.818467129580299) },
1768 { FRAC_CONST(0.564466241520520), FRAC_CONST(0.825456154004377) },
1769 { FRAC_CONST(0.554294121453620), FRAC_CONST(0.832320867767930) },
1770 { FRAC_CONST(0.544038526730884), FRAC_CONST(0.839060237070313) },
1771 { FRAC_CONST(0.533701001807153), FRAC_CONST(0.845673246987299) },
1772 { FRAC_CONST(0.523283103475656), FRAC_CONST(0.852158901623920) },
1773 { FRAC_CONST(0.512786400633563), FRAC_CONST(0.858516224264443) },
1774 { FRAC_CONST(0.502212474045711), FRAC_CONST(0.864744257519462) },
1775 { FRAC_CONST(0.491562916106550), FRAC_CONST(0.870842063470079) },
1776 { FRAC_CONST(0.480839330600334), FRAC_CONST(0.876808723809146) },
1777 { FRAC_CONST(0.470043332459596), FRAC_CONST(0.882643339979563) },
1778 { FRAC_CONST(0.459176547521944), FRAC_CONST(0.888345033309596) },
1779 { FRAC_CONST(0.448240612285220), FRAC_CONST(0.893912945145203) },
1780 { FRAC_CONST(0.437237173661044), FRAC_CONST(0.899346236979341) },
1781 { FRAC_CONST(0.426167888726800), FRAC_CONST(0.904644090578246) },
1782 { FRAC_CONST(0.415034424476082), FRAC_CONST(0.909805708104652) },
1783 { FRAC_CONST(0.403838457567654), FRAC_CONST(0.914830312237946) },
1784 { FRAC_CONST(0.392581674072952), FRAC_CONST(0.919717146291227) },
1785 { FRAC_CONST(0.381265769222162), FRAC_CONST(0.924465474325263) },
1786 { FRAC_CONST(0.369892447148934), FRAC_CONST(0.929074581259316) },
1787 { FRAC_CONST(0.358463420633737), FRAC_CONST(0.933543772978836) },
1788 { FRAC_CONST(0.346980410845924), FRAC_CONST(0.937872376439990) },
1789 { FRAC_CONST(0.335445147084532), FRAC_CONST(0.942059739771017) },
1790 { FRAC_CONST(0.323859366517853), FRAC_CONST(0.946105232370403) },
1791 { FRAC_CONST(0.312224813921825), FRAC_CONST(0.950008245001843) },
1792 { FRAC_CONST(0.300543241417273), FRAC_CONST(0.953768189885990) },
1793 { FRAC_CONST(0.288816408206049), FRAC_CONST(0.957384500788976) },
1794 { FRAC_CONST(0.277046080306100), FRAC_CONST(0.960856633107680) },
1795 { FRAC_CONST(0.265234030285512), FRAC_CONST(0.964184063951746) },
1796 { FRAC_CONST(0.253382036995570), FRAC_CONST(0.967366292222329) },
1797 { FRAC_CONST(0.241491885302869), FRAC_CONST(0.970402838687556) },
1798 { FRAC_CONST(0.229565365820519), FRAC_CONST(0.973293246054698) },
1799 { FRAC_CONST(0.217604274638484), FRAC_CONST(0.976037079039039) },
1800 { FRAC_CONST(0.205610413053099), FRAC_CONST(0.978633924429423) },
1801 { FRAC_CONST(0.193585587295804), FRAC_CONST(0.981083391150487) },
1802 { FRAC_CONST(0.181531608261125), FRAC_CONST(0.983385110321551) },
1803 { FRAC_CONST(0.169450291233968), FRAC_CONST(0.985538735312176) },
1804 { FRAC_CONST(0.157343455616238), FRAC_CONST(0.987543941794359) },
1805 { FRAC_CONST(0.145212924652848), FRAC_CONST(0.989400427791380) },
1806 { FRAC_CONST(0.133060525157139), FRAC_CONST(0.991107913723277) },
1807 { FRAC_CONST(0.120888087235777), FRAC_CONST(0.992666142448948) },
1808 { FRAC_CONST(0.108697444013139), FRAC_CONST(0.994074879304879) },
1809 { FRAC_CONST(0.096490431355253), FRAC_CONST(0.995333912140482) },
1810 { FRAC_CONST(0.084268887593324), FRAC_CONST(0.996443051350043) },
1811 { FRAC_CONST(0.072034653246889), FRAC_CONST(0.997402129901275) },
1812 { FRAC_CONST(0.059789570746640), FRAC_CONST(0.998211003360478) },
1813 { FRAC_CONST(0.047535484156959), FRAC_CONST(0.998869549914284) },
1814 { FRAC_CONST(0.035274238898214), FRAC_CONST(0.999377670388003) },
1815 { FRAC_CONST(0.023007681468839), FRAC_CONST(0.999735288260562) },
1816 { FRAC_CONST(0.010737659167265), FRAC_CONST(0.999942349676024) }
1817};
1818
1819/* 16 (N/4) complex twiddle factors */
1820ALIGN static const complex_t mdct_tab_64[] =
1821{
1822 { FRAC_CONST(0.999924701839145), FRAC_CONST(0.012271538285720) },
1823 { FRAC_CONST(0.993906970002356), FRAC_CONST(0.110222207293883) },
1824 { FRAC_CONST(0.978317370719628), FRAC_CONST(0.207111376192219) },
1825 { FRAC_CONST(0.953306040354194), FRAC_CONST(0.302005949319228) },
1826 { FRAC_CONST(0.919113851690058), FRAC_CONST(0.393992040061048) },
1827 { FRAC_CONST(0.876070094195407), FRAC_CONST(0.482183772079123) },
1828 { FRAC_CONST(0.824589302785025), FRAC_CONST(0.565731810783613) },
1829 { FRAC_CONST(0.765167265622459), FRAC_CONST(0.643831542889791) },
1830 { FRAC_CONST(0.698376249408973), FRAC_CONST(0.715730825283819) },
1831 { FRAC_CONST(0.624859488142386), FRAC_CONST(0.780737228572094) },
1832 { FRAC_CONST(0.545324988422046), FRAC_CONST(0.838224705554838) },
1833 { FRAC_CONST(0.460538710958240), FRAC_CONST(0.887639620402854) },
1834 { FRAC_CONST(0.371317193951838), FRAC_CONST(0.928506080473215) },
1835 { FRAC_CONST(0.278519689385053), FRAC_CONST(0.960430519415566) },
1836 { FRAC_CONST(0.183039887955141), FRAC_CONST(0.983105487431216) },
1837 { FRAC_CONST(0.085797312344440), FRAC_CONST(0.996312612182778) }
1838};
1839#endif // SSR_DEC
1840
1841#else // FIXED_POINT
1842
1843/* 256 (N/4) complex twiddle factors */
1844ALIGN static const complex_t mdct_tab_2048[] =
1845{
1846 { FRAC_CONST(0.031249997702054), FRAC_CONST(0.000011984224612) },
1847 { FRAC_CONST(0.031249813866531), FRAC_CONST(0.000107857810004) },
1848 { FRAC_CONST(0.031249335895858), FRAC_CONST(0.000203730380198) },
1849 { FRAC_CONST(0.031248563794535), FRAC_CONST(0.000299601032804) },
1850 { FRAC_CONST(0.031247497569829), FRAC_CONST(0.000395468865451) },
1851 { FRAC_CONST(0.031246137231775), FRAC_CONST(0.000491332975794) },
1852 { FRAC_CONST(0.031244482793177), FRAC_CONST(0.000587192461525) },
1853 { FRAC_CONST(0.031242534269608), FRAC_CONST(0.000683046420376) },
1854 { FRAC_CONST(0.031240291679407), FRAC_CONST(0.000778893950134) },
1855 { FRAC_CONST(0.031237755043684), FRAC_CONST(0.000874734148645) },
1856 { FRAC_CONST(0.031234924386313), FRAC_CONST(0.000970566113826) },
1857 { FRAC_CONST(0.031231799733938), FRAC_CONST(0.001066388943669) },
1858 { FRAC_CONST(0.031228381115970), FRAC_CONST(0.001162201736253) },
1859 { FRAC_CONST(0.031224668564585), FRAC_CONST(0.001258003589751) },
1860 { FRAC_CONST(0.031220662114728), FRAC_CONST(0.001353793602441) },
1861 { FRAC_CONST(0.031216361804108), FRAC_CONST(0.001449570872710) },
1862 { FRAC_CONST(0.031211767673203), FRAC_CONST(0.001545334499065) },
1863 { FRAC_CONST(0.031206879765253), FRAC_CONST(0.001641083580144) },
1864 { FRAC_CONST(0.031201698126266), FRAC_CONST(0.001736817214719) },
1865 { FRAC_CONST(0.031196222805014), FRAC_CONST(0.001832534501709) },
1866 { FRAC_CONST(0.031190453853031), FRAC_CONST(0.001928234540186) },
1867 { FRAC_CONST(0.031184391324617), FRAC_CONST(0.002023916429386) },
1868 { FRAC_CONST(0.031178035276836), FRAC_CONST(0.002119579268713) },
1869 { FRAC_CONST(0.031171385769513), FRAC_CONST(0.002215222157753) },
1870 { FRAC_CONST(0.031164442865236), FRAC_CONST(0.002310844196278) },
1871 { FRAC_CONST(0.031157206629353), FRAC_CONST(0.002406444484258) },
1872 { FRAC_CONST(0.031149677129975), FRAC_CONST(0.002502022121865) },
1873 { FRAC_CONST(0.031141854437973), FRAC_CONST(0.002597576209488) },
1874 { FRAC_CONST(0.031133738626977), FRAC_CONST(0.002693105847734) },
1875 { FRAC_CONST(0.031125329773375), FRAC_CONST(0.002788610137442) },
1876 { FRAC_CONST(0.031116627956316), FRAC_CONST(0.002884088179689) },
1877 { FRAC_CONST(0.031107633257703), FRAC_CONST(0.002979539075801) },
1878 { FRAC_CONST(0.031098345762200), FRAC_CONST(0.003074961927355) },
1879 { FRAC_CONST(0.031088765557222), FRAC_CONST(0.003170355836197) },
1880 { FRAC_CONST(0.031078892732942), FRAC_CONST(0.003265719904442) },
1881 { FRAC_CONST(0.031068727382288), FRAC_CONST(0.003361053234488) },
1882 { FRAC_CONST(0.031058269600939), FRAC_CONST(0.003456354929021) },
1883 { FRAC_CONST(0.031047519487329), FRAC_CONST(0.003551624091024) },
1884 { FRAC_CONST(0.031036477142640), FRAC_CONST(0.003646859823790) },
1885 { FRAC_CONST(0.031025142670809), FRAC_CONST(0.003742061230921) },
1886 { FRAC_CONST(0.031013516178519), FRAC_CONST(0.003837227416347) },
1887 { FRAC_CONST(0.031001597775203), FRAC_CONST(0.003932357484328) },
1888 { FRAC_CONST(0.030989387573042), FRAC_CONST(0.004027450539462) },
1889 { FRAC_CONST(0.030976885686963), FRAC_CONST(0.004122505686697) },
1890 { FRAC_CONST(0.030964092234638), FRAC_CONST(0.004217522031340) },
1891 { FRAC_CONST(0.030951007336485), FRAC_CONST(0.004312498679058) },
1892 { FRAC_CONST(0.030937631115663), FRAC_CONST(0.004407434735897) },
1893 { FRAC_CONST(0.030923963698074), FRAC_CONST(0.004502329308281) },
1894 { FRAC_CONST(0.030910005212362), FRAC_CONST(0.004597181503027) },
1895 { FRAC_CONST(0.030895755789908), FRAC_CONST(0.004691990427350) },
1896 { FRAC_CONST(0.030881215564835), FRAC_CONST(0.004786755188872) },
1897 { FRAC_CONST(0.030866384674000), FRAC_CONST(0.004881474895632) },
1898 { FRAC_CONST(0.030851263256996), FRAC_CONST(0.004976148656090) },
1899 { FRAC_CONST(0.030835851456154), FRAC_CONST(0.005070775579142) },
1900 { FRAC_CONST(0.030820149416533), FRAC_CONST(0.005165354774124) },
1901 { FRAC_CONST(0.030804157285929), FRAC_CONST(0.005259885350819) },
1902 { FRAC_CONST(0.030787875214864), FRAC_CONST(0.005354366419469) },
1903 { FRAC_CONST(0.030771303356593), FRAC_CONST(0.005448797090784) },
1904 { FRAC_CONST(0.030754441867095), FRAC_CONST(0.005543176475946) },
1905 { FRAC_CONST(0.030737290905077), FRAC_CONST(0.005637503686619) },
1906 { FRAC_CONST(0.030719850631972), FRAC_CONST(0.005731777834961) },
1907 { FRAC_CONST(0.030702121211932), FRAC_CONST(0.005825998033626) },
1908 { FRAC_CONST(0.030684102811835), FRAC_CONST(0.005920163395780) },
1909 { FRAC_CONST(0.030665795601276), FRAC_CONST(0.006014273035101) },
1910 { FRAC_CONST(0.030647199752570), FRAC_CONST(0.006108326065793) },
1911 { FRAC_CONST(0.030628315440748), FRAC_CONST(0.006202321602594) },
1912 { FRAC_CONST(0.030609142843557), FRAC_CONST(0.006296258760782) },
1913 { FRAC_CONST(0.030589682141455), FRAC_CONST(0.006390136656185) },
1914 { FRAC_CONST(0.030569933517616), FRAC_CONST(0.006483954405188) },
1915 { FRAC_CONST(0.030549897157919), FRAC_CONST(0.006577711124743) },
1916 { FRAC_CONST(0.030529573250956), FRAC_CONST(0.006671405932375) },
1917 { FRAC_CONST(0.030508961988022), FRAC_CONST(0.006765037946194) },
1918 { FRAC_CONST(0.030488063563118), FRAC_CONST(0.006858606284900) },
1919 { FRAC_CONST(0.030466878172949), FRAC_CONST(0.006952110067791) },
1920 { FRAC_CONST(0.030445406016919), FRAC_CONST(0.007045548414774) },
1921 { FRAC_CONST(0.030423647297133), FRAC_CONST(0.007138920446372) },
1922 { FRAC_CONST(0.030401602218392), FRAC_CONST(0.007232225283733) },
1923 { FRAC_CONST(0.030379270988192), FRAC_CONST(0.007325462048634) },
1924 { FRAC_CONST(0.030356653816724), FRAC_CONST(0.007418629863497) },
1925 { FRAC_CONST(0.030333750916869), FRAC_CONST(0.007511727851390) },
1926 { FRAC_CONST(0.030310562504198), FRAC_CONST(0.007604755136040) },
1927 { FRAC_CONST(0.030287088796968), FRAC_CONST(0.007697710841838) },
1928 { FRAC_CONST(0.030263330016124), FRAC_CONST(0.007790594093851) },
1929 { FRAC_CONST(0.030239286385293), FRAC_CONST(0.007883404017824) },
1930 { FRAC_CONST(0.030214958130781), FRAC_CONST(0.007976139740197) },
1931 { FRAC_CONST(0.030190345481576), FRAC_CONST(0.008068800388104) },
1932 { FRAC_CONST(0.030165448669342), FRAC_CONST(0.008161385089390) },
1933 { FRAC_CONST(0.030140267928416), FRAC_CONST(0.008253892972610) },
1934 { FRAC_CONST(0.030114803495809), FRAC_CONST(0.008346323167047) },
1935 { FRAC_CONST(0.030089055611203), FRAC_CONST(0.008438674802711) },
1936 { FRAC_CONST(0.030063024516947), FRAC_CONST(0.008530947010354) },
1937 { FRAC_CONST(0.030036710458054), FRAC_CONST(0.008623138921475) },
1938 { FRAC_CONST(0.030010113682202), FRAC_CONST(0.008715249668328) },
1939 { FRAC_CONST(0.029983234439732), FRAC_CONST(0.008807278383932) },
1940 { FRAC_CONST(0.029956072983640), FRAC_CONST(0.008899224202078) },
1941 { FRAC_CONST(0.029928629569580), FRAC_CONST(0.008991086257336) },
1942 { FRAC_CONST(0.029900904455860), FRAC_CONST(0.009082863685067) },
1943 { FRAC_CONST(0.029872897903441), FRAC_CONST(0.009174555621425) },
1944 { FRAC_CONST(0.029844610175929), FRAC_CONST(0.009266161203371) },
1945 { FRAC_CONST(0.029816041539579), FRAC_CONST(0.009357679568679) },
1946 { FRAC_CONST(0.029787192263292), FRAC_CONST(0.009449109855944) },
1947 { FRAC_CONST(0.029758062618606), FRAC_CONST(0.009540451204587) },
1948 { FRAC_CONST(0.029728652879702), FRAC_CONST(0.009631702754871) },
1949 { FRAC_CONST(0.029698963323395), FRAC_CONST(0.009722863647900) },
1950 { FRAC_CONST(0.029668994229134), FRAC_CONST(0.009813933025633) },
1951 { FRAC_CONST(0.029638745879000), FRAC_CONST(0.009904910030891) },
1952 { FRAC_CONST(0.029608218557702), FRAC_CONST(0.009995793807363) },
1953 { FRAC_CONST(0.029577412552575), FRAC_CONST(0.010086583499618) },
1954 { FRAC_CONST(0.029546328153577), FRAC_CONST(0.010177278253107) },
1955 { FRAC_CONST(0.029514965653285), FRAC_CONST(0.010267877214177) },
1956 { FRAC_CONST(0.029483325346896), FRAC_CONST(0.010358379530076) },
1957 { FRAC_CONST(0.029451407532220), FRAC_CONST(0.010448784348962) },
1958 { FRAC_CONST(0.029419212509679), FRAC_CONST(0.010539090819911) },
1959 { FRAC_CONST(0.029386740582307), FRAC_CONST(0.010629298092923) },
1960 { FRAC_CONST(0.029353992055740), FRAC_CONST(0.010719405318933) },
1961 { FRAC_CONST(0.029320967238220), FRAC_CONST(0.010809411649818) },
1962 { FRAC_CONST(0.029287666440590), FRAC_CONST(0.010899316238403) },
1963 { FRAC_CONST(0.029254089976290), FRAC_CONST(0.010989118238474) },
1964 { FRAC_CONST(0.029220238161353), FRAC_CONST(0.011078816804778) },
1965 { FRAC_CONST(0.029186111314406), FRAC_CONST(0.011168411093039) },
1966 { FRAC_CONST(0.029151709756664), FRAC_CONST(0.011257900259961) },
1967 { FRAC_CONST(0.029117033811927), FRAC_CONST(0.011347283463239) },
1968 { FRAC_CONST(0.029082083806579), FRAC_CONST(0.011436559861563) },
1969 { FRAC_CONST(0.029046860069582), FRAC_CONST(0.011525728614630) },
1970 { FRAC_CONST(0.029011362932476), FRAC_CONST(0.011614788883150) },
1971 { FRAC_CONST(0.028975592729373), FRAC_CONST(0.011703739828853) },
1972 { FRAC_CONST(0.028939549796957), FRAC_CONST(0.011792580614500) },
1973 { FRAC_CONST(0.028903234474475), FRAC_CONST(0.011881310403886) },
1974 { FRAC_CONST(0.028866647103744), FRAC_CONST(0.011969928361855) },
1975 { FRAC_CONST(0.028829788029135), FRAC_CONST(0.012058433654299) },
1976 { FRAC_CONST(0.028792657597583), FRAC_CONST(0.012146825448172) },
1977 { FRAC_CONST(0.028755256158571), FRAC_CONST(0.012235102911499) },
1978 { FRAC_CONST(0.028717584064137), FRAC_CONST(0.012323265213377) },
1979 { FRAC_CONST(0.028679641668864), FRAC_CONST(0.012411311523990) },
1980 { FRAC_CONST(0.028641429329882), FRAC_CONST(0.012499241014612) },
1981 { FRAC_CONST(0.028602947406859), FRAC_CONST(0.012587052857618) },
1982 { FRAC_CONST(0.028564196262001), FRAC_CONST(0.012674746226488) },
1983 { FRAC_CONST(0.028525176260050), FRAC_CONST(0.012762320295819) },
1984 { FRAC_CONST(0.028485887768276), FRAC_CONST(0.012849774241331) },
1985 { FRAC_CONST(0.028446331156478), FRAC_CONST(0.012937107239875) },
1986 { FRAC_CONST(0.028406506796976), FRAC_CONST(0.013024318469437) },
1987 { FRAC_CONST(0.028366415064615), FRAC_CONST(0.013111407109155) },
1988 { FRAC_CONST(0.028326056336751), FRAC_CONST(0.013198372339315) },
1989 { FRAC_CONST(0.028285430993258), FRAC_CONST(0.013285213341368) },
1990 { FRAC_CONST(0.028244539416515), FRAC_CONST(0.013371929297933) },
1991 { FRAC_CONST(0.028203381991411), FRAC_CONST(0.013458519392807) },
1992 { FRAC_CONST(0.028161959105334), FRAC_CONST(0.013544982810971) },
1993 { FRAC_CONST(0.028120271148172), FRAC_CONST(0.013631318738598) },
1994 { FRAC_CONST(0.028078318512309), FRAC_CONST(0.013717526363062) },
1995 { FRAC_CONST(0.028036101592619), FRAC_CONST(0.013803604872943) },
1996 { FRAC_CONST(0.027993620786463), FRAC_CONST(0.013889553458039) },
1997 { FRAC_CONST(0.027950876493687), FRAC_CONST(0.013975371309367) },
1998 { FRAC_CONST(0.027907869116616), FRAC_CONST(0.014061057619178) },
1999 { FRAC_CONST(0.027864599060052), FRAC_CONST(0.014146611580959) },
2000 { FRAC_CONST(0.027821066731270), FRAC_CONST(0.014232032389445) },
2001 { FRAC_CONST(0.027777272540012), FRAC_CONST(0.014317319240622) },
2002 { FRAC_CONST(0.027733216898487), FRAC_CONST(0.014402471331737) },
2003 { FRAC_CONST(0.027688900221361), FRAC_CONST(0.014487487861307) },
2004 { FRAC_CONST(0.027644322925762), FRAC_CONST(0.014572368029123) },
2005 { FRAC_CONST(0.027599485431266), FRAC_CONST(0.014657111036262) },
2006 { FRAC_CONST(0.027554388159903), FRAC_CONST(0.014741716085090) },
2007 { FRAC_CONST(0.027509031536144), FRAC_CONST(0.014826182379271) },
2008 { FRAC_CONST(0.027463415986904), FRAC_CONST(0.014910509123778) },
2009 { FRAC_CONST(0.027417541941533), FRAC_CONST(0.014994695524894) },
2010 { FRAC_CONST(0.027371409831816), FRAC_CONST(0.015078740790225) },
2011 { FRAC_CONST(0.027325020091965), FRAC_CONST(0.015162644128704) },
2012 { FRAC_CONST(0.027278373158618), FRAC_CONST(0.015246404750603) },
2013 { FRAC_CONST(0.027231469470833), FRAC_CONST(0.015330021867534) },
2014 { FRAC_CONST(0.027184309470088), FRAC_CONST(0.015413494692460) },
2015 { FRAC_CONST(0.027136893600268), FRAC_CONST(0.015496822439704) },
2016 { FRAC_CONST(0.027089222307671), FRAC_CONST(0.015580004324954) },
2017 { FRAC_CONST(0.027041296040997), FRAC_CONST(0.015663039565269) },
2018 { FRAC_CONST(0.026993115251345), FRAC_CONST(0.015745927379091) },
2019 { FRAC_CONST(0.026944680392213), FRAC_CONST(0.015828666986247) },
2020 { FRAC_CONST(0.026895991919487), FRAC_CONST(0.015911257607961) },
2021 { FRAC_CONST(0.026847050291442), FRAC_CONST(0.015993698466859) },
2022 { FRAC_CONST(0.026797855968734), FRAC_CONST(0.016075988786976) },
2023 { FRAC_CONST(0.026748409414401), FRAC_CONST(0.016158127793763) },
2024 { FRAC_CONST(0.026698711093851), FRAC_CONST(0.016240114714099) },
2025 { FRAC_CONST(0.026648761474864), FRAC_CONST(0.016321948776289) },
2026 { FRAC_CONST(0.026598561027585), FRAC_CONST(0.016403629210082) },
2027 { FRAC_CONST(0.026548110224519), FRAC_CONST(0.016485155246669) },
2028 { FRAC_CONST(0.026497409540530), FRAC_CONST(0.016566526118696) },
2029 { FRAC_CONST(0.026446459452830), FRAC_CONST(0.016647741060271) },
2030 { FRAC_CONST(0.026395260440982), FRAC_CONST(0.016728799306966) },
2031 { FRAC_CONST(0.026343812986890), FRAC_CONST(0.016809700095831) },
2032 { FRAC_CONST(0.026292117574797), FRAC_CONST(0.016890442665397) },
2033 { FRAC_CONST(0.026240174691280), FRAC_CONST(0.016971026255683) },
2034 { FRAC_CONST(0.026187984825246), FRAC_CONST(0.017051450108208) },
2035 { FRAC_CONST(0.026135548467924), FRAC_CONST(0.017131713465990) },
2036 { FRAC_CONST(0.026082866112867), FRAC_CONST(0.017211815573560) },
2037 { FRAC_CONST(0.026029938255941), FRAC_CONST(0.017291755676967) },
2038 { FRAC_CONST(0.025976765395322), FRAC_CONST(0.017371533023784) },
2039 { FRAC_CONST(0.025923348031494), FRAC_CONST(0.017451146863116) },
2040 { FRAC_CONST(0.025869686667242), FRAC_CONST(0.017530596445607) },
2041 { FRAC_CONST(0.025815781807646), FRAC_CONST(0.017609881023449) },
2042 { FRAC_CONST(0.025761633960080), FRAC_CONST(0.017688999850383) },
2043 { FRAC_CONST(0.025707243634204), FRAC_CONST(0.017767952181715) },
2044 { FRAC_CONST(0.025652611341960), FRAC_CONST(0.017846737274313) },
2045 { FRAC_CONST(0.025597737597568), FRAC_CONST(0.017925354386623) },
2046 { FRAC_CONST(0.025542622917522), FRAC_CONST(0.018003802778671) },
2047 { FRAC_CONST(0.025487267820581), FRAC_CONST(0.018082081712071) },
2048 { FRAC_CONST(0.025431672827768), FRAC_CONST(0.018160190450031) },
2049 { FRAC_CONST(0.025375838462365), FRAC_CONST(0.018238128257362) },
2050 { FRAC_CONST(0.025319765249906), FRAC_CONST(0.018315894400484) },
2051 { FRAC_CONST(0.025263453718173), FRAC_CONST(0.018393488147432) },
2052 { FRAC_CONST(0.025206904397193), FRAC_CONST(0.018470908767865) },
2053 { FRAC_CONST(0.025150117819228), FRAC_CONST(0.018548155533070) },
2054 { FRAC_CONST(0.025093094518776), FRAC_CONST(0.018625227715971) },
2055 { FRAC_CONST(0.025035835032562), FRAC_CONST(0.018702124591135) },
2056 { FRAC_CONST(0.024978339899534), FRAC_CONST(0.018778845434780) },
2057 { FRAC_CONST(0.024920609660858), FRAC_CONST(0.018855389524780) },
2058 { FRAC_CONST(0.024862644859912), FRAC_CONST(0.018931756140672) },
2059 { FRAC_CONST(0.024804446042284), FRAC_CONST(0.019007944563666) },
2060 { FRAC_CONST(0.024746013755764), FRAC_CONST(0.019083954076646) },
2061 { FRAC_CONST(0.024687348550337), FRAC_CONST(0.019159783964183) },
2062 { FRAC_CONST(0.024628450978184), FRAC_CONST(0.019235433512536) },
2063 { FRAC_CONST(0.024569321593670), FRAC_CONST(0.019310902009663) },
2064 { FRAC_CONST(0.024509960953345), FRAC_CONST(0.019386188745225) },
2065 { FRAC_CONST(0.024450369615932), FRAC_CONST(0.019461293010596) },
2066 { FRAC_CONST(0.024390548142329), FRAC_CONST(0.019536214098866) },
2067 { FRAC_CONST(0.024330497095598), FRAC_CONST(0.019610951304848) },
2068 { FRAC_CONST(0.024270217040961), FRAC_CONST(0.019685503925087) },
2069 { FRAC_CONST(0.024209708545799), FRAC_CONST(0.019759871257867) },
2070 { FRAC_CONST(0.024148972179639), FRAC_CONST(0.019834052603212) },
2071 { FRAC_CONST(0.024088008514157), FRAC_CONST(0.019908047262901) },
2072 { FRAC_CONST(0.024026818123164), FRAC_CONST(0.019981854540467) },
2073 { FRAC_CONST(0.023965401582609), FRAC_CONST(0.020055473741208) },
2074 { FRAC_CONST(0.023903759470567), FRAC_CONST(0.020128904172192) },
2075 { FRAC_CONST(0.023841892367236), FRAC_CONST(0.020202145142264) },
2076 { FRAC_CONST(0.023779800854935), FRAC_CONST(0.020275195962052) },
2077 { FRAC_CONST(0.023717485518092), FRAC_CONST(0.020348055943974) },
2078 { FRAC_CONST(0.023654946943242), FRAC_CONST(0.020420724402244) },
2079 { FRAC_CONST(0.023592185719023), FRAC_CONST(0.020493200652878) },
2080 { FRAC_CONST(0.023529202436167), FRAC_CONST(0.020565484013703) },
2081 { FRAC_CONST(0.023465997687496), FRAC_CONST(0.020637573804361) },
2082 { FRAC_CONST(0.023402572067918), FRAC_CONST(0.020709469346314) },
2083 { FRAC_CONST(0.023338926174419), FRAC_CONST(0.020781169962854) },
2084 { FRAC_CONST(0.023275060606058), FRAC_CONST(0.020852674979108) },
2085 { FRAC_CONST(0.023210975963963), FRAC_CONST(0.020923983722044) },
2086 { FRAC_CONST(0.023146672851322), FRAC_CONST(0.020995095520475) },
2087 { FRAC_CONST(0.023082151873380), FRAC_CONST(0.021066009705072) },
2088 { FRAC_CONST(0.023017413637435), FRAC_CONST(0.021136725608363) },
2089 { FRAC_CONST(0.022952458752826), FRAC_CONST(0.021207242564742) },
2090 { FRAC_CONST(0.022887287830934), FRAC_CONST(0.021277559910478) },
2091 { FRAC_CONST(0.022821901485173), FRAC_CONST(0.021347676983716) },
2092 { FRAC_CONST(0.022756300330983), FRAC_CONST(0.021417593124488) },
2093 { FRAC_CONST(0.022690484985827), FRAC_CONST(0.021487307674717) },
2094 { FRAC_CONST(0.022624456069185), FRAC_CONST(0.021556819978223) },
2095 { FRAC_CONST(0.022558214202547), FRAC_CONST(0.021626129380729) },
2096 { FRAC_CONST(0.022491760009405), FRAC_CONST(0.021695235229869) },
2097 { FRAC_CONST(0.022425094115252), FRAC_CONST(0.021764136875192) },
2098 { FRAC_CONST(0.022358217147572), FRAC_CONST(0.021832833668171) },
2099 { FRAC_CONST(0.022291129735838), FRAC_CONST(0.021901324962204) },
2100 { FRAC_CONST(0.022223832511501), FRAC_CONST(0.021969610112625) },
2101 { FRAC_CONST(0.022156326107988), FRAC_CONST(0.022037688476709) },
2102 { FRAC_CONST(0.022088611160696), FRAC_CONST(0.022105559413676) },
2103 { FRAC_CONST(0.022020688306983), FRAC_CONST(0.022173222284699) },
2104 { FRAC_CONST(0.021952558186166), FRAC_CONST(0.022240676452909) },
2105 { FRAC_CONST(0.021884221439510), FRAC_CONST(0.022307921283403) },
2106 { FRAC_CONST(0.021815678710228), FRAC_CONST(0.022374956143245) },
2107 { FRAC_CONST(0.021746930643469), FRAC_CONST(0.022441780401478) },
2108 { FRAC_CONST(0.021677977886316), FRAC_CONST(0.022508393429127) },
2109 { FRAC_CONST(0.021608821087780), FRAC_CONST(0.022574794599206) },
2110 { FRAC_CONST(0.021539460898790), FRAC_CONST(0.022640983286719) },
2111 { FRAC_CONST(0.021469897972190), FRAC_CONST(0.022706958868676) },
2112 { FRAC_CONST(0.021400132962735), FRAC_CONST(0.022772720724087) },
2113 { FRAC_CONST(0.021330166527077), FRAC_CONST(0.022838268233979) },
2114 { FRAC_CONST(0.021259999323769), FRAC_CONST(0.022903600781391) },
2115 { FRAC_CONST(0.021189632013250), FRAC_CONST(0.022968717751391) },
2116 { FRAC_CONST(0.021119065257845), FRAC_CONST(0.023033618531071) },
2117 { FRAC_CONST(0.021048299721754), FRAC_CONST(0.023098302509561) },
2118 { FRAC_CONST(0.020977336071050), FRAC_CONST(0.023162769078031) },
2119 { FRAC_CONST(0.020906174973670), FRAC_CONST(0.023227017629698) },
2120 { FRAC_CONST(0.020834817099409), FRAC_CONST(0.023291047559828) },
2121 { FRAC_CONST(0.020763263119915), FRAC_CONST(0.023354858265748) },
2122 { FRAC_CONST(0.020691513708680), FRAC_CONST(0.023418449146848) },
2123 { FRAC_CONST(0.020619569541038), FRAC_CONST(0.023481819604585) },
2124 { FRAC_CONST(0.020547431294155), FRAC_CONST(0.023544969042494) },
2125 { FRAC_CONST(0.020475099647023), FRAC_CONST(0.023607896866186) },
2126 { FRAC_CONST(0.020402575280455), FRAC_CONST(0.023670602483363) },
2127 { FRAC_CONST(0.020329858877078), FRAC_CONST(0.023733085303813) },
2128 { FRAC_CONST(0.020256951121327), FRAC_CONST(0.023795344739427) },
2129 { FRAC_CONST(0.020183852699437), FRAC_CONST(0.023857380204193) },
2130 { FRAC_CONST(0.020110564299439), FRAC_CONST(0.023919191114211) },
2131 { FRAC_CONST(0.020037086611150), FRAC_CONST(0.023980776887692) },
2132 { FRAC_CONST(0.019963420326171), FRAC_CONST(0.024042136944968) },
2133 { FRAC_CONST(0.019889566137877), FRAC_CONST(0.024103270708495) },
2134 { FRAC_CONST(0.019815524741412), FRAC_CONST(0.024164177602859) },
2135 { FRAC_CONST(0.019741296833681), FRAC_CONST(0.024224857054779) },
2136 { FRAC_CONST(0.019666883113346), FRAC_CONST(0.024285308493120) },
2137 { FRAC_CONST(0.019592284280817), FRAC_CONST(0.024345531348888) },
2138 { FRAC_CONST(0.019517501038246), FRAC_CONST(0.024405525055242) },
2139 { FRAC_CONST(0.019442534089523), FRAC_CONST(0.024465289047500) },
2140 { FRAC_CONST(0.019367384140264), FRAC_CONST(0.024524822763141) },
2141 { FRAC_CONST(0.019292051897809), FRAC_CONST(0.024584125641809) },
2142 { FRAC_CONST(0.019216538071215), FRAC_CONST(0.024643197125323) },
2143 { FRAC_CONST(0.019140843371246), FRAC_CONST(0.024702036657681) },
2144 { FRAC_CONST(0.019064968510369), FRAC_CONST(0.024760643685063) },
2145 { FRAC_CONST(0.018988914202748), FRAC_CONST(0.024819017655836) },
2146 { FRAC_CONST(0.018912681164234), FRAC_CONST(0.024877158020562) },
2147 { FRAC_CONST(0.018836270112363), FRAC_CONST(0.024935064232003) },
2148 { FRAC_CONST(0.018759681766343), FRAC_CONST(0.024992735745123) },
2149 { FRAC_CONST(0.018682916847054), FRAC_CONST(0.025050172017095) },
2150 { FRAC_CONST(0.018605976077037), FRAC_CONST(0.025107372507308) },
2151 { FRAC_CONST(0.018528860180486), FRAC_CONST(0.025164336677369) },
2152 { FRAC_CONST(0.018451569883247), FRAC_CONST(0.025221063991110) },
2153 { FRAC_CONST(0.018374105912805), FRAC_CONST(0.025277553914591) },
2154 { FRAC_CONST(0.018296468998280), FRAC_CONST(0.025333805916107) },
2155 { FRAC_CONST(0.018218659870421), FRAC_CONST(0.025389819466194) },
2156 { FRAC_CONST(0.018140679261596), FRAC_CONST(0.025445594037630) },
2157 { FRAC_CONST(0.018062527905790), FRAC_CONST(0.025501129105445) },
2158 { FRAC_CONST(0.017984206538592), FRAC_CONST(0.025556424146920) },
2159 { FRAC_CONST(0.017905715897192), FRAC_CONST(0.025611478641598) },
2160 { FRAC_CONST(0.017827056720375), FRAC_CONST(0.025666292071285) },
2161 { FRAC_CONST(0.017748229748511), FRAC_CONST(0.025720863920056) },
2162 { FRAC_CONST(0.017669235723550), FRAC_CONST(0.025775193674260) },
2163 { FRAC_CONST(0.017590075389012), FRAC_CONST(0.025829280822525) },
2164 { FRAC_CONST(0.017510749489986), FRAC_CONST(0.025883124855762) },
2165 { FRAC_CONST(0.017431258773116), FRAC_CONST(0.025936725267170) },
2166 { FRAC_CONST(0.017351603986600), FRAC_CONST(0.025990081552242) },
2167 { FRAC_CONST(0.017271785880180), FRAC_CONST(0.026043193208768) },
2168 { FRAC_CONST(0.017191805205132), FRAC_CONST(0.026096059736841) },
2169 { FRAC_CONST(0.017111662714267), FRAC_CONST(0.026148680638861) },
2170 { FRAC_CONST(0.017031359161915), FRAC_CONST(0.026201055419541) },
2171 { FRAC_CONST(0.016950895303924), FRAC_CONST(0.026253183585908) },
2172 { FRAC_CONST(0.016870271897651), FRAC_CONST(0.026305064647313) },
2173 { FRAC_CONST(0.016789489701954), FRAC_CONST(0.026356698115431) },
2174 { FRAC_CONST(0.016708549477186), FRAC_CONST(0.026408083504269) },
2175 { FRAC_CONST(0.016627451985187), FRAC_CONST(0.026459220330167) },
2176 { FRAC_CONST(0.016546197989277), FRAC_CONST(0.026510108111806) },
2177 { FRAC_CONST(0.016464788254250), FRAC_CONST(0.026560746370212) },
2178 { FRAC_CONST(0.016383223546365), FRAC_CONST(0.026611134628757) },
2179 { FRAC_CONST(0.016301504633341), FRAC_CONST(0.026661272413168) },
2180 { FRAC_CONST(0.016219632284346), FRAC_CONST(0.026711159251530) },
2181 { FRAC_CONST(0.016137607269996), FRAC_CONST(0.026760794674288) },
2182 { FRAC_CONST(0.016055430362340), FRAC_CONST(0.026810178214254) },
2183 { FRAC_CONST(0.015973102334858), FRAC_CONST(0.026859309406613) },
2184 { FRAC_CONST(0.015890623962454), FRAC_CONST(0.026908187788922) },
2185 { FRAC_CONST(0.015807996021446), FRAC_CONST(0.026956812901119) },
2186 { FRAC_CONST(0.015725219289558), FRAC_CONST(0.027005184285527) },
2187 { FRAC_CONST(0.015642294545918), FRAC_CONST(0.027053301486856) },
2188 { FRAC_CONST(0.015559222571044), FRAC_CONST(0.027101164052208) },
2189 { FRAC_CONST(0.015476004146842), FRAC_CONST(0.027148771531083) },
2190 { FRAC_CONST(0.015392640056594), FRAC_CONST(0.027196123475380) },
2191 { FRAC_CONST(0.015309131084956), FRAC_CONST(0.027243219439406) },
2192 { FRAC_CONST(0.015225478017946), FRAC_CONST(0.027290058979875) },
2193 { FRAC_CONST(0.015141681642938), FRAC_CONST(0.027336641655915) },
2194 { FRAC_CONST(0.015057742748656), FRAC_CONST(0.027382967029073) },
2195 { FRAC_CONST(0.014973662125164), FRAC_CONST(0.027429034663317) },
2196 { FRAC_CONST(0.014889440563862), FRAC_CONST(0.027474844125040) },
2197 { FRAC_CONST(0.014805078857474), FRAC_CONST(0.027520394983066) },
2198 { FRAC_CONST(0.014720577800046), FRAC_CONST(0.027565686808654) },
2199 { FRAC_CONST(0.014635938186934), FRAC_CONST(0.027610719175499) },
2200 { FRAC_CONST(0.014551160814797), FRAC_CONST(0.027655491659740) },
2201 { FRAC_CONST(0.014466246481592), FRAC_CONST(0.027700003839960) },
2202 { FRAC_CONST(0.014381195986567), FRAC_CONST(0.027744255297195) },
2203 { FRAC_CONST(0.014296010130247), FRAC_CONST(0.027788245614933) },
2204 { FRAC_CONST(0.014210689714436), FRAC_CONST(0.027831974379120) },
2205 { FRAC_CONST(0.014125235542201), FRAC_CONST(0.027875441178165) },
2206 { FRAC_CONST(0.014039648417870), FRAC_CONST(0.027918645602941) },
2207 { FRAC_CONST(0.013953929147020), FRAC_CONST(0.027961587246792) },
2208 { FRAC_CONST(0.013868078536476), FRAC_CONST(0.028004265705534) },
2209 { FRAC_CONST(0.013782097394294), FRAC_CONST(0.028046680577462) },
2210 { FRAC_CONST(0.013695986529763), FRAC_CONST(0.028088831463351) },
2211 { FRAC_CONST(0.013609746753390), FRAC_CONST(0.028130717966461) },
2212 { FRAC_CONST(0.013523378876898), FRAC_CONST(0.028172339692540) },
2213 { FRAC_CONST(0.013436883713214), FRAC_CONST(0.028213696249828) },
2214 { FRAC_CONST(0.013350262076462), FRAC_CONST(0.028254787249062) },
2215 { FRAC_CONST(0.013263514781960), FRAC_CONST(0.028295612303478) },
2216 { FRAC_CONST(0.013176642646205), FRAC_CONST(0.028336171028814) },
2217 { FRAC_CONST(0.013089646486871), FRAC_CONST(0.028376463043317) },
2218 { FRAC_CONST(0.013002527122799), FRAC_CONST(0.028416487967743) },
2219 { FRAC_CONST(0.012915285373990), FRAC_CONST(0.028456245425361) },
2220 { FRAC_CONST(0.012827922061597), FRAC_CONST(0.028495735041960) },
2221 { FRAC_CONST(0.012740438007915), FRAC_CONST(0.028534956445849) },
2222 { FRAC_CONST(0.012652834036379), FRAC_CONST(0.028573909267859) },
2223 { FRAC_CONST(0.012565110971550), FRAC_CONST(0.028612593141354) },
2224 { FRAC_CONST(0.012477269639111), FRAC_CONST(0.028651007702224) },
2225 { FRAC_CONST(0.012389310865858), FRAC_CONST(0.028689152588899) },
2226 { FRAC_CONST(0.012301235479693), FRAC_CONST(0.028727027442343) },
2227 { FRAC_CONST(0.012213044309615), FRAC_CONST(0.028764631906065) },
2228 { FRAC_CONST(0.012124738185712), FRAC_CONST(0.028801965626115) },
2229 { FRAC_CONST(0.012036317939156), FRAC_CONST(0.028839028251097) },
2230 { FRAC_CONST(0.011947784402191), FRAC_CONST(0.028875819432161) },
2231 { FRAC_CONST(0.011859138408130), FRAC_CONST(0.028912338823015) },
2232 { FRAC_CONST(0.011770380791341), FRAC_CONST(0.028948586079925) },
2233 { FRAC_CONST(0.011681512387245), FRAC_CONST(0.028984560861718) },
2234 { FRAC_CONST(0.011592534032306), FRAC_CONST(0.029020262829785) },
2235 { FRAC_CONST(0.011503446564022), FRAC_CONST(0.029055691648087) },
2236 { FRAC_CONST(0.011414250820918), FRAC_CONST(0.029090846983152) },
2237 { FRAC_CONST(0.011324947642537), FRAC_CONST(0.029125728504087) },
2238 { FRAC_CONST(0.011235537869437), FRAC_CONST(0.029160335882573) },
2239 { FRAC_CONST(0.011146022343175), FRAC_CONST(0.029194668792871) },
2240 { FRAC_CONST(0.011056401906305), FRAC_CONST(0.029228726911828) },
2241 { FRAC_CONST(0.010966677402371), FRAC_CONST(0.029262509918876) },
2242 { FRAC_CONST(0.010876849675891), FRAC_CONST(0.029296017496036) },
2243 { FRAC_CONST(0.010786919572361), FRAC_CONST(0.029329249327922) },
2244 { FRAC_CONST(0.010696887938235), FRAC_CONST(0.029362205101743) },
2245 { FRAC_CONST(0.010606755620926), FRAC_CONST(0.029394884507308) },
2246 { FRAC_CONST(0.010516523468793), FRAC_CONST(0.029427287237024) },
2247 { FRAC_CONST(0.010426192331137), FRAC_CONST(0.029459412985906) },
2248 { FRAC_CONST(0.010335763058187), FRAC_CONST(0.029491261451573) },
2249 { FRAC_CONST(0.010245236501099), FRAC_CONST(0.029522832334255) },
2250 { FRAC_CONST(0.010154613511943), FRAC_CONST(0.029554125336796) },
2251 { FRAC_CONST(0.010063894943698), FRAC_CONST(0.029585140164654) },
2252 { FRAC_CONST(0.009973081650240), FRAC_CONST(0.029615876525905) },
2253 { FRAC_CONST(0.009882174486340), FRAC_CONST(0.029646334131247) },
2254 { FRAC_CONST(0.009791174307650), FRAC_CONST(0.029676512694001) },
2255 { FRAC_CONST(0.009700081970699), FRAC_CONST(0.029706411930116) },
2256 { FRAC_CONST(0.009608898332881), FRAC_CONST(0.029736031558168) },
2257 { FRAC_CONST(0.009517624252453), FRAC_CONST(0.029765371299366) },
2258 { FRAC_CONST(0.009426260588521), FRAC_CONST(0.029794430877553) },
2259 { FRAC_CONST(0.009334808201034), FRAC_CONST(0.029823210019210) },
2260 { FRAC_CONST(0.009243267950778), FRAC_CONST(0.029851708453456) },
2261 { FRAC_CONST(0.009151640699363), FRAC_CONST(0.029879925912053) },
2262 { FRAC_CONST(0.009059927309220), FRAC_CONST(0.029907862129408) },
2263 { FRAC_CONST(0.008968128643591), FRAC_CONST(0.029935516842573) },
2264 { FRAC_CONST(0.008876245566520), FRAC_CONST(0.029962889791254) },
2265 { FRAC_CONST(0.008784278942845), FRAC_CONST(0.029989980717805) },
2266 { FRAC_CONST(0.008692229638191), FRAC_CONST(0.030016789367235) },
2267 { FRAC_CONST(0.008600098518961), FRAC_CONST(0.030043315487212) },
2268 { FRAC_CONST(0.008507886452329), FRAC_CONST(0.030069558828062) },
2269 { FRAC_CONST(0.008415594306230), FRAC_CONST(0.030095519142772) },
2270 { FRAC_CONST(0.008323222949351), FRAC_CONST(0.030121196186994) },
2271 { FRAC_CONST(0.008230773251129), FRAC_CONST(0.030146589719046) },
2272 { FRAC_CONST(0.008138246081733), FRAC_CONST(0.030171699499915) },
2273 { FRAC_CONST(0.008045642312067), FRAC_CONST(0.030196525293257) },
2274 { FRAC_CONST(0.007952962813750), FRAC_CONST(0.030221066865402) },
2275 { FRAC_CONST(0.007860208459119), FRAC_CONST(0.030245323985357) },
2276 { FRAC_CONST(0.007767380121212), FRAC_CONST(0.030269296424803) },
2277 { FRAC_CONST(0.007674478673766), FRAC_CONST(0.030292983958103) },
2278 { FRAC_CONST(0.007581504991203), FRAC_CONST(0.030316386362302) },
2279 { FRAC_CONST(0.007488459948628), FRAC_CONST(0.030339503417126) },
2280 { FRAC_CONST(0.007395344421816), FRAC_CONST(0.030362334904989) },
2281 { FRAC_CONST(0.007302159287206), FRAC_CONST(0.030384880610993) },
2282 { FRAC_CONST(0.007208905421891), FRAC_CONST(0.030407140322928) },
2283 { FRAC_CONST(0.007115583703613), FRAC_CONST(0.030429113831278) },
2284 { FRAC_CONST(0.007022195010752), FRAC_CONST(0.030450800929220) },
2285 { FRAC_CONST(0.006928740222316), FRAC_CONST(0.030472201412626) },
2286 { FRAC_CONST(0.006835220217939), FRAC_CONST(0.030493315080068) },
2287 { FRAC_CONST(0.006741635877866), FRAC_CONST(0.030514141732814) },
2288 { FRAC_CONST(0.006647988082948), FRAC_CONST(0.030534681174838) },
2289 { FRAC_CONST(0.006554277714635), FRAC_CONST(0.030554933212813) },
2290 { FRAC_CONST(0.006460505654964), FRAC_CONST(0.030574897656119) },
2291 { FRAC_CONST(0.006366672786553), FRAC_CONST(0.030594574316845) },
2292 { FRAC_CONST(0.006272779992593), FRAC_CONST(0.030613963009786) },
2293 { FRAC_CONST(0.006178828156839), FRAC_CONST(0.030633063552447) },
2294 { FRAC_CONST(0.006084818163601), FRAC_CONST(0.030651875765048) },
2295 { FRAC_CONST(0.005990750897737), FRAC_CONST(0.030670399470520) },
2296 { FRAC_CONST(0.005896627244644), FRAC_CONST(0.030688634494512) },
2297 { FRAC_CONST(0.005802448090250), FRAC_CONST(0.030706580665388) },
2298 { FRAC_CONST(0.005708214321004), FRAC_CONST(0.030724237814232) },
2299 { FRAC_CONST(0.005613926823871), FRAC_CONST(0.030741605774849) },
2300 { FRAC_CONST(0.005519586486321), FRAC_CONST(0.030758684383764) },
2301 { FRAC_CONST(0.005425194196321), FRAC_CONST(0.030775473480228) },
2302 { FRAC_CONST(0.005330750842327), FRAC_CONST(0.030791972906214) },
2303 { FRAC_CONST(0.005236257313276), FRAC_CONST(0.030808182506425) },
2304 { FRAC_CONST(0.005141714498576), FRAC_CONST(0.030824102128288) },
2305 { FRAC_CONST(0.005047123288102), FRAC_CONST(0.030839731621963) },
2306 { FRAC_CONST(0.004952484572181), FRAC_CONST(0.030855070840339) },
2307 { FRAC_CONST(0.004857799241589), FRAC_CONST(0.030870119639036) },
2308 { FRAC_CONST(0.004763068187541), FRAC_CONST(0.030884877876411) },
2309 { FRAC_CONST(0.004668292301681), FRAC_CONST(0.030899345413553) },
2310 { FRAC_CONST(0.004573472476075), FRAC_CONST(0.030913522114288) },
2311 { FRAC_CONST(0.004478609603205), FRAC_CONST(0.030927407845180) },
2312 { FRAC_CONST(0.004383704575956), FRAC_CONST(0.030941002475530) },
2313 { FRAC_CONST(0.004288758287610), FRAC_CONST(0.030954305877381) },
2314 { FRAC_CONST(0.004193771631837), FRAC_CONST(0.030967317925516) },
2315 { FRAC_CONST(0.004098745502689), FRAC_CONST(0.030980038497461) },
2316 { FRAC_CONST(0.004003680794587), FRAC_CONST(0.030992467473486) },
2317 { FRAC_CONST(0.003908578402316), FRAC_CONST(0.031004604736602) },
2318 { FRAC_CONST(0.003813439221017), FRAC_CONST(0.031016450172571) },
2319 { FRAC_CONST(0.003718264146176), FRAC_CONST(0.031028003669899) },
2320 { FRAC_CONST(0.003623054073616), FRAC_CONST(0.031039265119839) },
2321 { FRAC_CONST(0.003527809899492), FRAC_CONST(0.031050234416394) },
2322 { FRAC_CONST(0.003432532520278), FRAC_CONST(0.031060911456318) },
2323 { FRAC_CONST(0.003337222832760), FRAC_CONST(0.031071296139114) },
2324 { FRAC_CONST(0.003241881734029), FRAC_CONST(0.031081388367037) },
2325 { FRAC_CONST(0.003146510121474), FRAC_CONST(0.031091188045095) },
2326 { FRAC_CONST(0.003051108892766), FRAC_CONST(0.031100695081051) },
2327 { FRAC_CONST(0.002955678945860), FRAC_CONST(0.031109909385419) },
2328 { FRAC_CONST(0.002860221178978), FRAC_CONST(0.031118830871473) },
2329 { FRAC_CONST(0.002764736490604), FRAC_CONST(0.031127459455239) },
2330 { FRAC_CONST(0.002669225779478), FRAC_CONST(0.031135795055501) },
2331 { FRAC_CONST(0.002573689944583), FRAC_CONST(0.031143837593803) },
2332 { FRAC_CONST(0.002478129885137), FRAC_CONST(0.031151586994444) },
2333 { FRAC_CONST(0.002382546500589), FRAC_CONST(0.031159043184484) },
2334 { FRAC_CONST(0.002286940690606), FRAC_CONST(0.031166206093743) },
2335 { FRAC_CONST(0.002191313355067), FRAC_CONST(0.031173075654800) },
2336 { FRAC_CONST(0.002095665394051), FRAC_CONST(0.031179651802998) },
2337 { FRAC_CONST(0.001999997707835), FRAC_CONST(0.031185934476438) },
2338 { FRAC_CONST(0.001904311196878), FRAC_CONST(0.031191923615985) },
2339 { FRAC_CONST(0.001808606761820), FRAC_CONST(0.031197619165268) },
2340 { FRAC_CONST(0.001712885303465), FRAC_CONST(0.031203021070678) },
2341 { FRAC_CONST(0.001617147722782), FRAC_CONST(0.031208129281370) },
2342 { FRAC_CONST(0.001521394920889), FRAC_CONST(0.031212943749264) },
2343 { FRAC_CONST(0.001425627799047), FRAC_CONST(0.031217464429043) },
2344 { FRAC_CONST(0.001329847258653), FRAC_CONST(0.031221691278159) },
2345 { FRAC_CONST(0.001234054201231), FRAC_CONST(0.031225624256825) },
2346 { FRAC_CONST(0.001138249528420), FRAC_CONST(0.031229263328024) },
2347 { FRAC_CONST(0.001042434141971), FRAC_CONST(0.031232608457502) },
2348 { FRAC_CONST(0.000946608943736), FRAC_CONST(0.031235659613775) },
2349 { FRAC_CONST(0.000850774835656), FRAC_CONST(0.031238416768124) },
2350 { FRAC_CONST(0.000754932719759), FRAC_CONST(0.031240879894597) },
2351 { FRAC_CONST(0.000659083498149), FRAC_CONST(0.031243048970010) },
2352 { FRAC_CONST(0.000563228072993), FRAC_CONST(0.031244923973948) },
2353 { FRAC_CONST(0.000467367346520), FRAC_CONST(0.031246504888762) },
2354 { FRAC_CONST(0.000371502221008), FRAC_CONST(0.031247791699571) },
2355 { FRAC_CONST(0.000275633598775), FRAC_CONST(0.031248784394264) },
2356 { FRAC_CONST(0.000179762382174), FRAC_CONST(0.031249482963498) },
2357 { FRAC_CONST(0.000083889473581), FRAC_CONST(0.031249887400697) }
2358};
2359
2360/* 64 (N/4) complex twiddle factors */
2361ALIGN static const complex_t mdct_tab_256[] =
2362{
2363 { FRAC_CONST(0.088387931675923), FRAC_CONST(0.000271171628935) },
2364 { FRAC_CONST(0.088354655998507), FRAC_CONST(0.002440238387037) },
2365 { FRAC_CONST(0.088268158780110), FRAC_CONST(0.004607835236780) },
2366 { FRAC_CONST(0.088128492123423), FRAC_CONST(0.006772656498875) },
2367 { FRAC_CONST(0.087935740158418), FRAC_CONST(0.008933398165942) },
2368 { FRAC_CONST(0.087690018991670), FRAC_CONST(0.011088758687994) },
2369 { FRAC_CONST(0.087391476636423), FRAC_CONST(0.013237439756448) },
2370 { FRAC_CONST(0.087040292923427), FRAC_CONST(0.015378147086172) },
2371 { FRAC_CONST(0.086636679392621), FRAC_CONST(0.017509591195118) },
2372 { FRAC_CONST(0.086180879165703), FRAC_CONST(0.019630488181053) },
2373 { FRAC_CONST(0.085673166799686), FRAC_CONST(0.021739560494940) },
2374 { FRAC_CONST(0.085113848121515), FRAC_CONST(0.023835537710479) },
2375 { FRAC_CONST(0.084503260043847), FRAC_CONST(0.025917157289369) },
2376 { FRAC_CONST(0.083841770362110), FRAC_CONST(0.027983165341813) },
2377 { FRAC_CONST(0.083129777532952), FRAC_CONST(0.030032317381813) },
2378 { FRAC_CONST(0.082367710434230), FRAC_CONST(0.032063379076803) },
2379 { FRAC_CONST(0.081556028106671), FRAC_CONST(0.034075126991164) },
2380 { FRAC_CONST(0.080695219477356), FRAC_CONST(0.036066349323177) },
2381 { FRAC_CONST(0.079785803065216), FRAC_CONST(0.038035846634965) },
2382 { FRAC_CONST(0.078828326668693), FRAC_CONST(0.039982432574992) },
2383 { FRAC_CONST(0.077823367035766), FRAC_CONST(0.041904934592675) },
2384 { FRAC_CONST(0.076771529516540), FRAC_CONST(0.043802194644686) },
2385 { FRAC_CONST(0.075673447698606), FRAC_CONST(0.045673069892513) },
2386 { FRAC_CONST(0.074529783025390), FRAC_CONST(0.047516433390863) },
2387 { FRAC_CONST(0.073341224397728), FRAC_CONST(0.049331174766491) },
2388 { FRAC_CONST(0.072108487758894), FRAC_CONST(0.051116200887052) },
2389 { FRAC_CONST(0.070832315663343), FRAC_CONST(0.052870436519557) },
2390 { FRAC_CONST(0.069513476829429), FRAC_CONST(0.054592824978055) },
2391 { FRAC_CONST(0.068152765676348), FRAC_CONST(0.056282328760143) },
2392 { FRAC_CONST(0.066751001845620), FRAC_CONST(0.057937930171918) },
2393 { FRAC_CONST(0.065309029707361), FRAC_CONST(0.059558631940996) },
2394 { FRAC_CONST(0.063827717851668), FRAC_CONST(0.061143457817234) },
2395 { FRAC_CONST(0.062307958565413), FRAC_CONST(0.062691453160784) },
2396 { FRAC_CONST(0.060750667294763), FRAC_CONST(0.064201685517134) },
2397 { FRAC_CONST(0.059156782093749), FRAC_CONST(0.065673245178784) },
2398 { FRAC_CONST(0.057527263059216), FRAC_CONST(0.067105245733220) },
2399 { FRAC_CONST(0.055863091752499), FRAC_CONST(0.068496824596852) },
2400 { FRAC_CONST(0.054165270608165), FRAC_CONST(0.069847143534609) },
2401 { FRAC_CONST(0.052434822330188), FRAC_CONST(0.071155389164853) },
2402 { FRAC_CONST(0.050672789275903), FRAC_CONST(0.072420773449336) },
2403 { FRAC_CONST(0.048880232828135), FRAC_CONST(0.073642534167879) },
2404 { FRAC_CONST(0.047058232755862), FRAC_CONST(0.074819935377512) },
2405 { FRAC_CONST(0.045207886563797), FRAC_CONST(0.075952267855771) },
2406 { FRAC_CONST(0.043330308831298), FRAC_CONST(0.077038849527912) },
2407 { FRAC_CONST(0.041426630540984), FRAC_CONST(0.078079025877766) },
2408 { FRAC_CONST(0.039497998397473), FRAC_CONST(0.079072170341994) },
2409 { FRAC_CONST(0.037545574136653), FRAC_CONST(0.080017684687506) },
2410 { FRAC_CONST(0.035570533825892), FRAC_CONST(0.080914999371817) },
2411 { FRAC_CONST(0.033574067155622), FRAC_CONST(0.081763573886112) },
2412 { FRAC_CONST(0.031557376722714), FRAC_CONST(0.082562897080836) },
2413 { FRAC_CONST(0.029521677306074), FRAC_CONST(0.083312487473584) },
2414 { FRAC_CONST(0.027468195134911), FRAC_CONST(0.084011893539132) },
2415 { FRAC_CONST(0.025398167150101), FRAC_CONST(0.084660693981419) },
2416 { FRAC_CONST(0.023312840259098), FRAC_CONST(0.085258497987320) },
2417 { FRAC_CONST(0.021213470584847), FRAC_CONST(0.085804945462053) },
2418 { FRAC_CONST(0.019101322709138), FRAC_CONST(0.086299707246093) },
2419 { FRAC_CONST(0.016977668910873), FRAC_CONST(0.086742485313442) },
2420 { FRAC_CONST(0.014843788399692), FRAC_CONST(0.087133012951149) },
2421 { FRAC_CONST(0.012700966545425), FRAC_CONST(0.087471054919968) },
2422 { FRAC_CONST(0.010550494103830), FRAC_CONST(0.087756407596056) },
2423 { FRAC_CONST(0.008393666439096), FRAC_CONST(0.087988899093631) },
2424 { FRAC_CONST(0.006231782743558), FRAC_CONST(0.088168389368510) },
2425 { FRAC_CONST(0.004066145255116), FRAC_CONST(0.088294770302461) },
2426 { FRAC_CONST(0.001898058472816), FRAC_CONST(0.088367965768336) }
2427};
2428
2429#ifdef LD_DEC
2430/* 128 (N/4) complex twiddle factors */
2431ALIGN static const complex_t mdct_tab_1024[] =
2432{
2433 { FRAC_CONST(0.044194160825012), FRAC_CONST(0.000033896503468) },
2434 { FRAC_CONST(0.044193120897389), FRAC_CONST(0.000305066138364) },
2435 { FRAC_CONST(0.044190417123742), FRAC_CONST(0.000576224287693) },
2436 { FRAC_CONST(0.044186049605866), FRAC_CONST(0.000847360742503) },
2437 { FRAC_CONST(0.044180018508197), FRAC_CONST(0.001118465294660) },
2438 { FRAC_CONST(0.044172324057802), FRAC_CONST(0.001389527737231) },
2439 { FRAC_CONST(0.044162966544372), FRAC_CONST(0.001660537864867) },
2440 { FRAC_CONST(0.044151946320213), FRAC_CONST(0.001931485474192) },
2441 { FRAC_CONST(0.044139263800230), FRAC_CONST(0.002202360364180) },
2442 { FRAC_CONST(0.044124919461912), FRAC_CONST(0.002473152336546) },
2443 { FRAC_CONST(0.044108913845316), FRAC_CONST(0.002743851196123) },
2444 { FRAC_CONST(0.044091247553044), FRAC_CONST(0.003014446751254) },
2445 { FRAC_CONST(0.044071921250223), FRAC_CONST(0.003284928814169) },
2446 { FRAC_CONST(0.044050935664476), FRAC_CONST(0.003555287201370) },
2447 { FRAC_CONST(0.044028291585898), FRAC_CONST(0.003825511734018) },
2448 { FRAC_CONST(0.044003989867028), FRAC_CONST(0.004095592238311) },
2449 { FRAC_CONST(0.043978031422810), FRAC_CONST(0.004365518545871) },
2450 { FRAC_CONST(0.043950417230565), FRAC_CONST(0.004635280494126) },
2451 { FRAC_CONST(0.043921148329953), FRAC_CONST(0.004904867926689) },
2452 { FRAC_CONST(0.043890225822930), FRAC_CONST(0.005174270693748) },
2453 { FRAC_CONST(0.043857650873712), FRAC_CONST(0.005443478652439) },
2454 { FRAC_CONST(0.043823424708727), FRAC_CONST(0.005712481667236) },
2455 { FRAC_CONST(0.043787548616571), FRAC_CONST(0.005981269610326) },
2456 { FRAC_CONST(0.043750023947958), FRAC_CONST(0.006249832361997) },
2457 { FRAC_CONST(0.043710852115672), FRAC_CONST(0.006518159811011) },
2458 { FRAC_CONST(0.043670034594508), FRAC_CONST(0.006786241854993) },
2459 { FRAC_CONST(0.043627572921225), FRAC_CONST(0.007054068400804) },
2460 { FRAC_CONST(0.043583468694479), FRAC_CONST(0.007321629364927) },
2461 { FRAC_CONST(0.043537723574771), FRAC_CONST(0.007588914673843) },
2462 { FRAC_CONST(0.043490339284377), FRAC_CONST(0.007855914264410) },
2463 { FRAC_CONST(0.043441317607290), FRAC_CONST(0.008122618084246) },
2464 { FRAC_CONST(0.043390660389149), FRAC_CONST(0.008389016092101) },
2465 { FRAC_CONST(0.043338369537168), FRAC_CONST(0.008655098258243) },
2466 { FRAC_CONST(0.043284447020070), FRAC_CONST(0.008920854564826) },
2467 { FRAC_CONST(0.043228894868005), FRAC_CONST(0.009186275006278) },
2468 { FRAC_CONST(0.043171715172482), FRAC_CONST(0.009451349589667) },
2469 { FRAC_CONST(0.043112910086283), FRAC_CONST(0.009716068335087) },
2470 { FRAC_CONST(0.043052481823387), FRAC_CONST(0.009980421276025) },
2471 { FRAC_CONST(0.042990432658884), FRAC_CONST(0.010244398459743) },
2472 { FRAC_CONST(0.042926764928889), FRAC_CONST(0.010507989947649) },
2473 { FRAC_CONST(0.042861481030457), FRAC_CONST(0.010771185815673) },
2474 { FRAC_CONST(0.042794583421490), FRAC_CONST(0.011033976154639) },
2475 { FRAC_CONST(0.042726074620644), FRAC_CONST(0.011296351070639) },
2476 { FRAC_CONST(0.042655957207238), FRAC_CONST(0.011558300685406) },
2477 { FRAC_CONST(0.042584233821153), FRAC_CONST(0.011819815136685) },
2478 { FRAC_CONST(0.042510907162732), FRAC_CONST(0.012080884578604) },
2479 { FRAC_CONST(0.042435979992684), FRAC_CONST(0.012341499182048) },
2480 { FRAC_CONST(0.042359455131975), FRAC_CONST(0.012601649135022) },
2481 { FRAC_CONST(0.042281335461721), FRAC_CONST(0.012861324643029) },
2482 { FRAC_CONST(0.042201623923085), FRAC_CONST(0.013120515929433) },
2483 { FRAC_CONST(0.042120323517160), FRAC_CONST(0.013379213235827) },
2484 { FRAC_CONST(0.042037437304862), FRAC_CONST(0.013637406822406) },
2485 { FRAC_CONST(0.041952968406809), FRAC_CONST(0.013895086968325) },
2486 { FRAC_CONST(0.041866920003207), FRAC_CONST(0.014152243972073) },
2487 { FRAC_CONST(0.041779295333730), FRAC_CONST(0.014408868151835) },
2488 { FRAC_CONST(0.041690097697398), FRAC_CONST(0.014664949845855) },
2489 { FRAC_CONST(0.041599330452450), FRAC_CONST(0.014920479412801) },
2490 { FRAC_CONST(0.041506997016224), FRAC_CONST(0.015175447232131) },
2491 { FRAC_CONST(0.041413100865019), FRAC_CONST(0.015429843704450) },
2492 { FRAC_CONST(0.041317645533974), FRAC_CONST(0.015683659251874) },
2493 { FRAC_CONST(0.041220634616927), FRAC_CONST(0.015936884318392) },
2494 { FRAC_CONST(0.041122071766285), FRAC_CONST(0.016189509370223) },
2495 { FRAC_CONST(0.041021960692883), FRAC_CONST(0.016441524896177) },
2496 { FRAC_CONST(0.040920305165846), FRAC_CONST(0.016692921408010) },
2497 { FRAC_CONST(0.040817109012449), FRAC_CONST(0.016943689440788) },
2498 { FRAC_CONST(0.040712376117967), FRAC_CONST(0.017193819553235) },
2499 { FRAC_CONST(0.040606110425535), FRAC_CONST(0.017443302328094) },
2500 { FRAC_CONST(0.040498315935996), FRAC_CONST(0.017692128372479) },
2501 { FRAC_CONST(0.040388996707752), FRAC_CONST(0.017940288318230) },
2502 { FRAC_CONST(0.040278156856609), FRAC_CONST(0.018187772822267) },
2503 { FRAC_CONST(0.040165800555627), FRAC_CONST(0.018434572566936) },
2504 { FRAC_CONST(0.040051932034955), FRAC_CONST(0.018680678260367) },
2505 { FRAC_CONST(0.039936555581679), FRAC_CONST(0.018926080636820) },
2506 { FRAC_CONST(0.039819675539659), FRAC_CONST(0.019170770457035) },
2507 { FRAC_CONST(0.039701296309360), FRAC_CONST(0.019414738508577) },
2508 { FRAC_CONST(0.039581422347694), FRAC_CONST(0.019657975606187) },
2509 { FRAC_CONST(0.039460058167849), FRAC_CONST(0.019900472592126) },
2510 { FRAC_CONST(0.039337208339116), FRAC_CONST(0.020142220336521) },
2511 { FRAC_CONST(0.039212877486723), FRAC_CONST(0.020383209737704) },
2512 { FRAC_CONST(0.039087070291656), FRAC_CONST(0.020623431722561) },
2513 { FRAC_CONST(0.038959791490485), FRAC_CONST(0.020862877246870) },
2514 { FRAC_CONST(0.038831045875184), FRAC_CONST(0.021101537295642) },
2515 { FRAC_CONST(0.038700838292953), FRAC_CONST(0.021339402883462) },
2516 { FRAC_CONST(0.038569173646034), FRAC_CONST(0.021576465054824) },
2517 { FRAC_CONST(0.038436056891527), FRAC_CONST(0.021812714884472) },
2518 { FRAC_CONST(0.038301493041202), FRAC_CONST(0.022048143477734) },
2519 { FRAC_CONST(0.038165487161312), FRAC_CONST(0.022282741970855) },
2520 { FRAC_CONST(0.038028044372402), FRAC_CONST(0.022516501531335) },
2521 { FRAC_CONST(0.037889169849115), FRAC_CONST(0.022749413358259) },
2522 { FRAC_CONST(0.037748868819998), FRAC_CONST(0.022981468682628) },
2523 { FRAC_CONST(0.037607146567305), FRAC_CONST(0.023212658767690) },
2524 { FRAC_CONST(0.037464008426800), FRAC_CONST(0.023442974909269) },
2525 { FRAC_CONST(0.037319459787553), FRAC_CONST(0.023672408436094) },
2526 { FRAC_CONST(0.037173506091737), FRAC_CONST(0.023900950710120) },
2527 { FRAC_CONST(0.037026152834428), FRAC_CONST(0.024128593126861) },
2528 { FRAC_CONST(0.036877405563392), FRAC_CONST(0.024355327115708) },
2529 { FRAC_CONST(0.036727269878879), FRAC_CONST(0.024581144140255) },
2530 { FRAC_CONST(0.036575751433414), FRAC_CONST(0.024806035698618) },
2531 { FRAC_CONST(0.036422855931580), FRAC_CONST(0.025029993323758) },
2532 { FRAC_CONST(0.036268589129807), FRAC_CONST(0.025253008583796) },
2533 { FRAC_CONST(0.036112956836151), FRAC_CONST(0.025475073082334) },
2534 { FRAC_CONST(0.035955964910083), FRAC_CONST(0.025696178458769) },
2535 { FRAC_CONST(0.035797619262257), FRAC_CONST(0.025916316388609) },
2536 { FRAC_CONST(0.035637925854300), FRAC_CONST(0.026135478583784) },
2537 { FRAC_CONST(0.035476890698576), FRAC_CONST(0.026353656792963) },
2538 { FRAC_CONST(0.035314519857970), FRAC_CONST(0.026570842801858) },
2539 { FRAC_CONST(0.035150819445650), FRAC_CONST(0.026787028433540) },
2540 { FRAC_CONST(0.034985795624846), FRAC_CONST(0.027002205548742) },
2541 { FRAC_CONST(0.034819454608610), FRAC_CONST(0.027216366046166) },
2542 { FRAC_CONST(0.034651802659589), FRAC_CONST(0.027429501862792) },
2543 { FRAC_CONST(0.034482846089783), FRAC_CONST(0.027641604974175) },
2544 { FRAC_CONST(0.034312591260311), FRAC_CONST(0.027852667394755) },
2545 { FRAC_CONST(0.034141044581172), FRAC_CONST(0.028062681178149) },
2546 { FRAC_CONST(0.033968212511001), FRAC_CONST(0.028271638417458) },
2547 { FRAC_CONST(0.033794101556828), FRAC_CONST(0.028479531245560) },
2548 { FRAC_CONST(0.033618718273831), FRAC_CONST(0.028686351835407) },
2549 { FRAC_CONST(0.033442069265093), FRAC_CONST(0.028892092400321) },
2550 { FRAC_CONST(0.033264161181349), FRAC_CONST(0.029096745194286) },
2551 { FRAC_CONST(0.033085000720737), FRAC_CONST(0.029300302512241) },
2552 { FRAC_CONST(0.032904594628548), FRAC_CONST(0.029502756690366) },
2553 { FRAC_CONST(0.032722949696969), FRAC_CONST(0.029704100106376) },
2554 { FRAC_CONST(0.032540072764829), FRAC_CONST(0.029904325179807) },
2555 { FRAC_CONST(0.032355970717341), FRAC_CONST(0.030103424372297) },
2556 { FRAC_CONST(0.032170650485843), FRAC_CONST(0.030301390187873) },
2557 { FRAC_CONST(0.031984119047537), FRAC_CONST(0.030498215173235) },
2558 { FRAC_CONST(0.031796383425227), FRAC_CONST(0.030693891918034) },
2559 { FRAC_CONST(0.031607450687052), FRAC_CONST(0.030888413055150) },
2560 { FRAC_CONST(0.031417327946223), FRAC_CONST(0.031081771260973) },
2561 { FRAC_CONST(0.031226022360754), FRAC_CONST(0.031273959255676) },
2562 { FRAC_CONST(0.031033541133193), FRAC_CONST(0.031464969803488) },
2563 { FRAC_CONST(0.030839891510348), FRAC_CONST(0.031654795712972) },
2564 { FRAC_CONST(0.030645080783018), FRAC_CONST(0.031843429837288) },
2565 { FRAC_CONST(0.030449116285718), FRAC_CONST(0.032030865074469) },
2566 { FRAC_CONST(0.030252005396399), FRAC_CONST(0.032217094367684) },
2567 { FRAC_CONST(0.030053755536176), FRAC_CONST(0.032402110705505) },
2568 { FRAC_CONST(0.029854374169043), FRAC_CONST(0.032585907122172) },
2569 { FRAC_CONST(0.029653868801596), FRAC_CONST(0.032768476697853) },
2570 { FRAC_CONST(0.029452246982750), FRAC_CONST(0.032949812558907) },
2571 { FRAC_CONST(0.029249516303451), FRAC_CONST(0.033129907878142) },
2572 { FRAC_CONST(0.029045684396395), FRAC_CONST(0.033308755875070) },
2573 { FRAC_CONST(0.028840758935738), FRAC_CONST(0.033486349816166) },
2574 { FRAC_CONST(0.028634747636808), FRAC_CONST(0.033662683015118) },
2575 { FRAC_CONST(0.028427658255815), FRAC_CONST(0.033837748833080) },
2576 { FRAC_CONST(0.028219498589555), FRAC_CONST(0.034011540678924) },
2577 { FRAC_CONST(0.028010276475123), FRAC_CONST(0.034184052009485) },
2578 { FRAC_CONST(0.027799999789613), FRAC_CONST(0.034355276329809) },
2579 { FRAC_CONST(0.027588676449824), FRAC_CONST(0.034525207193396) },
2580 { FRAC_CONST(0.027376314411959), FRAC_CONST(0.034693838202447) },
2581 { FRAC_CONST(0.027162921671330), FRAC_CONST(0.034861163008098) },
2582 { FRAC_CONST(0.026948506262053), FRAC_CONST(0.035027175310665) },
2583 { FRAC_CONST(0.026733076256746), FRAC_CONST(0.035191868859880) },
2584 { FRAC_CONST(0.026516639766228), FRAC_CONST(0.035355237455122) },
2585 { FRAC_CONST(0.026299204939210), FRAC_CONST(0.035517274945657) },
2586 { FRAC_CONST(0.026080779961991), FRAC_CONST(0.035677975230865) },
2587 { FRAC_CONST(0.025861373058146), FRAC_CONST(0.035837332260471) },
2588 { FRAC_CONST(0.025640992488223), FRAC_CONST(0.035995340034772) },
2589 { FRAC_CONST(0.025419646549425), FRAC_CONST(0.036151992604866) },
2590 { FRAC_CONST(0.025197343575302), FRAC_CONST(0.036307284072871) },
2591 { FRAC_CONST(0.024974091935435), FRAC_CONST(0.036461208592152) },
2592 { FRAC_CONST(0.024749900035122), FRAC_CONST(0.036613760367538) },
2593 { FRAC_CONST(0.024524776315061), FRAC_CONST(0.036764933655540) },
2594 { FRAC_CONST(0.024298729251033), FRAC_CONST(0.036914722764569) },
2595 { FRAC_CONST(0.024071767353583), FRAC_CONST(0.037063122055150) },
2596 { FRAC_CONST(0.023843899167697), FRAC_CONST(0.037210125940135) },
2597 { FRAC_CONST(0.023615133272485), FRAC_CONST(0.037355728884908) },
2598 { FRAC_CONST(0.023385478280852), FRAC_CONST(0.037499925407603) },
2599 { FRAC_CONST(0.023154942839179), FRAC_CONST(0.037642710079302) },
2600 { FRAC_CONST(0.022923535626995), FRAC_CONST(0.037784077524241) },
2601 { FRAC_CONST(0.022691265356652), FRAC_CONST(0.037924022420018) },
2602 { FRAC_CONST(0.022458140772993), FRAC_CONST(0.038062539497785) },
2603 { FRAC_CONST(0.022224170653027), FRAC_CONST(0.038199623542453) },
2604 { FRAC_CONST(0.021989363805598), FRAC_CONST(0.038335269392885) },
2605 { FRAC_CONST(0.021753729071049), FRAC_CONST(0.038469471942092) },
2606 { FRAC_CONST(0.021517275320897), FRAC_CONST(0.038602226137423) },
2607 { FRAC_CONST(0.021280011457490), FRAC_CONST(0.038733526980758) },
2608 { FRAC_CONST(0.021041946413679), FRAC_CONST(0.038863369528695) },
2609 { FRAC_CONST(0.020803089152479), FRAC_CONST(0.038991748892734) },
2610 { FRAC_CONST(0.020563448666730), FRAC_CONST(0.039118660239466) },
2611 { FRAC_CONST(0.020323033978761), FRAC_CONST(0.039244098790750) },
2612 { FRAC_CONST(0.020081854140050), FRAC_CONST(0.039368059823895) },
2613 { FRAC_CONST(0.019839918230880), FRAC_CONST(0.039490538671839) },
2614 { FRAC_CONST(0.019597235360003), FRAC_CONST(0.039611530723322) },
2615 { FRAC_CONST(0.019353814664291), FRAC_CONST(0.039731031423061) },
2616 { FRAC_CONST(0.019109665308395), FRAC_CONST(0.039849036271924) },
2617 { FRAC_CONST(0.018864796484402), FRAC_CONST(0.039965540827094) },
2618 { FRAC_CONST(0.018619217411483), FRAC_CONST(0.040080540702240) },
2619 { FRAC_CONST(0.018372937335552), FRAC_CONST(0.040194031567683) },
2620 { FRAC_CONST(0.018125965528915), FRAC_CONST(0.040306009150554) },
2621 { FRAC_CONST(0.017878311289921), FRAC_CONST(0.040416469234963) },
2622 { FRAC_CONST(0.017629983942612), FRAC_CONST(0.040525407662148) },
2623 { FRAC_CONST(0.017380992836371), FRAC_CONST(0.040632820330639) },
2624 { FRAC_CONST(0.017131347345575), FRAC_CONST(0.040738703196411) },
2625 { FRAC_CONST(0.016881056869233), FRAC_CONST(0.040843052273033) },
2626 { FRAC_CONST(0.016630130830641), FRAC_CONST(0.040945863631822) },
2627 { FRAC_CONST(0.016378578677023), FRAC_CONST(0.041047133401988) },
2628 { FRAC_CONST(0.016126409879175), FRAC_CONST(0.041146857770781) },
2629 { FRAC_CONST(0.015873633931110), FRAC_CONST(0.041245032983635) },
2630 { FRAC_CONST(0.015620260349699), FRAC_CONST(0.041341655344309) },
2631 { FRAC_CONST(0.015366298674314), FRAC_CONST(0.041436721215026) },
2632 { FRAC_CONST(0.015111758466470), FRAC_CONST(0.041530227016609) },
2633 { FRAC_CONST(0.014856649309460), FRAC_CONST(0.041622169228618) },
2634 { FRAC_CONST(0.014600980808001), FRAC_CONST(0.041712544389481) },
2635 { FRAC_CONST(0.014344762587867), FRAC_CONST(0.041801349096623) },
2636 { FRAC_CONST(0.014088004295529), FRAC_CONST(0.041888580006598) },
2637 { FRAC_CONST(0.013830715597792), FRAC_CONST(0.041974233835211) },
2638 { FRAC_CONST(0.013572906181430), FRAC_CONST(0.042058307357645) },
2639 { FRAC_CONST(0.013314585752822), FRAC_CONST(0.042140797408577) },
2640 { FRAC_CONST(0.013055764037585), FRAC_CONST(0.042221700882306) },
2641 { FRAC_CONST(0.012796450780212), FRAC_CONST(0.042301014732860) },
2642 { FRAC_CONST(0.012536655743699), FRAC_CONST(0.042378735974118) },
2643 { FRAC_CONST(0.012276388709183), FRAC_CONST(0.042454861679919) },
2644 { FRAC_CONST(0.012015659475571), FRAC_CONST(0.042529388984173) },
2645 { FRAC_CONST(0.011754477859172), FRAC_CONST(0.042602315080970) },
2646 { FRAC_CONST(0.011492853693324), FRAC_CONST(0.042673637224683) },
2647 { FRAC_CONST(0.011230796828031), FRAC_CONST(0.042743352730074) },
2648 { FRAC_CONST(0.010968317129584), FRAC_CONST(0.042811458972393) },
2649 { FRAC_CONST(0.010705424480197), FRAC_CONST(0.042877953387479) },
2650 { FRAC_CONST(0.010442128777629), FRAC_CONST(0.042942833471854) },
2651 { FRAC_CONST(0.010178439934815), FRAC_CONST(0.043006096782821) },
2652 { FRAC_CONST(0.009914367879490), FRAC_CONST(0.043067740938551) },
2653 { FRAC_CONST(0.009649922553818), FRAC_CONST(0.043127763618177) },
2654 { FRAC_CONST(0.009385113914016), FRAC_CONST(0.043186162561878) },
2655 { FRAC_CONST(0.009119951929979), FRAC_CONST(0.043242935570968) },
2656 { FRAC_CONST(0.008854446584907), FRAC_CONST(0.043298080507974) },
2657 { FRAC_CONST(0.008588607874926), FRAC_CONST(0.043351595296722) },
2658 { FRAC_CONST(0.008322445808712), FRAC_CONST(0.043403477922409) },
2659 { FRAC_CONST(0.008055970407118), FRAC_CONST(0.043453726431684) },
2660 { FRAC_CONST(0.007789191702791), FRAC_CONST(0.043502338932719) },
2661 { FRAC_CONST(0.007522119739798), FRAC_CONST(0.043549313595281) },
2662 { FRAC_CONST(0.007254764573250), FRAC_CONST(0.043594648650800) },
2663 { FRAC_CONST(0.006987136268915), FRAC_CONST(0.043638342392438) },
2664 { FRAC_CONST(0.006719244902849), FRAC_CONST(0.043680393175148) },
2665 { FRAC_CONST(0.006451100561010), FRAC_CONST(0.043720799415744) },
2666 { FRAC_CONST(0.006182713338881), FRAC_CONST(0.043759559592953) },
2667 { FRAC_CONST(0.005914093341090), FRAC_CONST(0.043796672247476) },
2668 { FRAC_CONST(0.005645250681027), FRAC_CONST(0.043832135982044) },
2669 { FRAC_CONST(0.005376195480466), FRAC_CONST(0.043865949461465) },
2670 { FRAC_CONST(0.005106937869184), FRAC_CONST(0.043898111412683) },
2671 { FRAC_CONST(0.004837487984578), FRAC_CONST(0.043928620624817) },
2672 { FRAC_CONST(0.004567855971284), FRAC_CONST(0.043957475949213) },
2673 { FRAC_CONST(0.004298051980793), FRAC_CONST(0.043984676299484) },
2674 { FRAC_CONST(0.004028086171076), FRAC_CONST(0.044010220651553) },
2675 { FRAC_CONST(0.003757968706190), FRAC_CONST(0.044034108043689) },
2676 { FRAC_CONST(0.003487709755907), FRAC_CONST(0.044056337576546) },
2677 { FRAC_CONST(0.003217319495322), FRAC_CONST(0.044076908413193) },
2678 { FRAC_CONST(0.002946808104477), FRAC_CONST(0.044095819779151) },
2679 { FRAC_CONST(0.002676185767973), FRAC_CONST(0.044113070962418) },
2680 { FRAC_CONST(0.002405462674586), FRAC_CONST(0.044128661313495) },
2681 { FRAC_CONST(0.002134649016890), FRAC_CONST(0.044142590245416) },
2682 { FRAC_CONST(0.001863754990865), FRAC_CONST(0.044154857233763) },
2683 { FRAC_CONST(0.001592790795518), FRAC_CONST(0.044165461816692) },
2684 { FRAC_CONST(0.001321766632497), FRAC_CONST(0.044174403594946) },
2685 { FRAC_CONST(0.001050692705710), FRAC_CONST(0.044181682231873) },
2686 { FRAC_CONST(0.000779579220936), FRAC_CONST(0.044187297453434) },
2687 { FRAC_CONST(0.000508436385446), FRAC_CONST(0.044191249048222) },
2688 { FRAC_CONST(0.000237274407613), FRAC_CONST(0.044193536867459) }
2689};
2690#endif // LD_DEC
2691
2692#ifdef ALLOW_SMALL_FRAMELENGTH
2693/* 480 (N/4) complex twiddle factors */
2694ALIGN static const complex_t mdct_tab_1920[] =
2695{
2696 { FRAC_CONST(0.032274858518097), FRAC_CONST(0.000013202404176) },
2697 { FRAC_CONST(0.032274642494505), FRAC_CONST(0.000118821372483) },
2698 { FRAC_CONST(0.032274080835421), FRAC_CONST(0.000224439068308) },
2699 { FRAC_CONST(0.032273173546860), FRAC_CONST(0.000330054360572) },
2700 { FRAC_CONST(0.032271920638538), FRAC_CONST(0.000435666118218) },
2701 { FRAC_CONST(0.032270322123873), FRAC_CONST(0.000541273210231) },
2702 { FRAC_CONST(0.032268378019984), FRAC_CONST(0.000646874505642) },
2703 { FRAC_CONST(0.032266088347691), FRAC_CONST(0.000752468873546) },
2704 { FRAC_CONST(0.032263453131514), FRAC_CONST(0.000858055183114) },
2705 { FRAC_CONST(0.032260472399674), FRAC_CONST(0.000963632303600) },
2706 { FRAC_CONST(0.032257146184092), FRAC_CONST(0.001069199104358) },
2707 { FRAC_CONST(0.032253474520390), FRAC_CONST(0.001174754454853) },
2708 { FRAC_CONST(0.032249457447888), FRAC_CONST(0.001280297224671) },
2709 { FRAC_CONST(0.032245095009606), FRAC_CONST(0.001385826283535) },
2710 { FRAC_CONST(0.032240387252262), FRAC_CONST(0.001491340501313) },
2711 { FRAC_CONST(0.032235334226272), FRAC_CONST(0.001596838748031) },
2712 { FRAC_CONST(0.032229935985750), FRAC_CONST(0.001702319893890) },
2713 { FRAC_CONST(0.032224192588507), FRAC_CONST(0.001807782809271) },
2714 { FRAC_CONST(0.032218104096050), FRAC_CONST(0.001913226364749) },
2715 { FRAC_CONST(0.032211670573582), FRAC_CONST(0.002018649431111) },
2716 { FRAC_CONST(0.032204892090000), FRAC_CONST(0.002124050879359) },
2717 { FRAC_CONST(0.032197768717898), FRAC_CONST(0.002229429580728) },
2718 { FRAC_CONST(0.032190300533560), FRAC_CONST(0.002334784406698) },
2719 { FRAC_CONST(0.032182487616965), FRAC_CONST(0.002440114229003) },
2720 { FRAC_CONST(0.032174330051782), FRAC_CONST(0.002545417919644) },
2721 { FRAC_CONST(0.032165827925374), FRAC_CONST(0.002650694350905) },
2722 { FRAC_CONST(0.032156981328790), FRAC_CONST(0.002755942395358) },
2723 { FRAC_CONST(0.032147790356771), FRAC_CONST(0.002861160925883) },
2724 { FRAC_CONST(0.032138255107744), FRAC_CONST(0.002966348815672) },
2725 { FRAC_CONST(0.032128375683825), FRAC_CONST(0.003071504938250) },
2726 { FRAC_CONST(0.032118152190814), FRAC_CONST(0.003176628167476) },
2727 { FRAC_CONST(0.032107584738196), FRAC_CONST(0.003281717377568) },
2728 { FRAC_CONST(0.032096673439141), FRAC_CONST(0.003386771443102) },
2729 { FRAC_CONST(0.032085418410500), FRAC_CONST(0.003491789239036) },
2730 { FRAC_CONST(0.032073819772804), FRAC_CONST(0.003596769640711) },
2731 { FRAC_CONST(0.032061877650267), FRAC_CONST(0.003701711523874) },
2732 { FRAC_CONST(0.032049592170778), FRAC_CONST(0.003806613764680) },
2733 { FRAC_CONST(0.032036963465906), FRAC_CONST(0.003911475239711) },
2734 { FRAC_CONST(0.032023991670893), FRAC_CONST(0.004016294825985) },
2735 { FRAC_CONST(0.032010676924657), FRAC_CONST(0.004121071400967) },
2736 { FRAC_CONST(0.031997019369789), FRAC_CONST(0.004225803842586) },
2737 { FRAC_CONST(0.031983019152549), FRAC_CONST(0.004330491029241) },
2738 { FRAC_CONST(0.031968676422869), FRAC_CONST(0.004435131839816) },
2739 { FRAC_CONST(0.031953991334348), FRAC_CONST(0.004539725153692) },
2740 { FRAC_CONST(0.031938964044252), FRAC_CONST(0.004644269850758) },
2741 { FRAC_CONST(0.031923594713510), FRAC_CONST(0.004748764811426) },
2742 { FRAC_CONST(0.031907883506716), FRAC_CONST(0.004853208916638) },
2743 { FRAC_CONST(0.031891830592124), FRAC_CONST(0.004957601047881) },
2744 { FRAC_CONST(0.031875436141648), FRAC_CONST(0.005061940087200) },
2745 { FRAC_CONST(0.031858700330859), FRAC_CONST(0.005166224917208) },
2746 { FRAC_CONST(0.031841623338985), FRAC_CONST(0.005270454421097) },
2747 { FRAC_CONST(0.031824205348907), FRAC_CONST(0.005374627482653) },
2748 { FRAC_CONST(0.031806446547156), FRAC_CONST(0.005478742986267) },
2749 { FRAC_CONST(0.031788347123916), FRAC_CONST(0.005582799816945) },
2750 { FRAC_CONST(0.031769907273017), FRAC_CONST(0.005686796860323) },
2751 { FRAC_CONST(0.031751127191935), FRAC_CONST(0.005790733002674) },
2752 { FRAC_CONST(0.031732007081789), FRAC_CONST(0.005894607130928) },
2753 { FRAC_CONST(0.031712547147340), FRAC_CONST(0.005998418132675) },
2754 { FRAC_CONST(0.031692747596989), FRAC_CONST(0.006102164896182) },
2755 { FRAC_CONST(0.031672608642773), FRAC_CONST(0.006205846310406) },
2756 { FRAC_CONST(0.031652130500364), FRAC_CONST(0.006309461265002) },
2757 { FRAC_CONST(0.031631313389067), FRAC_CONST(0.006413008650337) },
2758 { FRAC_CONST(0.031610157531816), FRAC_CONST(0.006516487357501) },
2759 { FRAC_CONST(0.031588663155172), FRAC_CONST(0.006619896278321) },
2760 { FRAC_CONST(0.031566830489325), FRAC_CONST(0.006723234305370) },
2761 { FRAC_CONST(0.031544659768083), FRAC_CONST(0.006826500331981) },
2762 { FRAC_CONST(0.031522151228878), FRAC_CONST(0.006929693252258) },
2763 { FRAC_CONST(0.031499305112758), FRAC_CONST(0.007032811961088) },
2764 { FRAC_CONST(0.031476121664387), FRAC_CONST(0.007135855354151) },
2765 { FRAC_CONST(0.031452601132040), FRAC_CONST(0.007238822327937) },
2766 { FRAC_CONST(0.031428743767604), FRAC_CONST(0.007341711779751) },
2767 { FRAC_CONST(0.031404549826572), FRAC_CONST(0.007444522607730) },
2768 { FRAC_CONST(0.031380019568042), FRAC_CONST(0.007547253710853) },
2769 { FRAC_CONST(0.031355153254712), FRAC_CONST(0.007649903988952) },
2770 { FRAC_CONST(0.031329951152882), FRAC_CONST(0.007752472342725) },
2771 { FRAC_CONST(0.031304413532445), FRAC_CONST(0.007854957673748) },
2772 { FRAC_CONST(0.031278540666888), FRAC_CONST(0.007957358884484) },
2773 { FRAC_CONST(0.031252332833290), FRAC_CONST(0.008059674878300) },
2774 { FRAC_CONST(0.031225790312316), FRAC_CONST(0.008161904559473) },
2775 { FRAC_CONST(0.031198913388214), FRAC_CONST(0.008264046833205) },
2776 { FRAC_CONST(0.031171702348814), FRAC_CONST(0.008366100605636) },
2777 { FRAC_CONST(0.031144157485525), FRAC_CONST(0.008468064783849) },
2778 { FRAC_CONST(0.031116279093331), FRAC_CONST(0.008569938275893) },
2779 { FRAC_CONST(0.031088067470786), FRAC_CONST(0.008671719990782) },
2780 { FRAC_CONST(0.031059522920014), FRAC_CONST(0.008773408838517) },
2781 { FRAC_CONST(0.031030645746705), FRAC_CONST(0.008875003730092) },
2782 { FRAC_CONST(0.031001436260110), FRAC_CONST(0.008976503577507) },
2783 { FRAC_CONST(0.030971894773039), FRAC_CONST(0.009077907293780) },
2784 { FRAC_CONST(0.030942021601857), FRAC_CONST(0.009179213792959) },
2785 { FRAC_CONST(0.030911817066483), FRAC_CONST(0.009280421990133) },
2786 { FRAC_CONST(0.030881281490382), FRAC_CONST(0.009381530801444) },
2787 { FRAC_CONST(0.030850415200566), FRAC_CONST(0.009482539144097) },
2788 { FRAC_CONST(0.030819218527589), FRAC_CONST(0.009583445936373) },
2789 { FRAC_CONST(0.030787691805541), FRAC_CONST(0.009684250097643) },
2790 { FRAC_CONST(0.030755835372048), FRAC_CONST(0.009784950548375) },
2791 { FRAC_CONST(0.030723649568268), FRAC_CONST(0.009885546210147) },
2792 { FRAC_CONST(0.030691134738883), FRAC_CONST(0.009986036005661) },
2793 { FRAC_CONST(0.030658291232103), FRAC_CONST(0.010086418858753) },
2794 { FRAC_CONST(0.030625119399655), FRAC_CONST(0.010186693694402) },
2795 { FRAC_CONST(0.030591619596781), FRAC_CONST(0.010286859438745) },
2796 { FRAC_CONST(0.030557792182239), FRAC_CONST(0.010386915019088) },
2797 { FRAC_CONST(0.030523637518292), FRAC_CONST(0.010486859363916) },
2798 { FRAC_CONST(0.030489155970710), FRAC_CONST(0.010586691402906) },
2799 { FRAC_CONST(0.030454347908763), FRAC_CONST(0.010686410066936) },
2800 { FRAC_CONST(0.030419213705216), FRAC_CONST(0.010786014288099) },
2801 { FRAC_CONST(0.030383753736329), FRAC_CONST(0.010885502999714) },
2802 { FRAC_CONST(0.030347968381849), FRAC_CONST(0.010984875136338) },
2803 { FRAC_CONST(0.030311858025010), FRAC_CONST(0.011084129633775) },
2804 { FRAC_CONST(0.030275423052523), FRAC_CONST(0.011183265429088) },
2805 { FRAC_CONST(0.030238663854579), FRAC_CONST(0.011282281460612) },
2806 { FRAC_CONST(0.030201580824838), FRAC_CONST(0.011381176667967) },
2807 { FRAC_CONST(0.030164174360430), FRAC_CONST(0.011479949992062) },
2808 { FRAC_CONST(0.030126444861948), FRAC_CONST(0.011578600375117) },
2809 { FRAC_CONST(0.030088392733446), FRAC_CONST(0.011677126760663) },
2810 { FRAC_CONST(0.030050018382430), FRAC_CONST(0.011775528093563) },
2811 { FRAC_CONST(0.030011322219859), FRAC_CONST(0.011873803320018) },
2812 { FRAC_CONST(0.029972304660138), FRAC_CONST(0.011971951387578) },
2813 { FRAC_CONST(0.029932966121114), FRAC_CONST(0.012069971245157) },
2814 { FRAC_CONST(0.029893307024070), FRAC_CONST(0.012167861843041) },
2815 { FRAC_CONST(0.029853327793724), FRAC_CONST(0.012265622132901) },
2816 { FRAC_CONST(0.029813028858222), FRAC_CONST(0.012363251067801) },
2817 { FRAC_CONST(0.029772410649132), FRAC_CONST(0.012460747602215) },
2818 { FRAC_CONST(0.029731473601443), FRAC_CONST(0.012558110692033) },
2819 { FRAC_CONST(0.029690218153558), FRAC_CONST(0.012655339294575) },
2820 { FRAC_CONST(0.029648644747289), FRAC_CONST(0.012752432368600) },
2821 { FRAC_CONST(0.029606753827855), FRAC_CONST(0.012849388874320) },
2822 { FRAC_CONST(0.029564545843872), FRAC_CONST(0.012946207773407) },
2823 { FRAC_CONST(0.029522021247356), FRAC_CONST(0.013042888029011) },
2824 { FRAC_CONST(0.029479180493710), FRAC_CONST(0.013139428605762) },
2825 { FRAC_CONST(0.029436024041725), FRAC_CONST(0.013235828469789) },
2826 { FRAC_CONST(0.029392552353570), FRAC_CONST(0.013332086588727) },
2827 { FRAC_CONST(0.029348765894794), FRAC_CONST(0.013428201931728) },
2828 { FRAC_CONST(0.029304665134313), FRAC_CONST(0.013524173469475) },
2829 { FRAC_CONST(0.029260250544412), FRAC_CONST(0.013620000174189) },
2830 { FRAC_CONST(0.029215522600735), FRAC_CONST(0.013715681019643) },
2831 { FRAC_CONST(0.029170481782283), FRAC_CONST(0.013811214981173) },
2832 { FRAC_CONST(0.029125128571406), FRAC_CONST(0.013906601035686) },
2833 { FRAC_CONST(0.029079463453801), FRAC_CONST(0.014001838161674) },
2834 { FRAC_CONST(0.029033486918505), FRAC_CONST(0.014096925339225) },
2835 { FRAC_CONST(0.028987199457889), FRAC_CONST(0.014191861550031) },
2836 { FRAC_CONST(0.028940601567655), FRAC_CONST(0.014286645777401) },
2837 { FRAC_CONST(0.028893693746829), FRAC_CONST(0.014381277006273) },
2838 { FRAC_CONST(0.028846476497755), FRAC_CONST(0.014475754223221) },
2839 { FRAC_CONST(0.028798950326094), FRAC_CONST(0.014570076416472) },
2840 { FRAC_CONST(0.028751115740811), FRAC_CONST(0.014664242575910) },
2841 { FRAC_CONST(0.028702973254178), FRAC_CONST(0.014758251693091) },
2842 { FRAC_CONST(0.028654523381760), FRAC_CONST(0.014852102761253) },
2843 { FRAC_CONST(0.028605766642418), FRAC_CONST(0.014945794775326) },
2844 { FRAC_CONST(0.028556703558297), FRAC_CONST(0.015039326731945) },
2845 { FRAC_CONST(0.028507334654823), FRAC_CONST(0.015132697629457) },
2846 { FRAC_CONST(0.028457660460698), FRAC_CONST(0.015225906467935) },
2847 { FRAC_CONST(0.028407681507891), FRAC_CONST(0.015318952249187) },
2848 { FRAC_CONST(0.028357398331639), FRAC_CONST(0.015411833976768) },
2849 { FRAC_CONST(0.028306811470432), FRAC_CONST(0.015504550655988) },
2850 { FRAC_CONST(0.028255921466016), FRAC_CONST(0.015597101293927) },
2851 { FRAC_CONST(0.028204728863381), FRAC_CONST(0.015689484899442) },
2852 { FRAC_CONST(0.028153234210760), FRAC_CONST(0.015781700483179) },
2853 { FRAC_CONST(0.028101438059619), FRAC_CONST(0.015873747057582) },
2854 { FRAC_CONST(0.028049340964652), FRAC_CONST(0.015965623636907) },
2855 { FRAC_CONST(0.027996943483779), FRAC_CONST(0.016057329237229) },
2856 { FRAC_CONST(0.027944246178133), FRAC_CONST(0.016148862876456) },
2857 { FRAC_CONST(0.027891249612061), FRAC_CONST(0.016240223574335) },
2858 { FRAC_CONST(0.027837954353113), FRAC_CONST(0.016331410352467) },
2859 { FRAC_CONST(0.027784360972039), FRAC_CONST(0.016422422234315) },
2860 { FRAC_CONST(0.027730470042780), FRAC_CONST(0.016513258245214) },
2861 { FRAC_CONST(0.027676282142466), FRAC_CONST(0.016603917412384) },
2862 { FRAC_CONST(0.027621797851405), FRAC_CONST(0.016694398764938) },
2863 { FRAC_CONST(0.027567017753080), FRAC_CONST(0.016784701333894) },
2864 { FRAC_CONST(0.027511942434143), FRAC_CONST(0.016874824152183) },
2865 { FRAC_CONST(0.027456572484404), FRAC_CONST(0.016964766254662) },
2866 { FRAC_CONST(0.027400908496833), FRAC_CONST(0.017054526678124) },
2867 { FRAC_CONST(0.027344951067546), FRAC_CONST(0.017144104461307) },
2868 { FRAC_CONST(0.027288700795801), FRAC_CONST(0.017233498644904) },
2869 { FRAC_CONST(0.027232158283994), FRAC_CONST(0.017322708271577) },
2870 { FRAC_CONST(0.027175324137651), FRAC_CONST(0.017411732385960) },
2871 { FRAC_CONST(0.027118198965418), FRAC_CONST(0.017500570034678) },
2872 { FRAC_CONST(0.027060783379060), FRAC_CONST(0.017589220266351) },
2873 { FRAC_CONST(0.027003077993454), FRAC_CONST(0.017677682131607) },
2874 { FRAC_CONST(0.026945083426576), FRAC_CONST(0.017765954683088) },
2875 { FRAC_CONST(0.026886800299502), FRAC_CONST(0.017854036975468) },
2876 { FRAC_CONST(0.026828229236397), FRAC_CONST(0.017941928065456) },
2877 { FRAC_CONST(0.026769370864511), FRAC_CONST(0.018029627011808) },
2878 { FRAC_CONST(0.026710225814170), FRAC_CONST(0.018117132875340) },
2879 { FRAC_CONST(0.026650794718768), FRAC_CONST(0.018204444718934) },
2880 { FRAC_CONST(0.026591078214767), FRAC_CONST(0.018291561607551) },
2881 { FRAC_CONST(0.026531076941680), FRAC_CONST(0.018378482608238) },
2882 { FRAC_CONST(0.026470791542075), FRAC_CONST(0.018465206790142) },
2883 { FRAC_CONST(0.026410222661558), FRAC_CONST(0.018551733224515) },
2884 { FRAC_CONST(0.026349370948775), FRAC_CONST(0.018638060984730) },
2885 { FRAC_CONST(0.026288237055398), FRAC_CONST(0.018724189146286) },
2886 { FRAC_CONST(0.026226821636121), FRAC_CONST(0.018810116786819) },
2887 { FRAC_CONST(0.026165125348656), FRAC_CONST(0.018895842986112) },
2888 { FRAC_CONST(0.026103148853718), FRAC_CONST(0.018981366826109) },
2889 { FRAC_CONST(0.026040892815028), FRAC_CONST(0.019066687390916) },
2890 { FRAC_CONST(0.025978357899296), FRAC_CONST(0.019151803766819) },
2891 { FRAC_CONST(0.025915544776223), FRAC_CONST(0.019236715042290) },
2892 { FRAC_CONST(0.025852454118485), FRAC_CONST(0.019321420307998) },
2893 { FRAC_CONST(0.025789086601733), FRAC_CONST(0.019405918656817) },
2894 { FRAC_CONST(0.025725442904582), FRAC_CONST(0.019490209183837) },
2895 { FRAC_CONST(0.025661523708606), FRAC_CONST(0.019574290986376) },
2896 { FRAC_CONST(0.025597329698327), FRAC_CONST(0.019658163163984) },
2897 { FRAC_CONST(0.025532861561211), FRAC_CONST(0.019741824818458) },
2898 { FRAC_CONST(0.025468119987662), FRAC_CONST(0.019825275053848) },
2899 { FRAC_CONST(0.025403105671008), FRAC_CONST(0.019908512976470) },
2900 { FRAC_CONST(0.025337819307501), FRAC_CONST(0.019991537694913) },
2901 { FRAC_CONST(0.025272261596305), FRAC_CONST(0.020074348320047) },
2902 { FRAC_CONST(0.025206433239491), FRAC_CONST(0.020156943965039) },
2903 { FRAC_CONST(0.025140334942028), FRAC_CONST(0.020239323745355) },
2904 { FRAC_CONST(0.025073967411776), FRAC_CONST(0.020321486778774) },
2905 { FRAC_CONST(0.025007331359476), FRAC_CONST(0.020403432185395) },
2906 { FRAC_CONST(0.024940427498748), FRAC_CONST(0.020485159087650) },
2907 { FRAC_CONST(0.024873256546079), FRAC_CONST(0.020566666610309) },
2908 { FRAC_CONST(0.024805819220816), FRAC_CONST(0.020647953880491) },
2909 { FRAC_CONST(0.024738116245157), FRAC_CONST(0.020729020027676) },
2910 { FRAC_CONST(0.024670148344147), FRAC_CONST(0.020809864183709) },
2911 { FRAC_CONST(0.024601916245669), FRAC_CONST(0.020890485482816) },
2912 { FRAC_CONST(0.024533420680433), FRAC_CONST(0.020970883061607) },
2913 { FRAC_CONST(0.024464662381971), FRAC_CONST(0.021051056059087) },
2914 { FRAC_CONST(0.024395642086630), FRAC_CONST(0.021131003616670) },
2915 { FRAC_CONST(0.024326360533561), FRAC_CONST(0.021210724878181) },
2916 { FRAC_CONST(0.024256818464715), FRAC_CONST(0.021290218989868) },
2917 { FRAC_CONST(0.024187016624830), FRAC_CONST(0.021369485100415) },
2918 { FRAC_CONST(0.024116955761430), FRAC_CONST(0.021448522360944) },
2919 { FRAC_CONST(0.024046636624808), FRAC_CONST(0.021527329925030) },
2920 { FRAC_CONST(0.023976059968027), FRAC_CONST(0.021605906948708) },
2921 { FRAC_CONST(0.023905226546906), FRAC_CONST(0.021684252590480) },
2922 { FRAC_CONST(0.023834137120014), FRAC_CONST(0.021762366011328) },
2923 { FRAC_CONST(0.023762792448662), FRAC_CONST(0.021840246374720) },
2924 { FRAC_CONST(0.023691193296893), FRAC_CONST(0.021917892846620) },
2925 { FRAC_CONST(0.023619340431478), FRAC_CONST(0.021995304595495) },
2926 { FRAC_CONST(0.023547234621902), FRAC_CONST(0.022072480792330) },
2927 { FRAC_CONST(0.023474876640361), FRAC_CONST(0.022149420610628) },
2928 { FRAC_CONST(0.023402267261751), FRAC_CONST(0.022226123226426) },
2929 { FRAC_CONST(0.023329407263659), FRAC_CONST(0.022302587818300) },
2930 { FRAC_CONST(0.023256297426359), FRAC_CONST(0.022378813567377) },
2931 { FRAC_CONST(0.023182938532797), FRAC_CONST(0.022454799657339) },
2932 { FRAC_CONST(0.023109331368588), FRAC_CONST(0.022530545274437) },
2933 { FRAC_CONST(0.023035476722006), FRAC_CONST(0.022606049607496) },
2934 { FRAC_CONST(0.022961375383975), FRAC_CONST(0.022681311847926) },
2935 { FRAC_CONST(0.022887028148061), FRAC_CONST(0.022756331189727) },
2936 { FRAC_CONST(0.022812435810462), FRAC_CONST(0.022831106829504) },
2937 { FRAC_CONST(0.022737599170003), FRAC_CONST(0.022905637966469) },
2938 { FRAC_CONST(0.022662519028125), FRAC_CONST(0.022979923802453) },
2939 { FRAC_CONST(0.022587196188874), FRAC_CONST(0.023053963541915) },
2940 { FRAC_CONST(0.022511631458899), FRAC_CONST(0.023127756391950) },
2941 { FRAC_CONST(0.022435825647437), FRAC_CONST(0.023201301562294) },
2942 { FRAC_CONST(0.022359779566306), FRAC_CONST(0.023274598265338) },
2943 { FRAC_CONST(0.022283494029900), FRAC_CONST(0.023347645716133) },
2944 { FRAC_CONST(0.022206969855176), FRAC_CONST(0.023420443132400) },
2945 { FRAC_CONST(0.022130207861645), FRAC_CONST(0.023492989734537) },
2946 { FRAC_CONST(0.022053208871367), FRAC_CONST(0.023565284745628) },
2947 { FRAC_CONST(0.021975973708940), FRAC_CONST(0.023637327391451) },
2948 { FRAC_CONST(0.021898503201489), FRAC_CONST(0.023709116900488) },
2949 { FRAC_CONST(0.021820798178663), FRAC_CONST(0.023780652503931) },
2950 { FRAC_CONST(0.021742859472618), FRAC_CONST(0.023851933435691) },
2951 { FRAC_CONST(0.021664687918017), FRAC_CONST(0.023922958932406) },
2952 { FRAC_CONST(0.021586284352013), FRAC_CONST(0.023993728233451) },
2953 { FRAC_CONST(0.021507649614247), FRAC_CONST(0.024064240580942) },
2954 { FRAC_CONST(0.021428784546832), FRAC_CONST(0.024134495219750) },
2955 { FRAC_CONST(0.021349689994350), FRAC_CONST(0.024204491397504) },
2956 { FRAC_CONST(0.021270366803840), FRAC_CONST(0.024274228364600) },
2957 { FRAC_CONST(0.021190815824791), FRAC_CONST(0.024343705374213) },
2958 { FRAC_CONST(0.021111037909128), FRAC_CONST(0.024412921682298) },
2959 { FRAC_CONST(0.021031033911210), FRAC_CONST(0.024481876547605) },
2960 { FRAC_CONST(0.020950804687815), FRAC_CONST(0.024550569231683) },
2961 { FRAC_CONST(0.020870351098134), FRAC_CONST(0.024618998998889) },
2962 { FRAC_CONST(0.020789674003759), FRAC_CONST(0.024687165116394) },
2963 { FRAC_CONST(0.020708774268678), FRAC_CONST(0.024755066854194) },
2964 { FRAC_CONST(0.020627652759262), FRAC_CONST(0.024822703485116) },
2965 { FRAC_CONST(0.020546310344257), FRAC_CONST(0.024890074284826) },
2966 { FRAC_CONST(0.020464747894775), FRAC_CONST(0.024957178531837) },
2967 { FRAC_CONST(0.020382966284284), FRAC_CONST(0.025024015507516) },
2968 { FRAC_CONST(0.020300966388600), FRAC_CONST(0.025090584496093) },
2969 { FRAC_CONST(0.020218749085876), FRAC_CONST(0.025156884784668) },
2970 { FRAC_CONST(0.020136315256592), FRAC_CONST(0.025222915663218) },
2971 { FRAC_CONST(0.020053665783549), FRAC_CONST(0.025288676424605) },
2972 { FRAC_CONST(0.019970801551857), FRAC_CONST(0.025354166364584) },
2973 { FRAC_CONST(0.019887723448925), FRAC_CONST(0.025419384781811) },
2974 { FRAC_CONST(0.019804432364452), FRAC_CONST(0.025484330977848) },
2975 { FRAC_CONST(0.019720929190419), FRAC_CONST(0.025549004257175) },
2976 { FRAC_CONST(0.019637214821078), FRAC_CONST(0.025613403927192) },
2977 { FRAC_CONST(0.019553290152943), FRAC_CONST(0.025677529298230) },
2978 { FRAC_CONST(0.019469156084779), FRAC_CONST(0.025741379683559) },
2979 { FRAC_CONST(0.019384813517595), FRAC_CONST(0.025804954399392) },
2980 { FRAC_CONST(0.019300263354632), FRAC_CONST(0.025868252764895) },
2981 { FRAC_CONST(0.019215506501354), FRAC_CONST(0.025931274102193) },
2982 { FRAC_CONST(0.019130543865439), FRAC_CONST(0.025994017736379) },
2983 { FRAC_CONST(0.019045376356769), FRAC_CONST(0.026056482995518) },
2984 { FRAC_CONST(0.018960004887419), FRAC_CONST(0.026118669210657) },
2985 { FRAC_CONST(0.018874430371648), FRAC_CONST(0.026180575715833) },
2986 { FRAC_CONST(0.018788653725892), FRAC_CONST(0.026242201848076) },
2987 { FRAC_CONST(0.018702675868750), FRAC_CONST(0.026303546947421) },
2988 { FRAC_CONST(0.018616497720974), FRAC_CONST(0.026364610356909) },
2989 { FRAC_CONST(0.018530120205464), FRAC_CONST(0.026425391422602) },
2990 { FRAC_CONST(0.018443544247254), FRAC_CONST(0.026485889493583) },
2991 { FRAC_CONST(0.018356770773502), FRAC_CONST(0.026546103921965) },
2992 { FRAC_CONST(0.018269800713483), FRAC_CONST(0.026606034062902) },
2993 { FRAC_CONST(0.018182634998576), FRAC_CONST(0.026665679274589) },
2994 { FRAC_CONST(0.018095274562256), FRAC_CONST(0.026725038918274) },
2995 { FRAC_CONST(0.018007720340083), FRAC_CONST(0.026784112358263) },
2996 { FRAC_CONST(0.017919973269692), FRAC_CONST(0.026842898961926) },
2997 { FRAC_CONST(0.017832034290785), FRAC_CONST(0.026901398099707) },
2998 { FRAC_CONST(0.017743904345116), FRAC_CONST(0.026959609145127) },
2999 { FRAC_CONST(0.017655584376488), FRAC_CONST(0.027017531474792) },
3000 { FRAC_CONST(0.017567075330734), FRAC_CONST(0.027075164468401) },
3001 { FRAC_CONST(0.017478378155718), FRAC_CONST(0.027132507508750) },
3002 { FRAC_CONST(0.017389493801313), FRAC_CONST(0.027189559981742) },
3003 { FRAC_CONST(0.017300423219401), FRAC_CONST(0.027246321276391) },
3004 { FRAC_CONST(0.017211167363854), FRAC_CONST(0.027302790784828) },
3005 { FRAC_CONST(0.017121727190533), FRAC_CONST(0.027358967902310) },
3006 { FRAC_CONST(0.017032103657269), FRAC_CONST(0.027414852027226) },
3007 { FRAC_CONST(0.016942297723858), FRAC_CONST(0.027470442561102) },
3008 { FRAC_CONST(0.016852310352050), FRAC_CONST(0.027525738908608) },
3009 { FRAC_CONST(0.016762142505537), FRAC_CONST(0.027580740477564) },
3010 { FRAC_CONST(0.016671795149944), FRAC_CONST(0.027635446678948) },
3011 { FRAC_CONST(0.016581269252819), FRAC_CONST(0.027689856926900) },
3012 { FRAC_CONST(0.016490565783622), FRAC_CONST(0.027743970638730) },
3013 { FRAC_CONST(0.016399685713714), FRAC_CONST(0.027797787234924) },
3014 { FRAC_CONST(0.016308630016347), FRAC_CONST(0.027851306139149) },
3015 { FRAC_CONST(0.016217399666655), FRAC_CONST(0.027904526778260) },
3016 { FRAC_CONST(0.016125995641641), FRAC_CONST(0.027957448582309) },
3017 { FRAC_CONST(0.016034418920170), FRAC_CONST(0.028010070984544) },
3018 { FRAC_CONST(0.015942670482954), FRAC_CONST(0.028062393421421) },
3019 { FRAC_CONST(0.015850751312545), FRAC_CONST(0.028114415332610) },
3020 { FRAC_CONST(0.015758662393324), FRAC_CONST(0.028166136160998) },
3021 { FRAC_CONST(0.015666404711489), FRAC_CONST(0.028217555352697) },
3022 { FRAC_CONST(0.015573979255046), FRAC_CONST(0.028268672357047) },
3023 { FRAC_CONST(0.015481387013797), FRAC_CONST(0.028319486626627) },
3024 { FRAC_CONST(0.015388628979331), FRAC_CONST(0.028369997617257) },
3025 { FRAC_CONST(0.015295706145012), FRAC_CONST(0.028420204788004) },
3026 { FRAC_CONST(0.015202619505968), FRAC_CONST(0.028470107601191) },
3027 { FRAC_CONST(0.015109370059084), FRAC_CONST(0.028519705522399) },
3028 { FRAC_CONST(0.015015958802984), FRAC_CONST(0.028568998020472) },
3029 { FRAC_CONST(0.014922386738030), FRAC_CONST(0.028617984567529) },
3030 { FRAC_CONST(0.014828654866302), FRAC_CONST(0.028666664638963) },
3031 { FRAC_CONST(0.014734764191593), FRAC_CONST(0.028715037713449) },
3032 { FRAC_CONST(0.014640715719398), FRAC_CONST(0.028763103272951) },
3033 { FRAC_CONST(0.014546510456900), FRAC_CONST(0.028810860802724) },
3034 { FRAC_CONST(0.014452149412962), FRAC_CONST(0.028858309791325) },
3035 { FRAC_CONST(0.014357633598114), FRAC_CONST(0.028905449730613) },
3036 { FRAC_CONST(0.014262964024545), FRAC_CONST(0.028952280115756) },
3037 { FRAC_CONST(0.014168141706090), FRAC_CONST(0.028998800445240) },
3038 { FRAC_CONST(0.014073167658220), FRAC_CONST(0.029045010220868) },
3039 { FRAC_CONST(0.013978042898030), FRAC_CONST(0.029090908947771) },
3040 { FRAC_CONST(0.013882768444231), FRAC_CONST(0.029136496134411) },
3041 { FRAC_CONST(0.013787345317136), FRAC_CONST(0.029181771292585) },
3042 { FRAC_CONST(0.013691774538648), FRAC_CONST(0.029226733937433) },
3043 { FRAC_CONST(0.013596057132255), FRAC_CONST(0.029271383587441) },
3044 { FRAC_CONST(0.013500194123014), FRAC_CONST(0.029315719764447) },
3045 { FRAC_CONST(0.013404186537539), FRAC_CONST(0.029359741993647) },
3046 { FRAC_CONST(0.013308035403995), FRAC_CONST(0.029403449803598) },
3047 { FRAC_CONST(0.013211741752084), FRAC_CONST(0.029446842726223) },
3048 { FRAC_CONST(0.013115306613032), FRAC_CONST(0.029489920296820) },
3049 { FRAC_CONST(0.013018731019584), FRAC_CONST(0.029532682054063) },
3050 { FRAC_CONST(0.012922016005985), FRAC_CONST(0.029575127540008) },
3051 { FRAC_CONST(0.012825162607977), FRAC_CONST(0.029617256300097) },
3052 { FRAC_CONST(0.012728171862781), FRAC_CONST(0.029659067883165) },
3053 { FRAC_CONST(0.012631044809089), FRAC_CONST(0.029700561841444) },
3054 { FRAC_CONST(0.012533782487056), FRAC_CONST(0.029741737730567) },
3055 { FRAC_CONST(0.012436385938281), FRAC_CONST(0.029782595109573) },
3056 { FRAC_CONST(0.012338856205805), FRAC_CONST(0.029823133540913) },
3057 { FRAC_CONST(0.012241194334091), FRAC_CONST(0.029863352590452) },
3058 { FRAC_CONST(0.012143401369021), FRAC_CONST(0.029903251827477) },
3059 { FRAC_CONST(0.012045478357878), FRAC_CONST(0.029942830824699) },
3060 { FRAC_CONST(0.011947426349339), FRAC_CONST(0.029982089158259) },
3061 { FRAC_CONST(0.011849246393462), FRAC_CONST(0.030021026407731) },
3062 { FRAC_CONST(0.011750939541676), FRAC_CONST(0.030059642156129) },
3063 { FRAC_CONST(0.011652506846768), FRAC_CONST(0.030097935989909) },
3064 { FRAC_CONST(0.011553949362874), FRAC_CONST(0.030135907498976) },
3065 { FRAC_CONST(0.011455268145464), FRAC_CONST(0.030173556276684) },
3066 { FRAC_CONST(0.011356464251335), FRAC_CONST(0.030210881919845) },
3067 { FRAC_CONST(0.011257538738598), FRAC_CONST(0.030247884028732) },
3068 { FRAC_CONST(0.011158492666665), FRAC_CONST(0.030284562207083) },
3069 { FRAC_CONST(0.011059327096240), FRAC_CONST(0.030320916062102) },
3070 { FRAC_CONST(0.010960043089307), FRAC_CONST(0.030356945204470) },
3071 { FRAC_CONST(0.010860641709118), FRAC_CONST(0.030392649248343) },
3072 { FRAC_CONST(0.010761124020182), FRAC_CONST(0.030428027811361) },
3073 { FRAC_CONST(0.010661491088253), FRAC_CONST(0.030463080514646) },
3074 { FRAC_CONST(0.010561743980319), FRAC_CONST(0.030497806982812) },
3075 { FRAC_CONST(0.010461883764593), FRAC_CONST(0.030532206843968) },
3076 { FRAC_CONST(0.010361911510496), FRAC_CONST(0.030566279729717) },
3077 { FRAC_CONST(0.010261828288652), FRAC_CONST(0.030600025275167) },
3078 { FRAC_CONST(0.010161635170872), FRAC_CONST(0.030633443118931) },
3079 { FRAC_CONST(0.010061333230142), FRAC_CONST(0.030666532903129) },
3080 { FRAC_CONST(0.009960923540617), FRAC_CONST(0.030699294273397) },
3081 { FRAC_CONST(0.009860407177603), FRAC_CONST(0.030731726878888) },
3082 { FRAC_CONST(0.009759785217550), FRAC_CONST(0.030763830372273) },
3083 { FRAC_CONST(0.009659058738038), FRAC_CONST(0.030795604409750) },
3084 { FRAC_CONST(0.009558228817767), FRAC_CONST(0.030827048651045) },
3085 { FRAC_CONST(0.009457296536545), FRAC_CONST(0.030858162759415) },
3086 { FRAC_CONST(0.009356262975275), FRAC_CONST(0.030888946401653) },
3087 { FRAC_CONST(0.009255129215945), FRAC_CONST(0.030919399248091) },
3088 { FRAC_CONST(0.009153896341616), FRAC_CONST(0.030949520972603) },
3089 { FRAC_CONST(0.009052565436412), FRAC_CONST(0.030979311252611) },
3090 { FRAC_CONST(0.008951137585505), FRAC_CONST(0.031008769769084) },
3091 { FRAC_CONST(0.008849613875105), FRAC_CONST(0.031037896206544) },
3092 { FRAC_CONST(0.008747995392451), FRAC_CONST(0.031066690253072) },
3093 { FRAC_CONST(0.008646283225794), FRAC_CONST(0.031095151600306) },
3094 { FRAC_CONST(0.008544478464390), FRAC_CONST(0.031123279943448) },
3095 { FRAC_CONST(0.008442582198486), FRAC_CONST(0.031151074981266) },
3096 { FRAC_CONST(0.008340595519310), FRAC_CONST(0.031178536416098) },
3097 { FRAC_CONST(0.008238519519057), FRAC_CONST(0.031205663953853) },
3098 { FRAC_CONST(0.008136355290878), FRAC_CONST(0.031232457304017) },
3099 { FRAC_CONST(0.008034103928871), FRAC_CONST(0.031258916179656) },
3100 { FRAC_CONST(0.007931766528065), FRAC_CONST(0.031285040297416) },
3101 { FRAC_CONST(0.007829344184412), FRAC_CONST(0.031310829377528) },
3102 { FRAC_CONST(0.007726837994772), FRAC_CONST(0.031336283143813) },
3103 { FRAC_CONST(0.007624249056906), FRAC_CONST(0.031361401323680) },
3104 { FRAC_CONST(0.007521578469457), FRAC_CONST(0.031386183648135) },
3105 { FRAC_CONST(0.007418827331946), FRAC_CONST(0.031410629851778) },
3106 { FRAC_CONST(0.007315996744755), FRAC_CONST(0.031434739672811) },
3107 { FRAC_CONST(0.007213087809115), FRAC_CONST(0.031458512853036) },
3108 { FRAC_CONST(0.007110101627101), FRAC_CONST(0.031481949137863) },
3109 { FRAC_CONST(0.007007039301610), FRAC_CONST(0.031505048276306) },
3110 { FRAC_CONST(0.006903901936357), FRAC_CONST(0.031527810020993) },
3111 { FRAC_CONST(0.006800690635862), FRAC_CONST(0.031550234128164) },
3112 { FRAC_CONST(0.006697406505433), FRAC_CONST(0.031572320357675) },
3113 { FRAC_CONST(0.006594050651161), FRAC_CONST(0.031594068473000) },
3114 { FRAC_CONST(0.006490624179905), FRAC_CONST(0.031615478241233) },
3115 { FRAC_CONST(0.006387128199278), FRAC_CONST(0.031636549433095) },
3116 { FRAC_CONST(0.006283563817639), FRAC_CONST(0.031657281822929) },
3117 { FRAC_CONST(0.006179932144080), FRAC_CONST(0.031677675188707) },
3118 { FRAC_CONST(0.006076234288412), FRAC_CONST(0.031697729312034) },
3119 { FRAC_CONST(0.005972471361157), FRAC_CONST(0.031717443978146) },
3120 { FRAC_CONST(0.005868644473532), FRAC_CONST(0.031736818975914) },
3121 { FRAC_CONST(0.005764754737440), FRAC_CONST(0.031755854097848) },
3122 { FRAC_CONST(0.005660803265456), FRAC_CONST(0.031774549140098) },
3123 { FRAC_CONST(0.005556791170816), FRAC_CONST(0.031792903902453) },
3124 { FRAC_CONST(0.005452719567407), FRAC_CONST(0.031810918188350) },
3125 { FRAC_CONST(0.005348589569753), FRAC_CONST(0.031828591804869) },
3126 { FRAC_CONST(0.005244402293001), FRAC_CONST(0.031845924562742) },
3127 { FRAC_CONST(0.005140158852914), FRAC_CONST(0.031862916276347) },
3128 { FRAC_CONST(0.005035860365855), FRAC_CONST(0.031879566763717) },
3129 { FRAC_CONST(0.004931507948778), FRAC_CONST(0.031895875846539) },
3130 { FRAC_CONST(0.004827102719212), FRAC_CONST(0.031911843350155) },
3131 { FRAC_CONST(0.004722645795254), FRAC_CONST(0.031927469103567) },
3132 { FRAC_CONST(0.004618138295554), FRAC_CONST(0.031942752939435) },
3133 { FRAC_CONST(0.004513581339303), FRAC_CONST(0.031957694694082) },
3134 { FRAC_CONST(0.004408976046222), FRAC_CONST(0.031972294207493) },
3135 { FRAC_CONST(0.004304323536549), FRAC_CONST(0.031986551323320) },
3136 { FRAC_CONST(0.004199624931030), FRAC_CONST(0.032000465888879) },
3137 { FRAC_CONST(0.004094881350902), FRAC_CONST(0.032014037755158) },
3138 { FRAC_CONST(0.003990093917884), FRAC_CONST(0.032027266776813) },
3139 { FRAC_CONST(0.003885263754166), FRAC_CONST(0.032040152812170) },
3140 { FRAC_CONST(0.003780391982394), FRAC_CONST(0.032052695723232) },
3141 { FRAC_CONST(0.003675479725661), FRAC_CONST(0.032064895375674) },
3142 { FRAC_CONST(0.003570528107494), FRAC_CONST(0.032076751638847) },
3143 { FRAC_CONST(0.003465538251839), FRAC_CONST(0.032088264385780) },
3144 { FRAC_CONST(0.003360511283053), FRAC_CONST(0.032099433493181) },
3145 { FRAC_CONST(0.003255448325892), FRAC_CONST(0.032110258841438) },
3146 { FRAC_CONST(0.003150350505494), FRAC_CONST(0.032120740314619) },
3147 { FRAC_CONST(0.003045218947373), FRAC_CONST(0.032130877800478) },
3148 { FRAC_CONST(0.002940054777404), FRAC_CONST(0.032140671190449) },
3149 { FRAC_CONST(0.002834859121810), FRAC_CONST(0.032150120379653) },
3150 { FRAC_CONST(0.002729633107153), FRAC_CONST(0.032159225266897) },
3151 { FRAC_CONST(0.002624377860318), FRAC_CONST(0.032167985754674) },
3152 { FRAC_CONST(0.002519094508504), FRAC_CONST(0.032176401749168) },
3153 { FRAC_CONST(0.002413784179212), FRAC_CONST(0.032184473160250) },
3154 { FRAC_CONST(0.002308448000231), FRAC_CONST(0.032192199901481) },
3155 { FRAC_CONST(0.002203087099626), FRAC_CONST(0.032199581890114) },
3156 { FRAC_CONST(0.002097702605728), FRAC_CONST(0.032206619047093) },
3157 { FRAC_CONST(0.001992295647121), FRAC_CONST(0.032213311297057) },
3158 { FRAC_CONST(0.001886867352628), FRAC_CONST(0.032219658568338) },
3159 { FRAC_CONST(0.001781418851302), FRAC_CONST(0.032225660792960) },
3160 { FRAC_CONST(0.001675951272410), FRAC_CONST(0.032231317906644) },
3161 { FRAC_CONST(0.001570465745428), FRAC_CONST(0.032236629848809) },
3162 { FRAC_CONST(0.001464963400018), FRAC_CONST(0.032241596562566) },
3163 { FRAC_CONST(0.001359445366028), FRAC_CONST(0.032246217994727) },
3164 { FRAC_CONST(0.001253912773470), FRAC_CONST(0.032250494095799) },
3165 { FRAC_CONST(0.001148366752513), FRAC_CONST(0.032254424819990) },
3166 { FRAC_CONST(0.001042808433471), FRAC_CONST(0.032258010125204) },
3167 { FRAC_CONST(0.000937238946789), FRAC_CONST(0.032261249973045) },
3168 { FRAC_CONST(0.000831659423030), FRAC_CONST(0.032264144328817) },
3169 { FRAC_CONST(0.000726070992868), FRAC_CONST(0.032266693161525) },
3170 { FRAC_CONST(0.000620474787068), FRAC_CONST(0.032268896443871) },
3171 { FRAC_CONST(0.000514871936481), FRAC_CONST(0.032270754152261) },
3172 { FRAC_CONST(0.000409263572030), FRAC_CONST(0.032272266266801) },
3173 { FRAC_CONST(0.000303650824695), FRAC_CONST(0.032273432771295) },
3174 { FRAC_CONST(0.000198034825504), FRAC_CONST(0.032274253653254) },
3175 { FRAC_CONST(0.000092416705518), FRAC_CONST(0.032274728903884) }
3176};
3177
3178#ifdef LD_DEC
3179/* 240 (N/4) complex twiddle factors */
3180ALIGN static const complex_t mdct_tab_960[] =
3181{
3182 { FRAC_CONST(0.045643531183573), FRAC_CONST(0.000037342034959) },
3183 { FRAC_CONST(0.045642309173789), FRAC_CONST(0.000336075315362) },
3184 { FRAC_CONST(0.045639131999390), FRAC_CONST(0.000634794199417) },
3185 { FRAC_CONST(0.045633999796474), FRAC_CONST(0.000933485891002) },
3186 { FRAC_CONST(0.045626912784890), FRAC_CONST(0.001232137595157) },
3187 { FRAC_CONST(0.045617871268219), FRAC_CONST(0.001530736518639) },
3188 { FRAC_CONST(0.045606875633772), FRAC_CONST(0.001829269870464) },
3189 { FRAC_CONST(0.045593926352564), FRAC_CONST(0.002127724862455) },
3190 { FRAC_CONST(0.045579023979299), FRAC_CONST(0.002426088709795) },
3191 { FRAC_CONST(0.045562169152346), FRAC_CONST(0.002724348631569) },
3192 { FRAC_CONST(0.045543362593709), FRAC_CONST(0.003022491851315) },
3193 { FRAC_CONST(0.045522605108999), FRAC_CONST(0.003320505597570) },
3194 { FRAC_CONST(0.045499897587396), FRAC_CONST(0.003618377104416) },
3195 { FRAC_CONST(0.045475241001617), FRAC_CONST(0.003916093612031) },
3196 { FRAC_CONST(0.045448636407866), FRAC_CONST(0.004213642367228) },
3197 { FRAC_CONST(0.045420084945797), FRAC_CONST(0.004511010624011) },
3198 { FRAC_CONST(0.045389587838458), FRAC_CONST(0.004808185644112) },
3199 { FRAC_CONST(0.045357146392244), FRAC_CONST(0.005105154697544) },
3200 { FRAC_CONST(0.045322761996840), FRAC_CONST(0.005401905063139) },
3201 { FRAC_CONST(0.045286436125157), FRAC_CONST(0.005698424029100) },
3202 { FRAC_CONST(0.045248170333275), FRAC_CONST(0.005994698893542) },
3203 { FRAC_CONST(0.045207966260374), FRAC_CONST(0.006290716965035) },
3204 { FRAC_CONST(0.045165825628663), FRAC_CONST(0.006586465563151) },
3205 { FRAC_CONST(0.045121750243305), FRAC_CONST(0.006881932019003) },
3206 { FRAC_CONST(0.045075741992343), FRAC_CONST(0.007177103675792) },
3207 { FRAC_CONST(0.045027802846618), FRAC_CONST(0.007471967889347) },
3208 { FRAC_CONST(0.044977934859683), FRAC_CONST(0.007766512028667) },
3209 { FRAC_CONST(0.044926140167717), FRAC_CONST(0.008060723476460) },
3210 { FRAC_CONST(0.044872420989432), FRAC_CONST(0.008354589629687) },
3211 { FRAC_CONST(0.044816779625979), FRAC_CONST(0.008648097900101) },
3212 { FRAC_CONST(0.044759218460849), FRAC_CONST(0.008941235714784) },
3213 { FRAC_CONST(0.044699739959770), FRAC_CONST(0.009233990516688) },
3214 { FRAC_CONST(0.044638346670603), FRAC_CONST(0.009526349765171) },
3215 { FRAC_CONST(0.044575041223233), FRAC_CONST(0.009818300936537) },
3216 { FRAC_CONST(0.044509826329454), FRAC_CONST(0.010109831524568) },
3217 { FRAC_CONST(0.044442704782856), FRAC_CONST(0.010400929041064) },
3218 { FRAC_CONST(0.044373679458701), FRAC_CONST(0.010691581016378) },
3219 { FRAC_CONST(0.044302753313806), FRAC_CONST(0.010981774999945) },
3220 { FRAC_CONST(0.044229929386409), FRAC_CONST(0.011271498560822) },
3221 { FRAC_CONST(0.044155210796046), FRAC_CONST(0.011560739288214) },
3222 { FRAC_CONST(0.044078600743413), FRAC_CONST(0.011849484792012) },
3223 { FRAC_CONST(0.044000102510229), FRAC_CONST(0.012137722703321) },
3224 { FRAC_CONST(0.043919719459097), FRAC_CONST(0.012425440674986) },
3225 { FRAC_CONST(0.043837455033359), FRAC_CONST(0.012712626382127) },
3226 { FRAC_CONST(0.043753312756950), FRAC_CONST(0.012999267522665) },
3227 { FRAC_CONST(0.043667296234245), FRAC_CONST(0.013285351817848) },
3228 { FRAC_CONST(0.043579409149906), FRAC_CONST(0.013570867012776) },
3229 { FRAC_CONST(0.043489655268722), FRAC_CONST(0.013855800876928) },
3230 { FRAC_CONST(0.043398038435451), FRAC_CONST(0.014140141204686) },
3231 { FRAC_CONST(0.043304562574653), FRAC_CONST(0.014423875815857) },
3232 { FRAC_CONST(0.043209231690524), FRAC_CONST(0.014706992556195) },
3233 { FRAC_CONST(0.043112049866720), FRAC_CONST(0.014989479297920) },
3234 { FRAC_CONST(0.043013021266188), FRAC_CONST(0.015271323940241) },
3235 { FRAC_CONST(0.042912150130984), FRAC_CONST(0.015552514409871) },
3236 { FRAC_CONST(0.042809440782090), FRAC_CONST(0.015833038661547) },
3237 { FRAC_CONST(0.042704897619235), FRAC_CONST(0.016112884678543) },
3238 { FRAC_CONST(0.042598525120698), FRAC_CONST(0.016392040473187) },
3239 { FRAC_CONST(0.042490327843124), FRAC_CONST(0.016670494087374) },
3240 { FRAC_CONST(0.042380310421324), FRAC_CONST(0.016948233593079) },
3241 { FRAC_CONST(0.042268477568078), FRAC_CONST(0.017225247092864) },
3242 { FRAC_CONST(0.042154834073934), FRAC_CONST(0.017501522720393) },
3243 { FRAC_CONST(0.042039384807000), FRAC_CONST(0.017777048640940) },
3244 { FRAC_CONST(0.041922134712739), FRAC_CONST(0.018051813051888) },
3245 { FRAC_CONST(0.041803088813754), FRAC_CONST(0.018325804183247) },
3246 { FRAC_CONST(0.041682252209576), FRAC_CONST(0.018599010298148) },
3247 { FRAC_CONST(0.041559630076443), FRAC_CONST(0.018871419693350) },
3248 { FRAC_CONST(0.041435227667079), FRAC_CONST(0.019143020699741) },
3249 { FRAC_CONST(0.041309050310468), FRAC_CONST(0.019413801682838) },
3250 { FRAC_CONST(0.041181103411629), FRAC_CONST(0.019683751043285) },
3251 { FRAC_CONST(0.041051392451382), FRAC_CONST(0.019952857217350) },
3252 { FRAC_CONST(0.040919922986111), FRAC_CONST(0.020221108677421) },
3253 { FRAC_CONST(0.040786700647532), FRAC_CONST(0.020488493932496) },
3254 { FRAC_CONST(0.040651731142446), FRAC_CONST(0.020755001528683) },
3255 { FRAC_CONST(0.040515020252497), FRAC_CONST(0.021020620049682) },
3256 { FRAC_CONST(0.040376573833925), FRAC_CONST(0.021285338117280) },
3257 { FRAC_CONST(0.040236397817314), FRAC_CONST(0.021549144391836) },
3258 { FRAC_CONST(0.040094498207337), FRAC_CONST(0.021812027572768) },
3259 { FRAC_CONST(0.039950881082502), FRAC_CONST(0.022073976399034) },
3260 { FRAC_CONST(0.039805552594888), FRAC_CONST(0.022334979649620) },
3261 { FRAC_CONST(0.039658518969884), FRAC_CONST(0.022595026144014) },
3262 { FRAC_CONST(0.039509786505922), FRAC_CONST(0.022854104742690) },
3263 { FRAC_CONST(0.039359361574204), FRAC_CONST(0.023112204347583) },
3264 { FRAC_CONST(0.039207250618434), FRAC_CONST(0.023369313902565) },
3265 { FRAC_CONST(0.039053460154540), FRAC_CONST(0.023625422393919) },
3266 { FRAC_CONST(0.038897996770393), FRAC_CONST(0.023880518850809) },
3267 { FRAC_CONST(0.038740867125527), FRAC_CONST(0.024134592345752) },
3268 { FRAC_CONST(0.038582077950852), FRAC_CONST(0.024387631995085) },
3269 { FRAC_CONST(0.038421636048370), FRAC_CONST(0.024639626959432) },
3270 { FRAC_CONST(0.038259548290876), FRAC_CONST(0.024890566444167) },
3271 { FRAC_CONST(0.038095821621671), FRAC_CONST(0.025140439699877) },
3272 { FRAC_CONST(0.037930463054261), FRAC_CONST(0.025389236022825) },
3273 { FRAC_CONST(0.037763479672055), FRAC_CONST(0.025636944755403) },
3274 { FRAC_CONST(0.037594878628068), FRAC_CONST(0.025883555286595) },
3275 { FRAC_CONST(0.037424667144605), FRAC_CONST(0.026129057052425) },
3276 { FRAC_CONST(0.037252852512960), FRAC_CONST(0.026373439536415) },
3277 { FRAC_CONST(0.037079442093102), FRAC_CONST(0.026616692270033) },
3278 { FRAC_CONST(0.036904443313354), FRAC_CONST(0.026858804833142) },
3279 { FRAC_CONST(0.036727863670081), FRAC_CONST(0.027099766854444) },
3280 { FRAC_CONST(0.036549710727369), FRAC_CONST(0.027339568011930) },
3281 { FRAC_CONST(0.036369992116697), FRAC_CONST(0.027578198033315) },
3282 { FRAC_CONST(0.036188715536611), FRAC_CONST(0.027815646696484) },
3283 { FRAC_CONST(0.036005888752396), FRAC_CONST(0.028051903829926) },
3284 { FRAC_CONST(0.035821519595745), FRAC_CONST(0.028286959313171) },
3285 { FRAC_CONST(0.035635615964417), FRAC_CONST(0.028520803077226) },
3286 { FRAC_CONST(0.035448185821906), FRAC_CONST(0.028753425105002) },
3287 { FRAC_CONST(0.035259237197095), FRAC_CONST(0.028984815431745) },
3288 { FRAC_CONST(0.035068778183914), FRAC_CONST(0.029214964145465) },
3289 { FRAC_CONST(0.034876816940994), FRAC_CONST(0.029443861387355) },
3290 { FRAC_CONST(0.034683361691315), FRAC_CONST(0.029671497352220) },
3291 { FRAC_CONST(0.034488420721856), FRAC_CONST(0.029897862288892) },
3292 { FRAC_CONST(0.034292002383240), FRAC_CONST(0.030122946500652) },
3293 { FRAC_CONST(0.034094115089375), FRAC_CONST(0.030346740345641) },
3294 { FRAC_CONST(0.033894767317093), FRAC_CONST(0.030569234237276) },
3295 { FRAC_CONST(0.033693967605790), FRAC_CONST(0.030790418644658) },
3296 { FRAC_CONST(0.033491724557057), FRAC_CONST(0.031010284092984) },
3297 { FRAC_CONST(0.033288046834313), FRAC_CONST(0.031228821163949) },
3298 { FRAC_CONST(0.033082943162434), FRAC_CONST(0.031446020496153) },
3299 { FRAC_CONST(0.032876422327378), FRAC_CONST(0.031661872785500) },
3300 { FRAC_CONST(0.032668493175811), FRAC_CONST(0.031876368785596) },
3301 { FRAC_CONST(0.032459164614726), FRAC_CONST(0.032089499308145) },
3302 { FRAC_CONST(0.032248445611061), FRAC_CONST(0.032301255223347) },
3303 { FRAC_CONST(0.032036345191317), FRAC_CONST(0.032511627460281) },
3304 { FRAC_CONST(0.031822872441171), FRAC_CONST(0.032720607007302) },
3305 { FRAC_CONST(0.031608036505083), FRAC_CONST(0.032928184912422) },
3306 { FRAC_CONST(0.031391846585912), FRAC_CONST(0.033134352283693) },
3307 { FRAC_CONST(0.031174311944513), FRAC_CONST(0.033339100289593) },
3308 { FRAC_CONST(0.030955441899347), FRAC_CONST(0.033542420159397) },
3309 { FRAC_CONST(0.030735245826077), FRAC_CONST(0.033744303183559) },
3310 { FRAC_CONST(0.030513733157171), FRAC_CONST(0.033944740714083) },
3311 { FRAC_CONST(0.030290913381494), FRAC_CONST(0.034143724164891) },
3312 { FRAC_CONST(0.030066796043904), FRAC_CONST(0.034341245012195) },
3313 { FRAC_CONST(0.029841390744841), FRAC_CONST(0.034537294794860) },
3314 { FRAC_CONST(0.029614707139919), FRAC_CONST(0.034731865114764) },
3315 { FRAC_CONST(0.029386754939508), FRAC_CONST(0.034924947637164) },
3316 { FRAC_CONST(0.029157543908322), FRAC_CONST(0.035116534091046) },
3317 { FRAC_CONST(0.028927083864999), FRAC_CONST(0.035306616269485) },
3318 { FRAC_CONST(0.028695384681680), FRAC_CONST(0.035495186029992) },
3319 { FRAC_CONST(0.028462456283587), FRAC_CONST(0.035682235294866) },
3320 { FRAC_CONST(0.028228308648598), FRAC_CONST(0.035867756051541) },
3321 { FRAC_CONST(0.027992951806817), FRAC_CONST(0.036051740352923) },
3322 { FRAC_CONST(0.027756395840148), FRAC_CONST(0.036234180317738) },
3323 { FRAC_CONST(0.027518650881862), FRAC_CONST(0.036415068130865) },
3324 { FRAC_CONST(0.027279727116161), FRAC_CONST(0.036594396043672) },
3325 { FRAC_CONST(0.027039634777745), FRAC_CONST(0.036772156374348) },
3326 { FRAC_CONST(0.026798384151369), FRAC_CONST(0.036948341508233) },
3327 { FRAC_CONST(0.026555985571409), FRAC_CONST(0.037122943898140) },
3328 { FRAC_CONST(0.026312449421412), FRAC_CONST(0.037295956064686) },
3329 { FRAC_CONST(0.026067786133656), FRAC_CONST(0.037467370596605) },
3330 { FRAC_CONST(0.025822006188702), FRAC_CONST(0.037637180151068) },
3331 { FRAC_CONST(0.025575120114946), FRAC_CONST(0.037805377454000) },
3332 { FRAC_CONST(0.025327138488165), FRAC_CONST(0.037971955300388) },
3333 { FRAC_CONST(0.025078071931066), FRAC_CONST(0.038136906554591) },
3334 { FRAC_CONST(0.024827931112832), FRAC_CONST(0.038300224150647) },
3335 { FRAC_CONST(0.024576726748663), FRAC_CONST(0.038461901092573) },
3336 { FRAC_CONST(0.024324469599317), FRAC_CONST(0.038621930454668) },
3337 { FRAC_CONST(0.024071170470652), FRAC_CONST(0.038780305381806) },
3338 { FRAC_CONST(0.023816840213160), FRAC_CONST(0.038937019089732) },
3339 { FRAC_CONST(0.023561489721501), FRAC_CONST(0.039092064865353) },
3340 { FRAC_CONST(0.023305129934041), FRAC_CONST(0.039245436067023) },
3341 { FRAC_CONST(0.023047771832380), FRAC_CONST(0.039397126124832) },
3342 { FRAC_CONST(0.022789426440883), FRAC_CONST(0.039547128540881) },
3343 { FRAC_CONST(0.022530104826206), FRAC_CONST(0.039695436889566) },
3344 { FRAC_CONST(0.022269818096825), FRAC_CONST(0.039842044817851) },
3345 { FRAC_CONST(0.022008577402555), FRAC_CONST(0.039986946045542) },
3346 { FRAC_CONST(0.021746393934081), FRAC_CONST(0.040130134365550) },
3347 { FRAC_CONST(0.021483278922467), FRAC_CONST(0.040271603644166) },
3348 { FRAC_CONST(0.021219243638687), FRAC_CONST(0.040411347821316) },
3349 { FRAC_CONST(0.020954299393132), FRAC_CONST(0.040549360910825) },
3350 { FRAC_CONST(0.020688457535133), FRAC_CONST(0.040685637000671) },
3351 { FRAC_CONST(0.020421729452469), FRAC_CONST(0.040820170253240) },
3352 { FRAC_CONST(0.020154126570884), FRAC_CONST(0.040952954905576) },
3353 { FRAC_CONST(0.019885660353596), FRAC_CONST(0.041083985269625) },
3354 { FRAC_CONST(0.019616342300802), FRAC_CONST(0.041213255732484) },
3355 { FRAC_CONST(0.019346183949192), FRAC_CONST(0.041340760756635) },
3356 { FRAC_CONST(0.019075196871451), FRAC_CONST(0.041466494880189) },
3357 { FRAC_CONST(0.018803392675763), FRAC_CONST(0.041590452717113) },
3358 { FRAC_CONST(0.018530783005316), FRAC_CONST(0.041712628957466) },
3359 { FRAC_CONST(0.018257379537800), FRAC_CONST(0.041833018367625) },
3360 { FRAC_CONST(0.017983193984910), FRAC_CONST(0.041951615790509) },
3361 { FRAC_CONST(0.017708238091842), FRAC_CONST(0.042068416145797) },
3362 { FRAC_CONST(0.017432523636792), FRAC_CONST(0.042183414430153) },
3363 { FRAC_CONST(0.017156062430449), FRAC_CONST(0.042296605717432) },
3364 { FRAC_CONST(0.016878866315491), FRAC_CONST(0.042407985158896) },
3365 { FRAC_CONST(0.016600947166078), FRAC_CONST(0.042517547983420) },
3366 { FRAC_CONST(0.016322316887341), FRAC_CONST(0.042625289497698) },
3367 { FRAC_CONST(0.016042987414872), FRAC_CONST(0.042731205086442) },
3368 { FRAC_CONST(0.015762970714219), FRAC_CONST(0.042835290212581) },
3369 { FRAC_CONST(0.015482278780363), FRAC_CONST(0.042937540417454) },
3370 { FRAC_CONST(0.015200923637213), FRAC_CONST(0.043037951321002) },
3371 { FRAC_CONST(0.014918917337087), FRAC_CONST(0.043136518621958) },
3372 { FRAC_CONST(0.014636271960196), FRAC_CONST(0.043233238098025) },
3373 { FRAC_CONST(0.014352999614128), FRAC_CONST(0.043328105606063) },
3374 { FRAC_CONST(0.014069112433327), FRAC_CONST(0.043421117082265) },
3375 { FRAC_CONST(0.013784622578575), FRAC_CONST(0.043512268542327) },
3376 { FRAC_CONST(0.013499542236471), FRAC_CONST(0.043601556081625) },
3377 { FRAC_CONST(0.013213883618907), FRAC_CONST(0.043688975875378) },
3378 { FRAC_CONST(0.012927658962548), FRAC_CONST(0.043774524178812) },
3379 { FRAC_CONST(0.012640880528305), FRAC_CONST(0.043858197327323) },
3380 { FRAC_CONST(0.012353560600813), FRAC_CONST(0.043939991736633) },
3381 { FRAC_CONST(0.012065711487901), FRAC_CONST(0.044019903902940) },
3382 { FRAC_CONST(0.011777345520066), FRAC_CONST(0.044097930403073) },
3383 { FRAC_CONST(0.011488475049948), FRAC_CONST(0.044174067894638) },
3384 { FRAC_CONST(0.011199112451794), FRAC_CONST(0.044248313116156) },
3385 { FRAC_CONST(0.010909270120937), FRAC_CONST(0.044320662887211) },
3386 { FRAC_CONST(0.010618960473257), FRAC_CONST(0.044391114108577) },
3387 { FRAC_CONST(0.010328195944653), FRAC_CONST(0.044459663762361) },
3388 { FRAC_CONST(0.010036988990509), FRAC_CONST(0.044526308912122) },
3389 { FRAC_CONST(0.009745352085163), FRAC_CONST(0.044591046703005) },
3390 { FRAC_CONST(0.009453297721368), FRAC_CONST(0.044653874361857) },
3391 { FRAC_CONST(0.009160838409762), FRAC_CONST(0.044714789197351) },
3392 { FRAC_CONST(0.008867986678328), FRAC_CONST(0.044773788600099) },
3393 { FRAC_CONST(0.008574755071860), FRAC_CONST(0.044830870042761) },
3394 { FRAC_CONST(0.008281156151424), FRAC_CONST(0.044886031080160) },
3395 { FRAC_CONST(0.007987202493820), FRAC_CONST(0.044939269349379) },
3396 { FRAC_CONST(0.007692906691044), FRAC_CONST(0.044990582569869) },
3397 { FRAC_CONST(0.007398281349750), FRAC_CONST(0.045039968543542) },
3398 { FRAC_CONST(0.007103339090706), FRAC_CONST(0.045087425154868) },
3399 { FRAC_CONST(0.006808092548258), FRAC_CONST(0.045132950370962) },
3400 { FRAC_CONST(0.006512554369783), FRAC_CONST(0.045176542241676) },
3401 { FRAC_CONST(0.006216737215155), FRAC_CONST(0.045218198899680) },
3402 { FRAC_CONST(0.005920653756196), FRAC_CONST(0.045257918560541) },
3403 { FRAC_CONST(0.005624316676135), FRAC_CONST(0.045295699522801) },
3404 { FRAC_CONST(0.005327738669067), FRAC_CONST(0.045331540168049) },
3405 { FRAC_CONST(0.005030932439406), FRAC_CONST(0.045365438960992) },
3406 { FRAC_CONST(0.004733910701344), FRAC_CONST(0.045397394449517) },
3407 { FRAC_CONST(0.004436686178303), FRAC_CONST(0.045427405264758) },
3408 { FRAC_CONST(0.004139271602393), FRAC_CONST(0.045455470121152) },
3409 { FRAC_CONST(0.003841679713863), FRAC_CONST(0.045481587816494) },
3410 { FRAC_CONST(0.003543923260561), FRAC_CONST(0.045505757231988) },
3411 { FRAC_CONST(0.003246014997382), FRAC_CONST(0.045527977332297) },
3412 { FRAC_CONST(0.002947967685724), FRAC_CONST(0.045548247165585) },
3413 { FRAC_CONST(0.002649794092941), FRAC_CONST(0.045566565863562) },
3414 { FRAC_CONST(0.002351506991799), FRAC_CONST(0.045582932641515) },
3415 { FRAC_CONST(0.002053119159924), FRAC_CONST(0.045597346798344) },
3416 { FRAC_CONST(0.001754643379257), FRAC_CONST(0.045609807716597) },
3417 { FRAC_CONST(0.001456092435508), FRAC_CONST(0.045620314862489) },
3418 { FRAC_CONST(0.001157479117605), FRAC_CONST(0.045628867785927) },
3419 { FRAC_CONST(0.000858816217149), FRAC_CONST(0.045635466120535) },
3420 { FRAC_CONST(0.000560116527865), FRAC_CONST(0.045640109583661) },
3421 { FRAC_CONST(0.000261392845053), FRAC_CONST(0.045642797976394) }
3422};
3423#endif // LD_DEC
3424
3425/* 60 (N/4) complex twiddle factors */
3426ALIGN static const complex_t mdct_tab_240[] =
3427{
3428 { FRAC_CONST(0.091286604111815), FRAC_CONST(0.000298735779793) },
3429 { FRAC_CONST(0.091247502481454), FRAC_CONST(0.002688238127538) },
3430 { FRAC_CONST(0.091145864370807), FRAC_CONST(0.005075898091152) },
3431 { FRAC_CONST(0.090981759437558), FRAC_CONST(0.007460079287760) },
3432 { FRAC_CONST(0.090755300151030), FRAC_CONST(0.009839147718664) },
3433 { FRAC_CONST(0.090466641715108), FRAC_CONST(0.012211472889198) },
3434 { FRAC_CONST(0.090115981961863), FRAC_CONST(0.014575428926191) },
3435 { FRAC_CONST(0.089703561215976), FRAC_CONST(0.016929395692256) },
3436 { FRAC_CONST(0.089229662130024), FRAC_CONST(0.019271759896156) },
3437 { FRAC_CONST(0.088694609490769), FRAC_CONST(0.021600916198470) },
3438 { FRAC_CONST(0.088098769996564), FRAC_CONST(0.023915268311810) },
3439 { FRAC_CONST(0.087442552006035), FRAC_CONST(0.026213230094844) },
3440 { FRAC_CONST(0.086726405258214), FRAC_CONST(0.028493226639351) },
3441 { FRAC_CONST(0.085950820564309), FRAC_CONST(0.030753695349588) },
3442 { FRAC_CONST(0.085116329471329), FRAC_CONST(0.032993087013213) },
3443 { FRAC_CONST(0.084223503897785), FRAC_CONST(0.035209866863042) },
3444 { FRAC_CONST(0.083272955741727), FRAC_CONST(0.037402515628894) },
3445 { FRAC_CONST(0.082265336461381), FRAC_CONST(0.039569530578832) },
3446 { FRAC_CONST(0.081201336628670), FRAC_CONST(0.041709426549053) },
3447 { FRAC_CONST(0.080081685455930), FRAC_CONST(0.043820736961749) },
3448 { FRAC_CONST(0.078907150296148), FRAC_CONST(0.045902014830227) },
3449 { FRAC_CONST(0.077678536117054), FRAC_CONST(0.047951833750597) },
3450 { FRAC_CONST(0.076396684949434), FRAC_CONST(0.049968788879362) },
3451 { FRAC_CONST(0.075062475310050), FRAC_CONST(0.051951497896226) },
3452 { FRAC_CONST(0.073676821599542), FRAC_CONST(0.053898601951466) },
3453 { FRAC_CONST(0.072240673475749), FRAC_CONST(0.055808766597225) },
3454 { FRAC_CONST(0.070755015202858), FRAC_CONST(0.057680682702068) },
3455 { FRAC_CONST(0.069220864976840), FRAC_CONST(0.059513067348201) },
3456 { FRAC_CONST(0.067639274227625), FRAC_CONST(0.061304664710718) },
3457 { FRAC_CONST(0.066011326898512), FRAC_CONST(0.063054246918278) },
3458 { FRAC_CONST(0.064338138703282), FRAC_CONST(0.064760614894630) },
3459 { FRAC_CONST(0.062620856361546), FRAC_CONST(0.066422599180399) },
3460 { FRAC_CONST(0.060860656812842), FRAC_CONST(0.068039060734572) },
3461 { FRAC_CONST(0.059058746410016), FRAC_CONST(0.069608891715145) },
3462 { FRAC_CONST(0.057216360092450), FRAC_CONST(0.071131016238378) },
3463 { FRAC_CONST(0.055334760539699), FRAC_CONST(0.072604391116154) },
3464 { FRAC_CONST(0.053415237306106), FRAC_CONST(0.074028006570930) },
3465 { FRAC_CONST(0.051459105937014), FRAC_CONST(0.075400886927784) },
3466 { FRAC_CONST(0.049467707067153), FRAC_CONST(0.076722091283096) },
3467 { FRAC_CONST(0.047442405501835), FRAC_CONST(0.077990714149396) },
3468 { FRAC_CONST(0.045384589281588), FRAC_CONST(0.079205886075941) },
3469 { FRAC_CONST(0.043295668730857), FRAC_CONST(0.080366774244592) },
3470 { FRAC_CONST(0.041177075491445), FRAC_CONST(0.081472583040586) },
3471 { FRAC_CONST(0.039030261541332), FRAC_CONST(0.082522554597810) },
3472 { FRAC_CONST(0.036856698199564), FRAC_CONST(0.083515969318206) },
3473 { FRAC_CONST(0.034657875117883), FRAC_CONST(0.084452146364948) },
3474 { FRAC_CONST(0.032435299259796), FRAC_CONST(0.085330444129049) },
3475 { FRAC_CONST(0.030190493867775), FRAC_CONST(0.086150260669096) },
3476 { FRAC_CONST(0.027924997419306), FRAC_CONST(0.086911034123781) },
3477 { FRAC_CONST(0.025640362572491), FRAC_CONST(0.087612243096981) },
3478 { FRAC_CONST(0.023338155101933), FRAC_CONST(0.088253407015092) },
3479 { FRAC_CONST(0.021019952825636), FRAC_CONST(0.088834086456390) },
3480 { FRAC_CONST(0.018687344523641), FRAC_CONST(0.089353883452193) },
3481 { FRAC_CONST(0.016341928849164), FRAC_CONST(0.089812441759604) },
3482 { FRAC_CONST(0.013985313232951), FRAC_CONST(0.090209447105664) },
3483 { FRAC_CONST(0.011619112781631), FRAC_CONST(0.090544627402740) },
3484 { FRAC_CONST(0.009244949170797), FRAC_CONST(0.090817752935000) },
3485 { FRAC_CONST(0.006864449533597), FRAC_CONST(0.091028636515846) },
3486 { FRAC_CONST(0.004479245345574), FRAC_CONST(0.091177133616206) },
3487 { FRAC_CONST(0.002090971306534), FRAC_CONST(0.091263142463585) }
3488};
3489#endif // ALLOW_SMALL_FRAMELENGTH
3490
3491#ifdef SSR_DEC
3492/* 128 (N/4) complex twiddle factors */
3493ALIGN static const complex_t mdct_tab_512[] =
3494{
3495 { FRAC_CONST(0.062499926465731), FRAC_CONST(0.000095873761643) },
3496 { FRAC_CONST(0.062494043817678), FRAC_CONST(0.000862836783004) },
3497 { FRAC_CONST(0.062478749796497), FRAC_CONST(0.001629669864319) },
3498 { FRAC_CONST(0.062454046705412), FRAC_CONST(0.002396257523347) },
3499 { FRAC_CONST(0.062419938264617), FRAC_CONST(0.003162484314806) },
3500 { FRAC_CONST(0.062376429610718), FRAC_CONST(0.003928234847760) },
3501 { FRAC_CONST(0.062323527295958), FRAC_CONST(0.004693393802995) },
3502 { FRAC_CONST(0.062261239287231), FRAC_CONST(0.005457845950387) },
3503 { FRAC_CONST(0.062189574964882), FRAC_CONST(0.006221476166254) },
3504 { FRAC_CONST(0.062108545121295), FRAC_CONST(0.006984169450695) },
3505 { FRAC_CONST(0.062018161959266), FRAC_CONST(0.007745810944907) },
3506 { FRAC_CONST(0.061918439090167), FRAC_CONST(0.008506285948482) },
3507 { FRAC_CONST(0.061809391531894), FRAC_CONST(0.009265479936681) },
3508 { FRAC_CONST(0.061691035706609), FRAC_CONST(0.010023278577683) },
3509 { FRAC_CONST(0.061563389438265), FRAC_CONST(0.010779567749800) },
3510 { FRAC_CONST(0.061426471949919), FRAC_CONST(0.011534233558664) },
3511 { FRAC_CONST(0.061280303860842), FRAC_CONST(0.012287162354380) },
3512 { FRAC_CONST(0.061124907183410), FRAC_CONST(0.013038240748641) },
3513 { FRAC_CONST(0.060960305319791), FRAC_CONST(0.013787355631805) },
3514 { FRAC_CONST(0.060786523058421), FRAC_CONST(0.014534394189923) },
3515 { FRAC_CONST(0.060603586570268), FRAC_CONST(0.015279243921739) },
3516 { FRAC_CONST(0.060411523404896), FRAC_CONST(0.016021792655621) },
3517 { FRAC_CONST(0.060210362486310), FRAC_CONST(0.016761928566463) },
3518 { FRAC_CONST(0.060000134108604), FRAC_CONST(0.017499540192517) },
3519 { FRAC_CONST(0.059780869931400), FRAC_CONST(0.018234516452187) },
3520 { FRAC_CONST(0.059552602975075), FRAC_CONST(0.018966746660751) },
3521 { FRAC_CONST(0.059315367615794), FRAC_CONST(0.019696120547033) },
3522 { FRAC_CONST(0.059069199580329), FRAC_CONST(0.020422528270008) },
3523 { FRAC_CONST(0.058814135940681), FRAC_CONST(0.021145860435346) },
3524 { FRAC_CONST(0.058550215108495), FRAC_CONST(0.021866008111883) },
3525 { FRAC_CONST(0.058277476829279), FRAC_CONST(0.022582862848028) },
3526 { FRAC_CONST(0.057995962176414), FRAC_CONST(0.023296316688095) },
3527 { FRAC_CONST(0.057705713544970), FRAC_CONST(0.024006262188558) },
3528 { FRAC_CONST(0.057406774645326), FRAC_CONST(0.024712592434239) },
3529 { FRAC_CONST(0.057099190496578), FRAC_CONST(0.025415201054398) },
3530 { FRAC_CONST(0.056783007419769), FRAC_CONST(0.026113982238763) },
3531 { FRAC_CONST(0.056458273030907), FRAC_CONST(0.026808830753458) },
3532 { FRAC_CONST(0.056125036233796), FRAC_CONST(0.027499641956852) },
3533 { FRAC_CONST(0.055783347212673), FRAC_CONST(0.028186311815319) },
3534 { FRAC_CONST(0.055433257424646), FRAC_CONST(0.028868736918904) },
3535 { FRAC_CONST(0.055074819591951), FRAC_CONST(0.029546814496896) },
3536 { FRAC_CONST(0.054708087694007), FRAC_CONST(0.030220442433307) },
3537 { FRAC_CONST(0.054333116959288), FRAC_CONST(0.030889519282247) },
3538 { FRAC_CONST(0.053949963857008), FRAC_CONST(0.031553944283204) },
3539 { FRAC_CONST(0.053558686088614), FRAC_CONST(0.032213617376216) },
3540 { FRAC_CONST(0.053159342579100), FRAC_CONST(0.032868439216943) },
3541 { FRAC_CONST(0.052751993468129), FRAC_CONST(0.033518311191623) },
3542 { FRAC_CONST(0.052336700100979), FRAC_CONST(0.034163135431927) },
3543 { FRAC_CONST(0.051913525019303), FRAC_CONST(0.034802814829698) },
3544 { FRAC_CONST(0.051482531951712), FRAC_CONST(0.035437253051569) },
3545 { FRAC_CONST(0.051043785804177), FRAC_CONST(0.036066354553480) },
3546 { FRAC_CONST(0.050597352650253), FRAC_CONST(0.036690024595057) },
3547 { FRAC_CONST(0.050143299721132), FRAC_CONST(0.037308169253887) },
3548 { FRAC_CONST(0.049681695395515), FRAC_CONST(0.037920695439658) },
3549 { FRAC_CONST(0.049212609189314), FRAC_CONST(0.038527510908178) },
3550 { FRAC_CONST(0.048736111745188), FRAC_CONST(0.039128524275271) },
3551 { FRAC_CONST(0.048252274821899), FRAC_CONST(0.039723645030535) },
3552 { FRAC_CONST(0.047761171283507), FRAC_CONST(0.040312783550971) },
3553 { FRAC_CONST(0.047262875088400), FRAC_CONST(0.040895851114488) },
3554 { FRAC_CONST(0.046757461278150), FRAC_CONST(0.041472759913252) },
3555 { FRAC_CONST(0.046245005966220), FRAC_CONST(0.042043423066923) },
3556 { FRAC_CONST(0.045725586326493), FRAC_CONST(0.042607754635728) },
3557 { FRAC_CONST(0.045199280581658), FRAC_CONST(0.043165669633408) },
3558 { FRAC_CONST(0.044666167991423), FRAC_CONST(0.043717084040018) },
3559 { FRAC_CONST(0.044126328840584), FRAC_CONST(0.044261914814575) },
3560 { FRAC_CONST(0.043579844426930), FRAC_CONST(0.044800079907569) },
3561 { FRAC_CONST(0.043026797049006), FRAC_CONST(0.045331498273316) },
3562 { FRAC_CONST(0.042467269993710), FRAC_CONST(0.045856089882166) },
3563 { FRAC_CONST(0.041901347523761), FRAC_CONST(0.046373775732552) },
3564 { FRAC_CONST(0.041329114865000), FRAC_CONST(0.046884477862888) },
3565 { FRAC_CONST(0.040750658193560), FRAC_CONST(0.047388119363313) },
3566 { FRAC_CONST(0.040166064622889), FRAC_CONST(0.047884624387270) },
3567 { FRAC_CONST(0.039575422190629), FRAC_CONST(0.048373918162926) },
3568 { FRAC_CONST(0.038978819845356), FRAC_CONST(0.048855927004441) },
3569 { FRAC_CONST(0.038376347433190), FRAC_CONST(0.049330578323055) },
3570 { FRAC_CONST(0.037768095684260), FRAC_CONST(0.049797800638026) },
3571 { FRAC_CONST(0.037154156199042), FRAC_CONST(0.050257523587392) },
3572 { FRAC_CONST(0.036534621434563), FRAC_CONST(0.050709677938566) },
3573 { FRAC_CONST(0.035909584690482), FRAC_CONST(0.051154195598769) },
3574 { FRAC_CONST(0.035279140095032), FRAC_CONST(0.051591009625274) },
3575 { FRAC_CONST(0.034643382590851), FRAC_CONST(0.052020054235496) },
3576 { FRAC_CONST(0.034002407920680), FRAC_CONST(0.052441264816895) },
3577 { FRAC_CONST(0.033356312612947), FRAC_CONST(0.052854577936706) },
3578 { FRAC_CONST(0.032705193967229), FRAC_CONST(0.053259931351495) },
3579 { FRAC_CONST(0.032049150039598), FRAC_CONST(0.053657264016528) },
3580 { FRAC_CONST(0.031388279627857), FRAC_CONST(0.054046516094966) },
3581 { FRAC_CONST(0.030722682256659), FRAC_CONST(0.054427628966880) },
3582 { FRAC_CONST(0.030052458162521), FRAC_CONST(0.054800545238072) },
3583 { FRAC_CONST(0.029377708278725), FRAC_CONST(0.055165208748723) },
3584 { FRAC_CONST(0.028698534220122), FRAC_CONST(0.055521564581850) },
3585 { FRAC_CONST(0.028015038267826), FRAC_CONST(0.055869559071575) },
3586 { FRAC_CONST(0.027327323353815), FRAC_CONST(0.056209139811209) },
3587 { FRAC_CONST(0.026635493045425), FRAC_CONST(0.056540255661140) },
3588 { FRAC_CONST(0.025939651529755), FRAC_CONST(0.056862856756541) },
3589 { FRAC_CONST(0.025239903597978), FRAC_CONST(0.057176894514872) },
3590 { FRAC_CONST(0.024536354629559), FRAC_CONST(0.057482321643202) },
3591 { FRAC_CONST(0.023829110576385), FRAC_CONST(0.057779092145329) },
3592 { FRAC_CONST(0.023118277946808), FRAC_CONST(0.058067161328707) },
3593 { FRAC_CONST(0.022403963789609), FRAC_CONST(0.058346485811177) },
3594 { FRAC_CONST(0.021686275677870), FRAC_CONST(0.058617023527499) },
3595 { FRAC_CONST(0.020965321692783), FRAC_CONST(0.058878733735689) },
3596 { FRAC_CONST(0.020241210407366), FRAC_CONST(0.059131577023150) },
3597 { FRAC_CONST(0.019514050870114), FRAC_CONST(0.059375515312615) },
3598 { FRAC_CONST(0.018783952588580), FRAC_CONST(0.059610511867874) },
3599 { FRAC_CONST(0.018051025512878), FRAC_CONST(0.059836531299311) },
3600 { FRAC_CONST(0.017315380019131), FRAC_CONST(0.060053539569230) },
3601 { FRAC_CONST(0.016577126892844), FRAC_CONST(0.060261503996984) },
3602 { FRAC_CONST(0.015836377312223), FRAC_CONST(0.060460393263896) },
3603 { FRAC_CONST(0.015093242831429), FRAC_CONST(0.060650177417972) },
3604 { FRAC_CONST(0.014347835363782), FRAC_CONST(0.060830827878419) },
3605 { FRAC_CONST(0.013600267164905), FRAC_CONST(0.061002317439940) },
3606 { FRAC_CONST(0.012850650815819), FRAC_CONST(0.061164620276839) },
3607 { FRAC_CONST(0.012099099205988), FRAC_CONST(0.061317711946905) },
3608 { FRAC_CONST(0.011345725516320), FRAC_CONST(0.061461569395097) },
3609 { FRAC_CONST(0.010590643202123), FRAC_CONST(0.061596170957011) },
3610 { FRAC_CONST(0.009833965976015), FRAC_CONST(0.061721496362147) },
3611 { FRAC_CONST(0.009075807790803), FRAC_CONST(0.061837526736961) },
3612 { FRAC_CONST(0.008316282822321), FRAC_CONST(0.061944244607705) },
3613 { FRAC_CONST(0.007555505452236), FRAC_CONST(0.062041633903059) },
3614 { FRAC_CONST(0.006793590250821), FRAC_CONST(0.062129679956555) },
3615 { FRAC_CONST(0.006030651959703), FRAC_CONST(0.062208369508780) },
3616 { FRAC_CONST(0.005266805474583), FRAC_CONST(0.062277690709378) },
3617 { FRAC_CONST(0.004502165827931), FRAC_CONST(0.062337633118830) },
3618 { FRAC_CONST(0.003736848171665), FRAC_CONST(0.062388187710030) },
3619 { FRAC_CONST(0.002970967759810), FRAC_CONST(0.062429346869643) },
3620 { FRAC_CONST(0.002204639931138), FRAC_CONST(0.062461104399250) },
3621 { FRAC_CONST(0.001437980091802), FRAC_CONST(0.062483455516285) },
3622 { FRAC_CONST(0.000671103697954), FRAC_CONST(0.062496396854751) }
3623};
3624
3625/* 16 (N/4) complex twiddle factors */
3626ALIGN static const complex_t mdct_tab_64[] =
3627{
3628 { FRAC_CONST(0.176763384336599), FRAC_CONST(0.002169321984356) },
3629 { FRAC_CONST(0.175699589589310), FRAC_CONST(0.019484717553714) },
3630 { FRAC_CONST(0.172943711747111), FRAC_CONST(0.036612464641599) },
3631 { FRAC_CONST(0.168522291420137), FRAC_CONST(0.053387613680577) },
3632 { FRAC_CONST(0.162477909303132), FRAC_CONST(0.069648610815172) },
3633 { FRAC_CONST(0.154868776100077), FRAC_CONST(0.085238853753814) },
3634 { FRAC_CONST(0.145768171923295), FRAC_CONST(0.100008199934509) },
3635 { FRAC_CONST(0.135263740565902), FRAC_CONST(0.113814412479792) },
3636 { FRAC_CONST(0.123456645444178), FRAC_CONST(0.126524530015608) },
3637 { FRAC_CONST(0.110460595338559), FRAC_CONST(0.138016147162030) },
3638 { FRAC_CONST(0.096400749315926), FRAC_CONST(0.148178593363981) },
3639 { FRAC_CONST(0.081412511379371), FRAC_CONST(0.156913998709178) },
3640 { FRAC_CONST(0.065640226453626), FRAC_CONST(0.164138236468888) },
3641 { FRAC_CONST(0.049235790264535), FRAC_CONST(0.169781733284316) },
3642 { FRAC_CONST(0.032357186500177), FRAC_CONST(0.173790139196080) },
3643 { FRAC_CONST(0.015166965341583), FRAC_CONST(0.176124851064031) }
3644};
3645#endif // SSR_DEC
3646
3647#endif // FIXED_POINT
3648
3649#ifdef __cplusplus
3650}
3651#endif
3652#endif
diff --git a/apps/codecs/libfaad/specrec.c b/apps/codecs/libfaad/specrec.c
index fc1beb7e04..87470f54f4 100644
--- a/apps/codecs/libfaad/specrec.c
+++ b/apps/codecs/libfaad/specrec.c
@@ -958,8 +958,7 @@ uint8_t reconstruct_single_channel(NeAACDecHandle hDecoder, ic_stream *ics,
958 if (hDecoder->object_type != SSR) 958 if (hDecoder->object_type != SSR)
959 { 959 {
960#endif 960#endif
961 ifilter_bank(hDecoder->fb, ics->window_sequence, ics->window_shape, 961 ifilter_bank(ics->window_sequence,spec_coef,
962 hDecoder->window_shape_prev[sce->channel], spec_coef,
963 hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel], 962 hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel],
964 hDecoder->object_type, hDecoder->frameLength); 963 hDecoder->object_type, hDecoder->frameLength);
965#ifdef SSR_DEC 964#ifdef SSR_DEC
@@ -1197,12 +1196,10 @@ uint8_t reconstruct_channel_pair(NeAACDecHandle hDecoder, ic_stream *ics1, ic_st
1197 if (hDecoder->object_type != SSR) 1196 if (hDecoder->object_type != SSR)
1198 { 1197 {
1199#endif 1198#endif
1200 ifilter_bank(hDecoder->fb, ics1->window_sequence, ics1->window_shape, 1199 ifilter_bank(ics1->window_sequence, spec_coef1,
1201 hDecoder->window_shape_prev[cpe->channel], spec_coef1,
1202 hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel], 1200 hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel],
1203 hDecoder->object_type, hDecoder->frameLength); 1201 hDecoder->object_type, hDecoder->frameLength);
1204 ifilter_bank(hDecoder->fb, ics2->window_sequence, ics2->window_shape, 1202 ifilter_bank(ics2->window_sequence,spec_coef2,
1205 hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2,
1206 hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel], 1203 hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel],
1207 hDecoder->object_type, hDecoder->frameLength); 1204 hDecoder->object_type, hDecoder->frameLength);
1208#ifdef SSR_DEC 1205#ifdef SSR_DEC
diff --git a/apps/codecs/libfaad/structs.h b/apps/codecs/libfaad/structs.h
index 9fa2029e1d..05a2b52280 100644
--- a/apps/codecs/libfaad/structs.h
+++ b/apps/codecs/libfaad/structs.h
@@ -32,7 +32,7 @@
32extern "C" { 32extern "C" {
33#endif 33#endif
34 34
35#include "cfft.h" 35//#include "cfft.h"
36#ifdef SBR_DEC 36#ifdef SBR_DEC
37#include "sbr_dec.h" 37#include "sbr_dec.h"
38#endif 38#endif
@@ -53,7 +53,7 @@ typedef struct {
53 53
54typedef struct { 54typedef struct {
55 uint16_t N; 55 uint16_t N;
56 cfft_info *cfft; 56 //cfft_info *cfft;
57 complex_t *sincos; 57 complex_t *sincos;
58#ifdef PROFILE 58#ifdef PROFILE
59 int64_t cycles; 59 int64_t cycles;
diff --git a/apps/codecs/libwma/SOURCES b/apps/codecs/libwma/SOURCES
index 213e1da12e..967577d0db 100644
--- a/apps/codecs/libwma/SOURCES
+++ b/apps/codecs/libwma/SOURCES
@@ -1,7 +1,3 @@
1wmadeci.c 1wmadeci.c
2wmafixed.c 2wmafixed.c
3bitstream.c 3bitstream.c
4mdct2.c
5#ifdef CPU_ARM
6mdct_arm.S
7#endif \ No newline at end of file
diff --git a/apps/codecs/libwma/asm_arm.h b/apps/codecs/libwma/asm_arm.h
deleted file mode 100644
index e0ab3e7e20..0000000000
--- a/apps/codecs/libwma/asm_arm.h
+++ /dev/null
@@ -1,343 +0,0 @@
1/********************************************************************
2 * *
3 * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
4 * *
5 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
6 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
7 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
8 * *
9 * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
10 * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
11 * *
12 ********************************************************************
13
14 function: arm7 and later wide math functions
15
16 ********************************************************************/
17#ifdef CPU_ARM
18
19#if !defined(_V_WIDE_MATH) && !defined(_LOW_ACCURACY_)
20#define _V_WIDE_MATH
21
22static inline ogg_int32_t MULT32(ogg_int32_t x, ogg_int32_t y) {
23 int lo,hi;
24 asm volatile("smull\t%0, %1, %2, %3"
25 : "=&r"(lo),"=&r"(hi)
26 : "%r"(x),"r"(y)
27 : "cc");
28 return(hi);
29}
30
31static inline ogg_int32_t MULT31(ogg_int32_t x, ogg_int32_t y) {
32 return MULT32(x,y)<<1;
33}
34
35static inline ogg_int32_t MULT31_SHIFT15(ogg_int32_t x, ogg_int32_t y) {
36 int lo,hi;
37 asm volatile("smull %0, %1, %2, %3\n\t"
38 "movs %0, %0, lsr #15\n\t"
39 "adc %1, %0, %1, lsl #17\n\t"
40 : "=&r"(lo),"=&r"(hi)
41 : "%r"(x),"r"(y)
42 : "cc");
43 return(hi);
44}
45
46#define MB() asm volatile ("" : : : "memory")
47
48#define XPROD32(a, b, t, v, x, y) \
49{ \
50 long l; \
51 asm( "smull %0, %1, %4, %6\n\t" \
52 "smlal %0, %1, %5, %7\n\t" \
53 "rsb %3, %4, #0\n\t" \
54 "smull %0, %2, %5, %6\n\t" \
55 "smlal %0, %2, %3, %7" \
56 : "=&r" (l), "=&r" (x), "=&r" (y), "=r" ((a)) \
57 : "3" ((a)), "r" ((b)), "r" ((t)), "r" ((v)) \
58 : "cc" ); \
59}
60
61static inline void XPROD31(ogg_int32_t a, ogg_int32_t b,
62 ogg_int32_t t, ogg_int32_t v,
63 ogg_int32_t *x, ogg_int32_t *y)
64{
65 int x1, y1, l;
66 asm( "smull %0, %1, %4, %6\n\t"
67 "smlal %0, %1, %5, %7\n\t"
68 "rsb %3, %4, #0\n\t"
69 "smull %0, %2, %5, %6\n\t"
70 "smlal %0, %2, %3, %7"
71 : "=&r" (l), "=&r" (x1), "=&r" (y1), "=r" (a)
72 : "3" (a), "r" (b), "r" (t), "r" (v)
73 : "cc" );
74 *x = x1 << 1;
75 MB();
76 *y = y1 << 1;
77}
78
79static inline void XNPROD31(ogg_int32_t a, ogg_int32_t b,
80 ogg_int32_t t, ogg_int32_t v,
81 ogg_int32_t *x, ogg_int32_t *y)
82{
83 int x1, y1, l;
84 asm( "rsb %2, %4, #0\n\t"
85 "smull %0, %1, %3, %5\n\t"
86 "smlal %0, %1, %2, %6\n\t"
87 "smull %0, %2, %4, %5\n\t"
88 "smlal %0, %2, %3, %6"
89 : "=&r" (l), "=&r" (x1), "=&r" (y1)
90 : "r" (a), "r" (b), "r" (t), "r" (v)
91 : "cc" );
92 *x = x1 << 1;
93 MB();
94 *y = y1 << 1;
95}
96
97#ifndef _V_VECT_OPS
98#define _V_VECT_OPS
99
100/* asm versions of vector operations for block.c, window.c */
101static inline
102void vect_add(ogg_int32_t *x, ogg_int32_t *y, int n)
103{
104 while (n>=4) {
105 asm volatile ("ldmia %[x], {r0, r1, r2, r3};"
106 "ldmia %[y]!, {r4, r5, r6, r7};"
107 "add r0, r0, r4;"
108 "add r1, r1, r5;"
109 "add r2, r2, r6;"
110 "add r3, r3, r7;"
111 "stmia %[x]!, {r0, r1, r2, r3};"
112 : [x] "+r" (x), [y] "+r" (y)
113 : : "r0", "r1", "r2", "r3",
114 "r4", "r5", "r6", "r7",
115 "memory");
116 n -= 4;
117 }
118 /* add final elements */
119 while (n>0) {
120 *x++ += *y++;
121 n--;
122 }
123}
124
125static inline
126void vect_copy(ogg_int32_t *x, ogg_int32_t *y, int n)
127{
128 while (n>=4) {
129 asm volatile ("ldmia %[y]!, {r0, r1, r2, r3};"
130 "stmia %[x]!, {r0, r1, r2, r3};"
131 : [x] "+r" (x), [y] "+r" (y)
132 : : "r0", "r1", "r2", "r3",
133 "memory");
134 n -= 4;
135 }
136 /* copy final elements */
137 while (n>0) {
138 *x++ = *y++;
139 n--;
140 }
141}
142
143static inline
144void vect_mult_fw(ogg_int32_t *data, LOOKUP_T *window, int n)
145{
146 while (n>=4) {
147 asm volatile ("ldmia %[d], {r0, r1, r2, r3};"
148 "ldmia %[w]!, {r4, r5, r6, r7};"
149 "smull r8, r9, r0, r4;"
150 "mov r0, r9, lsl #1;"
151 "smull r8, r9, r1, r5;"
152 "mov r1, r9, lsl #1;"
153 "smull r8, r9, r2, r6;"
154 "mov r2, r9, lsl #1;"
155 "smull r8, r9, r3, r7;"
156 "mov r3, r9, lsl #1;"
157 "stmia %[d]!, {r0, r1, r2, r3};"
158 : [d] "+r" (data), [w] "+r" (window)
159 : : "r0", "r1", "r2", "r3",
160 "r4", "r5", "r6", "r7", "r8", "r9",
161 "memory", "cc");
162 n -= 4;
163 }
164 while(n>0) {
165 *data = MULT31(*data, *window);
166 data++;
167 window++;
168 n--;
169 }
170}
171
172static inline
173void vect_mult_bw(ogg_int32_t *data, LOOKUP_T *window, int n)
174{
175 while (n>=4) {
176 asm volatile ("ldmia %[d], {r0, r1, r2, r3};"
177 "ldmda %[w]!, {r4, r5, r6, r7};"
178 "smull r8, r9, r0, r7;"
179 "mov r0, r9, lsl #1;"
180 "smull r8, r9, r1, r6;"
181 "mov r1, r9, lsl #1;"
182 "smull r8, r9, r2, r5;"
183 "mov r2, r9, lsl #1;"
184 "smull r8, r9, r3, r4;"
185 "mov r3, r9, lsl #1;"
186 "stmia %[d]!, {r0, r1, r2, r3};"
187 : [d] "+r" (data), [w] "+r" (window)
188 : : "r0", "r1", "r2", "r3",
189 "r4", "r5", "r6", "r7", "r8", "r9",
190 "memory", "cc");
191 n -= 4;
192 }
193 while(n>0) {
194 *data = MULT31(*data, *window);
195 data++;
196 window--;
197 n--;
198 }
199}
200
201#endif
202
203#endif
204
205#ifndef _V_CLIP_MATH
206#define _V_CLIP_MATH
207
208static inline ogg_int32_t CLIP_TO_15(ogg_int32_t x) {
209 int tmp;
210 asm volatile("subs %1, %0, #32768\n\t"
211 "movpl %0, #0x7f00\n\t"
212 "orrpl %0, %0, #0xff\n"
213 "adds %1, %0, #32768\n\t"
214 "movmi %0, #0x8000"
215 : "+r"(x),"=r"(tmp)
216 :
217 : "cc");
218 return(x);
219}
220
221#endif
222
223#ifndef _V_LSP_MATH_ASM
224#define _V_LSP_MATH_ASM
225
226static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip,
227 ogg_int32_t *qexpp,
228 ogg_int32_t *ilsp,ogg_int32_t wi,
229 ogg_int32_t m){
230
231 ogg_uint32_t qi=*qip,pi=*pip;
232 ogg_int32_t qexp=*qexpp;
233
234 asm("mov r0,%3;"
235 "mov r1,%5,asr#1;"
236 "add r0,r0,r1,lsl#3;"
237 "1:"
238
239 "ldmdb r0!,{r1,r3};"
240 "subs r1,r1,%4;" //ilsp[j]-wi
241 "rsbmi r1,r1,#0;" //labs(ilsp[j]-wi)
242 "umull %0,r2,r1,%0;" //qi*=labs(ilsp[j]-wi)
243
244 "subs r1,r3,%4;" //ilsp[j+1]-wi
245 "rsbmi r1,r1,#0;" //labs(ilsp[j+1]-wi)
246 "umull %1,r3,r1,%1;" //pi*=labs(ilsp[j+1]-wi)
247
248 "cmn r2,r3;" // shift down 16?
249 "beq 0f;"
250 "add %2,%2,#16;"
251 "mov %0,%0,lsr #16;"
252 "orr %0,%0,r2,lsl #16;"
253 "mov %1,%1,lsr #16;"
254 "orr %1,%1,r3,lsl #16;"
255 "0:"
256 "cmp r0,%3;\n"
257 "bhi 1b;\n"
258
259 // odd filter assymetry
260 "ands r0,%5,#1;\n"
261 "beq 2f;\n"
262 "add r0,%3,%5,lsl#2;\n"
263
264 "ldr r1,[r0,#-4];\n"
265 "mov r0,#0x4000;\n"
266
267 "subs r1,r1,%4;\n" //ilsp[j]-wi
268 "rsbmi r1,r1,#0;\n" //labs(ilsp[j]-wi)
269 "umull %0,r2,r1,%0;\n" //qi*=labs(ilsp[j]-wi)
270 "umull %1,r3,r0,%1;\n" //pi*=labs(ilsp[j+1]-wi)
271
272 "cmn r2,r3;\n" // shift down 16?
273 "beq 2f;\n"
274 "add %2,%2,#16;\n"
275 "mov %0,%0,lsr #16;\n"
276 "orr %0,%0,r2,lsl #16;\n"
277 "mov %1,%1,lsr #16;\n"
278 "orr %1,%1,r3,lsl #16;\n"
279
280 //qi=(pi>>shift)*labs(ilsp[j]-wi);
281 //pi=(qi>>shift)*labs(ilsp[j+1]-wi);
282 //qexp+=shift;
283
284 //}
285
286 /* normalize to max 16 sig figs */
287 "2:"
288 "mov r2,#0;"
289 "orr r1,%0,%1;"
290 "tst r1,#0xff000000;"
291 "addne r2,r2,#8;"
292 "movne r1,r1,lsr #8;"
293 "tst r1,#0x00f00000;"
294 "addne r2,r2,#4;"
295 "movne r1,r1,lsr #4;"
296 "tst r1,#0x000c0000;"
297 "addne r2,r2,#2;"
298 "movne r1,r1,lsr #2;"
299 "tst r1,#0x00020000;"
300 "addne r2,r2,#1;"
301 "movne r1,r1,lsr #1;"
302 "tst r1,#0x00010000;"
303 "addne r2,r2,#1;"
304 "mov %0,%0,lsr r2;"
305 "mov %1,%1,lsr r2;"
306 "add %2,%2,r2;"
307
308 : "+r"(qi),"+r"(pi),"+r"(qexp)
309 : "r"(ilsp),"r"(wi),"r"(m)
310 : "r0","r1","r2","r3","cc");
311
312 *qip=qi;
313 *pip=pi;
314 *qexpp=qexp;
315}
316
317static inline void lsp_norm_asm(ogg_uint32_t *qip,ogg_int32_t *qexpp){
318
319 ogg_uint32_t qi=*qip;
320 ogg_int32_t qexp=*qexpp;
321
322 asm("tst %0,#0x0000ff00;"
323 "moveq %0,%0,lsl #8;"
324 "subeq %1,%1,#8;"
325 "tst %0,#0x0000f000;"
326 "moveq %0,%0,lsl #4;"
327 "subeq %1,%1,#4;"
328 "tst %0,#0x0000c000;"
329 "moveq %0,%0,lsl #2;"
330 "subeq %1,%1,#2;"
331 "tst %0,#0x00008000;"
332 "moveq %0,%0,lsl #1;"
333 "subeq %1,%1,#1;"
334 : "+r"(qi),"+r"(qexp)
335 :
336 : "cc");
337 *qip=qi;
338 *qexpp=qexp;
339}
340
341#endif
342#endif
343
diff --git a/apps/codecs/libwma/asm_mcf5249.h b/apps/codecs/libwma/asm_mcf5249.h
deleted file mode 100644
index 6b5c600685..0000000000
--- a/apps/codecs/libwma/asm_mcf5249.h
+++ /dev/null
@@ -1,327 +0,0 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2005 by Pedro Vasconcelos
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
15 *
16 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
17 * KIND, either express or implied.
18 *
19 ****************************************************************************/
20/* asm routines for wide math on the MCF5249 */
21
22//#include "os_types.h"
23
24#if defined(CPU_COLDFIRE)
25
26/* attribute for 16-byte alignment */
27#define LINE_ATTR __attribute__ ((aligned (16)))
28
29#ifndef _V_WIDE_MATH
30#define _V_WIDE_MATH
31
32#define MB()
33
34static inline ogg_int32_t MULT32(ogg_int32_t x, ogg_int32_t y) {
35
36 asm volatile ("mac.l %[x], %[y], %%acc0;" /* multiply & shift */
37 "movclr.l %%acc0, %[x];" /* move & clear acc */
38 "asr.l #1, %[x];" /* no overflow test */
39 : [x] "+&d" (x)
40 : [y] "r" (y)
41 : "cc");
42 return x;
43}
44
45static inline ogg_int32_t MULT31(ogg_int32_t x, ogg_int32_t y) {
46
47 asm volatile ("mac.l %[x], %[y], %%acc0;" /* multiply */
48 "movclr.l %%acc0, %[x];" /* move and clear */
49 : [x] "+&r" (x)
50 : [y] "r" (y)
51 : "cc");
52 return x;
53}
54
55
56static inline ogg_int32_t MULT31_SHIFT15(ogg_int32_t x, ogg_int32_t y) {
57 ogg_int32_t r;
58
59 asm volatile ("mac.l %[x], %[y], %%acc0;" /* multiply */
60 "mulu.l %[y], %[x];" /* get lower half, avoid emac stall */
61 "movclr.l %%acc0, %[r];" /* get higher half */
62 "asl.l #8, %[r];" /* hi<<16, plus one free */
63 "asl.l #8, %[r];"
64 "lsr.l #8, %[x];" /* (unsigned)lo >> 15 */
65 "lsr.l #7, %[x];"
66 "or.l %[x], %[r];" /* logical-or results */
67 : [r] "=&d" (r), [x] "+d" (x)
68 : [y] "d" (y)
69 : "cc");
70 return r;
71}
72
73
74static inline
75void XPROD31(ogg_int32_t a, ogg_int32_t b,
76 ogg_int32_t t, ogg_int32_t v,
77 ogg_int32_t *x, ogg_int32_t *y)
78{
79 asm volatile ("mac.l %[a], %[t], %%acc0;"
80 "mac.l %[b], %[v], %%acc0;"
81 "mac.l %[b], %[t], %%acc1;"
82 "msac.l %[a], %[v], %%acc1;"
83 "movclr.l %%acc0, %[a];"
84 "move.l %[a], (%[x]);"
85 "movclr.l %%acc1, %[a];"
86 "move.l %[a], (%[y]);"
87 : [a] "+&r" (a)
88 : [x] "a" (x), [y] "a" (y),
89 [b] "r" (b), [t] "r" (t), [v] "r" (v)
90 : "cc", "memory");
91}
92
93
94static inline
95void XNPROD31(ogg_int32_t a, ogg_int32_t b,
96 ogg_int32_t t, ogg_int32_t v,
97 ogg_int32_t *x, ogg_int32_t *y)
98{
99 asm volatile ("mac.l %[a], %[t], %%acc0;"
100 "msac.l %[b], %[v], %%acc0;"
101 "mac.l %[b], %[t], %%acc1;"
102 "mac.l %[a], %[v], %%acc1;"
103 "movclr.l %%acc0, %[a];"
104 "move.l %[a], (%[x]);"
105 "movclr.l %%acc1, %[a];"
106 "move.l %[a], (%[y]);"
107 : [a] "+&r" (a)
108 : [x] "a" (x), [y] "a" (y),
109 [b] "r" (b), [t] "r" (t), [v] "r" (v)
110 : "cc", "memory");
111}
112
113
114#if 0 /* canonical Tremor definition */
115#define XPROD32(_a, _b, _t, _v, _x, _y) \
116 { (_x)=MULT32(_a,_t)+MULT32(_b,_v); \
117 (_y)=MULT32(_b,_t)-MULT32(_a,_v); }
118#endif
119
120/* this could lose the LSB by overflow, but i don't think it'll ever happen.
121 if anyone think they can hear a bug caused by this, please try the above
122 version. */
123#define XPROD32(_a, _b, _t, _v, _x, _y) \
124 asm volatile ("mac.l %[a], %[t], %%acc0;" \
125 "mac.l %[b], %[v], %%acc0;" \
126 "mac.l %[b], %[t], %%acc1;" \
127 "msac.l %[a], %[v], %%acc1;" \
128 "movclr.l %%acc0, %[x];" \
129 "asr.l #1, %[x];" \
130 "movclr.l %%acc1, %[y];" \
131 "asr.l #1, %[y];" \
132 : [x] "=&d" (_x), [y] "=&d" (_y) \
133 : [a] "r" (_a), [b] "r" (_b), \
134 [t] "r" (_t), [v] "r" (_v) \
135 : "cc");
136
137#ifndef _V_VECT_OPS
138#define _V_VECT_OPS
139
140/* asm versions of vector operations for block.c, window.c */
141/* assumes MAC is initialized & accumulators cleared */
142static inline
143void vect_add(ogg_int32_t *x, ogg_int32_t *y, int n)
144{
145 /* align to 16 bytes */
146 while(n>0 && (int)x&16) {
147 *x++ += *y++;
148 n--;
149 }
150 asm volatile ("bra 1f;"
151 "0:" /* loop start */
152 "movem.l (%[x]), %%d0-%%d3;" /* fetch values */
153 "movem.l (%[y]), %%a0-%%a3;"
154 /* add */
155 "add.l %%a0, %%d0;"
156 "add.l %%a1, %%d1;"
157 "add.l %%a2, %%d2;"
158 "add.l %%a3, %%d3;"
159 /* store and advance */
160 "movem.l %%d0-%%d3, (%[x]);"
161 "lea.l (4*4, %[x]), %[x];"
162 "lea.l (4*4, %[y]), %[y];"
163 "subq.l #4, %[n];" /* done 4 elements */
164 "1: cmpi.l #4, %[n];"
165 "bge 0b;"
166 : [n] "+d" (n), [x] "+a" (x), [y] "+a" (y)
167 : : "%d0", "%d1", "%d2", "%d3", "%a0", "%a1", "%a2", "%a3",
168 "cc", "memory");
169 /* add final elements */
170 while (n>0) {
171 *x++ += *y++;
172 n--;
173 }
174}
175
176static inline
177void vect_copy(ogg_int32_t *x, ogg_int32_t *y, int n)
178{
179 /* align to 16 bytes */
180 while(n>0 && (int)x&16) {
181 *x++ = *y++;
182 n--;
183 }
184 asm volatile ("bra 1f;"
185 "0:" /* loop start */
186 "movem.l (%[y]), %%d0-%%d3;" /* fetch values */
187 "movem.l %%d0-%%d3, (%[x]);" /* store */
188 "lea.l (4*4, %[x]), %[x];" /* advance */
189 "lea.l (4*4, %[y]), %[y];"
190 "subq.l #4, %[n];" /* done 4 elements */
191 "1: cmpi.l #4, %[n];"
192 "bge 0b;"
193 : [n] "+d" (n), [x] "+a" (x), [y] "+a" (y)
194 : : "%d0", "%d1", "%d2", "%d3", "cc", "memory");
195 /* copy final elements */
196 while (n>0) {
197 *x++ = *y++;
198 n--;
199 }
200}
201
202
203static inline
204void vect_mult_fw(ogg_int32_t *data, LOOKUP_T *window, int n)
205{
206 /* ensure data is aligned to 16-bytes */
207 while(n>0 && (int)data%16) {
208 *data = MULT31(*data, *window);
209 data++;
210 window++;
211 n--;
212 }
213 asm volatile ("movem.l (%[d]), %%d0-%%d3;" /* loop start */
214 "movem.l (%[w]), %%a0-%%a3;" /* pre-fetch registers */
215 "lea.l (4*4, %[w]), %[w];"
216 "bra 1f;" /* jump to loop condition */
217 "0:" /* loop body */
218 /* multiply and load next window values */
219 "mac.l %%d0, %%a0, (%[w])+, %%a0, %%acc0;"
220 "mac.l %%d1, %%a1, (%[w])+, %%a1, %%acc1;"
221 "mac.l %%d2, %%a2, (%[w])+, %%a2, %%acc2;"
222 "mac.l %%d3, %%a3, (%[w])+, %%a3, %%acc3;"
223 "movclr.l %%acc0, %%d0;" /* get the products */
224 "movclr.l %%acc1, %%d1;"
225 "movclr.l %%acc2, %%d2;"
226 "movclr.l %%acc3, %%d3;"
227 /* store and advance */
228 "movem.l %%d0-%%d3, (%[d]);"
229 "lea.l (4*4, %[d]), %[d];"
230 "movem.l (%[d]), %%d0-%%d3;"
231 "subq.l #4, %[n];" /* done 4 elements */
232 "1: cmpi.l #4, %[n];"
233 "bge 0b;"
234 /* multiply final elements */
235 "tst.l %[n];"
236 "beq 1f;" /* n=0 */
237 "mac.l %%d0, %%a0, %%acc0;"
238 "movclr.l %%acc0, %%d0;"
239 "move.l %%d0, (%[d])+;"
240 "subq.l #1, %[n];"
241 "beq 1f;" /* n=1 */
242 "mac.l %%d1, %%a1, %%acc0;"
243 "movclr.l %%acc0, %%d1;"
244 "move.l %%d1, (%[d])+;"
245 "subq.l #1, %[n];"
246 "beq 1f;" /* n=2 */
247 /* otherwise n = 3 */
248 "mac.l %%d2, %%a2, %%acc0;"
249 "movclr.l %%acc0, %%d2;"
250 "move.l %%d2, (%[d])+;"
251 "1:"
252 : [n] "+d" (n), [d] "+a" (data), [w] "+a" (window)
253 : : "%d0", "%d1", "%d2", "%d3", "%a0", "%a1", "%a2", "%a3",
254 "cc", "memory");
255}
256
257static inline
258void vect_mult_bw(ogg_int32_t *data, LOOKUP_T *window, int n)
259{
260 /* ensure at least data is aligned to 16-bytes */
261 while(n>0 && (int)data%16) {
262 *data = MULT31(*data, *window);
263 data++;
264 window--;
265 n--;
266 }
267 asm volatile ("lea.l (-3*4, %[w]), %[w];" /* loop start */
268 "movem.l (%[d]), %%d0-%%d3;" /* pre-fetch registers */
269 "movem.l (%[w]), %%a0-%%a3;"
270 "bra 1f;" /* jump to loop condition */
271 "0:" /* loop body */
272 /* multiply and load next window value */
273 "mac.l %%d0, %%a3, -(%[w]), %%a3, %%acc0;"
274 "mac.l %%d1, %%a2, -(%[w]), %%a2, %%acc1;"
275 "mac.l %%d2, %%a1, -(%[w]), %%a1, %%acc2;"
276 "mac.l %%d3, %%a0, -(%[w]), %%a0, %%acc3;"
277 "movclr.l %%acc0, %%d0;" /* get the products */
278 "movclr.l %%acc1, %%d1;"
279 "movclr.l %%acc2, %%d2;"
280 "movclr.l %%acc3, %%d3;"
281 /* store and advance */
282 "movem.l %%d0-%%d3, (%[d]);"
283 "lea.l (4*4, %[d]), %[d];"
284 "movem.l (%[d]), %%d0-%%d3;"
285 "subq.l #4, %[n];" /* done 4 elements */
286 "1: cmpi.l #4, %[n];"
287 "bge 0b;"
288 /* multiply final elements */
289 "tst.l %[n];"
290 "beq 1f;" /* n=0 */
291 "mac.l %%d0, %%a3, %%acc0;"
292 "movclr.l %%acc0, %%d0;"
293 "move.l %%d0, (%[d])+;"
294 "subq.l #1, %[n];"
295 "beq 1f;" /* n=1 */
296 "mac.l %%d1, %%a2, %%acc0;"
297 "movclr.l %%acc0, %%d1;"
298 "move.l %%d1, (%[d])+;"
299 "subq.l #1, %[n];"
300 "beq 1f;" /* n=2 */
301 /* otherwise n = 3 */
302 "mac.l %%d2, %%a1, %%acc0;"
303 "movclr.l %%acc0, %%d2;"
304 "move.l %%d2, (%[d])+;"
305 "1:"
306 : [n] "+d" (n), [d] "+a" (data), [w] "+a" (window)
307 : : "%d0", "%d1", "%d2", "%d3", "%a0", "%a1", "%a2", "%a3",
308 "cc", "memory");
309}
310
311#endif
312
313#endif
314
315#ifndef _V_CLIP_MATH
316#define _V_CLIP_MATH
317
318/* this is portable C and simple; why not use this as default? */
319static inline ogg_int32_t CLIP_TO_15(register ogg_int32_t x) {
320 register ogg_int32_t hi=32767, lo=-32768;
321 return (x>=hi ? hi : (x<=lo ? lo : x));
322}
323
324#endif
325#else
326#define LINE_ATTR
327#endif
diff --git a/apps/codecs/libwma/fft.c b/apps/codecs/libwma/fft.c
deleted file mode 100644
index f19dac0aed..0000000000
--- a/apps/codecs/libwma/fft.c
+++ /dev/null
@@ -1,153 +0,0 @@
1/*
2 * WMA compatible decoder
3 * Copyright (c) 2002 The FFmpeg Project.
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20//#include "types.h"
21#include "fft.h"
22#include "wmafixed.h"
23
24FFTComplex exptab0[512] IBSS_ATTR;
25
26/* butter fly op */
27#define BF(pre, pim, qre, qim, pre1, pim1, qre1, qim1) \
28{\
29 fixed32 ax, ay, bx, by;\
30 bx=pre1;\
31 by=pim1;\
32 ax=qre1;\
33 ay=qim1;\
34 pre = (bx + ax);\
35 pim = (by + ay);\
36 qre = (bx - ax);\
37 qim = (by - ay);\
38}
39
40
41int fft_calc_unscaled(FFTContext *s, FFTComplex *z)
42{
43 int ln = s->nbits;
44 int j, np, np2;
45 int nblocks, nloops;
46 register FFTComplex *p, *q;
47 // FFTComplex *exptab = s->exptab;
48 int l;
49 fixed32 tmp_re, tmp_im;
50 int tabshift = 10-ln;
51
52 np = 1 << ln;
53
54
55 /* pass 0 */
56
57 p=&z[0];
58 j=(np >> 1);
59 do
60 {
61 BF(p[0].re, p[0].im, p[1].re, p[1].im,
62 p[0].re, p[0].im, p[1].re, p[1].im);
63 p+=2;
64 }
65 while (--j != 0);
66
67 /* pass 1 */
68
69
70 p=&z[0];
71 j=np >> 2;
72 if (s->inverse)
73 {
74 do
75 {
76 BF(p[0].re, p[0].im, p[2].re, p[2].im,
77 p[0].re, p[0].im, p[2].re, p[2].im);
78 BF(p[1].re, p[1].im, p[3].re, p[3].im,
79 p[1].re, p[1].im, -p[3].im, p[3].re);
80 p+=4;
81 }
82 while (--j != 0);
83 }
84 else
85 {
86 do
87 {
88 BF(p[0].re, p[0].im, p[2].re, p[2].im,
89 p[0].re, p[0].im, p[2].re, p[2].im);
90 BF(p[1].re, p[1].im, p[3].re, p[3].im,
91 p[1].re, p[1].im, p[3].im, -p[3].re);
92 p+=4;
93 }
94 while (--j != 0);
95 }
96 /* pass 2 .. ln-1 */
97
98 nblocks = np >> 3;
99 nloops = 1 << 2;
100 np2 = np >> 1;
101 do
102 {
103 p = z;
104 q = z + nloops;
105 for (j = 0; j < nblocks; ++j)
106 {
107 BF(p->re, p->im, q->re, q->im,
108 p->re, p->im, q->re, q->im);
109
110 p++;
111 q++;
112 for(l = nblocks; l < np2; l += nblocks)
113 {
114 CMUL(&tmp_re, &tmp_im, exptab0[(l<<tabshift)].re, exptab0[(l<<tabshift)].im, q->re, q->im);
115 //CMUL(&tmp_re, &tmp_im, exptab[l].re, exptab[l].im, q->re, q->im);
116 BF(p->re, p->im, q->re, q->im,
117 p->re, p->im, tmp_re, tmp_im);
118 p++;
119 q++;
120 }
121
122 p += nloops;
123 q += nloops;
124 }
125 nblocks = nblocks >> 1;
126 nloops = nloops << 1;
127 }
128 while (nblocks != 0);
129 return 0;
130}
131
132int fft_init_global(void)
133{
134 int i, n;
135 fixed32 c1, s1, s2;
136
137 n=1<<10;
138 s2 = 1 ? 1 : -1;
139 for(i=0;i<(n/2);++i)
140 {
141 fixed32 ifix = itofix32(i);
142 fixed32 nfix = itofix32(n);
143 fixed32 res = fixdiv32(ifix,nfix);
144
145 s1 = fsincos(res<<16, &c1);
146
147 exptab0[i].re = c1;
148 exptab0[i].im = s1*s2;
149 }
150
151 return 0;
152}
153
diff --git a/apps/codecs/libwma/fft.h b/apps/codecs/libwma/fft.h
deleted file mode 100644
index f3aaf2fcc8..0000000000
--- a/apps/codecs/libwma/fft.h
+++ /dev/null
@@ -1,43 +0,0 @@
1/*
2 * WMA compatible decoder
3 * Copyright (c) 2002 The FFmpeg Project.
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20#include "types.h"
21
22typedef fixed32 FFTSample;
23
24typedef struct FFTComplex
25{
26 fixed32 re, im;
27}
28FFTComplex;
29
30typedef struct FFTContext
31{
32 int nbits;
33 int inverse;
34 uint16_t *revtab;
35 FFTComplex *exptab;
36 FFTComplex *exptab1; /* only used by SSE code */
37 int (*fft_calc)(struct FFTContext *s, FFTComplex *z);
38}
39FFTContext;
40
41int fft_calc_unscaled(FFTContext *s, FFTComplex *z);
42int fft_init_global(void);
43
diff --git a/apps/codecs/libwma/mdct.c b/apps/codecs/libwma/mdct.c
deleted file mode 100644
index a764f47eed..0000000000
--- a/apps/codecs/libwma/mdct.c
+++ /dev/null
@@ -1,167 +0,0 @@
1/*
2 * WMA compatible decoder
3 * Copyright (c) 2002 The FFmpeg Project.
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20#include "wmafixed.h"
21#include "mdct.h"
22
23/*these are the sin and cos rotations used by the MDCT*/
24
25/*accessed too infrequently to give much speedup in IRAM*/
26
27fixed32 *tcosarray[5], *tsinarray[5];
28fixed32 tcos0[1024], tcos1[512], tcos2[256], tcos3[128], tcos4[64];
29fixed32 tsin0[1024], tsin1[512], tsin2[256], tsin3[128], tsin4[64];
30
31uint16_t revtab0[1024];
32
33/**
34 * init MDCT or IMDCT computation.
35 */
36int ff_mdct_init(MDCTContext *s, int nbits, int inverse)
37{
38 int n, n4, i;
39
40 memset(s, 0, sizeof(*s));
41 n = 1 << nbits; //nbits ranges from 12 to 8 inclusive
42 s->nbits = nbits;
43 s->n = n;
44 n4 = n >> 2;
45 s->tcos = tcosarray[12-nbits];
46 s->tsin = tsinarray[12-nbits];
47 for(i=0;i<n4;i++)
48 {
49
50 fixed32 ip = itofix32(i) + 0x2000;
51 ip = ip >> nbits;
52
53 /*I can't remember why this works, but it seems to agree for ~24 bits, maybe more!*/
54 s->tsin[i] = - fsincos(ip<<16, &(s->tcos[i]));
55 s->tcos[i] *=-1;
56 }
57
58 (&s->fft)->nbits = nbits-2;
59
60 (&s->fft)->inverse = inverse;
61
62 return 0;
63
64}
65
66/**
67 * Compute inverse MDCT of size N = 2^nbits
68 * @param output N samples
69 * @param input N/2 samples
70 * @param tmp N/2 samples
71 */
72void ff_imdct_calc(MDCTContext *s,
73 fixed32 *output,
74 fixed32 *input)
75{
76 int k, n8, n4, n2, n, j,scale;
77 const fixed32 *tcos = s->tcos;
78 const fixed32 *tsin = s->tsin;
79 const fixed32 *in1, *in2;
80 FFTComplex *z1 = (FFTComplex *)output;
81 FFTComplex *z2 = (FFTComplex *)input;
82 int revtabshift = 12 - s->nbits;
83
84 n = 1 << s->nbits;
85
86 n2 = n >> 1;
87 n4 = n >> 2;
88 n8 = n >> 3;
89
90
91 /* pre rotation */
92 in1 = input;
93 in2 = input + n2 - 1;
94
95 for(k = 0; k < n4; k++)
96 {
97 j=revtab0[k<<revtabshift];
98 CMUL(&z1[j].re, &z1[j].im, *in2, *in1, tcos[k], tsin[k]);
99 in1 += 2;
100 in2 -= 2;
101 }
102
103 scale = fft_calc_unscaled(&s->fft, z1);
104
105 /* post rotation + reordering */
106
107 for(k = 0; k < n4; k++)
108 {
109 CMUL(&z2[k].re, &z2[k].im, (z1[k].re), (z1[k].im), tcos[k], tsin[k]);
110 }
111
112 for(k = 0; k < n8; k++)
113 {
114 fixed32 r1,r2,r3,r4,r1n,r2n,r3n;
115
116 r1 = z2[n8 + k].im;
117 r1n = r1 * -1;
118 r2 = z2[n8-1-k].re;
119 r2n = r2 * -1;
120 r3 = z2[k+n8].re;
121 r3n = r3 * -1;
122 r4 = z2[n8-k-1].im;
123
124 output[2*k] = r1n;
125 output[n2-1-2*k] = r1;
126
127 output[2*k+1] = r2;
128 output[n2-1-2*k-1] = r2n;
129
130 output[n2 + 2*k]= r3n;
131 output[n-1- 2*k]= r3n;
132
133 output[n2 + 2*k+1]= r4;
134 output[n-2 - 2 * k] = r4;
135 }
136}
137
138/* init MDCT */
139
140int mdct_init_global(void)
141{
142 int i,j,m;
143
144 /* although seemingly degenerate, these cannot actually be merged together without
145 a substantial increase in error which is unjustified by the tiny memory savings*/
146
147 tcosarray[0] = tcos0; tcosarray[1] = tcos1; tcosarray[2] = tcos2; tcosarray[3] = tcos3;tcosarray[4] = tcos4;
148 tsinarray[0] = tsin0; tsinarray[1] = tsin1; tsinarray[2] = tsin2; tsinarray[3] = tsin3;tsinarray[4] = tsin4;
149
150 /* init the MDCT bit reverse table here rather then in fft_init */
151
152 for(i=0;i<1024;i++) /*hard coded to a 2048 bit rotation*/
153 { /*smaller sizes can reuse the largest*/
154 m=0;
155 for(j=0;j<10;j++)
156 {
157 m |= ((i >> j) & 1) << (10-j-1);
158 }
159
160 revtab0[i]=m;
161 }
162
163 fft_init_global();
164
165 return 0;
166}
167
diff --git a/apps/codecs/libwma/mdct.h b/apps/codecs/libwma/mdct.h
deleted file mode 100644
index 57d65ae9a7..0000000000
--- a/apps/codecs/libwma/mdct.h
+++ /dev/null
@@ -1,37 +0,0 @@
1/*
2 * WMA compatible decoder
3 * Copyright (c) 2002 The FFmpeg Project.
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20//#include "types.h"
21#include "fft.h"
22
23typedef struct MDCTContext
24{
25 int n; /* size of MDCT (i.e. number of input data * 2) */
26 int nbits; /* n = 2^nbits */
27 /* pre/post rotation tables */
28 fixed32 *tcos;
29 fixed32 *tsin;
30 FFTContext fft;
31}
32MDCTContext;
33
34int ff_mdct_init(MDCTContext *s, int nbits, int inverse);
35void ff_imdct_calc(MDCTContext *s, fixed32 *output, fixed32 *input);
36int mdct_init_global(void);
37
diff --git a/apps/codecs/libwma/mdct2.c b/apps/codecs/libwma/mdct2.c
deleted file mode 100644
index c492403b41..0000000000
--- a/apps/codecs/libwma/mdct2.c
+++ /dev/null
@@ -1,522 +0,0 @@
1/********************************************************************
2 * *
3 * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
4 * *
5 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
6 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
7 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
8 * *
9 * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
10 * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
11 * *
12 ********************************************************************
13
14 function: normalized modified discrete cosine transform
15 power of two length transform only [64 <= n ]
16
17
18 Original algorithm adapted long ago from _The use of multirate filter
19 banks for coding of high quality digital audio_, by T. Sporer,
20 K. Brandenburg and B. Edler, collection of the European Signal
21 Processing Conference (EUSIPCO), Amsterdam, June 1992, Vol.1, pp
22 211-214
23
24 The below code implements an algorithm that no longer looks much like
25 that presented in the paper, but the basic structure remains if you
26 dig deep enough to see it.
27
28 This module DOES NOT INCLUDE code to generate/apply the window
29 function. Everybody has their own weird favorite including me... I
30 happen to like the properties of y=sin(.5PI*sin^2(x)), but others may
31 vehemently disagree.
32
33 ********************************************************************/
34
35/*Tremor IMDCT adapted for use with libwmai*/
36
37
38#include "mdct2.h"
39#include "mdct_lookup.h"
40#include <codecs/lib/codeclib.h>
41
42#if defined(CPU_ARM) && CONFIG_CPU != S3C2440
43/* C code is faster on S3C2440 */
44
45extern void mdct_butterfly_32(ogg_int32_t *x);
46extern void mdct_butterfly_generic_loop(ogg_int32_t *x1, ogg_int32_t *x2,
47 LOOKUP_T *T0, int step,
48 LOOKUP_T *Ttop);
49
50static inline void mdct_butterfly_generic(ogg_int32_t *x,int points, int step){
51 mdct_butterfly_generic_loop(x + points, x + (points>>1),
52 sincos_lookup0, step, sincos_lookup0+1024);
53}
54
55#else
56
57/* 8 point butterfly (in place) */
58static inline void mdct_butterfly_8(ogg_int32_t *x){
59 register ogg_int32_t r0 = x[4] + x[0];
60 register ogg_int32_t r1 = x[4] - x[0];
61 register ogg_int32_t r2 = x[5] + x[1];
62 register ogg_int32_t r3 = x[5] - x[1];
63 register ogg_int32_t r4 = x[6] + x[2];
64 register ogg_int32_t r5 = x[6] - x[2];
65 register ogg_int32_t r6 = x[7] + x[3];
66 register ogg_int32_t r7 = x[7] - x[3];
67
68 x[0] = r5 + r3;
69 x[1] = r7 - r1;
70 x[2] = r5 - r3;
71 x[3] = r7 + r1;
72 x[4] = r4 - r0;
73 x[5] = r6 - r2;
74 x[6] = r4 + r0;
75 x[7] = r6 + r2;
76 MB();
77}
78
79/* 16 point butterfly (in place, 4 register) */
80static inline void mdct_butterfly_16(ogg_int32_t *x){
81
82 register ogg_int32_t r0, r1;
83
84 r0 = x[ 0] - x[ 8]; x[ 8] += x[ 0];
85 r1 = x[ 1] - x[ 9]; x[ 9] += x[ 1];
86 x[ 0] = MULT31((r0 + r1) , cPI2_8);
87 x[ 1] = MULT31((r1 - r0) , cPI2_8);
88 MB();
89
90 r0 = x[10] - x[ 2]; x[10] += x[ 2];
91 r1 = x[ 3] - x[11]; x[11] += x[ 3];
92 x[ 2] = r1; x[ 3] = r0;
93 MB();
94
95 r0 = x[12] - x[ 4]; x[12] += x[ 4];
96 r1 = x[13] - x[ 5]; x[13] += x[ 5];
97 x[ 4] = MULT31((r0 - r1) , cPI2_8);
98 x[ 5] = MULT31((r0 + r1) , cPI2_8);
99 MB();
100
101 r0 = x[14] - x[ 6]; x[14] += x[ 6];
102 r1 = x[15] - x[ 7]; x[15] += x[ 7];
103 x[ 6] = r0; x[ 7] = r1;
104 MB();
105
106 mdct_butterfly_8(x);
107 mdct_butterfly_8(x+8);
108}
109
110/* 32 point butterfly (in place, 4 register) */
111static inline void mdct_butterfly_32(ogg_int32_t *x){
112
113 register ogg_int32_t r0, r1;
114
115 r0 = x[30] - x[14]; x[30] += x[14];
116 r1 = x[31] - x[15]; x[31] += x[15];
117 x[14] = r0; x[15] = r1;
118 MB();
119
120 r0 = x[28] - x[12]; x[28] += x[12];
121 r1 = x[29] - x[13]; x[29] += x[13];
122 XNPROD31( r0, r1, cPI1_8, cPI3_8, &x[12], &x[13] );
123 MB();
124
125 r0 = x[26] - x[10]; x[26] += x[10];
126 r1 = x[27] - x[11]; x[27] += x[11];
127 x[10] = MULT31((r0 - r1) , cPI2_8);
128 x[11] = MULT31((r0 + r1) , cPI2_8);
129 MB();
130
131 r0 = x[24] - x[ 8]; x[24] += x[ 8];
132 r1 = x[25] - x[ 9]; x[25] += x[ 9];
133 XNPROD31( r0, r1, cPI3_8, cPI1_8, &x[ 8], &x[ 9] );
134 MB();
135
136 r0 = x[22] - x[ 6]; x[22] += x[ 6];
137 r1 = x[ 7] - x[23]; x[23] += x[ 7];
138 x[ 6] = r1; x[ 7] = r0;
139 MB();
140
141 r0 = x[ 4] - x[20]; x[20] += x[ 4];
142 r1 = x[ 5] - x[21]; x[21] += x[ 5];
143 XPROD31 ( r0, r1, cPI3_8, cPI1_8, &x[ 4], &x[ 5] );
144 MB();
145
146 r0 = x[ 2] - x[18]; x[18] += x[ 2];
147 r1 = x[ 3] - x[19]; x[19] += x[ 3];
148 x[ 2] = MULT31((r1 + r0) , cPI2_8);
149 x[ 3] = MULT31((r1 - r0) , cPI2_8);
150 MB();
151
152 r0 = x[ 0] - x[16]; x[16] += x[ 0];
153 r1 = x[ 1] - x[17]; x[17] += x[ 1];
154 XPROD31 ( r0, r1, cPI1_8, cPI3_8, &x[ 0], &x[ 1] );
155 MB();
156
157 mdct_butterfly_16(x);
158 mdct_butterfly_16(x+16);
159}
160
161/* N/stage point generic N stage butterfly (in place, 4 register) */
162void mdct_butterfly_generic(ogg_int32_t *x,int points, int step)
163 ICODE_ATTR_TREMOR_MDCT;
164void mdct_butterfly_generic(ogg_int32_t *x,int points, int step){
165 LOOKUP_T *T = sincos_lookup0;
166 ogg_int32_t *x1 = x + points - 8;
167 ogg_int32_t *x2 = x + (points>>1) - 8;
168 register ogg_int32_t r0;
169 register ogg_int32_t r1;
170 register ogg_int32_t r2;
171 register ogg_int32_t r3;
172
173 do{
174 r0 = x1[6] - x2[6]; x1[6] += x2[6];
175 r1 = x2[7] - x1[7]; x1[7] += x2[7];
176 r2 = x1[4] - x2[4]; x1[4] += x2[4];
177 r3 = x2[5] - x1[5]; x1[5] += x2[5];
178 XPROD31( r1, r0, T[0], T[1], &x2[6], &x2[7] ); T+=step;
179 XPROD31( r3, r2, T[0], T[1], &x2[4], &x2[5] ); T+=step;
180
181 r0 = x1[2] - x2[2]; x1[2] += x2[2];
182 r1 = x2[3] - x1[3]; x1[3] += x2[3];
183 r2 = x1[0] - x2[0]; x1[0] += x2[0];
184 r3 = x2[1] - x1[1]; x1[1] += x2[1];
185 XPROD31( r1, r0, T[0], T[1], &x2[2], &x2[3] ); T+=step;
186 XPROD31( r3, r2, T[0], T[1], &x2[0], &x2[1] ); T+=step;
187
188 x1-=8; x2-=8;
189 }while(T<sincos_lookup0+1024);
190 do{
191 r0 = x1[6] - x2[6]; x1[6] += x2[6];
192 r1 = x1[7] - x2[7]; x1[7] += x2[7];
193 r2 = x1[4] - x2[4]; x1[4] += x2[4];
194 r3 = x1[5] - x2[5]; x1[5] += x2[5];
195 XNPROD31( r0, r1, T[0], T[1], &x2[6], &x2[7] ); T-=step;
196 XNPROD31( r2, r3, T[0], T[1], &x2[4], &x2[5] ); T-=step;
197
198 r0 = x1[2] - x2[2]; x1[2] += x2[2];
199 r1 = x1[3] - x2[3]; x1[3] += x2[3];
200 r2 = x1[0] - x2[0]; x1[0] += x2[0];
201 r3 = x1[1] - x2[1]; x1[1] += x2[1];
202 XNPROD31( r0, r1, T[0], T[1], &x2[2], &x2[3] ); T-=step;
203 XNPROD31( r2, r3, T[0], T[1], &x2[0], &x2[1] ); T-=step;
204
205 x1-=8; x2-=8;
206 }while(T>sincos_lookup0);
207 do{
208 r0 = x2[6] - x1[6]; x1[6] += x2[6];
209 r1 = x2[7] - x1[7]; x1[7] += x2[7];
210 r2 = x2[4] - x1[4]; x1[4] += x2[4];
211 r3 = x2[5] - x1[5]; x1[5] += x2[5];
212 XPROD31( r0, r1, T[0], T[1], &x2[6], &x2[7] ); T+=step;
213 XPROD31( r2, r3, T[0], T[1], &x2[4], &x2[5] ); T+=step;
214
215 r0 = x2[2] - x1[2]; x1[2] += x2[2];
216 r1 = x2[3] - x1[3]; x1[3] += x2[3];
217 r2 = x2[0] - x1[0]; x1[0] += x2[0];
218 r3 = x2[1] - x1[1]; x1[1] += x2[1];
219 XPROD31( r0, r1, T[0], T[1], &x2[2], &x2[3] ); T+=step;
220 XPROD31( r2, r3, T[0], T[1], &x2[0], &x2[1] ); T+=step;
221
222 x1-=8; x2-=8;
223 }while(T<sincos_lookup0+1024);
224 do{
225 r0 = x1[6] - x2[6]; x1[6] += x2[6];
226 r1 = x2[7] - x1[7]; x1[7] += x2[7];
227 r2 = x1[4] - x2[4]; x1[4] += x2[4];
228 r3 = x2[5] - x1[5]; x1[5] += x2[5];
229 XNPROD31( r1, r0, T[0], T[1], &x2[6], &x2[7] ); T-=step;
230 XNPROD31( r3, r2, T[0], T[1], &x2[4], &x2[5] ); T-=step;
231
232 r0 = x1[2] - x2[2]; x1[2] += x2[2];
233 r1 = x2[3] - x1[3]; x1[3] += x2[3];
234 r2 = x1[0] - x2[0]; x1[0] += x2[0];
235 r3 = x2[1] - x1[1]; x1[1] += x2[1];
236 XNPROD31( r1, r0, T[0], T[1], &x2[2], &x2[3] ); T-=step;
237 XNPROD31( r3, r2, T[0], T[1], &x2[0], &x2[1] ); T-=step;
238
239 x1-=8; x2-=8;
240 }while(T>sincos_lookup0);
241}
242
243#endif /* CPU_ARM */
244
245static inline void mdct_butterflies(ogg_int32_t *x,int points,int shift) {
246
247 int stages=8-shift;
248 int i,j;
249
250 for(i=0;--stages>0;i++){
251 for(j=0;j<(1<<i);j++)
252 mdct_butterfly_generic(x+(points>>i)*j,points>>i,4<<(i+shift));
253 }
254
255 for(j=0;j<points;j+=32)
256 mdct_butterfly_32(x+j);
257}
258
259
260static const unsigned char bitrev[16] ICONST_ATTR =
261 {0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15};
262
263static inline int bitrev12(int x){
264 return bitrev[x>>8]|(bitrev[(x&0x0f0)>>4]<<4)|(((int)bitrev[x&0x00f])<<8);
265}
266
267static inline void mdct_bitreverse(ogg_int32_t *x,int n,int step,int shift) {
268
269 int bit = 0;
270 ogg_int32_t *w0 = x;
271 ogg_int32_t *w1 = x = w0+(n>>1);
272 LOOKUP_T *T = (step>=4)?(sincos_lookup0+(step>>1)):sincos_lookup1;
273 LOOKUP_T *Ttop = T+1024;
274 register ogg_int32_t r2;
275
276 do{
277 register ogg_int32_t r3 = bitrev12(bit++);
278 ogg_int32_t *x0 = x + ((r3 ^ 0xfff)>>shift) -1;
279 ogg_int32_t *x1 = x + (r3>>shift);
280
281 register ogg_int32_t r0 = x0[0] + x1[0];
282 register ogg_int32_t r1 = x1[1] - x0[1];
283
284 XPROD32( r0, r1, T[1], T[0], r2, r3 ); T+=step;
285
286 w1 -= 4;
287
288 r0 = (x0[1] + x1[1])>>1;
289 r1 = (x0[0] - x1[0])>>1;
290 w0[0] = r0 + r2;
291 w0[1] = r1 + r3;
292 w1[2] = r0 - r2;
293 w1[3] = r3 - r1;
294
295 r3 = bitrev12(bit++);
296 x0 = x + ((r3 ^ 0xfff)>>shift) -1;
297 x1 = x + (r3>>shift);
298
299 r0 = x0[0] + x1[0];
300 r1 = x1[1] - x0[1];
301
302 XPROD32( r0, r1, T[1], T[0], r2, r3 ); T+=step;
303
304 r0 = (x0[1] + x1[1])>>1;
305 r1 = (x0[0] - x1[0])>>1;
306 w0[2] = r0 + r2;
307 w0[3] = r1 + r3;
308 w1[0] = r0 - r2;
309 w1[1] = r3 - r1;
310
311 w0 += 4;
312 }while(T<Ttop);
313 do{
314 register ogg_int32_t r3 = bitrev12(bit++);
315 ogg_int32_t *x0 = x + ((r3 ^ 0xfff)>>shift) -1;
316 ogg_int32_t *x1 = x + (r3>>shift);
317
318 register ogg_int32_t r0 = x0[0] + x1[0];
319 register ogg_int32_t r1 = x1[1] - x0[1];
320
321 T-=step; XPROD32( r0, r1, T[0], T[1], r2, r3 );
322
323 w1 -= 4;
324
325 r0 = (x0[1] + x1[1])>>1;
326 r1 = (x0[0] - x1[0])>>1;
327 w0[0] = r0 + r2;
328 w0[1] = r1 + r3;
329 w1[2] = r0 - r2;
330 w1[3] = r3 - r1;
331
332 r3 = bitrev12(bit++);
333 x0 = x + ((r3 ^ 0xfff)>>shift) -1;
334 x1 = x + (r3>>shift);
335
336 r0 = x0[0] + x1[0];
337 r1 = x1[1] - x0[1];
338
339 T-=step; XPROD32( r0, r1, T[0], T[1], r2, r3 );
340
341 r0 = (x0[1] + x1[1])>>1;
342 r1 = (x0[0] - x1[0])>>1;
343 w0[2] = r0 + r2;
344 w0[3] = r1 + r3;
345 w1[0] = r0 - r2;
346 w1[1] = r3 - r1;
347
348 w0 += 4;
349 }while(w0<w1);
350}
351
352
353void mdct_backward(int n, ogg_int32_t *in, ogg_int32_t *out)
354 ICODE_ATTR_TREMOR_MDCT;
355void mdct_backward(int n, ogg_int32_t *in, ogg_int32_t *out) {
356 int n2=n>>1;
357 int n4=n>>2;
358 ogg_int32_t *iX;
359 ogg_int32_t *oX;
360 LOOKUP_T *T;
361 LOOKUP_T *V;
362 int shift;
363 int step;
364 for (shift=6;!(n&(1<<shift));shift++);
365 shift=13-shift;
366 step=2<<shift;
367
368 /* rotate */
369
370 iX = in+n2-7;
371 oX = out+n2+n4;
372 T = sincos_lookup0;
373
374 do{
375 oX-=4;
376 XPROD31( iX[4], iX[6], T[0], T[1], &oX[2], &oX[3] ); T+=step;
377 XPROD31( iX[0], iX[2], T[0], T[1], &oX[0], &oX[1] ); T+=step;
378 iX-=8;
379 }while(iX>=in+n4);
380 do{
381 oX-=4;
382 XPROD31( iX[4], iX[6], T[1], T[0], &oX[2], &oX[3] ); T-=step;
383 XPROD31( iX[0], iX[2], T[1], T[0], &oX[0], &oX[1] ); T-=step;
384 iX-=8;
385 }while(iX>=in);
386
387 iX = in+n2-8;
388 oX = out+n2+n4;
389 T = sincos_lookup0;
390
391 do{
392 T+=step; XNPROD31( iX[6], iX[4], T[0], T[1], &oX[0], &oX[1] );
393 T+=step; XNPROD31( iX[2], iX[0], T[0], T[1], &oX[2], &oX[3] );
394 iX-=8;
395 oX+=4;
396 }while(iX>=in+n4);
397 do{
398 T-=step; XNPROD31( iX[6], iX[4], T[1], T[0], &oX[0], &oX[1] );
399 T-=step; XNPROD31( iX[2], iX[0], T[1], T[0], &oX[2], &oX[3] );
400 iX-=8;
401 oX+=4;
402 }while(iX>=in);
403
404 mdct_butterflies(out+n2,n2,shift);
405 mdct_bitreverse(out,n,step,shift);
406 /* rotate + window */
407
408 step>>=2;
409 {
410 ogg_int32_t *oX1=out+n2+n4;
411 ogg_int32_t *oX2=out+n2+n4;
412 ogg_int32_t *iX =out;
413
414 switch(step) {
415 default: {
416 T=(step>=4)?(sincos_lookup0+(step>>1)):sincos_lookup1;
417 do{
418 oX1-=4;
419 XPROD31( iX[0], -iX[1], T[0], T[1], &oX1[3], &oX2[0] ); T+=step;
420 XPROD31( iX[2], -iX[3], T[0], T[1], &oX1[2], &oX2[1] ); T+=step;
421 XPROD31( iX[4], -iX[5], T[0], T[1], &oX1[1], &oX2[2] ); T+=step;
422 XPROD31( iX[6], -iX[7], T[0], T[1], &oX1[0], &oX2[3] ); T+=step;
423 oX2+=4;
424 iX+=8;
425 }while(iX<oX1);
426 break;
427 }
428
429 case 1: {
430 /* linear interpolation between table values: offset=0.5, step=1 */
431 register ogg_int32_t t0,t1,v0,v1;
432 T = sincos_lookup0;
433 V = sincos_lookup1;
434 t0 = (*T++)>>1;
435 t1 = (*T++)>>1;
436 do{
437 oX1-=4;
438
439 t0 += (v0 = (*V++)>>1);
440 t1 += (v1 = (*V++)>>1);
441 XPROD31( iX[0], -iX[1], t0, t1, &oX1[3], &oX2[0] );
442 v0 += (t0 = (*T++)>>1);
443 v1 += (t1 = (*T++)>>1);
444 XPROD31( iX[2], -iX[3], v0, v1, &oX1[2], &oX2[1] );
445 t0 += (v0 = (*V++)>>1);
446 t1 += (v1 = (*V++)>>1);
447 XPROD31( iX[4], -iX[5], t0, t1, &oX1[1], &oX2[2] );
448 v0 += (t0 = (*T++)>>1);
449 v1 += (t1 = (*T++)>>1);
450 XPROD31( iX[6], -iX[7], v0, v1, &oX1[0], &oX2[3] );
451
452 oX2+=4;
453 iX+=8;
454 }while(iX<oX1);
455 break;
456 }
457
458 case 0: {
459 /* linear interpolation between table values: offset=0.25, step=0.5 */
460 register ogg_int32_t t0,t1,v0,v1,q0,q1;
461 T = sincos_lookup0;
462 V = sincos_lookup1;
463 t0 = *T++;
464 t1 = *T++;
465 do{
466 oX1-=4;
467
468 v0 = *V++;
469 v1 = *V++;
470 t0 += (q0 = (v0-t0)>>2);
471 t1 += (q1 = (v1-t1)>>2);
472 XPROD31( iX[0], -iX[1], t0, t1, &oX1[3], &oX2[0] );
473 t0 = v0-q0;
474 t1 = v1-q1;
475 XPROD31( iX[2], -iX[3], t0, t1, &oX1[2], &oX2[1] );
476
477 t0 = *T++;
478 t1 = *T++;
479 v0 += (q0 = (t0-v0)>>2);
480 v1 += (q1 = (t1-v1)>>2);
481 XPROD31( iX[4], -iX[5], v0, v1, &oX1[1], &oX2[2] );
482 v0 = t0-q0;
483 v1 = t1-q1;
484 XPROD31( iX[6], -iX[7], v0, v1, &oX1[0], &oX2[3] );
485
486 oX2+=4;
487 iX+=8;
488 }while(iX<oX1);
489 break;
490 }
491 }
492
493 iX=out+n2+n4;
494 oX1=out+n4;
495 oX2=oX1;
496
497 do{
498 oX1-=4;
499 iX-=4;
500
501 oX2[0] = -(oX1[3] = iX[3]);
502 oX2[1] = -(oX1[2] = iX[2]);
503 oX2[2] = -(oX1[1] = iX[1]);
504 oX2[3] = -(oX1[0] = iX[0]);
505
506 oX2+=4;
507 }while(oX2<iX);
508
509 iX=out+n2+n4;
510 oX1=out+n2+n4;
511 oX2=out+n2;
512
513 do{
514 oX1-=4;
515 oX1[0]= iX[3];
516 oX1[1]= iX[2];
517 oX1[2]= iX[1];
518 oX1[3]= iX[0];
519 iX+=4;
520 }while(oX1>oX2);
521 }
522}
diff --git a/apps/codecs/libwma/mdct2.h b/apps/codecs/libwma/mdct2.h
deleted file mode 100644
index f062f48a72..0000000000
--- a/apps/codecs/libwma/mdct2.h
+++ /dev/null
@@ -1,81 +0,0 @@
1/********************************************************************
2 * *
3 * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
4 * *
5 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
6 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
7 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
8 * *
9 * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
10 * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
11 * *
12 ********************************************************************
13
14 function: modified discrete cosine transform prototypes
15
16 ********************************************************************/
17
18#ifndef _OGG_mdct_H_
19#define _OGG_mdct_H_
20
21typedef short ogg_int16_t;
22typedef int ogg_int32_t;
23typedef unsigned int ogg_uint32_t;
24typedef long long ogg_int64_t;
25
26
27#ifdef _LOW_ACCURACY_
28# define X(n) (((((n)>>22)+1)>>1) - ((((n)>>22)+1)>>9))
29# define LOOKUP_T const unsigned char
30#else
31# define X(n) (n)
32# define LOOKUP_T const ogg_int32_t
33#endif
34
35#include <codecs.h>
36#include "asm_arm.h"
37#include "asm_mcf5249.h"
38#include "misc.h"
39
40#ifndef ICONST_ATTR_TREMOR_WINDOW
41#define ICONST_ATTR_TREMOR_WINDOW ICONST_ATTR
42#endif
43
44#ifndef ICODE_ATTR_TREMOR_MDCT
45#define ICODE_ATTR_TREMOR_MDCT ICODE_ATTR
46#endif
47
48#ifndef ICODE_ATTR_TREMOR_NOT_MDCT
49#define ICODE_ATTR_TREMOR_NOT_MDCT ICODE_ATTR
50#endif
51
52
53#define DATA_TYPE ogg_int32_t
54#define REG_TYPE register ogg_int32_t
55
56#ifdef _LOW_ACCURACY_
57#define cPI3_8 (0x0062)
58#define cPI2_8 (0x00b5)
59#define cPI1_8 (0x00ed)
60#else
61#define cPI3_8 (0x30fbc54d)
62#define cPI2_8 (0x5a82799a)
63#define cPI1_8 (0x7641af3d)
64#endif
65
66
67extern void mdct_backward(int n, ogg_int32_t *in, DATA_TYPE *out);
68
69#endif
70
71
72
73
74
75
76
77
78
79
80
81
diff --git a/apps/codecs/libwma/mdct_arm.S b/apps/codecs/libwma/mdct_arm.S
deleted file mode 100644
index f262951ea8..0000000000
--- a/apps/codecs/libwma/mdct_arm.S
+++ /dev/null
@@ -1,429 +0,0 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2007 by Tomasz Malesinski
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21
22#include "config.h"
23/* Codecs should not normally do this, but we need to check a macro, and
24 * codecs.h would confuse the assembler. */
25
26#define cPI3_8 (0x30fbc54d)
27#define cPI2_8 (0x5a82799a)
28#define cPI1_8 (0x7641af3d)
29
30#ifdef USE_IRAM
31 .section .icode,"ax",%progbits
32#else
33 .text
34#endif
35 .align
36
37 .global mdct_butterfly_32
38 .global mdct_butterfly_generic_loop
39
40mdct_butterfly_8:
41 add r9, r5, r1 @ x4 + x0
42 sub r5, r5, r1 @ x4 - x0
43 add r7, r6, r2 @ x5 + x1
44 sub r6, r6, r2 @ x5 - x1
45 add r8, r10, r3 @ x6 + x2
46 sub r10, r10, r3 @ x6 - x2
47 add r12, r11, r4 @ x7 + x3
48 sub r11, r11, r4 @ x7 - x3
49
50 add r1, r10, r6 @ y0 = (x6 - x2) + (x5 - x1)
51 sub r2, r11, r5 @ y1 = (x7 - x3) - (x4 - x0)
52 sub r3, r10, r6 @ y2 = (x6 - x2) - (x5 - x1)
53 add r4, r11, r5 @ y3 = (x7 - x3) + (x4 - x0)
54 sub r5, r8, r9 @ y4 = (x6 + x2) - (x4 + x0)
55 sub r6, r12, r7 @ y5 = (x7 + x3) - (x5 + x1)
56 add r10, r8, r9 @ y6 = (x6 + x2) + (x4 + x0)
57 add r11, r12, r7 @ y7 = (x7 + x3) + (x5 + x1)
58 stmia r0, {r1, r2, r3, r4, r5, r6, r10, r11}
59
60 mov pc, lr
61
62mdct_butterfly_16:
63 str lr, [sp, #-4]!
64 add r1, r0, #8*4
65
66 ldmia r0, {r2, r3, r4, r5}
67 ldmia r1, {r6, r7, r8, r9}
68 add r6, r6, r2 @ y8 = x8 + x0
69 rsb r2, r6, r2, asl #1 @ x0 - x8
70 add r7, r7, r3 @ y9 = x9 + x1
71 rsb r3, r7, r3, asl #1 @ x1 - x9
72 add r8, r8, r4 @ y10 = x10 + x2
73 sub r11, r8, r4, asl #1 @ x10 - x2
74 add r9, r9, r5 @ y11 = x11 + x3
75 rsb r10, r9, r5, asl #1 @ x3 - x11
76
77 stmia r1!, {r6, r7, r8, r9}
78
79 add r2, r2, r3 @ (x0 - x8) + (x1 - x9)
80 rsb r3, r2, r3, asl #1 @ (x1 - x9) - (x0 - x8)
81
82 ldr r12, =cPI2_8
83 smull r8, r5, r2, r12
84 mov r5, r5, asl #1
85 smull r8, r6, r3, r12
86 mov r6, r6, asl #1
87
88 stmia r0!, {r5, r6, r10, r11}
89
90 ldmia r0, {r2, r3, r4, r5}
91 ldmia r1, {r6, r7, r8, r9}
92 add r6, r6, r2 @ y12 = x12 + x4
93 sub r2, r6, r2, asl #1 @ x12 - x4
94 add r7, r7, r3 @ y13 = x13 + x5
95 sub r3, r7, r3, asl #1 @ x13 - x5
96 add r8, r8, r4 @ y10 = x14 + x6
97 sub r10, r8, r4, asl #1 @ x14 - x6
98 add r9, r9, r5 @ y11 = x15 + x7
99 sub r11, r9, r5, asl #1 @ x15 - x7
100
101 stmia r1, {r6, r7, r8, r9}
102
103 sub r2, r2, r3 @ (x12 - x4) - (x13 - x5)
104 add r3, r2, r3, asl #1 @ (x12 - x4) + (x13 - x5)
105
106 smull r8, r5, r2, r12
107 mov r5, r5, asl #1
108 smull r8, r6, r3, r12
109 mov r6, r6, asl #1
110 @ no stmia here, r5, r6, r10, r11 are passed to mdct_butterfly_8
111
112 sub r0, r0, #4*4
113 ldmia r0, {r1, r2, r3, r4}
114 bl mdct_butterfly_8
115 add r0, r0, #8*4
116 ldmia r0, {r1, r2, r3, r4, r5, r6, r10, r11}
117 bl mdct_butterfly_8
118
119 ldr pc, [sp], #4
120
121mdct_butterfly_32:
122 stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, lr}
123
124 add r1, r0, #16*4
125
126 ldmia r0, {r2, r3, r4, r5}
127 ldmia r1, {r6, r7, r8, r9}
128 add r6, r6, r2 @ y16 = x16 + x0
129 rsb r2, r6, r2, asl #1 @ x0 - x16
130 add r7, r7, r3 @ y17 = x17 + x1
131 rsb r3, r7, r3, asl #1 @ x1 - x17
132 add r8, r8, r4 @ y18 = x18 + x2
133 rsb r4, r8, r4, asl #1 @ x2 - x18
134 add r9, r9, r5 @ y19 = x19 + x3
135 rsb r5, r9, r5, asl #1 @ x3 - x19
136
137 stmia r1!, {r6, r7, r8, r9}
138
139 ldr r12, =cPI1_8
140 ldr lr, =cPI3_8
141 smull r10, r6, r2, r12
142 smlal r10, r6, r3, lr
143 rsb r2, r2, #0
144 smull r10, r7, r3, r12
145 smlal r10, r7, r2, lr
146 mov r6, r6, asl #1
147 mov r7, r7, asl #1
148
149 add r4, r4, r5 @ (x3 - x19) + (x2 - x18)
150 rsb r5, r4, r5, asl #1 @ (x3 - x19) - (x2 - x18)
151
152 ldr r11, =cPI2_8
153 smull r10, r8, r4, r11
154 mov r8, r8, asl #1
155 smull r10, r9, r5, r11
156 mov r9, r9, asl #1
157
158 stmia r0!, {r6, r7, r8, r9}
159
160 ldmia r0, {r2, r3, r4, r5}
161 ldmia r1, {r6, r7, r8, r9}
162 add r6, r6, r2 @ y20 = x20 + x4
163 rsb r2, r6, r2, asl #1 @ x4 - x20
164 add r7, r7, r3 @ y21 = x21 + x5
165 rsb r3, r7, r3, asl #1 @ x5 - x21
166 add r8, r8, r4 @ y22 = x22 + x6
167 sub r4, r8, r4, asl #1 @ x22 - x6
168 add r9, r9, r5 @ y23 = x23 + x7
169 rsb r5, r9, r5, asl #1 @ x7 - x23
170
171 stmia r1!, {r6, r7, r8, r9}
172
173 smull r10, r6, r2, lr
174 smlal r10, r6, r3, r12
175 rsb r2, r2, #0
176 smull r10, r7, r3, lr
177 smlal r10, r7, r2, r12
178 mov r6, r6, asl #1
179 mov r7, r7, asl #1
180
181 mov r8, r5
182 mov r9, r4
183 stmia r0!, {r6, r7, r8, r9}
184
185 ldmia r0, {r2, r3, r4, r5}
186 ldmia r1, {r6, r7, r8, r9}
187 add r6, r6, r2 @ y24 = x24 + x8
188 sub r2, r6, r2, asl #1 @ x24 - x8
189 add r7, r7, r3 @ y25 = x25 + x9
190 sub r3, r7, r3, asl #1 @ x25 - x9
191 add r8, r8, r4 @ y26 = x26 + x10
192 sub r4, r8, r4, asl #1 @ x26 - x10
193 add r9, r9, r5 @ y27 = x27 + x11
194 sub r5, r9, r5, asl #1 @ x27 - x11
195
196 stmia r1!, {r6, r7, r8, r9}
197
198 smull r10, r7, r2, r12
199 smlal r10, r7, r3, lr
200 rsb r3, r3, #0
201 smull r10, r6, r3, r12
202 smlal r10, r6, r2, lr
203 mov r6, r6, asl #1
204 mov r7, r7, asl #1
205
206 sub r4, r4, r5 @ (x26 - x10) - (x27 - x11)
207 add r5, r4, r5, asl #1 @ (x26 - x10) + (x27 - x11)
208
209 ldr r11, =cPI2_8
210 smull r10, r8, r4, r11
211 mov r8, r8, asl #1
212 smull r10, r9, r5, r11
213 mov r9, r9, asl #1
214
215 stmia r0!, {r6, r7, r8, r9}
216
217 ldmia r0, {r2, r3, r4, r5}
218 ldmia r1, {r6, r7, r8, r9}
219 add r6, r6, r2 @ y28 = x28 + x12
220 sub r2, r6, r2, asl #1 @ x28 - x12
221 add r7, r7, r3 @ y29 = x29 + x13
222 sub r3, r7, r3, asl #1 @ x29 - x13
223 add r8, r8, r4 @ y30 = x30 + x14
224 sub r4, r8, r4, asl #1 @ x30 - x14
225 add r9, r9, r5 @ y31 = x31 + x15
226 sub r5, r9, r5, asl #1 @ x31 - x15
227
228 stmia r1, {r6, r7, r8, r9}
229
230 smull r10, r7, r2, lr
231 smlal r10, r7, r3, r12
232 rsb r3, r3, #0
233 smull r10, r6, r3, lr
234 smlal r10, r6, r2, r12
235 mov r6, r6, asl #1
236 mov r7, r7, asl #1
237
238 mov r8, r4
239 mov r9, r5
240 stmia r0, {r6, r7, r8, r9}
241
242 sub r0, r0, #12*4
243 str r0, [sp, #-4]!
244 bl mdct_butterfly_16
245
246 ldr r0, [sp], #4
247 add r0, r0, #16*4
248 bl mdct_butterfly_16
249
250 ldmia sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, pc}
251
252 @ mdct_butterfly_generic_loop(x1, x2, T0, step, Ttop)
253mdct_butterfly_generic_loop:
254 stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, lr}
255 str r2, [sp, #-4]
256 ldr r4, [sp, #40]
2571:
258 ldmdb r0, {r6, r7, r8, r9}
259 ldmdb r1, {r10, r11, r12, r14}
260
261 add r6, r6, r10
262 sub r10, r6, r10, asl #1
263 add r7, r7, r11
264 rsb r11, r7, r11, asl #1
265 add r8, r8, r12
266 sub r12, r8, r12, asl #1
267 add r9, r9, r14
268 rsb r14, r9, r14, asl #1
269
270 stmdb r0!, {r6, r7, r8, r9}
271
272 ldmia r2, {r6, r7}
273 smull r5, r8, r14, r6
274 smlal r5, r8, r12, r7
275 rsb r14, r14, #0
276 smull r5, r9, r12, r6
277 smlal r5, r9, r14, r7
278
279 mov r8, r8, asl #1
280 mov r9, r9, asl #1
281 stmdb r1!, {r8, r9}
282 add r2, r2, r3, asl #2
283
284 ldmia r2, {r6, r7}
285 smull r5, r8, r11, r6
286 smlal r5, r8, r10, r7
287 rsb r11, r11, #0
288 smull r5, r9, r10, r6
289 smlal r5, r9, r11, r7
290
291 mov r8, r8, asl #1
292 mov r9, r9, asl #1
293 stmdb r1!, {r8, r9}
294 add r2, r2, r3, asl #2
295
296 cmp r2, r4
297 blo 1b
298
299 ldr r4, [sp, #-4]
3001:
301 ldmdb r0, {r6, r7, r8, r9}
302 ldmdb r1, {r10, r11, r12, r14}
303
304 add r6, r6, r10
305 sub r10, r6, r10, asl #1
306 add r7, r7, r11
307 sub r11, r7, r11, asl #1
308 add r8, r8, r12
309 sub r12, r8, r12, asl #1
310 add r9, r9, r14
311 sub r14, r9, r14, asl #1
312
313 stmdb r0!, {r6, r7, r8, r9}
314
315 ldmia r2, {r6, r7}
316 smull r5, r9, r14, r6
317 smlal r5, r9, r12, r7
318 rsb r14, r14, #0
319 smull r5, r8, r12, r6
320 smlal r5, r8, r14, r7
321
322 mov r8, r8, asl #1
323 mov r9, r9, asl #1
324 stmdb r1!, {r8, r9}
325 sub r2, r2, r3, asl #2
326
327 ldmia r2, {r6, r7}
328 smull r5, r9, r11, r6
329 smlal r5, r9, r10, r7
330 rsb r11, r11, #0
331 smull r5, r8, r10, r6
332 smlal r5, r8, r11, r7
333
334 mov r8, r8, asl #1
335 mov r9, r9, asl #1
336 stmdb r1!, {r8, r9}
337 sub r2, r2, r3, asl #2
338
339 cmp r2, r4
340 bhi 1b
341
342 ldr r4, [sp, #40]
3431:
344 ldmdb r0, {r6, r7, r8, r9}
345 ldmdb r1, {r10, r11, r12, r14}
346
347 add r6, r6, r10
348 rsb r10, r6, r10, asl #1
349 add r7, r7, r11
350 rsb r11, r7, r11, asl #1
351 add r8, r8, r12
352 rsb r12, r8, r12, asl #1
353 add r9, r9, r14
354 rsb r14, r9, r14, asl #1
355
356 stmdb r0!, {r6, r7, r8, r9}
357
358 ldmia r2, {r6, r7}
359 smull r5, r8, r12, r6
360 smlal r5, r8, r14, r7
361 rsb r12, r12, #0
362 smull r5, r9, r14, r6
363 smlal r5, r9, r12, r7
364
365 mov r8, r8, asl #1
366 mov r9, r9, asl #1
367 stmdb r1!, {r8, r9}
368 add r2, r2, r3, asl #2
369
370 ldmia r2, {r6, r7}
371 smull r5, r8, r10, r6
372 smlal r5, r8, r11, r7
373 rsb r10, r10, #0
374 smull r5, r9, r11, r6
375 smlal r5, r9, r10, r7
376
377 mov r8, r8, asl #1
378 mov r9, r9, asl #1
379 stmdb r1!, {r8, r9}
380 add r2, r2, r3, asl #2
381
382 cmp r2, r4
383 blo 1b
384
385 ldr r4, [sp, #-4]
3861:
387 ldmdb r0, {r6, r7, r8, r9}
388 ldmdb r1, {r10, r11, r12, r14}
389
390 add r6, r6, r10
391 sub r10, r6, r10, asl #1
392 add r7, r7, r11
393 rsb r11, r7, r11, asl #1
394 add r8, r8, r12
395 sub r12, r8, r12, asl #1
396 add r9, r9, r14
397 rsb r14, r9, r14, asl #1
398
399 stmdb r0!, {r6, r7, r8, r9}
400
401 ldmia r2, {r6, r7}
402 smull r5, r9, r12, r6
403 smlal r5, r9, r14, r7
404 rsb r12, r12, #0
405 smull r5, r8, r14, r6
406 smlal r5, r8, r12, r7
407
408 mov r8, r8, asl #1
409 mov r9, r9, asl #1
410 stmdb r1!, {r8, r9}
411 sub r2, r2, r3, asl #2
412
413 ldmia r2, {r6, r7}
414 smull r5, r9, r10, r6
415 smlal r5, r9, r11, r7
416 rsb r10, r10, #0
417 smull r5, r8, r11, r6
418 smlal r5, r8, r10, r7
419
420 mov r8, r8, asl #1
421 mov r9, r9, asl #1
422 stmdb r1!, {r8, r9}
423 sub r2, r2, r3, asl #2
424
425 cmp r2, r4
426 bhi 1b
427
428 ldmia sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, pc}
429
diff --git a/apps/codecs/libwma/mdct_lookup.h b/apps/codecs/libwma/mdct_lookup.h
deleted file mode 100644
index 1c568af736..0000000000
--- a/apps/codecs/libwma/mdct_lookup.h
+++ /dev/null
@@ -1,544 +0,0 @@
1/********************************************************************
2 * *
3 * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
4 * *
5 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
6 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
7 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
8 * *
9 * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
10 * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
11 * *
12 ********************************************************************
13
14 function: sin,cos lookup tables
15
16 ********************************************************************/
17
18
19
20
21
22
23
24/* {sin(2*i*PI/4096), cos(2*i*PI/4096)}, with i = 0 to 512 */
25static const int sincos_lookup0[1026] ICONST_ATTR = {
26 X(0x00000000), X(0x7fffffff), X(0x003243f5), X(0x7ffff621),
27 X(0x006487e3), X(0x7fffd886), X(0x0096cbc1), X(0x7fffa72c),
28 X(0x00c90f88), X(0x7fff6216), X(0x00fb5330), X(0x7fff0943),
29 X(0x012d96b1), X(0x7ffe9cb2), X(0x015fda03), X(0x7ffe1c65),
30 X(0x01921d20), X(0x7ffd885a), X(0x01c45ffe), X(0x7ffce093),
31 X(0x01f6a297), X(0x7ffc250f), X(0x0228e4e2), X(0x7ffb55ce),
32 X(0x025b26d7), X(0x7ffa72d1), X(0x028d6870), X(0x7ff97c18),
33 X(0x02bfa9a4), X(0x7ff871a2), X(0x02f1ea6c), X(0x7ff75370),
34 X(0x03242abf), X(0x7ff62182), X(0x03566a96), X(0x7ff4dbd9),
35 X(0x0388a9ea), X(0x7ff38274), X(0x03bae8b2), X(0x7ff21553),
36 X(0x03ed26e6), X(0x7ff09478), X(0x041f6480), X(0x7feeffe1),
37 X(0x0451a177), X(0x7fed5791), X(0x0483ddc3), X(0x7feb9b85),
38 X(0x04b6195d), X(0x7fe9cbc0), X(0x04e8543e), X(0x7fe7e841),
39 X(0x051a8e5c), X(0x7fe5f108), X(0x054cc7b1), X(0x7fe3e616),
40 X(0x057f0035), X(0x7fe1c76b), X(0x05b137df), X(0x7fdf9508),
41 X(0x05e36ea9), X(0x7fdd4eec), X(0x0615a48b), X(0x7fdaf519),
42 X(0x0647d97c), X(0x7fd8878e), X(0x067a0d76), X(0x7fd6064c),
43 X(0x06ac406f), X(0x7fd37153), X(0x06de7262), X(0x7fd0c8a3),
44 X(0x0710a345), X(0x7fce0c3e), X(0x0742d311), X(0x7fcb3c23),
45 X(0x077501be), X(0x7fc85854), X(0x07a72f45), X(0x7fc560cf),
46 X(0x07d95b9e), X(0x7fc25596), X(0x080b86c2), X(0x7fbf36aa),
47 X(0x083db0a7), X(0x7fbc040a), X(0x086fd947), X(0x7fb8bdb8),
48 X(0x08a2009a), X(0x7fb563b3), X(0x08d42699), X(0x7fb1f5fc),
49 X(0x09064b3a), X(0x7fae7495), X(0x09386e78), X(0x7faadf7c),
50 X(0x096a9049), X(0x7fa736b4), X(0x099cb0a7), X(0x7fa37a3c),
51 X(0x09cecf89), X(0x7f9faa15), X(0x0a00ece8), X(0x7f9bc640),
52 X(0x0a3308bd), X(0x7f97cebd), X(0x0a6522fe), X(0x7f93c38c),
53 X(0x0a973ba5), X(0x7f8fa4b0), X(0x0ac952aa), X(0x7f8b7227),
54 X(0x0afb6805), X(0x7f872bf3), X(0x0b2d7baf), X(0x7f82d214),
55 X(0x0b5f8d9f), X(0x7f7e648c), X(0x0b919dcf), X(0x7f79e35a),
56 X(0x0bc3ac35), X(0x7f754e80), X(0x0bf5b8cb), X(0x7f70a5fe),
57 X(0x0c27c389), X(0x7f6be9d4), X(0x0c59cc68), X(0x7f671a05),
58 X(0x0c8bd35e), X(0x7f62368f), X(0x0cbdd865), X(0x7f5d3f75),
59 X(0x0cefdb76), X(0x7f5834b7), X(0x0d21dc87), X(0x7f531655),
60 X(0x0d53db92), X(0x7f4de451), X(0x0d85d88f), X(0x7f489eaa),
61 X(0x0db7d376), X(0x7f434563), X(0x0de9cc40), X(0x7f3dd87c),
62 X(0x0e1bc2e4), X(0x7f3857f6), X(0x0e4db75b), X(0x7f32c3d1),
63 X(0x0e7fa99e), X(0x7f2d1c0e), X(0x0eb199a4), X(0x7f2760af),
64 X(0x0ee38766), X(0x7f2191b4), X(0x0f1572dc), X(0x7f1baf1e),
65 X(0x0f475bff), X(0x7f15b8ee), X(0x0f7942c7), X(0x7f0faf25),
66 X(0x0fab272b), X(0x7f0991c4), X(0x0fdd0926), X(0x7f0360cb),
67 X(0x100ee8ad), X(0x7efd1c3c), X(0x1040c5bb), X(0x7ef6c418),
68 X(0x1072a048), X(0x7ef05860), X(0x10a4784b), X(0x7ee9d914),
69 X(0x10d64dbd), X(0x7ee34636), X(0x11082096), X(0x7edc9fc6),
70 X(0x1139f0cf), X(0x7ed5e5c6), X(0x116bbe60), X(0x7ecf1837),
71 X(0x119d8941), X(0x7ec8371a), X(0x11cf516a), X(0x7ec14270),
72 X(0x120116d5), X(0x7eba3a39), X(0x1232d979), X(0x7eb31e78),
73 X(0x1264994e), X(0x7eabef2c), X(0x1296564d), X(0x7ea4ac58),
74 X(0x12c8106f), X(0x7e9d55fc), X(0x12f9c7aa), X(0x7e95ec1a),
75 X(0x132b7bf9), X(0x7e8e6eb2), X(0x135d2d53), X(0x7e86ddc6),
76 X(0x138edbb1), X(0x7e7f3957), X(0x13c0870a), X(0x7e778166),
77 X(0x13f22f58), X(0x7e6fb5f4), X(0x1423d492), X(0x7e67d703),
78 X(0x145576b1), X(0x7e5fe493), X(0x148715ae), X(0x7e57dea7),
79 X(0x14b8b17f), X(0x7e4fc53e), X(0x14ea4a1f), X(0x7e47985b),
80 X(0x151bdf86), X(0x7e3f57ff), X(0x154d71aa), X(0x7e37042a),
81 X(0x157f0086), X(0x7e2e9cdf), X(0x15b08c12), X(0x7e26221f),
82 X(0x15e21445), X(0x7e1d93ea), X(0x16139918), X(0x7e14f242),
83 X(0x16451a83), X(0x7e0c3d29), X(0x1676987f), X(0x7e0374a0),
84 X(0x16a81305), X(0x7dfa98a8), X(0x16d98a0c), X(0x7df1a942),
85 X(0x170afd8d), X(0x7de8a670), X(0x173c6d80), X(0x7ddf9034),
86 X(0x176dd9de), X(0x7dd6668f), X(0x179f429f), X(0x7dcd2981),
87 X(0x17d0a7bc), X(0x7dc3d90d), X(0x1802092c), X(0x7dba7534),
88 X(0x183366e9), X(0x7db0fdf8), X(0x1864c0ea), X(0x7da77359),
89 X(0x18961728), X(0x7d9dd55a), X(0x18c7699b), X(0x7d9423fc),
90 X(0x18f8b83c), X(0x7d8a5f40), X(0x192a0304), X(0x7d808728),
91 X(0x195b49ea), X(0x7d769bb5), X(0x198c8ce7), X(0x7d6c9ce9),
92 X(0x19bdcbf3), X(0x7d628ac6), X(0x19ef0707), X(0x7d58654d),
93 X(0x1a203e1b), X(0x7d4e2c7f), X(0x1a517128), X(0x7d43e05e),
94 X(0x1a82a026), X(0x7d3980ec), X(0x1ab3cb0d), X(0x7d2f0e2b),
95 X(0x1ae4f1d6), X(0x7d24881b), X(0x1b161479), X(0x7d19eebf),
96 X(0x1b4732ef), X(0x7d0f4218), X(0x1b784d30), X(0x7d048228),
97 X(0x1ba96335), X(0x7cf9aef0), X(0x1bda74f6), X(0x7ceec873),
98 X(0x1c0b826a), X(0x7ce3ceb2), X(0x1c3c8b8c), X(0x7cd8c1ae),
99 X(0x1c6d9053), X(0x7ccda169), X(0x1c9e90b8), X(0x7cc26de5),
100 X(0x1ccf8cb3), X(0x7cb72724), X(0x1d00843d), X(0x7cabcd28),
101 X(0x1d31774d), X(0x7ca05ff1), X(0x1d6265dd), X(0x7c94df83),
102 X(0x1d934fe5), X(0x7c894bde), X(0x1dc4355e), X(0x7c7da505),
103 X(0x1df5163f), X(0x7c71eaf9), X(0x1e25f282), X(0x7c661dbc),
104 X(0x1e56ca1e), X(0x7c5a3d50), X(0x1e879d0d), X(0x7c4e49b7),
105 X(0x1eb86b46), X(0x7c4242f2), X(0x1ee934c3), X(0x7c362904),
106 X(0x1f19f97b), X(0x7c29fbee), X(0x1f4ab968), X(0x7c1dbbb3),
107 X(0x1f7b7481), X(0x7c116853), X(0x1fac2abf), X(0x7c0501d2),
108 X(0x1fdcdc1b), X(0x7bf88830), X(0x200d888d), X(0x7bebfb70),
109 X(0x203e300d), X(0x7bdf5b94), X(0x206ed295), X(0x7bd2a89e),
110 X(0x209f701c), X(0x7bc5e290), X(0x20d0089c), X(0x7bb9096b),
111 X(0x21009c0c), X(0x7bac1d31), X(0x21312a65), X(0x7b9f1de6),
112 X(0x2161b3a0), X(0x7b920b89), X(0x219237b5), X(0x7b84e61f),
113 X(0x21c2b69c), X(0x7b77ada8), X(0x21f3304f), X(0x7b6a6227),
114 X(0x2223a4c5), X(0x7b5d039e), X(0x225413f8), X(0x7b4f920e),
115 X(0x22847de0), X(0x7b420d7a), X(0x22b4e274), X(0x7b3475e5),
116 X(0x22e541af), X(0x7b26cb4f), X(0x23159b88), X(0x7b190dbc),
117 X(0x2345eff8), X(0x7b0b3d2c), X(0x23763ef7), X(0x7afd59a4),
118 X(0x23a6887f), X(0x7aef6323), X(0x23d6cc87), X(0x7ae159ae),
119 X(0x24070b08), X(0x7ad33d45), X(0x243743fa), X(0x7ac50dec),
120 X(0x24677758), X(0x7ab6cba4), X(0x2497a517), X(0x7aa8766f),
121 X(0x24c7cd33), X(0x7a9a0e50), X(0x24f7efa2), X(0x7a8b9348),
122 X(0x25280c5e), X(0x7a7d055b), X(0x2558235f), X(0x7a6e648a),
123 X(0x2588349d), X(0x7a5fb0d8), X(0x25b84012), X(0x7a50ea47),
124 X(0x25e845b6), X(0x7a4210d8), X(0x26184581), X(0x7a332490),
125 X(0x26483f6c), X(0x7a24256f), X(0x26783370), X(0x7a151378),
126 X(0x26a82186), X(0x7a05eead), X(0x26d809a5), X(0x79f6b711),
127 X(0x2707ebc7), X(0x79e76ca7), X(0x2737c7e3), X(0x79d80f6f),
128 X(0x27679df4), X(0x79c89f6e), X(0x27976df1), X(0x79b91ca4),
129 X(0x27c737d3), X(0x79a98715), X(0x27f6fb92), X(0x7999dec4),
130 X(0x2826b928), X(0x798a23b1), X(0x2856708d), X(0x797a55e0),
131 X(0x288621b9), X(0x796a7554), X(0x28b5cca5), X(0x795a820e),
132 X(0x28e5714b), X(0x794a7c12), X(0x29150fa1), X(0x793a6361),
133 X(0x2944a7a2), X(0x792a37fe), X(0x29743946), X(0x7919f9ec),
134 X(0x29a3c485), X(0x7909a92d), X(0x29d34958), X(0x78f945c3),
135 X(0x2a02c7b8), X(0x78e8cfb2), X(0x2a323f9e), X(0x78d846fb),
136 X(0x2a61b101), X(0x78c7aba2), X(0x2a911bdc), X(0x78b6fda8),
137 X(0x2ac08026), X(0x78a63d11), X(0x2aefddd8), X(0x789569df),
138 X(0x2b1f34eb), X(0x78848414), X(0x2b4e8558), X(0x78738bb3),
139 X(0x2b7dcf17), X(0x786280bf), X(0x2bad1221), X(0x7851633b),
140 X(0x2bdc4e6f), X(0x78403329), X(0x2c0b83fa), X(0x782ef08b),
141 X(0x2c3ab2b9), X(0x781d9b65), X(0x2c69daa6), X(0x780c33b8),
142 X(0x2c98fbba), X(0x77fab989), X(0x2cc815ee), X(0x77e92cd9),
143 X(0x2cf72939), X(0x77d78daa), X(0x2d263596), X(0x77c5dc01),
144 X(0x2d553afc), X(0x77b417df), X(0x2d843964), X(0x77a24148),
145 X(0x2db330c7), X(0x7790583e), X(0x2de2211e), X(0x777e5cc3),
146 X(0x2e110a62), X(0x776c4edb), X(0x2e3fec8b), X(0x775a2e89),
147 X(0x2e6ec792), X(0x7747fbce), X(0x2e9d9b70), X(0x7735b6af),
148 X(0x2ecc681e), X(0x77235f2d), X(0x2efb2d95), X(0x7710f54c),
149 X(0x2f29ebcc), X(0x76fe790e), X(0x2f58a2be), X(0x76ebea77),
150 X(0x2f875262), X(0x76d94989), X(0x2fb5fab2), X(0x76c69647),
151 X(0x2fe49ba7), X(0x76b3d0b4), X(0x30133539), X(0x76a0f8d2),
152 X(0x3041c761), X(0x768e0ea6), X(0x30705217), X(0x767b1231),
153 X(0x309ed556), X(0x76680376), X(0x30cd5115), X(0x7654e279),
154 X(0x30fbc54d), X(0x7641af3d), X(0x312a31f8), X(0x762e69c4),
155 X(0x3158970e), X(0x761b1211), X(0x3186f487), X(0x7607a828),
156 X(0x31b54a5e), X(0x75f42c0b), X(0x31e39889), X(0x75e09dbd),
157 X(0x3211df04), X(0x75ccfd42), X(0x32401dc6), X(0x75b94a9c),
158 X(0x326e54c7), X(0x75a585cf), X(0x329c8402), X(0x7591aedd),
159 X(0x32caab6f), X(0x757dc5ca), X(0x32f8cb07), X(0x7569ca99),
160 X(0x3326e2c3), X(0x7555bd4c), X(0x3354f29b), X(0x75419de7),
161 X(0x3382fa88), X(0x752d6c6c), X(0x33b0fa84), X(0x751928e0),
162 X(0x33def287), X(0x7504d345), X(0x340ce28b), X(0x74f06b9e),
163 X(0x343aca87), X(0x74dbf1ef), X(0x3468aa76), X(0x74c7663a),
164 X(0x34968250), X(0x74b2c884), X(0x34c4520d), X(0x749e18cd),
165 X(0x34f219a8), X(0x7489571c), X(0x351fd918), X(0x74748371),
166 X(0x354d9057), X(0x745f9dd1), X(0x357b3f5d), X(0x744aa63f),
167 X(0x35a8e625), X(0x74359cbd), X(0x35d684a6), X(0x74208150),
168 X(0x36041ad9), X(0x740b53fb), X(0x3631a8b8), X(0x73f614c0),
169 X(0x365f2e3b), X(0x73e0c3a3), X(0x368cab5c), X(0x73cb60a8),
170 X(0x36ba2014), X(0x73b5ebd1), X(0x36e78c5b), X(0x73a06522),
171 X(0x3714f02a), X(0x738acc9e), X(0x37424b7b), X(0x73752249),
172 X(0x376f9e46), X(0x735f6626), X(0x379ce885), X(0x73499838),
173 X(0x37ca2a30), X(0x7333b883), X(0x37f76341), X(0x731dc70a),
174 X(0x382493b0), X(0x7307c3d0), X(0x3851bb77), X(0x72f1aed9),
175 X(0x387eda8e), X(0x72db8828), X(0x38abf0ef), X(0x72c54fc1),
176 X(0x38d8fe93), X(0x72af05a7), X(0x39060373), X(0x7298a9dd),
177 X(0x3932ff87), X(0x72823c67), X(0x395ff2c9), X(0x726bbd48),
178 X(0x398cdd32), X(0x72552c85), X(0x39b9bebc), X(0x723e8a20),
179 X(0x39e6975e), X(0x7227d61c), X(0x3a136712), X(0x7211107e),
180 X(0x3a402dd2), X(0x71fa3949), X(0x3a6ceb96), X(0x71e35080),
181 X(0x3a99a057), X(0x71cc5626), X(0x3ac64c0f), X(0x71b54a41),
182 X(0x3af2eeb7), X(0x719e2cd2), X(0x3b1f8848), X(0x7186fdde),
183 X(0x3b4c18ba), X(0x716fbd68), X(0x3b78a007), X(0x71586b74),
184 X(0x3ba51e29), X(0x71410805), X(0x3bd19318), X(0x7129931f),
185 X(0x3bfdfecd), X(0x71120cc5), X(0x3c2a6142), X(0x70fa74fc),
186 X(0x3c56ba70), X(0x70e2cbc6), X(0x3c830a50), X(0x70cb1128),
187 X(0x3caf50da), X(0x70b34525), X(0x3cdb8e09), X(0x709b67c0),
188 X(0x3d07c1d6), X(0x708378ff), X(0x3d33ec39), X(0x706b78e3),
189 X(0x3d600d2c), X(0x70536771), X(0x3d8c24a8), X(0x703b44ad),
190 X(0x3db832a6), X(0x7023109a), X(0x3de4371f), X(0x700acb3c),
191 X(0x3e10320d), X(0x6ff27497), X(0x3e3c2369), X(0x6fda0cae),
192 X(0x3e680b2c), X(0x6fc19385), X(0x3e93e950), X(0x6fa90921),
193 X(0x3ebfbdcd), X(0x6f906d84), X(0x3eeb889c), X(0x6f77c0b3),
194 X(0x3f1749b8), X(0x6f5f02b2), X(0x3f430119), X(0x6f463383),
195 X(0x3f6eaeb8), X(0x6f2d532c), X(0x3f9a5290), X(0x6f1461b0),
196 X(0x3fc5ec98), X(0x6efb5f12), X(0x3ff17cca), X(0x6ee24b57),
197 X(0x401d0321), X(0x6ec92683), X(0x40487f94), X(0x6eaff099),
198 X(0x4073f21d), X(0x6e96a99d), X(0x409f5ab6), X(0x6e7d5193),
199 X(0x40cab958), X(0x6e63e87f), X(0x40f60dfb), X(0x6e4a6e66),
200 X(0x4121589b), X(0x6e30e34a), X(0x414c992f), X(0x6e174730),
201 X(0x4177cfb1), X(0x6dfd9a1c), X(0x41a2fc1a), X(0x6de3dc11),
202 X(0x41ce1e65), X(0x6dca0d14), X(0x41f93689), X(0x6db02d29),
203 X(0x42244481), X(0x6d963c54), X(0x424f4845), X(0x6d7c3a98),
204 X(0x427a41d0), X(0x6d6227fa), X(0x42a5311b), X(0x6d48047e),
205 X(0x42d0161e), X(0x6d2dd027), X(0x42faf0d4), X(0x6d138afb),
206 X(0x4325c135), X(0x6cf934fc), X(0x4350873c), X(0x6cdece2f),
207 X(0x437b42e1), X(0x6cc45698), X(0x43a5f41e), X(0x6ca9ce3b),
208 X(0x43d09aed), X(0x6c8f351c), X(0x43fb3746), X(0x6c748b3f),
209 X(0x4425c923), X(0x6c59d0a9), X(0x4450507e), X(0x6c3f055d),
210 X(0x447acd50), X(0x6c242960), X(0x44a53f93), X(0x6c093cb6),
211 X(0x44cfa740), X(0x6bee3f62), X(0x44fa0450), X(0x6bd3316a),
212 X(0x452456bd), X(0x6bb812d1), X(0x454e9e80), X(0x6b9ce39b),
213 X(0x4578db93), X(0x6b81a3cd), X(0x45a30df0), X(0x6b66536b),
214 X(0x45cd358f), X(0x6b4af279), X(0x45f7526b), X(0x6b2f80fb),
215 X(0x4621647d), X(0x6b13fef5), X(0x464b6bbe), X(0x6af86c6c),
216 X(0x46756828), X(0x6adcc964), X(0x469f59b4), X(0x6ac115e2),
217 X(0x46c9405c), X(0x6aa551e9), X(0x46f31c1a), X(0x6a897d7d),
218 X(0x471cece7), X(0x6a6d98a4), X(0x4746b2bc), X(0x6a51a361),
219 X(0x47706d93), X(0x6a359db9), X(0x479a1d67), X(0x6a1987b0),
220 X(0x47c3c22f), X(0x69fd614a), X(0x47ed5be6), X(0x69e12a8c),
221 X(0x4816ea86), X(0x69c4e37a), X(0x48406e08), X(0x69a88c19),
222 X(0x4869e665), X(0x698c246c), X(0x48935397), X(0x696fac78),
223 X(0x48bcb599), X(0x69532442), X(0x48e60c62), X(0x69368bce),
224 X(0x490f57ee), X(0x6919e320), X(0x49389836), X(0x68fd2a3d),
225 X(0x4961cd33), X(0x68e06129), X(0x498af6df), X(0x68c387e9),
226 X(0x49b41533), X(0x68a69e81), X(0x49dd282a), X(0x6889a4f6),
227 X(0x4a062fbd), X(0x686c9b4b), X(0x4a2f2be6), X(0x684f8186),
228 X(0x4a581c9e), X(0x683257ab), X(0x4a8101de), X(0x68151dbe),
229 X(0x4aa9dba2), X(0x67f7d3c5), X(0x4ad2a9e2), X(0x67da79c3),
230 X(0x4afb6c98), X(0x67bd0fbd), X(0x4b2423be), X(0x679f95b7),
231 X(0x4b4ccf4d), X(0x67820bb7), X(0x4b756f40), X(0x676471c0),
232 X(0x4b9e0390), X(0x6746c7d8), X(0x4bc68c36), X(0x67290e02),
233 X(0x4bef092d), X(0x670b4444), X(0x4c177a6e), X(0x66ed6aa1),
234 X(0x4c3fdff4), X(0x66cf8120), X(0x4c6839b7), X(0x66b187c3),
235 X(0x4c9087b1), X(0x66937e91), X(0x4cb8c9dd), X(0x6675658c),
236 X(0x4ce10034), X(0x66573cbb), X(0x4d092ab0), X(0x66390422),
237 X(0x4d31494b), X(0x661abbc5), X(0x4d595bfe), X(0x65fc63a9),
238 X(0x4d8162c4), X(0x65ddfbd3), X(0x4da95d96), X(0x65bf8447),
239 X(0x4dd14c6e), X(0x65a0fd0b), X(0x4df92f46), X(0x65826622),
240 X(0x4e210617), X(0x6563bf92), X(0x4e48d0dd), X(0x6545095f),
241 X(0x4e708f8f), X(0x6526438f), X(0x4e984229), X(0x65076e25),
242 X(0x4ebfe8a5), X(0x64e88926), X(0x4ee782fb), X(0x64c99498),
243 X(0x4f0f1126), X(0x64aa907f), X(0x4f369320), X(0x648b7ce0),
244 X(0x4f5e08e3), X(0x646c59bf), X(0x4f857269), X(0x644d2722),
245 X(0x4faccfab), X(0x642de50d), X(0x4fd420a4), X(0x640e9386),
246 X(0x4ffb654d), X(0x63ef3290), X(0x50229da1), X(0x63cfc231),
247 X(0x5049c999), X(0x63b0426d), X(0x5070e92f), X(0x6390b34a),
248 X(0x5097fc5e), X(0x637114cc), X(0x50bf031f), X(0x635166f9),
249 X(0x50e5fd6d), X(0x6331a9d4), X(0x510ceb40), X(0x6311dd64),
250 X(0x5133cc94), X(0x62f201ac), X(0x515aa162), X(0x62d216b3),
251 X(0x518169a5), X(0x62b21c7b), X(0x51a82555), X(0x6292130c),
252 X(0x51ced46e), X(0x6271fa69), X(0x51f576ea), X(0x6251d298),
253 X(0x521c0cc2), X(0x62319b9d), X(0x524295f0), X(0x6211557e),
254 X(0x5269126e), X(0x61f1003f), X(0x528f8238), X(0x61d09be5),
255 X(0x52b5e546), X(0x61b02876), X(0x52dc3b92), X(0x618fa5f7),
256 X(0x53028518), X(0x616f146c), X(0x5328c1d0), X(0x614e73da),
257 X(0x534ef1b5), X(0x612dc447), X(0x537514c2), X(0x610d05b7),
258 X(0x539b2af0), X(0x60ec3830), X(0x53c13439), X(0x60cb5bb7),
259 X(0x53e73097), X(0x60aa7050), X(0x540d2005), X(0x60897601),
260 X(0x5433027d), X(0x60686ccf), X(0x5458d7f9), X(0x604754bf),
261 X(0x547ea073), X(0x60262dd6), X(0x54a45be6), X(0x6004f819),
262 X(0x54ca0a4b), X(0x5fe3b38d), X(0x54efab9c), X(0x5fc26038),
263 X(0x55153fd4), X(0x5fa0fe1f), X(0x553ac6ee), X(0x5f7f8d46),
264 X(0x556040e2), X(0x5f5e0db3), X(0x5585adad), X(0x5f3c7f6b),
265 X(0x55ab0d46), X(0x5f1ae274), X(0x55d05faa), X(0x5ef936d1),
266 X(0x55f5a4d2), X(0x5ed77c8a), X(0x561adcb9), X(0x5eb5b3a2),
267 X(0x56400758), X(0x5e93dc1f), X(0x566524aa), X(0x5e71f606),
268 X(0x568a34a9), X(0x5e50015d), X(0x56af3750), X(0x5e2dfe29),
269 X(0x56d42c99), X(0x5e0bec6e), X(0x56f9147e), X(0x5de9cc33),
270 X(0x571deefa), X(0x5dc79d7c), X(0x5742bc06), X(0x5da5604f),
271 X(0x57677b9d), X(0x5d8314b1), X(0x578c2dba), X(0x5d60baa7),
272 X(0x57b0d256), X(0x5d3e5237), X(0x57d5696d), X(0x5d1bdb65),
273 X(0x57f9f2f8), X(0x5cf95638), X(0x581e6ef1), X(0x5cd6c2b5),
274 X(0x5842dd54), X(0x5cb420e0), X(0x58673e1b), X(0x5c9170bf),
275 X(0x588b9140), X(0x5c6eb258), X(0x58afd6bd), X(0x5c4be5b0),
276 X(0x58d40e8c), X(0x5c290acc), X(0x58f838a9), X(0x5c0621b2),
277 X(0x591c550e), X(0x5be32a67), X(0x594063b5), X(0x5bc024f0),
278 X(0x59646498), X(0x5b9d1154), X(0x598857b2), X(0x5b79ef96),
279 X(0x59ac3cfd), X(0x5b56bfbd), X(0x59d01475), X(0x5b3381ce),
280 X(0x59f3de12), X(0x5b1035cf), X(0x5a1799d1), X(0x5aecdbc5),
281 X(0x5a3b47ab), X(0x5ac973b5), X(0x5a5ee79a), X(0x5aa5fda5),
282 X(0x5a82799a), X(0x5a82799a)
283 };
284
285 /* {sin((2*i+1)*PI/4096), cos((2*i+1)*PI/4096)}, with i = 0 to 511 */
286static LOOKUP_T sincos_lookup1[1024] ICONST_ATTR = {
287 X(0x001921fb), X(0x7ffffd88), X(0x004b65ee), X(0x7fffe9cb),
288 X(0x007da9d4), X(0x7fffc251), X(0x00afeda8), X(0x7fff8719),
289 X(0x00e23160), X(0x7fff3824), X(0x011474f6), X(0x7ffed572),
290 X(0x0146b860), X(0x7ffe5f03), X(0x0178fb99), X(0x7ffdd4d7),
291 X(0x01ab3e97), X(0x7ffd36ee), X(0x01dd8154), X(0x7ffc8549),
292 X(0x020fc3c6), X(0x7ffbbfe6), X(0x024205e8), X(0x7ffae6c7),
293 X(0x027447b0), X(0x7ff9f9ec), X(0x02a68917), X(0x7ff8f954),
294 X(0x02d8ca16), X(0x7ff7e500), X(0x030b0aa4), X(0x7ff6bcf0),
295 X(0x033d4abb), X(0x7ff58125), X(0x036f8a51), X(0x7ff4319d),
296 X(0x03a1c960), X(0x7ff2ce5b), X(0x03d407df), X(0x7ff1575d),
297 X(0x040645c7), X(0x7fefcca4), X(0x04388310), X(0x7fee2e30),
298 X(0x046abfb3), X(0x7fec7c02), X(0x049cfba7), X(0x7feab61a),
299 X(0x04cf36e5), X(0x7fe8dc78), X(0x05017165), X(0x7fe6ef1c),
300 X(0x0533ab20), X(0x7fe4ee06), X(0x0565e40d), X(0x7fe2d938),
301 X(0x05981c26), X(0x7fe0b0b1), X(0x05ca5361), X(0x7fde7471),
302 X(0x05fc89b8), X(0x7fdc247a), X(0x062ebf22), X(0x7fd9c0ca),
303 X(0x0660f398), X(0x7fd74964), X(0x06932713), X(0x7fd4be46),
304 X(0x06c5598a), X(0x7fd21f72), X(0x06f78af6), X(0x7fcf6ce8),
305 X(0x0729bb4e), X(0x7fcca6a7), X(0x075bea8c), X(0x7fc9ccb2),
306 X(0x078e18a7), X(0x7fc6df08), X(0x07c04598), X(0x7fc3dda9),
307 X(0x07f27157), X(0x7fc0c896), X(0x08249bdd), X(0x7fbd9fd0),
308 X(0x0856c520), X(0x7fba6357), X(0x0888ed1b), X(0x7fb7132b),
309 X(0x08bb13c5), X(0x7fb3af4e), X(0x08ed3916), X(0x7fb037bf),
310 X(0x091f5d06), X(0x7facac7f), X(0x09517f8f), X(0x7fa90d8e),
311 X(0x0983a0a7), X(0x7fa55aee), X(0x09b5c048), X(0x7fa1949e),
312 X(0x09e7de6a), X(0x7f9dbaa0), X(0x0a19fb04), X(0x7f99ccf4),
313 X(0x0a4c1610), X(0x7f95cb9a), X(0x0a7e2f85), X(0x7f91b694),
314 X(0x0ab0475c), X(0x7f8d8de1), X(0x0ae25d8d), X(0x7f895182),
315 X(0x0b147211), X(0x7f850179), X(0x0b4684df), X(0x7f809dc5),
316 X(0x0b7895f0), X(0x7f7c2668), X(0x0baaa53b), X(0x7f779b62),
317 X(0x0bdcb2bb), X(0x7f72fcb4), X(0x0c0ebe66), X(0x7f6e4a5e),
318 X(0x0c40c835), X(0x7f698461), X(0x0c72d020), X(0x7f64aabf),
319 X(0x0ca4d620), X(0x7f5fbd77), X(0x0cd6da2d), X(0x7f5abc8a),
320 X(0x0d08dc3f), X(0x7f55a7fa), X(0x0d3adc4e), X(0x7f507fc7),
321 X(0x0d6cda53), X(0x7f4b43f2), X(0x0d9ed646), X(0x7f45f47b),
322 X(0x0dd0d01f), X(0x7f409164), X(0x0e02c7d7), X(0x7f3b1aad),
323 X(0x0e34bd66), X(0x7f359057), X(0x0e66b0c3), X(0x7f2ff263),
324 X(0x0e98a1e9), X(0x7f2a40d2), X(0x0eca90ce), X(0x7f247ba5),
325 X(0x0efc7d6b), X(0x7f1ea2dc), X(0x0f2e67b8), X(0x7f18b679),
326 X(0x0f604faf), X(0x7f12b67c), X(0x0f923546), X(0x7f0ca2e7),
327 X(0x0fc41876), X(0x7f067bba), X(0x0ff5f938), X(0x7f0040f6),
328 X(0x1027d784), X(0x7ef9f29d), X(0x1059b352), X(0x7ef390ae),
329 X(0x108b8c9b), X(0x7eed1b2c), X(0x10bd6356), X(0x7ee69217),
330 X(0x10ef377d), X(0x7edff570), X(0x11210907), X(0x7ed94538),
331 X(0x1152d7ed), X(0x7ed28171), X(0x1184a427), X(0x7ecbaa1a),
332 X(0x11b66dad), X(0x7ec4bf36), X(0x11e83478), X(0x7ebdc0c6),
333 X(0x1219f880), X(0x7eb6aeca), X(0x124bb9be), X(0x7eaf8943),
334 X(0x127d7829), X(0x7ea85033), X(0x12af33ba), X(0x7ea1039b),
335 X(0x12e0ec6a), X(0x7e99a37c), X(0x1312a230), X(0x7e922fd6),
336 X(0x13445505), X(0x7e8aa8ac), X(0x137604e2), X(0x7e830dff),
337 X(0x13a7b1bf), X(0x7e7b5fce), X(0x13d95b93), X(0x7e739e1d),
338 X(0x140b0258), X(0x7e6bc8eb), X(0x143ca605), X(0x7e63e03b),
339 X(0x146e4694), X(0x7e5be40c), X(0x149fe3fc), X(0x7e53d462),
340 X(0x14d17e36), X(0x7e4bb13c), X(0x1503153a), X(0x7e437a9c),
341 X(0x1534a901), X(0x7e3b3083), X(0x15663982), X(0x7e32d2f4),
342 X(0x1597c6b7), X(0x7e2a61ed), X(0x15c95097), X(0x7e21dd73),
343 X(0x15fad71b), X(0x7e194584), X(0x162c5a3b), X(0x7e109a24),
344 X(0x165dd9f0), X(0x7e07db52), X(0x168f5632), X(0x7dff0911),
345 X(0x16c0cef9), X(0x7df62362), X(0x16f2443e), X(0x7ded2a47),
346 X(0x1723b5f9), X(0x7de41dc0), X(0x17552422), X(0x7ddafdce),
347 X(0x17868eb3), X(0x7dd1ca75), X(0x17b7f5a3), X(0x7dc883b4),
348 X(0x17e958ea), X(0x7dbf298d), X(0x181ab881), X(0x7db5bc02),
349 X(0x184c1461), X(0x7dac3b15), X(0x187d6c82), X(0x7da2a6c6),
350 X(0x18aec0db), X(0x7d98ff17), X(0x18e01167), X(0x7d8f4409),
351 X(0x19115e1c), X(0x7d85759f), X(0x1942a6f3), X(0x7d7b93da),
352 X(0x1973ebe6), X(0x7d719eba), X(0x19a52ceb), X(0x7d679642),
353 X(0x19d669fc), X(0x7d5d7a74), X(0x1a07a311), X(0x7d534b50),
354 X(0x1a38d823), X(0x7d4908d9), X(0x1a6a0929), X(0x7d3eb30f),
355 X(0x1a9b361d), X(0x7d3449f5), X(0x1acc5ef6), X(0x7d29cd8c),
356 X(0x1afd83ad), X(0x7d1f3dd6), X(0x1b2ea43a), X(0x7d149ad5),
357 X(0x1b5fc097), X(0x7d09e489), X(0x1b90d8bb), X(0x7cff1af5),
358 X(0x1bc1ec9e), X(0x7cf43e1a), X(0x1bf2fc3a), X(0x7ce94dfb),
359 X(0x1c240786), X(0x7cde4a98), X(0x1c550e7c), X(0x7cd333f3),
360 X(0x1c861113), X(0x7cc80a0f), X(0x1cb70f43), X(0x7cbcccec),
361 X(0x1ce80906), X(0x7cb17c8d), X(0x1d18fe54), X(0x7ca618f3),
362 X(0x1d49ef26), X(0x7c9aa221), X(0x1d7adb73), X(0x7c8f1817),
363 X(0x1dabc334), X(0x7c837ad8), X(0x1ddca662), X(0x7c77ca65),
364 X(0x1e0d84f5), X(0x7c6c06c0), X(0x1e3e5ee5), X(0x7c602fec),
365 X(0x1e6f342c), X(0x7c5445e9), X(0x1ea004c1), X(0x7c4848ba),
366 X(0x1ed0d09d), X(0x7c3c3860), X(0x1f0197b8), X(0x7c3014de),
367 X(0x1f325a0b), X(0x7c23de35), X(0x1f63178f), X(0x7c179467),
368 X(0x1f93d03c), X(0x7c0b3777), X(0x1fc4840a), X(0x7bfec765),
369 X(0x1ff532f2), X(0x7bf24434), X(0x2025dcec), X(0x7be5ade6),
370 X(0x205681f1), X(0x7bd9047c), X(0x208721f9), X(0x7bcc47fa),
371 X(0x20b7bcfe), X(0x7bbf7860), X(0x20e852f6), X(0x7bb295b0),
372 X(0x2118e3dc), X(0x7ba59fee), X(0x21496fa7), X(0x7b989719),
373 X(0x2179f64f), X(0x7b8b7b36), X(0x21aa77cf), X(0x7b7e4c45),
374 X(0x21daf41d), X(0x7b710a49), X(0x220b6b32), X(0x7b63b543),
375 X(0x223bdd08), X(0x7b564d36), X(0x226c4996), X(0x7b48d225),
376 X(0x229cb0d5), X(0x7b3b4410), X(0x22cd12bd), X(0x7b2da2fa),
377 X(0x22fd6f48), X(0x7b1feee5), X(0x232dc66d), X(0x7b1227d3),
378 X(0x235e1826), X(0x7b044dc7), X(0x238e646a), X(0x7af660c2),
379 X(0x23beab33), X(0x7ae860c7), X(0x23eeec78), X(0x7ada4dd8),
380 X(0x241f2833), X(0x7acc27f7), X(0x244f5e5c), X(0x7abdef25),
381 X(0x247f8eec), X(0x7aafa367), X(0x24afb9da), X(0x7aa144bc),
382 X(0x24dfdf20), X(0x7a92d329), X(0x250ffeb7), X(0x7a844eae),
383 X(0x25401896), X(0x7a75b74f), X(0x25702cb7), X(0x7a670d0d),
384 X(0x25a03b11), X(0x7a584feb), X(0x25d0439f), X(0x7a497feb),
385 X(0x26004657), X(0x7a3a9d0f), X(0x26304333), X(0x7a2ba75a),
386 X(0x26603a2c), X(0x7a1c9ece), X(0x26902b39), X(0x7a0d836d),
387 X(0x26c01655), X(0x79fe5539), X(0x26effb76), X(0x79ef1436),
388 X(0x271fda96), X(0x79dfc064), X(0x274fb3ae), X(0x79d059c8),
389 X(0x277f86b5), X(0x79c0e062), X(0x27af53a6), X(0x79b15435),
390 X(0x27df1a77), X(0x79a1b545), X(0x280edb23), X(0x79920392),
391 X(0x283e95a1), X(0x79823f20), X(0x286e49ea), X(0x797267f2),
392 X(0x289df7f8), X(0x79627e08), X(0x28cd9fc1), X(0x79528167),
393 X(0x28fd4140), X(0x79427210), X(0x292cdc6d), X(0x79325006),
394 X(0x295c7140), X(0x79221b4b), X(0x298bffb2), X(0x7911d3e2),
395 X(0x29bb87bc), X(0x790179cd), X(0x29eb0957), X(0x78f10d0f),
396 X(0x2a1a847b), X(0x78e08dab), X(0x2a49f920), X(0x78cffba3),
397 X(0x2a796740), X(0x78bf56f9), X(0x2aa8ced3), X(0x78ae9fb0),
398 X(0x2ad82fd2), X(0x789dd5cb), X(0x2b078a36), X(0x788cf94c),
399 X(0x2b36ddf7), X(0x787c0a36), X(0x2b662b0e), X(0x786b088c),
400 X(0x2b957173), X(0x7859f44f), X(0x2bc4b120), X(0x7848cd83),
401 X(0x2bf3ea0d), X(0x7837942b), X(0x2c231c33), X(0x78264849),
402 X(0x2c52478a), X(0x7814e9df), X(0x2c816c0c), X(0x780378f1),
403 X(0x2cb089b1), X(0x77f1f581), X(0x2cdfa071), X(0x77e05f91),
404 X(0x2d0eb046), X(0x77ceb725), X(0x2d3db928), X(0x77bcfc3f),
405 X(0x2d6cbb10), X(0x77ab2ee2), X(0x2d9bb5f6), X(0x77994f11),
406 X(0x2dcaa9d5), X(0x77875cce), X(0x2df996a3), X(0x7775581d),
407 X(0x2e287c5a), X(0x776340ff), X(0x2e575af3), X(0x77511778),
408 X(0x2e863267), X(0x773edb8b), X(0x2eb502ae), X(0x772c8d3a),
409 X(0x2ee3cbc1), X(0x771a2c88), X(0x2f128d99), X(0x7707b979),
410 X(0x2f41482e), X(0x76f5340e), X(0x2f6ffb7a), X(0x76e29c4b),
411 X(0x2f9ea775), X(0x76cff232), X(0x2fcd4c19), X(0x76bd35c7),
412 X(0x2ffbe95d), X(0x76aa670d), X(0x302a7f3a), X(0x76978605),
413 X(0x30590dab), X(0x768492b4), X(0x308794a6), X(0x76718d1c),
414 X(0x30b61426), X(0x765e7540), X(0x30e48c22), X(0x764b4b23),
415 X(0x3112fc95), X(0x76380ec8), X(0x31416576), X(0x7624c031),
416 X(0x316fc6be), X(0x76115f63), X(0x319e2067), X(0x75fdec60),
417 X(0x31cc7269), X(0x75ea672a), X(0x31fabcbd), X(0x75d6cfc5),
418 X(0x3228ff5c), X(0x75c32634), X(0x32573a3f), X(0x75af6a7b),
419 X(0x32856d5e), X(0x759b9c9b), X(0x32b398b3), X(0x7587bc98),
420 X(0x32e1bc36), X(0x7573ca75), X(0x330fd7e1), X(0x755fc635),
421 X(0x333debab), X(0x754bafdc), X(0x336bf78f), X(0x7537876c),
422 X(0x3399fb85), X(0x75234ce8), X(0x33c7f785), X(0x750f0054),
423 X(0x33f5eb89), X(0x74faa1b3), X(0x3423d78a), X(0x74e63108),
424 X(0x3451bb81), X(0x74d1ae55), X(0x347f9766), X(0x74bd199f),
425 X(0x34ad6b32), X(0x74a872e8), X(0x34db36df), X(0x7493ba34),
426 X(0x3508fa66), X(0x747eef85), X(0x3536b5be), X(0x746a12df),
427 X(0x356468e2), X(0x74552446), X(0x359213c9), X(0x744023bc),
428 X(0x35bfb66e), X(0x742b1144), X(0x35ed50c9), X(0x7415ece2),
429 X(0x361ae2d3), X(0x7400b69a), X(0x36486c86), X(0x73eb6e6e),
430 X(0x3675edd9), X(0x73d61461), X(0x36a366c6), X(0x73c0a878),
431 X(0x36d0d746), X(0x73ab2ab4), X(0x36fe3f52), X(0x73959b1b),
432 X(0x372b9ee3), X(0x737ff9ae), X(0x3758f5f2), X(0x736a4671),
433 X(0x37864477), X(0x73548168), X(0x37b38a6d), X(0x733eaa96),
434 X(0x37e0c7cc), X(0x7328c1ff), X(0x380dfc8d), X(0x7312c7a5),
435 X(0x383b28a9), X(0x72fcbb8c), X(0x38684c19), X(0x72e69db7),
436 X(0x389566d6), X(0x72d06e2b), X(0x38c278d9), X(0x72ba2cea),
437 X(0x38ef821c), X(0x72a3d9f7), X(0x391c8297), X(0x728d7557),
438 X(0x39497a43), X(0x7276ff0d), X(0x39766919), X(0x7260771b),
439 X(0x39a34f13), X(0x7249dd86), X(0x39d02c2a), X(0x72333251),
440 X(0x39fd0056), X(0x721c7580), X(0x3a29cb91), X(0x7205a716),
441 X(0x3a568dd4), X(0x71eec716), X(0x3a834717), X(0x71d7d585),
442 X(0x3aaff755), X(0x71c0d265), X(0x3adc9e86), X(0x71a9bdba),
443 X(0x3b093ca3), X(0x71929789), X(0x3b35d1a5), X(0x717b5fd3),
444 X(0x3b625d86), X(0x7164169d), X(0x3b8ee03e), X(0x714cbbeb),
445 X(0x3bbb59c7), X(0x71354fc0), X(0x3be7ca1a), X(0x711dd220),
446 X(0x3c143130), X(0x7106430e), X(0x3c408f03), X(0x70eea28e),
447 X(0x3c6ce38a), X(0x70d6f0a4), X(0x3c992ec0), X(0x70bf2d53),
448 X(0x3cc5709e), X(0x70a7589f), X(0x3cf1a91c), X(0x708f728b),
449 X(0x3d1dd835), X(0x70777b1c), X(0x3d49fde1), X(0x705f7255),
450 X(0x3d761a19), X(0x70475839), X(0x3da22cd7), X(0x702f2ccd),
451 X(0x3dce3614), X(0x7016f014), X(0x3dfa35c8), X(0x6ffea212),
452 X(0x3e262bee), X(0x6fe642ca), X(0x3e52187f), X(0x6fcdd241),
453 X(0x3e7dfb73), X(0x6fb5507a), X(0x3ea9d4c3), X(0x6f9cbd79),
454 X(0x3ed5a46b), X(0x6f841942), X(0x3f016a61), X(0x6f6b63d8),
455 X(0x3f2d26a0), X(0x6f529d40), X(0x3f58d921), X(0x6f39c57d),
456 X(0x3f8481dd), X(0x6f20dc92), X(0x3fb020ce), X(0x6f07e285),
457 X(0x3fdbb5ec), X(0x6eeed758), X(0x40074132), X(0x6ed5bb10),
458 X(0x4032c297), X(0x6ebc8db0), X(0x405e3a16), X(0x6ea34f3d),
459 X(0x4089a7a8), X(0x6e89ffb9), X(0x40b50b46), X(0x6e709f2a),
460 X(0x40e064ea), X(0x6e572d93), X(0x410bb48c), X(0x6e3daaf8),
461 X(0x4136fa27), X(0x6e24175c), X(0x416235b2), X(0x6e0a72c5),
462 X(0x418d6729), X(0x6df0bd35), X(0x41b88e84), X(0x6dd6f6b1),
463 X(0x41e3abbc), X(0x6dbd1f3c), X(0x420ebecb), X(0x6da336dc),
464 X(0x4239c7aa), X(0x6d893d93), X(0x4264c653), X(0x6d6f3365),
465 X(0x428fbabe), X(0x6d551858), X(0x42baa4e6), X(0x6d3aec6e),
466 X(0x42e584c3), X(0x6d20afac), X(0x43105a50), X(0x6d066215),
467 X(0x433b2585), X(0x6cec03af), X(0x4365e65b), X(0x6cd1947c),
468 X(0x43909ccd), X(0x6cb71482), X(0x43bb48d4), X(0x6c9c83c3),
469 X(0x43e5ea68), X(0x6c81e245), X(0x44108184), X(0x6c67300b),
470 X(0x443b0e21), X(0x6c4c6d1a), X(0x44659039), X(0x6c319975),
471 X(0x449007c4), X(0x6c16b521), X(0x44ba74bd), X(0x6bfbc021),
472 X(0x44e4d71c), X(0x6be0ba7b), X(0x450f2edb), X(0x6bc5a431),
473 X(0x45397bf4), X(0x6baa7d49), X(0x4563be60), X(0x6b8f45c7),
474 X(0x458df619), X(0x6b73fdae), X(0x45b82318), X(0x6b58a503),
475 X(0x45e24556), X(0x6b3d3bcb), X(0x460c5cce), X(0x6b21c208),
476 X(0x46366978), X(0x6b0637c1), X(0x46606b4e), X(0x6aea9cf8),
477 X(0x468a624a), X(0x6acef1b2), X(0x46b44e65), X(0x6ab335f4),
478 X(0x46de2f99), X(0x6a9769c1), X(0x470805df), X(0x6a7b8d1e),
479 X(0x4731d131), X(0x6a5fa010), X(0x475b9188), X(0x6a43a29a),
480 X(0x478546de), X(0x6a2794c1), X(0x47aef12c), X(0x6a0b7689),
481 X(0x47d8906d), X(0x69ef47f6), X(0x48022499), X(0x69d3090e),
482 X(0x482badab), X(0x69b6b9d3), X(0x48552b9b), X(0x699a5a4c),
483 X(0x487e9e64), X(0x697dea7b), X(0x48a805ff), X(0x69616a65),
484 X(0x48d16265), X(0x6944da10), X(0x48fab391), X(0x6928397e),
485 X(0x4923f97b), X(0x690b88b5), X(0x494d341e), X(0x68eec7b9),
486 X(0x49766373), X(0x68d1f68f), X(0x499f8774), X(0x68b5153a),
487 X(0x49c8a01b), X(0x689823bf), X(0x49f1ad61), X(0x687b2224),
488 X(0x4a1aaf3f), X(0x685e106c), X(0x4a43a5b0), X(0x6840ee9b),
489 X(0x4a6c90ad), X(0x6823bcb7), X(0x4a957030), X(0x68067ac3),
490 X(0x4abe4433), X(0x67e928c5), X(0x4ae70caf), X(0x67cbc6c0),
491 X(0x4b0fc99d), X(0x67ae54ba), X(0x4b387af9), X(0x6790d2b6),
492 X(0x4b6120bb), X(0x677340ba), X(0x4b89badd), X(0x67559eca),
493 X(0x4bb24958), X(0x6737ecea), X(0x4bdacc28), X(0x671a2b20),
494 X(0x4c034345), X(0x66fc596f), X(0x4c2baea9), X(0x66de77dc),
495 X(0x4c540e4e), X(0x66c0866d), X(0x4c7c622d), X(0x66a28524),
496 X(0x4ca4aa41), X(0x66847408), X(0x4ccce684), X(0x6666531d),
497 X(0x4cf516ee), X(0x66482267), X(0x4d1d3b7a), X(0x6629e1ec),
498 X(0x4d455422), X(0x660b91af), X(0x4d6d60df), X(0x65ed31b5),
499 X(0x4d9561ac), X(0x65cec204), X(0x4dbd5682), X(0x65b0429f),
500 X(0x4de53f5a), X(0x6591b38c), X(0x4e0d1c30), X(0x657314cf),
501 X(0x4e34ecfc), X(0x6554666d), X(0x4e5cb1b9), X(0x6535a86b),
502 X(0x4e846a60), X(0x6516dacd), X(0x4eac16eb), X(0x64f7fd98),
503 X(0x4ed3b755), X(0x64d910d1), X(0x4efb4b96), X(0x64ba147d),
504 X(0x4f22d3aa), X(0x649b08a0), X(0x4f4a4f89), X(0x647bed3f),
505 X(0x4f71bf2e), X(0x645cc260), X(0x4f992293), X(0x643d8806),
506 X(0x4fc079b1), X(0x641e3e38), X(0x4fe7c483), X(0x63fee4f8),
507 X(0x500f0302), X(0x63df7c4d), X(0x50363529), X(0x63c0043b),
508 X(0x505d5af1), X(0x63a07cc7), X(0x50847454), X(0x6380e5f6),
509 X(0x50ab814d), X(0x63613fcd), X(0x50d281d5), X(0x63418a50),
510 X(0x50f975e6), X(0x6321c585), X(0x51205d7b), X(0x6301f171),
511 X(0x5147388c), X(0x62e20e17), X(0x516e0715), X(0x62c21b7e),
512 X(0x5194c910), X(0x62a219aa), X(0x51bb7e75), X(0x628208a1),
513 X(0x51e22740), X(0x6261e866), X(0x5208c36a), X(0x6241b8ff),
514 X(0x522f52ee), X(0x62217a72), X(0x5255d5c5), X(0x62012cc2),
515 X(0x527c4bea), X(0x61e0cff5), X(0x52a2b556), X(0x61c06410),
516 X(0x52c91204), X(0x619fe918), X(0x52ef61ee), X(0x617f5f12),
517 X(0x5315a50e), X(0x615ec603), X(0x533bdb5d), X(0x613e1df0),
518 X(0x536204d7), X(0x611d66de), X(0x53882175), X(0x60fca0d2),
519 X(0x53ae3131), X(0x60dbcbd1), X(0x53d43406), X(0x60bae7e1),
520 X(0x53fa29ed), X(0x6099f505), X(0x542012e1), X(0x6078f344),
521 X(0x5445eedb), X(0x6057e2a2), X(0x546bbdd7), X(0x6036c325),
522 X(0x54917fce), X(0x601594d1), X(0x54b734ba), X(0x5ff457ad),
523 X(0x54dcdc96), X(0x5fd30bbc), X(0x5502775c), X(0x5fb1b104),
524 X(0x55280505), X(0x5f90478a), X(0x554d858d), X(0x5f6ecf53),
525 X(0x5572f8ed), X(0x5f4d4865), X(0x55985f20), X(0x5f2bb2c5),
526 X(0x55bdb81f), X(0x5f0a0e77), X(0x55e303e6), X(0x5ee85b82),
527 X(0x5608426e), X(0x5ec699e9), X(0x562d73b2), X(0x5ea4c9b3),
528 X(0x565297ab), X(0x5e82eae5), X(0x5677ae54), X(0x5e60fd84),
529 X(0x569cb7a8), X(0x5e3f0194), X(0x56c1b3a1), X(0x5e1cf71c),
530 X(0x56e6a239), X(0x5dfade20), X(0x570b8369), X(0x5dd8b6a7),
531 X(0x5730572e), X(0x5db680b4), X(0x57551d80), X(0x5d943c4e),
532 X(0x5779d65b), X(0x5d71e979), X(0x579e81b8), X(0x5d4f883b),
533 X(0x57c31f92), X(0x5d2d189a), X(0x57e7afe4), X(0x5d0a9a9a),
534 X(0x580c32a7), X(0x5ce80e41), X(0x5830a7d6), X(0x5cc57394),
535 X(0x58550f6c), X(0x5ca2ca99), X(0x58796962), X(0x5c801354),
536 X(0x589db5b3), X(0x5c5d4dcc), X(0x58c1f45b), X(0x5c3a7a05),
537 X(0x58e62552), X(0x5c179806), X(0x590a4893), X(0x5bf4a7d2),
538 X(0x592e5e19), X(0x5bd1a971), X(0x595265df), X(0x5bae9ce7),
539 X(0x59765fde), X(0x5b8b8239), X(0x599a4c12), X(0x5b68596d),
540 X(0x59be2a74), X(0x5b452288), X(0x59e1faff), X(0x5b21dd90),
541 X(0x5a05bdae), X(0x5afe8a8b), X(0x5a29727b), X(0x5adb297d),
542 X(0x5a4d1960), X(0x5ab7ba6c), X(0x5a70b258), X(0x5a943d5e),
543};
544
diff --git a/apps/codecs/libwma/misc.h b/apps/codecs/libwma/misc.h
deleted file mode 100644
index 59760bf885..0000000000
--- a/apps/codecs/libwma/misc.h
+++ /dev/null
@@ -1,291 +0,0 @@
1/********************************************************************
2 * *
3 * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
4 * *
5 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
6 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
7 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
8 * *
9 * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
10 * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
11 * *
12 ********************************************************************
13
14 function: miscellaneous math and prototypes
15
16 ********************************************************************/
17
18//#include "config-tremor.h"
19
20#ifndef _V_RANDOM_H_
21#define _V_RANDOM_H_
22//#include "ivorbiscodec.h"
23//#include "os_types.h"
24
25//#include "asm_arm.h"
26//#include "asm_mcf5249.h"
27
28
29/* Some prototypes that were not defined elsewhere */
30//void *_vorbis_block_alloc(vorbis_block *vb,long bytes);
31//void _vorbis_block_ripcord(vorbis_block *vb);
32//extern int _ilog(unsigned int v);
33
34#ifndef _V_WIDE_MATH
35#define _V_WIDE_MATH
36
37#ifndef _LOW_ACCURACY_
38/* 64 bit multiply */
39/* #include <sys/types.h> */
40
41#if BYTE_ORDER==LITTLE_ENDIAN
42union magic {
43 struct {
44 ogg_int32_t lo;
45 ogg_int32_t hi;
46 } halves;
47 ogg_int64_t whole;
48};
49#elif BYTE_ORDER==BIG_ENDIAN
50union magic {
51 struct {
52 ogg_int32_t hi;
53 ogg_int32_t lo;
54 } halves;
55 ogg_int64_t whole;
56};
57#endif
58
59static inline ogg_int32_t MULT32(ogg_int32_t x, ogg_int32_t y) {
60 union magic magic;
61 magic.whole = (ogg_int64_t)x * y;
62 return magic.halves.hi;
63}
64static inline ogg_int32_t MULT31(ogg_int32_t x, ogg_int32_t y) {
65 return MULT32(x,y)<<1;
66}
67
68static inline ogg_int32_t MULT31_SHIFT15(ogg_int32_t x, ogg_int32_t y) {
69 union magic magic;
70 magic.whole = (ogg_int64_t)x * y;
71 return ((ogg_uint32_t)(magic.halves.lo)>>15) | ((magic.halves.hi)<<17);
72}
73
74#else
75/* 32 bit multiply, more portable but less accurate */
76
77/*
78 * Note: Precision is biased towards the first argument therefore ordering
79 * is important. Shift values were chosen for the best sound quality after
80 * many listening tests.
81 */
82
83/*
84 * For MULT32 and MULT31: The second argument is always a lookup table
85 * value already preshifted from 31 to 8 bits. We therefore take the
86 * opportunity to save on text space and use unsigned char for those
87 * tables in this case.
88 */
89
90static inline ogg_int32_t MULT32(ogg_int32_t x, ogg_int32_t y) {
91 return (x >> 9) * y; /* y preshifted >>23 */
92}
93
94static inline ogg_int32_t MULT31(ogg_int32_t x, ogg_int32_t y) {
95 return (x >> 8) * y; /* y preshifted >>23 */
96}
97
98static inline ogg_int32_t MULT31_SHIFT15(ogg_int32_t x, ogg_int32_t y) {
99 return (x >> 6) * y; /* y preshifted >>9 */
100}
101#endif
102
103/*
104 * This should be used as a memory barrier, forcing all cached values in
105 * registers to wr writen back to memory. Might or might not be beneficial
106 * depending on the architecture and compiler.
107 */
108#define MB()
109
110/*
111 * The XPROD functions are meant to optimize the cross products found all
112 * over the place in mdct.c by forcing memory operation ordering to avoid
113 * unnecessary register reloads as soon as memory is being written to.
114 * However this is only beneficial on CPUs with a sane number of general
115 * purpose registers which exclude the Intel x86. On Intel, better let the
116 * compiler actually reload registers directly from original memory by using
117 * macros.
118 */
119
120/* replaced XPROD32 with a macro to avoid memory reference
121 _x, _y are the results (must be l-values) */
122#define XPROD32(_a, _b, _t, _v, _x, _y) \
123 { (_x)=MULT32(_a,_t)+MULT32(_b,_v); \
124 (_y)=MULT32(_b,_t)-MULT32(_a,_v); }
125
126
127#ifdef __i386__
128
129#define XPROD31(_a, _b, _t, _v, _x, _y) \
130 { *(_x)=MULT31(_a,_t)+MULT31(_b,_v); \
131 *(_y)=MULT31(_b,_t)-MULT31(_a,_v); }
132#define XNPROD31(_a, _b, _t, _v, _x, _y) \
133 { *(_x)=MULT31(_a,_t)-MULT31(_b,_v); \
134 *(_y)=MULT31(_b,_t)+MULT31(_a,_v); }
135
136#else
137
138static inline void XPROD31(ogg_int32_t a, ogg_int32_t b,
139 ogg_int32_t t, ogg_int32_t v,
140 ogg_int32_t *x, ogg_int32_t *y)
141{
142 *x = MULT31(a, t) + MULT31(b, v);
143 *y = MULT31(b, t) - MULT31(a, v);
144}
145
146static inline void XNPROD31(ogg_int32_t a, ogg_int32_t b,
147 ogg_int32_t t, ogg_int32_t v,
148 ogg_int32_t *x, ogg_int32_t *y)
149{
150 *x = MULT31(a, t) - MULT31(b, v);
151 *y = MULT31(b, t) + MULT31(a, v);
152}
153#endif
154
155#ifndef _V_VECT_OPS
156#define _V_VECT_OPS
157
158static inline
159void vect_add(ogg_int32_t *x, ogg_int32_t *y, int n)
160{
161 while (n>0) {
162 *x++ += *y++;
163 n--;
164 }
165}
166
167static inline
168void vect_copy(ogg_int32_t *x, ogg_int32_t *y, int n)
169{
170 while (n>0) {
171 *x++ = *y++;
172 n--;
173 }
174}
175
176static inline
177void vect_mult_fw(ogg_int32_t *data, LOOKUP_T *window, int n)
178{
179 while(n>0) {
180 *data = MULT31(*data, *window);
181 data++;
182 window++;
183 n--;
184 }
185}
186
187static inline
188void vect_mult_bw(ogg_int32_t *data, LOOKUP_T *window, int n)
189{
190 while(n>0) {
191 *data = MULT31(*data, *window);
192 data++;
193 window--;
194 n--;
195 }
196}
197#endif
198
199#endif
200
201#ifndef _V_CLIP_MATH
202#define _V_CLIP_MATH
203
204static inline ogg_int32_t CLIP_TO_15(ogg_int32_t x) {
205 int ret=x;
206 ret-= ((x<=32767)-1)&(x-32767);
207 ret-= ((x>=-32768)-1)&(x+32768);
208 return(ret);
209}
210
211#endif
212
213static inline ogg_int32_t VFLOAT_MULT(ogg_int32_t a,ogg_int32_t ap,
214 ogg_int32_t b,ogg_int32_t bp,
215 ogg_int32_t *p){
216 if(a && b){
217#ifndef _LOW_ACCURACY_
218 *p=ap+bp+32;
219 return MULT32(a,b);
220#else
221 *p=ap+bp+31;
222 return (a>>15)*(b>>16);
223#endif
224 }else
225 return 0;
226}
227
228/*static inline ogg_int32_t VFLOAT_MULTI(ogg_int32_t a,ogg_int32_t ap,
229 ogg_int32_t i,
230 ogg_int32_t *p){
231
232 int ip=_ilog(abs(i))-31;
233 return VFLOAT_MULT(a,ap,i<<-ip,ip,p);
234}
235*/
236static inline ogg_int32_t VFLOAT_ADD(ogg_int32_t a,ogg_int32_t ap,
237 ogg_int32_t b,ogg_int32_t bp,
238 ogg_int32_t *p){
239
240 if(!a){
241 *p=bp;
242 return b;
243 }else if(!b){
244 *p=ap;
245 return a;
246 }
247
248 /* yes, this can leak a bit. */
249 if(ap>bp){
250 int shift=ap-bp+1;
251 *p=ap+1;
252 a>>=1;
253 if(shift<32){
254 b=(b+(1<<(shift-1)))>>shift;
255 }else{
256 b=0;
257 }
258 }else{
259 int shift=bp-ap+1;
260 *p=bp+1;
261 b>>=1;
262 if(shift<32){
263 a=(a+(1<<(shift-1)))>>shift;
264 }else{
265 a=0;
266 }
267 }
268
269 a+=b;
270 if((a&0xc0000000)==0xc0000000 ||
271 (a&0xc0000000)==0){
272 a<<=1;
273 (*p)--;
274 }
275 return(a);
276}
277
278#ifdef __GNUC__
279#if __GNUC__ >= 3
280#define EXPECT(a, b) __builtin_expect((a), (b))
281#else
282#define EXPECT(a, b) (a)
283#endif
284#else
285#define EXPECT(a, b) (a)
286#endif
287
288#endif
289
290
291
diff --git a/apps/codecs/libwma/wmadeci.c b/apps/codecs/libwma/wmadeci.c
index a96907135d..5677ac69f8 100644
--- a/apps/codecs/libwma/wmadeci.c
+++ b/apps/codecs/libwma/wmadeci.c
@@ -28,7 +28,6 @@
28#include "wmadec.h" 28#include "wmadec.h"
29#include "wmafixed.h" 29#include "wmafixed.h"
30#include "bitstream.h" 30#include "bitstream.h"
31#include "mdct2.h"
32 31
33 32
34#define VLCBITS 7 /*7 is the lowest without glitching*/ 33#define VLCBITS 7 /*7 is the lowest without glitching*/
@@ -1389,7 +1388,7 @@ static int wma_decode_block(WMADecodeContext *s, int32_t *scratch_buffer)
1389 n4 = s->block_len >>1; 1388 n4 = s->block_len >>1;
1390 1389
1391 /*faster IMDCT from Vorbis*/ 1390 /*faster IMDCT from Vorbis*/
1392 mdct_backward( (1 << (12-bsize)), (int*)(*(s->coefs))[ch], (int*)scratch_buffer); 1391 mdct_backward( (1 << (12-bsize)), (int32_t*)(*(s->coefs))[ch], (int32_t*)scratch_buffer);
1393 1392
1394 /*slower but more easily understood IMDCT from FFMPEG*/ 1393 /*slower but more easily understood IMDCT from FFMPEG*/
1395 //ff_imdct_calc(&s->mdct_ctx[bsize], 1394 //ff_imdct_calc(&s->mdct_ctx[bsize],
@@ -1435,7 +1434,7 @@ static int wma_decode_frame(WMADecodeContext *s, int32_t *samples)
1435 /* read each block */ 1434 /* read each block */
1436 s->block_num = 0; 1435 s->block_num = 0;
1437 s->block_pos = 0; 1436 s->block_pos = 0;
1438 1437
1439 1438
1440 for(;;) 1439 for(;;)
1441 { 1440 {