Botan  2.19.1
Crypto and TLS for C++11
mp_monty_n.cpp
Go to the documentation of this file.
1 /*
2 * This file was automatically generated by ./src/scripts/monty.py on 2018-06-11
3 * All manual changes will be lost. Edit the script instead.
4 *
5 * Botan is released under the Simplified BSD License (see license.txt)
6 */
7 
8 #include <botan/internal/mp_monty.h>
9 #include <botan/internal/mp_core.h>
10 #include <botan/internal/mp_asmi.h>
11 #include <botan/internal/ct_utils.h>
12 
13 namespace Botan {
14 
15 void bigint_monty_redc_4(word z[], const word p[4], word p_dash, word ws[])
16  {
17  word w2 = 0, w1 = 0, w0 = 0;
18  w0 = z[0];
19  ws[0] = w0 * p_dash;
20  word3_muladd(&w2, &w1, &w0, ws[0], p[0]);
21  w0 = w1; w1 = w2; w2 = 0;
22  word3_muladd(&w2, &w1, &w0, ws[0], p[1]);
23  word3_add(&w2, &w1, &w0, z[1]);
24  ws[1] = w0 * p_dash;
25  word3_muladd(&w2, &w1, &w0, ws[1], p[0]);
26  w0 = w1; w1 = w2; w2 = 0;
27  word3_muladd(&w2, &w1, &w0, ws[0], p[2]);
28  word3_muladd(&w2, &w1, &w0, ws[1], p[1]);
29  word3_add(&w2, &w1, &w0, z[2]);
30  ws[2] = w0 * p_dash;
31  word3_muladd(&w2, &w1, &w0, ws[2], p[0]);
32  w0 = w1; w1 = w2; w2 = 0;
33  word3_muladd(&w2, &w1, &w0, ws[0], p[3]);
34  word3_muladd(&w2, &w1, &w0, ws[1], p[2]);
35  word3_muladd(&w2, &w1, &w0, ws[2], p[1]);
36  word3_add(&w2, &w1, &w0, z[3]);
37  ws[3] = w0 * p_dash;
38  word3_muladd(&w2, &w1, &w0, ws[3], p[0]);
39  w0 = w1; w1 = w2; w2 = 0;
40  word3_muladd(&w2, &w1, &w0, ws[1], p[3]);
41  word3_muladd(&w2, &w1, &w0, ws[2], p[2]);
42  word3_muladd(&w2, &w1, &w0, ws[3], p[1]);
43  word3_add(&w2, &w1, &w0, z[4]);
44  ws[0] = w0;
45  w0 = w1; w1 = w2; w2 = 0;
46  word3_muladd(&w2, &w1, &w0, ws[2], p[3]);
47  word3_muladd(&w2, &w1, &w0, ws[3], p[2]);
48  word3_add(&w2, &w1, &w0, z[5]);
49  ws[1] = w0;
50  w0 = w1; w1 = w2; w2 = 0;
51  word3_muladd(&w2, &w1, &w0, ws[3], p[3]);
52  word3_add(&w2, &w1, &w0, z[6]);
53  ws[2] = w0;
54  w0 = w1; w1 = w2; w2 = 0;
55  word3_add(&w2, &w1, &w0, z[7]);
56  ws[3] = w0;
57  w0 = w1; w1 = w2; w2 = 0;
58  word3_add(&w2, &w1, &w0, z[9]);
59  ws[4] = w0;
60  ws[5] = w1;
61  word borrow = 0;
62  ws[5] = word_sub(ws[0], p[0], &borrow);
63  ws[6] = word_sub(ws[1], p[1], &borrow);
64  ws[7] = word_sub(ws[2], p[2], &borrow);
65  ws[8] = word_sub(ws[3], p[3], &borrow);
66  ws[9] = word_sub(ws[4], 0, &borrow);
67  CT::conditional_copy_mem(borrow, z, ws, ws + 5, 5);
68  clear_mem(z + 4, 2*(4+1) - 4);
69  }
70 
71 void bigint_monty_redc_6(word z[], const word p[6], word p_dash, word ws[])
72  {
73  word w2 = 0, w1 = 0, w0 = 0;
74  w0 = z[0];
75  ws[0] = w0 * p_dash;
76  word3_muladd(&w2, &w1, &w0, ws[0], p[0]);
77  w0 = w1; w1 = w2; w2 = 0;
78  word3_muladd(&w2, &w1, &w0, ws[0], p[1]);
79  word3_add(&w2, &w1, &w0, z[1]);
80  ws[1] = w0 * p_dash;
81  word3_muladd(&w2, &w1, &w0, ws[1], p[0]);
82  w0 = w1; w1 = w2; w2 = 0;
83  word3_muladd(&w2, &w1, &w0, ws[0], p[2]);
84  word3_muladd(&w2, &w1, &w0, ws[1], p[1]);
85  word3_add(&w2, &w1, &w0, z[2]);
86  ws[2] = w0 * p_dash;
87  word3_muladd(&w2, &w1, &w0, ws[2], p[0]);
88  w0 = w1; w1 = w2; w2 = 0;
89  word3_muladd(&w2, &w1, &w0, ws[0], p[3]);
90  word3_muladd(&w2, &w1, &w0, ws[1], p[2]);
91  word3_muladd(&w2, &w1, &w0, ws[2], p[1]);
92  word3_add(&w2, &w1, &w0, z[3]);
93  ws[3] = w0 * p_dash;
94  word3_muladd(&w2, &w1, &w0, ws[3], p[0]);
95  w0 = w1; w1 = w2; w2 = 0;
96  word3_muladd(&w2, &w1, &w0, ws[0], p[4]);
97  word3_muladd(&w2, &w1, &w0, ws[1], p[3]);
98  word3_muladd(&w2, &w1, &w0, ws[2], p[2]);
99  word3_muladd(&w2, &w1, &w0, ws[3], p[1]);
100  word3_add(&w2, &w1, &w0, z[4]);
101  ws[4] = w0 * p_dash;
102  word3_muladd(&w2, &w1, &w0, ws[4], p[0]);
103  w0 = w1; w1 = w2; w2 = 0;
104  word3_muladd(&w2, &w1, &w0, ws[0], p[5]);
105  word3_muladd(&w2, &w1, &w0, ws[1], p[4]);
106  word3_muladd(&w2, &w1, &w0, ws[2], p[3]);
107  word3_muladd(&w2, &w1, &w0, ws[3], p[2]);
108  word3_muladd(&w2, &w1, &w0, ws[4], p[1]);
109  word3_add(&w2, &w1, &w0, z[5]);
110  ws[5] = w0 * p_dash;
111  word3_muladd(&w2, &w1, &w0, ws[5], p[0]);
112  w0 = w1; w1 = w2; w2 = 0;
113  word3_muladd(&w2, &w1, &w0, ws[1], p[5]);
114  word3_muladd(&w2, &w1, &w0, ws[2], p[4]);
115  word3_muladd(&w2, &w1, &w0, ws[3], p[3]);
116  word3_muladd(&w2, &w1, &w0, ws[4], p[2]);
117  word3_muladd(&w2, &w1, &w0, ws[5], p[1]);
118  word3_add(&w2, &w1, &w0, z[6]);
119  ws[0] = w0;
120  w0 = w1; w1 = w2; w2 = 0;
121  word3_muladd(&w2, &w1, &w0, ws[2], p[5]);
122  word3_muladd(&w2, &w1, &w0, ws[3], p[4]);
123  word3_muladd(&w2, &w1, &w0, ws[4], p[3]);
124  word3_muladd(&w2, &w1, &w0, ws[5], p[2]);
125  word3_add(&w2, &w1, &w0, z[7]);
126  ws[1] = w0;
127  w0 = w1; w1 = w2; w2 = 0;
128  word3_muladd(&w2, &w1, &w0, ws[3], p[5]);
129  word3_muladd(&w2, &w1, &w0, ws[4], p[4]);
130  word3_muladd(&w2, &w1, &w0, ws[5], p[3]);
131  word3_add(&w2, &w1, &w0, z[8]);
132  ws[2] = w0;
133  w0 = w1; w1 = w2; w2 = 0;
134  word3_muladd(&w2, &w1, &w0, ws[4], p[5]);
135  word3_muladd(&w2, &w1, &w0, ws[5], p[4]);
136  word3_add(&w2, &w1, &w0, z[9]);
137  ws[3] = w0;
138  w0 = w1; w1 = w2; w2 = 0;
139  word3_muladd(&w2, &w1, &w0, ws[5], p[5]);
140  word3_add(&w2, &w1, &w0, z[10]);
141  ws[4] = w0;
142  w0 = w1; w1 = w2; w2 = 0;
143  word3_add(&w2, &w1, &w0, z[11]);
144  ws[5] = w0;
145  w0 = w1; w1 = w2; w2 = 0;
146  word3_add(&w2, &w1, &w0, z[13]);
147  ws[6] = w0;
148  ws[7] = w1;
149  word borrow = 0;
150  ws[7] = word_sub(ws[0], p[0], &borrow);
151  ws[8] = word_sub(ws[1], p[1], &borrow);
152  ws[9] = word_sub(ws[2], p[2], &borrow);
153  ws[10] = word_sub(ws[3], p[3], &borrow);
154  ws[11] = word_sub(ws[4], p[4], &borrow);
155  ws[12] = word_sub(ws[5], p[5], &borrow);
156  ws[13] = word_sub(ws[6], 0, &borrow);
157  CT::conditional_copy_mem(borrow, z, ws, ws + 7, 7);
158  clear_mem(z + 6, 2*(6+1) - 6);
159  }
160 
161 void bigint_monty_redc_8(word z[], const word p[8], word p_dash, word ws[])
162  {
163  word w2 = 0, w1 = 0, w0 = 0;
164  w0 = z[0];
165  ws[0] = w0 * p_dash;
166  word3_muladd(&w2, &w1, &w0, ws[0], p[0]);
167  w0 = w1; w1 = w2; w2 = 0;
168  word3_muladd(&w2, &w1, &w0, ws[0], p[1]);
169  word3_add(&w2, &w1, &w0, z[1]);
170  ws[1] = w0 * p_dash;
171  word3_muladd(&w2, &w1, &w0, ws[1], p[0]);
172  w0 = w1; w1 = w2; w2 = 0;
173  word3_muladd(&w2, &w1, &w0, ws[0], p[2]);
174  word3_muladd(&w2, &w1, &w0, ws[1], p[1]);
175  word3_add(&w2, &w1, &w0, z[2]);
176  ws[2] = w0 * p_dash;
177  word3_muladd(&w2, &w1, &w0, ws[2], p[0]);
178  w0 = w1; w1 = w2; w2 = 0;
179  word3_muladd(&w2, &w1, &w0, ws[0], p[3]);
180  word3_muladd(&w2, &w1, &w0, ws[1], p[2]);
181  word3_muladd(&w2, &w1, &w0, ws[2], p[1]);
182  word3_add(&w2, &w1, &w0, z[3]);
183  ws[3] = w0 * p_dash;
184  word3_muladd(&w2, &w1, &w0, ws[3], p[0]);
185  w0 = w1; w1 = w2; w2 = 0;
186  word3_muladd(&w2, &w1, &w0, ws[0], p[4]);
187  word3_muladd(&w2, &w1, &w0, ws[1], p[3]);
188  word3_muladd(&w2, &w1, &w0, ws[2], p[2]);
189  word3_muladd(&w2, &w1, &w0, ws[3], p[1]);
190  word3_add(&w2, &w1, &w0, z[4]);
191  ws[4] = w0 * p_dash;
192  word3_muladd(&w2, &w1, &w0, ws[4], p[0]);
193  w0 = w1; w1 = w2; w2 = 0;
194  word3_muladd(&w2, &w1, &w0, ws[0], p[5]);
195  word3_muladd(&w2, &w1, &w0, ws[1], p[4]);
196  word3_muladd(&w2, &w1, &w0, ws[2], p[3]);
197  word3_muladd(&w2, &w1, &w0, ws[3], p[2]);
198  word3_muladd(&w2, &w1, &w0, ws[4], p[1]);
199  word3_add(&w2, &w1, &w0, z[5]);
200  ws[5] = w0 * p_dash;
201  word3_muladd(&w2, &w1, &w0, ws[5], p[0]);
202  w0 = w1; w1 = w2; w2 = 0;
203  word3_muladd(&w2, &w1, &w0, ws[0], p[6]);
204  word3_muladd(&w2, &w1, &w0, ws[1], p[5]);
205  word3_muladd(&w2, &w1, &w0, ws[2], p[4]);
206  word3_muladd(&w2, &w1, &w0, ws[3], p[3]);
207  word3_muladd(&w2, &w1, &w0, ws[4], p[2]);
208  word3_muladd(&w2, &w1, &w0, ws[5], p[1]);
209  word3_add(&w2, &w1, &w0, z[6]);
210  ws[6] = w0 * p_dash;
211  word3_muladd(&w2, &w1, &w0, ws[6], p[0]);
212  w0 = w1; w1 = w2; w2 = 0;
213  word3_muladd(&w2, &w1, &w0, ws[0], p[7]);
214  word3_muladd(&w2, &w1, &w0, ws[1], p[6]);
215  word3_muladd(&w2, &w1, &w0, ws[2], p[5]);
216  word3_muladd(&w2, &w1, &w0, ws[3], p[4]);
217  word3_muladd(&w2, &w1, &w0, ws[4], p[3]);
218  word3_muladd(&w2, &w1, &w0, ws[5], p[2]);
219  word3_muladd(&w2, &w1, &w0, ws[6], p[1]);
220  word3_add(&w2, &w1, &w0, z[7]);
221  ws[7] = w0 * p_dash;
222  word3_muladd(&w2, &w1, &w0, ws[7], p[0]);
223  w0 = w1; w1 = w2; w2 = 0;
224  word3_muladd(&w2, &w1, &w0, ws[1], p[7]);
225  word3_muladd(&w2, &w1, &w0, ws[2], p[6]);
226  word3_muladd(&w2, &w1, &w0, ws[3], p[5]);
227  word3_muladd(&w2, &w1, &w0, ws[4], p[4]);
228  word3_muladd(&w2, &w1, &w0, ws[5], p[3]);
229  word3_muladd(&w2, &w1, &w0, ws[6], p[2]);
230  word3_muladd(&w2, &w1, &w0, ws[7], p[1]);
231  word3_add(&w2, &w1, &w0, z[8]);
232  ws[0] = w0;
233  w0 = w1; w1 = w2; w2 = 0;
234  word3_muladd(&w2, &w1, &w0, ws[2], p[7]);
235  word3_muladd(&w2, &w1, &w0, ws[3], p[6]);
236  word3_muladd(&w2, &w1, &w0, ws[4], p[5]);
237  word3_muladd(&w2, &w1, &w0, ws[5], p[4]);
238  word3_muladd(&w2, &w1, &w0, ws[6], p[3]);
239  word3_muladd(&w2, &w1, &w0, ws[7], p[2]);
240  word3_add(&w2, &w1, &w0, z[9]);
241  ws[1] = w0;
242  w0 = w1; w1 = w2; w2 = 0;
243  word3_muladd(&w2, &w1, &w0, ws[3], p[7]);
244  word3_muladd(&w2, &w1, &w0, ws[4], p[6]);
245  word3_muladd(&w2, &w1, &w0, ws[5], p[5]);
246  word3_muladd(&w2, &w1, &w0, ws[6], p[4]);
247  word3_muladd(&w2, &w1, &w0, ws[7], p[3]);
248  word3_add(&w2, &w1, &w0, z[10]);
249  ws[2] = w0;
250  w0 = w1; w1 = w2; w2 = 0;
251  word3_muladd(&w2, &w1, &w0, ws[4], p[7]);
252  word3_muladd(&w2, &w1, &w0, ws[5], p[6]);
253  word3_muladd(&w2, &w1, &w0, ws[6], p[5]);
254  word3_muladd(&w2, &w1, &w0, ws[7], p[4]);
255  word3_add(&w2, &w1, &w0, z[11]);
256  ws[3] = w0;
257  w0 = w1; w1 = w2; w2 = 0;
258  word3_muladd(&w2, &w1, &w0, ws[5], p[7]);
259  word3_muladd(&w2, &w1, &w0, ws[6], p[6]);
260  word3_muladd(&w2, &w1, &w0, ws[7], p[5]);
261  word3_add(&w2, &w1, &w0, z[12]);
262  ws[4] = w0;
263  w0 = w1; w1 = w2; w2 = 0;
264  word3_muladd(&w2, &w1, &w0, ws[6], p[7]);
265  word3_muladd(&w2, &w1, &w0, ws[7], p[6]);
266  word3_add(&w2, &w1, &w0, z[13]);
267  ws[5] = w0;
268  w0 = w1; w1 = w2; w2 = 0;
269  word3_muladd(&w2, &w1, &w0, ws[7], p[7]);
270  word3_add(&w2, &w1, &w0, z[14]);
271  ws[6] = w0;
272  w0 = w1; w1 = w2; w2 = 0;
273  word3_add(&w2, &w1, &w0, z[15]);
274  ws[7] = w0;
275  w0 = w1; w1 = w2; w2 = 0;
276  word3_add(&w2, &w1, &w0, z[17]);
277  ws[8] = w0;
278  ws[9] = w1;
279  word borrow = 0;
280  ws[9] = word_sub(ws[0], p[0], &borrow);
281  ws[10] = word_sub(ws[1], p[1], &borrow);
282  ws[11] = word_sub(ws[2], p[2], &borrow);
283  ws[12] = word_sub(ws[3], p[3], &borrow);
284  ws[13] = word_sub(ws[4], p[4], &borrow);
285  ws[14] = word_sub(ws[5], p[5], &borrow);
286  ws[15] = word_sub(ws[6], p[6], &borrow);
287  ws[16] = word_sub(ws[7], p[7], &borrow);
288  ws[17] = word_sub(ws[8], 0, &borrow);
289  CT::conditional_copy_mem(borrow, z, ws, ws + 9, 9);
290  clear_mem(z + 8, 2*(8+1) - 8);
291  }
292 
293 void bigint_monty_redc_16(word z[], const word p[16], word p_dash, word ws[])
294  {
295  word w2 = 0, w1 = 0, w0 = 0;
296  w0 = z[0];
297  ws[0] = w0 * p_dash;
298  word3_muladd(&w2, &w1, &w0, ws[0], p[0]);
299  w0 = w1; w1 = w2; w2 = 0;
300  word3_muladd(&w2, &w1, &w0, ws[0], p[1]);
301  word3_add(&w2, &w1, &w0, z[1]);
302  ws[1] = w0 * p_dash;
303  word3_muladd(&w2, &w1, &w0, ws[1], p[0]);
304  w0 = w1; w1 = w2; w2 = 0;
305  word3_muladd(&w2, &w1, &w0, ws[0], p[2]);
306  word3_muladd(&w2, &w1, &w0, ws[1], p[1]);
307  word3_add(&w2, &w1, &w0, z[2]);
308  ws[2] = w0 * p_dash;
309  word3_muladd(&w2, &w1, &w0, ws[2], p[0]);
310  w0 = w1; w1 = w2; w2 = 0;
311  word3_muladd(&w2, &w1, &w0, ws[0], p[3]);
312  word3_muladd(&w2, &w1, &w0, ws[1], p[2]);
313  word3_muladd(&w2, &w1, &w0, ws[2], p[1]);
314  word3_add(&w2, &w1, &w0, z[3]);
315  ws[3] = w0 * p_dash;
316  word3_muladd(&w2, &w1, &w0, ws[3], p[0]);
317  w0 = w1; w1 = w2; w2 = 0;
318  word3_muladd(&w2, &w1, &w0, ws[0], p[4]);
319  word3_muladd(&w2, &w1, &w0, ws[1], p[3]);
320  word3_muladd(&w2, &w1, &w0, ws[2], p[2]);
321  word3_muladd(&w2, &w1, &w0, ws[3], p[1]);
322  word3_add(&w2, &w1, &w0, z[4]);
323  ws[4] = w0 * p_dash;
324  word3_muladd(&w2, &w1, &w0, ws[4], p[0]);
325  w0 = w1; w1 = w2; w2 = 0;
326  word3_muladd(&w2, &w1, &w0, ws[0], p[5]);
327  word3_muladd(&w2, &w1, &w0, ws[1], p[4]);
328  word3_muladd(&w2, &w1, &w0, ws[2], p[3]);
329  word3_muladd(&w2, &w1, &w0, ws[3], p[2]);
330  word3_muladd(&w2, &w1, &w0, ws[4], p[1]);
331  word3_add(&w2, &w1, &w0, z[5]);
332  ws[5] = w0 * p_dash;
333  word3_muladd(&w2, &w1, &w0, ws[5], p[0]);
334  w0 = w1; w1 = w2; w2 = 0;
335  word3_muladd(&w2, &w1, &w0, ws[0], p[6]);
336  word3_muladd(&w2, &w1, &w0, ws[1], p[5]);
337  word3_muladd(&w2, &w1, &w0, ws[2], p[4]);
338  word3_muladd(&w2, &w1, &w0, ws[3], p[3]);
339  word3_muladd(&w2, &w1, &w0, ws[4], p[2]);
340  word3_muladd(&w2, &w1, &w0, ws[5], p[1]);
341  word3_add(&w2, &w1, &w0, z[6]);
342  ws[6] = w0 * p_dash;
343  word3_muladd(&w2, &w1, &w0, ws[6], p[0]);
344  w0 = w1; w1 = w2; w2 = 0;
345  word3_muladd(&w2, &w1, &w0, ws[0], p[7]);
346  word3_muladd(&w2, &w1, &w0, ws[1], p[6]);
347  word3_muladd(&w2, &w1, &w0, ws[2], p[5]);
348  word3_muladd(&w2, &w1, &w0, ws[3], p[4]);
349  word3_muladd(&w2, &w1, &w0, ws[4], p[3]);
350  word3_muladd(&w2, &w1, &w0, ws[5], p[2]);
351  word3_muladd(&w2, &w1, &w0, ws[6], p[1]);
352  word3_add(&w2, &w1, &w0, z[7]);
353  ws[7] = w0 * p_dash;
354  word3_muladd(&w2, &w1, &w0, ws[7], p[0]);
355  w0 = w1; w1 = w2; w2 = 0;
356  word3_muladd(&w2, &w1, &w0, ws[0], p[8]);
357  word3_muladd(&w2, &w1, &w0, ws[1], p[7]);
358  word3_muladd(&w2, &w1, &w0, ws[2], p[6]);
359  word3_muladd(&w2, &w1, &w0, ws[3], p[5]);
360  word3_muladd(&w2, &w1, &w0, ws[4], p[4]);
361  word3_muladd(&w2, &w1, &w0, ws[5], p[3]);
362  word3_muladd(&w2, &w1, &w0, ws[6], p[2]);
363  word3_muladd(&w2, &w1, &w0, ws[7], p[1]);
364  word3_add(&w2, &w1, &w0, z[8]);
365  ws[8] = w0 * p_dash;
366  word3_muladd(&w2, &w1, &w0, ws[8], p[0]);
367  w0 = w1; w1 = w2; w2 = 0;
368  word3_muladd(&w2, &w1, &w0, ws[0], p[9]);
369  word3_muladd(&w2, &w1, &w0, ws[1], p[8]);
370  word3_muladd(&w2, &w1, &w0, ws[2], p[7]);
371  word3_muladd(&w2, &w1, &w0, ws[3], p[6]);
372  word3_muladd(&w2, &w1, &w0, ws[4], p[5]);
373  word3_muladd(&w2, &w1, &w0, ws[5], p[4]);
374  word3_muladd(&w2, &w1, &w0, ws[6], p[3]);
375  word3_muladd(&w2, &w1, &w0, ws[7], p[2]);
376  word3_muladd(&w2, &w1, &w0, ws[8], p[1]);
377  word3_add(&w2, &w1, &w0, z[9]);
378  ws[9] = w0 * p_dash;
379  word3_muladd(&w2, &w1, &w0, ws[9], p[0]);
380  w0 = w1; w1 = w2; w2 = 0;
381  word3_muladd(&w2, &w1, &w0, ws[0], p[10]);
382  word3_muladd(&w2, &w1, &w0, ws[1], p[9]);
383  word3_muladd(&w2, &w1, &w0, ws[2], p[8]);
384  word3_muladd(&w2, &w1, &w0, ws[3], p[7]);
385  word3_muladd(&w2, &w1, &w0, ws[4], p[6]);
386  word3_muladd(&w2, &w1, &w0, ws[5], p[5]);
387  word3_muladd(&w2, &w1, &w0, ws[6], p[4]);
388  word3_muladd(&w2, &w1, &w0, ws[7], p[3]);
389  word3_muladd(&w2, &w1, &w0, ws[8], p[2]);
390  word3_muladd(&w2, &w1, &w0, ws[9], p[1]);
391  word3_add(&w2, &w1, &w0, z[10]);
392  ws[10] = w0 * p_dash;
393  word3_muladd(&w2, &w1, &w0, ws[10], p[0]);
394  w0 = w1; w1 = w2; w2 = 0;
395  word3_muladd(&w2, &w1, &w0, ws[0], p[11]);
396  word3_muladd(&w2, &w1, &w0, ws[1], p[10]);
397  word3_muladd(&w2, &w1, &w0, ws[2], p[9]);
398  word3_muladd(&w2, &w1, &w0, ws[3], p[8]);
399  word3_muladd(&w2, &w1, &w0, ws[4], p[7]);
400  word3_muladd(&w2, &w1, &w0, ws[5], p[6]);
401  word3_muladd(&w2, &w1, &w0, ws[6], p[5]);
402  word3_muladd(&w2, &w1, &w0, ws[7], p[4]);
403  word3_muladd(&w2, &w1, &w0, ws[8], p[3]);
404  word3_muladd(&w2, &w1, &w0, ws[9], p[2]);
405  word3_muladd(&w2, &w1, &w0, ws[10], p[1]);
406  word3_add(&w2, &w1, &w0, z[11]);
407  ws[11] = w0 * p_dash;
408  word3_muladd(&w2, &w1, &w0, ws[11], p[0]);
409  w0 = w1; w1 = w2; w2 = 0;
410  word3_muladd(&w2, &w1, &w0, ws[0], p[12]);
411  word3_muladd(&w2, &w1, &w0, ws[1], p[11]);
412  word3_muladd(&w2, &w1, &w0, ws[2], p[10]);
413  word3_muladd(&w2, &w1, &w0, ws[3], p[9]);
414  word3_muladd(&w2, &w1, &w0, ws[4], p[8]);
415  word3_muladd(&w2, &w1, &w0, ws[5], p[7]);
416  word3_muladd(&w2, &w1, &w0, ws[6], p[6]);
417  word3_muladd(&w2, &w1, &w0, ws[7], p[5]);
418  word3_muladd(&w2, &w1, &w0, ws[8], p[4]);
419  word3_muladd(&w2, &w1, &w0, ws[9], p[3]);
420  word3_muladd(&w2, &w1, &w0, ws[10], p[2]);
421  word3_muladd(&w2, &w1, &w0, ws[11], p[1]);
422  word3_add(&w2, &w1, &w0, z[12]);
423  ws[12] = w0 * p_dash;
424  word3_muladd(&w2, &w1, &w0, ws[12], p[0]);
425  w0 = w1; w1 = w2; w2 = 0;
426  word3_muladd(&w2, &w1, &w0, ws[0], p[13]);
427  word3_muladd(&w2, &w1, &w0, ws[1], p[12]);
428  word3_muladd(&w2, &w1, &w0, ws[2], p[11]);
429  word3_muladd(&w2, &w1, &w0, ws[3], p[10]);
430  word3_muladd(&w2, &w1, &w0, ws[4], p[9]);
431  word3_muladd(&w2, &w1, &w0, ws[5], p[8]);
432  word3_muladd(&w2, &w1, &w0, ws[6], p[7]);
433  word3_muladd(&w2, &w1, &w0, ws[7], p[6]);
434  word3_muladd(&w2, &w1, &w0, ws[8], p[5]);
435  word3_muladd(&w2, &w1, &w0, ws[9], p[4]);
436  word3_muladd(&w2, &w1, &w0, ws[10], p[3]);
437  word3_muladd(&w2, &w1, &w0, ws[11], p[2]);
438  word3_muladd(&w2, &w1, &w0, ws[12], p[1]);
439  word3_add(&w2, &w1, &w0, z[13]);
440  ws[13] = w0 * p_dash;
441  word3_muladd(&w2, &w1, &w0, ws[13], p[0]);
442  w0 = w1; w1 = w2; w2 = 0;
443  word3_muladd(&w2, &w1, &w0, ws[0], p[14]);
444  word3_muladd(&w2, &w1, &w0, ws[1], p[13]);
445  word3_muladd(&w2, &w1, &w0, ws[2], p[12]);
446  word3_muladd(&w2, &w1, &w0, ws[3], p[11]);
447  word3_muladd(&w2, &w1, &w0, ws[4], p[10]);
448  word3_muladd(&w2, &w1, &w0, ws[5], p[9]);
449  word3_muladd(&w2, &w1, &w0, ws[6], p[8]);
450  word3_muladd(&w2, &w1, &w0, ws[7], p[7]);
451  word3_muladd(&w2, &w1, &w0, ws[8], p[6]);
452  word3_muladd(&w2, &w1, &w0, ws[9], p[5]);
453  word3_muladd(&w2, &w1, &w0, ws[10], p[4]);
454  word3_muladd(&w2, &w1, &w0, ws[11], p[3]);
455  word3_muladd(&w2, &w1, &w0, ws[12], p[2]);
456  word3_muladd(&w2, &w1, &w0, ws[13], p[1]);
457  word3_add(&w2, &w1, &w0, z[14]);
458  ws[14] = w0 * p_dash;
459  word3_muladd(&w2, &w1, &w0, ws[14], p[0]);
460  w0 = w1; w1 = w2; w2 = 0;
461  word3_muladd(&w2, &w1, &w0, ws[0], p[15]);
462  word3_muladd(&w2, &w1, &w0, ws[1], p[14]);
463  word3_muladd(&w2, &w1, &w0, ws[2], p[13]);
464  word3_muladd(&w2, &w1, &w0, ws[3], p[12]);
465  word3_muladd(&w2, &w1, &w0, ws[4], p[11]);
466  word3_muladd(&w2, &w1, &w0, ws[5], p[10]);
467  word3_muladd(&w2, &w1, &w0, ws[6], p[9]);
468  word3_muladd(&w2, &w1, &w0, ws[7], p[8]);
469  word3_muladd(&w2, &w1, &w0, ws[8], p[7]);
470  word3_muladd(&w2, &w1, &w0, ws[9], p[6]);
471  word3_muladd(&w2, &w1, &w0, ws[10], p[5]);
472  word3_muladd(&w2, &w1, &w0, ws[11], p[4]);
473  word3_muladd(&w2, &w1, &w0, ws[12], p[3]);
474  word3_muladd(&w2, &w1, &w0, ws[13], p[2]);
475  word3_muladd(&w2, &w1, &w0, ws[14], p[1]);
476  word3_add(&w2, &w1, &w0, z[15]);
477  ws[15] = w0 * p_dash;
478  word3_muladd(&w2, &w1, &w0, ws[15], p[0]);
479  w0 = w1; w1 = w2; w2 = 0;
480  word3_muladd(&w2, &w1, &w0, ws[1], p[15]);
481  word3_muladd(&w2, &w1, &w0, ws[2], p[14]);
482  word3_muladd(&w2, &w1, &w0, ws[3], p[13]);
483  word3_muladd(&w2, &w1, &w0, ws[4], p[12]);
484  word3_muladd(&w2, &w1, &w0, ws[5], p[11]);
485  word3_muladd(&w2, &w1, &w0, ws[6], p[10]);
486  word3_muladd(&w2, &w1, &w0, ws[7], p[9]);
487  word3_muladd(&w2, &w1, &w0, ws[8], p[8]);
488  word3_muladd(&w2, &w1, &w0, ws[9], p[7]);
489  word3_muladd(&w2, &w1, &w0, ws[10], p[6]);
490  word3_muladd(&w2, &w1, &w0, ws[11], p[5]);
491  word3_muladd(&w2, &w1, &w0, ws[12], p[4]);
492  word3_muladd(&w2, &w1, &w0, ws[13], p[3]);
493  word3_muladd(&w2, &w1, &w0, ws[14], p[2]);
494  word3_muladd(&w2, &w1, &w0, ws[15], p[1]);
495  word3_add(&w2, &w1, &w0, z[16]);
496  ws[0] = w0;
497  w0 = w1; w1 = w2; w2 = 0;
498  word3_muladd(&w2, &w1, &w0, ws[2], p[15]);
499  word3_muladd(&w2, &w1, &w0, ws[3], p[14]);
500  word3_muladd(&w2, &w1, &w0, ws[4], p[13]);
501  word3_muladd(&w2, &w1, &w0, ws[5], p[12]);
502  word3_muladd(&w2, &w1, &w0, ws[6], p[11]);
503  word3_muladd(&w2, &w1, &w0, ws[7], p[10]);
504  word3_muladd(&w2, &w1, &w0, ws[8], p[9]);
505  word3_muladd(&w2, &w1, &w0, ws[9], p[8]);
506  word3_muladd(&w2, &w1, &w0, ws[10], p[7]);
507  word3_muladd(&w2, &w1, &w0, ws[11], p[6]);
508  word3_muladd(&w2, &w1, &w0, ws[12], p[5]);
509  word3_muladd(&w2, &w1, &w0, ws[13], p[4]);
510  word3_muladd(&w2, &w1, &w0, ws[14], p[3]);
511  word3_muladd(&w2, &w1, &w0, ws[15], p[2]);
512  word3_add(&w2, &w1, &w0, z[17]);
513  ws[1] = w0;
514  w0 = w1; w1 = w2; w2 = 0;
515  word3_muladd(&w2, &w1, &w0, ws[3], p[15]);
516  word3_muladd(&w2, &w1, &w0, ws[4], p[14]);
517  word3_muladd(&w2, &w1, &w0, ws[5], p[13]);
518  word3_muladd(&w2, &w1, &w0, ws[6], p[12]);
519  word3_muladd(&w2, &w1, &w0, ws[7], p[11]);
520  word3_muladd(&w2, &w1, &w0, ws[8], p[10]);
521  word3_muladd(&w2, &w1, &w0, ws[9], p[9]);
522  word3_muladd(&w2, &w1, &w0, ws[10], p[8]);
523  word3_muladd(&w2, &w1, &w0, ws[11], p[7]);
524  word3_muladd(&w2, &w1, &w0, ws[12], p[6]);
525  word3_muladd(&w2, &w1, &w0, ws[13], p[5]);
526  word3_muladd(&w2, &w1, &w0, ws[14], p[4]);
527  word3_muladd(&w2, &w1, &w0, ws[15], p[3]);
528  word3_add(&w2, &w1, &w0, z[18]);
529  ws[2] = w0;
530  w0 = w1; w1 = w2; w2 = 0;
531  word3_muladd(&w2, &w1, &w0, ws[4], p[15]);
532  word3_muladd(&w2, &w1, &w0, ws[5], p[14]);
533  word3_muladd(&w2, &w1, &w0, ws[6], p[13]);
534  word3_muladd(&w2, &w1, &w0, ws[7], p[12]);
535  word3_muladd(&w2, &w1, &w0, ws[8], p[11]);
536  word3_muladd(&w2, &w1, &w0, ws[9], p[10]);
537  word3_muladd(&w2, &w1, &w0, ws[10], p[9]);
538  word3_muladd(&w2, &w1, &w0, ws[11], p[8]);
539  word3_muladd(&w2, &w1, &w0, ws[12], p[7]);
540  word3_muladd(&w2, &w1, &w0, ws[13], p[6]);
541  word3_muladd(&w2, &w1, &w0, ws[14], p[5]);
542  word3_muladd(&w2, &w1, &w0, ws[15], p[4]);
543  word3_add(&w2, &w1, &w0, z[19]);
544  ws[3] = w0;
545  w0 = w1; w1 = w2; w2 = 0;
546  word3_muladd(&w2, &w1, &w0, ws[5], p[15]);
547  word3_muladd(&w2, &w1, &w0, ws[6], p[14]);
548  word3_muladd(&w2, &w1, &w0, ws[7], p[13]);
549  word3_muladd(&w2, &w1, &w0, ws[8], p[12]);
550  word3_muladd(&w2, &w1, &w0, ws[9], p[11]);
551  word3_muladd(&w2, &w1, &w0, ws[10], p[10]);
552  word3_muladd(&w2, &w1, &w0, ws[11], p[9]);
553  word3_muladd(&w2, &w1, &w0, ws[12], p[8]);
554  word3_muladd(&w2, &w1, &w0, ws[13], p[7]);
555  word3_muladd(&w2, &w1, &w0, ws[14], p[6]);
556  word3_muladd(&w2, &w1, &w0, ws[15], p[5]);
557  word3_add(&w2, &w1, &w0, z[20]);
558  ws[4] = w0;
559  w0 = w1; w1 = w2; w2 = 0;
560  word3_muladd(&w2, &w1, &w0, ws[6], p[15]);
561  word3_muladd(&w2, &w1, &w0, ws[7], p[14]);
562  word3_muladd(&w2, &w1, &w0, ws[8], p[13]);
563  word3_muladd(&w2, &w1, &w0, ws[9], p[12]);
564  word3_muladd(&w2, &w1, &w0, ws[10], p[11]);
565  word3_muladd(&w2, &w1, &w0, ws[11], p[10]);
566  word3_muladd(&w2, &w1, &w0, ws[12], p[9]);
567  word3_muladd(&w2, &w1, &w0, ws[13], p[8]);
568  word3_muladd(&w2, &w1, &w0, ws[14], p[7]);
569  word3_muladd(&w2, &w1, &w0, ws[15], p[6]);
570  word3_add(&w2, &w1, &w0, z[21]);
571  ws[5] = w0;
572  w0 = w1; w1 = w2; w2 = 0;
573  word3_muladd(&w2, &w1, &w0, ws[7], p[15]);
574  word3_muladd(&w2, &w1, &w0, ws[8], p[14]);
575  word3_muladd(&w2, &w1, &w0, ws[9], p[13]);
576  word3_muladd(&w2, &w1, &w0, ws[10], p[12]);
577  word3_muladd(&w2, &w1, &w0, ws[11], p[11]);
578  word3_muladd(&w2, &w1, &w0, ws[12], p[10]);
579  word3_muladd(&w2, &w1, &w0, ws[13], p[9]);
580  word3_muladd(&w2, &w1, &w0, ws[14], p[8]);
581  word3_muladd(&w2, &w1, &w0, ws[15], p[7]);
582  word3_add(&w2, &w1, &w0, z[22]);
583  ws[6] = w0;
584  w0 = w1; w1 = w2; w2 = 0;
585  word3_muladd(&w2, &w1, &w0, ws[8], p[15]);
586  word3_muladd(&w2, &w1, &w0, ws[9], p[14]);
587  word3_muladd(&w2, &w1, &w0, ws[10], p[13]);
588  word3_muladd(&w2, &w1, &w0, ws[11], p[12]);
589  word3_muladd(&w2, &w1, &w0, ws[12], p[11]);
590  word3_muladd(&w2, &w1, &w0, ws[13], p[10]);
591  word3_muladd(&w2, &w1, &w0, ws[14], p[9]);
592  word3_muladd(&w2, &w1, &w0, ws[15], p[8]);
593  word3_add(&w2, &w1, &w0, z[23]);
594  ws[7] = w0;
595  w0 = w1; w1 = w2; w2 = 0;
596  word3_muladd(&w2, &w1, &w0, ws[9], p[15]);
597  word3_muladd(&w2, &w1, &w0, ws[10], p[14]);
598  word3_muladd(&w2, &w1, &w0, ws[11], p[13]);
599  word3_muladd(&w2, &w1, &w0, ws[12], p[12]);
600  word3_muladd(&w2, &w1, &w0, ws[13], p[11]);
601  word3_muladd(&w2, &w1, &w0, ws[14], p[10]);
602  word3_muladd(&w2, &w1, &w0, ws[15], p[9]);
603  word3_add(&w2, &w1, &w0, z[24]);
604  ws[8] = w0;
605  w0 = w1; w1 = w2; w2 = 0;
606  word3_muladd(&w2, &w1, &w0, ws[10], p[15]);
607  word3_muladd(&w2, &w1, &w0, ws[11], p[14]);
608  word3_muladd(&w2, &w1, &w0, ws[12], p[13]);
609  word3_muladd(&w2, &w1, &w0, ws[13], p[12]);
610  word3_muladd(&w2, &w1, &w0, ws[14], p[11]);
611  word3_muladd(&w2, &w1, &w0, ws[15], p[10]);
612  word3_add(&w2, &w1, &w0, z[25]);
613  ws[9] = w0;
614  w0 = w1; w1 = w2; w2 = 0;
615  word3_muladd(&w2, &w1, &w0, ws[11], p[15]);
616  word3_muladd(&w2, &w1, &w0, ws[12], p[14]);
617  word3_muladd(&w2, &w1, &w0, ws[13], p[13]);
618  word3_muladd(&w2, &w1, &w0, ws[14], p[12]);
619  word3_muladd(&w2, &w1, &w0, ws[15], p[11]);
620  word3_add(&w2, &w1, &w0, z[26]);
621  ws[10] = w0;
622  w0 = w1; w1 = w2; w2 = 0;
623  word3_muladd(&w2, &w1, &w0, ws[12], p[15]);
624  word3_muladd(&w2, &w1, &w0, ws[13], p[14]);
625  word3_muladd(&w2, &w1, &w0, ws[14], p[13]);
626  word3_muladd(&w2, &w1, &w0, ws[15], p[12]);
627  word3_add(&w2, &w1, &w0, z[27]);
628  ws[11] = w0;
629  w0 = w1; w1 = w2; w2 = 0;
630  word3_muladd(&w2, &w1, &w0, ws[13], p[15]);
631  word3_muladd(&w2, &w1, &w0, ws[14], p[14]);
632  word3_muladd(&w2, &w1, &w0, ws[15], p[13]);
633  word3_add(&w2, &w1, &w0, z[28]);
634  ws[12] = w0;
635  w0 = w1; w1 = w2; w2 = 0;
636  word3_muladd(&w2, &w1, &w0, ws[14], p[15]);
637  word3_muladd(&w2, &w1, &w0, ws[15], p[14]);
638  word3_add(&w2, &w1, &w0, z[29]);
639  ws[13] = w0;
640  w0 = w1; w1 = w2; w2 = 0;
641  word3_muladd(&w2, &w1, &w0, ws[15], p[15]);
642  word3_add(&w2, &w1, &w0, z[30]);
643  ws[14] = w0;
644  w0 = w1; w1 = w2; w2 = 0;
645  word3_add(&w2, &w1, &w0, z[31]);
646  ws[15] = w0;
647  w0 = w1; w1 = w2; w2 = 0;
648  word3_add(&w2, &w1, &w0, z[33]);
649  ws[16] = w0;
650  ws[17] = w1;
651  word borrow = bigint_sub3(ws + 16 + 1, ws, 16 + 1, p, 16);
652  CT::conditional_copy_mem(borrow, z, ws, ws + 17, 17);
653  clear_mem(z + 16, 2*(16+1) - 16);
654  }
655 
656 void bigint_monty_redc_24(word z[], const word p[24], word p_dash, word ws[])
657  {
658  word w2 = 0, w1 = 0, w0 = 0;
659  w0 = z[0];
660  ws[0] = w0 * p_dash;
661  word3_muladd(&w2, &w1, &w0, ws[0], p[0]);
662  w0 = w1; w1 = w2; w2 = 0;
663  word3_muladd(&w2, &w1, &w0, ws[0], p[1]);
664  word3_add(&w2, &w1, &w0, z[1]);
665  ws[1] = w0 * p_dash;
666  word3_muladd(&w2, &w1, &w0, ws[1], p[0]);
667  w0 = w1; w1 = w2; w2 = 0;
668  word3_muladd(&w2, &w1, &w0, ws[0], p[2]);
669  word3_muladd(&w2, &w1, &w0, ws[1], p[1]);
670  word3_add(&w2, &w1, &w0, z[2]);
671  ws[2] = w0 * p_dash;
672  word3_muladd(&w2, &w1, &w0, ws[2], p[0]);
673  w0 = w1; w1 = w2; w2 = 0;
674  word3_muladd(&w2, &w1, &w0, ws[0], p[3]);
675  word3_muladd(&w2, &w1, &w0, ws[1], p[2]);
676  word3_muladd(&w2, &w1, &w0, ws[2], p[1]);
677  word3_add(&w2, &w1, &w0, z[3]);
678  ws[3] = w0 * p_dash;
679  word3_muladd(&w2, &w1, &w0, ws[3], p[0]);
680  w0 = w1; w1 = w2; w2 = 0;
681  word3_muladd(&w2, &w1, &w0, ws[0], p[4]);
682  word3_muladd(&w2, &w1, &w0, ws[1], p[3]);
683  word3_muladd(&w2, &w1, &w0, ws[2], p[2]);
684  word3_muladd(&w2, &w1, &w0, ws[3], p[1]);
685  word3_add(&w2, &w1, &w0, z[4]);
686  ws[4] = w0 * p_dash;
687  word3_muladd(&w2, &w1, &w0, ws[4], p[0]);
688  w0 = w1; w1 = w2; w2 = 0;
689  word3_muladd(&w2, &w1, &w0, ws[0], p[5]);
690  word3_muladd(&w2, &w1, &w0, ws[1], p[4]);
691  word3_muladd(&w2, &w1, &w0, ws[2], p[3]);
692  word3_muladd(&w2, &w1, &w0, ws[3], p[2]);
693  word3_muladd(&w2, &w1, &w0, ws[4], p[1]);
694  word3_add(&w2, &w1, &w0, z[5]);
695  ws[5] = w0 * p_dash;
696  word3_muladd(&w2, &w1, &w0, ws[5], p[0]);
697  w0 = w1; w1 = w2; w2 = 0;
698  word3_muladd(&w2, &w1, &w0, ws[0], p[6]);
699  word3_muladd(&w2, &w1, &w0, ws[1], p[5]);
700  word3_muladd(&w2, &w1, &w0, ws[2], p[4]);
701  word3_muladd(&w2, &w1, &w0, ws[3], p[3]);
702  word3_muladd(&w2, &w1, &w0, ws[4], p[2]);
703  word3_muladd(&w2, &w1, &w0, ws[5], p[1]);
704  word3_add(&w2, &w1, &w0, z[6]);
705  ws[6] = w0 * p_dash;
706  word3_muladd(&w2, &w1, &w0, ws[6], p[0]);
707  w0 = w1; w1 = w2; w2 = 0;
708  word3_muladd(&w2, &w1, &w0, ws[0], p[7]);
709  word3_muladd(&w2, &w1, &w0, ws[1], p[6]);
710  word3_muladd(&w2, &w1, &w0, ws[2], p[5]);
711  word3_muladd(&w2, &w1, &w0, ws[3], p[4]);
712  word3_muladd(&w2, &w1, &w0, ws[4], p[3]);
713  word3_muladd(&w2, &w1, &w0, ws[5], p[2]);
714  word3_muladd(&w2, &w1, &w0, ws[6], p[1]);
715  word3_add(&w2, &w1, &w0, z[7]);
716  ws[7] = w0 * p_dash;
717  word3_muladd(&w2, &w1, &w0, ws[7], p[0]);
718  w0 = w1; w1 = w2; w2 = 0;
719  word3_muladd(&w2, &w1, &w0, ws[0], p[8]);
720  word3_muladd(&w2, &w1, &w0, ws[1], p[7]);
721  word3_muladd(&w2, &w1, &w0, ws[2], p[6]);
722  word3_muladd(&w2, &w1, &w0, ws[3], p[5]);
723  word3_muladd(&w2, &w1, &w0, ws[4], p[4]);
724  word3_muladd(&w2, &w1, &w0, ws[5], p[3]);
725  word3_muladd(&w2, &w1, &w0, ws[6], p[2]);
726  word3_muladd(&w2, &w1, &w0, ws[7], p[1]);
727  word3_add(&w2, &w1, &w0, z[8]);
728  ws[8] = w0 * p_dash;
729  word3_muladd(&w2, &w1, &w0, ws[8], p[0]);
730  w0 = w1; w1 = w2; w2 = 0;
731  word3_muladd(&w2, &w1, &w0, ws[0], p[9]);
732  word3_muladd(&w2, &w1, &w0, ws[1], p[8]);
733  word3_muladd(&w2, &w1, &w0, ws[2], p[7]);
734  word3_muladd(&w2, &w1, &w0, ws[3], p[6]);
735  word3_muladd(&w2, &w1, &w0, ws[4], p[5]);
736  word3_muladd(&w2, &w1, &w0, ws[5], p[4]);
737  word3_muladd(&w2, &w1, &w0, ws[6], p[3]);
738  word3_muladd(&w2, &w1, &w0, ws[7], p[2]);
739  word3_muladd(&w2, &w1, &w0, ws[8], p[1]);
740  word3_add(&w2, &w1, &w0, z[9]);
741  ws[9] = w0 * p_dash;
742  word3_muladd(&w2, &w1, &w0, ws[9], p[0]);
743  w0 = w1; w1 = w2; w2 = 0;
744  word3_muladd(&w2, &w1, &w0, ws[0], p[10]);
745  word3_muladd(&w2, &w1, &w0, ws[1], p[9]);
746  word3_muladd(&w2, &w1, &w0, ws[2], p[8]);
747  word3_muladd(&w2, &w1, &w0, ws[3], p[7]);
748  word3_muladd(&w2, &w1, &w0, ws[4], p[6]);
749  word3_muladd(&w2, &w1, &w0, ws[5], p[5]);
750  word3_muladd(&w2, &w1, &w0, ws[6], p[4]);
751  word3_muladd(&w2, &w1, &w0, ws[7], p[3]);
752  word3_muladd(&w2, &w1, &w0, ws[8], p[2]);
753  word3_muladd(&w2, &w1, &w0, ws[9], p[1]);
754  word3_add(&w2, &w1, &w0, z[10]);
755  ws[10] = w0 * p_dash;
756  word3_muladd(&w2, &w1, &w0, ws[10], p[0]);
757  w0 = w1; w1 = w2; w2 = 0;
758  word3_muladd(&w2, &w1, &w0, ws[0], p[11]);
759  word3_muladd(&w2, &w1, &w0, ws[1], p[10]);
760  word3_muladd(&w2, &w1, &w0, ws[2], p[9]);
761  word3_muladd(&w2, &w1, &w0, ws[3], p[8]);
762  word3_muladd(&w2, &w1, &w0, ws[4], p[7]);
763  word3_muladd(&w2, &w1, &w0, ws[5], p[6]);
764  word3_muladd(&w2, &w1, &w0, ws[6], p[5]);
765  word3_muladd(&w2, &w1, &w0, ws[7], p[4]);
766  word3_muladd(&w2, &w1, &w0, ws[8], p[3]);
767  word3_muladd(&w2, &w1, &w0, ws[9], p[2]);
768  word3_muladd(&w2, &w1, &w0, ws[10], p[1]);
769  word3_add(&w2, &w1, &w0, z[11]);
770  ws[11] = w0 * p_dash;
771  word3_muladd(&w2, &w1, &w0, ws[11], p[0]);
772  w0 = w1; w1 = w2; w2 = 0;
773  word3_muladd(&w2, &w1, &w0, ws[0], p[12]);
774  word3_muladd(&w2, &w1, &w0, ws[1], p[11]);
775  word3_muladd(&w2, &w1, &w0, ws[2], p[10]);
776  word3_muladd(&w2, &w1, &w0, ws[3], p[9]);
777  word3_muladd(&w2, &w1, &w0, ws[4], p[8]);
778  word3_muladd(&w2, &w1, &w0, ws[5], p[7]);
779  word3_muladd(&w2, &w1, &w0, ws[6], p[6]);
780  word3_muladd(&w2, &w1, &w0, ws[7], p[5]);
781  word3_muladd(&w2, &w1, &w0, ws[8], p[4]);
782  word3_muladd(&w2, &w1, &w0, ws[9], p[3]);
783  word3_muladd(&w2, &w1, &w0, ws[10], p[2]);
784  word3_muladd(&w2, &w1, &w0, ws[11], p[1]);
785  word3_add(&w2, &w1, &w0, z[12]);
786  ws[12] = w0 * p_dash;
787  word3_muladd(&w2, &w1, &w0, ws[12], p[0]);
788  w0 = w1; w1 = w2; w2 = 0;
789  word3_muladd(&w2, &w1, &w0, ws[0], p[13]);
790  word3_muladd(&w2, &w1, &w0, ws[1], p[12]);
791  word3_muladd(&w2, &w1, &w0, ws[2], p[11]);
792  word3_muladd(&w2, &w1, &w0, ws[3], p[10]);
793  word3_muladd(&w2, &w1, &w0, ws[4], p[9]);
794  word3_muladd(&w2, &w1, &w0, ws[5], p[8]);
795  word3_muladd(&w2, &w1, &w0, ws[6], p[7]);
796  word3_muladd(&w2, &w1, &w0, ws[7], p[6]);
797  word3_muladd(&w2, &w1, &w0, ws[8], p[5]);
798  word3_muladd(&w2, &w1, &w0, ws[9], p[4]);
799  word3_muladd(&w2, &w1, &w0, ws[10], p[3]);
800  word3_muladd(&w2, &w1, &w0, ws[11], p[2]);
801  word3_muladd(&w2, &w1, &w0, ws[12], p[1]);
802  word3_add(&w2, &w1, &w0, z[13]);
803  ws[13] = w0 * p_dash;
804  word3_muladd(&w2, &w1, &w0, ws[13], p[0]);
805  w0 = w1; w1 = w2; w2 = 0;
806  word3_muladd(&w2, &w1, &w0, ws[0], p[14]);
807  word3_muladd(&w2, &w1, &w0, ws[1], p[13]);
808  word3_muladd(&w2, &w1, &w0, ws[2], p[12]);
809  word3_muladd(&w2, &w1, &w0, ws[3], p[11]);
810  word3_muladd(&w2, &w1, &w0, ws[4], p[10]);
811  word3_muladd(&w2, &w1, &w0, ws[5], p[9]);
812  word3_muladd(&w2, &w1, &w0, ws[6], p[8]);
813  word3_muladd(&w2, &w1, &w0, ws[7], p[7]);
814  word3_muladd(&w2, &w1, &w0, ws[8], p[6]);
815  word3_muladd(&w2, &w1, &w0, ws[9], p[5]);
816  word3_muladd(&w2, &w1, &w0, ws[10], p[4]);
817  word3_muladd(&w2, &w1, &w0, ws[11], p[3]);
818  word3_muladd(&w2, &w1, &w0, ws[12], p[2]);
819  word3_muladd(&w2, &w1, &w0, ws[13], p[1]);
820  word3_add(&w2, &w1, &w0, z[14]);
821  ws[14] = w0 * p_dash;
822  word3_muladd(&w2, &w1, &w0, ws[14], p[0]);
823  w0 = w1; w1 = w2; w2 = 0;
824  word3_muladd(&w2, &w1, &w0, ws[0], p[15]);
825  word3_muladd(&w2, &w1, &w0, ws[1], p[14]);
826  word3_muladd(&w2, &w1, &w0, ws[2], p[13]);
827  word3_muladd(&w2, &w1, &w0, ws[3], p[12]);
828  word3_muladd(&w2, &w1, &w0, ws[4], p[11]);
829  word3_muladd(&w2, &w1, &w0, ws[5], p[10]);
830  word3_muladd(&w2, &w1, &w0, ws[6], p[9]);
831  word3_muladd(&w2, &w1, &w0, ws[7], p[8]);
832  word3_muladd(&w2, &w1, &w0, ws[8], p[7]);
833  word3_muladd(&w2, &w1, &w0, ws[9], p[6]);
834  word3_muladd(&w2, &w1, &w0, ws[10], p[5]);
835  word3_muladd(&w2, &w1, &w0, ws[11], p[4]);
836  word3_muladd(&w2, &w1, &w0, ws[12], p[3]);
837  word3_muladd(&w2, &w1, &w0, ws[13], p[2]);
838  word3_muladd(&w2, &w1, &w0, ws[14], p[1]);
839  word3_add(&w2, &w1, &w0, z[15]);
840  ws[15] = w0 * p_dash;
841  word3_muladd(&w2, &w1, &w0, ws[15], p[0]);
842  w0 = w1; w1 = w2; w2 = 0;
843  word3_muladd(&w2, &w1, &w0, ws[0], p[16]);
844  word3_muladd(&w2, &w1, &w0, ws[1], p[15]);
845  word3_muladd(&w2, &w1, &w0, ws[2], p[14]);
846  word3_muladd(&w2, &w1, &w0, ws[3], p[13]);
847  word3_muladd(&w2, &w1, &w0, ws[4], p[12]);
848  word3_muladd(&w2, &w1, &w0, ws[5], p[11]);
849  word3_muladd(&w2, &w1, &w0, ws[6], p[10]);
850  word3_muladd(&w2, &w1, &w0, ws[7], p[9]);
851  word3_muladd(&w2, &w1, &w0, ws[8], p[8]);
852  word3_muladd(&w2, &w1, &w0, ws[9], p[7]);
853  word3_muladd(&w2, &w1, &w0, ws[10], p[6]);
854  word3_muladd(&w2, &w1, &w0, ws[11], p[5]);
855  word3_muladd(&w2, &w1, &w0, ws[12], p[4]);
856  word3_muladd(&w2, &w1, &w0, ws[13], p[3]);
857  word3_muladd(&w2, &w1, &w0, ws[14], p[2]);
858  word3_muladd(&w2, &w1, &w0, ws[15], p[1]);
859  word3_add(&w2, &w1, &w0, z[16]);
860  ws[16] = w0 * p_dash;
861  word3_muladd(&w2, &w1, &w0, ws[16], p[0]);
862  w0 = w1; w1 = w2; w2 = 0;
863  word3_muladd(&w2, &w1, &w0, ws[0], p[17]);
864  word3_muladd(&w2, &w1, &w0, ws[1], p[16]);
865  word3_muladd(&w2, &w1, &w0, ws[2], p[15]);
866  word3_muladd(&w2, &w1, &w0, ws[3], p[14]);
867  word3_muladd(&w2, &w1, &w0, ws[4], p[13]);
868  word3_muladd(&w2, &w1, &w0, ws[5], p[12]);
869  word3_muladd(&w2, &w1, &w0, ws[6], p[11]);
870  word3_muladd(&w2, &w1, &w0, ws[7], p[10]);
871  word3_muladd(&w2, &w1, &w0, ws[8], p[9]);
872  word3_muladd(&w2, &w1, &w0, ws[9], p[8]);
873  word3_muladd(&w2, &w1, &w0, ws[10], p[7]);
874  word3_muladd(&w2, &w1, &w0, ws[11], p[6]);
875  word3_muladd(&w2, &w1, &w0, ws[12], p[5]);
876  word3_muladd(&w2, &w1, &w0, ws[13], p[4]);
877  word3_muladd(&w2, &w1, &w0, ws[14], p[3]);
878  word3_muladd(&w2, &w1, &w0, ws[15], p[2]);
879  word3_muladd(&w2, &w1, &w0, ws[16], p[1]);
880  word3_add(&w2, &w1, &w0, z[17]);
881  ws[17] = w0 * p_dash;
882  word3_muladd(&w2, &w1, &w0, ws[17], p[0]);
883  w0 = w1; w1 = w2; w2 = 0;
884  word3_muladd(&w2, &w1, &w0, ws[0], p[18]);
885  word3_muladd(&w2, &w1, &w0, ws[1], p[17]);
886  word3_muladd(&w2, &w1, &w0, ws[2], p[16]);
887  word3_muladd(&w2, &w1, &w0, ws[3], p[15]);
888  word3_muladd(&w2, &w1, &w0, ws[4], p[14]);
889  word3_muladd(&w2, &w1, &w0, ws[5], p[13]);
890  word3_muladd(&w2, &w1, &w0, ws[6], p[12]);
891  word3_muladd(&w2, &w1, &w0, ws[7], p[11]);
892  word3_muladd(&w2, &w1, &w0, ws[8], p[10]);
893  word3_muladd(&w2, &w1, &w0, ws[9], p[9]);
894  word3_muladd(&w2, &w1, &w0, ws[10], p[8]);
895  word3_muladd(&w2, &w1, &w0, ws[11], p[7]);
896  word3_muladd(&w2, &w1, &w0, ws[12], p[6]);
897  word3_muladd(&w2, &w1, &w0, ws[13], p[5]);
898  word3_muladd(&w2, &w1, &w0, ws[14], p[4]);
899  word3_muladd(&w2, &w1, &w0, ws[15], p[3]);
900  word3_muladd(&w2, &w1, &w0, ws[16], p[2]);
901  word3_muladd(&w2, &w1, &w0, ws[17], p[1]);
902  word3_add(&w2, &w1, &w0, z[18]);
903  ws[18] = w0 * p_dash;
904  word3_muladd(&w2, &w1, &w0, ws[18], p[0]);
905  w0 = w1; w1 = w2; w2 = 0;
906  word3_muladd(&w2, &w1, &w0, ws[0], p[19]);
907  word3_muladd(&w2, &w1, &w0, ws[1], p[18]);
908  word3_muladd(&w2, &w1, &w0, ws[2], p[17]);
909  word3_muladd(&w2, &w1, &w0, ws[3], p[16]);
910  word3_muladd(&w2, &w1, &w0, ws[4], p[15]);
911  word3_muladd(&w2, &w1, &w0, ws[5], p[14]);
912  word3_muladd(&w2, &w1, &w0, ws[6], p[13]);
913  word3_muladd(&w2, &w1, &w0, ws[7], p[12]);
914  word3_muladd(&w2, &w1, &w0, ws[8], p[11]);
915  word3_muladd(&w2, &w1, &w0, ws[9], p[10]);
916  word3_muladd(&w2, &w1, &w0, ws[10], p[9]);
917  word3_muladd(&w2, &w1, &w0, ws[11], p[8]);
918  word3_muladd(&w2, &w1, &w0, ws[12], p[7]);
919  word3_muladd(&w2, &w1, &w0, ws[13], p[6]);
920  word3_muladd(&w2, &w1, &w0, ws[14], p[5]);
921  word3_muladd(&w2, &w1, &w0, ws[15], p[4]);
922  word3_muladd(&w2, &w1, &w0, ws[16], p[3]);
923  word3_muladd(&w2, &w1, &w0, ws[17], p[2]);
924  word3_muladd(&w2, &w1, &w0, ws[18], p[1]);
925  word3_add(&w2, &w1, &w0, z[19]);
926  ws[19] = w0 * p_dash;
927  word3_muladd(&w2, &w1, &w0, ws[19], p[0]);
928  w0 = w1; w1 = w2; w2 = 0;
929  word3_muladd(&w2, &w1, &w0, ws[0], p[20]);
930  word3_muladd(&w2, &w1, &w0, ws[1], p[19]);
931  word3_muladd(&w2, &w1, &w0, ws[2], p[18]);
932  word3_muladd(&w2, &w1, &w0, ws[3], p[17]);
933  word3_muladd(&w2, &w1, &w0, ws[4], p[16]);
934  word3_muladd(&w2, &w1, &w0, ws[5], p[15]);
935  word3_muladd(&w2, &w1, &w0, ws[6], p[14]);
936  word3_muladd(&w2, &w1, &w0, ws[7], p[13]);
937  word3_muladd(&w2, &w1, &w0, ws[8], p[12]);
938  word3_muladd(&w2, &w1, &w0, ws[9], p[11]);
939  word3_muladd(&w2, &w1, &w0, ws[10], p[10]);
940  word3_muladd(&w2, &w1, &w0, ws[11], p[9]);
941  word3_muladd(&w2, &w1, &w0, ws[12], p[8]);
942  word3_muladd(&w2, &w1, &w0, ws[13], p[7]);
943  word3_muladd(&w2, &w1, &w0, ws[14], p[6]);
944  word3_muladd(&w2, &w1, &w0, ws[15], p[5]);
945  word3_muladd(&w2, &w1, &w0, ws[16], p[4]);
946  word3_muladd(&w2, &w1, &w0, ws[17], p[3]);
947  word3_muladd(&w2, &w1, &w0, ws[18], p[2]);
948  word3_muladd(&w2, &w1, &w0, ws[19], p[1]);
949  word3_add(&w2, &w1, &w0, z[20]);
950  ws[20] = w0 * p_dash;
951  word3_muladd(&w2, &w1, &w0, ws[20], p[0]);
952  w0 = w1; w1 = w2; w2 = 0;
953  word3_muladd(&w2, &w1, &w0, ws[0], p[21]);
954  word3_muladd(&w2, &w1, &w0, ws[1], p[20]);
955  word3_muladd(&w2, &w1, &w0, ws[2], p[19]);
956  word3_muladd(&w2, &w1, &w0, ws[3], p[18]);
957  word3_muladd(&w2, &w1, &w0, ws[4], p[17]);
958  word3_muladd(&w2, &w1, &w0, ws[5], p[16]);
959  word3_muladd(&w2, &w1, &w0, ws[6], p[15]);
960  word3_muladd(&w2, &w1, &w0, ws[7], p[14]);
961  word3_muladd(&w2, &w1, &w0, ws[8], p[13]);
962  word3_muladd(&w2, &w1, &w0, ws[9], p[12]);
963  word3_muladd(&w2, &w1, &w0, ws[10], p[11]);
964  word3_muladd(&w2, &w1, &w0, ws[11], p[10]);
965  word3_muladd(&w2, &w1, &w0, ws[12], p[9]);
966  word3_muladd(&w2, &w1, &w0, ws[13], p[8]);
967  word3_muladd(&w2, &w1, &w0, ws[14], p[7]);
968  word3_muladd(&w2, &w1, &w0, ws[15], p[6]);
969  word3_muladd(&w2, &w1, &w0, ws[16], p[5]);
970  word3_muladd(&w2, &w1, &w0, ws[17], p[4]);
971  word3_muladd(&w2, &w1, &w0, ws[18], p[3]);
972  word3_muladd(&w2, &w1, &w0, ws[19], p[2]);
973  word3_muladd(&w2, &w1, &w0, ws[20], p[1]);
974  word3_add(&w2, &w1, &w0, z[21]);
975  ws[21] = w0 * p_dash;
976  word3_muladd(&w2, &w1, &w0, ws[21], p[0]);
977  w0 = w1; w1 = w2; w2 = 0;
978  word3_muladd(&w2, &w1, &w0, ws[0], p[22]);
979  word3_muladd(&w2, &w1, &w0, ws[1], p[21]);
980  word3_muladd(&w2, &w1, &w0, ws[2], p[20]);
981  word3_muladd(&w2, &w1, &w0, ws[3], p[19]);
982  word3_muladd(&w2, &w1, &w0, ws[4], p[18]);
983  word3_muladd(&w2, &w1, &w0, ws[5], p[17]);
984  word3_muladd(&w2, &w1, &w0, ws[6], p[16]);
985  word3_muladd(&w2, &w1, &w0, ws[7], p[15]);
986  word3_muladd(&w2, &w1, &w0, ws[8], p[14]);
987  word3_muladd(&w2, &w1, &w0, ws[9], p[13]);
988  word3_muladd(&w2, &w1, &w0, ws[10], p[12]);
989  word3_muladd(&w2, &w1, &w0, ws[11], p[11]);
990  word3_muladd(&w2, &w1, &w0, ws[12], p[10]);
991  word3_muladd(&w2, &w1, &w0, ws[13], p[9]);
992  word3_muladd(&w2, &w1, &w0, ws[14], p[8]);
993  word3_muladd(&w2, &w1, &w0, ws[15], p[7]);
994  word3_muladd(&w2, &w1, &w0, ws[16], p[6]);
995  word3_muladd(&w2, &w1, &w0, ws[17], p[5]);
996  word3_muladd(&w2, &w1, &w0, ws[18], p[4]);
997  word3_muladd(&w2, &w1, &w0, ws[19], p[3]);
998  word3_muladd(&w2, &w1, &w0, ws[20], p[2]);
999  word3_muladd(&w2, &w1, &w0, ws[21], p[1]);
1000  word3_add(&w2, &w1, &w0, z[22]);
1001  ws[22] = w0 * p_dash;
1002  word3_muladd(&w2, &w1, &w0, ws[22], p[0]);
1003  w0 = w1; w1 = w2; w2 = 0;
1004  word3_muladd(&w2, &w1, &w0, ws[0], p[23]);
1005  word3_muladd(&w2, &w1, &w0, ws[1], p[22]);
1006  word3_muladd(&w2, &w1, &w0, ws[2], p[21]);
1007  word3_muladd(&w2, &w1, &w0, ws[3], p[20]);
1008  word3_muladd(&w2, &w1, &w0, ws[4], p[19]);
1009  word3_muladd(&w2, &w1, &w0, ws[5], p[18]);
1010  word3_muladd(&w2, &w1, &w0, ws[6], p[17]);
1011  word3_muladd(&w2, &w1, &w0, ws[7], p[16]);
1012  word3_muladd(&w2, &w1, &w0, ws[8], p[15]);
1013  word3_muladd(&w2, &w1, &w0, ws[9], p[14]);
1014  word3_muladd(&w2, &w1, &w0, ws[10], p[13]);
1015  word3_muladd(&w2, &w1, &w0, ws[11], p[12]);
1016  word3_muladd(&w2, &w1, &w0, ws[12], p[11]);
1017  word3_muladd(&w2, &w1, &w0, ws[13], p[10]);
1018  word3_muladd(&w2, &w1, &w0, ws[14], p[9]);
1019  word3_muladd(&w2, &w1, &w0, ws[15], p[8]);
1020  word3_muladd(&w2, &w1, &w0, ws[16], p[7]);
1021  word3_muladd(&w2, &w1, &w0, ws[17], p[6]);
1022  word3_muladd(&w2, &w1, &w0, ws[18], p[5]);
1023  word3_muladd(&w2, &w1, &w0, ws[19], p[4]);
1024  word3_muladd(&w2, &w1, &w0, ws[20], p[3]);
1025  word3_muladd(&w2, &w1, &w0, ws[21], p[2]);
1026  word3_muladd(&w2, &w1, &w0, ws[22], p[1]);
1027  word3_add(&w2, &w1, &w0, z[23]);
1028  ws[23] = w0 * p_dash;
1029  word3_muladd(&w2, &w1, &w0, ws[23], p[0]);
1030  w0 = w1; w1 = w2; w2 = 0;
1031  word3_muladd(&w2, &w1, &w0, ws[1], p[23]);
1032  word3_muladd(&w2, &w1, &w0, ws[2], p[22]);
1033  word3_muladd(&w2, &w1, &w0, ws[3], p[21]);
1034  word3_muladd(&w2, &w1, &w0, ws[4], p[20]);
1035  word3_muladd(&w2, &w1, &w0, ws[5], p[19]);
1036  word3_muladd(&w2, &w1, &w0, ws[6], p[18]);
1037  word3_muladd(&w2, &w1, &w0, ws[7], p[17]);
1038  word3_muladd(&w2, &w1, &w0, ws[8], p[16]);
1039  word3_muladd(&w2, &w1, &w0, ws[9], p[15]);
1040  word3_muladd(&w2, &w1, &w0, ws[10], p[14]);
1041  word3_muladd(&w2, &w1, &w0, ws[11], p[13]);
1042  word3_muladd(&w2, &w1, &w0, ws[12], p[12]);
1043  word3_muladd(&w2, &w1, &w0, ws[13], p[11]);
1044  word3_muladd(&w2, &w1, &w0, ws[14], p[10]);
1045  word3_muladd(&w2, &w1, &w0, ws[15], p[9]);
1046  word3_muladd(&w2, &w1, &w0, ws[16], p[8]);
1047  word3_muladd(&w2, &w1, &w0, ws[17], p[7]);
1048  word3_muladd(&w2, &w1, &w0, ws[18], p[6]);
1049  word3_muladd(&w2, &w1, &w0, ws[19], p[5]);
1050  word3_muladd(&w2, &w1, &w0, ws[20], p[4]);
1051  word3_muladd(&w2, &w1, &w0, ws[21], p[3]);
1052  word3_muladd(&w2, &w1, &w0, ws[22], p[2]);
1053  word3_muladd(&w2, &w1, &w0, ws[23], p[1]);
1054  word3_add(&w2, &w1, &w0, z[24]);
1055  ws[0] = w0;
1056  w0 = w1; w1 = w2; w2 = 0;
1057  word3_muladd(&w2, &w1, &w0, ws[2], p[23]);
1058  word3_muladd(&w2, &w1, &w0, ws[3], p[22]);
1059  word3_muladd(&w2, &w1, &w0, ws[4], p[21]);
1060  word3_muladd(&w2, &w1, &w0, ws[5], p[20]);
1061  word3_muladd(&w2, &w1, &w0, ws[6], p[19]);
1062  word3_muladd(&w2, &w1, &w0, ws[7], p[18]);
1063  word3_muladd(&w2, &w1, &w0, ws[8], p[17]);
1064  word3_muladd(&w2, &w1, &w0, ws[9], p[16]);
1065  word3_muladd(&w2, &w1, &w0, ws[10], p[15]);
1066  word3_muladd(&w2, &w1, &w0, ws[11], p[14]);
1067  word3_muladd(&w2, &w1, &w0, ws[12], p[13]);
1068  word3_muladd(&w2, &w1, &w0, ws[13], p[12]);
1069  word3_muladd(&w2, &w1, &w0, ws[14], p[11]);
1070  word3_muladd(&w2, &w1, &w0, ws[15], p[10]);
1071  word3_muladd(&w2, &w1, &w0, ws[16], p[9]);
1072  word3_muladd(&w2, &w1, &w0, ws[17], p[8]);
1073  word3_muladd(&w2, &w1, &w0, ws[18], p[7]);
1074  word3_muladd(&w2, &w1, &w0, ws[19], p[6]);
1075  word3_muladd(&w2, &w1, &w0, ws[20], p[5]);
1076  word3_muladd(&w2, &w1, &w0, ws[21], p[4]);
1077  word3_muladd(&w2, &w1, &w0, ws[22], p[3]);
1078  word3_muladd(&w2, &w1, &w0, ws[23], p[2]);
1079  word3_add(&w2, &w1, &w0, z[25]);
1080  ws[1] = w0;
1081  w0 = w1; w1 = w2; w2 = 0;
1082  word3_muladd(&w2, &w1, &w0, ws[3], p[23]);
1083  word3_muladd(&w2, &w1, &w0, ws[4], p[22]);
1084  word3_muladd(&w2, &w1, &w0, ws[5], p[21]);
1085  word3_muladd(&w2, &w1, &w0, ws[6], p[20]);
1086  word3_muladd(&w2, &w1, &w0, ws[7], p[19]);
1087  word3_muladd(&w2, &w1, &w0, ws[8], p[18]);
1088  word3_muladd(&w2, &w1, &w0, ws[9], p[17]);
1089  word3_muladd(&w2, &w1, &w0, ws[10], p[16]);
1090  word3_muladd(&w2, &w1, &w0, ws[11], p[15]);
1091  word3_muladd(&w2, &w1, &w0, ws[12], p[14]);
1092  word3_muladd(&w2, &w1, &w0, ws[13], p[13]);
1093  word3_muladd(&w2, &w1, &w0, ws[14], p[12]);
1094  word3_muladd(&w2, &w1, &w0, ws[15], p[11]);
1095  word3_muladd(&w2, &w1, &w0, ws[16], p[10]);
1096  word3_muladd(&w2, &w1, &w0, ws[17], p[9]);
1097  word3_muladd(&w2, &w1, &w0, ws[18], p[8]);
1098  word3_muladd(&w2, &w1, &w0, ws[19], p[7]);
1099  word3_muladd(&w2, &w1, &w0, ws[20], p[6]);
1100  word3_muladd(&w2, &w1, &w0, ws[21], p[5]);
1101  word3_muladd(&w2, &w1, &w0, ws[22], p[4]);
1102  word3_muladd(&w2, &w1, &w0, ws[23], p[3]);
1103  word3_add(&w2, &w1, &w0, z[26]);
1104  ws[2] = w0;
1105  w0 = w1; w1 = w2; w2 = 0;
1106  word3_muladd(&w2, &w1, &w0, ws[4], p[23]);
1107  word3_muladd(&w2, &w1, &w0, ws[5], p[22]);
1108  word3_muladd(&w2, &w1, &w0, ws[6], p[21]);
1109  word3_muladd(&w2, &w1, &w0, ws[7], p[20]);
1110  word3_muladd(&w2, &w1, &w0, ws[8], p[19]);
1111  word3_muladd(&w2, &w1, &w0, ws[9], p[18]);
1112  word3_muladd(&w2, &w1, &w0, ws[10], p[17]);
1113  word3_muladd(&w2, &w1, &w0, ws[11], p[16]);
1114  word3_muladd(&w2, &w1, &w0, ws[12], p[15]);
1115  word3_muladd(&w2, &w1, &w0, ws[13], p[14]);
1116  word3_muladd(&w2, &w1, &w0, ws[14], p[13]);
1117  word3_muladd(&w2, &w1, &w0, ws[15], p[12]);
1118  word3_muladd(&w2, &w1, &w0, ws[16], p[11]);
1119  word3_muladd(&w2, &w1, &w0, ws[17], p[10]);
1120  word3_muladd(&w2, &w1, &w0, ws[18], p[9]);
1121  word3_muladd(&w2, &w1, &w0, ws[19], p[8]);
1122  word3_muladd(&w2, &w1, &w0, ws[20], p[7]);
1123  word3_muladd(&w2, &w1, &w0, ws[21], p[6]);
1124  word3_muladd(&w2, &w1, &w0, ws[22], p[5]);
1125  word3_muladd(&w2, &w1, &w0, ws[23], p[4]);
1126  word3_add(&w2, &w1, &w0, z[27]);
1127  ws[3] = w0;
1128  w0 = w1; w1 = w2; w2 = 0;
1129  word3_muladd(&w2, &w1, &w0, ws[5], p[23]);
1130  word3_muladd(&w2, &w1, &w0, ws[6], p[22]);
1131  word3_muladd(&w2, &w1, &w0, ws[7], p[21]);
1132  word3_muladd(&w2, &w1, &w0, ws[8], p[20]);
1133  word3_muladd(&w2, &w1, &w0, ws[9], p[19]);
1134  word3_muladd(&w2, &w1, &w0, ws[10], p[18]);
1135  word3_muladd(&w2, &w1, &w0, ws[11], p[17]);
1136  word3_muladd(&w2, &w1, &w0, ws[12], p[16]);
1137  word3_muladd(&w2, &w1, &w0, ws[13], p[15]);
1138  word3_muladd(&w2, &w1, &w0, ws[14], p[14]);
1139  word3_muladd(&w2, &w1, &w0, ws[15], p[13]);
1140  word3_muladd(&w2, &w1, &w0, ws[16], p[12]);
1141  word3_muladd(&w2, &w1, &w0, ws[17], p[11]);
1142  word3_muladd(&w2, &w1, &w0, ws[18], p[10]);
1143  word3_muladd(&w2, &w1, &w0, ws[19], p[9]);
1144  word3_muladd(&w2, &w1, &w0, ws[20], p[8]);
1145  word3_muladd(&w2, &w1, &w0, ws[21], p[7]);
1146  word3_muladd(&w2, &w1, &w0, ws[22], p[6]);
1147  word3_muladd(&w2, &w1, &w0, ws[23], p[5]);
1148  word3_add(&w2, &w1, &w0, z[28]);
1149  ws[4] = w0;
1150  w0 = w1; w1 = w2; w2 = 0;
1151  word3_muladd(&w2, &w1, &w0, ws[6], p[23]);
1152  word3_muladd(&w2, &w1, &w0, ws[7], p[22]);
1153  word3_muladd(&w2, &w1, &w0, ws[8], p[21]);
1154  word3_muladd(&w2, &w1, &w0, ws[9], p[20]);
1155  word3_muladd(&w2, &w1, &w0, ws[10], p[19]);
1156  word3_muladd(&w2, &w1, &w0, ws[11], p[18]);
1157  word3_muladd(&w2, &w1, &w0, ws[12], p[17]);
1158  word3_muladd(&w2, &w1, &w0, ws[13], p[16]);
1159  word3_muladd(&w2, &w1, &w0, ws[14], p[15]);
1160  word3_muladd(&w2, &w1, &w0, ws[15], p[14]);
1161  word3_muladd(&w2, &w1, &w0, ws[16], p[13]);
1162  word3_muladd(&w2, &w1, &w0, ws[17], p[12]);
1163  word3_muladd(&w2, &w1, &w0, ws[18], p[11]);
1164  word3_muladd(&w2, &w1, &w0, ws[19], p[10]);
1165  word3_muladd(&w2, &w1, &w0, ws[20], p[9]);
1166  word3_muladd(&w2, &w1, &w0, ws[21], p[8]);
1167  word3_muladd(&w2, &w1, &w0, ws[22], p[7]);
1168  word3_muladd(&w2, &w1, &w0, ws[23], p[6]);
1169  word3_add(&w2, &w1, &w0, z[29]);
1170  ws[5] = w0;
1171  w0 = w1; w1 = w2; w2 = 0;
1172  word3_muladd(&w2, &w1, &w0, ws[7], p[23]);
1173  word3_muladd(&w2, &w1, &w0, ws[8], p[22]);
1174  word3_muladd(&w2, &w1, &w0, ws[9], p[21]);
1175  word3_muladd(&w2, &w1, &w0, ws[10], p[20]);
1176  word3_muladd(&w2, &w1, &w0, ws[11], p[19]);
1177  word3_muladd(&w2, &w1, &w0, ws[12], p[18]);
1178  word3_muladd(&w2, &w1, &w0, ws[13], p[17]);
1179  word3_muladd(&w2, &w1, &w0, ws[14], p[16]);
1180  word3_muladd(&w2, &w1, &w0, ws[15], p[15]);
1181  word3_muladd(&w2, &w1, &w0, ws[16], p[14]);
1182  word3_muladd(&w2, &w1, &w0, ws[17], p[13]);
1183  word3_muladd(&w2, &w1, &w0, ws[18], p[12]);
1184  word3_muladd(&w2, &w1, &w0, ws[19], p[11]);
1185  word3_muladd(&w2, &w1, &w0, ws[20], p[10]);
1186  word3_muladd(&w2, &w1, &w0, ws[21], p[9]);
1187  word3_muladd(&w2, &w1, &w0, ws[22], p[8]);
1188  word3_muladd(&w2, &w1, &w0, ws[23], p[7]);
1189  word3_add(&w2, &w1, &w0, z[30]);
1190  ws[6] = w0;
1191  w0 = w1; w1 = w2; w2 = 0;
1192  word3_muladd(&w2, &w1, &w0, ws[8], p[23]);
1193  word3_muladd(&w2, &w1, &w0, ws[9], p[22]);
1194  word3_muladd(&w2, &w1, &w0, ws[10], p[21]);
1195  word3_muladd(&w2, &w1, &w0, ws[11], p[20]);
1196  word3_muladd(&w2, &w1, &w0, ws[12], p[19]);
1197  word3_muladd(&w2, &w1, &w0, ws[13], p[18]);
1198  word3_muladd(&w2, &w1, &w0, ws[14], p[17]);
1199  word3_muladd(&w2, &w1, &w0, ws[15], p[16]);
1200  word3_muladd(&w2, &w1, &w0, ws[16], p[15]);
1201  word3_muladd(&w2, &w1, &w0, ws[17], p[14]);
1202  word3_muladd(&w2, &w1, &w0, ws[18], p[13]);
1203  word3_muladd(&w2, &w1, &w0, ws[19], p[12]);
1204  word3_muladd(&w2, &w1, &w0, ws[20], p[11]);
1205  word3_muladd(&w2, &w1, &w0, ws[21], p[10]);
1206  word3_muladd(&w2, &w1, &w0, ws[22], p[9]);
1207  word3_muladd(&w2, &w1, &w0, ws[23], p[8]);
1208  word3_add(&w2, &w1, &w0, z[31]);
1209  ws[7] = w0;
1210  w0 = w1; w1 = w2; w2 = 0;
1211  word3_muladd(&w2, &w1, &w0, ws[9], p[23]);
1212  word3_muladd(&w2, &w1, &w0, ws[10], p[22]);
1213  word3_muladd(&w2, &w1, &w0, ws[11], p[21]);
1214  word3_muladd(&w2, &w1, &w0, ws[12], p[20]);
1215  word3_muladd(&w2, &w1, &w0, ws[13], p[19]);
1216  word3_muladd(&w2, &w1, &w0, ws[14], p[18]);
1217  word3_muladd(&w2, &w1, &w0, ws[15], p[17]);
1218  word3_muladd(&w2, &w1, &w0, ws[16], p[16]);
1219  word3_muladd(&w2, &w1, &w0, ws[17], p[15]);
1220  word3_muladd(&w2, &w1, &w0, ws[18], p[14]);
1221  word3_muladd(&w2, &w1, &w0, ws[19], p[13]);
1222  word3_muladd(&w2, &w1, &w0, ws[20], p[12]);
1223  word3_muladd(&w2, &w1, &w0, ws[21], p[11]);
1224  word3_muladd(&w2, &w1, &w0, ws[22], p[10]);
1225  word3_muladd(&w2, &w1, &w0, ws[23], p[9]);
1226  word3_add(&w2, &w1, &w0, z[32]);
1227  ws[8] = w0;
1228  w0 = w1; w1 = w2; w2 = 0;
1229  word3_muladd(&w2, &w1, &w0, ws[10], p[23]);
1230  word3_muladd(&w2, &w1, &w0, ws[11], p[22]);
1231  word3_muladd(&w2, &w1, &w0, ws[12], p[21]);
1232  word3_muladd(&w2, &w1, &w0, ws[13], p[20]);
1233  word3_muladd(&w2, &w1, &w0, ws[14], p[19]);
1234  word3_muladd(&w2, &w1, &w0, ws[15], p[18]);
1235  word3_muladd(&w2, &w1, &w0, ws[16], p[17]);
1236  word3_muladd(&w2, &w1, &w0, ws[17], p[16]);
1237  word3_muladd(&w2, &w1, &w0, ws[18], p[15]);
1238  word3_muladd(&w2, &w1, &w0, ws[19], p[14]);
1239  word3_muladd(&w2, &w1, &w0, ws[20], p[13]);
1240  word3_muladd(&w2, &w1, &w0, ws[21], p[12]);
1241  word3_muladd(&w2, &w1, &w0, ws[22], p[11]);
1242  word3_muladd(&w2, &w1, &w0, ws[23], p[10]);
1243  word3_add(&w2, &w1, &w0, z[33]);
1244  ws[9] = w0;
1245  w0 = w1; w1 = w2; w2 = 0;
1246  word3_muladd(&w2, &w1, &w0, ws[11], p[23]);
1247  word3_muladd(&w2, &w1, &w0, ws[12], p[22]);
1248  word3_muladd(&w2, &w1, &w0, ws[13], p[21]);
1249  word3_muladd(&w2, &w1, &w0, ws[14], p[20]);
1250  word3_muladd(&w2, &w1, &w0, ws[15], p[19]);
1251  word3_muladd(&w2, &w1, &w0, ws[16], p[18]);
1252  word3_muladd(&w2, &w1, &w0, ws[17], p[17]);
1253  word3_muladd(&w2, &w1, &w0, ws[18], p[16]);
1254  word3_muladd(&w2, &w1, &w0, ws[19], p[15]);
1255  word3_muladd(&w2, &w1, &w0, ws[20], p[14]);
1256  word3_muladd(&w2, &w1, &w0, ws[21], p[13]);
1257  word3_muladd(&w2, &w1, &w0, ws[22], p[12]);
1258  word3_muladd(&w2, &w1, &w0, ws[23], p[11]);
1259  word3_add(&w2, &w1, &w0, z[34]);
1260  ws[10] = w0;
1261  w0 = w1; w1 = w2; w2 = 0;
1262  word3_muladd(&w2, &w1, &w0, ws[12], p[23]);
1263  word3_muladd(&w2, &w1, &w0, ws[13], p[22]);
1264  word3_muladd(&w2, &w1, &w0, ws[14], p[21]);
1265  word3_muladd(&w2, &w1, &w0, ws[15], p[20]);
1266  word3_muladd(&w2, &w1, &w0, ws[16], p[19]);
1267  word3_muladd(&w2, &w1, &w0, ws[17], p[18]);
1268  word3_muladd(&w2, &w1, &w0, ws[18], p[17]);
1269  word3_muladd(&w2, &w1, &w0, ws[19], p[16]);
1270  word3_muladd(&w2, &w1, &w0, ws[20], p[15]);
1271  word3_muladd(&w2, &w1, &w0, ws[21], p[14]);
1272  word3_muladd(&w2, &w1, &w0, ws[22], p[13]);
1273  word3_muladd(&w2, &w1, &w0, ws[23], p[12]);
1274  word3_add(&w2, &w1, &w0, z[35]);
1275  ws[11] = w0;
1276  w0 = w1; w1 = w2; w2 = 0;
1277  word3_muladd(&w2, &w1, &w0, ws[13], p[23]);
1278  word3_muladd(&w2, &w1, &w0, ws[14], p[22]);
1279  word3_muladd(&w2, &w1, &w0, ws[15], p[21]);
1280  word3_muladd(&w2, &w1, &w0, ws[16], p[20]);
1281  word3_muladd(&w2, &w1, &w0, ws[17], p[19]);
1282  word3_muladd(&w2, &w1, &w0, ws[18], p[18]);
1283  word3_muladd(&w2, &w1, &w0, ws[19], p[17]);
1284  word3_muladd(&w2, &w1, &w0, ws[20], p[16]);
1285  word3_muladd(&w2, &w1, &w0, ws[21], p[15]);
1286  word3_muladd(&w2, &w1, &w0, ws[22], p[14]);
1287  word3_muladd(&w2, &w1, &w0, ws[23], p[13]);
1288  word3_add(&w2, &w1, &w0, z[36]);
1289  ws[12] = w0;
1290  w0 = w1; w1 = w2; w2 = 0;
1291  word3_muladd(&w2, &w1, &w0, ws[14], p[23]);
1292  word3_muladd(&w2, &w1, &w0, ws[15], p[22]);
1293  word3_muladd(&w2, &w1, &w0, ws[16], p[21]);
1294  word3_muladd(&w2, &w1, &w0, ws[17], p[20]);
1295  word3_muladd(&w2, &w1, &w0, ws[18], p[19]);
1296  word3_muladd(&w2, &w1, &w0, ws[19], p[18]);
1297  word3_muladd(&w2, &w1, &w0, ws[20], p[17]);
1298  word3_muladd(&w2, &w1, &w0, ws[21], p[16]);
1299  word3_muladd(&w2, &w1, &w0, ws[22], p[15]);
1300  word3_muladd(&w2, &w1, &w0, ws[23], p[14]);
1301  word3_add(&w2, &w1, &w0, z[37]);
1302  ws[13] = w0;
1303  w0 = w1; w1 = w2; w2 = 0;
1304  word3_muladd(&w2, &w1, &w0, ws[15], p[23]);
1305  word3_muladd(&w2, &w1, &w0, ws[16], p[22]);
1306  word3_muladd(&w2, &w1, &w0, ws[17], p[21]);
1307  word3_muladd(&w2, &w1, &w0, ws[18], p[20]);
1308  word3_muladd(&w2, &w1, &w0, ws[19], p[19]);
1309  word3_muladd(&w2, &w1, &w0, ws[20], p[18]);
1310  word3_muladd(&w2, &w1, &w0, ws[21], p[17]);
1311  word3_muladd(&w2, &w1, &w0, ws[22], p[16]);
1312  word3_muladd(&w2, &w1, &w0, ws[23], p[15]);
1313  word3_add(&w2, &w1, &w0, z[38]);
1314  ws[14] = w0;
1315  w0 = w1; w1 = w2; w2 = 0;
1316  word3_muladd(&w2, &w1, &w0, ws[16], p[23]);
1317  word3_muladd(&w2, &w1, &w0, ws[17], p[22]);
1318  word3_muladd(&w2, &w1, &w0, ws[18], p[21]);
1319  word3_muladd(&w2, &w1, &w0, ws[19], p[20]);
1320  word3_muladd(&w2, &w1, &w0, ws[20], p[19]);
1321  word3_muladd(&w2, &w1, &w0, ws[21], p[18]);
1322  word3_muladd(&w2, &w1, &w0, ws[22], p[17]);
1323  word3_muladd(&w2, &w1, &w0, ws[23], p[16]);
1324  word3_add(&w2, &w1, &w0, z[39]);
1325  ws[15] = w0;
1326  w0 = w1; w1 = w2; w2 = 0;
1327  word3_muladd(&w2, &w1, &w0, ws[17], p[23]);
1328  word3_muladd(&w2, &w1, &w0, ws[18], p[22]);
1329  word3_muladd(&w2, &w1, &w0, ws[19], p[21]);
1330  word3_muladd(&w2, &w1, &w0, ws[20], p[20]);
1331  word3_muladd(&w2, &w1, &w0, ws[21], p[19]);
1332  word3_muladd(&w2, &w1, &w0, ws[22], p[18]);
1333  word3_muladd(&w2, &w1, &w0, ws[23], p[17]);
1334  word3_add(&w2, &w1, &w0, z[40]);
1335  ws[16] = w0;
1336  w0 = w1; w1 = w2; w2 = 0;
1337  word3_muladd(&w2, &w1, &w0, ws[18], p[23]);
1338  word3_muladd(&w2, &w1, &w0, ws[19], p[22]);
1339  word3_muladd(&w2, &w1, &w0, ws[20], p[21]);
1340  word3_muladd(&w2, &w1, &w0, ws[21], p[20]);
1341  word3_muladd(&w2, &w1, &w0, ws[22], p[19]);
1342  word3_muladd(&w2, &w1, &w0, ws[23], p[18]);
1343  word3_add(&w2, &w1, &w0, z[41]);
1344  ws[17] = w0;
1345  w0 = w1; w1 = w2; w2 = 0;
1346  word3_muladd(&w2, &w1, &w0, ws[19], p[23]);
1347  word3_muladd(&w2, &w1, &w0, ws[20], p[22]);
1348  word3_muladd(&w2, &w1, &w0, ws[21], p[21]);
1349  word3_muladd(&w2, &w1, &w0, ws[22], p[20]);
1350  word3_muladd(&w2, &w1, &w0, ws[23], p[19]);
1351  word3_add(&w2, &w1, &w0, z[42]);
1352  ws[18] = w0;
1353  w0 = w1; w1 = w2; w2 = 0;
1354  word3_muladd(&w2, &w1, &w0, ws[20], p[23]);
1355  word3_muladd(&w2, &w1, &w0, ws[21], p[22]);
1356  word3_muladd(&w2, &w1, &w0, ws[22], p[21]);
1357  word3_muladd(&w2, &w1, &w0, ws[23], p[20]);
1358  word3_add(&w2, &w1, &w0, z[43]);
1359  ws[19] = w0;
1360  w0 = w1; w1 = w2; w2 = 0;
1361  word3_muladd(&w2, &w1, &w0, ws[21], p[23]);
1362  word3_muladd(&w2, &w1, &w0, ws[22], p[22]);
1363  word3_muladd(&w2, &w1, &w0, ws[23], p[21]);
1364  word3_add(&w2, &w1, &w0, z[44]);
1365  ws[20] = w0;
1366  w0 = w1; w1 = w2; w2 = 0;
1367  word3_muladd(&w2, &w1, &w0, ws[22], p[23]);
1368  word3_muladd(&w2, &w1, &w0, ws[23], p[22]);
1369  word3_add(&w2, &w1, &w0, z[45]);
1370  ws[21] = w0;
1371  w0 = w1; w1 = w2; w2 = 0;
1372  word3_muladd(&w2, &w1, &w0, ws[23], p[23]);
1373  word3_add(&w2, &w1, &w0, z[46]);
1374  ws[22] = w0;
1375  w0 = w1; w1 = w2; w2 = 0;
1376  word3_add(&w2, &w1, &w0, z[47]);
1377  ws[23] = w0;
1378  w0 = w1; w1 = w2; w2 = 0;
1379  word3_add(&w2, &w1, &w0, z[49]);
1380  ws[24] = w0;
1381  ws[25] = w1;
1382  word borrow = bigint_sub3(ws + 24 + 1, ws, 24 + 1, p, 24);
1383  CT::conditional_copy_mem(borrow, z, ws, ws + 25, 25);
1384  clear_mem(z + 24, 2*(24+1) - 24);
1385  }
1386 
1387 void bigint_monty_redc_32(word z[], const word p[32], word p_dash, word ws[])
1388  {
1389  word w2 = 0, w1 = 0, w0 = 0;
1390  w0 = z[0];
1391  ws[0] = w0 * p_dash;
1392  word3_muladd(&w2, &w1, &w0, ws[0], p[0]);
1393  w0 = w1; w1 = w2; w2 = 0;
1394  word3_muladd(&w2, &w1, &w0, ws[0], p[1]);
1395  word3_add(&w2, &w1, &w0, z[1]);
1396  ws[1] = w0 * p_dash;
1397  word3_muladd(&w2, &w1, &w0, ws[1], p[0]);
1398  w0 = w1; w1 = w2; w2 = 0;
1399  word3_muladd(&w2, &w1, &w0, ws[0], p[2]);
1400  word3_muladd(&w2, &w1, &w0, ws[1], p[1]);
1401  word3_add(&w2, &w1, &w0, z[2]);
1402  ws[2] = w0 * p_dash;
1403  word3_muladd(&w2, &w1, &w0, ws[2], p[0]);
1404  w0 = w1; w1 = w2; w2 = 0;
1405  word3_muladd(&w2, &w1, &w0, ws[0], p[3]);
1406  word3_muladd(&w2, &w1, &w0, ws[1], p[2]);
1407  word3_muladd(&w2, &w1, &w0, ws[2], p[1]);
1408  word3_add(&w2, &w1, &w0, z[3]);
1409  ws[3] = w0 * p_dash;
1410  word3_muladd(&w2, &w1, &w0, ws[3], p[0]);
1411  w0 = w1; w1 = w2; w2 = 0;
1412  word3_muladd(&w2, &w1, &w0, ws[0], p[4]);
1413  word3_muladd(&w2, &w1, &w0, ws[1], p[3]);
1414  word3_muladd(&w2, &w1, &w0, ws[2], p[2]);
1415  word3_muladd(&w2, &w1, &w0, ws[3], p[1]);
1416  word3_add(&w2, &w1, &w0, z[4]);
1417  ws[4] = w0 * p_dash;
1418  word3_muladd(&w2, &w1, &w0, ws[4], p[0]);
1419  w0 = w1; w1 = w2; w2 = 0;
1420  word3_muladd(&w2, &w1, &w0, ws[0], p[5]);
1421  word3_muladd(&w2, &w1, &w0, ws[1], p[4]);
1422  word3_muladd(&w2, &w1, &w0, ws[2], p[3]);
1423  word3_muladd(&w2, &w1, &w0, ws[3], p[2]);
1424  word3_muladd(&w2, &w1, &w0, ws[4], p[1]);
1425  word3_add(&w2, &w1, &w0, z[5]);
1426  ws[5] = w0 * p_dash;
1427  word3_muladd(&w2, &w1, &w0, ws[5], p[0]);
1428  w0 = w1; w1 = w2; w2 = 0;
1429  word3_muladd(&w2, &w1, &w0, ws[0], p[6]);
1430  word3_muladd(&w2, &w1, &w0, ws[1], p[5]);
1431  word3_muladd(&w2, &w1, &w0, ws[2], p[4]);
1432  word3_muladd(&w2, &w1, &w0, ws[3], p[3]);
1433  word3_muladd(&w2, &w1, &w0, ws[4], p[2]);
1434  word3_muladd(&w2, &w1, &w0, ws[5], p[1]);
1435  word3_add(&w2, &w1, &w0, z[6]);
1436  ws[6] = w0 * p_dash;
1437  word3_muladd(&w2, &w1, &w0, ws[6], p[0]);
1438  w0 = w1; w1 = w2; w2 = 0;
1439  word3_muladd(&w2, &w1, &w0, ws[0], p[7]);
1440  word3_muladd(&w2, &w1, &w0, ws[1], p[6]);
1441  word3_muladd(&w2, &w1, &w0, ws[2], p[5]);
1442  word3_muladd(&w2, &w1, &w0, ws[3], p[4]);
1443  word3_muladd(&w2, &w1, &w0, ws[4], p[3]);
1444  word3_muladd(&w2, &w1, &w0, ws[5], p[2]);
1445  word3_muladd(&w2, &w1, &w0, ws[6], p[1]);
1446  word3_add(&w2, &w1, &w0, z[7]);
1447  ws[7] = w0 * p_dash;
1448  word3_muladd(&w2, &w1, &w0, ws[7], p[0]);
1449  w0 = w1; w1 = w2; w2 = 0;
1450  word3_muladd(&w2, &w1, &w0, ws[0], p[8]);
1451  word3_muladd(&w2, &w1, &w0, ws[1], p[7]);
1452  word3_muladd(&w2, &w1, &w0, ws[2], p[6]);
1453  word3_muladd(&w2, &w1, &w0, ws[3], p[5]);
1454  word3_muladd(&w2, &w1, &w0, ws[4], p[4]);
1455  word3_muladd(&w2, &w1, &w0, ws[5], p[3]);
1456  word3_muladd(&w2, &w1, &w0, ws[6], p[2]);
1457  word3_muladd(&w2, &w1, &w0, ws[7], p[1]);
1458  word3_add(&w2, &w1, &w0, z[8]);
1459  ws[8] = w0 * p_dash;
1460  word3_muladd(&w2, &w1, &w0, ws[8], p[0]);
1461  w0 = w1; w1 = w2; w2 = 0;
1462  word3_muladd(&w2, &w1, &w0, ws[0], p[9]);
1463  word3_muladd(&w2, &w1, &w0, ws[1], p[8]);
1464  word3_muladd(&w2, &w1, &w0, ws[2], p[7]);
1465  word3_muladd(&w2, &w1, &w0, ws[3], p[6]);
1466  word3_muladd(&w2, &w1, &w0, ws[4], p[5]);
1467  word3_muladd(&w2, &w1, &w0, ws[5], p[4]);
1468  word3_muladd(&w2, &w1, &w0, ws[6], p[3]);
1469  word3_muladd(&w2, &w1, &w0, ws[7], p[2]);
1470  word3_muladd(&w2, &w1, &w0, ws[8], p[1]);
1471  word3_add(&w2, &w1, &w0, z[9]);
1472  ws[9] = w0 * p_dash;
1473  word3_muladd(&w2, &w1, &w0, ws[9], p[0]);
1474  w0 = w1; w1 = w2; w2 = 0;
1475  word3_muladd(&w2, &w1, &w0, ws[0], p[10]);
1476  word3_muladd(&w2, &w1, &w0, ws[1], p[9]);
1477  word3_muladd(&w2, &w1, &w0, ws[2], p[8]);
1478  word3_muladd(&w2, &w1, &w0, ws[3], p[7]);
1479  word3_muladd(&w2, &w1, &w0, ws[4], p[6]);
1480  word3_muladd(&w2, &w1, &w0, ws[5], p[5]);
1481  word3_muladd(&w2, &w1, &w0, ws[6], p[4]);
1482  word3_muladd(&w2, &w1, &w0, ws[7], p[3]);
1483  word3_muladd(&w2, &w1, &w0, ws[8], p[2]);
1484  word3_muladd(&w2, &w1, &w0, ws[9], p[1]);
1485  word3_add(&w2, &w1, &w0, z[10]);
1486  ws[10] = w0 * p_dash;
1487  word3_muladd(&w2, &w1, &w0, ws[10], p[0]);
1488  w0 = w1; w1 = w2; w2 = 0;
1489  word3_muladd(&w2, &w1, &w0, ws[0], p[11]);
1490  word3_muladd(&w2, &w1, &w0, ws[1], p[10]);
1491  word3_muladd(&w2, &w1, &w0, ws[2], p[9]);
1492  word3_muladd(&w2, &w1, &w0, ws[3], p[8]);
1493  word3_muladd(&w2, &w1, &w0, ws[4], p[7]);
1494  word3_muladd(&w2, &w1, &w0, ws[5], p[6]);
1495  word3_muladd(&w2, &w1, &w0, ws[6], p[5]);
1496  word3_muladd(&w2, &w1, &w0, ws[7], p[4]);
1497  word3_muladd(&w2, &w1, &w0, ws[8], p[3]);
1498  word3_muladd(&w2, &w1, &w0, ws[9], p[2]);
1499  word3_muladd(&w2, &w1, &w0, ws[10], p[1]);
1500  word3_add(&w2, &w1, &w0, z[11]);
1501  ws[11] = w0 * p_dash;
1502  word3_muladd(&w2, &w1, &w0, ws[11], p[0]);
1503  w0 = w1; w1 = w2; w2 = 0;
1504  word3_muladd(&w2, &w1, &w0, ws[0], p[12]);
1505  word3_muladd(&w2, &w1, &w0, ws[1], p[11]);
1506  word3_muladd(&w2, &w1, &w0, ws[2], p[10]);
1507  word3_muladd(&w2, &w1, &w0, ws[3], p[9]);
1508  word3_muladd(&w2, &w1, &w0, ws[4], p[8]);
1509  word3_muladd(&w2, &w1, &w0, ws[5], p[7]);
1510  word3_muladd(&w2, &w1, &w0, ws[6], p[6]);
1511  word3_muladd(&w2, &w1, &w0, ws[7], p[5]);
1512  word3_muladd(&w2, &w1, &w0, ws[8], p[4]);
1513  word3_muladd(&w2, &w1, &w0, ws[9], p[3]);
1514  word3_muladd(&w2, &w1, &w0, ws[10], p[2]);
1515  word3_muladd(&w2, &w1, &w0, ws[11], p[1]);
1516  word3_add(&w2, &w1, &w0, z[12]);
1517  ws[12] = w0 * p_dash;
1518  word3_muladd(&w2, &w1, &w0, ws[12], p[0]);
1519  w0 = w1; w1 = w2; w2 = 0;
1520  word3_muladd(&w2, &w1, &w0, ws[0], p[13]);
1521  word3_muladd(&w2, &w1, &w0, ws[1], p[12]);
1522  word3_muladd(&w2, &w1, &w0, ws[2], p[11]);
1523  word3_muladd(&w2, &w1, &w0, ws[3], p[10]);
1524  word3_muladd(&w2, &w1, &w0, ws[4], p[9]);
1525  word3_muladd(&w2, &w1, &w0, ws[5], p[8]);
1526  word3_muladd(&w2, &w1, &w0, ws[6], p[7]);
1527  word3_muladd(&w2, &w1, &w0, ws[7], p[6]);
1528  word3_muladd(&w2, &w1, &w0, ws[8], p[5]);
1529  word3_muladd(&w2, &w1, &w0, ws[9], p[4]);
1530  word3_muladd(&w2, &w1, &w0, ws[10], p[3]);
1531  word3_muladd(&w2, &w1, &w0, ws[11], p[2]);
1532  word3_muladd(&w2, &w1, &w0, ws[12], p[1]);
1533  word3_add(&w2, &w1, &w0, z[13]);
1534  ws[13] = w0 * p_dash;
1535  word3_muladd(&w2, &w1, &w0, ws[13], p[0]);
1536  w0 = w1; w1 = w2; w2 = 0;
1537  word3_muladd(&w2, &w1, &w0, ws[0], p[14]);
1538  word3_muladd(&w2, &w1, &w0, ws[1], p[13]);
1539  word3_muladd(&w2, &w1, &w0, ws[2], p[12]);
1540  word3_muladd(&w2, &w1, &w0, ws[3], p[11]);
1541  word3_muladd(&w2, &w1, &w0, ws[4], p[10]);
1542  word3_muladd(&w2, &w1, &w0, ws[5], p[9]);
1543  word3_muladd(&w2, &w1, &w0, ws[6], p[8]);
1544  word3_muladd(&w2, &w1, &w0, ws[7], p[7]);
1545  word3_muladd(&w2, &w1, &w0, ws[8], p[6]);
1546  word3_muladd(&w2, &w1, &w0, ws[9], p[5]);
1547  word3_muladd(&w2, &w1, &w0, ws[10], p[4]);
1548  word3_muladd(&w2, &w1, &w0, ws[11], p[3]);
1549  word3_muladd(&w2, &w1, &w0, ws[12], p[2]);
1550  word3_muladd(&w2, &w1, &w0, ws[13], p[1]);
1551  word3_add(&w2, &w1, &w0, z[14]);
1552  ws[14] = w0 * p_dash;
1553  word3_muladd(&w2, &w1, &w0, ws[14], p[0]);
1554  w0 = w1; w1 = w2; w2 = 0;
1555  word3_muladd(&w2, &w1, &w0, ws[0], p[15]);
1556  word3_muladd(&w2, &w1, &w0, ws[1], p[14]);
1557  word3_muladd(&w2, &w1, &w0, ws[2], p[13]);
1558  word3_muladd(&w2, &w1, &w0, ws[3], p[12]);
1559  word3_muladd(&w2, &w1, &w0, ws[4], p[11]);
1560  word3_muladd(&w2, &w1, &w0, ws[5], p[10]);
1561  word3_muladd(&w2, &w1, &w0, ws[6], p[9]);
1562  word3_muladd(&w2, &w1, &w0, ws[7], p[8]);
1563  word3_muladd(&w2, &w1, &w0, ws[8], p[7]);
1564  word3_muladd(&w2, &w1, &w0, ws[9], p[6]);
1565  word3_muladd(&w2, &w1, &w0, ws[10], p[5]);
1566  word3_muladd(&w2, &w1, &w0, ws[11], p[4]);
1567  word3_muladd(&w2, &w1, &w0, ws[12], p[3]);
1568  word3_muladd(&w2, &w1, &w0, ws[13], p[2]);
1569  word3_muladd(&w2, &w1, &w0, ws[14], p[1]);
1570  word3_add(&w2, &w1, &w0, z[15]);
1571  ws[15] = w0 * p_dash;
1572  word3_muladd(&w2, &w1, &w0, ws[15], p[0]);
1573  w0 = w1; w1 = w2; w2 = 0;
1574  word3_muladd(&w2, &w1, &w0, ws[0], p[16]);
1575  word3_muladd(&w2, &w1, &w0, ws[1], p[15]);
1576  word3_muladd(&w2, &w1, &w0, ws[2], p[14]);
1577  word3_muladd(&w2, &w1, &w0, ws[3], p[13]);
1578  word3_muladd(&w2, &w1, &w0, ws[4], p[12]);
1579  word3_muladd(&w2, &w1, &w0, ws[5], p[11]);
1580  word3_muladd(&w2, &w1, &w0, ws[6], p[10]);
1581  word3_muladd(&w2, &w1, &w0, ws[7], p[9]);
1582  word3_muladd(&w2, &w1, &w0, ws[8], p[8]);
1583  word3_muladd(&w2, &w1, &w0, ws[9], p[7]);
1584  word3_muladd(&w2, &w1, &w0, ws[10], p[6]);
1585  word3_muladd(&w2, &w1, &w0, ws[11], p[5]);
1586  word3_muladd(&w2, &w1, &w0, ws[12], p[4]);
1587  word3_muladd(&w2, &w1, &w0, ws[13], p[3]);
1588  word3_muladd(&w2, &w1, &w0, ws[14], p[2]);
1589  word3_muladd(&w2, &w1, &w0, ws[15], p[1]);
1590  word3_add(&w2, &w1, &w0, z[16]);
1591  ws[16] = w0 * p_dash;
1592  word3_muladd(&w2, &w1, &w0, ws[16], p[0]);
1593  w0 = w1; w1 = w2; w2 = 0;
1594  word3_muladd(&w2, &w1, &w0, ws[0], p[17]);
1595  word3_muladd(&w2, &w1, &w0, ws[1], p[16]);
1596  word3_muladd(&w2, &w1, &w0, ws[2], p[15]);
1597  word3_muladd(&w2, &w1, &w0, ws[3], p[14]);
1598  word3_muladd(&w2, &w1, &w0, ws[4], p[13]);
1599  word3_muladd(&w2, &w1, &w0, ws[5], p[12]);
1600  word3_muladd(&w2, &w1, &w0, ws[6], p[11]);
1601  word3_muladd(&w2, &w1, &w0, ws[7], p[10]);
1602  word3_muladd(&w2, &w1, &w0, ws[8], p[9]);
1603  word3_muladd(&w2, &w1, &w0, ws[9], p[8]);
1604  word3_muladd(&w2, &w1, &w0, ws[10], p[7]);
1605  word3_muladd(&w2, &w1, &w0, ws[11], p[6]);
1606  word3_muladd(&w2, &w1, &w0, ws[12], p[5]);
1607  word3_muladd(&w2, &w1, &w0, ws[13], p[4]);
1608  word3_muladd(&w2, &w1, &w0, ws[14], p[3]);
1609  word3_muladd(&w2, &w1, &w0, ws[15], p[2]);
1610  word3_muladd(&w2, &w1, &w0, ws[16], p[1]);
1611  word3_add(&w2, &w1, &w0, z[17]);
1612  ws[17] = w0 * p_dash;
1613  word3_muladd(&w2, &w1, &w0, ws[17], p[0]);
1614  w0 = w1; w1 = w2; w2 = 0;
1615  word3_muladd(&w2, &w1, &w0, ws[0], p[18]);
1616  word3_muladd(&w2, &w1, &w0, ws[1], p[17]);
1617  word3_muladd(&w2, &w1, &w0, ws[2], p[16]);
1618  word3_muladd(&w2, &w1, &w0, ws[3], p[15]);
1619  word3_muladd(&w2, &w1, &w0, ws[4], p[14]);
1620  word3_muladd(&w2, &w1, &w0, ws[5], p[13]);
1621  word3_muladd(&w2, &w1, &w0, ws[6], p[12]);
1622  word3_muladd(&w2, &w1, &w0, ws[7], p[11]);
1623  word3_muladd(&w2, &w1, &w0, ws[8], p[10]);
1624  word3_muladd(&w2, &w1, &w0, ws[9], p[9]);
1625  word3_muladd(&w2, &w1, &w0, ws[10], p[8]);
1626  word3_muladd(&w2, &w1, &w0, ws[11], p[7]);
1627  word3_muladd(&w2, &w1, &w0, ws[12], p[6]);
1628  word3_muladd(&w2, &w1, &w0, ws[13], p[5]);
1629  word3_muladd(&w2, &w1, &w0, ws[14], p[4]);
1630  word3_muladd(&w2, &w1, &w0, ws[15], p[3]);
1631  word3_muladd(&w2, &w1, &w0, ws[16], p[2]);
1632  word3_muladd(&w2, &w1, &w0, ws[17], p[1]);
1633  word3_add(&w2, &w1, &w0, z[18]);
1634  ws[18] = w0 * p_dash;
1635  word3_muladd(&w2, &w1, &w0, ws[18], p[0]);
1636  w0 = w1; w1 = w2; w2 = 0;
1637  word3_muladd(&w2, &w1, &w0, ws[0], p[19]);
1638  word3_muladd(&w2, &w1, &w0, ws[1], p[18]);
1639  word3_muladd(&w2, &w1, &w0, ws[2], p[17]);
1640  word3_muladd(&w2, &w1, &w0, ws[3], p[16]);
1641  word3_muladd(&w2, &w1, &w0, ws[4], p[15]);
1642  word3_muladd(&w2, &w1, &w0, ws[5], p[14]);
1643  word3_muladd(&w2, &w1, &w0, ws[6], p[13]);
1644  word3_muladd(&w2, &w1, &w0, ws[7], p[12]);
1645  word3_muladd(&w2, &w1, &w0, ws[8], p[11]);
1646  word3_muladd(&w2, &w1, &w0, ws[9], p[10]);
1647  word3_muladd(&w2, &w1, &w0, ws[10], p[9]);
1648  word3_muladd(&w2, &w1, &w0, ws[11], p[8]);
1649  word3_muladd(&w2, &w1, &w0, ws[12], p[7]);
1650  word3_muladd(&w2, &w1, &w0, ws[13], p[6]);
1651  word3_muladd(&w2, &w1, &w0, ws[14], p[5]);
1652  word3_muladd(&w2, &w1, &w0, ws[15], p[4]);
1653  word3_muladd(&w2, &w1, &w0, ws[16], p[3]);
1654  word3_muladd(&w2, &w1, &w0, ws[17], p[2]);
1655  word3_muladd(&w2, &w1, &w0, ws[18], p[1]);
1656  word3_add(&w2, &w1, &w0, z[19]);
1657  ws[19] = w0 * p_dash;
1658  word3_muladd(&w2, &w1, &w0, ws[19], p[0]);
1659  w0 = w1; w1 = w2; w2 = 0;
1660  word3_muladd(&w2, &w1, &w0, ws[0], p[20]);
1661  word3_muladd(&w2, &w1, &w0, ws[1], p[19]);
1662  word3_muladd(&w2, &w1, &w0, ws[2], p[18]);
1663  word3_muladd(&w2, &w1, &w0, ws[3], p[17]);
1664  word3_muladd(&w2, &w1, &w0, ws[4], p[16]);
1665  word3_muladd(&w2, &w1, &w0, ws[5], p[15]);
1666  word3_muladd(&w2, &w1, &w0, ws[6], p[14]);
1667  word3_muladd(&w2, &w1, &w0, ws[7], p[13]);
1668  word3_muladd(&w2, &w1, &w0, ws[8], p[12]);
1669  word3_muladd(&w2, &w1, &w0, ws[9], p[11]);
1670  word3_muladd(&w2, &w1, &w0, ws[10], p[10]);
1671  word3_muladd(&w2, &w1, &w0, ws[11], p[9]);
1672  word3_muladd(&w2, &w1, &w0, ws[12], p[8]);
1673  word3_muladd(&w2, &w1, &w0, ws[13], p[7]);
1674  word3_muladd(&w2, &w1, &w0, ws[14], p[6]);
1675  word3_muladd(&w2, &w1, &w0, ws[15], p[5]);
1676  word3_muladd(&w2, &w1, &w0, ws[16], p[4]);
1677  word3_muladd(&w2, &w1, &w0, ws[17], p[3]);
1678  word3_muladd(&w2, &w1, &w0, ws[18], p[2]);
1679  word3_muladd(&w2, &w1, &w0, ws[19], p[1]);
1680  word3_add(&w2, &w1, &w0, z[20]);
1681  ws[20] = w0 * p_dash;
1682  word3_muladd(&w2, &w1, &w0, ws[20], p[0]);
1683  w0 = w1; w1 = w2; w2 = 0;
1684  word3_muladd(&w2, &w1, &w0, ws[0], p[21]);
1685  word3_muladd(&w2, &w1, &w0, ws[1], p[20]);
1686  word3_muladd(&w2, &w1, &w0, ws[2], p[19]);
1687  word3_muladd(&w2, &w1, &w0, ws[3], p[18]);
1688  word3_muladd(&w2, &w1, &w0, ws[4], p[17]);
1689  word3_muladd(&w2, &w1, &w0, ws[5], p[16]);
1690  word3_muladd(&w2, &w1, &w0, ws[6], p[15]);
1691  word3_muladd(&w2, &w1, &w0, ws[7], p[14]);
1692  word3_muladd(&w2, &w1, &w0, ws[8], p[13]);
1693  word3_muladd(&w2, &w1, &w0, ws[9], p[12]);
1694  word3_muladd(&w2, &w1, &w0, ws[10], p[11]);
1695  word3_muladd(&w2, &w1, &w0, ws[11], p[10]);
1696  word3_muladd(&w2, &w1, &w0, ws[12], p[9]);
1697  word3_muladd(&w2, &w1, &w0, ws[13], p[8]);
1698  word3_muladd(&w2, &w1, &w0, ws[14], p[7]);
1699  word3_muladd(&w2, &w1, &w0, ws[15], p[6]);
1700  word3_muladd(&w2, &w1, &w0, ws[16], p[5]);
1701  word3_muladd(&w2, &w1, &w0, ws[17], p[4]);
1702  word3_muladd(&w2, &w1, &w0, ws[18], p[3]);
1703  word3_muladd(&w2, &w1, &w0, ws[19], p[2]);
1704  word3_muladd(&w2, &w1, &w0, ws[20], p[1]);
1705  word3_add(&w2, &w1, &w0, z[21]);
1706  ws[21] = w0 * p_dash;
1707  word3_muladd(&w2, &w1, &w0, ws[21], p[0]);
1708  w0 = w1; w1 = w2; w2 = 0;
1709  word3_muladd(&w2, &w1, &w0, ws[0], p[22]);
1710  word3_muladd(&w2, &w1, &w0, ws[1], p[21]);
1711  word3_muladd(&w2, &w1, &w0, ws[2], p[20]);
1712  word3_muladd(&w2, &w1, &w0, ws[3], p[19]);
1713  word3_muladd(&w2, &w1, &w0, ws[4], p[18]);
1714  word3_muladd(&w2, &w1, &w0, ws[5], p[17]);
1715  word3_muladd(&w2, &w1, &w0, ws[6], p[16]);
1716  word3_muladd(&w2, &w1, &w0, ws[7], p[15]);
1717  word3_muladd(&w2, &w1, &w0, ws[8], p[14]);
1718  word3_muladd(&w2, &w1, &w0, ws[9], p[13]);
1719  word3_muladd(&w2, &w1, &w0, ws[10], p[12]);
1720  word3_muladd(&w2, &w1, &w0, ws[11], p[11]);
1721  word3_muladd(&w2, &w1, &w0, ws[12], p[10]);
1722  word3_muladd(&w2, &w1, &w0, ws[13], p[9]);
1723  word3_muladd(&w2, &w1, &w0, ws[14], p[8]);
1724  word3_muladd(&w2, &w1, &w0, ws[15], p[7]);
1725  word3_muladd(&w2, &w1, &w0, ws[16], p[6]);
1726  word3_muladd(&w2, &w1, &w0, ws[17], p[5]);
1727  word3_muladd(&w2, &w1, &w0, ws[18], p[4]);
1728  word3_muladd(&w2, &w1, &w0, ws[19], p[3]);
1729  word3_muladd(&w2, &w1, &w0, ws[20], p[2]);
1730  word3_muladd(&w2, &w1, &w0, ws[21], p[1]);
1731  word3_add(&w2, &w1, &w0, z[22]);
1732  ws[22] = w0 * p_dash;
1733  word3_muladd(&w2, &w1, &w0, ws[22], p[0]);
1734  w0 = w1; w1 = w2; w2 = 0;
1735  word3_muladd(&w2, &w1, &w0, ws[0], p[23]);
1736  word3_muladd(&w2, &w1, &w0, ws[1], p[22]);
1737  word3_muladd(&w2, &w1, &w0, ws[2], p[21]);
1738  word3_muladd(&w2, &w1, &w0, ws[3], p[20]);
1739  word3_muladd(&w2, &w1, &w0, ws[4], p[19]);
1740  word3_muladd(&w2, &w1, &w0, ws[5], p[18]);
1741  word3_muladd(&w2, &w1, &w0, ws[6], p[17]);
1742  word3_muladd(&w2, &w1, &w0, ws[7], p[16]);
1743  word3_muladd(&w2, &w1, &w0, ws[8], p[15]);
1744  word3_muladd(&w2, &w1, &w0, ws[9], p[14]);
1745  word3_muladd(&w2, &w1, &w0, ws[10], p[13]);
1746  word3_muladd(&w2, &w1, &w0, ws[11], p[12]);
1747  word3_muladd(&w2, &w1, &w0, ws[12], p[11]);
1748  word3_muladd(&w2, &w1, &w0, ws[13], p[10]);
1749  word3_muladd(&w2, &w1, &w0, ws[14], p[9]);
1750  word3_muladd(&w2, &w1, &w0, ws[15], p[8]);
1751  word3_muladd(&w2, &w1, &w0, ws[16], p[7]);
1752  word3_muladd(&w2, &w1, &w0, ws[17], p[6]);
1753  word3_muladd(&w2, &w1, &w0, ws[18], p[5]);
1754  word3_muladd(&w2, &w1, &w0, ws[19], p[4]);
1755  word3_muladd(&w2, &w1, &w0, ws[20], p[3]);
1756  word3_muladd(&w2, &w1, &w0, ws[21], p[2]);
1757  word3_muladd(&w2, &w1, &w0, ws[22], p[1]);
1758  word3_add(&w2, &w1, &w0, z[23]);
1759  ws[23] = w0 * p_dash;
1760  word3_muladd(&w2, &w1, &w0, ws[23], p[0]);
1761  w0 = w1; w1 = w2; w2 = 0;
1762  word3_muladd(&w2, &w1, &w0, ws[0], p[24]);
1763  word3_muladd(&w2, &w1, &w0, ws[1], p[23]);
1764  word3_muladd(&w2, &w1, &w0, ws[2], p[22]);
1765  word3_muladd(&w2, &w1, &w0, ws[3], p[21]);
1766  word3_muladd(&w2, &w1, &w0, ws[4], p[20]);
1767  word3_muladd(&w2, &w1, &w0, ws[5], p[19]);
1768  word3_muladd(&w2, &w1, &w0, ws[6], p[18]);
1769  word3_muladd(&w2, &w1, &w0, ws[7], p[17]);
1770  word3_muladd(&w2, &w1, &w0, ws[8], p[16]);
1771  word3_muladd(&w2, &w1, &w0, ws[9], p[15]);
1772  word3_muladd(&w2, &w1, &w0, ws[10], p[14]);
1773  word3_muladd(&w2, &w1, &w0, ws[11], p[13]);
1774  word3_muladd(&w2, &w1, &w0, ws[12], p[12]);
1775  word3_muladd(&w2, &w1, &w0, ws[13], p[11]);
1776  word3_muladd(&w2, &w1, &w0, ws[14], p[10]);
1777  word3_muladd(&w2, &w1, &w0, ws[15], p[9]);
1778  word3_muladd(&w2, &w1, &w0, ws[16], p[8]);
1779  word3_muladd(&w2, &w1, &w0, ws[17], p[7]);
1780  word3_muladd(&w2, &w1, &w0, ws[18], p[6]);
1781  word3_muladd(&w2, &w1, &w0, ws[19], p[5]);
1782  word3_muladd(&w2, &w1, &w0, ws[20], p[4]);
1783  word3_muladd(&w2, &w1, &w0, ws[21], p[3]);
1784  word3_muladd(&w2, &w1, &w0, ws[22], p[2]);
1785  word3_muladd(&w2, &w1, &w0, ws[23], p[1]);
1786  word3_add(&w2, &w1, &w0, z[24]);
1787  ws[24] = w0 * p_dash;
1788  word3_muladd(&w2, &w1, &w0, ws[24], p[0]);
1789  w0 = w1; w1 = w2; w2 = 0;
1790  word3_muladd(&w2, &w1, &w0, ws[0], p[25]);
1791  word3_muladd(&w2, &w1, &w0, ws[1], p[24]);
1792  word3_muladd(&w2, &w1, &w0, ws[2], p[23]);
1793  word3_muladd(&w2, &w1, &w0, ws[3], p[22]);
1794  word3_muladd(&w2, &w1, &w0, ws[4], p[21]);
1795  word3_muladd(&w2, &w1, &w0, ws[5], p[20]);
1796  word3_muladd(&w2, &w1, &w0, ws[6], p[19]);
1797  word3_muladd(&w2, &w1, &w0, ws[7], p[18]);
1798  word3_muladd(&w2, &w1, &w0, ws[8], p[17]);
1799  word3_muladd(&w2, &w1, &w0, ws[9], p[16]);
1800  word3_muladd(&w2, &w1, &w0, ws[10], p[15]);
1801  word3_muladd(&w2, &w1, &w0, ws[11], p[14]);
1802  word3_muladd(&w2, &w1, &w0, ws[12], p[13]);
1803  word3_muladd(&w2, &w1, &w0, ws[13], p[12]);
1804  word3_muladd(&w2, &w1, &w0, ws[14], p[11]);
1805  word3_muladd(&w2, &w1, &w0, ws[15], p[10]);
1806  word3_muladd(&w2, &w1, &w0, ws[16], p[9]);
1807  word3_muladd(&w2, &w1, &w0, ws[17], p[8]);
1808  word3_muladd(&w2, &w1, &w0, ws[18], p[7]);
1809  word3_muladd(&w2, &w1, &w0, ws[19], p[6]);
1810  word3_muladd(&w2, &w1, &w0, ws[20], p[5]);
1811  word3_muladd(&w2, &w1, &w0, ws[21], p[4]);
1812  word3_muladd(&w2, &w1, &w0, ws[22], p[3]);
1813  word3_muladd(&w2, &w1, &w0, ws[23], p[2]);
1814  word3_muladd(&w2, &w1, &w0, ws[24], p[1]);
1815  word3_add(&w2, &w1, &w0, z[25]);
1816  ws[25] = w0 * p_dash;
1817  word3_muladd(&w2, &w1, &w0, ws[25], p[0]);
1818  w0 = w1; w1 = w2; w2 = 0;
1819  word3_muladd(&w2, &w1, &w0, ws[0], p[26]);
1820  word3_muladd(&w2, &w1, &w0, ws[1], p[25]);
1821  word3_muladd(&w2, &w1, &w0, ws[2], p[24]);
1822  word3_muladd(&w2, &w1, &w0, ws[3], p[23]);
1823  word3_muladd(&w2, &w1, &w0, ws[4], p[22]);
1824  word3_muladd(&w2, &w1, &w0, ws[5], p[21]);
1825  word3_muladd(&w2, &w1, &w0, ws[6], p[20]);
1826  word3_muladd(&w2, &w1, &w0, ws[7], p[19]);
1827  word3_muladd(&w2, &w1, &w0, ws[8], p[18]);
1828  word3_muladd(&w2, &w1, &w0, ws[9], p[17]);
1829  word3_muladd(&w2, &w1, &w0, ws[10], p[16]);
1830  word3_muladd(&w2, &w1, &w0, ws[11], p[15]);
1831  word3_muladd(&w2, &w1, &w0, ws[12], p[14]);
1832  word3_muladd(&w2, &w1, &w0, ws[13], p[13]);
1833  word3_muladd(&w2, &w1, &w0, ws[14], p[12]);
1834  word3_muladd(&w2, &w1, &w0, ws[15], p[11]);
1835  word3_muladd(&w2, &w1, &w0, ws[16], p[10]);
1836  word3_muladd(&w2, &w1, &w0, ws[17], p[9]);
1837  word3_muladd(&w2, &w1, &w0, ws[18], p[8]);
1838  word3_muladd(&w2, &w1, &w0, ws[19], p[7]);
1839  word3_muladd(&w2, &w1, &w0, ws[20], p[6]);
1840  word3_muladd(&w2, &w1, &w0, ws[21], p[5]);
1841  word3_muladd(&w2, &w1, &w0, ws[22], p[4]);
1842  word3_muladd(&w2, &w1, &w0, ws[23], p[3]);
1843  word3_muladd(&w2, &w1, &w0, ws[24], p[2]);
1844  word3_muladd(&w2, &w1, &w0, ws[25], p[1]);
1845  word3_add(&w2, &w1, &w0, z[26]);
1846  ws[26] = w0 * p_dash;
1847  word3_muladd(&w2, &w1, &w0, ws[26], p[0]);
1848  w0 = w1; w1 = w2; w2 = 0;
1849  word3_muladd(&w2, &w1, &w0, ws[0], p[27]);
1850  word3_muladd(&w2, &w1, &w0, ws[1], p[26]);
1851  word3_muladd(&w2, &w1, &w0, ws[2], p[25]);
1852  word3_muladd(&w2, &w1, &w0, ws[3], p[24]);
1853  word3_muladd(&w2, &w1, &w0, ws[4], p[23]);
1854  word3_muladd(&w2, &w1, &w0, ws[5], p[22]);
1855  word3_muladd(&w2, &w1, &w0, ws[6], p[21]);
1856  word3_muladd(&w2, &w1, &w0, ws[7], p[20]);
1857  word3_muladd(&w2, &w1, &w0, ws[8], p[19]);
1858  word3_muladd(&w2, &w1, &w0, ws[9], p[18]);
1859  word3_muladd(&w2, &w1, &w0, ws[10], p[17]);
1860  word3_muladd(&w2, &w1, &w0, ws[11], p[16]);
1861  word3_muladd(&w2, &w1, &w0, ws[12], p[15]);
1862  word3_muladd(&w2, &w1, &w0, ws[13], p[14]);
1863  word3_muladd(&w2, &w1, &w0, ws[14], p[13]);
1864  word3_muladd(&w2, &w1, &w0, ws[15], p[12]);
1865  word3_muladd(&w2, &w1, &w0, ws[16], p[11]);
1866  word3_muladd(&w2, &w1, &w0, ws[17], p[10]);
1867  word3_muladd(&w2, &w1, &w0, ws[18], p[9]);
1868  word3_muladd(&w2, &w1, &w0, ws[19], p[8]);
1869  word3_muladd(&w2, &w1, &w0, ws[20], p[7]);
1870  word3_muladd(&w2, &w1, &w0, ws[21], p[6]);
1871  word3_muladd(&w2, &w1, &w0, ws[22], p[5]);
1872  word3_muladd(&w2, &w1, &w0, ws[23], p[4]);
1873  word3_muladd(&w2, &w1, &w0, ws[24], p[3]);
1874  word3_muladd(&w2, &w1, &w0, ws[25], p[2]);
1875  word3_muladd(&w2, &w1, &w0, ws[26], p[1]);
1876  word3_add(&w2, &w1, &w0, z[27]);
1877  ws[27] = w0 * p_dash;
1878  word3_muladd(&w2, &w1, &w0, ws[27], p[0]);
1879  w0 = w1; w1 = w2; w2 = 0;
1880  word3_muladd(&w2, &w1, &w0, ws[0], p[28]);
1881  word3_muladd(&w2, &w1, &w0, ws[1], p[27]);
1882  word3_muladd(&w2, &w1, &w0, ws[2], p[26]);
1883  word3_muladd(&w2, &w1, &w0, ws[3], p[25]);
1884  word3_muladd(&w2, &w1, &w0, ws[4], p[24]);
1885  word3_muladd(&w2, &w1, &w0, ws[5], p[23]);
1886  word3_muladd(&w2, &w1, &w0, ws[6], p[22]);
1887  word3_muladd(&w2, &w1, &w0, ws[7], p[21]);
1888  word3_muladd(&w2, &w1, &w0, ws[8], p[20]);
1889  word3_muladd(&w2, &w1, &w0, ws[9], p[19]);
1890  word3_muladd(&w2, &w1, &w0, ws[10], p[18]);
1891  word3_muladd(&w2, &w1, &w0, ws[11], p[17]);
1892  word3_muladd(&w2, &w1, &w0, ws[12], p[16]);
1893  word3_muladd(&w2, &w1, &w0, ws[13], p[15]);
1894  word3_muladd(&w2, &w1, &w0, ws[14], p[14]);
1895  word3_muladd(&w2, &w1, &w0, ws[15], p[13]);
1896  word3_muladd(&w2, &w1, &w0, ws[16], p[12]);
1897  word3_muladd(&w2, &w1, &w0, ws[17], p[11]);
1898  word3_muladd(&w2, &w1, &w0, ws[18], p[10]);
1899  word3_muladd(&w2, &w1, &w0, ws[19], p[9]);
1900  word3_muladd(&w2, &w1, &w0, ws[20], p[8]);
1901  word3_muladd(&w2, &w1, &w0, ws[21], p[7]);
1902  word3_muladd(&w2, &w1, &w0, ws[22], p[6]);
1903  word3_muladd(&w2, &w1, &w0, ws[23], p[5]);
1904  word3_muladd(&w2, &w1, &w0, ws[24], p[4]);
1905  word3_muladd(&w2, &w1, &w0, ws[25], p[3]);
1906  word3_muladd(&w2, &w1, &w0, ws[26], p[2]);
1907  word3_muladd(&w2, &w1, &w0, ws[27], p[1]);
1908  word3_add(&w2, &w1, &w0, z[28]);
1909  ws[28] = w0 * p_dash;
1910  word3_muladd(&w2, &w1, &w0, ws[28], p[0]);
1911  w0 = w1; w1 = w2; w2 = 0;
1912  word3_muladd(&w2, &w1, &w0, ws[0], p[29]);
1913  word3_muladd(&w2, &w1, &w0, ws[1], p[28]);
1914  word3_muladd(&w2, &w1, &w0, ws[2], p[27]);
1915  word3_muladd(&w2, &w1, &w0, ws[3], p[26]);
1916  word3_muladd(&w2, &w1, &w0, ws[4], p[25]);
1917  word3_muladd(&w2, &w1, &w0, ws[5], p[24]);
1918  word3_muladd(&w2, &w1, &w0, ws[6], p[23]);
1919  word3_muladd(&w2, &w1, &w0, ws[7], p[22]);
1920  word3_muladd(&w2, &w1, &w0, ws[8], p[21]);
1921  word3_muladd(&w2, &w1, &w0, ws[9], p[20]);
1922  word3_muladd(&w2, &w1, &w0, ws[10], p[19]);
1923  word3_muladd(&w2, &w1, &w0, ws[11], p[18]);
1924  word3_muladd(&w2, &w1, &w0, ws[12], p[17]);
1925  word3_muladd(&w2, &w1, &w0, ws[13], p[16]);
1926  word3_muladd(&w2, &w1, &w0, ws[14], p[15]);
1927  word3_muladd(&w2, &w1, &w0, ws[15], p[14]);
1928  word3_muladd(&w2, &w1, &w0, ws[16], p[13]);
1929  word3_muladd(&w2, &w1, &w0, ws[17], p[12]);
1930  word3_muladd(&w2, &w1, &w0, ws[18], p[11]);
1931  word3_muladd(&w2, &w1, &w0, ws[19], p[10]);
1932  word3_muladd(&w2, &w1, &w0, ws[20], p[9]);
1933  word3_muladd(&w2, &w1, &w0, ws[21], p[8]);
1934  word3_muladd(&w2, &w1, &w0, ws[22], p[7]);
1935  word3_muladd(&w2, &w1, &w0, ws[23], p[6]);
1936  word3_muladd(&w2, &w1, &w0, ws[24], p[5]);
1937  word3_muladd(&w2, &w1, &w0, ws[25], p[4]);
1938  word3_muladd(&w2, &w1, &w0, ws[26], p[3]);
1939  word3_muladd(&w2, &w1, &w0, ws[27], p[2]);
1940  word3_muladd(&w2, &w1, &w0, ws[28], p[1]);
1941  word3_add(&w2, &w1, &w0, z[29]);
1942  ws[29] = w0 * p_dash;
1943  word3_muladd(&w2, &w1, &w0, ws[29], p[0]);
1944  w0 = w1; w1 = w2; w2 = 0;
1945  word3_muladd(&w2, &w1, &w0, ws[0], p[30]);
1946  word3_muladd(&w2, &w1, &w0, ws[1], p[29]);
1947  word3_muladd(&w2, &w1, &w0, ws[2], p[28]);
1948  word3_muladd(&w2, &w1, &w0, ws[3], p[27]);
1949  word3_muladd(&w2, &w1, &w0, ws[4], p[26]);
1950  word3_muladd(&w2, &w1, &w0, ws[5], p[25]);
1951  word3_muladd(&w2, &w1, &w0, ws[6], p[24]);
1952  word3_muladd(&w2, &w1, &w0, ws[7], p[23]);
1953  word3_muladd(&w2, &w1, &w0, ws[8], p[22]);
1954  word3_muladd(&w2, &w1, &w0, ws[9], p[21]);
1955  word3_muladd(&w2, &w1, &w0, ws[10], p[20]);
1956  word3_muladd(&w2, &w1, &w0, ws[11], p[19]);
1957  word3_muladd(&w2, &w1, &w0, ws[12], p[18]);
1958  word3_muladd(&w2, &w1, &w0, ws[13], p[17]);
1959  word3_muladd(&w2, &w1, &w0, ws[14], p[16]);
1960  word3_muladd(&w2, &w1, &w0, ws[15], p[15]);
1961  word3_muladd(&w2, &w1, &w0, ws[16], p[14]);
1962  word3_muladd(&w2, &w1, &w0, ws[17], p[13]);
1963  word3_muladd(&w2, &w1, &w0, ws[18], p[12]);
1964  word3_muladd(&w2, &w1, &w0, ws[19], p[11]);
1965  word3_muladd(&w2, &w1, &w0, ws[20], p[10]);
1966  word3_muladd(&w2, &w1, &w0, ws[21], p[9]);
1967  word3_muladd(&w2, &w1, &w0, ws[22], p[8]);
1968  word3_muladd(&w2, &w1, &w0, ws[23], p[7]);
1969  word3_muladd(&w2, &w1, &w0, ws[24], p[6]);
1970  word3_muladd(&w2, &w1, &w0, ws[25], p[5]);
1971  word3_muladd(&w2, &w1, &w0, ws[26], p[4]);
1972  word3_muladd(&w2, &w1, &w0, ws[27], p[3]);
1973  word3_muladd(&w2, &w1, &w0, ws[28], p[2]);
1974  word3_muladd(&w2, &w1, &w0, ws[29], p[1]);
1975  word3_add(&w2, &w1, &w0, z[30]);
1976  ws[30] = w0 * p_dash;
1977  word3_muladd(&w2, &w1, &w0, ws[30], p[0]);
1978  w0 = w1; w1 = w2; w2 = 0;
1979  word3_muladd(&w2, &w1, &w0, ws[0], p[31]);
1980  word3_muladd(&w2, &w1, &w0, ws[1], p[30]);
1981  word3_muladd(&w2, &w1, &w0, ws[2], p[29]);
1982  word3_muladd(&w2, &w1, &w0, ws[3], p[28]);
1983  word3_muladd(&w2, &w1, &w0, ws[4], p[27]);
1984  word3_muladd(&w2, &w1, &w0, ws[5], p[26]);
1985  word3_muladd(&w2, &w1, &w0, ws[6], p[25]);
1986  word3_muladd(&w2, &w1, &w0, ws[7], p[24]);
1987  word3_muladd(&w2, &w1, &w0, ws[8], p[23]);
1988  word3_muladd(&w2, &w1, &w0, ws[9], p[22]);
1989  word3_muladd(&w2, &w1, &w0, ws[10], p[21]);
1990  word3_muladd(&w2, &w1, &w0, ws[11], p[20]);
1991  word3_muladd(&w2, &w1, &w0, ws[12], p[19]);
1992  word3_muladd(&w2, &w1, &w0, ws[13], p[18]);
1993  word3_muladd(&w2, &w1, &w0, ws[14], p[17]);
1994  word3_muladd(&w2, &w1, &w0, ws[15], p[16]);
1995  word3_muladd(&w2, &w1, &w0, ws[16], p[15]);
1996  word3_muladd(&w2, &w1, &w0, ws[17], p[14]);
1997  word3_muladd(&w2, &w1, &w0, ws[18], p[13]);
1998  word3_muladd(&w2, &w1, &w0, ws[19], p[12]);
1999  word3_muladd(&w2, &w1, &w0, ws[20], p[11]);
2000  word3_muladd(&w2, &w1, &w0, ws[21], p[10]);
2001  word3_muladd(&w2, &w1, &w0, ws[22], p[9]);
2002  word3_muladd(&w2, &w1, &w0, ws[23], p[8]);
2003  word3_muladd(&w2, &w1, &w0, ws[24], p[7]);
2004  word3_muladd(&w2, &w1, &w0, ws[25], p[6]);
2005  word3_muladd(&w2, &w1, &w0, ws[26], p[5]);
2006  word3_muladd(&w2, &w1, &w0, ws[27], p[4]);
2007  word3_muladd(&w2, &w1, &w0, ws[28], p[3]);
2008  word3_muladd(&w2, &w1, &w0, ws[29], p[2]);
2009  word3_muladd(&w2, &w1, &w0, ws[30], p[1]);
2010  word3_add(&w2, &w1, &w0, z[31]);
2011  ws[31] = w0 * p_dash;
2012  word3_muladd(&w2, &w1, &w0, ws[31], p[0]);
2013  w0 = w1; w1 = w2; w2 = 0;
2014  word3_muladd(&w2, &w1, &w0, ws[1], p[31]);
2015  word3_muladd(&w2, &w1, &w0, ws[2], p[30]);
2016  word3_muladd(&w2, &w1, &w0, ws[3], p[29]);
2017  word3_muladd(&w2, &w1, &w0, ws[4], p[28]);
2018  word3_muladd(&w2, &w1, &w0, ws[5], p[27]);
2019  word3_muladd(&w2, &w1, &w0, ws[6], p[26]);
2020  word3_muladd(&w2, &w1, &w0, ws[7], p[25]);
2021  word3_muladd(&w2, &w1, &w0, ws[8], p[24]);
2022  word3_muladd(&w2, &w1, &w0, ws[9], p[23]);
2023  word3_muladd(&w2, &w1, &w0, ws[10], p[22]);
2024  word3_muladd(&w2, &w1, &w0, ws[11], p[21]);
2025  word3_muladd(&w2, &w1, &w0, ws[12], p[20]);
2026  word3_muladd(&w2, &w1, &w0, ws[13], p[19]);
2027  word3_muladd(&w2, &w1, &w0, ws[14], p[18]);
2028  word3_muladd(&w2, &w1, &w0, ws[15], p[17]);
2029  word3_muladd(&w2, &w1, &w0, ws[16], p[16]);
2030  word3_muladd(&w2, &w1, &w0, ws[17], p[15]);
2031  word3_muladd(&w2, &w1, &w0, ws[18], p[14]);
2032  word3_muladd(&w2, &w1, &w0, ws[19], p[13]);
2033  word3_muladd(&w2, &w1, &w0, ws[20], p[12]);
2034  word3_muladd(&w2, &w1, &w0, ws[21], p[11]);
2035  word3_muladd(&w2, &w1, &w0, ws[22], p[10]);
2036  word3_muladd(&w2, &w1, &w0, ws[23], p[9]);
2037  word3_muladd(&w2, &w1, &w0, ws[24], p[8]);
2038  word3_muladd(&w2, &w1, &w0, ws[25], p[7]);
2039  word3_muladd(&w2, &w1, &w0, ws[26], p[6]);
2040  word3_muladd(&w2, &w1, &w0, ws[27], p[5]);
2041  word3_muladd(&w2, &w1, &w0, ws[28], p[4]);
2042  word3_muladd(&w2, &w1, &w0, ws[29], p[3]);
2043  word3_muladd(&w2, &w1, &w0, ws[30], p[2]);
2044  word3_muladd(&w2, &w1, &w0, ws[31], p[1]);
2045  word3_add(&w2, &w1, &w0, z[32]);
2046  ws[0] = w0;
2047  w0 = w1; w1 = w2; w2 = 0;
2048  word3_muladd(&w2, &w1, &w0, ws[2], p[31]);
2049  word3_muladd(&w2, &w1, &w0, ws[3], p[30]);
2050  word3_muladd(&w2, &w1, &w0, ws[4], p[29]);
2051  word3_muladd(&w2, &w1, &w0, ws[5], p[28]);
2052  word3_muladd(&w2, &w1, &w0, ws[6], p[27]);
2053  word3_muladd(&w2, &w1, &w0, ws[7], p[26]);
2054  word3_muladd(&w2, &w1, &w0, ws[8], p[25]);
2055  word3_muladd(&w2, &w1, &w0, ws[9], p[24]);
2056  word3_muladd(&w2, &w1, &w0, ws[10], p[23]);
2057  word3_muladd(&w2, &w1, &w0, ws[11], p[22]);
2058  word3_muladd(&w2, &w1, &w0, ws[12], p[21]);
2059  word3_muladd(&w2, &w1, &w0, ws[13], p[20]);
2060  word3_muladd(&w2, &w1, &w0, ws[14], p[19]);
2061  word3_muladd(&w2, &w1, &w0, ws[15], p[18]);
2062  word3_muladd(&w2, &w1, &w0, ws[16], p[17]);
2063  word3_muladd(&w2, &w1, &w0, ws[17], p[16]);
2064  word3_muladd(&w2, &w1, &w0, ws[18], p[15]);
2065  word3_muladd(&w2, &w1, &w0, ws[19], p[14]);
2066  word3_muladd(&w2, &w1, &w0, ws[20], p[13]);
2067  word3_muladd(&w2, &w1, &w0, ws[21], p[12]);
2068  word3_muladd(&w2, &w1, &w0, ws[22], p[11]);
2069  word3_muladd(&w2, &w1, &w0, ws[23], p[10]);
2070  word3_muladd(&w2, &w1, &w0, ws[24], p[9]);
2071  word3_muladd(&w2, &w1, &w0, ws[25], p[8]);
2072  word3_muladd(&w2, &w1, &w0, ws[26], p[7]);
2073  word3_muladd(&w2, &w1, &w0, ws[27], p[6]);
2074  word3_muladd(&w2, &w1, &w0, ws[28], p[5]);
2075  word3_muladd(&w2, &w1, &w0, ws[29], p[4]);
2076  word3_muladd(&w2, &w1, &w0, ws[30], p[3]);
2077  word3_muladd(&w2, &w1, &w0, ws[31], p[2]);
2078  word3_add(&w2, &w1, &w0, z[33]);
2079  ws[1] = w0;
2080  w0 = w1; w1 = w2; w2 = 0;
2081  word3_muladd(&w2, &w1, &w0, ws[3], p[31]);
2082  word3_muladd(&w2, &w1, &w0, ws[4], p[30]);
2083  word3_muladd(&w2, &w1, &w0, ws[5], p[29]);
2084  word3_muladd(&w2, &w1, &w0, ws[6], p[28]);
2085  word3_muladd(&w2, &w1, &w0, ws[7], p[27]);
2086  word3_muladd(&w2, &w1, &w0, ws[8], p[26]);
2087  word3_muladd(&w2, &w1, &w0, ws[9], p[25]);
2088  word3_muladd(&w2, &w1, &w0, ws[10], p[24]);
2089  word3_muladd(&w2, &w1, &w0, ws[11], p[23]);
2090  word3_muladd(&w2, &w1, &w0, ws[12], p[22]);
2091  word3_muladd(&w2, &w1, &w0, ws[13], p[21]);
2092  word3_muladd(&w2, &w1, &w0, ws[14], p[20]);
2093  word3_muladd(&w2, &w1, &w0, ws[15], p[19]);
2094  word3_muladd(&w2, &w1, &w0, ws[16], p[18]);
2095  word3_muladd(&w2, &w1, &w0, ws[17], p[17]);
2096  word3_muladd(&w2, &w1, &w0, ws[18], p[16]);
2097  word3_muladd(&w2, &w1, &w0, ws[19], p[15]);
2098  word3_muladd(&w2, &w1, &w0, ws[20], p[14]);
2099  word3_muladd(&w2, &w1, &w0, ws[21], p[13]);
2100  word3_muladd(&w2, &w1, &w0, ws[22], p[12]);
2101  word3_muladd(&w2, &w1, &w0, ws[23], p[11]);
2102  word3_muladd(&w2, &w1, &w0, ws[24], p[10]);
2103  word3_muladd(&w2, &w1, &w0, ws[25], p[9]);
2104  word3_muladd(&w2, &w1, &w0, ws[26], p[8]);
2105  word3_muladd(&w2, &w1, &w0, ws[27], p[7]);
2106  word3_muladd(&w2, &w1, &w0, ws[28], p[6]);
2107  word3_muladd(&w2, &w1, &w0, ws[29], p[5]);
2108  word3_muladd(&w2, &w1, &w0, ws[30], p[4]);
2109  word3_muladd(&w2, &w1, &w0, ws[31], p[3]);
2110  word3_add(&w2, &w1, &w0, z[34]);
2111  ws[2] = w0;
2112  w0 = w1; w1 = w2; w2 = 0;
2113  word3_muladd(&w2, &w1, &w0, ws[4], p[31]);
2114  word3_muladd(&w2, &w1, &w0, ws[5], p[30]);
2115  word3_muladd(&w2, &w1, &w0, ws[6], p[29]);
2116  word3_muladd(&w2, &w1, &w0, ws[7], p[28]);
2117  word3_muladd(&w2, &w1, &w0, ws[8], p[27]);
2118  word3_muladd(&w2, &w1, &w0, ws[9], p[26]);
2119  word3_muladd(&w2, &w1, &w0, ws[10], p[25]);
2120  word3_muladd(&w2, &w1, &w0, ws[11], p[24]);
2121  word3_muladd(&w2, &w1, &w0, ws[12], p[23]);
2122  word3_muladd(&w2, &w1, &w0, ws[13], p[22]);
2123  word3_muladd(&w2, &w1, &w0, ws[14], p[21]);
2124  word3_muladd(&w2, &w1, &w0, ws[15], p[20]);
2125  word3_muladd(&w2, &w1, &w0, ws[16], p[19]);
2126  word3_muladd(&w2, &w1, &w0, ws[17], p[18]);
2127  word3_muladd(&w2, &w1, &w0, ws[18], p[17]);
2128  word3_muladd(&w2, &w1, &w0, ws[19], p[16]);
2129  word3_muladd(&w2, &w1, &w0, ws[20], p[15]);
2130  word3_muladd(&w2, &w1, &w0, ws[21], p[14]);
2131  word3_muladd(&w2, &w1, &w0, ws[22], p[13]);
2132  word3_muladd(&w2, &w1, &w0, ws[23], p[12]);
2133  word3_muladd(&w2, &w1, &w0, ws[24], p[11]);
2134  word3_muladd(&w2, &w1, &w0, ws[25], p[10]);
2135  word3_muladd(&w2, &w1, &w0, ws[26], p[9]);
2136  word3_muladd(&w2, &w1, &w0, ws[27], p[8]);
2137  word3_muladd(&w2, &w1, &w0, ws[28], p[7]);
2138  word3_muladd(&w2, &w1, &w0, ws[29], p[6]);
2139  word3_muladd(&w2, &w1, &w0, ws[30], p[5]);
2140  word3_muladd(&w2, &w1, &w0, ws[31], p[4]);
2141  word3_add(&w2, &w1, &w0, z[35]);
2142  ws[3] = w0;
2143  w0 = w1; w1 = w2; w2 = 0;
2144  word3_muladd(&w2, &w1, &w0, ws[5], p[31]);
2145  word3_muladd(&w2, &w1, &w0, ws[6], p[30]);
2146  word3_muladd(&w2, &w1, &w0, ws[7], p[29]);
2147  word3_muladd(&w2, &w1, &w0, ws[8], p[28]);
2148  word3_muladd(&w2, &w1, &w0, ws[9], p[27]);
2149  word3_muladd(&w2, &w1, &w0, ws[10], p[26]);
2150  word3_muladd(&w2, &w1, &w0, ws[11], p[25]);
2151  word3_muladd(&w2, &w1, &w0, ws[12], p[24]);
2152  word3_muladd(&w2, &w1, &w0, ws[13], p[23]);
2153  word3_muladd(&w2, &w1, &w0, ws[14], p[22]);
2154  word3_muladd(&w2, &w1, &w0, ws[15], p[21]);
2155  word3_muladd(&w2, &w1, &w0, ws[16], p[20]);
2156  word3_muladd(&w2, &w1, &w0, ws[17], p[19]);
2157  word3_muladd(&w2, &w1, &w0, ws[18], p[18]);
2158  word3_muladd(&w2, &w1, &w0, ws[19], p[17]);
2159  word3_muladd(&w2, &w1, &w0, ws[20], p[16]);
2160  word3_muladd(&w2, &w1, &w0, ws[21], p[15]);
2161  word3_muladd(&w2, &w1, &w0, ws[22], p[14]);
2162  word3_muladd(&w2, &w1, &w0, ws[23], p[13]);
2163  word3_muladd(&w2, &w1, &w0, ws[24], p[12]);
2164  word3_muladd(&w2, &w1, &w0, ws[25], p[11]);
2165  word3_muladd(&w2, &w1, &w0, ws[26], p[10]);
2166  word3_muladd(&w2, &w1, &w0, ws[27], p[9]);
2167  word3_muladd(&w2, &w1, &w0, ws[28], p[8]);
2168  word3_muladd(&w2, &w1, &w0, ws[29], p[7]);
2169  word3_muladd(&w2, &w1, &w0, ws[30], p[6]);
2170  word3_muladd(&w2, &w1, &w0, ws[31], p[5]);
2171  word3_add(&w2, &w1, &w0, z[36]);
2172  ws[4] = w0;
2173  w0 = w1; w1 = w2; w2 = 0;
2174  word3_muladd(&w2, &w1, &w0, ws[6], p[31]);
2175  word3_muladd(&w2, &w1, &w0, ws[7], p[30]);
2176  word3_muladd(&w2, &w1, &w0, ws[8], p[29]);
2177  word3_muladd(&w2, &w1, &w0, ws[9], p[28]);
2178  word3_muladd(&w2, &w1, &w0, ws[10], p[27]);
2179  word3_muladd(&w2, &w1, &w0, ws[11], p[26]);
2180  word3_muladd(&w2, &w1, &w0, ws[12], p[25]);
2181  word3_muladd(&w2, &w1, &w0, ws[13], p[24]);
2182  word3_muladd(&w2, &w1, &w0, ws[14], p[23]);
2183  word3_muladd(&w2, &w1, &w0, ws[15], p[22]);
2184  word3_muladd(&w2, &w1, &w0, ws[16], p[21]);
2185  word3_muladd(&w2, &w1, &w0, ws[17], p[20]);
2186  word3_muladd(&w2, &w1, &w0, ws[18], p[19]);
2187  word3_muladd(&w2, &w1, &w0, ws[19], p[18]);
2188  word3_muladd(&w2, &w1, &w0, ws[20], p[17]);
2189  word3_muladd(&w2, &w1, &w0, ws[21], p[16]);
2190  word3_muladd(&w2, &w1, &w0, ws[22], p[15]);
2191  word3_muladd(&w2, &w1, &w0, ws[23], p[14]);
2192  word3_muladd(&w2, &w1, &w0, ws[24], p[13]);
2193  word3_muladd(&w2, &w1, &w0, ws[25], p[12]);
2194  word3_muladd(&w2, &w1, &w0, ws[26], p[11]);
2195  word3_muladd(&w2, &w1, &w0, ws[27], p[10]);
2196  word3_muladd(&w2, &w1, &w0, ws[28], p[9]);
2197  word3_muladd(&w2, &w1, &w0, ws[29], p[8]);
2198  word3_muladd(&w2, &w1, &w0, ws[30], p[7]);
2199  word3_muladd(&w2, &w1, &w0, ws[31], p[6]);
2200  word3_add(&w2, &w1, &w0, z[37]);
2201  ws[5] = w0;
2202  w0 = w1; w1 = w2; w2 = 0;
2203  word3_muladd(&w2, &w1, &w0, ws[7], p[31]);
2204  word3_muladd(&w2, &w1, &w0, ws[8], p[30]);
2205  word3_muladd(&w2, &w1, &w0, ws[9], p[29]);
2206  word3_muladd(&w2, &w1, &w0, ws[10], p[28]);
2207  word3_muladd(&w2, &w1, &w0, ws[11], p[27]);
2208  word3_muladd(&w2, &w1, &w0, ws[12], p[26]);
2209  word3_muladd(&w2, &w1, &w0, ws[13], p[25]);
2210  word3_muladd(&w2, &w1, &w0, ws[14], p[24]);
2211  word3_muladd(&w2, &w1, &w0, ws[15], p[23]);
2212  word3_muladd(&w2, &w1, &w0, ws[16], p[22]);
2213  word3_muladd(&w2, &w1, &w0, ws[17], p[21]);
2214  word3_muladd(&w2, &w1, &w0, ws[18], p[20]);
2215  word3_muladd(&w2, &w1, &w0, ws[19], p[19]);
2216  word3_muladd(&w2, &w1, &w0, ws[20], p[18]);
2217  word3_muladd(&w2, &w1, &w0, ws[21], p[17]);
2218  word3_muladd(&w2, &w1, &w0, ws[22], p[16]);
2219  word3_muladd(&w2, &w1, &w0, ws[23], p[15]);
2220  word3_muladd(&w2, &w1, &w0, ws[24], p[14]);
2221  word3_muladd(&w2, &w1, &w0, ws[25], p[13]);
2222  word3_muladd(&w2, &w1, &w0, ws[26], p[12]);
2223  word3_muladd(&w2, &w1, &w0, ws[27], p[11]);
2224  word3_muladd(&w2, &w1, &w0, ws[28], p[10]);
2225  word3_muladd(&w2, &w1, &w0, ws[29], p[9]);
2226  word3_muladd(&w2, &w1, &w0, ws[30], p[8]);
2227  word3_muladd(&w2, &w1, &w0, ws[31], p[7]);
2228  word3_add(&w2, &w1, &w0, z[38]);
2229  ws[6] = w0;
2230  w0 = w1; w1 = w2; w2 = 0;
2231  word3_muladd(&w2, &w1, &w0, ws[8], p[31]);
2232  word3_muladd(&w2, &w1, &w0, ws[9], p[30]);
2233  word3_muladd(&w2, &w1, &w0, ws[10], p[29]);
2234  word3_muladd(&w2, &w1, &w0, ws[11], p[28]);
2235  word3_muladd(&w2, &w1, &w0, ws[12], p[27]);
2236  word3_muladd(&w2, &w1, &w0, ws[13], p[26]);
2237  word3_muladd(&w2, &w1, &w0, ws[14], p[25]);
2238  word3_muladd(&w2, &w1, &w0, ws[15], p[24]);
2239  word3_muladd(&w2, &w1, &w0, ws[16], p[23]);
2240  word3_muladd(&w2, &w1, &w0, ws[17], p[22]);
2241  word3_muladd(&w2, &w1, &w0, ws[18], p[21]);
2242  word3_muladd(&w2, &w1, &w0, ws[19], p[20]);
2243  word3_muladd(&w2, &w1, &w0, ws[20], p[19]);
2244  word3_muladd(&w2, &w1, &w0, ws[21], p[18]);
2245  word3_muladd(&w2, &w1, &w0, ws[22], p[17]);
2246  word3_muladd(&w2, &w1, &w0, ws[23], p[16]);
2247  word3_muladd(&w2, &w1, &w0, ws[24], p[15]);
2248  word3_muladd(&w2, &w1, &w0, ws[25], p[14]);
2249  word3_muladd(&w2, &w1, &w0, ws[26], p[13]);
2250  word3_muladd(&w2, &w1, &w0, ws[27], p[12]);
2251  word3_muladd(&w2, &w1, &w0, ws[28], p[11]);
2252  word3_muladd(&w2, &w1, &w0, ws[29], p[10]);
2253  word3_muladd(&w2, &w1, &w0, ws[30], p[9]);
2254  word3_muladd(&w2, &w1, &w0, ws[31], p[8]);
2255  word3_add(&w2, &w1, &w0, z[39]);
2256  ws[7] = w0;
2257  w0 = w1; w1 = w2; w2 = 0;
2258  word3_muladd(&w2, &w1, &w0, ws[9], p[31]);
2259  word3_muladd(&w2, &w1, &w0, ws[10], p[30]);
2260  word3_muladd(&w2, &w1, &w0, ws[11], p[29]);
2261  word3_muladd(&w2, &w1, &w0, ws[12], p[28]);
2262  word3_muladd(&w2, &w1, &w0, ws[13], p[27]);
2263  word3_muladd(&w2, &w1, &w0, ws[14], p[26]);
2264  word3_muladd(&w2, &w1, &w0, ws[15], p[25]);
2265  word3_muladd(&w2, &w1, &w0, ws[16], p[24]);
2266  word3_muladd(&w2, &w1, &w0, ws[17], p[23]);
2267  word3_muladd(&w2, &w1, &w0, ws[18], p[22]);
2268  word3_muladd(&w2, &w1, &w0, ws[19], p[21]);
2269  word3_muladd(&w2, &w1, &w0, ws[20], p[20]);
2270  word3_muladd(&w2, &w1, &w0, ws[21], p[19]);
2271  word3_muladd(&w2, &w1, &w0, ws[22], p[18]);
2272  word3_muladd(&w2, &w1, &w0, ws[23], p[17]);
2273  word3_muladd(&w2, &w1, &w0, ws[24], p[16]);
2274  word3_muladd(&w2, &w1, &w0, ws[25], p[15]);
2275  word3_muladd(&w2, &w1, &w0, ws[26], p[14]);
2276  word3_muladd(&w2, &w1, &w0, ws[27], p[13]);
2277  word3_muladd(&w2, &w1, &w0, ws[28], p[12]);
2278  word3_muladd(&w2, &w1, &w0, ws[29], p[11]);
2279  word3_muladd(&w2, &w1, &w0, ws[30], p[10]);
2280  word3_muladd(&w2, &w1, &w0, ws[31], p[9]);
2281  word3_add(&w2, &w1, &w0, z[40]);
2282  ws[8] = w0;
2283  w0 = w1; w1 = w2; w2 = 0;
2284  word3_muladd(&w2, &w1, &w0, ws[10], p[31]);
2285  word3_muladd(&w2, &w1, &w0, ws[11], p[30]);
2286  word3_muladd(&w2, &w1, &w0, ws[12], p[29]);
2287  word3_muladd(&w2, &w1, &w0, ws[13], p[28]);
2288  word3_muladd(&w2, &w1, &w0, ws[14], p[27]);
2289  word3_muladd(&w2, &w1, &w0, ws[15], p[26]);
2290  word3_muladd(&w2, &w1, &w0, ws[16], p[25]);
2291  word3_muladd(&w2, &w1, &w0, ws[17], p[24]);
2292  word3_muladd(&w2, &w1, &w0, ws[18], p[23]);
2293  word3_muladd(&w2, &w1, &w0, ws[19], p[22]);
2294  word3_muladd(&w2, &w1, &w0, ws[20], p[21]);
2295  word3_muladd(&w2, &w1, &w0, ws[21], p[20]);
2296  word3_muladd(&w2, &w1, &w0, ws[22], p[19]);
2297  word3_muladd(&w2, &w1, &w0, ws[23], p[18]);
2298  word3_muladd(&w2, &w1, &w0, ws[24], p[17]);
2299  word3_muladd(&w2, &w1, &w0, ws[25], p[16]);
2300  word3_muladd(&w2, &w1, &w0, ws[26], p[15]);
2301  word3_muladd(&w2, &w1, &w0, ws[27], p[14]);
2302  word3_muladd(&w2, &w1, &w0, ws[28], p[13]);
2303  word3_muladd(&w2, &w1, &w0, ws[29], p[12]);
2304  word3_muladd(&w2, &w1, &w0, ws[30], p[11]);
2305  word3_muladd(&w2, &w1, &w0, ws[31], p[10]);
2306  word3_add(&w2, &w1, &w0, z[41]);
2307  ws[9] = w0;
2308  w0 = w1; w1 = w2; w2 = 0;
2309  word3_muladd(&w2, &w1, &w0, ws[11], p[31]);
2310  word3_muladd(&w2, &w1, &w0, ws[12], p[30]);
2311  word3_muladd(&w2, &w1, &w0, ws[13], p[29]);
2312  word3_muladd(&w2, &w1, &w0, ws[14], p[28]);
2313  word3_muladd(&w2, &w1, &w0, ws[15], p[27]);
2314  word3_muladd(&w2, &w1, &w0, ws[16], p[26]);
2315  word3_muladd(&w2, &w1, &w0, ws[17], p[25]);
2316  word3_muladd(&w2, &w1, &w0, ws[18], p[24]);
2317  word3_muladd(&w2, &w1, &w0, ws[19], p[23]);
2318  word3_muladd(&w2, &w1, &w0, ws[20], p[22]);
2319  word3_muladd(&w2, &w1, &w0, ws[21], p[21]);
2320  word3_muladd(&w2, &w1, &w0, ws[22], p[20]);
2321  word3_muladd(&w2, &w1, &w0, ws[23], p[19]);
2322  word3_muladd(&w2, &w1, &w0, ws[24], p[18]);
2323  word3_muladd(&w2, &w1, &w0, ws[25], p[17]);
2324  word3_muladd(&w2, &w1, &w0, ws[26], p[16]);
2325  word3_muladd(&w2, &w1, &w0, ws[27], p[15]);
2326  word3_muladd(&w2, &w1, &w0, ws[28], p[14]);
2327  word3_muladd(&w2, &w1, &w0, ws[29], p[13]);
2328  word3_muladd(&w2, &w1, &w0, ws[30], p[12]);
2329  word3_muladd(&w2, &w1, &w0, ws[31], p[11]);
2330  word3_add(&w2, &w1, &w0, z[42]);
2331  ws[10] = w0;
2332  w0 = w1; w1 = w2; w2 = 0;
2333  word3_muladd(&w2, &w1, &w0, ws[12], p[31]);
2334  word3_muladd(&w2, &w1, &w0, ws[13], p[30]);
2335  word3_muladd(&w2, &w1, &w0, ws[14], p[29]);
2336  word3_muladd(&w2, &w1, &w0, ws[15], p[28]);
2337  word3_muladd(&w2, &w1, &w0, ws[16], p[27]);
2338  word3_muladd(&w2, &w1, &w0, ws[17], p[26]);
2339  word3_muladd(&w2, &w1, &w0, ws[18], p[25]);
2340  word3_muladd(&w2, &w1, &w0, ws[19], p[24]);
2341  word3_muladd(&w2, &w1, &w0, ws[20], p[23]);
2342  word3_muladd(&w2, &w1, &w0, ws[21], p[22]);
2343  word3_muladd(&w2, &w1, &w0, ws[22], p[21]);
2344  word3_muladd(&w2, &w1, &w0, ws[23], p[20]);
2345  word3_muladd(&w2, &w1, &w0, ws[24], p[19]);
2346  word3_muladd(&w2, &w1, &w0, ws[25], p[18]);
2347  word3_muladd(&w2, &w1, &w0, ws[26], p[17]);
2348  word3_muladd(&w2, &w1, &w0, ws[27], p[16]);
2349  word3_muladd(&w2, &w1, &w0, ws[28], p[15]);
2350  word3_muladd(&w2, &w1, &w0, ws[29], p[14]);
2351  word3_muladd(&w2, &w1, &w0, ws[30], p[13]);
2352  word3_muladd(&w2, &w1, &w0, ws[31], p[12]);
2353  word3_add(&w2, &w1, &w0, z[43]);
2354  ws[11] = w0;
2355  w0 = w1; w1 = w2; w2 = 0;
2356  word3_muladd(&w2, &w1, &w0, ws[13], p[31]);
2357  word3_muladd(&w2, &w1, &w0, ws[14], p[30]);
2358  word3_muladd(&w2, &w1, &w0, ws[15], p[29]);
2359  word3_muladd(&w2, &w1, &w0, ws[16], p[28]);
2360  word3_muladd(&w2, &w1, &w0, ws[17], p[27]);
2361  word3_muladd(&w2, &w1, &w0, ws[18], p[26]);
2362  word3_muladd(&w2, &w1, &w0, ws[19], p[25]);
2363  word3_muladd(&w2, &w1, &w0, ws[20], p[24]);
2364  word3_muladd(&w2, &w1, &w0, ws[21], p[23]);
2365  word3_muladd(&w2, &w1, &w0, ws[22], p[22]);
2366  word3_muladd(&w2, &w1, &w0, ws[23], p[21]);
2367  word3_muladd(&w2, &w1, &w0, ws[24], p[20]);
2368  word3_muladd(&w2, &w1, &w0, ws[25], p[19]);
2369  word3_muladd(&w2, &w1, &w0, ws[26], p[18]);
2370  word3_muladd(&w2, &w1, &w0, ws[27], p[17]);
2371  word3_muladd(&w2, &w1, &w0, ws[28], p[16]);
2372  word3_muladd(&w2, &w1, &w0, ws[29], p[15]);
2373  word3_muladd(&w2, &w1, &w0, ws[30], p[14]);
2374  word3_muladd(&w2, &w1, &w0, ws[31], p[13]);
2375  word3_add(&w2, &w1, &w0, z[44]);
2376  ws[12] = w0;
2377  w0 = w1; w1 = w2; w2 = 0;
2378  word3_muladd(&w2, &w1, &w0, ws[14], p[31]);
2379  word3_muladd(&w2, &w1, &w0, ws[15], p[30]);
2380  word3_muladd(&w2, &w1, &w0, ws[16], p[29]);
2381  word3_muladd(&w2, &w1, &w0, ws[17], p[28]);
2382  word3_muladd(&w2, &w1, &w0, ws[18], p[27]);
2383  word3_muladd(&w2, &w1, &w0, ws[19], p[26]);
2384  word3_muladd(&w2, &w1, &w0, ws[20], p[25]);
2385  word3_muladd(&w2, &w1, &w0, ws[21], p[24]);
2386  word3_muladd(&w2, &w1, &w0, ws[22], p[23]);
2387  word3_muladd(&w2, &w1, &w0, ws[23], p[22]);
2388  word3_muladd(&w2, &w1, &w0, ws[24], p[21]);
2389  word3_muladd(&w2, &w1, &w0, ws[25], p[20]);
2390  word3_muladd(&w2, &w1, &w0, ws[26], p[19]);
2391  word3_muladd(&w2, &w1, &w0, ws[27], p[18]);
2392  word3_muladd(&w2, &w1, &w0, ws[28], p[17]);
2393  word3_muladd(&w2, &w1, &w0, ws[29], p[16]);
2394  word3_muladd(&w2, &w1, &w0, ws[30], p[15]);
2395  word3_muladd(&w2, &w1, &w0, ws[31], p[14]);
2396  word3_add(&w2, &w1, &w0, z[45]);
2397  ws[13] = w0;
2398  w0 = w1; w1 = w2; w2 = 0;
2399  word3_muladd(&w2, &w1, &w0, ws[15], p[31]);
2400  word3_muladd(&w2, &w1, &w0, ws[16], p[30]);
2401  word3_muladd(&w2, &w1, &w0, ws[17], p[29]);
2402  word3_muladd(&w2, &w1, &w0, ws[18], p[28]);
2403  word3_muladd(&w2, &w1, &w0, ws[19], p[27]);
2404  word3_muladd(&w2, &w1, &w0, ws[20], p[26]);
2405  word3_muladd(&w2, &w1, &w0, ws[21], p[25]);
2406  word3_muladd(&w2, &w1, &w0, ws[22], p[24]);
2407  word3_muladd(&w2, &w1, &w0, ws[23], p[23]);
2408  word3_muladd(&w2, &w1, &w0, ws[24], p[22]);
2409  word3_muladd(&w2, &w1, &w0, ws[25], p[21]);
2410  word3_muladd(&w2, &w1, &w0, ws[26], p[20]);
2411  word3_muladd(&w2, &w1, &w0, ws[27], p[19]);
2412  word3_muladd(&w2, &w1, &w0, ws[28], p[18]);
2413  word3_muladd(&w2, &w1, &w0, ws[29], p[17]);
2414  word3_muladd(&w2, &w1, &w0, ws[30], p[16]);
2415  word3_muladd(&w2, &w1, &w0, ws[31], p[15]);
2416  word3_add(&w2, &w1, &w0, z[46]);
2417  ws[14] = w0;
2418  w0 = w1; w1 = w2; w2 = 0;
2419  word3_muladd(&w2, &w1, &w0, ws[16], p[31]);
2420  word3_muladd(&w2, &w1, &w0, ws[17], p[30]);
2421  word3_muladd(&w2, &w1, &w0, ws[18], p[29]);
2422  word3_muladd(&w2, &w1, &w0, ws[19], p[28]);
2423  word3_muladd(&w2, &w1, &w0, ws[20], p[27]);
2424  word3_muladd(&w2, &w1, &w0, ws[21], p[26]);
2425  word3_muladd(&w2, &w1, &w0, ws[22], p[25]);
2426  word3_muladd(&w2, &w1, &w0, ws[23], p[24]);
2427  word3_muladd(&w2, &w1, &w0, ws[24], p[23]);
2428  word3_muladd(&w2, &w1, &w0, ws[25], p[22]);
2429  word3_muladd(&w2, &w1, &w0, ws[26], p[21]);
2430  word3_muladd(&w2, &w1, &w0, ws[27], p[20]);
2431  word3_muladd(&w2, &w1, &w0, ws[28], p[19]);
2432  word3_muladd(&w2, &w1, &w0, ws[29], p[18]);
2433  word3_muladd(&w2, &w1, &w0, ws[30], p[17]);
2434  word3_muladd(&w2, &w1, &w0, ws[31], p[16]);
2435  word3_add(&w2, &w1, &w0, z[47]);
2436  ws[15] = w0;
2437  w0 = w1; w1 = w2; w2 = 0;
2438  word3_muladd(&w2, &w1, &w0, ws[17], p[31]);
2439  word3_muladd(&w2, &w1, &w0, ws[18], p[30]);
2440  word3_muladd(&w2, &w1, &w0, ws[19], p[29]);
2441  word3_muladd(&w2, &w1, &w0, ws[20], p[28]);
2442  word3_muladd(&w2, &w1, &w0, ws[21], p[27]);
2443  word3_muladd(&w2, &w1, &w0, ws[22], p[26]);
2444  word3_muladd(&w2, &w1, &w0, ws[23], p[25]);
2445  word3_muladd(&w2, &w1, &w0, ws[24], p[24]);
2446  word3_muladd(&w2, &w1, &w0, ws[25], p[23]);
2447  word3_muladd(&w2, &w1, &w0, ws[26], p[22]);
2448  word3_muladd(&w2, &w1, &w0, ws[27], p[21]);
2449  word3_muladd(&w2, &w1, &w0, ws[28], p[20]);
2450  word3_muladd(&w2, &w1, &w0, ws[29], p[19]);
2451  word3_muladd(&w2, &w1, &w0, ws[30], p[18]);
2452  word3_muladd(&w2, &w1, &w0, ws[31], p[17]);
2453  word3_add(&w2, &w1, &w0, z[48]);
2454  ws[16] = w0;
2455  w0 = w1; w1 = w2; w2 = 0;
2456  word3_muladd(&w2, &w1, &w0, ws[18], p[31]);
2457  word3_muladd(&w2, &w1, &w0, ws[19], p[30]);
2458  word3_muladd(&w2, &w1, &w0, ws[20], p[29]);
2459  word3_muladd(&w2, &w1, &w0, ws[21], p[28]);
2460  word3_muladd(&w2, &w1, &w0, ws[22], p[27]);
2461  word3_muladd(&w2, &w1, &w0, ws[23], p[26]);
2462  word3_muladd(&w2, &w1, &w0, ws[24], p[25]);
2463  word3_muladd(&w2, &w1, &w0, ws[25], p[24]);
2464  word3_muladd(&w2, &w1, &w0, ws[26], p[23]);
2465  word3_muladd(&w2, &w1, &w0, ws[27], p[22]);
2466  word3_muladd(&w2, &w1, &w0, ws[28], p[21]);
2467  word3_muladd(&w2, &w1, &w0, ws[29], p[20]);
2468  word3_muladd(&w2, &w1, &w0, ws[30], p[19]);
2469  word3_muladd(&w2, &w1, &w0, ws[31], p[18]);
2470  word3_add(&w2, &w1, &w0, z[49]);
2471  ws[17] = w0;
2472  w0 = w1; w1 = w2; w2 = 0;
2473  word3_muladd(&w2, &w1, &w0, ws[19], p[31]);
2474  word3_muladd(&w2, &w1, &w0, ws[20], p[30]);
2475  word3_muladd(&w2, &w1, &w0, ws[21], p[29]);
2476  word3_muladd(&w2, &w1, &w0, ws[22], p[28]);
2477  word3_muladd(&w2, &w1, &w0, ws[23], p[27]);
2478  word3_muladd(&w2, &w1, &w0, ws[24], p[26]);
2479  word3_muladd(&w2, &w1, &w0, ws[25], p[25]);
2480  word3_muladd(&w2, &w1, &w0, ws[26], p[24]);
2481  word3_muladd(&w2, &w1, &w0, ws[27], p[23]);
2482  word3_muladd(&w2, &w1, &w0, ws[28], p[22]);
2483  word3_muladd(&w2, &w1, &w0, ws[29], p[21]);
2484  word3_muladd(&w2, &w1, &w0, ws[30], p[20]);
2485  word3_muladd(&w2, &w1, &w0, ws[31], p[19]);
2486  word3_add(&w2, &w1, &w0, z[50]);
2487  ws[18] = w0;
2488  w0 = w1; w1 = w2; w2 = 0;
2489  word3_muladd(&w2, &w1, &w0, ws[20], p[31]);
2490  word3_muladd(&w2, &w1, &w0, ws[21], p[30]);
2491  word3_muladd(&w2, &w1, &w0, ws[22], p[29]);
2492  word3_muladd(&w2, &w1, &w0, ws[23], p[28]);
2493  word3_muladd(&w2, &w1, &w0, ws[24], p[27]);
2494  word3_muladd(&w2, &w1, &w0, ws[25], p[26]);
2495  word3_muladd(&w2, &w1, &w0, ws[26], p[25]);
2496  word3_muladd(&w2, &w1, &w0, ws[27], p[24]);
2497  word3_muladd(&w2, &w1, &w0, ws[28], p[23]);
2498  word3_muladd(&w2, &w1, &w0, ws[29], p[22]);
2499  word3_muladd(&w2, &w1, &w0, ws[30], p[21]);
2500  word3_muladd(&w2, &w1, &w0, ws[31], p[20]);
2501  word3_add(&w2, &w1, &w0, z[51]);
2502  ws[19] = w0;
2503  w0 = w1; w1 = w2; w2 = 0;
2504  word3_muladd(&w2, &w1, &w0, ws[21], p[31]);
2505  word3_muladd(&w2, &w1, &w0, ws[22], p[30]);
2506  word3_muladd(&w2, &w1, &w0, ws[23], p[29]);
2507  word3_muladd(&w2, &w1, &w0, ws[24], p[28]);
2508  word3_muladd(&w2, &w1, &w0, ws[25], p[27]);
2509  word3_muladd(&w2, &w1, &w0, ws[26], p[26]);
2510  word3_muladd(&w2, &w1, &w0, ws[27], p[25]);
2511  word3_muladd(&w2, &w1, &w0, ws[28], p[24]);
2512  word3_muladd(&w2, &w1, &w0, ws[29], p[23]);
2513  word3_muladd(&w2, &w1, &w0, ws[30], p[22]);
2514  word3_muladd(&w2, &w1, &w0, ws[31], p[21]);
2515  word3_add(&w2, &w1, &w0, z[52]);
2516  ws[20] = w0;
2517  w0 = w1; w1 = w2; w2 = 0;
2518  word3_muladd(&w2, &w1, &w0, ws[22], p[31]);
2519  word3_muladd(&w2, &w1, &w0, ws[23], p[30]);
2520  word3_muladd(&w2, &w1, &w0, ws[24], p[29]);
2521  word3_muladd(&w2, &w1, &w0, ws[25], p[28]);
2522  word3_muladd(&w2, &w1, &w0, ws[26], p[27]);
2523  word3_muladd(&w2, &w1, &w0, ws[27], p[26]);
2524  word3_muladd(&w2, &w1, &w0, ws[28], p[25]);
2525  word3_muladd(&w2, &w1, &w0, ws[29], p[24]);
2526  word3_muladd(&w2, &w1, &w0, ws[30], p[23]);
2527  word3_muladd(&w2, &w1, &w0, ws[31], p[22]);
2528  word3_add(&w2, &w1, &w0, z[53]);
2529  ws[21] = w0;
2530  w0 = w1; w1 = w2; w2 = 0;
2531  word3_muladd(&w2, &w1, &w0, ws[23], p[31]);
2532  word3_muladd(&w2, &w1, &w0, ws[24], p[30]);
2533  word3_muladd(&w2, &w1, &w0, ws[25], p[29]);
2534  word3_muladd(&w2, &w1, &w0, ws[26], p[28]);
2535  word3_muladd(&w2, &w1, &w0, ws[27], p[27]);
2536  word3_muladd(&w2, &w1, &w0, ws[28], p[26]);
2537  word3_muladd(&w2, &w1, &w0, ws[29], p[25]);
2538  word3_muladd(&w2, &w1, &w0, ws[30], p[24]);
2539  word3_muladd(&w2, &w1, &w0, ws[31], p[23]);
2540  word3_add(&w2, &w1, &w0, z[54]);
2541  ws[22] = w0;
2542  w0 = w1; w1 = w2; w2 = 0;
2543  word3_muladd(&w2, &w1, &w0, ws[24], p[31]);
2544  word3_muladd(&w2, &w1, &w0, ws[25], p[30]);
2545  word3_muladd(&w2, &w1, &w0, ws[26], p[29]);
2546  word3_muladd(&w2, &w1, &w0, ws[27], p[28]);
2547  word3_muladd(&w2, &w1, &w0, ws[28], p[27]);
2548  word3_muladd(&w2, &w1, &w0, ws[29], p[26]);
2549  word3_muladd(&w2, &w1, &w0, ws[30], p[25]);
2550  word3_muladd(&w2, &w1, &w0, ws[31], p[24]);
2551  word3_add(&w2, &w1, &w0, z[55]);
2552  ws[23] = w0;
2553  w0 = w1; w1 = w2; w2 = 0;
2554  word3_muladd(&w2, &w1, &w0, ws[25], p[31]);
2555  word3_muladd(&w2, &w1, &w0, ws[26], p[30]);
2556  word3_muladd(&w2, &w1, &w0, ws[27], p[29]);
2557  word3_muladd(&w2, &w1, &w0, ws[28], p[28]);
2558  word3_muladd(&w2, &w1, &w0, ws[29], p[27]);
2559  word3_muladd(&w2, &w1, &w0, ws[30], p[26]);
2560  word3_muladd(&w2, &w1, &w0, ws[31], p[25]);
2561  word3_add(&w2, &w1, &w0, z[56]);
2562  ws[24] = w0;
2563  w0 = w1; w1 = w2; w2 = 0;
2564  word3_muladd(&w2, &w1, &w0, ws[26], p[31]);
2565  word3_muladd(&w2, &w1, &w0, ws[27], p[30]);
2566  word3_muladd(&w2, &w1, &w0, ws[28], p[29]);
2567  word3_muladd(&w2, &w1, &w0, ws[29], p[28]);
2568  word3_muladd(&w2, &w1, &w0, ws[30], p[27]);
2569  word3_muladd(&w2, &w1, &w0, ws[31], p[26]);
2570  word3_add(&w2, &w1, &w0, z[57]);
2571  ws[25] = w0;
2572  w0 = w1; w1 = w2; w2 = 0;
2573  word3_muladd(&w2, &w1, &w0, ws[27], p[31]);
2574  word3_muladd(&w2, &w1, &w0, ws[28], p[30]);
2575  word3_muladd(&w2, &w1, &w0, ws[29], p[29]);
2576  word3_muladd(&w2, &w1, &w0, ws[30], p[28]);
2577  word3_muladd(&w2, &w1, &w0, ws[31], p[27]);
2578  word3_add(&w2, &w1, &w0, z[58]);
2579  ws[26] = w0;
2580  w0 = w1; w1 = w2; w2 = 0;
2581  word3_muladd(&w2, &w1, &w0, ws[28], p[31]);
2582  word3_muladd(&w2, &w1, &w0, ws[29], p[30]);
2583  word3_muladd(&w2, &w1, &w0, ws[30], p[29]);
2584  word3_muladd(&w2, &w1, &w0, ws[31], p[28]);
2585  word3_add(&w2, &w1, &w0, z[59]);
2586  ws[27] = w0;
2587  w0 = w1; w1 = w2; w2 = 0;
2588  word3_muladd(&w2, &w1, &w0, ws[29], p[31]);
2589  word3_muladd(&w2, &w1, &w0, ws[30], p[30]);
2590  word3_muladd(&w2, &w1, &w0, ws[31], p[29]);
2591  word3_add(&w2, &w1, &w0, z[60]);
2592  ws[28] = w0;
2593  w0 = w1; w1 = w2; w2 = 0;
2594  word3_muladd(&w2, &w1, &w0, ws[30], p[31]);
2595  word3_muladd(&w2, &w1, &w0, ws[31], p[30]);
2596  word3_add(&w2, &w1, &w0, z[61]);
2597  ws[29] = w0;
2598  w0 = w1; w1 = w2; w2 = 0;
2599  word3_muladd(&w2, &w1, &w0, ws[31], p[31]);
2600  word3_add(&w2, &w1, &w0, z[62]);
2601  ws[30] = w0;
2602  w0 = w1; w1 = w2; w2 = 0;
2603  word3_add(&w2, &w1, &w0, z[63]);
2604  ws[31] = w0;
2605  w0 = w1; w1 = w2; w2 = 0;
2606  word3_add(&w2, &w1, &w0, z[65]);
2607  ws[32] = w0;
2608  ws[33] = w1;
2609  word borrow = bigint_sub3(ws + 32 + 1, ws, 32 + 1, p, 32);
2610  CT::conditional_copy_mem(borrow, z, ws, ws + 33, 33);
2611  clear_mem(z + 32, 2*(32+1) - 32);
2612  }
2613 
2614 }
void word3_muladd(word *w2, word *w1, word *w0, word x, word y)
Definition: mp_asmi.h:451
void bigint_monty_redc_32(word z[], const word p[], word p_dash, word ws[])
void clear_mem(T *ptr, size_t n)
Definition: mem_ops.h:115
void bigint_monty_redc_8(word z[], const word p[], word p_dash, word ws[])
word bigint_sub3(word z[], const word x[], size_t x_size, const word y[], size_t y_size)
Definition: mp_core.h:342
void bigint_monty_redc_6(word z[], const word p[], word p_dash, word ws[])
void bigint_monty_redc_24(word z[], const word p[], word p_dash, word ws[])
void bigint_monty_redc_16(word z[], const word p[], word p_dash, word ws[])
void bigint_monty_redc_4(word z[], const word p[], word p_dash, word ws[])
void word3_add(word *w2, word *w1, word *w0, word x)
Definition: mp_asmi.h:500
Definition: alg_id.cpp:13
Mask< T > conditional_copy_mem(T cnd, T *to, const T *from0, const T *from1, size_t elems)
Definition: ct_utils.h:363
word word_sub(word x, word y, word *carry)
Definition: mp_asmi.h:209