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