Line data Source code
1 : /* Note: This file is auto generated. */
2 : #ifndef HEADER_fd_src_ballet_reedsol_fd_reedsol_ppt_h
3 : #define HEADER_fd_src_ballet_reedsol_fd_reedsol_ppt_h
4 :
5 : #include "fd_reedsol_fft.h"
6 :
7 : /* This file implements the Principal Pivot Transform for the Reed
8 : Solomon FFT operator as described in:
9 : S. -J. Lin, A. Alloum and T. Al-Naffouri, "Principal pivot
10 : transforms on radix-2 DFT-type matrices," 2017 IEEE International
11 : Symposium on Information Theory (ISIT), Aachen, Germany, 2017, pp.
12 : 2358-2362, doi: 10.1109/ISIT.2017.8006951
13 :
14 : The main macro this file provides is FD_REEDSOL_GENERATE_PPT. The
15 : rest of this file is auto-generated implementation details.
16 :
17 : When the number of data shreds we have is not a power of 2, the
18 : approach used in the 32-32 case doesn't apply. I found the paper
19 : extending it to the general case uninterpretable. So we use the
20 : principal pivot transform as an alternative with similar
21 : computational complexity.
22 :
23 : The goal of the first step of the 32-32 case is to find a polynomial
24 : of degree < 32 that interpolates the data shreds. If we only have k
25 : data shreds, where k<32, then instead we need a polynomial P of
26 : degree <k that passes through the k data shreds that we have. If we
27 : could somehow determine P(k), P(k+1), ... P(31), then we could just
28 : use the 32-32 fast case. The principal pivot transform gives us a
29 : way to do exactly that.
30 :
31 : In the 32-32 case, we have:
32 : ( m_0 ) ( y_0 )
33 : ( m_1 ) ( y_1 )
34 : F^{-1} * ( ... ) = ( ... )
35 : ( m_30 ) ( y_30 )
36 : ( m_31 ) ( y_31 )
37 :
38 : where m is in the evaluation domain (i.e. P(i) = m_i) and y is in the
39 : coefficient domain (coefficients of the special basis elements).
40 : Now, we don't know the last 32-k elements of the m vector, i.e.
41 :
42 : ( m_0 ) ( y_0 )
43 : ( m_1 ) ( y_1 )
44 : F^{-1} * ( ... ) = ( ... )
45 : ( ??? ) ( y_30 )
46 : ( ??? ) ( y_31 )
47 :
48 : but what we do know is that the last 32-k elements of the y vector
49 : must be 0 in order for P to have the right order. I.e.
50 :
51 : ( m_0 ) ( y_0 )
52 : ( m_1 ) ( y_1 )
53 : F^{-1} * ( ... ) = ( ... )
54 : ( ??? ) ( 0 )
55 : ( ??? ) ( 0 )
56 :
57 : The principal pivot transform solves this type of problem, and for
58 : certain operators F (including the one we care about here) has a
59 : complexity of O(n log n), where F is an nxn matrix. To keep
60 : consistent with the paper, we multiply through by F and name the
61 : unknowns, actually solving
62 :
63 : ( y_0 ) ( m_0 )
64 : ( y_1 ) ( m_1 )
65 : F * ( ... ) = ( ... )
66 : ( 0 ) ( x_30 )
67 : ( 0 ) ( x_31 )
68 :
69 : Once we've solved this, x_k gives us P(k), i.e. the first parity
70 : shred. If we need more than 32-k parity shreds, then we can just use
71 : the same strategy as the 32-32 case and use the shifted FFT operation
72 : to go back from the coefficient domain to the evaluation domain with
73 : an offset of 32, giving us P(32), P(33), ... P(63) cheaply.
74 :
75 : The paper describes a more general case than what we need, since we
76 : always know the first k elements of the product vector, and not an
77 : arbitrary subset of them. This file only implements the specific
78 : case. */
79 :
80 : /* FD_REEDSOL_GENERATE_PPT: Inserts code to compute the principal pivot
81 : transform of size n (must be a power of 2, currently 16, 32, 64, and
82 : 128 are emitted by the code generator) and when you have k known
83 : elements of the evaluation domain (i.e. k data shreds). k must be
84 : less than n, but the code generator adds the additional restrictions
85 : that k<=67 and only the smallest n is chosen for each k.
86 : Additionally, The remaining n arguments should be vector variables of
87 : type gf_t (which is a typedef for wb_t in the AVX case). These are
88 : used as input and output, since there's no other good way to return n
89 : vector values. As such, this macro is not robust.
90 :
91 : As explained above, the PPT computes the k non-zero elements of the
92 : coefficient domain, followed by the first n-k parity elements. If
93 : the last n-k return values are replaced with zero, they can then be
94 : used with FD_REEDSOL_GENERATE_FFT and the appropriate shift to
95 : compute many more parity elements. The PPT is computed in a
96 : vectorized fashion, i.e. the PPT of the ith byte is computed and
97 : stored in the ith byte of the output for each i independently. */
98 :
99 0 : #define FD_REEDSOL_GENERATE_PPT(n, k, ...) FD_REEDSOL_PPT_IMPL_##n##_##k( __VA_ARGS__ )
100 :
101 : /* For n>=32, this header also declares
102 : void fd_reedsol_ppt_n_k( gf_t *, ... )
103 : that takes n gf_t elements by reference. The arguments are used for
104 : input and output, and it performs the same operation as the similarly
105 : named macro, but this signature allows the function to be defined in
106 : a different compilation unit to speed up compile times. */
107 :
108 : #define FD_REEDSOL_PPT_IMPL_16_1( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09 , \
109 : in10, in11, in12, in13, in14, in15) \
110 0 : do { \
111 0 : in09 = GF_ADD( in01, in09 ); \
112 0 : in10 = GF_ADD( in02, in10 ); \
113 0 : in11 = GF_ADD( in03, in11 ); \
114 0 : in12 = GF_ADD( in04, in12 ); \
115 0 : in13 = GF_ADD( in05, in13 ); \
116 0 : in14 = GF_ADD( in06, in14 ); \
117 0 : in15 = GF_ADD( in07, in15 ); \
118 0 : in05 = GF_ADD( in01, in05 ); \
119 0 : in06 = GF_ADD( in02, in06 ); \
120 0 : in07 = GF_ADD( in03, in07 ); \
121 0 : in03 = GF_ADD( in01, in03 ); \
122 0 : in01 = GF_ADD( in00, in01 ); \
123 0 : in02 = GF_ADD( in00, in02 ); \
124 0 : { \
125 0 : gf_t temp = GF_ADD( in02, GF_MUL( in03, 2 ) ); \
126 0 : in03 = GF_ADD( in02, GF_MUL( in03, 3 ) ); \
127 0 : in02 = temp; \
128 0 : } \
129 0 : in04 = GF_ADD( in00, in04 ); \
130 0 : FD_REEDSOL_GENERATE_FFT( 4, 4, in04, in05, in06, in07 ); \
131 0 : in08 = GF_ADD( in00, in08 ); \
132 0 : FD_REEDSOL_GENERATE_FFT( 8, 8, in08, in09, in10, in11, in12, in13, in14, in15 ); \
133 0 : } while( 0 )
134 :
135 : #define FD_REEDSOL_PPT_IMPL_16_2( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09 , \
136 : in10, in11, in12, in13, in14, in15) \
137 0 : do { \
138 0 : in10 = GF_ADD( in02, in10 ); \
139 0 : in11 = GF_ADD( in03, in11 ); \
140 0 : in12 = GF_ADD( in04, in12 ); \
141 0 : in13 = GF_ADD( in05, in13 ); \
142 0 : in14 = GF_ADD( in06, in14 ); \
143 0 : in15 = GF_ADD( in07, in15 ); \
144 0 : in06 = GF_ADD( in02, in06 ); \
145 0 : in07 = GF_ADD( in03, in07 ); \
146 0 : in01 = GF_ADD( in00, in01 ); \
147 0 : in02 = GF_ADD( in00, in02 ); \
148 0 : in03 = GF_ADD( in01, in03 ); \
149 0 : { \
150 0 : gf_t temp = GF_ADD( in02, GF_MUL( in03, 2 ) ); \
151 0 : in03 = GF_ADD( in02, GF_MUL( in03, 3 ) ); \
152 0 : in02 = temp; \
153 0 : } \
154 0 : in04 = GF_ADD( in00, in04 ); \
155 0 : in05 = GF_ADD( in01, in05 ); \
156 0 : FD_REEDSOL_GENERATE_FFT( 4, 4, in04, in05, in06, in07 ); \
157 0 : in08 = GF_ADD( in00, in08 ); \
158 0 : in09 = GF_ADD( in01, in09 ); \
159 0 : FD_REEDSOL_GENERATE_FFT( 8, 8, in08, in09, in10, in11, in12, in13, in14, in15 ); \
160 0 : } while( 0 )
161 :
162 : #define FD_REEDSOL_PPT_IMPL_16_3( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09 , \
163 : in10, in11, in12, in13, in14, in15) \
164 0 : do { \
165 0 : in11 = GF_ADD( in03, in11 ); \
166 0 : in12 = GF_ADD( in04, in12 ); \
167 0 : in13 = GF_ADD( in05, in13 ); \
168 0 : in14 = GF_ADD( in06, in14 ); \
169 0 : in15 = GF_ADD( in07, in15 ); \
170 0 : in07 = GF_ADD( in03, in07 ); \
171 0 : in01 = GF_ADD( in00, in01 ); \
172 0 : in03 = GF_ADD( in01, in03 ); \
173 0 : { \
174 0 : gf_t temp = GF_ADD( in02, GF_MUL( in03, 2 ) ); \
175 0 : in03 = GF_ADD( in02, in03 ); \
176 0 : in02 = temp; \
177 0 : } \
178 0 : in02 = GF_ADD( in00, in02 ); \
179 0 : in04 = GF_ADD( in00, in04 ); \
180 0 : in05 = GF_ADD( in01, in05 ); \
181 0 : in06 = GF_ADD( in02, in06 ); \
182 0 : FD_REEDSOL_GENERATE_FFT( 4, 4, in04, in05, in06, in07 ); \
183 0 : in08 = GF_ADD( in00, in08 ); \
184 0 : in09 = GF_ADD( in01, in09 ); \
185 0 : in10 = GF_ADD( in02, in10 ); \
186 0 : FD_REEDSOL_GENERATE_FFT( 8, 8, in08, in09, in10, in11, in12, in13, in14, in15 ); \
187 0 : } while( 0 )
188 :
189 : #define FD_REEDSOL_PPT_IMPL_16_4( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09 , \
190 : in10, in11, in12, in13, in14, in15) \
191 0 : do { \
192 0 : in12 = GF_ADD( in04, in12 ); \
193 0 : in13 = GF_ADD( in05, in13 ); \
194 0 : in14 = GF_ADD( in06, in14 ); \
195 0 : in15 = GF_ADD( in07, in15 ); \
196 0 : FD_REEDSOL_GENERATE_IFFT( 4, 0, in00, in01, in02, in03 ); \
197 0 : in04 = GF_ADD( in00, in04 ); \
198 0 : in05 = GF_ADD( in01, in05 ); \
199 0 : in06 = GF_ADD( in02, in06 ); \
200 0 : in07 = GF_ADD( in03, in07 ); \
201 0 : FD_REEDSOL_GENERATE_FFT( 4, 4, in04, in05, in06, in07 ); \
202 0 : in08 = GF_ADD( in00, in08 ); \
203 0 : in09 = GF_ADD( in01, in09 ); \
204 0 : in10 = GF_ADD( in02, in10 ); \
205 0 : in11 = GF_ADD( in03, in11 ); \
206 0 : FD_REEDSOL_GENERATE_FFT( 8, 8, in08, in09, in10, in11, in12, in13, in14, in15 ); \
207 0 : } while( 0 )
208 :
209 : #define FD_REEDSOL_PPT_IMPL_16_5( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09 , \
210 : in10, in11, in12, in13, in14, in15) \
211 0 : do { \
212 0 : gf_t scratch_2; \
213 0 : in13 = GF_ADD( in05, in13 ); \
214 0 : in14 = GF_ADD( in06, in14 ); \
215 0 : in15 = GF_ADD( in07, in15 ); \
216 0 : FD_REEDSOL_GENERATE_IFFT( 4, 0, in00, in01, in02, in03 ); \
217 0 : in05 = GF_ADD( in01, in05 ); \
218 0 : in06 = GF_ADD( in02, in06 ); \
219 0 : in07 = GF_ADD( in03, in07 ); \
220 0 : scratch_2 = in06; \
221 0 : { \
222 0 : gf_t temp = GF_ADD( in05, GF_MUL( in07, 6 ) ); \
223 0 : in07 = GF_ADD( in05, GF_MUL( in07, 7 ) ); \
224 0 : in05 = temp; \
225 0 : } \
226 0 : { \
227 0 : gf_t temp = GF_ADD( in04, GF_MUL( in05, 4 ) ); \
228 0 : in05 = GF_ADD( in04, in05 ); \
229 0 : in04 = temp; \
230 0 : } \
231 0 : in06 = GF_ADD( in04, in06 ); \
232 0 : { \
233 0 : gf_t temp = GF_ADD( in06, GF_MUL( in07, 6 ) ); \
234 0 : in07 = GF_ADD( in06, GF_MUL( in07, 7 ) ); \
235 0 : in06 = temp; \
236 0 : } \
237 0 : in04 = GF_ADD( GF_MUL( scratch_2, 6 ), in04 ); \
238 0 : in04 = GF_ADD( in00, in04 ); \
239 0 : in08 = GF_ADD( in00, in08 ); \
240 0 : in09 = GF_ADD( in01, in09 ); \
241 0 : in10 = GF_ADD( in02, in10 ); \
242 0 : in11 = GF_ADD( in03, in11 ); \
243 0 : in12 = GF_ADD( in04, in12 ); \
244 0 : FD_REEDSOL_GENERATE_FFT( 8, 8, in08, in09, in10, in11, in12, in13, in14, in15 ); \
245 0 : } while( 0 )
246 :
247 : #define FD_REEDSOL_PPT_IMPL_16_6( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09 , \
248 : in10, in11, in12, in13, in14, in15) \
249 0 : do { \
250 0 : gf_t scratch_2, scratch_3; \
251 0 : in14 = GF_ADD( in06, in14 ); \
252 0 : in15 = GF_ADD( in07, in15 ); \
253 0 : FD_REEDSOL_GENERATE_IFFT( 4, 0, in00, in01, in02, in03 ); \
254 0 : in06 = GF_ADD( in02, in06 ); \
255 0 : in07 = GF_ADD( in03, in07 ); \
256 0 : scratch_2 = in06; \
257 0 : scratch_3 = in07; \
258 0 : { \
259 0 : gf_t temp = GF_ADD( GF_MUL( in04, 5 ), GF_MUL( in05, 4 ) ); \
260 0 : in05 = GF_ADD( in04, in05 ); \
261 0 : in04 = temp; \
262 0 : } \
263 0 : in06 = GF_ADD( in04, in06 ); \
264 0 : in07 = GF_ADD( in05, in07 ); \
265 0 : { \
266 0 : gf_t temp = GF_ADD( in06, GF_MUL( in07, 6 ) ); \
267 0 : in07 = GF_ADD( in06, GF_MUL( in07, 7 ) ); \
268 0 : in06 = temp; \
269 0 : } \
270 0 : in04 = GF_ADD( GF_MUL( scratch_2, 6 ), in04 ); \
271 0 : in05 = GF_ADD( GF_MUL( scratch_3, 6 ), in05 ); \
272 0 : in04 = GF_ADD( in00, in04 ); \
273 0 : in05 = GF_ADD( in01, in05 ); \
274 0 : in08 = GF_ADD( in00, in08 ); \
275 0 : in09 = GF_ADD( in01, in09 ); \
276 0 : in10 = GF_ADD( in02, in10 ); \
277 0 : in11 = GF_ADD( in03, in11 ); \
278 0 : in12 = GF_ADD( in04, in12 ); \
279 0 : in13 = GF_ADD( in05, in13 ); \
280 0 : FD_REEDSOL_GENERATE_FFT( 8, 8, in08, in09, in10, in11, in12, in13, in14, in15 ); \
281 0 : } while( 0 )
282 :
283 : #define FD_REEDSOL_PPT_IMPL_16_7( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09 , \
284 : in10, in11, in12, in13, in14, in15) \
285 0 : do { \
286 0 : gf_t scratch_3; \
287 0 : in15 = GF_ADD( in07, in15 ); \
288 0 : FD_REEDSOL_GENERATE_IFFT( 4, 0, in00, in01, in02, in03 ); \
289 0 : in07 = GF_ADD( in03, in07 ); \
290 0 : scratch_3 = in07; \
291 0 : { \
292 0 : gf_t temp = GF_ADD( GF_MUL( in04, 5 ), GF_MUL( in05, 4 ) ); \
293 0 : in05 = GF_ADD( in04, in05 ); \
294 0 : in04 = temp; \
295 0 : } \
296 0 : in07 = GF_ADD( in05, in07 ); \
297 0 : { \
298 0 : gf_t temp = GF_ADD( in06, GF_MUL( in07, 6 ) ); \
299 0 : in07 = GF_ADD( in06, in07 ); \
300 0 : in06 = temp; \
301 0 : } \
302 0 : { \
303 0 : gf_t temp = GF_ADD( GF_MUL( in04, 7 ), GF_MUL( in06, 6 ) ); \
304 0 : in06 = GF_ADD( in04, in06 ); \
305 0 : in04 = temp; \
306 0 : } \
307 0 : in05 = GF_ADD( GF_MUL( scratch_3, 6 ), in05 ); \
308 0 : in04 = GF_ADD( in00, in04 ); \
309 0 : in05 = GF_ADD( in01, in05 ); \
310 0 : in06 = GF_ADD( in02, in06 ); \
311 0 : in08 = GF_ADD( in00, in08 ); \
312 0 : in09 = GF_ADD( in01, in09 ); \
313 0 : in10 = GF_ADD( in02, in10 ); \
314 0 : in11 = GF_ADD( in03, in11 ); \
315 0 : in12 = GF_ADD( in04, in12 ); \
316 0 : in13 = GF_ADD( in05, in13 ); \
317 0 : in14 = GF_ADD( in06, in14 ); \
318 0 : FD_REEDSOL_GENERATE_FFT( 8, 8, in08, in09, in10, in11, in12, in13, in14, in15 ); \
319 0 : } while( 0 )
320 :
321 : #define FD_REEDSOL_PPT_IMPL_16_8( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09 , \
322 : in10, in11, in12, in13, in14, in15) \
323 0 : do { \
324 0 : FD_REEDSOL_GENERATE_IFFT( 8, 0, in00, in01, in02, in03, in04, in05, in06, in07 ); \
325 0 : in08 = GF_ADD( in00, in08 ); \
326 0 : in09 = GF_ADD( in01, in09 ); \
327 0 : in10 = GF_ADD( in02, in10 ); \
328 0 : in11 = GF_ADD( in03, in11 ); \
329 0 : in12 = GF_ADD( in04, in12 ); \
330 0 : in13 = GF_ADD( in05, in13 ); \
331 0 : in14 = GF_ADD( in06, in14 ); \
332 0 : in15 = GF_ADD( in07, in15 ); \
333 0 : FD_REEDSOL_GENERATE_FFT( 8, 8, in08, in09, in10, in11, in12, in13, in14, in15 ); \
334 0 : } while( 0 )
335 :
336 : #define FD_REEDSOL_PPT_IMPL_16_9( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09 , \
337 : in10, in11, in12, in13, in14, in15) \
338 0 : do { \
339 0 : gf_t scratch_2, scratch_4; \
340 0 : FD_REEDSOL_GENERATE_IFFT( 8, 0, in00, in01, in02, in03, in04, in05, in06, in07 ); \
341 0 : in09 = GF_ADD( in01, in09 ); \
342 0 : in10 = GF_ADD( in02, in10 ); \
343 0 : in11 = GF_ADD( in03, in11 ); \
344 0 : in12 = GF_ADD( in04, in12 ); \
345 0 : in13 = GF_ADD( in05, in13 ); \
346 0 : in14 = GF_ADD( in06, in14 ); \
347 0 : in15 = GF_ADD( in07, in15 ); \
348 0 : scratch_4 = in12; \
349 0 : { \
350 0 : gf_t temp = GF_ADD( in09, GF_MUL( in13, 22 ) ); \
351 0 : in13 = GF_ADD( in09, GF_MUL( in13, 23 ) ); \
352 0 : in09 = temp; \
353 0 : } \
354 0 : { \
355 0 : gf_t temp = GF_ADD( in10, GF_MUL( in14, 22 ) ); \
356 0 : in14 = GF_ADD( in10, GF_MUL( in14, 23 ) ); \
357 0 : in10 = temp; \
358 0 : } \
359 0 : { \
360 0 : gf_t temp = GF_ADD( in11, GF_MUL( in15, 22 ) ); \
361 0 : in15 = GF_ADD( in11, GF_MUL( in15, 23 ) ); \
362 0 : in11 = temp; \
363 0 : } \
364 0 : scratch_2 = in10; \
365 0 : { \
366 0 : gf_t temp = GF_ADD( in09, GF_MUL( in11, 28 ) ); \
367 0 : in11 = GF_ADD( in09, GF_MUL( in11, 29 ) ); \
368 0 : in09 = temp; \
369 0 : } \
370 0 : { \
371 0 : gf_t temp = GF_ADD( in08, GF_MUL( in09, 8 ) ); \
372 0 : in09 = GF_ADD( in08, in09 ); \
373 0 : in08 = temp; \
374 0 : } \
375 0 : in10 = GF_ADD( in08, in10 ); \
376 0 : { \
377 0 : gf_t temp = GF_ADD( in10, GF_MUL( in11, 10 ) ); \
378 0 : in11 = GF_ADD( in10, GF_MUL( in11, 11 ) ); \
379 0 : in10 = temp; \
380 0 : } \
381 0 : in08 = GF_ADD( GF_MUL( scratch_2, 28 ), in08 ); \
382 0 : in12 = GF_ADD( in08, in12 ); \
383 0 : FD_REEDSOL_GENERATE_FFT( 4, 12, in12, in13, in14, in15 ); \
384 0 : in08 = GF_ADD( GF_MUL( scratch_4, 22 ), in08 ); \
385 0 : in08 = GF_ADD( in00, in08 ); \
386 0 : } while( 0 )
387 :
388 : #define FD_REEDSOL_PPT_IMPL_16_10( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09 , \
389 : in10, in11, in12, in13, in14, in15) \
390 0 : do { \
391 0 : gf_t scratch_2, scratch_3, scratch_4, scratch_5; \
392 0 : FD_REEDSOL_GENERATE_IFFT( 8, 0, in00, in01, in02, in03, in04, in05, in06, in07 ); \
393 0 : in10 = GF_ADD( in02, in10 ); \
394 0 : in11 = GF_ADD( in03, in11 ); \
395 0 : in12 = GF_ADD( in04, in12 ); \
396 0 : in13 = GF_ADD( in05, in13 ); \
397 0 : in14 = GF_ADD( in06, in14 ); \
398 0 : in15 = GF_ADD( in07, in15 ); \
399 0 : scratch_4 = in12; \
400 0 : scratch_5 = in13; \
401 0 : { \
402 0 : gf_t temp = GF_ADD( in10, GF_MUL( in14, 22 ) ); \
403 0 : in14 = GF_ADD( in10, GF_MUL( in14, 23 ) ); \
404 0 : in10 = temp; \
405 0 : } \
406 0 : { \
407 0 : gf_t temp = GF_ADD( in11, GF_MUL( in15, 22 ) ); \
408 0 : in15 = GF_ADD( in11, GF_MUL( in15, 23 ) ); \
409 0 : in11 = temp; \
410 0 : } \
411 0 : scratch_2 = in10; \
412 0 : scratch_3 = in11; \
413 0 : { \
414 0 : gf_t temp = GF_ADD( GF_MUL( in08, 9 ), GF_MUL( in09, 8 ) ); \
415 0 : in09 = GF_ADD( in08, in09 ); \
416 0 : in08 = temp; \
417 0 : } \
418 0 : in10 = GF_ADD( in08, in10 ); \
419 0 : in11 = GF_ADD( in09, in11 ); \
420 0 : { \
421 0 : gf_t temp = GF_ADD( in10, GF_MUL( in11, 10 ) ); \
422 0 : in11 = GF_ADD( in10, GF_MUL( in11, 11 ) ); \
423 0 : in10 = temp; \
424 0 : } \
425 0 : in08 = GF_ADD( GF_MUL( scratch_2, 28 ), in08 ); \
426 0 : in09 = GF_ADD( GF_MUL( scratch_3, 28 ), in09 ); \
427 0 : in12 = GF_ADD( in08, in12 ); \
428 0 : in13 = GF_ADD( in09, in13 ); \
429 0 : FD_REEDSOL_GENERATE_FFT( 4, 12, in12, in13, in14, in15 ); \
430 0 : in08 = GF_ADD( GF_MUL( scratch_4, 22 ), in08 ); \
431 0 : in09 = GF_ADD( GF_MUL( scratch_5, 22 ), in09 ); \
432 0 : in08 = GF_ADD( in00, in08 ); \
433 0 : in09 = GF_ADD( in01, in09 ); \
434 0 : } while( 0 )
435 :
436 : #define FD_REEDSOL_PPT_IMPL_16_11( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09 , \
437 : in10, in11, in12, in13, in14, in15) \
438 0 : do { \
439 0 : gf_t scratch_3, scratch_4, scratch_5, scratch_6; \
440 0 : FD_REEDSOL_GENERATE_IFFT( 8, 0, in00, in01, in02, in03, in04, in05, in06, in07 ); \
441 0 : in11 = GF_ADD( in03, in11 ); \
442 0 : in12 = GF_ADD( in04, in12 ); \
443 0 : in13 = GF_ADD( in05, in13 ); \
444 0 : in14 = GF_ADD( in06, in14 ); \
445 0 : in15 = GF_ADD( in07, in15 ); \
446 0 : scratch_4 = in12; \
447 0 : scratch_5 = in13; \
448 0 : scratch_6 = in14; \
449 0 : { \
450 0 : gf_t temp = GF_ADD( in11, GF_MUL( in15, 22 ) ); \
451 0 : in15 = GF_ADD( in11, GF_MUL( in15, 23 ) ); \
452 0 : in11 = temp; \
453 0 : } \
454 0 : scratch_3 = in11; \
455 0 : { \
456 0 : gf_t temp = GF_ADD( GF_MUL( in08, 9 ), GF_MUL( in09, 8 ) ); \
457 0 : in09 = GF_ADD( in08, in09 ); \
458 0 : in08 = temp; \
459 0 : } \
460 0 : in11 = GF_ADD( in09, in11 ); \
461 0 : { \
462 0 : gf_t temp = GF_ADD( in10, GF_MUL( in11, 10 ) ); \
463 0 : in11 = GF_ADD( in10, in11 ); \
464 0 : in10 = temp; \
465 0 : } \
466 0 : { \
467 0 : gf_t temp = GF_ADD( GF_MUL( in08, 29 ), GF_MUL( in10, 28 ) ); \
468 0 : in10 = GF_ADD( in08, in10 ); \
469 0 : in08 = temp; \
470 0 : } \
471 0 : in09 = GF_ADD( GF_MUL( scratch_3, 28 ), in09 ); \
472 0 : in12 = GF_ADD( in08, in12 ); \
473 0 : in13 = GF_ADD( in09, in13 ); \
474 0 : in14 = GF_ADD( in10, in14 ); \
475 0 : FD_REEDSOL_GENERATE_FFT( 4, 12, in12, in13, in14, in15 ); \
476 0 : in08 = GF_ADD( GF_MUL( scratch_4, 22 ), in08 ); \
477 0 : in09 = GF_ADD( GF_MUL( scratch_5, 22 ), in09 ); \
478 0 : in10 = GF_ADD( GF_MUL( scratch_6, 22 ), in10 ); \
479 0 : in08 = GF_ADD( in00, in08 ); \
480 0 : in09 = GF_ADD( in01, in09 ); \
481 0 : in10 = GF_ADD( in02, in10 ); \
482 0 : } while( 0 )
483 :
484 : #define FD_REEDSOL_PPT_IMPL_16_12( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09 , \
485 : in10, in11, in12, in13, in14, in15) \
486 0 : do { \
487 0 : gf_t scratch_4, scratch_5, scratch_6, scratch_7; \
488 0 : FD_REEDSOL_GENERATE_IFFT( 8, 0, in00, in01, in02, in03, in04, in05, in06, in07 ); \
489 0 : in12 = GF_ADD( in04, in12 ); \
490 0 : in13 = GF_ADD( in05, in13 ); \
491 0 : in14 = GF_ADD( in06, in14 ); \
492 0 : in15 = GF_ADD( in07, in15 ); \
493 0 : scratch_4 = in12; \
494 0 : scratch_5 = in13; \
495 0 : scratch_6 = in14; \
496 0 : scratch_7 = in15; \
497 0 : FD_REEDSOL_GENERATE_IFFT( 4, 8, in08, in09, in10, in11 ); \
498 0 : in12 = GF_ADD( in08, in12 ); \
499 0 : in13 = GF_ADD( in09, in13 ); \
500 0 : in14 = GF_ADD( in10, in14 ); \
501 0 : in15 = GF_ADD( in11, in15 ); \
502 0 : FD_REEDSOL_GENERATE_FFT( 4, 12, in12, in13, in14, in15 ); \
503 0 : in08 = GF_ADD( GF_MUL( scratch_4, 22 ), in08 ); \
504 0 : in09 = GF_ADD( GF_MUL( scratch_5, 22 ), in09 ); \
505 0 : in10 = GF_ADD( GF_MUL( scratch_6, 22 ), in10 ); \
506 0 : in11 = GF_ADD( GF_MUL( scratch_7, 22 ), in11 ); \
507 0 : in08 = GF_ADD( in00, in08 ); \
508 0 : in09 = GF_ADD( in01, in09 ); \
509 0 : in10 = GF_ADD( in02, in10 ); \
510 0 : in11 = GF_ADD( in03, in11 ); \
511 0 : } while( 0 )
512 :
513 : #define FD_REEDSOL_PPT_IMPL_16_13( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09 , \
514 : in10, in11, in12, in13, in14, in15) \
515 0 : do { \
516 0 : gf_t scratch_2, scratch_5, scratch_6, scratch_7; \
517 0 : FD_REEDSOL_GENERATE_IFFT( 8, 0, in00, in01, in02, in03, in04, in05, in06, in07 ); \
518 0 : in13 = GF_ADD( in05, in13 ); \
519 0 : in14 = GF_ADD( in06, in14 ); \
520 0 : in15 = GF_ADD( in07, in15 ); \
521 0 : scratch_5 = in13; \
522 0 : scratch_6 = in14; \
523 0 : scratch_7 = in15; \
524 0 : FD_REEDSOL_GENERATE_IFFT( 4, 8, in08, in09, in10, in11 ); \
525 0 : in13 = GF_ADD( in09, in13 ); \
526 0 : in14 = GF_ADD( in10, in14 ); \
527 0 : in15 = GF_ADD( in11, in15 ); \
528 0 : scratch_2 = in14; \
529 0 : { \
530 0 : gf_t temp = GF_ADD( in13, GF_MUL( in15, 26 ) ); \
531 0 : in15 = GF_ADD( in13, GF_MUL( in15, 27 ) ); \
532 0 : in13 = temp; \
533 0 : } \
534 0 : { \
535 0 : gf_t temp = GF_ADD( in12, GF_MUL( in13, 12 ) ); \
536 0 : in13 = GF_ADD( in12, in13 ); \
537 0 : in12 = temp; \
538 0 : } \
539 0 : in14 = GF_ADD( in12, in14 ); \
540 0 : { \
541 0 : gf_t temp = GF_ADD( in14, GF_MUL( in15, 14 ) ); \
542 0 : in15 = GF_ADD( in14, GF_MUL( in15, 15 ) ); \
543 0 : in14 = temp; \
544 0 : } \
545 0 : in12 = GF_ADD( GF_MUL( scratch_2, 26 ), in12 ); \
546 0 : { \
547 0 : gf_t temp = GF_ADD( GF_MUL( in08, 23 ), GF_MUL( in12, 22 ) ); \
548 0 : in12 = GF_ADD( in08, in12 ); \
549 0 : in08 = temp; \
550 0 : } \
551 0 : in09 = GF_ADD( GF_MUL( scratch_5, 22 ), in09 ); \
552 0 : in10 = GF_ADD( GF_MUL( scratch_6, 22 ), in10 ); \
553 0 : in11 = GF_ADD( GF_MUL( scratch_7, 22 ), in11 ); \
554 0 : in08 = GF_ADD( in00, in08 ); \
555 0 : in09 = GF_ADD( in01, in09 ); \
556 0 : in10 = GF_ADD( in02, in10 ); \
557 0 : in11 = GF_ADD( in03, in11 ); \
558 0 : in12 = GF_ADD( in04, in12 ); \
559 0 : } while( 0 )
560 :
561 : #define FD_REEDSOL_PPT_IMPL_16_14( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09 , \
562 : in10, in11, in12, in13, in14, in15) \
563 0 : do { \
564 0 : gf_t scratch_2, scratch_3, scratch_6, scratch_7; \
565 0 : FD_REEDSOL_GENERATE_IFFT( 8, 0, in00, in01, in02, in03, in04, in05, in06, in07 ); \
566 0 : in14 = GF_ADD( in06, in14 ); \
567 0 : in15 = GF_ADD( in07, in15 ); \
568 0 : scratch_6 = in14; \
569 0 : scratch_7 = in15; \
570 0 : FD_REEDSOL_GENERATE_IFFT( 4, 8, in08, in09, in10, in11 ); \
571 0 : in14 = GF_ADD( in10, in14 ); \
572 0 : in15 = GF_ADD( in11, in15 ); \
573 0 : scratch_2 = in14; \
574 0 : scratch_3 = in15; \
575 0 : { \
576 0 : gf_t temp = GF_ADD( GF_MUL( in12, 13 ), GF_MUL( in13, 12 ) ); \
577 0 : in13 = GF_ADD( in12, in13 ); \
578 0 : in12 = temp; \
579 0 : } \
580 0 : in14 = GF_ADD( in12, in14 ); \
581 0 : in15 = GF_ADD( in13, in15 ); \
582 0 : { \
583 0 : gf_t temp = GF_ADD( in14, GF_MUL( in15, 14 ) ); \
584 0 : in15 = GF_ADD( in14, GF_MUL( in15, 15 ) ); \
585 0 : in14 = temp; \
586 0 : } \
587 0 : in12 = GF_ADD( GF_MUL( scratch_2, 26 ), in12 ); \
588 0 : in13 = GF_ADD( GF_MUL( scratch_3, 26 ), in13 ); \
589 0 : { \
590 0 : gf_t temp = GF_ADD( GF_MUL( in08, 23 ), GF_MUL( in12, 22 ) ); \
591 0 : in12 = GF_ADD( in08, in12 ); \
592 0 : in08 = temp; \
593 0 : } \
594 0 : { \
595 0 : gf_t temp = GF_ADD( GF_MUL( in09, 23 ), GF_MUL( in13, 22 ) ); \
596 0 : in13 = GF_ADD( in09, in13 ); \
597 0 : in09 = temp; \
598 0 : } \
599 0 : in10 = GF_ADD( GF_MUL( scratch_6, 22 ), in10 ); \
600 0 : in11 = GF_ADD( GF_MUL( scratch_7, 22 ), in11 ); \
601 0 : in08 = GF_ADD( in00, in08 ); \
602 0 : in09 = GF_ADD( in01, in09 ); \
603 0 : in10 = GF_ADD( in02, in10 ); \
604 0 : in11 = GF_ADD( in03, in11 ); \
605 0 : in12 = GF_ADD( in04, in12 ); \
606 0 : in13 = GF_ADD( in05, in13 ); \
607 0 : } while( 0 )
608 :
609 : #define FD_REEDSOL_PPT_IMPL_16_15( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09 , \
610 : in10, in11, in12, in13, in14, in15) \
611 0 : do { \
612 0 : gf_t scratch_3, scratch_7; \
613 0 : FD_REEDSOL_GENERATE_IFFT( 8, 0, in00, in01, in02, in03, in04, in05, in06, in07 ); \
614 0 : in15 = GF_ADD( in07, in15 ); \
615 0 : scratch_7 = in15; \
616 0 : FD_REEDSOL_GENERATE_IFFT( 4, 8, in08, in09, in10, in11 ); \
617 0 : in15 = GF_ADD( in11, in15 ); \
618 0 : scratch_3 = in15; \
619 0 : { \
620 0 : gf_t temp = GF_ADD( GF_MUL( in12, 13 ), GF_MUL( in13, 12 ) ); \
621 0 : in13 = GF_ADD( in12, in13 ); \
622 0 : in12 = temp; \
623 0 : } \
624 0 : in15 = GF_ADD( in13, in15 ); \
625 0 : { \
626 0 : gf_t temp = GF_ADD( in14, GF_MUL( in15, 14 ) ); \
627 0 : in15 = GF_ADD( in14, in15 ); \
628 0 : in14 = temp; \
629 0 : } \
630 0 : { \
631 0 : gf_t temp = GF_ADD( GF_MUL( in12, 27 ), GF_MUL( in14, 26 ) ); \
632 0 : in14 = GF_ADD( in12, in14 ); \
633 0 : in12 = temp; \
634 0 : } \
635 0 : in13 = GF_ADD( GF_MUL( scratch_3, 26 ), in13 ); \
636 0 : { \
637 0 : gf_t temp = GF_ADD( GF_MUL( in08, 23 ), GF_MUL( in12, 22 ) ); \
638 0 : in12 = GF_ADD( in08, in12 ); \
639 0 : in08 = temp; \
640 0 : } \
641 0 : { \
642 0 : gf_t temp = GF_ADD( GF_MUL( in09, 23 ), GF_MUL( in13, 22 ) ); \
643 0 : in13 = GF_ADD( in09, in13 ); \
644 0 : in09 = temp; \
645 0 : } \
646 0 : { \
647 0 : gf_t temp = GF_ADD( GF_MUL( in10, 23 ), GF_MUL( in14, 22 ) ); \
648 0 : in14 = GF_ADD( in10, in14 ); \
649 0 : in10 = temp; \
650 0 : } \
651 0 : in11 = GF_ADD( GF_MUL( scratch_7, 22 ), in11 ); \
652 0 : in08 = GF_ADD( in00, in08 ); \
653 0 : in09 = GF_ADD( in01, in09 ); \
654 0 : in10 = GF_ADD( in02, in10 ); \
655 0 : in11 = GF_ADD( in03, in11 ); \
656 0 : in12 = GF_ADD( in04, in12 ); \
657 0 : in13 = GF_ADD( in05, in13 ); \
658 0 : in14 = GF_ADD( in06, in14 ); \
659 0 : } while( 0 )
660 :
661 : void fd_reedsol_ppt_32_17( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
662 : #define FD_REEDSOL_PPT_IMPL_32_17( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17 , \
663 : in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31) \
664 0 : do { \
665 0 : gf_t scratch_2, scratch_4, scratch_8; \
666 0 : FD_REEDSOL_GENERATE_IFFT( 16, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15 ); \
667 0 : in17 = GF_ADD( in01, in17 ); \
668 0 : in18 = GF_ADD( in02, in18 ); \
669 0 : in19 = GF_ADD( in03, in19 ); \
670 0 : in20 = GF_ADD( in04, in20 ); \
671 0 : in21 = GF_ADD( in05, in21 ); \
672 0 : in22 = GF_ADD( in06, in22 ); \
673 0 : in23 = GF_ADD( in07, in23 ); \
674 0 : in24 = GF_ADD( in08, in24 ); \
675 0 : in25 = GF_ADD( in09, in25 ); \
676 0 : in26 = GF_ADD( in10, in26 ); \
677 0 : in27 = GF_ADD( in11, in27 ); \
678 0 : in28 = GF_ADD( in12, in28 ); \
679 0 : in29 = GF_ADD( in13, in29 ); \
680 0 : in30 = GF_ADD( in14, in30 ); \
681 0 : in31 = GF_ADD( in15, in31 ); \
682 0 : scratch_8 = in24; \
683 0 : { \
684 0 : gf_t temp = GF_ADD( in17, GF_MUL( in25, 11 ) ); \
685 0 : in25 = GF_ADD( in17, GF_MUL( in25, 10 ) ); \
686 0 : in17 = temp; \
687 0 : } \
688 0 : { \
689 0 : gf_t temp = GF_ADD( in18, GF_MUL( in26, 11 ) ); \
690 0 : in26 = GF_ADD( in18, GF_MUL( in26, 10 ) ); \
691 0 : in18 = temp; \
692 0 : } \
693 0 : { \
694 0 : gf_t temp = GF_ADD( in19, GF_MUL( in27, 11 ) ); \
695 0 : in27 = GF_ADD( in19, GF_MUL( in27, 10 ) ); \
696 0 : in19 = temp; \
697 0 : } \
698 0 : { \
699 0 : gf_t temp = GF_ADD( in20, GF_MUL( in28, 11 ) ); \
700 0 : in28 = GF_ADD( in20, GF_MUL( in28, 10 ) ); \
701 0 : in20 = temp; \
702 0 : } \
703 0 : { \
704 0 : gf_t temp = GF_ADD( in21, GF_MUL( in29, 11 ) ); \
705 0 : in29 = GF_ADD( in21, GF_MUL( in29, 10 ) ); \
706 0 : in21 = temp; \
707 0 : } \
708 0 : { \
709 0 : gf_t temp = GF_ADD( in22, GF_MUL( in30, 11 ) ); \
710 0 : in30 = GF_ADD( in22, GF_MUL( in30, 10 ) ); \
711 0 : in22 = temp; \
712 0 : } \
713 0 : { \
714 0 : gf_t temp = GF_ADD( in23, GF_MUL( in31, 11 ) ); \
715 0 : in31 = GF_ADD( in23, GF_MUL( in31, 10 ) ); \
716 0 : in23 = temp; \
717 0 : } \
718 0 : scratch_4 = in20; \
719 0 : { \
720 0 : gf_t temp = GF_ADD( in17, GF_MUL( in21, 97 ) ); \
721 0 : in21 = GF_ADD( in17, GF_MUL( in21, 96 ) ); \
722 0 : in17 = temp; \
723 0 : } \
724 0 : { \
725 0 : gf_t temp = GF_ADD( in18, GF_MUL( in22, 97 ) ); \
726 0 : in22 = GF_ADD( in18, GF_MUL( in22, 96 ) ); \
727 0 : in18 = temp; \
728 0 : } \
729 0 : { \
730 0 : gf_t temp = GF_ADD( in19, GF_MUL( in23, 97 ) ); \
731 0 : in23 = GF_ADD( in19, GF_MUL( in23, 96 ) ); \
732 0 : in19 = temp; \
733 0 : } \
734 0 : scratch_2 = in18; \
735 0 : { \
736 0 : gf_t temp = GF_ADD( in17, GF_MUL( in19, 120 ) ); \
737 0 : in19 = GF_ADD( in17, GF_MUL( in19, 121 ) ); \
738 0 : in17 = temp; \
739 0 : } \
740 0 : { \
741 0 : gf_t temp = GF_ADD( in16, GF_MUL( in17, 16 ) ); \
742 0 : in17 = GF_ADD( in16, in17 ); \
743 0 : in16 = temp; \
744 0 : } \
745 0 : in18 = GF_ADD( in16, in18 ); \
746 0 : { \
747 0 : gf_t temp = GF_ADD( in18, GF_MUL( in19, 18 ) ); \
748 0 : in19 = GF_ADD( in18, GF_MUL( in19, 19 ) ); \
749 0 : in18 = temp; \
750 0 : } \
751 0 : in16 = GF_ADD( GF_MUL( scratch_2, 120 ), in16 ); \
752 0 : in20 = GF_ADD( in16, in20 ); \
753 0 : FD_REEDSOL_GENERATE_FFT( 4, 20, in20, in21, in22, in23 ); \
754 0 : in16 = GF_ADD( GF_MUL( scratch_4, 97 ), in16 ); \
755 0 : in24 = GF_ADD( in16, in24 ); \
756 0 : FD_REEDSOL_GENERATE_FFT( 8, 24, in24, in25, in26, in27, in28, in29, in30, in31 ); \
757 0 : in16 = GF_ADD( GF_MUL( scratch_8, 11 ), in16 ); \
758 0 : in16 = GF_ADD( in00, in16 ); \
759 0 : } while( 0 )
760 :
761 : void fd_reedsol_ppt_32_18( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
762 : #define FD_REEDSOL_PPT_IMPL_32_18( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17 , \
763 : in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31) \
764 0 : do { \
765 0 : gf_t scratch_2, scratch_3, scratch_4, scratch_5, scratch_8, scratch_9; \
766 0 : FD_REEDSOL_GENERATE_IFFT( 16, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15 ); \
767 0 : in18 = GF_ADD( in02, in18 ); \
768 0 : in19 = GF_ADD( in03, in19 ); \
769 0 : in20 = GF_ADD( in04, in20 ); \
770 0 : in21 = GF_ADD( in05, in21 ); \
771 0 : in22 = GF_ADD( in06, in22 ); \
772 0 : in23 = GF_ADD( in07, in23 ); \
773 0 : in24 = GF_ADD( in08, in24 ); \
774 0 : in25 = GF_ADD( in09, in25 ); \
775 0 : in26 = GF_ADD( in10, in26 ); \
776 0 : in27 = GF_ADD( in11, in27 ); \
777 0 : in28 = GF_ADD( in12, in28 ); \
778 0 : in29 = GF_ADD( in13, in29 ); \
779 0 : in30 = GF_ADD( in14, in30 ); \
780 0 : in31 = GF_ADD( in15, in31 ); \
781 0 : scratch_8 = in24; \
782 0 : scratch_9 = in25; \
783 0 : { \
784 0 : gf_t temp = GF_ADD( in18, GF_MUL( in26, 11 ) ); \
785 0 : in26 = GF_ADD( in18, GF_MUL( in26, 10 ) ); \
786 0 : in18 = temp; \
787 0 : } \
788 0 : { \
789 0 : gf_t temp = GF_ADD( in19, GF_MUL( in27, 11 ) ); \
790 0 : in27 = GF_ADD( in19, GF_MUL( in27, 10 ) ); \
791 0 : in19 = temp; \
792 0 : } \
793 0 : { \
794 0 : gf_t temp = GF_ADD( in20, GF_MUL( in28, 11 ) ); \
795 0 : in28 = GF_ADD( in20, GF_MUL( in28, 10 ) ); \
796 0 : in20 = temp; \
797 0 : } \
798 0 : { \
799 0 : gf_t temp = GF_ADD( in21, GF_MUL( in29, 11 ) ); \
800 0 : in29 = GF_ADD( in21, GF_MUL( in29, 10 ) ); \
801 0 : in21 = temp; \
802 0 : } \
803 0 : { \
804 0 : gf_t temp = GF_ADD( in22, GF_MUL( in30, 11 ) ); \
805 0 : in30 = GF_ADD( in22, GF_MUL( in30, 10 ) ); \
806 0 : in22 = temp; \
807 0 : } \
808 0 : { \
809 0 : gf_t temp = GF_ADD( in23, GF_MUL( in31, 11 ) ); \
810 0 : in31 = GF_ADD( in23, GF_MUL( in31, 10 ) ); \
811 0 : in23 = temp; \
812 0 : } \
813 0 : scratch_4 = in20; \
814 0 : scratch_5 = in21; \
815 0 : { \
816 0 : gf_t temp = GF_ADD( in18, GF_MUL( in22, 97 ) ); \
817 0 : in22 = GF_ADD( in18, GF_MUL( in22, 96 ) ); \
818 0 : in18 = temp; \
819 0 : } \
820 0 : { \
821 0 : gf_t temp = GF_ADD( in19, GF_MUL( in23, 97 ) ); \
822 0 : in23 = GF_ADD( in19, GF_MUL( in23, 96 ) ); \
823 0 : in19 = temp; \
824 0 : } \
825 0 : scratch_2 = in18; \
826 0 : scratch_3 = in19; \
827 0 : { \
828 0 : gf_t temp = GF_ADD( GF_MUL( in16, 17 ), GF_MUL( in17, 16 ) ); \
829 0 : in17 = GF_ADD( in16, in17 ); \
830 0 : in16 = temp; \
831 0 : } \
832 0 : in18 = GF_ADD( in16, in18 ); \
833 0 : in19 = GF_ADD( in17, in19 ); \
834 0 : { \
835 0 : gf_t temp = GF_ADD( in18, GF_MUL( in19, 18 ) ); \
836 0 : in19 = GF_ADD( in18, GF_MUL( in19, 19 ) ); \
837 0 : in18 = temp; \
838 0 : } \
839 0 : in16 = GF_ADD( GF_MUL( scratch_2, 120 ), in16 ); \
840 0 : in17 = GF_ADD( GF_MUL( scratch_3, 120 ), in17 ); \
841 0 : in20 = GF_ADD( in16, in20 ); \
842 0 : in21 = GF_ADD( in17, in21 ); \
843 0 : FD_REEDSOL_GENERATE_FFT( 4, 20, in20, in21, in22, in23 ); \
844 0 : in16 = GF_ADD( GF_MUL( scratch_4, 97 ), in16 ); \
845 0 : in17 = GF_ADD( GF_MUL( scratch_5, 97 ), in17 ); \
846 0 : in24 = GF_ADD( in16, in24 ); \
847 0 : in25 = GF_ADD( in17, in25 ); \
848 0 : FD_REEDSOL_GENERATE_FFT( 8, 24, in24, in25, in26, in27, in28, in29, in30, in31 ); \
849 0 : in16 = GF_ADD( GF_MUL( scratch_8, 11 ), in16 ); \
850 0 : in17 = GF_ADD( GF_MUL( scratch_9, 11 ), in17 ); \
851 0 : in16 = GF_ADD( in00, in16 ); \
852 0 : in17 = GF_ADD( in01, in17 ); \
853 0 : } while( 0 )
854 :
855 : void fd_reedsol_ppt_32_19( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
856 : #define FD_REEDSOL_PPT_IMPL_32_19( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17 , \
857 : in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31) \
858 0 : do { \
859 0 : gf_t scratch_10, scratch_3, scratch_4, scratch_5, scratch_6, scratch_8, scratch_9; \
860 0 : FD_REEDSOL_GENERATE_IFFT( 16, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15 ); \
861 0 : in19 = GF_ADD( in03, in19 ); \
862 0 : in20 = GF_ADD( in04, in20 ); \
863 0 : in21 = GF_ADD( in05, in21 ); \
864 0 : in22 = GF_ADD( in06, in22 ); \
865 0 : in23 = GF_ADD( in07, in23 ); \
866 0 : in24 = GF_ADD( in08, in24 ); \
867 0 : in25 = GF_ADD( in09, in25 ); \
868 0 : in26 = GF_ADD( in10, in26 ); \
869 0 : in27 = GF_ADD( in11, in27 ); \
870 0 : in28 = GF_ADD( in12, in28 ); \
871 0 : in29 = GF_ADD( in13, in29 ); \
872 0 : in30 = GF_ADD( in14, in30 ); \
873 0 : in31 = GF_ADD( in15, in31 ); \
874 0 : scratch_8 = in24; \
875 0 : scratch_9 = in25; \
876 0 : scratch_10 = in26; \
877 0 : { \
878 0 : gf_t temp = GF_ADD( in19, GF_MUL( in27, 11 ) ); \
879 0 : in27 = GF_ADD( in19, GF_MUL( in27, 10 ) ); \
880 0 : in19 = temp; \
881 0 : } \
882 0 : { \
883 0 : gf_t temp = GF_ADD( in20, GF_MUL( in28, 11 ) ); \
884 0 : in28 = GF_ADD( in20, GF_MUL( in28, 10 ) ); \
885 0 : in20 = temp; \
886 0 : } \
887 0 : { \
888 0 : gf_t temp = GF_ADD( in21, GF_MUL( in29, 11 ) ); \
889 0 : in29 = GF_ADD( in21, GF_MUL( in29, 10 ) ); \
890 0 : in21 = temp; \
891 0 : } \
892 0 : { \
893 0 : gf_t temp = GF_ADD( in22, GF_MUL( in30, 11 ) ); \
894 0 : in30 = GF_ADD( in22, GF_MUL( in30, 10 ) ); \
895 0 : in22 = temp; \
896 0 : } \
897 0 : { \
898 0 : gf_t temp = GF_ADD( in23, GF_MUL( in31, 11 ) ); \
899 0 : in31 = GF_ADD( in23, GF_MUL( in31, 10 ) ); \
900 0 : in23 = temp; \
901 0 : } \
902 0 : scratch_4 = in20; \
903 0 : scratch_5 = in21; \
904 0 : scratch_6 = in22; \
905 0 : { \
906 0 : gf_t temp = GF_ADD( in19, GF_MUL( in23, 97 ) ); \
907 0 : in23 = GF_ADD( in19, GF_MUL( in23, 96 ) ); \
908 0 : in19 = temp; \
909 0 : } \
910 0 : scratch_3 = in19; \
911 0 : { \
912 0 : gf_t temp = GF_ADD( GF_MUL( in16, 17 ), GF_MUL( in17, 16 ) ); \
913 0 : in17 = GF_ADD( in16, in17 ); \
914 0 : in16 = temp; \
915 0 : } \
916 0 : in19 = GF_ADD( in17, in19 ); \
917 0 : { \
918 0 : gf_t temp = GF_ADD( in18, GF_MUL( in19, 18 ) ); \
919 0 : in19 = GF_ADD( in18, in19 ); \
920 0 : in18 = temp; \
921 0 : } \
922 0 : { \
923 0 : gf_t temp = GF_ADD( GF_MUL( in16, 121 ), GF_MUL( in18, 120 ) ); \
924 0 : in18 = GF_ADD( in16, in18 ); \
925 0 : in16 = temp; \
926 0 : } \
927 0 : in17 = GF_ADD( GF_MUL( scratch_3, 120 ), in17 ); \
928 0 : in20 = GF_ADD( in16, in20 ); \
929 0 : in21 = GF_ADD( in17, in21 ); \
930 0 : in22 = GF_ADD( in18, in22 ); \
931 0 : FD_REEDSOL_GENERATE_FFT( 4, 20, in20, in21, in22, in23 ); \
932 0 : in16 = GF_ADD( GF_MUL( scratch_4, 97 ), in16 ); \
933 0 : in17 = GF_ADD( GF_MUL( scratch_5, 97 ), in17 ); \
934 0 : in18 = GF_ADD( GF_MUL( scratch_6, 97 ), in18 ); \
935 0 : in24 = GF_ADD( in16, in24 ); \
936 0 : in25 = GF_ADD( in17, in25 ); \
937 0 : in26 = GF_ADD( in18, in26 ); \
938 0 : FD_REEDSOL_GENERATE_FFT( 8, 24, in24, in25, in26, in27, in28, in29, in30, in31 ); \
939 0 : in16 = GF_ADD( GF_MUL( scratch_8, 11 ), in16 ); \
940 0 : in17 = GF_ADD( GF_MUL( scratch_9, 11 ), in17 ); \
941 0 : in18 = GF_ADD( GF_MUL( scratch_10, 11 ), in18 ); \
942 0 : in16 = GF_ADD( in00, in16 ); \
943 0 : in17 = GF_ADD( in01, in17 ); \
944 0 : in18 = GF_ADD( in02, in18 ); \
945 0 : } while( 0 )
946 :
947 : void fd_reedsol_ppt_32_20( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
948 : #define FD_REEDSOL_PPT_IMPL_32_20( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17 , \
949 : in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31) \
950 0 : do { \
951 0 : gf_t scratch_10, scratch_11, scratch_4, scratch_5, scratch_6, scratch_7, scratch_8, scratch_9; \
952 0 : FD_REEDSOL_GENERATE_IFFT( 16, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15 ); \
953 0 : in20 = GF_ADD( in04, in20 ); \
954 0 : in21 = GF_ADD( in05, in21 ); \
955 0 : in22 = GF_ADD( in06, in22 ); \
956 0 : in23 = GF_ADD( in07, in23 ); \
957 0 : in24 = GF_ADD( in08, in24 ); \
958 0 : in25 = GF_ADD( in09, in25 ); \
959 0 : in26 = GF_ADD( in10, in26 ); \
960 0 : in27 = GF_ADD( in11, in27 ); \
961 0 : in28 = GF_ADD( in12, in28 ); \
962 0 : in29 = GF_ADD( in13, in29 ); \
963 0 : in30 = GF_ADD( in14, in30 ); \
964 0 : in31 = GF_ADD( in15, in31 ); \
965 0 : scratch_8 = in24; \
966 0 : scratch_9 = in25; \
967 0 : scratch_10 = in26; \
968 0 : scratch_11 = in27; \
969 0 : { \
970 0 : gf_t temp = GF_ADD( in20, GF_MUL( in28, 11 ) ); \
971 0 : in28 = GF_ADD( in20, GF_MUL( in28, 10 ) ); \
972 0 : in20 = temp; \
973 0 : } \
974 0 : { \
975 0 : gf_t temp = GF_ADD( in21, GF_MUL( in29, 11 ) ); \
976 0 : in29 = GF_ADD( in21, GF_MUL( in29, 10 ) ); \
977 0 : in21 = temp; \
978 0 : } \
979 0 : { \
980 0 : gf_t temp = GF_ADD( in22, GF_MUL( in30, 11 ) ); \
981 0 : in30 = GF_ADD( in22, GF_MUL( in30, 10 ) ); \
982 0 : in22 = temp; \
983 0 : } \
984 0 : { \
985 0 : gf_t temp = GF_ADD( in23, GF_MUL( in31, 11 ) ); \
986 0 : in31 = GF_ADD( in23, GF_MUL( in31, 10 ) ); \
987 0 : in23 = temp; \
988 0 : } \
989 0 : scratch_4 = in20; \
990 0 : scratch_5 = in21; \
991 0 : scratch_6 = in22; \
992 0 : scratch_7 = in23; \
993 0 : FD_REEDSOL_GENERATE_IFFT( 4, 16, in16, in17, in18, in19 ); \
994 0 : in20 = GF_ADD( in16, in20 ); \
995 0 : in21 = GF_ADD( in17, in21 ); \
996 0 : in22 = GF_ADD( in18, in22 ); \
997 0 : in23 = GF_ADD( in19, in23 ); \
998 0 : FD_REEDSOL_GENERATE_FFT( 4, 20, in20, in21, in22, in23 ); \
999 0 : in16 = GF_ADD( GF_MUL( scratch_4, 97 ), in16 ); \
1000 0 : in17 = GF_ADD( GF_MUL( scratch_5, 97 ), in17 ); \
1001 0 : in18 = GF_ADD( GF_MUL( scratch_6, 97 ), in18 ); \
1002 0 : in19 = GF_ADD( GF_MUL( scratch_7, 97 ), in19 ); \
1003 0 : in24 = GF_ADD( in16, in24 ); \
1004 0 : in25 = GF_ADD( in17, in25 ); \
1005 0 : in26 = GF_ADD( in18, in26 ); \
1006 0 : in27 = GF_ADD( in19, in27 ); \
1007 0 : FD_REEDSOL_GENERATE_FFT( 8, 24, in24, in25, in26, in27, in28, in29, in30, in31 ); \
1008 0 : in16 = GF_ADD( GF_MUL( scratch_8, 11 ), in16 ); \
1009 0 : in17 = GF_ADD( GF_MUL( scratch_9, 11 ), in17 ); \
1010 0 : in18 = GF_ADD( GF_MUL( scratch_10, 11 ), in18 ); \
1011 0 : in19 = GF_ADD( GF_MUL( scratch_11, 11 ), in19 ); \
1012 0 : in16 = GF_ADD( in00, in16 ); \
1013 0 : in17 = GF_ADD( in01, in17 ); \
1014 0 : in18 = GF_ADD( in02, in18 ); \
1015 0 : in19 = GF_ADD( in03, in19 ); \
1016 0 : } while( 0 )
1017 :
1018 : void fd_reedsol_ppt_32_21( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
1019 : #define FD_REEDSOL_PPT_IMPL_32_21( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17 , \
1020 : in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31) \
1021 0 : do { \
1022 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_2, scratch_5, scratch_6, scratch_7, scratch_8, scratch_9; \
1023 0 : FD_REEDSOL_GENERATE_IFFT( 16, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15 ); \
1024 0 : in21 = GF_ADD( in05, in21 ); \
1025 0 : in22 = GF_ADD( in06, in22 ); \
1026 0 : in23 = GF_ADD( in07, in23 ); \
1027 0 : in24 = GF_ADD( in08, in24 ); \
1028 0 : in25 = GF_ADD( in09, in25 ); \
1029 0 : in26 = GF_ADD( in10, in26 ); \
1030 0 : in27 = GF_ADD( in11, in27 ); \
1031 0 : in28 = GF_ADD( in12, in28 ); \
1032 0 : in29 = GF_ADD( in13, in29 ); \
1033 0 : in30 = GF_ADD( in14, in30 ); \
1034 0 : in31 = GF_ADD( in15, in31 ); \
1035 0 : scratch_8 = in24; \
1036 0 : scratch_9 = in25; \
1037 0 : scratch_10 = in26; \
1038 0 : scratch_11 = in27; \
1039 0 : scratch_12 = in28; \
1040 0 : { \
1041 0 : gf_t temp = GF_ADD( in21, GF_MUL( in29, 11 ) ); \
1042 0 : in29 = GF_ADD( in21, GF_MUL( in29, 10 ) ); \
1043 0 : in21 = temp; \
1044 0 : } \
1045 0 : { \
1046 0 : gf_t temp = GF_ADD( in22, GF_MUL( in30, 11 ) ); \
1047 0 : in30 = GF_ADD( in22, GF_MUL( in30, 10 ) ); \
1048 0 : in22 = temp; \
1049 0 : } \
1050 0 : { \
1051 0 : gf_t temp = GF_ADD( in23, GF_MUL( in31, 11 ) ); \
1052 0 : in31 = GF_ADD( in23, GF_MUL( in31, 10 ) ); \
1053 0 : in23 = temp; \
1054 0 : } \
1055 0 : scratch_5 = in21; \
1056 0 : scratch_6 = in22; \
1057 0 : scratch_7 = in23; \
1058 0 : FD_REEDSOL_GENERATE_IFFT( 4, 16, in16, in17, in18, in19 ); \
1059 0 : in21 = GF_ADD( in17, in21 ); \
1060 0 : in22 = GF_ADD( in18, in22 ); \
1061 0 : in23 = GF_ADD( in19, in23 ); \
1062 0 : scratch_2 = in22; \
1063 0 : { \
1064 0 : gf_t temp = GF_ADD( in21, GF_MUL( in23, 126 ) ); \
1065 0 : in23 = GF_ADD( in21, GF_MUL( in23, 127 ) ); \
1066 0 : in21 = temp; \
1067 0 : } \
1068 0 : { \
1069 0 : gf_t temp = GF_ADD( in20, GF_MUL( in21, 20 ) ); \
1070 0 : in21 = GF_ADD( in20, in21 ); \
1071 0 : in20 = temp; \
1072 0 : } \
1073 0 : in22 = GF_ADD( in20, in22 ); \
1074 0 : { \
1075 0 : gf_t temp = GF_ADD( in22, GF_MUL( in23, 22 ) ); \
1076 0 : in23 = GF_ADD( in22, GF_MUL( in23, 23 ) ); \
1077 0 : in22 = temp; \
1078 0 : } \
1079 0 : in20 = GF_ADD( GF_MUL( scratch_2, 126 ), in20 ); \
1080 0 : { \
1081 0 : gf_t temp = GF_ADD( GF_MUL( in16, 96 ), GF_MUL( in20, 97 ) ); \
1082 0 : in20 = GF_ADD( in16, in20 ); \
1083 0 : in16 = temp; \
1084 0 : } \
1085 0 : in17 = GF_ADD( GF_MUL( scratch_5, 97 ), in17 ); \
1086 0 : in18 = GF_ADD( GF_MUL( scratch_6, 97 ), in18 ); \
1087 0 : in19 = GF_ADD( GF_MUL( scratch_7, 97 ), in19 ); \
1088 0 : in24 = GF_ADD( in16, in24 ); \
1089 0 : in25 = GF_ADD( in17, in25 ); \
1090 0 : in26 = GF_ADD( in18, in26 ); \
1091 0 : in27 = GF_ADD( in19, in27 ); \
1092 0 : in28 = GF_ADD( in20, in28 ); \
1093 0 : FD_REEDSOL_GENERATE_FFT( 8, 24, in24, in25, in26, in27, in28, in29, in30, in31 ); \
1094 0 : in16 = GF_ADD( GF_MUL( scratch_8, 11 ), in16 ); \
1095 0 : in17 = GF_ADD( GF_MUL( scratch_9, 11 ), in17 ); \
1096 0 : in18 = GF_ADD( GF_MUL( scratch_10, 11 ), in18 ); \
1097 0 : in19 = GF_ADD( GF_MUL( scratch_11, 11 ), in19 ); \
1098 0 : in20 = GF_ADD( GF_MUL( scratch_12, 11 ), in20 ); \
1099 0 : in16 = GF_ADD( in00, in16 ); \
1100 0 : in17 = GF_ADD( in01, in17 ); \
1101 0 : in18 = GF_ADD( in02, in18 ); \
1102 0 : in19 = GF_ADD( in03, in19 ); \
1103 0 : in20 = GF_ADD( in04, in20 ); \
1104 0 : } while( 0 )
1105 :
1106 : void fd_reedsol_ppt_32_22( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
1107 : #define FD_REEDSOL_PPT_IMPL_32_22( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17 , \
1108 : in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31) \
1109 0 : do { \
1110 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_13, scratch_2, scratch_3, scratch_6, scratch_7, scratch_8, scratch_9; \
1111 0 : FD_REEDSOL_GENERATE_IFFT( 16, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15 ); \
1112 0 : in22 = GF_ADD( in06, in22 ); \
1113 0 : in23 = GF_ADD( in07, in23 ); \
1114 0 : in24 = GF_ADD( in08, in24 ); \
1115 0 : in25 = GF_ADD( in09, in25 ); \
1116 0 : in26 = GF_ADD( in10, in26 ); \
1117 0 : in27 = GF_ADD( in11, in27 ); \
1118 0 : in28 = GF_ADD( in12, in28 ); \
1119 0 : in29 = GF_ADD( in13, in29 ); \
1120 0 : in30 = GF_ADD( in14, in30 ); \
1121 0 : in31 = GF_ADD( in15, in31 ); \
1122 0 : scratch_8 = in24; \
1123 0 : scratch_9 = in25; \
1124 0 : scratch_10 = in26; \
1125 0 : scratch_11 = in27; \
1126 0 : scratch_12 = in28; \
1127 0 : scratch_13 = in29; \
1128 0 : { \
1129 0 : gf_t temp = GF_ADD( in22, GF_MUL( in30, 11 ) ); \
1130 0 : in30 = GF_ADD( in22, GF_MUL( in30, 10 ) ); \
1131 0 : in22 = temp; \
1132 0 : } \
1133 0 : { \
1134 0 : gf_t temp = GF_ADD( in23, GF_MUL( in31, 11 ) ); \
1135 0 : in31 = GF_ADD( in23, GF_MUL( in31, 10 ) ); \
1136 0 : in23 = temp; \
1137 0 : } \
1138 0 : scratch_6 = in22; \
1139 0 : scratch_7 = in23; \
1140 0 : FD_REEDSOL_GENERATE_IFFT( 4, 16, in16, in17, in18, in19 ); \
1141 0 : in22 = GF_ADD( in18, in22 ); \
1142 0 : in23 = GF_ADD( in19, in23 ); \
1143 0 : scratch_2 = in22; \
1144 0 : scratch_3 = in23; \
1145 0 : { \
1146 0 : gf_t temp = GF_ADD( GF_MUL( in20, 21 ), GF_MUL( in21, 20 ) ); \
1147 0 : in21 = GF_ADD( in20, in21 ); \
1148 0 : in20 = temp; \
1149 0 : } \
1150 0 : in22 = GF_ADD( in20, in22 ); \
1151 0 : in23 = GF_ADD( in21, in23 ); \
1152 0 : { \
1153 0 : gf_t temp = GF_ADD( in22, GF_MUL( in23, 22 ) ); \
1154 0 : in23 = GF_ADD( in22, GF_MUL( in23, 23 ) ); \
1155 0 : in22 = temp; \
1156 0 : } \
1157 0 : in20 = GF_ADD( GF_MUL( scratch_2, 126 ), in20 ); \
1158 0 : in21 = GF_ADD( GF_MUL( scratch_3, 126 ), in21 ); \
1159 0 : { \
1160 0 : gf_t temp = GF_ADD( GF_MUL( in16, 96 ), GF_MUL( in20, 97 ) ); \
1161 0 : in20 = GF_ADD( in16, in20 ); \
1162 0 : in16 = temp; \
1163 0 : } \
1164 0 : { \
1165 0 : gf_t temp = GF_ADD( GF_MUL( in17, 96 ), GF_MUL( in21, 97 ) ); \
1166 0 : in21 = GF_ADD( in17, in21 ); \
1167 0 : in17 = temp; \
1168 0 : } \
1169 0 : in18 = GF_ADD( GF_MUL( scratch_6, 97 ), in18 ); \
1170 0 : in19 = GF_ADD( GF_MUL( scratch_7, 97 ), in19 ); \
1171 0 : in24 = GF_ADD( in16, in24 ); \
1172 0 : in25 = GF_ADD( in17, in25 ); \
1173 0 : in26 = GF_ADD( in18, in26 ); \
1174 0 : in27 = GF_ADD( in19, in27 ); \
1175 0 : in28 = GF_ADD( in20, in28 ); \
1176 0 : in29 = GF_ADD( in21, in29 ); \
1177 0 : FD_REEDSOL_GENERATE_FFT( 8, 24, in24, in25, in26, in27, in28, in29, in30, in31 ); \
1178 0 : in16 = GF_ADD( GF_MUL( scratch_8, 11 ), in16 ); \
1179 0 : in17 = GF_ADD( GF_MUL( scratch_9, 11 ), in17 ); \
1180 0 : in18 = GF_ADD( GF_MUL( scratch_10, 11 ), in18 ); \
1181 0 : in19 = GF_ADD( GF_MUL( scratch_11, 11 ), in19 ); \
1182 0 : in20 = GF_ADD( GF_MUL( scratch_12, 11 ), in20 ); \
1183 0 : in21 = GF_ADD( GF_MUL( scratch_13, 11 ), in21 ); \
1184 0 : in16 = GF_ADD( in00, in16 ); \
1185 0 : in17 = GF_ADD( in01, in17 ); \
1186 0 : in18 = GF_ADD( in02, in18 ); \
1187 0 : in19 = GF_ADD( in03, in19 ); \
1188 0 : in20 = GF_ADD( in04, in20 ); \
1189 0 : in21 = GF_ADD( in05, in21 ); \
1190 0 : } while( 0 )
1191 :
1192 : void fd_reedsol_ppt_32_23( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
1193 : #define FD_REEDSOL_PPT_IMPL_32_23( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17 , \
1194 : in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31) \
1195 0 : do { \
1196 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_13, scratch_14, scratch_3, scratch_7, scratch_8, scratch_9; \
1197 0 : FD_REEDSOL_GENERATE_IFFT( 16, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15 ); \
1198 0 : in23 = GF_ADD( in07, in23 ); \
1199 0 : in24 = GF_ADD( in08, in24 ); \
1200 0 : in25 = GF_ADD( in09, in25 ); \
1201 0 : in26 = GF_ADD( in10, in26 ); \
1202 0 : in27 = GF_ADD( in11, in27 ); \
1203 0 : in28 = GF_ADD( in12, in28 ); \
1204 0 : in29 = GF_ADD( in13, in29 ); \
1205 0 : in30 = GF_ADD( in14, in30 ); \
1206 0 : in31 = GF_ADD( in15, in31 ); \
1207 0 : scratch_8 = in24; \
1208 0 : scratch_9 = in25; \
1209 0 : scratch_10 = in26; \
1210 0 : scratch_11 = in27; \
1211 0 : scratch_12 = in28; \
1212 0 : scratch_13 = in29; \
1213 0 : scratch_14 = in30; \
1214 0 : { \
1215 0 : gf_t temp = GF_ADD( in23, GF_MUL( in31, 11 ) ); \
1216 0 : in31 = GF_ADD( in23, GF_MUL( in31, 10 ) ); \
1217 0 : in23 = temp; \
1218 0 : } \
1219 0 : scratch_7 = in23; \
1220 0 : FD_REEDSOL_GENERATE_IFFT( 4, 16, in16, in17, in18, in19 ); \
1221 0 : in23 = GF_ADD( in19, in23 ); \
1222 0 : scratch_3 = in23; \
1223 0 : { \
1224 0 : gf_t temp = GF_ADD( GF_MUL( in20, 21 ), GF_MUL( in21, 20 ) ); \
1225 0 : in21 = GF_ADD( in20, in21 ); \
1226 0 : in20 = temp; \
1227 0 : } \
1228 0 : in23 = GF_ADD( in21, in23 ); \
1229 0 : { \
1230 0 : gf_t temp = GF_ADD( in22, GF_MUL( in23, 22 ) ); \
1231 0 : in23 = GF_ADD( in22, in23 ); \
1232 0 : in22 = temp; \
1233 0 : } \
1234 0 : { \
1235 0 : gf_t temp = GF_ADD( GF_MUL( in20, 127 ), GF_MUL( in22, 126 ) ); \
1236 0 : in22 = GF_ADD( in20, in22 ); \
1237 0 : in20 = temp; \
1238 0 : } \
1239 0 : in21 = GF_ADD( GF_MUL( scratch_3, 126 ), in21 ); \
1240 0 : { \
1241 0 : gf_t temp = GF_ADD( GF_MUL( in16, 96 ), GF_MUL( in20, 97 ) ); \
1242 0 : in20 = GF_ADD( in16, in20 ); \
1243 0 : in16 = temp; \
1244 0 : } \
1245 0 : { \
1246 0 : gf_t temp = GF_ADD( GF_MUL( in17, 96 ), GF_MUL( in21, 97 ) ); \
1247 0 : in21 = GF_ADD( in17, in21 ); \
1248 0 : in17 = temp; \
1249 0 : } \
1250 0 : { \
1251 0 : gf_t temp = GF_ADD( GF_MUL( in18, 96 ), GF_MUL( in22, 97 ) ); \
1252 0 : in22 = GF_ADD( in18, in22 ); \
1253 0 : in18 = temp; \
1254 0 : } \
1255 0 : in19 = GF_ADD( GF_MUL( scratch_7, 97 ), in19 ); \
1256 0 : in24 = GF_ADD( in16, in24 ); \
1257 0 : in25 = GF_ADD( in17, in25 ); \
1258 0 : in26 = GF_ADD( in18, in26 ); \
1259 0 : in27 = GF_ADD( in19, in27 ); \
1260 0 : in28 = GF_ADD( in20, in28 ); \
1261 0 : in29 = GF_ADD( in21, in29 ); \
1262 0 : in30 = GF_ADD( in22, in30 ); \
1263 0 : FD_REEDSOL_GENERATE_FFT( 8, 24, in24, in25, in26, in27, in28, in29, in30, in31 ); \
1264 0 : in16 = GF_ADD( GF_MUL( scratch_8, 11 ), in16 ); \
1265 0 : in17 = GF_ADD( GF_MUL( scratch_9, 11 ), in17 ); \
1266 0 : in18 = GF_ADD( GF_MUL( scratch_10, 11 ), in18 ); \
1267 0 : in19 = GF_ADD( GF_MUL( scratch_11, 11 ), in19 ); \
1268 0 : in20 = GF_ADD( GF_MUL( scratch_12, 11 ), in20 ); \
1269 0 : in21 = GF_ADD( GF_MUL( scratch_13, 11 ), in21 ); \
1270 0 : in22 = GF_ADD( GF_MUL( scratch_14, 11 ), in22 ); \
1271 0 : in16 = GF_ADD( in00, in16 ); \
1272 0 : in17 = GF_ADD( in01, in17 ); \
1273 0 : in18 = GF_ADD( in02, in18 ); \
1274 0 : in19 = GF_ADD( in03, in19 ); \
1275 0 : in20 = GF_ADD( in04, in20 ); \
1276 0 : in21 = GF_ADD( in05, in21 ); \
1277 0 : in22 = GF_ADD( in06, in22 ); \
1278 0 : } while( 0 )
1279 :
1280 : void fd_reedsol_ppt_32_24( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
1281 : #define FD_REEDSOL_PPT_IMPL_32_24( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17 , \
1282 : in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31) \
1283 0 : do { \
1284 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_13, scratch_14, scratch_15, scratch_8, scratch_9; \
1285 0 : FD_REEDSOL_GENERATE_IFFT( 16, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15 ); \
1286 0 : in24 = GF_ADD( in08, in24 ); \
1287 0 : in25 = GF_ADD( in09, in25 ); \
1288 0 : in26 = GF_ADD( in10, in26 ); \
1289 0 : in27 = GF_ADD( in11, in27 ); \
1290 0 : in28 = GF_ADD( in12, in28 ); \
1291 0 : in29 = GF_ADD( in13, in29 ); \
1292 0 : in30 = GF_ADD( in14, in30 ); \
1293 0 : in31 = GF_ADD( in15, in31 ); \
1294 0 : scratch_8 = in24; \
1295 0 : scratch_9 = in25; \
1296 0 : scratch_10 = in26; \
1297 0 : scratch_11 = in27; \
1298 0 : scratch_12 = in28; \
1299 0 : scratch_13 = in29; \
1300 0 : scratch_14 = in30; \
1301 0 : scratch_15 = in31; \
1302 0 : FD_REEDSOL_GENERATE_IFFT( 8, 16, in16, in17, in18, in19, in20, in21, in22, in23 ); \
1303 0 : in24 = GF_ADD( in16, in24 ); \
1304 0 : in25 = GF_ADD( in17, in25 ); \
1305 0 : in26 = GF_ADD( in18, in26 ); \
1306 0 : in27 = GF_ADD( in19, in27 ); \
1307 0 : in28 = GF_ADD( in20, in28 ); \
1308 0 : in29 = GF_ADD( in21, in29 ); \
1309 0 : in30 = GF_ADD( in22, in30 ); \
1310 0 : in31 = GF_ADD( in23, in31 ); \
1311 0 : FD_REEDSOL_GENERATE_FFT( 8, 24, in24, in25, in26, in27, in28, in29, in30, in31 ); \
1312 0 : in16 = GF_ADD( GF_MUL( scratch_8, 11 ), in16 ); \
1313 0 : in17 = GF_ADD( GF_MUL( scratch_9, 11 ), in17 ); \
1314 0 : in18 = GF_ADD( GF_MUL( scratch_10, 11 ), in18 ); \
1315 0 : in19 = GF_ADD( GF_MUL( scratch_11, 11 ), in19 ); \
1316 0 : in20 = GF_ADD( GF_MUL( scratch_12, 11 ), in20 ); \
1317 0 : in21 = GF_ADD( GF_MUL( scratch_13, 11 ), in21 ); \
1318 0 : in22 = GF_ADD( GF_MUL( scratch_14, 11 ), in22 ); \
1319 0 : in23 = GF_ADD( GF_MUL( scratch_15, 11 ), in23 ); \
1320 0 : in16 = GF_ADD( in00, in16 ); \
1321 0 : in17 = GF_ADD( in01, in17 ); \
1322 0 : in18 = GF_ADD( in02, in18 ); \
1323 0 : in19 = GF_ADD( in03, in19 ); \
1324 0 : in20 = GF_ADD( in04, in20 ); \
1325 0 : in21 = GF_ADD( in05, in21 ); \
1326 0 : in22 = GF_ADD( in06, in22 ); \
1327 0 : in23 = GF_ADD( in07, in23 ); \
1328 0 : } while( 0 )
1329 :
1330 : void fd_reedsol_ppt_32_25( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
1331 : #define FD_REEDSOL_PPT_IMPL_32_25( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17 , \
1332 : in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31) \
1333 0 : do { \
1334 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_13, scratch_14, scratch_15, scratch_2, scratch_4, scratch_9; \
1335 0 : FD_REEDSOL_GENERATE_IFFT( 16, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15 ); \
1336 0 : in25 = GF_ADD( in09, in25 ); \
1337 0 : in26 = GF_ADD( in10, in26 ); \
1338 0 : in27 = GF_ADD( in11, in27 ); \
1339 0 : in28 = GF_ADD( in12, in28 ); \
1340 0 : in29 = GF_ADD( in13, in29 ); \
1341 0 : in30 = GF_ADD( in14, in30 ); \
1342 0 : in31 = GF_ADD( in15, in31 ); \
1343 0 : scratch_9 = in25; \
1344 0 : scratch_10 = in26; \
1345 0 : scratch_11 = in27; \
1346 0 : scratch_12 = in28; \
1347 0 : scratch_13 = in29; \
1348 0 : scratch_14 = in30; \
1349 0 : scratch_15 = in31; \
1350 0 : FD_REEDSOL_GENERATE_IFFT( 8, 16, in16, in17, in18, in19, in20, in21, in22, in23 ); \
1351 0 : in25 = GF_ADD( in17, in25 ); \
1352 0 : in26 = GF_ADD( in18, in26 ); \
1353 0 : in27 = GF_ADD( in19, in27 ); \
1354 0 : in28 = GF_ADD( in20, in28 ); \
1355 0 : in29 = GF_ADD( in21, in29 ); \
1356 0 : in30 = GF_ADD( in22, in30 ); \
1357 0 : in31 = GF_ADD( in23, in31 ); \
1358 0 : scratch_4 = in28; \
1359 0 : { \
1360 0 : gf_t temp = GF_ADD( in25, GF_MUL( in29, 119 ) ); \
1361 0 : in29 = GF_ADD( in25, GF_MUL( in29, 118 ) ); \
1362 0 : in25 = temp; \
1363 0 : } \
1364 0 : { \
1365 0 : gf_t temp = GF_ADD( in26, GF_MUL( in30, 119 ) ); \
1366 0 : in30 = GF_ADD( in26, GF_MUL( in30, 118 ) ); \
1367 0 : in26 = temp; \
1368 0 : } \
1369 0 : { \
1370 0 : gf_t temp = GF_ADD( in27, GF_MUL( in31, 119 ) ); \
1371 0 : in31 = GF_ADD( in27, GF_MUL( in31, 118 ) ); \
1372 0 : in27 = temp; \
1373 0 : } \
1374 0 : scratch_2 = in26; \
1375 0 : { \
1376 0 : gf_t temp = GF_ADD( in25, GF_MUL( in27, 100 ) ); \
1377 0 : in27 = GF_ADD( in25, GF_MUL( in27, 101 ) ); \
1378 0 : in25 = temp; \
1379 0 : } \
1380 0 : { \
1381 0 : gf_t temp = GF_ADD( in24, GF_MUL( in25, 24 ) ); \
1382 0 : in25 = GF_ADD( in24, in25 ); \
1383 0 : in24 = temp; \
1384 0 : } \
1385 0 : in26 = GF_ADD( in24, in26 ); \
1386 0 : { \
1387 0 : gf_t temp = GF_ADD( in26, GF_MUL( in27, 26 ) ); \
1388 0 : in27 = GF_ADD( in26, GF_MUL( in27, 27 ) ); \
1389 0 : in26 = temp; \
1390 0 : } \
1391 0 : in24 = GF_ADD( GF_MUL( scratch_2, 100 ), in24 ); \
1392 0 : in28 = GF_ADD( in24, in28 ); \
1393 0 : FD_REEDSOL_GENERATE_FFT( 4, 28, in28, in29, in30, in31 ); \
1394 0 : in24 = GF_ADD( GF_MUL( scratch_4, 119 ), in24 ); \
1395 0 : { \
1396 0 : gf_t temp = GF_ADD( GF_MUL( in16, 10 ), GF_MUL( in24, 11 ) ); \
1397 0 : in24 = GF_ADD( in16, in24 ); \
1398 0 : in16 = temp; \
1399 0 : } \
1400 0 : in17 = GF_ADD( GF_MUL( scratch_9, 11 ), in17 ); \
1401 0 : in18 = GF_ADD( GF_MUL( scratch_10, 11 ), in18 ); \
1402 0 : in19 = GF_ADD( GF_MUL( scratch_11, 11 ), in19 ); \
1403 0 : in20 = GF_ADD( GF_MUL( scratch_12, 11 ), in20 ); \
1404 0 : in21 = GF_ADD( GF_MUL( scratch_13, 11 ), in21 ); \
1405 0 : in22 = GF_ADD( GF_MUL( scratch_14, 11 ), in22 ); \
1406 0 : in23 = GF_ADD( GF_MUL( scratch_15, 11 ), in23 ); \
1407 0 : in16 = GF_ADD( in00, in16 ); \
1408 0 : in17 = GF_ADD( in01, in17 ); \
1409 0 : in18 = GF_ADD( in02, in18 ); \
1410 0 : in19 = GF_ADD( in03, in19 ); \
1411 0 : in20 = GF_ADD( in04, in20 ); \
1412 0 : in21 = GF_ADD( in05, in21 ); \
1413 0 : in22 = GF_ADD( in06, in22 ); \
1414 0 : in23 = GF_ADD( in07, in23 ); \
1415 0 : in24 = GF_ADD( in08, in24 ); \
1416 0 : } while( 0 )
1417 :
1418 : void fd_reedsol_ppt_32_26( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
1419 : #define FD_REEDSOL_PPT_IMPL_32_26( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17 , \
1420 : in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31) \
1421 0 : do { \
1422 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_13, scratch_14, scratch_15, scratch_2, scratch_3, scratch_4, scratch_5; \
1423 0 : FD_REEDSOL_GENERATE_IFFT( 16, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15 ); \
1424 0 : in26 = GF_ADD( in10, in26 ); \
1425 0 : in27 = GF_ADD( in11, in27 ); \
1426 0 : in28 = GF_ADD( in12, in28 ); \
1427 0 : in29 = GF_ADD( in13, in29 ); \
1428 0 : in30 = GF_ADD( in14, in30 ); \
1429 0 : in31 = GF_ADD( in15, in31 ); \
1430 0 : scratch_10 = in26; \
1431 0 : scratch_11 = in27; \
1432 0 : scratch_12 = in28; \
1433 0 : scratch_13 = in29; \
1434 0 : scratch_14 = in30; \
1435 0 : scratch_15 = in31; \
1436 0 : FD_REEDSOL_GENERATE_IFFT( 8, 16, in16, in17, in18, in19, in20, in21, in22, in23 ); \
1437 0 : in26 = GF_ADD( in18, in26 ); \
1438 0 : in27 = GF_ADD( in19, in27 ); \
1439 0 : in28 = GF_ADD( in20, in28 ); \
1440 0 : in29 = GF_ADD( in21, in29 ); \
1441 0 : in30 = GF_ADD( in22, in30 ); \
1442 0 : in31 = GF_ADD( in23, in31 ); \
1443 0 : scratch_4 = in28; \
1444 0 : scratch_5 = in29; \
1445 0 : { \
1446 0 : gf_t temp = GF_ADD( in26, GF_MUL( in30, 119 ) ); \
1447 0 : in30 = GF_ADD( in26, GF_MUL( in30, 118 ) ); \
1448 0 : in26 = temp; \
1449 0 : } \
1450 0 : { \
1451 0 : gf_t temp = GF_ADD( in27, GF_MUL( in31, 119 ) ); \
1452 0 : in31 = GF_ADD( in27, GF_MUL( in31, 118 ) ); \
1453 0 : in27 = temp; \
1454 0 : } \
1455 0 : scratch_2 = in26; \
1456 0 : scratch_3 = in27; \
1457 0 : { \
1458 0 : gf_t temp = GF_ADD( GF_MUL( in24, 25 ), GF_MUL( in25, 24 ) ); \
1459 0 : in25 = GF_ADD( in24, in25 ); \
1460 0 : in24 = temp; \
1461 0 : } \
1462 0 : in26 = GF_ADD( in24, in26 ); \
1463 0 : in27 = GF_ADD( in25, in27 ); \
1464 0 : { \
1465 0 : gf_t temp = GF_ADD( in26, GF_MUL( in27, 26 ) ); \
1466 0 : in27 = GF_ADD( in26, GF_MUL( in27, 27 ) ); \
1467 0 : in26 = temp; \
1468 0 : } \
1469 0 : in24 = GF_ADD( GF_MUL( scratch_2, 100 ), in24 ); \
1470 0 : in25 = GF_ADD( GF_MUL( scratch_3, 100 ), in25 ); \
1471 0 : in28 = GF_ADD( in24, in28 ); \
1472 0 : in29 = GF_ADD( in25, in29 ); \
1473 0 : FD_REEDSOL_GENERATE_FFT( 4, 28, in28, in29, in30, in31 ); \
1474 0 : in24 = GF_ADD( GF_MUL( scratch_4, 119 ), in24 ); \
1475 0 : in25 = GF_ADD( GF_MUL( scratch_5, 119 ), in25 ); \
1476 0 : { \
1477 0 : gf_t temp = GF_ADD( GF_MUL( in16, 10 ), GF_MUL( in24, 11 ) ); \
1478 0 : in24 = GF_ADD( in16, in24 ); \
1479 0 : in16 = temp; \
1480 0 : } \
1481 0 : { \
1482 0 : gf_t temp = GF_ADD( GF_MUL( in17, 10 ), GF_MUL( in25, 11 ) ); \
1483 0 : in25 = GF_ADD( in17, in25 ); \
1484 0 : in17 = temp; \
1485 0 : } \
1486 0 : in18 = GF_ADD( GF_MUL( scratch_10, 11 ), in18 ); \
1487 0 : in19 = GF_ADD( GF_MUL( scratch_11, 11 ), in19 ); \
1488 0 : in20 = GF_ADD( GF_MUL( scratch_12, 11 ), in20 ); \
1489 0 : in21 = GF_ADD( GF_MUL( scratch_13, 11 ), in21 ); \
1490 0 : in22 = GF_ADD( GF_MUL( scratch_14, 11 ), in22 ); \
1491 0 : in23 = GF_ADD( GF_MUL( scratch_15, 11 ), in23 ); \
1492 0 : in16 = GF_ADD( in00, in16 ); \
1493 0 : in17 = GF_ADD( in01, in17 ); \
1494 0 : in18 = GF_ADD( in02, in18 ); \
1495 0 : in19 = GF_ADD( in03, in19 ); \
1496 0 : in20 = GF_ADD( in04, in20 ); \
1497 0 : in21 = GF_ADD( in05, in21 ); \
1498 0 : in22 = GF_ADD( in06, in22 ); \
1499 0 : in23 = GF_ADD( in07, in23 ); \
1500 0 : in24 = GF_ADD( in08, in24 ); \
1501 0 : in25 = GF_ADD( in09, in25 ); \
1502 0 : } while( 0 )
1503 :
1504 : void fd_reedsol_ppt_32_27( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
1505 : #define FD_REEDSOL_PPT_IMPL_32_27( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17 , \
1506 : in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31) \
1507 0 : do { \
1508 0 : gf_t scratch_11, scratch_12, scratch_13, scratch_14, scratch_15, scratch_3, scratch_4, scratch_5, scratch_6; \
1509 0 : FD_REEDSOL_GENERATE_IFFT( 16, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15 ); \
1510 0 : in27 = GF_ADD( in11, in27 ); \
1511 0 : in28 = GF_ADD( in12, in28 ); \
1512 0 : in29 = GF_ADD( in13, in29 ); \
1513 0 : in30 = GF_ADD( in14, in30 ); \
1514 0 : in31 = GF_ADD( in15, in31 ); \
1515 0 : scratch_11 = in27; \
1516 0 : scratch_12 = in28; \
1517 0 : scratch_13 = in29; \
1518 0 : scratch_14 = in30; \
1519 0 : scratch_15 = in31; \
1520 0 : FD_REEDSOL_GENERATE_IFFT( 8, 16, in16, in17, in18, in19, in20, in21, in22, in23 ); \
1521 0 : in27 = GF_ADD( in19, in27 ); \
1522 0 : in28 = GF_ADD( in20, in28 ); \
1523 0 : in29 = GF_ADD( in21, in29 ); \
1524 0 : in30 = GF_ADD( in22, in30 ); \
1525 0 : in31 = GF_ADD( in23, in31 ); \
1526 0 : scratch_4 = in28; \
1527 0 : scratch_5 = in29; \
1528 0 : scratch_6 = in30; \
1529 0 : { \
1530 0 : gf_t temp = GF_ADD( in27, GF_MUL( in31, 119 ) ); \
1531 0 : in31 = GF_ADD( in27, GF_MUL( in31, 118 ) ); \
1532 0 : in27 = temp; \
1533 0 : } \
1534 0 : scratch_3 = in27; \
1535 0 : { \
1536 0 : gf_t temp = GF_ADD( GF_MUL( in24, 25 ), GF_MUL( in25, 24 ) ); \
1537 0 : in25 = GF_ADD( in24, in25 ); \
1538 0 : in24 = temp; \
1539 0 : } \
1540 0 : in27 = GF_ADD( in25, in27 ); \
1541 0 : { \
1542 0 : gf_t temp = GF_ADD( in26, GF_MUL( in27, 26 ) ); \
1543 0 : in27 = GF_ADD( in26, in27 ); \
1544 0 : in26 = temp; \
1545 0 : } \
1546 0 : { \
1547 0 : gf_t temp = GF_ADD( GF_MUL( in24, 101 ), GF_MUL( in26, 100 ) ); \
1548 0 : in26 = GF_ADD( in24, in26 ); \
1549 0 : in24 = temp; \
1550 0 : } \
1551 0 : in25 = GF_ADD( GF_MUL( scratch_3, 100 ), in25 ); \
1552 0 : in28 = GF_ADD( in24, in28 ); \
1553 0 : in29 = GF_ADD( in25, in29 ); \
1554 0 : in30 = GF_ADD( in26, in30 ); \
1555 0 : FD_REEDSOL_GENERATE_FFT( 4, 28, in28, in29, in30, in31 ); \
1556 0 : in24 = GF_ADD( GF_MUL( scratch_4, 119 ), in24 ); \
1557 0 : in25 = GF_ADD( GF_MUL( scratch_5, 119 ), in25 ); \
1558 0 : in26 = GF_ADD( GF_MUL( scratch_6, 119 ), in26 ); \
1559 0 : { \
1560 0 : gf_t temp = GF_ADD( GF_MUL( in16, 10 ), GF_MUL( in24, 11 ) ); \
1561 0 : in24 = GF_ADD( in16, in24 ); \
1562 0 : in16 = temp; \
1563 0 : } \
1564 0 : { \
1565 0 : gf_t temp = GF_ADD( GF_MUL( in17, 10 ), GF_MUL( in25, 11 ) ); \
1566 0 : in25 = GF_ADD( in17, in25 ); \
1567 0 : in17 = temp; \
1568 0 : } \
1569 0 : { \
1570 0 : gf_t temp = GF_ADD( GF_MUL( in18, 10 ), GF_MUL( in26, 11 ) ); \
1571 0 : in26 = GF_ADD( in18, in26 ); \
1572 0 : in18 = temp; \
1573 0 : } \
1574 0 : in19 = GF_ADD( GF_MUL( scratch_11, 11 ), in19 ); \
1575 0 : in20 = GF_ADD( GF_MUL( scratch_12, 11 ), in20 ); \
1576 0 : in21 = GF_ADD( GF_MUL( scratch_13, 11 ), in21 ); \
1577 0 : in22 = GF_ADD( GF_MUL( scratch_14, 11 ), in22 ); \
1578 0 : in23 = GF_ADD( GF_MUL( scratch_15, 11 ), in23 ); \
1579 0 : in16 = GF_ADD( in00, in16 ); \
1580 0 : in17 = GF_ADD( in01, in17 ); \
1581 0 : in18 = GF_ADD( in02, in18 ); \
1582 0 : in19 = GF_ADD( in03, in19 ); \
1583 0 : in20 = GF_ADD( in04, in20 ); \
1584 0 : in21 = GF_ADD( in05, in21 ); \
1585 0 : in22 = GF_ADD( in06, in22 ); \
1586 0 : in23 = GF_ADD( in07, in23 ); \
1587 0 : in24 = GF_ADD( in08, in24 ); \
1588 0 : in25 = GF_ADD( in09, in25 ); \
1589 0 : in26 = GF_ADD( in10, in26 ); \
1590 0 : } while( 0 )
1591 :
1592 : void fd_reedsol_ppt_32_28( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
1593 : #define FD_REEDSOL_PPT_IMPL_32_28( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17 , \
1594 : in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31) \
1595 0 : do { \
1596 0 : gf_t scratch_12, scratch_13, scratch_14, scratch_15, scratch_4, scratch_5, scratch_6, scratch_7; \
1597 0 : FD_REEDSOL_GENERATE_IFFT( 16, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15 ); \
1598 0 : in28 = GF_ADD( in12, in28 ); \
1599 0 : in29 = GF_ADD( in13, in29 ); \
1600 0 : in30 = GF_ADD( in14, in30 ); \
1601 0 : in31 = GF_ADD( in15, in31 ); \
1602 0 : scratch_12 = in28; \
1603 0 : scratch_13 = in29; \
1604 0 : scratch_14 = in30; \
1605 0 : scratch_15 = in31; \
1606 0 : FD_REEDSOL_GENERATE_IFFT( 8, 16, in16, in17, in18, in19, in20, in21, in22, in23 ); \
1607 0 : in28 = GF_ADD( in20, in28 ); \
1608 0 : in29 = GF_ADD( in21, in29 ); \
1609 0 : in30 = GF_ADD( in22, in30 ); \
1610 0 : in31 = GF_ADD( in23, in31 ); \
1611 0 : scratch_4 = in28; \
1612 0 : scratch_5 = in29; \
1613 0 : scratch_6 = in30; \
1614 0 : scratch_7 = in31; \
1615 0 : FD_REEDSOL_GENERATE_IFFT( 4, 24, in24, in25, in26, in27 ); \
1616 0 : in28 = GF_ADD( in24, in28 ); \
1617 0 : in29 = GF_ADD( in25, in29 ); \
1618 0 : in30 = GF_ADD( in26, in30 ); \
1619 0 : in31 = GF_ADD( in27, in31 ); \
1620 0 : FD_REEDSOL_GENERATE_FFT( 4, 28, in28, in29, in30, in31 ); \
1621 0 : in24 = GF_ADD( GF_MUL( scratch_4, 119 ), in24 ); \
1622 0 : in25 = GF_ADD( GF_MUL( scratch_5, 119 ), in25 ); \
1623 0 : in26 = GF_ADD( GF_MUL( scratch_6, 119 ), in26 ); \
1624 0 : in27 = GF_ADD( GF_MUL( scratch_7, 119 ), in27 ); \
1625 0 : { \
1626 0 : gf_t temp = GF_ADD( GF_MUL( in16, 10 ), GF_MUL( in24, 11 ) ); \
1627 0 : in24 = GF_ADD( in16, in24 ); \
1628 0 : in16 = temp; \
1629 0 : } \
1630 0 : { \
1631 0 : gf_t temp = GF_ADD( GF_MUL( in17, 10 ), GF_MUL( in25, 11 ) ); \
1632 0 : in25 = GF_ADD( in17, in25 ); \
1633 0 : in17 = temp; \
1634 0 : } \
1635 0 : { \
1636 0 : gf_t temp = GF_ADD( GF_MUL( in18, 10 ), GF_MUL( in26, 11 ) ); \
1637 0 : in26 = GF_ADD( in18, in26 ); \
1638 0 : in18 = temp; \
1639 0 : } \
1640 0 : { \
1641 0 : gf_t temp = GF_ADD( GF_MUL( in19, 10 ), GF_MUL( in27, 11 ) ); \
1642 0 : in27 = GF_ADD( in19, in27 ); \
1643 0 : in19 = temp; \
1644 0 : } \
1645 0 : in20 = GF_ADD( GF_MUL( scratch_12, 11 ), in20 ); \
1646 0 : in21 = GF_ADD( GF_MUL( scratch_13, 11 ), in21 ); \
1647 0 : in22 = GF_ADD( GF_MUL( scratch_14, 11 ), in22 ); \
1648 0 : in23 = GF_ADD( GF_MUL( scratch_15, 11 ), in23 ); \
1649 0 : in16 = GF_ADD( in00, in16 ); \
1650 0 : in17 = GF_ADD( in01, in17 ); \
1651 0 : in18 = GF_ADD( in02, in18 ); \
1652 0 : in19 = GF_ADD( in03, in19 ); \
1653 0 : in20 = GF_ADD( in04, in20 ); \
1654 0 : in21 = GF_ADD( in05, in21 ); \
1655 0 : in22 = GF_ADD( in06, in22 ); \
1656 0 : in23 = GF_ADD( in07, in23 ); \
1657 0 : in24 = GF_ADD( in08, in24 ); \
1658 0 : in25 = GF_ADD( in09, in25 ); \
1659 0 : in26 = GF_ADD( in10, in26 ); \
1660 0 : in27 = GF_ADD( in11, in27 ); \
1661 0 : } while( 0 )
1662 :
1663 : void fd_reedsol_ppt_32_29( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
1664 : #define FD_REEDSOL_PPT_IMPL_32_29( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17 , \
1665 : in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31) \
1666 0 : do { \
1667 0 : gf_t scratch_13, scratch_14, scratch_15, scratch_2, scratch_5, scratch_6, scratch_7; \
1668 0 : FD_REEDSOL_GENERATE_IFFT( 16, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15 ); \
1669 0 : in29 = GF_ADD( in13, in29 ); \
1670 0 : in30 = GF_ADD( in14, in30 ); \
1671 0 : in31 = GF_ADD( in15, in31 ); \
1672 0 : scratch_13 = in29; \
1673 0 : scratch_14 = in30; \
1674 0 : scratch_15 = in31; \
1675 0 : FD_REEDSOL_GENERATE_IFFT( 8, 16, in16, in17, in18, in19, in20, in21, in22, in23 ); \
1676 0 : in29 = GF_ADD( in21, in29 ); \
1677 0 : in30 = GF_ADD( in22, in30 ); \
1678 0 : in31 = GF_ADD( in23, in31 ); \
1679 0 : scratch_5 = in29; \
1680 0 : scratch_6 = in30; \
1681 0 : scratch_7 = in31; \
1682 0 : FD_REEDSOL_GENERATE_IFFT( 4, 24, in24, in25, in26, in27 ); \
1683 0 : in29 = GF_ADD( in25, in29 ); \
1684 0 : in30 = GF_ADD( in26, in30 ); \
1685 0 : in31 = GF_ADD( in27, in31 ); \
1686 0 : scratch_2 = in30; \
1687 0 : { \
1688 0 : gf_t temp = GF_ADD( in29, GF_MUL( in31, 98 ) ); \
1689 0 : in31 = GF_ADD( in29, GF_MUL( in31, 99 ) ); \
1690 0 : in29 = temp; \
1691 0 : } \
1692 0 : { \
1693 0 : gf_t temp = GF_ADD( in28, GF_MUL( in29, 28 ) ); \
1694 0 : in29 = GF_ADD( in28, in29 ); \
1695 0 : in28 = temp; \
1696 0 : } \
1697 0 : in30 = GF_ADD( in28, in30 ); \
1698 0 : { \
1699 0 : gf_t temp = GF_ADD( in30, GF_MUL( in31, 30 ) ); \
1700 0 : in31 = GF_ADD( in30, GF_MUL( in31, 31 ) ); \
1701 0 : in30 = temp; \
1702 0 : } \
1703 0 : in28 = GF_ADD( GF_MUL( scratch_2, 98 ), in28 ); \
1704 0 : { \
1705 0 : gf_t temp = GF_ADD( GF_MUL( in24, 118 ), GF_MUL( in28, 119 ) ); \
1706 0 : in28 = GF_ADD( in24, in28 ); \
1707 0 : in24 = temp; \
1708 0 : } \
1709 0 : in25 = GF_ADD( GF_MUL( scratch_5, 119 ), in25 ); \
1710 0 : in26 = GF_ADD( GF_MUL( scratch_6, 119 ), in26 ); \
1711 0 : in27 = GF_ADD( GF_MUL( scratch_7, 119 ), in27 ); \
1712 0 : { \
1713 0 : gf_t temp = GF_ADD( GF_MUL( in16, 10 ), GF_MUL( in24, 11 ) ); \
1714 0 : in24 = GF_ADD( in16, in24 ); \
1715 0 : in16 = temp; \
1716 0 : } \
1717 0 : { \
1718 0 : gf_t temp = GF_ADD( GF_MUL( in17, 10 ), GF_MUL( in25, 11 ) ); \
1719 0 : in25 = GF_ADD( in17, in25 ); \
1720 0 : in17 = temp; \
1721 0 : } \
1722 0 : { \
1723 0 : gf_t temp = GF_ADD( GF_MUL( in18, 10 ), GF_MUL( in26, 11 ) ); \
1724 0 : in26 = GF_ADD( in18, in26 ); \
1725 0 : in18 = temp; \
1726 0 : } \
1727 0 : { \
1728 0 : gf_t temp = GF_ADD( GF_MUL( in19, 10 ), GF_MUL( in27, 11 ) ); \
1729 0 : in27 = GF_ADD( in19, in27 ); \
1730 0 : in19 = temp; \
1731 0 : } \
1732 0 : { \
1733 0 : gf_t temp = GF_ADD( GF_MUL( in20, 10 ), GF_MUL( in28, 11 ) ); \
1734 0 : in28 = GF_ADD( in20, in28 ); \
1735 0 : in20 = temp; \
1736 0 : } \
1737 0 : in21 = GF_ADD( GF_MUL( scratch_13, 11 ), in21 ); \
1738 0 : in22 = GF_ADD( GF_MUL( scratch_14, 11 ), in22 ); \
1739 0 : in23 = GF_ADD( GF_MUL( scratch_15, 11 ), in23 ); \
1740 0 : in16 = GF_ADD( in00, in16 ); \
1741 0 : in17 = GF_ADD( in01, in17 ); \
1742 0 : in18 = GF_ADD( in02, in18 ); \
1743 0 : in19 = GF_ADD( in03, in19 ); \
1744 0 : in20 = GF_ADD( in04, in20 ); \
1745 0 : in21 = GF_ADD( in05, in21 ); \
1746 0 : in22 = GF_ADD( in06, in22 ); \
1747 0 : in23 = GF_ADD( in07, in23 ); \
1748 0 : in24 = GF_ADD( in08, in24 ); \
1749 0 : in25 = GF_ADD( in09, in25 ); \
1750 0 : in26 = GF_ADD( in10, in26 ); \
1751 0 : in27 = GF_ADD( in11, in27 ); \
1752 0 : in28 = GF_ADD( in12, in28 ); \
1753 0 : } while( 0 )
1754 :
1755 : void fd_reedsol_ppt_32_30( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
1756 : #define FD_REEDSOL_PPT_IMPL_32_30( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17 , \
1757 : in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31) \
1758 0 : do { \
1759 0 : gf_t scratch_14, scratch_15, scratch_2, scratch_3, scratch_6, scratch_7; \
1760 0 : FD_REEDSOL_GENERATE_IFFT( 16, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15 ); \
1761 0 : in30 = GF_ADD( in14, in30 ); \
1762 0 : in31 = GF_ADD( in15, in31 ); \
1763 0 : scratch_14 = in30; \
1764 0 : scratch_15 = in31; \
1765 0 : FD_REEDSOL_GENERATE_IFFT( 8, 16, in16, in17, in18, in19, in20, in21, in22, in23 ); \
1766 0 : in30 = GF_ADD( in22, in30 ); \
1767 0 : in31 = GF_ADD( in23, in31 ); \
1768 0 : scratch_6 = in30; \
1769 0 : scratch_7 = in31; \
1770 0 : FD_REEDSOL_GENERATE_IFFT( 4, 24, in24, in25, in26, in27 ); \
1771 0 : in30 = GF_ADD( in26, in30 ); \
1772 0 : in31 = GF_ADD( in27, in31 ); \
1773 0 : scratch_2 = in30; \
1774 0 : scratch_3 = in31; \
1775 0 : { \
1776 0 : gf_t temp = GF_ADD( GF_MUL( in28, 29 ), GF_MUL( in29, 28 ) ); \
1777 0 : in29 = GF_ADD( in28, in29 ); \
1778 0 : in28 = temp; \
1779 0 : } \
1780 0 : in30 = GF_ADD( in28, in30 ); \
1781 0 : in31 = GF_ADD( in29, in31 ); \
1782 0 : { \
1783 0 : gf_t temp = GF_ADD( in30, GF_MUL( in31, 30 ) ); \
1784 0 : in31 = GF_ADD( in30, GF_MUL( in31, 31 ) ); \
1785 0 : in30 = temp; \
1786 0 : } \
1787 0 : in28 = GF_ADD( GF_MUL( scratch_2, 98 ), in28 ); \
1788 0 : in29 = GF_ADD( GF_MUL( scratch_3, 98 ), in29 ); \
1789 0 : { \
1790 0 : gf_t temp = GF_ADD( GF_MUL( in24, 118 ), GF_MUL( in28, 119 ) ); \
1791 0 : in28 = GF_ADD( in24, in28 ); \
1792 0 : in24 = temp; \
1793 0 : } \
1794 0 : { \
1795 0 : gf_t temp = GF_ADD( GF_MUL( in25, 118 ), GF_MUL( in29, 119 ) ); \
1796 0 : in29 = GF_ADD( in25, in29 ); \
1797 0 : in25 = temp; \
1798 0 : } \
1799 0 : in26 = GF_ADD( GF_MUL( scratch_6, 119 ), in26 ); \
1800 0 : in27 = GF_ADD( GF_MUL( scratch_7, 119 ), in27 ); \
1801 0 : { \
1802 0 : gf_t temp = GF_ADD( GF_MUL( in16, 10 ), GF_MUL( in24, 11 ) ); \
1803 0 : in24 = GF_ADD( in16, in24 ); \
1804 0 : in16 = temp; \
1805 0 : } \
1806 0 : { \
1807 0 : gf_t temp = GF_ADD( GF_MUL( in17, 10 ), GF_MUL( in25, 11 ) ); \
1808 0 : in25 = GF_ADD( in17, in25 ); \
1809 0 : in17 = temp; \
1810 0 : } \
1811 0 : { \
1812 0 : gf_t temp = GF_ADD( GF_MUL( in18, 10 ), GF_MUL( in26, 11 ) ); \
1813 0 : in26 = GF_ADD( in18, in26 ); \
1814 0 : in18 = temp; \
1815 0 : } \
1816 0 : { \
1817 0 : gf_t temp = GF_ADD( GF_MUL( in19, 10 ), GF_MUL( in27, 11 ) ); \
1818 0 : in27 = GF_ADD( in19, in27 ); \
1819 0 : in19 = temp; \
1820 0 : } \
1821 0 : { \
1822 0 : gf_t temp = GF_ADD( GF_MUL( in20, 10 ), GF_MUL( in28, 11 ) ); \
1823 0 : in28 = GF_ADD( in20, in28 ); \
1824 0 : in20 = temp; \
1825 0 : } \
1826 0 : { \
1827 0 : gf_t temp = GF_ADD( GF_MUL( in21, 10 ), GF_MUL( in29, 11 ) ); \
1828 0 : in29 = GF_ADD( in21, in29 ); \
1829 0 : in21 = temp; \
1830 0 : } \
1831 0 : in22 = GF_ADD( GF_MUL( scratch_14, 11 ), in22 ); \
1832 0 : in23 = GF_ADD( GF_MUL( scratch_15, 11 ), in23 ); \
1833 0 : in16 = GF_ADD( in00, in16 ); \
1834 0 : in17 = GF_ADD( in01, in17 ); \
1835 0 : in18 = GF_ADD( in02, in18 ); \
1836 0 : in19 = GF_ADD( in03, in19 ); \
1837 0 : in20 = GF_ADD( in04, in20 ); \
1838 0 : in21 = GF_ADD( in05, in21 ); \
1839 0 : in22 = GF_ADD( in06, in22 ); \
1840 0 : in23 = GF_ADD( in07, in23 ); \
1841 0 : in24 = GF_ADD( in08, in24 ); \
1842 0 : in25 = GF_ADD( in09, in25 ); \
1843 0 : in26 = GF_ADD( in10, in26 ); \
1844 0 : in27 = GF_ADD( in11, in27 ); \
1845 0 : in28 = GF_ADD( in12, in28 ); \
1846 0 : in29 = GF_ADD( in13, in29 ); \
1847 0 : } while( 0 )
1848 :
1849 : void fd_reedsol_ppt_32_31( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
1850 : #define FD_REEDSOL_PPT_IMPL_32_31( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17 , \
1851 : in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31) \
1852 0 : do { \
1853 0 : gf_t scratch_15, scratch_3, scratch_7; \
1854 0 : FD_REEDSOL_GENERATE_IFFT( 16, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15 ); \
1855 0 : in31 = GF_ADD( in15, in31 ); \
1856 0 : scratch_15 = in31; \
1857 0 : FD_REEDSOL_GENERATE_IFFT( 8, 16, in16, in17, in18, in19, in20, in21, in22, in23 ); \
1858 0 : in31 = GF_ADD( in23, in31 ); \
1859 0 : scratch_7 = in31; \
1860 0 : FD_REEDSOL_GENERATE_IFFT( 4, 24, in24, in25, in26, in27 ); \
1861 0 : in31 = GF_ADD( in27, in31 ); \
1862 0 : scratch_3 = in31; \
1863 0 : { \
1864 0 : gf_t temp = GF_ADD( GF_MUL( in28, 29 ), GF_MUL( in29, 28 ) ); \
1865 0 : in29 = GF_ADD( in28, in29 ); \
1866 0 : in28 = temp; \
1867 0 : } \
1868 0 : in31 = GF_ADD( in29, in31 ); \
1869 0 : { \
1870 0 : gf_t temp = GF_ADD( in30, GF_MUL( in31, 30 ) ); \
1871 0 : in31 = GF_ADD( in30, in31 ); \
1872 0 : in30 = temp; \
1873 0 : } \
1874 0 : { \
1875 0 : gf_t temp = GF_ADD( GF_MUL( in28, 99 ), GF_MUL( in30, 98 ) ); \
1876 0 : in30 = GF_ADD( in28, in30 ); \
1877 0 : in28 = temp; \
1878 0 : } \
1879 0 : in29 = GF_ADD( GF_MUL( scratch_3, 98 ), in29 ); \
1880 0 : { \
1881 0 : gf_t temp = GF_ADD( GF_MUL( in24, 118 ), GF_MUL( in28, 119 ) ); \
1882 0 : in28 = GF_ADD( in24, in28 ); \
1883 0 : in24 = temp; \
1884 0 : } \
1885 0 : { \
1886 0 : gf_t temp = GF_ADD( GF_MUL( in25, 118 ), GF_MUL( in29, 119 ) ); \
1887 0 : in29 = GF_ADD( in25, in29 ); \
1888 0 : in25 = temp; \
1889 0 : } \
1890 0 : { \
1891 0 : gf_t temp = GF_ADD( GF_MUL( in26, 118 ), GF_MUL( in30, 119 ) ); \
1892 0 : in30 = GF_ADD( in26, in30 ); \
1893 0 : in26 = temp; \
1894 0 : } \
1895 0 : in27 = GF_ADD( GF_MUL( scratch_7, 119 ), in27 ); \
1896 0 : { \
1897 0 : gf_t temp = GF_ADD( GF_MUL( in16, 10 ), GF_MUL( in24, 11 ) ); \
1898 0 : in24 = GF_ADD( in16, in24 ); \
1899 0 : in16 = temp; \
1900 0 : } \
1901 0 : { \
1902 0 : gf_t temp = GF_ADD( GF_MUL( in17, 10 ), GF_MUL( in25, 11 ) ); \
1903 0 : in25 = GF_ADD( in17, in25 ); \
1904 0 : in17 = temp; \
1905 0 : } \
1906 0 : { \
1907 0 : gf_t temp = GF_ADD( GF_MUL( in18, 10 ), GF_MUL( in26, 11 ) ); \
1908 0 : in26 = GF_ADD( in18, in26 ); \
1909 0 : in18 = temp; \
1910 0 : } \
1911 0 : { \
1912 0 : gf_t temp = GF_ADD( GF_MUL( in19, 10 ), GF_MUL( in27, 11 ) ); \
1913 0 : in27 = GF_ADD( in19, in27 ); \
1914 0 : in19 = temp; \
1915 0 : } \
1916 0 : { \
1917 0 : gf_t temp = GF_ADD( GF_MUL( in20, 10 ), GF_MUL( in28, 11 ) ); \
1918 0 : in28 = GF_ADD( in20, in28 ); \
1919 0 : in20 = temp; \
1920 0 : } \
1921 0 : { \
1922 0 : gf_t temp = GF_ADD( GF_MUL( in21, 10 ), GF_MUL( in29, 11 ) ); \
1923 0 : in29 = GF_ADD( in21, in29 ); \
1924 0 : in21 = temp; \
1925 0 : } \
1926 0 : { \
1927 0 : gf_t temp = GF_ADD( GF_MUL( in22, 10 ), GF_MUL( in30, 11 ) ); \
1928 0 : in30 = GF_ADD( in22, in30 ); \
1929 0 : in22 = temp; \
1930 0 : } \
1931 0 : in23 = GF_ADD( GF_MUL( scratch_15, 11 ), in23 ); \
1932 0 : in16 = GF_ADD( in00, in16 ); \
1933 0 : in17 = GF_ADD( in01, in17 ); \
1934 0 : in18 = GF_ADD( in02, in18 ); \
1935 0 : in19 = GF_ADD( in03, in19 ); \
1936 0 : in20 = GF_ADD( in04, in20 ); \
1937 0 : in21 = GF_ADD( in05, in21 ); \
1938 0 : in22 = GF_ADD( in06, in22 ); \
1939 0 : in23 = GF_ADD( in07, in23 ); \
1940 0 : in24 = GF_ADD( in08, in24 ); \
1941 0 : in25 = GF_ADD( in09, in25 ); \
1942 0 : in26 = GF_ADD( in10, in26 ); \
1943 0 : in27 = GF_ADD( in11, in27 ); \
1944 0 : in28 = GF_ADD( in12, in28 ); \
1945 0 : in29 = GF_ADD( in13, in29 ); \
1946 0 : in30 = GF_ADD( in14, in30 ); \
1947 0 : } while( 0 )
1948 :
1949 : void fd_reedsol_ppt_64_33( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
1950 : #define FD_REEDSOL_PPT_IMPL_64_33( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
1951 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
1952 0 : do { \
1953 0 : gf_t scratch_16, scratch_2, scratch_4, scratch_8; \
1954 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
1955 0 : in33 = GF_ADD( in01, in33 ); \
1956 0 : in34 = GF_ADD( in02, in34 ); \
1957 0 : in35 = GF_ADD( in03, in35 ); \
1958 0 : in36 = GF_ADD( in04, in36 ); \
1959 0 : in37 = GF_ADD( in05, in37 ); \
1960 0 : in38 = GF_ADD( in06, in38 ); \
1961 0 : in39 = GF_ADD( in07, in39 ); \
1962 0 : in40 = GF_ADD( in08, in40 ); \
1963 0 : in41 = GF_ADD( in09, in41 ); \
1964 0 : in42 = GF_ADD( in10, in42 ); \
1965 0 : in43 = GF_ADD( in11, in43 ); \
1966 0 : in44 = GF_ADD( in12, in44 ); \
1967 0 : in45 = GF_ADD( in13, in45 ); \
1968 0 : in46 = GF_ADD( in14, in46 ); \
1969 0 : in47 = GF_ADD( in15, in47 ); \
1970 0 : in48 = GF_ADD( in16, in48 ); \
1971 0 : in49 = GF_ADD( in17, in49 ); \
1972 0 : in50 = GF_ADD( in18, in50 ); \
1973 0 : in51 = GF_ADD( in19, in51 ); \
1974 0 : in52 = GF_ADD( in20, in52 ); \
1975 0 : in53 = GF_ADD( in21, in53 ); \
1976 0 : in54 = GF_ADD( in22, in54 ); \
1977 0 : in55 = GF_ADD( in23, in55 ); \
1978 0 : in56 = GF_ADD( in24, in56 ); \
1979 0 : in57 = GF_ADD( in25, in57 ); \
1980 0 : in58 = GF_ADD( in26, in58 ); \
1981 0 : in59 = GF_ADD( in27, in59 ); \
1982 0 : in60 = GF_ADD( in28, in60 ); \
1983 0 : in61 = GF_ADD( in29, in61 ); \
1984 0 : in62 = GF_ADD( in30, in62 ); \
1985 0 : in63 = GF_ADD( in31, in63 ); \
1986 0 : scratch_16 = in48; \
1987 0 : { \
1988 0 : gf_t temp = GF_ADD( in33, GF_MUL( in49, 71 ) ); \
1989 0 : in49 = GF_ADD( in33, GF_MUL( in49, 70 ) ); \
1990 0 : in33 = temp; \
1991 0 : } \
1992 0 : { \
1993 0 : gf_t temp = GF_ADD( in34, GF_MUL( in50, 71 ) ); \
1994 0 : in50 = GF_ADD( in34, GF_MUL( in50, 70 ) ); \
1995 0 : in34 = temp; \
1996 0 : } \
1997 0 : { \
1998 0 : gf_t temp = GF_ADD( in35, GF_MUL( in51, 71 ) ); \
1999 0 : in51 = GF_ADD( in35, GF_MUL( in51, 70 ) ); \
2000 0 : in35 = temp; \
2001 0 : } \
2002 0 : { \
2003 0 : gf_t temp = GF_ADD( in36, GF_MUL( in52, 71 ) ); \
2004 0 : in52 = GF_ADD( in36, GF_MUL( in52, 70 ) ); \
2005 0 : in36 = temp; \
2006 0 : } \
2007 0 : { \
2008 0 : gf_t temp = GF_ADD( in37, GF_MUL( in53, 71 ) ); \
2009 0 : in53 = GF_ADD( in37, GF_MUL( in53, 70 ) ); \
2010 0 : in37 = temp; \
2011 0 : } \
2012 0 : { \
2013 0 : gf_t temp = GF_ADD( in38, GF_MUL( in54, 71 ) ); \
2014 0 : in54 = GF_ADD( in38, GF_MUL( in54, 70 ) ); \
2015 0 : in38 = temp; \
2016 0 : } \
2017 0 : { \
2018 0 : gf_t temp = GF_ADD( in39, GF_MUL( in55, 71 ) ); \
2019 0 : in55 = GF_ADD( in39, GF_MUL( in55, 70 ) ); \
2020 0 : in39 = temp; \
2021 0 : } \
2022 0 : { \
2023 0 : gf_t temp = GF_ADD( in40, GF_MUL( in56, 71 ) ); \
2024 0 : in56 = GF_ADD( in40, GF_MUL( in56, 70 ) ); \
2025 0 : in40 = temp; \
2026 0 : } \
2027 0 : { \
2028 0 : gf_t temp = GF_ADD( in41, GF_MUL( in57, 71 ) ); \
2029 0 : in57 = GF_ADD( in41, GF_MUL( in57, 70 ) ); \
2030 0 : in41 = temp; \
2031 0 : } \
2032 0 : { \
2033 0 : gf_t temp = GF_ADD( in42, GF_MUL( in58, 71 ) ); \
2034 0 : in58 = GF_ADD( in42, GF_MUL( in58, 70 ) ); \
2035 0 : in42 = temp; \
2036 0 : } \
2037 0 : { \
2038 0 : gf_t temp = GF_ADD( in43, GF_MUL( in59, 71 ) ); \
2039 0 : in59 = GF_ADD( in43, GF_MUL( in59, 70 ) ); \
2040 0 : in43 = temp; \
2041 0 : } \
2042 0 : { \
2043 0 : gf_t temp = GF_ADD( in44, GF_MUL( in60, 71 ) ); \
2044 0 : in60 = GF_ADD( in44, GF_MUL( in60, 70 ) ); \
2045 0 : in44 = temp; \
2046 0 : } \
2047 0 : { \
2048 0 : gf_t temp = GF_ADD( in45, GF_MUL( in61, 71 ) ); \
2049 0 : in61 = GF_ADD( in45, GF_MUL( in61, 70 ) ); \
2050 0 : in45 = temp; \
2051 0 : } \
2052 0 : { \
2053 0 : gf_t temp = GF_ADD( in46, GF_MUL( in62, 71 ) ); \
2054 0 : in62 = GF_ADD( in46, GF_MUL( in62, 70 ) ); \
2055 0 : in46 = temp; \
2056 0 : } \
2057 0 : { \
2058 0 : gf_t temp = GF_ADD( in47, GF_MUL( in63, 71 ) ); \
2059 0 : in63 = GF_ADD( in47, GF_MUL( in63, 70 ) ); \
2060 0 : in47 = temp; \
2061 0 : } \
2062 0 : scratch_8 = in40; \
2063 0 : { \
2064 0 : gf_t temp = GF_ADD( in33, GF_MUL( in41, 174 ) ); \
2065 0 : in41 = GF_ADD( in33, GF_MUL( in41, 175 ) ); \
2066 0 : in33 = temp; \
2067 0 : } \
2068 0 : { \
2069 0 : gf_t temp = GF_ADD( in34, GF_MUL( in42, 174 ) ); \
2070 0 : in42 = GF_ADD( in34, GF_MUL( in42, 175 ) ); \
2071 0 : in34 = temp; \
2072 0 : } \
2073 0 : { \
2074 0 : gf_t temp = GF_ADD( in35, GF_MUL( in43, 174 ) ); \
2075 0 : in43 = GF_ADD( in35, GF_MUL( in43, 175 ) ); \
2076 0 : in35 = temp; \
2077 0 : } \
2078 0 : { \
2079 0 : gf_t temp = GF_ADD( in36, GF_MUL( in44, 174 ) ); \
2080 0 : in44 = GF_ADD( in36, GF_MUL( in44, 175 ) ); \
2081 0 : in36 = temp; \
2082 0 : } \
2083 0 : { \
2084 0 : gf_t temp = GF_ADD( in37, GF_MUL( in45, 174 ) ); \
2085 0 : in45 = GF_ADD( in37, GF_MUL( in45, 175 ) ); \
2086 0 : in37 = temp; \
2087 0 : } \
2088 0 : { \
2089 0 : gf_t temp = GF_ADD( in38, GF_MUL( in46, 174 ) ); \
2090 0 : in46 = GF_ADD( in38, GF_MUL( in46, 175 ) ); \
2091 0 : in38 = temp; \
2092 0 : } \
2093 0 : { \
2094 0 : gf_t temp = GF_ADD( in39, GF_MUL( in47, 174 ) ); \
2095 0 : in47 = GF_ADD( in39, GF_MUL( in47, 175 ) ); \
2096 0 : in39 = temp; \
2097 0 : } \
2098 0 : scratch_4 = in36; \
2099 0 : { \
2100 0 : gf_t temp = GF_ADD( in33, GF_MUL( in37, 38 ) ); \
2101 0 : in37 = GF_ADD( in33, GF_MUL( in37, 39 ) ); \
2102 0 : in33 = temp; \
2103 0 : } \
2104 0 : { \
2105 0 : gf_t temp = GF_ADD( in34, GF_MUL( in38, 38 ) ); \
2106 0 : in38 = GF_ADD( in34, GF_MUL( in38, 39 ) ); \
2107 0 : in34 = temp; \
2108 0 : } \
2109 0 : { \
2110 0 : gf_t temp = GF_ADD( in35, GF_MUL( in39, 38 ) ); \
2111 0 : in39 = GF_ADD( in35, GF_MUL( in39, 39 ) ); \
2112 0 : in35 = temp; \
2113 0 : } \
2114 0 : scratch_2 = in34; \
2115 0 : { \
2116 0 : gf_t temp = GF_ADD( in33, GF_MUL( in35, 237 ) ); \
2117 0 : in35 = GF_ADD( in33, GF_MUL( in35, 236 ) ); \
2118 0 : in33 = temp; \
2119 0 : } \
2120 0 : { \
2121 0 : gf_t temp = GF_ADD( in32, GF_MUL( in33, 32 ) ); \
2122 0 : in33 = GF_ADD( in32, in33 ); \
2123 0 : in32 = temp; \
2124 0 : } \
2125 0 : in34 = GF_ADD( in32, in34 ); \
2126 0 : { \
2127 0 : gf_t temp = GF_ADD( in34, GF_MUL( in35, 34 ) ); \
2128 0 : in35 = GF_ADD( in34, GF_MUL( in35, 35 ) ); \
2129 0 : in34 = temp; \
2130 0 : } \
2131 0 : in32 = GF_ADD( GF_MUL( scratch_2, 237 ), in32 ); \
2132 0 : in36 = GF_ADD( in32, in36 ); \
2133 0 : FD_REEDSOL_GENERATE_FFT( 4, 36, in36, in37, in38, in39 ); \
2134 0 : in32 = GF_ADD( GF_MUL( scratch_4, 38 ), in32 ); \
2135 0 : in40 = GF_ADD( in32, in40 ); \
2136 0 : FD_REEDSOL_GENERATE_FFT( 8, 40, in40, in41, in42, in43, in44, in45, in46, in47 ); \
2137 0 : in32 = GF_ADD( GF_MUL( scratch_8, 174 ), in32 ); \
2138 0 : in48 = GF_ADD( in32, in48 ); \
2139 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
2140 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
2141 0 : in32 = GF_ADD( in00, in32 ); \
2142 0 : } while( 0 )
2143 :
2144 : void fd_reedsol_ppt_64_34( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
2145 : #define FD_REEDSOL_PPT_IMPL_64_34( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
2146 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
2147 0 : do { \
2148 0 : gf_t scratch_16, scratch_17, scratch_2, scratch_3, scratch_4, scratch_5, scratch_8, scratch_9; \
2149 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
2150 0 : in34 = GF_ADD( in02, in34 ); \
2151 0 : in35 = GF_ADD( in03, in35 ); \
2152 0 : in36 = GF_ADD( in04, in36 ); \
2153 0 : in37 = GF_ADD( in05, in37 ); \
2154 0 : in38 = GF_ADD( in06, in38 ); \
2155 0 : in39 = GF_ADD( in07, in39 ); \
2156 0 : in40 = GF_ADD( in08, in40 ); \
2157 0 : in41 = GF_ADD( in09, in41 ); \
2158 0 : in42 = GF_ADD( in10, in42 ); \
2159 0 : in43 = GF_ADD( in11, in43 ); \
2160 0 : in44 = GF_ADD( in12, in44 ); \
2161 0 : in45 = GF_ADD( in13, in45 ); \
2162 0 : in46 = GF_ADD( in14, in46 ); \
2163 0 : in47 = GF_ADD( in15, in47 ); \
2164 0 : in48 = GF_ADD( in16, in48 ); \
2165 0 : in49 = GF_ADD( in17, in49 ); \
2166 0 : in50 = GF_ADD( in18, in50 ); \
2167 0 : in51 = GF_ADD( in19, in51 ); \
2168 0 : in52 = GF_ADD( in20, in52 ); \
2169 0 : in53 = GF_ADD( in21, in53 ); \
2170 0 : in54 = GF_ADD( in22, in54 ); \
2171 0 : in55 = GF_ADD( in23, in55 ); \
2172 0 : in56 = GF_ADD( in24, in56 ); \
2173 0 : in57 = GF_ADD( in25, in57 ); \
2174 0 : in58 = GF_ADD( in26, in58 ); \
2175 0 : in59 = GF_ADD( in27, in59 ); \
2176 0 : in60 = GF_ADD( in28, in60 ); \
2177 0 : in61 = GF_ADD( in29, in61 ); \
2178 0 : in62 = GF_ADD( in30, in62 ); \
2179 0 : in63 = GF_ADD( in31, in63 ); \
2180 0 : scratch_16 = in48; \
2181 0 : scratch_17 = in49; \
2182 0 : { \
2183 0 : gf_t temp = GF_ADD( in34, GF_MUL( in50, 71 ) ); \
2184 0 : in50 = GF_ADD( in34, GF_MUL( in50, 70 ) ); \
2185 0 : in34 = temp; \
2186 0 : } \
2187 0 : { \
2188 0 : gf_t temp = GF_ADD( in35, GF_MUL( in51, 71 ) ); \
2189 0 : in51 = GF_ADD( in35, GF_MUL( in51, 70 ) ); \
2190 0 : in35 = temp; \
2191 0 : } \
2192 0 : { \
2193 0 : gf_t temp = GF_ADD( in36, GF_MUL( in52, 71 ) ); \
2194 0 : in52 = GF_ADD( in36, GF_MUL( in52, 70 ) ); \
2195 0 : in36 = temp; \
2196 0 : } \
2197 0 : { \
2198 0 : gf_t temp = GF_ADD( in37, GF_MUL( in53, 71 ) ); \
2199 0 : in53 = GF_ADD( in37, GF_MUL( in53, 70 ) ); \
2200 0 : in37 = temp; \
2201 0 : } \
2202 0 : { \
2203 0 : gf_t temp = GF_ADD( in38, GF_MUL( in54, 71 ) ); \
2204 0 : in54 = GF_ADD( in38, GF_MUL( in54, 70 ) ); \
2205 0 : in38 = temp; \
2206 0 : } \
2207 0 : { \
2208 0 : gf_t temp = GF_ADD( in39, GF_MUL( in55, 71 ) ); \
2209 0 : in55 = GF_ADD( in39, GF_MUL( in55, 70 ) ); \
2210 0 : in39 = temp; \
2211 0 : } \
2212 0 : { \
2213 0 : gf_t temp = GF_ADD( in40, GF_MUL( in56, 71 ) ); \
2214 0 : in56 = GF_ADD( in40, GF_MUL( in56, 70 ) ); \
2215 0 : in40 = temp; \
2216 0 : } \
2217 0 : { \
2218 0 : gf_t temp = GF_ADD( in41, GF_MUL( in57, 71 ) ); \
2219 0 : in57 = GF_ADD( in41, GF_MUL( in57, 70 ) ); \
2220 0 : in41 = temp; \
2221 0 : } \
2222 0 : { \
2223 0 : gf_t temp = GF_ADD( in42, GF_MUL( in58, 71 ) ); \
2224 0 : in58 = GF_ADD( in42, GF_MUL( in58, 70 ) ); \
2225 0 : in42 = temp; \
2226 0 : } \
2227 0 : { \
2228 0 : gf_t temp = GF_ADD( in43, GF_MUL( in59, 71 ) ); \
2229 0 : in59 = GF_ADD( in43, GF_MUL( in59, 70 ) ); \
2230 0 : in43 = temp; \
2231 0 : } \
2232 0 : { \
2233 0 : gf_t temp = GF_ADD( in44, GF_MUL( in60, 71 ) ); \
2234 0 : in60 = GF_ADD( in44, GF_MUL( in60, 70 ) ); \
2235 0 : in44 = temp; \
2236 0 : } \
2237 0 : { \
2238 0 : gf_t temp = GF_ADD( in45, GF_MUL( in61, 71 ) ); \
2239 0 : in61 = GF_ADD( in45, GF_MUL( in61, 70 ) ); \
2240 0 : in45 = temp; \
2241 0 : } \
2242 0 : { \
2243 0 : gf_t temp = GF_ADD( in46, GF_MUL( in62, 71 ) ); \
2244 0 : in62 = GF_ADD( in46, GF_MUL( in62, 70 ) ); \
2245 0 : in46 = temp; \
2246 0 : } \
2247 0 : { \
2248 0 : gf_t temp = GF_ADD( in47, GF_MUL( in63, 71 ) ); \
2249 0 : in63 = GF_ADD( in47, GF_MUL( in63, 70 ) ); \
2250 0 : in47 = temp; \
2251 0 : } \
2252 0 : scratch_8 = in40; \
2253 0 : scratch_9 = in41; \
2254 0 : { \
2255 0 : gf_t temp = GF_ADD( in34, GF_MUL( in42, 174 ) ); \
2256 0 : in42 = GF_ADD( in34, GF_MUL( in42, 175 ) ); \
2257 0 : in34 = temp; \
2258 0 : } \
2259 0 : { \
2260 0 : gf_t temp = GF_ADD( in35, GF_MUL( in43, 174 ) ); \
2261 0 : in43 = GF_ADD( in35, GF_MUL( in43, 175 ) ); \
2262 0 : in35 = temp; \
2263 0 : } \
2264 0 : { \
2265 0 : gf_t temp = GF_ADD( in36, GF_MUL( in44, 174 ) ); \
2266 0 : in44 = GF_ADD( in36, GF_MUL( in44, 175 ) ); \
2267 0 : in36 = temp; \
2268 0 : } \
2269 0 : { \
2270 0 : gf_t temp = GF_ADD( in37, GF_MUL( in45, 174 ) ); \
2271 0 : in45 = GF_ADD( in37, GF_MUL( in45, 175 ) ); \
2272 0 : in37 = temp; \
2273 0 : } \
2274 0 : { \
2275 0 : gf_t temp = GF_ADD( in38, GF_MUL( in46, 174 ) ); \
2276 0 : in46 = GF_ADD( in38, GF_MUL( in46, 175 ) ); \
2277 0 : in38 = temp; \
2278 0 : } \
2279 0 : { \
2280 0 : gf_t temp = GF_ADD( in39, GF_MUL( in47, 174 ) ); \
2281 0 : in47 = GF_ADD( in39, GF_MUL( in47, 175 ) ); \
2282 0 : in39 = temp; \
2283 0 : } \
2284 0 : scratch_4 = in36; \
2285 0 : scratch_5 = in37; \
2286 0 : { \
2287 0 : gf_t temp = GF_ADD( in34, GF_MUL( in38, 38 ) ); \
2288 0 : in38 = GF_ADD( in34, GF_MUL( in38, 39 ) ); \
2289 0 : in34 = temp; \
2290 0 : } \
2291 0 : { \
2292 0 : gf_t temp = GF_ADD( in35, GF_MUL( in39, 38 ) ); \
2293 0 : in39 = GF_ADD( in35, GF_MUL( in39, 39 ) ); \
2294 0 : in35 = temp; \
2295 0 : } \
2296 0 : scratch_2 = in34; \
2297 0 : scratch_3 = in35; \
2298 0 : { \
2299 0 : gf_t temp = GF_ADD( GF_MUL( in32, 33 ), GF_MUL( in33, 32 ) ); \
2300 0 : in33 = GF_ADD( in32, in33 ); \
2301 0 : in32 = temp; \
2302 0 : } \
2303 0 : in34 = GF_ADD( in32, in34 ); \
2304 0 : in35 = GF_ADD( in33, in35 ); \
2305 0 : { \
2306 0 : gf_t temp = GF_ADD( in34, GF_MUL( in35, 34 ) ); \
2307 0 : in35 = GF_ADD( in34, GF_MUL( in35, 35 ) ); \
2308 0 : in34 = temp; \
2309 0 : } \
2310 0 : in32 = GF_ADD( GF_MUL( scratch_2, 237 ), in32 ); \
2311 0 : in33 = GF_ADD( GF_MUL( scratch_3, 237 ), in33 ); \
2312 0 : in36 = GF_ADD( in32, in36 ); \
2313 0 : in37 = GF_ADD( in33, in37 ); \
2314 0 : FD_REEDSOL_GENERATE_FFT( 4, 36, in36, in37, in38, in39 ); \
2315 0 : in32 = GF_ADD( GF_MUL( scratch_4, 38 ), in32 ); \
2316 0 : in33 = GF_ADD( GF_MUL( scratch_5, 38 ), in33 ); \
2317 0 : in40 = GF_ADD( in32, in40 ); \
2318 0 : in41 = GF_ADD( in33, in41 ); \
2319 0 : FD_REEDSOL_GENERATE_FFT( 8, 40, in40, in41, in42, in43, in44, in45, in46, in47 ); \
2320 0 : in32 = GF_ADD( GF_MUL( scratch_8, 174 ), in32 ); \
2321 0 : in33 = GF_ADD( GF_MUL( scratch_9, 174 ), in33 ); \
2322 0 : in48 = GF_ADD( in32, in48 ); \
2323 0 : in49 = GF_ADD( in33, in49 ); \
2324 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
2325 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
2326 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
2327 0 : in32 = GF_ADD( in00, in32 ); \
2328 0 : in33 = GF_ADD( in01, in33 ); \
2329 0 : } while( 0 )
2330 :
2331 : void fd_reedsol_ppt_64_35( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
2332 : #define FD_REEDSOL_PPT_IMPL_64_35( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
2333 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
2334 0 : do { \
2335 0 : gf_t scratch_10, scratch_16, scratch_17, scratch_18, scratch_3, scratch_4, scratch_5, scratch_6, scratch_8, scratch_9; \
2336 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
2337 0 : in35 = GF_ADD( in03, in35 ); \
2338 0 : in36 = GF_ADD( in04, in36 ); \
2339 0 : in37 = GF_ADD( in05, in37 ); \
2340 0 : in38 = GF_ADD( in06, in38 ); \
2341 0 : in39 = GF_ADD( in07, in39 ); \
2342 0 : in40 = GF_ADD( in08, in40 ); \
2343 0 : in41 = GF_ADD( in09, in41 ); \
2344 0 : in42 = GF_ADD( in10, in42 ); \
2345 0 : in43 = GF_ADD( in11, in43 ); \
2346 0 : in44 = GF_ADD( in12, in44 ); \
2347 0 : in45 = GF_ADD( in13, in45 ); \
2348 0 : in46 = GF_ADD( in14, in46 ); \
2349 0 : in47 = GF_ADD( in15, in47 ); \
2350 0 : in48 = GF_ADD( in16, in48 ); \
2351 0 : in49 = GF_ADD( in17, in49 ); \
2352 0 : in50 = GF_ADD( in18, in50 ); \
2353 0 : in51 = GF_ADD( in19, in51 ); \
2354 0 : in52 = GF_ADD( in20, in52 ); \
2355 0 : in53 = GF_ADD( in21, in53 ); \
2356 0 : in54 = GF_ADD( in22, in54 ); \
2357 0 : in55 = GF_ADD( in23, in55 ); \
2358 0 : in56 = GF_ADD( in24, in56 ); \
2359 0 : in57 = GF_ADD( in25, in57 ); \
2360 0 : in58 = GF_ADD( in26, in58 ); \
2361 0 : in59 = GF_ADD( in27, in59 ); \
2362 0 : in60 = GF_ADD( in28, in60 ); \
2363 0 : in61 = GF_ADD( in29, in61 ); \
2364 0 : in62 = GF_ADD( in30, in62 ); \
2365 0 : in63 = GF_ADD( in31, in63 ); \
2366 0 : scratch_16 = in48; \
2367 0 : scratch_17 = in49; \
2368 0 : scratch_18 = in50; \
2369 0 : { \
2370 0 : gf_t temp = GF_ADD( in35, GF_MUL( in51, 71 ) ); \
2371 0 : in51 = GF_ADD( in35, GF_MUL( in51, 70 ) ); \
2372 0 : in35 = temp; \
2373 0 : } \
2374 0 : { \
2375 0 : gf_t temp = GF_ADD( in36, GF_MUL( in52, 71 ) ); \
2376 0 : in52 = GF_ADD( in36, GF_MUL( in52, 70 ) ); \
2377 0 : in36 = temp; \
2378 0 : } \
2379 0 : { \
2380 0 : gf_t temp = GF_ADD( in37, GF_MUL( in53, 71 ) ); \
2381 0 : in53 = GF_ADD( in37, GF_MUL( in53, 70 ) ); \
2382 0 : in37 = temp; \
2383 0 : } \
2384 0 : { \
2385 0 : gf_t temp = GF_ADD( in38, GF_MUL( in54, 71 ) ); \
2386 0 : in54 = GF_ADD( in38, GF_MUL( in54, 70 ) ); \
2387 0 : in38 = temp; \
2388 0 : } \
2389 0 : { \
2390 0 : gf_t temp = GF_ADD( in39, GF_MUL( in55, 71 ) ); \
2391 0 : in55 = GF_ADD( in39, GF_MUL( in55, 70 ) ); \
2392 0 : in39 = temp; \
2393 0 : } \
2394 0 : { \
2395 0 : gf_t temp = GF_ADD( in40, GF_MUL( in56, 71 ) ); \
2396 0 : in56 = GF_ADD( in40, GF_MUL( in56, 70 ) ); \
2397 0 : in40 = temp; \
2398 0 : } \
2399 0 : { \
2400 0 : gf_t temp = GF_ADD( in41, GF_MUL( in57, 71 ) ); \
2401 0 : in57 = GF_ADD( in41, GF_MUL( in57, 70 ) ); \
2402 0 : in41 = temp; \
2403 0 : } \
2404 0 : { \
2405 0 : gf_t temp = GF_ADD( in42, GF_MUL( in58, 71 ) ); \
2406 0 : in58 = GF_ADD( in42, GF_MUL( in58, 70 ) ); \
2407 0 : in42 = temp; \
2408 0 : } \
2409 0 : { \
2410 0 : gf_t temp = GF_ADD( in43, GF_MUL( in59, 71 ) ); \
2411 0 : in59 = GF_ADD( in43, GF_MUL( in59, 70 ) ); \
2412 0 : in43 = temp; \
2413 0 : } \
2414 0 : { \
2415 0 : gf_t temp = GF_ADD( in44, GF_MUL( in60, 71 ) ); \
2416 0 : in60 = GF_ADD( in44, GF_MUL( in60, 70 ) ); \
2417 0 : in44 = temp; \
2418 0 : } \
2419 0 : { \
2420 0 : gf_t temp = GF_ADD( in45, GF_MUL( in61, 71 ) ); \
2421 0 : in61 = GF_ADD( in45, GF_MUL( in61, 70 ) ); \
2422 0 : in45 = temp; \
2423 0 : } \
2424 0 : { \
2425 0 : gf_t temp = GF_ADD( in46, GF_MUL( in62, 71 ) ); \
2426 0 : in62 = GF_ADD( in46, GF_MUL( in62, 70 ) ); \
2427 0 : in46 = temp; \
2428 0 : } \
2429 0 : { \
2430 0 : gf_t temp = GF_ADD( in47, GF_MUL( in63, 71 ) ); \
2431 0 : in63 = GF_ADD( in47, GF_MUL( in63, 70 ) ); \
2432 0 : in47 = temp; \
2433 0 : } \
2434 0 : scratch_8 = in40; \
2435 0 : scratch_9 = in41; \
2436 0 : scratch_10 = in42; \
2437 0 : { \
2438 0 : gf_t temp = GF_ADD( in35, GF_MUL( in43, 174 ) ); \
2439 0 : in43 = GF_ADD( in35, GF_MUL( in43, 175 ) ); \
2440 0 : in35 = temp; \
2441 0 : } \
2442 0 : { \
2443 0 : gf_t temp = GF_ADD( in36, GF_MUL( in44, 174 ) ); \
2444 0 : in44 = GF_ADD( in36, GF_MUL( in44, 175 ) ); \
2445 0 : in36 = temp; \
2446 0 : } \
2447 0 : { \
2448 0 : gf_t temp = GF_ADD( in37, GF_MUL( in45, 174 ) ); \
2449 0 : in45 = GF_ADD( in37, GF_MUL( in45, 175 ) ); \
2450 0 : in37 = temp; \
2451 0 : } \
2452 0 : { \
2453 0 : gf_t temp = GF_ADD( in38, GF_MUL( in46, 174 ) ); \
2454 0 : in46 = GF_ADD( in38, GF_MUL( in46, 175 ) ); \
2455 0 : in38 = temp; \
2456 0 : } \
2457 0 : { \
2458 0 : gf_t temp = GF_ADD( in39, GF_MUL( in47, 174 ) ); \
2459 0 : in47 = GF_ADD( in39, GF_MUL( in47, 175 ) ); \
2460 0 : in39 = temp; \
2461 0 : } \
2462 0 : scratch_4 = in36; \
2463 0 : scratch_5 = in37; \
2464 0 : scratch_6 = in38; \
2465 0 : { \
2466 0 : gf_t temp = GF_ADD( in35, GF_MUL( in39, 38 ) ); \
2467 0 : in39 = GF_ADD( in35, GF_MUL( in39, 39 ) ); \
2468 0 : in35 = temp; \
2469 0 : } \
2470 0 : scratch_3 = in35; \
2471 0 : { \
2472 0 : gf_t temp = GF_ADD( GF_MUL( in32, 33 ), GF_MUL( in33, 32 ) ); \
2473 0 : in33 = GF_ADD( in32, in33 ); \
2474 0 : in32 = temp; \
2475 0 : } \
2476 0 : in35 = GF_ADD( in33, in35 ); \
2477 0 : { \
2478 0 : gf_t temp = GF_ADD( in34, GF_MUL( in35, 34 ) ); \
2479 0 : in35 = GF_ADD( in34, in35 ); \
2480 0 : in34 = temp; \
2481 0 : } \
2482 0 : { \
2483 0 : gf_t temp = GF_ADD( GF_MUL( in32, 236 ), GF_MUL( in34, 237 ) ); \
2484 0 : in34 = GF_ADD( in32, in34 ); \
2485 0 : in32 = temp; \
2486 0 : } \
2487 0 : in33 = GF_ADD( GF_MUL( scratch_3, 237 ), in33 ); \
2488 0 : in36 = GF_ADD( in32, in36 ); \
2489 0 : in37 = GF_ADD( in33, in37 ); \
2490 0 : in38 = GF_ADD( in34, in38 ); \
2491 0 : FD_REEDSOL_GENERATE_FFT( 4, 36, in36, in37, in38, in39 ); \
2492 0 : in32 = GF_ADD( GF_MUL( scratch_4, 38 ), in32 ); \
2493 0 : in33 = GF_ADD( GF_MUL( scratch_5, 38 ), in33 ); \
2494 0 : in34 = GF_ADD( GF_MUL( scratch_6, 38 ), in34 ); \
2495 0 : in40 = GF_ADD( in32, in40 ); \
2496 0 : in41 = GF_ADD( in33, in41 ); \
2497 0 : in42 = GF_ADD( in34, in42 ); \
2498 0 : FD_REEDSOL_GENERATE_FFT( 8, 40, in40, in41, in42, in43, in44, in45, in46, in47 ); \
2499 0 : in32 = GF_ADD( GF_MUL( scratch_8, 174 ), in32 ); \
2500 0 : in33 = GF_ADD( GF_MUL( scratch_9, 174 ), in33 ); \
2501 0 : in34 = GF_ADD( GF_MUL( scratch_10, 174 ), in34 ); \
2502 0 : in48 = GF_ADD( in32, in48 ); \
2503 0 : in49 = GF_ADD( in33, in49 ); \
2504 0 : in50 = GF_ADD( in34, in50 ); \
2505 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
2506 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
2507 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
2508 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
2509 0 : in32 = GF_ADD( in00, in32 ); \
2510 0 : in33 = GF_ADD( in01, in33 ); \
2511 0 : in34 = GF_ADD( in02, in34 ); \
2512 0 : } while( 0 )
2513 :
2514 : void fd_reedsol_ppt_64_36( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
2515 : #define FD_REEDSOL_PPT_IMPL_64_36( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
2516 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
2517 0 : do { \
2518 0 : gf_t scratch_10, scratch_11, scratch_16, scratch_17, scratch_18, scratch_19, scratch_4, scratch_5, scratch_6, scratch_7, scratch_8, scratch_9; \
2519 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
2520 0 : in36 = GF_ADD( in04, in36 ); \
2521 0 : in37 = GF_ADD( in05, in37 ); \
2522 0 : in38 = GF_ADD( in06, in38 ); \
2523 0 : in39 = GF_ADD( in07, in39 ); \
2524 0 : in40 = GF_ADD( in08, in40 ); \
2525 0 : in41 = GF_ADD( in09, in41 ); \
2526 0 : in42 = GF_ADD( in10, in42 ); \
2527 0 : in43 = GF_ADD( in11, in43 ); \
2528 0 : in44 = GF_ADD( in12, in44 ); \
2529 0 : in45 = GF_ADD( in13, in45 ); \
2530 0 : in46 = GF_ADD( in14, in46 ); \
2531 0 : in47 = GF_ADD( in15, in47 ); \
2532 0 : in48 = GF_ADD( in16, in48 ); \
2533 0 : in49 = GF_ADD( in17, in49 ); \
2534 0 : in50 = GF_ADD( in18, in50 ); \
2535 0 : in51 = GF_ADD( in19, in51 ); \
2536 0 : in52 = GF_ADD( in20, in52 ); \
2537 0 : in53 = GF_ADD( in21, in53 ); \
2538 0 : in54 = GF_ADD( in22, in54 ); \
2539 0 : in55 = GF_ADD( in23, in55 ); \
2540 0 : in56 = GF_ADD( in24, in56 ); \
2541 0 : in57 = GF_ADD( in25, in57 ); \
2542 0 : in58 = GF_ADD( in26, in58 ); \
2543 0 : in59 = GF_ADD( in27, in59 ); \
2544 0 : in60 = GF_ADD( in28, in60 ); \
2545 0 : in61 = GF_ADD( in29, in61 ); \
2546 0 : in62 = GF_ADD( in30, in62 ); \
2547 0 : in63 = GF_ADD( in31, in63 ); \
2548 0 : scratch_16 = in48; \
2549 0 : scratch_17 = in49; \
2550 0 : scratch_18 = in50; \
2551 0 : scratch_19 = in51; \
2552 0 : { \
2553 0 : gf_t temp = GF_ADD( in36, GF_MUL( in52, 71 ) ); \
2554 0 : in52 = GF_ADD( in36, GF_MUL( in52, 70 ) ); \
2555 0 : in36 = temp; \
2556 0 : } \
2557 0 : { \
2558 0 : gf_t temp = GF_ADD( in37, GF_MUL( in53, 71 ) ); \
2559 0 : in53 = GF_ADD( in37, GF_MUL( in53, 70 ) ); \
2560 0 : in37 = temp; \
2561 0 : } \
2562 0 : { \
2563 0 : gf_t temp = GF_ADD( in38, GF_MUL( in54, 71 ) ); \
2564 0 : in54 = GF_ADD( in38, GF_MUL( in54, 70 ) ); \
2565 0 : in38 = temp; \
2566 0 : } \
2567 0 : { \
2568 0 : gf_t temp = GF_ADD( in39, GF_MUL( in55, 71 ) ); \
2569 0 : in55 = GF_ADD( in39, GF_MUL( in55, 70 ) ); \
2570 0 : in39 = temp; \
2571 0 : } \
2572 0 : { \
2573 0 : gf_t temp = GF_ADD( in40, GF_MUL( in56, 71 ) ); \
2574 0 : in56 = GF_ADD( in40, GF_MUL( in56, 70 ) ); \
2575 0 : in40 = temp; \
2576 0 : } \
2577 0 : { \
2578 0 : gf_t temp = GF_ADD( in41, GF_MUL( in57, 71 ) ); \
2579 0 : in57 = GF_ADD( in41, GF_MUL( in57, 70 ) ); \
2580 0 : in41 = temp; \
2581 0 : } \
2582 0 : { \
2583 0 : gf_t temp = GF_ADD( in42, GF_MUL( in58, 71 ) ); \
2584 0 : in58 = GF_ADD( in42, GF_MUL( in58, 70 ) ); \
2585 0 : in42 = temp; \
2586 0 : } \
2587 0 : { \
2588 0 : gf_t temp = GF_ADD( in43, GF_MUL( in59, 71 ) ); \
2589 0 : in59 = GF_ADD( in43, GF_MUL( in59, 70 ) ); \
2590 0 : in43 = temp; \
2591 0 : } \
2592 0 : { \
2593 0 : gf_t temp = GF_ADD( in44, GF_MUL( in60, 71 ) ); \
2594 0 : in60 = GF_ADD( in44, GF_MUL( in60, 70 ) ); \
2595 0 : in44 = temp; \
2596 0 : } \
2597 0 : { \
2598 0 : gf_t temp = GF_ADD( in45, GF_MUL( in61, 71 ) ); \
2599 0 : in61 = GF_ADD( in45, GF_MUL( in61, 70 ) ); \
2600 0 : in45 = temp; \
2601 0 : } \
2602 0 : { \
2603 0 : gf_t temp = GF_ADD( in46, GF_MUL( in62, 71 ) ); \
2604 0 : in62 = GF_ADD( in46, GF_MUL( in62, 70 ) ); \
2605 0 : in46 = temp; \
2606 0 : } \
2607 0 : { \
2608 0 : gf_t temp = GF_ADD( in47, GF_MUL( in63, 71 ) ); \
2609 0 : in63 = GF_ADD( in47, GF_MUL( in63, 70 ) ); \
2610 0 : in47 = temp; \
2611 0 : } \
2612 0 : scratch_8 = in40; \
2613 0 : scratch_9 = in41; \
2614 0 : scratch_10 = in42; \
2615 0 : scratch_11 = in43; \
2616 0 : { \
2617 0 : gf_t temp = GF_ADD( in36, GF_MUL( in44, 174 ) ); \
2618 0 : in44 = GF_ADD( in36, GF_MUL( in44, 175 ) ); \
2619 0 : in36 = temp; \
2620 0 : } \
2621 0 : { \
2622 0 : gf_t temp = GF_ADD( in37, GF_MUL( in45, 174 ) ); \
2623 0 : in45 = GF_ADD( in37, GF_MUL( in45, 175 ) ); \
2624 0 : in37 = temp; \
2625 0 : } \
2626 0 : { \
2627 0 : gf_t temp = GF_ADD( in38, GF_MUL( in46, 174 ) ); \
2628 0 : in46 = GF_ADD( in38, GF_MUL( in46, 175 ) ); \
2629 0 : in38 = temp; \
2630 0 : } \
2631 0 : { \
2632 0 : gf_t temp = GF_ADD( in39, GF_MUL( in47, 174 ) ); \
2633 0 : in47 = GF_ADD( in39, GF_MUL( in47, 175 ) ); \
2634 0 : in39 = temp; \
2635 0 : } \
2636 0 : scratch_4 = in36; \
2637 0 : scratch_5 = in37; \
2638 0 : scratch_6 = in38; \
2639 0 : scratch_7 = in39; \
2640 0 : FD_REEDSOL_GENERATE_IFFT( 4, 32, in32, in33, in34, in35 ); \
2641 0 : in36 = GF_ADD( in32, in36 ); \
2642 0 : in37 = GF_ADD( in33, in37 ); \
2643 0 : in38 = GF_ADD( in34, in38 ); \
2644 0 : in39 = GF_ADD( in35, in39 ); \
2645 0 : FD_REEDSOL_GENERATE_FFT( 4, 36, in36, in37, in38, in39 ); \
2646 0 : in32 = GF_ADD( GF_MUL( scratch_4, 38 ), in32 ); \
2647 0 : in33 = GF_ADD( GF_MUL( scratch_5, 38 ), in33 ); \
2648 0 : in34 = GF_ADD( GF_MUL( scratch_6, 38 ), in34 ); \
2649 0 : in35 = GF_ADD( GF_MUL( scratch_7, 38 ), in35 ); \
2650 0 : in40 = GF_ADD( in32, in40 ); \
2651 0 : in41 = GF_ADD( in33, in41 ); \
2652 0 : in42 = GF_ADD( in34, in42 ); \
2653 0 : in43 = GF_ADD( in35, in43 ); \
2654 0 : FD_REEDSOL_GENERATE_FFT( 8, 40, in40, in41, in42, in43, in44, in45, in46, in47 ); \
2655 0 : in32 = GF_ADD( GF_MUL( scratch_8, 174 ), in32 ); \
2656 0 : in33 = GF_ADD( GF_MUL( scratch_9, 174 ), in33 ); \
2657 0 : in34 = GF_ADD( GF_MUL( scratch_10, 174 ), in34 ); \
2658 0 : in35 = GF_ADD( GF_MUL( scratch_11, 174 ), in35 ); \
2659 0 : in48 = GF_ADD( in32, in48 ); \
2660 0 : in49 = GF_ADD( in33, in49 ); \
2661 0 : in50 = GF_ADD( in34, in50 ); \
2662 0 : in51 = GF_ADD( in35, in51 ); \
2663 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
2664 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
2665 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
2666 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
2667 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
2668 0 : in32 = GF_ADD( in00, in32 ); \
2669 0 : in33 = GF_ADD( in01, in33 ); \
2670 0 : in34 = GF_ADD( in02, in34 ); \
2671 0 : in35 = GF_ADD( in03, in35 ); \
2672 0 : } while( 0 )
2673 :
2674 : void fd_reedsol_ppt_64_37( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
2675 : #define FD_REEDSOL_PPT_IMPL_64_37( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
2676 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
2677 0 : do { \
2678 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_16, scratch_17, scratch_18, scratch_19, scratch_2, scratch_20, scratch_5, scratch_6, scratch_7, scratch_8, scratch_9; \
2679 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
2680 0 : in37 = GF_ADD( in05, in37 ); \
2681 0 : in38 = GF_ADD( in06, in38 ); \
2682 0 : in39 = GF_ADD( in07, in39 ); \
2683 0 : in40 = GF_ADD( in08, in40 ); \
2684 0 : in41 = GF_ADD( in09, in41 ); \
2685 0 : in42 = GF_ADD( in10, in42 ); \
2686 0 : in43 = GF_ADD( in11, in43 ); \
2687 0 : in44 = GF_ADD( in12, in44 ); \
2688 0 : in45 = GF_ADD( in13, in45 ); \
2689 0 : in46 = GF_ADD( in14, in46 ); \
2690 0 : in47 = GF_ADD( in15, in47 ); \
2691 0 : in48 = GF_ADD( in16, in48 ); \
2692 0 : in49 = GF_ADD( in17, in49 ); \
2693 0 : in50 = GF_ADD( in18, in50 ); \
2694 0 : in51 = GF_ADD( in19, in51 ); \
2695 0 : in52 = GF_ADD( in20, in52 ); \
2696 0 : in53 = GF_ADD( in21, in53 ); \
2697 0 : in54 = GF_ADD( in22, in54 ); \
2698 0 : in55 = GF_ADD( in23, in55 ); \
2699 0 : in56 = GF_ADD( in24, in56 ); \
2700 0 : in57 = GF_ADD( in25, in57 ); \
2701 0 : in58 = GF_ADD( in26, in58 ); \
2702 0 : in59 = GF_ADD( in27, in59 ); \
2703 0 : in60 = GF_ADD( in28, in60 ); \
2704 0 : in61 = GF_ADD( in29, in61 ); \
2705 0 : in62 = GF_ADD( in30, in62 ); \
2706 0 : in63 = GF_ADD( in31, in63 ); \
2707 0 : scratch_16 = in48; \
2708 0 : scratch_17 = in49; \
2709 0 : scratch_18 = in50; \
2710 0 : scratch_19 = in51; \
2711 0 : scratch_20 = in52; \
2712 0 : { \
2713 0 : gf_t temp = GF_ADD( in37, GF_MUL( in53, 71 ) ); \
2714 0 : in53 = GF_ADD( in37, GF_MUL( in53, 70 ) ); \
2715 0 : in37 = temp; \
2716 0 : } \
2717 0 : { \
2718 0 : gf_t temp = GF_ADD( in38, GF_MUL( in54, 71 ) ); \
2719 0 : in54 = GF_ADD( in38, GF_MUL( in54, 70 ) ); \
2720 0 : in38 = temp; \
2721 0 : } \
2722 0 : { \
2723 0 : gf_t temp = GF_ADD( in39, GF_MUL( in55, 71 ) ); \
2724 0 : in55 = GF_ADD( in39, GF_MUL( in55, 70 ) ); \
2725 0 : in39 = temp; \
2726 0 : } \
2727 0 : { \
2728 0 : gf_t temp = GF_ADD( in40, GF_MUL( in56, 71 ) ); \
2729 0 : in56 = GF_ADD( in40, GF_MUL( in56, 70 ) ); \
2730 0 : in40 = temp; \
2731 0 : } \
2732 0 : { \
2733 0 : gf_t temp = GF_ADD( in41, GF_MUL( in57, 71 ) ); \
2734 0 : in57 = GF_ADD( in41, GF_MUL( in57, 70 ) ); \
2735 0 : in41 = temp; \
2736 0 : } \
2737 0 : { \
2738 0 : gf_t temp = GF_ADD( in42, GF_MUL( in58, 71 ) ); \
2739 0 : in58 = GF_ADD( in42, GF_MUL( in58, 70 ) ); \
2740 0 : in42 = temp; \
2741 0 : } \
2742 0 : { \
2743 0 : gf_t temp = GF_ADD( in43, GF_MUL( in59, 71 ) ); \
2744 0 : in59 = GF_ADD( in43, GF_MUL( in59, 70 ) ); \
2745 0 : in43 = temp; \
2746 0 : } \
2747 0 : { \
2748 0 : gf_t temp = GF_ADD( in44, GF_MUL( in60, 71 ) ); \
2749 0 : in60 = GF_ADD( in44, GF_MUL( in60, 70 ) ); \
2750 0 : in44 = temp; \
2751 0 : } \
2752 0 : { \
2753 0 : gf_t temp = GF_ADD( in45, GF_MUL( in61, 71 ) ); \
2754 0 : in61 = GF_ADD( in45, GF_MUL( in61, 70 ) ); \
2755 0 : in45 = temp; \
2756 0 : } \
2757 0 : { \
2758 0 : gf_t temp = GF_ADD( in46, GF_MUL( in62, 71 ) ); \
2759 0 : in62 = GF_ADD( in46, GF_MUL( in62, 70 ) ); \
2760 0 : in46 = temp; \
2761 0 : } \
2762 0 : { \
2763 0 : gf_t temp = GF_ADD( in47, GF_MUL( in63, 71 ) ); \
2764 0 : in63 = GF_ADD( in47, GF_MUL( in63, 70 ) ); \
2765 0 : in47 = temp; \
2766 0 : } \
2767 0 : scratch_8 = in40; \
2768 0 : scratch_9 = in41; \
2769 0 : scratch_10 = in42; \
2770 0 : scratch_11 = in43; \
2771 0 : scratch_12 = in44; \
2772 0 : { \
2773 0 : gf_t temp = GF_ADD( in37, GF_MUL( in45, 174 ) ); \
2774 0 : in45 = GF_ADD( in37, GF_MUL( in45, 175 ) ); \
2775 0 : in37 = temp; \
2776 0 : } \
2777 0 : { \
2778 0 : gf_t temp = GF_ADD( in38, GF_MUL( in46, 174 ) ); \
2779 0 : in46 = GF_ADD( in38, GF_MUL( in46, 175 ) ); \
2780 0 : in38 = temp; \
2781 0 : } \
2782 0 : { \
2783 0 : gf_t temp = GF_ADD( in39, GF_MUL( in47, 174 ) ); \
2784 0 : in47 = GF_ADD( in39, GF_MUL( in47, 175 ) ); \
2785 0 : in39 = temp; \
2786 0 : } \
2787 0 : scratch_5 = in37; \
2788 0 : scratch_6 = in38; \
2789 0 : scratch_7 = in39; \
2790 0 : FD_REEDSOL_GENERATE_IFFT( 4, 32, in32, in33, in34, in35 ); \
2791 0 : in37 = GF_ADD( in33, in37 ); \
2792 0 : in38 = GF_ADD( in34, in38 ); \
2793 0 : in39 = GF_ADD( in35, in39 ); \
2794 0 : scratch_2 = in38; \
2795 0 : { \
2796 0 : gf_t temp = GF_ADD( in37, GF_MUL( in39, 235 ) ); \
2797 0 : in39 = GF_ADD( in37, GF_MUL( in39, 234 ) ); \
2798 0 : in37 = temp; \
2799 0 : } \
2800 0 : { \
2801 0 : gf_t temp = GF_ADD( in36, GF_MUL( in37, 36 ) ); \
2802 0 : in37 = GF_ADD( in36, in37 ); \
2803 0 : in36 = temp; \
2804 0 : } \
2805 0 : in38 = GF_ADD( in36, in38 ); \
2806 0 : { \
2807 0 : gf_t temp = GF_ADD( in38, GF_MUL( in39, 38 ) ); \
2808 0 : in39 = GF_ADD( in38, GF_MUL( in39, 39 ) ); \
2809 0 : in38 = temp; \
2810 0 : } \
2811 0 : in36 = GF_ADD( GF_MUL( scratch_2, 235 ), in36 ); \
2812 0 : { \
2813 0 : gf_t temp = GF_ADD( GF_MUL( in32, 39 ), GF_MUL( in36, 38 ) ); \
2814 0 : in36 = GF_ADD( in32, in36 ); \
2815 0 : in32 = temp; \
2816 0 : } \
2817 0 : in33 = GF_ADD( GF_MUL( scratch_5, 38 ), in33 ); \
2818 0 : in34 = GF_ADD( GF_MUL( scratch_6, 38 ), in34 ); \
2819 0 : in35 = GF_ADD( GF_MUL( scratch_7, 38 ), in35 ); \
2820 0 : in40 = GF_ADD( in32, in40 ); \
2821 0 : in41 = GF_ADD( in33, in41 ); \
2822 0 : in42 = GF_ADD( in34, in42 ); \
2823 0 : in43 = GF_ADD( in35, in43 ); \
2824 0 : in44 = GF_ADD( in36, in44 ); \
2825 0 : FD_REEDSOL_GENERATE_FFT( 8, 40, in40, in41, in42, in43, in44, in45, in46, in47 ); \
2826 0 : in32 = GF_ADD( GF_MUL( scratch_8, 174 ), in32 ); \
2827 0 : in33 = GF_ADD( GF_MUL( scratch_9, 174 ), in33 ); \
2828 0 : in34 = GF_ADD( GF_MUL( scratch_10, 174 ), in34 ); \
2829 0 : in35 = GF_ADD( GF_MUL( scratch_11, 174 ), in35 ); \
2830 0 : in36 = GF_ADD( GF_MUL( scratch_12, 174 ), in36 ); \
2831 0 : in48 = GF_ADD( in32, in48 ); \
2832 0 : in49 = GF_ADD( in33, in49 ); \
2833 0 : in50 = GF_ADD( in34, in50 ); \
2834 0 : in51 = GF_ADD( in35, in51 ); \
2835 0 : in52 = GF_ADD( in36, in52 ); \
2836 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
2837 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
2838 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
2839 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
2840 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
2841 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
2842 0 : in32 = GF_ADD( in00, in32 ); \
2843 0 : in33 = GF_ADD( in01, in33 ); \
2844 0 : in34 = GF_ADD( in02, in34 ); \
2845 0 : in35 = GF_ADD( in03, in35 ); \
2846 0 : in36 = GF_ADD( in04, in36 ); \
2847 0 : } while( 0 )
2848 :
2849 : void fd_reedsol_ppt_64_38( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
2850 : #define FD_REEDSOL_PPT_IMPL_64_38( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
2851 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
2852 0 : do { \
2853 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_13, scratch_16, scratch_17, scratch_18, scratch_19, scratch_2, scratch_20, scratch_21, scratch_3, scratch_6, scratch_7, scratch_8, scratch_9; \
2854 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
2855 0 : in38 = GF_ADD( in06, in38 ); \
2856 0 : in39 = GF_ADD( in07, in39 ); \
2857 0 : in40 = GF_ADD( in08, in40 ); \
2858 0 : in41 = GF_ADD( in09, in41 ); \
2859 0 : in42 = GF_ADD( in10, in42 ); \
2860 0 : in43 = GF_ADD( in11, in43 ); \
2861 0 : in44 = GF_ADD( in12, in44 ); \
2862 0 : in45 = GF_ADD( in13, in45 ); \
2863 0 : in46 = GF_ADD( in14, in46 ); \
2864 0 : in47 = GF_ADD( in15, in47 ); \
2865 0 : in48 = GF_ADD( in16, in48 ); \
2866 0 : in49 = GF_ADD( in17, in49 ); \
2867 0 : in50 = GF_ADD( in18, in50 ); \
2868 0 : in51 = GF_ADD( in19, in51 ); \
2869 0 : in52 = GF_ADD( in20, in52 ); \
2870 0 : in53 = GF_ADD( in21, in53 ); \
2871 0 : in54 = GF_ADD( in22, in54 ); \
2872 0 : in55 = GF_ADD( in23, in55 ); \
2873 0 : in56 = GF_ADD( in24, in56 ); \
2874 0 : in57 = GF_ADD( in25, in57 ); \
2875 0 : in58 = GF_ADD( in26, in58 ); \
2876 0 : in59 = GF_ADD( in27, in59 ); \
2877 0 : in60 = GF_ADD( in28, in60 ); \
2878 0 : in61 = GF_ADD( in29, in61 ); \
2879 0 : in62 = GF_ADD( in30, in62 ); \
2880 0 : in63 = GF_ADD( in31, in63 ); \
2881 0 : scratch_16 = in48; \
2882 0 : scratch_17 = in49; \
2883 0 : scratch_18 = in50; \
2884 0 : scratch_19 = in51; \
2885 0 : scratch_20 = in52; \
2886 0 : scratch_21 = in53; \
2887 0 : { \
2888 0 : gf_t temp = GF_ADD( in38, GF_MUL( in54, 71 ) ); \
2889 0 : in54 = GF_ADD( in38, GF_MUL( in54, 70 ) ); \
2890 0 : in38 = temp; \
2891 0 : } \
2892 0 : { \
2893 0 : gf_t temp = GF_ADD( in39, GF_MUL( in55, 71 ) ); \
2894 0 : in55 = GF_ADD( in39, GF_MUL( in55, 70 ) ); \
2895 0 : in39 = temp; \
2896 0 : } \
2897 0 : { \
2898 0 : gf_t temp = GF_ADD( in40, GF_MUL( in56, 71 ) ); \
2899 0 : in56 = GF_ADD( in40, GF_MUL( in56, 70 ) ); \
2900 0 : in40 = temp; \
2901 0 : } \
2902 0 : { \
2903 0 : gf_t temp = GF_ADD( in41, GF_MUL( in57, 71 ) ); \
2904 0 : in57 = GF_ADD( in41, GF_MUL( in57, 70 ) ); \
2905 0 : in41 = temp; \
2906 0 : } \
2907 0 : { \
2908 0 : gf_t temp = GF_ADD( in42, GF_MUL( in58, 71 ) ); \
2909 0 : in58 = GF_ADD( in42, GF_MUL( in58, 70 ) ); \
2910 0 : in42 = temp; \
2911 0 : } \
2912 0 : { \
2913 0 : gf_t temp = GF_ADD( in43, GF_MUL( in59, 71 ) ); \
2914 0 : in59 = GF_ADD( in43, GF_MUL( in59, 70 ) ); \
2915 0 : in43 = temp; \
2916 0 : } \
2917 0 : { \
2918 0 : gf_t temp = GF_ADD( in44, GF_MUL( in60, 71 ) ); \
2919 0 : in60 = GF_ADD( in44, GF_MUL( in60, 70 ) ); \
2920 0 : in44 = temp; \
2921 0 : } \
2922 0 : { \
2923 0 : gf_t temp = GF_ADD( in45, GF_MUL( in61, 71 ) ); \
2924 0 : in61 = GF_ADD( in45, GF_MUL( in61, 70 ) ); \
2925 0 : in45 = temp; \
2926 0 : } \
2927 0 : { \
2928 0 : gf_t temp = GF_ADD( in46, GF_MUL( in62, 71 ) ); \
2929 0 : in62 = GF_ADD( in46, GF_MUL( in62, 70 ) ); \
2930 0 : in46 = temp; \
2931 0 : } \
2932 0 : { \
2933 0 : gf_t temp = GF_ADD( in47, GF_MUL( in63, 71 ) ); \
2934 0 : in63 = GF_ADD( in47, GF_MUL( in63, 70 ) ); \
2935 0 : in47 = temp; \
2936 0 : } \
2937 0 : scratch_8 = in40; \
2938 0 : scratch_9 = in41; \
2939 0 : scratch_10 = in42; \
2940 0 : scratch_11 = in43; \
2941 0 : scratch_12 = in44; \
2942 0 : scratch_13 = in45; \
2943 0 : { \
2944 0 : gf_t temp = GF_ADD( in38, GF_MUL( in46, 174 ) ); \
2945 0 : in46 = GF_ADD( in38, GF_MUL( in46, 175 ) ); \
2946 0 : in38 = temp; \
2947 0 : } \
2948 0 : { \
2949 0 : gf_t temp = GF_ADD( in39, GF_MUL( in47, 174 ) ); \
2950 0 : in47 = GF_ADD( in39, GF_MUL( in47, 175 ) ); \
2951 0 : in39 = temp; \
2952 0 : } \
2953 0 : scratch_6 = in38; \
2954 0 : scratch_7 = in39; \
2955 0 : FD_REEDSOL_GENERATE_IFFT( 4, 32, in32, in33, in34, in35 ); \
2956 0 : in38 = GF_ADD( in34, in38 ); \
2957 0 : in39 = GF_ADD( in35, in39 ); \
2958 0 : scratch_2 = in38; \
2959 0 : scratch_3 = in39; \
2960 0 : { \
2961 0 : gf_t temp = GF_ADD( GF_MUL( in36, 37 ), GF_MUL( in37, 36 ) ); \
2962 0 : in37 = GF_ADD( in36, in37 ); \
2963 0 : in36 = temp; \
2964 0 : } \
2965 0 : in38 = GF_ADD( in36, in38 ); \
2966 0 : in39 = GF_ADD( in37, in39 ); \
2967 0 : { \
2968 0 : gf_t temp = GF_ADD( in38, GF_MUL( in39, 38 ) ); \
2969 0 : in39 = GF_ADD( in38, GF_MUL( in39, 39 ) ); \
2970 0 : in38 = temp; \
2971 0 : } \
2972 0 : in36 = GF_ADD( GF_MUL( scratch_2, 235 ), in36 ); \
2973 0 : in37 = GF_ADD( GF_MUL( scratch_3, 235 ), in37 ); \
2974 0 : { \
2975 0 : gf_t temp = GF_ADD( GF_MUL( in32, 39 ), GF_MUL( in36, 38 ) ); \
2976 0 : in36 = GF_ADD( in32, in36 ); \
2977 0 : in32 = temp; \
2978 0 : } \
2979 0 : { \
2980 0 : gf_t temp = GF_ADD( GF_MUL( in33, 39 ), GF_MUL( in37, 38 ) ); \
2981 0 : in37 = GF_ADD( in33, in37 ); \
2982 0 : in33 = temp; \
2983 0 : } \
2984 0 : in34 = GF_ADD( GF_MUL( scratch_6, 38 ), in34 ); \
2985 0 : in35 = GF_ADD( GF_MUL( scratch_7, 38 ), in35 ); \
2986 0 : in40 = GF_ADD( in32, in40 ); \
2987 0 : in41 = GF_ADD( in33, in41 ); \
2988 0 : in42 = GF_ADD( in34, in42 ); \
2989 0 : in43 = GF_ADD( in35, in43 ); \
2990 0 : in44 = GF_ADD( in36, in44 ); \
2991 0 : in45 = GF_ADD( in37, in45 ); \
2992 0 : FD_REEDSOL_GENERATE_FFT( 8, 40, in40, in41, in42, in43, in44, in45, in46, in47 ); \
2993 0 : in32 = GF_ADD( GF_MUL( scratch_8, 174 ), in32 ); \
2994 0 : in33 = GF_ADD( GF_MUL( scratch_9, 174 ), in33 ); \
2995 0 : in34 = GF_ADD( GF_MUL( scratch_10, 174 ), in34 ); \
2996 0 : in35 = GF_ADD( GF_MUL( scratch_11, 174 ), in35 ); \
2997 0 : in36 = GF_ADD( GF_MUL( scratch_12, 174 ), in36 ); \
2998 0 : in37 = GF_ADD( GF_MUL( scratch_13, 174 ), in37 ); \
2999 0 : in48 = GF_ADD( in32, in48 ); \
3000 0 : in49 = GF_ADD( in33, in49 ); \
3001 0 : in50 = GF_ADD( in34, in50 ); \
3002 0 : in51 = GF_ADD( in35, in51 ); \
3003 0 : in52 = GF_ADD( in36, in52 ); \
3004 0 : in53 = GF_ADD( in37, in53 ); \
3005 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
3006 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
3007 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
3008 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
3009 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
3010 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
3011 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
3012 0 : in32 = GF_ADD( in00, in32 ); \
3013 0 : in33 = GF_ADD( in01, in33 ); \
3014 0 : in34 = GF_ADD( in02, in34 ); \
3015 0 : in35 = GF_ADD( in03, in35 ); \
3016 0 : in36 = GF_ADD( in04, in36 ); \
3017 0 : in37 = GF_ADD( in05, in37 ); \
3018 0 : } while( 0 )
3019 :
3020 : void fd_reedsol_ppt_64_39( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
3021 : #define FD_REEDSOL_PPT_IMPL_64_39( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
3022 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
3023 0 : do { \
3024 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_13, scratch_14, scratch_16, scratch_17, scratch_18, scratch_19, scratch_20, scratch_21, scratch_22, scratch_3, scratch_7, scratch_8, scratch_9; \
3025 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
3026 0 : in39 = GF_ADD( in07, in39 ); \
3027 0 : in40 = GF_ADD( in08, in40 ); \
3028 0 : in41 = GF_ADD( in09, in41 ); \
3029 0 : in42 = GF_ADD( in10, in42 ); \
3030 0 : in43 = GF_ADD( in11, in43 ); \
3031 0 : in44 = GF_ADD( in12, in44 ); \
3032 0 : in45 = GF_ADD( in13, in45 ); \
3033 0 : in46 = GF_ADD( in14, in46 ); \
3034 0 : in47 = GF_ADD( in15, in47 ); \
3035 0 : in48 = GF_ADD( in16, in48 ); \
3036 0 : in49 = GF_ADD( in17, in49 ); \
3037 0 : in50 = GF_ADD( in18, in50 ); \
3038 0 : in51 = GF_ADD( in19, in51 ); \
3039 0 : in52 = GF_ADD( in20, in52 ); \
3040 0 : in53 = GF_ADD( in21, in53 ); \
3041 0 : in54 = GF_ADD( in22, in54 ); \
3042 0 : in55 = GF_ADD( in23, in55 ); \
3043 0 : in56 = GF_ADD( in24, in56 ); \
3044 0 : in57 = GF_ADD( in25, in57 ); \
3045 0 : in58 = GF_ADD( in26, in58 ); \
3046 0 : in59 = GF_ADD( in27, in59 ); \
3047 0 : in60 = GF_ADD( in28, in60 ); \
3048 0 : in61 = GF_ADD( in29, in61 ); \
3049 0 : in62 = GF_ADD( in30, in62 ); \
3050 0 : in63 = GF_ADD( in31, in63 ); \
3051 0 : scratch_16 = in48; \
3052 0 : scratch_17 = in49; \
3053 0 : scratch_18 = in50; \
3054 0 : scratch_19 = in51; \
3055 0 : scratch_20 = in52; \
3056 0 : scratch_21 = in53; \
3057 0 : scratch_22 = in54; \
3058 0 : { \
3059 0 : gf_t temp = GF_ADD( in39, GF_MUL( in55, 71 ) ); \
3060 0 : in55 = GF_ADD( in39, GF_MUL( in55, 70 ) ); \
3061 0 : in39 = temp; \
3062 0 : } \
3063 0 : { \
3064 0 : gf_t temp = GF_ADD( in40, GF_MUL( in56, 71 ) ); \
3065 0 : in56 = GF_ADD( in40, GF_MUL( in56, 70 ) ); \
3066 0 : in40 = temp; \
3067 0 : } \
3068 0 : { \
3069 0 : gf_t temp = GF_ADD( in41, GF_MUL( in57, 71 ) ); \
3070 0 : in57 = GF_ADD( in41, GF_MUL( in57, 70 ) ); \
3071 0 : in41 = temp; \
3072 0 : } \
3073 0 : { \
3074 0 : gf_t temp = GF_ADD( in42, GF_MUL( in58, 71 ) ); \
3075 0 : in58 = GF_ADD( in42, GF_MUL( in58, 70 ) ); \
3076 0 : in42 = temp; \
3077 0 : } \
3078 0 : { \
3079 0 : gf_t temp = GF_ADD( in43, GF_MUL( in59, 71 ) ); \
3080 0 : in59 = GF_ADD( in43, GF_MUL( in59, 70 ) ); \
3081 0 : in43 = temp; \
3082 0 : } \
3083 0 : { \
3084 0 : gf_t temp = GF_ADD( in44, GF_MUL( in60, 71 ) ); \
3085 0 : in60 = GF_ADD( in44, GF_MUL( in60, 70 ) ); \
3086 0 : in44 = temp; \
3087 0 : } \
3088 0 : { \
3089 0 : gf_t temp = GF_ADD( in45, GF_MUL( in61, 71 ) ); \
3090 0 : in61 = GF_ADD( in45, GF_MUL( in61, 70 ) ); \
3091 0 : in45 = temp; \
3092 0 : } \
3093 0 : { \
3094 0 : gf_t temp = GF_ADD( in46, GF_MUL( in62, 71 ) ); \
3095 0 : in62 = GF_ADD( in46, GF_MUL( in62, 70 ) ); \
3096 0 : in46 = temp; \
3097 0 : } \
3098 0 : { \
3099 0 : gf_t temp = GF_ADD( in47, GF_MUL( in63, 71 ) ); \
3100 0 : in63 = GF_ADD( in47, GF_MUL( in63, 70 ) ); \
3101 0 : in47 = temp; \
3102 0 : } \
3103 0 : scratch_8 = in40; \
3104 0 : scratch_9 = in41; \
3105 0 : scratch_10 = in42; \
3106 0 : scratch_11 = in43; \
3107 0 : scratch_12 = in44; \
3108 0 : scratch_13 = in45; \
3109 0 : scratch_14 = in46; \
3110 0 : { \
3111 0 : gf_t temp = GF_ADD( in39, GF_MUL( in47, 174 ) ); \
3112 0 : in47 = GF_ADD( in39, GF_MUL( in47, 175 ) ); \
3113 0 : in39 = temp; \
3114 0 : } \
3115 0 : scratch_7 = in39; \
3116 0 : FD_REEDSOL_GENERATE_IFFT( 4, 32, in32, in33, in34, in35 ); \
3117 0 : in39 = GF_ADD( in35, in39 ); \
3118 0 : scratch_3 = in39; \
3119 0 : { \
3120 0 : gf_t temp = GF_ADD( GF_MUL( in36, 37 ), GF_MUL( in37, 36 ) ); \
3121 0 : in37 = GF_ADD( in36, in37 ); \
3122 0 : in36 = temp; \
3123 0 : } \
3124 0 : in39 = GF_ADD( in37, in39 ); \
3125 0 : { \
3126 0 : gf_t temp = GF_ADD( in38, GF_MUL( in39, 38 ) ); \
3127 0 : in39 = GF_ADD( in38, in39 ); \
3128 0 : in38 = temp; \
3129 0 : } \
3130 0 : { \
3131 0 : gf_t temp = GF_ADD( GF_MUL( in36, 234 ), GF_MUL( in38, 235 ) ); \
3132 0 : in38 = GF_ADD( in36, in38 ); \
3133 0 : in36 = temp; \
3134 0 : } \
3135 0 : in37 = GF_ADD( GF_MUL( scratch_3, 235 ), in37 ); \
3136 0 : { \
3137 0 : gf_t temp = GF_ADD( GF_MUL( in32, 39 ), GF_MUL( in36, 38 ) ); \
3138 0 : in36 = GF_ADD( in32, in36 ); \
3139 0 : in32 = temp; \
3140 0 : } \
3141 0 : { \
3142 0 : gf_t temp = GF_ADD( GF_MUL( in33, 39 ), GF_MUL( in37, 38 ) ); \
3143 0 : in37 = GF_ADD( in33, in37 ); \
3144 0 : in33 = temp; \
3145 0 : } \
3146 0 : { \
3147 0 : gf_t temp = GF_ADD( GF_MUL( in34, 39 ), GF_MUL( in38, 38 ) ); \
3148 0 : in38 = GF_ADD( in34, in38 ); \
3149 0 : in34 = temp; \
3150 0 : } \
3151 0 : in35 = GF_ADD( GF_MUL( scratch_7, 38 ), in35 ); \
3152 0 : in40 = GF_ADD( in32, in40 ); \
3153 0 : in41 = GF_ADD( in33, in41 ); \
3154 0 : in42 = GF_ADD( in34, in42 ); \
3155 0 : in43 = GF_ADD( in35, in43 ); \
3156 0 : in44 = GF_ADD( in36, in44 ); \
3157 0 : in45 = GF_ADD( in37, in45 ); \
3158 0 : in46 = GF_ADD( in38, in46 ); \
3159 0 : FD_REEDSOL_GENERATE_FFT( 8, 40, in40, in41, in42, in43, in44, in45, in46, in47 ); \
3160 0 : in32 = GF_ADD( GF_MUL( scratch_8, 174 ), in32 ); \
3161 0 : in33 = GF_ADD( GF_MUL( scratch_9, 174 ), in33 ); \
3162 0 : in34 = GF_ADD( GF_MUL( scratch_10, 174 ), in34 ); \
3163 0 : in35 = GF_ADD( GF_MUL( scratch_11, 174 ), in35 ); \
3164 0 : in36 = GF_ADD( GF_MUL( scratch_12, 174 ), in36 ); \
3165 0 : in37 = GF_ADD( GF_MUL( scratch_13, 174 ), in37 ); \
3166 0 : in38 = GF_ADD( GF_MUL( scratch_14, 174 ), in38 ); \
3167 0 : in48 = GF_ADD( in32, in48 ); \
3168 0 : in49 = GF_ADD( in33, in49 ); \
3169 0 : in50 = GF_ADD( in34, in50 ); \
3170 0 : in51 = GF_ADD( in35, in51 ); \
3171 0 : in52 = GF_ADD( in36, in52 ); \
3172 0 : in53 = GF_ADD( in37, in53 ); \
3173 0 : in54 = GF_ADD( in38, in54 ); \
3174 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
3175 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
3176 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
3177 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
3178 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
3179 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
3180 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
3181 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
3182 0 : in32 = GF_ADD( in00, in32 ); \
3183 0 : in33 = GF_ADD( in01, in33 ); \
3184 0 : in34 = GF_ADD( in02, in34 ); \
3185 0 : in35 = GF_ADD( in03, in35 ); \
3186 0 : in36 = GF_ADD( in04, in36 ); \
3187 0 : in37 = GF_ADD( in05, in37 ); \
3188 0 : in38 = GF_ADD( in06, in38 ); \
3189 0 : } while( 0 )
3190 :
3191 : void fd_reedsol_ppt_64_40( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
3192 : #define FD_REEDSOL_PPT_IMPL_64_40( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
3193 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
3194 0 : do { \
3195 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_13, scratch_14, scratch_15, scratch_16, scratch_17, scratch_18, scratch_19, scratch_20, scratch_21, scratch_22, scratch_23, scratch_8, scratch_9; \
3196 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
3197 0 : in40 = GF_ADD( in08, in40 ); \
3198 0 : in41 = GF_ADD( in09, in41 ); \
3199 0 : in42 = GF_ADD( in10, in42 ); \
3200 0 : in43 = GF_ADD( in11, in43 ); \
3201 0 : in44 = GF_ADD( in12, in44 ); \
3202 0 : in45 = GF_ADD( in13, in45 ); \
3203 0 : in46 = GF_ADD( in14, in46 ); \
3204 0 : in47 = GF_ADD( in15, in47 ); \
3205 0 : in48 = GF_ADD( in16, in48 ); \
3206 0 : in49 = GF_ADD( in17, in49 ); \
3207 0 : in50 = GF_ADD( in18, in50 ); \
3208 0 : in51 = GF_ADD( in19, in51 ); \
3209 0 : in52 = GF_ADD( in20, in52 ); \
3210 0 : in53 = GF_ADD( in21, in53 ); \
3211 0 : in54 = GF_ADD( in22, in54 ); \
3212 0 : in55 = GF_ADD( in23, in55 ); \
3213 0 : in56 = GF_ADD( in24, in56 ); \
3214 0 : in57 = GF_ADD( in25, in57 ); \
3215 0 : in58 = GF_ADD( in26, in58 ); \
3216 0 : in59 = GF_ADD( in27, in59 ); \
3217 0 : in60 = GF_ADD( in28, in60 ); \
3218 0 : in61 = GF_ADD( in29, in61 ); \
3219 0 : in62 = GF_ADD( in30, in62 ); \
3220 0 : in63 = GF_ADD( in31, in63 ); \
3221 0 : scratch_16 = in48; \
3222 0 : scratch_17 = in49; \
3223 0 : scratch_18 = in50; \
3224 0 : scratch_19 = in51; \
3225 0 : scratch_20 = in52; \
3226 0 : scratch_21 = in53; \
3227 0 : scratch_22 = in54; \
3228 0 : scratch_23 = in55; \
3229 0 : { \
3230 0 : gf_t temp = GF_ADD( in40, GF_MUL( in56, 71 ) ); \
3231 0 : in56 = GF_ADD( in40, GF_MUL( in56, 70 ) ); \
3232 0 : in40 = temp; \
3233 0 : } \
3234 0 : { \
3235 0 : gf_t temp = GF_ADD( in41, GF_MUL( in57, 71 ) ); \
3236 0 : in57 = GF_ADD( in41, GF_MUL( in57, 70 ) ); \
3237 0 : in41 = temp; \
3238 0 : } \
3239 0 : { \
3240 0 : gf_t temp = GF_ADD( in42, GF_MUL( in58, 71 ) ); \
3241 0 : in58 = GF_ADD( in42, GF_MUL( in58, 70 ) ); \
3242 0 : in42 = temp; \
3243 0 : } \
3244 0 : { \
3245 0 : gf_t temp = GF_ADD( in43, GF_MUL( in59, 71 ) ); \
3246 0 : in59 = GF_ADD( in43, GF_MUL( in59, 70 ) ); \
3247 0 : in43 = temp; \
3248 0 : } \
3249 0 : { \
3250 0 : gf_t temp = GF_ADD( in44, GF_MUL( in60, 71 ) ); \
3251 0 : in60 = GF_ADD( in44, GF_MUL( in60, 70 ) ); \
3252 0 : in44 = temp; \
3253 0 : } \
3254 0 : { \
3255 0 : gf_t temp = GF_ADD( in45, GF_MUL( in61, 71 ) ); \
3256 0 : in61 = GF_ADD( in45, GF_MUL( in61, 70 ) ); \
3257 0 : in45 = temp; \
3258 0 : } \
3259 0 : { \
3260 0 : gf_t temp = GF_ADD( in46, GF_MUL( in62, 71 ) ); \
3261 0 : in62 = GF_ADD( in46, GF_MUL( in62, 70 ) ); \
3262 0 : in46 = temp; \
3263 0 : } \
3264 0 : { \
3265 0 : gf_t temp = GF_ADD( in47, GF_MUL( in63, 71 ) ); \
3266 0 : in63 = GF_ADD( in47, GF_MUL( in63, 70 ) ); \
3267 0 : in47 = temp; \
3268 0 : } \
3269 0 : scratch_8 = in40; \
3270 0 : scratch_9 = in41; \
3271 0 : scratch_10 = in42; \
3272 0 : scratch_11 = in43; \
3273 0 : scratch_12 = in44; \
3274 0 : scratch_13 = in45; \
3275 0 : scratch_14 = in46; \
3276 0 : scratch_15 = in47; \
3277 0 : FD_REEDSOL_GENERATE_IFFT( 8, 32, in32, in33, in34, in35, in36, in37, in38, in39 ); \
3278 0 : in40 = GF_ADD( in32, in40 ); \
3279 0 : in41 = GF_ADD( in33, in41 ); \
3280 0 : in42 = GF_ADD( in34, in42 ); \
3281 0 : in43 = GF_ADD( in35, in43 ); \
3282 0 : in44 = GF_ADD( in36, in44 ); \
3283 0 : in45 = GF_ADD( in37, in45 ); \
3284 0 : in46 = GF_ADD( in38, in46 ); \
3285 0 : in47 = GF_ADD( in39, in47 ); \
3286 0 : FD_REEDSOL_GENERATE_FFT( 8, 40, in40, in41, in42, in43, in44, in45, in46, in47 ); \
3287 0 : in32 = GF_ADD( GF_MUL( scratch_8, 174 ), in32 ); \
3288 0 : in33 = GF_ADD( GF_MUL( scratch_9, 174 ), in33 ); \
3289 0 : in34 = GF_ADD( GF_MUL( scratch_10, 174 ), in34 ); \
3290 0 : in35 = GF_ADD( GF_MUL( scratch_11, 174 ), in35 ); \
3291 0 : in36 = GF_ADD( GF_MUL( scratch_12, 174 ), in36 ); \
3292 0 : in37 = GF_ADD( GF_MUL( scratch_13, 174 ), in37 ); \
3293 0 : in38 = GF_ADD( GF_MUL( scratch_14, 174 ), in38 ); \
3294 0 : in39 = GF_ADD( GF_MUL( scratch_15, 174 ), in39 ); \
3295 0 : in48 = GF_ADD( in32, in48 ); \
3296 0 : in49 = GF_ADD( in33, in49 ); \
3297 0 : in50 = GF_ADD( in34, in50 ); \
3298 0 : in51 = GF_ADD( in35, in51 ); \
3299 0 : in52 = GF_ADD( in36, in52 ); \
3300 0 : in53 = GF_ADD( in37, in53 ); \
3301 0 : in54 = GF_ADD( in38, in54 ); \
3302 0 : in55 = GF_ADD( in39, in55 ); \
3303 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
3304 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
3305 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
3306 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
3307 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
3308 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
3309 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
3310 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
3311 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
3312 0 : in32 = GF_ADD( in00, in32 ); \
3313 0 : in33 = GF_ADD( in01, in33 ); \
3314 0 : in34 = GF_ADD( in02, in34 ); \
3315 0 : in35 = GF_ADD( in03, in35 ); \
3316 0 : in36 = GF_ADD( in04, in36 ); \
3317 0 : in37 = GF_ADD( in05, in37 ); \
3318 0 : in38 = GF_ADD( in06, in38 ); \
3319 0 : in39 = GF_ADD( in07, in39 ); \
3320 0 : } while( 0 )
3321 :
3322 : void fd_reedsol_ppt_64_41( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
3323 : #define FD_REEDSOL_PPT_IMPL_64_41( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
3324 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
3325 0 : do { \
3326 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_13, scratch_14, scratch_15, scratch_16, scratch_17, scratch_18, scratch_19, scratch_2, scratch_20, scratch_21, scratch_22, scratch_23, scratch_24; \
3327 0 : gf_t scratch_4, scratch_9; \
3328 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
3329 0 : in41 = GF_ADD( in09, in41 ); \
3330 0 : in42 = GF_ADD( in10, in42 ); \
3331 0 : in43 = GF_ADD( in11, in43 ); \
3332 0 : in44 = GF_ADD( in12, in44 ); \
3333 0 : in45 = GF_ADD( in13, in45 ); \
3334 0 : in46 = GF_ADD( in14, in46 ); \
3335 0 : in47 = GF_ADD( in15, in47 ); \
3336 0 : in48 = GF_ADD( in16, in48 ); \
3337 0 : in49 = GF_ADD( in17, in49 ); \
3338 0 : in50 = GF_ADD( in18, in50 ); \
3339 0 : in51 = GF_ADD( in19, in51 ); \
3340 0 : in52 = GF_ADD( in20, in52 ); \
3341 0 : in53 = GF_ADD( in21, in53 ); \
3342 0 : in54 = GF_ADD( in22, in54 ); \
3343 0 : in55 = GF_ADD( in23, in55 ); \
3344 0 : in56 = GF_ADD( in24, in56 ); \
3345 0 : in57 = GF_ADD( in25, in57 ); \
3346 0 : in58 = GF_ADD( in26, in58 ); \
3347 0 : in59 = GF_ADD( in27, in59 ); \
3348 0 : in60 = GF_ADD( in28, in60 ); \
3349 0 : in61 = GF_ADD( in29, in61 ); \
3350 0 : in62 = GF_ADD( in30, in62 ); \
3351 0 : in63 = GF_ADD( in31, in63 ); \
3352 0 : scratch_16 = in48; \
3353 0 : scratch_17 = in49; \
3354 0 : scratch_18 = in50; \
3355 0 : scratch_19 = in51; \
3356 0 : scratch_20 = in52; \
3357 0 : scratch_21 = in53; \
3358 0 : scratch_22 = in54; \
3359 0 : scratch_23 = in55; \
3360 0 : scratch_24 = in56; \
3361 0 : { \
3362 0 : gf_t temp = GF_ADD( in41, GF_MUL( in57, 71 ) ); \
3363 0 : in57 = GF_ADD( in41, GF_MUL( in57, 70 ) ); \
3364 0 : in41 = temp; \
3365 0 : } \
3366 0 : { \
3367 0 : gf_t temp = GF_ADD( in42, GF_MUL( in58, 71 ) ); \
3368 0 : in58 = GF_ADD( in42, GF_MUL( in58, 70 ) ); \
3369 0 : in42 = temp; \
3370 0 : } \
3371 0 : { \
3372 0 : gf_t temp = GF_ADD( in43, GF_MUL( in59, 71 ) ); \
3373 0 : in59 = GF_ADD( in43, GF_MUL( in59, 70 ) ); \
3374 0 : in43 = temp; \
3375 0 : } \
3376 0 : { \
3377 0 : gf_t temp = GF_ADD( in44, GF_MUL( in60, 71 ) ); \
3378 0 : in60 = GF_ADD( in44, GF_MUL( in60, 70 ) ); \
3379 0 : in44 = temp; \
3380 0 : } \
3381 0 : { \
3382 0 : gf_t temp = GF_ADD( in45, GF_MUL( in61, 71 ) ); \
3383 0 : in61 = GF_ADD( in45, GF_MUL( in61, 70 ) ); \
3384 0 : in45 = temp; \
3385 0 : } \
3386 0 : { \
3387 0 : gf_t temp = GF_ADD( in46, GF_MUL( in62, 71 ) ); \
3388 0 : in62 = GF_ADD( in46, GF_MUL( in62, 70 ) ); \
3389 0 : in46 = temp; \
3390 0 : } \
3391 0 : { \
3392 0 : gf_t temp = GF_ADD( in47, GF_MUL( in63, 71 ) ); \
3393 0 : in63 = GF_ADD( in47, GF_MUL( in63, 70 ) ); \
3394 0 : in47 = temp; \
3395 0 : } \
3396 0 : scratch_9 = in41; \
3397 0 : scratch_10 = in42; \
3398 0 : scratch_11 = in43; \
3399 0 : scratch_12 = in44; \
3400 0 : scratch_13 = in45; \
3401 0 : scratch_14 = in46; \
3402 0 : scratch_15 = in47; \
3403 0 : FD_REEDSOL_GENERATE_IFFT( 8, 32, in32, in33, in34, in35, in36, in37, in38, in39 ); \
3404 0 : in41 = GF_ADD( in33, in41 ); \
3405 0 : in42 = GF_ADD( in34, in42 ); \
3406 0 : in43 = GF_ADD( in35, in43 ); \
3407 0 : in44 = GF_ADD( in36, in44 ); \
3408 0 : in45 = GF_ADD( in37, in45 ); \
3409 0 : in46 = GF_ADD( in38, in46 ); \
3410 0 : in47 = GF_ADD( in39, in47 ); \
3411 0 : scratch_4 = in44; \
3412 0 : { \
3413 0 : gf_t temp = GF_ADD( in41, GF_MUL( in45, 48 ) ); \
3414 0 : in45 = GF_ADD( in41, GF_MUL( in45, 49 ) ); \
3415 0 : in41 = temp; \
3416 0 : } \
3417 0 : { \
3418 0 : gf_t temp = GF_ADD( in42, GF_MUL( in46, 48 ) ); \
3419 0 : in46 = GF_ADD( in42, GF_MUL( in46, 49 ) ); \
3420 0 : in42 = temp; \
3421 0 : } \
3422 0 : { \
3423 0 : gf_t temp = GF_ADD( in43, GF_MUL( in47, 48 ) ); \
3424 0 : in47 = GF_ADD( in43, GF_MUL( in47, 49 ) ); \
3425 0 : in43 = temp; \
3426 0 : } \
3427 0 : scratch_2 = in42; \
3428 0 : { \
3429 0 : gf_t temp = GF_ADD( in41, GF_MUL( in43, 241 ) ); \
3430 0 : in43 = GF_ADD( in41, GF_MUL( in43, 240 ) ); \
3431 0 : in41 = temp; \
3432 0 : } \
3433 0 : { \
3434 0 : gf_t temp = GF_ADD( in40, GF_MUL( in41, 40 ) ); \
3435 0 : in41 = GF_ADD( in40, in41 ); \
3436 0 : in40 = temp; \
3437 0 : } \
3438 0 : in42 = GF_ADD( in40, in42 ); \
3439 0 : { \
3440 0 : gf_t temp = GF_ADD( in42, GF_MUL( in43, 42 ) ); \
3441 0 : in43 = GF_ADD( in42, GF_MUL( in43, 43 ) ); \
3442 0 : in42 = temp; \
3443 0 : } \
3444 0 : in40 = GF_ADD( GF_MUL( scratch_2, 241 ), in40 ); \
3445 0 : in44 = GF_ADD( in40, in44 ); \
3446 0 : FD_REEDSOL_GENERATE_FFT( 4, 44, in44, in45, in46, in47 ); \
3447 0 : in40 = GF_ADD( GF_MUL( scratch_4, 48 ), in40 ); \
3448 0 : { \
3449 0 : gf_t temp = GF_ADD( GF_MUL( in32, 175 ), GF_MUL( in40, 174 ) ); \
3450 0 : in40 = GF_ADD( in32, in40 ); \
3451 0 : in32 = temp; \
3452 0 : } \
3453 0 : in33 = GF_ADD( GF_MUL( scratch_9, 174 ), in33 ); \
3454 0 : in34 = GF_ADD( GF_MUL( scratch_10, 174 ), in34 ); \
3455 0 : in35 = GF_ADD( GF_MUL( scratch_11, 174 ), in35 ); \
3456 0 : in36 = GF_ADD( GF_MUL( scratch_12, 174 ), in36 ); \
3457 0 : in37 = GF_ADD( GF_MUL( scratch_13, 174 ), in37 ); \
3458 0 : in38 = GF_ADD( GF_MUL( scratch_14, 174 ), in38 ); \
3459 0 : in39 = GF_ADD( GF_MUL( scratch_15, 174 ), in39 ); \
3460 0 : in48 = GF_ADD( in32, in48 ); \
3461 0 : in49 = GF_ADD( in33, in49 ); \
3462 0 : in50 = GF_ADD( in34, in50 ); \
3463 0 : in51 = GF_ADD( in35, in51 ); \
3464 0 : in52 = GF_ADD( in36, in52 ); \
3465 0 : in53 = GF_ADD( in37, in53 ); \
3466 0 : in54 = GF_ADD( in38, in54 ); \
3467 0 : in55 = GF_ADD( in39, in55 ); \
3468 0 : in56 = GF_ADD( in40, in56 ); \
3469 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
3470 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
3471 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
3472 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
3473 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
3474 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
3475 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
3476 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
3477 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
3478 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
3479 0 : in32 = GF_ADD( in00, in32 ); \
3480 0 : in33 = GF_ADD( in01, in33 ); \
3481 0 : in34 = GF_ADD( in02, in34 ); \
3482 0 : in35 = GF_ADD( in03, in35 ); \
3483 0 : in36 = GF_ADD( in04, in36 ); \
3484 0 : in37 = GF_ADD( in05, in37 ); \
3485 0 : in38 = GF_ADD( in06, in38 ); \
3486 0 : in39 = GF_ADD( in07, in39 ); \
3487 0 : in40 = GF_ADD( in08, in40 ); \
3488 0 : } while( 0 )
3489 :
3490 : void fd_reedsol_ppt_64_42( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
3491 : #define FD_REEDSOL_PPT_IMPL_64_42( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
3492 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
3493 0 : do { \
3494 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_13, scratch_14, scratch_15, scratch_16, scratch_17, scratch_18, scratch_19, scratch_2, scratch_20, scratch_21, scratch_22, scratch_23, scratch_24; \
3495 0 : gf_t scratch_25, scratch_3, scratch_4, scratch_5; \
3496 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
3497 0 : in42 = GF_ADD( in10, in42 ); \
3498 0 : in43 = GF_ADD( in11, in43 ); \
3499 0 : in44 = GF_ADD( in12, in44 ); \
3500 0 : in45 = GF_ADD( in13, in45 ); \
3501 0 : in46 = GF_ADD( in14, in46 ); \
3502 0 : in47 = GF_ADD( in15, in47 ); \
3503 0 : in48 = GF_ADD( in16, in48 ); \
3504 0 : in49 = GF_ADD( in17, in49 ); \
3505 0 : in50 = GF_ADD( in18, in50 ); \
3506 0 : in51 = GF_ADD( in19, in51 ); \
3507 0 : in52 = GF_ADD( in20, in52 ); \
3508 0 : in53 = GF_ADD( in21, in53 ); \
3509 0 : in54 = GF_ADD( in22, in54 ); \
3510 0 : in55 = GF_ADD( in23, in55 ); \
3511 0 : in56 = GF_ADD( in24, in56 ); \
3512 0 : in57 = GF_ADD( in25, in57 ); \
3513 0 : in58 = GF_ADD( in26, in58 ); \
3514 0 : in59 = GF_ADD( in27, in59 ); \
3515 0 : in60 = GF_ADD( in28, in60 ); \
3516 0 : in61 = GF_ADD( in29, in61 ); \
3517 0 : in62 = GF_ADD( in30, in62 ); \
3518 0 : in63 = GF_ADD( in31, in63 ); \
3519 0 : scratch_16 = in48; \
3520 0 : scratch_17 = in49; \
3521 0 : scratch_18 = in50; \
3522 0 : scratch_19 = in51; \
3523 0 : scratch_20 = in52; \
3524 0 : scratch_21 = in53; \
3525 0 : scratch_22 = in54; \
3526 0 : scratch_23 = in55; \
3527 0 : scratch_24 = in56; \
3528 0 : scratch_25 = in57; \
3529 0 : { \
3530 0 : gf_t temp = GF_ADD( in42, GF_MUL( in58, 71 ) ); \
3531 0 : in58 = GF_ADD( in42, GF_MUL( in58, 70 ) ); \
3532 0 : in42 = temp; \
3533 0 : } \
3534 0 : { \
3535 0 : gf_t temp = GF_ADD( in43, GF_MUL( in59, 71 ) ); \
3536 0 : in59 = GF_ADD( in43, GF_MUL( in59, 70 ) ); \
3537 0 : in43 = temp; \
3538 0 : } \
3539 0 : { \
3540 0 : gf_t temp = GF_ADD( in44, GF_MUL( in60, 71 ) ); \
3541 0 : in60 = GF_ADD( in44, GF_MUL( in60, 70 ) ); \
3542 0 : in44 = temp; \
3543 0 : } \
3544 0 : { \
3545 0 : gf_t temp = GF_ADD( in45, GF_MUL( in61, 71 ) ); \
3546 0 : in61 = GF_ADD( in45, GF_MUL( in61, 70 ) ); \
3547 0 : in45 = temp; \
3548 0 : } \
3549 0 : { \
3550 0 : gf_t temp = GF_ADD( in46, GF_MUL( in62, 71 ) ); \
3551 0 : in62 = GF_ADD( in46, GF_MUL( in62, 70 ) ); \
3552 0 : in46 = temp; \
3553 0 : } \
3554 0 : { \
3555 0 : gf_t temp = GF_ADD( in47, GF_MUL( in63, 71 ) ); \
3556 0 : in63 = GF_ADD( in47, GF_MUL( in63, 70 ) ); \
3557 0 : in47 = temp; \
3558 0 : } \
3559 0 : scratch_10 = in42; \
3560 0 : scratch_11 = in43; \
3561 0 : scratch_12 = in44; \
3562 0 : scratch_13 = in45; \
3563 0 : scratch_14 = in46; \
3564 0 : scratch_15 = in47; \
3565 0 : FD_REEDSOL_GENERATE_IFFT( 8, 32, in32, in33, in34, in35, in36, in37, in38, in39 ); \
3566 0 : in42 = GF_ADD( in34, in42 ); \
3567 0 : in43 = GF_ADD( in35, in43 ); \
3568 0 : in44 = GF_ADD( in36, in44 ); \
3569 0 : in45 = GF_ADD( in37, in45 ); \
3570 0 : in46 = GF_ADD( in38, in46 ); \
3571 0 : in47 = GF_ADD( in39, in47 ); \
3572 0 : scratch_4 = in44; \
3573 0 : scratch_5 = in45; \
3574 0 : { \
3575 0 : gf_t temp = GF_ADD( in42, GF_MUL( in46, 48 ) ); \
3576 0 : in46 = GF_ADD( in42, GF_MUL( in46, 49 ) ); \
3577 0 : in42 = temp; \
3578 0 : } \
3579 0 : { \
3580 0 : gf_t temp = GF_ADD( in43, GF_MUL( in47, 48 ) ); \
3581 0 : in47 = GF_ADD( in43, GF_MUL( in47, 49 ) ); \
3582 0 : in43 = temp; \
3583 0 : } \
3584 0 : scratch_2 = in42; \
3585 0 : scratch_3 = in43; \
3586 0 : { \
3587 0 : gf_t temp = GF_ADD( GF_MUL( in40, 41 ), GF_MUL( in41, 40 ) ); \
3588 0 : in41 = GF_ADD( in40, in41 ); \
3589 0 : in40 = temp; \
3590 0 : } \
3591 0 : in42 = GF_ADD( in40, in42 ); \
3592 0 : in43 = GF_ADD( in41, in43 ); \
3593 0 : { \
3594 0 : gf_t temp = GF_ADD( in42, GF_MUL( in43, 42 ) ); \
3595 0 : in43 = GF_ADD( in42, GF_MUL( in43, 43 ) ); \
3596 0 : in42 = temp; \
3597 0 : } \
3598 0 : in40 = GF_ADD( GF_MUL( scratch_2, 241 ), in40 ); \
3599 0 : in41 = GF_ADD( GF_MUL( scratch_3, 241 ), in41 ); \
3600 0 : in44 = GF_ADD( in40, in44 ); \
3601 0 : in45 = GF_ADD( in41, in45 ); \
3602 0 : FD_REEDSOL_GENERATE_FFT( 4, 44, in44, in45, in46, in47 ); \
3603 0 : in40 = GF_ADD( GF_MUL( scratch_4, 48 ), in40 ); \
3604 0 : in41 = GF_ADD( GF_MUL( scratch_5, 48 ), in41 ); \
3605 0 : { \
3606 0 : gf_t temp = GF_ADD( GF_MUL( in32, 175 ), GF_MUL( in40, 174 ) ); \
3607 0 : in40 = GF_ADD( in32, in40 ); \
3608 0 : in32 = temp; \
3609 0 : } \
3610 0 : { \
3611 0 : gf_t temp = GF_ADD( GF_MUL( in33, 175 ), GF_MUL( in41, 174 ) ); \
3612 0 : in41 = GF_ADD( in33, in41 ); \
3613 0 : in33 = temp; \
3614 0 : } \
3615 0 : in34 = GF_ADD( GF_MUL( scratch_10, 174 ), in34 ); \
3616 0 : in35 = GF_ADD( GF_MUL( scratch_11, 174 ), in35 ); \
3617 0 : in36 = GF_ADD( GF_MUL( scratch_12, 174 ), in36 ); \
3618 0 : in37 = GF_ADD( GF_MUL( scratch_13, 174 ), in37 ); \
3619 0 : in38 = GF_ADD( GF_MUL( scratch_14, 174 ), in38 ); \
3620 0 : in39 = GF_ADD( GF_MUL( scratch_15, 174 ), in39 ); \
3621 0 : in48 = GF_ADD( in32, in48 ); \
3622 0 : in49 = GF_ADD( in33, in49 ); \
3623 0 : in50 = GF_ADD( in34, in50 ); \
3624 0 : in51 = GF_ADD( in35, in51 ); \
3625 0 : in52 = GF_ADD( in36, in52 ); \
3626 0 : in53 = GF_ADD( in37, in53 ); \
3627 0 : in54 = GF_ADD( in38, in54 ); \
3628 0 : in55 = GF_ADD( in39, in55 ); \
3629 0 : in56 = GF_ADD( in40, in56 ); \
3630 0 : in57 = GF_ADD( in41, in57 ); \
3631 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
3632 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
3633 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
3634 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
3635 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
3636 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
3637 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
3638 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
3639 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
3640 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
3641 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
3642 0 : in32 = GF_ADD( in00, in32 ); \
3643 0 : in33 = GF_ADD( in01, in33 ); \
3644 0 : in34 = GF_ADD( in02, in34 ); \
3645 0 : in35 = GF_ADD( in03, in35 ); \
3646 0 : in36 = GF_ADD( in04, in36 ); \
3647 0 : in37 = GF_ADD( in05, in37 ); \
3648 0 : in38 = GF_ADD( in06, in38 ); \
3649 0 : in39 = GF_ADD( in07, in39 ); \
3650 0 : in40 = GF_ADD( in08, in40 ); \
3651 0 : in41 = GF_ADD( in09, in41 ); \
3652 0 : } while( 0 )
3653 :
3654 : void fd_reedsol_ppt_64_43( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
3655 : #define FD_REEDSOL_PPT_IMPL_64_43( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
3656 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
3657 0 : do { \
3658 0 : gf_t scratch_11, scratch_12, scratch_13, scratch_14, scratch_15, scratch_16, scratch_17, scratch_18, scratch_19, scratch_20, scratch_21, scratch_22, scratch_23, scratch_24, scratch_25, scratch_26; \
3659 0 : gf_t scratch_3, scratch_4, scratch_5, scratch_6; \
3660 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
3661 0 : in43 = GF_ADD( in11, in43 ); \
3662 0 : in44 = GF_ADD( in12, in44 ); \
3663 0 : in45 = GF_ADD( in13, in45 ); \
3664 0 : in46 = GF_ADD( in14, in46 ); \
3665 0 : in47 = GF_ADD( in15, in47 ); \
3666 0 : in48 = GF_ADD( in16, in48 ); \
3667 0 : in49 = GF_ADD( in17, in49 ); \
3668 0 : in50 = GF_ADD( in18, in50 ); \
3669 0 : in51 = GF_ADD( in19, in51 ); \
3670 0 : in52 = GF_ADD( in20, in52 ); \
3671 0 : in53 = GF_ADD( in21, in53 ); \
3672 0 : in54 = GF_ADD( in22, in54 ); \
3673 0 : in55 = GF_ADD( in23, in55 ); \
3674 0 : in56 = GF_ADD( in24, in56 ); \
3675 0 : in57 = GF_ADD( in25, in57 ); \
3676 0 : in58 = GF_ADD( in26, in58 ); \
3677 0 : in59 = GF_ADD( in27, in59 ); \
3678 0 : in60 = GF_ADD( in28, in60 ); \
3679 0 : in61 = GF_ADD( in29, in61 ); \
3680 0 : in62 = GF_ADD( in30, in62 ); \
3681 0 : in63 = GF_ADD( in31, in63 ); \
3682 0 : scratch_16 = in48; \
3683 0 : scratch_17 = in49; \
3684 0 : scratch_18 = in50; \
3685 0 : scratch_19 = in51; \
3686 0 : scratch_20 = in52; \
3687 0 : scratch_21 = in53; \
3688 0 : scratch_22 = in54; \
3689 0 : scratch_23 = in55; \
3690 0 : scratch_24 = in56; \
3691 0 : scratch_25 = in57; \
3692 0 : scratch_26 = in58; \
3693 0 : { \
3694 0 : gf_t temp = GF_ADD( in43, GF_MUL( in59, 71 ) ); \
3695 0 : in59 = GF_ADD( in43, GF_MUL( in59, 70 ) ); \
3696 0 : in43 = temp; \
3697 0 : } \
3698 0 : { \
3699 0 : gf_t temp = GF_ADD( in44, GF_MUL( in60, 71 ) ); \
3700 0 : in60 = GF_ADD( in44, GF_MUL( in60, 70 ) ); \
3701 0 : in44 = temp; \
3702 0 : } \
3703 0 : { \
3704 0 : gf_t temp = GF_ADD( in45, GF_MUL( in61, 71 ) ); \
3705 0 : in61 = GF_ADD( in45, GF_MUL( in61, 70 ) ); \
3706 0 : in45 = temp; \
3707 0 : } \
3708 0 : { \
3709 0 : gf_t temp = GF_ADD( in46, GF_MUL( in62, 71 ) ); \
3710 0 : in62 = GF_ADD( in46, GF_MUL( in62, 70 ) ); \
3711 0 : in46 = temp; \
3712 0 : } \
3713 0 : { \
3714 0 : gf_t temp = GF_ADD( in47, GF_MUL( in63, 71 ) ); \
3715 0 : in63 = GF_ADD( in47, GF_MUL( in63, 70 ) ); \
3716 0 : in47 = temp; \
3717 0 : } \
3718 0 : scratch_11 = in43; \
3719 0 : scratch_12 = in44; \
3720 0 : scratch_13 = in45; \
3721 0 : scratch_14 = in46; \
3722 0 : scratch_15 = in47; \
3723 0 : FD_REEDSOL_GENERATE_IFFT( 8, 32, in32, in33, in34, in35, in36, in37, in38, in39 ); \
3724 0 : in43 = GF_ADD( in35, in43 ); \
3725 0 : in44 = GF_ADD( in36, in44 ); \
3726 0 : in45 = GF_ADD( in37, in45 ); \
3727 0 : in46 = GF_ADD( in38, in46 ); \
3728 0 : in47 = GF_ADD( in39, in47 ); \
3729 0 : scratch_4 = in44; \
3730 0 : scratch_5 = in45; \
3731 0 : scratch_6 = in46; \
3732 0 : { \
3733 0 : gf_t temp = GF_ADD( in43, GF_MUL( in47, 48 ) ); \
3734 0 : in47 = GF_ADD( in43, GF_MUL( in47, 49 ) ); \
3735 0 : in43 = temp; \
3736 0 : } \
3737 0 : scratch_3 = in43; \
3738 0 : { \
3739 0 : gf_t temp = GF_ADD( GF_MUL( in40, 41 ), GF_MUL( in41, 40 ) ); \
3740 0 : in41 = GF_ADD( in40, in41 ); \
3741 0 : in40 = temp; \
3742 0 : } \
3743 0 : in43 = GF_ADD( in41, in43 ); \
3744 0 : { \
3745 0 : gf_t temp = GF_ADD( in42, GF_MUL( in43, 42 ) ); \
3746 0 : in43 = GF_ADD( in42, in43 ); \
3747 0 : in42 = temp; \
3748 0 : } \
3749 0 : { \
3750 0 : gf_t temp = GF_ADD( GF_MUL( in40, 240 ), GF_MUL( in42, 241 ) ); \
3751 0 : in42 = GF_ADD( in40, in42 ); \
3752 0 : in40 = temp; \
3753 0 : } \
3754 0 : in41 = GF_ADD( GF_MUL( scratch_3, 241 ), in41 ); \
3755 0 : in44 = GF_ADD( in40, in44 ); \
3756 0 : in45 = GF_ADD( in41, in45 ); \
3757 0 : in46 = GF_ADD( in42, in46 ); \
3758 0 : FD_REEDSOL_GENERATE_FFT( 4, 44, in44, in45, in46, in47 ); \
3759 0 : in40 = GF_ADD( GF_MUL( scratch_4, 48 ), in40 ); \
3760 0 : in41 = GF_ADD( GF_MUL( scratch_5, 48 ), in41 ); \
3761 0 : in42 = GF_ADD( GF_MUL( scratch_6, 48 ), in42 ); \
3762 0 : { \
3763 0 : gf_t temp = GF_ADD( GF_MUL( in32, 175 ), GF_MUL( in40, 174 ) ); \
3764 0 : in40 = GF_ADD( in32, in40 ); \
3765 0 : in32 = temp; \
3766 0 : } \
3767 0 : { \
3768 0 : gf_t temp = GF_ADD( GF_MUL( in33, 175 ), GF_MUL( in41, 174 ) ); \
3769 0 : in41 = GF_ADD( in33, in41 ); \
3770 0 : in33 = temp; \
3771 0 : } \
3772 0 : { \
3773 0 : gf_t temp = GF_ADD( GF_MUL( in34, 175 ), GF_MUL( in42, 174 ) ); \
3774 0 : in42 = GF_ADD( in34, in42 ); \
3775 0 : in34 = temp; \
3776 0 : } \
3777 0 : in35 = GF_ADD( GF_MUL( scratch_11, 174 ), in35 ); \
3778 0 : in36 = GF_ADD( GF_MUL( scratch_12, 174 ), in36 ); \
3779 0 : in37 = GF_ADD( GF_MUL( scratch_13, 174 ), in37 ); \
3780 0 : in38 = GF_ADD( GF_MUL( scratch_14, 174 ), in38 ); \
3781 0 : in39 = GF_ADD( GF_MUL( scratch_15, 174 ), in39 ); \
3782 0 : in48 = GF_ADD( in32, in48 ); \
3783 0 : in49 = GF_ADD( in33, in49 ); \
3784 0 : in50 = GF_ADD( in34, in50 ); \
3785 0 : in51 = GF_ADD( in35, in51 ); \
3786 0 : in52 = GF_ADD( in36, in52 ); \
3787 0 : in53 = GF_ADD( in37, in53 ); \
3788 0 : in54 = GF_ADD( in38, in54 ); \
3789 0 : in55 = GF_ADD( in39, in55 ); \
3790 0 : in56 = GF_ADD( in40, in56 ); \
3791 0 : in57 = GF_ADD( in41, in57 ); \
3792 0 : in58 = GF_ADD( in42, in58 ); \
3793 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
3794 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
3795 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
3796 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
3797 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
3798 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
3799 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
3800 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
3801 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
3802 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
3803 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
3804 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
3805 0 : in32 = GF_ADD( in00, in32 ); \
3806 0 : in33 = GF_ADD( in01, in33 ); \
3807 0 : in34 = GF_ADD( in02, in34 ); \
3808 0 : in35 = GF_ADD( in03, in35 ); \
3809 0 : in36 = GF_ADD( in04, in36 ); \
3810 0 : in37 = GF_ADD( in05, in37 ); \
3811 0 : in38 = GF_ADD( in06, in38 ); \
3812 0 : in39 = GF_ADD( in07, in39 ); \
3813 0 : in40 = GF_ADD( in08, in40 ); \
3814 0 : in41 = GF_ADD( in09, in41 ); \
3815 0 : in42 = GF_ADD( in10, in42 ); \
3816 0 : } while( 0 )
3817 :
3818 : void fd_reedsol_ppt_64_44( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
3819 : #define FD_REEDSOL_PPT_IMPL_64_44( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
3820 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
3821 0 : do { \
3822 0 : gf_t scratch_12, scratch_13, scratch_14, scratch_15, scratch_16, scratch_17, scratch_18, scratch_19, scratch_20, scratch_21, scratch_22, scratch_23, scratch_24, scratch_25, scratch_26, scratch_27; \
3823 0 : gf_t scratch_4, scratch_5, scratch_6, scratch_7; \
3824 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
3825 0 : in44 = GF_ADD( in12, in44 ); \
3826 0 : in45 = GF_ADD( in13, in45 ); \
3827 0 : in46 = GF_ADD( in14, in46 ); \
3828 0 : in47 = GF_ADD( in15, in47 ); \
3829 0 : in48 = GF_ADD( in16, in48 ); \
3830 0 : in49 = GF_ADD( in17, in49 ); \
3831 0 : in50 = GF_ADD( in18, in50 ); \
3832 0 : in51 = GF_ADD( in19, in51 ); \
3833 0 : in52 = GF_ADD( in20, in52 ); \
3834 0 : in53 = GF_ADD( in21, in53 ); \
3835 0 : in54 = GF_ADD( in22, in54 ); \
3836 0 : in55 = GF_ADD( in23, in55 ); \
3837 0 : in56 = GF_ADD( in24, in56 ); \
3838 0 : in57 = GF_ADD( in25, in57 ); \
3839 0 : in58 = GF_ADD( in26, in58 ); \
3840 0 : in59 = GF_ADD( in27, in59 ); \
3841 0 : in60 = GF_ADD( in28, in60 ); \
3842 0 : in61 = GF_ADD( in29, in61 ); \
3843 0 : in62 = GF_ADD( in30, in62 ); \
3844 0 : in63 = GF_ADD( in31, in63 ); \
3845 0 : scratch_16 = in48; \
3846 0 : scratch_17 = in49; \
3847 0 : scratch_18 = in50; \
3848 0 : scratch_19 = in51; \
3849 0 : scratch_20 = in52; \
3850 0 : scratch_21 = in53; \
3851 0 : scratch_22 = in54; \
3852 0 : scratch_23 = in55; \
3853 0 : scratch_24 = in56; \
3854 0 : scratch_25 = in57; \
3855 0 : scratch_26 = in58; \
3856 0 : scratch_27 = in59; \
3857 0 : { \
3858 0 : gf_t temp = GF_ADD( in44, GF_MUL( in60, 71 ) ); \
3859 0 : in60 = GF_ADD( in44, GF_MUL( in60, 70 ) ); \
3860 0 : in44 = temp; \
3861 0 : } \
3862 0 : { \
3863 0 : gf_t temp = GF_ADD( in45, GF_MUL( in61, 71 ) ); \
3864 0 : in61 = GF_ADD( in45, GF_MUL( in61, 70 ) ); \
3865 0 : in45 = temp; \
3866 0 : } \
3867 0 : { \
3868 0 : gf_t temp = GF_ADD( in46, GF_MUL( in62, 71 ) ); \
3869 0 : in62 = GF_ADD( in46, GF_MUL( in62, 70 ) ); \
3870 0 : in46 = temp; \
3871 0 : } \
3872 0 : { \
3873 0 : gf_t temp = GF_ADD( in47, GF_MUL( in63, 71 ) ); \
3874 0 : in63 = GF_ADD( in47, GF_MUL( in63, 70 ) ); \
3875 0 : in47 = temp; \
3876 0 : } \
3877 0 : scratch_12 = in44; \
3878 0 : scratch_13 = in45; \
3879 0 : scratch_14 = in46; \
3880 0 : scratch_15 = in47; \
3881 0 : FD_REEDSOL_GENERATE_IFFT( 8, 32, in32, in33, in34, in35, in36, in37, in38, in39 ); \
3882 0 : in44 = GF_ADD( in36, in44 ); \
3883 0 : in45 = GF_ADD( in37, in45 ); \
3884 0 : in46 = GF_ADD( in38, in46 ); \
3885 0 : in47 = GF_ADD( in39, in47 ); \
3886 0 : scratch_4 = in44; \
3887 0 : scratch_5 = in45; \
3888 0 : scratch_6 = in46; \
3889 0 : scratch_7 = in47; \
3890 0 : FD_REEDSOL_GENERATE_IFFT( 4, 40, in40, in41, in42, in43 ); \
3891 0 : in44 = GF_ADD( in40, in44 ); \
3892 0 : in45 = GF_ADD( in41, in45 ); \
3893 0 : in46 = GF_ADD( in42, in46 ); \
3894 0 : in47 = GF_ADD( in43, in47 ); \
3895 0 : FD_REEDSOL_GENERATE_FFT( 4, 44, in44, in45, in46, in47 ); \
3896 0 : in40 = GF_ADD( GF_MUL( scratch_4, 48 ), in40 ); \
3897 0 : in41 = GF_ADD( GF_MUL( scratch_5, 48 ), in41 ); \
3898 0 : in42 = GF_ADD( GF_MUL( scratch_6, 48 ), in42 ); \
3899 0 : in43 = GF_ADD( GF_MUL( scratch_7, 48 ), in43 ); \
3900 0 : { \
3901 0 : gf_t temp = GF_ADD( GF_MUL( in32, 175 ), GF_MUL( in40, 174 ) ); \
3902 0 : in40 = GF_ADD( in32, in40 ); \
3903 0 : in32 = temp; \
3904 0 : } \
3905 0 : { \
3906 0 : gf_t temp = GF_ADD( GF_MUL( in33, 175 ), GF_MUL( in41, 174 ) ); \
3907 0 : in41 = GF_ADD( in33, in41 ); \
3908 0 : in33 = temp; \
3909 0 : } \
3910 0 : { \
3911 0 : gf_t temp = GF_ADD( GF_MUL( in34, 175 ), GF_MUL( in42, 174 ) ); \
3912 0 : in42 = GF_ADD( in34, in42 ); \
3913 0 : in34 = temp; \
3914 0 : } \
3915 0 : { \
3916 0 : gf_t temp = GF_ADD( GF_MUL( in35, 175 ), GF_MUL( in43, 174 ) ); \
3917 0 : in43 = GF_ADD( in35, in43 ); \
3918 0 : in35 = temp; \
3919 0 : } \
3920 0 : in36 = GF_ADD( GF_MUL( scratch_12, 174 ), in36 ); \
3921 0 : in37 = GF_ADD( GF_MUL( scratch_13, 174 ), in37 ); \
3922 0 : in38 = GF_ADD( GF_MUL( scratch_14, 174 ), in38 ); \
3923 0 : in39 = GF_ADD( GF_MUL( scratch_15, 174 ), in39 ); \
3924 0 : in48 = GF_ADD( in32, in48 ); \
3925 0 : in49 = GF_ADD( in33, in49 ); \
3926 0 : in50 = GF_ADD( in34, in50 ); \
3927 0 : in51 = GF_ADD( in35, in51 ); \
3928 0 : in52 = GF_ADD( in36, in52 ); \
3929 0 : in53 = GF_ADD( in37, in53 ); \
3930 0 : in54 = GF_ADD( in38, in54 ); \
3931 0 : in55 = GF_ADD( in39, in55 ); \
3932 0 : in56 = GF_ADD( in40, in56 ); \
3933 0 : in57 = GF_ADD( in41, in57 ); \
3934 0 : in58 = GF_ADD( in42, in58 ); \
3935 0 : in59 = GF_ADD( in43, in59 ); \
3936 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
3937 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
3938 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
3939 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
3940 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
3941 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
3942 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
3943 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
3944 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
3945 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
3946 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
3947 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
3948 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
3949 0 : in32 = GF_ADD( in00, in32 ); \
3950 0 : in33 = GF_ADD( in01, in33 ); \
3951 0 : in34 = GF_ADD( in02, in34 ); \
3952 0 : in35 = GF_ADD( in03, in35 ); \
3953 0 : in36 = GF_ADD( in04, in36 ); \
3954 0 : in37 = GF_ADD( in05, in37 ); \
3955 0 : in38 = GF_ADD( in06, in38 ); \
3956 0 : in39 = GF_ADD( in07, in39 ); \
3957 0 : in40 = GF_ADD( in08, in40 ); \
3958 0 : in41 = GF_ADD( in09, in41 ); \
3959 0 : in42 = GF_ADD( in10, in42 ); \
3960 0 : in43 = GF_ADD( in11, in43 ); \
3961 0 : } while( 0 )
3962 :
3963 : void fd_reedsol_ppt_64_45( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
3964 : #define FD_REEDSOL_PPT_IMPL_64_45( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
3965 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
3966 0 : do { \
3967 0 : gf_t scratch_13, scratch_14, scratch_15, scratch_16, scratch_17, scratch_18, scratch_19, scratch_2, scratch_20, scratch_21, scratch_22, scratch_23, scratch_24, scratch_25, scratch_26, scratch_27; \
3968 0 : gf_t scratch_28, scratch_5, scratch_6, scratch_7; \
3969 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
3970 0 : in45 = GF_ADD( in13, in45 ); \
3971 0 : in46 = GF_ADD( in14, in46 ); \
3972 0 : in47 = GF_ADD( in15, in47 ); \
3973 0 : in48 = GF_ADD( in16, in48 ); \
3974 0 : in49 = GF_ADD( in17, in49 ); \
3975 0 : in50 = GF_ADD( in18, in50 ); \
3976 0 : in51 = GF_ADD( in19, in51 ); \
3977 0 : in52 = GF_ADD( in20, in52 ); \
3978 0 : in53 = GF_ADD( in21, in53 ); \
3979 0 : in54 = GF_ADD( in22, in54 ); \
3980 0 : in55 = GF_ADD( in23, in55 ); \
3981 0 : in56 = GF_ADD( in24, in56 ); \
3982 0 : in57 = GF_ADD( in25, in57 ); \
3983 0 : in58 = GF_ADD( in26, in58 ); \
3984 0 : in59 = GF_ADD( in27, in59 ); \
3985 0 : in60 = GF_ADD( in28, in60 ); \
3986 0 : in61 = GF_ADD( in29, in61 ); \
3987 0 : in62 = GF_ADD( in30, in62 ); \
3988 0 : in63 = GF_ADD( in31, in63 ); \
3989 0 : scratch_16 = in48; \
3990 0 : scratch_17 = in49; \
3991 0 : scratch_18 = in50; \
3992 0 : scratch_19 = in51; \
3993 0 : scratch_20 = in52; \
3994 0 : scratch_21 = in53; \
3995 0 : scratch_22 = in54; \
3996 0 : scratch_23 = in55; \
3997 0 : scratch_24 = in56; \
3998 0 : scratch_25 = in57; \
3999 0 : scratch_26 = in58; \
4000 0 : scratch_27 = in59; \
4001 0 : scratch_28 = in60; \
4002 0 : { \
4003 0 : gf_t temp = GF_ADD( in45, GF_MUL( in61, 71 ) ); \
4004 0 : in61 = GF_ADD( in45, GF_MUL( in61, 70 ) ); \
4005 0 : in45 = temp; \
4006 0 : } \
4007 0 : { \
4008 0 : gf_t temp = GF_ADD( in46, GF_MUL( in62, 71 ) ); \
4009 0 : in62 = GF_ADD( in46, GF_MUL( in62, 70 ) ); \
4010 0 : in46 = temp; \
4011 0 : } \
4012 0 : { \
4013 0 : gf_t temp = GF_ADD( in47, GF_MUL( in63, 71 ) ); \
4014 0 : in63 = GF_ADD( in47, GF_MUL( in63, 70 ) ); \
4015 0 : in47 = temp; \
4016 0 : } \
4017 0 : scratch_13 = in45; \
4018 0 : scratch_14 = in46; \
4019 0 : scratch_15 = in47; \
4020 0 : FD_REEDSOL_GENERATE_IFFT( 8, 32, in32, in33, in34, in35, in36, in37, in38, in39 ); \
4021 0 : in45 = GF_ADD( in37, in45 ); \
4022 0 : in46 = GF_ADD( in38, in46 ); \
4023 0 : in47 = GF_ADD( in39, in47 ); \
4024 0 : scratch_5 = in45; \
4025 0 : scratch_6 = in46; \
4026 0 : scratch_7 = in47; \
4027 0 : FD_REEDSOL_GENERATE_IFFT( 4, 40, in40, in41, in42, in43 ); \
4028 0 : in45 = GF_ADD( in41, in45 ); \
4029 0 : in46 = GF_ADD( in42, in46 ); \
4030 0 : in47 = GF_ADD( in43, in47 ); \
4031 0 : scratch_2 = in46; \
4032 0 : { \
4033 0 : gf_t temp = GF_ADD( in45, GF_MUL( in47, 247 ) ); \
4034 0 : in47 = GF_ADD( in45, GF_MUL( in47, 246 ) ); \
4035 0 : in45 = temp; \
4036 0 : } \
4037 0 : { \
4038 0 : gf_t temp = GF_ADD( in44, GF_MUL( in45, 44 ) ); \
4039 0 : in45 = GF_ADD( in44, in45 ); \
4040 0 : in44 = temp; \
4041 0 : } \
4042 0 : in46 = GF_ADD( in44, in46 ); \
4043 0 : { \
4044 0 : gf_t temp = GF_ADD( in46, GF_MUL( in47, 46 ) ); \
4045 0 : in47 = GF_ADD( in46, GF_MUL( in47, 47 ) ); \
4046 0 : in46 = temp; \
4047 0 : } \
4048 0 : in44 = GF_ADD( GF_MUL( scratch_2, 247 ), in44 ); \
4049 0 : { \
4050 0 : gf_t temp = GF_ADD( GF_MUL( in40, 49 ), GF_MUL( in44, 48 ) ); \
4051 0 : in44 = GF_ADD( in40, in44 ); \
4052 0 : in40 = temp; \
4053 0 : } \
4054 0 : in41 = GF_ADD( GF_MUL( scratch_5, 48 ), in41 ); \
4055 0 : in42 = GF_ADD( GF_MUL( scratch_6, 48 ), in42 ); \
4056 0 : in43 = GF_ADD( GF_MUL( scratch_7, 48 ), in43 ); \
4057 0 : { \
4058 0 : gf_t temp = GF_ADD( GF_MUL( in32, 175 ), GF_MUL( in40, 174 ) ); \
4059 0 : in40 = GF_ADD( in32, in40 ); \
4060 0 : in32 = temp; \
4061 0 : } \
4062 0 : { \
4063 0 : gf_t temp = GF_ADD( GF_MUL( in33, 175 ), GF_MUL( in41, 174 ) ); \
4064 0 : in41 = GF_ADD( in33, in41 ); \
4065 0 : in33 = temp; \
4066 0 : } \
4067 0 : { \
4068 0 : gf_t temp = GF_ADD( GF_MUL( in34, 175 ), GF_MUL( in42, 174 ) ); \
4069 0 : in42 = GF_ADD( in34, in42 ); \
4070 0 : in34 = temp; \
4071 0 : } \
4072 0 : { \
4073 0 : gf_t temp = GF_ADD( GF_MUL( in35, 175 ), GF_MUL( in43, 174 ) ); \
4074 0 : in43 = GF_ADD( in35, in43 ); \
4075 0 : in35 = temp; \
4076 0 : } \
4077 0 : { \
4078 0 : gf_t temp = GF_ADD( GF_MUL( in36, 175 ), GF_MUL( in44, 174 ) ); \
4079 0 : in44 = GF_ADD( in36, in44 ); \
4080 0 : in36 = temp; \
4081 0 : } \
4082 0 : in37 = GF_ADD( GF_MUL( scratch_13, 174 ), in37 ); \
4083 0 : in38 = GF_ADD( GF_MUL( scratch_14, 174 ), in38 ); \
4084 0 : in39 = GF_ADD( GF_MUL( scratch_15, 174 ), in39 ); \
4085 0 : in48 = GF_ADD( in32, in48 ); \
4086 0 : in49 = GF_ADD( in33, in49 ); \
4087 0 : in50 = GF_ADD( in34, in50 ); \
4088 0 : in51 = GF_ADD( in35, in51 ); \
4089 0 : in52 = GF_ADD( in36, in52 ); \
4090 0 : in53 = GF_ADD( in37, in53 ); \
4091 0 : in54 = GF_ADD( in38, in54 ); \
4092 0 : in55 = GF_ADD( in39, in55 ); \
4093 0 : in56 = GF_ADD( in40, in56 ); \
4094 0 : in57 = GF_ADD( in41, in57 ); \
4095 0 : in58 = GF_ADD( in42, in58 ); \
4096 0 : in59 = GF_ADD( in43, in59 ); \
4097 0 : in60 = GF_ADD( in44, in60 ); \
4098 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
4099 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
4100 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
4101 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
4102 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
4103 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
4104 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
4105 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
4106 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
4107 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
4108 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
4109 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
4110 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
4111 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
4112 0 : in32 = GF_ADD( in00, in32 ); \
4113 0 : in33 = GF_ADD( in01, in33 ); \
4114 0 : in34 = GF_ADD( in02, in34 ); \
4115 0 : in35 = GF_ADD( in03, in35 ); \
4116 0 : in36 = GF_ADD( in04, in36 ); \
4117 0 : in37 = GF_ADD( in05, in37 ); \
4118 0 : in38 = GF_ADD( in06, in38 ); \
4119 0 : in39 = GF_ADD( in07, in39 ); \
4120 0 : in40 = GF_ADD( in08, in40 ); \
4121 0 : in41 = GF_ADD( in09, in41 ); \
4122 0 : in42 = GF_ADD( in10, in42 ); \
4123 0 : in43 = GF_ADD( in11, in43 ); \
4124 0 : in44 = GF_ADD( in12, in44 ); \
4125 0 : } while( 0 )
4126 :
4127 : void fd_reedsol_ppt_64_46( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
4128 : #define FD_REEDSOL_PPT_IMPL_64_46( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
4129 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
4130 0 : do { \
4131 0 : gf_t scratch_14, scratch_15, scratch_16, scratch_17, scratch_18, scratch_19, scratch_2, scratch_20, scratch_21, scratch_22, scratch_23, scratch_24, scratch_25, scratch_26, scratch_27, scratch_28; \
4132 0 : gf_t scratch_29, scratch_3, scratch_6, scratch_7; \
4133 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
4134 0 : in46 = GF_ADD( in14, in46 ); \
4135 0 : in47 = GF_ADD( in15, in47 ); \
4136 0 : in48 = GF_ADD( in16, in48 ); \
4137 0 : in49 = GF_ADD( in17, in49 ); \
4138 0 : in50 = GF_ADD( in18, in50 ); \
4139 0 : in51 = GF_ADD( in19, in51 ); \
4140 0 : in52 = GF_ADD( in20, in52 ); \
4141 0 : in53 = GF_ADD( in21, in53 ); \
4142 0 : in54 = GF_ADD( in22, in54 ); \
4143 0 : in55 = GF_ADD( in23, in55 ); \
4144 0 : in56 = GF_ADD( in24, in56 ); \
4145 0 : in57 = GF_ADD( in25, in57 ); \
4146 0 : in58 = GF_ADD( in26, in58 ); \
4147 0 : in59 = GF_ADD( in27, in59 ); \
4148 0 : in60 = GF_ADD( in28, in60 ); \
4149 0 : in61 = GF_ADD( in29, in61 ); \
4150 0 : in62 = GF_ADD( in30, in62 ); \
4151 0 : in63 = GF_ADD( in31, in63 ); \
4152 0 : scratch_16 = in48; \
4153 0 : scratch_17 = in49; \
4154 0 : scratch_18 = in50; \
4155 0 : scratch_19 = in51; \
4156 0 : scratch_20 = in52; \
4157 0 : scratch_21 = in53; \
4158 0 : scratch_22 = in54; \
4159 0 : scratch_23 = in55; \
4160 0 : scratch_24 = in56; \
4161 0 : scratch_25 = in57; \
4162 0 : scratch_26 = in58; \
4163 0 : scratch_27 = in59; \
4164 0 : scratch_28 = in60; \
4165 0 : scratch_29 = in61; \
4166 0 : { \
4167 0 : gf_t temp = GF_ADD( in46, GF_MUL( in62, 71 ) ); \
4168 0 : in62 = GF_ADD( in46, GF_MUL( in62, 70 ) ); \
4169 0 : in46 = temp; \
4170 0 : } \
4171 0 : { \
4172 0 : gf_t temp = GF_ADD( in47, GF_MUL( in63, 71 ) ); \
4173 0 : in63 = GF_ADD( in47, GF_MUL( in63, 70 ) ); \
4174 0 : in47 = temp; \
4175 0 : } \
4176 0 : scratch_14 = in46; \
4177 0 : scratch_15 = in47; \
4178 0 : FD_REEDSOL_GENERATE_IFFT( 8, 32, in32, in33, in34, in35, in36, in37, in38, in39 ); \
4179 0 : in46 = GF_ADD( in38, in46 ); \
4180 0 : in47 = GF_ADD( in39, in47 ); \
4181 0 : scratch_6 = in46; \
4182 0 : scratch_7 = in47; \
4183 0 : FD_REEDSOL_GENERATE_IFFT( 4, 40, in40, in41, in42, in43 ); \
4184 0 : in46 = GF_ADD( in42, in46 ); \
4185 0 : in47 = GF_ADD( in43, in47 ); \
4186 0 : scratch_2 = in46; \
4187 0 : scratch_3 = in47; \
4188 0 : { \
4189 0 : gf_t temp = GF_ADD( GF_MUL( in44, 45 ), GF_MUL( in45, 44 ) ); \
4190 0 : in45 = GF_ADD( in44, in45 ); \
4191 0 : in44 = temp; \
4192 0 : } \
4193 0 : in46 = GF_ADD( in44, in46 ); \
4194 0 : in47 = GF_ADD( in45, in47 ); \
4195 0 : { \
4196 0 : gf_t temp = GF_ADD( in46, GF_MUL( in47, 46 ) ); \
4197 0 : in47 = GF_ADD( in46, GF_MUL( in47, 47 ) ); \
4198 0 : in46 = temp; \
4199 0 : } \
4200 0 : in44 = GF_ADD( GF_MUL( scratch_2, 247 ), in44 ); \
4201 0 : in45 = GF_ADD( GF_MUL( scratch_3, 247 ), in45 ); \
4202 0 : { \
4203 0 : gf_t temp = GF_ADD( GF_MUL( in40, 49 ), GF_MUL( in44, 48 ) ); \
4204 0 : in44 = GF_ADD( in40, in44 ); \
4205 0 : in40 = temp; \
4206 0 : } \
4207 0 : { \
4208 0 : gf_t temp = GF_ADD( GF_MUL( in41, 49 ), GF_MUL( in45, 48 ) ); \
4209 0 : in45 = GF_ADD( in41, in45 ); \
4210 0 : in41 = temp; \
4211 0 : } \
4212 0 : in42 = GF_ADD( GF_MUL( scratch_6, 48 ), in42 ); \
4213 0 : in43 = GF_ADD( GF_MUL( scratch_7, 48 ), in43 ); \
4214 0 : { \
4215 0 : gf_t temp = GF_ADD( GF_MUL( in32, 175 ), GF_MUL( in40, 174 ) ); \
4216 0 : in40 = GF_ADD( in32, in40 ); \
4217 0 : in32 = temp; \
4218 0 : } \
4219 0 : { \
4220 0 : gf_t temp = GF_ADD( GF_MUL( in33, 175 ), GF_MUL( in41, 174 ) ); \
4221 0 : in41 = GF_ADD( in33, in41 ); \
4222 0 : in33 = temp; \
4223 0 : } \
4224 0 : { \
4225 0 : gf_t temp = GF_ADD( GF_MUL( in34, 175 ), GF_MUL( in42, 174 ) ); \
4226 0 : in42 = GF_ADD( in34, in42 ); \
4227 0 : in34 = temp; \
4228 0 : } \
4229 0 : { \
4230 0 : gf_t temp = GF_ADD( GF_MUL( in35, 175 ), GF_MUL( in43, 174 ) ); \
4231 0 : in43 = GF_ADD( in35, in43 ); \
4232 0 : in35 = temp; \
4233 0 : } \
4234 0 : { \
4235 0 : gf_t temp = GF_ADD( GF_MUL( in36, 175 ), GF_MUL( in44, 174 ) ); \
4236 0 : in44 = GF_ADD( in36, in44 ); \
4237 0 : in36 = temp; \
4238 0 : } \
4239 0 : { \
4240 0 : gf_t temp = GF_ADD( GF_MUL( in37, 175 ), GF_MUL( in45, 174 ) ); \
4241 0 : in45 = GF_ADD( in37, in45 ); \
4242 0 : in37 = temp; \
4243 0 : } \
4244 0 : in38 = GF_ADD( GF_MUL( scratch_14, 174 ), in38 ); \
4245 0 : in39 = GF_ADD( GF_MUL( scratch_15, 174 ), in39 ); \
4246 0 : in48 = GF_ADD( in32, in48 ); \
4247 0 : in49 = GF_ADD( in33, in49 ); \
4248 0 : in50 = GF_ADD( in34, in50 ); \
4249 0 : in51 = GF_ADD( in35, in51 ); \
4250 0 : in52 = GF_ADD( in36, in52 ); \
4251 0 : in53 = GF_ADD( in37, in53 ); \
4252 0 : in54 = GF_ADD( in38, in54 ); \
4253 0 : in55 = GF_ADD( in39, in55 ); \
4254 0 : in56 = GF_ADD( in40, in56 ); \
4255 0 : in57 = GF_ADD( in41, in57 ); \
4256 0 : in58 = GF_ADD( in42, in58 ); \
4257 0 : in59 = GF_ADD( in43, in59 ); \
4258 0 : in60 = GF_ADD( in44, in60 ); \
4259 0 : in61 = GF_ADD( in45, in61 ); \
4260 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
4261 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
4262 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
4263 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
4264 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
4265 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
4266 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
4267 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
4268 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
4269 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
4270 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
4271 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
4272 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
4273 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
4274 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
4275 0 : in32 = GF_ADD( in00, in32 ); \
4276 0 : in33 = GF_ADD( in01, in33 ); \
4277 0 : in34 = GF_ADD( in02, in34 ); \
4278 0 : in35 = GF_ADD( in03, in35 ); \
4279 0 : in36 = GF_ADD( in04, in36 ); \
4280 0 : in37 = GF_ADD( in05, in37 ); \
4281 0 : in38 = GF_ADD( in06, in38 ); \
4282 0 : in39 = GF_ADD( in07, in39 ); \
4283 0 : in40 = GF_ADD( in08, in40 ); \
4284 0 : in41 = GF_ADD( in09, in41 ); \
4285 0 : in42 = GF_ADD( in10, in42 ); \
4286 0 : in43 = GF_ADD( in11, in43 ); \
4287 0 : in44 = GF_ADD( in12, in44 ); \
4288 0 : in45 = GF_ADD( in13, in45 ); \
4289 0 : } while( 0 )
4290 :
4291 : void fd_reedsol_ppt_64_47( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
4292 : #define FD_REEDSOL_PPT_IMPL_64_47( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
4293 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
4294 0 : do { \
4295 0 : gf_t scratch_15, scratch_16, scratch_17, scratch_18, scratch_19, scratch_20, scratch_21, scratch_22, scratch_23, scratch_24, scratch_25, scratch_26, scratch_27, scratch_28, scratch_29, scratch_3; \
4296 0 : gf_t scratch_30, scratch_7; \
4297 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
4298 0 : in47 = GF_ADD( in15, in47 ); \
4299 0 : in48 = GF_ADD( in16, in48 ); \
4300 0 : in49 = GF_ADD( in17, in49 ); \
4301 0 : in50 = GF_ADD( in18, in50 ); \
4302 0 : in51 = GF_ADD( in19, in51 ); \
4303 0 : in52 = GF_ADD( in20, in52 ); \
4304 0 : in53 = GF_ADD( in21, in53 ); \
4305 0 : in54 = GF_ADD( in22, in54 ); \
4306 0 : in55 = GF_ADD( in23, in55 ); \
4307 0 : in56 = GF_ADD( in24, in56 ); \
4308 0 : in57 = GF_ADD( in25, in57 ); \
4309 0 : in58 = GF_ADD( in26, in58 ); \
4310 0 : in59 = GF_ADD( in27, in59 ); \
4311 0 : in60 = GF_ADD( in28, in60 ); \
4312 0 : in61 = GF_ADD( in29, in61 ); \
4313 0 : in62 = GF_ADD( in30, in62 ); \
4314 0 : in63 = GF_ADD( in31, in63 ); \
4315 0 : scratch_16 = in48; \
4316 0 : scratch_17 = in49; \
4317 0 : scratch_18 = in50; \
4318 0 : scratch_19 = in51; \
4319 0 : scratch_20 = in52; \
4320 0 : scratch_21 = in53; \
4321 0 : scratch_22 = in54; \
4322 0 : scratch_23 = in55; \
4323 0 : scratch_24 = in56; \
4324 0 : scratch_25 = in57; \
4325 0 : scratch_26 = in58; \
4326 0 : scratch_27 = in59; \
4327 0 : scratch_28 = in60; \
4328 0 : scratch_29 = in61; \
4329 0 : scratch_30 = in62; \
4330 0 : { \
4331 0 : gf_t temp = GF_ADD( in47, GF_MUL( in63, 71 ) ); \
4332 0 : in63 = GF_ADD( in47, GF_MUL( in63, 70 ) ); \
4333 0 : in47 = temp; \
4334 0 : } \
4335 0 : scratch_15 = in47; \
4336 0 : FD_REEDSOL_GENERATE_IFFT( 8, 32, in32, in33, in34, in35, in36, in37, in38, in39 ); \
4337 0 : in47 = GF_ADD( in39, in47 ); \
4338 0 : scratch_7 = in47; \
4339 0 : FD_REEDSOL_GENERATE_IFFT( 4, 40, in40, in41, in42, in43 ); \
4340 0 : in47 = GF_ADD( in43, in47 ); \
4341 0 : scratch_3 = in47; \
4342 0 : { \
4343 0 : gf_t temp = GF_ADD( GF_MUL( in44, 45 ), GF_MUL( in45, 44 ) ); \
4344 0 : in45 = GF_ADD( in44, in45 ); \
4345 0 : in44 = temp; \
4346 0 : } \
4347 0 : in47 = GF_ADD( in45, in47 ); \
4348 0 : { \
4349 0 : gf_t temp = GF_ADD( in46, GF_MUL( in47, 46 ) ); \
4350 0 : in47 = GF_ADD( in46, in47 ); \
4351 0 : in46 = temp; \
4352 0 : } \
4353 0 : { \
4354 0 : gf_t temp = GF_ADD( GF_MUL( in44, 246 ), GF_MUL( in46, 247 ) ); \
4355 0 : in46 = GF_ADD( in44, in46 ); \
4356 0 : in44 = temp; \
4357 0 : } \
4358 0 : in45 = GF_ADD( GF_MUL( scratch_3, 247 ), in45 ); \
4359 0 : { \
4360 0 : gf_t temp = GF_ADD( GF_MUL( in40, 49 ), GF_MUL( in44, 48 ) ); \
4361 0 : in44 = GF_ADD( in40, in44 ); \
4362 0 : in40 = temp; \
4363 0 : } \
4364 0 : { \
4365 0 : gf_t temp = GF_ADD( GF_MUL( in41, 49 ), GF_MUL( in45, 48 ) ); \
4366 0 : in45 = GF_ADD( in41, in45 ); \
4367 0 : in41 = temp; \
4368 0 : } \
4369 0 : { \
4370 0 : gf_t temp = GF_ADD( GF_MUL( in42, 49 ), GF_MUL( in46, 48 ) ); \
4371 0 : in46 = GF_ADD( in42, in46 ); \
4372 0 : in42 = temp; \
4373 0 : } \
4374 0 : in43 = GF_ADD( GF_MUL( scratch_7, 48 ), in43 ); \
4375 0 : { \
4376 0 : gf_t temp = GF_ADD( GF_MUL( in32, 175 ), GF_MUL( in40, 174 ) ); \
4377 0 : in40 = GF_ADD( in32, in40 ); \
4378 0 : in32 = temp; \
4379 0 : } \
4380 0 : { \
4381 0 : gf_t temp = GF_ADD( GF_MUL( in33, 175 ), GF_MUL( in41, 174 ) ); \
4382 0 : in41 = GF_ADD( in33, in41 ); \
4383 0 : in33 = temp; \
4384 0 : } \
4385 0 : { \
4386 0 : gf_t temp = GF_ADD( GF_MUL( in34, 175 ), GF_MUL( in42, 174 ) ); \
4387 0 : in42 = GF_ADD( in34, in42 ); \
4388 0 : in34 = temp; \
4389 0 : } \
4390 0 : { \
4391 0 : gf_t temp = GF_ADD( GF_MUL( in35, 175 ), GF_MUL( in43, 174 ) ); \
4392 0 : in43 = GF_ADD( in35, in43 ); \
4393 0 : in35 = temp; \
4394 0 : } \
4395 0 : { \
4396 0 : gf_t temp = GF_ADD( GF_MUL( in36, 175 ), GF_MUL( in44, 174 ) ); \
4397 0 : in44 = GF_ADD( in36, in44 ); \
4398 0 : in36 = temp; \
4399 0 : } \
4400 0 : { \
4401 0 : gf_t temp = GF_ADD( GF_MUL( in37, 175 ), GF_MUL( in45, 174 ) ); \
4402 0 : in45 = GF_ADD( in37, in45 ); \
4403 0 : in37 = temp; \
4404 0 : } \
4405 0 : { \
4406 0 : gf_t temp = GF_ADD( GF_MUL( in38, 175 ), GF_MUL( in46, 174 ) ); \
4407 0 : in46 = GF_ADD( in38, in46 ); \
4408 0 : in38 = temp; \
4409 0 : } \
4410 0 : in39 = GF_ADD( GF_MUL( scratch_15, 174 ), in39 ); \
4411 0 : in48 = GF_ADD( in32, in48 ); \
4412 0 : in49 = GF_ADD( in33, in49 ); \
4413 0 : in50 = GF_ADD( in34, in50 ); \
4414 0 : in51 = GF_ADD( in35, in51 ); \
4415 0 : in52 = GF_ADD( in36, in52 ); \
4416 0 : in53 = GF_ADD( in37, in53 ); \
4417 0 : in54 = GF_ADD( in38, in54 ); \
4418 0 : in55 = GF_ADD( in39, in55 ); \
4419 0 : in56 = GF_ADD( in40, in56 ); \
4420 0 : in57 = GF_ADD( in41, in57 ); \
4421 0 : in58 = GF_ADD( in42, in58 ); \
4422 0 : in59 = GF_ADD( in43, in59 ); \
4423 0 : in60 = GF_ADD( in44, in60 ); \
4424 0 : in61 = GF_ADD( in45, in61 ); \
4425 0 : in62 = GF_ADD( in46, in62 ); \
4426 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
4427 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
4428 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
4429 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
4430 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
4431 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
4432 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
4433 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
4434 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
4435 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
4436 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
4437 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
4438 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
4439 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
4440 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
4441 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
4442 0 : in32 = GF_ADD( in00, in32 ); \
4443 0 : in33 = GF_ADD( in01, in33 ); \
4444 0 : in34 = GF_ADD( in02, in34 ); \
4445 0 : in35 = GF_ADD( in03, in35 ); \
4446 0 : in36 = GF_ADD( in04, in36 ); \
4447 0 : in37 = GF_ADD( in05, in37 ); \
4448 0 : in38 = GF_ADD( in06, in38 ); \
4449 0 : in39 = GF_ADD( in07, in39 ); \
4450 0 : in40 = GF_ADD( in08, in40 ); \
4451 0 : in41 = GF_ADD( in09, in41 ); \
4452 0 : in42 = GF_ADD( in10, in42 ); \
4453 0 : in43 = GF_ADD( in11, in43 ); \
4454 0 : in44 = GF_ADD( in12, in44 ); \
4455 0 : in45 = GF_ADD( in13, in45 ); \
4456 0 : in46 = GF_ADD( in14, in46 ); \
4457 0 : } while( 0 )
4458 :
4459 : void fd_reedsol_ppt_64_48( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
4460 : #define FD_REEDSOL_PPT_IMPL_64_48( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
4461 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
4462 0 : do { \
4463 0 : gf_t scratch_16, scratch_17, scratch_18, scratch_19, scratch_20, scratch_21, scratch_22, scratch_23, scratch_24, scratch_25, scratch_26, scratch_27, scratch_28, scratch_29, scratch_30, scratch_31; \
4464 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
4465 0 : in48 = GF_ADD( in16, in48 ); \
4466 0 : in49 = GF_ADD( in17, in49 ); \
4467 0 : in50 = GF_ADD( in18, in50 ); \
4468 0 : in51 = GF_ADD( in19, in51 ); \
4469 0 : in52 = GF_ADD( in20, in52 ); \
4470 0 : in53 = GF_ADD( in21, in53 ); \
4471 0 : in54 = GF_ADD( in22, in54 ); \
4472 0 : in55 = GF_ADD( in23, in55 ); \
4473 0 : in56 = GF_ADD( in24, in56 ); \
4474 0 : in57 = GF_ADD( in25, in57 ); \
4475 0 : in58 = GF_ADD( in26, in58 ); \
4476 0 : in59 = GF_ADD( in27, in59 ); \
4477 0 : in60 = GF_ADD( in28, in60 ); \
4478 0 : in61 = GF_ADD( in29, in61 ); \
4479 0 : in62 = GF_ADD( in30, in62 ); \
4480 0 : in63 = GF_ADD( in31, in63 ); \
4481 0 : scratch_16 = in48; \
4482 0 : scratch_17 = in49; \
4483 0 : scratch_18 = in50; \
4484 0 : scratch_19 = in51; \
4485 0 : scratch_20 = in52; \
4486 0 : scratch_21 = in53; \
4487 0 : scratch_22 = in54; \
4488 0 : scratch_23 = in55; \
4489 0 : scratch_24 = in56; \
4490 0 : scratch_25 = in57; \
4491 0 : scratch_26 = in58; \
4492 0 : scratch_27 = in59; \
4493 0 : scratch_28 = in60; \
4494 0 : scratch_29 = in61; \
4495 0 : scratch_30 = in62; \
4496 0 : scratch_31 = in63; \
4497 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
4498 0 : in48 = GF_ADD( in32, in48 ); \
4499 0 : in49 = GF_ADD( in33, in49 ); \
4500 0 : in50 = GF_ADD( in34, in50 ); \
4501 0 : in51 = GF_ADD( in35, in51 ); \
4502 0 : in52 = GF_ADD( in36, in52 ); \
4503 0 : in53 = GF_ADD( in37, in53 ); \
4504 0 : in54 = GF_ADD( in38, in54 ); \
4505 0 : in55 = GF_ADD( in39, in55 ); \
4506 0 : in56 = GF_ADD( in40, in56 ); \
4507 0 : in57 = GF_ADD( in41, in57 ); \
4508 0 : in58 = GF_ADD( in42, in58 ); \
4509 0 : in59 = GF_ADD( in43, in59 ); \
4510 0 : in60 = GF_ADD( in44, in60 ); \
4511 0 : in61 = GF_ADD( in45, in61 ); \
4512 0 : in62 = GF_ADD( in46, in62 ); \
4513 0 : in63 = GF_ADD( in47, in63 ); \
4514 0 : FD_REEDSOL_GENERATE_FFT( 16, 48, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
4515 0 : in32 = GF_ADD( GF_MUL( scratch_16, 71 ), in32 ); \
4516 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
4517 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
4518 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
4519 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
4520 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
4521 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
4522 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
4523 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
4524 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
4525 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
4526 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
4527 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
4528 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
4529 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
4530 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
4531 0 : in32 = GF_ADD( in00, in32 ); \
4532 0 : in33 = GF_ADD( in01, in33 ); \
4533 0 : in34 = GF_ADD( in02, in34 ); \
4534 0 : in35 = GF_ADD( in03, in35 ); \
4535 0 : in36 = GF_ADD( in04, in36 ); \
4536 0 : in37 = GF_ADD( in05, in37 ); \
4537 0 : in38 = GF_ADD( in06, in38 ); \
4538 0 : in39 = GF_ADD( in07, in39 ); \
4539 0 : in40 = GF_ADD( in08, in40 ); \
4540 0 : in41 = GF_ADD( in09, in41 ); \
4541 0 : in42 = GF_ADD( in10, in42 ); \
4542 0 : in43 = GF_ADD( in11, in43 ); \
4543 0 : in44 = GF_ADD( in12, in44 ); \
4544 0 : in45 = GF_ADD( in13, in45 ); \
4545 0 : in46 = GF_ADD( in14, in46 ); \
4546 0 : in47 = GF_ADD( in15, in47 ); \
4547 0 : } while( 0 )
4548 :
4549 : void fd_reedsol_ppt_64_49( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
4550 : #define FD_REEDSOL_PPT_IMPL_64_49( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
4551 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
4552 0 : do { \
4553 0 : gf_t scratch_17, scratch_18, scratch_19, scratch_2, scratch_20, scratch_21, scratch_22, scratch_23, scratch_24, scratch_25, scratch_26, scratch_27, scratch_28, scratch_29, scratch_30, scratch_31; \
4554 0 : gf_t scratch_4, scratch_8; \
4555 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
4556 0 : in49 = GF_ADD( in17, in49 ); \
4557 0 : in50 = GF_ADD( in18, in50 ); \
4558 0 : in51 = GF_ADD( in19, in51 ); \
4559 0 : in52 = GF_ADD( in20, in52 ); \
4560 0 : in53 = GF_ADD( in21, in53 ); \
4561 0 : in54 = GF_ADD( in22, in54 ); \
4562 0 : in55 = GF_ADD( in23, in55 ); \
4563 0 : in56 = GF_ADD( in24, in56 ); \
4564 0 : in57 = GF_ADD( in25, in57 ); \
4565 0 : in58 = GF_ADD( in26, in58 ); \
4566 0 : in59 = GF_ADD( in27, in59 ); \
4567 0 : in60 = GF_ADD( in28, in60 ); \
4568 0 : in61 = GF_ADD( in29, in61 ); \
4569 0 : in62 = GF_ADD( in30, in62 ); \
4570 0 : in63 = GF_ADD( in31, in63 ); \
4571 0 : scratch_17 = in49; \
4572 0 : scratch_18 = in50; \
4573 0 : scratch_19 = in51; \
4574 0 : scratch_20 = in52; \
4575 0 : scratch_21 = in53; \
4576 0 : scratch_22 = in54; \
4577 0 : scratch_23 = in55; \
4578 0 : scratch_24 = in56; \
4579 0 : scratch_25 = in57; \
4580 0 : scratch_26 = in58; \
4581 0 : scratch_27 = in59; \
4582 0 : scratch_28 = in60; \
4583 0 : scratch_29 = in61; \
4584 0 : scratch_30 = in62; \
4585 0 : scratch_31 = in63; \
4586 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
4587 0 : in49 = GF_ADD( in33, in49 ); \
4588 0 : in50 = GF_ADD( in34, in50 ); \
4589 0 : in51 = GF_ADD( in35, in51 ); \
4590 0 : in52 = GF_ADD( in36, in52 ); \
4591 0 : in53 = GF_ADD( in37, in53 ); \
4592 0 : in54 = GF_ADD( in38, in54 ); \
4593 0 : in55 = GF_ADD( in39, in55 ); \
4594 0 : in56 = GF_ADD( in40, in56 ); \
4595 0 : in57 = GF_ADD( in41, in57 ); \
4596 0 : in58 = GF_ADD( in42, in58 ); \
4597 0 : in59 = GF_ADD( in43, in59 ); \
4598 0 : in60 = GF_ADD( in44, in60 ); \
4599 0 : in61 = GF_ADD( in45, in61 ); \
4600 0 : in62 = GF_ADD( in46, in62 ); \
4601 0 : in63 = GF_ADD( in47, in63 ); \
4602 0 : scratch_8 = in56; \
4603 0 : { \
4604 0 : gf_t temp = GF_ADD( in49, GF_MUL( in57, 165 ) ); \
4605 0 : in57 = GF_ADD( in49, GF_MUL( in57, 164 ) ); \
4606 0 : in49 = temp; \
4607 0 : } \
4608 0 : { \
4609 0 : gf_t temp = GF_ADD( in50, GF_MUL( in58, 165 ) ); \
4610 0 : in58 = GF_ADD( in50, GF_MUL( in58, 164 ) ); \
4611 0 : in50 = temp; \
4612 0 : } \
4613 0 : { \
4614 0 : gf_t temp = GF_ADD( in51, GF_MUL( in59, 165 ) ); \
4615 0 : in59 = GF_ADD( in51, GF_MUL( in59, 164 ) ); \
4616 0 : in51 = temp; \
4617 0 : } \
4618 0 : { \
4619 0 : gf_t temp = GF_ADD( in52, GF_MUL( in60, 165 ) ); \
4620 0 : in60 = GF_ADD( in52, GF_MUL( in60, 164 ) ); \
4621 0 : in52 = temp; \
4622 0 : } \
4623 0 : { \
4624 0 : gf_t temp = GF_ADD( in53, GF_MUL( in61, 165 ) ); \
4625 0 : in61 = GF_ADD( in53, GF_MUL( in61, 164 ) ); \
4626 0 : in53 = temp; \
4627 0 : } \
4628 0 : { \
4629 0 : gf_t temp = GF_ADD( in54, GF_MUL( in62, 165 ) ); \
4630 0 : in62 = GF_ADD( in54, GF_MUL( in62, 164 ) ); \
4631 0 : in54 = temp; \
4632 0 : } \
4633 0 : { \
4634 0 : gf_t temp = GF_ADD( in55, GF_MUL( in63, 165 ) ); \
4635 0 : in63 = GF_ADD( in55, GF_MUL( in63, 164 ) ); \
4636 0 : in55 = temp; \
4637 0 : } \
4638 0 : scratch_4 = in52; \
4639 0 : { \
4640 0 : gf_t temp = GF_ADD( in49, GF_MUL( in53, 71 ) ); \
4641 0 : in53 = GF_ADD( in49, GF_MUL( in53, 70 ) ); \
4642 0 : in49 = temp; \
4643 0 : } \
4644 0 : { \
4645 0 : gf_t temp = GF_ADD( in50, GF_MUL( in54, 71 ) ); \
4646 0 : in54 = GF_ADD( in50, GF_MUL( in54, 70 ) ); \
4647 0 : in50 = temp; \
4648 0 : } \
4649 0 : { \
4650 0 : gf_t temp = GF_ADD( in51, GF_MUL( in55, 71 ) ); \
4651 0 : in55 = GF_ADD( in51, GF_MUL( in55, 70 ) ); \
4652 0 : in51 = temp; \
4653 0 : } \
4654 0 : scratch_2 = in50; \
4655 0 : { \
4656 0 : gf_t temp = GF_ADD( in49, GF_MUL( in51, 149 ) ); \
4657 0 : in51 = GF_ADD( in49, GF_MUL( in51, 148 ) ); \
4658 0 : in49 = temp; \
4659 0 : } \
4660 0 : { \
4661 0 : gf_t temp = GF_ADD( in48, GF_MUL( in49, 48 ) ); \
4662 0 : in49 = GF_ADD( in48, in49 ); \
4663 0 : in48 = temp; \
4664 0 : } \
4665 0 : in50 = GF_ADD( in48, in50 ); \
4666 0 : { \
4667 0 : gf_t temp = GF_ADD( in50, GF_MUL( in51, 50 ) ); \
4668 0 : in51 = GF_ADD( in50, GF_MUL( in51, 51 ) ); \
4669 0 : in50 = temp; \
4670 0 : } \
4671 0 : in48 = GF_ADD( GF_MUL( scratch_2, 149 ), in48 ); \
4672 0 : in52 = GF_ADD( in48, in52 ); \
4673 0 : FD_REEDSOL_GENERATE_FFT( 4, 52, in52, in53, in54, in55 ); \
4674 0 : in48 = GF_ADD( GF_MUL( scratch_4, 71 ), in48 ); \
4675 0 : in56 = GF_ADD( in48, in56 ); \
4676 0 : FD_REEDSOL_GENERATE_FFT( 8, 56, in56, in57, in58, in59, in60, in61, in62, in63 ); \
4677 0 : in48 = GF_ADD( GF_MUL( scratch_8, 165 ), in48 ); \
4678 0 : { \
4679 0 : gf_t temp = GF_ADD( GF_MUL( in32, 70 ), GF_MUL( in48, 71 ) ); \
4680 0 : in48 = GF_ADD( in32, in48 ); \
4681 0 : in32 = temp; \
4682 0 : } \
4683 0 : in33 = GF_ADD( GF_MUL( scratch_17, 71 ), in33 ); \
4684 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
4685 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
4686 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
4687 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
4688 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
4689 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
4690 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
4691 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
4692 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
4693 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
4694 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
4695 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
4696 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
4697 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
4698 0 : in32 = GF_ADD( in00, in32 ); \
4699 0 : in33 = GF_ADD( in01, in33 ); \
4700 0 : in34 = GF_ADD( in02, in34 ); \
4701 0 : in35 = GF_ADD( in03, in35 ); \
4702 0 : in36 = GF_ADD( in04, in36 ); \
4703 0 : in37 = GF_ADD( in05, in37 ); \
4704 0 : in38 = GF_ADD( in06, in38 ); \
4705 0 : in39 = GF_ADD( in07, in39 ); \
4706 0 : in40 = GF_ADD( in08, in40 ); \
4707 0 : in41 = GF_ADD( in09, in41 ); \
4708 0 : in42 = GF_ADD( in10, in42 ); \
4709 0 : in43 = GF_ADD( in11, in43 ); \
4710 0 : in44 = GF_ADD( in12, in44 ); \
4711 0 : in45 = GF_ADD( in13, in45 ); \
4712 0 : in46 = GF_ADD( in14, in46 ); \
4713 0 : in47 = GF_ADD( in15, in47 ); \
4714 0 : in48 = GF_ADD( in16, in48 ); \
4715 0 : } while( 0 )
4716 :
4717 : void fd_reedsol_ppt_64_50( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
4718 : #define FD_REEDSOL_PPT_IMPL_64_50( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
4719 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
4720 0 : do { \
4721 0 : gf_t scratch_18, scratch_19, scratch_2, scratch_20, scratch_21, scratch_22, scratch_23, scratch_24, scratch_25, scratch_26, scratch_27, scratch_28, scratch_29, scratch_3, scratch_30, scratch_31; \
4722 0 : gf_t scratch_4, scratch_5, scratch_8, scratch_9; \
4723 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
4724 0 : in50 = GF_ADD( in18, in50 ); \
4725 0 : in51 = GF_ADD( in19, in51 ); \
4726 0 : in52 = GF_ADD( in20, in52 ); \
4727 0 : in53 = GF_ADD( in21, in53 ); \
4728 0 : in54 = GF_ADD( in22, in54 ); \
4729 0 : in55 = GF_ADD( in23, in55 ); \
4730 0 : in56 = GF_ADD( in24, in56 ); \
4731 0 : in57 = GF_ADD( in25, in57 ); \
4732 0 : in58 = GF_ADD( in26, in58 ); \
4733 0 : in59 = GF_ADD( in27, in59 ); \
4734 0 : in60 = GF_ADD( in28, in60 ); \
4735 0 : in61 = GF_ADD( in29, in61 ); \
4736 0 : in62 = GF_ADD( in30, in62 ); \
4737 0 : in63 = GF_ADD( in31, in63 ); \
4738 0 : scratch_18 = in50; \
4739 0 : scratch_19 = in51; \
4740 0 : scratch_20 = in52; \
4741 0 : scratch_21 = in53; \
4742 0 : scratch_22 = in54; \
4743 0 : scratch_23 = in55; \
4744 0 : scratch_24 = in56; \
4745 0 : scratch_25 = in57; \
4746 0 : scratch_26 = in58; \
4747 0 : scratch_27 = in59; \
4748 0 : scratch_28 = in60; \
4749 0 : scratch_29 = in61; \
4750 0 : scratch_30 = in62; \
4751 0 : scratch_31 = in63; \
4752 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
4753 0 : in50 = GF_ADD( in34, in50 ); \
4754 0 : in51 = GF_ADD( in35, in51 ); \
4755 0 : in52 = GF_ADD( in36, in52 ); \
4756 0 : in53 = GF_ADD( in37, in53 ); \
4757 0 : in54 = GF_ADD( in38, in54 ); \
4758 0 : in55 = GF_ADD( in39, in55 ); \
4759 0 : in56 = GF_ADD( in40, in56 ); \
4760 0 : in57 = GF_ADD( in41, in57 ); \
4761 0 : in58 = GF_ADD( in42, in58 ); \
4762 0 : in59 = GF_ADD( in43, in59 ); \
4763 0 : in60 = GF_ADD( in44, in60 ); \
4764 0 : in61 = GF_ADD( in45, in61 ); \
4765 0 : in62 = GF_ADD( in46, in62 ); \
4766 0 : in63 = GF_ADD( in47, in63 ); \
4767 0 : scratch_8 = in56; \
4768 0 : scratch_9 = in57; \
4769 0 : { \
4770 0 : gf_t temp = GF_ADD( in50, GF_MUL( in58, 165 ) ); \
4771 0 : in58 = GF_ADD( in50, GF_MUL( in58, 164 ) ); \
4772 0 : in50 = temp; \
4773 0 : } \
4774 0 : { \
4775 0 : gf_t temp = GF_ADD( in51, GF_MUL( in59, 165 ) ); \
4776 0 : in59 = GF_ADD( in51, GF_MUL( in59, 164 ) ); \
4777 0 : in51 = temp; \
4778 0 : } \
4779 0 : { \
4780 0 : gf_t temp = GF_ADD( in52, GF_MUL( in60, 165 ) ); \
4781 0 : in60 = GF_ADD( in52, GF_MUL( in60, 164 ) ); \
4782 0 : in52 = temp; \
4783 0 : } \
4784 0 : { \
4785 0 : gf_t temp = GF_ADD( in53, GF_MUL( in61, 165 ) ); \
4786 0 : in61 = GF_ADD( in53, GF_MUL( in61, 164 ) ); \
4787 0 : in53 = temp; \
4788 0 : } \
4789 0 : { \
4790 0 : gf_t temp = GF_ADD( in54, GF_MUL( in62, 165 ) ); \
4791 0 : in62 = GF_ADD( in54, GF_MUL( in62, 164 ) ); \
4792 0 : in54 = temp; \
4793 0 : } \
4794 0 : { \
4795 0 : gf_t temp = GF_ADD( in55, GF_MUL( in63, 165 ) ); \
4796 0 : in63 = GF_ADD( in55, GF_MUL( in63, 164 ) ); \
4797 0 : in55 = temp; \
4798 0 : } \
4799 0 : scratch_4 = in52; \
4800 0 : scratch_5 = in53; \
4801 0 : { \
4802 0 : gf_t temp = GF_ADD( in50, GF_MUL( in54, 71 ) ); \
4803 0 : in54 = GF_ADD( in50, GF_MUL( in54, 70 ) ); \
4804 0 : in50 = temp; \
4805 0 : } \
4806 0 : { \
4807 0 : gf_t temp = GF_ADD( in51, GF_MUL( in55, 71 ) ); \
4808 0 : in55 = GF_ADD( in51, GF_MUL( in55, 70 ) ); \
4809 0 : in51 = temp; \
4810 0 : } \
4811 0 : scratch_2 = in50; \
4812 0 : scratch_3 = in51; \
4813 0 : { \
4814 0 : gf_t temp = GF_ADD( GF_MUL( in48, 49 ), GF_MUL( in49, 48 ) ); \
4815 0 : in49 = GF_ADD( in48, in49 ); \
4816 0 : in48 = temp; \
4817 0 : } \
4818 0 : in50 = GF_ADD( in48, in50 ); \
4819 0 : in51 = GF_ADD( in49, in51 ); \
4820 0 : { \
4821 0 : gf_t temp = GF_ADD( in50, GF_MUL( in51, 50 ) ); \
4822 0 : in51 = GF_ADD( in50, GF_MUL( in51, 51 ) ); \
4823 0 : in50 = temp; \
4824 0 : } \
4825 0 : in48 = GF_ADD( GF_MUL( scratch_2, 149 ), in48 ); \
4826 0 : in49 = GF_ADD( GF_MUL( scratch_3, 149 ), in49 ); \
4827 0 : in52 = GF_ADD( in48, in52 ); \
4828 0 : in53 = GF_ADD( in49, in53 ); \
4829 0 : FD_REEDSOL_GENERATE_FFT( 4, 52, in52, in53, in54, in55 ); \
4830 0 : in48 = GF_ADD( GF_MUL( scratch_4, 71 ), in48 ); \
4831 0 : in49 = GF_ADD( GF_MUL( scratch_5, 71 ), in49 ); \
4832 0 : in56 = GF_ADD( in48, in56 ); \
4833 0 : in57 = GF_ADD( in49, in57 ); \
4834 0 : FD_REEDSOL_GENERATE_FFT( 8, 56, in56, in57, in58, in59, in60, in61, in62, in63 ); \
4835 0 : in48 = GF_ADD( GF_MUL( scratch_8, 165 ), in48 ); \
4836 0 : in49 = GF_ADD( GF_MUL( scratch_9, 165 ), in49 ); \
4837 0 : { \
4838 0 : gf_t temp = GF_ADD( GF_MUL( in32, 70 ), GF_MUL( in48, 71 ) ); \
4839 0 : in48 = GF_ADD( in32, in48 ); \
4840 0 : in32 = temp; \
4841 0 : } \
4842 0 : { \
4843 0 : gf_t temp = GF_ADD( GF_MUL( in33, 70 ), GF_MUL( in49, 71 ) ); \
4844 0 : in49 = GF_ADD( in33, in49 ); \
4845 0 : in33 = temp; \
4846 0 : } \
4847 0 : in34 = GF_ADD( GF_MUL( scratch_18, 71 ), in34 ); \
4848 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
4849 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
4850 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
4851 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
4852 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
4853 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
4854 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
4855 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
4856 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
4857 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
4858 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
4859 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
4860 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
4861 0 : in32 = GF_ADD( in00, in32 ); \
4862 0 : in33 = GF_ADD( in01, in33 ); \
4863 0 : in34 = GF_ADD( in02, in34 ); \
4864 0 : in35 = GF_ADD( in03, in35 ); \
4865 0 : in36 = GF_ADD( in04, in36 ); \
4866 0 : in37 = GF_ADD( in05, in37 ); \
4867 0 : in38 = GF_ADD( in06, in38 ); \
4868 0 : in39 = GF_ADD( in07, in39 ); \
4869 0 : in40 = GF_ADD( in08, in40 ); \
4870 0 : in41 = GF_ADD( in09, in41 ); \
4871 0 : in42 = GF_ADD( in10, in42 ); \
4872 0 : in43 = GF_ADD( in11, in43 ); \
4873 0 : in44 = GF_ADD( in12, in44 ); \
4874 0 : in45 = GF_ADD( in13, in45 ); \
4875 0 : in46 = GF_ADD( in14, in46 ); \
4876 0 : in47 = GF_ADD( in15, in47 ); \
4877 0 : in48 = GF_ADD( in16, in48 ); \
4878 0 : in49 = GF_ADD( in17, in49 ); \
4879 0 : } while( 0 )
4880 :
4881 : void fd_reedsol_ppt_64_51( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
4882 : #define FD_REEDSOL_PPT_IMPL_64_51( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
4883 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
4884 0 : do { \
4885 0 : gf_t scratch_10, scratch_19, scratch_20, scratch_21, scratch_22, scratch_23, scratch_24, scratch_25, scratch_26, scratch_27, scratch_28, scratch_29, scratch_3, scratch_30, scratch_31, scratch_4; \
4886 0 : gf_t scratch_5, scratch_6, scratch_8, scratch_9; \
4887 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
4888 0 : in51 = GF_ADD( in19, in51 ); \
4889 0 : in52 = GF_ADD( in20, in52 ); \
4890 0 : in53 = GF_ADD( in21, in53 ); \
4891 0 : in54 = GF_ADD( in22, in54 ); \
4892 0 : in55 = GF_ADD( in23, in55 ); \
4893 0 : in56 = GF_ADD( in24, in56 ); \
4894 0 : in57 = GF_ADD( in25, in57 ); \
4895 0 : in58 = GF_ADD( in26, in58 ); \
4896 0 : in59 = GF_ADD( in27, in59 ); \
4897 0 : in60 = GF_ADD( in28, in60 ); \
4898 0 : in61 = GF_ADD( in29, in61 ); \
4899 0 : in62 = GF_ADD( in30, in62 ); \
4900 0 : in63 = GF_ADD( in31, in63 ); \
4901 0 : scratch_19 = in51; \
4902 0 : scratch_20 = in52; \
4903 0 : scratch_21 = in53; \
4904 0 : scratch_22 = in54; \
4905 0 : scratch_23 = in55; \
4906 0 : scratch_24 = in56; \
4907 0 : scratch_25 = in57; \
4908 0 : scratch_26 = in58; \
4909 0 : scratch_27 = in59; \
4910 0 : scratch_28 = in60; \
4911 0 : scratch_29 = in61; \
4912 0 : scratch_30 = in62; \
4913 0 : scratch_31 = in63; \
4914 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
4915 0 : in51 = GF_ADD( in35, in51 ); \
4916 0 : in52 = GF_ADD( in36, in52 ); \
4917 0 : in53 = GF_ADD( in37, in53 ); \
4918 0 : in54 = GF_ADD( in38, in54 ); \
4919 0 : in55 = GF_ADD( in39, in55 ); \
4920 0 : in56 = GF_ADD( in40, in56 ); \
4921 0 : in57 = GF_ADD( in41, in57 ); \
4922 0 : in58 = GF_ADD( in42, in58 ); \
4923 0 : in59 = GF_ADD( in43, in59 ); \
4924 0 : in60 = GF_ADD( in44, in60 ); \
4925 0 : in61 = GF_ADD( in45, in61 ); \
4926 0 : in62 = GF_ADD( in46, in62 ); \
4927 0 : in63 = GF_ADD( in47, in63 ); \
4928 0 : scratch_8 = in56; \
4929 0 : scratch_9 = in57; \
4930 0 : scratch_10 = in58; \
4931 0 : { \
4932 0 : gf_t temp = GF_ADD( in51, GF_MUL( in59, 165 ) ); \
4933 0 : in59 = GF_ADD( in51, GF_MUL( in59, 164 ) ); \
4934 0 : in51 = temp; \
4935 0 : } \
4936 0 : { \
4937 0 : gf_t temp = GF_ADD( in52, GF_MUL( in60, 165 ) ); \
4938 0 : in60 = GF_ADD( in52, GF_MUL( in60, 164 ) ); \
4939 0 : in52 = temp; \
4940 0 : } \
4941 0 : { \
4942 0 : gf_t temp = GF_ADD( in53, GF_MUL( in61, 165 ) ); \
4943 0 : in61 = GF_ADD( in53, GF_MUL( in61, 164 ) ); \
4944 0 : in53 = temp; \
4945 0 : } \
4946 0 : { \
4947 0 : gf_t temp = GF_ADD( in54, GF_MUL( in62, 165 ) ); \
4948 0 : in62 = GF_ADD( in54, GF_MUL( in62, 164 ) ); \
4949 0 : in54 = temp; \
4950 0 : } \
4951 0 : { \
4952 0 : gf_t temp = GF_ADD( in55, GF_MUL( in63, 165 ) ); \
4953 0 : in63 = GF_ADD( in55, GF_MUL( in63, 164 ) ); \
4954 0 : in55 = temp; \
4955 0 : } \
4956 0 : scratch_4 = in52; \
4957 0 : scratch_5 = in53; \
4958 0 : scratch_6 = in54; \
4959 0 : { \
4960 0 : gf_t temp = GF_ADD( in51, GF_MUL( in55, 71 ) ); \
4961 0 : in55 = GF_ADD( in51, GF_MUL( in55, 70 ) ); \
4962 0 : in51 = temp; \
4963 0 : } \
4964 0 : scratch_3 = in51; \
4965 0 : { \
4966 0 : gf_t temp = GF_ADD( GF_MUL( in48, 49 ), GF_MUL( in49, 48 ) ); \
4967 0 : in49 = GF_ADD( in48, in49 ); \
4968 0 : in48 = temp; \
4969 0 : } \
4970 0 : in51 = GF_ADD( in49, in51 ); \
4971 0 : { \
4972 0 : gf_t temp = GF_ADD( in50, GF_MUL( in51, 50 ) ); \
4973 0 : in51 = GF_ADD( in50, in51 ); \
4974 0 : in50 = temp; \
4975 0 : } \
4976 0 : { \
4977 0 : gf_t temp = GF_ADD( GF_MUL( in48, 148 ), GF_MUL( in50, 149 ) ); \
4978 0 : in50 = GF_ADD( in48, in50 ); \
4979 0 : in48 = temp; \
4980 0 : } \
4981 0 : in49 = GF_ADD( GF_MUL( scratch_3, 149 ), in49 ); \
4982 0 : in52 = GF_ADD( in48, in52 ); \
4983 0 : in53 = GF_ADD( in49, in53 ); \
4984 0 : in54 = GF_ADD( in50, in54 ); \
4985 0 : FD_REEDSOL_GENERATE_FFT( 4, 52, in52, in53, in54, in55 ); \
4986 0 : in48 = GF_ADD( GF_MUL( scratch_4, 71 ), in48 ); \
4987 0 : in49 = GF_ADD( GF_MUL( scratch_5, 71 ), in49 ); \
4988 0 : in50 = GF_ADD( GF_MUL( scratch_6, 71 ), in50 ); \
4989 0 : in56 = GF_ADD( in48, in56 ); \
4990 0 : in57 = GF_ADD( in49, in57 ); \
4991 0 : in58 = GF_ADD( in50, in58 ); \
4992 0 : FD_REEDSOL_GENERATE_FFT( 8, 56, in56, in57, in58, in59, in60, in61, in62, in63 ); \
4993 0 : in48 = GF_ADD( GF_MUL( scratch_8, 165 ), in48 ); \
4994 0 : in49 = GF_ADD( GF_MUL( scratch_9, 165 ), in49 ); \
4995 0 : in50 = GF_ADD( GF_MUL( scratch_10, 165 ), in50 ); \
4996 0 : { \
4997 0 : gf_t temp = GF_ADD( GF_MUL( in32, 70 ), GF_MUL( in48, 71 ) ); \
4998 0 : in48 = GF_ADD( in32, in48 ); \
4999 0 : in32 = temp; \
5000 0 : } \
5001 0 : { \
5002 0 : gf_t temp = GF_ADD( GF_MUL( in33, 70 ), GF_MUL( in49, 71 ) ); \
5003 0 : in49 = GF_ADD( in33, in49 ); \
5004 0 : in33 = temp; \
5005 0 : } \
5006 0 : { \
5007 0 : gf_t temp = GF_ADD( GF_MUL( in34, 70 ), GF_MUL( in50, 71 ) ); \
5008 0 : in50 = GF_ADD( in34, in50 ); \
5009 0 : in34 = temp; \
5010 0 : } \
5011 0 : in35 = GF_ADD( GF_MUL( scratch_19, 71 ), in35 ); \
5012 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
5013 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
5014 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
5015 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
5016 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
5017 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
5018 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
5019 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
5020 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
5021 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
5022 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
5023 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
5024 0 : in32 = GF_ADD( in00, in32 ); \
5025 0 : in33 = GF_ADD( in01, in33 ); \
5026 0 : in34 = GF_ADD( in02, in34 ); \
5027 0 : in35 = GF_ADD( in03, in35 ); \
5028 0 : in36 = GF_ADD( in04, in36 ); \
5029 0 : in37 = GF_ADD( in05, in37 ); \
5030 0 : in38 = GF_ADD( in06, in38 ); \
5031 0 : in39 = GF_ADD( in07, in39 ); \
5032 0 : in40 = GF_ADD( in08, in40 ); \
5033 0 : in41 = GF_ADD( in09, in41 ); \
5034 0 : in42 = GF_ADD( in10, in42 ); \
5035 0 : in43 = GF_ADD( in11, in43 ); \
5036 0 : in44 = GF_ADD( in12, in44 ); \
5037 0 : in45 = GF_ADD( in13, in45 ); \
5038 0 : in46 = GF_ADD( in14, in46 ); \
5039 0 : in47 = GF_ADD( in15, in47 ); \
5040 0 : in48 = GF_ADD( in16, in48 ); \
5041 0 : in49 = GF_ADD( in17, in49 ); \
5042 0 : in50 = GF_ADD( in18, in50 ); \
5043 0 : } while( 0 )
5044 :
5045 : void fd_reedsol_ppt_64_52( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
5046 : #define FD_REEDSOL_PPT_IMPL_64_52( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
5047 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
5048 0 : do { \
5049 0 : gf_t scratch_10, scratch_11, scratch_20, scratch_21, scratch_22, scratch_23, scratch_24, scratch_25, scratch_26, scratch_27, scratch_28, scratch_29, scratch_30, scratch_31, scratch_4, scratch_5; \
5050 0 : gf_t scratch_6, scratch_7, scratch_8, scratch_9; \
5051 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
5052 0 : in52 = GF_ADD( in20, in52 ); \
5053 0 : in53 = GF_ADD( in21, in53 ); \
5054 0 : in54 = GF_ADD( in22, in54 ); \
5055 0 : in55 = GF_ADD( in23, in55 ); \
5056 0 : in56 = GF_ADD( in24, in56 ); \
5057 0 : in57 = GF_ADD( in25, in57 ); \
5058 0 : in58 = GF_ADD( in26, in58 ); \
5059 0 : in59 = GF_ADD( in27, in59 ); \
5060 0 : in60 = GF_ADD( in28, in60 ); \
5061 0 : in61 = GF_ADD( in29, in61 ); \
5062 0 : in62 = GF_ADD( in30, in62 ); \
5063 0 : in63 = GF_ADD( in31, in63 ); \
5064 0 : scratch_20 = in52; \
5065 0 : scratch_21 = in53; \
5066 0 : scratch_22 = in54; \
5067 0 : scratch_23 = in55; \
5068 0 : scratch_24 = in56; \
5069 0 : scratch_25 = in57; \
5070 0 : scratch_26 = in58; \
5071 0 : scratch_27 = in59; \
5072 0 : scratch_28 = in60; \
5073 0 : scratch_29 = in61; \
5074 0 : scratch_30 = in62; \
5075 0 : scratch_31 = in63; \
5076 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
5077 0 : in52 = GF_ADD( in36, in52 ); \
5078 0 : in53 = GF_ADD( in37, in53 ); \
5079 0 : in54 = GF_ADD( in38, in54 ); \
5080 0 : in55 = GF_ADD( in39, in55 ); \
5081 0 : in56 = GF_ADD( in40, in56 ); \
5082 0 : in57 = GF_ADD( in41, in57 ); \
5083 0 : in58 = GF_ADD( in42, in58 ); \
5084 0 : in59 = GF_ADD( in43, in59 ); \
5085 0 : in60 = GF_ADD( in44, in60 ); \
5086 0 : in61 = GF_ADD( in45, in61 ); \
5087 0 : in62 = GF_ADD( in46, in62 ); \
5088 0 : in63 = GF_ADD( in47, in63 ); \
5089 0 : scratch_8 = in56; \
5090 0 : scratch_9 = in57; \
5091 0 : scratch_10 = in58; \
5092 0 : scratch_11 = in59; \
5093 0 : { \
5094 0 : gf_t temp = GF_ADD( in52, GF_MUL( in60, 165 ) ); \
5095 0 : in60 = GF_ADD( in52, GF_MUL( in60, 164 ) ); \
5096 0 : in52 = temp; \
5097 0 : } \
5098 0 : { \
5099 0 : gf_t temp = GF_ADD( in53, GF_MUL( in61, 165 ) ); \
5100 0 : in61 = GF_ADD( in53, GF_MUL( in61, 164 ) ); \
5101 0 : in53 = temp; \
5102 0 : } \
5103 0 : { \
5104 0 : gf_t temp = GF_ADD( in54, GF_MUL( in62, 165 ) ); \
5105 0 : in62 = GF_ADD( in54, GF_MUL( in62, 164 ) ); \
5106 0 : in54 = temp; \
5107 0 : } \
5108 0 : { \
5109 0 : gf_t temp = GF_ADD( in55, GF_MUL( in63, 165 ) ); \
5110 0 : in63 = GF_ADD( in55, GF_MUL( in63, 164 ) ); \
5111 0 : in55 = temp; \
5112 0 : } \
5113 0 : scratch_4 = in52; \
5114 0 : scratch_5 = in53; \
5115 0 : scratch_6 = in54; \
5116 0 : scratch_7 = in55; \
5117 0 : FD_REEDSOL_GENERATE_IFFT( 4, 48, in48, in49, in50, in51 ); \
5118 0 : in52 = GF_ADD( in48, in52 ); \
5119 0 : in53 = GF_ADD( in49, in53 ); \
5120 0 : in54 = GF_ADD( in50, in54 ); \
5121 0 : in55 = GF_ADD( in51, in55 ); \
5122 0 : FD_REEDSOL_GENERATE_FFT( 4, 52, in52, in53, in54, in55 ); \
5123 0 : in48 = GF_ADD( GF_MUL( scratch_4, 71 ), in48 ); \
5124 0 : in49 = GF_ADD( GF_MUL( scratch_5, 71 ), in49 ); \
5125 0 : in50 = GF_ADD( GF_MUL( scratch_6, 71 ), in50 ); \
5126 0 : in51 = GF_ADD( GF_MUL( scratch_7, 71 ), in51 ); \
5127 0 : in56 = GF_ADD( in48, in56 ); \
5128 0 : in57 = GF_ADD( in49, in57 ); \
5129 0 : in58 = GF_ADD( in50, in58 ); \
5130 0 : in59 = GF_ADD( in51, in59 ); \
5131 0 : FD_REEDSOL_GENERATE_FFT( 8, 56, in56, in57, in58, in59, in60, in61, in62, in63 ); \
5132 0 : in48 = GF_ADD( GF_MUL( scratch_8, 165 ), in48 ); \
5133 0 : in49 = GF_ADD( GF_MUL( scratch_9, 165 ), in49 ); \
5134 0 : in50 = GF_ADD( GF_MUL( scratch_10, 165 ), in50 ); \
5135 0 : in51 = GF_ADD( GF_MUL( scratch_11, 165 ), in51 ); \
5136 0 : { \
5137 0 : gf_t temp = GF_ADD( GF_MUL( in32, 70 ), GF_MUL( in48, 71 ) ); \
5138 0 : in48 = GF_ADD( in32, in48 ); \
5139 0 : in32 = temp; \
5140 0 : } \
5141 0 : { \
5142 0 : gf_t temp = GF_ADD( GF_MUL( in33, 70 ), GF_MUL( in49, 71 ) ); \
5143 0 : in49 = GF_ADD( in33, in49 ); \
5144 0 : in33 = temp; \
5145 0 : } \
5146 0 : { \
5147 0 : gf_t temp = GF_ADD( GF_MUL( in34, 70 ), GF_MUL( in50, 71 ) ); \
5148 0 : in50 = GF_ADD( in34, in50 ); \
5149 0 : in34 = temp; \
5150 0 : } \
5151 0 : { \
5152 0 : gf_t temp = GF_ADD( GF_MUL( in35, 70 ), GF_MUL( in51, 71 ) ); \
5153 0 : in51 = GF_ADD( in35, in51 ); \
5154 0 : in35 = temp; \
5155 0 : } \
5156 0 : in36 = GF_ADD( GF_MUL( scratch_20, 71 ), in36 ); \
5157 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
5158 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
5159 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
5160 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
5161 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
5162 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
5163 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
5164 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
5165 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
5166 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
5167 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
5168 0 : in32 = GF_ADD( in00, in32 ); \
5169 0 : in33 = GF_ADD( in01, in33 ); \
5170 0 : in34 = GF_ADD( in02, in34 ); \
5171 0 : in35 = GF_ADD( in03, in35 ); \
5172 0 : in36 = GF_ADD( in04, in36 ); \
5173 0 : in37 = GF_ADD( in05, in37 ); \
5174 0 : in38 = GF_ADD( in06, in38 ); \
5175 0 : in39 = GF_ADD( in07, in39 ); \
5176 0 : in40 = GF_ADD( in08, in40 ); \
5177 0 : in41 = GF_ADD( in09, in41 ); \
5178 0 : in42 = GF_ADD( in10, in42 ); \
5179 0 : in43 = GF_ADD( in11, in43 ); \
5180 0 : in44 = GF_ADD( in12, in44 ); \
5181 0 : in45 = GF_ADD( in13, in45 ); \
5182 0 : in46 = GF_ADD( in14, in46 ); \
5183 0 : in47 = GF_ADD( in15, in47 ); \
5184 0 : in48 = GF_ADD( in16, in48 ); \
5185 0 : in49 = GF_ADD( in17, in49 ); \
5186 0 : in50 = GF_ADD( in18, in50 ); \
5187 0 : in51 = GF_ADD( in19, in51 ); \
5188 0 : } while( 0 )
5189 :
5190 : void fd_reedsol_ppt_64_53( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
5191 : #define FD_REEDSOL_PPT_IMPL_64_53( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
5192 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
5193 0 : do { \
5194 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_2, scratch_21, scratch_22, scratch_23, scratch_24, scratch_25, scratch_26, scratch_27, scratch_28, scratch_29, scratch_30, scratch_31, scratch_5; \
5195 0 : gf_t scratch_6, scratch_7, scratch_8, scratch_9; \
5196 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
5197 0 : in53 = GF_ADD( in21, in53 ); \
5198 0 : in54 = GF_ADD( in22, in54 ); \
5199 0 : in55 = GF_ADD( in23, in55 ); \
5200 0 : in56 = GF_ADD( in24, in56 ); \
5201 0 : in57 = GF_ADD( in25, in57 ); \
5202 0 : in58 = GF_ADD( in26, in58 ); \
5203 0 : in59 = GF_ADD( in27, in59 ); \
5204 0 : in60 = GF_ADD( in28, in60 ); \
5205 0 : in61 = GF_ADD( in29, in61 ); \
5206 0 : in62 = GF_ADD( in30, in62 ); \
5207 0 : in63 = GF_ADD( in31, in63 ); \
5208 0 : scratch_21 = in53; \
5209 0 : scratch_22 = in54; \
5210 0 : scratch_23 = in55; \
5211 0 : scratch_24 = in56; \
5212 0 : scratch_25 = in57; \
5213 0 : scratch_26 = in58; \
5214 0 : scratch_27 = in59; \
5215 0 : scratch_28 = in60; \
5216 0 : scratch_29 = in61; \
5217 0 : scratch_30 = in62; \
5218 0 : scratch_31 = in63; \
5219 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
5220 0 : in53 = GF_ADD( in37, in53 ); \
5221 0 : in54 = GF_ADD( in38, in54 ); \
5222 0 : in55 = GF_ADD( in39, in55 ); \
5223 0 : in56 = GF_ADD( in40, in56 ); \
5224 0 : in57 = GF_ADD( in41, in57 ); \
5225 0 : in58 = GF_ADD( in42, in58 ); \
5226 0 : in59 = GF_ADD( in43, in59 ); \
5227 0 : in60 = GF_ADD( in44, in60 ); \
5228 0 : in61 = GF_ADD( in45, in61 ); \
5229 0 : in62 = GF_ADD( in46, in62 ); \
5230 0 : in63 = GF_ADD( in47, in63 ); \
5231 0 : scratch_8 = in56; \
5232 0 : scratch_9 = in57; \
5233 0 : scratch_10 = in58; \
5234 0 : scratch_11 = in59; \
5235 0 : scratch_12 = in60; \
5236 0 : { \
5237 0 : gf_t temp = GF_ADD( in53, GF_MUL( in61, 165 ) ); \
5238 0 : in61 = GF_ADD( in53, GF_MUL( in61, 164 ) ); \
5239 0 : in53 = temp; \
5240 0 : } \
5241 0 : { \
5242 0 : gf_t temp = GF_ADD( in54, GF_MUL( in62, 165 ) ); \
5243 0 : in62 = GF_ADD( in54, GF_MUL( in62, 164 ) ); \
5244 0 : in54 = temp; \
5245 0 : } \
5246 0 : { \
5247 0 : gf_t temp = GF_ADD( in55, GF_MUL( in63, 165 ) ); \
5248 0 : in63 = GF_ADD( in55, GF_MUL( in63, 164 ) ); \
5249 0 : in55 = temp; \
5250 0 : } \
5251 0 : scratch_5 = in53; \
5252 0 : scratch_6 = in54; \
5253 0 : scratch_7 = in55; \
5254 0 : FD_REEDSOL_GENERATE_IFFT( 4, 48, in48, in49, in50, in51 ); \
5255 0 : in53 = GF_ADD( in49, in53 ); \
5256 0 : in54 = GF_ADD( in50, in54 ); \
5257 0 : in55 = GF_ADD( in51, in55 ); \
5258 0 : scratch_2 = in54; \
5259 0 : { \
5260 0 : gf_t temp = GF_ADD( in53, GF_MUL( in55, 147 ) ); \
5261 0 : in55 = GF_ADD( in53, GF_MUL( in55, 146 ) ); \
5262 0 : in53 = temp; \
5263 0 : } \
5264 0 : { \
5265 0 : gf_t temp = GF_ADD( in52, GF_MUL( in53, 52 ) ); \
5266 0 : in53 = GF_ADD( in52, in53 ); \
5267 0 : in52 = temp; \
5268 0 : } \
5269 0 : in54 = GF_ADD( in52, in54 ); \
5270 0 : { \
5271 0 : gf_t temp = GF_ADD( in54, GF_MUL( in55, 54 ) ); \
5272 0 : in55 = GF_ADD( in54, GF_MUL( in55, 55 ) ); \
5273 0 : in54 = temp; \
5274 0 : } \
5275 0 : in52 = GF_ADD( GF_MUL( scratch_2, 147 ), in52 ); \
5276 0 : { \
5277 0 : gf_t temp = GF_ADD( GF_MUL( in48, 70 ), GF_MUL( in52, 71 ) ); \
5278 0 : in52 = GF_ADD( in48, in52 ); \
5279 0 : in48 = temp; \
5280 0 : } \
5281 0 : in49 = GF_ADD( GF_MUL( scratch_5, 71 ), in49 ); \
5282 0 : in50 = GF_ADD( GF_MUL( scratch_6, 71 ), in50 ); \
5283 0 : in51 = GF_ADD( GF_MUL( scratch_7, 71 ), in51 ); \
5284 0 : in56 = GF_ADD( in48, in56 ); \
5285 0 : in57 = GF_ADD( in49, in57 ); \
5286 0 : in58 = GF_ADD( in50, in58 ); \
5287 0 : in59 = GF_ADD( in51, in59 ); \
5288 0 : in60 = GF_ADD( in52, in60 ); \
5289 0 : FD_REEDSOL_GENERATE_FFT( 8, 56, in56, in57, in58, in59, in60, in61, in62, in63 ); \
5290 0 : in48 = GF_ADD( GF_MUL( scratch_8, 165 ), in48 ); \
5291 0 : in49 = GF_ADD( GF_MUL( scratch_9, 165 ), in49 ); \
5292 0 : in50 = GF_ADD( GF_MUL( scratch_10, 165 ), in50 ); \
5293 0 : in51 = GF_ADD( GF_MUL( scratch_11, 165 ), in51 ); \
5294 0 : in52 = GF_ADD( GF_MUL( scratch_12, 165 ), in52 ); \
5295 0 : { \
5296 0 : gf_t temp = GF_ADD( GF_MUL( in32, 70 ), GF_MUL( in48, 71 ) ); \
5297 0 : in48 = GF_ADD( in32, in48 ); \
5298 0 : in32 = temp; \
5299 0 : } \
5300 0 : { \
5301 0 : gf_t temp = GF_ADD( GF_MUL( in33, 70 ), GF_MUL( in49, 71 ) ); \
5302 0 : in49 = GF_ADD( in33, in49 ); \
5303 0 : in33 = temp; \
5304 0 : } \
5305 0 : { \
5306 0 : gf_t temp = GF_ADD( GF_MUL( in34, 70 ), GF_MUL( in50, 71 ) ); \
5307 0 : in50 = GF_ADD( in34, in50 ); \
5308 0 : in34 = temp; \
5309 0 : } \
5310 0 : { \
5311 0 : gf_t temp = GF_ADD( GF_MUL( in35, 70 ), GF_MUL( in51, 71 ) ); \
5312 0 : in51 = GF_ADD( in35, in51 ); \
5313 0 : in35 = temp; \
5314 0 : } \
5315 0 : { \
5316 0 : gf_t temp = GF_ADD( GF_MUL( in36, 70 ), GF_MUL( in52, 71 ) ); \
5317 0 : in52 = GF_ADD( in36, in52 ); \
5318 0 : in36 = temp; \
5319 0 : } \
5320 0 : in37 = GF_ADD( GF_MUL( scratch_21, 71 ), in37 ); \
5321 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
5322 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
5323 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
5324 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
5325 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
5326 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
5327 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
5328 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
5329 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
5330 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
5331 0 : in32 = GF_ADD( in00, in32 ); \
5332 0 : in33 = GF_ADD( in01, in33 ); \
5333 0 : in34 = GF_ADD( in02, in34 ); \
5334 0 : in35 = GF_ADD( in03, in35 ); \
5335 0 : in36 = GF_ADD( in04, in36 ); \
5336 0 : in37 = GF_ADD( in05, in37 ); \
5337 0 : in38 = GF_ADD( in06, in38 ); \
5338 0 : in39 = GF_ADD( in07, in39 ); \
5339 0 : in40 = GF_ADD( in08, in40 ); \
5340 0 : in41 = GF_ADD( in09, in41 ); \
5341 0 : in42 = GF_ADD( in10, in42 ); \
5342 0 : in43 = GF_ADD( in11, in43 ); \
5343 0 : in44 = GF_ADD( in12, in44 ); \
5344 0 : in45 = GF_ADD( in13, in45 ); \
5345 0 : in46 = GF_ADD( in14, in46 ); \
5346 0 : in47 = GF_ADD( in15, in47 ); \
5347 0 : in48 = GF_ADD( in16, in48 ); \
5348 0 : in49 = GF_ADD( in17, in49 ); \
5349 0 : in50 = GF_ADD( in18, in50 ); \
5350 0 : in51 = GF_ADD( in19, in51 ); \
5351 0 : in52 = GF_ADD( in20, in52 ); \
5352 0 : } while( 0 )
5353 :
5354 : void fd_reedsol_ppt_64_54( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
5355 : #define FD_REEDSOL_PPT_IMPL_64_54( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
5356 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
5357 0 : do { \
5358 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_13, scratch_2, scratch_22, scratch_23, scratch_24, scratch_25, scratch_26, scratch_27, scratch_28, scratch_29, scratch_3, scratch_30, scratch_31; \
5359 0 : gf_t scratch_6, scratch_7, scratch_8, scratch_9; \
5360 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
5361 0 : in54 = GF_ADD( in22, in54 ); \
5362 0 : in55 = GF_ADD( in23, in55 ); \
5363 0 : in56 = GF_ADD( in24, in56 ); \
5364 0 : in57 = GF_ADD( in25, in57 ); \
5365 0 : in58 = GF_ADD( in26, in58 ); \
5366 0 : in59 = GF_ADD( in27, in59 ); \
5367 0 : in60 = GF_ADD( in28, in60 ); \
5368 0 : in61 = GF_ADD( in29, in61 ); \
5369 0 : in62 = GF_ADD( in30, in62 ); \
5370 0 : in63 = GF_ADD( in31, in63 ); \
5371 0 : scratch_22 = in54; \
5372 0 : scratch_23 = in55; \
5373 0 : scratch_24 = in56; \
5374 0 : scratch_25 = in57; \
5375 0 : scratch_26 = in58; \
5376 0 : scratch_27 = in59; \
5377 0 : scratch_28 = in60; \
5378 0 : scratch_29 = in61; \
5379 0 : scratch_30 = in62; \
5380 0 : scratch_31 = in63; \
5381 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
5382 0 : in54 = GF_ADD( in38, in54 ); \
5383 0 : in55 = GF_ADD( in39, in55 ); \
5384 0 : in56 = GF_ADD( in40, in56 ); \
5385 0 : in57 = GF_ADD( in41, in57 ); \
5386 0 : in58 = GF_ADD( in42, in58 ); \
5387 0 : in59 = GF_ADD( in43, in59 ); \
5388 0 : in60 = GF_ADD( in44, in60 ); \
5389 0 : in61 = GF_ADD( in45, in61 ); \
5390 0 : in62 = GF_ADD( in46, in62 ); \
5391 0 : in63 = GF_ADD( in47, in63 ); \
5392 0 : scratch_8 = in56; \
5393 0 : scratch_9 = in57; \
5394 0 : scratch_10 = in58; \
5395 0 : scratch_11 = in59; \
5396 0 : scratch_12 = in60; \
5397 0 : scratch_13 = in61; \
5398 0 : { \
5399 0 : gf_t temp = GF_ADD( in54, GF_MUL( in62, 165 ) ); \
5400 0 : in62 = GF_ADD( in54, GF_MUL( in62, 164 ) ); \
5401 0 : in54 = temp; \
5402 0 : } \
5403 0 : { \
5404 0 : gf_t temp = GF_ADD( in55, GF_MUL( in63, 165 ) ); \
5405 0 : in63 = GF_ADD( in55, GF_MUL( in63, 164 ) ); \
5406 0 : in55 = temp; \
5407 0 : } \
5408 0 : scratch_6 = in54; \
5409 0 : scratch_7 = in55; \
5410 0 : FD_REEDSOL_GENERATE_IFFT( 4, 48, in48, in49, in50, in51 ); \
5411 0 : in54 = GF_ADD( in50, in54 ); \
5412 0 : in55 = GF_ADD( in51, in55 ); \
5413 0 : scratch_2 = in54; \
5414 0 : scratch_3 = in55; \
5415 0 : { \
5416 0 : gf_t temp = GF_ADD( GF_MUL( in52, 53 ), GF_MUL( in53, 52 ) ); \
5417 0 : in53 = GF_ADD( in52, in53 ); \
5418 0 : in52 = temp; \
5419 0 : } \
5420 0 : in54 = GF_ADD( in52, in54 ); \
5421 0 : in55 = GF_ADD( in53, in55 ); \
5422 0 : { \
5423 0 : gf_t temp = GF_ADD( in54, GF_MUL( in55, 54 ) ); \
5424 0 : in55 = GF_ADD( in54, GF_MUL( in55, 55 ) ); \
5425 0 : in54 = temp; \
5426 0 : } \
5427 0 : in52 = GF_ADD( GF_MUL( scratch_2, 147 ), in52 ); \
5428 0 : in53 = GF_ADD( GF_MUL( scratch_3, 147 ), in53 ); \
5429 0 : { \
5430 0 : gf_t temp = GF_ADD( GF_MUL( in48, 70 ), GF_MUL( in52, 71 ) ); \
5431 0 : in52 = GF_ADD( in48, in52 ); \
5432 0 : in48 = temp; \
5433 0 : } \
5434 0 : { \
5435 0 : gf_t temp = GF_ADD( GF_MUL( in49, 70 ), GF_MUL( in53, 71 ) ); \
5436 0 : in53 = GF_ADD( in49, in53 ); \
5437 0 : in49 = temp; \
5438 0 : } \
5439 0 : in50 = GF_ADD( GF_MUL( scratch_6, 71 ), in50 ); \
5440 0 : in51 = GF_ADD( GF_MUL( scratch_7, 71 ), in51 ); \
5441 0 : in56 = GF_ADD( in48, in56 ); \
5442 0 : in57 = GF_ADD( in49, in57 ); \
5443 0 : in58 = GF_ADD( in50, in58 ); \
5444 0 : in59 = GF_ADD( in51, in59 ); \
5445 0 : in60 = GF_ADD( in52, in60 ); \
5446 0 : in61 = GF_ADD( in53, in61 ); \
5447 0 : FD_REEDSOL_GENERATE_FFT( 8, 56, in56, in57, in58, in59, in60, in61, in62, in63 ); \
5448 0 : in48 = GF_ADD( GF_MUL( scratch_8, 165 ), in48 ); \
5449 0 : in49 = GF_ADD( GF_MUL( scratch_9, 165 ), in49 ); \
5450 0 : in50 = GF_ADD( GF_MUL( scratch_10, 165 ), in50 ); \
5451 0 : in51 = GF_ADD( GF_MUL( scratch_11, 165 ), in51 ); \
5452 0 : in52 = GF_ADD( GF_MUL( scratch_12, 165 ), in52 ); \
5453 0 : in53 = GF_ADD( GF_MUL( scratch_13, 165 ), in53 ); \
5454 0 : { \
5455 0 : gf_t temp = GF_ADD( GF_MUL( in32, 70 ), GF_MUL( in48, 71 ) ); \
5456 0 : in48 = GF_ADD( in32, in48 ); \
5457 0 : in32 = temp; \
5458 0 : } \
5459 0 : { \
5460 0 : gf_t temp = GF_ADD( GF_MUL( in33, 70 ), GF_MUL( in49, 71 ) ); \
5461 0 : in49 = GF_ADD( in33, in49 ); \
5462 0 : in33 = temp; \
5463 0 : } \
5464 0 : { \
5465 0 : gf_t temp = GF_ADD( GF_MUL( in34, 70 ), GF_MUL( in50, 71 ) ); \
5466 0 : in50 = GF_ADD( in34, in50 ); \
5467 0 : in34 = temp; \
5468 0 : } \
5469 0 : { \
5470 0 : gf_t temp = GF_ADD( GF_MUL( in35, 70 ), GF_MUL( in51, 71 ) ); \
5471 0 : in51 = GF_ADD( in35, in51 ); \
5472 0 : in35 = temp; \
5473 0 : } \
5474 0 : { \
5475 0 : gf_t temp = GF_ADD( GF_MUL( in36, 70 ), GF_MUL( in52, 71 ) ); \
5476 0 : in52 = GF_ADD( in36, in52 ); \
5477 0 : in36 = temp; \
5478 0 : } \
5479 0 : { \
5480 0 : gf_t temp = GF_ADD( GF_MUL( in37, 70 ), GF_MUL( in53, 71 ) ); \
5481 0 : in53 = GF_ADD( in37, in53 ); \
5482 0 : in37 = temp; \
5483 0 : } \
5484 0 : in38 = GF_ADD( GF_MUL( scratch_22, 71 ), in38 ); \
5485 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
5486 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
5487 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
5488 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
5489 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
5490 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
5491 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
5492 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
5493 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
5494 0 : in32 = GF_ADD( in00, in32 ); \
5495 0 : in33 = GF_ADD( in01, in33 ); \
5496 0 : in34 = GF_ADD( in02, in34 ); \
5497 0 : in35 = GF_ADD( in03, in35 ); \
5498 0 : in36 = GF_ADD( in04, in36 ); \
5499 0 : in37 = GF_ADD( in05, in37 ); \
5500 0 : in38 = GF_ADD( in06, in38 ); \
5501 0 : in39 = GF_ADD( in07, in39 ); \
5502 0 : in40 = GF_ADD( in08, in40 ); \
5503 0 : in41 = GF_ADD( in09, in41 ); \
5504 0 : in42 = GF_ADD( in10, in42 ); \
5505 0 : in43 = GF_ADD( in11, in43 ); \
5506 0 : in44 = GF_ADD( in12, in44 ); \
5507 0 : in45 = GF_ADD( in13, in45 ); \
5508 0 : in46 = GF_ADD( in14, in46 ); \
5509 0 : in47 = GF_ADD( in15, in47 ); \
5510 0 : in48 = GF_ADD( in16, in48 ); \
5511 0 : in49 = GF_ADD( in17, in49 ); \
5512 0 : in50 = GF_ADD( in18, in50 ); \
5513 0 : in51 = GF_ADD( in19, in51 ); \
5514 0 : in52 = GF_ADD( in20, in52 ); \
5515 0 : in53 = GF_ADD( in21, in53 ); \
5516 0 : } while( 0 )
5517 :
5518 : void fd_reedsol_ppt_64_55( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
5519 : #define FD_REEDSOL_PPT_IMPL_64_55( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
5520 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
5521 0 : do { \
5522 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_13, scratch_14, scratch_23, scratch_24, scratch_25, scratch_26, scratch_27, scratch_28, scratch_29, scratch_3, scratch_30, scratch_31, scratch_7; \
5523 0 : gf_t scratch_8, scratch_9; \
5524 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
5525 0 : in55 = GF_ADD( in23, in55 ); \
5526 0 : in56 = GF_ADD( in24, in56 ); \
5527 0 : in57 = GF_ADD( in25, in57 ); \
5528 0 : in58 = GF_ADD( in26, in58 ); \
5529 0 : in59 = GF_ADD( in27, in59 ); \
5530 0 : in60 = GF_ADD( in28, in60 ); \
5531 0 : in61 = GF_ADD( in29, in61 ); \
5532 0 : in62 = GF_ADD( in30, in62 ); \
5533 0 : in63 = GF_ADD( in31, in63 ); \
5534 0 : scratch_23 = in55; \
5535 0 : scratch_24 = in56; \
5536 0 : scratch_25 = in57; \
5537 0 : scratch_26 = in58; \
5538 0 : scratch_27 = in59; \
5539 0 : scratch_28 = in60; \
5540 0 : scratch_29 = in61; \
5541 0 : scratch_30 = in62; \
5542 0 : scratch_31 = in63; \
5543 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
5544 0 : in55 = GF_ADD( in39, in55 ); \
5545 0 : in56 = GF_ADD( in40, in56 ); \
5546 0 : in57 = GF_ADD( in41, in57 ); \
5547 0 : in58 = GF_ADD( in42, in58 ); \
5548 0 : in59 = GF_ADD( in43, in59 ); \
5549 0 : in60 = GF_ADD( in44, in60 ); \
5550 0 : in61 = GF_ADD( in45, in61 ); \
5551 0 : in62 = GF_ADD( in46, in62 ); \
5552 0 : in63 = GF_ADD( in47, in63 ); \
5553 0 : scratch_8 = in56; \
5554 0 : scratch_9 = in57; \
5555 0 : scratch_10 = in58; \
5556 0 : scratch_11 = in59; \
5557 0 : scratch_12 = in60; \
5558 0 : scratch_13 = in61; \
5559 0 : scratch_14 = in62; \
5560 0 : { \
5561 0 : gf_t temp = GF_ADD( in55, GF_MUL( in63, 165 ) ); \
5562 0 : in63 = GF_ADD( in55, GF_MUL( in63, 164 ) ); \
5563 0 : in55 = temp; \
5564 0 : } \
5565 0 : scratch_7 = in55; \
5566 0 : FD_REEDSOL_GENERATE_IFFT( 4, 48, in48, in49, in50, in51 ); \
5567 0 : in55 = GF_ADD( in51, in55 ); \
5568 0 : scratch_3 = in55; \
5569 0 : { \
5570 0 : gf_t temp = GF_ADD( GF_MUL( in52, 53 ), GF_MUL( in53, 52 ) ); \
5571 0 : in53 = GF_ADD( in52, in53 ); \
5572 0 : in52 = temp; \
5573 0 : } \
5574 0 : in55 = GF_ADD( in53, in55 ); \
5575 0 : { \
5576 0 : gf_t temp = GF_ADD( in54, GF_MUL( in55, 54 ) ); \
5577 0 : in55 = GF_ADD( in54, in55 ); \
5578 0 : in54 = temp; \
5579 0 : } \
5580 0 : { \
5581 0 : gf_t temp = GF_ADD( GF_MUL( in52, 146 ), GF_MUL( in54, 147 ) ); \
5582 0 : in54 = GF_ADD( in52, in54 ); \
5583 0 : in52 = temp; \
5584 0 : } \
5585 0 : in53 = GF_ADD( GF_MUL( scratch_3, 147 ), in53 ); \
5586 0 : { \
5587 0 : gf_t temp = GF_ADD( GF_MUL( in48, 70 ), GF_MUL( in52, 71 ) ); \
5588 0 : in52 = GF_ADD( in48, in52 ); \
5589 0 : in48 = temp; \
5590 0 : } \
5591 0 : { \
5592 0 : gf_t temp = GF_ADD( GF_MUL( in49, 70 ), GF_MUL( in53, 71 ) ); \
5593 0 : in53 = GF_ADD( in49, in53 ); \
5594 0 : in49 = temp; \
5595 0 : } \
5596 0 : { \
5597 0 : gf_t temp = GF_ADD( GF_MUL( in50, 70 ), GF_MUL( in54, 71 ) ); \
5598 0 : in54 = GF_ADD( in50, in54 ); \
5599 0 : in50 = temp; \
5600 0 : } \
5601 0 : in51 = GF_ADD( GF_MUL( scratch_7, 71 ), in51 ); \
5602 0 : in56 = GF_ADD( in48, in56 ); \
5603 0 : in57 = GF_ADD( in49, in57 ); \
5604 0 : in58 = GF_ADD( in50, in58 ); \
5605 0 : in59 = GF_ADD( in51, in59 ); \
5606 0 : in60 = GF_ADD( in52, in60 ); \
5607 0 : in61 = GF_ADD( in53, in61 ); \
5608 0 : in62 = GF_ADD( in54, in62 ); \
5609 0 : FD_REEDSOL_GENERATE_FFT( 8, 56, in56, in57, in58, in59, in60, in61, in62, in63 ); \
5610 0 : in48 = GF_ADD( GF_MUL( scratch_8, 165 ), in48 ); \
5611 0 : in49 = GF_ADD( GF_MUL( scratch_9, 165 ), in49 ); \
5612 0 : in50 = GF_ADD( GF_MUL( scratch_10, 165 ), in50 ); \
5613 0 : in51 = GF_ADD( GF_MUL( scratch_11, 165 ), in51 ); \
5614 0 : in52 = GF_ADD( GF_MUL( scratch_12, 165 ), in52 ); \
5615 0 : in53 = GF_ADD( GF_MUL( scratch_13, 165 ), in53 ); \
5616 0 : in54 = GF_ADD( GF_MUL( scratch_14, 165 ), in54 ); \
5617 0 : { \
5618 0 : gf_t temp = GF_ADD( GF_MUL( in32, 70 ), GF_MUL( in48, 71 ) ); \
5619 0 : in48 = GF_ADD( in32, in48 ); \
5620 0 : in32 = temp; \
5621 0 : } \
5622 0 : { \
5623 0 : gf_t temp = GF_ADD( GF_MUL( in33, 70 ), GF_MUL( in49, 71 ) ); \
5624 0 : in49 = GF_ADD( in33, in49 ); \
5625 0 : in33 = temp; \
5626 0 : } \
5627 0 : { \
5628 0 : gf_t temp = GF_ADD( GF_MUL( in34, 70 ), GF_MUL( in50, 71 ) ); \
5629 0 : in50 = GF_ADD( in34, in50 ); \
5630 0 : in34 = temp; \
5631 0 : } \
5632 0 : { \
5633 0 : gf_t temp = GF_ADD( GF_MUL( in35, 70 ), GF_MUL( in51, 71 ) ); \
5634 0 : in51 = GF_ADD( in35, in51 ); \
5635 0 : in35 = temp; \
5636 0 : } \
5637 0 : { \
5638 0 : gf_t temp = GF_ADD( GF_MUL( in36, 70 ), GF_MUL( in52, 71 ) ); \
5639 0 : in52 = GF_ADD( in36, in52 ); \
5640 0 : in36 = temp; \
5641 0 : } \
5642 0 : { \
5643 0 : gf_t temp = GF_ADD( GF_MUL( in37, 70 ), GF_MUL( in53, 71 ) ); \
5644 0 : in53 = GF_ADD( in37, in53 ); \
5645 0 : in37 = temp; \
5646 0 : } \
5647 0 : { \
5648 0 : gf_t temp = GF_ADD( GF_MUL( in38, 70 ), GF_MUL( in54, 71 ) ); \
5649 0 : in54 = GF_ADD( in38, in54 ); \
5650 0 : in38 = temp; \
5651 0 : } \
5652 0 : in39 = GF_ADD( GF_MUL( scratch_23, 71 ), in39 ); \
5653 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
5654 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
5655 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
5656 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
5657 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
5658 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
5659 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
5660 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
5661 0 : in32 = GF_ADD( in00, in32 ); \
5662 0 : in33 = GF_ADD( in01, in33 ); \
5663 0 : in34 = GF_ADD( in02, in34 ); \
5664 0 : in35 = GF_ADD( in03, in35 ); \
5665 0 : in36 = GF_ADD( in04, in36 ); \
5666 0 : in37 = GF_ADD( in05, in37 ); \
5667 0 : in38 = GF_ADD( in06, in38 ); \
5668 0 : in39 = GF_ADD( in07, in39 ); \
5669 0 : in40 = GF_ADD( in08, in40 ); \
5670 0 : in41 = GF_ADD( in09, in41 ); \
5671 0 : in42 = GF_ADD( in10, in42 ); \
5672 0 : in43 = GF_ADD( in11, in43 ); \
5673 0 : in44 = GF_ADD( in12, in44 ); \
5674 0 : in45 = GF_ADD( in13, in45 ); \
5675 0 : in46 = GF_ADD( in14, in46 ); \
5676 0 : in47 = GF_ADD( in15, in47 ); \
5677 0 : in48 = GF_ADD( in16, in48 ); \
5678 0 : in49 = GF_ADD( in17, in49 ); \
5679 0 : in50 = GF_ADD( in18, in50 ); \
5680 0 : in51 = GF_ADD( in19, in51 ); \
5681 0 : in52 = GF_ADD( in20, in52 ); \
5682 0 : in53 = GF_ADD( in21, in53 ); \
5683 0 : in54 = GF_ADD( in22, in54 ); \
5684 0 : } while( 0 )
5685 :
5686 : void fd_reedsol_ppt_64_56( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
5687 : #define FD_REEDSOL_PPT_IMPL_64_56( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
5688 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
5689 0 : do { \
5690 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_13, scratch_14, scratch_15, scratch_24, scratch_25, scratch_26, scratch_27, scratch_28, scratch_29, scratch_30, scratch_31, scratch_8, scratch_9; \
5691 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
5692 0 : in56 = GF_ADD( in24, in56 ); \
5693 0 : in57 = GF_ADD( in25, in57 ); \
5694 0 : in58 = GF_ADD( in26, in58 ); \
5695 0 : in59 = GF_ADD( in27, in59 ); \
5696 0 : in60 = GF_ADD( in28, in60 ); \
5697 0 : in61 = GF_ADD( in29, in61 ); \
5698 0 : in62 = GF_ADD( in30, in62 ); \
5699 0 : in63 = GF_ADD( in31, in63 ); \
5700 0 : scratch_24 = in56; \
5701 0 : scratch_25 = in57; \
5702 0 : scratch_26 = in58; \
5703 0 : scratch_27 = in59; \
5704 0 : scratch_28 = in60; \
5705 0 : scratch_29 = in61; \
5706 0 : scratch_30 = in62; \
5707 0 : scratch_31 = in63; \
5708 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
5709 0 : in56 = GF_ADD( in40, in56 ); \
5710 0 : in57 = GF_ADD( in41, in57 ); \
5711 0 : in58 = GF_ADD( in42, in58 ); \
5712 0 : in59 = GF_ADD( in43, in59 ); \
5713 0 : in60 = GF_ADD( in44, in60 ); \
5714 0 : in61 = GF_ADD( in45, in61 ); \
5715 0 : in62 = GF_ADD( in46, in62 ); \
5716 0 : in63 = GF_ADD( in47, in63 ); \
5717 0 : scratch_8 = in56; \
5718 0 : scratch_9 = in57; \
5719 0 : scratch_10 = in58; \
5720 0 : scratch_11 = in59; \
5721 0 : scratch_12 = in60; \
5722 0 : scratch_13 = in61; \
5723 0 : scratch_14 = in62; \
5724 0 : scratch_15 = in63; \
5725 0 : FD_REEDSOL_GENERATE_IFFT( 8, 48, in48, in49, in50, in51, in52, in53, in54, in55 ); \
5726 0 : in56 = GF_ADD( in48, in56 ); \
5727 0 : in57 = GF_ADD( in49, in57 ); \
5728 0 : in58 = GF_ADD( in50, in58 ); \
5729 0 : in59 = GF_ADD( in51, in59 ); \
5730 0 : in60 = GF_ADD( in52, in60 ); \
5731 0 : in61 = GF_ADD( in53, in61 ); \
5732 0 : in62 = GF_ADD( in54, in62 ); \
5733 0 : in63 = GF_ADD( in55, in63 ); \
5734 0 : FD_REEDSOL_GENERATE_FFT( 8, 56, in56, in57, in58, in59, in60, in61, in62, in63 ); \
5735 0 : in48 = GF_ADD( GF_MUL( scratch_8, 165 ), in48 ); \
5736 0 : in49 = GF_ADD( GF_MUL( scratch_9, 165 ), in49 ); \
5737 0 : in50 = GF_ADD( GF_MUL( scratch_10, 165 ), in50 ); \
5738 0 : in51 = GF_ADD( GF_MUL( scratch_11, 165 ), in51 ); \
5739 0 : in52 = GF_ADD( GF_MUL( scratch_12, 165 ), in52 ); \
5740 0 : in53 = GF_ADD( GF_MUL( scratch_13, 165 ), in53 ); \
5741 0 : in54 = GF_ADD( GF_MUL( scratch_14, 165 ), in54 ); \
5742 0 : in55 = GF_ADD( GF_MUL( scratch_15, 165 ), in55 ); \
5743 0 : { \
5744 0 : gf_t temp = GF_ADD( GF_MUL( in32, 70 ), GF_MUL( in48, 71 ) ); \
5745 0 : in48 = GF_ADD( in32, in48 ); \
5746 0 : in32 = temp; \
5747 0 : } \
5748 0 : { \
5749 0 : gf_t temp = GF_ADD( GF_MUL( in33, 70 ), GF_MUL( in49, 71 ) ); \
5750 0 : in49 = GF_ADD( in33, in49 ); \
5751 0 : in33 = temp; \
5752 0 : } \
5753 0 : { \
5754 0 : gf_t temp = GF_ADD( GF_MUL( in34, 70 ), GF_MUL( in50, 71 ) ); \
5755 0 : in50 = GF_ADD( in34, in50 ); \
5756 0 : in34 = temp; \
5757 0 : } \
5758 0 : { \
5759 0 : gf_t temp = GF_ADD( GF_MUL( in35, 70 ), GF_MUL( in51, 71 ) ); \
5760 0 : in51 = GF_ADD( in35, in51 ); \
5761 0 : in35 = temp; \
5762 0 : } \
5763 0 : { \
5764 0 : gf_t temp = GF_ADD( GF_MUL( in36, 70 ), GF_MUL( in52, 71 ) ); \
5765 0 : in52 = GF_ADD( in36, in52 ); \
5766 0 : in36 = temp; \
5767 0 : } \
5768 0 : { \
5769 0 : gf_t temp = GF_ADD( GF_MUL( in37, 70 ), GF_MUL( in53, 71 ) ); \
5770 0 : in53 = GF_ADD( in37, in53 ); \
5771 0 : in37 = temp; \
5772 0 : } \
5773 0 : { \
5774 0 : gf_t temp = GF_ADD( GF_MUL( in38, 70 ), GF_MUL( in54, 71 ) ); \
5775 0 : in54 = GF_ADD( in38, in54 ); \
5776 0 : in38 = temp; \
5777 0 : } \
5778 0 : { \
5779 0 : gf_t temp = GF_ADD( GF_MUL( in39, 70 ), GF_MUL( in55, 71 ) ); \
5780 0 : in55 = GF_ADD( in39, in55 ); \
5781 0 : in39 = temp; \
5782 0 : } \
5783 0 : in40 = GF_ADD( GF_MUL( scratch_24, 71 ), in40 ); \
5784 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
5785 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
5786 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
5787 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
5788 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
5789 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
5790 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
5791 0 : in32 = GF_ADD( in00, in32 ); \
5792 0 : in33 = GF_ADD( in01, in33 ); \
5793 0 : in34 = GF_ADD( in02, in34 ); \
5794 0 : in35 = GF_ADD( in03, in35 ); \
5795 0 : in36 = GF_ADD( in04, in36 ); \
5796 0 : in37 = GF_ADD( in05, in37 ); \
5797 0 : in38 = GF_ADD( in06, in38 ); \
5798 0 : in39 = GF_ADD( in07, in39 ); \
5799 0 : in40 = GF_ADD( in08, in40 ); \
5800 0 : in41 = GF_ADD( in09, in41 ); \
5801 0 : in42 = GF_ADD( in10, in42 ); \
5802 0 : in43 = GF_ADD( in11, in43 ); \
5803 0 : in44 = GF_ADD( in12, in44 ); \
5804 0 : in45 = GF_ADD( in13, in45 ); \
5805 0 : in46 = GF_ADD( in14, in46 ); \
5806 0 : in47 = GF_ADD( in15, in47 ); \
5807 0 : in48 = GF_ADD( in16, in48 ); \
5808 0 : in49 = GF_ADD( in17, in49 ); \
5809 0 : in50 = GF_ADD( in18, in50 ); \
5810 0 : in51 = GF_ADD( in19, in51 ); \
5811 0 : in52 = GF_ADD( in20, in52 ); \
5812 0 : in53 = GF_ADD( in21, in53 ); \
5813 0 : in54 = GF_ADD( in22, in54 ); \
5814 0 : in55 = GF_ADD( in23, in55 ); \
5815 0 : } while( 0 )
5816 :
5817 : void fd_reedsol_ppt_64_57( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
5818 : #define FD_REEDSOL_PPT_IMPL_64_57( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
5819 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
5820 0 : do { \
5821 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_13, scratch_14, scratch_15, scratch_2, scratch_25, scratch_26, scratch_27, scratch_28, scratch_29, scratch_30, scratch_31, scratch_4, scratch_9; \
5822 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
5823 0 : in57 = GF_ADD( in25, in57 ); \
5824 0 : in58 = GF_ADD( in26, in58 ); \
5825 0 : in59 = GF_ADD( in27, in59 ); \
5826 0 : in60 = GF_ADD( in28, in60 ); \
5827 0 : in61 = GF_ADD( in29, in61 ); \
5828 0 : in62 = GF_ADD( in30, in62 ); \
5829 0 : in63 = GF_ADD( in31, in63 ); \
5830 0 : scratch_25 = in57; \
5831 0 : scratch_26 = in58; \
5832 0 : scratch_27 = in59; \
5833 0 : scratch_28 = in60; \
5834 0 : scratch_29 = in61; \
5835 0 : scratch_30 = in62; \
5836 0 : scratch_31 = in63; \
5837 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
5838 0 : in57 = GF_ADD( in41, in57 ); \
5839 0 : in58 = GF_ADD( in42, in58 ); \
5840 0 : in59 = GF_ADD( in43, in59 ); \
5841 0 : in60 = GF_ADD( in44, in60 ); \
5842 0 : in61 = GF_ADD( in45, in61 ); \
5843 0 : in62 = GF_ADD( in46, in62 ); \
5844 0 : in63 = GF_ADD( in47, in63 ); \
5845 0 : scratch_9 = in57; \
5846 0 : scratch_10 = in58; \
5847 0 : scratch_11 = in59; \
5848 0 : scratch_12 = in60; \
5849 0 : scratch_13 = in61; \
5850 0 : scratch_14 = in62; \
5851 0 : scratch_15 = in63; \
5852 0 : FD_REEDSOL_GENERATE_IFFT( 8, 48, in48, in49, in50, in51, in52, in53, in54, in55 ); \
5853 0 : in57 = GF_ADD( in49, in57 ); \
5854 0 : in58 = GF_ADD( in50, in58 ); \
5855 0 : in59 = GF_ADD( in51, in59 ); \
5856 0 : in60 = GF_ADD( in52, in60 ); \
5857 0 : in61 = GF_ADD( in53, in61 ); \
5858 0 : in62 = GF_ADD( in54, in62 ); \
5859 0 : in63 = GF_ADD( in55, in63 ); \
5860 0 : scratch_4 = in60; \
5861 0 : { \
5862 0 : gf_t temp = GF_ADD( in57, GF_MUL( in61, 81 ) ); \
5863 0 : in61 = GF_ADD( in57, GF_MUL( in61, 80 ) ); \
5864 0 : in57 = temp; \
5865 0 : } \
5866 0 : { \
5867 0 : gf_t temp = GF_ADD( in58, GF_MUL( in62, 81 ) ); \
5868 0 : in62 = GF_ADD( in58, GF_MUL( in62, 80 ) ); \
5869 0 : in58 = temp; \
5870 0 : } \
5871 0 : { \
5872 0 : gf_t temp = GF_ADD( in59, GF_MUL( in63, 81 ) ); \
5873 0 : in63 = GF_ADD( in59, GF_MUL( in63, 80 ) ); \
5874 0 : in59 = temp; \
5875 0 : } \
5876 0 : scratch_2 = in58; \
5877 0 : { \
5878 0 : gf_t temp = GF_ADD( in57, GF_MUL( in59, 137 ) ); \
5879 0 : in59 = GF_ADD( in57, GF_MUL( in59, 136 ) ); \
5880 0 : in57 = temp; \
5881 0 : } \
5882 0 : { \
5883 0 : gf_t temp = GF_ADD( in56, GF_MUL( in57, 56 ) ); \
5884 0 : in57 = GF_ADD( in56, in57 ); \
5885 0 : in56 = temp; \
5886 0 : } \
5887 0 : in58 = GF_ADD( in56, in58 ); \
5888 0 : { \
5889 0 : gf_t temp = GF_ADD( in58, GF_MUL( in59, 58 ) ); \
5890 0 : in59 = GF_ADD( in58, GF_MUL( in59, 59 ) ); \
5891 0 : in58 = temp; \
5892 0 : } \
5893 0 : in56 = GF_ADD( GF_MUL( scratch_2, 137 ), in56 ); \
5894 0 : in60 = GF_ADD( in56, in60 ); \
5895 0 : FD_REEDSOL_GENERATE_FFT( 4, 60, in60, in61, in62, in63 ); \
5896 0 : in56 = GF_ADD( GF_MUL( scratch_4, 81 ), in56 ); \
5897 0 : { \
5898 0 : gf_t temp = GF_ADD( GF_MUL( in48, 164 ), GF_MUL( in56, 165 ) ); \
5899 0 : in56 = GF_ADD( in48, in56 ); \
5900 0 : in48 = temp; \
5901 0 : } \
5902 0 : in49 = GF_ADD( GF_MUL( scratch_9, 165 ), in49 ); \
5903 0 : in50 = GF_ADD( GF_MUL( scratch_10, 165 ), in50 ); \
5904 0 : in51 = GF_ADD( GF_MUL( scratch_11, 165 ), in51 ); \
5905 0 : in52 = GF_ADD( GF_MUL( scratch_12, 165 ), in52 ); \
5906 0 : in53 = GF_ADD( GF_MUL( scratch_13, 165 ), in53 ); \
5907 0 : in54 = GF_ADD( GF_MUL( scratch_14, 165 ), in54 ); \
5908 0 : in55 = GF_ADD( GF_MUL( scratch_15, 165 ), in55 ); \
5909 0 : { \
5910 0 : gf_t temp = GF_ADD( GF_MUL( in32, 70 ), GF_MUL( in48, 71 ) ); \
5911 0 : in48 = GF_ADD( in32, in48 ); \
5912 0 : in32 = temp; \
5913 0 : } \
5914 0 : { \
5915 0 : gf_t temp = GF_ADD( GF_MUL( in33, 70 ), GF_MUL( in49, 71 ) ); \
5916 0 : in49 = GF_ADD( in33, in49 ); \
5917 0 : in33 = temp; \
5918 0 : } \
5919 0 : { \
5920 0 : gf_t temp = GF_ADD( GF_MUL( in34, 70 ), GF_MUL( in50, 71 ) ); \
5921 0 : in50 = GF_ADD( in34, in50 ); \
5922 0 : in34 = temp; \
5923 0 : } \
5924 0 : { \
5925 0 : gf_t temp = GF_ADD( GF_MUL( in35, 70 ), GF_MUL( in51, 71 ) ); \
5926 0 : in51 = GF_ADD( in35, in51 ); \
5927 0 : in35 = temp; \
5928 0 : } \
5929 0 : { \
5930 0 : gf_t temp = GF_ADD( GF_MUL( in36, 70 ), GF_MUL( in52, 71 ) ); \
5931 0 : in52 = GF_ADD( in36, in52 ); \
5932 0 : in36 = temp; \
5933 0 : } \
5934 0 : { \
5935 0 : gf_t temp = GF_ADD( GF_MUL( in37, 70 ), GF_MUL( in53, 71 ) ); \
5936 0 : in53 = GF_ADD( in37, in53 ); \
5937 0 : in37 = temp; \
5938 0 : } \
5939 0 : { \
5940 0 : gf_t temp = GF_ADD( GF_MUL( in38, 70 ), GF_MUL( in54, 71 ) ); \
5941 0 : in54 = GF_ADD( in38, in54 ); \
5942 0 : in38 = temp; \
5943 0 : } \
5944 0 : { \
5945 0 : gf_t temp = GF_ADD( GF_MUL( in39, 70 ), GF_MUL( in55, 71 ) ); \
5946 0 : in55 = GF_ADD( in39, in55 ); \
5947 0 : in39 = temp; \
5948 0 : } \
5949 0 : { \
5950 0 : gf_t temp = GF_ADD( GF_MUL( in40, 70 ), GF_MUL( in56, 71 ) ); \
5951 0 : in56 = GF_ADD( in40, in56 ); \
5952 0 : in40 = temp; \
5953 0 : } \
5954 0 : in41 = GF_ADD( GF_MUL( scratch_25, 71 ), in41 ); \
5955 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
5956 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
5957 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
5958 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
5959 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
5960 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
5961 0 : in32 = GF_ADD( in00, in32 ); \
5962 0 : in33 = GF_ADD( in01, in33 ); \
5963 0 : in34 = GF_ADD( in02, in34 ); \
5964 0 : in35 = GF_ADD( in03, in35 ); \
5965 0 : in36 = GF_ADD( in04, in36 ); \
5966 0 : in37 = GF_ADD( in05, in37 ); \
5967 0 : in38 = GF_ADD( in06, in38 ); \
5968 0 : in39 = GF_ADD( in07, in39 ); \
5969 0 : in40 = GF_ADD( in08, in40 ); \
5970 0 : in41 = GF_ADD( in09, in41 ); \
5971 0 : in42 = GF_ADD( in10, in42 ); \
5972 0 : in43 = GF_ADD( in11, in43 ); \
5973 0 : in44 = GF_ADD( in12, in44 ); \
5974 0 : in45 = GF_ADD( in13, in45 ); \
5975 0 : in46 = GF_ADD( in14, in46 ); \
5976 0 : in47 = GF_ADD( in15, in47 ); \
5977 0 : in48 = GF_ADD( in16, in48 ); \
5978 0 : in49 = GF_ADD( in17, in49 ); \
5979 0 : in50 = GF_ADD( in18, in50 ); \
5980 0 : in51 = GF_ADD( in19, in51 ); \
5981 0 : in52 = GF_ADD( in20, in52 ); \
5982 0 : in53 = GF_ADD( in21, in53 ); \
5983 0 : in54 = GF_ADD( in22, in54 ); \
5984 0 : in55 = GF_ADD( in23, in55 ); \
5985 0 : in56 = GF_ADD( in24, in56 ); \
5986 0 : } while( 0 )
5987 :
5988 : void fd_reedsol_ppt_64_58( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
5989 : #define FD_REEDSOL_PPT_IMPL_64_58( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
5990 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
5991 0 : do { \
5992 0 : gf_t scratch_10, scratch_11, scratch_12, scratch_13, scratch_14, scratch_15, scratch_2, scratch_26, scratch_27, scratch_28, scratch_29, scratch_3, scratch_30, scratch_31, scratch_4, scratch_5; \
5993 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
5994 0 : in58 = GF_ADD( in26, in58 ); \
5995 0 : in59 = GF_ADD( in27, in59 ); \
5996 0 : in60 = GF_ADD( in28, in60 ); \
5997 0 : in61 = GF_ADD( in29, in61 ); \
5998 0 : in62 = GF_ADD( in30, in62 ); \
5999 0 : in63 = GF_ADD( in31, in63 ); \
6000 0 : scratch_26 = in58; \
6001 0 : scratch_27 = in59; \
6002 0 : scratch_28 = in60; \
6003 0 : scratch_29 = in61; \
6004 0 : scratch_30 = in62; \
6005 0 : scratch_31 = in63; \
6006 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
6007 0 : in58 = GF_ADD( in42, in58 ); \
6008 0 : in59 = GF_ADD( in43, in59 ); \
6009 0 : in60 = GF_ADD( in44, in60 ); \
6010 0 : in61 = GF_ADD( in45, in61 ); \
6011 0 : in62 = GF_ADD( in46, in62 ); \
6012 0 : in63 = GF_ADD( in47, in63 ); \
6013 0 : scratch_10 = in58; \
6014 0 : scratch_11 = in59; \
6015 0 : scratch_12 = in60; \
6016 0 : scratch_13 = in61; \
6017 0 : scratch_14 = in62; \
6018 0 : scratch_15 = in63; \
6019 0 : FD_REEDSOL_GENERATE_IFFT( 8, 48, in48, in49, in50, in51, in52, in53, in54, in55 ); \
6020 0 : in58 = GF_ADD( in50, in58 ); \
6021 0 : in59 = GF_ADD( in51, in59 ); \
6022 0 : in60 = GF_ADD( in52, in60 ); \
6023 0 : in61 = GF_ADD( in53, in61 ); \
6024 0 : in62 = GF_ADD( in54, in62 ); \
6025 0 : in63 = GF_ADD( in55, in63 ); \
6026 0 : scratch_4 = in60; \
6027 0 : scratch_5 = in61; \
6028 0 : { \
6029 0 : gf_t temp = GF_ADD( in58, GF_MUL( in62, 81 ) ); \
6030 0 : in62 = GF_ADD( in58, GF_MUL( in62, 80 ) ); \
6031 0 : in58 = temp; \
6032 0 : } \
6033 0 : { \
6034 0 : gf_t temp = GF_ADD( in59, GF_MUL( in63, 81 ) ); \
6035 0 : in63 = GF_ADD( in59, GF_MUL( in63, 80 ) ); \
6036 0 : in59 = temp; \
6037 0 : } \
6038 0 : scratch_2 = in58; \
6039 0 : scratch_3 = in59; \
6040 0 : { \
6041 0 : gf_t temp = GF_ADD( GF_MUL( in56, 57 ), GF_MUL( in57, 56 ) ); \
6042 0 : in57 = GF_ADD( in56, in57 ); \
6043 0 : in56 = temp; \
6044 0 : } \
6045 0 : in58 = GF_ADD( in56, in58 ); \
6046 0 : in59 = GF_ADD( in57, in59 ); \
6047 0 : { \
6048 0 : gf_t temp = GF_ADD( in58, GF_MUL( in59, 58 ) ); \
6049 0 : in59 = GF_ADD( in58, GF_MUL( in59, 59 ) ); \
6050 0 : in58 = temp; \
6051 0 : } \
6052 0 : in56 = GF_ADD( GF_MUL( scratch_2, 137 ), in56 ); \
6053 0 : in57 = GF_ADD( GF_MUL( scratch_3, 137 ), in57 ); \
6054 0 : in60 = GF_ADD( in56, in60 ); \
6055 0 : in61 = GF_ADD( in57, in61 ); \
6056 0 : FD_REEDSOL_GENERATE_FFT( 4, 60, in60, in61, in62, in63 ); \
6057 0 : in56 = GF_ADD( GF_MUL( scratch_4, 81 ), in56 ); \
6058 0 : in57 = GF_ADD( GF_MUL( scratch_5, 81 ), in57 ); \
6059 0 : { \
6060 0 : gf_t temp = GF_ADD( GF_MUL( in48, 164 ), GF_MUL( in56, 165 ) ); \
6061 0 : in56 = GF_ADD( in48, in56 ); \
6062 0 : in48 = temp; \
6063 0 : } \
6064 0 : { \
6065 0 : gf_t temp = GF_ADD( GF_MUL( in49, 164 ), GF_MUL( in57, 165 ) ); \
6066 0 : in57 = GF_ADD( in49, in57 ); \
6067 0 : in49 = temp; \
6068 0 : } \
6069 0 : in50 = GF_ADD( GF_MUL( scratch_10, 165 ), in50 ); \
6070 0 : in51 = GF_ADD( GF_MUL( scratch_11, 165 ), in51 ); \
6071 0 : in52 = GF_ADD( GF_MUL( scratch_12, 165 ), in52 ); \
6072 0 : in53 = GF_ADD( GF_MUL( scratch_13, 165 ), in53 ); \
6073 0 : in54 = GF_ADD( GF_MUL( scratch_14, 165 ), in54 ); \
6074 0 : in55 = GF_ADD( GF_MUL( scratch_15, 165 ), in55 ); \
6075 0 : { \
6076 0 : gf_t temp = GF_ADD( GF_MUL( in32, 70 ), GF_MUL( in48, 71 ) ); \
6077 0 : in48 = GF_ADD( in32, in48 ); \
6078 0 : in32 = temp; \
6079 0 : } \
6080 0 : { \
6081 0 : gf_t temp = GF_ADD( GF_MUL( in33, 70 ), GF_MUL( in49, 71 ) ); \
6082 0 : in49 = GF_ADD( in33, in49 ); \
6083 0 : in33 = temp; \
6084 0 : } \
6085 0 : { \
6086 0 : gf_t temp = GF_ADD( GF_MUL( in34, 70 ), GF_MUL( in50, 71 ) ); \
6087 0 : in50 = GF_ADD( in34, in50 ); \
6088 0 : in34 = temp; \
6089 0 : } \
6090 0 : { \
6091 0 : gf_t temp = GF_ADD( GF_MUL( in35, 70 ), GF_MUL( in51, 71 ) ); \
6092 0 : in51 = GF_ADD( in35, in51 ); \
6093 0 : in35 = temp; \
6094 0 : } \
6095 0 : { \
6096 0 : gf_t temp = GF_ADD( GF_MUL( in36, 70 ), GF_MUL( in52, 71 ) ); \
6097 0 : in52 = GF_ADD( in36, in52 ); \
6098 0 : in36 = temp; \
6099 0 : } \
6100 0 : { \
6101 0 : gf_t temp = GF_ADD( GF_MUL( in37, 70 ), GF_MUL( in53, 71 ) ); \
6102 0 : in53 = GF_ADD( in37, in53 ); \
6103 0 : in37 = temp; \
6104 0 : } \
6105 0 : { \
6106 0 : gf_t temp = GF_ADD( GF_MUL( in38, 70 ), GF_MUL( in54, 71 ) ); \
6107 0 : in54 = GF_ADD( in38, in54 ); \
6108 0 : in38 = temp; \
6109 0 : } \
6110 0 : { \
6111 0 : gf_t temp = GF_ADD( GF_MUL( in39, 70 ), GF_MUL( in55, 71 ) ); \
6112 0 : in55 = GF_ADD( in39, in55 ); \
6113 0 : in39 = temp; \
6114 0 : } \
6115 0 : { \
6116 0 : gf_t temp = GF_ADD( GF_MUL( in40, 70 ), GF_MUL( in56, 71 ) ); \
6117 0 : in56 = GF_ADD( in40, in56 ); \
6118 0 : in40 = temp; \
6119 0 : } \
6120 0 : { \
6121 0 : gf_t temp = GF_ADD( GF_MUL( in41, 70 ), GF_MUL( in57, 71 ) ); \
6122 0 : in57 = GF_ADD( in41, in57 ); \
6123 0 : in41 = temp; \
6124 0 : } \
6125 0 : in42 = GF_ADD( GF_MUL( scratch_26, 71 ), in42 ); \
6126 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
6127 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
6128 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
6129 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
6130 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
6131 0 : in32 = GF_ADD( in00, in32 ); \
6132 0 : in33 = GF_ADD( in01, in33 ); \
6133 0 : in34 = GF_ADD( in02, in34 ); \
6134 0 : in35 = GF_ADD( in03, in35 ); \
6135 0 : in36 = GF_ADD( in04, in36 ); \
6136 0 : in37 = GF_ADD( in05, in37 ); \
6137 0 : in38 = GF_ADD( in06, in38 ); \
6138 0 : in39 = GF_ADD( in07, in39 ); \
6139 0 : in40 = GF_ADD( in08, in40 ); \
6140 0 : in41 = GF_ADD( in09, in41 ); \
6141 0 : in42 = GF_ADD( in10, in42 ); \
6142 0 : in43 = GF_ADD( in11, in43 ); \
6143 0 : in44 = GF_ADD( in12, in44 ); \
6144 0 : in45 = GF_ADD( in13, in45 ); \
6145 0 : in46 = GF_ADD( in14, in46 ); \
6146 0 : in47 = GF_ADD( in15, in47 ); \
6147 0 : in48 = GF_ADD( in16, in48 ); \
6148 0 : in49 = GF_ADD( in17, in49 ); \
6149 0 : in50 = GF_ADD( in18, in50 ); \
6150 0 : in51 = GF_ADD( in19, in51 ); \
6151 0 : in52 = GF_ADD( in20, in52 ); \
6152 0 : in53 = GF_ADD( in21, in53 ); \
6153 0 : in54 = GF_ADD( in22, in54 ); \
6154 0 : in55 = GF_ADD( in23, in55 ); \
6155 0 : in56 = GF_ADD( in24, in56 ); \
6156 0 : in57 = GF_ADD( in25, in57 ); \
6157 0 : } while( 0 )
6158 :
6159 : void fd_reedsol_ppt_64_59( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
6160 : #define FD_REEDSOL_PPT_IMPL_64_59( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
6161 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
6162 0 : do { \
6163 0 : gf_t scratch_11, scratch_12, scratch_13, scratch_14, scratch_15, scratch_27, scratch_28, scratch_29, scratch_3, scratch_30, scratch_31, scratch_4, scratch_5, scratch_6; \
6164 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
6165 0 : in59 = GF_ADD( in27, in59 ); \
6166 0 : in60 = GF_ADD( in28, in60 ); \
6167 0 : in61 = GF_ADD( in29, in61 ); \
6168 0 : in62 = GF_ADD( in30, in62 ); \
6169 0 : in63 = GF_ADD( in31, in63 ); \
6170 0 : scratch_27 = in59; \
6171 0 : scratch_28 = in60; \
6172 0 : scratch_29 = in61; \
6173 0 : scratch_30 = in62; \
6174 0 : scratch_31 = in63; \
6175 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
6176 0 : in59 = GF_ADD( in43, in59 ); \
6177 0 : in60 = GF_ADD( in44, in60 ); \
6178 0 : in61 = GF_ADD( in45, in61 ); \
6179 0 : in62 = GF_ADD( in46, in62 ); \
6180 0 : in63 = GF_ADD( in47, in63 ); \
6181 0 : scratch_11 = in59; \
6182 0 : scratch_12 = in60; \
6183 0 : scratch_13 = in61; \
6184 0 : scratch_14 = in62; \
6185 0 : scratch_15 = in63; \
6186 0 : FD_REEDSOL_GENERATE_IFFT( 8, 48, in48, in49, in50, in51, in52, in53, in54, in55 ); \
6187 0 : in59 = GF_ADD( in51, in59 ); \
6188 0 : in60 = GF_ADD( in52, in60 ); \
6189 0 : in61 = GF_ADD( in53, in61 ); \
6190 0 : in62 = GF_ADD( in54, in62 ); \
6191 0 : in63 = GF_ADD( in55, in63 ); \
6192 0 : scratch_4 = in60; \
6193 0 : scratch_5 = in61; \
6194 0 : scratch_6 = in62; \
6195 0 : { \
6196 0 : gf_t temp = GF_ADD( in59, GF_MUL( in63, 81 ) ); \
6197 0 : in63 = GF_ADD( in59, GF_MUL( in63, 80 ) ); \
6198 0 : in59 = temp; \
6199 0 : } \
6200 0 : scratch_3 = in59; \
6201 0 : { \
6202 0 : gf_t temp = GF_ADD( GF_MUL( in56, 57 ), GF_MUL( in57, 56 ) ); \
6203 0 : in57 = GF_ADD( in56, in57 ); \
6204 0 : in56 = temp; \
6205 0 : } \
6206 0 : in59 = GF_ADD( in57, in59 ); \
6207 0 : { \
6208 0 : gf_t temp = GF_ADD( in58, GF_MUL( in59, 58 ) ); \
6209 0 : in59 = GF_ADD( in58, in59 ); \
6210 0 : in58 = temp; \
6211 0 : } \
6212 0 : { \
6213 0 : gf_t temp = GF_ADD( GF_MUL( in56, 136 ), GF_MUL( in58, 137 ) ); \
6214 0 : in58 = GF_ADD( in56, in58 ); \
6215 0 : in56 = temp; \
6216 0 : } \
6217 0 : in57 = GF_ADD( GF_MUL( scratch_3, 137 ), in57 ); \
6218 0 : in60 = GF_ADD( in56, in60 ); \
6219 0 : in61 = GF_ADD( in57, in61 ); \
6220 0 : in62 = GF_ADD( in58, in62 ); \
6221 0 : FD_REEDSOL_GENERATE_FFT( 4, 60, in60, in61, in62, in63 ); \
6222 0 : in56 = GF_ADD( GF_MUL( scratch_4, 81 ), in56 ); \
6223 0 : in57 = GF_ADD( GF_MUL( scratch_5, 81 ), in57 ); \
6224 0 : in58 = GF_ADD( GF_MUL( scratch_6, 81 ), in58 ); \
6225 0 : { \
6226 0 : gf_t temp = GF_ADD( GF_MUL( in48, 164 ), GF_MUL( in56, 165 ) ); \
6227 0 : in56 = GF_ADD( in48, in56 ); \
6228 0 : in48 = temp; \
6229 0 : } \
6230 0 : { \
6231 0 : gf_t temp = GF_ADD( GF_MUL( in49, 164 ), GF_MUL( in57, 165 ) ); \
6232 0 : in57 = GF_ADD( in49, in57 ); \
6233 0 : in49 = temp; \
6234 0 : } \
6235 0 : { \
6236 0 : gf_t temp = GF_ADD( GF_MUL( in50, 164 ), GF_MUL( in58, 165 ) ); \
6237 0 : in58 = GF_ADD( in50, in58 ); \
6238 0 : in50 = temp; \
6239 0 : } \
6240 0 : in51 = GF_ADD( GF_MUL( scratch_11, 165 ), in51 ); \
6241 0 : in52 = GF_ADD( GF_MUL( scratch_12, 165 ), in52 ); \
6242 0 : in53 = GF_ADD( GF_MUL( scratch_13, 165 ), in53 ); \
6243 0 : in54 = GF_ADD( GF_MUL( scratch_14, 165 ), in54 ); \
6244 0 : in55 = GF_ADD( GF_MUL( scratch_15, 165 ), in55 ); \
6245 0 : { \
6246 0 : gf_t temp = GF_ADD( GF_MUL( in32, 70 ), GF_MUL( in48, 71 ) ); \
6247 0 : in48 = GF_ADD( in32, in48 ); \
6248 0 : in32 = temp; \
6249 0 : } \
6250 0 : { \
6251 0 : gf_t temp = GF_ADD( GF_MUL( in33, 70 ), GF_MUL( in49, 71 ) ); \
6252 0 : in49 = GF_ADD( in33, in49 ); \
6253 0 : in33 = temp; \
6254 0 : } \
6255 0 : { \
6256 0 : gf_t temp = GF_ADD( GF_MUL( in34, 70 ), GF_MUL( in50, 71 ) ); \
6257 0 : in50 = GF_ADD( in34, in50 ); \
6258 0 : in34 = temp; \
6259 0 : } \
6260 0 : { \
6261 0 : gf_t temp = GF_ADD( GF_MUL( in35, 70 ), GF_MUL( in51, 71 ) ); \
6262 0 : in51 = GF_ADD( in35, in51 ); \
6263 0 : in35 = temp; \
6264 0 : } \
6265 0 : { \
6266 0 : gf_t temp = GF_ADD( GF_MUL( in36, 70 ), GF_MUL( in52, 71 ) ); \
6267 0 : in52 = GF_ADD( in36, in52 ); \
6268 0 : in36 = temp; \
6269 0 : } \
6270 0 : { \
6271 0 : gf_t temp = GF_ADD( GF_MUL( in37, 70 ), GF_MUL( in53, 71 ) ); \
6272 0 : in53 = GF_ADD( in37, in53 ); \
6273 0 : in37 = temp; \
6274 0 : } \
6275 0 : { \
6276 0 : gf_t temp = GF_ADD( GF_MUL( in38, 70 ), GF_MUL( in54, 71 ) ); \
6277 0 : in54 = GF_ADD( in38, in54 ); \
6278 0 : in38 = temp; \
6279 0 : } \
6280 0 : { \
6281 0 : gf_t temp = GF_ADD( GF_MUL( in39, 70 ), GF_MUL( in55, 71 ) ); \
6282 0 : in55 = GF_ADD( in39, in55 ); \
6283 0 : in39 = temp; \
6284 0 : } \
6285 0 : { \
6286 0 : gf_t temp = GF_ADD( GF_MUL( in40, 70 ), GF_MUL( in56, 71 ) ); \
6287 0 : in56 = GF_ADD( in40, in56 ); \
6288 0 : in40 = temp; \
6289 0 : } \
6290 0 : { \
6291 0 : gf_t temp = GF_ADD( GF_MUL( in41, 70 ), GF_MUL( in57, 71 ) ); \
6292 0 : in57 = GF_ADD( in41, in57 ); \
6293 0 : in41 = temp; \
6294 0 : } \
6295 0 : { \
6296 0 : gf_t temp = GF_ADD( GF_MUL( in42, 70 ), GF_MUL( in58, 71 ) ); \
6297 0 : in58 = GF_ADD( in42, in58 ); \
6298 0 : in42 = temp; \
6299 0 : } \
6300 0 : in43 = GF_ADD( GF_MUL( scratch_27, 71 ), in43 ); \
6301 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
6302 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
6303 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
6304 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
6305 0 : in32 = GF_ADD( in00, in32 ); \
6306 0 : in33 = GF_ADD( in01, in33 ); \
6307 0 : in34 = GF_ADD( in02, in34 ); \
6308 0 : in35 = GF_ADD( in03, in35 ); \
6309 0 : in36 = GF_ADD( in04, in36 ); \
6310 0 : in37 = GF_ADD( in05, in37 ); \
6311 0 : in38 = GF_ADD( in06, in38 ); \
6312 0 : in39 = GF_ADD( in07, in39 ); \
6313 0 : in40 = GF_ADD( in08, in40 ); \
6314 0 : in41 = GF_ADD( in09, in41 ); \
6315 0 : in42 = GF_ADD( in10, in42 ); \
6316 0 : in43 = GF_ADD( in11, in43 ); \
6317 0 : in44 = GF_ADD( in12, in44 ); \
6318 0 : in45 = GF_ADD( in13, in45 ); \
6319 0 : in46 = GF_ADD( in14, in46 ); \
6320 0 : in47 = GF_ADD( in15, in47 ); \
6321 0 : in48 = GF_ADD( in16, in48 ); \
6322 0 : in49 = GF_ADD( in17, in49 ); \
6323 0 : in50 = GF_ADD( in18, in50 ); \
6324 0 : in51 = GF_ADD( in19, in51 ); \
6325 0 : in52 = GF_ADD( in20, in52 ); \
6326 0 : in53 = GF_ADD( in21, in53 ); \
6327 0 : in54 = GF_ADD( in22, in54 ); \
6328 0 : in55 = GF_ADD( in23, in55 ); \
6329 0 : in56 = GF_ADD( in24, in56 ); \
6330 0 : in57 = GF_ADD( in25, in57 ); \
6331 0 : in58 = GF_ADD( in26, in58 ); \
6332 0 : } while( 0 )
6333 :
6334 : void fd_reedsol_ppt_64_60( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
6335 : #define FD_REEDSOL_PPT_IMPL_64_60( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
6336 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
6337 0 : do { \
6338 0 : gf_t scratch_12, scratch_13, scratch_14, scratch_15, scratch_28, scratch_29, scratch_30, scratch_31, scratch_4, scratch_5, scratch_6, scratch_7; \
6339 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
6340 0 : in60 = GF_ADD( in28, in60 ); \
6341 0 : in61 = GF_ADD( in29, in61 ); \
6342 0 : in62 = GF_ADD( in30, in62 ); \
6343 0 : in63 = GF_ADD( in31, in63 ); \
6344 0 : scratch_28 = in60; \
6345 0 : scratch_29 = in61; \
6346 0 : scratch_30 = in62; \
6347 0 : scratch_31 = in63; \
6348 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
6349 0 : in60 = GF_ADD( in44, in60 ); \
6350 0 : in61 = GF_ADD( in45, in61 ); \
6351 0 : in62 = GF_ADD( in46, in62 ); \
6352 0 : in63 = GF_ADD( in47, in63 ); \
6353 0 : scratch_12 = in60; \
6354 0 : scratch_13 = in61; \
6355 0 : scratch_14 = in62; \
6356 0 : scratch_15 = in63; \
6357 0 : FD_REEDSOL_GENERATE_IFFT( 8, 48, in48, in49, in50, in51, in52, in53, in54, in55 ); \
6358 0 : in60 = GF_ADD( in52, in60 ); \
6359 0 : in61 = GF_ADD( in53, in61 ); \
6360 0 : in62 = GF_ADD( in54, in62 ); \
6361 0 : in63 = GF_ADD( in55, in63 ); \
6362 0 : scratch_4 = in60; \
6363 0 : scratch_5 = in61; \
6364 0 : scratch_6 = in62; \
6365 0 : scratch_7 = in63; \
6366 0 : FD_REEDSOL_GENERATE_IFFT( 4, 56, in56, in57, in58, in59 ); \
6367 0 : in60 = GF_ADD( in56, in60 ); \
6368 0 : in61 = GF_ADD( in57, in61 ); \
6369 0 : in62 = GF_ADD( in58, in62 ); \
6370 0 : in63 = GF_ADD( in59, in63 ); \
6371 0 : FD_REEDSOL_GENERATE_FFT( 4, 60, in60, in61, in62, in63 ); \
6372 0 : in56 = GF_ADD( GF_MUL( scratch_4, 81 ), in56 ); \
6373 0 : in57 = GF_ADD( GF_MUL( scratch_5, 81 ), in57 ); \
6374 0 : in58 = GF_ADD( GF_MUL( scratch_6, 81 ), in58 ); \
6375 0 : in59 = GF_ADD( GF_MUL( scratch_7, 81 ), in59 ); \
6376 0 : { \
6377 0 : gf_t temp = GF_ADD( GF_MUL( in48, 164 ), GF_MUL( in56, 165 ) ); \
6378 0 : in56 = GF_ADD( in48, in56 ); \
6379 0 : in48 = temp; \
6380 0 : } \
6381 0 : { \
6382 0 : gf_t temp = GF_ADD( GF_MUL( in49, 164 ), GF_MUL( in57, 165 ) ); \
6383 0 : in57 = GF_ADD( in49, in57 ); \
6384 0 : in49 = temp; \
6385 0 : } \
6386 0 : { \
6387 0 : gf_t temp = GF_ADD( GF_MUL( in50, 164 ), GF_MUL( in58, 165 ) ); \
6388 0 : in58 = GF_ADD( in50, in58 ); \
6389 0 : in50 = temp; \
6390 0 : } \
6391 0 : { \
6392 0 : gf_t temp = GF_ADD( GF_MUL( in51, 164 ), GF_MUL( in59, 165 ) ); \
6393 0 : in59 = GF_ADD( in51, in59 ); \
6394 0 : in51 = temp; \
6395 0 : } \
6396 0 : in52 = GF_ADD( GF_MUL( scratch_12, 165 ), in52 ); \
6397 0 : in53 = GF_ADD( GF_MUL( scratch_13, 165 ), in53 ); \
6398 0 : in54 = GF_ADD( GF_MUL( scratch_14, 165 ), in54 ); \
6399 0 : in55 = GF_ADD( GF_MUL( scratch_15, 165 ), in55 ); \
6400 0 : { \
6401 0 : gf_t temp = GF_ADD( GF_MUL( in32, 70 ), GF_MUL( in48, 71 ) ); \
6402 0 : in48 = GF_ADD( in32, in48 ); \
6403 0 : in32 = temp; \
6404 0 : } \
6405 0 : { \
6406 0 : gf_t temp = GF_ADD( GF_MUL( in33, 70 ), GF_MUL( in49, 71 ) ); \
6407 0 : in49 = GF_ADD( in33, in49 ); \
6408 0 : in33 = temp; \
6409 0 : } \
6410 0 : { \
6411 0 : gf_t temp = GF_ADD( GF_MUL( in34, 70 ), GF_MUL( in50, 71 ) ); \
6412 0 : in50 = GF_ADD( in34, in50 ); \
6413 0 : in34 = temp; \
6414 0 : } \
6415 0 : { \
6416 0 : gf_t temp = GF_ADD( GF_MUL( in35, 70 ), GF_MUL( in51, 71 ) ); \
6417 0 : in51 = GF_ADD( in35, in51 ); \
6418 0 : in35 = temp; \
6419 0 : } \
6420 0 : { \
6421 0 : gf_t temp = GF_ADD( GF_MUL( in36, 70 ), GF_MUL( in52, 71 ) ); \
6422 0 : in52 = GF_ADD( in36, in52 ); \
6423 0 : in36 = temp; \
6424 0 : } \
6425 0 : { \
6426 0 : gf_t temp = GF_ADD( GF_MUL( in37, 70 ), GF_MUL( in53, 71 ) ); \
6427 0 : in53 = GF_ADD( in37, in53 ); \
6428 0 : in37 = temp; \
6429 0 : } \
6430 0 : { \
6431 0 : gf_t temp = GF_ADD( GF_MUL( in38, 70 ), GF_MUL( in54, 71 ) ); \
6432 0 : in54 = GF_ADD( in38, in54 ); \
6433 0 : in38 = temp; \
6434 0 : } \
6435 0 : { \
6436 0 : gf_t temp = GF_ADD( GF_MUL( in39, 70 ), GF_MUL( in55, 71 ) ); \
6437 0 : in55 = GF_ADD( in39, in55 ); \
6438 0 : in39 = temp; \
6439 0 : } \
6440 0 : { \
6441 0 : gf_t temp = GF_ADD( GF_MUL( in40, 70 ), GF_MUL( in56, 71 ) ); \
6442 0 : in56 = GF_ADD( in40, in56 ); \
6443 0 : in40 = temp; \
6444 0 : } \
6445 0 : { \
6446 0 : gf_t temp = GF_ADD( GF_MUL( in41, 70 ), GF_MUL( in57, 71 ) ); \
6447 0 : in57 = GF_ADD( in41, in57 ); \
6448 0 : in41 = temp; \
6449 0 : } \
6450 0 : { \
6451 0 : gf_t temp = GF_ADD( GF_MUL( in42, 70 ), GF_MUL( in58, 71 ) ); \
6452 0 : in58 = GF_ADD( in42, in58 ); \
6453 0 : in42 = temp; \
6454 0 : } \
6455 0 : { \
6456 0 : gf_t temp = GF_ADD( GF_MUL( in43, 70 ), GF_MUL( in59, 71 ) ); \
6457 0 : in59 = GF_ADD( in43, in59 ); \
6458 0 : in43 = temp; \
6459 0 : } \
6460 0 : in44 = GF_ADD( GF_MUL( scratch_28, 71 ), in44 ); \
6461 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
6462 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
6463 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
6464 0 : in32 = GF_ADD( in00, in32 ); \
6465 0 : in33 = GF_ADD( in01, in33 ); \
6466 0 : in34 = GF_ADD( in02, in34 ); \
6467 0 : in35 = GF_ADD( in03, in35 ); \
6468 0 : in36 = GF_ADD( in04, in36 ); \
6469 0 : in37 = GF_ADD( in05, in37 ); \
6470 0 : in38 = GF_ADD( in06, in38 ); \
6471 0 : in39 = GF_ADD( in07, in39 ); \
6472 0 : in40 = GF_ADD( in08, in40 ); \
6473 0 : in41 = GF_ADD( in09, in41 ); \
6474 0 : in42 = GF_ADD( in10, in42 ); \
6475 0 : in43 = GF_ADD( in11, in43 ); \
6476 0 : in44 = GF_ADD( in12, in44 ); \
6477 0 : in45 = GF_ADD( in13, in45 ); \
6478 0 : in46 = GF_ADD( in14, in46 ); \
6479 0 : in47 = GF_ADD( in15, in47 ); \
6480 0 : in48 = GF_ADD( in16, in48 ); \
6481 0 : in49 = GF_ADD( in17, in49 ); \
6482 0 : in50 = GF_ADD( in18, in50 ); \
6483 0 : in51 = GF_ADD( in19, in51 ); \
6484 0 : in52 = GF_ADD( in20, in52 ); \
6485 0 : in53 = GF_ADD( in21, in53 ); \
6486 0 : in54 = GF_ADD( in22, in54 ); \
6487 0 : in55 = GF_ADD( in23, in55 ); \
6488 0 : in56 = GF_ADD( in24, in56 ); \
6489 0 : in57 = GF_ADD( in25, in57 ); \
6490 0 : in58 = GF_ADD( in26, in58 ); \
6491 0 : in59 = GF_ADD( in27, in59 ); \
6492 0 : } while( 0 )
6493 :
6494 : void fd_reedsol_ppt_64_61( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
6495 : #define FD_REEDSOL_PPT_IMPL_64_61( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
6496 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
6497 0 : do { \
6498 0 : gf_t scratch_13, scratch_14, scratch_15, scratch_2, scratch_29, scratch_30, scratch_31, scratch_5, scratch_6, scratch_7; \
6499 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
6500 0 : in61 = GF_ADD( in29, in61 ); \
6501 0 : in62 = GF_ADD( in30, in62 ); \
6502 0 : in63 = GF_ADD( in31, in63 ); \
6503 0 : scratch_29 = in61; \
6504 0 : scratch_30 = in62; \
6505 0 : scratch_31 = in63; \
6506 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
6507 0 : in61 = GF_ADD( in45, in61 ); \
6508 0 : in62 = GF_ADD( in46, in62 ); \
6509 0 : in63 = GF_ADD( in47, in63 ); \
6510 0 : scratch_13 = in61; \
6511 0 : scratch_14 = in62; \
6512 0 : scratch_15 = in63; \
6513 0 : FD_REEDSOL_GENERATE_IFFT( 8, 48, in48, in49, in50, in51, in52, in53, in54, in55 ); \
6514 0 : in61 = GF_ADD( in53, in61 ); \
6515 0 : in62 = GF_ADD( in54, in62 ); \
6516 0 : in63 = GF_ADD( in55, in63 ); \
6517 0 : scratch_5 = in61; \
6518 0 : scratch_6 = in62; \
6519 0 : scratch_7 = in63; \
6520 0 : FD_REEDSOL_GENERATE_IFFT( 4, 56, in56, in57, in58, in59 ); \
6521 0 : in61 = GF_ADD( in57, in61 ); \
6522 0 : in62 = GF_ADD( in58, in62 ); \
6523 0 : in63 = GF_ADD( in59, in63 ); \
6524 0 : scratch_2 = in62; \
6525 0 : { \
6526 0 : gf_t temp = GF_ADD( in61, GF_MUL( in63, 143 ) ); \
6527 0 : in63 = GF_ADD( in61, GF_MUL( in63, 142 ) ); \
6528 0 : in61 = temp; \
6529 0 : } \
6530 0 : { \
6531 0 : gf_t temp = GF_ADD( in60, GF_MUL( in61, 60 ) ); \
6532 0 : in61 = GF_ADD( in60, in61 ); \
6533 0 : in60 = temp; \
6534 0 : } \
6535 0 : in62 = GF_ADD( in60, in62 ); \
6536 0 : { \
6537 0 : gf_t temp = GF_ADD( in62, GF_MUL( in63, 62 ) ); \
6538 0 : in63 = GF_ADD( in62, GF_MUL( in63, 63 ) ); \
6539 0 : in62 = temp; \
6540 0 : } \
6541 0 : in60 = GF_ADD( GF_MUL( scratch_2, 143 ), in60 ); \
6542 0 : { \
6543 0 : gf_t temp = GF_ADD( GF_MUL( in56, 80 ), GF_MUL( in60, 81 ) ); \
6544 0 : in60 = GF_ADD( in56, in60 ); \
6545 0 : in56 = temp; \
6546 0 : } \
6547 0 : in57 = GF_ADD( GF_MUL( scratch_5, 81 ), in57 ); \
6548 0 : in58 = GF_ADD( GF_MUL( scratch_6, 81 ), in58 ); \
6549 0 : in59 = GF_ADD( GF_MUL( scratch_7, 81 ), in59 ); \
6550 0 : { \
6551 0 : gf_t temp = GF_ADD( GF_MUL( in48, 164 ), GF_MUL( in56, 165 ) ); \
6552 0 : in56 = GF_ADD( in48, in56 ); \
6553 0 : in48 = temp; \
6554 0 : } \
6555 0 : { \
6556 0 : gf_t temp = GF_ADD( GF_MUL( in49, 164 ), GF_MUL( in57, 165 ) ); \
6557 0 : in57 = GF_ADD( in49, in57 ); \
6558 0 : in49 = temp; \
6559 0 : } \
6560 0 : { \
6561 0 : gf_t temp = GF_ADD( GF_MUL( in50, 164 ), GF_MUL( in58, 165 ) ); \
6562 0 : in58 = GF_ADD( in50, in58 ); \
6563 0 : in50 = temp; \
6564 0 : } \
6565 0 : { \
6566 0 : gf_t temp = GF_ADD( GF_MUL( in51, 164 ), GF_MUL( in59, 165 ) ); \
6567 0 : in59 = GF_ADD( in51, in59 ); \
6568 0 : in51 = temp; \
6569 0 : } \
6570 0 : { \
6571 0 : gf_t temp = GF_ADD( GF_MUL( in52, 164 ), GF_MUL( in60, 165 ) ); \
6572 0 : in60 = GF_ADD( in52, in60 ); \
6573 0 : in52 = temp; \
6574 0 : } \
6575 0 : in53 = GF_ADD( GF_MUL( scratch_13, 165 ), in53 ); \
6576 0 : in54 = GF_ADD( GF_MUL( scratch_14, 165 ), in54 ); \
6577 0 : in55 = GF_ADD( GF_MUL( scratch_15, 165 ), in55 ); \
6578 0 : { \
6579 0 : gf_t temp = GF_ADD( GF_MUL( in32, 70 ), GF_MUL( in48, 71 ) ); \
6580 0 : in48 = GF_ADD( in32, in48 ); \
6581 0 : in32 = temp; \
6582 0 : } \
6583 0 : { \
6584 0 : gf_t temp = GF_ADD( GF_MUL( in33, 70 ), GF_MUL( in49, 71 ) ); \
6585 0 : in49 = GF_ADD( in33, in49 ); \
6586 0 : in33 = temp; \
6587 0 : } \
6588 0 : { \
6589 0 : gf_t temp = GF_ADD( GF_MUL( in34, 70 ), GF_MUL( in50, 71 ) ); \
6590 0 : in50 = GF_ADD( in34, in50 ); \
6591 0 : in34 = temp; \
6592 0 : } \
6593 0 : { \
6594 0 : gf_t temp = GF_ADD( GF_MUL( in35, 70 ), GF_MUL( in51, 71 ) ); \
6595 0 : in51 = GF_ADD( in35, in51 ); \
6596 0 : in35 = temp; \
6597 0 : } \
6598 0 : { \
6599 0 : gf_t temp = GF_ADD( GF_MUL( in36, 70 ), GF_MUL( in52, 71 ) ); \
6600 0 : in52 = GF_ADD( in36, in52 ); \
6601 0 : in36 = temp; \
6602 0 : } \
6603 0 : { \
6604 0 : gf_t temp = GF_ADD( GF_MUL( in37, 70 ), GF_MUL( in53, 71 ) ); \
6605 0 : in53 = GF_ADD( in37, in53 ); \
6606 0 : in37 = temp; \
6607 0 : } \
6608 0 : { \
6609 0 : gf_t temp = GF_ADD( GF_MUL( in38, 70 ), GF_MUL( in54, 71 ) ); \
6610 0 : in54 = GF_ADD( in38, in54 ); \
6611 0 : in38 = temp; \
6612 0 : } \
6613 0 : { \
6614 0 : gf_t temp = GF_ADD( GF_MUL( in39, 70 ), GF_MUL( in55, 71 ) ); \
6615 0 : in55 = GF_ADD( in39, in55 ); \
6616 0 : in39 = temp; \
6617 0 : } \
6618 0 : { \
6619 0 : gf_t temp = GF_ADD( GF_MUL( in40, 70 ), GF_MUL( in56, 71 ) ); \
6620 0 : in56 = GF_ADD( in40, in56 ); \
6621 0 : in40 = temp; \
6622 0 : } \
6623 0 : { \
6624 0 : gf_t temp = GF_ADD( GF_MUL( in41, 70 ), GF_MUL( in57, 71 ) ); \
6625 0 : in57 = GF_ADD( in41, in57 ); \
6626 0 : in41 = temp; \
6627 0 : } \
6628 0 : { \
6629 0 : gf_t temp = GF_ADD( GF_MUL( in42, 70 ), GF_MUL( in58, 71 ) ); \
6630 0 : in58 = GF_ADD( in42, in58 ); \
6631 0 : in42 = temp; \
6632 0 : } \
6633 0 : { \
6634 0 : gf_t temp = GF_ADD( GF_MUL( in43, 70 ), GF_MUL( in59, 71 ) ); \
6635 0 : in59 = GF_ADD( in43, in59 ); \
6636 0 : in43 = temp; \
6637 0 : } \
6638 0 : { \
6639 0 : gf_t temp = GF_ADD( GF_MUL( in44, 70 ), GF_MUL( in60, 71 ) ); \
6640 0 : in60 = GF_ADD( in44, in60 ); \
6641 0 : in44 = temp; \
6642 0 : } \
6643 0 : in45 = GF_ADD( GF_MUL( scratch_29, 71 ), in45 ); \
6644 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
6645 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
6646 0 : in32 = GF_ADD( in00, in32 ); \
6647 0 : in33 = GF_ADD( in01, in33 ); \
6648 0 : in34 = GF_ADD( in02, in34 ); \
6649 0 : in35 = GF_ADD( in03, in35 ); \
6650 0 : in36 = GF_ADD( in04, in36 ); \
6651 0 : in37 = GF_ADD( in05, in37 ); \
6652 0 : in38 = GF_ADD( in06, in38 ); \
6653 0 : in39 = GF_ADD( in07, in39 ); \
6654 0 : in40 = GF_ADD( in08, in40 ); \
6655 0 : in41 = GF_ADD( in09, in41 ); \
6656 0 : in42 = GF_ADD( in10, in42 ); \
6657 0 : in43 = GF_ADD( in11, in43 ); \
6658 0 : in44 = GF_ADD( in12, in44 ); \
6659 0 : in45 = GF_ADD( in13, in45 ); \
6660 0 : in46 = GF_ADD( in14, in46 ); \
6661 0 : in47 = GF_ADD( in15, in47 ); \
6662 0 : in48 = GF_ADD( in16, in48 ); \
6663 0 : in49 = GF_ADD( in17, in49 ); \
6664 0 : in50 = GF_ADD( in18, in50 ); \
6665 0 : in51 = GF_ADD( in19, in51 ); \
6666 0 : in52 = GF_ADD( in20, in52 ); \
6667 0 : in53 = GF_ADD( in21, in53 ); \
6668 0 : in54 = GF_ADD( in22, in54 ); \
6669 0 : in55 = GF_ADD( in23, in55 ); \
6670 0 : in56 = GF_ADD( in24, in56 ); \
6671 0 : in57 = GF_ADD( in25, in57 ); \
6672 0 : in58 = GF_ADD( in26, in58 ); \
6673 0 : in59 = GF_ADD( in27, in59 ); \
6674 0 : in60 = GF_ADD( in28, in60 ); \
6675 0 : } while( 0 )
6676 :
6677 : void fd_reedsol_ppt_64_62( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
6678 : #define FD_REEDSOL_PPT_IMPL_64_62( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
6679 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
6680 0 : do { \
6681 0 : gf_t scratch_14, scratch_15, scratch_2, scratch_3, scratch_30, scratch_31, scratch_6, scratch_7; \
6682 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
6683 0 : in62 = GF_ADD( in30, in62 ); \
6684 0 : in63 = GF_ADD( in31, in63 ); \
6685 0 : scratch_30 = in62; \
6686 0 : scratch_31 = in63; \
6687 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
6688 0 : in62 = GF_ADD( in46, in62 ); \
6689 0 : in63 = GF_ADD( in47, in63 ); \
6690 0 : scratch_14 = in62; \
6691 0 : scratch_15 = in63; \
6692 0 : FD_REEDSOL_GENERATE_IFFT( 8, 48, in48, in49, in50, in51, in52, in53, in54, in55 ); \
6693 0 : in62 = GF_ADD( in54, in62 ); \
6694 0 : in63 = GF_ADD( in55, in63 ); \
6695 0 : scratch_6 = in62; \
6696 0 : scratch_7 = in63; \
6697 0 : FD_REEDSOL_GENERATE_IFFT( 4, 56, in56, in57, in58, in59 ); \
6698 0 : in62 = GF_ADD( in58, in62 ); \
6699 0 : in63 = GF_ADD( in59, in63 ); \
6700 0 : scratch_2 = in62; \
6701 0 : scratch_3 = in63; \
6702 0 : { \
6703 0 : gf_t temp = GF_ADD( GF_MUL( in60, 61 ), GF_MUL( in61, 60 ) ); \
6704 0 : in61 = GF_ADD( in60, in61 ); \
6705 0 : in60 = temp; \
6706 0 : } \
6707 0 : in62 = GF_ADD( in60, in62 ); \
6708 0 : in63 = GF_ADD( in61, in63 ); \
6709 0 : { \
6710 0 : gf_t temp = GF_ADD( in62, GF_MUL( in63, 62 ) ); \
6711 0 : in63 = GF_ADD( in62, GF_MUL( in63, 63 ) ); \
6712 0 : in62 = temp; \
6713 0 : } \
6714 0 : in60 = GF_ADD( GF_MUL( scratch_2, 143 ), in60 ); \
6715 0 : in61 = GF_ADD( GF_MUL( scratch_3, 143 ), in61 ); \
6716 0 : { \
6717 0 : gf_t temp = GF_ADD( GF_MUL( in56, 80 ), GF_MUL( in60, 81 ) ); \
6718 0 : in60 = GF_ADD( in56, in60 ); \
6719 0 : in56 = temp; \
6720 0 : } \
6721 0 : { \
6722 0 : gf_t temp = GF_ADD( GF_MUL( in57, 80 ), GF_MUL( in61, 81 ) ); \
6723 0 : in61 = GF_ADD( in57, in61 ); \
6724 0 : in57 = temp; \
6725 0 : } \
6726 0 : in58 = GF_ADD( GF_MUL( scratch_6, 81 ), in58 ); \
6727 0 : in59 = GF_ADD( GF_MUL( scratch_7, 81 ), in59 ); \
6728 0 : { \
6729 0 : gf_t temp = GF_ADD( GF_MUL( in48, 164 ), GF_MUL( in56, 165 ) ); \
6730 0 : in56 = GF_ADD( in48, in56 ); \
6731 0 : in48 = temp; \
6732 0 : } \
6733 0 : { \
6734 0 : gf_t temp = GF_ADD( GF_MUL( in49, 164 ), GF_MUL( in57, 165 ) ); \
6735 0 : in57 = GF_ADD( in49, in57 ); \
6736 0 : in49 = temp; \
6737 0 : } \
6738 0 : { \
6739 0 : gf_t temp = GF_ADD( GF_MUL( in50, 164 ), GF_MUL( in58, 165 ) ); \
6740 0 : in58 = GF_ADD( in50, in58 ); \
6741 0 : in50 = temp; \
6742 0 : } \
6743 0 : { \
6744 0 : gf_t temp = GF_ADD( GF_MUL( in51, 164 ), GF_MUL( in59, 165 ) ); \
6745 0 : in59 = GF_ADD( in51, in59 ); \
6746 0 : in51 = temp; \
6747 0 : } \
6748 0 : { \
6749 0 : gf_t temp = GF_ADD( GF_MUL( in52, 164 ), GF_MUL( in60, 165 ) ); \
6750 0 : in60 = GF_ADD( in52, in60 ); \
6751 0 : in52 = temp; \
6752 0 : } \
6753 0 : { \
6754 0 : gf_t temp = GF_ADD( GF_MUL( in53, 164 ), GF_MUL( in61, 165 ) ); \
6755 0 : in61 = GF_ADD( in53, in61 ); \
6756 0 : in53 = temp; \
6757 0 : } \
6758 0 : in54 = GF_ADD( GF_MUL( scratch_14, 165 ), in54 ); \
6759 0 : in55 = GF_ADD( GF_MUL( scratch_15, 165 ), in55 ); \
6760 0 : { \
6761 0 : gf_t temp = GF_ADD( GF_MUL( in32, 70 ), GF_MUL( in48, 71 ) ); \
6762 0 : in48 = GF_ADD( in32, in48 ); \
6763 0 : in32 = temp; \
6764 0 : } \
6765 0 : { \
6766 0 : gf_t temp = GF_ADD( GF_MUL( in33, 70 ), GF_MUL( in49, 71 ) ); \
6767 0 : in49 = GF_ADD( in33, in49 ); \
6768 0 : in33 = temp; \
6769 0 : } \
6770 0 : { \
6771 0 : gf_t temp = GF_ADD( GF_MUL( in34, 70 ), GF_MUL( in50, 71 ) ); \
6772 0 : in50 = GF_ADD( in34, in50 ); \
6773 0 : in34 = temp; \
6774 0 : } \
6775 0 : { \
6776 0 : gf_t temp = GF_ADD( GF_MUL( in35, 70 ), GF_MUL( in51, 71 ) ); \
6777 0 : in51 = GF_ADD( in35, in51 ); \
6778 0 : in35 = temp; \
6779 0 : } \
6780 0 : { \
6781 0 : gf_t temp = GF_ADD( GF_MUL( in36, 70 ), GF_MUL( in52, 71 ) ); \
6782 0 : in52 = GF_ADD( in36, in52 ); \
6783 0 : in36 = temp; \
6784 0 : } \
6785 0 : { \
6786 0 : gf_t temp = GF_ADD( GF_MUL( in37, 70 ), GF_MUL( in53, 71 ) ); \
6787 0 : in53 = GF_ADD( in37, in53 ); \
6788 0 : in37 = temp; \
6789 0 : } \
6790 0 : { \
6791 0 : gf_t temp = GF_ADD( GF_MUL( in38, 70 ), GF_MUL( in54, 71 ) ); \
6792 0 : in54 = GF_ADD( in38, in54 ); \
6793 0 : in38 = temp; \
6794 0 : } \
6795 0 : { \
6796 0 : gf_t temp = GF_ADD( GF_MUL( in39, 70 ), GF_MUL( in55, 71 ) ); \
6797 0 : in55 = GF_ADD( in39, in55 ); \
6798 0 : in39 = temp; \
6799 0 : } \
6800 0 : { \
6801 0 : gf_t temp = GF_ADD( GF_MUL( in40, 70 ), GF_MUL( in56, 71 ) ); \
6802 0 : in56 = GF_ADD( in40, in56 ); \
6803 0 : in40 = temp; \
6804 0 : } \
6805 0 : { \
6806 0 : gf_t temp = GF_ADD( GF_MUL( in41, 70 ), GF_MUL( in57, 71 ) ); \
6807 0 : in57 = GF_ADD( in41, in57 ); \
6808 0 : in41 = temp; \
6809 0 : } \
6810 0 : { \
6811 0 : gf_t temp = GF_ADD( GF_MUL( in42, 70 ), GF_MUL( in58, 71 ) ); \
6812 0 : in58 = GF_ADD( in42, in58 ); \
6813 0 : in42 = temp; \
6814 0 : } \
6815 0 : { \
6816 0 : gf_t temp = GF_ADD( GF_MUL( in43, 70 ), GF_MUL( in59, 71 ) ); \
6817 0 : in59 = GF_ADD( in43, in59 ); \
6818 0 : in43 = temp; \
6819 0 : } \
6820 0 : { \
6821 0 : gf_t temp = GF_ADD( GF_MUL( in44, 70 ), GF_MUL( in60, 71 ) ); \
6822 0 : in60 = GF_ADD( in44, in60 ); \
6823 0 : in44 = temp; \
6824 0 : } \
6825 0 : { \
6826 0 : gf_t temp = GF_ADD( GF_MUL( in45, 70 ), GF_MUL( in61, 71 ) ); \
6827 0 : in61 = GF_ADD( in45, in61 ); \
6828 0 : in45 = temp; \
6829 0 : } \
6830 0 : in46 = GF_ADD( GF_MUL( scratch_30, 71 ), in46 ); \
6831 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
6832 0 : in32 = GF_ADD( in00, in32 ); \
6833 0 : in33 = GF_ADD( in01, in33 ); \
6834 0 : in34 = GF_ADD( in02, in34 ); \
6835 0 : in35 = GF_ADD( in03, in35 ); \
6836 0 : in36 = GF_ADD( in04, in36 ); \
6837 0 : in37 = GF_ADD( in05, in37 ); \
6838 0 : in38 = GF_ADD( in06, in38 ); \
6839 0 : in39 = GF_ADD( in07, in39 ); \
6840 0 : in40 = GF_ADD( in08, in40 ); \
6841 0 : in41 = GF_ADD( in09, in41 ); \
6842 0 : in42 = GF_ADD( in10, in42 ); \
6843 0 : in43 = GF_ADD( in11, in43 ); \
6844 0 : in44 = GF_ADD( in12, in44 ); \
6845 0 : in45 = GF_ADD( in13, in45 ); \
6846 0 : in46 = GF_ADD( in14, in46 ); \
6847 0 : in47 = GF_ADD( in15, in47 ); \
6848 0 : in48 = GF_ADD( in16, in48 ); \
6849 0 : in49 = GF_ADD( in17, in49 ); \
6850 0 : in50 = GF_ADD( in18, in50 ); \
6851 0 : in51 = GF_ADD( in19, in51 ); \
6852 0 : in52 = GF_ADD( in20, in52 ); \
6853 0 : in53 = GF_ADD( in21, in53 ); \
6854 0 : in54 = GF_ADD( in22, in54 ); \
6855 0 : in55 = GF_ADD( in23, in55 ); \
6856 0 : in56 = GF_ADD( in24, in56 ); \
6857 0 : in57 = GF_ADD( in25, in57 ); \
6858 0 : in58 = GF_ADD( in26, in58 ); \
6859 0 : in59 = GF_ADD( in27, in59 ); \
6860 0 : in60 = GF_ADD( in28, in60 ); \
6861 0 : in61 = GF_ADD( in29, in61 ); \
6862 0 : } while( 0 )
6863 :
6864 : void fd_reedsol_ppt_64_63( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
6865 : #define FD_REEDSOL_PPT_IMPL_64_63( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33 , \
6866 : in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63) \
6867 0 : do { \
6868 0 : gf_t scratch_15, scratch_3, scratch_31, scratch_7; \
6869 0 : FD_REEDSOL_GENERATE_IFFT( 32, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31 ); \
6870 0 : in63 = GF_ADD( in31, in63 ); \
6871 0 : scratch_31 = in63; \
6872 0 : FD_REEDSOL_GENERATE_IFFT( 16, 32, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47 ); \
6873 0 : in63 = GF_ADD( in47, in63 ); \
6874 0 : scratch_15 = in63; \
6875 0 : FD_REEDSOL_GENERATE_IFFT( 8, 48, in48, in49, in50, in51, in52, in53, in54, in55 ); \
6876 0 : in63 = GF_ADD( in55, in63 ); \
6877 0 : scratch_7 = in63; \
6878 0 : FD_REEDSOL_GENERATE_IFFT( 4, 56, in56, in57, in58, in59 ); \
6879 0 : in63 = GF_ADD( in59, in63 ); \
6880 0 : scratch_3 = in63; \
6881 0 : { \
6882 0 : gf_t temp = GF_ADD( GF_MUL( in60, 61 ), GF_MUL( in61, 60 ) ); \
6883 0 : in61 = GF_ADD( in60, in61 ); \
6884 0 : in60 = temp; \
6885 0 : } \
6886 0 : in63 = GF_ADD( in61, in63 ); \
6887 0 : { \
6888 0 : gf_t temp = GF_ADD( in62, GF_MUL( in63, 62 ) ); \
6889 0 : in63 = GF_ADD( in62, in63 ); \
6890 0 : in62 = temp; \
6891 0 : } \
6892 0 : { \
6893 0 : gf_t temp = GF_ADD( GF_MUL( in60, 142 ), GF_MUL( in62, 143 ) ); \
6894 0 : in62 = GF_ADD( in60, in62 ); \
6895 0 : in60 = temp; \
6896 0 : } \
6897 0 : in61 = GF_ADD( GF_MUL( scratch_3, 143 ), in61 ); \
6898 0 : { \
6899 0 : gf_t temp = GF_ADD( GF_MUL( in56, 80 ), GF_MUL( in60, 81 ) ); \
6900 0 : in60 = GF_ADD( in56, in60 ); \
6901 0 : in56 = temp; \
6902 0 : } \
6903 0 : { \
6904 0 : gf_t temp = GF_ADD( GF_MUL( in57, 80 ), GF_MUL( in61, 81 ) ); \
6905 0 : in61 = GF_ADD( in57, in61 ); \
6906 0 : in57 = temp; \
6907 0 : } \
6908 0 : { \
6909 0 : gf_t temp = GF_ADD( GF_MUL( in58, 80 ), GF_MUL( in62, 81 ) ); \
6910 0 : in62 = GF_ADD( in58, in62 ); \
6911 0 : in58 = temp; \
6912 0 : } \
6913 0 : in59 = GF_ADD( GF_MUL( scratch_7, 81 ), in59 ); \
6914 0 : { \
6915 0 : gf_t temp = GF_ADD( GF_MUL( in48, 164 ), GF_MUL( in56, 165 ) ); \
6916 0 : in56 = GF_ADD( in48, in56 ); \
6917 0 : in48 = temp; \
6918 0 : } \
6919 0 : { \
6920 0 : gf_t temp = GF_ADD( GF_MUL( in49, 164 ), GF_MUL( in57, 165 ) ); \
6921 0 : in57 = GF_ADD( in49, in57 ); \
6922 0 : in49 = temp; \
6923 0 : } \
6924 0 : { \
6925 0 : gf_t temp = GF_ADD( GF_MUL( in50, 164 ), GF_MUL( in58, 165 ) ); \
6926 0 : in58 = GF_ADD( in50, in58 ); \
6927 0 : in50 = temp; \
6928 0 : } \
6929 0 : { \
6930 0 : gf_t temp = GF_ADD( GF_MUL( in51, 164 ), GF_MUL( in59, 165 ) ); \
6931 0 : in59 = GF_ADD( in51, in59 ); \
6932 0 : in51 = temp; \
6933 0 : } \
6934 0 : { \
6935 0 : gf_t temp = GF_ADD( GF_MUL( in52, 164 ), GF_MUL( in60, 165 ) ); \
6936 0 : in60 = GF_ADD( in52, in60 ); \
6937 0 : in52 = temp; \
6938 0 : } \
6939 0 : { \
6940 0 : gf_t temp = GF_ADD( GF_MUL( in53, 164 ), GF_MUL( in61, 165 ) ); \
6941 0 : in61 = GF_ADD( in53, in61 ); \
6942 0 : in53 = temp; \
6943 0 : } \
6944 0 : { \
6945 0 : gf_t temp = GF_ADD( GF_MUL( in54, 164 ), GF_MUL( in62, 165 ) ); \
6946 0 : in62 = GF_ADD( in54, in62 ); \
6947 0 : in54 = temp; \
6948 0 : } \
6949 0 : in55 = GF_ADD( GF_MUL( scratch_15, 165 ), in55 ); \
6950 0 : { \
6951 0 : gf_t temp = GF_ADD( GF_MUL( in32, 70 ), GF_MUL( in48, 71 ) ); \
6952 0 : in48 = GF_ADD( in32, in48 ); \
6953 0 : in32 = temp; \
6954 0 : } \
6955 0 : { \
6956 0 : gf_t temp = GF_ADD( GF_MUL( in33, 70 ), GF_MUL( in49, 71 ) ); \
6957 0 : in49 = GF_ADD( in33, in49 ); \
6958 0 : in33 = temp; \
6959 0 : } \
6960 0 : { \
6961 0 : gf_t temp = GF_ADD( GF_MUL( in34, 70 ), GF_MUL( in50, 71 ) ); \
6962 0 : in50 = GF_ADD( in34, in50 ); \
6963 0 : in34 = temp; \
6964 0 : } \
6965 0 : { \
6966 0 : gf_t temp = GF_ADD( GF_MUL( in35, 70 ), GF_MUL( in51, 71 ) ); \
6967 0 : in51 = GF_ADD( in35, in51 ); \
6968 0 : in35 = temp; \
6969 0 : } \
6970 0 : { \
6971 0 : gf_t temp = GF_ADD( GF_MUL( in36, 70 ), GF_MUL( in52, 71 ) ); \
6972 0 : in52 = GF_ADD( in36, in52 ); \
6973 0 : in36 = temp; \
6974 0 : } \
6975 0 : { \
6976 0 : gf_t temp = GF_ADD( GF_MUL( in37, 70 ), GF_MUL( in53, 71 ) ); \
6977 0 : in53 = GF_ADD( in37, in53 ); \
6978 0 : in37 = temp; \
6979 0 : } \
6980 0 : { \
6981 0 : gf_t temp = GF_ADD( GF_MUL( in38, 70 ), GF_MUL( in54, 71 ) ); \
6982 0 : in54 = GF_ADD( in38, in54 ); \
6983 0 : in38 = temp; \
6984 0 : } \
6985 0 : { \
6986 0 : gf_t temp = GF_ADD( GF_MUL( in39, 70 ), GF_MUL( in55, 71 ) ); \
6987 0 : in55 = GF_ADD( in39, in55 ); \
6988 0 : in39 = temp; \
6989 0 : } \
6990 0 : { \
6991 0 : gf_t temp = GF_ADD( GF_MUL( in40, 70 ), GF_MUL( in56, 71 ) ); \
6992 0 : in56 = GF_ADD( in40, in56 ); \
6993 0 : in40 = temp; \
6994 0 : } \
6995 0 : { \
6996 0 : gf_t temp = GF_ADD( GF_MUL( in41, 70 ), GF_MUL( in57, 71 ) ); \
6997 0 : in57 = GF_ADD( in41, in57 ); \
6998 0 : in41 = temp; \
6999 0 : } \
7000 0 : { \
7001 0 : gf_t temp = GF_ADD( GF_MUL( in42, 70 ), GF_MUL( in58, 71 ) ); \
7002 0 : in58 = GF_ADD( in42, in58 ); \
7003 0 : in42 = temp; \
7004 0 : } \
7005 0 : { \
7006 0 : gf_t temp = GF_ADD( GF_MUL( in43, 70 ), GF_MUL( in59, 71 ) ); \
7007 0 : in59 = GF_ADD( in43, in59 ); \
7008 0 : in43 = temp; \
7009 0 : } \
7010 0 : { \
7011 0 : gf_t temp = GF_ADD( GF_MUL( in44, 70 ), GF_MUL( in60, 71 ) ); \
7012 0 : in60 = GF_ADD( in44, in60 ); \
7013 0 : in44 = temp; \
7014 0 : } \
7015 0 : { \
7016 0 : gf_t temp = GF_ADD( GF_MUL( in45, 70 ), GF_MUL( in61, 71 ) ); \
7017 0 : in61 = GF_ADD( in45, in61 ); \
7018 0 : in45 = temp; \
7019 0 : } \
7020 0 : { \
7021 0 : gf_t temp = GF_ADD( GF_MUL( in46, 70 ), GF_MUL( in62, 71 ) ); \
7022 0 : in62 = GF_ADD( in46, in62 ); \
7023 0 : in46 = temp; \
7024 0 : } \
7025 0 : in47 = GF_ADD( GF_MUL( scratch_31, 71 ), in47 ); \
7026 0 : in32 = GF_ADD( in00, in32 ); \
7027 0 : in33 = GF_ADD( in01, in33 ); \
7028 0 : in34 = GF_ADD( in02, in34 ); \
7029 0 : in35 = GF_ADD( in03, in35 ); \
7030 0 : in36 = GF_ADD( in04, in36 ); \
7031 0 : in37 = GF_ADD( in05, in37 ); \
7032 0 : in38 = GF_ADD( in06, in38 ); \
7033 0 : in39 = GF_ADD( in07, in39 ); \
7034 0 : in40 = GF_ADD( in08, in40 ); \
7035 0 : in41 = GF_ADD( in09, in41 ); \
7036 0 : in42 = GF_ADD( in10, in42 ); \
7037 0 : in43 = GF_ADD( in11, in43 ); \
7038 0 : in44 = GF_ADD( in12, in44 ); \
7039 0 : in45 = GF_ADD( in13, in45 ); \
7040 0 : in46 = GF_ADD( in14, in46 ); \
7041 0 : in47 = GF_ADD( in15, in47 ); \
7042 0 : in48 = GF_ADD( in16, in48 ); \
7043 0 : in49 = GF_ADD( in17, in49 ); \
7044 0 : in50 = GF_ADD( in18, in50 ); \
7045 0 : in51 = GF_ADD( in19, in51 ); \
7046 0 : in52 = GF_ADD( in20, in52 ); \
7047 0 : in53 = GF_ADD( in21, in53 ); \
7048 0 : in54 = GF_ADD( in22, in54 ); \
7049 0 : in55 = GF_ADD( in23, in55 ); \
7050 0 : in56 = GF_ADD( in24, in56 ); \
7051 0 : in57 = GF_ADD( in25, in57 ); \
7052 0 : in58 = GF_ADD( in26, in58 ); \
7053 0 : in59 = GF_ADD( in27, in59 ); \
7054 0 : in60 = GF_ADD( in28, in60 ); \
7055 0 : in61 = GF_ADD( in29, in61 ); \
7056 0 : in62 = GF_ADD( in30, in62 ); \
7057 0 : } while( 0 )
7058 :
7059 : void fd_reedsol_ppt_128_65( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
7060 : #define FD_REEDSOL_PPT_IMPL_128_65( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65 , \
7061 : in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, in122, in123, in124, in125, in126, in127) \
7062 0 : do { \
7063 0 : gf_t scratch_16, scratch_2, scratch_32, scratch_4, scratch_8; \
7064 0 : FD_REEDSOL_GENERATE_IFFT( 64, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
7065 0 : in65 = GF_ADD( in01, in65 ); \
7066 0 : in66 = GF_ADD( in02, in66 ); \
7067 0 : in67 = GF_ADD( in03, in67 ); \
7068 0 : in68 = GF_ADD( in04, in68 ); \
7069 0 : in69 = GF_ADD( in05, in69 ); \
7070 0 : in70 = GF_ADD( in06, in70 ); \
7071 0 : in71 = GF_ADD( in07, in71 ); \
7072 0 : in72 = GF_ADD( in08, in72 ); \
7073 0 : in73 = GF_ADD( in09, in73 ); \
7074 0 : in74 = GF_ADD( in10, in74 ); \
7075 0 : in75 = GF_ADD( in11, in75 ); \
7076 0 : in76 = GF_ADD( in12, in76 ); \
7077 0 : in77 = GF_ADD( in13, in77 ); \
7078 0 : in78 = GF_ADD( in14, in78 ); \
7079 0 : in79 = GF_ADD( in15, in79 ); \
7080 0 : in80 = GF_ADD( in16, in80 ); \
7081 0 : in81 = GF_ADD( in17, in81 ); \
7082 0 : in82 = GF_ADD( in18, in82 ); \
7083 0 : in83 = GF_ADD( in19, in83 ); \
7084 0 : in84 = GF_ADD( in20, in84 ); \
7085 0 : in85 = GF_ADD( in21, in85 ); \
7086 0 : in86 = GF_ADD( in22, in86 ); \
7087 0 : in87 = GF_ADD( in23, in87 ); \
7088 0 : in88 = GF_ADD( in24, in88 ); \
7089 0 : in89 = GF_ADD( in25, in89 ); \
7090 0 : in90 = GF_ADD( in26, in90 ); \
7091 0 : in91 = GF_ADD( in27, in91 ); \
7092 0 : in92 = GF_ADD( in28, in92 ); \
7093 0 : in93 = GF_ADD( in29, in93 ); \
7094 0 : in94 = GF_ADD( in30, in94 ); \
7095 0 : in95 = GF_ADD( in31, in95 ); \
7096 0 : in96 = GF_ADD( in32, in96 ); \
7097 0 : in97 = GF_ADD( in33, in97 ); \
7098 0 : in98 = GF_ADD( in34, in98 ); \
7099 0 : in99 = GF_ADD( in35, in99 ); \
7100 0 : in100 = GF_ADD( in36, in100 ); \
7101 0 : in101 = GF_ADD( in37, in101 ); \
7102 0 : in102 = GF_ADD( in38, in102 ); \
7103 0 : in103 = GF_ADD( in39, in103 ); \
7104 0 : in104 = GF_ADD( in40, in104 ); \
7105 0 : in105 = GF_ADD( in41, in105 ); \
7106 0 : in106 = GF_ADD( in42, in106 ); \
7107 0 : in107 = GF_ADD( in43, in107 ); \
7108 0 : in108 = GF_ADD( in44, in108 ); \
7109 0 : in109 = GF_ADD( in45, in109 ); \
7110 0 : in110 = GF_ADD( in46, in110 ); \
7111 0 : in111 = GF_ADD( in47, in111 ); \
7112 0 : in112 = GF_ADD( in48, in112 ); \
7113 0 : in113 = GF_ADD( in49, in113 ); \
7114 0 : in114 = GF_ADD( in50, in114 ); \
7115 0 : in115 = GF_ADD( in51, in115 ); \
7116 0 : in116 = GF_ADD( in52, in116 ); \
7117 0 : in117 = GF_ADD( in53, in117 ); \
7118 0 : in118 = GF_ADD( in54, in118 ); \
7119 0 : in119 = GF_ADD( in55, in119 ); \
7120 0 : in120 = GF_ADD( in56, in120 ); \
7121 0 : in121 = GF_ADD( in57, in121 ); \
7122 0 : in122 = GF_ADD( in58, in122 ); \
7123 0 : in123 = GF_ADD( in59, in123 ); \
7124 0 : in124 = GF_ADD( in60, in124 ); \
7125 0 : in125 = GF_ADD( in61, in125 ); \
7126 0 : in126 = GF_ADD( in62, in126 ); \
7127 0 : in127 = GF_ADD( in63, in127 ); \
7128 0 : scratch_32 = in96; \
7129 0 : { \
7130 0 : gf_t temp = GF_ADD( in65, GF_MUL( in97, 218 ) ); \
7131 0 : in97 = GF_ADD( in65, GF_MUL( in97, 219 ) ); \
7132 0 : in65 = temp; \
7133 0 : } \
7134 0 : { \
7135 0 : gf_t temp = GF_ADD( in66, GF_MUL( in98, 218 ) ); \
7136 0 : in98 = GF_ADD( in66, GF_MUL( in98, 219 ) ); \
7137 0 : in66 = temp; \
7138 0 : } \
7139 0 : { \
7140 0 : gf_t temp = GF_ADD( in67, GF_MUL( in99, 218 ) ); \
7141 0 : in99 = GF_ADD( in67, GF_MUL( in99, 219 ) ); \
7142 0 : in67 = temp; \
7143 0 : } \
7144 0 : { \
7145 0 : gf_t temp = GF_ADD( in68, GF_MUL( in100, 218 ) ); \
7146 0 : in100 = GF_ADD( in68, GF_MUL( in100, 219 ) ); \
7147 0 : in68 = temp; \
7148 0 : } \
7149 0 : { \
7150 0 : gf_t temp = GF_ADD( in69, GF_MUL( in101, 218 ) ); \
7151 0 : in101 = GF_ADD( in69, GF_MUL( in101, 219 ) ); \
7152 0 : in69 = temp; \
7153 0 : } \
7154 0 : { \
7155 0 : gf_t temp = GF_ADD( in70, GF_MUL( in102, 218 ) ); \
7156 0 : in102 = GF_ADD( in70, GF_MUL( in102, 219 ) ); \
7157 0 : in70 = temp; \
7158 0 : } \
7159 0 : { \
7160 0 : gf_t temp = GF_ADD( in71, GF_MUL( in103, 218 ) ); \
7161 0 : in103 = GF_ADD( in71, GF_MUL( in103, 219 ) ); \
7162 0 : in71 = temp; \
7163 0 : } \
7164 0 : { \
7165 0 : gf_t temp = GF_ADD( in72, GF_MUL( in104, 218 ) ); \
7166 0 : in104 = GF_ADD( in72, GF_MUL( in104, 219 ) ); \
7167 0 : in72 = temp; \
7168 0 : } \
7169 0 : { \
7170 0 : gf_t temp = GF_ADD( in73, GF_MUL( in105, 218 ) ); \
7171 0 : in105 = GF_ADD( in73, GF_MUL( in105, 219 ) ); \
7172 0 : in73 = temp; \
7173 0 : } \
7174 0 : { \
7175 0 : gf_t temp = GF_ADD( in74, GF_MUL( in106, 218 ) ); \
7176 0 : in106 = GF_ADD( in74, GF_MUL( in106, 219 ) ); \
7177 0 : in74 = temp; \
7178 0 : } \
7179 0 : { \
7180 0 : gf_t temp = GF_ADD( in75, GF_MUL( in107, 218 ) ); \
7181 0 : in107 = GF_ADD( in75, GF_MUL( in107, 219 ) ); \
7182 0 : in75 = temp; \
7183 0 : } \
7184 0 : { \
7185 0 : gf_t temp = GF_ADD( in76, GF_MUL( in108, 218 ) ); \
7186 0 : in108 = GF_ADD( in76, GF_MUL( in108, 219 ) ); \
7187 0 : in76 = temp; \
7188 0 : } \
7189 0 : { \
7190 0 : gf_t temp = GF_ADD( in77, GF_MUL( in109, 218 ) ); \
7191 0 : in109 = GF_ADD( in77, GF_MUL( in109, 219 ) ); \
7192 0 : in77 = temp; \
7193 0 : } \
7194 0 : { \
7195 0 : gf_t temp = GF_ADD( in78, GF_MUL( in110, 218 ) ); \
7196 0 : in110 = GF_ADD( in78, GF_MUL( in110, 219 ) ); \
7197 0 : in78 = temp; \
7198 0 : } \
7199 0 : { \
7200 0 : gf_t temp = GF_ADD( in79, GF_MUL( in111, 218 ) ); \
7201 0 : in111 = GF_ADD( in79, GF_MUL( in111, 219 ) ); \
7202 0 : in79 = temp; \
7203 0 : } \
7204 0 : { \
7205 0 : gf_t temp = GF_ADD( in80, GF_MUL( in112, 218 ) ); \
7206 0 : in112 = GF_ADD( in80, GF_MUL( in112, 219 ) ); \
7207 0 : in80 = temp; \
7208 0 : } \
7209 0 : { \
7210 0 : gf_t temp = GF_ADD( in81, GF_MUL( in113, 218 ) ); \
7211 0 : in113 = GF_ADD( in81, GF_MUL( in113, 219 ) ); \
7212 0 : in81 = temp; \
7213 0 : } \
7214 0 : { \
7215 0 : gf_t temp = GF_ADD( in82, GF_MUL( in114, 218 ) ); \
7216 0 : in114 = GF_ADD( in82, GF_MUL( in114, 219 ) ); \
7217 0 : in82 = temp; \
7218 0 : } \
7219 0 : { \
7220 0 : gf_t temp = GF_ADD( in83, GF_MUL( in115, 218 ) ); \
7221 0 : in115 = GF_ADD( in83, GF_MUL( in115, 219 ) ); \
7222 0 : in83 = temp; \
7223 0 : } \
7224 0 : { \
7225 0 : gf_t temp = GF_ADD( in84, GF_MUL( in116, 218 ) ); \
7226 0 : in116 = GF_ADD( in84, GF_MUL( in116, 219 ) ); \
7227 0 : in84 = temp; \
7228 0 : } \
7229 0 : { \
7230 0 : gf_t temp = GF_ADD( in85, GF_MUL( in117, 218 ) ); \
7231 0 : in117 = GF_ADD( in85, GF_MUL( in117, 219 ) ); \
7232 0 : in85 = temp; \
7233 0 : } \
7234 0 : { \
7235 0 : gf_t temp = GF_ADD( in86, GF_MUL( in118, 218 ) ); \
7236 0 : in118 = GF_ADD( in86, GF_MUL( in118, 219 ) ); \
7237 0 : in86 = temp; \
7238 0 : } \
7239 0 : { \
7240 0 : gf_t temp = GF_ADD( in87, GF_MUL( in119, 218 ) ); \
7241 0 : in119 = GF_ADD( in87, GF_MUL( in119, 219 ) ); \
7242 0 : in87 = temp; \
7243 0 : } \
7244 0 : { \
7245 0 : gf_t temp = GF_ADD( in88, GF_MUL( in120, 218 ) ); \
7246 0 : in120 = GF_ADD( in88, GF_MUL( in120, 219 ) ); \
7247 0 : in88 = temp; \
7248 0 : } \
7249 0 : { \
7250 0 : gf_t temp = GF_ADD( in89, GF_MUL( in121, 218 ) ); \
7251 0 : in121 = GF_ADD( in89, GF_MUL( in121, 219 ) ); \
7252 0 : in89 = temp; \
7253 0 : } \
7254 0 : { \
7255 0 : gf_t temp = GF_ADD( in90, GF_MUL( in122, 218 ) ); \
7256 0 : in122 = GF_ADD( in90, GF_MUL( in122, 219 ) ); \
7257 0 : in90 = temp; \
7258 0 : } \
7259 0 : { \
7260 0 : gf_t temp = GF_ADD( in91, GF_MUL( in123, 218 ) ); \
7261 0 : in123 = GF_ADD( in91, GF_MUL( in123, 219 ) ); \
7262 0 : in91 = temp; \
7263 0 : } \
7264 0 : { \
7265 0 : gf_t temp = GF_ADD( in92, GF_MUL( in124, 218 ) ); \
7266 0 : in124 = GF_ADD( in92, GF_MUL( in124, 219 ) ); \
7267 0 : in92 = temp; \
7268 0 : } \
7269 0 : { \
7270 0 : gf_t temp = GF_ADD( in93, GF_MUL( in125, 218 ) ); \
7271 0 : in125 = GF_ADD( in93, GF_MUL( in125, 219 ) ); \
7272 0 : in93 = temp; \
7273 0 : } \
7274 0 : { \
7275 0 : gf_t temp = GF_ADD( in94, GF_MUL( in126, 218 ) ); \
7276 0 : in126 = GF_ADD( in94, GF_MUL( in126, 219 ) ); \
7277 0 : in94 = temp; \
7278 0 : } \
7279 0 : { \
7280 0 : gf_t temp = GF_ADD( in95, GF_MUL( in127, 218 ) ); \
7281 0 : in127 = GF_ADD( in95, GF_MUL( in127, 219 ) ); \
7282 0 : in95 = temp; \
7283 0 : } \
7284 0 : scratch_16 = in80; \
7285 0 : { \
7286 0 : gf_t temp = GF_ADD( in65, GF_MUL( in81, 189 ) ); \
7287 0 : in81 = GF_ADD( in65, GF_MUL( in81, 188 ) ); \
7288 0 : in65 = temp; \
7289 0 : } \
7290 0 : { \
7291 0 : gf_t temp = GF_ADD( in66, GF_MUL( in82, 189 ) ); \
7292 0 : in82 = GF_ADD( in66, GF_MUL( in82, 188 ) ); \
7293 0 : in66 = temp; \
7294 0 : } \
7295 0 : { \
7296 0 : gf_t temp = GF_ADD( in67, GF_MUL( in83, 189 ) ); \
7297 0 : in83 = GF_ADD( in67, GF_MUL( in83, 188 ) ); \
7298 0 : in67 = temp; \
7299 0 : } \
7300 0 : { \
7301 0 : gf_t temp = GF_ADD( in68, GF_MUL( in84, 189 ) ); \
7302 0 : in84 = GF_ADD( in68, GF_MUL( in84, 188 ) ); \
7303 0 : in68 = temp; \
7304 0 : } \
7305 0 : { \
7306 0 : gf_t temp = GF_ADD( in69, GF_MUL( in85, 189 ) ); \
7307 0 : in85 = GF_ADD( in69, GF_MUL( in85, 188 ) ); \
7308 0 : in69 = temp; \
7309 0 : } \
7310 0 : { \
7311 0 : gf_t temp = GF_ADD( in70, GF_MUL( in86, 189 ) ); \
7312 0 : in86 = GF_ADD( in70, GF_MUL( in86, 188 ) ); \
7313 0 : in70 = temp; \
7314 0 : } \
7315 0 : { \
7316 0 : gf_t temp = GF_ADD( in71, GF_MUL( in87, 189 ) ); \
7317 0 : in87 = GF_ADD( in71, GF_MUL( in87, 188 ) ); \
7318 0 : in71 = temp; \
7319 0 : } \
7320 0 : { \
7321 0 : gf_t temp = GF_ADD( in72, GF_MUL( in88, 189 ) ); \
7322 0 : in88 = GF_ADD( in72, GF_MUL( in88, 188 ) ); \
7323 0 : in72 = temp; \
7324 0 : } \
7325 0 : { \
7326 0 : gf_t temp = GF_ADD( in73, GF_MUL( in89, 189 ) ); \
7327 0 : in89 = GF_ADD( in73, GF_MUL( in89, 188 ) ); \
7328 0 : in73 = temp; \
7329 0 : } \
7330 0 : { \
7331 0 : gf_t temp = GF_ADD( in74, GF_MUL( in90, 189 ) ); \
7332 0 : in90 = GF_ADD( in74, GF_MUL( in90, 188 ) ); \
7333 0 : in74 = temp; \
7334 0 : } \
7335 0 : { \
7336 0 : gf_t temp = GF_ADD( in75, GF_MUL( in91, 189 ) ); \
7337 0 : in91 = GF_ADD( in75, GF_MUL( in91, 188 ) ); \
7338 0 : in75 = temp; \
7339 0 : } \
7340 0 : { \
7341 0 : gf_t temp = GF_ADD( in76, GF_MUL( in92, 189 ) ); \
7342 0 : in92 = GF_ADD( in76, GF_MUL( in92, 188 ) ); \
7343 0 : in76 = temp; \
7344 0 : } \
7345 0 : { \
7346 0 : gf_t temp = GF_ADD( in77, GF_MUL( in93, 189 ) ); \
7347 0 : in93 = GF_ADD( in77, GF_MUL( in93, 188 ) ); \
7348 0 : in77 = temp; \
7349 0 : } \
7350 0 : { \
7351 0 : gf_t temp = GF_ADD( in78, GF_MUL( in94, 189 ) ); \
7352 0 : in94 = GF_ADD( in78, GF_MUL( in94, 188 ) ); \
7353 0 : in78 = temp; \
7354 0 : } \
7355 0 : { \
7356 0 : gf_t temp = GF_ADD( in79, GF_MUL( in95, 189 ) ); \
7357 0 : in95 = GF_ADD( in79, GF_MUL( in95, 188 ) ); \
7358 0 : in79 = temp; \
7359 0 : } \
7360 0 : scratch_8 = in72; \
7361 0 : { \
7362 0 : gf_t temp = GF_ADD( in65, GF_MUL( in73, 33 ) ); \
7363 0 : in73 = GF_ADD( in65, GF_MUL( in73, 32 ) ); \
7364 0 : in65 = temp; \
7365 0 : } \
7366 0 : { \
7367 0 : gf_t temp = GF_ADD( in66, GF_MUL( in74, 33 ) ); \
7368 0 : in74 = GF_ADD( in66, GF_MUL( in74, 32 ) ); \
7369 0 : in66 = temp; \
7370 0 : } \
7371 0 : { \
7372 0 : gf_t temp = GF_ADD( in67, GF_MUL( in75, 33 ) ); \
7373 0 : in75 = GF_ADD( in67, GF_MUL( in75, 32 ) ); \
7374 0 : in67 = temp; \
7375 0 : } \
7376 0 : { \
7377 0 : gf_t temp = GF_ADD( in68, GF_MUL( in76, 33 ) ); \
7378 0 : in76 = GF_ADD( in68, GF_MUL( in76, 32 ) ); \
7379 0 : in68 = temp; \
7380 0 : } \
7381 0 : { \
7382 0 : gf_t temp = GF_ADD( in69, GF_MUL( in77, 33 ) ); \
7383 0 : in77 = GF_ADD( in69, GF_MUL( in77, 32 ) ); \
7384 0 : in69 = temp; \
7385 0 : } \
7386 0 : { \
7387 0 : gf_t temp = GF_ADD( in70, GF_MUL( in78, 33 ) ); \
7388 0 : in78 = GF_ADD( in70, GF_MUL( in78, 32 ) ); \
7389 0 : in70 = temp; \
7390 0 : } \
7391 0 : { \
7392 0 : gf_t temp = GF_ADD( in71, GF_MUL( in79, 33 ) ); \
7393 0 : in79 = GF_ADD( in71, GF_MUL( in79, 32 ) ); \
7394 0 : in71 = temp; \
7395 0 : } \
7396 0 : scratch_4 = in68; \
7397 0 : { \
7398 0 : gf_t temp = GF_ADD( in65, GF_MUL( in69, 183 ) ); \
7399 0 : in69 = GF_ADD( in65, GF_MUL( in69, 182 ) ); \
7400 0 : in65 = temp; \
7401 0 : } \
7402 0 : { \
7403 0 : gf_t temp = GF_ADD( in66, GF_MUL( in70, 183 ) ); \
7404 0 : in70 = GF_ADD( in66, GF_MUL( in70, 182 ) ); \
7405 0 : in66 = temp; \
7406 0 : } \
7407 0 : { \
7408 0 : gf_t temp = GF_ADD( in67, GF_MUL( in71, 183 ) ); \
7409 0 : in71 = GF_ADD( in67, GF_MUL( in71, 182 ) ); \
7410 0 : in67 = temp; \
7411 0 : } \
7412 0 : scratch_2 = in66; \
7413 0 : { \
7414 0 : gf_t temp = GF_ADD( in65, GF_MUL( in67, 179 ) ); \
7415 0 : in67 = GF_ADD( in65, GF_MUL( in67, 178 ) ); \
7416 0 : in65 = temp; \
7417 0 : } \
7418 0 : { \
7419 0 : gf_t temp = GF_ADD( in64, GF_MUL( in65, 64 ) ); \
7420 0 : in65 = GF_ADD( in64, in65 ); \
7421 0 : in64 = temp; \
7422 0 : } \
7423 0 : in66 = GF_ADD( in64, in66 ); \
7424 0 : { \
7425 0 : gf_t temp = GF_ADD( in66, GF_MUL( in67, 66 ) ); \
7426 0 : in67 = GF_ADD( in66, GF_MUL( in67, 67 ) ); \
7427 0 : in66 = temp; \
7428 0 : } \
7429 0 : in64 = GF_ADD( GF_MUL( scratch_2, 179 ), in64 ); \
7430 0 : in68 = GF_ADD( in64, in68 ); \
7431 0 : FD_REEDSOL_GENERATE_FFT( 4, 68, in68, in69, in70, in71 ); \
7432 0 : in64 = GF_ADD( GF_MUL( scratch_4, 183 ), in64 ); \
7433 0 : in72 = GF_ADD( in64, in72 ); \
7434 0 : FD_REEDSOL_GENERATE_FFT( 8, 72, in72, in73, in74, in75, in76, in77, in78, in79 ); \
7435 0 : in64 = GF_ADD( GF_MUL( scratch_8, 33 ), in64 ); \
7436 0 : in80 = GF_ADD( in64, in80 ); \
7437 0 : FD_REEDSOL_GENERATE_FFT( 16, 80, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95 ); \
7438 0 : in64 = GF_ADD( GF_MUL( scratch_16, 189 ), in64 ); \
7439 0 : in96 = GF_ADD( in64, in96 ); \
7440 0 : FD_REEDSOL_GENERATE_FFT( 32, 96, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, in122, in123, in124, in125, in126, in127 ); \
7441 0 : in64 = GF_ADD( GF_MUL( scratch_32, 218 ), in64 ); \
7442 0 : in64 = GF_ADD( in00, in64 ); \
7443 0 : } while( 0 )
7444 :
7445 : void fd_reedsol_ppt_128_66( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
7446 : #define FD_REEDSOL_PPT_IMPL_128_66( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65 , \
7447 : in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, in122, in123, in124, in125, in126, in127) \
7448 0 : do { \
7449 0 : gf_t scratch_16, scratch_17, scratch_2, scratch_3, scratch_32, scratch_33, scratch_4, scratch_5, scratch_8, scratch_9; \
7450 0 : FD_REEDSOL_GENERATE_IFFT( 64, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
7451 0 : in66 = GF_ADD( in02, in66 ); \
7452 0 : in67 = GF_ADD( in03, in67 ); \
7453 0 : in68 = GF_ADD( in04, in68 ); \
7454 0 : in69 = GF_ADD( in05, in69 ); \
7455 0 : in70 = GF_ADD( in06, in70 ); \
7456 0 : in71 = GF_ADD( in07, in71 ); \
7457 0 : in72 = GF_ADD( in08, in72 ); \
7458 0 : in73 = GF_ADD( in09, in73 ); \
7459 0 : in74 = GF_ADD( in10, in74 ); \
7460 0 : in75 = GF_ADD( in11, in75 ); \
7461 0 : in76 = GF_ADD( in12, in76 ); \
7462 0 : in77 = GF_ADD( in13, in77 ); \
7463 0 : in78 = GF_ADD( in14, in78 ); \
7464 0 : in79 = GF_ADD( in15, in79 ); \
7465 0 : in80 = GF_ADD( in16, in80 ); \
7466 0 : in81 = GF_ADD( in17, in81 ); \
7467 0 : in82 = GF_ADD( in18, in82 ); \
7468 0 : in83 = GF_ADD( in19, in83 ); \
7469 0 : in84 = GF_ADD( in20, in84 ); \
7470 0 : in85 = GF_ADD( in21, in85 ); \
7471 0 : in86 = GF_ADD( in22, in86 ); \
7472 0 : in87 = GF_ADD( in23, in87 ); \
7473 0 : in88 = GF_ADD( in24, in88 ); \
7474 0 : in89 = GF_ADD( in25, in89 ); \
7475 0 : in90 = GF_ADD( in26, in90 ); \
7476 0 : in91 = GF_ADD( in27, in91 ); \
7477 0 : in92 = GF_ADD( in28, in92 ); \
7478 0 : in93 = GF_ADD( in29, in93 ); \
7479 0 : in94 = GF_ADD( in30, in94 ); \
7480 0 : in95 = GF_ADD( in31, in95 ); \
7481 0 : in96 = GF_ADD( in32, in96 ); \
7482 0 : in97 = GF_ADD( in33, in97 ); \
7483 0 : in98 = GF_ADD( in34, in98 ); \
7484 0 : in99 = GF_ADD( in35, in99 ); \
7485 0 : in100 = GF_ADD( in36, in100 ); \
7486 0 : in101 = GF_ADD( in37, in101 ); \
7487 0 : in102 = GF_ADD( in38, in102 ); \
7488 0 : in103 = GF_ADD( in39, in103 ); \
7489 0 : in104 = GF_ADD( in40, in104 ); \
7490 0 : in105 = GF_ADD( in41, in105 ); \
7491 0 : in106 = GF_ADD( in42, in106 ); \
7492 0 : in107 = GF_ADD( in43, in107 ); \
7493 0 : in108 = GF_ADD( in44, in108 ); \
7494 0 : in109 = GF_ADD( in45, in109 ); \
7495 0 : in110 = GF_ADD( in46, in110 ); \
7496 0 : in111 = GF_ADD( in47, in111 ); \
7497 0 : in112 = GF_ADD( in48, in112 ); \
7498 0 : in113 = GF_ADD( in49, in113 ); \
7499 0 : in114 = GF_ADD( in50, in114 ); \
7500 0 : in115 = GF_ADD( in51, in115 ); \
7501 0 : in116 = GF_ADD( in52, in116 ); \
7502 0 : in117 = GF_ADD( in53, in117 ); \
7503 0 : in118 = GF_ADD( in54, in118 ); \
7504 0 : in119 = GF_ADD( in55, in119 ); \
7505 0 : in120 = GF_ADD( in56, in120 ); \
7506 0 : in121 = GF_ADD( in57, in121 ); \
7507 0 : in122 = GF_ADD( in58, in122 ); \
7508 0 : in123 = GF_ADD( in59, in123 ); \
7509 0 : in124 = GF_ADD( in60, in124 ); \
7510 0 : in125 = GF_ADD( in61, in125 ); \
7511 0 : in126 = GF_ADD( in62, in126 ); \
7512 0 : in127 = GF_ADD( in63, in127 ); \
7513 0 : scratch_32 = in96; \
7514 0 : scratch_33 = in97; \
7515 0 : { \
7516 0 : gf_t temp = GF_ADD( in66, GF_MUL( in98, 218 ) ); \
7517 0 : in98 = GF_ADD( in66, GF_MUL( in98, 219 ) ); \
7518 0 : in66 = temp; \
7519 0 : } \
7520 0 : { \
7521 0 : gf_t temp = GF_ADD( in67, GF_MUL( in99, 218 ) ); \
7522 0 : in99 = GF_ADD( in67, GF_MUL( in99, 219 ) ); \
7523 0 : in67 = temp; \
7524 0 : } \
7525 0 : { \
7526 0 : gf_t temp = GF_ADD( in68, GF_MUL( in100, 218 ) ); \
7527 0 : in100 = GF_ADD( in68, GF_MUL( in100, 219 ) ); \
7528 0 : in68 = temp; \
7529 0 : } \
7530 0 : { \
7531 0 : gf_t temp = GF_ADD( in69, GF_MUL( in101, 218 ) ); \
7532 0 : in101 = GF_ADD( in69, GF_MUL( in101, 219 ) ); \
7533 0 : in69 = temp; \
7534 0 : } \
7535 0 : { \
7536 0 : gf_t temp = GF_ADD( in70, GF_MUL( in102, 218 ) ); \
7537 0 : in102 = GF_ADD( in70, GF_MUL( in102, 219 ) ); \
7538 0 : in70 = temp; \
7539 0 : } \
7540 0 : { \
7541 0 : gf_t temp = GF_ADD( in71, GF_MUL( in103, 218 ) ); \
7542 0 : in103 = GF_ADD( in71, GF_MUL( in103, 219 ) ); \
7543 0 : in71 = temp; \
7544 0 : } \
7545 0 : { \
7546 0 : gf_t temp = GF_ADD( in72, GF_MUL( in104, 218 ) ); \
7547 0 : in104 = GF_ADD( in72, GF_MUL( in104, 219 ) ); \
7548 0 : in72 = temp; \
7549 0 : } \
7550 0 : { \
7551 0 : gf_t temp = GF_ADD( in73, GF_MUL( in105, 218 ) ); \
7552 0 : in105 = GF_ADD( in73, GF_MUL( in105, 219 ) ); \
7553 0 : in73 = temp; \
7554 0 : } \
7555 0 : { \
7556 0 : gf_t temp = GF_ADD( in74, GF_MUL( in106, 218 ) ); \
7557 0 : in106 = GF_ADD( in74, GF_MUL( in106, 219 ) ); \
7558 0 : in74 = temp; \
7559 0 : } \
7560 0 : { \
7561 0 : gf_t temp = GF_ADD( in75, GF_MUL( in107, 218 ) ); \
7562 0 : in107 = GF_ADD( in75, GF_MUL( in107, 219 ) ); \
7563 0 : in75 = temp; \
7564 0 : } \
7565 0 : { \
7566 0 : gf_t temp = GF_ADD( in76, GF_MUL( in108, 218 ) ); \
7567 0 : in108 = GF_ADD( in76, GF_MUL( in108, 219 ) ); \
7568 0 : in76 = temp; \
7569 0 : } \
7570 0 : { \
7571 0 : gf_t temp = GF_ADD( in77, GF_MUL( in109, 218 ) ); \
7572 0 : in109 = GF_ADD( in77, GF_MUL( in109, 219 ) ); \
7573 0 : in77 = temp; \
7574 0 : } \
7575 0 : { \
7576 0 : gf_t temp = GF_ADD( in78, GF_MUL( in110, 218 ) ); \
7577 0 : in110 = GF_ADD( in78, GF_MUL( in110, 219 ) ); \
7578 0 : in78 = temp; \
7579 0 : } \
7580 0 : { \
7581 0 : gf_t temp = GF_ADD( in79, GF_MUL( in111, 218 ) ); \
7582 0 : in111 = GF_ADD( in79, GF_MUL( in111, 219 ) ); \
7583 0 : in79 = temp; \
7584 0 : } \
7585 0 : { \
7586 0 : gf_t temp = GF_ADD( in80, GF_MUL( in112, 218 ) ); \
7587 0 : in112 = GF_ADD( in80, GF_MUL( in112, 219 ) ); \
7588 0 : in80 = temp; \
7589 0 : } \
7590 0 : { \
7591 0 : gf_t temp = GF_ADD( in81, GF_MUL( in113, 218 ) ); \
7592 0 : in113 = GF_ADD( in81, GF_MUL( in113, 219 ) ); \
7593 0 : in81 = temp; \
7594 0 : } \
7595 0 : { \
7596 0 : gf_t temp = GF_ADD( in82, GF_MUL( in114, 218 ) ); \
7597 0 : in114 = GF_ADD( in82, GF_MUL( in114, 219 ) ); \
7598 0 : in82 = temp; \
7599 0 : } \
7600 0 : { \
7601 0 : gf_t temp = GF_ADD( in83, GF_MUL( in115, 218 ) ); \
7602 0 : in115 = GF_ADD( in83, GF_MUL( in115, 219 ) ); \
7603 0 : in83 = temp; \
7604 0 : } \
7605 0 : { \
7606 0 : gf_t temp = GF_ADD( in84, GF_MUL( in116, 218 ) ); \
7607 0 : in116 = GF_ADD( in84, GF_MUL( in116, 219 ) ); \
7608 0 : in84 = temp; \
7609 0 : } \
7610 0 : { \
7611 0 : gf_t temp = GF_ADD( in85, GF_MUL( in117, 218 ) ); \
7612 0 : in117 = GF_ADD( in85, GF_MUL( in117, 219 ) ); \
7613 0 : in85 = temp; \
7614 0 : } \
7615 0 : { \
7616 0 : gf_t temp = GF_ADD( in86, GF_MUL( in118, 218 ) ); \
7617 0 : in118 = GF_ADD( in86, GF_MUL( in118, 219 ) ); \
7618 0 : in86 = temp; \
7619 0 : } \
7620 0 : { \
7621 0 : gf_t temp = GF_ADD( in87, GF_MUL( in119, 218 ) ); \
7622 0 : in119 = GF_ADD( in87, GF_MUL( in119, 219 ) ); \
7623 0 : in87 = temp; \
7624 0 : } \
7625 0 : { \
7626 0 : gf_t temp = GF_ADD( in88, GF_MUL( in120, 218 ) ); \
7627 0 : in120 = GF_ADD( in88, GF_MUL( in120, 219 ) ); \
7628 0 : in88 = temp; \
7629 0 : } \
7630 0 : { \
7631 0 : gf_t temp = GF_ADD( in89, GF_MUL( in121, 218 ) ); \
7632 0 : in121 = GF_ADD( in89, GF_MUL( in121, 219 ) ); \
7633 0 : in89 = temp; \
7634 0 : } \
7635 0 : { \
7636 0 : gf_t temp = GF_ADD( in90, GF_MUL( in122, 218 ) ); \
7637 0 : in122 = GF_ADD( in90, GF_MUL( in122, 219 ) ); \
7638 0 : in90 = temp; \
7639 0 : } \
7640 0 : { \
7641 0 : gf_t temp = GF_ADD( in91, GF_MUL( in123, 218 ) ); \
7642 0 : in123 = GF_ADD( in91, GF_MUL( in123, 219 ) ); \
7643 0 : in91 = temp; \
7644 0 : } \
7645 0 : { \
7646 0 : gf_t temp = GF_ADD( in92, GF_MUL( in124, 218 ) ); \
7647 0 : in124 = GF_ADD( in92, GF_MUL( in124, 219 ) ); \
7648 0 : in92 = temp; \
7649 0 : } \
7650 0 : { \
7651 0 : gf_t temp = GF_ADD( in93, GF_MUL( in125, 218 ) ); \
7652 0 : in125 = GF_ADD( in93, GF_MUL( in125, 219 ) ); \
7653 0 : in93 = temp; \
7654 0 : } \
7655 0 : { \
7656 0 : gf_t temp = GF_ADD( in94, GF_MUL( in126, 218 ) ); \
7657 0 : in126 = GF_ADD( in94, GF_MUL( in126, 219 ) ); \
7658 0 : in94 = temp; \
7659 0 : } \
7660 0 : { \
7661 0 : gf_t temp = GF_ADD( in95, GF_MUL( in127, 218 ) ); \
7662 0 : in127 = GF_ADD( in95, GF_MUL( in127, 219 ) ); \
7663 0 : in95 = temp; \
7664 0 : } \
7665 0 : scratch_16 = in80; \
7666 0 : scratch_17 = in81; \
7667 0 : { \
7668 0 : gf_t temp = GF_ADD( in66, GF_MUL( in82, 189 ) ); \
7669 0 : in82 = GF_ADD( in66, GF_MUL( in82, 188 ) ); \
7670 0 : in66 = temp; \
7671 0 : } \
7672 0 : { \
7673 0 : gf_t temp = GF_ADD( in67, GF_MUL( in83, 189 ) ); \
7674 0 : in83 = GF_ADD( in67, GF_MUL( in83, 188 ) ); \
7675 0 : in67 = temp; \
7676 0 : } \
7677 0 : { \
7678 0 : gf_t temp = GF_ADD( in68, GF_MUL( in84, 189 ) ); \
7679 0 : in84 = GF_ADD( in68, GF_MUL( in84, 188 ) ); \
7680 0 : in68 = temp; \
7681 0 : } \
7682 0 : { \
7683 0 : gf_t temp = GF_ADD( in69, GF_MUL( in85, 189 ) ); \
7684 0 : in85 = GF_ADD( in69, GF_MUL( in85, 188 ) ); \
7685 0 : in69 = temp; \
7686 0 : } \
7687 0 : { \
7688 0 : gf_t temp = GF_ADD( in70, GF_MUL( in86, 189 ) ); \
7689 0 : in86 = GF_ADD( in70, GF_MUL( in86, 188 ) ); \
7690 0 : in70 = temp; \
7691 0 : } \
7692 0 : { \
7693 0 : gf_t temp = GF_ADD( in71, GF_MUL( in87, 189 ) ); \
7694 0 : in87 = GF_ADD( in71, GF_MUL( in87, 188 ) ); \
7695 0 : in71 = temp; \
7696 0 : } \
7697 0 : { \
7698 0 : gf_t temp = GF_ADD( in72, GF_MUL( in88, 189 ) ); \
7699 0 : in88 = GF_ADD( in72, GF_MUL( in88, 188 ) ); \
7700 0 : in72 = temp; \
7701 0 : } \
7702 0 : { \
7703 0 : gf_t temp = GF_ADD( in73, GF_MUL( in89, 189 ) ); \
7704 0 : in89 = GF_ADD( in73, GF_MUL( in89, 188 ) ); \
7705 0 : in73 = temp; \
7706 0 : } \
7707 0 : { \
7708 0 : gf_t temp = GF_ADD( in74, GF_MUL( in90, 189 ) ); \
7709 0 : in90 = GF_ADD( in74, GF_MUL( in90, 188 ) ); \
7710 0 : in74 = temp; \
7711 0 : } \
7712 0 : { \
7713 0 : gf_t temp = GF_ADD( in75, GF_MUL( in91, 189 ) ); \
7714 0 : in91 = GF_ADD( in75, GF_MUL( in91, 188 ) ); \
7715 0 : in75 = temp; \
7716 0 : } \
7717 0 : { \
7718 0 : gf_t temp = GF_ADD( in76, GF_MUL( in92, 189 ) ); \
7719 0 : in92 = GF_ADD( in76, GF_MUL( in92, 188 ) ); \
7720 0 : in76 = temp; \
7721 0 : } \
7722 0 : { \
7723 0 : gf_t temp = GF_ADD( in77, GF_MUL( in93, 189 ) ); \
7724 0 : in93 = GF_ADD( in77, GF_MUL( in93, 188 ) ); \
7725 0 : in77 = temp; \
7726 0 : } \
7727 0 : { \
7728 0 : gf_t temp = GF_ADD( in78, GF_MUL( in94, 189 ) ); \
7729 0 : in94 = GF_ADD( in78, GF_MUL( in94, 188 ) ); \
7730 0 : in78 = temp; \
7731 0 : } \
7732 0 : { \
7733 0 : gf_t temp = GF_ADD( in79, GF_MUL( in95, 189 ) ); \
7734 0 : in95 = GF_ADD( in79, GF_MUL( in95, 188 ) ); \
7735 0 : in79 = temp; \
7736 0 : } \
7737 0 : scratch_8 = in72; \
7738 0 : scratch_9 = in73; \
7739 0 : { \
7740 0 : gf_t temp = GF_ADD( in66, GF_MUL( in74, 33 ) ); \
7741 0 : in74 = GF_ADD( in66, GF_MUL( in74, 32 ) ); \
7742 0 : in66 = temp; \
7743 0 : } \
7744 0 : { \
7745 0 : gf_t temp = GF_ADD( in67, GF_MUL( in75, 33 ) ); \
7746 0 : in75 = GF_ADD( in67, GF_MUL( in75, 32 ) ); \
7747 0 : in67 = temp; \
7748 0 : } \
7749 0 : { \
7750 0 : gf_t temp = GF_ADD( in68, GF_MUL( in76, 33 ) ); \
7751 0 : in76 = GF_ADD( in68, GF_MUL( in76, 32 ) ); \
7752 0 : in68 = temp; \
7753 0 : } \
7754 0 : { \
7755 0 : gf_t temp = GF_ADD( in69, GF_MUL( in77, 33 ) ); \
7756 0 : in77 = GF_ADD( in69, GF_MUL( in77, 32 ) ); \
7757 0 : in69 = temp; \
7758 0 : } \
7759 0 : { \
7760 0 : gf_t temp = GF_ADD( in70, GF_MUL( in78, 33 ) ); \
7761 0 : in78 = GF_ADD( in70, GF_MUL( in78, 32 ) ); \
7762 0 : in70 = temp; \
7763 0 : } \
7764 0 : { \
7765 0 : gf_t temp = GF_ADD( in71, GF_MUL( in79, 33 ) ); \
7766 0 : in79 = GF_ADD( in71, GF_MUL( in79, 32 ) ); \
7767 0 : in71 = temp; \
7768 0 : } \
7769 0 : scratch_4 = in68; \
7770 0 : scratch_5 = in69; \
7771 0 : { \
7772 0 : gf_t temp = GF_ADD( in66, GF_MUL( in70, 183 ) ); \
7773 0 : in70 = GF_ADD( in66, GF_MUL( in70, 182 ) ); \
7774 0 : in66 = temp; \
7775 0 : } \
7776 0 : { \
7777 0 : gf_t temp = GF_ADD( in67, GF_MUL( in71, 183 ) ); \
7778 0 : in71 = GF_ADD( in67, GF_MUL( in71, 182 ) ); \
7779 0 : in67 = temp; \
7780 0 : } \
7781 0 : scratch_2 = in66; \
7782 0 : scratch_3 = in67; \
7783 0 : { \
7784 0 : gf_t temp = GF_ADD( GF_MUL( in64, 65 ), GF_MUL( in65, 64 ) ); \
7785 0 : in65 = GF_ADD( in64, in65 ); \
7786 0 : in64 = temp; \
7787 0 : } \
7788 0 : in66 = GF_ADD( in64, in66 ); \
7789 0 : in67 = GF_ADD( in65, in67 ); \
7790 0 : { \
7791 0 : gf_t temp = GF_ADD( in66, GF_MUL( in67, 66 ) ); \
7792 0 : in67 = GF_ADD( in66, GF_MUL( in67, 67 ) ); \
7793 0 : in66 = temp; \
7794 0 : } \
7795 0 : in64 = GF_ADD( GF_MUL( scratch_2, 179 ), in64 ); \
7796 0 : in65 = GF_ADD( GF_MUL( scratch_3, 179 ), in65 ); \
7797 0 : in68 = GF_ADD( in64, in68 ); \
7798 0 : in69 = GF_ADD( in65, in69 ); \
7799 0 : FD_REEDSOL_GENERATE_FFT( 4, 68, in68, in69, in70, in71 ); \
7800 0 : in64 = GF_ADD( GF_MUL( scratch_4, 183 ), in64 ); \
7801 0 : in65 = GF_ADD( GF_MUL( scratch_5, 183 ), in65 ); \
7802 0 : in72 = GF_ADD( in64, in72 ); \
7803 0 : in73 = GF_ADD( in65, in73 ); \
7804 0 : FD_REEDSOL_GENERATE_FFT( 8, 72, in72, in73, in74, in75, in76, in77, in78, in79 ); \
7805 0 : in64 = GF_ADD( GF_MUL( scratch_8, 33 ), in64 ); \
7806 0 : in65 = GF_ADD( GF_MUL( scratch_9, 33 ), in65 ); \
7807 0 : in80 = GF_ADD( in64, in80 ); \
7808 0 : in81 = GF_ADD( in65, in81 ); \
7809 0 : FD_REEDSOL_GENERATE_FFT( 16, 80, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95 ); \
7810 0 : in64 = GF_ADD( GF_MUL( scratch_16, 189 ), in64 ); \
7811 0 : in65 = GF_ADD( GF_MUL( scratch_17, 189 ), in65 ); \
7812 0 : in96 = GF_ADD( in64, in96 ); \
7813 0 : in97 = GF_ADD( in65, in97 ); \
7814 0 : FD_REEDSOL_GENERATE_FFT( 32, 96, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, in122, in123, in124, in125, in126, in127 ); \
7815 0 : in64 = GF_ADD( GF_MUL( scratch_32, 218 ), in64 ); \
7816 0 : in65 = GF_ADD( GF_MUL( scratch_33, 218 ), in65 ); \
7817 0 : in64 = GF_ADD( in00, in64 ); \
7818 0 : in65 = GF_ADD( in01, in65 ); \
7819 0 : } while( 0 )
7820 :
7821 : void fd_reedsol_ppt_128_67( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
7822 : #define FD_REEDSOL_PPT_IMPL_128_67( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65 , \
7823 : in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, in122, in123, in124, in125, in126, in127) \
7824 0 : do { \
7825 0 : gf_t scratch_10, scratch_16, scratch_17, scratch_18, scratch_3, scratch_32, scratch_33, scratch_34, scratch_4, scratch_5, scratch_6, scratch_8, scratch_9; \
7826 0 : FD_REEDSOL_GENERATE_IFFT( 64, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
7827 0 : in67 = GF_ADD( in03, in67 ); \
7828 0 : in68 = GF_ADD( in04, in68 ); \
7829 0 : in69 = GF_ADD( in05, in69 ); \
7830 0 : in70 = GF_ADD( in06, in70 ); \
7831 0 : in71 = GF_ADD( in07, in71 ); \
7832 0 : in72 = GF_ADD( in08, in72 ); \
7833 0 : in73 = GF_ADD( in09, in73 ); \
7834 0 : in74 = GF_ADD( in10, in74 ); \
7835 0 : in75 = GF_ADD( in11, in75 ); \
7836 0 : in76 = GF_ADD( in12, in76 ); \
7837 0 : in77 = GF_ADD( in13, in77 ); \
7838 0 : in78 = GF_ADD( in14, in78 ); \
7839 0 : in79 = GF_ADD( in15, in79 ); \
7840 0 : in80 = GF_ADD( in16, in80 ); \
7841 0 : in81 = GF_ADD( in17, in81 ); \
7842 0 : in82 = GF_ADD( in18, in82 ); \
7843 0 : in83 = GF_ADD( in19, in83 ); \
7844 0 : in84 = GF_ADD( in20, in84 ); \
7845 0 : in85 = GF_ADD( in21, in85 ); \
7846 0 : in86 = GF_ADD( in22, in86 ); \
7847 0 : in87 = GF_ADD( in23, in87 ); \
7848 0 : in88 = GF_ADD( in24, in88 ); \
7849 0 : in89 = GF_ADD( in25, in89 ); \
7850 0 : in90 = GF_ADD( in26, in90 ); \
7851 0 : in91 = GF_ADD( in27, in91 ); \
7852 0 : in92 = GF_ADD( in28, in92 ); \
7853 0 : in93 = GF_ADD( in29, in93 ); \
7854 0 : in94 = GF_ADD( in30, in94 ); \
7855 0 : in95 = GF_ADD( in31, in95 ); \
7856 0 : in96 = GF_ADD( in32, in96 ); \
7857 0 : in97 = GF_ADD( in33, in97 ); \
7858 0 : in98 = GF_ADD( in34, in98 ); \
7859 0 : in99 = GF_ADD( in35, in99 ); \
7860 0 : in100 = GF_ADD( in36, in100 ); \
7861 0 : in101 = GF_ADD( in37, in101 ); \
7862 0 : in102 = GF_ADD( in38, in102 ); \
7863 0 : in103 = GF_ADD( in39, in103 ); \
7864 0 : in104 = GF_ADD( in40, in104 ); \
7865 0 : in105 = GF_ADD( in41, in105 ); \
7866 0 : in106 = GF_ADD( in42, in106 ); \
7867 0 : in107 = GF_ADD( in43, in107 ); \
7868 0 : in108 = GF_ADD( in44, in108 ); \
7869 0 : in109 = GF_ADD( in45, in109 ); \
7870 0 : in110 = GF_ADD( in46, in110 ); \
7871 0 : in111 = GF_ADD( in47, in111 ); \
7872 0 : in112 = GF_ADD( in48, in112 ); \
7873 0 : in113 = GF_ADD( in49, in113 ); \
7874 0 : in114 = GF_ADD( in50, in114 ); \
7875 0 : in115 = GF_ADD( in51, in115 ); \
7876 0 : in116 = GF_ADD( in52, in116 ); \
7877 0 : in117 = GF_ADD( in53, in117 ); \
7878 0 : in118 = GF_ADD( in54, in118 ); \
7879 0 : in119 = GF_ADD( in55, in119 ); \
7880 0 : in120 = GF_ADD( in56, in120 ); \
7881 0 : in121 = GF_ADD( in57, in121 ); \
7882 0 : in122 = GF_ADD( in58, in122 ); \
7883 0 : in123 = GF_ADD( in59, in123 ); \
7884 0 : in124 = GF_ADD( in60, in124 ); \
7885 0 : in125 = GF_ADD( in61, in125 ); \
7886 0 : in126 = GF_ADD( in62, in126 ); \
7887 0 : in127 = GF_ADD( in63, in127 ); \
7888 0 : scratch_32 = in96; \
7889 0 : scratch_33 = in97; \
7890 0 : scratch_34 = in98; \
7891 0 : { \
7892 0 : gf_t temp = GF_ADD( in67, GF_MUL( in99, 218 ) ); \
7893 0 : in99 = GF_ADD( in67, GF_MUL( in99, 219 ) ); \
7894 0 : in67 = temp; \
7895 0 : } \
7896 0 : { \
7897 0 : gf_t temp = GF_ADD( in68, GF_MUL( in100, 218 ) ); \
7898 0 : in100 = GF_ADD( in68, GF_MUL( in100, 219 ) ); \
7899 0 : in68 = temp; \
7900 0 : } \
7901 0 : { \
7902 0 : gf_t temp = GF_ADD( in69, GF_MUL( in101, 218 ) ); \
7903 0 : in101 = GF_ADD( in69, GF_MUL( in101, 219 ) ); \
7904 0 : in69 = temp; \
7905 0 : } \
7906 0 : { \
7907 0 : gf_t temp = GF_ADD( in70, GF_MUL( in102, 218 ) ); \
7908 0 : in102 = GF_ADD( in70, GF_MUL( in102, 219 ) ); \
7909 0 : in70 = temp; \
7910 0 : } \
7911 0 : { \
7912 0 : gf_t temp = GF_ADD( in71, GF_MUL( in103, 218 ) ); \
7913 0 : in103 = GF_ADD( in71, GF_MUL( in103, 219 ) ); \
7914 0 : in71 = temp; \
7915 0 : } \
7916 0 : { \
7917 0 : gf_t temp = GF_ADD( in72, GF_MUL( in104, 218 ) ); \
7918 0 : in104 = GF_ADD( in72, GF_MUL( in104, 219 ) ); \
7919 0 : in72 = temp; \
7920 0 : } \
7921 0 : { \
7922 0 : gf_t temp = GF_ADD( in73, GF_MUL( in105, 218 ) ); \
7923 0 : in105 = GF_ADD( in73, GF_MUL( in105, 219 ) ); \
7924 0 : in73 = temp; \
7925 0 : } \
7926 0 : { \
7927 0 : gf_t temp = GF_ADD( in74, GF_MUL( in106, 218 ) ); \
7928 0 : in106 = GF_ADD( in74, GF_MUL( in106, 219 ) ); \
7929 0 : in74 = temp; \
7930 0 : } \
7931 0 : { \
7932 0 : gf_t temp = GF_ADD( in75, GF_MUL( in107, 218 ) ); \
7933 0 : in107 = GF_ADD( in75, GF_MUL( in107, 219 ) ); \
7934 0 : in75 = temp; \
7935 0 : } \
7936 0 : { \
7937 0 : gf_t temp = GF_ADD( in76, GF_MUL( in108, 218 ) ); \
7938 0 : in108 = GF_ADD( in76, GF_MUL( in108, 219 ) ); \
7939 0 : in76 = temp; \
7940 0 : } \
7941 0 : { \
7942 0 : gf_t temp = GF_ADD( in77, GF_MUL( in109, 218 ) ); \
7943 0 : in109 = GF_ADD( in77, GF_MUL( in109, 219 ) ); \
7944 0 : in77 = temp; \
7945 0 : } \
7946 0 : { \
7947 0 : gf_t temp = GF_ADD( in78, GF_MUL( in110, 218 ) ); \
7948 0 : in110 = GF_ADD( in78, GF_MUL( in110, 219 ) ); \
7949 0 : in78 = temp; \
7950 0 : } \
7951 0 : { \
7952 0 : gf_t temp = GF_ADD( in79, GF_MUL( in111, 218 ) ); \
7953 0 : in111 = GF_ADD( in79, GF_MUL( in111, 219 ) ); \
7954 0 : in79 = temp; \
7955 0 : } \
7956 0 : { \
7957 0 : gf_t temp = GF_ADD( in80, GF_MUL( in112, 218 ) ); \
7958 0 : in112 = GF_ADD( in80, GF_MUL( in112, 219 ) ); \
7959 0 : in80 = temp; \
7960 0 : } \
7961 0 : { \
7962 0 : gf_t temp = GF_ADD( in81, GF_MUL( in113, 218 ) ); \
7963 0 : in113 = GF_ADD( in81, GF_MUL( in113, 219 ) ); \
7964 0 : in81 = temp; \
7965 0 : } \
7966 0 : { \
7967 0 : gf_t temp = GF_ADD( in82, GF_MUL( in114, 218 ) ); \
7968 0 : in114 = GF_ADD( in82, GF_MUL( in114, 219 ) ); \
7969 0 : in82 = temp; \
7970 0 : } \
7971 0 : { \
7972 0 : gf_t temp = GF_ADD( in83, GF_MUL( in115, 218 ) ); \
7973 0 : in115 = GF_ADD( in83, GF_MUL( in115, 219 ) ); \
7974 0 : in83 = temp; \
7975 0 : } \
7976 0 : { \
7977 0 : gf_t temp = GF_ADD( in84, GF_MUL( in116, 218 ) ); \
7978 0 : in116 = GF_ADD( in84, GF_MUL( in116, 219 ) ); \
7979 0 : in84 = temp; \
7980 0 : } \
7981 0 : { \
7982 0 : gf_t temp = GF_ADD( in85, GF_MUL( in117, 218 ) ); \
7983 0 : in117 = GF_ADD( in85, GF_MUL( in117, 219 ) ); \
7984 0 : in85 = temp; \
7985 0 : } \
7986 0 : { \
7987 0 : gf_t temp = GF_ADD( in86, GF_MUL( in118, 218 ) ); \
7988 0 : in118 = GF_ADD( in86, GF_MUL( in118, 219 ) ); \
7989 0 : in86 = temp; \
7990 0 : } \
7991 0 : { \
7992 0 : gf_t temp = GF_ADD( in87, GF_MUL( in119, 218 ) ); \
7993 0 : in119 = GF_ADD( in87, GF_MUL( in119, 219 ) ); \
7994 0 : in87 = temp; \
7995 0 : } \
7996 0 : { \
7997 0 : gf_t temp = GF_ADD( in88, GF_MUL( in120, 218 ) ); \
7998 0 : in120 = GF_ADD( in88, GF_MUL( in120, 219 ) ); \
7999 0 : in88 = temp; \
8000 0 : } \
8001 0 : { \
8002 0 : gf_t temp = GF_ADD( in89, GF_MUL( in121, 218 ) ); \
8003 0 : in121 = GF_ADD( in89, GF_MUL( in121, 219 ) ); \
8004 0 : in89 = temp; \
8005 0 : } \
8006 0 : { \
8007 0 : gf_t temp = GF_ADD( in90, GF_MUL( in122, 218 ) ); \
8008 0 : in122 = GF_ADD( in90, GF_MUL( in122, 219 ) ); \
8009 0 : in90 = temp; \
8010 0 : } \
8011 0 : { \
8012 0 : gf_t temp = GF_ADD( in91, GF_MUL( in123, 218 ) ); \
8013 0 : in123 = GF_ADD( in91, GF_MUL( in123, 219 ) ); \
8014 0 : in91 = temp; \
8015 0 : } \
8016 0 : { \
8017 0 : gf_t temp = GF_ADD( in92, GF_MUL( in124, 218 ) ); \
8018 0 : in124 = GF_ADD( in92, GF_MUL( in124, 219 ) ); \
8019 0 : in92 = temp; \
8020 0 : } \
8021 0 : { \
8022 0 : gf_t temp = GF_ADD( in93, GF_MUL( in125, 218 ) ); \
8023 0 : in125 = GF_ADD( in93, GF_MUL( in125, 219 ) ); \
8024 0 : in93 = temp; \
8025 0 : } \
8026 0 : { \
8027 0 : gf_t temp = GF_ADD( in94, GF_MUL( in126, 218 ) ); \
8028 0 : in126 = GF_ADD( in94, GF_MUL( in126, 219 ) ); \
8029 0 : in94 = temp; \
8030 0 : } \
8031 0 : { \
8032 0 : gf_t temp = GF_ADD( in95, GF_MUL( in127, 218 ) ); \
8033 0 : in127 = GF_ADD( in95, GF_MUL( in127, 219 ) ); \
8034 0 : in95 = temp; \
8035 0 : } \
8036 0 : scratch_16 = in80; \
8037 0 : scratch_17 = in81; \
8038 0 : scratch_18 = in82; \
8039 0 : { \
8040 0 : gf_t temp = GF_ADD( in67, GF_MUL( in83, 189 ) ); \
8041 0 : in83 = GF_ADD( in67, GF_MUL( in83, 188 ) ); \
8042 0 : in67 = temp; \
8043 0 : } \
8044 0 : { \
8045 0 : gf_t temp = GF_ADD( in68, GF_MUL( in84, 189 ) ); \
8046 0 : in84 = GF_ADD( in68, GF_MUL( in84, 188 ) ); \
8047 0 : in68 = temp; \
8048 0 : } \
8049 0 : { \
8050 0 : gf_t temp = GF_ADD( in69, GF_MUL( in85, 189 ) ); \
8051 0 : in85 = GF_ADD( in69, GF_MUL( in85, 188 ) ); \
8052 0 : in69 = temp; \
8053 0 : } \
8054 0 : { \
8055 0 : gf_t temp = GF_ADD( in70, GF_MUL( in86, 189 ) ); \
8056 0 : in86 = GF_ADD( in70, GF_MUL( in86, 188 ) ); \
8057 0 : in70 = temp; \
8058 0 : } \
8059 0 : { \
8060 0 : gf_t temp = GF_ADD( in71, GF_MUL( in87, 189 ) ); \
8061 0 : in87 = GF_ADD( in71, GF_MUL( in87, 188 ) ); \
8062 0 : in71 = temp; \
8063 0 : } \
8064 0 : { \
8065 0 : gf_t temp = GF_ADD( in72, GF_MUL( in88, 189 ) ); \
8066 0 : in88 = GF_ADD( in72, GF_MUL( in88, 188 ) ); \
8067 0 : in72 = temp; \
8068 0 : } \
8069 0 : { \
8070 0 : gf_t temp = GF_ADD( in73, GF_MUL( in89, 189 ) ); \
8071 0 : in89 = GF_ADD( in73, GF_MUL( in89, 188 ) ); \
8072 0 : in73 = temp; \
8073 0 : } \
8074 0 : { \
8075 0 : gf_t temp = GF_ADD( in74, GF_MUL( in90, 189 ) ); \
8076 0 : in90 = GF_ADD( in74, GF_MUL( in90, 188 ) ); \
8077 0 : in74 = temp; \
8078 0 : } \
8079 0 : { \
8080 0 : gf_t temp = GF_ADD( in75, GF_MUL( in91, 189 ) ); \
8081 0 : in91 = GF_ADD( in75, GF_MUL( in91, 188 ) ); \
8082 0 : in75 = temp; \
8083 0 : } \
8084 0 : { \
8085 0 : gf_t temp = GF_ADD( in76, GF_MUL( in92, 189 ) ); \
8086 0 : in92 = GF_ADD( in76, GF_MUL( in92, 188 ) ); \
8087 0 : in76 = temp; \
8088 0 : } \
8089 0 : { \
8090 0 : gf_t temp = GF_ADD( in77, GF_MUL( in93, 189 ) ); \
8091 0 : in93 = GF_ADD( in77, GF_MUL( in93, 188 ) ); \
8092 0 : in77 = temp; \
8093 0 : } \
8094 0 : { \
8095 0 : gf_t temp = GF_ADD( in78, GF_MUL( in94, 189 ) ); \
8096 0 : in94 = GF_ADD( in78, GF_MUL( in94, 188 ) ); \
8097 0 : in78 = temp; \
8098 0 : } \
8099 0 : { \
8100 0 : gf_t temp = GF_ADD( in79, GF_MUL( in95, 189 ) ); \
8101 0 : in95 = GF_ADD( in79, GF_MUL( in95, 188 ) ); \
8102 0 : in79 = temp; \
8103 0 : } \
8104 0 : scratch_8 = in72; \
8105 0 : scratch_9 = in73; \
8106 0 : scratch_10 = in74; \
8107 0 : { \
8108 0 : gf_t temp = GF_ADD( in67, GF_MUL( in75, 33 ) ); \
8109 0 : in75 = GF_ADD( in67, GF_MUL( in75, 32 ) ); \
8110 0 : in67 = temp; \
8111 0 : } \
8112 0 : { \
8113 0 : gf_t temp = GF_ADD( in68, GF_MUL( in76, 33 ) ); \
8114 0 : in76 = GF_ADD( in68, GF_MUL( in76, 32 ) ); \
8115 0 : in68 = temp; \
8116 0 : } \
8117 0 : { \
8118 0 : gf_t temp = GF_ADD( in69, GF_MUL( in77, 33 ) ); \
8119 0 : in77 = GF_ADD( in69, GF_MUL( in77, 32 ) ); \
8120 0 : in69 = temp; \
8121 0 : } \
8122 0 : { \
8123 0 : gf_t temp = GF_ADD( in70, GF_MUL( in78, 33 ) ); \
8124 0 : in78 = GF_ADD( in70, GF_MUL( in78, 32 ) ); \
8125 0 : in70 = temp; \
8126 0 : } \
8127 0 : { \
8128 0 : gf_t temp = GF_ADD( in71, GF_MUL( in79, 33 ) ); \
8129 0 : in79 = GF_ADD( in71, GF_MUL( in79, 32 ) ); \
8130 0 : in71 = temp; \
8131 0 : } \
8132 0 : scratch_4 = in68; \
8133 0 : scratch_5 = in69; \
8134 0 : scratch_6 = in70; \
8135 0 : { \
8136 0 : gf_t temp = GF_ADD( in67, GF_MUL( in71, 183 ) ); \
8137 0 : in71 = GF_ADD( in67, GF_MUL( in71, 182 ) ); \
8138 0 : in67 = temp; \
8139 0 : } \
8140 0 : scratch_3 = in67; \
8141 0 : { \
8142 0 : gf_t temp = GF_ADD( GF_MUL( in64, 65 ), GF_MUL( in65, 64 ) ); \
8143 0 : in65 = GF_ADD( in64, in65 ); \
8144 0 : in64 = temp; \
8145 0 : } \
8146 0 : in67 = GF_ADD( in65, in67 ); \
8147 0 : { \
8148 0 : gf_t temp = GF_ADD( in66, GF_MUL( in67, 66 ) ); \
8149 0 : in67 = GF_ADD( in66, in67 ); \
8150 0 : in66 = temp; \
8151 0 : } \
8152 0 : { \
8153 0 : gf_t temp = GF_ADD( GF_MUL( in64, 178 ), GF_MUL( in66, 179 ) ); \
8154 0 : in66 = GF_ADD( in64, in66 ); \
8155 0 : in64 = temp; \
8156 0 : } \
8157 0 : in65 = GF_ADD( GF_MUL( scratch_3, 179 ), in65 ); \
8158 0 : in68 = GF_ADD( in64, in68 ); \
8159 0 : in69 = GF_ADD( in65, in69 ); \
8160 0 : in70 = GF_ADD( in66, in70 ); \
8161 0 : FD_REEDSOL_GENERATE_FFT( 4, 68, in68, in69, in70, in71 ); \
8162 0 : in64 = GF_ADD( GF_MUL( scratch_4, 183 ), in64 ); \
8163 0 : in65 = GF_ADD( GF_MUL( scratch_5, 183 ), in65 ); \
8164 0 : in66 = GF_ADD( GF_MUL( scratch_6, 183 ), in66 ); \
8165 0 : in72 = GF_ADD( in64, in72 ); \
8166 0 : in73 = GF_ADD( in65, in73 ); \
8167 0 : in74 = GF_ADD( in66, in74 ); \
8168 0 : FD_REEDSOL_GENERATE_FFT( 8, 72, in72, in73, in74, in75, in76, in77, in78, in79 ); \
8169 0 : in64 = GF_ADD( GF_MUL( scratch_8, 33 ), in64 ); \
8170 0 : in65 = GF_ADD( GF_MUL( scratch_9, 33 ), in65 ); \
8171 0 : in66 = GF_ADD( GF_MUL( scratch_10, 33 ), in66 ); \
8172 0 : in80 = GF_ADD( in64, in80 ); \
8173 0 : in81 = GF_ADD( in65, in81 ); \
8174 0 : in82 = GF_ADD( in66, in82 ); \
8175 0 : FD_REEDSOL_GENERATE_FFT( 16, 80, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95 ); \
8176 0 : in64 = GF_ADD( GF_MUL( scratch_16, 189 ), in64 ); \
8177 0 : in65 = GF_ADD( GF_MUL( scratch_17, 189 ), in65 ); \
8178 0 : in66 = GF_ADD( GF_MUL( scratch_18, 189 ), in66 ); \
8179 0 : in96 = GF_ADD( in64, in96 ); \
8180 0 : in97 = GF_ADD( in65, in97 ); \
8181 0 : in98 = GF_ADD( in66, in98 ); \
8182 0 : FD_REEDSOL_GENERATE_FFT( 32, 96, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, in122, in123, in124, in125, in126, in127 ); \
8183 0 : in64 = GF_ADD( GF_MUL( scratch_32, 218 ), in64 ); \
8184 0 : in65 = GF_ADD( GF_MUL( scratch_33, 218 ), in65 ); \
8185 0 : in66 = GF_ADD( GF_MUL( scratch_34, 218 ), in66 ); \
8186 0 : in64 = GF_ADD( in00, in64 ); \
8187 0 : in65 = GF_ADD( in01, in65 ); \
8188 0 : in66 = GF_ADD( in02, in66 ); \
8189 0 : } while( 0 )
8190 :
8191 : void fd_reedsol_ppt_128_68( gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t*, gf_t* );
8192 : #define FD_REEDSOL_PPT_IMPL_128_68( in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65 , \
8193 : in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, in122, in123, in124, in125, in126, in127) \
8194 : do { \
8195 : gf_t scratch_10, scratch_11, scratch_16, scratch_17, scratch_18, scratch_19, scratch_32, scratch_33, scratch_34, scratch_35, scratch_4, scratch_5, scratch_6, scratch_7, scratch_8, scratch_9; \
8196 : FD_REEDSOL_GENERATE_IFFT( 64, 0, in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63 ); \
8197 : in68 = GF_ADD( in04, in68 ); \
8198 : in69 = GF_ADD( in05, in69 ); \
8199 : in70 = GF_ADD( in06, in70 ); \
8200 : in71 = GF_ADD( in07, in71 ); \
8201 : in72 = GF_ADD( in08, in72 ); \
8202 : in73 = GF_ADD( in09, in73 ); \
8203 : in74 = GF_ADD( in10, in74 ); \
8204 : in75 = GF_ADD( in11, in75 ); \
8205 : in76 = GF_ADD( in12, in76 ); \
8206 : in77 = GF_ADD( in13, in77 ); \
8207 : in78 = GF_ADD( in14, in78 ); \
8208 : in79 = GF_ADD( in15, in79 ); \
8209 : in80 = GF_ADD( in16, in80 ); \
8210 : in81 = GF_ADD( in17, in81 ); \
8211 : in82 = GF_ADD( in18, in82 ); \
8212 : in83 = GF_ADD( in19, in83 ); \
8213 : in84 = GF_ADD( in20, in84 ); \
8214 : in85 = GF_ADD( in21, in85 ); \
8215 : in86 = GF_ADD( in22, in86 ); \
8216 : in87 = GF_ADD( in23, in87 ); \
8217 : in88 = GF_ADD( in24, in88 ); \
8218 : in89 = GF_ADD( in25, in89 ); \
8219 : in90 = GF_ADD( in26, in90 ); \
8220 : in91 = GF_ADD( in27, in91 ); \
8221 : in92 = GF_ADD( in28, in92 ); \
8222 : in93 = GF_ADD( in29, in93 ); \
8223 : in94 = GF_ADD( in30, in94 ); \
8224 : in95 = GF_ADD( in31, in95 ); \
8225 : in96 = GF_ADD( in32, in96 ); \
8226 : in97 = GF_ADD( in33, in97 ); \
8227 : in98 = GF_ADD( in34, in98 ); \
8228 : in99 = GF_ADD( in35, in99 ); \
8229 : in100 = GF_ADD( in36, in100 ); \
8230 : in101 = GF_ADD( in37, in101 ); \
8231 : in102 = GF_ADD( in38, in102 ); \
8232 : in103 = GF_ADD( in39, in103 ); \
8233 : in104 = GF_ADD( in40, in104 ); \
8234 : in105 = GF_ADD( in41, in105 ); \
8235 : in106 = GF_ADD( in42, in106 ); \
8236 : in107 = GF_ADD( in43, in107 ); \
8237 : in108 = GF_ADD( in44, in108 ); \
8238 : in109 = GF_ADD( in45, in109 ); \
8239 : in110 = GF_ADD( in46, in110 ); \
8240 : in111 = GF_ADD( in47, in111 ); \
8241 : in112 = GF_ADD( in48, in112 ); \
8242 : in113 = GF_ADD( in49, in113 ); \
8243 : in114 = GF_ADD( in50, in114 ); \
8244 : in115 = GF_ADD( in51, in115 ); \
8245 : in116 = GF_ADD( in52, in116 ); \
8246 : in117 = GF_ADD( in53, in117 ); \
8247 : in118 = GF_ADD( in54, in118 ); \
8248 : in119 = GF_ADD( in55, in119 ); \
8249 : in120 = GF_ADD( in56, in120 ); \
8250 : in121 = GF_ADD( in57, in121 ); \
8251 : in122 = GF_ADD( in58, in122 ); \
8252 : in123 = GF_ADD( in59, in123 ); \
8253 : in124 = GF_ADD( in60, in124 ); \
8254 : in125 = GF_ADD( in61, in125 ); \
8255 : in126 = GF_ADD( in62, in126 ); \
8256 : in127 = GF_ADD( in63, in127 ); \
8257 : scratch_32 = in96; \
8258 : scratch_33 = in97; \
8259 : scratch_34 = in98; \
8260 : scratch_35 = in99; \
8261 : { \
8262 : gf_t temp = GF_ADD( in68, GF_MUL( in100, 218 ) ); \
8263 : in100 = GF_ADD( in68, GF_MUL( in100, 219 ) ); \
8264 : in68 = temp; \
8265 : } \
8266 : { \
8267 : gf_t temp = GF_ADD( in69, GF_MUL( in101, 218 ) ); \
8268 : in101 = GF_ADD( in69, GF_MUL( in101, 219 ) ); \
8269 : in69 = temp; \
8270 : } \
8271 : { \
8272 : gf_t temp = GF_ADD( in70, GF_MUL( in102, 218 ) ); \
8273 : in102 = GF_ADD( in70, GF_MUL( in102, 219 ) ); \
8274 : in70 = temp; \
8275 : } \
8276 : { \
8277 : gf_t temp = GF_ADD( in71, GF_MUL( in103, 218 ) ); \
8278 : in103 = GF_ADD( in71, GF_MUL( in103, 219 ) ); \
8279 : in71 = temp; \
8280 : } \
8281 : { \
8282 : gf_t temp = GF_ADD( in72, GF_MUL( in104, 218 ) ); \
8283 : in104 = GF_ADD( in72, GF_MUL( in104, 219 ) ); \
8284 : in72 = temp; \
8285 : } \
8286 : { \
8287 : gf_t temp = GF_ADD( in73, GF_MUL( in105, 218 ) ); \
8288 : in105 = GF_ADD( in73, GF_MUL( in105, 219 ) ); \
8289 : in73 = temp; \
8290 : } \
8291 : { \
8292 : gf_t temp = GF_ADD( in74, GF_MUL( in106, 218 ) ); \
8293 : in106 = GF_ADD( in74, GF_MUL( in106, 219 ) ); \
8294 : in74 = temp; \
8295 : } \
8296 : { \
8297 : gf_t temp = GF_ADD( in75, GF_MUL( in107, 218 ) ); \
8298 : in107 = GF_ADD( in75, GF_MUL( in107, 219 ) ); \
8299 : in75 = temp; \
8300 : } \
8301 : { \
8302 : gf_t temp = GF_ADD( in76, GF_MUL( in108, 218 ) ); \
8303 : in108 = GF_ADD( in76, GF_MUL( in108, 219 ) ); \
8304 : in76 = temp; \
8305 : } \
8306 : { \
8307 : gf_t temp = GF_ADD( in77, GF_MUL( in109, 218 ) ); \
8308 : in109 = GF_ADD( in77, GF_MUL( in109, 219 ) ); \
8309 : in77 = temp; \
8310 : } \
8311 : { \
8312 : gf_t temp = GF_ADD( in78, GF_MUL( in110, 218 ) ); \
8313 : in110 = GF_ADD( in78, GF_MUL( in110, 219 ) ); \
8314 : in78 = temp; \
8315 : } \
8316 : { \
8317 : gf_t temp = GF_ADD( in79, GF_MUL( in111, 218 ) ); \
8318 : in111 = GF_ADD( in79, GF_MUL( in111, 219 ) ); \
8319 : in79 = temp; \
8320 : } \
8321 : { \
8322 : gf_t temp = GF_ADD( in80, GF_MUL( in112, 218 ) ); \
8323 : in112 = GF_ADD( in80, GF_MUL( in112, 219 ) ); \
8324 : in80 = temp; \
8325 : } \
8326 : { \
8327 : gf_t temp = GF_ADD( in81, GF_MUL( in113, 218 ) ); \
8328 : in113 = GF_ADD( in81, GF_MUL( in113, 219 ) ); \
8329 : in81 = temp; \
8330 : } \
8331 : { \
8332 : gf_t temp = GF_ADD( in82, GF_MUL( in114, 218 ) ); \
8333 : in114 = GF_ADD( in82, GF_MUL( in114, 219 ) ); \
8334 : in82 = temp; \
8335 : } \
8336 : { \
8337 : gf_t temp = GF_ADD( in83, GF_MUL( in115, 218 ) ); \
8338 : in115 = GF_ADD( in83, GF_MUL( in115, 219 ) ); \
8339 : in83 = temp; \
8340 : } \
8341 : { \
8342 : gf_t temp = GF_ADD( in84, GF_MUL( in116, 218 ) ); \
8343 : in116 = GF_ADD( in84, GF_MUL( in116, 219 ) ); \
8344 : in84 = temp; \
8345 : } \
8346 : { \
8347 : gf_t temp = GF_ADD( in85, GF_MUL( in117, 218 ) ); \
8348 : in117 = GF_ADD( in85, GF_MUL( in117, 219 ) ); \
8349 : in85 = temp; \
8350 : } \
8351 : { \
8352 : gf_t temp = GF_ADD( in86, GF_MUL( in118, 218 ) ); \
8353 : in118 = GF_ADD( in86, GF_MUL( in118, 219 ) ); \
8354 : in86 = temp; \
8355 : } \
8356 : { \
8357 : gf_t temp = GF_ADD( in87, GF_MUL( in119, 218 ) ); \
8358 : in119 = GF_ADD( in87, GF_MUL( in119, 219 ) ); \
8359 : in87 = temp; \
8360 : } \
8361 : { \
8362 : gf_t temp = GF_ADD( in88, GF_MUL( in120, 218 ) ); \
8363 : in120 = GF_ADD( in88, GF_MUL( in120, 219 ) ); \
8364 : in88 = temp; \
8365 : } \
8366 : { \
8367 : gf_t temp = GF_ADD( in89, GF_MUL( in121, 218 ) ); \
8368 : in121 = GF_ADD( in89, GF_MUL( in121, 219 ) ); \
8369 : in89 = temp; \
8370 : } \
8371 : { \
8372 : gf_t temp = GF_ADD( in90, GF_MUL( in122, 218 ) ); \
8373 : in122 = GF_ADD( in90, GF_MUL( in122, 219 ) ); \
8374 : in90 = temp; \
8375 : } \
8376 : { \
8377 : gf_t temp = GF_ADD( in91, GF_MUL( in123, 218 ) ); \
8378 : in123 = GF_ADD( in91, GF_MUL( in123, 219 ) ); \
8379 : in91 = temp; \
8380 : } \
8381 : { \
8382 : gf_t temp = GF_ADD( in92, GF_MUL( in124, 218 ) ); \
8383 : in124 = GF_ADD( in92, GF_MUL( in124, 219 ) ); \
8384 : in92 = temp; \
8385 : } \
8386 : { \
8387 : gf_t temp = GF_ADD( in93, GF_MUL( in125, 218 ) ); \
8388 : in125 = GF_ADD( in93, GF_MUL( in125, 219 ) ); \
8389 : in93 = temp; \
8390 : } \
8391 : { \
8392 : gf_t temp = GF_ADD( in94, GF_MUL( in126, 218 ) ); \
8393 : in126 = GF_ADD( in94, GF_MUL( in126, 219 ) ); \
8394 : in94 = temp; \
8395 : } \
8396 : { \
8397 : gf_t temp = GF_ADD( in95, GF_MUL( in127, 218 ) ); \
8398 : in127 = GF_ADD( in95, GF_MUL( in127, 219 ) ); \
8399 : in95 = temp; \
8400 : } \
8401 : scratch_16 = in80; \
8402 : scratch_17 = in81; \
8403 : scratch_18 = in82; \
8404 : scratch_19 = in83; \
8405 : { \
8406 : gf_t temp = GF_ADD( in68, GF_MUL( in84, 189 ) ); \
8407 : in84 = GF_ADD( in68, GF_MUL( in84, 188 ) ); \
8408 : in68 = temp; \
8409 : } \
8410 : { \
8411 : gf_t temp = GF_ADD( in69, GF_MUL( in85, 189 ) ); \
8412 : in85 = GF_ADD( in69, GF_MUL( in85, 188 ) ); \
8413 : in69 = temp; \
8414 : } \
8415 : { \
8416 : gf_t temp = GF_ADD( in70, GF_MUL( in86, 189 ) ); \
8417 : in86 = GF_ADD( in70, GF_MUL( in86, 188 ) ); \
8418 : in70 = temp; \
8419 : } \
8420 : { \
8421 : gf_t temp = GF_ADD( in71, GF_MUL( in87, 189 ) ); \
8422 : in87 = GF_ADD( in71, GF_MUL( in87, 188 ) ); \
8423 : in71 = temp; \
8424 : } \
8425 : { \
8426 : gf_t temp = GF_ADD( in72, GF_MUL( in88, 189 ) ); \
8427 : in88 = GF_ADD( in72, GF_MUL( in88, 188 ) ); \
8428 : in72 = temp; \
8429 : } \
8430 : { \
8431 : gf_t temp = GF_ADD( in73, GF_MUL( in89, 189 ) ); \
8432 : in89 = GF_ADD( in73, GF_MUL( in89, 188 ) ); \
8433 : in73 = temp; \
8434 : } \
8435 : { \
8436 : gf_t temp = GF_ADD( in74, GF_MUL( in90, 189 ) ); \
8437 : in90 = GF_ADD( in74, GF_MUL( in90, 188 ) ); \
8438 : in74 = temp; \
8439 : } \
8440 : { \
8441 : gf_t temp = GF_ADD( in75, GF_MUL( in91, 189 ) ); \
8442 : in91 = GF_ADD( in75, GF_MUL( in91, 188 ) ); \
8443 : in75 = temp; \
8444 : } \
8445 : { \
8446 : gf_t temp = GF_ADD( in76, GF_MUL( in92, 189 ) ); \
8447 : in92 = GF_ADD( in76, GF_MUL( in92, 188 ) ); \
8448 : in76 = temp; \
8449 : } \
8450 : { \
8451 : gf_t temp = GF_ADD( in77, GF_MUL( in93, 189 ) ); \
8452 : in93 = GF_ADD( in77, GF_MUL( in93, 188 ) ); \
8453 : in77 = temp; \
8454 : } \
8455 : { \
8456 : gf_t temp = GF_ADD( in78, GF_MUL( in94, 189 ) ); \
8457 : in94 = GF_ADD( in78, GF_MUL( in94, 188 ) ); \
8458 : in78 = temp; \
8459 : } \
8460 : { \
8461 : gf_t temp = GF_ADD( in79, GF_MUL( in95, 189 ) ); \
8462 : in95 = GF_ADD( in79, GF_MUL( in95, 188 ) ); \
8463 : in79 = temp; \
8464 : } \
8465 : scratch_8 = in72; \
8466 : scratch_9 = in73; \
8467 : scratch_10 = in74; \
8468 : scratch_11 = in75; \
8469 : { \
8470 : gf_t temp = GF_ADD( in68, GF_MUL( in76, 33 ) ); \
8471 : in76 = GF_ADD( in68, GF_MUL( in76, 32 ) ); \
8472 : in68 = temp; \
8473 : } \
8474 : { \
8475 : gf_t temp = GF_ADD( in69, GF_MUL( in77, 33 ) ); \
8476 : in77 = GF_ADD( in69, GF_MUL( in77, 32 ) ); \
8477 : in69 = temp; \
8478 : } \
8479 : { \
8480 : gf_t temp = GF_ADD( in70, GF_MUL( in78, 33 ) ); \
8481 : in78 = GF_ADD( in70, GF_MUL( in78, 32 ) ); \
8482 : in70 = temp; \
8483 : } \
8484 : { \
8485 : gf_t temp = GF_ADD( in71, GF_MUL( in79, 33 ) ); \
8486 : in79 = GF_ADD( in71, GF_MUL( in79, 32 ) ); \
8487 : in71 = temp; \
8488 : } \
8489 : scratch_4 = in68; \
8490 : scratch_5 = in69; \
8491 : scratch_6 = in70; \
8492 : scratch_7 = in71; \
8493 : FD_REEDSOL_GENERATE_IFFT( 4, 64, in64, in65, in66, in67 ); \
8494 : in68 = GF_ADD( in64, in68 ); \
8495 : in69 = GF_ADD( in65, in69 ); \
8496 : in70 = GF_ADD( in66, in70 ); \
8497 : in71 = GF_ADD( in67, in71 ); \
8498 : FD_REEDSOL_GENERATE_FFT( 4, 68, in68, in69, in70, in71 ); \
8499 : in64 = GF_ADD( GF_MUL( scratch_4, 183 ), in64 ); \
8500 : in65 = GF_ADD( GF_MUL( scratch_5, 183 ), in65 ); \
8501 : in66 = GF_ADD( GF_MUL( scratch_6, 183 ), in66 ); \
8502 : in67 = GF_ADD( GF_MUL( scratch_7, 183 ), in67 ); \
8503 : in72 = GF_ADD( in64, in72 ); \
8504 : in73 = GF_ADD( in65, in73 ); \
8505 : in74 = GF_ADD( in66, in74 ); \
8506 : in75 = GF_ADD( in67, in75 ); \
8507 : FD_REEDSOL_GENERATE_FFT( 8, 72, in72, in73, in74, in75, in76, in77, in78, in79 ); \
8508 : in64 = GF_ADD( GF_MUL( scratch_8, 33 ), in64 ); \
8509 : in65 = GF_ADD( GF_MUL( scratch_9, 33 ), in65 ); \
8510 : in66 = GF_ADD( GF_MUL( scratch_10, 33 ), in66 ); \
8511 : in67 = GF_ADD( GF_MUL( scratch_11, 33 ), in67 ); \
8512 : in80 = GF_ADD( in64, in80 ); \
8513 : in81 = GF_ADD( in65, in81 ); \
8514 : in82 = GF_ADD( in66, in82 ); \
8515 : in83 = GF_ADD( in67, in83 ); \
8516 : FD_REEDSOL_GENERATE_FFT( 16, 80, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95 ); \
8517 : in64 = GF_ADD( GF_MUL( scratch_16, 189 ), in64 ); \
8518 : in65 = GF_ADD( GF_MUL( scratch_17, 189 ), in65 ); \
8519 : in66 = GF_ADD( GF_MUL( scratch_18, 189 ), in66 ); \
8520 : in67 = GF_ADD( GF_MUL( scratch_19, 189 ), in67 ); \
8521 : in96 = GF_ADD( in64, in96 ); \
8522 : in97 = GF_ADD( in65, in97 ); \
8523 : in98 = GF_ADD( in66, in98 ); \
8524 : in99 = GF_ADD( in67, in99 ); \
8525 : FD_REEDSOL_GENERATE_FFT( 32, 96, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, in122, in123, in124, in125, in126, in127 ); \
8526 : in64 = GF_ADD( GF_MUL( scratch_32, 218 ), in64 ); \
8527 : in65 = GF_ADD( GF_MUL( scratch_33, 218 ), in65 ); \
8528 : in66 = GF_ADD( GF_MUL( scratch_34, 218 ), in66 ); \
8529 : in67 = GF_ADD( GF_MUL( scratch_35, 218 ), in67 ); \
8530 : in64 = GF_ADD( in00, in64 ); \
8531 : in65 = GF_ADD( in01, in65 ); \
8532 : in66 = GF_ADD( in02, in66 ); \
8533 : in67 = GF_ADD( in03, in67 ); \
8534 : } while( 0 )
8535 :
8536 : #endif /* HEADER_fd_src_ballet_reedsol_fd_reedsol_ppt_h */
|