blob: 54d795d24bbca075aa74c169063922cf3792ab8e [file] [log] [blame]
Christophe Favergeonaefd2772020-01-08 09:01:17 +01001import numpy as np
2import math
3import argparse
Christophe Favergeond5e0a042020-01-10 14:31:14 +01004import sys
5
6sys.path.append("PatternGeneration")
7
8import Tools
Christophe Favergeonaefd2772020-01-08 09:01:17 +01009
10parser = argparse.ArgumentParser(description='Generate C arrays')
11parser.add_argument('-f', nargs='?',type = str, default="../Source/CommonTables/arm_mve_tables.c", help="C File path")
Christophe Favergeonc46f1522020-04-21 14:04:25 +020012parser.add_argument('-f16', nargs='?',type = str, default="../Source/CommonTables/arm_mve_tables_f16.c", help="C File path")
Christophe Favergeonaefd2772020-01-08 09:01:17 +010013parser.add_argument('-he', nargs='?',type = str, default="../Include/arm_mve_tables.h", help="H File path")
Christophe Favergeonc46f1522020-04-21 14:04:25 +020014parser.add_argument('-he16', nargs='?',type = str, default="../Include/arm_mve_tables_f16.h", help="H File path")
Christophe Favergeonaefd2772020-01-08 09:01:17 +010015
16args = parser.parse_args()
17
18COLLIM = 80
19
Christophe Favergeond5e0a042020-01-10 14:31:14 +010020condition="""#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_%s_%d) || defined(ARM_TABLE_TWIDDLECOEF_%s_%d)
Christophe Favergeonaefd2772020-01-08 09:01:17 +010021"""
22
Christophe Favergeond5e0a042020-01-10 14:31:14 +010023F32 = 1
Christophe Favergeon890f7602020-04-14 09:47:39 +020024F16 = 2
25Q31 = 3
26Q15 = 4
27Q7 = 5
Christophe Favergeond5e0a042020-01-10 14:31:14 +010028
Christophe Favergeonaefd2772020-01-08 09:01:17 +010029def printCUInt32Array(f,name,arr):
30 nb = 0
31 print("uint32_t %s[%d]={" % (name,len(arr)),file=f)
32
33 for d in arr:
34 val = "%d," % d
35 nb = nb + len(val)
36 if nb > COLLIM:
37 print("",file=f)
38 nb = len(val)
39 print(val,end="",file=f)
40
41 print("};\n",file=f)
42
43def printCFloat32Array(f,name,arr):
44 nb = 0
45 print("float32_t %s[%d]={" % (name,len(arr)),file=f)
46
47 for d in arr:
48 val = "%.20ff," % d
49 nb = nb + len(val)
50 if nb > COLLIM:
51 print("",file=f)
52 nb = len(val)
53 print(val,end="",file=f)
54
55 print("};\n",file=f)
56
Christophe Favergeon890f7602020-04-14 09:47:39 +020057def printCFloat16Array(f,name,arr):
58 nb = 0
59 print("float16_t %s[%d]={" % (name,len(arr)),file=f)
60
61 for d in arr:
62 val = "(float16_t)%.20ff," % d
63 nb = nb + len(val)
64 if nb > COLLIM:
65 print("",file=f)
66 nb = len(val)
67 print(val,end="",file=f)
68
69 print("};\n",file=f)
70
Christophe Favergeond5e0a042020-01-10 14:31:14 +010071def printCQ31Array(f,name,arr):
72 nb = 0
73 print("q31_t %s[%d]={" % (name,len(arr)),file=f)
74
75 for d in arr:
76 val = "%s," % Tools.to_q31(d)
77 nb = nb + len(val)
78 if nb > COLLIM:
79 print("",file=f)
80 nb = len(val)
81 print(val,end="",file=f)
82
83 print("};\n",file=f)
84
85def printCQ15Array(f,name,arr):
86 nb = 0
87 print("q15_t %s[%d]={" % (name,len(arr)),file=f)
88
89 for d in arr:
90 val = "%s," % Tools.to_q15(d)
91 nb = nb + len(val)
92 if nb > COLLIM:
93 print("",file=f)
94 nb = len(val)
95 print(val,end="",file=f)
96
97 print("};\n",file=f)
98
99def printCQ7Array(f,name,arr):
100 nb = 0
101 print("q7_t %s[%d]={" % (name,len(arr)),file=f)
102
103 for d in arr:
104 val = "%s," % Tools.to_q7(d)
105 nb = nb + len(val)
106 if nb > COLLIM:
107 print("",file=f)
108 nb = len(val)
109 print(val,end="",file=f)
110
111 print("};\n",file=f)
112
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100113def printHUInt32Array(f,name,arr):
114 print("extern uint32_t %s[%d];" % (name,len(arr)),file=f)
115
116def printHFloat32Array(f,name,arr):
117 print("extern float32_t %s[%d];" % (name,len(arr)),file=f)
118
Christophe Favergeon890f7602020-04-14 09:47:39 +0200119def printHFloat16Array(f,name,arr):
120 print("extern float16_t %s[%d];" % (name,len(arr)),file=f)
121
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100122def printHQ31Array(f,name,arr):
123 print("extern q31_t %s[%d];" % (name,len(arr)),file=f)
124
125def printHQ15Array(f,name,arr):
126 print("extern q15_t %s[%d];" % (name,len(arr)),file=f)
127
128def printHQ7Array(f,name,arr):
129 print("extern q7_t %s[%d];" % (name,len(arr)),file=f)
130
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100131def twiddle(n):
132 a=2.0*math.pi*np.linspace(0,n,num=n,endpoint=False)/n
133 c=np.cos(a)
134 s=np.sin(a)
135
136 r = np.empty((c.size + s.size,), dtype=c.dtype)
137 r[0::2] = c
138 r[1::2] = s
139 return(r)
140
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100141def reorderTwiddle(theType,conjugate,f,h,n):
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100142 numStages = 6
143 coefs= twiddle(n)
144
145
146 if n == 4096:
147 numStages = 6
148 arraySize = 1364
149
150 if n == 1024:
151 numStages = 5
152 arraySize = 340
153
154 if n == 256:
155 numStages = 4
156 arraySize = 84
157
158 if n == 64:
159 numStages = 3
160 arraySize = 20
161
162 if n == 16:
163 numStages = 2
164 arraySize = 4
165
166 incr = 1
167 nbOfElt = n
168
169 maxNb = 0
170
171 tab1 = np.zeros(2*arraySize)
172 tab2 = np.zeros(2*arraySize)
173 tab3 = np.zeros(2*arraySize)
174
175 tab1Index=0
176 tab2Index=0
177 tab3Index=0
178
179 tab1Offset = np.zeros(numStages)
180 tab2Offset = np.zeros(numStages)
181 tab3Offset = np.zeros(numStages)
182
183
184
185 for stage in range(0,numStages-1):
186 nbOfElt = nbOfElt >> 2
187 pVectCoef1 = 0
188 pVectCoef2 = 0
189 pVectCoef3 = 0
190
191 tab1Offset[stage] = tab1Index
192 tab2Offset[stage] = tab2Index
193 tab3Offset[stage] = tab3Index
194
195 for i in range(0,nbOfElt):
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100196 tab1[tab1Index] = coefs[pVectCoef1]
197 if not conjugate:
198 tab1[tab1Index + 1] = coefs[pVectCoef1 + 1]
199 else:
200 tab1[tab1Index + 1] = -coefs[pVectCoef1 + 1]
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100201 tab1Index = tab1Index + 2
202 pVectCoef1 = pVectCoef1 + (incr * 1 * 2)
203
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100204 tab2[tab2Index] = coefs[pVectCoef2]
205 if not conjugate:
206 tab2[tab2Index + 1] = coefs[pVectCoef2 + 1]
207 else:
208 tab2[tab2Index + 1] = -coefs[pVectCoef2 + 1]
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100209 tab2Index = tab2Index + 2
210 pVectCoef2 = pVectCoef2 + (incr * 2 * 2)
211
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100212 tab3[tab3Index] = coefs[pVectCoef3]
213 if not conjugate:
214 tab3[tab3Index + 1] = coefs[pVectCoef3 + 1]
215 else:
216 tab3[tab3Index + 1] = -coefs[pVectCoef3 + 1]
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100217 tab3Index = tab3Index + 2
218 pVectCoef3 = pVectCoef3 + (incr * 3 * 2)
219
220 maxNb = maxNb + 1
221
222 incr = 4 * incr
223
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100224 # F32 SECTION FOR THIS FFT LENGTH
225 if theType == F32:
226 print(condition % ("F32",n, "F32",n << 1),file=f)
227 print(condition % ("F32",n, "F32",n << 1),file=h)
228 printCUInt32Array(f,"rearranged_twiddle_tab_stride1_arr_%d_f32" % n,list(tab1Offset))
229 printHUInt32Array(h,"rearranged_twiddle_tab_stride1_arr_%d_f32" % n,list(tab1Offset))
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100230
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100231 printCUInt32Array(f,"rearranged_twiddle_tab_stride2_arr_%d_f32" % n,list(tab2Offset))
232 printHUInt32Array(h,"rearranged_twiddle_tab_stride2_arr_%d_f32" % n,list(tab2Offset))
233
234 printCUInt32Array(f,"rearranged_twiddle_tab_stride3_arr_%d_f32" % n,list(tab3Offset))
235 printHUInt32Array(h,"rearranged_twiddle_tab_stride3_arr_%d_f32" % n,list(tab3Offset))
236
237 printCFloat32Array(f,"rearranged_twiddle_stride1_%d_f32" % n,list(tab1))
238 printHFloat32Array(h,"rearranged_twiddle_stride1_%d_f32" % n,list(tab1))
239
240 printCFloat32Array(f,"rearranged_twiddle_stride2_%d_f32" % n,list(tab2))
241 printHFloat32Array(h,"rearranged_twiddle_stride2_%d_f32" % n,list(tab2))
242
243 printCFloat32Array(f,"rearranged_twiddle_stride3_%d_f32" % n,list(tab3))
244 printHFloat32Array(h,"rearranged_twiddle_stride3_%d_f32" % n,list(tab3))
245 print("#endif\n",file=f)
246 print("#endif\n",file=h)
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100247
Christophe Favergeon890f7602020-04-14 09:47:39 +0200248 # F16 SECTION FOR THIS FFT LENGTH
249 if theType == F16:
250 print(condition % ("F16",n, "F16",n << 1),file=f)
251 print(condition % ("F16",n, "F16",n << 1),file=h)
252 printCUInt32Array(f,"rearranged_twiddle_tab_stride1_arr_%d_f16" % n,list(tab1Offset))
253 printHUInt32Array(h,"rearranged_twiddle_tab_stride1_arr_%d_f16" % n,list(tab1Offset))
254
255 printCUInt32Array(f,"rearranged_twiddle_tab_stride2_arr_%d_f16" % n,list(tab2Offset))
256 printHUInt32Array(h,"rearranged_twiddle_tab_stride2_arr_%d_f16" % n,list(tab2Offset))
257
258 printCUInt32Array(f,"rearranged_twiddle_tab_stride3_arr_%d_f16" % n,list(tab3Offset))
259 printHUInt32Array(h,"rearranged_twiddle_tab_stride3_arr_%d_f16" % n,list(tab3Offset))
260
261 printCFloat16Array(f,"rearranged_twiddle_stride1_%d_f16" % n,list(tab1))
262 printHFloat16Array(h,"rearranged_twiddle_stride1_%d_f16" % n,list(tab1))
263
264 printCFloat16Array(f,"rearranged_twiddle_stride2_%d_f16" % n,list(tab2))
265 printHFloat16Array(h,"rearranged_twiddle_stride2_%d_f16" % n,list(tab2))
266
267 printCFloat16Array(f,"rearranged_twiddle_stride3_%d_f16" % n,list(tab3))
268 printHFloat16Array(h,"rearranged_twiddle_stride3_%d_f16" % n,list(tab3))
269 print("#endif\n",file=f)
270 print("#endif\n",file=h)
271
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100272 # Q31 SECTION FOR THIS FFT LENGTH
273 if theType == Q31:
274 print(condition % ("Q31",n, "Q31",n << 1),file=f)
275 print(condition % ("Q31",n, "Q31",n << 1),file=h)
276 printCUInt32Array(f,"rearranged_twiddle_tab_stride1_arr_%d_q31" % n,list(tab1Offset))
277 printHUInt32Array(h,"rearranged_twiddle_tab_stride1_arr_%d_q31" % n,list(tab1Offset))
278
279 printCUInt32Array(f,"rearranged_twiddle_tab_stride2_arr_%d_q31" % n,list(tab2Offset))
280 printHUInt32Array(h,"rearranged_twiddle_tab_stride2_arr_%d_q31" % n,list(tab2Offset))
281
282 printCUInt32Array(f,"rearranged_twiddle_tab_stride3_arr_%d_q31" % n,list(tab3Offset))
283 printHUInt32Array(h,"rearranged_twiddle_tab_stride3_arr_%d_q31" % n,list(tab3Offset))
284
285 printCQ31Array(f,"rearranged_twiddle_stride1_%d_q31" % n,list(tab1))
286 printHQ31Array(h,"rearranged_twiddle_stride1_%d_q31" % n,list(tab1))
287
288 printCQ31Array(f,"rearranged_twiddle_stride2_%d_q31" % n,list(tab2))
289 printHQ31Array(h,"rearranged_twiddle_stride2_%d_q31" % n,list(tab2))
290
291 printCQ31Array(f,"rearranged_twiddle_stride3_%d_q31" % n,list(tab3))
292 printHQ31Array(h,"rearranged_twiddle_stride3_%d_q31" % n,list(tab3))
293 print("#endif\n",file=f)
294 print("#endif\n",file=h)
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100295
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100296 # Q15 SECTION FOR THIS FFT LENGTH
297 if theType == Q15:
298 print(condition % ("Q15",n, "Q15",n << 1),file=f)
299 print(condition % ("Q15",n, "Q15",n << 1),file=h)
300 printCUInt32Array(f,"rearranged_twiddle_tab_stride1_arr_%d_q15" % n,list(tab1Offset))
301 printHUInt32Array(h,"rearranged_twiddle_tab_stride1_arr_%d_q15" % n,list(tab1Offset))
302
303 printCUInt32Array(f,"rearranged_twiddle_tab_stride2_arr_%d_q15" % n,list(tab2Offset))
304 printHUInt32Array(h,"rearranged_twiddle_tab_stride2_arr_%d_q15" % n,list(tab2Offset))
305
306 printCUInt32Array(f,"rearranged_twiddle_tab_stride3_arr_%d_q15" % n,list(tab3Offset))
307 printHUInt32Array(h,"rearranged_twiddle_tab_stride3_arr_%d_q15" % n,list(tab3Offset))
308
309 printCQ15Array(f,"rearranged_twiddle_stride1_%d_q15" % n,list(tab1))
310 printHQ15Array(h,"rearranged_twiddle_stride1_%d_q15" % n,list(tab1))
311
312 printCQ15Array(f,"rearranged_twiddle_stride2_%d_q15" % n,list(tab2))
313 printHQ15Array(h,"rearranged_twiddle_stride2_%d_q15" % n,list(tab2))
314
315 printCQ15Array(f,"rearranged_twiddle_stride3_%d_q15" % n,list(tab3))
316 printHQ15Array(h,"rearranged_twiddle_stride3_%d_q15" % n,list(tab3))
317 print("#endif\n",file=f)
318 print("#endif\n",file=h)
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100319
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100320
321
322
323#test = twiddle(16)
324#printCFloat32Array("Test",list(test))
325
326cheader="""/* ----------------------------------------------------------------------
327 * Project: CMSIS DSP Library
Christophe Favergeonc46f1522020-04-21 14:04:25 +0200328 * Title: arm_mve_tables%s.c
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100329 * Description: common tables like fft twiddle factors, Bitreverse, reciprocal etc
330 * used for MVE implementation only
331 *
Christophe Favergeon890f7602020-04-14 09:47:39 +0200332 * $Date: 14. April 2020
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100333 *
334 * Target Processor: Cortex-M cores
335 * -------------------------------------------------------------------- */
336/*
337 * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved.
338 *
339 * SPDX-License-Identifier: Apache-2.0
340 *
341 * Licensed under the Apache License, Version 2.0 (the License); you may
342 * not use this file except in compliance with the License.
343 * You may obtain a copy of the License at
344 *
345 * www.apache.org/licenses/LICENSE-2.0
346 *
347 * Unless required by applicable law or agreed to in writing, software
348 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
349 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
350 * See the License for the specific language governing permissions and
351 * limitations under the License.
352 */
353
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100354 """
355
Christophe Favergeonc46f1522020-04-21 14:04:25 +0200356cifdeMVEF="""#include "arm_math%s.h"
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100357
358#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
359
360#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES)
361"""
362
363cfooterMVEF="""
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100364
365#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */
366#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
367"""
368
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100369cifdeMVEI="""#include "arm_math.h"
370
371#if defined(ARM_MATH_MVEI)
372
373#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES)
374"""
375
376cfooterMVEI="""
377
378#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */
379#endif /* defined(ARM_MATH_MVEI) */
380"""
381
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100382hheader="""/* ----------------------------------------------------------------------
383 * Project: CMSIS DSP Library
Christophe Favergeonc46f1522020-04-21 14:04:25 +0200384 * Title: arm_mve_tables%s.h
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100385 * Description: common tables like fft twiddle factors, Bitreverse, reciprocal etc
386 * used for MVE implementation only
387 *
Christophe Favergeon890f7602020-04-14 09:47:39 +0200388 * $Date: 14. April 2020
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100389 *
390 * Target Processor: Cortex-M cores
391 * -------------------------------------------------------------------- */
392/*
393 * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved.
394 *
395 * SPDX-License-Identifier: Apache-2.0
396 *
397 * Licensed under the Apache License, Version 2.0 (the License); you may
398 * not use this file except in compliance with the License.
399 * You may obtain a copy of the License at
400 *
401 * www.apache.org/licenses/LICENSE-2.0
402 *
403 * Unless required by applicable law or agreed to in writing, software
404 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
405 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
406 * See the License for the specific language governing permissions and
407 * limitations under the License.
408 */
409
Christophe Favergeonc46f1522020-04-21 14:04:25 +0200410 #ifndef _ARM_MVE_TABLES_%sH
411 #define _ARM_MVE_TABLES_%sH
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100412
Christophe Favergeonc46f1522020-04-21 14:04:25 +0200413 #include "arm_math%s.h"
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100414
Christophe Favergeonc46f1522020-04-21 14:04:25 +0200415#ifdef __cplusplus
416extern "C"
417{
418#endif
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100419
420
421 """
422
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100423hifdefMVEF="""
424#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
425
426#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES)
427"""
428
429hfooterMVEF="""
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100430#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */
431
432#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
433
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100434"""
435
436hifdefMVEI="""
437#if defined(ARM_MATH_MVEI)
438
439#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES)
440"""
441
442hfooterMVEI="""
443#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */
444
445#endif /* defined(ARM_MATH_MVEI) */
446
447"""
448
449hfooter="""
Christophe Favergeonc46f1522020-04-21 14:04:25 +0200450#ifdef __cplusplus
451}
452#endif
453
454#endif /*_ARM_MVE_TABLES_%sH*/
Christophe Favergeonaefd2772020-01-08 09:01:17 +0100455"""
456
Christophe Favergeonc46f1522020-04-21 14:04:25 +0200457with open(args.f16,'w') as f:
458 with open(args.he16,'w') as h:
459 print(cheader % "_f16",file=f)
460 print(hheader % ("_f16","F16_","F16_","_f16"),file=h)
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100461
Christophe Favergeonc46f1522020-04-21 14:04:25 +0200462 print("#if defined(ARM_FLOAT16_SUPPORTED)",file=f)
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100463
Christophe Favergeonc46f1522020-04-21 14:04:25 +0200464 print(cifdeMVEF % "_f16",file=f)
Christophe Favergeon890f7602020-04-14 09:47:39 +0200465 print(hifdefMVEF,file=h)
466 reorderTwiddle(F16,False,f,h,16)
467 reorderTwiddle(F16,False,f,h,64)
468 reorderTwiddle(F16,False,f,h,256)
469 reorderTwiddle(F16,False,f,h,1024)
470 reorderTwiddle(F16,False,f,h,4096)
471 print(cfooterMVEF,file=f)
472 print(hfooterMVEF,file=h)
473
Christophe Favergeonc46f1522020-04-21 14:04:25 +0200474 print("#endif /* if defined(ARM_FLOAT16_SUPPORTED) */",file=f)
475
476 print(hfooter % "F16_",file=h)
477
478with open(args.f,'w') as f:
479 with open(args.he,'w') as h:
480 print(cheader % "",file=f)
481 print(hheader % ("","","",""),file=h)
482
483
484 print(cifdeMVEF % "",file=f)
485 print(hifdefMVEF,file=h)
486 reorderTwiddle(F32,False,f,h,16)
487 reorderTwiddle(F32,False,f,h,64)
488 reorderTwiddle(F32,False,f,h,256)
489 reorderTwiddle(F32,False,f,h,1024)
490 reorderTwiddle(F32,False,f,h,4096)
491 print(cfooterMVEF,file=f)
492 print(hfooterMVEF,file=h)
493
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100494 print(cifdeMVEI,file=f)
495 print(hifdefMVEI,file=h)
496 reorderTwiddle(Q31,True,f,h,16)
497 reorderTwiddle(Q31,True,f,h,64)
498 reorderTwiddle(Q31,True,f,h,256)
499 reorderTwiddle(Q31,True,f,h,1024)
500 reorderTwiddle(Q31,True,f,h,4096)
501 print(cfooterMVEI,file=f)
502 print(hfooterMVEI,file=h)
503
504 print(cifdeMVEI,file=f)
505 print(hifdefMVEI,file=h)
506 reorderTwiddle(Q15,True,f,h,16)
507 reorderTwiddle(Q15,True,f,h,64)
508 reorderTwiddle(Q15,True,f,h,256)
509 reorderTwiddle(Q15,True,f,h,1024)
510 reorderTwiddle(Q15,True,f,h,4096)
511 print(cfooterMVEI,file=f)
512 print(hfooterMVEI,file=h)
513
Christophe Favergeonc46f1522020-04-21 14:04:25 +0200514 #print(cifdeMVEI,file=f)
515 #print(hifdefMVEI,file=h)
516 #reorderTwiddle(Q7,True,f,h,16)
517 #reorderTwiddle(Q7,True,f,h,64)
518 #reorderTwiddle(Q7,True,f,h,256)
519 #reorderTwiddle(Q7,True,f,h,1024)
520 #reorderTwiddle(Q7,True,f,h,4096)
521 #print(cfooterMVEI,file=f)
522 #print(hfooterMVEI,file=h)
Christophe Favergeond5e0a042020-01-10 14:31:14 +0100523
Christophe Favergeonc46f1522020-04-21 14:04:25 +0200524 print(hfooter % "",file=h)