Warning, file /libraries/qca/src/botantools/botan/mp_comba.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 Copyright (C) 1999-2007 The Botan Project. All rights reserved. 0003 0004 Redistribution and use in source and binary forms, for any use, with or without 0005 modification, is permitted provided that the following conditions are met: 0006 0007 1. Redistributions of source code must retain the above copyright notice, this 0008 list of conditions, and the following disclaimer. 0009 0010 2. Redistributions in binary form must reproduce the above copyright notice, 0011 this list of conditions, and the following disclaimer in the documentation 0012 and/or other materials provided with the distribution. 0013 0014 THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) "AS IS" AND ANY EXPRESS OR IMPLIED 0015 WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 0016 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. 0017 0018 IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTOR(S) BE LIABLE FOR ANY DIRECT, 0019 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 0020 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 0021 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 0022 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 0023 OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 0024 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 0025 */ 0026 // LICENSEHEADER_END 0027 namespace QCA { // WRAPNS_LINE 0028 /************************************************* 0029 * Comba Multiplication and Squaring Source File * 0030 * (C) 1999-2007 The Botan Project * 0031 *************************************************/ 0032 0033 } // WRAPNS_LINE 0034 #include <botan/mp_core.h> 0035 namespace QCA { // WRAPNS_LINE 0036 } // WRAPNS_LINE 0037 #include <botan/mp_asmi.h> 0038 namespace QCA { // WRAPNS_LINE 0039 0040 namespace Botan { 0041 0042 extern "C" { 0043 0044 /************************************************* 0045 * Comba 4x4 Multiplication * 0046 *************************************************/ 0047 void bigint_comba_mul4(word z[8], const word x[4], const word y[4]) 0048 { 0049 word w2 = 0, w1 = 0, w0 = 0; 0050 0051 word3_muladd(&w2, &w1, &w0, x[0], y[0]); 0052 z[0] = w0; 0053 w0 = w1; 0054 w1 = w2; 0055 w2 = 0; 0056 0057 word3_muladd(&w2, &w1, &w0, x[0], y[1]); 0058 word3_muladd(&w2, &w1, &w0, x[1], y[0]); 0059 z[1] = w0; 0060 w0 = w1; 0061 w1 = w2; 0062 w2 = 0; 0063 0064 word3_muladd(&w2, &w1, &w0, x[0], y[2]); 0065 word3_muladd(&w2, &w1, &w0, x[1], y[1]); 0066 word3_muladd(&w2, &w1, &w0, x[2], y[0]); 0067 z[2] = w0; 0068 w0 = w1; 0069 w1 = w2; 0070 w2 = 0; 0071 0072 word3_muladd(&w2, &w1, &w0, x[0], y[3]); 0073 word3_muladd(&w2, &w1, &w0, x[1], y[2]); 0074 word3_muladd(&w2, &w1, &w0, x[2], y[1]); 0075 word3_muladd(&w2, &w1, &w0, x[3], y[0]); 0076 z[3] = w0; 0077 w0 = w1; 0078 w1 = w2; 0079 w2 = 0; 0080 0081 word3_muladd(&w2, &w1, &w0, x[1], y[3]); 0082 word3_muladd(&w2, &w1, &w0, x[2], y[2]); 0083 word3_muladd(&w2, &w1, &w0, x[3], y[1]); 0084 z[4] = w0; 0085 w0 = w1; 0086 w1 = w2; 0087 w2 = 0; 0088 0089 word3_muladd(&w2, &w1, &w0, x[2], y[3]); 0090 word3_muladd(&w2, &w1, &w0, x[3], y[2]); 0091 z[5] = w0; 0092 w0 = w1; 0093 w1 = w2; 0094 w2 = 0; 0095 0096 word3_muladd(&w2, &w1, &w0, x[3], y[3]); 0097 z[6] = w0; 0098 z[7] = w1; 0099 } 0100 0101 /************************************************* 0102 * Comba 6x6 Multiplication * 0103 *************************************************/ 0104 void bigint_comba_mul6(word z[12], const word x[6], const word y[6]) 0105 { 0106 word w2 = 0, w1 = 0, w0 = 0; 0107 0108 word3_muladd(&w2, &w1, &w0, x[0], y[0]); 0109 z[0] = w0; 0110 w0 = w1; 0111 w1 = w2; 0112 w2 = 0; 0113 0114 word3_muladd(&w2, &w1, &w0, x[0], y[1]); 0115 word3_muladd(&w2, &w1, &w0, x[1], y[0]); 0116 z[1] = w0; 0117 w0 = w1; 0118 w1 = w2; 0119 w2 = 0; 0120 0121 word3_muladd(&w2, &w1, &w0, x[0], y[2]); 0122 word3_muladd(&w2, &w1, &w0, x[1], y[1]); 0123 word3_muladd(&w2, &w1, &w0, x[2], y[0]); 0124 z[2] = w0; 0125 w0 = w1; 0126 w1 = w2; 0127 w2 = 0; 0128 0129 word3_muladd(&w2, &w1, &w0, x[0], y[3]); 0130 word3_muladd(&w2, &w1, &w0, x[1], y[2]); 0131 word3_muladd(&w2, &w1, &w0, x[2], y[1]); 0132 word3_muladd(&w2, &w1, &w0, x[3], y[0]); 0133 z[3] = w0; 0134 w0 = w1; 0135 w1 = w2; 0136 w2 = 0; 0137 0138 word3_muladd(&w2, &w1, &w0, x[0], y[4]); 0139 word3_muladd(&w2, &w1, &w0, x[1], y[3]); 0140 word3_muladd(&w2, &w1, &w0, x[2], y[2]); 0141 word3_muladd(&w2, &w1, &w0, x[3], y[1]); 0142 word3_muladd(&w2, &w1, &w0, x[4], y[0]); 0143 z[4] = w0; 0144 w0 = w1; 0145 w1 = w2; 0146 w2 = 0; 0147 0148 word3_muladd(&w2, &w1, &w0, x[0], y[5]); 0149 word3_muladd(&w2, &w1, &w0, x[1], y[4]); 0150 word3_muladd(&w2, &w1, &w0, x[2], y[3]); 0151 word3_muladd(&w2, &w1, &w0, x[3], y[2]); 0152 word3_muladd(&w2, &w1, &w0, x[4], y[1]); 0153 word3_muladd(&w2, &w1, &w0, x[5], y[0]); 0154 z[5] = w0; 0155 w0 = w1; 0156 w1 = w2; 0157 w2 = 0; 0158 0159 word3_muladd(&w2, &w1, &w0, x[1], y[5]); 0160 word3_muladd(&w2, &w1, &w0, x[2], y[4]); 0161 word3_muladd(&w2, &w1, &w0, x[3], y[3]); 0162 word3_muladd(&w2, &w1, &w0, x[4], y[2]); 0163 word3_muladd(&w2, &w1, &w0, x[5], y[1]); 0164 z[6] = w0; 0165 w0 = w1; 0166 w1 = w2; 0167 w2 = 0; 0168 0169 word3_muladd(&w2, &w1, &w0, x[2], y[5]); 0170 word3_muladd(&w2, &w1, &w0, x[3], y[4]); 0171 word3_muladd(&w2, &w1, &w0, x[4], y[3]); 0172 word3_muladd(&w2, &w1, &w0, x[5], y[2]); 0173 z[7] = w0; 0174 w0 = w1; 0175 w1 = w2; 0176 w2 = 0; 0177 0178 word3_muladd(&w2, &w1, &w0, x[3], y[5]); 0179 word3_muladd(&w2, &w1, &w0, x[4], y[4]); 0180 word3_muladd(&w2, &w1, &w0, x[5], y[3]); 0181 z[8] = w0; 0182 w0 = w1; 0183 w1 = w2; 0184 w2 = 0; 0185 0186 word3_muladd(&w2, &w1, &w0, x[4], y[5]); 0187 word3_muladd(&w2, &w1, &w0, x[5], y[4]); 0188 z[9] = w0; 0189 w0 = w1; 0190 w1 = w2; 0191 w2 = 0; 0192 0193 word3_muladd(&w2, &w1, &w0, x[5], y[5]); 0194 z[10] = w0; 0195 z[11] = w1; 0196 } 0197 0198 /************************************************* 0199 * Comba 8x8 Multiplication * 0200 *************************************************/ 0201 void bigint_comba_mul8(word z[16], const word x[8], const word y[8]) 0202 { 0203 word w2 = 0, w1 = 0, w0 = 0; 0204 0205 word3_muladd(&w2, &w1, &w0, x[0], y[0]); 0206 z[0] = w0; 0207 w0 = w1; 0208 w1 = w2; 0209 w2 = 0; 0210 0211 word3_muladd(&w2, &w1, &w0, x[0], y[1]); 0212 word3_muladd(&w2, &w1, &w0, x[1], y[0]); 0213 z[1] = w0; 0214 w0 = w1; 0215 w1 = w2; 0216 w2 = 0; 0217 0218 word3_muladd(&w2, &w1, &w0, x[0], y[2]); 0219 word3_muladd(&w2, &w1, &w0, x[1], y[1]); 0220 word3_muladd(&w2, &w1, &w0, x[2], y[0]); 0221 z[2] = w0; 0222 w0 = w1; 0223 w1 = w2; 0224 w2 = 0; 0225 0226 word3_muladd(&w2, &w1, &w0, x[0], y[3]); 0227 word3_muladd(&w2, &w1, &w0, x[1], y[2]); 0228 word3_muladd(&w2, &w1, &w0, x[2], y[1]); 0229 word3_muladd(&w2, &w1, &w0, x[3], y[0]); 0230 z[3] = w0; 0231 w0 = w1; 0232 w1 = w2; 0233 w2 = 0; 0234 0235 word3_muladd(&w2, &w1, &w0, x[0], y[4]); 0236 word3_muladd(&w2, &w1, &w0, x[1], y[3]); 0237 word3_muladd(&w2, &w1, &w0, x[2], y[2]); 0238 word3_muladd(&w2, &w1, &w0, x[3], y[1]); 0239 word3_muladd(&w2, &w1, &w0, x[4], y[0]); 0240 z[4] = w0; 0241 w0 = w1; 0242 w1 = w2; 0243 w2 = 0; 0244 0245 word3_muladd(&w2, &w1, &w0, x[0], y[5]); 0246 word3_muladd(&w2, &w1, &w0, x[1], y[4]); 0247 word3_muladd(&w2, &w1, &w0, x[2], y[3]); 0248 word3_muladd(&w2, &w1, &w0, x[3], y[2]); 0249 word3_muladd(&w2, &w1, &w0, x[4], y[1]); 0250 word3_muladd(&w2, &w1, &w0, x[5], y[0]); 0251 z[5] = w0; 0252 w0 = w1; 0253 w1 = w2; 0254 w2 = 0; 0255 0256 word3_muladd(&w2, &w1, &w0, x[0], y[6]); 0257 word3_muladd(&w2, &w1, &w0, x[1], y[5]); 0258 word3_muladd(&w2, &w1, &w0, x[2], y[4]); 0259 word3_muladd(&w2, &w1, &w0, x[3], y[3]); 0260 word3_muladd(&w2, &w1, &w0, x[4], y[2]); 0261 word3_muladd(&w2, &w1, &w0, x[5], y[1]); 0262 word3_muladd(&w2, &w1, &w0, x[6], y[0]); 0263 z[6] = w0; 0264 w0 = w1; 0265 w1 = w2; 0266 w2 = 0; 0267 0268 word3_muladd(&w2, &w1, &w0, x[0], y[7]); 0269 word3_muladd(&w2, &w1, &w0, x[1], y[6]); 0270 word3_muladd(&w2, &w1, &w0, x[2], y[5]); 0271 word3_muladd(&w2, &w1, &w0, x[3], y[4]); 0272 word3_muladd(&w2, &w1, &w0, x[4], y[3]); 0273 word3_muladd(&w2, &w1, &w0, x[5], y[2]); 0274 word3_muladd(&w2, &w1, &w0, x[6], y[1]); 0275 word3_muladd(&w2, &w1, &w0, x[7], y[0]); 0276 z[7] = w0; 0277 w0 = w1; 0278 w1 = w2; 0279 w2 = 0; 0280 0281 word3_muladd(&w2, &w1, &w0, x[1], y[7]); 0282 word3_muladd(&w2, &w1, &w0, x[2], y[6]); 0283 word3_muladd(&w2, &w1, &w0, x[3], y[5]); 0284 word3_muladd(&w2, &w1, &w0, x[4], y[4]); 0285 word3_muladd(&w2, &w1, &w0, x[5], y[3]); 0286 word3_muladd(&w2, &w1, &w0, x[6], y[2]); 0287 word3_muladd(&w2, &w1, &w0, x[7], y[1]); 0288 z[8] = w0; 0289 w0 = w1; 0290 w1 = w2; 0291 w2 = 0; 0292 0293 word3_muladd(&w2, &w1, &w0, x[2], y[7]); 0294 word3_muladd(&w2, &w1, &w0, x[3], y[6]); 0295 word3_muladd(&w2, &w1, &w0, x[4], y[5]); 0296 word3_muladd(&w2, &w1, &w0, x[5], y[4]); 0297 word3_muladd(&w2, &w1, &w0, x[6], y[3]); 0298 word3_muladd(&w2, &w1, &w0, x[7], y[2]); 0299 z[9] = w0; 0300 w0 = w1; 0301 w1 = w2; 0302 w2 = 0; 0303 0304 word3_muladd(&w2, &w1, &w0, x[3], y[7]); 0305 word3_muladd(&w2, &w1, &w0, x[4], y[6]); 0306 word3_muladd(&w2, &w1, &w0, x[5], y[5]); 0307 word3_muladd(&w2, &w1, &w0, x[6], y[4]); 0308 word3_muladd(&w2, &w1, &w0, x[7], y[3]); 0309 z[10] = w0; 0310 w0 = w1; 0311 w1 = w2; 0312 w2 = 0; 0313 0314 word3_muladd(&w2, &w1, &w0, x[4], y[7]); 0315 word3_muladd(&w2, &w1, &w0, x[5], y[6]); 0316 word3_muladd(&w2, &w1, &w0, x[6], y[5]); 0317 word3_muladd(&w2, &w1, &w0, x[7], y[4]); 0318 z[11] = w0; 0319 w0 = w1; 0320 w1 = w2; 0321 w2 = 0; 0322 0323 word3_muladd(&w2, &w1, &w0, x[5], y[7]); 0324 word3_muladd(&w2, &w1, &w0, x[6], y[6]); 0325 word3_muladd(&w2, &w1, &w0, x[7], y[5]); 0326 z[12] = w0; 0327 w0 = w1; 0328 w1 = w2; 0329 w2 = 0; 0330 0331 word3_muladd(&w2, &w1, &w0, x[6], y[7]); 0332 word3_muladd(&w2, &w1, &w0, x[7], y[6]); 0333 z[13] = w0; 0334 w0 = w1; 0335 w1 = w2; 0336 w2 = 0; 0337 0338 word3_muladd(&w2, &w1, &w0, x[7], y[7]); 0339 z[14] = w0; 0340 z[15] = w1; 0341 } 0342 0343 /************************************************* 0344 * Comba 4x4 Squaring * 0345 *************************************************/ 0346 void bigint_comba_sqr4(word z[8], const word x[4]) 0347 { 0348 word w2 = 0, w1 = 0, w0 = 0; 0349 0350 word3_muladd(&w2, &w1, &w0, x[0], x[0]); 0351 z[0] = w0; 0352 w0 = w1; 0353 w1 = w2; 0354 w2 = 0; 0355 0356 word3_muladd_2(&w2, &w1, &w0, x[0], x[1]); 0357 z[1] = w0; 0358 w0 = w1; 0359 w1 = w2; 0360 w2 = 0; 0361 0362 word3_muladd_2(&w2, &w1, &w0, x[0], x[2]); 0363 word3_muladd(&w2, &w1, &w0, x[1], x[1]); 0364 z[2] = w0; 0365 w0 = w1; 0366 w1 = w2; 0367 w2 = 0; 0368 0369 word3_muladd_2(&w2, &w1, &w0, x[0], x[3]); 0370 word3_muladd_2(&w2, &w1, &w0, x[1], x[2]); 0371 z[3] = w0; 0372 w0 = w1; 0373 w1 = w2; 0374 w2 = 0; 0375 0376 word3_muladd_2(&w2, &w1, &w0, x[1], x[3]); 0377 word3_muladd(&w2, &w1, &w0, x[2], x[2]); 0378 z[4] = w0; 0379 w0 = w1; 0380 w1 = w2; 0381 w2 = 0; 0382 0383 word3_muladd_2(&w2, &w1, &w0, x[2], x[3]); 0384 z[5] = w0; 0385 w0 = w1; 0386 w1 = w2; 0387 w2 = 0; 0388 0389 word3_muladd(&w2, &w1, &w0, x[3], x[3]); 0390 z[6] = w0; 0391 z[7] = w1; 0392 } 0393 0394 /************************************************* 0395 * Comba 6x6 Squaring * 0396 *************************************************/ 0397 void bigint_comba_sqr6(word z[12], const word x[6]) 0398 { 0399 word w2 = 0, w1 = 0, w0 = 0; 0400 0401 word3_muladd(&w2, &w1, &w0, x[0], x[0]); 0402 z[0] = w0; 0403 w0 = w1; 0404 w1 = w2; 0405 w2 = 0; 0406 0407 word3_muladd_2(&w2, &w1, &w0, x[0], x[1]); 0408 z[1] = w0; 0409 w0 = w1; 0410 w1 = w2; 0411 w2 = 0; 0412 0413 word3_muladd_2(&w2, &w1, &w0, x[0], x[2]); 0414 word3_muladd(&w2, &w1, &w0, x[1], x[1]); 0415 z[2] = w0; 0416 w0 = w1; 0417 w1 = w2; 0418 w2 = 0; 0419 0420 word3_muladd_2(&w2, &w1, &w0, x[0], x[3]); 0421 word3_muladd_2(&w2, &w1, &w0, x[1], x[2]); 0422 z[3] = w0; 0423 w0 = w1; 0424 w1 = w2; 0425 w2 = 0; 0426 0427 word3_muladd_2(&w2, &w1, &w0, x[0], x[4]); 0428 word3_muladd_2(&w2, &w1, &w0, x[1], x[3]); 0429 word3_muladd(&w2, &w1, &w0, x[2], x[2]); 0430 z[4] = w0; 0431 w0 = w1; 0432 w1 = w2; 0433 w2 = 0; 0434 0435 word3_muladd_2(&w2, &w1, &w0, x[0], x[5]); 0436 word3_muladd_2(&w2, &w1, &w0, x[1], x[4]); 0437 word3_muladd_2(&w2, &w1, &w0, x[2], x[3]); 0438 z[5] = w0; 0439 w0 = w1; 0440 w1 = w2; 0441 w2 = 0; 0442 0443 word3_muladd_2(&w2, &w1, &w0, x[1], x[5]); 0444 word3_muladd_2(&w2, &w1, &w0, x[2], x[4]); 0445 word3_muladd(&w2, &w1, &w0, x[3], x[3]); 0446 z[6] = w0; 0447 w0 = w1; 0448 w1 = w2; 0449 w2 = 0; 0450 0451 word3_muladd_2(&w2, &w1, &w0, x[2], x[5]); 0452 word3_muladd_2(&w2, &w1, &w0, x[3], x[4]); 0453 z[7] = w0; 0454 w0 = w1; 0455 w1 = w2; 0456 w2 = 0; 0457 0458 word3_muladd_2(&w2, &w1, &w0, x[3], x[5]); 0459 word3_muladd(&w2, &w1, &w0, x[4], x[4]); 0460 z[8] = w0; 0461 w0 = w1; 0462 w1 = w2; 0463 w2 = 0; 0464 0465 word3_muladd_2(&w2, &w1, &w0, x[4], x[5]); 0466 z[9] = w0; 0467 w0 = w1; 0468 w1 = w2; 0469 w2 = 0; 0470 0471 word3_muladd(&w2, &w1, &w0, x[5], x[5]); 0472 z[10] = w0; 0473 z[11] = w1; 0474 } 0475 0476 /************************************************* 0477 * Comba 8x8 Squaring * 0478 *************************************************/ 0479 void bigint_comba_sqr8(word z[16], const word x[8]) 0480 { 0481 word w2 = 0, w1 = 0, w0 = 0; 0482 0483 word3_muladd(&w2, &w1, &w0, x[0], x[0]); 0484 z[0] = w0; 0485 w0 = w1; 0486 w1 = w2; 0487 w2 = 0; 0488 0489 word3_muladd_2(&w2, &w1, &w0, x[0], x[1]); 0490 z[1] = w0; 0491 w0 = w1; 0492 w1 = w2; 0493 w2 = 0; 0494 0495 word3_muladd_2(&w2, &w1, &w0, x[0], x[2]); 0496 word3_muladd(&w2, &w1, &w0, x[1], x[1]); 0497 z[2] = w0; 0498 w0 = w1; 0499 w1 = w2; 0500 w2 = 0; 0501 0502 word3_muladd_2(&w2, &w1, &w0, x[0], x[3]); 0503 word3_muladd_2(&w2, &w1, &w0, x[1], x[2]); 0504 z[3] = w0; 0505 w0 = w1; 0506 w1 = w2; 0507 w2 = 0; 0508 0509 word3_muladd_2(&w2, &w1, &w0, x[0], x[4]); 0510 word3_muladd_2(&w2, &w1, &w0, x[1], x[3]); 0511 word3_muladd(&w2, &w1, &w0, x[2], x[2]); 0512 z[4] = w0; 0513 w0 = w1; 0514 w1 = w2; 0515 w2 = 0; 0516 0517 word3_muladd_2(&w2, &w1, &w0, x[0], x[5]); 0518 word3_muladd_2(&w2, &w1, &w0, x[1], x[4]); 0519 word3_muladd_2(&w2, &w1, &w0, x[2], x[3]); 0520 z[5] = w0; 0521 w0 = w1; 0522 w1 = w2; 0523 w2 = 0; 0524 0525 word3_muladd_2(&w2, &w1, &w0, x[0], x[6]); 0526 word3_muladd_2(&w2, &w1, &w0, x[1], x[5]); 0527 word3_muladd_2(&w2, &w1, &w0, x[2], x[4]); 0528 word3_muladd(&w2, &w1, &w0, x[3], x[3]); 0529 z[6] = w0; 0530 w0 = w1; 0531 w1 = w2; 0532 w2 = 0; 0533 0534 word3_muladd_2(&w2, &w1, &w0, x[0], x[7]); 0535 word3_muladd_2(&w2, &w1, &w0, x[1], x[6]); 0536 word3_muladd_2(&w2, &w1, &w0, x[2], x[5]); 0537 word3_muladd_2(&w2, &w1, &w0, x[3], x[4]); 0538 z[7] = w0; 0539 w0 = w1; 0540 w1 = w2; 0541 w2 = 0; 0542 0543 word3_muladd_2(&w2, &w1, &w0, x[1], x[7]); 0544 word3_muladd_2(&w2, &w1, &w0, x[2], x[6]); 0545 word3_muladd_2(&w2, &w1, &w0, x[3], x[5]); 0546 word3_muladd(&w2, &w1, &w0, x[4], x[4]); 0547 z[8] = w0; 0548 w0 = w1; 0549 w1 = w2; 0550 w2 = 0; 0551 0552 word3_muladd_2(&w2, &w1, &w0, x[2], x[7]); 0553 word3_muladd_2(&w2, &w1, &w0, x[3], x[6]); 0554 word3_muladd_2(&w2, &w1, &w0, x[4], x[5]); 0555 z[9] = w0; 0556 w0 = w1; 0557 w1 = w2; 0558 w2 = 0; 0559 0560 word3_muladd_2(&w2, &w1, &w0, x[3], x[7]); 0561 word3_muladd_2(&w2, &w1, &w0, x[4], x[6]); 0562 word3_muladd(&w2, &w1, &w0, x[5], x[5]); 0563 z[10] = w0; 0564 w0 = w1; 0565 w1 = w2; 0566 w2 = 0; 0567 0568 word3_muladd_2(&w2, &w1, &w0, x[4], x[7]); 0569 word3_muladd_2(&w2, &w1, &w0, x[5], x[6]); 0570 z[11] = w0; 0571 w0 = w1; 0572 w1 = w2; 0573 w2 = 0; 0574 0575 word3_muladd_2(&w2, &w1, &w0, x[5], x[7]); 0576 word3_muladd(&w2, &w1, &w0, x[6], x[6]); 0577 z[12] = w0; 0578 w0 = w1; 0579 w1 = w2; 0580 w2 = 0; 0581 0582 word3_muladd_2(&w2, &w1, &w0, x[6], x[7]); 0583 z[13] = w0; 0584 w0 = w1; 0585 w1 = w2; 0586 w2 = 0; 0587 0588 word3_muladd(&w2, &w1, &w0, x[7], x[7]); 0589 z[14] = w0; 0590 z[15] = w1; 0591 } 0592 } 0593 0594 } 0595 } // WRAPNS_LINE