Botan 2.19.3
Crypto and TLS for C&
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
13namespace Botan {
14
15void 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
71void 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
161void 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
293void 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
656void 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
1387void 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}
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
void word3_muladd(word *w2, word *w1, word *w0, word x, word y)
Definition mp_asmi.h:451
void bigint_monty_redc_24(word z[], const word p[], word p_dash, word ws[])
void bigint_monty_redc_8(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
void bigint_monty_redc_32(word z[], const word p[], word p_dash, word ws[])
void bigint_monty_redc_6(word z[], const word p[], word p_dash, word ws[])
void clear_mem(T *ptr, size_t n)
Definition mem_ops.h:115
word bigint_sub3(word z[], const word x[], size_t x_size, const word y[], size_t y_size)
Definition mp_core.h:342