1 /* sp.c
2  *
3  * Copyright (C) 2006-2021 wolfSSL Inc.
4  *
5  * This file is part of wolfSSL.
6  *
7  * wolfSSL is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * wolfSSL is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
20  */
21 
22 /* Implementation by Sean Parkinson. */
23 
24 #ifdef HAVE_CONFIG_H
25     #include <config.h>
26 #endif
27 
28 #include <wolfssl/wolfcrypt/settings.h>
29 
30 #if defined(WOLFSSL_HAVE_SP_RSA) || defined(WOLFSSL_HAVE_SP_DH) || \
31     defined(WOLFSSL_HAVE_SP_ECC)
32 
33 #include <wolfssl/wolfcrypt/error-crypt.h>
34 #include <wolfssl/wolfcrypt/cpuid.h>
35 #ifdef NO_INLINE
36     #include <wolfssl/wolfcrypt/misc.h>
37 #else
38     #define WOLFSSL_MISC_INCLUDED
39     #include <wolfcrypt/src/misc.c>
40 #endif
41 
42 #ifdef RSA_LOW_MEM
43 #ifndef WOLFSSL_SP_SMALL
44 #define WOLFSSL_SP_SMALL
45 #endif
46 #endif
47 
48 #include <wolfssl/wolfcrypt/sp.h>
49 
50 #ifdef WOLFSSL_SP_ARM_THUMB_ASM
51 #define SP_PRINT_NUM(var, name, total, words, bits)     \
52     do {                                                \
53         int ii;                                         \
54         fprintf(stderr, name "=0x");                    \
55         for (ii = words - 1; ii >= 0; ii--)             \
56             fprintf(stderr, SP_PRINT_FMT, (var)[ii]);   \
57         fprintf(stderr, "\n");                         \
58     } while (0)
59 
60 #define SP_PRINT_VAL(var, name)                         \
61     fprintf(stderr, name "=0x" SP_PRINT_FMT "\n", var)
62 #if defined(WOLFSSL_HAVE_SP_RSA) || defined(WOLFSSL_HAVE_SP_DH)
63 #ifndef WOLFSSL_SP_NO_2048
64 /* Read big endian unsigned byte array into r.
65  *
66  * r  A single precision integer.
67  * size  Maximum number of bytes to convert
68  * a  Byte array.
69  * n  Number of bytes in array to read.
70  */
sp_2048_from_bin(sp_digit * r,int size,const byte * a,int n)71 static void sp_2048_from_bin(sp_digit* r, int size, const byte* a, int n)
72 {
73     int i;
74     int j = 0;
75     word32 s = 0;
76 
77     r[0] = 0;
78     for (i = n-1; i >= 0; i--) {
79         r[j] |= (((sp_digit)a[i]) << s);
80         if (s >= 24U) {
81             r[j] &= 0xffffffff;
82             s = 32U - s;
83             if (j + 1 >= size) {
84                 break;
85             }
86             r[++j] = (sp_digit)a[i] >> s;
87             s = 8U - s;
88         }
89         else {
90             s += 8U;
91         }
92     }
93 
94     for (j++; j < size; j++) {
95         r[j] = 0;
96     }
97 }
98 
99 /* Convert an mp_int to an array of sp_digit.
100  *
101  * r  A single precision integer.
102  * size  Maximum number of bytes to convert
103  * a  A multi-precision integer.
104  */
sp_2048_from_mp(sp_digit * r,int size,const mp_int * a)105 static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a)
106 {
107 #if DIGIT_BIT == 32
108     int j;
109 
110     XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
111 
112     for (j = a->used; j < size; j++) {
113         r[j] = 0;
114     }
115 #elif DIGIT_BIT > 32
116     int i;
117     int j = 0;
118     word32 s = 0;
119 
120     r[0] = 0;
121     for (i = 0; i < a->used && j < size; i++) {
122         r[j] |= ((sp_digit)a->dp[i] << s);
123         r[j] &= 0xffffffff;
124         s = 32U - s;
125         if (j + 1 >= size) {
126             break;
127         }
128         /* lint allow cast of mismatch word32 and mp_digit */
129         r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
130         while ((s + 32U) <= (word32)DIGIT_BIT) {
131             s += 32U;
132             r[j] &= 0xffffffff;
133             if (j + 1 >= size) {
134                 break;
135             }
136             if (s < (word32)DIGIT_BIT) {
137                 /* lint allow cast of mismatch word32 and mp_digit */
138                 r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
139             }
140             else {
141                 r[++j] = (sp_digit)0;
142             }
143         }
144         s = (word32)DIGIT_BIT - s;
145     }
146 
147     for (j++; j < size; j++) {
148         r[j] = 0;
149     }
150 #else
151     int i;
152     int j = 0;
153     int s = 0;
154 
155     r[0] = 0;
156     for (i = 0; i < a->used && j < size; i++) {
157         r[j] |= ((sp_digit)a->dp[i]) << s;
158         if (s + DIGIT_BIT >= 32) {
159             r[j] &= 0xffffffff;
160             if (j + 1 >= size) {
161                 break;
162             }
163             s = 32 - s;
164             if (s == DIGIT_BIT) {
165                 r[++j] = 0;
166                 s = 0;
167             }
168             else {
169                 r[++j] = a->dp[i] >> s;
170                 s = DIGIT_BIT - s;
171             }
172         }
173         else {
174             s += DIGIT_BIT;
175         }
176     }
177 
178     for (j++; j < size; j++) {
179         r[j] = 0;
180     }
181 #endif
182 }
183 
184 /* Write r as big endian to byte array.
185  * Fixed length number of bytes written: 256
186  *
187  * r  A single precision integer.
188  * a  Byte array.
189  */
sp_2048_to_bin_64(sp_digit * r,byte * a)190 static void sp_2048_to_bin_64(sp_digit* r, byte* a)
191 {
192     int i;
193     int j;
194     int s = 0;
195     int b;
196 
197     j = 2048 / 8 - 1;
198     a[j] = 0;
199     for (i=0; i<64 && j>=0; i++) {
200         b = 0;
201         /* lint allow cast of mismatch sp_digit and int */
202         a[j--] |= (byte)(r[i] << s); /*lint !e9033*/
203         b += 8 - s;
204         if (j < 0) {
205             break;
206         }
207         while (b < 32) {
208             a[j--] = (byte)(r[i] >> b);
209             b += 8;
210             if (j < 0) {
211                 break;
212             }
213         }
214         s = 8 - (b - 32);
215         if (j >= 0) {
216             a[j] = 0;
217         }
218         if (s != 0) {
219             j++;
220         }
221     }
222 }
223 
224 #if (defined(WOLFSSL_HAVE_SP_RSA) && (!defined(WOLFSSL_RSA_PUBLIC_ONLY) || !defined(WOLFSSL_SP_SMALL))) || defined(WOLFSSL_HAVE_SP_DH)
225 /* Normalize the values in each word to 32.
226  *
227  * a  Array of sp_digit to normalize.
228  */
229 #define sp_2048_norm_64(a)
230 
231 #endif /* (WOLFSSL_HAVE_SP_RSA && (!WOLFSSL_RSA_PUBLIC_ONLY || !WOLFSSL_SP_SMALL)) || WOLFSSL_HAVE_SP_DH */
232 /* Normalize the values in each word to 32.
233  *
234  * a  Array of sp_digit to normalize.
235  */
236 #define sp_2048_norm_64(a)
237 
238 #ifndef WOLFSSL_SP_SMALL
239 #ifndef WOLFSSL_SP_LARGE_CODE
240 /* Multiply a and b into r. (r = a * b)
241  *
242  * r  A single precision integer.
243  * a  A single precision integer.
244  * b  A single precision integer.
245  */
sp_2048_mul_8(sp_digit * r,const sp_digit * a,const sp_digit * b)246 SP_NOINLINE static void sp_2048_mul_8(sp_digit* r, const sp_digit* a,
247         const sp_digit* b)
248 {
249     sp_digit t[8 * 2];
250     sp_digit* tmp = t;
251     __asm__ __volatile__ (
252         "movs	r3, #0\n\t"
253         "movs	r4, #0\n\t"
254         "mov	r8, r3\n\t"
255         "mov	r11, %[tmp]\n\t"
256         "mov	r9, %[a]\n\t"
257         "mov	r10, %[b]\n\t"
258         "movs	r6, #32\n\t"
259         "add	r6, r6, r9\n\t"
260         "mov	r12, r6\n\t"
261         "\n"
262     "L_sp_2048_mul_8_words_%=:\n\t"
263         "movs	%[tmp], #0\n\t"
264         "movs	r5, #0\n\t"
265         "movs	r6, #28\n\t"
266         "mov	%[a], r8\n\t"
267 #if defined(__clang__) || defined(WOLFSSL_KEIL)
268         "subs	%[a], %[a], r6\n\t"
269 #else
270         "sub	%[a], %[a], r6\n\t"
271 #endif
272 #ifdef WOLFSSL_KEIL
273         "sbcs	r6, r6, r6\n\t"
274 #elif defined(__clang__)
275         "sbcs	r6, r6\n\t"
276 #else
277         "sbc	r6, r6\n\t"
278 #endif
279 #if defined(__clang__) || defined(WOLFSSL_KEIL)
280         "mvns	r6, r6\n\t"
281 #else
282         "mvn	r6, r6\n\t"
283 #endif
284 #ifdef WOLFSSL_KEIL
285         "ands	%[a], %[a], r6\n\t"
286 #elif defined(__clang__)
287         "ands	%[a], r6\n\t"
288 #else
289         "and	%[a], r6\n\t"
290 #endif
291         "mov	%[b], r8\n\t"
292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
293         "subs	%[b], %[b], %[a]\n\t"
294 #else
295         "sub	%[b], %[b], %[a]\n\t"
296 #endif
297         "add	%[a], %[a], r9\n\t"
298         "add	%[b], %[b], r10\n\t"
299         "\n"
300     "L_sp_2048_mul_8_mul_%=:\n\t"
301         "# Multiply Start\n\t"
302         "ldrh	r6, [%[a]]\n\t"
303         "ldrh	r7, [%[b]]\n\t"
304 #ifdef WOLFSSL_KEIL
305         "muls	r7, r6, r7\n\t"
306 #elif defined(__clang__)
307         "muls	r7, r6\n\t"
308 #else
309         "mul	r7, r6\n\t"
310 #endif
311 #if defined(__clang__) || defined(WOLFSSL_KEIL)
312         "adds	r3, r3, r7\n\t"
313 #else
314         "add	r3, r3, r7\n\t"
315 #endif
316 #ifdef WOLFSSL_KEIL
317         "adcs	r4, r4, %[tmp]\n\t"
318 #elif defined(__clang__)
319         "adcs	r4, %[tmp]\n\t"
320 #else
321         "adc	r4, %[tmp]\n\t"
322 #endif
323 #ifdef WOLFSSL_KEIL
324         "adcs	r5, r5, %[tmp]\n\t"
325 #elif defined(__clang__)
326         "adcs	r5, %[tmp]\n\t"
327 #else
328         "adc	r5, %[tmp]\n\t"
329 #endif
330         "ldr	r7, [%[b]]\n\t"
331 #if defined(__clang__) || defined(WOLFSSL_KEIL)
332         "lsrs	r7, r7, #16\n\t"
333 #else
334         "lsr	r7, r7, #16\n\t"
335 #endif
336 #ifdef WOLFSSL_KEIL
337         "muls	r6, r7, r6\n\t"
338 #elif defined(__clang__)
339         "muls	r6, r7\n\t"
340 #else
341         "mul	r6, r7\n\t"
342 #endif
343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
344         "lsrs	r7, r6, #16\n\t"
345 #else
346         "lsr	r7, r6, #16\n\t"
347 #endif
348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
349         "lsls	r6, r6, #16\n\t"
350 #else
351         "lsl	r6, r6, #16\n\t"
352 #endif
353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
354         "adds	r3, r3, r6\n\t"
355 #else
356         "add	r3, r3, r6\n\t"
357 #endif
358 #ifdef WOLFSSL_KEIL
359         "adcs	r4, r4, r7\n\t"
360 #elif defined(__clang__)
361         "adcs	r4, r7\n\t"
362 #else
363         "adc	r4, r7\n\t"
364 #endif
365 #ifdef WOLFSSL_KEIL
366         "adcs	r5, r5, %[tmp]\n\t"
367 #elif defined(__clang__)
368         "adcs	r5, %[tmp]\n\t"
369 #else
370         "adc	r5, %[tmp]\n\t"
371 #endif
372         "ldr	r6, [%[a]]\n\t"
373         "ldr	r7, [%[b]]\n\t"
374 #if defined(__clang__) || defined(WOLFSSL_KEIL)
375         "lsrs	r6, r6, #16\n\t"
376 #else
377         "lsr	r6, r6, #16\n\t"
378 #endif
379 #if defined(__clang__) || defined(WOLFSSL_KEIL)
380         "lsrs	r7, r7, #16\n\t"
381 #else
382         "lsr	r7, r7, #16\n\t"
383 #endif
384 #ifdef WOLFSSL_KEIL
385         "muls	r7, r6, r7\n\t"
386 #elif defined(__clang__)
387         "muls	r7, r6\n\t"
388 #else
389         "mul	r7, r6\n\t"
390 #endif
391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
392         "adds	r4, r4, r7\n\t"
393 #else
394         "add	r4, r4, r7\n\t"
395 #endif
396 #ifdef WOLFSSL_KEIL
397         "adcs	r5, r5, %[tmp]\n\t"
398 #elif defined(__clang__)
399         "adcs	r5, %[tmp]\n\t"
400 #else
401         "adc	r5, %[tmp]\n\t"
402 #endif
403         "ldrh	r7, [%[b]]\n\t"
404 #ifdef WOLFSSL_KEIL
405         "muls	r6, r7, r6\n\t"
406 #elif defined(__clang__)
407         "muls	r6, r7\n\t"
408 #else
409         "mul	r6, r7\n\t"
410 #endif
411 #if defined(__clang__) || defined(WOLFSSL_KEIL)
412         "lsrs	r7, r6, #16\n\t"
413 #else
414         "lsr	r7, r6, #16\n\t"
415 #endif
416 #if defined(__clang__) || defined(WOLFSSL_KEIL)
417         "lsls	r6, r6, #16\n\t"
418 #else
419         "lsl	r6, r6, #16\n\t"
420 #endif
421 #if defined(__clang__) || defined(WOLFSSL_KEIL)
422         "adds	r3, r3, r6\n\t"
423 #else
424         "add	r3, r3, r6\n\t"
425 #endif
426 #ifdef WOLFSSL_KEIL
427         "adcs	r4, r4, r7\n\t"
428 #elif defined(__clang__)
429         "adcs	r4, r7\n\t"
430 #else
431         "adc	r4, r7\n\t"
432 #endif
433 #ifdef WOLFSSL_KEIL
434         "adcs	r5, r5, %[tmp]\n\t"
435 #elif defined(__clang__)
436         "adcs	r5, %[tmp]\n\t"
437 #else
438         "adc	r5, %[tmp]\n\t"
439 #endif
440         "# Multiply Done\n\t"
441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
442         "adds	%[a], %[a], #4\n\t"
443 #else
444         "add	%[a], %[a], #4\n\t"
445 #endif
446 #if defined(__clang__) || defined(WOLFSSL_KEIL)
447         "subs	%[b], %[b], #4\n\t"
448 #else
449         "sub	%[b], %[b], #4\n\t"
450 #endif
451         "cmp	%[a], r12\n\t"
452         "beq	L_sp_2048_mul_8_done_mul_%=\n\t"
453         "mov	r6, r8\n\t"
454         "add	r6, r6, r9\n\t"
455         "cmp	%[a], r6\n\t"
456         "ble	L_sp_2048_mul_8_mul_%=\n\t"
457         "\n"
458     "L_sp_2048_mul_8_done_mul_%=:\n\t"
459         "mov	%[tmp], r11\n\t"
460         "mov	r7, r8\n\t"
461         "str	r3, [%[tmp], r7]\n\t"
462         "movs	r3, r4\n\t"
463         "movs	r4, r5\n\t"
464 #if defined(__clang__) || defined(WOLFSSL_KEIL)
465         "adds	r7, r7, #4\n\t"
466 #else
467         "add	r7, r7, #4\n\t"
468 #endif
469         "mov	r8, r7\n\t"
470         "movs	r6, #56\n\t"
471         "cmp	r7, r6\n\t"
472         "ble	L_sp_2048_mul_8_words_%=\n\t"
473         "str	r3, [%[tmp], r7]\n\t"
474         "mov	%[a], r9\n\t"
475         "mov	%[b], r10\n\t"
476         : [a] "+r" (a), [b] "+r" (b), [tmp] "+r" (tmp)
477         :
478         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
479     );
480 
481     XMEMCPY(r, t, sizeof(t));
482 }
483 
484 #else
485 /* Multiply a and b into r. (r = a * b)
486  *
487  * r  A single precision integer.
488  * a  A single precision integer.
489  * b  A single precision integer.
490  */
sp_2048_mul_8(sp_digit * r,const sp_digit * a,const sp_digit * b)491 SP_NOINLINE static void sp_2048_mul_8(sp_digit* r, const sp_digit* a,
492         const sp_digit* b)
493 {
494     __asm__ __volatile__ (
495         "sub	sp, sp, #32\n\t"
496         "mov	r8, %[r]\n\t"
497         "mov	r9, %[a]\n\t"
498         "mov	r10, %[b]\n\t"
499         "movs	%[r], #0\n\t"
500         "#  A[0] * B[0]\n\t"
501         "ldr	%[a], [%[a]]\n\t"
502         "ldr	%[b], [%[b]]\n\t"
503         "uxth	r6, %[a]\n\t"
504         "uxth	r3, %[b]\n\t"
505 #ifdef WOLFSSL_KEIL
506         "muls	r3, r6, r3\n\t"
507 #elif defined(__clang__)
508         "muls	r3, r6\n\t"
509 #else
510         "mul	r3, r6\n\t"
511 #endif
512 #if defined(__clang__) || defined(WOLFSSL_KEIL)
513         "lsrs	r7, %[b], #16\n\t"
514 #else
515         "lsr	r7, %[b], #16\n\t"
516 #endif
517 #ifdef WOLFSSL_KEIL
518         "muls	r6, r7, r6\n\t"
519 #elif defined(__clang__)
520         "muls	r6, r7\n\t"
521 #else
522         "mul	r6, r7\n\t"
523 #endif
524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
525         "lsrs	r4, r6, #16\n\t"
526 #else
527         "lsr	r4, r6, #16\n\t"
528 #endif
529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
530         "lsls	r6, r6, #16\n\t"
531 #else
532         "lsl	r6, r6, #16\n\t"
533 #endif
534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
535         "adds	r3, r3, r6\n\t"
536 #else
537         "add	r3, r3, r6\n\t"
538 #endif
539 #ifdef WOLFSSL_KEIL
540         "adcs	r4, r4, %[r]\n\t"
541 #elif defined(__clang__)
542         "adcs	r4, %[r]\n\t"
543 #else
544         "adc	r4, %[r]\n\t"
545 #endif
546 #if defined(__clang__) || defined(WOLFSSL_KEIL)
547         "lsrs	r6, %[a], #16\n\t"
548 #else
549         "lsr	r6, %[a], #16\n\t"
550 #endif
551 #ifdef WOLFSSL_KEIL
552         "muls	r7, r6, r7\n\t"
553 #elif defined(__clang__)
554         "muls	r7, r6\n\t"
555 #else
556         "mul	r7, r6\n\t"
557 #endif
558 #if defined(__clang__) || defined(WOLFSSL_KEIL)
559         "adds	r4, r4, r7\n\t"
560 #else
561         "add	r4, r4, r7\n\t"
562 #endif
563         "uxth	r7, %[b]\n\t"
564 #ifdef WOLFSSL_KEIL
565         "muls	r6, r7, r6\n\t"
566 #elif defined(__clang__)
567         "muls	r6, r7\n\t"
568 #else
569         "mul	r6, r7\n\t"
570 #endif
571 #if defined(__clang__) || defined(WOLFSSL_KEIL)
572         "lsrs	r7, r6, #16\n\t"
573 #else
574         "lsr	r7, r6, #16\n\t"
575 #endif
576 #if defined(__clang__) || defined(WOLFSSL_KEIL)
577         "lsls	r6, r6, #16\n\t"
578 #else
579         "lsl	r6, r6, #16\n\t"
580 #endif
581 #if defined(__clang__) || defined(WOLFSSL_KEIL)
582         "adds	r3, r3, r6\n\t"
583 #else
584         "add	r3, r3, r6\n\t"
585 #endif
586 #ifdef WOLFSSL_KEIL
587         "adcs	r4, r4, r7\n\t"
588 #elif defined(__clang__)
589         "adcs	r4, r7\n\t"
590 #else
591         "adc	r4, r7\n\t"
592 #endif
593         "movs	r5, #0\n\t"
594         "str	r3, [sp]\n\t"
595         "#  A[0] * B[1]\n\t"
596         "movs	r3, #0\n\t"
597         "mov	%[a], r9\n\t"
598         "mov	%[b], r10\n\t"
599         "ldr	%[a], [%[a]]\n\t"
600         "ldr	%[b], [%[b], #4]\n\t"
601         "uxth	r6, %[a]\n\t"
602         "uxth	r7, %[b]\n\t"
603 #ifdef WOLFSSL_KEIL
604         "muls	r7, r6, r7\n\t"
605 #elif defined(__clang__)
606         "muls	r7, r6\n\t"
607 #else
608         "mul	r7, r6\n\t"
609 #endif
610 #if defined(__clang__) || defined(WOLFSSL_KEIL)
611         "adds	r4, r4, r7\n\t"
612 #else
613         "add	r4, r4, r7\n\t"
614 #endif
615 #ifdef WOLFSSL_KEIL
616         "adcs	r5, r5, %[r]\n\t"
617 #elif defined(__clang__)
618         "adcs	r5, %[r]\n\t"
619 #else
620         "adc	r5, %[r]\n\t"
621 #endif
622 #ifdef WOLFSSL_KEIL
623         "adcs	r3, r3, %[r]\n\t"
624 #elif defined(__clang__)
625         "adcs	r3, %[r]\n\t"
626 #else
627         "adc	r3, %[r]\n\t"
628 #endif
629 #if defined(__clang__) || defined(WOLFSSL_KEIL)
630         "lsrs	r7, %[b], #16\n\t"
631 #else
632         "lsr	r7, %[b], #16\n\t"
633 #endif
634 #ifdef WOLFSSL_KEIL
635         "muls	r6, r7, r6\n\t"
636 #elif defined(__clang__)
637         "muls	r6, r7\n\t"
638 #else
639         "mul	r6, r7\n\t"
640 #endif
641 #if defined(__clang__) || defined(WOLFSSL_KEIL)
642         "lsrs	r7, r6, #16\n\t"
643 #else
644         "lsr	r7, r6, #16\n\t"
645 #endif
646 #if defined(__clang__) || defined(WOLFSSL_KEIL)
647         "lsls	r6, r6, #16\n\t"
648 #else
649         "lsl	r6, r6, #16\n\t"
650 #endif
651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
652         "adds	r4, r4, r6\n\t"
653 #else
654         "add	r4, r4, r6\n\t"
655 #endif
656 #ifdef WOLFSSL_KEIL
657         "adcs	r5, r5, r7\n\t"
658 #elif defined(__clang__)
659         "adcs	r5, r7\n\t"
660 #else
661         "adc	r5, r7\n\t"
662 #endif
663 #ifdef WOLFSSL_KEIL
664         "adcs	r3, r3, %[r]\n\t"
665 #elif defined(__clang__)
666         "adcs	r3, %[r]\n\t"
667 #else
668         "adc	r3, %[r]\n\t"
669 #endif
670 #if defined(__clang__) || defined(WOLFSSL_KEIL)
671         "lsrs	r6, %[a], #16\n\t"
672 #else
673         "lsr	r6, %[a], #16\n\t"
674 #endif
675 #if defined(__clang__) || defined(WOLFSSL_KEIL)
676         "lsrs	r7, %[b], #16\n\t"
677 #else
678         "lsr	r7, %[b], #16\n\t"
679 #endif
680 #ifdef WOLFSSL_KEIL
681         "muls	r7, r6, r7\n\t"
682 #elif defined(__clang__)
683         "muls	r7, r6\n\t"
684 #else
685         "mul	r7, r6\n\t"
686 #endif
687 #if defined(__clang__) || defined(WOLFSSL_KEIL)
688         "adds	r5, r5, r7\n\t"
689 #else
690         "add	r5, r5, r7\n\t"
691 #endif
692 #ifdef WOLFSSL_KEIL
693         "adcs	r3, r3, %[r]\n\t"
694 #elif defined(__clang__)
695         "adcs	r3, %[r]\n\t"
696 #else
697         "adc	r3, %[r]\n\t"
698 #endif
699         "uxth	r7, %[b]\n\t"
700 #ifdef WOLFSSL_KEIL
701         "muls	r6, r7, r6\n\t"
702 #elif defined(__clang__)
703         "muls	r6, r7\n\t"
704 #else
705         "mul	r6, r7\n\t"
706 #endif
707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
708         "lsrs	r7, r6, #16\n\t"
709 #else
710         "lsr	r7, r6, #16\n\t"
711 #endif
712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
713         "lsls	r6, r6, #16\n\t"
714 #else
715         "lsl	r6, r6, #16\n\t"
716 #endif
717 #if defined(__clang__) || defined(WOLFSSL_KEIL)
718         "adds	r4, r4, r6\n\t"
719 #else
720         "add	r4, r4, r6\n\t"
721 #endif
722 #ifdef WOLFSSL_KEIL
723         "adcs	r5, r5, r7\n\t"
724 #elif defined(__clang__)
725         "adcs	r5, r7\n\t"
726 #else
727         "adc	r5, r7\n\t"
728 #endif
729 #ifdef WOLFSSL_KEIL
730         "adcs	r3, r3, %[r]\n\t"
731 #elif defined(__clang__)
732         "adcs	r3, %[r]\n\t"
733 #else
734         "adc	r3, %[r]\n\t"
735 #endif
736         "#  A[1] * B[0]\n\t"
737         "mov	%[a], r9\n\t"
738         "mov	%[b], r10\n\t"
739         "ldr	%[a], [%[a], #4]\n\t"
740         "ldr	%[b], [%[b]]\n\t"
741         "uxth	r6, %[a]\n\t"
742         "uxth	r7, %[b]\n\t"
743 #ifdef WOLFSSL_KEIL
744         "muls	r7, r6, r7\n\t"
745 #elif defined(__clang__)
746         "muls	r7, r6\n\t"
747 #else
748         "mul	r7, r6\n\t"
749 #endif
750 #if defined(__clang__) || defined(WOLFSSL_KEIL)
751         "adds	r4, r4, r7\n\t"
752 #else
753         "add	r4, r4, r7\n\t"
754 #endif
755 #ifdef WOLFSSL_KEIL
756         "adcs	r5, r5, %[r]\n\t"
757 #elif defined(__clang__)
758         "adcs	r5, %[r]\n\t"
759 #else
760         "adc	r5, %[r]\n\t"
761 #endif
762 #ifdef WOLFSSL_KEIL
763         "adcs	r3, r3, %[r]\n\t"
764 #elif defined(__clang__)
765         "adcs	r3, %[r]\n\t"
766 #else
767         "adc	r3, %[r]\n\t"
768 #endif
769 #if defined(__clang__) || defined(WOLFSSL_KEIL)
770         "lsrs	r7, %[b], #16\n\t"
771 #else
772         "lsr	r7, %[b], #16\n\t"
773 #endif
774 #ifdef WOLFSSL_KEIL
775         "muls	r6, r7, r6\n\t"
776 #elif defined(__clang__)
777         "muls	r6, r7\n\t"
778 #else
779         "mul	r6, r7\n\t"
780 #endif
781 #if defined(__clang__) || defined(WOLFSSL_KEIL)
782         "lsrs	r7, r6, #16\n\t"
783 #else
784         "lsr	r7, r6, #16\n\t"
785 #endif
786 #if defined(__clang__) || defined(WOLFSSL_KEIL)
787         "lsls	r6, r6, #16\n\t"
788 #else
789         "lsl	r6, r6, #16\n\t"
790 #endif
791 #if defined(__clang__) || defined(WOLFSSL_KEIL)
792         "adds	r4, r4, r6\n\t"
793 #else
794         "add	r4, r4, r6\n\t"
795 #endif
796 #ifdef WOLFSSL_KEIL
797         "adcs	r5, r5, r7\n\t"
798 #elif defined(__clang__)
799         "adcs	r5, r7\n\t"
800 #else
801         "adc	r5, r7\n\t"
802 #endif
803 #ifdef WOLFSSL_KEIL
804         "adcs	r3, r3, %[r]\n\t"
805 #elif defined(__clang__)
806         "adcs	r3, %[r]\n\t"
807 #else
808         "adc	r3, %[r]\n\t"
809 #endif
810 #if defined(__clang__) || defined(WOLFSSL_KEIL)
811         "lsrs	r6, %[a], #16\n\t"
812 #else
813         "lsr	r6, %[a], #16\n\t"
814 #endif
815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
816         "lsrs	r7, %[b], #16\n\t"
817 #else
818         "lsr	r7, %[b], #16\n\t"
819 #endif
820 #ifdef WOLFSSL_KEIL
821         "muls	r7, r6, r7\n\t"
822 #elif defined(__clang__)
823         "muls	r7, r6\n\t"
824 #else
825         "mul	r7, r6\n\t"
826 #endif
827 #if defined(__clang__) || defined(WOLFSSL_KEIL)
828         "adds	r5, r5, r7\n\t"
829 #else
830         "add	r5, r5, r7\n\t"
831 #endif
832 #ifdef WOLFSSL_KEIL
833         "adcs	r3, r3, %[r]\n\t"
834 #elif defined(__clang__)
835         "adcs	r3, %[r]\n\t"
836 #else
837         "adc	r3, %[r]\n\t"
838 #endif
839         "uxth	r7, %[b]\n\t"
840 #ifdef WOLFSSL_KEIL
841         "muls	r6, r7, r6\n\t"
842 #elif defined(__clang__)
843         "muls	r6, r7\n\t"
844 #else
845         "mul	r6, r7\n\t"
846 #endif
847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
848         "lsrs	r7, r6, #16\n\t"
849 #else
850         "lsr	r7, r6, #16\n\t"
851 #endif
852 #if defined(__clang__) || defined(WOLFSSL_KEIL)
853         "lsls	r6, r6, #16\n\t"
854 #else
855         "lsl	r6, r6, #16\n\t"
856 #endif
857 #if defined(__clang__) || defined(WOLFSSL_KEIL)
858         "adds	r4, r4, r6\n\t"
859 #else
860         "add	r4, r4, r6\n\t"
861 #endif
862 #ifdef WOLFSSL_KEIL
863         "adcs	r5, r5, r7\n\t"
864 #elif defined(__clang__)
865         "adcs	r5, r7\n\t"
866 #else
867         "adc	r5, r7\n\t"
868 #endif
869 #ifdef WOLFSSL_KEIL
870         "adcs	r3, r3, %[r]\n\t"
871 #elif defined(__clang__)
872         "adcs	r3, %[r]\n\t"
873 #else
874         "adc	r3, %[r]\n\t"
875 #endif
876         "str	r4, [sp, #4]\n\t"
877         "#  A[2] * B[0]\n\t"
878         "movs	r4, #0\n\t"
879         "mov	%[a], r9\n\t"
880         "mov	%[b], r10\n\t"
881         "ldr	%[a], [%[a], #8]\n\t"
882         "ldr	%[b], [%[b]]\n\t"
883         "uxth	r6, %[a]\n\t"
884         "uxth	r7, %[b]\n\t"
885 #ifdef WOLFSSL_KEIL
886         "muls	r7, r6, r7\n\t"
887 #elif defined(__clang__)
888         "muls	r7, r6\n\t"
889 #else
890         "mul	r7, r6\n\t"
891 #endif
892 #if defined(__clang__) || defined(WOLFSSL_KEIL)
893         "adds	r5, r5, r7\n\t"
894 #else
895         "add	r5, r5, r7\n\t"
896 #endif
897 #ifdef WOLFSSL_KEIL
898         "adcs	r3, r3, %[r]\n\t"
899 #elif defined(__clang__)
900         "adcs	r3, %[r]\n\t"
901 #else
902         "adc	r3, %[r]\n\t"
903 #endif
904 #ifdef WOLFSSL_KEIL
905         "adcs	r4, r4, %[r]\n\t"
906 #elif defined(__clang__)
907         "adcs	r4, %[r]\n\t"
908 #else
909         "adc	r4, %[r]\n\t"
910 #endif
911 #if defined(__clang__) || defined(WOLFSSL_KEIL)
912         "lsrs	r7, %[b], #16\n\t"
913 #else
914         "lsr	r7, %[b], #16\n\t"
915 #endif
916 #ifdef WOLFSSL_KEIL
917         "muls	r6, r7, r6\n\t"
918 #elif defined(__clang__)
919         "muls	r6, r7\n\t"
920 #else
921         "mul	r6, r7\n\t"
922 #endif
923 #if defined(__clang__) || defined(WOLFSSL_KEIL)
924         "lsrs	r7, r6, #16\n\t"
925 #else
926         "lsr	r7, r6, #16\n\t"
927 #endif
928 #if defined(__clang__) || defined(WOLFSSL_KEIL)
929         "lsls	r6, r6, #16\n\t"
930 #else
931         "lsl	r6, r6, #16\n\t"
932 #endif
933 #if defined(__clang__) || defined(WOLFSSL_KEIL)
934         "adds	r5, r5, r6\n\t"
935 #else
936         "add	r5, r5, r6\n\t"
937 #endif
938 #ifdef WOLFSSL_KEIL
939         "adcs	r3, r3, r7\n\t"
940 #elif defined(__clang__)
941         "adcs	r3, r7\n\t"
942 #else
943         "adc	r3, r7\n\t"
944 #endif
945 #ifdef WOLFSSL_KEIL
946         "adcs	r4, r4, %[r]\n\t"
947 #elif defined(__clang__)
948         "adcs	r4, %[r]\n\t"
949 #else
950         "adc	r4, %[r]\n\t"
951 #endif
952 #if defined(__clang__) || defined(WOLFSSL_KEIL)
953         "lsrs	r6, %[a], #16\n\t"
954 #else
955         "lsr	r6, %[a], #16\n\t"
956 #endif
957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
958         "lsrs	r7, %[b], #16\n\t"
959 #else
960         "lsr	r7, %[b], #16\n\t"
961 #endif
962 #ifdef WOLFSSL_KEIL
963         "muls	r7, r6, r7\n\t"
964 #elif defined(__clang__)
965         "muls	r7, r6\n\t"
966 #else
967         "mul	r7, r6\n\t"
968 #endif
969 #if defined(__clang__) || defined(WOLFSSL_KEIL)
970         "adds	r3, r3, r7\n\t"
971 #else
972         "add	r3, r3, r7\n\t"
973 #endif
974 #ifdef WOLFSSL_KEIL
975         "adcs	r4, r4, %[r]\n\t"
976 #elif defined(__clang__)
977         "adcs	r4, %[r]\n\t"
978 #else
979         "adc	r4, %[r]\n\t"
980 #endif
981         "uxth	r7, %[b]\n\t"
982 #ifdef WOLFSSL_KEIL
983         "muls	r6, r7, r6\n\t"
984 #elif defined(__clang__)
985         "muls	r6, r7\n\t"
986 #else
987         "mul	r6, r7\n\t"
988 #endif
989 #if defined(__clang__) || defined(WOLFSSL_KEIL)
990         "lsrs	r7, r6, #16\n\t"
991 #else
992         "lsr	r7, r6, #16\n\t"
993 #endif
994 #if defined(__clang__) || defined(WOLFSSL_KEIL)
995         "lsls	r6, r6, #16\n\t"
996 #else
997         "lsl	r6, r6, #16\n\t"
998 #endif
999 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1000         "adds	r5, r5, r6\n\t"
1001 #else
1002         "add	r5, r5, r6\n\t"
1003 #endif
1004 #ifdef WOLFSSL_KEIL
1005         "adcs	r3, r3, r7\n\t"
1006 #elif defined(__clang__)
1007         "adcs	r3, r7\n\t"
1008 #else
1009         "adc	r3, r7\n\t"
1010 #endif
1011 #ifdef WOLFSSL_KEIL
1012         "adcs	r4, r4, %[r]\n\t"
1013 #elif defined(__clang__)
1014         "adcs	r4, %[r]\n\t"
1015 #else
1016         "adc	r4, %[r]\n\t"
1017 #endif
1018         "#  A[1] * B[1]\n\t"
1019         "mov	%[a], r9\n\t"
1020         "mov	%[b], r10\n\t"
1021         "ldr	%[a], [%[a], #4]\n\t"
1022         "ldr	%[b], [%[b], #4]\n\t"
1023         "uxth	r6, %[a]\n\t"
1024         "uxth	r7, %[b]\n\t"
1025 #ifdef WOLFSSL_KEIL
1026         "muls	r7, r6, r7\n\t"
1027 #elif defined(__clang__)
1028         "muls	r7, r6\n\t"
1029 #else
1030         "mul	r7, r6\n\t"
1031 #endif
1032 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1033         "adds	r5, r5, r7\n\t"
1034 #else
1035         "add	r5, r5, r7\n\t"
1036 #endif
1037 #ifdef WOLFSSL_KEIL
1038         "adcs	r3, r3, %[r]\n\t"
1039 #elif defined(__clang__)
1040         "adcs	r3, %[r]\n\t"
1041 #else
1042         "adc	r3, %[r]\n\t"
1043 #endif
1044 #ifdef WOLFSSL_KEIL
1045         "adcs	r4, r4, %[r]\n\t"
1046 #elif defined(__clang__)
1047         "adcs	r4, %[r]\n\t"
1048 #else
1049         "adc	r4, %[r]\n\t"
1050 #endif
1051 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1052         "lsrs	r7, %[b], #16\n\t"
1053 #else
1054         "lsr	r7, %[b], #16\n\t"
1055 #endif
1056 #ifdef WOLFSSL_KEIL
1057         "muls	r6, r7, r6\n\t"
1058 #elif defined(__clang__)
1059         "muls	r6, r7\n\t"
1060 #else
1061         "mul	r6, r7\n\t"
1062 #endif
1063 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1064         "lsrs	r7, r6, #16\n\t"
1065 #else
1066         "lsr	r7, r6, #16\n\t"
1067 #endif
1068 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1069         "lsls	r6, r6, #16\n\t"
1070 #else
1071         "lsl	r6, r6, #16\n\t"
1072 #endif
1073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1074         "adds	r5, r5, r6\n\t"
1075 #else
1076         "add	r5, r5, r6\n\t"
1077 #endif
1078 #ifdef WOLFSSL_KEIL
1079         "adcs	r3, r3, r7\n\t"
1080 #elif defined(__clang__)
1081         "adcs	r3, r7\n\t"
1082 #else
1083         "adc	r3, r7\n\t"
1084 #endif
1085 #ifdef WOLFSSL_KEIL
1086         "adcs	r4, r4, %[r]\n\t"
1087 #elif defined(__clang__)
1088         "adcs	r4, %[r]\n\t"
1089 #else
1090         "adc	r4, %[r]\n\t"
1091 #endif
1092 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1093         "lsrs	r6, %[a], #16\n\t"
1094 #else
1095         "lsr	r6, %[a], #16\n\t"
1096 #endif
1097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1098         "lsrs	r7, %[b], #16\n\t"
1099 #else
1100         "lsr	r7, %[b], #16\n\t"
1101 #endif
1102 #ifdef WOLFSSL_KEIL
1103         "muls	r7, r6, r7\n\t"
1104 #elif defined(__clang__)
1105         "muls	r7, r6\n\t"
1106 #else
1107         "mul	r7, r6\n\t"
1108 #endif
1109 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1110         "adds	r3, r3, r7\n\t"
1111 #else
1112         "add	r3, r3, r7\n\t"
1113 #endif
1114 #ifdef WOLFSSL_KEIL
1115         "adcs	r4, r4, %[r]\n\t"
1116 #elif defined(__clang__)
1117         "adcs	r4, %[r]\n\t"
1118 #else
1119         "adc	r4, %[r]\n\t"
1120 #endif
1121         "uxth	r7, %[b]\n\t"
1122 #ifdef WOLFSSL_KEIL
1123         "muls	r6, r7, r6\n\t"
1124 #elif defined(__clang__)
1125         "muls	r6, r7\n\t"
1126 #else
1127         "mul	r6, r7\n\t"
1128 #endif
1129 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1130         "lsrs	r7, r6, #16\n\t"
1131 #else
1132         "lsr	r7, r6, #16\n\t"
1133 #endif
1134 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1135         "lsls	r6, r6, #16\n\t"
1136 #else
1137         "lsl	r6, r6, #16\n\t"
1138 #endif
1139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1140         "adds	r5, r5, r6\n\t"
1141 #else
1142         "add	r5, r5, r6\n\t"
1143 #endif
1144 #ifdef WOLFSSL_KEIL
1145         "adcs	r3, r3, r7\n\t"
1146 #elif defined(__clang__)
1147         "adcs	r3, r7\n\t"
1148 #else
1149         "adc	r3, r7\n\t"
1150 #endif
1151 #ifdef WOLFSSL_KEIL
1152         "adcs	r4, r4, %[r]\n\t"
1153 #elif defined(__clang__)
1154         "adcs	r4, %[r]\n\t"
1155 #else
1156         "adc	r4, %[r]\n\t"
1157 #endif
1158         "#  A[0] * B[2]\n\t"
1159         "mov	%[a], r9\n\t"
1160         "mov	%[b], r10\n\t"
1161         "ldr	%[a], [%[a]]\n\t"
1162         "ldr	%[b], [%[b], #8]\n\t"
1163         "uxth	r6, %[a]\n\t"
1164         "uxth	r7, %[b]\n\t"
1165 #ifdef WOLFSSL_KEIL
1166         "muls	r7, r6, r7\n\t"
1167 #elif defined(__clang__)
1168         "muls	r7, r6\n\t"
1169 #else
1170         "mul	r7, r6\n\t"
1171 #endif
1172 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1173         "adds	r5, r5, r7\n\t"
1174 #else
1175         "add	r5, r5, r7\n\t"
1176 #endif
1177 #ifdef WOLFSSL_KEIL
1178         "adcs	r3, r3, %[r]\n\t"
1179 #elif defined(__clang__)
1180         "adcs	r3, %[r]\n\t"
1181 #else
1182         "adc	r3, %[r]\n\t"
1183 #endif
1184 #ifdef WOLFSSL_KEIL
1185         "adcs	r4, r4, %[r]\n\t"
1186 #elif defined(__clang__)
1187         "adcs	r4, %[r]\n\t"
1188 #else
1189         "adc	r4, %[r]\n\t"
1190 #endif
1191 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1192         "lsrs	r7, %[b], #16\n\t"
1193 #else
1194         "lsr	r7, %[b], #16\n\t"
1195 #endif
1196 #ifdef WOLFSSL_KEIL
1197         "muls	r6, r7, r6\n\t"
1198 #elif defined(__clang__)
1199         "muls	r6, r7\n\t"
1200 #else
1201         "mul	r6, r7\n\t"
1202 #endif
1203 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1204         "lsrs	r7, r6, #16\n\t"
1205 #else
1206         "lsr	r7, r6, #16\n\t"
1207 #endif
1208 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1209         "lsls	r6, r6, #16\n\t"
1210 #else
1211         "lsl	r6, r6, #16\n\t"
1212 #endif
1213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1214         "adds	r5, r5, r6\n\t"
1215 #else
1216         "add	r5, r5, r6\n\t"
1217 #endif
1218 #ifdef WOLFSSL_KEIL
1219         "adcs	r3, r3, r7\n\t"
1220 #elif defined(__clang__)
1221         "adcs	r3, r7\n\t"
1222 #else
1223         "adc	r3, r7\n\t"
1224 #endif
1225 #ifdef WOLFSSL_KEIL
1226         "adcs	r4, r4, %[r]\n\t"
1227 #elif defined(__clang__)
1228         "adcs	r4, %[r]\n\t"
1229 #else
1230         "adc	r4, %[r]\n\t"
1231 #endif
1232 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1233         "lsrs	r6, %[a], #16\n\t"
1234 #else
1235         "lsr	r6, %[a], #16\n\t"
1236 #endif
1237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1238         "lsrs	r7, %[b], #16\n\t"
1239 #else
1240         "lsr	r7, %[b], #16\n\t"
1241 #endif
1242 #ifdef WOLFSSL_KEIL
1243         "muls	r7, r6, r7\n\t"
1244 #elif defined(__clang__)
1245         "muls	r7, r6\n\t"
1246 #else
1247         "mul	r7, r6\n\t"
1248 #endif
1249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1250         "adds	r3, r3, r7\n\t"
1251 #else
1252         "add	r3, r3, r7\n\t"
1253 #endif
1254 #ifdef WOLFSSL_KEIL
1255         "adcs	r4, r4, %[r]\n\t"
1256 #elif defined(__clang__)
1257         "adcs	r4, %[r]\n\t"
1258 #else
1259         "adc	r4, %[r]\n\t"
1260 #endif
1261         "uxth	r7, %[b]\n\t"
1262 #ifdef WOLFSSL_KEIL
1263         "muls	r6, r7, r6\n\t"
1264 #elif defined(__clang__)
1265         "muls	r6, r7\n\t"
1266 #else
1267         "mul	r6, r7\n\t"
1268 #endif
1269 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1270         "lsrs	r7, r6, #16\n\t"
1271 #else
1272         "lsr	r7, r6, #16\n\t"
1273 #endif
1274 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1275         "lsls	r6, r6, #16\n\t"
1276 #else
1277         "lsl	r6, r6, #16\n\t"
1278 #endif
1279 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1280         "adds	r5, r5, r6\n\t"
1281 #else
1282         "add	r5, r5, r6\n\t"
1283 #endif
1284 #ifdef WOLFSSL_KEIL
1285         "adcs	r3, r3, r7\n\t"
1286 #elif defined(__clang__)
1287         "adcs	r3, r7\n\t"
1288 #else
1289         "adc	r3, r7\n\t"
1290 #endif
1291 #ifdef WOLFSSL_KEIL
1292         "adcs	r4, r4, %[r]\n\t"
1293 #elif defined(__clang__)
1294         "adcs	r4, %[r]\n\t"
1295 #else
1296         "adc	r4, %[r]\n\t"
1297 #endif
1298         "str	r5, [sp, #8]\n\t"
1299         "#  A[0] * B[3]\n\t"
1300         "movs	r5, #0\n\t"
1301         "mov	%[a], r9\n\t"
1302         "mov	%[b], r10\n\t"
1303         "ldr	%[a], [%[a]]\n\t"
1304         "ldr	%[b], [%[b], #12]\n\t"
1305         "uxth	r6, %[a]\n\t"
1306         "uxth	r7, %[b]\n\t"
1307 #ifdef WOLFSSL_KEIL
1308         "muls	r7, r6, r7\n\t"
1309 #elif defined(__clang__)
1310         "muls	r7, r6\n\t"
1311 #else
1312         "mul	r7, r6\n\t"
1313 #endif
1314 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1315         "adds	r3, r3, r7\n\t"
1316 #else
1317         "add	r3, r3, r7\n\t"
1318 #endif
1319 #ifdef WOLFSSL_KEIL
1320         "adcs	r4, r4, %[r]\n\t"
1321 #elif defined(__clang__)
1322         "adcs	r4, %[r]\n\t"
1323 #else
1324         "adc	r4, %[r]\n\t"
1325 #endif
1326 #ifdef WOLFSSL_KEIL
1327         "adcs	r5, r5, %[r]\n\t"
1328 #elif defined(__clang__)
1329         "adcs	r5, %[r]\n\t"
1330 #else
1331         "adc	r5, %[r]\n\t"
1332 #endif
1333 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1334         "lsrs	r7, %[b], #16\n\t"
1335 #else
1336         "lsr	r7, %[b], #16\n\t"
1337 #endif
1338 #ifdef WOLFSSL_KEIL
1339         "muls	r6, r7, r6\n\t"
1340 #elif defined(__clang__)
1341         "muls	r6, r7\n\t"
1342 #else
1343         "mul	r6, r7\n\t"
1344 #endif
1345 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1346         "lsrs	r7, r6, #16\n\t"
1347 #else
1348         "lsr	r7, r6, #16\n\t"
1349 #endif
1350 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1351         "lsls	r6, r6, #16\n\t"
1352 #else
1353         "lsl	r6, r6, #16\n\t"
1354 #endif
1355 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1356         "adds	r3, r3, r6\n\t"
1357 #else
1358         "add	r3, r3, r6\n\t"
1359 #endif
1360 #ifdef WOLFSSL_KEIL
1361         "adcs	r4, r4, r7\n\t"
1362 #elif defined(__clang__)
1363         "adcs	r4, r7\n\t"
1364 #else
1365         "adc	r4, r7\n\t"
1366 #endif
1367 #ifdef WOLFSSL_KEIL
1368         "adcs	r5, r5, %[r]\n\t"
1369 #elif defined(__clang__)
1370         "adcs	r5, %[r]\n\t"
1371 #else
1372         "adc	r5, %[r]\n\t"
1373 #endif
1374 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1375         "lsrs	r6, %[a], #16\n\t"
1376 #else
1377         "lsr	r6, %[a], #16\n\t"
1378 #endif
1379 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1380         "lsrs	r7, %[b], #16\n\t"
1381 #else
1382         "lsr	r7, %[b], #16\n\t"
1383 #endif
1384 #ifdef WOLFSSL_KEIL
1385         "muls	r7, r6, r7\n\t"
1386 #elif defined(__clang__)
1387         "muls	r7, r6\n\t"
1388 #else
1389         "mul	r7, r6\n\t"
1390 #endif
1391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1392         "adds	r4, r4, r7\n\t"
1393 #else
1394         "add	r4, r4, r7\n\t"
1395 #endif
1396 #ifdef WOLFSSL_KEIL
1397         "adcs	r5, r5, %[r]\n\t"
1398 #elif defined(__clang__)
1399         "adcs	r5, %[r]\n\t"
1400 #else
1401         "adc	r5, %[r]\n\t"
1402 #endif
1403         "uxth	r7, %[b]\n\t"
1404 #ifdef WOLFSSL_KEIL
1405         "muls	r6, r7, r6\n\t"
1406 #elif defined(__clang__)
1407         "muls	r6, r7\n\t"
1408 #else
1409         "mul	r6, r7\n\t"
1410 #endif
1411 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1412         "lsrs	r7, r6, #16\n\t"
1413 #else
1414         "lsr	r7, r6, #16\n\t"
1415 #endif
1416 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1417         "lsls	r6, r6, #16\n\t"
1418 #else
1419         "lsl	r6, r6, #16\n\t"
1420 #endif
1421 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1422         "adds	r3, r3, r6\n\t"
1423 #else
1424         "add	r3, r3, r6\n\t"
1425 #endif
1426 #ifdef WOLFSSL_KEIL
1427         "adcs	r4, r4, r7\n\t"
1428 #elif defined(__clang__)
1429         "adcs	r4, r7\n\t"
1430 #else
1431         "adc	r4, r7\n\t"
1432 #endif
1433 #ifdef WOLFSSL_KEIL
1434         "adcs	r5, r5, %[r]\n\t"
1435 #elif defined(__clang__)
1436         "adcs	r5, %[r]\n\t"
1437 #else
1438         "adc	r5, %[r]\n\t"
1439 #endif
1440         "#  A[1] * B[2]\n\t"
1441         "mov	%[a], r9\n\t"
1442         "mov	%[b], r10\n\t"
1443         "ldr	%[a], [%[a], #4]\n\t"
1444         "ldr	%[b], [%[b], #8]\n\t"
1445         "uxth	r6, %[a]\n\t"
1446         "uxth	r7, %[b]\n\t"
1447 #ifdef WOLFSSL_KEIL
1448         "muls	r7, r6, r7\n\t"
1449 #elif defined(__clang__)
1450         "muls	r7, r6\n\t"
1451 #else
1452         "mul	r7, r6\n\t"
1453 #endif
1454 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1455         "adds	r3, r3, r7\n\t"
1456 #else
1457         "add	r3, r3, r7\n\t"
1458 #endif
1459 #ifdef WOLFSSL_KEIL
1460         "adcs	r4, r4, %[r]\n\t"
1461 #elif defined(__clang__)
1462         "adcs	r4, %[r]\n\t"
1463 #else
1464         "adc	r4, %[r]\n\t"
1465 #endif
1466 #ifdef WOLFSSL_KEIL
1467         "adcs	r5, r5, %[r]\n\t"
1468 #elif defined(__clang__)
1469         "adcs	r5, %[r]\n\t"
1470 #else
1471         "adc	r5, %[r]\n\t"
1472 #endif
1473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1474         "lsrs	r7, %[b], #16\n\t"
1475 #else
1476         "lsr	r7, %[b], #16\n\t"
1477 #endif
1478 #ifdef WOLFSSL_KEIL
1479         "muls	r6, r7, r6\n\t"
1480 #elif defined(__clang__)
1481         "muls	r6, r7\n\t"
1482 #else
1483         "mul	r6, r7\n\t"
1484 #endif
1485 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1486         "lsrs	r7, r6, #16\n\t"
1487 #else
1488         "lsr	r7, r6, #16\n\t"
1489 #endif
1490 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1491         "lsls	r6, r6, #16\n\t"
1492 #else
1493         "lsl	r6, r6, #16\n\t"
1494 #endif
1495 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1496         "adds	r3, r3, r6\n\t"
1497 #else
1498         "add	r3, r3, r6\n\t"
1499 #endif
1500 #ifdef WOLFSSL_KEIL
1501         "adcs	r4, r4, r7\n\t"
1502 #elif defined(__clang__)
1503         "adcs	r4, r7\n\t"
1504 #else
1505         "adc	r4, r7\n\t"
1506 #endif
1507 #ifdef WOLFSSL_KEIL
1508         "adcs	r5, r5, %[r]\n\t"
1509 #elif defined(__clang__)
1510         "adcs	r5, %[r]\n\t"
1511 #else
1512         "adc	r5, %[r]\n\t"
1513 #endif
1514 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1515         "lsrs	r6, %[a], #16\n\t"
1516 #else
1517         "lsr	r6, %[a], #16\n\t"
1518 #endif
1519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1520         "lsrs	r7, %[b], #16\n\t"
1521 #else
1522         "lsr	r7, %[b], #16\n\t"
1523 #endif
1524 #ifdef WOLFSSL_KEIL
1525         "muls	r7, r6, r7\n\t"
1526 #elif defined(__clang__)
1527         "muls	r7, r6\n\t"
1528 #else
1529         "mul	r7, r6\n\t"
1530 #endif
1531 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1532         "adds	r4, r4, r7\n\t"
1533 #else
1534         "add	r4, r4, r7\n\t"
1535 #endif
1536 #ifdef WOLFSSL_KEIL
1537         "adcs	r5, r5, %[r]\n\t"
1538 #elif defined(__clang__)
1539         "adcs	r5, %[r]\n\t"
1540 #else
1541         "adc	r5, %[r]\n\t"
1542 #endif
1543         "uxth	r7, %[b]\n\t"
1544 #ifdef WOLFSSL_KEIL
1545         "muls	r6, r7, r6\n\t"
1546 #elif defined(__clang__)
1547         "muls	r6, r7\n\t"
1548 #else
1549         "mul	r6, r7\n\t"
1550 #endif
1551 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1552         "lsrs	r7, r6, #16\n\t"
1553 #else
1554         "lsr	r7, r6, #16\n\t"
1555 #endif
1556 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1557         "lsls	r6, r6, #16\n\t"
1558 #else
1559         "lsl	r6, r6, #16\n\t"
1560 #endif
1561 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1562         "adds	r3, r3, r6\n\t"
1563 #else
1564         "add	r3, r3, r6\n\t"
1565 #endif
1566 #ifdef WOLFSSL_KEIL
1567         "adcs	r4, r4, r7\n\t"
1568 #elif defined(__clang__)
1569         "adcs	r4, r7\n\t"
1570 #else
1571         "adc	r4, r7\n\t"
1572 #endif
1573 #ifdef WOLFSSL_KEIL
1574         "adcs	r5, r5, %[r]\n\t"
1575 #elif defined(__clang__)
1576         "adcs	r5, %[r]\n\t"
1577 #else
1578         "adc	r5, %[r]\n\t"
1579 #endif
1580         "#  A[2] * B[1]\n\t"
1581         "mov	%[a], r9\n\t"
1582         "mov	%[b], r10\n\t"
1583         "ldr	%[a], [%[a], #8]\n\t"
1584         "ldr	%[b], [%[b], #4]\n\t"
1585         "uxth	r6, %[a]\n\t"
1586         "uxth	r7, %[b]\n\t"
1587 #ifdef WOLFSSL_KEIL
1588         "muls	r7, r6, r7\n\t"
1589 #elif defined(__clang__)
1590         "muls	r7, r6\n\t"
1591 #else
1592         "mul	r7, r6\n\t"
1593 #endif
1594 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1595         "adds	r3, r3, r7\n\t"
1596 #else
1597         "add	r3, r3, r7\n\t"
1598 #endif
1599 #ifdef WOLFSSL_KEIL
1600         "adcs	r4, r4, %[r]\n\t"
1601 #elif defined(__clang__)
1602         "adcs	r4, %[r]\n\t"
1603 #else
1604         "adc	r4, %[r]\n\t"
1605 #endif
1606 #ifdef WOLFSSL_KEIL
1607         "adcs	r5, r5, %[r]\n\t"
1608 #elif defined(__clang__)
1609         "adcs	r5, %[r]\n\t"
1610 #else
1611         "adc	r5, %[r]\n\t"
1612 #endif
1613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1614         "lsrs	r7, %[b], #16\n\t"
1615 #else
1616         "lsr	r7, %[b], #16\n\t"
1617 #endif
1618 #ifdef WOLFSSL_KEIL
1619         "muls	r6, r7, r6\n\t"
1620 #elif defined(__clang__)
1621         "muls	r6, r7\n\t"
1622 #else
1623         "mul	r6, r7\n\t"
1624 #endif
1625 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1626         "lsrs	r7, r6, #16\n\t"
1627 #else
1628         "lsr	r7, r6, #16\n\t"
1629 #endif
1630 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1631         "lsls	r6, r6, #16\n\t"
1632 #else
1633         "lsl	r6, r6, #16\n\t"
1634 #endif
1635 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1636         "adds	r3, r3, r6\n\t"
1637 #else
1638         "add	r3, r3, r6\n\t"
1639 #endif
1640 #ifdef WOLFSSL_KEIL
1641         "adcs	r4, r4, r7\n\t"
1642 #elif defined(__clang__)
1643         "adcs	r4, r7\n\t"
1644 #else
1645         "adc	r4, r7\n\t"
1646 #endif
1647 #ifdef WOLFSSL_KEIL
1648         "adcs	r5, r5, %[r]\n\t"
1649 #elif defined(__clang__)
1650         "adcs	r5, %[r]\n\t"
1651 #else
1652         "adc	r5, %[r]\n\t"
1653 #endif
1654 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1655         "lsrs	r6, %[a], #16\n\t"
1656 #else
1657         "lsr	r6, %[a], #16\n\t"
1658 #endif
1659 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1660         "lsrs	r7, %[b], #16\n\t"
1661 #else
1662         "lsr	r7, %[b], #16\n\t"
1663 #endif
1664 #ifdef WOLFSSL_KEIL
1665         "muls	r7, r6, r7\n\t"
1666 #elif defined(__clang__)
1667         "muls	r7, r6\n\t"
1668 #else
1669         "mul	r7, r6\n\t"
1670 #endif
1671 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1672         "adds	r4, r4, r7\n\t"
1673 #else
1674         "add	r4, r4, r7\n\t"
1675 #endif
1676 #ifdef WOLFSSL_KEIL
1677         "adcs	r5, r5, %[r]\n\t"
1678 #elif defined(__clang__)
1679         "adcs	r5, %[r]\n\t"
1680 #else
1681         "adc	r5, %[r]\n\t"
1682 #endif
1683         "uxth	r7, %[b]\n\t"
1684 #ifdef WOLFSSL_KEIL
1685         "muls	r6, r7, r6\n\t"
1686 #elif defined(__clang__)
1687         "muls	r6, r7\n\t"
1688 #else
1689         "mul	r6, r7\n\t"
1690 #endif
1691 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1692         "lsrs	r7, r6, #16\n\t"
1693 #else
1694         "lsr	r7, r6, #16\n\t"
1695 #endif
1696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1697         "lsls	r6, r6, #16\n\t"
1698 #else
1699         "lsl	r6, r6, #16\n\t"
1700 #endif
1701 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1702         "adds	r3, r3, r6\n\t"
1703 #else
1704         "add	r3, r3, r6\n\t"
1705 #endif
1706 #ifdef WOLFSSL_KEIL
1707         "adcs	r4, r4, r7\n\t"
1708 #elif defined(__clang__)
1709         "adcs	r4, r7\n\t"
1710 #else
1711         "adc	r4, r7\n\t"
1712 #endif
1713 #ifdef WOLFSSL_KEIL
1714         "adcs	r5, r5, %[r]\n\t"
1715 #elif defined(__clang__)
1716         "adcs	r5, %[r]\n\t"
1717 #else
1718         "adc	r5, %[r]\n\t"
1719 #endif
1720         "#  A[3] * B[0]\n\t"
1721         "mov	%[a], r9\n\t"
1722         "mov	%[b], r10\n\t"
1723         "ldr	%[a], [%[a], #12]\n\t"
1724         "ldr	%[b], [%[b]]\n\t"
1725         "uxth	r6, %[a]\n\t"
1726         "uxth	r7, %[b]\n\t"
1727 #ifdef WOLFSSL_KEIL
1728         "muls	r7, r6, r7\n\t"
1729 #elif defined(__clang__)
1730         "muls	r7, r6\n\t"
1731 #else
1732         "mul	r7, r6\n\t"
1733 #endif
1734 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1735         "adds	r3, r3, r7\n\t"
1736 #else
1737         "add	r3, r3, r7\n\t"
1738 #endif
1739 #ifdef WOLFSSL_KEIL
1740         "adcs	r4, r4, %[r]\n\t"
1741 #elif defined(__clang__)
1742         "adcs	r4, %[r]\n\t"
1743 #else
1744         "adc	r4, %[r]\n\t"
1745 #endif
1746 #ifdef WOLFSSL_KEIL
1747         "adcs	r5, r5, %[r]\n\t"
1748 #elif defined(__clang__)
1749         "adcs	r5, %[r]\n\t"
1750 #else
1751         "adc	r5, %[r]\n\t"
1752 #endif
1753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1754         "lsrs	r7, %[b], #16\n\t"
1755 #else
1756         "lsr	r7, %[b], #16\n\t"
1757 #endif
1758 #ifdef WOLFSSL_KEIL
1759         "muls	r6, r7, r6\n\t"
1760 #elif defined(__clang__)
1761         "muls	r6, r7\n\t"
1762 #else
1763         "mul	r6, r7\n\t"
1764 #endif
1765 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1766         "lsrs	r7, r6, #16\n\t"
1767 #else
1768         "lsr	r7, r6, #16\n\t"
1769 #endif
1770 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1771         "lsls	r6, r6, #16\n\t"
1772 #else
1773         "lsl	r6, r6, #16\n\t"
1774 #endif
1775 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1776         "adds	r3, r3, r6\n\t"
1777 #else
1778         "add	r3, r3, r6\n\t"
1779 #endif
1780 #ifdef WOLFSSL_KEIL
1781         "adcs	r4, r4, r7\n\t"
1782 #elif defined(__clang__)
1783         "adcs	r4, r7\n\t"
1784 #else
1785         "adc	r4, r7\n\t"
1786 #endif
1787 #ifdef WOLFSSL_KEIL
1788         "adcs	r5, r5, %[r]\n\t"
1789 #elif defined(__clang__)
1790         "adcs	r5, %[r]\n\t"
1791 #else
1792         "adc	r5, %[r]\n\t"
1793 #endif
1794 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1795         "lsrs	r6, %[a], #16\n\t"
1796 #else
1797         "lsr	r6, %[a], #16\n\t"
1798 #endif
1799 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1800         "lsrs	r7, %[b], #16\n\t"
1801 #else
1802         "lsr	r7, %[b], #16\n\t"
1803 #endif
1804 #ifdef WOLFSSL_KEIL
1805         "muls	r7, r6, r7\n\t"
1806 #elif defined(__clang__)
1807         "muls	r7, r6\n\t"
1808 #else
1809         "mul	r7, r6\n\t"
1810 #endif
1811 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1812         "adds	r4, r4, r7\n\t"
1813 #else
1814         "add	r4, r4, r7\n\t"
1815 #endif
1816 #ifdef WOLFSSL_KEIL
1817         "adcs	r5, r5, %[r]\n\t"
1818 #elif defined(__clang__)
1819         "adcs	r5, %[r]\n\t"
1820 #else
1821         "adc	r5, %[r]\n\t"
1822 #endif
1823         "uxth	r7, %[b]\n\t"
1824 #ifdef WOLFSSL_KEIL
1825         "muls	r6, r7, r6\n\t"
1826 #elif defined(__clang__)
1827         "muls	r6, r7\n\t"
1828 #else
1829         "mul	r6, r7\n\t"
1830 #endif
1831 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1832         "lsrs	r7, r6, #16\n\t"
1833 #else
1834         "lsr	r7, r6, #16\n\t"
1835 #endif
1836 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1837         "lsls	r6, r6, #16\n\t"
1838 #else
1839         "lsl	r6, r6, #16\n\t"
1840 #endif
1841 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1842         "adds	r3, r3, r6\n\t"
1843 #else
1844         "add	r3, r3, r6\n\t"
1845 #endif
1846 #ifdef WOLFSSL_KEIL
1847         "adcs	r4, r4, r7\n\t"
1848 #elif defined(__clang__)
1849         "adcs	r4, r7\n\t"
1850 #else
1851         "adc	r4, r7\n\t"
1852 #endif
1853 #ifdef WOLFSSL_KEIL
1854         "adcs	r5, r5, %[r]\n\t"
1855 #elif defined(__clang__)
1856         "adcs	r5, %[r]\n\t"
1857 #else
1858         "adc	r5, %[r]\n\t"
1859 #endif
1860         "str	r3, [sp, #12]\n\t"
1861         "#  A[4] * B[0]\n\t"
1862         "movs	r3, #0\n\t"
1863         "mov	%[a], r9\n\t"
1864         "mov	%[b], r10\n\t"
1865         "ldr	%[a], [%[a], #16]\n\t"
1866         "ldr	%[b], [%[b]]\n\t"
1867         "uxth	r6, %[a]\n\t"
1868         "uxth	r7, %[b]\n\t"
1869 #ifdef WOLFSSL_KEIL
1870         "muls	r7, r6, r7\n\t"
1871 #elif defined(__clang__)
1872         "muls	r7, r6\n\t"
1873 #else
1874         "mul	r7, r6\n\t"
1875 #endif
1876 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1877         "adds	r4, r4, r7\n\t"
1878 #else
1879         "add	r4, r4, r7\n\t"
1880 #endif
1881 #ifdef WOLFSSL_KEIL
1882         "adcs	r5, r5, %[r]\n\t"
1883 #elif defined(__clang__)
1884         "adcs	r5, %[r]\n\t"
1885 #else
1886         "adc	r5, %[r]\n\t"
1887 #endif
1888 #ifdef WOLFSSL_KEIL
1889         "adcs	r3, r3, %[r]\n\t"
1890 #elif defined(__clang__)
1891         "adcs	r3, %[r]\n\t"
1892 #else
1893         "adc	r3, %[r]\n\t"
1894 #endif
1895 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1896         "lsrs	r7, %[b], #16\n\t"
1897 #else
1898         "lsr	r7, %[b], #16\n\t"
1899 #endif
1900 #ifdef WOLFSSL_KEIL
1901         "muls	r6, r7, r6\n\t"
1902 #elif defined(__clang__)
1903         "muls	r6, r7\n\t"
1904 #else
1905         "mul	r6, r7\n\t"
1906 #endif
1907 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1908         "lsrs	r7, r6, #16\n\t"
1909 #else
1910         "lsr	r7, r6, #16\n\t"
1911 #endif
1912 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1913         "lsls	r6, r6, #16\n\t"
1914 #else
1915         "lsl	r6, r6, #16\n\t"
1916 #endif
1917 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1918         "adds	r4, r4, r6\n\t"
1919 #else
1920         "add	r4, r4, r6\n\t"
1921 #endif
1922 #ifdef WOLFSSL_KEIL
1923         "adcs	r5, r5, r7\n\t"
1924 #elif defined(__clang__)
1925         "adcs	r5, r7\n\t"
1926 #else
1927         "adc	r5, r7\n\t"
1928 #endif
1929 #ifdef WOLFSSL_KEIL
1930         "adcs	r3, r3, %[r]\n\t"
1931 #elif defined(__clang__)
1932         "adcs	r3, %[r]\n\t"
1933 #else
1934         "adc	r3, %[r]\n\t"
1935 #endif
1936 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1937         "lsrs	r6, %[a], #16\n\t"
1938 #else
1939         "lsr	r6, %[a], #16\n\t"
1940 #endif
1941 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1942         "lsrs	r7, %[b], #16\n\t"
1943 #else
1944         "lsr	r7, %[b], #16\n\t"
1945 #endif
1946 #ifdef WOLFSSL_KEIL
1947         "muls	r7, r6, r7\n\t"
1948 #elif defined(__clang__)
1949         "muls	r7, r6\n\t"
1950 #else
1951         "mul	r7, r6\n\t"
1952 #endif
1953 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1954         "adds	r5, r5, r7\n\t"
1955 #else
1956         "add	r5, r5, r7\n\t"
1957 #endif
1958 #ifdef WOLFSSL_KEIL
1959         "adcs	r3, r3, %[r]\n\t"
1960 #elif defined(__clang__)
1961         "adcs	r3, %[r]\n\t"
1962 #else
1963         "adc	r3, %[r]\n\t"
1964 #endif
1965         "uxth	r7, %[b]\n\t"
1966 #ifdef WOLFSSL_KEIL
1967         "muls	r6, r7, r6\n\t"
1968 #elif defined(__clang__)
1969         "muls	r6, r7\n\t"
1970 #else
1971         "mul	r6, r7\n\t"
1972 #endif
1973 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1974         "lsrs	r7, r6, #16\n\t"
1975 #else
1976         "lsr	r7, r6, #16\n\t"
1977 #endif
1978 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1979         "lsls	r6, r6, #16\n\t"
1980 #else
1981         "lsl	r6, r6, #16\n\t"
1982 #endif
1983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
1984         "adds	r4, r4, r6\n\t"
1985 #else
1986         "add	r4, r4, r6\n\t"
1987 #endif
1988 #ifdef WOLFSSL_KEIL
1989         "adcs	r5, r5, r7\n\t"
1990 #elif defined(__clang__)
1991         "adcs	r5, r7\n\t"
1992 #else
1993         "adc	r5, r7\n\t"
1994 #endif
1995 #ifdef WOLFSSL_KEIL
1996         "adcs	r3, r3, %[r]\n\t"
1997 #elif defined(__clang__)
1998         "adcs	r3, %[r]\n\t"
1999 #else
2000         "adc	r3, %[r]\n\t"
2001 #endif
2002         "#  A[3] * B[1]\n\t"
2003         "mov	%[a], r9\n\t"
2004         "mov	%[b], r10\n\t"
2005         "ldr	%[a], [%[a], #12]\n\t"
2006         "ldr	%[b], [%[b], #4]\n\t"
2007         "uxth	r6, %[a]\n\t"
2008         "uxth	r7, %[b]\n\t"
2009 #ifdef WOLFSSL_KEIL
2010         "muls	r7, r6, r7\n\t"
2011 #elif defined(__clang__)
2012         "muls	r7, r6\n\t"
2013 #else
2014         "mul	r7, r6\n\t"
2015 #endif
2016 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2017         "adds	r4, r4, r7\n\t"
2018 #else
2019         "add	r4, r4, r7\n\t"
2020 #endif
2021 #ifdef WOLFSSL_KEIL
2022         "adcs	r5, r5, %[r]\n\t"
2023 #elif defined(__clang__)
2024         "adcs	r5, %[r]\n\t"
2025 #else
2026         "adc	r5, %[r]\n\t"
2027 #endif
2028 #ifdef WOLFSSL_KEIL
2029         "adcs	r3, r3, %[r]\n\t"
2030 #elif defined(__clang__)
2031         "adcs	r3, %[r]\n\t"
2032 #else
2033         "adc	r3, %[r]\n\t"
2034 #endif
2035 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2036         "lsrs	r7, %[b], #16\n\t"
2037 #else
2038         "lsr	r7, %[b], #16\n\t"
2039 #endif
2040 #ifdef WOLFSSL_KEIL
2041         "muls	r6, r7, r6\n\t"
2042 #elif defined(__clang__)
2043         "muls	r6, r7\n\t"
2044 #else
2045         "mul	r6, r7\n\t"
2046 #endif
2047 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2048         "lsrs	r7, r6, #16\n\t"
2049 #else
2050         "lsr	r7, r6, #16\n\t"
2051 #endif
2052 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2053         "lsls	r6, r6, #16\n\t"
2054 #else
2055         "lsl	r6, r6, #16\n\t"
2056 #endif
2057 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2058         "adds	r4, r4, r6\n\t"
2059 #else
2060         "add	r4, r4, r6\n\t"
2061 #endif
2062 #ifdef WOLFSSL_KEIL
2063         "adcs	r5, r5, r7\n\t"
2064 #elif defined(__clang__)
2065         "adcs	r5, r7\n\t"
2066 #else
2067         "adc	r5, r7\n\t"
2068 #endif
2069 #ifdef WOLFSSL_KEIL
2070         "adcs	r3, r3, %[r]\n\t"
2071 #elif defined(__clang__)
2072         "adcs	r3, %[r]\n\t"
2073 #else
2074         "adc	r3, %[r]\n\t"
2075 #endif
2076 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2077         "lsrs	r6, %[a], #16\n\t"
2078 #else
2079         "lsr	r6, %[a], #16\n\t"
2080 #endif
2081 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2082         "lsrs	r7, %[b], #16\n\t"
2083 #else
2084         "lsr	r7, %[b], #16\n\t"
2085 #endif
2086 #ifdef WOLFSSL_KEIL
2087         "muls	r7, r6, r7\n\t"
2088 #elif defined(__clang__)
2089         "muls	r7, r6\n\t"
2090 #else
2091         "mul	r7, r6\n\t"
2092 #endif
2093 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2094         "adds	r5, r5, r7\n\t"
2095 #else
2096         "add	r5, r5, r7\n\t"
2097 #endif
2098 #ifdef WOLFSSL_KEIL
2099         "adcs	r3, r3, %[r]\n\t"
2100 #elif defined(__clang__)
2101         "adcs	r3, %[r]\n\t"
2102 #else
2103         "adc	r3, %[r]\n\t"
2104 #endif
2105         "uxth	r7, %[b]\n\t"
2106 #ifdef WOLFSSL_KEIL
2107         "muls	r6, r7, r6\n\t"
2108 #elif defined(__clang__)
2109         "muls	r6, r7\n\t"
2110 #else
2111         "mul	r6, r7\n\t"
2112 #endif
2113 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2114         "lsrs	r7, r6, #16\n\t"
2115 #else
2116         "lsr	r7, r6, #16\n\t"
2117 #endif
2118 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2119         "lsls	r6, r6, #16\n\t"
2120 #else
2121         "lsl	r6, r6, #16\n\t"
2122 #endif
2123 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2124         "adds	r4, r4, r6\n\t"
2125 #else
2126         "add	r4, r4, r6\n\t"
2127 #endif
2128 #ifdef WOLFSSL_KEIL
2129         "adcs	r5, r5, r7\n\t"
2130 #elif defined(__clang__)
2131         "adcs	r5, r7\n\t"
2132 #else
2133         "adc	r5, r7\n\t"
2134 #endif
2135 #ifdef WOLFSSL_KEIL
2136         "adcs	r3, r3, %[r]\n\t"
2137 #elif defined(__clang__)
2138         "adcs	r3, %[r]\n\t"
2139 #else
2140         "adc	r3, %[r]\n\t"
2141 #endif
2142         "#  A[2] * B[2]\n\t"
2143         "mov	%[a], r9\n\t"
2144         "mov	%[b], r10\n\t"
2145         "ldr	%[a], [%[a], #8]\n\t"
2146         "ldr	%[b], [%[b], #8]\n\t"
2147         "uxth	r6, %[a]\n\t"
2148         "uxth	r7, %[b]\n\t"
2149 #ifdef WOLFSSL_KEIL
2150         "muls	r7, r6, r7\n\t"
2151 #elif defined(__clang__)
2152         "muls	r7, r6\n\t"
2153 #else
2154         "mul	r7, r6\n\t"
2155 #endif
2156 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2157         "adds	r4, r4, r7\n\t"
2158 #else
2159         "add	r4, r4, r7\n\t"
2160 #endif
2161 #ifdef WOLFSSL_KEIL
2162         "adcs	r5, r5, %[r]\n\t"
2163 #elif defined(__clang__)
2164         "adcs	r5, %[r]\n\t"
2165 #else
2166         "adc	r5, %[r]\n\t"
2167 #endif
2168 #ifdef WOLFSSL_KEIL
2169         "adcs	r3, r3, %[r]\n\t"
2170 #elif defined(__clang__)
2171         "adcs	r3, %[r]\n\t"
2172 #else
2173         "adc	r3, %[r]\n\t"
2174 #endif
2175 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2176         "lsrs	r7, %[b], #16\n\t"
2177 #else
2178         "lsr	r7, %[b], #16\n\t"
2179 #endif
2180 #ifdef WOLFSSL_KEIL
2181         "muls	r6, r7, r6\n\t"
2182 #elif defined(__clang__)
2183         "muls	r6, r7\n\t"
2184 #else
2185         "mul	r6, r7\n\t"
2186 #endif
2187 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2188         "lsrs	r7, r6, #16\n\t"
2189 #else
2190         "lsr	r7, r6, #16\n\t"
2191 #endif
2192 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2193         "lsls	r6, r6, #16\n\t"
2194 #else
2195         "lsl	r6, r6, #16\n\t"
2196 #endif
2197 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2198         "adds	r4, r4, r6\n\t"
2199 #else
2200         "add	r4, r4, r6\n\t"
2201 #endif
2202 #ifdef WOLFSSL_KEIL
2203         "adcs	r5, r5, r7\n\t"
2204 #elif defined(__clang__)
2205         "adcs	r5, r7\n\t"
2206 #else
2207         "adc	r5, r7\n\t"
2208 #endif
2209 #ifdef WOLFSSL_KEIL
2210         "adcs	r3, r3, %[r]\n\t"
2211 #elif defined(__clang__)
2212         "adcs	r3, %[r]\n\t"
2213 #else
2214         "adc	r3, %[r]\n\t"
2215 #endif
2216 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2217         "lsrs	r6, %[a], #16\n\t"
2218 #else
2219         "lsr	r6, %[a], #16\n\t"
2220 #endif
2221 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2222         "lsrs	r7, %[b], #16\n\t"
2223 #else
2224         "lsr	r7, %[b], #16\n\t"
2225 #endif
2226 #ifdef WOLFSSL_KEIL
2227         "muls	r7, r6, r7\n\t"
2228 #elif defined(__clang__)
2229         "muls	r7, r6\n\t"
2230 #else
2231         "mul	r7, r6\n\t"
2232 #endif
2233 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2234         "adds	r5, r5, r7\n\t"
2235 #else
2236         "add	r5, r5, r7\n\t"
2237 #endif
2238 #ifdef WOLFSSL_KEIL
2239         "adcs	r3, r3, %[r]\n\t"
2240 #elif defined(__clang__)
2241         "adcs	r3, %[r]\n\t"
2242 #else
2243         "adc	r3, %[r]\n\t"
2244 #endif
2245         "uxth	r7, %[b]\n\t"
2246 #ifdef WOLFSSL_KEIL
2247         "muls	r6, r7, r6\n\t"
2248 #elif defined(__clang__)
2249         "muls	r6, r7\n\t"
2250 #else
2251         "mul	r6, r7\n\t"
2252 #endif
2253 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2254         "lsrs	r7, r6, #16\n\t"
2255 #else
2256         "lsr	r7, r6, #16\n\t"
2257 #endif
2258 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2259         "lsls	r6, r6, #16\n\t"
2260 #else
2261         "lsl	r6, r6, #16\n\t"
2262 #endif
2263 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2264         "adds	r4, r4, r6\n\t"
2265 #else
2266         "add	r4, r4, r6\n\t"
2267 #endif
2268 #ifdef WOLFSSL_KEIL
2269         "adcs	r5, r5, r7\n\t"
2270 #elif defined(__clang__)
2271         "adcs	r5, r7\n\t"
2272 #else
2273         "adc	r5, r7\n\t"
2274 #endif
2275 #ifdef WOLFSSL_KEIL
2276         "adcs	r3, r3, %[r]\n\t"
2277 #elif defined(__clang__)
2278         "adcs	r3, %[r]\n\t"
2279 #else
2280         "adc	r3, %[r]\n\t"
2281 #endif
2282         "#  A[1] * B[3]\n\t"
2283         "mov	%[a], r9\n\t"
2284         "mov	%[b], r10\n\t"
2285         "ldr	%[a], [%[a], #4]\n\t"
2286         "ldr	%[b], [%[b], #12]\n\t"
2287         "uxth	r6, %[a]\n\t"
2288         "uxth	r7, %[b]\n\t"
2289 #ifdef WOLFSSL_KEIL
2290         "muls	r7, r6, r7\n\t"
2291 #elif defined(__clang__)
2292         "muls	r7, r6\n\t"
2293 #else
2294         "mul	r7, r6\n\t"
2295 #endif
2296 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2297         "adds	r4, r4, r7\n\t"
2298 #else
2299         "add	r4, r4, r7\n\t"
2300 #endif
2301 #ifdef WOLFSSL_KEIL
2302         "adcs	r5, r5, %[r]\n\t"
2303 #elif defined(__clang__)
2304         "adcs	r5, %[r]\n\t"
2305 #else
2306         "adc	r5, %[r]\n\t"
2307 #endif
2308 #ifdef WOLFSSL_KEIL
2309         "adcs	r3, r3, %[r]\n\t"
2310 #elif defined(__clang__)
2311         "adcs	r3, %[r]\n\t"
2312 #else
2313         "adc	r3, %[r]\n\t"
2314 #endif
2315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2316         "lsrs	r7, %[b], #16\n\t"
2317 #else
2318         "lsr	r7, %[b], #16\n\t"
2319 #endif
2320 #ifdef WOLFSSL_KEIL
2321         "muls	r6, r7, r6\n\t"
2322 #elif defined(__clang__)
2323         "muls	r6, r7\n\t"
2324 #else
2325         "mul	r6, r7\n\t"
2326 #endif
2327 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2328         "lsrs	r7, r6, #16\n\t"
2329 #else
2330         "lsr	r7, r6, #16\n\t"
2331 #endif
2332 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2333         "lsls	r6, r6, #16\n\t"
2334 #else
2335         "lsl	r6, r6, #16\n\t"
2336 #endif
2337 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2338         "adds	r4, r4, r6\n\t"
2339 #else
2340         "add	r4, r4, r6\n\t"
2341 #endif
2342 #ifdef WOLFSSL_KEIL
2343         "adcs	r5, r5, r7\n\t"
2344 #elif defined(__clang__)
2345         "adcs	r5, r7\n\t"
2346 #else
2347         "adc	r5, r7\n\t"
2348 #endif
2349 #ifdef WOLFSSL_KEIL
2350         "adcs	r3, r3, %[r]\n\t"
2351 #elif defined(__clang__)
2352         "adcs	r3, %[r]\n\t"
2353 #else
2354         "adc	r3, %[r]\n\t"
2355 #endif
2356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2357         "lsrs	r6, %[a], #16\n\t"
2358 #else
2359         "lsr	r6, %[a], #16\n\t"
2360 #endif
2361 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2362         "lsrs	r7, %[b], #16\n\t"
2363 #else
2364         "lsr	r7, %[b], #16\n\t"
2365 #endif
2366 #ifdef WOLFSSL_KEIL
2367         "muls	r7, r6, r7\n\t"
2368 #elif defined(__clang__)
2369         "muls	r7, r6\n\t"
2370 #else
2371         "mul	r7, r6\n\t"
2372 #endif
2373 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2374         "adds	r5, r5, r7\n\t"
2375 #else
2376         "add	r5, r5, r7\n\t"
2377 #endif
2378 #ifdef WOLFSSL_KEIL
2379         "adcs	r3, r3, %[r]\n\t"
2380 #elif defined(__clang__)
2381         "adcs	r3, %[r]\n\t"
2382 #else
2383         "adc	r3, %[r]\n\t"
2384 #endif
2385         "uxth	r7, %[b]\n\t"
2386 #ifdef WOLFSSL_KEIL
2387         "muls	r6, r7, r6\n\t"
2388 #elif defined(__clang__)
2389         "muls	r6, r7\n\t"
2390 #else
2391         "mul	r6, r7\n\t"
2392 #endif
2393 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2394         "lsrs	r7, r6, #16\n\t"
2395 #else
2396         "lsr	r7, r6, #16\n\t"
2397 #endif
2398 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2399         "lsls	r6, r6, #16\n\t"
2400 #else
2401         "lsl	r6, r6, #16\n\t"
2402 #endif
2403 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2404         "adds	r4, r4, r6\n\t"
2405 #else
2406         "add	r4, r4, r6\n\t"
2407 #endif
2408 #ifdef WOLFSSL_KEIL
2409         "adcs	r5, r5, r7\n\t"
2410 #elif defined(__clang__)
2411         "adcs	r5, r7\n\t"
2412 #else
2413         "adc	r5, r7\n\t"
2414 #endif
2415 #ifdef WOLFSSL_KEIL
2416         "adcs	r3, r3, %[r]\n\t"
2417 #elif defined(__clang__)
2418         "adcs	r3, %[r]\n\t"
2419 #else
2420         "adc	r3, %[r]\n\t"
2421 #endif
2422         "#  A[0] * B[4]\n\t"
2423         "mov	%[a], r9\n\t"
2424         "mov	%[b], r10\n\t"
2425         "ldr	%[a], [%[a]]\n\t"
2426         "ldr	%[b], [%[b], #16]\n\t"
2427         "uxth	r6, %[a]\n\t"
2428         "uxth	r7, %[b]\n\t"
2429 #ifdef WOLFSSL_KEIL
2430         "muls	r7, r6, r7\n\t"
2431 #elif defined(__clang__)
2432         "muls	r7, r6\n\t"
2433 #else
2434         "mul	r7, r6\n\t"
2435 #endif
2436 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2437         "adds	r4, r4, r7\n\t"
2438 #else
2439         "add	r4, r4, r7\n\t"
2440 #endif
2441 #ifdef WOLFSSL_KEIL
2442         "adcs	r5, r5, %[r]\n\t"
2443 #elif defined(__clang__)
2444         "adcs	r5, %[r]\n\t"
2445 #else
2446         "adc	r5, %[r]\n\t"
2447 #endif
2448 #ifdef WOLFSSL_KEIL
2449         "adcs	r3, r3, %[r]\n\t"
2450 #elif defined(__clang__)
2451         "adcs	r3, %[r]\n\t"
2452 #else
2453         "adc	r3, %[r]\n\t"
2454 #endif
2455 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2456         "lsrs	r7, %[b], #16\n\t"
2457 #else
2458         "lsr	r7, %[b], #16\n\t"
2459 #endif
2460 #ifdef WOLFSSL_KEIL
2461         "muls	r6, r7, r6\n\t"
2462 #elif defined(__clang__)
2463         "muls	r6, r7\n\t"
2464 #else
2465         "mul	r6, r7\n\t"
2466 #endif
2467 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2468         "lsrs	r7, r6, #16\n\t"
2469 #else
2470         "lsr	r7, r6, #16\n\t"
2471 #endif
2472 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2473         "lsls	r6, r6, #16\n\t"
2474 #else
2475         "lsl	r6, r6, #16\n\t"
2476 #endif
2477 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2478         "adds	r4, r4, r6\n\t"
2479 #else
2480         "add	r4, r4, r6\n\t"
2481 #endif
2482 #ifdef WOLFSSL_KEIL
2483         "adcs	r5, r5, r7\n\t"
2484 #elif defined(__clang__)
2485         "adcs	r5, r7\n\t"
2486 #else
2487         "adc	r5, r7\n\t"
2488 #endif
2489 #ifdef WOLFSSL_KEIL
2490         "adcs	r3, r3, %[r]\n\t"
2491 #elif defined(__clang__)
2492         "adcs	r3, %[r]\n\t"
2493 #else
2494         "adc	r3, %[r]\n\t"
2495 #endif
2496 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2497         "lsrs	r6, %[a], #16\n\t"
2498 #else
2499         "lsr	r6, %[a], #16\n\t"
2500 #endif
2501 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2502         "lsrs	r7, %[b], #16\n\t"
2503 #else
2504         "lsr	r7, %[b], #16\n\t"
2505 #endif
2506 #ifdef WOLFSSL_KEIL
2507         "muls	r7, r6, r7\n\t"
2508 #elif defined(__clang__)
2509         "muls	r7, r6\n\t"
2510 #else
2511         "mul	r7, r6\n\t"
2512 #endif
2513 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2514         "adds	r5, r5, r7\n\t"
2515 #else
2516         "add	r5, r5, r7\n\t"
2517 #endif
2518 #ifdef WOLFSSL_KEIL
2519         "adcs	r3, r3, %[r]\n\t"
2520 #elif defined(__clang__)
2521         "adcs	r3, %[r]\n\t"
2522 #else
2523         "adc	r3, %[r]\n\t"
2524 #endif
2525         "uxth	r7, %[b]\n\t"
2526 #ifdef WOLFSSL_KEIL
2527         "muls	r6, r7, r6\n\t"
2528 #elif defined(__clang__)
2529         "muls	r6, r7\n\t"
2530 #else
2531         "mul	r6, r7\n\t"
2532 #endif
2533 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2534         "lsrs	r7, r6, #16\n\t"
2535 #else
2536         "lsr	r7, r6, #16\n\t"
2537 #endif
2538 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2539         "lsls	r6, r6, #16\n\t"
2540 #else
2541         "lsl	r6, r6, #16\n\t"
2542 #endif
2543 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2544         "adds	r4, r4, r6\n\t"
2545 #else
2546         "add	r4, r4, r6\n\t"
2547 #endif
2548 #ifdef WOLFSSL_KEIL
2549         "adcs	r5, r5, r7\n\t"
2550 #elif defined(__clang__)
2551         "adcs	r5, r7\n\t"
2552 #else
2553         "adc	r5, r7\n\t"
2554 #endif
2555 #ifdef WOLFSSL_KEIL
2556         "adcs	r3, r3, %[r]\n\t"
2557 #elif defined(__clang__)
2558         "adcs	r3, %[r]\n\t"
2559 #else
2560         "adc	r3, %[r]\n\t"
2561 #endif
2562         "str	r4, [sp, #16]\n\t"
2563         "#  A[0] * B[5]\n\t"
2564         "movs	r4, #0\n\t"
2565         "mov	%[a], r9\n\t"
2566         "mov	%[b], r10\n\t"
2567         "ldr	%[a], [%[a]]\n\t"
2568         "ldr	%[b], [%[b], #20]\n\t"
2569         "uxth	r6, %[a]\n\t"
2570         "uxth	r7, %[b]\n\t"
2571 #ifdef WOLFSSL_KEIL
2572         "muls	r7, r6, r7\n\t"
2573 #elif defined(__clang__)
2574         "muls	r7, r6\n\t"
2575 #else
2576         "mul	r7, r6\n\t"
2577 #endif
2578 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2579         "adds	r5, r5, r7\n\t"
2580 #else
2581         "add	r5, r5, r7\n\t"
2582 #endif
2583 #ifdef WOLFSSL_KEIL
2584         "adcs	r3, r3, %[r]\n\t"
2585 #elif defined(__clang__)
2586         "adcs	r3, %[r]\n\t"
2587 #else
2588         "adc	r3, %[r]\n\t"
2589 #endif
2590 #ifdef WOLFSSL_KEIL
2591         "adcs	r4, r4, %[r]\n\t"
2592 #elif defined(__clang__)
2593         "adcs	r4, %[r]\n\t"
2594 #else
2595         "adc	r4, %[r]\n\t"
2596 #endif
2597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2598         "lsrs	r7, %[b], #16\n\t"
2599 #else
2600         "lsr	r7, %[b], #16\n\t"
2601 #endif
2602 #ifdef WOLFSSL_KEIL
2603         "muls	r6, r7, r6\n\t"
2604 #elif defined(__clang__)
2605         "muls	r6, r7\n\t"
2606 #else
2607         "mul	r6, r7\n\t"
2608 #endif
2609 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2610         "lsrs	r7, r6, #16\n\t"
2611 #else
2612         "lsr	r7, r6, #16\n\t"
2613 #endif
2614 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2615         "lsls	r6, r6, #16\n\t"
2616 #else
2617         "lsl	r6, r6, #16\n\t"
2618 #endif
2619 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2620         "adds	r5, r5, r6\n\t"
2621 #else
2622         "add	r5, r5, r6\n\t"
2623 #endif
2624 #ifdef WOLFSSL_KEIL
2625         "adcs	r3, r3, r7\n\t"
2626 #elif defined(__clang__)
2627         "adcs	r3, r7\n\t"
2628 #else
2629         "adc	r3, r7\n\t"
2630 #endif
2631 #ifdef WOLFSSL_KEIL
2632         "adcs	r4, r4, %[r]\n\t"
2633 #elif defined(__clang__)
2634         "adcs	r4, %[r]\n\t"
2635 #else
2636         "adc	r4, %[r]\n\t"
2637 #endif
2638 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2639         "lsrs	r6, %[a], #16\n\t"
2640 #else
2641         "lsr	r6, %[a], #16\n\t"
2642 #endif
2643 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2644         "lsrs	r7, %[b], #16\n\t"
2645 #else
2646         "lsr	r7, %[b], #16\n\t"
2647 #endif
2648 #ifdef WOLFSSL_KEIL
2649         "muls	r7, r6, r7\n\t"
2650 #elif defined(__clang__)
2651         "muls	r7, r6\n\t"
2652 #else
2653         "mul	r7, r6\n\t"
2654 #endif
2655 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2656         "adds	r3, r3, r7\n\t"
2657 #else
2658         "add	r3, r3, r7\n\t"
2659 #endif
2660 #ifdef WOLFSSL_KEIL
2661         "adcs	r4, r4, %[r]\n\t"
2662 #elif defined(__clang__)
2663         "adcs	r4, %[r]\n\t"
2664 #else
2665         "adc	r4, %[r]\n\t"
2666 #endif
2667         "uxth	r7, %[b]\n\t"
2668 #ifdef WOLFSSL_KEIL
2669         "muls	r6, r7, r6\n\t"
2670 #elif defined(__clang__)
2671         "muls	r6, r7\n\t"
2672 #else
2673         "mul	r6, r7\n\t"
2674 #endif
2675 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2676         "lsrs	r7, r6, #16\n\t"
2677 #else
2678         "lsr	r7, r6, #16\n\t"
2679 #endif
2680 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2681         "lsls	r6, r6, #16\n\t"
2682 #else
2683         "lsl	r6, r6, #16\n\t"
2684 #endif
2685 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2686         "adds	r5, r5, r6\n\t"
2687 #else
2688         "add	r5, r5, r6\n\t"
2689 #endif
2690 #ifdef WOLFSSL_KEIL
2691         "adcs	r3, r3, r7\n\t"
2692 #elif defined(__clang__)
2693         "adcs	r3, r7\n\t"
2694 #else
2695         "adc	r3, r7\n\t"
2696 #endif
2697 #ifdef WOLFSSL_KEIL
2698         "adcs	r4, r4, %[r]\n\t"
2699 #elif defined(__clang__)
2700         "adcs	r4, %[r]\n\t"
2701 #else
2702         "adc	r4, %[r]\n\t"
2703 #endif
2704         "#  A[1] * B[4]\n\t"
2705         "mov	%[a], r9\n\t"
2706         "mov	%[b], r10\n\t"
2707         "ldr	%[a], [%[a], #4]\n\t"
2708         "ldr	%[b], [%[b], #16]\n\t"
2709         "uxth	r6, %[a]\n\t"
2710         "uxth	r7, %[b]\n\t"
2711 #ifdef WOLFSSL_KEIL
2712         "muls	r7, r6, r7\n\t"
2713 #elif defined(__clang__)
2714         "muls	r7, r6\n\t"
2715 #else
2716         "mul	r7, r6\n\t"
2717 #endif
2718 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2719         "adds	r5, r5, r7\n\t"
2720 #else
2721         "add	r5, r5, r7\n\t"
2722 #endif
2723 #ifdef WOLFSSL_KEIL
2724         "adcs	r3, r3, %[r]\n\t"
2725 #elif defined(__clang__)
2726         "adcs	r3, %[r]\n\t"
2727 #else
2728         "adc	r3, %[r]\n\t"
2729 #endif
2730 #ifdef WOLFSSL_KEIL
2731         "adcs	r4, r4, %[r]\n\t"
2732 #elif defined(__clang__)
2733         "adcs	r4, %[r]\n\t"
2734 #else
2735         "adc	r4, %[r]\n\t"
2736 #endif
2737 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2738         "lsrs	r7, %[b], #16\n\t"
2739 #else
2740         "lsr	r7, %[b], #16\n\t"
2741 #endif
2742 #ifdef WOLFSSL_KEIL
2743         "muls	r6, r7, r6\n\t"
2744 #elif defined(__clang__)
2745         "muls	r6, r7\n\t"
2746 #else
2747         "mul	r6, r7\n\t"
2748 #endif
2749 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2750         "lsrs	r7, r6, #16\n\t"
2751 #else
2752         "lsr	r7, r6, #16\n\t"
2753 #endif
2754 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2755         "lsls	r6, r6, #16\n\t"
2756 #else
2757         "lsl	r6, r6, #16\n\t"
2758 #endif
2759 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2760         "adds	r5, r5, r6\n\t"
2761 #else
2762         "add	r5, r5, r6\n\t"
2763 #endif
2764 #ifdef WOLFSSL_KEIL
2765         "adcs	r3, r3, r7\n\t"
2766 #elif defined(__clang__)
2767         "adcs	r3, r7\n\t"
2768 #else
2769         "adc	r3, r7\n\t"
2770 #endif
2771 #ifdef WOLFSSL_KEIL
2772         "adcs	r4, r4, %[r]\n\t"
2773 #elif defined(__clang__)
2774         "adcs	r4, %[r]\n\t"
2775 #else
2776         "adc	r4, %[r]\n\t"
2777 #endif
2778 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2779         "lsrs	r6, %[a], #16\n\t"
2780 #else
2781         "lsr	r6, %[a], #16\n\t"
2782 #endif
2783 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2784         "lsrs	r7, %[b], #16\n\t"
2785 #else
2786         "lsr	r7, %[b], #16\n\t"
2787 #endif
2788 #ifdef WOLFSSL_KEIL
2789         "muls	r7, r6, r7\n\t"
2790 #elif defined(__clang__)
2791         "muls	r7, r6\n\t"
2792 #else
2793         "mul	r7, r6\n\t"
2794 #endif
2795 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2796         "adds	r3, r3, r7\n\t"
2797 #else
2798         "add	r3, r3, r7\n\t"
2799 #endif
2800 #ifdef WOLFSSL_KEIL
2801         "adcs	r4, r4, %[r]\n\t"
2802 #elif defined(__clang__)
2803         "adcs	r4, %[r]\n\t"
2804 #else
2805         "adc	r4, %[r]\n\t"
2806 #endif
2807         "uxth	r7, %[b]\n\t"
2808 #ifdef WOLFSSL_KEIL
2809         "muls	r6, r7, r6\n\t"
2810 #elif defined(__clang__)
2811         "muls	r6, r7\n\t"
2812 #else
2813         "mul	r6, r7\n\t"
2814 #endif
2815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2816         "lsrs	r7, r6, #16\n\t"
2817 #else
2818         "lsr	r7, r6, #16\n\t"
2819 #endif
2820 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2821         "lsls	r6, r6, #16\n\t"
2822 #else
2823         "lsl	r6, r6, #16\n\t"
2824 #endif
2825 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2826         "adds	r5, r5, r6\n\t"
2827 #else
2828         "add	r5, r5, r6\n\t"
2829 #endif
2830 #ifdef WOLFSSL_KEIL
2831         "adcs	r3, r3, r7\n\t"
2832 #elif defined(__clang__)
2833         "adcs	r3, r7\n\t"
2834 #else
2835         "adc	r3, r7\n\t"
2836 #endif
2837 #ifdef WOLFSSL_KEIL
2838         "adcs	r4, r4, %[r]\n\t"
2839 #elif defined(__clang__)
2840         "adcs	r4, %[r]\n\t"
2841 #else
2842         "adc	r4, %[r]\n\t"
2843 #endif
2844         "#  A[2] * B[3]\n\t"
2845         "mov	%[a], r9\n\t"
2846         "mov	%[b], r10\n\t"
2847         "ldr	%[a], [%[a], #8]\n\t"
2848         "ldr	%[b], [%[b], #12]\n\t"
2849         "uxth	r6, %[a]\n\t"
2850         "uxth	r7, %[b]\n\t"
2851 #ifdef WOLFSSL_KEIL
2852         "muls	r7, r6, r7\n\t"
2853 #elif defined(__clang__)
2854         "muls	r7, r6\n\t"
2855 #else
2856         "mul	r7, r6\n\t"
2857 #endif
2858 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2859         "adds	r5, r5, r7\n\t"
2860 #else
2861         "add	r5, r5, r7\n\t"
2862 #endif
2863 #ifdef WOLFSSL_KEIL
2864         "adcs	r3, r3, %[r]\n\t"
2865 #elif defined(__clang__)
2866         "adcs	r3, %[r]\n\t"
2867 #else
2868         "adc	r3, %[r]\n\t"
2869 #endif
2870 #ifdef WOLFSSL_KEIL
2871         "adcs	r4, r4, %[r]\n\t"
2872 #elif defined(__clang__)
2873         "adcs	r4, %[r]\n\t"
2874 #else
2875         "adc	r4, %[r]\n\t"
2876 #endif
2877 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2878         "lsrs	r7, %[b], #16\n\t"
2879 #else
2880         "lsr	r7, %[b], #16\n\t"
2881 #endif
2882 #ifdef WOLFSSL_KEIL
2883         "muls	r6, r7, r6\n\t"
2884 #elif defined(__clang__)
2885         "muls	r6, r7\n\t"
2886 #else
2887         "mul	r6, r7\n\t"
2888 #endif
2889 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2890         "lsrs	r7, r6, #16\n\t"
2891 #else
2892         "lsr	r7, r6, #16\n\t"
2893 #endif
2894 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2895         "lsls	r6, r6, #16\n\t"
2896 #else
2897         "lsl	r6, r6, #16\n\t"
2898 #endif
2899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2900         "adds	r5, r5, r6\n\t"
2901 #else
2902         "add	r5, r5, r6\n\t"
2903 #endif
2904 #ifdef WOLFSSL_KEIL
2905         "adcs	r3, r3, r7\n\t"
2906 #elif defined(__clang__)
2907         "adcs	r3, r7\n\t"
2908 #else
2909         "adc	r3, r7\n\t"
2910 #endif
2911 #ifdef WOLFSSL_KEIL
2912         "adcs	r4, r4, %[r]\n\t"
2913 #elif defined(__clang__)
2914         "adcs	r4, %[r]\n\t"
2915 #else
2916         "adc	r4, %[r]\n\t"
2917 #endif
2918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2919         "lsrs	r6, %[a], #16\n\t"
2920 #else
2921         "lsr	r6, %[a], #16\n\t"
2922 #endif
2923 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2924         "lsrs	r7, %[b], #16\n\t"
2925 #else
2926         "lsr	r7, %[b], #16\n\t"
2927 #endif
2928 #ifdef WOLFSSL_KEIL
2929         "muls	r7, r6, r7\n\t"
2930 #elif defined(__clang__)
2931         "muls	r7, r6\n\t"
2932 #else
2933         "mul	r7, r6\n\t"
2934 #endif
2935 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2936         "adds	r3, r3, r7\n\t"
2937 #else
2938         "add	r3, r3, r7\n\t"
2939 #endif
2940 #ifdef WOLFSSL_KEIL
2941         "adcs	r4, r4, %[r]\n\t"
2942 #elif defined(__clang__)
2943         "adcs	r4, %[r]\n\t"
2944 #else
2945         "adc	r4, %[r]\n\t"
2946 #endif
2947         "uxth	r7, %[b]\n\t"
2948 #ifdef WOLFSSL_KEIL
2949         "muls	r6, r7, r6\n\t"
2950 #elif defined(__clang__)
2951         "muls	r6, r7\n\t"
2952 #else
2953         "mul	r6, r7\n\t"
2954 #endif
2955 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2956         "lsrs	r7, r6, #16\n\t"
2957 #else
2958         "lsr	r7, r6, #16\n\t"
2959 #endif
2960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2961         "lsls	r6, r6, #16\n\t"
2962 #else
2963         "lsl	r6, r6, #16\n\t"
2964 #endif
2965 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2966         "adds	r5, r5, r6\n\t"
2967 #else
2968         "add	r5, r5, r6\n\t"
2969 #endif
2970 #ifdef WOLFSSL_KEIL
2971         "adcs	r3, r3, r7\n\t"
2972 #elif defined(__clang__)
2973         "adcs	r3, r7\n\t"
2974 #else
2975         "adc	r3, r7\n\t"
2976 #endif
2977 #ifdef WOLFSSL_KEIL
2978         "adcs	r4, r4, %[r]\n\t"
2979 #elif defined(__clang__)
2980         "adcs	r4, %[r]\n\t"
2981 #else
2982         "adc	r4, %[r]\n\t"
2983 #endif
2984         "#  A[3] * B[2]\n\t"
2985         "mov	%[a], r9\n\t"
2986         "mov	%[b], r10\n\t"
2987         "ldr	%[a], [%[a], #12]\n\t"
2988         "ldr	%[b], [%[b], #8]\n\t"
2989         "uxth	r6, %[a]\n\t"
2990         "uxth	r7, %[b]\n\t"
2991 #ifdef WOLFSSL_KEIL
2992         "muls	r7, r6, r7\n\t"
2993 #elif defined(__clang__)
2994         "muls	r7, r6\n\t"
2995 #else
2996         "mul	r7, r6\n\t"
2997 #endif
2998 #if defined(__clang__) || defined(WOLFSSL_KEIL)
2999         "adds	r5, r5, r7\n\t"
3000 #else
3001         "add	r5, r5, r7\n\t"
3002 #endif
3003 #ifdef WOLFSSL_KEIL
3004         "adcs	r3, r3, %[r]\n\t"
3005 #elif defined(__clang__)
3006         "adcs	r3, %[r]\n\t"
3007 #else
3008         "adc	r3, %[r]\n\t"
3009 #endif
3010 #ifdef WOLFSSL_KEIL
3011         "adcs	r4, r4, %[r]\n\t"
3012 #elif defined(__clang__)
3013         "adcs	r4, %[r]\n\t"
3014 #else
3015         "adc	r4, %[r]\n\t"
3016 #endif
3017 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3018         "lsrs	r7, %[b], #16\n\t"
3019 #else
3020         "lsr	r7, %[b], #16\n\t"
3021 #endif
3022 #ifdef WOLFSSL_KEIL
3023         "muls	r6, r7, r6\n\t"
3024 #elif defined(__clang__)
3025         "muls	r6, r7\n\t"
3026 #else
3027         "mul	r6, r7\n\t"
3028 #endif
3029 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3030         "lsrs	r7, r6, #16\n\t"
3031 #else
3032         "lsr	r7, r6, #16\n\t"
3033 #endif
3034 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3035         "lsls	r6, r6, #16\n\t"
3036 #else
3037         "lsl	r6, r6, #16\n\t"
3038 #endif
3039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3040         "adds	r5, r5, r6\n\t"
3041 #else
3042         "add	r5, r5, r6\n\t"
3043 #endif
3044 #ifdef WOLFSSL_KEIL
3045         "adcs	r3, r3, r7\n\t"
3046 #elif defined(__clang__)
3047         "adcs	r3, r7\n\t"
3048 #else
3049         "adc	r3, r7\n\t"
3050 #endif
3051 #ifdef WOLFSSL_KEIL
3052         "adcs	r4, r4, %[r]\n\t"
3053 #elif defined(__clang__)
3054         "adcs	r4, %[r]\n\t"
3055 #else
3056         "adc	r4, %[r]\n\t"
3057 #endif
3058 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3059         "lsrs	r6, %[a], #16\n\t"
3060 #else
3061         "lsr	r6, %[a], #16\n\t"
3062 #endif
3063 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3064         "lsrs	r7, %[b], #16\n\t"
3065 #else
3066         "lsr	r7, %[b], #16\n\t"
3067 #endif
3068 #ifdef WOLFSSL_KEIL
3069         "muls	r7, r6, r7\n\t"
3070 #elif defined(__clang__)
3071         "muls	r7, r6\n\t"
3072 #else
3073         "mul	r7, r6\n\t"
3074 #endif
3075 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3076         "adds	r3, r3, r7\n\t"
3077 #else
3078         "add	r3, r3, r7\n\t"
3079 #endif
3080 #ifdef WOLFSSL_KEIL
3081         "adcs	r4, r4, %[r]\n\t"
3082 #elif defined(__clang__)
3083         "adcs	r4, %[r]\n\t"
3084 #else
3085         "adc	r4, %[r]\n\t"
3086 #endif
3087         "uxth	r7, %[b]\n\t"
3088 #ifdef WOLFSSL_KEIL
3089         "muls	r6, r7, r6\n\t"
3090 #elif defined(__clang__)
3091         "muls	r6, r7\n\t"
3092 #else
3093         "mul	r6, r7\n\t"
3094 #endif
3095 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3096         "lsrs	r7, r6, #16\n\t"
3097 #else
3098         "lsr	r7, r6, #16\n\t"
3099 #endif
3100 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3101         "lsls	r6, r6, #16\n\t"
3102 #else
3103         "lsl	r6, r6, #16\n\t"
3104 #endif
3105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3106         "adds	r5, r5, r6\n\t"
3107 #else
3108         "add	r5, r5, r6\n\t"
3109 #endif
3110 #ifdef WOLFSSL_KEIL
3111         "adcs	r3, r3, r7\n\t"
3112 #elif defined(__clang__)
3113         "adcs	r3, r7\n\t"
3114 #else
3115         "adc	r3, r7\n\t"
3116 #endif
3117 #ifdef WOLFSSL_KEIL
3118         "adcs	r4, r4, %[r]\n\t"
3119 #elif defined(__clang__)
3120         "adcs	r4, %[r]\n\t"
3121 #else
3122         "adc	r4, %[r]\n\t"
3123 #endif
3124         "#  A[4] * B[1]\n\t"
3125         "mov	%[a], r9\n\t"
3126         "mov	%[b], r10\n\t"
3127         "ldr	%[a], [%[a], #16]\n\t"
3128         "ldr	%[b], [%[b], #4]\n\t"
3129         "uxth	r6, %[a]\n\t"
3130         "uxth	r7, %[b]\n\t"
3131 #ifdef WOLFSSL_KEIL
3132         "muls	r7, r6, r7\n\t"
3133 #elif defined(__clang__)
3134         "muls	r7, r6\n\t"
3135 #else
3136         "mul	r7, r6\n\t"
3137 #endif
3138 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3139         "adds	r5, r5, r7\n\t"
3140 #else
3141         "add	r5, r5, r7\n\t"
3142 #endif
3143 #ifdef WOLFSSL_KEIL
3144         "adcs	r3, r3, %[r]\n\t"
3145 #elif defined(__clang__)
3146         "adcs	r3, %[r]\n\t"
3147 #else
3148         "adc	r3, %[r]\n\t"
3149 #endif
3150 #ifdef WOLFSSL_KEIL
3151         "adcs	r4, r4, %[r]\n\t"
3152 #elif defined(__clang__)
3153         "adcs	r4, %[r]\n\t"
3154 #else
3155         "adc	r4, %[r]\n\t"
3156 #endif
3157 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3158         "lsrs	r7, %[b], #16\n\t"
3159 #else
3160         "lsr	r7, %[b], #16\n\t"
3161 #endif
3162 #ifdef WOLFSSL_KEIL
3163         "muls	r6, r7, r6\n\t"
3164 #elif defined(__clang__)
3165         "muls	r6, r7\n\t"
3166 #else
3167         "mul	r6, r7\n\t"
3168 #endif
3169 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3170         "lsrs	r7, r6, #16\n\t"
3171 #else
3172         "lsr	r7, r6, #16\n\t"
3173 #endif
3174 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3175         "lsls	r6, r6, #16\n\t"
3176 #else
3177         "lsl	r6, r6, #16\n\t"
3178 #endif
3179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3180         "adds	r5, r5, r6\n\t"
3181 #else
3182         "add	r5, r5, r6\n\t"
3183 #endif
3184 #ifdef WOLFSSL_KEIL
3185         "adcs	r3, r3, r7\n\t"
3186 #elif defined(__clang__)
3187         "adcs	r3, r7\n\t"
3188 #else
3189         "adc	r3, r7\n\t"
3190 #endif
3191 #ifdef WOLFSSL_KEIL
3192         "adcs	r4, r4, %[r]\n\t"
3193 #elif defined(__clang__)
3194         "adcs	r4, %[r]\n\t"
3195 #else
3196         "adc	r4, %[r]\n\t"
3197 #endif
3198 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3199         "lsrs	r6, %[a], #16\n\t"
3200 #else
3201         "lsr	r6, %[a], #16\n\t"
3202 #endif
3203 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3204         "lsrs	r7, %[b], #16\n\t"
3205 #else
3206         "lsr	r7, %[b], #16\n\t"
3207 #endif
3208 #ifdef WOLFSSL_KEIL
3209         "muls	r7, r6, r7\n\t"
3210 #elif defined(__clang__)
3211         "muls	r7, r6\n\t"
3212 #else
3213         "mul	r7, r6\n\t"
3214 #endif
3215 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3216         "adds	r3, r3, r7\n\t"
3217 #else
3218         "add	r3, r3, r7\n\t"
3219 #endif
3220 #ifdef WOLFSSL_KEIL
3221         "adcs	r4, r4, %[r]\n\t"
3222 #elif defined(__clang__)
3223         "adcs	r4, %[r]\n\t"
3224 #else
3225         "adc	r4, %[r]\n\t"
3226 #endif
3227         "uxth	r7, %[b]\n\t"
3228 #ifdef WOLFSSL_KEIL
3229         "muls	r6, r7, r6\n\t"
3230 #elif defined(__clang__)
3231         "muls	r6, r7\n\t"
3232 #else
3233         "mul	r6, r7\n\t"
3234 #endif
3235 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3236         "lsrs	r7, r6, #16\n\t"
3237 #else
3238         "lsr	r7, r6, #16\n\t"
3239 #endif
3240 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3241         "lsls	r6, r6, #16\n\t"
3242 #else
3243         "lsl	r6, r6, #16\n\t"
3244 #endif
3245 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3246         "adds	r5, r5, r6\n\t"
3247 #else
3248         "add	r5, r5, r6\n\t"
3249 #endif
3250 #ifdef WOLFSSL_KEIL
3251         "adcs	r3, r3, r7\n\t"
3252 #elif defined(__clang__)
3253         "adcs	r3, r7\n\t"
3254 #else
3255         "adc	r3, r7\n\t"
3256 #endif
3257 #ifdef WOLFSSL_KEIL
3258         "adcs	r4, r4, %[r]\n\t"
3259 #elif defined(__clang__)
3260         "adcs	r4, %[r]\n\t"
3261 #else
3262         "adc	r4, %[r]\n\t"
3263 #endif
3264         "#  A[5] * B[0]\n\t"
3265         "mov	%[a], r9\n\t"
3266         "mov	%[b], r10\n\t"
3267         "ldr	%[a], [%[a], #20]\n\t"
3268         "ldr	%[b], [%[b]]\n\t"
3269         "uxth	r6, %[a]\n\t"
3270         "uxth	r7, %[b]\n\t"
3271 #ifdef WOLFSSL_KEIL
3272         "muls	r7, r6, r7\n\t"
3273 #elif defined(__clang__)
3274         "muls	r7, r6\n\t"
3275 #else
3276         "mul	r7, r6\n\t"
3277 #endif
3278 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3279         "adds	r5, r5, r7\n\t"
3280 #else
3281         "add	r5, r5, r7\n\t"
3282 #endif
3283 #ifdef WOLFSSL_KEIL
3284         "adcs	r3, r3, %[r]\n\t"
3285 #elif defined(__clang__)
3286         "adcs	r3, %[r]\n\t"
3287 #else
3288         "adc	r3, %[r]\n\t"
3289 #endif
3290 #ifdef WOLFSSL_KEIL
3291         "adcs	r4, r4, %[r]\n\t"
3292 #elif defined(__clang__)
3293         "adcs	r4, %[r]\n\t"
3294 #else
3295         "adc	r4, %[r]\n\t"
3296 #endif
3297 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3298         "lsrs	r7, %[b], #16\n\t"
3299 #else
3300         "lsr	r7, %[b], #16\n\t"
3301 #endif
3302 #ifdef WOLFSSL_KEIL
3303         "muls	r6, r7, r6\n\t"
3304 #elif defined(__clang__)
3305         "muls	r6, r7\n\t"
3306 #else
3307         "mul	r6, r7\n\t"
3308 #endif
3309 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3310         "lsrs	r7, r6, #16\n\t"
3311 #else
3312         "lsr	r7, r6, #16\n\t"
3313 #endif
3314 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3315         "lsls	r6, r6, #16\n\t"
3316 #else
3317         "lsl	r6, r6, #16\n\t"
3318 #endif
3319 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3320         "adds	r5, r5, r6\n\t"
3321 #else
3322         "add	r5, r5, r6\n\t"
3323 #endif
3324 #ifdef WOLFSSL_KEIL
3325         "adcs	r3, r3, r7\n\t"
3326 #elif defined(__clang__)
3327         "adcs	r3, r7\n\t"
3328 #else
3329         "adc	r3, r7\n\t"
3330 #endif
3331 #ifdef WOLFSSL_KEIL
3332         "adcs	r4, r4, %[r]\n\t"
3333 #elif defined(__clang__)
3334         "adcs	r4, %[r]\n\t"
3335 #else
3336         "adc	r4, %[r]\n\t"
3337 #endif
3338 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3339         "lsrs	r6, %[a], #16\n\t"
3340 #else
3341         "lsr	r6, %[a], #16\n\t"
3342 #endif
3343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3344         "lsrs	r7, %[b], #16\n\t"
3345 #else
3346         "lsr	r7, %[b], #16\n\t"
3347 #endif
3348 #ifdef WOLFSSL_KEIL
3349         "muls	r7, r6, r7\n\t"
3350 #elif defined(__clang__)
3351         "muls	r7, r6\n\t"
3352 #else
3353         "mul	r7, r6\n\t"
3354 #endif
3355 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3356         "adds	r3, r3, r7\n\t"
3357 #else
3358         "add	r3, r3, r7\n\t"
3359 #endif
3360 #ifdef WOLFSSL_KEIL
3361         "adcs	r4, r4, %[r]\n\t"
3362 #elif defined(__clang__)
3363         "adcs	r4, %[r]\n\t"
3364 #else
3365         "adc	r4, %[r]\n\t"
3366 #endif
3367         "uxth	r7, %[b]\n\t"
3368 #ifdef WOLFSSL_KEIL
3369         "muls	r6, r7, r6\n\t"
3370 #elif defined(__clang__)
3371         "muls	r6, r7\n\t"
3372 #else
3373         "mul	r6, r7\n\t"
3374 #endif
3375 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3376         "lsrs	r7, r6, #16\n\t"
3377 #else
3378         "lsr	r7, r6, #16\n\t"
3379 #endif
3380 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3381         "lsls	r6, r6, #16\n\t"
3382 #else
3383         "lsl	r6, r6, #16\n\t"
3384 #endif
3385 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3386         "adds	r5, r5, r6\n\t"
3387 #else
3388         "add	r5, r5, r6\n\t"
3389 #endif
3390 #ifdef WOLFSSL_KEIL
3391         "adcs	r3, r3, r7\n\t"
3392 #elif defined(__clang__)
3393         "adcs	r3, r7\n\t"
3394 #else
3395         "adc	r3, r7\n\t"
3396 #endif
3397 #ifdef WOLFSSL_KEIL
3398         "adcs	r4, r4, %[r]\n\t"
3399 #elif defined(__clang__)
3400         "adcs	r4, %[r]\n\t"
3401 #else
3402         "adc	r4, %[r]\n\t"
3403 #endif
3404         "str	r5, [sp, #20]\n\t"
3405         "#  A[6] * B[0]\n\t"
3406         "movs	r5, #0\n\t"
3407         "mov	%[a], r9\n\t"
3408         "mov	%[b], r10\n\t"
3409         "ldr	%[a], [%[a], #24]\n\t"
3410         "ldr	%[b], [%[b]]\n\t"
3411         "uxth	r6, %[a]\n\t"
3412         "uxth	r7, %[b]\n\t"
3413 #ifdef WOLFSSL_KEIL
3414         "muls	r7, r6, r7\n\t"
3415 #elif defined(__clang__)
3416         "muls	r7, r6\n\t"
3417 #else
3418         "mul	r7, r6\n\t"
3419 #endif
3420 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3421         "adds	r3, r3, r7\n\t"
3422 #else
3423         "add	r3, r3, r7\n\t"
3424 #endif
3425 #ifdef WOLFSSL_KEIL
3426         "adcs	r4, r4, %[r]\n\t"
3427 #elif defined(__clang__)
3428         "adcs	r4, %[r]\n\t"
3429 #else
3430         "adc	r4, %[r]\n\t"
3431 #endif
3432 #ifdef WOLFSSL_KEIL
3433         "adcs	r5, r5, %[r]\n\t"
3434 #elif defined(__clang__)
3435         "adcs	r5, %[r]\n\t"
3436 #else
3437         "adc	r5, %[r]\n\t"
3438 #endif
3439 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3440         "lsrs	r7, %[b], #16\n\t"
3441 #else
3442         "lsr	r7, %[b], #16\n\t"
3443 #endif
3444 #ifdef WOLFSSL_KEIL
3445         "muls	r6, r7, r6\n\t"
3446 #elif defined(__clang__)
3447         "muls	r6, r7\n\t"
3448 #else
3449         "mul	r6, r7\n\t"
3450 #endif
3451 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3452         "lsrs	r7, r6, #16\n\t"
3453 #else
3454         "lsr	r7, r6, #16\n\t"
3455 #endif
3456 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3457         "lsls	r6, r6, #16\n\t"
3458 #else
3459         "lsl	r6, r6, #16\n\t"
3460 #endif
3461 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3462         "adds	r3, r3, r6\n\t"
3463 #else
3464         "add	r3, r3, r6\n\t"
3465 #endif
3466 #ifdef WOLFSSL_KEIL
3467         "adcs	r4, r4, r7\n\t"
3468 #elif defined(__clang__)
3469         "adcs	r4, r7\n\t"
3470 #else
3471         "adc	r4, r7\n\t"
3472 #endif
3473 #ifdef WOLFSSL_KEIL
3474         "adcs	r5, r5, %[r]\n\t"
3475 #elif defined(__clang__)
3476         "adcs	r5, %[r]\n\t"
3477 #else
3478         "adc	r5, %[r]\n\t"
3479 #endif
3480 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3481         "lsrs	r6, %[a], #16\n\t"
3482 #else
3483         "lsr	r6, %[a], #16\n\t"
3484 #endif
3485 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3486         "lsrs	r7, %[b], #16\n\t"
3487 #else
3488         "lsr	r7, %[b], #16\n\t"
3489 #endif
3490 #ifdef WOLFSSL_KEIL
3491         "muls	r7, r6, r7\n\t"
3492 #elif defined(__clang__)
3493         "muls	r7, r6\n\t"
3494 #else
3495         "mul	r7, r6\n\t"
3496 #endif
3497 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3498         "adds	r4, r4, r7\n\t"
3499 #else
3500         "add	r4, r4, r7\n\t"
3501 #endif
3502 #ifdef WOLFSSL_KEIL
3503         "adcs	r5, r5, %[r]\n\t"
3504 #elif defined(__clang__)
3505         "adcs	r5, %[r]\n\t"
3506 #else
3507         "adc	r5, %[r]\n\t"
3508 #endif
3509         "uxth	r7, %[b]\n\t"
3510 #ifdef WOLFSSL_KEIL
3511         "muls	r6, r7, r6\n\t"
3512 #elif defined(__clang__)
3513         "muls	r6, r7\n\t"
3514 #else
3515         "mul	r6, r7\n\t"
3516 #endif
3517 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3518         "lsrs	r7, r6, #16\n\t"
3519 #else
3520         "lsr	r7, r6, #16\n\t"
3521 #endif
3522 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3523         "lsls	r6, r6, #16\n\t"
3524 #else
3525         "lsl	r6, r6, #16\n\t"
3526 #endif
3527 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3528         "adds	r3, r3, r6\n\t"
3529 #else
3530         "add	r3, r3, r6\n\t"
3531 #endif
3532 #ifdef WOLFSSL_KEIL
3533         "adcs	r4, r4, r7\n\t"
3534 #elif defined(__clang__)
3535         "adcs	r4, r7\n\t"
3536 #else
3537         "adc	r4, r7\n\t"
3538 #endif
3539 #ifdef WOLFSSL_KEIL
3540         "adcs	r5, r5, %[r]\n\t"
3541 #elif defined(__clang__)
3542         "adcs	r5, %[r]\n\t"
3543 #else
3544         "adc	r5, %[r]\n\t"
3545 #endif
3546         "#  A[5] * B[1]\n\t"
3547         "mov	%[a], r9\n\t"
3548         "mov	%[b], r10\n\t"
3549         "ldr	%[a], [%[a], #20]\n\t"
3550         "ldr	%[b], [%[b], #4]\n\t"
3551         "uxth	r6, %[a]\n\t"
3552         "uxth	r7, %[b]\n\t"
3553 #ifdef WOLFSSL_KEIL
3554         "muls	r7, r6, r7\n\t"
3555 #elif defined(__clang__)
3556         "muls	r7, r6\n\t"
3557 #else
3558         "mul	r7, r6\n\t"
3559 #endif
3560 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3561         "adds	r3, r3, r7\n\t"
3562 #else
3563         "add	r3, r3, r7\n\t"
3564 #endif
3565 #ifdef WOLFSSL_KEIL
3566         "adcs	r4, r4, %[r]\n\t"
3567 #elif defined(__clang__)
3568         "adcs	r4, %[r]\n\t"
3569 #else
3570         "adc	r4, %[r]\n\t"
3571 #endif
3572 #ifdef WOLFSSL_KEIL
3573         "adcs	r5, r5, %[r]\n\t"
3574 #elif defined(__clang__)
3575         "adcs	r5, %[r]\n\t"
3576 #else
3577         "adc	r5, %[r]\n\t"
3578 #endif
3579 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3580         "lsrs	r7, %[b], #16\n\t"
3581 #else
3582         "lsr	r7, %[b], #16\n\t"
3583 #endif
3584 #ifdef WOLFSSL_KEIL
3585         "muls	r6, r7, r6\n\t"
3586 #elif defined(__clang__)
3587         "muls	r6, r7\n\t"
3588 #else
3589         "mul	r6, r7\n\t"
3590 #endif
3591 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3592         "lsrs	r7, r6, #16\n\t"
3593 #else
3594         "lsr	r7, r6, #16\n\t"
3595 #endif
3596 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3597         "lsls	r6, r6, #16\n\t"
3598 #else
3599         "lsl	r6, r6, #16\n\t"
3600 #endif
3601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3602         "adds	r3, r3, r6\n\t"
3603 #else
3604         "add	r3, r3, r6\n\t"
3605 #endif
3606 #ifdef WOLFSSL_KEIL
3607         "adcs	r4, r4, r7\n\t"
3608 #elif defined(__clang__)
3609         "adcs	r4, r7\n\t"
3610 #else
3611         "adc	r4, r7\n\t"
3612 #endif
3613 #ifdef WOLFSSL_KEIL
3614         "adcs	r5, r5, %[r]\n\t"
3615 #elif defined(__clang__)
3616         "adcs	r5, %[r]\n\t"
3617 #else
3618         "adc	r5, %[r]\n\t"
3619 #endif
3620 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3621         "lsrs	r6, %[a], #16\n\t"
3622 #else
3623         "lsr	r6, %[a], #16\n\t"
3624 #endif
3625 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3626         "lsrs	r7, %[b], #16\n\t"
3627 #else
3628         "lsr	r7, %[b], #16\n\t"
3629 #endif
3630 #ifdef WOLFSSL_KEIL
3631         "muls	r7, r6, r7\n\t"
3632 #elif defined(__clang__)
3633         "muls	r7, r6\n\t"
3634 #else
3635         "mul	r7, r6\n\t"
3636 #endif
3637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3638         "adds	r4, r4, r7\n\t"
3639 #else
3640         "add	r4, r4, r7\n\t"
3641 #endif
3642 #ifdef WOLFSSL_KEIL
3643         "adcs	r5, r5, %[r]\n\t"
3644 #elif defined(__clang__)
3645         "adcs	r5, %[r]\n\t"
3646 #else
3647         "adc	r5, %[r]\n\t"
3648 #endif
3649         "uxth	r7, %[b]\n\t"
3650 #ifdef WOLFSSL_KEIL
3651         "muls	r6, r7, r6\n\t"
3652 #elif defined(__clang__)
3653         "muls	r6, r7\n\t"
3654 #else
3655         "mul	r6, r7\n\t"
3656 #endif
3657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3658         "lsrs	r7, r6, #16\n\t"
3659 #else
3660         "lsr	r7, r6, #16\n\t"
3661 #endif
3662 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3663         "lsls	r6, r6, #16\n\t"
3664 #else
3665         "lsl	r6, r6, #16\n\t"
3666 #endif
3667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3668         "adds	r3, r3, r6\n\t"
3669 #else
3670         "add	r3, r3, r6\n\t"
3671 #endif
3672 #ifdef WOLFSSL_KEIL
3673         "adcs	r4, r4, r7\n\t"
3674 #elif defined(__clang__)
3675         "adcs	r4, r7\n\t"
3676 #else
3677         "adc	r4, r7\n\t"
3678 #endif
3679 #ifdef WOLFSSL_KEIL
3680         "adcs	r5, r5, %[r]\n\t"
3681 #elif defined(__clang__)
3682         "adcs	r5, %[r]\n\t"
3683 #else
3684         "adc	r5, %[r]\n\t"
3685 #endif
3686         "#  A[4] * B[2]\n\t"
3687         "mov	%[a], r9\n\t"
3688         "mov	%[b], r10\n\t"
3689         "ldr	%[a], [%[a], #16]\n\t"
3690         "ldr	%[b], [%[b], #8]\n\t"
3691         "uxth	r6, %[a]\n\t"
3692         "uxth	r7, %[b]\n\t"
3693 #ifdef WOLFSSL_KEIL
3694         "muls	r7, r6, r7\n\t"
3695 #elif defined(__clang__)
3696         "muls	r7, r6\n\t"
3697 #else
3698         "mul	r7, r6\n\t"
3699 #endif
3700 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3701         "adds	r3, r3, r7\n\t"
3702 #else
3703         "add	r3, r3, r7\n\t"
3704 #endif
3705 #ifdef WOLFSSL_KEIL
3706         "adcs	r4, r4, %[r]\n\t"
3707 #elif defined(__clang__)
3708         "adcs	r4, %[r]\n\t"
3709 #else
3710         "adc	r4, %[r]\n\t"
3711 #endif
3712 #ifdef WOLFSSL_KEIL
3713         "adcs	r5, r5, %[r]\n\t"
3714 #elif defined(__clang__)
3715         "adcs	r5, %[r]\n\t"
3716 #else
3717         "adc	r5, %[r]\n\t"
3718 #endif
3719 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3720         "lsrs	r7, %[b], #16\n\t"
3721 #else
3722         "lsr	r7, %[b], #16\n\t"
3723 #endif
3724 #ifdef WOLFSSL_KEIL
3725         "muls	r6, r7, r6\n\t"
3726 #elif defined(__clang__)
3727         "muls	r6, r7\n\t"
3728 #else
3729         "mul	r6, r7\n\t"
3730 #endif
3731 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3732         "lsrs	r7, r6, #16\n\t"
3733 #else
3734         "lsr	r7, r6, #16\n\t"
3735 #endif
3736 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3737         "lsls	r6, r6, #16\n\t"
3738 #else
3739         "lsl	r6, r6, #16\n\t"
3740 #endif
3741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3742         "adds	r3, r3, r6\n\t"
3743 #else
3744         "add	r3, r3, r6\n\t"
3745 #endif
3746 #ifdef WOLFSSL_KEIL
3747         "adcs	r4, r4, r7\n\t"
3748 #elif defined(__clang__)
3749         "adcs	r4, r7\n\t"
3750 #else
3751         "adc	r4, r7\n\t"
3752 #endif
3753 #ifdef WOLFSSL_KEIL
3754         "adcs	r5, r5, %[r]\n\t"
3755 #elif defined(__clang__)
3756         "adcs	r5, %[r]\n\t"
3757 #else
3758         "adc	r5, %[r]\n\t"
3759 #endif
3760 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3761         "lsrs	r6, %[a], #16\n\t"
3762 #else
3763         "lsr	r6, %[a], #16\n\t"
3764 #endif
3765 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3766         "lsrs	r7, %[b], #16\n\t"
3767 #else
3768         "lsr	r7, %[b], #16\n\t"
3769 #endif
3770 #ifdef WOLFSSL_KEIL
3771         "muls	r7, r6, r7\n\t"
3772 #elif defined(__clang__)
3773         "muls	r7, r6\n\t"
3774 #else
3775         "mul	r7, r6\n\t"
3776 #endif
3777 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3778         "adds	r4, r4, r7\n\t"
3779 #else
3780         "add	r4, r4, r7\n\t"
3781 #endif
3782 #ifdef WOLFSSL_KEIL
3783         "adcs	r5, r5, %[r]\n\t"
3784 #elif defined(__clang__)
3785         "adcs	r5, %[r]\n\t"
3786 #else
3787         "adc	r5, %[r]\n\t"
3788 #endif
3789         "uxth	r7, %[b]\n\t"
3790 #ifdef WOLFSSL_KEIL
3791         "muls	r6, r7, r6\n\t"
3792 #elif defined(__clang__)
3793         "muls	r6, r7\n\t"
3794 #else
3795         "mul	r6, r7\n\t"
3796 #endif
3797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3798         "lsrs	r7, r6, #16\n\t"
3799 #else
3800         "lsr	r7, r6, #16\n\t"
3801 #endif
3802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3803         "lsls	r6, r6, #16\n\t"
3804 #else
3805         "lsl	r6, r6, #16\n\t"
3806 #endif
3807 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3808         "adds	r3, r3, r6\n\t"
3809 #else
3810         "add	r3, r3, r6\n\t"
3811 #endif
3812 #ifdef WOLFSSL_KEIL
3813         "adcs	r4, r4, r7\n\t"
3814 #elif defined(__clang__)
3815         "adcs	r4, r7\n\t"
3816 #else
3817         "adc	r4, r7\n\t"
3818 #endif
3819 #ifdef WOLFSSL_KEIL
3820         "adcs	r5, r5, %[r]\n\t"
3821 #elif defined(__clang__)
3822         "adcs	r5, %[r]\n\t"
3823 #else
3824         "adc	r5, %[r]\n\t"
3825 #endif
3826         "#  A[3] * B[3]\n\t"
3827         "mov	%[a], r9\n\t"
3828         "mov	%[b], r10\n\t"
3829         "ldr	%[a], [%[a], #12]\n\t"
3830         "ldr	%[b], [%[b], #12]\n\t"
3831         "uxth	r6, %[a]\n\t"
3832         "uxth	r7, %[b]\n\t"
3833 #ifdef WOLFSSL_KEIL
3834         "muls	r7, r6, r7\n\t"
3835 #elif defined(__clang__)
3836         "muls	r7, r6\n\t"
3837 #else
3838         "mul	r7, r6\n\t"
3839 #endif
3840 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3841         "adds	r3, r3, r7\n\t"
3842 #else
3843         "add	r3, r3, r7\n\t"
3844 #endif
3845 #ifdef WOLFSSL_KEIL
3846         "adcs	r4, r4, %[r]\n\t"
3847 #elif defined(__clang__)
3848         "adcs	r4, %[r]\n\t"
3849 #else
3850         "adc	r4, %[r]\n\t"
3851 #endif
3852 #ifdef WOLFSSL_KEIL
3853         "adcs	r5, r5, %[r]\n\t"
3854 #elif defined(__clang__)
3855         "adcs	r5, %[r]\n\t"
3856 #else
3857         "adc	r5, %[r]\n\t"
3858 #endif
3859 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3860         "lsrs	r7, %[b], #16\n\t"
3861 #else
3862         "lsr	r7, %[b], #16\n\t"
3863 #endif
3864 #ifdef WOLFSSL_KEIL
3865         "muls	r6, r7, r6\n\t"
3866 #elif defined(__clang__)
3867         "muls	r6, r7\n\t"
3868 #else
3869         "mul	r6, r7\n\t"
3870 #endif
3871 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3872         "lsrs	r7, r6, #16\n\t"
3873 #else
3874         "lsr	r7, r6, #16\n\t"
3875 #endif
3876 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3877         "lsls	r6, r6, #16\n\t"
3878 #else
3879         "lsl	r6, r6, #16\n\t"
3880 #endif
3881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3882         "adds	r3, r3, r6\n\t"
3883 #else
3884         "add	r3, r3, r6\n\t"
3885 #endif
3886 #ifdef WOLFSSL_KEIL
3887         "adcs	r4, r4, r7\n\t"
3888 #elif defined(__clang__)
3889         "adcs	r4, r7\n\t"
3890 #else
3891         "adc	r4, r7\n\t"
3892 #endif
3893 #ifdef WOLFSSL_KEIL
3894         "adcs	r5, r5, %[r]\n\t"
3895 #elif defined(__clang__)
3896         "adcs	r5, %[r]\n\t"
3897 #else
3898         "adc	r5, %[r]\n\t"
3899 #endif
3900 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3901         "lsrs	r6, %[a], #16\n\t"
3902 #else
3903         "lsr	r6, %[a], #16\n\t"
3904 #endif
3905 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3906         "lsrs	r7, %[b], #16\n\t"
3907 #else
3908         "lsr	r7, %[b], #16\n\t"
3909 #endif
3910 #ifdef WOLFSSL_KEIL
3911         "muls	r7, r6, r7\n\t"
3912 #elif defined(__clang__)
3913         "muls	r7, r6\n\t"
3914 #else
3915         "mul	r7, r6\n\t"
3916 #endif
3917 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3918         "adds	r4, r4, r7\n\t"
3919 #else
3920         "add	r4, r4, r7\n\t"
3921 #endif
3922 #ifdef WOLFSSL_KEIL
3923         "adcs	r5, r5, %[r]\n\t"
3924 #elif defined(__clang__)
3925         "adcs	r5, %[r]\n\t"
3926 #else
3927         "adc	r5, %[r]\n\t"
3928 #endif
3929         "uxth	r7, %[b]\n\t"
3930 #ifdef WOLFSSL_KEIL
3931         "muls	r6, r7, r6\n\t"
3932 #elif defined(__clang__)
3933         "muls	r6, r7\n\t"
3934 #else
3935         "mul	r6, r7\n\t"
3936 #endif
3937 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3938         "lsrs	r7, r6, #16\n\t"
3939 #else
3940         "lsr	r7, r6, #16\n\t"
3941 #endif
3942 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3943         "lsls	r6, r6, #16\n\t"
3944 #else
3945         "lsl	r6, r6, #16\n\t"
3946 #endif
3947 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3948         "adds	r3, r3, r6\n\t"
3949 #else
3950         "add	r3, r3, r6\n\t"
3951 #endif
3952 #ifdef WOLFSSL_KEIL
3953         "adcs	r4, r4, r7\n\t"
3954 #elif defined(__clang__)
3955         "adcs	r4, r7\n\t"
3956 #else
3957         "adc	r4, r7\n\t"
3958 #endif
3959 #ifdef WOLFSSL_KEIL
3960         "adcs	r5, r5, %[r]\n\t"
3961 #elif defined(__clang__)
3962         "adcs	r5, %[r]\n\t"
3963 #else
3964         "adc	r5, %[r]\n\t"
3965 #endif
3966         "#  A[2] * B[4]\n\t"
3967         "mov	%[a], r9\n\t"
3968         "mov	%[b], r10\n\t"
3969         "ldr	%[a], [%[a], #8]\n\t"
3970         "ldr	%[b], [%[b], #16]\n\t"
3971         "uxth	r6, %[a]\n\t"
3972         "uxth	r7, %[b]\n\t"
3973 #ifdef WOLFSSL_KEIL
3974         "muls	r7, r6, r7\n\t"
3975 #elif defined(__clang__)
3976         "muls	r7, r6\n\t"
3977 #else
3978         "mul	r7, r6\n\t"
3979 #endif
3980 #if defined(__clang__) || defined(WOLFSSL_KEIL)
3981         "adds	r3, r3, r7\n\t"
3982 #else
3983         "add	r3, r3, r7\n\t"
3984 #endif
3985 #ifdef WOLFSSL_KEIL
3986         "adcs	r4, r4, %[r]\n\t"
3987 #elif defined(__clang__)
3988         "adcs	r4, %[r]\n\t"
3989 #else
3990         "adc	r4, %[r]\n\t"
3991 #endif
3992 #ifdef WOLFSSL_KEIL
3993         "adcs	r5, r5, %[r]\n\t"
3994 #elif defined(__clang__)
3995         "adcs	r5, %[r]\n\t"
3996 #else
3997         "adc	r5, %[r]\n\t"
3998 #endif
3999 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4000         "lsrs	r7, %[b], #16\n\t"
4001 #else
4002         "lsr	r7, %[b], #16\n\t"
4003 #endif
4004 #ifdef WOLFSSL_KEIL
4005         "muls	r6, r7, r6\n\t"
4006 #elif defined(__clang__)
4007         "muls	r6, r7\n\t"
4008 #else
4009         "mul	r6, r7\n\t"
4010 #endif
4011 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4012         "lsrs	r7, r6, #16\n\t"
4013 #else
4014         "lsr	r7, r6, #16\n\t"
4015 #endif
4016 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4017         "lsls	r6, r6, #16\n\t"
4018 #else
4019         "lsl	r6, r6, #16\n\t"
4020 #endif
4021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4022         "adds	r3, r3, r6\n\t"
4023 #else
4024         "add	r3, r3, r6\n\t"
4025 #endif
4026 #ifdef WOLFSSL_KEIL
4027         "adcs	r4, r4, r7\n\t"
4028 #elif defined(__clang__)
4029         "adcs	r4, r7\n\t"
4030 #else
4031         "adc	r4, r7\n\t"
4032 #endif
4033 #ifdef WOLFSSL_KEIL
4034         "adcs	r5, r5, %[r]\n\t"
4035 #elif defined(__clang__)
4036         "adcs	r5, %[r]\n\t"
4037 #else
4038         "adc	r5, %[r]\n\t"
4039 #endif
4040 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4041         "lsrs	r6, %[a], #16\n\t"
4042 #else
4043         "lsr	r6, %[a], #16\n\t"
4044 #endif
4045 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4046         "lsrs	r7, %[b], #16\n\t"
4047 #else
4048         "lsr	r7, %[b], #16\n\t"
4049 #endif
4050 #ifdef WOLFSSL_KEIL
4051         "muls	r7, r6, r7\n\t"
4052 #elif defined(__clang__)
4053         "muls	r7, r6\n\t"
4054 #else
4055         "mul	r7, r6\n\t"
4056 #endif
4057 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4058         "adds	r4, r4, r7\n\t"
4059 #else
4060         "add	r4, r4, r7\n\t"
4061 #endif
4062 #ifdef WOLFSSL_KEIL
4063         "adcs	r5, r5, %[r]\n\t"
4064 #elif defined(__clang__)
4065         "adcs	r5, %[r]\n\t"
4066 #else
4067         "adc	r5, %[r]\n\t"
4068 #endif
4069         "uxth	r7, %[b]\n\t"
4070 #ifdef WOLFSSL_KEIL
4071         "muls	r6, r7, r6\n\t"
4072 #elif defined(__clang__)
4073         "muls	r6, r7\n\t"
4074 #else
4075         "mul	r6, r7\n\t"
4076 #endif
4077 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4078         "lsrs	r7, r6, #16\n\t"
4079 #else
4080         "lsr	r7, r6, #16\n\t"
4081 #endif
4082 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4083         "lsls	r6, r6, #16\n\t"
4084 #else
4085         "lsl	r6, r6, #16\n\t"
4086 #endif
4087 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4088         "adds	r3, r3, r6\n\t"
4089 #else
4090         "add	r3, r3, r6\n\t"
4091 #endif
4092 #ifdef WOLFSSL_KEIL
4093         "adcs	r4, r4, r7\n\t"
4094 #elif defined(__clang__)
4095         "adcs	r4, r7\n\t"
4096 #else
4097         "adc	r4, r7\n\t"
4098 #endif
4099 #ifdef WOLFSSL_KEIL
4100         "adcs	r5, r5, %[r]\n\t"
4101 #elif defined(__clang__)
4102         "adcs	r5, %[r]\n\t"
4103 #else
4104         "adc	r5, %[r]\n\t"
4105 #endif
4106         "#  A[1] * B[5]\n\t"
4107         "mov	%[a], r9\n\t"
4108         "mov	%[b], r10\n\t"
4109         "ldr	%[a], [%[a], #4]\n\t"
4110         "ldr	%[b], [%[b], #20]\n\t"
4111         "uxth	r6, %[a]\n\t"
4112         "uxth	r7, %[b]\n\t"
4113 #ifdef WOLFSSL_KEIL
4114         "muls	r7, r6, r7\n\t"
4115 #elif defined(__clang__)
4116         "muls	r7, r6\n\t"
4117 #else
4118         "mul	r7, r6\n\t"
4119 #endif
4120 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4121         "adds	r3, r3, r7\n\t"
4122 #else
4123         "add	r3, r3, r7\n\t"
4124 #endif
4125 #ifdef WOLFSSL_KEIL
4126         "adcs	r4, r4, %[r]\n\t"
4127 #elif defined(__clang__)
4128         "adcs	r4, %[r]\n\t"
4129 #else
4130         "adc	r4, %[r]\n\t"
4131 #endif
4132 #ifdef WOLFSSL_KEIL
4133         "adcs	r5, r5, %[r]\n\t"
4134 #elif defined(__clang__)
4135         "adcs	r5, %[r]\n\t"
4136 #else
4137         "adc	r5, %[r]\n\t"
4138 #endif
4139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4140         "lsrs	r7, %[b], #16\n\t"
4141 #else
4142         "lsr	r7, %[b], #16\n\t"
4143 #endif
4144 #ifdef WOLFSSL_KEIL
4145         "muls	r6, r7, r6\n\t"
4146 #elif defined(__clang__)
4147         "muls	r6, r7\n\t"
4148 #else
4149         "mul	r6, r7\n\t"
4150 #endif
4151 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4152         "lsrs	r7, r6, #16\n\t"
4153 #else
4154         "lsr	r7, r6, #16\n\t"
4155 #endif
4156 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4157         "lsls	r6, r6, #16\n\t"
4158 #else
4159         "lsl	r6, r6, #16\n\t"
4160 #endif
4161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4162         "adds	r3, r3, r6\n\t"
4163 #else
4164         "add	r3, r3, r6\n\t"
4165 #endif
4166 #ifdef WOLFSSL_KEIL
4167         "adcs	r4, r4, r7\n\t"
4168 #elif defined(__clang__)
4169         "adcs	r4, r7\n\t"
4170 #else
4171         "adc	r4, r7\n\t"
4172 #endif
4173 #ifdef WOLFSSL_KEIL
4174         "adcs	r5, r5, %[r]\n\t"
4175 #elif defined(__clang__)
4176         "adcs	r5, %[r]\n\t"
4177 #else
4178         "adc	r5, %[r]\n\t"
4179 #endif
4180 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4181         "lsrs	r6, %[a], #16\n\t"
4182 #else
4183         "lsr	r6, %[a], #16\n\t"
4184 #endif
4185 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4186         "lsrs	r7, %[b], #16\n\t"
4187 #else
4188         "lsr	r7, %[b], #16\n\t"
4189 #endif
4190 #ifdef WOLFSSL_KEIL
4191         "muls	r7, r6, r7\n\t"
4192 #elif defined(__clang__)
4193         "muls	r7, r6\n\t"
4194 #else
4195         "mul	r7, r6\n\t"
4196 #endif
4197 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4198         "adds	r4, r4, r7\n\t"
4199 #else
4200         "add	r4, r4, r7\n\t"
4201 #endif
4202 #ifdef WOLFSSL_KEIL
4203         "adcs	r5, r5, %[r]\n\t"
4204 #elif defined(__clang__)
4205         "adcs	r5, %[r]\n\t"
4206 #else
4207         "adc	r5, %[r]\n\t"
4208 #endif
4209         "uxth	r7, %[b]\n\t"
4210 #ifdef WOLFSSL_KEIL
4211         "muls	r6, r7, r6\n\t"
4212 #elif defined(__clang__)
4213         "muls	r6, r7\n\t"
4214 #else
4215         "mul	r6, r7\n\t"
4216 #endif
4217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4218         "lsrs	r7, r6, #16\n\t"
4219 #else
4220         "lsr	r7, r6, #16\n\t"
4221 #endif
4222 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4223         "lsls	r6, r6, #16\n\t"
4224 #else
4225         "lsl	r6, r6, #16\n\t"
4226 #endif
4227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4228         "adds	r3, r3, r6\n\t"
4229 #else
4230         "add	r3, r3, r6\n\t"
4231 #endif
4232 #ifdef WOLFSSL_KEIL
4233         "adcs	r4, r4, r7\n\t"
4234 #elif defined(__clang__)
4235         "adcs	r4, r7\n\t"
4236 #else
4237         "adc	r4, r7\n\t"
4238 #endif
4239 #ifdef WOLFSSL_KEIL
4240         "adcs	r5, r5, %[r]\n\t"
4241 #elif defined(__clang__)
4242         "adcs	r5, %[r]\n\t"
4243 #else
4244         "adc	r5, %[r]\n\t"
4245 #endif
4246         "#  A[0] * B[6]\n\t"
4247         "mov	%[a], r9\n\t"
4248         "mov	%[b], r10\n\t"
4249         "ldr	%[a], [%[a]]\n\t"
4250         "ldr	%[b], [%[b], #24]\n\t"
4251         "uxth	r6, %[a]\n\t"
4252         "uxth	r7, %[b]\n\t"
4253 #ifdef WOLFSSL_KEIL
4254         "muls	r7, r6, r7\n\t"
4255 #elif defined(__clang__)
4256         "muls	r7, r6\n\t"
4257 #else
4258         "mul	r7, r6\n\t"
4259 #endif
4260 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4261         "adds	r3, r3, r7\n\t"
4262 #else
4263         "add	r3, r3, r7\n\t"
4264 #endif
4265 #ifdef WOLFSSL_KEIL
4266         "adcs	r4, r4, %[r]\n\t"
4267 #elif defined(__clang__)
4268         "adcs	r4, %[r]\n\t"
4269 #else
4270         "adc	r4, %[r]\n\t"
4271 #endif
4272 #ifdef WOLFSSL_KEIL
4273         "adcs	r5, r5, %[r]\n\t"
4274 #elif defined(__clang__)
4275         "adcs	r5, %[r]\n\t"
4276 #else
4277         "adc	r5, %[r]\n\t"
4278 #endif
4279 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4280         "lsrs	r7, %[b], #16\n\t"
4281 #else
4282         "lsr	r7, %[b], #16\n\t"
4283 #endif
4284 #ifdef WOLFSSL_KEIL
4285         "muls	r6, r7, r6\n\t"
4286 #elif defined(__clang__)
4287         "muls	r6, r7\n\t"
4288 #else
4289         "mul	r6, r7\n\t"
4290 #endif
4291 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4292         "lsrs	r7, r6, #16\n\t"
4293 #else
4294         "lsr	r7, r6, #16\n\t"
4295 #endif
4296 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4297         "lsls	r6, r6, #16\n\t"
4298 #else
4299         "lsl	r6, r6, #16\n\t"
4300 #endif
4301 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4302         "adds	r3, r3, r6\n\t"
4303 #else
4304         "add	r3, r3, r6\n\t"
4305 #endif
4306 #ifdef WOLFSSL_KEIL
4307         "adcs	r4, r4, r7\n\t"
4308 #elif defined(__clang__)
4309         "adcs	r4, r7\n\t"
4310 #else
4311         "adc	r4, r7\n\t"
4312 #endif
4313 #ifdef WOLFSSL_KEIL
4314         "adcs	r5, r5, %[r]\n\t"
4315 #elif defined(__clang__)
4316         "adcs	r5, %[r]\n\t"
4317 #else
4318         "adc	r5, %[r]\n\t"
4319 #endif
4320 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4321         "lsrs	r6, %[a], #16\n\t"
4322 #else
4323         "lsr	r6, %[a], #16\n\t"
4324 #endif
4325 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4326         "lsrs	r7, %[b], #16\n\t"
4327 #else
4328         "lsr	r7, %[b], #16\n\t"
4329 #endif
4330 #ifdef WOLFSSL_KEIL
4331         "muls	r7, r6, r7\n\t"
4332 #elif defined(__clang__)
4333         "muls	r7, r6\n\t"
4334 #else
4335         "mul	r7, r6\n\t"
4336 #endif
4337 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4338         "adds	r4, r4, r7\n\t"
4339 #else
4340         "add	r4, r4, r7\n\t"
4341 #endif
4342 #ifdef WOLFSSL_KEIL
4343         "adcs	r5, r5, %[r]\n\t"
4344 #elif defined(__clang__)
4345         "adcs	r5, %[r]\n\t"
4346 #else
4347         "adc	r5, %[r]\n\t"
4348 #endif
4349         "uxth	r7, %[b]\n\t"
4350 #ifdef WOLFSSL_KEIL
4351         "muls	r6, r7, r6\n\t"
4352 #elif defined(__clang__)
4353         "muls	r6, r7\n\t"
4354 #else
4355         "mul	r6, r7\n\t"
4356 #endif
4357 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4358         "lsrs	r7, r6, #16\n\t"
4359 #else
4360         "lsr	r7, r6, #16\n\t"
4361 #endif
4362 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4363         "lsls	r6, r6, #16\n\t"
4364 #else
4365         "lsl	r6, r6, #16\n\t"
4366 #endif
4367 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4368         "adds	r3, r3, r6\n\t"
4369 #else
4370         "add	r3, r3, r6\n\t"
4371 #endif
4372 #ifdef WOLFSSL_KEIL
4373         "adcs	r4, r4, r7\n\t"
4374 #elif defined(__clang__)
4375         "adcs	r4, r7\n\t"
4376 #else
4377         "adc	r4, r7\n\t"
4378 #endif
4379 #ifdef WOLFSSL_KEIL
4380         "adcs	r5, r5, %[r]\n\t"
4381 #elif defined(__clang__)
4382         "adcs	r5, %[r]\n\t"
4383 #else
4384         "adc	r5, %[r]\n\t"
4385 #endif
4386         "str	r3, [sp, #24]\n\t"
4387         "#  A[0] * B[7]\n\t"
4388         "movs	r3, #0\n\t"
4389         "mov	%[a], r9\n\t"
4390         "mov	%[b], r10\n\t"
4391         "ldr	%[a], [%[a]]\n\t"
4392         "ldr	%[b], [%[b], #28]\n\t"
4393         "uxth	r6, %[a]\n\t"
4394         "uxth	r7, %[b]\n\t"
4395 #ifdef WOLFSSL_KEIL
4396         "muls	r7, r6, r7\n\t"
4397 #elif defined(__clang__)
4398         "muls	r7, r6\n\t"
4399 #else
4400         "mul	r7, r6\n\t"
4401 #endif
4402 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4403         "adds	r4, r4, r7\n\t"
4404 #else
4405         "add	r4, r4, r7\n\t"
4406 #endif
4407 #ifdef WOLFSSL_KEIL
4408         "adcs	r5, r5, %[r]\n\t"
4409 #elif defined(__clang__)
4410         "adcs	r5, %[r]\n\t"
4411 #else
4412         "adc	r5, %[r]\n\t"
4413 #endif
4414 #ifdef WOLFSSL_KEIL
4415         "adcs	r3, r3, %[r]\n\t"
4416 #elif defined(__clang__)
4417         "adcs	r3, %[r]\n\t"
4418 #else
4419         "adc	r3, %[r]\n\t"
4420 #endif
4421 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4422         "lsrs	r7, %[b], #16\n\t"
4423 #else
4424         "lsr	r7, %[b], #16\n\t"
4425 #endif
4426 #ifdef WOLFSSL_KEIL
4427         "muls	r6, r7, r6\n\t"
4428 #elif defined(__clang__)
4429         "muls	r6, r7\n\t"
4430 #else
4431         "mul	r6, r7\n\t"
4432 #endif
4433 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4434         "lsrs	r7, r6, #16\n\t"
4435 #else
4436         "lsr	r7, r6, #16\n\t"
4437 #endif
4438 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4439         "lsls	r6, r6, #16\n\t"
4440 #else
4441         "lsl	r6, r6, #16\n\t"
4442 #endif
4443 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4444         "adds	r4, r4, r6\n\t"
4445 #else
4446         "add	r4, r4, r6\n\t"
4447 #endif
4448 #ifdef WOLFSSL_KEIL
4449         "adcs	r5, r5, r7\n\t"
4450 #elif defined(__clang__)
4451         "adcs	r5, r7\n\t"
4452 #else
4453         "adc	r5, r7\n\t"
4454 #endif
4455 #ifdef WOLFSSL_KEIL
4456         "adcs	r3, r3, %[r]\n\t"
4457 #elif defined(__clang__)
4458         "adcs	r3, %[r]\n\t"
4459 #else
4460         "adc	r3, %[r]\n\t"
4461 #endif
4462 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4463         "lsrs	r6, %[a], #16\n\t"
4464 #else
4465         "lsr	r6, %[a], #16\n\t"
4466 #endif
4467 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4468         "lsrs	r7, %[b], #16\n\t"
4469 #else
4470         "lsr	r7, %[b], #16\n\t"
4471 #endif
4472 #ifdef WOLFSSL_KEIL
4473         "muls	r7, r6, r7\n\t"
4474 #elif defined(__clang__)
4475         "muls	r7, r6\n\t"
4476 #else
4477         "mul	r7, r6\n\t"
4478 #endif
4479 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4480         "adds	r5, r5, r7\n\t"
4481 #else
4482         "add	r5, r5, r7\n\t"
4483 #endif
4484 #ifdef WOLFSSL_KEIL
4485         "adcs	r3, r3, %[r]\n\t"
4486 #elif defined(__clang__)
4487         "adcs	r3, %[r]\n\t"
4488 #else
4489         "adc	r3, %[r]\n\t"
4490 #endif
4491         "uxth	r7, %[b]\n\t"
4492 #ifdef WOLFSSL_KEIL
4493         "muls	r6, r7, r6\n\t"
4494 #elif defined(__clang__)
4495         "muls	r6, r7\n\t"
4496 #else
4497         "mul	r6, r7\n\t"
4498 #endif
4499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4500         "lsrs	r7, r6, #16\n\t"
4501 #else
4502         "lsr	r7, r6, #16\n\t"
4503 #endif
4504 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4505         "lsls	r6, r6, #16\n\t"
4506 #else
4507         "lsl	r6, r6, #16\n\t"
4508 #endif
4509 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4510         "adds	r4, r4, r6\n\t"
4511 #else
4512         "add	r4, r4, r6\n\t"
4513 #endif
4514 #ifdef WOLFSSL_KEIL
4515         "adcs	r5, r5, r7\n\t"
4516 #elif defined(__clang__)
4517         "adcs	r5, r7\n\t"
4518 #else
4519         "adc	r5, r7\n\t"
4520 #endif
4521 #ifdef WOLFSSL_KEIL
4522         "adcs	r3, r3, %[r]\n\t"
4523 #elif defined(__clang__)
4524         "adcs	r3, %[r]\n\t"
4525 #else
4526         "adc	r3, %[r]\n\t"
4527 #endif
4528         "#  A[1] * B[6]\n\t"
4529         "mov	%[a], r9\n\t"
4530         "mov	%[b], r10\n\t"
4531         "ldr	%[a], [%[a], #4]\n\t"
4532         "ldr	%[b], [%[b], #24]\n\t"
4533         "uxth	r6, %[a]\n\t"
4534         "uxth	r7, %[b]\n\t"
4535 #ifdef WOLFSSL_KEIL
4536         "muls	r7, r6, r7\n\t"
4537 #elif defined(__clang__)
4538         "muls	r7, r6\n\t"
4539 #else
4540         "mul	r7, r6\n\t"
4541 #endif
4542 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4543         "adds	r4, r4, r7\n\t"
4544 #else
4545         "add	r4, r4, r7\n\t"
4546 #endif
4547 #ifdef WOLFSSL_KEIL
4548         "adcs	r5, r5, %[r]\n\t"
4549 #elif defined(__clang__)
4550         "adcs	r5, %[r]\n\t"
4551 #else
4552         "adc	r5, %[r]\n\t"
4553 #endif
4554 #ifdef WOLFSSL_KEIL
4555         "adcs	r3, r3, %[r]\n\t"
4556 #elif defined(__clang__)
4557         "adcs	r3, %[r]\n\t"
4558 #else
4559         "adc	r3, %[r]\n\t"
4560 #endif
4561 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4562         "lsrs	r7, %[b], #16\n\t"
4563 #else
4564         "lsr	r7, %[b], #16\n\t"
4565 #endif
4566 #ifdef WOLFSSL_KEIL
4567         "muls	r6, r7, r6\n\t"
4568 #elif defined(__clang__)
4569         "muls	r6, r7\n\t"
4570 #else
4571         "mul	r6, r7\n\t"
4572 #endif
4573 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4574         "lsrs	r7, r6, #16\n\t"
4575 #else
4576         "lsr	r7, r6, #16\n\t"
4577 #endif
4578 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4579         "lsls	r6, r6, #16\n\t"
4580 #else
4581         "lsl	r6, r6, #16\n\t"
4582 #endif
4583 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4584         "adds	r4, r4, r6\n\t"
4585 #else
4586         "add	r4, r4, r6\n\t"
4587 #endif
4588 #ifdef WOLFSSL_KEIL
4589         "adcs	r5, r5, r7\n\t"
4590 #elif defined(__clang__)
4591         "adcs	r5, r7\n\t"
4592 #else
4593         "adc	r5, r7\n\t"
4594 #endif
4595 #ifdef WOLFSSL_KEIL
4596         "adcs	r3, r3, %[r]\n\t"
4597 #elif defined(__clang__)
4598         "adcs	r3, %[r]\n\t"
4599 #else
4600         "adc	r3, %[r]\n\t"
4601 #endif
4602 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4603         "lsrs	r6, %[a], #16\n\t"
4604 #else
4605         "lsr	r6, %[a], #16\n\t"
4606 #endif
4607 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4608         "lsrs	r7, %[b], #16\n\t"
4609 #else
4610         "lsr	r7, %[b], #16\n\t"
4611 #endif
4612 #ifdef WOLFSSL_KEIL
4613         "muls	r7, r6, r7\n\t"
4614 #elif defined(__clang__)
4615         "muls	r7, r6\n\t"
4616 #else
4617         "mul	r7, r6\n\t"
4618 #endif
4619 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4620         "adds	r5, r5, r7\n\t"
4621 #else
4622         "add	r5, r5, r7\n\t"
4623 #endif
4624 #ifdef WOLFSSL_KEIL
4625         "adcs	r3, r3, %[r]\n\t"
4626 #elif defined(__clang__)
4627         "adcs	r3, %[r]\n\t"
4628 #else
4629         "adc	r3, %[r]\n\t"
4630 #endif
4631         "uxth	r7, %[b]\n\t"
4632 #ifdef WOLFSSL_KEIL
4633         "muls	r6, r7, r6\n\t"
4634 #elif defined(__clang__)
4635         "muls	r6, r7\n\t"
4636 #else
4637         "mul	r6, r7\n\t"
4638 #endif
4639 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4640         "lsrs	r7, r6, #16\n\t"
4641 #else
4642         "lsr	r7, r6, #16\n\t"
4643 #endif
4644 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4645         "lsls	r6, r6, #16\n\t"
4646 #else
4647         "lsl	r6, r6, #16\n\t"
4648 #endif
4649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4650         "adds	r4, r4, r6\n\t"
4651 #else
4652         "add	r4, r4, r6\n\t"
4653 #endif
4654 #ifdef WOLFSSL_KEIL
4655         "adcs	r5, r5, r7\n\t"
4656 #elif defined(__clang__)
4657         "adcs	r5, r7\n\t"
4658 #else
4659         "adc	r5, r7\n\t"
4660 #endif
4661 #ifdef WOLFSSL_KEIL
4662         "adcs	r3, r3, %[r]\n\t"
4663 #elif defined(__clang__)
4664         "adcs	r3, %[r]\n\t"
4665 #else
4666         "adc	r3, %[r]\n\t"
4667 #endif
4668         "#  A[2] * B[5]\n\t"
4669         "mov	%[a], r9\n\t"
4670         "mov	%[b], r10\n\t"
4671         "ldr	%[a], [%[a], #8]\n\t"
4672         "ldr	%[b], [%[b], #20]\n\t"
4673         "uxth	r6, %[a]\n\t"
4674         "uxth	r7, %[b]\n\t"
4675 #ifdef WOLFSSL_KEIL
4676         "muls	r7, r6, r7\n\t"
4677 #elif defined(__clang__)
4678         "muls	r7, r6\n\t"
4679 #else
4680         "mul	r7, r6\n\t"
4681 #endif
4682 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4683         "adds	r4, r4, r7\n\t"
4684 #else
4685         "add	r4, r4, r7\n\t"
4686 #endif
4687 #ifdef WOLFSSL_KEIL
4688         "adcs	r5, r5, %[r]\n\t"
4689 #elif defined(__clang__)
4690         "adcs	r5, %[r]\n\t"
4691 #else
4692         "adc	r5, %[r]\n\t"
4693 #endif
4694 #ifdef WOLFSSL_KEIL
4695         "adcs	r3, r3, %[r]\n\t"
4696 #elif defined(__clang__)
4697         "adcs	r3, %[r]\n\t"
4698 #else
4699         "adc	r3, %[r]\n\t"
4700 #endif
4701 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4702         "lsrs	r7, %[b], #16\n\t"
4703 #else
4704         "lsr	r7, %[b], #16\n\t"
4705 #endif
4706 #ifdef WOLFSSL_KEIL
4707         "muls	r6, r7, r6\n\t"
4708 #elif defined(__clang__)
4709         "muls	r6, r7\n\t"
4710 #else
4711         "mul	r6, r7\n\t"
4712 #endif
4713 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4714         "lsrs	r7, r6, #16\n\t"
4715 #else
4716         "lsr	r7, r6, #16\n\t"
4717 #endif
4718 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4719         "lsls	r6, r6, #16\n\t"
4720 #else
4721         "lsl	r6, r6, #16\n\t"
4722 #endif
4723 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4724         "adds	r4, r4, r6\n\t"
4725 #else
4726         "add	r4, r4, r6\n\t"
4727 #endif
4728 #ifdef WOLFSSL_KEIL
4729         "adcs	r5, r5, r7\n\t"
4730 #elif defined(__clang__)
4731         "adcs	r5, r7\n\t"
4732 #else
4733         "adc	r5, r7\n\t"
4734 #endif
4735 #ifdef WOLFSSL_KEIL
4736         "adcs	r3, r3, %[r]\n\t"
4737 #elif defined(__clang__)
4738         "adcs	r3, %[r]\n\t"
4739 #else
4740         "adc	r3, %[r]\n\t"
4741 #endif
4742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4743         "lsrs	r6, %[a], #16\n\t"
4744 #else
4745         "lsr	r6, %[a], #16\n\t"
4746 #endif
4747 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4748         "lsrs	r7, %[b], #16\n\t"
4749 #else
4750         "lsr	r7, %[b], #16\n\t"
4751 #endif
4752 #ifdef WOLFSSL_KEIL
4753         "muls	r7, r6, r7\n\t"
4754 #elif defined(__clang__)
4755         "muls	r7, r6\n\t"
4756 #else
4757         "mul	r7, r6\n\t"
4758 #endif
4759 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4760         "adds	r5, r5, r7\n\t"
4761 #else
4762         "add	r5, r5, r7\n\t"
4763 #endif
4764 #ifdef WOLFSSL_KEIL
4765         "adcs	r3, r3, %[r]\n\t"
4766 #elif defined(__clang__)
4767         "adcs	r3, %[r]\n\t"
4768 #else
4769         "adc	r3, %[r]\n\t"
4770 #endif
4771         "uxth	r7, %[b]\n\t"
4772 #ifdef WOLFSSL_KEIL
4773         "muls	r6, r7, r6\n\t"
4774 #elif defined(__clang__)
4775         "muls	r6, r7\n\t"
4776 #else
4777         "mul	r6, r7\n\t"
4778 #endif
4779 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4780         "lsrs	r7, r6, #16\n\t"
4781 #else
4782         "lsr	r7, r6, #16\n\t"
4783 #endif
4784 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4785         "lsls	r6, r6, #16\n\t"
4786 #else
4787         "lsl	r6, r6, #16\n\t"
4788 #endif
4789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4790         "adds	r4, r4, r6\n\t"
4791 #else
4792         "add	r4, r4, r6\n\t"
4793 #endif
4794 #ifdef WOLFSSL_KEIL
4795         "adcs	r5, r5, r7\n\t"
4796 #elif defined(__clang__)
4797         "adcs	r5, r7\n\t"
4798 #else
4799         "adc	r5, r7\n\t"
4800 #endif
4801 #ifdef WOLFSSL_KEIL
4802         "adcs	r3, r3, %[r]\n\t"
4803 #elif defined(__clang__)
4804         "adcs	r3, %[r]\n\t"
4805 #else
4806         "adc	r3, %[r]\n\t"
4807 #endif
4808         "#  A[3] * B[4]\n\t"
4809         "mov	%[a], r9\n\t"
4810         "mov	%[b], r10\n\t"
4811         "ldr	%[a], [%[a], #12]\n\t"
4812         "ldr	%[b], [%[b], #16]\n\t"
4813         "uxth	r6, %[a]\n\t"
4814         "uxth	r7, %[b]\n\t"
4815 #ifdef WOLFSSL_KEIL
4816         "muls	r7, r6, r7\n\t"
4817 #elif defined(__clang__)
4818         "muls	r7, r6\n\t"
4819 #else
4820         "mul	r7, r6\n\t"
4821 #endif
4822 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4823         "adds	r4, r4, r7\n\t"
4824 #else
4825         "add	r4, r4, r7\n\t"
4826 #endif
4827 #ifdef WOLFSSL_KEIL
4828         "adcs	r5, r5, %[r]\n\t"
4829 #elif defined(__clang__)
4830         "adcs	r5, %[r]\n\t"
4831 #else
4832         "adc	r5, %[r]\n\t"
4833 #endif
4834 #ifdef WOLFSSL_KEIL
4835         "adcs	r3, r3, %[r]\n\t"
4836 #elif defined(__clang__)
4837         "adcs	r3, %[r]\n\t"
4838 #else
4839         "adc	r3, %[r]\n\t"
4840 #endif
4841 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4842         "lsrs	r7, %[b], #16\n\t"
4843 #else
4844         "lsr	r7, %[b], #16\n\t"
4845 #endif
4846 #ifdef WOLFSSL_KEIL
4847         "muls	r6, r7, r6\n\t"
4848 #elif defined(__clang__)
4849         "muls	r6, r7\n\t"
4850 #else
4851         "mul	r6, r7\n\t"
4852 #endif
4853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4854         "lsrs	r7, r6, #16\n\t"
4855 #else
4856         "lsr	r7, r6, #16\n\t"
4857 #endif
4858 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4859         "lsls	r6, r6, #16\n\t"
4860 #else
4861         "lsl	r6, r6, #16\n\t"
4862 #endif
4863 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4864         "adds	r4, r4, r6\n\t"
4865 #else
4866         "add	r4, r4, r6\n\t"
4867 #endif
4868 #ifdef WOLFSSL_KEIL
4869         "adcs	r5, r5, r7\n\t"
4870 #elif defined(__clang__)
4871         "adcs	r5, r7\n\t"
4872 #else
4873         "adc	r5, r7\n\t"
4874 #endif
4875 #ifdef WOLFSSL_KEIL
4876         "adcs	r3, r3, %[r]\n\t"
4877 #elif defined(__clang__)
4878         "adcs	r3, %[r]\n\t"
4879 #else
4880         "adc	r3, %[r]\n\t"
4881 #endif
4882 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4883         "lsrs	r6, %[a], #16\n\t"
4884 #else
4885         "lsr	r6, %[a], #16\n\t"
4886 #endif
4887 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4888         "lsrs	r7, %[b], #16\n\t"
4889 #else
4890         "lsr	r7, %[b], #16\n\t"
4891 #endif
4892 #ifdef WOLFSSL_KEIL
4893         "muls	r7, r6, r7\n\t"
4894 #elif defined(__clang__)
4895         "muls	r7, r6\n\t"
4896 #else
4897         "mul	r7, r6\n\t"
4898 #endif
4899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4900         "adds	r5, r5, r7\n\t"
4901 #else
4902         "add	r5, r5, r7\n\t"
4903 #endif
4904 #ifdef WOLFSSL_KEIL
4905         "adcs	r3, r3, %[r]\n\t"
4906 #elif defined(__clang__)
4907         "adcs	r3, %[r]\n\t"
4908 #else
4909         "adc	r3, %[r]\n\t"
4910 #endif
4911         "uxth	r7, %[b]\n\t"
4912 #ifdef WOLFSSL_KEIL
4913         "muls	r6, r7, r6\n\t"
4914 #elif defined(__clang__)
4915         "muls	r6, r7\n\t"
4916 #else
4917         "mul	r6, r7\n\t"
4918 #endif
4919 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4920         "lsrs	r7, r6, #16\n\t"
4921 #else
4922         "lsr	r7, r6, #16\n\t"
4923 #endif
4924 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4925         "lsls	r6, r6, #16\n\t"
4926 #else
4927         "lsl	r6, r6, #16\n\t"
4928 #endif
4929 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4930         "adds	r4, r4, r6\n\t"
4931 #else
4932         "add	r4, r4, r6\n\t"
4933 #endif
4934 #ifdef WOLFSSL_KEIL
4935         "adcs	r5, r5, r7\n\t"
4936 #elif defined(__clang__)
4937         "adcs	r5, r7\n\t"
4938 #else
4939         "adc	r5, r7\n\t"
4940 #endif
4941 #ifdef WOLFSSL_KEIL
4942         "adcs	r3, r3, %[r]\n\t"
4943 #elif defined(__clang__)
4944         "adcs	r3, %[r]\n\t"
4945 #else
4946         "adc	r3, %[r]\n\t"
4947 #endif
4948         "#  A[4] * B[3]\n\t"
4949         "mov	%[a], r9\n\t"
4950         "mov	%[b], r10\n\t"
4951         "ldr	%[a], [%[a], #16]\n\t"
4952         "ldr	%[b], [%[b], #12]\n\t"
4953         "uxth	r6, %[a]\n\t"
4954         "uxth	r7, %[b]\n\t"
4955 #ifdef WOLFSSL_KEIL
4956         "muls	r7, r6, r7\n\t"
4957 #elif defined(__clang__)
4958         "muls	r7, r6\n\t"
4959 #else
4960         "mul	r7, r6\n\t"
4961 #endif
4962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4963         "adds	r4, r4, r7\n\t"
4964 #else
4965         "add	r4, r4, r7\n\t"
4966 #endif
4967 #ifdef WOLFSSL_KEIL
4968         "adcs	r5, r5, %[r]\n\t"
4969 #elif defined(__clang__)
4970         "adcs	r5, %[r]\n\t"
4971 #else
4972         "adc	r5, %[r]\n\t"
4973 #endif
4974 #ifdef WOLFSSL_KEIL
4975         "adcs	r3, r3, %[r]\n\t"
4976 #elif defined(__clang__)
4977         "adcs	r3, %[r]\n\t"
4978 #else
4979         "adc	r3, %[r]\n\t"
4980 #endif
4981 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4982         "lsrs	r7, %[b], #16\n\t"
4983 #else
4984         "lsr	r7, %[b], #16\n\t"
4985 #endif
4986 #ifdef WOLFSSL_KEIL
4987         "muls	r6, r7, r6\n\t"
4988 #elif defined(__clang__)
4989         "muls	r6, r7\n\t"
4990 #else
4991         "mul	r6, r7\n\t"
4992 #endif
4993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4994         "lsrs	r7, r6, #16\n\t"
4995 #else
4996         "lsr	r7, r6, #16\n\t"
4997 #endif
4998 #if defined(__clang__) || defined(WOLFSSL_KEIL)
4999         "lsls	r6, r6, #16\n\t"
5000 #else
5001         "lsl	r6, r6, #16\n\t"
5002 #endif
5003 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5004         "adds	r4, r4, r6\n\t"
5005 #else
5006         "add	r4, r4, r6\n\t"
5007 #endif
5008 #ifdef WOLFSSL_KEIL
5009         "adcs	r5, r5, r7\n\t"
5010 #elif defined(__clang__)
5011         "adcs	r5, r7\n\t"
5012 #else
5013         "adc	r5, r7\n\t"
5014 #endif
5015 #ifdef WOLFSSL_KEIL
5016         "adcs	r3, r3, %[r]\n\t"
5017 #elif defined(__clang__)
5018         "adcs	r3, %[r]\n\t"
5019 #else
5020         "adc	r3, %[r]\n\t"
5021 #endif
5022 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5023         "lsrs	r6, %[a], #16\n\t"
5024 #else
5025         "lsr	r6, %[a], #16\n\t"
5026 #endif
5027 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5028         "lsrs	r7, %[b], #16\n\t"
5029 #else
5030         "lsr	r7, %[b], #16\n\t"
5031 #endif
5032 #ifdef WOLFSSL_KEIL
5033         "muls	r7, r6, r7\n\t"
5034 #elif defined(__clang__)
5035         "muls	r7, r6\n\t"
5036 #else
5037         "mul	r7, r6\n\t"
5038 #endif
5039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5040         "adds	r5, r5, r7\n\t"
5041 #else
5042         "add	r5, r5, r7\n\t"
5043 #endif
5044 #ifdef WOLFSSL_KEIL
5045         "adcs	r3, r3, %[r]\n\t"
5046 #elif defined(__clang__)
5047         "adcs	r3, %[r]\n\t"
5048 #else
5049         "adc	r3, %[r]\n\t"
5050 #endif
5051         "uxth	r7, %[b]\n\t"
5052 #ifdef WOLFSSL_KEIL
5053         "muls	r6, r7, r6\n\t"
5054 #elif defined(__clang__)
5055         "muls	r6, r7\n\t"
5056 #else
5057         "mul	r6, r7\n\t"
5058 #endif
5059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5060         "lsrs	r7, r6, #16\n\t"
5061 #else
5062         "lsr	r7, r6, #16\n\t"
5063 #endif
5064 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5065         "lsls	r6, r6, #16\n\t"
5066 #else
5067         "lsl	r6, r6, #16\n\t"
5068 #endif
5069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5070         "adds	r4, r4, r6\n\t"
5071 #else
5072         "add	r4, r4, r6\n\t"
5073 #endif
5074 #ifdef WOLFSSL_KEIL
5075         "adcs	r5, r5, r7\n\t"
5076 #elif defined(__clang__)
5077         "adcs	r5, r7\n\t"
5078 #else
5079         "adc	r5, r7\n\t"
5080 #endif
5081 #ifdef WOLFSSL_KEIL
5082         "adcs	r3, r3, %[r]\n\t"
5083 #elif defined(__clang__)
5084         "adcs	r3, %[r]\n\t"
5085 #else
5086         "adc	r3, %[r]\n\t"
5087 #endif
5088         "#  A[5] * B[2]\n\t"
5089         "mov	%[a], r9\n\t"
5090         "mov	%[b], r10\n\t"
5091         "ldr	%[a], [%[a], #20]\n\t"
5092         "ldr	%[b], [%[b], #8]\n\t"
5093         "uxth	r6, %[a]\n\t"
5094         "uxth	r7, %[b]\n\t"
5095 #ifdef WOLFSSL_KEIL
5096         "muls	r7, r6, r7\n\t"
5097 #elif defined(__clang__)
5098         "muls	r7, r6\n\t"
5099 #else
5100         "mul	r7, r6\n\t"
5101 #endif
5102 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5103         "adds	r4, r4, r7\n\t"
5104 #else
5105         "add	r4, r4, r7\n\t"
5106 #endif
5107 #ifdef WOLFSSL_KEIL
5108         "adcs	r5, r5, %[r]\n\t"
5109 #elif defined(__clang__)
5110         "adcs	r5, %[r]\n\t"
5111 #else
5112         "adc	r5, %[r]\n\t"
5113 #endif
5114 #ifdef WOLFSSL_KEIL
5115         "adcs	r3, r3, %[r]\n\t"
5116 #elif defined(__clang__)
5117         "adcs	r3, %[r]\n\t"
5118 #else
5119         "adc	r3, %[r]\n\t"
5120 #endif
5121 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5122         "lsrs	r7, %[b], #16\n\t"
5123 #else
5124         "lsr	r7, %[b], #16\n\t"
5125 #endif
5126 #ifdef WOLFSSL_KEIL
5127         "muls	r6, r7, r6\n\t"
5128 #elif defined(__clang__)
5129         "muls	r6, r7\n\t"
5130 #else
5131         "mul	r6, r7\n\t"
5132 #endif
5133 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5134         "lsrs	r7, r6, #16\n\t"
5135 #else
5136         "lsr	r7, r6, #16\n\t"
5137 #endif
5138 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5139         "lsls	r6, r6, #16\n\t"
5140 #else
5141         "lsl	r6, r6, #16\n\t"
5142 #endif
5143 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5144         "adds	r4, r4, r6\n\t"
5145 #else
5146         "add	r4, r4, r6\n\t"
5147 #endif
5148 #ifdef WOLFSSL_KEIL
5149         "adcs	r5, r5, r7\n\t"
5150 #elif defined(__clang__)
5151         "adcs	r5, r7\n\t"
5152 #else
5153         "adc	r5, r7\n\t"
5154 #endif
5155 #ifdef WOLFSSL_KEIL
5156         "adcs	r3, r3, %[r]\n\t"
5157 #elif defined(__clang__)
5158         "adcs	r3, %[r]\n\t"
5159 #else
5160         "adc	r3, %[r]\n\t"
5161 #endif
5162 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5163         "lsrs	r6, %[a], #16\n\t"
5164 #else
5165         "lsr	r6, %[a], #16\n\t"
5166 #endif
5167 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5168         "lsrs	r7, %[b], #16\n\t"
5169 #else
5170         "lsr	r7, %[b], #16\n\t"
5171 #endif
5172 #ifdef WOLFSSL_KEIL
5173         "muls	r7, r6, r7\n\t"
5174 #elif defined(__clang__)
5175         "muls	r7, r6\n\t"
5176 #else
5177         "mul	r7, r6\n\t"
5178 #endif
5179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5180         "adds	r5, r5, r7\n\t"
5181 #else
5182         "add	r5, r5, r7\n\t"
5183 #endif
5184 #ifdef WOLFSSL_KEIL
5185         "adcs	r3, r3, %[r]\n\t"
5186 #elif defined(__clang__)
5187         "adcs	r3, %[r]\n\t"
5188 #else
5189         "adc	r3, %[r]\n\t"
5190 #endif
5191         "uxth	r7, %[b]\n\t"
5192 #ifdef WOLFSSL_KEIL
5193         "muls	r6, r7, r6\n\t"
5194 #elif defined(__clang__)
5195         "muls	r6, r7\n\t"
5196 #else
5197         "mul	r6, r7\n\t"
5198 #endif
5199 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5200         "lsrs	r7, r6, #16\n\t"
5201 #else
5202         "lsr	r7, r6, #16\n\t"
5203 #endif
5204 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5205         "lsls	r6, r6, #16\n\t"
5206 #else
5207         "lsl	r6, r6, #16\n\t"
5208 #endif
5209 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5210         "adds	r4, r4, r6\n\t"
5211 #else
5212         "add	r4, r4, r6\n\t"
5213 #endif
5214 #ifdef WOLFSSL_KEIL
5215         "adcs	r5, r5, r7\n\t"
5216 #elif defined(__clang__)
5217         "adcs	r5, r7\n\t"
5218 #else
5219         "adc	r5, r7\n\t"
5220 #endif
5221 #ifdef WOLFSSL_KEIL
5222         "adcs	r3, r3, %[r]\n\t"
5223 #elif defined(__clang__)
5224         "adcs	r3, %[r]\n\t"
5225 #else
5226         "adc	r3, %[r]\n\t"
5227 #endif
5228         "#  A[6] * B[1]\n\t"
5229         "mov	%[a], r9\n\t"
5230         "mov	%[b], r10\n\t"
5231         "ldr	%[a], [%[a], #24]\n\t"
5232         "ldr	%[b], [%[b], #4]\n\t"
5233         "uxth	r6, %[a]\n\t"
5234         "uxth	r7, %[b]\n\t"
5235 #ifdef WOLFSSL_KEIL
5236         "muls	r7, r6, r7\n\t"
5237 #elif defined(__clang__)
5238         "muls	r7, r6\n\t"
5239 #else
5240         "mul	r7, r6\n\t"
5241 #endif
5242 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5243         "adds	r4, r4, r7\n\t"
5244 #else
5245         "add	r4, r4, r7\n\t"
5246 #endif
5247 #ifdef WOLFSSL_KEIL
5248         "adcs	r5, r5, %[r]\n\t"
5249 #elif defined(__clang__)
5250         "adcs	r5, %[r]\n\t"
5251 #else
5252         "adc	r5, %[r]\n\t"
5253 #endif
5254 #ifdef WOLFSSL_KEIL
5255         "adcs	r3, r3, %[r]\n\t"
5256 #elif defined(__clang__)
5257         "adcs	r3, %[r]\n\t"
5258 #else
5259         "adc	r3, %[r]\n\t"
5260 #endif
5261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5262         "lsrs	r7, %[b], #16\n\t"
5263 #else
5264         "lsr	r7, %[b], #16\n\t"
5265 #endif
5266 #ifdef WOLFSSL_KEIL
5267         "muls	r6, r7, r6\n\t"
5268 #elif defined(__clang__)
5269         "muls	r6, r7\n\t"
5270 #else
5271         "mul	r6, r7\n\t"
5272 #endif
5273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5274         "lsrs	r7, r6, #16\n\t"
5275 #else
5276         "lsr	r7, r6, #16\n\t"
5277 #endif
5278 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5279         "lsls	r6, r6, #16\n\t"
5280 #else
5281         "lsl	r6, r6, #16\n\t"
5282 #endif
5283 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5284         "adds	r4, r4, r6\n\t"
5285 #else
5286         "add	r4, r4, r6\n\t"
5287 #endif
5288 #ifdef WOLFSSL_KEIL
5289         "adcs	r5, r5, r7\n\t"
5290 #elif defined(__clang__)
5291         "adcs	r5, r7\n\t"
5292 #else
5293         "adc	r5, r7\n\t"
5294 #endif
5295 #ifdef WOLFSSL_KEIL
5296         "adcs	r3, r3, %[r]\n\t"
5297 #elif defined(__clang__)
5298         "adcs	r3, %[r]\n\t"
5299 #else
5300         "adc	r3, %[r]\n\t"
5301 #endif
5302 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5303         "lsrs	r6, %[a], #16\n\t"
5304 #else
5305         "lsr	r6, %[a], #16\n\t"
5306 #endif
5307 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5308         "lsrs	r7, %[b], #16\n\t"
5309 #else
5310         "lsr	r7, %[b], #16\n\t"
5311 #endif
5312 #ifdef WOLFSSL_KEIL
5313         "muls	r7, r6, r7\n\t"
5314 #elif defined(__clang__)
5315         "muls	r7, r6\n\t"
5316 #else
5317         "mul	r7, r6\n\t"
5318 #endif
5319 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5320         "adds	r5, r5, r7\n\t"
5321 #else
5322         "add	r5, r5, r7\n\t"
5323 #endif
5324 #ifdef WOLFSSL_KEIL
5325         "adcs	r3, r3, %[r]\n\t"
5326 #elif defined(__clang__)
5327         "adcs	r3, %[r]\n\t"
5328 #else
5329         "adc	r3, %[r]\n\t"
5330 #endif
5331         "uxth	r7, %[b]\n\t"
5332 #ifdef WOLFSSL_KEIL
5333         "muls	r6, r7, r6\n\t"
5334 #elif defined(__clang__)
5335         "muls	r6, r7\n\t"
5336 #else
5337         "mul	r6, r7\n\t"
5338 #endif
5339 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5340         "lsrs	r7, r6, #16\n\t"
5341 #else
5342         "lsr	r7, r6, #16\n\t"
5343 #endif
5344 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5345         "lsls	r6, r6, #16\n\t"
5346 #else
5347         "lsl	r6, r6, #16\n\t"
5348 #endif
5349 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5350         "adds	r4, r4, r6\n\t"
5351 #else
5352         "add	r4, r4, r6\n\t"
5353 #endif
5354 #ifdef WOLFSSL_KEIL
5355         "adcs	r5, r5, r7\n\t"
5356 #elif defined(__clang__)
5357         "adcs	r5, r7\n\t"
5358 #else
5359         "adc	r5, r7\n\t"
5360 #endif
5361 #ifdef WOLFSSL_KEIL
5362         "adcs	r3, r3, %[r]\n\t"
5363 #elif defined(__clang__)
5364         "adcs	r3, %[r]\n\t"
5365 #else
5366         "adc	r3, %[r]\n\t"
5367 #endif
5368         "#  A[7] * B[0]\n\t"
5369         "mov	%[a], r9\n\t"
5370         "mov	%[b], r10\n\t"
5371         "ldr	%[a], [%[a], #28]\n\t"
5372         "ldr	%[b], [%[b]]\n\t"
5373         "uxth	r6, %[a]\n\t"
5374         "uxth	r7, %[b]\n\t"
5375 #ifdef WOLFSSL_KEIL
5376         "muls	r7, r6, r7\n\t"
5377 #elif defined(__clang__)
5378         "muls	r7, r6\n\t"
5379 #else
5380         "mul	r7, r6\n\t"
5381 #endif
5382 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5383         "adds	r4, r4, r7\n\t"
5384 #else
5385         "add	r4, r4, r7\n\t"
5386 #endif
5387 #ifdef WOLFSSL_KEIL
5388         "adcs	r5, r5, %[r]\n\t"
5389 #elif defined(__clang__)
5390         "adcs	r5, %[r]\n\t"
5391 #else
5392         "adc	r5, %[r]\n\t"
5393 #endif
5394 #ifdef WOLFSSL_KEIL
5395         "adcs	r3, r3, %[r]\n\t"
5396 #elif defined(__clang__)
5397         "adcs	r3, %[r]\n\t"
5398 #else
5399         "adc	r3, %[r]\n\t"
5400 #endif
5401 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5402         "lsrs	r7, %[b], #16\n\t"
5403 #else
5404         "lsr	r7, %[b], #16\n\t"
5405 #endif
5406 #ifdef WOLFSSL_KEIL
5407         "muls	r6, r7, r6\n\t"
5408 #elif defined(__clang__)
5409         "muls	r6, r7\n\t"
5410 #else
5411         "mul	r6, r7\n\t"
5412 #endif
5413 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5414         "lsrs	r7, r6, #16\n\t"
5415 #else
5416         "lsr	r7, r6, #16\n\t"
5417 #endif
5418 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5419         "lsls	r6, r6, #16\n\t"
5420 #else
5421         "lsl	r6, r6, #16\n\t"
5422 #endif
5423 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5424         "adds	r4, r4, r6\n\t"
5425 #else
5426         "add	r4, r4, r6\n\t"
5427 #endif
5428 #ifdef WOLFSSL_KEIL
5429         "adcs	r5, r5, r7\n\t"
5430 #elif defined(__clang__)
5431         "adcs	r5, r7\n\t"
5432 #else
5433         "adc	r5, r7\n\t"
5434 #endif
5435 #ifdef WOLFSSL_KEIL
5436         "adcs	r3, r3, %[r]\n\t"
5437 #elif defined(__clang__)
5438         "adcs	r3, %[r]\n\t"
5439 #else
5440         "adc	r3, %[r]\n\t"
5441 #endif
5442 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5443         "lsrs	r6, %[a], #16\n\t"
5444 #else
5445         "lsr	r6, %[a], #16\n\t"
5446 #endif
5447 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5448         "lsrs	r7, %[b], #16\n\t"
5449 #else
5450         "lsr	r7, %[b], #16\n\t"
5451 #endif
5452 #ifdef WOLFSSL_KEIL
5453         "muls	r7, r6, r7\n\t"
5454 #elif defined(__clang__)
5455         "muls	r7, r6\n\t"
5456 #else
5457         "mul	r7, r6\n\t"
5458 #endif
5459 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5460         "adds	r5, r5, r7\n\t"
5461 #else
5462         "add	r5, r5, r7\n\t"
5463 #endif
5464 #ifdef WOLFSSL_KEIL
5465         "adcs	r3, r3, %[r]\n\t"
5466 #elif defined(__clang__)
5467         "adcs	r3, %[r]\n\t"
5468 #else
5469         "adc	r3, %[r]\n\t"
5470 #endif
5471         "uxth	r7, %[b]\n\t"
5472 #ifdef WOLFSSL_KEIL
5473         "muls	r6, r7, r6\n\t"
5474 #elif defined(__clang__)
5475         "muls	r6, r7\n\t"
5476 #else
5477         "mul	r6, r7\n\t"
5478 #endif
5479 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5480         "lsrs	r7, r6, #16\n\t"
5481 #else
5482         "lsr	r7, r6, #16\n\t"
5483 #endif
5484 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5485         "lsls	r6, r6, #16\n\t"
5486 #else
5487         "lsl	r6, r6, #16\n\t"
5488 #endif
5489 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5490         "adds	r4, r4, r6\n\t"
5491 #else
5492         "add	r4, r4, r6\n\t"
5493 #endif
5494 #ifdef WOLFSSL_KEIL
5495         "adcs	r5, r5, r7\n\t"
5496 #elif defined(__clang__)
5497         "adcs	r5, r7\n\t"
5498 #else
5499         "adc	r5, r7\n\t"
5500 #endif
5501 #ifdef WOLFSSL_KEIL
5502         "adcs	r3, r3, %[r]\n\t"
5503 #elif defined(__clang__)
5504         "adcs	r3, %[r]\n\t"
5505 #else
5506         "adc	r3, %[r]\n\t"
5507 #endif
5508         "str	r4, [sp, #28]\n\t"
5509         "#  A[7] * B[1]\n\t"
5510         "movs	r4, #0\n\t"
5511         "mov	%[a], r9\n\t"
5512         "mov	%[b], r10\n\t"
5513         "ldr	%[a], [%[a], #28]\n\t"
5514         "ldr	%[b], [%[b], #4]\n\t"
5515         "uxth	r6, %[a]\n\t"
5516         "uxth	r7, %[b]\n\t"
5517 #ifdef WOLFSSL_KEIL
5518         "muls	r7, r6, r7\n\t"
5519 #elif defined(__clang__)
5520         "muls	r7, r6\n\t"
5521 #else
5522         "mul	r7, r6\n\t"
5523 #endif
5524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5525         "adds	r5, r5, r7\n\t"
5526 #else
5527         "add	r5, r5, r7\n\t"
5528 #endif
5529 #ifdef WOLFSSL_KEIL
5530         "adcs	r3, r3, %[r]\n\t"
5531 #elif defined(__clang__)
5532         "adcs	r3, %[r]\n\t"
5533 #else
5534         "adc	r3, %[r]\n\t"
5535 #endif
5536 #ifdef WOLFSSL_KEIL
5537         "adcs	r4, r4, %[r]\n\t"
5538 #elif defined(__clang__)
5539         "adcs	r4, %[r]\n\t"
5540 #else
5541         "adc	r4, %[r]\n\t"
5542 #endif
5543 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5544         "lsrs	r7, %[b], #16\n\t"
5545 #else
5546         "lsr	r7, %[b], #16\n\t"
5547 #endif
5548 #ifdef WOLFSSL_KEIL
5549         "muls	r6, r7, r6\n\t"
5550 #elif defined(__clang__)
5551         "muls	r6, r7\n\t"
5552 #else
5553         "mul	r6, r7\n\t"
5554 #endif
5555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5556         "lsrs	r7, r6, #16\n\t"
5557 #else
5558         "lsr	r7, r6, #16\n\t"
5559 #endif
5560 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5561         "lsls	r6, r6, #16\n\t"
5562 #else
5563         "lsl	r6, r6, #16\n\t"
5564 #endif
5565 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5566         "adds	r5, r5, r6\n\t"
5567 #else
5568         "add	r5, r5, r6\n\t"
5569 #endif
5570 #ifdef WOLFSSL_KEIL
5571         "adcs	r3, r3, r7\n\t"
5572 #elif defined(__clang__)
5573         "adcs	r3, r7\n\t"
5574 #else
5575         "adc	r3, r7\n\t"
5576 #endif
5577 #ifdef WOLFSSL_KEIL
5578         "adcs	r4, r4, %[r]\n\t"
5579 #elif defined(__clang__)
5580         "adcs	r4, %[r]\n\t"
5581 #else
5582         "adc	r4, %[r]\n\t"
5583 #endif
5584 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5585         "lsrs	r6, %[a], #16\n\t"
5586 #else
5587         "lsr	r6, %[a], #16\n\t"
5588 #endif
5589 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5590         "lsrs	r7, %[b], #16\n\t"
5591 #else
5592         "lsr	r7, %[b], #16\n\t"
5593 #endif
5594 #ifdef WOLFSSL_KEIL
5595         "muls	r7, r6, r7\n\t"
5596 #elif defined(__clang__)
5597         "muls	r7, r6\n\t"
5598 #else
5599         "mul	r7, r6\n\t"
5600 #endif
5601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5602         "adds	r3, r3, r7\n\t"
5603 #else
5604         "add	r3, r3, r7\n\t"
5605 #endif
5606 #ifdef WOLFSSL_KEIL
5607         "adcs	r4, r4, %[r]\n\t"
5608 #elif defined(__clang__)
5609         "adcs	r4, %[r]\n\t"
5610 #else
5611         "adc	r4, %[r]\n\t"
5612 #endif
5613         "uxth	r7, %[b]\n\t"
5614 #ifdef WOLFSSL_KEIL
5615         "muls	r6, r7, r6\n\t"
5616 #elif defined(__clang__)
5617         "muls	r6, r7\n\t"
5618 #else
5619         "mul	r6, r7\n\t"
5620 #endif
5621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5622         "lsrs	r7, r6, #16\n\t"
5623 #else
5624         "lsr	r7, r6, #16\n\t"
5625 #endif
5626 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5627         "lsls	r6, r6, #16\n\t"
5628 #else
5629         "lsl	r6, r6, #16\n\t"
5630 #endif
5631 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5632         "adds	r5, r5, r6\n\t"
5633 #else
5634         "add	r5, r5, r6\n\t"
5635 #endif
5636 #ifdef WOLFSSL_KEIL
5637         "adcs	r3, r3, r7\n\t"
5638 #elif defined(__clang__)
5639         "adcs	r3, r7\n\t"
5640 #else
5641         "adc	r3, r7\n\t"
5642 #endif
5643 #ifdef WOLFSSL_KEIL
5644         "adcs	r4, r4, %[r]\n\t"
5645 #elif defined(__clang__)
5646         "adcs	r4, %[r]\n\t"
5647 #else
5648         "adc	r4, %[r]\n\t"
5649 #endif
5650         "#  A[6] * B[2]\n\t"
5651         "mov	%[a], r9\n\t"
5652         "mov	%[b], r10\n\t"
5653         "ldr	%[a], [%[a], #24]\n\t"
5654         "ldr	%[b], [%[b], #8]\n\t"
5655         "uxth	r6, %[a]\n\t"
5656         "uxth	r7, %[b]\n\t"
5657 #ifdef WOLFSSL_KEIL
5658         "muls	r7, r6, r7\n\t"
5659 #elif defined(__clang__)
5660         "muls	r7, r6\n\t"
5661 #else
5662         "mul	r7, r6\n\t"
5663 #endif
5664 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5665         "adds	r5, r5, r7\n\t"
5666 #else
5667         "add	r5, r5, r7\n\t"
5668 #endif
5669 #ifdef WOLFSSL_KEIL
5670         "adcs	r3, r3, %[r]\n\t"
5671 #elif defined(__clang__)
5672         "adcs	r3, %[r]\n\t"
5673 #else
5674         "adc	r3, %[r]\n\t"
5675 #endif
5676 #ifdef WOLFSSL_KEIL
5677         "adcs	r4, r4, %[r]\n\t"
5678 #elif defined(__clang__)
5679         "adcs	r4, %[r]\n\t"
5680 #else
5681         "adc	r4, %[r]\n\t"
5682 #endif
5683 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5684         "lsrs	r7, %[b], #16\n\t"
5685 #else
5686         "lsr	r7, %[b], #16\n\t"
5687 #endif
5688 #ifdef WOLFSSL_KEIL
5689         "muls	r6, r7, r6\n\t"
5690 #elif defined(__clang__)
5691         "muls	r6, r7\n\t"
5692 #else
5693         "mul	r6, r7\n\t"
5694 #endif
5695 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5696         "lsrs	r7, r6, #16\n\t"
5697 #else
5698         "lsr	r7, r6, #16\n\t"
5699 #endif
5700 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5701         "lsls	r6, r6, #16\n\t"
5702 #else
5703         "lsl	r6, r6, #16\n\t"
5704 #endif
5705 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5706         "adds	r5, r5, r6\n\t"
5707 #else
5708         "add	r5, r5, r6\n\t"
5709 #endif
5710 #ifdef WOLFSSL_KEIL
5711         "adcs	r3, r3, r7\n\t"
5712 #elif defined(__clang__)
5713         "adcs	r3, r7\n\t"
5714 #else
5715         "adc	r3, r7\n\t"
5716 #endif
5717 #ifdef WOLFSSL_KEIL
5718         "adcs	r4, r4, %[r]\n\t"
5719 #elif defined(__clang__)
5720         "adcs	r4, %[r]\n\t"
5721 #else
5722         "adc	r4, %[r]\n\t"
5723 #endif
5724 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5725         "lsrs	r6, %[a], #16\n\t"
5726 #else
5727         "lsr	r6, %[a], #16\n\t"
5728 #endif
5729 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5730         "lsrs	r7, %[b], #16\n\t"
5731 #else
5732         "lsr	r7, %[b], #16\n\t"
5733 #endif
5734 #ifdef WOLFSSL_KEIL
5735         "muls	r7, r6, r7\n\t"
5736 #elif defined(__clang__)
5737         "muls	r7, r6\n\t"
5738 #else
5739         "mul	r7, r6\n\t"
5740 #endif
5741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5742         "adds	r3, r3, r7\n\t"
5743 #else
5744         "add	r3, r3, r7\n\t"
5745 #endif
5746 #ifdef WOLFSSL_KEIL
5747         "adcs	r4, r4, %[r]\n\t"
5748 #elif defined(__clang__)
5749         "adcs	r4, %[r]\n\t"
5750 #else
5751         "adc	r4, %[r]\n\t"
5752 #endif
5753         "uxth	r7, %[b]\n\t"
5754 #ifdef WOLFSSL_KEIL
5755         "muls	r6, r7, r6\n\t"
5756 #elif defined(__clang__)
5757         "muls	r6, r7\n\t"
5758 #else
5759         "mul	r6, r7\n\t"
5760 #endif
5761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5762         "lsrs	r7, r6, #16\n\t"
5763 #else
5764         "lsr	r7, r6, #16\n\t"
5765 #endif
5766 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5767         "lsls	r6, r6, #16\n\t"
5768 #else
5769         "lsl	r6, r6, #16\n\t"
5770 #endif
5771 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5772         "adds	r5, r5, r6\n\t"
5773 #else
5774         "add	r5, r5, r6\n\t"
5775 #endif
5776 #ifdef WOLFSSL_KEIL
5777         "adcs	r3, r3, r7\n\t"
5778 #elif defined(__clang__)
5779         "adcs	r3, r7\n\t"
5780 #else
5781         "adc	r3, r7\n\t"
5782 #endif
5783 #ifdef WOLFSSL_KEIL
5784         "adcs	r4, r4, %[r]\n\t"
5785 #elif defined(__clang__)
5786         "adcs	r4, %[r]\n\t"
5787 #else
5788         "adc	r4, %[r]\n\t"
5789 #endif
5790         "#  A[5] * B[3]\n\t"
5791         "mov	%[a], r9\n\t"
5792         "mov	%[b], r10\n\t"
5793         "ldr	%[a], [%[a], #20]\n\t"
5794         "ldr	%[b], [%[b], #12]\n\t"
5795         "uxth	r6, %[a]\n\t"
5796         "uxth	r7, %[b]\n\t"
5797 #ifdef WOLFSSL_KEIL
5798         "muls	r7, r6, r7\n\t"
5799 #elif defined(__clang__)
5800         "muls	r7, r6\n\t"
5801 #else
5802         "mul	r7, r6\n\t"
5803 #endif
5804 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5805         "adds	r5, r5, r7\n\t"
5806 #else
5807         "add	r5, r5, r7\n\t"
5808 #endif
5809 #ifdef WOLFSSL_KEIL
5810         "adcs	r3, r3, %[r]\n\t"
5811 #elif defined(__clang__)
5812         "adcs	r3, %[r]\n\t"
5813 #else
5814         "adc	r3, %[r]\n\t"
5815 #endif
5816 #ifdef WOLFSSL_KEIL
5817         "adcs	r4, r4, %[r]\n\t"
5818 #elif defined(__clang__)
5819         "adcs	r4, %[r]\n\t"
5820 #else
5821         "adc	r4, %[r]\n\t"
5822 #endif
5823 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5824         "lsrs	r7, %[b], #16\n\t"
5825 #else
5826         "lsr	r7, %[b], #16\n\t"
5827 #endif
5828 #ifdef WOLFSSL_KEIL
5829         "muls	r6, r7, r6\n\t"
5830 #elif defined(__clang__)
5831         "muls	r6, r7\n\t"
5832 #else
5833         "mul	r6, r7\n\t"
5834 #endif
5835 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5836         "lsrs	r7, r6, #16\n\t"
5837 #else
5838         "lsr	r7, r6, #16\n\t"
5839 #endif
5840 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5841         "lsls	r6, r6, #16\n\t"
5842 #else
5843         "lsl	r6, r6, #16\n\t"
5844 #endif
5845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5846         "adds	r5, r5, r6\n\t"
5847 #else
5848         "add	r5, r5, r6\n\t"
5849 #endif
5850 #ifdef WOLFSSL_KEIL
5851         "adcs	r3, r3, r7\n\t"
5852 #elif defined(__clang__)
5853         "adcs	r3, r7\n\t"
5854 #else
5855         "adc	r3, r7\n\t"
5856 #endif
5857 #ifdef WOLFSSL_KEIL
5858         "adcs	r4, r4, %[r]\n\t"
5859 #elif defined(__clang__)
5860         "adcs	r4, %[r]\n\t"
5861 #else
5862         "adc	r4, %[r]\n\t"
5863 #endif
5864 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5865         "lsrs	r6, %[a], #16\n\t"
5866 #else
5867         "lsr	r6, %[a], #16\n\t"
5868 #endif
5869 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5870         "lsrs	r7, %[b], #16\n\t"
5871 #else
5872         "lsr	r7, %[b], #16\n\t"
5873 #endif
5874 #ifdef WOLFSSL_KEIL
5875         "muls	r7, r6, r7\n\t"
5876 #elif defined(__clang__)
5877         "muls	r7, r6\n\t"
5878 #else
5879         "mul	r7, r6\n\t"
5880 #endif
5881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5882         "adds	r3, r3, r7\n\t"
5883 #else
5884         "add	r3, r3, r7\n\t"
5885 #endif
5886 #ifdef WOLFSSL_KEIL
5887         "adcs	r4, r4, %[r]\n\t"
5888 #elif defined(__clang__)
5889         "adcs	r4, %[r]\n\t"
5890 #else
5891         "adc	r4, %[r]\n\t"
5892 #endif
5893         "uxth	r7, %[b]\n\t"
5894 #ifdef WOLFSSL_KEIL
5895         "muls	r6, r7, r6\n\t"
5896 #elif defined(__clang__)
5897         "muls	r6, r7\n\t"
5898 #else
5899         "mul	r6, r7\n\t"
5900 #endif
5901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5902         "lsrs	r7, r6, #16\n\t"
5903 #else
5904         "lsr	r7, r6, #16\n\t"
5905 #endif
5906 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5907         "lsls	r6, r6, #16\n\t"
5908 #else
5909         "lsl	r6, r6, #16\n\t"
5910 #endif
5911 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5912         "adds	r5, r5, r6\n\t"
5913 #else
5914         "add	r5, r5, r6\n\t"
5915 #endif
5916 #ifdef WOLFSSL_KEIL
5917         "adcs	r3, r3, r7\n\t"
5918 #elif defined(__clang__)
5919         "adcs	r3, r7\n\t"
5920 #else
5921         "adc	r3, r7\n\t"
5922 #endif
5923 #ifdef WOLFSSL_KEIL
5924         "adcs	r4, r4, %[r]\n\t"
5925 #elif defined(__clang__)
5926         "adcs	r4, %[r]\n\t"
5927 #else
5928         "adc	r4, %[r]\n\t"
5929 #endif
5930         "#  A[4] * B[4]\n\t"
5931         "mov	%[a], r9\n\t"
5932         "mov	%[b], r10\n\t"
5933         "ldr	%[a], [%[a], #16]\n\t"
5934         "ldr	%[b], [%[b], #16]\n\t"
5935         "uxth	r6, %[a]\n\t"
5936         "uxth	r7, %[b]\n\t"
5937 #ifdef WOLFSSL_KEIL
5938         "muls	r7, r6, r7\n\t"
5939 #elif defined(__clang__)
5940         "muls	r7, r6\n\t"
5941 #else
5942         "mul	r7, r6\n\t"
5943 #endif
5944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5945         "adds	r5, r5, r7\n\t"
5946 #else
5947         "add	r5, r5, r7\n\t"
5948 #endif
5949 #ifdef WOLFSSL_KEIL
5950         "adcs	r3, r3, %[r]\n\t"
5951 #elif defined(__clang__)
5952         "adcs	r3, %[r]\n\t"
5953 #else
5954         "adc	r3, %[r]\n\t"
5955 #endif
5956 #ifdef WOLFSSL_KEIL
5957         "adcs	r4, r4, %[r]\n\t"
5958 #elif defined(__clang__)
5959         "adcs	r4, %[r]\n\t"
5960 #else
5961         "adc	r4, %[r]\n\t"
5962 #endif
5963 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5964         "lsrs	r7, %[b], #16\n\t"
5965 #else
5966         "lsr	r7, %[b], #16\n\t"
5967 #endif
5968 #ifdef WOLFSSL_KEIL
5969         "muls	r6, r7, r6\n\t"
5970 #elif defined(__clang__)
5971         "muls	r6, r7\n\t"
5972 #else
5973         "mul	r6, r7\n\t"
5974 #endif
5975 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5976         "lsrs	r7, r6, #16\n\t"
5977 #else
5978         "lsr	r7, r6, #16\n\t"
5979 #endif
5980 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5981         "lsls	r6, r6, #16\n\t"
5982 #else
5983         "lsl	r6, r6, #16\n\t"
5984 #endif
5985 #if defined(__clang__) || defined(WOLFSSL_KEIL)
5986         "adds	r5, r5, r6\n\t"
5987 #else
5988         "add	r5, r5, r6\n\t"
5989 #endif
5990 #ifdef WOLFSSL_KEIL
5991         "adcs	r3, r3, r7\n\t"
5992 #elif defined(__clang__)
5993         "adcs	r3, r7\n\t"
5994 #else
5995         "adc	r3, r7\n\t"
5996 #endif
5997 #ifdef WOLFSSL_KEIL
5998         "adcs	r4, r4, %[r]\n\t"
5999 #elif defined(__clang__)
6000         "adcs	r4, %[r]\n\t"
6001 #else
6002         "adc	r4, %[r]\n\t"
6003 #endif
6004 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6005         "lsrs	r6, %[a], #16\n\t"
6006 #else
6007         "lsr	r6, %[a], #16\n\t"
6008 #endif
6009 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6010         "lsrs	r7, %[b], #16\n\t"
6011 #else
6012         "lsr	r7, %[b], #16\n\t"
6013 #endif
6014 #ifdef WOLFSSL_KEIL
6015         "muls	r7, r6, r7\n\t"
6016 #elif defined(__clang__)
6017         "muls	r7, r6\n\t"
6018 #else
6019         "mul	r7, r6\n\t"
6020 #endif
6021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6022         "adds	r3, r3, r7\n\t"
6023 #else
6024         "add	r3, r3, r7\n\t"
6025 #endif
6026 #ifdef WOLFSSL_KEIL
6027         "adcs	r4, r4, %[r]\n\t"
6028 #elif defined(__clang__)
6029         "adcs	r4, %[r]\n\t"
6030 #else
6031         "adc	r4, %[r]\n\t"
6032 #endif
6033         "uxth	r7, %[b]\n\t"
6034 #ifdef WOLFSSL_KEIL
6035         "muls	r6, r7, r6\n\t"
6036 #elif defined(__clang__)
6037         "muls	r6, r7\n\t"
6038 #else
6039         "mul	r6, r7\n\t"
6040 #endif
6041 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6042         "lsrs	r7, r6, #16\n\t"
6043 #else
6044         "lsr	r7, r6, #16\n\t"
6045 #endif
6046 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6047         "lsls	r6, r6, #16\n\t"
6048 #else
6049         "lsl	r6, r6, #16\n\t"
6050 #endif
6051 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6052         "adds	r5, r5, r6\n\t"
6053 #else
6054         "add	r5, r5, r6\n\t"
6055 #endif
6056 #ifdef WOLFSSL_KEIL
6057         "adcs	r3, r3, r7\n\t"
6058 #elif defined(__clang__)
6059         "adcs	r3, r7\n\t"
6060 #else
6061         "adc	r3, r7\n\t"
6062 #endif
6063 #ifdef WOLFSSL_KEIL
6064         "adcs	r4, r4, %[r]\n\t"
6065 #elif defined(__clang__)
6066         "adcs	r4, %[r]\n\t"
6067 #else
6068         "adc	r4, %[r]\n\t"
6069 #endif
6070         "#  A[3] * B[5]\n\t"
6071         "mov	%[a], r9\n\t"
6072         "mov	%[b], r10\n\t"
6073         "ldr	%[a], [%[a], #12]\n\t"
6074         "ldr	%[b], [%[b], #20]\n\t"
6075         "uxth	r6, %[a]\n\t"
6076         "uxth	r7, %[b]\n\t"
6077 #ifdef WOLFSSL_KEIL
6078         "muls	r7, r6, r7\n\t"
6079 #elif defined(__clang__)
6080         "muls	r7, r6\n\t"
6081 #else
6082         "mul	r7, r6\n\t"
6083 #endif
6084 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6085         "adds	r5, r5, r7\n\t"
6086 #else
6087         "add	r5, r5, r7\n\t"
6088 #endif
6089 #ifdef WOLFSSL_KEIL
6090         "adcs	r3, r3, %[r]\n\t"
6091 #elif defined(__clang__)
6092         "adcs	r3, %[r]\n\t"
6093 #else
6094         "adc	r3, %[r]\n\t"
6095 #endif
6096 #ifdef WOLFSSL_KEIL
6097         "adcs	r4, r4, %[r]\n\t"
6098 #elif defined(__clang__)
6099         "adcs	r4, %[r]\n\t"
6100 #else
6101         "adc	r4, %[r]\n\t"
6102 #endif
6103 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6104         "lsrs	r7, %[b], #16\n\t"
6105 #else
6106         "lsr	r7, %[b], #16\n\t"
6107 #endif
6108 #ifdef WOLFSSL_KEIL
6109         "muls	r6, r7, r6\n\t"
6110 #elif defined(__clang__)
6111         "muls	r6, r7\n\t"
6112 #else
6113         "mul	r6, r7\n\t"
6114 #endif
6115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6116         "lsrs	r7, r6, #16\n\t"
6117 #else
6118         "lsr	r7, r6, #16\n\t"
6119 #endif
6120 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6121         "lsls	r6, r6, #16\n\t"
6122 #else
6123         "lsl	r6, r6, #16\n\t"
6124 #endif
6125 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6126         "adds	r5, r5, r6\n\t"
6127 #else
6128         "add	r5, r5, r6\n\t"
6129 #endif
6130 #ifdef WOLFSSL_KEIL
6131         "adcs	r3, r3, r7\n\t"
6132 #elif defined(__clang__)
6133         "adcs	r3, r7\n\t"
6134 #else
6135         "adc	r3, r7\n\t"
6136 #endif
6137 #ifdef WOLFSSL_KEIL
6138         "adcs	r4, r4, %[r]\n\t"
6139 #elif defined(__clang__)
6140         "adcs	r4, %[r]\n\t"
6141 #else
6142         "adc	r4, %[r]\n\t"
6143 #endif
6144 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6145         "lsrs	r6, %[a], #16\n\t"
6146 #else
6147         "lsr	r6, %[a], #16\n\t"
6148 #endif
6149 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6150         "lsrs	r7, %[b], #16\n\t"
6151 #else
6152         "lsr	r7, %[b], #16\n\t"
6153 #endif
6154 #ifdef WOLFSSL_KEIL
6155         "muls	r7, r6, r7\n\t"
6156 #elif defined(__clang__)
6157         "muls	r7, r6\n\t"
6158 #else
6159         "mul	r7, r6\n\t"
6160 #endif
6161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6162         "adds	r3, r3, r7\n\t"
6163 #else
6164         "add	r3, r3, r7\n\t"
6165 #endif
6166 #ifdef WOLFSSL_KEIL
6167         "adcs	r4, r4, %[r]\n\t"
6168 #elif defined(__clang__)
6169         "adcs	r4, %[r]\n\t"
6170 #else
6171         "adc	r4, %[r]\n\t"
6172 #endif
6173         "uxth	r7, %[b]\n\t"
6174 #ifdef WOLFSSL_KEIL
6175         "muls	r6, r7, r6\n\t"
6176 #elif defined(__clang__)
6177         "muls	r6, r7\n\t"
6178 #else
6179         "mul	r6, r7\n\t"
6180 #endif
6181 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6182         "lsrs	r7, r6, #16\n\t"
6183 #else
6184         "lsr	r7, r6, #16\n\t"
6185 #endif
6186 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6187         "lsls	r6, r6, #16\n\t"
6188 #else
6189         "lsl	r6, r6, #16\n\t"
6190 #endif
6191 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6192         "adds	r5, r5, r6\n\t"
6193 #else
6194         "add	r5, r5, r6\n\t"
6195 #endif
6196 #ifdef WOLFSSL_KEIL
6197         "adcs	r3, r3, r7\n\t"
6198 #elif defined(__clang__)
6199         "adcs	r3, r7\n\t"
6200 #else
6201         "adc	r3, r7\n\t"
6202 #endif
6203 #ifdef WOLFSSL_KEIL
6204         "adcs	r4, r4, %[r]\n\t"
6205 #elif defined(__clang__)
6206         "adcs	r4, %[r]\n\t"
6207 #else
6208         "adc	r4, %[r]\n\t"
6209 #endif
6210         "#  A[2] * B[6]\n\t"
6211         "mov	%[a], r9\n\t"
6212         "mov	%[b], r10\n\t"
6213         "ldr	%[a], [%[a], #8]\n\t"
6214         "ldr	%[b], [%[b], #24]\n\t"
6215         "uxth	r6, %[a]\n\t"
6216         "uxth	r7, %[b]\n\t"
6217 #ifdef WOLFSSL_KEIL
6218         "muls	r7, r6, r7\n\t"
6219 #elif defined(__clang__)
6220         "muls	r7, r6\n\t"
6221 #else
6222         "mul	r7, r6\n\t"
6223 #endif
6224 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6225         "adds	r5, r5, r7\n\t"
6226 #else
6227         "add	r5, r5, r7\n\t"
6228 #endif
6229 #ifdef WOLFSSL_KEIL
6230         "adcs	r3, r3, %[r]\n\t"
6231 #elif defined(__clang__)
6232         "adcs	r3, %[r]\n\t"
6233 #else
6234         "adc	r3, %[r]\n\t"
6235 #endif
6236 #ifdef WOLFSSL_KEIL
6237         "adcs	r4, r4, %[r]\n\t"
6238 #elif defined(__clang__)
6239         "adcs	r4, %[r]\n\t"
6240 #else
6241         "adc	r4, %[r]\n\t"
6242 #endif
6243 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6244         "lsrs	r7, %[b], #16\n\t"
6245 #else
6246         "lsr	r7, %[b], #16\n\t"
6247 #endif
6248 #ifdef WOLFSSL_KEIL
6249         "muls	r6, r7, r6\n\t"
6250 #elif defined(__clang__)
6251         "muls	r6, r7\n\t"
6252 #else
6253         "mul	r6, r7\n\t"
6254 #endif
6255 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6256         "lsrs	r7, r6, #16\n\t"
6257 #else
6258         "lsr	r7, r6, #16\n\t"
6259 #endif
6260 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6261         "lsls	r6, r6, #16\n\t"
6262 #else
6263         "lsl	r6, r6, #16\n\t"
6264 #endif
6265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6266         "adds	r5, r5, r6\n\t"
6267 #else
6268         "add	r5, r5, r6\n\t"
6269 #endif
6270 #ifdef WOLFSSL_KEIL
6271         "adcs	r3, r3, r7\n\t"
6272 #elif defined(__clang__)
6273         "adcs	r3, r7\n\t"
6274 #else
6275         "adc	r3, r7\n\t"
6276 #endif
6277 #ifdef WOLFSSL_KEIL
6278         "adcs	r4, r4, %[r]\n\t"
6279 #elif defined(__clang__)
6280         "adcs	r4, %[r]\n\t"
6281 #else
6282         "adc	r4, %[r]\n\t"
6283 #endif
6284 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6285         "lsrs	r6, %[a], #16\n\t"
6286 #else
6287         "lsr	r6, %[a], #16\n\t"
6288 #endif
6289 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6290         "lsrs	r7, %[b], #16\n\t"
6291 #else
6292         "lsr	r7, %[b], #16\n\t"
6293 #endif
6294 #ifdef WOLFSSL_KEIL
6295         "muls	r7, r6, r7\n\t"
6296 #elif defined(__clang__)
6297         "muls	r7, r6\n\t"
6298 #else
6299         "mul	r7, r6\n\t"
6300 #endif
6301 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6302         "adds	r3, r3, r7\n\t"
6303 #else
6304         "add	r3, r3, r7\n\t"
6305 #endif
6306 #ifdef WOLFSSL_KEIL
6307         "adcs	r4, r4, %[r]\n\t"
6308 #elif defined(__clang__)
6309         "adcs	r4, %[r]\n\t"
6310 #else
6311         "adc	r4, %[r]\n\t"
6312 #endif
6313         "uxth	r7, %[b]\n\t"
6314 #ifdef WOLFSSL_KEIL
6315         "muls	r6, r7, r6\n\t"
6316 #elif defined(__clang__)
6317         "muls	r6, r7\n\t"
6318 #else
6319         "mul	r6, r7\n\t"
6320 #endif
6321 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6322         "lsrs	r7, r6, #16\n\t"
6323 #else
6324         "lsr	r7, r6, #16\n\t"
6325 #endif
6326 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6327         "lsls	r6, r6, #16\n\t"
6328 #else
6329         "lsl	r6, r6, #16\n\t"
6330 #endif
6331 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6332         "adds	r5, r5, r6\n\t"
6333 #else
6334         "add	r5, r5, r6\n\t"
6335 #endif
6336 #ifdef WOLFSSL_KEIL
6337         "adcs	r3, r3, r7\n\t"
6338 #elif defined(__clang__)
6339         "adcs	r3, r7\n\t"
6340 #else
6341         "adc	r3, r7\n\t"
6342 #endif
6343 #ifdef WOLFSSL_KEIL
6344         "adcs	r4, r4, %[r]\n\t"
6345 #elif defined(__clang__)
6346         "adcs	r4, %[r]\n\t"
6347 #else
6348         "adc	r4, %[r]\n\t"
6349 #endif
6350         "#  A[1] * B[7]\n\t"
6351         "mov	%[a], r9\n\t"
6352         "mov	%[b], r10\n\t"
6353         "ldr	%[a], [%[a], #4]\n\t"
6354         "ldr	%[b], [%[b], #28]\n\t"
6355         "uxth	r6, %[a]\n\t"
6356         "uxth	r7, %[b]\n\t"
6357 #ifdef WOLFSSL_KEIL
6358         "muls	r7, r6, r7\n\t"
6359 #elif defined(__clang__)
6360         "muls	r7, r6\n\t"
6361 #else
6362         "mul	r7, r6\n\t"
6363 #endif
6364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6365         "adds	r5, r5, r7\n\t"
6366 #else
6367         "add	r5, r5, r7\n\t"
6368 #endif
6369 #ifdef WOLFSSL_KEIL
6370         "adcs	r3, r3, %[r]\n\t"
6371 #elif defined(__clang__)
6372         "adcs	r3, %[r]\n\t"
6373 #else
6374         "adc	r3, %[r]\n\t"
6375 #endif
6376 #ifdef WOLFSSL_KEIL
6377         "adcs	r4, r4, %[r]\n\t"
6378 #elif defined(__clang__)
6379         "adcs	r4, %[r]\n\t"
6380 #else
6381         "adc	r4, %[r]\n\t"
6382 #endif
6383 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6384         "lsrs	r7, %[b], #16\n\t"
6385 #else
6386         "lsr	r7, %[b], #16\n\t"
6387 #endif
6388 #ifdef WOLFSSL_KEIL
6389         "muls	r6, r7, r6\n\t"
6390 #elif defined(__clang__)
6391         "muls	r6, r7\n\t"
6392 #else
6393         "mul	r6, r7\n\t"
6394 #endif
6395 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6396         "lsrs	r7, r6, #16\n\t"
6397 #else
6398         "lsr	r7, r6, #16\n\t"
6399 #endif
6400 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6401         "lsls	r6, r6, #16\n\t"
6402 #else
6403         "lsl	r6, r6, #16\n\t"
6404 #endif
6405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6406         "adds	r5, r5, r6\n\t"
6407 #else
6408         "add	r5, r5, r6\n\t"
6409 #endif
6410 #ifdef WOLFSSL_KEIL
6411         "adcs	r3, r3, r7\n\t"
6412 #elif defined(__clang__)
6413         "adcs	r3, r7\n\t"
6414 #else
6415         "adc	r3, r7\n\t"
6416 #endif
6417 #ifdef WOLFSSL_KEIL
6418         "adcs	r4, r4, %[r]\n\t"
6419 #elif defined(__clang__)
6420         "adcs	r4, %[r]\n\t"
6421 #else
6422         "adc	r4, %[r]\n\t"
6423 #endif
6424 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6425         "lsrs	r6, %[a], #16\n\t"
6426 #else
6427         "lsr	r6, %[a], #16\n\t"
6428 #endif
6429 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6430         "lsrs	r7, %[b], #16\n\t"
6431 #else
6432         "lsr	r7, %[b], #16\n\t"
6433 #endif
6434 #ifdef WOLFSSL_KEIL
6435         "muls	r7, r6, r7\n\t"
6436 #elif defined(__clang__)
6437         "muls	r7, r6\n\t"
6438 #else
6439         "mul	r7, r6\n\t"
6440 #endif
6441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6442         "adds	r3, r3, r7\n\t"
6443 #else
6444         "add	r3, r3, r7\n\t"
6445 #endif
6446 #ifdef WOLFSSL_KEIL
6447         "adcs	r4, r4, %[r]\n\t"
6448 #elif defined(__clang__)
6449         "adcs	r4, %[r]\n\t"
6450 #else
6451         "adc	r4, %[r]\n\t"
6452 #endif
6453         "uxth	r7, %[b]\n\t"
6454 #ifdef WOLFSSL_KEIL
6455         "muls	r6, r7, r6\n\t"
6456 #elif defined(__clang__)
6457         "muls	r6, r7\n\t"
6458 #else
6459         "mul	r6, r7\n\t"
6460 #endif
6461 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6462         "lsrs	r7, r6, #16\n\t"
6463 #else
6464         "lsr	r7, r6, #16\n\t"
6465 #endif
6466 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6467         "lsls	r6, r6, #16\n\t"
6468 #else
6469         "lsl	r6, r6, #16\n\t"
6470 #endif
6471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6472         "adds	r5, r5, r6\n\t"
6473 #else
6474         "add	r5, r5, r6\n\t"
6475 #endif
6476 #ifdef WOLFSSL_KEIL
6477         "adcs	r3, r3, r7\n\t"
6478 #elif defined(__clang__)
6479         "adcs	r3, r7\n\t"
6480 #else
6481         "adc	r3, r7\n\t"
6482 #endif
6483 #ifdef WOLFSSL_KEIL
6484         "adcs	r4, r4, %[r]\n\t"
6485 #elif defined(__clang__)
6486         "adcs	r4, %[r]\n\t"
6487 #else
6488         "adc	r4, %[r]\n\t"
6489 #endif
6490         "mov	%[r], r8\n\t"
6491         "str	r5, [%[r], #32]\n\t"
6492         "movs	%[r], #0\n\t"
6493         "#  A[2] * B[7]\n\t"
6494         "movs	r5, #0\n\t"
6495         "mov	%[a], r9\n\t"
6496         "mov	%[b], r10\n\t"
6497         "ldr	%[a], [%[a], #8]\n\t"
6498         "ldr	%[b], [%[b], #28]\n\t"
6499         "uxth	r6, %[a]\n\t"
6500         "uxth	r7, %[b]\n\t"
6501 #ifdef WOLFSSL_KEIL
6502         "muls	r7, r6, r7\n\t"
6503 #elif defined(__clang__)
6504         "muls	r7, r6\n\t"
6505 #else
6506         "mul	r7, r6\n\t"
6507 #endif
6508 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6509         "adds	r3, r3, r7\n\t"
6510 #else
6511         "add	r3, r3, r7\n\t"
6512 #endif
6513 #ifdef WOLFSSL_KEIL
6514         "adcs	r4, r4, %[r]\n\t"
6515 #elif defined(__clang__)
6516         "adcs	r4, %[r]\n\t"
6517 #else
6518         "adc	r4, %[r]\n\t"
6519 #endif
6520 #ifdef WOLFSSL_KEIL
6521         "adcs	r5, r5, %[r]\n\t"
6522 #elif defined(__clang__)
6523         "adcs	r5, %[r]\n\t"
6524 #else
6525         "adc	r5, %[r]\n\t"
6526 #endif
6527 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6528         "lsrs	r7, %[b], #16\n\t"
6529 #else
6530         "lsr	r7, %[b], #16\n\t"
6531 #endif
6532 #ifdef WOLFSSL_KEIL
6533         "muls	r6, r7, r6\n\t"
6534 #elif defined(__clang__)
6535         "muls	r6, r7\n\t"
6536 #else
6537         "mul	r6, r7\n\t"
6538 #endif
6539 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6540         "lsrs	r7, r6, #16\n\t"
6541 #else
6542         "lsr	r7, r6, #16\n\t"
6543 #endif
6544 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6545         "lsls	r6, r6, #16\n\t"
6546 #else
6547         "lsl	r6, r6, #16\n\t"
6548 #endif
6549 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6550         "adds	r3, r3, r6\n\t"
6551 #else
6552         "add	r3, r3, r6\n\t"
6553 #endif
6554 #ifdef WOLFSSL_KEIL
6555         "adcs	r4, r4, r7\n\t"
6556 #elif defined(__clang__)
6557         "adcs	r4, r7\n\t"
6558 #else
6559         "adc	r4, r7\n\t"
6560 #endif
6561 #ifdef WOLFSSL_KEIL
6562         "adcs	r5, r5, %[r]\n\t"
6563 #elif defined(__clang__)
6564         "adcs	r5, %[r]\n\t"
6565 #else
6566         "adc	r5, %[r]\n\t"
6567 #endif
6568 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6569         "lsrs	r6, %[a], #16\n\t"
6570 #else
6571         "lsr	r6, %[a], #16\n\t"
6572 #endif
6573 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6574         "lsrs	r7, %[b], #16\n\t"
6575 #else
6576         "lsr	r7, %[b], #16\n\t"
6577 #endif
6578 #ifdef WOLFSSL_KEIL
6579         "muls	r7, r6, r7\n\t"
6580 #elif defined(__clang__)
6581         "muls	r7, r6\n\t"
6582 #else
6583         "mul	r7, r6\n\t"
6584 #endif
6585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6586         "adds	r4, r4, r7\n\t"
6587 #else
6588         "add	r4, r4, r7\n\t"
6589 #endif
6590 #ifdef WOLFSSL_KEIL
6591         "adcs	r5, r5, %[r]\n\t"
6592 #elif defined(__clang__)
6593         "adcs	r5, %[r]\n\t"
6594 #else
6595         "adc	r5, %[r]\n\t"
6596 #endif
6597         "uxth	r7, %[b]\n\t"
6598 #ifdef WOLFSSL_KEIL
6599         "muls	r6, r7, r6\n\t"
6600 #elif defined(__clang__)
6601         "muls	r6, r7\n\t"
6602 #else
6603         "mul	r6, r7\n\t"
6604 #endif
6605 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6606         "lsrs	r7, r6, #16\n\t"
6607 #else
6608         "lsr	r7, r6, #16\n\t"
6609 #endif
6610 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6611         "lsls	r6, r6, #16\n\t"
6612 #else
6613         "lsl	r6, r6, #16\n\t"
6614 #endif
6615 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6616         "adds	r3, r3, r6\n\t"
6617 #else
6618         "add	r3, r3, r6\n\t"
6619 #endif
6620 #ifdef WOLFSSL_KEIL
6621         "adcs	r4, r4, r7\n\t"
6622 #elif defined(__clang__)
6623         "adcs	r4, r7\n\t"
6624 #else
6625         "adc	r4, r7\n\t"
6626 #endif
6627 #ifdef WOLFSSL_KEIL
6628         "adcs	r5, r5, %[r]\n\t"
6629 #elif defined(__clang__)
6630         "adcs	r5, %[r]\n\t"
6631 #else
6632         "adc	r5, %[r]\n\t"
6633 #endif
6634         "#  A[3] * B[6]\n\t"
6635         "mov	%[a], r9\n\t"
6636         "mov	%[b], r10\n\t"
6637         "ldr	%[a], [%[a], #12]\n\t"
6638         "ldr	%[b], [%[b], #24]\n\t"
6639         "uxth	r6, %[a]\n\t"
6640         "uxth	r7, %[b]\n\t"
6641 #ifdef WOLFSSL_KEIL
6642         "muls	r7, r6, r7\n\t"
6643 #elif defined(__clang__)
6644         "muls	r7, r6\n\t"
6645 #else
6646         "mul	r7, r6\n\t"
6647 #endif
6648 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6649         "adds	r3, r3, r7\n\t"
6650 #else
6651         "add	r3, r3, r7\n\t"
6652 #endif
6653 #ifdef WOLFSSL_KEIL
6654         "adcs	r4, r4, %[r]\n\t"
6655 #elif defined(__clang__)
6656         "adcs	r4, %[r]\n\t"
6657 #else
6658         "adc	r4, %[r]\n\t"
6659 #endif
6660 #ifdef WOLFSSL_KEIL
6661         "adcs	r5, r5, %[r]\n\t"
6662 #elif defined(__clang__)
6663         "adcs	r5, %[r]\n\t"
6664 #else
6665         "adc	r5, %[r]\n\t"
6666 #endif
6667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6668         "lsrs	r7, %[b], #16\n\t"
6669 #else
6670         "lsr	r7, %[b], #16\n\t"
6671 #endif
6672 #ifdef WOLFSSL_KEIL
6673         "muls	r6, r7, r6\n\t"
6674 #elif defined(__clang__)
6675         "muls	r6, r7\n\t"
6676 #else
6677         "mul	r6, r7\n\t"
6678 #endif
6679 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6680         "lsrs	r7, r6, #16\n\t"
6681 #else
6682         "lsr	r7, r6, #16\n\t"
6683 #endif
6684 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6685         "lsls	r6, r6, #16\n\t"
6686 #else
6687         "lsl	r6, r6, #16\n\t"
6688 #endif
6689 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6690         "adds	r3, r3, r6\n\t"
6691 #else
6692         "add	r3, r3, r6\n\t"
6693 #endif
6694 #ifdef WOLFSSL_KEIL
6695         "adcs	r4, r4, r7\n\t"
6696 #elif defined(__clang__)
6697         "adcs	r4, r7\n\t"
6698 #else
6699         "adc	r4, r7\n\t"
6700 #endif
6701 #ifdef WOLFSSL_KEIL
6702         "adcs	r5, r5, %[r]\n\t"
6703 #elif defined(__clang__)
6704         "adcs	r5, %[r]\n\t"
6705 #else
6706         "adc	r5, %[r]\n\t"
6707 #endif
6708 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6709         "lsrs	r6, %[a], #16\n\t"
6710 #else
6711         "lsr	r6, %[a], #16\n\t"
6712 #endif
6713 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6714         "lsrs	r7, %[b], #16\n\t"
6715 #else
6716         "lsr	r7, %[b], #16\n\t"
6717 #endif
6718 #ifdef WOLFSSL_KEIL
6719         "muls	r7, r6, r7\n\t"
6720 #elif defined(__clang__)
6721         "muls	r7, r6\n\t"
6722 #else
6723         "mul	r7, r6\n\t"
6724 #endif
6725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6726         "adds	r4, r4, r7\n\t"
6727 #else
6728         "add	r4, r4, r7\n\t"
6729 #endif
6730 #ifdef WOLFSSL_KEIL
6731         "adcs	r5, r5, %[r]\n\t"
6732 #elif defined(__clang__)
6733         "adcs	r5, %[r]\n\t"
6734 #else
6735         "adc	r5, %[r]\n\t"
6736 #endif
6737         "uxth	r7, %[b]\n\t"
6738 #ifdef WOLFSSL_KEIL
6739         "muls	r6, r7, r6\n\t"
6740 #elif defined(__clang__)
6741         "muls	r6, r7\n\t"
6742 #else
6743         "mul	r6, r7\n\t"
6744 #endif
6745 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6746         "lsrs	r7, r6, #16\n\t"
6747 #else
6748         "lsr	r7, r6, #16\n\t"
6749 #endif
6750 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6751         "lsls	r6, r6, #16\n\t"
6752 #else
6753         "lsl	r6, r6, #16\n\t"
6754 #endif
6755 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6756         "adds	r3, r3, r6\n\t"
6757 #else
6758         "add	r3, r3, r6\n\t"
6759 #endif
6760 #ifdef WOLFSSL_KEIL
6761         "adcs	r4, r4, r7\n\t"
6762 #elif defined(__clang__)
6763         "adcs	r4, r7\n\t"
6764 #else
6765         "adc	r4, r7\n\t"
6766 #endif
6767 #ifdef WOLFSSL_KEIL
6768         "adcs	r5, r5, %[r]\n\t"
6769 #elif defined(__clang__)
6770         "adcs	r5, %[r]\n\t"
6771 #else
6772         "adc	r5, %[r]\n\t"
6773 #endif
6774         "#  A[4] * B[5]\n\t"
6775         "mov	%[a], r9\n\t"
6776         "mov	%[b], r10\n\t"
6777         "ldr	%[a], [%[a], #16]\n\t"
6778         "ldr	%[b], [%[b], #20]\n\t"
6779         "uxth	r6, %[a]\n\t"
6780         "uxth	r7, %[b]\n\t"
6781 #ifdef WOLFSSL_KEIL
6782         "muls	r7, r6, r7\n\t"
6783 #elif defined(__clang__)
6784         "muls	r7, r6\n\t"
6785 #else
6786         "mul	r7, r6\n\t"
6787 #endif
6788 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6789         "adds	r3, r3, r7\n\t"
6790 #else
6791         "add	r3, r3, r7\n\t"
6792 #endif
6793 #ifdef WOLFSSL_KEIL
6794         "adcs	r4, r4, %[r]\n\t"
6795 #elif defined(__clang__)
6796         "adcs	r4, %[r]\n\t"
6797 #else
6798         "adc	r4, %[r]\n\t"
6799 #endif
6800 #ifdef WOLFSSL_KEIL
6801         "adcs	r5, r5, %[r]\n\t"
6802 #elif defined(__clang__)
6803         "adcs	r5, %[r]\n\t"
6804 #else
6805         "adc	r5, %[r]\n\t"
6806 #endif
6807 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6808         "lsrs	r7, %[b], #16\n\t"
6809 #else
6810         "lsr	r7, %[b], #16\n\t"
6811 #endif
6812 #ifdef WOLFSSL_KEIL
6813         "muls	r6, r7, r6\n\t"
6814 #elif defined(__clang__)
6815         "muls	r6, r7\n\t"
6816 #else
6817         "mul	r6, r7\n\t"
6818 #endif
6819 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6820         "lsrs	r7, r6, #16\n\t"
6821 #else
6822         "lsr	r7, r6, #16\n\t"
6823 #endif
6824 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6825         "lsls	r6, r6, #16\n\t"
6826 #else
6827         "lsl	r6, r6, #16\n\t"
6828 #endif
6829 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6830         "adds	r3, r3, r6\n\t"
6831 #else
6832         "add	r3, r3, r6\n\t"
6833 #endif
6834 #ifdef WOLFSSL_KEIL
6835         "adcs	r4, r4, r7\n\t"
6836 #elif defined(__clang__)
6837         "adcs	r4, r7\n\t"
6838 #else
6839         "adc	r4, r7\n\t"
6840 #endif
6841 #ifdef WOLFSSL_KEIL
6842         "adcs	r5, r5, %[r]\n\t"
6843 #elif defined(__clang__)
6844         "adcs	r5, %[r]\n\t"
6845 #else
6846         "adc	r5, %[r]\n\t"
6847 #endif
6848 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6849         "lsrs	r6, %[a], #16\n\t"
6850 #else
6851         "lsr	r6, %[a], #16\n\t"
6852 #endif
6853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6854         "lsrs	r7, %[b], #16\n\t"
6855 #else
6856         "lsr	r7, %[b], #16\n\t"
6857 #endif
6858 #ifdef WOLFSSL_KEIL
6859         "muls	r7, r6, r7\n\t"
6860 #elif defined(__clang__)
6861         "muls	r7, r6\n\t"
6862 #else
6863         "mul	r7, r6\n\t"
6864 #endif
6865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6866         "adds	r4, r4, r7\n\t"
6867 #else
6868         "add	r4, r4, r7\n\t"
6869 #endif
6870 #ifdef WOLFSSL_KEIL
6871         "adcs	r5, r5, %[r]\n\t"
6872 #elif defined(__clang__)
6873         "adcs	r5, %[r]\n\t"
6874 #else
6875         "adc	r5, %[r]\n\t"
6876 #endif
6877         "uxth	r7, %[b]\n\t"
6878 #ifdef WOLFSSL_KEIL
6879         "muls	r6, r7, r6\n\t"
6880 #elif defined(__clang__)
6881         "muls	r6, r7\n\t"
6882 #else
6883         "mul	r6, r7\n\t"
6884 #endif
6885 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6886         "lsrs	r7, r6, #16\n\t"
6887 #else
6888         "lsr	r7, r6, #16\n\t"
6889 #endif
6890 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6891         "lsls	r6, r6, #16\n\t"
6892 #else
6893         "lsl	r6, r6, #16\n\t"
6894 #endif
6895 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6896         "adds	r3, r3, r6\n\t"
6897 #else
6898         "add	r3, r3, r6\n\t"
6899 #endif
6900 #ifdef WOLFSSL_KEIL
6901         "adcs	r4, r4, r7\n\t"
6902 #elif defined(__clang__)
6903         "adcs	r4, r7\n\t"
6904 #else
6905         "adc	r4, r7\n\t"
6906 #endif
6907 #ifdef WOLFSSL_KEIL
6908         "adcs	r5, r5, %[r]\n\t"
6909 #elif defined(__clang__)
6910         "adcs	r5, %[r]\n\t"
6911 #else
6912         "adc	r5, %[r]\n\t"
6913 #endif
6914         "#  A[5] * B[4]\n\t"
6915         "mov	%[a], r9\n\t"
6916         "mov	%[b], r10\n\t"
6917         "ldr	%[a], [%[a], #20]\n\t"
6918         "ldr	%[b], [%[b], #16]\n\t"
6919         "uxth	r6, %[a]\n\t"
6920         "uxth	r7, %[b]\n\t"
6921 #ifdef WOLFSSL_KEIL
6922         "muls	r7, r6, r7\n\t"
6923 #elif defined(__clang__)
6924         "muls	r7, r6\n\t"
6925 #else
6926         "mul	r7, r6\n\t"
6927 #endif
6928 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6929         "adds	r3, r3, r7\n\t"
6930 #else
6931         "add	r3, r3, r7\n\t"
6932 #endif
6933 #ifdef WOLFSSL_KEIL
6934         "adcs	r4, r4, %[r]\n\t"
6935 #elif defined(__clang__)
6936         "adcs	r4, %[r]\n\t"
6937 #else
6938         "adc	r4, %[r]\n\t"
6939 #endif
6940 #ifdef WOLFSSL_KEIL
6941         "adcs	r5, r5, %[r]\n\t"
6942 #elif defined(__clang__)
6943         "adcs	r5, %[r]\n\t"
6944 #else
6945         "adc	r5, %[r]\n\t"
6946 #endif
6947 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6948         "lsrs	r7, %[b], #16\n\t"
6949 #else
6950         "lsr	r7, %[b], #16\n\t"
6951 #endif
6952 #ifdef WOLFSSL_KEIL
6953         "muls	r6, r7, r6\n\t"
6954 #elif defined(__clang__)
6955         "muls	r6, r7\n\t"
6956 #else
6957         "mul	r6, r7\n\t"
6958 #endif
6959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6960         "lsrs	r7, r6, #16\n\t"
6961 #else
6962         "lsr	r7, r6, #16\n\t"
6963 #endif
6964 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6965         "lsls	r6, r6, #16\n\t"
6966 #else
6967         "lsl	r6, r6, #16\n\t"
6968 #endif
6969 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6970         "adds	r3, r3, r6\n\t"
6971 #else
6972         "add	r3, r3, r6\n\t"
6973 #endif
6974 #ifdef WOLFSSL_KEIL
6975         "adcs	r4, r4, r7\n\t"
6976 #elif defined(__clang__)
6977         "adcs	r4, r7\n\t"
6978 #else
6979         "adc	r4, r7\n\t"
6980 #endif
6981 #ifdef WOLFSSL_KEIL
6982         "adcs	r5, r5, %[r]\n\t"
6983 #elif defined(__clang__)
6984         "adcs	r5, %[r]\n\t"
6985 #else
6986         "adc	r5, %[r]\n\t"
6987 #endif
6988 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6989         "lsrs	r6, %[a], #16\n\t"
6990 #else
6991         "lsr	r6, %[a], #16\n\t"
6992 #endif
6993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
6994         "lsrs	r7, %[b], #16\n\t"
6995 #else
6996         "lsr	r7, %[b], #16\n\t"
6997 #endif
6998 #ifdef WOLFSSL_KEIL
6999         "muls	r7, r6, r7\n\t"
7000 #elif defined(__clang__)
7001         "muls	r7, r6\n\t"
7002 #else
7003         "mul	r7, r6\n\t"
7004 #endif
7005 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7006         "adds	r4, r4, r7\n\t"
7007 #else
7008         "add	r4, r4, r7\n\t"
7009 #endif
7010 #ifdef WOLFSSL_KEIL
7011         "adcs	r5, r5, %[r]\n\t"
7012 #elif defined(__clang__)
7013         "adcs	r5, %[r]\n\t"
7014 #else
7015         "adc	r5, %[r]\n\t"
7016 #endif
7017         "uxth	r7, %[b]\n\t"
7018 #ifdef WOLFSSL_KEIL
7019         "muls	r6, r7, r6\n\t"
7020 #elif defined(__clang__)
7021         "muls	r6, r7\n\t"
7022 #else
7023         "mul	r6, r7\n\t"
7024 #endif
7025 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7026         "lsrs	r7, r6, #16\n\t"
7027 #else
7028         "lsr	r7, r6, #16\n\t"
7029 #endif
7030 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7031         "lsls	r6, r6, #16\n\t"
7032 #else
7033         "lsl	r6, r6, #16\n\t"
7034 #endif
7035 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7036         "adds	r3, r3, r6\n\t"
7037 #else
7038         "add	r3, r3, r6\n\t"
7039 #endif
7040 #ifdef WOLFSSL_KEIL
7041         "adcs	r4, r4, r7\n\t"
7042 #elif defined(__clang__)
7043         "adcs	r4, r7\n\t"
7044 #else
7045         "adc	r4, r7\n\t"
7046 #endif
7047 #ifdef WOLFSSL_KEIL
7048         "adcs	r5, r5, %[r]\n\t"
7049 #elif defined(__clang__)
7050         "adcs	r5, %[r]\n\t"
7051 #else
7052         "adc	r5, %[r]\n\t"
7053 #endif
7054         "#  A[6] * B[3]\n\t"
7055         "mov	%[a], r9\n\t"
7056         "mov	%[b], r10\n\t"
7057         "ldr	%[a], [%[a], #24]\n\t"
7058         "ldr	%[b], [%[b], #12]\n\t"
7059         "uxth	r6, %[a]\n\t"
7060         "uxth	r7, %[b]\n\t"
7061 #ifdef WOLFSSL_KEIL
7062         "muls	r7, r6, r7\n\t"
7063 #elif defined(__clang__)
7064         "muls	r7, r6\n\t"
7065 #else
7066         "mul	r7, r6\n\t"
7067 #endif
7068 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7069         "adds	r3, r3, r7\n\t"
7070 #else
7071         "add	r3, r3, r7\n\t"
7072 #endif
7073 #ifdef WOLFSSL_KEIL
7074         "adcs	r4, r4, %[r]\n\t"
7075 #elif defined(__clang__)
7076         "adcs	r4, %[r]\n\t"
7077 #else
7078         "adc	r4, %[r]\n\t"
7079 #endif
7080 #ifdef WOLFSSL_KEIL
7081         "adcs	r5, r5, %[r]\n\t"
7082 #elif defined(__clang__)
7083         "adcs	r5, %[r]\n\t"
7084 #else
7085         "adc	r5, %[r]\n\t"
7086 #endif
7087 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7088         "lsrs	r7, %[b], #16\n\t"
7089 #else
7090         "lsr	r7, %[b], #16\n\t"
7091 #endif
7092 #ifdef WOLFSSL_KEIL
7093         "muls	r6, r7, r6\n\t"
7094 #elif defined(__clang__)
7095         "muls	r6, r7\n\t"
7096 #else
7097         "mul	r6, r7\n\t"
7098 #endif
7099 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7100         "lsrs	r7, r6, #16\n\t"
7101 #else
7102         "lsr	r7, r6, #16\n\t"
7103 #endif
7104 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7105         "lsls	r6, r6, #16\n\t"
7106 #else
7107         "lsl	r6, r6, #16\n\t"
7108 #endif
7109 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7110         "adds	r3, r3, r6\n\t"
7111 #else
7112         "add	r3, r3, r6\n\t"
7113 #endif
7114 #ifdef WOLFSSL_KEIL
7115         "adcs	r4, r4, r7\n\t"
7116 #elif defined(__clang__)
7117         "adcs	r4, r7\n\t"
7118 #else
7119         "adc	r4, r7\n\t"
7120 #endif
7121 #ifdef WOLFSSL_KEIL
7122         "adcs	r5, r5, %[r]\n\t"
7123 #elif defined(__clang__)
7124         "adcs	r5, %[r]\n\t"
7125 #else
7126         "adc	r5, %[r]\n\t"
7127 #endif
7128 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7129         "lsrs	r6, %[a], #16\n\t"
7130 #else
7131         "lsr	r6, %[a], #16\n\t"
7132 #endif
7133 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7134         "lsrs	r7, %[b], #16\n\t"
7135 #else
7136         "lsr	r7, %[b], #16\n\t"
7137 #endif
7138 #ifdef WOLFSSL_KEIL
7139         "muls	r7, r6, r7\n\t"
7140 #elif defined(__clang__)
7141         "muls	r7, r6\n\t"
7142 #else
7143         "mul	r7, r6\n\t"
7144 #endif
7145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7146         "adds	r4, r4, r7\n\t"
7147 #else
7148         "add	r4, r4, r7\n\t"
7149 #endif
7150 #ifdef WOLFSSL_KEIL
7151         "adcs	r5, r5, %[r]\n\t"
7152 #elif defined(__clang__)
7153         "adcs	r5, %[r]\n\t"
7154 #else
7155         "adc	r5, %[r]\n\t"
7156 #endif
7157         "uxth	r7, %[b]\n\t"
7158 #ifdef WOLFSSL_KEIL
7159         "muls	r6, r7, r6\n\t"
7160 #elif defined(__clang__)
7161         "muls	r6, r7\n\t"
7162 #else
7163         "mul	r6, r7\n\t"
7164 #endif
7165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7166         "lsrs	r7, r6, #16\n\t"
7167 #else
7168         "lsr	r7, r6, #16\n\t"
7169 #endif
7170 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7171         "lsls	r6, r6, #16\n\t"
7172 #else
7173         "lsl	r6, r6, #16\n\t"
7174 #endif
7175 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7176         "adds	r3, r3, r6\n\t"
7177 #else
7178         "add	r3, r3, r6\n\t"
7179 #endif
7180 #ifdef WOLFSSL_KEIL
7181         "adcs	r4, r4, r7\n\t"
7182 #elif defined(__clang__)
7183         "adcs	r4, r7\n\t"
7184 #else
7185         "adc	r4, r7\n\t"
7186 #endif
7187 #ifdef WOLFSSL_KEIL
7188         "adcs	r5, r5, %[r]\n\t"
7189 #elif defined(__clang__)
7190         "adcs	r5, %[r]\n\t"
7191 #else
7192         "adc	r5, %[r]\n\t"
7193 #endif
7194         "#  A[7] * B[2]\n\t"
7195         "mov	%[a], r9\n\t"
7196         "mov	%[b], r10\n\t"
7197         "ldr	%[a], [%[a], #28]\n\t"
7198         "ldr	%[b], [%[b], #8]\n\t"
7199         "uxth	r6, %[a]\n\t"
7200         "uxth	r7, %[b]\n\t"
7201 #ifdef WOLFSSL_KEIL
7202         "muls	r7, r6, r7\n\t"
7203 #elif defined(__clang__)
7204         "muls	r7, r6\n\t"
7205 #else
7206         "mul	r7, r6\n\t"
7207 #endif
7208 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7209         "adds	r3, r3, r7\n\t"
7210 #else
7211         "add	r3, r3, r7\n\t"
7212 #endif
7213 #ifdef WOLFSSL_KEIL
7214         "adcs	r4, r4, %[r]\n\t"
7215 #elif defined(__clang__)
7216         "adcs	r4, %[r]\n\t"
7217 #else
7218         "adc	r4, %[r]\n\t"
7219 #endif
7220 #ifdef WOLFSSL_KEIL
7221         "adcs	r5, r5, %[r]\n\t"
7222 #elif defined(__clang__)
7223         "adcs	r5, %[r]\n\t"
7224 #else
7225         "adc	r5, %[r]\n\t"
7226 #endif
7227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7228         "lsrs	r7, %[b], #16\n\t"
7229 #else
7230         "lsr	r7, %[b], #16\n\t"
7231 #endif
7232 #ifdef WOLFSSL_KEIL
7233         "muls	r6, r7, r6\n\t"
7234 #elif defined(__clang__)
7235         "muls	r6, r7\n\t"
7236 #else
7237         "mul	r6, r7\n\t"
7238 #endif
7239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7240         "lsrs	r7, r6, #16\n\t"
7241 #else
7242         "lsr	r7, r6, #16\n\t"
7243 #endif
7244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7245         "lsls	r6, r6, #16\n\t"
7246 #else
7247         "lsl	r6, r6, #16\n\t"
7248 #endif
7249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7250         "adds	r3, r3, r6\n\t"
7251 #else
7252         "add	r3, r3, r6\n\t"
7253 #endif
7254 #ifdef WOLFSSL_KEIL
7255         "adcs	r4, r4, r7\n\t"
7256 #elif defined(__clang__)
7257         "adcs	r4, r7\n\t"
7258 #else
7259         "adc	r4, r7\n\t"
7260 #endif
7261 #ifdef WOLFSSL_KEIL
7262         "adcs	r5, r5, %[r]\n\t"
7263 #elif defined(__clang__)
7264         "adcs	r5, %[r]\n\t"
7265 #else
7266         "adc	r5, %[r]\n\t"
7267 #endif
7268 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7269         "lsrs	r6, %[a], #16\n\t"
7270 #else
7271         "lsr	r6, %[a], #16\n\t"
7272 #endif
7273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7274         "lsrs	r7, %[b], #16\n\t"
7275 #else
7276         "lsr	r7, %[b], #16\n\t"
7277 #endif
7278 #ifdef WOLFSSL_KEIL
7279         "muls	r7, r6, r7\n\t"
7280 #elif defined(__clang__)
7281         "muls	r7, r6\n\t"
7282 #else
7283         "mul	r7, r6\n\t"
7284 #endif
7285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7286         "adds	r4, r4, r7\n\t"
7287 #else
7288         "add	r4, r4, r7\n\t"
7289 #endif
7290 #ifdef WOLFSSL_KEIL
7291         "adcs	r5, r5, %[r]\n\t"
7292 #elif defined(__clang__)
7293         "adcs	r5, %[r]\n\t"
7294 #else
7295         "adc	r5, %[r]\n\t"
7296 #endif
7297         "uxth	r7, %[b]\n\t"
7298 #ifdef WOLFSSL_KEIL
7299         "muls	r6, r7, r6\n\t"
7300 #elif defined(__clang__)
7301         "muls	r6, r7\n\t"
7302 #else
7303         "mul	r6, r7\n\t"
7304 #endif
7305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7306         "lsrs	r7, r6, #16\n\t"
7307 #else
7308         "lsr	r7, r6, #16\n\t"
7309 #endif
7310 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7311         "lsls	r6, r6, #16\n\t"
7312 #else
7313         "lsl	r6, r6, #16\n\t"
7314 #endif
7315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7316         "adds	r3, r3, r6\n\t"
7317 #else
7318         "add	r3, r3, r6\n\t"
7319 #endif
7320 #ifdef WOLFSSL_KEIL
7321         "adcs	r4, r4, r7\n\t"
7322 #elif defined(__clang__)
7323         "adcs	r4, r7\n\t"
7324 #else
7325         "adc	r4, r7\n\t"
7326 #endif
7327 #ifdef WOLFSSL_KEIL
7328         "adcs	r5, r5, %[r]\n\t"
7329 #elif defined(__clang__)
7330         "adcs	r5, %[r]\n\t"
7331 #else
7332         "adc	r5, %[r]\n\t"
7333 #endif
7334         "mov	%[r], r8\n\t"
7335         "str	r3, [%[r], #36]\n\t"
7336         "movs	%[r], #0\n\t"
7337         "#  A[7] * B[3]\n\t"
7338         "movs	r3, #0\n\t"
7339         "mov	%[a], r9\n\t"
7340         "mov	%[b], r10\n\t"
7341         "ldr	%[a], [%[a], #28]\n\t"
7342         "ldr	%[b], [%[b], #12]\n\t"
7343         "uxth	r6, %[a]\n\t"
7344         "uxth	r7, %[b]\n\t"
7345 #ifdef WOLFSSL_KEIL
7346         "muls	r7, r6, r7\n\t"
7347 #elif defined(__clang__)
7348         "muls	r7, r6\n\t"
7349 #else
7350         "mul	r7, r6\n\t"
7351 #endif
7352 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7353         "adds	r4, r4, r7\n\t"
7354 #else
7355         "add	r4, r4, r7\n\t"
7356 #endif
7357 #ifdef WOLFSSL_KEIL
7358         "adcs	r5, r5, %[r]\n\t"
7359 #elif defined(__clang__)
7360         "adcs	r5, %[r]\n\t"
7361 #else
7362         "adc	r5, %[r]\n\t"
7363 #endif
7364 #ifdef WOLFSSL_KEIL
7365         "adcs	r3, r3, %[r]\n\t"
7366 #elif defined(__clang__)
7367         "adcs	r3, %[r]\n\t"
7368 #else
7369         "adc	r3, %[r]\n\t"
7370 #endif
7371 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7372         "lsrs	r7, %[b], #16\n\t"
7373 #else
7374         "lsr	r7, %[b], #16\n\t"
7375 #endif
7376 #ifdef WOLFSSL_KEIL
7377         "muls	r6, r7, r6\n\t"
7378 #elif defined(__clang__)
7379         "muls	r6, r7\n\t"
7380 #else
7381         "mul	r6, r7\n\t"
7382 #endif
7383 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7384         "lsrs	r7, r6, #16\n\t"
7385 #else
7386         "lsr	r7, r6, #16\n\t"
7387 #endif
7388 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7389         "lsls	r6, r6, #16\n\t"
7390 #else
7391         "lsl	r6, r6, #16\n\t"
7392 #endif
7393 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7394         "adds	r4, r4, r6\n\t"
7395 #else
7396         "add	r4, r4, r6\n\t"
7397 #endif
7398 #ifdef WOLFSSL_KEIL
7399         "adcs	r5, r5, r7\n\t"
7400 #elif defined(__clang__)
7401         "adcs	r5, r7\n\t"
7402 #else
7403         "adc	r5, r7\n\t"
7404 #endif
7405 #ifdef WOLFSSL_KEIL
7406         "adcs	r3, r3, %[r]\n\t"
7407 #elif defined(__clang__)
7408         "adcs	r3, %[r]\n\t"
7409 #else
7410         "adc	r3, %[r]\n\t"
7411 #endif
7412 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7413         "lsrs	r6, %[a], #16\n\t"
7414 #else
7415         "lsr	r6, %[a], #16\n\t"
7416 #endif
7417 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7418         "lsrs	r7, %[b], #16\n\t"
7419 #else
7420         "lsr	r7, %[b], #16\n\t"
7421 #endif
7422 #ifdef WOLFSSL_KEIL
7423         "muls	r7, r6, r7\n\t"
7424 #elif defined(__clang__)
7425         "muls	r7, r6\n\t"
7426 #else
7427         "mul	r7, r6\n\t"
7428 #endif
7429 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7430         "adds	r5, r5, r7\n\t"
7431 #else
7432         "add	r5, r5, r7\n\t"
7433 #endif
7434 #ifdef WOLFSSL_KEIL
7435         "adcs	r3, r3, %[r]\n\t"
7436 #elif defined(__clang__)
7437         "adcs	r3, %[r]\n\t"
7438 #else
7439         "adc	r3, %[r]\n\t"
7440 #endif
7441         "uxth	r7, %[b]\n\t"
7442 #ifdef WOLFSSL_KEIL
7443         "muls	r6, r7, r6\n\t"
7444 #elif defined(__clang__)
7445         "muls	r6, r7\n\t"
7446 #else
7447         "mul	r6, r7\n\t"
7448 #endif
7449 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7450         "lsrs	r7, r6, #16\n\t"
7451 #else
7452         "lsr	r7, r6, #16\n\t"
7453 #endif
7454 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7455         "lsls	r6, r6, #16\n\t"
7456 #else
7457         "lsl	r6, r6, #16\n\t"
7458 #endif
7459 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7460         "adds	r4, r4, r6\n\t"
7461 #else
7462         "add	r4, r4, r6\n\t"
7463 #endif
7464 #ifdef WOLFSSL_KEIL
7465         "adcs	r5, r5, r7\n\t"
7466 #elif defined(__clang__)
7467         "adcs	r5, r7\n\t"
7468 #else
7469         "adc	r5, r7\n\t"
7470 #endif
7471 #ifdef WOLFSSL_KEIL
7472         "adcs	r3, r3, %[r]\n\t"
7473 #elif defined(__clang__)
7474         "adcs	r3, %[r]\n\t"
7475 #else
7476         "adc	r3, %[r]\n\t"
7477 #endif
7478         "#  A[6] * B[4]\n\t"
7479         "mov	%[a], r9\n\t"
7480         "mov	%[b], r10\n\t"
7481         "ldr	%[a], [%[a], #24]\n\t"
7482         "ldr	%[b], [%[b], #16]\n\t"
7483         "uxth	r6, %[a]\n\t"
7484         "uxth	r7, %[b]\n\t"
7485 #ifdef WOLFSSL_KEIL
7486         "muls	r7, r6, r7\n\t"
7487 #elif defined(__clang__)
7488         "muls	r7, r6\n\t"
7489 #else
7490         "mul	r7, r6\n\t"
7491 #endif
7492 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7493         "adds	r4, r4, r7\n\t"
7494 #else
7495         "add	r4, r4, r7\n\t"
7496 #endif
7497 #ifdef WOLFSSL_KEIL
7498         "adcs	r5, r5, %[r]\n\t"
7499 #elif defined(__clang__)
7500         "adcs	r5, %[r]\n\t"
7501 #else
7502         "adc	r5, %[r]\n\t"
7503 #endif
7504 #ifdef WOLFSSL_KEIL
7505         "adcs	r3, r3, %[r]\n\t"
7506 #elif defined(__clang__)
7507         "adcs	r3, %[r]\n\t"
7508 #else
7509         "adc	r3, %[r]\n\t"
7510 #endif
7511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7512         "lsrs	r7, %[b], #16\n\t"
7513 #else
7514         "lsr	r7, %[b], #16\n\t"
7515 #endif
7516 #ifdef WOLFSSL_KEIL
7517         "muls	r6, r7, r6\n\t"
7518 #elif defined(__clang__)
7519         "muls	r6, r7\n\t"
7520 #else
7521         "mul	r6, r7\n\t"
7522 #endif
7523 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7524         "lsrs	r7, r6, #16\n\t"
7525 #else
7526         "lsr	r7, r6, #16\n\t"
7527 #endif
7528 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7529         "lsls	r6, r6, #16\n\t"
7530 #else
7531         "lsl	r6, r6, #16\n\t"
7532 #endif
7533 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7534         "adds	r4, r4, r6\n\t"
7535 #else
7536         "add	r4, r4, r6\n\t"
7537 #endif
7538 #ifdef WOLFSSL_KEIL
7539         "adcs	r5, r5, r7\n\t"
7540 #elif defined(__clang__)
7541         "adcs	r5, r7\n\t"
7542 #else
7543         "adc	r5, r7\n\t"
7544 #endif
7545 #ifdef WOLFSSL_KEIL
7546         "adcs	r3, r3, %[r]\n\t"
7547 #elif defined(__clang__)
7548         "adcs	r3, %[r]\n\t"
7549 #else
7550         "adc	r3, %[r]\n\t"
7551 #endif
7552 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7553         "lsrs	r6, %[a], #16\n\t"
7554 #else
7555         "lsr	r6, %[a], #16\n\t"
7556 #endif
7557 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7558         "lsrs	r7, %[b], #16\n\t"
7559 #else
7560         "lsr	r7, %[b], #16\n\t"
7561 #endif
7562 #ifdef WOLFSSL_KEIL
7563         "muls	r7, r6, r7\n\t"
7564 #elif defined(__clang__)
7565         "muls	r7, r6\n\t"
7566 #else
7567         "mul	r7, r6\n\t"
7568 #endif
7569 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7570         "adds	r5, r5, r7\n\t"
7571 #else
7572         "add	r5, r5, r7\n\t"
7573 #endif
7574 #ifdef WOLFSSL_KEIL
7575         "adcs	r3, r3, %[r]\n\t"
7576 #elif defined(__clang__)
7577         "adcs	r3, %[r]\n\t"
7578 #else
7579         "adc	r3, %[r]\n\t"
7580 #endif
7581         "uxth	r7, %[b]\n\t"
7582 #ifdef WOLFSSL_KEIL
7583         "muls	r6, r7, r6\n\t"
7584 #elif defined(__clang__)
7585         "muls	r6, r7\n\t"
7586 #else
7587         "mul	r6, r7\n\t"
7588 #endif
7589 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7590         "lsrs	r7, r6, #16\n\t"
7591 #else
7592         "lsr	r7, r6, #16\n\t"
7593 #endif
7594 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7595         "lsls	r6, r6, #16\n\t"
7596 #else
7597         "lsl	r6, r6, #16\n\t"
7598 #endif
7599 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7600         "adds	r4, r4, r6\n\t"
7601 #else
7602         "add	r4, r4, r6\n\t"
7603 #endif
7604 #ifdef WOLFSSL_KEIL
7605         "adcs	r5, r5, r7\n\t"
7606 #elif defined(__clang__)
7607         "adcs	r5, r7\n\t"
7608 #else
7609         "adc	r5, r7\n\t"
7610 #endif
7611 #ifdef WOLFSSL_KEIL
7612         "adcs	r3, r3, %[r]\n\t"
7613 #elif defined(__clang__)
7614         "adcs	r3, %[r]\n\t"
7615 #else
7616         "adc	r3, %[r]\n\t"
7617 #endif
7618         "#  A[5] * B[5]\n\t"
7619         "mov	%[a], r9\n\t"
7620         "mov	%[b], r10\n\t"
7621         "ldr	%[a], [%[a], #20]\n\t"
7622         "ldr	%[b], [%[b], #20]\n\t"
7623         "uxth	r6, %[a]\n\t"
7624         "uxth	r7, %[b]\n\t"
7625 #ifdef WOLFSSL_KEIL
7626         "muls	r7, r6, r7\n\t"
7627 #elif defined(__clang__)
7628         "muls	r7, r6\n\t"
7629 #else
7630         "mul	r7, r6\n\t"
7631 #endif
7632 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7633         "adds	r4, r4, r7\n\t"
7634 #else
7635         "add	r4, r4, r7\n\t"
7636 #endif
7637 #ifdef WOLFSSL_KEIL
7638         "adcs	r5, r5, %[r]\n\t"
7639 #elif defined(__clang__)
7640         "adcs	r5, %[r]\n\t"
7641 #else
7642         "adc	r5, %[r]\n\t"
7643 #endif
7644 #ifdef WOLFSSL_KEIL
7645         "adcs	r3, r3, %[r]\n\t"
7646 #elif defined(__clang__)
7647         "adcs	r3, %[r]\n\t"
7648 #else
7649         "adc	r3, %[r]\n\t"
7650 #endif
7651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7652         "lsrs	r7, %[b], #16\n\t"
7653 #else
7654         "lsr	r7, %[b], #16\n\t"
7655 #endif
7656 #ifdef WOLFSSL_KEIL
7657         "muls	r6, r7, r6\n\t"
7658 #elif defined(__clang__)
7659         "muls	r6, r7\n\t"
7660 #else
7661         "mul	r6, r7\n\t"
7662 #endif
7663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7664         "lsrs	r7, r6, #16\n\t"
7665 #else
7666         "lsr	r7, r6, #16\n\t"
7667 #endif
7668 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7669         "lsls	r6, r6, #16\n\t"
7670 #else
7671         "lsl	r6, r6, #16\n\t"
7672 #endif
7673 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7674         "adds	r4, r4, r6\n\t"
7675 #else
7676         "add	r4, r4, r6\n\t"
7677 #endif
7678 #ifdef WOLFSSL_KEIL
7679         "adcs	r5, r5, r7\n\t"
7680 #elif defined(__clang__)
7681         "adcs	r5, r7\n\t"
7682 #else
7683         "adc	r5, r7\n\t"
7684 #endif
7685 #ifdef WOLFSSL_KEIL
7686         "adcs	r3, r3, %[r]\n\t"
7687 #elif defined(__clang__)
7688         "adcs	r3, %[r]\n\t"
7689 #else
7690         "adc	r3, %[r]\n\t"
7691 #endif
7692 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7693         "lsrs	r6, %[a], #16\n\t"
7694 #else
7695         "lsr	r6, %[a], #16\n\t"
7696 #endif
7697 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7698         "lsrs	r7, %[b], #16\n\t"
7699 #else
7700         "lsr	r7, %[b], #16\n\t"
7701 #endif
7702 #ifdef WOLFSSL_KEIL
7703         "muls	r7, r6, r7\n\t"
7704 #elif defined(__clang__)
7705         "muls	r7, r6\n\t"
7706 #else
7707         "mul	r7, r6\n\t"
7708 #endif
7709 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7710         "adds	r5, r5, r7\n\t"
7711 #else
7712         "add	r5, r5, r7\n\t"
7713 #endif
7714 #ifdef WOLFSSL_KEIL
7715         "adcs	r3, r3, %[r]\n\t"
7716 #elif defined(__clang__)
7717         "adcs	r3, %[r]\n\t"
7718 #else
7719         "adc	r3, %[r]\n\t"
7720 #endif
7721         "uxth	r7, %[b]\n\t"
7722 #ifdef WOLFSSL_KEIL
7723         "muls	r6, r7, r6\n\t"
7724 #elif defined(__clang__)
7725         "muls	r6, r7\n\t"
7726 #else
7727         "mul	r6, r7\n\t"
7728 #endif
7729 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7730         "lsrs	r7, r6, #16\n\t"
7731 #else
7732         "lsr	r7, r6, #16\n\t"
7733 #endif
7734 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7735         "lsls	r6, r6, #16\n\t"
7736 #else
7737         "lsl	r6, r6, #16\n\t"
7738 #endif
7739 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7740         "adds	r4, r4, r6\n\t"
7741 #else
7742         "add	r4, r4, r6\n\t"
7743 #endif
7744 #ifdef WOLFSSL_KEIL
7745         "adcs	r5, r5, r7\n\t"
7746 #elif defined(__clang__)
7747         "adcs	r5, r7\n\t"
7748 #else
7749         "adc	r5, r7\n\t"
7750 #endif
7751 #ifdef WOLFSSL_KEIL
7752         "adcs	r3, r3, %[r]\n\t"
7753 #elif defined(__clang__)
7754         "adcs	r3, %[r]\n\t"
7755 #else
7756         "adc	r3, %[r]\n\t"
7757 #endif
7758         "#  A[4] * B[6]\n\t"
7759         "mov	%[a], r9\n\t"
7760         "mov	%[b], r10\n\t"
7761         "ldr	%[a], [%[a], #16]\n\t"
7762         "ldr	%[b], [%[b], #24]\n\t"
7763         "uxth	r6, %[a]\n\t"
7764         "uxth	r7, %[b]\n\t"
7765 #ifdef WOLFSSL_KEIL
7766         "muls	r7, r6, r7\n\t"
7767 #elif defined(__clang__)
7768         "muls	r7, r6\n\t"
7769 #else
7770         "mul	r7, r6\n\t"
7771 #endif
7772 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7773         "adds	r4, r4, r7\n\t"
7774 #else
7775         "add	r4, r4, r7\n\t"
7776 #endif
7777 #ifdef WOLFSSL_KEIL
7778         "adcs	r5, r5, %[r]\n\t"
7779 #elif defined(__clang__)
7780         "adcs	r5, %[r]\n\t"
7781 #else
7782         "adc	r5, %[r]\n\t"
7783 #endif
7784 #ifdef WOLFSSL_KEIL
7785         "adcs	r3, r3, %[r]\n\t"
7786 #elif defined(__clang__)
7787         "adcs	r3, %[r]\n\t"
7788 #else
7789         "adc	r3, %[r]\n\t"
7790 #endif
7791 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7792         "lsrs	r7, %[b], #16\n\t"
7793 #else
7794         "lsr	r7, %[b], #16\n\t"
7795 #endif
7796 #ifdef WOLFSSL_KEIL
7797         "muls	r6, r7, r6\n\t"
7798 #elif defined(__clang__)
7799         "muls	r6, r7\n\t"
7800 #else
7801         "mul	r6, r7\n\t"
7802 #endif
7803 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7804         "lsrs	r7, r6, #16\n\t"
7805 #else
7806         "lsr	r7, r6, #16\n\t"
7807 #endif
7808 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7809         "lsls	r6, r6, #16\n\t"
7810 #else
7811         "lsl	r6, r6, #16\n\t"
7812 #endif
7813 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7814         "adds	r4, r4, r6\n\t"
7815 #else
7816         "add	r4, r4, r6\n\t"
7817 #endif
7818 #ifdef WOLFSSL_KEIL
7819         "adcs	r5, r5, r7\n\t"
7820 #elif defined(__clang__)
7821         "adcs	r5, r7\n\t"
7822 #else
7823         "adc	r5, r7\n\t"
7824 #endif
7825 #ifdef WOLFSSL_KEIL
7826         "adcs	r3, r3, %[r]\n\t"
7827 #elif defined(__clang__)
7828         "adcs	r3, %[r]\n\t"
7829 #else
7830         "adc	r3, %[r]\n\t"
7831 #endif
7832 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7833         "lsrs	r6, %[a], #16\n\t"
7834 #else
7835         "lsr	r6, %[a], #16\n\t"
7836 #endif
7837 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7838         "lsrs	r7, %[b], #16\n\t"
7839 #else
7840         "lsr	r7, %[b], #16\n\t"
7841 #endif
7842 #ifdef WOLFSSL_KEIL
7843         "muls	r7, r6, r7\n\t"
7844 #elif defined(__clang__)
7845         "muls	r7, r6\n\t"
7846 #else
7847         "mul	r7, r6\n\t"
7848 #endif
7849 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7850         "adds	r5, r5, r7\n\t"
7851 #else
7852         "add	r5, r5, r7\n\t"
7853 #endif
7854 #ifdef WOLFSSL_KEIL
7855         "adcs	r3, r3, %[r]\n\t"
7856 #elif defined(__clang__)
7857         "adcs	r3, %[r]\n\t"
7858 #else
7859         "adc	r3, %[r]\n\t"
7860 #endif
7861         "uxth	r7, %[b]\n\t"
7862 #ifdef WOLFSSL_KEIL
7863         "muls	r6, r7, r6\n\t"
7864 #elif defined(__clang__)
7865         "muls	r6, r7\n\t"
7866 #else
7867         "mul	r6, r7\n\t"
7868 #endif
7869 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7870         "lsrs	r7, r6, #16\n\t"
7871 #else
7872         "lsr	r7, r6, #16\n\t"
7873 #endif
7874 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7875         "lsls	r6, r6, #16\n\t"
7876 #else
7877         "lsl	r6, r6, #16\n\t"
7878 #endif
7879 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7880         "adds	r4, r4, r6\n\t"
7881 #else
7882         "add	r4, r4, r6\n\t"
7883 #endif
7884 #ifdef WOLFSSL_KEIL
7885         "adcs	r5, r5, r7\n\t"
7886 #elif defined(__clang__)
7887         "adcs	r5, r7\n\t"
7888 #else
7889         "adc	r5, r7\n\t"
7890 #endif
7891 #ifdef WOLFSSL_KEIL
7892         "adcs	r3, r3, %[r]\n\t"
7893 #elif defined(__clang__)
7894         "adcs	r3, %[r]\n\t"
7895 #else
7896         "adc	r3, %[r]\n\t"
7897 #endif
7898         "#  A[3] * B[7]\n\t"
7899         "mov	%[a], r9\n\t"
7900         "mov	%[b], r10\n\t"
7901         "ldr	%[a], [%[a], #12]\n\t"
7902         "ldr	%[b], [%[b], #28]\n\t"
7903         "uxth	r6, %[a]\n\t"
7904         "uxth	r7, %[b]\n\t"
7905 #ifdef WOLFSSL_KEIL
7906         "muls	r7, r6, r7\n\t"
7907 #elif defined(__clang__)
7908         "muls	r7, r6\n\t"
7909 #else
7910         "mul	r7, r6\n\t"
7911 #endif
7912 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7913         "adds	r4, r4, r7\n\t"
7914 #else
7915         "add	r4, r4, r7\n\t"
7916 #endif
7917 #ifdef WOLFSSL_KEIL
7918         "adcs	r5, r5, %[r]\n\t"
7919 #elif defined(__clang__)
7920         "adcs	r5, %[r]\n\t"
7921 #else
7922         "adc	r5, %[r]\n\t"
7923 #endif
7924 #ifdef WOLFSSL_KEIL
7925         "adcs	r3, r3, %[r]\n\t"
7926 #elif defined(__clang__)
7927         "adcs	r3, %[r]\n\t"
7928 #else
7929         "adc	r3, %[r]\n\t"
7930 #endif
7931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7932         "lsrs	r7, %[b], #16\n\t"
7933 #else
7934         "lsr	r7, %[b], #16\n\t"
7935 #endif
7936 #ifdef WOLFSSL_KEIL
7937         "muls	r6, r7, r6\n\t"
7938 #elif defined(__clang__)
7939         "muls	r6, r7\n\t"
7940 #else
7941         "mul	r6, r7\n\t"
7942 #endif
7943 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7944         "lsrs	r7, r6, #16\n\t"
7945 #else
7946         "lsr	r7, r6, #16\n\t"
7947 #endif
7948 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7949         "lsls	r6, r6, #16\n\t"
7950 #else
7951         "lsl	r6, r6, #16\n\t"
7952 #endif
7953 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7954         "adds	r4, r4, r6\n\t"
7955 #else
7956         "add	r4, r4, r6\n\t"
7957 #endif
7958 #ifdef WOLFSSL_KEIL
7959         "adcs	r5, r5, r7\n\t"
7960 #elif defined(__clang__)
7961         "adcs	r5, r7\n\t"
7962 #else
7963         "adc	r5, r7\n\t"
7964 #endif
7965 #ifdef WOLFSSL_KEIL
7966         "adcs	r3, r3, %[r]\n\t"
7967 #elif defined(__clang__)
7968         "adcs	r3, %[r]\n\t"
7969 #else
7970         "adc	r3, %[r]\n\t"
7971 #endif
7972 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7973         "lsrs	r6, %[a], #16\n\t"
7974 #else
7975         "lsr	r6, %[a], #16\n\t"
7976 #endif
7977 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7978         "lsrs	r7, %[b], #16\n\t"
7979 #else
7980         "lsr	r7, %[b], #16\n\t"
7981 #endif
7982 #ifdef WOLFSSL_KEIL
7983         "muls	r7, r6, r7\n\t"
7984 #elif defined(__clang__)
7985         "muls	r7, r6\n\t"
7986 #else
7987         "mul	r7, r6\n\t"
7988 #endif
7989 #if defined(__clang__) || defined(WOLFSSL_KEIL)
7990         "adds	r5, r5, r7\n\t"
7991 #else
7992         "add	r5, r5, r7\n\t"
7993 #endif
7994 #ifdef WOLFSSL_KEIL
7995         "adcs	r3, r3, %[r]\n\t"
7996 #elif defined(__clang__)
7997         "adcs	r3, %[r]\n\t"
7998 #else
7999         "adc	r3, %[r]\n\t"
8000 #endif
8001         "uxth	r7, %[b]\n\t"
8002 #ifdef WOLFSSL_KEIL
8003         "muls	r6, r7, r6\n\t"
8004 #elif defined(__clang__)
8005         "muls	r6, r7\n\t"
8006 #else
8007         "mul	r6, r7\n\t"
8008 #endif
8009 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8010         "lsrs	r7, r6, #16\n\t"
8011 #else
8012         "lsr	r7, r6, #16\n\t"
8013 #endif
8014 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8015         "lsls	r6, r6, #16\n\t"
8016 #else
8017         "lsl	r6, r6, #16\n\t"
8018 #endif
8019 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8020         "adds	r4, r4, r6\n\t"
8021 #else
8022         "add	r4, r4, r6\n\t"
8023 #endif
8024 #ifdef WOLFSSL_KEIL
8025         "adcs	r5, r5, r7\n\t"
8026 #elif defined(__clang__)
8027         "adcs	r5, r7\n\t"
8028 #else
8029         "adc	r5, r7\n\t"
8030 #endif
8031 #ifdef WOLFSSL_KEIL
8032         "adcs	r3, r3, %[r]\n\t"
8033 #elif defined(__clang__)
8034         "adcs	r3, %[r]\n\t"
8035 #else
8036         "adc	r3, %[r]\n\t"
8037 #endif
8038         "mov	%[r], r8\n\t"
8039         "str	r4, [%[r], #40]\n\t"
8040         "movs	%[r], #0\n\t"
8041         "#  A[4] * B[7]\n\t"
8042         "movs	r4, #0\n\t"
8043         "mov	%[a], r9\n\t"
8044         "mov	%[b], r10\n\t"
8045         "ldr	%[a], [%[a], #16]\n\t"
8046         "ldr	%[b], [%[b], #28]\n\t"
8047         "uxth	r6, %[a]\n\t"
8048         "uxth	r7, %[b]\n\t"
8049 #ifdef WOLFSSL_KEIL
8050         "muls	r7, r6, r7\n\t"
8051 #elif defined(__clang__)
8052         "muls	r7, r6\n\t"
8053 #else
8054         "mul	r7, r6\n\t"
8055 #endif
8056 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8057         "adds	r5, r5, r7\n\t"
8058 #else
8059         "add	r5, r5, r7\n\t"
8060 #endif
8061 #ifdef WOLFSSL_KEIL
8062         "adcs	r3, r3, %[r]\n\t"
8063 #elif defined(__clang__)
8064         "adcs	r3, %[r]\n\t"
8065 #else
8066         "adc	r3, %[r]\n\t"
8067 #endif
8068 #ifdef WOLFSSL_KEIL
8069         "adcs	r4, r4, %[r]\n\t"
8070 #elif defined(__clang__)
8071         "adcs	r4, %[r]\n\t"
8072 #else
8073         "adc	r4, %[r]\n\t"
8074 #endif
8075 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8076         "lsrs	r7, %[b], #16\n\t"
8077 #else
8078         "lsr	r7, %[b], #16\n\t"
8079 #endif
8080 #ifdef WOLFSSL_KEIL
8081         "muls	r6, r7, r6\n\t"
8082 #elif defined(__clang__)
8083         "muls	r6, r7\n\t"
8084 #else
8085         "mul	r6, r7\n\t"
8086 #endif
8087 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8088         "lsrs	r7, r6, #16\n\t"
8089 #else
8090         "lsr	r7, r6, #16\n\t"
8091 #endif
8092 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8093         "lsls	r6, r6, #16\n\t"
8094 #else
8095         "lsl	r6, r6, #16\n\t"
8096 #endif
8097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8098         "adds	r5, r5, r6\n\t"
8099 #else
8100         "add	r5, r5, r6\n\t"
8101 #endif
8102 #ifdef WOLFSSL_KEIL
8103         "adcs	r3, r3, r7\n\t"
8104 #elif defined(__clang__)
8105         "adcs	r3, r7\n\t"
8106 #else
8107         "adc	r3, r7\n\t"
8108 #endif
8109 #ifdef WOLFSSL_KEIL
8110         "adcs	r4, r4, %[r]\n\t"
8111 #elif defined(__clang__)
8112         "adcs	r4, %[r]\n\t"
8113 #else
8114         "adc	r4, %[r]\n\t"
8115 #endif
8116 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8117         "lsrs	r6, %[a], #16\n\t"
8118 #else
8119         "lsr	r6, %[a], #16\n\t"
8120 #endif
8121 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8122         "lsrs	r7, %[b], #16\n\t"
8123 #else
8124         "lsr	r7, %[b], #16\n\t"
8125 #endif
8126 #ifdef WOLFSSL_KEIL
8127         "muls	r7, r6, r7\n\t"
8128 #elif defined(__clang__)
8129         "muls	r7, r6\n\t"
8130 #else
8131         "mul	r7, r6\n\t"
8132 #endif
8133 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8134         "adds	r3, r3, r7\n\t"
8135 #else
8136         "add	r3, r3, r7\n\t"
8137 #endif
8138 #ifdef WOLFSSL_KEIL
8139         "adcs	r4, r4, %[r]\n\t"
8140 #elif defined(__clang__)
8141         "adcs	r4, %[r]\n\t"
8142 #else
8143         "adc	r4, %[r]\n\t"
8144 #endif
8145         "uxth	r7, %[b]\n\t"
8146 #ifdef WOLFSSL_KEIL
8147         "muls	r6, r7, r6\n\t"
8148 #elif defined(__clang__)
8149         "muls	r6, r7\n\t"
8150 #else
8151         "mul	r6, r7\n\t"
8152 #endif
8153 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8154         "lsrs	r7, r6, #16\n\t"
8155 #else
8156         "lsr	r7, r6, #16\n\t"
8157 #endif
8158 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8159         "lsls	r6, r6, #16\n\t"
8160 #else
8161         "lsl	r6, r6, #16\n\t"
8162 #endif
8163 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8164         "adds	r5, r5, r6\n\t"
8165 #else
8166         "add	r5, r5, r6\n\t"
8167 #endif
8168 #ifdef WOLFSSL_KEIL
8169         "adcs	r3, r3, r7\n\t"
8170 #elif defined(__clang__)
8171         "adcs	r3, r7\n\t"
8172 #else
8173         "adc	r3, r7\n\t"
8174 #endif
8175 #ifdef WOLFSSL_KEIL
8176         "adcs	r4, r4, %[r]\n\t"
8177 #elif defined(__clang__)
8178         "adcs	r4, %[r]\n\t"
8179 #else
8180         "adc	r4, %[r]\n\t"
8181 #endif
8182         "#  A[5] * B[6]\n\t"
8183         "mov	%[a], r9\n\t"
8184         "mov	%[b], r10\n\t"
8185         "ldr	%[a], [%[a], #20]\n\t"
8186         "ldr	%[b], [%[b], #24]\n\t"
8187         "uxth	r6, %[a]\n\t"
8188         "uxth	r7, %[b]\n\t"
8189 #ifdef WOLFSSL_KEIL
8190         "muls	r7, r6, r7\n\t"
8191 #elif defined(__clang__)
8192         "muls	r7, r6\n\t"
8193 #else
8194         "mul	r7, r6\n\t"
8195 #endif
8196 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8197         "adds	r5, r5, r7\n\t"
8198 #else
8199         "add	r5, r5, r7\n\t"
8200 #endif
8201 #ifdef WOLFSSL_KEIL
8202         "adcs	r3, r3, %[r]\n\t"
8203 #elif defined(__clang__)
8204         "adcs	r3, %[r]\n\t"
8205 #else
8206         "adc	r3, %[r]\n\t"
8207 #endif
8208 #ifdef WOLFSSL_KEIL
8209         "adcs	r4, r4, %[r]\n\t"
8210 #elif defined(__clang__)
8211         "adcs	r4, %[r]\n\t"
8212 #else
8213         "adc	r4, %[r]\n\t"
8214 #endif
8215 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8216         "lsrs	r7, %[b], #16\n\t"
8217 #else
8218         "lsr	r7, %[b], #16\n\t"
8219 #endif
8220 #ifdef WOLFSSL_KEIL
8221         "muls	r6, r7, r6\n\t"
8222 #elif defined(__clang__)
8223         "muls	r6, r7\n\t"
8224 #else
8225         "mul	r6, r7\n\t"
8226 #endif
8227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8228         "lsrs	r7, r6, #16\n\t"
8229 #else
8230         "lsr	r7, r6, #16\n\t"
8231 #endif
8232 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8233         "lsls	r6, r6, #16\n\t"
8234 #else
8235         "lsl	r6, r6, #16\n\t"
8236 #endif
8237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8238         "adds	r5, r5, r6\n\t"
8239 #else
8240         "add	r5, r5, r6\n\t"
8241 #endif
8242 #ifdef WOLFSSL_KEIL
8243         "adcs	r3, r3, r7\n\t"
8244 #elif defined(__clang__)
8245         "adcs	r3, r7\n\t"
8246 #else
8247         "adc	r3, r7\n\t"
8248 #endif
8249 #ifdef WOLFSSL_KEIL
8250         "adcs	r4, r4, %[r]\n\t"
8251 #elif defined(__clang__)
8252         "adcs	r4, %[r]\n\t"
8253 #else
8254         "adc	r4, %[r]\n\t"
8255 #endif
8256 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8257         "lsrs	r6, %[a], #16\n\t"
8258 #else
8259         "lsr	r6, %[a], #16\n\t"
8260 #endif
8261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8262         "lsrs	r7, %[b], #16\n\t"
8263 #else
8264         "lsr	r7, %[b], #16\n\t"
8265 #endif
8266 #ifdef WOLFSSL_KEIL
8267         "muls	r7, r6, r7\n\t"
8268 #elif defined(__clang__)
8269         "muls	r7, r6\n\t"
8270 #else
8271         "mul	r7, r6\n\t"
8272 #endif
8273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8274         "adds	r3, r3, r7\n\t"
8275 #else
8276         "add	r3, r3, r7\n\t"
8277 #endif
8278 #ifdef WOLFSSL_KEIL
8279         "adcs	r4, r4, %[r]\n\t"
8280 #elif defined(__clang__)
8281         "adcs	r4, %[r]\n\t"
8282 #else
8283         "adc	r4, %[r]\n\t"
8284 #endif
8285         "uxth	r7, %[b]\n\t"
8286 #ifdef WOLFSSL_KEIL
8287         "muls	r6, r7, r6\n\t"
8288 #elif defined(__clang__)
8289         "muls	r6, r7\n\t"
8290 #else
8291         "mul	r6, r7\n\t"
8292 #endif
8293 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8294         "lsrs	r7, r6, #16\n\t"
8295 #else
8296         "lsr	r7, r6, #16\n\t"
8297 #endif
8298 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8299         "lsls	r6, r6, #16\n\t"
8300 #else
8301         "lsl	r6, r6, #16\n\t"
8302 #endif
8303 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8304         "adds	r5, r5, r6\n\t"
8305 #else
8306         "add	r5, r5, r6\n\t"
8307 #endif
8308 #ifdef WOLFSSL_KEIL
8309         "adcs	r3, r3, r7\n\t"
8310 #elif defined(__clang__)
8311         "adcs	r3, r7\n\t"
8312 #else
8313         "adc	r3, r7\n\t"
8314 #endif
8315 #ifdef WOLFSSL_KEIL
8316         "adcs	r4, r4, %[r]\n\t"
8317 #elif defined(__clang__)
8318         "adcs	r4, %[r]\n\t"
8319 #else
8320         "adc	r4, %[r]\n\t"
8321 #endif
8322         "#  A[6] * B[5]\n\t"
8323         "mov	%[a], r9\n\t"
8324         "mov	%[b], r10\n\t"
8325         "ldr	%[a], [%[a], #24]\n\t"
8326         "ldr	%[b], [%[b], #20]\n\t"
8327         "uxth	r6, %[a]\n\t"
8328         "uxth	r7, %[b]\n\t"
8329 #ifdef WOLFSSL_KEIL
8330         "muls	r7, r6, r7\n\t"
8331 #elif defined(__clang__)
8332         "muls	r7, r6\n\t"
8333 #else
8334         "mul	r7, r6\n\t"
8335 #endif
8336 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8337         "adds	r5, r5, r7\n\t"
8338 #else
8339         "add	r5, r5, r7\n\t"
8340 #endif
8341 #ifdef WOLFSSL_KEIL
8342         "adcs	r3, r3, %[r]\n\t"
8343 #elif defined(__clang__)
8344         "adcs	r3, %[r]\n\t"
8345 #else
8346         "adc	r3, %[r]\n\t"
8347 #endif
8348 #ifdef WOLFSSL_KEIL
8349         "adcs	r4, r4, %[r]\n\t"
8350 #elif defined(__clang__)
8351         "adcs	r4, %[r]\n\t"
8352 #else
8353         "adc	r4, %[r]\n\t"
8354 #endif
8355 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8356         "lsrs	r7, %[b], #16\n\t"
8357 #else
8358         "lsr	r7, %[b], #16\n\t"
8359 #endif
8360 #ifdef WOLFSSL_KEIL
8361         "muls	r6, r7, r6\n\t"
8362 #elif defined(__clang__)
8363         "muls	r6, r7\n\t"
8364 #else
8365         "mul	r6, r7\n\t"
8366 #endif
8367 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8368         "lsrs	r7, r6, #16\n\t"
8369 #else
8370         "lsr	r7, r6, #16\n\t"
8371 #endif
8372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8373         "lsls	r6, r6, #16\n\t"
8374 #else
8375         "lsl	r6, r6, #16\n\t"
8376 #endif
8377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8378         "adds	r5, r5, r6\n\t"
8379 #else
8380         "add	r5, r5, r6\n\t"
8381 #endif
8382 #ifdef WOLFSSL_KEIL
8383         "adcs	r3, r3, r7\n\t"
8384 #elif defined(__clang__)
8385         "adcs	r3, r7\n\t"
8386 #else
8387         "adc	r3, r7\n\t"
8388 #endif
8389 #ifdef WOLFSSL_KEIL
8390         "adcs	r4, r4, %[r]\n\t"
8391 #elif defined(__clang__)
8392         "adcs	r4, %[r]\n\t"
8393 #else
8394         "adc	r4, %[r]\n\t"
8395 #endif
8396 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8397         "lsrs	r6, %[a], #16\n\t"
8398 #else
8399         "lsr	r6, %[a], #16\n\t"
8400 #endif
8401 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8402         "lsrs	r7, %[b], #16\n\t"
8403 #else
8404         "lsr	r7, %[b], #16\n\t"
8405 #endif
8406 #ifdef WOLFSSL_KEIL
8407         "muls	r7, r6, r7\n\t"
8408 #elif defined(__clang__)
8409         "muls	r7, r6\n\t"
8410 #else
8411         "mul	r7, r6\n\t"
8412 #endif
8413 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8414         "adds	r3, r3, r7\n\t"
8415 #else
8416         "add	r3, r3, r7\n\t"
8417 #endif
8418 #ifdef WOLFSSL_KEIL
8419         "adcs	r4, r4, %[r]\n\t"
8420 #elif defined(__clang__)
8421         "adcs	r4, %[r]\n\t"
8422 #else
8423         "adc	r4, %[r]\n\t"
8424 #endif
8425         "uxth	r7, %[b]\n\t"
8426 #ifdef WOLFSSL_KEIL
8427         "muls	r6, r7, r6\n\t"
8428 #elif defined(__clang__)
8429         "muls	r6, r7\n\t"
8430 #else
8431         "mul	r6, r7\n\t"
8432 #endif
8433 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8434         "lsrs	r7, r6, #16\n\t"
8435 #else
8436         "lsr	r7, r6, #16\n\t"
8437 #endif
8438 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8439         "lsls	r6, r6, #16\n\t"
8440 #else
8441         "lsl	r6, r6, #16\n\t"
8442 #endif
8443 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8444         "adds	r5, r5, r6\n\t"
8445 #else
8446         "add	r5, r5, r6\n\t"
8447 #endif
8448 #ifdef WOLFSSL_KEIL
8449         "adcs	r3, r3, r7\n\t"
8450 #elif defined(__clang__)
8451         "adcs	r3, r7\n\t"
8452 #else
8453         "adc	r3, r7\n\t"
8454 #endif
8455 #ifdef WOLFSSL_KEIL
8456         "adcs	r4, r4, %[r]\n\t"
8457 #elif defined(__clang__)
8458         "adcs	r4, %[r]\n\t"
8459 #else
8460         "adc	r4, %[r]\n\t"
8461 #endif
8462         "#  A[7] * B[4]\n\t"
8463         "mov	%[a], r9\n\t"
8464         "mov	%[b], r10\n\t"
8465         "ldr	%[a], [%[a], #28]\n\t"
8466         "ldr	%[b], [%[b], #16]\n\t"
8467         "uxth	r6, %[a]\n\t"
8468         "uxth	r7, %[b]\n\t"
8469 #ifdef WOLFSSL_KEIL
8470         "muls	r7, r6, r7\n\t"
8471 #elif defined(__clang__)
8472         "muls	r7, r6\n\t"
8473 #else
8474         "mul	r7, r6\n\t"
8475 #endif
8476 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8477         "adds	r5, r5, r7\n\t"
8478 #else
8479         "add	r5, r5, r7\n\t"
8480 #endif
8481 #ifdef WOLFSSL_KEIL
8482         "adcs	r3, r3, %[r]\n\t"
8483 #elif defined(__clang__)
8484         "adcs	r3, %[r]\n\t"
8485 #else
8486         "adc	r3, %[r]\n\t"
8487 #endif
8488 #ifdef WOLFSSL_KEIL
8489         "adcs	r4, r4, %[r]\n\t"
8490 #elif defined(__clang__)
8491         "adcs	r4, %[r]\n\t"
8492 #else
8493         "adc	r4, %[r]\n\t"
8494 #endif
8495 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8496         "lsrs	r7, %[b], #16\n\t"
8497 #else
8498         "lsr	r7, %[b], #16\n\t"
8499 #endif
8500 #ifdef WOLFSSL_KEIL
8501         "muls	r6, r7, r6\n\t"
8502 #elif defined(__clang__)
8503         "muls	r6, r7\n\t"
8504 #else
8505         "mul	r6, r7\n\t"
8506 #endif
8507 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8508         "lsrs	r7, r6, #16\n\t"
8509 #else
8510         "lsr	r7, r6, #16\n\t"
8511 #endif
8512 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8513         "lsls	r6, r6, #16\n\t"
8514 #else
8515         "lsl	r6, r6, #16\n\t"
8516 #endif
8517 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8518         "adds	r5, r5, r6\n\t"
8519 #else
8520         "add	r5, r5, r6\n\t"
8521 #endif
8522 #ifdef WOLFSSL_KEIL
8523         "adcs	r3, r3, r7\n\t"
8524 #elif defined(__clang__)
8525         "adcs	r3, r7\n\t"
8526 #else
8527         "adc	r3, r7\n\t"
8528 #endif
8529 #ifdef WOLFSSL_KEIL
8530         "adcs	r4, r4, %[r]\n\t"
8531 #elif defined(__clang__)
8532         "adcs	r4, %[r]\n\t"
8533 #else
8534         "adc	r4, %[r]\n\t"
8535 #endif
8536 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8537         "lsrs	r6, %[a], #16\n\t"
8538 #else
8539         "lsr	r6, %[a], #16\n\t"
8540 #endif
8541 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8542         "lsrs	r7, %[b], #16\n\t"
8543 #else
8544         "lsr	r7, %[b], #16\n\t"
8545 #endif
8546 #ifdef WOLFSSL_KEIL
8547         "muls	r7, r6, r7\n\t"
8548 #elif defined(__clang__)
8549         "muls	r7, r6\n\t"
8550 #else
8551         "mul	r7, r6\n\t"
8552 #endif
8553 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8554         "adds	r3, r3, r7\n\t"
8555 #else
8556         "add	r3, r3, r7\n\t"
8557 #endif
8558 #ifdef WOLFSSL_KEIL
8559         "adcs	r4, r4, %[r]\n\t"
8560 #elif defined(__clang__)
8561         "adcs	r4, %[r]\n\t"
8562 #else
8563         "adc	r4, %[r]\n\t"
8564 #endif
8565         "uxth	r7, %[b]\n\t"
8566 #ifdef WOLFSSL_KEIL
8567         "muls	r6, r7, r6\n\t"
8568 #elif defined(__clang__)
8569         "muls	r6, r7\n\t"
8570 #else
8571         "mul	r6, r7\n\t"
8572 #endif
8573 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8574         "lsrs	r7, r6, #16\n\t"
8575 #else
8576         "lsr	r7, r6, #16\n\t"
8577 #endif
8578 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8579         "lsls	r6, r6, #16\n\t"
8580 #else
8581         "lsl	r6, r6, #16\n\t"
8582 #endif
8583 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8584         "adds	r5, r5, r6\n\t"
8585 #else
8586         "add	r5, r5, r6\n\t"
8587 #endif
8588 #ifdef WOLFSSL_KEIL
8589         "adcs	r3, r3, r7\n\t"
8590 #elif defined(__clang__)
8591         "adcs	r3, r7\n\t"
8592 #else
8593         "adc	r3, r7\n\t"
8594 #endif
8595 #ifdef WOLFSSL_KEIL
8596         "adcs	r4, r4, %[r]\n\t"
8597 #elif defined(__clang__)
8598         "adcs	r4, %[r]\n\t"
8599 #else
8600         "adc	r4, %[r]\n\t"
8601 #endif
8602         "mov	%[r], r8\n\t"
8603         "str	r5, [%[r], #44]\n\t"
8604         "movs	%[r], #0\n\t"
8605         "#  A[7] * B[5]\n\t"
8606         "movs	r5, #0\n\t"
8607         "mov	%[a], r9\n\t"
8608         "mov	%[b], r10\n\t"
8609         "ldr	%[a], [%[a], #28]\n\t"
8610         "ldr	%[b], [%[b], #20]\n\t"
8611         "uxth	r6, %[a]\n\t"
8612         "uxth	r7, %[b]\n\t"
8613 #ifdef WOLFSSL_KEIL
8614         "muls	r7, r6, r7\n\t"
8615 #elif defined(__clang__)
8616         "muls	r7, r6\n\t"
8617 #else
8618         "mul	r7, r6\n\t"
8619 #endif
8620 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8621         "adds	r3, r3, r7\n\t"
8622 #else
8623         "add	r3, r3, r7\n\t"
8624 #endif
8625 #ifdef WOLFSSL_KEIL
8626         "adcs	r4, r4, %[r]\n\t"
8627 #elif defined(__clang__)
8628         "adcs	r4, %[r]\n\t"
8629 #else
8630         "adc	r4, %[r]\n\t"
8631 #endif
8632 #ifdef WOLFSSL_KEIL
8633         "adcs	r5, r5, %[r]\n\t"
8634 #elif defined(__clang__)
8635         "adcs	r5, %[r]\n\t"
8636 #else
8637         "adc	r5, %[r]\n\t"
8638 #endif
8639 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8640         "lsrs	r7, %[b], #16\n\t"
8641 #else
8642         "lsr	r7, %[b], #16\n\t"
8643 #endif
8644 #ifdef WOLFSSL_KEIL
8645         "muls	r6, r7, r6\n\t"
8646 #elif defined(__clang__)
8647         "muls	r6, r7\n\t"
8648 #else
8649         "mul	r6, r7\n\t"
8650 #endif
8651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8652         "lsrs	r7, r6, #16\n\t"
8653 #else
8654         "lsr	r7, r6, #16\n\t"
8655 #endif
8656 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8657         "lsls	r6, r6, #16\n\t"
8658 #else
8659         "lsl	r6, r6, #16\n\t"
8660 #endif
8661 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8662         "adds	r3, r3, r6\n\t"
8663 #else
8664         "add	r3, r3, r6\n\t"
8665 #endif
8666 #ifdef WOLFSSL_KEIL
8667         "adcs	r4, r4, r7\n\t"
8668 #elif defined(__clang__)
8669         "adcs	r4, r7\n\t"
8670 #else
8671         "adc	r4, r7\n\t"
8672 #endif
8673 #ifdef WOLFSSL_KEIL
8674         "adcs	r5, r5, %[r]\n\t"
8675 #elif defined(__clang__)
8676         "adcs	r5, %[r]\n\t"
8677 #else
8678         "adc	r5, %[r]\n\t"
8679 #endif
8680 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8681         "lsrs	r6, %[a], #16\n\t"
8682 #else
8683         "lsr	r6, %[a], #16\n\t"
8684 #endif
8685 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8686         "lsrs	r7, %[b], #16\n\t"
8687 #else
8688         "lsr	r7, %[b], #16\n\t"
8689 #endif
8690 #ifdef WOLFSSL_KEIL
8691         "muls	r7, r6, r7\n\t"
8692 #elif defined(__clang__)
8693         "muls	r7, r6\n\t"
8694 #else
8695         "mul	r7, r6\n\t"
8696 #endif
8697 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8698         "adds	r4, r4, r7\n\t"
8699 #else
8700         "add	r4, r4, r7\n\t"
8701 #endif
8702 #ifdef WOLFSSL_KEIL
8703         "adcs	r5, r5, %[r]\n\t"
8704 #elif defined(__clang__)
8705         "adcs	r5, %[r]\n\t"
8706 #else
8707         "adc	r5, %[r]\n\t"
8708 #endif
8709         "uxth	r7, %[b]\n\t"
8710 #ifdef WOLFSSL_KEIL
8711         "muls	r6, r7, r6\n\t"
8712 #elif defined(__clang__)
8713         "muls	r6, r7\n\t"
8714 #else
8715         "mul	r6, r7\n\t"
8716 #endif
8717 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8718         "lsrs	r7, r6, #16\n\t"
8719 #else
8720         "lsr	r7, r6, #16\n\t"
8721 #endif
8722 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8723         "lsls	r6, r6, #16\n\t"
8724 #else
8725         "lsl	r6, r6, #16\n\t"
8726 #endif
8727 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8728         "adds	r3, r3, r6\n\t"
8729 #else
8730         "add	r3, r3, r6\n\t"
8731 #endif
8732 #ifdef WOLFSSL_KEIL
8733         "adcs	r4, r4, r7\n\t"
8734 #elif defined(__clang__)
8735         "adcs	r4, r7\n\t"
8736 #else
8737         "adc	r4, r7\n\t"
8738 #endif
8739 #ifdef WOLFSSL_KEIL
8740         "adcs	r5, r5, %[r]\n\t"
8741 #elif defined(__clang__)
8742         "adcs	r5, %[r]\n\t"
8743 #else
8744         "adc	r5, %[r]\n\t"
8745 #endif
8746         "#  A[6] * B[6]\n\t"
8747         "mov	%[a], r9\n\t"
8748         "mov	%[b], r10\n\t"
8749         "ldr	%[a], [%[a], #24]\n\t"
8750         "ldr	%[b], [%[b], #24]\n\t"
8751         "uxth	r6, %[a]\n\t"
8752         "uxth	r7, %[b]\n\t"
8753 #ifdef WOLFSSL_KEIL
8754         "muls	r7, r6, r7\n\t"
8755 #elif defined(__clang__)
8756         "muls	r7, r6\n\t"
8757 #else
8758         "mul	r7, r6\n\t"
8759 #endif
8760 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8761         "adds	r3, r3, r7\n\t"
8762 #else
8763         "add	r3, r3, r7\n\t"
8764 #endif
8765 #ifdef WOLFSSL_KEIL
8766         "adcs	r4, r4, %[r]\n\t"
8767 #elif defined(__clang__)
8768         "adcs	r4, %[r]\n\t"
8769 #else
8770         "adc	r4, %[r]\n\t"
8771 #endif
8772 #ifdef WOLFSSL_KEIL
8773         "adcs	r5, r5, %[r]\n\t"
8774 #elif defined(__clang__)
8775         "adcs	r5, %[r]\n\t"
8776 #else
8777         "adc	r5, %[r]\n\t"
8778 #endif
8779 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8780         "lsrs	r7, %[b], #16\n\t"
8781 #else
8782         "lsr	r7, %[b], #16\n\t"
8783 #endif
8784 #ifdef WOLFSSL_KEIL
8785         "muls	r6, r7, r6\n\t"
8786 #elif defined(__clang__)
8787         "muls	r6, r7\n\t"
8788 #else
8789         "mul	r6, r7\n\t"
8790 #endif
8791 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8792         "lsrs	r7, r6, #16\n\t"
8793 #else
8794         "lsr	r7, r6, #16\n\t"
8795 #endif
8796 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8797         "lsls	r6, r6, #16\n\t"
8798 #else
8799         "lsl	r6, r6, #16\n\t"
8800 #endif
8801 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8802         "adds	r3, r3, r6\n\t"
8803 #else
8804         "add	r3, r3, r6\n\t"
8805 #endif
8806 #ifdef WOLFSSL_KEIL
8807         "adcs	r4, r4, r7\n\t"
8808 #elif defined(__clang__)
8809         "adcs	r4, r7\n\t"
8810 #else
8811         "adc	r4, r7\n\t"
8812 #endif
8813 #ifdef WOLFSSL_KEIL
8814         "adcs	r5, r5, %[r]\n\t"
8815 #elif defined(__clang__)
8816         "adcs	r5, %[r]\n\t"
8817 #else
8818         "adc	r5, %[r]\n\t"
8819 #endif
8820 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8821         "lsrs	r6, %[a], #16\n\t"
8822 #else
8823         "lsr	r6, %[a], #16\n\t"
8824 #endif
8825 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8826         "lsrs	r7, %[b], #16\n\t"
8827 #else
8828         "lsr	r7, %[b], #16\n\t"
8829 #endif
8830 #ifdef WOLFSSL_KEIL
8831         "muls	r7, r6, r7\n\t"
8832 #elif defined(__clang__)
8833         "muls	r7, r6\n\t"
8834 #else
8835         "mul	r7, r6\n\t"
8836 #endif
8837 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8838         "adds	r4, r4, r7\n\t"
8839 #else
8840         "add	r4, r4, r7\n\t"
8841 #endif
8842 #ifdef WOLFSSL_KEIL
8843         "adcs	r5, r5, %[r]\n\t"
8844 #elif defined(__clang__)
8845         "adcs	r5, %[r]\n\t"
8846 #else
8847         "adc	r5, %[r]\n\t"
8848 #endif
8849         "uxth	r7, %[b]\n\t"
8850 #ifdef WOLFSSL_KEIL
8851         "muls	r6, r7, r6\n\t"
8852 #elif defined(__clang__)
8853         "muls	r6, r7\n\t"
8854 #else
8855         "mul	r6, r7\n\t"
8856 #endif
8857 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8858         "lsrs	r7, r6, #16\n\t"
8859 #else
8860         "lsr	r7, r6, #16\n\t"
8861 #endif
8862 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8863         "lsls	r6, r6, #16\n\t"
8864 #else
8865         "lsl	r6, r6, #16\n\t"
8866 #endif
8867 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8868         "adds	r3, r3, r6\n\t"
8869 #else
8870         "add	r3, r3, r6\n\t"
8871 #endif
8872 #ifdef WOLFSSL_KEIL
8873         "adcs	r4, r4, r7\n\t"
8874 #elif defined(__clang__)
8875         "adcs	r4, r7\n\t"
8876 #else
8877         "adc	r4, r7\n\t"
8878 #endif
8879 #ifdef WOLFSSL_KEIL
8880         "adcs	r5, r5, %[r]\n\t"
8881 #elif defined(__clang__)
8882         "adcs	r5, %[r]\n\t"
8883 #else
8884         "adc	r5, %[r]\n\t"
8885 #endif
8886         "#  A[5] * B[7]\n\t"
8887         "mov	%[a], r9\n\t"
8888         "mov	%[b], r10\n\t"
8889         "ldr	%[a], [%[a], #20]\n\t"
8890         "ldr	%[b], [%[b], #28]\n\t"
8891         "uxth	r6, %[a]\n\t"
8892         "uxth	r7, %[b]\n\t"
8893 #ifdef WOLFSSL_KEIL
8894         "muls	r7, r6, r7\n\t"
8895 #elif defined(__clang__)
8896         "muls	r7, r6\n\t"
8897 #else
8898         "mul	r7, r6\n\t"
8899 #endif
8900 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8901         "adds	r3, r3, r7\n\t"
8902 #else
8903         "add	r3, r3, r7\n\t"
8904 #endif
8905 #ifdef WOLFSSL_KEIL
8906         "adcs	r4, r4, %[r]\n\t"
8907 #elif defined(__clang__)
8908         "adcs	r4, %[r]\n\t"
8909 #else
8910         "adc	r4, %[r]\n\t"
8911 #endif
8912 #ifdef WOLFSSL_KEIL
8913         "adcs	r5, r5, %[r]\n\t"
8914 #elif defined(__clang__)
8915         "adcs	r5, %[r]\n\t"
8916 #else
8917         "adc	r5, %[r]\n\t"
8918 #endif
8919 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8920         "lsrs	r7, %[b], #16\n\t"
8921 #else
8922         "lsr	r7, %[b], #16\n\t"
8923 #endif
8924 #ifdef WOLFSSL_KEIL
8925         "muls	r6, r7, r6\n\t"
8926 #elif defined(__clang__)
8927         "muls	r6, r7\n\t"
8928 #else
8929         "mul	r6, r7\n\t"
8930 #endif
8931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8932         "lsrs	r7, r6, #16\n\t"
8933 #else
8934         "lsr	r7, r6, #16\n\t"
8935 #endif
8936 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8937         "lsls	r6, r6, #16\n\t"
8938 #else
8939         "lsl	r6, r6, #16\n\t"
8940 #endif
8941 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8942         "adds	r3, r3, r6\n\t"
8943 #else
8944         "add	r3, r3, r6\n\t"
8945 #endif
8946 #ifdef WOLFSSL_KEIL
8947         "adcs	r4, r4, r7\n\t"
8948 #elif defined(__clang__)
8949         "adcs	r4, r7\n\t"
8950 #else
8951         "adc	r4, r7\n\t"
8952 #endif
8953 #ifdef WOLFSSL_KEIL
8954         "adcs	r5, r5, %[r]\n\t"
8955 #elif defined(__clang__)
8956         "adcs	r5, %[r]\n\t"
8957 #else
8958         "adc	r5, %[r]\n\t"
8959 #endif
8960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8961         "lsrs	r6, %[a], #16\n\t"
8962 #else
8963         "lsr	r6, %[a], #16\n\t"
8964 #endif
8965 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8966         "lsrs	r7, %[b], #16\n\t"
8967 #else
8968         "lsr	r7, %[b], #16\n\t"
8969 #endif
8970 #ifdef WOLFSSL_KEIL
8971         "muls	r7, r6, r7\n\t"
8972 #elif defined(__clang__)
8973         "muls	r7, r6\n\t"
8974 #else
8975         "mul	r7, r6\n\t"
8976 #endif
8977 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8978         "adds	r4, r4, r7\n\t"
8979 #else
8980         "add	r4, r4, r7\n\t"
8981 #endif
8982 #ifdef WOLFSSL_KEIL
8983         "adcs	r5, r5, %[r]\n\t"
8984 #elif defined(__clang__)
8985         "adcs	r5, %[r]\n\t"
8986 #else
8987         "adc	r5, %[r]\n\t"
8988 #endif
8989         "uxth	r7, %[b]\n\t"
8990 #ifdef WOLFSSL_KEIL
8991         "muls	r6, r7, r6\n\t"
8992 #elif defined(__clang__)
8993         "muls	r6, r7\n\t"
8994 #else
8995         "mul	r6, r7\n\t"
8996 #endif
8997 #if defined(__clang__) || defined(WOLFSSL_KEIL)
8998         "lsrs	r7, r6, #16\n\t"
8999 #else
9000         "lsr	r7, r6, #16\n\t"
9001 #endif
9002 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9003         "lsls	r6, r6, #16\n\t"
9004 #else
9005         "lsl	r6, r6, #16\n\t"
9006 #endif
9007 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9008         "adds	r3, r3, r6\n\t"
9009 #else
9010         "add	r3, r3, r6\n\t"
9011 #endif
9012 #ifdef WOLFSSL_KEIL
9013         "adcs	r4, r4, r7\n\t"
9014 #elif defined(__clang__)
9015         "adcs	r4, r7\n\t"
9016 #else
9017         "adc	r4, r7\n\t"
9018 #endif
9019 #ifdef WOLFSSL_KEIL
9020         "adcs	r5, r5, %[r]\n\t"
9021 #elif defined(__clang__)
9022         "adcs	r5, %[r]\n\t"
9023 #else
9024         "adc	r5, %[r]\n\t"
9025 #endif
9026         "mov	%[r], r8\n\t"
9027         "str	r3, [%[r], #48]\n\t"
9028         "movs	%[r], #0\n\t"
9029         "#  A[6] * B[7]\n\t"
9030         "movs	r3, #0\n\t"
9031         "mov	%[a], r9\n\t"
9032         "mov	%[b], r10\n\t"
9033         "ldr	%[a], [%[a], #24]\n\t"
9034         "ldr	%[b], [%[b], #28]\n\t"
9035         "uxth	r6, %[a]\n\t"
9036         "uxth	r7, %[b]\n\t"
9037 #ifdef WOLFSSL_KEIL
9038         "muls	r7, r6, r7\n\t"
9039 #elif defined(__clang__)
9040         "muls	r7, r6\n\t"
9041 #else
9042         "mul	r7, r6\n\t"
9043 #endif
9044 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9045         "adds	r4, r4, r7\n\t"
9046 #else
9047         "add	r4, r4, r7\n\t"
9048 #endif
9049 #ifdef WOLFSSL_KEIL
9050         "adcs	r5, r5, %[r]\n\t"
9051 #elif defined(__clang__)
9052         "adcs	r5, %[r]\n\t"
9053 #else
9054         "adc	r5, %[r]\n\t"
9055 #endif
9056 #ifdef WOLFSSL_KEIL
9057         "adcs	r3, r3, %[r]\n\t"
9058 #elif defined(__clang__)
9059         "adcs	r3, %[r]\n\t"
9060 #else
9061         "adc	r3, %[r]\n\t"
9062 #endif
9063 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9064         "lsrs	r7, %[b], #16\n\t"
9065 #else
9066         "lsr	r7, %[b], #16\n\t"
9067 #endif
9068 #ifdef WOLFSSL_KEIL
9069         "muls	r6, r7, r6\n\t"
9070 #elif defined(__clang__)
9071         "muls	r6, r7\n\t"
9072 #else
9073         "mul	r6, r7\n\t"
9074 #endif
9075 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9076         "lsrs	r7, r6, #16\n\t"
9077 #else
9078         "lsr	r7, r6, #16\n\t"
9079 #endif
9080 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9081         "lsls	r6, r6, #16\n\t"
9082 #else
9083         "lsl	r6, r6, #16\n\t"
9084 #endif
9085 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9086         "adds	r4, r4, r6\n\t"
9087 #else
9088         "add	r4, r4, r6\n\t"
9089 #endif
9090 #ifdef WOLFSSL_KEIL
9091         "adcs	r5, r5, r7\n\t"
9092 #elif defined(__clang__)
9093         "adcs	r5, r7\n\t"
9094 #else
9095         "adc	r5, r7\n\t"
9096 #endif
9097 #ifdef WOLFSSL_KEIL
9098         "adcs	r3, r3, %[r]\n\t"
9099 #elif defined(__clang__)
9100         "adcs	r3, %[r]\n\t"
9101 #else
9102         "adc	r3, %[r]\n\t"
9103 #endif
9104 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9105         "lsrs	r6, %[a], #16\n\t"
9106 #else
9107         "lsr	r6, %[a], #16\n\t"
9108 #endif
9109 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9110         "lsrs	r7, %[b], #16\n\t"
9111 #else
9112         "lsr	r7, %[b], #16\n\t"
9113 #endif
9114 #ifdef WOLFSSL_KEIL
9115         "muls	r7, r6, r7\n\t"
9116 #elif defined(__clang__)
9117         "muls	r7, r6\n\t"
9118 #else
9119         "mul	r7, r6\n\t"
9120 #endif
9121 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9122         "adds	r5, r5, r7\n\t"
9123 #else
9124         "add	r5, r5, r7\n\t"
9125 #endif
9126 #ifdef WOLFSSL_KEIL
9127         "adcs	r3, r3, %[r]\n\t"
9128 #elif defined(__clang__)
9129         "adcs	r3, %[r]\n\t"
9130 #else
9131         "adc	r3, %[r]\n\t"
9132 #endif
9133         "uxth	r7, %[b]\n\t"
9134 #ifdef WOLFSSL_KEIL
9135         "muls	r6, r7, r6\n\t"
9136 #elif defined(__clang__)
9137         "muls	r6, r7\n\t"
9138 #else
9139         "mul	r6, r7\n\t"
9140 #endif
9141 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9142         "lsrs	r7, r6, #16\n\t"
9143 #else
9144         "lsr	r7, r6, #16\n\t"
9145 #endif
9146 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9147         "lsls	r6, r6, #16\n\t"
9148 #else
9149         "lsl	r6, r6, #16\n\t"
9150 #endif
9151 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9152         "adds	r4, r4, r6\n\t"
9153 #else
9154         "add	r4, r4, r6\n\t"
9155 #endif
9156 #ifdef WOLFSSL_KEIL
9157         "adcs	r5, r5, r7\n\t"
9158 #elif defined(__clang__)
9159         "adcs	r5, r7\n\t"
9160 #else
9161         "adc	r5, r7\n\t"
9162 #endif
9163 #ifdef WOLFSSL_KEIL
9164         "adcs	r3, r3, %[r]\n\t"
9165 #elif defined(__clang__)
9166         "adcs	r3, %[r]\n\t"
9167 #else
9168         "adc	r3, %[r]\n\t"
9169 #endif
9170         "#  A[7] * B[6]\n\t"
9171         "mov	%[a], r9\n\t"
9172         "mov	%[b], r10\n\t"
9173         "ldr	%[a], [%[a], #28]\n\t"
9174         "ldr	%[b], [%[b], #24]\n\t"
9175         "uxth	r6, %[a]\n\t"
9176         "uxth	r7, %[b]\n\t"
9177 #ifdef WOLFSSL_KEIL
9178         "muls	r7, r6, r7\n\t"
9179 #elif defined(__clang__)
9180         "muls	r7, r6\n\t"
9181 #else
9182         "mul	r7, r6\n\t"
9183 #endif
9184 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9185         "adds	r4, r4, r7\n\t"
9186 #else
9187         "add	r4, r4, r7\n\t"
9188 #endif
9189 #ifdef WOLFSSL_KEIL
9190         "adcs	r5, r5, %[r]\n\t"
9191 #elif defined(__clang__)
9192         "adcs	r5, %[r]\n\t"
9193 #else
9194         "adc	r5, %[r]\n\t"
9195 #endif
9196 #ifdef WOLFSSL_KEIL
9197         "adcs	r3, r3, %[r]\n\t"
9198 #elif defined(__clang__)
9199         "adcs	r3, %[r]\n\t"
9200 #else
9201         "adc	r3, %[r]\n\t"
9202 #endif
9203 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9204         "lsrs	r7, %[b], #16\n\t"
9205 #else
9206         "lsr	r7, %[b], #16\n\t"
9207 #endif
9208 #ifdef WOLFSSL_KEIL
9209         "muls	r6, r7, r6\n\t"
9210 #elif defined(__clang__)
9211         "muls	r6, r7\n\t"
9212 #else
9213         "mul	r6, r7\n\t"
9214 #endif
9215 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9216         "lsrs	r7, r6, #16\n\t"
9217 #else
9218         "lsr	r7, r6, #16\n\t"
9219 #endif
9220 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9221         "lsls	r6, r6, #16\n\t"
9222 #else
9223         "lsl	r6, r6, #16\n\t"
9224 #endif
9225 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9226         "adds	r4, r4, r6\n\t"
9227 #else
9228         "add	r4, r4, r6\n\t"
9229 #endif
9230 #ifdef WOLFSSL_KEIL
9231         "adcs	r5, r5, r7\n\t"
9232 #elif defined(__clang__)
9233         "adcs	r5, r7\n\t"
9234 #else
9235         "adc	r5, r7\n\t"
9236 #endif
9237 #ifdef WOLFSSL_KEIL
9238         "adcs	r3, r3, %[r]\n\t"
9239 #elif defined(__clang__)
9240         "adcs	r3, %[r]\n\t"
9241 #else
9242         "adc	r3, %[r]\n\t"
9243 #endif
9244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9245         "lsrs	r6, %[a], #16\n\t"
9246 #else
9247         "lsr	r6, %[a], #16\n\t"
9248 #endif
9249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9250         "lsrs	r7, %[b], #16\n\t"
9251 #else
9252         "lsr	r7, %[b], #16\n\t"
9253 #endif
9254 #ifdef WOLFSSL_KEIL
9255         "muls	r7, r6, r7\n\t"
9256 #elif defined(__clang__)
9257         "muls	r7, r6\n\t"
9258 #else
9259         "mul	r7, r6\n\t"
9260 #endif
9261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9262         "adds	r5, r5, r7\n\t"
9263 #else
9264         "add	r5, r5, r7\n\t"
9265 #endif
9266 #ifdef WOLFSSL_KEIL
9267         "adcs	r3, r3, %[r]\n\t"
9268 #elif defined(__clang__)
9269         "adcs	r3, %[r]\n\t"
9270 #else
9271         "adc	r3, %[r]\n\t"
9272 #endif
9273         "uxth	r7, %[b]\n\t"
9274 #ifdef WOLFSSL_KEIL
9275         "muls	r6, r7, r6\n\t"
9276 #elif defined(__clang__)
9277         "muls	r6, r7\n\t"
9278 #else
9279         "mul	r6, r7\n\t"
9280 #endif
9281 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9282         "lsrs	r7, r6, #16\n\t"
9283 #else
9284         "lsr	r7, r6, #16\n\t"
9285 #endif
9286 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9287         "lsls	r6, r6, #16\n\t"
9288 #else
9289         "lsl	r6, r6, #16\n\t"
9290 #endif
9291 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9292         "adds	r4, r4, r6\n\t"
9293 #else
9294         "add	r4, r4, r6\n\t"
9295 #endif
9296 #ifdef WOLFSSL_KEIL
9297         "adcs	r5, r5, r7\n\t"
9298 #elif defined(__clang__)
9299         "adcs	r5, r7\n\t"
9300 #else
9301         "adc	r5, r7\n\t"
9302 #endif
9303 #ifdef WOLFSSL_KEIL
9304         "adcs	r3, r3, %[r]\n\t"
9305 #elif defined(__clang__)
9306         "adcs	r3, %[r]\n\t"
9307 #else
9308         "adc	r3, %[r]\n\t"
9309 #endif
9310         "mov	%[r], r8\n\t"
9311         "str	r4, [%[r], #52]\n\t"
9312         "movs	%[r], #0\n\t"
9313         "#  A[7] * B[7]\n\t"
9314         "mov	%[a], r9\n\t"
9315         "mov	%[b], r10\n\t"
9316         "ldr	%[a], [%[a], #28]\n\t"
9317         "ldr	%[b], [%[b], #28]\n\t"
9318         "uxth	r6, %[a]\n\t"
9319         "uxth	r7, %[b]\n\t"
9320 #ifdef WOLFSSL_KEIL
9321         "muls	r7, r6, r7\n\t"
9322 #elif defined(__clang__)
9323         "muls	r7, r6\n\t"
9324 #else
9325         "mul	r7, r6\n\t"
9326 #endif
9327 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9328         "adds	r5, r5, r7\n\t"
9329 #else
9330         "add	r5, r5, r7\n\t"
9331 #endif
9332 #ifdef WOLFSSL_KEIL
9333         "adcs	r3, r3, %[r]\n\t"
9334 #elif defined(__clang__)
9335         "adcs	r3, %[r]\n\t"
9336 #else
9337         "adc	r3, %[r]\n\t"
9338 #endif
9339 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9340         "lsrs	r7, %[b], #16\n\t"
9341 #else
9342         "lsr	r7, %[b], #16\n\t"
9343 #endif
9344 #ifdef WOLFSSL_KEIL
9345         "muls	r6, r7, r6\n\t"
9346 #elif defined(__clang__)
9347         "muls	r6, r7\n\t"
9348 #else
9349         "mul	r6, r7\n\t"
9350 #endif
9351 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9352         "lsrs	r7, r6, #16\n\t"
9353 #else
9354         "lsr	r7, r6, #16\n\t"
9355 #endif
9356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9357         "lsls	r6, r6, #16\n\t"
9358 #else
9359         "lsl	r6, r6, #16\n\t"
9360 #endif
9361 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9362         "adds	r5, r5, r6\n\t"
9363 #else
9364         "add	r5, r5, r6\n\t"
9365 #endif
9366 #ifdef WOLFSSL_KEIL
9367         "adcs	r3, r3, r7\n\t"
9368 #elif defined(__clang__)
9369         "adcs	r3, r7\n\t"
9370 #else
9371         "adc	r3, r7\n\t"
9372 #endif
9373 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9374         "lsrs	r6, %[a], #16\n\t"
9375 #else
9376         "lsr	r6, %[a], #16\n\t"
9377 #endif
9378 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9379         "lsrs	r7, %[b], #16\n\t"
9380 #else
9381         "lsr	r7, %[b], #16\n\t"
9382 #endif
9383 #ifdef WOLFSSL_KEIL
9384         "muls	r7, r6, r7\n\t"
9385 #elif defined(__clang__)
9386         "muls	r7, r6\n\t"
9387 #else
9388         "mul	r7, r6\n\t"
9389 #endif
9390 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9391         "adds	r3, r3, r7\n\t"
9392 #else
9393         "add	r3, r3, r7\n\t"
9394 #endif
9395         "uxth	r7, %[b]\n\t"
9396 #ifdef WOLFSSL_KEIL
9397         "muls	r6, r7, r6\n\t"
9398 #elif defined(__clang__)
9399         "muls	r6, r7\n\t"
9400 #else
9401         "mul	r6, r7\n\t"
9402 #endif
9403 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9404         "lsrs	r7, r6, #16\n\t"
9405 #else
9406         "lsr	r7, r6, #16\n\t"
9407 #endif
9408 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9409         "lsls	r6, r6, #16\n\t"
9410 #else
9411         "lsl	r6, r6, #16\n\t"
9412 #endif
9413 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9414         "adds	r5, r5, r6\n\t"
9415 #else
9416         "add	r5, r5, r6\n\t"
9417 #endif
9418 #ifdef WOLFSSL_KEIL
9419         "adcs	r3, r3, r7\n\t"
9420 #elif defined(__clang__)
9421         "adcs	r3, r7\n\t"
9422 #else
9423         "adc	r3, r7\n\t"
9424 #endif
9425         "mov	%[r], r8\n\t"
9426         "str	r5, [%[r], #56]\n\t"
9427         "str	r3, [%[r], #60]\n\t"
9428         "pop	{r3, r4, r5, r6}\n\t"
9429         "stm	%[r]!, {r3, r4, r5, r6}\n\t"
9430         "pop	{r3, r4, r5, r6}\n\t"
9431         "stm	%[r]!, {r3, r4, r5, r6}\n\t"
9432         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
9433         :
9434         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10"
9435     );
9436 }
9437 
9438 #endif /* !WOLFSSL_SP_LARGE_CODE */
9439 #ifndef WOLFSSL_SP_LARGE_CODE
9440 /* Square a and put result in r. (r = a * a)
9441  *
9442  * r  A single precision integer.
9443  * a  A single precision integer.
9444  */
sp_2048_sqr_8(sp_digit * r,const sp_digit * a)9445 SP_NOINLINE static void sp_2048_sqr_8(sp_digit* r, const sp_digit* a)
9446 {
9447     __asm__ __volatile__ (
9448         "movs	r3, #0\n\t"
9449         "movs	r4, #0\n\t"
9450         "movs	r5, #0\n\t"
9451         "mov	r8, r3\n\t"
9452         "mov	r11, %[r]\n\t"
9453         "movs	r6, #0x40\n\t"
9454 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9455         "negs	r6, r6\n\t"
9456 #else
9457         "neg	r6, r6\n\t"
9458 #endif
9459         "add	sp, sp, r6\n\t"
9460         "mov	r10, sp\n\t"
9461         "mov	r9, %[a]\n\t"
9462         "\n"
9463     "L_sp_2048_sqr_8_words_%=:\n\t"
9464         "movs	%[r], #0\n\t"
9465         "movs	r6, #28\n\t"
9466         "mov	%[a], r8\n\t"
9467 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9468         "subs	%[a], %[a], r6\n\t"
9469 #else
9470         "sub	%[a], %[a], r6\n\t"
9471 #endif
9472 #ifdef WOLFSSL_KEIL
9473         "sbcs	r6, r6, r6\n\t"
9474 #elif defined(__clang__)
9475         "sbcs	r6, r6\n\t"
9476 #else
9477         "sbc	r6, r6\n\t"
9478 #endif
9479 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9480         "mvns	r6, r6\n\t"
9481 #else
9482         "mvn	r6, r6\n\t"
9483 #endif
9484 #ifdef WOLFSSL_KEIL
9485         "ands	%[a], %[a], r6\n\t"
9486 #elif defined(__clang__)
9487         "ands	%[a], r6\n\t"
9488 #else
9489         "and	%[a], r6\n\t"
9490 #endif
9491         "mov	r2, r8\n\t"
9492 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9493         "subs	r2, r2, %[a]\n\t"
9494 #else
9495         "sub	r2, r2, %[a]\n\t"
9496 #endif
9497         "add	%[a], %[a], r9\n\t"
9498         "add	r2, r2, r9\n\t"
9499         "\n"
9500     "L_sp_2048_sqr_8_mul_%=:\n\t"
9501         "cmp	r2, %[a]\n\t"
9502         "beq	L_sp_2048_sqr_8_sqr_%=\n\t"
9503         "# Multiply * 2: Start\n\t"
9504         "ldrh	r6, [%[a]]\n\t"
9505         "ldrh	r7, [r2]\n\t"
9506 #ifdef WOLFSSL_KEIL
9507         "muls	r7, r6, r7\n\t"
9508 #elif defined(__clang__)
9509         "muls	r7, r6\n\t"
9510 #else
9511         "mul	r7, r6\n\t"
9512 #endif
9513 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9514         "adds	r3, r3, r7\n\t"
9515 #else
9516         "add	r3, r3, r7\n\t"
9517 #endif
9518 #ifdef WOLFSSL_KEIL
9519         "adcs	r4, r4, %[r]\n\t"
9520 #elif defined(__clang__)
9521         "adcs	r4, %[r]\n\t"
9522 #else
9523         "adc	r4, %[r]\n\t"
9524 #endif
9525 #ifdef WOLFSSL_KEIL
9526         "adcs	r5, r5, %[r]\n\t"
9527 #elif defined(__clang__)
9528         "adcs	r5, %[r]\n\t"
9529 #else
9530         "adc	r5, %[r]\n\t"
9531 #endif
9532 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9533         "adds	r3, r3, r7\n\t"
9534 #else
9535         "add	r3, r3, r7\n\t"
9536 #endif
9537 #ifdef WOLFSSL_KEIL
9538         "adcs	r4, r4, %[r]\n\t"
9539 #elif defined(__clang__)
9540         "adcs	r4, %[r]\n\t"
9541 #else
9542         "adc	r4, %[r]\n\t"
9543 #endif
9544 #ifdef WOLFSSL_KEIL
9545         "adcs	r5, r5, %[r]\n\t"
9546 #elif defined(__clang__)
9547         "adcs	r5, %[r]\n\t"
9548 #else
9549         "adc	r5, %[r]\n\t"
9550 #endif
9551         "ldr	r7, [r2]\n\t"
9552 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9553         "lsrs	r7, r7, #16\n\t"
9554 #else
9555         "lsr	r7, r7, #16\n\t"
9556 #endif
9557 #ifdef WOLFSSL_KEIL
9558         "muls	r6, r7, r6\n\t"
9559 #elif defined(__clang__)
9560         "muls	r6, r7\n\t"
9561 #else
9562         "mul	r6, r7\n\t"
9563 #endif
9564 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9565         "lsrs	r7, r6, #16\n\t"
9566 #else
9567         "lsr	r7, r6, #16\n\t"
9568 #endif
9569 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9570         "lsls	r6, r6, #16\n\t"
9571 #else
9572         "lsl	r6, r6, #16\n\t"
9573 #endif
9574 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9575         "adds	r3, r3, r6\n\t"
9576 #else
9577         "add	r3, r3, r6\n\t"
9578 #endif
9579 #ifdef WOLFSSL_KEIL
9580         "adcs	r4, r4, r7\n\t"
9581 #elif defined(__clang__)
9582         "adcs	r4, r7\n\t"
9583 #else
9584         "adc	r4, r7\n\t"
9585 #endif
9586 #ifdef WOLFSSL_KEIL
9587         "adcs	r5, r5, %[r]\n\t"
9588 #elif defined(__clang__)
9589         "adcs	r5, %[r]\n\t"
9590 #else
9591         "adc	r5, %[r]\n\t"
9592 #endif
9593 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9594         "adds	r3, r3, r6\n\t"
9595 #else
9596         "add	r3, r3, r6\n\t"
9597 #endif
9598 #ifdef WOLFSSL_KEIL
9599         "adcs	r4, r4, r7\n\t"
9600 #elif defined(__clang__)
9601         "adcs	r4, r7\n\t"
9602 #else
9603         "adc	r4, r7\n\t"
9604 #endif
9605 #ifdef WOLFSSL_KEIL
9606         "adcs	r5, r5, %[r]\n\t"
9607 #elif defined(__clang__)
9608         "adcs	r5, %[r]\n\t"
9609 #else
9610         "adc	r5, %[r]\n\t"
9611 #endif
9612         "ldr	r6, [%[a]]\n\t"
9613         "ldr	r7, [r2]\n\t"
9614 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9615         "lsrs	r6, r6, #16\n\t"
9616 #else
9617         "lsr	r6, r6, #16\n\t"
9618 #endif
9619 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9620         "lsrs	r7, r7, #16\n\t"
9621 #else
9622         "lsr	r7, r7, #16\n\t"
9623 #endif
9624 #ifdef WOLFSSL_KEIL
9625         "muls	r7, r6, r7\n\t"
9626 #elif defined(__clang__)
9627         "muls	r7, r6\n\t"
9628 #else
9629         "mul	r7, r6\n\t"
9630 #endif
9631 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9632         "adds	r4, r4, r7\n\t"
9633 #else
9634         "add	r4, r4, r7\n\t"
9635 #endif
9636 #ifdef WOLFSSL_KEIL
9637         "adcs	r5, r5, %[r]\n\t"
9638 #elif defined(__clang__)
9639         "adcs	r5, %[r]\n\t"
9640 #else
9641         "adc	r5, %[r]\n\t"
9642 #endif
9643 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9644         "adds	r4, r4, r7\n\t"
9645 #else
9646         "add	r4, r4, r7\n\t"
9647 #endif
9648 #ifdef WOLFSSL_KEIL
9649         "adcs	r5, r5, %[r]\n\t"
9650 #elif defined(__clang__)
9651         "adcs	r5, %[r]\n\t"
9652 #else
9653         "adc	r5, %[r]\n\t"
9654 #endif
9655         "ldrh	r7, [r2]\n\t"
9656 #ifdef WOLFSSL_KEIL
9657         "muls	r6, r7, r6\n\t"
9658 #elif defined(__clang__)
9659         "muls	r6, r7\n\t"
9660 #else
9661         "mul	r6, r7\n\t"
9662 #endif
9663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9664         "lsrs	r7, r6, #16\n\t"
9665 #else
9666         "lsr	r7, r6, #16\n\t"
9667 #endif
9668 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9669         "lsls	r6, r6, #16\n\t"
9670 #else
9671         "lsl	r6, r6, #16\n\t"
9672 #endif
9673 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9674         "adds	r3, r3, r6\n\t"
9675 #else
9676         "add	r3, r3, r6\n\t"
9677 #endif
9678 #ifdef WOLFSSL_KEIL
9679         "adcs	r4, r4, r7\n\t"
9680 #elif defined(__clang__)
9681         "adcs	r4, r7\n\t"
9682 #else
9683         "adc	r4, r7\n\t"
9684 #endif
9685 #ifdef WOLFSSL_KEIL
9686         "adcs	r5, r5, %[r]\n\t"
9687 #elif defined(__clang__)
9688         "adcs	r5, %[r]\n\t"
9689 #else
9690         "adc	r5, %[r]\n\t"
9691 #endif
9692 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9693         "adds	r3, r3, r6\n\t"
9694 #else
9695         "add	r3, r3, r6\n\t"
9696 #endif
9697 #ifdef WOLFSSL_KEIL
9698         "adcs	r4, r4, r7\n\t"
9699 #elif defined(__clang__)
9700         "adcs	r4, r7\n\t"
9701 #else
9702         "adc	r4, r7\n\t"
9703 #endif
9704 #ifdef WOLFSSL_KEIL
9705         "adcs	r5, r5, %[r]\n\t"
9706 #elif defined(__clang__)
9707         "adcs	r5, %[r]\n\t"
9708 #else
9709         "adc	r5, %[r]\n\t"
9710 #endif
9711         "# Multiply * 2: Done\n\t"
9712         "bal	L_sp_2048_sqr_8_done_sqr_%=\n\t"
9713         "\n"
9714     "L_sp_2048_sqr_8_sqr_%=:\n\t"
9715         "mov	r12, r2\n\t"
9716         "ldr	r2, [%[a]]\n\t"
9717         "# Square: Start\n\t"
9718 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9719         "lsrs	r7, r2, #16\n\t"
9720 #else
9721         "lsr	r7, r2, #16\n\t"
9722 #endif
9723         "uxth	r6, r2\n\t"
9724 #ifdef WOLFSSL_KEIL
9725         "muls	r6, r6, r6\n\t"
9726 #elif defined(__clang__)
9727         "muls	r6, r6\n\t"
9728 #else
9729         "mul	r6, r6\n\t"
9730 #endif
9731 #ifdef WOLFSSL_KEIL
9732         "muls	r7, r7, r7\n\t"
9733 #elif defined(__clang__)
9734         "muls	r7, r7\n\t"
9735 #else
9736         "mul	r7, r7\n\t"
9737 #endif
9738 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9739         "adds	r3, r3, r6\n\t"
9740 #else
9741         "add	r3, r3, r6\n\t"
9742 #endif
9743 #ifdef WOLFSSL_KEIL
9744         "adcs	r4, r4, r7\n\t"
9745 #elif defined(__clang__)
9746         "adcs	r4, r7\n\t"
9747 #else
9748         "adc	r4, r7\n\t"
9749 #endif
9750 #ifdef WOLFSSL_KEIL
9751         "adcs	r5, r5, %[r]\n\t"
9752 #elif defined(__clang__)
9753         "adcs	r5, %[r]\n\t"
9754 #else
9755         "adc	r5, %[r]\n\t"
9756 #endif
9757 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9758         "lsrs	r7, r2, #16\n\t"
9759 #else
9760         "lsr	r7, r2, #16\n\t"
9761 #endif
9762         "uxth	r6, r2\n\t"
9763 #ifdef WOLFSSL_KEIL
9764         "muls	r6, r7, r6\n\t"
9765 #elif defined(__clang__)
9766         "muls	r6, r7\n\t"
9767 #else
9768         "mul	r6, r7\n\t"
9769 #endif
9770 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9771         "lsrs	r7, r6, #15\n\t"
9772 #else
9773         "lsr	r7, r6, #15\n\t"
9774 #endif
9775 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9776         "lsls	r6, r6, #17\n\t"
9777 #else
9778         "lsl	r6, r6, #17\n\t"
9779 #endif
9780 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9781         "adds	r3, r3, r6\n\t"
9782 #else
9783         "add	r3, r3, r6\n\t"
9784 #endif
9785 #ifdef WOLFSSL_KEIL
9786         "adcs	r4, r4, r7\n\t"
9787 #elif defined(__clang__)
9788         "adcs	r4, r7\n\t"
9789 #else
9790         "adc	r4, r7\n\t"
9791 #endif
9792 #ifdef WOLFSSL_KEIL
9793         "adcs	r5, r5, %[r]\n\t"
9794 #elif defined(__clang__)
9795         "adcs	r5, %[r]\n\t"
9796 #else
9797         "adc	r5, %[r]\n\t"
9798 #endif
9799         "# Square: Done\n\t"
9800         "mov	r2, r12\n\t"
9801         "\n"
9802     "L_sp_2048_sqr_8_done_sqr_%=:\n\t"
9803 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9804         "adds	%[a], %[a], #4\n\t"
9805 #else
9806         "add	%[a], %[a], #4\n\t"
9807 #endif
9808 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9809         "subs	r2, r2, #4\n\t"
9810 #else
9811         "sub	r2, r2, #4\n\t"
9812 #endif
9813         "movs	r6, #32\n\t"
9814         "add	r6, r6, r9\n\t"
9815         "cmp	%[a], r6\n\t"
9816         "beq	L_sp_2048_sqr_8_done_mul_%=\n\t"
9817         "cmp	%[a], r2\n\t"
9818         "bgt	L_sp_2048_sqr_8_done_mul_%=\n\t"
9819         "mov	r7, r8\n\t"
9820         "add	r7, r7, r9\n\t"
9821         "cmp	%[a], r7\n\t"
9822         "ble	L_sp_2048_sqr_8_mul_%=\n\t"
9823         "\n"
9824     "L_sp_2048_sqr_8_done_mul_%=:\n\t"
9825         "mov	%[r], r10\n\t"
9826         "mov	r7, r8\n\t"
9827         "str	r3, [%[r], r7]\n\t"
9828         "movs	r3, r4\n\t"
9829         "movs	r4, r5\n\t"
9830         "movs	r5, #0\n\t"
9831 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9832         "adds	r7, r7, #4\n\t"
9833 #else
9834         "add	r7, r7, #4\n\t"
9835 #endif
9836         "mov	r8, r7\n\t"
9837         "movs	r6, #56\n\t"
9838         "cmp	r7, r6\n\t"
9839         "ble	L_sp_2048_sqr_8_words_%=\n\t"
9840         "mov	%[a], r9\n\t"
9841         "str	r3, [%[r], r7]\n\t"
9842         "mov	%[r], r11\n\t"
9843         "mov	%[a], r10\n\t"
9844         "movs	r3, #60\n\t"
9845         "\n"
9846     "L_sp_2048_sqr_8_store_%=:\n\t"
9847         "ldr	r6, [%[a], r3]\n\t"
9848         "str	r6, [%[r], r3]\n\t"
9849 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9850         "subs	r3, r3, #4\n\t"
9851 #else
9852         "sub	r3, r3, #4\n\t"
9853 #endif
9854         "bge	L_sp_2048_sqr_8_store_%=\n\t"
9855         "movs	r6, #0x40\n\t"
9856         "add	sp, sp, r6\n\t"
9857         : [r] "+r" (r), [a] "+r" (a)
9858         :
9859         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
9860     );
9861 }
9862 
9863 #else
9864 /* Square a and put result in r. (r = a * a)
9865  *
9866  * r  A single precision integer.
9867  * a  A single precision integer.
9868  */
sp_2048_sqr_8(sp_digit * r,const sp_digit * a)9869 SP_NOINLINE static void sp_2048_sqr_8(sp_digit* r, const sp_digit* a)
9870 {
9871     __asm__ __volatile__ (
9872         "sub	sp, sp, #32\n\t"
9873         "mov	r8, %[r]\n\t"
9874         "mov	r9, %[a]\n\t"
9875         "movs	%[r], #0\n\t"
9876         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
9877         "mov	r10, r2\n\t"
9878         "mov	r11, r3\n\t"
9879         "mov	r12, r4\n\t"
9880         "mov	lr, r5\n\t"
9881         "mov	%[a], r9\n\t"
9882         "#  A[0] * A[0]\n\t"
9883         "movs	r4, #0\n\t"
9884         "mov	r7, r10\n\t"
9885 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9886         "lsrs	r6, r7, #16\n\t"
9887 #else
9888         "lsr	r6, r7, #16\n\t"
9889 #endif
9890         "uxth	r5, r7\n\t"
9891         "movs	r2, r5\n\t"
9892         "movs	r3, r6\n\t"
9893 #ifdef WOLFSSL_KEIL
9894         "muls	r2, r2, r2\n\t"
9895 #elif defined(__clang__)
9896         "muls	r2, r2\n\t"
9897 #else
9898         "mul	r2, r2\n\t"
9899 #endif
9900 #ifdef WOLFSSL_KEIL
9901         "muls	r3, r3, r3\n\t"
9902 #elif defined(__clang__)
9903         "muls	r3, r3\n\t"
9904 #else
9905         "mul	r3, r3\n\t"
9906 #endif
9907 #ifdef WOLFSSL_KEIL
9908         "muls	r5, r6, r5\n\t"
9909 #elif defined(__clang__)
9910         "muls	r5, r6\n\t"
9911 #else
9912         "mul	r5, r6\n\t"
9913 #endif
9914 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9915         "lsrs	r6, r5, #15\n\t"
9916 #else
9917         "lsr	r6, r5, #15\n\t"
9918 #endif
9919 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9920         "lsls	r5, r5, #17\n\t"
9921 #else
9922         "lsl	r5, r5, #17\n\t"
9923 #endif
9924 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9925         "adds	r2, r2, r5\n\t"
9926 #else
9927         "add	r2, r2, r5\n\t"
9928 #endif
9929 #ifdef WOLFSSL_KEIL
9930         "adcs	r3, r3, r6\n\t"
9931 #elif defined(__clang__)
9932         "adcs	r3, r6\n\t"
9933 #else
9934         "adc	r3, r6\n\t"
9935 #endif
9936         "str	r2, [sp]\n\t"
9937         "#  A[1] * A[0]\n\t"
9938         "movs	r2, #0\n\t"
9939         "mov	%[a], r11\n\t"
9940         "uxth	r5, %[a]\n\t"
9941         "uxth	r6, r7\n\t"
9942 #ifdef WOLFSSL_KEIL
9943         "muls	r6, r5, r6\n\t"
9944 #elif defined(__clang__)
9945         "muls	r6, r5\n\t"
9946 #else
9947         "mul	r6, r5\n\t"
9948 #endif
9949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9950         "adds	r3, r3, r6\n\t"
9951 #else
9952         "add	r3, r3, r6\n\t"
9953 #endif
9954 #ifdef WOLFSSL_KEIL
9955         "adcs	r4, r4, %[r]\n\t"
9956 #elif defined(__clang__)
9957         "adcs	r4, %[r]\n\t"
9958 #else
9959         "adc	r4, %[r]\n\t"
9960 #endif
9961 #ifdef WOLFSSL_KEIL
9962         "adcs	r2, r2, %[r]\n\t"
9963 #elif defined(__clang__)
9964         "adcs	r2, %[r]\n\t"
9965 #else
9966         "adc	r2, %[r]\n\t"
9967 #endif
9968 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9969         "adds	r3, r3, r6\n\t"
9970 #else
9971         "add	r3, r3, r6\n\t"
9972 #endif
9973 #ifdef WOLFSSL_KEIL
9974         "adcs	r4, r4, %[r]\n\t"
9975 #elif defined(__clang__)
9976         "adcs	r4, %[r]\n\t"
9977 #else
9978         "adc	r4, %[r]\n\t"
9979 #endif
9980 #ifdef WOLFSSL_KEIL
9981         "adcs	r2, r2, %[r]\n\t"
9982 #elif defined(__clang__)
9983         "adcs	r2, %[r]\n\t"
9984 #else
9985         "adc	r2, %[r]\n\t"
9986 #endif
9987 #if defined(__clang__) || defined(WOLFSSL_KEIL)
9988         "lsrs	r6, r7, #16\n\t"
9989 #else
9990         "lsr	r6, r7, #16\n\t"
9991 #endif
9992 #ifdef WOLFSSL_KEIL
9993         "muls	r5, r6, r5\n\t"
9994 #elif defined(__clang__)
9995         "muls	r5, r6\n\t"
9996 #else
9997         "mul	r5, r6\n\t"
9998 #endif
9999 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10000         "lsrs	r6, r5, #16\n\t"
10001 #else
10002         "lsr	r6, r5, #16\n\t"
10003 #endif
10004 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10005         "lsls	r5, r5, #16\n\t"
10006 #else
10007         "lsl	r5, r5, #16\n\t"
10008 #endif
10009 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10010         "adds	r3, r3, r5\n\t"
10011 #else
10012         "add	r3, r3, r5\n\t"
10013 #endif
10014 #ifdef WOLFSSL_KEIL
10015         "adcs	r4, r4, r6\n\t"
10016 #elif defined(__clang__)
10017         "adcs	r4, r6\n\t"
10018 #else
10019         "adc	r4, r6\n\t"
10020 #endif
10021 #ifdef WOLFSSL_KEIL
10022         "adcs	r2, r2, %[r]\n\t"
10023 #elif defined(__clang__)
10024         "adcs	r2, %[r]\n\t"
10025 #else
10026         "adc	r2, %[r]\n\t"
10027 #endif
10028 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10029         "adds	r3, r3, r5\n\t"
10030 #else
10031         "add	r3, r3, r5\n\t"
10032 #endif
10033 #ifdef WOLFSSL_KEIL
10034         "adcs	r4, r4, r6\n\t"
10035 #elif defined(__clang__)
10036         "adcs	r4, r6\n\t"
10037 #else
10038         "adc	r4, r6\n\t"
10039 #endif
10040 #ifdef WOLFSSL_KEIL
10041         "adcs	r2, r2, %[r]\n\t"
10042 #elif defined(__clang__)
10043         "adcs	r2, %[r]\n\t"
10044 #else
10045         "adc	r2, %[r]\n\t"
10046 #endif
10047 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10048         "lsrs	r5, %[a], #16\n\t"
10049 #else
10050         "lsr	r5, %[a], #16\n\t"
10051 #endif
10052 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10053         "lsrs	r6, r7, #16\n\t"
10054 #else
10055         "lsr	r6, r7, #16\n\t"
10056 #endif
10057 #ifdef WOLFSSL_KEIL
10058         "muls	r6, r5, r6\n\t"
10059 #elif defined(__clang__)
10060         "muls	r6, r5\n\t"
10061 #else
10062         "mul	r6, r5\n\t"
10063 #endif
10064 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10065         "adds	r4, r4, r6\n\t"
10066 #else
10067         "add	r4, r4, r6\n\t"
10068 #endif
10069 #ifdef WOLFSSL_KEIL
10070         "adcs	r2, r2, %[r]\n\t"
10071 #elif defined(__clang__)
10072         "adcs	r2, %[r]\n\t"
10073 #else
10074         "adc	r2, %[r]\n\t"
10075 #endif
10076 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10077         "adds	r4, r4, r6\n\t"
10078 #else
10079         "add	r4, r4, r6\n\t"
10080 #endif
10081 #ifdef WOLFSSL_KEIL
10082         "adcs	r2, r2, %[r]\n\t"
10083 #elif defined(__clang__)
10084         "adcs	r2, %[r]\n\t"
10085 #else
10086         "adc	r2, %[r]\n\t"
10087 #endif
10088         "uxth	r6, r7\n\t"
10089 #ifdef WOLFSSL_KEIL
10090         "muls	r5, r6, r5\n\t"
10091 #elif defined(__clang__)
10092         "muls	r5, r6\n\t"
10093 #else
10094         "mul	r5, r6\n\t"
10095 #endif
10096 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10097         "lsrs	r6, r5, #16\n\t"
10098 #else
10099         "lsr	r6, r5, #16\n\t"
10100 #endif
10101 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10102         "lsls	r5, r5, #16\n\t"
10103 #else
10104         "lsl	r5, r5, #16\n\t"
10105 #endif
10106 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10107         "adds	r3, r3, r5\n\t"
10108 #else
10109         "add	r3, r3, r5\n\t"
10110 #endif
10111 #ifdef WOLFSSL_KEIL
10112         "adcs	r4, r4, r6\n\t"
10113 #elif defined(__clang__)
10114         "adcs	r4, r6\n\t"
10115 #else
10116         "adc	r4, r6\n\t"
10117 #endif
10118 #ifdef WOLFSSL_KEIL
10119         "adcs	r2, r2, %[r]\n\t"
10120 #elif defined(__clang__)
10121         "adcs	r2, %[r]\n\t"
10122 #else
10123         "adc	r2, %[r]\n\t"
10124 #endif
10125 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10126         "adds	r3, r3, r5\n\t"
10127 #else
10128         "add	r3, r3, r5\n\t"
10129 #endif
10130 #ifdef WOLFSSL_KEIL
10131         "adcs	r4, r4, r6\n\t"
10132 #elif defined(__clang__)
10133         "adcs	r4, r6\n\t"
10134 #else
10135         "adc	r4, r6\n\t"
10136 #endif
10137 #ifdef WOLFSSL_KEIL
10138         "adcs	r2, r2, %[r]\n\t"
10139 #elif defined(__clang__)
10140         "adcs	r2, %[r]\n\t"
10141 #else
10142         "adc	r2, %[r]\n\t"
10143 #endif
10144         "str	r3, [sp, #4]\n\t"
10145         "#  A[2] * A[0]\n\t"
10146         "movs	r3, #0\n\t"
10147         "mov	%[a], r9\n\t"
10148         "mov	%[a], r12\n\t"
10149         "uxth	r5, %[a]\n\t"
10150         "uxth	r6, r7\n\t"
10151 #ifdef WOLFSSL_KEIL
10152         "muls	r6, r5, r6\n\t"
10153 #elif defined(__clang__)
10154         "muls	r6, r5\n\t"
10155 #else
10156         "mul	r6, r5\n\t"
10157 #endif
10158 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10159         "adds	r4, r4, r6\n\t"
10160 #else
10161         "add	r4, r4, r6\n\t"
10162 #endif
10163 #ifdef WOLFSSL_KEIL
10164         "adcs	r2, r2, %[r]\n\t"
10165 #elif defined(__clang__)
10166         "adcs	r2, %[r]\n\t"
10167 #else
10168         "adc	r2, %[r]\n\t"
10169 #endif
10170 #ifdef WOLFSSL_KEIL
10171         "adcs	r3, r3, %[r]\n\t"
10172 #elif defined(__clang__)
10173         "adcs	r3, %[r]\n\t"
10174 #else
10175         "adc	r3, %[r]\n\t"
10176 #endif
10177 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10178         "adds	r4, r4, r6\n\t"
10179 #else
10180         "add	r4, r4, r6\n\t"
10181 #endif
10182 #ifdef WOLFSSL_KEIL
10183         "adcs	r2, r2, %[r]\n\t"
10184 #elif defined(__clang__)
10185         "adcs	r2, %[r]\n\t"
10186 #else
10187         "adc	r2, %[r]\n\t"
10188 #endif
10189 #ifdef WOLFSSL_KEIL
10190         "adcs	r3, r3, %[r]\n\t"
10191 #elif defined(__clang__)
10192         "adcs	r3, %[r]\n\t"
10193 #else
10194         "adc	r3, %[r]\n\t"
10195 #endif
10196 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10197         "lsrs	r6, r7, #16\n\t"
10198 #else
10199         "lsr	r6, r7, #16\n\t"
10200 #endif
10201 #ifdef WOLFSSL_KEIL
10202         "muls	r5, r6, r5\n\t"
10203 #elif defined(__clang__)
10204         "muls	r5, r6\n\t"
10205 #else
10206         "mul	r5, r6\n\t"
10207 #endif
10208 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10209         "lsrs	r6, r5, #16\n\t"
10210 #else
10211         "lsr	r6, r5, #16\n\t"
10212 #endif
10213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10214         "lsls	r5, r5, #16\n\t"
10215 #else
10216         "lsl	r5, r5, #16\n\t"
10217 #endif
10218 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10219         "adds	r4, r4, r5\n\t"
10220 #else
10221         "add	r4, r4, r5\n\t"
10222 #endif
10223 #ifdef WOLFSSL_KEIL
10224         "adcs	r2, r2, r6\n\t"
10225 #elif defined(__clang__)
10226         "adcs	r2, r6\n\t"
10227 #else
10228         "adc	r2, r6\n\t"
10229 #endif
10230 #ifdef WOLFSSL_KEIL
10231         "adcs	r3, r3, %[r]\n\t"
10232 #elif defined(__clang__)
10233         "adcs	r3, %[r]\n\t"
10234 #else
10235         "adc	r3, %[r]\n\t"
10236 #endif
10237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10238         "adds	r4, r4, r5\n\t"
10239 #else
10240         "add	r4, r4, r5\n\t"
10241 #endif
10242 #ifdef WOLFSSL_KEIL
10243         "adcs	r2, r2, r6\n\t"
10244 #elif defined(__clang__)
10245         "adcs	r2, r6\n\t"
10246 #else
10247         "adc	r2, r6\n\t"
10248 #endif
10249 #ifdef WOLFSSL_KEIL
10250         "adcs	r3, r3, %[r]\n\t"
10251 #elif defined(__clang__)
10252         "adcs	r3, %[r]\n\t"
10253 #else
10254         "adc	r3, %[r]\n\t"
10255 #endif
10256 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10257         "lsrs	r5, %[a], #16\n\t"
10258 #else
10259         "lsr	r5, %[a], #16\n\t"
10260 #endif
10261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10262         "lsrs	r6, r7, #16\n\t"
10263 #else
10264         "lsr	r6, r7, #16\n\t"
10265 #endif
10266 #ifdef WOLFSSL_KEIL
10267         "muls	r6, r5, r6\n\t"
10268 #elif defined(__clang__)
10269         "muls	r6, r5\n\t"
10270 #else
10271         "mul	r6, r5\n\t"
10272 #endif
10273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10274         "adds	r2, r2, r6\n\t"
10275 #else
10276         "add	r2, r2, r6\n\t"
10277 #endif
10278 #ifdef WOLFSSL_KEIL
10279         "adcs	r3, r3, %[r]\n\t"
10280 #elif defined(__clang__)
10281         "adcs	r3, %[r]\n\t"
10282 #else
10283         "adc	r3, %[r]\n\t"
10284 #endif
10285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10286         "adds	r2, r2, r6\n\t"
10287 #else
10288         "add	r2, r2, r6\n\t"
10289 #endif
10290 #ifdef WOLFSSL_KEIL
10291         "adcs	r3, r3, %[r]\n\t"
10292 #elif defined(__clang__)
10293         "adcs	r3, %[r]\n\t"
10294 #else
10295         "adc	r3, %[r]\n\t"
10296 #endif
10297         "uxth	r6, r7\n\t"
10298 #ifdef WOLFSSL_KEIL
10299         "muls	r5, r6, r5\n\t"
10300 #elif defined(__clang__)
10301         "muls	r5, r6\n\t"
10302 #else
10303         "mul	r5, r6\n\t"
10304 #endif
10305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10306         "lsrs	r6, r5, #16\n\t"
10307 #else
10308         "lsr	r6, r5, #16\n\t"
10309 #endif
10310 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10311         "lsls	r5, r5, #16\n\t"
10312 #else
10313         "lsl	r5, r5, #16\n\t"
10314 #endif
10315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10316         "adds	r4, r4, r5\n\t"
10317 #else
10318         "add	r4, r4, r5\n\t"
10319 #endif
10320 #ifdef WOLFSSL_KEIL
10321         "adcs	r2, r2, r6\n\t"
10322 #elif defined(__clang__)
10323         "adcs	r2, r6\n\t"
10324 #else
10325         "adc	r2, r6\n\t"
10326 #endif
10327 #ifdef WOLFSSL_KEIL
10328         "adcs	r3, r3, %[r]\n\t"
10329 #elif defined(__clang__)
10330         "adcs	r3, %[r]\n\t"
10331 #else
10332         "adc	r3, %[r]\n\t"
10333 #endif
10334 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10335         "adds	r4, r4, r5\n\t"
10336 #else
10337         "add	r4, r4, r5\n\t"
10338 #endif
10339 #ifdef WOLFSSL_KEIL
10340         "adcs	r2, r2, r6\n\t"
10341 #elif defined(__clang__)
10342         "adcs	r2, r6\n\t"
10343 #else
10344         "adc	r2, r6\n\t"
10345 #endif
10346 #ifdef WOLFSSL_KEIL
10347         "adcs	r3, r3, %[r]\n\t"
10348 #elif defined(__clang__)
10349         "adcs	r3, %[r]\n\t"
10350 #else
10351         "adc	r3, %[r]\n\t"
10352 #endif
10353         "#  A[1] * A[1]\n\t"
10354         "mov	r7, r11\n\t"
10355 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10356         "lsrs	r6, r7, #16\n\t"
10357 #else
10358         "lsr	r6, r7, #16\n\t"
10359 #endif
10360         "uxth	r5, r7\n\t"
10361 #ifdef WOLFSSL_KEIL
10362         "muls	r5, r5, r5\n\t"
10363 #elif defined(__clang__)
10364         "muls	r5, r5\n\t"
10365 #else
10366         "mul	r5, r5\n\t"
10367 #endif
10368 #ifdef WOLFSSL_KEIL
10369         "muls	r6, r6, r6\n\t"
10370 #elif defined(__clang__)
10371         "muls	r6, r6\n\t"
10372 #else
10373         "mul	r6, r6\n\t"
10374 #endif
10375 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10376         "adds	r4, r4, r5\n\t"
10377 #else
10378         "add	r4, r4, r5\n\t"
10379 #endif
10380 #ifdef WOLFSSL_KEIL
10381         "adcs	r2, r2, r6\n\t"
10382 #elif defined(__clang__)
10383         "adcs	r2, r6\n\t"
10384 #else
10385         "adc	r2, r6\n\t"
10386 #endif
10387 #ifdef WOLFSSL_KEIL
10388         "adcs	r3, r3, %[r]\n\t"
10389 #elif defined(__clang__)
10390         "adcs	r3, %[r]\n\t"
10391 #else
10392         "adc	r3, %[r]\n\t"
10393 #endif
10394 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10395         "lsrs	r6, r7, #16\n\t"
10396 #else
10397         "lsr	r6, r7, #16\n\t"
10398 #endif
10399         "uxth	r5, r7\n\t"
10400 #ifdef WOLFSSL_KEIL
10401         "muls	r5, r6, r5\n\t"
10402 #elif defined(__clang__)
10403         "muls	r5, r6\n\t"
10404 #else
10405         "mul	r5, r6\n\t"
10406 #endif
10407 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10408         "lsrs	r6, r5, #15\n\t"
10409 #else
10410         "lsr	r6, r5, #15\n\t"
10411 #endif
10412 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10413         "lsls	r5, r5, #17\n\t"
10414 #else
10415         "lsl	r5, r5, #17\n\t"
10416 #endif
10417 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10418         "adds	r4, r4, r5\n\t"
10419 #else
10420         "add	r4, r4, r5\n\t"
10421 #endif
10422 #ifdef WOLFSSL_KEIL
10423         "adcs	r2, r2, r6\n\t"
10424 #elif defined(__clang__)
10425         "adcs	r2, r6\n\t"
10426 #else
10427         "adc	r2, r6\n\t"
10428 #endif
10429 #ifdef WOLFSSL_KEIL
10430         "adcs	r3, r3, %[r]\n\t"
10431 #elif defined(__clang__)
10432         "adcs	r3, %[r]\n\t"
10433 #else
10434         "adc	r3, %[r]\n\t"
10435 #endif
10436         "str	r4, [sp, #8]\n\t"
10437         "#  A[2] * A[1]\n\t"
10438         "movs	r4, #0\n\t"
10439         "mov	%[a], r9\n\t"
10440         "mov	%[a], r12\n\t"
10441         "uxth	r5, %[a]\n\t"
10442         "uxth	r6, r7\n\t"
10443 #ifdef WOLFSSL_KEIL
10444         "muls	r6, r5, r6\n\t"
10445 #elif defined(__clang__)
10446         "muls	r6, r5\n\t"
10447 #else
10448         "mul	r6, r5\n\t"
10449 #endif
10450 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10451         "adds	r2, r2, r6\n\t"
10452 #else
10453         "add	r2, r2, r6\n\t"
10454 #endif
10455 #ifdef WOLFSSL_KEIL
10456         "adcs	r3, r3, %[r]\n\t"
10457 #elif defined(__clang__)
10458         "adcs	r3, %[r]\n\t"
10459 #else
10460         "adc	r3, %[r]\n\t"
10461 #endif
10462 #ifdef WOLFSSL_KEIL
10463         "adcs	r4, r4, %[r]\n\t"
10464 #elif defined(__clang__)
10465         "adcs	r4, %[r]\n\t"
10466 #else
10467         "adc	r4, %[r]\n\t"
10468 #endif
10469 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10470         "adds	r2, r2, r6\n\t"
10471 #else
10472         "add	r2, r2, r6\n\t"
10473 #endif
10474 #ifdef WOLFSSL_KEIL
10475         "adcs	r3, r3, %[r]\n\t"
10476 #elif defined(__clang__)
10477         "adcs	r3, %[r]\n\t"
10478 #else
10479         "adc	r3, %[r]\n\t"
10480 #endif
10481 #ifdef WOLFSSL_KEIL
10482         "adcs	r4, r4, %[r]\n\t"
10483 #elif defined(__clang__)
10484         "adcs	r4, %[r]\n\t"
10485 #else
10486         "adc	r4, %[r]\n\t"
10487 #endif
10488 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10489         "lsrs	r6, r7, #16\n\t"
10490 #else
10491         "lsr	r6, r7, #16\n\t"
10492 #endif
10493 #ifdef WOLFSSL_KEIL
10494         "muls	r5, r6, r5\n\t"
10495 #elif defined(__clang__)
10496         "muls	r5, r6\n\t"
10497 #else
10498         "mul	r5, r6\n\t"
10499 #endif
10500 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10501         "lsrs	r6, r5, #16\n\t"
10502 #else
10503         "lsr	r6, r5, #16\n\t"
10504 #endif
10505 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10506         "lsls	r5, r5, #16\n\t"
10507 #else
10508         "lsl	r5, r5, #16\n\t"
10509 #endif
10510 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10511         "adds	r2, r2, r5\n\t"
10512 #else
10513         "add	r2, r2, r5\n\t"
10514 #endif
10515 #ifdef WOLFSSL_KEIL
10516         "adcs	r3, r3, r6\n\t"
10517 #elif defined(__clang__)
10518         "adcs	r3, r6\n\t"
10519 #else
10520         "adc	r3, r6\n\t"
10521 #endif
10522 #ifdef WOLFSSL_KEIL
10523         "adcs	r4, r4, %[r]\n\t"
10524 #elif defined(__clang__)
10525         "adcs	r4, %[r]\n\t"
10526 #else
10527         "adc	r4, %[r]\n\t"
10528 #endif
10529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10530         "adds	r2, r2, r5\n\t"
10531 #else
10532         "add	r2, r2, r5\n\t"
10533 #endif
10534 #ifdef WOLFSSL_KEIL
10535         "adcs	r3, r3, r6\n\t"
10536 #elif defined(__clang__)
10537         "adcs	r3, r6\n\t"
10538 #else
10539         "adc	r3, r6\n\t"
10540 #endif
10541 #ifdef WOLFSSL_KEIL
10542         "adcs	r4, r4, %[r]\n\t"
10543 #elif defined(__clang__)
10544         "adcs	r4, %[r]\n\t"
10545 #else
10546         "adc	r4, %[r]\n\t"
10547 #endif
10548 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10549         "lsrs	r5, %[a], #16\n\t"
10550 #else
10551         "lsr	r5, %[a], #16\n\t"
10552 #endif
10553 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10554         "lsrs	r6, r7, #16\n\t"
10555 #else
10556         "lsr	r6, r7, #16\n\t"
10557 #endif
10558 #ifdef WOLFSSL_KEIL
10559         "muls	r6, r5, r6\n\t"
10560 #elif defined(__clang__)
10561         "muls	r6, r5\n\t"
10562 #else
10563         "mul	r6, r5\n\t"
10564 #endif
10565 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10566         "adds	r3, r3, r6\n\t"
10567 #else
10568         "add	r3, r3, r6\n\t"
10569 #endif
10570 #ifdef WOLFSSL_KEIL
10571         "adcs	r4, r4, %[r]\n\t"
10572 #elif defined(__clang__)
10573         "adcs	r4, %[r]\n\t"
10574 #else
10575         "adc	r4, %[r]\n\t"
10576 #endif
10577 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10578         "adds	r3, r3, r6\n\t"
10579 #else
10580         "add	r3, r3, r6\n\t"
10581 #endif
10582 #ifdef WOLFSSL_KEIL
10583         "adcs	r4, r4, %[r]\n\t"
10584 #elif defined(__clang__)
10585         "adcs	r4, %[r]\n\t"
10586 #else
10587         "adc	r4, %[r]\n\t"
10588 #endif
10589         "uxth	r6, r7\n\t"
10590 #ifdef WOLFSSL_KEIL
10591         "muls	r5, r6, r5\n\t"
10592 #elif defined(__clang__)
10593         "muls	r5, r6\n\t"
10594 #else
10595         "mul	r5, r6\n\t"
10596 #endif
10597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10598         "lsrs	r6, r5, #16\n\t"
10599 #else
10600         "lsr	r6, r5, #16\n\t"
10601 #endif
10602 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10603         "lsls	r5, r5, #16\n\t"
10604 #else
10605         "lsl	r5, r5, #16\n\t"
10606 #endif
10607 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10608         "adds	r2, r2, r5\n\t"
10609 #else
10610         "add	r2, r2, r5\n\t"
10611 #endif
10612 #ifdef WOLFSSL_KEIL
10613         "adcs	r3, r3, r6\n\t"
10614 #elif defined(__clang__)
10615         "adcs	r3, r6\n\t"
10616 #else
10617         "adc	r3, r6\n\t"
10618 #endif
10619 #ifdef WOLFSSL_KEIL
10620         "adcs	r4, r4, %[r]\n\t"
10621 #elif defined(__clang__)
10622         "adcs	r4, %[r]\n\t"
10623 #else
10624         "adc	r4, %[r]\n\t"
10625 #endif
10626 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10627         "adds	r2, r2, r5\n\t"
10628 #else
10629         "add	r2, r2, r5\n\t"
10630 #endif
10631 #ifdef WOLFSSL_KEIL
10632         "adcs	r3, r3, r6\n\t"
10633 #elif defined(__clang__)
10634         "adcs	r3, r6\n\t"
10635 #else
10636         "adc	r3, r6\n\t"
10637 #endif
10638 #ifdef WOLFSSL_KEIL
10639         "adcs	r4, r4, %[r]\n\t"
10640 #elif defined(__clang__)
10641         "adcs	r4, %[r]\n\t"
10642 #else
10643         "adc	r4, %[r]\n\t"
10644 #endif
10645         "#  A[3] * A[0]\n\t"
10646         "mov	%[a], r9\n\t"
10647         "mov	r7, r10\n\t"
10648         "mov	%[a], lr\n\t"
10649         "uxth	r5, %[a]\n\t"
10650         "uxth	r6, r7\n\t"
10651 #ifdef WOLFSSL_KEIL
10652         "muls	r6, r5, r6\n\t"
10653 #elif defined(__clang__)
10654         "muls	r6, r5\n\t"
10655 #else
10656         "mul	r6, r5\n\t"
10657 #endif
10658 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10659         "adds	r2, r2, r6\n\t"
10660 #else
10661         "add	r2, r2, r6\n\t"
10662 #endif
10663 #ifdef WOLFSSL_KEIL
10664         "adcs	r3, r3, %[r]\n\t"
10665 #elif defined(__clang__)
10666         "adcs	r3, %[r]\n\t"
10667 #else
10668         "adc	r3, %[r]\n\t"
10669 #endif
10670 #ifdef WOLFSSL_KEIL
10671         "adcs	r4, r4, %[r]\n\t"
10672 #elif defined(__clang__)
10673         "adcs	r4, %[r]\n\t"
10674 #else
10675         "adc	r4, %[r]\n\t"
10676 #endif
10677 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10678         "adds	r2, r2, r6\n\t"
10679 #else
10680         "add	r2, r2, r6\n\t"
10681 #endif
10682 #ifdef WOLFSSL_KEIL
10683         "adcs	r3, r3, %[r]\n\t"
10684 #elif defined(__clang__)
10685         "adcs	r3, %[r]\n\t"
10686 #else
10687         "adc	r3, %[r]\n\t"
10688 #endif
10689 #ifdef WOLFSSL_KEIL
10690         "adcs	r4, r4, %[r]\n\t"
10691 #elif defined(__clang__)
10692         "adcs	r4, %[r]\n\t"
10693 #else
10694         "adc	r4, %[r]\n\t"
10695 #endif
10696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10697         "lsrs	r6, r7, #16\n\t"
10698 #else
10699         "lsr	r6, r7, #16\n\t"
10700 #endif
10701 #ifdef WOLFSSL_KEIL
10702         "muls	r5, r6, r5\n\t"
10703 #elif defined(__clang__)
10704         "muls	r5, r6\n\t"
10705 #else
10706         "mul	r5, r6\n\t"
10707 #endif
10708 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10709         "lsrs	r6, r5, #16\n\t"
10710 #else
10711         "lsr	r6, r5, #16\n\t"
10712 #endif
10713 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10714         "lsls	r5, r5, #16\n\t"
10715 #else
10716         "lsl	r5, r5, #16\n\t"
10717 #endif
10718 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10719         "adds	r2, r2, r5\n\t"
10720 #else
10721         "add	r2, r2, r5\n\t"
10722 #endif
10723 #ifdef WOLFSSL_KEIL
10724         "adcs	r3, r3, r6\n\t"
10725 #elif defined(__clang__)
10726         "adcs	r3, r6\n\t"
10727 #else
10728         "adc	r3, r6\n\t"
10729 #endif
10730 #ifdef WOLFSSL_KEIL
10731         "adcs	r4, r4, %[r]\n\t"
10732 #elif defined(__clang__)
10733         "adcs	r4, %[r]\n\t"
10734 #else
10735         "adc	r4, %[r]\n\t"
10736 #endif
10737 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10738         "adds	r2, r2, r5\n\t"
10739 #else
10740         "add	r2, r2, r5\n\t"
10741 #endif
10742 #ifdef WOLFSSL_KEIL
10743         "adcs	r3, r3, r6\n\t"
10744 #elif defined(__clang__)
10745         "adcs	r3, r6\n\t"
10746 #else
10747         "adc	r3, r6\n\t"
10748 #endif
10749 #ifdef WOLFSSL_KEIL
10750         "adcs	r4, r4, %[r]\n\t"
10751 #elif defined(__clang__)
10752         "adcs	r4, %[r]\n\t"
10753 #else
10754         "adc	r4, %[r]\n\t"
10755 #endif
10756 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10757         "lsrs	r5, %[a], #16\n\t"
10758 #else
10759         "lsr	r5, %[a], #16\n\t"
10760 #endif
10761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10762         "lsrs	r6, r7, #16\n\t"
10763 #else
10764         "lsr	r6, r7, #16\n\t"
10765 #endif
10766 #ifdef WOLFSSL_KEIL
10767         "muls	r6, r5, r6\n\t"
10768 #elif defined(__clang__)
10769         "muls	r6, r5\n\t"
10770 #else
10771         "mul	r6, r5\n\t"
10772 #endif
10773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10774         "adds	r3, r3, r6\n\t"
10775 #else
10776         "add	r3, r3, r6\n\t"
10777 #endif
10778 #ifdef WOLFSSL_KEIL
10779         "adcs	r4, r4, %[r]\n\t"
10780 #elif defined(__clang__)
10781         "adcs	r4, %[r]\n\t"
10782 #else
10783         "adc	r4, %[r]\n\t"
10784 #endif
10785 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10786         "adds	r3, r3, r6\n\t"
10787 #else
10788         "add	r3, r3, r6\n\t"
10789 #endif
10790 #ifdef WOLFSSL_KEIL
10791         "adcs	r4, r4, %[r]\n\t"
10792 #elif defined(__clang__)
10793         "adcs	r4, %[r]\n\t"
10794 #else
10795         "adc	r4, %[r]\n\t"
10796 #endif
10797         "uxth	r6, r7\n\t"
10798 #ifdef WOLFSSL_KEIL
10799         "muls	r5, r6, r5\n\t"
10800 #elif defined(__clang__)
10801         "muls	r5, r6\n\t"
10802 #else
10803         "mul	r5, r6\n\t"
10804 #endif
10805 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10806         "lsrs	r6, r5, #16\n\t"
10807 #else
10808         "lsr	r6, r5, #16\n\t"
10809 #endif
10810 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10811         "lsls	r5, r5, #16\n\t"
10812 #else
10813         "lsl	r5, r5, #16\n\t"
10814 #endif
10815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10816         "adds	r2, r2, r5\n\t"
10817 #else
10818         "add	r2, r2, r5\n\t"
10819 #endif
10820 #ifdef WOLFSSL_KEIL
10821         "adcs	r3, r3, r6\n\t"
10822 #elif defined(__clang__)
10823         "adcs	r3, r6\n\t"
10824 #else
10825         "adc	r3, r6\n\t"
10826 #endif
10827 #ifdef WOLFSSL_KEIL
10828         "adcs	r4, r4, %[r]\n\t"
10829 #elif defined(__clang__)
10830         "adcs	r4, %[r]\n\t"
10831 #else
10832         "adc	r4, %[r]\n\t"
10833 #endif
10834 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10835         "adds	r2, r2, r5\n\t"
10836 #else
10837         "add	r2, r2, r5\n\t"
10838 #endif
10839 #ifdef WOLFSSL_KEIL
10840         "adcs	r3, r3, r6\n\t"
10841 #elif defined(__clang__)
10842         "adcs	r3, r6\n\t"
10843 #else
10844         "adc	r3, r6\n\t"
10845 #endif
10846 #ifdef WOLFSSL_KEIL
10847         "adcs	r4, r4, %[r]\n\t"
10848 #elif defined(__clang__)
10849         "adcs	r4, %[r]\n\t"
10850 #else
10851         "adc	r4, %[r]\n\t"
10852 #endif
10853         "str	r2, [sp, #12]\n\t"
10854         "#  A[4] * A[0]\n\t"
10855         "movs	r2, #0\n\t"
10856         "mov	%[a], r9\n\t"
10857         "ldr	%[a], [%[a], #16]\n\t"
10858         "uxth	r5, %[a]\n\t"
10859         "uxth	r6, r7\n\t"
10860 #ifdef WOLFSSL_KEIL
10861         "muls	r6, r5, r6\n\t"
10862 #elif defined(__clang__)
10863         "muls	r6, r5\n\t"
10864 #else
10865         "mul	r6, r5\n\t"
10866 #endif
10867 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10868         "adds	r3, r3, r6\n\t"
10869 #else
10870         "add	r3, r3, r6\n\t"
10871 #endif
10872 #ifdef WOLFSSL_KEIL
10873         "adcs	r4, r4, %[r]\n\t"
10874 #elif defined(__clang__)
10875         "adcs	r4, %[r]\n\t"
10876 #else
10877         "adc	r4, %[r]\n\t"
10878 #endif
10879 #ifdef WOLFSSL_KEIL
10880         "adcs	r2, r2, %[r]\n\t"
10881 #elif defined(__clang__)
10882         "adcs	r2, %[r]\n\t"
10883 #else
10884         "adc	r2, %[r]\n\t"
10885 #endif
10886 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10887         "adds	r3, r3, r6\n\t"
10888 #else
10889         "add	r3, r3, r6\n\t"
10890 #endif
10891 #ifdef WOLFSSL_KEIL
10892         "adcs	r4, r4, %[r]\n\t"
10893 #elif defined(__clang__)
10894         "adcs	r4, %[r]\n\t"
10895 #else
10896         "adc	r4, %[r]\n\t"
10897 #endif
10898 #ifdef WOLFSSL_KEIL
10899         "adcs	r2, r2, %[r]\n\t"
10900 #elif defined(__clang__)
10901         "adcs	r2, %[r]\n\t"
10902 #else
10903         "adc	r2, %[r]\n\t"
10904 #endif
10905 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10906         "lsrs	r6, r7, #16\n\t"
10907 #else
10908         "lsr	r6, r7, #16\n\t"
10909 #endif
10910 #ifdef WOLFSSL_KEIL
10911         "muls	r5, r6, r5\n\t"
10912 #elif defined(__clang__)
10913         "muls	r5, r6\n\t"
10914 #else
10915         "mul	r5, r6\n\t"
10916 #endif
10917 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10918         "lsrs	r6, r5, #16\n\t"
10919 #else
10920         "lsr	r6, r5, #16\n\t"
10921 #endif
10922 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10923         "lsls	r5, r5, #16\n\t"
10924 #else
10925         "lsl	r5, r5, #16\n\t"
10926 #endif
10927 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10928         "adds	r3, r3, r5\n\t"
10929 #else
10930         "add	r3, r3, r5\n\t"
10931 #endif
10932 #ifdef WOLFSSL_KEIL
10933         "adcs	r4, r4, r6\n\t"
10934 #elif defined(__clang__)
10935         "adcs	r4, r6\n\t"
10936 #else
10937         "adc	r4, r6\n\t"
10938 #endif
10939 #ifdef WOLFSSL_KEIL
10940         "adcs	r2, r2, %[r]\n\t"
10941 #elif defined(__clang__)
10942         "adcs	r2, %[r]\n\t"
10943 #else
10944         "adc	r2, %[r]\n\t"
10945 #endif
10946 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10947         "adds	r3, r3, r5\n\t"
10948 #else
10949         "add	r3, r3, r5\n\t"
10950 #endif
10951 #ifdef WOLFSSL_KEIL
10952         "adcs	r4, r4, r6\n\t"
10953 #elif defined(__clang__)
10954         "adcs	r4, r6\n\t"
10955 #else
10956         "adc	r4, r6\n\t"
10957 #endif
10958 #ifdef WOLFSSL_KEIL
10959         "adcs	r2, r2, %[r]\n\t"
10960 #elif defined(__clang__)
10961         "adcs	r2, %[r]\n\t"
10962 #else
10963         "adc	r2, %[r]\n\t"
10964 #endif
10965 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10966         "lsrs	r5, %[a], #16\n\t"
10967 #else
10968         "lsr	r5, %[a], #16\n\t"
10969 #endif
10970 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10971         "lsrs	r6, r7, #16\n\t"
10972 #else
10973         "lsr	r6, r7, #16\n\t"
10974 #endif
10975 #ifdef WOLFSSL_KEIL
10976         "muls	r6, r5, r6\n\t"
10977 #elif defined(__clang__)
10978         "muls	r6, r5\n\t"
10979 #else
10980         "mul	r6, r5\n\t"
10981 #endif
10982 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10983         "adds	r4, r4, r6\n\t"
10984 #else
10985         "add	r4, r4, r6\n\t"
10986 #endif
10987 #ifdef WOLFSSL_KEIL
10988         "adcs	r2, r2, %[r]\n\t"
10989 #elif defined(__clang__)
10990         "adcs	r2, %[r]\n\t"
10991 #else
10992         "adc	r2, %[r]\n\t"
10993 #endif
10994 #if defined(__clang__) || defined(WOLFSSL_KEIL)
10995         "adds	r4, r4, r6\n\t"
10996 #else
10997         "add	r4, r4, r6\n\t"
10998 #endif
10999 #ifdef WOLFSSL_KEIL
11000         "adcs	r2, r2, %[r]\n\t"
11001 #elif defined(__clang__)
11002         "adcs	r2, %[r]\n\t"
11003 #else
11004         "adc	r2, %[r]\n\t"
11005 #endif
11006         "uxth	r6, r7\n\t"
11007 #ifdef WOLFSSL_KEIL
11008         "muls	r5, r6, r5\n\t"
11009 #elif defined(__clang__)
11010         "muls	r5, r6\n\t"
11011 #else
11012         "mul	r5, r6\n\t"
11013 #endif
11014 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11015         "lsrs	r6, r5, #16\n\t"
11016 #else
11017         "lsr	r6, r5, #16\n\t"
11018 #endif
11019 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11020         "lsls	r5, r5, #16\n\t"
11021 #else
11022         "lsl	r5, r5, #16\n\t"
11023 #endif
11024 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11025         "adds	r3, r3, r5\n\t"
11026 #else
11027         "add	r3, r3, r5\n\t"
11028 #endif
11029 #ifdef WOLFSSL_KEIL
11030         "adcs	r4, r4, r6\n\t"
11031 #elif defined(__clang__)
11032         "adcs	r4, r6\n\t"
11033 #else
11034         "adc	r4, r6\n\t"
11035 #endif
11036 #ifdef WOLFSSL_KEIL
11037         "adcs	r2, r2, %[r]\n\t"
11038 #elif defined(__clang__)
11039         "adcs	r2, %[r]\n\t"
11040 #else
11041         "adc	r2, %[r]\n\t"
11042 #endif
11043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11044         "adds	r3, r3, r5\n\t"
11045 #else
11046         "add	r3, r3, r5\n\t"
11047 #endif
11048 #ifdef WOLFSSL_KEIL
11049         "adcs	r4, r4, r6\n\t"
11050 #elif defined(__clang__)
11051         "adcs	r4, r6\n\t"
11052 #else
11053         "adc	r4, r6\n\t"
11054 #endif
11055 #ifdef WOLFSSL_KEIL
11056         "adcs	r2, r2, %[r]\n\t"
11057 #elif defined(__clang__)
11058         "adcs	r2, %[r]\n\t"
11059 #else
11060         "adc	r2, %[r]\n\t"
11061 #endif
11062         "#  A[3] * A[1]\n\t"
11063         "mov	%[a], r9\n\t"
11064         "mov	r7, r11\n\t"
11065         "mov	%[a], lr\n\t"
11066         "uxth	r5, %[a]\n\t"
11067         "uxth	r6, r7\n\t"
11068 #ifdef WOLFSSL_KEIL
11069         "muls	r6, r5, r6\n\t"
11070 #elif defined(__clang__)
11071         "muls	r6, r5\n\t"
11072 #else
11073         "mul	r6, r5\n\t"
11074 #endif
11075 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11076         "adds	r3, r3, r6\n\t"
11077 #else
11078         "add	r3, r3, r6\n\t"
11079 #endif
11080 #ifdef WOLFSSL_KEIL
11081         "adcs	r4, r4, %[r]\n\t"
11082 #elif defined(__clang__)
11083         "adcs	r4, %[r]\n\t"
11084 #else
11085         "adc	r4, %[r]\n\t"
11086 #endif
11087 #ifdef WOLFSSL_KEIL
11088         "adcs	r2, r2, %[r]\n\t"
11089 #elif defined(__clang__)
11090         "adcs	r2, %[r]\n\t"
11091 #else
11092         "adc	r2, %[r]\n\t"
11093 #endif
11094 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11095         "adds	r3, r3, r6\n\t"
11096 #else
11097         "add	r3, r3, r6\n\t"
11098 #endif
11099 #ifdef WOLFSSL_KEIL
11100         "adcs	r4, r4, %[r]\n\t"
11101 #elif defined(__clang__)
11102         "adcs	r4, %[r]\n\t"
11103 #else
11104         "adc	r4, %[r]\n\t"
11105 #endif
11106 #ifdef WOLFSSL_KEIL
11107         "adcs	r2, r2, %[r]\n\t"
11108 #elif defined(__clang__)
11109         "adcs	r2, %[r]\n\t"
11110 #else
11111         "adc	r2, %[r]\n\t"
11112 #endif
11113 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11114         "lsrs	r6, r7, #16\n\t"
11115 #else
11116         "lsr	r6, r7, #16\n\t"
11117 #endif
11118 #ifdef WOLFSSL_KEIL
11119         "muls	r5, r6, r5\n\t"
11120 #elif defined(__clang__)
11121         "muls	r5, r6\n\t"
11122 #else
11123         "mul	r5, r6\n\t"
11124 #endif
11125 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11126         "lsrs	r6, r5, #16\n\t"
11127 #else
11128         "lsr	r6, r5, #16\n\t"
11129 #endif
11130 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11131         "lsls	r5, r5, #16\n\t"
11132 #else
11133         "lsl	r5, r5, #16\n\t"
11134 #endif
11135 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11136         "adds	r3, r3, r5\n\t"
11137 #else
11138         "add	r3, r3, r5\n\t"
11139 #endif
11140 #ifdef WOLFSSL_KEIL
11141         "adcs	r4, r4, r6\n\t"
11142 #elif defined(__clang__)
11143         "adcs	r4, r6\n\t"
11144 #else
11145         "adc	r4, r6\n\t"
11146 #endif
11147 #ifdef WOLFSSL_KEIL
11148         "adcs	r2, r2, %[r]\n\t"
11149 #elif defined(__clang__)
11150         "adcs	r2, %[r]\n\t"
11151 #else
11152         "adc	r2, %[r]\n\t"
11153 #endif
11154 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11155         "adds	r3, r3, r5\n\t"
11156 #else
11157         "add	r3, r3, r5\n\t"
11158 #endif
11159 #ifdef WOLFSSL_KEIL
11160         "adcs	r4, r4, r6\n\t"
11161 #elif defined(__clang__)
11162         "adcs	r4, r6\n\t"
11163 #else
11164         "adc	r4, r6\n\t"
11165 #endif
11166 #ifdef WOLFSSL_KEIL
11167         "adcs	r2, r2, %[r]\n\t"
11168 #elif defined(__clang__)
11169         "adcs	r2, %[r]\n\t"
11170 #else
11171         "adc	r2, %[r]\n\t"
11172 #endif
11173 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11174         "lsrs	r5, %[a], #16\n\t"
11175 #else
11176         "lsr	r5, %[a], #16\n\t"
11177 #endif
11178 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11179         "lsrs	r6, r7, #16\n\t"
11180 #else
11181         "lsr	r6, r7, #16\n\t"
11182 #endif
11183 #ifdef WOLFSSL_KEIL
11184         "muls	r6, r5, r6\n\t"
11185 #elif defined(__clang__)
11186         "muls	r6, r5\n\t"
11187 #else
11188         "mul	r6, r5\n\t"
11189 #endif
11190 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11191         "adds	r4, r4, r6\n\t"
11192 #else
11193         "add	r4, r4, r6\n\t"
11194 #endif
11195 #ifdef WOLFSSL_KEIL
11196         "adcs	r2, r2, %[r]\n\t"
11197 #elif defined(__clang__)
11198         "adcs	r2, %[r]\n\t"
11199 #else
11200         "adc	r2, %[r]\n\t"
11201 #endif
11202 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11203         "adds	r4, r4, r6\n\t"
11204 #else
11205         "add	r4, r4, r6\n\t"
11206 #endif
11207 #ifdef WOLFSSL_KEIL
11208         "adcs	r2, r2, %[r]\n\t"
11209 #elif defined(__clang__)
11210         "adcs	r2, %[r]\n\t"
11211 #else
11212         "adc	r2, %[r]\n\t"
11213 #endif
11214         "uxth	r6, r7\n\t"
11215 #ifdef WOLFSSL_KEIL
11216         "muls	r5, r6, r5\n\t"
11217 #elif defined(__clang__)
11218         "muls	r5, r6\n\t"
11219 #else
11220         "mul	r5, r6\n\t"
11221 #endif
11222 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11223         "lsrs	r6, r5, #16\n\t"
11224 #else
11225         "lsr	r6, r5, #16\n\t"
11226 #endif
11227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11228         "lsls	r5, r5, #16\n\t"
11229 #else
11230         "lsl	r5, r5, #16\n\t"
11231 #endif
11232 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11233         "adds	r3, r3, r5\n\t"
11234 #else
11235         "add	r3, r3, r5\n\t"
11236 #endif
11237 #ifdef WOLFSSL_KEIL
11238         "adcs	r4, r4, r6\n\t"
11239 #elif defined(__clang__)
11240         "adcs	r4, r6\n\t"
11241 #else
11242         "adc	r4, r6\n\t"
11243 #endif
11244 #ifdef WOLFSSL_KEIL
11245         "adcs	r2, r2, %[r]\n\t"
11246 #elif defined(__clang__)
11247         "adcs	r2, %[r]\n\t"
11248 #else
11249         "adc	r2, %[r]\n\t"
11250 #endif
11251 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11252         "adds	r3, r3, r5\n\t"
11253 #else
11254         "add	r3, r3, r5\n\t"
11255 #endif
11256 #ifdef WOLFSSL_KEIL
11257         "adcs	r4, r4, r6\n\t"
11258 #elif defined(__clang__)
11259         "adcs	r4, r6\n\t"
11260 #else
11261         "adc	r4, r6\n\t"
11262 #endif
11263 #ifdef WOLFSSL_KEIL
11264         "adcs	r2, r2, %[r]\n\t"
11265 #elif defined(__clang__)
11266         "adcs	r2, %[r]\n\t"
11267 #else
11268         "adc	r2, %[r]\n\t"
11269 #endif
11270         "#  A[2] * A[2]\n\t"
11271         "mov	r7, r12\n\t"
11272 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11273         "lsrs	r6, r7, #16\n\t"
11274 #else
11275         "lsr	r6, r7, #16\n\t"
11276 #endif
11277         "uxth	r5, r7\n\t"
11278 #ifdef WOLFSSL_KEIL
11279         "muls	r5, r5, r5\n\t"
11280 #elif defined(__clang__)
11281         "muls	r5, r5\n\t"
11282 #else
11283         "mul	r5, r5\n\t"
11284 #endif
11285 #ifdef WOLFSSL_KEIL
11286         "muls	r6, r6, r6\n\t"
11287 #elif defined(__clang__)
11288         "muls	r6, r6\n\t"
11289 #else
11290         "mul	r6, r6\n\t"
11291 #endif
11292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11293         "adds	r3, r3, r5\n\t"
11294 #else
11295         "add	r3, r3, r5\n\t"
11296 #endif
11297 #ifdef WOLFSSL_KEIL
11298         "adcs	r4, r4, r6\n\t"
11299 #elif defined(__clang__)
11300         "adcs	r4, r6\n\t"
11301 #else
11302         "adc	r4, r6\n\t"
11303 #endif
11304 #ifdef WOLFSSL_KEIL
11305         "adcs	r2, r2, %[r]\n\t"
11306 #elif defined(__clang__)
11307         "adcs	r2, %[r]\n\t"
11308 #else
11309         "adc	r2, %[r]\n\t"
11310 #endif
11311 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11312         "lsrs	r6, r7, #16\n\t"
11313 #else
11314         "lsr	r6, r7, #16\n\t"
11315 #endif
11316         "uxth	r5, r7\n\t"
11317 #ifdef WOLFSSL_KEIL
11318         "muls	r5, r6, r5\n\t"
11319 #elif defined(__clang__)
11320         "muls	r5, r6\n\t"
11321 #else
11322         "mul	r5, r6\n\t"
11323 #endif
11324 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11325         "lsrs	r6, r5, #15\n\t"
11326 #else
11327         "lsr	r6, r5, #15\n\t"
11328 #endif
11329 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11330         "lsls	r5, r5, #17\n\t"
11331 #else
11332         "lsl	r5, r5, #17\n\t"
11333 #endif
11334 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11335         "adds	r3, r3, r5\n\t"
11336 #else
11337         "add	r3, r3, r5\n\t"
11338 #endif
11339 #ifdef WOLFSSL_KEIL
11340         "adcs	r4, r4, r6\n\t"
11341 #elif defined(__clang__)
11342         "adcs	r4, r6\n\t"
11343 #else
11344         "adc	r4, r6\n\t"
11345 #endif
11346 #ifdef WOLFSSL_KEIL
11347         "adcs	r2, r2, %[r]\n\t"
11348 #elif defined(__clang__)
11349         "adcs	r2, %[r]\n\t"
11350 #else
11351         "adc	r2, %[r]\n\t"
11352 #endif
11353         "str	r3, [sp, #16]\n\t"
11354         "#  A[3] * A[2]\n\t"
11355         "movs	r3, #0\n\t"
11356         "mov	%[a], r9\n\t"
11357         "mov	%[a], lr\n\t"
11358         "uxth	r5, %[a]\n\t"
11359         "uxth	r6, r7\n\t"
11360 #ifdef WOLFSSL_KEIL
11361         "muls	r6, r5, r6\n\t"
11362 #elif defined(__clang__)
11363         "muls	r6, r5\n\t"
11364 #else
11365         "mul	r6, r5\n\t"
11366 #endif
11367 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11368         "adds	r4, r4, r6\n\t"
11369 #else
11370         "add	r4, r4, r6\n\t"
11371 #endif
11372 #ifdef WOLFSSL_KEIL
11373         "adcs	r2, r2, %[r]\n\t"
11374 #elif defined(__clang__)
11375         "adcs	r2, %[r]\n\t"
11376 #else
11377         "adc	r2, %[r]\n\t"
11378 #endif
11379 #ifdef WOLFSSL_KEIL
11380         "adcs	r3, r3, %[r]\n\t"
11381 #elif defined(__clang__)
11382         "adcs	r3, %[r]\n\t"
11383 #else
11384         "adc	r3, %[r]\n\t"
11385 #endif
11386 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11387         "adds	r4, r4, r6\n\t"
11388 #else
11389         "add	r4, r4, r6\n\t"
11390 #endif
11391 #ifdef WOLFSSL_KEIL
11392         "adcs	r2, r2, %[r]\n\t"
11393 #elif defined(__clang__)
11394         "adcs	r2, %[r]\n\t"
11395 #else
11396         "adc	r2, %[r]\n\t"
11397 #endif
11398 #ifdef WOLFSSL_KEIL
11399         "adcs	r3, r3, %[r]\n\t"
11400 #elif defined(__clang__)
11401         "adcs	r3, %[r]\n\t"
11402 #else
11403         "adc	r3, %[r]\n\t"
11404 #endif
11405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11406         "lsrs	r6, r7, #16\n\t"
11407 #else
11408         "lsr	r6, r7, #16\n\t"
11409 #endif
11410 #ifdef WOLFSSL_KEIL
11411         "muls	r5, r6, r5\n\t"
11412 #elif defined(__clang__)
11413         "muls	r5, r6\n\t"
11414 #else
11415         "mul	r5, r6\n\t"
11416 #endif
11417 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11418         "lsrs	r6, r5, #16\n\t"
11419 #else
11420         "lsr	r6, r5, #16\n\t"
11421 #endif
11422 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11423         "lsls	r5, r5, #16\n\t"
11424 #else
11425         "lsl	r5, r5, #16\n\t"
11426 #endif
11427 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11428         "adds	r4, r4, r5\n\t"
11429 #else
11430         "add	r4, r4, r5\n\t"
11431 #endif
11432 #ifdef WOLFSSL_KEIL
11433         "adcs	r2, r2, r6\n\t"
11434 #elif defined(__clang__)
11435         "adcs	r2, r6\n\t"
11436 #else
11437         "adc	r2, r6\n\t"
11438 #endif
11439 #ifdef WOLFSSL_KEIL
11440         "adcs	r3, r3, %[r]\n\t"
11441 #elif defined(__clang__)
11442         "adcs	r3, %[r]\n\t"
11443 #else
11444         "adc	r3, %[r]\n\t"
11445 #endif
11446 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11447         "adds	r4, r4, r5\n\t"
11448 #else
11449         "add	r4, r4, r5\n\t"
11450 #endif
11451 #ifdef WOLFSSL_KEIL
11452         "adcs	r2, r2, r6\n\t"
11453 #elif defined(__clang__)
11454         "adcs	r2, r6\n\t"
11455 #else
11456         "adc	r2, r6\n\t"
11457 #endif
11458 #ifdef WOLFSSL_KEIL
11459         "adcs	r3, r3, %[r]\n\t"
11460 #elif defined(__clang__)
11461         "adcs	r3, %[r]\n\t"
11462 #else
11463         "adc	r3, %[r]\n\t"
11464 #endif
11465 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11466         "lsrs	r5, %[a], #16\n\t"
11467 #else
11468         "lsr	r5, %[a], #16\n\t"
11469 #endif
11470 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11471         "lsrs	r6, r7, #16\n\t"
11472 #else
11473         "lsr	r6, r7, #16\n\t"
11474 #endif
11475 #ifdef WOLFSSL_KEIL
11476         "muls	r6, r5, r6\n\t"
11477 #elif defined(__clang__)
11478         "muls	r6, r5\n\t"
11479 #else
11480         "mul	r6, r5\n\t"
11481 #endif
11482 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11483         "adds	r2, r2, r6\n\t"
11484 #else
11485         "add	r2, r2, r6\n\t"
11486 #endif
11487 #ifdef WOLFSSL_KEIL
11488         "adcs	r3, r3, %[r]\n\t"
11489 #elif defined(__clang__)
11490         "adcs	r3, %[r]\n\t"
11491 #else
11492         "adc	r3, %[r]\n\t"
11493 #endif
11494 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11495         "adds	r2, r2, r6\n\t"
11496 #else
11497         "add	r2, r2, r6\n\t"
11498 #endif
11499 #ifdef WOLFSSL_KEIL
11500         "adcs	r3, r3, %[r]\n\t"
11501 #elif defined(__clang__)
11502         "adcs	r3, %[r]\n\t"
11503 #else
11504         "adc	r3, %[r]\n\t"
11505 #endif
11506         "uxth	r6, r7\n\t"
11507 #ifdef WOLFSSL_KEIL
11508         "muls	r5, r6, r5\n\t"
11509 #elif defined(__clang__)
11510         "muls	r5, r6\n\t"
11511 #else
11512         "mul	r5, r6\n\t"
11513 #endif
11514 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11515         "lsrs	r6, r5, #16\n\t"
11516 #else
11517         "lsr	r6, r5, #16\n\t"
11518 #endif
11519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11520         "lsls	r5, r5, #16\n\t"
11521 #else
11522         "lsl	r5, r5, #16\n\t"
11523 #endif
11524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11525         "adds	r4, r4, r5\n\t"
11526 #else
11527         "add	r4, r4, r5\n\t"
11528 #endif
11529 #ifdef WOLFSSL_KEIL
11530         "adcs	r2, r2, r6\n\t"
11531 #elif defined(__clang__)
11532         "adcs	r2, r6\n\t"
11533 #else
11534         "adc	r2, r6\n\t"
11535 #endif
11536 #ifdef WOLFSSL_KEIL
11537         "adcs	r3, r3, %[r]\n\t"
11538 #elif defined(__clang__)
11539         "adcs	r3, %[r]\n\t"
11540 #else
11541         "adc	r3, %[r]\n\t"
11542 #endif
11543 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11544         "adds	r4, r4, r5\n\t"
11545 #else
11546         "add	r4, r4, r5\n\t"
11547 #endif
11548 #ifdef WOLFSSL_KEIL
11549         "adcs	r2, r2, r6\n\t"
11550 #elif defined(__clang__)
11551         "adcs	r2, r6\n\t"
11552 #else
11553         "adc	r2, r6\n\t"
11554 #endif
11555 #ifdef WOLFSSL_KEIL
11556         "adcs	r3, r3, %[r]\n\t"
11557 #elif defined(__clang__)
11558         "adcs	r3, %[r]\n\t"
11559 #else
11560         "adc	r3, %[r]\n\t"
11561 #endif
11562         "#  A[4] * A[1]\n\t"
11563         "mov	%[a], r9\n\t"
11564         "mov	r7, r11\n\t"
11565         "ldr	%[a], [%[a], #16]\n\t"
11566         "uxth	r5, %[a]\n\t"
11567         "uxth	r6, r7\n\t"
11568 #ifdef WOLFSSL_KEIL
11569         "muls	r6, r5, r6\n\t"
11570 #elif defined(__clang__)
11571         "muls	r6, r5\n\t"
11572 #else
11573         "mul	r6, r5\n\t"
11574 #endif
11575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11576         "adds	r4, r4, r6\n\t"
11577 #else
11578         "add	r4, r4, r6\n\t"
11579 #endif
11580 #ifdef WOLFSSL_KEIL
11581         "adcs	r2, r2, %[r]\n\t"
11582 #elif defined(__clang__)
11583         "adcs	r2, %[r]\n\t"
11584 #else
11585         "adc	r2, %[r]\n\t"
11586 #endif
11587 #ifdef WOLFSSL_KEIL
11588         "adcs	r3, r3, %[r]\n\t"
11589 #elif defined(__clang__)
11590         "adcs	r3, %[r]\n\t"
11591 #else
11592         "adc	r3, %[r]\n\t"
11593 #endif
11594 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11595         "adds	r4, r4, r6\n\t"
11596 #else
11597         "add	r4, r4, r6\n\t"
11598 #endif
11599 #ifdef WOLFSSL_KEIL
11600         "adcs	r2, r2, %[r]\n\t"
11601 #elif defined(__clang__)
11602         "adcs	r2, %[r]\n\t"
11603 #else
11604         "adc	r2, %[r]\n\t"
11605 #endif
11606 #ifdef WOLFSSL_KEIL
11607         "adcs	r3, r3, %[r]\n\t"
11608 #elif defined(__clang__)
11609         "adcs	r3, %[r]\n\t"
11610 #else
11611         "adc	r3, %[r]\n\t"
11612 #endif
11613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11614         "lsrs	r6, r7, #16\n\t"
11615 #else
11616         "lsr	r6, r7, #16\n\t"
11617 #endif
11618 #ifdef WOLFSSL_KEIL
11619         "muls	r5, r6, r5\n\t"
11620 #elif defined(__clang__)
11621         "muls	r5, r6\n\t"
11622 #else
11623         "mul	r5, r6\n\t"
11624 #endif
11625 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11626         "lsrs	r6, r5, #16\n\t"
11627 #else
11628         "lsr	r6, r5, #16\n\t"
11629 #endif
11630 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11631         "lsls	r5, r5, #16\n\t"
11632 #else
11633         "lsl	r5, r5, #16\n\t"
11634 #endif
11635 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11636         "adds	r4, r4, r5\n\t"
11637 #else
11638         "add	r4, r4, r5\n\t"
11639 #endif
11640 #ifdef WOLFSSL_KEIL
11641         "adcs	r2, r2, r6\n\t"
11642 #elif defined(__clang__)
11643         "adcs	r2, r6\n\t"
11644 #else
11645         "adc	r2, r6\n\t"
11646 #endif
11647 #ifdef WOLFSSL_KEIL
11648         "adcs	r3, r3, %[r]\n\t"
11649 #elif defined(__clang__)
11650         "adcs	r3, %[r]\n\t"
11651 #else
11652         "adc	r3, %[r]\n\t"
11653 #endif
11654 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11655         "adds	r4, r4, r5\n\t"
11656 #else
11657         "add	r4, r4, r5\n\t"
11658 #endif
11659 #ifdef WOLFSSL_KEIL
11660         "adcs	r2, r2, r6\n\t"
11661 #elif defined(__clang__)
11662         "adcs	r2, r6\n\t"
11663 #else
11664         "adc	r2, r6\n\t"
11665 #endif
11666 #ifdef WOLFSSL_KEIL
11667         "adcs	r3, r3, %[r]\n\t"
11668 #elif defined(__clang__)
11669         "adcs	r3, %[r]\n\t"
11670 #else
11671         "adc	r3, %[r]\n\t"
11672 #endif
11673 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11674         "lsrs	r5, %[a], #16\n\t"
11675 #else
11676         "lsr	r5, %[a], #16\n\t"
11677 #endif
11678 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11679         "lsrs	r6, r7, #16\n\t"
11680 #else
11681         "lsr	r6, r7, #16\n\t"
11682 #endif
11683 #ifdef WOLFSSL_KEIL
11684         "muls	r6, r5, r6\n\t"
11685 #elif defined(__clang__)
11686         "muls	r6, r5\n\t"
11687 #else
11688         "mul	r6, r5\n\t"
11689 #endif
11690 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11691         "adds	r2, r2, r6\n\t"
11692 #else
11693         "add	r2, r2, r6\n\t"
11694 #endif
11695 #ifdef WOLFSSL_KEIL
11696         "adcs	r3, r3, %[r]\n\t"
11697 #elif defined(__clang__)
11698         "adcs	r3, %[r]\n\t"
11699 #else
11700         "adc	r3, %[r]\n\t"
11701 #endif
11702 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11703         "adds	r2, r2, r6\n\t"
11704 #else
11705         "add	r2, r2, r6\n\t"
11706 #endif
11707 #ifdef WOLFSSL_KEIL
11708         "adcs	r3, r3, %[r]\n\t"
11709 #elif defined(__clang__)
11710         "adcs	r3, %[r]\n\t"
11711 #else
11712         "adc	r3, %[r]\n\t"
11713 #endif
11714         "uxth	r6, r7\n\t"
11715 #ifdef WOLFSSL_KEIL
11716         "muls	r5, r6, r5\n\t"
11717 #elif defined(__clang__)
11718         "muls	r5, r6\n\t"
11719 #else
11720         "mul	r5, r6\n\t"
11721 #endif
11722 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11723         "lsrs	r6, r5, #16\n\t"
11724 #else
11725         "lsr	r6, r5, #16\n\t"
11726 #endif
11727 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11728         "lsls	r5, r5, #16\n\t"
11729 #else
11730         "lsl	r5, r5, #16\n\t"
11731 #endif
11732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11733         "adds	r4, r4, r5\n\t"
11734 #else
11735         "add	r4, r4, r5\n\t"
11736 #endif
11737 #ifdef WOLFSSL_KEIL
11738         "adcs	r2, r2, r6\n\t"
11739 #elif defined(__clang__)
11740         "adcs	r2, r6\n\t"
11741 #else
11742         "adc	r2, r6\n\t"
11743 #endif
11744 #ifdef WOLFSSL_KEIL
11745         "adcs	r3, r3, %[r]\n\t"
11746 #elif defined(__clang__)
11747         "adcs	r3, %[r]\n\t"
11748 #else
11749         "adc	r3, %[r]\n\t"
11750 #endif
11751 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11752         "adds	r4, r4, r5\n\t"
11753 #else
11754         "add	r4, r4, r5\n\t"
11755 #endif
11756 #ifdef WOLFSSL_KEIL
11757         "adcs	r2, r2, r6\n\t"
11758 #elif defined(__clang__)
11759         "adcs	r2, r6\n\t"
11760 #else
11761         "adc	r2, r6\n\t"
11762 #endif
11763 #ifdef WOLFSSL_KEIL
11764         "adcs	r3, r3, %[r]\n\t"
11765 #elif defined(__clang__)
11766         "adcs	r3, %[r]\n\t"
11767 #else
11768         "adc	r3, %[r]\n\t"
11769 #endif
11770         "#  A[5] * A[0]\n\t"
11771         "mov	%[a], r9\n\t"
11772         "mov	r7, r10\n\t"
11773         "ldr	%[a], [%[a], #20]\n\t"
11774         "uxth	r5, %[a]\n\t"
11775         "uxth	r6, r7\n\t"
11776 #ifdef WOLFSSL_KEIL
11777         "muls	r6, r5, r6\n\t"
11778 #elif defined(__clang__)
11779         "muls	r6, r5\n\t"
11780 #else
11781         "mul	r6, r5\n\t"
11782 #endif
11783 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11784         "adds	r4, r4, r6\n\t"
11785 #else
11786         "add	r4, r4, r6\n\t"
11787 #endif
11788 #ifdef WOLFSSL_KEIL
11789         "adcs	r2, r2, %[r]\n\t"
11790 #elif defined(__clang__)
11791         "adcs	r2, %[r]\n\t"
11792 #else
11793         "adc	r2, %[r]\n\t"
11794 #endif
11795 #ifdef WOLFSSL_KEIL
11796         "adcs	r3, r3, %[r]\n\t"
11797 #elif defined(__clang__)
11798         "adcs	r3, %[r]\n\t"
11799 #else
11800         "adc	r3, %[r]\n\t"
11801 #endif
11802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11803         "adds	r4, r4, r6\n\t"
11804 #else
11805         "add	r4, r4, r6\n\t"
11806 #endif
11807 #ifdef WOLFSSL_KEIL
11808         "adcs	r2, r2, %[r]\n\t"
11809 #elif defined(__clang__)
11810         "adcs	r2, %[r]\n\t"
11811 #else
11812         "adc	r2, %[r]\n\t"
11813 #endif
11814 #ifdef WOLFSSL_KEIL
11815         "adcs	r3, r3, %[r]\n\t"
11816 #elif defined(__clang__)
11817         "adcs	r3, %[r]\n\t"
11818 #else
11819         "adc	r3, %[r]\n\t"
11820 #endif
11821 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11822         "lsrs	r6, r7, #16\n\t"
11823 #else
11824         "lsr	r6, r7, #16\n\t"
11825 #endif
11826 #ifdef WOLFSSL_KEIL
11827         "muls	r5, r6, r5\n\t"
11828 #elif defined(__clang__)
11829         "muls	r5, r6\n\t"
11830 #else
11831         "mul	r5, r6\n\t"
11832 #endif
11833 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11834         "lsrs	r6, r5, #16\n\t"
11835 #else
11836         "lsr	r6, r5, #16\n\t"
11837 #endif
11838 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11839         "lsls	r5, r5, #16\n\t"
11840 #else
11841         "lsl	r5, r5, #16\n\t"
11842 #endif
11843 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11844         "adds	r4, r4, r5\n\t"
11845 #else
11846         "add	r4, r4, r5\n\t"
11847 #endif
11848 #ifdef WOLFSSL_KEIL
11849         "adcs	r2, r2, r6\n\t"
11850 #elif defined(__clang__)
11851         "adcs	r2, r6\n\t"
11852 #else
11853         "adc	r2, r6\n\t"
11854 #endif
11855 #ifdef WOLFSSL_KEIL
11856         "adcs	r3, r3, %[r]\n\t"
11857 #elif defined(__clang__)
11858         "adcs	r3, %[r]\n\t"
11859 #else
11860         "adc	r3, %[r]\n\t"
11861 #endif
11862 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11863         "adds	r4, r4, r5\n\t"
11864 #else
11865         "add	r4, r4, r5\n\t"
11866 #endif
11867 #ifdef WOLFSSL_KEIL
11868         "adcs	r2, r2, r6\n\t"
11869 #elif defined(__clang__)
11870         "adcs	r2, r6\n\t"
11871 #else
11872         "adc	r2, r6\n\t"
11873 #endif
11874 #ifdef WOLFSSL_KEIL
11875         "adcs	r3, r3, %[r]\n\t"
11876 #elif defined(__clang__)
11877         "adcs	r3, %[r]\n\t"
11878 #else
11879         "adc	r3, %[r]\n\t"
11880 #endif
11881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11882         "lsrs	r5, %[a], #16\n\t"
11883 #else
11884         "lsr	r5, %[a], #16\n\t"
11885 #endif
11886 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11887         "lsrs	r6, r7, #16\n\t"
11888 #else
11889         "lsr	r6, r7, #16\n\t"
11890 #endif
11891 #ifdef WOLFSSL_KEIL
11892         "muls	r6, r5, r6\n\t"
11893 #elif defined(__clang__)
11894         "muls	r6, r5\n\t"
11895 #else
11896         "mul	r6, r5\n\t"
11897 #endif
11898 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11899         "adds	r2, r2, r6\n\t"
11900 #else
11901         "add	r2, r2, r6\n\t"
11902 #endif
11903 #ifdef WOLFSSL_KEIL
11904         "adcs	r3, r3, %[r]\n\t"
11905 #elif defined(__clang__)
11906         "adcs	r3, %[r]\n\t"
11907 #else
11908         "adc	r3, %[r]\n\t"
11909 #endif
11910 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11911         "adds	r2, r2, r6\n\t"
11912 #else
11913         "add	r2, r2, r6\n\t"
11914 #endif
11915 #ifdef WOLFSSL_KEIL
11916         "adcs	r3, r3, %[r]\n\t"
11917 #elif defined(__clang__)
11918         "adcs	r3, %[r]\n\t"
11919 #else
11920         "adc	r3, %[r]\n\t"
11921 #endif
11922         "uxth	r6, r7\n\t"
11923 #ifdef WOLFSSL_KEIL
11924         "muls	r5, r6, r5\n\t"
11925 #elif defined(__clang__)
11926         "muls	r5, r6\n\t"
11927 #else
11928         "mul	r5, r6\n\t"
11929 #endif
11930 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11931         "lsrs	r6, r5, #16\n\t"
11932 #else
11933         "lsr	r6, r5, #16\n\t"
11934 #endif
11935 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11936         "lsls	r5, r5, #16\n\t"
11937 #else
11938         "lsl	r5, r5, #16\n\t"
11939 #endif
11940 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11941         "adds	r4, r4, r5\n\t"
11942 #else
11943         "add	r4, r4, r5\n\t"
11944 #endif
11945 #ifdef WOLFSSL_KEIL
11946         "adcs	r2, r2, r6\n\t"
11947 #elif defined(__clang__)
11948         "adcs	r2, r6\n\t"
11949 #else
11950         "adc	r2, r6\n\t"
11951 #endif
11952 #ifdef WOLFSSL_KEIL
11953         "adcs	r3, r3, %[r]\n\t"
11954 #elif defined(__clang__)
11955         "adcs	r3, %[r]\n\t"
11956 #else
11957         "adc	r3, %[r]\n\t"
11958 #endif
11959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11960         "adds	r4, r4, r5\n\t"
11961 #else
11962         "add	r4, r4, r5\n\t"
11963 #endif
11964 #ifdef WOLFSSL_KEIL
11965         "adcs	r2, r2, r6\n\t"
11966 #elif defined(__clang__)
11967         "adcs	r2, r6\n\t"
11968 #else
11969         "adc	r2, r6\n\t"
11970 #endif
11971 #ifdef WOLFSSL_KEIL
11972         "adcs	r3, r3, %[r]\n\t"
11973 #elif defined(__clang__)
11974         "adcs	r3, %[r]\n\t"
11975 #else
11976         "adc	r3, %[r]\n\t"
11977 #endif
11978         "str	r4, [sp, #20]\n\t"
11979         "#  A[6] * A[0]\n\t"
11980         "movs	r4, #0\n\t"
11981         "mov	%[a], r9\n\t"
11982         "ldr	%[a], [%[a], #24]\n\t"
11983         "uxth	r5, %[a]\n\t"
11984         "uxth	r6, r7\n\t"
11985 #ifdef WOLFSSL_KEIL
11986         "muls	r6, r5, r6\n\t"
11987 #elif defined(__clang__)
11988         "muls	r6, r5\n\t"
11989 #else
11990         "mul	r6, r5\n\t"
11991 #endif
11992 #if defined(__clang__) || defined(WOLFSSL_KEIL)
11993         "adds	r2, r2, r6\n\t"
11994 #else
11995         "add	r2, r2, r6\n\t"
11996 #endif
11997 #ifdef WOLFSSL_KEIL
11998         "adcs	r3, r3, %[r]\n\t"
11999 #elif defined(__clang__)
12000         "adcs	r3, %[r]\n\t"
12001 #else
12002         "adc	r3, %[r]\n\t"
12003 #endif
12004 #ifdef WOLFSSL_KEIL
12005         "adcs	r4, r4, %[r]\n\t"
12006 #elif defined(__clang__)
12007         "adcs	r4, %[r]\n\t"
12008 #else
12009         "adc	r4, %[r]\n\t"
12010 #endif
12011 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12012         "adds	r2, r2, r6\n\t"
12013 #else
12014         "add	r2, r2, r6\n\t"
12015 #endif
12016 #ifdef WOLFSSL_KEIL
12017         "adcs	r3, r3, %[r]\n\t"
12018 #elif defined(__clang__)
12019         "adcs	r3, %[r]\n\t"
12020 #else
12021         "adc	r3, %[r]\n\t"
12022 #endif
12023 #ifdef WOLFSSL_KEIL
12024         "adcs	r4, r4, %[r]\n\t"
12025 #elif defined(__clang__)
12026         "adcs	r4, %[r]\n\t"
12027 #else
12028         "adc	r4, %[r]\n\t"
12029 #endif
12030 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12031         "lsrs	r6, r7, #16\n\t"
12032 #else
12033         "lsr	r6, r7, #16\n\t"
12034 #endif
12035 #ifdef WOLFSSL_KEIL
12036         "muls	r5, r6, r5\n\t"
12037 #elif defined(__clang__)
12038         "muls	r5, r6\n\t"
12039 #else
12040         "mul	r5, r6\n\t"
12041 #endif
12042 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12043         "lsrs	r6, r5, #16\n\t"
12044 #else
12045         "lsr	r6, r5, #16\n\t"
12046 #endif
12047 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12048         "lsls	r5, r5, #16\n\t"
12049 #else
12050         "lsl	r5, r5, #16\n\t"
12051 #endif
12052 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12053         "adds	r2, r2, r5\n\t"
12054 #else
12055         "add	r2, r2, r5\n\t"
12056 #endif
12057 #ifdef WOLFSSL_KEIL
12058         "adcs	r3, r3, r6\n\t"
12059 #elif defined(__clang__)
12060         "adcs	r3, r6\n\t"
12061 #else
12062         "adc	r3, r6\n\t"
12063 #endif
12064 #ifdef WOLFSSL_KEIL
12065         "adcs	r4, r4, %[r]\n\t"
12066 #elif defined(__clang__)
12067         "adcs	r4, %[r]\n\t"
12068 #else
12069         "adc	r4, %[r]\n\t"
12070 #endif
12071 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12072         "adds	r2, r2, r5\n\t"
12073 #else
12074         "add	r2, r2, r5\n\t"
12075 #endif
12076 #ifdef WOLFSSL_KEIL
12077         "adcs	r3, r3, r6\n\t"
12078 #elif defined(__clang__)
12079         "adcs	r3, r6\n\t"
12080 #else
12081         "adc	r3, r6\n\t"
12082 #endif
12083 #ifdef WOLFSSL_KEIL
12084         "adcs	r4, r4, %[r]\n\t"
12085 #elif defined(__clang__)
12086         "adcs	r4, %[r]\n\t"
12087 #else
12088         "adc	r4, %[r]\n\t"
12089 #endif
12090 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12091         "lsrs	r5, %[a], #16\n\t"
12092 #else
12093         "lsr	r5, %[a], #16\n\t"
12094 #endif
12095 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12096         "lsrs	r6, r7, #16\n\t"
12097 #else
12098         "lsr	r6, r7, #16\n\t"
12099 #endif
12100 #ifdef WOLFSSL_KEIL
12101         "muls	r6, r5, r6\n\t"
12102 #elif defined(__clang__)
12103         "muls	r6, r5\n\t"
12104 #else
12105         "mul	r6, r5\n\t"
12106 #endif
12107 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12108         "adds	r3, r3, r6\n\t"
12109 #else
12110         "add	r3, r3, r6\n\t"
12111 #endif
12112 #ifdef WOLFSSL_KEIL
12113         "adcs	r4, r4, %[r]\n\t"
12114 #elif defined(__clang__)
12115         "adcs	r4, %[r]\n\t"
12116 #else
12117         "adc	r4, %[r]\n\t"
12118 #endif
12119 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12120         "adds	r3, r3, r6\n\t"
12121 #else
12122         "add	r3, r3, r6\n\t"
12123 #endif
12124 #ifdef WOLFSSL_KEIL
12125         "adcs	r4, r4, %[r]\n\t"
12126 #elif defined(__clang__)
12127         "adcs	r4, %[r]\n\t"
12128 #else
12129         "adc	r4, %[r]\n\t"
12130 #endif
12131         "uxth	r6, r7\n\t"
12132 #ifdef WOLFSSL_KEIL
12133         "muls	r5, r6, r5\n\t"
12134 #elif defined(__clang__)
12135         "muls	r5, r6\n\t"
12136 #else
12137         "mul	r5, r6\n\t"
12138 #endif
12139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12140         "lsrs	r6, r5, #16\n\t"
12141 #else
12142         "lsr	r6, r5, #16\n\t"
12143 #endif
12144 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12145         "lsls	r5, r5, #16\n\t"
12146 #else
12147         "lsl	r5, r5, #16\n\t"
12148 #endif
12149 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12150         "adds	r2, r2, r5\n\t"
12151 #else
12152         "add	r2, r2, r5\n\t"
12153 #endif
12154 #ifdef WOLFSSL_KEIL
12155         "adcs	r3, r3, r6\n\t"
12156 #elif defined(__clang__)
12157         "adcs	r3, r6\n\t"
12158 #else
12159         "adc	r3, r6\n\t"
12160 #endif
12161 #ifdef WOLFSSL_KEIL
12162         "adcs	r4, r4, %[r]\n\t"
12163 #elif defined(__clang__)
12164         "adcs	r4, %[r]\n\t"
12165 #else
12166         "adc	r4, %[r]\n\t"
12167 #endif
12168 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12169         "adds	r2, r2, r5\n\t"
12170 #else
12171         "add	r2, r2, r5\n\t"
12172 #endif
12173 #ifdef WOLFSSL_KEIL
12174         "adcs	r3, r3, r6\n\t"
12175 #elif defined(__clang__)
12176         "adcs	r3, r6\n\t"
12177 #else
12178         "adc	r3, r6\n\t"
12179 #endif
12180 #ifdef WOLFSSL_KEIL
12181         "adcs	r4, r4, %[r]\n\t"
12182 #elif defined(__clang__)
12183         "adcs	r4, %[r]\n\t"
12184 #else
12185         "adc	r4, %[r]\n\t"
12186 #endif
12187         "#  A[5] * A[1]\n\t"
12188         "mov	%[a], r9\n\t"
12189         "mov	r7, r11\n\t"
12190         "ldr	%[a], [%[a], #20]\n\t"
12191         "uxth	r5, %[a]\n\t"
12192         "uxth	r6, r7\n\t"
12193 #ifdef WOLFSSL_KEIL
12194         "muls	r6, r5, r6\n\t"
12195 #elif defined(__clang__)
12196         "muls	r6, r5\n\t"
12197 #else
12198         "mul	r6, r5\n\t"
12199 #endif
12200 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12201         "adds	r2, r2, r6\n\t"
12202 #else
12203         "add	r2, r2, r6\n\t"
12204 #endif
12205 #ifdef WOLFSSL_KEIL
12206         "adcs	r3, r3, %[r]\n\t"
12207 #elif defined(__clang__)
12208         "adcs	r3, %[r]\n\t"
12209 #else
12210         "adc	r3, %[r]\n\t"
12211 #endif
12212 #ifdef WOLFSSL_KEIL
12213         "adcs	r4, r4, %[r]\n\t"
12214 #elif defined(__clang__)
12215         "adcs	r4, %[r]\n\t"
12216 #else
12217         "adc	r4, %[r]\n\t"
12218 #endif
12219 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12220         "adds	r2, r2, r6\n\t"
12221 #else
12222         "add	r2, r2, r6\n\t"
12223 #endif
12224 #ifdef WOLFSSL_KEIL
12225         "adcs	r3, r3, %[r]\n\t"
12226 #elif defined(__clang__)
12227         "adcs	r3, %[r]\n\t"
12228 #else
12229         "adc	r3, %[r]\n\t"
12230 #endif
12231 #ifdef WOLFSSL_KEIL
12232         "adcs	r4, r4, %[r]\n\t"
12233 #elif defined(__clang__)
12234         "adcs	r4, %[r]\n\t"
12235 #else
12236         "adc	r4, %[r]\n\t"
12237 #endif
12238 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12239         "lsrs	r6, r7, #16\n\t"
12240 #else
12241         "lsr	r6, r7, #16\n\t"
12242 #endif
12243 #ifdef WOLFSSL_KEIL
12244         "muls	r5, r6, r5\n\t"
12245 #elif defined(__clang__)
12246         "muls	r5, r6\n\t"
12247 #else
12248         "mul	r5, r6\n\t"
12249 #endif
12250 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12251         "lsrs	r6, r5, #16\n\t"
12252 #else
12253         "lsr	r6, r5, #16\n\t"
12254 #endif
12255 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12256         "lsls	r5, r5, #16\n\t"
12257 #else
12258         "lsl	r5, r5, #16\n\t"
12259 #endif
12260 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12261         "adds	r2, r2, r5\n\t"
12262 #else
12263         "add	r2, r2, r5\n\t"
12264 #endif
12265 #ifdef WOLFSSL_KEIL
12266         "adcs	r3, r3, r6\n\t"
12267 #elif defined(__clang__)
12268         "adcs	r3, r6\n\t"
12269 #else
12270         "adc	r3, r6\n\t"
12271 #endif
12272 #ifdef WOLFSSL_KEIL
12273         "adcs	r4, r4, %[r]\n\t"
12274 #elif defined(__clang__)
12275         "adcs	r4, %[r]\n\t"
12276 #else
12277         "adc	r4, %[r]\n\t"
12278 #endif
12279 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12280         "adds	r2, r2, r5\n\t"
12281 #else
12282         "add	r2, r2, r5\n\t"
12283 #endif
12284 #ifdef WOLFSSL_KEIL
12285         "adcs	r3, r3, r6\n\t"
12286 #elif defined(__clang__)
12287         "adcs	r3, r6\n\t"
12288 #else
12289         "adc	r3, r6\n\t"
12290 #endif
12291 #ifdef WOLFSSL_KEIL
12292         "adcs	r4, r4, %[r]\n\t"
12293 #elif defined(__clang__)
12294         "adcs	r4, %[r]\n\t"
12295 #else
12296         "adc	r4, %[r]\n\t"
12297 #endif
12298 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12299         "lsrs	r5, %[a], #16\n\t"
12300 #else
12301         "lsr	r5, %[a], #16\n\t"
12302 #endif
12303 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12304         "lsrs	r6, r7, #16\n\t"
12305 #else
12306         "lsr	r6, r7, #16\n\t"
12307 #endif
12308 #ifdef WOLFSSL_KEIL
12309         "muls	r6, r5, r6\n\t"
12310 #elif defined(__clang__)
12311         "muls	r6, r5\n\t"
12312 #else
12313         "mul	r6, r5\n\t"
12314 #endif
12315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12316         "adds	r3, r3, r6\n\t"
12317 #else
12318         "add	r3, r3, r6\n\t"
12319 #endif
12320 #ifdef WOLFSSL_KEIL
12321         "adcs	r4, r4, %[r]\n\t"
12322 #elif defined(__clang__)
12323         "adcs	r4, %[r]\n\t"
12324 #else
12325         "adc	r4, %[r]\n\t"
12326 #endif
12327 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12328         "adds	r3, r3, r6\n\t"
12329 #else
12330         "add	r3, r3, r6\n\t"
12331 #endif
12332 #ifdef WOLFSSL_KEIL
12333         "adcs	r4, r4, %[r]\n\t"
12334 #elif defined(__clang__)
12335         "adcs	r4, %[r]\n\t"
12336 #else
12337         "adc	r4, %[r]\n\t"
12338 #endif
12339         "uxth	r6, r7\n\t"
12340 #ifdef WOLFSSL_KEIL
12341         "muls	r5, r6, r5\n\t"
12342 #elif defined(__clang__)
12343         "muls	r5, r6\n\t"
12344 #else
12345         "mul	r5, r6\n\t"
12346 #endif
12347 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12348         "lsrs	r6, r5, #16\n\t"
12349 #else
12350         "lsr	r6, r5, #16\n\t"
12351 #endif
12352 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12353         "lsls	r5, r5, #16\n\t"
12354 #else
12355         "lsl	r5, r5, #16\n\t"
12356 #endif
12357 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12358         "adds	r2, r2, r5\n\t"
12359 #else
12360         "add	r2, r2, r5\n\t"
12361 #endif
12362 #ifdef WOLFSSL_KEIL
12363         "adcs	r3, r3, r6\n\t"
12364 #elif defined(__clang__)
12365         "adcs	r3, r6\n\t"
12366 #else
12367         "adc	r3, r6\n\t"
12368 #endif
12369 #ifdef WOLFSSL_KEIL
12370         "adcs	r4, r4, %[r]\n\t"
12371 #elif defined(__clang__)
12372         "adcs	r4, %[r]\n\t"
12373 #else
12374         "adc	r4, %[r]\n\t"
12375 #endif
12376 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12377         "adds	r2, r2, r5\n\t"
12378 #else
12379         "add	r2, r2, r5\n\t"
12380 #endif
12381 #ifdef WOLFSSL_KEIL
12382         "adcs	r3, r3, r6\n\t"
12383 #elif defined(__clang__)
12384         "adcs	r3, r6\n\t"
12385 #else
12386         "adc	r3, r6\n\t"
12387 #endif
12388 #ifdef WOLFSSL_KEIL
12389         "adcs	r4, r4, %[r]\n\t"
12390 #elif defined(__clang__)
12391         "adcs	r4, %[r]\n\t"
12392 #else
12393         "adc	r4, %[r]\n\t"
12394 #endif
12395         "#  A[4] * A[2]\n\t"
12396         "mov	%[a], r9\n\t"
12397         "mov	r7, r12\n\t"
12398         "ldr	%[a], [%[a], #16]\n\t"
12399         "uxth	r5, %[a]\n\t"
12400         "uxth	r6, r7\n\t"
12401 #ifdef WOLFSSL_KEIL
12402         "muls	r6, r5, r6\n\t"
12403 #elif defined(__clang__)
12404         "muls	r6, r5\n\t"
12405 #else
12406         "mul	r6, r5\n\t"
12407 #endif
12408 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12409         "adds	r2, r2, r6\n\t"
12410 #else
12411         "add	r2, r2, r6\n\t"
12412 #endif
12413 #ifdef WOLFSSL_KEIL
12414         "adcs	r3, r3, %[r]\n\t"
12415 #elif defined(__clang__)
12416         "adcs	r3, %[r]\n\t"
12417 #else
12418         "adc	r3, %[r]\n\t"
12419 #endif
12420 #ifdef WOLFSSL_KEIL
12421         "adcs	r4, r4, %[r]\n\t"
12422 #elif defined(__clang__)
12423         "adcs	r4, %[r]\n\t"
12424 #else
12425         "adc	r4, %[r]\n\t"
12426 #endif
12427 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12428         "adds	r2, r2, r6\n\t"
12429 #else
12430         "add	r2, r2, r6\n\t"
12431 #endif
12432 #ifdef WOLFSSL_KEIL
12433         "adcs	r3, r3, %[r]\n\t"
12434 #elif defined(__clang__)
12435         "adcs	r3, %[r]\n\t"
12436 #else
12437         "adc	r3, %[r]\n\t"
12438 #endif
12439 #ifdef WOLFSSL_KEIL
12440         "adcs	r4, r4, %[r]\n\t"
12441 #elif defined(__clang__)
12442         "adcs	r4, %[r]\n\t"
12443 #else
12444         "adc	r4, %[r]\n\t"
12445 #endif
12446 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12447         "lsrs	r6, r7, #16\n\t"
12448 #else
12449         "lsr	r6, r7, #16\n\t"
12450 #endif
12451 #ifdef WOLFSSL_KEIL
12452         "muls	r5, r6, r5\n\t"
12453 #elif defined(__clang__)
12454         "muls	r5, r6\n\t"
12455 #else
12456         "mul	r5, r6\n\t"
12457 #endif
12458 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12459         "lsrs	r6, r5, #16\n\t"
12460 #else
12461         "lsr	r6, r5, #16\n\t"
12462 #endif
12463 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12464         "lsls	r5, r5, #16\n\t"
12465 #else
12466         "lsl	r5, r5, #16\n\t"
12467 #endif
12468 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12469         "adds	r2, r2, r5\n\t"
12470 #else
12471         "add	r2, r2, r5\n\t"
12472 #endif
12473 #ifdef WOLFSSL_KEIL
12474         "adcs	r3, r3, r6\n\t"
12475 #elif defined(__clang__)
12476         "adcs	r3, r6\n\t"
12477 #else
12478         "adc	r3, r6\n\t"
12479 #endif
12480 #ifdef WOLFSSL_KEIL
12481         "adcs	r4, r4, %[r]\n\t"
12482 #elif defined(__clang__)
12483         "adcs	r4, %[r]\n\t"
12484 #else
12485         "adc	r4, %[r]\n\t"
12486 #endif
12487 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12488         "adds	r2, r2, r5\n\t"
12489 #else
12490         "add	r2, r2, r5\n\t"
12491 #endif
12492 #ifdef WOLFSSL_KEIL
12493         "adcs	r3, r3, r6\n\t"
12494 #elif defined(__clang__)
12495         "adcs	r3, r6\n\t"
12496 #else
12497         "adc	r3, r6\n\t"
12498 #endif
12499 #ifdef WOLFSSL_KEIL
12500         "adcs	r4, r4, %[r]\n\t"
12501 #elif defined(__clang__)
12502         "adcs	r4, %[r]\n\t"
12503 #else
12504         "adc	r4, %[r]\n\t"
12505 #endif
12506 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12507         "lsrs	r5, %[a], #16\n\t"
12508 #else
12509         "lsr	r5, %[a], #16\n\t"
12510 #endif
12511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12512         "lsrs	r6, r7, #16\n\t"
12513 #else
12514         "lsr	r6, r7, #16\n\t"
12515 #endif
12516 #ifdef WOLFSSL_KEIL
12517         "muls	r6, r5, r6\n\t"
12518 #elif defined(__clang__)
12519         "muls	r6, r5\n\t"
12520 #else
12521         "mul	r6, r5\n\t"
12522 #endif
12523 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12524         "adds	r3, r3, r6\n\t"
12525 #else
12526         "add	r3, r3, r6\n\t"
12527 #endif
12528 #ifdef WOLFSSL_KEIL
12529         "adcs	r4, r4, %[r]\n\t"
12530 #elif defined(__clang__)
12531         "adcs	r4, %[r]\n\t"
12532 #else
12533         "adc	r4, %[r]\n\t"
12534 #endif
12535 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12536         "adds	r3, r3, r6\n\t"
12537 #else
12538         "add	r3, r3, r6\n\t"
12539 #endif
12540 #ifdef WOLFSSL_KEIL
12541         "adcs	r4, r4, %[r]\n\t"
12542 #elif defined(__clang__)
12543         "adcs	r4, %[r]\n\t"
12544 #else
12545         "adc	r4, %[r]\n\t"
12546 #endif
12547         "uxth	r6, r7\n\t"
12548 #ifdef WOLFSSL_KEIL
12549         "muls	r5, r6, r5\n\t"
12550 #elif defined(__clang__)
12551         "muls	r5, r6\n\t"
12552 #else
12553         "mul	r5, r6\n\t"
12554 #endif
12555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12556         "lsrs	r6, r5, #16\n\t"
12557 #else
12558         "lsr	r6, r5, #16\n\t"
12559 #endif
12560 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12561         "lsls	r5, r5, #16\n\t"
12562 #else
12563         "lsl	r5, r5, #16\n\t"
12564 #endif
12565 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12566         "adds	r2, r2, r5\n\t"
12567 #else
12568         "add	r2, r2, r5\n\t"
12569 #endif
12570 #ifdef WOLFSSL_KEIL
12571         "adcs	r3, r3, r6\n\t"
12572 #elif defined(__clang__)
12573         "adcs	r3, r6\n\t"
12574 #else
12575         "adc	r3, r6\n\t"
12576 #endif
12577 #ifdef WOLFSSL_KEIL
12578         "adcs	r4, r4, %[r]\n\t"
12579 #elif defined(__clang__)
12580         "adcs	r4, %[r]\n\t"
12581 #else
12582         "adc	r4, %[r]\n\t"
12583 #endif
12584 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12585         "adds	r2, r2, r5\n\t"
12586 #else
12587         "add	r2, r2, r5\n\t"
12588 #endif
12589 #ifdef WOLFSSL_KEIL
12590         "adcs	r3, r3, r6\n\t"
12591 #elif defined(__clang__)
12592         "adcs	r3, r6\n\t"
12593 #else
12594         "adc	r3, r6\n\t"
12595 #endif
12596 #ifdef WOLFSSL_KEIL
12597         "adcs	r4, r4, %[r]\n\t"
12598 #elif defined(__clang__)
12599         "adcs	r4, %[r]\n\t"
12600 #else
12601         "adc	r4, %[r]\n\t"
12602 #endif
12603         "#  A[3] * A[3]\n\t"
12604         "mov	r7, lr\n\t"
12605 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12606         "lsrs	r6, r7, #16\n\t"
12607 #else
12608         "lsr	r6, r7, #16\n\t"
12609 #endif
12610         "uxth	r5, r7\n\t"
12611 #ifdef WOLFSSL_KEIL
12612         "muls	r5, r5, r5\n\t"
12613 #elif defined(__clang__)
12614         "muls	r5, r5\n\t"
12615 #else
12616         "mul	r5, r5\n\t"
12617 #endif
12618 #ifdef WOLFSSL_KEIL
12619         "muls	r6, r6, r6\n\t"
12620 #elif defined(__clang__)
12621         "muls	r6, r6\n\t"
12622 #else
12623         "mul	r6, r6\n\t"
12624 #endif
12625 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12626         "adds	r2, r2, r5\n\t"
12627 #else
12628         "add	r2, r2, r5\n\t"
12629 #endif
12630 #ifdef WOLFSSL_KEIL
12631         "adcs	r3, r3, r6\n\t"
12632 #elif defined(__clang__)
12633         "adcs	r3, r6\n\t"
12634 #else
12635         "adc	r3, r6\n\t"
12636 #endif
12637 #ifdef WOLFSSL_KEIL
12638         "adcs	r4, r4, %[r]\n\t"
12639 #elif defined(__clang__)
12640         "adcs	r4, %[r]\n\t"
12641 #else
12642         "adc	r4, %[r]\n\t"
12643 #endif
12644 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12645         "lsrs	r6, r7, #16\n\t"
12646 #else
12647         "lsr	r6, r7, #16\n\t"
12648 #endif
12649         "uxth	r5, r7\n\t"
12650 #ifdef WOLFSSL_KEIL
12651         "muls	r5, r6, r5\n\t"
12652 #elif defined(__clang__)
12653         "muls	r5, r6\n\t"
12654 #else
12655         "mul	r5, r6\n\t"
12656 #endif
12657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12658         "lsrs	r6, r5, #15\n\t"
12659 #else
12660         "lsr	r6, r5, #15\n\t"
12661 #endif
12662 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12663         "lsls	r5, r5, #17\n\t"
12664 #else
12665         "lsl	r5, r5, #17\n\t"
12666 #endif
12667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12668         "adds	r2, r2, r5\n\t"
12669 #else
12670         "add	r2, r2, r5\n\t"
12671 #endif
12672 #ifdef WOLFSSL_KEIL
12673         "adcs	r3, r3, r6\n\t"
12674 #elif defined(__clang__)
12675         "adcs	r3, r6\n\t"
12676 #else
12677         "adc	r3, r6\n\t"
12678 #endif
12679 #ifdef WOLFSSL_KEIL
12680         "adcs	r4, r4, %[r]\n\t"
12681 #elif defined(__clang__)
12682         "adcs	r4, %[r]\n\t"
12683 #else
12684         "adc	r4, %[r]\n\t"
12685 #endif
12686         "str	r2, [sp, #24]\n\t"
12687         "#  A[4] * A[3]\n\t"
12688         "movs	r2, #0\n\t"
12689         "mov	%[a], r9\n\t"
12690         "ldr	%[a], [%[a], #16]\n\t"
12691         "uxth	r5, %[a]\n\t"
12692         "uxth	r6, r7\n\t"
12693 #ifdef WOLFSSL_KEIL
12694         "muls	r6, r5, r6\n\t"
12695 #elif defined(__clang__)
12696         "muls	r6, r5\n\t"
12697 #else
12698         "mul	r6, r5\n\t"
12699 #endif
12700 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12701         "adds	r3, r3, r6\n\t"
12702 #else
12703         "add	r3, r3, r6\n\t"
12704 #endif
12705 #ifdef WOLFSSL_KEIL
12706         "adcs	r4, r4, %[r]\n\t"
12707 #elif defined(__clang__)
12708         "adcs	r4, %[r]\n\t"
12709 #else
12710         "adc	r4, %[r]\n\t"
12711 #endif
12712 #ifdef WOLFSSL_KEIL
12713         "adcs	r2, r2, %[r]\n\t"
12714 #elif defined(__clang__)
12715         "adcs	r2, %[r]\n\t"
12716 #else
12717         "adc	r2, %[r]\n\t"
12718 #endif
12719 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12720         "adds	r3, r3, r6\n\t"
12721 #else
12722         "add	r3, r3, r6\n\t"
12723 #endif
12724 #ifdef WOLFSSL_KEIL
12725         "adcs	r4, r4, %[r]\n\t"
12726 #elif defined(__clang__)
12727         "adcs	r4, %[r]\n\t"
12728 #else
12729         "adc	r4, %[r]\n\t"
12730 #endif
12731 #ifdef WOLFSSL_KEIL
12732         "adcs	r2, r2, %[r]\n\t"
12733 #elif defined(__clang__)
12734         "adcs	r2, %[r]\n\t"
12735 #else
12736         "adc	r2, %[r]\n\t"
12737 #endif
12738 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12739         "lsrs	r6, r7, #16\n\t"
12740 #else
12741         "lsr	r6, r7, #16\n\t"
12742 #endif
12743 #ifdef WOLFSSL_KEIL
12744         "muls	r5, r6, r5\n\t"
12745 #elif defined(__clang__)
12746         "muls	r5, r6\n\t"
12747 #else
12748         "mul	r5, r6\n\t"
12749 #endif
12750 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12751         "lsrs	r6, r5, #16\n\t"
12752 #else
12753         "lsr	r6, r5, #16\n\t"
12754 #endif
12755 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12756         "lsls	r5, r5, #16\n\t"
12757 #else
12758         "lsl	r5, r5, #16\n\t"
12759 #endif
12760 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12761         "adds	r3, r3, r5\n\t"
12762 #else
12763         "add	r3, r3, r5\n\t"
12764 #endif
12765 #ifdef WOLFSSL_KEIL
12766         "adcs	r4, r4, r6\n\t"
12767 #elif defined(__clang__)
12768         "adcs	r4, r6\n\t"
12769 #else
12770         "adc	r4, r6\n\t"
12771 #endif
12772 #ifdef WOLFSSL_KEIL
12773         "adcs	r2, r2, %[r]\n\t"
12774 #elif defined(__clang__)
12775         "adcs	r2, %[r]\n\t"
12776 #else
12777         "adc	r2, %[r]\n\t"
12778 #endif
12779 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12780         "adds	r3, r3, r5\n\t"
12781 #else
12782         "add	r3, r3, r5\n\t"
12783 #endif
12784 #ifdef WOLFSSL_KEIL
12785         "adcs	r4, r4, r6\n\t"
12786 #elif defined(__clang__)
12787         "adcs	r4, r6\n\t"
12788 #else
12789         "adc	r4, r6\n\t"
12790 #endif
12791 #ifdef WOLFSSL_KEIL
12792         "adcs	r2, r2, %[r]\n\t"
12793 #elif defined(__clang__)
12794         "adcs	r2, %[r]\n\t"
12795 #else
12796         "adc	r2, %[r]\n\t"
12797 #endif
12798 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12799         "lsrs	r5, %[a], #16\n\t"
12800 #else
12801         "lsr	r5, %[a], #16\n\t"
12802 #endif
12803 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12804         "lsrs	r6, r7, #16\n\t"
12805 #else
12806         "lsr	r6, r7, #16\n\t"
12807 #endif
12808 #ifdef WOLFSSL_KEIL
12809         "muls	r6, r5, r6\n\t"
12810 #elif defined(__clang__)
12811         "muls	r6, r5\n\t"
12812 #else
12813         "mul	r6, r5\n\t"
12814 #endif
12815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12816         "adds	r4, r4, r6\n\t"
12817 #else
12818         "add	r4, r4, r6\n\t"
12819 #endif
12820 #ifdef WOLFSSL_KEIL
12821         "adcs	r2, r2, %[r]\n\t"
12822 #elif defined(__clang__)
12823         "adcs	r2, %[r]\n\t"
12824 #else
12825         "adc	r2, %[r]\n\t"
12826 #endif
12827 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12828         "adds	r4, r4, r6\n\t"
12829 #else
12830         "add	r4, r4, r6\n\t"
12831 #endif
12832 #ifdef WOLFSSL_KEIL
12833         "adcs	r2, r2, %[r]\n\t"
12834 #elif defined(__clang__)
12835         "adcs	r2, %[r]\n\t"
12836 #else
12837         "adc	r2, %[r]\n\t"
12838 #endif
12839         "uxth	r6, r7\n\t"
12840 #ifdef WOLFSSL_KEIL
12841         "muls	r5, r6, r5\n\t"
12842 #elif defined(__clang__)
12843         "muls	r5, r6\n\t"
12844 #else
12845         "mul	r5, r6\n\t"
12846 #endif
12847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12848         "lsrs	r6, r5, #16\n\t"
12849 #else
12850         "lsr	r6, r5, #16\n\t"
12851 #endif
12852 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12853         "lsls	r5, r5, #16\n\t"
12854 #else
12855         "lsl	r5, r5, #16\n\t"
12856 #endif
12857 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12858         "adds	r3, r3, r5\n\t"
12859 #else
12860         "add	r3, r3, r5\n\t"
12861 #endif
12862 #ifdef WOLFSSL_KEIL
12863         "adcs	r4, r4, r6\n\t"
12864 #elif defined(__clang__)
12865         "adcs	r4, r6\n\t"
12866 #else
12867         "adc	r4, r6\n\t"
12868 #endif
12869 #ifdef WOLFSSL_KEIL
12870         "adcs	r2, r2, %[r]\n\t"
12871 #elif defined(__clang__)
12872         "adcs	r2, %[r]\n\t"
12873 #else
12874         "adc	r2, %[r]\n\t"
12875 #endif
12876 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12877         "adds	r3, r3, r5\n\t"
12878 #else
12879         "add	r3, r3, r5\n\t"
12880 #endif
12881 #ifdef WOLFSSL_KEIL
12882         "adcs	r4, r4, r6\n\t"
12883 #elif defined(__clang__)
12884         "adcs	r4, r6\n\t"
12885 #else
12886         "adc	r4, r6\n\t"
12887 #endif
12888 #ifdef WOLFSSL_KEIL
12889         "adcs	r2, r2, %[r]\n\t"
12890 #elif defined(__clang__)
12891         "adcs	r2, %[r]\n\t"
12892 #else
12893         "adc	r2, %[r]\n\t"
12894 #endif
12895         "#  A[5] * A[2]\n\t"
12896         "mov	%[a], r9\n\t"
12897         "mov	r7, r12\n\t"
12898         "ldr	%[a], [%[a], #20]\n\t"
12899         "uxth	r5, %[a]\n\t"
12900         "uxth	r6, r7\n\t"
12901 #ifdef WOLFSSL_KEIL
12902         "muls	r6, r5, r6\n\t"
12903 #elif defined(__clang__)
12904         "muls	r6, r5\n\t"
12905 #else
12906         "mul	r6, r5\n\t"
12907 #endif
12908 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12909         "adds	r3, r3, r6\n\t"
12910 #else
12911         "add	r3, r3, r6\n\t"
12912 #endif
12913 #ifdef WOLFSSL_KEIL
12914         "adcs	r4, r4, %[r]\n\t"
12915 #elif defined(__clang__)
12916         "adcs	r4, %[r]\n\t"
12917 #else
12918         "adc	r4, %[r]\n\t"
12919 #endif
12920 #ifdef WOLFSSL_KEIL
12921         "adcs	r2, r2, %[r]\n\t"
12922 #elif defined(__clang__)
12923         "adcs	r2, %[r]\n\t"
12924 #else
12925         "adc	r2, %[r]\n\t"
12926 #endif
12927 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12928         "adds	r3, r3, r6\n\t"
12929 #else
12930         "add	r3, r3, r6\n\t"
12931 #endif
12932 #ifdef WOLFSSL_KEIL
12933         "adcs	r4, r4, %[r]\n\t"
12934 #elif defined(__clang__)
12935         "adcs	r4, %[r]\n\t"
12936 #else
12937         "adc	r4, %[r]\n\t"
12938 #endif
12939 #ifdef WOLFSSL_KEIL
12940         "adcs	r2, r2, %[r]\n\t"
12941 #elif defined(__clang__)
12942         "adcs	r2, %[r]\n\t"
12943 #else
12944         "adc	r2, %[r]\n\t"
12945 #endif
12946 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12947         "lsrs	r6, r7, #16\n\t"
12948 #else
12949         "lsr	r6, r7, #16\n\t"
12950 #endif
12951 #ifdef WOLFSSL_KEIL
12952         "muls	r5, r6, r5\n\t"
12953 #elif defined(__clang__)
12954         "muls	r5, r6\n\t"
12955 #else
12956         "mul	r5, r6\n\t"
12957 #endif
12958 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12959         "lsrs	r6, r5, #16\n\t"
12960 #else
12961         "lsr	r6, r5, #16\n\t"
12962 #endif
12963 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12964         "lsls	r5, r5, #16\n\t"
12965 #else
12966         "lsl	r5, r5, #16\n\t"
12967 #endif
12968 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12969         "adds	r3, r3, r5\n\t"
12970 #else
12971         "add	r3, r3, r5\n\t"
12972 #endif
12973 #ifdef WOLFSSL_KEIL
12974         "adcs	r4, r4, r6\n\t"
12975 #elif defined(__clang__)
12976         "adcs	r4, r6\n\t"
12977 #else
12978         "adc	r4, r6\n\t"
12979 #endif
12980 #ifdef WOLFSSL_KEIL
12981         "adcs	r2, r2, %[r]\n\t"
12982 #elif defined(__clang__)
12983         "adcs	r2, %[r]\n\t"
12984 #else
12985         "adc	r2, %[r]\n\t"
12986 #endif
12987 #if defined(__clang__) || defined(WOLFSSL_KEIL)
12988         "adds	r3, r3, r5\n\t"
12989 #else
12990         "add	r3, r3, r5\n\t"
12991 #endif
12992 #ifdef WOLFSSL_KEIL
12993         "adcs	r4, r4, r6\n\t"
12994 #elif defined(__clang__)
12995         "adcs	r4, r6\n\t"
12996 #else
12997         "adc	r4, r6\n\t"
12998 #endif
12999 #ifdef WOLFSSL_KEIL
13000         "adcs	r2, r2, %[r]\n\t"
13001 #elif defined(__clang__)
13002         "adcs	r2, %[r]\n\t"
13003 #else
13004         "adc	r2, %[r]\n\t"
13005 #endif
13006 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13007         "lsrs	r5, %[a], #16\n\t"
13008 #else
13009         "lsr	r5, %[a], #16\n\t"
13010 #endif
13011 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13012         "lsrs	r6, r7, #16\n\t"
13013 #else
13014         "lsr	r6, r7, #16\n\t"
13015 #endif
13016 #ifdef WOLFSSL_KEIL
13017         "muls	r6, r5, r6\n\t"
13018 #elif defined(__clang__)
13019         "muls	r6, r5\n\t"
13020 #else
13021         "mul	r6, r5\n\t"
13022 #endif
13023 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13024         "adds	r4, r4, r6\n\t"
13025 #else
13026         "add	r4, r4, r6\n\t"
13027 #endif
13028 #ifdef WOLFSSL_KEIL
13029         "adcs	r2, r2, %[r]\n\t"
13030 #elif defined(__clang__)
13031         "adcs	r2, %[r]\n\t"
13032 #else
13033         "adc	r2, %[r]\n\t"
13034 #endif
13035 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13036         "adds	r4, r4, r6\n\t"
13037 #else
13038         "add	r4, r4, r6\n\t"
13039 #endif
13040 #ifdef WOLFSSL_KEIL
13041         "adcs	r2, r2, %[r]\n\t"
13042 #elif defined(__clang__)
13043         "adcs	r2, %[r]\n\t"
13044 #else
13045         "adc	r2, %[r]\n\t"
13046 #endif
13047         "uxth	r6, r7\n\t"
13048 #ifdef WOLFSSL_KEIL
13049         "muls	r5, r6, r5\n\t"
13050 #elif defined(__clang__)
13051         "muls	r5, r6\n\t"
13052 #else
13053         "mul	r5, r6\n\t"
13054 #endif
13055 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13056         "lsrs	r6, r5, #16\n\t"
13057 #else
13058         "lsr	r6, r5, #16\n\t"
13059 #endif
13060 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13061         "lsls	r5, r5, #16\n\t"
13062 #else
13063         "lsl	r5, r5, #16\n\t"
13064 #endif
13065 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13066         "adds	r3, r3, r5\n\t"
13067 #else
13068         "add	r3, r3, r5\n\t"
13069 #endif
13070 #ifdef WOLFSSL_KEIL
13071         "adcs	r4, r4, r6\n\t"
13072 #elif defined(__clang__)
13073         "adcs	r4, r6\n\t"
13074 #else
13075         "adc	r4, r6\n\t"
13076 #endif
13077 #ifdef WOLFSSL_KEIL
13078         "adcs	r2, r2, %[r]\n\t"
13079 #elif defined(__clang__)
13080         "adcs	r2, %[r]\n\t"
13081 #else
13082         "adc	r2, %[r]\n\t"
13083 #endif
13084 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13085         "adds	r3, r3, r5\n\t"
13086 #else
13087         "add	r3, r3, r5\n\t"
13088 #endif
13089 #ifdef WOLFSSL_KEIL
13090         "adcs	r4, r4, r6\n\t"
13091 #elif defined(__clang__)
13092         "adcs	r4, r6\n\t"
13093 #else
13094         "adc	r4, r6\n\t"
13095 #endif
13096 #ifdef WOLFSSL_KEIL
13097         "adcs	r2, r2, %[r]\n\t"
13098 #elif defined(__clang__)
13099         "adcs	r2, %[r]\n\t"
13100 #else
13101         "adc	r2, %[r]\n\t"
13102 #endif
13103         "#  A[6] * A[1]\n\t"
13104         "mov	%[a], r9\n\t"
13105         "mov	r7, r11\n\t"
13106         "ldr	%[a], [%[a], #24]\n\t"
13107         "uxth	r5, %[a]\n\t"
13108         "uxth	r6, r7\n\t"
13109 #ifdef WOLFSSL_KEIL
13110         "muls	r6, r5, r6\n\t"
13111 #elif defined(__clang__)
13112         "muls	r6, r5\n\t"
13113 #else
13114         "mul	r6, r5\n\t"
13115 #endif
13116 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13117         "adds	r3, r3, r6\n\t"
13118 #else
13119         "add	r3, r3, r6\n\t"
13120 #endif
13121 #ifdef WOLFSSL_KEIL
13122         "adcs	r4, r4, %[r]\n\t"
13123 #elif defined(__clang__)
13124         "adcs	r4, %[r]\n\t"
13125 #else
13126         "adc	r4, %[r]\n\t"
13127 #endif
13128 #ifdef WOLFSSL_KEIL
13129         "adcs	r2, r2, %[r]\n\t"
13130 #elif defined(__clang__)
13131         "adcs	r2, %[r]\n\t"
13132 #else
13133         "adc	r2, %[r]\n\t"
13134 #endif
13135 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13136         "adds	r3, r3, r6\n\t"
13137 #else
13138         "add	r3, r3, r6\n\t"
13139 #endif
13140 #ifdef WOLFSSL_KEIL
13141         "adcs	r4, r4, %[r]\n\t"
13142 #elif defined(__clang__)
13143         "adcs	r4, %[r]\n\t"
13144 #else
13145         "adc	r4, %[r]\n\t"
13146 #endif
13147 #ifdef WOLFSSL_KEIL
13148         "adcs	r2, r2, %[r]\n\t"
13149 #elif defined(__clang__)
13150         "adcs	r2, %[r]\n\t"
13151 #else
13152         "adc	r2, %[r]\n\t"
13153 #endif
13154 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13155         "lsrs	r6, r7, #16\n\t"
13156 #else
13157         "lsr	r6, r7, #16\n\t"
13158 #endif
13159 #ifdef WOLFSSL_KEIL
13160         "muls	r5, r6, r5\n\t"
13161 #elif defined(__clang__)
13162         "muls	r5, r6\n\t"
13163 #else
13164         "mul	r5, r6\n\t"
13165 #endif
13166 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13167         "lsrs	r6, r5, #16\n\t"
13168 #else
13169         "lsr	r6, r5, #16\n\t"
13170 #endif
13171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13172         "lsls	r5, r5, #16\n\t"
13173 #else
13174         "lsl	r5, r5, #16\n\t"
13175 #endif
13176 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13177         "adds	r3, r3, r5\n\t"
13178 #else
13179         "add	r3, r3, r5\n\t"
13180 #endif
13181 #ifdef WOLFSSL_KEIL
13182         "adcs	r4, r4, r6\n\t"
13183 #elif defined(__clang__)
13184         "adcs	r4, r6\n\t"
13185 #else
13186         "adc	r4, r6\n\t"
13187 #endif
13188 #ifdef WOLFSSL_KEIL
13189         "adcs	r2, r2, %[r]\n\t"
13190 #elif defined(__clang__)
13191         "adcs	r2, %[r]\n\t"
13192 #else
13193         "adc	r2, %[r]\n\t"
13194 #endif
13195 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13196         "adds	r3, r3, r5\n\t"
13197 #else
13198         "add	r3, r3, r5\n\t"
13199 #endif
13200 #ifdef WOLFSSL_KEIL
13201         "adcs	r4, r4, r6\n\t"
13202 #elif defined(__clang__)
13203         "adcs	r4, r6\n\t"
13204 #else
13205         "adc	r4, r6\n\t"
13206 #endif
13207 #ifdef WOLFSSL_KEIL
13208         "adcs	r2, r2, %[r]\n\t"
13209 #elif defined(__clang__)
13210         "adcs	r2, %[r]\n\t"
13211 #else
13212         "adc	r2, %[r]\n\t"
13213 #endif
13214 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13215         "lsrs	r5, %[a], #16\n\t"
13216 #else
13217         "lsr	r5, %[a], #16\n\t"
13218 #endif
13219 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13220         "lsrs	r6, r7, #16\n\t"
13221 #else
13222         "lsr	r6, r7, #16\n\t"
13223 #endif
13224 #ifdef WOLFSSL_KEIL
13225         "muls	r6, r5, r6\n\t"
13226 #elif defined(__clang__)
13227         "muls	r6, r5\n\t"
13228 #else
13229         "mul	r6, r5\n\t"
13230 #endif
13231 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13232         "adds	r4, r4, r6\n\t"
13233 #else
13234         "add	r4, r4, r6\n\t"
13235 #endif
13236 #ifdef WOLFSSL_KEIL
13237         "adcs	r2, r2, %[r]\n\t"
13238 #elif defined(__clang__)
13239         "adcs	r2, %[r]\n\t"
13240 #else
13241         "adc	r2, %[r]\n\t"
13242 #endif
13243 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13244         "adds	r4, r4, r6\n\t"
13245 #else
13246         "add	r4, r4, r6\n\t"
13247 #endif
13248 #ifdef WOLFSSL_KEIL
13249         "adcs	r2, r2, %[r]\n\t"
13250 #elif defined(__clang__)
13251         "adcs	r2, %[r]\n\t"
13252 #else
13253         "adc	r2, %[r]\n\t"
13254 #endif
13255         "uxth	r6, r7\n\t"
13256 #ifdef WOLFSSL_KEIL
13257         "muls	r5, r6, r5\n\t"
13258 #elif defined(__clang__)
13259         "muls	r5, r6\n\t"
13260 #else
13261         "mul	r5, r6\n\t"
13262 #endif
13263 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13264         "lsrs	r6, r5, #16\n\t"
13265 #else
13266         "lsr	r6, r5, #16\n\t"
13267 #endif
13268 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13269         "lsls	r5, r5, #16\n\t"
13270 #else
13271         "lsl	r5, r5, #16\n\t"
13272 #endif
13273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13274         "adds	r3, r3, r5\n\t"
13275 #else
13276         "add	r3, r3, r5\n\t"
13277 #endif
13278 #ifdef WOLFSSL_KEIL
13279         "adcs	r4, r4, r6\n\t"
13280 #elif defined(__clang__)
13281         "adcs	r4, r6\n\t"
13282 #else
13283         "adc	r4, r6\n\t"
13284 #endif
13285 #ifdef WOLFSSL_KEIL
13286         "adcs	r2, r2, %[r]\n\t"
13287 #elif defined(__clang__)
13288         "adcs	r2, %[r]\n\t"
13289 #else
13290         "adc	r2, %[r]\n\t"
13291 #endif
13292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13293         "adds	r3, r3, r5\n\t"
13294 #else
13295         "add	r3, r3, r5\n\t"
13296 #endif
13297 #ifdef WOLFSSL_KEIL
13298         "adcs	r4, r4, r6\n\t"
13299 #elif defined(__clang__)
13300         "adcs	r4, r6\n\t"
13301 #else
13302         "adc	r4, r6\n\t"
13303 #endif
13304 #ifdef WOLFSSL_KEIL
13305         "adcs	r2, r2, %[r]\n\t"
13306 #elif defined(__clang__)
13307         "adcs	r2, %[r]\n\t"
13308 #else
13309         "adc	r2, %[r]\n\t"
13310 #endif
13311         "#  A[7] * A[0]\n\t"
13312         "mov	%[a], r9\n\t"
13313         "mov	r7, r10\n\t"
13314         "ldr	%[a], [%[a], #28]\n\t"
13315         "uxth	r5, %[a]\n\t"
13316         "uxth	r6, r7\n\t"
13317 #ifdef WOLFSSL_KEIL
13318         "muls	r6, r5, r6\n\t"
13319 #elif defined(__clang__)
13320         "muls	r6, r5\n\t"
13321 #else
13322         "mul	r6, r5\n\t"
13323 #endif
13324 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13325         "adds	r3, r3, r6\n\t"
13326 #else
13327         "add	r3, r3, r6\n\t"
13328 #endif
13329 #ifdef WOLFSSL_KEIL
13330         "adcs	r4, r4, %[r]\n\t"
13331 #elif defined(__clang__)
13332         "adcs	r4, %[r]\n\t"
13333 #else
13334         "adc	r4, %[r]\n\t"
13335 #endif
13336 #ifdef WOLFSSL_KEIL
13337         "adcs	r2, r2, %[r]\n\t"
13338 #elif defined(__clang__)
13339         "adcs	r2, %[r]\n\t"
13340 #else
13341         "adc	r2, %[r]\n\t"
13342 #endif
13343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13344         "adds	r3, r3, r6\n\t"
13345 #else
13346         "add	r3, r3, r6\n\t"
13347 #endif
13348 #ifdef WOLFSSL_KEIL
13349         "adcs	r4, r4, %[r]\n\t"
13350 #elif defined(__clang__)
13351         "adcs	r4, %[r]\n\t"
13352 #else
13353         "adc	r4, %[r]\n\t"
13354 #endif
13355 #ifdef WOLFSSL_KEIL
13356         "adcs	r2, r2, %[r]\n\t"
13357 #elif defined(__clang__)
13358         "adcs	r2, %[r]\n\t"
13359 #else
13360         "adc	r2, %[r]\n\t"
13361 #endif
13362 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13363         "lsrs	r6, r7, #16\n\t"
13364 #else
13365         "lsr	r6, r7, #16\n\t"
13366 #endif
13367 #ifdef WOLFSSL_KEIL
13368         "muls	r5, r6, r5\n\t"
13369 #elif defined(__clang__)
13370         "muls	r5, r6\n\t"
13371 #else
13372         "mul	r5, r6\n\t"
13373 #endif
13374 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13375         "lsrs	r6, r5, #16\n\t"
13376 #else
13377         "lsr	r6, r5, #16\n\t"
13378 #endif
13379 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13380         "lsls	r5, r5, #16\n\t"
13381 #else
13382         "lsl	r5, r5, #16\n\t"
13383 #endif
13384 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13385         "adds	r3, r3, r5\n\t"
13386 #else
13387         "add	r3, r3, r5\n\t"
13388 #endif
13389 #ifdef WOLFSSL_KEIL
13390         "adcs	r4, r4, r6\n\t"
13391 #elif defined(__clang__)
13392         "adcs	r4, r6\n\t"
13393 #else
13394         "adc	r4, r6\n\t"
13395 #endif
13396 #ifdef WOLFSSL_KEIL
13397         "adcs	r2, r2, %[r]\n\t"
13398 #elif defined(__clang__)
13399         "adcs	r2, %[r]\n\t"
13400 #else
13401         "adc	r2, %[r]\n\t"
13402 #endif
13403 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13404         "adds	r3, r3, r5\n\t"
13405 #else
13406         "add	r3, r3, r5\n\t"
13407 #endif
13408 #ifdef WOLFSSL_KEIL
13409         "adcs	r4, r4, r6\n\t"
13410 #elif defined(__clang__)
13411         "adcs	r4, r6\n\t"
13412 #else
13413         "adc	r4, r6\n\t"
13414 #endif
13415 #ifdef WOLFSSL_KEIL
13416         "adcs	r2, r2, %[r]\n\t"
13417 #elif defined(__clang__)
13418         "adcs	r2, %[r]\n\t"
13419 #else
13420         "adc	r2, %[r]\n\t"
13421 #endif
13422 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13423         "lsrs	r5, %[a], #16\n\t"
13424 #else
13425         "lsr	r5, %[a], #16\n\t"
13426 #endif
13427 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13428         "lsrs	r6, r7, #16\n\t"
13429 #else
13430         "lsr	r6, r7, #16\n\t"
13431 #endif
13432 #ifdef WOLFSSL_KEIL
13433         "muls	r6, r5, r6\n\t"
13434 #elif defined(__clang__)
13435         "muls	r6, r5\n\t"
13436 #else
13437         "mul	r6, r5\n\t"
13438 #endif
13439 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13440         "adds	r4, r4, r6\n\t"
13441 #else
13442         "add	r4, r4, r6\n\t"
13443 #endif
13444 #ifdef WOLFSSL_KEIL
13445         "adcs	r2, r2, %[r]\n\t"
13446 #elif defined(__clang__)
13447         "adcs	r2, %[r]\n\t"
13448 #else
13449         "adc	r2, %[r]\n\t"
13450 #endif
13451 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13452         "adds	r4, r4, r6\n\t"
13453 #else
13454         "add	r4, r4, r6\n\t"
13455 #endif
13456 #ifdef WOLFSSL_KEIL
13457         "adcs	r2, r2, %[r]\n\t"
13458 #elif defined(__clang__)
13459         "adcs	r2, %[r]\n\t"
13460 #else
13461         "adc	r2, %[r]\n\t"
13462 #endif
13463         "uxth	r6, r7\n\t"
13464 #ifdef WOLFSSL_KEIL
13465         "muls	r5, r6, r5\n\t"
13466 #elif defined(__clang__)
13467         "muls	r5, r6\n\t"
13468 #else
13469         "mul	r5, r6\n\t"
13470 #endif
13471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13472         "lsrs	r6, r5, #16\n\t"
13473 #else
13474         "lsr	r6, r5, #16\n\t"
13475 #endif
13476 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13477         "lsls	r5, r5, #16\n\t"
13478 #else
13479         "lsl	r5, r5, #16\n\t"
13480 #endif
13481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13482         "adds	r3, r3, r5\n\t"
13483 #else
13484         "add	r3, r3, r5\n\t"
13485 #endif
13486 #ifdef WOLFSSL_KEIL
13487         "adcs	r4, r4, r6\n\t"
13488 #elif defined(__clang__)
13489         "adcs	r4, r6\n\t"
13490 #else
13491         "adc	r4, r6\n\t"
13492 #endif
13493 #ifdef WOLFSSL_KEIL
13494         "adcs	r2, r2, %[r]\n\t"
13495 #elif defined(__clang__)
13496         "adcs	r2, %[r]\n\t"
13497 #else
13498         "adc	r2, %[r]\n\t"
13499 #endif
13500 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13501         "adds	r3, r3, r5\n\t"
13502 #else
13503         "add	r3, r3, r5\n\t"
13504 #endif
13505 #ifdef WOLFSSL_KEIL
13506         "adcs	r4, r4, r6\n\t"
13507 #elif defined(__clang__)
13508         "adcs	r4, r6\n\t"
13509 #else
13510         "adc	r4, r6\n\t"
13511 #endif
13512 #ifdef WOLFSSL_KEIL
13513         "adcs	r2, r2, %[r]\n\t"
13514 #elif defined(__clang__)
13515         "adcs	r2, %[r]\n\t"
13516 #else
13517         "adc	r2, %[r]\n\t"
13518 #endif
13519         "str	r3, [sp, #28]\n\t"
13520         "#  A[7] * A[1]\n\t"
13521         "movs	r3, #0\n\t"
13522         "mov	%[a], r9\n\t"
13523         "mov	r7, r11\n\t"
13524         "ldr	%[a], [%[a], #28]\n\t"
13525         "uxth	r5, %[a]\n\t"
13526         "uxth	r6, r7\n\t"
13527 #ifdef WOLFSSL_KEIL
13528         "muls	r6, r5, r6\n\t"
13529 #elif defined(__clang__)
13530         "muls	r6, r5\n\t"
13531 #else
13532         "mul	r6, r5\n\t"
13533 #endif
13534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13535         "adds	r4, r4, r6\n\t"
13536 #else
13537         "add	r4, r4, r6\n\t"
13538 #endif
13539 #ifdef WOLFSSL_KEIL
13540         "adcs	r2, r2, %[r]\n\t"
13541 #elif defined(__clang__)
13542         "adcs	r2, %[r]\n\t"
13543 #else
13544         "adc	r2, %[r]\n\t"
13545 #endif
13546 #ifdef WOLFSSL_KEIL
13547         "adcs	r3, r3, %[r]\n\t"
13548 #elif defined(__clang__)
13549         "adcs	r3, %[r]\n\t"
13550 #else
13551         "adc	r3, %[r]\n\t"
13552 #endif
13553 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13554         "adds	r4, r4, r6\n\t"
13555 #else
13556         "add	r4, r4, r6\n\t"
13557 #endif
13558 #ifdef WOLFSSL_KEIL
13559         "adcs	r2, r2, %[r]\n\t"
13560 #elif defined(__clang__)
13561         "adcs	r2, %[r]\n\t"
13562 #else
13563         "adc	r2, %[r]\n\t"
13564 #endif
13565 #ifdef WOLFSSL_KEIL
13566         "adcs	r3, r3, %[r]\n\t"
13567 #elif defined(__clang__)
13568         "adcs	r3, %[r]\n\t"
13569 #else
13570         "adc	r3, %[r]\n\t"
13571 #endif
13572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13573         "lsrs	r6, r7, #16\n\t"
13574 #else
13575         "lsr	r6, r7, #16\n\t"
13576 #endif
13577 #ifdef WOLFSSL_KEIL
13578         "muls	r5, r6, r5\n\t"
13579 #elif defined(__clang__)
13580         "muls	r5, r6\n\t"
13581 #else
13582         "mul	r5, r6\n\t"
13583 #endif
13584 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13585         "lsrs	r6, r5, #16\n\t"
13586 #else
13587         "lsr	r6, r5, #16\n\t"
13588 #endif
13589 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13590         "lsls	r5, r5, #16\n\t"
13591 #else
13592         "lsl	r5, r5, #16\n\t"
13593 #endif
13594 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13595         "adds	r4, r4, r5\n\t"
13596 #else
13597         "add	r4, r4, r5\n\t"
13598 #endif
13599 #ifdef WOLFSSL_KEIL
13600         "adcs	r2, r2, r6\n\t"
13601 #elif defined(__clang__)
13602         "adcs	r2, r6\n\t"
13603 #else
13604         "adc	r2, r6\n\t"
13605 #endif
13606 #ifdef WOLFSSL_KEIL
13607         "adcs	r3, r3, %[r]\n\t"
13608 #elif defined(__clang__)
13609         "adcs	r3, %[r]\n\t"
13610 #else
13611         "adc	r3, %[r]\n\t"
13612 #endif
13613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13614         "adds	r4, r4, r5\n\t"
13615 #else
13616         "add	r4, r4, r5\n\t"
13617 #endif
13618 #ifdef WOLFSSL_KEIL
13619         "adcs	r2, r2, r6\n\t"
13620 #elif defined(__clang__)
13621         "adcs	r2, r6\n\t"
13622 #else
13623         "adc	r2, r6\n\t"
13624 #endif
13625 #ifdef WOLFSSL_KEIL
13626         "adcs	r3, r3, %[r]\n\t"
13627 #elif defined(__clang__)
13628         "adcs	r3, %[r]\n\t"
13629 #else
13630         "adc	r3, %[r]\n\t"
13631 #endif
13632 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13633         "lsrs	r5, %[a], #16\n\t"
13634 #else
13635         "lsr	r5, %[a], #16\n\t"
13636 #endif
13637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13638         "lsrs	r6, r7, #16\n\t"
13639 #else
13640         "lsr	r6, r7, #16\n\t"
13641 #endif
13642 #ifdef WOLFSSL_KEIL
13643         "muls	r6, r5, r6\n\t"
13644 #elif defined(__clang__)
13645         "muls	r6, r5\n\t"
13646 #else
13647         "mul	r6, r5\n\t"
13648 #endif
13649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13650         "adds	r2, r2, r6\n\t"
13651 #else
13652         "add	r2, r2, r6\n\t"
13653 #endif
13654 #ifdef WOLFSSL_KEIL
13655         "adcs	r3, r3, %[r]\n\t"
13656 #elif defined(__clang__)
13657         "adcs	r3, %[r]\n\t"
13658 #else
13659         "adc	r3, %[r]\n\t"
13660 #endif
13661 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13662         "adds	r2, r2, r6\n\t"
13663 #else
13664         "add	r2, r2, r6\n\t"
13665 #endif
13666 #ifdef WOLFSSL_KEIL
13667         "adcs	r3, r3, %[r]\n\t"
13668 #elif defined(__clang__)
13669         "adcs	r3, %[r]\n\t"
13670 #else
13671         "adc	r3, %[r]\n\t"
13672 #endif
13673         "uxth	r6, r7\n\t"
13674 #ifdef WOLFSSL_KEIL
13675         "muls	r5, r6, r5\n\t"
13676 #elif defined(__clang__)
13677         "muls	r5, r6\n\t"
13678 #else
13679         "mul	r5, r6\n\t"
13680 #endif
13681 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13682         "lsrs	r6, r5, #16\n\t"
13683 #else
13684         "lsr	r6, r5, #16\n\t"
13685 #endif
13686 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13687         "lsls	r5, r5, #16\n\t"
13688 #else
13689         "lsl	r5, r5, #16\n\t"
13690 #endif
13691 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13692         "adds	r4, r4, r5\n\t"
13693 #else
13694         "add	r4, r4, r5\n\t"
13695 #endif
13696 #ifdef WOLFSSL_KEIL
13697         "adcs	r2, r2, r6\n\t"
13698 #elif defined(__clang__)
13699         "adcs	r2, r6\n\t"
13700 #else
13701         "adc	r2, r6\n\t"
13702 #endif
13703 #ifdef WOLFSSL_KEIL
13704         "adcs	r3, r3, %[r]\n\t"
13705 #elif defined(__clang__)
13706         "adcs	r3, %[r]\n\t"
13707 #else
13708         "adc	r3, %[r]\n\t"
13709 #endif
13710 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13711         "adds	r4, r4, r5\n\t"
13712 #else
13713         "add	r4, r4, r5\n\t"
13714 #endif
13715 #ifdef WOLFSSL_KEIL
13716         "adcs	r2, r2, r6\n\t"
13717 #elif defined(__clang__)
13718         "adcs	r2, r6\n\t"
13719 #else
13720         "adc	r2, r6\n\t"
13721 #endif
13722 #ifdef WOLFSSL_KEIL
13723         "adcs	r3, r3, %[r]\n\t"
13724 #elif defined(__clang__)
13725         "adcs	r3, %[r]\n\t"
13726 #else
13727         "adc	r3, %[r]\n\t"
13728 #endif
13729         "#  A[6] * A[2]\n\t"
13730         "mov	%[a], r9\n\t"
13731         "mov	r7, r12\n\t"
13732         "ldr	%[a], [%[a], #24]\n\t"
13733         "uxth	r5, %[a]\n\t"
13734         "uxth	r6, r7\n\t"
13735 #ifdef WOLFSSL_KEIL
13736         "muls	r6, r5, r6\n\t"
13737 #elif defined(__clang__)
13738         "muls	r6, r5\n\t"
13739 #else
13740         "mul	r6, r5\n\t"
13741 #endif
13742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13743         "adds	r4, r4, r6\n\t"
13744 #else
13745         "add	r4, r4, r6\n\t"
13746 #endif
13747 #ifdef WOLFSSL_KEIL
13748         "adcs	r2, r2, %[r]\n\t"
13749 #elif defined(__clang__)
13750         "adcs	r2, %[r]\n\t"
13751 #else
13752         "adc	r2, %[r]\n\t"
13753 #endif
13754 #ifdef WOLFSSL_KEIL
13755         "adcs	r3, r3, %[r]\n\t"
13756 #elif defined(__clang__)
13757         "adcs	r3, %[r]\n\t"
13758 #else
13759         "adc	r3, %[r]\n\t"
13760 #endif
13761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13762         "adds	r4, r4, r6\n\t"
13763 #else
13764         "add	r4, r4, r6\n\t"
13765 #endif
13766 #ifdef WOLFSSL_KEIL
13767         "adcs	r2, r2, %[r]\n\t"
13768 #elif defined(__clang__)
13769         "adcs	r2, %[r]\n\t"
13770 #else
13771         "adc	r2, %[r]\n\t"
13772 #endif
13773 #ifdef WOLFSSL_KEIL
13774         "adcs	r3, r3, %[r]\n\t"
13775 #elif defined(__clang__)
13776         "adcs	r3, %[r]\n\t"
13777 #else
13778         "adc	r3, %[r]\n\t"
13779 #endif
13780 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13781         "lsrs	r6, r7, #16\n\t"
13782 #else
13783         "lsr	r6, r7, #16\n\t"
13784 #endif
13785 #ifdef WOLFSSL_KEIL
13786         "muls	r5, r6, r5\n\t"
13787 #elif defined(__clang__)
13788         "muls	r5, r6\n\t"
13789 #else
13790         "mul	r5, r6\n\t"
13791 #endif
13792 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13793         "lsrs	r6, r5, #16\n\t"
13794 #else
13795         "lsr	r6, r5, #16\n\t"
13796 #endif
13797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13798         "lsls	r5, r5, #16\n\t"
13799 #else
13800         "lsl	r5, r5, #16\n\t"
13801 #endif
13802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13803         "adds	r4, r4, r5\n\t"
13804 #else
13805         "add	r4, r4, r5\n\t"
13806 #endif
13807 #ifdef WOLFSSL_KEIL
13808         "adcs	r2, r2, r6\n\t"
13809 #elif defined(__clang__)
13810         "adcs	r2, r6\n\t"
13811 #else
13812         "adc	r2, r6\n\t"
13813 #endif
13814 #ifdef WOLFSSL_KEIL
13815         "adcs	r3, r3, %[r]\n\t"
13816 #elif defined(__clang__)
13817         "adcs	r3, %[r]\n\t"
13818 #else
13819         "adc	r3, %[r]\n\t"
13820 #endif
13821 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13822         "adds	r4, r4, r5\n\t"
13823 #else
13824         "add	r4, r4, r5\n\t"
13825 #endif
13826 #ifdef WOLFSSL_KEIL
13827         "adcs	r2, r2, r6\n\t"
13828 #elif defined(__clang__)
13829         "adcs	r2, r6\n\t"
13830 #else
13831         "adc	r2, r6\n\t"
13832 #endif
13833 #ifdef WOLFSSL_KEIL
13834         "adcs	r3, r3, %[r]\n\t"
13835 #elif defined(__clang__)
13836         "adcs	r3, %[r]\n\t"
13837 #else
13838         "adc	r3, %[r]\n\t"
13839 #endif
13840 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13841         "lsrs	r5, %[a], #16\n\t"
13842 #else
13843         "lsr	r5, %[a], #16\n\t"
13844 #endif
13845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13846         "lsrs	r6, r7, #16\n\t"
13847 #else
13848         "lsr	r6, r7, #16\n\t"
13849 #endif
13850 #ifdef WOLFSSL_KEIL
13851         "muls	r6, r5, r6\n\t"
13852 #elif defined(__clang__)
13853         "muls	r6, r5\n\t"
13854 #else
13855         "mul	r6, r5\n\t"
13856 #endif
13857 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13858         "adds	r2, r2, r6\n\t"
13859 #else
13860         "add	r2, r2, r6\n\t"
13861 #endif
13862 #ifdef WOLFSSL_KEIL
13863         "adcs	r3, r3, %[r]\n\t"
13864 #elif defined(__clang__)
13865         "adcs	r3, %[r]\n\t"
13866 #else
13867         "adc	r3, %[r]\n\t"
13868 #endif
13869 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13870         "adds	r2, r2, r6\n\t"
13871 #else
13872         "add	r2, r2, r6\n\t"
13873 #endif
13874 #ifdef WOLFSSL_KEIL
13875         "adcs	r3, r3, %[r]\n\t"
13876 #elif defined(__clang__)
13877         "adcs	r3, %[r]\n\t"
13878 #else
13879         "adc	r3, %[r]\n\t"
13880 #endif
13881         "uxth	r6, r7\n\t"
13882 #ifdef WOLFSSL_KEIL
13883         "muls	r5, r6, r5\n\t"
13884 #elif defined(__clang__)
13885         "muls	r5, r6\n\t"
13886 #else
13887         "mul	r5, r6\n\t"
13888 #endif
13889 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13890         "lsrs	r6, r5, #16\n\t"
13891 #else
13892         "lsr	r6, r5, #16\n\t"
13893 #endif
13894 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13895         "lsls	r5, r5, #16\n\t"
13896 #else
13897         "lsl	r5, r5, #16\n\t"
13898 #endif
13899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13900         "adds	r4, r4, r5\n\t"
13901 #else
13902         "add	r4, r4, r5\n\t"
13903 #endif
13904 #ifdef WOLFSSL_KEIL
13905         "adcs	r2, r2, r6\n\t"
13906 #elif defined(__clang__)
13907         "adcs	r2, r6\n\t"
13908 #else
13909         "adc	r2, r6\n\t"
13910 #endif
13911 #ifdef WOLFSSL_KEIL
13912         "adcs	r3, r3, %[r]\n\t"
13913 #elif defined(__clang__)
13914         "adcs	r3, %[r]\n\t"
13915 #else
13916         "adc	r3, %[r]\n\t"
13917 #endif
13918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13919         "adds	r4, r4, r5\n\t"
13920 #else
13921         "add	r4, r4, r5\n\t"
13922 #endif
13923 #ifdef WOLFSSL_KEIL
13924         "adcs	r2, r2, r6\n\t"
13925 #elif defined(__clang__)
13926         "adcs	r2, r6\n\t"
13927 #else
13928         "adc	r2, r6\n\t"
13929 #endif
13930 #ifdef WOLFSSL_KEIL
13931         "adcs	r3, r3, %[r]\n\t"
13932 #elif defined(__clang__)
13933         "adcs	r3, %[r]\n\t"
13934 #else
13935         "adc	r3, %[r]\n\t"
13936 #endif
13937         "#  A[5] * A[3]\n\t"
13938         "mov	%[a], r9\n\t"
13939         "mov	r7, lr\n\t"
13940         "ldr	%[a], [%[a], #20]\n\t"
13941         "uxth	r5, %[a]\n\t"
13942         "uxth	r6, r7\n\t"
13943 #ifdef WOLFSSL_KEIL
13944         "muls	r6, r5, r6\n\t"
13945 #elif defined(__clang__)
13946         "muls	r6, r5\n\t"
13947 #else
13948         "mul	r6, r5\n\t"
13949 #endif
13950 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13951         "adds	r4, r4, r6\n\t"
13952 #else
13953         "add	r4, r4, r6\n\t"
13954 #endif
13955 #ifdef WOLFSSL_KEIL
13956         "adcs	r2, r2, %[r]\n\t"
13957 #elif defined(__clang__)
13958         "adcs	r2, %[r]\n\t"
13959 #else
13960         "adc	r2, %[r]\n\t"
13961 #endif
13962 #ifdef WOLFSSL_KEIL
13963         "adcs	r3, r3, %[r]\n\t"
13964 #elif defined(__clang__)
13965         "adcs	r3, %[r]\n\t"
13966 #else
13967         "adc	r3, %[r]\n\t"
13968 #endif
13969 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13970         "adds	r4, r4, r6\n\t"
13971 #else
13972         "add	r4, r4, r6\n\t"
13973 #endif
13974 #ifdef WOLFSSL_KEIL
13975         "adcs	r2, r2, %[r]\n\t"
13976 #elif defined(__clang__)
13977         "adcs	r2, %[r]\n\t"
13978 #else
13979         "adc	r2, %[r]\n\t"
13980 #endif
13981 #ifdef WOLFSSL_KEIL
13982         "adcs	r3, r3, %[r]\n\t"
13983 #elif defined(__clang__)
13984         "adcs	r3, %[r]\n\t"
13985 #else
13986         "adc	r3, %[r]\n\t"
13987 #endif
13988 #if defined(__clang__) || defined(WOLFSSL_KEIL)
13989         "lsrs	r6, r7, #16\n\t"
13990 #else
13991         "lsr	r6, r7, #16\n\t"
13992 #endif
13993 #ifdef WOLFSSL_KEIL
13994         "muls	r5, r6, r5\n\t"
13995 #elif defined(__clang__)
13996         "muls	r5, r6\n\t"
13997 #else
13998         "mul	r5, r6\n\t"
13999 #endif
14000 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14001         "lsrs	r6, r5, #16\n\t"
14002 #else
14003         "lsr	r6, r5, #16\n\t"
14004 #endif
14005 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14006         "lsls	r5, r5, #16\n\t"
14007 #else
14008         "lsl	r5, r5, #16\n\t"
14009 #endif
14010 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14011         "adds	r4, r4, r5\n\t"
14012 #else
14013         "add	r4, r4, r5\n\t"
14014 #endif
14015 #ifdef WOLFSSL_KEIL
14016         "adcs	r2, r2, r6\n\t"
14017 #elif defined(__clang__)
14018         "adcs	r2, r6\n\t"
14019 #else
14020         "adc	r2, r6\n\t"
14021 #endif
14022 #ifdef WOLFSSL_KEIL
14023         "adcs	r3, r3, %[r]\n\t"
14024 #elif defined(__clang__)
14025         "adcs	r3, %[r]\n\t"
14026 #else
14027         "adc	r3, %[r]\n\t"
14028 #endif
14029 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14030         "adds	r4, r4, r5\n\t"
14031 #else
14032         "add	r4, r4, r5\n\t"
14033 #endif
14034 #ifdef WOLFSSL_KEIL
14035         "adcs	r2, r2, r6\n\t"
14036 #elif defined(__clang__)
14037         "adcs	r2, r6\n\t"
14038 #else
14039         "adc	r2, r6\n\t"
14040 #endif
14041 #ifdef WOLFSSL_KEIL
14042         "adcs	r3, r3, %[r]\n\t"
14043 #elif defined(__clang__)
14044         "adcs	r3, %[r]\n\t"
14045 #else
14046         "adc	r3, %[r]\n\t"
14047 #endif
14048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14049         "lsrs	r5, %[a], #16\n\t"
14050 #else
14051         "lsr	r5, %[a], #16\n\t"
14052 #endif
14053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14054         "lsrs	r6, r7, #16\n\t"
14055 #else
14056         "lsr	r6, r7, #16\n\t"
14057 #endif
14058 #ifdef WOLFSSL_KEIL
14059         "muls	r6, r5, r6\n\t"
14060 #elif defined(__clang__)
14061         "muls	r6, r5\n\t"
14062 #else
14063         "mul	r6, r5\n\t"
14064 #endif
14065 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14066         "adds	r2, r2, r6\n\t"
14067 #else
14068         "add	r2, r2, r6\n\t"
14069 #endif
14070 #ifdef WOLFSSL_KEIL
14071         "adcs	r3, r3, %[r]\n\t"
14072 #elif defined(__clang__)
14073         "adcs	r3, %[r]\n\t"
14074 #else
14075         "adc	r3, %[r]\n\t"
14076 #endif
14077 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14078         "adds	r2, r2, r6\n\t"
14079 #else
14080         "add	r2, r2, r6\n\t"
14081 #endif
14082 #ifdef WOLFSSL_KEIL
14083         "adcs	r3, r3, %[r]\n\t"
14084 #elif defined(__clang__)
14085         "adcs	r3, %[r]\n\t"
14086 #else
14087         "adc	r3, %[r]\n\t"
14088 #endif
14089         "uxth	r6, r7\n\t"
14090 #ifdef WOLFSSL_KEIL
14091         "muls	r5, r6, r5\n\t"
14092 #elif defined(__clang__)
14093         "muls	r5, r6\n\t"
14094 #else
14095         "mul	r5, r6\n\t"
14096 #endif
14097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14098         "lsrs	r6, r5, #16\n\t"
14099 #else
14100         "lsr	r6, r5, #16\n\t"
14101 #endif
14102 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14103         "lsls	r5, r5, #16\n\t"
14104 #else
14105         "lsl	r5, r5, #16\n\t"
14106 #endif
14107 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14108         "adds	r4, r4, r5\n\t"
14109 #else
14110         "add	r4, r4, r5\n\t"
14111 #endif
14112 #ifdef WOLFSSL_KEIL
14113         "adcs	r2, r2, r6\n\t"
14114 #elif defined(__clang__)
14115         "adcs	r2, r6\n\t"
14116 #else
14117         "adc	r2, r6\n\t"
14118 #endif
14119 #ifdef WOLFSSL_KEIL
14120         "adcs	r3, r3, %[r]\n\t"
14121 #elif defined(__clang__)
14122         "adcs	r3, %[r]\n\t"
14123 #else
14124         "adc	r3, %[r]\n\t"
14125 #endif
14126 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14127         "adds	r4, r4, r5\n\t"
14128 #else
14129         "add	r4, r4, r5\n\t"
14130 #endif
14131 #ifdef WOLFSSL_KEIL
14132         "adcs	r2, r2, r6\n\t"
14133 #elif defined(__clang__)
14134         "adcs	r2, r6\n\t"
14135 #else
14136         "adc	r2, r6\n\t"
14137 #endif
14138 #ifdef WOLFSSL_KEIL
14139         "adcs	r3, r3, %[r]\n\t"
14140 #elif defined(__clang__)
14141         "adcs	r3, %[r]\n\t"
14142 #else
14143         "adc	r3, %[r]\n\t"
14144 #endif
14145         "#  A[4] * A[4]\n\t"
14146         "mov	%[a], r9\n\t"
14147         "ldr	r7, [%[a], #16]\n\t"
14148 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14149         "lsrs	r6, r7, #16\n\t"
14150 #else
14151         "lsr	r6, r7, #16\n\t"
14152 #endif
14153         "uxth	r5, r7\n\t"
14154 #ifdef WOLFSSL_KEIL
14155         "muls	r5, r5, r5\n\t"
14156 #elif defined(__clang__)
14157         "muls	r5, r5\n\t"
14158 #else
14159         "mul	r5, r5\n\t"
14160 #endif
14161 #ifdef WOLFSSL_KEIL
14162         "muls	r6, r6, r6\n\t"
14163 #elif defined(__clang__)
14164         "muls	r6, r6\n\t"
14165 #else
14166         "mul	r6, r6\n\t"
14167 #endif
14168 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14169         "adds	r4, r4, r5\n\t"
14170 #else
14171         "add	r4, r4, r5\n\t"
14172 #endif
14173 #ifdef WOLFSSL_KEIL
14174         "adcs	r2, r2, r6\n\t"
14175 #elif defined(__clang__)
14176         "adcs	r2, r6\n\t"
14177 #else
14178         "adc	r2, r6\n\t"
14179 #endif
14180 #ifdef WOLFSSL_KEIL
14181         "adcs	r3, r3, %[r]\n\t"
14182 #elif defined(__clang__)
14183         "adcs	r3, %[r]\n\t"
14184 #else
14185         "adc	r3, %[r]\n\t"
14186 #endif
14187 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14188         "lsrs	r6, r7, #16\n\t"
14189 #else
14190         "lsr	r6, r7, #16\n\t"
14191 #endif
14192         "uxth	r5, r7\n\t"
14193 #ifdef WOLFSSL_KEIL
14194         "muls	r5, r6, r5\n\t"
14195 #elif defined(__clang__)
14196         "muls	r5, r6\n\t"
14197 #else
14198         "mul	r5, r6\n\t"
14199 #endif
14200 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14201         "lsrs	r6, r5, #15\n\t"
14202 #else
14203         "lsr	r6, r5, #15\n\t"
14204 #endif
14205 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14206         "lsls	r5, r5, #17\n\t"
14207 #else
14208         "lsl	r5, r5, #17\n\t"
14209 #endif
14210 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14211         "adds	r4, r4, r5\n\t"
14212 #else
14213         "add	r4, r4, r5\n\t"
14214 #endif
14215 #ifdef WOLFSSL_KEIL
14216         "adcs	r2, r2, r6\n\t"
14217 #elif defined(__clang__)
14218         "adcs	r2, r6\n\t"
14219 #else
14220         "adc	r2, r6\n\t"
14221 #endif
14222 #ifdef WOLFSSL_KEIL
14223         "adcs	r3, r3, %[r]\n\t"
14224 #elif defined(__clang__)
14225         "adcs	r3, %[r]\n\t"
14226 #else
14227         "adc	r3, %[r]\n\t"
14228 #endif
14229         "mov	%[r], r8\n\t"
14230         "str	r4, [%[r], #32]\n\t"
14231         "movs	%[r], #0\n\t"
14232         "movs	%[a], #16\n\t"
14233         "add	%[a], %[a], r9\n\t"
14234         "ldm	%[a]!, {r5, r6}\n\t"
14235         "mov	r10, r5\n\t"
14236         "mov	r11, r6\n\t"
14237         "ldm	%[a]!, {r5, r6}\n\t"
14238         "mov	r12, r5\n\t"
14239         "mov	lr, r6\n\t"
14240         "mov	%[a], r9\n\t"
14241         "#  A[5] * A[4]\n\t"
14242         "movs	r4, #0\n\t"
14243         "mov	%[a], r11\n\t"
14244         "uxth	r5, %[a]\n\t"
14245         "uxth	r6, r7\n\t"
14246 #ifdef WOLFSSL_KEIL
14247         "muls	r6, r5, r6\n\t"
14248 #elif defined(__clang__)
14249         "muls	r6, r5\n\t"
14250 #else
14251         "mul	r6, r5\n\t"
14252 #endif
14253 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14254         "adds	r2, r2, r6\n\t"
14255 #else
14256         "add	r2, r2, r6\n\t"
14257 #endif
14258 #ifdef WOLFSSL_KEIL
14259         "adcs	r3, r3, %[r]\n\t"
14260 #elif defined(__clang__)
14261         "adcs	r3, %[r]\n\t"
14262 #else
14263         "adc	r3, %[r]\n\t"
14264 #endif
14265 #ifdef WOLFSSL_KEIL
14266         "adcs	r4, r4, %[r]\n\t"
14267 #elif defined(__clang__)
14268         "adcs	r4, %[r]\n\t"
14269 #else
14270         "adc	r4, %[r]\n\t"
14271 #endif
14272 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14273         "adds	r2, r2, r6\n\t"
14274 #else
14275         "add	r2, r2, r6\n\t"
14276 #endif
14277 #ifdef WOLFSSL_KEIL
14278         "adcs	r3, r3, %[r]\n\t"
14279 #elif defined(__clang__)
14280         "adcs	r3, %[r]\n\t"
14281 #else
14282         "adc	r3, %[r]\n\t"
14283 #endif
14284 #ifdef WOLFSSL_KEIL
14285         "adcs	r4, r4, %[r]\n\t"
14286 #elif defined(__clang__)
14287         "adcs	r4, %[r]\n\t"
14288 #else
14289         "adc	r4, %[r]\n\t"
14290 #endif
14291 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14292         "lsrs	r6, r7, #16\n\t"
14293 #else
14294         "lsr	r6, r7, #16\n\t"
14295 #endif
14296 #ifdef WOLFSSL_KEIL
14297         "muls	r5, r6, r5\n\t"
14298 #elif defined(__clang__)
14299         "muls	r5, r6\n\t"
14300 #else
14301         "mul	r5, r6\n\t"
14302 #endif
14303 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14304         "lsrs	r6, r5, #16\n\t"
14305 #else
14306         "lsr	r6, r5, #16\n\t"
14307 #endif
14308 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14309         "lsls	r5, r5, #16\n\t"
14310 #else
14311         "lsl	r5, r5, #16\n\t"
14312 #endif
14313 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14314         "adds	r2, r2, r5\n\t"
14315 #else
14316         "add	r2, r2, r5\n\t"
14317 #endif
14318 #ifdef WOLFSSL_KEIL
14319         "adcs	r3, r3, r6\n\t"
14320 #elif defined(__clang__)
14321         "adcs	r3, r6\n\t"
14322 #else
14323         "adc	r3, r6\n\t"
14324 #endif
14325 #ifdef WOLFSSL_KEIL
14326         "adcs	r4, r4, %[r]\n\t"
14327 #elif defined(__clang__)
14328         "adcs	r4, %[r]\n\t"
14329 #else
14330         "adc	r4, %[r]\n\t"
14331 #endif
14332 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14333         "adds	r2, r2, r5\n\t"
14334 #else
14335         "add	r2, r2, r5\n\t"
14336 #endif
14337 #ifdef WOLFSSL_KEIL
14338         "adcs	r3, r3, r6\n\t"
14339 #elif defined(__clang__)
14340         "adcs	r3, r6\n\t"
14341 #else
14342         "adc	r3, r6\n\t"
14343 #endif
14344 #ifdef WOLFSSL_KEIL
14345         "adcs	r4, r4, %[r]\n\t"
14346 #elif defined(__clang__)
14347         "adcs	r4, %[r]\n\t"
14348 #else
14349         "adc	r4, %[r]\n\t"
14350 #endif
14351 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14352         "lsrs	r5, %[a], #16\n\t"
14353 #else
14354         "lsr	r5, %[a], #16\n\t"
14355 #endif
14356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14357         "lsrs	r6, r7, #16\n\t"
14358 #else
14359         "lsr	r6, r7, #16\n\t"
14360 #endif
14361 #ifdef WOLFSSL_KEIL
14362         "muls	r6, r5, r6\n\t"
14363 #elif defined(__clang__)
14364         "muls	r6, r5\n\t"
14365 #else
14366         "mul	r6, r5\n\t"
14367 #endif
14368 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14369         "adds	r3, r3, r6\n\t"
14370 #else
14371         "add	r3, r3, r6\n\t"
14372 #endif
14373 #ifdef WOLFSSL_KEIL
14374         "adcs	r4, r4, %[r]\n\t"
14375 #elif defined(__clang__)
14376         "adcs	r4, %[r]\n\t"
14377 #else
14378         "adc	r4, %[r]\n\t"
14379 #endif
14380 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14381         "adds	r3, r3, r6\n\t"
14382 #else
14383         "add	r3, r3, r6\n\t"
14384 #endif
14385 #ifdef WOLFSSL_KEIL
14386         "adcs	r4, r4, %[r]\n\t"
14387 #elif defined(__clang__)
14388         "adcs	r4, %[r]\n\t"
14389 #else
14390         "adc	r4, %[r]\n\t"
14391 #endif
14392         "uxth	r6, r7\n\t"
14393 #ifdef WOLFSSL_KEIL
14394         "muls	r5, r6, r5\n\t"
14395 #elif defined(__clang__)
14396         "muls	r5, r6\n\t"
14397 #else
14398         "mul	r5, r6\n\t"
14399 #endif
14400 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14401         "lsrs	r6, r5, #16\n\t"
14402 #else
14403         "lsr	r6, r5, #16\n\t"
14404 #endif
14405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14406         "lsls	r5, r5, #16\n\t"
14407 #else
14408         "lsl	r5, r5, #16\n\t"
14409 #endif
14410 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14411         "adds	r2, r2, r5\n\t"
14412 #else
14413         "add	r2, r2, r5\n\t"
14414 #endif
14415 #ifdef WOLFSSL_KEIL
14416         "adcs	r3, r3, r6\n\t"
14417 #elif defined(__clang__)
14418         "adcs	r3, r6\n\t"
14419 #else
14420         "adc	r3, r6\n\t"
14421 #endif
14422 #ifdef WOLFSSL_KEIL
14423         "adcs	r4, r4, %[r]\n\t"
14424 #elif defined(__clang__)
14425         "adcs	r4, %[r]\n\t"
14426 #else
14427         "adc	r4, %[r]\n\t"
14428 #endif
14429 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14430         "adds	r2, r2, r5\n\t"
14431 #else
14432         "add	r2, r2, r5\n\t"
14433 #endif
14434 #ifdef WOLFSSL_KEIL
14435         "adcs	r3, r3, r6\n\t"
14436 #elif defined(__clang__)
14437         "adcs	r3, r6\n\t"
14438 #else
14439         "adc	r3, r6\n\t"
14440 #endif
14441 #ifdef WOLFSSL_KEIL
14442         "adcs	r4, r4, %[r]\n\t"
14443 #elif defined(__clang__)
14444         "adcs	r4, %[r]\n\t"
14445 #else
14446         "adc	r4, %[r]\n\t"
14447 #endif
14448         "#  A[6] * A[3]\n\t"
14449         "mov	%[a], r9\n\t"
14450         "ldr	r7, [%[a], #12]\n\t"
14451         "mov	%[a], r12\n\t"
14452         "uxth	r5, %[a]\n\t"
14453         "uxth	r6, r7\n\t"
14454 #ifdef WOLFSSL_KEIL
14455         "muls	r6, r5, r6\n\t"
14456 #elif defined(__clang__)
14457         "muls	r6, r5\n\t"
14458 #else
14459         "mul	r6, r5\n\t"
14460 #endif
14461 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14462         "adds	r2, r2, r6\n\t"
14463 #else
14464         "add	r2, r2, r6\n\t"
14465 #endif
14466 #ifdef WOLFSSL_KEIL
14467         "adcs	r3, r3, %[r]\n\t"
14468 #elif defined(__clang__)
14469         "adcs	r3, %[r]\n\t"
14470 #else
14471         "adc	r3, %[r]\n\t"
14472 #endif
14473 #ifdef WOLFSSL_KEIL
14474         "adcs	r4, r4, %[r]\n\t"
14475 #elif defined(__clang__)
14476         "adcs	r4, %[r]\n\t"
14477 #else
14478         "adc	r4, %[r]\n\t"
14479 #endif
14480 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14481         "adds	r2, r2, r6\n\t"
14482 #else
14483         "add	r2, r2, r6\n\t"
14484 #endif
14485 #ifdef WOLFSSL_KEIL
14486         "adcs	r3, r3, %[r]\n\t"
14487 #elif defined(__clang__)
14488         "adcs	r3, %[r]\n\t"
14489 #else
14490         "adc	r3, %[r]\n\t"
14491 #endif
14492 #ifdef WOLFSSL_KEIL
14493         "adcs	r4, r4, %[r]\n\t"
14494 #elif defined(__clang__)
14495         "adcs	r4, %[r]\n\t"
14496 #else
14497         "adc	r4, %[r]\n\t"
14498 #endif
14499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14500         "lsrs	r6, r7, #16\n\t"
14501 #else
14502         "lsr	r6, r7, #16\n\t"
14503 #endif
14504 #ifdef WOLFSSL_KEIL
14505         "muls	r5, r6, r5\n\t"
14506 #elif defined(__clang__)
14507         "muls	r5, r6\n\t"
14508 #else
14509         "mul	r5, r6\n\t"
14510 #endif
14511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14512         "lsrs	r6, r5, #16\n\t"
14513 #else
14514         "lsr	r6, r5, #16\n\t"
14515 #endif
14516 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14517         "lsls	r5, r5, #16\n\t"
14518 #else
14519         "lsl	r5, r5, #16\n\t"
14520 #endif
14521 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14522         "adds	r2, r2, r5\n\t"
14523 #else
14524         "add	r2, r2, r5\n\t"
14525 #endif
14526 #ifdef WOLFSSL_KEIL
14527         "adcs	r3, r3, r6\n\t"
14528 #elif defined(__clang__)
14529         "adcs	r3, r6\n\t"
14530 #else
14531         "adc	r3, r6\n\t"
14532 #endif
14533 #ifdef WOLFSSL_KEIL
14534         "adcs	r4, r4, %[r]\n\t"
14535 #elif defined(__clang__)
14536         "adcs	r4, %[r]\n\t"
14537 #else
14538         "adc	r4, %[r]\n\t"
14539 #endif
14540 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14541         "adds	r2, r2, r5\n\t"
14542 #else
14543         "add	r2, r2, r5\n\t"
14544 #endif
14545 #ifdef WOLFSSL_KEIL
14546         "adcs	r3, r3, r6\n\t"
14547 #elif defined(__clang__)
14548         "adcs	r3, r6\n\t"
14549 #else
14550         "adc	r3, r6\n\t"
14551 #endif
14552 #ifdef WOLFSSL_KEIL
14553         "adcs	r4, r4, %[r]\n\t"
14554 #elif defined(__clang__)
14555         "adcs	r4, %[r]\n\t"
14556 #else
14557         "adc	r4, %[r]\n\t"
14558 #endif
14559 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14560         "lsrs	r5, %[a], #16\n\t"
14561 #else
14562         "lsr	r5, %[a], #16\n\t"
14563 #endif
14564 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14565         "lsrs	r6, r7, #16\n\t"
14566 #else
14567         "lsr	r6, r7, #16\n\t"
14568 #endif
14569 #ifdef WOLFSSL_KEIL
14570         "muls	r6, r5, r6\n\t"
14571 #elif defined(__clang__)
14572         "muls	r6, r5\n\t"
14573 #else
14574         "mul	r6, r5\n\t"
14575 #endif
14576 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14577         "adds	r3, r3, r6\n\t"
14578 #else
14579         "add	r3, r3, r6\n\t"
14580 #endif
14581 #ifdef WOLFSSL_KEIL
14582         "adcs	r4, r4, %[r]\n\t"
14583 #elif defined(__clang__)
14584         "adcs	r4, %[r]\n\t"
14585 #else
14586         "adc	r4, %[r]\n\t"
14587 #endif
14588 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14589         "adds	r3, r3, r6\n\t"
14590 #else
14591         "add	r3, r3, r6\n\t"
14592 #endif
14593 #ifdef WOLFSSL_KEIL
14594         "adcs	r4, r4, %[r]\n\t"
14595 #elif defined(__clang__)
14596         "adcs	r4, %[r]\n\t"
14597 #else
14598         "adc	r4, %[r]\n\t"
14599 #endif
14600         "uxth	r6, r7\n\t"
14601 #ifdef WOLFSSL_KEIL
14602         "muls	r5, r6, r5\n\t"
14603 #elif defined(__clang__)
14604         "muls	r5, r6\n\t"
14605 #else
14606         "mul	r5, r6\n\t"
14607 #endif
14608 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14609         "lsrs	r6, r5, #16\n\t"
14610 #else
14611         "lsr	r6, r5, #16\n\t"
14612 #endif
14613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14614         "lsls	r5, r5, #16\n\t"
14615 #else
14616         "lsl	r5, r5, #16\n\t"
14617 #endif
14618 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14619         "adds	r2, r2, r5\n\t"
14620 #else
14621         "add	r2, r2, r5\n\t"
14622 #endif
14623 #ifdef WOLFSSL_KEIL
14624         "adcs	r3, r3, r6\n\t"
14625 #elif defined(__clang__)
14626         "adcs	r3, r6\n\t"
14627 #else
14628         "adc	r3, r6\n\t"
14629 #endif
14630 #ifdef WOLFSSL_KEIL
14631         "adcs	r4, r4, %[r]\n\t"
14632 #elif defined(__clang__)
14633         "adcs	r4, %[r]\n\t"
14634 #else
14635         "adc	r4, %[r]\n\t"
14636 #endif
14637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14638         "adds	r2, r2, r5\n\t"
14639 #else
14640         "add	r2, r2, r5\n\t"
14641 #endif
14642 #ifdef WOLFSSL_KEIL
14643         "adcs	r3, r3, r6\n\t"
14644 #elif defined(__clang__)
14645         "adcs	r3, r6\n\t"
14646 #else
14647         "adc	r3, r6\n\t"
14648 #endif
14649 #ifdef WOLFSSL_KEIL
14650         "adcs	r4, r4, %[r]\n\t"
14651 #elif defined(__clang__)
14652         "adcs	r4, %[r]\n\t"
14653 #else
14654         "adc	r4, %[r]\n\t"
14655 #endif
14656         "#  A[7] * A[2]\n\t"
14657         "mov	%[a], r9\n\t"
14658         "ldr	r7, [%[a], #8]\n\t"
14659         "mov	%[a], lr\n\t"
14660         "uxth	r5, %[a]\n\t"
14661         "uxth	r6, r7\n\t"
14662 #ifdef WOLFSSL_KEIL
14663         "muls	r6, r5, r6\n\t"
14664 #elif defined(__clang__)
14665         "muls	r6, r5\n\t"
14666 #else
14667         "mul	r6, r5\n\t"
14668 #endif
14669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14670         "adds	r2, r2, r6\n\t"
14671 #else
14672         "add	r2, r2, r6\n\t"
14673 #endif
14674 #ifdef WOLFSSL_KEIL
14675         "adcs	r3, r3, %[r]\n\t"
14676 #elif defined(__clang__)
14677         "adcs	r3, %[r]\n\t"
14678 #else
14679         "adc	r3, %[r]\n\t"
14680 #endif
14681 #ifdef WOLFSSL_KEIL
14682         "adcs	r4, r4, %[r]\n\t"
14683 #elif defined(__clang__)
14684         "adcs	r4, %[r]\n\t"
14685 #else
14686         "adc	r4, %[r]\n\t"
14687 #endif
14688 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14689         "adds	r2, r2, r6\n\t"
14690 #else
14691         "add	r2, r2, r6\n\t"
14692 #endif
14693 #ifdef WOLFSSL_KEIL
14694         "adcs	r3, r3, %[r]\n\t"
14695 #elif defined(__clang__)
14696         "adcs	r3, %[r]\n\t"
14697 #else
14698         "adc	r3, %[r]\n\t"
14699 #endif
14700 #ifdef WOLFSSL_KEIL
14701         "adcs	r4, r4, %[r]\n\t"
14702 #elif defined(__clang__)
14703         "adcs	r4, %[r]\n\t"
14704 #else
14705         "adc	r4, %[r]\n\t"
14706 #endif
14707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14708         "lsrs	r6, r7, #16\n\t"
14709 #else
14710         "lsr	r6, r7, #16\n\t"
14711 #endif
14712 #ifdef WOLFSSL_KEIL
14713         "muls	r5, r6, r5\n\t"
14714 #elif defined(__clang__)
14715         "muls	r5, r6\n\t"
14716 #else
14717         "mul	r5, r6\n\t"
14718 #endif
14719 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14720         "lsrs	r6, r5, #16\n\t"
14721 #else
14722         "lsr	r6, r5, #16\n\t"
14723 #endif
14724 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14725         "lsls	r5, r5, #16\n\t"
14726 #else
14727         "lsl	r5, r5, #16\n\t"
14728 #endif
14729 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14730         "adds	r2, r2, r5\n\t"
14731 #else
14732         "add	r2, r2, r5\n\t"
14733 #endif
14734 #ifdef WOLFSSL_KEIL
14735         "adcs	r3, r3, r6\n\t"
14736 #elif defined(__clang__)
14737         "adcs	r3, r6\n\t"
14738 #else
14739         "adc	r3, r6\n\t"
14740 #endif
14741 #ifdef WOLFSSL_KEIL
14742         "adcs	r4, r4, %[r]\n\t"
14743 #elif defined(__clang__)
14744         "adcs	r4, %[r]\n\t"
14745 #else
14746         "adc	r4, %[r]\n\t"
14747 #endif
14748 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14749         "adds	r2, r2, r5\n\t"
14750 #else
14751         "add	r2, r2, r5\n\t"
14752 #endif
14753 #ifdef WOLFSSL_KEIL
14754         "adcs	r3, r3, r6\n\t"
14755 #elif defined(__clang__)
14756         "adcs	r3, r6\n\t"
14757 #else
14758         "adc	r3, r6\n\t"
14759 #endif
14760 #ifdef WOLFSSL_KEIL
14761         "adcs	r4, r4, %[r]\n\t"
14762 #elif defined(__clang__)
14763         "adcs	r4, %[r]\n\t"
14764 #else
14765         "adc	r4, %[r]\n\t"
14766 #endif
14767 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14768         "lsrs	r5, %[a], #16\n\t"
14769 #else
14770         "lsr	r5, %[a], #16\n\t"
14771 #endif
14772 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14773         "lsrs	r6, r7, #16\n\t"
14774 #else
14775         "lsr	r6, r7, #16\n\t"
14776 #endif
14777 #ifdef WOLFSSL_KEIL
14778         "muls	r6, r5, r6\n\t"
14779 #elif defined(__clang__)
14780         "muls	r6, r5\n\t"
14781 #else
14782         "mul	r6, r5\n\t"
14783 #endif
14784 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14785         "adds	r3, r3, r6\n\t"
14786 #else
14787         "add	r3, r3, r6\n\t"
14788 #endif
14789 #ifdef WOLFSSL_KEIL
14790         "adcs	r4, r4, %[r]\n\t"
14791 #elif defined(__clang__)
14792         "adcs	r4, %[r]\n\t"
14793 #else
14794         "adc	r4, %[r]\n\t"
14795 #endif
14796 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14797         "adds	r3, r3, r6\n\t"
14798 #else
14799         "add	r3, r3, r6\n\t"
14800 #endif
14801 #ifdef WOLFSSL_KEIL
14802         "adcs	r4, r4, %[r]\n\t"
14803 #elif defined(__clang__)
14804         "adcs	r4, %[r]\n\t"
14805 #else
14806         "adc	r4, %[r]\n\t"
14807 #endif
14808         "uxth	r6, r7\n\t"
14809 #ifdef WOLFSSL_KEIL
14810         "muls	r5, r6, r5\n\t"
14811 #elif defined(__clang__)
14812         "muls	r5, r6\n\t"
14813 #else
14814         "mul	r5, r6\n\t"
14815 #endif
14816 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14817         "lsrs	r6, r5, #16\n\t"
14818 #else
14819         "lsr	r6, r5, #16\n\t"
14820 #endif
14821 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14822         "lsls	r5, r5, #16\n\t"
14823 #else
14824         "lsl	r5, r5, #16\n\t"
14825 #endif
14826 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14827         "adds	r2, r2, r5\n\t"
14828 #else
14829         "add	r2, r2, r5\n\t"
14830 #endif
14831 #ifdef WOLFSSL_KEIL
14832         "adcs	r3, r3, r6\n\t"
14833 #elif defined(__clang__)
14834         "adcs	r3, r6\n\t"
14835 #else
14836         "adc	r3, r6\n\t"
14837 #endif
14838 #ifdef WOLFSSL_KEIL
14839         "adcs	r4, r4, %[r]\n\t"
14840 #elif defined(__clang__)
14841         "adcs	r4, %[r]\n\t"
14842 #else
14843         "adc	r4, %[r]\n\t"
14844 #endif
14845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14846         "adds	r2, r2, r5\n\t"
14847 #else
14848         "add	r2, r2, r5\n\t"
14849 #endif
14850 #ifdef WOLFSSL_KEIL
14851         "adcs	r3, r3, r6\n\t"
14852 #elif defined(__clang__)
14853         "adcs	r3, r6\n\t"
14854 #else
14855         "adc	r3, r6\n\t"
14856 #endif
14857 #ifdef WOLFSSL_KEIL
14858         "adcs	r4, r4, %[r]\n\t"
14859 #elif defined(__clang__)
14860         "adcs	r4, %[r]\n\t"
14861 #else
14862         "adc	r4, %[r]\n\t"
14863 #endif
14864         "mov	%[r], r8\n\t"
14865         "str	r2, [%[r], #36]\n\t"
14866         "movs	%[r], #0\n\t"
14867         "#  A[7] * A[3]\n\t"
14868         "movs	r2, #0\n\t"
14869         "mov	%[a], r9\n\t"
14870         "ldr	r7, [%[a], #12]\n\t"
14871         "mov	%[a], lr\n\t"
14872         "uxth	r5, %[a]\n\t"
14873         "uxth	r6, r7\n\t"
14874 #ifdef WOLFSSL_KEIL
14875         "muls	r6, r5, r6\n\t"
14876 #elif defined(__clang__)
14877         "muls	r6, r5\n\t"
14878 #else
14879         "mul	r6, r5\n\t"
14880 #endif
14881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14882         "adds	r3, r3, r6\n\t"
14883 #else
14884         "add	r3, r3, r6\n\t"
14885 #endif
14886 #ifdef WOLFSSL_KEIL
14887         "adcs	r4, r4, %[r]\n\t"
14888 #elif defined(__clang__)
14889         "adcs	r4, %[r]\n\t"
14890 #else
14891         "adc	r4, %[r]\n\t"
14892 #endif
14893 #ifdef WOLFSSL_KEIL
14894         "adcs	r2, r2, %[r]\n\t"
14895 #elif defined(__clang__)
14896         "adcs	r2, %[r]\n\t"
14897 #else
14898         "adc	r2, %[r]\n\t"
14899 #endif
14900 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14901         "adds	r3, r3, r6\n\t"
14902 #else
14903         "add	r3, r3, r6\n\t"
14904 #endif
14905 #ifdef WOLFSSL_KEIL
14906         "adcs	r4, r4, %[r]\n\t"
14907 #elif defined(__clang__)
14908         "adcs	r4, %[r]\n\t"
14909 #else
14910         "adc	r4, %[r]\n\t"
14911 #endif
14912 #ifdef WOLFSSL_KEIL
14913         "adcs	r2, r2, %[r]\n\t"
14914 #elif defined(__clang__)
14915         "adcs	r2, %[r]\n\t"
14916 #else
14917         "adc	r2, %[r]\n\t"
14918 #endif
14919 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14920         "lsrs	r6, r7, #16\n\t"
14921 #else
14922         "lsr	r6, r7, #16\n\t"
14923 #endif
14924 #ifdef WOLFSSL_KEIL
14925         "muls	r5, r6, r5\n\t"
14926 #elif defined(__clang__)
14927         "muls	r5, r6\n\t"
14928 #else
14929         "mul	r5, r6\n\t"
14930 #endif
14931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14932         "lsrs	r6, r5, #16\n\t"
14933 #else
14934         "lsr	r6, r5, #16\n\t"
14935 #endif
14936 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14937         "lsls	r5, r5, #16\n\t"
14938 #else
14939         "lsl	r5, r5, #16\n\t"
14940 #endif
14941 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14942         "adds	r3, r3, r5\n\t"
14943 #else
14944         "add	r3, r3, r5\n\t"
14945 #endif
14946 #ifdef WOLFSSL_KEIL
14947         "adcs	r4, r4, r6\n\t"
14948 #elif defined(__clang__)
14949         "adcs	r4, r6\n\t"
14950 #else
14951         "adc	r4, r6\n\t"
14952 #endif
14953 #ifdef WOLFSSL_KEIL
14954         "adcs	r2, r2, %[r]\n\t"
14955 #elif defined(__clang__)
14956         "adcs	r2, %[r]\n\t"
14957 #else
14958         "adc	r2, %[r]\n\t"
14959 #endif
14960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14961         "adds	r3, r3, r5\n\t"
14962 #else
14963         "add	r3, r3, r5\n\t"
14964 #endif
14965 #ifdef WOLFSSL_KEIL
14966         "adcs	r4, r4, r6\n\t"
14967 #elif defined(__clang__)
14968         "adcs	r4, r6\n\t"
14969 #else
14970         "adc	r4, r6\n\t"
14971 #endif
14972 #ifdef WOLFSSL_KEIL
14973         "adcs	r2, r2, %[r]\n\t"
14974 #elif defined(__clang__)
14975         "adcs	r2, %[r]\n\t"
14976 #else
14977         "adc	r2, %[r]\n\t"
14978 #endif
14979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14980         "lsrs	r5, %[a], #16\n\t"
14981 #else
14982         "lsr	r5, %[a], #16\n\t"
14983 #endif
14984 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14985         "lsrs	r6, r7, #16\n\t"
14986 #else
14987         "lsr	r6, r7, #16\n\t"
14988 #endif
14989 #ifdef WOLFSSL_KEIL
14990         "muls	r6, r5, r6\n\t"
14991 #elif defined(__clang__)
14992         "muls	r6, r5\n\t"
14993 #else
14994         "mul	r6, r5\n\t"
14995 #endif
14996 #if defined(__clang__) || defined(WOLFSSL_KEIL)
14997         "adds	r4, r4, r6\n\t"
14998 #else
14999         "add	r4, r4, r6\n\t"
15000 #endif
15001 #ifdef WOLFSSL_KEIL
15002         "adcs	r2, r2, %[r]\n\t"
15003 #elif defined(__clang__)
15004         "adcs	r2, %[r]\n\t"
15005 #else
15006         "adc	r2, %[r]\n\t"
15007 #endif
15008 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15009         "adds	r4, r4, r6\n\t"
15010 #else
15011         "add	r4, r4, r6\n\t"
15012 #endif
15013 #ifdef WOLFSSL_KEIL
15014         "adcs	r2, r2, %[r]\n\t"
15015 #elif defined(__clang__)
15016         "adcs	r2, %[r]\n\t"
15017 #else
15018         "adc	r2, %[r]\n\t"
15019 #endif
15020         "uxth	r6, r7\n\t"
15021 #ifdef WOLFSSL_KEIL
15022         "muls	r5, r6, r5\n\t"
15023 #elif defined(__clang__)
15024         "muls	r5, r6\n\t"
15025 #else
15026         "mul	r5, r6\n\t"
15027 #endif
15028 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15029         "lsrs	r6, r5, #16\n\t"
15030 #else
15031         "lsr	r6, r5, #16\n\t"
15032 #endif
15033 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15034         "lsls	r5, r5, #16\n\t"
15035 #else
15036         "lsl	r5, r5, #16\n\t"
15037 #endif
15038 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15039         "adds	r3, r3, r5\n\t"
15040 #else
15041         "add	r3, r3, r5\n\t"
15042 #endif
15043 #ifdef WOLFSSL_KEIL
15044         "adcs	r4, r4, r6\n\t"
15045 #elif defined(__clang__)
15046         "adcs	r4, r6\n\t"
15047 #else
15048         "adc	r4, r6\n\t"
15049 #endif
15050 #ifdef WOLFSSL_KEIL
15051         "adcs	r2, r2, %[r]\n\t"
15052 #elif defined(__clang__)
15053         "adcs	r2, %[r]\n\t"
15054 #else
15055         "adc	r2, %[r]\n\t"
15056 #endif
15057 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15058         "adds	r3, r3, r5\n\t"
15059 #else
15060         "add	r3, r3, r5\n\t"
15061 #endif
15062 #ifdef WOLFSSL_KEIL
15063         "adcs	r4, r4, r6\n\t"
15064 #elif defined(__clang__)
15065         "adcs	r4, r6\n\t"
15066 #else
15067         "adc	r4, r6\n\t"
15068 #endif
15069 #ifdef WOLFSSL_KEIL
15070         "adcs	r2, r2, %[r]\n\t"
15071 #elif defined(__clang__)
15072         "adcs	r2, %[r]\n\t"
15073 #else
15074         "adc	r2, %[r]\n\t"
15075 #endif
15076         "#  A[6] * A[4]\n\t"
15077         "mov	%[a], r9\n\t"
15078         "mov	r7, r10\n\t"
15079         "mov	%[a], r12\n\t"
15080         "uxth	r5, %[a]\n\t"
15081         "uxth	r6, r7\n\t"
15082 #ifdef WOLFSSL_KEIL
15083         "muls	r6, r5, r6\n\t"
15084 #elif defined(__clang__)
15085         "muls	r6, r5\n\t"
15086 #else
15087         "mul	r6, r5\n\t"
15088 #endif
15089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15090         "adds	r3, r3, r6\n\t"
15091 #else
15092         "add	r3, r3, r6\n\t"
15093 #endif
15094 #ifdef WOLFSSL_KEIL
15095         "adcs	r4, r4, %[r]\n\t"
15096 #elif defined(__clang__)
15097         "adcs	r4, %[r]\n\t"
15098 #else
15099         "adc	r4, %[r]\n\t"
15100 #endif
15101 #ifdef WOLFSSL_KEIL
15102         "adcs	r2, r2, %[r]\n\t"
15103 #elif defined(__clang__)
15104         "adcs	r2, %[r]\n\t"
15105 #else
15106         "adc	r2, %[r]\n\t"
15107 #endif
15108 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15109         "adds	r3, r3, r6\n\t"
15110 #else
15111         "add	r3, r3, r6\n\t"
15112 #endif
15113 #ifdef WOLFSSL_KEIL
15114         "adcs	r4, r4, %[r]\n\t"
15115 #elif defined(__clang__)
15116         "adcs	r4, %[r]\n\t"
15117 #else
15118         "adc	r4, %[r]\n\t"
15119 #endif
15120 #ifdef WOLFSSL_KEIL
15121         "adcs	r2, r2, %[r]\n\t"
15122 #elif defined(__clang__)
15123         "adcs	r2, %[r]\n\t"
15124 #else
15125         "adc	r2, %[r]\n\t"
15126 #endif
15127 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15128         "lsrs	r6, r7, #16\n\t"
15129 #else
15130         "lsr	r6, r7, #16\n\t"
15131 #endif
15132 #ifdef WOLFSSL_KEIL
15133         "muls	r5, r6, r5\n\t"
15134 #elif defined(__clang__)
15135         "muls	r5, r6\n\t"
15136 #else
15137         "mul	r5, r6\n\t"
15138 #endif
15139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15140         "lsrs	r6, r5, #16\n\t"
15141 #else
15142         "lsr	r6, r5, #16\n\t"
15143 #endif
15144 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15145         "lsls	r5, r5, #16\n\t"
15146 #else
15147         "lsl	r5, r5, #16\n\t"
15148 #endif
15149 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15150         "adds	r3, r3, r5\n\t"
15151 #else
15152         "add	r3, r3, r5\n\t"
15153 #endif
15154 #ifdef WOLFSSL_KEIL
15155         "adcs	r4, r4, r6\n\t"
15156 #elif defined(__clang__)
15157         "adcs	r4, r6\n\t"
15158 #else
15159         "adc	r4, r6\n\t"
15160 #endif
15161 #ifdef WOLFSSL_KEIL
15162         "adcs	r2, r2, %[r]\n\t"
15163 #elif defined(__clang__)
15164         "adcs	r2, %[r]\n\t"
15165 #else
15166         "adc	r2, %[r]\n\t"
15167 #endif
15168 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15169         "adds	r3, r3, r5\n\t"
15170 #else
15171         "add	r3, r3, r5\n\t"
15172 #endif
15173 #ifdef WOLFSSL_KEIL
15174         "adcs	r4, r4, r6\n\t"
15175 #elif defined(__clang__)
15176         "adcs	r4, r6\n\t"
15177 #else
15178         "adc	r4, r6\n\t"
15179 #endif
15180 #ifdef WOLFSSL_KEIL
15181         "adcs	r2, r2, %[r]\n\t"
15182 #elif defined(__clang__)
15183         "adcs	r2, %[r]\n\t"
15184 #else
15185         "adc	r2, %[r]\n\t"
15186 #endif
15187 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15188         "lsrs	r5, %[a], #16\n\t"
15189 #else
15190         "lsr	r5, %[a], #16\n\t"
15191 #endif
15192 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15193         "lsrs	r6, r7, #16\n\t"
15194 #else
15195         "lsr	r6, r7, #16\n\t"
15196 #endif
15197 #ifdef WOLFSSL_KEIL
15198         "muls	r6, r5, r6\n\t"
15199 #elif defined(__clang__)
15200         "muls	r6, r5\n\t"
15201 #else
15202         "mul	r6, r5\n\t"
15203 #endif
15204 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15205         "adds	r4, r4, r6\n\t"
15206 #else
15207         "add	r4, r4, r6\n\t"
15208 #endif
15209 #ifdef WOLFSSL_KEIL
15210         "adcs	r2, r2, %[r]\n\t"
15211 #elif defined(__clang__)
15212         "adcs	r2, %[r]\n\t"
15213 #else
15214         "adc	r2, %[r]\n\t"
15215 #endif
15216 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15217         "adds	r4, r4, r6\n\t"
15218 #else
15219         "add	r4, r4, r6\n\t"
15220 #endif
15221 #ifdef WOLFSSL_KEIL
15222         "adcs	r2, r2, %[r]\n\t"
15223 #elif defined(__clang__)
15224         "adcs	r2, %[r]\n\t"
15225 #else
15226         "adc	r2, %[r]\n\t"
15227 #endif
15228         "uxth	r6, r7\n\t"
15229 #ifdef WOLFSSL_KEIL
15230         "muls	r5, r6, r5\n\t"
15231 #elif defined(__clang__)
15232         "muls	r5, r6\n\t"
15233 #else
15234         "mul	r5, r6\n\t"
15235 #endif
15236 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15237         "lsrs	r6, r5, #16\n\t"
15238 #else
15239         "lsr	r6, r5, #16\n\t"
15240 #endif
15241 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15242         "lsls	r5, r5, #16\n\t"
15243 #else
15244         "lsl	r5, r5, #16\n\t"
15245 #endif
15246 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15247         "adds	r3, r3, r5\n\t"
15248 #else
15249         "add	r3, r3, r5\n\t"
15250 #endif
15251 #ifdef WOLFSSL_KEIL
15252         "adcs	r4, r4, r6\n\t"
15253 #elif defined(__clang__)
15254         "adcs	r4, r6\n\t"
15255 #else
15256         "adc	r4, r6\n\t"
15257 #endif
15258 #ifdef WOLFSSL_KEIL
15259         "adcs	r2, r2, %[r]\n\t"
15260 #elif defined(__clang__)
15261         "adcs	r2, %[r]\n\t"
15262 #else
15263         "adc	r2, %[r]\n\t"
15264 #endif
15265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15266         "adds	r3, r3, r5\n\t"
15267 #else
15268         "add	r3, r3, r5\n\t"
15269 #endif
15270 #ifdef WOLFSSL_KEIL
15271         "adcs	r4, r4, r6\n\t"
15272 #elif defined(__clang__)
15273         "adcs	r4, r6\n\t"
15274 #else
15275         "adc	r4, r6\n\t"
15276 #endif
15277 #ifdef WOLFSSL_KEIL
15278         "adcs	r2, r2, %[r]\n\t"
15279 #elif defined(__clang__)
15280         "adcs	r2, %[r]\n\t"
15281 #else
15282         "adc	r2, %[r]\n\t"
15283 #endif
15284         "#  A[5] * A[5]\n\t"
15285         "mov	r7, r11\n\t"
15286 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15287         "lsrs	r6, r7, #16\n\t"
15288 #else
15289         "lsr	r6, r7, #16\n\t"
15290 #endif
15291         "uxth	r5, r7\n\t"
15292 #ifdef WOLFSSL_KEIL
15293         "muls	r5, r5, r5\n\t"
15294 #elif defined(__clang__)
15295         "muls	r5, r5\n\t"
15296 #else
15297         "mul	r5, r5\n\t"
15298 #endif
15299 #ifdef WOLFSSL_KEIL
15300         "muls	r6, r6, r6\n\t"
15301 #elif defined(__clang__)
15302         "muls	r6, r6\n\t"
15303 #else
15304         "mul	r6, r6\n\t"
15305 #endif
15306 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15307         "adds	r3, r3, r5\n\t"
15308 #else
15309         "add	r3, r3, r5\n\t"
15310 #endif
15311 #ifdef WOLFSSL_KEIL
15312         "adcs	r4, r4, r6\n\t"
15313 #elif defined(__clang__)
15314         "adcs	r4, r6\n\t"
15315 #else
15316         "adc	r4, r6\n\t"
15317 #endif
15318 #ifdef WOLFSSL_KEIL
15319         "adcs	r2, r2, %[r]\n\t"
15320 #elif defined(__clang__)
15321         "adcs	r2, %[r]\n\t"
15322 #else
15323         "adc	r2, %[r]\n\t"
15324 #endif
15325 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15326         "lsrs	r6, r7, #16\n\t"
15327 #else
15328         "lsr	r6, r7, #16\n\t"
15329 #endif
15330         "uxth	r5, r7\n\t"
15331 #ifdef WOLFSSL_KEIL
15332         "muls	r5, r6, r5\n\t"
15333 #elif defined(__clang__)
15334         "muls	r5, r6\n\t"
15335 #else
15336         "mul	r5, r6\n\t"
15337 #endif
15338 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15339         "lsrs	r6, r5, #15\n\t"
15340 #else
15341         "lsr	r6, r5, #15\n\t"
15342 #endif
15343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15344         "lsls	r5, r5, #17\n\t"
15345 #else
15346         "lsl	r5, r5, #17\n\t"
15347 #endif
15348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15349         "adds	r3, r3, r5\n\t"
15350 #else
15351         "add	r3, r3, r5\n\t"
15352 #endif
15353 #ifdef WOLFSSL_KEIL
15354         "adcs	r4, r4, r6\n\t"
15355 #elif defined(__clang__)
15356         "adcs	r4, r6\n\t"
15357 #else
15358         "adc	r4, r6\n\t"
15359 #endif
15360 #ifdef WOLFSSL_KEIL
15361         "adcs	r2, r2, %[r]\n\t"
15362 #elif defined(__clang__)
15363         "adcs	r2, %[r]\n\t"
15364 #else
15365         "adc	r2, %[r]\n\t"
15366 #endif
15367         "mov	%[r], r8\n\t"
15368         "str	r3, [%[r], #40]\n\t"
15369         "movs	%[r], #0\n\t"
15370         "#  A[6] * A[5]\n\t"
15371         "movs	r3, #0\n\t"
15372         "mov	%[a], r9\n\t"
15373         "mov	%[a], r12\n\t"
15374         "uxth	r5, %[a]\n\t"
15375         "uxth	r6, r7\n\t"
15376 #ifdef WOLFSSL_KEIL
15377         "muls	r6, r5, r6\n\t"
15378 #elif defined(__clang__)
15379         "muls	r6, r5\n\t"
15380 #else
15381         "mul	r6, r5\n\t"
15382 #endif
15383 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15384         "adds	r4, r4, r6\n\t"
15385 #else
15386         "add	r4, r4, r6\n\t"
15387 #endif
15388 #ifdef WOLFSSL_KEIL
15389         "adcs	r2, r2, %[r]\n\t"
15390 #elif defined(__clang__)
15391         "adcs	r2, %[r]\n\t"
15392 #else
15393         "adc	r2, %[r]\n\t"
15394 #endif
15395 #ifdef WOLFSSL_KEIL
15396         "adcs	r3, r3, %[r]\n\t"
15397 #elif defined(__clang__)
15398         "adcs	r3, %[r]\n\t"
15399 #else
15400         "adc	r3, %[r]\n\t"
15401 #endif
15402 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15403         "adds	r4, r4, r6\n\t"
15404 #else
15405         "add	r4, r4, r6\n\t"
15406 #endif
15407 #ifdef WOLFSSL_KEIL
15408         "adcs	r2, r2, %[r]\n\t"
15409 #elif defined(__clang__)
15410         "adcs	r2, %[r]\n\t"
15411 #else
15412         "adc	r2, %[r]\n\t"
15413 #endif
15414 #ifdef WOLFSSL_KEIL
15415         "adcs	r3, r3, %[r]\n\t"
15416 #elif defined(__clang__)
15417         "adcs	r3, %[r]\n\t"
15418 #else
15419         "adc	r3, %[r]\n\t"
15420 #endif
15421 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15422         "lsrs	r6, r7, #16\n\t"
15423 #else
15424         "lsr	r6, r7, #16\n\t"
15425 #endif
15426 #ifdef WOLFSSL_KEIL
15427         "muls	r5, r6, r5\n\t"
15428 #elif defined(__clang__)
15429         "muls	r5, r6\n\t"
15430 #else
15431         "mul	r5, r6\n\t"
15432 #endif
15433 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15434         "lsrs	r6, r5, #16\n\t"
15435 #else
15436         "lsr	r6, r5, #16\n\t"
15437 #endif
15438 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15439         "lsls	r5, r5, #16\n\t"
15440 #else
15441         "lsl	r5, r5, #16\n\t"
15442 #endif
15443 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15444         "adds	r4, r4, r5\n\t"
15445 #else
15446         "add	r4, r4, r5\n\t"
15447 #endif
15448 #ifdef WOLFSSL_KEIL
15449         "adcs	r2, r2, r6\n\t"
15450 #elif defined(__clang__)
15451         "adcs	r2, r6\n\t"
15452 #else
15453         "adc	r2, r6\n\t"
15454 #endif
15455 #ifdef WOLFSSL_KEIL
15456         "adcs	r3, r3, %[r]\n\t"
15457 #elif defined(__clang__)
15458         "adcs	r3, %[r]\n\t"
15459 #else
15460         "adc	r3, %[r]\n\t"
15461 #endif
15462 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15463         "adds	r4, r4, r5\n\t"
15464 #else
15465         "add	r4, r4, r5\n\t"
15466 #endif
15467 #ifdef WOLFSSL_KEIL
15468         "adcs	r2, r2, r6\n\t"
15469 #elif defined(__clang__)
15470         "adcs	r2, r6\n\t"
15471 #else
15472         "adc	r2, r6\n\t"
15473 #endif
15474 #ifdef WOLFSSL_KEIL
15475         "adcs	r3, r3, %[r]\n\t"
15476 #elif defined(__clang__)
15477         "adcs	r3, %[r]\n\t"
15478 #else
15479         "adc	r3, %[r]\n\t"
15480 #endif
15481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15482         "lsrs	r5, %[a], #16\n\t"
15483 #else
15484         "lsr	r5, %[a], #16\n\t"
15485 #endif
15486 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15487         "lsrs	r6, r7, #16\n\t"
15488 #else
15489         "lsr	r6, r7, #16\n\t"
15490 #endif
15491 #ifdef WOLFSSL_KEIL
15492         "muls	r6, r5, r6\n\t"
15493 #elif defined(__clang__)
15494         "muls	r6, r5\n\t"
15495 #else
15496         "mul	r6, r5\n\t"
15497 #endif
15498 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15499         "adds	r2, r2, r6\n\t"
15500 #else
15501         "add	r2, r2, r6\n\t"
15502 #endif
15503 #ifdef WOLFSSL_KEIL
15504         "adcs	r3, r3, %[r]\n\t"
15505 #elif defined(__clang__)
15506         "adcs	r3, %[r]\n\t"
15507 #else
15508         "adc	r3, %[r]\n\t"
15509 #endif
15510 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15511         "adds	r2, r2, r6\n\t"
15512 #else
15513         "add	r2, r2, r6\n\t"
15514 #endif
15515 #ifdef WOLFSSL_KEIL
15516         "adcs	r3, r3, %[r]\n\t"
15517 #elif defined(__clang__)
15518         "adcs	r3, %[r]\n\t"
15519 #else
15520         "adc	r3, %[r]\n\t"
15521 #endif
15522         "uxth	r6, r7\n\t"
15523 #ifdef WOLFSSL_KEIL
15524         "muls	r5, r6, r5\n\t"
15525 #elif defined(__clang__)
15526         "muls	r5, r6\n\t"
15527 #else
15528         "mul	r5, r6\n\t"
15529 #endif
15530 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15531         "lsrs	r6, r5, #16\n\t"
15532 #else
15533         "lsr	r6, r5, #16\n\t"
15534 #endif
15535 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15536         "lsls	r5, r5, #16\n\t"
15537 #else
15538         "lsl	r5, r5, #16\n\t"
15539 #endif
15540 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15541         "adds	r4, r4, r5\n\t"
15542 #else
15543         "add	r4, r4, r5\n\t"
15544 #endif
15545 #ifdef WOLFSSL_KEIL
15546         "adcs	r2, r2, r6\n\t"
15547 #elif defined(__clang__)
15548         "adcs	r2, r6\n\t"
15549 #else
15550         "adc	r2, r6\n\t"
15551 #endif
15552 #ifdef WOLFSSL_KEIL
15553         "adcs	r3, r3, %[r]\n\t"
15554 #elif defined(__clang__)
15555         "adcs	r3, %[r]\n\t"
15556 #else
15557         "adc	r3, %[r]\n\t"
15558 #endif
15559 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15560         "adds	r4, r4, r5\n\t"
15561 #else
15562         "add	r4, r4, r5\n\t"
15563 #endif
15564 #ifdef WOLFSSL_KEIL
15565         "adcs	r2, r2, r6\n\t"
15566 #elif defined(__clang__)
15567         "adcs	r2, r6\n\t"
15568 #else
15569         "adc	r2, r6\n\t"
15570 #endif
15571 #ifdef WOLFSSL_KEIL
15572         "adcs	r3, r3, %[r]\n\t"
15573 #elif defined(__clang__)
15574         "adcs	r3, %[r]\n\t"
15575 #else
15576         "adc	r3, %[r]\n\t"
15577 #endif
15578         "#  A[7] * A[4]\n\t"
15579         "mov	%[a], r9\n\t"
15580         "mov	r7, r10\n\t"
15581         "mov	%[a], lr\n\t"
15582         "uxth	r5, %[a]\n\t"
15583         "uxth	r6, r7\n\t"
15584 #ifdef WOLFSSL_KEIL
15585         "muls	r6, r5, r6\n\t"
15586 #elif defined(__clang__)
15587         "muls	r6, r5\n\t"
15588 #else
15589         "mul	r6, r5\n\t"
15590 #endif
15591 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15592         "adds	r4, r4, r6\n\t"
15593 #else
15594         "add	r4, r4, r6\n\t"
15595 #endif
15596 #ifdef WOLFSSL_KEIL
15597         "adcs	r2, r2, %[r]\n\t"
15598 #elif defined(__clang__)
15599         "adcs	r2, %[r]\n\t"
15600 #else
15601         "adc	r2, %[r]\n\t"
15602 #endif
15603 #ifdef WOLFSSL_KEIL
15604         "adcs	r3, r3, %[r]\n\t"
15605 #elif defined(__clang__)
15606         "adcs	r3, %[r]\n\t"
15607 #else
15608         "adc	r3, %[r]\n\t"
15609 #endif
15610 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15611         "adds	r4, r4, r6\n\t"
15612 #else
15613         "add	r4, r4, r6\n\t"
15614 #endif
15615 #ifdef WOLFSSL_KEIL
15616         "adcs	r2, r2, %[r]\n\t"
15617 #elif defined(__clang__)
15618         "adcs	r2, %[r]\n\t"
15619 #else
15620         "adc	r2, %[r]\n\t"
15621 #endif
15622 #ifdef WOLFSSL_KEIL
15623         "adcs	r3, r3, %[r]\n\t"
15624 #elif defined(__clang__)
15625         "adcs	r3, %[r]\n\t"
15626 #else
15627         "adc	r3, %[r]\n\t"
15628 #endif
15629 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15630         "lsrs	r6, r7, #16\n\t"
15631 #else
15632         "lsr	r6, r7, #16\n\t"
15633 #endif
15634 #ifdef WOLFSSL_KEIL
15635         "muls	r5, r6, r5\n\t"
15636 #elif defined(__clang__)
15637         "muls	r5, r6\n\t"
15638 #else
15639         "mul	r5, r6\n\t"
15640 #endif
15641 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15642         "lsrs	r6, r5, #16\n\t"
15643 #else
15644         "lsr	r6, r5, #16\n\t"
15645 #endif
15646 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15647         "lsls	r5, r5, #16\n\t"
15648 #else
15649         "lsl	r5, r5, #16\n\t"
15650 #endif
15651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15652         "adds	r4, r4, r5\n\t"
15653 #else
15654         "add	r4, r4, r5\n\t"
15655 #endif
15656 #ifdef WOLFSSL_KEIL
15657         "adcs	r2, r2, r6\n\t"
15658 #elif defined(__clang__)
15659         "adcs	r2, r6\n\t"
15660 #else
15661         "adc	r2, r6\n\t"
15662 #endif
15663 #ifdef WOLFSSL_KEIL
15664         "adcs	r3, r3, %[r]\n\t"
15665 #elif defined(__clang__)
15666         "adcs	r3, %[r]\n\t"
15667 #else
15668         "adc	r3, %[r]\n\t"
15669 #endif
15670 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15671         "adds	r4, r4, r5\n\t"
15672 #else
15673         "add	r4, r4, r5\n\t"
15674 #endif
15675 #ifdef WOLFSSL_KEIL
15676         "adcs	r2, r2, r6\n\t"
15677 #elif defined(__clang__)
15678         "adcs	r2, r6\n\t"
15679 #else
15680         "adc	r2, r6\n\t"
15681 #endif
15682 #ifdef WOLFSSL_KEIL
15683         "adcs	r3, r3, %[r]\n\t"
15684 #elif defined(__clang__)
15685         "adcs	r3, %[r]\n\t"
15686 #else
15687         "adc	r3, %[r]\n\t"
15688 #endif
15689 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15690         "lsrs	r5, %[a], #16\n\t"
15691 #else
15692         "lsr	r5, %[a], #16\n\t"
15693 #endif
15694 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15695         "lsrs	r6, r7, #16\n\t"
15696 #else
15697         "lsr	r6, r7, #16\n\t"
15698 #endif
15699 #ifdef WOLFSSL_KEIL
15700         "muls	r6, r5, r6\n\t"
15701 #elif defined(__clang__)
15702         "muls	r6, r5\n\t"
15703 #else
15704         "mul	r6, r5\n\t"
15705 #endif
15706 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15707         "adds	r2, r2, r6\n\t"
15708 #else
15709         "add	r2, r2, r6\n\t"
15710 #endif
15711 #ifdef WOLFSSL_KEIL
15712         "adcs	r3, r3, %[r]\n\t"
15713 #elif defined(__clang__)
15714         "adcs	r3, %[r]\n\t"
15715 #else
15716         "adc	r3, %[r]\n\t"
15717 #endif
15718 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15719         "adds	r2, r2, r6\n\t"
15720 #else
15721         "add	r2, r2, r6\n\t"
15722 #endif
15723 #ifdef WOLFSSL_KEIL
15724         "adcs	r3, r3, %[r]\n\t"
15725 #elif defined(__clang__)
15726         "adcs	r3, %[r]\n\t"
15727 #else
15728         "adc	r3, %[r]\n\t"
15729 #endif
15730         "uxth	r6, r7\n\t"
15731 #ifdef WOLFSSL_KEIL
15732         "muls	r5, r6, r5\n\t"
15733 #elif defined(__clang__)
15734         "muls	r5, r6\n\t"
15735 #else
15736         "mul	r5, r6\n\t"
15737 #endif
15738 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15739         "lsrs	r6, r5, #16\n\t"
15740 #else
15741         "lsr	r6, r5, #16\n\t"
15742 #endif
15743 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15744         "lsls	r5, r5, #16\n\t"
15745 #else
15746         "lsl	r5, r5, #16\n\t"
15747 #endif
15748 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15749         "adds	r4, r4, r5\n\t"
15750 #else
15751         "add	r4, r4, r5\n\t"
15752 #endif
15753 #ifdef WOLFSSL_KEIL
15754         "adcs	r2, r2, r6\n\t"
15755 #elif defined(__clang__)
15756         "adcs	r2, r6\n\t"
15757 #else
15758         "adc	r2, r6\n\t"
15759 #endif
15760 #ifdef WOLFSSL_KEIL
15761         "adcs	r3, r3, %[r]\n\t"
15762 #elif defined(__clang__)
15763         "adcs	r3, %[r]\n\t"
15764 #else
15765         "adc	r3, %[r]\n\t"
15766 #endif
15767 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15768         "adds	r4, r4, r5\n\t"
15769 #else
15770         "add	r4, r4, r5\n\t"
15771 #endif
15772 #ifdef WOLFSSL_KEIL
15773         "adcs	r2, r2, r6\n\t"
15774 #elif defined(__clang__)
15775         "adcs	r2, r6\n\t"
15776 #else
15777         "adc	r2, r6\n\t"
15778 #endif
15779 #ifdef WOLFSSL_KEIL
15780         "adcs	r3, r3, %[r]\n\t"
15781 #elif defined(__clang__)
15782         "adcs	r3, %[r]\n\t"
15783 #else
15784         "adc	r3, %[r]\n\t"
15785 #endif
15786         "mov	%[r], r8\n\t"
15787         "str	r4, [%[r], #44]\n\t"
15788         "movs	%[r], #0\n\t"
15789         "#  A[7] * A[5]\n\t"
15790         "movs	r4, #0\n\t"
15791         "mov	%[a], r9\n\t"
15792         "mov	r7, r11\n\t"
15793         "mov	%[a], lr\n\t"
15794         "uxth	r5, %[a]\n\t"
15795         "uxth	r6, r7\n\t"
15796 #ifdef WOLFSSL_KEIL
15797         "muls	r6, r5, r6\n\t"
15798 #elif defined(__clang__)
15799         "muls	r6, r5\n\t"
15800 #else
15801         "mul	r6, r5\n\t"
15802 #endif
15803 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15804         "adds	r2, r2, r6\n\t"
15805 #else
15806         "add	r2, r2, r6\n\t"
15807 #endif
15808 #ifdef WOLFSSL_KEIL
15809         "adcs	r3, r3, %[r]\n\t"
15810 #elif defined(__clang__)
15811         "adcs	r3, %[r]\n\t"
15812 #else
15813         "adc	r3, %[r]\n\t"
15814 #endif
15815 #ifdef WOLFSSL_KEIL
15816         "adcs	r4, r4, %[r]\n\t"
15817 #elif defined(__clang__)
15818         "adcs	r4, %[r]\n\t"
15819 #else
15820         "adc	r4, %[r]\n\t"
15821 #endif
15822 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15823         "adds	r2, r2, r6\n\t"
15824 #else
15825         "add	r2, r2, r6\n\t"
15826 #endif
15827 #ifdef WOLFSSL_KEIL
15828         "adcs	r3, r3, %[r]\n\t"
15829 #elif defined(__clang__)
15830         "adcs	r3, %[r]\n\t"
15831 #else
15832         "adc	r3, %[r]\n\t"
15833 #endif
15834 #ifdef WOLFSSL_KEIL
15835         "adcs	r4, r4, %[r]\n\t"
15836 #elif defined(__clang__)
15837         "adcs	r4, %[r]\n\t"
15838 #else
15839         "adc	r4, %[r]\n\t"
15840 #endif
15841 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15842         "lsrs	r6, r7, #16\n\t"
15843 #else
15844         "lsr	r6, r7, #16\n\t"
15845 #endif
15846 #ifdef WOLFSSL_KEIL
15847         "muls	r5, r6, r5\n\t"
15848 #elif defined(__clang__)
15849         "muls	r5, r6\n\t"
15850 #else
15851         "mul	r5, r6\n\t"
15852 #endif
15853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15854         "lsrs	r6, r5, #16\n\t"
15855 #else
15856         "lsr	r6, r5, #16\n\t"
15857 #endif
15858 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15859         "lsls	r5, r5, #16\n\t"
15860 #else
15861         "lsl	r5, r5, #16\n\t"
15862 #endif
15863 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15864         "adds	r2, r2, r5\n\t"
15865 #else
15866         "add	r2, r2, r5\n\t"
15867 #endif
15868 #ifdef WOLFSSL_KEIL
15869         "adcs	r3, r3, r6\n\t"
15870 #elif defined(__clang__)
15871         "adcs	r3, r6\n\t"
15872 #else
15873         "adc	r3, r6\n\t"
15874 #endif
15875 #ifdef WOLFSSL_KEIL
15876         "adcs	r4, r4, %[r]\n\t"
15877 #elif defined(__clang__)
15878         "adcs	r4, %[r]\n\t"
15879 #else
15880         "adc	r4, %[r]\n\t"
15881 #endif
15882 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15883         "adds	r2, r2, r5\n\t"
15884 #else
15885         "add	r2, r2, r5\n\t"
15886 #endif
15887 #ifdef WOLFSSL_KEIL
15888         "adcs	r3, r3, r6\n\t"
15889 #elif defined(__clang__)
15890         "adcs	r3, r6\n\t"
15891 #else
15892         "adc	r3, r6\n\t"
15893 #endif
15894 #ifdef WOLFSSL_KEIL
15895         "adcs	r4, r4, %[r]\n\t"
15896 #elif defined(__clang__)
15897         "adcs	r4, %[r]\n\t"
15898 #else
15899         "adc	r4, %[r]\n\t"
15900 #endif
15901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15902         "lsrs	r5, %[a], #16\n\t"
15903 #else
15904         "lsr	r5, %[a], #16\n\t"
15905 #endif
15906 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15907         "lsrs	r6, r7, #16\n\t"
15908 #else
15909         "lsr	r6, r7, #16\n\t"
15910 #endif
15911 #ifdef WOLFSSL_KEIL
15912         "muls	r6, r5, r6\n\t"
15913 #elif defined(__clang__)
15914         "muls	r6, r5\n\t"
15915 #else
15916         "mul	r6, r5\n\t"
15917 #endif
15918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15919         "adds	r3, r3, r6\n\t"
15920 #else
15921         "add	r3, r3, r6\n\t"
15922 #endif
15923 #ifdef WOLFSSL_KEIL
15924         "adcs	r4, r4, %[r]\n\t"
15925 #elif defined(__clang__)
15926         "adcs	r4, %[r]\n\t"
15927 #else
15928         "adc	r4, %[r]\n\t"
15929 #endif
15930 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15931         "adds	r3, r3, r6\n\t"
15932 #else
15933         "add	r3, r3, r6\n\t"
15934 #endif
15935 #ifdef WOLFSSL_KEIL
15936         "adcs	r4, r4, %[r]\n\t"
15937 #elif defined(__clang__)
15938         "adcs	r4, %[r]\n\t"
15939 #else
15940         "adc	r4, %[r]\n\t"
15941 #endif
15942         "uxth	r6, r7\n\t"
15943 #ifdef WOLFSSL_KEIL
15944         "muls	r5, r6, r5\n\t"
15945 #elif defined(__clang__)
15946         "muls	r5, r6\n\t"
15947 #else
15948         "mul	r5, r6\n\t"
15949 #endif
15950 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15951         "lsrs	r6, r5, #16\n\t"
15952 #else
15953         "lsr	r6, r5, #16\n\t"
15954 #endif
15955 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15956         "lsls	r5, r5, #16\n\t"
15957 #else
15958         "lsl	r5, r5, #16\n\t"
15959 #endif
15960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15961         "adds	r2, r2, r5\n\t"
15962 #else
15963         "add	r2, r2, r5\n\t"
15964 #endif
15965 #ifdef WOLFSSL_KEIL
15966         "adcs	r3, r3, r6\n\t"
15967 #elif defined(__clang__)
15968         "adcs	r3, r6\n\t"
15969 #else
15970         "adc	r3, r6\n\t"
15971 #endif
15972 #ifdef WOLFSSL_KEIL
15973         "adcs	r4, r4, %[r]\n\t"
15974 #elif defined(__clang__)
15975         "adcs	r4, %[r]\n\t"
15976 #else
15977         "adc	r4, %[r]\n\t"
15978 #endif
15979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
15980         "adds	r2, r2, r5\n\t"
15981 #else
15982         "add	r2, r2, r5\n\t"
15983 #endif
15984 #ifdef WOLFSSL_KEIL
15985         "adcs	r3, r3, r6\n\t"
15986 #elif defined(__clang__)
15987         "adcs	r3, r6\n\t"
15988 #else
15989         "adc	r3, r6\n\t"
15990 #endif
15991 #ifdef WOLFSSL_KEIL
15992         "adcs	r4, r4, %[r]\n\t"
15993 #elif defined(__clang__)
15994         "adcs	r4, %[r]\n\t"
15995 #else
15996         "adc	r4, %[r]\n\t"
15997 #endif
15998         "#  A[6] * A[6]\n\t"
15999         "mov	r7, r12\n\t"
16000 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16001         "lsrs	r6, r7, #16\n\t"
16002 #else
16003         "lsr	r6, r7, #16\n\t"
16004 #endif
16005         "uxth	r5, r7\n\t"
16006 #ifdef WOLFSSL_KEIL
16007         "muls	r5, r5, r5\n\t"
16008 #elif defined(__clang__)
16009         "muls	r5, r5\n\t"
16010 #else
16011         "mul	r5, r5\n\t"
16012 #endif
16013 #ifdef WOLFSSL_KEIL
16014         "muls	r6, r6, r6\n\t"
16015 #elif defined(__clang__)
16016         "muls	r6, r6\n\t"
16017 #else
16018         "mul	r6, r6\n\t"
16019 #endif
16020 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16021         "adds	r2, r2, r5\n\t"
16022 #else
16023         "add	r2, r2, r5\n\t"
16024 #endif
16025 #ifdef WOLFSSL_KEIL
16026         "adcs	r3, r3, r6\n\t"
16027 #elif defined(__clang__)
16028         "adcs	r3, r6\n\t"
16029 #else
16030         "adc	r3, r6\n\t"
16031 #endif
16032 #ifdef WOLFSSL_KEIL
16033         "adcs	r4, r4, %[r]\n\t"
16034 #elif defined(__clang__)
16035         "adcs	r4, %[r]\n\t"
16036 #else
16037         "adc	r4, %[r]\n\t"
16038 #endif
16039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16040         "lsrs	r6, r7, #16\n\t"
16041 #else
16042         "lsr	r6, r7, #16\n\t"
16043 #endif
16044         "uxth	r5, r7\n\t"
16045 #ifdef WOLFSSL_KEIL
16046         "muls	r5, r6, r5\n\t"
16047 #elif defined(__clang__)
16048         "muls	r5, r6\n\t"
16049 #else
16050         "mul	r5, r6\n\t"
16051 #endif
16052 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16053         "lsrs	r6, r5, #15\n\t"
16054 #else
16055         "lsr	r6, r5, #15\n\t"
16056 #endif
16057 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16058         "lsls	r5, r5, #17\n\t"
16059 #else
16060         "lsl	r5, r5, #17\n\t"
16061 #endif
16062 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16063         "adds	r2, r2, r5\n\t"
16064 #else
16065         "add	r2, r2, r5\n\t"
16066 #endif
16067 #ifdef WOLFSSL_KEIL
16068         "adcs	r3, r3, r6\n\t"
16069 #elif defined(__clang__)
16070         "adcs	r3, r6\n\t"
16071 #else
16072         "adc	r3, r6\n\t"
16073 #endif
16074 #ifdef WOLFSSL_KEIL
16075         "adcs	r4, r4, %[r]\n\t"
16076 #elif defined(__clang__)
16077         "adcs	r4, %[r]\n\t"
16078 #else
16079         "adc	r4, %[r]\n\t"
16080 #endif
16081         "mov	%[r], r8\n\t"
16082         "str	r2, [%[r], #48]\n\t"
16083         "movs	%[r], #0\n\t"
16084         "#  A[7] * A[6]\n\t"
16085         "movs	r2, #0\n\t"
16086         "mov	%[a], r9\n\t"
16087         "mov	%[a], lr\n\t"
16088         "uxth	r5, %[a]\n\t"
16089         "uxth	r6, r7\n\t"
16090 #ifdef WOLFSSL_KEIL
16091         "muls	r6, r5, r6\n\t"
16092 #elif defined(__clang__)
16093         "muls	r6, r5\n\t"
16094 #else
16095         "mul	r6, r5\n\t"
16096 #endif
16097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16098         "adds	r3, r3, r6\n\t"
16099 #else
16100         "add	r3, r3, r6\n\t"
16101 #endif
16102 #ifdef WOLFSSL_KEIL
16103         "adcs	r4, r4, %[r]\n\t"
16104 #elif defined(__clang__)
16105         "adcs	r4, %[r]\n\t"
16106 #else
16107         "adc	r4, %[r]\n\t"
16108 #endif
16109 #ifdef WOLFSSL_KEIL
16110         "adcs	r2, r2, %[r]\n\t"
16111 #elif defined(__clang__)
16112         "adcs	r2, %[r]\n\t"
16113 #else
16114         "adc	r2, %[r]\n\t"
16115 #endif
16116 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16117         "adds	r3, r3, r6\n\t"
16118 #else
16119         "add	r3, r3, r6\n\t"
16120 #endif
16121 #ifdef WOLFSSL_KEIL
16122         "adcs	r4, r4, %[r]\n\t"
16123 #elif defined(__clang__)
16124         "adcs	r4, %[r]\n\t"
16125 #else
16126         "adc	r4, %[r]\n\t"
16127 #endif
16128 #ifdef WOLFSSL_KEIL
16129         "adcs	r2, r2, %[r]\n\t"
16130 #elif defined(__clang__)
16131         "adcs	r2, %[r]\n\t"
16132 #else
16133         "adc	r2, %[r]\n\t"
16134 #endif
16135 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16136         "lsrs	r6, r7, #16\n\t"
16137 #else
16138         "lsr	r6, r7, #16\n\t"
16139 #endif
16140 #ifdef WOLFSSL_KEIL
16141         "muls	r5, r6, r5\n\t"
16142 #elif defined(__clang__)
16143         "muls	r5, r6\n\t"
16144 #else
16145         "mul	r5, r6\n\t"
16146 #endif
16147 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16148         "lsrs	r6, r5, #16\n\t"
16149 #else
16150         "lsr	r6, r5, #16\n\t"
16151 #endif
16152 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16153         "lsls	r5, r5, #16\n\t"
16154 #else
16155         "lsl	r5, r5, #16\n\t"
16156 #endif
16157 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16158         "adds	r3, r3, r5\n\t"
16159 #else
16160         "add	r3, r3, r5\n\t"
16161 #endif
16162 #ifdef WOLFSSL_KEIL
16163         "adcs	r4, r4, r6\n\t"
16164 #elif defined(__clang__)
16165         "adcs	r4, r6\n\t"
16166 #else
16167         "adc	r4, r6\n\t"
16168 #endif
16169 #ifdef WOLFSSL_KEIL
16170         "adcs	r2, r2, %[r]\n\t"
16171 #elif defined(__clang__)
16172         "adcs	r2, %[r]\n\t"
16173 #else
16174         "adc	r2, %[r]\n\t"
16175 #endif
16176 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16177         "adds	r3, r3, r5\n\t"
16178 #else
16179         "add	r3, r3, r5\n\t"
16180 #endif
16181 #ifdef WOLFSSL_KEIL
16182         "adcs	r4, r4, r6\n\t"
16183 #elif defined(__clang__)
16184         "adcs	r4, r6\n\t"
16185 #else
16186         "adc	r4, r6\n\t"
16187 #endif
16188 #ifdef WOLFSSL_KEIL
16189         "adcs	r2, r2, %[r]\n\t"
16190 #elif defined(__clang__)
16191         "adcs	r2, %[r]\n\t"
16192 #else
16193         "adc	r2, %[r]\n\t"
16194 #endif
16195 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16196         "lsrs	r5, %[a], #16\n\t"
16197 #else
16198         "lsr	r5, %[a], #16\n\t"
16199 #endif
16200 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16201         "lsrs	r6, r7, #16\n\t"
16202 #else
16203         "lsr	r6, r7, #16\n\t"
16204 #endif
16205 #ifdef WOLFSSL_KEIL
16206         "muls	r6, r5, r6\n\t"
16207 #elif defined(__clang__)
16208         "muls	r6, r5\n\t"
16209 #else
16210         "mul	r6, r5\n\t"
16211 #endif
16212 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16213         "adds	r4, r4, r6\n\t"
16214 #else
16215         "add	r4, r4, r6\n\t"
16216 #endif
16217 #ifdef WOLFSSL_KEIL
16218         "adcs	r2, r2, %[r]\n\t"
16219 #elif defined(__clang__)
16220         "adcs	r2, %[r]\n\t"
16221 #else
16222         "adc	r2, %[r]\n\t"
16223 #endif
16224 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16225         "adds	r4, r4, r6\n\t"
16226 #else
16227         "add	r4, r4, r6\n\t"
16228 #endif
16229 #ifdef WOLFSSL_KEIL
16230         "adcs	r2, r2, %[r]\n\t"
16231 #elif defined(__clang__)
16232         "adcs	r2, %[r]\n\t"
16233 #else
16234         "adc	r2, %[r]\n\t"
16235 #endif
16236         "uxth	r6, r7\n\t"
16237 #ifdef WOLFSSL_KEIL
16238         "muls	r5, r6, r5\n\t"
16239 #elif defined(__clang__)
16240         "muls	r5, r6\n\t"
16241 #else
16242         "mul	r5, r6\n\t"
16243 #endif
16244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16245         "lsrs	r6, r5, #16\n\t"
16246 #else
16247         "lsr	r6, r5, #16\n\t"
16248 #endif
16249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16250         "lsls	r5, r5, #16\n\t"
16251 #else
16252         "lsl	r5, r5, #16\n\t"
16253 #endif
16254 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16255         "adds	r3, r3, r5\n\t"
16256 #else
16257         "add	r3, r3, r5\n\t"
16258 #endif
16259 #ifdef WOLFSSL_KEIL
16260         "adcs	r4, r4, r6\n\t"
16261 #elif defined(__clang__)
16262         "adcs	r4, r6\n\t"
16263 #else
16264         "adc	r4, r6\n\t"
16265 #endif
16266 #ifdef WOLFSSL_KEIL
16267         "adcs	r2, r2, %[r]\n\t"
16268 #elif defined(__clang__)
16269         "adcs	r2, %[r]\n\t"
16270 #else
16271         "adc	r2, %[r]\n\t"
16272 #endif
16273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16274         "adds	r3, r3, r5\n\t"
16275 #else
16276         "add	r3, r3, r5\n\t"
16277 #endif
16278 #ifdef WOLFSSL_KEIL
16279         "adcs	r4, r4, r6\n\t"
16280 #elif defined(__clang__)
16281         "adcs	r4, r6\n\t"
16282 #else
16283         "adc	r4, r6\n\t"
16284 #endif
16285 #ifdef WOLFSSL_KEIL
16286         "adcs	r2, r2, %[r]\n\t"
16287 #elif defined(__clang__)
16288         "adcs	r2, %[r]\n\t"
16289 #else
16290         "adc	r2, %[r]\n\t"
16291 #endif
16292         "mov	%[r], r8\n\t"
16293         "str	r3, [%[r], #52]\n\t"
16294         "movs	%[r], #0\n\t"
16295         "#  A[7] * A[7]\n\t"
16296         "mov	%[a], r9\n\t"
16297         "mov	r7, lr\n\t"
16298 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16299         "lsrs	r6, r7, #16\n\t"
16300 #else
16301         "lsr	r6, r7, #16\n\t"
16302 #endif
16303         "uxth	r5, r7\n\t"
16304 #ifdef WOLFSSL_KEIL
16305         "muls	r5, r5, r5\n\t"
16306 #elif defined(__clang__)
16307         "muls	r5, r5\n\t"
16308 #else
16309         "mul	r5, r5\n\t"
16310 #endif
16311 #ifdef WOLFSSL_KEIL
16312         "muls	r6, r6, r6\n\t"
16313 #elif defined(__clang__)
16314         "muls	r6, r6\n\t"
16315 #else
16316         "mul	r6, r6\n\t"
16317 #endif
16318 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16319         "adds	r4, r4, r5\n\t"
16320 #else
16321         "add	r4, r4, r5\n\t"
16322 #endif
16323 #ifdef WOLFSSL_KEIL
16324         "adcs	r2, r2, r6\n\t"
16325 #elif defined(__clang__)
16326         "adcs	r2, r6\n\t"
16327 #else
16328         "adc	r2, r6\n\t"
16329 #endif
16330 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16331         "lsrs	r6, r7, #16\n\t"
16332 #else
16333         "lsr	r6, r7, #16\n\t"
16334 #endif
16335         "uxth	r5, r7\n\t"
16336 #ifdef WOLFSSL_KEIL
16337         "muls	r5, r6, r5\n\t"
16338 #elif defined(__clang__)
16339         "muls	r5, r6\n\t"
16340 #else
16341         "mul	r5, r6\n\t"
16342 #endif
16343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16344         "lsrs	r6, r5, #15\n\t"
16345 #else
16346         "lsr	r6, r5, #15\n\t"
16347 #endif
16348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16349         "lsls	r5, r5, #17\n\t"
16350 #else
16351         "lsl	r5, r5, #17\n\t"
16352 #endif
16353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16354         "adds	r4, r4, r5\n\t"
16355 #else
16356         "add	r4, r4, r5\n\t"
16357 #endif
16358 #ifdef WOLFSSL_KEIL
16359         "adcs	r2, r2, r6\n\t"
16360 #elif defined(__clang__)
16361         "adcs	r2, r6\n\t"
16362 #else
16363         "adc	r2, r6\n\t"
16364 #endif
16365         "mov	%[r], r8\n\t"
16366         "str	r4, [%[r], #56]\n\t"
16367         "str	r2, [%[r], #60]\n\t"
16368         "pop	{r2, r3, r4, r5}\n\t"
16369         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
16370         "pop	{r2, r3, r4, r5}\n\t"
16371         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
16372         : [r] "+r" (r), [a] "+r" (a)
16373         :
16374         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "lr"
16375     );
16376 }
16377 
16378 #endif /* !WOLFSSL_SP_LARGE_CODE */
16379 /* Add b to a into r. (r = a + b)
16380  *
16381  * r  A single precision integer.
16382  * a  A single precision integer.
16383  * b  A single precision integer.
16384  */
sp_2048_add_8(sp_digit * r,const sp_digit * a,const sp_digit * b)16385 SP_NOINLINE static sp_digit sp_2048_add_8(sp_digit* r, const sp_digit* a,
16386         const sp_digit* b)
16387 {
16388     __asm__ __volatile__ (
16389         "ldm	%[b]!, {r5, r6}\n\t"
16390         "ldm	%[a]!, {r3, r4}\n\t"
16391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16392         "adds	r3, r3, r5\n\t"
16393 #else
16394         "add	r3, r3, r5\n\t"
16395 #endif
16396 #ifdef WOLFSSL_KEIL
16397         "adcs	r4, r4, r6\n\t"
16398 #elif defined(__clang__)
16399         "adcs	r4, r6\n\t"
16400 #else
16401         "adc	r4, r6\n\t"
16402 #endif
16403         "stm	%[r]!, {r3, r4}\n\t"
16404         "ldm	%[b]!, {r5, r6}\n\t"
16405         "ldm	%[a]!, {r3, r4}\n\t"
16406 #ifdef WOLFSSL_KEIL
16407         "adcs	r3, r3, r5\n\t"
16408 #elif defined(__clang__)
16409         "adcs	r3, r5\n\t"
16410 #else
16411         "adc	r3, r5\n\t"
16412 #endif
16413 #ifdef WOLFSSL_KEIL
16414         "adcs	r4, r4, r6\n\t"
16415 #elif defined(__clang__)
16416         "adcs	r4, r6\n\t"
16417 #else
16418         "adc	r4, r6\n\t"
16419 #endif
16420         "stm	%[r]!, {r3, r4}\n\t"
16421         "ldm	%[b]!, {r5, r6}\n\t"
16422         "ldm	%[a]!, {r3, r4}\n\t"
16423 #ifdef WOLFSSL_KEIL
16424         "adcs	r3, r3, r5\n\t"
16425 #elif defined(__clang__)
16426         "adcs	r3, r5\n\t"
16427 #else
16428         "adc	r3, r5\n\t"
16429 #endif
16430 #ifdef WOLFSSL_KEIL
16431         "adcs	r4, r4, r6\n\t"
16432 #elif defined(__clang__)
16433         "adcs	r4, r6\n\t"
16434 #else
16435         "adc	r4, r6\n\t"
16436 #endif
16437         "stm	%[r]!, {r3, r4}\n\t"
16438         "ldm	%[b]!, {r5, r6}\n\t"
16439         "ldm	%[a]!, {r3, r4}\n\t"
16440 #ifdef WOLFSSL_KEIL
16441         "adcs	r3, r3, r5\n\t"
16442 #elif defined(__clang__)
16443         "adcs	r3, r5\n\t"
16444 #else
16445         "adc	r3, r5\n\t"
16446 #endif
16447 #ifdef WOLFSSL_KEIL
16448         "adcs	r4, r4, r6\n\t"
16449 #elif defined(__clang__)
16450         "adcs	r4, r6\n\t"
16451 #else
16452         "adc	r4, r6\n\t"
16453 #endif
16454         "stm	%[r]!, {r3, r4}\n\t"
16455         "movs	%[r], #0\n\t"
16456 #ifdef WOLFSSL_KEIL
16457         "adcs	%[r], %[r], %[r]\n\t"
16458 #elif defined(__clang__)
16459         "adcs	%[r], %[r]\n\t"
16460 #else
16461         "adc	%[r], %[r]\n\t"
16462 #endif
16463         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
16464         :
16465         : "memory", "r3", "r4", "r5", "r6"
16466     );
16467     return (uint32_t)(size_t)r;
16468 }
16469 
16470 /* Add b to a into r. (r = a + b)
16471  *
16472  * r  A single precision integer.
16473  * a  A single precision integer.
16474  * b  A single precision integer.
16475  */
sp_2048_add_to_word_8(sp_digit * r,sp_digit a,const sp_digit * b)16476 SP_NOINLINE static sp_digit sp_2048_add_to_word_8(sp_digit* r, sp_digit a,
16477         const sp_digit* b)
16478 {
16479     __asm__ __volatile__ (
16480         "movs	r5, #0\n\t"
16481         "ldm	%[b]!, {r3, r4}\n\t"
16482 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16483         "adds	r3, r3, %[a]\n\t"
16484 #else
16485         "add	r3, r3, %[a]\n\t"
16486 #endif
16487 #ifdef WOLFSSL_KEIL
16488         "adcs	r4, r4, r5\n\t"
16489 #elif defined(__clang__)
16490         "adcs	r4, r5\n\t"
16491 #else
16492         "adc	r4, r5\n\t"
16493 #endif
16494         "stm	%[r]!, {r3, r4}\n\t"
16495         "ldm	%[b]!, {r3, r4}\n\t"
16496 #ifdef WOLFSSL_KEIL
16497         "adcs	r3, r3, r5\n\t"
16498 #elif defined(__clang__)
16499         "adcs	r3, r5\n\t"
16500 #else
16501         "adc	r3, r5\n\t"
16502 #endif
16503 #ifdef WOLFSSL_KEIL
16504         "adcs	r4, r4, r5\n\t"
16505 #elif defined(__clang__)
16506         "adcs	r4, r5\n\t"
16507 #else
16508         "adc	r4, r5\n\t"
16509 #endif
16510         "stm	%[r]!, {r3, r4}\n\t"
16511         "ldm	%[b]!, {r3, r4}\n\t"
16512 #ifdef WOLFSSL_KEIL
16513         "adcs	r3, r3, r5\n\t"
16514 #elif defined(__clang__)
16515         "adcs	r3, r5\n\t"
16516 #else
16517         "adc	r3, r5\n\t"
16518 #endif
16519 #ifdef WOLFSSL_KEIL
16520         "adcs	r4, r4, r5\n\t"
16521 #elif defined(__clang__)
16522         "adcs	r4, r5\n\t"
16523 #else
16524         "adc	r4, r5\n\t"
16525 #endif
16526         "stm	%[r]!, {r3, r4}\n\t"
16527         "ldm	%[b]!, {r3, r4}\n\t"
16528 #ifdef WOLFSSL_KEIL
16529         "adcs	r3, r3, r5\n\t"
16530 #elif defined(__clang__)
16531         "adcs	r3, r5\n\t"
16532 #else
16533         "adc	r3, r5\n\t"
16534 #endif
16535 #ifdef WOLFSSL_KEIL
16536         "adcs	r4, r4, r5\n\t"
16537 #elif defined(__clang__)
16538         "adcs	r4, r5\n\t"
16539 #else
16540         "adc	r4, r5\n\t"
16541 #endif
16542         "stm	%[r]!, {r3, r4}\n\t"
16543         "movs	%[r], #0\n\t"
16544 #ifdef WOLFSSL_KEIL
16545         "adcs	%[r], %[r], %[r]\n\t"
16546 #elif defined(__clang__)
16547         "adcs	%[r], %[r]\n\t"
16548 #else
16549         "adc	%[r], %[r]\n\t"
16550 #endif
16551         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
16552         :
16553         : "memory", "r3", "r4", "r5"
16554     );
16555     return (uint32_t)(size_t)r;
16556 }
16557 
16558 /* Sub b from a into a. (a -= b)
16559  *
16560  * a  A single precision integer.
16561  * b  A single precision integer.
16562  */
sp_2048_sub_in_place_16(sp_digit * a,const sp_digit * b)16563 SP_NOINLINE static sp_digit sp_2048_sub_in_place_16(sp_digit* a,
16564         const sp_digit* b)
16565 {
16566     __asm__ __volatile__ (
16567         "ldm	%[b]!, {r4, r5}\n\t"
16568         "ldr	r2, [%[a]]\n\t"
16569         "ldr	r3, [%[a], #4]\n\t"
16570 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16571         "subs	r2, r2, r4\n\t"
16572 #else
16573         "sub	r2, r2, r4\n\t"
16574 #endif
16575 #ifdef WOLFSSL_KEIL
16576         "sbcs	r3, r3, r5\n\t"
16577 #elif defined(__clang__)
16578         "sbcs	r3, r5\n\t"
16579 #else
16580         "sbc	r3, r5\n\t"
16581 #endif
16582         "stm	%[a]!, {r2, r3}\n\t"
16583         "ldm	%[b]!, {r4, r5}\n\t"
16584         "ldr	r2, [%[a]]\n\t"
16585         "ldr	r3, [%[a], #4]\n\t"
16586 #ifdef WOLFSSL_KEIL
16587         "sbcs	r2, r2, r4\n\t"
16588 #elif defined(__clang__)
16589         "sbcs	r2, r4\n\t"
16590 #else
16591         "sbc	r2, r4\n\t"
16592 #endif
16593 #ifdef WOLFSSL_KEIL
16594         "sbcs	r3, r3, r5\n\t"
16595 #elif defined(__clang__)
16596         "sbcs	r3, r5\n\t"
16597 #else
16598         "sbc	r3, r5\n\t"
16599 #endif
16600         "stm	%[a]!, {r2, r3}\n\t"
16601         "ldm	%[b]!, {r4, r5}\n\t"
16602         "ldr	r2, [%[a]]\n\t"
16603         "ldr	r3, [%[a], #4]\n\t"
16604 #ifdef WOLFSSL_KEIL
16605         "sbcs	r2, r2, r4\n\t"
16606 #elif defined(__clang__)
16607         "sbcs	r2, r4\n\t"
16608 #else
16609         "sbc	r2, r4\n\t"
16610 #endif
16611 #ifdef WOLFSSL_KEIL
16612         "sbcs	r3, r3, r5\n\t"
16613 #elif defined(__clang__)
16614         "sbcs	r3, r5\n\t"
16615 #else
16616         "sbc	r3, r5\n\t"
16617 #endif
16618         "stm	%[a]!, {r2, r3}\n\t"
16619         "ldm	%[b]!, {r4, r5}\n\t"
16620         "ldr	r2, [%[a]]\n\t"
16621         "ldr	r3, [%[a], #4]\n\t"
16622 #ifdef WOLFSSL_KEIL
16623         "sbcs	r2, r2, r4\n\t"
16624 #elif defined(__clang__)
16625         "sbcs	r2, r4\n\t"
16626 #else
16627         "sbc	r2, r4\n\t"
16628 #endif
16629 #ifdef WOLFSSL_KEIL
16630         "sbcs	r3, r3, r5\n\t"
16631 #elif defined(__clang__)
16632         "sbcs	r3, r5\n\t"
16633 #else
16634         "sbc	r3, r5\n\t"
16635 #endif
16636         "stm	%[a]!, {r2, r3}\n\t"
16637         "ldm	%[b]!, {r4, r5}\n\t"
16638         "ldr	r2, [%[a]]\n\t"
16639         "ldr	r3, [%[a], #4]\n\t"
16640 #ifdef WOLFSSL_KEIL
16641         "sbcs	r2, r2, r4\n\t"
16642 #elif defined(__clang__)
16643         "sbcs	r2, r4\n\t"
16644 #else
16645         "sbc	r2, r4\n\t"
16646 #endif
16647 #ifdef WOLFSSL_KEIL
16648         "sbcs	r3, r3, r5\n\t"
16649 #elif defined(__clang__)
16650         "sbcs	r3, r5\n\t"
16651 #else
16652         "sbc	r3, r5\n\t"
16653 #endif
16654         "stm	%[a]!, {r2, r3}\n\t"
16655         "ldm	%[b]!, {r4, r5}\n\t"
16656         "ldr	r2, [%[a]]\n\t"
16657         "ldr	r3, [%[a], #4]\n\t"
16658 #ifdef WOLFSSL_KEIL
16659         "sbcs	r2, r2, r4\n\t"
16660 #elif defined(__clang__)
16661         "sbcs	r2, r4\n\t"
16662 #else
16663         "sbc	r2, r4\n\t"
16664 #endif
16665 #ifdef WOLFSSL_KEIL
16666         "sbcs	r3, r3, r5\n\t"
16667 #elif defined(__clang__)
16668         "sbcs	r3, r5\n\t"
16669 #else
16670         "sbc	r3, r5\n\t"
16671 #endif
16672         "stm	%[a]!, {r2, r3}\n\t"
16673         "ldm	%[b]!, {r4, r5}\n\t"
16674         "ldr	r2, [%[a]]\n\t"
16675         "ldr	r3, [%[a], #4]\n\t"
16676 #ifdef WOLFSSL_KEIL
16677         "sbcs	r2, r2, r4\n\t"
16678 #elif defined(__clang__)
16679         "sbcs	r2, r4\n\t"
16680 #else
16681         "sbc	r2, r4\n\t"
16682 #endif
16683 #ifdef WOLFSSL_KEIL
16684         "sbcs	r3, r3, r5\n\t"
16685 #elif defined(__clang__)
16686         "sbcs	r3, r5\n\t"
16687 #else
16688         "sbc	r3, r5\n\t"
16689 #endif
16690         "stm	%[a]!, {r2, r3}\n\t"
16691         "ldm	%[b]!, {r4, r5}\n\t"
16692         "ldr	r2, [%[a]]\n\t"
16693         "ldr	r3, [%[a], #4]\n\t"
16694 #ifdef WOLFSSL_KEIL
16695         "sbcs	r2, r2, r4\n\t"
16696 #elif defined(__clang__)
16697         "sbcs	r2, r4\n\t"
16698 #else
16699         "sbc	r2, r4\n\t"
16700 #endif
16701 #ifdef WOLFSSL_KEIL
16702         "sbcs	r3, r3, r5\n\t"
16703 #elif defined(__clang__)
16704         "sbcs	r3, r5\n\t"
16705 #else
16706         "sbc	r3, r5\n\t"
16707 #endif
16708         "stm	%[a]!, {r2, r3}\n\t"
16709 #ifdef WOLFSSL_KEIL
16710         "sbcs	%[a], %[a], %[a]\n\t"
16711 #elif defined(__clang__)
16712         "sbcs	%[a], %[a]\n\t"
16713 #else
16714         "sbc	%[a], %[a]\n\t"
16715 #endif
16716         : [a] "+r" (a), [b] "+r" (b)
16717         :
16718         : "memory", "r2", "r3", "r4", "r5"
16719     );
16720     return (uint32_t)(size_t)a;
16721 }
16722 
16723 /* Add b to a into r. (r = a + b)
16724  *
16725  * r  A single precision integer.
16726  * a  A single precision integer.
16727  * b  A single precision integer.
16728  */
sp_2048_add_16(sp_digit * r,const sp_digit * a,const sp_digit * b)16729 SP_NOINLINE static sp_digit sp_2048_add_16(sp_digit* r, const sp_digit* a,
16730         const sp_digit* b)
16731 {
16732     __asm__ __volatile__ (
16733         "ldm	%[b]!, {r5, r6}\n\t"
16734         "ldm	%[a]!, {r3, r4}\n\t"
16735 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16736         "adds	r3, r3, r5\n\t"
16737 #else
16738         "add	r3, r3, r5\n\t"
16739 #endif
16740 #ifdef WOLFSSL_KEIL
16741         "adcs	r4, r4, r6\n\t"
16742 #elif defined(__clang__)
16743         "adcs	r4, r6\n\t"
16744 #else
16745         "adc	r4, r6\n\t"
16746 #endif
16747         "stm	%[r]!, {r3, r4}\n\t"
16748         "ldm	%[b]!, {r5, r6}\n\t"
16749         "ldm	%[a]!, {r3, r4}\n\t"
16750 #ifdef WOLFSSL_KEIL
16751         "adcs	r3, r3, r5\n\t"
16752 #elif defined(__clang__)
16753         "adcs	r3, r5\n\t"
16754 #else
16755         "adc	r3, r5\n\t"
16756 #endif
16757 #ifdef WOLFSSL_KEIL
16758         "adcs	r4, r4, r6\n\t"
16759 #elif defined(__clang__)
16760         "adcs	r4, r6\n\t"
16761 #else
16762         "adc	r4, r6\n\t"
16763 #endif
16764         "stm	%[r]!, {r3, r4}\n\t"
16765         "ldm	%[b]!, {r5, r6}\n\t"
16766         "ldm	%[a]!, {r3, r4}\n\t"
16767 #ifdef WOLFSSL_KEIL
16768         "adcs	r3, r3, r5\n\t"
16769 #elif defined(__clang__)
16770         "adcs	r3, r5\n\t"
16771 #else
16772         "adc	r3, r5\n\t"
16773 #endif
16774 #ifdef WOLFSSL_KEIL
16775         "adcs	r4, r4, r6\n\t"
16776 #elif defined(__clang__)
16777         "adcs	r4, r6\n\t"
16778 #else
16779         "adc	r4, r6\n\t"
16780 #endif
16781         "stm	%[r]!, {r3, r4}\n\t"
16782         "ldm	%[b]!, {r5, r6}\n\t"
16783         "ldm	%[a]!, {r3, r4}\n\t"
16784 #ifdef WOLFSSL_KEIL
16785         "adcs	r3, r3, r5\n\t"
16786 #elif defined(__clang__)
16787         "adcs	r3, r5\n\t"
16788 #else
16789         "adc	r3, r5\n\t"
16790 #endif
16791 #ifdef WOLFSSL_KEIL
16792         "adcs	r4, r4, r6\n\t"
16793 #elif defined(__clang__)
16794         "adcs	r4, r6\n\t"
16795 #else
16796         "adc	r4, r6\n\t"
16797 #endif
16798         "stm	%[r]!, {r3, r4}\n\t"
16799         "ldm	%[b]!, {r5, r6}\n\t"
16800         "ldm	%[a]!, {r3, r4}\n\t"
16801 #ifdef WOLFSSL_KEIL
16802         "adcs	r3, r3, r5\n\t"
16803 #elif defined(__clang__)
16804         "adcs	r3, r5\n\t"
16805 #else
16806         "adc	r3, r5\n\t"
16807 #endif
16808 #ifdef WOLFSSL_KEIL
16809         "adcs	r4, r4, r6\n\t"
16810 #elif defined(__clang__)
16811         "adcs	r4, r6\n\t"
16812 #else
16813         "adc	r4, r6\n\t"
16814 #endif
16815         "stm	%[r]!, {r3, r4}\n\t"
16816         "ldm	%[b]!, {r5, r6}\n\t"
16817         "ldm	%[a]!, {r3, r4}\n\t"
16818 #ifdef WOLFSSL_KEIL
16819         "adcs	r3, r3, r5\n\t"
16820 #elif defined(__clang__)
16821         "adcs	r3, r5\n\t"
16822 #else
16823         "adc	r3, r5\n\t"
16824 #endif
16825 #ifdef WOLFSSL_KEIL
16826         "adcs	r4, r4, r6\n\t"
16827 #elif defined(__clang__)
16828         "adcs	r4, r6\n\t"
16829 #else
16830         "adc	r4, r6\n\t"
16831 #endif
16832         "stm	%[r]!, {r3, r4}\n\t"
16833         "ldm	%[b]!, {r5, r6}\n\t"
16834         "ldm	%[a]!, {r3, r4}\n\t"
16835 #ifdef WOLFSSL_KEIL
16836         "adcs	r3, r3, r5\n\t"
16837 #elif defined(__clang__)
16838         "adcs	r3, r5\n\t"
16839 #else
16840         "adc	r3, r5\n\t"
16841 #endif
16842 #ifdef WOLFSSL_KEIL
16843         "adcs	r4, r4, r6\n\t"
16844 #elif defined(__clang__)
16845         "adcs	r4, r6\n\t"
16846 #else
16847         "adc	r4, r6\n\t"
16848 #endif
16849         "stm	%[r]!, {r3, r4}\n\t"
16850         "ldm	%[b]!, {r5, r6}\n\t"
16851         "ldm	%[a]!, {r3, r4}\n\t"
16852 #ifdef WOLFSSL_KEIL
16853         "adcs	r3, r3, r5\n\t"
16854 #elif defined(__clang__)
16855         "adcs	r3, r5\n\t"
16856 #else
16857         "adc	r3, r5\n\t"
16858 #endif
16859 #ifdef WOLFSSL_KEIL
16860         "adcs	r4, r4, r6\n\t"
16861 #elif defined(__clang__)
16862         "adcs	r4, r6\n\t"
16863 #else
16864         "adc	r4, r6\n\t"
16865 #endif
16866         "stm	%[r]!, {r3, r4}\n\t"
16867         "movs	%[r], #0\n\t"
16868 #ifdef WOLFSSL_KEIL
16869         "adcs	%[r], %[r], %[r]\n\t"
16870 #elif defined(__clang__)
16871         "adcs	%[r], %[r]\n\t"
16872 #else
16873         "adc	%[r], %[r]\n\t"
16874 #endif
16875         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
16876         :
16877         : "memory", "r3", "r4", "r5", "r6"
16878     );
16879     return (uint32_t)(size_t)r;
16880 }
16881 
16882 /* AND m into each word of a and store in r.
16883  *
16884  * r  A single precision integer.
16885  * a  A single precision integer.
16886  * m  Mask to AND against each digit.
16887  */
sp_2048_mask_8(sp_digit * r,const sp_digit * a,sp_digit m)16888 static void sp_2048_mask_8(sp_digit* r, const sp_digit* a, sp_digit m)
16889 {
16890 #ifdef WOLFSSL_SP_SMALL
16891     int i;
16892 
16893     for (i=0; i<8; i++) {
16894         r[i] = a[i] & m;
16895     }
16896 #else
16897     r[0] = a[0] & m;
16898     r[1] = a[1] & m;
16899     r[2] = a[2] & m;
16900     r[3] = a[3] & m;
16901     r[4] = a[4] & m;
16902     r[5] = a[5] & m;
16903     r[6] = a[6] & m;
16904     r[7] = a[7] & m;
16905 #endif
16906 }
16907 
16908 /* Multiply a and b into r. (r = a * b)
16909  *
16910  * r  A single precision integer.
16911  * a  A single precision integer.
16912  * b  A single precision integer.
16913  */
sp_2048_mul_16(sp_digit * r,const sp_digit * a,const sp_digit * b)16914 SP_NOINLINE static void sp_2048_mul_16(sp_digit* r, const sp_digit* a,
16915         const sp_digit* b)
16916 {
16917     sp_digit* z0 = r;
16918     sp_digit z1[16];
16919     sp_digit a1[8];
16920     sp_digit b1[8];
16921     sp_digit z2[16];
16922     sp_digit u;
16923     sp_digit ca;
16924     sp_digit cb;
16925 
16926     ca = sp_2048_add_8(a1, a, &a[8]);
16927     cb = sp_2048_add_8(b1, b, &b[8]);
16928     u  = ca & cb;
16929     sp_2048_mul_8(z1, a1, b1);
16930     sp_2048_mul_8(z2, &a[8], &b[8]);
16931     sp_2048_mul_8(z0, a, b);
16932     sp_2048_mask_8(r + 16, a1, 0 - cb);
16933     sp_2048_mask_8(b1, b1, 0 - ca);
16934     u += sp_2048_add_8(r + 16, r + 16, b1);
16935     u += sp_2048_sub_in_place_16(z1, z2);
16936     u += sp_2048_sub_in_place_16(z1, z0);
16937     u += sp_2048_add_16(r + 8, r + 8, z1);
16938     u += sp_2048_add_8(r + 16, r + 16, z2);
16939     (void)sp_2048_add_to_word_8(r + 24, u, z2 + 8);
16940 }
16941 
16942 /* Double a into r. (r = a + a)
16943  *
16944  * r  A single precision integer.
16945  * a  A single precision integer.
16946  */
sp_2048_dbl_8(sp_digit * r,const sp_digit * a)16947 SP_NOINLINE static sp_digit sp_2048_dbl_8(sp_digit* r, const sp_digit* a)
16948 {
16949     __asm__ __volatile__ (
16950         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
16951 #if defined(__clang__) || defined(WOLFSSL_KEIL)
16952         "adds	r2, r2, r2\n\t"
16953 #else
16954         "add	r2, r2, r2\n\t"
16955 #endif
16956 #ifdef WOLFSSL_KEIL
16957         "adcs	r3, r3, r3\n\t"
16958 #elif defined(__clang__)
16959         "adcs	r3, r3\n\t"
16960 #else
16961         "adc	r3, r3\n\t"
16962 #endif
16963 #ifdef WOLFSSL_KEIL
16964         "adcs	r4, r4, r4\n\t"
16965 #elif defined(__clang__)
16966         "adcs	r4, r4\n\t"
16967 #else
16968         "adc	r4, r4\n\t"
16969 #endif
16970 #ifdef WOLFSSL_KEIL
16971         "adcs	r5, r5, r5\n\t"
16972 #elif defined(__clang__)
16973         "adcs	r5, r5\n\t"
16974 #else
16975         "adc	r5, r5\n\t"
16976 #endif
16977         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
16978         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
16979 #ifdef WOLFSSL_KEIL
16980         "adcs	r2, r2, r2\n\t"
16981 #elif defined(__clang__)
16982         "adcs	r2, r2\n\t"
16983 #else
16984         "adc	r2, r2\n\t"
16985 #endif
16986 #ifdef WOLFSSL_KEIL
16987         "adcs	r3, r3, r3\n\t"
16988 #elif defined(__clang__)
16989         "adcs	r3, r3\n\t"
16990 #else
16991         "adc	r3, r3\n\t"
16992 #endif
16993 #ifdef WOLFSSL_KEIL
16994         "adcs	r4, r4, r4\n\t"
16995 #elif defined(__clang__)
16996         "adcs	r4, r4\n\t"
16997 #else
16998         "adc	r4, r4\n\t"
16999 #endif
17000 #ifdef WOLFSSL_KEIL
17001         "adcs	r5, r5, r5\n\t"
17002 #elif defined(__clang__)
17003         "adcs	r5, r5\n\t"
17004 #else
17005         "adc	r5, r5\n\t"
17006 #endif
17007         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
17008         "movs	%[r], #0\n\t"
17009 #ifdef WOLFSSL_KEIL
17010         "adcs	%[r], %[r], %[r]\n\t"
17011 #elif defined(__clang__)
17012         "adcs	%[r], %[r]\n\t"
17013 #else
17014         "adc	%[r], %[r]\n\t"
17015 #endif
17016         : [r] "+r" (r), [a] "+r" (a)
17017         :
17018         : "memory", "r2", "r3", "r4", "r5"
17019     );
17020     return (uint32_t)(size_t)r;
17021 }
17022 
17023 /* Square a and put result in r. (r = a * a)
17024  *
17025  * r  A single precision integer.
17026  * a  A single precision integer.
17027  */
sp_2048_sqr_16(sp_digit * r,const sp_digit * a)17028 SP_NOINLINE static void sp_2048_sqr_16(sp_digit* r, const sp_digit* a)
17029 {
17030     sp_digit* z0 = r;
17031     sp_digit z2[16];
17032     sp_digit z1[16];
17033     sp_digit a1[8];
17034     sp_digit u;
17035 
17036     u = sp_2048_add_8(a1, a, &a[8]);
17037     sp_2048_sqr_8(z1, a1);
17038     sp_2048_sqr_8(z2, &a[8]);
17039     sp_2048_sqr_8(z0, a);
17040     sp_2048_mask_8(r + 16, a1, 0 - u);
17041     u += sp_2048_dbl_8(r + 16, r + 16);
17042     u += sp_2048_sub_in_place_16(z1, z2);
17043     u += sp_2048_sub_in_place_16(z1, z0);
17044     u += sp_2048_add_16(r + 8, r + 8, z1);
17045     u += sp_2048_add_8(r + 16, r + 16, z2);
17046     (void)sp_2048_add_to_word_8(r + 24, u, z2 + 8);
17047 }
17048 
17049 /* Add b to a into r. (r = a + b)
17050  *
17051  * r  A single precision integer.
17052  * a  A single precision integer.
17053  * b  A single precision integer.
17054  */
sp_2048_add_to_word_16(sp_digit * r,sp_digit a,const sp_digit * b)17055 SP_NOINLINE static sp_digit sp_2048_add_to_word_16(sp_digit* r, sp_digit a,
17056         const sp_digit* b)
17057 {
17058     __asm__ __volatile__ (
17059         "movs	r5, #0\n\t"
17060         "ldm	%[b]!, {r3, r4}\n\t"
17061 #if defined(__clang__) || defined(WOLFSSL_KEIL)
17062         "adds	r3, r3, %[a]\n\t"
17063 #else
17064         "add	r3, r3, %[a]\n\t"
17065 #endif
17066 #ifdef WOLFSSL_KEIL
17067         "adcs	r4, r4, r5\n\t"
17068 #elif defined(__clang__)
17069         "adcs	r4, r5\n\t"
17070 #else
17071         "adc	r4, r5\n\t"
17072 #endif
17073         "stm	%[r]!, {r3, r4}\n\t"
17074         "ldm	%[b]!, {r3, r4}\n\t"
17075 #ifdef WOLFSSL_KEIL
17076         "adcs	r3, r3, r5\n\t"
17077 #elif defined(__clang__)
17078         "adcs	r3, r5\n\t"
17079 #else
17080         "adc	r3, r5\n\t"
17081 #endif
17082 #ifdef WOLFSSL_KEIL
17083         "adcs	r4, r4, r5\n\t"
17084 #elif defined(__clang__)
17085         "adcs	r4, r5\n\t"
17086 #else
17087         "adc	r4, r5\n\t"
17088 #endif
17089         "stm	%[r]!, {r3, r4}\n\t"
17090         "ldm	%[b]!, {r3, r4}\n\t"
17091 #ifdef WOLFSSL_KEIL
17092         "adcs	r3, r3, r5\n\t"
17093 #elif defined(__clang__)
17094         "adcs	r3, r5\n\t"
17095 #else
17096         "adc	r3, r5\n\t"
17097 #endif
17098 #ifdef WOLFSSL_KEIL
17099         "adcs	r4, r4, r5\n\t"
17100 #elif defined(__clang__)
17101         "adcs	r4, r5\n\t"
17102 #else
17103         "adc	r4, r5\n\t"
17104 #endif
17105         "stm	%[r]!, {r3, r4}\n\t"
17106         "ldm	%[b]!, {r3, r4}\n\t"
17107 #ifdef WOLFSSL_KEIL
17108         "adcs	r3, r3, r5\n\t"
17109 #elif defined(__clang__)
17110         "adcs	r3, r5\n\t"
17111 #else
17112         "adc	r3, r5\n\t"
17113 #endif
17114 #ifdef WOLFSSL_KEIL
17115         "adcs	r4, r4, r5\n\t"
17116 #elif defined(__clang__)
17117         "adcs	r4, r5\n\t"
17118 #else
17119         "adc	r4, r5\n\t"
17120 #endif
17121         "stm	%[r]!, {r3, r4}\n\t"
17122         "ldm	%[b]!, {r3, r4}\n\t"
17123 #ifdef WOLFSSL_KEIL
17124         "adcs	r3, r3, r5\n\t"
17125 #elif defined(__clang__)
17126         "adcs	r3, r5\n\t"
17127 #else
17128         "adc	r3, r5\n\t"
17129 #endif
17130 #ifdef WOLFSSL_KEIL
17131         "adcs	r4, r4, r5\n\t"
17132 #elif defined(__clang__)
17133         "adcs	r4, r5\n\t"
17134 #else
17135         "adc	r4, r5\n\t"
17136 #endif
17137         "stm	%[r]!, {r3, r4}\n\t"
17138         "ldm	%[b]!, {r3, r4}\n\t"
17139 #ifdef WOLFSSL_KEIL
17140         "adcs	r3, r3, r5\n\t"
17141 #elif defined(__clang__)
17142         "adcs	r3, r5\n\t"
17143 #else
17144         "adc	r3, r5\n\t"
17145 #endif
17146 #ifdef WOLFSSL_KEIL
17147         "adcs	r4, r4, r5\n\t"
17148 #elif defined(__clang__)
17149         "adcs	r4, r5\n\t"
17150 #else
17151         "adc	r4, r5\n\t"
17152 #endif
17153         "stm	%[r]!, {r3, r4}\n\t"
17154         "ldm	%[b]!, {r3, r4}\n\t"
17155 #ifdef WOLFSSL_KEIL
17156         "adcs	r3, r3, r5\n\t"
17157 #elif defined(__clang__)
17158         "adcs	r3, r5\n\t"
17159 #else
17160         "adc	r3, r5\n\t"
17161 #endif
17162 #ifdef WOLFSSL_KEIL
17163         "adcs	r4, r4, r5\n\t"
17164 #elif defined(__clang__)
17165         "adcs	r4, r5\n\t"
17166 #else
17167         "adc	r4, r5\n\t"
17168 #endif
17169         "stm	%[r]!, {r3, r4}\n\t"
17170         "ldm	%[b]!, {r3, r4}\n\t"
17171 #ifdef WOLFSSL_KEIL
17172         "adcs	r3, r3, r5\n\t"
17173 #elif defined(__clang__)
17174         "adcs	r3, r5\n\t"
17175 #else
17176         "adc	r3, r5\n\t"
17177 #endif
17178 #ifdef WOLFSSL_KEIL
17179         "adcs	r4, r4, r5\n\t"
17180 #elif defined(__clang__)
17181         "adcs	r4, r5\n\t"
17182 #else
17183         "adc	r4, r5\n\t"
17184 #endif
17185         "stm	%[r]!, {r3, r4}\n\t"
17186         "movs	%[r], #0\n\t"
17187 #ifdef WOLFSSL_KEIL
17188         "adcs	%[r], %[r], %[r]\n\t"
17189 #elif defined(__clang__)
17190         "adcs	%[r], %[r]\n\t"
17191 #else
17192         "adc	%[r], %[r]\n\t"
17193 #endif
17194         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
17195         :
17196         : "memory", "r3", "r4", "r5"
17197     );
17198     return (uint32_t)(size_t)r;
17199 }
17200 
17201 /* Sub b from a into a. (a -= b)
17202  *
17203  * a  A single precision integer.
17204  * b  A single precision integer.
17205  */
sp_2048_sub_in_place_32(sp_digit * a,const sp_digit * b)17206 SP_NOINLINE static sp_digit sp_2048_sub_in_place_32(sp_digit* a,
17207         const sp_digit* b)
17208 {
17209     __asm__ __volatile__ (
17210         "ldm	%[b]!, {r4, r5}\n\t"
17211         "ldr	r2, [%[a]]\n\t"
17212         "ldr	r3, [%[a], #4]\n\t"
17213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
17214         "subs	r2, r2, r4\n\t"
17215 #else
17216         "sub	r2, r2, r4\n\t"
17217 #endif
17218 #ifdef WOLFSSL_KEIL
17219         "sbcs	r3, r3, r5\n\t"
17220 #elif defined(__clang__)
17221         "sbcs	r3, r5\n\t"
17222 #else
17223         "sbc	r3, r5\n\t"
17224 #endif
17225         "stm	%[a]!, {r2, r3}\n\t"
17226         "ldm	%[b]!, {r4, r5}\n\t"
17227         "ldr	r2, [%[a]]\n\t"
17228         "ldr	r3, [%[a], #4]\n\t"
17229 #ifdef WOLFSSL_KEIL
17230         "sbcs	r2, r2, r4\n\t"
17231 #elif defined(__clang__)
17232         "sbcs	r2, r4\n\t"
17233 #else
17234         "sbc	r2, r4\n\t"
17235 #endif
17236 #ifdef WOLFSSL_KEIL
17237         "sbcs	r3, r3, r5\n\t"
17238 #elif defined(__clang__)
17239         "sbcs	r3, r5\n\t"
17240 #else
17241         "sbc	r3, r5\n\t"
17242 #endif
17243         "stm	%[a]!, {r2, r3}\n\t"
17244         "ldm	%[b]!, {r4, r5}\n\t"
17245         "ldr	r2, [%[a]]\n\t"
17246         "ldr	r3, [%[a], #4]\n\t"
17247 #ifdef WOLFSSL_KEIL
17248         "sbcs	r2, r2, r4\n\t"
17249 #elif defined(__clang__)
17250         "sbcs	r2, r4\n\t"
17251 #else
17252         "sbc	r2, r4\n\t"
17253 #endif
17254 #ifdef WOLFSSL_KEIL
17255         "sbcs	r3, r3, r5\n\t"
17256 #elif defined(__clang__)
17257         "sbcs	r3, r5\n\t"
17258 #else
17259         "sbc	r3, r5\n\t"
17260 #endif
17261         "stm	%[a]!, {r2, r3}\n\t"
17262         "ldm	%[b]!, {r4, r5}\n\t"
17263         "ldr	r2, [%[a]]\n\t"
17264         "ldr	r3, [%[a], #4]\n\t"
17265 #ifdef WOLFSSL_KEIL
17266         "sbcs	r2, r2, r4\n\t"
17267 #elif defined(__clang__)
17268         "sbcs	r2, r4\n\t"
17269 #else
17270         "sbc	r2, r4\n\t"
17271 #endif
17272 #ifdef WOLFSSL_KEIL
17273         "sbcs	r3, r3, r5\n\t"
17274 #elif defined(__clang__)
17275         "sbcs	r3, r5\n\t"
17276 #else
17277         "sbc	r3, r5\n\t"
17278 #endif
17279         "stm	%[a]!, {r2, r3}\n\t"
17280         "ldm	%[b]!, {r4, r5}\n\t"
17281         "ldr	r2, [%[a]]\n\t"
17282         "ldr	r3, [%[a], #4]\n\t"
17283 #ifdef WOLFSSL_KEIL
17284         "sbcs	r2, r2, r4\n\t"
17285 #elif defined(__clang__)
17286         "sbcs	r2, r4\n\t"
17287 #else
17288         "sbc	r2, r4\n\t"
17289 #endif
17290 #ifdef WOLFSSL_KEIL
17291         "sbcs	r3, r3, r5\n\t"
17292 #elif defined(__clang__)
17293         "sbcs	r3, r5\n\t"
17294 #else
17295         "sbc	r3, r5\n\t"
17296 #endif
17297         "stm	%[a]!, {r2, r3}\n\t"
17298         "ldm	%[b]!, {r4, r5}\n\t"
17299         "ldr	r2, [%[a]]\n\t"
17300         "ldr	r3, [%[a], #4]\n\t"
17301 #ifdef WOLFSSL_KEIL
17302         "sbcs	r2, r2, r4\n\t"
17303 #elif defined(__clang__)
17304         "sbcs	r2, r4\n\t"
17305 #else
17306         "sbc	r2, r4\n\t"
17307 #endif
17308 #ifdef WOLFSSL_KEIL
17309         "sbcs	r3, r3, r5\n\t"
17310 #elif defined(__clang__)
17311         "sbcs	r3, r5\n\t"
17312 #else
17313         "sbc	r3, r5\n\t"
17314 #endif
17315         "stm	%[a]!, {r2, r3}\n\t"
17316         "ldm	%[b]!, {r4, r5}\n\t"
17317         "ldr	r2, [%[a]]\n\t"
17318         "ldr	r3, [%[a], #4]\n\t"
17319 #ifdef WOLFSSL_KEIL
17320         "sbcs	r2, r2, r4\n\t"
17321 #elif defined(__clang__)
17322         "sbcs	r2, r4\n\t"
17323 #else
17324         "sbc	r2, r4\n\t"
17325 #endif
17326 #ifdef WOLFSSL_KEIL
17327         "sbcs	r3, r3, r5\n\t"
17328 #elif defined(__clang__)
17329         "sbcs	r3, r5\n\t"
17330 #else
17331         "sbc	r3, r5\n\t"
17332 #endif
17333         "stm	%[a]!, {r2, r3}\n\t"
17334         "ldm	%[b]!, {r4, r5}\n\t"
17335         "ldr	r2, [%[a]]\n\t"
17336         "ldr	r3, [%[a], #4]\n\t"
17337 #ifdef WOLFSSL_KEIL
17338         "sbcs	r2, r2, r4\n\t"
17339 #elif defined(__clang__)
17340         "sbcs	r2, r4\n\t"
17341 #else
17342         "sbc	r2, r4\n\t"
17343 #endif
17344 #ifdef WOLFSSL_KEIL
17345         "sbcs	r3, r3, r5\n\t"
17346 #elif defined(__clang__)
17347         "sbcs	r3, r5\n\t"
17348 #else
17349         "sbc	r3, r5\n\t"
17350 #endif
17351         "stm	%[a]!, {r2, r3}\n\t"
17352         "ldm	%[b]!, {r4, r5}\n\t"
17353         "ldr	r2, [%[a]]\n\t"
17354         "ldr	r3, [%[a], #4]\n\t"
17355 #ifdef WOLFSSL_KEIL
17356         "sbcs	r2, r2, r4\n\t"
17357 #elif defined(__clang__)
17358         "sbcs	r2, r4\n\t"
17359 #else
17360         "sbc	r2, r4\n\t"
17361 #endif
17362 #ifdef WOLFSSL_KEIL
17363         "sbcs	r3, r3, r5\n\t"
17364 #elif defined(__clang__)
17365         "sbcs	r3, r5\n\t"
17366 #else
17367         "sbc	r3, r5\n\t"
17368 #endif
17369         "stm	%[a]!, {r2, r3}\n\t"
17370         "ldm	%[b]!, {r4, r5}\n\t"
17371         "ldr	r2, [%[a]]\n\t"
17372         "ldr	r3, [%[a], #4]\n\t"
17373 #ifdef WOLFSSL_KEIL
17374         "sbcs	r2, r2, r4\n\t"
17375 #elif defined(__clang__)
17376         "sbcs	r2, r4\n\t"
17377 #else
17378         "sbc	r2, r4\n\t"
17379 #endif
17380 #ifdef WOLFSSL_KEIL
17381         "sbcs	r3, r3, r5\n\t"
17382 #elif defined(__clang__)
17383         "sbcs	r3, r5\n\t"
17384 #else
17385         "sbc	r3, r5\n\t"
17386 #endif
17387         "stm	%[a]!, {r2, r3}\n\t"
17388         "ldm	%[b]!, {r4, r5}\n\t"
17389         "ldr	r2, [%[a]]\n\t"
17390         "ldr	r3, [%[a], #4]\n\t"
17391 #ifdef WOLFSSL_KEIL
17392         "sbcs	r2, r2, r4\n\t"
17393 #elif defined(__clang__)
17394         "sbcs	r2, r4\n\t"
17395 #else
17396         "sbc	r2, r4\n\t"
17397 #endif
17398 #ifdef WOLFSSL_KEIL
17399         "sbcs	r3, r3, r5\n\t"
17400 #elif defined(__clang__)
17401         "sbcs	r3, r5\n\t"
17402 #else
17403         "sbc	r3, r5\n\t"
17404 #endif
17405         "stm	%[a]!, {r2, r3}\n\t"
17406         "ldm	%[b]!, {r4, r5}\n\t"
17407         "ldr	r2, [%[a]]\n\t"
17408         "ldr	r3, [%[a], #4]\n\t"
17409 #ifdef WOLFSSL_KEIL
17410         "sbcs	r2, r2, r4\n\t"
17411 #elif defined(__clang__)
17412         "sbcs	r2, r4\n\t"
17413 #else
17414         "sbc	r2, r4\n\t"
17415 #endif
17416 #ifdef WOLFSSL_KEIL
17417         "sbcs	r3, r3, r5\n\t"
17418 #elif defined(__clang__)
17419         "sbcs	r3, r5\n\t"
17420 #else
17421         "sbc	r3, r5\n\t"
17422 #endif
17423         "stm	%[a]!, {r2, r3}\n\t"
17424         "ldm	%[b]!, {r4, r5}\n\t"
17425         "ldr	r2, [%[a]]\n\t"
17426         "ldr	r3, [%[a], #4]\n\t"
17427 #ifdef WOLFSSL_KEIL
17428         "sbcs	r2, r2, r4\n\t"
17429 #elif defined(__clang__)
17430         "sbcs	r2, r4\n\t"
17431 #else
17432         "sbc	r2, r4\n\t"
17433 #endif
17434 #ifdef WOLFSSL_KEIL
17435         "sbcs	r3, r3, r5\n\t"
17436 #elif defined(__clang__)
17437         "sbcs	r3, r5\n\t"
17438 #else
17439         "sbc	r3, r5\n\t"
17440 #endif
17441         "stm	%[a]!, {r2, r3}\n\t"
17442         "ldm	%[b]!, {r4, r5}\n\t"
17443         "ldr	r2, [%[a]]\n\t"
17444         "ldr	r3, [%[a], #4]\n\t"
17445 #ifdef WOLFSSL_KEIL
17446         "sbcs	r2, r2, r4\n\t"
17447 #elif defined(__clang__)
17448         "sbcs	r2, r4\n\t"
17449 #else
17450         "sbc	r2, r4\n\t"
17451 #endif
17452 #ifdef WOLFSSL_KEIL
17453         "sbcs	r3, r3, r5\n\t"
17454 #elif defined(__clang__)
17455         "sbcs	r3, r5\n\t"
17456 #else
17457         "sbc	r3, r5\n\t"
17458 #endif
17459         "stm	%[a]!, {r2, r3}\n\t"
17460         "ldm	%[b]!, {r4, r5}\n\t"
17461         "ldr	r2, [%[a]]\n\t"
17462         "ldr	r3, [%[a], #4]\n\t"
17463 #ifdef WOLFSSL_KEIL
17464         "sbcs	r2, r2, r4\n\t"
17465 #elif defined(__clang__)
17466         "sbcs	r2, r4\n\t"
17467 #else
17468         "sbc	r2, r4\n\t"
17469 #endif
17470 #ifdef WOLFSSL_KEIL
17471         "sbcs	r3, r3, r5\n\t"
17472 #elif defined(__clang__)
17473         "sbcs	r3, r5\n\t"
17474 #else
17475         "sbc	r3, r5\n\t"
17476 #endif
17477         "stm	%[a]!, {r2, r3}\n\t"
17478         "ldm	%[b]!, {r4, r5}\n\t"
17479         "ldr	r2, [%[a]]\n\t"
17480         "ldr	r3, [%[a], #4]\n\t"
17481 #ifdef WOLFSSL_KEIL
17482         "sbcs	r2, r2, r4\n\t"
17483 #elif defined(__clang__)
17484         "sbcs	r2, r4\n\t"
17485 #else
17486         "sbc	r2, r4\n\t"
17487 #endif
17488 #ifdef WOLFSSL_KEIL
17489         "sbcs	r3, r3, r5\n\t"
17490 #elif defined(__clang__)
17491         "sbcs	r3, r5\n\t"
17492 #else
17493         "sbc	r3, r5\n\t"
17494 #endif
17495         "stm	%[a]!, {r2, r3}\n\t"
17496 #ifdef WOLFSSL_KEIL
17497         "sbcs	%[a], %[a], %[a]\n\t"
17498 #elif defined(__clang__)
17499         "sbcs	%[a], %[a]\n\t"
17500 #else
17501         "sbc	%[a], %[a]\n\t"
17502 #endif
17503         : [a] "+r" (a), [b] "+r" (b)
17504         :
17505         : "memory", "r2", "r3", "r4", "r5"
17506     );
17507     return (uint32_t)(size_t)a;
17508 }
17509 
17510 /* Add b to a into r. (r = a + b)
17511  *
17512  * r  A single precision integer.
17513  * a  A single precision integer.
17514  * b  A single precision integer.
17515  */
sp_2048_add_32(sp_digit * r,const sp_digit * a,const sp_digit * b)17516 SP_NOINLINE static sp_digit sp_2048_add_32(sp_digit* r, const sp_digit* a,
17517         const sp_digit* b)
17518 {
17519     __asm__ __volatile__ (
17520         "ldm	%[b]!, {r5, r6}\n\t"
17521         "ldm	%[a]!, {r3, r4}\n\t"
17522 #if defined(__clang__) || defined(WOLFSSL_KEIL)
17523         "adds	r3, r3, r5\n\t"
17524 #else
17525         "add	r3, r3, r5\n\t"
17526 #endif
17527 #ifdef WOLFSSL_KEIL
17528         "adcs	r4, r4, r6\n\t"
17529 #elif defined(__clang__)
17530         "adcs	r4, r6\n\t"
17531 #else
17532         "adc	r4, r6\n\t"
17533 #endif
17534         "stm	%[r]!, {r3, r4}\n\t"
17535         "ldm	%[b]!, {r5, r6}\n\t"
17536         "ldm	%[a]!, {r3, r4}\n\t"
17537 #ifdef WOLFSSL_KEIL
17538         "adcs	r3, r3, r5\n\t"
17539 #elif defined(__clang__)
17540         "adcs	r3, r5\n\t"
17541 #else
17542         "adc	r3, r5\n\t"
17543 #endif
17544 #ifdef WOLFSSL_KEIL
17545         "adcs	r4, r4, r6\n\t"
17546 #elif defined(__clang__)
17547         "adcs	r4, r6\n\t"
17548 #else
17549         "adc	r4, r6\n\t"
17550 #endif
17551         "stm	%[r]!, {r3, r4}\n\t"
17552         "ldm	%[b]!, {r5, r6}\n\t"
17553         "ldm	%[a]!, {r3, r4}\n\t"
17554 #ifdef WOLFSSL_KEIL
17555         "adcs	r3, r3, r5\n\t"
17556 #elif defined(__clang__)
17557         "adcs	r3, r5\n\t"
17558 #else
17559         "adc	r3, r5\n\t"
17560 #endif
17561 #ifdef WOLFSSL_KEIL
17562         "adcs	r4, r4, r6\n\t"
17563 #elif defined(__clang__)
17564         "adcs	r4, r6\n\t"
17565 #else
17566         "adc	r4, r6\n\t"
17567 #endif
17568         "stm	%[r]!, {r3, r4}\n\t"
17569         "ldm	%[b]!, {r5, r6}\n\t"
17570         "ldm	%[a]!, {r3, r4}\n\t"
17571 #ifdef WOLFSSL_KEIL
17572         "adcs	r3, r3, r5\n\t"
17573 #elif defined(__clang__)
17574         "adcs	r3, r5\n\t"
17575 #else
17576         "adc	r3, r5\n\t"
17577 #endif
17578 #ifdef WOLFSSL_KEIL
17579         "adcs	r4, r4, r6\n\t"
17580 #elif defined(__clang__)
17581         "adcs	r4, r6\n\t"
17582 #else
17583         "adc	r4, r6\n\t"
17584 #endif
17585         "stm	%[r]!, {r3, r4}\n\t"
17586         "ldm	%[b]!, {r5, r6}\n\t"
17587         "ldm	%[a]!, {r3, r4}\n\t"
17588 #ifdef WOLFSSL_KEIL
17589         "adcs	r3, r3, r5\n\t"
17590 #elif defined(__clang__)
17591         "adcs	r3, r5\n\t"
17592 #else
17593         "adc	r3, r5\n\t"
17594 #endif
17595 #ifdef WOLFSSL_KEIL
17596         "adcs	r4, r4, r6\n\t"
17597 #elif defined(__clang__)
17598         "adcs	r4, r6\n\t"
17599 #else
17600         "adc	r4, r6\n\t"
17601 #endif
17602         "stm	%[r]!, {r3, r4}\n\t"
17603         "ldm	%[b]!, {r5, r6}\n\t"
17604         "ldm	%[a]!, {r3, r4}\n\t"
17605 #ifdef WOLFSSL_KEIL
17606         "adcs	r3, r3, r5\n\t"
17607 #elif defined(__clang__)
17608         "adcs	r3, r5\n\t"
17609 #else
17610         "adc	r3, r5\n\t"
17611 #endif
17612 #ifdef WOLFSSL_KEIL
17613         "adcs	r4, r4, r6\n\t"
17614 #elif defined(__clang__)
17615         "adcs	r4, r6\n\t"
17616 #else
17617         "adc	r4, r6\n\t"
17618 #endif
17619         "stm	%[r]!, {r3, r4}\n\t"
17620         "ldm	%[b]!, {r5, r6}\n\t"
17621         "ldm	%[a]!, {r3, r4}\n\t"
17622 #ifdef WOLFSSL_KEIL
17623         "adcs	r3, r3, r5\n\t"
17624 #elif defined(__clang__)
17625         "adcs	r3, r5\n\t"
17626 #else
17627         "adc	r3, r5\n\t"
17628 #endif
17629 #ifdef WOLFSSL_KEIL
17630         "adcs	r4, r4, r6\n\t"
17631 #elif defined(__clang__)
17632         "adcs	r4, r6\n\t"
17633 #else
17634         "adc	r4, r6\n\t"
17635 #endif
17636         "stm	%[r]!, {r3, r4}\n\t"
17637         "ldm	%[b]!, {r5, r6}\n\t"
17638         "ldm	%[a]!, {r3, r4}\n\t"
17639 #ifdef WOLFSSL_KEIL
17640         "adcs	r3, r3, r5\n\t"
17641 #elif defined(__clang__)
17642         "adcs	r3, r5\n\t"
17643 #else
17644         "adc	r3, r5\n\t"
17645 #endif
17646 #ifdef WOLFSSL_KEIL
17647         "adcs	r4, r4, r6\n\t"
17648 #elif defined(__clang__)
17649         "adcs	r4, r6\n\t"
17650 #else
17651         "adc	r4, r6\n\t"
17652 #endif
17653         "stm	%[r]!, {r3, r4}\n\t"
17654         "ldm	%[b]!, {r5, r6}\n\t"
17655         "ldm	%[a]!, {r3, r4}\n\t"
17656 #ifdef WOLFSSL_KEIL
17657         "adcs	r3, r3, r5\n\t"
17658 #elif defined(__clang__)
17659         "adcs	r3, r5\n\t"
17660 #else
17661         "adc	r3, r5\n\t"
17662 #endif
17663 #ifdef WOLFSSL_KEIL
17664         "adcs	r4, r4, r6\n\t"
17665 #elif defined(__clang__)
17666         "adcs	r4, r6\n\t"
17667 #else
17668         "adc	r4, r6\n\t"
17669 #endif
17670         "stm	%[r]!, {r3, r4}\n\t"
17671         "ldm	%[b]!, {r5, r6}\n\t"
17672         "ldm	%[a]!, {r3, r4}\n\t"
17673 #ifdef WOLFSSL_KEIL
17674         "adcs	r3, r3, r5\n\t"
17675 #elif defined(__clang__)
17676         "adcs	r3, r5\n\t"
17677 #else
17678         "adc	r3, r5\n\t"
17679 #endif
17680 #ifdef WOLFSSL_KEIL
17681         "adcs	r4, r4, r6\n\t"
17682 #elif defined(__clang__)
17683         "adcs	r4, r6\n\t"
17684 #else
17685         "adc	r4, r6\n\t"
17686 #endif
17687         "stm	%[r]!, {r3, r4}\n\t"
17688         "ldm	%[b]!, {r5, r6}\n\t"
17689         "ldm	%[a]!, {r3, r4}\n\t"
17690 #ifdef WOLFSSL_KEIL
17691         "adcs	r3, r3, r5\n\t"
17692 #elif defined(__clang__)
17693         "adcs	r3, r5\n\t"
17694 #else
17695         "adc	r3, r5\n\t"
17696 #endif
17697 #ifdef WOLFSSL_KEIL
17698         "adcs	r4, r4, r6\n\t"
17699 #elif defined(__clang__)
17700         "adcs	r4, r6\n\t"
17701 #else
17702         "adc	r4, r6\n\t"
17703 #endif
17704         "stm	%[r]!, {r3, r4}\n\t"
17705         "ldm	%[b]!, {r5, r6}\n\t"
17706         "ldm	%[a]!, {r3, r4}\n\t"
17707 #ifdef WOLFSSL_KEIL
17708         "adcs	r3, r3, r5\n\t"
17709 #elif defined(__clang__)
17710         "adcs	r3, r5\n\t"
17711 #else
17712         "adc	r3, r5\n\t"
17713 #endif
17714 #ifdef WOLFSSL_KEIL
17715         "adcs	r4, r4, r6\n\t"
17716 #elif defined(__clang__)
17717         "adcs	r4, r6\n\t"
17718 #else
17719         "adc	r4, r6\n\t"
17720 #endif
17721         "stm	%[r]!, {r3, r4}\n\t"
17722         "ldm	%[b]!, {r5, r6}\n\t"
17723         "ldm	%[a]!, {r3, r4}\n\t"
17724 #ifdef WOLFSSL_KEIL
17725         "adcs	r3, r3, r5\n\t"
17726 #elif defined(__clang__)
17727         "adcs	r3, r5\n\t"
17728 #else
17729         "adc	r3, r5\n\t"
17730 #endif
17731 #ifdef WOLFSSL_KEIL
17732         "adcs	r4, r4, r6\n\t"
17733 #elif defined(__clang__)
17734         "adcs	r4, r6\n\t"
17735 #else
17736         "adc	r4, r6\n\t"
17737 #endif
17738         "stm	%[r]!, {r3, r4}\n\t"
17739         "ldm	%[b]!, {r5, r6}\n\t"
17740         "ldm	%[a]!, {r3, r4}\n\t"
17741 #ifdef WOLFSSL_KEIL
17742         "adcs	r3, r3, r5\n\t"
17743 #elif defined(__clang__)
17744         "adcs	r3, r5\n\t"
17745 #else
17746         "adc	r3, r5\n\t"
17747 #endif
17748 #ifdef WOLFSSL_KEIL
17749         "adcs	r4, r4, r6\n\t"
17750 #elif defined(__clang__)
17751         "adcs	r4, r6\n\t"
17752 #else
17753         "adc	r4, r6\n\t"
17754 #endif
17755         "stm	%[r]!, {r3, r4}\n\t"
17756         "ldm	%[b]!, {r5, r6}\n\t"
17757         "ldm	%[a]!, {r3, r4}\n\t"
17758 #ifdef WOLFSSL_KEIL
17759         "adcs	r3, r3, r5\n\t"
17760 #elif defined(__clang__)
17761         "adcs	r3, r5\n\t"
17762 #else
17763         "adc	r3, r5\n\t"
17764 #endif
17765 #ifdef WOLFSSL_KEIL
17766         "adcs	r4, r4, r6\n\t"
17767 #elif defined(__clang__)
17768         "adcs	r4, r6\n\t"
17769 #else
17770         "adc	r4, r6\n\t"
17771 #endif
17772         "stm	%[r]!, {r3, r4}\n\t"
17773         "ldm	%[b]!, {r5, r6}\n\t"
17774         "ldm	%[a]!, {r3, r4}\n\t"
17775 #ifdef WOLFSSL_KEIL
17776         "adcs	r3, r3, r5\n\t"
17777 #elif defined(__clang__)
17778         "adcs	r3, r5\n\t"
17779 #else
17780         "adc	r3, r5\n\t"
17781 #endif
17782 #ifdef WOLFSSL_KEIL
17783         "adcs	r4, r4, r6\n\t"
17784 #elif defined(__clang__)
17785         "adcs	r4, r6\n\t"
17786 #else
17787         "adc	r4, r6\n\t"
17788 #endif
17789         "stm	%[r]!, {r3, r4}\n\t"
17790         "movs	%[r], #0\n\t"
17791 #ifdef WOLFSSL_KEIL
17792         "adcs	%[r], %[r], %[r]\n\t"
17793 #elif defined(__clang__)
17794         "adcs	%[r], %[r]\n\t"
17795 #else
17796         "adc	%[r], %[r]\n\t"
17797 #endif
17798         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
17799         :
17800         : "memory", "r3", "r4", "r5", "r6"
17801     );
17802     return (uint32_t)(size_t)r;
17803 }
17804 
17805 /* AND m into each word of a and store in r.
17806  *
17807  * r  A single precision integer.
17808  * a  A single precision integer.
17809  * m  Mask to AND against each digit.
17810  */
sp_2048_mask_16(sp_digit * r,const sp_digit * a,sp_digit m)17811 static void sp_2048_mask_16(sp_digit* r, const sp_digit* a, sp_digit m)
17812 {
17813 #ifdef WOLFSSL_SP_SMALL
17814     int i;
17815 
17816     for (i=0; i<16; i++) {
17817         r[i] = a[i] & m;
17818     }
17819 #else
17820     int i;
17821 
17822     for (i = 0; i < 16; i += 8) {
17823         r[i+0] = a[i+0] & m;
17824         r[i+1] = a[i+1] & m;
17825         r[i+2] = a[i+2] & m;
17826         r[i+3] = a[i+3] & m;
17827         r[i+4] = a[i+4] & m;
17828         r[i+5] = a[i+5] & m;
17829         r[i+6] = a[i+6] & m;
17830         r[i+7] = a[i+7] & m;
17831     }
17832 #endif
17833 }
17834 
17835 /* Multiply a and b into r. (r = a * b)
17836  *
17837  * r  A single precision integer.
17838  * a  A single precision integer.
17839  * b  A single precision integer.
17840  */
sp_2048_mul_32(sp_digit * r,const sp_digit * a,const sp_digit * b)17841 SP_NOINLINE static void sp_2048_mul_32(sp_digit* r, const sp_digit* a,
17842         const sp_digit* b)
17843 {
17844     sp_digit* z0 = r;
17845     sp_digit z1[32];
17846     sp_digit a1[16];
17847     sp_digit b1[16];
17848     sp_digit z2[32];
17849     sp_digit u;
17850     sp_digit ca;
17851     sp_digit cb;
17852 
17853     ca = sp_2048_add_16(a1, a, &a[16]);
17854     cb = sp_2048_add_16(b1, b, &b[16]);
17855     u  = ca & cb;
17856     sp_2048_mul_16(z1, a1, b1);
17857     sp_2048_mul_16(z2, &a[16], &b[16]);
17858     sp_2048_mul_16(z0, a, b);
17859     sp_2048_mask_16(r + 32, a1, 0 - cb);
17860     sp_2048_mask_16(b1, b1, 0 - ca);
17861     u += sp_2048_add_16(r + 32, r + 32, b1);
17862     u += sp_2048_sub_in_place_32(z1, z2);
17863     u += sp_2048_sub_in_place_32(z1, z0);
17864     u += sp_2048_add_32(r + 16, r + 16, z1);
17865     u += sp_2048_add_16(r + 32, r + 32, z2);
17866     (void)sp_2048_add_to_word_16(r + 48, u, z2 + 16);
17867 }
17868 
17869 /* Double a into r. (r = a + a)
17870  *
17871  * r  A single precision integer.
17872  * a  A single precision integer.
17873  */
sp_2048_dbl_16(sp_digit * r,const sp_digit * a)17874 SP_NOINLINE static sp_digit sp_2048_dbl_16(sp_digit* r, const sp_digit* a)
17875 {
17876     __asm__ __volatile__ (
17877         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
17878 #if defined(__clang__) || defined(WOLFSSL_KEIL)
17879         "adds	r2, r2, r2\n\t"
17880 #else
17881         "add	r2, r2, r2\n\t"
17882 #endif
17883 #ifdef WOLFSSL_KEIL
17884         "adcs	r3, r3, r3\n\t"
17885 #elif defined(__clang__)
17886         "adcs	r3, r3\n\t"
17887 #else
17888         "adc	r3, r3\n\t"
17889 #endif
17890 #ifdef WOLFSSL_KEIL
17891         "adcs	r4, r4, r4\n\t"
17892 #elif defined(__clang__)
17893         "adcs	r4, r4\n\t"
17894 #else
17895         "adc	r4, r4\n\t"
17896 #endif
17897 #ifdef WOLFSSL_KEIL
17898         "adcs	r5, r5, r5\n\t"
17899 #elif defined(__clang__)
17900         "adcs	r5, r5\n\t"
17901 #else
17902         "adc	r5, r5\n\t"
17903 #endif
17904         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
17905         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
17906 #ifdef WOLFSSL_KEIL
17907         "adcs	r2, r2, r2\n\t"
17908 #elif defined(__clang__)
17909         "adcs	r2, r2\n\t"
17910 #else
17911         "adc	r2, r2\n\t"
17912 #endif
17913 #ifdef WOLFSSL_KEIL
17914         "adcs	r3, r3, r3\n\t"
17915 #elif defined(__clang__)
17916         "adcs	r3, r3\n\t"
17917 #else
17918         "adc	r3, r3\n\t"
17919 #endif
17920 #ifdef WOLFSSL_KEIL
17921         "adcs	r4, r4, r4\n\t"
17922 #elif defined(__clang__)
17923         "adcs	r4, r4\n\t"
17924 #else
17925         "adc	r4, r4\n\t"
17926 #endif
17927 #ifdef WOLFSSL_KEIL
17928         "adcs	r5, r5, r5\n\t"
17929 #elif defined(__clang__)
17930         "adcs	r5, r5\n\t"
17931 #else
17932         "adc	r5, r5\n\t"
17933 #endif
17934         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
17935         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
17936 #ifdef WOLFSSL_KEIL
17937         "adcs	r2, r2, r2\n\t"
17938 #elif defined(__clang__)
17939         "adcs	r2, r2\n\t"
17940 #else
17941         "adc	r2, r2\n\t"
17942 #endif
17943 #ifdef WOLFSSL_KEIL
17944         "adcs	r3, r3, r3\n\t"
17945 #elif defined(__clang__)
17946         "adcs	r3, r3\n\t"
17947 #else
17948         "adc	r3, r3\n\t"
17949 #endif
17950 #ifdef WOLFSSL_KEIL
17951         "adcs	r4, r4, r4\n\t"
17952 #elif defined(__clang__)
17953         "adcs	r4, r4\n\t"
17954 #else
17955         "adc	r4, r4\n\t"
17956 #endif
17957 #ifdef WOLFSSL_KEIL
17958         "adcs	r5, r5, r5\n\t"
17959 #elif defined(__clang__)
17960         "adcs	r5, r5\n\t"
17961 #else
17962         "adc	r5, r5\n\t"
17963 #endif
17964         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
17965         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
17966 #ifdef WOLFSSL_KEIL
17967         "adcs	r2, r2, r2\n\t"
17968 #elif defined(__clang__)
17969         "adcs	r2, r2\n\t"
17970 #else
17971         "adc	r2, r2\n\t"
17972 #endif
17973 #ifdef WOLFSSL_KEIL
17974         "adcs	r3, r3, r3\n\t"
17975 #elif defined(__clang__)
17976         "adcs	r3, r3\n\t"
17977 #else
17978         "adc	r3, r3\n\t"
17979 #endif
17980 #ifdef WOLFSSL_KEIL
17981         "adcs	r4, r4, r4\n\t"
17982 #elif defined(__clang__)
17983         "adcs	r4, r4\n\t"
17984 #else
17985         "adc	r4, r4\n\t"
17986 #endif
17987 #ifdef WOLFSSL_KEIL
17988         "adcs	r5, r5, r5\n\t"
17989 #elif defined(__clang__)
17990         "adcs	r5, r5\n\t"
17991 #else
17992         "adc	r5, r5\n\t"
17993 #endif
17994         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
17995         "movs	%[r], #0\n\t"
17996 #ifdef WOLFSSL_KEIL
17997         "adcs	%[r], %[r], %[r]\n\t"
17998 #elif defined(__clang__)
17999         "adcs	%[r], %[r]\n\t"
18000 #else
18001         "adc	%[r], %[r]\n\t"
18002 #endif
18003         : [r] "+r" (r), [a] "+r" (a)
18004         :
18005         : "memory", "r2", "r3", "r4", "r5"
18006     );
18007     return (uint32_t)(size_t)r;
18008 }
18009 
18010 /* Square a and put result in r. (r = a * a)
18011  *
18012  * r  A single precision integer.
18013  * a  A single precision integer.
18014  */
sp_2048_sqr_32(sp_digit * r,const sp_digit * a)18015 SP_NOINLINE static void sp_2048_sqr_32(sp_digit* r, const sp_digit* a)
18016 {
18017     sp_digit* z0 = r;
18018     sp_digit z2[32];
18019     sp_digit z1[32];
18020     sp_digit a1[16];
18021     sp_digit u;
18022 
18023     u = sp_2048_add_16(a1, a, &a[16]);
18024     sp_2048_sqr_16(z1, a1);
18025     sp_2048_sqr_16(z2, &a[16]);
18026     sp_2048_sqr_16(z0, a);
18027     sp_2048_mask_16(r + 32, a1, 0 - u);
18028     u += sp_2048_dbl_16(r + 32, r + 32);
18029     u += sp_2048_sub_in_place_32(z1, z2);
18030     u += sp_2048_sub_in_place_32(z1, z0);
18031     u += sp_2048_add_32(r + 16, r + 16, z1);
18032     u += sp_2048_add_16(r + 32, r + 32, z2);
18033     (void)sp_2048_add_to_word_16(r + 48, u, z2 + 16);
18034 }
18035 
18036 /* Add b to a into r. (r = a + b)
18037  *
18038  * r  A single precision integer.
18039  * a  A single precision integer.
18040  * b  A single precision integer.
18041  */
sp_2048_add_to_word_32(sp_digit * r,sp_digit a,const sp_digit * b)18042 SP_NOINLINE static sp_digit sp_2048_add_to_word_32(sp_digit* r, sp_digit a,
18043         const sp_digit* b)
18044 {
18045     __asm__ __volatile__ (
18046         "movs	r5, #0\n\t"
18047         "ldm	%[b]!, {r3, r4}\n\t"
18048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
18049         "adds	r3, r3, %[a]\n\t"
18050 #else
18051         "add	r3, r3, %[a]\n\t"
18052 #endif
18053 #ifdef WOLFSSL_KEIL
18054         "adcs	r4, r4, r5\n\t"
18055 #elif defined(__clang__)
18056         "adcs	r4, r5\n\t"
18057 #else
18058         "adc	r4, r5\n\t"
18059 #endif
18060         "stm	%[r]!, {r3, r4}\n\t"
18061         "ldm	%[b]!, {r3, r4}\n\t"
18062 #ifdef WOLFSSL_KEIL
18063         "adcs	r3, r3, r5\n\t"
18064 #elif defined(__clang__)
18065         "adcs	r3, r5\n\t"
18066 #else
18067         "adc	r3, r5\n\t"
18068 #endif
18069 #ifdef WOLFSSL_KEIL
18070         "adcs	r4, r4, r5\n\t"
18071 #elif defined(__clang__)
18072         "adcs	r4, r5\n\t"
18073 #else
18074         "adc	r4, r5\n\t"
18075 #endif
18076         "stm	%[r]!, {r3, r4}\n\t"
18077         "ldm	%[b]!, {r3, r4}\n\t"
18078 #ifdef WOLFSSL_KEIL
18079         "adcs	r3, r3, r5\n\t"
18080 #elif defined(__clang__)
18081         "adcs	r3, r5\n\t"
18082 #else
18083         "adc	r3, r5\n\t"
18084 #endif
18085 #ifdef WOLFSSL_KEIL
18086         "adcs	r4, r4, r5\n\t"
18087 #elif defined(__clang__)
18088         "adcs	r4, r5\n\t"
18089 #else
18090         "adc	r4, r5\n\t"
18091 #endif
18092         "stm	%[r]!, {r3, r4}\n\t"
18093         "ldm	%[b]!, {r3, r4}\n\t"
18094 #ifdef WOLFSSL_KEIL
18095         "adcs	r3, r3, r5\n\t"
18096 #elif defined(__clang__)
18097         "adcs	r3, r5\n\t"
18098 #else
18099         "adc	r3, r5\n\t"
18100 #endif
18101 #ifdef WOLFSSL_KEIL
18102         "adcs	r4, r4, r5\n\t"
18103 #elif defined(__clang__)
18104         "adcs	r4, r5\n\t"
18105 #else
18106         "adc	r4, r5\n\t"
18107 #endif
18108         "stm	%[r]!, {r3, r4}\n\t"
18109         "ldm	%[b]!, {r3, r4}\n\t"
18110 #ifdef WOLFSSL_KEIL
18111         "adcs	r3, r3, r5\n\t"
18112 #elif defined(__clang__)
18113         "adcs	r3, r5\n\t"
18114 #else
18115         "adc	r3, r5\n\t"
18116 #endif
18117 #ifdef WOLFSSL_KEIL
18118         "adcs	r4, r4, r5\n\t"
18119 #elif defined(__clang__)
18120         "adcs	r4, r5\n\t"
18121 #else
18122         "adc	r4, r5\n\t"
18123 #endif
18124         "stm	%[r]!, {r3, r4}\n\t"
18125         "ldm	%[b]!, {r3, r4}\n\t"
18126 #ifdef WOLFSSL_KEIL
18127         "adcs	r3, r3, r5\n\t"
18128 #elif defined(__clang__)
18129         "adcs	r3, r5\n\t"
18130 #else
18131         "adc	r3, r5\n\t"
18132 #endif
18133 #ifdef WOLFSSL_KEIL
18134         "adcs	r4, r4, r5\n\t"
18135 #elif defined(__clang__)
18136         "adcs	r4, r5\n\t"
18137 #else
18138         "adc	r4, r5\n\t"
18139 #endif
18140         "stm	%[r]!, {r3, r4}\n\t"
18141         "ldm	%[b]!, {r3, r4}\n\t"
18142 #ifdef WOLFSSL_KEIL
18143         "adcs	r3, r3, r5\n\t"
18144 #elif defined(__clang__)
18145         "adcs	r3, r5\n\t"
18146 #else
18147         "adc	r3, r5\n\t"
18148 #endif
18149 #ifdef WOLFSSL_KEIL
18150         "adcs	r4, r4, r5\n\t"
18151 #elif defined(__clang__)
18152         "adcs	r4, r5\n\t"
18153 #else
18154         "adc	r4, r5\n\t"
18155 #endif
18156         "stm	%[r]!, {r3, r4}\n\t"
18157         "ldm	%[b]!, {r3, r4}\n\t"
18158 #ifdef WOLFSSL_KEIL
18159         "adcs	r3, r3, r5\n\t"
18160 #elif defined(__clang__)
18161         "adcs	r3, r5\n\t"
18162 #else
18163         "adc	r3, r5\n\t"
18164 #endif
18165 #ifdef WOLFSSL_KEIL
18166         "adcs	r4, r4, r5\n\t"
18167 #elif defined(__clang__)
18168         "adcs	r4, r5\n\t"
18169 #else
18170         "adc	r4, r5\n\t"
18171 #endif
18172         "stm	%[r]!, {r3, r4}\n\t"
18173         "ldm	%[b]!, {r3, r4}\n\t"
18174 #ifdef WOLFSSL_KEIL
18175         "adcs	r3, r3, r5\n\t"
18176 #elif defined(__clang__)
18177         "adcs	r3, r5\n\t"
18178 #else
18179         "adc	r3, r5\n\t"
18180 #endif
18181 #ifdef WOLFSSL_KEIL
18182         "adcs	r4, r4, r5\n\t"
18183 #elif defined(__clang__)
18184         "adcs	r4, r5\n\t"
18185 #else
18186         "adc	r4, r5\n\t"
18187 #endif
18188         "stm	%[r]!, {r3, r4}\n\t"
18189         "ldm	%[b]!, {r3, r4}\n\t"
18190 #ifdef WOLFSSL_KEIL
18191         "adcs	r3, r3, r5\n\t"
18192 #elif defined(__clang__)
18193         "adcs	r3, r5\n\t"
18194 #else
18195         "adc	r3, r5\n\t"
18196 #endif
18197 #ifdef WOLFSSL_KEIL
18198         "adcs	r4, r4, r5\n\t"
18199 #elif defined(__clang__)
18200         "adcs	r4, r5\n\t"
18201 #else
18202         "adc	r4, r5\n\t"
18203 #endif
18204         "stm	%[r]!, {r3, r4}\n\t"
18205         "ldm	%[b]!, {r3, r4}\n\t"
18206 #ifdef WOLFSSL_KEIL
18207         "adcs	r3, r3, r5\n\t"
18208 #elif defined(__clang__)
18209         "adcs	r3, r5\n\t"
18210 #else
18211         "adc	r3, r5\n\t"
18212 #endif
18213 #ifdef WOLFSSL_KEIL
18214         "adcs	r4, r4, r5\n\t"
18215 #elif defined(__clang__)
18216         "adcs	r4, r5\n\t"
18217 #else
18218         "adc	r4, r5\n\t"
18219 #endif
18220         "stm	%[r]!, {r3, r4}\n\t"
18221         "ldm	%[b]!, {r3, r4}\n\t"
18222 #ifdef WOLFSSL_KEIL
18223         "adcs	r3, r3, r5\n\t"
18224 #elif defined(__clang__)
18225         "adcs	r3, r5\n\t"
18226 #else
18227         "adc	r3, r5\n\t"
18228 #endif
18229 #ifdef WOLFSSL_KEIL
18230         "adcs	r4, r4, r5\n\t"
18231 #elif defined(__clang__)
18232         "adcs	r4, r5\n\t"
18233 #else
18234         "adc	r4, r5\n\t"
18235 #endif
18236         "stm	%[r]!, {r3, r4}\n\t"
18237         "ldm	%[b]!, {r3, r4}\n\t"
18238 #ifdef WOLFSSL_KEIL
18239         "adcs	r3, r3, r5\n\t"
18240 #elif defined(__clang__)
18241         "adcs	r3, r5\n\t"
18242 #else
18243         "adc	r3, r5\n\t"
18244 #endif
18245 #ifdef WOLFSSL_KEIL
18246         "adcs	r4, r4, r5\n\t"
18247 #elif defined(__clang__)
18248         "adcs	r4, r5\n\t"
18249 #else
18250         "adc	r4, r5\n\t"
18251 #endif
18252         "stm	%[r]!, {r3, r4}\n\t"
18253         "ldm	%[b]!, {r3, r4}\n\t"
18254 #ifdef WOLFSSL_KEIL
18255         "adcs	r3, r3, r5\n\t"
18256 #elif defined(__clang__)
18257         "adcs	r3, r5\n\t"
18258 #else
18259         "adc	r3, r5\n\t"
18260 #endif
18261 #ifdef WOLFSSL_KEIL
18262         "adcs	r4, r4, r5\n\t"
18263 #elif defined(__clang__)
18264         "adcs	r4, r5\n\t"
18265 #else
18266         "adc	r4, r5\n\t"
18267 #endif
18268         "stm	%[r]!, {r3, r4}\n\t"
18269         "ldm	%[b]!, {r3, r4}\n\t"
18270 #ifdef WOLFSSL_KEIL
18271         "adcs	r3, r3, r5\n\t"
18272 #elif defined(__clang__)
18273         "adcs	r3, r5\n\t"
18274 #else
18275         "adc	r3, r5\n\t"
18276 #endif
18277 #ifdef WOLFSSL_KEIL
18278         "adcs	r4, r4, r5\n\t"
18279 #elif defined(__clang__)
18280         "adcs	r4, r5\n\t"
18281 #else
18282         "adc	r4, r5\n\t"
18283 #endif
18284         "stm	%[r]!, {r3, r4}\n\t"
18285         "ldm	%[b]!, {r3, r4}\n\t"
18286 #ifdef WOLFSSL_KEIL
18287         "adcs	r3, r3, r5\n\t"
18288 #elif defined(__clang__)
18289         "adcs	r3, r5\n\t"
18290 #else
18291         "adc	r3, r5\n\t"
18292 #endif
18293 #ifdef WOLFSSL_KEIL
18294         "adcs	r4, r4, r5\n\t"
18295 #elif defined(__clang__)
18296         "adcs	r4, r5\n\t"
18297 #else
18298         "adc	r4, r5\n\t"
18299 #endif
18300         "stm	%[r]!, {r3, r4}\n\t"
18301         "movs	%[r], #0\n\t"
18302 #ifdef WOLFSSL_KEIL
18303         "adcs	%[r], %[r], %[r]\n\t"
18304 #elif defined(__clang__)
18305         "adcs	%[r], %[r]\n\t"
18306 #else
18307         "adc	%[r], %[r]\n\t"
18308 #endif
18309         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
18310         :
18311         : "memory", "r3", "r4", "r5"
18312     );
18313     return (uint32_t)(size_t)r;
18314 }
18315 
18316 /* Sub b from a into a. (a -= b)
18317  *
18318  * a  A single precision integer.
18319  * b  A single precision integer.
18320  */
sp_2048_sub_in_place_64(sp_digit * a,const sp_digit * b)18321 SP_NOINLINE static sp_digit sp_2048_sub_in_place_64(sp_digit* a,
18322         const sp_digit* b)
18323 {
18324     __asm__ __volatile__ (
18325         "ldm	%[b]!, {r4, r5}\n\t"
18326         "ldr	r2, [%[a]]\n\t"
18327         "ldr	r3, [%[a], #4]\n\t"
18328 #if defined(__clang__) || defined(WOLFSSL_KEIL)
18329         "subs	r2, r2, r4\n\t"
18330 #else
18331         "sub	r2, r2, r4\n\t"
18332 #endif
18333 #ifdef WOLFSSL_KEIL
18334         "sbcs	r3, r3, r5\n\t"
18335 #elif defined(__clang__)
18336         "sbcs	r3, r5\n\t"
18337 #else
18338         "sbc	r3, r5\n\t"
18339 #endif
18340         "stm	%[a]!, {r2, r3}\n\t"
18341         "ldm	%[b]!, {r4, r5}\n\t"
18342         "ldr	r2, [%[a]]\n\t"
18343         "ldr	r3, [%[a], #4]\n\t"
18344 #ifdef WOLFSSL_KEIL
18345         "sbcs	r2, r2, r4\n\t"
18346 #elif defined(__clang__)
18347         "sbcs	r2, r4\n\t"
18348 #else
18349         "sbc	r2, r4\n\t"
18350 #endif
18351 #ifdef WOLFSSL_KEIL
18352         "sbcs	r3, r3, r5\n\t"
18353 #elif defined(__clang__)
18354         "sbcs	r3, r5\n\t"
18355 #else
18356         "sbc	r3, r5\n\t"
18357 #endif
18358         "stm	%[a]!, {r2, r3}\n\t"
18359         "ldm	%[b]!, {r4, r5}\n\t"
18360         "ldr	r2, [%[a]]\n\t"
18361         "ldr	r3, [%[a], #4]\n\t"
18362 #ifdef WOLFSSL_KEIL
18363         "sbcs	r2, r2, r4\n\t"
18364 #elif defined(__clang__)
18365         "sbcs	r2, r4\n\t"
18366 #else
18367         "sbc	r2, r4\n\t"
18368 #endif
18369 #ifdef WOLFSSL_KEIL
18370         "sbcs	r3, r3, r5\n\t"
18371 #elif defined(__clang__)
18372         "sbcs	r3, r5\n\t"
18373 #else
18374         "sbc	r3, r5\n\t"
18375 #endif
18376         "stm	%[a]!, {r2, r3}\n\t"
18377         "ldm	%[b]!, {r4, r5}\n\t"
18378         "ldr	r2, [%[a]]\n\t"
18379         "ldr	r3, [%[a], #4]\n\t"
18380 #ifdef WOLFSSL_KEIL
18381         "sbcs	r2, r2, r4\n\t"
18382 #elif defined(__clang__)
18383         "sbcs	r2, r4\n\t"
18384 #else
18385         "sbc	r2, r4\n\t"
18386 #endif
18387 #ifdef WOLFSSL_KEIL
18388         "sbcs	r3, r3, r5\n\t"
18389 #elif defined(__clang__)
18390         "sbcs	r3, r5\n\t"
18391 #else
18392         "sbc	r3, r5\n\t"
18393 #endif
18394         "stm	%[a]!, {r2, r3}\n\t"
18395         "ldm	%[b]!, {r4, r5}\n\t"
18396         "ldr	r2, [%[a]]\n\t"
18397         "ldr	r3, [%[a], #4]\n\t"
18398 #ifdef WOLFSSL_KEIL
18399         "sbcs	r2, r2, r4\n\t"
18400 #elif defined(__clang__)
18401         "sbcs	r2, r4\n\t"
18402 #else
18403         "sbc	r2, r4\n\t"
18404 #endif
18405 #ifdef WOLFSSL_KEIL
18406         "sbcs	r3, r3, r5\n\t"
18407 #elif defined(__clang__)
18408         "sbcs	r3, r5\n\t"
18409 #else
18410         "sbc	r3, r5\n\t"
18411 #endif
18412         "stm	%[a]!, {r2, r3}\n\t"
18413         "ldm	%[b]!, {r4, r5}\n\t"
18414         "ldr	r2, [%[a]]\n\t"
18415         "ldr	r3, [%[a], #4]\n\t"
18416 #ifdef WOLFSSL_KEIL
18417         "sbcs	r2, r2, r4\n\t"
18418 #elif defined(__clang__)
18419         "sbcs	r2, r4\n\t"
18420 #else
18421         "sbc	r2, r4\n\t"
18422 #endif
18423 #ifdef WOLFSSL_KEIL
18424         "sbcs	r3, r3, r5\n\t"
18425 #elif defined(__clang__)
18426         "sbcs	r3, r5\n\t"
18427 #else
18428         "sbc	r3, r5\n\t"
18429 #endif
18430         "stm	%[a]!, {r2, r3}\n\t"
18431         "ldm	%[b]!, {r4, r5}\n\t"
18432         "ldr	r2, [%[a]]\n\t"
18433         "ldr	r3, [%[a], #4]\n\t"
18434 #ifdef WOLFSSL_KEIL
18435         "sbcs	r2, r2, r4\n\t"
18436 #elif defined(__clang__)
18437         "sbcs	r2, r4\n\t"
18438 #else
18439         "sbc	r2, r4\n\t"
18440 #endif
18441 #ifdef WOLFSSL_KEIL
18442         "sbcs	r3, r3, r5\n\t"
18443 #elif defined(__clang__)
18444         "sbcs	r3, r5\n\t"
18445 #else
18446         "sbc	r3, r5\n\t"
18447 #endif
18448         "stm	%[a]!, {r2, r3}\n\t"
18449         "ldm	%[b]!, {r4, r5}\n\t"
18450         "ldr	r2, [%[a]]\n\t"
18451         "ldr	r3, [%[a], #4]\n\t"
18452 #ifdef WOLFSSL_KEIL
18453         "sbcs	r2, r2, r4\n\t"
18454 #elif defined(__clang__)
18455         "sbcs	r2, r4\n\t"
18456 #else
18457         "sbc	r2, r4\n\t"
18458 #endif
18459 #ifdef WOLFSSL_KEIL
18460         "sbcs	r3, r3, r5\n\t"
18461 #elif defined(__clang__)
18462         "sbcs	r3, r5\n\t"
18463 #else
18464         "sbc	r3, r5\n\t"
18465 #endif
18466         "stm	%[a]!, {r2, r3}\n\t"
18467         "ldm	%[b]!, {r4, r5}\n\t"
18468         "ldr	r2, [%[a]]\n\t"
18469         "ldr	r3, [%[a], #4]\n\t"
18470 #ifdef WOLFSSL_KEIL
18471         "sbcs	r2, r2, r4\n\t"
18472 #elif defined(__clang__)
18473         "sbcs	r2, r4\n\t"
18474 #else
18475         "sbc	r2, r4\n\t"
18476 #endif
18477 #ifdef WOLFSSL_KEIL
18478         "sbcs	r3, r3, r5\n\t"
18479 #elif defined(__clang__)
18480         "sbcs	r3, r5\n\t"
18481 #else
18482         "sbc	r3, r5\n\t"
18483 #endif
18484         "stm	%[a]!, {r2, r3}\n\t"
18485         "ldm	%[b]!, {r4, r5}\n\t"
18486         "ldr	r2, [%[a]]\n\t"
18487         "ldr	r3, [%[a], #4]\n\t"
18488 #ifdef WOLFSSL_KEIL
18489         "sbcs	r2, r2, r4\n\t"
18490 #elif defined(__clang__)
18491         "sbcs	r2, r4\n\t"
18492 #else
18493         "sbc	r2, r4\n\t"
18494 #endif
18495 #ifdef WOLFSSL_KEIL
18496         "sbcs	r3, r3, r5\n\t"
18497 #elif defined(__clang__)
18498         "sbcs	r3, r5\n\t"
18499 #else
18500         "sbc	r3, r5\n\t"
18501 #endif
18502         "stm	%[a]!, {r2, r3}\n\t"
18503         "ldm	%[b]!, {r4, r5}\n\t"
18504         "ldr	r2, [%[a]]\n\t"
18505         "ldr	r3, [%[a], #4]\n\t"
18506 #ifdef WOLFSSL_KEIL
18507         "sbcs	r2, r2, r4\n\t"
18508 #elif defined(__clang__)
18509         "sbcs	r2, r4\n\t"
18510 #else
18511         "sbc	r2, r4\n\t"
18512 #endif
18513 #ifdef WOLFSSL_KEIL
18514         "sbcs	r3, r3, r5\n\t"
18515 #elif defined(__clang__)
18516         "sbcs	r3, r5\n\t"
18517 #else
18518         "sbc	r3, r5\n\t"
18519 #endif
18520         "stm	%[a]!, {r2, r3}\n\t"
18521         "ldm	%[b]!, {r4, r5}\n\t"
18522         "ldr	r2, [%[a]]\n\t"
18523         "ldr	r3, [%[a], #4]\n\t"
18524 #ifdef WOLFSSL_KEIL
18525         "sbcs	r2, r2, r4\n\t"
18526 #elif defined(__clang__)
18527         "sbcs	r2, r4\n\t"
18528 #else
18529         "sbc	r2, r4\n\t"
18530 #endif
18531 #ifdef WOLFSSL_KEIL
18532         "sbcs	r3, r3, r5\n\t"
18533 #elif defined(__clang__)
18534         "sbcs	r3, r5\n\t"
18535 #else
18536         "sbc	r3, r5\n\t"
18537 #endif
18538         "stm	%[a]!, {r2, r3}\n\t"
18539         "ldm	%[b]!, {r4, r5}\n\t"
18540         "ldr	r2, [%[a]]\n\t"
18541         "ldr	r3, [%[a], #4]\n\t"
18542 #ifdef WOLFSSL_KEIL
18543         "sbcs	r2, r2, r4\n\t"
18544 #elif defined(__clang__)
18545         "sbcs	r2, r4\n\t"
18546 #else
18547         "sbc	r2, r4\n\t"
18548 #endif
18549 #ifdef WOLFSSL_KEIL
18550         "sbcs	r3, r3, r5\n\t"
18551 #elif defined(__clang__)
18552         "sbcs	r3, r5\n\t"
18553 #else
18554         "sbc	r3, r5\n\t"
18555 #endif
18556         "stm	%[a]!, {r2, r3}\n\t"
18557         "ldm	%[b]!, {r4, r5}\n\t"
18558         "ldr	r2, [%[a]]\n\t"
18559         "ldr	r3, [%[a], #4]\n\t"
18560 #ifdef WOLFSSL_KEIL
18561         "sbcs	r2, r2, r4\n\t"
18562 #elif defined(__clang__)
18563         "sbcs	r2, r4\n\t"
18564 #else
18565         "sbc	r2, r4\n\t"
18566 #endif
18567 #ifdef WOLFSSL_KEIL
18568         "sbcs	r3, r3, r5\n\t"
18569 #elif defined(__clang__)
18570         "sbcs	r3, r5\n\t"
18571 #else
18572         "sbc	r3, r5\n\t"
18573 #endif
18574         "stm	%[a]!, {r2, r3}\n\t"
18575         "ldm	%[b]!, {r4, r5}\n\t"
18576         "ldr	r2, [%[a]]\n\t"
18577         "ldr	r3, [%[a], #4]\n\t"
18578 #ifdef WOLFSSL_KEIL
18579         "sbcs	r2, r2, r4\n\t"
18580 #elif defined(__clang__)
18581         "sbcs	r2, r4\n\t"
18582 #else
18583         "sbc	r2, r4\n\t"
18584 #endif
18585 #ifdef WOLFSSL_KEIL
18586         "sbcs	r3, r3, r5\n\t"
18587 #elif defined(__clang__)
18588         "sbcs	r3, r5\n\t"
18589 #else
18590         "sbc	r3, r5\n\t"
18591 #endif
18592         "stm	%[a]!, {r2, r3}\n\t"
18593         "ldm	%[b]!, {r4, r5}\n\t"
18594         "ldr	r2, [%[a]]\n\t"
18595         "ldr	r3, [%[a], #4]\n\t"
18596 #ifdef WOLFSSL_KEIL
18597         "sbcs	r2, r2, r4\n\t"
18598 #elif defined(__clang__)
18599         "sbcs	r2, r4\n\t"
18600 #else
18601         "sbc	r2, r4\n\t"
18602 #endif
18603 #ifdef WOLFSSL_KEIL
18604         "sbcs	r3, r3, r5\n\t"
18605 #elif defined(__clang__)
18606         "sbcs	r3, r5\n\t"
18607 #else
18608         "sbc	r3, r5\n\t"
18609 #endif
18610         "stm	%[a]!, {r2, r3}\n\t"
18611         "ldm	%[b]!, {r4, r5}\n\t"
18612         "ldr	r2, [%[a]]\n\t"
18613         "ldr	r3, [%[a], #4]\n\t"
18614 #ifdef WOLFSSL_KEIL
18615         "sbcs	r2, r2, r4\n\t"
18616 #elif defined(__clang__)
18617         "sbcs	r2, r4\n\t"
18618 #else
18619         "sbc	r2, r4\n\t"
18620 #endif
18621 #ifdef WOLFSSL_KEIL
18622         "sbcs	r3, r3, r5\n\t"
18623 #elif defined(__clang__)
18624         "sbcs	r3, r5\n\t"
18625 #else
18626         "sbc	r3, r5\n\t"
18627 #endif
18628         "stm	%[a]!, {r2, r3}\n\t"
18629         "ldm	%[b]!, {r4, r5}\n\t"
18630         "ldr	r2, [%[a]]\n\t"
18631         "ldr	r3, [%[a], #4]\n\t"
18632 #ifdef WOLFSSL_KEIL
18633         "sbcs	r2, r2, r4\n\t"
18634 #elif defined(__clang__)
18635         "sbcs	r2, r4\n\t"
18636 #else
18637         "sbc	r2, r4\n\t"
18638 #endif
18639 #ifdef WOLFSSL_KEIL
18640         "sbcs	r3, r3, r5\n\t"
18641 #elif defined(__clang__)
18642         "sbcs	r3, r5\n\t"
18643 #else
18644         "sbc	r3, r5\n\t"
18645 #endif
18646         "stm	%[a]!, {r2, r3}\n\t"
18647         "ldm	%[b]!, {r4, r5}\n\t"
18648         "ldr	r2, [%[a]]\n\t"
18649         "ldr	r3, [%[a], #4]\n\t"
18650 #ifdef WOLFSSL_KEIL
18651         "sbcs	r2, r2, r4\n\t"
18652 #elif defined(__clang__)
18653         "sbcs	r2, r4\n\t"
18654 #else
18655         "sbc	r2, r4\n\t"
18656 #endif
18657 #ifdef WOLFSSL_KEIL
18658         "sbcs	r3, r3, r5\n\t"
18659 #elif defined(__clang__)
18660         "sbcs	r3, r5\n\t"
18661 #else
18662         "sbc	r3, r5\n\t"
18663 #endif
18664         "stm	%[a]!, {r2, r3}\n\t"
18665         "ldm	%[b]!, {r4, r5}\n\t"
18666         "ldr	r2, [%[a]]\n\t"
18667         "ldr	r3, [%[a], #4]\n\t"
18668 #ifdef WOLFSSL_KEIL
18669         "sbcs	r2, r2, r4\n\t"
18670 #elif defined(__clang__)
18671         "sbcs	r2, r4\n\t"
18672 #else
18673         "sbc	r2, r4\n\t"
18674 #endif
18675 #ifdef WOLFSSL_KEIL
18676         "sbcs	r3, r3, r5\n\t"
18677 #elif defined(__clang__)
18678         "sbcs	r3, r5\n\t"
18679 #else
18680         "sbc	r3, r5\n\t"
18681 #endif
18682         "stm	%[a]!, {r2, r3}\n\t"
18683         "ldm	%[b]!, {r4, r5}\n\t"
18684         "ldr	r2, [%[a]]\n\t"
18685         "ldr	r3, [%[a], #4]\n\t"
18686 #ifdef WOLFSSL_KEIL
18687         "sbcs	r2, r2, r4\n\t"
18688 #elif defined(__clang__)
18689         "sbcs	r2, r4\n\t"
18690 #else
18691         "sbc	r2, r4\n\t"
18692 #endif
18693 #ifdef WOLFSSL_KEIL
18694         "sbcs	r3, r3, r5\n\t"
18695 #elif defined(__clang__)
18696         "sbcs	r3, r5\n\t"
18697 #else
18698         "sbc	r3, r5\n\t"
18699 #endif
18700         "stm	%[a]!, {r2, r3}\n\t"
18701         "ldm	%[b]!, {r4, r5}\n\t"
18702         "ldr	r2, [%[a]]\n\t"
18703         "ldr	r3, [%[a], #4]\n\t"
18704 #ifdef WOLFSSL_KEIL
18705         "sbcs	r2, r2, r4\n\t"
18706 #elif defined(__clang__)
18707         "sbcs	r2, r4\n\t"
18708 #else
18709         "sbc	r2, r4\n\t"
18710 #endif
18711 #ifdef WOLFSSL_KEIL
18712         "sbcs	r3, r3, r5\n\t"
18713 #elif defined(__clang__)
18714         "sbcs	r3, r5\n\t"
18715 #else
18716         "sbc	r3, r5\n\t"
18717 #endif
18718         "stm	%[a]!, {r2, r3}\n\t"
18719         "ldm	%[b]!, {r4, r5}\n\t"
18720         "ldr	r2, [%[a]]\n\t"
18721         "ldr	r3, [%[a], #4]\n\t"
18722 #ifdef WOLFSSL_KEIL
18723         "sbcs	r2, r2, r4\n\t"
18724 #elif defined(__clang__)
18725         "sbcs	r2, r4\n\t"
18726 #else
18727         "sbc	r2, r4\n\t"
18728 #endif
18729 #ifdef WOLFSSL_KEIL
18730         "sbcs	r3, r3, r5\n\t"
18731 #elif defined(__clang__)
18732         "sbcs	r3, r5\n\t"
18733 #else
18734         "sbc	r3, r5\n\t"
18735 #endif
18736         "stm	%[a]!, {r2, r3}\n\t"
18737         "ldm	%[b]!, {r4, r5}\n\t"
18738         "ldr	r2, [%[a]]\n\t"
18739         "ldr	r3, [%[a], #4]\n\t"
18740 #ifdef WOLFSSL_KEIL
18741         "sbcs	r2, r2, r4\n\t"
18742 #elif defined(__clang__)
18743         "sbcs	r2, r4\n\t"
18744 #else
18745         "sbc	r2, r4\n\t"
18746 #endif
18747 #ifdef WOLFSSL_KEIL
18748         "sbcs	r3, r3, r5\n\t"
18749 #elif defined(__clang__)
18750         "sbcs	r3, r5\n\t"
18751 #else
18752         "sbc	r3, r5\n\t"
18753 #endif
18754         "stm	%[a]!, {r2, r3}\n\t"
18755         "ldm	%[b]!, {r4, r5}\n\t"
18756         "ldr	r2, [%[a]]\n\t"
18757         "ldr	r3, [%[a], #4]\n\t"
18758 #ifdef WOLFSSL_KEIL
18759         "sbcs	r2, r2, r4\n\t"
18760 #elif defined(__clang__)
18761         "sbcs	r2, r4\n\t"
18762 #else
18763         "sbc	r2, r4\n\t"
18764 #endif
18765 #ifdef WOLFSSL_KEIL
18766         "sbcs	r3, r3, r5\n\t"
18767 #elif defined(__clang__)
18768         "sbcs	r3, r5\n\t"
18769 #else
18770         "sbc	r3, r5\n\t"
18771 #endif
18772         "stm	%[a]!, {r2, r3}\n\t"
18773         "ldm	%[b]!, {r4, r5}\n\t"
18774         "ldr	r2, [%[a]]\n\t"
18775         "ldr	r3, [%[a], #4]\n\t"
18776 #ifdef WOLFSSL_KEIL
18777         "sbcs	r2, r2, r4\n\t"
18778 #elif defined(__clang__)
18779         "sbcs	r2, r4\n\t"
18780 #else
18781         "sbc	r2, r4\n\t"
18782 #endif
18783 #ifdef WOLFSSL_KEIL
18784         "sbcs	r3, r3, r5\n\t"
18785 #elif defined(__clang__)
18786         "sbcs	r3, r5\n\t"
18787 #else
18788         "sbc	r3, r5\n\t"
18789 #endif
18790         "stm	%[a]!, {r2, r3}\n\t"
18791         "ldm	%[b]!, {r4, r5}\n\t"
18792         "ldr	r2, [%[a]]\n\t"
18793         "ldr	r3, [%[a], #4]\n\t"
18794 #ifdef WOLFSSL_KEIL
18795         "sbcs	r2, r2, r4\n\t"
18796 #elif defined(__clang__)
18797         "sbcs	r2, r4\n\t"
18798 #else
18799         "sbc	r2, r4\n\t"
18800 #endif
18801 #ifdef WOLFSSL_KEIL
18802         "sbcs	r3, r3, r5\n\t"
18803 #elif defined(__clang__)
18804         "sbcs	r3, r5\n\t"
18805 #else
18806         "sbc	r3, r5\n\t"
18807 #endif
18808         "stm	%[a]!, {r2, r3}\n\t"
18809         "ldm	%[b]!, {r4, r5}\n\t"
18810         "ldr	r2, [%[a]]\n\t"
18811         "ldr	r3, [%[a], #4]\n\t"
18812 #ifdef WOLFSSL_KEIL
18813         "sbcs	r2, r2, r4\n\t"
18814 #elif defined(__clang__)
18815         "sbcs	r2, r4\n\t"
18816 #else
18817         "sbc	r2, r4\n\t"
18818 #endif
18819 #ifdef WOLFSSL_KEIL
18820         "sbcs	r3, r3, r5\n\t"
18821 #elif defined(__clang__)
18822         "sbcs	r3, r5\n\t"
18823 #else
18824         "sbc	r3, r5\n\t"
18825 #endif
18826         "stm	%[a]!, {r2, r3}\n\t"
18827         "ldm	%[b]!, {r4, r5}\n\t"
18828         "ldr	r2, [%[a]]\n\t"
18829         "ldr	r3, [%[a], #4]\n\t"
18830 #ifdef WOLFSSL_KEIL
18831         "sbcs	r2, r2, r4\n\t"
18832 #elif defined(__clang__)
18833         "sbcs	r2, r4\n\t"
18834 #else
18835         "sbc	r2, r4\n\t"
18836 #endif
18837 #ifdef WOLFSSL_KEIL
18838         "sbcs	r3, r3, r5\n\t"
18839 #elif defined(__clang__)
18840         "sbcs	r3, r5\n\t"
18841 #else
18842         "sbc	r3, r5\n\t"
18843 #endif
18844         "stm	%[a]!, {r2, r3}\n\t"
18845         "ldm	%[b]!, {r4, r5}\n\t"
18846         "ldr	r2, [%[a]]\n\t"
18847         "ldr	r3, [%[a], #4]\n\t"
18848 #ifdef WOLFSSL_KEIL
18849         "sbcs	r2, r2, r4\n\t"
18850 #elif defined(__clang__)
18851         "sbcs	r2, r4\n\t"
18852 #else
18853         "sbc	r2, r4\n\t"
18854 #endif
18855 #ifdef WOLFSSL_KEIL
18856         "sbcs	r3, r3, r5\n\t"
18857 #elif defined(__clang__)
18858         "sbcs	r3, r5\n\t"
18859 #else
18860         "sbc	r3, r5\n\t"
18861 #endif
18862         "stm	%[a]!, {r2, r3}\n\t"
18863         "ldm	%[b]!, {r4, r5}\n\t"
18864         "ldr	r2, [%[a]]\n\t"
18865         "ldr	r3, [%[a], #4]\n\t"
18866 #ifdef WOLFSSL_KEIL
18867         "sbcs	r2, r2, r4\n\t"
18868 #elif defined(__clang__)
18869         "sbcs	r2, r4\n\t"
18870 #else
18871         "sbc	r2, r4\n\t"
18872 #endif
18873 #ifdef WOLFSSL_KEIL
18874         "sbcs	r3, r3, r5\n\t"
18875 #elif defined(__clang__)
18876         "sbcs	r3, r5\n\t"
18877 #else
18878         "sbc	r3, r5\n\t"
18879 #endif
18880         "stm	%[a]!, {r2, r3}\n\t"
18881         "ldm	%[b]!, {r4, r5}\n\t"
18882         "ldr	r2, [%[a]]\n\t"
18883         "ldr	r3, [%[a], #4]\n\t"
18884 #ifdef WOLFSSL_KEIL
18885         "sbcs	r2, r2, r4\n\t"
18886 #elif defined(__clang__)
18887         "sbcs	r2, r4\n\t"
18888 #else
18889         "sbc	r2, r4\n\t"
18890 #endif
18891 #ifdef WOLFSSL_KEIL
18892         "sbcs	r3, r3, r5\n\t"
18893 #elif defined(__clang__)
18894         "sbcs	r3, r5\n\t"
18895 #else
18896         "sbc	r3, r5\n\t"
18897 #endif
18898         "stm	%[a]!, {r2, r3}\n\t"
18899 #ifdef WOLFSSL_KEIL
18900         "sbcs	%[a], %[a], %[a]\n\t"
18901 #elif defined(__clang__)
18902         "sbcs	%[a], %[a]\n\t"
18903 #else
18904         "sbc	%[a], %[a]\n\t"
18905 #endif
18906         : [a] "+r" (a), [b] "+r" (b)
18907         :
18908         : "memory", "r2", "r3", "r4", "r5"
18909     );
18910     return (uint32_t)(size_t)a;
18911 }
18912 
18913 /* Add b to a into r. (r = a + b)
18914  *
18915  * r  A single precision integer.
18916  * a  A single precision integer.
18917  * b  A single precision integer.
18918  */
sp_2048_add_64(sp_digit * r,const sp_digit * a,const sp_digit * b)18919 SP_NOINLINE static sp_digit sp_2048_add_64(sp_digit* r, const sp_digit* a,
18920         const sp_digit* b)
18921 {
18922     __asm__ __volatile__ (
18923         "ldm	%[b]!, {r5, r6}\n\t"
18924         "ldm	%[a]!, {r3, r4}\n\t"
18925 #if defined(__clang__) || defined(WOLFSSL_KEIL)
18926         "adds	r3, r3, r5\n\t"
18927 #else
18928         "add	r3, r3, r5\n\t"
18929 #endif
18930 #ifdef WOLFSSL_KEIL
18931         "adcs	r4, r4, r6\n\t"
18932 #elif defined(__clang__)
18933         "adcs	r4, r6\n\t"
18934 #else
18935         "adc	r4, r6\n\t"
18936 #endif
18937         "stm	%[r]!, {r3, r4}\n\t"
18938         "ldm	%[b]!, {r5, r6}\n\t"
18939         "ldm	%[a]!, {r3, r4}\n\t"
18940 #ifdef WOLFSSL_KEIL
18941         "adcs	r3, r3, r5\n\t"
18942 #elif defined(__clang__)
18943         "adcs	r3, r5\n\t"
18944 #else
18945         "adc	r3, r5\n\t"
18946 #endif
18947 #ifdef WOLFSSL_KEIL
18948         "adcs	r4, r4, r6\n\t"
18949 #elif defined(__clang__)
18950         "adcs	r4, r6\n\t"
18951 #else
18952         "adc	r4, r6\n\t"
18953 #endif
18954         "stm	%[r]!, {r3, r4}\n\t"
18955         "ldm	%[b]!, {r5, r6}\n\t"
18956         "ldm	%[a]!, {r3, r4}\n\t"
18957 #ifdef WOLFSSL_KEIL
18958         "adcs	r3, r3, r5\n\t"
18959 #elif defined(__clang__)
18960         "adcs	r3, r5\n\t"
18961 #else
18962         "adc	r3, r5\n\t"
18963 #endif
18964 #ifdef WOLFSSL_KEIL
18965         "adcs	r4, r4, r6\n\t"
18966 #elif defined(__clang__)
18967         "adcs	r4, r6\n\t"
18968 #else
18969         "adc	r4, r6\n\t"
18970 #endif
18971         "stm	%[r]!, {r3, r4}\n\t"
18972         "ldm	%[b]!, {r5, r6}\n\t"
18973         "ldm	%[a]!, {r3, r4}\n\t"
18974 #ifdef WOLFSSL_KEIL
18975         "adcs	r3, r3, r5\n\t"
18976 #elif defined(__clang__)
18977         "adcs	r3, r5\n\t"
18978 #else
18979         "adc	r3, r5\n\t"
18980 #endif
18981 #ifdef WOLFSSL_KEIL
18982         "adcs	r4, r4, r6\n\t"
18983 #elif defined(__clang__)
18984         "adcs	r4, r6\n\t"
18985 #else
18986         "adc	r4, r6\n\t"
18987 #endif
18988         "stm	%[r]!, {r3, r4}\n\t"
18989         "ldm	%[b]!, {r5, r6}\n\t"
18990         "ldm	%[a]!, {r3, r4}\n\t"
18991 #ifdef WOLFSSL_KEIL
18992         "adcs	r3, r3, r5\n\t"
18993 #elif defined(__clang__)
18994         "adcs	r3, r5\n\t"
18995 #else
18996         "adc	r3, r5\n\t"
18997 #endif
18998 #ifdef WOLFSSL_KEIL
18999         "adcs	r4, r4, r6\n\t"
19000 #elif defined(__clang__)
19001         "adcs	r4, r6\n\t"
19002 #else
19003         "adc	r4, r6\n\t"
19004 #endif
19005         "stm	%[r]!, {r3, r4}\n\t"
19006         "ldm	%[b]!, {r5, r6}\n\t"
19007         "ldm	%[a]!, {r3, r4}\n\t"
19008 #ifdef WOLFSSL_KEIL
19009         "adcs	r3, r3, r5\n\t"
19010 #elif defined(__clang__)
19011         "adcs	r3, r5\n\t"
19012 #else
19013         "adc	r3, r5\n\t"
19014 #endif
19015 #ifdef WOLFSSL_KEIL
19016         "adcs	r4, r4, r6\n\t"
19017 #elif defined(__clang__)
19018         "adcs	r4, r6\n\t"
19019 #else
19020         "adc	r4, r6\n\t"
19021 #endif
19022         "stm	%[r]!, {r3, r4}\n\t"
19023         "ldm	%[b]!, {r5, r6}\n\t"
19024         "ldm	%[a]!, {r3, r4}\n\t"
19025 #ifdef WOLFSSL_KEIL
19026         "adcs	r3, r3, r5\n\t"
19027 #elif defined(__clang__)
19028         "adcs	r3, r5\n\t"
19029 #else
19030         "adc	r3, r5\n\t"
19031 #endif
19032 #ifdef WOLFSSL_KEIL
19033         "adcs	r4, r4, r6\n\t"
19034 #elif defined(__clang__)
19035         "adcs	r4, r6\n\t"
19036 #else
19037         "adc	r4, r6\n\t"
19038 #endif
19039         "stm	%[r]!, {r3, r4}\n\t"
19040         "ldm	%[b]!, {r5, r6}\n\t"
19041         "ldm	%[a]!, {r3, r4}\n\t"
19042 #ifdef WOLFSSL_KEIL
19043         "adcs	r3, r3, r5\n\t"
19044 #elif defined(__clang__)
19045         "adcs	r3, r5\n\t"
19046 #else
19047         "adc	r3, r5\n\t"
19048 #endif
19049 #ifdef WOLFSSL_KEIL
19050         "adcs	r4, r4, r6\n\t"
19051 #elif defined(__clang__)
19052         "adcs	r4, r6\n\t"
19053 #else
19054         "adc	r4, r6\n\t"
19055 #endif
19056         "stm	%[r]!, {r3, r4}\n\t"
19057         "ldm	%[b]!, {r5, r6}\n\t"
19058         "ldm	%[a]!, {r3, r4}\n\t"
19059 #ifdef WOLFSSL_KEIL
19060         "adcs	r3, r3, r5\n\t"
19061 #elif defined(__clang__)
19062         "adcs	r3, r5\n\t"
19063 #else
19064         "adc	r3, r5\n\t"
19065 #endif
19066 #ifdef WOLFSSL_KEIL
19067         "adcs	r4, r4, r6\n\t"
19068 #elif defined(__clang__)
19069         "adcs	r4, r6\n\t"
19070 #else
19071         "adc	r4, r6\n\t"
19072 #endif
19073         "stm	%[r]!, {r3, r4}\n\t"
19074         "ldm	%[b]!, {r5, r6}\n\t"
19075         "ldm	%[a]!, {r3, r4}\n\t"
19076 #ifdef WOLFSSL_KEIL
19077         "adcs	r3, r3, r5\n\t"
19078 #elif defined(__clang__)
19079         "adcs	r3, r5\n\t"
19080 #else
19081         "adc	r3, r5\n\t"
19082 #endif
19083 #ifdef WOLFSSL_KEIL
19084         "adcs	r4, r4, r6\n\t"
19085 #elif defined(__clang__)
19086         "adcs	r4, r6\n\t"
19087 #else
19088         "adc	r4, r6\n\t"
19089 #endif
19090         "stm	%[r]!, {r3, r4}\n\t"
19091         "ldm	%[b]!, {r5, r6}\n\t"
19092         "ldm	%[a]!, {r3, r4}\n\t"
19093 #ifdef WOLFSSL_KEIL
19094         "adcs	r3, r3, r5\n\t"
19095 #elif defined(__clang__)
19096         "adcs	r3, r5\n\t"
19097 #else
19098         "adc	r3, r5\n\t"
19099 #endif
19100 #ifdef WOLFSSL_KEIL
19101         "adcs	r4, r4, r6\n\t"
19102 #elif defined(__clang__)
19103         "adcs	r4, r6\n\t"
19104 #else
19105         "adc	r4, r6\n\t"
19106 #endif
19107         "stm	%[r]!, {r3, r4}\n\t"
19108         "ldm	%[b]!, {r5, r6}\n\t"
19109         "ldm	%[a]!, {r3, r4}\n\t"
19110 #ifdef WOLFSSL_KEIL
19111         "adcs	r3, r3, r5\n\t"
19112 #elif defined(__clang__)
19113         "adcs	r3, r5\n\t"
19114 #else
19115         "adc	r3, r5\n\t"
19116 #endif
19117 #ifdef WOLFSSL_KEIL
19118         "adcs	r4, r4, r6\n\t"
19119 #elif defined(__clang__)
19120         "adcs	r4, r6\n\t"
19121 #else
19122         "adc	r4, r6\n\t"
19123 #endif
19124         "stm	%[r]!, {r3, r4}\n\t"
19125         "ldm	%[b]!, {r5, r6}\n\t"
19126         "ldm	%[a]!, {r3, r4}\n\t"
19127 #ifdef WOLFSSL_KEIL
19128         "adcs	r3, r3, r5\n\t"
19129 #elif defined(__clang__)
19130         "adcs	r3, r5\n\t"
19131 #else
19132         "adc	r3, r5\n\t"
19133 #endif
19134 #ifdef WOLFSSL_KEIL
19135         "adcs	r4, r4, r6\n\t"
19136 #elif defined(__clang__)
19137         "adcs	r4, r6\n\t"
19138 #else
19139         "adc	r4, r6\n\t"
19140 #endif
19141         "stm	%[r]!, {r3, r4}\n\t"
19142         "ldm	%[b]!, {r5, r6}\n\t"
19143         "ldm	%[a]!, {r3, r4}\n\t"
19144 #ifdef WOLFSSL_KEIL
19145         "adcs	r3, r3, r5\n\t"
19146 #elif defined(__clang__)
19147         "adcs	r3, r5\n\t"
19148 #else
19149         "adc	r3, r5\n\t"
19150 #endif
19151 #ifdef WOLFSSL_KEIL
19152         "adcs	r4, r4, r6\n\t"
19153 #elif defined(__clang__)
19154         "adcs	r4, r6\n\t"
19155 #else
19156         "adc	r4, r6\n\t"
19157 #endif
19158         "stm	%[r]!, {r3, r4}\n\t"
19159         "ldm	%[b]!, {r5, r6}\n\t"
19160         "ldm	%[a]!, {r3, r4}\n\t"
19161 #ifdef WOLFSSL_KEIL
19162         "adcs	r3, r3, r5\n\t"
19163 #elif defined(__clang__)
19164         "adcs	r3, r5\n\t"
19165 #else
19166         "adc	r3, r5\n\t"
19167 #endif
19168 #ifdef WOLFSSL_KEIL
19169         "adcs	r4, r4, r6\n\t"
19170 #elif defined(__clang__)
19171         "adcs	r4, r6\n\t"
19172 #else
19173         "adc	r4, r6\n\t"
19174 #endif
19175         "stm	%[r]!, {r3, r4}\n\t"
19176         "ldm	%[b]!, {r5, r6}\n\t"
19177         "ldm	%[a]!, {r3, r4}\n\t"
19178 #ifdef WOLFSSL_KEIL
19179         "adcs	r3, r3, r5\n\t"
19180 #elif defined(__clang__)
19181         "adcs	r3, r5\n\t"
19182 #else
19183         "adc	r3, r5\n\t"
19184 #endif
19185 #ifdef WOLFSSL_KEIL
19186         "adcs	r4, r4, r6\n\t"
19187 #elif defined(__clang__)
19188         "adcs	r4, r6\n\t"
19189 #else
19190         "adc	r4, r6\n\t"
19191 #endif
19192         "stm	%[r]!, {r3, r4}\n\t"
19193         "ldm	%[b]!, {r5, r6}\n\t"
19194         "ldm	%[a]!, {r3, r4}\n\t"
19195 #ifdef WOLFSSL_KEIL
19196         "adcs	r3, r3, r5\n\t"
19197 #elif defined(__clang__)
19198         "adcs	r3, r5\n\t"
19199 #else
19200         "adc	r3, r5\n\t"
19201 #endif
19202 #ifdef WOLFSSL_KEIL
19203         "adcs	r4, r4, r6\n\t"
19204 #elif defined(__clang__)
19205         "adcs	r4, r6\n\t"
19206 #else
19207         "adc	r4, r6\n\t"
19208 #endif
19209         "stm	%[r]!, {r3, r4}\n\t"
19210         "ldm	%[b]!, {r5, r6}\n\t"
19211         "ldm	%[a]!, {r3, r4}\n\t"
19212 #ifdef WOLFSSL_KEIL
19213         "adcs	r3, r3, r5\n\t"
19214 #elif defined(__clang__)
19215         "adcs	r3, r5\n\t"
19216 #else
19217         "adc	r3, r5\n\t"
19218 #endif
19219 #ifdef WOLFSSL_KEIL
19220         "adcs	r4, r4, r6\n\t"
19221 #elif defined(__clang__)
19222         "adcs	r4, r6\n\t"
19223 #else
19224         "adc	r4, r6\n\t"
19225 #endif
19226         "stm	%[r]!, {r3, r4}\n\t"
19227         "ldm	%[b]!, {r5, r6}\n\t"
19228         "ldm	%[a]!, {r3, r4}\n\t"
19229 #ifdef WOLFSSL_KEIL
19230         "adcs	r3, r3, r5\n\t"
19231 #elif defined(__clang__)
19232         "adcs	r3, r5\n\t"
19233 #else
19234         "adc	r3, r5\n\t"
19235 #endif
19236 #ifdef WOLFSSL_KEIL
19237         "adcs	r4, r4, r6\n\t"
19238 #elif defined(__clang__)
19239         "adcs	r4, r6\n\t"
19240 #else
19241         "adc	r4, r6\n\t"
19242 #endif
19243         "stm	%[r]!, {r3, r4}\n\t"
19244         "ldm	%[b]!, {r5, r6}\n\t"
19245         "ldm	%[a]!, {r3, r4}\n\t"
19246 #ifdef WOLFSSL_KEIL
19247         "adcs	r3, r3, r5\n\t"
19248 #elif defined(__clang__)
19249         "adcs	r3, r5\n\t"
19250 #else
19251         "adc	r3, r5\n\t"
19252 #endif
19253 #ifdef WOLFSSL_KEIL
19254         "adcs	r4, r4, r6\n\t"
19255 #elif defined(__clang__)
19256         "adcs	r4, r6\n\t"
19257 #else
19258         "adc	r4, r6\n\t"
19259 #endif
19260         "stm	%[r]!, {r3, r4}\n\t"
19261         "ldm	%[b]!, {r5, r6}\n\t"
19262         "ldm	%[a]!, {r3, r4}\n\t"
19263 #ifdef WOLFSSL_KEIL
19264         "adcs	r3, r3, r5\n\t"
19265 #elif defined(__clang__)
19266         "adcs	r3, r5\n\t"
19267 #else
19268         "adc	r3, r5\n\t"
19269 #endif
19270 #ifdef WOLFSSL_KEIL
19271         "adcs	r4, r4, r6\n\t"
19272 #elif defined(__clang__)
19273         "adcs	r4, r6\n\t"
19274 #else
19275         "adc	r4, r6\n\t"
19276 #endif
19277         "stm	%[r]!, {r3, r4}\n\t"
19278         "ldm	%[b]!, {r5, r6}\n\t"
19279         "ldm	%[a]!, {r3, r4}\n\t"
19280 #ifdef WOLFSSL_KEIL
19281         "adcs	r3, r3, r5\n\t"
19282 #elif defined(__clang__)
19283         "adcs	r3, r5\n\t"
19284 #else
19285         "adc	r3, r5\n\t"
19286 #endif
19287 #ifdef WOLFSSL_KEIL
19288         "adcs	r4, r4, r6\n\t"
19289 #elif defined(__clang__)
19290         "adcs	r4, r6\n\t"
19291 #else
19292         "adc	r4, r6\n\t"
19293 #endif
19294         "stm	%[r]!, {r3, r4}\n\t"
19295         "ldm	%[b]!, {r5, r6}\n\t"
19296         "ldm	%[a]!, {r3, r4}\n\t"
19297 #ifdef WOLFSSL_KEIL
19298         "adcs	r3, r3, r5\n\t"
19299 #elif defined(__clang__)
19300         "adcs	r3, r5\n\t"
19301 #else
19302         "adc	r3, r5\n\t"
19303 #endif
19304 #ifdef WOLFSSL_KEIL
19305         "adcs	r4, r4, r6\n\t"
19306 #elif defined(__clang__)
19307         "adcs	r4, r6\n\t"
19308 #else
19309         "adc	r4, r6\n\t"
19310 #endif
19311         "stm	%[r]!, {r3, r4}\n\t"
19312         "ldm	%[b]!, {r5, r6}\n\t"
19313         "ldm	%[a]!, {r3, r4}\n\t"
19314 #ifdef WOLFSSL_KEIL
19315         "adcs	r3, r3, r5\n\t"
19316 #elif defined(__clang__)
19317         "adcs	r3, r5\n\t"
19318 #else
19319         "adc	r3, r5\n\t"
19320 #endif
19321 #ifdef WOLFSSL_KEIL
19322         "adcs	r4, r4, r6\n\t"
19323 #elif defined(__clang__)
19324         "adcs	r4, r6\n\t"
19325 #else
19326         "adc	r4, r6\n\t"
19327 #endif
19328         "stm	%[r]!, {r3, r4}\n\t"
19329         "ldm	%[b]!, {r5, r6}\n\t"
19330         "ldm	%[a]!, {r3, r4}\n\t"
19331 #ifdef WOLFSSL_KEIL
19332         "adcs	r3, r3, r5\n\t"
19333 #elif defined(__clang__)
19334         "adcs	r3, r5\n\t"
19335 #else
19336         "adc	r3, r5\n\t"
19337 #endif
19338 #ifdef WOLFSSL_KEIL
19339         "adcs	r4, r4, r6\n\t"
19340 #elif defined(__clang__)
19341         "adcs	r4, r6\n\t"
19342 #else
19343         "adc	r4, r6\n\t"
19344 #endif
19345         "stm	%[r]!, {r3, r4}\n\t"
19346         "ldm	%[b]!, {r5, r6}\n\t"
19347         "ldm	%[a]!, {r3, r4}\n\t"
19348 #ifdef WOLFSSL_KEIL
19349         "adcs	r3, r3, r5\n\t"
19350 #elif defined(__clang__)
19351         "adcs	r3, r5\n\t"
19352 #else
19353         "adc	r3, r5\n\t"
19354 #endif
19355 #ifdef WOLFSSL_KEIL
19356         "adcs	r4, r4, r6\n\t"
19357 #elif defined(__clang__)
19358         "adcs	r4, r6\n\t"
19359 #else
19360         "adc	r4, r6\n\t"
19361 #endif
19362         "stm	%[r]!, {r3, r4}\n\t"
19363         "ldm	%[b]!, {r5, r6}\n\t"
19364         "ldm	%[a]!, {r3, r4}\n\t"
19365 #ifdef WOLFSSL_KEIL
19366         "adcs	r3, r3, r5\n\t"
19367 #elif defined(__clang__)
19368         "adcs	r3, r5\n\t"
19369 #else
19370         "adc	r3, r5\n\t"
19371 #endif
19372 #ifdef WOLFSSL_KEIL
19373         "adcs	r4, r4, r6\n\t"
19374 #elif defined(__clang__)
19375         "adcs	r4, r6\n\t"
19376 #else
19377         "adc	r4, r6\n\t"
19378 #endif
19379         "stm	%[r]!, {r3, r4}\n\t"
19380         "ldm	%[b]!, {r5, r6}\n\t"
19381         "ldm	%[a]!, {r3, r4}\n\t"
19382 #ifdef WOLFSSL_KEIL
19383         "adcs	r3, r3, r5\n\t"
19384 #elif defined(__clang__)
19385         "adcs	r3, r5\n\t"
19386 #else
19387         "adc	r3, r5\n\t"
19388 #endif
19389 #ifdef WOLFSSL_KEIL
19390         "adcs	r4, r4, r6\n\t"
19391 #elif defined(__clang__)
19392         "adcs	r4, r6\n\t"
19393 #else
19394         "adc	r4, r6\n\t"
19395 #endif
19396         "stm	%[r]!, {r3, r4}\n\t"
19397         "ldm	%[b]!, {r5, r6}\n\t"
19398         "ldm	%[a]!, {r3, r4}\n\t"
19399 #ifdef WOLFSSL_KEIL
19400         "adcs	r3, r3, r5\n\t"
19401 #elif defined(__clang__)
19402         "adcs	r3, r5\n\t"
19403 #else
19404         "adc	r3, r5\n\t"
19405 #endif
19406 #ifdef WOLFSSL_KEIL
19407         "adcs	r4, r4, r6\n\t"
19408 #elif defined(__clang__)
19409         "adcs	r4, r6\n\t"
19410 #else
19411         "adc	r4, r6\n\t"
19412 #endif
19413         "stm	%[r]!, {r3, r4}\n\t"
19414         "ldm	%[b]!, {r5, r6}\n\t"
19415         "ldm	%[a]!, {r3, r4}\n\t"
19416 #ifdef WOLFSSL_KEIL
19417         "adcs	r3, r3, r5\n\t"
19418 #elif defined(__clang__)
19419         "adcs	r3, r5\n\t"
19420 #else
19421         "adc	r3, r5\n\t"
19422 #endif
19423 #ifdef WOLFSSL_KEIL
19424         "adcs	r4, r4, r6\n\t"
19425 #elif defined(__clang__)
19426         "adcs	r4, r6\n\t"
19427 #else
19428         "adc	r4, r6\n\t"
19429 #endif
19430         "stm	%[r]!, {r3, r4}\n\t"
19431         "ldm	%[b]!, {r5, r6}\n\t"
19432         "ldm	%[a]!, {r3, r4}\n\t"
19433 #ifdef WOLFSSL_KEIL
19434         "adcs	r3, r3, r5\n\t"
19435 #elif defined(__clang__)
19436         "adcs	r3, r5\n\t"
19437 #else
19438         "adc	r3, r5\n\t"
19439 #endif
19440 #ifdef WOLFSSL_KEIL
19441         "adcs	r4, r4, r6\n\t"
19442 #elif defined(__clang__)
19443         "adcs	r4, r6\n\t"
19444 #else
19445         "adc	r4, r6\n\t"
19446 #endif
19447         "stm	%[r]!, {r3, r4}\n\t"
19448         "ldm	%[b]!, {r5, r6}\n\t"
19449         "ldm	%[a]!, {r3, r4}\n\t"
19450 #ifdef WOLFSSL_KEIL
19451         "adcs	r3, r3, r5\n\t"
19452 #elif defined(__clang__)
19453         "adcs	r3, r5\n\t"
19454 #else
19455         "adc	r3, r5\n\t"
19456 #endif
19457 #ifdef WOLFSSL_KEIL
19458         "adcs	r4, r4, r6\n\t"
19459 #elif defined(__clang__)
19460         "adcs	r4, r6\n\t"
19461 #else
19462         "adc	r4, r6\n\t"
19463 #endif
19464         "stm	%[r]!, {r3, r4}\n\t"
19465         "movs	%[r], #0\n\t"
19466 #ifdef WOLFSSL_KEIL
19467         "adcs	%[r], %[r], %[r]\n\t"
19468 #elif defined(__clang__)
19469         "adcs	%[r], %[r]\n\t"
19470 #else
19471         "adc	%[r], %[r]\n\t"
19472 #endif
19473         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
19474         :
19475         : "memory", "r3", "r4", "r5", "r6"
19476     );
19477     return (uint32_t)(size_t)r;
19478 }
19479 
19480 /* AND m into each word of a and store in r.
19481  *
19482  * r  A single precision integer.
19483  * a  A single precision integer.
19484  * m  Mask to AND against each digit.
19485  */
sp_2048_mask_32(sp_digit * r,const sp_digit * a,sp_digit m)19486 static void sp_2048_mask_32(sp_digit* r, const sp_digit* a, sp_digit m)
19487 {
19488 #ifdef WOLFSSL_SP_SMALL
19489     int i;
19490 
19491     for (i=0; i<32; i++) {
19492         r[i] = a[i] & m;
19493     }
19494 #else
19495     int i;
19496 
19497     for (i = 0; i < 32; i += 8) {
19498         r[i+0] = a[i+0] & m;
19499         r[i+1] = a[i+1] & m;
19500         r[i+2] = a[i+2] & m;
19501         r[i+3] = a[i+3] & m;
19502         r[i+4] = a[i+4] & m;
19503         r[i+5] = a[i+5] & m;
19504         r[i+6] = a[i+6] & m;
19505         r[i+7] = a[i+7] & m;
19506     }
19507 #endif
19508 }
19509 
19510 /* Multiply a and b into r. (r = a * b)
19511  *
19512  * r  A single precision integer.
19513  * a  A single precision integer.
19514  * b  A single precision integer.
19515  */
sp_2048_mul_64(sp_digit * r,const sp_digit * a,const sp_digit * b)19516 SP_NOINLINE static void sp_2048_mul_64(sp_digit* r, const sp_digit* a,
19517         const sp_digit* b)
19518 {
19519     sp_digit* z0 = r;
19520     sp_digit z1[64];
19521     sp_digit a1[32];
19522     sp_digit b1[32];
19523     sp_digit z2[64];
19524     sp_digit u;
19525     sp_digit ca;
19526     sp_digit cb;
19527 
19528     ca = sp_2048_add_32(a1, a, &a[32]);
19529     cb = sp_2048_add_32(b1, b, &b[32]);
19530     u  = ca & cb;
19531     sp_2048_mul_32(z1, a1, b1);
19532     sp_2048_mul_32(z2, &a[32], &b[32]);
19533     sp_2048_mul_32(z0, a, b);
19534     sp_2048_mask_32(r + 64, a1, 0 - cb);
19535     sp_2048_mask_32(b1, b1, 0 - ca);
19536     u += sp_2048_add_32(r + 64, r + 64, b1);
19537     u += sp_2048_sub_in_place_64(z1, z2);
19538     u += sp_2048_sub_in_place_64(z1, z0);
19539     u += sp_2048_add_64(r + 32, r + 32, z1);
19540     u += sp_2048_add_32(r + 64, r + 64, z2);
19541     (void)sp_2048_add_to_word_32(r + 96, u, z2 + 32);
19542 }
19543 
19544 /* Double a into r. (r = a + a)
19545  *
19546  * r  A single precision integer.
19547  * a  A single precision integer.
19548  */
sp_2048_dbl_32(sp_digit * r,const sp_digit * a)19549 SP_NOINLINE static sp_digit sp_2048_dbl_32(sp_digit* r, const sp_digit* a)
19550 {
19551     __asm__ __volatile__ (
19552         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
19553 #if defined(__clang__) || defined(WOLFSSL_KEIL)
19554         "adds	r2, r2, r2\n\t"
19555 #else
19556         "add	r2, r2, r2\n\t"
19557 #endif
19558 #ifdef WOLFSSL_KEIL
19559         "adcs	r3, r3, r3\n\t"
19560 #elif defined(__clang__)
19561         "adcs	r3, r3\n\t"
19562 #else
19563         "adc	r3, r3\n\t"
19564 #endif
19565 #ifdef WOLFSSL_KEIL
19566         "adcs	r4, r4, r4\n\t"
19567 #elif defined(__clang__)
19568         "adcs	r4, r4\n\t"
19569 #else
19570         "adc	r4, r4\n\t"
19571 #endif
19572 #ifdef WOLFSSL_KEIL
19573         "adcs	r5, r5, r5\n\t"
19574 #elif defined(__clang__)
19575         "adcs	r5, r5\n\t"
19576 #else
19577         "adc	r5, r5\n\t"
19578 #endif
19579         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
19580         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
19581 #ifdef WOLFSSL_KEIL
19582         "adcs	r2, r2, r2\n\t"
19583 #elif defined(__clang__)
19584         "adcs	r2, r2\n\t"
19585 #else
19586         "adc	r2, r2\n\t"
19587 #endif
19588 #ifdef WOLFSSL_KEIL
19589         "adcs	r3, r3, r3\n\t"
19590 #elif defined(__clang__)
19591         "adcs	r3, r3\n\t"
19592 #else
19593         "adc	r3, r3\n\t"
19594 #endif
19595 #ifdef WOLFSSL_KEIL
19596         "adcs	r4, r4, r4\n\t"
19597 #elif defined(__clang__)
19598         "adcs	r4, r4\n\t"
19599 #else
19600         "adc	r4, r4\n\t"
19601 #endif
19602 #ifdef WOLFSSL_KEIL
19603         "adcs	r5, r5, r5\n\t"
19604 #elif defined(__clang__)
19605         "adcs	r5, r5\n\t"
19606 #else
19607         "adc	r5, r5\n\t"
19608 #endif
19609         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
19610         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
19611 #ifdef WOLFSSL_KEIL
19612         "adcs	r2, r2, r2\n\t"
19613 #elif defined(__clang__)
19614         "adcs	r2, r2\n\t"
19615 #else
19616         "adc	r2, r2\n\t"
19617 #endif
19618 #ifdef WOLFSSL_KEIL
19619         "adcs	r3, r3, r3\n\t"
19620 #elif defined(__clang__)
19621         "adcs	r3, r3\n\t"
19622 #else
19623         "adc	r3, r3\n\t"
19624 #endif
19625 #ifdef WOLFSSL_KEIL
19626         "adcs	r4, r4, r4\n\t"
19627 #elif defined(__clang__)
19628         "adcs	r4, r4\n\t"
19629 #else
19630         "adc	r4, r4\n\t"
19631 #endif
19632 #ifdef WOLFSSL_KEIL
19633         "adcs	r5, r5, r5\n\t"
19634 #elif defined(__clang__)
19635         "adcs	r5, r5\n\t"
19636 #else
19637         "adc	r5, r5\n\t"
19638 #endif
19639         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
19640         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
19641 #ifdef WOLFSSL_KEIL
19642         "adcs	r2, r2, r2\n\t"
19643 #elif defined(__clang__)
19644         "adcs	r2, r2\n\t"
19645 #else
19646         "adc	r2, r2\n\t"
19647 #endif
19648 #ifdef WOLFSSL_KEIL
19649         "adcs	r3, r3, r3\n\t"
19650 #elif defined(__clang__)
19651         "adcs	r3, r3\n\t"
19652 #else
19653         "adc	r3, r3\n\t"
19654 #endif
19655 #ifdef WOLFSSL_KEIL
19656         "adcs	r4, r4, r4\n\t"
19657 #elif defined(__clang__)
19658         "adcs	r4, r4\n\t"
19659 #else
19660         "adc	r4, r4\n\t"
19661 #endif
19662 #ifdef WOLFSSL_KEIL
19663         "adcs	r5, r5, r5\n\t"
19664 #elif defined(__clang__)
19665         "adcs	r5, r5\n\t"
19666 #else
19667         "adc	r5, r5\n\t"
19668 #endif
19669         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
19670         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
19671 #ifdef WOLFSSL_KEIL
19672         "adcs	r2, r2, r2\n\t"
19673 #elif defined(__clang__)
19674         "adcs	r2, r2\n\t"
19675 #else
19676         "adc	r2, r2\n\t"
19677 #endif
19678 #ifdef WOLFSSL_KEIL
19679         "adcs	r3, r3, r3\n\t"
19680 #elif defined(__clang__)
19681         "adcs	r3, r3\n\t"
19682 #else
19683         "adc	r3, r3\n\t"
19684 #endif
19685 #ifdef WOLFSSL_KEIL
19686         "adcs	r4, r4, r4\n\t"
19687 #elif defined(__clang__)
19688         "adcs	r4, r4\n\t"
19689 #else
19690         "adc	r4, r4\n\t"
19691 #endif
19692 #ifdef WOLFSSL_KEIL
19693         "adcs	r5, r5, r5\n\t"
19694 #elif defined(__clang__)
19695         "adcs	r5, r5\n\t"
19696 #else
19697         "adc	r5, r5\n\t"
19698 #endif
19699         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
19700         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
19701 #ifdef WOLFSSL_KEIL
19702         "adcs	r2, r2, r2\n\t"
19703 #elif defined(__clang__)
19704         "adcs	r2, r2\n\t"
19705 #else
19706         "adc	r2, r2\n\t"
19707 #endif
19708 #ifdef WOLFSSL_KEIL
19709         "adcs	r3, r3, r3\n\t"
19710 #elif defined(__clang__)
19711         "adcs	r3, r3\n\t"
19712 #else
19713         "adc	r3, r3\n\t"
19714 #endif
19715 #ifdef WOLFSSL_KEIL
19716         "adcs	r4, r4, r4\n\t"
19717 #elif defined(__clang__)
19718         "adcs	r4, r4\n\t"
19719 #else
19720         "adc	r4, r4\n\t"
19721 #endif
19722 #ifdef WOLFSSL_KEIL
19723         "adcs	r5, r5, r5\n\t"
19724 #elif defined(__clang__)
19725         "adcs	r5, r5\n\t"
19726 #else
19727         "adc	r5, r5\n\t"
19728 #endif
19729         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
19730         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
19731 #ifdef WOLFSSL_KEIL
19732         "adcs	r2, r2, r2\n\t"
19733 #elif defined(__clang__)
19734         "adcs	r2, r2\n\t"
19735 #else
19736         "adc	r2, r2\n\t"
19737 #endif
19738 #ifdef WOLFSSL_KEIL
19739         "adcs	r3, r3, r3\n\t"
19740 #elif defined(__clang__)
19741         "adcs	r3, r3\n\t"
19742 #else
19743         "adc	r3, r3\n\t"
19744 #endif
19745 #ifdef WOLFSSL_KEIL
19746         "adcs	r4, r4, r4\n\t"
19747 #elif defined(__clang__)
19748         "adcs	r4, r4\n\t"
19749 #else
19750         "adc	r4, r4\n\t"
19751 #endif
19752 #ifdef WOLFSSL_KEIL
19753         "adcs	r5, r5, r5\n\t"
19754 #elif defined(__clang__)
19755         "adcs	r5, r5\n\t"
19756 #else
19757         "adc	r5, r5\n\t"
19758 #endif
19759         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
19760         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
19761 #ifdef WOLFSSL_KEIL
19762         "adcs	r2, r2, r2\n\t"
19763 #elif defined(__clang__)
19764         "adcs	r2, r2\n\t"
19765 #else
19766         "adc	r2, r2\n\t"
19767 #endif
19768 #ifdef WOLFSSL_KEIL
19769         "adcs	r3, r3, r3\n\t"
19770 #elif defined(__clang__)
19771         "adcs	r3, r3\n\t"
19772 #else
19773         "adc	r3, r3\n\t"
19774 #endif
19775 #ifdef WOLFSSL_KEIL
19776         "adcs	r4, r4, r4\n\t"
19777 #elif defined(__clang__)
19778         "adcs	r4, r4\n\t"
19779 #else
19780         "adc	r4, r4\n\t"
19781 #endif
19782 #ifdef WOLFSSL_KEIL
19783         "adcs	r5, r5, r5\n\t"
19784 #elif defined(__clang__)
19785         "adcs	r5, r5\n\t"
19786 #else
19787         "adc	r5, r5\n\t"
19788 #endif
19789         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
19790         "movs	%[r], #0\n\t"
19791 #ifdef WOLFSSL_KEIL
19792         "adcs	%[r], %[r], %[r]\n\t"
19793 #elif defined(__clang__)
19794         "adcs	%[r], %[r]\n\t"
19795 #else
19796         "adc	%[r], %[r]\n\t"
19797 #endif
19798         : [r] "+r" (r), [a] "+r" (a)
19799         :
19800         : "memory", "r2", "r3", "r4", "r5"
19801     );
19802     return (uint32_t)(size_t)r;
19803 }
19804 
19805 /* Square a and put result in r. (r = a * a)
19806  *
19807  * r  A single precision integer.
19808  * a  A single precision integer.
19809  */
sp_2048_sqr_64(sp_digit * r,const sp_digit * a)19810 SP_NOINLINE static void sp_2048_sqr_64(sp_digit* r, const sp_digit* a)
19811 {
19812     sp_digit* z0 = r;
19813     sp_digit z2[64];
19814     sp_digit z1[64];
19815     sp_digit a1[32];
19816     sp_digit u;
19817 
19818     u = sp_2048_add_32(a1, a, &a[32]);
19819     sp_2048_sqr_32(z1, a1);
19820     sp_2048_sqr_32(z2, &a[32]);
19821     sp_2048_sqr_32(z0, a);
19822     sp_2048_mask_32(r + 64, a1, 0 - u);
19823     u += sp_2048_dbl_32(r + 64, r + 64);
19824     u += sp_2048_sub_in_place_64(z1, z2);
19825     u += sp_2048_sub_in_place_64(z1, z0);
19826     u += sp_2048_add_64(r + 32, r + 32, z1);
19827     u += sp_2048_add_32(r + 64, r + 64, z2);
19828     (void)sp_2048_add_to_word_32(r + 96, u, z2 + 32);
19829 }
19830 
19831 #endif /* !WOLFSSL_SP_SMALL */
19832 #ifdef WOLFSSL_SP_SMALL
19833 /* Add b to a into r. (r = a + b)
19834  *
19835  * r  A single precision integer.
19836  * a  A single precision integer.
19837  * b  A single precision integer.
19838  */
sp_2048_add_64(sp_digit * r,const sp_digit * a,const sp_digit * b)19839 SP_NOINLINE static sp_digit sp_2048_add_64(sp_digit* r, const sp_digit* a,
19840         const sp_digit* b)
19841 {
19842     __asm__ __volatile__ (
19843         "movs	r6, %[a]\n\t"
19844         "movs	r7, #0\n\t"
19845         "movs	r3, #0\n\t"
19846         "movs	r4, #0xff\n\t"
19847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
19848         "adds	r4, r4, #1\n\t"
19849 #else
19850         "add	r4, r4, #1\n\t"
19851 #endif
19852 #if defined(__clang__) || defined(WOLFSSL_KEIL)
19853         "subs	r7, r7, #1\n\t"
19854 #else
19855         "sub	r7, r7, #1\n\t"
19856 #endif
19857 #if defined(__clang__) || defined(WOLFSSL_KEIL)
19858         "adds	r6, r6, r4\n\t"
19859 #else
19860         "add	r6, r6, r4\n\t"
19861 #endif
19862         "\n"
19863     "L_sp_2048_add_64_word_%=:\n\t"
19864 #if defined(__clang__) || defined(WOLFSSL_KEIL)
19865         "adds	r3, r3, r7\n\t"
19866 #else
19867         "add	r3, r3, r7\n\t"
19868 #endif
19869         "ldr	r4, [%[a]]\n\t"
19870         "ldr	r5, [%[b]]\n\t"
19871 #ifdef WOLFSSL_KEIL
19872         "adcs	r4, r4, r5\n\t"
19873 #elif defined(__clang__)
19874         "adcs	r4, r5\n\t"
19875 #else
19876         "adc	r4, r5\n\t"
19877 #endif
19878         "str	r4, [%[r]]\n\t"
19879         "movs	r3, #0\n\t"
19880 #ifdef WOLFSSL_KEIL
19881         "adcs	r3, r3, r3\n\t"
19882 #elif defined(__clang__)
19883         "adcs	r3, r3\n\t"
19884 #else
19885         "adc	r3, r3\n\t"
19886 #endif
19887 #if defined(__clang__) || defined(WOLFSSL_KEIL)
19888         "adds	%[a], %[a], #4\n\t"
19889 #else
19890         "add	%[a], %[a], #4\n\t"
19891 #endif
19892 #if defined(__clang__) || defined(WOLFSSL_KEIL)
19893         "adds	%[b], %[b], #4\n\t"
19894 #else
19895         "add	%[b], %[b], #4\n\t"
19896 #endif
19897 #if defined(__clang__) || defined(WOLFSSL_KEIL)
19898         "adds	%[r], %[r], #4\n\t"
19899 #else
19900         "add	%[r], %[r], #4\n\t"
19901 #endif
19902         "cmp	%[a], r6\n\t"
19903         "bne	L_sp_2048_add_64_word_%=\n\t"
19904         "movs	%[r], r3\n\t"
19905         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
19906         :
19907         : "memory", "r3", "r4", "r5", "r6", "r7"
19908     );
19909     return (uint32_t)(size_t)r;
19910 }
19911 
19912 #endif /* WOLFSSL_SP_SMALL */
19913 #ifdef WOLFSSL_SP_SMALL
19914 /* Sub b from a into a. (a -= b)
19915  *
19916  * a  A single precision integer.
19917  * b  A single precision integer.
19918  */
sp_2048_sub_in_place_64(sp_digit * a,const sp_digit * b)19919 SP_NOINLINE static sp_digit sp_2048_sub_in_place_64(sp_digit* a,
19920         const sp_digit* b)
19921 {
19922     __asm__ __volatile__ (
19923         "movs	r7, %[a]\n\t"
19924         "movs	r2, #0\n\t"
19925         "movs	r5, #0xff\n\t"
19926 #if defined(__clang__) || defined(WOLFSSL_KEIL)
19927         "adds	r5, r5, #1\n\t"
19928 #else
19929         "add	r5, r5, #1\n\t"
19930 #endif
19931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
19932         "adds	r7, r7, r5\n\t"
19933 #else
19934         "add	r7, r7, r5\n\t"
19935 #endif
19936         "\n"
19937     "L_sp_2048_sub_in_place_64_words_%=:\n\t"
19938         "movs	r5, #0\n\t"
19939 #if defined(__clang__) || defined(WOLFSSL_KEIL)
19940         "subs	r5, r5, r2\n\t"
19941 #else
19942         "sub	r5, r5, r2\n\t"
19943 #endif
19944         "ldr	r3, [%[a]]\n\t"
19945         "ldr	r4, [%[a], #4]\n\t"
19946         "ldr	r5, [%[b]]\n\t"
19947         "ldr	r6, [%[b], #4]\n\t"
19948 #ifdef WOLFSSL_KEIL
19949         "sbcs	r3, r3, r5\n\t"
19950 #elif defined(__clang__)
19951         "sbcs	r3, r5\n\t"
19952 #else
19953         "sbc	r3, r5\n\t"
19954 #endif
19955 #ifdef WOLFSSL_KEIL
19956         "sbcs	r4, r4, r6\n\t"
19957 #elif defined(__clang__)
19958         "sbcs	r4, r6\n\t"
19959 #else
19960         "sbc	r4, r6\n\t"
19961 #endif
19962         "str	r3, [%[a]]\n\t"
19963         "str	r4, [%[a], #4]\n\t"
19964 #ifdef WOLFSSL_KEIL
19965         "sbcs	r2, r2, r2\n\t"
19966 #elif defined(__clang__)
19967         "sbcs	r2, r2\n\t"
19968 #else
19969         "sbc	r2, r2\n\t"
19970 #endif
19971 #if defined(__clang__) || defined(WOLFSSL_KEIL)
19972         "adds	%[a], %[a], #8\n\t"
19973 #else
19974         "add	%[a], %[a], #8\n\t"
19975 #endif
19976 #if defined(__clang__) || defined(WOLFSSL_KEIL)
19977         "adds	%[b], %[b], #8\n\t"
19978 #else
19979         "add	%[b], %[b], #8\n\t"
19980 #endif
19981         "cmp	%[a], r7\n\t"
19982         "bne	L_sp_2048_sub_in_place_64_words_%=\n\t"
19983         "movs	%[a], r2\n\t"
19984         : [a] "+r" (a), [b] "+r" (b)
19985         :
19986         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
19987     );
19988     return (uint32_t)(size_t)a;
19989 }
19990 
19991 #endif /* WOLFSSL_SP_SMALL */
19992 #ifdef WOLFSSL_SP_SMALL
19993 /* Multiply a and b into r. (r = a * b)
19994  *
19995  * r  A single precision integer.
19996  * a  A single precision integer.
19997  * b  A single precision integer.
19998  */
sp_2048_mul_64(sp_digit * r,const sp_digit * a,const sp_digit * b)19999 SP_NOINLINE static void sp_2048_mul_64(sp_digit* r, const sp_digit* a,
20000         const sp_digit* b)
20001 {
20002     sp_digit t[64 * 2];
20003     sp_digit* tmp = t;
20004     __asm__ __volatile__ (
20005         "movs	r3, #0\n\t"
20006         "movs	r4, #0\n\t"
20007         "mov	r8, r3\n\t"
20008         "mov	r11, %[tmp]\n\t"
20009         "mov	r9, %[a]\n\t"
20010         "mov	r10, %[b]\n\t"
20011         "movs	r6, #0xff\n\t"
20012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20013         "adds	r6, r6, #1\n\t"
20014 #else
20015         "add	r6, r6, #1\n\t"
20016 #endif
20017         "add	r6, r6, r9\n\t"
20018         "mov	r12, r6\n\t"
20019         "\n"
20020     "L_sp_2048_mul_64_words_%=:\n\t"
20021         "movs	%[tmp], #0\n\t"
20022         "movs	r5, #0\n\t"
20023         "movs	r6, #0xfc\n\t"
20024         "mov	%[a], r8\n\t"
20025 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20026         "subs	%[a], %[a], r6\n\t"
20027 #else
20028         "sub	%[a], %[a], r6\n\t"
20029 #endif
20030 #ifdef WOLFSSL_KEIL
20031         "sbcs	r6, r6, r6\n\t"
20032 #elif defined(__clang__)
20033         "sbcs	r6, r6\n\t"
20034 #else
20035         "sbc	r6, r6\n\t"
20036 #endif
20037 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20038         "mvns	r6, r6\n\t"
20039 #else
20040         "mvn	r6, r6\n\t"
20041 #endif
20042 #ifdef WOLFSSL_KEIL
20043         "ands	%[a], %[a], r6\n\t"
20044 #elif defined(__clang__)
20045         "ands	%[a], r6\n\t"
20046 #else
20047         "and	%[a], r6\n\t"
20048 #endif
20049         "mov	%[b], r8\n\t"
20050 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20051         "subs	%[b], %[b], %[a]\n\t"
20052 #else
20053         "sub	%[b], %[b], %[a]\n\t"
20054 #endif
20055         "add	%[a], %[a], r9\n\t"
20056         "add	%[b], %[b], r10\n\t"
20057         "\n"
20058     "L_sp_2048_mul_64_mul_%=:\n\t"
20059         "# Multiply Start\n\t"
20060         "ldrh	r6, [%[a]]\n\t"
20061         "ldrh	r7, [%[b]]\n\t"
20062 #ifdef WOLFSSL_KEIL
20063         "muls	r7, r6, r7\n\t"
20064 #elif defined(__clang__)
20065         "muls	r7, r6\n\t"
20066 #else
20067         "mul	r7, r6\n\t"
20068 #endif
20069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20070         "adds	r3, r3, r7\n\t"
20071 #else
20072         "add	r3, r3, r7\n\t"
20073 #endif
20074 #ifdef WOLFSSL_KEIL
20075         "adcs	r4, r4, %[tmp]\n\t"
20076 #elif defined(__clang__)
20077         "adcs	r4, %[tmp]\n\t"
20078 #else
20079         "adc	r4, %[tmp]\n\t"
20080 #endif
20081 #ifdef WOLFSSL_KEIL
20082         "adcs	r5, r5, %[tmp]\n\t"
20083 #elif defined(__clang__)
20084         "adcs	r5, %[tmp]\n\t"
20085 #else
20086         "adc	r5, %[tmp]\n\t"
20087 #endif
20088         "ldr	r7, [%[b]]\n\t"
20089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20090         "lsrs	r7, r7, #16\n\t"
20091 #else
20092         "lsr	r7, r7, #16\n\t"
20093 #endif
20094 #ifdef WOLFSSL_KEIL
20095         "muls	r6, r7, r6\n\t"
20096 #elif defined(__clang__)
20097         "muls	r6, r7\n\t"
20098 #else
20099         "mul	r6, r7\n\t"
20100 #endif
20101 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20102         "lsrs	r7, r6, #16\n\t"
20103 #else
20104         "lsr	r7, r6, #16\n\t"
20105 #endif
20106 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20107         "lsls	r6, r6, #16\n\t"
20108 #else
20109         "lsl	r6, r6, #16\n\t"
20110 #endif
20111 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20112         "adds	r3, r3, r6\n\t"
20113 #else
20114         "add	r3, r3, r6\n\t"
20115 #endif
20116 #ifdef WOLFSSL_KEIL
20117         "adcs	r4, r4, r7\n\t"
20118 #elif defined(__clang__)
20119         "adcs	r4, r7\n\t"
20120 #else
20121         "adc	r4, r7\n\t"
20122 #endif
20123 #ifdef WOLFSSL_KEIL
20124         "adcs	r5, r5, %[tmp]\n\t"
20125 #elif defined(__clang__)
20126         "adcs	r5, %[tmp]\n\t"
20127 #else
20128         "adc	r5, %[tmp]\n\t"
20129 #endif
20130         "ldr	r6, [%[a]]\n\t"
20131         "ldr	r7, [%[b]]\n\t"
20132 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20133         "lsrs	r6, r6, #16\n\t"
20134 #else
20135         "lsr	r6, r6, #16\n\t"
20136 #endif
20137 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20138         "lsrs	r7, r7, #16\n\t"
20139 #else
20140         "lsr	r7, r7, #16\n\t"
20141 #endif
20142 #ifdef WOLFSSL_KEIL
20143         "muls	r7, r6, r7\n\t"
20144 #elif defined(__clang__)
20145         "muls	r7, r6\n\t"
20146 #else
20147         "mul	r7, r6\n\t"
20148 #endif
20149 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20150         "adds	r4, r4, r7\n\t"
20151 #else
20152         "add	r4, r4, r7\n\t"
20153 #endif
20154 #ifdef WOLFSSL_KEIL
20155         "adcs	r5, r5, %[tmp]\n\t"
20156 #elif defined(__clang__)
20157         "adcs	r5, %[tmp]\n\t"
20158 #else
20159         "adc	r5, %[tmp]\n\t"
20160 #endif
20161         "ldrh	r7, [%[b]]\n\t"
20162 #ifdef WOLFSSL_KEIL
20163         "muls	r6, r7, r6\n\t"
20164 #elif defined(__clang__)
20165         "muls	r6, r7\n\t"
20166 #else
20167         "mul	r6, r7\n\t"
20168 #endif
20169 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20170         "lsrs	r7, r6, #16\n\t"
20171 #else
20172         "lsr	r7, r6, #16\n\t"
20173 #endif
20174 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20175         "lsls	r6, r6, #16\n\t"
20176 #else
20177         "lsl	r6, r6, #16\n\t"
20178 #endif
20179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20180         "adds	r3, r3, r6\n\t"
20181 #else
20182         "add	r3, r3, r6\n\t"
20183 #endif
20184 #ifdef WOLFSSL_KEIL
20185         "adcs	r4, r4, r7\n\t"
20186 #elif defined(__clang__)
20187         "adcs	r4, r7\n\t"
20188 #else
20189         "adc	r4, r7\n\t"
20190 #endif
20191 #ifdef WOLFSSL_KEIL
20192         "adcs	r5, r5, %[tmp]\n\t"
20193 #elif defined(__clang__)
20194         "adcs	r5, %[tmp]\n\t"
20195 #else
20196         "adc	r5, %[tmp]\n\t"
20197 #endif
20198         "# Multiply Done\n\t"
20199 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20200         "adds	%[a], %[a], #4\n\t"
20201 #else
20202         "add	%[a], %[a], #4\n\t"
20203 #endif
20204 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20205         "subs	%[b], %[b], #4\n\t"
20206 #else
20207         "sub	%[b], %[b], #4\n\t"
20208 #endif
20209         "cmp	%[a], r12\n\t"
20210         "beq	L_sp_2048_mul_64_done_mul_%=\n\t"
20211         "mov	r6, r8\n\t"
20212         "add	r6, r6, r9\n\t"
20213         "cmp	%[a], r6\n\t"
20214         "ble	L_sp_2048_mul_64_mul_%=\n\t"
20215         "\n"
20216     "L_sp_2048_mul_64_done_mul_%=:\n\t"
20217         "mov	%[tmp], r11\n\t"
20218         "mov	r7, r8\n\t"
20219         "str	r3, [%[tmp], r7]\n\t"
20220         "movs	r3, r4\n\t"
20221         "movs	r4, r5\n\t"
20222 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20223         "adds	r7, r7, #4\n\t"
20224 #else
20225         "add	r7, r7, #4\n\t"
20226 #endif
20227         "mov	r8, r7\n\t"
20228         "movs	r6, #0xff\n\t"
20229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20230         "adds	r6, r6, #0xf9\n\t"
20231 #else
20232         "add	r6, r6, #0xf9\n\t"
20233 #endif
20234         "cmp	r7, r6\n\t"
20235         "ble	L_sp_2048_mul_64_words_%=\n\t"
20236         "str	r3, [%[tmp], r7]\n\t"
20237         "mov	%[a], r9\n\t"
20238         "mov	%[b], r10\n\t"
20239         : [a] "+r" (a), [b] "+r" (b), [tmp] "+r" (tmp)
20240         :
20241         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
20242     );
20243 
20244     XMEMCPY(r, t, sizeof(t));
20245 }
20246 
20247 /* Square a and put result in r. (r = a * a)
20248  *
20249  * r  A single precision integer.
20250  * a  A single precision integer.
20251  */
sp_2048_sqr_64(sp_digit * r,const sp_digit * a)20252 SP_NOINLINE static void sp_2048_sqr_64(sp_digit* r, const sp_digit* a)
20253 {
20254     __asm__ __volatile__ (
20255         "movs	r3, #0\n\t"
20256         "movs	r4, #0\n\t"
20257         "movs	r5, #0\n\t"
20258         "mov	r8, r3\n\t"
20259         "mov	r11, %[r]\n\t"
20260         "movs	r6, #2\n\t"
20261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20262         "lsls	r6, r6, #8\n\t"
20263 #else
20264         "lsl	r6, r6, #8\n\t"
20265 #endif
20266 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20267         "negs	r6, r6\n\t"
20268 #else
20269         "neg	r6, r6\n\t"
20270 #endif
20271         "add	sp, sp, r6\n\t"
20272         "mov	r10, sp\n\t"
20273         "mov	r9, %[a]\n\t"
20274         "\n"
20275     "L_sp_2048_sqr_64_words_%=:\n\t"
20276         "movs	%[r], #0\n\t"
20277         "movs	r6, #0xfc\n\t"
20278         "mov	%[a], r8\n\t"
20279 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20280         "subs	%[a], %[a], r6\n\t"
20281 #else
20282         "sub	%[a], %[a], r6\n\t"
20283 #endif
20284 #ifdef WOLFSSL_KEIL
20285         "sbcs	r6, r6, r6\n\t"
20286 #elif defined(__clang__)
20287         "sbcs	r6, r6\n\t"
20288 #else
20289         "sbc	r6, r6\n\t"
20290 #endif
20291 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20292         "mvns	r6, r6\n\t"
20293 #else
20294         "mvn	r6, r6\n\t"
20295 #endif
20296 #ifdef WOLFSSL_KEIL
20297         "ands	%[a], %[a], r6\n\t"
20298 #elif defined(__clang__)
20299         "ands	%[a], r6\n\t"
20300 #else
20301         "and	%[a], r6\n\t"
20302 #endif
20303         "mov	r2, r8\n\t"
20304 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20305         "subs	r2, r2, %[a]\n\t"
20306 #else
20307         "sub	r2, r2, %[a]\n\t"
20308 #endif
20309         "add	%[a], %[a], r9\n\t"
20310         "add	r2, r2, r9\n\t"
20311         "\n"
20312     "L_sp_2048_sqr_64_mul_%=:\n\t"
20313         "cmp	r2, %[a]\n\t"
20314         "beq	L_sp_2048_sqr_64_sqr_%=\n\t"
20315         "# Multiply * 2: Start\n\t"
20316         "ldrh	r6, [%[a]]\n\t"
20317         "ldrh	r7, [r2]\n\t"
20318 #ifdef WOLFSSL_KEIL
20319         "muls	r7, r6, r7\n\t"
20320 #elif defined(__clang__)
20321         "muls	r7, r6\n\t"
20322 #else
20323         "mul	r7, r6\n\t"
20324 #endif
20325 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20326         "adds	r3, r3, r7\n\t"
20327 #else
20328         "add	r3, r3, r7\n\t"
20329 #endif
20330 #ifdef WOLFSSL_KEIL
20331         "adcs	r4, r4, %[r]\n\t"
20332 #elif defined(__clang__)
20333         "adcs	r4, %[r]\n\t"
20334 #else
20335         "adc	r4, %[r]\n\t"
20336 #endif
20337 #ifdef WOLFSSL_KEIL
20338         "adcs	r5, r5, %[r]\n\t"
20339 #elif defined(__clang__)
20340         "adcs	r5, %[r]\n\t"
20341 #else
20342         "adc	r5, %[r]\n\t"
20343 #endif
20344 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20345         "adds	r3, r3, r7\n\t"
20346 #else
20347         "add	r3, r3, r7\n\t"
20348 #endif
20349 #ifdef WOLFSSL_KEIL
20350         "adcs	r4, r4, %[r]\n\t"
20351 #elif defined(__clang__)
20352         "adcs	r4, %[r]\n\t"
20353 #else
20354         "adc	r4, %[r]\n\t"
20355 #endif
20356 #ifdef WOLFSSL_KEIL
20357         "adcs	r5, r5, %[r]\n\t"
20358 #elif defined(__clang__)
20359         "adcs	r5, %[r]\n\t"
20360 #else
20361         "adc	r5, %[r]\n\t"
20362 #endif
20363         "ldr	r7, [r2]\n\t"
20364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20365         "lsrs	r7, r7, #16\n\t"
20366 #else
20367         "lsr	r7, r7, #16\n\t"
20368 #endif
20369 #ifdef WOLFSSL_KEIL
20370         "muls	r6, r7, r6\n\t"
20371 #elif defined(__clang__)
20372         "muls	r6, r7\n\t"
20373 #else
20374         "mul	r6, r7\n\t"
20375 #endif
20376 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20377         "lsrs	r7, r6, #16\n\t"
20378 #else
20379         "lsr	r7, r6, #16\n\t"
20380 #endif
20381 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20382         "lsls	r6, r6, #16\n\t"
20383 #else
20384         "lsl	r6, r6, #16\n\t"
20385 #endif
20386 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20387         "adds	r3, r3, r6\n\t"
20388 #else
20389         "add	r3, r3, r6\n\t"
20390 #endif
20391 #ifdef WOLFSSL_KEIL
20392         "adcs	r4, r4, r7\n\t"
20393 #elif defined(__clang__)
20394         "adcs	r4, r7\n\t"
20395 #else
20396         "adc	r4, r7\n\t"
20397 #endif
20398 #ifdef WOLFSSL_KEIL
20399         "adcs	r5, r5, %[r]\n\t"
20400 #elif defined(__clang__)
20401         "adcs	r5, %[r]\n\t"
20402 #else
20403         "adc	r5, %[r]\n\t"
20404 #endif
20405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20406         "adds	r3, r3, r6\n\t"
20407 #else
20408         "add	r3, r3, r6\n\t"
20409 #endif
20410 #ifdef WOLFSSL_KEIL
20411         "adcs	r4, r4, r7\n\t"
20412 #elif defined(__clang__)
20413         "adcs	r4, r7\n\t"
20414 #else
20415         "adc	r4, r7\n\t"
20416 #endif
20417 #ifdef WOLFSSL_KEIL
20418         "adcs	r5, r5, %[r]\n\t"
20419 #elif defined(__clang__)
20420         "adcs	r5, %[r]\n\t"
20421 #else
20422         "adc	r5, %[r]\n\t"
20423 #endif
20424         "ldr	r6, [%[a]]\n\t"
20425         "ldr	r7, [r2]\n\t"
20426 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20427         "lsrs	r6, r6, #16\n\t"
20428 #else
20429         "lsr	r6, r6, #16\n\t"
20430 #endif
20431 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20432         "lsrs	r7, r7, #16\n\t"
20433 #else
20434         "lsr	r7, r7, #16\n\t"
20435 #endif
20436 #ifdef WOLFSSL_KEIL
20437         "muls	r7, r6, r7\n\t"
20438 #elif defined(__clang__)
20439         "muls	r7, r6\n\t"
20440 #else
20441         "mul	r7, r6\n\t"
20442 #endif
20443 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20444         "adds	r4, r4, r7\n\t"
20445 #else
20446         "add	r4, r4, r7\n\t"
20447 #endif
20448 #ifdef WOLFSSL_KEIL
20449         "adcs	r5, r5, %[r]\n\t"
20450 #elif defined(__clang__)
20451         "adcs	r5, %[r]\n\t"
20452 #else
20453         "adc	r5, %[r]\n\t"
20454 #endif
20455 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20456         "adds	r4, r4, r7\n\t"
20457 #else
20458         "add	r4, r4, r7\n\t"
20459 #endif
20460 #ifdef WOLFSSL_KEIL
20461         "adcs	r5, r5, %[r]\n\t"
20462 #elif defined(__clang__)
20463         "adcs	r5, %[r]\n\t"
20464 #else
20465         "adc	r5, %[r]\n\t"
20466 #endif
20467         "ldrh	r7, [r2]\n\t"
20468 #ifdef WOLFSSL_KEIL
20469         "muls	r6, r7, r6\n\t"
20470 #elif defined(__clang__)
20471         "muls	r6, r7\n\t"
20472 #else
20473         "mul	r6, r7\n\t"
20474 #endif
20475 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20476         "lsrs	r7, r6, #16\n\t"
20477 #else
20478         "lsr	r7, r6, #16\n\t"
20479 #endif
20480 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20481         "lsls	r6, r6, #16\n\t"
20482 #else
20483         "lsl	r6, r6, #16\n\t"
20484 #endif
20485 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20486         "adds	r3, r3, r6\n\t"
20487 #else
20488         "add	r3, r3, r6\n\t"
20489 #endif
20490 #ifdef WOLFSSL_KEIL
20491         "adcs	r4, r4, r7\n\t"
20492 #elif defined(__clang__)
20493         "adcs	r4, r7\n\t"
20494 #else
20495         "adc	r4, r7\n\t"
20496 #endif
20497 #ifdef WOLFSSL_KEIL
20498         "adcs	r5, r5, %[r]\n\t"
20499 #elif defined(__clang__)
20500         "adcs	r5, %[r]\n\t"
20501 #else
20502         "adc	r5, %[r]\n\t"
20503 #endif
20504 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20505         "adds	r3, r3, r6\n\t"
20506 #else
20507         "add	r3, r3, r6\n\t"
20508 #endif
20509 #ifdef WOLFSSL_KEIL
20510         "adcs	r4, r4, r7\n\t"
20511 #elif defined(__clang__)
20512         "adcs	r4, r7\n\t"
20513 #else
20514         "adc	r4, r7\n\t"
20515 #endif
20516 #ifdef WOLFSSL_KEIL
20517         "adcs	r5, r5, %[r]\n\t"
20518 #elif defined(__clang__)
20519         "adcs	r5, %[r]\n\t"
20520 #else
20521         "adc	r5, %[r]\n\t"
20522 #endif
20523         "# Multiply * 2: Done\n\t"
20524         "bal	L_sp_2048_sqr_64_done_sqr_%=\n\t"
20525         "\n"
20526     "L_sp_2048_sqr_64_sqr_%=:\n\t"
20527         "mov	r12, r2\n\t"
20528         "ldr	r2, [%[a]]\n\t"
20529         "# Square: Start\n\t"
20530 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20531         "lsrs	r7, r2, #16\n\t"
20532 #else
20533         "lsr	r7, r2, #16\n\t"
20534 #endif
20535         "uxth	r6, r2\n\t"
20536 #ifdef WOLFSSL_KEIL
20537         "muls	r6, r6, r6\n\t"
20538 #elif defined(__clang__)
20539         "muls	r6, r6\n\t"
20540 #else
20541         "mul	r6, r6\n\t"
20542 #endif
20543 #ifdef WOLFSSL_KEIL
20544         "muls	r7, r7, r7\n\t"
20545 #elif defined(__clang__)
20546         "muls	r7, r7\n\t"
20547 #else
20548         "mul	r7, r7\n\t"
20549 #endif
20550 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20551         "adds	r3, r3, r6\n\t"
20552 #else
20553         "add	r3, r3, r6\n\t"
20554 #endif
20555 #ifdef WOLFSSL_KEIL
20556         "adcs	r4, r4, r7\n\t"
20557 #elif defined(__clang__)
20558         "adcs	r4, r7\n\t"
20559 #else
20560         "adc	r4, r7\n\t"
20561 #endif
20562 #ifdef WOLFSSL_KEIL
20563         "adcs	r5, r5, %[r]\n\t"
20564 #elif defined(__clang__)
20565         "adcs	r5, %[r]\n\t"
20566 #else
20567         "adc	r5, %[r]\n\t"
20568 #endif
20569 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20570         "lsrs	r7, r2, #16\n\t"
20571 #else
20572         "lsr	r7, r2, #16\n\t"
20573 #endif
20574         "uxth	r6, r2\n\t"
20575 #ifdef WOLFSSL_KEIL
20576         "muls	r6, r7, r6\n\t"
20577 #elif defined(__clang__)
20578         "muls	r6, r7\n\t"
20579 #else
20580         "mul	r6, r7\n\t"
20581 #endif
20582 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20583         "lsrs	r7, r6, #15\n\t"
20584 #else
20585         "lsr	r7, r6, #15\n\t"
20586 #endif
20587 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20588         "lsls	r6, r6, #17\n\t"
20589 #else
20590         "lsl	r6, r6, #17\n\t"
20591 #endif
20592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20593         "adds	r3, r3, r6\n\t"
20594 #else
20595         "add	r3, r3, r6\n\t"
20596 #endif
20597 #ifdef WOLFSSL_KEIL
20598         "adcs	r4, r4, r7\n\t"
20599 #elif defined(__clang__)
20600         "adcs	r4, r7\n\t"
20601 #else
20602         "adc	r4, r7\n\t"
20603 #endif
20604 #ifdef WOLFSSL_KEIL
20605         "adcs	r5, r5, %[r]\n\t"
20606 #elif defined(__clang__)
20607         "adcs	r5, %[r]\n\t"
20608 #else
20609         "adc	r5, %[r]\n\t"
20610 #endif
20611         "# Square: Done\n\t"
20612         "mov	r2, r12\n\t"
20613         "\n"
20614     "L_sp_2048_sqr_64_done_sqr_%=:\n\t"
20615 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20616         "adds	%[a], %[a], #4\n\t"
20617 #else
20618         "add	%[a], %[a], #4\n\t"
20619 #endif
20620 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20621         "subs	r2, r2, #4\n\t"
20622 #else
20623         "sub	r2, r2, #4\n\t"
20624 #endif
20625         "movs	r6, #0xff\n\t"
20626 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20627         "adds	r6, r6, #1\n\t"
20628 #else
20629         "add	r6, r6, #1\n\t"
20630 #endif
20631         "add	r6, r6, r9\n\t"
20632         "cmp	%[a], r6\n\t"
20633         "beq	L_sp_2048_sqr_64_done_mul_%=\n\t"
20634         "cmp	%[a], r2\n\t"
20635         "bgt	L_sp_2048_sqr_64_done_mul_%=\n\t"
20636         "mov	r7, r8\n\t"
20637         "add	r7, r7, r9\n\t"
20638         "cmp	%[a], r7\n\t"
20639         "ble	L_sp_2048_sqr_64_mul_%=\n\t"
20640         "\n"
20641     "L_sp_2048_sqr_64_done_mul_%=:\n\t"
20642         "mov	%[r], r10\n\t"
20643         "mov	r7, r8\n\t"
20644         "str	r3, [%[r], r7]\n\t"
20645         "movs	r3, r4\n\t"
20646         "movs	r4, r5\n\t"
20647         "movs	r5, #0\n\t"
20648 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20649         "adds	r7, r7, #4\n\t"
20650 #else
20651         "add	r7, r7, #4\n\t"
20652 #endif
20653         "mov	r8, r7\n\t"
20654         "movs	r6, #0xff\n\t"
20655 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20656         "adds	r6, r6, #0xf9\n\t"
20657 #else
20658         "add	r6, r6, #0xf9\n\t"
20659 #endif
20660         "cmp	r7, r6\n\t"
20661         "ble	L_sp_2048_sqr_64_words_%=\n\t"
20662         "mov	%[a], r9\n\t"
20663         "str	r3, [%[r], r7]\n\t"
20664         "mov	%[r], r11\n\t"
20665         "mov	%[a], r10\n\t"
20666         "movs	r3, #0xff\n\t"
20667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20668         "adds	r3, r3, #0xfd\n\t"
20669 #else
20670         "add	r3, r3, #0xfd\n\t"
20671 #endif
20672         "\n"
20673     "L_sp_2048_sqr_64_store_%=:\n\t"
20674         "ldr	r6, [%[a], r3]\n\t"
20675         "str	r6, [%[r], r3]\n\t"
20676 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20677         "subs	r3, r3, #4\n\t"
20678 #else
20679         "sub	r3, r3, #4\n\t"
20680 #endif
20681         "bge	L_sp_2048_sqr_64_store_%=\n\t"
20682         "movs	r6, #2\n\t"
20683 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20684         "lsls	r6, r6, #8\n\t"
20685 #else
20686         "lsl	r6, r6, #8\n\t"
20687 #endif
20688         "add	sp, sp, r6\n\t"
20689         : [r] "+r" (r), [a] "+r" (a)
20690         :
20691         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
20692     );
20693 }
20694 
20695 #endif /* WOLFSSL_SP_SMALL */
20696 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
20697 #ifdef WOLFSSL_SP_SMALL
20698 /* AND m into each word of a and store in r.
20699  *
20700  * r  A single precision integer.
20701  * a  A single precision integer.
20702  * m  Mask to AND against each digit.
20703  */
sp_2048_mask_32(sp_digit * r,const sp_digit * a,sp_digit m)20704 static void sp_2048_mask_32(sp_digit* r, const sp_digit* a, sp_digit m)
20705 {
20706     int i;
20707 
20708     for (i=0; i<32; i++) {
20709         r[i] = a[i] & m;
20710     }
20711 }
20712 
20713 #endif /* WOLFSSL_SP_SMALL */
20714 #ifdef WOLFSSL_SP_SMALL
20715 /* Add b to a into r. (r = a + b)
20716  *
20717  * r  A single precision integer.
20718  * a  A single precision integer.
20719  * b  A single precision integer.
20720  */
sp_2048_add_32(sp_digit * r,const sp_digit * a,const sp_digit * b)20721 SP_NOINLINE static sp_digit sp_2048_add_32(sp_digit* r, const sp_digit* a,
20722         const sp_digit* b)
20723 {
20724     __asm__ __volatile__ (
20725         "movs	r6, %[a]\n\t"
20726         "movs	r7, #0\n\t"
20727         "movs	r3, #0\n\t"
20728 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20729         "adds	r6, r6, #0x80\n\t"
20730 #else
20731         "add	r6, r6, #0x80\n\t"
20732 #endif
20733 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20734         "subs	r7, r7, #1\n\t"
20735 #else
20736         "sub	r7, r7, #1\n\t"
20737 #endif
20738         "\n"
20739     "L_sp_2048_add_32_word_%=:\n\t"
20740 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20741         "adds	r3, r3, r7\n\t"
20742 #else
20743         "add	r3, r3, r7\n\t"
20744 #endif
20745         "ldr	r4, [%[a]]\n\t"
20746         "ldr	r5, [%[b]]\n\t"
20747 #ifdef WOLFSSL_KEIL
20748         "adcs	r4, r4, r5\n\t"
20749 #elif defined(__clang__)
20750         "adcs	r4, r5\n\t"
20751 #else
20752         "adc	r4, r5\n\t"
20753 #endif
20754         "str	r4, [%[r]]\n\t"
20755         "movs	r3, #0\n\t"
20756 #ifdef WOLFSSL_KEIL
20757         "adcs	r3, r3, r3\n\t"
20758 #elif defined(__clang__)
20759         "adcs	r3, r3\n\t"
20760 #else
20761         "adc	r3, r3\n\t"
20762 #endif
20763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20764         "adds	%[a], %[a], #4\n\t"
20765 #else
20766         "add	%[a], %[a], #4\n\t"
20767 #endif
20768 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20769         "adds	%[b], %[b], #4\n\t"
20770 #else
20771         "add	%[b], %[b], #4\n\t"
20772 #endif
20773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20774         "adds	%[r], %[r], #4\n\t"
20775 #else
20776         "add	%[r], %[r], #4\n\t"
20777 #endif
20778         "cmp	%[a], r6\n\t"
20779         "bne	L_sp_2048_add_32_word_%=\n\t"
20780         "movs	%[r], r3\n\t"
20781         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
20782         :
20783         : "memory", "r3", "r4", "r5", "r6", "r7"
20784     );
20785     return (uint32_t)(size_t)r;
20786 }
20787 
20788 #endif /* WOLFSSL_SP_SMALL */
20789 #ifdef WOLFSSL_SP_SMALL
20790 /* Sub b from a into a. (a -= b)
20791  *
20792  * a  A single precision integer.
20793  * b  A single precision integer.
20794  */
sp_2048_sub_in_place_32(sp_digit * a,const sp_digit * b)20795 SP_NOINLINE static sp_digit sp_2048_sub_in_place_32(sp_digit* a,
20796         const sp_digit* b)
20797 {
20798     __asm__ __volatile__ (
20799         "movs	r7, %[a]\n\t"
20800         "movs	r2, #0\n\t"
20801 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20802         "adds	r7, r7, #0x80\n\t"
20803 #else
20804         "add	r7, r7, #0x80\n\t"
20805 #endif
20806         "\n"
20807     "L_sp_2048_sub_in_place_32_words_%=:\n\t"
20808         "movs	r5, #0\n\t"
20809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20810         "subs	r5, r5, r2\n\t"
20811 #else
20812         "sub	r5, r5, r2\n\t"
20813 #endif
20814         "ldr	r3, [%[a]]\n\t"
20815         "ldr	r4, [%[a], #4]\n\t"
20816         "ldr	r5, [%[b]]\n\t"
20817         "ldr	r6, [%[b], #4]\n\t"
20818 #ifdef WOLFSSL_KEIL
20819         "sbcs	r3, r3, r5\n\t"
20820 #elif defined(__clang__)
20821         "sbcs	r3, r5\n\t"
20822 #else
20823         "sbc	r3, r5\n\t"
20824 #endif
20825 #ifdef WOLFSSL_KEIL
20826         "sbcs	r4, r4, r6\n\t"
20827 #elif defined(__clang__)
20828         "sbcs	r4, r6\n\t"
20829 #else
20830         "sbc	r4, r6\n\t"
20831 #endif
20832         "str	r3, [%[a]]\n\t"
20833         "str	r4, [%[a], #4]\n\t"
20834 #ifdef WOLFSSL_KEIL
20835         "sbcs	r2, r2, r2\n\t"
20836 #elif defined(__clang__)
20837         "sbcs	r2, r2\n\t"
20838 #else
20839         "sbc	r2, r2\n\t"
20840 #endif
20841 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20842         "adds	%[a], %[a], #8\n\t"
20843 #else
20844         "add	%[a], %[a], #8\n\t"
20845 #endif
20846 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20847         "adds	%[b], %[b], #8\n\t"
20848 #else
20849         "add	%[b], %[b], #8\n\t"
20850 #endif
20851         "cmp	%[a], r7\n\t"
20852         "bne	L_sp_2048_sub_in_place_32_words_%=\n\t"
20853         "movs	%[a], r2\n\t"
20854         : [a] "+r" (a), [b] "+r" (b)
20855         :
20856         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
20857     );
20858     return (uint32_t)(size_t)a;
20859 }
20860 
20861 #endif /* WOLFSSL_SP_SMALL */
20862 #ifdef WOLFSSL_SP_SMALL
20863 /* Multiply a and b into r. (r = a * b)
20864  *
20865  * r  A single precision integer.
20866  * a  A single precision integer.
20867  * b  A single precision integer.
20868  */
sp_2048_mul_32(sp_digit * r,const sp_digit * a,const sp_digit * b)20869 SP_NOINLINE static void sp_2048_mul_32(sp_digit* r, const sp_digit* a,
20870         const sp_digit* b)
20871 {
20872     sp_digit t[32 * 2];
20873     sp_digit* tmp = t;
20874     __asm__ __volatile__ (
20875         "movs	r3, #0\n\t"
20876         "movs	r4, #0\n\t"
20877         "mov	r8, r3\n\t"
20878         "mov	r11, %[tmp]\n\t"
20879         "mov	r9, %[a]\n\t"
20880         "mov	r10, %[b]\n\t"
20881         "movs	r6, #0x80\n\t"
20882         "add	r6, r6, r9\n\t"
20883         "mov	r12, r6\n\t"
20884         "\n"
20885     "L_sp_2048_mul_32_words_%=:\n\t"
20886         "movs	%[tmp], #0\n\t"
20887         "movs	r5, #0\n\t"
20888         "movs	r6, #0x7c\n\t"
20889         "mov	%[a], r8\n\t"
20890 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20891         "subs	%[a], %[a], r6\n\t"
20892 #else
20893         "sub	%[a], %[a], r6\n\t"
20894 #endif
20895 #ifdef WOLFSSL_KEIL
20896         "sbcs	r6, r6, r6\n\t"
20897 #elif defined(__clang__)
20898         "sbcs	r6, r6\n\t"
20899 #else
20900         "sbc	r6, r6\n\t"
20901 #endif
20902 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20903         "mvns	r6, r6\n\t"
20904 #else
20905         "mvn	r6, r6\n\t"
20906 #endif
20907 #ifdef WOLFSSL_KEIL
20908         "ands	%[a], %[a], r6\n\t"
20909 #elif defined(__clang__)
20910         "ands	%[a], r6\n\t"
20911 #else
20912         "and	%[a], r6\n\t"
20913 #endif
20914         "mov	%[b], r8\n\t"
20915 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20916         "subs	%[b], %[b], %[a]\n\t"
20917 #else
20918         "sub	%[b], %[b], %[a]\n\t"
20919 #endif
20920         "add	%[a], %[a], r9\n\t"
20921         "add	%[b], %[b], r10\n\t"
20922         "\n"
20923     "L_sp_2048_mul_32_mul_%=:\n\t"
20924         "# Multiply Start\n\t"
20925         "ldrh	r6, [%[a]]\n\t"
20926         "ldrh	r7, [%[b]]\n\t"
20927 #ifdef WOLFSSL_KEIL
20928         "muls	r7, r6, r7\n\t"
20929 #elif defined(__clang__)
20930         "muls	r7, r6\n\t"
20931 #else
20932         "mul	r7, r6\n\t"
20933 #endif
20934 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20935         "adds	r3, r3, r7\n\t"
20936 #else
20937         "add	r3, r3, r7\n\t"
20938 #endif
20939 #ifdef WOLFSSL_KEIL
20940         "adcs	r4, r4, %[tmp]\n\t"
20941 #elif defined(__clang__)
20942         "adcs	r4, %[tmp]\n\t"
20943 #else
20944         "adc	r4, %[tmp]\n\t"
20945 #endif
20946 #ifdef WOLFSSL_KEIL
20947         "adcs	r5, r5, %[tmp]\n\t"
20948 #elif defined(__clang__)
20949         "adcs	r5, %[tmp]\n\t"
20950 #else
20951         "adc	r5, %[tmp]\n\t"
20952 #endif
20953         "ldr	r7, [%[b]]\n\t"
20954 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20955         "lsrs	r7, r7, #16\n\t"
20956 #else
20957         "lsr	r7, r7, #16\n\t"
20958 #endif
20959 #ifdef WOLFSSL_KEIL
20960         "muls	r6, r7, r6\n\t"
20961 #elif defined(__clang__)
20962         "muls	r6, r7\n\t"
20963 #else
20964         "mul	r6, r7\n\t"
20965 #endif
20966 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20967         "lsrs	r7, r6, #16\n\t"
20968 #else
20969         "lsr	r7, r6, #16\n\t"
20970 #endif
20971 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20972         "lsls	r6, r6, #16\n\t"
20973 #else
20974         "lsl	r6, r6, #16\n\t"
20975 #endif
20976 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20977         "adds	r3, r3, r6\n\t"
20978 #else
20979         "add	r3, r3, r6\n\t"
20980 #endif
20981 #ifdef WOLFSSL_KEIL
20982         "adcs	r4, r4, r7\n\t"
20983 #elif defined(__clang__)
20984         "adcs	r4, r7\n\t"
20985 #else
20986         "adc	r4, r7\n\t"
20987 #endif
20988 #ifdef WOLFSSL_KEIL
20989         "adcs	r5, r5, %[tmp]\n\t"
20990 #elif defined(__clang__)
20991         "adcs	r5, %[tmp]\n\t"
20992 #else
20993         "adc	r5, %[tmp]\n\t"
20994 #endif
20995         "ldr	r6, [%[a]]\n\t"
20996         "ldr	r7, [%[b]]\n\t"
20997 #if defined(__clang__) || defined(WOLFSSL_KEIL)
20998         "lsrs	r6, r6, #16\n\t"
20999 #else
21000         "lsr	r6, r6, #16\n\t"
21001 #endif
21002 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21003         "lsrs	r7, r7, #16\n\t"
21004 #else
21005         "lsr	r7, r7, #16\n\t"
21006 #endif
21007 #ifdef WOLFSSL_KEIL
21008         "muls	r7, r6, r7\n\t"
21009 #elif defined(__clang__)
21010         "muls	r7, r6\n\t"
21011 #else
21012         "mul	r7, r6\n\t"
21013 #endif
21014 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21015         "adds	r4, r4, r7\n\t"
21016 #else
21017         "add	r4, r4, r7\n\t"
21018 #endif
21019 #ifdef WOLFSSL_KEIL
21020         "adcs	r5, r5, %[tmp]\n\t"
21021 #elif defined(__clang__)
21022         "adcs	r5, %[tmp]\n\t"
21023 #else
21024         "adc	r5, %[tmp]\n\t"
21025 #endif
21026         "ldrh	r7, [%[b]]\n\t"
21027 #ifdef WOLFSSL_KEIL
21028         "muls	r6, r7, r6\n\t"
21029 #elif defined(__clang__)
21030         "muls	r6, r7\n\t"
21031 #else
21032         "mul	r6, r7\n\t"
21033 #endif
21034 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21035         "lsrs	r7, r6, #16\n\t"
21036 #else
21037         "lsr	r7, r6, #16\n\t"
21038 #endif
21039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21040         "lsls	r6, r6, #16\n\t"
21041 #else
21042         "lsl	r6, r6, #16\n\t"
21043 #endif
21044 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21045         "adds	r3, r3, r6\n\t"
21046 #else
21047         "add	r3, r3, r6\n\t"
21048 #endif
21049 #ifdef WOLFSSL_KEIL
21050         "adcs	r4, r4, r7\n\t"
21051 #elif defined(__clang__)
21052         "adcs	r4, r7\n\t"
21053 #else
21054         "adc	r4, r7\n\t"
21055 #endif
21056 #ifdef WOLFSSL_KEIL
21057         "adcs	r5, r5, %[tmp]\n\t"
21058 #elif defined(__clang__)
21059         "adcs	r5, %[tmp]\n\t"
21060 #else
21061         "adc	r5, %[tmp]\n\t"
21062 #endif
21063         "# Multiply Done\n\t"
21064 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21065         "adds	%[a], %[a], #4\n\t"
21066 #else
21067         "add	%[a], %[a], #4\n\t"
21068 #endif
21069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21070         "subs	%[b], %[b], #4\n\t"
21071 #else
21072         "sub	%[b], %[b], #4\n\t"
21073 #endif
21074         "cmp	%[a], r12\n\t"
21075         "beq	L_sp_2048_mul_32_done_mul_%=\n\t"
21076         "mov	r6, r8\n\t"
21077         "add	r6, r6, r9\n\t"
21078         "cmp	%[a], r6\n\t"
21079         "ble	L_sp_2048_mul_32_mul_%=\n\t"
21080         "\n"
21081     "L_sp_2048_mul_32_done_mul_%=:\n\t"
21082         "mov	%[tmp], r11\n\t"
21083         "mov	r7, r8\n\t"
21084         "str	r3, [%[tmp], r7]\n\t"
21085         "movs	r3, r4\n\t"
21086         "movs	r4, r5\n\t"
21087 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21088         "adds	r7, r7, #4\n\t"
21089 #else
21090         "add	r7, r7, #4\n\t"
21091 #endif
21092         "mov	r8, r7\n\t"
21093         "movs	r6, #0xf8\n\t"
21094         "cmp	r7, r6\n\t"
21095         "ble	L_sp_2048_mul_32_words_%=\n\t"
21096         "str	r3, [%[tmp], r7]\n\t"
21097         "mov	%[a], r9\n\t"
21098         "mov	%[b], r10\n\t"
21099         : [a] "+r" (a), [b] "+r" (b), [tmp] "+r" (tmp)
21100         :
21101         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
21102     );
21103 
21104     XMEMCPY(r, t, sizeof(t));
21105 }
21106 
21107 /* Square a and put result in r. (r = a * a)
21108  *
21109  * r  A single precision integer.
21110  * a  A single precision integer.
21111  */
sp_2048_sqr_32(sp_digit * r,const sp_digit * a)21112 SP_NOINLINE static void sp_2048_sqr_32(sp_digit* r, const sp_digit* a)
21113 {
21114     __asm__ __volatile__ (
21115         "movs	r3, #0\n\t"
21116         "movs	r4, #0\n\t"
21117         "movs	r5, #0\n\t"
21118         "mov	r8, r3\n\t"
21119         "mov	r11, %[r]\n\t"
21120         "movs	r6, #0xff\n\t"
21121 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21122         "adds	r6, r6, #1\n\t"
21123 #else
21124         "add	r6, r6, #1\n\t"
21125 #endif
21126 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21127         "negs	r6, r6\n\t"
21128 #else
21129         "neg	r6, r6\n\t"
21130 #endif
21131         "add	sp, sp, r6\n\t"
21132         "mov	r10, sp\n\t"
21133         "mov	r9, %[a]\n\t"
21134         "\n"
21135     "L_sp_2048_sqr_32_words_%=:\n\t"
21136         "movs	%[r], #0\n\t"
21137         "movs	r6, #0x7c\n\t"
21138         "mov	%[a], r8\n\t"
21139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21140         "subs	%[a], %[a], r6\n\t"
21141 #else
21142         "sub	%[a], %[a], r6\n\t"
21143 #endif
21144 #ifdef WOLFSSL_KEIL
21145         "sbcs	r6, r6, r6\n\t"
21146 #elif defined(__clang__)
21147         "sbcs	r6, r6\n\t"
21148 #else
21149         "sbc	r6, r6\n\t"
21150 #endif
21151 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21152         "mvns	r6, r6\n\t"
21153 #else
21154         "mvn	r6, r6\n\t"
21155 #endif
21156 #ifdef WOLFSSL_KEIL
21157         "ands	%[a], %[a], r6\n\t"
21158 #elif defined(__clang__)
21159         "ands	%[a], r6\n\t"
21160 #else
21161         "and	%[a], r6\n\t"
21162 #endif
21163         "mov	r2, r8\n\t"
21164 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21165         "subs	r2, r2, %[a]\n\t"
21166 #else
21167         "sub	r2, r2, %[a]\n\t"
21168 #endif
21169         "add	%[a], %[a], r9\n\t"
21170         "add	r2, r2, r9\n\t"
21171         "\n"
21172     "L_sp_2048_sqr_32_mul_%=:\n\t"
21173         "cmp	r2, %[a]\n\t"
21174         "beq	L_sp_2048_sqr_32_sqr_%=\n\t"
21175         "# Multiply * 2: Start\n\t"
21176         "ldrh	r6, [%[a]]\n\t"
21177         "ldrh	r7, [r2]\n\t"
21178 #ifdef WOLFSSL_KEIL
21179         "muls	r7, r6, r7\n\t"
21180 #elif defined(__clang__)
21181         "muls	r7, r6\n\t"
21182 #else
21183         "mul	r7, r6\n\t"
21184 #endif
21185 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21186         "adds	r3, r3, r7\n\t"
21187 #else
21188         "add	r3, r3, r7\n\t"
21189 #endif
21190 #ifdef WOLFSSL_KEIL
21191         "adcs	r4, r4, %[r]\n\t"
21192 #elif defined(__clang__)
21193         "adcs	r4, %[r]\n\t"
21194 #else
21195         "adc	r4, %[r]\n\t"
21196 #endif
21197 #ifdef WOLFSSL_KEIL
21198         "adcs	r5, r5, %[r]\n\t"
21199 #elif defined(__clang__)
21200         "adcs	r5, %[r]\n\t"
21201 #else
21202         "adc	r5, %[r]\n\t"
21203 #endif
21204 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21205         "adds	r3, r3, r7\n\t"
21206 #else
21207         "add	r3, r3, r7\n\t"
21208 #endif
21209 #ifdef WOLFSSL_KEIL
21210         "adcs	r4, r4, %[r]\n\t"
21211 #elif defined(__clang__)
21212         "adcs	r4, %[r]\n\t"
21213 #else
21214         "adc	r4, %[r]\n\t"
21215 #endif
21216 #ifdef WOLFSSL_KEIL
21217         "adcs	r5, r5, %[r]\n\t"
21218 #elif defined(__clang__)
21219         "adcs	r5, %[r]\n\t"
21220 #else
21221         "adc	r5, %[r]\n\t"
21222 #endif
21223         "ldr	r7, [r2]\n\t"
21224 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21225         "lsrs	r7, r7, #16\n\t"
21226 #else
21227         "lsr	r7, r7, #16\n\t"
21228 #endif
21229 #ifdef WOLFSSL_KEIL
21230         "muls	r6, r7, r6\n\t"
21231 #elif defined(__clang__)
21232         "muls	r6, r7\n\t"
21233 #else
21234         "mul	r6, r7\n\t"
21235 #endif
21236 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21237         "lsrs	r7, r6, #16\n\t"
21238 #else
21239         "lsr	r7, r6, #16\n\t"
21240 #endif
21241 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21242         "lsls	r6, r6, #16\n\t"
21243 #else
21244         "lsl	r6, r6, #16\n\t"
21245 #endif
21246 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21247         "adds	r3, r3, r6\n\t"
21248 #else
21249         "add	r3, r3, r6\n\t"
21250 #endif
21251 #ifdef WOLFSSL_KEIL
21252         "adcs	r4, r4, r7\n\t"
21253 #elif defined(__clang__)
21254         "adcs	r4, r7\n\t"
21255 #else
21256         "adc	r4, r7\n\t"
21257 #endif
21258 #ifdef WOLFSSL_KEIL
21259         "adcs	r5, r5, %[r]\n\t"
21260 #elif defined(__clang__)
21261         "adcs	r5, %[r]\n\t"
21262 #else
21263         "adc	r5, %[r]\n\t"
21264 #endif
21265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21266         "adds	r3, r3, r6\n\t"
21267 #else
21268         "add	r3, r3, r6\n\t"
21269 #endif
21270 #ifdef WOLFSSL_KEIL
21271         "adcs	r4, r4, r7\n\t"
21272 #elif defined(__clang__)
21273         "adcs	r4, r7\n\t"
21274 #else
21275         "adc	r4, r7\n\t"
21276 #endif
21277 #ifdef WOLFSSL_KEIL
21278         "adcs	r5, r5, %[r]\n\t"
21279 #elif defined(__clang__)
21280         "adcs	r5, %[r]\n\t"
21281 #else
21282         "adc	r5, %[r]\n\t"
21283 #endif
21284         "ldr	r6, [%[a]]\n\t"
21285         "ldr	r7, [r2]\n\t"
21286 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21287         "lsrs	r6, r6, #16\n\t"
21288 #else
21289         "lsr	r6, r6, #16\n\t"
21290 #endif
21291 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21292         "lsrs	r7, r7, #16\n\t"
21293 #else
21294         "lsr	r7, r7, #16\n\t"
21295 #endif
21296 #ifdef WOLFSSL_KEIL
21297         "muls	r7, r6, r7\n\t"
21298 #elif defined(__clang__)
21299         "muls	r7, r6\n\t"
21300 #else
21301         "mul	r7, r6\n\t"
21302 #endif
21303 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21304         "adds	r4, r4, r7\n\t"
21305 #else
21306         "add	r4, r4, r7\n\t"
21307 #endif
21308 #ifdef WOLFSSL_KEIL
21309         "adcs	r5, r5, %[r]\n\t"
21310 #elif defined(__clang__)
21311         "adcs	r5, %[r]\n\t"
21312 #else
21313         "adc	r5, %[r]\n\t"
21314 #endif
21315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21316         "adds	r4, r4, r7\n\t"
21317 #else
21318         "add	r4, r4, r7\n\t"
21319 #endif
21320 #ifdef WOLFSSL_KEIL
21321         "adcs	r5, r5, %[r]\n\t"
21322 #elif defined(__clang__)
21323         "adcs	r5, %[r]\n\t"
21324 #else
21325         "adc	r5, %[r]\n\t"
21326 #endif
21327         "ldrh	r7, [r2]\n\t"
21328 #ifdef WOLFSSL_KEIL
21329         "muls	r6, r7, r6\n\t"
21330 #elif defined(__clang__)
21331         "muls	r6, r7\n\t"
21332 #else
21333         "mul	r6, r7\n\t"
21334 #endif
21335 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21336         "lsrs	r7, r6, #16\n\t"
21337 #else
21338         "lsr	r7, r6, #16\n\t"
21339 #endif
21340 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21341         "lsls	r6, r6, #16\n\t"
21342 #else
21343         "lsl	r6, r6, #16\n\t"
21344 #endif
21345 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21346         "adds	r3, r3, r6\n\t"
21347 #else
21348         "add	r3, r3, r6\n\t"
21349 #endif
21350 #ifdef WOLFSSL_KEIL
21351         "adcs	r4, r4, r7\n\t"
21352 #elif defined(__clang__)
21353         "adcs	r4, r7\n\t"
21354 #else
21355         "adc	r4, r7\n\t"
21356 #endif
21357 #ifdef WOLFSSL_KEIL
21358         "adcs	r5, r5, %[r]\n\t"
21359 #elif defined(__clang__)
21360         "adcs	r5, %[r]\n\t"
21361 #else
21362         "adc	r5, %[r]\n\t"
21363 #endif
21364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21365         "adds	r3, r3, r6\n\t"
21366 #else
21367         "add	r3, r3, r6\n\t"
21368 #endif
21369 #ifdef WOLFSSL_KEIL
21370         "adcs	r4, r4, r7\n\t"
21371 #elif defined(__clang__)
21372         "adcs	r4, r7\n\t"
21373 #else
21374         "adc	r4, r7\n\t"
21375 #endif
21376 #ifdef WOLFSSL_KEIL
21377         "adcs	r5, r5, %[r]\n\t"
21378 #elif defined(__clang__)
21379         "adcs	r5, %[r]\n\t"
21380 #else
21381         "adc	r5, %[r]\n\t"
21382 #endif
21383         "# Multiply * 2: Done\n\t"
21384         "bal	L_sp_2048_sqr_32_done_sqr_%=\n\t"
21385         "\n"
21386     "L_sp_2048_sqr_32_sqr_%=:\n\t"
21387         "mov	r12, r2\n\t"
21388         "ldr	r2, [%[a]]\n\t"
21389         "# Square: Start\n\t"
21390 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21391         "lsrs	r7, r2, #16\n\t"
21392 #else
21393         "lsr	r7, r2, #16\n\t"
21394 #endif
21395         "uxth	r6, r2\n\t"
21396 #ifdef WOLFSSL_KEIL
21397         "muls	r6, r6, r6\n\t"
21398 #elif defined(__clang__)
21399         "muls	r6, r6\n\t"
21400 #else
21401         "mul	r6, r6\n\t"
21402 #endif
21403 #ifdef WOLFSSL_KEIL
21404         "muls	r7, r7, r7\n\t"
21405 #elif defined(__clang__)
21406         "muls	r7, r7\n\t"
21407 #else
21408         "mul	r7, r7\n\t"
21409 #endif
21410 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21411         "adds	r3, r3, r6\n\t"
21412 #else
21413         "add	r3, r3, r6\n\t"
21414 #endif
21415 #ifdef WOLFSSL_KEIL
21416         "adcs	r4, r4, r7\n\t"
21417 #elif defined(__clang__)
21418         "adcs	r4, r7\n\t"
21419 #else
21420         "adc	r4, r7\n\t"
21421 #endif
21422 #ifdef WOLFSSL_KEIL
21423         "adcs	r5, r5, %[r]\n\t"
21424 #elif defined(__clang__)
21425         "adcs	r5, %[r]\n\t"
21426 #else
21427         "adc	r5, %[r]\n\t"
21428 #endif
21429 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21430         "lsrs	r7, r2, #16\n\t"
21431 #else
21432         "lsr	r7, r2, #16\n\t"
21433 #endif
21434         "uxth	r6, r2\n\t"
21435 #ifdef WOLFSSL_KEIL
21436         "muls	r6, r7, r6\n\t"
21437 #elif defined(__clang__)
21438         "muls	r6, r7\n\t"
21439 #else
21440         "mul	r6, r7\n\t"
21441 #endif
21442 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21443         "lsrs	r7, r6, #15\n\t"
21444 #else
21445         "lsr	r7, r6, #15\n\t"
21446 #endif
21447 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21448         "lsls	r6, r6, #17\n\t"
21449 #else
21450         "lsl	r6, r6, #17\n\t"
21451 #endif
21452 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21453         "adds	r3, r3, r6\n\t"
21454 #else
21455         "add	r3, r3, r6\n\t"
21456 #endif
21457 #ifdef WOLFSSL_KEIL
21458         "adcs	r4, r4, r7\n\t"
21459 #elif defined(__clang__)
21460         "adcs	r4, r7\n\t"
21461 #else
21462         "adc	r4, r7\n\t"
21463 #endif
21464 #ifdef WOLFSSL_KEIL
21465         "adcs	r5, r5, %[r]\n\t"
21466 #elif defined(__clang__)
21467         "adcs	r5, %[r]\n\t"
21468 #else
21469         "adc	r5, %[r]\n\t"
21470 #endif
21471         "# Square: Done\n\t"
21472         "mov	r2, r12\n\t"
21473         "\n"
21474     "L_sp_2048_sqr_32_done_sqr_%=:\n\t"
21475 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21476         "adds	%[a], %[a], #4\n\t"
21477 #else
21478         "add	%[a], %[a], #4\n\t"
21479 #endif
21480 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21481         "subs	r2, r2, #4\n\t"
21482 #else
21483         "sub	r2, r2, #4\n\t"
21484 #endif
21485         "movs	r6, #0x80\n\t"
21486         "add	r6, r6, r9\n\t"
21487         "cmp	%[a], r6\n\t"
21488         "beq	L_sp_2048_sqr_32_done_mul_%=\n\t"
21489         "cmp	%[a], r2\n\t"
21490         "bgt	L_sp_2048_sqr_32_done_mul_%=\n\t"
21491         "mov	r7, r8\n\t"
21492         "add	r7, r7, r9\n\t"
21493         "cmp	%[a], r7\n\t"
21494         "ble	L_sp_2048_sqr_32_mul_%=\n\t"
21495         "\n"
21496     "L_sp_2048_sqr_32_done_mul_%=:\n\t"
21497         "mov	%[r], r10\n\t"
21498         "mov	r7, r8\n\t"
21499         "str	r3, [%[r], r7]\n\t"
21500         "movs	r3, r4\n\t"
21501         "movs	r4, r5\n\t"
21502         "movs	r5, #0\n\t"
21503 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21504         "adds	r7, r7, #4\n\t"
21505 #else
21506         "add	r7, r7, #4\n\t"
21507 #endif
21508         "mov	r8, r7\n\t"
21509         "movs	r6, #0xf8\n\t"
21510         "cmp	r7, r6\n\t"
21511         "ble	L_sp_2048_sqr_32_words_%=\n\t"
21512         "mov	%[a], r9\n\t"
21513         "str	r3, [%[r], r7]\n\t"
21514         "mov	%[r], r11\n\t"
21515         "mov	%[a], r10\n\t"
21516         "movs	r3, #0xfc\n\t"
21517         "\n"
21518     "L_sp_2048_sqr_32_store_%=:\n\t"
21519         "ldr	r6, [%[a], r3]\n\t"
21520         "str	r6, [%[r], r3]\n\t"
21521 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21522         "subs	r3, r3, #4\n\t"
21523 #else
21524         "sub	r3, r3, #4\n\t"
21525 #endif
21526         "bge	L_sp_2048_sqr_32_store_%=\n\t"
21527         "movs	r6, #0xff\n\t"
21528 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21529         "adds	r6, r6, #1\n\t"
21530 #else
21531         "add	r6, r6, #1\n\t"
21532 #endif
21533         "add	sp, sp, r6\n\t"
21534         : [r] "+r" (r), [a] "+r" (a)
21535         :
21536         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
21537     );
21538 }
21539 
21540 #endif /* WOLFSSL_SP_SMALL */
21541 #endif /* (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) | WOLFSSL_HAVE_SP_DH */
21542 
21543 /* Caclulate the bottom digit of -1/a mod 2^n.
21544  *
21545  * a    A single precision number.
21546  * rho  Bottom word of inverse.
21547  */
sp_2048_mont_setup(const sp_digit * a,sp_digit * rho)21548 static void sp_2048_mont_setup(const sp_digit* a, sp_digit* rho)
21549 {
21550     sp_digit x;
21551     sp_digit b;
21552 
21553     b = a[0];
21554     x = (((b + 2) & 4) << 1) + b; /* here x*a==1 mod 2**4 */
21555     x *= 2 - b * x;               /* here x*a==1 mod 2**8 */
21556     x *= 2 - b * x;               /* here x*a==1 mod 2**16 */
21557     x *= 2 - b * x;               /* here x*a==1 mod 2**32 */
21558 
21559     /* rho = -1/m mod b */
21560     *rho = (sp_digit)0 - x;
21561 }
21562 
21563 /* Mul a by digit b into r. (r = a * b)
21564  *
21565  * r  A single precision integer.
21566  * a  A single precision integer.
21567  * b  A single precision digit.
21568  */
sp_2048_mul_d_64(sp_digit * r,const sp_digit * a,sp_digit b)21569 SP_NOINLINE static void sp_2048_mul_d_64(sp_digit* r, const sp_digit* a,
21570         sp_digit b)
21571 {
21572     __asm__ __volatile__ (
21573         "movs	r6, #0xff\n\t"
21574 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21575         "adds	r6, r6, #1\n\t"
21576 #else
21577         "add	r6, r6, #1\n\t"
21578 #endif
21579 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21580         "adds	r6, r6, %[a]\n\t"
21581 #else
21582         "add	r6, r6, %[a]\n\t"
21583 #endif
21584         "mov	r8, %[r]\n\t"
21585         "mov	r9, r6\n\t"
21586         "movs	r3, #0\n\t"
21587         "movs	r4, #0\n\t"
21588         "\n"
21589     "L_sp_2048_mul_d_64_%=:\n\t"
21590         "movs	%[r], #0\n\t"
21591         "movs	r5, #0\n\t"
21592         "# A[] * B\n\t"
21593         "ldrh	r6, [%[a]]\n\t"
21594         "uxth	r7, %[b]\n\t"
21595 #ifdef WOLFSSL_KEIL
21596         "muls	r7, r6, r7\n\t"
21597 #elif defined(__clang__)
21598         "muls	r7, r6\n\t"
21599 #else
21600         "mul	r7, r6\n\t"
21601 #endif
21602 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21603         "adds	r3, r3, r7\n\t"
21604 #else
21605         "add	r3, r3, r7\n\t"
21606 #endif
21607 #ifdef WOLFSSL_KEIL
21608         "adcs	r4, r4, %[r]\n\t"
21609 #elif defined(__clang__)
21610         "adcs	r4, %[r]\n\t"
21611 #else
21612         "adc	r4, %[r]\n\t"
21613 #endif
21614 #ifdef WOLFSSL_KEIL
21615         "adcs	r5, r5, %[r]\n\t"
21616 #elif defined(__clang__)
21617         "adcs	r5, %[r]\n\t"
21618 #else
21619         "adc	r5, %[r]\n\t"
21620 #endif
21621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21622         "lsrs	r7, %[b], #16\n\t"
21623 #else
21624         "lsr	r7, %[b], #16\n\t"
21625 #endif
21626 #ifdef WOLFSSL_KEIL
21627         "muls	r6, r7, r6\n\t"
21628 #elif defined(__clang__)
21629         "muls	r6, r7\n\t"
21630 #else
21631         "mul	r6, r7\n\t"
21632 #endif
21633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21634         "lsrs	r7, r6, #16\n\t"
21635 #else
21636         "lsr	r7, r6, #16\n\t"
21637 #endif
21638 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21639         "lsls	r6, r6, #16\n\t"
21640 #else
21641         "lsl	r6, r6, #16\n\t"
21642 #endif
21643 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21644         "adds	r3, r3, r6\n\t"
21645 #else
21646         "add	r3, r3, r6\n\t"
21647 #endif
21648 #ifdef WOLFSSL_KEIL
21649         "adcs	r4, r4, r7\n\t"
21650 #elif defined(__clang__)
21651         "adcs	r4, r7\n\t"
21652 #else
21653         "adc	r4, r7\n\t"
21654 #endif
21655 #ifdef WOLFSSL_KEIL
21656         "adcs	r5, r5, %[r]\n\t"
21657 #elif defined(__clang__)
21658         "adcs	r5, %[r]\n\t"
21659 #else
21660         "adc	r5, %[r]\n\t"
21661 #endif
21662         "ldr	r6, [%[a]]\n\t"
21663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21664         "lsrs	r6, r6, #16\n\t"
21665 #else
21666         "lsr	r6, r6, #16\n\t"
21667 #endif
21668 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21669         "lsrs	r7, %[b], #16\n\t"
21670 #else
21671         "lsr	r7, %[b], #16\n\t"
21672 #endif
21673 #ifdef WOLFSSL_KEIL
21674         "muls	r7, r6, r7\n\t"
21675 #elif defined(__clang__)
21676         "muls	r7, r6\n\t"
21677 #else
21678         "mul	r7, r6\n\t"
21679 #endif
21680 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21681         "adds	r4, r4, r7\n\t"
21682 #else
21683         "add	r4, r4, r7\n\t"
21684 #endif
21685 #ifdef WOLFSSL_KEIL
21686         "adcs	r5, r5, %[r]\n\t"
21687 #elif defined(__clang__)
21688         "adcs	r5, %[r]\n\t"
21689 #else
21690         "adc	r5, %[r]\n\t"
21691 #endif
21692         "uxth	r7, %[b]\n\t"
21693 #ifdef WOLFSSL_KEIL
21694         "muls	r6, r7, r6\n\t"
21695 #elif defined(__clang__)
21696         "muls	r6, r7\n\t"
21697 #else
21698         "mul	r6, r7\n\t"
21699 #endif
21700 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21701         "lsrs	r7, r6, #16\n\t"
21702 #else
21703         "lsr	r7, r6, #16\n\t"
21704 #endif
21705 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21706         "lsls	r6, r6, #16\n\t"
21707 #else
21708         "lsl	r6, r6, #16\n\t"
21709 #endif
21710 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21711         "adds	r3, r3, r6\n\t"
21712 #else
21713         "add	r3, r3, r6\n\t"
21714 #endif
21715 #ifdef WOLFSSL_KEIL
21716         "adcs	r4, r4, r7\n\t"
21717 #elif defined(__clang__)
21718         "adcs	r4, r7\n\t"
21719 #else
21720         "adc	r4, r7\n\t"
21721 #endif
21722 #ifdef WOLFSSL_KEIL
21723         "adcs	r5, r5, %[r]\n\t"
21724 #elif defined(__clang__)
21725         "adcs	r5, %[r]\n\t"
21726 #else
21727         "adc	r5, %[r]\n\t"
21728 #endif
21729         "# A[] * B - Done\n\t"
21730         "mov	%[r], r8\n\t"
21731         "str	r3, [%[r]]\n\t"
21732         "movs	r3, r4\n\t"
21733         "movs	r4, r5\n\t"
21734 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21735         "adds	%[r], %[r], #4\n\t"
21736 #else
21737         "add	%[r], %[r], #4\n\t"
21738 #endif
21739 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21740         "adds	%[a], %[a], #4\n\t"
21741 #else
21742         "add	%[a], %[a], #4\n\t"
21743 #endif
21744         "mov	r8, %[r]\n\t"
21745         "cmp	%[a], r9\n\t"
21746         "blt	L_sp_2048_mul_d_64_%=\n\t"
21747         "str	r3, [%[r]]\n\t"
21748         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
21749         :
21750         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
21751     );
21752 }
21753 
21754 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
21755 /* r = 2^n mod m where n is the number of bits to reduce by.
21756  * Given m must be 2048 bits, just need to subtract.
21757  *
21758  * r  A single precision number.
21759  * m  A single precision number.
21760  */
sp_2048_mont_norm_32(sp_digit * r,const sp_digit * m)21761 static void sp_2048_mont_norm_32(sp_digit* r, const sp_digit* m)
21762 {
21763     XMEMSET(r, 0, sizeof(sp_digit) * 32);
21764 
21765     /* r = 2^n mod m */
21766     sp_2048_sub_in_place_32(r, m);
21767 }
21768 
21769 /* Conditionally subtract b from a using the mask m.
21770  * m is -1 to subtract and 0 when not copying.
21771  *
21772  * r  A single precision number representing condition subtract result.
21773  * a  A single precision number to subtract from.
21774  * b  A single precision number to subtract.
21775  * m  Mask value to apply.
21776  */
sp_2048_cond_sub_32(sp_digit * r,const sp_digit * a,const sp_digit * b,sp_digit m)21777 SP_NOINLINE static sp_digit sp_2048_cond_sub_32(sp_digit* r, const sp_digit* a,
21778         const sp_digit* b, sp_digit m)
21779 {
21780     __asm__ __volatile__ (
21781         "movs	r4, #0\n\t"
21782         "movs	r5, #0x80\n\t"
21783         "mov	r8, r5\n\t"
21784         "movs	r7, #0\n\t"
21785         "\n"
21786     "L_sp_2048_cond_sub_32_words_%=:\n\t"
21787         "ldr	r6, [%[b], r7]\n\t"
21788 #ifdef WOLFSSL_KEIL
21789         "ands	r6, r6, %[m]\n\t"
21790 #elif defined(__clang__)
21791         "ands	r6, %[m]\n\t"
21792 #else
21793         "and	r6, %[m]\n\t"
21794 #endif
21795         "movs	r5, #0\n\t"
21796 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21797         "subs	r5, r5, r4\n\t"
21798 #else
21799         "sub	r5, r5, r4\n\t"
21800 #endif
21801         "ldr	r5, [%[a], r7]\n\t"
21802 #ifdef WOLFSSL_KEIL
21803         "sbcs	r5, r5, r6\n\t"
21804 #elif defined(__clang__)
21805         "sbcs	r5, r6\n\t"
21806 #else
21807         "sbc	r5, r6\n\t"
21808 #endif
21809 #ifdef WOLFSSL_KEIL
21810         "sbcs	r4, r4, r4\n\t"
21811 #elif defined(__clang__)
21812         "sbcs	r4, r4\n\t"
21813 #else
21814         "sbc	r4, r4\n\t"
21815 #endif
21816         "str	r5, [%[r], r7]\n\t"
21817 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21818         "adds	r7, r7, #4\n\t"
21819 #else
21820         "add	r7, r7, #4\n\t"
21821 #endif
21822         "cmp	r7, r8\n\t"
21823         "blt	L_sp_2048_cond_sub_32_words_%=\n\t"
21824         "movs	%[r], r4\n\t"
21825         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
21826         :
21827         : "memory", "r4", "r5", "r6", "r7", "r8"
21828     );
21829     return (uint32_t)(size_t)r;
21830 }
21831 
21832 /* Reduce the number back to 2048 bits using Montgomery reduction.
21833  *
21834  * a   A single precision number to reduce in place.
21835  * m   The single precision number representing the modulus.
21836  * mp  The digit representing the negative inverse of m mod 2^n.
21837  */
sp_2048_mont_reduce_32(sp_digit * a,const sp_digit * m,sp_digit mp)21838 SP_NOINLINE static void sp_2048_mont_reduce_32(sp_digit* a, const sp_digit* m,
21839         sp_digit mp)
21840 {
21841     __asm__ __volatile__ (
21842         "movs	r7, #0\n\t"
21843         "mov	r8, %[mp]\n\t"
21844         "mov	r12, r7\n\t"
21845         "mov	lr, %[m]\n\t"
21846         "mov	r9, %[a]\n\t"
21847         "mov	r11, %[a]\n\t"
21848         "movs	r5, #0x7c\n\t"
21849         "movs	r6, #0x80\n\t"
21850         "add	r9, r9, r5\n\t"
21851         "add	r11, r11, r6\n\t"
21852         "\n"
21853     "L_sp_2048_mont_reduce_32_mod_%=:\n\t"
21854         "movs	r7, #0\n\t"
21855         "movs	r4, #0\n\t"
21856         "# a[i] += m[0] * mu\n\t"
21857         "ldm	%[m]!, {%[mp]}\n\t"
21858         "ldm	%[a]!, {r3}\n\t"
21859         "# mu = a[i] * mp\n\t"
21860         "mov	r5, r8\n\t"
21861 #ifdef WOLFSSL_KEIL
21862         "muls	r5, r3, r5\n\t"
21863 #elif defined(__clang__)
21864         "muls	r5, r3\n\t"
21865 #else
21866         "mul	r5, r3\n\t"
21867 #endif
21868         "mov	r10, r5\n\t"
21869         "# Multiply m[0] and mu - Start\n\t"
21870         "mov	r5, r10\n\t"
21871         "uxth	r6, %[mp]\n\t"
21872         "uxth	r5, r5\n\t"
21873 #ifdef WOLFSSL_KEIL
21874         "muls	r6, r5, r6\n\t"
21875 #elif defined(__clang__)
21876         "muls	r6, r5\n\t"
21877 #else
21878         "mul	r6, r5\n\t"
21879 #endif
21880 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21881         "adds	r3, r3, r6\n\t"
21882 #else
21883         "add	r3, r3, r6\n\t"
21884 #endif
21885 #ifdef WOLFSSL_KEIL
21886         "adcs	r4, r4, r7\n\t"
21887 #elif defined(__clang__)
21888         "adcs	r4, r7\n\t"
21889 #else
21890         "adc	r4, r7\n\t"
21891 #endif
21892 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21893         "lsrs	r6, %[mp], #16\n\t"
21894 #else
21895         "lsr	r6, %[mp], #16\n\t"
21896 #endif
21897 #ifdef WOLFSSL_KEIL
21898         "muls	r5, r6, r5\n\t"
21899 #elif defined(__clang__)
21900         "muls	r5, r6\n\t"
21901 #else
21902         "mul	r5, r6\n\t"
21903 #endif
21904 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21905         "lsrs	r6, r5, #16\n\t"
21906 #else
21907         "lsr	r6, r5, #16\n\t"
21908 #endif
21909 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21910         "lsls	r5, r5, #16\n\t"
21911 #else
21912         "lsl	r5, r5, #16\n\t"
21913 #endif
21914 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21915         "adds	r3, r3, r5\n\t"
21916 #else
21917         "add	r3, r3, r5\n\t"
21918 #endif
21919 #ifdef WOLFSSL_KEIL
21920         "adcs	r4, r4, r6\n\t"
21921 #elif defined(__clang__)
21922         "adcs	r4, r6\n\t"
21923 #else
21924         "adc	r4, r6\n\t"
21925 #endif
21926         "mov	r5, r10\n\t"
21927 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21928         "lsrs	r6, %[mp], #16\n\t"
21929 #else
21930         "lsr	r6, %[mp], #16\n\t"
21931 #endif
21932 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21933         "lsrs	r5, r5, #16\n\t"
21934 #else
21935         "lsr	r5, r5, #16\n\t"
21936 #endif
21937 #ifdef WOLFSSL_KEIL
21938         "muls	r6, r5, r6\n\t"
21939 #elif defined(__clang__)
21940         "muls	r6, r5\n\t"
21941 #else
21942         "mul	r6, r5\n\t"
21943 #endif
21944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21945         "adds	r4, r4, r6\n\t"
21946 #else
21947         "add	r4, r4, r6\n\t"
21948 #endif
21949         "uxth	r6, %[mp]\n\t"
21950 #ifdef WOLFSSL_KEIL
21951         "muls	r5, r6, r5\n\t"
21952 #elif defined(__clang__)
21953         "muls	r5, r6\n\t"
21954 #else
21955         "mul	r5, r6\n\t"
21956 #endif
21957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21958         "lsrs	r6, r5, #16\n\t"
21959 #else
21960         "lsr	r6, r5, #16\n\t"
21961 #endif
21962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21963         "lsls	r5, r5, #16\n\t"
21964 #else
21965         "lsl	r5, r5, #16\n\t"
21966 #endif
21967 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21968         "adds	r3, r3, r5\n\t"
21969 #else
21970         "add	r3, r3, r5\n\t"
21971 #endif
21972 #ifdef WOLFSSL_KEIL
21973         "adcs	r4, r4, r6\n\t"
21974 #elif defined(__clang__)
21975         "adcs	r4, r6\n\t"
21976 #else
21977         "adc	r4, r6\n\t"
21978 #endif
21979         "# Multiply m[0] and mu - Done\n\t"
21980         "\n"
21981     "L_sp_2048_mont_reduce_32_word_%=:\n\t"
21982         "# a[i+j] += m[j] * mu\n\t"
21983         "ldr	r3, [%[a]]\n\t"
21984         "ldm	%[m]!, {%[mp]}\n\t"
21985 #if defined(__clang__) || defined(WOLFSSL_KEIL)
21986         "adds	r3, r3, r4\n\t"
21987 #else
21988         "add	r3, r3, r4\n\t"
21989 #endif
21990         "movs	r4, #0\n\t"
21991 #ifdef WOLFSSL_KEIL
21992         "adcs	r4, r4, r7\n\t"
21993 #elif defined(__clang__)
21994         "adcs	r4, r7\n\t"
21995 #else
21996         "adc	r4, r7\n\t"
21997 #endif
21998         "# Multiply m[j] and mu - Start\n\t"
21999         "mov	r5, r10\n\t"
22000         "uxth	r6, %[mp]\n\t"
22001         "uxth	r5, r5\n\t"
22002 #ifdef WOLFSSL_KEIL
22003         "muls	r6, r5, r6\n\t"
22004 #elif defined(__clang__)
22005         "muls	r6, r5\n\t"
22006 #else
22007         "mul	r6, r5\n\t"
22008 #endif
22009 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22010         "adds	r3, r3, r6\n\t"
22011 #else
22012         "add	r3, r3, r6\n\t"
22013 #endif
22014 #ifdef WOLFSSL_KEIL
22015         "adcs	r4, r4, r7\n\t"
22016 #elif defined(__clang__)
22017         "adcs	r4, r7\n\t"
22018 #else
22019         "adc	r4, r7\n\t"
22020 #endif
22021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22022         "lsrs	r6, %[mp], #16\n\t"
22023 #else
22024         "lsr	r6, %[mp], #16\n\t"
22025 #endif
22026 #ifdef WOLFSSL_KEIL
22027         "muls	r5, r6, r5\n\t"
22028 #elif defined(__clang__)
22029         "muls	r5, r6\n\t"
22030 #else
22031         "mul	r5, r6\n\t"
22032 #endif
22033 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22034         "lsrs	r6, r5, #16\n\t"
22035 #else
22036         "lsr	r6, r5, #16\n\t"
22037 #endif
22038 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22039         "lsls	r5, r5, #16\n\t"
22040 #else
22041         "lsl	r5, r5, #16\n\t"
22042 #endif
22043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22044         "adds	r3, r3, r5\n\t"
22045 #else
22046         "add	r3, r3, r5\n\t"
22047 #endif
22048 #ifdef WOLFSSL_KEIL
22049         "adcs	r4, r4, r6\n\t"
22050 #elif defined(__clang__)
22051         "adcs	r4, r6\n\t"
22052 #else
22053         "adc	r4, r6\n\t"
22054 #endif
22055         "mov	r5, r10\n\t"
22056 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22057         "lsrs	r6, %[mp], #16\n\t"
22058 #else
22059         "lsr	r6, %[mp], #16\n\t"
22060 #endif
22061 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22062         "lsrs	r5, r5, #16\n\t"
22063 #else
22064         "lsr	r5, r5, #16\n\t"
22065 #endif
22066 #ifdef WOLFSSL_KEIL
22067         "muls	r6, r5, r6\n\t"
22068 #elif defined(__clang__)
22069         "muls	r6, r5\n\t"
22070 #else
22071         "mul	r6, r5\n\t"
22072 #endif
22073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22074         "adds	r4, r4, r6\n\t"
22075 #else
22076         "add	r4, r4, r6\n\t"
22077 #endif
22078         "uxth	r6, %[mp]\n\t"
22079 #ifdef WOLFSSL_KEIL
22080         "muls	r5, r6, r5\n\t"
22081 #elif defined(__clang__)
22082         "muls	r5, r6\n\t"
22083 #else
22084         "mul	r5, r6\n\t"
22085 #endif
22086 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22087         "lsrs	r6, r5, #16\n\t"
22088 #else
22089         "lsr	r6, r5, #16\n\t"
22090 #endif
22091 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22092         "lsls	r5, r5, #16\n\t"
22093 #else
22094         "lsl	r5, r5, #16\n\t"
22095 #endif
22096 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22097         "adds	r3, r3, r5\n\t"
22098 #else
22099         "add	r3, r3, r5\n\t"
22100 #endif
22101 #ifdef WOLFSSL_KEIL
22102         "adcs	r4, r4, r6\n\t"
22103 #elif defined(__clang__)
22104         "adcs	r4, r6\n\t"
22105 #else
22106         "adc	r4, r6\n\t"
22107 #endif
22108         "# Multiply m[j] and mu - Done\n\t"
22109         "stm	%[a]!, {r3}\n\t"
22110         "cmp	%[a], r9\n\t"
22111         "blt	L_sp_2048_mont_reduce_32_word_%=\n\t"
22112         "# a[i+31] += m[31] * mu\n\t"
22113         "ldr	%[mp], [%[m]]\n\t"
22114         "mov	r3, r12\n\t"
22115         "# Multiply m[31] and mu - Start\n\t"
22116         "mov	r5, r10\n\t"
22117         "uxth	r6, %[mp]\n\t"
22118         "uxth	r5, r5\n\t"
22119 #ifdef WOLFSSL_KEIL
22120         "muls	r6, r5, r6\n\t"
22121 #elif defined(__clang__)
22122         "muls	r6, r5\n\t"
22123 #else
22124         "mul	r6, r5\n\t"
22125 #endif
22126 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22127         "adds	r4, r4, r6\n\t"
22128 #else
22129         "add	r4, r4, r6\n\t"
22130 #endif
22131 #ifdef WOLFSSL_KEIL
22132         "adcs	r3, r3, r7\n\t"
22133 #elif defined(__clang__)
22134         "adcs	r3, r7\n\t"
22135 #else
22136         "adc	r3, r7\n\t"
22137 #endif
22138 #ifdef WOLFSSL_KEIL
22139         "adcs	r7, r7, r7\n\t"
22140 #elif defined(__clang__)
22141         "adcs	r7, r7\n\t"
22142 #else
22143         "adc	r7, r7\n\t"
22144 #endif
22145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22146         "lsrs	r6, %[mp], #16\n\t"
22147 #else
22148         "lsr	r6, %[mp], #16\n\t"
22149 #endif
22150 #ifdef WOLFSSL_KEIL
22151         "muls	r5, r6, r5\n\t"
22152 #elif defined(__clang__)
22153         "muls	r5, r6\n\t"
22154 #else
22155         "mul	r5, r6\n\t"
22156 #endif
22157 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22158         "lsrs	r6, r5, #16\n\t"
22159 #else
22160         "lsr	r6, r5, #16\n\t"
22161 #endif
22162 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22163         "lsls	r5, r5, #16\n\t"
22164 #else
22165         "lsl	r5, r5, #16\n\t"
22166 #endif
22167 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22168         "adds	r4, r4, r5\n\t"
22169 #else
22170         "add	r4, r4, r5\n\t"
22171 #endif
22172 #ifdef WOLFSSL_KEIL
22173         "adcs	r3, r3, r6\n\t"
22174 #elif defined(__clang__)
22175         "adcs	r3, r6\n\t"
22176 #else
22177         "adc	r3, r6\n\t"
22178 #endif
22179 #ifdef WOLFSSL_KEIL
22180         "adcs	r7, r7, r7\n\t"
22181 #elif defined(__clang__)
22182         "adcs	r7, r7\n\t"
22183 #else
22184         "adc	r7, r7\n\t"
22185 #endif
22186         "mov	r5, r10\n\t"
22187 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22188         "lsrs	r6, %[mp], #16\n\t"
22189 #else
22190         "lsr	r6, %[mp], #16\n\t"
22191 #endif
22192 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22193         "lsrs	r5, r5, #16\n\t"
22194 #else
22195         "lsr	r5, r5, #16\n\t"
22196 #endif
22197 #ifdef WOLFSSL_KEIL
22198         "muls	r6, r5, r6\n\t"
22199 #elif defined(__clang__)
22200         "muls	r6, r5\n\t"
22201 #else
22202         "mul	r6, r5\n\t"
22203 #endif
22204 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22205         "adds	r3, r3, r6\n\t"
22206 #else
22207         "add	r3, r3, r6\n\t"
22208 #endif
22209 #ifdef WOLFSSL_KEIL
22210         "adcs	r7, r7, r7\n\t"
22211 #elif defined(__clang__)
22212         "adcs	r7, r7\n\t"
22213 #else
22214         "adc	r7, r7\n\t"
22215 #endif
22216         "uxth	r6, %[mp]\n\t"
22217 #ifdef WOLFSSL_KEIL
22218         "muls	r5, r6, r5\n\t"
22219 #elif defined(__clang__)
22220         "muls	r5, r6\n\t"
22221 #else
22222         "mul	r5, r6\n\t"
22223 #endif
22224 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22225         "lsrs	r6, r5, #16\n\t"
22226 #else
22227         "lsr	r6, r5, #16\n\t"
22228 #endif
22229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22230         "lsls	r5, r5, #16\n\t"
22231 #else
22232         "lsl	r5, r5, #16\n\t"
22233 #endif
22234 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22235         "adds	r4, r4, r5\n\t"
22236 #else
22237         "add	r4, r4, r5\n\t"
22238 #endif
22239 #ifdef WOLFSSL_KEIL
22240         "adcs	r3, r3, r6\n\t"
22241 #elif defined(__clang__)
22242         "adcs	r3, r6\n\t"
22243 #else
22244         "adc	r3, r6\n\t"
22245 #endif
22246 #ifdef WOLFSSL_KEIL
22247         "adcs	r7, r7, r7\n\t"
22248 #elif defined(__clang__)
22249         "adcs	r7, r7\n\t"
22250 #else
22251         "adc	r7, r7\n\t"
22252 #endif
22253         "# Multiply m[31] and mu - Done\n\t"
22254         "ldr	r5, [%[a]]\n\t"
22255         "ldr	r6, [%[a], #4]\n\t"
22256         "movs	%[mp], #0\n\t"
22257 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22258         "adds	r5, r5, r4\n\t"
22259 #else
22260         "add	r5, r5, r4\n\t"
22261 #endif
22262 #ifdef WOLFSSL_KEIL
22263         "adcs	r6, r6, r3\n\t"
22264 #elif defined(__clang__)
22265         "adcs	r6, r3\n\t"
22266 #else
22267         "adc	r6, r3\n\t"
22268 #endif
22269 #ifdef WOLFSSL_KEIL
22270         "adcs	r7, r7, %[mp]\n\t"
22271 #elif defined(__clang__)
22272         "adcs	r7, %[mp]\n\t"
22273 #else
22274         "adc	r7, %[mp]\n\t"
22275 #endif
22276         "stm	%[a]!, {r5, r6}\n\t"
22277         "# i += 1\n\t"
22278 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22279         "subs	%[a], %[a], #4\n\t"
22280 #else
22281         "sub	%[a], %[a], #4\n\t"
22282 #endif
22283         "movs	r3, #0x7c\n\t"
22284         "mov	r9, %[a]\n\t"
22285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22286         "subs	%[a], %[a], r3\n\t"
22287 #else
22288         "sub	%[a], %[a], r3\n\t"
22289 #endif
22290         "mov	r12, r7\n\t"
22291         "mov	%[m], lr\n\t"
22292         "cmp	r11, %[a]\n\t"
22293         "bgt	L_sp_2048_mont_reduce_32_mod_%=\n\t"
22294 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22295         "negs	r7, r7\n\t"
22296 #else
22297         "neg	r7, r7\n\t"
22298 #endif
22299         "# Subtract masked modulus\n\t"
22300         "movs	r4, #0x80\n\t"
22301         "movs	%[mp], #0\n\t"
22302         "movs	r3, #0\n\t"
22303 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22304         "subs	%[a], %[a], r4\n\t"
22305 #else
22306         "sub	%[a], %[a], r4\n\t"
22307 #endif
22308 #ifndef WOLFSSL_SP_LARGE_CODE
22309         "\n"
22310     "L_sp_2048_mont_reduce_32_sub_mask_%=:\n\t"
22311         "ldm	%[m]!, {r6}\n\t"
22312         "movs	r5, #0\n\t"
22313 #ifdef WOLFSSL_KEIL
22314         "ands	r6, r6, r7\n\t"
22315 #elif defined(__clang__)
22316         "ands	r6, r7\n\t"
22317 #else
22318         "and	r6, r7\n\t"
22319 #endif
22320 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22321         "subs	r5, r5, %[mp]\n\t"
22322 #else
22323         "sub	r5, r5, %[mp]\n\t"
22324 #endif
22325         "ldr	r5, [%[a], r4]\n\t"
22326 #ifdef WOLFSSL_KEIL
22327         "sbcs	r5, r5, r6\n\t"
22328 #elif defined(__clang__)
22329         "sbcs	r5, r6\n\t"
22330 #else
22331         "sbc	r5, r6\n\t"
22332 #endif
22333 #ifdef WOLFSSL_KEIL
22334         "sbcs	%[mp], %[mp], %[mp]\n\t"
22335 #elif defined(__clang__)
22336         "sbcs	%[mp], %[mp]\n\t"
22337 #else
22338         "sbc	%[mp], %[mp]\n\t"
22339 #endif
22340         "stm	%[a]!, {r5}\n\t"
22341 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22342         "adds	r3, r3, #4\n\t"
22343 #else
22344         "add	r3, r3, #4\n\t"
22345 #endif
22346         "cmp	r3, r4\n\t"
22347         "blt	L_sp_2048_mont_reduce_32_sub_mask_%=\n\t"
22348 #else /* WOLFSSL_SP_LARGE_CODE */
22349         "ldm	%[m]!, {r6}\n\t"
22350 #ifdef WOLFSSL_KEIL
22351         "ands	r6, r6, r7\n\t"
22352 #elif defined(__clang__)
22353         "ands	r6, r7\n\t"
22354 #else
22355         "and	r6, r7\n\t"
22356 #endif
22357         "ldr	r5, [%[a], r4]\n\t"
22358 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22359         "subs	r5, r5, r6\n\t"
22360 #else
22361         "sub	r5, r5, r6\n\t"
22362 #endif
22363         "stm	%[a]!, {r5}\n\t"
22364         "ldm	%[m]!, {r6}\n\t"
22365 #ifdef WOLFSSL_KEIL
22366         "ands	r6, r6, r7\n\t"
22367 #elif defined(__clang__)
22368         "ands	r6, r7\n\t"
22369 #else
22370         "and	r6, r7\n\t"
22371 #endif
22372         "ldr	r5, [%[a], r4]\n\t"
22373 #ifdef WOLFSSL_KEIL
22374         "sbcs	r5, r5, r6\n\t"
22375 #elif defined(__clang__)
22376         "sbcs	r5, r6\n\t"
22377 #else
22378         "sbc	r5, r6\n\t"
22379 #endif
22380         "stm	%[a]!, {r5}\n\t"
22381         "ldm	%[m]!, {r6}\n\t"
22382 #ifdef WOLFSSL_KEIL
22383         "ands	r6, r6, r7\n\t"
22384 #elif defined(__clang__)
22385         "ands	r6, r7\n\t"
22386 #else
22387         "and	r6, r7\n\t"
22388 #endif
22389         "ldr	r5, [%[a], r4]\n\t"
22390 #ifdef WOLFSSL_KEIL
22391         "sbcs	r5, r5, r6\n\t"
22392 #elif defined(__clang__)
22393         "sbcs	r5, r6\n\t"
22394 #else
22395         "sbc	r5, r6\n\t"
22396 #endif
22397         "stm	%[a]!, {r5}\n\t"
22398         "ldm	%[m]!, {r6}\n\t"
22399 #ifdef WOLFSSL_KEIL
22400         "ands	r6, r6, r7\n\t"
22401 #elif defined(__clang__)
22402         "ands	r6, r7\n\t"
22403 #else
22404         "and	r6, r7\n\t"
22405 #endif
22406         "ldr	r5, [%[a], r4]\n\t"
22407 #ifdef WOLFSSL_KEIL
22408         "sbcs	r5, r5, r6\n\t"
22409 #elif defined(__clang__)
22410         "sbcs	r5, r6\n\t"
22411 #else
22412         "sbc	r5, r6\n\t"
22413 #endif
22414         "stm	%[a]!, {r5}\n\t"
22415         "ldm	%[m]!, {r6}\n\t"
22416 #ifdef WOLFSSL_KEIL
22417         "ands	r6, r6, r7\n\t"
22418 #elif defined(__clang__)
22419         "ands	r6, r7\n\t"
22420 #else
22421         "and	r6, r7\n\t"
22422 #endif
22423         "ldr	r5, [%[a], r4]\n\t"
22424 #ifdef WOLFSSL_KEIL
22425         "sbcs	r5, r5, r6\n\t"
22426 #elif defined(__clang__)
22427         "sbcs	r5, r6\n\t"
22428 #else
22429         "sbc	r5, r6\n\t"
22430 #endif
22431         "stm	%[a]!, {r5}\n\t"
22432         "ldm	%[m]!, {r6}\n\t"
22433 #ifdef WOLFSSL_KEIL
22434         "ands	r6, r6, r7\n\t"
22435 #elif defined(__clang__)
22436         "ands	r6, r7\n\t"
22437 #else
22438         "and	r6, r7\n\t"
22439 #endif
22440         "ldr	r5, [%[a], r4]\n\t"
22441 #ifdef WOLFSSL_KEIL
22442         "sbcs	r5, r5, r6\n\t"
22443 #elif defined(__clang__)
22444         "sbcs	r5, r6\n\t"
22445 #else
22446         "sbc	r5, r6\n\t"
22447 #endif
22448         "stm	%[a]!, {r5}\n\t"
22449         "ldm	%[m]!, {r6}\n\t"
22450 #ifdef WOLFSSL_KEIL
22451         "ands	r6, r6, r7\n\t"
22452 #elif defined(__clang__)
22453         "ands	r6, r7\n\t"
22454 #else
22455         "and	r6, r7\n\t"
22456 #endif
22457         "ldr	r5, [%[a], r4]\n\t"
22458 #ifdef WOLFSSL_KEIL
22459         "sbcs	r5, r5, r6\n\t"
22460 #elif defined(__clang__)
22461         "sbcs	r5, r6\n\t"
22462 #else
22463         "sbc	r5, r6\n\t"
22464 #endif
22465         "stm	%[a]!, {r5}\n\t"
22466         "ldm	%[m]!, {r6}\n\t"
22467 #ifdef WOLFSSL_KEIL
22468         "ands	r6, r6, r7\n\t"
22469 #elif defined(__clang__)
22470         "ands	r6, r7\n\t"
22471 #else
22472         "and	r6, r7\n\t"
22473 #endif
22474         "ldr	r5, [%[a], r4]\n\t"
22475 #ifdef WOLFSSL_KEIL
22476         "sbcs	r5, r5, r6\n\t"
22477 #elif defined(__clang__)
22478         "sbcs	r5, r6\n\t"
22479 #else
22480         "sbc	r5, r6\n\t"
22481 #endif
22482         "stm	%[a]!, {r5}\n\t"
22483         "ldm	%[m]!, {r6}\n\t"
22484 #ifdef WOLFSSL_KEIL
22485         "ands	r6, r6, r7\n\t"
22486 #elif defined(__clang__)
22487         "ands	r6, r7\n\t"
22488 #else
22489         "and	r6, r7\n\t"
22490 #endif
22491         "ldr	r5, [%[a], r4]\n\t"
22492 #ifdef WOLFSSL_KEIL
22493         "sbcs	r5, r5, r6\n\t"
22494 #elif defined(__clang__)
22495         "sbcs	r5, r6\n\t"
22496 #else
22497         "sbc	r5, r6\n\t"
22498 #endif
22499         "stm	%[a]!, {r5}\n\t"
22500         "ldm	%[m]!, {r6}\n\t"
22501 #ifdef WOLFSSL_KEIL
22502         "ands	r6, r6, r7\n\t"
22503 #elif defined(__clang__)
22504         "ands	r6, r7\n\t"
22505 #else
22506         "and	r6, r7\n\t"
22507 #endif
22508         "ldr	r5, [%[a], r4]\n\t"
22509 #ifdef WOLFSSL_KEIL
22510         "sbcs	r5, r5, r6\n\t"
22511 #elif defined(__clang__)
22512         "sbcs	r5, r6\n\t"
22513 #else
22514         "sbc	r5, r6\n\t"
22515 #endif
22516         "stm	%[a]!, {r5}\n\t"
22517         "ldm	%[m]!, {r6}\n\t"
22518 #ifdef WOLFSSL_KEIL
22519         "ands	r6, r6, r7\n\t"
22520 #elif defined(__clang__)
22521         "ands	r6, r7\n\t"
22522 #else
22523         "and	r6, r7\n\t"
22524 #endif
22525         "ldr	r5, [%[a], r4]\n\t"
22526 #ifdef WOLFSSL_KEIL
22527         "sbcs	r5, r5, r6\n\t"
22528 #elif defined(__clang__)
22529         "sbcs	r5, r6\n\t"
22530 #else
22531         "sbc	r5, r6\n\t"
22532 #endif
22533         "stm	%[a]!, {r5}\n\t"
22534         "ldm	%[m]!, {r6}\n\t"
22535 #ifdef WOLFSSL_KEIL
22536         "ands	r6, r6, r7\n\t"
22537 #elif defined(__clang__)
22538         "ands	r6, r7\n\t"
22539 #else
22540         "and	r6, r7\n\t"
22541 #endif
22542         "ldr	r5, [%[a], r4]\n\t"
22543 #ifdef WOLFSSL_KEIL
22544         "sbcs	r5, r5, r6\n\t"
22545 #elif defined(__clang__)
22546         "sbcs	r5, r6\n\t"
22547 #else
22548         "sbc	r5, r6\n\t"
22549 #endif
22550         "stm	%[a]!, {r5}\n\t"
22551         "ldm	%[m]!, {r6}\n\t"
22552 #ifdef WOLFSSL_KEIL
22553         "ands	r6, r6, r7\n\t"
22554 #elif defined(__clang__)
22555         "ands	r6, r7\n\t"
22556 #else
22557         "and	r6, r7\n\t"
22558 #endif
22559         "ldr	r5, [%[a], r4]\n\t"
22560 #ifdef WOLFSSL_KEIL
22561         "sbcs	r5, r5, r6\n\t"
22562 #elif defined(__clang__)
22563         "sbcs	r5, r6\n\t"
22564 #else
22565         "sbc	r5, r6\n\t"
22566 #endif
22567         "stm	%[a]!, {r5}\n\t"
22568         "ldm	%[m]!, {r6}\n\t"
22569 #ifdef WOLFSSL_KEIL
22570         "ands	r6, r6, r7\n\t"
22571 #elif defined(__clang__)
22572         "ands	r6, r7\n\t"
22573 #else
22574         "and	r6, r7\n\t"
22575 #endif
22576         "ldr	r5, [%[a], r4]\n\t"
22577 #ifdef WOLFSSL_KEIL
22578         "sbcs	r5, r5, r6\n\t"
22579 #elif defined(__clang__)
22580         "sbcs	r5, r6\n\t"
22581 #else
22582         "sbc	r5, r6\n\t"
22583 #endif
22584         "stm	%[a]!, {r5}\n\t"
22585         "ldm	%[m]!, {r6}\n\t"
22586 #ifdef WOLFSSL_KEIL
22587         "ands	r6, r6, r7\n\t"
22588 #elif defined(__clang__)
22589         "ands	r6, r7\n\t"
22590 #else
22591         "and	r6, r7\n\t"
22592 #endif
22593         "ldr	r5, [%[a], r4]\n\t"
22594 #ifdef WOLFSSL_KEIL
22595         "sbcs	r5, r5, r6\n\t"
22596 #elif defined(__clang__)
22597         "sbcs	r5, r6\n\t"
22598 #else
22599         "sbc	r5, r6\n\t"
22600 #endif
22601         "stm	%[a]!, {r5}\n\t"
22602         "ldm	%[m]!, {r6}\n\t"
22603 #ifdef WOLFSSL_KEIL
22604         "ands	r6, r6, r7\n\t"
22605 #elif defined(__clang__)
22606         "ands	r6, r7\n\t"
22607 #else
22608         "and	r6, r7\n\t"
22609 #endif
22610         "ldr	r5, [%[a], r4]\n\t"
22611 #ifdef WOLFSSL_KEIL
22612         "sbcs	r5, r5, r6\n\t"
22613 #elif defined(__clang__)
22614         "sbcs	r5, r6\n\t"
22615 #else
22616         "sbc	r5, r6\n\t"
22617 #endif
22618         "stm	%[a]!, {r5}\n\t"
22619         "ldm	%[m]!, {r6}\n\t"
22620 #ifdef WOLFSSL_KEIL
22621         "ands	r6, r6, r7\n\t"
22622 #elif defined(__clang__)
22623         "ands	r6, r7\n\t"
22624 #else
22625         "and	r6, r7\n\t"
22626 #endif
22627         "ldr	r5, [%[a], r4]\n\t"
22628 #ifdef WOLFSSL_KEIL
22629         "sbcs	r5, r5, r6\n\t"
22630 #elif defined(__clang__)
22631         "sbcs	r5, r6\n\t"
22632 #else
22633         "sbc	r5, r6\n\t"
22634 #endif
22635         "stm	%[a]!, {r5}\n\t"
22636         "ldm	%[m]!, {r6}\n\t"
22637 #ifdef WOLFSSL_KEIL
22638         "ands	r6, r6, r7\n\t"
22639 #elif defined(__clang__)
22640         "ands	r6, r7\n\t"
22641 #else
22642         "and	r6, r7\n\t"
22643 #endif
22644         "ldr	r5, [%[a], r4]\n\t"
22645 #ifdef WOLFSSL_KEIL
22646         "sbcs	r5, r5, r6\n\t"
22647 #elif defined(__clang__)
22648         "sbcs	r5, r6\n\t"
22649 #else
22650         "sbc	r5, r6\n\t"
22651 #endif
22652         "stm	%[a]!, {r5}\n\t"
22653         "ldm	%[m]!, {r6}\n\t"
22654 #ifdef WOLFSSL_KEIL
22655         "ands	r6, r6, r7\n\t"
22656 #elif defined(__clang__)
22657         "ands	r6, r7\n\t"
22658 #else
22659         "and	r6, r7\n\t"
22660 #endif
22661         "ldr	r5, [%[a], r4]\n\t"
22662 #ifdef WOLFSSL_KEIL
22663         "sbcs	r5, r5, r6\n\t"
22664 #elif defined(__clang__)
22665         "sbcs	r5, r6\n\t"
22666 #else
22667         "sbc	r5, r6\n\t"
22668 #endif
22669         "stm	%[a]!, {r5}\n\t"
22670         "ldm	%[m]!, {r6}\n\t"
22671 #ifdef WOLFSSL_KEIL
22672         "ands	r6, r6, r7\n\t"
22673 #elif defined(__clang__)
22674         "ands	r6, r7\n\t"
22675 #else
22676         "and	r6, r7\n\t"
22677 #endif
22678         "ldr	r5, [%[a], r4]\n\t"
22679 #ifdef WOLFSSL_KEIL
22680         "sbcs	r5, r5, r6\n\t"
22681 #elif defined(__clang__)
22682         "sbcs	r5, r6\n\t"
22683 #else
22684         "sbc	r5, r6\n\t"
22685 #endif
22686         "stm	%[a]!, {r5}\n\t"
22687         "ldm	%[m]!, {r6}\n\t"
22688 #ifdef WOLFSSL_KEIL
22689         "ands	r6, r6, r7\n\t"
22690 #elif defined(__clang__)
22691         "ands	r6, r7\n\t"
22692 #else
22693         "and	r6, r7\n\t"
22694 #endif
22695         "ldr	r5, [%[a], r4]\n\t"
22696 #ifdef WOLFSSL_KEIL
22697         "sbcs	r5, r5, r6\n\t"
22698 #elif defined(__clang__)
22699         "sbcs	r5, r6\n\t"
22700 #else
22701         "sbc	r5, r6\n\t"
22702 #endif
22703         "stm	%[a]!, {r5}\n\t"
22704         "ldm	%[m]!, {r6}\n\t"
22705 #ifdef WOLFSSL_KEIL
22706         "ands	r6, r6, r7\n\t"
22707 #elif defined(__clang__)
22708         "ands	r6, r7\n\t"
22709 #else
22710         "and	r6, r7\n\t"
22711 #endif
22712         "ldr	r5, [%[a], r4]\n\t"
22713 #ifdef WOLFSSL_KEIL
22714         "sbcs	r5, r5, r6\n\t"
22715 #elif defined(__clang__)
22716         "sbcs	r5, r6\n\t"
22717 #else
22718         "sbc	r5, r6\n\t"
22719 #endif
22720         "stm	%[a]!, {r5}\n\t"
22721         "ldm	%[m]!, {r6}\n\t"
22722 #ifdef WOLFSSL_KEIL
22723         "ands	r6, r6, r7\n\t"
22724 #elif defined(__clang__)
22725         "ands	r6, r7\n\t"
22726 #else
22727         "and	r6, r7\n\t"
22728 #endif
22729         "ldr	r5, [%[a], r4]\n\t"
22730 #ifdef WOLFSSL_KEIL
22731         "sbcs	r5, r5, r6\n\t"
22732 #elif defined(__clang__)
22733         "sbcs	r5, r6\n\t"
22734 #else
22735         "sbc	r5, r6\n\t"
22736 #endif
22737         "stm	%[a]!, {r5}\n\t"
22738         "ldm	%[m]!, {r6}\n\t"
22739 #ifdef WOLFSSL_KEIL
22740         "ands	r6, r6, r7\n\t"
22741 #elif defined(__clang__)
22742         "ands	r6, r7\n\t"
22743 #else
22744         "and	r6, r7\n\t"
22745 #endif
22746         "ldr	r5, [%[a], r4]\n\t"
22747 #ifdef WOLFSSL_KEIL
22748         "sbcs	r5, r5, r6\n\t"
22749 #elif defined(__clang__)
22750         "sbcs	r5, r6\n\t"
22751 #else
22752         "sbc	r5, r6\n\t"
22753 #endif
22754         "stm	%[a]!, {r5}\n\t"
22755         "ldm	%[m]!, {r6}\n\t"
22756 #ifdef WOLFSSL_KEIL
22757         "ands	r6, r6, r7\n\t"
22758 #elif defined(__clang__)
22759         "ands	r6, r7\n\t"
22760 #else
22761         "and	r6, r7\n\t"
22762 #endif
22763         "ldr	r5, [%[a], r4]\n\t"
22764 #ifdef WOLFSSL_KEIL
22765         "sbcs	r5, r5, r6\n\t"
22766 #elif defined(__clang__)
22767         "sbcs	r5, r6\n\t"
22768 #else
22769         "sbc	r5, r6\n\t"
22770 #endif
22771         "stm	%[a]!, {r5}\n\t"
22772         "ldm	%[m]!, {r6}\n\t"
22773 #ifdef WOLFSSL_KEIL
22774         "ands	r6, r6, r7\n\t"
22775 #elif defined(__clang__)
22776         "ands	r6, r7\n\t"
22777 #else
22778         "and	r6, r7\n\t"
22779 #endif
22780         "ldr	r5, [%[a], r4]\n\t"
22781 #ifdef WOLFSSL_KEIL
22782         "sbcs	r5, r5, r6\n\t"
22783 #elif defined(__clang__)
22784         "sbcs	r5, r6\n\t"
22785 #else
22786         "sbc	r5, r6\n\t"
22787 #endif
22788         "stm	%[a]!, {r5}\n\t"
22789         "ldm	%[m]!, {r6}\n\t"
22790 #ifdef WOLFSSL_KEIL
22791         "ands	r6, r6, r7\n\t"
22792 #elif defined(__clang__)
22793         "ands	r6, r7\n\t"
22794 #else
22795         "and	r6, r7\n\t"
22796 #endif
22797         "ldr	r5, [%[a], r4]\n\t"
22798 #ifdef WOLFSSL_KEIL
22799         "sbcs	r5, r5, r6\n\t"
22800 #elif defined(__clang__)
22801         "sbcs	r5, r6\n\t"
22802 #else
22803         "sbc	r5, r6\n\t"
22804 #endif
22805         "stm	%[a]!, {r5}\n\t"
22806         "ldm	%[m]!, {r6}\n\t"
22807 #ifdef WOLFSSL_KEIL
22808         "ands	r6, r6, r7\n\t"
22809 #elif defined(__clang__)
22810         "ands	r6, r7\n\t"
22811 #else
22812         "and	r6, r7\n\t"
22813 #endif
22814         "ldr	r5, [%[a], r4]\n\t"
22815 #ifdef WOLFSSL_KEIL
22816         "sbcs	r5, r5, r6\n\t"
22817 #elif defined(__clang__)
22818         "sbcs	r5, r6\n\t"
22819 #else
22820         "sbc	r5, r6\n\t"
22821 #endif
22822         "stm	%[a]!, {r5}\n\t"
22823         "ldm	%[m]!, {r6}\n\t"
22824 #ifdef WOLFSSL_KEIL
22825         "ands	r6, r6, r7\n\t"
22826 #elif defined(__clang__)
22827         "ands	r6, r7\n\t"
22828 #else
22829         "and	r6, r7\n\t"
22830 #endif
22831         "ldr	r5, [%[a], r4]\n\t"
22832 #ifdef WOLFSSL_KEIL
22833         "sbcs	r5, r5, r6\n\t"
22834 #elif defined(__clang__)
22835         "sbcs	r5, r6\n\t"
22836 #else
22837         "sbc	r5, r6\n\t"
22838 #endif
22839         "stm	%[a]!, {r5}\n\t"
22840         "ldm	%[m]!, {r6}\n\t"
22841 #ifdef WOLFSSL_KEIL
22842         "ands	r6, r6, r7\n\t"
22843 #elif defined(__clang__)
22844         "ands	r6, r7\n\t"
22845 #else
22846         "and	r6, r7\n\t"
22847 #endif
22848         "ldr	r5, [%[a], r4]\n\t"
22849 #ifdef WOLFSSL_KEIL
22850         "sbcs	r5, r5, r6\n\t"
22851 #elif defined(__clang__)
22852         "sbcs	r5, r6\n\t"
22853 #else
22854         "sbc	r5, r6\n\t"
22855 #endif
22856         "stm	%[a]!, {r5}\n\t"
22857         "ldm	%[m]!, {r6}\n\t"
22858 #ifdef WOLFSSL_KEIL
22859         "ands	r6, r6, r7\n\t"
22860 #elif defined(__clang__)
22861         "ands	r6, r7\n\t"
22862 #else
22863         "and	r6, r7\n\t"
22864 #endif
22865         "ldr	r5, [%[a], r4]\n\t"
22866 #ifdef WOLFSSL_KEIL
22867         "sbcs	r5, r5, r6\n\t"
22868 #elif defined(__clang__)
22869         "sbcs	r5, r6\n\t"
22870 #else
22871         "sbc	r5, r6\n\t"
22872 #endif
22873         "stm	%[a]!, {r5}\n\t"
22874         "ldm	%[m]!, {r6}\n\t"
22875 #ifdef WOLFSSL_KEIL
22876         "ands	r6, r6, r7\n\t"
22877 #elif defined(__clang__)
22878         "ands	r6, r7\n\t"
22879 #else
22880         "and	r6, r7\n\t"
22881 #endif
22882         "ldr	r5, [%[a], r4]\n\t"
22883 #ifdef WOLFSSL_KEIL
22884         "sbcs	r5, r5, r6\n\t"
22885 #elif defined(__clang__)
22886         "sbcs	r5, r6\n\t"
22887 #else
22888         "sbc	r5, r6\n\t"
22889 #endif
22890         "stm	%[a]!, {r5}\n\t"
22891 #endif /* WOLFSSL_SP_LARGE_CODE */
22892         : [a] "+r" (a), [m] "+r" (m), [mp] "+r" (mp)
22893         :
22894         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "lr"
22895     );
22896 }
22897 
22898 /* Multiply two Montgomery form numbers mod the modulus (prime).
22899  * (r = a * b mod m)
22900  *
22901  * r   Result of multiplication.
22902  * a   First number to multiply in Montgomery form.
22903  * b   Second number to multiply in Montgomery form.
22904  * m   Modulus (prime).
22905  * mp  Montgomery mulitplier.
22906  */
sp_2048_mont_mul_32(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)22907 static void sp_2048_mont_mul_32(sp_digit* r, const sp_digit* a,
22908         const sp_digit* b, const sp_digit* m, sp_digit mp)
22909 {
22910     sp_2048_mul_32(r, a, b);
22911     sp_2048_mont_reduce_32(r, m, mp);
22912 }
22913 
22914 /* Square the Montgomery form number. (r = a * a mod m)
22915  *
22916  * r   Result of squaring.
22917  * a   Number to square in Montgomery form.
22918  * m   Modulus (prime).
22919  * mp  Montgomery mulitplier.
22920  */
sp_2048_mont_sqr_32(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)22921 static void sp_2048_mont_sqr_32(sp_digit* r, const sp_digit* a,
22922         const sp_digit* m, sp_digit mp)
22923 {
22924     sp_2048_sqr_32(r, a);
22925     sp_2048_mont_reduce_32(r, m, mp);
22926 }
22927 
22928 /* Mul a by digit b into r. (r = a * b)
22929  *
22930  * r  A single precision integer.
22931  * a  A single precision integer.
22932  * b  A single precision digit.
22933  */
sp_2048_mul_d_32(sp_digit * r,const sp_digit * a,sp_digit b)22934 SP_NOINLINE static void sp_2048_mul_d_32(sp_digit* r, const sp_digit* a,
22935         sp_digit b)
22936 {
22937     __asm__ __volatile__ (
22938         "movs	r6, #0x80\n\t"
22939 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22940         "adds	r6, r6, %[a]\n\t"
22941 #else
22942         "add	r6, r6, %[a]\n\t"
22943 #endif
22944         "mov	r8, %[r]\n\t"
22945         "mov	r9, r6\n\t"
22946         "movs	r3, #0\n\t"
22947         "movs	r4, #0\n\t"
22948         "\n"
22949     "L_sp_2048_mul_d_32_%=:\n\t"
22950         "movs	%[r], #0\n\t"
22951         "movs	r5, #0\n\t"
22952         "# A[] * B\n\t"
22953         "ldrh	r6, [%[a]]\n\t"
22954         "uxth	r7, %[b]\n\t"
22955 #ifdef WOLFSSL_KEIL
22956         "muls	r7, r6, r7\n\t"
22957 #elif defined(__clang__)
22958         "muls	r7, r6\n\t"
22959 #else
22960         "mul	r7, r6\n\t"
22961 #endif
22962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22963         "adds	r3, r3, r7\n\t"
22964 #else
22965         "add	r3, r3, r7\n\t"
22966 #endif
22967 #ifdef WOLFSSL_KEIL
22968         "adcs	r4, r4, %[r]\n\t"
22969 #elif defined(__clang__)
22970         "adcs	r4, %[r]\n\t"
22971 #else
22972         "adc	r4, %[r]\n\t"
22973 #endif
22974 #ifdef WOLFSSL_KEIL
22975         "adcs	r5, r5, %[r]\n\t"
22976 #elif defined(__clang__)
22977         "adcs	r5, %[r]\n\t"
22978 #else
22979         "adc	r5, %[r]\n\t"
22980 #endif
22981 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22982         "lsrs	r7, %[b], #16\n\t"
22983 #else
22984         "lsr	r7, %[b], #16\n\t"
22985 #endif
22986 #ifdef WOLFSSL_KEIL
22987         "muls	r6, r7, r6\n\t"
22988 #elif defined(__clang__)
22989         "muls	r6, r7\n\t"
22990 #else
22991         "mul	r6, r7\n\t"
22992 #endif
22993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22994         "lsrs	r7, r6, #16\n\t"
22995 #else
22996         "lsr	r7, r6, #16\n\t"
22997 #endif
22998 #if defined(__clang__) || defined(WOLFSSL_KEIL)
22999         "lsls	r6, r6, #16\n\t"
23000 #else
23001         "lsl	r6, r6, #16\n\t"
23002 #endif
23003 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23004         "adds	r3, r3, r6\n\t"
23005 #else
23006         "add	r3, r3, r6\n\t"
23007 #endif
23008 #ifdef WOLFSSL_KEIL
23009         "adcs	r4, r4, r7\n\t"
23010 #elif defined(__clang__)
23011         "adcs	r4, r7\n\t"
23012 #else
23013         "adc	r4, r7\n\t"
23014 #endif
23015 #ifdef WOLFSSL_KEIL
23016         "adcs	r5, r5, %[r]\n\t"
23017 #elif defined(__clang__)
23018         "adcs	r5, %[r]\n\t"
23019 #else
23020         "adc	r5, %[r]\n\t"
23021 #endif
23022         "ldr	r6, [%[a]]\n\t"
23023 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23024         "lsrs	r6, r6, #16\n\t"
23025 #else
23026         "lsr	r6, r6, #16\n\t"
23027 #endif
23028 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23029         "lsrs	r7, %[b], #16\n\t"
23030 #else
23031         "lsr	r7, %[b], #16\n\t"
23032 #endif
23033 #ifdef WOLFSSL_KEIL
23034         "muls	r7, r6, r7\n\t"
23035 #elif defined(__clang__)
23036         "muls	r7, r6\n\t"
23037 #else
23038         "mul	r7, r6\n\t"
23039 #endif
23040 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23041         "adds	r4, r4, r7\n\t"
23042 #else
23043         "add	r4, r4, r7\n\t"
23044 #endif
23045 #ifdef WOLFSSL_KEIL
23046         "adcs	r5, r5, %[r]\n\t"
23047 #elif defined(__clang__)
23048         "adcs	r5, %[r]\n\t"
23049 #else
23050         "adc	r5, %[r]\n\t"
23051 #endif
23052         "uxth	r7, %[b]\n\t"
23053 #ifdef WOLFSSL_KEIL
23054         "muls	r6, r7, r6\n\t"
23055 #elif defined(__clang__)
23056         "muls	r6, r7\n\t"
23057 #else
23058         "mul	r6, r7\n\t"
23059 #endif
23060 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23061         "lsrs	r7, r6, #16\n\t"
23062 #else
23063         "lsr	r7, r6, #16\n\t"
23064 #endif
23065 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23066         "lsls	r6, r6, #16\n\t"
23067 #else
23068         "lsl	r6, r6, #16\n\t"
23069 #endif
23070 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23071         "adds	r3, r3, r6\n\t"
23072 #else
23073         "add	r3, r3, r6\n\t"
23074 #endif
23075 #ifdef WOLFSSL_KEIL
23076         "adcs	r4, r4, r7\n\t"
23077 #elif defined(__clang__)
23078         "adcs	r4, r7\n\t"
23079 #else
23080         "adc	r4, r7\n\t"
23081 #endif
23082 #ifdef WOLFSSL_KEIL
23083         "adcs	r5, r5, %[r]\n\t"
23084 #elif defined(__clang__)
23085         "adcs	r5, %[r]\n\t"
23086 #else
23087         "adc	r5, %[r]\n\t"
23088 #endif
23089         "# A[] * B - Done\n\t"
23090         "mov	%[r], r8\n\t"
23091         "str	r3, [%[r]]\n\t"
23092         "movs	r3, r4\n\t"
23093         "movs	r4, r5\n\t"
23094 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23095         "adds	%[r], %[r], #4\n\t"
23096 #else
23097         "add	%[r], %[r], #4\n\t"
23098 #endif
23099 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23100         "adds	%[a], %[a], #4\n\t"
23101 #else
23102         "add	%[a], %[a], #4\n\t"
23103 #endif
23104         "mov	r8, %[r]\n\t"
23105         "cmp	%[a], r9\n\t"
23106         "blt	L_sp_2048_mul_d_32_%=\n\t"
23107         "str	r3, [%[r]]\n\t"
23108         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
23109         :
23110         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
23111     );
23112 }
23113 
23114 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
23115  *
23116  * d1   The high order half of the number to divide.
23117  * d0   The low order half of the number to divide.
23118  * div  The dividend.
23119  * returns the result of the division.
23120  *
23121  * Note that this is an approximate div. It may give an answer 1 larger.
23122  */
div_2048_word_32(sp_digit d1,sp_digit d0,sp_digit div)23123 SP_NOINLINE static sp_digit div_2048_word_32(sp_digit d1, sp_digit d0,
23124         sp_digit div)
23125 {
23126     __asm__ __volatile__ (
23127         "movs	r3, #0\n\t"
23128 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23129         "lsrs	r5, %[div], #1\n\t"
23130 #else
23131         "lsr	r5, %[div], #1\n\t"
23132 #endif
23133 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23134         "adds	r5, r5, #1\n\t"
23135 #else
23136         "add	r5, r5, #1\n\t"
23137 #endif
23138         "mov	r8, %[d0]\n\t"
23139         "mov	r9, %[d1]\n\t"
23140         "# Do top 32\n\t"
23141         "movs	r6, r5\n\t"
23142 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23143         "subs	r6, r6, %[d1]\n\t"
23144 #else
23145         "sub	r6, r6, %[d1]\n\t"
23146 #endif
23147 #ifdef WOLFSSL_KEIL
23148         "sbcs	r6, r6, r6\n\t"
23149 #elif defined(__clang__)
23150         "sbcs	r6, r6\n\t"
23151 #else
23152         "sbc	r6, r6\n\t"
23153 #endif
23154 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23155         "adds	r3, r3, r3\n\t"
23156 #else
23157         "add	r3, r3, r3\n\t"
23158 #endif
23159 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23160         "subs	r3, r3, r6\n\t"
23161 #else
23162         "sub	r3, r3, r6\n\t"
23163 #endif
23164 #ifdef WOLFSSL_KEIL
23165         "ands	r6, r6, r5\n\t"
23166 #elif defined(__clang__)
23167         "ands	r6, r5\n\t"
23168 #else
23169         "and	r6, r5\n\t"
23170 #endif
23171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23172         "subs	%[d1], %[d1], r6\n\t"
23173 #else
23174         "sub	%[d1], %[d1], r6\n\t"
23175 #endif
23176         "movs	r4, #29\n\t"
23177         "\n"
23178     "L_div_2048_word_32_loop_%=:\n\t"
23179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23180         "lsls	%[d0], %[d0], #1\n\t"
23181 #else
23182         "lsl	%[d0], %[d0], #1\n\t"
23183 #endif
23184 #ifdef WOLFSSL_KEIL
23185         "adcs	%[d1], %[d1], %[d1]\n\t"
23186 #elif defined(__clang__)
23187         "adcs	%[d1], %[d1]\n\t"
23188 #else
23189         "adc	%[d1], %[d1]\n\t"
23190 #endif
23191         "movs	r6, r5\n\t"
23192 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23193         "subs	r6, r6, %[d1]\n\t"
23194 #else
23195         "sub	r6, r6, %[d1]\n\t"
23196 #endif
23197 #ifdef WOLFSSL_KEIL
23198         "sbcs	r6, r6, r6\n\t"
23199 #elif defined(__clang__)
23200         "sbcs	r6, r6\n\t"
23201 #else
23202         "sbc	r6, r6\n\t"
23203 #endif
23204 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23205         "adds	r3, r3, r3\n\t"
23206 #else
23207         "add	r3, r3, r3\n\t"
23208 #endif
23209 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23210         "subs	r3, r3, r6\n\t"
23211 #else
23212         "sub	r3, r3, r6\n\t"
23213 #endif
23214 #ifdef WOLFSSL_KEIL
23215         "ands	r6, r6, r5\n\t"
23216 #elif defined(__clang__)
23217         "ands	r6, r5\n\t"
23218 #else
23219         "and	r6, r5\n\t"
23220 #endif
23221 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23222         "subs	%[d1], %[d1], r6\n\t"
23223 #else
23224         "sub	%[d1], %[d1], r6\n\t"
23225 #endif
23226 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23227         "subs	r4, r4, #1\n\t"
23228 #else
23229         "sub	r4, r4, #1\n\t"
23230 #endif
23231         "bpl	L_div_2048_word_32_loop_%=\n\t"
23232         "movs	r7, #0\n\t"
23233 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23234         "adds	r3, r3, r3\n\t"
23235 #else
23236         "add	r3, r3, r3\n\t"
23237 #endif
23238 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23239         "adds	r3, r3, #1\n\t"
23240 #else
23241         "add	r3, r3, #1\n\t"
23242 #endif
23243         "# r * div - Start\n\t"
23244         "uxth	%[d1], r3\n\t"
23245         "uxth	r4, %[div]\n\t"
23246 #ifdef WOLFSSL_KEIL
23247         "muls	r4, %[d1], r4\n\t"
23248 #elif defined(__clang__)
23249         "muls	r4, %[d1]\n\t"
23250 #else
23251         "mul	r4, %[d1]\n\t"
23252 #endif
23253 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23254         "lsrs	r6, %[div], #16\n\t"
23255 #else
23256         "lsr	r6, %[div], #16\n\t"
23257 #endif
23258 #ifdef WOLFSSL_KEIL
23259         "muls	%[d1], r6, %[d1]\n\t"
23260 #elif defined(__clang__)
23261         "muls	%[d1], r6\n\t"
23262 #else
23263         "mul	%[d1], r6\n\t"
23264 #endif
23265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23266         "lsrs	r5, %[d1], #16\n\t"
23267 #else
23268         "lsr	r5, %[d1], #16\n\t"
23269 #endif
23270 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23271         "lsls	%[d1], %[d1], #16\n\t"
23272 #else
23273         "lsl	%[d1], %[d1], #16\n\t"
23274 #endif
23275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23276         "adds	r4, r4, %[d1]\n\t"
23277 #else
23278         "add	r4, r4, %[d1]\n\t"
23279 #endif
23280 #ifdef WOLFSSL_KEIL
23281         "adcs	r5, r5, r7\n\t"
23282 #elif defined(__clang__)
23283         "adcs	r5, r7\n\t"
23284 #else
23285         "adc	r5, r7\n\t"
23286 #endif
23287 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23288         "lsrs	%[d1], r3, #16\n\t"
23289 #else
23290         "lsr	%[d1], r3, #16\n\t"
23291 #endif
23292 #ifdef WOLFSSL_KEIL
23293         "muls	r6, %[d1], r6\n\t"
23294 #elif defined(__clang__)
23295         "muls	r6, %[d1]\n\t"
23296 #else
23297         "mul	r6, %[d1]\n\t"
23298 #endif
23299 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23300         "adds	r5, r5, r6\n\t"
23301 #else
23302         "add	r5, r5, r6\n\t"
23303 #endif
23304         "uxth	r6, %[div]\n\t"
23305 #ifdef WOLFSSL_KEIL
23306         "muls	%[d1], r6, %[d1]\n\t"
23307 #elif defined(__clang__)
23308         "muls	%[d1], r6\n\t"
23309 #else
23310         "mul	%[d1], r6\n\t"
23311 #endif
23312 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23313         "lsrs	r6, %[d1], #16\n\t"
23314 #else
23315         "lsr	r6, %[d1], #16\n\t"
23316 #endif
23317 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23318         "lsls	%[d1], %[d1], #16\n\t"
23319 #else
23320         "lsl	%[d1], %[d1], #16\n\t"
23321 #endif
23322 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23323         "adds	r4, r4, %[d1]\n\t"
23324 #else
23325         "add	r4, r4, %[d1]\n\t"
23326 #endif
23327 #ifdef WOLFSSL_KEIL
23328         "adcs	r5, r5, r6\n\t"
23329 #elif defined(__clang__)
23330         "adcs	r5, r6\n\t"
23331 #else
23332         "adc	r5, r6\n\t"
23333 #endif
23334         "# r * div - Done\n\t"
23335         "mov	%[d1], r8\n\t"
23336 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23337         "subs	%[d1], %[d1], r4\n\t"
23338 #else
23339         "sub	%[d1], %[d1], r4\n\t"
23340 #endif
23341         "movs	r4, %[d1]\n\t"
23342         "mov	%[d1], r9\n\t"
23343 #ifdef WOLFSSL_KEIL
23344         "sbcs	%[d1], %[d1], r5\n\t"
23345 #elif defined(__clang__)
23346         "sbcs	%[d1], r5\n\t"
23347 #else
23348         "sbc	%[d1], r5\n\t"
23349 #endif
23350         "movs	r5, %[d1]\n\t"
23351 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23352         "adds	r3, r3, r5\n\t"
23353 #else
23354         "add	r3, r3, r5\n\t"
23355 #endif
23356         "# r * div - Start\n\t"
23357         "uxth	%[d1], r3\n\t"
23358         "uxth	r4, %[div]\n\t"
23359 #ifdef WOLFSSL_KEIL
23360         "muls	r4, %[d1], r4\n\t"
23361 #elif defined(__clang__)
23362         "muls	r4, %[d1]\n\t"
23363 #else
23364         "mul	r4, %[d1]\n\t"
23365 #endif
23366 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23367         "lsrs	r6, %[div], #16\n\t"
23368 #else
23369         "lsr	r6, %[div], #16\n\t"
23370 #endif
23371 #ifdef WOLFSSL_KEIL
23372         "muls	%[d1], r6, %[d1]\n\t"
23373 #elif defined(__clang__)
23374         "muls	%[d1], r6\n\t"
23375 #else
23376         "mul	%[d1], r6\n\t"
23377 #endif
23378 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23379         "lsrs	r5, %[d1], #16\n\t"
23380 #else
23381         "lsr	r5, %[d1], #16\n\t"
23382 #endif
23383 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23384         "lsls	%[d1], %[d1], #16\n\t"
23385 #else
23386         "lsl	%[d1], %[d1], #16\n\t"
23387 #endif
23388 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23389         "adds	r4, r4, %[d1]\n\t"
23390 #else
23391         "add	r4, r4, %[d1]\n\t"
23392 #endif
23393 #ifdef WOLFSSL_KEIL
23394         "adcs	r5, r5, r7\n\t"
23395 #elif defined(__clang__)
23396         "adcs	r5, r7\n\t"
23397 #else
23398         "adc	r5, r7\n\t"
23399 #endif
23400 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23401         "lsrs	%[d1], r3, #16\n\t"
23402 #else
23403         "lsr	%[d1], r3, #16\n\t"
23404 #endif
23405 #ifdef WOLFSSL_KEIL
23406         "muls	r6, %[d1], r6\n\t"
23407 #elif defined(__clang__)
23408         "muls	r6, %[d1]\n\t"
23409 #else
23410         "mul	r6, %[d1]\n\t"
23411 #endif
23412 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23413         "adds	r5, r5, r6\n\t"
23414 #else
23415         "add	r5, r5, r6\n\t"
23416 #endif
23417         "uxth	r6, %[div]\n\t"
23418 #ifdef WOLFSSL_KEIL
23419         "muls	%[d1], r6, %[d1]\n\t"
23420 #elif defined(__clang__)
23421         "muls	%[d1], r6\n\t"
23422 #else
23423         "mul	%[d1], r6\n\t"
23424 #endif
23425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23426         "lsrs	r6, %[d1], #16\n\t"
23427 #else
23428         "lsr	r6, %[d1], #16\n\t"
23429 #endif
23430 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23431         "lsls	%[d1], %[d1], #16\n\t"
23432 #else
23433         "lsl	%[d1], %[d1], #16\n\t"
23434 #endif
23435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23436         "adds	r4, r4, %[d1]\n\t"
23437 #else
23438         "add	r4, r4, %[d1]\n\t"
23439 #endif
23440 #ifdef WOLFSSL_KEIL
23441         "adcs	r5, r5, r6\n\t"
23442 #elif defined(__clang__)
23443         "adcs	r5, r6\n\t"
23444 #else
23445         "adc	r5, r6\n\t"
23446 #endif
23447         "# r * div - Done\n\t"
23448         "mov	%[d1], r8\n\t"
23449         "mov	r6, r9\n\t"
23450 #ifdef WOLFSSL_KEIL
23451         "subs	r4, %[d1], r4\n\t"
23452 #else
23453 #ifdef __clang__
23454         "subs	r4, %[d1], r4\n\t"
23455 #else
23456         "sub	r4, %[d1], r4\n\t"
23457 #endif
23458 #endif
23459 #ifdef WOLFSSL_KEIL
23460         "sbcs	r6, r6, r5\n\t"
23461 #elif defined(__clang__)
23462         "sbcs	r6, r5\n\t"
23463 #else
23464         "sbc	r6, r5\n\t"
23465 #endif
23466         "movs	r5, r6\n\t"
23467 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23468         "adds	r3, r3, r5\n\t"
23469 #else
23470         "add	r3, r3, r5\n\t"
23471 #endif
23472         "# r * div - Start\n\t"
23473         "uxth	%[d1], r3\n\t"
23474         "uxth	r4, %[div]\n\t"
23475 #ifdef WOLFSSL_KEIL
23476         "muls	r4, %[d1], r4\n\t"
23477 #elif defined(__clang__)
23478         "muls	r4, %[d1]\n\t"
23479 #else
23480         "mul	r4, %[d1]\n\t"
23481 #endif
23482 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23483         "lsrs	r6, %[div], #16\n\t"
23484 #else
23485         "lsr	r6, %[div], #16\n\t"
23486 #endif
23487 #ifdef WOLFSSL_KEIL
23488         "muls	%[d1], r6, %[d1]\n\t"
23489 #elif defined(__clang__)
23490         "muls	%[d1], r6\n\t"
23491 #else
23492         "mul	%[d1], r6\n\t"
23493 #endif
23494 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23495         "lsrs	r5, %[d1], #16\n\t"
23496 #else
23497         "lsr	r5, %[d1], #16\n\t"
23498 #endif
23499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23500         "lsls	%[d1], %[d1], #16\n\t"
23501 #else
23502         "lsl	%[d1], %[d1], #16\n\t"
23503 #endif
23504 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23505         "adds	r4, r4, %[d1]\n\t"
23506 #else
23507         "add	r4, r4, %[d1]\n\t"
23508 #endif
23509 #ifdef WOLFSSL_KEIL
23510         "adcs	r5, r5, r7\n\t"
23511 #elif defined(__clang__)
23512         "adcs	r5, r7\n\t"
23513 #else
23514         "adc	r5, r7\n\t"
23515 #endif
23516 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23517         "lsrs	%[d1], r3, #16\n\t"
23518 #else
23519         "lsr	%[d1], r3, #16\n\t"
23520 #endif
23521 #ifdef WOLFSSL_KEIL
23522         "muls	r6, %[d1], r6\n\t"
23523 #elif defined(__clang__)
23524         "muls	r6, %[d1]\n\t"
23525 #else
23526         "mul	r6, %[d1]\n\t"
23527 #endif
23528 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23529         "adds	r5, r5, r6\n\t"
23530 #else
23531         "add	r5, r5, r6\n\t"
23532 #endif
23533         "uxth	r6, %[div]\n\t"
23534 #ifdef WOLFSSL_KEIL
23535         "muls	%[d1], r6, %[d1]\n\t"
23536 #elif defined(__clang__)
23537         "muls	%[d1], r6\n\t"
23538 #else
23539         "mul	%[d1], r6\n\t"
23540 #endif
23541 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23542         "lsrs	r6, %[d1], #16\n\t"
23543 #else
23544         "lsr	r6, %[d1], #16\n\t"
23545 #endif
23546 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23547         "lsls	%[d1], %[d1], #16\n\t"
23548 #else
23549         "lsl	%[d1], %[d1], #16\n\t"
23550 #endif
23551 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23552         "adds	r4, r4, %[d1]\n\t"
23553 #else
23554         "add	r4, r4, %[d1]\n\t"
23555 #endif
23556 #ifdef WOLFSSL_KEIL
23557         "adcs	r5, r5, r6\n\t"
23558 #elif defined(__clang__)
23559         "adcs	r5, r6\n\t"
23560 #else
23561         "adc	r5, r6\n\t"
23562 #endif
23563         "# r * div - Done\n\t"
23564         "mov	%[d1], r8\n\t"
23565         "mov	r6, r9\n\t"
23566 #ifdef WOLFSSL_KEIL
23567         "subs	r4, %[d1], r4\n\t"
23568 #else
23569 #ifdef __clang__
23570         "subs	r4, %[d1], r4\n\t"
23571 #else
23572         "sub	r4, %[d1], r4\n\t"
23573 #endif
23574 #endif
23575 #ifdef WOLFSSL_KEIL
23576         "sbcs	r6, r6, r5\n\t"
23577 #elif defined(__clang__)
23578         "sbcs	r6, r5\n\t"
23579 #else
23580         "sbc	r6, r5\n\t"
23581 #endif
23582         "movs	r5, r6\n\t"
23583 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23584         "adds	r3, r3, r5\n\t"
23585 #else
23586         "add	r3, r3, r5\n\t"
23587 #endif
23588         "movs	r6, %[div]\n\t"
23589 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23590         "subs	r6, r6, r4\n\t"
23591 #else
23592         "sub	r6, r6, r4\n\t"
23593 #endif
23594 #ifdef WOLFSSL_KEIL
23595         "sbcs	r6, r6, r6\n\t"
23596 #elif defined(__clang__)
23597         "sbcs	r6, r6\n\t"
23598 #else
23599         "sbc	r6, r6\n\t"
23600 #endif
23601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23602         "subs	r3, r3, r6\n\t"
23603 #else
23604         "sub	r3, r3, r6\n\t"
23605 #endif
23606         "movs	%[d1], r3\n\t"
23607         : [d1] "+r" (d1), [d0] "+r" (d0), [div] "+r" (div)
23608         :
23609         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
23610     );
23611     return (uint32_t)(size_t)d1;
23612 }
23613 
23614 /* Compare a with b in constant time.
23615  *
23616  * a  A single precision integer.
23617  * b  A single precision integer.
23618  * return -ve, 0 or +ve if a is less than, equal to or greater than b
23619  * respectively.
23620  */
sp_2048_cmp_32(const sp_digit * a,const sp_digit * b)23621 SP_NOINLINE static sp_int32 sp_2048_cmp_32(const sp_digit* a, const sp_digit* b)
23622 {
23623     __asm__ __volatile__ (
23624         "movs	r2, #0\n\t"
23625         "movs	r3, #0\n\t"
23626 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23627         "mvns	r3, r3\n\t"
23628 #else
23629         "mvn	r3, r3\n\t"
23630 #endif
23631         "movs	r6, #0x7c\n\t"
23632         "\n"
23633     "L_sp_2048_cmp_32_words_%=:\n\t"
23634         "ldr	r7, [%[a], r6]\n\t"
23635         "ldr	r5, [%[b], r6]\n\t"
23636 #ifdef WOLFSSL_KEIL
23637         "ands	r7, r7, r3\n\t"
23638 #elif defined(__clang__)
23639         "ands	r7, r3\n\t"
23640 #else
23641         "and	r7, r3\n\t"
23642 #endif
23643 #ifdef WOLFSSL_KEIL
23644         "ands	r5, r5, r3\n\t"
23645 #elif defined(__clang__)
23646         "ands	r5, r3\n\t"
23647 #else
23648         "and	r5, r3\n\t"
23649 #endif
23650         "movs	r4, r7\n\t"
23651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23652         "subs	r7, r7, r5\n\t"
23653 #else
23654         "sub	r7, r7, r5\n\t"
23655 #endif
23656 #ifdef WOLFSSL_KEIL
23657         "sbcs	r7, r7, r7\n\t"
23658 #elif defined(__clang__)
23659         "sbcs	r7, r7\n\t"
23660 #else
23661         "sbc	r7, r7\n\t"
23662 #endif
23663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23664         "adds	r2, r2, r7\n\t"
23665 #else
23666         "add	r2, r2, r7\n\t"
23667 #endif
23668 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23669         "mvns	r7, r7\n\t"
23670 #else
23671         "mvn	r7, r7\n\t"
23672 #endif
23673 #ifdef WOLFSSL_KEIL
23674         "ands	r3, r3, r7\n\t"
23675 #elif defined(__clang__)
23676         "ands	r3, r7\n\t"
23677 #else
23678         "and	r3, r7\n\t"
23679 #endif
23680 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23681         "subs	r5, r5, r4\n\t"
23682 #else
23683         "sub	r5, r5, r4\n\t"
23684 #endif
23685 #ifdef WOLFSSL_KEIL
23686         "sbcs	r7, r7, r7\n\t"
23687 #elif defined(__clang__)
23688         "sbcs	r7, r7\n\t"
23689 #else
23690         "sbc	r7, r7\n\t"
23691 #endif
23692 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23693         "subs	r2, r2, r7\n\t"
23694 #else
23695         "sub	r2, r2, r7\n\t"
23696 #endif
23697 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23698         "mvns	r7, r7\n\t"
23699 #else
23700         "mvn	r7, r7\n\t"
23701 #endif
23702 #ifdef WOLFSSL_KEIL
23703         "ands	r3, r3, r7\n\t"
23704 #elif defined(__clang__)
23705         "ands	r3, r7\n\t"
23706 #else
23707         "and	r3, r7\n\t"
23708 #endif
23709 #if defined(__clang__) || defined(WOLFSSL_KEIL)
23710         "subs	r6, r6, #4\n\t"
23711 #else
23712         "sub	r6, r6, #4\n\t"
23713 #endif
23714         "cmp	r6, #0\n\t"
23715         "bge	L_sp_2048_cmp_32_words_%=\n\t"
23716         "movs	%[a], r2\n\t"
23717         : [a] "+r" (a), [b] "+r" (b)
23718         :
23719         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
23720     );
23721     return (uint32_t)(size_t)a;
23722 }
23723 
23724 /* Divide d in a and put remainder into r (m*d + r = a)
23725  * m is not calculated as it is not needed at this time.
23726  *
23727  * a  Number to be divided.
23728  * d  Number to divide with.
23729  * m  Multiplier result.
23730  * r  Remainder from the division.
23731  * returns MP_OKAY indicating success.
23732  */
sp_2048_div_32(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)23733 static WC_INLINE int sp_2048_div_32(const sp_digit* a, const sp_digit* d, sp_digit* m,
23734         sp_digit* r)
23735 {
23736     sp_digit t1[64], t2[33];
23737     sp_digit div, r1;
23738     int i;
23739 
23740     (void)m;
23741 
23742     div = d[31];
23743     XMEMCPY(t1, a, sizeof(*t1) * 2 * 32);
23744     for (i=31; i>=0; i--) {
23745         sp_digit hi = t1[32 + i] - (t1[32 + i] == div);
23746         r1 = div_2048_word_32(hi, t1[32 + i - 1], div);
23747 
23748         sp_2048_mul_d_32(t2, d, r1);
23749         t1[32 + i] += sp_2048_sub_in_place_32(&t1[i], t2);
23750         t1[32 + i] -= t2[32];
23751         sp_2048_mask_32(t2, d, t1[32 + i]);
23752         t1[32 + i] += sp_2048_add_32(&t1[i], &t1[i], t2);
23753         sp_2048_mask_32(t2, d, t1[32 + i]);
23754         t1[32 + i] += sp_2048_add_32(&t1[i], &t1[i], t2);
23755     }
23756 
23757     r1 = sp_2048_cmp_32(t1, d) >= 0;
23758     sp_2048_cond_sub_32(r, t1, d, (sp_digit)0 - r1);
23759 
23760     return MP_OKAY;
23761 }
23762 
23763 /* Reduce a modulo m into r. (r = a mod m)
23764  *
23765  * r  A single precision number that is the reduced result.
23766  * a  A single precision number that is to be reduced.
23767  * m  A single precision number that is the modulus to reduce with.
23768  * returns MP_OKAY indicating success.
23769  */
sp_2048_mod_32(sp_digit * r,const sp_digit * a,const sp_digit * m)23770 static WC_INLINE int sp_2048_mod_32(sp_digit* r, const sp_digit* a, const sp_digit* m)
23771 {
23772     return sp_2048_div_32(a, m, NULL, r);
23773 }
23774 
23775 #ifdef WOLFSSL_SP_SMALL
23776 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
23777  *
23778  * r     A single precision number that is the result of the operation.
23779  * a     A single precision number being exponentiated.
23780  * e     A single precision number that is the exponent.
23781  * bits  The number of bits in the exponent.
23782  * m     A single precision number that is the modulus.
23783  * returns  0 on success.
23784  * returns  MEMORY_E on dynamic memory allocation failure.
23785  * returns  MP_VAL when base is even or exponent is 0.
23786  */
sp_2048_mod_exp_32(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)23787 static int sp_2048_mod_exp_32(sp_digit* r, const sp_digit* a, const sp_digit* e,
23788         int bits, const sp_digit* m, int reduceA)
23789 {
23790 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23791     sp_digit* td = NULL;
23792 #else
23793     sp_digit td[16 * 64];
23794 #endif
23795     sp_digit* t[16];
23796     sp_digit* norm = NULL;
23797     sp_digit mp = 1;
23798     sp_digit n;
23799     sp_digit mask;
23800     int i;
23801     int c;
23802     byte y;
23803     int err = MP_OKAY;
23804 
23805     if ((m[0] & 1) == 0) {
23806         err = MP_VAL;
23807     }
23808     else if (bits == 0) {
23809         err = MP_VAL;
23810     }
23811 
23812 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23813     if (err == MP_OKAY) {
23814         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (16 * 64), NULL,
23815                                 DYNAMIC_TYPE_TMP_BUFFER);
23816         if (td == NULL)
23817             err = MEMORY_E;
23818     }
23819 #endif
23820 
23821     if (err == MP_OKAY) {
23822         norm = td;
23823         for (i=0; i<16; i++) {
23824             t[i] = td + i * 64;
23825         }
23826 
23827         sp_2048_mont_setup(m, &mp);
23828         sp_2048_mont_norm_32(norm, m);
23829 
23830         XMEMSET(t[1], 0, sizeof(sp_digit) * 32U);
23831         if (reduceA != 0) {
23832             err = sp_2048_mod_32(t[1] + 32, a, m);
23833             if (err == MP_OKAY) {
23834                 err = sp_2048_mod_32(t[1], t[1], m);
23835             }
23836         }
23837         else {
23838             XMEMCPY(t[1] + 32, a, sizeof(sp_digit) * 32);
23839             err = sp_2048_mod_32(t[1], t[1], m);
23840         }
23841     }
23842 
23843     if (err == MP_OKAY) {
23844         sp_2048_mont_sqr_32(t[ 2], t[ 1], m, mp);
23845         sp_2048_mont_mul_32(t[ 3], t[ 2], t[ 1], m, mp);
23846         sp_2048_mont_sqr_32(t[ 4], t[ 2], m, mp);
23847         sp_2048_mont_mul_32(t[ 5], t[ 3], t[ 2], m, mp);
23848         sp_2048_mont_sqr_32(t[ 6], t[ 3], m, mp);
23849         sp_2048_mont_mul_32(t[ 7], t[ 4], t[ 3], m, mp);
23850         sp_2048_mont_sqr_32(t[ 8], t[ 4], m, mp);
23851         sp_2048_mont_mul_32(t[ 9], t[ 5], t[ 4], m, mp);
23852         sp_2048_mont_sqr_32(t[10], t[ 5], m, mp);
23853         sp_2048_mont_mul_32(t[11], t[ 6], t[ 5], m, mp);
23854         sp_2048_mont_sqr_32(t[12], t[ 6], m, mp);
23855         sp_2048_mont_mul_32(t[13], t[ 7], t[ 6], m, mp);
23856         sp_2048_mont_sqr_32(t[14], t[ 7], m, mp);
23857         sp_2048_mont_mul_32(t[15], t[ 8], t[ 7], m, mp);
23858 
23859         i = (bits - 1) / 32;
23860         n = e[i--];
23861         c = bits & 31;
23862         if (c == 0) {
23863             c = 32;
23864         }
23865         c -= bits % 4;
23866         if (c == 32) {
23867             c = 28;
23868         }
23869         if (c < 0) {
23870             /* Number of bits in top word is less than number needed. */
23871             c = -c;
23872             y = (byte)(n << c);
23873             n = e[i--];
23874             y |= (byte)(n >> (64 - c));
23875             n <<= c;
23876             c = 64 - c;
23877         }
23878         else {
23879             y = (byte)(n >> c);
23880             n <<= 32 - c;
23881         }
23882         XMEMCPY(r, t[y], sizeof(sp_digit) * 32);
23883         for (; i>=0 || c>=4; ) {
23884             if (c == 0) {
23885                 n = e[i--];
23886                 y = (byte)(n >> 28);
23887                 n <<= 4;
23888                 c = 28;
23889             }
23890             else if (c < 4) {
23891                 y = (byte)(n >> 28);
23892                 n = e[i--];
23893                 c = 4 - c;
23894                 y |= (byte)(n >> (32 - c));
23895                 n <<= c;
23896                 c = 32 - c;
23897             }
23898             else {
23899                 y = (byte)((n >> 28) & 0xf);
23900                 n <<= 4;
23901                 c -= 4;
23902             }
23903 
23904             sp_2048_mont_sqr_32(r, r, m, mp);
23905             sp_2048_mont_sqr_32(r, r, m, mp);
23906             sp_2048_mont_sqr_32(r, r, m, mp);
23907             sp_2048_mont_sqr_32(r, r, m, mp);
23908 
23909             sp_2048_mont_mul_32(r, r, t[y], m, mp);
23910         }
23911 
23912         XMEMSET(&r[32], 0, sizeof(sp_digit) * 32U);
23913         sp_2048_mont_reduce_32(r, m, mp);
23914 
23915         mask = 0 - (sp_2048_cmp_32(r, m) >= 0);
23916         sp_2048_cond_sub_32(r, r, m, mask);
23917     }
23918 
23919 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23920     if (td != NULL)
23921         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
23922 #endif
23923 
23924     return err;
23925 }
23926 #else
23927 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
23928  *
23929  * r     A single precision number that is the result of the operation.
23930  * a     A single precision number being exponentiated.
23931  * e     A single precision number that is the exponent.
23932  * bits  The number of bits in the exponent.
23933  * m     A single precision number that is the modulus.
23934  * returns  0 on success.
23935  * returns  MEMORY_E on dynamic memory allocation failure.
23936  * returns  MP_VAL when base is even or exponent is 0.
23937  */
sp_2048_mod_exp_32(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)23938 static int sp_2048_mod_exp_32(sp_digit* r, const sp_digit* a, const sp_digit* e,
23939         int bits, const sp_digit* m, int reduceA)
23940 {
23941 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23942     sp_digit* td = NULL;
23943 #else
23944     sp_digit td[32 * 64];
23945 #endif
23946     sp_digit* t[32];
23947     sp_digit* norm = NULL;
23948     sp_digit mp = 1;
23949     sp_digit n;
23950     sp_digit mask;
23951     int i;
23952     int c;
23953     byte y;
23954     int err = MP_OKAY;
23955 
23956     if ((m[0] & 1) == 0) {
23957         err = MP_VAL;
23958     }
23959     else if (bits == 0) {
23960         err = MP_VAL;
23961     }
23962 
23963 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23964     if (err == MP_OKAY) {
23965         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (32 * 64), NULL,
23966                                 DYNAMIC_TYPE_TMP_BUFFER);
23967         if (td == NULL)
23968             err = MEMORY_E;
23969     }
23970 #endif
23971 
23972     if (err == MP_OKAY) {
23973         norm = td;
23974         for (i=0; i<32; i++) {
23975             t[i] = td + i * 64;
23976         }
23977 
23978         sp_2048_mont_setup(m, &mp);
23979         sp_2048_mont_norm_32(norm, m);
23980 
23981         XMEMSET(t[1], 0, sizeof(sp_digit) * 32U);
23982         if (reduceA != 0) {
23983             err = sp_2048_mod_32(t[1] + 32, a, m);
23984             if (err == MP_OKAY) {
23985                 err = sp_2048_mod_32(t[1], t[1], m);
23986             }
23987         }
23988         else {
23989             XMEMCPY(t[1] + 32, a, sizeof(sp_digit) * 32);
23990             err = sp_2048_mod_32(t[1], t[1], m);
23991         }
23992     }
23993 
23994     if (err == MP_OKAY) {
23995         sp_2048_mont_sqr_32(t[ 2], t[ 1], m, mp);
23996         sp_2048_mont_mul_32(t[ 3], t[ 2], t[ 1], m, mp);
23997         sp_2048_mont_sqr_32(t[ 4], t[ 2], m, mp);
23998         sp_2048_mont_mul_32(t[ 5], t[ 3], t[ 2], m, mp);
23999         sp_2048_mont_sqr_32(t[ 6], t[ 3], m, mp);
24000         sp_2048_mont_mul_32(t[ 7], t[ 4], t[ 3], m, mp);
24001         sp_2048_mont_sqr_32(t[ 8], t[ 4], m, mp);
24002         sp_2048_mont_mul_32(t[ 9], t[ 5], t[ 4], m, mp);
24003         sp_2048_mont_sqr_32(t[10], t[ 5], m, mp);
24004         sp_2048_mont_mul_32(t[11], t[ 6], t[ 5], m, mp);
24005         sp_2048_mont_sqr_32(t[12], t[ 6], m, mp);
24006         sp_2048_mont_mul_32(t[13], t[ 7], t[ 6], m, mp);
24007         sp_2048_mont_sqr_32(t[14], t[ 7], m, mp);
24008         sp_2048_mont_mul_32(t[15], t[ 8], t[ 7], m, mp);
24009         sp_2048_mont_sqr_32(t[16], t[ 8], m, mp);
24010         sp_2048_mont_mul_32(t[17], t[ 9], t[ 8], m, mp);
24011         sp_2048_mont_sqr_32(t[18], t[ 9], m, mp);
24012         sp_2048_mont_mul_32(t[19], t[10], t[ 9], m, mp);
24013         sp_2048_mont_sqr_32(t[20], t[10], m, mp);
24014         sp_2048_mont_mul_32(t[21], t[11], t[10], m, mp);
24015         sp_2048_mont_sqr_32(t[22], t[11], m, mp);
24016         sp_2048_mont_mul_32(t[23], t[12], t[11], m, mp);
24017         sp_2048_mont_sqr_32(t[24], t[12], m, mp);
24018         sp_2048_mont_mul_32(t[25], t[13], t[12], m, mp);
24019         sp_2048_mont_sqr_32(t[26], t[13], m, mp);
24020         sp_2048_mont_mul_32(t[27], t[14], t[13], m, mp);
24021         sp_2048_mont_sqr_32(t[28], t[14], m, mp);
24022         sp_2048_mont_mul_32(t[29], t[15], t[14], m, mp);
24023         sp_2048_mont_sqr_32(t[30], t[15], m, mp);
24024         sp_2048_mont_mul_32(t[31], t[16], t[15], m, mp);
24025 
24026         i = (bits - 1) / 32;
24027         n = e[i--];
24028         c = bits & 31;
24029         if (c == 0) {
24030             c = 32;
24031         }
24032         c -= bits % 5;
24033         if (c == 32) {
24034             c = 27;
24035         }
24036         if (c < 0) {
24037             /* Number of bits in top word is less than number needed. */
24038             c = -c;
24039             y = (byte)(n << c);
24040             n = e[i--];
24041             y |= (byte)(n >> (64 - c));
24042             n <<= c;
24043             c = 64 - c;
24044         }
24045         else {
24046             y = (byte)(n >> c);
24047             n <<= 32 - c;
24048         }
24049         XMEMCPY(r, t[y], sizeof(sp_digit) * 32);
24050         for (; i>=0 || c>=5; ) {
24051             if (c == 0) {
24052                 n = e[i--];
24053                 y = (byte)(n >> 27);
24054                 n <<= 5;
24055                 c = 27;
24056             }
24057             else if (c < 5) {
24058                 y = (byte)(n >> 27);
24059                 n = e[i--];
24060                 c = 5 - c;
24061                 y |= (byte)(n >> (32 - c));
24062                 n <<= c;
24063                 c = 32 - c;
24064             }
24065             else {
24066                 y = (byte)((n >> 27) & 0x1f);
24067                 n <<= 5;
24068                 c -= 5;
24069             }
24070 
24071             sp_2048_mont_sqr_32(r, r, m, mp);
24072             sp_2048_mont_sqr_32(r, r, m, mp);
24073             sp_2048_mont_sqr_32(r, r, m, mp);
24074             sp_2048_mont_sqr_32(r, r, m, mp);
24075             sp_2048_mont_sqr_32(r, r, m, mp);
24076 
24077             sp_2048_mont_mul_32(r, r, t[y], m, mp);
24078         }
24079 
24080         XMEMSET(&r[32], 0, sizeof(sp_digit) * 32U);
24081         sp_2048_mont_reduce_32(r, m, mp);
24082 
24083         mask = 0 - (sp_2048_cmp_32(r, m) >= 0);
24084         sp_2048_cond_sub_32(r, r, m, mask);
24085     }
24086 
24087 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24088     if (td != NULL)
24089         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
24090 #endif
24091 
24092     return err;
24093 }
24094 #endif /* WOLFSSL_SP_SMALL */
24095 
24096 #endif /* (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) | WOLFSSL_HAVE_SP_DH */
24097 
24098 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
24099 /* r = 2^n mod m where n is the number of bits to reduce by.
24100  * Given m must be 2048 bits, just need to subtract.
24101  *
24102  * r  A single precision number.
24103  * m  A single precision number.
24104  */
sp_2048_mont_norm_64(sp_digit * r,const sp_digit * m)24105 static void sp_2048_mont_norm_64(sp_digit* r, const sp_digit* m)
24106 {
24107     XMEMSET(r, 0, sizeof(sp_digit) * 64);
24108 
24109     /* r = 2^n mod m */
24110     sp_2048_sub_in_place_64(r, m);
24111 }
24112 
24113 #endif /* (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) | WOLFSSL_HAVE_SP_DH */
24114 /* Conditionally subtract b from a using the mask m.
24115  * m is -1 to subtract and 0 when not copying.
24116  *
24117  * r  A single precision number representing condition subtract result.
24118  * a  A single precision number to subtract from.
24119  * b  A single precision number to subtract.
24120  * m  Mask value to apply.
24121  */
sp_2048_cond_sub_64(sp_digit * r,const sp_digit * a,const sp_digit * b,sp_digit m)24122 SP_NOINLINE static sp_digit sp_2048_cond_sub_64(sp_digit* r, const sp_digit* a,
24123         const sp_digit* b, sp_digit m)
24124 {
24125     __asm__ __volatile__ (
24126         "movs	r4, #0\n\t"
24127         "movs	r5, #0xff\n\t"
24128 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24129         "adds	r5, r5, #1\n\t"
24130 #else
24131         "add	r5, r5, #1\n\t"
24132 #endif
24133         "mov	r8, r5\n\t"
24134         "movs	r7, #0\n\t"
24135         "\n"
24136     "L_sp_2048_cond_sub_64_words_%=:\n\t"
24137         "ldr	r6, [%[b], r7]\n\t"
24138 #ifdef WOLFSSL_KEIL
24139         "ands	r6, r6, %[m]\n\t"
24140 #elif defined(__clang__)
24141         "ands	r6, %[m]\n\t"
24142 #else
24143         "and	r6, %[m]\n\t"
24144 #endif
24145         "movs	r5, #0\n\t"
24146 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24147         "subs	r5, r5, r4\n\t"
24148 #else
24149         "sub	r5, r5, r4\n\t"
24150 #endif
24151         "ldr	r5, [%[a], r7]\n\t"
24152 #ifdef WOLFSSL_KEIL
24153         "sbcs	r5, r5, r6\n\t"
24154 #elif defined(__clang__)
24155         "sbcs	r5, r6\n\t"
24156 #else
24157         "sbc	r5, r6\n\t"
24158 #endif
24159 #ifdef WOLFSSL_KEIL
24160         "sbcs	r4, r4, r4\n\t"
24161 #elif defined(__clang__)
24162         "sbcs	r4, r4\n\t"
24163 #else
24164         "sbc	r4, r4\n\t"
24165 #endif
24166         "str	r5, [%[r], r7]\n\t"
24167 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24168         "adds	r7, r7, #4\n\t"
24169 #else
24170         "add	r7, r7, #4\n\t"
24171 #endif
24172         "cmp	r7, r8\n\t"
24173         "blt	L_sp_2048_cond_sub_64_words_%=\n\t"
24174         "movs	%[r], r4\n\t"
24175         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
24176         :
24177         : "memory", "r4", "r5", "r6", "r7", "r8"
24178     );
24179     return (uint32_t)(size_t)r;
24180 }
24181 
24182 /* Reduce the number back to 2048 bits using Montgomery reduction.
24183  *
24184  * a   A single precision number to reduce in place.
24185  * m   The single precision number representing the modulus.
24186  * mp  The digit representing the negative inverse of m mod 2^n.
24187  */
sp_2048_mont_reduce_64(sp_digit * a,const sp_digit * m,sp_digit mp)24188 SP_NOINLINE static void sp_2048_mont_reduce_64(sp_digit* a, const sp_digit* m,
24189         sp_digit mp)
24190 {
24191     __asm__ __volatile__ (
24192         "movs	r7, #0\n\t"
24193         "mov	r8, %[mp]\n\t"
24194         "mov	r12, r7\n\t"
24195         "mov	lr, %[m]\n\t"
24196         "mov	r9, %[a]\n\t"
24197         "mov	r11, %[a]\n\t"
24198         "movs	r5, #0xfc\n\t"
24199         "movs	r6, #0xff\n\t"
24200 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24201         "adds	r6, r6, #1\n\t"
24202 #else
24203         "add	r6, r6, #1\n\t"
24204 #endif
24205         "add	r9, r9, r5\n\t"
24206         "add	r11, r11, r6\n\t"
24207         "\n"
24208     "L_sp_2048_mont_reduce_64_mod_%=:\n\t"
24209         "movs	r7, #0\n\t"
24210         "movs	r4, #0\n\t"
24211         "# a[i] += m[0] * mu\n\t"
24212         "ldm	%[m]!, {%[mp]}\n\t"
24213         "ldm	%[a]!, {r3}\n\t"
24214         "# mu = a[i] * mp\n\t"
24215         "mov	r5, r8\n\t"
24216 #ifdef WOLFSSL_KEIL
24217         "muls	r5, r3, r5\n\t"
24218 #elif defined(__clang__)
24219         "muls	r5, r3\n\t"
24220 #else
24221         "mul	r5, r3\n\t"
24222 #endif
24223         "mov	r10, r5\n\t"
24224         "# Multiply m[0] and mu - Start\n\t"
24225         "mov	r5, r10\n\t"
24226         "uxth	r6, %[mp]\n\t"
24227         "uxth	r5, r5\n\t"
24228 #ifdef WOLFSSL_KEIL
24229         "muls	r6, r5, r6\n\t"
24230 #elif defined(__clang__)
24231         "muls	r6, r5\n\t"
24232 #else
24233         "mul	r6, r5\n\t"
24234 #endif
24235 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24236         "adds	r3, r3, r6\n\t"
24237 #else
24238         "add	r3, r3, r6\n\t"
24239 #endif
24240 #ifdef WOLFSSL_KEIL
24241         "adcs	r4, r4, r7\n\t"
24242 #elif defined(__clang__)
24243         "adcs	r4, r7\n\t"
24244 #else
24245         "adc	r4, r7\n\t"
24246 #endif
24247 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24248         "lsrs	r6, %[mp], #16\n\t"
24249 #else
24250         "lsr	r6, %[mp], #16\n\t"
24251 #endif
24252 #ifdef WOLFSSL_KEIL
24253         "muls	r5, r6, r5\n\t"
24254 #elif defined(__clang__)
24255         "muls	r5, r6\n\t"
24256 #else
24257         "mul	r5, r6\n\t"
24258 #endif
24259 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24260         "lsrs	r6, r5, #16\n\t"
24261 #else
24262         "lsr	r6, r5, #16\n\t"
24263 #endif
24264 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24265         "lsls	r5, r5, #16\n\t"
24266 #else
24267         "lsl	r5, r5, #16\n\t"
24268 #endif
24269 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24270         "adds	r3, r3, r5\n\t"
24271 #else
24272         "add	r3, r3, r5\n\t"
24273 #endif
24274 #ifdef WOLFSSL_KEIL
24275         "adcs	r4, r4, r6\n\t"
24276 #elif defined(__clang__)
24277         "adcs	r4, r6\n\t"
24278 #else
24279         "adc	r4, r6\n\t"
24280 #endif
24281         "mov	r5, r10\n\t"
24282 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24283         "lsrs	r6, %[mp], #16\n\t"
24284 #else
24285         "lsr	r6, %[mp], #16\n\t"
24286 #endif
24287 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24288         "lsrs	r5, r5, #16\n\t"
24289 #else
24290         "lsr	r5, r5, #16\n\t"
24291 #endif
24292 #ifdef WOLFSSL_KEIL
24293         "muls	r6, r5, r6\n\t"
24294 #elif defined(__clang__)
24295         "muls	r6, r5\n\t"
24296 #else
24297         "mul	r6, r5\n\t"
24298 #endif
24299 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24300         "adds	r4, r4, r6\n\t"
24301 #else
24302         "add	r4, r4, r6\n\t"
24303 #endif
24304         "uxth	r6, %[mp]\n\t"
24305 #ifdef WOLFSSL_KEIL
24306         "muls	r5, r6, r5\n\t"
24307 #elif defined(__clang__)
24308         "muls	r5, r6\n\t"
24309 #else
24310         "mul	r5, r6\n\t"
24311 #endif
24312 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24313         "lsrs	r6, r5, #16\n\t"
24314 #else
24315         "lsr	r6, r5, #16\n\t"
24316 #endif
24317 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24318         "lsls	r5, r5, #16\n\t"
24319 #else
24320         "lsl	r5, r5, #16\n\t"
24321 #endif
24322 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24323         "adds	r3, r3, r5\n\t"
24324 #else
24325         "add	r3, r3, r5\n\t"
24326 #endif
24327 #ifdef WOLFSSL_KEIL
24328         "adcs	r4, r4, r6\n\t"
24329 #elif defined(__clang__)
24330         "adcs	r4, r6\n\t"
24331 #else
24332         "adc	r4, r6\n\t"
24333 #endif
24334         "# Multiply m[0] and mu - Done\n\t"
24335         "\n"
24336     "L_sp_2048_mont_reduce_64_word_%=:\n\t"
24337         "# a[i+j] += m[j] * mu\n\t"
24338         "ldr	r3, [%[a]]\n\t"
24339         "ldm	%[m]!, {%[mp]}\n\t"
24340 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24341         "adds	r3, r3, r4\n\t"
24342 #else
24343         "add	r3, r3, r4\n\t"
24344 #endif
24345         "movs	r4, #0\n\t"
24346 #ifdef WOLFSSL_KEIL
24347         "adcs	r4, r4, r7\n\t"
24348 #elif defined(__clang__)
24349         "adcs	r4, r7\n\t"
24350 #else
24351         "adc	r4, r7\n\t"
24352 #endif
24353         "# Multiply m[j] and mu - Start\n\t"
24354         "mov	r5, r10\n\t"
24355         "uxth	r6, %[mp]\n\t"
24356         "uxth	r5, r5\n\t"
24357 #ifdef WOLFSSL_KEIL
24358         "muls	r6, r5, r6\n\t"
24359 #elif defined(__clang__)
24360         "muls	r6, r5\n\t"
24361 #else
24362         "mul	r6, r5\n\t"
24363 #endif
24364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24365         "adds	r3, r3, r6\n\t"
24366 #else
24367         "add	r3, r3, r6\n\t"
24368 #endif
24369 #ifdef WOLFSSL_KEIL
24370         "adcs	r4, r4, r7\n\t"
24371 #elif defined(__clang__)
24372         "adcs	r4, r7\n\t"
24373 #else
24374         "adc	r4, r7\n\t"
24375 #endif
24376 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24377         "lsrs	r6, %[mp], #16\n\t"
24378 #else
24379         "lsr	r6, %[mp], #16\n\t"
24380 #endif
24381 #ifdef WOLFSSL_KEIL
24382         "muls	r5, r6, r5\n\t"
24383 #elif defined(__clang__)
24384         "muls	r5, r6\n\t"
24385 #else
24386         "mul	r5, r6\n\t"
24387 #endif
24388 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24389         "lsrs	r6, r5, #16\n\t"
24390 #else
24391         "lsr	r6, r5, #16\n\t"
24392 #endif
24393 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24394         "lsls	r5, r5, #16\n\t"
24395 #else
24396         "lsl	r5, r5, #16\n\t"
24397 #endif
24398 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24399         "adds	r3, r3, r5\n\t"
24400 #else
24401         "add	r3, r3, r5\n\t"
24402 #endif
24403 #ifdef WOLFSSL_KEIL
24404         "adcs	r4, r4, r6\n\t"
24405 #elif defined(__clang__)
24406         "adcs	r4, r6\n\t"
24407 #else
24408         "adc	r4, r6\n\t"
24409 #endif
24410         "mov	r5, r10\n\t"
24411 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24412         "lsrs	r6, %[mp], #16\n\t"
24413 #else
24414         "lsr	r6, %[mp], #16\n\t"
24415 #endif
24416 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24417         "lsrs	r5, r5, #16\n\t"
24418 #else
24419         "lsr	r5, r5, #16\n\t"
24420 #endif
24421 #ifdef WOLFSSL_KEIL
24422         "muls	r6, r5, r6\n\t"
24423 #elif defined(__clang__)
24424         "muls	r6, r5\n\t"
24425 #else
24426         "mul	r6, r5\n\t"
24427 #endif
24428 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24429         "adds	r4, r4, r6\n\t"
24430 #else
24431         "add	r4, r4, r6\n\t"
24432 #endif
24433         "uxth	r6, %[mp]\n\t"
24434 #ifdef WOLFSSL_KEIL
24435         "muls	r5, r6, r5\n\t"
24436 #elif defined(__clang__)
24437         "muls	r5, r6\n\t"
24438 #else
24439         "mul	r5, r6\n\t"
24440 #endif
24441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24442         "lsrs	r6, r5, #16\n\t"
24443 #else
24444         "lsr	r6, r5, #16\n\t"
24445 #endif
24446 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24447         "lsls	r5, r5, #16\n\t"
24448 #else
24449         "lsl	r5, r5, #16\n\t"
24450 #endif
24451 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24452         "adds	r3, r3, r5\n\t"
24453 #else
24454         "add	r3, r3, r5\n\t"
24455 #endif
24456 #ifdef WOLFSSL_KEIL
24457         "adcs	r4, r4, r6\n\t"
24458 #elif defined(__clang__)
24459         "adcs	r4, r6\n\t"
24460 #else
24461         "adc	r4, r6\n\t"
24462 #endif
24463         "# Multiply m[j] and mu - Done\n\t"
24464         "stm	%[a]!, {r3}\n\t"
24465         "cmp	%[a], r9\n\t"
24466         "blt	L_sp_2048_mont_reduce_64_word_%=\n\t"
24467         "# a[i+63] += m[63] * mu\n\t"
24468         "ldr	%[mp], [%[m]]\n\t"
24469         "mov	r3, r12\n\t"
24470         "# Multiply m[63] and mu - Start\n\t"
24471         "mov	r5, r10\n\t"
24472         "uxth	r6, %[mp]\n\t"
24473         "uxth	r5, r5\n\t"
24474 #ifdef WOLFSSL_KEIL
24475         "muls	r6, r5, r6\n\t"
24476 #elif defined(__clang__)
24477         "muls	r6, r5\n\t"
24478 #else
24479         "mul	r6, r5\n\t"
24480 #endif
24481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24482         "adds	r4, r4, r6\n\t"
24483 #else
24484         "add	r4, r4, r6\n\t"
24485 #endif
24486 #ifdef WOLFSSL_KEIL
24487         "adcs	r3, r3, r7\n\t"
24488 #elif defined(__clang__)
24489         "adcs	r3, r7\n\t"
24490 #else
24491         "adc	r3, r7\n\t"
24492 #endif
24493 #ifdef WOLFSSL_KEIL
24494         "adcs	r7, r7, r7\n\t"
24495 #elif defined(__clang__)
24496         "adcs	r7, r7\n\t"
24497 #else
24498         "adc	r7, r7\n\t"
24499 #endif
24500 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24501         "lsrs	r6, %[mp], #16\n\t"
24502 #else
24503         "lsr	r6, %[mp], #16\n\t"
24504 #endif
24505 #ifdef WOLFSSL_KEIL
24506         "muls	r5, r6, r5\n\t"
24507 #elif defined(__clang__)
24508         "muls	r5, r6\n\t"
24509 #else
24510         "mul	r5, r6\n\t"
24511 #endif
24512 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24513         "lsrs	r6, r5, #16\n\t"
24514 #else
24515         "lsr	r6, r5, #16\n\t"
24516 #endif
24517 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24518         "lsls	r5, r5, #16\n\t"
24519 #else
24520         "lsl	r5, r5, #16\n\t"
24521 #endif
24522 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24523         "adds	r4, r4, r5\n\t"
24524 #else
24525         "add	r4, r4, r5\n\t"
24526 #endif
24527 #ifdef WOLFSSL_KEIL
24528         "adcs	r3, r3, r6\n\t"
24529 #elif defined(__clang__)
24530         "adcs	r3, r6\n\t"
24531 #else
24532         "adc	r3, r6\n\t"
24533 #endif
24534 #ifdef WOLFSSL_KEIL
24535         "adcs	r7, r7, r7\n\t"
24536 #elif defined(__clang__)
24537         "adcs	r7, r7\n\t"
24538 #else
24539         "adc	r7, r7\n\t"
24540 #endif
24541         "mov	r5, r10\n\t"
24542 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24543         "lsrs	r6, %[mp], #16\n\t"
24544 #else
24545         "lsr	r6, %[mp], #16\n\t"
24546 #endif
24547 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24548         "lsrs	r5, r5, #16\n\t"
24549 #else
24550         "lsr	r5, r5, #16\n\t"
24551 #endif
24552 #ifdef WOLFSSL_KEIL
24553         "muls	r6, r5, r6\n\t"
24554 #elif defined(__clang__)
24555         "muls	r6, r5\n\t"
24556 #else
24557         "mul	r6, r5\n\t"
24558 #endif
24559 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24560         "adds	r3, r3, r6\n\t"
24561 #else
24562         "add	r3, r3, r6\n\t"
24563 #endif
24564 #ifdef WOLFSSL_KEIL
24565         "adcs	r7, r7, r7\n\t"
24566 #elif defined(__clang__)
24567         "adcs	r7, r7\n\t"
24568 #else
24569         "adc	r7, r7\n\t"
24570 #endif
24571         "uxth	r6, %[mp]\n\t"
24572 #ifdef WOLFSSL_KEIL
24573         "muls	r5, r6, r5\n\t"
24574 #elif defined(__clang__)
24575         "muls	r5, r6\n\t"
24576 #else
24577         "mul	r5, r6\n\t"
24578 #endif
24579 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24580         "lsrs	r6, r5, #16\n\t"
24581 #else
24582         "lsr	r6, r5, #16\n\t"
24583 #endif
24584 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24585         "lsls	r5, r5, #16\n\t"
24586 #else
24587         "lsl	r5, r5, #16\n\t"
24588 #endif
24589 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24590         "adds	r4, r4, r5\n\t"
24591 #else
24592         "add	r4, r4, r5\n\t"
24593 #endif
24594 #ifdef WOLFSSL_KEIL
24595         "adcs	r3, r3, r6\n\t"
24596 #elif defined(__clang__)
24597         "adcs	r3, r6\n\t"
24598 #else
24599         "adc	r3, r6\n\t"
24600 #endif
24601 #ifdef WOLFSSL_KEIL
24602         "adcs	r7, r7, r7\n\t"
24603 #elif defined(__clang__)
24604         "adcs	r7, r7\n\t"
24605 #else
24606         "adc	r7, r7\n\t"
24607 #endif
24608         "# Multiply m[63] and mu - Done\n\t"
24609         "ldr	r5, [%[a]]\n\t"
24610         "ldr	r6, [%[a], #4]\n\t"
24611         "movs	%[mp], #0\n\t"
24612 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24613         "adds	r5, r5, r4\n\t"
24614 #else
24615         "add	r5, r5, r4\n\t"
24616 #endif
24617 #ifdef WOLFSSL_KEIL
24618         "adcs	r6, r6, r3\n\t"
24619 #elif defined(__clang__)
24620         "adcs	r6, r3\n\t"
24621 #else
24622         "adc	r6, r3\n\t"
24623 #endif
24624 #ifdef WOLFSSL_KEIL
24625         "adcs	r7, r7, %[mp]\n\t"
24626 #elif defined(__clang__)
24627         "adcs	r7, %[mp]\n\t"
24628 #else
24629         "adc	r7, %[mp]\n\t"
24630 #endif
24631         "stm	%[a]!, {r5, r6}\n\t"
24632         "# i += 1\n\t"
24633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24634         "subs	%[a], %[a], #4\n\t"
24635 #else
24636         "sub	%[a], %[a], #4\n\t"
24637 #endif
24638         "movs	r3, #0xfc\n\t"
24639         "mov	r9, %[a]\n\t"
24640 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24641         "subs	%[a], %[a], r3\n\t"
24642 #else
24643         "sub	%[a], %[a], r3\n\t"
24644 #endif
24645         "mov	r12, r7\n\t"
24646         "mov	%[m], lr\n\t"
24647         "cmp	r11, %[a]\n\t"
24648         "bgt	L_sp_2048_mont_reduce_64_mod_%=\n\t"
24649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24650         "negs	r7, r7\n\t"
24651 #else
24652         "neg	r7, r7\n\t"
24653 #endif
24654         "# Subtract masked modulus\n\t"
24655         "movs	r4, #0xff\n\t"
24656 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24657         "adds	r4, r4, #1\n\t"
24658 #else
24659         "add	r4, r4, #1\n\t"
24660 #endif
24661         "movs	%[mp], #0\n\t"
24662         "movs	r3, #0\n\t"
24663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24664         "subs	%[a], %[a], r4\n\t"
24665 #else
24666         "sub	%[a], %[a], r4\n\t"
24667 #endif
24668 #ifndef WOLFSSL_SP_LARGE_CODE
24669         "\n"
24670     "L_sp_2048_mont_reduce_64_sub_mask_%=:\n\t"
24671         "ldm	%[m]!, {r6}\n\t"
24672         "movs	r5, #0\n\t"
24673 #ifdef WOLFSSL_KEIL
24674         "ands	r6, r6, r7\n\t"
24675 #elif defined(__clang__)
24676         "ands	r6, r7\n\t"
24677 #else
24678         "and	r6, r7\n\t"
24679 #endif
24680 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24681         "subs	r5, r5, %[mp]\n\t"
24682 #else
24683         "sub	r5, r5, %[mp]\n\t"
24684 #endif
24685         "ldr	r5, [%[a], r4]\n\t"
24686 #ifdef WOLFSSL_KEIL
24687         "sbcs	r5, r5, r6\n\t"
24688 #elif defined(__clang__)
24689         "sbcs	r5, r6\n\t"
24690 #else
24691         "sbc	r5, r6\n\t"
24692 #endif
24693 #ifdef WOLFSSL_KEIL
24694         "sbcs	%[mp], %[mp], %[mp]\n\t"
24695 #elif defined(__clang__)
24696         "sbcs	%[mp], %[mp]\n\t"
24697 #else
24698         "sbc	%[mp], %[mp]\n\t"
24699 #endif
24700         "stm	%[a]!, {r5}\n\t"
24701 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24702         "adds	r3, r3, #4\n\t"
24703 #else
24704         "add	r3, r3, #4\n\t"
24705 #endif
24706         "cmp	r3, r4\n\t"
24707         "blt	L_sp_2048_mont_reduce_64_sub_mask_%=\n\t"
24708 #else /* WOLFSSL_SP_LARGE_CODE */
24709         "ldm	%[m]!, {r6}\n\t"
24710 #ifdef WOLFSSL_KEIL
24711         "ands	r6, r6, r7\n\t"
24712 #elif defined(__clang__)
24713         "ands	r6, r7\n\t"
24714 #else
24715         "and	r6, r7\n\t"
24716 #endif
24717         "ldr	r5, [%[a], r4]\n\t"
24718 #if defined(__clang__) || defined(WOLFSSL_KEIL)
24719         "subs	r5, r5, r6\n\t"
24720 #else
24721         "sub	r5, r5, r6\n\t"
24722 #endif
24723         "stm	%[a]!, {r5}\n\t"
24724         "ldm	%[m]!, {r6}\n\t"
24725 #ifdef WOLFSSL_KEIL
24726         "ands	r6, r6, r7\n\t"
24727 #elif defined(__clang__)
24728         "ands	r6, r7\n\t"
24729 #else
24730         "and	r6, r7\n\t"
24731 #endif
24732         "ldr	r5, [%[a], r4]\n\t"
24733 #ifdef WOLFSSL_KEIL
24734         "sbcs	r5, r5, r6\n\t"
24735 #elif defined(__clang__)
24736         "sbcs	r5, r6\n\t"
24737 #else
24738         "sbc	r5, r6\n\t"
24739 #endif
24740         "stm	%[a]!, {r5}\n\t"
24741         "ldm	%[m]!, {r6}\n\t"
24742 #ifdef WOLFSSL_KEIL
24743         "ands	r6, r6, r7\n\t"
24744 #elif defined(__clang__)
24745         "ands	r6, r7\n\t"
24746 #else
24747         "and	r6, r7\n\t"
24748 #endif
24749         "ldr	r5, [%[a], r4]\n\t"
24750 #ifdef WOLFSSL_KEIL
24751         "sbcs	r5, r5, r6\n\t"
24752 #elif defined(__clang__)
24753         "sbcs	r5, r6\n\t"
24754 #else
24755         "sbc	r5, r6\n\t"
24756 #endif
24757         "stm	%[a]!, {r5}\n\t"
24758         "ldm	%[m]!, {r6}\n\t"
24759 #ifdef WOLFSSL_KEIL
24760         "ands	r6, r6, r7\n\t"
24761 #elif defined(__clang__)
24762         "ands	r6, r7\n\t"
24763 #else
24764         "and	r6, r7\n\t"
24765 #endif
24766         "ldr	r5, [%[a], r4]\n\t"
24767 #ifdef WOLFSSL_KEIL
24768         "sbcs	r5, r5, r6\n\t"
24769 #elif defined(__clang__)
24770         "sbcs	r5, r6\n\t"
24771 #else
24772         "sbc	r5, r6\n\t"
24773 #endif
24774         "stm	%[a]!, {r5}\n\t"
24775         "ldm	%[m]!, {r6}\n\t"
24776 #ifdef WOLFSSL_KEIL
24777         "ands	r6, r6, r7\n\t"
24778 #elif defined(__clang__)
24779         "ands	r6, r7\n\t"
24780 #else
24781         "and	r6, r7\n\t"
24782 #endif
24783         "ldr	r5, [%[a], r4]\n\t"
24784 #ifdef WOLFSSL_KEIL
24785         "sbcs	r5, r5, r6\n\t"
24786 #elif defined(__clang__)
24787         "sbcs	r5, r6\n\t"
24788 #else
24789         "sbc	r5, r6\n\t"
24790 #endif
24791         "stm	%[a]!, {r5}\n\t"
24792         "ldm	%[m]!, {r6}\n\t"
24793 #ifdef WOLFSSL_KEIL
24794         "ands	r6, r6, r7\n\t"
24795 #elif defined(__clang__)
24796         "ands	r6, r7\n\t"
24797 #else
24798         "and	r6, r7\n\t"
24799 #endif
24800         "ldr	r5, [%[a], r4]\n\t"
24801 #ifdef WOLFSSL_KEIL
24802         "sbcs	r5, r5, r6\n\t"
24803 #elif defined(__clang__)
24804         "sbcs	r5, r6\n\t"
24805 #else
24806         "sbc	r5, r6\n\t"
24807 #endif
24808         "stm	%[a]!, {r5}\n\t"
24809         "ldm	%[m]!, {r6}\n\t"
24810 #ifdef WOLFSSL_KEIL
24811         "ands	r6, r6, r7\n\t"
24812 #elif defined(__clang__)
24813         "ands	r6, r7\n\t"
24814 #else
24815         "and	r6, r7\n\t"
24816 #endif
24817         "ldr	r5, [%[a], r4]\n\t"
24818 #ifdef WOLFSSL_KEIL
24819         "sbcs	r5, r5, r6\n\t"
24820 #elif defined(__clang__)
24821         "sbcs	r5, r6\n\t"
24822 #else
24823         "sbc	r5, r6\n\t"
24824 #endif
24825         "stm	%[a]!, {r5}\n\t"
24826         "ldm	%[m]!, {r6}\n\t"
24827 #ifdef WOLFSSL_KEIL
24828         "ands	r6, r6, r7\n\t"
24829 #elif defined(__clang__)
24830         "ands	r6, r7\n\t"
24831 #else
24832         "and	r6, r7\n\t"
24833 #endif
24834         "ldr	r5, [%[a], r4]\n\t"
24835 #ifdef WOLFSSL_KEIL
24836         "sbcs	r5, r5, r6\n\t"
24837 #elif defined(__clang__)
24838         "sbcs	r5, r6\n\t"
24839 #else
24840         "sbc	r5, r6\n\t"
24841 #endif
24842         "stm	%[a]!, {r5}\n\t"
24843         "ldm	%[m]!, {r6}\n\t"
24844 #ifdef WOLFSSL_KEIL
24845         "ands	r6, r6, r7\n\t"
24846 #elif defined(__clang__)
24847         "ands	r6, r7\n\t"
24848 #else
24849         "and	r6, r7\n\t"
24850 #endif
24851         "ldr	r5, [%[a], r4]\n\t"
24852 #ifdef WOLFSSL_KEIL
24853         "sbcs	r5, r5, r6\n\t"
24854 #elif defined(__clang__)
24855         "sbcs	r5, r6\n\t"
24856 #else
24857         "sbc	r5, r6\n\t"
24858 #endif
24859         "stm	%[a]!, {r5}\n\t"
24860         "ldm	%[m]!, {r6}\n\t"
24861 #ifdef WOLFSSL_KEIL
24862         "ands	r6, r6, r7\n\t"
24863 #elif defined(__clang__)
24864         "ands	r6, r7\n\t"
24865 #else
24866         "and	r6, r7\n\t"
24867 #endif
24868         "ldr	r5, [%[a], r4]\n\t"
24869 #ifdef WOLFSSL_KEIL
24870         "sbcs	r5, r5, r6\n\t"
24871 #elif defined(__clang__)
24872         "sbcs	r5, r6\n\t"
24873 #else
24874         "sbc	r5, r6\n\t"
24875 #endif
24876         "stm	%[a]!, {r5}\n\t"
24877         "ldm	%[m]!, {r6}\n\t"
24878 #ifdef WOLFSSL_KEIL
24879         "ands	r6, r6, r7\n\t"
24880 #elif defined(__clang__)
24881         "ands	r6, r7\n\t"
24882 #else
24883         "and	r6, r7\n\t"
24884 #endif
24885         "ldr	r5, [%[a], r4]\n\t"
24886 #ifdef WOLFSSL_KEIL
24887         "sbcs	r5, r5, r6\n\t"
24888 #elif defined(__clang__)
24889         "sbcs	r5, r6\n\t"
24890 #else
24891         "sbc	r5, r6\n\t"
24892 #endif
24893         "stm	%[a]!, {r5}\n\t"
24894         "ldm	%[m]!, {r6}\n\t"
24895 #ifdef WOLFSSL_KEIL
24896         "ands	r6, r6, r7\n\t"
24897 #elif defined(__clang__)
24898         "ands	r6, r7\n\t"
24899 #else
24900         "and	r6, r7\n\t"
24901 #endif
24902         "ldr	r5, [%[a], r4]\n\t"
24903 #ifdef WOLFSSL_KEIL
24904         "sbcs	r5, r5, r6\n\t"
24905 #elif defined(__clang__)
24906         "sbcs	r5, r6\n\t"
24907 #else
24908         "sbc	r5, r6\n\t"
24909 #endif
24910         "stm	%[a]!, {r5}\n\t"
24911         "ldm	%[m]!, {r6}\n\t"
24912 #ifdef WOLFSSL_KEIL
24913         "ands	r6, r6, r7\n\t"
24914 #elif defined(__clang__)
24915         "ands	r6, r7\n\t"
24916 #else
24917         "and	r6, r7\n\t"
24918 #endif
24919         "ldr	r5, [%[a], r4]\n\t"
24920 #ifdef WOLFSSL_KEIL
24921         "sbcs	r5, r5, r6\n\t"
24922 #elif defined(__clang__)
24923         "sbcs	r5, r6\n\t"
24924 #else
24925         "sbc	r5, r6\n\t"
24926 #endif
24927         "stm	%[a]!, {r5}\n\t"
24928         "ldm	%[m]!, {r6}\n\t"
24929 #ifdef WOLFSSL_KEIL
24930         "ands	r6, r6, r7\n\t"
24931 #elif defined(__clang__)
24932         "ands	r6, r7\n\t"
24933 #else
24934         "and	r6, r7\n\t"
24935 #endif
24936         "ldr	r5, [%[a], r4]\n\t"
24937 #ifdef WOLFSSL_KEIL
24938         "sbcs	r5, r5, r6\n\t"
24939 #elif defined(__clang__)
24940         "sbcs	r5, r6\n\t"
24941 #else
24942         "sbc	r5, r6\n\t"
24943 #endif
24944         "stm	%[a]!, {r5}\n\t"
24945         "ldm	%[m]!, {r6}\n\t"
24946 #ifdef WOLFSSL_KEIL
24947         "ands	r6, r6, r7\n\t"
24948 #elif defined(__clang__)
24949         "ands	r6, r7\n\t"
24950 #else
24951         "and	r6, r7\n\t"
24952 #endif
24953         "ldr	r5, [%[a], r4]\n\t"
24954 #ifdef WOLFSSL_KEIL
24955         "sbcs	r5, r5, r6\n\t"
24956 #elif defined(__clang__)
24957         "sbcs	r5, r6\n\t"
24958 #else
24959         "sbc	r5, r6\n\t"
24960 #endif
24961         "stm	%[a]!, {r5}\n\t"
24962         "ldm	%[m]!, {r6}\n\t"
24963 #ifdef WOLFSSL_KEIL
24964         "ands	r6, r6, r7\n\t"
24965 #elif defined(__clang__)
24966         "ands	r6, r7\n\t"
24967 #else
24968         "and	r6, r7\n\t"
24969 #endif
24970         "ldr	r5, [%[a], r4]\n\t"
24971 #ifdef WOLFSSL_KEIL
24972         "sbcs	r5, r5, r6\n\t"
24973 #elif defined(__clang__)
24974         "sbcs	r5, r6\n\t"
24975 #else
24976         "sbc	r5, r6\n\t"
24977 #endif
24978         "stm	%[a]!, {r5}\n\t"
24979         "ldm	%[m]!, {r6}\n\t"
24980 #ifdef WOLFSSL_KEIL
24981         "ands	r6, r6, r7\n\t"
24982 #elif defined(__clang__)
24983         "ands	r6, r7\n\t"
24984 #else
24985         "and	r6, r7\n\t"
24986 #endif
24987         "ldr	r5, [%[a], r4]\n\t"
24988 #ifdef WOLFSSL_KEIL
24989         "sbcs	r5, r5, r6\n\t"
24990 #elif defined(__clang__)
24991         "sbcs	r5, r6\n\t"
24992 #else
24993         "sbc	r5, r6\n\t"
24994 #endif
24995         "stm	%[a]!, {r5}\n\t"
24996         "ldm	%[m]!, {r6}\n\t"
24997 #ifdef WOLFSSL_KEIL
24998         "ands	r6, r6, r7\n\t"
24999 #elif defined(__clang__)
25000         "ands	r6, r7\n\t"
25001 #else
25002         "and	r6, r7\n\t"
25003 #endif
25004         "ldr	r5, [%[a], r4]\n\t"
25005 #ifdef WOLFSSL_KEIL
25006         "sbcs	r5, r5, r6\n\t"
25007 #elif defined(__clang__)
25008         "sbcs	r5, r6\n\t"
25009 #else
25010         "sbc	r5, r6\n\t"
25011 #endif
25012         "stm	%[a]!, {r5}\n\t"
25013         "ldm	%[m]!, {r6}\n\t"
25014 #ifdef WOLFSSL_KEIL
25015         "ands	r6, r6, r7\n\t"
25016 #elif defined(__clang__)
25017         "ands	r6, r7\n\t"
25018 #else
25019         "and	r6, r7\n\t"
25020 #endif
25021         "ldr	r5, [%[a], r4]\n\t"
25022 #ifdef WOLFSSL_KEIL
25023         "sbcs	r5, r5, r6\n\t"
25024 #elif defined(__clang__)
25025         "sbcs	r5, r6\n\t"
25026 #else
25027         "sbc	r5, r6\n\t"
25028 #endif
25029         "stm	%[a]!, {r5}\n\t"
25030         "ldm	%[m]!, {r6}\n\t"
25031 #ifdef WOLFSSL_KEIL
25032         "ands	r6, r6, r7\n\t"
25033 #elif defined(__clang__)
25034         "ands	r6, r7\n\t"
25035 #else
25036         "and	r6, r7\n\t"
25037 #endif
25038         "ldr	r5, [%[a], r4]\n\t"
25039 #ifdef WOLFSSL_KEIL
25040         "sbcs	r5, r5, r6\n\t"
25041 #elif defined(__clang__)
25042         "sbcs	r5, r6\n\t"
25043 #else
25044         "sbc	r5, r6\n\t"
25045 #endif
25046         "stm	%[a]!, {r5}\n\t"
25047         "ldm	%[m]!, {r6}\n\t"
25048 #ifdef WOLFSSL_KEIL
25049         "ands	r6, r6, r7\n\t"
25050 #elif defined(__clang__)
25051         "ands	r6, r7\n\t"
25052 #else
25053         "and	r6, r7\n\t"
25054 #endif
25055         "ldr	r5, [%[a], r4]\n\t"
25056 #ifdef WOLFSSL_KEIL
25057         "sbcs	r5, r5, r6\n\t"
25058 #elif defined(__clang__)
25059         "sbcs	r5, r6\n\t"
25060 #else
25061         "sbc	r5, r6\n\t"
25062 #endif
25063         "stm	%[a]!, {r5}\n\t"
25064         "ldm	%[m]!, {r6}\n\t"
25065 #ifdef WOLFSSL_KEIL
25066         "ands	r6, r6, r7\n\t"
25067 #elif defined(__clang__)
25068         "ands	r6, r7\n\t"
25069 #else
25070         "and	r6, r7\n\t"
25071 #endif
25072         "ldr	r5, [%[a], r4]\n\t"
25073 #ifdef WOLFSSL_KEIL
25074         "sbcs	r5, r5, r6\n\t"
25075 #elif defined(__clang__)
25076         "sbcs	r5, r6\n\t"
25077 #else
25078         "sbc	r5, r6\n\t"
25079 #endif
25080         "stm	%[a]!, {r5}\n\t"
25081         "ldm	%[m]!, {r6}\n\t"
25082 #ifdef WOLFSSL_KEIL
25083         "ands	r6, r6, r7\n\t"
25084 #elif defined(__clang__)
25085         "ands	r6, r7\n\t"
25086 #else
25087         "and	r6, r7\n\t"
25088 #endif
25089         "ldr	r5, [%[a], r4]\n\t"
25090 #ifdef WOLFSSL_KEIL
25091         "sbcs	r5, r5, r6\n\t"
25092 #elif defined(__clang__)
25093         "sbcs	r5, r6\n\t"
25094 #else
25095         "sbc	r5, r6\n\t"
25096 #endif
25097         "stm	%[a]!, {r5}\n\t"
25098         "ldm	%[m]!, {r6}\n\t"
25099 #ifdef WOLFSSL_KEIL
25100         "ands	r6, r6, r7\n\t"
25101 #elif defined(__clang__)
25102         "ands	r6, r7\n\t"
25103 #else
25104         "and	r6, r7\n\t"
25105 #endif
25106         "ldr	r5, [%[a], r4]\n\t"
25107 #ifdef WOLFSSL_KEIL
25108         "sbcs	r5, r5, r6\n\t"
25109 #elif defined(__clang__)
25110         "sbcs	r5, r6\n\t"
25111 #else
25112         "sbc	r5, r6\n\t"
25113 #endif
25114         "stm	%[a]!, {r5}\n\t"
25115         "ldm	%[m]!, {r6}\n\t"
25116 #ifdef WOLFSSL_KEIL
25117         "ands	r6, r6, r7\n\t"
25118 #elif defined(__clang__)
25119         "ands	r6, r7\n\t"
25120 #else
25121         "and	r6, r7\n\t"
25122 #endif
25123         "ldr	r5, [%[a], r4]\n\t"
25124 #ifdef WOLFSSL_KEIL
25125         "sbcs	r5, r5, r6\n\t"
25126 #elif defined(__clang__)
25127         "sbcs	r5, r6\n\t"
25128 #else
25129         "sbc	r5, r6\n\t"
25130 #endif
25131         "stm	%[a]!, {r5}\n\t"
25132         "ldm	%[m]!, {r6}\n\t"
25133 #ifdef WOLFSSL_KEIL
25134         "ands	r6, r6, r7\n\t"
25135 #elif defined(__clang__)
25136         "ands	r6, r7\n\t"
25137 #else
25138         "and	r6, r7\n\t"
25139 #endif
25140         "ldr	r5, [%[a], r4]\n\t"
25141 #ifdef WOLFSSL_KEIL
25142         "sbcs	r5, r5, r6\n\t"
25143 #elif defined(__clang__)
25144         "sbcs	r5, r6\n\t"
25145 #else
25146         "sbc	r5, r6\n\t"
25147 #endif
25148         "stm	%[a]!, {r5}\n\t"
25149         "ldm	%[m]!, {r6}\n\t"
25150 #ifdef WOLFSSL_KEIL
25151         "ands	r6, r6, r7\n\t"
25152 #elif defined(__clang__)
25153         "ands	r6, r7\n\t"
25154 #else
25155         "and	r6, r7\n\t"
25156 #endif
25157         "ldr	r5, [%[a], r4]\n\t"
25158 #ifdef WOLFSSL_KEIL
25159         "sbcs	r5, r5, r6\n\t"
25160 #elif defined(__clang__)
25161         "sbcs	r5, r6\n\t"
25162 #else
25163         "sbc	r5, r6\n\t"
25164 #endif
25165         "stm	%[a]!, {r5}\n\t"
25166         "ldm	%[m]!, {r6}\n\t"
25167 #ifdef WOLFSSL_KEIL
25168         "ands	r6, r6, r7\n\t"
25169 #elif defined(__clang__)
25170         "ands	r6, r7\n\t"
25171 #else
25172         "and	r6, r7\n\t"
25173 #endif
25174         "ldr	r5, [%[a], r4]\n\t"
25175 #ifdef WOLFSSL_KEIL
25176         "sbcs	r5, r5, r6\n\t"
25177 #elif defined(__clang__)
25178         "sbcs	r5, r6\n\t"
25179 #else
25180         "sbc	r5, r6\n\t"
25181 #endif
25182         "stm	%[a]!, {r5}\n\t"
25183         "ldm	%[m]!, {r6}\n\t"
25184 #ifdef WOLFSSL_KEIL
25185         "ands	r6, r6, r7\n\t"
25186 #elif defined(__clang__)
25187         "ands	r6, r7\n\t"
25188 #else
25189         "and	r6, r7\n\t"
25190 #endif
25191         "ldr	r5, [%[a], r4]\n\t"
25192 #ifdef WOLFSSL_KEIL
25193         "sbcs	r5, r5, r6\n\t"
25194 #elif defined(__clang__)
25195         "sbcs	r5, r6\n\t"
25196 #else
25197         "sbc	r5, r6\n\t"
25198 #endif
25199         "stm	%[a]!, {r5}\n\t"
25200         "ldm	%[m]!, {r6}\n\t"
25201 #ifdef WOLFSSL_KEIL
25202         "ands	r6, r6, r7\n\t"
25203 #elif defined(__clang__)
25204         "ands	r6, r7\n\t"
25205 #else
25206         "and	r6, r7\n\t"
25207 #endif
25208         "ldr	r5, [%[a], r4]\n\t"
25209 #ifdef WOLFSSL_KEIL
25210         "sbcs	r5, r5, r6\n\t"
25211 #elif defined(__clang__)
25212         "sbcs	r5, r6\n\t"
25213 #else
25214         "sbc	r5, r6\n\t"
25215 #endif
25216         "stm	%[a]!, {r5}\n\t"
25217         "ldm	%[m]!, {r6}\n\t"
25218 #ifdef WOLFSSL_KEIL
25219         "ands	r6, r6, r7\n\t"
25220 #elif defined(__clang__)
25221         "ands	r6, r7\n\t"
25222 #else
25223         "and	r6, r7\n\t"
25224 #endif
25225         "ldr	r5, [%[a], r4]\n\t"
25226 #ifdef WOLFSSL_KEIL
25227         "sbcs	r5, r5, r6\n\t"
25228 #elif defined(__clang__)
25229         "sbcs	r5, r6\n\t"
25230 #else
25231         "sbc	r5, r6\n\t"
25232 #endif
25233         "stm	%[a]!, {r5}\n\t"
25234         "ldm	%[m]!, {r6}\n\t"
25235 #ifdef WOLFSSL_KEIL
25236         "ands	r6, r6, r7\n\t"
25237 #elif defined(__clang__)
25238         "ands	r6, r7\n\t"
25239 #else
25240         "and	r6, r7\n\t"
25241 #endif
25242         "ldr	r5, [%[a], r4]\n\t"
25243 #ifdef WOLFSSL_KEIL
25244         "sbcs	r5, r5, r6\n\t"
25245 #elif defined(__clang__)
25246         "sbcs	r5, r6\n\t"
25247 #else
25248         "sbc	r5, r6\n\t"
25249 #endif
25250         "stm	%[a]!, {r5}\n\t"
25251         "ldm	%[m]!, {r6}\n\t"
25252 #ifdef WOLFSSL_KEIL
25253         "ands	r6, r6, r7\n\t"
25254 #elif defined(__clang__)
25255         "ands	r6, r7\n\t"
25256 #else
25257         "and	r6, r7\n\t"
25258 #endif
25259         "ldr	r5, [%[a], r4]\n\t"
25260 #ifdef WOLFSSL_KEIL
25261         "sbcs	r5, r5, r6\n\t"
25262 #elif defined(__clang__)
25263         "sbcs	r5, r6\n\t"
25264 #else
25265         "sbc	r5, r6\n\t"
25266 #endif
25267         "stm	%[a]!, {r5}\n\t"
25268         "ldm	%[m]!, {r6}\n\t"
25269 #ifdef WOLFSSL_KEIL
25270         "ands	r6, r6, r7\n\t"
25271 #elif defined(__clang__)
25272         "ands	r6, r7\n\t"
25273 #else
25274         "and	r6, r7\n\t"
25275 #endif
25276         "ldr	r5, [%[a], r4]\n\t"
25277 #ifdef WOLFSSL_KEIL
25278         "sbcs	r5, r5, r6\n\t"
25279 #elif defined(__clang__)
25280         "sbcs	r5, r6\n\t"
25281 #else
25282         "sbc	r5, r6\n\t"
25283 #endif
25284         "stm	%[a]!, {r5}\n\t"
25285         "ldm	%[m]!, {r6}\n\t"
25286 #ifdef WOLFSSL_KEIL
25287         "ands	r6, r6, r7\n\t"
25288 #elif defined(__clang__)
25289         "ands	r6, r7\n\t"
25290 #else
25291         "and	r6, r7\n\t"
25292 #endif
25293         "ldr	r5, [%[a], r4]\n\t"
25294 #ifdef WOLFSSL_KEIL
25295         "sbcs	r5, r5, r6\n\t"
25296 #elif defined(__clang__)
25297         "sbcs	r5, r6\n\t"
25298 #else
25299         "sbc	r5, r6\n\t"
25300 #endif
25301         "stm	%[a]!, {r5}\n\t"
25302         "ldm	%[m]!, {r6}\n\t"
25303 #ifdef WOLFSSL_KEIL
25304         "ands	r6, r6, r7\n\t"
25305 #elif defined(__clang__)
25306         "ands	r6, r7\n\t"
25307 #else
25308         "and	r6, r7\n\t"
25309 #endif
25310         "ldr	r5, [%[a], r4]\n\t"
25311 #ifdef WOLFSSL_KEIL
25312         "sbcs	r5, r5, r6\n\t"
25313 #elif defined(__clang__)
25314         "sbcs	r5, r6\n\t"
25315 #else
25316         "sbc	r5, r6\n\t"
25317 #endif
25318         "stm	%[a]!, {r5}\n\t"
25319         "ldm	%[m]!, {r6}\n\t"
25320 #ifdef WOLFSSL_KEIL
25321         "ands	r6, r6, r7\n\t"
25322 #elif defined(__clang__)
25323         "ands	r6, r7\n\t"
25324 #else
25325         "and	r6, r7\n\t"
25326 #endif
25327         "ldr	r5, [%[a], r4]\n\t"
25328 #ifdef WOLFSSL_KEIL
25329         "sbcs	r5, r5, r6\n\t"
25330 #elif defined(__clang__)
25331         "sbcs	r5, r6\n\t"
25332 #else
25333         "sbc	r5, r6\n\t"
25334 #endif
25335         "stm	%[a]!, {r5}\n\t"
25336         "ldm	%[m]!, {r6}\n\t"
25337 #ifdef WOLFSSL_KEIL
25338         "ands	r6, r6, r7\n\t"
25339 #elif defined(__clang__)
25340         "ands	r6, r7\n\t"
25341 #else
25342         "and	r6, r7\n\t"
25343 #endif
25344         "ldr	r5, [%[a], r4]\n\t"
25345 #ifdef WOLFSSL_KEIL
25346         "sbcs	r5, r5, r6\n\t"
25347 #elif defined(__clang__)
25348         "sbcs	r5, r6\n\t"
25349 #else
25350         "sbc	r5, r6\n\t"
25351 #endif
25352         "stm	%[a]!, {r5}\n\t"
25353         "ldm	%[m]!, {r6}\n\t"
25354 #ifdef WOLFSSL_KEIL
25355         "ands	r6, r6, r7\n\t"
25356 #elif defined(__clang__)
25357         "ands	r6, r7\n\t"
25358 #else
25359         "and	r6, r7\n\t"
25360 #endif
25361         "ldr	r5, [%[a], r4]\n\t"
25362 #ifdef WOLFSSL_KEIL
25363         "sbcs	r5, r5, r6\n\t"
25364 #elif defined(__clang__)
25365         "sbcs	r5, r6\n\t"
25366 #else
25367         "sbc	r5, r6\n\t"
25368 #endif
25369         "stm	%[a]!, {r5}\n\t"
25370         "ldm	%[m]!, {r6}\n\t"
25371 #ifdef WOLFSSL_KEIL
25372         "ands	r6, r6, r7\n\t"
25373 #elif defined(__clang__)
25374         "ands	r6, r7\n\t"
25375 #else
25376         "and	r6, r7\n\t"
25377 #endif
25378         "ldr	r5, [%[a], r4]\n\t"
25379 #ifdef WOLFSSL_KEIL
25380         "sbcs	r5, r5, r6\n\t"
25381 #elif defined(__clang__)
25382         "sbcs	r5, r6\n\t"
25383 #else
25384         "sbc	r5, r6\n\t"
25385 #endif
25386         "stm	%[a]!, {r5}\n\t"
25387         "ldm	%[m]!, {r6}\n\t"
25388 #ifdef WOLFSSL_KEIL
25389         "ands	r6, r6, r7\n\t"
25390 #elif defined(__clang__)
25391         "ands	r6, r7\n\t"
25392 #else
25393         "and	r6, r7\n\t"
25394 #endif
25395         "ldr	r5, [%[a], r4]\n\t"
25396 #ifdef WOLFSSL_KEIL
25397         "sbcs	r5, r5, r6\n\t"
25398 #elif defined(__clang__)
25399         "sbcs	r5, r6\n\t"
25400 #else
25401         "sbc	r5, r6\n\t"
25402 #endif
25403         "stm	%[a]!, {r5}\n\t"
25404         "ldm	%[m]!, {r6}\n\t"
25405 #ifdef WOLFSSL_KEIL
25406         "ands	r6, r6, r7\n\t"
25407 #elif defined(__clang__)
25408         "ands	r6, r7\n\t"
25409 #else
25410         "and	r6, r7\n\t"
25411 #endif
25412         "ldr	r5, [%[a], r4]\n\t"
25413 #ifdef WOLFSSL_KEIL
25414         "sbcs	r5, r5, r6\n\t"
25415 #elif defined(__clang__)
25416         "sbcs	r5, r6\n\t"
25417 #else
25418         "sbc	r5, r6\n\t"
25419 #endif
25420         "stm	%[a]!, {r5}\n\t"
25421         "ldm	%[m]!, {r6}\n\t"
25422 #ifdef WOLFSSL_KEIL
25423         "ands	r6, r6, r7\n\t"
25424 #elif defined(__clang__)
25425         "ands	r6, r7\n\t"
25426 #else
25427         "and	r6, r7\n\t"
25428 #endif
25429         "ldr	r5, [%[a], r4]\n\t"
25430 #ifdef WOLFSSL_KEIL
25431         "sbcs	r5, r5, r6\n\t"
25432 #elif defined(__clang__)
25433         "sbcs	r5, r6\n\t"
25434 #else
25435         "sbc	r5, r6\n\t"
25436 #endif
25437         "stm	%[a]!, {r5}\n\t"
25438         "ldm	%[m]!, {r6}\n\t"
25439 #ifdef WOLFSSL_KEIL
25440         "ands	r6, r6, r7\n\t"
25441 #elif defined(__clang__)
25442         "ands	r6, r7\n\t"
25443 #else
25444         "and	r6, r7\n\t"
25445 #endif
25446         "ldr	r5, [%[a], r4]\n\t"
25447 #ifdef WOLFSSL_KEIL
25448         "sbcs	r5, r5, r6\n\t"
25449 #elif defined(__clang__)
25450         "sbcs	r5, r6\n\t"
25451 #else
25452         "sbc	r5, r6\n\t"
25453 #endif
25454         "stm	%[a]!, {r5}\n\t"
25455         "ldm	%[m]!, {r6}\n\t"
25456 #ifdef WOLFSSL_KEIL
25457         "ands	r6, r6, r7\n\t"
25458 #elif defined(__clang__)
25459         "ands	r6, r7\n\t"
25460 #else
25461         "and	r6, r7\n\t"
25462 #endif
25463         "ldr	r5, [%[a], r4]\n\t"
25464 #ifdef WOLFSSL_KEIL
25465         "sbcs	r5, r5, r6\n\t"
25466 #elif defined(__clang__)
25467         "sbcs	r5, r6\n\t"
25468 #else
25469         "sbc	r5, r6\n\t"
25470 #endif
25471         "stm	%[a]!, {r5}\n\t"
25472         "ldm	%[m]!, {r6}\n\t"
25473 #ifdef WOLFSSL_KEIL
25474         "ands	r6, r6, r7\n\t"
25475 #elif defined(__clang__)
25476         "ands	r6, r7\n\t"
25477 #else
25478         "and	r6, r7\n\t"
25479 #endif
25480         "ldr	r5, [%[a], r4]\n\t"
25481 #ifdef WOLFSSL_KEIL
25482         "sbcs	r5, r5, r6\n\t"
25483 #elif defined(__clang__)
25484         "sbcs	r5, r6\n\t"
25485 #else
25486         "sbc	r5, r6\n\t"
25487 #endif
25488         "stm	%[a]!, {r5}\n\t"
25489         "ldm	%[m]!, {r6}\n\t"
25490 #ifdef WOLFSSL_KEIL
25491         "ands	r6, r6, r7\n\t"
25492 #elif defined(__clang__)
25493         "ands	r6, r7\n\t"
25494 #else
25495         "and	r6, r7\n\t"
25496 #endif
25497         "ldr	r5, [%[a], r4]\n\t"
25498 #ifdef WOLFSSL_KEIL
25499         "sbcs	r5, r5, r6\n\t"
25500 #elif defined(__clang__)
25501         "sbcs	r5, r6\n\t"
25502 #else
25503         "sbc	r5, r6\n\t"
25504 #endif
25505         "stm	%[a]!, {r5}\n\t"
25506         "ldm	%[m]!, {r6}\n\t"
25507 #ifdef WOLFSSL_KEIL
25508         "ands	r6, r6, r7\n\t"
25509 #elif defined(__clang__)
25510         "ands	r6, r7\n\t"
25511 #else
25512         "and	r6, r7\n\t"
25513 #endif
25514         "ldr	r5, [%[a], r4]\n\t"
25515 #ifdef WOLFSSL_KEIL
25516         "sbcs	r5, r5, r6\n\t"
25517 #elif defined(__clang__)
25518         "sbcs	r5, r6\n\t"
25519 #else
25520         "sbc	r5, r6\n\t"
25521 #endif
25522         "stm	%[a]!, {r5}\n\t"
25523         "ldm	%[m]!, {r6}\n\t"
25524 #ifdef WOLFSSL_KEIL
25525         "ands	r6, r6, r7\n\t"
25526 #elif defined(__clang__)
25527         "ands	r6, r7\n\t"
25528 #else
25529         "and	r6, r7\n\t"
25530 #endif
25531         "ldr	r5, [%[a], r4]\n\t"
25532 #ifdef WOLFSSL_KEIL
25533         "sbcs	r5, r5, r6\n\t"
25534 #elif defined(__clang__)
25535         "sbcs	r5, r6\n\t"
25536 #else
25537         "sbc	r5, r6\n\t"
25538 #endif
25539         "stm	%[a]!, {r5}\n\t"
25540         "ldm	%[m]!, {r6}\n\t"
25541 #ifdef WOLFSSL_KEIL
25542         "ands	r6, r6, r7\n\t"
25543 #elif defined(__clang__)
25544         "ands	r6, r7\n\t"
25545 #else
25546         "and	r6, r7\n\t"
25547 #endif
25548         "ldr	r5, [%[a], r4]\n\t"
25549 #ifdef WOLFSSL_KEIL
25550         "sbcs	r5, r5, r6\n\t"
25551 #elif defined(__clang__)
25552         "sbcs	r5, r6\n\t"
25553 #else
25554         "sbc	r5, r6\n\t"
25555 #endif
25556         "stm	%[a]!, {r5}\n\t"
25557         "ldm	%[m]!, {r6}\n\t"
25558 #ifdef WOLFSSL_KEIL
25559         "ands	r6, r6, r7\n\t"
25560 #elif defined(__clang__)
25561         "ands	r6, r7\n\t"
25562 #else
25563         "and	r6, r7\n\t"
25564 #endif
25565         "ldr	r5, [%[a], r4]\n\t"
25566 #ifdef WOLFSSL_KEIL
25567         "sbcs	r5, r5, r6\n\t"
25568 #elif defined(__clang__)
25569         "sbcs	r5, r6\n\t"
25570 #else
25571         "sbc	r5, r6\n\t"
25572 #endif
25573         "stm	%[a]!, {r5}\n\t"
25574         "ldm	%[m]!, {r6}\n\t"
25575 #ifdef WOLFSSL_KEIL
25576         "ands	r6, r6, r7\n\t"
25577 #elif defined(__clang__)
25578         "ands	r6, r7\n\t"
25579 #else
25580         "and	r6, r7\n\t"
25581 #endif
25582         "ldr	r5, [%[a], r4]\n\t"
25583 #ifdef WOLFSSL_KEIL
25584         "sbcs	r5, r5, r6\n\t"
25585 #elif defined(__clang__)
25586         "sbcs	r5, r6\n\t"
25587 #else
25588         "sbc	r5, r6\n\t"
25589 #endif
25590         "stm	%[a]!, {r5}\n\t"
25591         "ldm	%[m]!, {r6}\n\t"
25592 #ifdef WOLFSSL_KEIL
25593         "ands	r6, r6, r7\n\t"
25594 #elif defined(__clang__)
25595         "ands	r6, r7\n\t"
25596 #else
25597         "and	r6, r7\n\t"
25598 #endif
25599         "ldr	r5, [%[a], r4]\n\t"
25600 #ifdef WOLFSSL_KEIL
25601         "sbcs	r5, r5, r6\n\t"
25602 #elif defined(__clang__)
25603         "sbcs	r5, r6\n\t"
25604 #else
25605         "sbc	r5, r6\n\t"
25606 #endif
25607         "stm	%[a]!, {r5}\n\t"
25608         "ldm	%[m]!, {r6}\n\t"
25609 #ifdef WOLFSSL_KEIL
25610         "ands	r6, r6, r7\n\t"
25611 #elif defined(__clang__)
25612         "ands	r6, r7\n\t"
25613 #else
25614         "and	r6, r7\n\t"
25615 #endif
25616         "ldr	r5, [%[a], r4]\n\t"
25617 #ifdef WOLFSSL_KEIL
25618         "sbcs	r5, r5, r6\n\t"
25619 #elif defined(__clang__)
25620         "sbcs	r5, r6\n\t"
25621 #else
25622         "sbc	r5, r6\n\t"
25623 #endif
25624         "stm	%[a]!, {r5}\n\t"
25625         "ldm	%[m]!, {r6}\n\t"
25626 #ifdef WOLFSSL_KEIL
25627         "ands	r6, r6, r7\n\t"
25628 #elif defined(__clang__)
25629         "ands	r6, r7\n\t"
25630 #else
25631         "and	r6, r7\n\t"
25632 #endif
25633         "ldr	r5, [%[a], r4]\n\t"
25634 #ifdef WOLFSSL_KEIL
25635         "sbcs	r5, r5, r6\n\t"
25636 #elif defined(__clang__)
25637         "sbcs	r5, r6\n\t"
25638 #else
25639         "sbc	r5, r6\n\t"
25640 #endif
25641         "stm	%[a]!, {r5}\n\t"
25642         "ldm	%[m]!, {r6}\n\t"
25643 #ifdef WOLFSSL_KEIL
25644         "ands	r6, r6, r7\n\t"
25645 #elif defined(__clang__)
25646         "ands	r6, r7\n\t"
25647 #else
25648         "and	r6, r7\n\t"
25649 #endif
25650         "ldr	r5, [%[a], r4]\n\t"
25651 #ifdef WOLFSSL_KEIL
25652         "sbcs	r5, r5, r6\n\t"
25653 #elif defined(__clang__)
25654         "sbcs	r5, r6\n\t"
25655 #else
25656         "sbc	r5, r6\n\t"
25657 #endif
25658         "stm	%[a]!, {r5}\n\t"
25659         "ldm	%[m]!, {r6}\n\t"
25660 #ifdef WOLFSSL_KEIL
25661         "ands	r6, r6, r7\n\t"
25662 #elif defined(__clang__)
25663         "ands	r6, r7\n\t"
25664 #else
25665         "and	r6, r7\n\t"
25666 #endif
25667         "ldr	r5, [%[a], r4]\n\t"
25668 #ifdef WOLFSSL_KEIL
25669         "sbcs	r5, r5, r6\n\t"
25670 #elif defined(__clang__)
25671         "sbcs	r5, r6\n\t"
25672 #else
25673         "sbc	r5, r6\n\t"
25674 #endif
25675         "stm	%[a]!, {r5}\n\t"
25676         "ldm	%[m]!, {r6}\n\t"
25677 #ifdef WOLFSSL_KEIL
25678         "ands	r6, r6, r7\n\t"
25679 #elif defined(__clang__)
25680         "ands	r6, r7\n\t"
25681 #else
25682         "and	r6, r7\n\t"
25683 #endif
25684         "ldr	r5, [%[a], r4]\n\t"
25685 #ifdef WOLFSSL_KEIL
25686         "sbcs	r5, r5, r6\n\t"
25687 #elif defined(__clang__)
25688         "sbcs	r5, r6\n\t"
25689 #else
25690         "sbc	r5, r6\n\t"
25691 #endif
25692         "stm	%[a]!, {r5}\n\t"
25693         "ldm	%[m]!, {r6}\n\t"
25694 #ifdef WOLFSSL_KEIL
25695         "ands	r6, r6, r7\n\t"
25696 #elif defined(__clang__)
25697         "ands	r6, r7\n\t"
25698 #else
25699         "and	r6, r7\n\t"
25700 #endif
25701         "ldr	r5, [%[a], r4]\n\t"
25702 #ifdef WOLFSSL_KEIL
25703         "sbcs	r5, r5, r6\n\t"
25704 #elif defined(__clang__)
25705         "sbcs	r5, r6\n\t"
25706 #else
25707         "sbc	r5, r6\n\t"
25708 #endif
25709         "stm	%[a]!, {r5}\n\t"
25710         "ldm	%[m]!, {r6}\n\t"
25711 #ifdef WOLFSSL_KEIL
25712         "ands	r6, r6, r7\n\t"
25713 #elif defined(__clang__)
25714         "ands	r6, r7\n\t"
25715 #else
25716         "and	r6, r7\n\t"
25717 #endif
25718         "ldr	r5, [%[a], r4]\n\t"
25719 #ifdef WOLFSSL_KEIL
25720         "sbcs	r5, r5, r6\n\t"
25721 #elif defined(__clang__)
25722         "sbcs	r5, r6\n\t"
25723 #else
25724         "sbc	r5, r6\n\t"
25725 #endif
25726         "stm	%[a]!, {r5}\n\t"
25727         "ldm	%[m]!, {r6}\n\t"
25728 #ifdef WOLFSSL_KEIL
25729         "ands	r6, r6, r7\n\t"
25730 #elif defined(__clang__)
25731         "ands	r6, r7\n\t"
25732 #else
25733         "and	r6, r7\n\t"
25734 #endif
25735         "ldr	r5, [%[a], r4]\n\t"
25736 #ifdef WOLFSSL_KEIL
25737         "sbcs	r5, r5, r6\n\t"
25738 #elif defined(__clang__)
25739         "sbcs	r5, r6\n\t"
25740 #else
25741         "sbc	r5, r6\n\t"
25742 #endif
25743         "stm	%[a]!, {r5}\n\t"
25744         "ldm	%[m]!, {r6}\n\t"
25745 #ifdef WOLFSSL_KEIL
25746         "ands	r6, r6, r7\n\t"
25747 #elif defined(__clang__)
25748         "ands	r6, r7\n\t"
25749 #else
25750         "and	r6, r7\n\t"
25751 #endif
25752         "ldr	r5, [%[a], r4]\n\t"
25753 #ifdef WOLFSSL_KEIL
25754         "sbcs	r5, r5, r6\n\t"
25755 #elif defined(__clang__)
25756         "sbcs	r5, r6\n\t"
25757 #else
25758         "sbc	r5, r6\n\t"
25759 #endif
25760         "stm	%[a]!, {r5}\n\t"
25761         "ldm	%[m]!, {r6}\n\t"
25762 #ifdef WOLFSSL_KEIL
25763         "ands	r6, r6, r7\n\t"
25764 #elif defined(__clang__)
25765         "ands	r6, r7\n\t"
25766 #else
25767         "and	r6, r7\n\t"
25768 #endif
25769         "ldr	r5, [%[a], r4]\n\t"
25770 #ifdef WOLFSSL_KEIL
25771         "sbcs	r5, r5, r6\n\t"
25772 #elif defined(__clang__)
25773         "sbcs	r5, r6\n\t"
25774 #else
25775         "sbc	r5, r6\n\t"
25776 #endif
25777         "stm	%[a]!, {r5}\n\t"
25778         "ldm	%[m]!, {r6}\n\t"
25779 #ifdef WOLFSSL_KEIL
25780         "ands	r6, r6, r7\n\t"
25781 #elif defined(__clang__)
25782         "ands	r6, r7\n\t"
25783 #else
25784         "and	r6, r7\n\t"
25785 #endif
25786         "ldr	r5, [%[a], r4]\n\t"
25787 #ifdef WOLFSSL_KEIL
25788         "sbcs	r5, r5, r6\n\t"
25789 #elif defined(__clang__)
25790         "sbcs	r5, r6\n\t"
25791 #else
25792         "sbc	r5, r6\n\t"
25793 #endif
25794         "stm	%[a]!, {r5}\n\t"
25795 #endif /* WOLFSSL_SP_LARGE_CODE */
25796         : [a] "+r" (a), [m] "+r" (m), [mp] "+r" (mp)
25797         :
25798         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "lr"
25799     );
25800 }
25801 
25802 /* Multiply two Montgomery form numbers mod the modulus (prime).
25803  * (r = a * b mod m)
25804  *
25805  * r   Result of multiplication.
25806  * a   First number to multiply in Montgomery form.
25807  * b   Second number to multiply in Montgomery form.
25808  * m   Modulus (prime).
25809  * mp  Montgomery mulitplier.
25810  */
sp_2048_mont_mul_64(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)25811 static void sp_2048_mont_mul_64(sp_digit* r, const sp_digit* a,
25812         const sp_digit* b, const sp_digit* m, sp_digit mp)
25813 {
25814     sp_2048_mul_64(r, a, b);
25815     sp_2048_mont_reduce_64(r, m, mp);
25816 }
25817 
25818 /* Square the Montgomery form number. (r = a * a mod m)
25819  *
25820  * r   Result of squaring.
25821  * a   Number to square in Montgomery form.
25822  * m   Modulus (prime).
25823  * mp  Montgomery mulitplier.
25824  */
sp_2048_mont_sqr_64(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)25825 static void sp_2048_mont_sqr_64(sp_digit* r, const sp_digit* a,
25826         const sp_digit* m, sp_digit mp)
25827 {
25828     sp_2048_sqr_64(r, a);
25829     sp_2048_mont_reduce_64(r, m, mp);
25830 }
25831 
25832 #ifdef WOLFSSL_SP_SMALL
25833 /* Sub b from a into r. (r = a - b)
25834  *
25835  * r  A single precision integer.
25836  * a  A single precision integer.
25837  * b  A single precision integer.
25838  */
sp_2048_sub_64(sp_digit * r,const sp_digit * a,const sp_digit * b)25839 SP_NOINLINE static sp_digit sp_2048_sub_64(sp_digit* r, const sp_digit* a,
25840         const sp_digit* b)
25841 {
25842     __asm__ __volatile__ (
25843         "movs	r6, %[a]\n\t"
25844         "movs	r3, #0\n\t"
25845         "movs	r5, #0xff\n\t"
25846 #if defined(__clang__) || defined(WOLFSSL_KEIL)
25847         "adds	r5, r5, #1\n\t"
25848 #else
25849         "add	r5, r5, #1\n\t"
25850 #endif
25851 #if defined(__clang__) || defined(WOLFSSL_KEIL)
25852         "adds	r6, r6, r5\n\t"
25853 #else
25854         "add	r6, r6, r5\n\t"
25855 #endif
25856         "\n"
25857     "L_sp_2048_sub_64_word_%=:\n\t"
25858         "movs	r5, #0\n\t"
25859 #if defined(__clang__) || defined(WOLFSSL_KEIL)
25860         "subs	r5, r5, r3\n\t"
25861 #else
25862         "sub	r5, r5, r3\n\t"
25863 #endif
25864         "ldr	r4, [%[a]]\n\t"
25865         "ldr	r5, [%[b]]\n\t"
25866 #ifdef WOLFSSL_KEIL
25867         "sbcs	r4, r4, r5\n\t"
25868 #elif defined(__clang__)
25869         "sbcs	r4, r5\n\t"
25870 #else
25871         "sbc	r4, r5\n\t"
25872 #endif
25873         "str	r4, [%[r]]\n\t"
25874 #ifdef WOLFSSL_KEIL
25875         "sbcs	r3, r3, r3\n\t"
25876 #elif defined(__clang__)
25877         "sbcs	r3, r3\n\t"
25878 #else
25879         "sbc	r3, r3\n\t"
25880 #endif
25881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
25882         "adds	%[a], %[a], #4\n\t"
25883 #else
25884         "add	%[a], %[a], #4\n\t"
25885 #endif
25886 #if defined(__clang__) || defined(WOLFSSL_KEIL)
25887         "adds	%[b], %[b], #4\n\t"
25888 #else
25889         "add	%[b], %[b], #4\n\t"
25890 #endif
25891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
25892         "adds	%[r], %[r], #4\n\t"
25893 #else
25894         "add	%[r], %[r], #4\n\t"
25895 #endif
25896         "cmp	%[a], r6\n\t"
25897         "bne	L_sp_2048_sub_64_word_%=\n\t"
25898         "movs	%[r], r3\n\t"
25899         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
25900         :
25901         : "memory", "r3", "r4", "r5", "r6"
25902     );
25903     return (uint32_t)(size_t)r;
25904 }
25905 
25906 #else
25907 /* Sub b from a into r. (r = a - b)
25908  *
25909  * r  A single precision integer.
25910  * a  A single precision integer.
25911  * b  A single precision integer.
25912  */
sp_2048_sub_64(sp_digit * r,const sp_digit * a,const sp_digit * b)25913 SP_NOINLINE static sp_digit sp_2048_sub_64(sp_digit* r, const sp_digit* a,
25914         const sp_digit* b)
25915 {
25916     __asm__ __volatile__ (
25917         "ldm	%[b]!, {r5, r6}\n\t"
25918         "ldm	%[a]!, {r3, r4}\n\t"
25919 #if defined(__clang__) || defined(WOLFSSL_KEIL)
25920         "subs	r3, r3, r5\n\t"
25921 #else
25922         "sub	r3, r3, r5\n\t"
25923 #endif
25924 #ifdef WOLFSSL_KEIL
25925         "sbcs	r4, r4, r6\n\t"
25926 #elif defined(__clang__)
25927         "sbcs	r4, r6\n\t"
25928 #else
25929         "sbc	r4, r6\n\t"
25930 #endif
25931         "stm	%[r]!, {r3, r4}\n\t"
25932         "ldm	%[b]!, {r5, r6}\n\t"
25933         "ldm	%[a]!, {r3, r4}\n\t"
25934 #ifdef WOLFSSL_KEIL
25935         "sbcs	r3, r3, r5\n\t"
25936 #elif defined(__clang__)
25937         "sbcs	r3, r5\n\t"
25938 #else
25939         "sbc	r3, r5\n\t"
25940 #endif
25941 #ifdef WOLFSSL_KEIL
25942         "sbcs	r4, r4, r6\n\t"
25943 #elif defined(__clang__)
25944         "sbcs	r4, r6\n\t"
25945 #else
25946         "sbc	r4, r6\n\t"
25947 #endif
25948         "stm	%[r]!, {r3, r4}\n\t"
25949         "ldm	%[b]!, {r5, r6}\n\t"
25950         "ldm	%[a]!, {r3, r4}\n\t"
25951 #ifdef WOLFSSL_KEIL
25952         "sbcs	r3, r3, r5\n\t"
25953 #elif defined(__clang__)
25954         "sbcs	r3, r5\n\t"
25955 #else
25956         "sbc	r3, r5\n\t"
25957 #endif
25958 #ifdef WOLFSSL_KEIL
25959         "sbcs	r4, r4, r6\n\t"
25960 #elif defined(__clang__)
25961         "sbcs	r4, r6\n\t"
25962 #else
25963         "sbc	r4, r6\n\t"
25964 #endif
25965         "stm	%[r]!, {r3, r4}\n\t"
25966         "ldm	%[b]!, {r5, r6}\n\t"
25967         "ldm	%[a]!, {r3, r4}\n\t"
25968 #ifdef WOLFSSL_KEIL
25969         "sbcs	r3, r3, r5\n\t"
25970 #elif defined(__clang__)
25971         "sbcs	r3, r5\n\t"
25972 #else
25973         "sbc	r3, r5\n\t"
25974 #endif
25975 #ifdef WOLFSSL_KEIL
25976         "sbcs	r4, r4, r6\n\t"
25977 #elif defined(__clang__)
25978         "sbcs	r4, r6\n\t"
25979 #else
25980         "sbc	r4, r6\n\t"
25981 #endif
25982         "stm	%[r]!, {r3, r4}\n\t"
25983         "ldm	%[b]!, {r5, r6}\n\t"
25984         "ldm	%[a]!, {r3, r4}\n\t"
25985 #ifdef WOLFSSL_KEIL
25986         "sbcs	r3, r3, r5\n\t"
25987 #elif defined(__clang__)
25988         "sbcs	r3, r5\n\t"
25989 #else
25990         "sbc	r3, r5\n\t"
25991 #endif
25992 #ifdef WOLFSSL_KEIL
25993         "sbcs	r4, r4, r6\n\t"
25994 #elif defined(__clang__)
25995         "sbcs	r4, r6\n\t"
25996 #else
25997         "sbc	r4, r6\n\t"
25998 #endif
25999         "stm	%[r]!, {r3, r4}\n\t"
26000         "ldm	%[b]!, {r5, r6}\n\t"
26001         "ldm	%[a]!, {r3, r4}\n\t"
26002 #ifdef WOLFSSL_KEIL
26003         "sbcs	r3, r3, r5\n\t"
26004 #elif defined(__clang__)
26005         "sbcs	r3, r5\n\t"
26006 #else
26007         "sbc	r3, r5\n\t"
26008 #endif
26009 #ifdef WOLFSSL_KEIL
26010         "sbcs	r4, r4, r6\n\t"
26011 #elif defined(__clang__)
26012         "sbcs	r4, r6\n\t"
26013 #else
26014         "sbc	r4, r6\n\t"
26015 #endif
26016         "stm	%[r]!, {r3, r4}\n\t"
26017         "ldm	%[b]!, {r5, r6}\n\t"
26018         "ldm	%[a]!, {r3, r4}\n\t"
26019 #ifdef WOLFSSL_KEIL
26020         "sbcs	r3, r3, r5\n\t"
26021 #elif defined(__clang__)
26022         "sbcs	r3, r5\n\t"
26023 #else
26024         "sbc	r3, r5\n\t"
26025 #endif
26026 #ifdef WOLFSSL_KEIL
26027         "sbcs	r4, r4, r6\n\t"
26028 #elif defined(__clang__)
26029         "sbcs	r4, r6\n\t"
26030 #else
26031         "sbc	r4, r6\n\t"
26032 #endif
26033         "stm	%[r]!, {r3, r4}\n\t"
26034         "ldm	%[b]!, {r5, r6}\n\t"
26035         "ldm	%[a]!, {r3, r4}\n\t"
26036 #ifdef WOLFSSL_KEIL
26037         "sbcs	r3, r3, r5\n\t"
26038 #elif defined(__clang__)
26039         "sbcs	r3, r5\n\t"
26040 #else
26041         "sbc	r3, r5\n\t"
26042 #endif
26043 #ifdef WOLFSSL_KEIL
26044         "sbcs	r4, r4, r6\n\t"
26045 #elif defined(__clang__)
26046         "sbcs	r4, r6\n\t"
26047 #else
26048         "sbc	r4, r6\n\t"
26049 #endif
26050         "stm	%[r]!, {r3, r4}\n\t"
26051         "ldm	%[b]!, {r5, r6}\n\t"
26052         "ldm	%[a]!, {r3, r4}\n\t"
26053 #ifdef WOLFSSL_KEIL
26054         "sbcs	r3, r3, r5\n\t"
26055 #elif defined(__clang__)
26056         "sbcs	r3, r5\n\t"
26057 #else
26058         "sbc	r3, r5\n\t"
26059 #endif
26060 #ifdef WOLFSSL_KEIL
26061         "sbcs	r4, r4, r6\n\t"
26062 #elif defined(__clang__)
26063         "sbcs	r4, r6\n\t"
26064 #else
26065         "sbc	r4, r6\n\t"
26066 #endif
26067         "stm	%[r]!, {r3, r4}\n\t"
26068         "ldm	%[b]!, {r5, r6}\n\t"
26069         "ldm	%[a]!, {r3, r4}\n\t"
26070 #ifdef WOLFSSL_KEIL
26071         "sbcs	r3, r3, r5\n\t"
26072 #elif defined(__clang__)
26073         "sbcs	r3, r5\n\t"
26074 #else
26075         "sbc	r3, r5\n\t"
26076 #endif
26077 #ifdef WOLFSSL_KEIL
26078         "sbcs	r4, r4, r6\n\t"
26079 #elif defined(__clang__)
26080         "sbcs	r4, r6\n\t"
26081 #else
26082         "sbc	r4, r6\n\t"
26083 #endif
26084         "stm	%[r]!, {r3, r4}\n\t"
26085         "ldm	%[b]!, {r5, r6}\n\t"
26086         "ldm	%[a]!, {r3, r4}\n\t"
26087 #ifdef WOLFSSL_KEIL
26088         "sbcs	r3, r3, r5\n\t"
26089 #elif defined(__clang__)
26090         "sbcs	r3, r5\n\t"
26091 #else
26092         "sbc	r3, r5\n\t"
26093 #endif
26094 #ifdef WOLFSSL_KEIL
26095         "sbcs	r4, r4, r6\n\t"
26096 #elif defined(__clang__)
26097         "sbcs	r4, r6\n\t"
26098 #else
26099         "sbc	r4, r6\n\t"
26100 #endif
26101         "stm	%[r]!, {r3, r4}\n\t"
26102         "ldm	%[b]!, {r5, r6}\n\t"
26103         "ldm	%[a]!, {r3, r4}\n\t"
26104 #ifdef WOLFSSL_KEIL
26105         "sbcs	r3, r3, r5\n\t"
26106 #elif defined(__clang__)
26107         "sbcs	r3, r5\n\t"
26108 #else
26109         "sbc	r3, r5\n\t"
26110 #endif
26111 #ifdef WOLFSSL_KEIL
26112         "sbcs	r4, r4, r6\n\t"
26113 #elif defined(__clang__)
26114         "sbcs	r4, r6\n\t"
26115 #else
26116         "sbc	r4, r6\n\t"
26117 #endif
26118         "stm	%[r]!, {r3, r4}\n\t"
26119         "ldm	%[b]!, {r5, r6}\n\t"
26120         "ldm	%[a]!, {r3, r4}\n\t"
26121 #ifdef WOLFSSL_KEIL
26122         "sbcs	r3, r3, r5\n\t"
26123 #elif defined(__clang__)
26124         "sbcs	r3, r5\n\t"
26125 #else
26126         "sbc	r3, r5\n\t"
26127 #endif
26128 #ifdef WOLFSSL_KEIL
26129         "sbcs	r4, r4, r6\n\t"
26130 #elif defined(__clang__)
26131         "sbcs	r4, r6\n\t"
26132 #else
26133         "sbc	r4, r6\n\t"
26134 #endif
26135         "stm	%[r]!, {r3, r4}\n\t"
26136         "ldm	%[b]!, {r5, r6}\n\t"
26137         "ldm	%[a]!, {r3, r4}\n\t"
26138 #ifdef WOLFSSL_KEIL
26139         "sbcs	r3, r3, r5\n\t"
26140 #elif defined(__clang__)
26141         "sbcs	r3, r5\n\t"
26142 #else
26143         "sbc	r3, r5\n\t"
26144 #endif
26145 #ifdef WOLFSSL_KEIL
26146         "sbcs	r4, r4, r6\n\t"
26147 #elif defined(__clang__)
26148         "sbcs	r4, r6\n\t"
26149 #else
26150         "sbc	r4, r6\n\t"
26151 #endif
26152         "stm	%[r]!, {r3, r4}\n\t"
26153         "ldm	%[b]!, {r5, r6}\n\t"
26154         "ldm	%[a]!, {r3, r4}\n\t"
26155 #ifdef WOLFSSL_KEIL
26156         "sbcs	r3, r3, r5\n\t"
26157 #elif defined(__clang__)
26158         "sbcs	r3, r5\n\t"
26159 #else
26160         "sbc	r3, r5\n\t"
26161 #endif
26162 #ifdef WOLFSSL_KEIL
26163         "sbcs	r4, r4, r6\n\t"
26164 #elif defined(__clang__)
26165         "sbcs	r4, r6\n\t"
26166 #else
26167         "sbc	r4, r6\n\t"
26168 #endif
26169         "stm	%[r]!, {r3, r4}\n\t"
26170         "ldm	%[b]!, {r5, r6}\n\t"
26171         "ldm	%[a]!, {r3, r4}\n\t"
26172 #ifdef WOLFSSL_KEIL
26173         "sbcs	r3, r3, r5\n\t"
26174 #elif defined(__clang__)
26175         "sbcs	r3, r5\n\t"
26176 #else
26177         "sbc	r3, r5\n\t"
26178 #endif
26179 #ifdef WOLFSSL_KEIL
26180         "sbcs	r4, r4, r6\n\t"
26181 #elif defined(__clang__)
26182         "sbcs	r4, r6\n\t"
26183 #else
26184         "sbc	r4, r6\n\t"
26185 #endif
26186         "stm	%[r]!, {r3, r4}\n\t"
26187         "ldm	%[b]!, {r5, r6}\n\t"
26188         "ldm	%[a]!, {r3, r4}\n\t"
26189 #ifdef WOLFSSL_KEIL
26190         "sbcs	r3, r3, r5\n\t"
26191 #elif defined(__clang__)
26192         "sbcs	r3, r5\n\t"
26193 #else
26194         "sbc	r3, r5\n\t"
26195 #endif
26196 #ifdef WOLFSSL_KEIL
26197         "sbcs	r4, r4, r6\n\t"
26198 #elif defined(__clang__)
26199         "sbcs	r4, r6\n\t"
26200 #else
26201         "sbc	r4, r6\n\t"
26202 #endif
26203         "stm	%[r]!, {r3, r4}\n\t"
26204         "ldm	%[b]!, {r5, r6}\n\t"
26205         "ldm	%[a]!, {r3, r4}\n\t"
26206 #ifdef WOLFSSL_KEIL
26207         "sbcs	r3, r3, r5\n\t"
26208 #elif defined(__clang__)
26209         "sbcs	r3, r5\n\t"
26210 #else
26211         "sbc	r3, r5\n\t"
26212 #endif
26213 #ifdef WOLFSSL_KEIL
26214         "sbcs	r4, r4, r6\n\t"
26215 #elif defined(__clang__)
26216         "sbcs	r4, r6\n\t"
26217 #else
26218         "sbc	r4, r6\n\t"
26219 #endif
26220         "stm	%[r]!, {r3, r4}\n\t"
26221         "ldm	%[b]!, {r5, r6}\n\t"
26222         "ldm	%[a]!, {r3, r4}\n\t"
26223 #ifdef WOLFSSL_KEIL
26224         "sbcs	r3, r3, r5\n\t"
26225 #elif defined(__clang__)
26226         "sbcs	r3, r5\n\t"
26227 #else
26228         "sbc	r3, r5\n\t"
26229 #endif
26230 #ifdef WOLFSSL_KEIL
26231         "sbcs	r4, r4, r6\n\t"
26232 #elif defined(__clang__)
26233         "sbcs	r4, r6\n\t"
26234 #else
26235         "sbc	r4, r6\n\t"
26236 #endif
26237         "stm	%[r]!, {r3, r4}\n\t"
26238         "ldm	%[b]!, {r5, r6}\n\t"
26239         "ldm	%[a]!, {r3, r4}\n\t"
26240 #ifdef WOLFSSL_KEIL
26241         "sbcs	r3, r3, r5\n\t"
26242 #elif defined(__clang__)
26243         "sbcs	r3, r5\n\t"
26244 #else
26245         "sbc	r3, r5\n\t"
26246 #endif
26247 #ifdef WOLFSSL_KEIL
26248         "sbcs	r4, r4, r6\n\t"
26249 #elif defined(__clang__)
26250         "sbcs	r4, r6\n\t"
26251 #else
26252         "sbc	r4, r6\n\t"
26253 #endif
26254         "stm	%[r]!, {r3, r4}\n\t"
26255         "ldm	%[b]!, {r5, r6}\n\t"
26256         "ldm	%[a]!, {r3, r4}\n\t"
26257 #ifdef WOLFSSL_KEIL
26258         "sbcs	r3, r3, r5\n\t"
26259 #elif defined(__clang__)
26260         "sbcs	r3, r5\n\t"
26261 #else
26262         "sbc	r3, r5\n\t"
26263 #endif
26264 #ifdef WOLFSSL_KEIL
26265         "sbcs	r4, r4, r6\n\t"
26266 #elif defined(__clang__)
26267         "sbcs	r4, r6\n\t"
26268 #else
26269         "sbc	r4, r6\n\t"
26270 #endif
26271         "stm	%[r]!, {r3, r4}\n\t"
26272         "ldm	%[b]!, {r5, r6}\n\t"
26273         "ldm	%[a]!, {r3, r4}\n\t"
26274 #ifdef WOLFSSL_KEIL
26275         "sbcs	r3, r3, r5\n\t"
26276 #elif defined(__clang__)
26277         "sbcs	r3, r5\n\t"
26278 #else
26279         "sbc	r3, r5\n\t"
26280 #endif
26281 #ifdef WOLFSSL_KEIL
26282         "sbcs	r4, r4, r6\n\t"
26283 #elif defined(__clang__)
26284         "sbcs	r4, r6\n\t"
26285 #else
26286         "sbc	r4, r6\n\t"
26287 #endif
26288         "stm	%[r]!, {r3, r4}\n\t"
26289         "ldm	%[b]!, {r5, r6}\n\t"
26290         "ldm	%[a]!, {r3, r4}\n\t"
26291 #ifdef WOLFSSL_KEIL
26292         "sbcs	r3, r3, r5\n\t"
26293 #elif defined(__clang__)
26294         "sbcs	r3, r5\n\t"
26295 #else
26296         "sbc	r3, r5\n\t"
26297 #endif
26298 #ifdef WOLFSSL_KEIL
26299         "sbcs	r4, r4, r6\n\t"
26300 #elif defined(__clang__)
26301         "sbcs	r4, r6\n\t"
26302 #else
26303         "sbc	r4, r6\n\t"
26304 #endif
26305         "stm	%[r]!, {r3, r4}\n\t"
26306         "ldm	%[b]!, {r5, r6}\n\t"
26307         "ldm	%[a]!, {r3, r4}\n\t"
26308 #ifdef WOLFSSL_KEIL
26309         "sbcs	r3, r3, r5\n\t"
26310 #elif defined(__clang__)
26311         "sbcs	r3, r5\n\t"
26312 #else
26313         "sbc	r3, r5\n\t"
26314 #endif
26315 #ifdef WOLFSSL_KEIL
26316         "sbcs	r4, r4, r6\n\t"
26317 #elif defined(__clang__)
26318         "sbcs	r4, r6\n\t"
26319 #else
26320         "sbc	r4, r6\n\t"
26321 #endif
26322         "stm	%[r]!, {r3, r4}\n\t"
26323         "ldm	%[b]!, {r5, r6}\n\t"
26324         "ldm	%[a]!, {r3, r4}\n\t"
26325 #ifdef WOLFSSL_KEIL
26326         "sbcs	r3, r3, r5\n\t"
26327 #elif defined(__clang__)
26328         "sbcs	r3, r5\n\t"
26329 #else
26330         "sbc	r3, r5\n\t"
26331 #endif
26332 #ifdef WOLFSSL_KEIL
26333         "sbcs	r4, r4, r6\n\t"
26334 #elif defined(__clang__)
26335         "sbcs	r4, r6\n\t"
26336 #else
26337         "sbc	r4, r6\n\t"
26338 #endif
26339         "stm	%[r]!, {r3, r4}\n\t"
26340         "ldm	%[b]!, {r5, r6}\n\t"
26341         "ldm	%[a]!, {r3, r4}\n\t"
26342 #ifdef WOLFSSL_KEIL
26343         "sbcs	r3, r3, r5\n\t"
26344 #elif defined(__clang__)
26345         "sbcs	r3, r5\n\t"
26346 #else
26347         "sbc	r3, r5\n\t"
26348 #endif
26349 #ifdef WOLFSSL_KEIL
26350         "sbcs	r4, r4, r6\n\t"
26351 #elif defined(__clang__)
26352         "sbcs	r4, r6\n\t"
26353 #else
26354         "sbc	r4, r6\n\t"
26355 #endif
26356         "stm	%[r]!, {r3, r4}\n\t"
26357         "ldm	%[b]!, {r5, r6}\n\t"
26358         "ldm	%[a]!, {r3, r4}\n\t"
26359 #ifdef WOLFSSL_KEIL
26360         "sbcs	r3, r3, r5\n\t"
26361 #elif defined(__clang__)
26362         "sbcs	r3, r5\n\t"
26363 #else
26364         "sbc	r3, r5\n\t"
26365 #endif
26366 #ifdef WOLFSSL_KEIL
26367         "sbcs	r4, r4, r6\n\t"
26368 #elif defined(__clang__)
26369         "sbcs	r4, r6\n\t"
26370 #else
26371         "sbc	r4, r6\n\t"
26372 #endif
26373         "stm	%[r]!, {r3, r4}\n\t"
26374         "ldm	%[b]!, {r5, r6}\n\t"
26375         "ldm	%[a]!, {r3, r4}\n\t"
26376 #ifdef WOLFSSL_KEIL
26377         "sbcs	r3, r3, r5\n\t"
26378 #elif defined(__clang__)
26379         "sbcs	r3, r5\n\t"
26380 #else
26381         "sbc	r3, r5\n\t"
26382 #endif
26383 #ifdef WOLFSSL_KEIL
26384         "sbcs	r4, r4, r6\n\t"
26385 #elif defined(__clang__)
26386         "sbcs	r4, r6\n\t"
26387 #else
26388         "sbc	r4, r6\n\t"
26389 #endif
26390         "stm	%[r]!, {r3, r4}\n\t"
26391         "ldm	%[b]!, {r5, r6}\n\t"
26392         "ldm	%[a]!, {r3, r4}\n\t"
26393 #ifdef WOLFSSL_KEIL
26394         "sbcs	r3, r3, r5\n\t"
26395 #elif defined(__clang__)
26396         "sbcs	r3, r5\n\t"
26397 #else
26398         "sbc	r3, r5\n\t"
26399 #endif
26400 #ifdef WOLFSSL_KEIL
26401         "sbcs	r4, r4, r6\n\t"
26402 #elif defined(__clang__)
26403         "sbcs	r4, r6\n\t"
26404 #else
26405         "sbc	r4, r6\n\t"
26406 #endif
26407         "stm	%[r]!, {r3, r4}\n\t"
26408         "ldm	%[b]!, {r5, r6}\n\t"
26409         "ldm	%[a]!, {r3, r4}\n\t"
26410 #ifdef WOLFSSL_KEIL
26411         "sbcs	r3, r3, r5\n\t"
26412 #elif defined(__clang__)
26413         "sbcs	r3, r5\n\t"
26414 #else
26415         "sbc	r3, r5\n\t"
26416 #endif
26417 #ifdef WOLFSSL_KEIL
26418         "sbcs	r4, r4, r6\n\t"
26419 #elif defined(__clang__)
26420         "sbcs	r4, r6\n\t"
26421 #else
26422         "sbc	r4, r6\n\t"
26423 #endif
26424         "stm	%[r]!, {r3, r4}\n\t"
26425         "ldm	%[b]!, {r5, r6}\n\t"
26426         "ldm	%[a]!, {r3, r4}\n\t"
26427 #ifdef WOLFSSL_KEIL
26428         "sbcs	r3, r3, r5\n\t"
26429 #elif defined(__clang__)
26430         "sbcs	r3, r5\n\t"
26431 #else
26432         "sbc	r3, r5\n\t"
26433 #endif
26434 #ifdef WOLFSSL_KEIL
26435         "sbcs	r4, r4, r6\n\t"
26436 #elif defined(__clang__)
26437         "sbcs	r4, r6\n\t"
26438 #else
26439         "sbc	r4, r6\n\t"
26440 #endif
26441         "stm	%[r]!, {r3, r4}\n\t"
26442         "ldm	%[b]!, {r5, r6}\n\t"
26443         "ldm	%[a]!, {r3, r4}\n\t"
26444 #ifdef WOLFSSL_KEIL
26445         "sbcs	r3, r3, r5\n\t"
26446 #elif defined(__clang__)
26447         "sbcs	r3, r5\n\t"
26448 #else
26449         "sbc	r3, r5\n\t"
26450 #endif
26451 #ifdef WOLFSSL_KEIL
26452         "sbcs	r4, r4, r6\n\t"
26453 #elif defined(__clang__)
26454         "sbcs	r4, r6\n\t"
26455 #else
26456         "sbc	r4, r6\n\t"
26457 #endif
26458         "stm	%[r]!, {r3, r4}\n\t"
26459 #ifdef WOLFSSL_KEIL
26460         "sbcs	%[r], %[r], %[r]\n\t"
26461 #elif defined(__clang__)
26462         "sbcs	%[r], %[r]\n\t"
26463 #else
26464         "sbc	%[r], %[r]\n\t"
26465 #endif
26466         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
26467         :
26468         : "memory", "r3", "r4", "r5", "r6"
26469     );
26470     return (uint32_t)(size_t)r;
26471 }
26472 
26473 #endif /* WOLFSSL_SP_SMALL */
26474 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
26475  *
26476  * d1   The high order half of the number to divide.
26477  * d0   The low order half of the number to divide.
26478  * div  The dividend.
26479  * returns the result of the division.
26480  *
26481  * Note that this is an approximate div. It may give an answer 1 larger.
26482  */
div_2048_word_64(sp_digit d1,sp_digit d0,sp_digit div)26483 SP_NOINLINE static sp_digit div_2048_word_64(sp_digit d1, sp_digit d0,
26484         sp_digit div)
26485 {
26486     __asm__ __volatile__ (
26487         "movs	r3, #0\n\t"
26488 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26489         "lsrs	r5, %[div], #1\n\t"
26490 #else
26491         "lsr	r5, %[div], #1\n\t"
26492 #endif
26493 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26494         "adds	r5, r5, #1\n\t"
26495 #else
26496         "add	r5, r5, #1\n\t"
26497 #endif
26498         "mov	r8, %[d0]\n\t"
26499         "mov	r9, %[d1]\n\t"
26500         "# Do top 32\n\t"
26501         "movs	r6, r5\n\t"
26502 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26503         "subs	r6, r6, %[d1]\n\t"
26504 #else
26505         "sub	r6, r6, %[d1]\n\t"
26506 #endif
26507 #ifdef WOLFSSL_KEIL
26508         "sbcs	r6, r6, r6\n\t"
26509 #elif defined(__clang__)
26510         "sbcs	r6, r6\n\t"
26511 #else
26512         "sbc	r6, r6\n\t"
26513 #endif
26514 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26515         "adds	r3, r3, r3\n\t"
26516 #else
26517         "add	r3, r3, r3\n\t"
26518 #endif
26519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26520         "subs	r3, r3, r6\n\t"
26521 #else
26522         "sub	r3, r3, r6\n\t"
26523 #endif
26524 #ifdef WOLFSSL_KEIL
26525         "ands	r6, r6, r5\n\t"
26526 #elif defined(__clang__)
26527         "ands	r6, r5\n\t"
26528 #else
26529         "and	r6, r5\n\t"
26530 #endif
26531 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26532         "subs	%[d1], %[d1], r6\n\t"
26533 #else
26534         "sub	%[d1], %[d1], r6\n\t"
26535 #endif
26536         "movs	r4, #29\n\t"
26537         "\n"
26538     "L_div_2048_word_64_loop_%=:\n\t"
26539 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26540         "lsls	%[d0], %[d0], #1\n\t"
26541 #else
26542         "lsl	%[d0], %[d0], #1\n\t"
26543 #endif
26544 #ifdef WOLFSSL_KEIL
26545         "adcs	%[d1], %[d1], %[d1]\n\t"
26546 #elif defined(__clang__)
26547         "adcs	%[d1], %[d1]\n\t"
26548 #else
26549         "adc	%[d1], %[d1]\n\t"
26550 #endif
26551         "movs	r6, r5\n\t"
26552 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26553         "subs	r6, r6, %[d1]\n\t"
26554 #else
26555         "sub	r6, r6, %[d1]\n\t"
26556 #endif
26557 #ifdef WOLFSSL_KEIL
26558         "sbcs	r6, r6, r6\n\t"
26559 #elif defined(__clang__)
26560         "sbcs	r6, r6\n\t"
26561 #else
26562         "sbc	r6, r6\n\t"
26563 #endif
26564 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26565         "adds	r3, r3, r3\n\t"
26566 #else
26567         "add	r3, r3, r3\n\t"
26568 #endif
26569 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26570         "subs	r3, r3, r6\n\t"
26571 #else
26572         "sub	r3, r3, r6\n\t"
26573 #endif
26574 #ifdef WOLFSSL_KEIL
26575         "ands	r6, r6, r5\n\t"
26576 #elif defined(__clang__)
26577         "ands	r6, r5\n\t"
26578 #else
26579         "and	r6, r5\n\t"
26580 #endif
26581 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26582         "subs	%[d1], %[d1], r6\n\t"
26583 #else
26584         "sub	%[d1], %[d1], r6\n\t"
26585 #endif
26586 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26587         "subs	r4, r4, #1\n\t"
26588 #else
26589         "sub	r4, r4, #1\n\t"
26590 #endif
26591         "bpl	L_div_2048_word_64_loop_%=\n\t"
26592         "movs	r7, #0\n\t"
26593 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26594         "adds	r3, r3, r3\n\t"
26595 #else
26596         "add	r3, r3, r3\n\t"
26597 #endif
26598 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26599         "adds	r3, r3, #1\n\t"
26600 #else
26601         "add	r3, r3, #1\n\t"
26602 #endif
26603         "# r * div - Start\n\t"
26604         "uxth	%[d1], r3\n\t"
26605         "uxth	r4, %[div]\n\t"
26606 #ifdef WOLFSSL_KEIL
26607         "muls	r4, %[d1], r4\n\t"
26608 #elif defined(__clang__)
26609         "muls	r4, %[d1]\n\t"
26610 #else
26611         "mul	r4, %[d1]\n\t"
26612 #endif
26613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26614         "lsrs	r6, %[div], #16\n\t"
26615 #else
26616         "lsr	r6, %[div], #16\n\t"
26617 #endif
26618 #ifdef WOLFSSL_KEIL
26619         "muls	%[d1], r6, %[d1]\n\t"
26620 #elif defined(__clang__)
26621         "muls	%[d1], r6\n\t"
26622 #else
26623         "mul	%[d1], r6\n\t"
26624 #endif
26625 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26626         "lsrs	r5, %[d1], #16\n\t"
26627 #else
26628         "lsr	r5, %[d1], #16\n\t"
26629 #endif
26630 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26631         "lsls	%[d1], %[d1], #16\n\t"
26632 #else
26633         "lsl	%[d1], %[d1], #16\n\t"
26634 #endif
26635 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26636         "adds	r4, r4, %[d1]\n\t"
26637 #else
26638         "add	r4, r4, %[d1]\n\t"
26639 #endif
26640 #ifdef WOLFSSL_KEIL
26641         "adcs	r5, r5, r7\n\t"
26642 #elif defined(__clang__)
26643         "adcs	r5, r7\n\t"
26644 #else
26645         "adc	r5, r7\n\t"
26646 #endif
26647 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26648         "lsrs	%[d1], r3, #16\n\t"
26649 #else
26650         "lsr	%[d1], r3, #16\n\t"
26651 #endif
26652 #ifdef WOLFSSL_KEIL
26653         "muls	r6, %[d1], r6\n\t"
26654 #elif defined(__clang__)
26655         "muls	r6, %[d1]\n\t"
26656 #else
26657         "mul	r6, %[d1]\n\t"
26658 #endif
26659 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26660         "adds	r5, r5, r6\n\t"
26661 #else
26662         "add	r5, r5, r6\n\t"
26663 #endif
26664         "uxth	r6, %[div]\n\t"
26665 #ifdef WOLFSSL_KEIL
26666         "muls	%[d1], r6, %[d1]\n\t"
26667 #elif defined(__clang__)
26668         "muls	%[d1], r6\n\t"
26669 #else
26670         "mul	%[d1], r6\n\t"
26671 #endif
26672 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26673         "lsrs	r6, %[d1], #16\n\t"
26674 #else
26675         "lsr	r6, %[d1], #16\n\t"
26676 #endif
26677 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26678         "lsls	%[d1], %[d1], #16\n\t"
26679 #else
26680         "lsl	%[d1], %[d1], #16\n\t"
26681 #endif
26682 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26683         "adds	r4, r4, %[d1]\n\t"
26684 #else
26685         "add	r4, r4, %[d1]\n\t"
26686 #endif
26687 #ifdef WOLFSSL_KEIL
26688         "adcs	r5, r5, r6\n\t"
26689 #elif defined(__clang__)
26690         "adcs	r5, r6\n\t"
26691 #else
26692         "adc	r5, r6\n\t"
26693 #endif
26694         "# r * div - Done\n\t"
26695         "mov	%[d1], r8\n\t"
26696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26697         "subs	%[d1], %[d1], r4\n\t"
26698 #else
26699         "sub	%[d1], %[d1], r4\n\t"
26700 #endif
26701         "movs	r4, %[d1]\n\t"
26702         "mov	%[d1], r9\n\t"
26703 #ifdef WOLFSSL_KEIL
26704         "sbcs	%[d1], %[d1], r5\n\t"
26705 #elif defined(__clang__)
26706         "sbcs	%[d1], r5\n\t"
26707 #else
26708         "sbc	%[d1], r5\n\t"
26709 #endif
26710         "movs	r5, %[d1]\n\t"
26711 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26712         "adds	r3, r3, r5\n\t"
26713 #else
26714         "add	r3, r3, r5\n\t"
26715 #endif
26716         "# r * div - Start\n\t"
26717         "uxth	%[d1], r3\n\t"
26718         "uxth	r4, %[div]\n\t"
26719 #ifdef WOLFSSL_KEIL
26720         "muls	r4, %[d1], r4\n\t"
26721 #elif defined(__clang__)
26722         "muls	r4, %[d1]\n\t"
26723 #else
26724         "mul	r4, %[d1]\n\t"
26725 #endif
26726 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26727         "lsrs	r6, %[div], #16\n\t"
26728 #else
26729         "lsr	r6, %[div], #16\n\t"
26730 #endif
26731 #ifdef WOLFSSL_KEIL
26732         "muls	%[d1], r6, %[d1]\n\t"
26733 #elif defined(__clang__)
26734         "muls	%[d1], r6\n\t"
26735 #else
26736         "mul	%[d1], r6\n\t"
26737 #endif
26738 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26739         "lsrs	r5, %[d1], #16\n\t"
26740 #else
26741         "lsr	r5, %[d1], #16\n\t"
26742 #endif
26743 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26744         "lsls	%[d1], %[d1], #16\n\t"
26745 #else
26746         "lsl	%[d1], %[d1], #16\n\t"
26747 #endif
26748 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26749         "adds	r4, r4, %[d1]\n\t"
26750 #else
26751         "add	r4, r4, %[d1]\n\t"
26752 #endif
26753 #ifdef WOLFSSL_KEIL
26754         "adcs	r5, r5, r7\n\t"
26755 #elif defined(__clang__)
26756         "adcs	r5, r7\n\t"
26757 #else
26758         "adc	r5, r7\n\t"
26759 #endif
26760 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26761         "lsrs	%[d1], r3, #16\n\t"
26762 #else
26763         "lsr	%[d1], r3, #16\n\t"
26764 #endif
26765 #ifdef WOLFSSL_KEIL
26766         "muls	r6, %[d1], r6\n\t"
26767 #elif defined(__clang__)
26768         "muls	r6, %[d1]\n\t"
26769 #else
26770         "mul	r6, %[d1]\n\t"
26771 #endif
26772 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26773         "adds	r5, r5, r6\n\t"
26774 #else
26775         "add	r5, r5, r6\n\t"
26776 #endif
26777         "uxth	r6, %[div]\n\t"
26778 #ifdef WOLFSSL_KEIL
26779         "muls	%[d1], r6, %[d1]\n\t"
26780 #elif defined(__clang__)
26781         "muls	%[d1], r6\n\t"
26782 #else
26783         "mul	%[d1], r6\n\t"
26784 #endif
26785 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26786         "lsrs	r6, %[d1], #16\n\t"
26787 #else
26788         "lsr	r6, %[d1], #16\n\t"
26789 #endif
26790 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26791         "lsls	%[d1], %[d1], #16\n\t"
26792 #else
26793         "lsl	%[d1], %[d1], #16\n\t"
26794 #endif
26795 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26796         "adds	r4, r4, %[d1]\n\t"
26797 #else
26798         "add	r4, r4, %[d1]\n\t"
26799 #endif
26800 #ifdef WOLFSSL_KEIL
26801         "adcs	r5, r5, r6\n\t"
26802 #elif defined(__clang__)
26803         "adcs	r5, r6\n\t"
26804 #else
26805         "adc	r5, r6\n\t"
26806 #endif
26807         "# r * div - Done\n\t"
26808         "mov	%[d1], r8\n\t"
26809         "mov	r6, r9\n\t"
26810 #ifdef WOLFSSL_KEIL
26811         "subs	r4, %[d1], r4\n\t"
26812 #else
26813 #ifdef __clang__
26814         "subs	r4, %[d1], r4\n\t"
26815 #else
26816         "sub	r4, %[d1], r4\n\t"
26817 #endif
26818 #endif
26819 #ifdef WOLFSSL_KEIL
26820         "sbcs	r6, r6, r5\n\t"
26821 #elif defined(__clang__)
26822         "sbcs	r6, r5\n\t"
26823 #else
26824         "sbc	r6, r5\n\t"
26825 #endif
26826         "movs	r5, r6\n\t"
26827 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26828         "adds	r3, r3, r5\n\t"
26829 #else
26830         "add	r3, r3, r5\n\t"
26831 #endif
26832         "# r * div - Start\n\t"
26833         "uxth	%[d1], r3\n\t"
26834         "uxth	r4, %[div]\n\t"
26835 #ifdef WOLFSSL_KEIL
26836         "muls	r4, %[d1], r4\n\t"
26837 #elif defined(__clang__)
26838         "muls	r4, %[d1]\n\t"
26839 #else
26840         "mul	r4, %[d1]\n\t"
26841 #endif
26842 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26843         "lsrs	r6, %[div], #16\n\t"
26844 #else
26845         "lsr	r6, %[div], #16\n\t"
26846 #endif
26847 #ifdef WOLFSSL_KEIL
26848         "muls	%[d1], r6, %[d1]\n\t"
26849 #elif defined(__clang__)
26850         "muls	%[d1], r6\n\t"
26851 #else
26852         "mul	%[d1], r6\n\t"
26853 #endif
26854 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26855         "lsrs	r5, %[d1], #16\n\t"
26856 #else
26857         "lsr	r5, %[d1], #16\n\t"
26858 #endif
26859 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26860         "lsls	%[d1], %[d1], #16\n\t"
26861 #else
26862         "lsl	%[d1], %[d1], #16\n\t"
26863 #endif
26864 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26865         "adds	r4, r4, %[d1]\n\t"
26866 #else
26867         "add	r4, r4, %[d1]\n\t"
26868 #endif
26869 #ifdef WOLFSSL_KEIL
26870         "adcs	r5, r5, r7\n\t"
26871 #elif defined(__clang__)
26872         "adcs	r5, r7\n\t"
26873 #else
26874         "adc	r5, r7\n\t"
26875 #endif
26876 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26877         "lsrs	%[d1], r3, #16\n\t"
26878 #else
26879         "lsr	%[d1], r3, #16\n\t"
26880 #endif
26881 #ifdef WOLFSSL_KEIL
26882         "muls	r6, %[d1], r6\n\t"
26883 #elif defined(__clang__)
26884         "muls	r6, %[d1]\n\t"
26885 #else
26886         "mul	r6, %[d1]\n\t"
26887 #endif
26888 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26889         "adds	r5, r5, r6\n\t"
26890 #else
26891         "add	r5, r5, r6\n\t"
26892 #endif
26893         "uxth	r6, %[div]\n\t"
26894 #ifdef WOLFSSL_KEIL
26895         "muls	%[d1], r6, %[d1]\n\t"
26896 #elif defined(__clang__)
26897         "muls	%[d1], r6\n\t"
26898 #else
26899         "mul	%[d1], r6\n\t"
26900 #endif
26901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26902         "lsrs	r6, %[d1], #16\n\t"
26903 #else
26904         "lsr	r6, %[d1], #16\n\t"
26905 #endif
26906 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26907         "lsls	%[d1], %[d1], #16\n\t"
26908 #else
26909         "lsl	%[d1], %[d1], #16\n\t"
26910 #endif
26911 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26912         "adds	r4, r4, %[d1]\n\t"
26913 #else
26914         "add	r4, r4, %[d1]\n\t"
26915 #endif
26916 #ifdef WOLFSSL_KEIL
26917         "adcs	r5, r5, r6\n\t"
26918 #elif defined(__clang__)
26919         "adcs	r5, r6\n\t"
26920 #else
26921         "adc	r5, r6\n\t"
26922 #endif
26923         "# r * div - Done\n\t"
26924         "mov	%[d1], r8\n\t"
26925         "mov	r6, r9\n\t"
26926 #ifdef WOLFSSL_KEIL
26927         "subs	r4, %[d1], r4\n\t"
26928 #else
26929 #ifdef __clang__
26930         "subs	r4, %[d1], r4\n\t"
26931 #else
26932         "sub	r4, %[d1], r4\n\t"
26933 #endif
26934 #endif
26935 #ifdef WOLFSSL_KEIL
26936         "sbcs	r6, r6, r5\n\t"
26937 #elif defined(__clang__)
26938         "sbcs	r6, r5\n\t"
26939 #else
26940         "sbc	r6, r5\n\t"
26941 #endif
26942         "movs	r5, r6\n\t"
26943 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26944         "adds	r3, r3, r5\n\t"
26945 #else
26946         "add	r3, r3, r5\n\t"
26947 #endif
26948         "movs	r6, %[div]\n\t"
26949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26950         "subs	r6, r6, r4\n\t"
26951 #else
26952         "sub	r6, r6, r4\n\t"
26953 #endif
26954 #ifdef WOLFSSL_KEIL
26955         "sbcs	r6, r6, r6\n\t"
26956 #elif defined(__clang__)
26957         "sbcs	r6, r6\n\t"
26958 #else
26959         "sbc	r6, r6\n\t"
26960 #endif
26961 #if defined(__clang__) || defined(WOLFSSL_KEIL)
26962         "subs	r3, r3, r6\n\t"
26963 #else
26964         "sub	r3, r3, r6\n\t"
26965 #endif
26966         "movs	%[d1], r3\n\t"
26967         : [d1] "+r" (d1), [d0] "+r" (d0), [div] "+r" (div)
26968         :
26969         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
26970     );
26971     return (uint32_t)(size_t)d1;
26972 }
26973 
26974 /* Divide d in a and put remainder into r (m*d + r = a)
26975  * m is not calculated as it is not needed at this time.
26976  *
26977  * a  Number to be divided.
26978  * d  Number to divide with.
26979  * m  Multiplier result.
26980  * r  Remainder from the division.
26981  * returns MP_OKAY indicating success.
26982  */
sp_2048_div_64_cond(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)26983 static WC_INLINE int sp_2048_div_64_cond(const sp_digit* a, const sp_digit* d, sp_digit* m,
26984         sp_digit* r)
26985 {
26986     sp_digit t1[128], t2[65];
26987     sp_digit div, r1;
26988     int i;
26989 
26990     (void)m;
26991 
26992     div = d[63];
26993     XMEMCPY(t1, a, sizeof(*t1) * 2 * 64);
26994     for (i=63; i>=0; i--) {
26995         sp_digit hi = t1[64 + i] - (t1[64 + i] == div);
26996         r1 = div_2048_word_64(hi, t1[64 + i - 1], div);
26997 
26998         sp_2048_mul_d_64(t2, d, r1);
26999         t1[64 + i] += sp_2048_sub_in_place_64(&t1[i], t2);
27000         t1[64 + i] -= t2[64];
27001         if (t1[64 + i] != 0) {
27002             t1[64 + i] += sp_2048_add_64(&t1[i], &t1[i], d);
27003             if (t1[64 + i] != 0)
27004                 t1[64 + i] += sp_2048_add_64(&t1[i], &t1[i], d);
27005         }
27006     }
27007 
27008     for (i = 63; i > 0; i--) {
27009         if (t1[i] != d[i])
27010             break;
27011     }
27012     if (t1[i] >= d[i]) {
27013         sp_2048_sub_64(r, t1, d);
27014     }
27015     else {
27016         XMEMCPY(r, t1, sizeof(*t1) * 64);
27017     }
27018 
27019     return MP_OKAY;
27020 }
27021 
27022 /* Reduce a modulo m into r. (r = a mod m)
27023  *
27024  * r  A single precision number that is the reduced result.
27025  * a  A single precision number that is to be reduced.
27026  * m  A single precision number that is the modulus to reduce with.
27027  * returns MP_OKAY indicating success.
27028  */
sp_2048_mod_64_cond(sp_digit * r,const sp_digit * a,const sp_digit * m)27029 static WC_INLINE int sp_2048_mod_64_cond(sp_digit* r, const sp_digit* a, const sp_digit* m)
27030 {
27031     return sp_2048_div_64_cond(a, m, NULL, r);
27032 }
27033 
27034 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
27035 /* AND m into each word of a and store in r.
27036  *
27037  * r  A single precision integer.
27038  * a  A single precision integer.
27039  * m  Mask to AND against each digit.
27040  */
sp_2048_mask_64(sp_digit * r,const sp_digit * a,sp_digit m)27041 static void sp_2048_mask_64(sp_digit* r, const sp_digit* a, sp_digit m)
27042 {
27043 #ifdef WOLFSSL_SP_SMALL
27044     int i;
27045 
27046     for (i=0; i<64; i++) {
27047         r[i] = a[i] & m;
27048     }
27049 #else
27050     int i;
27051 
27052     for (i = 0; i < 64; i += 8) {
27053         r[i+0] = a[i+0] & m;
27054         r[i+1] = a[i+1] & m;
27055         r[i+2] = a[i+2] & m;
27056         r[i+3] = a[i+3] & m;
27057         r[i+4] = a[i+4] & m;
27058         r[i+5] = a[i+5] & m;
27059         r[i+6] = a[i+6] & m;
27060         r[i+7] = a[i+7] & m;
27061     }
27062 #endif
27063 }
27064 
27065 /* Compare a with b in constant time.
27066  *
27067  * a  A single precision integer.
27068  * b  A single precision integer.
27069  * return -ve, 0 or +ve if a is less than, equal to or greater than b
27070  * respectively.
27071  */
sp_2048_cmp_64(const sp_digit * a,const sp_digit * b)27072 SP_NOINLINE static sp_int32 sp_2048_cmp_64(const sp_digit* a, const sp_digit* b)
27073 {
27074     __asm__ __volatile__ (
27075         "movs	r2, #0\n\t"
27076         "movs	r3, #0\n\t"
27077 #if defined(__clang__) || defined(WOLFSSL_KEIL)
27078         "mvns	r3, r3\n\t"
27079 #else
27080         "mvn	r3, r3\n\t"
27081 #endif
27082         "movs	r6, #0xfc\n\t"
27083         "\n"
27084     "L_sp_2048_cmp_64_words_%=:\n\t"
27085         "ldr	r7, [%[a], r6]\n\t"
27086         "ldr	r5, [%[b], r6]\n\t"
27087 #ifdef WOLFSSL_KEIL
27088         "ands	r7, r7, r3\n\t"
27089 #elif defined(__clang__)
27090         "ands	r7, r3\n\t"
27091 #else
27092         "and	r7, r3\n\t"
27093 #endif
27094 #ifdef WOLFSSL_KEIL
27095         "ands	r5, r5, r3\n\t"
27096 #elif defined(__clang__)
27097         "ands	r5, r3\n\t"
27098 #else
27099         "and	r5, r3\n\t"
27100 #endif
27101         "movs	r4, r7\n\t"
27102 #if defined(__clang__) || defined(WOLFSSL_KEIL)
27103         "subs	r7, r7, r5\n\t"
27104 #else
27105         "sub	r7, r7, r5\n\t"
27106 #endif
27107 #ifdef WOLFSSL_KEIL
27108         "sbcs	r7, r7, r7\n\t"
27109 #elif defined(__clang__)
27110         "sbcs	r7, r7\n\t"
27111 #else
27112         "sbc	r7, r7\n\t"
27113 #endif
27114 #if defined(__clang__) || defined(WOLFSSL_KEIL)
27115         "adds	r2, r2, r7\n\t"
27116 #else
27117         "add	r2, r2, r7\n\t"
27118 #endif
27119 #if defined(__clang__) || defined(WOLFSSL_KEIL)
27120         "mvns	r7, r7\n\t"
27121 #else
27122         "mvn	r7, r7\n\t"
27123 #endif
27124 #ifdef WOLFSSL_KEIL
27125         "ands	r3, r3, r7\n\t"
27126 #elif defined(__clang__)
27127         "ands	r3, r7\n\t"
27128 #else
27129         "and	r3, r7\n\t"
27130 #endif
27131 #if defined(__clang__) || defined(WOLFSSL_KEIL)
27132         "subs	r5, r5, r4\n\t"
27133 #else
27134         "sub	r5, r5, r4\n\t"
27135 #endif
27136 #ifdef WOLFSSL_KEIL
27137         "sbcs	r7, r7, r7\n\t"
27138 #elif defined(__clang__)
27139         "sbcs	r7, r7\n\t"
27140 #else
27141         "sbc	r7, r7\n\t"
27142 #endif
27143 #if defined(__clang__) || defined(WOLFSSL_KEIL)
27144         "subs	r2, r2, r7\n\t"
27145 #else
27146         "sub	r2, r2, r7\n\t"
27147 #endif
27148 #if defined(__clang__) || defined(WOLFSSL_KEIL)
27149         "mvns	r7, r7\n\t"
27150 #else
27151         "mvn	r7, r7\n\t"
27152 #endif
27153 #ifdef WOLFSSL_KEIL
27154         "ands	r3, r3, r7\n\t"
27155 #elif defined(__clang__)
27156         "ands	r3, r7\n\t"
27157 #else
27158         "and	r3, r7\n\t"
27159 #endif
27160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
27161         "subs	r6, r6, #4\n\t"
27162 #else
27163         "sub	r6, r6, #4\n\t"
27164 #endif
27165         "cmp	r6, #0\n\t"
27166         "bge	L_sp_2048_cmp_64_words_%=\n\t"
27167         "movs	%[a], r2\n\t"
27168         : [a] "+r" (a), [b] "+r" (b)
27169         :
27170         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
27171     );
27172     return (uint32_t)(size_t)a;
27173 }
27174 
27175 /* Divide d in a and put remainder into r (m*d + r = a)
27176  * m is not calculated as it is not needed at this time.
27177  *
27178  * a  Number to be divided.
27179  * d  Number to divide with.
27180  * m  Multiplier result.
27181  * r  Remainder from the division.
27182  * returns MP_OKAY indicating success.
27183  */
sp_2048_div_64(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)27184 static WC_INLINE int sp_2048_div_64(const sp_digit* a, const sp_digit* d, sp_digit* m,
27185         sp_digit* r)
27186 {
27187     sp_digit t1[128], t2[65];
27188     sp_digit div, r1;
27189     int i;
27190 
27191     (void)m;
27192 
27193     div = d[63];
27194     XMEMCPY(t1, a, sizeof(*t1) * 2 * 64);
27195     for (i=63; i>=0; i--) {
27196         sp_digit hi = t1[64 + i] - (t1[64 + i] == div);
27197         r1 = div_2048_word_64(hi, t1[64 + i - 1], div);
27198 
27199         sp_2048_mul_d_64(t2, d, r1);
27200         t1[64 + i] += sp_2048_sub_in_place_64(&t1[i], t2);
27201         t1[64 + i] -= t2[64];
27202         sp_2048_mask_64(t2, d, t1[64 + i]);
27203         t1[64 + i] += sp_2048_add_64(&t1[i], &t1[i], t2);
27204         sp_2048_mask_64(t2, d, t1[64 + i]);
27205         t1[64 + i] += sp_2048_add_64(&t1[i], &t1[i], t2);
27206     }
27207 
27208     r1 = sp_2048_cmp_64(t1, d) >= 0;
27209     sp_2048_cond_sub_64(r, t1, d, (sp_digit)0 - r1);
27210 
27211     return MP_OKAY;
27212 }
27213 
27214 /* Reduce a modulo m into r. (r = a mod m)
27215  *
27216  * r  A single precision number that is the reduced result.
27217  * a  A single precision number that is to be reduced.
27218  * m  A single precision number that is the modulus to reduce with.
27219  * returns MP_OKAY indicating success.
27220  */
sp_2048_mod_64(sp_digit * r,const sp_digit * a,const sp_digit * m)27221 static WC_INLINE int sp_2048_mod_64(sp_digit* r, const sp_digit* a, const sp_digit* m)
27222 {
27223     return sp_2048_div_64(a, m, NULL, r);
27224 }
27225 
27226 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
27227                                                      defined(WOLFSSL_HAVE_SP_DH)
27228 #ifdef WOLFSSL_SP_SMALL
27229 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
27230  *
27231  * r     A single precision number that is the result of the operation.
27232  * a     A single precision number being exponentiated.
27233  * e     A single precision number that is the exponent.
27234  * bits  The number of bits in the exponent.
27235  * m     A single precision number that is the modulus.
27236  * returns  0 on success.
27237  * returns  MEMORY_E on dynamic memory allocation failure.
27238  * returns  MP_VAL when base is even or exponent is 0.
27239  */
sp_2048_mod_exp_64(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)27240 static int sp_2048_mod_exp_64(sp_digit* r, const sp_digit* a, const sp_digit* e,
27241         int bits, const sp_digit* m, int reduceA)
27242 {
27243 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27244     sp_digit* td = NULL;
27245 #else
27246     sp_digit td[8 * 128];
27247 #endif
27248     sp_digit* t[8];
27249     sp_digit* norm = NULL;
27250     sp_digit mp = 1;
27251     sp_digit n;
27252     sp_digit mask;
27253     int i;
27254     int c;
27255     byte y;
27256     int err = MP_OKAY;
27257 
27258     if ((m[0] & 1) == 0) {
27259         err = MP_VAL;
27260     }
27261     else if (bits == 0) {
27262         err = MP_VAL;
27263     }
27264 
27265 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27266     if (err == MP_OKAY) {
27267         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (8 * 128), NULL,
27268                                 DYNAMIC_TYPE_TMP_BUFFER);
27269         if (td == NULL)
27270             err = MEMORY_E;
27271     }
27272 #endif
27273 
27274     if (err == MP_OKAY) {
27275         norm = td;
27276         for (i=0; i<8; i++) {
27277             t[i] = td + i * 128;
27278         }
27279 
27280         sp_2048_mont_setup(m, &mp);
27281         sp_2048_mont_norm_64(norm, m);
27282 
27283         XMEMSET(t[1], 0, sizeof(sp_digit) * 64U);
27284         if (reduceA != 0) {
27285             err = sp_2048_mod_64(t[1] + 64, a, m);
27286             if (err == MP_OKAY) {
27287                 err = sp_2048_mod_64(t[1], t[1], m);
27288             }
27289         }
27290         else {
27291             XMEMCPY(t[1] + 64, a, sizeof(sp_digit) * 64);
27292             err = sp_2048_mod_64(t[1], t[1], m);
27293         }
27294     }
27295 
27296     if (err == MP_OKAY) {
27297         sp_2048_mont_sqr_64(t[ 2], t[ 1], m, mp);
27298         sp_2048_mont_mul_64(t[ 3], t[ 2], t[ 1], m, mp);
27299         sp_2048_mont_sqr_64(t[ 4], t[ 2], m, mp);
27300         sp_2048_mont_mul_64(t[ 5], t[ 3], t[ 2], m, mp);
27301         sp_2048_mont_sqr_64(t[ 6], t[ 3], m, mp);
27302         sp_2048_mont_mul_64(t[ 7], t[ 4], t[ 3], m, mp);
27303 
27304         i = (bits - 1) / 32;
27305         n = e[i--];
27306         c = bits & 31;
27307         if (c == 0) {
27308             c = 32;
27309         }
27310         c -= bits % 3;
27311         if (c == 32) {
27312             c = 29;
27313         }
27314         if (c < 0) {
27315             /* Number of bits in top word is less than number needed. */
27316             c = -c;
27317             y = (byte)(n << c);
27318             n = e[i--];
27319             y |= (byte)(n >> (64 - c));
27320             n <<= c;
27321             c = 64 - c;
27322         }
27323         else {
27324             y = (byte)(n >> c);
27325             n <<= 32 - c;
27326         }
27327         XMEMCPY(r, t[y], sizeof(sp_digit) * 64);
27328         for (; i>=0 || c>=3; ) {
27329             if (c == 0) {
27330                 n = e[i--];
27331                 y = (byte)(n >> 29);
27332                 n <<= 3;
27333                 c = 29;
27334             }
27335             else if (c < 3) {
27336                 y = (byte)(n >> 29);
27337                 n = e[i--];
27338                 c = 3 - c;
27339                 y |= (byte)(n >> (32 - c));
27340                 n <<= c;
27341                 c = 32 - c;
27342             }
27343             else {
27344                 y = (byte)((n >> 29) & 0x7);
27345                 n <<= 3;
27346                 c -= 3;
27347             }
27348 
27349             sp_2048_mont_sqr_64(r, r, m, mp);
27350             sp_2048_mont_sqr_64(r, r, m, mp);
27351             sp_2048_mont_sqr_64(r, r, m, mp);
27352 
27353             sp_2048_mont_mul_64(r, r, t[y], m, mp);
27354         }
27355 
27356         XMEMSET(&r[64], 0, sizeof(sp_digit) * 64U);
27357         sp_2048_mont_reduce_64(r, m, mp);
27358 
27359         mask = 0 - (sp_2048_cmp_64(r, m) >= 0);
27360         sp_2048_cond_sub_64(r, r, m, mask);
27361     }
27362 
27363 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27364     if (td != NULL)
27365         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
27366 #endif
27367 
27368     return err;
27369 }
27370 #else
27371 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
27372  *
27373  * r     A single precision number that is the result of the operation.
27374  * a     A single precision number being exponentiated.
27375  * e     A single precision number that is the exponent.
27376  * bits  The number of bits in the exponent.
27377  * m     A single precision number that is the modulus.
27378  * returns  0 on success.
27379  * returns  MEMORY_E on dynamic memory allocation failure.
27380  * returns  MP_VAL when base is even or exponent is 0.
27381  */
sp_2048_mod_exp_64(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)27382 static int sp_2048_mod_exp_64(sp_digit* r, const sp_digit* a, const sp_digit* e,
27383         int bits, const sp_digit* m, int reduceA)
27384 {
27385 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27386     sp_digit* td = NULL;
27387 #else
27388     sp_digit td[16 * 128];
27389 #endif
27390     sp_digit* t[16];
27391     sp_digit* norm = NULL;
27392     sp_digit mp = 1;
27393     sp_digit n;
27394     sp_digit mask;
27395     int i;
27396     int c;
27397     byte y;
27398     int err = MP_OKAY;
27399 
27400     if ((m[0] & 1) == 0) {
27401         err = MP_VAL;
27402     }
27403     else if (bits == 0) {
27404         err = MP_VAL;
27405     }
27406 
27407 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27408     if (err == MP_OKAY) {
27409         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (16 * 128), NULL,
27410                                 DYNAMIC_TYPE_TMP_BUFFER);
27411         if (td == NULL)
27412             err = MEMORY_E;
27413     }
27414 #endif
27415 
27416     if (err == MP_OKAY) {
27417         norm = td;
27418         for (i=0; i<16; i++) {
27419             t[i] = td + i * 128;
27420         }
27421 
27422         sp_2048_mont_setup(m, &mp);
27423         sp_2048_mont_norm_64(norm, m);
27424 
27425         XMEMSET(t[1], 0, sizeof(sp_digit) * 64U);
27426         if (reduceA != 0) {
27427             err = sp_2048_mod_64(t[1] + 64, a, m);
27428             if (err == MP_OKAY) {
27429                 err = sp_2048_mod_64(t[1], t[1], m);
27430             }
27431         }
27432         else {
27433             XMEMCPY(t[1] + 64, a, sizeof(sp_digit) * 64);
27434             err = sp_2048_mod_64(t[1], t[1], m);
27435         }
27436     }
27437 
27438     if (err == MP_OKAY) {
27439         sp_2048_mont_sqr_64(t[ 2], t[ 1], m, mp);
27440         sp_2048_mont_mul_64(t[ 3], t[ 2], t[ 1], m, mp);
27441         sp_2048_mont_sqr_64(t[ 4], t[ 2], m, mp);
27442         sp_2048_mont_mul_64(t[ 5], t[ 3], t[ 2], m, mp);
27443         sp_2048_mont_sqr_64(t[ 6], t[ 3], m, mp);
27444         sp_2048_mont_mul_64(t[ 7], t[ 4], t[ 3], m, mp);
27445         sp_2048_mont_sqr_64(t[ 8], t[ 4], m, mp);
27446         sp_2048_mont_mul_64(t[ 9], t[ 5], t[ 4], m, mp);
27447         sp_2048_mont_sqr_64(t[10], t[ 5], m, mp);
27448         sp_2048_mont_mul_64(t[11], t[ 6], t[ 5], m, mp);
27449         sp_2048_mont_sqr_64(t[12], t[ 6], m, mp);
27450         sp_2048_mont_mul_64(t[13], t[ 7], t[ 6], m, mp);
27451         sp_2048_mont_sqr_64(t[14], t[ 7], m, mp);
27452         sp_2048_mont_mul_64(t[15], t[ 8], t[ 7], m, mp);
27453 
27454         i = (bits - 1) / 32;
27455         n = e[i--];
27456         c = bits & 31;
27457         if (c == 0) {
27458             c = 32;
27459         }
27460         c -= bits % 4;
27461         if (c == 32) {
27462             c = 28;
27463         }
27464         if (c < 0) {
27465             /* Number of bits in top word is less than number needed. */
27466             c = -c;
27467             y = (byte)(n << c);
27468             n = e[i--];
27469             y |= (byte)(n >> (64 - c));
27470             n <<= c;
27471             c = 64 - c;
27472         }
27473         else {
27474             y = (byte)(n >> c);
27475             n <<= 32 - c;
27476         }
27477         XMEMCPY(r, t[y], sizeof(sp_digit) * 64);
27478         for (; i>=0 || c>=4; ) {
27479             if (c == 0) {
27480                 n = e[i--];
27481                 y = (byte)(n >> 28);
27482                 n <<= 4;
27483                 c = 28;
27484             }
27485             else if (c < 4) {
27486                 y = (byte)(n >> 28);
27487                 n = e[i--];
27488                 c = 4 - c;
27489                 y |= (byte)(n >> (32 - c));
27490                 n <<= c;
27491                 c = 32 - c;
27492             }
27493             else {
27494                 y = (byte)((n >> 28) & 0xf);
27495                 n <<= 4;
27496                 c -= 4;
27497             }
27498 
27499             sp_2048_mont_sqr_64(r, r, m, mp);
27500             sp_2048_mont_sqr_64(r, r, m, mp);
27501             sp_2048_mont_sqr_64(r, r, m, mp);
27502             sp_2048_mont_sqr_64(r, r, m, mp);
27503 
27504             sp_2048_mont_mul_64(r, r, t[y], m, mp);
27505         }
27506 
27507         XMEMSET(&r[64], 0, sizeof(sp_digit) * 64U);
27508         sp_2048_mont_reduce_64(r, m, mp);
27509 
27510         mask = 0 - (sp_2048_cmp_64(r, m) >= 0);
27511         sp_2048_cond_sub_64(r, r, m, mask);
27512     }
27513 
27514 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27515     if (td != NULL)
27516         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
27517 #endif
27518 
27519     return err;
27520 }
27521 #endif /* WOLFSSL_SP_SMALL */
27522 #endif /* (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
27523 
27524 #endif /* (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
27525 #ifdef WOLFSSL_HAVE_SP_RSA
27526 /* RSA public key operation.
27527  *
27528  * in      Array of bytes representing the number to exponentiate, base.
27529  * inLen   Number of bytes in base.
27530  * em      Public exponent.
27531  * mm      Modulus.
27532  * out     Buffer to hold big-endian bytes of exponentiation result.
27533  *         Must be at least 256 bytes long.
27534  * outLen  Number of bytes in result.
27535  * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
27536  * an array is too long and MEMORY_E when dynamic memory allocation fails.
27537  */
sp_RsaPublic_2048(const byte * in,word32 inLen,const mp_int * em,const mp_int * mm,byte * out,word32 * outLen)27538 int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em,
27539     const mp_int* mm, byte* out, word32* outLen)
27540 {
27541 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27542     sp_digit* a = NULL;
27543 #else
27544     sp_digit a[64 * 5];
27545 #endif
27546     sp_digit* m = NULL;
27547     sp_digit* r = NULL;
27548     sp_digit *ah = NULL;
27549     sp_digit e[1] = {0};
27550     int err = MP_OKAY;
27551 
27552     if (*outLen < 256) {
27553         err = MP_TO_E;
27554     }
27555     else if (mp_count_bits(em) > 32 || inLen > 256 ||
27556                                                      mp_count_bits(mm) != 2048) {
27557         err = MP_READ_E;
27558     }
27559     else if (mp_iseven(mm)) {
27560         err = MP_VAL;
27561     }
27562 
27563 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27564     if (err == MP_OKAY) {
27565         a = (sp_digit*)XMALLOC(sizeof(sp_digit) * 64 * 5, NULL,
27566                                                               DYNAMIC_TYPE_RSA);
27567         if (a == NULL)
27568             err = MEMORY_E;
27569     }
27570 #endif
27571 
27572     if (err == MP_OKAY) {
27573         r = a + 64 * 2;
27574         m = r + 64 * 2;
27575         ah = a + 64;
27576 
27577         sp_2048_from_bin(ah, 64, in, inLen);
27578 #if DIGIT_BIT >= 32
27579         e[0] = em->dp[0];
27580 #else
27581         e[0] = em->dp[0];
27582         if (em->used > 1) {
27583             e[0] |= ((sp_digit)em->dp[1]) << DIGIT_BIT;
27584         }
27585 #endif
27586         if (e[0] == 0) {
27587             err = MP_EXPTMOD_E;
27588         }
27589     }
27590     if (err == MP_OKAY) {
27591         sp_2048_from_mp(m, 64, mm);
27592 
27593         if (e[0] == 0x3) {
27594             if (err == MP_OKAY) {
27595                 sp_2048_sqr_64(r, ah);
27596                 err = sp_2048_mod_64_cond(r, r, m);
27597             }
27598             if (err == MP_OKAY) {
27599                 sp_2048_mul_64(r, ah, r);
27600                 err = sp_2048_mod_64_cond(r, r, m);
27601             }
27602         }
27603         else {
27604             int i;
27605             sp_digit mp;
27606 
27607             sp_2048_mont_setup(m, &mp);
27608 
27609             /* Convert to Montgomery form. */
27610             XMEMSET(a, 0, sizeof(sp_digit) * 64);
27611             err = sp_2048_mod_64_cond(a, a, m);
27612 
27613             if (err == MP_OKAY) {
27614                 for (i = 31; i >= 0; i--) {
27615                     if (e[0] >> i) {
27616                         break;
27617                     }
27618                 }
27619 
27620                 XMEMCPY(r, a, sizeof(sp_digit) * 64);
27621                 for (i--; i>=0; i--) {
27622                     sp_2048_mont_sqr_64(r, r, m, mp);
27623                     if (((e[0] >> i) & 1) == 1) {
27624                         sp_2048_mont_mul_64(r, r, a, m, mp);
27625                     }
27626                 }
27627                 XMEMSET(&r[64], 0, sizeof(sp_digit) * 64);
27628                 sp_2048_mont_reduce_64(r, m, mp);
27629 
27630                 for (i = 63; i > 0; i--) {
27631                     if (r[i] != m[i]) {
27632                         break;
27633                     }
27634                 }
27635                 if (r[i] >= m[i]) {
27636                     sp_2048_sub_in_place_64(r, m);
27637                 }
27638             }
27639         }
27640     }
27641 
27642     if (err == MP_OKAY) {
27643         sp_2048_to_bin_64(r, out);
27644         *outLen = 256;
27645     }
27646 
27647 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27648     if (a != NULL)
27649         XFREE(a, NULL, DYNAMIC_TYPE_RSA);
27650 #endif
27651 
27652     return err;
27653 }
27654 
27655 #ifndef WOLFSSL_RSA_PUBLIC_ONLY
27656 /* Conditionally add a and b using the mask m.
27657  * m is -1 to add and 0 when not.
27658  *
27659  * r  A single precision number representing conditional add result.
27660  * a  A single precision number to add with.
27661  * b  A single precision number to add.
27662  * m  Mask value to apply.
27663  */
sp_2048_cond_add_32(sp_digit * r,const sp_digit * a,const sp_digit * b,sp_digit m)27664 SP_NOINLINE static sp_digit sp_2048_cond_add_32(sp_digit* r, const sp_digit* a,
27665         const sp_digit* b, sp_digit m)
27666 {
27667     __asm__ __volatile__ (
27668         "movs	r4, #0\n\t"
27669         "movs	r5, #0x80\n\t"
27670         "mov	r8, r5\n\t"
27671         "movs	r7, #0\n\t"
27672         "\n"
27673     "L_sp_2048_cond_add_32_words_%=:\n\t"
27674         "ldr	r6, [%[b], r7]\n\t"
27675 #ifdef WOLFSSL_KEIL
27676         "ands	r6, r6, %[m]\n\t"
27677 #elif defined(__clang__)
27678         "ands	r6, %[m]\n\t"
27679 #else
27680         "and	r6, %[m]\n\t"
27681 #endif
27682         "movs	r5, #0\n\t"
27683 #if defined(__clang__) || defined(WOLFSSL_KEIL)
27684         "subs	r5, r5, #1\n\t"
27685 #else
27686         "sub	r5, r5, #1\n\t"
27687 #endif
27688 #if defined(__clang__) || defined(WOLFSSL_KEIL)
27689         "adds	r5, r5, r4\n\t"
27690 #else
27691         "add	r5, r5, r4\n\t"
27692 #endif
27693         "ldr	r5, [%[a], r7]\n\t"
27694 #ifdef WOLFSSL_KEIL
27695         "adcs	r5, r5, r6\n\t"
27696 #elif defined(__clang__)
27697         "adcs	r5, r6\n\t"
27698 #else
27699         "adc	r5, r6\n\t"
27700 #endif
27701         "movs	r4, #0\n\t"
27702 #ifdef WOLFSSL_KEIL
27703         "adcs	r4, r4, r4\n\t"
27704 #elif defined(__clang__)
27705         "adcs	r4, r4\n\t"
27706 #else
27707         "adc	r4, r4\n\t"
27708 #endif
27709         "str	r5, [%[r], r7]\n\t"
27710 #if defined(__clang__) || defined(WOLFSSL_KEIL)
27711         "adds	r7, r7, #4\n\t"
27712 #else
27713         "add	r7, r7, #4\n\t"
27714 #endif
27715         "cmp	r7, r8\n\t"
27716         "blt	L_sp_2048_cond_add_32_words_%=\n\t"
27717         "movs	%[r], r4\n\t"
27718         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
27719         :
27720         : "memory", "r4", "r5", "r6", "r7", "r8"
27721     );
27722     return (uint32_t)(size_t)r;
27723 }
27724 
27725 /* RSA private key operation.
27726  *
27727  * in      Array of bytes representing the number to exponentiate, base.
27728  * inLen   Number of bytes in base.
27729  * dm      Private exponent.
27730  * pm      First prime.
27731  * qm      Second prime.
27732  * dpm     First prime's CRT exponent.
27733  * dqm     Second prime's CRT exponent.
27734  * qim     Inverse of second prime mod p.
27735  * mm      Modulus.
27736  * out     Buffer to hold big-endian bytes of exponentiation result.
27737  *         Must be at least 256 bytes long.
27738  * outLen  Number of bytes in result.
27739  * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
27740  * an array is too long and MEMORY_E when dynamic memory allocation fails.
27741  */
sp_RsaPrivate_2048(const byte * in,word32 inLen,const mp_int * dm,const mp_int * pm,const mp_int * qm,const mp_int * dpm,const mp_int * dqm,const mp_int * qim,const mp_int * mm,byte * out,word32 * outLen)27742 int sp_RsaPrivate_2048(const byte* in, word32 inLen, const mp_int* dm,
27743     const mp_int* pm, const mp_int* qm, const mp_int* dpm, const mp_int* dqm,
27744     const mp_int* qim, const mp_int* mm, byte* out, word32* outLen)
27745 {
27746 #if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
27747 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27748     sp_digit* d = NULL;
27749 #else
27750     sp_digit  d[64 * 4];
27751 #endif
27752     sp_digit* a = NULL;
27753     sp_digit* m = NULL;
27754     sp_digit* r = NULL;
27755     int err = MP_OKAY;
27756 
27757     (void)pm;
27758     (void)qm;
27759     (void)dpm;
27760     (void)dqm;
27761     (void)qim;
27762 
27763     if (*outLen < 256U) {
27764         err = MP_TO_E;
27765     }
27766     if (err == MP_OKAY) {
27767         if (mp_count_bits(dm) > 2048) {
27768            err = MP_READ_E;
27769         }
27770         else if (inLen > 256) {
27771             err = MP_READ_E;
27772         }
27773         else if (mp_count_bits(mm) != 2048) {
27774             err = MP_READ_E;
27775         }
27776         else if (mp_iseven(mm)) {
27777             err = MP_VAL;
27778         }
27779     }
27780 
27781 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27782     if (err == MP_OKAY) {
27783         d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 64 * 4, NULL,
27784                                                               DYNAMIC_TYPE_RSA);
27785         if (d == NULL)
27786             err = MEMORY_E;
27787     }
27788 #endif
27789 
27790     if (err == MP_OKAY) {
27791         a = d + 64;
27792         m = a + 128;
27793         r = a;
27794 
27795         sp_2048_from_bin(a, 64, in, inLen);
27796         sp_2048_from_mp(d, 64, dm);
27797         sp_2048_from_mp(m, 64, mm);
27798         err = sp_2048_mod_exp_64(r, a, d, 2048, m, 0);
27799     }
27800 
27801     if (err == MP_OKAY) {
27802         sp_2048_to_bin_64(r, out);
27803         *outLen = 256;
27804     }
27805 
27806 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27807     if (d != NULL)
27808 #endif
27809     {
27810         /* only "a" and "r" are sensitive and need zeroized (same pointer) */
27811         if (a != NULL)
27812             ForceZero(a, sizeof(sp_digit) * 64);
27813 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27814         XFREE(d, NULL, DYNAMIC_TYPE_RSA);
27815 #endif
27816     }
27817 
27818     return err;
27819 #else
27820 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27821     sp_digit* a = NULL;
27822 #else
27823     sp_digit a[32 * 11];
27824 #endif
27825     sp_digit* p = NULL;
27826     sp_digit* q = NULL;
27827     sp_digit* dp = NULL;
27828     sp_digit* tmpa = NULL;
27829     sp_digit* tmpb = NULL;
27830     sp_digit* r = NULL;
27831     sp_digit* qi = NULL;
27832     sp_digit* dq = NULL;
27833     sp_digit c;
27834     int err = MP_OKAY;
27835 
27836     (void)dm;
27837     (void)mm;
27838 
27839     if (*outLen < 256) {
27840         err = MP_TO_E;
27841     }
27842     else if (inLen > 256 || mp_count_bits(mm) != 2048) {
27843         err = MP_READ_E;
27844     }
27845     else if (mp_iseven(mm)) {
27846         err = MP_VAL;
27847     }
27848 
27849 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27850     if (err == MP_OKAY) {
27851         a = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 11, NULL,
27852                                                               DYNAMIC_TYPE_RSA);
27853         if (a == NULL)
27854             err = MEMORY_E;
27855     }
27856 #endif
27857 
27858     if (err == MP_OKAY) {
27859         p = a + 64 * 2;
27860         q = p + 32;
27861         qi = dq = dp = q + 32;
27862         tmpa = qi + 32;
27863         tmpb = tmpa + 64;
27864         r = a;
27865 
27866         sp_2048_from_bin(a, 64, in, inLen);
27867         sp_2048_from_mp(p, 32, pm);
27868         sp_2048_from_mp(q, 32, qm);
27869         sp_2048_from_mp(dp, 32, dpm);
27870 
27871         err = sp_2048_mod_exp_32(tmpa, a, dp, 1024, p, 1);
27872     }
27873     if (err == MP_OKAY) {
27874         sp_2048_from_mp(dq, 32, dqm);
27875         err = sp_2048_mod_exp_32(tmpb, a, dq, 1024, q, 1);
27876     }
27877 
27878     if (err == MP_OKAY) {
27879         c = sp_2048_sub_in_place_32(tmpa, tmpb);
27880         c += sp_2048_cond_add_32(tmpa, tmpa, p, c);
27881         sp_2048_cond_add_32(tmpa, tmpa, p, c);
27882 
27883         sp_2048_from_mp(qi, 32, qim);
27884         sp_2048_mul_32(tmpa, tmpa, qi);
27885         err = sp_2048_mod_32(tmpa, tmpa, p);
27886     }
27887 
27888     if (err == MP_OKAY) {
27889         sp_2048_mul_32(tmpa, q, tmpa);
27890         XMEMSET(&tmpb[32], 0, sizeof(sp_digit) * 32);
27891         sp_2048_add_64(r, tmpb, tmpa);
27892 
27893         sp_2048_to_bin_64(r, out);
27894         *outLen = 256;
27895     }
27896 
27897 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27898     if (a != NULL)
27899 #endif
27900     {
27901         ForceZero(a, sizeof(sp_digit) * 32 * 11);
27902     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27903         XFREE(a, NULL, DYNAMIC_TYPE_RSA);
27904     #endif
27905     }
27906 #endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
27907     return err;
27908 }
27909 #endif /* WOLFSSL_RSA_PUBLIC_ONLY */
27910 #endif /* WOLFSSL_HAVE_SP_RSA */
27911 #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
27912                                               !defined(WOLFSSL_RSA_PUBLIC_ONLY))
27913 /* Convert an array of sp_digit to an mp_int.
27914  *
27915  * a  A single precision integer.
27916  * r  A multi-precision integer.
27917  */
sp_2048_to_mp(const sp_digit * a,mp_int * r)27918 static int sp_2048_to_mp(const sp_digit* a, mp_int* r)
27919 {
27920     int err;
27921 
27922     err = mp_grow(r, (2048 + DIGIT_BIT - 1) / DIGIT_BIT);
27923     if (err == MP_OKAY) { /*lint !e774 case where err is always MP_OKAY*/
27924 #if DIGIT_BIT == 32
27925         XMEMCPY(r->dp, a, sizeof(sp_digit) * 64);
27926         r->used = 64;
27927         mp_clamp(r);
27928 #elif DIGIT_BIT < 32
27929         int i;
27930         int j = 0;
27931         int s = 0;
27932 
27933         r->dp[0] = 0;
27934         for (i = 0; i < 64; i++) {
27935             r->dp[j] |= (mp_digit)(a[i] << s);
27936             r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
27937             s = DIGIT_BIT - s;
27938             r->dp[++j] = (mp_digit)(a[i] >> s);
27939             while (s + DIGIT_BIT <= 32) {
27940                 s += DIGIT_BIT;
27941                 r->dp[j++] &= ((sp_digit)1 << DIGIT_BIT) - 1;
27942                 if (s == SP_WORD_SIZE) {
27943                     r->dp[j] = 0;
27944                 }
27945                 else {
27946                     r->dp[j] = (mp_digit)(a[i] >> s);
27947                 }
27948             }
27949             s = 32 - s;
27950         }
27951         r->used = (2048 + DIGIT_BIT - 1) / DIGIT_BIT;
27952         mp_clamp(r);
27953 #else
27954         int i;
27955         int j = 0;
27956         int s = 0;
27957 
27958         r->dp[0] = 0;
27959         for (i = 0; i < 64; i++) {
27960             r->dp[j] |= ((mp_digit)a[i]) << s;
27961             if (s + 32 >= DIGIT_BIT) {
27962     #if DIGIT_BIT != 32 && DIGIT_BIT != 64
27963                 r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
27964     #endif
27965                 s = DIGIT_BIT - s;
27966                 r->dp[++j] = a[i] >> s;
27967                 s = 32 - s;
27968             }
27969             else {
27970                 s += 32;
27971             }
27972         }
27973         r->used = (2048 + DIGIT_BIT - 1) / DIGIT_BIT;
27974         mp_clamp(r);
27975 #endif
27976     }
27977 
27978     return err;
27979 }
27980 
27981 /* Perform the modular exponentiation for Diffie-Hellman.
27982  *
27983  * base  Base. MP integer.
27984  * exp   Exponent. MP integer.
27985  * mod   Modulus. MP integer.
27986  * res   Result. MP integer.
27987  * returns 0 on success, MP_READ_E if there are too many bytes in an array
27988  * and MEMORY_E if memory allocation fails.
27989  */
sp_ModExp_2048(const mp_int * base,const mp_int * exp,const mp_int * mod,mp_int * res)27990 int sp_ModExp_2048(const mp_int* base, const mp_int* exp, const mp_int* mod,
27991     mp_int* res)
27992 {
27993     int err = MP_OKAY;
27994     sp_digit b[128];
27995     sp_digit e[64];
27996     sp_digit m[64];
27997     sp_digit* r = b;
27998     int expBits = mp_count_bits(exp);
27999 
28000     if (mp_count_bits(base) > 2048) {
28001         err = MP_READ_E;
28002     }
28003     else if (expBits > 2048) {
28004         err = MP_READ_E;
28005     }
28006     else if (mp_count_bits(mod) != 2048) {
28007         err = MP_READ_E;
28008     }
28009     else if (mp_iseven(mod)) {
28010         err = MP_VAL;
28011     }
28012 
28013     if (err == MP_OKAY) {
28014         sp_2048_from_mp(b, 64, base);
28015         sp_2048_from_mp(e, 64, exp);
28016         sp_2048_from_mp(m, 64, mod);
28017 
28018         err = sp_2048_mod_exp_64(r, b, e, expBits, m, 0);
28019     }
28020 
28021     if (err == MP_OKAY) {
28022         err = sp_2048_to_mp(r, res);
28023     }
28024 
28025     XMEMSET(e, 0, sizeof(e));
28026 
28027     return err;
28028 }
28029 
28030 #ifdef WOLFSSL_HAVE_SP_DH
28031 
28032 #ifdef HAVE_FFDHE_2048
28033 /* Lefy shift a by n bits into r. (r = a << n)
28034  *
28035  * r  A single precision integer.
28036  * a  A single precision integer.
28037  * n  Integer representing number of bits to shift.
28038  */
sp_2048_lshift_64(sp_digit * r,const sp_digit * a,byte n)28039 static void sp_2048_lshift_64(sp_digit* r, const sp_digit* a, byte n)
28040 {
28041     __asm__ __volatile__ (
28042         "movs	r7, #31\n\t"
28043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28044         "subs	r7, r7, %[n]\n\t"
28045 #else
28046         "sub	r7, r7, %[n]\n\t"
28047 #endif
28048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28049         "adds	%[a], %[a], #0xc0\n\t"
28050 #else
28051         "add	%[a], %[a], #0xc0\n\t"
28052 #endif
28053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28054         "adds	%[r], %[r], #0xc0\n\t"
28055 #else
28056         "add	%[r], %[r], #0xc0\n\t"
28057 #endif
28058         "ldr	r4, [%[a], #60]\n\t"
28059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28060         "lsrs	r5, r4, #1\n\t"
28061 #else
28062         "lsr	r5, r4, #1\n\t"
28063 #endif
28064 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28065         "lsls	r4, r4, %[n]\n\t"
28066 #else
28067         "lsl	r4, r4, %[n]\n\t"
28068 #endif
28069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28070         "lsrs	r5, r5, r7\n\t"
28071 #else
28072         "lsr	r5, r5, r7\n\t"
28073 #endif
28074         "ldr	r3, [%[a], #56]\n\t"
28075         "str	r5, [%[r], #64]\n\t"
28076 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28077         "lsrs	r6, r3, #1\n\t"
28078 #else
28079         "lsr	r6, r3, #1\n\t"
28080 #endif
28081 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28082         "lsls	r3, r3, %[n]\n\t"
28083 #else
28084         "lsl	r3, r3, %[n]\n\t"
28085 #endif
28086 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28087         "lsrs	r6, r6, r7\n\t"
28088 #else
28089         "lsr	r6, r6, r7\n\t"
28090 #endif
28091 #ifdef WOLFSSL_KEIL
28092         "orrs	r4, r4, r6\n\t"
28093 #elif defined(__clang__)
28094         "orrs	r4, r6\n\t"
28095 #else
28096         "orr	r4, r6\n\t"
28097 #endif
28098         "ldr	r5, [%[a], #52]\n\t"
28099         "str	r4, [%[r], #60]\n\t"
28100 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28101         "lsrs	r6, r5, #1\n\t"
28102 #else
28103         "lsr	r6, r5, #1\n\t"
28104 #endif
28105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28106         "lsls	r5, r5, %[n]\n\t"
28107 #else
28108         "lsl	r5, r5, %[n]\n\t"
28109 #endif
28110 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28111         "lsrs	r6, r6, r7\n\t"
28112 #else
28113         "lsr	r6, r6, r7\n\t"
28114 #endif
28115 #ifdef WOLFSSL_KEIL
28116         "orrs	r3, r3, r6\n\t"
28117 #elif defined(__clang__)
28118         "orrs	r3, r6\n\t"
28119 #else
28120         "orr	r3, r6\n\t"
28121 #endif
28122         "ldr	r4, [%[a], #48]\n\t"
28123         "str	r3, [%[r], #56]\n\t"
28124 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28125         "lsrs	r6, r4, #1\n\t"
28126 #else
28127         "lsr	r6, r4, #1\n\t"
28128 #endif
28129 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28130         "lsls	r4, r4, %[n]\n\t"
28131 #else
28132         "lsl	r4, r4, %[n]\n\t"
28133 #endif
28134 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28135         "lsrs	r6, r6, r7\n\t"
28136 #else
28137         "lsr	r6, r6, r7\n\t"
28138 #endif
28139 #ifdef WOLFSSL_KEIL
28140         "orrs	r5, r5, r6\n\t"
28141 #elif defined(__clang__)
28142         "orrs	r5, r6\n\t"
28143 #else
28144         "orr	r5, r6\n\t"
28145 #endif
28146         "ldr	r3, [%[a], #44]\n\t"
28147         "str	r5, [%[r], #52]\n\t"
28148 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28149         "lsrs	r6, r3, #1\n\t"
28150 #else
28151         "lsr	r6, r3, #1\n\t"
28152 #endif
28153 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28154         "lsls	r3, r3, %[n]\n\t"
28155 #else
28156         "lsl	r3, r3, %[n]\n\t"
28157 #endif
28158 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28159         "lsrs	r6, r6, r7\n\t"
28160 #else
28161         "lsr	r6, r6, r7\n\t"
28162 #endif
28163 #ifdef WOLFSSL_KEIL
28164         "orrs	r4, r4, r6\n\t"
28165 #elif defined(__clang__)
28166         "orrs	r4, r6\n\t"
28167 #else
28168         "orr	r4, r6\n\t"
28169 #endif
28170         "ldr	r5, [%[a], #40]\n\t"
28171         "str	r4, [%[r], #48]\n\t"
28172 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28173         "lsrs	r6, r5, #1\n\t"
28174 #else
28175         "lsr	r6, r5, #1\n\t"
28176 #endif
28177 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28178         "lsls	r5, r5, %[n]\n\t"
28179 #else
28180         "lsl	r5, r5, %[n]\n\t"
28181 #endif
28182 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28183         "lsrs	r6, r6, r7\n\t"
28184 #else
28185         "lsr	r6, r6, r7\n\t"
28186 #endif
28187 #ifdef WOLFSSL_KEIL
28188         "orrs	r3, r3, r6\n\t"
28189 #elif defined(__clang__)
28190         "orrs	r3, r6\n\t"
28191 #else
28192         "orr	r3, r6\n\t"
28193 #endif
28194         "ldr	r4, [%[a], #36]\n\t"
28195         "str	r3, [%[r], #44]\n\t"
28196 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28197         "lsrs	r6, r4, #1\n\t"
28198 #else
28199         "lsr	r6, r4, #1\n\t"
28200 #endif
28201 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28202         "lsls	r4, r4, %[n]\n\t"
28203 #else
28204         "lsl	r4, r4, %[n]\n\t"
28205 #endif
28206 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28207         "lsrs	r6, r6, r7\n\t"
28208 #else
28209         "lsr	r6, r6, r7\n\t"
28210 #endif
28211 #ifdef WOLFSSL_KEIL
28212         "orrs	r5, r5, r6\n\t"
28213 #elif defined(__clang__)
28214         "orrs	r5, r6\n\t"
28215 #else
28216         "orr	r5, r6\n\t"
28217 #endif
28218         "ldr	r3, [%[a], #32]\n\t"
28219         "str	r5, [%[r], #40]\n\t"
28220 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28221         "lsrs	r6, r3, #1\n\t"
28222 #else
28223         "lsr	r6, r3, #1\n\t"
28224 #endif
28225 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28226         "lsls	r3, r3, %[n]\n\t"
28227 #else
28228         "lsl	r3, r3, %[n]\n\t"
28229 #endif
28230 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28231         "lsrs	r6, r6, r7\n\t"
28232 #else
28233         "lsr	r6, r6, r7\n\t"
28234 #endif
28235 #ifdef WOLFSSL_KEIL
28236         "orrs	r4, r4, r6\n\t"
28237 #elif defined(__clang__)
28238         "orrs	r4, r6\n\t"
28239 #else
28240         "orr	r4, r6\n\t"
28241 #endif
28242         "ldr	r5, [%[a], #28]\n\t"
28243         "str	r4, [%[r], #36]\n\t"
28244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28245         "lsrs	r6, r5, #1\n\t"
28246 #else
28247         "lsr	r6, r5, #1\n\t"
28248 #endif
28249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28250         "lsls	r5, r5, %[n]\n\t"
28251 #else
28252         "lsl	r5, r5, %[n]\n\t"
28253 #endif
28254 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28255         "lsrs	r6, r6, r7\n\t"
28256 #else
28257         "lsr	r6, r6, r7\n\t"
28258 #endif
28259 #ifdef WOLFSSL_KEIL
28260         "orrs	r3, r3, r6\n\t"
28261 #elif defined(__clang__)
28262         "orrs	r3, r6\n\t"
28263 #else
28264         "orr	r3, r6\n\t"
28265 #endif
28266         "ldr	r4, [%[a], #24]\n\t"
28267         "str	r3, [%[r], #32]\n\t"
28268 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28269         "lsrs	r6, r4, #1\n\t"
28270 #else
28271         "lsr	r6, r4, #1\n\t"
28272 #endif
28273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28274         "lsls	r4, r4, %[n]\n\t"
28275 #else
28276         "lsl	r4, r4, %[n]\n\t"
28277 #endif
28278 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28279         "lsrs	r6, r6, r7\n\t"
28280 #else
28281         "lsr	r6, r6, r7\n\t"
28282 #endif
28283 #ifdef WOLFSSL_KEIL
28284         "orrs	r5, r5, r6\n\t"
28285 #elif defined(__clang__)
28286         "orrs	r5, r6\n\t"
28287 #else
28288         "orr	r5, r6\n\t"
28289 #endif
28290         "ldr	r3, [%[a], #20]\n\t"
28291         "str	r5, [%[r], #28]\n\t"
28292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28293         "lsrs	r6, r3, #1\n\t"
28294 #else
28295         "lsr	r6, r3, #1\n\t"
28296 #endif
28297 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28298         "lsls	r3, r3, %[n]\n\t"
28299 #else
28300         "lsl	r3, r3, %[n]\n\t"
28301 #endif
28302 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28303         "lsrs	r6, r6, r7\n\t"
28304 #else
28305         "lsr	r6, r6, r7\n\t"
28306 #endif
28307 #ifdef WOLFSSL_KEIL
28308         "orrs	r4, r4, r6\n\t"
28309 #elif defined(__clang__)
28310         "orrs	r4, r6\n\t"
28311 #else
28312         "orr	r4, r6\n\t"
28313 #endif
28314         "ldr	r5, [%[a], #16]\n\t"
28315         "str	r4, [%[r], #24]\n\t"
28316 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28317         "lsrs	r6, r5, #1\n\t"
28318 #else
28319         "lsr	r6, r5, #1\n\t"
28320 #endif
28321 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28322         "lsls	r5, r5, %[n]\n\t"
28323 #else
28324         "lsl	r5, r5, %[n]\n\t"
28325 #endif
28326 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28327         "lsrs	r6, r6, r7\n\t"
28328 #else
28329         "lsr	r6, r6, r7\n\t"
28330 #endif
28331 #ifdef WOLFSSL_KEIL
28332         "orrs	r3, r3, r6\n\t"
28333 #elif defined(__clang__)
28334         "orrs	r3, r6\n\t"
28335 #else
28336         "orr	r3, r6\n\t"
28337 #endif
28338         "ldr	r4, [%[a], #12]\n\t"
28339         "str	r3, [%[r], #20]\n\t"
28340 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28341         "lsrs	r6, r4, #1\n\t"
28342 #else
28343         "lsr	r6, r4, #1\n\t"
28344 #endif
28345 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28346         "lsls	r4, r4, %[n]\n\t"
28347 #else
28348         "lsl	r4, r4, %[n]\n\t"
28349 #endif
28350 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28351         "lsrs	r6, r6, r7\n\t"
28352 #else
28353         "lsr	r6, r6, r7\n\t"
28354 #endif
28355 #ifdef WOLFSSL_KEIL
28356         "orrs	r5, r5, r6\n\t"
28357 #elif defined(__clang__)
28358         "orrs	r5, r6\n\t"
28359 #else
28360         "orr	r5, r6\n\t"
28361 #endif
28362         "ldr	r3, [%[a], #8]\n\t"
28363         "str	r5, [%[r], #16]\n\t"
28364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28365         "lsrs	r6, r3, #1\n\t"
28366 #else
28367         "lsr	r6, r3, #1\n\t"
28368 #endif
28369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28370         "lsls	r3, r3, %[n]\n\t"
28371 #else
28372         "lsl	r3, r3, %[n]\n\t"
28373 #endif
28374 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28375         "lsrs	r6, r6, r7\n\t"
28376 #else
28377         "lsr	r6, r6, r7\n\t"
28378 #endif
28379 #ifdef WOLFSSL_KEIL
28380         "orrs	r4, r4, r6\n\t"
28381 #elif defined(__clang__)
28382         "orrs	r4, r6\n\t"
28383 #else
28384         "orr	r4, r6\n\t"
28385 #endif
28386         "ldr	r5, [%[a], #4]\n\t"
28387         "str	r4, [%[r], #12]\n\t"
28388 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28389         "lsrs	r6, r5, #1\n\t"
28390 #else
28391         "lsr	r6, r5, #1\n\t"
28392 #endif
28393 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28394         "lsls	r5, r5, %[n]\n\t"
28395 #else
28396         "lsl	r5, r5, %[n]\n\t"
28397 #endif
28398 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28399         "lsrs	r6, r6, r7\n\t"
28400 #else
28401         "lsr	r6, r6, r7\n\t"
28402 #endif
28403 #ifdef WOLFSSL_KEIL
28404         "orrs	r3, r3, r6\n\t"
28405 #elif defined(__clang__)
28406         "orrs	r3, r6\n\t"
28407 #else
28408         "orr	r3, r6\n\t"
28409 #endif
28410         "ldr	r4, [%[a]]\n\t"
28411         "str	r3, [%[r], #8]\n\t"
28412 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28413         "lsrs	r6, r4, #1\n\t"
28414 #else
28415         "lsr	r6, r4, #1\n\t"
28416 #endif
28417 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28418         "lsls	r4, r4, %[n]\n\t"
28419 #else
28420         "lsl	r4, r4, %[n]\n\t"
28421 #endif
28422 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28423         "lsrs	r6, r6, r7\n\t"
28424 #else
28425         "lsr	r6, r6, r7\n\t"
28426 #endif
28427 #ifdef WOLFSSL_KEIL
28428         "orrs	r5, r5, r6\n\t"
28429 #elif defined(__clang__)
28430         "orrs	r5, r6\n\t"
28431 #else
28432         "orr	r5, r6\n\t"
28433 #endif
28434 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28435         "subs	%[a], %[a], #0x40\n\t"
28436 #else
28437         "sub	%[a], %[a], #0x40\n\t"
28438 #endif
28439 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28440         "subs	%[r], %[r], #0x40\n\t"
28441 #else
28442         "sub	%[r], %[r], #0x40\n\t"
28443 #endif
28444         "ldr	r3, [%[a], #60]\n\t"
28445         "str	r5, [%[r], #68]\n\t"
28446 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28447         "lsrs	r6, r3, #1\n\t"
28448 #else
28449         "lsr	r6, r3, #1\n\t"
28450 #endif
28451 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28452         "lsls	r3, r3, %[n]\n\t"
28453 #else
28454         "lsl	r3, r3, %[n]\n\t"
28455 #endif
28456 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28457         "lsrs	r6, r6, r7\n\t"
28458 #else
28459         "lsr	r6, r6, r7\n\t"
28460 #endif
28461 #ifdef WOLFSSL_KEIL
28462         "orrs	r4, r4, r6\n\t"
28463 #elif defined(__clang__)
28464         "orrs	r4, r6\n\t"
28465 #else
28466         "orr	r4, r6\n\t"
28467 #endif
28468         "ldr	r5, [%[a], #56]\n\t"
28469         "str	r4, [%[r], #64]\n\t"
28470 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28471         "lsrs	r6, r5, #1\n\t"
28472 #else
28473         "lsr	r6, r5, #1\n\t"
28474 #endif
28475 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28476         "lsls	r5, r5, %[n]\n\t"
28477 #else
28478         "lsl	r5, r5, %[n]\n\t"
28479 #endif
28480 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28481         "lsrs	r6, r6, r7\n\t"
28482 #else
28483         "lsr	r6, r6, r7\n\t"
28484 #endif
28485 #ifdef WOLFSSL_KEIL
28486         "orrs	r3, r3, r6\n\t"
28487 #elif defined(__clang__)
28488         "orrs	r3, r6\n\t"
28489 #else
28490         "orr	r3, r6\n\t"
28491 #endif
28492         "ldr	r4, [%[a], #52]\n\t"
28493         "str	r3, [%[r], #60]\n\t"
28494 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28495         "lsrs	r6, r4, #1\n\t"
28496 #else
28497         "lsr	r6, r4, #1\n\t"
28498 #endif
28499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28500         "lsls	r4, r4, %[n]\n\t"
28501 #else
28502         "lsl	r4, r4, %[n]\n\t"
28503 #endif
28504 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28505         "lsrs	r6, r6, r7\n\t"
28506 #else
28507         "lsr	r6, r6, r7\n\t"
28508 #endif
28509 #ifdef WOLFSSL_KEIL
28510         "orrs	r5, r5, r6\n\t"
28511 #elif defined(__clang__)
28512         "orrs	r5, r6\n\t"
28513 #else
28514         "orr	r5, r6\n\t"
28515 #endif
28516         "ldr	r3, [%[a], #48]\n\t"
28517         "str	r5, [%[r], #56]\n\t"
28518 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28519         "lsrs	r6, r3, #1\n\t"
28520 #else
28521         "lsr	r6, r3, #1\n\t"
28522 #endif
28523 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28524         "lsls	r3, r3, %[n]\n\t"
28525 #else
28526         "lsl	r3, r3, %[n]\n\t"
28527 #endif
28528 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28529         "lsrs	r6, r6, r7\n\t"
28530 #else
28531         "lsr	r6, r6, r7\n\t"
28532 #endif
28533 #ifdef WOLFSSL_KEIL
28534         "orrs	r4, r4, r6\n\t"
28535 #elif defined(__clang__)
28536         "orrs	r4, r6\n\t"
28537 #else
28538         "orr	r4, r6\n\t"
28539 #endif
28540         "ldr	r5, [%[a], #44]\n\t"
28541         "str	r4, [%[r], #52]\n\t"
28542 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28543         "lsrs	r6, r5, #1\n\t"
28544 #else
28545         "lsr	r6, r5, #1\n\t"
28546 #endif
28547 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28548         "lsls	r5, r5, %[n]\n\t"
28549 #else
28550         "lsl	r5, r5, %[n]\n\t"
28551 #endif
28552 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28553         "lsrs	r6, r6, r7\n\t"
28554 #else
28555         "lsr	r6, r6, r7\n\t"
28556 #endif
28557 #ifdef WOLFSSL_KEIL
28558         "orrs	r3, r3, r6\n\t"
28559 #elif defined(__clang__)
28560         "orrs	r3, r6\n\t"
28561 #else
28562         "orr	r3, r6\n\t"
28563 #endif
28564         "ldr	r4, [%[a], #40]\n\t"
28565         "str	r3, [%[r], #48]\n\t"
28566 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28567         "lsrs	r6, r4, #1\n\t"
28568 #else
28569         "lsr	r6, r4, #1\n\t"
28570 #endif
28571 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28572         "lsls	r4, r4, %[n]\n\t"
28573 #else
28574         "lsl	r4, r4, %[n]\n\t"
28575 #endif
28576 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28577         "lsrs	r6, r6, r7\n\t"
28578 #else
28579         "lsr	r6, r6, r7\n\t"
28580 #endif
28581 #ifdef WOLFSSL_KEIL
28582         "orrs	r5, r5, r6\n\t"
28583 #elif defined(__clang__)
28584         "orrs	r5, r6\n\t"
28585 #else
28586         "orr	r5, r6\n\t"
28587 #endif
28588         "ldr	r3, [%[a], #36]\n\t"
28589         "str	r5, [%[r], #44]\n\t"
28590 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28591         "lsrs	r6, r3, #1\n\t"
28592 #else
28593         "lsr	r6, r3, #1\n\t"
28594 #endif
28595 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28596         "lsls	r3, r3, %[n]\n\t"
28597 #else
28598         "lsl	r3, r3, %[n]\n\t"
28599 #endif
28600 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28601         "lsrs	r6, r6, r7\n\t"
28602 #else
28603         "lsr	r6, r6, r7\n\t"
28604 #endif
28605 #ifdef WOLFSSL_KEIL
28606         "orrs	r4, r4, r6\n\t"
28607 #elif defined(__clang__)
28608         "orrs	r4, r6\n\t"
28609 #else
28610         "orr	r4, r6\n\t"
28611 #endif
28612         "ldr	r5, [%[a], #32]\n\t"
28613         "str	r4, [%[r], #40]\n\t"
28614 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28615         "lsrs	r6, r5, #1\n\t"
28616 #else
28617         "lsr	r6, r5, #1\n\t"
28618 #endif
28619 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28620         "lsls	r5, r5, %[n]\n\t"
28621 #else
28622         "lsl	r5, r5, %[n]\n\t"
28623 #endif
28624 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28625         "lsrs	r6, r6, r7\n\t"
28626 #else
28627         "lsr	r6, r6, r7\n\t"
28628 #endif
28629 #ifdef WOLFSSL_KEIL
28630         "orrs	r3, r3, r6\n\t"
28631 #elif defined(__clang__)
28632         "orrs	r3, r6\n\t"
28633 #else
28634         "orr	r3, r6\n\t"
28635 #endif
28636         "ldr	r4, [%[a], #28]\n\t"
28637         "str	r3, [%[r], #36]\n\t"
28638 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28639         "lsrs	r6, r4, #1\n\t"
28640 #else
28641         "lsr	r6, r4, #1\n\t"
28642 #endif
28643 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28644         "lsls	r4, r4, %[n]\n\t"
28645 #else
28646         "lsl	r4, r4, %[n]\n\t"
28647 #endif
28648 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28649         "lsrs	r6, r6, r7\n\t"
28650 #else
28651         "lsr	r6, r6, r7\n\t"
28652 #endif
28653 #ifdef WOLFSSL_KEIL
28654         "orrs	r5, r5, r6\n\t"
28655 #elif defined(__clang__)
28656         "orrs	r5, r6\n\t"
28657 #else
28658         "orr	r5, r6\n\t"
28659 #endif
28660         "ldr	r3, [%[a], #24]\n\t"
28661         "str	r5, [%[r], #32]\n\t"
28662 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28663         "lsrs	r6, r3, #1\n\t"
28664 #else
28665         "lsr	r6, r3, #1\n\t"
28666 #endif
28667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28668         "lsls	r3, r3, %[n]\n\t"
28669 #else
28670         "lsl	r3, r3, %[n]\n\t"
28671 #endif
28672 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28673         "lsrs	r6, r6, r7\n\t"
28674 #else
28675         "lsr	r6, r6, r7\n\t"
28676 #endif
28677 #ifdef WOLFSSL_KEIL
28678         "orrs	r4, r4, r6\n\t"
28679 #elif defined(__clang__)
28680         "orrs	r4, r6\n\t"
28681 #else
28682         "orr	r4, r6\n\t"
28683 #endif
28684         "ldr	r5, [%[a], #20]\n\t"
28685         "str	r4, [%[r], #28]\n\t"
28686 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28687         "lsrs	r6, r5, #1\n\t"
28688 #else
28689         "lsr	r6, r5, #1\n\t"
28690 #endif
28691 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28692         "lsls	r5, r5, %[n]\n\t"
28693 #else
28694         "lsl	r5, r5, %[n]\n\t"
28695 #endif
28696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28697         "lsrs	r6, r6, r7\n\t"
28698 #else
28699         "lsr	r6, r6, r7\n\t"
28700 #endif
28701 #ifdef WOLFSSL_KEIL
28702         "orrs	r3, r3, r6\n\t"
28703 #elif defined(__clang__)
28704         "orrs	r3, r6\n\t"
28705 #else
28706         "orr	r3, r6\n\t"
28707 #endif
28708         "ldr	r4, [%[a], #16]\n\t"
28709         "str	r3, [%[r], #24]\n\t"
28710 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28711         "lsrs	r6, r4, #1\n\t"
28712 #else
28713         "lsr	r6, r4, #1\n\t"
28714 #endif
28715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28716         "lsls	r4, r4, %[n]\n\t"
28717 #else
28718         "lsl	r4, r4, %[n]\n\t"
28719 #endif
28720 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28721         "lsrs	r6, r6, r7\n\t"
28722 #else
28723         "lsr	r6, r6, r7\n\t"
28724 #endif
28725 #ifdef WOLFSSL_KEIL
28726         "orrs	r5, r5, r6\n\t"
28727 #elif defined(__clang__)
28728         "orrs	r5, r6\n\t"
28729 #else
28730         "orr	r5, r6\n\t"
28731 #endif
28732         "ldr	r3, [%[a], #12]\n\t"
28733         "str	r5, [%[r], #20]\n\t"
28734 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28735         "lsrs	r6, r3, #1\n\t"
28736 #else
28737         "lsr	r6, r3, #1\n\t"
28738 #endif
28739 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28740         "lsls	r3, r3, %[n]\n\t"
28741 #else
28742         "lsl	r3, r3, %[n]\n\t"
28743 #endif
28744 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28745         "lsrs	r6, r6, r7\n\t"
28746 #else
28747         "lsr	r6, r6, r7\n\t"
28748 #endif
28749 #ifdef WOLFSSL_KEIL
28750         "orrs	r4, r4, r6\n\t"
28751 #elif defined(__clang__)
28752         "orrs	r4, r6\n\t"
28753 #else
28754         "orr	r4, r6\n\t"
28755 #endif
28756         "ldr	r5, [%[a], #8]\n\t"
28757         "str	r4, [%[r], #16]\n\t"
28758 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28759         "lsrs	r6, r5, #1\n\t"
28760 #else
28761         "lsr	r6, r5, #1\n\t"
28762 #endif
28763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28764         "lsls	r5, r5, %[n]\n\t"
28765 #else
28766         "lsl	r5, r5, %[n]\n\t"
28767 #endif
28768 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28769         "lsrs	r6, r6, r7\n\t"
28770 #else
28771         "lsr	r6, r6, r7\n\t"
28772 #endif
28773 #ifdef WOLFSSL_KEIL
28774         "orrs	r3, r3, r6\n\t"
28775 #elif defined(__clang__)
28776         "orrs	r3, r6\n\t"
28777 #else
28778         "orr	r3, r6\n\t"
28779 #endif
28780         "ldr	r4, [%[a], #4]\n\t"
28781         "str	r3, [%[r], #12]\n\t"
28782 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28783         "lsrs	r6, r4, #1\n\t"
28784 #else
28785         "lsr	r6, r4, #1\n\t"
28786 #endif
28787 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28788         "lsls	r4, r4, %[n]\n\t"
28789 #else
28790         "lsl	r4, r4, %[n]\n\t"
28791 #endif
28792 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28793         "lsrs	r6, r6, r7\n\t"
28794 #else
28795         "lsr	r6, r6, r7\n\t"
28796 #endif
28797 #ifdef WOLFSSL_KEIL
28798         "orrs	r5, r5, r6\n\t"
28799 #elif defined(__clang__)
28800         "orrs	r5, r6\n\t"
28801 #else
28802         "orr	r5, r6\n\t"
28803 #endif
28804         "ldr	r3, [%[a]]\n\t"
28805         "str	r5, [%[r], #8]\n\t"
28806 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28807         "lsrs	r6, r3, #1\n\t"
28808 #else
28809         "lsr	r6, r3, #1\n\t"
28810 #endif
28811 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28812         "lsls	r3, r3, %[n]\n\t"
28813 #else
28814         "lsl	r3, r3, %[n]\n\t"
28815 #endif
28816 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28817         "lsrs	r6, r6, r7\n\t"
28818 #else
28819         "lsr	r6, r6, r7\n\t"
28820 #endif
28821 #ifdef WOLFSSL_KEIL
28822         "orrs	r4, r4, r6\n\t"
28823 #elif defined(__clang__)
28824         "orrs	r4, r6\n\t"
28825 #else
28826         "orr	r4, r6\n\t"
28827 #endif
28828 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28829         "subs	%[a], %[a], #0x40\n\t"
28830 #else
28831         "sub	%[a], %[a], #0x40\n\t"
28832 #endif
28833 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28834         "subs	%[r], %[r], #0x40\n\t"
28835 #else
28836         "sub	%[r], %[r], #0x40\n\t"
28837 #endif
28838         "ldr	r5, [%[a], #60]\n\t"
28839         "str	r4, [%[r], #68]\n\t"
28840 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28841         "lsrs	r6, r5, #1\n\t"
28842 #else
28843         "lsr	r6, r5, #1\n\t"
28844 #endif
28845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28846         "lsls	r5, r5, %[n]\n\t"
28847 #else
28848         "lsl	r5, r5, %[n]\n\t"
28849 #endif
28850 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28851         "lsrs	r6, r6, r7\n\t"
28852 #else
28853         "lsr	r6, r6, r7\n\t"
28854 #endif
28855 #ifdef WOLFSSL_KEIL
28856         "orrs	r3, r3, r6\n\t"
28857 #elif defined(__clang__)
28858         "orrs	r3, r6\n\t"
28859 #else
28860         "orr	r3, r6\n\t"
28861 #endif
28862         "ldr	r4, [%[a], #56]\n\t"
28863         "str	r3, [%[r], #64]\n\t"
28864 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28865         "lsrs	r6, r4, #1\n\t"
28866 #else
28867         "lsr	r6, r4, #1\n\t"
28868 #endif
28869 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28870         "lsls	r4, r4, %[n]\n\t"
28871 #else
28872         "lsl	r4, r4, %[n]\n\t"
28873 #endif
28874 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28875         "lsrs	r6, r6, r7\n\t"
28876 #else
28877         "lsr	r6, r6, r7\n\t"
28878 #endif
28879 #ifdef WOLFSSL_KEIL
28880         "orrs	r5, r5, r6\n\t"
28881 #elif defined(__clang__)
28882         "orrs	r5, r6\n\t"
28883 #else
28884         "orr	r5, r6\n\t"
28885 #endif
28886         "ldr	r3, [%[a], #52]\n\t"
28887         "str	r5, [%[r], #60]\n\t"
28888 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28889         "lsrs	r6, r3, #1\n\t"
28890 #else
28891         "lsr	r6, r3, #1\n\t"
28892 #endif
28893 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28894         "lsls	r3, r3, %[n]\n\t"
28895 #else
28896         "lsl	r3, r3, %[n]\n\t"
28897 #endif
28898 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28899         "lsrs	r6, r6, r7\n\t"
28900 #else
28901         "lsr	r6, r6, r7\n\t"
28902 #endif
28903 #ifdef WOLFSSL_KEIL
28904         "orrs	r4, r4, r6\n\t"
28905 #elif defined(__clang__)
28906         "orrs	r4, r6\n\t"
28907 #else
28908         "orr	r4, r6\n\t"
28909 #endif
28910         "ldr	r5, [%[a], #48]\n\t"
28911         "str	r4, [%[r], #56]\n\t"
28912 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28913         "lsrs	r6, r5, #1\n\t"
28914 #else
28915         "lsr	r6, r5, #1\n\t"
28916 #endif
28917 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28918         "lsls	r5, r5, %[n]\n\t"
28919 #else
28920         "lsl	r5, r5, %[n]\n\t"
28921 #endif
28922 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28923         "lsrs	r6, r6, r7\n\t"
28924 #else
28925         "lsr	r6, r6, r7\n\t"
28926 #endif
28927 #ifdef WOLFSSL_KEIL
28928         "orrs	r3, r3, r6\n\t"
28929 #elif defined(__clang__)
28930         "orrs	r3, r6\n\t"
28931 #else
28932         "orr	r3, r6\n\t"
28933 #endif
28934         "ldr	r4, [%[a], #44]\n\t"
28935         "str	r3, [%[r], #52]\n\t"
28936 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28937         "lsrs	r6, r4, #1\n\t"
28938 #else
28939         "lsr	r6, r4, #1\n\t"
28940 #endif
28941 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28942         "lsls	r4, r4, %[n]\n\t"
28943 #else
28944         "lsl	r4, r4, %[n]\n\t"
28945 #endif
28946 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28947         "lsrs	r6, r6, r7\n\t"
28948 #else
28949         "lsr	r6, r6, r7\n\t"
28950 #endif
28951 #ifdef WOLFSSL_KEIL
28952         "orrs	r5, r5, r6\n\t"
28953 #elif defined(__clang__)
28954         "orrs	r5, r6\n\t"
28955 #else
28956         "orr	r5, r6\n\t"
28957 #endif
28958         "ldr	r3, [%[a], #40]\n\t"
28959         "str	r5, [%[r], #48]\n\t"
28960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28961         "lsrs	r6, r3, #1\n\t"
28962 #else
28963         "lsr	r6, r3, #1\n\t"
28964 #endif
28965 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28966         "lsls	r3, r3, %[n]\n\t"
28967 #else
28968         "lsl	r3, r3, %[n]\n\t"
28969 #endif
28970 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28971         "lsrs	r6, r6, r7\n\t"
28972 #else
28973         "lsr	r6, r6, r7\n\t"
28974 #endif
28975 #ifdef WOLFSSL_KEIL
28976         "orrs	r4, r4, r6\n\t"
28977 #elif defined(__clang__)
28978         "orrs	r4, r6\n\t"
28979 #else
28980         "orr	r4, r6\n\t"
28981 #endif
28982         "ldr	r5, [%[a], #36]\n\t"
28983         "str	r4, [%[r], #44]\n\t"
28984 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28985         "lsrs	r6, r5, #1\n\t"
28986 #else
28987         "lsr	r6, r5, #1\n\t"
28988 #endif
28989 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28990         "lsls	r5, r5, %[n]\n\t"
28991 #else
28992         "lsl	r5, r5, %[n]\n\t"
28993 #endif
28994 #if defined(__clang__) || defined(WOLFSSL_KEIL)
28995         "lsrs	r6, r6, r7\n\t"
28996 #else
28997         "lsr	r6, r6, r7\n\t"
28998 #endif
28999 #ifdef WOLFSSL_KEIL
29000         "orrs	r3, r3, r6\n\t"
29001 #elif defined(__clang__)
29002         "orrs	r3, r6\n\t"
29003 #else
29004         "orr	r3, r6\n\t"
29005 #endif
29006         "ldr	r4, [%[a], #32]\n\t"
29007         "str	r3, [%[r], #40]\n\t"
29008 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29009         "lsrs	r6, r4, #1\n\t"
29010 #else
29011         "lsr	r6, r4, #1\n\t"
29012 #endif
29013 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29014         "lsls	r4, r4, %[n]\n\t"
29015 #else
29016         "lsl	r4, r4, %[n]\n\t"
29017 #endif
29018 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29019         "lsrs	r6, r6, r7\n\t"
29020 #else
29021         "lsr	r6, r6, r7\n\t"
29022 #endif
29023 #ifdef WOLFSSL_KEIL
29024         "orrs	r5, r5, r6\n\t"
29025 #elif defined(__clang__)
29026         "orrs	r5, r6\n\t"
29027 #else
29028         "orr	r5, r6\n\t"
29029 #endif
29030         "ldr	r3, [%[a], #28]\n\t"
29031         "str	r5, [%[r], #36]\n\t"
29032 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29033         "lsrs	r6, r3, #1\n\t"
29034 #else
29035         "lsr	r6, r3, #1\n\t"
29036 #endif
29037 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29038         "lsls	r3, r3, %[n]\n\t"
29039 #else
29040         "lsl	r3, r3, %[n]\n\t"
29041 #endif
29042 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29043         "lsrs	r6, r6, r7\n\t"
29044 #else
29045         "lsr	r6, r6, r7\n\t"
29046 #endif
29047 #ifdef WOLFSSL_KEIL
29048         "orrs	r4, r4, r6\n\t"
29049 #elif defined(__clang__)
29050         "orrs	r4, r6\n\t"
29051 #else
29052         "orr	r4, r6\n\t"
29053 #endif
29054         "ldr	r5, [%[a], #24]\n\t"
29055         "str	r4, [%[r], #32]\n\t"
29056 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29057         "lsrs	r6, r5, #1\n\t"
29058 #else
29059         "lsr	r6, r5, #1\n\t"
29060 #endif
29061 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29062         "lsls	r5, r5, %[n]\n\t"
29063 #else
29064         "lsl	r5, r5, %[n]\n\t"
29065 #endif
29066 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29067         "lsrs	r6, r6, r7\n\t"
29068 #else
29069         "lsr	r6, r6, r7\n\t"
29070 #endif
29071 #ifdef WOLFSSL_KEIL
29072         "orrs	r3, r3, r6\n\t"
29073 #elif defined(__clang__)
29074         "orrs	r3, r6\n\t"
29075 #else
29076         "orr	r3, r6\n\t"
29077 #endif
29078         "ldr	r4, [%[a], #20]\n\t"
29079         "str	r3, [%[r], #28]\n\t"
29080 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29081         "lsrs	r6, r4, #1\n\t"
29082 #else
29083         "lsr	r6, r4, #1\n\t"
29084 #endif
29085 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29086         "lsls	r4, r4, %[n]\n\t"
29087 #else
29088         "lsl	r4, r4, %[n]\n\t"
29089 #endif
29090 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29091         "lsrs	r6, r6, r7\n\t"
29092 #else
29093         "lsr	r6, r6, r7\n\t"
29094 #endif
29095 #ifdef WOLFSSL_KEIL
29096         "orrs	r5, r5, r6\n\t"
29097 #elif defined(__clang__)
29098         "orrs	r5, r6\n\t"
29099 #else
29100         "orr	r5, r6\n\t"
29101 #endif
29102         "ldr	r3, [%[a], #16]\n\t"
29103         "str	r5, [%[r], #24]\n\t"
29104 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29105         "lsrs	r6, r3, #1\n\t"
29106 #else
29107         "lsr	r6, r3, #1\n\t"
29108 #endif
29109 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29110         "lsls	r3, r3, %[n]\n\t"
29111 #else
29112         "lsl	r3, r3, %[n]\n\t"
29113 #endif
29114 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29115         "lsrs	r6, r6, r7\n\t"
29116 #else
29117         "lsr	r6, r6, r7\n\t"
29118 #endif
29119 #ifdef WOLFSSL_KEIL
29120         "orrs	r4, r4, r6\n\t"
29121 #elif defined(__clang__)
29122         "orrs	r4, r6\n\t"
29123 #else
29124         "orr	r4, r6\n\t"
29125 #endif
29126         "ldr	r5, [%[a], #12]\n\t"
29127         "str	r4, [%[r], #20]\n\t"
29128 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29129         "lsrs	r6, r5, #1\n\t"
29130 #else
29131         "lsr	r6, r5, #1\n\t"
29132 #endif
29133 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29134         "lsls	r5, r5, %[n]\n\t"
29135 #else
29136         "lsl	r5, r5, %[n]\n\t"
29137 #endif
29138 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29139         "lsrs	r6, r6, r7\n\t"
29140 #else
29141         "lsr	r6, r6, r7\n\t"
29142 #endif
29143 #ifdef WOLFSSL_KEIL
29144         "orrs	r3, r3, r6\n\t"
29145 #elif defined(__clang__)
29146         "orrs	r3, r6\n\t"
29147 #else
29148         "orr	r3, r6\n\t"
29149 #endif
29150         "ldr	r4, [%[a], #8]\n\t"
29151         "str	r3, [%[r], #16]\n\t"
29152 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29153         "lsrs	r6, r4, #1\n\t"
29154 #else
29155         "lsr	r6, r4, #1\n\t"
29156 #endif
29157 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29158         "lsls	r4, r4, %[n]\n\t"
29159 #else
29160         "lsl	r4, r4, %[n]\n\t"
29161 #endif
29162 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29163         "lsrs	r6, r6, r7\n\t"
29164 #else
29165         "lsr	r6, r6, r7\n\t"
29166 #endif
29167 #ifdef WOLFSSL_KEIL
29168         "orrs	r5, r5, r6\n\t"
29169 #elif defined(__clang__)
29170         "orrs	r5, r6\n\t"
29171 #else
29172         "orr	r5, r6\n\t"
29173 #endif
29174         "ldr	r3, [%[a], #4]\n\t"
29175         "str	r5, [%[r], #12]\n\t"
29176 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29177         "lsrs	r6, r3, #1\n\t"
29178 #else
29179         "lsr	r6, r3, #1\n\t"
29180 #endif
29181 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29182         "lsls	r3, r3, %[n]\n\t"
29183 #else
29184         "lsl	r3, r3, %[n]\n\t"
29185 #endif
29186 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29187         "lsrs	r6, r6, r7\n\t"
29188 #else
29189         "lsr	r6, r6, r7\n\t"
29190 #endif
29191 #ifdef WOLFSSL_KEIL
29192         "orrs	r4, r4, r6\n\t"
29193 #elif defined(__clang__)
29194         "orrs	r4, r6\n\t"
29195 #else
29196         "orr	r4, r6\n\t"
29197 #endif
29198         "ldr	r5, [%[a]]\n\t"
29199         "str	r4, [%[r], #8]\n\t"
29200 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29201         "lsrs	r6, r5, #1\n\t"
29202 #else
29203         "lsr	r6, r5, #1\n\t"
29204 #endif
29205 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29206         "lsls	r5, r5, %[n]\n\t"
29207 #else
29208         "lsl	r5, r5, %[n]\n\t"
29209 #endif
29210 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29211         "lsrs	r6, r6, r7\n\t"
29212 #else
29213         "lsr	r6, r6, r7\n\t"
29214 #endif
29215 #ifdef WOLFSSL_KEIL
29216         "orrs	r3, r3, r6\n\t"
29217 #elif defined(__clang__)
29218         "orrs	r3, r6\n\t"
29219 #else
29220         "orr	r3, r6\n\t"
29221 #endif
29222 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29223         "subs	%[a], %[a], #0x40\n\t"
29224 #else
29225         "sub	%[a], %[a], #0x40\n\t"
29226 #endif
29227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29228         "subs	%[r], %[r], #0x40\n\t"
29229 #else
29230         "sub	%[r], %[r], #0x40\n\t"
29231 #endif
29232         "ldr	r4, [%[a], #60]\n\t"
29233         "str	r3, [%[r], #68]\n\t"
29234 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29235         "lsrs	r6, r4, #1\n\t"
29236 #else
29237         "lsr	r6, r4, #1\n\t"
29238 #endif
29239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29240         "lsls	r4, r4, %[n]\n\t"
29241 #else
29242         "lsl	r4, r4, %[n]\n\t"
29243 #endif
29244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29245         "lsrs	r6, r6, r7\n\t"
29246 #else
29247         "lsr	r6, r6, r7\n\t"
29248 #endif
29249 #ifdef WOLFSSL_KEIL
29250         "orrs	r5, r5, r6\n\t"
29251 #elif defined(__clang__)
29252         "orrs	r5, r6\n\t"
29253 #else
29254         "orr	r5, r6\n\t"
29255 #endif
29256         "ldr	r3, [%[a], #56]\n\t"
29257         "str	r5, [%[r], #64]\n\t"
29258 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29259         "lsrs	r6, r3, #1\n\t"
29260 #else
29261         "lsr	r6, r3, #1\n\t"
29262 #endif
29263 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29264         "lsls	r3, r3, %[n]\n\t"
29265 #else
29266         "lsl	r3, r3, %[n]\n\t"
29267 #endif
29268 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29269         "lsrs	r6, r6, r7\n\t"
29270 #else
29271         "lsr	r6, r6, r7\n\t"
29272 #endif
29273 #ifdef WOLFSSL_KEIL
29274         "orrs	r4, r4, r6\n\t"
29275 #elif defined(__clang__)
29276         "orrs	r4, r6\n\t"
29277 #else
29278         "orr	r4, r6\n\t"
29279 #endif
29280         "ldr	r5, [%[a], #52]\n\t"
29281         "str	r4, [%[r], #60]\n\t"
29282 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29283         "lsrs	r6, r5, #1\n\t"
29284 #else
29285         "lsr	r6, r5, #1\n\t"
29286 #endif
29287 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29288         "lsls	r5, r5, %[n]\n\t"
29289 #else
29290         "lsl	r5, r5, %[n]\n\t"
29291 #endif
29292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29293         "lsrs	r6, r6, r7\n\t"
29294 #else
29295         "lsr	r6, r6, r7\n\t"
29296 #endif
29297 #ifdef WOLFSSL_KEIL
29298         "orrs	r3, r3, r6\n\t"
29299 #elif defined(__clang__)
29300         "orrs	r3, r6\n\t"
29301 #else
29302         "orr	r3, r6\n\t"
29303 #endif
29304         "ldr	r4, [%[a], #48]\n\t"
29305         "str	r3, [%[r], #56]\n\t"
29306 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29307         "lsrs	r6, r4, #1\n\t"
29308 #else
29309         "lsr	r6, r4, #1\n\t"
29310 #endif
29311 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29312         "lsls	r4, r4, %[n]\n\t"
29313 #else
29314         "lsl	r4, r4, %[n]\n\t"
29315 #endif
29316 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29317         "lsrs	r6, r6, r7\n\t"
29318 #else
29319         "lsr	r6, r6, r7\n\t"
29320 #endif
29321 #ifdef WOLFSSL_KEIL
29322         "orrs	r5, r5, r6\n\t"
29323 #elif defined(__clang__)
29324         "orrs	r5, r6\n\t"
29325 #else
29326         "orr	r5, r6\n\t"
29327 #endif
29328         "ldr	r3, [%[a], #44]\n\t"
29329         "str	r5, [%[r], #52]\n\t"
29330 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29331         "lsrs	r6, r3, #1\n\t"
29332 #else
29333         "lsr	r6, r3, #1\n\t"
29334 #endif
29335 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29336         "lsls	r3, r3, %[n]\n\t"
29337 #else
29338         "lsl	r3, r3, %[n]\n\t"
29339 #endif
29340 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29341         "lsrs	r6, r6, r7\n\t"
29342 #else
29343         "lsr	r6, r6, r7\n\t"
29344 #endif
29345 #ifdef WOLFSSL_KEIL
29346         "orrs	r4, r4, r6\n\t"
29347 #elif defined(__clang__)
29348         "orrs	r4, r6\n\t"
29349 #else
29350         "orr	r4, r6\n\t"
29351 #endif
29352         "ldr	r5, [%[a], #40]\n\t"
29353         "str	r4, [%[r], #48]\n\t"
29354 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29355         "lsrs	r6, r5, #1\n\t"
29356 #else
29357         "lsr	r6, r5, #1\n\t"
29358 #endif
29359 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29360         "lsls	r5, r5, %[n]\n\t"
29361 #else
29362         "lsl	r5, r5, %[n]\n\t"
29363 #endif
29364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29365         "lsrs	r6, r6, r7\n\t"
29366 #else
29367         "lsr	r6, r6, r7\n\t"
29368 #endif
29369 #ifdef WOLFSSL_KEIL
29370         "orrs	r3, r3, r6\n\t"
29371 #elif defined(__clang__)
29372         "orrs	r3, r6\n\t"
29373 #else
29374         "orr	r3, r6\n\t"
29375 #endif
29376         "ldr	r4, [%[a], #36]\n\t"
29377         "str	r3, [%[r], #44]\n\t"
29378 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29379         "lsrs	r6, r4, #1\n\t"
29380 #else
29381         "lsr	r6, r4, #1\n\t"
29382 #endif
29383 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29384         "lsls	r4, r4, %[n]\n\t"
29385 #else
29386         "lsl	r4, r4, %[n]\n\t"
29387 #endif
29388 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29389         "lsrs	r6, r6, r7\n\t"
29390 #else
29391         "lsr	r6, r6, r7\n\t"
29392 #endif
29393 #ifdef WOLFSSL_KEIL
29394         "orrs	r5, r5, r6\n\t"
29395 #elif defined(__clang__)
29396         "orrs	r5, r6\n\t"
29397 #else
29398         "orr	r5, r6\n\t"
29399 #endif
29400         "ldr	r3, [%[a], #32]\n\t"
29401         "str	r5, [%[r], #40]\n\t"
29402 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29403         "lsrs	r6, r3, #1\n\t"
29404 #else
29405         "lsr	r6, r3, #1\n\t"
29406 #endif
29407 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29408         "lsls	r3, r3, %[n]\n\t"
29409 #else
29410         "lsl	r3, r3, %[n]\n\t"
29411 #endif
29412 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29413         "lsrs	r6, r6, r7\n\t"
29414 #else
29415         "lsr	r6, r6, r7\n\t"
29416 #endif
29417 #ifdef WOLFSSL_KEIL
29418         "orrs	r4, r4, r6\n\t"
29419 #elif defined(__clang__)
29420         "orrs	r4, r6\n\t"
29421 #else
29422         "orr	r4, r6\n\t"
29423 #endif
29424         "ldr	r5, [%[a], #28]\n\t"
29425         "str	r4, [%[r], #36]\n\t"
29426 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29427         "lsrs	r6, r5, #1\n\t"
29428 #else
29429         "lsr	r6, r5, #1\n\t"
29430 #endif
29431 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29432         "lsls	r5, r5, %[n]\n\t"
29433 #else
29434         "lsl	r5, r5, %[n]\n\t"
29435 #endif
29436 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29437         "lsrs	r6, r6, r7\n\t"
29438 #else
29439         "lsr	r6, r6, r7\n\t"
29440 #endif
29441 #ifdef WOLFSSL_KEIL
29442         "orrs	r3, r3, r6\n\t"
29443 #elif defined(__clang__)
29444         "orrs	r3, r6\n\t"
29445 #else
29446         "orr	r3, r6\n\t"
29447 #endif
29448         "ldr	r4, [%[a], #24]\n\t"
29449         "str	r3, [%[r], #32]\n\t"
29450 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29451         "lsrs	r6, r4, #1\n\t"
29452 #else
29453         "lsr	r6, r4, #1\n\t"
29454 #endif
29455 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29456         "lsls	r4, r4, %[n]\n\t"
29457 #else
29458         "lsl	r4, r4, %[n]\n\t"
29459 #endif
29460 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29461         "lsrs	r6, r6, r7\n\t"
29462 #else
29463         "lsr	r6, r6, r7\n\t"
29464 #endif
29465 #ifdef WOLFSSL_KEIL
29466         "orrs	r5, r5, r6\n\t"
29467 #elif defined(__clang__)
29468         "orrs	r5, r6\n\t"
29469 #else
29470         "orr	r5, r6\n\t"
29471 #endif
29472         "ldr	r3, [%[a], #20]\n\t"
29473         "str	r5, [%[r], #28]\n\t"
29474 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29475         "lsrs	r6, r3, #1\n\t"
29476 #else
29477         "lsr	r6, r3, #1\n\t"
29478 #endif
29479 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29480         "lsls	r3, r3, %[n]\n\t"
29481 #else
29482         "lsl	r3, r3, %[n]\n\t"
29483 #endif
29484 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29485         "lsrs	r6, r6, r7\n\t"
29486 #else
29487         "lsr	r6, r6, r7\n\t"
29488 #endif
29489 #ifdef WOLFSSL_KEIL
29490         "orrs	r4, r4, r6\n\t"
29491 #elif defined(__clang__)
29492         "orrs	r4, r6\n\t"
29493 #else
29494         "orr	r4, r6\n\t"
29495 #endif
29496         "ldr	r5, [%[a], #16]\n\t"
29497         "str	r4, [%[r], #24]\n\t"
29498 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29499         "lsrs	r6, r5, #1\n\t"
29500 #else
29501         "lsr	r6, r5, #1\n\t"
29502 #endif
29503 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29504         "lsls	r5, r5, %[n]\n\t"
29505 #else
29506         "lsl	r5, r5, %[n]\n\t"
29507 #endif
29508 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29509         "lsrs	r6, r6, r7\n\t"
29510 #else
29511         "lsr	r6, r6, r7\n\t"
29512 #endif
29513 #ifdef WOLFSSL_KEIL
29514         "orrs	r3, r3, r6\n\t"
29515 #elif defined(__clang__)
29516         "orrs	r3, r6\n\t"
29517 #else
29518         "orr	r3, r6\n\t"
29519 #endif
29520         "ldr	r4, [%[a], #12]\n\t"
29521         "str	r3, [%[r], #20]\n\t"
29522 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29523         "lsrs	r6, r4, #1\n\t"
29524 #else
29525         "lsr	r6, r4, #1\n\t"
29526 #endif
29527 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29528         "lsls	r4, r4, %[n]\n\t"
29529 #else
29530         "lsl	r4, r4, %[n]\n\t"
29531 #endif
29532 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29533         "lsrs	r6, r6, r7\n\t"
29534 #else
29535         "lsr	r6, r6, r7\n\t"
29536 #endif
29537 #ifdef WOLFSSL_KEIL
29538         "orrs	r5, r5, r6\n\t"
29539 #elif defined(__clang__)
29540         "orrs	r5, r6\n\t"
29541 #else
29542         "orr	r5, r6\n\t"
29543 #endif
29544         "ldr	r3, [%[a], #8]\n\t"
29545         "str	r5, [%[r], #16]\n\t"
29546 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29547         "lsrs	r6, r3, #1\n\t"
29548 #else
29549         "lsr	r6, r3, #1\n\t"
29550 #endif
29551 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29552         "lsls	r3, r3, %[n]\n\t"
29553 #else
29554         "lsl	r3, r3, %[n]\n\t"
29555 #endif
29556 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29557         "lsrs	r6, r6, r7\n\t"
29558 #else
29559         "lsr	r6, r6, r7\n\t"
29560 #endif
29561 #ifdef WOLFSSL_KEIL
29562         "orrs	r4, r4, r6\n\t"
29563 #elif defined(__clang__)
29564         "orrs	r4, r6\n\t"
29565 #else
29566         "orr	r4, r6\n\t"
29567 #endif
29568         "ldr	r5, [%[a], #4]\n\t"
29569         "str	r4, [%[r], #12]\n\t"
29570 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29571         "lsrs	r6, r5, #1\n\t"
29572 #else
29573         "lsr	r6, r5, #1\n\t"
29574 #endif
29575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29576         "lsls	r5, r5, %[n]\n\t"
29577 #else
29578         "lsl	r5, r5, %[n]\n\t"
29579 #endif
29580 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29581         "lsrs	r6, r6, r7\n\t"
29582 #else
29583         "lsr	r6, r6, r7\n\t"
29584 #endif
29585 #ifdef WOLFSSL_KEIL
29586         "orrs	r3, r3, r6\n\t"
29587 #elif defined(__clang__)
29588         "orrs	r3, r6\n\t"
29589 #else
29590         "orr	r3, r6\n\t"
29591 #endif
29592         "ldr	r4, [%[a]]\n\t"
29593         "str	r3, [%[r], #8]\n\t"
29594 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29595         "lsrs	r6, r4, #1\n\t"
29596 #else
29597         "lsr	r6, r4, #1\n\t"
29598 #endif
29599 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29600         "lsls	r4, r4, %[n]\n\t"
29601 #else
29602         "lsl	r4, r4, %[n]\n\t"
29603 #endif
29604 #if defined(__clang__) || defined(WOLFSSL_KEIL)
29605         "lsrs	r6, r6, r7\n\t"
29606 #else
29607         "lsr	r6, r6, r7\n\t"
29608 #endif
29609 #ifdef WOLFSSL_KEIL
29610         "orrs	r5, r5, r6\n\t"
29611 #elif defined(__clang__)
29612         "orrs	r5, r6\n\t"
29613 #else
29614         "orr	r5, r6\n\t"
29615 #endif
29616         "str	r4, [%[r]]\n\t"
29617         "str	r5, [%[r], #4]\n\t"
29618         : [r] "+r" (r), [a] "+r" (a), [n] "+r" (n)
29619         :
29620         : "memory", "r3", "r4", "r5", "r6", "r7"
29621     );
29622 }
29623 
29624 /* Modular exponentiate 2 to the e mod m. (r = 2^e mod m)
29625  *
29626  * r     A single precision number that is the result of the operation.
29627  * e     A single precision number that is the exponent.
29628  * bits  The number of bits in the exponent.
29629  * m     A single precision number that is the modulus.
29630  * returns  0 on success.
29631  * returns  MEMORY_E on dynamic memory allocation failure.
29632  * returns  MP_VAL when base is even.
29633  */
sp_2048_mod_exp_2_64(sp_digit * r,const sp_digit * e,int bits,const sp_digit * m)29634 static int sp_2048_mod_exp_2_64(sp_digit* r, const sp_digit* e, int bits,
29635         const sp_digit* m)
29636 {
29637 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
29638     sp_digit* td = NULL;
29639 #else
29640     sp_digit td[193];
29641 #endif
29642     sp_digit* norm = NULL;
29643     sp_digit* tmp = NULL;
29644     sp_digit mp = 1;
29645     sp_digit n;
29646     sp_digit o;
29647     sp_digit mask;
29648     int i;
29649     int c;
29650     byte y;
29651     int err = MP_OKAY;
29652 
29653     if ((m[0] & 1) == 0) {
29654         err = MP_VAL;
29655     }
29656 
29657 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
29658     if (err == MP_OKAY) {
29659         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 193, NULL,
29660                                 DYNAMIC_TYPE_TMP_BUFFER);
29661         if (td == NULL)
29662             err = MEMORY_E;
29663     }
29664 #endif
29665 
29666     if (err == MP_OKAY) {
29667         norm = td;
29668         tmp = td + 128;
29669 
29670         sp_2048_mont_setup(m, &mp);
29671         sp_2048_mont_norm_64(norm, m);
29672 
29673         i = (bits - 1) / 32;
29674         n = e[i--];
29675         c = bits & 31;
29676         if (c == 0) {
29677             c = 32;
29678         }
29679         c -= bits % 5;
29680         if (c == 32) {
29681             c = 27;
29682         }
29683         if (c < 0) {
29684             /* Number of bits in top word is less than number needed. */
29685             c = -c;
29686             y = (byte)(n << c);
29687             n = e[i--];
29688             y |= (byte)(n >> (64 - c));
29689             n <<= c;
29690             c = 64 - c;
29691         }
29692         else {
29693             y = (byte)(n >> c);
29694             n <<= 32 - c;
29695         }
29696         sp_2048_lshift_64(r, norm, y);
29697         for (; i>=0 || c>=5; ) {
29698             if (c == 0) {
29699                 n = e[i--];
29700                 y = (byte)(n >> 27);
29701                 n <<= 5;
29702                 c = 27;
29703             }
29704             else if (c < 5) {
29705                 y = (byte)(n >> 27);
29706                 n = e[i--];
29707                 c = 5 - c;
29708                 y |= (byte)(n >> (32 - c));
29709                 n <<= c;
29710                 c = 32 - c;
29711             }
29712             else {
29713                 y = (byte)((n >> 27) & 0x1f);
29714                 n <<= 5;
29715                 c -= 5;
29716             }
29717 
29718             sp_2048_mont_sqr_64(r, r, m, mp);
29719             sp_2048_mont_sqr_64(r, r, m, mp);
29720             sp_2048_mont_sqr_64(r, r, m, mp);
29721             sp_2048_mont_sqr_64(r, r, m, mp);
29722             sp_2048_mont_sqr_64(r, r, m, mp);
29723 
29724             sp_2048_lshift_64(r, r, y);
29725             sp_2048_mul_d_64(tmp, norm, r[64]);
29726             r[64] = 0;
29727             o = sp_2048_add_64(r, r, tmp);
29728             sp_2048_cond_sub_64(r, r, m, (sp_digit)0 - o);
29729         }
29730 
29731         XMEMSET(&r[64], 0, sizeof(sp_digit) * 64U);
29732         sp_2048_mont_reduce_64(r, m, mp);
29733 
29734         mask = 0 - (sp_2048_cmp_64(r, m) >= 0);
29735         sp_2048_cond_sub_64(r, r, m, mask);
29736     }
29737 
29738 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
29739     if (td != NULL)
29740         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
29741 #endif
29742 
29743     return err;
29744 }
29745 #endif /* HAVE_FFDHE_2048 */
29746 
29747 /* Perform the modular exponentiation for Diffie-Hellman.
29748  *
29749  * base     Base.
29750  * exp      Array of bytes that is the exponent.
29751  * expLen   Length of data, in bytes, in exponent.
29752  * mod      Modulus.
29753  * out      Buffer to hold big-endian bytes of exponentiation result.
29754  *          Must be at least 256 bytes long.
29755  * outLen   Length, in bytes, of exponentiation result.
29756  * returns 0 on success, MP_READ_E if there are too many bytes in an array
29757  * and MEMORY_E if memory allocation fails.
29758  */
sp_DhExp_2048(const mp_int * base,const byte * exp,word32 expLen,const mp_int * mod,byte * out,word32 * outLen)29759 int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen,
29760     const mp_int* mod, byte* out, word32* outLen)
29761 {
29762     int err = MP_OKAY;
29763     sp_digit b[128];
29764     sp_digit e[64];
29765     sp_digit m[64];
29766     sp_digit* r = b;
29767     word32 i;
29768 
29769     if (mp_count_bits(base) > 2048) {
29770         err = MP_READ_E;
29771     }
29772     else if (expLen > 256) {
29773         err = MP_READ_E;
29774     }
29775     else if (mp_count_bits(mod) != 2048) {
29776         err = MP_READ_E;
29777     }
29778     else if (mp_iseven(mod)) {
29779         err = MP_VAL;
29780     }
29781 
29782     if (err == MP_OKAY) {
29783         sp_2048_from_mp(b, 64, base);
29784         sp_2048_from_bin(e, 64, exp, expLen);
29785         sp_2048_from_mp(m, 64, mod);
29786 
29787     #ifdef HAVE_FFDHE_2048
29788         if (base->used == 1 && base->dp[0] == 2 && m[63] == (sp_digit)-1)
29789             err = sp_2048_mod_exp_2_64(r, e, expLen * 8, m);
29790         else
29791     #endif
29792             err = sp_2048_mod_exp_64(r, b, e, expLen * 8, m, 0);
29793 
29794     }
29795 
29796     if (err == MP_OKAY) {
29797         sp_2048_to_bin_64(r, out);
29798         *outLen = 256;
29799         for (i=0; i<256 && out[i] == 0; i++) {
29800             /* Search for first non-zero. */
29801         }
29802         *outLen -= i;
29803         XMEMMOVE(out, out + i, *outLen);
29804 
29805     }
29806 
29807     XMEMSET(e, 0, sizeof(e));
29808 
29809     return err;
29810 }
29811 #endif /* WOLFSSL_HAVE_SP_DH */
29812 
29813 /* Perform the modular exponentiation for Diffie-Hellman.
29814  *
29815  * base  Base. MP integer.
29816  * exp   Exponent. MP integer.
29817  * mod   Modulus. MP integer.
29818  * res   Result. MP integer.
29819  * returns 0 on success, MP_READ_E if there are too many bytes in an array
29820  * and MEMORY_E if memory allocation fails.
29821  */
sp_ModExp_1024(const mp_int * base,const mp_int * exp,const mp_int * mod,mp_int * res)29822 int sp_ModExp_1024(const mp_int* base, const mp_int* exp, const mp_int* mod,
29823     mp_int* res)
29824 {
29825     int err = MP_OKAY;
29826     sp_digit b[64];
29827     sp_digit e[32];
29828     sp_digit m[32];
29829     sp_digit* r = b;
29830     int expBits = mp_count_bits(exp);
29831 
29832     if (mp_count_bits(base) > 1024) {
29833         err = MP_READ_E;
29834     }
29835     else if (expBits > 1024) {
29836         err = MP_READ_E;
29837     }
29838     else if (mp_count_bits(mod) != 1024) {
29839         err = MP_READ_E;
29840     }
29841     else if (mp_iseven(mod)) {
29842         err = MP_VAL;
29843     }
29844 
29845     if (err == MP_OKAY) {
29846         sp_2048_from_mp(b, 32, base);
29847         sp_2048_from_mp(e, 32, exp);
29848         sp_2048_from_mp(m, 32, mod);
29849 
29850         err = sp_2048_mod_exp_32(r, b, e, expBits, m, 0);
29851     }
29852 
29853     if (err == MP_OKAY) {
29854         XMEMSET(r + 32, 0, sizeof(*r) * 32U);
29855         err = sp_2048_to_mp(r, res);
29856         res->used = mod->used;
29857         mp_clamp(res);
29858     }
29859 
29860     XMEMSET(e, 0, sizeof(e));
29861 
29862     return err;
29863 }
29864 
29865 #endif /* WOLFSSL_HAVE_SP_DH | (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) */
29866 
29867 #endif /* !WOLFSSL_SP_NO_2048 */
29868 
29869 #ifndef WOLFSSL_SP_NO_3072
29870 /* Read big endian unsigned byte array into r.
29871  *
29872  * r  A single precision integer.
29873  * size  Maximum number of bytes to convert
29874  * a  Byte array.
29875  * n  Number of bytes in array to read.
29876  */
sp_3072_from_bin(sp_digit * r,int size,const byte * a,int n)29877 static void sp_3072_from_bin(sp_digit* r, int size, const byte* a, int n)
29878 {
29879     int i;
29880     int j = 0;
29881     word32 s = 0;
29882 
29883     r[0] = 0;
29884     for (i = n-1; i >= 0; i--) {
29885         r[j] |= (((sp_digit)a[i]) << s);
29886         if (s >= 24U) {
29887             r[j] &= 0xffffffff;
29888             s = 32U - s;
29889             if (j + 1 >= size) {
29890                 break;
29891             }
29892             r[++j] = (sp_digit)a[i] >> s;
29893             s = 8U - s;
29894         }
29895         else {
29896             s += 8U;
29897         }
29898     }
29899 
29900     for (j++; j < size; j++) {
29901         r[j] = 0;
29902     }
29903 }
29904 
29905 /* Convert an mp_int to an array of sp_digit.
29906  *
29907  * r  A single precision integer.
29908  * size  Maximum number of bytes to convert
29909  * a  A multi-precision integer.
29910  */
sp_3072_from_mp(sp_digit * r,int size,const mp_int * a)29911 static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a)
29912 {
29913 #if DIGIT_BIT == 32
29914     int j;
29915 
29916     XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
29917 
29918     for (j = a->used; j < size; j++) {
29919         r[j] = 0;
29920     }
29921 #elif DIGIT_BIT > 32
29922     int i;
29923     int j = 0;
29924     word32 s = 0;
29925 
29926     r[0] = 0;
29927     for (i = 0; i < a->used && j < size; i++) {
29928         r[j] |= ((sp_digit)a->dp[i] << s);
29929         r[j] &= 0xffffffff;
29930         s = 32U - s;
29931         if (j + 1 >= size) {
29932             break;
29933         }
29934         /* lint allow cast of mismatch word32 and mp_digit */
29935         r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
29936         while ((s + 32U) <= (word32)DIGIT_BIT) {
29937             s += 32U;
29938             r[j] &= 0xffffffff;
29939             if (j + 1 >= size) {
29940                 break;
29941             }
29942             if (s < (word32)DIGIT_BIT) {
29943                 /* lint allow cast of mismatch word32 and mp_digit */
29944                 r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
29945             }
29946             else {
29947                 r[++j] = (sp_digit)0;
29948             }
29949         }
29950         s = (word32)DIGIT_BIT - s;
29951     }
29952 
29953     for (j++; j < size; j++) {
29954         r[j] = 0;
29955     }
29956 #else
29957     int i;
29958     int j = 0;
29959     int s = 0;
29960 
29961     r[0] = 0;
29962     for (i = 0; i < a->used && j < size; i++) {
29963         r[j] |= ((sp_digit)a->dp[i]) << s;
29964         if (s + DIGIT_BIT >= 32) {
29965             r[j] &= 0xffffffff;
29966             if (j + 1 >= size) {
29967                 break;
29968             }
29969             s = 32 - s;
29970             if (s == DIGIT_BIT) {
29971                 r[++j] = 0;
29972                 s = 0;
29973             }
29974             else {
29975                 r[++j] = a->dp[i] >> s;
29976                 s = DIGIT_BIT - s;
29977             }
29978         }
29979         else {
29980             s += DIGIT_BIT;
29981         }
29982     }
29983 
29984     for (j++; j < size; j++) {
29985         r[j] = 0;
29986     }
29987 #endif
29988 }
29989 
29990 /* Write r as big endian to byte array.
29991  * Fixed length number of bytes written: 384
29992  *
29993  * r  A single precision integer.
29994  * a  Byte array.
29995  */
sp_3072_to_bin_96(sp_digit * r,byte * a)29996 static void sp_3072_to_bin_96(sp_digit* r, byte* a)
29997 {
29998     int i;
29999     int j;
30000     int s = 0;
30001     int b;
30002 
30003     j = 3072 / 8 - 1;
30004     a[j] = 0;
30005     for (i=0; i<96 && j>=0; i++) {
30006         b = 0;
30007         /* lint allow cast of mismatch sp_digit and int */
30008         a[j--] |= (byte)(r[i] << s); /*lint !e9033*/
30009         b += 8 - s;
30010         if (j < 0) {
30011             break;
30012         }
30013         while (b < 32) {
30014             a[j--] = (byte)(r[i] >> b);
30015             b += 8;
30016             if (j < 0) {
30017                 break;
30018             }
30019         }
30020         s = 8 - (b - 32);
30021         if (j >= 0) {
30022             a[j] = 0;
30023         }
30024         if (s != 0) {
30025             j++;
30026         }
30027     }
30028 }
30029 
30030 #if (defined(WOLFSSL_HAVE_SP_RSA) && (!defined(WOLFSSL_RSA_PUBLIC_ONLY) || !defined(WOLFSSL_SP_SMALL))) || defined(WOLFSSL_HAVE_SP_DH)
30031 /* Normalize the values in each word to 32.
30032  *
30033  * a  Array of sp_digit to normalize.
30034  */
30035 #define sp_3072_norm_96(a)
30036 
30037 #endif /* (WOLFSSL_HAVE_SP_RSA && (!WOLFSSL_RSA_PUBLIC_ONLY || !WOLFSSL_SP_SMALL)) || WOLFSSL_HAVE_SP_DH */
30038 /* Normalize the values in each word to 32.
30039  *
30040  * a  Array of sp_digit to normalize.
30041  */
30042 #define sp_3072_norm_96(a)
30043 
30044 #ifndef WOLFSSL_SP_SMALL
30045 #ifndef WOLFSSL_SP_LARGE_CODE
30046 /* Multiply a and b into r. (r = a * b)
30047  *
30048  * r  A single precision integer.
30049  * a  A single precision integer.
30050  * b  A single precision integer.
30051  */
sp_3072_mul_12(sp_digit * r,const sp_digit * a,const sp_digit * b)30052 SP_NOINLINE static void sp_3072_mul_12(sp_digit* r, const sp_digit* a,
30053         const sp_digit* b)
30054 {
30055     sp_digit t[12 * 2];
30056     sp_digit* tmp = t;
30057     __asm__ __volatile__ (
30058         "movs	r3, #0\n\t"
30059         "movs	r4, #0\n\t"
30060         "mov	r8, r3\n\t"
30061         "mov	r11, %[tmp]\n\t"
30062         "mov	r9, %[a]\n\t"
30063         "mov	r10, %[b]\n\t"
30064         "movs	r6, #48\n\t"
30065         "add	r6, r6, r9\n\t"
30066         "mov	r12, r6\n\t"
30067         "\n"
30068     "L_sp_3072_mul_12_words_%=:\n\t"
30069         "movs	%[tmp], #0\n\t"
30070         "movs	r5, #0\n\t"
30071         "movs	r6, #44\n\t"
30072         "mov	%[a], r8\n\t"
30073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30074         "subs	%[a], %[a], r6\n\t"
30075 #else
30076         "sub	%[a], %[a], r6\n\t"
30077 #endif
30078 #ifdef WOLFSSL_KEIL
30079         "sbcs	r6, r6, r6\n\t"
30080 #elif defined(__clang__)
30081         "sbcs	r6, r6\n\t"
30082 #else
30083         "sbc	r6, r6\n\t"
30084 #endif
30085 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30086         "mvns	r6, r6\n\t"
30087 #else
30088         "mvn	r6, r6\n\t"
30089 #endif
30090 #ifdef WOLFSSL_KEIL
30091         "ands	%[a], %[a], r6\n\t"
30092 #elif defined(__clang__)
30093         "ands	%[a], r6\n\t"
30094 #else
30095         "and	%[a], r6\n\t"
30096 #endif
30097         "mov	%[b], r8\n\t"
30098 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30099         "subs	%[b], %[b], %[a]\n\t"
30100 #else
30101         "sub	%[b], %[b], %[a]\n\t"
30102 #endif
30103         "add	%[a], %[a], r9\n\t"
30104         "add	%[b], %[b], r10\n\t"
30105         "\n"
30106     "L_sp_3072_mul_12_mul_%=:\n\t"
30107         "# Multiply Start\n\t"
30108         "ldrh	r6, [%[a]]\n\t"
30109         "ldrh	r7, [%[b]]\n\t"
30110 #ifdef WOLFSSL_KEIL
30111         "muls	r7, r6, r7\n\t"
30112 #elif defined(__clang__)
30113         "muls	r7, r6\n\t"
30114 #else
30115         "mul	r7, r6\n\t"
30116 #endif
30117 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30118         "adds	r3, r3, r7\n\t"
30119 #else
30120         "add	r3, r3, r7\n\t"
30121 #endif
30122 #ifdef WOLFSSL_KEIL
30123         "adcs	r4, r4, %[tmp]\n\t"
30124 #elif defined(__clang__)
30125         "adcs	r4, %[tmp]\n\t"
30126 #else
30127         "adc	r4, %[tmp]\n\t"
30128 #endif
30129 #ifdef WOLFSSL_KEIL
30130         "adcs	r5, r5, %[tmp]\n\t"
30131 #elif defined(__clang__)
30132         "adcs	r5, %[tmp]\n\t"
30133 #else
30134         "adc	r5, %[tmp]\n\t"
30135 #endif
30136         "ldr	r7, [%[b]]\n\t"
30137 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30138         "lsrs	r7, r7, #16\n\t"
30139 #else
30140         "lsr	r7, r7, #16\n\t"
30141 #endif
30142 #ifdef WOLFSSL_KEIL
30143         "muls	r6, r7, r6\n\t"
30144 #elif defined(__clang__)
30145         "muls	r6, r7\n\t"
30146 #else
30147         "mul	r6, r7\n\t"
30148 #endif
30149 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30150         "lsrs	r7, r6, #16\n\t"
30151 #else
30152         "lsr	r7, r6, #16\n\t"
30153 #endif
30154 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30155         "lsls	r6, r6, #16\n\t"
30156 #else
30157         "lsl	r6, r6, #16\n\t"
30158 #endif
30159 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30160         "adds	r3, r3, r6\n\t"
30161 #else
30162         "add	r3, r3, r6\n\t"
30163 #endif
30164 #ifdef WOLFSSL_KEIL
30165         "adcs	r4, r4, r7\n\t"
30166 #elif defined(__clang__)
30167         "adcs	r4, r7\n\t"
30168 #else
30169         "adc	r4, r7\n\t"
30170 #endif
30171 #ifdef WOLFSSL_KEIL
30172         "adcs	r5, r5, %[tmp]\n\t"
30173 #elif defined(__clang__)
30174         "adcs	r5, %[tmp]\n\t"
30175 #else
30176         "adc	r5, %[tmp]\n\t"
30177 #endif
30178         "ldr	r6, [%[a]]\n\t"
30179         "ldr	r7, [%[b]]\n\t"
30180 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30181         "lsrs	r6, r6, #16\n\t"
30182 #else
30183         "lsr	r6, r6, #16\n\t"
30184 #endif
30185 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30186         "lsrs	r7, r7, #16\n\t"
30187 #else
30188         "lsr	r7, r7, #16\n\t"
30189 #endif
30190 #ifdef WOLFSSL_KEIL
30191         "muls	r7, r6, r7\n\t"
30192 #elif defined(__clang__)
30193         "muls	r7, r6\n\t"
30194 #else
30195         "mul	r7, r6\n\t"
30196 #endif
30197 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30198         "adds	r4, r4, r7\n\t"
30199 #else
30200         "add	r4, r4, r7\n\t"
30201 #endif
30202 #ifdef WOLFSSL_KEIL
30203         "adcs	r5, r5, %[tmp]\n\t"
30204 #elif defined(__clang__)
30205         "adcs	r5, %[tmp]\n\t"
30206 #else
30207         "adc	r5, %[tmp]\n\t"
30208 #endif
30209         "ldrh	r7, [%[b]]\n\t"
30210 #ifdef WOLFSSL_KEIL
30211         "muls	r6, r7, r6\n\t"
30212 #elif defined(__clang__)
30213         "muls	r6, r7\n\t"
30214 #else
30215         "mul	r6, r7\n\t"
30216 #endif
30217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30218         "lsrs	r7, r6, #16\n\t"
30219 #else
30220         "lsr	r7, r6, #16\n\t"
30221 #endif
30222 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30223         "lsls	r6, r6, #16\n\t"
30224 #else
30225         "lsl	r6, r6, #16\n\t"
30226 #endif
30227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30228         "adds	r3, r3, r6\n\t"
30229 #else
30230         "add	r3, r3, r6\n\t"
30231 #endif
30232 #ifdef WOLFSSL_KEIL
30233         "adcs	r4, r4, r7\n\t"
30234 #elif defined(__clang__)
30235         "adcs	r4, r7\n\t"
30236 #else
30237         "adc	r4, r7\n\t"
30238 #endif
30239 #ifdef WOLFSSL_KEIL
30240         "adcs	r5, r5, %[tmp]\n\t"
30241 #elif defined(__clang__)
30242         "adcs	r5, %[tmp]\n\t"
30243 #else
30244         "adc	r5, %[tmp]\n\t"
30245 #endif
30246         "# Multiply Done\n\t"
30247 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30248         "adds	%[a], %[a], #4\n\t"
30249 #else
30250         "add	%[a], %[a], #4\n\t"
30251 #endif
30252 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30253         "subs	%[b], %[b], #4\n\t"
30254 #else
30255         "sub	%[b], %[b], #4\n\t"
30256 #endif
30257         "cmp	%[a], r12\n\t"
30258         "beq	L_sp_3072_mul_12_done_mul_%=\n\t"
30259         "mov	r6, r8\n\t"
30260         "add	r6, r6, r9\n\t"
30261         "cmp	%[a], r6\n\t"
30262         "ble	L_sp_3072_mul_12_mul_%=\n\t"
30263         "\n"
30264     "L_sp_3072_mul_12_done_mul_%=:\n\t"
30265         "mov	%[tmp], r11\n\t"
30266         "mov	r7, r8\n\t"
30267         "str	r3, [%[tmp], r7]\n\t"
30268         "movs	r3, r4\n\t"
30269         "movs	r4, r5\n\t"
30270 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30271         "adds	r7, r7, #4\n\t"
30272 #else
30273         "add	r7, r7, #4\n\t"
30274 #endif
30275         "mov	r8, r7\n\t"
30276         "movs	r6, #0x58\n\t"
30277         "cmp	r7, r6\n\t"
30278         "ble	L_sp_3072_mul_12_words_%=\n\t"
30279         "str	r3, [%[tmp], r7]\n\t"
30280         "mov	%[a], r9\n\t"
30281         "mov	%[b], r10\n\t"
30282         : [a] "+r" (a), [b] "+r" (b), [tmp] "+r" (tmp)
30283         :
30284         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
30285     );
30286 
30287     XMEMCPY(r, t, sizeof(t));
30288 }
30289 
30290 #else
30291 /* Multiply a and b into r. (r = a * b)
30292  *
30293  * r  A single precision integer.
30294  * a  A single precision integer.
30295  * b  A single precision integer.
30296  */
sp_3072_mul_12(sp_digit * r,const sp_digit * a,const sp_digit * b)30297 SP_NOINLINE static void sp_3072_mul_12(sp_digit* r, const sp_digit* a,
30298         const sp_digit* b)
30299 {
30300     __asm__ __volatile__ (
30301         "sub	sp, sp, #48\n\t"
30302         "mov	r8, %[r]\n\t"
30303         "mov	r9, %[a]\n\t"
30304         "mov	r10, %[b]\n\t"
30305         "movs	%[r], #0\n\t"
30306         "#  A[0] * B[0]\n\t"
30307         "ldr	%[a], [%[a]]\n\t"
30308         "ldr	%[b], [%[b]]\n\t"
30309         "uxth	r6, %[a]\n\t"
30310         "uxth	r3, %[b]\n\t"
30311 #ifdef WOLFSSL_KEIL
30312         "muls	r3, r6, r3\n\t"
30313 #elif defined(__clang__)
30314         "muls	r3, r6\n\t"
30315 #else
30316         "mul	r3, r6\n\t"
30317 #endif
30318 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30319         "lsrs	r7, %[b], #16\n\t"
30320 #else
30321         "lsr	r7, %[b], #16\n\t"
30322 #endif
30323 #ifdef WOLFSSL_KEIL
30324         "muls	r6, r7, r6\n\t"
30325 #elif defined(__clang__)
30326         "muls	r6, r7\n\t"
30327 #else
30328         "mul	r6, r7\n\t"
30329 #endif
30330 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30331         "lsrs	r4, r6, #16\n\t"
30332 #else
30333         "lsr	r4, r6, #16\n\t"
30334 #endif
30335 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30336         "lsls	r6, r6, #16\n\t"
30337 #else
30338         "lsl	r6, r6, #16\n\t"
30339 #endif
30340 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30341         "adds	r3, r3, r6\n\t"
30342 #else
30343         "add	r3, r3, r6\n\t"
30344 #endif
30345 #ifdef WOLFSSL_KEIL
30346         "adcs	r4, r4, %[r]\n\t"
30347 #elif defined(__clang__)
30348         "adcs	r4, %[r]\n\t"
30349 #else
30350         "adc	r4, %[r]\n\t"
30351 #endif
30352 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30353         "lsrs	r6, %[a], #16\n\t"
30354 #else
30355         "lsr	r6, %[a], #16\n\t"
30356 #endif
30357 #ifdef WOLFSSL_KEIL
30358         "muls	r7, r6, r7\n\t"
30359 #elif defined(__clang__)
30360         "muls	r7, r6\n\t"
30361 #else
30362         "mul	r7, r6\n\t"
30363 #endif
30364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30365         "adds	r4, r4, r7\n\t"
30366 #else
30367         "add	r4, r4, r7\n\t"
30368 #endif
30369         "uxth	r7, %[b]\n\t"
30370 #ifdef WOLFSSL_KEIL
30371         "muls	r6, r7, r6\n\t"
30372 #elif defined(__clang__)
30373         "muls	r6, r7\n\t"
30374 #else
30375         "mul	r6, r7\n\t"
30376 #endif
30377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30378         "lsrs	r7, r6, #16\n\t"
30379 #else
30380         "lsr	r7, r6, #16\n\t"
30381 #endif
30382 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30383         "lsls	r6, r6, #16\n\t"
30384 #else
30385         "lsl	r6, r6, #16\n\t"
30386 #endif
30387 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30388         "adds	r3, r3, r6\n\t"
30389 #else
30390         "add	r3, r3, r6\n\t"
30391 #endif
30392 #ifdef WOLFSSL_KEIL
30393         "adcs	r4, r4, r7\n\t"
30394 #elif defined(__clang__)
30395         "adcs	r4, r7\n\t"
30396 #else
30397         "adc	r4, r7\n\t"
30398 #endif
30399         "movs	r5, #0\n\t"
30400         "str	r3, [sp]\n\t"
30401         "#  A[0] * B[1]\n\t"
30402         "movs	r3, #0\n\t"
30403         "mov	%[a], r9\n\t"
30404         "mov	%[b], r10\n\t"
30405         "ldr	%[a], [%[a]]\n\t"
30406         "ldr	%[b], [%[b], #4]\n\t"
30407         "uxth	r6, %[a]\n\t"
30408         "uxth	r7, %[b]\n\t"
30409 #ifdef WOLFSSL_KEIL
30410         "muls	r7, r6, r7\n\t"
30411 #elif defined(__clang__)
30412         "muls	r7, r6\n\t"
30413 #else
30414         "mul	r7, r6\n\t"
30415 #endif
30416 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30417         "adds	r4, r4, r7\n\t"
30418 #else
30419         "add	r4, r4, r7\n\t"
30420 #endif
30421 #ifdef WOLFSSL_KEIL
30422         "adcs	r5, r5, %[r]\n\t"
30423 #elif defined(__clang__)
30424         "adcs	r5, %[r]\n\t"
30425 #else
30426         "adc	r5, %[r]\n\t"
30427 #endif
30428 #ifdef WOLFSSL_KEIL
30429         "adcs	r3, r3, %[r]\n\t"
30430 #elif defined(__clang__)
30431         "adcs	r3, %[r]\n\t"
30432 #else
30433         "adc	r3, %[r]\n\t"
30434 #endif
30435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30436         "lsrs	r7, %[b], #16\n\t"
30437 #else
30438         "lsr	r7, %[b], #16\n\t"
30439 #endif
30440 #ifdef WOLFSSL_KEIL
30441         "muls	r6, r7, r6\n\t"
30442 #elif defined(__clang__)
30443         "muls	r6, r7\n\t"
30444 #else
30445         "mul	r6, r7\n\t"
30446 #endif
30447 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30448         "lsrs	r7, r6, #16\n\t"
30449 #else
30450         "lsr	r7, r6, #16\n\t"
30451 #endif
30452 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30453         "lsls	r6, r6, #16\n\t"
30454 #else
30455         "lsl	r6, r6, #16\n\t"
30456 #endif
30457 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30458         "adds	r4, r4, r6\n\t"
30459 #else
30460         "add	r4, r4, r6\n\t"
30461 #endif
30462 #ifdef WOLFSSL_KEIL
30463         "adcs	r5, r5, r7\n\t"
30464 #elif defined(__clang__)
30465         "adcs	r5, r7\n\t"
30466 #else
30467         "adc	r5, r7\n\t"
30468 #endif
30469 #ifdef WOLFSSL_KEIL
30470         "adcs	r3, r3, %[r]\n\t"
30471 #elif defined(__clang__)
30472         "adcs	r3, %[r]\n\t"
30473 #else
30474         "adc	r3, %[r]\n\t"
30475 #endif
30476 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30477         "lsrs	r6, %[a], #16\n\t"
30478 #else
30479         "lsr	r6, %[a], #16\n\t"
30480 #endif
30481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30482         "lsrs	r7, %[b], #16\n\t"
30483 #else
30484         "lsr	r7, %[b], #16\n\t"
30485 #endif
30486 #ifdef WOLFSSL_KEIL
30487         "muls	r7, r6, r7\n\t"
30488 #elif defined(__clang__)
30489         "muls	r7, r6\n\t"
30490 #else
30491         "mul	r7, r6\n\t"
30492 #endif
30493 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30494         "adds	r5, r5, r7\n\t"
30495 #else
30496         "add	r5, r5, r7\n\t"
30497 #endif
30498 #ifdef WOLFSSL_KEIL
30499         "adcs	r3, r3, %[r]\n\t"
30500 #elif defined(__clang__)
30501         "adcs	r3, %[r]\n\t"
30502 #else
30503         "adc	r3, %[r]\n\t"
30504 #endif
30505         "uxth	r7, %[b]\n\t"
30506 #ifdef WOLFSSL_KEIL
30507         "muls	r6, r7, r6\n\t"
30508 #elif defined(__clang__)
30509         "muls	r6, r7\n\t"
30510 #else
30511         "mul	r6, r7\n\t"
30512 #endif
30513 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30514         "lsrs	r7, r6, #16\n\t"
30515 #else
30516         "lsr	r7, r6, #16\n\t"
30517 #endif
30518 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30519         "lsls	r6, r6, #16\n\t"
30520 #else
30521         "lsl	r6, r6, #16\n\t"
30522 #endif
30523 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30524         "adds	r4, r4, r6\n\t"
30525 #else
30526         "add	r4, r4, r6\n\t"
30527 #endif
30528 #ifdef WOLFSSL_KEIL
30529         "adcs	r5, r5, r7\n\t"
30530 #elif defined(__clang__)
30531         "adcs	r5, r7\n\t"
30532 #else
30533         "adc	r5, r7\n\t"
30534 #endif
30535 #ifdef WOLFSSL_KEIL
30536         "adcs	r3, r3, %[r]\n\t"
30537 #elif defined(__clang__)
30538         "adcs	r3, %[r]\n\t"
30539 #else
30540         "adc	r3, %[r]\n\t"
30541 #endif
30542         "#  A[1] * B[0]\n\t"
30543         "mov	%[a], r9\n\t"
30544         "mov	%[b], r10\n\t"
30545         "ldr	%[a], [%[a], #4]\n\t"
30546         "ldr	%[b], [%[b]]\n\t"
30547         "uxth	r6, %[a]\n\t"
30548         "uxth	r7, %[b]\n\t"
30549 #ifdef WOLFSSL_KEIL
30550         "muls	r7, r6, r7\n\t"
30551 #elif defined(__clang__)
30552         "muls	r7, r6\n\t"
30553 #else
30554         "mul	r7, r6\n\t"
30555 #endif
30556 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30557         "adds	r4, r4, r7\n\t"
30558 #else
30559         "add	r4, r4, r7\n\t"
30560 #endif
30561 #ifdef WOLFSSL_KEIL
30562         "adcs	r5, r5, %[r]\n\t"
30563 #elif defined(__clang__)
30564         "adcs	r5, %[r]\n\t"
30565 #else
30566         "adc	r5, %[r]\n\t"
30567 #endif
30568 #ifdef WOLFSSL_KEIL
30569         "adcs	r3, r3, %[r]\n\t"
30570 #elif defined(__clang__)
30571         "adcs	r3, %[r]\n\t"
30572 #else
30573         "adc	r3, %[r]\n\t"
30574 #endif
30575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30576         "lsrs	r7, %[b], #16\n\t"
30577 #else
30578         "lsr	r7, %[b], #16\n\t"
30579 #endif
30580 #ifdef WOLFSSL_KEIL
30581         "muls	r6, r7, r6\n\t"
30582 #elif defined(__clang__)
30583         "muls	r6, r7\n\t"
30584 #else
30585         "mul	r6, r7\n\t"
30586 #endif
30587 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30588         "lsrs	r7, r6, #16\n\t"
30589 #else
30590         "lsr	r7, r6, #16\n\t"
30591 #endif
30592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30593         "lsls	r6, r6, #16\n\t"
30594 #else
30595         "lsl	r6, r6, #16\n\t"
30596 #endif
30597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30598         "adds	r4, r4, r6\n\t"
30599 #else
30600         "add	r4, r4, r6\n\t"
30601 #endif
30602 #ifdef WOLFSSL_KEIL
30603         "adcs	r5, r5, r7\n\t"
30604 #elif defined(__clang__)
30605         "adcs	r5, r7\n\t"
30606 #else
30607         "adc	r5, r7\n\t"
30608 #endif
30609 #ifdef WOLFSSL_KEIL
30610         "adcs	r3, r3, %[r]\n\t"
30611 #elif defined(__clang__)
30612         "adcs	r3, %[r]\n\t"
30613 #else
30614         "adc	r3, %[r]\n\t"
30615 #endif
30616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30617         "lsrs	r6, %[a], #16\n\t"
30618 #else
30619         "lsr	r6, %[a], #16\n\t"
30620 #endif
30621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30622         "lsrs	r7, %[b], #16\n\t"
30623 #else
30624         "lsr	r7, %[b], #16\n\t"
30625 #endif
30626 #ifdef WOLFSSL_KEIL
30627         "muls	r7, r6, r7\n\t"
30628 #elif defined(__clang__)
30629         "muls	r7, r6\n\t"
30630 #else
30631         "mul	r7, r6\n\t"
30632 #endif
30633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30634         "adds	r5, r5, r7\n\t"
30635 #else
30636         "add	r5, r5, r7\n\t"
30637 #endif
30638 #ifdef WOLFSSL_KEIL
30639         "adcs	r3, r3, %[r]\n\t"
30640 #elif defined(__clang__)
30641         "adcs	r3, %[r]\n\t"
30642 #else
30643         "adc	r3, %[r]\n\t"
30644 #endif
30645         "uxth	r7, %[b]\n\t"
30646 #ifdef WOLFSSL_KEIL
30647         "muls	r6, r7, r6\n\t"
30648 #elif defined(__clang__)
30649         "muls	r6, r7\n\t"
30650 #else
30651         "mul	r6, r7\n\t"
30652 #endif
30653 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30654         "lsrs	r7, r6, #16\n\t"
30655 #else
30656         "lsr	r7, r6, #16\n\t"
30657 #endif
30658 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30659         "lsls	r6, r6, #16\n\t"
30660 #else
30661         "lsl	r6, r6, #16\n\t"
30662 #endif
30663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30664         "adds	r4, r4, r6\n\t"
30665 #else
30666         "add	r4, r4, r6\n\t"
30667 #endif
30668 #ifdef WOLFSSL_KEIL
30669         "adcs	r5, r5, r7\n\t"
30670 #elif defined(__clang__)
30671         "adcs	r5, r7\n\t"
30672 #else
30673         "adc	r5, r7\n\t"
30674 #endif
30675 #ifdef WOLFSSL_KEIL
30676         "adcs	r3, r3, %[r]\n\t"
30677 #elif defined(__clang__)
30678         "adcs	r3, %[r]\n\t"
30679 #else
30680         "adc	r3, %[r]\n\t"
30681 #endif
30682         "str	r4, [sp, #4]\n\t"
30683         "#  A[2] * B[0]\n\t"
30684         "movs	r4, #0\n\t"
30685         "mov	%[a], r9\n\t"
30686         "mov	%[b], r10\n\t"
30687         "ldr	%[a], [%[a], #8]\n\t"
30688         "ldr	%[b], [%[b]]\n\t"
30689         "uxth	r6, %[a]\n\t"
30690         "uxth	r7, %[b]\n\t"
30691 #ifdef WOLFSSL_KEIL
30692         "muls	r7, r6, r7\n\t"
30693 #elif defined(__clang__)
30694         "muls	r7, r6\n\t"
30695 #else
30696         "mul	r7, r6\n\t"
30697 #endif
30698 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30699         "adds	r5, r5, r7\n\t"
30700 #else
30701         "add	r5, r5, r7\n\t"
30702 #endif
30703 #ifdef WOLFSSL_KEIL
30704         "adcs	r3, r3, %[r]\n\t"
30705 #elif defined(__clang__)
30706         "adcs	r3, %[r]\n\t"
30707 #else
30708         "adc	r3, %[r]\n\t"
30709 #endif
30710 #ifdef WOLFSSL_KEIL
30711         "adcs	r4, r4, %[r]\n\t"
30712 #elif defined(__clang__)
30713         "adcs	r4, %[r]\n\t"
30714 #else
30715         "adc	r4, %[r]\n\t"
30716 #endif
30717 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30718         "lsrs	r7, %[b], #16\n\t"
30719 #else
30720         "lsr	r7, %[b], #16\n\t"
30721 #endif
30722 #ifdef WOLFSSL_KEIL
30723         "muls	r6, r7, r6\n\t"
30724 #elif defined(__clang__)
30725         "muls	r6, r7\n\t"
30726 #else
30727         "mul	r6, r7\n\t"
30728 #endif
30729 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30730         "lsrs	r7, r6, #16\n\t"
30731 #else
30732         "lsr	r7, r6, #16\n\t"
30733 #endif
30734 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30735         "lsls	r6, r6, #16\n\t"
30736 #else
30737         "lsl	r6, r6, #16\n\t"
30738 #endif
30739 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30740         "adds	r5, r5, r6\n\t"
30741 #else
30742         "add	r5, r5, r6\n\t"
30743 #endif
30744 #ifdef WOLFSSL_KEIL
30745         "adcs	r3, r3, r7\n\t"
30746 #elif defined(__clang__)
30747         "adcs	r3, r7\n\t"
30748 #else
30749         "adc	r3, r7\n\t"
30750 #endif
30751 #ifdef WOLFSSL_KEIL
30752         "adcs	r4, r4, %[r]\n\t"
30753 #elif defined(__clang__)
30754         "adcs	r4, %[r]\n\t"
30755 #else
30756         "adc	r4, %[r]\n\t"
30757 #endif
30758 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30759         "lsrs	r6, %[a], #16\n\t"
30760 #else
30761         "lsr	r6, %[a], #16\n\t"
30762 #endif
30763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30764         "lsrs	r7, %[b], #16\n\t"
30765 #else
30766         "lsr	r7, %[b], #16\n\t"
30767 #endif
30768 #ifdef WOLFSSL_KEIL
30769         "muls	r7, r6, r7\n\t"
30770 #elif defined(__clang__)
30771         "muls	r7, r6\n\t"
30772 #else
30773         "mul	r7, r6\n\t"
30774 #endif
30775 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30776         "adds	r3, r3, r7\n\t"
30777 #else
30778         "add	r3, r3, r7\n\t"
30779 #endif
30780 #ifdef WOLFSSL_KEIL
30781         "adcs	r4, r4, %[r]\n\t"
30782 #elif defined(__clang__)
30783         "adcs	r4, %[r]\n\t"
30784 #else
30785         "adc	r4, %[r]\n\t"
30786 #endif
30787         "uxth	r7, %[b]\n\t"
30788 #ifdef WOLFSSL_KEIL
30789         "muls	r6, r7, r6\n\t"
30790 #elif defined(__clang__)
30791         "muls	r6, r7\n\t"
30792 #else
30793         "mul	r6, r7\n\t"
30794 #endif
30795 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30796         "lsrs	r7, r6, #16\n\t"
30797 #else
30798         "lsr	r7, r6, #16\n\t"
30799 #endif
30800 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30801         "lsls	r6, r6, #16\n\t"
30802 #else
30803         "lsl	r6, r6, #16\n\t"
30804 #endif
30805 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30806         "adds	r5, r5, r6\n\t"
30807 #else
30808         "add	r5, r5, r6\n\t"
30809 #endif
30810 #ifdef WOLFSSL_KEIL
30811         "adcs	r3, r3, r7\n\t"
30812 #elif defined(__clang__)
30813         "adcs	r3, r7\n\t"
30814 #else
30815         "adc	r3, r7\n\t"
30816 #endif
30817 #ifdef WOLFSSL_KEIL
30818         "adcs	r4, r4, %[r]\n\t"
30819 #elif defined(__clang__)
30820         "adcs	r4, %[r]\n\t"
30821 #else
30822         "adc	r4, %[r]\n\t"
30823 #endif
30824         "#  A[1] * B[1]\n\t"
30825         "mov	%[a], r9\n\t"
30826         "mov	%[b], r10\n\t"
30827         "ldr	%[a], [%[a], #4]\n\t"
30828         "ldr	%[b], [%[b], #4]\n\t"
30829         "uxth	r6, %[a]\n\t"
30830         "uxth	r7, %[b]\n\t"
30831 #ifdef WOLFSSL_KEIL
30832         "muls	r7, r6, r7\n\t"
30833 #elif defined(__clang__)
30834         "muls	r7, r6\n\t"
30835 #else
30836         "mul	r7, r6\n\t"
30837 #endif
30838 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30839         "adds	r5, r5, r7\n\t"
30840 #else
30841         "add	r5, r5, r7\n\t"
30842 #endif
30843 #ifdef WOLFSSL_KEIL
30844         "adcs	r3, r3, %[r]\n\t"
30845 #elif defined(__clang__)
30846         "adcs	r3, %[r]\n\t"
30847 #else
30848         "adc	r3, %[r]\n\t"
30849 #endif
30850 #ifdef WOLFSSL_KEIL
30851         "adcs	r4, r4, %[r]\n\t"
30852 #elif defined(__clang__)
30853         "adcs	r4, %[r]\n\t"
30854 #else
30855         "adc	r4, %[r]\n\t"
30856 #endif
30857 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30858         "lsrs	r7, %[b], #16\n\t"
30859 #else
30860         "lsr	r7, %[b], #16\n\t"
30861 #endif
30862 #ifdef WOLFSSL_KEIL
30863         "muls	r6, r7, r6\n\t"
30864 #elif defined(__clang__)
30865         "muls	r6, r7\n\t"
30866 #else
30867         "mul	r6, r7\n\t"
30868 #endif
30869 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30870         "lsrs	r7, r6, #16\n\t"
30871 #else
30872         "lsr	r7, r6, #16\n\t"
30873 #endif
30874 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30875         "lsls	r6, r6, #16\n\t"
30876 #else
30877         "lsl	r6, r6, #16\n\t"
30878 #endif
30879 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30880         "adds	r5, r5, r6\n\t"
30881 #else
30882         "add	r5, r5, r6\n\t"
30883 #endif
30884 #ifdef WOLFSSL_KEIL
30885         "adcs	r3, r3, r7\n\t"
30886 #elif defined(__clang__)
30887         "adcs	r3, r7\n\t"
30888 #else
30889         "adc	r3, r7\n\t"
30890 #endif
30891 #ifdef WOLFSSL_KEIL
30892         "adcs	r4, r4, %[r]\n\t"
30893 #elif defined(__clang__)
30894         "adcs	r4, %[r]\n\t"
30895 #else
30896         "adc	r4, %[r]\n\t"
30897 #endif
30898 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30899         "lsrs	r6, %[a], #16\n\t"
30900 #else
30901         "lsr	r6, %[a], #16\n\t"
30902 #endif
30903 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30904         "lsrs	r7, %[b], #16\n\t"
30905 #else
30906         "lsr	r7, %[b], #16\n\t"
30907 #endif
30908 #ifdef WOLFSSL_KEIL
30909         "muls	r7, r6, r7\n\t"
30910 #elif defined(__clang__)
30911         "muls	r7, r6\n\t"
30912 #else
30913         "mul	r7, r6\n\t"
30914 #endif
30915 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30916         "adds	r3, r3, r7\n\t"
30917 #else
30918         "add	r3, r3, r7\n\t"
30919 #endif
30920 #ifdef WOLFSSL_KEIL
30921         "adcs	r4, r4, %[r]\n\t"
30922 #elif defined(__clang__)
30923         "adcs	r4, %[r]\n\t"
30924 #else
30925         "adc	r4, %[r]\n\t"
30926 #endif
30927         "uxth	r7, %[b]\n\t"
30928 #ifdef WOLFSSL_KEIL
30929         "muls	r6, r7, r6\n\t"
30930 #elif defined(__clang__)
30931         "muls	r6, r7\n\t"
30932 #else
30933         "mul	r6, r7\n\t"
30934 #endif
30935 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30936         "lsrs	r7, r6, #16\n\t"
30937 #else
30938         "lsr	r7, r6, #16\n\t"
30939 #endif
30940 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30941         "lsls	r6, r6, #16\n\t"
30942 #else
30943         "lsl	r6, r6, #16\n\t"
30944 #endif
30945 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30946         "adds	r5, r5, r6\n\t"
30947 #else
30948         "add	r5, r5, r6\n\t"
30949 #endif
30950 #ifdef WOLFSSL_KEIL
30951         "adcs	r3, r3, r7\n\t"
30952 #elif defined(__clang__)
30953         "adcs	r3, r7\n\t"
30954 #else
30955         "adc	r3, r7\n\t"
30956 #endif
30957 #ifdef WOLFSSL_KEIL
30958         "adcs	r4, r4, %[r]\n\t"
30959 #elif defined(__clang__)
30960         "adcs	r4, %[r]\n\t"
30961 #else
30962         "adc	r4, %[r]\n\t"
30963 #endif
30964         "#  A[0] * B[2]\n\t"
30965         "mov	%[a], r9\n\t"
30966         "mov	%[b], r10\n\t"
30967         "ldr	%[a], [%[a]]\n\t"
30968         "ldr	%[b], [%[b], #8]\n\t"
30969         "uxth	r6, %[a]\n\t"
30970         "uxth	r7, %[b]\n\t"
30971 #ifdef WOLFSSL_KEIL
30972         "muls	r7, r6, r7\n\t"
30973 #elif defined(__clang__)
30974         "muls	r7, r6\n\t"
30975 #else
30976         "mul	r7, r6\n\t"
30977 #endif
30978 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30979         "adds	r5, r5, r7\n\t"
30980 #else
30981         "add	r5, r5, r7\n\t"
30982 #endif
30983 #ifdef WOLFSSL_KEIL
30984         "adcs	r3, r3, %[r]\n\t"
30985 #elif defined(__clang__)
30986         "adcs	r3, %[r]\n\t"
30987 #else
30988         "adc	r3, %[r]\n\t"
30989 #endif
30990 #ifdef WOLFSSL_KEIL
30991         "adcs	r4, r4, %[r]\n\t"
30992 #elif defined(__clang__)
30993         "adcs	r4, %[r]\n\t"
30994 #else
30995         "adc	r4, %[r]\n\t"
30996 #endif
30997 #if defined(__clang__) || defined(WOLFSSL_KEIL)
30998         "lsrs	r7, %[b], #16\n\t"
30999 #else
31000         "lsr	r7, %[b], #16\n\t"
31001 #endif
31002 #ifdef WOLFSSL_KEIL
31003         "muls	r6, r7, r6\n\t"
31004 #elif defined(__clang__)
31005         "muls	r6, r7\n\t"
31006 #else
31007         "mul	r6, r7\n\t"
31008 #endif
31009 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31010         "lsrs	r7, r6, #16\n\t"
31011 #else
31012         "lsr	r7, r6, #16\n\t"
31013 #endif
31014 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31015         "lsls	r6, r6, #16\n\t"
31016 #else
31017         "lsl	r6, r6, #16\n\t"
31018 #endif
31019 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31020         "adds	r5, r5, r6\n\t"
31021 #else
31022         "add	r5, r5, r6\n\t"
31023 #endif
31024 #ifdef WOLFSSL_KEIL
31025         "adcs	r3, r3, r7\n\t"
31026 #elif defined(__clang__)
31027         "adcs	r3, r7\n\t"
31028 #else
31029         "adc	r3, r7\n\t"
31030 #endif
31031 #ifdef WOLFSSL_KEIL
31032         "adcs	r4, r4, %[r]\n\t"
31033 #elif defined(__clang__)
31034         "adcs	r4, %[r]\n\t"
31035 #else
31036         "adc	r4, %[r]\n\t"
31037 #endif
31038 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31039         "lsrs	r6, %[a], #16\n\t"
31040 #else
31041         "lsr	r6, %[a], #16\n\t"
31042 #endif
31043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31044         "lsrs	r7, %[b], #16\n\t"
31045 #else
31046         "lsr	r7, %[b], #16\n\t"
31047 #endif
31048 #ifdef WOLFSSL_KEIL
31049         "muls	r7, r6, r7\n\t"
31050 #elif defined(__clang__)
31051         "muls	r7, r6\n\t"
31052 #else
31053         "mul	r7, r6\n\t"
31054 #endif
31055 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31056         "adds	r3, r3, r7\n\t"
31057 #else
31058         "add	r3, r3, r7\n\t"
31059 #endif
31060 #ifdef WOLFSSL_KEIL
31061         "adcs	r4, r4, %[r]\n\t"
31062 #elif defined(__clang__)
31063         "adcs	r4, %[r]\n\t"
31064 #else
31065         "adc	r4, %[r]\n\t"
31066 #endif
31067         "uxth	r7, %[b]\n\t"
31068 #ifdef WOLFSSL_KEIL
31069         "muls	r6, r7, r6\n\t"
31070 #elif defined(__clang__)
31071         "muls	r6, r7\n\t"
31072 #else
31073         "mul	r6, r7\n\t"
31074 #endif
31075 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31076         "lsrs	r7, r6, #16\n\t"
31077 #else
31078         "lsr	r7, r6, #16\n\t"
31079 #endif
31080 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31081         "lsls	r6, r6, #16\n\t"
31082 #else
31083         "lsl	r6, r6, #16\n\t"
31084 #endif
31085 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31086         "adds	r5, r5, r6\n\t"
31087 #else
31088         "add	r5, r5, r6\n\t"
31089 #endif
31090 #ifdef WOLFSSL_KEIL
31091         "adcs	r3, r3, r7\n\t"
31092 #elif defined(__clang__)
31093         "adcs	r3, r7\n\t"
31094 #else
31095         "adc	r3, r7\n\t"
31096 #endif
31097 #ifdef WOLFSSL_KEIL
31098         "adcs	r4, r4, %[r]\n\t"
31099 #elif defined(__clang__)
31100         "adcs	r4, %[r]\n\t"
31101 #else
31102         "adc	r4, %[r]\n\t"
31103 #endif
31104         "str	r5, [sp, #8]\n\t"
31105         "#  A[0] * B[3]\n\t"
31106         "movs	r5, #0\n\t"
31107         "mov	%[a], r9\n\t"
31108         "mov	%[b], r10\n\t"
31109         "ldr	%[a], [%[a]]\n\t"
31110         "ldr	%[b], [%[b], #12]\n\t"
31111         "uxth	r6, %[a]\n\t"
31112         "uxth	r7, %[b]\n\t"
31113 #ifdef WOLFSSL_KEIL
31114         "muls	r7, r6, r7\n\t"
31115 #elif defined(__clang__)
31116         "muls	r7, r6\n\t"
31117 #else
31118         "mul	r7, r6\n\t"
31119 #endif
31120 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31121         "adds	r3, r3, r7\n\t"
31122 #else
31123         "add	r3, r3, r7\n\t"
31124 #endif
31125 #ifdef WOLFSSL_KEIL
31126         "adcs	r4, r4, %[r]\n\t"
31127 #elif defined(__clang__)
31128         "adcs	r4, %[r]\n\t"
31129 #else
31130         "adc	r4, %[r]\n\t"
31131 #endif
31132 #ifdef WOLFSSL_KEIL
31133         "adcs	r5, r5, %[r]\n\t"
31134 #elif defined(__clang__)
31135         "adcs	r5, %[r]\n\t"
31136 #else
31137         "adc	r5, %[r]\n\t"
31138 #endif
31139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31140         "lsrs	r7, %[b], #16\n\t"
31141 #else
31142         "lsr	r7, %[b], #16\n\t"
31143 #endif
31144 #ifdef WOLFSSL_KEIL
31145         "muls	r6, r7, r6\n\t"
31146 #elif defined(__clang__)
31147         "muls	r6, r7\n\t"
31148 #else
31149         "mul	r6, r7\n\t"
31150 #endif
31151 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31152         "lsrs	r7, r6, #16\n\t"
31153 #else
31154         "lsr	r7, r6, #16\n\t"
31155 #endif
31156 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31157         "lsls	r6, r6, #16\n\t"
31158 #else
31159         "lsl	r6, r6, #16\n\t"
31160 #endif
31161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31162         "adds	r3, r3, r6\n\t"
31163 #else
31164         "add	r3, r3, r6\n\t"
31165 #endif
31166 #ifdef WOLFSSL_KEIL
31167         "adcs	r4, r4, r7\n\t"
31168 #elif defined(__clang__)
31169         "adcs	r4, r7\n\t"
31170 #else
31171         "adc	r4, r7\n\t"
31172 #endif
31173 #ifdef WOLFSSL_KEIL
31174         "adcs	r5, r5, %[r]\n\t"
31175 #elif defined(__clang__)
31176         "adcs	r5, %[r]\n\t"
31177 #else
31178         "adc	r5, %[r]\n\t"
31179 #endif
31180 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31181         "lsrs	r6, %[a], #16\n\t"
31182 #else
31183         "lsr	r6, %[a], #16\n\t"
31184 #endif
31185 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31186         "lsrs	r7, %[b], #16\n\t"
31187 #else
31188         "lsr	r7, %[b], #16\n\t"
31189 #endif
31190 #ifdef WOLFSSL_KEIL
31191         "muls	r7, r6, r7\n\t"
31192 #elif defined(__clang__)
31193         "muls	r7, r6\n\t"
31194 #else
31195         "mul	r7, r6\n\t"
31196 #endif
31197 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31198         "adds	r4, r4, r7\n\t"
31199 #else
31200         "add	r4, r4, r7\n\t"
31201 #endif
31202 #ifdef WOLFSSL_KEIL
31203         "adcs	r5, r5, %[r]\n\t"
31204 #elif defined(__clang__)
31205         "adcs	r5, %[r]\n\t"
31206 #else
31207         "adc	r5, %[r]\n\t"
31208 #endif
31209         "uxth	r7, %[b]\n\t"
31210 #ifdef WOLFSSL_KEIL
31211         "muls	r6, r7, r6\n\t"
31212 #elif defined(__clang__)
31213         "muls	r6, r7\n\t"
31214 #else
31215         "mul	r6, r7\n\t"
31216 #endif
31217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31218         "lsrs	r7, r6, #16\n\t"
31219 #else
31220         "lsr	r7, r6, #16\n\t"
31221 #endif
31222 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31223         "lsls	r6, r6, #16\n\t"
31224 #else
31225         "lsl	r6, r6, #16\n\t"
31226 #endif
31227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31228         "adds	r3, r3, r6\n\t"
31229 #else
31230         "add	r3, r3, r6\n\t"
31231 #endif
31232 #ifdef WOLFSSL_KEIL
31233         "adcs	r4, r4, r7\n\t"
31234 #elif defined(__clang__)
31235         "adcs	r4, r7\n\t"
31236 #else
31237         "adc	r4, r7\n\t"
31238 #endif
31239 #ifdef WOLFSSL_KEIL
31240         "adcs	r5, r5, %[r]\n\t"
31241 #elif defined(__clang__)
31242         "adcs	r5, %[r]\n\t"
31243 #else
31244         "adc	r5, %[r]\n\t"
31245 #endif
31246         "#  A[1] * B[2]\n\t"
31247         "mov	%[a], r9\n\t"
31248         "mov	%[b], r10\n\t"
31249         "ldr	%[a], [%[a], #4]\n\t"
31250         "ldr	%[b], [%[b], #8]\n\t"
31251         "uxth	r6, %[a]\n\t"
31252         "uxth	r7, %[b]\n\t"
31253 #ifdef WOLFSSL_KEIL
31254         "muls	r7, r6, r7\n\t"
31255 #elif defined(__clang__)
31256         "muls	r7, r6\n\t"
31257 #else
31258         "mul	r7, r6\n\t"
31259 #endif
31260 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31261         "adds	r3, r3, r7\n\t"
31262 #else
31263         "add	r3, r3, r7\n\t"
31264 #endif
31265 #ifdef WOLFSSL_KEIL
31266         "adcs	r4, r4, %[r]\n\t"
31267 #elif defined(__clang__)
31268         "adcs	r4, %[r]\n\t"
31269 #else
31270         "adc	r4, %[r]\n\t"
31271 #endif
31272 #ifdef WOLFSSL_KEIL
31273         "adcs	r5, r5, %[r]\n\t"
31274 #elif defined(__clang__)
31275         "adcs	r5, %[r]\n\t"
31276 #else
31277         "adc	r5, %[r]\n\t"
31278 #endif
31279 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31280         "lsrs	r7, %[b], #16\n\t"
31281 #else
31282         "lsr	r7, %[b], #16\n\t"
31283 #endif
31284 #ifdef WOLFSSL_KEIL
31285         "muls	r6, r7, r6\n\t"
31286 #elif defined(__clang__)
31287         "muls	r6, r7\n\t"
31288 #else
31289         "mul	r6, r7\n\t"
31290 #endif
31291 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31292         "lsrs	r7, r6, #16\n\t"
31293 #else
31294         "lsr	r7, r6, #16\n\t"
31295 #endif
31296 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31297         "lsls	r6, r6, #16\n\t"
31298 #else
31299         "lsl	r6, r6, #16\n\t"
31300 #endif
31301 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31302         "adds	r3, r3, r6\n\t"
31303 #else
31304         "add	r3, r3, r6\n\t"
31305 #endif
31306 #ifdef WOLFSSL_KEIL
31307         "adcs	r4, r4, r7\n\t"
31308 #elif defined(__clang__)
31309         "adcs	r4, r7\n\t"
31310 #else
31311         "adc	r4, r7\n\t"
31312 #endif
31313 #ifdef WOLFSSL_KEIL
31314         "adcs	r5, r5, %[r]\n\t"
31315 #elif defined(__clang__)
31316         "adcs	r5, %[r]\n\t"
31317 #else
31318         "adc	r5, %[r]\n\t"
31319 #endif
31320 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31321         "lsrs	r6, %[a], #16\n\t"
31322 #else
31323         "lsr	r6, %[a], #16\n\t"
31324 #endif
31325 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31326         "lsrs	r7, %[b], #16\n\t"
31327 #else
31328         "lsr	r7, %[b], #16\n\t"
31329 #endif
31330 #ifdef WOLFSSL_KEIL
31331         "muls	r7, r6, r7\n\t"
31332 #elif defined(__clang__)
31333         "muls	r7, r6\n\t"
31334 #else
31335         "mul	r7, r6\n\t"
31336 #endif
31337 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31338         "adds	r4, r4, r7\n\t"
31339 #else
31340         "add	r4, r4, r7\n\t"
31341 #endif
31342 #ifdef WOLFSSL_KEIL
31343         "adcs	r5, r5, %[r]\n\t"
31344 #elif defined(__clang__)
31345         "adcs	r5, %[r]\n\t"
31346 #else
31347         "adc	r5, %[r]\n\t"
31348 #endif
31349         "uxth	r7, %[b]\n\t"
31350 #ifdef WOLFSSL_KEIL
31351         "muls	r6, r7, r6\n\t"
31352 #elif defined(__clang__)
31353         "muls	r6, r7\n\t"
31354 #else
31355         "mul	r6, r7\n\t"
31356 #endif
31357 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31358         "lsrs	r7, r6, #16\n\t"
31359 #else
31360         "lsr	r7, r6, #16\n\t"
31361 #endif
31362 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31363         "lsls	r6, r6, #16\n\t"
31364 #else
31365         "lsl	r6, r6, #16\n\t"
31366 #endif
31367 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31368         "adds	r3, r3, r6\n\t"
31369 #else
31370         "add	r3, r3, r6\n\t"
31371 #endif
31372 #ifdef WOLFSSL_KEIL
31373         "adcs	r4, r4, r7\n\t"
31374 #elif defined(__clang__)
31375         "adcs	r4, r7\n\t"
31376 #else
31377         "adc	r4, r7\n\t"
31378 #endif
31379 #ifdef WOLFSSL_KEIL
31380         "adcs	r5, r5, %[r]\n\t"
31381 #elif defined(__clang__)
31382         "adcs	r5, %[r]\n\t"
31383 #else
31384         "adc	r5, %[r]\n\t"
31385 #endif
31386         "#  A[2] * B[1]\n\t"
31387         "mov	%[a], r9\n\t"
31388         "mov	%[b], r10\n\t"
31389         "ldr	%[a], [%[a], #8]\n\t"
31390         "ldr	%[b], [%[b], #4]\n\t"
31391         "uxth	r6, %[a]\n\t"
31392         "uxth	r7, %[b]\n\t"
31393 #ifdef WOLFSSL_KEIL
31394         "muls	r7, r6, r7\n\t"
31395 #elif defined(__clang__)
31396         "muls	r7, r6\n\t"
31397 #else
31398         "mul	r7, r6\n\t"
31399 #endif
31400 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31401         "adds	r3, r3, r7\n\t"
31402 #else
31403         "add	r3, r3, r7\n\t"
31404 #endif
31405 #ifdef WOLFSSL_KEIL
31406         "adcs	r4, r4, %[r]\n\t"
31407 #elif defined(__clang__)
31408         "adcs	r4, %[r]\n\t"
31409 #else
31410         "adc	r4, %[r]\n\t"
31411 #endif
31412 #ifdef WOLFSSL_KEIL
31413         "adcs	r5, r5, %[r]\n\t"
31414 #elif defined(__clang__)
31415         "adcs	r5, %[r]\n\t"
31416 #else
31417         "adc	r5, %[r]\n\t"
31418 #endif
31419 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31420         "lsrs	r7, %[b], #16\n\t"
31421 #else
31422         "lsr	r7, %[b], #16\n\t"
31423 #endif
31424 #ifdef WOLFSSL_KEIL
31425         "muls	r6, r7, r6\n\t"
31426 #elif defined(__clang__)
31427         "muls	r6, r7\n\t"
31428 #else
31429         "mul	r6, r7\n\t"
31430 #endif
31431 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31432         "lsrs	r7, r6, #16\n\t"
31433 #else
31434         "lsr	r7, r6, #16\n\t"
31435 #endif
31436 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31437         "lsls	r6, r6, #16\n\t"
31438 #else
31439         "lsl	r6, r6, #16\n\t"
31440 #endif
31441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31442         "adds	r3, r3, r6\n\t"
31443 #else
31444         "add	r3, r3, r6\n\t"
31445 #endif
31446 #ifdef WOLFSSL_KEIL
31447         "adcs	r4, r4, r7\n\t"
31448 #elif defined(__clang__)
31449         "adcs	r4, r7\n\t"
31450 #else
31451         "adc	r4, r7\n\t"
31452 #endif
31453 #ifdef WOLFSSL_KEIL
31454         "adcs	r5, r5, %[r]\n\t"
31455 #elif defined(__clang__)
31456         "adcs	r5, %[r]\n\t"
31457 #else
31458         "adc	r5, %[r]\n\t"
31459 #endif
31460 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31461         "lsrs	r6, %[a], #16\n\t"
31462 #else
31463         "lsr	r6, %[a], #16\n\t"
31464 #endif
31465 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31466         "lsrs	r7, %[b], #16\n\t"
31467 #else
31468         "lsr	r7, %[b], #16\n\t"
31469 #endif
31470 #ifdef WOLFSSL_KEIL
31471         "muls	r7, r6, r7\n\t"
31472 #elif defined(__clang__)
31473         "muls	r7, r6\n\t"
31474 #else
31475         "mul	r7, r6\n\t"
31476 #endif
31477 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31478         "adds	r4, r4, r7\n\t"
31479 #else
31480         "add	r4, r4, r7\n\t"
31481 #endif
31482 #ifdef WOLFSSL_KEIL
31483         "adcs	r5, r5, %[r]\n\t"
31484 #elif defined(__clang__)
31485         "adcs	r5, %[r]\n\t"
31486 #else
31487         "adc	r5, %[r]\n\t"
31488 #endif
31489         "uxth	r7, %[b]\n\t"
31490 #ifdef WOLFSSL_KEIL
31491         "muls	r6, r7, r6\n\t"
31492 #elif defined(__clang__)
31493         "muls	r6, r7\n\t"
31494 #else
31495         "mul	r6, r7\n\t"
31496 #endif
31497 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31498         "lsrs	r7, r6, #16\n\t"
31499 #else
31500         "lsr	r7, r6, #16\n\t"
31501 #endif
31502 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31503         "lsls	r6, r6, #16\n\t"
31504 #else
31505         "lsl	r6, r6, #16\n\t"
31506 #endif
31507 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31508         "adds	r3, r3, r6\n\t"
31509 #else
31510         "add	r3, r3, r6\n\t"
31511 #endif
31512 #ifdef WOLFSSL_KEIL
31513         "adcs	r4, r4, r7\n\t"
31514 #elif defined(__clang__)
31515         "adcs	r4, r7\n\t"
31516 #else
31517         "adc	r4, r7\n\t"
31518 #endif
31519 #ifdef WOLFSSL_KEIL
31520         "adcs	r5, r5, %[r]\n\t"
31521 #elif defined(__clang__)
31522         "adcs	r5, %[r]\n\t"
31523 #else
31524         "adc	r5, %[r]\n\t"
31525 #endif
31526         "#  A[3] * B[0]\n\t"
31527         "mov	%[a], r9\n\t"
31528         "mov	%[b], r10\n\t"
31529         "ldr	%[a], [%[a], #12]\n\t"
31530         "ldr	%[b], [%[b]]\n\t"
31531         "uxth	r6, %[a]\n\t"
31532         "uxth	r7, %[b]\n\t"
31533 #ifdef WOLFSSL_KEIL
31534         "muls	r7, r6, r7\n\t"
31535 #elif defined(__clang__)
31536         "muls	r7, r6\n\t"
31537 #else
31538         "mul	r7, r6\n\t"
31539 #endif
31540 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31541         "adds	r3, r3, r7\n\t"
31542 #else
31543         "add	r3, r3, r7\n\t"
31544 #endif
31545 #ifdef WOLFSSL_KEIL
31546         "adcs	r4, r4, %[r]\n\t"
31547 #elif defined(__clang__)
31548         "adcs	r4, %[r]\n\t"
31549 #else
31550         "adc	r4, %[r]\n\t"
31551 #endif
31552 #ifdef WOLFSSL_KEIL
31553         "adcs	r5, r5, %[r]\n\t"
31554 #elif defined(__clang__)
31555         "adcs	r5, %[r]\n\t"
31556 #else
31557         "adc	r5, %[r]\n\t"
31558 #endif
31559 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31560         "lsrs	r7, %[b], #16\n\t"
31561 #else
31562         "lsr	r7, %[b], #16\n\t"
31563 #endif
31564 #ifdef WOLFSSL_KEIL
31565         "muls	r6, r7, r6\n\t"
31566 #elif defined(__clang__)
31567         "muls	r6, r7\n\t"
31568 #else
31569         "mul	r6, r7\n\t"
31570 #endif
31571 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31572         "lsrs	r7, r6, #16\n\t"
31573 #else
31574         "lsr	r7, r6, #16\n\t"
31575 #endif
31576 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31577         "lsls	r6, r6, #16\n\t"
31578 #else
31579         "lsl	r6, r6, #16\n\t"
31580 #endif
31581 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31582         "adds	r3, r3, r6\n\t"
31583 #else
31584         "add	r3, r3, r6\n\t"
31585 #endif
31586 #ifdef WOLFSSL_KEIL
31587         "adcs	r4, r4, r7\n\t"
31588 #elif defined(__clang__)
31589         "adcs	r4, r7\n\t"
31590 #else
31591         "adc	r4, r7\n\t"
31592 #endif
31593 #ifdef WOLFSSL_KEIL
31594         "adcs	r5, r5, %[r]\n\t"
31595 #elif defined(__clang__)
31596         "adcs	r5, %[r]\n\t"
31597 #else
31598         "adc	r5, %[r]\n\t"
31599 #endif
31600 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31601         "lsrs	r6, %[a], #16\n\t"
31602 #else
31603         "lsr	r6, %[a], #16\n\t"
31604 #endif
31605 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31606         "lsrs	r7, %[b], #16\n\t"
31607 #else
31608         "lsr	r7, %[b], #16\n\t"
31609 #endif
31610 #ifdef WOLFSSL_KEIL
31611         "muls	r7, r6, r7\n\t"
31612 #elif defined(__clang__)
31613         "muls	r7, r6\n\t"
31614 #else
31615         "mul	r7, r6\n\t"
31616 #endif
31617 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31618         "adds	r4, r4, r7\n\t"
31619 #else
31620         "add	r4, r4, r7\n\t"
31621 #endif
31622 #ifdef WOLFSSL_KEIL
31623         "adcs	r5, r5, %[r]\n\t"
31624 #elif defined(__clang__)
31625         "adcs	r5, %[r]\n\t"
31626 #else
31627         "adc	r5, %[r]\n\t"
31628 #endif
31629         "uxth	r7, %[b]\n\t"
31630 #ifdef WOLFSSL_KEIL
31631         "muls	r6, r7, r6\n\t"
31632 #elif defined(__clang__)
31633         "muls	r6, r7\n\t"
31634 #else
31635         "mul	r6, r7\n\t"
31636 #endif
31637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31638         "lsrs	r7, r6, #16\n\t"
31639 #else
31640         "lsr	r7, r6, #16\n\t"
31641 #endif
31642 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31643         "lsls	r6, r6, #16\n\t"
31644 #else
31645         "lsl	r6, r6, #16\n\t"
31646 #endif
31647 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31648         "adds	r3, r3, r6\n\t"
31649 #else
31650         "add	r3, r3, r6\n\t"
31651 #endif
31652 #ifdef WOLFSSL_KEIL
31653         "adcs	r4, r4, r7\n\t"
31654 #elif defined(__clang__)
31655         "adcs	r4, r7\n\t"
31656 #else
31657         "adc	r4, r7\n\t"
31658 #endif
31659 #ifdef WOLFSSL_KEIL
31660         "adcs	r5, r5, %[r]\n\t"
31661 #elif defined(__clang__)
31662         "adcs	r5, %[r]\n\t"
31663 #else
31664         "adc	r5, %[r]\n\t"
31665 #endif
31666         "str	r3, [sp, #12]\n\t"
31667         "#  A[4] * B[0]\n\t"
31668         "movs	r3, #0\n\t"
31669         "mov	%[a], r9\n\t"
31670         "mov	%[b], r10\n\t"
31671         "ldr	%[a], [%[a], #16]\n\t"
31672         "ldr	%[b], [%[b]]\n\t"
31673         "uxth	r6, %[a]\n\t"
31674         "uxth	r7, %[b]\n\t"
31675 #ifdef WOLFSSL_KEIL
31676         "muls	r7, r6, r7\n\t"
31677 #elif defined(__clang__)
31678         "muls	r7, r6\n\t"
31679 #else
31680         "mul	r7, r6\n\t"
31681 #endif
31682 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31683         "adds	r4, r4, r7\n\t"
31684 #else
31685         "add	r4, r4, r7\n\t"
31686 #endif
31687 #ifdef WOLFSSL_KEIL
31688         "adcs	r5, r5, %[r]\n\t"
31689 #elif defined(__clang__)
31690         "adcs	r5, %[r]\n\t"
31691 #else
31692         "adc	r5, %[r]\n\t"
31693 #endif
31694 #ifdef WOLFSSL_KEIL
31695         "adcs	r3, r3, %[r]\n\t"
31696 #elif defined(__clang__)
31697         "adcs	r3, %[r]\n\t"
31698 #else
31699         "adc	r3, %[r]\n\t"
31700 #endif
31701 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31702         "lsrs	r7, %[b], #16\n\t"
31703 #else
31704         "lsr	r7, %[b], #16\n\t"
31705 #endif
31706 #ifdef WOLFSSL_KEIL
31707         "muls	r6, r7, r6\n\t"
31708 #elif defined(__clang__)
31709         "muls	r6, r7\n\t"
31710 #else
31711         "mul	r6, r7\n\t"
31712 #endif
31713 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31714         "lsrs	r7, r6, #16\n\t"
31715 #else
31716         "lsr	r7, r6, #16\n\t"
31717 #endif
31718 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31719         "lsls	r6, r6, #16\n\t"
31720 #else
31721         "lsl	r6, r6, #16\n\t"
31722 #endif
31723 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31724         "adds	r4, r4, r6\n\t"
31725 #else
31726         "add	r4, r4, r6\n\t"
31727 #endif
31728 #ifdef WOLFSSL_KEIL
31729         "adcs	r5, r5, r7\n\t"
31730 #elif defined(__clang__)
31731         "adcs	r5, r7\n\t"
31732 #else
31733         "adc	r5, r7\n\t"
31734 #endif
31735 #ifdef WOLFSSL_KEIL
31736         "adcs	r3, r3, %[r]\n\t"
31737 #elif defined(__clang__)
31738         "adcs	r3, %[r]\n\t"
31739 #else
31740         "adc	r3, %[r]\n\t"
31741 #endif
31742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31743         "lsrs	r6, %[a], #16\n\t"
31744 #else
31745         "lsr	r6, %[a], #16\n\t"
31746 #endif
31747 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31748         "lsrs	r7, %[b], #16\n\t"
31749 #else
31750         "lsr	r7, %[b], #16\n\t"
31751 #endif
31752 #ifdef WOLFSSL_KEIL
31753         "muls	r7, r6, r7\n\t"
31754 #elif defined(__clang__)
31755         "muls	r7, r6\n\t"
31756 #else
31757         "mul	r7, r6\n\t"
31758 #endif
31759 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31760         "adds	r5, r5, r7\n\t"
31761 #else
31762         "add	r5, r5, r7\n\t"
31763 #endif
31764 #ifdef WOLFSSL_KEIL
31765         "adcs	r3, r3, %[r]\n\t"
31766 #elif defined(__clang__)
31767         "adcs	r3, %[r]\n\t"
31768 #else
31769         "adc	r3, %[r]\n\t"
31770 #endif
31771         "uxth	r7, %[b]\n\t"
31772 #ifdef WOLFSSL_KEIL
31773         "muls	r6, r7, r6\n\t"
31774 #elif defined(__clang__)
31775         "muls	r6, r7\n\t"
31776 #else
31777         "mul	r6, r7\n\t"
31778 #endif
31779 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31780         "lsrs	r7, r6, #16\n\t"
31781 #else
31782         "lsr	r7, r6, #16\n\t"
31783 #endif
31784 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31785         "lsls	r6, r6, #16\n\t"
31786 #else
31787         "lsl	r6, r6, #16\n\t"
31788 #endif
31789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31790         "adds	r4, r4, r6\n\t"
31791 #else
31792         "add	r4, r4, r6\n\t"
31793 #endif
31794 #ifdef WOLFSSL_KEIL
31795         "adcs	r5, r5, r7\n\t"
31796 #elif defined(__clang__)
31797         "adcs	r5, r7\n\t"
31798 #else
31799         "adc	r5, r7\n\t"
31800 #endif
31801 #ifdef WOLFSSL_KEIL
31802         "adcs	r3, r3, %[r]\n\t"
31803 #elif defined(__clang__)
31804         "adcs	r3, %[r]\n\t"
31805 #else
31806         "adc	r3, %[r]\n\t"
31807 #endif
31808         "#  A[3] * B[1]\n\t"
31809         "mov	%[a], r9\n\t"
31810         "mov	%[b], r10\n\t"
31811         "ldr	%[a], [%[a], #12]\n\t"
31812         "ldr	%[b], [%[b], #4]\n\t"
31813         "uxth	r6, %[a]\n\t"
31814         "uxth	r7, %[b]\n\t"
31815 #ifdef WOLFSSL_KEIL
31816         "muls	r7, r6, r7\n\t"
31817 #elif defined(__clang__)
31818         "muls	r7, r6\n\t"
31819 #else
31820         "mul	r7, r6\n\t"
31821 #endif
31822 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31823         "adds	r4, r4, r7\n\t"
31824 #else
31825         "add	r4, r4, r7\n\t"
31826 #endif
31827 #ifdef WOLFSSL_KEIL
31828         "adcs	r5, r5, %[r]\n\t"
31829 #elif defined(__clang__)
31830         "adcs	r5, %[r]\n\t"
31831 #else
31832         "adc	r5, %[r]\n\t"
31833 #endif
31834 #ifdef WOLFSSL_KEIL
31835         "adcs	r3, r3, %[r]\n\t"
31836 #elif defined(__clang__)
31837         "adcs	r3, %[r]\n\t"
31838 #else
31839         "adc	r3, %[r]\n\t"
31840 #endif
31841 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31842         "lsrs	r7, %[b], #16\n\t"
31843 #else
31844         "lsr	r7, %[b], #16\n\t"
31845 #endif
31846 #ifdef WOLFSSL_KEIL
31847         "muls	r6, r7, r6\n\t"
31848 #elif defined(__clang__)
31849         "muls	r6, r7\n\t"
31850 #else
31851         "mul	r6, r7\n\t"
31852 #endif
31853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31854         "lsrs	r7, r6, #16\n\t"
31855 #else
31856         "lsr	r7, r6, #16\n\t"
31857 #endif
31858 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31859         "lsls	r6, r6, #16\n\t"
31860 #else
31861         "lsl	r6, r6, #16\n\t"
31862 #endif
31863 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31864         "adds	r4, r4, r6\n\t"
31865 #else
31866         "add	r4, r4, r6\n\t"
31867 #endif
31868 #ifdef WOLFSSL_KEIL
31869         "adcs	r5, r5, r7\n\t"
31870 #elif defined(__clang__)
31871         "adcs	r5, r7\n\t"
31872 #else
31873         "adc	r5, r7\n\t"
31874 #endif
31875 #ifdef WOLFSSL_KEIL
31876         "adcs	r3, r3, %[r]\n\t"
31877 #elif defined(__clang__)
31878         "adcs	r3, %[r]\n\t"
31879 #else
31880         "adc	r3, %[r]\n\t"
31881 #endif
31882 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31883         "lsrs	r6, %[a], #16\n\t"
31884 #else
31885         "lsr	r6, %[a], #16\n\t"
31886 #endif
31887 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31888         "lsrs	r7, %[b], #16\n\t"
31889 #else
31890         "lsr	r7, %[b], #16\n\t"
31891 #endif
31892 #ifdef WOLFSSL_KEIL
31893         "muls	r7, r6, r7\n\t"
31894 #elif defined(__clang__)
31895         "muls	r7, r6\n\t"
31896 #else
31897         "mul	r7, r6\n\t"
31898 #endif
31899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31900         "adds	r5, r5, r7\n\t"
31901 #else
31902         "add	r5, r5, r7\n\t"
31903 #endif
31904 #ifdef WOLFSSL_KEIL
31905         "adcs	r3, r3, %[r]\n\t"
31906 #elif defined(__clang__)
31907         "adcs	r3, %[r]\n\t"
31908 #else
31909         "adc	r3, %[r]\n\t"
31910 #endif
31911         "uxth	r7, %[b]\n\t"
31912 #ifdef WOLFSSL_KEIL
31913         "muls	r6, r7, r6\n\t"
31914 #elif defined(__clang__)
31915         "muls	r6, r7\n\t"
31916 #else
31917         "mul	r6, r7\n\t"
31918 #endif
31919 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31920         "lsrs	r7, r6, #16\n\t"
31921 #else
31922         "lsr	r7, r6, #16\n\t"
31923 #endif
31924 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31925         "lsls	r6, r6, #16\n\t"
31926 #else
31927         "lsl	r6, r6, #16\n\t"
31928 #endif
31929 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31930         "adds	r4, r4, r6\n\t"
31931 #else
31932         "add	r4, r4, r6\n\t"
31933 #endif
31934 #ifdef WOLFSSL_KEIL
31935         "adcs	r5, r5, r7\n\t"
31936 #elif defined(__clang__)
31937         "adcs	r5, r7\n\t"
31938 #else
31939         "adc	r5, r7\n\t"
31940 #endif
31941 #ifdef WOLFSSL_KEIL
31942         "adcs	r3, r3, %[r]\n\t"
31943 #elif defined(__clang__)
31944         "adcs	r3, %[r]\n\t"
31945 #else
31946         "adc	r3, %[r]\n\t"
31947 #endif
31948         "#  A[2] * B[2]\n\t"
31949         "mov	%[a], r9\n\t"
31950         "mov	%[b], r10\n\t"
31951         "ldr	%[a], [%[a], #8]\n\t"
31952         "ldr	%[b], [%[b], #8]\n\t"
31953         "uxth	r6, %[a]\n\t"
31954         "uxth	r7, %[b]\n\t"
31955 #ifdef WOLFSSL_KEIL
31956         "muls	r7, r6, r7\n\t"
31957 #elif defined(__clang__)
31958         "muls	r7, r6\n\t"
31959 #else
31960         "mul	r7, r6\n\t"
31961 #endif
31962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31963         "adds	r4, r4, r7\n\t"
31964 #else
31965         "add	r4, r4, r7\n\t"
31966 #endif
31967 #ifdef WOLFSSL_KEIL
31968         "adcs	r5, r5, %[r]\n\t"
31969 #elif defined(__clang__)
31970         "adcs	r5, %[r]\n\t"
31971 #else
31972         "adc	r5, %[r]\n\t"
31973 #endif
31974 #ifdef WOLFSSL_KEIL
31975         "adcs	r3, r3, %[r]\n\t"
31976 #elif defined(__clang__)
31977         "adcs	r3, %[r]\n\t"
31978 #else
31979         "adc	r3, %[r]\n\t"
31980 #endif
31981 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31982         "lsrs	r7, %[b], #16\n\t"
31983 #else
31984         "lsr	r7, %[b], #16\n\t"
31985 #endif
31986 #ifdef WOLFSSL_KEIL
31987         "muls	r6, r7, r6\n\t"
31988 #elif defined(__clang__)
31989         "muls	r6, r7\n\t"
31990 #else
31991         "mul	r6, r7\n\t"
31992 #endif
31993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31994         "lsrs	r7, r6, #16\n\t"
31995 #else
31996         "lsr	r7, r6, #16\n\t"
31997 #endif
31998 #if defined(__clang__) || defined(WOLFSSL_KEIL)
31999         "lsls	r6, r6, #16\n\t"
32000 #else
32001         "lsl	r6, r6, #16\n\t"
32002 #endif
32003 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32004         "adds	r4, r4, r6\n\t"
32005 #else
32006         "add	r4, r4, r6\n\t"
32007 #endif
32008 #ifdef WOLFSSL_KEIL
32009         "adcs	r5, r5, r7\n\t"
32010 #elif defined(__clang__)
32011         "adcs	r5, r7\n\t"
32012 #else
32013         "adc	r5, r7\n\t"
32014 #endif
32015 #ifdef WOLFSSL_KEIL
32016         "adcs	r3, r3, %[r]\n\t"
32017 #elif defined(__clang__)
32018         "adcs	r3, %[r]\n\t"
32019 #else
32020         "adc	r3, %[r]\n\t"
32021 #endif
32022 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32023         "lsrs	r6, %[a], #16\n\t"
32024 #else
32025         "lsr	r6, %[a], #16\n\t"
32026 #endif
32027 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32028         "lsrs	r7, %[b], #16\n\t"
32029 #else
32030         "lsr	r7, %[b], #16\n\t"
32031 #endif
32032 #ifdef WOLFSSL_KEIL
32033         "muls	r7, r6, r7\n\t"
32034 #elif defined(__clang__)
32035         "muls	r7, r6\n\t"
32036 #else
32037         "mul	r7, r6\n\t"
32038 #endif
32039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32040         "adds	r5, r5, r7\n\t"
32041 #else
32042         "add	r5, r5, r7\n\t"
32043 #endif
32044 #ifdef WOLFSSL_KEIL
32045         "adcs	r3, r3, %[r]\n\t"
32046 #elif defined(__clang__)
32047         "adcs	r3, %[r]\n\t"
32048 #else
32049         "adc	r3, %[r]\n\t"
32050 #endif
32051         "uxth	r7, %[b]\n\t"
32052 #ifdef WOLFSSL_KEIL
32053         "muls	r6, r7, r6\n\t"
32054 #elif defined(__clang__)
32055         "muls	r6, r7\n\t"
32056 #else
32057         "mul	r6, r7\n\t"
32058 #endif
32059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32060         "lsrs	r7, r6, #16\n\t"
32061 #else
32062         "lsr	r7, r6, #16\n\t"
32063 #endif
32064 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32065         "lsls	r6, r6, #16\n\t"
32066 #else
32067         "lsl	r6, r6, #16\n\t"
32068 #endif
32069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32070         "adds	r4, r4, r6\n\t"
32071 #else
32072         "add	r4, r4, r6\n\t"
32073 #endif
32074 #ifdef WOLFSSL_KEIL
32075         "adcs	r5, r5, r7\n\t"
32076 #elif defined(__clang__)
32077         "adcs	r5, r7\n\t"
32078 #else
32079         "adc	r5, r7\n\t"
32080 #endif
32081 #ifdef WOLFSSL_KEIL
32082         "adcs	r3, r3, %[r]\n\t"
32083 #elif defined(__clang__)
32084         "adcs	r3, %[r]\n\t"
32085 #else
32086         "adc	r3, %[r]\n\t"
32087 #endif
32088         "#  A[1] * B[3]\n\t"
32089         "mov	%[a], r9\n\t"
32090         "mov	%[b], r10\n\t"
32091         "ldr	%[a], [%[a], #4]\n\t"
32092         "ldr	%[b], [%[b], #12]\n\t"
32093         "uxth	r6, %[a]\n\t"
32094         "uxth	r7, %[b]\n\t"
32095 #ifdef WOLFSSL_KEIL
32096         "muls	r7, r6, r7\n\t"
32097 #elif defined(__clang__)
32098         "muls	r7, r6\n\t"
32099 #else
32100         "mul	r7, r6\n\t"
32101 #endif
32102 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32103         "adds	r4, r4, r7\n\t"
32104 #else
32105         "add	r4, r4, r7\n\t"
32106 #endif
32107 #ifdef WOLFSSL_KEIL
32108         "adcs	r5, r5, %[r]\n\t"
32109 #elif defined(__clang__)
32110         "adcs	r5, %[r]\n\t"
32111 #else
32112         "adc	r5, %[r]\n\t"
32113 #endif
32114 #ifdef WOLFSSL_KEIL
32115         "adcs	r3, r3, %[r]\n\t"
32116 #elif defined(__clang__)
32117         "adcs	r3, %[r]\n\t"
32118 #else
32119         "adc	r3, %[r]\n\t"
32120 #endif
32121 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32122         "lsrs	r7, %[b], #16\n\t"
32123 #else
32124         "lsr	r7, %[b], #16\n\t"
32125 #endif
32126 #ifdef WOLFSSL_KEIL
32127         "muls	r6, r7, r6\n\t"
32128 #elif defined(__clang__)
32129         "muls	r6, r7\n\t"
32130 #else
32131         "mul	r6, r7\n\t"
32132 #endif
32133 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32134         "lsrs	r7, r6, #16\n\t"
32135 #else
32136         "lsr	r7, r6, #16\n\t"
32137 #endif
32138 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32139         "lsls	r6, r6, #16\n\t"
32140 #else
32141         "lsl	r6, r6, #16\n\t"
32142 #endif
32143 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32144         "adds	r4, r4, r6\n\t"
32145 #else
32146         "add	r4, r4, r6\n\t"
32147 #endif
32148 #ifdef WOLFSSL_KEIL
32149         "adcs	r5, r5, r7\n\t"
32150 #elif defined(__clang__)
32151         "adcs	r5, r7\n\t"
32152 #else
32153         "adc	r5, r7\n\t"
32154 #endif
32155 #ifdef WOLFSSL_KEIL
32156         "adcs	r3, r3, %[r]\n\t"
32157 #elif defined(__clang__)
32158         "adcs	r3, %[r]\n\t"
32159 #else
32160         "adc	r3, %[r]\n\t"
32161 #endif
32162 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32163         "lsrs	r6, %[a], #16\n\t"
32164 #else
32165         "lsr	r6, %[a], #16\n\t"
32166 #endif
32167 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32168         "lsrs	r7, %[b], #16\n\t"
32169 #else
32170         "lsr	r7, %[b], #16\n\t"
32171 #endif
32172 #ifdef WOLFSSL_KEIL
32173         "muls	r7, r6, r7\n\t"
32174 #elif defined(__clang__)
32175         "muls	r7, r6\n\t"
32176 #else
32177         "mul	r7, r6\n\t"
32178 #endif
32179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32180         "adds	r5, r5, r7\n\t"
32181 #else
32182         "add	r5, r5, r7\n\t"
32183 #endif
32184 #ifdef WOLFSSL_KEIL
32185         "adcs	r3, r3, %[r]\n\t"
32186 #elif defined(__clang__)
32187         "adcs	r3, %[r]\n\t"
32188 #else
32189         "adc	r3, %[r]\n\t"
32190 #endif
32191         "uxth	r7, %[b]\n\t"
32192 #ifdef WOLFSSL_KEIL
32193         "muls	r6, r7, r6\n\t"
32194 #elif defined(__clang__)
32195         "muls	r6, r7\n\t"
32196 #else
32197         "mul	r6, r7\n\t"
32198 #endif
32199 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32200         "lsrs	r7, r6, #16\n\t"
32201 #else
32202         "lsr	r7, r6, #16\n\t"
32203 #endif
32204 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32205         "lsls	r6, r6, #16\n\t"
32206 #else
32207         "lsl	r6, r6, #16\n\t"
32208 #endif
32209 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32210         "adds	r4, r4, r6\n\t"
32211 #else
32212         "add	r4, r4, r6\n\t"
32213 #endif
32214 #ifdef WOLFSSL_KEIL
32215         "adcs	r5, r5, r7\n\t"
32216 #elif defined(__clang__)
32217         "adcs	r5, r7\n\t"
32218 #else
32219         "adc	r5, r7\n\t"
32220 #endif
32221 #ifdef WOLFSSL_KEIL
32222         "adcs	r3, r3, %[r]\n\t"
32223 #elif defined(__clang__)
32224         "adcs	r3, %[r]\n\t"
32225 #else
32226         "adc	r3, %[r]\n\t"
32227 #endif
32228         "#  A[0] * B[4]\n\t"
32229         "mov	%[a], r9\n\t"
32230         "mov	%[b], r10\n\t"
32231         "ldr	%[a], [%[a]]\n\t"
32232         "ldr	%[b], [%[b], #16]\n\t"
32233         "uxth	r6, %[a]\n\t"
32234         "uxth	r7, %[b]\n\t"
32235 #ifdef WOLFSSL_KEIL
32236         "muls	r7, r6, r7\n\t"
32237 #elif defined(__clang__)
32238         "muls	r7, r6\n\t"
32239 #else
32240         "mul	r7, r6\n\t"
32241 #endif
32242 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32243         "adds	r4, r4, r7\n\t"
32244 #else
32245         "add	r4, r4, r7\n\t"
32246 #endif
32247 #ifdef WOLFSSL_KEIL
32248         "adcs	r5, r5, %[r]\n\t"
32249 #elif defined(__clang__)
32250         "adcs	r5, %[r]\n\t"
32251 #else
32252         "adc	r5, %[r]\n\t"
32253 #endif
32254 #ifdef WOLFSSL_KEIL
32255         "adcs	r3, r3, %[r]\n\t"
32256 #elif defined(__clang__)
32257         "adcs	r3, %[r]\n\t"
32258 #else
32259         "adc	r3, %[r]\n\t"
32260 #endif
32261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32262         "lsrs	r7, %[b], #16\n\t"
32263 #else
32264         "lsr	r7, %[b], #16\n\t"
32265 #endif
32266 #ifdef WOLFSSL_KEIL
32267         "muls	r6, r7, r6\n\t"
32268 #elif defined(__clang__)
32269         "muls	r6, r7\n\t"
32270 #else
32271         "mul	r6, r7\n\t"
32272 #endif
32273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32274         "lsrs	r7, r6, #16\n\t"
32275 #else
32276         "lsr	r7, r6, #16\n\t"
32277 #endif
32278 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32279         "lsls	r6, r6, #16\n\t"
32280 #else
32281         "lsl	r6, r6, #16\n\t"
32282 #endif
32283 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32284         "adds	r4, r4, r6\n\t"
32285 #else
32286         "add	r4, r4, r6\n\t"
32287 #endif
32288 #ifdef WOLFSSL_KEIL
32289         "adcs	r5, r5, r7\n\t"
32290 #elif defined(__clang__)
32291         "adcs	r5, r7\n\t"
32292 #else
32293         "adc	r5, r7\n\t"
32294 #endif
32295 #ifdef WOLFSSL_KEIL
32296         "adcs	r3, r3, %[r]\n\t"
32297 #elif defined(__clang__)
32298         "adcs	r3, %[r]\n\t"
32299 #else
32300         "adc	r3, %[r]\n\t"
32301 #endif
32302 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32303         "lsrs	r6, %[a], #16\n\t"
32304 #else
32305         "lsr	r6, %[a], #16\n\t"
32306 #endif
32307 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32308         "lsrs	r7, %[b], #16\n\t"
32309 #else
32310         "lsr	r7, %[b], #16\n\t"
32311 #endif
32312 #ifdef WOLFSSL_KEIL
32313         "muls	r7, r6, r7\n\t"
32314 #elif defined(__clang__)
32315         "muls	r7, r6\n\t"
32316 #else
32317         "mul	r7, r6\n\t"
32318 #endif
32319 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32320         "adds	r5, r5, r7\n\t"
32321 #else
32322         "add	r5, r5, r7\n\t"
32323 #endif
32324 #ifdef WOLFSSL_KEIL
32325         "adcs	r3, r3, %[r]\n\t"
32326 #elif defined(__clang__)
32327         "adcs	r3, %[r]\n\t"
32328 #else
32329         "adc	r3, %[r]\n\t"
32330 #endif
32331         "uxth	r7, %[b]\n\t"
32332 #ifdef WOLFSSL_KEIL
32333         "muls	r6, r7, r6\n\t"
32334 #elif defined(__clang__)
32335         "muls	r6, r7\n\t"
32336 #else
32337         "mul	r6, r7\n\t"
32338 #endif
32339 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32340         "lsrs	r7, r6, #16\n\t"
32341 #else
32342         "lsr	r7, r6, #16\n\t"
32343 #endif
32344 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32345         "lsls	r6, r6, #16\n\t"
32346 #else
32347         "lsl	r6, r6, #16\n\t"
32348 #endif
32349 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32350         "adds	r4, r4, r6\n\t"
32351 #else
32352         "add	r4, r4, r6\n\t"
32353 #endif
32354 #ifdef WOLFSSL_KEIL
32355         "adcs	r5, r5, r7\n\t"
32356 #elif defined(__clang__)
32357         "adcs	r5, r7\n\t"
32358 #else
32359         "adc	r5, r7\n\t"
32360 #endif
32361 #ifdef WOLFSSL_KEIL
32362         "adcs	r3, r3, %[r]\n\t"
32363 #elif defined(__clang__)
32364         "adcs	r3, %[r]\n\t"
32365 #else
32366         "adc	r3, %[r]\n\t"
32367 #endif
32368         "str	r4, [sp, #16]\n\t"
32369         "#  A[0] * B[5]\n\t"
32370         "movs	r4, #0\n\t"
32371         "mov	%[a], r9\n\t"
32372         "mov	%[b], r10\n\t"
32373         "ldr	%[a], [%[a]]\n\t"
32374         "ldr	%[b], [%[b], #20]\n\t"
32375         "uxth	r6, %[a]\n\t"
32376         "uxth	r7, %[b]\n\t"
32377 #ifdef WOLFSSL_KEIL
32378         "muls	r7, r6, r7\n\t"
32379 #elif defined(__clang__)
32380         "muls	r7, r6\n\t"
32381 #else
32382         "mul	r7, r6\n\t"
32383 #endif
32384 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32385         "adds	r5, r5, r7\n\t"
32386 #else
32387         "add	r5, r5, r7\n\t"
32388 #endif
32389 #ifdef WOLFSSL_KEIL
32390         "adcs	r3, r3, %[r]\n\t"
32391 #elif defined(__clang__)
32392         "adcs	r3, %[r]\n\t"
32393 #else
32394         "adc	r3, %[r]\n\t"
32395 #endif
32396 #ifdef WOLFSSL_KEIL
32397         "adcs	r4, r4, %[r]\n\t"
32398 #elif defined(__clang__)
32399         "adcs	r4, %[r]\n\t"
32400 #else
32401         "adc	r4, %[r]\n\t"
32402 #endif
32403 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32404         "lsrs	r7, %[b], #16\n\t"
32405 #else
32406         "lsr	r7, %[b], #16\n\t"
32407 #endif
32408 #ifdef WOLFSSL_KEIL
32409         "muls	r6, r7, r6\n\t"
32410 #elif defined(__clang__)
32411         "muls	r6, r7\n\t"
32412 #else
32413         "mul	r6, r7\n\t"
32414 #endif
32415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32416         "lsrs	r7, r6, #16\n\t"
32417 #else
32418         "lsr	r7, r6, #16\n\t"
32419 #endif
32420 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32421         "lsls	r6, r6, #16\n\t"
32422 #else
32423         "lsl	r6, r6, #16\n\t"
32424 #endif
32425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32426         "adds	r5, r5, r6\n\t"
32427 #else
32428         "add	r5, r5, r6\n\t"
32429 #endif
32430 #ifdef WOLFSSL_KEIL
32431         "adcs	r3, r3, r7\n\t"
32432 #elif defined(__clang__)
32433         "adcs	r3, r7\n\t"
32434 #else
32435         "adc	r3, r7\n\t"
32436 #endif
32437 #ifdef WOLFSSL_KEIL
32438         "adcs	r4, r4, %[r]\n\t"
32439 #elif defined(__clang__)
32440         "adcs	r4, %[r]\n\t"
32441 #else
32442         "adc	r4, %[r]\n\t"
32443 #endif
32444 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32445         "lsrs	r6, %[a], #16\n\t"
32446 #else
32447         "lsr	r6, %[a], #16\n\t"
32448 #endif
32449 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32450         "lsrs	r7, %[b], #16\n\t"
32451 #else
32452         "lsr	r7, %[b], #16\n\t"
32453 #endif
32454 #ifdef WOLFSSL_KEIL
32455         "muls	r7, r6, r7\n\t"
32456 #elif defined(__clang__)
32457         "muls	r7, r6\n\t"
32458 #else
32459         "mul	r7, r6\n\t"
32460 #endif
32461 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32462         "adds	r3, r3, r7\n\t"
32463 #else
32464         "add	r3, r3, r7\n\t"
32465 #endif
32466 #ifdef WOLFSSL_KEIL
32467         "adcs	r4, r4, %[r]\n\t"
32468 #elif defined(__clang__)
32469         "adcs	r4, %[r]\n\t"
32470 #else
32471         "adc	r4, %[r]\n\t"
32472 #endif
32473         "uxth	r7, %[b]\n\t"
32474 #ifdef WOLFSSL_KEIL
32475         "muls	r6, r7, r6\n\t"
32476 #elif defined(__clang__)
32477         "muls	r6, r7\n\t"
32478 #else
32479         "mul	r6, r7\n\t"
32480 #endif
32481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32482         "lsrs	r7, r6, #16\n\t"
32483 #else
32484         "lsr	r7, r6, #16\n\t"
32485 #endif
32486 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32487         "lsls	r6, r6, #16\n\t"
32488 #else
32489         "lsl	r6, r6, #16\n\t"
32490 #endif
32491 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32492         "adds	r5, r5, r6\n\t"
32493 #else
32494         "add	r5, r5, r6\n\t"
32495 #endif
32496 #ifdef WOLFSSL_KEIL
32497         "adcs	r3, r3, r7\n\t"
32498 #elif defined(__clang__)
32499         "adcs	r3, r7\n\t"
32500 #else
32501         "adc	r3, r7\n\t"
32502 #endif
32503 #ifdef WOLFSSL_KEIL
32504         "adcs	r4, r4, %[r]\n\t"
32505 #elif defined(__clang__)
32506         "adcs	r4, %[r]\n\t"
32507 #else
32508         "adc	r4, %[r]\n\t"
32509 #endif
32510         "#  A[1] * B[4]\n\t"
32511         "mov	%[a], r9\n\t"
32512         "mov	%[b], r10\n\t"
32513         "ldr	%[a], [%[a], #4]\n\t"
32514         "ldr	%[b], [%[b], #16]\n\t"
32515         "uxth	r6, %[a]\n\t"
32516         "uxth	r7, %[b]\n\t"
32517 #ifdef WOLFSSL_KEIL
32518         "muls	r7, r6, r7\n\t"
32519 #elif defined(__clang__)
32520         "muls	r7, r6\n\t"
32521 #else
32522         "mul	r7, r6\n\t"
32523 #endif
32524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32525         "adds	r5, r5, r7\n\t"
32526 #else
32527         "add	r5, r5, r7\n\t"
32528 #endif
32529 #ifdef WOLFSSL_KEIL
32530         "adcs	r3, r3, %[r]\n\t"
32531 #elif defined(__clang__)
32532         "adcs	r3, %[r]\n\t"
32533 #else
32534         "adc	r3, %[r]\n\t"
32535 #endif
32536 #ifdef WOLFSSL_KEIL
32537         "adcs	r4, r4, %[r]\n\t"
32538 #elif defined(__clang__)
32539         "adcs	r4, %[r]\n\t"
32540 #else
32541         "adc	r4, %[r]\n\t"
32542 #endif
32543 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32544         "lsrs	r7, %[b], #16\n\t"
32545 #else
32546         "lsr	r7, %[b], #16\n\t"
32547 #endif
32548 #ifdef WOLFSSL_KEIL
32549         "muls	r6, r7, r6\n\t"
32550 #elif defined(__clang__)
32551         "muls	r6, r7\n\t"
32552 #else
32553         "mul	r6, r7\n\t"
32554 #endif
32555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32556         "lsrs	r7, r6, #16\n\t"
32557 #else
32558         "lsr	r7, r6, #16\n\t"
32559 #endif
32560 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32561         "lsls	r6, r6, #16\n\t"
32562 #else
32563         "lsl	r6, r6, #16\n\t"
32564 #endif
32565 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32566         "adds	r5, r5, r6\n\t"
32567 #else
32568         "add	r5, r5, r6\n\t"
32569 #endif
32570 #ifdef WOLFSSL_KEIL
32571         "adcs	r3, r3, r7\n\t"
32572 #elif defined(__clang__)
32573         "adcs	r3, r7\n\t"
32574 #else
32575         "adc	r3, r7\n\t"
32576 #endif
32577 #ifdef WOLFSSL_KEIL
32578         "adcs	r4, r4, %[r]\n\t"
32579 #elif defined(__clang__)
32580         "adcs	r4, %[r]\n\t"
32581 #else
32582         "adc	r4, %[r]\n\t"
32583 #endif
32584 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32585         "lsrs	r6, %[a], #16\n\t"
32586 #else
32587         "lsr	r6, %[a], #16\n\t"
32588 #endif
32589 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32590         "lsrs	r7, %[b], #16\n\t"
32591 #else
32592         "lsr	r7, %[b], #16\n\t"
32593 #endif
32594 #ifdef WOLFSSL_KEIL
32595         "muls	r7, r6, r7\n\t"
32596 #elif defined(__clang__)
32597         "muls	r7, r6\n\t"
32598 #else
32599         "mul	r7, r6\n\t"
32600 #endif
32601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32602         "adds	r3, r3, r7\n\t"
32603 #else
32604         "add	r3, r3, r7\n\t"
32605 #endif
32606 #ifdef WOLFSSL_KEIL
32607         "adcs	r4, r4, %[r]\n\t"
32608 #elif defined(__clang__)
32609         "adcs	r4, %[r]\n\t"
32610 #else
32611         "adc	r4, %[r]\n\t"
32612 #endif
32613         "uxth	r7, %[b]\n\t"
32614 #ifdef WOLFSSL_KEIL
32615         "muls	r6, r7, r6\n\t"
32616 #elif defined(__clang__)
32617         "muls	r6, r7\n\t"
32618 #else
32619         "mul	r6, r7\n\t"
32620 #endif
32621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32622         "lsrs	r7, r6, #16\n\t"
32623 #else
32624         "lsr	r7, r6, #16\n\t"
32625 #endif
32626 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32627         "lsls	r6, r6, #16\n\t"
32628 #else
32629         "lsl	r6, r6, #16\n\t"
32630 #endif
32631 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32632         "adds	r5, r5, r6\n\t"
32633 #else
32634         "add	r5, r5, r6\n\t"
32635 #endif
32636 #ifdef WOLFSSL_KEIL
32637         "adcs	r3, r3, r7\n\t"
32638 #elif defined(__clang__)
32639         "adcs	r3, r7\n\t"
32640 #else
32641         "adc	r3, r7\n\t"
32642 #endif
32643 #ifdef WOLFSSL_KEIL
32644         "adcs	r4, r4, %[r]\n\t"
32645 #elif defined(__clang__)
32646         "adcs	r4, %[r]\n\t"
32647 #else
32648         "adc	r4, %[r]\n\t"
32649 #endif
32650         "#  A[2] * B[3]\n\t"
32651         "mov	%[a], r9\n\t"
32652         "mov	%[b], r10\n\t"
32653         "ldr	%[a], [%[a], #8]\n\t"
32654         "ldr	%[b], [%[b], #12]\n\t"
32655         "uxth	r6, %[a]\n\t"
32656         "uxth	r7, %[b]\n\t"
32657 #ifdef WOLFSSL_KEIL
32658         "muls	r7, r6, r7\n\t"
32659 #elif defined(__clang__)
32660         "muls	r7, r6\n\t"
32661 #else
32662         "mul	r7, r6\n\t"
32663 #endif
32664 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32665         "adds	r5, r5, r7\n\t"
32666 #else
32667         "add	r5, r5, r7\n\t"
32668 #endif
32669 #ifdef WOLFSSL_KEIL
32670         "adcs	r3, r3, %[r]\n\t"
32671 #elif defined(__clang__)
32672         "adcs	r3, %[r]\n\t"
32673 #else
32674         "adc	r3, %[r]\n\t"
32675 #endif
32676 #ifdef WOLFSSL_KEIL
32677         "adcs	r4, r4, %[r]\n\t"
32678 #elif defined(__clang__)
32679         "adcs	r4, %[r]\n\t"
32680 #else
32681         "adc	r4, %[r]\n\t"
32682 #endif
32683 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32684         "lsrs	r7, %[b], #16\n\t"
32685 #else
32686         "lsr	r7, %[b], #16\n\t"
32687 #endif
32688 #ifdef WOLFSSL_KEIL
32689         "muls	r6, r7, r6\n\t"
32690 #elif defined(__clang__)
32691         "muls	r6, r7\n\t"
32692 #else
32693         "mul	r6, r7\n\t"
32694 #endif
32695 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32696         "lsrs	r7, r6, #16\n\t"
32697 #else
32698         "lsr	r7, r6, #16\n\t"
32699 #endif
32700 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32701         "lsls	r6, r6, #16\n\t"
32702 #else
32703         "lsl	r6, r6, #16\n\t"
32704 #endif
32705 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32706         "adds	r5, r5, r6\n\t"
32707 #else
32708         "add	r5, r5, r6\n\t"
32709 #endif
32710 #ifdef WOLFSSL_KEIL
32711         "adcs	r3, r3, r7\n\t"
32712 #elif defined(__clang__)
32713         "adcs	r3, r7\n\t"
32714 #else
32715         "adc	r3, r7\n\t"
32716 #endif
32717 #ifdef WOLFSSL_KEIL
32718         "adcs	r4, r4, %[r]\n\t"
32719 #elif defined(__clang__)
32720         "adcs	r4, %[r]\n\t"
32721 #else
32722         "adc	r4, %[r]\n\t"
32723 #endif
32724 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32725         "lsrs	r6, %[a], #16\n\t"
32726 #else
32727         "lsr	r6, %[a], #16\n\t"
32728 #endif
32729 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32730         "lsrs	r7, %[b], #16\n\t"
32731 #else
32732         "lsr	r7, %[b], #16\n\t"
32733 #endif
32734 #ifdef WOLFSSL_KEIL
32735         "muls	r7, r6, r7\n\t"
32736 #elif defined(__clang__)
32737         "muls	r7, r6\n\t"
32738 #else
32739         "mul	r7, r6\n\t"
32740 #endif
32741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32742         "adds	r3, r3, r7\n\t"
32743 #else
32744         "add	r3, r3, r7\n\t"
32745 #endif
32746 #ifdef WOLFSSL_KEIL
32747         "adcs	r4, r4, %[r]\n\t"
32748 #elif defined(__clang__)
32749         "adcs	r4, %[r]\n\t"
32750 #else
32751         "adc	r4, %[r]\n\t"
32752 #endif
32753         "uxth	r7, %[b]\n\t"
32754 #ifdef WOLFSSL_KEIL
32755         "muls	r6, r7, r6\n\t"
32756 #elif defined(__clang__)
32757         "muls	r6, r7\n\t"
32758 #else
32759         "mul	r6, r7\n\t"
32760 #endif
32761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32762         "lsrs	r7, r6, #16\n\t"
32763 #else
32764         "lsr	r7, r6, #16\n\t"
32765 #endif
32766 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32767         "lsls	r6, r6, #16\n\t"
32768 #else
32769         "lsl	r6, r6, #16\n\t"
32770 #endif
32771 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32772         "adds	r5, r5, r6\n\t"
32773 #else
32774         "add	r5, r5, r6\n\t"
32775 #endif
32776 #ifdef WOLFSSL_KEIL
32777         "adcs	r3, r3, r7\n\t"
32778 #elif defined(__clang__)
32779         "adcs	r3, r7\n\t"
32780 #else
32781         "adc	r3, r7\n\t"
32782 #endif
32783 #ifdef WOLFSSL_KEIL
32784         "adcs	r4, r4, %[r]\n\t"
32785 #elif defined(__clang__)
32786         "adcs	r4, %[r]\n\t"
32787 #else
32788         "adc	r4, %[r]\n\t"
32789 #endif
32790         "#  A[3] * B[2]\n\t"
32791         "mov	%[a], r9\n\t"
32792         "mov	%[b], r10\n\t"
32793         "ldr	%[a], [%[a], #12]\n\t"
32794         "ldr	%[b], [%[b], #8]\n\t"
32795         "uxth	r6, %[a]\n\t"
32796         "uxth	r7, %[b]\n\t"
32797 #ifdef WOLFSSL_KEIL
32798         "muls	r7, r6, r7\n\t"
32799 #elif defined(__clang__)
32800         "muls	r7, r6\n\t"
32801 #else
32802         "mul	r7, r6\n\t"
32803 #endif
32804 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32805         "adds	r5, r5, r7\n\t"
32806 #else
32807         "add	r5, r5, r7\n\t"
32808 #endif
32809 #ifdef WOLFSSL_KEIL
32810         "adcs	r3, r3, %[r]\n\t"
32811 #elif defined(__clang__)
32812         "adcs	r3, %[r]\n\t"
32813 #else
32814         "adc	r3, %[r]\n\t"
32815 #endif
32816 #ifdef WOLFSSL_KEIL
32817         "adcs	r4, r4, %[r]\n\t"
32818 #elif defined(__clang__)
32819         "adcs	r4, %[r]\n\t"
32820 #else
32821         "adc	r4, %[r]\n\t"
32822 #endif
32823 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32824         "lsrs	r7, %[b], #16\n\t"
32825 #else
32826         "lsr	r7, %[b], #16\n\t"
32827 #endif
32828 #ifdef WOLFSSL_KEIL
32829         "muls	r6, r7, r6\n\t"
32830 #elif defined(__clang__)
32831         "muls	r6, r7\n\t"
32832 #else
32833         "mul	r6, r7\n\t"
32834 #endif
32835 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32836         "lsrs	r7, r6, #16\n\t"
32837 #else
32838         "lsr	r7, r6, #16\n\t"
32839 #endif
32840 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32841         "lsls	r6, r6, #16\n\t"
32842 #else
32843         "lsl	r6, r6, #16\n\t"
32844 #endif
32845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32846         "adds	r5, r5, r6\n\t"
32847 #else
32848         "add	r5, r5, r6\n\t"
32849 #endif
32850 #ifdef WOLFSSL_KEIL
32851         "adcs	r3, r3, r7\n\t"
32852 #elif defined(__clang__)
32853         "adcs	r3, r7\n\t"
32854 #else
32855         "adc	r3, r7\n\t"
32856 #endif
32857 #ifdef WOLFSSL_KEIL
32858         "adcs	r4, r4, %[r]\n\t"
32859 #elif defined(__clang__)
32860         "adcs	r4, %[r]\n\t"
32861 #else
32862         "adc	r4, %[r]\n\t"
32863 #endif
32864 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32865         "lsrs	r6, %[a], #16\n\t"
32866 #else
32867         "lsr	r6, %[a], #16\n\t"
32868 #endif
32869 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32870         "lsrs	r7, %[b], #16\n\t"
32871 #else
32872         "lsr	r7, %[b], #16\n\t"
32873 #endif
32874 #ifdef WOLFSSL_KEIL
32875         "muls	r7, r6, r7\n\t"
32876 #elif defined(__clang__)
32877         "muls	r7, r6\n\t"
32878 #else
32879         "mul	r7, r6\n\t"
32880 #endif
32881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32882         "adds	r3, r3, r7\n\t"
32883 #else
32884         "add	r3, r3, r7\n\t"
32885 #endif
32886 #ifdef WOLFSSL_KEIL
32887         "adcs	r4, r4, %[r]\n\t"
32888 #elif defined(__clang__)
32889         "adcs	r4, %[r]\n\t"
32890 #else
32891         "adc	r4, %[r]\n\t"
32892 #endif
32893         "uxth	r7, %[b]\n\t"
32894 #ifdef WOLFSSL_KEIL
32895         "muls	r6, r7, r6\n\t"
32896 #elif defined(__clang__)
32897         "muls	r6, r7\n\t"
32898 #else
32899         "mul	r6, r7\n\t"
32900 #endif
32901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32902         "lsrs	r7, r6, #16\n\t"
32903 #else
32904         "lsr	r7, r6, #16\n\t"
32905 #endif
32906 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32907         "lsls	r6, r6, #16\n\t"
32908 #else
32909         "lsl	r6, r6, #16\n\t"
32910 #endif
32911 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32912         "adds	r5, r5, r6\n\t"
32913 #else
32914         "add	r5, r5, r6\n\t"
32915 #endif
32916 #ifdef WOLFSSL_KEIL
32917         "adcs	r3, r3, r7\n\t"
32918 #elif defined(__clang__)
32919         "adcs	r3, r7\n\t"
32920 #else
32921         "adc	r3, r7\n\t"
32922 #endif
32923 #ifdef WOLFSSL_KEIL
32924         "adcs	r4, r4, %[r]\n\t"
32925 #elif defined(__clang__)
32926         "adcs	r4, %[r]\n\t"
32927 #else
32928         "adc	r4, %[r]\n\t"
32929 #endif
32930         "#  A[4] * B[1]\n\t"
32931         "mov	%[a], r9\n\t"
32932         "mov	%[b], r10\n\t"
32933         "ldr	%[a], [%[a], #16]\n\t"
32934         "ldr	%[b], [%[b], #4]\n\t"
32935         "uxth	r6, %[a]\n\t"
32936         "uxth	r7, %[b]\n\t"
32937 #ifdef WOLFSSL_KEIL
32938         "muls	r7, r6, r7\n\t"
32939 #elif defined(__clang__)
32940         "muls	r7, r6\n\t"
32941 #else
32942         "mul	r7, r6\n\t"
32943 #endif
32944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32945         "adds	r5, r5, r7\n\t"
32946 #else
32947         "add	r5, r5, r7\n\t"
32948 #endif
32949 #ifdef WOLFSSL_KEIL
32950         "adcs	r3, r3, %[r]\n\t"
32951 #elif defined(__clang__)
32952         "adcs	r3, %[r]\n\t"
32953 #else
32954         "adc	r3, %[r]\n\t"
32955 #endif
32956 #ifdef WOLFSSL_KEIL
32957         "adcs	r4, r4, %[r]\n\t"
32958 #elif defined(__clang__)
32959         "adcs	r4, %[r]\n\t"
32960 #else
32961         "adc	r4, %[r]\n\t"
32962 #endif
32963 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32964         "lsrs	r7, %[b], #16\n\t"
32965 #else
32966         "lsr	r7, %[b], #16\n\t"
32967 #endif
32968 #ifdef WOLFSSL_KEIL
32969         "muls	r6, r7, r6\n\t"
32970 #elif defined(__clang__)
32971         "muls	r6, r7\n\t"
32972 #else
32973         "mul	r6, r7\n\t"
32974 #endif
32975 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32976         "lsrs	r7, r6, #16\n\t"
32977 #else
32978         "lsr	r7, r6, #16\n\t"
32979 #endif
32980 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32981         "lsls	r6, r6, #16\n\t"
32982 #else
32983         "lsl	r6, r6, #16\n\t"
32984 #endif
32985 #if defined(__clang__) || defined(WOLFSSL_KEIL)
32986         "adds	r5, r5, r6\n\t"
32987 #else
32988         "add	r5, r5, r6\n\t"
32989 #endif
32990 #ifdef WOLFSSL_KEIL
32991         "adcs	r3, r3, r7\n\t"
32992 #elif defined(__clang__)
32993         "adcs	r3, r7\n\t"
32994 #else
32995         "adc	r3, r7\n\t"
32996 #endif
32997 #ifdef WOLFSSL_KEIL
32998         "adcs	r4, r4, %[r]\n\t"
32999 #elif defined(__clang__)
33000         "adcs	r4, %[r]\n\t"
33001 #else
33002         "adc	r4, %[r]\n\t"
33003 #endif
33004 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33005         "lsrs	r6, %[a], #16\n\t"
33006 #else
33007         "lsr	r6, %[a], #16\n\t"
33008 #endif
33009 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33010         "lsrs	r7, %[b], #16\n\t"
33011 #else
33012         "lsr	r7, %[b], #16\n\t"
33013 #endif
33014 #ifdef WOLFSSL_KEIL
33015         "muls	r7, r6, r7\n\t"
33016 #elif defined(__clang__)
33017         "muls	r7, r6\n\t"
33018 #else
33019         "mul	r7, r6\n\t"
33020 #endif
33021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33022         "adds	r3, r3, r7\n\t"
33023 #else
33024         "add	r3, r3, r7\n\t"
33025 #endif
33026 #ifdef WOLFSSL_KEIL
33027         "adcs	r4, r4, %[r]\n\t"
33028 #elif defined(__clang__)
33029         "adcs	r4, %[r]\n\t"
33030 #else
33031         "adc	r4, %[r]\n\t"
33032 #endif
33033         "uxth	r7, %[b]\n\t"
33034 #ifdef WOLFSSL_KEIL
33035         "muls	r6, r7, r6\n\t"
33036 #elif defined(__clang__)
33037         "muls	r6, r7\n\t"
33038 #else
33039         "mul	r6, r7\n\t"
33040 #endif
33041 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33042         "lsrs	r7, r6, #16\n\t"
33043 #else
33044         "lsr	r7, r6, #16\n\t"
33045 #endif
33046 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33047         "lsls	r6, r6, #16\n\t"
33048 #else
33049         "lsl	r6, r6, #16\n\t"
33050 #endif
33051 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33052         "adds	r5, r5, r6\n\t"
33053 #else
33054         "add	r5, r5, r6\n\t"
33055 #endif
33056 #ifdef WOLFSSL_KEIL
33057         "adcs	r3, r3, r7\n\t"
33058 #elif defined(__clang__)
33059         "adcs	r3, r7\n\t"
33060 #else
33061         "adc	r3, r7\n\t"
33062 #endif
33063 #ifdef WOLFSSL_KEIL
33064         "adcs	r4, r4, %[r]\n\t"
33065 #elif defined(__clang__)
33066         "adcs	r4, %[r]\n\t"
33067 #else
33068         "adc	r4, %[r]\n\t"
33069 #endif
33070         "#  A[5] * B[0]\n\t"
33071         "mov	%[a], r9\n\t"
33072         "mov	%[b], r10\n\t"
33073         "ldr	%[a], [%[a], #20]\n\t"
33074         "ldr	%[b], [%[b]]\n\t"
33075         "uxth	r6, %[a]\n\t"
33076         "uxth	r7, %[b]\n\t"
33077 #ifdef WOLFSSL_KEIL
33078         "muls	r7, r6, r7\n\t"
33079 #elif defined(__clang__)
33080         "muls	r7, r6\n\t"
33081 #else
33082         "mul	r7, r6\n\t"
33083 #endif
33084 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33085         "adds	r5, r5, r7\n\t"
33086 #else
33087         "add	r5, r5, r7\n\t"
33088 #endif
33089 #ifdef WOLFSSL_KEIL
33090         "adcs	r3, r3, %[r]\n\t"
33091 #elif defined(__clang__)
33092         "adcs	r3, %[r]\n\t"
33093 #else
33094         "adc	r3, %[r]\n\t"
33095 #endif
33096 #ifdef WOLFSSL_KEIL
33097         "adcs	r4, r4, %[r]\n\t"
33098 #elif defined(__clang__)
33099         "adcs	r4, %[r]\n\t"
33100 #else
33101         "adc	r4, %[r]\n\t"
33102 #endif
33103 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33104         "lsrs	r7, %[b], #16\n\t"
33105 #else
33106         "lsr	r7, %[b], #16\n\t"
33107 #endif
33108 #ifdef WOLFSSL_KEIL
33109         "muls	r6, r7, r6\n\t"
33110 #elif defined(__clang__)
33111         "muls	r6, r7\n\t"
33112 #else
33113         "mul	r6, r7\n\t"
33114 #endif
33115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33116         "lsrs	r7, r6, #16\n\t"
33117 #else
33118         "lsr	r7, r6, #16\n\t"
33119 #endif
33120 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33121         "lsls	r6, r6, #16\n\t"
33122 #else
33123         "lsl	r6, r6, #16\n\t"
33124 #endif
33125 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33126         "adds	r5, r5, r6\n\t"
33127 #else
33128         "add	r5, r5, r6\n\t"
33129 #endif
33130 #ifdef WOLFSSL_KEIL
33131         "adcs	r3, r3, r7\n\t"
33132 #elif defined(__clang__)
33133         "adcs	r3, r7\n\t"
33134 #else
33135         "adc	r3, r7\n\t"
33136 #endif
33137 #ifdef WOLFSSL_KEIL
33138         "adcs	r4, r4, %[r]\n\t"
33139 #elif defined(__clang__)
33140         "adcs	r4, %[r]\n\t"
33141 #else
33142         "adc	r4, %[r]\n\t"
33143 #endif
33144 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33145         "lsrs	r6, %[a], #16\n\t"
33146 #else
33147         "lsr	r6, %[a], #16\n\t"
33148 #endif
33149 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33150         "lsrs	r7, %[b], #16\n\t"
33151 #else
33152         "lsr	r7, %[b], #16\n\t"
33153 #endif
33154 #ifdef WOLFSSL_KEIL
33155         "muls	r7, r6, r7\n\t"
33156 #elif defined(__clang__)
33157         "muls	r7, r6\n\t"
33158 #else
33159         "mul	r7, r6\n\t"
33160 #endif
33161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33162         "adds	r3, r3, r7\n\t"
33163 #else
33164         "add	r3, r3, r7\n\t"
33165 #endif
33166 #ifdef WOLFSSL_KEIL
33167         "adcs	r4, r4, %[r]\n\t"
33168 #elif defined(__clang__)
33169         "adcs	r4, %[r]\n\t"
33170 #else
33171         "adc	r4, %[r]\n\t"
33172 #endif
33173         "uxth	r7, %[b]\n\t"
33174 #ifdef WOLFSSL_KEIL
33175         "muls	r6, r7, r6\n\t"
33176 #elif defined(__clang__)
33177         "muls	r6, r7\n\t"
33178 #else
33179         "mul	r6, r7\n\t"
33180 #endif
33181 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33182         "lsrs	r7, r6, #16\n\t"
33183 #else
33184         "lsr	r7, r6, #16\n\t"
33185 #endif
33186 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33187         "lsls	r6, r6, #16\n\t"
33188 #else
33189         "lsl	r6, r6, #16\n\t"
33190 #endif
33191 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33192         "adds	r5, r5, r6\n\t"
33193 #else
33194         "add	r5, r5, r6\n\t"
33195 #endif
33196 #ifdef WOLFSSL_KEIL
33197         "adcs	r3, r3, r7\n\t"
33198 #elif defined(__clang__)
33199         "adcs	r3, r7\n\t"
33200 #else
33201         "adc	r3, r7\n\t"
33202 #endif
33203 #ifdef WOLFSSL_KEIL
33204         "adcs	r4, r4, %[r]\n\t"
33205 #elif defined(__clang__)
33206         "adcs	r4, %[r]\n\t"
33207 #else
33208         "adc	r4, %[r]\n\t"
33209 #endif
33210         "str	r5, [sp, #20]\n\t"
33211         "#  A[6] * B[0]\n\t"
33212         "movs	r5, #0\n\t"
33213         "mov	%[a], r9\n\t"
33214         "mov	%[b], r10\n\t"
33215         "ldr	%[a], [%[a], #24]\n\t"
33216         "ldr	%[b], [%[b]]\n\t"
33217         "uxth	r6, %[a]\n\t"
33218         "uxth	r7, %[b]\n\t"
33219 #ifdef WOLFSSL_KEIL
33220         "muls	r7, r6, r7\n\t"
33221 #elif defined(__clang__)
33222         "muls	r7, r6\n\t"
33223 #else
33224         "mul	r7, r6\n\t"
33225 #endif
33226 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33227         "adds	r3, r3, r7\n\t"
33228 #else
33229         "add	r3, r3, r7\n\t"
33230 #endif
33231 #ifdef WOLFSSL_KEIL
33232         "adcs	r4, r4, %[r]\n\t"
33233 #elif defined(__clang__)
33234         "adcs	r4, %[r]\n\t"
33235 #else
33236         "adc	r4, %[r]\n\t"
33237 #endif
33238 #ifdef WOLFSSL_KEIL
33239         "adcs	r5, r5, %[r]\n\t"
33240 #elif defined(__clang__)
33241         "adcs	r5, %[r]\n\t"
33242 #else
33243         "adc	r5, %[r]\n\t"
33244 #endif
33245 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33246         "lsrs	r7, %[b], #16\n\t"
33247 #else
33248         "lsr	r7, %[b], #16\n\t"
33249 #endif
33250 #ifdef WOLFSSL_KEIL
33251         "muls	r6, r7, r6\n\t"
33252 #elif defined(__clang__)
33253         "muls	r6, r7\n\t"
33254 #else
33255         "mul	r6, r7\n\t"
33256 #endif
33257 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33258         "lsrs	r7, r6, #16\n\t"
33259 #else
33260         "lsr	r7, r6, #16\n\t"
33261 #endif
33262 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33263         "lsls	r6, r6, #16\n\t"
33264 #else
33265         "lsl	r6, r6, #16\n\t"
33266 #endif
33267 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33268         "adds	r3, r3, r6\n\t"
33269 #else
33270         "add	r3, r3, r6\n\t"
33271 #endif
33272 #ifdef WOLFSSL_KEIL
33273         "adcs	r4, r4, r7\n\t"
33274 #elif defined(__clang__)
33275         "adcs	r4, r7\n\t"
33276 #else
33277         "adc	r4, r7\n\t"
33278 #endif
33279 #ifdef WOLFSSL_KEIL
33280         "adcs	r5, r5, %[r]\n\t"
33281 #elif defined(__clang__)
33282         "adcs	r5, %[r]\n\t"
33283 #else
33284         "adc	r5, %[r]\n\t"
33285 #endif
33286 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33287         "lsrs	r6, %[a], #16\n\t"
33288 #else
33289         "lsr	r6, %[a], #16\n\t"
33290 #endif
33291 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33292         "lsrs	r7, %[b], #16\n\t"
33293 #else
33294         "lsr	r7, %[b], #16\n\t"
33295 #endif
33296 #ifdef WOLFSSL_KEIL
33297         "muls	r7, r6, r7\n\t"
33298 #elif defined(__clang__)
33299         "muls	r7, r6\n\t"
33300 #else
33301         "mul	r7, r6\n\t"
33302 #endif
33303 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33304         "adds	r4, r4, r7\n\t"
33305 #else
33306         "add	r4, r4, r7\n\t"
33307 #endif
33308 #ifdef WOLFSSL_KEIL
33309         "adcs	r5, r5, %[r]\n\t"
33310 #elif defined(__clang__)
33311         "adcs	r5, %[r]\n\t"
33312 #else
33313         "adc	r5, %[r]\n\t"
33314 #endif
33315         "uxth	r7, %[b]\n\t"
33316 #ifdef WOLFSSL_KEIL
33317         "muls	r6, r7, r6\n\t"
33318 #elif defined(__clang__)
33319         "muls	r6, r7\n\t"
33320 #else
33321         "mul	r6, r7\n\t"
33322 #endif
33323 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33324         "lsrs	r7, r6, #16\n\t"
33325 #else
33326         "lsr	r7, r6, #16\n\t"
33327 #endif
33328 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33329         "lsls	r6, r6, #16\n\t"
33330 #else
33331         "lsl	r6, r6, #16\n\t"
33332 #endif
33333 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33334         "adds	r3, r3, r6\n\t"
33335 #else
33336         "add	r3, r3, r6\n\t"
33337 #endif
33338 #ifdef WOLFSSL_KEIL
33339         "adcs	r4, r4, r7\n\t"
33340 #elif defined(__clang__)
33341         "adcs	r4, r7\n\t"
33342 #else
33343         "adc	r4, r7\n\t"
33344 #endif
33345 #ifdef WOLFSSL_KEIL
33346         "adcs	r5, r5, %[r]\n\t"
33347 #elif defined(__clang__)
33348         "adcs	r5, %[r]\n\t"
33349 #else
33350         "adc	r5, %[r]\n\t"
33351 #endif
33352         "#  A[5] * B[1]\n\t"
33353         "mov	%[a], r9\n\t"
33354         "mov	%[b], r10\n\t"
33355         "ldr	%[a], [%[a], #20]\n\t"
33356         "ldr	%[b], [%[b], #4]\n\t"
33357         "uxth	r6, %[a]\n\t"
33358         "uxth	r7, %[b]\n\t"
33359 #ifdef WOLFSSL_KEIL
33360         "muls	r7, r6, r7\n\t"
33361 #elif defined(__clang__)
33362         "muls	r7, r6\n\t"
33363 #else
33364         "mul	r7, r6\n\t"
33365 #endif
33366 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33367         "adds	r3, r3, r7\n\t"
33368 #else
33369         "add	r3, r3, r7\n\t"
33370 #endif
33371 #ifdef WOLFSSL_KEIL
33372         "adcs	r4, r4, %[r]\n\t"
33373 #elif defined(__clang__)
33374         "adcs	r4, %[r]\n\t"
33375 #else
33376         "adc	r4, %[r]\n\t"
33377 #endif
33378 #ifdef WOLFSSL_KEIL
33379         "adcs	r5, r5, %[r]\n\t"
33380 #elif defined(__clang__)
33381         "adcs	r5, %[r]\n\t"
33382 #else
33383         "adc	r5, %[r]\n\t"
33384 #endif
33385 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33386         "lsrs	r7, %[b], #16\n\t"
33387 #else
33388         "lsr	r7, %[b], #16\n\t"
33389 #endif
33390 #ifdef WOLFSSL_KEIL
33391         "muls	r6, r7, r6\n\t"
33392 #elif defined(__clang__)
33393         "muls	r6, r7\n\t"
33394 #else
33395         "mul	r6, r7\n\t"
33396 #endif
33397 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33398         "lsrs	r7, r6, #16\n\t"
33399 #else
33400         "lsr	r7, r6, #16\n\t"
33401 #endif
33402 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33403         "lsls	r6, r6, #16\n\t"
33404 #else
33405         "lsl	r6, r6, #16\n\t"
33406 #endif
33407 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33408         "adds	r3, r3, r6\n\t"
33409 #else
33410         "add	r3, r3, r6\n\t"
33411 #endif
33412 #ifdef WOLFSSL_KEIL
33413         "adcs	r4, r4, r7\n\t"
33414 #elif defined(__clang__)
33415         "adcs	r4, r7\n\t"
33416 #else
33417         "adc	r4, r7\n\t"
33418 #endif
33419 #ifdef WOLFSSL_KEIL
33420         "adcs	r5, r5, %[r]\n\t"
33421 #elif defined(__clang__)
33422         "adcs	r5, %[r]\n\t"
33423 #else
33424         "adc	r5, %[r]\n\t"
33425 #endif
33426 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33427         "lsrs	r6, %[a], #16\n\t"
33428 #else
33429         "lsr	r6, %[a], #16\n\t"
33430 #endif
33431 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33432         "lsrs	r7, %[b], #16\n\t"
33433 #else
33434         "lsr	r7, %[b], #16\n\t"
33435 #endif
33436 #ifdef WOLFSSL_KEIL
33437         "muls	r7, r6, r7\n\t"
33438 #elif defined(__clang__)
33439         "muls	r7, r6\n\t"
33440 #else
33441         "mul	r7, r6\n\t"
33442 #endif
33443 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33444         "adds	r4, r4, r7\n\t"
33445 #else
33446         "add	r4, r4, r7\n\t"
33447 #endif
33448 #ifdef WOLFSSL_KEIL
33449         "adcs	r5, r5, %[r]\n\t"
33450 #elif defined(__clang__)
33451         "adcs	r5, %[r]\n\t"
33452 #else
33453         "adc	r5, %[r]\n\t"
33454 #endif
33455         "uxth	r7, %[b]\n\t"
33456 #ifdef WOLFSSL_KEIL
33457         "muls	r6, r7, r6\n\t"
33458 #elif defined(__clang__)
33459         "muls	r6, r7\n\t"
33460 #else
33461         "mul	r6, r7\n\t"
33462 #endif
33463 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33464         "lsrs	r7, r6, #16\n\t"
33465 #else
33466         "lsr	r7, r6, #16\n\t"
33467 #endif
33468 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33469         "lsls	r6, r6, #16\n\t"
33470 #else
33471         "lsl	r6, r6, #16\n\t"
33472 #endif
33473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33474         "adds	r3, r3, r6\n\t"
33475 #else
33476         "add	r3, r3, r6\n\t"
33477 #endif
33478 #ifdef WOLFSSL_KEIL
33479         "adcs	r4, r4, r7\n\t"
33480 #elif defined(__clang__)
33481         "adcs	r4, r7\n\t"
33482 #else
33483         "adc	r4, r7\n\t"
33484 #endif
33485 #ifdef WOLFSSL_KEIL
33486         "adcs	r5, r5, %[r]\n\t"
33487 #elif defined(__clang__)
33488         "adcs	r5, %[r]\n\t"
33489 #else
33490         "adc	r5, %[r]\n\t"
33491 #endif
33492         "#  A[4] * B[2]\n\t"
33493         "mov	%[a], r9\n\t"
33494         "mov	%[b], r10\n\t"
33495         "ldr	%[a], [%[a], #16]\n\t"
33496         "ldr	%[b], [%[b], #8]\n\t"
33497         "uxth	r6, %[a]\n\t"
33498         "uxth	r7, %[b]\n\t"
33499 #ifdef WOLFSSL_KEIL
33500         "muls	r7, r6, r7\n\t"
33501 #elif defined(__clang__)
33502         "muls	r7, r6\n\t"
33503 #else
33504         "mul	r7, r6\n\t"
33505 #endif
33506 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33507         "adds	r3, r3, r7\n\t"
33508 #else
33509         "add	r3, r3, r7\n\t"
33510 #endif
33511 #ifdef WOLFSSL_KEIL
33512         "adcs	r4, r4, %[r]\n\t"
33513 #elif defined(__clang__)
33514         "adcs	r4, %[r]\n\t"
33515 #else
33516         "adc	r4, %[r]\n\t"
33517 #endif
33518 #ifdef WOLFSSL_KEIL
33519         "adcs	r5, r5, %[r]\n\t"
33520 #elif defined(__clang__)
33521         "adcs	r5, %[r]\n\t"
33522 #else
33523         "adc	r5, %[r]\n\t"
33524 #endif
33525 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33526         "lsrs	r7, %[b], #16\n\t"
33527 #else
33528         "lsr	r7, %[b], #16\n\t"
33529 #endif
33530 #ifdef WOLFSSL_KEIL
33531         "muls	r6, r7, r6\n\t"
33532 #elif defined(__clang__)
33533         "muls	r6, r7\n\t"
33534 #else
33535         "mul	r6, r7\n\t"
33536 #endif
33537 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33538         "lsrs	r7, r6, #16\n\t"
33539 #else
33540         "lsr	r7, r6, #16\n\t"
33541 #endif
33542 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33543         "lsls	r6, r6, #16\n\t"
33544 #else
33545         "lsl	r6, r6, #16\n\t"
33546 #endif
33547 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33548         "adds	r3, r3, r6\n\t"
33549 #else
33550         "add	r3, r3, r6\n\t"
33551 #endif
33552 #ifdef WOLFSSL_KEIL
33553         "adcs	r4, r4, r7\n\t"
33554 #elif defined(__clang__)
33555         "adcs	r4, r7\n\t"
33556 #else
33557         "adc	r4, r7\n\t"
33558 #endif
33559 #ifdef WOLFSSL_KEIL
33560         "adcs	r5, r5, %[r]\n\t"
33561 #elif defined(__clang__)
33562         "adcs	r5, %[r]\n\t"
33563 #else
33564         "adc	r5, %[r]\n\t"
33565 #endif
33566 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33567         "lsrs	r6, %[a], #16\n\t"
33568 #else
33569         "lsr	r6, %[a], #16\n\t"
33570 #endif
33571 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33572         "lsrs	r7, %[b], #16\n\t"
33573 #else
33574         "lsr	r7, %[b], #16\n\t"
33575 #endif
33576 #ifdef WOLFSSL_KEIL
33577         "muls	r7, r6, r7\n\t"
33578 #elif defined(__clang__)
33579         "muls	r7, r6\n\t"
33580 #else
33581         "mul	r7, r6\n\t"
33582 #endif
33583 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33584         "adds	r4, r4, r7\n\t"
33585 #else
33586         "add	r4, r4, r7\n\t"
33587 #endif
33588 #ifdef WOLFSSL_KEIL
33589         "adcs	r5, r5, %[r]\n\t"
33590 #elif defined(__clang__)
33591         "adcs	r5, %[r]\n\t"
33592 #else
33593         "adc	r5, %[r]\n\t"
33594 #endif
33595         "uxth	r7, %[b]\n\t"
33596 #ifdef WOLFSSL_KEIL
33597         "muls	r6, r7, r6\n\t"
33598 #elif defined(__clang__)
33599         "muls	r6, r7\n\t"
33600 #else
33601         "mul	r6, r7\n\t"
33602 #endif
33603 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33604         "lsrs	r7, r6, #16\n\t"
33605 #else
33606         "lsr	r7, r6, #16\n\t"
33607 #endif
33608 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33609         "lsls	r6, r6, #16\n\t"
33610 #else
33611         "lsl	r6, r6, #16\n\t"
33612 #endif
33613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33614         "adds	r3, r3, r6\n\t"
33615 #else
33616         "add	r3, r3, r6\n\t"
33617 #endif
33618 #ifdef WOLFSSL_KEIL
33619         "adcs	r4, r4, r7\n\t"
33620 #elif defined(__clang__)
33621         "adcs	r4, r7\n\t"
33622 #else
33623         "adc	r4, r7\n\t"
33624 #endif
33625 #ifdef WOLFSSL_KEIL
33626         "adcs	r5, r5, %[r]\n\t"
33627 #elif defined(__clang__)
33628         "adcs	r5, %[r]\n\t"
33629 #else
33630         "adc	r5, %[r]\n\t"
33631 #endif
33632         "#  A[3] * B[3]\n\t"
33633         "mov	%[a], r9\n\t"
33634         "mov	%[b], r10\n\t"
33635         "ldr	%[a], [%[a], #12]\n\t"
33636         "ldr	%[b], [%[b], #12]\n\t"
33637         "uxth	r6, %[a]\n\t"
33638         "uxth	r7, %[b]\n\t"
33639 #ifdef WOLFSSL_KEIL
33640         "muls	r7, r6, r7\n\t"
33641 #elif defined(__clang__)
33642         "muls	r7, r6\n\t"
33643 #else
33644         "mul	r7, r6\n\t"
33645 #endif
33646 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33647         "adds	r3, r3, r7\n\t"
33648 #else
33649         "add	r3, r3, r7\n\t"
33650 #endif
33651 #ifdef WOLFSSL_KEIL
33652         "adcs	r4, r4, %[r]\n\t"
33653 #elif defined(__clang__)
33654         "adcs	r4, %[r]\n\t"
33655 #else
33656         "adc	r4, %[r]\n\t"
33657 #endif
33658 #ifdef WOLFSSL_KEIL
33659         "adcs	r5, r5, %[r]\n\t"
33660 #elif defined(__clang__)
33661         "adcs	r5, %[r]\n\t"
33662 #else
33663         "adc	r5, %[r]\n\t"
33664 #endif
33665 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33666         "lsrs	r7, %[b], #16\n\t"
33667 #else
33668         "lsr	r7, %[b], #16\n\t"
33669 #endif
33670 #ifdef WOLFSSL_KEIL
33671         "muls	r6, r7, r6\n\t"
33672 #elif defined(__clang__)
33673         "muls	r6, r7\n\t"
33674 #else
33675         "mul	r6, r7\n\t"
33676 #endif
33677 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33678         "lsrs	r7, r6, #16\n\t"
33679 #else
33680         "lsr	r7, r6, #16\n\t"
33681 #endif
33682 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33683         "lsls	r6, r6, #16\n\t"
33684 #else
33685         "lsl	r6, r6, #16\n\t"
33686 #endif
33687 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33688         "adds	r3, r3, r6\n\t"
33689 #else
33690         "add	r3, r3, r6\n\t"
33691 #endif
33692 #ifdef WOLFSSL_KEIL
33693         "adcs	r4, r4, r7\n\t"
33694 #elif defined(__clang__)
33695         "adcs	r4, r7\n\t"
33696 #else
33697         "adc	r4, r7\n\t"
33698 #endif
33699 #ifdef WOLFSSL_KEIL
33700         "adcs	r5, r5, %[r]\n\t"
33701 #elif defined(__clang__)
33702         "adcs	r5, %[r]\n\t"
33703 #else
33704         "adc	r5, %[r]\n\t"
33705 #endif
33706 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33707         "lsrs	r6, %[a], #16\n\t"
33708 #else
33709         "lsr	r6, %[a], #16\n\t"
33710 #endif
33711 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33712         "lsrs	r7, %[b], #16\n\t"
33713 #else
33714         "lsr	r7, %[b], #16\n\t"
33715 #endif
33716 #ifdef WOLFSSL_KEIL
33717         "muls	r7, r6, r7\n\t"
33718 #elif defined(__clang__)
33719         "muls	r7, r6\n\t"
33720 #else
33721         "mul	r7, r6\n\t"
33722 #endif
33723 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33724         "adds	r4, r4, r7\n\t"
33725 #else
33726         "add	r4, r4, r7\n\t"
33727 #endif
33728 #ifdef WOLFSSL_KEIL
33729         "adcs	r5, r5, %[r]\n\t"
33730 #elif defined(__clang__)
33731         "adcs	r5, %[r]\n\t"
33732 #else
33733         "adc	r5, %[r]\n\t"
33734 #endif
33735         "uxth	r7, %[b]\n\t"
33736 #ifdef WOLFSSL_KEIL
33737         "muls	r6, r7, r6\n\t"
33738 #elif defined(__clang__)
33739         "muls	r6, r7\n\t"
33740 #else
33741         "mul	r6, r7\n\t"
33742 #endif
33743 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33744         "lsrs	r7, r6, #16\n\t"
33745 #else
33746         "lsr	r7, r6, #16\n\t"
33747 #endif
33748 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33749         "lsls	r6, r6, #16\n\t"
33750 #else
33751         "lsl	r6, r6, #16\n\t"
33752 #endif
33753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33754         "adds	r3, r3, r6\n\t"
33755 #else
33756         "add	r3, r3, r6\n\t"
33757 #endif
33758 #ifdef WOLFSSL_KEIL
33759         "adcs	r4, r4, r7\n\t"
33760 #elif defined(__clang__)
33761         "adcs	r4, r7\n\t"
33762 #else
33763         "adc	r4, r7\n\t"
33764 #endif
33765 #ifdef WOLFSSL_KEIL
33766         "adcs	r5, r5, %[r]\n\t"
33767 #elif defined(__clang__)
33768         "adcs	r5, %[r]\n\t"
33769 #else
33770         "adc	r5, %[r]\n\t"
33771 #endif
33772         "#  A[2] * B[4]\n\t"
33773         "mov	%[a], r9\n\t"
33774         "mov	%[b], r10\n\t"
33775         "ldr	%[a], [%[a], #8]\n\t"
33776         "ldr	%[b], [%[b], #16]\n\t"
33777         "uxth	r6, %[a]\n\t"
33778         "uxth	r7, %[b]\n\t"
33779 #ifdef WOLFSSL_KEIL
33780         "muls	r7, r6, r7\n\t"
33781 #elif defined(__clang__)
33782         "muls	r7, r6\n\t"
33783 #else
33784         "mul	r7, r6\n\t"
33785 #endif
33786 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33787         "adds	r3, r3, r7\n\t"
33788 #else
33789         "add	r3, r3, r7\n\t"
33790 #endif
33791 #ifdef WOLFSSL_KEIL
33792         "adcs	r4, r4, %[r]\n\t"
33793 #elif defined(__clang__)
33794         "adcs	r4, %[r]\n\t"
33795 #else
33796         "adc	r4, %[r]\n\t"
33797 #endif
33798 #ifdef WOLFSSL_KEIL
33799         "adcs	r5, r5, %[r]\n\t"
33800 #elif defined(__clang__)
33801         "adcs	r5, %[r]\n\t"
33802 #else
33803         "adc	r5, %[r]\n\t"
33804 #endif
33805 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33806         "lsrs	r7, %[b], #16\n\t"
33807 #else
33808         "lsr	r7, %[b], #16\n\t"
33809 #endif
33810 #ifdef WOLFSSL_KEIL
33811         "muls	r6, r7, r6\n\t"
33812 #elif defined(__clang__)
33813         "muls	r6, r7\n\t"
33814 #else
33815         "mul	r6, r7\n\t"
33816 #endif
33817 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33818         "lsrs	r7, r6, #16\n\t"
33819 #else
33820         "lsr	r7, r6, #16\n\t"
33821 #endif
33822 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33823         "lsls	r6, r6, #16\n\t"
33824 #else
33825         "lsl	r6, r6, #16\n\t"
33826 #endif
33827 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33828         "adds	r3, r3, r6\n\t"
33829 #else
33830         "add	r3, r3, r6\n\t"
33831 #endif
33832 #ifdef WOLFSSL_KEIL
33833         "adcs	r4, r4, r7\n\t"
33834 #elif defined(__clang__)
33835         "adcs	r4, r7\n\t"
33836 #else
33837         "adc	r4, r7\n\t"
33838 #endif
33839 #ifdef WOLFSSL_KEIL
33840         "adcs	r5, r5, %[r]\n\t"
33841 #elif defined(__clang__)
33842         "adcs	r5, %[r]\n\t"
33843 #else
33844         "adc	r5, %[r]\n\t"
33845 #endif
33846 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33847         "lsrs	r6, %[a], #16\n\t"
33848 #else
33849         "lsr	r6, %[a], #16\n\t"
33850 #endif
33851 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33852         "lsrs	r7, %[b], #16\n\t"
33853 #else
33854         "lsr	r7, %[b], #16\n\t"
33855 #endif
33856 #ifdef WOLFSSL_KEIL
33857         "muls	r7, r6, r7\n\t"
33858 #elif defined(__clang__)
33859         "muls	r7, r6\n\t"
33860 #else
33861         "mul	r7, r6\n\t"
33862 #endif
33863 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33864         "adds	r4, r4, r7\n\t"
33865 #else
33866         "add	r4, r4, r7\n\t"
33867 #endif
33868 #ifdef WOLFSSL_KEIL
33869         "adcs	r5, r5, %[r]\n\t"
33870 #elif defined(__clang__)
33871         "adcs	r5, %[r]\n\t"
33872 #else
33873         "adc	r5, %[r]\n\t"
33874 #endif
33875         "uxth	r7, %[b]\n\t"
33876 #ifdef WOLFSSL_KEIL
33877         "muls	r6, r7, r6\n\t"
33878 #elif defined(__clang__)
33879         "muls	r6, r7\n\t"
33880 #else
33881         "mul	r6, r7\n\t"
33882 #endif
33883 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33884         "lsrs	r7, r6, #16\n\t"
33885 #else
33886         "lsr	r7, r6, #16\n\t"
33887 #endif
33888 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33889         "lsls	r6, r6, #16\n\t"
33890 #else
33891         "lsl	r6, r6, #16\n\t"
33892 #endif
33893 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33894         "adds	r3, r3, r6\n\t"
33895 #else
33896         "add	r3, r3, r6\n\t"
33897 #endif
33898 #ifdef WOLFSSL_KEIL
33899         "adcs	r4, r4, r7\n\t"
33900 #elif defined(__clang__)
33901         "adcs	r4, r7\n\t"
33902 #else
33903         "adc	r4, r7\n\t"
33904 #endif
33905 #ifdef WOLFSSL_KEIL
33906         "adcs	r5, r5, %[r]\n\t"
33907 #elif defined(__clang__)
33908         "adcs	r5, %[r]\n\t"
33909 #else
33910         "adc	r5, %[r]\n\t"
33911 #endif
33912         "#  A[1] * B[5]\n\t"
33913         "mov	%[a], r9\n\t"
33914         "mov	%[b], r10\n\t"
33915         "ldr	%[a], [%[a], #4]\n\t"
33916         "ldr	%[b], [%[b], #20]\n\t"
33917         "uxth	r6, %[a]\n\t"
33918         "uxth	r7, %[b]\n\t"
33919 #ifdef WOLFSSL_KEIL
33920         "muls	r7, r6, r7\n\t"
33921 #elif defined(__clang__)
33922         "muls	r7, r6\n\t"
33923 #else
33924         "mul	r7, r6\n\t"
33925 #endif
33926 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33927         "adds	r3, r3, r7\n\t"
33928 #else
33929         "add	r3, r3, r7\n\t"
33930 #endif
33931 #ifdef WOLFSSL_KEIL
33932         "adcs	r4, r4, %[r]\n\t"
33933 #elif defined(__clang__)
33934         "adcs	r4, %[r]\n\t"
33935 #else
33936         "adc	r4, %[r]\n\t"
33937 #endif
33938 #ifdef WOLFSSL_KEIL
33939         "adcs	r5, r5, %[r]\n\t"
33940 #elif defined(__clang__)
33941         "adcs	r5, %[r]\n\t"
33942 #else
33943         "adc	r5, %[r]\n\t"
33944 #endif
33945 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33946         "lsrs	r7, %[b], #16\n\t"
33947 #else
33948         "lsr	r7, %[b], #16\n\t"
33949 #endif
33950 #ifdef WOLFSSL_KEIL
33951         "muls	r6, r7, r6\n\t"
33952 #elif defined(__clang__)
33953         "muls	r6, r7\n\t"
33954 #else
33955         "mul	r6, r7\n\t"
33956 #endif
33957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33958         "lsrs	r7, r6, #16\n\t"
33959 #else
33960         "lsr	r7, r6, #16\n\t"
33961 #endif
33962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33963         "lsls	r6, r6, #16\n\t"
33964 #else
33965         "lsl	r6, r6, #16\n\t"
33966 #endif
33967 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33968         "adds	r3, r3, r6\n\t"
33969 #else
33970         "add	r3, r3, r6\n\t"
33971 #endif
33972 #ifdef WOLFSSL_KEIL
33973         "adcs	r4, r4, r7\n\t"
33974 #elif defined(__clang__)
33975         "adcs	r4, r7\n\t"
33976 #else
33977         "adc	r4, r7\n\t"
33978 #endif
33979 #ifdef WOLFSSL_KEIL
33980         "adcs	r5, r5, %[r]\n\t"
33981 #elif defined(__clang__)
33982         "adcs	r5, %[r]\n\t"
33983 #else
33984         "adc	r5, %[r]\n\t"
33985 #endif
33986 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33987         "lsrs	r6, %[a], #16\n\t"
33988 #else
33989         "lsr	r6, %[a], #16\n\t"
33990 #endif
33991 #if defined(__clang__) || defined(WOLFSSL_KEIL)
33992         "lsrs	r7, %[b], #16\n\t"
33993 #else
33994         "lsr	r7, %[b], #16\n\t"
33995 #endif
33996 #ifdef WOLFSSL_KEIL
33997         "muls	r7, r6, r7\n\t"
33998 #elif defined(__clang__)
33999         "muls	r7, r6\n\t"
34000 #else
34001         "mul	r7, r6\n\t"
34002 #endif
34003 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34004         "adds	r4, r4, r7\n\t"
34005 #else
34006         "add	r4, r4, r7\n\t"
34007 #endif
34008 #ifdef WOLFSSL_KEIL
34009         "adcs	r5, r5, %[r]\n\t"
34010 #elif defined(__clang__)
34011         "adcs	r5, %[r]\n\t"
34012 #else
34013         "adc	r5, %[r]\n\t"
34014 #endif
34015         "uxth	r7, %[b]\n\t"
34016 #ifdef WOLFSSL_KEIL
34017         "muls	r6, r7, r6\n\t"
34018 #elif defined(__clang__)
34019         "muls	r6, r7\n\t"
34020 #else
34021         "mul	r6, r7\n\t"
34022 #endif
34023 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34024         "lsrs	r7, r6, #16\n\t"
34025 #else
34026         "lsr	r7, r6, #16\n\t"
34027 #endif
34028 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34029         "lsls	r6, r6, #16\n\t"
34030 #else
34031         "lsl	r6, r6, #16\n\t"
34032 #endif
34033 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34034         "adds	r3, r3, r6\n\t"
34035 #else
34036         "add	r3, r3, r6\n\t"
34037 #endif
34038 #ifdef WOLFSSL_KEIL
34039         "adcs	r4, r4, r7\n\t"
34040 #elif defined(__clang__)
34041         "adcs	r4, r7\n\t"
34042 #else
34043         "adc	r4, r7\n\t"
34044 #endif
34045 #ifdef WOLFSSL_KEIL
34046         "adcs	r5, r5, %[r]\n\t"
34047 #elif defined(__clang__)
34048         "adcs	r5, %[r]\n\t"
34049 #else
34050         "adc	r5, %[r]\n\t"
34051 #endif
34052         "#  A[0] * B[6]\n\t"
34053         "mov	%[a], r9\n\t"
34054         "mov	%[b], r10\n\t"
34055         "ldr	%[a], [%[a]]\n\t"
34056         "ldr	%[b], [%[b], #24]\n\t"
34057         "uxth	r6, %[a]\n\t"
34058         "uxth	r7, %[b]\n\t"
34059 #ifdef WOLFSSL_KEIL
34060         "muls	r7, r6, r7\n\t"
34061 #elif defined(__clang__)
34062         "muls	r7, r6\n\t"
34063 #else
34064         "mul	r7, r6\n\t"
34065 #endif
34066 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34067         "adds	r3, r3, r7\n\t"
34068 #else
34069         "add	r3, r3, r7\n\t"
34070 #endif
34071 #ifdef WOLFSSL_KEIL
34072         "adcs	r4, r4, %[r]\n\t"
34073 #elif defined(__clang__)
34074         "adcs	r4, %[r]\n\t"
34075 #else
34076         "adc	r4, %[r]\n\t"
34077 #endif
34078 #ifdef WOLFSSL_KEIL
34079         "adcs	r5, r5, %[r]\n\t"
34080 #elif defined(__clang__)
34081         "adcs	r5, %[r]\n\t"
34082 #else
34083         "adc	r5, %[r]\n\t"
34084 #endif
34085 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34086         "lsrs	r7, %[b], #16\n\t"
34087 #else
34088         "lsr	r7, %[b], #16\n\t"
34089 #endif
34090 #ifdef WOLFSSL_KEIL
34091         "muls	r6, r7, r6\n\t"
34092 #elif defined(__clang__)
34093         "muls	r6, r7\n\t"
34094 #else
34095         "mul	r6, r7\n\t"
34096 #endif
34097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34098         "lsrs	r7, r6, #16\n\t"
34099 #else
34100         "lsr	r7, r6, #16\n\t"
34101 #endif
34102 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34103         "lsls	r6, r6, #16\n\t"
34104 #else
34105         "lsl	r6, r6, #16\n\t"
34106 #endif
34107 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34108         "adds	r3, r3, r6\n\t"
34109 #else
34110         "add	r3, r3, r6\n\t"
34111 #endif
34112 #ifdef WOLFSSL_KEIL
34113         "adcs	r4, r4, r7\n\t"
34114 #elif defined(__clang__)
34115         "adcs	r4, r7\n\t"
34116 #else
34117         "adc	r4, r7\n\t"
34118 #endif
34119 #ifdef WOLFSSL_KEIL
34120         "adcs	r5, r5, %[r]\n\t"
34121 #elif defined(__clang__)
34122         "adcs	r5, %[r]\n\t"
34123 #else
34124         "adc	r5, %[r]\n\t"
34125 #endif
34126 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34127         "lsrs	r6, %[a], #16\n\t"
34128 #else
34129         "lsr	r6, %[a], #16\n\t"
34130 #endif
34131 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34132         "lsrs	r7, %[b], #16\n\t"
34133 #else
34134         "lsr	r7, %[b], #16\n\t"
34135 #endif
34136 #ifdef WOLFSSL_KEIL
34137         "muls	r7, r6, r7\n\t"
34138 #elif defined(__clang__)
34139         "muls	r7, r6\n\t"
34140 #else
34141         "mul	r7, r6\n\t"
34142 #endif
34143 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34144         "adds	r4, r4, r7\n\t"
34145 #else
34146         "add	r4, r4, r7\n\t"
34147 #endif
34148 #ifdef WOLFSSL_KEIL
34149         "adcs	r5, r5, %[r]\n\t"
34150 #elif defined(__clang__)
34151         "adcs	r5, %[r]\n\t"
34152 #else
34153         "adc	r5, %[r]\n\t"
34154 #endif
34155         "uxth	r7, %[b]\n\t"
34156 #ifdef WOLFSSL_KEIL
34157         "muls	r6, r7, r6\n\t"
34158 #elif defined(__clang__)
34159         "muls	r6, r7\n\t"
34160 #else
34161         "mul	r6, r7\n\t"
34162 #endif
34163 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34164         "lsrs	r7, r6, #16\n\t"
34165 #else
34166         "lsr	r7, r6, #16\n\t"
34167 #endif
34168 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34169         "lsls	r6, r6, #16\n\t"
34170 #else
34171         "lsl	r6, r6, #16\n\t"
34172 #endif
34173 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34174         "adds	r3, r3, r6\n\t"
34175 #else
34176         "add	r3, r3, r6\n\t"
34177 #endif
34178 #ifdef WOLFSSL_KEIL
34179         "adcs	r4, r4, r7\n\t"
34180 #elif defined(__clang__)
34181         "adcs	r4, r7\n\t"
34182 #else
34183         "adc	r4, r7\n\t"
34184 #endif
34185 #ifdef WOLFSSL_KEIL
34186         "adcs	r5, r5, %[r]\n\t"
34187 #elif defined(__clang__)
34188         "adcs	r5, %[r]\n\t"
34189 #else
34190         "adc	r5, %[r]\n\t"
34191 #endif
34192         "str	r3, [sp, #24]\n\t"
34193         "#  A[0] * B[7]\n\t"
34194         "movs	r3, #0\n\t"
34195         "mov	%[a], r9\n\t"
34196         "mov	%[b], r10\n\t"
34197         "ldr	%[a], [%[a]]\n\t"
34198         "ldr	%[b], [%[b], #28]\n\t"
34199         "uxth	r6, %[a]\n\t"
34200         "uxth	r7, %[b]\n\t"
34201 #ifdef WOLFSSL_KEIL
34202         "muls	r7, r6, r7\n\t"
34203 #elif defined(__clang__)
34204         "muls	r7, r6\n\t"
34205 #else
34206         "mul	r7, r6\n\t"
34207 #endif
34208 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34209         "adds	r4, r4, r7\n\t"
34210 #else
34211         "add	r4, r4, r7\n\t"
34212 #endif
34213 #ifdef WOLFSSL_KEIL
34214         "adcs	r5, r5, %[r]\n\t"
34215 #elif defined(__clang__)
34216         "adcs	r5, %[r]\n\t"
34217 #else
34218         "adc	r5, %[r]\n\t"
34219 #endif
34220 #ifdef WOLFSSL_KEIL
34221         "adcs	r3, r3, %[r]\n\t"
34222 #elif defined(__clang__)
34223         "adcs	r3, %[r]\n\t"
34224 #else
34225         "adc	r3, %[r]\n\t"
34226 #endif
34227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34228         "lsrs	r7, %[b], #16\n\t"
34229 #else
34230         "lsr	r7, %[b], #16\n\t"
34231 #endif
34232 #ifdef WOLFSSL_KEIL
34233         "muls	r6, r7, r6\n\t"
34234 #elif defined(__clang__)
34235         "muls	r6, r7\n\t"
34236 #else
34237         "mul	r6, r7\n\t"
34238 #endif
34239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34240         "lsrs	r7, r6, #16\n\t"
34241 #else
34242         "lsr	r7, r6, #16\n\t"
34243 #endif
34244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34245         "lsls	r6, r6, #16\n\t"
34246 #else
34247         "lsl	r6, r6, #16\n\t"
34248 #endif
34249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34250         "adds	r4, r4, r6\n\t"
34251 #else
34252         "add	r4, r4, r6\n\t"
34253 #endif
34254 #ifdef WOLFSSL_KEIL
34255         "adcs	r5, r5, r7\n\t"
34256 #elif defined(__clang__)
34257         "adcs	r5, r7\n\t"
34258 #else
34259         "adc	r5, r7\n\t"
34260 #endif
34261 #ifdef WOLFSSL_KEIL
34262         "adcs	r3, r3, %[r]\n\t"
34263 #elif defined(__clang__)
34264         "adcs	r3, %[r]\n\t"
34265 #else
34266         "adc	r3, %[r]\n\t"
34267 #endif
34268 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34269         "lsrs	r6, %[a], #16\n\t"
34270 #else
34271         "lsr	r6, %[a], #16\n\t"
34272 #endif
34273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34274         "lsrs	r7, %[b], #16\n\t"
34275 #else
34276         "lsr	r7, %[b], #16\n\t"
34277 #endif
34278 #ifdef WOLFSSL_KEIL
34279         "muls	r7, r6, r7\n\t"
34280 #elif defined(__clang__)
34281         "muls	r7, r6\n\t"
34282 #else
34283         "mul	r7, r6\n\t"
34284 #endif
34285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34286         "adds	r5, r5, r7\n\t"
34287 #else
34288         "add	r5, r5, r7\n\t"
34289 #endif
34290 #ifdef WOLFSSL_KEIL
34291         "adcs	r3, r3, %[r]\n\t"
34292 #elif defined(__clang__)
34293         "adcs	r3, %[r]\n\t"
34294 #else
34295         "adc	r3, %[r]\n\t"
34296 #endif
34297         "uxth	r7, %[b]\n\t"
34298 #ifdef WOLFSSL_KEIL
34299         "muls	r6, r7, r6\n\t"
34300 #elif defined(__clang__)
34301         "muls	r6, r7\n\t"
34302 #else
34303         "mul	r6, r7\n\t"
34304 #endif
34305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34306         "lsrs	r7, r6, #16\n\t"
34307 #else
34308         "lsr	r7, r6, #16\n\t"
34309 #endif
34310 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34311         "lsls	r6, r6, #16\n\t"
34312 #else
34313         "lsl	r6, r6, #16\n\t"
34314 #endif
34315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34316         "adds	r4, r4, r6\n\t"
34317 #else
34318         "add	r4, r4, r6\n\t"
34319 #endif
34320 #ifdef WOLFSSL_KEIL
34321         "adcs	r5, r5, r7\n\t"
34322 #elif defined(__clang__)
34323         "adcs	r5, r7\n\t"
34324 #else
34325         "adc	r5, r7\n\t"
34326 #endif
34327 #ifdef WOLFSSL_KEIL
34328         "adcs	r3, r3, %[r]\n\t"
34329 #elif defined(__clang__)
34330         "adcs	r3, %[r]\n\t"
34331 #else
34332         "adc	r3, %[r]\n\t"
34333 #endif
34334         "#  A[1] * B[6]\n\t"
34335         "mov	%[a], r9\n\t"
34336         "mov	%[b], r10\n\t"
34337         "ldr	%[a], [%[a], #4]\n\t"
34338         "ldr	%[b], [%[b], #24]\n\t"
34339         "uxth	r6, %[a]\n\t"
34340         "uxth	r7, %[b]\n\t"
34341 #ifdef WOLFSSL_KEIL
34342         "muls	r7, r6, r7\n\t"
34343 #elif defined(__clang__)
34344         "muls	r7, r6\n\t"
34345 #else
34346         "mul	r7, r6\n\t"
34347 #endif
34348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34349         "adds	r4, r4, r7\n\t"
34350 #else
34351         "add	r4, r4, r7\n\t"
34352 #endif
34353 #ifdef WOLFSSL_KEIL
34354         "adcs	r5, r5, %[r]\n\t"
34355 #elif defined(__clang__)
34356         "adcs	r5, %[r]\n\t"
34357 #else
34358         "adc	r5, %[r]\n\t"
34359 #endif
34360 #ifdef WOLFSSL_KEIL
34361         "adcs	r3, r3, %[r]\n\t"
34362 #elif defined(__clang__)
34363         "adcs	r3, %[r]\n\t"
34364 #else
34365         "adc	r3, %[r]\n\t"
34366 #endif
34367 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34368         "lsrs	r7, %[b], #16\n\t"
34369 #else
34370         "lsr	r7, %[b], #16\n\t"
34371 #endif
34372 #ifdef WOLFSSL_KEIL
34373         "muls	r6, r7, r6\n\t"
34374 #elif defined(__clang__)
34375         "muls	r6, r7\n\t"
34376 #else
34377         "mul	r6, r7\n\t"
34378 #endif
34379 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34380         "lsrs	r7, r6, #16\n\t"
34381 #else
34382         "lsr	r7, r6, #16\n\t"
34383 #endif
34384 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34385         "lsls	r6, r6, #16\n\t"
34386 #else
34387         "lsl	r6, r6, #16\n\t"
34388 #endif
34389 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34390         "adds	r4, r4, r6\n\t"
34391 #else
34392         "add	r4, r4, r6\n\t"
34393 #endif
34394 #ifdef WOLFSSL_KEIL
34395         "adcs	r5, r5, r7\n\t"
34396 #elif defined(__clang__)
34397         "adcs	r5, r7\n\t"
34398 #else
34399         "adc	r5, r7\n\t"
34400 #endif
34401 #ifdef WOLFSSL_KEIL
34402         "adcs	r3, r3, %[r]\n\t"
34403 #elif defined(__clang__)
34404         "adcs	r3, %[r]\n\t"
34405 #else
34406         "adc	r3, %[r]\n\t"
34407 #endif
34408 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34409         "lsrs	r6, %[a], #16\n\t"
34410 #else
34411         "lsr	r6, %[a], #16\n\t"
34412 #endif
34413 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34414         "lsrs	r7, %[b], #16\n\t"
34415 #else
34416         "lsr	r7, %[b], #16\n\t"
34417 #endif
34418 #ifdef WOLFSSL_KEIL
34419         "muls	r7, r6, r7\n\t"
34420 #elif defined(__clang__)
34421         "muls	r7, r6\n\t"
34422 #else
34423         "mul	r7, r6\n\t"
34424 #endif
34425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34426         "adds	r5, r5, r7\n\t"
34427 #else
34428         "add	r5, r5, r7\n\t"
34429 #endif
34430 #ifdef WOLFSSL_KEIL
34431         "adcs	r3, r3, %[r]\n\t"
34432 #elif defined(__clang__)
34433         "adcs	r3, %[r]\n\t"
34434 #else
34435         "adc	r3, %[r]\n\t"
34436 #endif
34437         "uxth	r7, %[b]\n\t"
34438 #ifdef WOLFSSL_KEIL
34439         "muls	r6, r7, r6\n\t"
34440 #elif defined(__clang__)
34441         "muls	r6, r7\n\t"
34442 #else
34443         "mul	r6, r7\n\t"
34444 #endif
34445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34446         "lsrs	r7, r6, #16\n\t"
34447 #else
34448         "lsr	r7, r6, #16\n\t"
34449 #endif
34450 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34451         "lsls	r6, r6, #16\n\t"
34452 #else
34453         "lsl	r6, r6, #16\n\t"
34454 #endif
34455 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34456         "adds	r4, r4, r6\n\t"
34457 #else
34458         "add	r4, r4, r6\n\t"
34459 #endif
34460 #ifdef WOLFSSL_KEIL
34461         "adcs	r5, r5, r7\n\t"
34462 #elif defined(__clang__)
34463         "adcs	r5, r7\n\t"
34464 #else
34465         "adc	r5, r7\n\t"
34466 #endif
34467 #ifdef WOLFSSL_KEIL
34468         "adcs	r3, r3, %[r]\n\t"
34469 #elif defined(__clang__)
34470         "adcs	r3, %[r]\n\t"
34471 #else
34472         "adc	r3, %[r]\n\t"
34473 #endif
34474         "#  A[2] * B[5]\n\t"
34475         "mov	%[a], r9\n\t"
34476         "mov	%[b], r10\n\t"
34477         "ldr	%[a], [%[a], #8]\n\t"
34478         "ldr	%[b], [%[b], #20]\n\t"
34479         "uxth	r6, %[a]\n\t"
34480         "uxth	r7, %[b]\n\t"
34481 #ifdef WOLFSSL_KEIL
34482         "muls	r7, r6, r7\n\t"
34483 #elif defined(__clang__)
34484         "muls	r7, r6\n\t"
34485 #else
34486         "mul	r7, r6\n\t"
34487 #endif
34488 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34489         "adds	r4, r4, r7\n\t"
34490 #else
34491         "add	r4, r4, r7\n\t"
34492 #endif
34493 #ifdef WOLFSSL_KEIL
34494         "adcs	r5, r5, %[r]\n\t"
34495 #elif defined(__clang__)
34496         "adcs	r5, %[r]\n\t"
34497 #else
34498         "adc	r5, %[r]\n\t"
34499 #endif
34500 #ifdef WOLFSSL_KEIL
34501         "adcs	r3, r3, %[r]\n\t"
34502 #elif defined(__clang__)
34503         "adcs	r3, %[r]\n\t"
34504 #else
34505         "adc	r3, %[r]\n\t"
34506 #endif
34507 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34508         "lsrs	r7, %[b], #16\n\t"
34509 #else
34510         "lsr	r7, %[b], #16\n\t"
34511 #endif
34512 #ifdef WOLFSSL_KEIL
34513         "muls	r6, r7, r6\n\t"
34514 #elif defined(__clang__)
34515         "muls	r6, r7\n\t"
34516 #else
34517         "mul	r6, r7\n\t"
34518 #endif
34519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34520         "lsrs	r7, r6, #16\n\t"
34521 #else
34522         "lsr	r7, r6, #16\n\t"
34523 #endif
34524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34525         "lsls	r6, r6, #16\n\t"
34526 #else
34527         "lsl	r6, r6, #16\n\t"
34528 #endif
34529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34530         "adds	r4, r4, r6\n\t"
34531 #else
34532         "add	r4, r4, r6\n\t"
34533 #endif
34534 #ifdef WOLFSSL_KEIL
34535         "adcs	r5, r5, r7\n\t"
34536 #elif defined(__clang__)
34537         "adcs	r5, r7\n\t"
34538 #else
34539         "adc	r5, r7\n\t"
34540 #endif
34541 #ifdef WOLFSSL_KEIL
34542         "adcs	r3, r3, %[r]\n\t"
34543 #elif defined(__clang__)
34544         "adcs	r3, %[r]\n\t"
34545 #else
34546         "adc	r3, %[r]\n\t"
34547 #endif
34548 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34549         "lsrs	r6, %[a], #16\n\t"
34550 #else
34551         "lsr	r6, %[a], #16\n\t"
34552 #endif
34553 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34554         "lsrs	r7, %[b], #16\n\t"
34555 #else
34556         "lsr	r7, %[b], #16\n\t"
34557 #endif
34558 #ifdef WOLFSSL_KEIL
34559         "muls	r7, r6, r7\n\t"
34560 #elif defined(__clang__)
34561         "muls	r7, r6\n\t"
34562 #else
34563         "mul	r7, r6\n\t"
34564 #endif
34565 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34566         "adds	r5, r5, r7\n\t"
34567 #else
34568         "add	r5, r5, r7\n\t"
34569 #endif
34570 #ifdef WOLFSSL_KEIL
34571         "adcs	r3, r3, %[r]\n\t"
34572 #elif defined(__clang__)
34573         "adcs	r3, %[r]\n\t"
34574 #else
34575         "adc	r3, %[r]\n\t"
34576 #endif
34577         "uxth	r7, %[b]\n\t"
34578 #ifdef WOLFSSL_KEIL
34579         "muls	r6, r7, r6\n\t"
34580 #elif defined(__clang__)
34581         "muls	r6, r7\n\t"
34582 #else
34583         "mul	r6, r7\n\t"
34584 #endif
34585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34586         "lsrs	r7, r6, #16\n\t"
34587 #else
34588         "lsr	r7, r6, #16\n\t"
34589 #endif
34590 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34591         "lsls	r6, r6, #16\n\t"
34592 #else
34593         "lsl	r6, r6, #16\n\t"
34594 #endif
34595 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34596         "adds	r4, r4, r6\n\t"
34597 #else
34598         "add	r4, r4, r6\n\t"
34599 #endif
34600 #ifdef WOLFSSL_KEIL
34601         "adcs	r5, r5, r7\n\t"
34602 #elif defined(__clang__)
34603         "adcs	r5, r7\n\t"
34604 #else
34605         "adc	r5, r7\n\t"
34606 #endif
34607 #ifdef WOLFSSL_KEIL
34608         "adcs	r3, r3, %[r]\n\t"
34609 #elif defined(__clang__)
34610         "adcs	r3, %[r]\n\t"
34611 #else
34612         "adc	r3, %[r]\n\t"
34613 #endif
34614         "#  A[3] * B[4]\n\t"
34615         "mov	%[a], r9\n\t"
34616         "mov	%[b], r10\n\t"
34617         "ldr	%[a], [%[a], #12]\n\t"
34618         "ldr	%[b], [%[b], #16]\n\t"
34619         "uxth	r6, %[a]\n\t"
34620         "uxth	r7, %[b]\n\t"
34621 #ifdef WOLFSSL_KEIL
34622         "muls	r7, r6, r7\n\t"
34623 #elif defined(__clang__)
34624         "muls	r7, r6\n\t"
34625 #else
34626         "mul	r7, r6\n\t"
34627 #endif
34628 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34629         "adds	r4, r4, r7\n\t"
34630 #else
34631         "add	r4, r4, r7\n\t"
34632 #endif
34633 #ifdef WOLFSSL_KEIL
34634         "adcs	r5, r5, %[r]\n\t"
34635 #elif defined(__clang__)
34636         "adcs	r5, %[r]\n\t"
34637 #else
34638         "adc	r5, %[r]\n\t"
34639 #endif
34640 #ifdef WOLFSSL_KEIL
34641         "adcs	r3, r3, %[r]\n\t"
34642 #elif defined(__clang__)
34643         "adcs	r3, %[r]\n\t"
34644 #else
34645         "adc	r3, %[r]\n\t"
34646 #endif
34647 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34648         "lsrs	r7, %[b], #16\n\t"
34649 #else
34650         "lsr	r7, %[b], #16\n\t"
34651 #endif
34652 #ifdef WOLFSSL_KEIL
34653         "muls	r6, r7, r6\n\t"
34654 #elif defined(__clang__)
34655         "muls	r6, r7\n\t"
34656 #else
34657         "mul	r6, r7\n\t"
34658 #endif
34659 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34660         "lsrs	r7, r6, #16\n\t"
34661 #else
34662         "lsr	r7, r6, #16\n\t"
34663 #endif
34664 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34665         "lsls	r6, r6, #16\n\t"
34666 #else
34667         "lsl	r6, r6, #16\n\t"
34668 #endif
34669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34670         "adds	r4, r4, r6\n\t"
34671 #else
34672         "add	r4, r4, r6\n\t"
34673 #endif
34674 #ifdef WOLFSSL_KEIL
34675         "adcs	r5, r5, r7\n\t"
34676 #elif defined(__clang__)
34677         "adcs	r5, r7\n\t"
34678 #else
34679         "adc	r5, r7\n\t"
34680 #endif
34681 #ifdef WOLFSSL_KEIL
34682         "adcs	r3, r3, %[r]\n\t"
34683 #elif defined(__clang__)
34684         "adcs	r3, %[r]\n\t"
34685 #else
34686         "adc	r3, %[r]\n\t"
34687 #endif
34688 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34689         "lsrs	r6, %[a], #16\n\t"
34690 #else
34691         "lsr	r6, %[a], #16\n\t"
34692 #endif
34693 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34694         "lsrs	r7, %[b], #16\n\t"
34695 #else
34696         "lsr	r7, %[b], #16\n\t"
34697 #endif
34698 #ifdef WOLFSSL_KEIL
34699         "muls	r7, r6, r7\n\t"
34700 #elif defined(__clang__)
34701         "muls	r7, r6\n\t"
34702 #else
34703         "mul	r7, r6\n\t"
34704 #endif
34705 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34706         "adds	r5, r5, r7\n\t"
34707 #else
34708         "add	r5, r5, r7\n\t"
34709 #endif
34710 #ifdef WOLFSSL_KEIL
34711         "adcs	r3, r3, %[r]\n\t"
34712 #elif defined(__clang__)
34713         "adcs	r3, %[r]\n\t"
34714 #else
34715         "adc	r3, %[r]\n\t"
34716 #endif
34717         "uxth	r7, %[b]\n\t"
34718 #ifdef WOLFSSL_KEIL
34719         "muls	r6, r7, r6\n\t"
34720 #elif defined(__clang__)
34721         "muls	r6, r7\n\t"
34722 #else
34723         "mul	r6, r7\n\t"
34724 #endif
34725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34726         "lsrs	r7, r6, #16\n\t"
34727 #else
34728         "lsr	r7, r6, #16\n\t"
34729 #endif
34730 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34731         "lsls	r6, r6, #16\n\t"
34732 #else
34733         "lsl	r6, r6, #16\n\t"
34734 #endif
34735 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34736         "adds	r4, r4, r6\n\t"
34737 #else
34738         "add	r4, r4, r6\n\t"
34739 #endif
34740 #ifdef WOLFSSL_KEIL
34741         "adcs	r5, r5, r7\n\t"
34742 #elif defined(__clang__)
34743         "adcs	r5, r7\n\t"
34744 #else
34745         "adc	r5, r7\n\t"
34746 #endif
34747 #ifdef WOLFSSL_KEIL
34748         "adcs	r3, r3, %[r]\n\t"
34749 #elif defined(__clang__)
34750         "adcs	r3, %[r]\n\t"
34751 #else
34752         "adc	r3, %[r]\n\t"
34753 #endif
34754         "#  A[4] * B[3]\n\t"
34755         "mov	%[a], r9\n\t"
34756         "mov	%[b], r10\n\t"
34757         "ldr	%[a], [%[a], #16]\n\t"
34758         "ldr	%[b], [%[b], #12]\n\t"
34759         "uxth	r6, %[a]\n\t"
34760         "uxth	r7, %[b]\n\t"
34761 #ifdef WOLFSSL_KEIL
34762         "muls	r7, r6, r7\n\t"
34763 #elif defined(__clang__)
34764         "muls	r7, r6\n\t"
34765 #else
34766         "mul	r7, r6\n\t"
34767 #endif
34768 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34769         "adds	r4, r4, r7\n\t"
34770 #else
34771         "add	r4, r4, r7\n\t"
34772 #endif
34773 #ifdef WOLFSSL_KEIL
34774         "adcs	r5, r5, %[r]\n\t"
34775 #elif defined(__clang__)
34776         "adcs	r5, %[r]\n\t"
34777 #else
34778         "adc	r5, %[r]\n\t"
34779 #endif
34780 #ifdef WOLFSSL_KEIL
34781         "adcs	r3, r3, %[r]\n\t"
34782 #elif defined(__clang__)
34783         "adcs	r3, %[r]\n\t"
34784 #else
34785         "adc	r3, %[r]\n\t"
34786 #endif
34787 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34788         "lsrs	r7, %[b], #16\n\t"
34789 #else
34790         "lsr	r7, %[b], #16\n\t"
34791 #endif
34792 #ifdef WOLFSSL_KEIL
34793         "muls	r6, r7, r6\n\t"
34794 #elif defined(__clang__)
34795         "muls	r6, r7\n\t"
34796 #else
34797         "mul	r6, r7\n\t"
34798 #endif
34799 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34800         "lsrs	r7, r6, #16\n\t"
34801 #else
34802         "lsr	r7, r6, #16\n\t"
34803 #endif
34804 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34805         "lsls	r6, r6, #16\n\t"
34806 #else
34807         "lsl	r6, r6, #16\n\t"
34808 #endif
34809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34810         "adds	r4, r4, r6\n\t"
34811 #else
34812         "add	r4, r4, r6\n\t"
34813 #endif
34814 #ifdef WOLFSSL_KEIL
34815         "adcs	r5, r5, r7\n\t"
34816 #elif defined(__clang__)
34817         "adcs	r5, r7\n\t"
34818 #else
34819         "adc	r5, r7\n\t"
34820 #endif
34821 #ifdef WOLFSSL_KEIL
34822         "adcs	r3, r3, %[r]\n\t"
34823 #elif defined(__clang__)
34824         "adcs	r3, %[r]\n\t"
34825 #else
34826         "adc	r3, %[r]\n\t"
34827 #endif
34828 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34829         "lsrs	r6, %[a], #16\n\t"
34830 #else
34831         "lsr	r6, %[a], #16\n\t"
34832 #endif
34833 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34834         "lsrs	r7, %[b], #16\n\t"
34835 #else
34836         "lsr	r7, %[b], #16\n\t"
34837 #endif
34838 #ifdef WOLFSSL_KEIL
34839         "muls	r7, r6, r7\n\t"
34840 #elif defined(__clang__)
34841         "muls	r7, r6\n\t"
34842 #else
34843         "mul	r7, r6\n\t"
34844 #endif
34845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34846         "adds	r5, r5, r7\n\t"
34847 #else
34848         "add	r5, r5, r7\n\t"
34849 #endif
34850 #ifdef WOLFSSL_KEIL
34851         "adcs	r3, r3, %[r]\n\t"
34852 #elif defined(__clang__)
34853         "adcs	r3, %[r]\n\t"
34854 #else
34855         "adc	r3, %[r]\n\t"
34856 #endif
34857         "uxth	r7, %[b]\n\t"
34858 #ifdef WOLFSSL_KEIL
34859         "muls	r6, r7, r6\n\t"
34860 #elif defined(__clang__)
34861         "muls	r6, r7\n\t"
34862 #else
34863         "mul	r6, r7\n\t"
34864 #endif
34865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34866         "lsrs	r7, r6, #16\n\t"
34867 #else
34868         "lsr	r7, r6, #16\n\t"
34869 #endif
34870 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34871         "lsls	r6, r6, #16\n\t"
34872 #else
34873         "lsl	r6, r6, #16\n\t"
34874 #endif
34875 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34876         "adds	r4, r4, r6\n\t"
34877 #else
34878         "add	r4, r4, r6\n\t"
34879 #endif
34880 #ifdef WOLFSSL_KEIL
34881         "adcs	r5, r5, r7\n\t"
34882 #elif defined(__clang__)
34883         "adcs	r5, r7\n\t"
34884 #else
34885         "adc	r5, r7\n\t"
34886 #endif
34887 #ifdef WOLFSSL_KEIL
34888         "adcs	r3, r3, %[r]\n\t"
34889 #elif defined(__clang__)
34890         "adcs	r3, %[r]\n\t"
34891 #else
34892         "adc	r3, %[r]\n\t"
34893 #endif
34894         "#  A[5] * B[2]\n\t"
34895         "mov	%[a], r9\n\t"
34896         "mov	%[b], r10\n\t"
34897         "ldr	%[a], [%[a], #20]\n\t"
34898         "ldr	%[b], [%[b], #8]\n\t"
34899         "uxth	r6, %[a]\n\t"
34900         "uxth	r7, %[b]\n\t"
34901 #ifdef WOLFSSL_KEIL
34902         "muls	r7, r6, r7\n\t"
34903 #elif defined(__clang__)
34904         "muls	r7, r6\n\t"
34905 #else
34906         "mul	r7, r6\n\t"
34907 #endif
34908 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34909         "adds	r4, r4, r7\n\t"
34910 #else
34911         "add	r4, r4, r7\n\t"
34912 #endif
34913 #ifdef WOLFSSL_KEIL
34914         "adcs	r5, r5, %[r]\n\t"
34915 #elif defined(__clang__)
34916         "adcs	r5, %[r]\n\t"
34917 #else
34918         "adc	r5, %[r]\n\t"
34919 #endif
34920 #ifdef WOLFSSL_KEIL
34921         "adcs	r3, r3, %[r]\n\t"
34922 #elif defined(__clang__)
34923         "adcs	r3, %[r]\n\t"
34924 #else
34925         "adc	r3, %[r]\n\t"
34926 #endif
34927 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34928         "lsrs	r7, %[b], #16\n\t"
34929 #else
34930         "lsr	r7, %[b], #16\n\t"
34931 #endif
34932 #ifdef WOLFSSL_KEIL
34933         "muls	r6, r7, r6\n\t"
34934 #elif defined(__clang__)
34935         "muls	r6, r7\n\t"
34936 #else
34937         "mul	r6, r7\n\t"
34938 #endif
34939 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34940         "lsrs	r7, r6, #16\n\t"
34941 #else
34942         "lsr	r7, r6, #16\n\t"
34943 #endif
34944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34945         "lsls	r6, r6, #16\n\t"
34946 #else
34947         "lsl	r6, r6, #16\n\t"
34948 #endif
34949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34950         "adds	r4, r4, r6\n\t"
34951 #else
34952         "add	r4, r4, r6\n\t"
34953 #endif
34954 #ifdef WOLFSSL_KEIL
34955         "adcs	r5, r5, r7\n\t"
34956 #elif defined(__clang__)
34957         "adcs	r5, r7\n\t"
34958 #else
34959         "adc	r5, r7\n\t"
34960 #endif
34961 #ifdef WOLFSSL_KEIL
34962         "adcs	r3, r3, %[r]\n\t"
34963 #elif defined(__clang__)
34964         "adcs	r3, %[r]\n\t"
34965 #else
34966         "adc	r3, %[r]\n\t"
34967 #endif
34968 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34969         "lsrs	r6, %[a], #16\n\t"
34970 #else
34971         "lsr	r6, %[a], #16\n\t"
34972 #endif
34973 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34974         "lsrs	r7, %[b], #16\n\t"
34975 #else
34976         "lsr	r7, %[b], #16\n\t"
34977 #endif
34978 #ifdef WOLFSSL_KEIL
34979         "muls	r7, r6, r7\n\t"
34980 #elif defined(__clang__)
34981         "muls	r7, r6\n\t"
34982 #else
34983         "mul	r7, r6\n\t"
34984 #endif
34985 #if defined(__clang__) || defined(WOLFSSL_KEIL)
34986         "adds	r5, r5, r7\n\t"
34987 #else
34988         "add	r5, r5, r7\n\t"
34989 #endif
34990 #ifdef WOLFSSL_KEIL
34991         "adcs	r3, r3, %[r]\n\t"
34992 #elif defined(__clang__)
34993         "adcs	r3, %[r]\n\t"
34994 #else
34995         "adc	r3, %[r]\n\t"
34996 #endif
34997         "uxth	r7, %[b]\n\t"
34998 #ifdef WOLFSSL_KEIL
34999         "muls	r6, r7, r6\n\t"
35000 #elif defined(__clang__)
35001         "muls	r6, r7\n\t"
35002 #else
35003         "mul	r6, r7\n\t"
35004 #endif
35005 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35006         "lsrs	r7, r6, #16\n\t"
35007 #else
35008         "lsr	r7, r6, #16\n\t"
35009 #endif
35010 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35011         "lsls	r6, r6, #16\n\t"
35012 #else
35013         "lsl	r6, r6, #16\n\t"
35014 #endif
35015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35016         "adds	r4, r4, r6\n\t"
35017 #else
35018         "add	r4, r4, r6\n\t"
35019 #endif
35020 #ifdef WOLFSSL_KEIL
35021         "adcs	r5, r5, r7\n\t"
35022 #elif defined(__clang__)
35023         "adcs	r5, r7\n\t"
35024 #else
35025         "adc	r5, r7\n\t"
35026 #endif
35027 #ifdef WOLFSSL_KEIL
35028         "adcs	r3, r3, %[r]\n\t"
35029 #elif defined(__clang__)
35030         "adcs	r3, %[r]\n\t"
35031 #else
35032         "adc	r3, %[r]\n\t"
35033 #endif
35034         "#  A[6] * B[1]\n\t"
35035         "mov	%[a], r9\n\t"
35036         "mov	%[b], r10\n\t"
35037         "ldr	%[a], [%[a], #24]\n\t"
35038         "ldr	%[b], [%[b], #4]\n\t"
35039         "uxth	r6, %[a]\n\t"
35040         "uxth	r7, %[b]\n\t"
35041 #ifdef WOLFSSL_KEIL
35042         "muls	r7, r6, r7\n\t"
35043 #elif defined(__clang__)
35044         "muls	r7, r6\n\t"
35045 #else
35046         "mul	r7, r6\n\t"
35047 #endif
35048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35049         "adds	r4, r4, r7\n\t"
35050 #else
35051         "add	r4, r4, r7\n\t"
35052 #endif
35053 #ifdef WOLFSSL_KEIL
35054         "adcs	r5, r5, %[r]\n\t"
35055 #elif defined(__clang__)
35056         "adcs	r5, %[r]\n\t"
35057 #else
35058         "adc	r5, %[r]\n\t"
35059 #endif
35060 #ifdef WOLFSSL_KEIL
35061         "adcs	r3, r3, %[r]\n\t"
35062 #elif defined(__clang__)
35063         "adcs	r3, %[r]\n\t"
35064 #else
35065         "adc	r3, %[r]\n\t"
35066 #endif
35067 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35068         "lsrs	r7, %[b], #16\n\t"
35069 #else
35070         "lsr	r7, %[b], #16\n\t"
35071 #endif
35072 #ifdef WOLFSSL_KEIL
35073         "muls	r6, r7, r6\n\t"
35074 #elif defined(__clang__)
35075         "muls	r6, r7\n\t"
35076 #else
35077         "mul	r6, r7\n\t"
35078 #endif
35079 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35080         "lsrs	r7, r6, #16\n\t"
35081 #else
35082         "lsr	r7, r6, #16\n\t"
35083 #endif
35084 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35085         "lsls	r6, r6, #16\n\t"
35086 #else
35087         "lsl	r6, r6, #16\n\t"
35088 #endif
35089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35090         "adds	r4, r4, r6\n\t"
35091 #else
35092         "add	r4, r4, r6\n\t"
35093 #endif
35094 #ifdef WOLFSSL_KEIL
35095         "adcs	r5, r5, r7\n\t"
35096 #elif defined(__clang__)
35097         "adcs	r5, r7\n\t"
35098 #else
35099         "adc	r5, r7\n\t"
35100 #endif
35101 #ifdef WOLFSSL_KEIL
35102         "adcs	r3, r3, %[r]\n\t"
35103 #elif defined(__clang__)
35104         "adcs	r3, %[r]\n\t"
35105 #else
35106         "adc	r3, %[r]\n\t"
35107 #endif
35108 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35109         "lsrs	r6, %[a], #16\n\t"
35110 #else
35111         "lsr	r6, %[a], #16\n\t"
35112 #endif
35113 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35114         "lsrs	r7, %[b], #16\n\t"
35115 #else
35116         "lsr	r7, %[b], #16\n\t"
35117 #endif
35118 #ifdef WOLFSSL_KEIL
35119         "muls	r7, r6, r7\n\t"
35120 #elif defined(__clang__)
35121         "muls	r7, r6\n\t"
35122 #else
35123         "mul	r7, r6\n\t"
35124 #endif
35125 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35126         "adds	r5, r5, r7\n\t"
35127 #else
35128         "add	r5, r5, r7\n\t"
35129 #endif
35130 #ifdef WOLFSSL_KEIL
35131         "adcs	r3, r3, %[r]\n\t"
35132 #elif defined(__clang__)
35133         "adcs	r3, %[r]\n\t"
35134 #else
35135         "adc	r3, %[r]\n\t"
35136 #endif
35137         "uxth	r7, %[b]\n\t"
35138 #ifdef WOLFSSL_KEIL
35139         "muls	r6, r7, r6\n\t"
35140 #elif defined(__clang__)
35141         "muls	r6, r7\n\t"
35142 #else
35143         "mul	r6, r7\n\t"
35144 #endif
35145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35146         "lsrs	r7, r6, #16\n\t"
35147 #else
35148         "lsr	r7, r6, #16\n\t"
35149 #endif
35150 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35151         "lsls	r6, r6, #16\n\t"
35152 #else
35153         "lsl	r6, r6, #16\n\t"
35154 #endif
35155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35156         "adds	r4, r4, r6\n\t"
35157 #else
35158         "add	r4, r4, r6\n\t"
35159 #endif
35160 #ifdef WOLFSSL_KEIL
35161         "adcs	r5, r5, r7\n\t"
35162 #elif defined(__clang__)
35163         "adcs	r5, r7\n\t"
35164 #else
35165         "adc	r5, r7\n\t"
35166 #endif
35167 #ifdef WOLFSSL_KEIL
35168         "adcs	r3, r3, %[r]\n\t"
35169 #elif defined(__clang__)
35170         "adcs	r3, %[r]\n\t"
35171 #else
35172         "adc	r3, %[r]\n\t"
35173 #endif
35174         "#  A[7] * B[0]\n\t"
35175         "mov	%[a], r9\n\t"
35176         "mov	%[b], r10\n\t"
35177         "ldr	%[a], [%[a], #28]\n\t"
35178         "ldr	%[b], [%[b]]\n\t"
35179         "uxth	r6, %[a]\n\t"
35180         "uxth	r7, %[b]\n\t"
35181 #ifdef WOLFSSL_KEIL
35182         "muls	r7, r6, r7\n\t"
35183 #elif defined(__clang__)
35184         "muls	r7, r6\n\t"
35185 #else
35186         "mul	r7, r6\n\t"
35187 #endif
35188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35189         "adds	r4, r4, r7\n\t"
35190 #else
35191         "add	r4, r4, r7\n\t"
35192 #endif
35193 #ifdef WOLFSSL_KEIL
35194         "adcs	r5, r5, %[r]\n\t"
35195 #elif defined(__clang__)
35196         "adcs	r5, %[r]\n\t"
35197 #else
35198         "adc	r5, %[r]\n\t"
35199 #endif
35200 #ifdef WOLFSSL_KEIL
35201         "adcs	r3, r3, %[r]\n\t"
35202 #elif defined(__clang__)
35203         "adcs	r3, %[r]\n\t"
35204 #else
35205         "adc	r3, %[r]\n\t"
35206 #endif
35207 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35208         "lsrs	r7, %[b], #16\n\t"
35209 #else
35210         "lsr	r7, %[b], #16\n\t"
35211 #endif
35212 #ifdef WOLFSSL_KEIL
35213         "muls	r6, r7, r6\n\t"
35214 #elif defined(__clang__)
35215         "muls	r6, r7\n\t"
35216 #else
35217         "mul	r6, r7\n\t"
35218 #endif
35219 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35220         "lsrs	r7, r6, #16\n\t"
35221 #else
35222         "lsr	r7, r6, #16\n\t"
35223 #endif
35224 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35225         "lsls	r6, r6, #16\n\t"
35226 #else
35227         "lsl	r6, r6, #16\n\t"
35228 #endif
35229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35230         "adds	r4, r4, r6\n\t"
35231 #else
35232         "add	r4, r4, r6\n\t"
35233 #endif
35234 #ifdef WOLFSSL_KEIL
35235         "adcs	r5, r5, r7\n\t"
35236 #elif defined(__clang__)
35237         "adcs	r5, r7\n\t"
35238 #else
35239         "adc	r5, r7\n\t"
35240 #endif
35241 #ifdef WOLFSSL_KEIL
35242         "adcs	r3, r3, %[r]\n\t"
35243 #elif defined(__clang__)
35244         "adcs	r3, %[r]\n\t"
35245 #else
35246         "adc	r3, %[r]\n\t"
35247 #endif
35248 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35249         "lsrs	r6, %[a], #16\n\t"
35250 #else
35251         "lsr	r6, %[a], #16\n\t"
35252 #endif
35253 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35254         "lsrs	r7, %[b], #16\n\t"
35255 #else
35256         "lsr	r7, %[b], #16\n\t"
35257 #endif
35258 #ifdef WOLFSSL_KEIL
35259         "muls	r7, r6, r7\n\t"
35260 #elif defined(__clang__)
35261         "muls	r7, r6\n\t"
35262 #else
35263         "mul	r7, r6\n\t"
35264 #endif
35265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35266         "adds	r5, r5, r7\n\t"
35267 #else
35268         "add	r5, r5, r7\n\t"
35269 #endif
35270 #ifdef WOLFSSL_KEIL
35271         "adcs	r3, r3, %[r]\n\t"
35272 #elif defined(__clang__)
35273         "adcs	r3, %[r]\n\t"
35274 #else
35275         "adc	r3, %[r]\n\t"
35276 #endif
35277         "uxth	r7, %[b]\n\t"
35278 #ifdef WOLFSSL_KEIL
35279         "muls	r6, r7, r6\n\t"
35280 #elif defined(__clang__)
35281         "muls	r6, r7\n\t"
35282 #else
35283         "mul	r6, r7\n\t"
35284 #endif
35285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35286         "lsrs	r7, r6, #16\n\t"
35287 #else
35288         "lsr	r7, r6, #16\n\t"
35289 #endif
35290 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35291         "lsls	r6, r6, #16\n\t"
35292 #else
35293         "lsl	r6, r6, #16\n\t"
35294 #endif
35295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35296         "adds	r4, r4, r6\n\t"
35297 #else
35298         "add	r4, r4, r6\n\t"
35299 #endif
35300 #ifdef WOLFSSL_KEIL
35301         "adcs	r5, r5, r7\n\t"
35302 #elif defined(__clang__)
35303         "adcs	r5, r7\n\t"
35304 #else
35305         "adc	r5, r7\n\t"
35306 #endif
35307 #ifdef WOLFSSL_KEIL
35308         "adcs	r3, r3, %[r]\n\t"
35309 #elif defined(__clang__)
35310         "adcs	r3, %[r]\n\t"
35311 #else
35312         "adc	r3, %[r]\n\t"
35313 #endif
35314         "str	r4, [sp, #28]\n\t"
35315         "#  A[8] * B[0]\n\t"
35316         "movs	r4, #0\n\t"
35317         "mov	%[a], r9\n\t"
35318         "mov	%[b], r10\n\t"
35319         "ldr	%[a], [%[a], #32]\n\t"
35320         "ldr	%[b], [%[b]]\n\t"
35321         "uxth	r6, %[a]\n\t"
35322         "uxth	r7, %[b]\n\t"
35323 #ifdef WOLFSSL_KEIL
35324         "muls	r7, r6, r7\n\t"
35325 #elif defined(__clang__)
35326         "muls	r7, r6\n\t"
35327 #else
35328         "mul	r7, r6\n\t"
35329 #endif
35330 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35331         "adds	r5, r5, r7\n\t"
35332 #else
35333         "add	r5, r5, r7\n\t"
35334 #endif
35335 #ifdef WOLFSSL_KEIL
35336         "adcs	r3, r3, %[r]\n\t"
35337 #elif defined(__clang__)
35338         "adcs	r3, %[r]\n\t"
35339 #else
35340         "adc	r3, %[r]\n\t"
35341 #endif
35342 #ifdef WOLFSSL_KEIL
35343         "adcs	r4, r4, %[r]\n\t"
35344 #elif defined(__clang__)
35345         "adcs	r4, %[r]\n\t"
35346 #else
35347         "adc	r4, %[r]\n\t"
35348 #endif
35349 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35350         "lsrs	r7, %[b], #16\n\t"
35351 #else
35352         "lsr	r7, %[b], #16\n\t"
35353 #endif
35354 #ifdef WOLFSSL_KEIL
35355         "muls	r6, r7, r6\n\t"
35356 #elif defined(__clang__)
35357         "muls	r6, r7\n\t"
35358 #else
35359         "mul	r6, r7\n\t"
35360 #endif
35361 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35362         "lsrs	r7, r6, #16\n\t"
35363 #else
35364         "lsr	r7, r6, #16\n\t"
35365 #endif
35366 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35367         "lsls	r6, r6, #16\n\t"
35368 #else
35369         "lsl	r6, r6, #16\n\t"
35370 #endif
35371 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35372         "adds	r5, r5, r6\n\t"
35373 #else
35374         "add	r5, r5, r6\n\t"
35375 #endif
35376 #ifdef WOLFSSL_KEIL
35377         "adcs	r3, r3, r7\n\t"
35378 #elif defined(__clang__)
35379         "adcs	r3, r7\n\t"
35380 #else
35381         "adc	r3, r7\n\t"
35382 #endif
35383 #ifdef WOLFSSL_KEIL
35384         "adcs	r4, r4, %[r]\n\t"
35385 #elif defined(__clang__)
35386         "adcs	r4, %[r]\n\t"
35387 #else
35388         "adc	r4, %[r]\n\t"
35389 #endif
35390 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35391         "lsrs	r6, %[a], #16\n\t"
35392 #else
35393         "lsr	r6, %[a], #16\n\t"
35394 #endif
35395 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35396         "lsrs	r7, %[b], #16\n\t"
35397 #else
35398         "lsr	r7, %[b], #16\n\t"
35399 #endif
35400 #ifdef WOLFSSL_KEIL
35401         "muls	r7, r6, r7\n\t"
35402 #elif defined(__clang__)
35403         "muls	r7, r6\n\t"
35404 #else
35405         "mul	r7, r6\n\t"
35406 #endif
35407 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35408         "adds	r3, r3, r7\n\t"
35409 #else
35410         "add	r3, r3, r7\n\t"
35411 #endif
35412 #ifdef WOLFSSL_KEIL
35413         "adcs	r4, r4, %[r]\n\t"
35414 #elif defined(__clang__)
35415         "adcs	r4, %[r]\n\t"
35416 #else
35417         "adc	r4, %[r]\n\t"
35418 #endif
35419         "uxth	r7, %[b]\n\t"
35420 #ifdef WOLFSSL_KEIL
35421         "muls	r6, r7, r6\n\t"
35422 #elif defined(__clang__)
35423         "muls	r6, r7\n\t"
35424 #else
35425         "mul	r6, r7\n\t"
35426 #endif
35427 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35428         "lsrs	r7, r6, #16\n\t"
35429 #else
35430         "lsr	r7, r6, #16\n\t"
35431 #endif
35432 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35433         "lsls	r6, r6, #16\n\t"
35434 #else
35435         "lsl	r6, r6, #16\n\t"
35436 #endif
35437 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35438         "adds	r5, r5, r6\n\t"
35439 #else
35440         "add	r5, r5, r6\n\t"
35441 #endif
35442 #ifdef WOLFSSL_KEIL
35443         "adcs	r3, r3, r7\n\t"
35444 #elif defined(__clang__)
35445         "adcs	r3, r7\n\t"
35446 #else
35447         "adc	r3, r7\n\t"
35448 #endif
35449 #ifdef WOLFSSL_KEIL
35450         "adcs	r4, r4, %[r]\n\t"
35451 #elif defined(__clang__)
35452         "adcs	r4, %[r]\n\t"
35453 #else
35454         "adc	r4, %[r]\n\t"
35455 #endif
35456         "#  A[7] * B[1]\n\t"
35457         "mov	%[a], r9\n\t"
35458         "mov	%[b], r10\n\t"
35459         "ldr	%[a], [%[a], #28]\n\t"
35460         "ldr	%[b], [%[b], #4]\n\t"
35461         "uxth	r6, %[a]\n\t"
35462         "uxth	r7, %[b]\n\t"
35463 #ifdef WOLFSSL_KEIL
35464         "muls	r7, r6, r7\n\t"
35465 #elif defined(__clang__)
35466         "muls	r7, r6\n\t"
35467 #else
35468         "mul	r7, r6\n\t"
35469 #endif
35470 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35471         "adds	r5, r5, r7\n\t"
35472 #else
35473         "add	r5, r5, r7\n\t"
35474 #endif
35475 #ifdef WOLFSSL_KEIL
35476         "adcs	r3, r3, %[r]\n\t"
35477 #elif defined(__clang__)
35478         "adcs	r3, %[r]\n\t"
35479 #else
35480         "adc	r3, %[r]\n\t"
35481 #endif
35482 #ifdef WOLFSSL_KEIL
35483         "adcs	r4, r4, %[r]\n\t"
35484 #elif defined(__clang__)
35485         "adcs	r4, %[r]\n\t"
35486 #else
35487         "adc	r4, %[r]\n\t"
35488 #endif
35489 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35490         "lsrs	r7, %[b], #16\n\t"
35491 #else
35492         "lsr	r7, %[b], #16\n\t"
35493 #endif
35494 #ifdef WOLFSSL_KEIL
35495         "muls	r6, r7, r6\n\t"
35496 #elif defined(__clang__)
35497         "muls	r6, r7\n\t"
35498 #else
35499         "mul	r6, r7\n\t"
35500 #endif
35501 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35502         "lsrs	r7, r6, #16\n\t"
35503 #else
35504         "lsr	r7, r6, #16\n\t"
35505 #endif
35506 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35507         "lsls	r6, r6, #16\n\t"
35508 #else
35509         "lsl	r6, r6, #16\n\t"
35510 #endif
35511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35512         "adds	r5, r5, r6\n\t"
35513 #else
35514         "add	r5, r5, r6\n\t"
35515 #endif
35516 #ifdef WOLFSSL_KEIL
35517         "adcs	r3, r3, r7\n\t"
35518 #elif defined(__clang__)
35519         "adcs	r3, r7\n\t"
35520 #else
35521         "adc	r3, r7\n\t"
35522 #endif
35523 #ifdef WOLFSSL_KEIL
35524         "adcs	r4, r4, %[r]\n\t"
35525 #elif defined(__clang__)
35526         "adcs	r4, %[r]\n\t"
35527 #else
35528         "adc	r4, %[r]\n\t"
35529 #endif
35530 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35531         "lsrs	r6, %[a], #16\n\t"
35532 #else
35533         "lsr	r6, %[a], #16\n\t"
35534 #endif
35535 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35536         "lsrs	r7, %[b], #16\n\t"
35537 #else
35538         "lsr	r7, %[b], #16\n\t"
35539 #endif
35540 #ifdef WOLFSSL_KEIL
35541         "muls	r7, r6, r7\n\t"
35542 #elif defined(__clang__)
35543         "muls	r7, r6\n\t"
35544 #else
35545         "mul	r7, r6\n\t"
35546 #endif
35547 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35548         "adds	r3, r3, r7\n\t"
35549 #else
35550         "add	r3, r3, r7\n\t"
35551 #endif
35552 #ifdef WOLFSSL_KEIL
35553         "adcs	r4, r4, %[r]\n\t"
35554 #elif defined(__clang__)
35555         "adcs	r4, %[r]\n\t"
35556 #else
35557         "adc	r4, %[r]\n\t"
35558 #endif
35559         "uxth	r7, %[b]\n\t"
35560 #ifdef WOLFSSL_KEIL
35561         "muls	r6, r7, r6\n\t"
35562 #elif defined(__clang__)
35563         "muls	r6, r7\n\t"
35564 #else
35565         "mul	r6, r7\n\t"
35566 #endif
35567 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35568         "lsrs	r7, r6, #16\n\t"
35569 #else
35570         "lsr	r7, r6, #16\n\t"
35571 #endif
35572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35573         "lsls	r6, r6, #16\n\t"
35574 #else
35575         "lsl	r6, r6, #16\n\t"
35576 #endif
35577 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35578         "adds	r5, r5, r6\n\t"
35579 #else
35580         "add	r5, r5, r6\n\t"
35581 #endif
35582 #ifdef WOLFSSL_KEIL
35583         "adcs	r3, r3, r7\n\t"
35584 #elif defined(__clang__)
35585         "adcs	r3, r7\n\t"
35586 #else
35587         "adc	r3, r7\n\t"
35588 #endif
35589 #ifdef WOLFSSL_KEIL
35590         "adcs	r4, r4, %[r]\n\t"
35591 #elif defined(__clang__)
35592         "adcs	r4, %[r]\n\t"
35593 #else
35594         "adc	r4, %[r]\n\t"
35595 #endif
35596         "#  A[6] * B[2]\n\t"
35597         "mov	%[a], r9\n\t"
35598         "mov	%[b], r10\n\t"
35599         "ldr	%[a], [%[a], #24]\n\t"
35600         "ldr	%[b], [%[b], #8]\n\t"
35601         "uxth	r6, %[a]\n\t"
35602         "uxth	r7, %[b]\n\t"
35603 #ifdef WOLFSSL_KEIL
35604         "muls	r7, r6, r7\n\t"
35605 #elif defined(__clang__)
35606         "muls	r7, r6\n\t"
35607 #else
35608         "mul	r7, r6\n\t"
35609 #endif
35610 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35611         "adds	r5, r5, r7\n\t"
35612 #else
35613         "add	r5, r5, r7\n\t"
35614 #endif
35615 #ifdef WOLFSSL_KEIL
35616         "adcs	r3, r3, %[r]\n\t"
35617 #elif defined(__clang__)
35618         "adcs	r3, %[r]\n\t"
35619 #else
35620         "adc	r3, %[r]\n\t"
35621 #endif
35622 #ifdef WOLFSSL_KEIL
35623         "adcs	r4, r4, %[r]\n\t"
35624 #elif defined(__clang__)
35625         "adcs	r4, %[r]\n\t"
35626 #else
35627         "adc	r4, %[r]\n\t"
35628 #endif
35629 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35630         "lsrs	r7, %[b], #16\n\t"
35631 #else
35632         "lsr	r7, %[b], #16\n\t"
35633 #endif
35634 #ifdef WOLFSSL_KEIL
35635         "muls	r6, r7, r6\n\t"
35636 #elif defined(__clang__)
35637         "muls	r6, r7\n\t"
35638 #else
35639         "mul	r6, r7\n\t"
35640 #endif
35641 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35642         "lsrs	r7, r6, #16\n\t"
35643 #else
35644         "lsr	r7, r6, #16\n\t"
35645 #endif
35646 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35647         "lsls	r6, r6, #16\n\t"
35648 #else
35649         "lsl	r6, r6, #16\n\t"
35650 #endif
35651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35652         "adds	r5, r5, r6\n\t"
35653 #else
35654         "add	r5, r5, r6\n\t"
35655 #endif
35656 #ifdef WOLFSSL_KEIL
35657         "adcs	r3, r3, r7\n\t"
35658 #elif defined(__clang__)
35659         "adcs	r3, r7\n\t"
35660 #else
35661         "adc	r3, r7\n\t"
35662 #endif
35663 #ifdef WOLFSSL_KEIL
35664         "adcs	r4, r4, %[r]\n\t"
35665 #elif defined(__clang__)
35666         "adcs	r4, %[r]\n\t"
35667 #else
35668         "adc	r4, %[r]\n\t"
35669 #endif
35670 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35671         "lsrs	r6, %[a], #16\n\t"
35672 #else
35673         "lsr	r6, %[a], #16\n\t"
35674 #endif
35675 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35676         "lsrs	r7, %[b], #16\n\t"
35677 #else
35678         "lsr	r7, %[b], #16\n\t"
35679 #endif
35680 #ifdef WOLFSSL_KEIL
35681         "muls	r7, r6, r7\n\t"
35682 #elif defined(__clang__)
35683         "muls	r7, r6\n\t"
35684 #else
35685         "mul	r7, r6\n\t"
35686 #endif
35687 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35688         "adds	r3, r3, r7\n\t"
35689 #else
35690         "add	r3, r3, r7\n\t"
35691 #endif
35692 #ifdef WOLFSSL_KEIL
35693         "adcs	r4, r4, %[r]\n\t"
35694 #elif defined(__clang__)
35695         "adcs	r4, %[r]\n\t"
35696 #else
35697         "adc	r4, %[r]\n\t"
35698 #endif
35699         "uxth	r7, %[b]\n\t"
35700 #ifdef WOLFSSL_KEIL
35701         "muls	r6, r7, r6\n\t"
35702 #elif defined(__clang__)
35703         "muls	r6, r7\n\t"
35704 #else
35705         "mul	r6, r7\n\t"
35706 #endif
35707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35708         "lsrs	r7, r6, #16\n\t"
35709 #else
35710         "lsr	r7, r6, #16\n\t"
35711 #endif
35712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35713         "lsls	r6, r6, #16\n\t"
35714 #else
35715         "lsl	r6, r6, #16\n\t"
35716 #endif
35717 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35718         "adds	r5, r5, r6\n\t"
35719 #else
35720         "add	r5, r5, r6\n\t"
35721 #endif
35722 #ifdef WOLFSSL_KEIL
35723         "adcs	r3, r3, r7\n\t"
35724 #elif defined(__clang__)
35725         "adcs	r3, r7\n\t"
35726 #else
35727         "adc	r3, r7\n\t"
35728 #endif
35729 #ifdef WOLFSSL_KEIL
35730         "adcs	r4, r4, %[r]\n\t"
35731 #elif defined(__clang__)
35732         "adcs	r4, %[r]\n\t"
35733 #else
35734         "adc	r4, %[r]\n\t"
35735 #endif
35736         "#  A[5] * B[3]\n\t"
35737         "mov	%[a], r9\n\t"
35738         "mov	%[b], r10\n\t"
35739         "ldr	%[a], [%[a], #20]\n\t"
35740         "ldr	%[b], [%[b], #12]\n\t"
35741         "uxth	r6, %[a]\n\t"
35742         "uxth	r7, %[b]\n\t"
35743 #ifdef WOLFSSL_KEIL
35744         "muls	r7, r6, r7\n\t"
35745 #elif defined(__clang__)
35746         "muls	r7, r6\n\t"
35747 #else
35748         "mul	r7, r6\n\t"
35749 #endif
35750 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35751         "adds	r5, r5, r7\n\t"
35752 #else
35753         "add	r5, r5, r7\n\t"
35754 #endif
35755 #ifdef WOLFSSL_KEIL
35756         "adcs	r3, r3, %[r]\n\t"
35757 #elif defined(__clang__)
35758         "adcs	r3, %[r]\n\t"
35759 #else
35760         "adc	r3, %[r]\n\t"
35761 #endif
35762 #ifdef WOLFSSL_KEIL
35763         "adcs	r4, r4, %[r]\n\t"
35764 #elif defined(__clang__)
35765         "adcs	r4, %[r]\n\t"
35766 #else
35767         "adc	r4, %[r]\n\t"
35768 #endif
35769 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35770         "lsrs	r7, %[b], #16\n\t"
35771 #else
35772         "lsr	r7, %[b], #16\n\t"
35773 #endif
35774 #ifdef WOLFSSL_KEIL
35775         "muls	r6, r7, r6\n\t"
35776 #elif defined(__clang__)
35777         "muls	r6, r7\n\t"
35778 #else
35779         "mul	r6, r7\n\t"
35780 #endif
35781 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35782         "lsrs	r7, r6, #16\n\t"
35783 #else
35784         "lsr	r7, r6, #16\n\t"
35785 #endif
35786 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35787         "lsls	r6, r6, #16\n\t"
35788 #else
35789         "lsl	r6, r6, #16\n\t"
35790 #endif
35791 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35792         "adds	r5, r5, r6\n\t"
35793 #else
35794         "add	r5, r5, r6\n\t"
35795 #endif
35796 #ifdef WOLFSSL_KEIL
35797         "adcs	r3, r3, r7\n\t"
35798 #elif defined(__clang__)
35799         "adcs	r3, r7\n\t"
35800 #else
35801         "adc	r3, r7\n\t"
35802 #endif
35803 #ifdef WOLFSSL_KEIL
35804         "adcs	r4, r4, %[r]\n\t"
35805 #elif defined(__clang__)
35806         "adcs	r4, %[r]\n\t"
35807 #else
35808         "adc	r4, %[r]\n\t"
35809 #endif
35810 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35811         "lsrs	r6, %[a], #16\n\t"
35812 #else
35813         "lsr	r6, %[a], #16\n\t"
35814 #endif
35815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35816         "lsrs	r7, %[b], #16\n\t"
35817 #else
35818         "lsr	r7, %[b], #16\n\t"
35819 #endif
35820 #ifdef WOLFSSL_KEIL
35821         "muls	r7, r6, r7\n\t"
35822 #elif defined(__clang__)
35823         "muls	r7, r6\n\t"
35824 #else
35825         "mul	r7, r6\n\t"
35826 #endif
35827 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35828         "adds	r3, r3, r7\n\t"
35829 #else
35830         "add	r3, r3, r7\n\t"
35831 #endif
35832 #ifdef WOLFSSL_KEIL
35833         "adcs	r4, r4, %[r]\n\t"
35834 #elif defined(__clang__)
35835         "adcs	r4, %[r]\n\t"
35836 #else
35837         "adc	r4, %[r]\n\t"
35838 #endif
35839         "uxth	r7, %[b]\n\t"
35840 #ifdef WOLFSSL_KEIL
35841         "muls	r6, r7, r6\n\t"
35842 #elif defined(__clang__)
35843         "muls	r6, r7\n\t"
35844 #else
35845         "mul	r6, r7\n\t"
35846 #endif
35847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35848         "lsrs	r7, r6, #16\n\t"
35849 #else
35850         "lsr	r7, r6, #16\n\t"
35851 #endif
35852 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35853         "lsls	r6, r6, #16\n\t"
35854 #else
35855         "lsl	r6, r6, #16\n\t"
35856 #endif
35857 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35858         "adds	r5, r5, r6\n\t"
35859 #else
35860         "add	r5, r5, r6\n\t"
35861 #endif
35862 #ifdef WOLFSSL_KEIL
35863         "adcs	r3, r3, r7\n\t"
35864 #elif defined(__clang__)
35865         "adcs	r3, r7\n\t"
35866 #else
35867         "adc	r3, r7\n\t"
35868 #endif
35869 #ifdef WOLFSSL_KEIL
35870         "adcs	r4, r4, %[r]\n\t"
35871 #elif defined(__clang__)
35872         "adcs	r4, %[r]\n\t"
35873 #else
35874         "adc	r4, %[r]\n\t"
35875 #endif
35876         "#  A[4] * B[4]\n\t"
35877         "mov	%[a], r9\n\t"
35878         "mov	%[b], r10\n\t"
35879         "ldr	%[a], [%[a], #16]\n\t"
35880         "ldr	%[b], [%[b], #16]\n\t"
35881         "uxth	r6, %[a]\n\t"
35882         "uxth	r7, %[b]\n\t"
35883 #ifdef WOLFSSL_KEIL
35884         "muls	r7, r6, r7\n\t"
35885 #elif defined(__clang__)
35886         "muls	r7, r6\n\t"
35887 #else
35888         "mul	r7, r6\n\t"
35889 #endif
35890 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35891         "adds	r5, r5, r7\n\t"
35892 #else
35893         "add	r5, r5, r7\n\t"
35894 #endif
35895 #ifdef WOLFSSL_KEIL
35896         "adcs	r3, r3, %[r]\n\t"
35897 #elif defined(__clang__)
35898         "adcs	r3, %[r]\n\t"
35899 #else
35900         "adc	r3, %[r]\n\t"
35901 #endif
35902 #ifdef WOLFSSL_KEIL
35903         "adcs	r4, r4, %[r]\n\t"
35904 #elif defined(__clang__)
35905         "adcs	r4, %[r]\n\t"
35906 #else
35907         "adc	r4, %[r]\n\t"
35908 #endif
35909 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35910         "lsrs	r7, %[b], #16\n\t"
35911 #else
35912         "lsr	r7, %[b], #16\n\t"
35913 #endif
35914 #ifdef WOLFSSL_KEIL
35915         "muls	r6, r7, r6\n\t"
35916 #elif defined(__clang__)
35917         "muls	r6, r7\n\t"
35918 #else
35919         "mul	r6, r7\n\t"
35920 #endif
35921 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35922         "lsrs	r7, r6, #16\n\t"
35923 #else
35924         "lsr	r7, r6, #16\n\t"
35925 #endif
35926 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35927         "lsls	r6, r6, #16\n\t"
35928 #else
35929         "lsl	r6, r6, #16\n\t"
35930 #endif
35931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35932         "adds	r5, r5, r6\n\t"
35933 #else
35934         "add	r5, r5, r6\n\t"
35935 #endif
35936 #ifdef WOLFSSL_KEIL
35937         "adcs	r3, r3, r7\n\t"
35938 #elif defined(__clang__)
35939         "adcs	r3, r7\n\t"
35940 #else
35941         "adc	r3, r7\n\t"
35942 #endif
35943 #ifdef WOLFSSL_KEIL
35944         "adcs	r4, r4, %[r]\n\t"
35945 #elif defined(__clang__)
35946         "adcs	r4, %[r]\n\t"
35947 #else
35948         "adc	r4, %[r]\n\t"
35949 #endif
35950 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35951         "lsrs	r6, %[a], #16\n\t"
35952 #else
35953         "lsr	r6, %[a], #16\n\t"
35954 #endif
35955 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35956         "lsrs	r7, %[b], #16\n\t"
35957 #else
35958         "lsr	r7, %[b], #16\n\t"
35959 #endif
35960 #ifdef WOLFSSL_KEIL
35961         "muls	r7, r6, r7\n\t"
35962 #elif defined(__clang__)
35963         "muls	r7, r6\n\t"
35964 #else
35965         "mul	r7, r6\n\t"
35966 #endif
35967 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35968         "adds	r3, r3, r7\n\t"
35969 #else
35970         "add	r3, r3, r7\n\t"
35971 #endif
35972 #ifdef WOLFSSL_KEIL
35973         "adcs	r4, r4, %[r]\n\t"
35974 #elif defined(__clang__)
35975         "adcs	r4, %[r]\n\t"
35976 #else
35977         "adc	r4, %[r]\n\t"
35978 #endif
35979         "uxth	r7, %[b]\n\t"
35980 #ifdef WOLFSSL_KEIL
35981         "muls	r6, r7, r6\n\t"
35982 #elif defined(__clang__)
35983         "muls	r6, r7\n\t"
35984 #else
35985         "mul	r6, r7\n\t"
35986 #endif
35987 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35988         "lsrs	r7, r6, #16\n\t"
35989 #else
35990         "lsr	r7, r6, #16\n\t"
35991 #endif
35992 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35993         "lsls	r6, r6, #16\n\t"
35994 #else
35995         "lsl	r6, r6, #16\n\t"
35996 #endif
35997 #if defined(__clang__) || defined(WOLFSSL_KEIL)
35998         "adds	r5, r5, r6\n\t"
35999 #else
36000         "add	r5, r5, r6\n\t"
36001 #endif
36002 #ifdef WOLFSSL_KEIL
36003         "adcs	r3, r3, r7\n\t"
36004 #elif defined(__clang__)
36005         "adcs	r3, r7\n\t"
36006 #else
36007         "adc	r3, r7\n\t"
36008 #endif
36009 #ifdef WOLFSSL_KEIL
36010         "adcs	r4, r4, %[r]\n\t"
36011 #elif defined(__clang__)
36012         "adcs	r4, %[r]\n\t"
36013 #else
36014         "adc	r4, %[r]\n\t"
36015 #endif
36016         "#  A[3] * B[5]\n\t"
36017         "mov	%[a], r9\n\t"
36018         "mov	%[b], r10\n\t"
36019         "ldr	%[a], [%[a], #12]\n\t"
36020         "ldr	%[b], [%[b], #20]\n\t"
36021         "uxth	r6, %[a]\n\t"
36022         "uxth	r7, %[b]\n\t"
36023 #ifdef WOLFSSL_KEIL
36024         "muls	r7, r6, r7\n\t"
36025 #elif defined(__clang__)
36026         "muls	r7, r6\n\t"
36027 #else
36028         "mul	r7, r6\n\t"
36029 #endif
36030 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36031         "adds	r5, r5, r7\n\t"
36032 #else
36033         "add	r5, r5, r7\n\t"
36034 #endif
36035 #ifdef WOLFSSL_KEIL
36036         "adcs	r3, r3, %[r]\n\t"
36037 #elif defined(__clang__)
36038         "adcs	r3, %[r]\n\t"
36039 #else
36040         "adc	r3, %[r]\n\t"
36041 #endif
36042 #ifdef WOLFSSL_KEIL
36043         "adcs	r4, r4, %[r]\n\t"
36044 #elif defined(__clang__)
36045         "adcs	r4, %[r]\n\t"
36046 #else
36047         "adc	r4, %[r]\n\t"
36048 #endif
36049 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36050         "lsrs	r7, %[b], #16\n\t"
36051 #else
36052         "lsr	r7, %[b], #16\n\t"
36053 #endif
36054 #ifdef WOLFSSL_KEIL
36055         "muls	r6, r7, r6\n\t"
36056 #elif defined(__clang__)
36057         "muls	r6, r7\n\t"
36058 #else
36059         "mul	r6, r7\n\t"
36060 #endif
36061 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36062         "lsrs	r7, r6, #16\n\t"
36063 #else
36064         "lsr	r7, r6, #16\n\t"
36065 #endif
36066 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36067         "lsls	r6, r6, #16\n\t"
36068 #else
36069         "lsl	r6, r6, #16\n\t"
36070 #endif
36071 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36072         "adds	r5, r5, r6\n\t"
36073 #else
36074         "add	r5, r5, r6\n\t"
36075 #endif
36076 #ifdef WOLFSSL_KEIL
36077         "adcs	r3, r3, r7\n\t"
36078 #elif defined(__clang__)
36079         "adcs	r3, r7\n\t"
36080 #else
36081         "adc	r3, r7\n\t"
36082 #endif
36083 #ifdef WOLFSSL_KEIL
36084         "adcs	r4, r4, %[r]\n\t"
36085 #elif defined(__clang__)
36086         "adcs	r4, %[r]\n\t"
36087 #else
36088         "adc	r4, %[r]\n\t"
36089 #endif
36090 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36091         "lsrs	r6, %[a], #16\n\t"
36092 #else
36093         "lsr	r6, %[a], #16\n\t"
36094 #endif
36095 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36096         "lsrs	r7, %[b], #16\n\t"
36097 #else
36098         "lsr	r7, %[b], #16\n\t"
36099 #endif
36100 #ifdef WOLFSSL_KEIL
36101         "muls	r7, r6, r7\n\t"
36102 #elif defined(__clang__)
36103         "muls	r7, r6\n\t"
36104 #else
36105         "mul	r7, r6\n\t"
36106 #endif
36107 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36108         "adds	r3, r3, r7\n\t"
36109 #else
36110         "add	r3, r3, r7\n\t"
36111 #endif
36112 #ifdef WOLFSSL_KEIL
36113         "adcs	r4, r4, %[r]\n\t"
36114 #elif defined(__clang__)
36115         "adcs	r4, %[r]\n\t"
36116 #else
36117         "adc	r4, %[r]\n\t"
36118 #endif
36119         "uxth	r7, %[b]\n\t"
36120 #ifdef WOLFSSL_KEIL
36121         "muls	r6, r7, r6\n\t"
36122 #elif defined(__clang__)
36123         "muls	r6, r7\n\t"
36124 #else
36125         "mul	r6, r7\n\t"
36126 #endif
36127 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36128         "lsrs	r7, r6, #16\n\t"
36129 #else
36130         "lsr	r7, r6, #16\n\t"
36131 #endif
36132 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36133         "lsls	r6, r6, #16\n\t"
36134 #else
36135         "lsl	r6, r6, #16\n\t"
36136 #endif
36137 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36138         "adds	r5, r5, r6\n\t"
36139 #else
36140         "add	r5, r5, r6\n\t"
36141 #endif
36142 #ifdef WOLFSSL_KEIL
36143         "adcs	r3, r3, r7\n\t"
36144 #elif defined(__clang__)
36145         "adcs	r3, r7\n\t"
36146 #else
36147         "adc	r3, r7\n\t"
36148 #endif
36149 #ifdef WOLFSSL_KEIL
36150         "adcs	r4, r4, %[r]\n\t"
36151 #elif defined(__clang__)
36152         "adcs	r4, %[r]\n\t"
36153 #else
36154         "adc	r4, %[r]\n\t"
36155 #endif
36156         "#  A[2] * B[6]\n\t"
36157         "mov	%[a], r9\n\t"
36158         "mov	%[b], r10\n\t"
36159         "ldr	%[a], [%[a], #8]\n\t"
36160         "ldr	%[b], [%[b], #24]\n\t"
36161         "uxth	r6, %[a]\n\t"
36162         "uxth	r7, %[b]\n\t"
36163 #ifdef WOLFSSL_KEIL
36164         "muls	r7, r6, r7\n\t"
36165 #elif defined(__clang__)
36166         "muls	r7, r6\n\t"
36167 #else
36168         "mul	r7, r6\n\t"
36169 #endif
36170 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36171         "adds	r5, r5, r7\n\t"
36172 #else
36173         "add	r5, r5, r7\n\t"
36174 #endif
36175 #ifdef WOLFSSL_KEIL
36176         "adcs	r3, r3, %[r]\n\t"
36177 #elif defined(__clang__)
36178         "adcs	r3, %[r]\n\t"
36179 #else
36180         "adc	r3, %[r]\n\t"
36181 #endif
36182 #ifdef WOLFSSL_KEIL
36183         "adcs	r4, r4, %[r]\n\t"
36184 #elif defined(__clang__)
36185         "adcs	r4, %[r]\n\t"
36186 #else
36187         "adc	r4, %[r]\n\t"
36188 #endif
36189 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36190         "lsrs	r7, %[b], #16\n\t"
36191 #else
36192         "lsr	r7, %[b], #16\n\t"
36193 #endif
36194 #ifdef WOLFSSL_KEIL
36195         "muls	r6, r7, r6\n\t"
36196 #elif defined(__clang__)
36197         "muls	r6, r7\n\t"
36198 #else
36199         "mul	r6, r7\n\t"
36200 #endif
36201 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36202         "lsrs	r7, r6, #16\n\t"
36203 #else
36204         "lsr	r7, r6, #16\n\t"
36205 #endif
36206 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36207         "lsls	r6, r6, #16\n\t"
36208 #else
36209         "lsl	r6, r6, #16\n\t"
36210 #endif
36211 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36212         "adds	r5, r5, r6\n\t"
36213 #else
36214         "add	r5, r5, r6\n\t"
36215 #endif
36216 #ifdef WOLFSSL_KEIL
36217         "adcs	r3, r3, r7\n\t"
36218 #elif defined(__clang__)
36219         "adcs	r3, r7\n\t"
36220 #else
36221         "adc	r3, r7\n\t"
36222 #endif
36223 #ifdef WOLFSSL_KEIL
36224         "adcs	r4, r4, %[r]\n\t"
36225 #elif defined(__clang__)
36226         "adcs	r4, %[r]\n\t"
36227 #else
36228         "adc	r4, %[r]\n\t"
36229 #endif
36230 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36231         "lsrs	r6, %[a], #16\n\t"
36232 #else
36233         "lsr	r6, %[a], #16\n\t"
36234 #endif
36235 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36236         "lsrs	r7, %[b], #16\n\t"
36237 #else
36238         "lsr	r7, %[b], #16\n\t"
36239 #endif
36240 #ifdef WOLFSSL_KEIL
36241         "muls	r7, r6, r7\n\t"
36242 #elif defined(__clang__)
36243         "muls	r7, r6\n\t"
36244 #else
36245         "mul	r7, r6\n\t"
36246 #endif
36247 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36248         "adds	r3, r3, r7\n\t"
36249 #else
36250         "add	r3, r3, r7\n\t"
36251 #endif
36252 #ifdef WOLFSSL_KEIL
36253         "adcs	r4, r4, %[r]\n\t"
36254 #elif defined(__clang__)
36255         "adcs	r4, %[r]\n\t"
36256 #else
36257         "adc	r4, %[r]\n\t"
36258 #endif
36259         "uxth	r7, %[b]\n\t"
36260 #ifdef WOLFSSL_KEIL
36261         "muls	r6, r7, r6\n\t"
36262 #elif defined(__clang__)
36263         "muls	r6, r7\n\t"
36264 #else
36265         "mul	r6, r7\n\t"
36266 #endif
36267 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36268         "lsrs	r7, r6, #16\n\t"
36269 #else
36270         "lsr	r7, r6, #16\n\t"
36271 #endif
36272 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36273         "lsls	r6, r6, #16\n\t"
36274 #else
36275         "lsl	r6, r6, #16\n\t"
36276 #endif
36277 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36278         "adds	r5, r5, r6\n\t"
36279 #else
36280         "add	r5, r5, r6\n\t"
36281 #endif
36282 #ifdef WOLFSSL_KEIL
36283         "adcs	r3, r3, r7\n\t"
36284 #elif defined(__clang__)
36285         "adcs	r3, r7\n\t"
36286 #else
36287         "adc	r3, r7\n\t"
36288 #endif
36289 #ifdef WOLFSSL_KEIL
36290         "adcs	r4, r4, %[r]\n\t"
36291 #elif defined(__clang__)
36292         "adcs	r4, %[r]\n\t"
36293 #else
36294         "adc	r4, %[r]\n\t"
36295 #endif
36296         "#  A[1] * B[7]\n\t"
36297         "mov	%[a], r9\n\t"
36298         "mov	%[b], r10\n\t"
36299         "ldr	%[a], [%[a], #4]\n\t"
36300         "ldr	%[b], [%[b], #28]\n\t"
36301         "uxth	r6, %[a]\n\t"
36302         "uxth	r7, %[b]\n\t"
36303 #ifdef WOLFSSL_KEIL
36304         "muls	r7, r6, r7\n\t"
36305 #elif defined(__clang__)
36306         "muls	r7, r6\n\t"
36307 #else
36308         "mul	r7, r6\n\t"
36309 #endif
36310 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36311         "adds	r5, r5, r7\n\t"
36312 #else
36313         "add	r5, r5, r7\n\t"
36314 #endif
36315 #ifdef WOLFSSL_KEIL
36316         "adcs	r3, r3, %[r]\n\t"
36317 #elif defined(__clang__)
36318         "adcs	r3, %[r]\n\t"
36319 #else
36320         "adc	r3, %[r]\n\t"
36321 #endif
36322 #ifdef WOLFSSL_KEIL
36323         "adcs	r4, r4, %[r]\n\t"
36324 #elif defined(__clang__)
36325         "adcs	r4, %[r]\n\t"
36326 #else
36327         "adc	r4, %[r]\n\t"
36328 #endif
36329 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36330         "lsrs	r7, %[b], #16\n\t"
36331 #else
36332         "lsr	r7, %[b], #16\n\t"
36333 #endif
36334 #ifdef WOLFSSL_KEIL
36335         "muls	r6, r7, r6\n\t"
36336 #elif defined(__clang__)
36337         "muls	r6, r7\n\t"
36338 #else
36339         "mul	r6, r7\n\t"
36340 #endif
36341 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36342         "lsrs	r7, r6, #16\n\t"
36343 #else
36344         "lsr	r7, r6, #16\n\t"
36345 #endif
36346 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36347         "lsls	r6, r6, #16\n\t"
36348 #else
36349         "lsl	r6, r6, #16\n\t"
36350 #endif
36351 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36352         "adds	r5, r5, r6\n\t"
36353 #else
36354         "add	r5, r5, r6\n\t"
36355 #endif
36356 #ifdef WOLFSSL_KEIL
36357         "adcs	r3, r3, r7\n\t"
36358 #elif defined(__clang__)
36359         "adcs	r3, r7\n\t"
36360 #else
36361         "adc	r3, r7\n\t"
36362 #endif
36363 #ifdef WOLFSSL_KEIL
36364         "adcs	r4, r4, %[r]\n\t"
36365 #elif defined(__clang__)
36366         "adcs	r4, %[r]\n\t"
36367 #else
36368         "adc	r4, %[r]\n\t"
36369 #endif
36370 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36371         "lsrs	r6, %[a], #16\n\t"
36372 #else
36373         "lsr	r6, %[a], #16\n\t"
36374 #endif
36375 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36376         "lsrs	r7, %[b], #16\n\t"
36377 #else
36378         "lsr	r7, %[b], #16\n\t"
36379 #endif
36380 #ifdef WOLFSSL_KEIL
36381         "muls	r7, r6, r7\n\t"
36382 #elif defined(__clang__)
36383         "muls	r7, r6\n\t"
36384 #else
36385         "mul	r7, r6\n\t"
36386 #endif
36387 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36388         "adds	r3, r3, r7\n\t"
36389 #else
36390         "add	r3, r3, r7\n\t"
36391 #endif
36392 #ifdef WOLFSSL_KEIL
36393         "adcs	r4, r4, %[r]\n\t"
36394 #elif defined(__clang__)
36395         "adcs	r4, %[r]\n\t"
36396 #else
36397         "adc	r4, %[r]\n\t"
36398 #endif
36399         "uxth	r7, %[b]\n\t"
36400 #ifdef WOLFSSL_KEIL
36401         "muls	r6, r7, r6\n\t"
36402 #elif defined(__clang__)
36403         "muls	r6, r7\n\t"
36404 #else
36405         "mul	r6, r7\n\t"
36406 #endif
36407 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36408         "lsrs	r7, r6, #16\n\t"
36409 #else
36410         "lsr	r7, r6, #16\n\t"
36411 #endif
36412 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36413         "lsls	r6, r6, #16\n\t"
36414 #else
36415         "lsl	r6, r6, #16\n\t"
36416 #endif
36417 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36418         "adds	r5, r5, r6\n\t"
36419 #else
36420         "add	r5, r5, r6\n\t"
36421 #endif
36422 #ifdef WOLFSSL_KEIL
36423         "adcs	r3, r3, r7\n\t"
36424 #elif defined(__clang__)
36425         "adcs	r3, r7\n\t"
36426 #else
36427         "adc	r3, r7\n\t"
36428 #endif
36429 #ifdef WOLFSSL_KEIL
36430         "adcs	r4, r4, %[r]\n\t"
36431 #elif defined(__clang__)
36432         "adcs	r4, %[r]\n\t"
36433 #else
36434         "adc	r4, %[r]\n\t"
36435 #endif
36436         "#  A[0] * B[8]\n\t"
36437         "mov	%[a], r9\n\t"
36438         "mov	%[b], r10\n\t"
36439         "ldr	%[a], [%[a]]\n\t"
36440         "ldr	%[b], [%[b], #32]\n\t"
36441         "uxth	r6, %[a]\n\t"
36442         "uxth	r7, %[b]\n\t"
36443 #ifdef WOLFSSL_KEIL
36444         "muls	r7, r6, r7\n\t"
36445 #elif defined(__clang__)
36446         "muls	r7, r6\n\t"
36447 #else
36448         "mul	r7, r6\n\t"
36449 #endif
36450 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36451         "adds	r5, r5, r7\n\t"
36452 #else
36453         "add	r5, r5, r7\n\t"
36454 #endif
36455 #ifdef WOLFSSL_KEIL
36456         "adcs	r3, r3, %[r]\n\t"
36457 #elif defined(__clang__)
36458         "adcs	r3, %[r]\n\t"
36459 #else
36460         "adc	r3, %[r]\n\t"
36461 #endif
36462 #ifdef WOLFSSL_KEIL
36463         "adcs	r4, r4, %[r]\n\t"
36464 #elif defined(__clang__)
36465         "adcs	r4, %[r]\n\t"
36466 #else
36467         "adc	r4, %[r]\n\t"
36468 #endif
36469 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36470         "lsrs	r7, %[b], #16\n\t"
36471 #else
36472         "lsr	r7, %[b], #16\n\t"
36473 #endif
36474 #ifdef WOLFSSL_KEIL
36475         "muls	r6, r7, r6\n\t"
36476 #elif defined(__clang__)
36477         "muls	r6, r7\n\t"
36478 #else
36479         "mul	r6, r7\n\t"
36480 #endif
36481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36482         "lsrs	r7, r6, #16\n\t"
36483 #else
36484         "lsr	r7, r6, #16\n\t"
36485 #endif
36486 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36487         "lsls	r6, r6, #16\n\t"
36488 #else
36489         "lsl	r6, r6, #16\n\t"
36490 #endif
36491 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36492         "adds	r5, r5, r6\n\t"
36493 #else
36494         "add	r5, r5, r6\n\t"
36495 #endif
36496 #ifdef WOLFSSL_KEIL
36497         "adcs	r3, r3, r7\n\t"
36498 #elif defined(__clang__)
36499         "adcs	r3, r7\n\t"
36500 #else
36501         "adc	r3, r7\n\t"
36502 #endif
36503 #ifdef WOLFSSL_KEIL
36504         "adcs	r4, r4, %[r]\n\t"
36505 #elif defined(__clang__)
36506         "adcs	r4, %[r]\n\t"
36507 #else
36508         "adc	r4, %[r]\n\t"
36509 #endif
36510 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36511         "lsrs	r6, %[a], #16\n\t"
36512 #else
36513         "lsr	r6, %[a], #16\n\t"
36514 #endif
36515 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36516         "lsrs	r7, %[b], #16\n\t"
36517 #else
36518         "lsr	r7, %[b], #16\n\t"
36519 #endif
36520 #ifdef WOLFSSL_KEIL
36521         "muls	r7, r6, r7\n\t"
36522 #elif defined(__clang__)
36523         "muls	r7, r6\n\t"
36524 #else
36525         "mul	r7, r6\n\t"
36526 #endif
36527 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36528         "adds	r3, r3, r7\n\t"
36529 #else
36530         "add	r3, r3, r7\n\t"
36531 #endif
36532 #ifdef WOLFSSL_KEIL
36533         "adcs	r4, r4, %[r]\n\t"
36534 #elif defined(__clang__)
36535         "adcs	r4, %[r]\n\t"
36536 #else
36537         "adc	r4, %[r]\n\t"
36538 #endif
36539         "uxth	r7, %[b]\n\t"
36540 #ifdef WOLFSSL_KEIL
36541         "muls	r6, r7, r6\n\t"
36542 #elif defined(__clang__)
36543         "muls	r6, r7\n\t"
36544 #else
36545         "mul	r6, r7\n\t"
36546 #endif
36547 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36548         "lsrs	r7, r6, #16\n\t"
36549 #else
36550         "lsr	r7, r6, #16\n\t"
36551 #endif
36552 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36553         "lsls	r6, r6, #16\n\t"
36554 #else
36555         "lsl	r6, r6, #16\n\t"
36556 #endif
36557 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36558         "adds	r5, r5, r6\n\t"
36559 #else
36560         "add	r5, r5, r6\n\t"
36561 #endif
36562 #ifdef WOLFSSL_KEIL
36563         "adcs	r3, r3, r7\n\t"
36564 #elif defined(__clang__)
36565         "adcs	r3, r7\n\t"
36566 #else
36567         "adc	r3, r7\n\t"
36568 #endif
36569 #ifdef WOLFSSL_KEIL
36570         "adcs	r4, r4, %[r]\n\t"
36571 #elif defined(__clang__)
36572         "adcs	r4, %[r]\n\t"
36573 #else
36574         "adc	r4, %[r]\n\t"
36575 #endif
36576         "str	r5, [sp, #32]\n\t"
36577         "#  A[0] * B[9]\n\t"
36578         "movs	r5, #0\n\t"
36579         "mov	%[a], r9\n\t"
36580         "mov	%[b], r10\n\t"
36581         "ldr	%[a], [%[a]]\n\t"
36582         "ldr	%[b], [%[b], #36]\n\t"
36583         "uxth	r6, %[a]\n\t"
36584         "uxth	r7, %[b]\n\t"
36585 #ifdef WOLFSSL_KEIL
36586         "muls	r7, r6, r7\n\t"
36587 #elif defined(__clang__)
36588         "muls	r7, r6\n\t"
36589 #else
36590         "mul	r7, r6\n\t"
36591 #endif
36592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36593         "adds	r3, r3, r7\n\t"
36594 #else
36595         "add	r3, r3, r7\n\t"
36596 #endif
36597 #ifdef WOLFSSL_KEIL
36598         "adcs	r4, r4, %[r]\n\t"
36599 #elif defined(__clang__)
36600         "adcs	r4, %[r]\n\t"
36601 #else
36602         "adc	r4, %[r]\n\t"
36603 #endif
36604 #ifdef WOLFSSL_KEIL
36605         "adcs	r5, r5, %[r]\n\t"
36606 #elif defined(__clang__)
36607         "adcs	r5, %[r]\n\t"
36608 #else
36609         "adc	r5, %[r]\n\t"
36610 #endif
36611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36612         "lsrs	r7, %[b], #16\n\t"
36613 #else
36614         "lsr	r7, %[b], #16\n\t"
36615 #endif
36616 #ifdef WOLFSSL_KEIL
36617         "muls	r6, r7, r6\n\t"
36618 #elif defined(__clang__)
36619         "muls	r6, r7\n\t"
36620 #else
36621         "mul	r6, r7\n\t"
36622 #endif
36623 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36624         "lsrs	r7, r6, #16\n\t"
36625 #else
36626         "lsr	r7, r6, #16\n\t"
36627 #endif
36628 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36629         "lsls	r6, r6, #16\n\t"
36630 #else
36631         "lsl	r6, r6, #16\n\t"
36632 #endif
36633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36634         "adds	r3, r3, r6\n\t"
36635 #else
36636         "add	r3, r3, r6\n\t"
36637 #endif
36638 #ifdef WOLFSSL_KEIL
36639         "adcs	r4, r4, r7\n\t"
36640 #elif defined(__clang__)
36641         "adcs	r4, r7\n\t"
36642 #else
36643         "adc	r4, r7\n\t"
36644 #endif
36645 #ifdef WOLFSSL_KEIL
36646         "adcs	r5, r5, %[r]\n\t"
36647 #elif defined(__clang__)
36648         "adcs	r5, %[r]\n\t"
36649 #else
36650         "adc	r5, %[r]\n\t"
36651 #endif
36652 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36653         "lsrs	r6, %[a], #16\n\t"
36654 #else
36655         "lsr	r6, %[a], #16\n\t"
36656 #endif
36657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36658         "lsrs	r7, %[b], #16\n\t"
36659 #else
36660         "lsr	r7, %[b], #16\n\t"
36661 #endif
36662 #ifdef WOLFSSL_KEIL
36663         "muls	r7, r6, r7\n\t"
36664 #elif defined(__clang__)
36665         "muls	r7, r6\n\t"
36666 #else
36667         "mul	r7, r6\n\t"
36668 #endif
36669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36670         "adds	r4, r4, r7\n\t"
36671 #else
36672         "add	r4, r4, r7\n\t"
36673 #endif
36674 #ifdef WOLFSSL_KEIL
36675         "adcs	r5, r5, %[r]\n\t"
36676 #elif defined(__clang__)
36677         "adcs	r5, %[r]\n\t"
36678 #else
36679         "adc	r5, %[r]\n\t"
36680 #endif
36681         "uxth	r7, %[b]\n\t"
36682 #ifdef WOLFSSL_KEIL
36683         "muls	r6, r7, r6\n\t"
36684 #elif defined(__clang__)
36685         "muls	r6, r7\n\t"
36686 #else
36687         "mul	r6, r7\n\t"
36688 #endif
36689 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36690         "lsrs	r7, r6, #16\n\t"
36691 #else
36692         "lsr	r7, r6, #16\n\t"
36693 #endif
36694 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36695         "lsls	r6, r6, #16\n\t"
36696 #else
36697         "lsl	r6, r6, #16\n\t"
36698 #endif
36699 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36700         "adds	r3, r3, r6\n\t"
36701 #else
36702         "add	r3, r3, r6\n\t"
36703 #endif
36704 #ifdef WOLFSSL_KEIL
36705         "adcs	r4, r4, r7\n\t"
36706 #elif defined(__clang__)
36707         "adcs	r4, r7\n\t"
36708 #else
36709         "adc	r4, r7\n\t"
36710 #endif
36711 #ifdef WOLFSSL_KEIL
36712         "adcs	r5, r5, %[r]\n\t"
36713 #elif defined(__clang__)
36714         "adcs	r5, %[r]\n\t"
36715 #else
36716         "adc	r5, %[r]\n\t"
36717 #endif
36718         "#  A[1] * B[8]\n\t"
36719         "mov	%[a], r9\n\t"
36720         "mov	%[b], r10\n\t"
36721         "ldr	%[a], [%[a], #4]\n\t"
36722         "ldr	%[b], [%[b], #32]\n\t"
36723         "uxth	r6, %[a]\n\t"
36724         "uxth	r7, %[b]\n\t"
36725 #ifdef WOLFSSL_KEIL
36726         "muls	r7, r6, r7\n\t"
36727 #elif defined(__clang__)
36728         "muls	r7, r6\n\t"
36729 #else
36730         "mul	r7, r6\n\t"
36731 #endif
36732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36733         "adds	r3, r3, r7\n\t"
36734 #else
36735         "add	r3, r3, r7\n\t"
36736 #endif
36737 #ifdef WOLFSSL_KEIL
36738         "adcs	r4, r4, %[r]\n\t"
36739 #elif defined(__clang__)
36740         "adcs	r4, %[r]\n\t"
36741 #else
36742         "adc	r4, %[r]\n\t"
36743 #endif
36744 #ifdef WOLFSSL_KEIL
36745         "adcs	r5, r5, %[r]\n\t"
36746 #elif defined(__clang__)
36747         "adcs	r5, %[r]\n\t"
36748 #else
36749         "adc	r5, %[r]\n\t"
36750 #endif
36751 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36752         "lsrs	r7, %[b], #16\n\t"
36753 #else
36754         "lsr	r7, %[b], #16\n\t"
36755 #endif
36756 #ifdef WOLFSSL_KEIL
36757         "muls	r6, r7, r6\n\t"
36758 #elif defined(__clang__)
36759         "muls	r6, r7\n\t"
36760 #else
36761         "mul	r6, r7\n\t"
36762 #endif
36763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36764         "lsrs	r7, r6, #16\n\t"
36765 #else
36766         "lsr	r7, r6, #16\n\t"
36767 #endif
36768 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36769         "lsls	r6, r6, #16\n\t"
36770 #else
36771         "lsl	r6, r6, #16\n\t"
36772 #endif
36773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36774         "adds	r3, r3, r6\n\t"
36775 #else
36776         "add	r3, r3, r6\n\t"
36777 #endif
36778 #ifdef WOLFSSL_KEIL
36779         "adcs	r4, r4, r7\n\t"
36780 #elif defined(__clang__)
36781         "adcs	r4, r7\n\t"
36782 #else
36783         "adc	r4, r7\n\t"
36784 #endif
36785 #ifdef WOLFSSL_KEIL
36786         "adcs	r5, r5, %[r]\n\t"
36787 #elif defined(__clang__)
36788         "adcs	r5, %[r]\n\t"
36789 #else
36790         "adc	r5, %[r]\n\t"
36791 #endif
36792 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36793         "lsrs	r6, %[a], #16\n\t"
36794 #else
36795         "lsr	r6, %[a], #16\n\t"
36796 #endif
36797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36798         "lsrs	r7, %[b], #16\n\t"
36799 #else
36800         "lsr	r7, %[b], #16\n\t"
36801 #endif
36802 #ifdef WOLFSSL_KEIL
36803         "muls	r7, r6, r7\n\t"
36804 #elif defined(__clang__)
36805         "muls	r7, r6\n\t"
36806 #else
36807         "mul	r7, r6\n\t"
36808 #endif
36809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36810         "adds	r4, r4, r7\n\t"
36811 #else
36812         "add	r4, r4, r7\n\t"
36813 #endif
36814 #ifdef WOLFSSL_KEIL
36815         "adcs	r5, r5, %[r]\n\t"
36816 #elif defined(__clang__)
36817         "adcs	r5, %[r]\n\t"
36818 #else
36819         "adc	r5, %[r]\n\t"
36820 #endif
36821         "uxth	r7, %[b]\n\t"
36822 #ifdef WOLFSSL_KEIL
36823         "muls	r6, r7, r6\n\t"
36824 #elif defined(__clang__)
36825         "muls	r6, r7\n\t"
36826 #else
36827         "mul	r6, r7\n\t"
36828 #endif
36829 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36830         "lsrs	r7, r6, #16\n\t"
36831 #else
36832         "lsr	r7, r6, #16\n\t"
36833 #endif
36834 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36835         "lsls	r6, r6, #16\n\t"
36836 #else
36837         "lsl	r6, r6, #16\n\t"
36838 #endif
36839 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36840         "adds	r3, r3, r6\n\t"
36841 #else
36842         "add	r3, r3, r6\n\t"
36843 #endif
36844 #ifdef WOLFSSL_KEIL
36845         "adcs	r4, r4, r7\n\t"
36846 #elif defined(__clang__)
36847         "adcs	r4, r7\n\t"
36848 #else
36849         "adc	r4, r7\n\t"
36850 #endif
36851 #ifdef WOLFSSL_KEIL
36852         "adcs	r5, r5, %[r]\n\t"
36853 #elif defined(__clang__)
36854         "adcs	r5, %[r]\n\t"
36855 #else
36856         "adc	r5, %[r]\n\t"
36857 #endif
36858         "#  A[2] * B[7]\n\t"
36859         "mov	%[a], r9\n\t"
36860         "mov	%[b], r10\n\t"
36861         "ldr	%[a], [%[a], #8]\n\t"
36862         "ldr	%[b], [%[b], #28]\n\t"
36863         "uxth	r6, %[a]\n\t"
36864         "uxth	r7, %[b]\n\t"
36865 #ifdef WOLFSSL_KEIL
36866         "muls	r7, r6, r7\n\t"
36867 #elif defined(__clang__)
36868         "muls	r7, r6\n\t"
36869 #else
36870         "mul	r7, r6\n\t"
36871 #endif
36872 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36873         "adds	r3, r3, r7\n\t"
36874 #else
36875         "add	r3, r3, r7\n\t"
36876 #endif
36877 #ifdef WOLFSSL_KEIL
36878         "adcs	r4, r4, %[r]\n\t"
36879 #elif defined(__clang__)
36880         "adcs	r4, %[r]\n\t"
36881 #else
36882         "adc	r4, %[r]\n\t"
36883 #endif
36884 #ifdef WOLFSSL_KEIL
36885         "adcs	r5, r5, %[r]\n\t"
36886 #elif defined(__clang__)
36887         "adcs	r5, %[r]\n\t"
36888 #else
36889         "adc	r5, %[r]\n\t"
36890 #endif
36891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36892         "lsrs	r7, %[b], #16\n\t"
36893 #else
36894         "lsr	r7, %[b], #16\n\t"
36895 #endif
36896 #ifdef WOLFSSL_KEIL
36897         "muls	r6, r7, r6\n\t"
36898 #elif defined(__clang__)
36899         "muls	r6, r7\n\t"
36900 #else
36901         "mul	r6, r7\n\t"
36902 #endif
36903 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36904         "lsrs	r7, r6, #16\n\t"
36905 #else
36906         "lsr	r7, r6, #16\n\t"
36907 #endif
36908 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36909         "lsls	r6, r6, #16\n\t"
36910 #else
36911         "lsl	r6, r6, #16\n\t"
36912 #endif
36913 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36914         "adds	r3, r3, r6\n\t"
36915 #else
36916         "add	r3, r3, r6\n\t"
36917 #endif
36918 #ifdef WOLFSSL_KEIL
36919         "adcs	r4, r4, r7\n\t"
36920 #elif defined(__clang__)
36921         "adcs	r4, r7\n\t"
36922 #else
36923         "adc	r4, r7\n\t"
36924 #endif
36925 #ifdef WOLFSSL_KEIL
36926         "adcs	r5, r5, %[r]\n\t"
36927 #elif defined(__clang__)
36928         "adcs	r5, %[r]\n\t"
36929 #else
36930         "adc	r5, %[r]\n\t"
36931 #endif
36932 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36933         "lsrs	r6, %[a], #16\n\t"
36934 #else
36935         "lsr	r6, %[a], #16\n\t"
36936 #endif
36937 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36938         "lsrs	r7, %[b], #16\n\t"
36939 #else
36940         "lsr	r7, %[b], #16\n\t"
36941 #endif
36942 #ifdef WOLFSSL_KEIL
36943         "muls	r7, r6, r7\n\t"
36944 #elif defined(__clang__)
36945         "muls	r7, r6\n\t"
36946 #else
36947         "mul	r7, r6\n\t"
36948 #endif
36949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36950         "adds	r4, r4, r7\n\t"
36951 #else
36952         "add	r4, r4, r7\n\t"
36953 #endif
36954 #ifdef WOLFSSL_KEIL
36955         "adcs	r5, r5, %[r]\n\t"
36956 #elif defined(__clang__)
36957         "adcs	r5, %[r]\n\t"
36958 #else
36959         "adc	r5, %[r]\n\t"
36960 #endif
36961         "uxth	r7, %[b]\n\t"
36962 #ifdef WOLFSSL_KEIL
36963         "muls	r6, r7, r6\n\t"
36964 #elif defined(__clang__)
36965         "muls	r6, r7\n\t"
36966 #else
36967         "mul	r6, r7\n\t"
36968 #endif
36969 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36970         "lsrs	r7, r6, #16\n\t"
36971 #else
36972         "lsr	r7, r6, #16\n\t"
36973 #endif
36974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36975         "lsls	r6, r6, #16\n\t"
36976 #else
36977         "lsl	r6, r6, #16\n\t"
36978 #endif
36979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
36980         "adds	r3, r3, r6\n\t"
36981 #else
36982         "add	r3, r3, r6\n\t"
36983 #endif
36984 #ifdef WOLFSSL_KEIL
36985         "adcs	r4, r4, r7\n\t"
36986 #elif defined(__clang__)
36987         "adcs	r4, r7\n\t"
36988 #else
36989         "adc	r4, r7\n\t"
36990 #endif
36991 #ifdef WOLFSSL_KEIL
36992         "adcs	r5, r5, %[r]\n\t"
36993 #elif defined(__clang__)
36994         "adcs	r5, %[r]\n\t"
36995 #else
36996         "adc	r5, %[r]\n\t"
36997 #endif
36998         "#  A[3] * B[6]\n\t"
36999         "mov	%[a], r9\n\t"
37000         "mov	%[b], r10\n\t"
37001         "ldr	%[a], [%[a], #12]\n\t"
37002         "ldr	%[b], [%[b], #24]\n\t"
37003         "uxth	r6, %[a]\n\t"
37004         "uxth	r7, %[b]\n\t"
37005 #ifdef WOLFSSL_KEIL
37006         "muls	r7, r6, r7\n\t"
37007 #elif defined(__clang__)
37008         "muls	r7, r6\n\t"
37009 #else
37010         "mul	r7, r6\n\t"
37011 #endif
37012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37013         "adds	r3, r3, r7\n\t"
37014 #else
37015         "add	r3, r3, r7\n\t"
37016 #endif
37017 #ifdef WOLFSSL_KEIL
37018         "adcs	r4, r4, %[r]\n\t"
37019 #elif defined(__clang__)
37020         "adcs	r4, %[r]\n\t"
37021 #else
37022         "adc	r4, %[r]\n\t"
37023 #endif
37024 #ifdef WOLFSSL_KEIL
37025         "adcs	r5, r5, %[r]\n\t"
37026 #elif defined(__clang__)
37027         "adcs	r5, %[r]\n\t"
37028 #else
37029         "adc	r5, %[r]\n\t"
37030 #endif
37031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37032         "lsrs	r7, %[b], #16\n\t"
37033 #else
37034         "lsr	r7, %[b], #16\n\t"
37035 #endif
37036 #ifdef WOLFSSL_KEIL
37037         "muls	r6, r7, r6\n\t"
37038 #elif defined(__clang__)
37039         "muls	r6, r7\n\t"
37040 #else
37041         "mul	r6, r7\n\t"
37042 #endif
37043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37044         "lsrs	r7, r6, #16\n\t"
37045 #else
37046         "lsr	r7, r6, #16\n\t"
37047 #endif
37048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37049         "lsls	r6, r6, #16\n\t"
37050 #else
37051         "lsl	r6, r6, #16\n\t"
37052 #endif
37053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37054         "adds	r3, r3, r6\n\t"
37055 #else
37056         "add	r3, r3, r6\n\t"
37057 #endif
37058 #ifdef WOLFSSL_KEIL
37059         "adcs	r4, r4, r7\n\t"
37060 #elif defined(__clang__)
37061         "adcs	r4, r7\n\t"
37062 #else
37063         "adc	r4, r7\n\t"
37064 #endif
37065 #ifdef WOLFSSL_KEIL
37066         "adcs	r5, r5, %[r]\n\t"
37067 #elif defined(__clang__)
37068         "adcs	r5, %[r]\n\t"
37069 #else
37070         "adc	r5, %[r]\n\t"
37071 #endif
37072 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37073         "lsrs	r6, %[a], #16\n\t"
37074 #else
37075         "lsr	r6, %[a], #16\n\t"
37076 #endif
37077 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37078         "lsrs	r7, %[b], #16\n\t"
37079 #else
37080         "lsr	r7, %[b], #16\n\t"
37081 #endif
37082 #ifdef WOLFSSL_KEIL
37083         "muls	r7, r6, r7\n\t"
37084 #elif defined(__clang__)
37085         "muls	r7, r6\n\t"
37086 #else
37087         "mul	r7, r6\n\t"
37088 #endif
37089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37090         "adds	r4, r4, r7\n\t"
37091 #else
37092         "add	r4, r4, r7\n\t"
37093 #endif
37094 #ifdef WOLFSSL_KEIL
37095         "adcs	r5, r5, %[r]\n\t"
37096 #elif defined(__clang__)
37097         "adcs	r5, %[r]\n\t"
37098 #else
37099         "adc	r5, %[r]\n\t"
37100 #endif
37101         "uxth	r7, %[b]\n\t"
37102 #ifdef WOLFSSL_KEIL
37103         "muls	r6, r7, r6\n\t"
37104 #elif defined(__clang__)
37105         "muls	r6, r7\n\t"
37106 #else
37107         "mul	r6, r7\n\t"
37108 #endif
37109 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37110         "lsrs	r7, r6, #16\n\t"
37111 #else
37112         "lsr	r7, r6, #16\n\t"
37113 #endif
37114 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37115         "lsls	r6, r6, #16\n\t"
37116 #else
37117         "lsl	r6, r6, #16\n\t"
37118 #endif
37119 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37120         "adds	r3, r3, r6\n\t"
37121 #else
37122         "add	r3, r3, r6\n\t"
37123 #endif
37124 #ifdef WOLFSSL_KEIL
37125         "adcs	r4, r4, r7\n\t"
37126 #elif defined(__clang__)
37127         "adcs	r4, r7\n\t"
37128 #else
37129         "adc	r4, r7\n\t"
37130 #endif
37131 #ifdef WOLFSSL_KEIL
37132         "adcs	r5, r5, %[r]\n\t"
37133 #elif defined(__clang__)
37134         "adcs	r5, %[r]\n\t"
37135 #else
37136         "adc	r5, %[r]\n\t"
37137 #endif
37138         "#  A[4] * B[5]\n\t"
37139         "mov	%[a], r9\n\t"
37140         "mov	%[b], r10\n\t"
37141         "ldr	%[a], [%[a], #16]\n\t"
37142         "ldr	%[b], [%[b], #20]\n\t"
37143         "uxth	r6, %[a]\n\t"
37144         "uxth	r7, %[b]\n\t"
37145 #ifdef WOLFSSL_KEIL
37146         "muls	r7, r6, r7\n\t"
37147 #elif defined(__clang__)
37148         "muls	r7, r6\n\t"
37149 #else
37150         "mul	r7, r6\n\t"
37151 #endif
37152 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37153         "adds	r3, r3, r7\n\t"
37154 #else
37155         "add	r3, r3, r7\n\t"
37156 #endif
37157 #ifdef WOLFSSL_KEIL
37158         "adcs	r4, r4, %[r]\n\t"
37159 #elif defined(__clang__)
37160         "adcs	r4, %[r]\n\t"
37161 #else
37162         "adc	r4, %[r]\n\t"
37163 #endif
37164 #ifdef WOLFSSL_KEIL
37165         "adcs	r5, r5, %[r]\n\t"
37166 #elif defined(__clang__)
37167         "adcs	r5, %[r]\n\t"
37168 #else
37169         "adc	r5, %[r]\n\t"
37170 #endif
37171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37172         "lsrs	r7, %[b], #16\n\t"
37173 #else
37174         "lsr	r7, %[b], #16\n\t"
37175 #endif
37176 #ifdef WOLFSSL_KEIL
37177         "muls	r6, r7, r6\n\t"
37178 #elif defined(__clang__)
37179         "muls	r6, r7\n\t"
37180 #else
37181         "mul	r6, r7\n\t"
37182 #endif
37183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37184         "lsrs	r7, r6, #16\n\t"
37185 #else
37186         "lsr	r7, r6, #16\n\t"
37187 #endif
37188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37189         "lsls	r6, r6, #16\n\t"
37190 #else
37191         "lsl	r6, r6, #16\n\t"
37192 #endif
37193 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37194         "adds	r3, r3, r6\n\t"
37195 #else
37196         "add	r3, r3, r6\n\t"
37197 #endif
37198 #ifdef WOLFSSL_KEIL
37199         "adcs	r4, r4, r7\n\t"
37200 #elif defined(__clang__)
37201         "adcs	r4, r7\n\t"
37202 #else
37203         "adc	r4, r7\n\t"
37204 #endif
37205 #ifdef WOLFSSL_KEIL
37206         "adcs	r5, r5, %[r]\n\t"
37207 #elif defined(__clang__)
37208         "adcs	r5, %[r]\n\t"
37209 #else
37210         "adc	r5, %[r]\n\t"
37211 #endif
37212 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37213         "lsrs	r6, %[a], #16\n\t"
37214 #else
37215         "lsr	r6, %[a], #16\n\t"
37216 #endif
37217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37218         "lsrs	r7, %[b], #16\n\t"
37219 #else
37220         "lsr	r7, %[b], #16\n\t"
37221 #endif
37222 #ifdef WOLFSSL_KEIL
37223         "muls	r7, r6, r7\n\t"
37224 #elif defined(__clang__)
37225         "muls	r7, r6\n\t"
37226 #else
37227         "mul	r7, r6\n\t"
37228 #endif
37229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37230         "adds	r4, r4, r7\n\t"
37231 #else
37232         "add	r4, r4, r7\n\t"
37233 #endif
37234 #ifdef WOLFSSL_KEIL
37235         "adcs	r5, r5, %[r]\n\t"
37236 #elif defined(__clang__)
37237         "adcs	r5, %[r]\n\t"
37238 #else
37239         "adc	r5, %[r]\n\t"
37240 #endif
37241         "uxth	r7, %[b]\n\t"
37242 #ifdef WOLFSSL_KEIL
37243         "muls	r6, r7, r6\n\t"
37244 #elif defined(__clang__)
37245         "muls	r6, r7\n\t"
37246 #else
37247         "mul	r6, r7\n\t"
37248 #endif
37249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37250         "lsrs	r7, r6, #16\n\t"
37251 #else
37252         "lsr	r7, r6, #16\n\t"
37253 #endif
37254 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37255         "lsls	r6, r6, #16\n\t"
37256 #else
37257         "lsl	r6, r6, #16\n\t"
37258 #endif
37259 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37260         "adds	r3, r3, r6\n\t"
37261 #else
37262         "add	r3, r3, r6\n\t"
37263 #endif
37264 #ifdef WOLFSSL_KEIL
37265         "adcs	r4, r4, r7\n\t"
37266 #elif defined(__clang__)
37267         "adcs	r4, r7\n\t"
37268 #else
37269         "adc	r4, r7\n\t"
37270 #endif
37271 #ifdef WOLFSSL_KEIL
37272         "adcs	r5, r5, %[r]\n\t"
37273 #elif defined(__clang__)
37274         "adcs	r5, %[r]\n\t"
37275 #else
37276         "adc	r5, %[r]\n\t"
37277 #endif
37278         "#  A[5] * B[4]\n\t"
37279         "mov	%[a], r9\n\t"
37280         "mov	%[b], r10\n\t"
37281         "ldr	%[a], [%[a], #20]\n\t"
37282         "ldr	%[b], [%[b], #16]\n\t"
37283         "uxth	r6, %[a]\n\t"
37284         "uxth	r7, %[b]\n\t"
37285 #ifdef WOLFSSL_KEIL
37286         "muls	r7, r6, r7\n\t"
37287 #elif defined(__clang__)
37288         "muls	r7, r6\n\t"
37289 #else
37290         "mul	r7, r6\n\t"
37291 #endif
37292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37293         "adds	r3, r3, r7\n\t"
37294 #else
37295         "add	r3, r3, r7\n\t"
37296 #endif
37297 #ifdef WOLFSSL_KEIL
37298         "adcs	r4, r4, %[r]\n\t"
37299 #elif defined(__clang__)
37300         "adcs	r4, %[r]\n\t"
37301 #else
37302         "adc	r4, %[r]\n\t"
37303 #endif
37304 #ifdef WOLFSSL_KEIL
37305         "adcs	r5, r5, %[r]\n\t"
37306 #elif defined(__clang__)
37307         "adcs	r5, %[r]\n\t"
37308 #else
37309         "adc	r5, %[r]\n\t"
37310 #endif
37311 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37312         "lsrs	r7, %[b], #16\n\t"
37313 #else
37314         "lsr	r7, %[b], #16\n\t"
37315 #endif
37316 #ifdef WOLFSSL_KEIL
37317         "muls	r6, r7, r6\n\t"
37318 #elif defined(__clang__)
37319         "muls	r6, r7\n\t"
37320 #else
37321         "mul	r6, r7\n\t"
37322 #endif
37323 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37324         "lsrs	r7, r6, #16\n\t"
37325 #else
37326         "lsr	r7, r6, #16\n\t"
37327 #endif
37328 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37329         "lsls	r6, r6, #16\n\t"
37330 #else
37331         "lsl	r6, r6, #16\n\t"
37332 #endif
37333 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37334         "adds	r3, r3, r6\n\t"
37335 #else
37336         "add	r3, r3, r6\n\t"
37337 #endif
37338 #ifdef WOLFSSL_KEIL
37339         "adcs	r4, r4, r7\n\t"
37340 #elif defined(__clang__)
37341         "adcs	r4, r7\n\t"
37342 #else
37343         "adc	r4, r7\n\t"
37344 #endif
37345 #ifdef WOLFSSL_KEIL
37346         "adcs	r5, r5, %[r]\n\t"
37347 #elif defined(__clang__)
37348         "adcs	r5, %[r]\n\t"
37349 #else
37350         "adc	r5, %[r]\n\t"
37351 #endif
37352 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37353         "lsrs	r6, %[a], #16\n\t"
37354 #else
37355         "lsr	r6, %[a], #16\n\t"
37356 #endif
37357 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37358         "lsrs	r7, %[b], #16\n\t"
37359 #else
37360         "lsr	r7, %[b], #16\n\t"
37361 #endif
37362 #ifdef WOLFSSL_KEIL
37363         "muls	r7, r6, r7\n\t"
37364 #elif defined(__clang__)
37365         "muls	r7, r6\n\t"
37366 #else
37367         "mul	r7, r6\n\t"
37368 #endif
37369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37370         "adds	r4, r4, r7\n\t"
37371 #else
37372         "add	r4, r4, r7\n\t"
37373 #endif
37374 #ifdef WOLFSSL_KEIL
37375         "adcs	r5, r5, %[r]\n\t"
37376 #elif defined(__clang__)
37377         "adcs	r5, %[r]\n\t"
37378 #else
37379         "adc	r5, %[r]\n\t"
37380 #endif
37381         "uxth	r7, %[b]\n\t"
37382 #ifdef WOLFSSL_KEIL
37383         "muls	r6, r7, r6\n\t"
37384 #elif defined(__clang__)
37385         "muls	r6, r7\n\t"
37386 #else
37387         "mul	r6, r7\n\t"
37388 #endif
37389 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37390         "lsrs	r7, r6, #16\n\t"
37391 #else
37392         "lsr	r7, r6, #16\n\t"
37393 #endif
37394 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37395         "lsls	r6, r6, #16\n\t"
37396 #else
37397         "lsl	r6, r6, #16\n\t"
37398 #endif
37399 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37400         "adds	r3, r3, r6\n\t"
37401 #else
37402         "add	r3, r3, r6\n\t"
37403 #endif
37404 #ifdef WOLFSSL_KEIL
37405         "adcs	r4, r4, r7\n\t"
37406 #elif defined(__clang__)
37407         "adcs	r4, r7\n\t"
37408 #else
37409         "adc	r4, r7\n\t"
37410 #endif
37411 #ifdef WOLFSSL_KEIL
37412         "adcs	r5, r5, %[r]\n\t"
37413 #elif defined(__clang__)
37414         "adcs	r5, %[r]\n\t"
37415 #else
37416         "adc	r5, %[r]\n\t"
37417 #endif
37418         "#  A[6] * B[3]\n\t"
37419         "mov	%[a], r9\n\t"
37420         "mov	%[b], r10\n\t"
37421         "ldr	%[a], [%[a], #24]\n\t"
37422         "ldr	%[b], [%[b], #12]\n\t"
37423         "uxth	r6, %[a]\n\t"
37424         "uxth	r7, %[b]\n\t"
37425 #ifdef WOLFSSL_KEIL
37426         "muls	r7, r6, r7\n\t"
37427 #elif defined(__clang__)
37428         "muls	r7, r6\n\t"
37429 #else
37430         "mul	r7, r6\n\t"
37431 #endif
37432 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37433         "adds	r3, r3, r7\n\t"
37434 #else
37435         "add	r3, r3, r7\n\t"
37436 #endif
37437 #ifdef WOLFSSL_KEIL
37438         "adcs	r4, r4, %[r]\n\t"
37439 #elif defined(__clang__)
37440         "adcs	r4, %[r]\n\t"
37441 #else
37442         "adc	r4, %[r]\n\t"
37443 #endif
37444 #ifdef WOLFSSL_KEIL
37445         "adcs	r5, r5, %[r]\n\t"
37446 #elif defined(__clang__)
37447         "adcs	r5, %[r]\n\t"
37448 #else
37449         "adc	r5, %[r]\n\t"
37450 #endif
37451 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37452         "lsrs	r7, %[b], #16\n\t"
37453 #else
37454         "lsr	r7, %[b], #16\n\t"
37455 #endif
37456 #ifdef WOLFSSL_KEIL
37457         "muls	r6, r7, r6\n\t"
37458 #elif defined(__clang__)
37459         "muls	r6, r7\n\t"
37460 #else
37461         "mul	r6, r7\n\t"
37462 #endif
37463 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37464         "lsrs	r7, r6, #16\n\t"
37465 #else
37466         "lsr	r7, r6, #16\n\t"
37467 #endif
37468 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37469         "lsls	r6, r6, #16\n\t"
37470 #else
37471         "lsl	r6, r6, #16\n\t"
37472 #endif
37473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37474         "adds	r3, r3, r6\n\t"
37475 #else
37476         "add	r3, r3, r6\n\t"
37477 #endif
37478 #ifdef WOLFSSL_KEIL
37479         "adcs	r4, r4, r7\n\t"
37480 #elif defined(__clang__)
37481         "adcs	r4, r7\n\t"
37482 #else
37483         "adc	r4, r7\n\t"
37484 #endif
37485 #ifdef WOLFSSL_KEIL
37486         "adcs	r5, r5, %[r]\n\t"
37487 #elif defined(__clang__)
37488         "adcs	r5, %[r]\n\t"
37489 #else
37490         "adc	r5, %[r]\n\t"
37491 #endif
37492 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37493         "lsrs	r6, %[a], #16\n\t"
37494 #else
37495         "lsr	r6, %[a], #16\n\t"
37496 #endif
37497 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37498         "lsrs	r7, %[b], #16\n\t"
37499 #else
37500         "lsr	r7, %[b], #16\n\t"
37501 #endif
37502 #ifdef WOLFSSL_KEIL
37503         "muls	r7, r6, r7\n\t"
37504 #elif defined(__clang__)
37505         "muls	r7, r6\n\t"
37506 #else
37507         "mul	r7, r6\n\t"
37508 #endif
37509 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37510         "adds	r4, r4, r7\n\t"
37511 #else
37512         "add	r4, r4, r7\n\t"
37513 #endif
37514 #ifdef WOLFSSL_KEIL
37515         "adcs	r5, r5, %[r]\n\t"
37516 #elif defined(__clang__)
37517         "adcs	r5, %[r]\n\t"
37518 #else
37519         "adc	r5, %[r]\n\t"
37520 #endif
37521         "uxth	r7, %[b]\n\t"
37522 #ifdef WOLFSSL_KEIL
37523         "muls	r6, r7, r6\n\t"
37524 #elif defined(__clang__)
37525         "muls	r6, r7\n\t"
37526 #else
37527         "mul	r6, r7\n\t"
37528 #endif
37529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37530         "lsrs	r7, r6, #16\n\t"
37531 #else
37532         "lsr	r7, r6, #16\n\t"
37533 #endif
37534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37535         "lsls	r6, r6, #16\n\t"
37536 #else
37537         "lsl	r6, r6, #16\n\t"
37538 #endif
37539 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37540         "adds	r3, r3, r6\n\t"
37541 #else
37542         "add	r3, r3, r6\n\t"
37543 #endif
37544 #ifdef WOLFSSL_KEIL
37545         "adcs	r4, r4, r7\n\t"
37546 #elif defined(__clang__)
37547         "adcs	r4, r7\n\t"
37548 #else
37549         "adc	r4, r7\n\t"
37550 #endif
37551 #ifdef WOLFSSL_KEIL
37552         "adcs	r5, r5, %[r]\n\t"
37553 #elif defined(__clang__)
37554         "adcs	r5, %[r]\n\t"
37555 #else
37556         "adc	r5, %[r]\n\t"
37557 #endif
37558         "#  A[7] * B[2]\n\t"
37559         "mov	%[a], r9\n\t"
37560         "mov	%[b], r10\n\t"
37561         "ldr	%[a], [%[a], #28]\n\t"
37562         "ldr	%[b], [%[b], #8]\n\t"
37563         "uxth	r6, %[a]\n\t"
37564         "uxth	r7, %[b]\n\t"
37565 #ifdef WOLFSSL_KEIL
37566         "muls	r7, r6, r7\n\t"
37567 #elif defined(__clang__)
37568         "muls	r7, r6\n\t"
37569 #else
37570         "mul	r7, r6\n\t"
37571 #endif
37572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37573         "adds	r3, r3, r7\n\t"
37574 #else
37575         "add	r3, r3, r7\n\t"
37576 #endif
37577 #ifdef WOLFSSL_KEIL
37578         "adcs	r4, r4, %[r]\n\t"
37579 #elif defined(__clang__)
37580         "adcs	r4, %[r]\n\t"
37581 #else
37582         "adc	r4, %[r]\n\t"
37583 #endif
37584 #ifdef WOLFSSL_KEIL
37585         "adcs	r5, r5, %[r]\n\t"
37586 #elif defined(__clang__)
37587         "adcs	r5, %[r]\n\t"
37588 #else
37589         "adc	r5, %[r]\n\t"
37590 #endif
37591 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37592         "lsrs	r7, %[b], #16\n\t"
37593 #else
37594         "lsr	r7, %[b], #16\n\t"
37595 #endif
37596 #ifdef WOLFSSL_KEIL
37597         "muls	r6, r7, r6\n\t"
37598 #elif defined(__clang__)
37599         "muls	r6, r7\n\t"
37600 #else
37601         "mul	r6, r7\n\t"
37602 #endif
37603 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37604         "lsrs	r7, r6, #16\n\t"
37605 #else
37606         "lsr	r7, r6, #16\n\t"
37607 #endif
37608 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37609         "lsls	r6, r6, #16\n\t"
37610 #else
37611         "lsl	r6, r6, #16\n\t"
37612 #endif
37613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37614         "adds	r3, r3, r6\n\t"
37615 #else
37616         "add	r3, r3, r6\n\t"
37617 #endif
37618 #ifdef WOLFSSL_KEIL
37619         "adcs	r4, r4, r7\n\t"
37620 #elif defined(__clang__)
37621         "adcs	r4, r7\n\t"
37622 #else
37623         "adc	r4, r7\n\t"
37624 #endif
37625 #ifdef WOLFSSL_KEIL
37626         "adcs	r5, r5, %[r]\n\t"
37627 #elif defined(__clang__)
37628         "adcs	r5, %[r]\n\t"
37629 #else
37630         "adc	r5, %[r]\n\t"
37631 #endif
37632 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37633         "lsrs	r6, %[a], #16\n\t"
37634 #else
37635         "lsr	r6, %[a], #16\n\t"
37636 #endif
37637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37638         "lsrs	r7, %[b], #16\n\t"
37639 #else
37640         "lsr	r7, %[b], #16\n\t"
37641 #endif
37642 #ifdef WOLFSSL_KEIL
37643         "muls	r7, r6, r7\n\t"
37644 #elif defined(__clang__)
37645         "muls	r7, r6\n\t"
37646 #else
37647         "mul	r7, r6\n\t"
37648 #endif
37649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37650         "adds	r4, r4, r7\n\t"
37651 #else
37652         "add	r4, r4, r7\n\t"
37653 #endif
37654 #ifdef WOLFSSL_KEIL
37655         "adcs	r5, r5, %[r]\n\t"
37656 #elif defined(__clang__)
37657         "adcs	r5, %[r]\n\t"
37658 #else
37659         "adc	r5, %[r]\n\t"
37660 #endif
37661         "uxth	r7, %[b]\n\t"
37662 #ifdef WOLFSSL_KEIL
37663         "muls	r6, r7, r6\n\t"
37664 #elif defined(__clang__)
37665         "muls	r6, r7\n\t"
37666 #else
37667         "mul	r6, r7\n\t"
37668 #endif
37669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37670         "lsrs	r7, r6, #16\n\t"
37671 #else
37672         "lsr	r7, r6, #16\n\t"
37673 #endif
37674 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37675         "lsls	r6, r6, #16\n\t"
37676 #else
37677         "lsl	r6, r6, #16\n\t"
37678 #endif
37679 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37680         "adds	r3, r3, r6\n\t"
37681 #else
37682         "add	r3, r3, r6\n\t"
37683 #endif
37684 #ifdef WOLFSSL_KEIL
37685         "adcs	r4, r4, r7\n\t"
37686 #elif defined(__clang__)
37687         "adcs	r4, r7\n\t"
37688 #else
37689         "adc	r4, r7\n\t"
37690 #endif
37691 #ifdef WOLFSSL_KEIL
37692         "adcs	r5, r5, %[r]\n\t"
37693 #elif defined(__clang__)
37694         "adcs	r5, %[r]\n\t"
37695 #else
37696         "adc	r5, %[r]\n\t"
37697 #endif
37698         "#  A[8] * B[1]\n\t"
37699         "mov	%[a], r9\n\t"
37700         "mov	%[b], r10\n\t"
37701         "ldr	%[a], [%[a], #32]\n\t"
37702         "ldr	%[b], [%[b], #4]\n\t"
37703         "uxth	r6, %[a]\n\t"
37704         "uxth	r7, %[b]\n\t"
37705 #ifdef WOLFSSL_KEIL
37706         "muls	r7, r6, r7\n\t"
37707 #elif defined(__clang__)
37708         "muls	r7, r6\n\t"
37709 #else
37710         "mul	r7, r6\n\t"
37711 #endif
37712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37713         "adds	r3, r3, r7\n\t"
37714 #else
37715         "add	r3, r3, r7\n\t"
37716 #endif
37717 #ifdef WOLFSSL_KEIL
37718         "adcs	r4, r4, %[r]\n\t"
37719 #elif defined(__clang__)
37720         "adcs	r4, %[r]\n\t"
37721 #else
37722         "adc	r4, %[r]\n\t"
37723 #endif
37724 #ifdef WOLFSSL_KEIL
37725         "adcs	r5, r5, %[r]\n\t"
37726 #elif defined(__clang__)
37727         "adcs	r5, %[r]\n\t"
37728 #else
37729         "adc	r5, %[r]\n\t"
37730 #endif
37731 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37732         "lsrs	r7, %[b], #16\n\t"
37733 #else
37734         "lsr	r7, %[b], #16\n\t"
37735 #endif
37736 #ifdef WOLFSSL_KEIL
37737         "muls	r6, r7, r6\n\t"
37738 #elif defined(__clang__)
37739         "muls	r6, r7\n\t"
37740 #else
37741         "mul	r6, r7\n\t"
37742 #endif
37743 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37744         "lsrs	r7, r6, #16\n\t"
37745 #else
37746         "lsr	r7, r6, #16\n\t"
37747 #endif
37748 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37749         "lsls	r6, r6, #16\n\t"
37750 #else
37751         "lsl	r6, r6, #16\n\t"
37752 #endif
37753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37754         "adds	r3, r3, r6\n\t"
37755 #else
37756         "add	r3, r3, r6\n\t"
37757 #endif
37758 #ifdef WOLFSSL_KEIL
37759         "adcs	r4, r4, r7\n\t"
37760 #elif defined(__clang__)
37761         "adcs	r4, r7\n\t"
37762 #else
37763         "adc	r4, r7\n\t"
37764 #endif
37765 #ifdef WOLFSSL_KEIL
37766         "adcs	r5, r5, %[r]\n\t"
37767 #elif defined(__clang__)
37768         "adcs	r5, %[r]\n\t"
37769 #else
37770         "adc	r5, %[r]\n\t"
37771 #endif
37772 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37773         "lsrs	r6, %[a], #16\n\t"
37774 #else
37775         "lsr	r6, %[a], #16\n\t"
37776 #endif
37777 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37778         "lsrs	r7, %[b], #16\n\t"
37779 #else
37780         "lsr	r7, %[b], #16\n\t"
37781 #endif
37782 #ifdef WOLFSSL_KEIL
37783         "muls	r7, r6, r7\n\t"
37784 #elif defined(__clang__)
37785         "muls	r7, r6\n\t"
37786 #else
37787         "mul	r7, r6\n\t"
37788 #endif
37789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37790         "adds	r4, r4, r7\n\t"
37791 #else
37792         "add	r4, r4, r7\n\t"
37793 #endif
37794 #ifdef WOLFSSL_KEIL
37795         "adcs	r5, r5, %[r]\n\t"
37796 #elif defined(__clang__)
37797         "adcs	r5, %[r]\n\t"
37798 #else
37799         "adc	r5, %[r]\n\t"
37800 #endif
37801         "uxth	r7, %[b]\n\t"
37802 #ifdef WOLFSSL_KEIL
37803         "muls	r6, r7, r6\n\t"
37804 #elif defined(__clang__)
37805         "muls	r6, r7\n\t"
37806 #else
37807         "mul	r6, r7\n\t"
37808 #endif
37809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37810         "lsrs	r7, r6, #16\n\t"
37811 #else
37812         "lsr	r7, r6, #16\n\t"
37813 #endif
37814 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37815         "lsls	r6, r6, #16\n\t"
37816 #else
37817         "lsl	r6, r6, #16\n\t"
37818 #endif
37819 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37820         "adds	r3, r3, r6\n\t"
37821 #else
37822         "add	r3, r3, r6\n\t"
37823 #endif
37824 #ifdef WOLFSSL_KEIL
37825         "adcs	r4, r4, r7\n\t"
37826 #elif defined(__clang__)
37827         "adcs	r4, r7\n\t"
37828 #else
37829         "adc	r4, r7\n\t"
37830 #endif
37831 #ifdef WOLFSSL_KEIL
37832         "adcs	r5, r5, %[r]\n\t"
37833 #elif defined(__clang__)
37834         "adcs	r5, %[r]\n\t"
37835 #else
37836         "adc	r5, %[r]\n\t"
37837 #endif
37838         "#  A[9] * B[0]\n\t"
37839         "mov	%[a], r9\n\t"
37840         "mov	%[b], r10\n\t"
37841         "ldr	%[a], [%[a], #36]\n\t"
37842         "ldr	%[b], [%[b]]\n\t"
37843         "uxth	r6, %[a]\n\t"
37844         "uxth	r7, %[b]\n\t"
37845 #ifdef WOLFSSL_KEIL
37846         "muls	r7, r6, r7\n\t"
37847 #elif defined(__clang__)
37848         "muls	r7, r6\n\t"
37849 #else
37850         "mul	r7, r6\n\t"
37851 #endif
37852 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37853         "adds	r3, r3, r7\n\t"
37854 #else
37855         "add	r3, r3, r7\n\t"
37856 #endif
37857 #ifdef WOLFSSL_KEIL
37858         "adcs	r4, r4, %[r]\n\t"
37859 #elif defined(__clang__)
37860         "adcs	r4, %[r]\n\t"
37861 #else
37862         "adc	r4, %[r]\n\t"
37863 #endif
37864 #ifdef WOLFSSL_KEIL
37865         "adcs	r5, r5, %[r]\n\t"
37866 #elif defined(__clang__)
37867         "adcs	r5, %[r]\n\t"
37868 #else
37869         "adc	r5, %[r]\n\t"
37870 #endif
37871 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37872         "lsrs	r7, %[b], #16\n\t"
37873 #else
37874         "lsr	r7, %[b], #16\n\t"
37875 #endif
37876 #ifdef WOLFSSL_KEIL
37877         "muls	r6, r7, r6\n\t"
37878 #elif defined(__clang__)
37879         "muls	r6, r7\n\t"
37880 #else
37881         "mul	r6, r7\n\t"
37882 #endif
37883 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37884         "lsrs	r7, r6, #16\n\t"
37885 #else
37886         "lsr	r7, r6, #16\n\t"
37887 #endif
37888 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37889         "lsls	r6, r6, #16\n\t"
37890 #else
37891         "lsl	r6, r6, #16\n\t"
37892 #endif
37893 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37894         "adds	r3, r3, r6\n\t"
37895 #else
37896         "add	r3, r3, r6\n\t"
37897 #endif
37898 #ifdef WOLFSSL_KEIL
37899         "adcs	r4, r4, r7\n\t"
37900 #elif defined(__clang__)
37901         "adcs	r4, r7\n\t"
37902 #else
37903         "adc	r4, r7\n\t"
37904 #endif
37905 #ifdef WOLFSSL_KEIL
37906         "adcs	r5, r5, %[r]\n\t"
37907 #elif defined(__clang__)
37908         "adcs	r5, %[r]\n\t"
37909 #else
37910         "adc	r5, %[r]\n\t"
37911 #endif
37912 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37913         "lsrs	r6, %[a], #16\n\t"
37914 #else
37915         "lsr	r6, %[a], #16\n\t"
37916 #endif
37917 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37918         "lsrs	r7, %[b], #16\n\t"
37919 #else
37920         "lsr	r7, %[b], #16\n\t"
37921 #endif
37922 #ifdef WOLFSSL_KEIL
37923         "muls	r7, r6, r7\n\t"
37924 #elif defined(__clang__)
37925         "muls	r7, r6\n\t"
37926 #else
37927         "mul	r7, r6\n\t"
37928 #endif
37929 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37930         "adds	r4, r4, r7\n\t"
37931 #else
37932         "add	r4, r4, r7\n\t"
37933 #endif
37934 #ifdef WOLFSSL_KEIL
37935         "adcs	r5, r5, %[r]\n\t"
37936 #elif defined(__clang__)
37937         "adcs	r5, %[r]\n\t"
37938 #else
37939         "adc	r5, %[r]\n\t"
37940 #endif
37941         "uxth	r7, %[b]\n\t"
37942 #ifdef WOLFSSL_KEIL
37943         "muls	r6, r7, r6\n\t"
37944 #elif defined(__clang__)
37945         "muls	r6, r7\n\t"
37946 #else
37947         "mul	r6, r7\n\t"
37948 #endif
37949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37950         "lsrs	r7, r6, #16\n\t"
37951 #else
37952         "lsr	r7, r6, #16\n\t"
37953 #endif
37954 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37955         "lsls	r6, r6, #16\n\t"
37956 #else
37957         "lsl	r6, r6, #16\n\t"
37958 #endif
37959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37960         "adds	r3, r3, r6\n\t"
37961 #else
37962         "add	r3, r3, r6\n\t"
37963 #endif
37964 #ifdef WOLFSSL_KEIL
37965         "adcs	r4, r4, r7\n\t"
37966 #elif defined(__clang__)
37967         "adcs	r4, r7\n\t"
37968 #else
37969         "adc	r4, r7\n\t"
37970 #endif
37971 #ifdef WOLFSSL_KEIL
37972         "adcs	r5, r5, %[r]\n\t"
37973 #elif defined(__clang__)
37974         "adcs	r5, %[r]\n\t"
37975 #else
37976         "adc	r5, %[r]\n\t"
37977 #endif
37978         "str	r3, [sp, #36]\n\t"
37979         "#  A[10] * B[0]\n\t"
37980         "movs	r3, #0\n\t"
37981         "mov	%[a], r9\n\t"
37982         "mov	%[b], r10\n\t"
37983         "ldr	%[a], [%[a], #40]\n\t"
37984         "ldr	%[b], [%[b]]\n\t"
37985         "uxth	r6, %[a]\n\t"
37986         "uxth	r7, %[b]\n\t"
37987 #ifdef WOLFSSL_KEIL
37988         "muls	r7, r6, r7\n\t"
37989 #elif defined(__clang__)
37990         "muls	r7, r6\n\t"
37991 #else
37992         "mul	r7, r6\n\t"
37993 #endif
37994 #if defined(__clang__) || defined(WOLFSSL_KEIL)
37995         "adds	r4, r4, r7\n\t"
37996 #else
37997         "add	r4, r4, r7\n\t"
37998 #endif
37999 #ifdef WOLFSSL_KEIL
38000         "adcs	r5, r5, %[r]\n\t"
38001 #elif defined(__clang__)
38002         "adcs	r5, %[r]\n\t"
38003 #else
38004         "adc	r5, %[r]\n\t"
38005 #endif
38006 #ifdef WOLFSSL_KEIL
38007         "adcs	r3, r3, %[r]\n\t"
38008 #elif defined(__clang__)
38009         "adcs	r3, %[r]\n\t"
38010 #else
38011         "adc	r3, %[r]\n\t"
38012 #endif
38013 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38014         "lsrs	r7, %[b], #16\n\t"
38015 #else
38016         "lsr	r7, %[b], #16\n\t"
38017 #endif
38018 #ifdef WOLFSSL_KEIL
38019         "muls	r6, r7, r6\n\t"
38020 #elif defined(__clang__)
38021         "muls	r6, r7\n\t"
38022 #else
38023         "mul	r6, r7\n\t"
38024 #endif
38025 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38026         "lsrs	r7, r6, #16\n\t"
38027 #else
38028         "lsr	r7, r6, #16\n\t"
38029 #endif
38030 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38031         "lsls	r6, r6, #16\n\t"
38032 #else
38033         "lsl	r6, r6, #16\n\t"
38034 #endif
38035 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38036         "adds	r4, r4, r6\n\t"
38037 #else
38038         "add	r4, r4, r6\n\t"
38039 #endif
38040 #ifdef WOLFSSL_KEIL
38041         "adcs	r5, r5, r7\n\t"
38042 #elif defined(__clang__)
38043         "adcs	r5, r7\n\t"
38044 #else
38045         "adc	r5, r7\n\t"
38046 #endif
38047 #ifdef WOLFSSL_KEIL
38048         "adcs	r3, r3, %[r]\n\t"
38049 #elif defined(__clang__)
38050         "adcs	r3, %[r]\n\t"
38051 #else
38052         "adc	r3, %[r]\n\t"
38053 #endif
38054 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38055         "lsrs	r6, %[a], #16\n\t"
38056 #else
38057         "lsr	r6, %[a], #16\n\t"
38058 #endif
38059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38060         "lsrs	r7, %[b], #16\n\t"
38061 #else
38062         "lsr	r7, %[b], #16\n\t"
38063 #endif
38064 #ifdef WOLFSSL_KEIL
38065         "muls	r7, r6, r7\n\t"
38066 #elif defined(__clang__)
38067         "muls	r7, r6\n\t"
38068 #else
38069         "mul	r7, r6\n\t"
38070 #endif
38071 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38072         "adds	r5, r5, r7\n\t"
38073 #else
38074         "add	r5, r5, r7\n\t"
38075 #endif
38076 #ifdef WOLFSSL_KEIL
38077         "adcs	r3, r3, %[r]\n\t"
38078 #elif defined(__clang__)
38079         "adcs	r3, %[r]\n\t"
38080 #else
38081         "adc	r3, %[r]\n\t"
38082 #endif
38083         "uxth	r7, %[b]\n\t"
38084 #ifdef WOLFSSL_KEIL
38085         "muls	r6, r7, r6\n\t"
38086 #elif defined(__clang__)
38087         "muls	r6, r7\n\t"
38088 #else
38089         "mul	r6, r7\n\t"
38090 #endif
38091 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38092         "lsrs	r7, r6, #16\n\t"
38093 #else
38094         "lsr	r7, r6, #16\n\t"
38095 #endif
38096 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38097         "lsls	r6, r6, #16\n\t"
38098 #else
38099         "lsl	r6, r6, #16\n\t"
38100 #endif
38101 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38102         "adds	r4, r4, r6\n\t"
38103 #else
38104         "add	r4, r4, r6\n\t"
38105 #endif
38106 #ifdef WOLFSSL_KEIL
38107         "adcs	r5, r5, r7\n\t"
38108 #elif defined(__clang__)
38109         "adcs	r5, r7\n\t"
38110 #else
38111         "adc	r5, r7\n\t"
38112 #endif
38113 #ifdef WOLFSSL_KEIL
38114         "adcs	r3, r3, %[r]\n\t"
38115 #elif defined(__clang__)
38116         "adcs	r3, %[r]\n\t"
38117 #else
38118         "adc	r3, %[r]\n\t"
38119 #endif
38120         "#  A[9] * B[1]\n\t"
38121         "mov	%[a], r9\n\t"
38122         "mov	%[b], r10\n\t"
38123         "ldr	%[a], [%[a], #36]\n\t"
38124         "ldr	%[b], [%[b], #4]\n\t"
38125         "uxth	r6, %[a]\n\t"
38126         "uxth	r7, %[b]\n\t"
38127 #ifdef WOLFSSL_KEIL
38128         "muls	r7, r6, r7\n\t"
38129 #elif defined(__clang__)
38130         "muls	r7, r6\n\t"
38131 #else
38132         "mul	r7, r6\n\t"
38133 #endif
38134 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38135         "adds	r4, r4, r7\n\t"
38136 #else
38137         "add	r4, r4, r7\n\t"
38138 #endif
38139 #ifdef WOLFSSL_KEIL
38140         "adcs	r5, r5, %[r]\n\t"
38141 #elif defined(__clang__)
38142         "adcs	r5, %[r]\n\t"
38143 #else
38144         "adc	r5, %[r]\n\t"
38145 #endif
38146 #ifdef WOLFSSL_KEIL
38147         "adcs	r3, r3, %[r]\n\t"
38148 #elif defined(__clang__)
38149         "adcs	r3, %[r]\n\t"
38150 #else
38151         "adc	r3, %[r]\n\t"
38152 #endif
38153 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38154         "lsrs	r7, %[b], #16\n\t"
38155 #else
38156         "lsr	r7, %[b], #16\n\t"
38157 #endif
38158 #ifdef WOLFSSL_KEIL
38159         "muls	r6, r7, r6\n\t"
38160 #elif defined(__clang__)
38161         "muls	r6, r7\n\t"
38162 #else
38163         "mul	r6, r7\n\t"
38164 #endif
38165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38166         "lsrs	r7, r6, #16\n\t"
38167 #else
38168         "lsr	r7, r6, #16\n\t"
38169 #endif
38170 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38171         "lsls	r6, r6, #16\n\t"
38172 #else
38173         "lsl	r6, r6, #16\n\t"
38174 #endif
38175 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38176         "adds	r4, r4, r6\n\t"
38177 #else
38178         "add	r4, r4, r6\n\t"
38179 #endif
38180 #ifdef WOLFSSL_KEIL
38181         "adcs	r5, r5, r7\n\t"
38182 #elif defined(__clang__)
38183         "adcs	r5, r7\n\t"
38184 #else
38185         "adc	r5, r7\n\t"
38186 #endif
38187 #ifdef WOLFSSL_KEIL
38188         "adcs	r3, r3, %[r]\n\t"
38189 #elif defined(__clang__)
38190         "adcs	r3, %[r]\n\t"
38191 #else
38192         "adc	r3, %[r]\n\t"
38193 #endif
38194 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38195         "lsrs	r6, %[a], #16\n\t"
38196 #else
38197         "lsr	r6, %[a], #16\n\t"
38198 #endif
38199 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38200         "lsrs	r7, %[b], #16\n\t"
38201 #else
38202         "lsr	r7, %[b], #16\n\t"
38203 #endif
38204 #ifdef WOLFSSL_KEIL
38205         "muls	r7, r6, r7\n\t"
38206 #elif defined(__clang__)
38207         "muls	r7, r6\n\t"
38208 #else
38209         "mul	r7, r6\n\t"
38210 #endif
38211 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38212         "adds	r5, r5, r7\n\t"
38213 #else
38214         "add	r5, r5, r7\n\t"
38215 #endif
38216 #ifdef WOLFSSL_KEIL
38217         "adcs	r3, r3, %[r]\n\t"
38218 #elif defined(__clang__)
38219         "adcs	r3, %[r]\n\t"
38220 #else
38221         "adc	r3, %[r]\n\t"
38222 #endif
38223         "uxth	r7, %[b]\n\t"
38224 #ifdef WOLFSSL_KEIL
38225         "muls	r6, r7, r6\n\t"
38226 #elif defined(__clang__)
38227         "muls	r6, r7\n\t"
38228 #else
38229         "mul	r6, r7\n\t"
38230 #endif
38231 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38232         "lsrs	r7, r6, #16\n\t"
38233 #else
38234         "lsr	r7, r6, #16\n\t"
38235 #endif
38236 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38237         "lsls	r6, r6, #16\n\t"
38238 #else
38239         "lsl	r6, r6, #16\n\t"
38240 #endif
38241 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38242         "adds	r4, r4, r6\n\t"
38243 #else
38244         "add	r4, r4, r6\n\t"
38245 #endif
38246 #ifdef WOLFSSL_KEIL
38247         "adcs	r5, r5, r7\n\t"
38248 #elif defined(__clang__)
38249         "adcs	r5, r7\n\t"
38250 #else
38251         "adc	r5, r7\n\t"
38252 #endif
38253 #ifdef WOLFSSL_KEIL
38254         "adcs	r3, r3, %[r]\n\t"
38255 #elif defined(__clang__)
38256         "adcs	r3, %[r]\n\t"
38257 #else
38258         "adc	r3, %[r]\n\t"
38259 #endif
38260         "#  A[8] * B[2]\n\t"
38261         "mov	%[a], r9\n\t"
38262         "mov	%[b], r10\n\t"
38263         "ldr	%[a], [%[a], #32]\n\t"
38264         "ldr	%[b], [%[b], #8]\n\t"
38265         "uxth	r6, %[a]\n\t"
38266         "uxth	r7, %[b]\n\t"
38267 #ifdef WOLFSSL_KEIL
38268         "muls	r7, r6, r7\n\t"
38269 #elif defined(__clang__)
38270         "muls	r7, r6\n\t"
38271 #else
38272         "mul	r7, r6\n\t"
38273 #endif
38274 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38275         "adds	r4, r4, r7\n\t"
38276 #else
38277         "add	r4, r4, r7\n\t"
38278 #endif
38279 #ifdef WOLFSSL_KEIL
38280         "adcs	r5, r5, %[r]\n\t"
38281 #elif defined(__clang__)
38282         "adcs	r5, %[r]\n\t"
38283 #else
38284         "adc	r5, %[r]\n\t"
38285 #endif
38286 #ifdef WOLFSSL_KEIL
38287         "adcs	r3, r3, %[r]\n\t"
38288 #elif defined(__clang__)
38289         "adcs	r3, %[r]\n\t"
38290 #else
38291         "adc	r3, %[r]\n\t"
38292 #endif
38293 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38294         "lsrs	r7, %[b], #16\n\t"
38295 #else
38296         "lsr	r7, %[b], #16\n\t"
38297 #endif
38298 #ifdef WOLFSSL_KEIL
38299         "muls	r6, r7, r6\n\t"
38300 #elif defined(__clang__)
38301         "muls	r6, r7\n\t"
38302 #else
38303         "mul	r6, r7\n\t"
38304 #endif
38305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38306         "lsrs	r7, r6, #16\n\t"
38307 #else
38308         "lsr	r7, r6, #16\n\t"
38309 #endif
38310 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38311         "lsls	r6, r6, #16\n\t"
38312 #else
38313         "lsl	r6, r6, #16\n\t"
38314 #endif
38315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38316         "adds	r4, r4, r6\n\t"
38317 #else
38318         "add	r4, r4, r6\n\t"
38319 #endif
38320 #ifdef WOLFSSL_KEIL
38321         "adcs	r5, r5, r7\n\t"
38322 #elif defined(__clang__)
38323         "adcs	r5, r7\n\t"
38324 #else
38325         "adc	r5, r7\n\t"
38326 #endif
38327 #ifdef WOLFSSL_KEIL
38328         "adcs	r3, r3, %[r]\n\t"
38329 #elif defined(__clang__)
38330         "adcs	r3, %[r]\n\t"
38331 #else
38332         "adc	r3, %[r]\n\t"
38333 #endif
38334 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38335         "lsrs	r6, %[a], #16\n\t"
38336 #else
38337         "lsr	r6, %[a], #16\n\t"
38338 #endif
38339 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38340         "lsrs	r7, %[b], #16\n\t"
38341 #else
38342         "lsr	r7, %[b], #16\n\t"
38343 #endif
38344 #ifdef WOLFSSL_KEIL
38345         "muls	r7, r6, r7\n\t"
38346 #elif defined(__clang__)
38347         "muls	r7, r6\n\t"
38348 #else
38349         "mul	r7, r6\n\t"
38350 #endif
38351 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38352         "adds	r5, r5, r7\n\t"
38353 #else
38354         "add	r5, r5, r7\n\t"
38355 #endif
38356 #ifdef WOLFSSL_KEIL
38357         "adcs	r3, r3, %[r]\n\t"
38358 #elif defined(__clang__)
38359         "adcs	r3, %[r]\n\t"
38360 #else
38361         "adc	r3, %[r]\n\t"
38362 #endif
38363         "uxth	r7, %[b]\n\t"
38364 #ifdef WOLFSSL_KEIL
38365         "muls	r6, r7, r6\n\t"
38366 #elif defined(__clang__)
38367         "muls	r6, r7\n\t"
38368 #else
38369         "mul	r6, r7\n\t"
38370 #endif
38371 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38372         "lsrs	r7, r6, #16\n\t"
38373 #else
38374         "lsr	r7, r6, #16\n\t"
38375 #endif
38376 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38377         "lsls	r6, r6, #16\n\t"
38378 #else
38379         "lsl	r6, r6, #16\n\t"
38380 #endif
38381 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38382         "adds	r4, r4, r6\n\t"
38383 #else
38384         "add	r4, r4, r6\n\t"
38385 #endif
38386 #ifdef WOLFSSL_KEIL
38387         "adcs	r5, r5, r7\n\t"
38388 #elif defined(__clang__)
38389         "adcs	r5, r7\n\t"
38390 #else
38391         "adc	r5, r7\n\t"
38392 #endif
38393 #ifdef WOLFSSL_KEIL
38394         "adcs	r3, r3, %[r]\n\t"
38395 #elif defined(__clang__)
38396         "adcs	r3, %[r]\n\t"
38397 #else
38398         "adc	r3, %[r]\n\t"
38399 #endif
38400         "#  A[7] * B[3]\n\t"
38401         "mov	%[a], r9\n\t"
38402         "mov	%[b], r10\n\t"
38403         "ldr	%[a], [%[a], #28]\n\t"
38404         "ldr	%[b], [%[b], #12]\n\t"
38405         "uxth	r6, %[a]\n\t"
38406         "uxth	r7, %[b]\n\t"
38407 #ifdef WOLFSSL_KEIL
38408         "muls	r7, r6, r7\n\t"
38409 #elif defined(__clang__)
38410         "muls	r7, r6\n\t"
38411 #else
38412         "mul	r7, r6\n\t"
38413 #endif
38414 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38415         "adds	r4, r4, r7\n\t"
38416 #else
38417         "add	r4, r4, r7\n\t"
38418 #endif
38419 #ifdef WOLFSSL_KEIL
38420         "adcs	r5, r5, %[r]\n\t"
38421 #elif defined(__clang__)
38422         "adcs	r5, %[r]\n\t"
38423 #else
38424         "adc	r5, %[r]\n\t"
38425 #endif
38426 #ifdef WOLFSSL_KEIL
38427         "adcs	r3, r3, %[r]\n\t"
38428 #elif defined(__clang__)
38429         "adcs	r3, %[r]\n\t"
38430 #else
38431         "adc	r3, %[r]\n\t"
38432 #endif
38433 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38434         "lsrs	r7, %[b], #16\n\t"
38435 #else
38436         "lsr	r7, %[b], #16\n\t"
38437 #endif
38438 #ifdef WOLFSSL_KEIL
38439         "muls	r6, r7, r6\n\t"
38440 #elif defined(__clang__)
38441         "muls	r6, r7\n\t"
38442 #else
38443         "mul	r6, r7\n\t"
38444 #endif
38445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38446         "lsrs	r7, r6, #16\n\t"
38447 #else
38448         "lsr	r7, r6, #16\n\t"
38449 #endif
38450 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38451         "lsls	r6, r6, #16\n\t"
38452 #else
38453         "lsl	r6, r6, #16\n\t"
38454 #endif
38455 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38456         "adds	r4, r4, r6\n\t"
38457 #else
38458         "add	r4, r4, r6\n\t"
38459 #endif
38460 #ifdef WOLFSSL_KEIL
38461         "adcs	r5, r5, r7\n\t"
38462 #elif defined(__clang__)
38463         "adcs	r5, r7\n\t"
38464 #else
38465         "adc	r5, r7\n\t"
38466 #endif
38467 #ifdef WOLFSSL_KEIL
38468         "adcs	r3, r3, %[r]\n\t"
38469 #elif defined(__clang__)
38470         "adcs	r3, %[r]\n\t"
38471 #else
38472         "adc	r3, %[r]\n\t"
38473 #endif
38474 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38475         "lsrs	r6, %[a], #16\n\t"
38476 #else
38477         "lsr	r6, %[a], #16\n\t"
38478 #endif
38479 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38480         "lsrs	r7, %[b], #16\n\t"
38481 #else
38482         "lsr	r7, %[b], #16\n\t"
38483 #endif
38484 #ifdef WOLFSSL_KEIL
38485         "muls	r7, r6, r7\n\t"
38486 #elif defined(__clang__)
38487         "muls	r7, r6\n\t"
38488 #else
38489         "mul	r7, r6\n\t"
38490 #endif
38491 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38492         "adds	r5, r5, r7\n\t"
38493 #else
38494         "add	r5, r5, r7\n\t"
38495 #endif
38496 #ifdef WOLFSSL_KEIL
38497         "adcs	r3, r3, %[r]\n\t"
38498 #elif defined(__clang__)
38499         "adcs	r3, %[r]\n\t"
38500 #else
38501         "adc	r3, %[r]\n\t"
38502 #endif
38503         "uxth	r7, %[b]\n\t"
38504 #ifdef WOLFSSL_KEIL
38505         "muls	r6, r7, r6\n\t"
38506 #elif defined(__clang__)
38507         "muls	r6, r7\n\t"
38508 #else
38509         "mul	r6, r7\n\t"
38510 #endif
38511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38512         "lsrs	r7, r6, #16\n\t"
38513 #else
38514         "lsr	r7, r6, #16\n\t"
38515 #endif
38516 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38517         "lsls	r6, r6, #16\n\t"
38518 #else
38519         "lsl	r6, r6, #16\n\t"
38520 #endif
38521 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38522         "adds	r4, r4, r6\n\t"
38523 #else
38524         "add	r4, r4, r6\n\t"
38525 #endif
38526 #ifdef WOLFSSL_KEIL
38527         "adcs	r5, r5, r7\n\t"
38528 #elif defined(__clang__)
38529         "adcs	r5, r7\n\t"
38530 #else
38531         "adc	r5, r7\n\t"
38532 #endif
38533 #ifdef WOLFSSL_KEIL
38534         "adcs	r3, r3, %[r]\n\t"
38535 #elif defined(__clang__)
38536         "adcs	r3, %[r]\n\t"
38537 #else
38538         "adc	r3, %[r]\n\t"
38539 #endif
38540         "#  A[6] * B[4]\n\t"
38541         "mov	%[a], r9\n\t"
38542         "mov	%[b], r10\n\t"
38543         "ldr	%[a], [%[a], #24]\n\t"
38544         "ldr	%[b], [%[b], #16]\n\t"
38545         "uxth	r6, %[a]\n\t"
38546         "uxth	r7, %[b]\n\t"
38547 #ifdef WOLFSSL_KEIL
38548         "muls	r7, r6, r7\n\t"
38549 #elif defined(__clang__)
38550         "muls	r7, r6\n\t"
38551 #else
38552         "mul	r7, r6\n\t"
38553 #endif
38554 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38555         "adds	r4, r4, r7\n\t"
38556 #else
38557         "add	r4, r4, r7\n\t"
38558 #endif
38559 #ifdef WOLFSSL_KEIL
38560         "adcs	r5, r5, %[r]\n\t"
38561 #elif defined(__clang__)
38562         "adcs	r5, %[r]\n\t"
38563 #else
38564         "adc	r5, %[r]\n\t"
38565 #endif
38566 #ifdef WOLFSSL_KEIL
38567         "adcs	r3, r3, %[r]\n\t"
38568 #elif defined(__clang__)
38569         "adcs	r3, %[r]\n\t"
38570 #else
38571         "adc	r3, %[r]\n\t"
38572 #endif
38573 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38574         "lsrs	r7, %[b], #16\n\t"
38575 #else
38576         "lsr	r7, %[b], #16\n\t"
38577 #endif
38578 #ifdef WOLFSSL_KEIL
38579         "muls	r6, r7, r6\n\t"
38580 #elif defined(__clang__)
38581         "muls	r6, r7\n\t"
38582 #else
38583         "mul	r6, r7\n\t"
38584 #endif
38585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38586         "lsrs	r7, r6, #16\n\t"
38587 #else
38588         "lsr	r7, r6, #16\n\t"
38589 #endif
38590 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38591         "lsls	r6, r6, #16\n\t"
38592 #else
38593         "lsl	r6, r6, #16\n\t"
38594 #endif
38595 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38596         "adds	r4, r4, r6\n\t"
38597 #else
38598         "add	r4, r4, r6\n\t"
38599 #endif
38600 #ifdef WOLFSSL_KEIL
38601         "adcs	r5, r5, r7\n\t"
38602 #elif defined(__clang__)
38603         "adcs	r5, r7\n\t"
38604 #else
38605         "adc	r5, r7\n\t"
38606 #endif
38607 #ifdef WOLFSSL_KEIL
38608         "adcs	r3, r3, %[r]\n\t"
38609 #elif defined(__clang__)
38610         "adcs	r3, %[r]\n\t"
38611 #else
38612         "adc	r3, %[r]\n\t"
38613 #endif
38614 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38615         "lsrs	r6, %[a], #16\n\t"
38616 #else
38617         "lsr	r6, %[a], #16\n\t"
38618 #endif
38619 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38620         "lsrs	r7, %[b], #16\n\t"
38621 #else
38622         "lsr	r7, %[b], #16\n\t"
38623 #endif
38624 #ifdef WOLFSSL_KEIL
38625         "muls	r7, r6, r7\n\t"
38626 #elif defined(__clang__)
38627         "muls	r7, r6\n\t"
38628 #else
38629         "mul	r7, r6\n\t"
38630 #endif
38631 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38632         "adds	r5, r5, r7\n\t"
38633 #else
38634         "add	r5, r5, r7\n\t"
38635 #endif
38636 #ifdef WOLFSSL_KEIL
38637         "adcs	r3, r3, %[r]\n\t"
38638 #elif defined(__clang__)
38639         "adcs	r3, %[r]\n\t"
38640 #else
38641         "adc	r3, %[r]\n\t"
38642 #endif
38643         "uxth	r7, %[b]\n\t"
38644 #ifdef WOLFSSL_KEIL
38645         "muls	r6, r7, r6\n\t"
38646 #elif defined(__clang__)
38647         "muls	r6, r7\n\t"
38648 #else
38649         "mul	r6, r7\n\t"
38650 #endif
38651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38652         "lsrs	r7, r6, #16\n\t"
38653 #else
38654         "lsr	r7, r6, #16\n\t"
38655 #endif
38656 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38657         "lsls	r6, r6, #16\n\t"
38658 #else
38659         "lsl	r6, r6, #16\n\t"
38660 #endif
38661 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38662         "adds	r4, r4, r6\n\t"
38663 #else
38664         "add	r4, r4, r6\n\t"
38665 #endif
38666 #ifdef WOLFSSL_KEIL
38667         "adcs	r5, r5, r7\n\t"
38668 #elif defined(__clang__)
38669         "adcs	r5, r7\n\t"
38670 #else
38671         "adc	r5, r7\n\t"
38672 #endif
38673 #ifdef WOLFSSL_KEIL
38674         "adcs	r3, r3, %[r]\n\t"
38675 #elif defined(__clang__)
38676         "adcs	r3, %[r]\n\t"
38677 #else
38678         "adc	r3, %[r]\n\t"
38679 #endif
38680         "#  A[5] * B[5]\n\t"
38681         "mov	%[a], r9\n\t"
38682         "mov	%[b], r10\n\t"
38683         "ldr	%[a], [%[a], #20]\n\t"
38684         "ldr	%[b], [%[b], #20]\n\t"
38685         "uxth	r6, %[a]\n\t"
38686         "uxth	r7, %[b]\n\t"
38687 #ifdef WOLFSSL_KEIL
38688         "muls	r7, r6, r7\n\t"
38689 #elif defined(__clang__)
38690         "muls	r7, r6\n\t"
38691 #else
38692         "mul	r7, r6\n\t"
38693 #endif
38694 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38695         "adds	r4, r4, r7\n\t"
38696 #else
38697         "add	r4, r4, r7\n\t"
38698 #endif
38699 #ifdef WOLFSSL_KEIL
38700         "adcs	r5, r5, %[r]\n\t"
38701 #elif defined(__clang__)
38702         "adcs	r5, %[r]\n\t"
38703 #else
38704         "adc	r5, %[r]\n\t"
38705 #endif
38706 #ifdef WOLFSSL_KEIL
38707         "adcs	r3, r3, %[r]\n\t"
38708 #elif defined(__clang__)
38709         "adcs	r3, %[r]\n\t"
38710 #else
38711         "adc	r3, %[r]\n\t"
38712 #endif
38713 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38714         "lsrs	r7, %[b], #16\n\t"
38715 #else
38716         "lsr	r7, %[b], #16\n\t"
38717 #endif
38718 #ifdef WOLFSSL_KEIL
38719         "muls	r6, r7, r6\n\t"
38720 #elif defined(__clang__)
38721         "muls	r6, r7\n\t"
38722 #else
38723         "mul	r6, r7\n\t"
38724 #endif
38725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38726         "lsrs	r7, r6, #16\n\t"
38727 #else
38728         "lsr	r7, r6, #16\n\t"
38729 #endif
38730 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38731         "lsls	r6, r6, #16\n\t"
38732 #else
38733         "lsl	r6, r6, #16\n\t"
38734 #endif
38735 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38736         "adds	r4, r4, r6\n\t"
38737 #else
38738         "add	r4, r4, r6\n\t"
38739 #endif
38740 #ifdef WOLFSSL_KEIL
38741         "adcs	r5, r5, r7\n\t"
38742 #elif defined(__clang__)
38743         "adcs	r5, r7\n\t"
38744 #else
38745         "adc	r5, r7\n\t"
38746 #endif
38747 #ifdef WOLFSSL_KEIL
38748         "adcs	r3, r3, %[r]\n\t"
38749 #elif defined(__clang__)
38750         "adcs	r3, %[r]\n\t"
38751 #else
38752         "adc	r3, %[r]\n\t"
38753 #endif
38754 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38755         "lsrs	r6, %[a], #16\n\t"
38756 #else
38757         "lsr	r6, %[a], #16\n\t"
38758 #endif
38759 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38760         "lsrs	r7, %[b], #16\n\t"
38761 #else
38762         "lsr	r7, %[b], #16\n\t"
38763 #endif
38764 #ifdef WOLFSSL_KEIL
38765         "muls	r7, r6, r7\n\t"
38766 #elif defined(__clang__)
38767         "muls	r7, r6\n\t"
38768 #else
38769         "mul	r7, r6\n\t"
38770 #endif
38771 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38772         "adds	r5, r5, r7\n\t"
38773 #else
38774         "add	r5, r5, r7\n\t"
38775 #endif
38776 #ifdef WOLFSSL_KEIL
38777         "adcs	r3, r3, %[r]\n\t"
38778 #elif defined(__clang__)
38779         "adcs	r3, %[r]\n\t"
38780 #else
38781         "adc	r3, %[r]\n\t"
38782 #endif
38783         "uxth	r7, %[b]\n\t"
38784 #ifdef WOLFSSL_KEIL
38785         "muls	r6, r7, r6\n\t"
38786 #elif defined(__clang__)
38787         "muls	r6, r7\n\t"
38788 #else
38789         "mul	r6, r7\n\t"
38790 #endif
38791 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38792         "lsrs	r7, r6, #16\n\t"
38793 #else
38794         "lsr	r7, r6, #16\n\t"
38795 #endif
38796 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38797         "lsls	r6, r6, #16\n\t"
38798 #else
38799         "lsl	r6, r6, #16\n\t"
38800 #endif
38801 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38802         "adds	r4, r4, r6\n\t"
38803 #else
38804         "add	r4, r4, r6\n\t"
38805 #endif
38806 #ifdef WOLFSSL_KEIL
38807         "adcs	r5, r5, r7\n\t"
38808 #elif defined(__clang__)
38809         "adcs	r5, r7\n\t"
38810 #else
38811         "adc	r5, r7\n\t"
38812 #endif
38813 #ifdef WOLFSSL_KEIL
38814         "adcs	r3, r3, %[r]\n\t"
38815 #elif defined(__clang__)
38816         "adcs	r3, %[r]\n\t"
38817 #else
38818         "adc	r3, %[r]\n\t"
38819 #endif
38820         "#  A[4] * B[6]\n\t"
38821         "mov	%[a], r9\n\t"
38822         "mov	%[b], r10\n\t"
38823         "ldr	%[a], [%[a], #16]\n\t"
38824         "ldr	%[b], [%[b], #24]\n\t"
38825         "uxth	r6, %[a]\n\t"
38826         "uxth	r7, %[b]\n\t"
38827 #ifdef WOLFSSL_KEIL
38828         "muls	r7, r6, r7\n\t"
38829 #elif defined(__clang__)
38830         "muls	r7, r6\n\t"
38831 #else
38832         "mul	r7, r6\n\t"
38833 #endif
38834 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38835         "adds	r4, r4, r7\n\t"
38836 #else
38837         "add	r4, r4, r7\n\t"
38838 #endif
38839 #ifdef WOLFSSL_KEIL
38840         "adcs	r5, r5, %[r]\n\t"
38841 #elif defined(__clang__)
38842         "adcs	r5, %[r]\n\t"
38843 #else
38844         "adc	r5, %[r]\n\t"
38845 #endif
38846 #ifdef WOLFSSL_KEIL
38847         "adcs	r3, r3, %[r]\n\t"
38848 #elif defined(__clang__)
38849         "adcs	r3, %[r]\n\t"
38850 #else
38851         "adc	r3, %[r]\n\t"
38852 #endif
38853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38854         "lsrs	r7, %[b], #16\n\t"
38855 #else
38856         "lsr	r7, %[b], #16\n\t"
38857 #endif
38858 #ifdef WOLFSSL_KEIL
38859         "muls	r6, r7, r6\n\t"
38860 #elif defined(__clang__)
38861         "muls	r6, r7\n\t"
38862 #else
38863         "mul	r6, r7\n\t"
38864 #endif
38865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38866         "lsrs	r7, r6, #16\n\t"
38867 #else
38868         "lsr	r7, r6, #16\n\t"
38869 #endif
38870 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38871         "lsls	r6, r6, #16\n\t"
38872 #else
38873         "lsl	r6, r6, #16\n\t"
38874 #endif
38875 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38876         "adds	r4, r4, r6\n\t"
38877 #else
38878         "add	r4, r4, r6\n\t"
38879 #endif
38880 #ifdef WOLFSSL_KEIL
38881         "adcs	r5, r5, r7\n\t"
38882 #elif defined(__clang__)
38883         "adcs	r5, r7\n\t"
38884 #else
38885         "adc	r5, r7\n\t"
38886 #endif
38887 #ifdef WOLFSSL_KEIL
38888         "adcs	r3, r3, %[r]\n\t"
38889 #elif defined(__clang__)
38890         "adcs	r3, %[r]\n\t"
38891 #else
38892         "adc	r3, %[r]\n\t"
38893 #endif
38894 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38895         "lsrs	r6, %[a], #16\n\t"
38896 #else
38897         "lsr	r6, %[a], #16\n\t"
38898 #endif
38899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38900         "lsrs	r7, %[b], #16\n\t"
38901 #else
38902         "lsr	r7, %[b], #16\n\t"
38903 #endif
38904 #ifdef WOLFSSL_KEIL
38905         "muls	r7, r6, r7\n\t"
38906 #elif defined(__clang__)
38907         "muls	r7, r6\n\t"
38908 #else
38909         "mul	r7, r6\n\t"
38910 #endif
38911 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38912         "adds	r5, r5, r7\n\t"
38913 #else
38914         "add	r5, r5, r7\n\t"
38915 #endif
38916 #ifdef WOLFSSL_KEIL
38917         "adcs	r3, r3, %[r]\n\t"
38918 #elif defined(__clang__)
38919         "adcs	r3, %[r]\n\t"
38920 #else
38921         "adc	r3, %[r]\n\t"
38922 #endif
38923         "uxth	r7, %[b]\n\t"
38924 #ifdef WOLFSSL_KEIL
38925         "muls	r6, r7, r6\n\t"
38926 #elif defined(__clang__)
38927         "muls	r6, r7\n\t"
38928 #else
38929         "mul	r6, r7\n\t"
38930 #endif
38931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38932         "lsrs	r7, r6, #16\n\t"
38933 #else
38934         "lsr	r7, r6, #16\n\t"
38935 #endif
38936 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38937         "lsls	r6, r6, #16\n\t"
38938 #else
38939         "lsl	r6, r6, #16\n\t"
38940 #endif
38941 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38942         "adds	r4, r4, r6\n\t"
38943 #else
38944         "add	r4, r4, r6\n\t"
38945 #endif
38946 #ifdef WOLFSSL_KEIL
38947         "adcs	r5, r5, r7\n\t"
38948 #elif defined(__clang__)
38949         "adcs	r5, r7\n\t"
38950 #else
38951         "adc	r5, r7\n\t"
38952 #endif
38953 #ifdef WOLFSSL_KEIL
38954         "adcs	r3, r3, %[r]\n\t"
38955 #elif defined(__clang__)
38956         "adcs	r3, %[r]\n\t"
38957 #else
38958         "adc	r3, %[r]\n\t"
38959 #endif
38960         "#  A[3] * B[7]\n\t"
38961         "mov	%[a], r9\n\t"
38962         "mov	%[b], r10\n\t"
38963         "ldr	%[a], [%[a], #12]\n\t"
38964         "ldr	%[b], [%[b], #28]\n\t"
38965         "uxth	r6, %[a]\n\t"
38966         "uxth	r7, %[b]\n\t"
38967 #ifdef WOLFSSL_KEIL
38968         "muls	r7, r6, r7\n\t"
38969 #elif defined(__clang__)
38970         "muls	r7, r6\n\t"
38971 #else
38972         "mul	r7, r6\n\t"
38973 #endif
38974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38975         "adds	r4, r4, r7\n\t"
38976 #else
38977         "add	r4, r4, r7\n\t"
38978 #endif
38979 #ifdef WOLFSSL_KEIL
38980         "adcs	r5, r5, %[r]\n\t"
38981 #elif defined(__clang__)
38982         "adcs	r5, %[r]\n\t"
38983 #else
38984         "adc	r5, %[r]\n\t"
38985 #endif
38986 #ifdef WOLFSSL_KEIL
38987         "adcs	r3, r3, %[r]\n\t"
38988 #elif defined(__clang__)
38989         "adcs	r3, %[r]\n\t"
38990 #else
38991         "adc	r3, %[r]\n\t"
38992 #endif
38993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
38994         "lsrs	r7, %[b], #16\n\t"
38995 #else
38996         "lsr	r7, %[b], #16\n\t"
38997 #endif
38998 #ifdef WOLFSSL_KEIL
38999         "muls	r6, r7, r6\n\t"
39000 #elif defined(__clang__)
39001         "muls	r6, r7\n\t"
39002 #else
39003         "mul	r6, r7\n\t"
39004 #endif
39005 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39006         "lsrs	r7, r6, #16\n\t"
39007 #else
39008         "lsr	r7, r6, #16\n\t"
39009 #endif
39010 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39011         "lsls	r6, r6, #16\n\t"
39012 #else
39013         "lsl	r6, r6, #16\n\t"
39014 #endif
39015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39016         "adds	r4, r4, r6\n\t"
39017 #else
39018         "add	r4, r4, r6\n\t"
39019 #endif
39020 #ifdef WOLFSSL_KEIL
39021         "adcs	r5, r5, r7\n\t"
39022 #elif defined(__clang__)
39023         "adcs	r5, r7\n\t"
39024 #else
39025         "adc	r5, r7\n\t"
39026 #endif
39027 #ifdef WOLFSSL_KEIL
39028         "adcs	r3, r3, %[r]\n\t"
39029 #elif defined(__clang__)
39030         "adcs	r3, %[r]\n\t"
39031 #else
39032         "adc	r3, %[r]\n\t"
39033 #endif
39034 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39035         "lsrs	r6, %[a], #16\n\t"
39036 #else
39037         "lsr	r6, %[a], #16\n\t"
39038 #endif
39039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39040         "lsrs	r7, %[b], #16\n\t"
39041 #else
39042         "lsr	r7, %[b], #16\n\t"
39043 #endif
39044 #ifdef WOLFSSL_KEIL
39045         "muls	r7, r6, r7\n\t"
39046 #elif defined(__clang__)
39047         "muls	r7, r6\n\t"
39048 #else
39049         "mul	r7, r6\n\t"
39050 #endif
39051 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39052         "adds	r5, r5, r7\n\t"
39053 #else
39054         "add	r5, r5, r7\n\t"
39055 #endif
39056 #ifdef WOLFSSL_KEIL
39057         "adcs	r3, r3, %[r]\n\t"
39058 #elif defined(__clang__)
39059         "adcs	r3, %[r]\n\t"
39060 #else
39061         "adc	r3, %[r]\n\t"
39062 #endif
39063         "uxth	r7, %[b]\n\t"
39064 #ifdef WOLFSSL_KEIL
39065         "muls	r6, r7, r6\n\t"
39066 #elif defined(__clang__)
39067         "muls	r6, r7\n\t"
39068 #else
39069         "mul	r6, r7\n\t"
39070 #endif
39071 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39072         "lsrs	r7, r6, #16\n\t"
39073 #else
39074         "lsr	r7, r6, #16\n\t"
39075 #endif
39076 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39077         "lsls	r6, r6, #16\n\t"
39078 #else
39079         "lsl	r6, r6, #16\n\t"
39080 #endif
39081 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39082         "adds	r4, r4, r6\n\t"
39083 #else
39084         "add	r4, r4, r6\n\t"
39085 #endif
39086 #ifdef WOLFSSL_KEIL
39087         "adcs	r5, r5, r7\n\t"
39088 #elif defined(__clang__)
39089         "adcs	r5, r7\n\t"
39090 #else
39091         "adc	r5, r7\n\t"
39092 #endif
39093 #ifdef WOLFSSL_KEIL
39094         "adcs	r3, r3, %[r]\n\t"
39095 #elif defined(__clang__)
39096         "adcs	r3, %[r]\n\t"
39097 #else
39098         "adc	r3, %[r]\n\t"
39099 #endif
39100         "#  A[2] * B[8]\n\t"
39101         "mov	%[a], r9\n\t"
39102         "mov	%[b], r10\n\t"
39103         "ldr	%[a], [%[a], #8]\n\t"
39104         "ldr	%[b], [%[b], #32]\n\t"
39105         "uxth	r6, %[a]\n\t"
39106         "uxth	r7, %[b]\n\t"
39107 #ifdef WOLFSSL_KEIL
39108         "muls	r7, r6, r7\n\t"
39109 #elif defined(__clang__)
39110         "muls	r7, r6\n\t"
39111 #else
39112         "mul	r7, r6\n\t"
39113 #endif
39114 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39115         "adds	r4, r4, r7\n\t"
39116 #else
39117         "add	r4, r4, r7\n\t"
39118 #endif
39119 #ifdef WOLFSSL_KEIL
39120         "adcs	r5, r5, %[r]\n\t"
39121 #elif defined(__clang__)
39122         "adcs	r5, %[r]\n\t"
39123 #else
39124         "adc	r5, %[r]\n\t"
39125 #endif
39126 #ifdef WOLFSSL_KEIL
39127         "adcs	r3, r3, %[r]\n\t"
39128 #elif defined(__clang__)
39129         "adcs	r3, %[r]\n\t"
39130 #else
39131         "adc	r3, %[r]\n\t"
39132 #endif
39133 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39134         "lsrs	r7, %[b], #16\n\t"
39135 #else
39136         "lsr	r7, %[b], #16\n\t"
39137 #endif
39138 #ifdef WOLFSSL_KEIL
39139         "muls	r6, r7, r6\n\t"
39140 #elif defined(__clang__)
39141         "muls	r6, r7\n\t"
39142 #else
39143         "mul	r6, r7\n\t"
39144 #endif
39145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39146         "lsrs	r7, r6, #16\n\t"
39147 #else
39148         "lsr	r7, r6, #16\n\t"
39149 #endif
39150 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39151         "lsls	r6, r6, #16\n\t"
39152 #else
39153         "lsl	r6, r6, #16\n\t"
39154 #endif
39155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39156         "adds	r4, r4, r6\n\t"
39157 #else
39158         "add	r4, r4, r6\n\t"
39159 #endif
39160 #ifdef WOLFSSL_KEIL
39161         "adcs	r5, r5, r7\n\t"
39162 #elif defined(__clang__)
39163         "adcs	r5, r7\n\t"
39164 #else
39165         "adc	r5, r7\n\t"
39166 #endif
39167 #ifdef WOLFSSL_KEIL
39168         "adcs	r3, r3, %[r]\n\t"
39169 #elif defined(__clang__)
39170         "adcs	r3, %[r]\n\t"
39171 #else
39172         "adc	r3, %[r]\n\t"
39173 #endif
39174 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39175         "lsrs	r6, %[a], #16\n\t"
39176 #else
39177         "lsr	r6, %[a], #16\n\t"
39178 #endif
39179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39180         "lsrs	r7, %[b], #16\n\t"
39181 #else
39182         "lsr	r7, %[b], #16\n\t"
39183 #endif
39184 #ifdef WOLFSSL_KEIL
39185         "muls	r7, r6, r7\n\t"
39186 #elif defined(__clang__)
39187         "muls	r7, r6\n\t"
39188 #else
39189         "mul	r7, r6\n\t"
39190 #endif
39191 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39192         "adds	r5, r5, r7\n\t"
39193 #else
39194         "add	r5, r5, r7\n\t"
39195 #endif
39196 #ifdef WOLFSSL_KEIL
39197         "adcs	r3, r3, %[r]\n\t"
39198 #elif defined(__clang__)
39199         "adcs	r3, %[r]\n\t"
39200 #else
39201         "adc	r3, %[r]\n\t"
39202 #endif
39203         "uxth	r7, %[b]\n\t"
39204 #ifdef WOLFSSL_KEIL
39205         "muls	r6, r7, r6\n\t"
39206 #elif defined(__clang__)
39207         "muls	r6, r7\n\t"
39208 #else
39209         "mul	r6, r7\n\t"
39210 #endif
39211 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39212         "lsrs	r7, r6, #16\n\t"
39213 #else
39214         "lsr	r7, r6, #16\n\t"
39215 #endif
39216 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39217         "lsls	r6, r6, #16\n\t"
39218 #else
39219         "lsl	r6, r6, #16\n\t"
39220 #endif
39221 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39222         "adds	r4, r4, r6\n\t"
39223 #else
39224         "add	r4, r4, r6\n\t"
39225 #endif
39226 #ifdef WOLFSSL_KEIL
39227         "adcs	r5, r5, r7\n\t"
39228 #elif defined(__clang__)
39229         "adcs	r5, r7\n\t"
39230 #else
39231         "adc	r5, r7\n\t"
39232 #endif
39233 #ifdef WOLFSSL_KEIL
39234         "adcs	r3, r3, %[r]\n\t"
39235 #elif defined(__clang__)
39236         "adcs	r3, %[r]\n\t"
39237 #else
39238         "adc	r3, %[r]\n\t"
39239 #endif
39240         "#  A[1] * B[9]\n\t"
39241         "mov	%[a], r9\n\t"
39242         "mov	%[b], r10\n\t"
39243         "ldr	%[a], [%[a], #4]\n\t"
39244         "ldr	%[b], [%[b], #36]\n\t"
39245         "uxth	r6, %[a]\n\t"
39246         "uxth	r7, %[b]\n\t"
39247 #ifdef WOLFSSL_KEIL
39248         "muls	r7, r6, r7\n\t"
39249 #elif defined(__clang__)
39250         "muls	r7, r6\n\t"
39251 #else
39252         "mul	r7, r6\n\t"
39253 #endif
39254 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39255         "adds	r4, r4, r7\n\t"
39256 #else
39257         "add	r4, r4, r7\n\t"
39258 #endif
39259 #ifdef WOLFSSL_KEIL
39260         "adcs	r5, r5, %[r]\n\t"
39261 #elif defined(__clang__)
39262         "adcs	r5, %[r]\n\t"
39263 #else
39264         "adc	r5, %[r]\n\t"
39265 #endif
39266 #ifdef WOLFSSL_KEIL
39267         "adcs	r3, r3, %[r]\n\t"
39268 #elif defined(__clang__)
39269         "adcs	r3, %[r]\n\t"
39270 #else
39271         "adc	r3, %[r]\n\t"
39272 #endif
39273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39274         "lsrs	r7, %[b], #16\n\t"
39275 #else
39276         "lsr	r7, %[b], #16\n\t"
39277 #endif
39278 #ifdef WOLFSSL_KEIL
39279         "muls	r6, r7, r6\n\t"
39280 #elif defined(__clang__)
39281         "muls	r6, r7\n\t"
39282 #else
39283         "mul	r6, r7\n\t"
39284 #endif
39285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39286         "lsrs	r7, r6, #16\n\t"
39287 #else
39288         "lsr	r7, r6, #16\n\t"
39289 #endif
39290 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39291         "lsls	r6, r6, #16\n\t"
39292 #else
39293         "lsl	r6, r6, #16\n\t"
39294 #endif
39295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39296         "adds	r4, r4, r6\n\t"
39297 #else
39298         "add	r4, r4, r6\n\t"
39299 #endif
39300 #ifdef WOLFSSL_KEIL
39301         "adcs	r5, r5, r7\n\t"
39302 #elif defined(__clang__)
39303         "adcs	r5, r7\n\t"
39304 #else
39305         "adc	r5, r7\n\t"
39306 #endif
39307 #ifdef WOLFSSL_KEIL
39308         "adcs	r3, r3, %[r]\n\t"
39309 #elif defined(__clang__)
39310         "adcs	r3, %[r]\n\t"
39311 #else
39312         "adc	r3, %[r]\n\t"
39313 #endif
39314 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39315         "lsrs	r6, %[a], #16\n\t"
39316 #else
39317         "lsr	r6, %[a], #16\n\t"
39318 #endif
39319 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39320         "lsrs	r7, %[b], #16\n\t"
39321 #else
39322         "lsr	r7, %[b], #16\n\t"
39323 #endif
39324 #ifdef WOLFSSL_KEIL
39325         "muls	r7, r6, r7\n\t"
39326 #elif defined(__clang__)
39327         "muls	r7, r6\n\t"
39328 #else
39329         "mul	r7, r6\n\t"
39330 #endif
39331 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39332         "adds	r5, r5, r7\n\t"
39333 #else
39334         "add	r5, r5, r7\n\t"
39335 #endif
39336 #ifdef WOLFSSL_KEIL
39337         "adcs	r3, r3, %[r]\n\t"
39338 #elif defined(__clang__)
39339         "adcs	r3, %[r]\n\t"
39340 #else
39341         "adc	r3, %[r]\n\t"
39342 #endif
39343         "uxth	r7, %[b]\n\t"
39344 #ifdef WOLFSSL_KEIL
39345         "muls	r6, r7, r6\n\t"
39346 #elif defined(__clang__)
39347         "muls	r6, r7\n\t"
39348 #else
39349         "mul	r6, r7\n\t"
39350 #endif
39351 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39352         "lsrs	r7, r6, #16\n\t"
39353 #else
39354         "lsr	r7, r6, #16\n\t"
39355 #endif
39356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39357         "lsls	r6, r6, #16\n\t"
39358 #else
39359         "lsl	r6, r6, #16\n\t"
39360 #endif
39361 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39362         "adds	r4, r4, r6\n\t"
39363 #else
39364         "add	r4, r4, r6\n\t"
39365 #endif
39366 #ifdef WOLFSSL_KEIL
39367         "adcs	r5, r5, r7\n\t"
39368 #elif defined(__clang__)
39369         "adcs	r5, r7\n\t"
39370 #else
39371         "adc	r5, r7\n\t"
39372 #endif
39373 #ifdef WOLFSSL_KEIL
39374         "adcs	r3, r3, %[r]\n\t"
39375 #elif defined(__clang__)
39376         "adcs	r3, %[r]\n\t"
39377 #else
39378         "adc	r3, %[r]\n\t"
39379 #endif
39380         "#  A[0] * B[10]\n\t"
39381         "mov	%[a], r9\n\t"
39382         "mov	%[b], r10\n\t"
39383         "ldr	%[a], [%[a]]\n\t"
39384         "ldr	%[b], [%[b], #40]\n\t"
39385         "uxth	r6, %[a]\n\t"
39386         "uxth	r7, %[b]\n\t"
39387 #ifdef WOLFSSL_KEIL
39388         "muls	r7, r6, r7\n\t"
39389 #elif defined(__clang__)
39390         "muls	r7, r6\n\t"
39391 #else
39392         "mul	r7, r6\n\t"
39393 #endif
39394 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39395         "adds	r4, r4, r7\n\t"
39396 #else
39397         "add	r4, r4, r7\n\t"
39398 #endif
39399 #ifdef WOLFSSL_KEIL
39400         "adcs	r5, r5, %[r]\n\t"
39401 #elif defined(__clang__)
39402         "adcs	r5, %[r]\n\t"
39403 #else
39404         "adc	r5, %[r]\n\t"
39405 #endif
39406 #ifdef WOLFSSL_KEIL
39407         "adcs	r3, r3, %[r]\n\t"
39408 #elif defined(__clang__)
39409         "adcs	r3, %[r]\n\t"
39410 #else
39411         "adc	r3, %[r]\n\t"
39412 #endif
39413 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39414         "lsrs	r7, %[b], #16\n\t"
39415 #else
39416         "lsr	r7, %[b], #16\n\t"
39417 #endif
39418 #ifdef WOLFSSL_KEIL
39419         "muls	r6, r7, r6\n\t"
39420 #elif defined(__clang__)
39421         "muls	r6, r7\n\t"
39422 #else
39423         "mul	r6, r7\n\t"
39424 #endif
39425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39426         "lsrs	r7, r6, #16\n\t"
39427 #else
39428         "lsr	r7, r6, #16\n\t"
39429 #endif
39430 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39431         "lsls	r6, r6, #16\n\t"
39432 #else
39433         "lsl	r6, r6, #16\n\t"
39434 #endif
39435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39436         "adds	r4, r4, r6\n\t"
39437 #else
39438         "add	r4, r4, r6\n\t"
39439 #endif
39440 #ifdef WOLFSSL_KEIL
39441         "adcs	r5, r5, r7\n\t"
39442 #elif defined(__clang__)
39443         "adcs	r5, r7\n\t"
39444 #else
39445         "adc	r5, r7\n\t"
39446 #endif
39447 #ifdef WOLFSSL_KEIL
39448         "adcs	r3, r3, %[r]\n\t"
39449 #elif defined(__clang__)
39450         "adcs	r3, %[r]\n\t"
39451 #else
39452         "adc	r3, %[r]\n\t"
39453 #endif
39454 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39455         "lsrs	r6, %[a], #16\n\t"
39456 #else
39457         "lsr	r6, %[a], #16\n\t"
39458 #endif
39459 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39460         "lsrs	r7, %[b], #16\n\t"
39461 #else
39462         "lsr	r7, %[b], #16\n\t"
39463 #endif
39464 #ifdef WOLFSSL_KEIL
39465         "muls	r7, r6, r7\n\t"
39466 #elif defined(__clang__)
39467         "muls	r7, r6\n\t"
39468 #else
39469         "mul	r7, r6\n\t"
39470 #endif
39471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39472         "adds	r5, r5, r7\n\t"
39473 #else
39474         "add	r5, r5, r7\n\t"
39475 #endif
39476 #ifdef WOLFSSL_KEIL
39477         "adcs	r3, r3, %[r]\n\t"
39478 #elif defined(__clang__)
39479         "adcs	r3, %[r]\n\t"
39480 #else
39481         "adc	r3, %[r]\n\t"
39482 #endif
39483         "uxth	r7, %[b]\n\t"
39484 #ifdef WOLFSSL_KEIL
39485         "muls	r6, r7, r6\n\t"
39486 #elif defined(__clang__)
39487         "muls	r6, r7\n\t"
39488 #else
39489         "mul	r6, r7\n\t"
39490 #endif
39491 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39492         "lsrs	r7, r6, #16\n\t"
39493 #else
39494         "lsr	r7, r6, #16\n\t"
39495 #endif
39496 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39497         "lsls	r6, r6, #16\n\t"
39498 #else
39499         "lsl	r6, r6, #16\n\t"
39500 #endif
39501 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39502         "adds	r4, r4, r6\n\t"
39503 #else
39504         "add	r4, r4, r6\n\t"
39505 #endif
39506 #ifdef WOLFSSL_KEIL
39507         "adcs	r5, r5, r7\n\t"
39508 #elif defined(__clang__)
39509         "adcs	r5, r7\n\t"
39510 #else
39511         "adc	r5, r7\n\t"
39512 #endif
39513 #ifdef WOLFSSL_KEIL
39514         "adcs	r3, r3, %[r]\n\t"
39515 #elif defined(__clang__)
39516         "adcs	r3, %[r]\n\t"
39517 #else
39518         "adc	r3, %[r]\n\t"
39519 #endif
39520         "str	r4, [sp, #40]\n\t"
39521         "#  A[0] * B[11]\n\t"
39522         "movs	r4, #0\n\t"
39523         "mov	%[a], r9\n\t"
39524         "mov	%[b], r10\n\t"
39525         "ldr	%[a], [%[a]]\n\t"
39526         "ldr	%[b], [%[b], #44]\n\t"
39527         "uxth	r6, %[a]\n\t"
39528         "uxth	r7, %[b]\n\t"
39529 #ifdef WOLFSSL_KEIL
39530         "muls	r7, r6, r7\n\t"
39531 #elif defined(__clang__)
39532         "muls	r7, r6\n\t"
39533 #else
39534         "mul	r7, r6\n\t"
39535 #endif
39536 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39537         "adds	r5, r5, r7\n\t"
39538 #else
39539         "add	r5, r5, r7\n\t"
39540 #endif
39541 #ifdef WOLFSSL_KEIL
39542         "adcs	r3, r3, %[r]\n\t"
39543 #elif defined(__clang__)
39544         "adcs	r3, %[r]\n\t"
39545 #else
39546         "adc	r3, %[r]\n\t"
39547 #endif
39548 #ifdef WOLFSSL_KEIL
39549         "adcs	r4, r4, %[r]\n\t"
39550 #elif defined(__clang__)
39551         "adcs	r4, %[r]\n\t"
39552 #else
39553         "adc	r4, %[r]\n\t"
39554 #endif
39555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39556         "lsrs	r7, %[b], #16\n\t"
39557 #else
39558         "lsr	r7, %[b], #16\n\t"
39559 #endif
39560 #ifdef WOLFSSL_KEIL
39561         "muls	r6, r7, r6\n\t"
39562 #elif defined(__clang__)
39563         "muls	r6, r7\n\t"
39564 #else
39565         "mul	r6, r7\n\t"
39566 #endif
39567 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39568         "lsrs	r7, r6, #16\n\t"
39569 #else
39570         "lsr	r7, r6, #16\n\t"
39571 #endif
39572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39573         "lsls	r6, r6, #16\n\t"
39574 #else
39575         "lsl	r6, r6, #16\n\t"
39576 #endif
39577 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39578         "adds	r5, r5, r6\n\t"
39579 #else
39580         "add	r5, r5, r6\n\t"
39581 #endif
39582 #ifdef WOLFSSL_KEIL
39583         "adcs	r3, r3, r7\n\t"
39584 #elif defined(__clang__)
39585         "adcs	r3, r7\n\t"
39586 #else
39587         "adc	r3, r7\n\t"
39588 #endif
39589 #ifdef WOLFSSL_KEIL
39590         "adcs	r4, r4, %[r]\n\t"
39591 #elif defined(__clang__)
39592         "adcs	r4, %[r]\n\t"
39593 #else
39594         "adc	r4, %[r]\n\t"
39595 #endif
39596 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39597         "lsrs	r6, %[a], #16\n\t"
39598 #else
39599         "lsr	r6, %[a], #16\n\t"
39600 #endif
39601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39602         "lsrs	r7, %[b], #16\n\t"
39603 #else
39604         "lsr	r7, %[b], #16\n\t"
39605 #endif
39606 #ifdef WOLFSSL_KEIL
39607         "muls	r7, r6, r7\n\t"
39608 #elif defined(__clang__)
39609         "muls	r7, r6\n\t"
39610 #else
39611         "mul	r7, r6\n\t"
39612 #endif
39613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39614         "adds	r3, r3, r7\n\t"
39615 #else
39616         "add	r3, r3, r7\n\t"
39617 #endif
39618 #ifdef WOLFSSL_KEIL
39619         "adcs	r4, r4, %[r]\n\t"
39620 #elif defined(__clang__)
39621         "adcs	r4, %[r]\n\t"
39622 #else
39623         "adc	r4, %[r]\n\t"
39624 #endif
39625         "uxth	r7, %[b]\n\t"
39626 #ifdef WOLFSSL_KEIL
39627         "muls	r6, r7, r6\n\t"
39628 #elif defined(__clang__)
39629         "muls	r6, r7\n\t"
39630 #else
39631         "mul	r6, r7\n\t"
39632 #endif
39633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39634         "lsrs	r7, r6, #16\n\t"
39635 #else
39636         "lsr	r7, r6, #16\n\t"
39637 #endif
39638 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39639         "lsls	r6, r6, #16\n\t"
39640 #else
39641         "lsl	r6, r6, #16\n\t"
39642 #endif
39643 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39644         "adds	r5, r5, r6\n\t"
39645 #else
39646         "add	r5, r5, r6\n\t"
39647 #endif
39648 #ifdef WOLFSSL_KEIL
39649         "adcs	r3, r3, r7\n\t"
39650 #elif defined(__clang__)
39651         "adcs	r3, r7\n\t"
39652 #else
39653         "adc	r3, r7\n\t"
39654 #endif
39655 #ifdef WOLFSSL_KEIL
39656         "adcs	r4, r4, %[r]\n\t"
39657 #elif defined(__clang__)
39658         "adcs	r4, %[r]\n\t"
39659 #else
39660         "adc	r4, %[r]\n\t"
39661 #endif
39662         "#  A[1] * B[10]\n\t"
39663         "mov	%[a], r9\n\t"
39664         "mov	%[b], r10\n\t"
39665         "ldr	%[a], [%[a], #4]\n\t"
39666         "ldr	%[b], [%[b], #40]\n\t"
39667         "uxth	r6, %[a]\n\t"
39668         "uxth	r7, %[b]\n\t"
39669 #ifdef WOLFSSL_KEIL
39670         "muls	r7, r6, r7\n\t"
39671 #elif defined(__clang__)
39672         "muls	r7, r6\n\t"
39673 #else
39674         "mul	r7, r6\n\t"
39675 #endif
39676 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39677         "adds	r5, r5, r7\n\t"
39678 #else
39679         "add	r5, r5, r7\n\t"
39680 #endif
39681 #ifdef WOLFSSL_KEIL
39682         "adcs	r3, r3, %[r]\n\t"
39683 #elif defined(__clang__)
39684         "adcs	r3, %[r]\n\t"
39685 #else
39686         "adc	r3, %[r]\n\t"
39687 #endif
39688 #ifdef WOLFSSL_KEIL
39689         "adcs	r4, r4, %[r]\n\t"
39690 #elif defined(__clang__)
39691         "adcs	r4, %[r]\n\t"
39692 #else
39693         "adc	r4, %[r]\n\t"
39694 #endif
39695 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39696         "lsrs	r7, %[b], #16\n\t"
39697 #else
39698         "lsr	r7, %[b], #16\n\t"
39699 #endif
39700 #ifdef WOLFSSL_KEIL
39701         "muls	r6, r7, r6\n\t"
39702 #elif defined(__clang__)
39703         "muls	r6, r7\n\t"
39704 #else
39705         "mul	r6, r7\n\t"
39706 #endif
39707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39708         "lsrs	r7, r6, #16\n\t"
39709 #else
39710         "lsr	r7, r6, #16\n\t"
39711 #endif
39712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39713         "lsls	r6, r6, #16\n\t"
39714 #else
39715         "lsl	r6, r6, #16\n\t"
39716 #endif
39717 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39718         "adds	r5, r5, r6\n\t"
39719 #else
39720         "add	r5, r5, r6\n\t"
39721 #endif
39722 #ifdef WOLFSSL_KEIL
39723         "adcs	r3, r3, r7\n\t"
39724 #elif defined(__clang__)
39725         "adcs	r3, r7\n\t"
39726 #else
39727         "adc	r3, r7\n\t"
39728 #endif
39729 #ifdef WOLFSSL_KEIL
39730         "adcs	r4, r4, %[r]\n\t"
39731 #elif defined(__clang__)
39732         "adcs	r4, %[r]\n\t"
39733 #else
39734         "adc	r4, %[r]\n\t"
39735 #endif
39736 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39737         "lsrs	r6, %[a], #16\n\t"
39738 #else
39739         "lsr	r6, %[a], #16\n\t"
39740 #endif
39741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39742         "lsrs	r7, %[b], #16\n\t"
39743 #else
39744         "lsr	r7, %[b], #16\n\t"
39745 #endif
39746 #ifdef WOLFSSL_KEIL
39747         "muls	r7, r6, r7\n\t"
39748 #elif defined(__clang__)
39749         "muls	r7, r6\n\t"
39750 #else
39751         "mul	r7, r6\n\t"
39752 #endif
39753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39754         "adds	r3, r3, r7\n\t"
39755 #else
39756         "add	r3, r3, r7\n\t"
39757 #endif
39758 #ifdef WOLFSSL_KEIL
39759         "adcs	r4, r4, %[r]\n\t"
39760 #elif defined(__clang__)
39761         "adcs	r4, %[r]\n\t"
39762 #else
39763         "adc	r4, %[r]\n\t"
39764 #endif
39765         "uxth	r7, %[b]\n\t"
39766 #ifdef WOLFSSL_KEIL
39767         "muls	r6, r7, r6\n\t"
39768 #elif defined(__clang__)
39769         "muls	r6, r7\n\t"
39770 #else
39771         "mul	r6, r7\n\t"
39772 #endif
39773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39774         "lsrs	r7, r6, #16\n\t"
39775 #else
39776         "lsr	r7, r6, #16\n\t"
39777 #endif
39778 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39779         "lsls	r6, r6, #16\n\t"
39780 #else
39781         "lsl	r6, r6, #16\n\t"
39782 #endif
39783 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39784         "adds	r5, r5, r6\n\t"
39785 #else
39786         "add	r5, r5, r6\n\t"
39787 #endif
39788 #ifdef WOLFSSL_KEIL
39789         "adcs	r3, r3, r7\n\t"
39790 #elif defined(__clang__)
39791         "adcs	r3, r7\n\t"
39792 #else
39793         "adc	r3, r7\n\t"
39794 #endif
39795 #ifdef WOLFSSL_KEIL
39796         "adcs	r4, r4, %[r]\n\t"
39797 #elif defined(__clang__)
39798         "adcs	r4, %[r]\n\t"
39799 #else
39800         "adc	r4, %[r]\n\t"
39801 #endif
39802         "#  A[2] * B[9]\n\t"
39803         "mov	%[a], r9\n\t"
39804         "mov	%[b], r10\n\t"
39805         "ldr	%[a], [%[a], #8]\n\t"
39806         "ldr	%[b], [%[b], #36]\n\t"
39807         "uxth	r6, %[a]\n\t"
39808         "uxth	r7, %[b]\n\t"
39809 #ifdef WOLFSSL_KEIL
39810         "muls	r7, r6, r7\n\t"
39811 #elif defined(__clang__)
39812         "muls	r7, r6\n\t"
39813 #else
39814         "mul	r7, r6\n\t"
39815 #endif
39816 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39817         "adds	r5, r5, r7\n\t"
39818 #else
39819         "add	r5, r5, r7\n\t"
39820 #endif
39821 #ifdef WOLFSSL_KEIL
39822         "adcs	r3, r3, %[r]\n\t"
39823 #elif defined(__clang__)
39824         "adcs	r3, %[r]\n\t"
39825 #else
39826         "adc	r3, %[r]\n\t"
39827 #endif
39828 #ifdef WOLFSSL_KEIL
39829         "adcs	r4, r4, %[r]\n\t"
39830 #elif defined(__clang__)
39831         "adcs	r4, %[r]\n\t"
39832 #else
39833         "adc	r4, %[r]\n\t"
39834 #endif
39835 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39836         "lsrs	r7, %[b], #16\n\t"
39837 #else
39838         "lsr	r7, %[b], #16\n\t"
39839 #endif
39840 #ifdef WOLFSSL_KEIL
39841         "muls	r6, r7, r6\n\t"
39842 #elif defined(__clang__)
39843         "muls	r6, r7\n\t"
39844 #else
39845         "mul	r6, r7\n\t"
39846 #endif
39847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39848         "lsrs	r7, r6, #16\n\t"
39849 #else
39850         "lsr	r7, r6, #16\n\t"
39851 #endif
39852 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39853         "lsls	r6, r6, #16\n\t"
39854 #else
39855         "lsl	r6, r6, #16\n\t"
39856 #endif
39857 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39858         "adds	r5, r5, r6\n\t"
39859 #else
39860         "add	r5, r5, r6\n\t"
39861 #endif
39862 #ifdef WOLFSSL_KEIL
39863         "adcs	r3, r3, r7\n\t"
39864 #elif defined(__clang__)
39865         "adcs	r3, r7\n\t"
39866 #else
39867         "adc	r3, r7\n\t"
39868 #endif
39869 #ifdef WOLFSSL_KEIL
39870         "adcs	r4, r4, %[r]\n\t"
39871 #elif defined(__clang__)
39872         "adcs	r4, %[r]\n\t"
39873 #else
39874         "adc	r4, %[r]\n\t"
39875 #endif
39876 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39877         "lsrs	r6, %[a], #16\n\t"
39878 #else
39879         "lsr	r6, %[a], #16\n\t"
39880 #endif
39881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39882         "lsrs	r7, %[b], #16\n\t"
39883 #else
39884         "lsr	r7, %[b], #16\n\t"
39885 #endif
39886 #ifdef WOLFSSL_KEIL
39887         "muls	r7, r6, r7\n\t"
39888 #elif defined(__clang__)
39889         "muls	r7, r6\n\t"
39890 #else
39891         "mul	r7, r6\n\t"
39892 #endif
39893 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39894         "adds	r3, r3, r7\n\t"
39895 #else
39896         "add	r3, r3, r7\n\t"
39897 #endif
39898 #ifdef WOLFSSL_KEIL
39899         "adcs	r4, r4, %[r]\n\t"
39900 #elif defined(__clang__)
39901         "adcs	r4, %[r]\n\t"
39902 #else
39903         "adc	r4, %[r]\n\t"
39904 #endif
39905         "uxth	r7, %[b]\n\t"
39906 #ifdef WOLFSSL_KEIL
39907         "muls	r6, r7, r6\n\t"
39908 #elif defined(__clang__)
39909         "muls	r6, r7\n\t"
39910 #else
39911         "mul	r6, r7\n\t"
39912 #endif
39913 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39914         "lsrs	r7, r6, #16\n\t"
39915 #else
39916         "lsr	r7, r6, #16\n\t"
39917 #endif
39918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39919         "lsls	r6, r6, #16\n\t"
39920 #else
39921         "lsl	r6, r6, #16\n\t"
39922 #endif
39923 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39924         "adds	r5, r5, r6\n\t"
39925 #else
39926         "add	r5, r5, r6\n\t"
39927 #endif
39928 #ifdef WOLFSSL_KEIL
39929         "adcs	r3, r3, r7\n\t"
39930 #elif defined(__clang__)
39931         "adcs	r3, r7\n\t"
39932 #else
39933         "adc	r3, r7\n\t"
39934 #endif
39935 #ifdef WOLFSSL_KEIL
39936         "adcs	r4, r4, %[r]\n\t"
39937 #elif defined(__clang__)
39938         "adcs	r4, %[r]\n\t"
39939 #else
39940         "adc	r4, %[r]\n\t"
39941 #endif
39942         "#  A[3] * B[8]\n\t"
39943         "mov	%[a], r9\n\t"
39944         "mov	%[b], r10\n\t"
39945         "ldr	%[a], [%[a], #12]\n\t"
39946         "ldr	%[b], [%[b], #32]\n\t"
39947         "uxth	r6, %[a]\n\t"
39948         "uxth	r7, %[b]\n\t"
39949 #ifdef WOLFSSL_KEIL
39950         "muls	r7, r6, r7\n\t"
39951 #elif defined(__clang__)
39952         "muls	r7, r6\n\t"
39953 #else
39954         "mul	r7, r6\n\t"
39955 #endif
39956 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39957         "adds	r5, r5, r7\n\t"
39958 #else
39959         "add	r5, r5, r7\n\t"
39960 #endif
39961 #ifdef WOLFSSL_KEIL
39962         "adcs	r3, r3, %[r]\n\t"
39963 #elif defined(__clang__)
39964         "adcs	r3, %[r]\n\t"
39965 #else
39966         "adc	r3, %[r]\n\t"
39967 #endif
39968 #ifdef WOLFSSL_KEIL
39969         "adcs	r4, r4, %[r]\n\t"
39970 #elif defined(__clang__)
39971         "adcs	r4, %[r]\n\t"
39972 #else
39973         "adc	r4, %[r]\n\t"
39974 #endif
39975 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39976         "lsrs	r7, %[b], #16\n\t"
39977 #else
39978         "lsr	r7, %[b], #16\n\t"
39979 #endif
39980 #ifdef WOLFSSL_KEIL
39981         "muls	r6, r7, r6\n\t"
39982 #elif defined(__clang__)
39983         "muls	r6, r7\n\t"
39984 #else
39985         "mul	r6, r7\n\t"
39986 #endif
39987 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39988         "lsrs	r7, r6, #16\n\t"
39989 #else
39990         "lsr	r7, r6, #16\n\t"
39991 #endif
39992 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39993         "lsls	r6, r6, #16\n\t"
39994 #else
39995         "lsl	r6, r6, #16\n\t"
39996 #endif
39997 #if defined(__clang__) || defined(WOLFSSL_KEIL)
39998         "adds	r5, r5, r6\n\t"
39999 #else
40000         "add	r5, r5, r6\n\t"
40001 #endif
40002 #ifdef WOLFSSL_KEIL
40003         "adcs	r3, r3, r7\n\t"
40004 #elif defined(__clang__)
40005         "adcs	r3, r7\n\t"
40006 #else
40007         "adc	r3, r7\n\t"
40008 #endif
40009 #ifdef WOLFSSL_KEIL
40010         "adcs	r4, r4, %[r]\n\t"
40011 #elif defined(__clang__)
40012         "adcs	r4, %[r]\n\t"
40013 #else
40014         "adc	r4, %[r]\n\t"
40015 #endif
40016 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40017         "lsrs	r6, %[a], #16\n\t"
40018 #else
40019         "lsr	r6, %[a], #16\n\t"
40020 #endif
40021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40022         "lsrs	r7, %[b], #16\n\t"
40023 #else
40024         "lsr	r7, %[b], #16\n\t"
40025 #endif
40026 #ifdef WOLFSSL_KEIL
40027         "muls	r7, r6, r7\n\t"
40028 #elif defined(__clang__)
40029         "muls	r7, r6\n\t"
40030 #else
40031         "mul	r7, r6\n\t"
40032 #endif
40033 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40034         "adds	r3, r3, r7\n\t"
40035 #else
40036         "add	r3, r3, r7\n\t"
40037 #endif
40038 #ifdef WOLFSSL_KEIL
40039         "adcs	r4, r4, %[r]\n\t"
40040 #elif defined(__clang__)
40041         "adcs	r4, %[r]\n\t"
40042 #else
40043         "adc	r4, %[r]\n\t"
40044 #endif
40045         "uxth	r7, %[b]\n\t"
40046 #ifdef WOLFSSL_KEIL
40047         "muls	r6, r7, r6\n\t"
40048 #elif defined(__clang__)
40049         "muls	r6, r7\n\t"
40050 #else
40051         "mul	r6, r7\n\t"
40052 #endif
40053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40054         "lsrs	r7, r6, #16\n\t"
40055 #else
40056         "lsr	r7, r6, #16\n\t"
40057 #endif
40058 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40059         "lsls	r6, r6, #16\n\t"
40060 #else
40061         "lsl	r6, r6, #16\n\t"
40062 #endif
40063 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40064         "adds	r5, r5, r6\n\t"
40065 #else
40066         "add	r5, r5, r6\n\t"
40067 #endif
40068 #ifdef WOLFSSL_KEIL
40069         "adcs	r3, r3, r7\n\t"
40070 #elif defined(__clang__)
40071         "adcs	r3, r7\n\t"
40072 #else
40073         "adc	r3, r7\n\t"
40074 #endif
40075 #ifdef WOLFSSL_KEIL
40076         "adcs	r4, r4, %[r]\n\t"
40077 #elif defined(__clang__)
40078         "adcs	r4, %[r]\n\t"
40079 #else
40080         "adc	r4, %[r]\n\t"
40081 #endif
40082         "#  A[4] * B[7]\n\t"
40083         "mov	%[a], r9\n\t"
40084         "mov	%[b], r10\n\t"
40085         "ldr	%[a], [%[a], #16]\n\t"
40086         "ldr	%[b], [%[b], #28]\n\t"
40087         "uxth	r6, %[a]\n\t"
40088         "uxth	r7, %[b]\n\t"
40089 #ifdef WOLFSSL_KEIL
40090         "muls	r7, r6, r7\n\t"
40091 #elif defined(__clang__)
40092         "muls	r7, r6\n\t"
40093 #else
40094         "mul	r7, r6\n\t"
40095 #endif
40096 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40097         "adds	r5, r5, r7\n\t"
40098 #else
40099         "add	r5, r5, r7\n\t"
40100 #endif
40101 #ifdef WOLFSSL_KEIL
40102         "adcs	r3, r3, %[r]\n\t"
40103 #elif defined(__clang__)
40104         "adcs	r3, %[r]\n\t"
40105 #else
40106         "adc	r3, %[r]\n\t"
40107 #endif
40108 #ifdef WOLFSSL_KEIL
40109         "adcs	r4, r4, %[r]\n\t"
40110 #elif defined(__clang__)
40111         "adcs	r4, %[r]\n\t"
40112 #else
40113         "adc	r4, %[r]\n\t"
40114 #endif
40115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40116         "lsrs	r7, %[b], #16\n\t"
40117 #else
40118         "lsr	r7, %[b], #16\n\t"
40119 #endif
40120 #ifdef WOLFSSL_KEIL
40121         "muls	r6, r7, r6\n\t"
40122 #elif defined(__clang__)
40123         "muls	r6, r7\n\t"
40124 #else
40125         "mul	r6, r7\n\t"
40126 #endif
40127 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40128         "lsrs	r7, r6, #16\n\t"
40129 #else
40130         "lsr	r7, r6, #16\n\t"
40131 #endif
40132 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40133         "lsls	r6, r6, #16\n\t"
40134 #else
40135         "lsl	r6, r6, #16\n\t"
40136 #endif
40137 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40138         "adds	r5, r5, r6\n\t"
40139 #else
40140         "add	r5, r5, r6\n\t"
40141 #endif
40142 #ifdef WOLFSSL_KEIL
40143         "adcs	r3, r3, r7\n\t"
40144 #elif defined(__clang__)
40145         "adcs	r3, r7\n\t"
40146 #else
40147         "adc	r3, r7\n\t"
40148 #endif
40149 #ifdef WOLFSSL_KEIL
40150         "adcs	r4, r4, %[r]\n\t"
40151 #elif defined(__clang__)
40152         "adcs	r4, %[r]\n\t"
40153 #else
40154         "adc	r4, %[r]\n\t"
40155 #endif
40156 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40157         "lsrs	r6, %[a], #16\n\t"
40158 #else
40159         "lsr	r6, %[a], #16\n\t"
40160 #endif
40161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40162         "lsrs	r7, %[b], #16\n\t"
40163 #else
40164         "lsr	r7, %[b], #16\n\t"
40165 #endif
40166 #ifdef WOLFSSL_KEIL
40167         "muls	r7, r6, r7\n\t"
40168 #elif defined(__clang__)
40169         "muls	r7, r6\n\t"
40170 #else
40171         "mul	r7, r6\n\t"
40172 #endif
40173 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40174         "adds	r3, r3, r7\n\t"
40175 #else
40176         "add	r3, r3, r7\n\t"
40177 #endif
40178 #ifdef WOLFSSL_KEIL
40179         "adcs	r4, r4, %[r]\n\t"
40180 #elif defined(__clang__)
40181         "adcs	r4, %[r]\n\t"
40182 #else
40183         "adc	r4, %[r]\n\t"
40184 #endif
40185         "uxth	r7, %[b]\n\t"
40186 #ifdef WOLFSSL_KEIL
40187         "muls	r6, r7, r6\n\t"
40188 #elif defined(__clang__)
40189         "muls	r6, r7\n\t"
40190 #else
40191         "mul	r6, r7\n\t"
40192 #endif
40193 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40194         "lsrs	r7, r6, #16\n\t"
40195 #else
40196         "lsr	r7, r6, #16\n\t"
40197 #endif
40198 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40199         "lsls	r6, r6, #16\n\t"
40200 #else
40201         "lsl	r6, r6, #16\n\t"
40202 #endif
40203 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40204         "adds	r5, r5, r6\n\t"
40205 #else
40206         "add	r5, r5, r6\n\t"
40207 #endif
40208 #ifdef WOLFSSL_KEIL
40209         "adcs	r3, r3, r7\n\t"
40210 #elif defined(__clang__)
40211         "adcs	r3, r7\n\t"
40212 #else
40213         "adc	r3, r7\n\t"
40214 #endif
40215 #ifdef WOLFSSL_KEIL
40216         "adcs	r4, r4, %[r]\n\t"
40217 #elif defined(__clang__)
40218         "adcs	r4, %[r]\n\t"
40219 #else
40220         "adc	r4, %[r]\n\t"
40221 #endif
40222         "#  A[5] * B[6]\n\t"
40223         "mov	%[a], r9\n\t"
40224         "mov	%[b], r10\n\t"
40225         "ldr	%[a], [%[a], #20]\n\t"
40226         "ldr	%[b], [%[b], #24]\n\t"
40227         "uxth	r6, %[a]\n\t"
40228         "uxth	r7, %[b]\n\t"
40229 #ifdef WOLFSSL_KEIL
40230         "muls	r7, r6, r7\n\t"
40231 #elif defined(__clang__)
40232         "muls	r7, r6\n\t"
40233 #else
40234         "mul	r7, r6\n\t"
40235 #endif
40236 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40237         "adds	r5, r5, r7\n\t"
40238 #else
40239         "add	r5, r5, r7\n\t"
40240 #endif
40241 #ifdef WOLFSSL_KEIL
40242         "adcs	r3, r3, %[r]\n\t"
40243 #elif defined(__clang__)
40244         "adcs	r3, %[r]\n\t"
40245 #else
40246         "adc	r3, %[r]\n\t"
40247 #endif
40248 #ifdef WOLFSSL_KEIL
40249         "adcs	r4, r4, %[r]\n\t"
40250 #elif defined(__clang__)
40251         "adcs	r4, %[r]\n\t"
40252 #else
40253         "adc	r4, %[r]\n\t"
40254 #endif
40255 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40256         "lsrs	r7, %[b], #16\n\t"
40257 #else
40258         "lsr	r7, %[b], #16\n\t"
40259 #endif
40260 #ifdef WOLFSSL_KEIL
40261         "muls	r6, r7, r6\n\t"
40262 #elif defined(__clang__)
40263         "muls	r6, r7\n\t"
40264 #else
40265         "mul	r6, r7\n\t"
40266 #endif
40267 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40268         "lsrs	r7, r6, #16\n\t"
40269 #else
40270         "lsr	r7, r6, #16\n\t"
40271 #endif
40272 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40273         "lsls	r6, r6, #16\n\t"
40274 #else
40275         "lsl	r6, r6, #16\n\t"
40276 #endif
40277 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40278         "adds	r5, r5, r6\n\t"
40279 #else
40280         "add	r5, r5, r6\n\t"
40281 #endif
40282 #ifdef WOLFSSL_KEIL
40283         "adcs	r3, r3, r7\n\t"
40284 #elif defined(__clang__)
40285         "adcs	r3, r7\n\t"
40286 #else
40287         "adc	r3, r7\n\t"
40288 #endif
40289 #ifdef WOLFSSL_KEIL
40290         "adcs	r4, r4, %[r]\n\t"
40291 #elif defined(__clang__)
40292         "adcs	r4, %[r]\n\t"
40293 #else
40294         "adc	r4, %[r]\n\t"
40295 #endif
40296 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40297         "lsrs	r6, %[a], #16\n\t"
40298 #else
40299         "lsr	r6, %[a], #16\n\t"
40300 #endif
40301 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40302         "lsrs	r7, %[b], #16\n\t"
40303 #else
40304         "lsr	r7, %[b], #16\n\t"
40305 #endif
40306 #ifdef WOLFSSL_KEIL
40307         "muls	r7, r6, r7\n\t"
40308 #elif defined(__clang__)
40309         "muls	r7, r6\n\t"
40310 #else
40311         "mul	r7, r6\n\t"
40312 #endif
40313 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40314         "adds	r3, r3, r7\n\t"
40315 #else
40316         "add	r3, r3, r7\n\t"
40317 #endif
40318 #ifdef WOLFSSL_KEIL
40319         "adcs	r4, r4, %[r]\n\t"
40320 #elif defined(__clang__)
40321         "adcs	r4, %[r]\n\t"
40322 #else
40323         "adc	r4, %[r]\n\t"
40324 #endif
40325         "uxth	r7, %[b]\n\t"
40326 #ifdef WOLFSSL_KEIL
40327         "muls	r6, r7, r6\n\t"
40328 #elif defined(__clang__)
40329         "muls	r6, r7\n\t"
40330 #else
40331         "mul	r6, r7\n\t"
40332 #endif
40333 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40334         "lsrs	r7, r6, #16\n\t"
40335 #else
40336         "lsr	r7, r6, #16\n\t"
40337 #endif
40338 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40339         "lsls	r6, r6, #16\n\t"
40340 #else
40341         "lsl	r6, r6, #16\n\t"
40342 #endif
40343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40344         "adds	r5, r5, r6\n\t"
40345 #else
40346         "add	r5, r5, r6\n\t"
40347 #endif
40348 #ifdef WOLFSSL_KEIL
40349         "adcs	r3, r3, r7\n\t"
40350 #elif defined(__clang__)
40351         "adcs	r3, r7\n\t"
40352 #else
40353         "adc	r3, r7\n\t"
40354 #endif
40355 #ifdef WOLFSSL_KEIL
40356         "adcs	r4, r4, %[r]\n\t"
40357 #elif defined(__clang__)
40358         "adcs	r4, %[r]\n\t"
40359 #else
40360         "adc	r4, %[r]\n\t"
40361 #endif
40362         "#  A[6] * B[5]\n\t"
40363         "mov	%[a], r9\n\t"
40364         "mov	%[b], r10\n\t"
40365         "ldr	%[a], [%[a], #24]\n\t"
40366         "ldr	%[b], [%[b], #20]\n\t"
40367         "uxth	r6, %[a]\n\t"
40368         "uxth	r7, %[b]\n\t"
40369 #ifdef WOLFSSL_KEIL
40370         "muls	r7, r6, r7\n\t"
40371 #elif defined(__clang__)
40372         "muls	r7, r6\n\t"
40373 #else
40374         "mul	r7, r6\n\t"
40375 #endif
40376 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40377         "adds	r5, r5, r7\n\t"
40378 #else
40379         "add	r5, r5, r7\n\t"
40380 #endif
40381 #ifdef WOLFSSL_KEIL
40382         "adcs	r3, r3, %[r]\n\t"
40383 #elif defined(__clang__)
40384         "adcs	r3, %[r]\n\t"
40385 #else
40386         "adc	r3, %[r]\n\t"
40387 #endif
40388 #ifdef WOLFSSL_KEIL
40389         "adcs	r4, r4, %[r]\n\t"
40390 #elif defined(__clang__)
40391         "adcs	r4, %[r]\n\t"
40392 #else
40393         "adc	r4, %[r]\n\t"
40394 #endif
40395 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40396         "lsrs	r7, %[b], #16\n\t"
40397 #else
40398         "lsr	r7, %[b], #16\n\t"
40399 #endif
40400 #ifdef WOLFSSL_KEIL
40401         "muls	r6, r7, r6\n\t"
40402 #elif defined(__clang__)
40403         "muls	r6, r7\n\t"
40404 #else
40405         "mul	r6, r7\n\t"
40406 #endif
40407 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40408         "lsrs	r7, r6, #16\n\t"
40409 #else
40410         "lsr	r7, r6, #16\n\t"
40411 #endif
40412 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40413         "lsls	r6, r6, #16\n\t"
40414 #else
40415         "lsl	r6, r6, #16\n\t"
40416 #endif
40417 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40418         "adds	r5, r5, r6\n\t"
40419 #else
40420         "add	r5, r5, r6\n\t"
40421 #endif
40422 #ifdef WOLFSSL_KEIL
40423         "adcs	r3, r3, r7\n\t"
40424 #elif defined(__clang__)
40425         "adcs	r3, r7\n\t"
40426 #else
40427         "adc	r3, r7\n\t"
40428 #endif
40429 #ifdef WOLFSSL_KEIL
40430         "adcs	r4, r4, %[r]\n\t"
40431 #elif defined(__clang__)
40432         "adcs	r4, %[r]\n\t"
40433 #else
40434         "adc	r4, %[r]\n\t"
40435 #endif
40436 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40437         "lsrs	r6, %[a], #16\n\t"
40438 #else
40439         "lsr	r6, %[a], #16\n\t"
40440 #endif
40441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40442         "lsrs	r7, %[b], #16\n\t"
40443 #else
40444         "lsr	r7, %[b], #16\n\t"
40445 #endif
40446 #ifdef WOLFSSL_KEIL
40447         "muls	r7, r6, r7\n\t"
40448 #elif defined(__clang__)
40449         "muls	r7, r6\n\t"
40450 #else
40451         "mul	r7, r6\n\t"
40452 #endif
40453 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40454         "adds	r3, r3, r7\n\t"
40455 #else
40456         "add	r3, r3, r7\n\t"
40457 #endif
40458 #ifdef WOLFSSL_KEIL
40459         "adcs	r4, r4, %[r]\n\t"
40460 #elif defined(__clang__)
40461         "adcs	r4, %[r]\n\t"
40462 #else
40463         "adc	r4, %[r]\n\t"
40464 #endif
40465         "uxth	r7, %[b]\n\t"
40466 #ifdef WOLFSSL_KEIL
40467         "muls	r6, r7, r6\n\t"
40468 #elif defined(__clang__)
40469         "muls	r6, r7\n\t"
40470 #else
40471         "mul	r6, r7\n\t"
40472 #endif
40473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40474         "lsrs	r7, r6, #16\n\t"
40475 #else
40476         "lsr	r7, r6, #16\n\t"
40477 #endif
40478 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40479         "lsls	r6, r6, #16\n\t"
40480 #else
40481         "lsl	r6, r6, #16\n\t"
40482 #endif
40483 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40484         "adds	r5, r5, r6\n\t"
40485 #else
40486         "add	r5, r5, r6\n\t"
40487 #endif
40488 #ifdef WOLFSSL_KEIL
40489         "adcs	r3, r3, r7\n\t"
40490 #elif defined(__clang__)
40491         "adcs	r3, r7\n\t"
40492 #else
40493         "adc	r3, r7\n\t"
40494 #endif
40495 #ifdef WOLFSSL_KEIL
40496         "adcs	r4, r4, %[r]\n\t"
40497 #elif defined(__clang__)
40498         "adcs	r4, %[r]\n\t"
40499 #else
40500         "adc	r4, %[r]\n\t"
40501 #endif
40502         "#  A[7] * B[4]\n\t"
40503         "mov	%[a], r9\n\t"
40504         "mov	%[b], r10\n\t"
40505         "ldr	%[a], [%[a], #28]\n\t"
40506         "ldr	%[b], [%[b], #16]\n\t"
40507         "uxth	r6, %[a]\n\t"
40508         "uxth	r7, %[b]\n\t"
40509 #ifdef WOLFSSL_KEIL
40510         "muls	r7, r6, r7\n\t"
40511 #elif defined(__clang__)
40512         "muls	r7, r6\n\t"
40513 #else
40514         "mul	r7, r6\n\t"
40515 #endif
40516 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40517         "adds	r5, r5, r7\n\t"
40518 #else
40519         "add	r5, r5, r7\n\t"
40520 #endif
40521 #ifdef WOLFSSL_KEIL
40522         "adcs	r3, r3, %[r]\n\t"
40523 #elif defined(__clang__)
40524         "adcs	r3, %[r]\n\t"
40525 #else
40526         "adc	r3, %[r]\n\t"
40527 #endif
40528 #ifdef WOLFSSL_KEIL
40529         "adcs	r4, r4, %[r]\n\t"
40530 #elif defined(__clang__)
40531         "adcs	r4, %[r]\n\t"
40532 #else
40533         "adc	r4, %[r]\n\t"
40534 #endif
40535 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40536         "lsrs	r7, %[b], #16\n\t"
40537 #else
40538         "lsr	r7, %[b], #16\n\t"
40539 #endif
40540 #ifdef WOLFSSL_KEIL
40541         "muls	r6, r7, r6\n\t"
40542 #elif defined(__clang__)
40543         "muls	r6, r7\n\t"
40544 #else
40545         "mul	r6, r7\n\t"
40546 #endif
40547 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40548         "lsrs	r7, r6, #16\n\t"
40549 #else
40550         "lsr	r7, r6, #16\n\t"
40551 #endif
40552 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40553         "lsls	r6, r6, #16\n\t"
40554 #else
40555         "lsl	r6, r6, #16\n\t"
40556 #endif
40557 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40558         "adds	r5, r5, r6\n\t"
40559 #else
40560         "add	r5, r5, r6\n\t"
40561 #endif
40562 #ifdef WOLFSSL_KEIL
40563         "adcs	r3, r3, r7\n\t"
40564 #elif defined(__clang__)
40565         "adcs	r3, r7\n\t"
40566 #else
40567         "adc	r3, r7\n\t"
40568 #endif
40569 #ifdef WOLFSSL_KEIL
40570         "adcs	r4, r4, %[r]\n\t"
40571 #elif defined(__clang__)
40572         "adcs	r4, %[r]\n\t"
40573 #else
40574         "adc	r4, %[r]\n\t"
40575 #endif
40576 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40577         "lsrs	r6, %[a], #16\n\t"
40578 #else
40579         "lsr	r6, %[a], #16\n\t"
40580 #endif
40581 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40582         "lsrs	r7, %[b], #16\n\t"
40583 #else
40584         "lsr	r7, %[b], #16\n\t"
40585 #endif
40586 #ifdef WOLFSSL_KEIL
40587         "muls	r7, r6, r7\n\t"
40588 #elif defined(__clang__)
40589         "muls	r7, r6\n\t"
40590 #else
40591         "mul	r7, r6\n\t"
40592 #endif
40593 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40594         "adds	r3, r3, r7\n\t"
40595 #else
40596         "add	r3, r3, r7\n\t"
40597 #endif
40598 #ifdef WOLFSSL_KEIL
40599         "adcs	r4, r4, %[r]\n\t"
40600 #elif defined(__clang__)
40601         "adcs	r4, %[r]\n\t"
40602 #else
40603         "adc	r4, %[r]\n\t"
40604 #endif
40605         "uxth	r7, %[b]\n\t"
40606 #ifdef WOLFSSL_KEIL
40607         "muls	r6, r7, r6\n\t"
40608 #elif defined(__clang__)
40609         "muls	r6, r7\n\t"
40610 #else
40611         "mul	r6, r7\n\t"
40612 #endif
40613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40614         "lsrs	r7, r6, #16\n\t"
40615 #else
40616         "lsr	r7, r6, #16\n\t"
40617 #endif
40618 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40619         "lsls	r6, r6, #16\n\t"
40620 #else
40621         "lsl	r6, r6, #16\n\t"
40622 #endif
40623 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40624         "adds	r5, r5, r6\n\t"
40625 #else
40626         "add	r5, r5, r6\n\t"
40627 #endif
40628 #ifdef WOLFSSL_KEIL
40629         "adcs	r3, r3, r7\n\t"
40630 #elif defined(__clang__)
40631         "adcs	r3, r7\n\t"
40632 #else
40633         "adc	r3, r7\n\t"
40634 #endif
40635 #ifdef WOLFSSL_KEIL
40636         "adcs	r4, r4, %[r]\n\t"
40637 #elif defined(__clang__)
40638         "adcs	r4, %[r]\n\t"
40639 #else
40640         "adc	r4, %[r]\n\t"
40641 #endif
40642         "#  A[8] * B[3]\n\t"
40643         "mov	%[a], r9\n\t"
40644         "mov	%[b], r10\n\t"
40645         "ldr	%[a], [%[a], #32]\n\t"
40646         "ldr	%[b], [%[b], #12]\n\t"
40647         "uxth	r6, %[a]\n\t"
40648         "uxth	r7, %[b]\n\t"
40649 #ifdef WOLFSSL_KEIL
40650         "muls	r7, r6, r7\n\t"
40651 #elif defined(__clang__)
40652         "muls	r7, r6\n\t"
40653 #else
40654         "mul	r7, r6\n\t"
40655 #endif
40656 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40657         "adds	r5, r5, r7\n\t"
40658 #else
40659         "add	r5, r5, r7\n\t"
40660 #endif
40661 #ifdef WOLFSSL_KEIL
40662         "adcs	r3, r3, %[r]\n\t"
40663 #elif defined(__clang__)
40664         "adcs	r3, %[r]\n\t"
40665 #else
40666         "adc	r3, %[r]\n\t"
40667 #endif
40668 #ifdef WOLFSSL_KEIL
40669         "adcs	r4, r4, %[r]\n\t"
40670 #elif defined(__clang__)
40671         "adcs	r4, %[r]\n\t"
40672 #else
40673         "adc	r4, %[r]\n\t"
40674 #endif
40675 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40676         "lsrs	r7, %[b], #16\n\t"
40677 #else
40678         "lsr	r7, %[b], #16\n\t"
40679 #endif
40680 #ifdef WOLFSSL_KEIL
40681         "muls	r6, r7, r6\n\t"
40682 #elif defined(__clang__)
40683         "muls	r6, r7\n\t"
40684 #else
40685         "mul	r6, r7\n\t"
40686 #endif
40687 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40688         "lsrs	r7, r6, #16\n\t"
40689 #else
40690         "lsr	r7, r6, #16\n\t"
40691 #endif
40692 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40693         "lsls	r6, r6, #16\n\t"
40694 #else
40695         "lsl	r6, r6, #16\n\t"
40696 #endif
40697 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40698         "adds	r5, r5, r6\n\t"
40699 #else
40700         "add	r5, r5, r6\n\t"
40701 #endif
40702 #ifdef WOLFSSL_KEIL
40703         "adcs	r3, r3, r7\n\t"
40704 #elif defined(__clang__)
40705         "adcs	r3, r7\n\t"
40706 #else
40707         "adc	r3, r7\n\t"
40708 #endif
40709 #ifdef WOLFSSL_KEIL
40710         "adcs	r4, r4, %[r]\n\t"
40711 #elif defined(__clang__)
40712         "adcs	r4, %[r]\n\t"
40713 #else
40714         "adc	r4, %[r]\n\t"
40715 #endif
40716 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40717         "lsrs	r6, %[a], #16\n\t"
40718 #else
40719         "lsr	r6, %[a], #16\n\t"
40720 #endif
40721 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40722         "lsrs	r7, %[b], #16\n\t"
40723 #else
40724         "lsr	r7, %[b], #16\n\t"
40725 #endif
40726 #ifdef WOLFSSL_KEIL
40727         "muls	r7, r6, r7\n\t"
40728 #elif defined(__clang__)
40729         "muls	r7, r6\n\t"
40730 #else
40731         "mul	r7, r6\n\t"
40732 #endif
40733 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40734         "adds	r3, r3, r7\n\t"
40735 #else
40736         "add	r3, r3, r7\n\t"
40737 #endif
40738 #ifdef WOLFSSL_KEIL
40739         "adcs	r4, r4, %[r]\n\t"
40740 #elif defined(__clang__)
40741         "adcs	r4, %[r]\n\t"
40742 #else
40743         "adc	r4, %[r]\n\t"
40744 #endif
40745         "uxth	r7, %[b]\n\t"
40746 #ifdef WOLFSSL_KEIL
40747         "muls	r6, r7, r6\n\t"
40748 #elif defined(__clang__)
40749         "muls	r6, r7\n\t"
40750 #else
40751         "mul	r6, r7\n\t"
40752 #endif
40753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40754         "lsrs	r7, r6, #16\n\t"
40755 #else
40756         "lsr	r7, r6, #16\n\t"
40757 #endif
40758 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40759         "lsls	r6, r6, #16\n\t"
40760 #else
40761         "lsl	r6, r6, #16\n\t"
40762 #endif
40763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40764         "adds	r5, r5, r6\n\t"
40765 #else
40766         "add	r5, r5, r6\n\t"
40767 #endif
40768 #ifdef WOLFSSL_KEIL
40769         "adcs	r3, r3, r7\n\t"
40770 #elif defined(__clang__)
40771         "adcs	r3, r7\n\t"
40772 #else
40773         "adc	r3, r7\n\t"
40774 #endif
40775 #ifdef WOLFSSL_KEIL
40776         "adcs	r4, r4, %[r]\n\t"
40777 #elif defined(__clang__)
40778         "adcs	r4, %[r]\n\t"
40779 #else
40780         "adc	r4, %[r]\n\t"
40781 #endif
40782         "#  A[9] * B[2]\n\t"
40783         "mov	%[a], r9\n\t"
40784         "mov	%[b], r10\n\t"
40785         "ldr	%[a], [%[a], #36]\n\t"
40786         "ldr	%[b], [%[b], #8]\n\t"
40787         "uxth	r6, %[a]\n\t"
40788         "uxth	r7, %[b]\n\t"
40789 #ifdef WOLFSSL_KEIL
40790         "muls	r7, r6, r7\n\t"
40791 #elif defined(__clang__)
40792         "muls	r7, r6\n\t"
40793 #else
40794         "mul	r7, r6\n\t"
40795 #endif
40796 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40797         "adds	r5, r5, r7\n\t"
40798 #else
40799         "add	r5, r5, r7\n\t"
40800 #endif
40801 #ifdef WOLFSSL_KEIL
40802         "adcs	r3, r3, %[r]\n\t"
40803 #elif defined(__clang__)
40804         "adcs	r3, %[r]\n\t"
40805 #else
40806         "adc	r3, %[r]\n\t"
40807 #endif
40808 #ifdef WOLFSSL_KEIL
40809         "adcs	r4, r4, %[r]\n\t"
40810 #elif defined(__clang__)
40811         "adcs	r4, %[r]\n\t"
40812 #else
40813         "adc	r4, %[r]\n\t"
40814 #endif
40815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40816         "lsrs	r7, %[b], #16\n\t"
40817 #else
40818         "lsr	r7, %[b], #16\n\t"
40819 #endif
40820 #ifdef WOLFSSL_KEIL
40821         "muls	r6, r7, r6\n\t"
40822 #elif defined(__clang__)
40823         "muls	r6, r7\n\t"
40824 #else
40825         "mul	r6, r7\n\t"
40826 #endif
40827 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40828         "lsrs	r7, r6, #16\n\t"
40829 #else
40830         "lsr	r7, r6, #16\n\t"
40831 #endif
40832 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40833         "lsls	r6, r6, #16\n\t"
40834 #else
40835         "lsl	r6, r6, #16\n\t"
40836 #endif
40837 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40838         "adds	r5, r5, r6\n\t"
40839 #else
40840         "add	r5, r5, r6\n\t"
40841 #endif
40842 #ifdef WOLFSSL_KEIL
40843         "adcs	r3, r3, r7\n\t"
40844 #elif defined(__clang__)
40845         "adcs	r3, r7\n\t"
40846 #else
40847         "adc	r3, r7\n\t"
40848 #endif
40849 #ifdef WOLFSSL_KEIL
40850         "adcs	r4, r4, %[r]\n\t"
40851 #elif defined(__clang__)
40852         "adcs	r4, %[r]\n\t"
40853 #else
40854         "adc	r4, %[r]\n\t"
40855 #endif
40856 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40857         "lsrs	r6, %[a], #16\n\t"
40858 #else
40859         "lsr	r6, %[a], #16\n\t"
40860 #endif
40861 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40862         "lsrs	r7, %[b], #16\n\t"
40863 #else
40864         "lsr	r7, %[b], #16\n\t"
40865 #endif
40866 #ifdef WOLFSSL_KEIL
40867         "muls	r7, r6, r7\n\t"
40868 #elif defined(__clang__)
40869         "muls	r7, r6\n\t"
40870 #else
40871         "mul	r7, r6\n\t"
40872 #endif
40873 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40874         "adds	r3, r3, r7\n\t"
40875 #else
40876         "add	r3, r3, r7\n\t"
40877 #endif
40878 #ifdef WOLFSSL_KEIL
40879         "adcs	r4, r4, %[r]\n\t"
40880 #elif defined(__clang__)
40881         "adcs	r4, %[r]\n\t"
40882 #else
40883         "adc	r4, %[r]\n\t"
40884 #endif
40885         "uxth	r7, %[b]\n\t"
40886 #ifdef WOLFSSL_KEIL
40887         "muls	r6, r7, r6\n\t"
40888 #elif defined(__clang__)
40889         "muls	r6, r7\n\t"
40890 #else
40891         "mul	r6, r7\n\t"
40892 #endif
40893 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40894         "lsrs	r7, r6, #16\n\t"
40895 #else
40896         "lsr	r7, r6, #16\n\t"
40897 #endif
40898 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40899         "lsls	r6, r6, #16\n\t"
40900 #else
40901         "lsl	r6, r6, #16\n\t"
40902 #endif
40903 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40904         "adds	r5, r5, r6\n\t"
40905 #else
40906         "add	r5, r5, r6\n\t"
40907 #endif
40908 #ifdef WOLFSSL_KEIL
40909         "adcs	r3, r3, r7\n\t"
40910 #elif defined(__clang__)
40911         "adcs	r3, r7\n\t"
40912 #else
40913         "adc	r3, r7\n\t"
40914 #endif
40915 #ifdef WOLFSSL_KEIL
40916         "adcs	r4, r4, %[r]\n\t"
40917 #elif defined(__clang__)
40918         "adcs	r4, %[r]\n\t"
40919 #else
40920         "adc	r4, %[r]\n\t"
40921 #endif
40922         "#  A[10] * B[1]\n\t"
40923         "mov	%[a], r9\n\t"
40924         "mov	%[b], r10\n\t"
40925         "ldr	%[a], [%[a], #40]\n\t"
40926         "ldr	%[b], [%[b], #4]\n\t"
40927         "uxth	r6, %[a]\n\t"
40928         "uxth	r7, %[b]\n\t"
40929 #ifdef WOLFSSL_KEIL
40930         "muls	r7, r6, r7\n\t"
40931 #elif defined(__clang__)
40932         "muls	r7, r6\n\t"
40933 #else
40934         "mul	r7, r6\n\t"
40935 #endif
40936 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40937         "adds	r5, r5, r7\n\t"
40938 #else
40939         "add	r5, r5, r7\n\t"
40940 #endif
40941 #ifdef WOLFSSL_KEIL
40942         "adcs	r3, r3, %[r]\n\t"
40943 #elif defined(__clang__)
40944         "adcs	r3, %[r]\n\t"
40945 #else
40946         "adc	r3, %[r]\n\t"
40947 #endif
40948 #ifdef WOLFSSL_KEIL
40949         "adcs	r4, r4, %[r]\n\t"
40950 #elif defined(__clang__)
40951         "adcs	r4, %[r]\n\t"
40952 #else
40953         "adc	r4, %[r]\n\t"
40954 #endif
40955 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40956         "lsrs	r7, %[b], #16\n\t"
40957 #else
40958         "lsr	r7, %[b], #16\n\t"
40959 #endif
40960 #ifdef WOLFSSL_KEIL
40961         "muls	r6, r7, r6\n\t"
40962 #elif defined(__clang__)
40963         "muls	r6, r7\n\t"
40964 #else
40965         "mul	r6, r7\n\t"
40966 #endif
40967 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40968         "lsrs	r7, r6, #16\n\t"
40969 #else
40970         "lsr	r7, r6, #16\n\t"
40971 #endif
40972 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40973         "lsls	r6, r6, #16\n\t"
40974 #else
40975         "lsl	r6, r6, #16\n\t"
40976 #endif
40977 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40978         "adds	r5, r5, r6\n\t"
40979 #else
40980         "add	r5, r5, r6\n\t"
40981 #endif
40982 #ifdef WOLFSSL_KEIL
40983         "adcs	r3, r3, r7\n\t"
40984 #elif defined(__clang__)
40985         "adcs	r3, r7\n\t"
40986 #else
40987         "adc	r3, r7\n\t"
40988 #endif
40989 #ifdef WOLFSSL_KEIL
40990         "adcs	r4, r4, %[r]\n\t"
40991 #elif defined(__clang__)
40992         "adcs	r4, %[r]\n\t"
40993 #else
40994         "adc	r4, %[r]\n\t"
40995 #endif
40996 #if defined(__clang__) || defined(WOLFSSL_KEIL)
40997         "lsrs	r6, %[a], #16\n\t"
40998 #else
40999         "lsr	r6, %[a], #16\n\t"
41000 #endif
41001 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41002         "lsrs	r7, %[b], #16\n\t"
41003 #else
41004         "lsr	r7, %[b], #16\n\t"
41005 #endif
41006 #ifdef WOLFSSL_KEIL
41007         "muls	r7, r6, r7\n\t"
41008 #elif defined(__clang__)
41009         "muls	r7, r6\n\t"
41010 #else
41011         "mul	r7, r6\n\t"
41012 #endif
41013 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41014         "adds	r3, r3, r7\n\t"
41015 #else
41016         "add	r3, r3, r7\n\t"
41017 #endif
41018 #ifdef WOLFSSL_KEIL
41019         "adcs	r4, r4, %[r]\n\t"
41020 #elif defined(__clang__)
41021         "adcs	r4, %[r]\n\t"
41022 #else
41023         "adc	r4, %[r]\n\t"
41024 #endif
41025         "uxth	r7, %[b]\n\t"
41026 #ifdef WOLFSSL_KEIL
41027         "muls	r6, r7, r6\n\t"
41028 #elif defined(__clang__)
41029         "muls	r6, r7\n\t"
41030 #else
41031         "mul	r6, r7\n\t"
41032 #endif
41033 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41034         "lsrs	r7, r6, #16\n\t"
41035 #else
41036         "lsr	r7, r6, #16\n\t"
41037 #endif
41038 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41039         "lsls	r6, r6, #16\n\t"
41040 #else
41041         "lsl	r6, r6, #16\n\t"
41042 #endif
41043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41044         "adds	r5, r5, r6\n\t"
41045 #else
41046         "add	r5, r5, r6\n\t"
41047 #endif
41048 #ifdef WOLFSSL_KEIL
41049         "adcs	r3, r3, r7\n\t"
41050 #elif defined(__clang__)
41051         "adcs	r3, r7\n\t"
41052 #else
41053         "adc	r3, r7\n\t"
41054 #endif
41055 #ifdef WOLFSSL_KEIL
41056         "adcs	r4, r4, %[r]\n\t"
41057 #elif defined(__clang__)
41058         "adcs	r4, %[r]\n\t"
41059 #else
41060         "adc	r4, %[r]\n\t"
41061 #endif
41062         "#  A[11] * B[0]\n\t"
41063         "mov	%[a], r9\n\t"
41064         "mov	%[b], r10\n\t"
41065         "ldr	%[a], [%[a], #44]\n\t"
41066         "ldr	%[b], [%[b]]\n\t"
41067         "uxth	r6, %[a]\n\t"
41068         "uxth	r7, %[b]\n\t"
41069 #ifdef WOLFSSL_KEIL
41070         "muls	r7, r6, r7\n\t"
41071 #elif defined(__clang__)
41072         "muls	r7, r6\n\t"
41073 #else
41074         "mul	r7, r6\n\t"
41075 #endif
41076 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41077         "adds	r5, r5, r7\n\t"
41078 #else
41079         "add	r5, r5, r7\n\t"
41080 #endif
41081 #ifdef WOLFSSL_KEIL
41082         "adcs	r3, r3, %[r]\n\t"
41083 #elif defined(__clang__)
41084         "adcs	r3, %[r]\n\t"
41085 #else
41086         "adc	r3, %[r]\n\t"
41087 #endif
41088 #ifdef WOLFSSL_KEIL
41089         "adcs	r4, r4, %[r]\n\t"
41090 #elif defined(__clang__)
41091         "adcs	r4, %[r]\n\t"
41092 #else
41093         "adc	r4, %[r]\n\t"
41094 #endif
41095 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41096         "lsrs	r7, %[b], #16\n\t"
41097 #else
41098         "lsr	r7, %[b], #16\n\t"
41099 #endif
41100 #ifdef WOLFSSL_KEIL
41101         "muls	r6, r7, r6\n\t"
41102 #elif defined(__clang__)
41103         "muls	r6, r7\n\t"
41104 #else
41105         "mul	r6, r7\n\t"
41106 #endif
41107 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41108         "lsrs	r7, r6, #16\n\t"
41109 #else
41110         "lsr	r7, r6, #16\n\t"
41111 #endif
41112 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41113         "lsls	r6, r6, #16\n\t"
41114 #else
41115         "lsl	r6, r6, #16\n\t"
41116 #endif
41117 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41118         "adds	r5, r5, r6\n\t"
41119 #else
41120         "add	r5, r5, r6\n\t"
41121 #endif
41122 #ifdef WOLFSSL_KEIL
41123         "adcs	r3, r3, r7\n\t"
41124 #elif defined(__clang__)
41125         "adcs	r3, r7\n\t"
41126 #else
41127         "adc	r3, r7\n\t"
41128 #endif
41129 #ifdef WOLFSSL_KEIL
41130         "adcs	r4, r4, %[r]\n\t"
41131 #elif defined(__clang__)
41132         "adcs	r4, %[r]\n\t"
41133 #else
41134         "adc	r4, %[r]\n\t"
41135 #endif
41136 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41137         "lsrs	r6, %[a], #16\n\t"
41138 #else
41139         "lsr	r6, %[a], #16\n\t"
41140 #endif
41141 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41142         "lsrs	r7, %[b], #16\n\t"
41143 #else
41144         "lsr	r7, %[b], #16\n\t"
41145 #endif
41146 #ifdef WOLFSSL_KEIL
41147         "muls	r7, r6, r7\n\t"
41148 #elif defined(__clang__)
41149         "muls	r7, r6\n\t"
41150 #else
41151         "mul	r7, r6\n\t"
41152 #endif
41153 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41154         "adds	r3, r3, r7\n\t"
41155 #else
41156         "add	r3, r3, r7\n\t"
41157 #endif
41158 #ifdef WOLFSSL_KEIL
41159         "adcs	r4, r4, %[r]\n\t"
41160 #elif defined(__clang__)
41161         "adcs	r4, %[r]\n\t"
41162 #else
41163         "adc	r4, %[r]\n\t"
41164 #endif
41165         "uxth	r7, %[b]\n\t"
41166 #ifdef WOLFSSL_KEIL
41167         "muls	r6, r7, r6\n\t"
41168 #elif defined(__clang__)
41169         "muls	r6, r7\n\t"
41170 #else
41171         "mul	r6, r7\n\t"
41172 #endif
41173 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41174         "lsrs	r7, r6, #16\n\t"
41175 #else
41176         "lsr	r7, r6, #16\n\t"
41177 #endif
41178 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41179         "lsls	r6, r6, #16\n\t"
41180 #else
41181         "lsl	r6, r6, #16\n\t"
41182 #endif
41183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41184         "adds	r5, r5, r6\n\t"
41185 #else
41186         "add	r5, r5, r6\n\t"
41187 #endif
41188 #ifdef WOLFSSL_KEIL
41189         "adcs	r3, r3, r7\n\t"
41190 #elif defined(__clang__)
41191         "adcs	r3, r7\n\t"
41192 #else
41193         "adc	r3, r7\n\t"
41194 #endif
41195 #ifdef WOLFSSL_KEIL
41196         "adcs	r4, r4, %[r]\n\t"
41197 #elif defined(__clang__)
41198         "adcs	r4, %[r]\n\t"
41199 #else
41200         "adc	r4, %[r]\n\t"
41201 #endif
41202         "str	r5, [sp, #44]\n\t"
41203         "#  A[11] * B[1]\n\t"
41204         "movs	r5, #0\n\t"
41205         "mov	%[a], r9\n\t"
41206         "mov	%[b], r10\n\t"
41207         "ldr	%[a], [%[a], #44]\n\t"
41208         "ldr	%[b], [%[b], #4]\n\t"
41209         "uxth	r6, %[a]\n\t"
41210         "uxth	r7, %[b]\n\t"
41211 #ifdef WOLFSSL_KEIL
41212         "muls	r7, r6, r7\n\t"
41213 #elif defined(__clang__)
41214         "muls	r7, r6\n\t"
41215 #else
41216         "mul	r7, r6\n\t"
41217 #endif
41218 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41219         "adds	r3, r3, r7\n\t"
41220 #else
41221         "add	r3, r3, r7\n\t"
41222 #endif
41223 #ifdef WOLFSSL_KEIL
41224         "adcs	r4, r4, %[r]\n\t"
41225 #elif defined(__clang__)
41226         "adcs	r4, %[r]\n\t"
41227 #else
41228         "adc	r4, %[r]\n\t"
41229 #endif
41230 #ifdef WOLFSSL_KEIL
41231         "adcs	r5, r5, %[r]\n\t"
41232 #elif defined(__clang__)
41233         "adcs	r5, %[r]\n\t"
41234 #else
41235         "adc	r5, %[r]\n\t"
41236 #endif
41237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41238         "lsrs	r7, %[b], #16\n\t"
41239 #else
41240         "lsr	r7, %[b], #16\n\t"
41241 #endif
41242 #ifdef WOLFSSL_KEIL
41243         "muls	r6, r7, r6\n\t"
41244 #elif defined(__clang__)
41245         "muls	r6, r7\n\t"
41246 #else
41247         "mul	r6, r7\n\t"
41248 #endif
41249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41250         "lsrs	r7, r6, #16\n\t"
41251 #else
41252         "lsr	r7, r6, #16\n\t"
41253 #endif
41254 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41255         "lsls	r6, r6, #16\n\t"
41256 #else
41257         "lsl	r6, r6, #16\n\t"
41258 #endif
41259 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41260         "adds	r3, r3, r6\n\t"
41261 #else
41262         "add	r3, r3, r6\n\t"
41263 #endif
41264 #ifdef WOLFSSL_KEIL
41265         "adcs	r4, r4, r7\n\t"
41266 #elif defined(__clang__)
41267         "adcs	r4, r7\n\t"
41268 #else
41269         "adc	r4, r7\n\t"
41270 #endif
41271 #ifdef WOLFSSL_KEIL
41272         "adcs	r5, r5, %[r]\n\t"
41273 #elif defined(__clang__)
41274         "adcs	r5, %[r]\n\t"
41275 #else
41276         "adc	r5, %[r]\n\t"
41277 #endif
41278 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41279         "lsrs	r6, %[a], #16\n\t"
41280 #else
41281         "lsr	r6, %[a], #16\n\t"
41282 #endif
41283 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41284         "lsrs	r7, %[b], #16\n\t"
41285 #else
41286         "lsr	r7, %[b], #16\n\t"
41287 #endif
41288 #ifdef WOLFSSL_KEIL
41289         "muls	r7, r6, r7\n\t"
41290 #elif defined(__clang__)
41291         "muls	r7, r6\n\t"
41292 #else
41293         "mul	r7, r6\n\t"
41294 #endif
41295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41296         "adds	r4, r4, r7\n\t"
41297 #else
41298         "add	r4, r4, r7\n\t"
41299 #endif
41300 #ifdef WOLFSSL_KEIL
41301         "adcs	r5, r5, %[r]\n\t"
41302 #elif defined(__clang__)
41303         "adcs	r5, %[r]\n\t"
41304 #else
41305         "adc	r5, %[r]\n\t"
41306 #endif
41307         "uxth	r7, %[b]\n\t"
41308 #ifdef WOLFSSL_KEIL
41309         "muls	r6, r7, r6\n\t"
41310 #elif defined(__clang__)
41311         "muls	r6, r7\n\t"
41312 #else
41313         "mul	r6, r7\n\t"
41314 #endif
41315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41316         "lsrs	r7, r6, #16\n\t"
41317 #else
41318         "lsr	r7, r6, #16\n\t"
41319 #endif
41320 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41321         "lsls	r6, r6, #16\n\t"
41322 #else
41323         "lsl	r6, r6, #16\n\t"
41324 #endif
41325 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41326         "adds	r3, r3, r6\n\t"
41327 #else
41328         "add	r3, r3, r6\n\t"
41329 #endif
41330 #ifdef WOLFSSL_KEIL
41331         "adcs	r4, r4, r7\n\t"
41332 #elif defined(__clang__)
41333         "adcs	r4, r7\n\t"
41334 #else
41335         "adc	r4, r7\n\t"
41336 #endif
41337 #ifdef WOLFSSL_KEIL
41338         "adcs	r5, r5, %[r]\n\t"
41339 #elif defined(__clang__)
41340         "adcs	r5, %[r]\n\t"
41341 #else
41342         "adc	r5, %[r]\n\t"
41343 #endif
41344         "#  A[10] * B[2]\n\t"
41345         "mov	%[a], r9\n\t"
41346         "mov	%[b], r10\n\t"
41347         "ldr	%[a], [%[a], #40]\n\t"
41348         "ldr	%[b], [%[b], #8]\n\t"
41349         "uxth	r6, %[a]\n\t"
41350         "uxth	r7, %[b]\n\t"
41351 #ifdef WOLFSSL_KEIL
41352         "muls	r7, r6, r7\n\t"
41353 #elif defined(__clang__)
41354         "muls	r7, r6\n\t"
41355 #else
41356         "mul	r7, r6\n\t"
41357 #endif
41358 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41359         "adds	r3, r3, r7\n\t"
41360 #else
41361         "add	r3, r3, r7\n\t"
41362 #endif
41363 #ifdef WOLFSSL_KEIL
41364         "adcs	r4, r4, %[r]\n\t"
41365 #elif defined(__clang__)
41366         "adcs	r4, %[r]\n\t"
41367 #else
41368         "adc	r4, %[r]\n\t"
41369 #endif
41370 #ifdef WOLFSSL_KEIL
41371         "adcs	r5, r5, %[r]\n\t"
41372 #elif defined(__clang__)
41373         "adcs	r5, %[r]\n\t"
41374 #else
41375         "adc	r5, %[r]\n\t"
41376 #endif
41377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41378         "lsrs	r7, %[b], #16\n\t"
41379 #else
41380         "lsr	r7, %[b], #16\n\t"
41381 #endif
41382 #ifdef WOLFSSL_KEIL
41383         "muls	r6, r7, r6\n\t"
41384 #elif defined(__clang__)
41385         "muls	r6, r7\n\t"
41386 #else
41387         "mul	r6, r7\n\t"
41388 #endif
41389 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41390         "lsrs	r7, r6, #16\n\t"
41391 #else
41392         "lsr	r7, r6, #16\n\t"
41393 #endif
41394 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41395         "lsls	r6, r6, #16\n\t"
41396 #else
41397         "lsl	r6, r6, #16\n\t"
41398 #endif
41399 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41400         "adds	r3, r3, r6\n\t"
41401 #else
41402         "add	r3, r3, r6\n\t"
41403 #endif
41404 #ifdef WOLFSSL_KEIL
41405         "adcs	r4, r4, r7\n\t"
41406 #elif defined(__clang__)
41407         "adcs	r4, r7\n\t"
41408 #else
41409         "adc	r4, r7\n\t"
41410 #endif
41411 #ifdef WOLFSSL_KEIL
41412         "adcs	r5, r5, %[r]\n\t"
41413 #elif defined(__clang__)
41414         "adcs	r5, %[r]\n\t"
41415 #else
41416         "adc	r5, %[r]\n\t"
41417 #endif
41418 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41419         "lsrs	r6, %[a], #16\n\t"
41420 #else
41421         "lsr	r6, %[a], #16\n\t"
41422 #endif
41423 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41424         "lsrs	r7, %[b], #16\n\t"
41425 #else
41426         "lsr	r7, %[b], #16\n\t"
41427 #endif
41428 #ifdef WOLFSSL_KEIL
41429         "muls	r7, r6, r7\n\t"
41430 #elif defined(__clang__)
41431         "muls	r7, r6\n\t"
41432 #else
41433         "mul	r7, r6\n\t"
41434 #endif
41435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41436         "adds	r4, r4, r7\n\t"
41437 #else
41438         "add	r4, r4, r7\n\t"
41439 #endif
41440 #ifdef WOLFSSL_KEIL
41441         "adcs	r5, r5, %[r]\n\t"
41442 #elif defined(__clang__)
41443         "adcs	r5, %[r]\n\t"
41444 #else
41445         "adc	r5, %[r]\n\t"
41446 #endif
41447         "uxth	r7, %[b]\n\t"
41448 #ifdef WOLFSSL_KEIL
41449         "muls	r6, r7, r6\n\t"
41450 #elif defined(__clang__)
41451         "muls	r6, r7\n\t"
41452 #else
41453         "mul	r6, r7\n\t"
41454 #endif
41455 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41456         "lsrs	r7, r6, #16\n\t"
41457 #else
41458         "lsr	r7, r6, #16\n\t"
41459 #endif
41460 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41461         "lsls	r6, r6, #16\n\t"
41462 #else
41463         "lsl	r6, r6, #16\n\t"
41464 #endif
41465 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41466         "adds	r3, r3, r6\n\t"
41467 #else
41468         "add	r3, r3, r6\n\t"
41469 #endif
41470 #ifdef WOLFSSL_KEIL
41471         "adcs	r4, r4, r7\n\t"
41472 #elif defined(__clang__)
41473         "adcs	r4, r7\n\t"
41474 #else
41475         "adc	r4, r7\n\t"
41476 #endif
41477 #ifdef WOLFSSL_KEIL
41478         "adcs	r5, r5, %[r]\n\t"
41479 #elif defined(__clang__)
41480         "adcs	r5, %[r]\n\t"
41481 #else
41482         "adc	r5, %[r]\n\t"
41483 #endif
41484         "#  A[9] * B[3]\n\t"
41485         "mov	%[a], r9\n\t"
41486         "mov	%[b], r10\n\t"
41487         "ldr	%[a], [%[a], #36]\n\t"
41488         "ldr	%[b], [%[b], #12]\n\t"
41489         "uxth	r6, %[a]\n\t"
41490         "uxth	r7, %[b]\n\t"
41491 #ifdef WOLFSSL_KEIL
41492         "muls	r7, r6, r7\n\t"
41493 #elif defined(__clang__)
41494         "muls	r7, r6\n\t"
41495 #else
41496         "mul	r7, r6\n\t"
41497 #endif
41498 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41499         "adds	r3, r3, r7\n\t"
41500 #else
41501         "add	r3, r3, r7\n\t"
41502 #endif
41503 #ifdef WOLFSSL_KEIL
41504         "adcs	r4, r4, %[r]\n\t"
41505 #elif defined(__clang__)
41506         "adcs	r4, %[r]\n\t"
41507 #else
41508         "adc	r4, %[r]\n\t"
41509 #endif
41510 #ifdef WOLFSSL_KEIL
41511         "adcs	r5, r5, %[r]\n\t"
41512 #elif defined(__clang__)
41513         "adcs	r5, %[r]\n\t"
41514 #else
41515         "adc	r5, %[r]\n\t"
41516 #endif
41517 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41518         "lsrs	r7, %[b], #16\n\t"
41519 #else
41520         "lsr	r7, %[b], #16\n\t"
41521 #endif
41522 #ifdef WOLFSSL_KEIL
41523         "muls	r6, r7, r6\n\t"
41524 #elif defined(__clang__)
41525         "muls	r6, r7\n\t"
41526 #else
41527         "mul	r6, r7\n\t"
41528 #endif
41529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41530         "lsrs	r7, r6, #16\n\t"
41531 #else
41532         "lsr	r7, r6, #16\n\t"
41533 #endif
41534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41535         "lsls	r6, r6, #16\n\t"
41536 #else
41537         "lsl	r6, r6, #16\n\t"
41538 #endif
41539 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41540         "adds	r3, r3, r6\n\t"
41541 #else
41542         "add	r3, r3, r6\n\t"
41543 #endif
41544 #ifdef WOLFSSL_KEIL
41545         "adcs	r4, r4, r7\n\t"
41546 #elif defined(__clang__)
41547         "adcs	r4, r7\n\t"
41548 #else
41549         "adc	r4, r7\n\t"
41550 #endif
41551 #ifdef WOLFSSL_KEIL
41552         "adcs	r5, r5, %[r]\n\t"
41553 #elif defined(__clang__)
41554         "adcs	r5, %[r]\n\t"
41555 #else
41556         "adc	r5, %[r]\n\t"
41557 #endif
41558 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41559         "lsrs	r6, %[a], #16\n\t"
41560 #else
41561         "lsr	r6, %[a], #16\n\t"
41562 #endif
41563 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41564         "lsrs	r7, %[b], #16\n\t"
41565 #else
41566         "lsr	r7, %[b], #16\n\t"
41567 #endif
41568 #ifdef WOLFSSL_KEIL
41569         "muls	r7, r6, r7\n\t"
41570 #elif defined(__clang__)
41571         "muls	r7, r6\n\t"
41572 #else
41573         "mul	r7, r6\n\t"
41574 #endif
41575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41576         "adds	r4, r4, r7\n\t"
41577 #else
41578         "add	r4, r4, r7\n\t"
41579 #endif
41580 #ifdef WOLFSSL_KEIL
41581         "adcs	r5, r5, %[r]\n\t"
41582 #elif defined(__clang__)
41583         "adcs	r5, %[r]\n\t"
41584 #else
41585         "adc	r5, %[r]\n\t"
41586 #endif
41587         "uxth	r7, %[b]\n\t"
41588 #ifdef WOLFSSL_KEIL
41589         "muls	r6, r7, r6\n\t"
41590 #elif defined(__clang__)
41591         "muls	r6, r7\n\t"
41592 #else
41593         "mul	r6, r7\n\t"
41594 #endif
41595 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41596         "lsrs	r7, r6, #16\n\t"
41597 #else
41598         "lsr	r7, r6, #16\n\t"
41599 #endif
41600 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41601         "lsls	r6, r6, #16\n\t"
41602 #else
41603         "lsl	r6, r6, #16\n\t"
41604 #endif
41605 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41606         "adds	r3, r3, r6\n\t"
41607 #else
41608         "add	r3, r3, r6\n\t"
41609 #endif
41610 #ifdef WOLFSSL_KEIL
41611         "adcs	r4, r4, r7\n\t"
41612 #elif defined(__clang__)
41613         "adcs	r4, r7\n\t"
41614 #else
41615         "adc	r4, r7\n\t"
41616 #endif
41617 #ifdef WOLFSSL_KEIL
41618         "adcs	r5, r5, %[r]\n\t"
41619 #elif defined(__clang__)
41620         "adcs	r5, %[r]\n\t"
41621 #else
41622         "adc	r5, %[r]\n\t"
41623 #endif
41624         "#  A[8] * B[4]\n\t"
41625         "mov	%[a], r9\n\t"
41626         "mov	%[b], r10\n\t"
41627         "ldr	%[a], [%[a], #32]\n\t"
41628         "ldr	%[b], [%[b], #16]\n\t"
41629         "uxth	r6, %[a]\n\t"
41630         "uxth	r7, %[b]\n\t"
41631 #ifdef WOLFSSL_KEIL
41632         "muls	r7, r6, r7\n\t"
41633 #elif defined(__clang__)
41634         "muls	r7, r6\n\t"
41635 #else
41636         "mul	r7, r6\n\t"
41637 #endif
41638 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41639         "adds	r3, r3, r7\n\t"
41640 #else
41641         "add	r3, r3, r7\n\t"
41642 #endif
41643 #ifdef WOLFSSL_KEIL
41644         "adcs	r4, r4, %[r]\n\t"
41645 #elif defined(__clang__)
41646         "adcs	r4, %[r]\n\t"
41647 #else
41648         "adc	r4, %[r]\n\t"
41649 #endif
41650 #ifdef WOLFSSL_KEIL
41651         "adcs	r5, r5, %[r]\n\t"
41652 #elif defined(__clang__)
41653         "adcs	r5, %[r]\n\t"
41654 #else
41655         "adc	r5, %[r]\n\t"
41656 #endif
41657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41658         "lsrs	r7, %[b], #16\n\t"
41659 #else
41660         "lsr	r7, %[b], #16\n\t"
41661 #endif
41662 #ifdef WOLFSSL_KEIL
41663         "muls	r6, r7, r6\n\t"
41664 #elif defined(__clang__)
41665         "muls	r6, r7\n\t"
41666 #else
41667         "mul	r6, r7\n\t"
41668 #endif
41669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41670         "lsrs	r7, r6, #16\n\t"
41671 #else
41672         "lsr	r7, r6, #16\n\t"
41673 #endif
41674 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41675         "lsls	r6, r6, #16\n\t"
41676 #else
41677         "lsl	r6, r6, #16\n\t"
41678 #endif
41679 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41680         "adds	r3, r3, r6\n\t"
41681 #else
41682         "add	r3, r3, r6\n\t"
41683 #endif
41684 #ifdef WOLFSSL_KEIL
41685         "adcs	r4, r4, r7\n\t"
41686 #elif defined(__clang__)
41687         "adcs	r4, r7\n\t"
41688 #else
41689         "adc	r4, r7\n\t"
41690 #endif
41691 #ifdef WOLFSSL_KEIL
41692         "adcs	r5, r5, %[r]\n\t"
41693 #elif defined(__clang__)
41694         "adcs	r5, %[r]\n\t"
41695 #else
41696         "adc	r5, %[r]\n\t"
41697 #endif
41698 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41699         "lsrs	r6, %[a], #16\n\t"
41700 #else
41701         "lsr	r6, %[a], #16\n\t"
41702 #endif
41703 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41704         "lsrs	r7, %[b], #16\n\t"
41705 #else
41706         "lsr	r7, %[b], #16\n\t"
41707 #endif
41708 #ifdef WOLFSSL_KEIL
41709         "muls	r7, r6, r7\n\t"
41710 #elif defined(__clang__)
41711         "muls	r7, r6\n\t"
41712 #else
41713         "mul	r7, r6\n\t"
41714 #endif
41715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41716         "adds	r4, r4, r7\n\t"
41717 #else
41718         "add	r4, r4, r7\n\t"
41719 #endif
41720 #ifdef WOLFSSL_KEIL
41721         "adcs	r5, r5, %[r]\n\t"
41722 #elif defined(__clang__)
41723         "adcs	r5, %[r]\n\t"
41724 #else
41725         "adc	r5, %[r]\n\t"
41726 #endif
41727         "uxth	r7, %[b]\n\t"
41728 #ifdef WOLFSSL_KEIL
41729         "muls	r6, r7, r6\n\t"
41730 #elif defined(__clang__)
41731         "muls	r6, r7\n\t"
41732 #else
41733         "mul	r6, r7\n\t"
41734 #endif
41735 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41736         "lsrs	r7, r6, #16\n\t"
41737 #else
41738         "lsr	r7, r6, #16\n\t"
41739 #endif
41740 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41741         "lsls	r6, r6, #16\n\t"
41742 #else
41743         "lsl	r6, r6, #16\n\t"
41744 #endif
41745 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41746         "adds	r3, r3, r6\n\t"
41747 #else
41748         "add	r3, r3, r6\n\t"
41749 #endif
41750 #ifdef WOLFSSL_KEIL
41751         "adcs	r4, r4, r7\n\t"
41752 #elif defined(__clang__)
41753         "adcs	r4, r7\n\t"
41754 #else
41755         "adc	r4, r7\n\t"
41756 #endif
41757 #ifdef WOLFSSL_KEIL
41758         "adcs	r5, r5, %[r]\n\t"
41759 #elif defined(__clang__)
41760         "adcs	r5, %[r]\n\t"
41761 #else
41762         "adc	r5, %[r]\n\t"
41763 #endif
41764         "#  A[7] * B[5]\n\t"
41765         "mov	%[a], r9\n\t"
41766         "mov	%[b], r10\n\t"
41767         "ldr	%[a], [%[a], #28]\n\t"
41768         "ldr	%[b], [%[b], #20]\n\t"
41769         "uxth	r6, %[a]\n\t"
41770         "uxth	r7, %[b]\n\t"
41771 #ifdef WOLFSSL_KEIL
41772         "muls	r7, r6, r7\n\t"
41773 #elif defined(__clang__)
41774         "muls	r7, r6\n\t"
41775 #else
41776         "mul	r7, r6\n\t"
41777 #endif
41778 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41779         "adds	r3, r3, r7\n\t"
41780 #else
41781         "add	r3, r3, r7\n\t"
41782 #endif
41783 #ifdef WOLFSSL_KEIL
41784         "adcs	r4, r4, %[r]\n\t"
41785 #elif defined(__clang__)
41786         "adcs	r4, %[r]\n\t"
41787 #else
41788         "adc	r4, %[r]\n\t"
41789 #endif
41790 #ifdef WOLFSSL_KEIL
41791         "adcs	r5, r5, %[r]\n\t"
41792 #elif defined(__clang__)
41793         "adcs	r5, %[r]\n\t"
41794 #else
41795         "adc	r5, %[r]\n\t"
41796 #endif
41797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41798         "lsrs	r7, %[b], #16\n\t"
41799 #else
41800         "lsr	r7, %[b], #16\n\t"
41801 #endif
41802 #ifdef WOLFSSL_KEIL
41803         "muls	r6, r7, r6\n\t"
41804 #elif defined(__clang__)
41805         "muls	r6, r7\n\t"
41806 #else
41807         "mul	r6, r7\n\t"
41808 #endif
41809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41810         "lsrs	r7, r6, #16\n\t"
41811 #else
41812         "lsr	r7, r6, #16\n\t"
41813 #endif
41814 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41815         "lsls	r6, r6, #16\n\t"
41816 #else
41817         "lsl	r6, r6, #16\n\t"
41818 #endif
41819 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41820         "adds	r3, r3, r6\n\t"
41821 #else
41822         "add	r3, r3, r6\n\t"
41823 #endif
41824 #ifdef WOLFSSL_KEIL
41825         "adcs	r4, r4, r7\n\t"
41826 #elif defined(__clang__)
41827         "adcs	r4, r7\n\t"
41828 #else
41829         "adc	r4, r7\n\t"
41830 #endif
41831 #ifdef WOLFSSL_KEIL
41832         "adcs	r5, r5, %[r]\n\t"
41833 #elif defined(__clang__)
41834         "adcs	r5, %[r]\n\t"
41835 #else
41836         "adc	r5, %[r]\n\t"
41837 #endif
41838 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41839         "lsrs	r6, %[a], #16\n\t"
41840 #else
41841         "lsr	r6, %[a], #16\n\t"
41842 #endif
41843 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41844         "lsrs	r7, %[b], #16\n\t"
41845 #else
41846         "lsr	r7, %[b], #16\n\t"
41847 #endif
41848 #ifdef WOLFSSL_KEIL
41849         "muls	r7, r6, r7\n\t"
41850 #elif defined(__clang__)
41851         "muls	r7, r6\n\t"
41852 #else
41853         "mul	r7, r6\n\t"
41854 #endif
41855 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41856         "adds	r4, r4, r7\n\t"
41857 #else
41858         "add	r4, r4, r7\n\t"
41859 #endif
41860 #ifdef WOLFSSL_KEIL
41861         "adcs	r5, r5, %[r]\n\t"
41862 #elif defined(__clang__)
41863         "adcs	r5, %[r]\n\t"
41864 #else
41865         "adc	r5, %[r]\n\t"
41866 #endif
41867         "uxth	r7, %[b]\n\t"
41868 #ifdef WOLFSSL_KEIL
41869         "muls	r6, r7, r6\n\t"
41870 #elif defined(__clang__)
41871         "muls	r6, r7\n\t"
41872 #else
41873         "mul	r6, r7\n\t"
41874 #endif
41875 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41876         "lsrs	r7, r6, #16\n\t"
41877 #else
41878         "lsr	r7, r6, #16\n\t"
41879 #endif
41880 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41881         "lsls	r6, r6, #16\n\t"
41882 #else
41883         "lsl	r6, r6, #16\n\t"
41884 #endif
41885 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41886         "adds	r3, r3, r6\n\t"
41887 #else
41888         "add	r3, r3, r6\n\t"
41889 #endif
41890 #ifdef WOLFSSL_KEIL
41891         "adcs	r4, r4, r7\n\t"
41892 #elif defined(__clang__)
41893         "adcs	r4, r7\n\t"
41894 #else
41895         "adc	r4, r7\n\t"
41896 #endif
41897 #ifdef WOLFSSL_KEIL
41898         "adcs	r5, r5, %[r]\n\t"
41899 #elif defined(__clang__)
41900         "adcs	r5, %[r]\n\t"
41901 #else
41902         "adc	r5, %[r]\n\t"
41903 #endif
41904         "#  A[6] * B[6]\n\t"
41905         "mov	%[a], r9\n\t"
41906         "mov	%[b], r10\n\t"
41907         "ldr	%[a], [%[a], #24]\n\t"
41908         "ldr	%[b], [%[b], #24]\n\t"
41909         "uxth	r6, %[a]\n\t"
41910         "uxth	r7, %[b]\n\t"
41911 #ifdef WOLFSSL_KEIL
41912         "muls	r7, r6, r7\n\t"
41913 #elif defined(__clang__)
41914         "muls	r7, r6\n\t"
41915 #else
41916         "mul	r7, r6\n\t"
41917 #endif
41918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41919         "adds	r3, r3, r7\n\t"
41920 #else
41921         "add	r3, r3, r7\n\t"
41922 #endif
41923 #ifdef WOLFSSL_KEIL
41924         "adcs	r4, r4, %[r]\n\t"
41925 #elif defined(__clang__)
41926         "adcs	r4, %[r]\n\t"
41927 #else
41928         "adc	r4, %[r]\n\t"
41929 #endif
41930 #ifdef WOLFSSL_KEIL
41931         "adcs	r5, r5, %[r]\n\t"
41932 #elif defined(__clang__)
41933         "adcs	r5, %[r]\n\t"
41934 #else
41935         "adc	r5, %[r]\n\t"
41936 #endif
41937 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41938         "lsrs	r7, %[b], #16\n\t"
41939 #else
41940         "lsr	r7, %[b], #16\n\t"
41941 #endif
41942 #ifdef WOLFSSL_KEIL
41943         "muls	r6, r7, r6\n\t"
41944 #elif defined(__clang__)
41945         "muls	r6, r7\n\t"
41946 #else
41947         "mul	r6, r7\n\t"
41948 #endif
41949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41950         "lsrs	r7, r6, #16\n\t"
41951 #else
41952         "lsr	r7, r6, #16\n\t"
41953 #endif
41954 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41955         "lsls	r6, r6, #16\n\t"
41956 #else
41957         "lsl	r6, r6, #16\n\t"
41958 #endif
41959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41960         "adds	r3, r3, r6\n\t"
41961 #else
41962         "add	r3, r3, r6\n\t"
41963 #endif
41964 #ifdef WOLFSSL_KEIL
41965         "adcs	r4, r4, r7\n\t"
41966 #elif defined(__clang__)
41967         "adcs	r4, r7\n\t"
41968 #else
41969         "adc	r4, r7\n\t"
41970 #endif
41971 #ifdef WOLFSSL_KEIL
41972         "adcs	r5, r5, %[r]\n\t"
41973 #elif defined(__clang__)
41974         "adcs	r5, %[r]\n\t"
41975 #else
41976         "adc	r5, %[r]\n\t"
41977 #endif
41978 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41979         "lsrs	r6, %[a], #16\n\t"
41980 #else
41981         "lsr	r6, %[a], #16\n\t"
41982 #endif
41983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41984         "lsrs	r7, %[b], #16\n\t"
41985 #else
41986         "lsr	r7, %[b], #16\n\t"
41987 #endif
41988 #ifdef WOLFSSL_KEIL
41989         "muls	r7, r6, r7\n\t"
41990 #elif defined(__clang__)
41991         "muls	r7, r6\n\t"
41992 #else
41993         "mul	r7, r6\n\t"
41994 #endif
41995 #if defined(__clang__) || defined(WOLFSSL_KEIL)
41996         "adds	r4, r4, r7\n\t"
41997 #else
41998         "add	r4, r4, r7\n\t"
41999 #endif
42000 #ifdef WOLFSSL_KEIL
42001         "adcs	r5, r5, %[r]\n\t"
42002 #elif defined(__clang__)
42003         "adcs	r5, %[r]\n\t"
42004 #else
42005         "adc	r5, %[r]\n\t"
42006 #endif
42007         "uxth	r7, %[b]\n\t"
42008 #ifdef WOLFSSL_KEIL
42009         "muls	r6, r7, r6\n\t"
42010 #elif defined(__clang__)
42011         "muls	r6, r7\n\t"
42012 #else
42013         "mul	r6, r7\n\t"
42014 #endif
42015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42016         "lsrs	r7, r6, #16\n\t"
42017 #else
42018         "lsr	r7, r6, #16\n\t"
42019 #endif
42020 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42021         "lsls	r6, r6, #16\n\t"
42022 #else
42023         "lsl	r6, r6, #16\n\t"
42024 #endif
42025 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42026         "adds	r3, r3, r6\n\t"
42027 #else
42028         "add	r3, r3, r6\n\t"
42029 #endif
42030 #ifdef WOLFSSL_KEIL
42031         "adcs	r4, r4, r7\n\t"
42032 #elif defined(__clang__)
42033         "adcs	r4, r7\n\t"
42034 #else
42035         "adc	r4, r7\n\t"
42036 #endif
42037 #ifdef WOLFSSL_KEIL
42038         "adcs	r5, r5, %[r]\n\t"
42039 #elif defined(__clang__)
42040         "adcs	r5, %[r]\n\t"
42041 #else
42042         "adc	r5, %[r]\n\t"
42043 #endif
42044         "#  A[5] * B[7]\n\t"
42045         "mov	%[a], r9\n\t"
42046         "mov	%[b], r10\n\t"
42047         "ldr	%[a], [%[a], #20]\n\t"
42048         "ldr	%[b], [%[b], #28]\n\t"
42049         "uxth	r6, %[a]\n\t"
42050         "uxth	r7, %[b]\n\t"
42051 #ifdef WOLFSSL_KEIL
42052         "muls	r7, r6, r7\n\t"
42053 #elif defined(__clang__)
42054         "muls	r7, r6\n\t"
42055 #else
42056         "mul	r7, r6\n\t"
42057 #endif
42058 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42059         "adds	r3, r3, r7\n\t"
42060 #else
42061         "add	r3, r3, r7\n\t"
42062 #endif
42063 #ifdef WOLFSSL_KEIL
42064         "adcs	r4, r4, %[r]\n\t"
42065 #elif defined(__clang__)
42066         "adcs	r4, %[r]\n\t"
42067 #else
42068         "adc	r4, %[r]\n\t"
42069 #endif
42070 #ifdef WOLFSSL_KEIL
42071         "adcs	r5, r5, %[r]\n\t"
42072 #elif defined(__clang__)
42073         "adcs	r5, %[r]\n\t"
42074 #else
42075         "adc	r5, %[r]\n\t"
42076 #endif
42077 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42078         "lsrs	r7, %[b], #16\n\t"
42079 #else
42080         "lsr	r7, %[b], #16\n\t"
42081 #endif
42082 #ifdef WOLFSSL_KEIL
42083         "muls	r6, r7, r6\n\t"
42084 #elif defined(__clang__)
42085         "muls	r6, r7\n\t"
42086 #else
42087         "mul	r6, r7\n\t"
42088 #endif
42089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42090         "lsrs	r7, r6, #16\n\t"
42091 #else
42092         "lsr	r7, r6, #16\n\t"
42093 #endif
42094 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42095         "lsls	r6, r6, #16\n\t"
42096 #else
42097         "lsl	r6, r6, #16\n\t"
42098 #endif
42099 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42100         "adds	r3, r3, r6\n\t"
42101 #else
42102         "add	r3, r3, r6\n\t"
42103 #endif
42104 #ifdef WOLFSSL_KEIL
42105         "adcs	r4, r4, r7\n\t"
42106 #elif defined(__clang__)
42107         "adcs	r4, r7\n\t"
42108 #else
42109         "adc	r4, r7\n\t"
42110 #endif
42111 #ifdef WOLFSSL_KEIL
42112         "adcs	r5, r5, %[r]\n\t"
42113 #elif defined(__clang__)
42114         "adcs	r5, %[r]\n\t"
42115 #else
42116         "adc	r5, %[r]\n\t"
42117 #endif
42118 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42119         "lsrs	r6, %[a], #16\n\t"
42120 #else
42121         "lsr	r6, %[a], #16\n\t"
42122 #endif
42123 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42124         "lsrs	r7, %[b], #16\n\t"
42125 #else
42126         "lsr	r7, %[b], #16\n\t"
42127 #endif
42128 #ifdef WOLFSSL_KEIL
42129         "muls	r7, r6, r7\n\t"
42130 #elif defined(__clang__)
42131         "muls	r7, r6\n\t"
42132 #else
42133         "mul	r7, r6\n\t"
42134 #endif
42135 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42136         "adds	r4, r4, r7\n\t"
42137 #else
42138         "add	r4, r4, r7\n\t"
42139 #endif
42140 #ifdef WOLFSSL_KEIL
42141         "adcs	r5, r5, %[r]\n\t"
42142 #elif defined(__clang__)
42143         "adcs	r5, %[r]\n\t"
42144 #else
42145         "adc	r5, %[r]\n\t"
42146 #endif
42147         "uxth	r7, %[b]\n\t"
42148 #ifdef WOLFSSL_KEIL
42149         "muls	r6, r7, r6\n\t"
42150 #elif defined(__clang__)
42151         "muls	r6, r7\n\t"
42152 #else
42153         "mul	r6, r7\n\t"
42154 #endif
42155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42156         "lsrs	r7, r6, #16\n\t"
42157 #else
42158         "lsr	r7, r6, #16\n\t"
42159 #endif
42160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42161         "lsls	r6, r6, #16\n\t"
42162 #else
42163         "lsl	r6, r6, #16\n\t"
42164 #endif
42165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42166         "adds	r3, r3, r6\n\t"
42167 #else
42168         "add	r3, r3, r6\n\t"
42169 #endif
42170 #ifdef WOLFSSL_KEIL
42171         "adcs	r4, r4, r7\n\t"
42172 #elif defined(__clang__)
42173         "adcs	r4, r7\n\t"
42174 #else
42175         "adc	r4, r7\n\t"
42176 #endif
42177 #ifdef WOLFSSL_KEIL
42178         "adcs	r5, r5, %[r]\n\t"
42179 #elif defined(__clang__)
42180         "adcs	r5, %[r]\n\t"
42181 #else
42182         "adc	r5, %[r]\n\t"
42183 #endif
42184         "#  A[4] * B[8]\n\t"
42185         "mov	%[a], r9\n\t"
42186         "mov	%[b], r10\n\t"
42187         "ldr	%[a], [%[a], #16]\n\t"
42188         "ldr	%[b], [%[b], #32]\n\t"
42189         "uxth	r6, %[a]\n\t"
42190         "uxth	r7, %[b]\n\t"
42191 #ifdef WOLFSSL_KEIL
42192         "muls	r7, r6, r7\n\t"
42193 #elif defined(__clang__)
42194         "muls	r7, r6\n\t"
42195 #else
42196         "mul	r7, r6\n\t"
42197 #endif
42198 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42199         "adds	r3, r3, r7\n\t"
42200 #else
42201         "add	r3, r3, r7\n\t"
42202 #endif
42203 #ifdef WOLFSSL_KEIL
42204         "adcs	r4, r4, %[r]\n\t"
42205 #elif defined(__clang__)
42206         "adcs	r4, %[r]\n\t"
42207 #else
42208         "adc	r4, %[r]\n\t"
42209 #endif
42210 #ifdef WOLFSSL_KEIL
42211         "adcs	r5, r5, %[r]\n\t"
42212 #elif defined(__clang__)
42213         "adcs	r5, %[r]\n\t"
42214 #else
42215         "adc	r5, %[r]\n\t"
42216 #endif
42217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42218         "lsrs	r7, %[b], #16\n\t"
42219 #else
42220         "lsr	r7, %[b], #16\n\t"
42221 #endif
42222 #ifdef WOLFSSL_KEIL
42223         "muls	r6, r7, r6\n\t"
42224 #elif defined(__clang__)
42225         "muls	r6, r7\n\t"
42226 #else
42227         "mul	r6, r7\n\t"
42228 #endif
42229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42230         "lsrs	r7, r6, #16\n\t"
42231 #else
42232         "lsr	r7, r6, #16\n\t"
42233 #endif
42234 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42235         "lsls	r6, r6, #16\n\t"
42236 #else
42237         "lsl	r6, r6, #16\n\t"
42238 #endif
42239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42240         "adds	r3, r3, r6\n\t"
42241 #else
42242         "add	r3, r3, r6\n\t"
42243 #endif
42244 #ifdef WOLFSSL_KEIL
42245         "adcs	r4, r4, r7\n\t"
42246 #elif defined(__clang__)
42247         "adcs	r4, r7\n\t"
42248 #else
42249         "adc	r4, r7\n\t"
42250 #endif
42251 #ifdef WOLFSSL_KEIL
42252         "adcs	r5, r5, %[r]\n\t"
42253 #elif defined(__clang__)
42254         "adcs	r5, %[r]\n\t"
42255 #else
42256         "adc	r5, %[r]\n\t"
42257 #endif
42258 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42259         "lsrs	r6, %[a], #16\n\t"
42260 #else
42261         "lsr	r6, %[a], #16\n\t"
42262 #endif
42263 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42264         "lsrs	r7, %[b], #16\n\t"
42265 #else
42266         "lsr	r7, %[b], #16\n\t"
42267 #endif
42268 #ifdef WOLFSSL_KEIL
42269         "muls	r7, r6, r7\n\t"
42270 #elif defined(__clang__)
42271         "muls	r7, r6\n\t"
42272 #else
42273         "mul	r7, r6\n\t"
42274 #endif
42275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42276         "adds	r4, r4, r7\n\t"
42277 #else
42278         "add	r4, r4, r7\n\t"
42279 #endif
42280 #ifdef WOLFSSL_KEIL
42281         "adcs	r5, r5, %[r]\n\t"
42282 #elif defined(__clang__)
42283         "adcs	r5, %[r]\n\t"
42284 #else
42285         "adc	r5, %[r]\n\t"
42286 #endif
42287         "uxth	r7, %[b]\n\t"
42288 #ifdef WOLFSSL_KEIL
42289         "muls	r6, r7, r6\n\t"
42290 #elif defined(__clang__)
42291         "muls	r6, r7\n\t"
42292 #else
42293         "mul	r6, r7\n\t"
42294 #endif
42295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42296         "lsrs	r7, r6, #16\n\t"
42297 #else
42298         "lsr	r7, r6, #16\n\t"
42299 #endif
42300 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42301         "lsls	r6, r6, #16\n\t"
42302 #else
42303         "lsl	r6, r6, #16\n\t"
42304 #endif
42305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42306         "adds	r3, r3, r6\n\t"
42307 #else
42308         "add	r3, r3, r6\n\t"
42309 #endif
42310 #ifdef WOLFSSL_KEIL
42311         "adcs	r4, r4, r7\n\t"
42312 #elif defined(__clang__)
42313         "adcs	r4, r7\n\t"
42314 #else
42315         "adc	r4, r7\n\t"
42316 #endif
42317 #ifdef WOLFSSL_KEIL
42318         "adcs	r5, r5, %[r]\n\t"
42319 #elif defined(__clang__)
42320         "adcs	r5, %[r]\n\t"
42321 #else
42322         "adc	r5, %[r]\n\t"
42323 #endif
42324         "#  A[3] * B[9]\n\t"
42325         "mov	%[a], r9\n\t"
42326         "mov	%[b], r10\n\t"
42327         "ldr	%[a], [%[a], #12]\n\t"
42328         "ldr	%[b], [%[b], #36]\n\t"
42329         "uxth	r6, %[a]\n\t"
42330         "uxth	r7, %[b]\n\t"
42331 #ifdef WOLFSSL_KEIL
42332         "muls	r7, r6, r7\n\t"
42333 #elif defined(__clang__)
42334         "muls	r7, r6\n\t"
42335 #else
42336         "mul	r7, r6\n\t"
42337 #endif
42338 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42339         "adds	r3, r3, r7\n\t"
42340 #else
42341         "add	r3, r3, r7\n\t"
42342 #endif
42343 #ifdef WOLFSSL_KEIL
42344         "adcs	r4, r4, %[r]\n\t"
42345 #elif defined(__clang__)
42346         "adcs	r4, %[r]\n\t"
42347 #else
42348         "adc	r4, %[r]\n\t"
42349 #endif
42350 #ifdef WOLFSSL_KEIL
42351         "adcs	r5, r5, %[r]\n\t"
42352 #elif defined(__clang__)
42353         "adcs	r5, %[r]\n\t"
42354 #else
42355         "adc	r5, %[r]\n\t"
42356 #endif
42357 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42358         "lsrs	r7, %[b], #16\n\t"
42359 #else
42360         "lsr	r7, %[b], #16\n\t"
42361 #endif
42362 #ifdef WOLFSSL_KEIL
42363         "muls	r6, r7, r6\n\t"
42364 #elif defined(__clang__)
42365         "muls	r6, r7\n\t"
42366 #else
42367         "mul	r6, r7\n\t"
42368 #endif
42369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42370         "lsrs	r7, r6, #16\n\t"
42371 #else
42372         "lsr	r7, r6, #16\n\t"
42373 #endif
42374 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42375         "lsls	r6, r6, #16\n\t"
42376 #else
42377         "lsl	r6, r6, #16\n\t"
42378 #endif
42379 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42380         "adds	r3, r3, r6\n\t"
42381 #else
42382         "add	r3, r3, r6\n\t"
42383 #endif
42384 #ifdef WOLFSSL_KEIL
42385         "adcs	r4, r4, r7\n\t"
42386 #elif defined(__clang__)
42387         "adcs	r4, r7\n\t"
42388 #else
42389         "adc	r4, r7\n\t"
42390 #endif
42391 #ifdef WOLFSSL_KEIL
42392         "adcs	r5, r5, %[r]\n\t"
42393 #elif defined(__clang__)
42394         "adcs	r5, %[r]\n\t"
42395 #else
42396         "adc	r5, %[r]\n\t"
42397 #endif
42398 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42399         "lsrs	r6, %[a], #16\n\t"
42400 #else
42401         "lsr	r6, %[a], #16\n\t"
42402 #endif
42403 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42404         "lsrs	r7, %[b], #16\n\t"
42405 #else
42406         "lsr	r7, %[b], #16\n\t"
42407 #endif
42408 #ifdef WOLFSSL_KEIL
42409         "muls	r7, r6, r7\n\t"
42410 #elif defined(__clang__)
42411         "muls	r7, r6\n\t"
42412 #else
42413         "mul	r7, r6\n\t"
42414 #endif
42415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42416         "adds	r4, r4, r7\n\t"
42417 #else
42418         "add	r4, r4, r7\n\t"
42419 #endif
42420 #ifdef WOLFSSL_KEIL
42421         "adcs	r5, r5, %[r]\n\t"
42422 #elif defined(__clang__)
42423         "adcs	r5, %[r]\n\t"
42424 #else
42425         "adc	r5, %[r]\n\t"
42426 #endif
42427         "uxth	r7, %[b]\n\t"
42428 #ifdef WOLFSSL_KEIL
42429         "muls	r6, r7, r6\n\t"
42430 #elif defined(__clang__)
42431         "muls	r6, r7\n\t"
42432 #else
42433         "mul	r6, r7\n\t"
42434 #endif
42435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42436         "lsrs	r7, r6, #16\n\t"
42437 #else
42438         "lsr	r7, r6, #16\n\t"
42439 #endif
42440 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42441         "lsls	r6, r6, #16\n\t"
42442 #else
42443         "lsl	r6, r6, #16\n\t"
42444 #endif
42445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42446         "adds	r3, r3, r6\n\t"
42447 #else
42448         "add	r3, r3, r6\n\t"
42449 #endif
42450 #ifdef WOLFSSL_KEIL
42451         "adcs	r4, r4, r7\n\t"
42452 #elif defined(__clang__)
42453         "adcs	r4, r7\n\t"
42454 #else
42455         "adc	r4, r7\n\t"
42456 #endif
42457 #ifdef WOLFSSL_KEIL
42458         "adcs	r5, r5, %[r]\n\t"
42459 #elif defined(__clang__)
42460         "adcs	r5, %[r]\n\t"
42461 #else
42462         "adc	r5, %[r]\n\t"
42463 #endif
42464         "#  A[2] * B[10]\n\t"
42465         "mov	%[a], r9\n\t"
42466         "mov	%[b], r10\n\t"
42467         "ldr	%[a], [%[a], #8]\n\t"
42468         "ldr	%[b], [%[b], #40]\n\t"
42469         "uxth	r6, %[a]\n\t"
42470         "uxth	r7, %[b]\n\t"
42471 #ifdef WOLFSSL_KEIL
42472         "muls	r7, r6, r7\n\t"
42473 #elif defined(__clang__)
42474         "muls	r7, r6\n\t"
42475 #else
42476         "mul	r7, r6\n\t"
42477 #endif
42478 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42479         "adds	r3, r3, r7\n\t"
42480 #else
42481         "add	r3, r3, r7\n\t"
42482 #endif
42483 #ifdef WOLFSSL_KEIL
42484         "adcs	r4, r4, %[r]\n\t"
42485 #elif defined(__clang__)
42486         "adcs	r4, %[r]\n\t"
42487 #else
42488         "adc	r4, %[r]\n\t"
42489 #endif
42490 #ifdef WOLFSSL_KEIL
42491         "adcs	r5, r5, %[r]\n\t"
42492 #elif defined(__clang__)
42493         "adcs	r5, %[r]\n\t"
42494 #else
42495         "adc	r5, %[r]\n\t"
42496 #endif
42497 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42498         "lsrs	r7, %[b], #16\n\t"
42499 #else
42500         "lsr	r7, %[b], #16\n\t"
42501 #endif
42502 #ifdef WOLFSSL_KEIL
42503         "muls	r6, r7, r6\n\t"
42504 #elif defined(__clang__)
42505         "muls	r6, r7\n\t"
42506 #else
42507         "mul	r6, r7\n\t"
42508 #endif
42509 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42510         "lsrs	r7, r6, #16\n\t"
42511 #else
42512         "lsr	r7, r6, #16\n\t"
42513 #endif
42514 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42515         "lsls	r6, r6, #16\n\t"
42516 #else
42517         "lsl	r6, r6, #16\n\t"
42518 #endif
42519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42520         "adds	r3, r3, r6\n\t"
42521 #else
42522         "add	r3, r3, r6\n\t"
42523 #endif
42524 #ifdef WOLFSSL_KEIL
42525         "adcs	r4, r4, r7\n\t"
42526 #elif defined(__clang__)
42527         "adcs	r4, r7\n\t"
42528 #else
42529         "adc	r4, r7\n\t"
42530 #endif
42531 #ifdef WOLFSSL_KEIL
42532         "adcs	r5, r5, %[r]\n\t"
42533 #elif defined(__clang__)
42534         "adcs	r5, %[r]\n\t"
42535 #else
42536         "adc	r5, %[r]\n\t"
42537 #endif
42538 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42539         "lsrs	r6, %[a], #16\n\t"
42540 #else
42541         "lsr	r6, %[a], #16\n\t"
42542 #endif
42543 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42544         "lsrs	r7, %[b], #16\n\t"
42545 #else
42546         "lsr	r7, %[b], #16\n\t"
42547 #endif
42548 #ifdef WOLFSSL_KEIL
42549         "muls	r7, r6, r7\n\t"
42550 #elif defined(__clang__)
42551         "muls	r7, r6\n\t"
42552 #else
42553         "mul	r7, r6\n\t"
42554 #endif
42555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42556         "adds	r4, r4, r7\n\t"
42557 #else
42558         "add	r4, r4, r7\n\t"
42559 #endif
42560 #ifdef WOLFSSL_KEIL
42561         "adcs	r5, r5, %[r]\n\t"
42562 #elif defined(__clang__)
42563         "adcs	r5, %[r]\n\t"
42564 #else
42565         "adc	r5, %[r]\n\t"
42566 #endif
42567         "uxth	r7, %[b]\n\t"
42568 #ifdef WOLFSSL_KEIL
42569         "muls	r6, r7, r6\n\t"
42570 #elif defined(__clang__)
42571         "muls	r6, r7\n\t"
42572 #else
42573         "mul	r6, r7\n\t"
42574 #endif
42575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42576         "lsrs	r7, r6, #16\n\t"
42577 #else
42578         "lsr	r7, r6, #16\n\t"
42579 #endif
42580 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42581         "lsls	r6, r6, #16\n\t"
42582 #else
42583         "lsl	r6, r6, #16\n\t"
42584 #endif
42585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42586         "adds	r3, r3, r6\n\t"
42587 #else
42588         "add	r3, r3, r6\n\t"
42589 #endif
42590 #ifdef WOLFSSL_KEIL
42591         "adcs	r4, r4, r7\n\t"
42592 #elif defined(__clang__)
42593         "adcs	r4, r7\n\t"
42594 #else
42595         "adc	r4, r7\n\t"
42596 #endif
42597 #ifdef WOLFSSL_KEIL
42598         "adcs	r5, r5, %[r]\n\t"
42599 #elif defined(__clang__)
42600         "adcs	r5, %[r]\n\t"
42601 #else
42602         "adc	r5, %[r]\n\t"
42603 #endif
42604         "#  A[1] * B[11]\n\t"
42605         "mov	%[a], r9\n\t"
42606         "mov	%[b], r10\n\t"
42607         "ldr	%[a], [%[a], #4]\n\t"
42608         "ldr	%[b], [%[b], #44]\n\t"
42609         "uxth	r6, %[a]\n\t"
42610         "uxth	r7, %[b]\n\t"
42611 #ifdef WOLFSSL_KEIL
42612         "muls	r7, r6, r7\n\t"
42613 #elif defined(__clang__)
42614         "muls	r7, r6\n\t"
42615 #else
42616         "mul	r7, r6\n\t"
42617 #endif
42618 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42619         "adds	r3, r3, r7\n\t"
42620 #else
42621         "add	r3, r3, r7\n\t"
42622 #endif
42623 #ifdef WOLFSSL_KEIL
42624         "adcs	r4, r4, %[r]\n\t"
42625 #elif defined(__clang__)
42626         "adcs	r4, %[r]\n\t"
42627 #else
42628         "adc	r4, %[r]\n\t"
42629 #endif
42630 #ifdef WOLFSSL_KEIL
42631         "adcs	r5, r5, %[r]\n\t"
42632 #elif defined(__clang__)
42633         "adcs	r5, %[r]\n\t"
42634 #else
42635         "adc	r5, %[r]\n\t"
42636 #endif
42637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42638         "lsrs	r7, %[b], #16\n\t"
42639 #else
42640         "lsr	r7, %[b], #16\n\t"
42641 #endif
42642 #ifdef WOLFSSL_KEIL
42643         "muls	r6, r7, r6\n\t"
42644 #elif defined(__clang__)
42645         "muls	r6, r7\n\t"
42646 #else
42647         "mul	r6, r7\n\t"
42648 #endif
42649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42650         "lsrs	r7, r6, #16\n\t"
42651 #else
42652         "lsr	r7, r6, #16\n\t"
42653 #endif
42654 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42655         "lsls	r6, r6, #16\n\t"
42656 #else
42657         "lsl	r6, r6, #16\n\t"
42658 #endif
42659 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42660         "adds	r3, r3, r6\n\t"
42661 #else
42662         "add	r3, r3, r6\n\t"
42663 #endif
42664 #ifdef WOLFSSL_KEIL
42665         "adcs	r4, r4, r7\n\t"
42666 #elif defined(__clang__)
42667         "adcs	r4, r7\n\t"
42668 #else
42669         "adc	r4, r7\n\t"
42670 #endif
42671 #ifdef WOLFSSL_KEIL
42672         "adcs	r5, r5, %[r]\n\t"
42673 #elif defined(__clang__)
42674         "adcs	r5, %[r]\n\t"
42675 #else
42676         "adc	r5, %[r]\n\t"
42677 #endif
42678 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42679         "lsrs	r6, %[a], #16\n\t"
42680 #else
42681         "lsr	r6, %[a], #16\n\t"
42682 #endif
42683 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42684         "lsrs	r7, %[b], #16\n\t"
42685 #else
42686         "lsr	r7, %[b], #16\n\t"
42687 #endif
42688 #ifdef WOLFSSL_KEIL
42689         "muls	r7, r6, r7\n\t"
42690 #elif defined(__clang__)
42691         "muls	r7, r6\n\t"
42692 #else
42693         "mul	r7, r6\n\t"
42694 #endif
42695 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42696         "adds	r4, r4, r7\n\t"
42697 #else
42698         "add	r4, r4, r7\n\t"
42699 #endif
42700 #ifdef WOLFSSL_KEIL
42701         "adcs	r5, r5, %[r]\n\t"
42702 #elif defined(__clang__)
42703         "adcs	r5, %[r]\n\t"
42704 #else
42705         "adc	r5, %[r]\n\t"
42706 #endif
42707         "uxth	r7, %[b]\n\t"
42708 #ifdef WOLFSSL_KEIL
42709         "muls	r6, r7, r6\n\t"
42710 #elif defined(__clang__)
42711         "muls	r6, r7\n\t"
42712 #else
42713         "mul	r6, r7\n\t"
42714 #endif
42715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42716         "lsrs	r7, r6, #16\n\t"
42717 #else
42718         "lsr	r7, r6, #16\n\t"
42719 #endif
42720 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42721         "lsls	r6, r6, #16\n\t"
42722 #else
42723         "lsl	r6, r6, #16\n\t"
42724 #endif
42725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42726         "adds	r3, r3, r6\n\t"
42727 #else
42728         "add	r3, r3, r6\n\t"
42729 #endif
42730 #ifdef WOLFSSL_KEIL
42731         "adcs	r4, r4, r7\n\t"
42732 #elif defined(__clang__)
42733         "adcs	r4, r7\n\t"
42734 #else
42735         "adc	r4, r7\n\t"
42736 #endif
42737 #ifdef WOLFSSL_KEIL
42738         "adcs	r5, r5, %[r]\n\t"
42739 #elif defined(__clang__)
42740         "adcs	r5, %[r]\n\t"
42741 #else
42742         "adc	r5, %[r]\n\t"
42743 #endif
42744         "mov	%[r], r8\n\t"
42745         "str	r3, [%[r], #48]\n\t"
42746         "movs	%[r], #0\n\t"
42747         "#  A[2] * B[11]\n\t"
42748         "movs	r3, #0\n\t"
42749         "mov	%[a], r9\n\t"
42750         "mov	%[b], r10\n\t"
42751         "ldr	%[a], [%[a], #8]\n\t"
42752         "ldr	%[b], [%[b], #44]\n\t"
42753         "uxth	r6, %[a]\n\t"
42754         "uxth	r7, %[b]\n\t"
42755 #ifdef WOLFSSL_KEIL
42756         "muls	r7, r6, r7\n\t"
42757 #elif defined(__clang__)
42758         "muls	r7, r6\n\t"
42759 #else
42760         "mul	r7, r6\n\t"
42761 #endif
42762 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42763         "adds	r4, r4, r7\n\t"
42764 #else
42765         "add	r4, r4, r7\n\t"
42766 #endif
42767 #ifdef WOLFSSL_KEIL
42768         "adcs	r5, r5, %[r]\n\t"
42769 #elif defined(__clang__)
42770         "adcs	r5, %[r]\n\t"
42771 #else
42772         "adc	r5, %[r]\n\t"
42773 #endif
42774 #ifdef WOLFSSL_KEIL
42775         "adcs	r3, r3, %[r]\n\t"
42776 #elif defined(__clang__)
42777         "adcs	r3, %[r]\n\t"
42778 #else
42779         "adc	r3, %[r]\n\t"
42780 #endif
42781 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42782         "lsrs	r7, %[b], #16\n\t"
42783 #else
42784         "lsr	r7, %[b], #16\n\t"
42785 #endif
42786 #ifdef WOLFSSL_KEIL
42787         "muls	r6, r7, r6\n\t"
42788 #elif defined(__clang__)
42789         "muls	r6, r7\n\t"
42790 #else
42791         "mul	r6, r7\n\t"
42792 #endif
42793 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42794         "lsrs	r7, r6, #16\n\t"
42795 #else
42796         "lsr	r7, r6, #16\n\t"
42797 #endif
42798 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42799         "lsls	r6, r6, #16\n\t"
42800 #else
42801         "lsl	r6, r6, #16\n\t"
42802 #endif
42803 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42804         "adds	r4, r4, r6\n\t"
42805 #else
42806         "add	r4, r4, r6\n\t"
42807 #endif
42808 #ifdef WOLFSSL_KEIL
42809         "adcs	r5, r5, r7\n\t"
42810 #elif defined(__clang__)
42811         "adcs	r5, r7\n\t"
42812 #else
42813         "adc	r5, r7\n\t"
42814 #endif
42815 #ifdef WOLFSSL_KEIL
42816         "adcs	r3, r3, %[r]\n\t"
42817 #elif defined(__clang__)
42818         "adcs	r3, %[r]\n\t"
42819 #else
42820         "adc	r3, %[r]\n\t"
42821 #endif
42822 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42823         "lsrs	r6, %[a], #16\n\t"
42824 #else
42825         "lsr	r6, %[a], #16\n\t"
42826 #endif
42827 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42828         "lsrs	r7, %[b], #16\n\t"
42829 #else
42830         "lsr	r7, %[b], #16\n\t"
42831 #endif
42832 #ifdef WOLFSSL_KEIL
42833         "muls	r7, r6, r7\n\t"
42834 #elif defined(__clang__)
42835         "muls	r7, r6\n\t"
42836 #else
42837         "mul	r7, r6\n\t"
42838 #endif
42839 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42840         "adds	r5, r5, r7\n\t"
42841 #else
42842         "add	r5, r5, r7\n\t"
42843 #endif
42844 #ifdef WOLFSSL_KEIL
42845         "adcs	r3, r3, %[r]\n\t"
42846 #elif defined(__clang__)
42847         "adcs	r3, %[r]\n\t"
42848 #else
42849         "adc	r3, %[r]\n\t"
42850 #endif
42851         "uxth	r7, %[b]\n\t"
42852 #ifdef WOLFSSL_KEIL
42853         "muls	r6, r7, r6\n\t"
42854 #elif defined(__clang__)
42855         "muls	r6, r7\n\t"
42856 #else
42857         "mul	r6, r7\n\t"
42858 #endif
42859 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42860         "lsrs	r7, r6, #16\n\t"
42861 #else
42862         "lsr	r7, r6, #16\n\t"
42863 #endif
42864 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42865         "lsls	r6, r6, #16\n\t"
42866 #else
42867         "lsl	r6, r6, #16\n\t"
42868 #endif
42869 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42870         "adds	r4, r4, r6\n\t"
42871 #else
42872         "add	r4, r4, r6\n\t"
42873 #endif
42874 #ifdef WOLFSSL_KEIL
42875         "adcs	r5, r5, r7\n\t"
42876 #elif defined(__clang__)
42877         "adcs	r5, r7\n\t"
42878 #else
42879         "adc	r5, r7\n\t"
42880 #endif
42881 #ifdef WOLFSSL_KEIL
42882         "adcs	r3, r3, %[r]\n\t"
42883 #elif defined(__clang__)
42884         "adcs	r3, %[r]\n\t"
42885 #else
42886         "adc	r3, %[r]\n\t"
42887 #endif
42888         "#  A[3] * B[10]\n\t"
42889         "mov	%[a], r9\n\t"
42890         "mov	%[b], r10\n\t"
42891         "ldr	%[a], [%[a], #12]\n\t"
42892         "ldr	%[b], [%[b], #40]\n\t"
42893         "uxth	r6, %[a]\n\t"
42894         "uxth	r7, %[b]\n\t"
42895 #ifdef WOLFSSL_KEIL
42896         "muls	r7, r6, r7\n\t"
42897 #elif defined(__clang__)
42898         "muls	r7, r6\n\t"
42899 #else
42900         "mul	r7, r6\n\t"
42901 #endif
42902 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42903         "adds	r4, r4, r7\n\t"
42904 #else
42905         "add	r4, r4, r7\n\t"
42906 #endif
42907 #ifdef WOLFSSL_KEIL
42908         "adcs	r5, r5, %[r]\n\t"
42909 #elif defined(__clang__)
42910         "adcs	r5, %[r]\n\t"
42911 #else
42912         "adc	r5, %[r]\n\t"
42913 #endif
42914 #ifdef WOLFSSL_KEIL
42915         "adcs	r3, r3, %[r]\n\t"
42916 #elif defined(__clang__)
42917         "adcs	r3, %[r]\n\t"
42918 #else
42919         "adc	r3, %[r]\n\t"
42920 #endif
42921 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42922         "lsrs	r7, %[b], #16\n\t"
42923 #else
42924         "lsr	r7, %[b], #16\n\t"
42925 #endif
42926 #ifdef WOLFSSL_KEIL
42927         "muls	r6, r7, r6\n\t"
42928 #elif defined(__clang__)
42929         "muls	r6, r7\n\t"
42930 #else
42931         "mul	r6, r7\n\t"
42932 #endif
42933 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42934         "lsrs	r7, r6, #16\n\t"
42935 #else
42936         "lsr	r7, r6, #16\n\t"
42937 #endif
42938 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42939         "lsls	r6, r6, #16\n\t"
42940 #else
42941         "lsl	r6, r6, #16\n\t"
42942 #endif
42943 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42944         "adds	r4, r4, r6\n\t"
42945 #else
42946         "add	r4, r4, r6\n\t"
42947 #endif
42948 #ifdef WOLFSSL_KEIL
42949         "adcs	r5, r5, r7\n\t"
42950 #elif defined(__clang__)
42951         "adcs	r5, r7\n\t"
42952 #else
42953         "adc	r5, r7\n\t"
42954 #endif
42955 #ifdef WOLFSSL_KEIL
42956         "adcs	r3, r3, %[r]\n\t"
42957 #elif defined(__clang__)
42958         "adcs	r3, %[r]\n\t"
42959 #else
42960         "adc	r3, %[r]\n\t"
42961 #endif
42962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42963         "lsrs	r6, %[a], #16\n\t"
42964 #else
42965         "lsr	r6, %[a], #16\n\t"
42966 #endif
42967 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42968         "lsrs	r7, %[b], #16\n\t"
42969 #else
42970         "lsr	r7, %[b], #16\n\t"
42971 #endif
42972 #ifdef WOLFSSL_KEIL
42973         "muls	r7, r6, r7\n\t"
42974 #elif defined(__clang__)
42975         "muls	r7, r6\n\t"
42976 #else
42977         "mul	r7, r6\n\t"
42978 #endif
42979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
42980         "adds	r5, r5, r7\n\t"
42981 #else
42982         "add	r5, r5, r7\n\t"
42983 #endif
42984 #ifdef WOLFSSL_KEIL
42985         "adcs	r3, r3, %[r]\n\t"
42986 #elif defined(__clang__)
42987         "adcs	r3, %[r]\n\t"
42988 #else
42989         "adc	r3, %[r]\n\t"
42990 #endif
42991         "uxth	r7, %[b]\n\t"
42992 #ifdef WOLFSSL_KEIL
42993         "muls	r6, r7, r6\n\t"
42994 #elif defined(__clang__)
42995         "muls	r6, r7\n\t"
42996 #else
42997         "mul	r6, r7\n\t"
42998 #endif
42999 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43000         "lsrs	r7, r6, #16\n\t"
43001 #else
43002         "lsr	r7, r6, #16\n\t"
43003 #endif
43004 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43005         "lsls	r6, r6, #16\n\t"
43006 #else
43007         "lsl	r6, r6, #16\n\t"
43008 #endif
43009 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43010         "adds	r4, r4, r6\n\t"
43011 #else
43012         "add	r4, r4, r6\n\t"
43013 #endif
43014 #ifdef WOLFSSL_KEIL
43015         "adcs	r5, r5, r7\n\t"
43016 #elif defined(__clang__)
43017         "adcs	r5, r7\n\t"
43018 #else
43019         "adc	r5, r7\n\t"
43020 #endif
43021 #ifdef WOLFSSL_KEIL
43022         "adcs	r3, r3, %[r]\n\t"
43023 #elif defined(__clang__)
43024         "adcs	r3, %[r]\n\t"
43025 #else
43026         "adc	r3, %[r]\n\t"
43027 #endif
43028         "#  A[4] * B[9]\n\t"
43029         "mov	%[a], r9\n\t"
43030         "mov	%[b], r10\n\t"
43031         "ldr	%[a], [%[a], #16]\n\t"
43032         "ldr	%[b], [%[b], #36]\n\t"
43033         "uxth	r6, %[a]\n\t"
43034         "uxth	r7, %[b]\n\t"
43035 #ifdef WOLFSSL_KEIL
43036         "muls	r7, r6, r7\n\t"
43037 #elif defined(__clang__)
43038         "muls	r7, r6\n\t"
43039 #else
43040         "mul	r7, r6\n\t"
43041 #endif
43042 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43043         "adds	r4, r4, r7\n\t"
43044 #else
43045         "add	r4, r4, r7\n\t"
43046 #endif
43047 #ifdef WOLFSSL_KEIL
43048         "adcs	r5, r5, %[r]\n\t"
43049 #elif defined(__clang__)
43050         "adcs	r5, %[r]\n\t"
43051 #else
43052         "adc	r5, %[r]\n\t"
43053 #endif
43054 #ifdef WOLFSSL_KEIL
43055         "adcs	r3, r3, %[r]\n\t"
43056 #elif defined(__clang__)
43057         "adcs	r3, %[r]\n\t"
43058 #else
43059         "adc	r3, %[r]\n\t"
43060 #endif
43061 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43062         "lsrs	r7, %[b], #16\n\t"
43063 #else
43064         "lsr	r7, %[b], #16\n\t"
43065 #endif
43066 #ifdef WOLFSSL_KEIL
43067         "muls	r6, r7, r6\n\t"
43068 #elif defined(__clang__)
43069         "muls	r6, r7\n\t"
43070 #else
43071         "mul	r6, r7\n\t"
43072 #endif
43073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43074         "lsrs	r7, r6, #16\n\t"
43075 #else
43076         "lsr	r7, r6, #16\n\t"
43077 #endif
43078 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43079         "lsls	r6, r6, #16\n\t"
43080 #else
43081         "lsl	r6, r6, #16\n\t"
43082 #endif
43083 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43084         "adds	r4, r4, r6\n\t"
43085 #else
43086         "add	r4, r4, r6\n\t"
43087 #endif
43088 #ifdef WOLFSSL_KEIL
43089         "adcs	r5, r5, r7\n\t"
43090 #elif defined(__clang__)
43091         "adcs	r5, r7\n\t"
43092 #else
43093         "adc	r5, r7\n\t"
43094 #endif
43095 #ifdef WOLFSSL_KEIL
43096         "adcs	r3, r3, %[r]\n\t"
43097 #elif defined(__clang__)
43098         "adcs	r3, %[r]\n\t"
43099 #else
43100         "adc	r3, %[r]\n\t"
43101 #endif
43102 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43103         "lsrs	r6, %[a], #16\n\t"
43104 #else
43105         "lsr	r6, %[a], #16\n\t"
43106 #endif
43107 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43108         "lsrs	r7, %[b], #16\n\t"
43109 #else
43110         "lsr	r7, %[b], #16\n\t"
43111 #endif
43112 #ifdef WOLFSSL_KEIL
43113         "muls	r7, r6, r7\n\t"
43114 #elif defined(__clang__)
43115         "muls	r7, r6\n\t"
43116 #else
43117         "mul	r7, r6\n\t"
43118 #endif
43119 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43120         "adds	r5, r5, r7\n\t"
43121 #else
43122         "add	r5, r5, r7\n\t"
43123 #endif
43124 #ifdef WOLFSSL_KEIL
43125         "adcs	r3, r3, %[r]\n\t"
43126 #elif defined(__clang__)
43127         "adcs	r3, %[r]\n\t"
43128 #else
43129         "adc	r3, %[r]\n\t"
43130 #endif
43131         "uxth	r7, %[b]\n\t"
43132 #ifdef WOLFSSL_KEIL
43133         "muls	r6, r7, r6\n\t"
43134 #elif defined(__clang__)
43135         "muls	r6, r7\n\t"
43136 #else
43137         "mul	r6, r7\n\t"
43138 #endif
43139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43140         "lsrs	r7, r6, #16\n\t"
43141 #else
43142         "lsr	r7, r6, #16\n\t"
43143 #endif
43144 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43145         "lsls	r6, r6, #16\n\t"
43146 #else
43147         "lsl	r6, r6, #16\n\t"
43148 #endif
43149 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43150         "adds	r4, r4, r6\n\t"
43151 #else
43152         "add	r4, r4, r6\n\t"
43153 #endif
43154 #ifdef WOLFSSL_KEIL
43155         "adcs	r5, r5, r7\n\t"
43156 #elif defined(__clang__)
43157         "adcs	r5, r7\n\t"
43158 #else
43159         "adc	r5, r7\n\t"
43160 #endif
43161 #ifdef WOLFSSL_KEIL
43162         "adcs	r3, r3, %[r]\n\t"
43163 #elif defined(__clang__)
43164         "adcs	r3, %[r]\n\t"
43165 #else
43166         "adc	r3, %[r]\n\t"
43167 #endif
43168         "#  A[5] * B[8]\n\t"
43169         "mov	%[a], r9\n\t"
43170         "mov	%[b], r10\n\t"
43171         "ldr	%[a], [%[a], #20]\n\t"
43172         "ldr	%[b], [%[b], #32]\n\t"
43173         "uxth	r6, %[a]\n\t"
43174         "uxth	r7, %[b]\n\t"
43175 #ifdef WOLFSSL_KEIL
43176         "muls	r7, r6, r7\n\t"
43177 #elif defined(__clang__)
43178         "muls	r7, r6\n\t"
43179 #else
43180         "mul	r7, r6\n\t"
43181 #endif
43182 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43183         "adds	r4, r4, r7\n\t"
43184 #else
43185         "add	r4, r4, r7\n\t"
43186 #endif
43187 #ifdef WOLFSSL_KEIL
43188         "adcs	r5, r5, %[r]\n\t"
43189 #elif defined(__clang__)
43190         "adcs	r5, %[r]\n\t"
43191 #else
43192         "adc	r5, %[r]\n\t"
43193 #endif
43194 #ifdef WOLFSSL_KEIL
43195         "adcs	r3, r3, %[r]\n\t"
43196 #elif defined(__clang__)
43197         "adcs	r3, %[r]\n\t"
43198 #else
43199         "adc	r3, %[r]\n\t"
43200 #endif
43201 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43202         "lsrs	r7, %[b], #16\n\t"
43203 #else
43204         "lsr	r7, %[b], #16\n\t"
43205 #endif
43206 #ifdef WOLFSSL_KEIL
43207         "muls	r6, r7, r6\n\t"
43208 #elif defined(__clang__)
43209         "muls	r6, r7\n\t"
43210 #else
43211         "mul	r6, r7\n\t"
43212 #endif
43213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43214         "lsrs	r7, r6, #16\n\t"
43215 #else
43216         "lsr	r7, r6, #16\n\t"
43217 #endif
43218 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43219         "lsls	r6, r6, #16\n\t"
43220 #else
43221         "lsl	r6, r6, #16\n\t"
43222 #endif
43223 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43224         "adds	r4, r4, r6\n\t"
43225 #else
43226         "add	r4, r4, r6\n\t"
43227 #endif
43228 #ifdef WOLFSSL_KEIL
43229         "adcs	r5, r5, r7\n\t"
43230 #elif defined(__clang__)
43231         "adcs	r5, r7\n\t"
43232 #else
43233         "adc	r5, r7\n\t"
43234 #endif
43235 #ifdef WOLFSSL_KEIL
43236         "adcs	r3, r3, %[r]\n\t"
43237 #elif defined(__clang__)
43238         "adcs	r3, %[r]\n\t"
43239 #else
43240         "adc	r3, %[r]\n\t"
43241 #endif
43242 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43243         "lsrs	r6, %[a], #16\n\t"
43244 #else
43245         "lsr	r6, %[a], #16\n\t"
43246 #endif
43247 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43248         "lsrs	r7, %[b], #16\n\t"
43249 #else
43250         "lsr	r7, %[b], #16\n\t"
43251 #endif
43252 #ifdef WOLFSSL_KEIL
43253         "muls	r7, r6, r7\n\t"
43254 #elif defined(__clang__)
43255         "muls	r7, r6\n\t"
43256 #else
43257         "mul	r7, r6\n\t"
43258 #endif
43259 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43260         "adds	r5, r5, r7\n\t"
43261 #else
43262         "add	r5, r5, r7\n\t"
43263 #endif
43264 #ifdef WOLFSSL_KEIL
43265         "adcs	r3, r3, %[r]\n\t"
43266 #elif defined(__clang__)
43267         "adcs	r3, %[r]\n\t"
43268 #else
43269         "adc	r3, %[r]\n\t"
43270 #endif
43271         "uxth	r7, %[b]\n\t"
43272 #ifdef WOLFSSL_KEIL
43273         "muls	r6, r7, r6\n\t"
43274 #elif defined(__clang__)
43275         "muls	r6, r7\n\t"
43276 #else
43277         "mul	r6, r7\n\t"
43278 #endif
43279 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43280         "lsrs	r7, r6, #16\n\t"
43281 #else
43282         "lsr	r7, r6, #16\n\t"
43283 #endif
43284 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43285         "lsls	r6, r6, #16\n\t"
43286 #else
43287         "lsl	r6, r6, #16\n\t"
43288 #endif
43289 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43290         "adds	r4, r4, r6\n\t"
43291 #else
43292         "add	r4, r4, r6\n\t"
43293 #endif
43294 #ifdef WOLFSSL_KEIL
43295         "adcs	r5, r5, r7\n\t"
43296 #elif defined(__clang__)
43297         "adcs	r5, r7\n\t"
43298 #else
43299         "adc	r5, r7\n\t"
43300 #endif
43301 #ifdef WOLFSSL_KEIL
43302         "adcs	r3, r3, %[r]\n\t"
43303 #elif defined(__clang__)
43304         "adcs	r3, %[r]\n\t"
43305 #else
43306         "adc	r3, %[r]\n\t"
43307 #endif
43308         "#  A[6] * B[7]\n\t"
43309         "mov	%[a], r9\n\t"
43310         "mov	%[b], r10\n\t"
43311         "ldr	%[a], [%[a], #24]\n\t"
43312         "ldr	%[b], [%[b], #28]\n\t"
43313         "uxth	r6, %[a]\n\t"
43314         "uxth	r7, %[b]\n\t"
43315 #ifdef WOLFSSL_KEIL
43316         "muls	r7, r6, r7\n\t"
43317 #elif defined(__clang__)
43318         "muls	r7, r6\n\t"
43319 #else
43320         "mul	r7, r6\n\t"
43321 #endif
43322 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43323         "adds	r4, r4, r7\n\t"
43324 #else
43325         "add	r4, r4, r7\n\t"
43326 #endif
43327 #ifdef WOLFSSL_KEIL
43328         "adcs	r5, r5, %[r]\n\t"
43329 #elif defined(__clang__)
43330         "adcs	r5, %[r]\n\t"
43331 #else
43332         "adc	r5, %[r]\n\t"
43333 #endif
43334 #ifdef WOLFSSL_KEIL
43335         "adcs	r3, r3, %[r]\n\t"
43336 #elif defined(__clang__)
43337         "adcs	r3, %[r]\n\t"
43338 #else
43339         "adc	r3, %[r]\n\t"
43340 #endif
43341 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43342         "lsrs	r7, %[b], #16\n\t"
43343 #else
43344         "lsr	r7, %[b], #16\n\t"
43345 #endif
43346 #ifdef WOLFSSL_KEIL
43347         "muls	r6, r7, r6\n\t"
43348 #elif defined(__clang__)
43349         "muls	r6, r7\n\t"
43350 #else
43351         "mul	r6, r7\n\t"
43352 #endif
43353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43354         "lsrs	r7, r6, #16\n\t"
43355 #else
43356         "lsr	r7, r6, #16\n\t"
43357 #endif
43358 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43359         "lsls	r6, r6, #16\n\t"
43360 #else
43361         "lsl	r6, r6, #16\n\t"
43362 #endif
43363 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43364         "adds	r4, r4, r6\n\t"
43365 #else
43366         "add	r4, r4, r6\n\t"
43367 #endif
43368 #ifdef WOLFSSL_KEIL
43369         "adcs	r5, r5, r7\n\t"
43370 #elif defined(__clang__)
43371         "adcs	r5, r7\n\t"
43372 #else
43373         "adc	r5, r7\n\t"
43374 #endif
43375 #ifdef WOLFSSL_KEIL
43376         "adcs	r3, r3, %[r]\n\t"
43377 #elif defined(__clang__)
43378         "adcs	r3, %[r]\n\t"
43379 #else
43380         "adc	r3, %[r]\n\t"
43381 #endif
43382 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43383         "lsrs	r6, %[a], #16\n\t"
43384 #else
43385         "lsr	r6, %[a], #16\n\t"
43386 #endif
43387 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43388         "lsrs	r7, %[b], #16\n\t"
43389 #else
43390         "lsr	r7, %[b], #16\n\t"
43391 #endif
43392 #ifdef WOLFSSL_KEIL
43393         "muls	r7, r6, r7\n\t"
43394 #elif defined(__clang__)
43395         "muls	r7, r6\n\t"
43396 #else
43397         "mul	r7, r6\n\t"
43398 #endif
43399 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43400         "adds	r5, r5, r7\n\t"
43401 #else
43402         "add	r5, r5, r7\n\t"
43403 #endif
43404 #ifdef WOLFSSL_KEIL
43405         "adcs	r3, r3, %[r]\n\t"
43406 #elif defined(__clang__)
43407         "adcs	r3, %[r]\n\t"
43408 #else
43409         "adc	r3, %[r]\n\t"
43410 #endif
43411         "uxth	r7, %[b]\n\t"
43412 #ifdef WOLFSSL_KEIL
43413         "muls	r6, r7, r6\n\t"
43414 #elif defined(__clang__)
43415         "muls	r6, r7\n\t"
43416 #else
43417         "mul	r6, r7\n\t"
43418 #endif
43419 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43420         "lsrs	r7, r6, #16\n\t"
43421 #else
43422         "lsr	r7, r6, #16\n\t"
43423 #endif
43424 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43425         "lsls	r6, r6, #16\n\t"
43426 #else
43427         "lsl	r6, r6, #16\n\t"
43428 #endif
43429 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43430         "adds	r4, r4, r6\n\t"
43431 #else
43432         "add	r4, r4, r6\n\t"
43433 #endif
43434 #ifdef WOLFSSL_KEIL
43435         "adcs	r5, r5, r7\n\t"
43436 #elif defined(__clang__)
43437         "adcs	r5, r7\n\t"
43438 #else
43439         "adc	r5, r7\n\t"
43440 #endif
43441 #ifdef WOLFSSL_KEIL
43442         "adcs	r3, r3, %[r]\n\t"
43443 #elif defined(__clang__)
43444         "adcs	r3, %[r]\n\t"
43445 #else
43446         "adc	r3, %[r]\n\t"
43447 #endif
43448         "#  A[7] * B[6]\n\t"
43449         "mov	%[a], r9\n\t"
43450         "mov	%[b], r10\n\t"
43451         "ldr	%[a], [%[a], #28]\n\t"
43452         "ldr	%[b], [%[b], #24]\n\t"
43453         "uxth	r6, %[a]\n\t"
43454         "uxth	r7, %[b]\n\t"
43455 #ifdef WOLFSSL_KEIL
43456         "muls	r7, r6, r7\n\t"
43457 #elif defined(__clang__)
43458         "muls	r7, r6\n\t"
43459 #else
43460         "mul	r7, r6\n\t"
43461 #endif
43462 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43463         "adds	r4, r4, r7\n\t"
43464 #else
43465         "add	r4, r4, r7\n\t"
43466 #endif
43467 #ifdef WOLFSSL_KEIL
43468         "adcs	r5, r5, %[r]\n\t"
43469 #elif defined(__clang__)
43470         "adcs	r5, %[r]\n\t"
43471 #else
43472         "adc	r5, %[r]\n\t"
43473 #endif
43474 #ifdef WOLFSSL_KEIL
43475         "adcs	r3, r3, %[r]\n\t"
43476 #elif defined(__clang__)
43477         "adcs	r3, %[r]\n\t"
43478 #else
43479         "adc	r3, %[r]\n\t"
43480 #endif
43481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43482         "lsrs	r7, %[b], #16\n\t"
43483 #else
43484         "lsr	r7, %[b], #16\n\t"
43485 #endif
43486 #ifdef WOLFSSL_KEIL
43487         "muls	r6, r7, r6\n\t"
43488 #elif defined(__clang__)
43489         "muls	r6, r7\n\t"
43490 #else
43491         "mul	r6, r7\n\t"
43492 #endif
43493 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43494         "lsrs	r7, r6, #16\n\t"
43495 #else
43496         "lsr	r7, r6, #16\n\t"
43497 #endif
43498 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43499         "lsls	r6, r6, #16\n\t"
43500 #else
43501         "lsl	r6, r6, #16\n\t"
43502 #endif
43503 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43504         "adds	r4, r4, r6\n\t"
43505 #else
43506         "add	r4, r4, r6\n\t"
43507 #endif
43508 #ifdef WOLFSSL_KEIL
43509         "adcs	r5, r5, r7\n\t"
43510 #elif defined(__clang__)
43511         "adcs	r5, r7\n\t"
43512 #else
43513         "adc	r5, r7\n\t"
43514 #endif
43515 #ifdef WOLFSSL_KEIL
43516         "adcs	r3, r3, %[r]\n\t"
43517 #elif defined(__clang__)
43518         "adcs	r3, %[r]\n\t"
43519 #else
43520         "adc	r3, %[r]\n\t"
43521 #endif
43522 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43523         "lsrs	r6, %[a], #16\n\t"
43524 #else
43525         "lsr	r6, %[a], #16\n\t"
43526 #endif
43527 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43528         "lsrs	r7, %[b], #16\n\t"
43529 #else
43530         "lsr	r7, %[b], #16\n\t"
43531 #endif
43532 #ifdef WOLFSSL_KEIL
43533         "muls	r7, r6, r7\n\t"
43534 #elif defined(__clang__)
43535         "muls	r7, r6\n\t"
43536 #else
43537         "mul	r7, r6\n\t"
43538 #endif
43539 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43540         "adds	r5, r5, r7\n\t"
43541 #else
43542         "add	r5, r5, r7\n\t"
43543 #endif
43544 #ifdef WOLFSSL_KEIL
43545         "adcs	r3, r3, %[r]\n\t"
43546 #elif defined(__clang__)
43547         "adcs	r3, %[r]\n\t"
43548 #else
43549         "adc	r3, %[r]\n\t"
43550 #endif
43551         "uxth	r7, %[b]\n\t"
43552 #ifdef WOLFSSL_KEIL
43553         "muls	r6, r7, r6\n\t"
43554 #elif defined(__clang__)
43555         "muls	r6, r7\n\t"
43556 #else
43557         "mul	r6, r7\n\t"
43558 #endif
43559 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43560         "lsrs	r7, r6, #16\n\t"
43561 #else
43562         "lsr	r7, r6, #16\n\t"
43563 #endif
43564 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43565         "lsls	r6, r6, #16\n\t"
43566 #else
43567         "lsl	r6, r6, #16\n\t"
43568 #endif
43569 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43570         "adds	r4, r4, r6\n\t"
43571 #else
43572         "add	r4, r4, r6\n\t"
43573 #endif
43574 #ifdef WOLFSSL_KEIL
43575         "adcs	r5, r5, r7\n\t"
43576 #elif defined(__clang__)
43577         "adcs	r5, r7\n\t"
43578 #else
43579         "adc	r5, r7\n\t"
43580 #endif
43581 #ifdef WOLFSSL_KEIL
43582         "adcs	r3, r3, %[r]\n\t"
43583 #elif defined(__clang__)
43584         "adcs	r3, %[r]\n\t"
43585 #else
43586         "adc	r3, %[r]\n\t"
43587 #endif
43588         "#  A[8] * B[5]\n\t"
43589         "mov	%[a], r9\n\t"
43590         "mov	%[b], r10\n\t"
43591         "ldr	%[a], [%[a], #32]\n\t"
43592         "ldr	%[b], [%[b], #20]\n\t"
43593         "uxth	r6, %[a]\n\t"
43594         "uxth	r7, %[b]\n\t"
43595 #ifdef WOLFSSL_KEIL
43596         "muls	r7, r6, r7\n\t"
43597 #elif defined(__clang__)
43598         "muls	r7, r6\n\t"
43599 #else
43600         "mul	r7, r6\n\t"
43601 #endif
43602 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43603         "adds	r4, r4, r7\n\t"
43604 #else
43605         "add	r4, r4, r7\n\t"
43606 #endif
43607 #ifdef WOLFSSL_KEIL
43608         "adcs	r5, r5, %[r]\n\t"
43609 #elif defined(__clang__)
43610         "adcs	r5, %[r]\n\t"
43611 #else
43612         "adc	r5, %[r]\n\t"
43613 #endif
43614 #ifdef WOLFSSL_KEIL
43615         "adcs	r3, r3, %[r]\n\t"
43616 #elif defined(__clang__)
43617         "adcs	r3, %[r]\n\t"
43618 #else
43619         "adc	r3, %[r]\n\t"
43620 #endif
43621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43622         "lsrs	r7, %[b], #16\n\t"
43623 #else
43624         "lsr	r7, %[b], #16\n\t"
43625 #endif
43626 #ifdef WOLFSSL_KEIL
43627         "muls	r6, r7, r6\n\t"
43628 #elif defined(__clang__)
43629         "muls	r6, r7\n\t"
43630 #else
43631         "mul	r6, r7\n\t"
43632 #endif
43633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43634         "lsrs	r7, r6, #16\n\t"
43635 #else
43636         "lsr	r7, r6, #16\n\t"
43637 #endif
43638 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43639         "lsls	r6, r6, #16\n\t"
43640 #else
43641         "lsl	r6, r6, #16\n\t"
43642 #endif
43643 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43644         "adds	r4, r4, r6\n\t"
43645 #else
43646         "add	r4, r4, r6\n\t"
43647 #endif
43648 #ifdef WOLFSSL_KEIL
43649         "adcs	r5, r5, r7\n\t"
43650 #elif defined(__clang__)
43651         "adcs	r5, r7\n\t"
43652 #else
43653         "adc	r5, r7\n\t"
43654 #endif
43655 #ifdef WOLFSSL_KEIL
43656         "adcs	r3, r3, %[r]\n\t"
43657 #elif defined(__clang__)
43658         "adcs	r3, %[r]\n\t"
43659 #else
43660         "adc	r3, %[r]\n\t"
43661 #endif
43662 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43663         "lsrs	r6, %[a], #16\n\t"
43664 #else
43665         "lsr	r6, %[a], #16\n\t"
43666 #endif
43667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43668         "lsrs	r7, %[b], #16\n\t"
43669 #else
43670         "lsr	r7, %[b], #16\n\t"
43671 #endif
43672 #ifdef WOLFSSL_KEIL
43673         "muls	r7, r6, r7\n\t"
43674 #elif defined(__clang__)
43675         "muls	r7, r6\n\t"
43676 #else
43677         "mul	r7, r6\n\t"
43678 #endif
43679 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43680         "adds	r5, r5, r7\n\t"
43681 #else
43682         "add	r5, r5, r7\n\t"
43683 #endif
43684 #ifdef WOLFSSL_KEIL
43685         "adcs	r3, r3, %[r]\n\t"
43686 #elif defined(__clang__)
43687         "adcs	r3, %[r]\n\t"
43688 #else
43689         "adc	r3, %[r]\n\t"
43690 #endif
43691         "uxth	r7, %[b]\n\t"
43692 #ifdef WOLFSSL_KEIL
43693         "muls	r6, r7, r6\n\t"
43694 #elif defined(__clang__)
43695         "muls	r6, r7\n\t"
43696 #else
43697         "mul	r6, r7\n\t"
43698 #endif
43699 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43700         "lsrs	r7, r6, #16\n\t"
43701 #else
43702         "lsr	r7, r6, #16\n\t"
43703 #endif
43704 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43705         "lsls	r6, r6, #16\n\t"
43706 #else
43707         "lsl	r6, r6, #16\n\t"
43708 #endif
43709 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43710         "adds	r4, r4, r6\n\t"
43711 #else
43712         "add	r4, r4, r6\n\t"
43713 #endif
43714 #ifdef WOLFSSL_KEIL
43715         "adcs	r5, r5, r7\n\t"
43716 #elif defined(__clang__)
43717         "adcs	r5, r7\n\t"
43718 #else
43719         "adc	r5, r7\n\t"
43720 #endif
43721 #ifdef WOLFSSL_KEIL
43722         "adcs	r3, r3, %[r]\n\t"
43723 #elif defined(__clang__)
43724         "adcs	r3, %[r]\n\t"
43725 #else
43726         "adc	r3, %[r]\n\t"
43727 #endif
43728         "#  A[9] * B[4]\n\t"
43729         "mov	%[a], r9\n\t"
43730         "mov	%[b], r10\n\t"
43731         "ldr	%[a], [%[a], #36]\n\t"
43732         "ldr	%[b], [%[b], #16]\n\t"
43733         "uxth	r6, %[a]\n\t"
43734         "uxth	r7, %[b]\n\t"
43735 #ifdef WOLFSSL_KEIL
43736         "muls	r7, r6, r7\n\t"
43737 #elif defined(__clang__)
43738         "muls	r7, r6\n\t"
43739 #else
43740         "mul	r7, r6\n\t"
43741 #endif
43742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43743         "adds	r4, r4, r7\n\t"
43744 #else
43745         "add	r4, r4, r7\n\t"
43746 #endif
43747 #ifdef WOLFSSL_KEIL
43748         "adcs	r5, r5, %[r]\n\t"
43749 #elif defined(__clang__)
43750         "adcs	r5, %[r]\n\t"
43751 #else
43752         "adc	r5, %[r]\n\t"
43753 #endif
43754 #ifdef WOLFSSL_KEIL
43755         "adcs	r3, r3, %[r]\n\t"
43756 #elif defined(__clang__)
43757         "adcs	r3, %[r]\n\t"
43758 #else
43759         "adc	r3, %[r]\n\t"
43760 #endif
43761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43762         "lsrs	r7, %[b], #16\n\t"
43763 #else
43764         "lsr	r7, %[b], #16\n\t"
43765 #endif
43766 #ifdef WOLFSSL_KEIL
43767         "muls	r6, r7, r6\n\t"
43768 #elif defined(__clang__)
43769         "muls	r6, r7\n\t"
43770 #else
43771         "mul	r6, r7\n\t"
43772 #endif
43773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43774         "lsrs	r7, r6, #16\n\t"
43775 #else
43776         "lsr	r7, r6, #16\n\t"
43777 #endif
43778 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43779         "lsls	r6, r6, #16\n\t"
43780 #else
43781         "lsl	r6, r6, #16\n\t"
43782 #endif
43783 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43784         "adds	r4, r4, r6\n\t"
43785 #else
43786         "add	r4, r4, r6\n\t"
43787 #endif
43788 #ifdef WOLFSSL_KEIL
43789         "adcs	r5, r5, r7\n\t"
43790 #elif defined(__clang__)
43791         "adcs	r5, r7\n\t"
43792 #else
43793         "adc	r5, r7\n\t"
43794 #endif
43795 #ifdef WOLFSSL_KEIL
43796         "adcs	r3, r3, %[r]\n\t"
43797 #elif defined(__clang__)
43798         "adcs	r3, %[r]\n\t"
43799 #else
43800         "adc	r3, %[r]\n\t"
43801 #endif
43802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43803         "lsrs	r6, %[a], #16\n\t"
43804 #else
43805         "lsr	r6, %[a], #16\n\t"
43806 #endif
43807 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43808         "lsrs	r7, %[b], #16\n\t"
43809 #else
43810         "lsr	r7, %[b], #16\n\t"
43811 #endif
43812 #ifdef WOLFSSL_KEIL
43813         "muls	r7, r6, r7\n\t"
43814 #elif defined(__clang__)
43815         "muls	r7, r6\n\t"
43816 #else
43817         "mul	r7, r6\n\t"
43818 #endif
43819 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43820         "adds	r5, r5, r7\n\t"
43821 #else
43822         "add	r5, r5, r7\n\t"
43823 #endif
43824 #ifdef WOLFSSL_KEIL
43825         "adcs	r3, r3, %[r]\n\t"
43826 #elif defined(__clang__)
43827         "adcs	r3, %[r]\n\t"
43828 #else
43829         "adc	r3, %[r]\n\t"
43830 #endif
43831         "uxth	r7, %[b]\n\t"
43832 #ifdef WOLFSSL_KEIL
43833         "muls	r6, r7, r6\n\t"
43834 #elif defined(__clang__)
43835         "muls	r6, r7\n\t"
43836 #else
43837         "mul	r6, r7\n\t"
43838 #endif
43839 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43840         "lsrs	r7, r6, #16\n\t"
43841 #else
43842         "lsr	r7, r6, #16\n\t"
43843 #endif
43844 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43845         "lsls	r6, r6, #16\n\t"
43846 #else
43847         "lsl	r6, r6, #16\n\t"
43848 #endif
43849 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43850         "adds	r4, r4, r6\n\t"
43851 #else
43852         "add	r4, r4, r6\n\t"
43853 #endif
43854 #ifdef WOLFSSL_KEIL
43855         "adcs	r5, r5, r7\n\t"
43856 #elif defined(__clang__)
43857         "adcs	r5, r7\n\t"
43858 #else
43859         "adc	r5, r7\n\t"
43860 #endif
43861 #ifdef WOLFSSL_KEIL
43862         "adcs	r3, r3, %[r]\n\t"
43863 #elif defined(__clang__)
43864         "adcs	r3, %[r]\n\t"
43865 #else
43866         "adc	r3, %[r]\n\t"
43867 #endif
43868         "#  A[10] * B[3]\n\t"
43869         "mov	%[a], r9\n\t"
43870         "mov	%[b], r10\n\t"
43871         "ldr	%[a], [%[a], #40]\n\t"
43872         "ldr	%[b], [%[b], #12]\n\t"
43873         "uxth	r6, %[a]\n\t"
43874         "uxth	r7, %[b]\n\t"
43875 #ifdef WOLFSSL_KEIL
43876         "muls	r7, r6, r7\n\t"
43877 #elif defined(__clang__)
43878         "muls	r7, r6\n\t"
43879 #else
43880         "mul	r7, r6\n\t"
43881 #endif
43882 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43883         "adds	r4, r4, r7\n\t"
43884 #else
43885         "add	r4, r4, r7\n\t"
43886 #endif
43887 #ifdef WOLFSSL_KEIL
43888         "adcs	r5, r5, %[r]\n\t"
43889 #elif defined(__clang__)
43890         "adcs	r5, %[r]\n\t"
43891 #else
43892         "adc	r5, %[r]\n\t"
43893 #endif
43894 #ifdef WOLFSSL_KEIL
43895         "adcs	r3, r3, %[r]\n\t"
43896 #elif defined(__clang__)
43897         "adcs	r3, %[r]\n\t"
43898 #else
43899         "adc	r3, %[r]\n\t"
43900 #endif
43901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43902         "lsrs	r7, %[b], #16\n\t"
43903 #else
43904         "lsr	r7, %[b], #16\n\t"
43905 #endif
43906 #ifdef WOLFSSL_KEIL
43907         "muls	r6, r7, r6\n\t"
43908 #elif defined(__clang__)
43909         "muls	r6, r7\n\t"
43910 #else
43911         "mul	r6, r7\n\t"
43912 #endif
43913 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43914         "lsrs	r7, r6, #16\n\t"
43915 #else
43916         "lsr	r7, r6, #16\n\t"
43917 #endif
43918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43919         "lsls	r6, r6, #16\n\t"
43920 #else
43921         "lsl	r6, r6, #16\n\t"
43922 #endif
43923 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43924         "adds	r4, r4, r6\n\t"
43925 #else
43926         "add	r4, r4, r6\n\t"
43927 #endif
43928 #ifdef WOLFSSL_KEIL
43929         "adcs	r5, r5, r7\n\t"
43930 #elif defined(__clang__)
43931         "adcs	r5, r7\n\t"
43932 #else
43933         "adc	r5, r7\n\t"
43934 #endif
43935 #ifdef WOLFSSL_KEIL
43936         "adcs	r3, r3, %[r]\n\t"
43937 #elif defined(__clang__)
43938         "adcs	r3, %[r]\n\t"
43939 #else
43940         "adc	r3, %[r]\n\t"
43941 #endif
43942 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43943         "lsrs	r6, %[a], #16\n\t"
43944 #else
43945         "lsr	r6, %[a], #16\n\t"
43946 #endif
43947 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43948         "lsrs	r7, %[b], #16\n\t"
43949 #else
43950         "lsr	r7, %[b], #16\n\t"
43951 #endif
43952 #ifdef WOLFSSL_KEIL
43953         "muls	r7, r6, r7\n\t"
43954 #elif defined(__clang__)
43955         "muls	r7, r6\n\t"
43956 #else
43957         "mul	r7, r6\n\t"
43958 #endif
43959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43960         "adds	r5, r5, r7\n\t"
43961 #else
43962         "add	r5, r5, r7\n\t"
43963 #endif
43964 #ifdef WOLFSSL_KEIL
43965         "adcs	r3, r3, %[r]\n\t"
43966 #elif defined(__clang__)
43967         "adcs	r3, %[r]\n\t"
43968 #else
43969         "adc	r3, %[r]\n\t"
43970 #endif
43971         "uxth	r7, %[b]\n\t"
43972 #ifdef WOLFSSL_KEIL
43973         "muls	r6, r7, r6\n\t"
43974 #elif defined(__clang__)
43975         "muls	r6, r7\n\t"
43976 #else
43977         "mul	r6, r7\n\t"
43978 #endif
43979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43980         "lsrs	r7, r6, #16\n\t"
43981 #else
43982         "lsr	r7, r6, #16\n\t"
43983 #endif
43984 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43985         "lsls	r6, r6, #16\n\t"
43986 #else
43987         "lsl	r6, r6, #16\n\t"
43988 #endif
43989 #if defined(__clang__) || defined(WOLFSSL_KEIL)
43990         "adds	r4, r4, r6\n\t"
43991 #else
43992         "add	r4, r4, r6\n\t"
43993 #endif
43994 #ifdef WOLFSSL_KEIL
43995         "adcs	r5, r5, r7\n\t"
43996 #elif defined(__clang__)
43997         "adcs	r5, r7\n\t"
43998 #else
43999         "adc	r5, r7\n\t"
44000 #endif
44001 #ifdef WOLFSSL_KEIL
44002         "adcs	r3, r3, %[r]\n\t"
44003 #elif defined(__clang__)
44004         "adcs	r3, %[r]\n\t"
44005 #else
44006         "adc	r3, %[r]\n\t"
44007 #endif
44008         "#  A[11] * B[2]\n\t"
44009         "mov	%[a], r9\n\t"
44010         "mov	%[b], r10\n\t"
44011         "ldr	%[a], [%[a], #44]\n\t"
44012         "ldr	%[b], [%[b], #8]\n\t"
44013         "uxth	r6, %[a]\n\t"
44014         "uxth	r7, %[b]\n\t"
44015 #ifdef WOLFSSL_KEIL
44016         "muls	r7, r6, r7\n\t"
44017 #elif defined(__clang__)
44018         "muls	r7, r6\n\t"
44019 #else
44020         "mul	r7, r6\n\t"
44021 #endif
44022 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44023         "adds	r4, r4, r7\n\t"
44024 #else
44025         "add	r4, r4, r7\n\t"
44026 #endif
44027 #ifdef WOLFSSL_KEIL
44028         "adcs	r5, r5, %[r]\n\t"
44029 #elif defined(__clang__)
44030         "adcs	r5, %[r]\n\t"
44031 #else
44032         "adc	r5, %[r]\n\t"
44033 #endif
44034 #ifdef WOLFSSL_KEIL
44035         "adcs	r3, r3, %[r]\n\t"
44036 #elif defined(__clang__)
44037         "adcs	r3, %[r]\n\t"
44038 #else
44039         "adc	r3, %[r]\n\t"
44040 #endif
44041 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44042         "lsrs	r7, %[b], #16\n\t"
44043 #else
44044         "lsr	r7, %[b], #16\n\t"
44045 #endif
44046 #ifdef WOLFSSL_KEIL
44047         "muls	r6, r7, r6\n\t"
44048 #elif defined(__clang__)
44049         "muls	r6, r7\n\t"
44050 #else
44051         "mul	r6, r7\n\t"
44052 #endif
44053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44054         "lsrs	r7, r6, #16\n\t"
44055 #else
44056         "lsr	r7, r6, #16\n\t"
44057 #endif
44058 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44059         "lsls	r6, r6, #16\n\t"
44060 #else
44061         "lsl	r6, r6, #16\n\t"
44062 #endif
44063 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44064         "adds	r4, r4, r6\n\t"
44065 #else
44066         "add	r4, r4, r6\n\t"
44067 #endif
44068 #ifdef WOLFSSL_KEIL
44069         "adcs	r5, r5, r7\n\t"
44070 #elif defined(__clang__)
44071         "adcs	r5, r7\n\t"
44072 #else
44073         "adc	r5, r7\n\t"
44074 #endif
44075 #ifdef WOLFSSL_KEIL
44076         "adcs	r3, r3, %[r]\n\t"
44077 #elif defined(__clang__)
44078         "adcs	r3, %[r]\n\t"
44079 #else
44080         "adc	r3, %[r]\n\t"
44081 #endif
44082 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44083         "lsrs	r6, %[a], #16\n\t"
44084 #else
44085         "lsr	r6, %[a], #16\n\t"
44086 #endif
44087 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44088         "lsrs	r7, %[b], #16\n\t"
44089 #else
44090         "lsr	r7, %[b], #16\n\t"
44091 #endif
44092 #ifdef WOLFSSL_KEIL
44093         "muls	r7, r6, r7\n\t"
44094 #elif defined(__clang__)
44095         "muls	r7, r6\n\t"
44096 #else
44097         "mul	r7, r6\n\t"
44098 #endif
44099 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44100         "adds	r5, r5, r7\n\t"
44101 #else
44102         "add	r5, r5, r7\n\t"
44103 #endif
44104 #ifdef WOLFSSL_KEIL
44105         "adcs	r3, r3, %[r]\n\t"
44106 #elif defined(__clang__)
44107         "adcs	r3, %[r]\n\t"
44108 #else
44109         "adc	r3, %[r]\n\t"
44110 #endif
44111         "uxth	r7, %[b]\n\t"
44112 #ifdef WOLFSSL_KEIL
44113         "muls	r6, r7, r6\n\t"
44114 #elif defined(__clang__)
44115         "muls	r6, r7\n\t"
44116 #else
44117         "mul	r6, r7\n\t"
44118 #endif
44119 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44120         "lsrs	r7, r6, #16\n\t"
44121 #else
44122         "lsr	r7, r6, #16\n\t"
44123 #endif
44124 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44125         "lsls	r6, r6, #16\n\t"
44126 #else
44127         "lsl	r6, r6, #16\n\t"
44128 #endif
44129 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44130         "adds	r4, r4, r6\n\t"
44131 #else
44132         "add	r4, r4, r6\n\t"
44133 #endif
44134 #ifdef WOLFSSL_KEIL
44135         "adcs	r5, r5, r7\n\t"
44136 #elif defined(__clang__)
44137         "adcs	r5, r7\n\t"
44138 #else
44139         "adc	r5, r7\n\t"
44140 #endif
44141 #ifdef WOLFSSL_KEIL
44142         "adcs	r3, r3, %[r]\n\t"
44143 #elif defined(__clang__)
44144         "adcs	r3, %[r]\n\t"
44145 #else
44146         "adc	r3, %[r]\n\t"
44147 #endif
44148         "mov	%[r], r8\n\t"
44149         "str	r4, [%[r], #52]\n\t"
44150         "movs	%[r], #0\n\t"
44151         "#  A[11] * B[3]\n\t"
44152         "movs	r4, #0\n\t"
44153         "mov	%[a], r9\n\t"
44154         "mov	%[b], r10\n\t"
44155         "ldr	%[a], [%[a], #44]\n\t"
44156         "ldr	%[b], [%[b], #12]\n\t"
44157         "uxth	r6, %[a]\n\t"
44158         "uxth	r7, %[b]\n\t"
44159 #ifdef WOLFSSL_KEIL
44160         "muls	r7, r6, r7\n\t"
44161 #elif defined(__clang__)
44162         "muls	r7, r6\n\t"
44163 #else
44164         "mul	r7, r6\n\t"
44165 #endif
44166 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44167         "adds	r5, r5, r7\n\t"
44168 #else
44169         "add	r5, r5, r7\n\t"
44170 #endif
44171 #ifdef WOLFSSL_KEIL
44172         "adcs	r3, r3, %[r]\n\t"
44173 #elif defined(__clang__)
44174         "adcs	r3, %[r]\n\t"
44175 #else
44176         "adc	r3, %[r]\n\t"
44177 #endif
44178 #ifdef WOLFSSL_KEIL
44179         "adcs	r4, r4, %[r]\n\t"
44180 #elif defined(__clang__)
44181         "adcs	r4, %[r]\n\t"
44182 #else
44183         "adc	r4, %[r]\n\t"
44184 #endif
44185 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44186         "lsrs	r7, %[b], #16\n\t"
44187 #else
44188         "lsr	r7, %[b], #16\n\t"
44189 #endif
44190 #ifdef WOLFSSL_KEIL
44191         "muls	r6, r7, r6\n\t"
44192 #elif defined(__clang__)
44193         "muls	r6, r7\n\t"
44194 #else
44195         "mul	r6, r7\n\t"
44196 #endif
44197 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44198         "lsrs	r7, r6, #16\n\t"
44199 #else
44200         "lsr	r7, r6, #16\n\t"
44201 #endif
44202 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44203         "lsls	r6, r6, #16\n\t"
44204 #else
44205         "lsl	r6, r6, #16\n\t"
44206 #endif
44207 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44208         "adds	r5, r5, r6\n\t"
44209 #else
44210         "add	r5, r5, r6\n\t"
44211 #endif
44212 #ifdef WOLFSSL_KEIL
44213         "adcs	r3, r3, r7\n\t"
44214 #elif defined(__clang__)
44215         "adcs	r3, r7\n\t"
44216 #else
44217         "adc	r3, r7\n\t"
44218 #endif
44219 #ifdef WOLFSSL_KEIL
44220         "adcs	r4, r4, %[r]\n\t"
44221 #elif defined(__clang__)
44222         "adcs	r4, %[r]\n\t"
44223 #else
44224         "adc	r4, %[r]\n\t"
44225 #endif
44226 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44227         "lsrs	r6, %[a], #16\n\t"
44228 #else
44229         "lsr	r6, %[a], #16\n\t"
44230 #endif
44231 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44232         "lsrs	r7, %[b], #16\n\t"
44233 #else
44234         "lsr	r7, %[b], #16\n\t"
44235 #endif
44236 #ifdef WOLFSSL_KEIL
44237         "muls	r7, r6, r7\n\t"
44238 #elif defined(__clang__)
44239         "muls	r7, r6\n\t"
44240 #else
44241         "mul	r7, r6\n\t"
44242 #endif
44243 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44244         "adds	r3, r3, r7\n\t"
44245 #else
44246         "add	r3, r3, r7\n\t"
44247 #endif
44248 #ifdef WOLFSSL_KEIL
44249         "adcs	r4, r4, %[r]\n\t"
44250 #elif defined(__clang__)
44251         "adcs	r4, %[r]\n\t"
44252 #else
44253         "adc	r4, %[r]\n\t"
44254 #endif
44255         "uxth	r7, %[b]\n\t"
44256 #ifdef WOLFSSL_KEIL
44257         "muls	r6, r7, r6\n\t"
44258 #elif defined(__clang__)
44259         "muls	r6, r7\n\t"
44260 #else
44261         "mul	r6, r7\n\t"
44262 #endif
44263 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44264         "lsrs	r7, r6, #16\n\t"
44265 #else
44266         "lsr	r7, r6, #16\n\t"
44267 #endif
44268 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44269         "lsls	r6, r6, #16\n\t"
44270 #else
44271         "lsl	r6, r6, #16\n\t"
44272 #endif
44273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44274         "adds	r5, r5, r6\n\t"
44275 #else
44276         "add	r5, r5, r6\n\t"
44277 #endif
44278 #ifdef WOLFSSL_KEIL
44279         "adcs	r3, r3, r7\n\t"
44280 #elif defined(__clang__)
44281         "adcs	r3, r7\n\t"
44282 #else
44283         "adc	r3, r7\n\t"
44284 #endif
44285 #ifdef WOLFSSL_KEIL
44286         "adcs	r4, r4, %[r]\n\t"
44287 #elif defined(__clang__)
44288         "adcs	r4, %[r]\n\t"
44289 #else
44290         "adc	r4, %[r]\n\t"
44291 #endif
44292         "#  A[10] * B[4]\n\t"
44293         "mov	%[a], r9\n\t"
44294         "mov	%[b], r10\n\t"
44295         "ldr	%[a], [%[a], #40]\n\t"
44296         "ldr	%[b], [%[b], #16]\n\t"
44297         "uxth	r6, %[a]\n\t"
44298         "uxth	r7, %[b]\n\t"
44299 #ifdef WOLFSSL_KEIL
44300         "muls	r7, r6, r7\n\t"
44301 #elif defined(__clang__)
44302         "muls	r7, r6\n\t"
44303 #else
44304         "mul	r7, r6\n\t"
44305 #endif
44306 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44307         "adds	r5, r5, r7\n\t"
44308 #else
44309         "add	r5, r5, r7\n\t"
44310 #endif
44311 #ifdef WOLFSSL_KEIL
44312         "adcs	r3, r3, %[r]\n\t"
44313 #elif defined(__clang__)
44314         "adcs	r3, %[r]\n\t"
44315 #else
44316         "adc	r3, %[r]\n\t"
44317 #endif
44318 #ifdef WOLFSSL_KEIL
44319         "adcs	r4, r4, %[r]\n\t"
44320 #elif defined(__clang__)
44321         "adcs	r4, %[r]\n\t"
44322 #else
44323         "adc	r4, %[r]\n\t"
44324 #endif
44325 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44326         "lsrs	r7, %[b], #16\n\t"
44327 #else
44328         "lsr	r7, %[b], #16\n\t"
44329 #endif
44330 #ifdef WOLFSSL_KEIL
44331         "muls	r6, r7, r6\n\t"
44332 #elif defined(__clang__)
44333         "muls	r6, r7\n\t"
44334 #else
44335         "mul	r6, r7\n\t"
44336 #endif
44337 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44338         "lsrs	r7, r6, #16\n\t"
44339 #else
44340         "lsr	r7, r6, #16\n\t"
44341 #endif
44342 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44343         "lsls	r6, r6, #16\n\t"
44344 #else
44345         "lsl	r6, r6, #16\n\t"
44346 #endif
44347 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44348         "adds	r5, r5, r6\n\t"
44349 #else
44350         "add	r5, r5, r6\n\t"
44351 #endif
44352 #ifdef WOLFSSL_KEIL
44353         "adcs	r3, r3, r7\n\t"
44354 #elif defined(__clang__)
44355         "adcs	r3, r7\n\t"
44356 #else
44357         "adc	r3, r7\n\t"
44358 #endif
44359 #ifdef WOLFSSL_KEIL
44360         "adcs	r4, r4, %[r]\n\t"
44361 #elif defined(__clang__)
44362         "adcs	r4, %[r]\n\t"
44363 #else
44364         "adc	r4, %[r]\n\t"
44365 #endif
44366 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44367         "lsrs	r6, %[a], #16\n\t"
44368 #else
44369         "lsr	r6, %[a], #16\n\t"
44370 #endif
44371 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44372         "lsrs	r7, %[b], #16\n\t"
44373 #else
44374         "lsr	r7, %[b], #16\n\t"
44375 #endif
44376 #ifdef WOLFSSL_KEIL
44377         "muls	r7, r6, r7\n\t"
44378 #elif defined(__clang__)
44379         "muls	r7, r6\n\t"
44380 #else
44381         "mul	r7, r6\n\t"
44382 #endif
44383 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44384         "adds	r3, r3, r7\n\t"
44385 #else
44386         "add	r3, r3, r7\n\t"
44387 #endif
44388 #ifdef WOLFSSL_KEIL
44389         "adcs	r4, r4, %[r]\n\t"
44390 #elif defined(__clang__)
44391         "adcs	r4, %[r]\n\t"
44392 #else
44393         "adc	r4, %[r]\n\t"
44394 #endif
44395         "uxth	r7, %[b]\n\t"
44396 #ifdef WOLFSSL_KEIL
44397         "muls	r6, r7, r6\n\t"
44398 #elif defined(__clang__)
44399         "muls	r6, r7\n\t"
44400 #else
44401         "mul	r6, r7\n\t"
44402 #endif
44403 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44404         "lsrs	r7, r6, #16\n\t"
44405 #else
44406         "lsr	r7, r6, #16\n\t"
44407 #endif
44408 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44409         "lsls	r6, r6, #16\n\t"
44410 #else
44411         "lsl	r6, r6, #16\n\t"
44412 #endif
44413 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44414         "adds	r5, r5, r6\n\t"
44415 #else
44416         "add	r5, r5, r6\n\t"
44417 #endif
44418 #ifdef WOLFSSL_KEIL
44419         "adcs	r3, r3, r7\n\t"
44420 #elif defined(__clang__)
44421         "adcs	r3, r7\n\t"
44422 #else
44423         "adc	r3, r7\n\t"
44424 #endif
44425 #ifdef WOLFSSL_KEIL
44426         "adcs	r4, r4, %[r]\n\t"
44427 #elif defined(__clang__)
44428         "adcs	r4, %[r]\n\t"
44429 #else
44430         "adc	r4, %[r]\n\t"
44431 #endif
44432         "#  A[9] * B[5]\n\t"
44433         "mov	%[a], r9\n\t"
44434         "mov	%[b], r10\n\t"
44435         "ldr	%[a], [%[a], #36]\n\t"
44436         "ldr	%[b], [%[b], #20]\n\t"
44437         "uxth	r6, %[a]\n\t"
44438         "uxth	r7, %[b]\n\t"
44439 #ifdef WOLFSSL_KEIL
44440         "muls	r7, r6, r7\n\t"
44441 #elif defined(__clang__)
44442         "muls	r7, r6\n\t"
44443 #else
44444         "mul	r7, r6\n\t"
44445 #endif
44446 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44447         "adds	r5, r5, r7\n\t"
44448 #else
44449         "add	r5, r5, r7\n\t"
44450 #endif
44451 #ifdef WOLFSSL_KEIL
44452         "adcs	r3, r3, %[r]\n\t"
44453 #elif defined(__clang__)
44454         "adcs	r3, %[r]\n\t"
44455 #else
44456         "adc	r3, %[r]\n\t"
44457 #endif
44458 #ifdef WOLFSSL_KEIL
44459         "adcs	r4, r4, %[r]\n\t"
44460 #elif defined(__clang__)
44461         "adcs	r4, %[r]\n\t"
44462 #else
44463         "adc	r4, %[r]\n\t"
44464 #endif
44465 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44466         "lsrs	r7, %[b], #16\n\t"
44467 #else
44468         "lsr	r7, %[b], #16\n\t"
44469 #endif
44470 #ifdef WOLFSSL_KEIL
44471         "muls	r6, r7, r6\n\t"
44472 #elif defined(__clang__)
44473         "muls	r6, r7\n\t"
44474 #else
44475         "mul	r6, r7\n\t"
44476 #endif
44477 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44478         "lsrs	r7, r6, #16\n\t"
44479 #else
44480         "lsr	r7, r6, #16\n\t"
44481 #endif
44482 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44483         "lsls	r6, r6, #16\n\t"
44484 #else
44485         "lsl	r6, r6, #16\n\t"
44486 #endif
44487 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44488         "adds	r5, r5, r6\n\t"
44489 #else
44490         "add	r5, r5, r6\n\t"
44491 #endif
44492 #ifdef WOLFSSL_KEIL
44493         "adcs	r3, r3, r7\n\t"
44494 #elif defined(__clang__)
44495         "adcs	r3, r7\n\t"
44496 #else
44497         "adc	r3, r7\n\t"
44498 #endif
44499 #ifdef WOLFSSL_KEIL
44500         "adcs	r4, r4, %[r]\n\t"
44501 #elif defined(__clang__)
44502         "adcs	r4, %[r]\n\t"
44503 #else
44504         "adc	r4, %[r]\n\t"
44505 #endif
44506 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44507         "lsrs	r6, %[a], #16\n\t"
44508 #else
44509         "lsr	r6, %[a], #16\n\t"
44510 #endif
44511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44512         "lsrs	r7, %[b], #16\n\t"
44513 #else
44514         "lsr	r7, %[b], #16\n\t"
44515 #endif
44516 #ifdef WOLFSSL_KEIL
44517         "muls	r7, r6, r7\n\t"
44518 #elif defined(__clang__)
44519         "muls	r7, r6\n\t"
44520 #else
44521         "mul	r7, r6\n\t"
44522 #endif
44523 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44524         "adds	r3, r3, r7\n\t"
44525 #else
44526         "add	r3, r3, r7\n\t"
44527 #endif
44528 #ifdef WOLFSSL_KEIL
44529         "adcs	r4, r4, %[r]\n\t"
44530 #elif defined(__clang__)
44531         "adcs	r4, %[r]\n\t"
44532 #else
44533         "adc	r4, %[r]\n\t"
44534 #endif
44535         "uxth	r7, %[b]\n\t"
44536 #ifdef WOLFSSL_KEIL
44537         "muls	r6, r7, r6\n\t"
44538 #elif defined(__clang__)
44539         "muls	r6, r7\n\t"
44540 #else
44541         "mul	r6, r7\n\t"
44542 #endif
44543 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44544         "lsrs	r7, r6, #16\n\t"
44545 #else
44546         "lsr	r7, r6, #16\n\t"
44547 #endif
44548 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44549         "lsls	r6, r6, #16\n\t"
44550 #else
44551         "lsl	r6, r6, #16\n\t"
44552 #endif
44553 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44554         "adds	r5, r5, r6\n\t"
44555 #else
44556         "add	r5, r5, r6\n\t"
44557 #endif
44558 #ifdef WOLFSSL_KEIL
44559         "adcs	r3, r3, r7\n\t"
44560 #elif defined(__clang__)
44561         "adcs	r3, r7\n\t"
44562 #else
44563         "adc	r3, r7\n\t"
44564 #endif
44565 #ifdef WOLFSSL_KEIL
44566         "adcs	r4, r4, %[r]\n\t"
44567 #elif defined(__clang__)
44568         "adcs	r4, %[r]\n\t"
44569 #else
44570         "adc	r4, %[r]\n\t"
44571 #endif
44572         "#  A[8] * B[6]\n\t"
44573         "mov	%[a], r9\n\t"
44574         "mov	%[b], r10\n\t"
44575         "ldr	%[a], [%[a], #32]\n\t"
44576         "ldr	%[b], [%[b], #24]\n\t"
44577         "uxth	r6, %[a]\n\t"
44578         "uxth	r7, %[b]\n\t"
44579 #ifdef WOLFSSL_KEIL
44580         "muls	r7, r6, r7\n\t"
44581 #elif defined(__clang__)
44582         "muls	r7, r6\n\t"
44583 #else
44584         "mul	r7, r6\n\t"
44585 #endif
44586 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44587         "adds	r5, r5, r7\n\t"
44588 #else
44589         "add	r5, r5, r7\n\t"
44590 #endif
44591 #ifdef WOLFSSL_KEIL
44592         "adcs	r3, r3, %[r]\n\t"
44593 #elif defined(__clang__)
44594         "adcs	r3, %[r]\n\t"
44595 #else
44596         "adc	r3, %[r]\n\t"
44597 #endif
44598 #ifdef WOLFSSL_KEIL
44599         "adcs	r4, r4, %[r]\n\t"
44600 #elif defined(__clang__)
44601         "adcs	r4, %[r]\n\t"
44602 #else
44603         "adc	r4, %[r]\n\t"
44604 #endif
44605 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44606         "lsrs	r7, %[b], #16\n\t"
44607 #else
44608         "lsr	r7, %[b], #16\n\t"
44609 #endif
44610 #ifdef WOLFSSL_KEIL
44611         "muls	r6, r7, r6\n\t"
44612 #elif defined(__clang__)
44613         "muls	r6, r7\n\t"
44614 #else
44615         "mul	r6, r7\n\t"
44616 #endif
44617 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44618         "lsrs	r7, r6, #16\n\t"
44619 #else
44620         "lsr	r7, r6, #16\n\t"
44621 #endif
44622 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44623         "lsls	r6, r6, #16\n\t"
44624 #else
44625         "lsl	r6, r6, #16\n\t"
44626 #endif
44627 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44628         "adds	r5, r5, r6\n\t"
44629 #else
44630         "add	r5, r5, r6\n\t"
44631 #endif
44632 #ifdef WOLFSSL_KEIL
44633         "adcs	r3, r3, r7\n\t"
44634 #elif defined(__clang__)
44635         "adcs	r3, r7\n\t"
44636 #else
44637         "adc	r3, r7\n\t"
44638 #endif
44639 #ifdef WOLFSSL_KEIL
44640         "adcs	r4, r4, %[r]\n\t"
44641 #elif defined(__clang__)
44642         "adcs	r4, %[r]\n\t"
44643 #else
44644         "adc	r4, %[r]\n\t"
44645 #endif
44646 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44647         "lsrs	r6, %[a], #16\n\t"
44648 #else
44649         "lsr	r6, %[a], #16\n\t"
44650 #endif
44651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44652         "lsrs	r7, %[b], #16\n\t"
44653 #else
44654         "lsr	r7, %[b], #16\n\t"
44655 #endif
44656 #ifdef WOLFSSL_KEIL
44657         "muls	r7, r6, r7\n\t"
44658 #elif defined(__clang__)
44659         "muls	r7, r6\n\t"
44660 #else
44661         "mul	r7, r6\n\t"
44662 #endif
44663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44664         "adds	r3, r3, r7\n\t"
44665 #else
44666         "add	r3, r3, r7\n\t"
44667 #endif
44668 #ifdef WOLFSSL_KEIL
44669         "adcs	r4, r4, %[r]\n\t"
44670 #elif defined(__clang__)
44671         "adcs	r4, %[r]\n\t"
44672 #else
44673         "adc	r4, %[r]\n\t"
44674 #endif
44675         "uxth	r7, %[b]\n\t"
44676 #ifdef WOLFSSL_KEIL
44677         "muls	r6, r7, r6\n\t"
44678 #elif defined(__clang__)
44679         "muls	r6, r7\n\t"
44680 #else
44681         "mul	r6, r7\n\t"
44682 #endif
44683 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44684         "lsrs	r7, r6, #16\n\t"
44685 #else
44686         "lsr	r7, r6, #16\n\t"
44687 #endif
44688 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44689         "lsls	r6, r6, #16\n\t"
44690 #else
44691         "lsl	r6, r6, #16\n\t"
44692 #endif
44693 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44694         "adds	r5, r5, r6\n\t"
44695 #else
44696         "add	r5, r5, r6\n\t"
44697 #endif
44698 #ifdef WOLFSSL_KEIL
44699         "adcs	r3, r3, r7\n\t"
44700 #elif defined(__clang__)
44701         "adcs	r3, r7\n\t"
44702 #else
44703         "adc	r3, r7\n\t"
44704 #endif
44705 #ifdef WOLFSSL_KEIL
44706         "adcs	r4, r4, %[r]\n\t"
44707 #elif defined(__clang__)
44708         "adcs	r4, %[r]\n\t"
44709 #else
44710         "adc	r4, %[r]\n\t"
44711 #endif
44712         "#  A[7] * B[7]\n\t"
44713         "mov	%[a], r9\n\t"
44714         "mov	%[b], r10\n\t"
44715         "ldr	%[a], [%[a], #28]\n\t"
44716         "ldr	%[b], [%[b], #28]\n\t"
44717         "uxth	r6, %[a]\n\t"
44718         "uxth	r7, %[b]\n\t"
44719 #ifdef WOLFSSL_KEIL
44720         "muls	r7, r6, r7\n\t"
44721 #elif defined(__clang__)
44722         "muls	r7, r6\n\t"
44723 #else
44724         "mul	r7, r6\n\t"
44725 #endif
44726 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44727         "adds	r5, r5, r7\n\t"
44728 #else
44729         "add	r5, r5, r7\n\t"
44730 #endif
44731 #ifdef WOLFSSL_KEIL
44732         "adcs	r3, r3, %[r]\n\t"
44733 #elif defined(__clang__)
44734         "adcs	r3, %[r]\n\t"
44735 #else
44736         "adc	r3, %[r]\n\t"
44737 #endif
44738 #ifdef WOLFSSL_KEIL
44739         "adcs	r4, r4, %[r]\n\t"
44740 #elif defined(__clang__)
44741         "adcs	r4, %[r]\n\t"
44742 #else
44743         "adc	r4, %[r]\n\t"
44744 #endif
44745 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44746         "lsrs	r7, %[b], #16\n\t"
44747 #else
44748         "lsr	r7, %[b], #16\n\t"
44749 #endif
44750 #ifdef WOLFSSL_KEIL
44751         "muls	r6, r7, r6\n\t"
44752 #elif defined(__clang__)
44753         "muls	r6, r7\n\t"
44754 #else
44755         "mul	r6, r7\n\t"
44756 #endif
44757 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44758         "lsrs	r7, r6, #16\n\t"
44759 #else
44760         "lsr	r7, r6, #16\n\t"
44761 #endif
44762 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44763         "lsls	r6, r6, #16\n\t"
44764 #else
44765         "lsl	r6, r6, #16\n\t"
44766 #endif
44767 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44768         "adds	r5, r5, r6\n\t"
44769 #else
44770         "add	r5, r5, r6\n\t"
44771 #endif
44772 #ifdef WOLFSSL_KEIL
44773         "adcs	r3, r3, r7\n\t"
44774 #elif defined(__clang__)
44775         "adcs	r3, r7\n\t"
44776 #else
44777         "adc	r3, r7\n\t"
44778 #endif
44779 #ifdef WOLFSSL_KEIL
44780         "adcs	r4, r4, %[r]\n\t"
44781 #elif defined(__clang__)
44782         "adcs	r4, %[r]\n\t"
44783 #else
44784         "adc	r4, %[r]\n\t"
44785 #endif
44786 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44787         "lsrs	r6, %[a], #16\n\t"
44788 #else
44789         "lsr	r6, %[a], #16\n\t"
44790 #endif
44791 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44792         "lsrs	r7, %[b], #16\n\t"
44793 #else
44794         "lsr	r7, %[b], #16\n\t"
44795 #endif
44796 #ifdef WOLFSSL_KEIL
44797         "muls	r7, r6, r7\n\t"
44798 #elif defined(__clang__)
44799         "muls	r7, r6\n\t"
44800 #else
44801         "mul	r7, r6\n\t"
44802 #endif
44803 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44804         "adds	r3, r3, r7\n\t"
44805 #else
44806         "add	r3, r3, r7\n\t"
44807 #endif
44808 #ifdef WOLFSSL_KEIL
44809         "adcs	r4, r4, %[r]\n\t"
44810 #elif defined(__clang__)
44811         "adcs	r4, %[r]\n\t"
44812 #else
44813         "adc	r4, %[r]\n\t"
44814 #endif
44815         "uxth	r7, %[b]\n\t"
44816 #ifdef WOLFSSL_KEIL
44817         "muls	r6, r7, r6\n\t"
44818 #elif defined(__clang__)
44819         "muls	r6, r7\n\t"
44820 #else
44821         "mul	r6, r7\n\t"
44822 #endif
44823 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44824         "lsrs	r7, r6, #16\n\t"
44825 #else
44826         "lsr	r7, r6, #16\n\t"
44827 #endif
44828 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44829         "lsls	r6, r6, #16\n\t"
44830 #else
44831         "lsl	r6, r6, #16\n\t"
44832 #endif
44833 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44834         "adds	r5, r5, r6\n\t"
44835 #else
44836         "add	r5, r5, r6\n\t"
44837 #endif
44838 #ifdef WOLFSSL_KEIL
44839         "adcs	r3, r3, r7\n\t"
44840 #elif defined(__clang__)
44841         "adcs	r3, r7\n\t"
44842 #else
44843         "adc	r3, r7\n\t"
44844 #endif
44845 #ifdef WOLFSSL_KEIL
44846         "adcs	r4, r4, %[r]\n\t"
44847 #elif defined(__clang__)
44848         "adcs	r4, %[r]\n\t"
44849 #else
44850         "adc	r4, %[r]\n\t"
44851 #endif
44852         "#  A[6] * B[8]\n\t"
44853         "mov	%[a], r9\n\t"
44854         "mov	%[b], r10\n\t"
44855         "ldr	%[a], [%[a], #24]\n\t"
44856         "ldr	%[b], [%[b], #32]\n\t"
44857         "uxth	r6, %[a]\n\t"
44858         "uxth	r7, %[b]\n\t"
44859 #ifdef WOLFSSL_KEIL
44860         "muls	r7, r6, r7\n\t"
44861 #elif defined(__clang__)
44862         "muls	r7, r6\n\t"
44863 #else
44864         "mul	r7, r6\n\t"
44865 #endif
44866 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44867         "adds	r5, r5, r7\n\t"
44868 #else
44869         "add	r5, r5, r7\n\t"
44870 #endif
44871 #ifdef WOLFSSL_KEIL
44872         "adcs	r3, r3, %[r]\n\t"
44873 #elif defined(__clang__)
44874         "adcs	r3, %[r]\n\t"
44875 #else
44876         "adc	r3, %[r]\n\t"
44877 #endif
44878 #ifdef WOLFSSL_KEIL
44879         "adcs	r4, r4, %[r]\n\t"
44880 #elif defined(__clang__)
44881         "adcs	r4, %[r]\n\t"
44882 #else
44883         "adc	r4, %[r]\n\t"
44884 #endif
44885 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44886         "lsrs	r7, %[b], #16\n\t"
44887 #else
44888         "lsr	r7, %[b], #16\n\t"
44889 #endif
44890 #ifdef WOLFSSL_KEIL
44891         "muls	r6, r7, r6\n\t"
44892 #elif defined(__clang__)
44893         "muls	r6, r7\n\t"
44894 #else
44895         "mul	r6, r7\n\t"
44896 #endif
44897 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44898         "lsrs	r7, r6, #16\n\t"
44899 #else
44900         "lsr	r7, r6, #16\n\t"
44901 #endif
44902 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44903         "lsls	r6, r6, #16\n\t"
44904 #else
44905         "lsl	r6, r6, #16\n\t"
44906 #endif
44907 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44908         "adds	r5, r5, r6\n\t"
44909 #else
44910         "add	r5, r5, r6\n\t"
44911 #endif
44912 #ifdef WOLFSSL_KEIL
44913         "adcs	r3, r3, r7\n\t"
44914 #elif defined(__clang__)
44915         "adcs	r3, r7\n\t"
44916 #else
44917         "adc	r3, r7\n\t"
44918 #endif
44919 #ifdef WOLFSSL_KEIL
44920         "adcs	r4, r4, %[r]\n\t"
44921 #elif defined(__clang__)
44922         "adcs	r4, %[r]\n\t"
44923 #else
44924         "adc	r4, %[r]\n\t"
44925 #endif
44926 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44927         "lsrs	r6, %[a], #16\n\t"
44928 #else
44929         "lsr	r6, %[a], #16\n\t"
44930 #endif
44931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44932         "lsrs	r7, %[b], #16\n\t"
44933 #else
44934         "lsr	r7, %[b], #16\n\t"
44935 #endif
44936 #ifdef WOLFSSL_KEIL
44937         "muls	r7, r6, r7\n\t"
44938 #elif defined(__clang__)
44939         "muls	r7, r6\n\t"
44940 #else
44941         "mul	r7, r6\n\t"
44942 #endif
44943 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44944         "adds	r3, r3, r7\n\t"
44945 #else
44946         "add	r3, r3, r7\n\t"
44947 #endif
44948 #ifdef WOLFSSL_KEIL
44949         "adcs	r4, r4, %[r]\n\t"
44950 #elif defined(__clang__)
44951         "adcs	r4, %[r]\n\t"
44952 #else
44953         "adc	r4, %[r]\n\t"
44954 #endif
44955         "uxth	r7, %[b]\n\t"
44956 #ifdef WOLFSSL_KEIL
44957         "muls	r6, r7, r6\n\t"
44958 #elif defined(__clang__)
44959         "muls	r6, r7\n\t"
44960 #else
44961         "mul	r6, r7\n\t"
44962 #endif
44963 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44964         "lsrs	r7, r6, #16\n\t"
44965 #else
44966         "lsr	r7, r6, #16\n\t"
44967 #endif
44968 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44969         "lsls	r6, r6, #16\n\t"
44970 #else
44971         "lsl	r6, r6, #16\n\t"
44972 #endif
44973 #if defined(__clang__) || defined(WOLFSSL_KEIL)
44974         "adds	r5, r5, r6\n\t"
44975 #else
44976         "add	r5, r5, r6\n\t"
44977 #endif
44978 #ifdef WOLFSSL_KEIL
44979         "adcs	r3, r3, r7\n\t"
44980 #elif defined(__clang__)
44981         "adcs	r3, r7\n\t"
44982 #else
44983         "adc	r3, r7\n\t"
44984 #endif
44985 #ifdef WOLFSSL_KEIL
44986         "adcs	r4, r4, %[r]\n\t"
44987 #elif defined(__clang__)
44988         "adcs	r4, %[r]\n\t"
44989 #else
44990         "adc	r4, %[r]\n\t"
44991 #endif
44992         "#  A[5] * B[9]\n\t"
44993         "mov	%[a], r9\n\t"
44994         "mov	%[b], r10\n\t"
44995         "ldr	%[a], [%[a], #20]\n\t"
44996         "ldr	%[b], [%[b], #36]\n\t"
44997         "uxth	r6, %[a]\n\t"
44998         "uxth	r7, %[b]\n\t"
44999 #ifdef WOLFSSL_KEIL
45000         "muls	r7, r6, r7\n\t"
45001 #elif defined(__clang__)
45002         "muls	r7, r6\n\t"
45003 #else
45004         "mul	r7, r6\n\t"
45005 #endif
45006 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45007         "adds	r5, r5, r7\n\t"
45008 #else
45009         "add	r5, r5, r7\n\t"
45010 #endif
45011 #ifdef WOLFSSL_KEIL
45012         "adcs	r3, r3, %[r]\n\t"
45013 #elif defined(__clang__)
45014         "adcs	r3, %[r]\n\t"
45015 #else
45016         "adc	r3, %[r]\n\t"
45017 #endif
45018 #ifdef WOLFSSL_KEIL
45019         "adcs	r4, r4, %[r]\n\t"
45020 #elif defined(__clang__)
45021         "adcs	r4, %[r]\n\t"
45022 #else
45023         "adc	r4, %[r]\n\t"
45024 #endif
45025 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45026         "lsrs	r7, %[b], #16\n\t"
45027 #else
45028         "lsr	r7, %[b], #16\n\t"
45029 #endif
45030 #ifdef WOLFSSL_KEIL
45031         "muls	r6, r7, r6\n\t"
45032 #elif defined(__clang__)
45033         "muls	r6, r7\n\t"
45034 #else
45035         "mul	r6, r7\n\t"
45036 #endif
45037 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45038         "lsrs	r7, r6, #16\n\t"
45039 #else
45040         "lsr	r7, r6, #16\n\t"
45041 #endif
45042 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45043         "lsls	r6, r6, #16\n\t"
45044 #else
45045         "lsl	r6, r6, #16\n\t"
45046 #endif
45047 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45048         "adds	r5, r5, r6\n\t"
45049 #else
45050         "add	r5, r5, r6\n\t"
45051 #endif
45052 #ifdef WOLFSSL_KEIL
45053         "adcs	r3, r3, r7\n\t"
45054 #elif defined(__clang__)
45055         "adcs	r3, r7\n\t"
45056 #else
45057         "adc	r3, r7\n\t"
45058 #endif
45059 #ifdef WOLFSSL_KEIL
45060         "adcs	r4, r4, %[r]\n\t"
45061 #elif defined(__clang__)
45062         "adcs	r4, %[r]\n\t"
45063 #else
45064         "adc	r4, %[r]\n\t"
45065 #endif
45066 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45067         "lsrs	r6, %[a], #16\n\t"
45068 #else
45069         "lsr	r6, %[a], #16\n\t"
45070 #endif
45071 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45072         "lsrs	r7, %[b], #16\n\t"
45073 #else
45074         "lsr	r7, %[b], #16\n\t"
45075 #endif
45076 #ifdef WOLFSSL_KEIL
45077         "muls	r7, r6, r7\n\t"
45078 #elif defined(__clang__)
45079         "muls	r7, r6\n\t"
45080 #else
45081         "mul	r7, r6\n\t"
45082 #endif
45083 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45084         "adds	r3, r3, r7\n\t"
45085 #else
45086         "add	r3, r3, r7\n\t"
45087 #endif
45088 #ifdef WOLFSSL_KEIL
45089         "adcs	r4, r4, %[r]\n\t"
45090 #elif defined(__clang__)
45091         "adcs	r4, %[r]\n\t"
45092 #else
45093         "adc	r4, %[r]\n\t"
45094 #endif
45095         "uxth	r7, %[b]\n\t"
45096 #ifdef WOLFSSL_KEIL
45097         "muls	r6, r7, r6\n\t"
45098 #elif defined(__clang__)
45099         "muls	r6, r7\n\t"
45100 #else
45101         "mul	r6, r7\n\t"
45102 #endif
45103 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45104         "lsrs	r7, r6, #16\n\t"
45105 #else
45106         "lsr	r7, r6, #16\n\t"
45107 #endif
45108 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45109         "lsls	r6, r6, #16\n\t"
45110 #else
45111         "lsl	r6, r6, #16\n\t"
45112 #endif
45113 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45114         "adds	r5, r5, r6\n\t"
45115 #else
45116         "add	r5, r5, r6\n\t"
45117 #endif
45118 #ifdef WOLFSSL_KEIL
45119         "adcs	r3, r3, r7\n\t"
45120 #elif defined(__clang__)
45121         "adcs	r3, r7\n\t"
45122 #else
45123         "adc	r3, r7\n\t"
45124 #endif
45125 #ifdef WOLFSSL_KEIL
45126         "adcs	r4, r4, %[r]\n\t"
45127 #elif defined(__clang__)
45128         "adcs	r4, %[r]\n\t"
45129 #else
45130         "adc	r4, %[r]\n\t"
45131 #endif
45132         "#  A[4] * B[10]\n\t"
45133         "mov	%[a], r9\n\t"
45134         "mov	%[b], r10\n\t"
45135         "ldr	%[a], [%[a], #16]\n\t"
45136         "ldr	%[b], [%[b], #40]\n\t"
45137         "uxth	r6, %[a]\n\t"
45138         "uxth	r7, %[b]\n\t"
45139 #ifdef WOLFSSL_KEIL
45140         "muls	r7, r6, r7\n\t"
45141 #elif defined(__clang__)
45142         "muls	r7, r6\n\t"
45143 #else
45144         "mul	r7, r6\n\t"
45145 #endif
45146 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45147         "adds	r5, r5, r7\n\t"
45148 #else
45149         "add	r5, r5, r7\n\t"
45150 #endif
45151 #ifdef WOLFSSL_KEIL
45152         "adcs	r3, r3, %[r]\n\t"
45153 #elif defined(__clang__)
45154         "adcs	r3, %[r]\n\t"
45155 #else
45156         "adc	r3, %[r]\n\t"
45157 #endif
45158 #ifdef WOLFSSL_KEIL
45159         "adcs	r4, r4, %[r]\n\t"
45160 #elif defined(__clang__)
45161         "adcs	r4, %[r]\n\t"
45162 #else
45163         "adc	r4, %[r]\n\t"
45164 #endif
45165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45166         "lsrs	r7, %[b], #16\n\t"
45167 #else
45168         "lsr	r7, %[b], #16\n\t"
45169 #endif
45170 #ifdef WOLFSSL_KEIL
45171         "muls	r6, r7, r6\n\t"
45172 #elif defined(__clang__)
45173         "muls	r6, r7\n\t"
45174 #else
45175         "mul	r6, r7\n\t"
45176 #endif
45177 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45178         "lsrs	r7, r6, #16\n\t"
45179 #else
45180         "lsr	r7, r6, #16\n\t"
45181 #endif
45182 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45183         "lsls	r6, r6, #16\n\t"
45184 #else
45185         "lsl	r6, r6, #16\n\t"
45186 #endif
45187 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45188         "adds	r5, r5, r6\n\t"
45189 #else
45190         "add	r5, r5, r6\n\t"
45191 #endif
45192 #ifdef WOLFSSL_KEIL
45193         "adcs	r3, r3, r7\n\t"
45194 #elif defined(__clang__)
45195         "adcs	r3, r7\n\t"
45196 #else
45197         "adc	r3, r7\n\t"
45198 #endif
45199 #ifdef WOLFSSL_KEIL
45200         "adcs	r4, r4, %[r]\n\t"
45201 #elif defined(__clang__)
45202         "adcs	r4, %[r]\n\t"
45203 #else
45204         "adc	r4, %[r]\n\t"
45205 #endif
45206 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45207         "lsrs	r6, %[a], #16\n\t"
45208 #else
45209         "lsr	r6, %[a], #16\n\t"
45210 #endif
45211 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45212         "lsrs	r7, %[b], #16\n\t"
45213 #else
45214         "lsr	r7, %[b], #16\n\t"
45215 #endif
45216 #ifdef WOLFSSL_KEIL
45217         "muls	r7, r6, r7\n\t"
45218 #elif defined(__clang__)
45219         "muls	r7, r6\n\t"
45220 #else
45221         "mul	r7, r6\n\t"
45222 #endif
45223 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45224         "adds	r3, r3, r7\n\t"
45225 #else
45226         "add	r3, r3, r7\n\t"
45227 #endif
45228 #ifdef WOLFSSL_KEIL
45229         "adcs	r4, r4, %[r]\n\t"
45230 #elif defined(__clang__)
45231         "adcs	r4, %[r]\n\t"
45232 #else
45233         "adc	r4, %[r]\n\t"
45234 #endif
45235         "uxth	r7, %[b]\n\t"
45236 #ifdef WOLFSSL_KEIL
45237         "muls	r6, r7, r6\n\t"
45238 #elif defined(__clang__)
45239         "muls	r6, r7\n\t"
45240 #else
45241         "mul	r6, r7\n\t"
45242 #endif
45243 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45244         "lsrs	r7, r6, #16\n\t"
45245 #else
45246         "lsr	r7, r6, #16\n\t"
45247 #endif
45248 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45249         "lsls	r6, r6, #16\n\t"
45250 #else
45251         "lsl	r6, r6, #16\n\t"
45252 #endif
45253 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45254         "adds	r5, r5, r6\n\t"
45255 #else
45256         "add	r5, r5, r6\n\t"
45257 #endif
45258 #ifdef WOLFSSL_KEIL
45259         "adcs	r3, r3, r7\n\t"
45260 #elif defined(__clang__)
45261         "adcs	r3, r7\n\t"
45262 #else
45263         "adc	r3, r7\n\t"
45264 #endif
45265 #ifdef WOLFSSL_KEIL
45266         "adcs	r4, r4, %[r]\n\t"
45267 #elif defined(__clang__)
45268         "adcs	r4, %[r]\n\t"
45269 #else
45270         "adc	r4, %[r]\n\t"
45271 #endif
45272         "#  A[3] * B[11]\n\t"
45273         "mov	%[a], r9\n\t"
45274         "mov	%[b], r10\n\t"
45275         "ldr	%[a], [%[a], #12]\n\t"
45276         "ldr	%[b], [%[b], #44]\n\t"
45277         "uxth	r6, %[a]\n\t"
45278         "uxth	r7, %[b]\n\t"
45279 #ifdef WOLFSSL_KEIL
45280         "muls	r7, r6, r7\n\t"
45281 #elif defined(__clang__)
45282         "muls	r7, r6\n\t"
45283 #else
45284         "mul	r7, r6\n\t"
45285 #endif
45286 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45287         "adds	r5, r5, r7\n\t"
45288 #else
45289         "add	r5, r5, r7\n\t"
45290 #endif
45291 #ifdef WOLFSSL_KEIL
45292         "adcs	r3, r3, %[r]\n\t"
45293 #elif defined(__clang__)
45294         "adcs	r3, %[r]\n\t"
45295 #else
45296         "adc	r3, %[r]\n\t"
45297 #endif
45298 #ifdef WOLFSSL_KEIL
45299         "adcs	r4, r4, %[r]\n\t"
45300 #elif defined(__clang__)
45301         "adcs	r4, %[r]\n\t"
45302 #else
45303         "adc	r4, %[r]\n\t"
45304 #endif
45305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45306         "lsrs	r7, %[b], #16\n\t"
45307 #else
45308         "lsr	r7, %[b], #16\n\t"
45309 #endif
45310 #ifdef WOLFSSL_KEIL
45311         "muls	r6, r7, r6\n\t"
45312 #elif defined(__clang__)
45313         "muls	r6, r7\n\t"
45314 #else
45315         "mul	r6, r7\n\t"
45316 #endif
45317 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45318         "lsrs	r7, r6, #16\n\t"
45319 #else
45320         "lsr	r7, r6, #16\n\t"
45321 #endif
45322 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45323         "lsls	r6, r6, #16\n\t"
45324 #else
45325         "lsl	r6, r6, #16\n\t"
45326 #endif
45327 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45328         "adds	r5, r5, r6\n\t"
45329 #else
45330         "add	r5, r5, r6\n\t"
45331 #endif
45332 #ifdef WOLFSSL_KEIL
45333         "adcs	r3, r3, r7\n\t"
45334 #elif defined(__clang__)
45335         "adcs	r3, r7\n\t"
45336 #else
45337         "adc	r3, r7\n\t"
45338 #endif
45339 #ifdef WOLFSSL_KEIL
45340         "adcs	r4, r4, %[r]\n\t"
45341 #elif defined(__clang__)
45342         "adcs	r4, %[r]\n\t"
45343 #else
45344         "adc	r4, %[r]\n\t"
45345 #endif
45346 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45347         "lsrs	r6, %[a], #16\n\t"
45348 #else
45349         "lsr	r6, %[a], #16\n\t"
45350 #endif
45351 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45352         "lsrs	r7, %[b], #16\n\t"
45353 #else
45354         "lsr	r7, %[b], #16\n\t"
45355 #endif
45356 #ifdef WOLFSSL_KEIL
45357         "muls	r7, r6, r7\n\t"
45358 #elif defined(__clang__)
45359         "muls	r7, r6\n\t"
45360 #else
45361         "mul	r7, r6\n\t"
45362 #endif
45363 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45364         "adds	r3, r3, r7\n\t"
45365 #else
45366         "add	r3, r3, r7\n\t"
45367 #endif
45368 #ifdef WOLFSSL_KEIL
45369         "adcs	r4, r4, %[r]\n\t"
45370 #elif defined(__clang__)
45371         "adcs	r4, %[r]\n\t"
45372 #else
45373         "adc	r4, %[r]\n\t"
45374 #endif
45375         "uxth	r7, %[b]\n\t"
45376 #ifdef WOLFSSL_KEIL
45377         "muls	r6, r7, r6\n\t"
45378 #elif defined(__clang__)
45379         "muls	r6, r7\n\t"
45380 #else
45381         "mul	r6, r7\n\t"
45382 #endif
45383 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45384         "lsrs	r7, r6, #16\n\t"
45385 #else
45386         "lsr	r7, r6, #16\n\t"
45387 #endif
45388 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45389         "lsls	r6, r6, #16\n\t"
45390 #else
45391         "lsl	r6, r6, #16\n\t"
45392 #endif
45393 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45394         "adds	r5, r5, r6\n\t"
45395 #else
45396         "add	r5, r5, r6\n\t"
45397 #endif
45398 #ifdef WOLFSSL_KEIL
45399         "adcs	r3, r3, r7\n\t"
45400 #elif defined(__clang__)
45401         "adcs	r3, r7\n\t"
45402 #else
45403         "adc	r3, r7\n\t"
45404 #endif
45405 #ifdef WOLFSSL_KEIL
45406         "adcs	r4, r4, %[r]\n\t"
45407 #elif defined(__clang__)
45408         "adcs	r4, %[r]\n\t"
45409 #else
45410         "adc	r4, %[r]\n\t"
45411 #endif
45412         "mov	%[r], r8\n\t"
45413         "str	r5, [%[r], #56]\n\t"
45414         "movs	%[r], #0\n\t"
45415         "#  A[4] * B[11]\n\t"
45416         "movs	r5, #0\n\t"
45417         "mov	%[a], r9\n\t"
45418         "mov	%[b], r10\n\t"
45419         "ldr	%[a], [%[a], #16]\n\t"
45420         "ldr	%[b], [%[b], #44]\n\t"
45421         "uxth	r6, %[a]\n\t"
45422         "uxth	r7, %[b]\n\t"
45423 #ifdef WOLFSSL_KEIL
45424         "muls	r7, r6, r7\n\t"
45425 #elif defined(__clang__)
45426         "muls	r7, r6\n\t"
45427 #else
45428         "mul	r7, r6\n\t"
45429 #endif
45430 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45431         "adds	r3, r3, r7\n\t"
45432 #else
45433         "add	r3, r3, r7\n\t"
45434 #endif
45435 #ifdef WOLFSSL_KEIL
45436         "adcs	r4, r4, %[r]\n\t"
45437 #elif defined(__clang__)
45438         "adcs	r4, %[r]\n\t"
45439 #else
45440         "adc	r4, %[r]\n\t"
45441 #endif
45442 #ifdef WOLFSSL_KEIL
45443         "adcs	r5, r5, %[r]\n\t"
45444 #elif defined(__clang__)
45445         "adcs	r5, %[r]\n\t"
45446 #else
45447         "adc	r5, %[r]\n\t"
45448 #endif
45449 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45450         "lsrs	r7, %[b], #16\n\t"
45451 #else
45452         "lsr	r7, %[b], #16\n\t"
45453 #endif
45454 #ifdef WOLFSSL_KEIL
45455         "muls	r6, r7, r6\n\t"
45456 #elif defined(__clang__)
45457         "muls	r6, r7\n\t"
45458 #else
45459         "mul	r6, r7\n\t"
45460 #endif
45461 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45462         "lsrs	r7, r6, #16\n\t"
45463 #else
45464         "lsr	r7, r6, #16\n\t"
45465 #endif
45466 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45467         "lsls	r6, r6, #16\n\t"
45468 #else
45469         "lsl	r6, r6, #16\n\t"
45470 #endif
45471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45472         "adds	r3, r3, r6\n\t"
45473 #else
45474         "add	r3, r3, r6\n\t"
45475 #endif
45476 #ifdef WOLFSSL_KEIL
45477         "adcs	r4, r4, r7\n\t"
45478 #elif defined(__clang__)
45479         "adcs	r4, r7\n\t"
45480 #else
45481         "adc	r4, r7\n\t"
45482 #endif
45483 #ifdef WOLFSSL_KEIL
45484         "adcs	r5, r5, %[r]\n\t"
45485 #elif defined(__clang__)
45486         "adcs	r5, %[r]\n\t"
45487 #else
45488         "adc	r5, %[r]\n\t"
45489 #endif
45490 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45491         "lsrs	r6, %[a], #16\n\t"
45492 #else
45493         "lsr	r6, %[a], #16\n\t"
45494 #endif
45495 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45496         "lsrs	r7, %[b], #16\n\t"
45497 #else
45498         "lsr	r7, %[b], #16\n\t"
45499 #endif
45500 #ifdef WOLFSSL_KEIL
45501         "muls	r7, r6, r7\n\t"
45502 #elif defined(__clang__)
45503         "muls	r7, r6\n\t"
45504 #else
45505         "mul	r7, r6\n\t"
45506 #endif
45507 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45508         "adds	r4, r4, r7\n\t"
45509 #else
45510         "add	r4, r4, r7\n\t"
45511 #endif
45512 #ifdef WOLFSSL_KEIL
45513         "adcs	r5, r5, %[r]\n\t"
45514 #elif defined(__clang__)
45515         "adcs	r5, %[r]\n\t"
45516 #else
45517         "adc	r5, %[r]\n\t"
45518 #endif
45519         "uxth	r7, %[b]\n\t"
45520 #ifdef WOLFSSL_KEIL
45521         "muls	r6, r7, r6\n\t"
45522 #elif defined(__clang__)
45523         "muls	r6, r7\n\t"
45524 #else
45525         "mul	r6, r7\n\t"
45526 #endif
45527 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45528         "lsrs	r7, r6, #16\n\t"
45529 #else
45530         "lsr	r7, r6, #16\n\t"
45531 #endif
45532 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45533         "lsls	r6, r6, #16\n\t"
45534 #else
45535         "lsl	r6, r6, #16\n\t"
45536 #endif
45537 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45538         "adds	r3, r3, r6\n\t"
45539 #else
45540         "add	r3, r3, r6\n\t"
45541 #endif
45542 #ifdef WOLFSSL_KEIL
45543         "adcs	r4, r4, r7\n\t"
45544 #elif defined(__clang__)
45545         "adcs	r4, r7\n\t"
45546 #else
45547         "adc	r4, r7\n\t"
45548 #endif
45549 #ifdef WOLFSSL_KEIL
45550         "adcs	r5, r5, %[r]\n\t"
45551 #elif defined(__clang__)
45552         "adcs	r5, %[r]\n\t"
45553 #else
45554         "adc	r5, %[r]\n\t"
45555 #endif
45556         "#  A[5] * B[10]\n\t"
45557         "mov	%[a], r9\n\t"
45558         "mov	%[b], r10\n\t"
45559         "ldr	%[a], [%[a], #20]\n\t"
45560         "ldr	%[b], [%[b], #40]\n\t"
45561         "uxth	r6, %[a]\n\t"
45562         "uxth	r7, %[b]\n\t"
45563 #ifdef WOLFSSL_KEIL
45564         "muls	r7, r6, r7\n\t"
45565 #elif defined(__clang__)
45566         "muls	r7, r6\n\t"
45567 #else
45568         "mul	r7, r6\n\t"
45569 #endif
45570 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45571         "adds	r3, r3, r7\n\t"
45572 #else
45573         "add	r3, r3, r7\n\t"
45574 #endif
45575 #ifdef WOLFSSL_KEIL
45576         "adcs	r4, r4, %[r]\n\t"
45577 #elif defined(__clang__)
45578         "adcs	r4, %[r]\n\t"
45579 #else
45580         "adc	r4, %[r]\n\t"
45581 #endif
45582 #ifdef WOLFSSL_KEIL
45583         "adcs	r5, r5, %[r]\n\t"
45584 #elif defined(__clang__)
45585         "adcs	r5, %[r]\n\t"
45586 #else
45587         "adc	r5, %[r]\n\t"
45588 #endif
45589 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45590         "lsrs	r7, %[b], #16\n\t"
45591 #else
45592         "lsr	r7, %[b], #16\n\t"
45593 #endif
45594 #ifdef WOLFSSL_KEIL
45595         "muls	r6, r7, r6\n\t"
45596 #elif defined(__clang__)
45597         "muls	r6, r7\n\t"
45598 #else
45599         "mul	r6, r7\n\t"
45600 #endif
45601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45602         "lsrs	r7, r6, #16\n\t"
45603 #else
45604         "lsr	r7, r6, #16\n\t"
45605 #endif
45606 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45607         "lsls	r6, r6, #16\n\t"
45608 #else
45609         "lsl	r6, r6, #16\n\t"
45610 #endif
45611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45612         "adds	r3, r3, r6\n\t"
45613 #else
45614         "add	r3, r3, r6\n\t"
45615 #endif
45616 #ifdef WOLFSSL_KEIL
45617         "adcs	r4, r4, r7\n\t"
45618 #elif defined(__clang__)
45619         "adcs	r4, r7\n\t"
45620 #else
45621         "adc	r4, r7\n\t"
45622 #endif
45623 #ifdef WOLFSSL_KEIL
45624         "adcs	r5, r5, %[r]\n\t"
45625 #elif defined(__clang__)
45626         "adcs	r5, %[r]\n\t"
45627 #else
45628         "adc	r5, %[r]\n\t"
45629 #endif
45630 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45631         "lsrs	r6, %[a], #16\n\t"
45632 #else
45633         "lsr	r6, %[a], #16\n\t"
45634 #endif
45635 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45636         "lsrs	r7, %[b], #16\n\t"
45637 #else
45638         "lsr	r7, %[b], #16\n\t"
45639 #endif
45640 #ifdef WOLFSSL_KEIL
45641         "muls	r7, r6, r7\n\t"
45642 #elif defined(__clang__)
45643         "muls	r7, r6\n\t"
45644 #else
45645         "mul	r7, r6\n\t"
45646 #endif
45647 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45648         "adds	r4, r4, r7\n\t"
45649 #else
45650         "add	r4, r4, r7\n\t"
45651 #endif
45652 #ifdef WOLFSSL_KEIL
45653         "adcs	r5, r5, %[r]\n\t"
45654 #elif defined(__clang__)
45655         "adcs	r5, %[r]\n\t"
45656 #else
45657         "adc	r5, %[r]\n\t"
45658 #endif
45659         "uxth	r7, %[b]\n\t"
45660 #ifdef WOLFSSL_KEIL
45661         "muls	r6, r7, r6\n\t"
45662 #elif defined(__clang__)
45663         "muls	r6, r7\n\t"
45664 #else
45665         "mul	r6, r7\n\t"
45666 #endif
45667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45668         "lsrs	r7, r6, #16\n\t"
45669 #else
45670         "lsr	r7, r6, #16\n\t"
45671 #endif
45672 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45673         "lsls	r6, r6, #16\n\t"
45674 #else
45675         "lsl	r6, r6, #16\n\t"
45676 #endif
45677 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45678         "adds	r3, r3, r6\n\t"
45679 #else
45680         "add	r3, r3, r6\n\t"
45681 #endif
45682 #ifdef WOLFSSL_KEIL
45683         "adcs	r4, r4, r7\n\t"
45684 #elif defined(__clang__)
45685         "adcs	r4, r7\n\t"
45686 #else
45687         "adc	r4, r7\n\t"
45688 #endif
45689 #ifdef WOLFSSL_KEIL
45690         "adcs	r5, r5, %[r]\n\t"
45691 #elif defined(__clang__)
45692         "adcs	r5, %[r]\n\t"
45693 #else
45694         "adc	r5, %[r]\n\t"
45695 #endif
45696         "#  A[6] * B[9]\n\t"
45697         "mov	%[a], r9\n\t"
45698         "mov	%[b], r10\n\t"
45699         "ldr	%[a], [%[a], #24]\n\t"
45700         "ldr	%[b], [%[b], #36]\n\t"
45701         "uxth	r6, %[a]\n\t"
45702         "uxth	r7, %[b]\n\t"
45703 #ifdef WOLFSSL_KEIL
45704         "muls	r7, r6, r7\n\t"
45705 #elif defined(__clang__)
45706         "muls	r7, r6\n\t"
45707 #else
45708         "mul	r7, r6\n\t"
45709 #endif
45710 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45711         "adds	r3, r3, r7\n\t"
45712 #else
45713         "add	r3, r3, r7\n\t"
45714 #endif
45715 #ifdef WOLFSSL_KEIL
45716         "adcs	r4, r4, %[r]\n\t"
45717 #elif defined(__clang__)
45718         "adcs	r4, %[r]\n\t"
45719 #else
45720         "adc	r4, %[r]\n\t"
45721 #endif
45722 #ifdef WOLFSSL_KEIL
45723         "adcs	r5, r5, %[r]\n\t"
45724 #elif defined(__clang__)
45725         "adcs	r5, %[r]\n\t"
45726 #else
45727         "adc	r5, %[r]\n\t"
45728 #endif
45729 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45730         "lsrs	r7, %[b], #16\n\t"
45731 #else
45732         "lsr	r7, %[b], #16\n\t"
45733 #endif
45734 #ifdef WOLFSSL_KEIL
45735         "muls	r6, r7, r6\n\t"
45736 #elif defined(__clang__)
45737         "muls	r6, r7\n\t"
45738 #else
45739         "mul	r6, r7\n\t"
45740 #endif
45741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45742         "lsrs	r7, r6, #16\n\t"
45743 #else
45744         "lsr	r7, r6, #16\n\t"
45745 #endif
45746 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45747         "lsls	r6, r6, #16\n\t"
45748 #else
45749         "lsl	r6, r6, #16\n\t"
45750 #endif
45751 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45752         "adds	r3, r3, r6\n\t"
45753 #else
45754         "add	r3, r3, r6\n\t"
45755 #endif
45756 #ifdef WOLFSSL_KEIL
45757         "adcs	r4, r4, r7\n\t"
45758 #elif defined(__clang__)
45759         "adcs	r4, r7\n\t"
45760 #else
45761         "adc	r4, r7\n\t"
45762 #endif
45763 #ifdef WOLFSSL_KEIL
45764         "adcs	r5, r5, %[r]\n\t"
45765 #elif defined(__clang__)
45766         "adcs	r5, %[r]\n\t"
45767 #else
45768         "adc	r5, %[r]\n\t"
45769 #endif
45770 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45771         "lsrs	r6, %[a], #16\n\t"
45772 #else
45773         "lsr	r6, %[a], #16\n\t"
45774 #endif
45775 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45776         "lsrs	r7, %[b], #16\n\t"
45777 #else
45778         "lsr	r7, %[b], #16\n\t"
45779 #endif
45780 #ifdef WOLFSSL_KEIL
45781         "muls	r7, r6, r7\n\t"
45782 #elif defined(__clang__)
45783         "muls	r7, r6\n\t"
45784 #else
45785         "mul	r7, r6\n\t"
45786 #endif
45787 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45788         "adds	r4, r4, r7\n\t"
45789 #else
45790         "add	r4, r4, r7\n\t"
45791 #endif
45792 #ifdef WOLFSSL_KEIL
45793         "adcs	r5, r5, %[r]\n\t"
45794 #elif defined(__clang__)
45795         "adcs	r5, %[r]\n\t"
45796 #else
45797         "adc	r5, %[r]\n\t"
45798 #endif
45799         "uxth	r7, %[b]\n\t"
45800 #ifdef WOLFSSL_KEIL
45801         "muls	r6, r7, r6\n\t"
45802 #elif defined(__clang__)
45803         "muls	r6, r7\n\t"
45804 #else
45805         "mul	r6, r7\n\t"
45806 #endif
45807 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45808         "lsrs	r7, r6, #16\n\t"
45809 #else
45810         "lsr	r7, r6, #16\n\t"
45811 #endif
45812 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45813         "lsls	r6, r6, #16\n\t"
45814 #else
45815         "lsl	r6, r6, #16\n\t"
45816 #endif
45817 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45818         "adds	r3, r3, r6\n\t"
45819 #else
45820         "add	r3, r3, r6\n\t"
45821 #endif
45822 #ifdef WOLFSSL_KEIL
45823         "adcs	r4, r4, r7\n\t"
45824 #elif defined(__clang__)
45825         "adcs	r4, r7\n\t"
45826 #else
45827         "adc	r4, r7\n\t"
45828 #endif
45829 #ifdef WOLFSSL_KEIL
45830         "adcs	r5, r5, %[r]\n\t"
45831 #elif defined(__clang__)
45832         "adcs	r5, %[r]\n\t"
45833 #else
45834         "adc	r5, %[r]\n\t"
45835 #endif
45836         "#  A[7] * B[8]\n\t"
45837         "mov	%[a], r9\n\t"
45838         "mov	%[b], r10\n\t"
45839         "ldr	%[a], [%[a], #28]\n\t"
45840         "ldr	%[b], [%[b], #32]\n\t"
45841         "uxth	r6, %[a]\n\t"
45842         "uxth	r7, %[b]\n\t"
45843 #ifdef WOLFSSL_KEIL
45844         "muls	r7, r6, r7\n\t"
45845 #elif defined(__clang__)
45846         "muls	r7, r6\n\t"
45847 #else
45848         "mul	r7, r6\n\t"
45849 #endif
45850 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45851         "adds	r3, r3, r7\n\t"
45852 #else
45853         "add	r3, r3, r7\n\t"
45854 #endif
45855 #ifdef WOLFSSL_KEIL
45856         "adcs	r4, r4, %[r]\n\t"
45857 #elif defined(__clang__)
45858         "adcs	r4, %[r]\n\t"
45859 #else
45860         "adc	r4, %[r]\n\t"
45861 #endif
45862 #ifdef WOLFSSL_KEIL
45863         "adcs	r5, r5, %[r]\n\t"
45864 #elif defined(__clang__)
45865         "adcs	r5, %[r]\n\t"
45866 #else
45867         "adc	r5, %[r]\n\t"
45868 #endif
45869 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45870         "lsrs	r7, %[b], #16\n\t"
45871 #else
45872         "lsr	r7, %[b], #16\n\t"
45873 #endif
45874 #ifdef WOLFSSL_KEIL
45875         "muls	r6, r7, r6\n\t"
45876 #elif defined(__clang__)
45877         "muls	r6, r7\n\t"
45878 #else
45879         "mul	r6, r7\n\t"
45880 #endif
45881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45882         "lsrs	r7, r6, #16\n\t"
45883 #else
45884         "lsr	r7, r6, #16\n\t"
45885 #endif
45886 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45887         "lsls	r6, r6, #16\n\t"
45888 #else
45889         "lsl	r6, r6, #16\n\t"
45890 #endif
45891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45892         "adds	r3, r3, r6\n\t"
45893 #else
45894         "add	r3, r3, r6\n\t"
45895 #endif
45896 #ifdef WOLFSSL_KEIL
45897         "adcs	r4, r4, r7\n\t"
45898 #elif defined(__clang__)
45899         "adcs	r4, r7\n\t"
45900 #else
45901         "adc	r4, r7\n\t"
45902 #endif
45903 #ifdef WOLFSSL_KEIL
45904         "adcs	r5, r5, %[r]\n\t"
45905 #elif defined(__clang__)
45906         "adcs	r5, %[r]\n\t"
45907 #else
45908         "adc	r5, %[r]\n\t"
45909 #endif
45910 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45911         "lsrs	r6, %[a], #16\n\t"
45912 #else
45913         "lsr	r6, %[a], #16\n\t"
45914 #endif
45915 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45916         "lsrs	r7, %[b], #16\n\t"
45917 #else
45918         "lsr	r7, %[b], #16\n\t"
45919 #endif
45920 #ifdef WOLFSSL_KEIL
45921         "muls	r7, r6, r7\n\t"
45922 #elif defined(__clang__)
45923         "muls	r7, r6\n\t"
45924 #else
45925         "mul	r7, r6\n\t"
45926 #endif
45927 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45928         "adds	r4, r4, r7\n\t"
45929 #else
45930         "add	r4, r4, r7\n\t"
45931 #endif
45932 #ifdef WOLFSSL_KEIL
45933         "adcs	r5, r5, %[r]\n\t"
45934 #elif defined(__clang__)
45935         "adcs	r5, %[r]\n\t"
45936 #else
45937         "adc	r5, %[r]\n\t"
45938 #endif
45939         "uxth	r7, %[b]\n\t"
45940 #ifdef WOLFSSL_KEIL
45941         "muls	r6, r7, r6\n\t"
45942 #elif defined(__clang__)
45943         "muls	r6, r7\n\t"
45944 #else
45945         "mul	r6, r7\n\t"
45946 #endif
45947 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45948         "lsrs	r7, r6, #16\n\t"
45949 #else
45950         "lsr	r7, r6, #16\n\t"
45951 #endif
45952 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45953         "lsls	r6, r6, #16\n\t"
45954 #else
45955         "lsl	r6, r6, #16\n\t"
45956 #endif
45957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45958         "adds	r3, r3, r6\n\t"
45959 #else
45960         "add	r3, r3, r6\n\t"
45961 #endif
45962 #ifdef WOLFSSL_KEIL
45963         "adcs	r4, r4, r7\n\t"
45964 #elif defined(__clang__)
45965         "adcs	r4, r7\n\t"
45966 #else
45967         "adc	r4, r7\n\t"
45968 #endif
45969 #ifdef WOLFSSL_KEIL
45970         "adcs	r5, r5, %[r]\n\t"
45971 #elif defined(__clang__)
45972         "adcs	r5, %[r]\n\t"
45973 #else
45974         "adc	r5, %[r]\n\t"
45975 #endif
45976         "#  A[8] * B[7]\n\t"
45977         "mov	%[a], r9\n\t"
45978         "mov	%[b], r10\n\t"
45979         "ldr	%[a], [%[a], #32]\n\t"
45980         "ldr	%[b], [%[b], #28]\n\t"
45981         "uxth	r6, %[a]\n\t"
45982         "uxth	r7, %[b]\n\t"
45983 #ifdef WOLFSSL_KEIL
45984         "muls	r7, r6, r7\n\t"
45985 #elif defined(__clang__)
45986         "muls	r7, r6\n\t"
45987 #else
45988         "mul	r7, r6\n\t"
45989 #endif
45990 #if defined(__clang__) || defined(WOLFSSL_KEIL)
45991         "adds	r3, r3, r7\n\t"
45992 #else
45993         "add	r3, r3, r7\n\t"
45994 #endif
45995 #ifdef WOLFSSL_KEIL
45996         "adcs	r4, r4, %[r]\n\t"
45997 #elif defined(__clang__)
45998         "adcs	r4, %[r]\n\t"
45999 #else
46000         "adc	r4, %[r]\n\t"
46001 #endif
46002 #ifdef WOLFSSL_KEIL
46003         "adcs	r5, r5, %[r]\n\t"
46004 #elif defined(__clang__)
46005         "adcs	r5, %[r]\n\t"
46006 #else
46007         "adc	r5, %[r]\n\t"
46008 #endif
46009 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46010         "lsrs	r7, %[b], #16\n\t"
46011 #else
46012         "lsr	r7, %[b], #16\n\t"
46013 #endif
46014 #ifdef WOLFSSL_KEIL
46015         "muls	r6, r7, r6\n\t"
46016 #elif defined(__clang__)
46017         "muls	r6, r7\n\t"
46018 #else
46019         "mul	r6, r7\n\t"
46020 #endif
46021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46022         "lsrs	r7, r6, #16\n\t"
46023 #else
46024         "lsr	r7, r6, #16\n\t"
46025 #endif
46026 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46027         "lsls	r6, r6, #16\n\t"
46028 #else
46029         "lsl	r6, r6, #16\n\t"
46030 #endif
46031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46032         "adds	r3, r3, r6\n\t"
46033 #else
46034         "add	r3, r3, r6\n\t"
46035 #endif
46036 #ifdef WOLFSSL_KEIL
46037         "adcs	r4, r4, r7\n\t"
46038 #elif defined(__clang__)
46039         "adcs	r4, r7\n\t"
46040 #else
46041         "adc	r4, r7\n\t"
46042 #endif
46043 #ifdef WOLFSSL_KEIL
46044         "adcs	r5, r5, %[r]\n\t"
46045 #elif defined(__clang__)
46046         "adcs	r5, %[r]\n\t"
46047 #else
46048         "adc	r5, %[r]\n\t"
46049 #endif
46050 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46051         "lsrs	r6, %[a], #16\n\t"
46052 #else
46053         "lsr	r6, %[a], #16\n\t"
46054 #endif
46055 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46056         "lsrs	r7, %[b], #16\n\t"
46057 #else
46058         "lsr	r7, %[b], #16\n\t"
46059 #endif
46060 #ifdef WOLFSSL_KEIL
46061         "muls	r7, r6, r7\n\t"
46062 #elif defined(__clang__)
46063         "muls	r7, r6\n\t"
46064 #else
46065         "mul	r7, r6\n\t"
46066 #endif
46067 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46068         "adds	r4, r4, r7\n\t"
46069 #else
46070         "add	r4, r4, r7\n\t"
46071 #endif
46072 #ifdef WOLFSSL_KEIL
46073         "adcs	r5, r5, %[r]\n\t"
46074 #elif defined(__clang__)
46075         "adcs	r5, %[r]\n\t"
46076 #else
46077         "adc	r5, %[r]\n\t"
46078 #endif
46079         "uxth	r7, %[b]\n\t"
46080 #ifdef WOLFSSL_KEIL
46081         "muls	r6, r7, r6\n\t"
46082 #elif defined(__clang__)
46083         "muls	r6, r7\n\t"
46084 #else
46085         "mul	r6, r7\n\t"
46086 #endif
46087 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46088         "lsrs	r7, r6, #16\n\t"
46089 #else
46090         "lsr	r7, r6, #16\n\t"
46091 #endif
46092 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46093         "lsls	r6, r6, #16\n\t"
46094 #else
46095         "lsl	r6, r6, #16\n\t"
46096 #endif
46097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46098         "adds	r3, r3, r6\n\t"
46099 #else
46100         "add	r3, r3, r6\n\t"
46101 #endif
46102 #ifdef WOLFSSL_KEIL
46103         "adcs	r4, r4, r7\n\t"
46104 #elif defined(__clang__)
46105         "adcs	r4, r7\n\t"
46106 #else
46107         "adc	r4, r7\n\t"
46108 #endif
46109 #ifdef WOLFSSL_KEIL
46110         "adcs	r5, r5, %[r]\n\t"
46111 #elif defined(__clang__)
46112         "adcs	r5, %[r]\n\t"
46113 #else
46114         "adc	r5, %[r]\n\t"
46115 #endif
46116         "#  A[9] * B[6]\n\t"
46117         "mov	%[a], r9\n\t"
46118         "mov	%[b], r10\n\t"
46119         "ldr	%[a], [%[a], #36]\n\t"
46120         "ldr	%[b], [%[b], #24]\n\t"
46121         "uxth	r6, %[a]\n\t"
46122         "uxth	r7, %[b]\n\t"
46123 #ifdef WOLFSSL_KEIL
46124         "muls	r7, r6, r7\n\t"
46125 #elif defined(__clang__)
46126         "muls	r7, r6\n\t"
46127 #else
46128         "mul	r7, r6\n\t"
46129 #endif
46130 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46131         "adds	r3, r3, r7\n\t"
46132 #else
46133         "add	r3, r3, r7\n\t"
46134 #endif
46135 #ifdef WOLFSSL_KEIL
46136         "adcs	r4, r4, %[r]\n\t"
46137 #elif defined(__clang__)
46138         "adcs	r4, %[r]\n\t"
46139 #else
46140         "adc	r4, %[r]\n\t"
46141 #endif
46142 #ifdef WOLFSSL_KEIL
46143         "adcs	r5, r5, %[r]\n\t"
46144 #elif defined(__clang__)
46145         "adcs	r5, %[r]\n\t"
46146 #else
46147         "adc	r5, %[r]\n\t"
46148 #endif
46149 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46150         "lsrs	r7, %[b], #16\n\t"
46151 #else
46152         "lsr	r7, %[b], #16\n\t"
46153 #endif
46154 #ifdef WOLFSSL_KEIL
46155         "muls	r6, r7, r6\n\t"
46156 #elif defined(__clang__)
46157         "muls	r6, r7\n\t"
46158 #else
46159         "mul	r6, r7\n\t"
46160 #endif
46161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46162         "lsrs	r7, r6, #16\n\t"
46163 #else
46164         "lsr	r7, r6, #16\n\t"
46165 #endif
46166 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46167         "lsls	r6, r6, #16\n\t"
46168 #else
46169         "lsl	r6, r6, #16\n\t"
46170 #endif
46171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46172         "adds	r3, r3, r6\n\t"
46173 #else
46174         "add	r3, r3, r6\n\t"
46175 #endif
46176 #ifdef WOLFSSL_KEIL
46177         "adcs	r4, r4, r7\n\t"
46178 #elif defined(__clang__)
46179         "adcs	r4, r7\n\t"
46180 #else
46181         "adc	r4, r7\n\t"
46182 #endif
46183 #ifdef WOLFSSL_KEIL
46184         "adcs	r5, r5, %[r]\n\t"
46185 #elif defined(__clang__)
46186         "adcs	r5, %[r]\n\t"
46187 #else
46188         "adc	r5, %[r]\n\t"
46189 #endif
46190 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46191         "lsrs	r6, %[a], #16\n\t"
46192 #else
46193         "lsr	r6, %[a], #16\n\t"
46194 #endif
46195 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46196         "lsrs	r7, %[b], #16\n\t"
46197 #else
46198         "lsr	r7, %[b], #16\n\t"
46199 #endif
46200 #ifdef WOLFSSL_KEIL
46201         "muls	r7, r6, r7\n\t"
46202 #elif defined(__clang__)
46203         "muls	r7, r6\n\t"
46204 #else
46205         "mul	r7, r6\n\t"
46206 #endif
46207 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46208         "adds	r4, r4, r7\n\t"
46209 #else
46210         "add	r4, r4, r7\n\t"
46211 #endif
46212 #ifdef WOLFSSL_KEIL
46213         "adcs	r5, r5, %[r]\n\t"
46214 #elif defined(__clang__)
46215         "adcs	r5, %[r]\n\t"
46216 #else
46217         "adc	r5, %[r]\n\t"
46218 #endif
46219         "uxth	r7, %[b]\n\t"
46220 #ifdef WOLFSSL_KEIL
46221         "muls	r6, r7, r6\n\t"
46222 #elif defined(__clang__)
46223         "muls	r6, r7\n\t"
46224 #else
46225         "mul	r6, r7\n\t"
46226 #endif
46227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46228         "lsrs	r7, r6, #16\n\t"
46229 #else
46230         "lsr	r7, r6, #16\n\t"
46231 #endif
46232 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46233         "lsls	r6, r6, #16\n\t"
46234 #else
46235         "lsl	r6, r6, #16\n\t"
46236 #endif
46237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46238         "adds	r3, r3, r6\n\t"
46239 #else
46240         "add	r3, r3, r6\n\t"
46241 #endif
46242 #ifdef WOLFSSL_KEIL
46243         "adcs	r4, r4, r7\n\t"
46244 #elif defined(__clang__)
46245         "adcs	r4, r7\n\t"
46246 #else
46247         "adc	r4, r7\n\t"
46248 #endif
46249 #ifdef WOLFSSL_KEIL
46250         "adcs	r5, r5, %[r]\n\t"
46251 #elif defined(__clang__)
46252         "adcs	r5, %[r]\n\t"
46253 #else
46254         "adc	r5, %[r]\n\t"
46255 #endif
46256         "#  A[10] * B[5]\n\t"
46257         "mov	%[a], r9\n\t"
46258         "mov	%[b], r10\n\t"
46259         "ldr	%[a], [%[a], #40]\n\t"
46260         "ldr	%[b], [%[b], #20]\n\t"
46261         "uxth	r6, %[a]\n\t"
46262         "uxth	r7, %[b]\n\t"
46263 #ifdef WOLFSSL_KEIL
46264         "muls	r7, r6, r7\n\t"
46265 #elif defined(__clang__)
46266         "muls	r7, r6\n\t"
46267 #else
46268         "mul	r7, r6\n\t"
46269 #endif
46270 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46271         "adds	r3, r3, r7\n\t"
46272 #else
46273         "add	r3, r3, r7\n\t"
46274 #endif
46275 #ifdef WOLFSSL_KEIL
46276         "adcs	r4, r4, %[r]\n\t"
46277 #elif defined(__clang__)
46278         "adcs	r4, %[r]\n\t"
46279 #else
46280         "adc	r4, %[r]\n\t"
46281 #endif
46282 #ifdef WOLFSSL_KEIL
46283         "adcs	r5, r5, %[r]\n\t"
46284 #elif defined(__clang__)
46285         "adcs	r5, %[r]\n\t"
46286 #else
46287         "adc	r5, %[r]\n\t"
46288 #endif
46289 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46290         "lsrs	r7, %[b], #16\n\t"
46291 #else
46292         "lsr	r7, %[b], #16\n\t"
46293 #endif
46294 #ifdef WOLFSSL_KEIL
46295         "muls	r6, r7, r6\n\t"
46296 #elif defined(__clang__)
46297         "muls	r6, r7\n\t"
46298 #else
46299         "mul	r6, r7\n\t"
46300 #endif
46301 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46302         "lsrs	r7, r6, #16\n\t"
46303 #else
46304         "lsr	r7, r6, #16\n\t"
46305 #endif
46306 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46307         "lsls	r6, r6, #16\n\t"
46308 #else
46309         "lsl	r6, r6, #16\n\t"
46310 #endif
46311 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46312         "adds	r3, r3, r6\n\t"
46313 #else
46314         "add	r3, r3, r6\n\t"
46315 #endif
46316 #ifdef WOLFSSL_KEIL
46317         "adcs	r4, r4, r7\n\t"
46318 #elif defined(__clang__)
46319         "adcs	r4, r7\n\t"
46320 #else
46321         "adc	r4, r7\n\t"
46322 #endif
46323 #ifdef WOLFSSL_KEIL
46324         "adcs	r5, r5, %[r]\n\t"
46325 #elif defined(__clang__)
46326         "adcs	r5, %[r]\n\t"
46327 #else
46328         "adc	r5, %[r]\n\t"
46329 #endif
46330 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46331         "lsrs	r6, %[a], #16\n\t"
46332 #else
46333         "lsr	r6, %[a], #16\n\t"
46334 #endif
46335 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46336         "lsrs	r7, %[b], #16\n\t"
46337 #else
46338         "lsr	r7, %[b], #16\n\t"
46339 #endif
46340 #ifdef WOLFSSL_KEIL
46341         "muls	r7, r6, r7\n\t"
46342 #elif defined(__clang__)
46343         "muls	r7, r6\n\t"
46344 #else
46345         "mul	r7, r6\n\t"
46346 #endif
46347 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46348         "adds	r4, r4, r7\n\t"
46349 #else
46350         "add	r4, r4, r7\n\t"
46351 #endif
46352 #ifdef WOLFSSL_KEIL
46353         "adcs	r5, r5, %[r]\n\t"
46354 #elif defined(__clang__)
46355         "adcs	r5, %[r]\n\t"
46356 #else
46357         "adc	r5, %[r]\n\t"
46358 #endif
46359         "uxth	r7, %[b]\n\t"
46360 #ifdef WOLFSSL_KEIL
46361         "muls	r6, r7, r6\n\t"
46362 #elif defined(__clang__)
46363         "muls	r6, r7\n\t"
46364 #else
46365         "mul	r6, r7\n\t"
46366 #endif
46367 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46368         "lsrs	r7, r6, #16\n\t"
46369 #else
46370         "lsr	r7, r6, #16\n\t"
46371 #endif
46372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46373         "lsls	r6, r6, #16\n\t"
46374 #else
46375         "lsl	r6, r6, #16\n\t"
46376 #endif
46377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46378         "adds	r3, r3, r6\n\t"
46379 #else
46380         "add	r3, r3, r6\n\t"
46381 #endif
46382 #ifdef WOLFSSL_KEIL
46383         "adcs	r4, r4, r7\n\t"
46384 #elif defined(__clang__)
46385         "adcs	r4, r7\n\t"
46386 #else
46387         "adc	r4, r7\n\t"
46388 #endif
46389 #ifdef WOLFSSL_KEIL
46390         "adcs	r5, r5, %[r]\n\t"
46391 #elif defined(__clang__)
46392         "adcs	r5, %[r]\n\t"
46393 #else
46394         "adc	r5, %[r]\n\t"
46395 #endif
46396         "#  A[11] * B[4]\n\t"
46397         "mov	%[a], r9\n\t"
46398         "mov	%[b], r10\n\t"
46399         "ldr	%[a], [%[a], #44]\n\t"
46400         "ldr	%[b], [%[b], #16]\n\t"
46401         "uxth	r6, %[a]\n\t"
46402         "uxth	r7, %[b]\n\t"
46403 #ifdef WOLFSSL_KEIL
46404         "muls	r7, r6, r7\n\t"
46405 #elif defined(__clang__)
46406         "muls	r7, r6\n\t"
46407 #else
46408         "mul	r7, r6\n\t"
46409 #endif
46410 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46411         "adds	r3, r3, r7\n\t"
46412 #else
46413         "add	r3, r3, r7\n\t"
46414 #endif
46415 #ifdef WOLFSSL_KEIL
46416         "adcs	r4, r4, %[r]\n\t"
46417 #elif defined(__clang__)
46418         "adcs	r4, %[r]\n\t"
46419 #else
46420         "adc	r4, %[r]\n\t"
46421 #endif
46422 #ifdef WOLFSSL_KEIL
46423         "adcs	r5, r5, %[r]\n\t"
46424 #elif defined(__clang__)
46425         "adcs	r5, %[r]\n\t"
46426 #else
46427         "adc	r5, %[r]\n\t"
46428 #endif
46429 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46430         "lsrs	r7, %[b], #16\n\t"
46431 #else
46432         "lsr	r7, %[b], #16\n\t"
46433 #endif
46434 #ifdef WOLFSSL_KEIL
46435         "muls	r6, r7, r6\n\t"
46436 #elif defined(__clang__)
46437         "muls	r6, r7\n\t"
46438 #else
46439         "mul	r6, r7\n\t"
46440 #endif
46441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46442         "lsrs	r7, r6, #16\n\t"
46443 #else
46444         "lsr	r7, r6, #16\n\t"
46445 #endif
46446 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46447         "lsls	r6, r6, #16\n\t"
46448 #else
46449         "lsl	r6, r6, #16\n\t"
46450 #endif
46451 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46452         "adds	r3, r3, r6\n\t"
46453 #else
46454         "add	r3, r3, r6\n\t"
46455 #endif
46456 #ifdef WOLFSSL_KEIL
46457         "adcs	r4, r4, r7\n\t"
46458 #elif defined(__clang__)
46459         "adcs	r4, r7\n\t"
46460 #else
46461         "adc	r4, r7\n\t"
46462 #endif
46463 #ifdef WOLFSSL_KEIL
46464         "adcs	r5, r5, %[r]\n\t"
46465 #elif defined(__clang__)
46466         "adcs	r5, %[r]\n\t"
46467 #else
46468         "adc	r5, %[r]\n\t"
46469 #endif
46470 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46471         "lsrs	r6, %[a], #16\n\t"
46472 #else
46473         "lsr	r6, %[a], #16\n\t"
46474 #endif
46475 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46476         "lsrs	r7, %[b], #16\n\t"
46477 #else
46478         "lsr	r7, %[b], #16\n\t"
46479 #endif
46480 #ifdef WOLFSSL_KEIL
46481         "muls	r7, r6, r7\n\t"
46482 #elif defined(__clang__)
46483         "muls	r7, r6\n\t"
46484 #else
46485         "mul	r7, r6\n\t"
46486 #endif
46487 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46488         "adds	r4, r4, r7\n\t"
46489 #else
46490         "add	r4, r4, r7\n\t"
46491 #endif
46492 #ifdef WOLFSSL_KEIL
46493         "adcs	r5, r5, %[r]\n\t"
46494 #elif defined(__clang__)
46495         "adcs	r5, %[r]\n\t"
46496 #else
46497         "adc	r5, %[r]\n\t"
46498 #endif
46499         "uxth	r7, %[b]\n\t"
46500 #ifdef WOLFSSL_KEIL
46501         "muls	r6, r7, r6\n\t"
46502 #elif defined(__clang__)
46503         "muls	r6, r7\n\t"
46504 #else
46505         "mul	r6, r7\n\t"
46506 #endif
46507 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46508         "lsrs	r7, r6, #16\n\t"
46509 #else
46510         "lsr	r7, r6, #16\n\t"
46511 #endif
46512 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46513         "lsls	r6, r6, #16\n\t"
46514 #else
46515         "lsl	r6, r6, #16\n\t"
46516 #endif
46517 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46518         "adds	r3, r3, r6\n\t"
46519 #else
46520         "add	r3, r3, r6\n\t"
46521 #endif
46522 #ifdef WOLFSSL_KEIL
46523         "adcs	r4, r4, r7\n\t"
46524 #elif defined(__clang__)
46525         "adcs	r4, r7\n\t"
46526 #else
46527         "adc	r4, r7\n\t"
46528 #endif
46529 #ifdef WOLFSSL_KEIL
46530         "adcs	r5, r5, %[r]\n\t"
46531 #elif defined(__clang__)
46532         "adcs	r5, %[r]\n\t"
46533 #else
46534         "adc	r5, %[r]\n\t"
46535 #endif
46536         "mov	%[r], r8\n\t"
46537         "str	r3, [%[r], #60]\n\t"
46538         "movs	%[r], #0\n\t"
46539         "#  A[11] * B[5]\n\t"
46540         "movs	r3, #0\n\t"
46541         "mov	%[a], r9\n\t"
46542         "mov	%[b], r10\n\t"
46543         "ldr	%[a], [%[a], #44]\n\t"
46544         "ldr	%[b], [%[b], #20]\n\t"
46545         "uxth	r6, %[a]\n\t"
46546         "uxth	r7, %[b]\n\t"
46547 #ifdef WOLFSSL_KEIL
46548         "muls	r7, r6, r7\n\t"
46549 #elif defined(__clang__)
46550         "muls	r7, r6\n\t"
46551 #else
46552         "mul	r7, r6\n\t"
46553 #endif
46554 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46555         "adds	r4, r4, r7\n\t"
46556 #else
46557         "add	r4, r4, r7\n\t"
46558 #endif
46559 #ifdef WOLFSSL_KEIL
46560         "adcs	r5, r5, %[r]\n\t"
46561 #elif defined(__clang__)
46562         "adcs	r5, %[r]\n\t"
46563 #else
46564         "adc	r5, %[r]\n\t"
46565 #endif
46566 #ifdef WOLFSSL_KEIL
46567         "adcs	r3, r3, %[r]\n\t"
46568 #elif defined(__clang__)
46569         "adcs	r3, %[r]\n\t"
46570 #else
46571         "adc	r3, %[r]\n\t"
46572 #endif
46573 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46574         "lsrs	r7, %[b], #16\n\t"
46575 #else
46576         "lsr	r7, %[b], #16\n\t"
46577 #endif
46578 #ifdef WOLFSSL_KEIL
46579         "muls	r6, r7, r6\n\t"
46580 #elif defined(__clang__)
46581         "muls	r6, r7\n\t"
46582 #else
46583         "mul	r6, r7\n\t"
46584 #endif
46585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46586         "lsrs	r7, r6, #16\n\t"
46587 #else
46588         "lsr	r7, r6, #16\n\t"
46589 #endif
46590 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46591         "lsls	r6, r6, #16\n\t"
46592 #else
46593         "lsl	r6, r6, #16\n\t"
46594 #endif
46595 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46596         "adds	r4, r4, r6\n\t"
46597 #else
46598         "add	r4, r4, r6\n\t"
46599 #endif
46600 #ifdef WOLFSSL_KEIL
46601         "adcs	r5, r5, r7\n\t"
46602 #elif defined(__clang__)
46603         "adcs	r5, r7\n\t"
46604 #else
46605         "adc	r5, r7\n\t"
46606 #endif
46607 #ifdef WOLFSSL_KEIL
46608         "adcs	r3, r3, %[r]\n\t"
46609 #elif defined(__clang__)
46610         "adcs	r3, %[r]\n\t"
46611 #else
46612         "adc	r3, %[r]\n\t"
46613 #endif
46614 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46615         "lsrs	r6, %[a], #16\n\t"
46616 #else
46617         "lsr	r6, %[a], #16\n\t"
46618 #endif
46619 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46620         "lsrs	r7, %[b], #16\n\t"
46621 #else
46622         "lsr	r7, %[b], #16\n\t"
46623 #endif
46624 #ifdef WOLFSSL_KEIL
46625         "muls	r7, r6, r7\n\t"
46626 #elif defined(__clang__)
46627         "muls	r7, r6\n\t"
46628 #else
46629         "mul	r7, r6\n\t"
46630 #endif
46631 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46632         "adds	r5, r5, r7\n\t"
46633 #else
46634         "add	r5, r5, r7\n\t"
46635 #endif
46636 #ifdef WOLFSSL_KEIL
46637         "adcs	r3, r3, %[r]\n\t"
46638 #elif defined(__clang__)
46639         "adcs	r3, %[r]\n\t"
46640 #else
46641         "adc	r3, %[r]\n\t"
46642 #endif
46643         "uxth	r7, %[b]\n\t"
46644 #ifdef WOLFSSL_KEIL
46645         "muls	r6, r7, r6\n\t"
46646 #elif defined(__clang__)
46647         "muls	r6, r7\n\t"
46648 #else
46649         "mul	r6, r7\n\t"
46650 #endif
46651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46652         "lsrs	r7, r6, #16\n\t"
46653 #else
46654         "lsr	r7, r6, #16\n\t"
46655 #endif
46656 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46657         "lsls	r6, r6, #16\n\t"
46658 #else
46659         "lsl	r6, r6, #16\n\t"
46660 #endif
46661 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46662         "adds	r4, r4, r6\n\t"
46663 #else
46664         "add	r4, r4, r6\n\t"
46665 #endif
46666 #ifdef WOLFSSL_KEIL
46667         "adcs	r5, r5, r7\n\t"
46668 #elif defined(__clang__)
46669         "adcs	r5, r7\n\t"
46670 #else
46671         "adc	r5, r7\n\t"
46672 #endif
46673 #ifdef WOLFSSL_KEIL
46674         "adcs	r3, r3, %[r]\n\t"
46675 #elif defined(__clang__)
46676         "adcs	r3, %[r]\n\t"
46677 #else
46678         "adc	r3, %[r]\n\t"
46679 #endif
46680         "#  A[10] * B[6]\n\t"
46681         "mov	%[a], r9\n\t"
46682         "mov	%[b], r10\n\t"
46683         "ldr	%[a], [%[a], #40]\n\t"
46684         "ldr	%[b], [%[b], #24]\n\t"
46685         "uxth	r6, %[a]\n\t"
46686         "uxth	r7, %[b]\n\t"
46687 #ifdef WOLFSSL_KEIL
46688         "muls	r7, r6, r7\n\t"
46689 #elif defined(__clang__)
46690         "muls	r7, r6\n\t"
46691 #else
46692         "mul	r7, r6\n\t"
46693 #endif
46694 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46695         "adds	r4, r4, r7\n\t"
46696 #else
46697         "add	r4, r4, r7\n\t"
46698 #endif
46699 #ifdef WOLFSSL_KEIL
46700         "adcs	r5, r5, %[r]\n\t"
46701 #elif defined(__clang__)
46702         "adcs	r5, %[r]\n\t"
46703 #else
46704         "adc	r5, %[r]\n\t"
46705 #endif
46706 #ifdef WOLFSSL_KEIL
46707         "adcs	r3, r3, %[r]\n\t"
46708 #elif defined(__clang__)
46709         "adcs	r3, %[r]\n\t"
46710 #else
46711         "adc	r3, %[r]\n\t"
46712 #endif
46713 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46714         "lsrs	r7, %[b], #16\n\t"
46715 #else
46716         "lsr	r7, %[b], #16\n\t"
46717 #endif
46718 #ifdef WOLFSSL_KEIL
46719         "muls	r6, r7, r6\n\t"
46720 #elif defined(__clang__)
46721         "muls	r6, r7\n\t"
46722 #else
46723         "mul	r6, r7\n\t"
46724 #endif
46725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46726         "lsrs	r7, r6, #16\n\t"
46727 #else
46728         "lsr	r7, r6, #16\n\t"
46729 #endif
46730 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46731         "lsls	r6, r6, #16\n\t"
46732 #else
46733         "lsl	r6, r6, #16\n\t"
46734 #endif
46735 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46736         "adds	r4, r4, r6\n\t"
46737 #else
46738         "add	r4, r4, r6\n\t"
46739 #endif
46740 #ifdef WOLFSSL_KEIL
46741         "adcs	r5, r5, r7\n\t"
46742 #elif defined(__clang__)
46743         "adcs	r5, r7\n\t"
46744 #else
46745         "adc	r5, r7\n\t"
46746 #endif
46747 #ifdef WOLFSSL_KEIL
46748         "adcs	r3, r3, %[r]\n\t"
46749 #elif defined(__clang__)
46750         "adcs	r3, %[r]\n\t"
46751 #else
46752         "adc	r3, %[r]\n\t"
46753 #endif
46754 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46755         "lsrs	r6, %[a], #16\n\t"
46756 #else
46757         "lsr	r6, %[a], #16\n\t"
46758 #endif
46759 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46760         "lsrs	r7, %[b], #16\n\t"
46761 #else
46762         "lsr	r7, %[b], #16\n\t"
46763 #endif
46764 #ifdef WOLFSSL_KEIL
46765         "muls	r7, r6, r7\n\t"
46766 #elif defined(__clang__)
46767         "muls	r7, r6\n\t"
46768 #else
46769         "mul	r7, r6\n\t"
46770 #endif
46771 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46772         "adds	r5, r5, r7\n\t"
46773 #else
46774         "add	r5, r5, r7\n\t"
46775 #endif
46776 #ifdef WOLFSSL_KEIL
46777         "adcs	r3, r3, %[r]\n\t"
46778 #elif defined(__clang__)
46779         "adcs	r3, %[r]\n\t"
46780 #else
46781         "adc	r3, %[r]\n\t"
46782 #endif
46783         "uxth	r7, %[b]\n\t"
46784 #ifdef WOLFSSL_KEIL
46785         "muls	r6, r7, r6\n\t"
46786 #elif defined(__clang__)
46787         "muls	r6, r7\n\t"
46788 #else
46789         "mul	r6, r7\n\t"
46790 #endif
46791 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46792         "lsrs	r7, r6, #16\n\t"
46793 #else
46794         "lsr	r7, r6, #16\n\t"
46795 #endif
46796 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46797         "lsls	r6, r6, #16\n\t"
46798 #else
46799         "lsl	r6, r6, #16\n\t"
46800 #endif
46801 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46802         "adds	r4, r4, r6\n\t"
46803 #else
46804         "add	r4, r4, r6\n\t"
46805 #endif
46806 #ifdef WOLFSSL_KEIL
46807         "adcs	r5, r5, r7\n\t"
46808 #elif defined(__clang__)
46809         "adcs	r5, r7\n\t"
46810 #else
46811         "adc	r5, r7\n\t"
46812 #endif
46813 #ifdef WOLFSSL_KEIL
46814         "adcs	r3, r3, %[r]\n\t"
46815 #elif defined(__clang__)
46816         "adcs	r3, %[r]\n\t"
46817 #else
46818         "adc	r3, %[r]\n\t"
46819 #endif
46820         "#  A[9] * B[7]\n\t"
46821         "mov	%[a], r9\n\t"
46822         "mov	%[b], r10\n\t"
46823         "ldr	%[a], [%[a], #36]\n\t"
46824         "ldr	%[b], [%[b], #28]\n\t"
46825         "uxth	r6, %[a]\n\t"
46826         "uxth	r7, %[b]\n\t"
46827 #ifdef WOLFSSL_KEIL
46828         "muls	r7, r6, r7\n\t"
46829 #elif defined(__clang__)
46830         "muls	r7, r6\n\t"
46831 #else
46832         "mul	r7, r6\n\t"
46833 #endif
46834 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46835         "adds	r4, r4, r7\n\t"
46836 #else
46837         "add	r4, r4, r7\n\t"
46838 #endif
46839 #ifdef WOLFSSL_KEIL
46840         "adcs	r5, r5, %[r]\n\t"
46841 #elif defined(__clang__)
46842         "adcs	r5, %[r]\n\t"
46843 #else
46844         "adc	r5, %[r]\n\t"
46845 #endif
46846 #ifdef WOLFSSL_KEIL
46847         "adcs	r3, r3, %[r]\n\t"
46848 #elif defined(__clang__)
46849         "adcs	r3, %[r]\n\t"
46850 #else
46851         "adc	r3, %[r]\n\t"
46852 #endif
46853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46854         "lsrs	r7, %[b], #16\n\t"
46855 #else
46856         "lsr	r7, %[b], #16\n\t"
46857 #endif
46858 #ifdef WOLFSSL_KEIL
46859         "muls	r6, r7, r6\n\t"
46860 #elif defined(__clang__)
46861         "muls	r6, r7\n\t"
46862 #else
46863         "mul	r6, r7\n\t"
46864 #endif
46865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46866         "lsrs	r7, r6, #16\n\t"
46867 #else
46868         "lsr	r7, r6, #16\n\t"
46869 #endif
46870 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46871         "lsls	r6, r6, #16\n\t"
46872 #else
46873         "lsl	r6, r6, #16\n\t"
46874 #endif
46875 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46876         "adds	r4, r4, r6\n\t"
46877 #else
46878         "add	r4, r4, r6\n\t"
46879 #endif
46880 #ifdef WOLFSSL_KEIL
46881         "adcs	r5, r5, r7\n\t"
46882 #elif defined(__clang__)
46883         "adcs	r5, r7\n\t"
46884 #else
46885         "adc	r5, r7\n\t"
46886 #endif
46887 #ifdef WOLFSSL_KEIL
46888         "adcs	r3, r3, %[r]\n\t"
46889 #elif defined(__clang__)
46890         "adcs	r3, %[r]\n\t"
46891 #else
46892         "adc	r3, %[r]\n\t"
46893 #endif
46894 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46895         "lsrs	r6, %[a], #16\n\t"
46896 #else
46897         "lsr	r6, %[a], #16\n\t"
46898 #endif
46899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46900         "lsrs	r7, %[b], #16\n\t"
46901 #else
46902         "lsr	r7, %[b], #16\n\t"
46903 #endif
46904 #ifdef WOLFSSL_KEIL
46905         "muls	r7, r6, r7\n\t"
46906 #elif defined(__clang__)
46907         "muls	r7, r6\n\t"
46908 #else
46909         "mul	r7, r6\n\t"
46910 #endif
46911 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46912         "adds	r5, r5, r7\n\t"
46913 #else
46914         "add	r5, r5, r7\n\t"
46915 #endif
46916 #ifdef WOLFSSL_KEIL
46917         "adcs	r3, r3, %[r]\n\t"
46918 #elif defined(__clang__)
46919         "adcs	r3, %[r]\n\t"
46920 #else
46921         "adc	r3, %[r]\n\t"
46922 #endif
46923         "uxth	r7, %[b]\n\t"
46924 #ifdef WOLFSSL_KEIL
46925         "muls	r6, r7, r6\n\t"
46926 #elif defined(__clang__)
46927         "muls	r6, r7\n\t"
46928 #else
46929         "mul	r6, r7\n\t"
46930 #endif
46931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46932         "lsrs	r7, r6, #16\n\t"
46933 #else
46934         "lsr	r7, r6, #16\n\t"
46935 #endif
46936 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46937         "lsls	r6, r6, #16\n\t"
46938 #else
46939         "lsl	r6, r6, #16\n\t"
46940 #endif
46941 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46942         "adds	r4, r4, r6\n\t"
46943 #else
46944         "add	r4, r4, r6\n\t"
46945 #endif
46946 #ifdef WOLFSSL_KEIL
46947         "adcs	r5, r5, r7\n\t"
46948 #elif defined(__clang__)
46949         "adcs	r5, r7\n\t"
46950 #else
46951         "adc	r5, r7\n\t"
46952 #endif
46953 #ifdef WOLFSSL_KEIL
46954         "adcs	r3, r3, %[r]\n\t"
46955 #elif defined(__clang__)
46956         "adcs	r3, %[r]\n\t"
46957 #else
46958         "adc	r3, %[r]\n\t"
46959 #endif
46960         "#  A[8] * B[8]\n\t"
46961         "mov	%[a], r9\n\t"
46962         "mov	%[b], r10\n\t"
46963         "ldr	%[a], [%[a], #32]\n\t"
46964         "ldr	%[b], [%[b], #32]\n\t"
46965         "uxth	r6, %[a]\n\t"
46966         "uxth	r7, %[b]\n\t"
46967 #ifdef WOLFSSL_KEIL
46968         "muls	r7, r6, r7\n\t"
46969 #elif defined(__clang__)
46970         "muls	r7, r6\n\t"
46971 #else
46972         "mul	r7, r6\n\t"
46973 #endif
46974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46975         "adds	r4, r4, r7\n\t"
46976 #else
46977         "add	r4, r4, r7\n\t"
46978 #endif
46979 #ifdef WOLFSSL_KEIL
46980         "adcs	r5, r5, %[r]\n\t"
46981 #elif defined(__clang__)
46982         "adcs	r5, %[r]\n\t"
46983 #else
46984         "adc	r5, %[r]\n\t"
46985 #endif
46986 #ifdef WOLFSSL_KEIL
46987         "adcs	r3, r3, %[r]\n\t"
46988 #elif defined(__clang__)
46989         "adcs	r3, %[r]\n\t"
46990 #else
46991         "adc	r3, %[r]\n\t"
46992 #endif
46993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
46994         "lsrs	r7, %[b], #16\n\t"
46995 #else
46996         "lsr	r7, %[b], #16\n\t"
46997 #endif
46998 #ifdef WOLFSSL_KEIL
46999         "muls	r6, r7, r6\n\t"
47000 #elif defined(__clang__)
47001         "muls	r6, r7\n\t"
47002 #else
47003         "mul	r6, r7\n\t"
47004 #endif
47005 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47006         "lsrs	r7, r6, #16\n\t"
47007 #else
47008         "lsr	r7, r6, #16\n\t"
47009 #endif
47010 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47011         "lsls	r6, r6, #16\n\t"
47012 #else
47013         "lsl	r6, r6, #16\n\t"
47014 #endif
47015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47016         "adds	r4, r4, r6\n\t"
47017 #else
47018         "add	r4, r4, r6\n\t"
47019 #endif
47020 #ifdef WOLFSSL_KEIL
47021         "adcs	r5, r5, r7\n\t"
47022 #elif defined(__clang__)
47023         "adcs	r5, r7\n\t"
47024 #else
47025         "adc	r5, r7\n\t"
47026 #endif
47027 #ifdef WOLFSSL_KEIL
47028         "adcs	r3, r3, %[r]\n\t"
47029 #elif defined(__clang__)
47030         "adcs	r3, %[r]\n\t"
47031 #else
47032         "adc	r3, %[r]\n\t"
47033 #endif
47034 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47035         "lsrs	r6, %[a], #16\n\t"
47036 #else
47037         "lsr	r6, %[a], #16\n\t"
47038 #endif
47039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47040         "lsrs	r7, %[b], #16\n\t"
47041 #else
47042         "lsr	r7, %[b], #16\n\t"
47043 #endif
47044 #ifdef WOLFSSL_KEIL
47045         "muls	r7, r6, r7\n\t"
47046 #elif defined(__clang__)
47047         "muls	r7, r6\n\t"
47048 #else
47049         "mul	r7, r6\n\t"
47050 #endif
47051 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47052         "adds	r5, r5, r7\n\t"
47053 #else
47054         "add	r5, r5, r7\n\t"
47055 #endif
47056 #ifdef WOLFSSL_KEIL
47057         "adcs	r3, r3, %[r]\n\t"
47058 #elif defined(__clang__)
47059         "adcs	r3, %[r]\n\t"
47060 #else
47061         "adc	r3, %[r]\n\t"
47062 #endif
47063         "uxth	r7, %[b]\n\t"
47064 #ifdef WOLFSSL_KEIL
47065         "muls	r6, r7, r6\n\t"
47066 #elif defined(__clang__)
47067         "muls	r6, r7\n\t"
47068 #else
47069         "mul	r6, r7\n\t"
47070 #endif
47071 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47072         "lsrs	r7, r6, #16\n\t"
47073 #else
47074         "lsr	r7, r6, #16\n\t"
47075 #endif
47076 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47077         "lsls	r6, r6, #16\n\t"
47078 #else
47079         "lsl	r6, r6, #16\n\t"
47080 #endif
47081 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47082         "adds	r4, r4, r6\n\t"
47083 #else
47084         "add	r4, r4, r6\n\t"
47085 #endif
47086 #ifdef WOLFSSL_KEIL
47087         "adcs	r5, r5, r7\n\t"
47088 #elif defined(__clang__)
47089         "adcs	r5, r7\n\t"
47090 #else
47091         "adc	r5, r7\n\t"
47092 #endif
47093 #ifdef WOLFSSL_KEIL
47094         "adcs	r3, r3, %[r]\n\t"
47095 #elif defined(__clang__)
47096         "adcs	r3, %[r]\n\t"
47097 #else
47098         "adc	r3, %[r]\n\t"
47099 #endif
47100         "#  A[7] * B[9]\n\t"
47101         "mov	%[a], r9\n\t"
47102         "mov	%[b], r10\n\t"
47103         "ldr	%[a], [%[a], #28]\n\t"
47104         "ldr	%[b], [%[b], #36]\n\t"
47105         "uxth	r6, %[a]\n\t"
47106         "uxth	r7, %[b]\n\t"
47107 #ifdef WOLFSSL_KEIL
47108         "muls	r7, r6, r7\n\t"
47109 #elif defined(__clang__)
47110         "muls	r7, r6\n\t"
47111 #else
47112         "mul	r7, r6\n\t"
47113 #endif
47114 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47115         "adds	r4, r4, r7\n\t"
47116 #else
47117         "add	r4, r4, r7\n\t"
47118 #endif
47119 #ifdef WOLFSSL_KEIL
47120         "adcs	r5, r5, %[r]\n\t"
47121 #elif defined(__clang__)
47122         "adcs	r5, %[r]\n\t"
47123 #else
47124         "adc	r5, %[r]\n\t"
47125 #endif
47126 #ifdef WOLFSSL_KEIL
47127         "adcs	r3, r3, %[r]\n\t"
47128 #elif defined(__clang__)
47129         "adcs	r3, %[r]\n\t"
47130 #else
47131         "adc	r3, %[r]\n\t"
47132 #endif
47133 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47134         "lsrs	r7, %[b], #16\n\t"
47135 #else
47136         "lsr	r7, %[b], #16\n\t"
47137 #endif
47138 #ifdef WOLFSSL_KEIL
47139         "muls	r6, r7, r6\n\t"
47140 #elif defined(__clang__)
47141         "muls	r6, r7\n\t"
47142 #else
47143         "mul	r6, r7\n\t"
47144 #endif
47145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47146         "lsrs	r7, r6, #16\n\t"
47147 #else
47148         "lsr	r7, r6, #16\n\t"
47149 #endif
47150 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47151         "lsls	r6, r6, #16\n\t"
47152 #else
47153         "lsl	r6, r6, #16\n\t"
47154 #endif
47155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47156         "adds	r4, r4, r6\n\t"
47157 #else
47158         "add	r4, r4, r6\n\t"
47159 #endif
47160 #ifdef WOLFSSL_KEIL
47161         "adcs	r5, r5, r7\n\t"
47162 #elif defined(__clang__)
47163         "adcs	r5, r7\n\t"
47164 #else
47165         "adc	r5, r7\n\t"
47166 #endif
47167 #ifdef WOLFSSL_KEIL
47168         "adcs	r3, r3, %[r]\n\t"
47169 #elif defined(__clang__)
47170         "adcs	r3, %[r]\n\t"
47171 #else
47172         "adc	r3, %[r]\n\t"
47173 #endif
47174 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47175         "lsrs	r6, %[a], #16\n\t"
47176 #else
47177         "lsr	r6, %[a], #16\n\t"
47178 #endif
47179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47180         "lsrs	r7, %[b], #16\n\t"
47181 #else
47182         "lsr	r7, %[b], #16\n\t"
47183 #endif
47184 #ifdef WOLFSSL_KEIL
47185         "muls	r7, r6, r7\n\t"
47186 #elif defined(__clang__)
47187         "muls	r7, r6\n\t"
47188 #else
47189         "mul	r7, r6\n\t"
47190 #endif
47191 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47192         "adds	r5, r5, r7\n\t"
47193 #else
47194         "add	r5, r5, r7\n\t"
47195 #endif
47196 #ifdef WOLFSSL_KEIL
47197         "adcs	r3, r3, %[r]\n\t"
47198 #elif defined(__clang__)
47199         "adcs	r3, %[r]\n\t"
47200 #else
47201         "adc	r3, %[r]\n\t"
47202 #endif
47203         "uxth	r7, %[b]\n\t"
47204 #ifdef WOLFSSL_KEIL
47205         "muls	r6, r7, r6\n\t"
47206 #elif defined(__clang__)
47207         "muls	r6, r7\n\t"
47208 #else
47209         "mul	r6, r7\n\t"
47210 #endif
47211 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47212         "lsrs	r7, r6, #16\n\t"
47213 #else
47214         "lsr	r7, r6, #16\n\t"
47215 #endif
47216 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47217         "lsls	r6, r6, #16\n\t"
47218 #else
47219         "lsl	r6, r6, #16\n\t"
47220 #endif
47221 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47222         "adds	r4, r4, r6\n\t"
47223 #else
47224         "add	r4, r4, r6\n\t"
47225 #endif
47226 #ifdef WOLFSSL_KEIL
47227         "adcs	r5, r5, r7\n\t"
47228 #elif defined(__clang__)
47229         "adcs	r5, r7\n\t"
47230 #else
47231         "adc	r5, r7\n\t"
47232 #endif
47233 #ifdef WOLFSSL_KEIL
47234         "adcs	r3, r3, %[r]\n\t"
47235 #elif defined(__clang__)
47236         "adcs	r3, %[r]\n\t"
47237 #else
47238         "adc	r3, %[r]\n\t"
47239 #endif
47240         "#  A[6] * B[10]\n\t"
47241         "mov	%[a], r9\n\t"
47242         "mov	%[b], r10\n\t"
47243         "ldr	%[a], [%[a], #24]\n\t"
47244         "ldr	%[b], [%[b], #40]\n\t"
47245         "uxth	r6, %[a]\n\t"
47246         "uxth	r7, %[b]\n\t"
47247 #ifdef WOLFSSL_KEIL
47248         "muls	r7, r6, r7\n\t"
47249 #elif defined(__clang__)
47250         "muls	r7, r6\n\t"
47251 #else
47252         "mul	r7, r6\n\t"
47253 #endif
47254 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47255         "adds	r4, r4, r7\n\t"
47256 #else
47257         "add	r4, r4, r7\n\t"
47258 #endif
47259 #ifdef WOLFSSL_KEIL
47260         "adcs	r5, r5, %[r]\n\t"
47261 #elif defined(__clang__)
47262         "adcs	r5, %[r]\n\t"
47263 #else
47264         "adc	r5, %[r]\n\t"
47265 #endif
47266 #ifdef WOLFSSL_KEIL
47267         "adcs	r3, r3, %[r]\n\t"
47268 #elif defined(__clang__)
47269         "adcs	r3, %[r]\n\t"
47270 #else
47271         "adc	r3, %[r]\n\t"
47272 #endif
47273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47274         "lsrs	r7, %[b], #16\n\t"
47275 #else
47276         "lsr	r7, %[b], #16\n\t"
47277 #endif
47278 #ifdef WOLFSSL_KEIL
47279         "muls	r6, r7, r6\n\t"
47280 #elif defined(__clang__)
47281         "muls	r6, r7\n\t"
47282 #else
47283         "mul	r6, r7\n\t"
47284 #endif
47285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47286         "lsrs	r7, r6, #16\n\t"
47287 #else
47288         "lsr	r7, r6, #16\n\t"
47289 #endif
47290 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47291         "lsls	r6, r6, #16\n\t"
47292 #else
47293         "lsl	r6, r6, #16\n\t"
47294 #endif
47295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47296         "adds	r4, r4, r6\n\t"
47297 #else
47298         "add	r4, r4, r6\n\t"
47299 #endif
47300 #ifdef WOLFSSL_KEIL
47301         "adcs	r5, r5, r7\n\t"
47302 #elif defined(__clang__)
47303         "adcs	r5, r7\n\t"
47304 #else
47305         "adc	r5, r7\n\t"
47306 #endif
47307 #ifdef WOLFSSL_KEIL
47308         "adcs	r3, r3, %[r]\n\t"
47309 #elif defined(__clang__)
47310         "adcs	r3, %[r]\n\t"
47311 #else
47312         "adc	r3, %[r]\n\t"
47313 #endif
47314 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47315         "lsrs	r6, %[a], #16\n\t"
47316 #else
47317         "lsr	r6, %[a], #16\n\t"
47318 #endif
47319 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47320         "lsrs	r7, %[b], #16\n\t"
47321 #else
47322         "lsr	r7, %[b], #16\n\t"
47323 #endif
47324 #ifdef WOLFSSL_KEIL
47325         "muls	r7, r6, r7\n\t"
47326 #elif defined(__clang__)
47327         "muls	r7, r6\n\t"
47328 #else
47329         "mul	r7, r6\n\t"
47330 #endif
47331 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47332         "adds	r5, r5, r7\n\t"
47333 #else
47334         "add	r5, r5, r7\n\t"
47335 #endif
47336 #ifdef WOLFSSL_KEIL
47337         "adcs	r3, r3, %[r]\n\t"
47338 #elif defined(__clang__)
47339         "adcs	r3, %[r]\n\t"
47340 #else
47341         "adc	r3, %[r]\n\t"
47342 #endif
47343         "uxth	r7, %[b]\n\t"
47344 #ifdef WOLFSSL_KEIL
47345         "muls	r6, r7, r6\n\t"
47346 #elif defined(__clang__)
47347         "muls	r6, r7\n\t"
47348 #else
47349         "mul	r6, r7\n\t"
47350 #endif
47351 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47352         "lsrs	r7, r6, #16\n\t"
47353 #else
47354         "lsr	r7, r6, #16\n\t"
47355 #endif
47356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47357         "lsls	r6, r6, #16\n\t"
47358 #else
47359         "lsl	r6, r6, #16\n\t"
47360 #endif
47361 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47362         "adds	r4, r4, r6\n\t"
47363 #else
47364         "add	r4, r4, r6\n\t"
47365 #endif
47366 #ifdef WOLFSSL_KEIL
47367         "adcs	r5, r5, r7\n\t"
47368 #elif defined(__clang__)
47369         "adcs	r5, r7\n\t"
47370 #else
47371         "adc	r5, r7\n\t"
47372 #endif
47373 #ifdef WOLFSSL_KEIL
47374         "adcs	r3, r3, %[r]\n\t"
47375 #elif defined(__clang__)
47376         "adcs	r3, %[r]\n\t"
47377 #else
47378         "adc	r3, %[r]\n\t"
47379 #endif
47380         "#  A[5] * B[11]\n\t"
47381         "mov	%[a], r9\n\t"
47382         "mov	%[b], r10\n\t"
47383         "ldr	%[a], [%[a], #20]\n\t"
47384         "ldr	%[b], [%[b], #44]\n\t"
47385         "uxth	r6, %[a]\n\t"
47386         "uxth	r7, %[b]\n\t"
47387 #ifdef WOLFSSL_KEIL
47388         "muls	r7, r6, r7\n\t"
47389 #elif defined(__clang__)
47390         "muls	r7, r6\n\t"
47391 #else
47392         "mul	r7, r6\n\t"
47393 #endif
47394 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47395         "adds	r4, r4, r7\n\t"
47396 #else
47397         "add	r4, r4, r7\n\t"
47398 #endif
47399 #ifdef WOLFSSL_KEIL
47400         "adcs	r5, r5, %[r]\n\t"
47401 #elif defined(__clang__)
47402         "adcs	r5, %[r]\n\t"
47403 #else
47404         "adc	r5, %[r]\n\t"
47405 #endif
47406 #ifdef WOLFSSL_KEIL
47407         "adcs	r3, r3, %[r]\n\t"
47408 #elif defined(__clang__)
47409         "adcs	r3, %[r]\n\t"
47410 #else
47411         "adc	r3, %[r]\n\t"
47412 #endif
47413 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47414         "lsrs	r7, %[b], #16\n\t"
47415 #else
47416         "lsr	r7, %[b], #16\n\t"
47417 #endif
47418 #ifdef WOLFSSL_KEIL
47419         "muls	r6, r7, r6\n\t"
47420 #elif defined(__clang__)
47421         "muls	r6, r7\n\t"
47422 #else
47423         "mul	r6, r7\n\t"
47424 #endif
47425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47426         "lsrs	r7, r6, #16\n\t"
47427 #else
47428         "lsr	r7, r6, #16\n\t"
47429 #endif
47430 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47431         "lsls	r6, r6, #16\n\t"
47432 #else
47433         "lsl	r6, r6, #16\n\t"
47434 #endif
47435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47436         "adds	r4, r4, r6\n\t"
47437 #else
47438         "add	r4, r4, r6\n\t"
47439 #endif
47440 #ifdef WOLFSSL_KEIL
47441         "adcs	r5, r5, r7\n\t"
47442 #elif defined(__clang__)
47443         "adcs	r5, r7\n\t"
47444 #else
47445         "adc	r5, r7\n\t"
47446 #endif
47447 #ifdef WOLFSSL_KEIL
47448         "adcs	r3, r3, %[r]\n\t"
47449 #elif defined(__clang__)
47450         "adcs	r3, %[r]\n\t"
47451 #else
47452         "adc	r3, %[r]\n\t"
47453 #endif
47454 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47455         "lsrs	r6, %[a], #16\n\t"
47456 #else
47457         "lsr	r6, %[a], #16\n\t"
47458 #endif
47459 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47460         "lsrs	r7, %[b], #16\n\t"
47461 #else
47462         "lsr	r7, %[b], #16\n\t"
47463 #endif
47464 #ifdef WOLFSSL_KEIL
47465         "muls	r7, r6, r7\n\t"
47466 #elif defined(__clang__)
47467         "muls	r7, r6\n\t"
47468 #else
47469         "mul	r7, r6\n\t"
47470 #endif
47471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47472         "adds	r5, r5, r7\n\t"
47473 #else
47474         "add	r5, r5, r7\n\t"
47475 #endif
47476 #ifdef WOLFSSL_KEIL
47477         "adcs	r3, r3, %[r]\n\t"
47478 #elif defined(__clang__)
47479         "adcs	r3, %[r]\n\t"
47480 #else
47481         "adc	r3, %[r]\n\t"
47482 #endif
47483         "uxth	r7, %[b]\n\t"
47484 #ifdef WOLFSSL_KEIL
47485         "muls	r6, r7, r6\n\t"
47486 #elif defined(__clang__)
47487         "muls	r6, r7\n\t"
47488 #else
47489         "mul	r6, r7\n\t"
47490 #endif
47491 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47492         "lsrs	r7, r6, #16\n\t"
47493 #else
47494         "lsr	r7, r6, #16\n\t"
47495 #endif
47496 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47497         "lsls	r6, r6, #16\n\t"
47498 #else
47499         "lsl	r6, r6, #16\n\t"
47500 #endif
47501 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47502         "adds	r4, r4, r6\n\t"
47503 #else
47504         "add	r4, r4, r6\n\t"
47505 #endif
47506 #ifdef WOLFSSL_KEIL
47507         "adcs	r5, r5, r7\n\t"
47508 #elif defined(__clang__)
47509         "adcs	r5, r7\n\t"
47510 #else
47511         "adc	r5, r7\n\t"
47512 #endif
47513 #ifdef WOLFSSL_KEIL
47514         "adcs	r3, r3, %[r]\n\t"
47515 #elif defined(__clang__)
47516         "adcs	r3, %[r]\n\t"
47517 #else
47518         "adc	r3, %[r]\n\t"
47519 #endif
47520         "mov	%[r], r8\n\t"
47521         "str	r4, [%[r], #64]\n\t"
47522         "movs	%[r], #0\n\t"
47523         "#  A[6] * B[11]\n\t"
47524         "movs	r4, #0\n\t"
47525         "mov	%[a], r9\n\t"
47526         "mov	%[b], r10\n\t"
47527         "ldr	%[a], [%[a], #24]\n\t"
47528         "ldr	%[b], [%[b], #44]\n\t"
47529         "uxth	r6, %[a]\n\t"
47530         "uxth	r7, %[b]\n\t"
47531 #ifdef WOLFSSL_KEIL
47532         "muls	r7, r6, r7\n\t"
47533 #elif defined(__clang__)
47534         "muls	r7, r6\n\t"
47535 #else
47536         "mul	r7, r6\n\t"
47537 #endif
47538 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47539         "adds	r5, r5, r7\n\t"
47540 #else
47541         "add	r5, r5, r7\n\t"
47542 #endif
47543 #ifdef WOLFSSL_KEIL
47544         "adcs	r3, r3, %[r]\n\t"
47545 #elif defined(__clang__)
47546         "adcs	r3, %[r]\n\t"
47547 #else
47548         "adc	r3, %[r]\n\t"
47549 #endif
47550 #ifdef WOLFSSL_KEIL
47551         "adcs	r4, r4, %[r]\n\t"
47552 #elif defined(__clang__)
47553         "adcs	r4, %[r]\n\t"
47554 #else
47555         "adc	r4, %[r]\n\t"
47556 #endif
47557 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47558         "lsrs	r7, %[b], #16\n\t"
47559 #else
47560         "lsr	r7, %[b], #16\n\t"
47561 #endif
47562 #ifdef WOLFSSL_KEIL
47563         "muls	r6, r7, r6\n\t"
47564 #elif defined(__clang__)
47565         "muls	r6, r7\n\t"
47566 #else
47567         "mul	r6, r7\n\t"
47568 #endif
47569 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47570         "lsrs	r7, r6, #16\n\t"
47571 #else
47572         "lsr	r7, r6, #16\n\t"
47573 #endif
47574 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47575         "lsls	r6, r6, #16\n\t"
47576 #else
47577         "lsl	r6, r6, #16\n\t"
47578 #endif
47579 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47580         "adds	r5, r5, r6\n\t"
47581 #else
47582         "add	r5, r5, r6\n\t"
47583 #endif
47584 #ifdef WOLFSSL_KEIL
47585         "adcs	r3, r3, r7\n\t"
47586 #elif defined(__clang__)
47587         "adcs	r3, r7\n\t"
47588 #else
47589         "adc	r3, r7\n\t"
47590 #endif
47591 #ifdef WOLFSSL_KEIL
47592         "adcs	r4, r4, %[r]\n\t"
47593 #elif defined(__clang__)
47594         "adcs	r4, %[r]\n\t"
47595 #else
47596         "adc	r4, %[r]\n\t"
47597 #endif
47598 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47599         "lsrs	r6, %[a], #16\n\t"
47600 #else
47601         "lsr	r6, %[a], #16\n\t"
47602 #endif
47603 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47604         "lsrs	r7, %[b], #16\n\t"
47605 #else
47606         "lsr	r7, %[b], #16\n\t"
47607 #endif
47608 #ifdef WOLFSSL_KEIL
47609         "muls	r7, r6, r7\n\t"
47610 #elif defined(__clang__)
47611         "muls	r7, r6\n\t"
47612 #else
47613         "mul	r7, r6\n\t"
47614 #endif
47615 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47616         "adds	r3, r3, r7\n\t"
47617 #else
47618         "add	r3, r3, r7\n\t"
47619 #endif
47620 #ifdef WOLFSSL_KEIL
47621         "adcs	r4, r4, %[r]\n\t"
47622 #elif defined(__clang__)
47623         "adcs	r4, %[r]\n\t"
47624 #else
47625         "adc	r4, %[r]\n\t"
47626 #endif
47627         "uxth	r7, %[b]\n\t"
47628 #ifdef WOLFSSL_KEIL
47629         "muls	r6, r7, r6\n\t"
47630 #elif defined(__clang__)
47631         "muls	r6, r7\n\t"
47632 #else
47633         "mul	r6, r7\n\t"
47634 #endif
47635 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47636         "lsrs	r7, r6, #16\n\t"
47637 #else
47638         "lsr	r7, r6, #16\n\t"
47639 #endif
47640 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47641         "lsls	r6, r6, #16\n\t"
47642 #else
47643         "lsl	r6, r6, #16\n\t"
47644 #endif
47645 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47646         "adds	r5, r5, r6\n\t"
47647 #else
47648         "add	r5, r5, r6\n\t"
47649 #endif
47650 #ifdef WOLFSSL_KEIL
47651         "adcs	r3, r3, r7\n\t"
47652 #elif defined(__clang__)
47653         "adcs	r3, r7\n\t"
47654 #else
47655         "adc	r3, r7\n\t"
47656 #endif
47657 #ifdef WOLFSSL_KEIL
47658         "adcs	r4, r4, %[r]\n\t"
47659 #elif defined(__clang__)
47660         "adcs	r4, %[r]\n\t"
47661 #else
47662         "adc	r4, %[r]\n\t"
47663 #endif
47664         "#  A[7] * B[10]\n\t"
47665         "mov	%[a], r9\n\t"
47666         "mov	%[b], r10\n\t"
47667         "ldr	%[a], [%[a], #28]\n\t"
47668         "ldr	%[b], [%[b], #40]\n\t"
47669         "uxth	r6, %[a]\n\t"
47670         "uxth	r7, %[b]\n\t"
47671 #ifdef WOLFSSL_KEIL
47672         "muls	r7, r6, r7\n\t"
47673 #elif defined(__clang__)
47674         "muls	r7, r6\n\t"
47675 #else
47676         "mul	r7, r6\n\t"
47677 #endif
47678 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47679         "adds	r5, r5, r7\n\t"
47680 #else
47681         "add	r5, r5, r7\n\t"
47682 #endif
47683 #ifdef WOLFSSL_KEIL
47684         "adcs	r3, r3, %[r]\n\t"
47685 #elif defined(__clang__)
47686         "adcs	r3, %[r]\n\t"
47687 #else
47688         "adc	r3, %[r]\n\t"
47689 #endif
47690 #ifdef WOLFSSL_KEIL
47691         "adcs	r4, r4, %[r]\n\t"
47692 #elif defined(__clang__)
47693         "adcs	r4, %[r]\n\t"
47694 #else
47695         "adc	r4, %[r]\n\t"
47696 #endif
47697 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47698         "lsrs	r7, %[b], #16\n\t"
47699 #else
47700         "lsr	r7, %[b], #16\n\t"
47701 #endif
47702 #ifdef WOLFSSL_KEIL
47703         "muls	r6, r7, r6\n\t"
47704 #elif defined(__clang__)
47705         "muls	r6, r7\n\t"
47706 #else
47707         "mul	r6, r7\n\t"
47708 #endif
47709 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47710         "lsrs	r7, r6, #16\n\t"
47711 #else
47712         "lsr	r7, r6, #16\n\t"
47713 #endif
47714 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47715         "lsls	r6, r6, #16\n\t"
47716 #else
47717         "lsl	r6, r6, #16\n\t"
47718 #endif
47719 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47720         "adds	r5, r5, r6\n\t"
47721 #else
47722         "add	r5, r5, r6\n\t"
47723 #endif
47724 #ifdef WOLFSSL_KEIL
47725         "adcs	r3, r3, r7\n\t"
47726 #elif defined(__clang__)
47727         "adcs	r3, r7\n\t"
47728 #else
47729         "adc	r3, r7\n\t"
47730 #endif
47731 #ifdef WOLFSSL_KEIL
47732         "adcs	r4, r4, %[r]\n\t"
47733 #elif defined(__clang__)
47734         "adcs	r4, %[r]\n\t"
47735 #else
47736         "adc	r4, %[r]\n\t"
47737 #endif
47738 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47739         "lsrs	r6, %[a], #16\n\t"
47740 #else
47741         "lsr	r6, %[a], #16\n\t"
47742 #endif
47743 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47744         "lsrs	r7, %[b], #16\n\t"
47745 #else
47746         "lsr	r7, %[b], #16\n\t"
47747 #endif
47748 #ifdef WOLFSSL_KEIL
47749         "muls	r7, r6, r7\n\t"
47750 #elif defined(__clang__)
47751         "muls	r7, r6\n\t"
47752 #else
47753         "mul	r7, r6\n\t"
47754 #endif
47755 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47756         "adds	r3, r3, r7\n\t"
47757 #else
47758         "add	r3, r3, r7\n\t"
47759 #endif
47760 #ifdef WOLFSSL_KEIL
47761         "adcs	r4, r4, %[r]\n\t"
47762 #elif defined(__clang__)
47763         "adcs	r4, %[r]\n\t"
47764 #else
47765         "adc	r4, %[r]\n\t"
47766 #endif
47767         "uxth	r7, %[b]\n\t"
47768 #ifdef WOLFSSL_KEIL
47769         "muls	r6, r7, r6\n\t"
47770 #elif defined(__clang__)
47771         "muls	r6, r7\n\t"
47772 #else
47773         "mul	r6, r7\n\t"
47774 #endif
47775 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47776         "lsrs	r7, r6, #16\n\t"
47777 #else
47778         "lsr	r7, r6, #16\n\t"
47779 #endif
47780 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47781         "lsls	r6, r6, #16\n\t"
47782 #else
47783         "lsl	r6, r6, #16\n\t"
47784 #endif
47785 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47786         "adds	r5, r5, r6\n\t"
47787 #else
47788         "add	r5, r5, r6\n\t"
47789 #endif
47790 #ifdef WOLFSSL_KEIL
47791         "adcs	r3, r3, r7\n\t"
47792 #elif defined(__clang__)
47793         "adcs	r3, r7\n\t"
47794 #else
47795         "adc	r3, r7\n\t"
47796 #endif
47797 #ifdef WOLFSSL_KEIL
47798         "adcs	r4, r4, %[r]\n\t"
47799 #elif defined(__clang__)
47800         "adcs	r4, %[r]\n\t"
47801 #else
47802         "adc	r4, %[r]\n\t"
47803 #endif
47804         "#  A[8] * B[9]\n\t"
47805         "mov	%[a], r9\n\t"
47806         "mov	%[b], r10\n\t"
47807         "ldr	%[a], [%[a], #32]\n\t"
47808         "ldr	%[b], [%[b], #36]\n\t"
47809         "uxth	r6, %[a]\n\t"
47810         "uxth	r7, %[b]\n\t"
47811 #ifdef WOLFSSL_KEIL
47812         "muls	r7, r6, r7\n\t"
47813 #elif defined(__clang__)
47814         "muls	r7, r6\n\t"
47815 #else
47816         "mul	r7, r6\n\t"
47817 #endif
47818 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47819         "adds	r5, r5, r7\n\t"
47820 #else
47821         "add	r5, r5, r7\n\t"
47822 #endif
47823 #ifdef WOLFSSL_KEIL
47824         "adcs	r3, r3, %[r]\n\t"
47825 #elif defined(__clang__)
47826         "adcs	r3, %[r]\n\t"
47827 #else
47828         "adc	r3, %[r]\n\t"
47829 #endif
47830 #ifdef WOLFSSL_KEIL
47831         "adcs	r4, r4, %[r]\n\t"
47832 #elif defined(__clang__)
47833         "adcs	r4, %[r]\n\t"
47834 #else
47835         "adc	r4, %[r]\n\t"
47836 #endif
47837 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47838         "lsrs	r7, %[b], #16\n\t"
47839 #else
47840         "lsr	r7, %[b], #16\n\t"
47841 #endif
47842 #ifdef WOLFSSL_KEIL
47843         "muls	r6, r7, r6\n\t"
47844 #elif defined(__clang__)
47845         "muls	r6, r7\n\t"
47846 #else
47847         "mul	r6, r7\n\t"
47848 #endif
47849 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47850         "lsrs	r7, r6, #16\n\t"
47851 #else
47852         "lsr	r7, r6, #16\n\t"
47853 #endif
47854 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47855         "lsls	r6, r6, #16\n\t"
47856 #else
47857         "lsl	r6, r6, #16\n\t"
47858 #endif
47859 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47860         "adds	r5, r5, r6\n\t"
47861 #else
47862         "add	r5, r5, r6\n\t"
47863 #endif
47864 #ifdef WOLFSSL_KEIL
47865         "adcs	r3, r3, r7\n\t"
47866 #elif defined(__clang__)
47867         "adcs	r3, r7\n\t"
47868 #else
47869         "adc	r3, r7\n\t"
47870 #endif
47871 #ifdef WOLFSSL_KEIL
47872         "adcs	r4, r4, %[r]\n\t"
47873 #elif defined(__clang__)
47874         "adcs	r4, %[r]\n\t"
47875 #else
47876         "adc	r4, %[r]\n\t"
47877 #endif
47878 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47879         "lsrs	r6, %[a], #16\n\t"
47880 #else
47881         "lsr	r6, %[a], #16\n\t"
47882 #endif
47883 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47884         "lsrs	r7, %[b], #16\n\t"
47885 #else
47886         "lsr	r7, %[b], #16\n\t"
47887 #endif
47888 #ifdef WOLFSSL_KEIL
47889         "muls	r7, r6, r7\n\t"
47890 #elif defined(__clang__)
47891         "muls	r7, r6\n\t"
47892 #else
47893         "mul	r7, r6\n\t"
47894 #endif
47895 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47896         "adds	r3, r3, r7\n\t"
47897 #else
47898         "add	r3, r3, r7\n\t"
47899 #endif
47900 #ifdef WOLFSSL_KEIL
47901         "adcs	r4, r4, %[r]\n\t"
47902 #elif defined(__clang__)
47903         "adcs	r4, %[r]\n\t"
47904 #else
47905         "adc	r4, %[r]\n\t"
47906 #endif
47907         "uxth	r7, %[b]\n\t"
47908 #ifdef WOLFSSL_KEIL
47909         "muls	r6, r7, r6\n\t"
47910 #elif defined(__clang__)
47911         "muls	r6, r7\n\t"
47912 #else
47913         "mul	r6, r7\n\t"
47914 #endif
47915 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47916         "lsrs	r7, r6, #16\n\t"
47917 #else
47918         "lsr	r7, r6, #16\n\t"
47919 #endif
47920 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47921         "lsls	r6, r6, #16\n\t"
47922 #else
47923         "lsl	r6, r6, #16\n\t"
47924 #endif
47925 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47926         "adds	r5, r5, r6\n\t"
47927 #else
47928         "add	r5, r5, r6\n\t"
47929 #endif
47930 #ifdef WOLFSSL_KEIL
47931         "adcs	r3, r3, r7\n\t"
47932 #elif defined(__clang__)
47933         "adcs	r3, r7\n\t"
47934 #else
47935         "adc	r3, r7\n\t"
47936 #endif
47937 #ifdef WOLFSSL_KEIL
47938         "adcs	r4, r4, %[r]\n\t"
47939 #elif defined(__clang__)
47940         "adcs	r4, %[r]\n\t"
47941 #else
47942         "adc	r4, %[r]\n\t"
47943 #endif
47944         "#  A[9] * B[8]\n\t"
47945         "mov	%[a], r9\n\t"
47946         "mov	%[b], r10\n\t"
47947         "ldr	%[a], [%[a], #36]\n\t"
47948         "ldr	%[b], [%[b], #32]\n\t"
47949         "uxth	r6, %[a]\n\t"
47950         "uxth	r7, %[b]\n\t"
47951 #ifdef WOLFSSL_KEIL
47952         "muls	r7, r6, r7\n\t"
47953 #elif defined(__clang__)
47954         "muls	r7, r6\n\t"
47955 #else
47956         "mul	r7, r6\n\t"
47957 #endif
47958 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47959         "adds	r5, r5, r7\n\t"
47960 #else
47961         "add	r5, r5, r7\n\t"
47962 #endif
47963 #ifdef WOLFSSL_KEIL
47964         "adcs	r3, r3, %[r]\n\t"
47965 #elif defined(__clang__)
47966         "adcs	r3, %[r]\n\t"
47967 #else
47968         "adc	r3, %[r]\n\t"
47969 #endif
47970 #ifdef WOLFSSL_KEIL
47971         "adcs	r4, r4, %[r]\n\t"
47972 #elif defined(__clang__)
47973         "adcs	r4, %[r]\n\t"
47974 #else
47975         "adc	r4, %[r]\n\t"
47976 #endif
47977 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47978         "lsrs	r7, %[b], #16\n\t"
47979 #else
47980         "lsr	r7, %[b], #16\n\t"
47981 #endif
47982 #ifdef WOLFSSL_KEIL
47983         "muls	r6, r7, r6\n\t"
47984 #elif defined(__clang__)
47985         "muls	r6, r7\n\t"
47986 #else
47987         "mul	r6, r7\n\t"
47988 #endif
47989 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47990         "lsrs	r7, r6, #16\n\t"
47991 #else
47992         "lsr	r7, r6, #16\n\t"
47993 #endif
47994 #if defined(__clang__) || defined(WOLFSSL_KEIL)
47995         "lsls	r6, r6, #16\n\t"
47996 #else
47997         "lsl	r6, r6, #16\n\t"
47998 #endif
47999 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48000         "adds	r5, r5, r6\n\t"
48001 #else
48002         "add	r5, r5, r6\n\t"
48003 #endif
48004 #ifdef WOLFSSL_KEIL
48005         "adcs	r3, r3, r7\n\t"
48006 #elif defined(__clang__)
48007         "adcs	r3, r7\n\t"
48008 #else
48009         "adc	r3, r7\n\t"
48010 #endif
48011 #ifdef WOLFSSL_KEIL
48012         "adcs	r4, r4, %[r]\n\t"
48013 #elif defined(__clang__)
48014         "adcs	r4, %[r]\n\t"
48015 #else
48016         "adc	r4, %[r]\n\t"
48017 #endif
48018 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48019         "lsrs	r6, %[a], #16\n\t"
48020 #else
48021         "lsr	r6, %[a], #16\n\t"
48022 #endif
48023 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48024         "lsrs	r7, %[b], #16\n\t"
48025 #else
48026         "lsr	r7, %[b], #16\n\t"
48027 #endif
48028 #ifdef WOLFSSL_KEIL
48029         "muls	r7, r6, r7\n\t"
48030 #elif defined(__clang__)
48031         "muls	r7, r6\n\t"
48032 #else
48033         "mul	r7, r6\n\t"
48034 #endif
48035 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48036         "adds	r3, r3, r7\n\t"
48037 #else
48038         "add	r3, r3, r7\n\t"
48039 #endif
48040 #ifdef WOLFSSL_KEIL
48041         "adcs	r4, r4, %[r]\n\t"
48042 #elif defined(__clang__)
48043         "adcs	r4, %[r]\n\t"
48044 #else
48045         "adc	r4, %[r]\n\t"
48046 #endif
48047         "uxth	r7, %[b]\n\t"
48048 #ifdef WOLFSSL_KEIL
48049         "muls	r6, r7, r6\n\t"
48050 #elif defined(__clang__)
48051         "muls	r6, r7\n\t"
48052 #else
48053         "mul	r6, r7\n\t"
48054 #endif
48055 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48056         "lsrs	r7, r6, #16\n\t"
48057 #else
48058         "lsr	r7, r6, #16\n\t"
48059 #endif
48060 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48061         "lsls	r6, r6, #16\n\t"
48062 #else
48063         "lsl	r6, r6, #16\n\t"
48064 #endif
48065 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48066         "adds	r5, r5, r6\n\t"
48067 #else
48068         "add	r5, r5, r6\n\t"
48069 #endif
48070 #ifdef WOLFSSL_KEIL
48071         "adcs	r3, r3, r7\n\t"
48072 #elif defined(__clang__)
48073         "adcs	r3, r7\n\t"
48074 #else
48075         "adc	r3, r7\n\t"
48076 #endif
48077 #ifdef WOLFSSL_KEIL
48078         "adcs	r4, r4, %[r]\n\t"
48079 #elif defined(__clang__)
48080         "adcs	r4, %[r]\n\t"
48081 #else
48082         "adc	r4, %[r]\n\t"
48083 #endif
48084         "#  A[10] * B[7]\n\t"
48085         "mov	%[a], r9\n\t"
48086         "mov	%[b], r10\n\t"
48087         "ldr	%[a], [%[a], #40]\n\t"
48088         "ldr	%[b], [%[b], #28]\n\t"
48089         "uxth	r6, %[a]\n\t"
48090         "uxth	r7, %[b]\n\t"
48091 #ifdef WOLFSSL_KEIL
48092         "muls	r7, r6, r7\n\t"
48093 #elif defined(__clang__)
48094         "muls	r7, r6\n\t"
48095 #else
48096         "mul	r7, r6\n\t"
48097 #endif
48098 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48099         "adds	r5, r5, r7\n\t"
48100 #else
48101         "add	r5, r5, r7\n\t"
48102 #endif
48103 #ifdef WOLFSSL_KEIL
48104         "adcs	r3, r3, %[r]\n\t"
48105 #elif defined(__clang__)
48106         "adcs	r3, %[r]\n\t"
48107 #else
48108         "adc	r3, %[r]\n\t"
48109 #endif
48110 #ifdef WOLFSSL_KEIL
48111         "adcs	r4, r4, %[r]\n\t"
48112 #elif defined(__clang__)
48113         "adcs	r4, %[r]\n\t"
48114 #else
48115         "adc	r4, %[r]\n\t"
48116 #endif
48117 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48118         "lsrs	r7, %[b], #16\n\t"
48119 #else
48120         "lsr	r7, %[b], #16\n\t"
48121 #endif
48122 #ifdef WOLFSSL_KEIL
48123         "muls	r6, r7, r6\n\t"
48124 #elif defined(__clang__)
48125         "muls	r6, r7\n\t"
48126 #else
48127         "mul	r6, r7\n\t"
48128 #endif
48129 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48130         "lsrs	r7, r6, #16\n\t"
48131 #else
48132         "lsr	r7, r6, #16\n\t"
48133 #endif
48134 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48135         "lsls	r6, r6, #16\n\t"
48136 #else
48137         "lsl	r6, r6, #16\n\t"
48138 #endif
48139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48140         "adds	r5, r5, r6\n\t"
48141 #else
48142         "add	r5, r5, r6\n\t"
48143 #endif
48144 #ifdef WOLFSSL_KEIL
48145         "adcs	r3, r3, r7\n\t"
48146 #elif defined(__clang__)
48147         "adcs	r3, r7\n\t"
48148 #else
48149         "adc	r3, r7\n\t"
48150 #endif
48151 #ifdef WOLFSSL_KEIL
48152         "adcs	r4, r4, %[r]\n\t"
48153 #elif defined(__clang__)
48154         "adcs	r4, %[r]\n\t"
48155 #else
48156         "adc	r4, %[r]\n\t"
48157 #endif
48158 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48159         "lsrs	r6, %[a], #16\n\t"
48160 #else
48161         "lsr	r6, %[a], #16\n\t"
48162 #endif
48163 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48164         "lsrs	r7, %[b], #16\n\t"
48165 #else
48166         "lsr	r7, %[b], #16\n\t"
48167 #endif
48168 #ifdef WOLFSSL_KEIL
48169         "muls	r7, r6, r7\n\t"
48170 #elif defined(__clang__)
48171         "muls	r7, r6\n\t"
48172 #else
48173         "mul	r7, r6\n\t"
48174 #endif
48175 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48176         "adds	r3, r3, r7\n\t"
48177 #else
48178         "add	r3, r3, r7\n\t"
48179 #endif
48180 #ifdef WOLFSSL_KEIL
48181         "adcs	r4, r4, %[r]\n\t"
48182 #elif defined(__clang__)
48183         "adcs	r4, %[r]\n\t"
48184 #else
48185         "adc	r4, %[r]\n\t"
48186 #endif
48187         "uxth	r7, %[b]\n\t"
48188 #ifdef WOLFSSL_KEIL
48189         "muls	r6, r7, r6\n\t"
48190 #elif defined(__clang__)
48191         "muls	r6, r7\n\t"
48192 #else
48193         "mul	r6, r7\n\t"
48194 #endif
48195 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48196         "lsrs	r7, r6, #16\n\t"
48197 #else
48198         "lsr	r7, r6, #16\n\t"
48199 #endif
48200 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48201         "lsls	r6, r6, #16\n\t"
48202 #else
48203         "lsl	r6, r6, #16\n\t"
48204 #endif
48205 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48206         "adds	r5, r5, r6\n\t"
48207 #else
48208         "add	r5, r5, r6\n\t"
48209 #endif
48210 #ifdef WOLFSSL_KEIL
48211         "adcs	r3, r3, r7\n\t"
48212 #elif defined(__clang__)
48213         "adcs	r3, r7\n\t"
48214 #else
48215         "adc	r3, r7\n\t"
48216 #endif
48217 #ifdef WOLFSSL_KEIL
48218         "adcs	r4, r4, %[r]\n\t"
48219 #elif defined(__clang__)
48220         "adcs	r4, %[r]\n\t"
48221 #else
48222         "adc	r4, %[r]\n\t"
48223 #endif
48224         "#  A[11] * B[6]\n\t"
48225         "mov	%[a], r9\n\t"
48226         "mov	%[b], r10\n\t"
48227         "ldr	%[a], [%[a], #44]\n\t"
48228         "ldr	%[b], [%[b], #24]\n\t"
48229         "uxth	r6, %[a]\n\t"
48230         "uxth	r7, %[b]\n\t"
48231 #ifdef WOLFSSL_KEIL
48232         "muls	r7, r6, r7\n\t"
48233 #elif defined(__clang__)
48234         "muls	r7, r6\n\t"
48235 #else
48236         "mul	r7, r6\n\t"
48237 #endif
48238 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48239         "adds	r5, r5, r7\n\t"
48240 #else
48241         "add	r5, r5, r7\n\t"
48242 #endif
48243 #ifdef WOLFSSL_KEIL
48244         "adcs	r3, r3, %[r]\n\t"
48245 #elif defined(__clang__)
48246         "adcs	r3, %[r]\n\t"
48247 #else
48248         "adc	r3, %[r]\n\t"
48249 #endif
48250 #ifdef WOLFSSL_KEIL
48251         "adcs	r4, r4, %[r]\n\t"
48252 #elif defined(__clang__)
48253         "adcs	r4, %[r]\n\t"
48254 #else
48255         "adc	r4, %[r]\n\t"
48256 #endif
48257 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48258         "lsrs	r7, %[b], #16\n\t"
48259 #else
48260         "lsr	r7, %[b], #16\n\t"
48261 #endif
48262 #ifdef WOLFSSL_KEIL
48263         "muls	r6, r7, r6\n\t"
48264 #elif defined(__clang__)
48265         "muls	r6, r7\n\t"
48266 #else
48267         "mul	r6, r7\n\t"
48268 #endif
48269 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48270         "lsrs	r7, r6, #16\n\t"
48271 #else
48272         "lsr	r7, r6, #16\n\t"
48273 #endif
48274 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48275         "lsls	r6, r6, #16\n\t"
48276 #else
48277         "lsl	r6, r6, #16\n\t"
48278 #endif
48279 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48280         "adds	r5, r5, r6\n\t"
48281 #else
48282         "add	r5, r5, r6\n\t"
48283 #endif
48284 #ifdef WOLFSSL_KEIL
48285         "adcs	r3, r3, r7\n\t"
48286 #elif defined(__clang__)
48287         "adcs	r3, r7\n\t"
48288 #else
48289         "adc	r3, r7\n\t"
48290 #endif
48291 #ifdef WOLFSSL_KEIL
48292         "adcs	r4, r4, %[r]\n\t"
48293 #elif defined(__clang__)
48294         "adcs	r4, %[r]\n\t"
48295 #else
48296         "adc	r4, %[r]\n\t"
48297 #endif
48298 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48299         "lsrs	r6, %[a], #16\n\t"
48300 #else
48301         "lsr	r6, %[a], #16\n\t"
48302 #endif
48303 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48304         "lsrs	r7, %[b], #16\n\t"
48305 #else
48306         "lsr	r7, %[b], #16\n\t"
48307 #endif
48308 #ifdef WOLFSSL_KEIL
48309         "muls	r7, r6, r7\n\t"
48310 #elif defined(__clang__)
48311         "muls	r7, r6\n\t"
48312 #else
48313         "mul	r7, r6\n\t"
48314 #endif
48315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48316         "adds	r3, r3, r7\n\t"
48317 #else
48318         "add	r3, r3, r7\n\t"
48319 #endif
48320 #ifdef WOLFSSL_KEIL
48321         "adcs	r4, r4, %[r]\n\t"
48322 #elif defined(__clang__)
48323         "adcs	r4, %[r]\n\t"
48324 #else
48325         "adc	r4, %[r]\n\t"
48326 #endif
48327         "uxth	r7, %[b]\n\t"
48328 #ifdef WOLFSSL_KEIL
48329         "muls	r6, r7, r6\n\t"
48330 #elif defined(__clang__)
48331         "muls	r6, r7\n\t"
48332 #else
48333         "mul	r6, r7\n\t"
48334 #endif
48335 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48336         "lsrs	r7, r6, #16\n\t"
48337 #else
48338         "lsr	r7, r6, #16\n\t"
48339 #endif
48340 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48341         "lsls	r6, r6, #16\n\t"
48342 #else
48343         "lsl	r6, r6, #16\n\t"
48344 #endif
48345 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48346         "adds	r5, r5, r6\n\t"
48347 #else
48348         "add	r5, r5, r6\n\t"
48349 #endif
48350 #ifdef WOLFSSL_KEIL
48351         "adcs	r3, r3, r7\n\t"
48352 #elif defined(__clang__)
48353         "adcs	r3, r7\n\t"
48354 #else
48355         "adc	r3, r7\n\t"
48356 #endif
48357 #ifdef WOLFSSL_KEIL
48358         "adcs	r4, r4, %[r]\n\t"
48359 #elif defined(__clang__)
48360         "adcs	r4, %[r]\n\t"
48361 #else
48362         "adc	r4, %[r]\n\t"
48363 #endif
48364         "mov	%[r], r8\n\t"
48365         "str	r5, [%[r], #68]\n\t"
48366         "movs	%[r], #0\n\t"
48367         "#  A[11] * B[7]\n\t"
48368         "movs	r5, #0\n\t"
48369         "mov	%[a], r9\n\t"
48370         "mov	%[b], r10\n\t"
48371         "ldr	%[a], [%[a], #44]\n\t"
48372         "ldr	%[b], [%[b], #28]\n\t"
48373         "uxth	r6, %[a]\n\t"
48374         "uxth	r7, %[b]\n\t"
48375 #ifdef WOLFSSL_KEIL
48376         "muls	r7, r6, r7\n\t"
48377 #elif defined(__clang__)
48378         "muls	r7, r6\n\t"
48379 #else
48380         "mul	r7, r6\n\t"
48381 #endif
48382 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48383         "adds	r3, r3, r7\n\t"
48384 #else
48385         "add	r3, r3, r7\n\t"
48386 #endif
48387 #ifdef WOLFSSL_KEIL
48388         "adcs	r4, r4, %[r]\n\t"
48389 #elif defined(__clang__)
48390         "adcs	r4, %[r]\n\t"
48391 #else
48392         "adc	r4, %[r]\n\t"
48393 #endif
48394 #ifdef WOLFSSL_KEIL
48395         "adcs	r5, r5, %[r]\n\t"
48396 #elif defined(__clang__)
48397         "adcs	r5, %[r]\n\t"
48398 #else
48399         "adc	r5, %[r]\n\t"
48400 #endif
48401 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48402         "lsrs	r7, %[b], #16\n\t"
48403 #else
48404         "lsr	r7, %[b], #16\n\t"
48405 #endif
48406 #ifdef WOLFSSL_KEIL
48407         "muls	r6, r7, r6\n\t"
48408 #elif defined(__clang__)
48409         "muls	r6, r7\n\t"
48410 #else
48411         "mul	r6, r7\n\t"
48412 #endif
48413 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48414         "lsrs	r7, r6, #16\n\t"
48415 #else
48416         "lsr	r7, r6, #16\n\t"
48417 #endif
48418 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48419         "lsls	r6, r6, #16\n\t"
48420 #else
48421         "lsl	r6, r6, #16\n\t"
48422 #endif
48423 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48424         "adds	r3, r3, r6\n\t"
48425 #else
48426         "add	r3, r3, r6\n\t"
48427 #endif
48428 #ifdef WOLFSSL_KEIL
48429         "adcs	r4, r4, r7\n\t"
48430 #elif defined(__clang__)
48431         "adcs	r4, r7\n\t"
48432 #else
48433         "adc	r4, r7\n\t"
48434 #endif
48435 #ifdef WOLFSSL_KEIL
48436         "adcs	r5, r5, %[r]\n\t"
48437 #elif defined(__clang__)
48438         "adcs	r5, %[r]\n\t"
48439 #else
48440         "adc	r5, %[r]\n\t"
48441 #endif
48442 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48443         "lsrs	r6, %[a], #16\n\t"
48444 #else
48445         "lsr	r6, %[a], #16\n\t"
48446 #endif
48447 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48448         "lsrs	r7, %[b], #16\n\t"
48449 #else
48450         "lsr	r7, %[b], #16\n\t"
48451 #endif
48452 #ifdef WOLFSSL_KEIL
48453         "muls	r7, r6, r7\n\t"
48454 #elif defined(__clang__)
48455         "muls	r7, r6\n\t"
48456 #else
48457         "mul	r7, r6\n\t"
48458 #endif
48459 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48460         "adds	r4, r4, r7\n\t"
48461 #else
48462         "add	r4, r4, r7\n\t"
48463 #endif
48464 #ifdef WOLFSSL_KEIL
48465         "adcs	r5, r5, %[r]\n\t"
48466 #elif defined(__clang__)
48467         "adcs	r5, %[r]\n\t"
48468 #else
48469         "adc	r5, %[r]\n\t"
48470 #endif
48471         "uxth	r7, %[b]\n\t"
48472 #ifdef WOLFSSL_KEIL
48473         "muls	r6, r7, r6\n\t"
48474 #elif defined(__clang__)
48475         "muls	r6, r7\n\t"
48476 #else
48477         "mul	r6, r7\n\t"
48478 #endif
48479 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48480         "lsrs	r7, r6, #16\n\t"
48481 #else
48482         "lsr	r7, r6, #16\n\t"
48483 #endif
48484 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48485         "lsls	r6, r6, #16\n\t"
48486 #else
48487         "lsl	r6, r6, #16\n\t"
48488 #endif
48489 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48490         "adds	r3, r3, r6\n\t"
48491 #else
48492         "add	r3, r3, r6\n\t"
48493 #endif
48494 #ifdef WOLFSSL_KEIL
48495         "adcs	r4, r4, r7\n\t"
48496 #elif defined(__clang__)
48497         "adcs	r4, r7\n\t"
48498 #else
48499         "adc	r4, r7\n\t"
48500 #endif
48501 #ifdef WOLFSSL_KEIL
48502         "adcs	r5, r5, %[r]\n\t"
48503 #elif defined(__clang__)
48504         "adcs	r5, %[r]\n\t"
48505 #else
48506         "adc	r5, %[r]\n\t"
48507 #endif
48508         "#  A[10] * B[8]\n\t"
48509         "mov	%[a], r9\n\t"
48510         "mov	%[b], r10\n\t"
48511         "ldr	%[a], [%[a], #40]\n\t"
48512         "ldr	%[b], [%[b], #32]\n\t"
48513         "uxth	r6, %[a]\n\t"
48514         "uxth	r7, %[b]\n\t"
48515 #ifdef WOLFSSL_KEIL
48516         "muls	r7, r6, r7\n\t"
48517 #elif defined(__clang__)
48518         "muls	r7, r6\n\t"
48519 #else
48520         "mul	r7, r6\n\t"
48521 #endif
48522 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48523         "adds	r3, r3, r7\n\t"
48524 #else
48525         "add	r3, r3, r7\n\t"
48526 #endif
48527 #ifdef WOLFSSL_KEIL
48528         "adcs	r4, r4, %[r]\n\t"
48529 #elif defined(__clang__)
48530         "adcs	r4, %[r]\n\t"
48531 #else
48532         "adc	r4, %[r]\n\t"
48533 #endif
48534 #ifdef WOLFSSL_KEIL
48535         "adcs	r5, r5, %[r]\n\t"
48536 #elif defined(__clang__)
48537         "adcs	r5, %[r]\n\t"
48538 #else
48539         "adc	r5, %[r]\n\t"
48540 #endif
48541 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48542         "lsrs	r7, %[b], #16\n\t"
48543 #else
48544         "lsr	r7, %[b], #16\n\t"
48545 #endif
48546 #ifdef WOLFSSL_KEIL
48547         "muls	r6, r7, r6\n\t"
48548 #elif defined(__clang__)
48549         "muls	r6, r7\n\t"
48550 #else
48551         "mul	r6, r7\n\t"
48552 #endif
48553 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48554         "lsrs	r7, r6, #16\n\t"
48555 #else
48556         "lsr	r7, r6, #16\n\t"
48557 #endif
48558 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48559         "lsls	r6, r6, #16\n\t"
48560 #else
48561         "lsl	r6, r6, #16\n\t"
48562 #endif
48563 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48564         "adds	r3, r3, r6\n\t"
48565 #else
48566         "add	r3, r3, r6\n\t"
48567 #endif
48568 #ifdef WOLFSSL_KEIL
48569         "adcs	r4, r4, r7\n\t"
48570 #elif defined(__clang__)
48571         "adcs	r4, r7\n\t"
48572 #else
48573         "adc	r4, r7\n\t"
48574 #endif
48575 #ifdef WOLFSSL_KEIL
48576         "adcs	r5, r5, %[r]\n\t"
48577 #elif defined(__clang__)
48578         "adcs	r5, %[r]\n\t"
48579 #else
48580         "adc	r5, %[r]\n\t"
48581 #endif
48582 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48583         "lsrs	r6, %[a], #16\n\t"
48584 #else
48585         "lsr	r6, %[a], #16\n\t"
48586 #endif
48587 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48588         "lsrs	r7, %[b], #16\n\t"
48589 #else
48590         "lsr	r7, %[b], #16\n\t"
48591 #endif
48592 #ifdef WOLFSSL_KEIL
48593         "muls	r7, r6, r7\n\t"
48594 #elif defined(__clang__)
48595         "muls	r7, r6\n\t"
48596 #else
48597         "mul	r7, r6\n\t"
48598 #endif
48599 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48600         "adds	r4, r4, r7\n\t"
48601 #else
48602         "add	r4, r4, r7\n\t"
48603 #endif
48604 #ifdef WOLFSSL_KEIL
48605         "adcs	r5, r5, %[r]\n\t"
48606 #elif defined(__clang__)
48607         "adcs	r5, %[r]\n\t"
48608 #else
48609         "adc	r5, %[r]\n\t"
48610 #endif
48611         "uxth	r7, %[b]\n\t"
48612 #ifdef WOLFSSL_KEIL
48613         "muls	r6, r7, r6\n\t"
48614 #elif defined(__clang__)
48615         "muls	r6, r7\n\t"
48616 #else
48617         "mul	r6, r7\n\t"
48618 #endif
48619 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48620         "lsrs	r7, r6, #16\n\t"
48621 #else
48622         "lsr	r7, r6, #16\n\t"
48623 #endif
48624 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48625         "lsls	r6, r6, #16\n\t"
48626 #else
48627         "lsl	r6, r6, #16\n\t"
48628 #endif
48629 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48630         "adds	r3, r3, r6\n\t"
48631 #else
48632         "add	r3, r3, r6\n\t"
48633 #endif
48634 #ifdef WOLFSSL_KEIL
48635         "adcs	r4, r4, r7\n\t"
48636 #elif defined(__clang__)
48637         "adcs	r4, r7\n\t"
48638 #else
48639         "adc	r4, r7\n\t"
48640 #endif
48641 #ifdef WOLFSSL_KEIL
48642         "adcs	r5, r5, %[r]\n\t"
48643 #elif defined(__clang__)
48644         "adcs	r5, %[r]\n\t"
48645 #else
48646         "adc	r5, %[r]\n\t"
48647 #endif
48648         "#  A[9] * B[9]\n\t"
48649         "mov	%[a], r9\n\t"
48650         "mov	%[b], r10\n\t"
48651         "ldr	%[a], [%[a], #36]\n\t"
48652         "ldr	%[b], [%[b], #36]\n\t"
48653         "uxth	r6, %[a]\n\t"
48654         "uxth	r7, %[b]\n\t"
48655 #ifdef WOLFSSL_KEIL
48656         "muls	r7, r6, r7\n\t"
48657 #elif defined(__clang__)
48658         "muls	r7, r6\n\t"
48659 #else
48660         "mul	r7, r6\n\t"
48661 #endif
48662 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48663         "adds	r3, r3, r7\n\t"
48664 #else
48665         "add	r3, r3, r7\n\t"
48666 #endif
48667 #ifdef WOLFSSL_KEIL
48668         "adcs	r4, r4, %[r]\n\t"
48669 #elif defined(__clang__)
48670         "adcs	r4, %[r]\n\t"
48671 #else
48672         "adc	r4, %[r]\n\t"
48673 #endif
48674 #ifdef WOLFSSL_KEIL
48675         "adcs	r5, r5, %[r]\n\t"
48676 #elif defined(__clang__)
48677         "adcs	r5, %[r]\n\t"
48678 #else
48679         "adc	r5, %[r]\n\t"
48680 #endif
48681 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48682         "lsrs	r7, %[b], #16\n\t"
48683 #else
48684         "lsr	r7, %[b], #16\n\t"
48685 #endif
48686 #ifdef WOLFSSL_KEIL
48687         "muls	r6, r7, r6\n\t"
48688 #elif defined(__clang__)
48689         "muls	r6, r7\n\t"
48690 #else
48691         "mul	r6, r7\n\t"
48692 #endif
48693 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48694         "lsrs	r7, r6, #16\n\t"
48695 #else
48696         "lsr	r7, r6, #16\n\t"
48697 #endif
48698 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48699         "lsls	r6, r6, #16\n\t"
48700 #else
48701         "lsl	r6, r6, #16\n\t"
48702 #endif
48703 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48704         "adds	r3, r3, r6\n\t"
48705 #else
48706         "add	r3, r3, r6\n\t"
48707 #endif
48708 #ifdef WOLFSSL_KEIL
48709         "adcs	r4, r4, r7\n\t"
48710 #elif defined(__clang__)
48711         "adcs	r4, r7\n\t"
48712 #else
48713         "adc	r4, r7\n\t"
48714 #endif
48715 #ifdef WOLFSSL_KEIL
48716         "adcs	r5, r5, %[r]\n\t"
48717 #elif defined(__clang__)
48718         "adcs	r5, %[r]\n\t"
48719 #else
48720         "adc	r5, %[r]\n\t"
48721 #endif
48722 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48723         "lsrs	r6, %[a], #16\n\t"
48724 #else
48725         "lsr	r6, %[a], #16\n\t"
48726 #endif
48727 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48728         "lsrs	r7, %[b], #16\n\t"
48729 #else
48730         "lsr	r7, %[b], #16\n\t"
48731 #endif
48732 #ifdef WOLFSSL_KEIL
48733         "muls	r7, r6, r7\n\t"
48734 #elif defined(__clang__)
48735         "muls	r7, r6\n\t"
48736 #else
48737         "mul	r7, r6\n\t"
48738 #endif
48739 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48740         "adds	r4, r4, r7\n\t"
48741 #else
48742         "add	r4, r4, r7\n\t"
48743 #endif
48744 #ifdef WOLFSSL_KEIL
48745         "adcs	r5, r5, %[r]\n\t"
48746 #elif defined(__clang__)
48747         "adcs	r5, %[r]\n\t"
48748 #else
48749         "adc	r5, %[r]\n\t"
48750 #endif
48751         "uxth	r7, %[b]\n\t"
48752 #ifdef WOLFSSL_KEIL
48753         "muls	r6, r7, r6\n\t"
48754 #elif defined(__clang__)
48755         "muls	r6, r7\n\t"
48756 #else
48757         "mul	r6, r7\n\t"
48758 #endif
48759 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48760         "lsrs	r7, r6, #16\n\t"
48761 #else
48762         "lsr	r7, r6, #16\n\t"
48763 #endif
48764 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48765         "lsls	r6, r6, #16\n\t"
48766 #else
48767         "lsl	r6, r6, #16\n\t"
48768 #endif
48769 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48770         "adds	r3, r3, r6\n\t"
48771 #else
48772         "add	r3, r3, r6\n\t"
48773 #endif
48774 #ifdef WOLFSSL_KEIL
48775         "adcs	r4, r4, r7\n\t"
48776 #elif defined(__clang__)
48777         "adcs	r4, r7\n\t"
48778 #else
48779         "adc	r4, r7\n\t"
48780 #endif
48781 #ifdef WOLFSSL_KEIL
48782         "adcs	r5, r5, %[r]\n\t"
48783 #elif defined(__clang__)
48784         "adcs	r5, %[r]\n\t"
48785 #else
48786         "adc	r5, %[r]\n\t"
48787 #endif
48788         "#  A[8] * B[10]\n\t"
48789         "mov	%[a], r9\n\t"
48790         "mov	%[b], r10\n\t"
48791         "ldr	%[a], [%[a], #32]\n\t"
48792         "ldr	%[b], [%[b], #40]\n\t"
48793         "uxth	r6, %[a]\n\t"
48794         "uxth	r7, %[b]\n\t"
48795 #ifdef WOLFSSL_KEIL
48796         "muls	r7, r6, r7\n\t"
48797 #elif defined(__clang__)
48798         "muls	r7, r6\n\t"
48799 #else
48800         "mul	r7, r6\n\t"
48801 #endif
48802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48803         "adds	r3, r3, r7\n\t"
48804 #else
48805         "add	r3, r3, r7\n\t"
48806 #endif
48807 #ifdef WOLFSSL_KEIL
48808         "adcs	r4, r4, %[r]\n\t"
48809 #elif defined(__clang__)
48810         "adcs	r4, %[r]\n\t"
48811 #else
48812         "adc	r4, %[r]\n\t"
48813 #endif
48814 #ifdef WOLFSSL_KEIL
48815         "adcs	r5, r5, %[r]\n\t"
48816 #elif defined(__clang__)
48817         "adcs	r5, %[r]\n\t"
48818 #else
48819         "adc	r5, %[r]\n\t"
48820 #endif
48821 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48822         "lsrs	r7, %[b], #16\n\t"
48823 #else
48824         "lsr	r7, %[b], #16\n\t"
48825 #endif
48826 #ifdef WOLFSSL_KEIL
48827         "muls	r6, r7, r6\n\t"
48828 #elif defined(__clang__)
48829         "muls	r6, r7\n\t"
48830 #else
48831         "mul	r6, r7\n\t"
48832 #endif
48833 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48834         "lsrs	r7, r6, #16\n\t"
48835 #else
48836         "lsr	r7, r6, #16\n\t"
48837 #endif
48838 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48839         "lsls	r6, r6, #16\n\t"
48840 #else
48841         "lsl	r6, r6, #16\n\t"
48842 #endif
48843 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48844         "adds	r3, r3, r6\n\t"
48845 #else
48846         "add	r3, r3, r6\n\t"
48847 #endif
48848 #ifdef WOLFSSL_KEIL
48849         "adcs	r4, r4, r7\n\t"
48850 #elif defined(__clang__)
48851         "adcs	r4, r7\n\t"
48852 #else
48853         "adc	r4, r7\n\t"
48854 #endif
48855 #ifdef WOLFSSL_KEIL
48856         "adcs	r5, r5, %[r]\n\t"
48857 #elif defined(__clang__)
48858         "adcs	r5, %[r]\n\t"
48859 #else
48860         "adc	r5, %[r]\n\t"
48861 #endif
48862 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48863         "lsrs	r6, %[a], #16\n\t"
48864 #else
48865         "lsr	r6, %[a], #16\n\t"
48866 #endif
48867 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48868         "lsrs	r7, %[b], #16\n\t"
48869 #else
48870         "lsr	r7, %[b], #16\n\t"
48871 #endif
48872 #ifdef WOLFSSL_KEIL
48873         "muls	r7, r6, r7\n\t"
48874 #elif defined(__clang__)
48875         "muls	r7, r6\n\t"
48876 #else
48877         "mul	r7, r6\n\t"
48878 #endif
48879 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48880         "adds	r4, r4, r7\n\t"
48881 #else
48882         "add	r4, r4, r7\n\t"
48883 #endif
48884 #ifdef WOLFSSL_KEIL
48885         "adcs	r5, r5, %[r]\n\t"
48886 #elif defined(__clang__)
48887         "adcs	r5, %[r]\n\t"
48888 #else
48889         "adc	r5, %[r]\n\t"
48890 #endif
48891         "uxth	r7, %[b]\n\t"
48892 #ifdef WOLFSSL_KEIL
48893         "muls	r6, r7, r6\n\t"
48894 #elif defined(__clang__)
48895         "muls	r6, r7\n\t"
48896 #else
48897         "mul	r6, r7\n\t"
48898 #endif
48899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48900         "lsrs	r7, r6, #16\n\t"
48901 #else
48902         "lsr	r7, r6, #16\n\t"
48903 #endif
48904 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48905         "lsls	r6, r6, #16\n\t"
48906 #else
48907         "lsl	r6, r6, #16\n\t"
48908 #endif
48909 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48910         "adds	r3, r3, r6\n\t"
48911 #else
48912         "add	r3, r3, r6\n\t"
48913 #endif
48914 #ifdef WOLFSSL_KEIL
48915         "adcs	r4, r4, r7\n\t"
48916 #elif defined(__clang__)
48917         "adcs	r4, r7\n\t"
48918 #else
48919         "adc	r4, r7\n\t"
48920 #endif
48921 #ifdef WOLFSSL_KEIL
48922         "adcs	r5, r5, %[r]\n\t"
48923 #elif defined(__clang__)
48924         "adcs	r5, %[r]\n\t"
48925 #else
48926         "adc	r5, %[r]\n\t"
48927 #endif
48928         "#  A[7] * B[11]\n\t"
48929         "mov	%[a], r9\n\t"
48930         "mov	%[b], r10\n\t"
48931         "ldr	%[a], [%[a], #28]\n\t"
48932         "ldr	%[b], [%[b], #44]\n\t"
48933         "uxth	r6, %[a]\n\t"
48934         "uxth	r7, %[b]\n\t"
48935 #ifdef WOLFSSL_KEIL
48936         "muls	r7, r6, r7\n\t"
48937 #elif defined(__clang__)
48938         "muls	r7, r6\n\t"
48939 #else
48940         "mul	r7, r6\n\t"
48941 #endif
48942 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48943         "adds	r3, r3, r7\n\t"
48944 #else
48945         "add	r3, r3, r7\n\t"
48946 #endif
48947 #ifdef WOLFSSL_KEIL
48948         "adcs	r4, r4, %[r]\n\t"
48949 #elif defined(__clang__)
48950         "adcs	r4, %[r]\n\t"
48951 #else
48952         "adc	r4, %[r]\n\t"
48953 #endif
48954 #ifdef WOLFSSL_KEIL
48955         "adcs	r5, r5, %[r]\n\t"
48956 #elif defined(__clang__)
48957         "adcs	r5, %[r]\n\t"
48958 #else
48959         "adc	r5, %[r]\n\t"
48960 #endif
48961 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48962         "lsrs	r7, %[b], #16\n\t"
48963 #else
48964         "lsr	r7, %[b], #16\n\t"
48965 #endif
48966 #ifdef WOLFSSL_KEIL
48967         "muls	r6, r7, r6\n\t"
48968 #elif defined(__clang__)
48969         "muls	r6, r7\n\t"
48970 #else
48971         "mul	r6, r7\n\t"
48972 #endif
48973 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48974         "lsrs	r7, r6, #16\n\t"
48975 #else
48976         "lsr	r7, r6, #16\n\t"
48977 #endif
48978 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48979         "lsls	r6, r6, #16\n\t"
48980 #else
48981         "lsl	r6, r6, #16\n\t"
48982 #endif
48983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
48984         "adds	r3, r3, r6\n\t"
48985 #else
48986         "add	r3, r3, r6\n\t"
48987 #endif
48988 #ifdef WOLFSSL_KEIL
48989         "adcs	r4, r4, r7\n\t"
48990 #elif defined(__clang__)
48991         "adcs	r4, r7\n\t"
48992 #else
48993         "adc	r4, r7\n\t"
48994 #endif
48995 #ifdef WOLFSSL_KEIL
48996         "adcs	r5, r5, %[r]\n\t"
48997 #elif defined(__clang__)
48998         "adcs	r5, %[r]\n\t"
48999 #else
49000         "adc	r5, %[r]\n\t"
49001 #endif
49002 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49003         "lsrs	r6, %[a], #16\n\t"
49004 #else
49005         "lsr	r6, %[a], #16\n\t"
49006 #endif
49007 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49008         "lsrs	r7, %[b], #16\n\t"
49009 #else
49010         "lsr	r7, %[b], #16\n\t"
49011 #endif
49012 #ifdef WOLFSSL_KEIL
49013         "muls	r7, r6, r7\n\t"
49014 #elif defined(__clang__)
49015         "muls	r7, r6\n\t"
49016 #else
49017         "mul	r7, r6\n\t"
49018 #endif
49019 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49020         "adds	r4, r4, r7\n\t"
49021 #else
49022         "add	r4, r4, r7\n\t"
49023 #endif
49024 #ifdef WOLFSSL_KEIL
49025         "adcs	r5, r5, %[r]\n\t"
49026 #elif defined(__clang__)
49027         "adcs	r5, %[r]\n\t"
49028 #else
49029         "adc	r5, %[r]\n\t"
49030 #endif
49031         "uxth	r7, %[b]\n\t"
49032 #ifdef WOLFSSL_KEIL
49033         "muls	r6, r7, r6\n\t"
49034 #elif defined(__clang__)
49035         "muls	r6, r7\n\t"
49036 #else
49037         "mul	r6, r7\n\t"
49038 #endif
49039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49040         "lsrs	r7, r6, #16\n\t"
49041 #else
49042         "lsr	r7, r6, #16\n\t"
49043 #endif
49044 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49045         "lsls	r6, r6, #16\n\t"
49046 #else
49047         "lsl	r6, r6, #16\n\t"
49048 #endif
49049 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49050         "adds	r3, r3, r6\n\t"
49051 #else
49052         "add	r3, r3, r6\n\t"
49053 #endif
49054 #ifdef WOLFSSL_KEIL
49055         "adcs	r4, r4, r7\n\t"
49056 #elif defined(__clang__)
49057         "adcs	r4, r7\n\t"
49058 #else
49059         "adc	r4, r7\n\t"
49060 #endif
49061 #ifdef WOLFSSL_KEIL
49062         "adcs	r5, r5, %[r]\n\t"
49063 #elif defined(__clang__)
49064         "adcs	r5, %[r]\n\t"
49065 #else
49066         "adc	r5, %[r]\n\t"
49067 #endif
49068         "mov	%[r], r8\n\t"
49069         "str	r3, [%[r], #72]\n\t"
49070         "movs	%[r], #0\n\t"
49071         "#  A[8] * B[11]\n\t"
49072         "movs	r3, #0\n\t"
49073         "mov	%[a], r9\n\t"
49074         "mov	%[b], r10\n\t"
49075         "ldr	%[a], [%[a], #32]\n\t"
49076         "ldr	%[b], [%[b], #44]\n\t"
49077         "uxth	r6, %[a]\n\t"
49078         "uxth	r7, %[b]\n\t"
49079 #ifdef WOLFSSL_KEIL
49080         "muls	r7, r6, r7\n\t"
49081 #elif defined(__clang__)
49082         "muls	r7, r6\n\t"
49083 #else
49084         "mul	r7, r6\n\t"
49085 #endif
49086 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49087         "adds	r4, r4, r7\n\t"
49088 #else
49089         "add	r4, r4, r7\n\t"
49090 #endif
49091 #ifdef WOLFSSL_KEIL
49092         "adcs	r5, r5, %[r]\n\t"
49093 #elif defined(__clang__)
49094         "adcs	r5, %[r]\n\t"
49095 #else
49096         "adc	r5, %[r]\n\t"
49097 #endif
49098 #ifdef WOLFSSL_KEIL
49099         "adcs	r3, r3, %[r]\n\t"
49100 #elif defined(__clang__)
49101         "adcs	r3, %[r]\n\t"
49102 #else
49103         "adc	r3, %[r]\n\t"
49104 #endif
49105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49106         "lsrs	r7, %[b], #16\n\t"
49107 #else
49108         "lsr	r7, %[b], #16\n\t"
49109 #endif
49110 #ifdef WOLFSSL_KEIL
49111         "muls	r6, r7, r6\n\t"
49112 #elif defined(__clang__)
49113         "muls	r6, r7\n\t"
49114 #else
49115         "mul	r6, r7\n\t"
49116 #endif
49117 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49118         "lsrs	r7, r6, #16\n\t"
49119 #else
49120         "lsr	r7, r6, #16\n\t"
49121 #endif
49122 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49123         "lsls	r6, r6, #16\n\t"
49124 #else
49125         "lsl	r6, r6, #16\n\t"
49126 #endif
49127 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49128         "adds	r4, r4, r6\n\t"
49129 #else
49130         "add	r4, r4, r6\n\t"
49131 #endif
49132 #ifdef WOLFSSL_KEIL
49133         "adcs	r5, r5, r7\n\t"
49134 #elif defined(__clang__)
49135         "adcs	r5, r7\n\t"
49136 #else
49137         "adc	r5, r7\n\t"
49138 #endif
49139 #ifdef WOLFSSL_KEIL
49140         "adcs	r3, r3, %[r]\n\t"
49141 #elif defined(__clang__)
49142         "adcs	r3, %[r]\n\t"
49143 #else
49144         "adc	r3, %[r]\n\t"
49145 #endif
49146 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49147         "lsrs	r6, %[a], #16\n\t"
49148 #else
49149         "lsr	r6, %[a], #16\n\t"
49150 #endif
49151 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49152         "lsrs	r7, %[b], #16\n\t"
49153 #else
49154         "lsr	r7, %[b], #16\n\t"
49155 #endif
49156 #ifdef WOLFSSL_KEIL
49157         "muls	r7, r6, r7\n\t"
49158 #elif defined(__clang__)
49159         "muls	r7, r6\n\t"
49160 #else
49161         "mul	r7, r6\n\t"
49162 #endif
49163 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49164         "adds	r5, r5, r7\n\t"
49165 #else
49166         "add	r5, r5, r7\n\t"
49167 #endif
49168 #ifdef WOLFSSL_KEIL
49169         "adcs	r3, r3, %[r]\n\t"
49170 #elif defined(__clang__)
49171         "adcs	r3, %[r]\n\t"
49172 #else
49173         "adc	r3, %[r]\n\t"
49174 #endif
49175         "uxth	r7, %[b]\n\t"
49176 #ifdef WOLFSSL_KEIL
49177         "muls	r6, r7, r6\n\t"
49178 #elif defined(__clang__)
49179         "muls	r6, r7\n\t"
49180 #else
49181         "mul	r6, r7\n\t"
49182 #endif
49183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49184         "lsrs	r7, r6, #16\n\t"
49185 #else
49186         "lsr	r7, r6, #16\n\t"
49187 #endif
49188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49189         "lsls	r6, r6, #16\n\t"
49190 #else
49191         "lsl	r6, r6, #16\n\t"
49192 #endif
49193 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49194         "adds	r4, r4, r6\n\t"
49195 #else
49196         "add	r4, r4, r6\n\t"
49197 #endif
49198 #ifdef WOLFSSL_KEIL
49199         "adcs	r5, r5, r7\n\t"
49200 #elif defined(__clang__)
49201         "adcs	r5, r7\n\t"
49202 #else
49203         "adc	r5, r7\n\t"
49204 #endif
49205 #ifdef WOLFSSL_KEIL
49206         "adcs	r3, r3, %[r]\n\t"
49207 #elif defined(__clang__)
49208         "adcs	r3, %[r]\n\t"
49209 #else
49210         "adc	r3, %[r]\n\t"
49211 #endif
49212         "#  A[9] * B[10]\n\t"
49213         "mov	%[a], r9\n\t"
49214         "mov	%[b], r10\n\t"
49215         "ldr	%[a], [%[a], #36]\n\t"
49216         "ldr	%[b], [%[b], #40]\n\t"
49217         "uxth	r6, %[a]\n\t"
49218         "uxth	r7, %[b]\n\t"
49219 #ifdef WOLFSSL_KEIL
49220         "muls	r7, r6, r7\n\t"
49221 #elif defined(__clang__)
49222         "muls	r7, r6\n\t"
49223 #else
49224         "mul	r7, r6\n\t"
49225 #endif
49226 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49227         "adds	r4, r4, r7\n\t"
49228 #else
49229         "add	r4, r4, r7\n\t"
49230 #endif
49231 #ifdef WOLFSSL_KEIL
49232         "adcs	r5, r5, %[r]\n\t"
49233 #elif defined(__clang__)
49234         "adcs	r5, %[r]\n\t"
49235 #else
49236         "adc	r5, %[r]\n\t"
49237 #endif
49238 #ifdef WOLFSSL_KEIL
49239         "adcs	r3, r3, %[r]\n\t"
49240 #elif defined(__clang__)
49241         "adcs	r3, %[r]\n\t"
49242 #else
49243         "adc	r3, %[r]\n\t"
49244 #endif
49245 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49246         "lsrs	r7, %[b], #16\n\t"
49247 #else
49248         "lsr	r7, %[b], #16\n\t"
49249 #endif
49250 #ifdef WOLFSSL_KEIL
49251         "muls	r6, r7, r6\n\t"
49252 #elif defined(__clang__)
49253         "muls	r6, r7\n\t"
49254 #else
49255         "mul	r6, r7\n\t"
49256 #endif
49257 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49258         "lsrs	r7, r6, #16\n\t"
49259 #else
49260         "lsr	r7, r6, #16\n\t"
49261 #endif
49262 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49263         "lsls	r6, r6, #16\n\t"
49264 #else
49265         "lsl	r6, r6, #16\n\t"
49266 #endif
49267 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49268         "adds	r4, r4, r6\n\t"
49269 #else
49270         "add	r4, r4, r6\n\t"
49271 #endif
49272 #ifdef WOLFSSL_KEIL
49273         "adcs	r5, r5, r7\n\t"
49274 #elif defined(__clang__)
49275         "adcs	r5, r7\n\t"
49276 #else
49277         "adc	r5, r7\n\t"
49278 #endif
49279 #ifdef WOLFSSL_KEIL
49280         "adcs	r3, r3, %[r]\n\t"
49281 #elif defined(__clang__)
49282         "adcs	r3, %[r]\n\t"
49283 #else
49284         "adc	r3, %[r]\n\t"
49285 #endif
49286 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49287         "lsrs	r6, %[a], #16\n\t"
49288 #else
49289         "lsr	r6, %[a], #16\n\t"
49290 #endif
49291 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49292         "lsrs	r7, %[b], #16\n\t"
49293 #else
49294         "lsr	r7, %[b], #16\n\t"
49295 #endif
49296 #ifdef WOLFSSL_KEIL
49297         "muls	r7, r6, r7\n\t"
49298 #elif defined(__clang__)
49299         "muls	r7, r6\n\t"
49300 #else
49301         "mul	r7, r6\n\t"
49302 #endif
49303 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49304         "adds	r5, r5, r7\n\t"
49305 #else
49306         "add	r5, r5, r7\n\t"
49307 #endif
49308 #ifdef WOLFSSL_KEIL
49309         "adcs	r3, r3, %[r]\n\t"
49310 #elif defined(__clang__)
49311         "adcs	r3, %[r]\n\t"
49312 #else
49313         "adc	r3, %[r]\n\t"
49314 #endif
49315         "uxth	r7, %[b]\n\t"
49316 #ifdef WOLFSSL_KEIL
49317         "muls	r6, r7, r6\n\t"
49318 #elif defined(__clang__)
49319         "muls	r6, r7\n\t"
49320 #else
49321         "mul	r6, r7\n\t"
49322 #endif
49323 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49324         "lsrs	r7, r6, #16\n\t"
49325 #else
49326         "lsr	r7, r6, #16\n\t"
49327 #endif
49328 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49329         "lsls	r6, r6, #16\n\t"
49330 #else
49331         "lsl	r6, r6, #16\n\t"
49332 #endif
49333 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49334         "adds	r4, r4, r6\n\t"
49335 #else
49336         "add	r4, r4, r6\n\t"
49337 #endif
49338 #ifdef WOLFSSL_KEIL
49339         "adcs	r5, r5, r7\n\t"
49340 #elif defined(__clang__)
49341         "adcs	r5, r7\n\t"
49342 #else
49343         "adc	r5, r7\n\t"
49344 #endif
49345 #ifdef WOLFSSL_KEIL
49346         "adcs	r3, r3, %[r]\n\t"
49347 #elif defined(__clang__)
49348         "adcs	r3, %[r]\n\t"
49349 #else
49350         "adc	r3, %[r]\n\t"
49351 #endif
49352         "#  A[10] * B[9]\n\t"
49353         "mov	%[a], r9\n\t"
49354         "mov	%[b], r10\n\t"
49355         "ldr	%[a], [%[a], #40]\n\t"
49356         "ldr	%[b], [%[b], #36]\n\t"
49357         "uxth	r6, %[a]\n\t"
49358         "uxth	r7, %[b]\n\t"
49359 #ifdef WOLFSSL_KEIL
49360         "muls	r7, r6, r7\n\t"
49361 #elif defined(__clang__)
49362         "muls	r7, r6\n\t"
49363 #else
49364         "mul	r7, r6\n\t"
49365 #endif
49366 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49367         "adds	r4, r4, r7\n\t"
49368 #else
49369         "add	r4, r4, r7\n\t"
49370 #endif
49371 #ifdef WOLFSSL_KEIL
49372         "adcs	r5, r5, %[r]\n\t"
49373 #elif defined(__clang__)
49374         "adcs	r5, %[r]\n\t"
49375 #else
49376         "adc	r5, %[r]\n\t"
49377 #endif
49378 #ifdef WOLFSSL_KEIL
49379         "adcs	r3, r3, %[r]\n\t"
49380 #elif defined(__clang__)
49381         "adcs	r3, %[r]\n\t"
49382 #else
49383         "adc	r3, %[r]\n\t"
49384 #endif
49385 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49386         "lsrs	r7, %[b], #16\n\t"
49387 #else
49388         "lsr	r7, %[b], #16\n\t"
49389 #endif
49390 #ifdef WOLFSSL_KEIL
49391         "muls	r6, r7, r6\n\t"
49392 #elif defined(__clang__)
49393         "muls	r6, r7\n\t"
49394 #else
49395         "mul	r6, r7\n\t"
49396 #endif
49397 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49398         "lsrs	r7, r6, #16\n\t"
49399 #else
49400         "lsr	r7, r6, #16\n\t"
49401 #endif
49402 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49403         "lsls	r6, r6, #16\n\t"
49404 #else
49405         "lsl	r6, r6, #16\n\t"
49406 #endif
49407 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49408         "adds	r4, r4, r6\n\t"
49409 #else
49410         "add	r4, r4, r6\n\t"
49411 #endif
49412 #ifdef WOLFSSL_KEIL
49413         "adcs	r5, r5, r7\n\t"
49414 #elif defined(__clang__)
49415         "adcs	r5, r7\n\t"
49416 #else
49417         "adc	r5, r7\n\t"
49418 #endif
49419 #ifdef WOLFSSL_KEIL
49420         "adcs	r3, r3, %[r]\n\t"
49421 #elif defined(__clang__)
49422         "adcs	r3, %[r]\n\t"
49423 #else
49424         "adc	r3, %[r]\n\t"
49425 #endif
49426 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49427         "lsrs	r6, %[a], #16\n\t"
49428 #else
49429         "lsr	r6, %[a], #16\n\t"
49430 #endif
49431 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49432         "lsrs	r7, %[b], #16\n\t"
49433 #else
49434         "lsr	r7, %[b], #16\n\t"
49435 #endif
49436 #ifdef WOLFSSL_KEIL
49437         "muls	r7, r6, r7\n\t"
49438 #elif defined(__clang__)
49439         "muls	r7, r6\n\t"
49440 #else
49441         "mul	r7, r6\n\t"
49442 #endif
49443 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49444         "adds	r5, r5, r7\n\t"
49445 #else
49446         "add	r5, r5, r7\n\t"
49447 #endif
49448 #ifdef WOLFSSL_KEIL
49449         "adcs	r3, r3, %[r]\n\t"
49450 #elif defined(__clang__)
49451         "adcs	r3, %[r]\n\t"
49452 #else
49453         "adc	r3, %[r]\n\t"
49454 #endif
49455         "uxth	r7, %[b]\n\t"
49456 #ifdef WOLFSSL_KEIL
49457         "muls	r6, r7, r6\n\t"
49458 #elif defined(__clang__)
49459         "muls	r6, r7\n\t"
49460 #else
49461         "mul	r6, r7\n\t"
49462 #endif
49463 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49464         "lsrs	r7, r6, #16\n\t"
49465 #else
49466         "lsr	r7, r6, #16\n\t"
49467 #endif
49468 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49469         "lsls	r6, r6, #16\n\t"
49470 #else
49471         "lsl	r6, r6, #16\n\t"
49472 #endif
49473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49474         "adds	r4, r4, r6\n\t"
49475 #else
49476         "add	r4, r4, r6\n\t"
49477 #endif
49478 #ifdef WOLFSSL_KEIL
49479         "adcs	r5, r5, r7\n\t"
49480 #elif defined(__clang__)
49481         "adcs	r5, r7\n\t"
49482 #else
49483         "adc	r5, r7\n\t"
49484 #endif
49485 #ifdef WOLFSSL_KEIL
49486         "adcs	r3, r3, %[r]\n\t"
49487 #elif defined(__clang__)
49488         "adcs	r3, %[r]\n\t"
49489 #else
49490         "adc	r3, %[r]\n\t"
49491 #endif
49492         "#  A[11] * B[8]\n\t"
49493         "mov	%[a], r9\n\t"
49494         "mov	%[b], r10\n\t"
49495         "ldr	%[a], [%[a], #44]\n\t"
49496         "ldr	%[b], [%[b], #32]\n\t"
49497         "uxth	r6, %[a]\n\t"
49498         "uxth	r7, %[b]\n\t"
49499 #ifdef WOLFSSL_KEIL
49500         "muls	r7, r6, r7\n\t"
49501 #elif defined(__clang__)
49502         "muls	r7, r6\n\t"
49503 #else
49504         "mul	r7, r6\n\t"
49505 #endif
49506 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49507         "adds	r4, r4, r7\n\t"
49508 #else
49509         "add	r4, r4, r7\n\t"
49510 #endif
49511 #ifdef WOLFSSL_KEIL
49512         "adcs	r5, r5, %[r]\n\t"
49513 #elif defined(__clang__)
49514         "adcs	r5, %[r]\n\t"
49515 #else
49516         "adc	r5, %[r]\n\t"
49517 #endif
49518 #ifdef WOLFSSL_KEIL
49519         "adcs	r3, r3, %[r]\n\t"
49520 #elif defined(__clang__)
49521         "adcs	r3, %[r]\n\t"
49522 #else
49523         "adc	r3, %[r]\n\t"
49524 #endif
49525 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49526         "lsrs	r7, %[b], #16\n\t"
49527 #else
49528         "lsr	r7, %[b], #16\n\t"
49529 #endif
49530 #ifdef WOLFSSL_KEIL
49531         "muls	r6, r7, r6\n\t"
49532 #elif defined(__clang__)
49533         "muls	r6, r7\n\t"
49534 #else
49535         "mul	r6, r7\n\t"
49536 #endif
49537 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49538         "lsrs	r7, r6, #16\n\t"
49539 #else
49540         "lsr	r7, r6, #16\n\t"
49541 #endif
49542 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49543         "lsls	r6, r6, #16\n\t"
49544 #else
49545         "lsl	r6, r6, #16\n\t"
49546 #endif
49547 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49548         "adds	r4, r4, r6\n\t"
49549 #else
49550         "add	r4, r4, r6\n\t"
49551 #endif
49552 #ifdef WOLFSSL_KEIL
49553         "adcs	r5, r5, r7\n\t"
49554 #elif defined(__clang__)
49555         "adcs	r5, r7\n\t"
49556 #else
49557         "adc	r5, r7\n\t"
49558 #endif
49559 #ifdef WOLFSSL_KEIL
49560         "adcs	r3, r3, %[r]\n\t"
49561 #elif defined(__clang__)
49562         "adcs	r3, %[r]\n\t"
49563 #else
49564         "adc	r3, %[r]\n\t"
49565 #endif
49566 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49567         "lsrs	r6, %[a], #16\n\t"
49568 #else
49569         "lsr	r6, %[a], #16\n\t"
49570 #endif
49571 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49572         "lsrs	r7, %[b], #16\n\t"
49573 #else
49574         "lsr	r7, %[b], #16\n\t"
49575 #endif
49576 #ifdef WOLFSSL_KEIL
49577         "muls	r7, r6, r7\n\t"
49578 #elif defined(__clang__)
49579         "muls	r7, r6\n\t"
49580 #else
49581         "mul	r7, r6\n\t"
49582 #endif
49583 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49584         "adds	r5, r5, r7\n\t"
49585 #else
49586         "add	r5, r5, r7\n\t"
49587 #endif
49588 #ifdef WOLFSSL_KEIL
49589         "adcs	r3, r3, %[r]\n\t"
49590 #elif defined(__clang__)
49591         "adcs	r3, %[r]\n\t"
49592 #else
49593         "adc	r3, %[r]\n\t"
49594 #endif
49595         "uxth	r7, %[b]\n\t"
49596 #ifdef WOLFSSL_KEIL
49597         "muls	r6, r7, r6\n\t"
49598 #elif defined(__clang__)
49599         "muls	r6, r7\n\t"
49600 #else
49601         "mul	r6, r7\n\t"
49602 #endif
49603 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49604         "lsrs	r7, r6, #16\n\t"
49605 #else
49606         "lsr	r7, r6, #16\n\t"
49607 #endif
49608 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49609         "lsls	r6, r6, #16\n\t"
49610 #else
49611         "lsl	r6, r6, #16\n\t"
49612 #endif
49613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49614         "adds	r4, r4, r6\n\t"
49615 #else
49616         "add	r4, r4, r6\n\t"
49617 #endif
49618 #ifdef WOLFSSL_KEIL
49619         "adcs	r5, r5, r7\n\t"
49620 #elif defined(__clang__)
49621         "adcs	r5, r7\n\t"
49622 #else
49623         "adc	r5, r7\n\t"
49624 #endif
49625 #ifdef WOLFSSL_KEIL
49626         "adcs	r3, r3, %[r]\n\t"
49627 #elif defined(__clang__)
49628         "adcs	r3, %[r]\n\t"
49629 #else
49630         "adc	r3, %[r]\n\t"
49631 #endif
49632         "mov	%[r], r8\n\t"
49633         "str	r4, [%[r], #76]\n\t"
49634         "movs	%[r], #0\n\t"
49635         "#  A[11] * B[9]\n\t"
49636         "movs	r4, #0\n\t"
49637         "mov	%[a], r9\n\t"
49638         "mov	%[b], r10\n\t"
49639         "ldr	%[a], [%[a], #44]\n\t"
49640         "ldr	%[b], [%[b], #36]\n\t"
49641         "uxth	r6, %[a]\n\t"
49642         "uxth	r7, %[b]\n\t"
49643 #ifdef WOLFSSL_KEIL
49644         "muls	r7, r6, r7\n\t"
49645 #elif defined(__clang__)
49646         "muls	r7, r6\n\t"
49647 #else
49648         "mul	r7, r6\n\t"
49649 #endif
49650 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49651         "adds	r5, r5, r7\n\t"
49652 #else
49653         "add	r5, r5, r7\n\t"
49654 #endif
49655 #ifdef WOLFSSL_KEIL
49656         "adcs	r3, r3, %[r]\n\t"
49657 #elif defined(__clang__)
49658         "adcs	r3, %[r]\n\t"
49659 #else
49660         "adc	r3, %[r]\n\t"
49661 #endif
49662 #ifdef WOLFSSL_KEIL
49663         "adcs	r4, r4, %[r]\n\t"
49664 #elif defined(__clang__)
49665         "adcs	r4, %[r]\n\t"
49666 #else
49667         "adc	r4, %[r]\n\t"
49668 #endif
49669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49670         "lsrs	r7, %[b], #16\n\t"
49671 #else
49672         "lsr	r7, %[b], #16\n\t"
49673 #endif
49674 #ifdef WOLFSSL_KEIL
49675         "muls	r6, r7, r6\n\t"
49676 #elif defined(__clang__)
49677         "muls	r6, r7\n\t"
49678 #else
49679         "mul	r6, r7\n\t"
49680 #endif
49681 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49682         "lsrs	r7, r6, #16\n\t"
49683 #else
49684         "lsr	r7, r6, #16\n\t"
49685 #endif
49686 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49687         "lsls	r6, r6, #16\n\t"
49688 #else
49689         "lsl	r6, r6, #16\n\t"
49690 #endif
49691 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49692         "adds	r5, r5, r6\n\t"
49693 #else
49694         "add	r5, r5, r6\n\t"
49695 #endif
49696 #ifdef WOLFSSL_KEIL
49697         "adcs	r3, r3, r7\n\t"
49698 #elif defined(__clang__)
49699         "adcs	r3, r7\n\t"
49700 #else
49701         "adc	r3, r7\n\t"
49702 #endif
49703 #ifdef WOLFSSL_KEIL
49704         "adcs	r4, r4, %[r]\n\t"
49705 #elif defined(__clang__)
49706         "adcs	r4, %[r]\n\t"
49707 #else
49708         "adc	r4, %[r]\n\t"
49709 #endif
49710 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49711         "lsrs	r6, %[a], #16\n\t"
49712 #else
49713         "lsr	r6, %[a], #16\n\t"
49714 #endif
49715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49716         "lsrs	r7, %[b], #16\n\t"
49717 #else
49718         "lsr	r7, %[b], #16\n\t"
49719 #endif
49720 #ifdef WOLFSSL_KEIL
49721         "muls	r7, r6, r7\n\t"
49722 #elif defined(__clang__)
49723         "muls	r7, r6\n\t"
49724 #else
49725         "mul	r7, r6\n\t"
49726 #endif
49727 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49728         "adds	r3, r3, r7\n\t"
49729 #else
49730         "add	r3, r3, r7\n\t"
49731 #endif
49732 #ifdef WOLFSSL_KEIL
49733         "adcs	r4, r4, %[r]\n\t"
49734 #elif defined(__clang__)
49735         "adcs	r4, %[r]\n\t"
49736 #else
49737         "adc	r4, %[r]\n\t"
49738 #endif
49739         "uxth	r7, %[b]\n\t"
49740 #ifdef WOLFSSL_KEIL
49741         "muls	r6, r7, r6\n\t"
49742 #elif defined(__clang__)
49743         "muls	r6, r7\n\t"
49744 #else
49745         "mul	r6, r7\n\t"
49746 #endif
49747 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49748         "lsrs	r7, r6, #16\n\t"
49749 #else
49750         "lsr	r7, r6, #16\n\t"
49751 #endif
49752 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49753         "lsls	r6, r6, #16\n\t"
49754 #else
49755         "lsl	r6, r6, #16\n\t"
49756 #endif
49757 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49758         "adds	r5, r5, r6\n\t"
49759 #else
49760         "add	r5, r5, r6\n\t"
49761 #endif
49762 #ifdef WOLFSSL_KEIL
49763         "adcs	r3, r3, r7\n\t"
49764 #elif defined(__clang__)
49765         "adcs	r3, r7\n\t"
49766 #else
49767         "adc	r3, r7\n\t"
49768 #endif
49769 #ifdef WOLFSSL_KEIL
49770         "adcs	r4, r4, %[r]\n\t"
49771 #elif defined(__clang__)
49772         "adcs	r4, %[r]\n\t"
49773 #else
49774         "adc	r4, %[r]\n\t"
49775 #endif
49776         "#  A[10] * B[10]\n\t"
49777         "mov	%[a], r9\n\t"
49778         "mov	%[b], r10\n\t"
49779         "ldr	%[a], [%[a], #40]\n\t"
49780         "ldr	%[b], [%[b], #40]\n\t"
49781         "uxth	r6, %[a]\n\t"
49782         "uxth	r7, %[b]\n\t"
49783 #ifdef WOLFSSL_KEIL
49784         "muls	r7, r6, r7\n\t"
49785 #elif defined(__clang__)
49786         "muls	r7, r6\n\t"
49787 #else
49788         "mul	r7, r6\n\t"
49789 #endif
49790 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49791         "adds	r5, r5, r7\n\t"
49792 #else
49793         "add	r5, r5, r7\n\t"
49794 #endif
49795 #ifdef WOLFSSL_KEIL
49796         "adcs	r3, r3, %[r]\n\t"
49797 #elif defined(__clang__)
49798         "adcs	r3, %[r]\n\t"
49799 #else
49800         "adc	r3, %[r]\n\t"
49801 #endif
49802 #ifdef WOLFSSL_KEIL
49803         "adcs	r4, r4, %[r]\n\t"
49804 #elif defined(__clang__)
49805         "adcs	r4, %[r]\n\t"
49806 #else
49807         "adc	r4, %[r]\n\t"
49808 #endif
49809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49810         "lsrs	r7, %[b], #16\n\t"
49811 #else
49812         "lsr	r7, %[b], #16\n\t"
49813 #endif
49814 #ifdef WOLFSSL_KEIL
49815         "muls	r6, r7, r6\n\t"
49816 #elif defined(__clang__)
49817         "muls	r6, r7\n\t"
49818 #else
49819         "mul	r6, r7\n\t"
49820 #endif
49821 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49822         "lsrs	r7, r6, #16\n\t"
49823 #else
49824         "lsr	r7, r6, #16\n\t"
49825 #endif
49826 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49827         "lsls	r6, r6, #16\n\t"
49828 #else
49829         "lsl	r6, r6, #16\n\t"
49830 #endif
49831 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49832         "adds	r5, r5, r6\n\t"
49833 #else
49834         "add	r5, r5, r6\n\t"
49835 #endif
49836 #ifdef WOLFSSL_KEIL
49837         "adcs	r3, r3, r7\n\t"
49838 #elif defined(__clang__)
49839         "adcs	r3, r7\n\t"
49840 #else
49841         "adc	r3, r7\n\t"
49842 #endif
49843 #ifdef WOLFSSL_KEIL
49844         "adcs	r4, r4, %[r]\n\t"
49845 #elif defined(__clang__)
49846         "adcs	r4, %[r]\n\t"
49847 #else
49848         "adc	r4, %[r]\n\t"
49849 #endif
49850 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49851         "lsrs	r6, %[a], #16\n\t"
49852 #else
49853         "lsr	r6, %[a], #16\n\t"
49854 #endif
49855 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49856         "lsrs	r7, %[b], #16\n\t"
49857 #else
49858         "lsr	r7, %[b], #16\n\t"
49859 #endif
49860 #ifdef WOLFSSL_KEIL
49861         "muls	r7, r6, r7\n\t"
49862 #elif defined(__clang__)
49863         "muls	r7, r6\n\t"
49864 #else
49865         "mul	r7, r6\n\t"
49866 #endif
49867 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49868         "adds	r3, r3, r7\n\t"
49869 #else
49870         "add	r3, r3, r7\n\t"
49871 #endif
49872 #ifdef WOLFSSL_KEIL
49873         "adcs	r4, r4, %[r]\n\t"
49874 #elif defined(__clang__)
49875         "adcs	r4, %[r]\n\t"
49876 #else
49877         "adc	r4, %[r]\n\t"
49878 #endif
49879         "uxth	r7, %[b]\n\t"
49880 #ifdef WOLFSSL_KEIL
49881         "muls	r6, r7, r6\n\t"
49882 #elif defined(__clang__)
49883         "muls	r6, r7\n\t"
49884 #else
49885         "mul	r6, r7\n\t"
49886 #endif
49887 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49888         "lsrs	r7, r6, #16\n\t"
49889 #else
49890         "lsr	r7, r6, #16\n\t"
49891 #endif
49892 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49893         "lsls	r6, r6, #16\n\t"
49894 #else
49895         "lsl	r6, r6, #16\n\t"
49896 #endif
49897 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49898         "adds	r5, r5, r6\n\t"
49899 #else
49900         "add	r5, r5, r6\n\t"
49901 #endif
49902 #ifdef WOLFSSL_KEIL
49903         "adcs	r3, r3, r7\n\t"
49904 #elif defined(__clang__)
49905         "adcs	r3, r7\n\t"
49906 #else
49907         "adc	r3, r7\n\t"
49908 #endif
49909 #ifdef WOLFSSL_KEIL
49910         "adcs	r4, r4, %[r]\n\t"
49911 #elif defined(__clang__)
49912         "adcs	r4, %[r]\n\t"
49913 #else
49914         "adc	r4, %[r]\n\t"
49915 #endif
49916         "#  A[9] * B[11]\n\t"
49917         "mov	%[a], r9\n\t"
49918         "mov	%[b], r10\n\t"
49919         "ldr	%[a], [%[a], #36]\n\t"
49920         "ldr	%[b], [%[b], #44]\n\t"
49921         "uxth	r6, %[a]\n\t"
49922         "uxth	r7, %[b]\n\t"
49923 #ifdef WOLFSSL_KEIL
49924         "muls	r7, r6, r7\n\t"
49925 #elif defined(__clang__)
49926         "muls	r7, r6\n\t"
49927 #else
49928         "mul	r7, r6\n\t"
49929 #endif
49930 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49931         "adds	r5, r5, r7\n\t"
49932 #else
49933         "add	r5, r5, r7\n\t"
49934 #endif
49935 #ifdef WOLFSSL_KEIL
49936         "adcs	r3, r3, %[r]\n\t"
49937 #elif defined(__clang__)
49938         "adcs	r3, %[r]\n\t"
49939 #else
49940         "adc	r3, %[r]\n\t"
49941 #endif
49942 #ifdef WOLFSSL_KEIL
49943         "adcs	r4, r4, %[r]\n\t"
49944 #elif defined(__clang__)
49945         "adcs	r4, %[r]\n\t"
49946 #else
49947         "adc	r4, %[r]\n\t"
49948 #endif
49949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49950         "lsrs	r7, %[b], #16\n\t"
49951 #else
49952         "lsr	r7, %[b], #16\n\t"
49953 #endif
49954 #ifdef WOLFSSL_KEIL
49955         "muls	r6, r7, r6\n\t"
49956 #elif defined(__clang__)
49957         "muls	r6, r7\n\t"
49958 #else
49959         "mul	r6, r7\n\t"
49960 #endif
49961 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49962         "lsrs	r7, r6, #16\n\t"
49963 #else
49964         "lsr	r7, r6, #16\n\t"
49965 #endif
49966 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49967         "lsls	r6, r6, #16\n\t"
49968 #else
49969         "lsl	r6, r6, #16\n\t"
49970 #endif
49971 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49972         "adds	r5, r5, r6\n\t"
49973 #else
49974         "add	r5, r5, r6\n\t"
49975 #endif
49976 #ifdef WOLFSSL_KEIL
49977         "adcs	r3, r3, r7\n\t"
49978 #elif defined(__clang__)
49979         "adcs	r3, r7\n\t"
49980 #else
49981         "adc	r3, r7\n\t"
49982 #endif
49983 #ifdef WOLFSSL_KEIL
49984         "adcs	r4, r4, %[r]\n\t"
49985 #elif defined(__clang__)
49986         "adcs	r4, %[r]\n\t"
49987 #else
49988         "adc	r4, %[r]\n\t"
49989 #endif
49990 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49991         "lsrs	r6, %[a], #16\n\t"
49992 #else
49993         "lsr	r6, %[a], #16\n\t"
49994 #endif
49995 #if defined(__clang__) || defined(WOLFSSL_KEIL)
49996         "lsrs	r7, %[b], #16\n\t"
49997 #else
49998         "lsr	r7, %[b], #16\n\t"
49999 #endif
50000 #ifdef WOLFSSL_KEIL
50001         "muls	r7, r6, r7\n\t"
50002 #elif defined(__clang__)
50003         "muls	r7, r6\n\t"
50004 #else
50005         "mul	r7, r6\n\t"
50006 #endif
50007 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50008         "adds	r3, r3, r7\n\t"
50009 #else
50010         "add	r3, r3, r7\n\t"
50011 #endif
50012 #ifdef WOLFSSL_KEIL
50013         "adcs	r4, r4, %[r]\n\t"
50014 #elif defined(__clang__)
50015         "adcs	r4, %[r]\n\t"
50016 #else
50017         "adc	r4, %[r]\n\t"
50018 #endif
50019         "uxth	r7, %[b]\n\t"
50020 #ifdef WOLFSSL_KEIL
50021         "muls	r6, r7, r6\n\t"
50022 #elif defined(__clang__)
50023         "muls	r6, r7\n\t"
50024 #else
50025         "mul	r6, r7\n\t"
50026 #endif
50027 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50028         "lsrs	r7, r6, #16\n\t"
50029 #else
50030         "lsr	r7, r6, #16\n\t"
50031 #endif
50032 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50033         "lsls	r6, r6, #16\n\t"
50034 #else
50035         "lsl	r6, r6, #16\n\t"
50036 #endif
50037 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50038         "adds	r5, r5, r6\n\t"
50039 #else
50040         "add	r5, r5, r6\n\t"
50041 #endif
50042 #ifdef WOLFSSL_KEIL
50043         "adcs	r3, r3, r7\n\t"
50044 #elif defined(__clang__)
50045         "adcs	r3, r7\n\t"
50046 #else
50047         "adc	r3, r7\n\t"
50048 #endif
50049 #ifdef WOLFSSL_KEIL
50050         "adcs	r4, r4, %[r]\n\t"
50051 #elif defined(__clang__)
50052         "adcs	r4, %[r]\n\t"
50053 #else
50054         "adc	r4, %[r]\n\t"
50055 #endif
50056         "mov	%[r], r8\n\t"
50057         "str	r5, [%[r], #80]\n\t"
50058         "movs	%[r], #0\n\t"
50059         "#  A[10] * B[11]\n\t"
50060         "movs	r5, #0\n\t"
50061         "mov	%[a], r9\n\t"
50062         "mov	%[b], r10\n\t"
50063         "ldr	%[a], [%[a], #40]\n\t"
50064         "ldr	%[b], [%[b], #44]\n\t"
50065         "uxth	r6, %[a]\n\t"
50066         "uxth	r7, %[b]\n\t"
50067 #ifdef WOLFSSL_KEIL
50068         "muls	r7, r6, r7\n\t"
50069 #elif defined(__clang__)
50070         "muls	r7, r6\n\t"
50071 #else
50072         "mul	r7, r6\n\t"
50073 #endif
50074 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50075         "adds	r3, r3, r7\n\t"
50076 #else
50077         "add	r3, r3, r7\n\t"
50078 #endif
50079 #ifdef WOLFSSL_KEIL
50080         "adcs	r4, r4, %[r]\n\t"
50081 #elif defined(__clang__)
50082         "adcs	r4, %[r]\n\t"
50083 #else
50084         "adc	r4, %[r]\n\t"
50085 #endif
50086 #ifdef WOLFSSL_KEIL
50087         "adcs	r5, r5, %[r]\n\t"
50088 #elif defined(__clang__)
50089         "adcs	r5, %[r]\n\t"
50090 #else
50091         "adc	r5, %[r]\n\t"
50092 #endif
50093 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50094         "lsrs	r7, %[b], #16\n\t"
50095 #else
50096         "lsr	r7, %[b], #16\n\t"
50097 #endif
50098 #ifdef WOLFSSL_KEIL
50099         "muls	r6, r7, r6\n\t"
50100 #elif defined(__clang__)
50101         "muls	r6, r7\n\t"
50102 #else
50103         "mul	r6, r7\n\t"
50104 #endif
50105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50106         "lsrs	r7, r6, #16\n\t"
50107 #else
50108         "lsr	r7, r6, #16\n\t"
50109 #endif
50110 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50111         "lsls	r6, r6, #16\n\t"
50112 #else
50113         "lsl	r6, r6, #16\n\t"
50114 #endif
50115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50116         "adds	r3, r3, r6\n\t"
50117 #else
50118         "add	r3, r3, r6\n\t"
50119 #endif
50120 #ifdef WOLFSSL_KEIL
50121         "adcs	r4, r4, r7\n\t"
50122 #elif defined(__clang__)
50123         "adcs	r4, r7\n\t"
50124 #else
50125         "adc	r4, r7\n\t"
50126 #endif
50127 #ifdef WOLFSSL_KEIL
50128         "adcs	r5, r5, %[r]\n\t"
50129 #elif defined(__clang__)
50130         "adcs	r5, %[r]\n\t"
50131 #else
50132         "adc	r5, %[r]\n\t"
50133 #endif
50134 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50135         "lsrs	r6, %[a], #16\n\t"
50136 #else
50137         "lsr	r6, %[a], #16\n\t"
50138 #endif
50139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50140         "lsrs	r7, %[b], #16\n\t"
50141 #else
50142         "lsr	r7, %[b], #16\n\t"
50143 #endif
50144 #ifdef WOLFSSL_KEIL
50145         "muls	r7, r6, r7\n\t"
50146 #elif defined(__clang__)
50147         "muls	r7, r6\n\t"
50148 #else
50149         "mul	r7, r6\n\t"
50150 #endif
50151 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50152         "adds	r4, r4, r7\n\t"
50153 #else
50154         "add	r4, r4, r7\n\t"
50155 #endif
50156 #ifdef WOLFSSL_KEIL
50157         "adcs	r5, r5, %[r]\n\t"
50158 #elif defined(__clang__)
50159         "adcs	r5, %[r]\n\t"
50160 #else
50161         "adc	r5, %[r]\n\t"
50162 #endif
50163         "uxth	r7, %[b]\n\t"
50164 #ifdef WOLFSSL_KEIL
50165         "muls	r6, r7, r6\n\t"
50166 #elif defined(__clang__)
50167         "muls	r6, r7\n\t"
50168 #else
50169         "mul	r6, r7\n\t"
50170 #endif
50171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50172         "lsrs	r7, r6, #16\n\t"
50173 #else
50174         "lsr	r7, r6, #16\n\t"
50175 #endif
50176 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50177         "lsls	r6, r6, #16\n\t"
50178 #else
50179         "lsl	r6, r6, #16\n\t"
50180 #endif
50181 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50182         "adds	r3, r3, r6\n\t"
50183 #else
50184         "add	r3, r3, r6\n\t"
50185 #endif
50186 #ifdef WOLFSSL_KEIL
50187         "adcs	r4, r4, r7\n\t"
50188 #elif defined(__clang__)
50189         "adcs	r4, r7\n\t"
50190 #else
50191         "adc	r4, r7\n\t"
50192 #endif
50193 #ifdef WOLFSSL_KEIL
50194         "adcs	r5, r5, %[r]\n\t"
50195 #elif defined(__clang__)
50196         "adcs	r5, %[r]\n\t"
50197 #else
50198         "adc	r5, %[r]\n\t"
50199 #endif
50200         "#  A[11] * B[10]\n\t"
50201         "mov	%[a], r9\n\t"
50202         "mov	%[b], r10\n\t"
50203         "ldr	%[a], [%[a], #44]\n\t"
50204         "ldr	%[b], [%[b], #40]\n\t"
50205         "uxth	r6, %[a]\n\t"
50206         "uxth	r7, %[b]\n\t"
50207 #ifdef WOLFSSL_KEIL
50208         "muls	r7, r6, r7\n\t"
50209 #elif defined(__clang__)
50210         "muls	r7, r6\n\t"
50211 #else
50212         "mul	r7, r6\n\t"
50213 #endif
50214 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50215         "adds	r3, r3, r7\n\t"
50216 #else
50217         "add	r3, r3, r7\n\t"
50218 #endif
50219 #ifdef WOLFSSL_KEIL
50220         "adcs	r4, r4, %[r]\n\t"
50221 #elif defined(__clang__)
50222         "adcs	r4, %[r]\n\t"
50223 #else
50224         "adc	r4, %[r]\n\t"
50225 #endif
50226 #ifdef WOLFSSL_KEIL
50227         "adcs	r5, r5, %[r]\n\t"
50228 #elif defined(__clang__)
50229         "adcs	r5, %[r]\n\t"
50230 #else
50231         "adc	r5, %[r]\n\t"
50232 #endif
50233 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50234         "lsrs	r7, %[b], #16\n\t"
50235 #else
50236         "lsr	r7, %[b], #16\n\t"
50237 #endif
50238 #ifdef WOLFSSL_KEIL
50239         "muls	r6, r7, r6\n\t"
50240 #elif defined(__clang__)
50241         "muls	r6, r7\n\t"
50242 #else
50243         "mul	r6, r7\n\t"
50244 #endif
50245 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50246         "lsrs	r7, r6, #16\n\t"
50247 #else
50248         "lsr	r7, r6, #16\n\t"
50249 #endif
50250 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50251         "lsls	r6, r6, #16\n\t"
50252 #else
50253         "lsl	r6, r6, #16\n\t"
50254 #endif
50255 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50256         "adds	r3, r3, r6\n\t"
50257 #else
50258         "add	r3, r3, r6\n\t"
50259 #endif
50260 #ifdef WOLFSSL_KEIL
50261         "adcs	r4, r4, r7\n\t"
50262 #elif defined(__clang__)
50263         "adcs	r4, r7\n\t"
50264 #else
50265         "adc	r4, r7\n\t"
50266 #endif
50267 #ifdef WOLFSSL_KEIL
50268         "adcs	r5, r5, %[r]\n\t"
50269 #elif defined(__clang__)
50270         "adcs	r5, %[r]\n\t"
50271 #else
50272         "adc	r5, %[r]\n\t"
50273 #endif
50274 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50275         "lsrs	r6, %[a], #16\n\t"
50276 #else
50277         "lsr	r6, %[a], #16\n\t"
50278 #endif
50279 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50280         "lsrs	r7, %[b], #16\n\t"
50281 #else
50282         "lsr	r7, %[b], #16\n\t"
50283 #endif
50284 #ifdef WOLFSSL_KEIL
50285         "muls	r7, r6, r7\n\t"
50286 #elif defined(__clang__)
50287         "muls	r7, r6\n\t"
50288 #else
50289         "mul	r7, r6\n\t"
50290 #endif
50291 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50292         "adds	r4, r4, r7\n\t"
50293 #else
50294         "add	r4, r4, r7\n\t"
50295 #endif
50296 #ifdef WOLFSSL_KEIL
50297         "adcs	r5, r5, %[r]\n\t"
50298 #elif defined(__clang__)
50299         "adcs	r5, %[r]\n\t"
50300 #else
50301         "adc	r5, %[r]\n\t"
50302 #endif
50303         "uxth	r7, %[b]\n\t"
50304 #ifdef WOLFSSL_KEIL
50305         "muls	r6, r7, r6\n\t"
50306 #elif defined(__clang__)
50307         "muls	r6, r7\n\t"
50308 #else
50309         "mul	r6, r7\n\t"
50310 #endif
50311 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50312         "lsrs	r7, r6, #16\n\t"
50313 #else
50314         "lsr	r7, r6, #16\n\t"
50315 #endif
50316 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50317         "lsls	r6, r6, #16\n\t"
50318 #else
50319         "lsl	r6, r6, #16\n\t"
50320 #endif
50321 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50322         "adds	r3, r3, r6\n\t"
50323 #else
50324         "add	r3, r3, r6\n\t"
50325 #endif
50326 #ifdef WOLFSSL_KEIL
50327         "adcs	r4, r4, r7\n\t"
50328 #elif defined(__clang__)
50329         "adcs	r4, r7\n\t"
50330 #else
50331         "adc	r4, r7\n\t"
50332 #endif
50333 #ifdef WOLFSSL_KEIL
50334         "adcs	r5, r5, %[r]\n\t"
50335 #elif defined(__clang__)
50336         "adcs	r5, %[r]\n\t"
50337 #else
50338         "adc	r5, %[r]\n\t"
50339 #endif
50340         "mov	%[r], r8\n\t"
50341         "str	r3, [%[r], #84]\n\t"
50342         "movs	%[r], #0\n\t"
50343         "#  A[11] * B[11]\n\t"
50344         "mov	%[a], r9\n\t"
50345         "mov	%[b], r10\n\t"
50346         "ldr	%[a], [%[a], #44]\n\t"
50347         "ldr	%[b], [%[b], #44]\n\t"
50348         "uxth	r6, %[a]\n\t"
50349         "uxth	r7, %[b]\n\t"
50350 #ifdef WOLFSSL_KEIL
50351         "muls	r7, r6, r7\n\t"
50352 #elif defined(__clang__)
50353         "muls	r7, r6\n\t"
50354 #else
50355         "mul	r7, r6\n\t"
50356 #endif
50357 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50358         "adds	r4, r4, r7\n\t"
50359 #else
50360         "add	r4, r4, r7\n\t"
50361 #endif
50362 #ifdef WOLFSSL_KEIL
50363         "adcs	r5, r5, %[r]\n\t"
50364 #elif defined(__clang__)
50365         "adcs	r5, %[r]\n\t"
50366 #else
50367         "adc	r5, %[r]\n\t"
50368 #endif
50369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50370         "lsrs	r7, %[b], #16\n\t"
50371 #else
50372         "lsr	r7, %[b], #16\n\t"
50373 #endif
50374 #ifdef WOLFSSL_KEIL
50375         "muls	r6, r7, r6\n\t"
50376 #elif defined(__clang__)
50377         "muls	r6, r7\n\t"
50378 #else
50379         "mul	r6, r7\n\t"
50380 #endif
50381 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50382         "lsrs	r7, r6, #16\n\t"
50383 #else
50384         "lsr	r7, r6, #16\n\t"
50385 #endif
50386 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50387         "lsls	r6, r6, #16\n\t"
50388 #else
50389         "lsl	r6, r6, #16\n\t"
50390 #endif
50391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50392         "adds	r4, r4, r6\n\t"
50393 #else
50394         "add	r4, r4, r6\n\t"
50395 #endif
50396 #ifdef WOLFSSL_KEIL
50397         "adcs	r5, r5, r7\n\t"
50398 #elif defined(__clang__)
50399         "adcs	r5, r7\n\t"
50400 #else
50401         "adc	r5, r7\n\t"
50402 #endif
50403 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50404         "lsrs	r6, %[a], #16\n\t"
50405 #else
50406         "lsr	r6, %[a], #16\n\t"
50407 #endif
50408 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50409         "lsrs	r7, %[b], #16\n\t"
50410 #else
50411         "lsr	r7, %[b], #16\n\t"
50412 #endif
50413 #ifdef WOLFSSL_KEIL
50414         "muls	r7, r6, r7\n\t"
50415 #elif defined(__clang__)
50416         "muls	r7, r6\n\t"
50417 #else
50418         "mul	r7, r6\n\t"
50419 #endif
50420 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50421         "adds	r5, r5, r7\n\t"
50422 #else
50423         "add	r5, r5, r7\n\t"
50424 #endif
50425         "uxth	r7, %[b]\n\t"
50426 #ifdef WOLFSSL_KEIL
50427         "muls	r6, r7, r6\n\t"
50428 #elif defined(__clang__)
50429         "muls	r6, r7\n\t"
50430 #else
50431         "mul	r6, r7\n\t"
50432 #endif
50433 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50434         "lsrs	r7, r6, #16\n\t"
50435 #else
50436         "lsr	r7, r6, #16\n\t"
50437 #endif
50438 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50439         "lsls	r6, r6, #16\n\t"
50440 #else
50441         "lsl	r6, r6, #16\n\t"
50442 #endif
50443 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50444         "adds	r4, r4, r6\n\t"
50445 #else
50446         "add	r4, r4, r6\n\t"
50447 #endif
50448 #ifdef WOLFSSL_KEIL
50449         "adcs	r5, r5, r7\n\t"
50450 #elif defined(__clang__)
50451         "adcs	r5, r7\n\t"
50452 #else
50453         "adc	r5, r7\n\t"
50454 #endif
50455         "mov	%[r], r8\n\t"
50456         "str	r4, [%[r], #88]\n\t"
50457         "str	r5, [%[r], #92]\n\t"
50458         "pop	{r3, r4, r5, r6}\n\t"
50459         "stm	%[r]!, {r3, r4, r5, r6}\n\t"
50460         "pop	{r3, r4, r5, r6}\n\t"
50461         "stm	%[r]!, {r3, r4, r5, r6}\n\t"
50462         "pop	{r3, r4, r5, r6}\n\t"
50463         "stm	%[r]!, {r3, r4, r5, r6}\n\t"
50464         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
50465         :
50466         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10"
50467     );
50468 }
50469 
50470 #endif /* !WOLFSSL_SP_LARGE_CODE */
50471 #ifndef WOLFSSL_SP_LARGE_CODE
50472 /* Square a and put result in r. (r = a * a)
50473  *
50474  * r  A single precision integer.
50475  * a  A single precision integer.
50476  */
sp_3072_sqr_12(sp_digit * r,const sp_digit * a)50477 SP_NOINLINE static void sp_3072_sqr_12(sp_digit* r, const sp_digit* a)
50478 {
50479     __asm__ __volatile__ (
50480         "movs	r3, #0\n\t"
50481         "movs	r4, #0\n\t"
50482         "movs	r5, #0\n\t"
50483         "mov	r8, r3\n\t"
50484         "mov	r11, %[r]\n\t"
50485         "movs	r6, #0x60\n\t"
50486 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50487         "negs	r6, r6\n\t"
50488 #else
50489         "neg	r6, r6\n\t"
50490 #endif
50491         "add	sp, sp, r6\n\t"
50492         "mov	r10, sp\n\t"
50493         "mov	r9, %[a]\n\t"
50494         "\n"
50495     "L_sp_3072_sqr_12_words_%=:\n\t"
50496         "movs	%[r], #0\n\t"
50497         "movs	r6, #44\n\t"
50498         "mov	%[a], r8\n\t"
50499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50500         "subs	%[a], %[a], r6\n\t"
50501 #else
50502         "sub	%[a], %[a], r6\n\t"
50503 #endif
50504 #ifdef WOLFSSL_KEIL
50505         "sbcs	r6, r6, r6\n\t"
50506 #elif defined(__clang__)
50507         "sbcs	r6, r6\n\t"
50508 #else
50509         "sbc	r6, r6\n\t"
50510 #endif
50511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50512         "mvns	r6, r6\n\t"
50513 #else
50514         "mvn	r6, r6\n\t"
50515 #endif
50516 #ifdef WOLFSSL_KEIL
50517         "ands	%[a], %[a], r6\n\t"
50518 #elif defined(__clang__)
50519         "ands	%[a], r6\n\t"
50520 #else
50521         "and	%[a], r6\n\t"
50522 #endif
50523         "mov	r2, r8\n\t"
50524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50525         "subs	r2, r2, %[a]\n\t"
50526 #else
50527         "sub	r2, r2, %[a]\n\t"
50528 #endif
50529         "add	%[a], %[a], r9\n\t"
50530         "add	r2, r2, r9\n\t"
50531         "\n"
50532     "L_sp_3072_sqr_12_mul_%=:\n\t"
50533         "cmp	r2, %[a]\n\t"
50534         "beq	L_sp_3072_sqr_12_sqr_%=\n\t"
50535         "# Multiply * 2: Start\n\t"
50536         "ldrh	r6, [%[a]]\n\t"
50537         "ldrh	r7, [r2]\n\t"
50538 #ifdef WOLFSSL_KEIL
50539         "muls	r7, r6, r7\n\t"
50540 #elif defined(__clang__)
50541         "muls	r7, r6\n\t"
50542 #else
50543         "mul	r7, r6\n\t"
50544 #endif
50545 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50546         "adds	r3, r3, r7\n\t"
50547 #else
50548         "add	r3, r3, r7\n\t"
50549 #endif
50550 #ifdef WOLFSSL_KEIL
50551         "adcs	r4, r4, %[r]\n\t"
50552 #elif defined(__clang__)
50553         "adcs	r4, %[r]\n\t"
50554 #else
50555         "adc	r4, %[r]\n\t"
50556 #endif
50557 #ifdef WOLFSSL_KEIL
50558         "adcs	r5, r5, %[r]\n\t"
50559 #elif defined(__clang__)
50560         "adcs	r5, %[r]\n\t"
50561 #else
50562         "adc	r5, %[r]\n\t"
50563 #endif
50564 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50565         "adds	r3, r3, r7\n\t"
50566 #else
50567         "add	r3, r3, r7\n\t"
50568 #endif
50569 #ifdef WOLFSSL_KEIL
50570         "adcs	r4, r4, %[r]\n\t"
50571 #elif defined(__clang__)
50572         "adcs	r4, %[r]\n\t"
50573 #else
50574         "adc	r4, %[r]\n\t"
50575 #endif
50576 #ifdef WOLFSSL_KEIL
50577         "adcs	r5, r5, %[r]\n\t"
50578 #elif defined(__clang__)
50579         "adcs	r5, %[r]\n\t"
50580 #else
50581         "adc	r5, %[r]\n\t"
50582 #endif
50583         "ldr	r7, [r2]\n\t"
50584 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50585         "lsrs	r7, r7, #16\n\t"
50586 #else
50587         "lsr	r7, r7, #16\n\t"
50588 #endif
50589 #ifdef WOLFSSL_KEIL
50590         "muls	r6, r7, r6\n\t"
50591 #elif defined(__clang__)
50592         "muls	r6, r7\n\t"
50593 #else
50594         "mul	r6, r7\n\t"
50595 #endif
50596 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50597         "lsrs	r7, r6, #16\n\t"
50598 #else
50599         "lsr	r7, r6, #16\n\t"
50600 #endif
50601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50602         "lsls	r6, r6, #16\n\t"
50603 #else
50604         "lsl	r6, r6, #16\n\t"
50605 #endif
50606 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50607         "adds	r3, r3, r6\n\t"
50608 #else
50609         "add	r3, r3, r6\n\t"
50610 #endif
50611 #ifdef WOLFSSL_KEIL
50612         "adcs	r4, r4, r7\n\t"
50613 #elif defined(__clang__)
50614         "adcs	r4, r7\n\t"
50615 #else
50616         "adc	r4, r7\n\t"
50617 #endif
50618 #ifdef WOLFSSL_KEIL
50619         "adcs	r5, r5, %[r]\n\t"
50620 #elif defined(__clang__)
50621         "adcs	r5, %[r]\n\t"
50622 #else
50623         "adc	r5, %[r]\n\t"
50624 #endif
50625 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50626         "adds	r3, r3, r6\n\t"
50627 #else
50628         "add	r3, r3, r6\n\t"
50629 #endif
50630 #ifdef WOLFSSL_KEIL
50631         "adcs	r4, r4, r7\n\t"
50632 #elif defined(__clang__)
50633         "adcs	r4, r7\n\t"
50634 #else
50635         "adc	r4, r7\n\t"
50636 #endif
50637 #ifdef WOLFSSL_KEIL
50638         "adcs	r5, r5, %[r]\n\t"
50639 #elif defined(__clang__)
50640         "adcs	r5, %[r]\n\t"
50641 #else
50642         "adc	r5, %[r]\n\t"
50643 #endif
50644         "ldr	r6, [%[a]]\n\t"
50645         "ldr	r7, [r2]\n\t"
50646 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50647         "lsrs	r6, r6, #16\n\t"
50648 #else
50649         "lsr	r6, r6, #16\n\t"
50650 #endif
50651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50652         "lsrs	r7, r7, #16\n\t"
50653 #else
50654         "lsr	r7, r7, #16\n\t"
50655 #endif
50656 #ifdef WOLFSSL_KEIL
50657         "muls	r7, r6, r7\n\t"
50658 #elif defined(__clang__)
50659         "muls	r7, r6\n\t"
50660 #else
50661         "mul	r7, r6\n\t"
50662 #endif
50663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50664         "adds	r4, r4, r7\n\t"
50665 #else
50666         "add	r4, r4, r7\n\t"
50667 #endif
50668 #ifdef WOLFSSL_KEIL
50669         "adcs	r5, r5, %[r]\n\t"
50670 #elif defined(__clang__)
50671         "adcs	r5, %[r]\n\t"
50672 #else
50673         "adc	r5, %[r]\n\t"
50674 #endif
50675 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50676         "adds	r4, r4, r7\n\t"
50677 #else
50678         "add	r4, r4, r7\n\t"
50679 #endif
50680 #ifdef WOLFSSL_KEIL
50681         "adcs	r5, r5, %[r]\n\t"
50682 #elif defined(__clang__)
50683         "adcs	r5, %[r]\n\t"
50684 #else
50685         "adc	r5, %[r]\n\t"
50686 #endif
50687         "ldrh	r7, [r2]\n\t"
50688 #ifdef WOLFSSL_KEIL
50689         "muls	r6, r7, r6\n\t"
50690 #elif defined(__clang__)
50691         "muls	r6, r7\n\t"
50692 #else
50693         "mul	r6, r7\n\t"
50694 #endif
50695 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50696         "lsrs	r7, r6, #16\n\t"
50697 #else
50698         "lsr	r7, r6, #16\n\t"
50699 #endif
50700 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50701         "lsls	r6, r6, #16\n\t"
50702 #else
50703         "lsl	r6, r6, #16\n\t"
50704 #endif
50705 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50706         "adds	r3, r3, r6\n\t"
50707 #else
50708         "add	r3, r3, r6\n\t"
50709 #endif
50710 #ifdef WOLFSSL_KEIL
50711         "adcs	r4, r4, r7\n\t"
50712 #elif defined(__clang__)
50713         "adcs	r4, r7\n\t"
50714 #else
50715         "adc	r4, r7\n\t"
50716 #endif
50717 #ifdef WOLFSSL_KEIL
50718         "adcs	r5, r5, %[r]\n\t"
50719 #elif defined(__clang__)
50720         "adcs	r5, %[r]\n\t"
50721 #else
50722         "adc	r5, %[r]\n\t"
50723 #endif
50724 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50725         "adds	r3, r3, r6\n\t"
50726 #else
50727         "add	r3, r3, r6\n\t"
50728 #endif
50729 #ifdef WOLFSSL_KEIL
50730         "adcs	r4, r4, r7\n\t"
50731 #elif defined(__clang__)
50732         "adcs	r4, r7\n\t"
50733 #else
50734         "adc	r4, r7\n\t"
50735 #endif
50736 #ifdef WOLFSSL_KEIL
50737         "adcs	r5, r5, %[r]\n\t"
50738 #elif defined(__clang__)
50739         "adcs	r5, %[r]\n\t"
50740 #else
50741         "adc	r5, %[r]\n\t"
50742 #endif
50743         "# Multiply * 2: Done\n\t"
50744         "bal	L_sp_3072_sqr_12_done_sqr_%=\n\t"
50745         "\n"
50746     "L_sp_3072_sqr_12_sqr_%=:\n\t"
50747         "mov	r12, r2\n\t"
50748         "ldr	r2, [%[a]]\n\t"
50749         "# Square: Start\n\t"
50750 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50751         "lsrs	r7, r2, #16\n\t"
50752 #else
50753         "lsr	r7, r2, #16\n\t"
50754 #endif
50755         "uxth	r6, r2\n\t"
50756 #ifdef WOLFSSL_KEIL
50757         "muls	r6, r6, r6\n\t"
50758 #elif defined(__clang__)
50759         "muls	r6, r6\n\t"
50760 #else
50761         "mul	r6, r6\n\t"
50762 #endif
50763 #ifdef WOLFSSL_KEIL
50764         "muls	r7, r7, r7\n\t"
50765 #elif defined(__clang__)
50766         "muls	r7, r7\n\t"
50767 #else
50768         "mul	r7, r7\n\t"
50769 #endif
50770 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50771         "adds	r3, r3, r6\n\t"
50772 #else
50773         "add	r3, r3, r6\n\t"
50774 #endif
50775 #ifdef WOLFSSL_KEIL
50776         "adcs	r4, r4, r7\n\t"
50777 #elif defined(__clang__)
50778         "adcs	r4, r7\n\t"
50779 #else
50780         "adc	r4, r7\n\t"
50781 #endif
50782 #ifdef WOLFSSL_KEIL
50783         "adcs	r5, r5, %[r]\n\t"
50784 #elif defined(__clang__)
50785         "adcs	r5, %[r]\n\t"
50786 #else
50787         "adc	r5, %[r]\n\t"
50788 #endif
50789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50790         "lsrs	r7, r2, #16\n\t"
50791 #else
50792         "lsr	r7, r2, #16\n\t"
50793 #endif
50794         "uxth	r6, r2\n\t"
50795 #ifdef WOLFSSL_KEIL
50796         "muls	r6, r7, r6\n\t"
50797 #elif defined(__clang__)
50798         "muls	r6, r7\n\t"
50799 #else
50800         "mul	r6, r7\n\t"
50801 #endif
50802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50803         "lsrs	r7, r6, #15\n\t"
50804 #else
50805         "lsr	r7, r6, #15\n\t"
50806 #endif
50807 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50808         "lsls	r6, r6, #17\n\t"
50809 #else
50810         "lsl	r6, r6, #17\n\t"
50811 #endif
50812 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50813         "adds	r3, r3, r6\n\t"
50814 #else
50815         "add	r3, r3, r6\n\t"
50816 #endif
50817 #ifdef WOLFSSL_KEIL
50818         "adcs	r4, r4, r7\n\t"
50819 #elif defined(__clang__)
50820         "adcs	r4, r7\n\t"
50821 #else
50822         "adc	r4, r7\n\t"
50823 #endif
50824 #ifdef WOLFSSL_KEIL
50825         "adcs	r5, r5, %[r]\n\t"
50826 #elif defined(__clang__)
50827         "adcs	r5, %[r]\n\t"
50828 #else
50829         "adc	r5, %[r]\n\t"
50830 #endif
50831         "# Square: Done\n\t"
50832         "mov	r2, r12\n\t"
50833         "\n"
50834     "L_sp_3072_sqr_12_done_sqr_%=:\n\t"
50835 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50836         "adds	%[a], %[a], #4\n\t"
50837 #else
50838         "add	%[a], %[a], #4\n\t"
50839 #endif
50840 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50841         "subs	r2, r2, #4\n\t"
50842 #else
50843         "sub	r2, r2, #4\n\t"
50844 #endif
50845         "movs	r6, #48\n\t"
50846         "add	r6, r6, r9\n\t"
50847         "cmp	%[a], r6\n\t"
50848         "beq	L_sp_3072_sqr_12_done_mul_%=\n\t"
50849         "cmp	%[a], r2\n\t"
50850         "bgt	L_sp_3072_sqr_12_done_mul_%=\n\t"
50851         "mov	r7, r8\n\t"
50852         "add	r7, r7, r9\n\t"
50853         "cmp	%[a], r7\n\t"
50854         "ble	L_sp_3072_sqr_12_mul_%=\n\t"
50855         "\n"
50856     "L_sp_3072_sqr_12_done_mul_%=:\n\t"
50857         "mov	%[r], r10\n\t"
50858         "mov	r7, r8\n\t"
50859         "str	r3, [%[r], r7]\n\t"
50860         "movs	r3, r4\n\t"
50861         "movs	r4, r5\n\t"
50862         "movs	r5, #0\n\t"
50863 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50864         "adds	r7, r7, #4\n\t"
50865 #else
50866         "add	r7, r7, #4\n\t"
50867 #endif
50868         "mov	r8, r7\n\t"
50869         "movs	r6, #0x58\n\t"
50870         "cmp	r7, r6\n\t"
50871         "ble	L_sp_3072_sqr_12_words_%=\n\t"
50872         "mov	%[a], r9\n\t"
50873         "str	r3, [%[r], r7]\n\t"
50874         "mov	%[r], r11\n\t"
50875         "mov	%[a], r10\n\t"
50876         "movs	r3, #0x5c\n\t"
50877         "\n"
50878     "L_sp_3072_sqr_12_store_%=:\n\t"
50879         "ldr	r6, [%[a], r3]\n\t"
50880         "str	r6, [%[r], r3]\n\t"
50881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50882         "subs	r3, r3, #4\n\t"
50883 #else
50884         "sub	r3, r3, #4\n\t"
50885 #endif
50886         "bge	L_sp_3072_sqr_12_store_%=\n\t"
50887         "movs	r6, #0x60\n\t"
50888         "add	sp, sp, r6\n\t"
50889         : [r] "+r" (r), [a] "+r" (a)
50890         :
50891         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
50892     );
50893 }
50894 
50895 #else
50896 /* Square a and put result in r. (r = a * a)
50897  *
50898  * r  A single precision integer.
50899  * a  A single precision integer.
50900  */
sp_3072_sqr_12(sp_digit * r,const sp_digit * a)50901 SP_NOINLINE static void sp_3072_sqr_12(sp_digit* r, const sp_digit* a)
50902 {
50903     __asm__ __volatile__ (
50904         "sub	sp, sp, #48\n\t"
50905         "mov	r8, %[r]\n\t"
50906         "mov	r9, %[a]\n\t"
50907         "movs	%[r], #0\n\t"
50908         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
50909         "mov	r10, r2\n\t"
50910         "mov	r11, r3\n\t"
50911         "mov	r12, r4\n\t"
50912         "mov	lr, r5\n\t"
50913         "mov	%[a], r9\n\t"
50914         "#  A[0] * A[0]\n\t"
50915         "movs	r4, #0\n\t"
50916         "mov	r7, r10\n\t"
50917 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50918         "lsrs	r6, r7, #16\n\t"
50919 #else
50920         "lsr	r6, r7, #16\n\t"
50921 #endif
50922         "uxth	r5, r7\n\t"
50923         "movs	r2, r5\n\t"
50924         "movs	r3, r6\n\t"
50925 #ifdef WOLFSSL_KEIL
50926         "muls	r2, r2, r2\n\t"
50927 #elif defined(__clang__)
50928         "muls	r2, r2\n\t"
50929 #else
50930         "mul	r2, r2\n\t"
50931 #endif
50932 #ifdef WOLFSSL_KEIL
50933         "muls	r3, r3, r3\n\t"
50934 #elif defined(__clang__)
50935         "muls	r3, r3\n\t"
50936 #else
50937         "mul	r3, r3\n\t"
50938 #endif
50939 #ifdef WOLFSSL_KEIL
50940         "muls	r5, r6, r5\n\t"
50941 #elif defined(__clang__)
50942         "muls	r5, r6\n\t"
50943 #else
50944         "mul	r5, r6\n\t"
50945 #endif
50946 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50947         "lsrs	r6, r5, #15\n\t"
50948 #else
50949         "lsr	r6, r5, #15\n\t"
50950 #endif
50951 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50952         "lsls	r5, r5, #17\n\t"
50953 #else
50954         "lsl	r5, r5, #17\n\t"
50955 #endif
50956 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50957         "adds	r2, r2, r5\n\t"
50958 #else
50959         "add	r2, r2, r5\n\t"
50960 #endif
50961 #ifdef WOLFSSL_KEIL
50962         "adcs	r3, r3, r6\n\t"
50963 #elif defined(__clang__)
50964         "adcs	r3, r6\n\t"
50965 #else
50966         "adc	r3, r6\n\t"
50967 #endif
50968         "str	r2, [sp]\n\t"
50969         "#  A[1] * A[0]\n\t"
50970         "movs	r2, #0\n\t"
50971         "mov	%[a], r11\n\t"
50972         "uxth	r5, %[a]\n\t"
50973         "uxth	r6, r7\n\t"
50974 #ifdef WOLFSSL_KEIL
50975         "muls	r6, r5, r6\n\t"
50976 #elif defined(__clang__)
50977         "muls	r6, r5\n\t"
50978 #else
50979         "mul	r6, r5\n\t"
50980 #endif
50981 #if defined(__clang__) || defined(WOLFSSL_KEIL)
50982         "adds	r3, r3, r6\n\t"
50983 #else
50984         "add	r3, r3, r6\n\t"
50985 #endif
50986 #ifdef WOLFSSL_KEIL
50987         "adcs	r4, r4, %[r]\n\t"
50988 #elif defined(__clang__)
50989         "adcs	r4, %[r]\n\t"
50990 #else
50991         "adc	r4, %[r]\n\t"
50992 #endif
50993 #ifdef WOLFSSL_KEIL
50994         "adcs	r2, r2, %[r]\n\t"
50995 #elif defined(__clang__)
50996         "adcs	r2, %[r]\n\t"
50997 #else
50998         "adc	r2, %[r]\n\t"
50999 #endif
51000 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51001         "adds	r3, r3, r6\n\t"
51002 #else
51003         "add	r3, r3, r6\n\t"
51004 #endif
51005 #ifdef WOLFSSL_KEIL
51006         "adcs	r4, r4, %[r]\n\t"
51007 #elif defined(__clang__)
51008         "adcs	r4, %[r]\n\t"
51009 #else
51010         "adc	r4, %[r]\n\t"
51011 #endif
51012 #ifdef WOLFSSL_KEIL
51013         "adcs	r2, r2, %[r]\n\t"
51014 #elif defined(__clang__)
51015         "adcs	r2, %[r]\n\t"
51016 #else
51017         "adc	r2, %[r]\n\t"
51018 #endif
51019 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51020         "lsrs	r6, r7, #16\n\t"
51021 #else
51022         "lsr	r6, r7, #16\n\t"
51023 #endif
51024 #ifdef WOLFSSL_KEIL
51025         "muls	r5, r6, r5\n\t"
51026 #elif defined(__clang__)
51027         "muls	r5, r6\n\t"
51028 #else
51029         "mul	r5, r6\n\t"
51030 #endif
51031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51032         "lsrs	r6, r5, #16\n\t"
51033 #else
51034         "lsr	r6, r5, #16\n\t"
51035 #endif
51036 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51037         "lsls	r5, r5, #16\n\t"
51038 #else
51039         "lsl	r5, r5, #16\n\t"
51040 #endif
51041 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51042         "adds	r3, r3, r5\n\t"
51043 #else
51044         "add	r3, r3, r5\n\t"
51045 #endif
51046 #ifdef WOLFSSL_KEIL
51047         "adcs	r4, r4, r6\n\t"
51048 #elif defined(__clang__)
51049         "adcs	r4, r6\n\t"
51050 #else
51051         "adc	r4, r6\n\t"
51052 #endif
51053 #ifdef WOLFSSL_KEIL
51054         "adcs	r2, r2, %[r]\n\t"
51055 #elif defined(__clang__)
51056         "adcs	r2, %[r]\n\t"
51057 #else
51058         "adc	r2, %[r]\n\t"
51059 #endif
51060 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51061         "adds	r3, r3, r5\n\t"
51062 #else
51063         "add	r3, r3, r5\n\t"
51064 #endif
51065 #ifdef WOLFSSL_KEIL
51066         "adcs	r4, r4, r6\n\t"
51067 #elif defined(__clang__)
51068         "adcs	r4, r6\n\t"
51069 #else
51070         "adc	r4, r6\n\t"
51071 #endif
51072 #ifdef WOLFSSL_KEIL
51073         "adcs	r2, r2, %[r]\n\t"
51074 #elif defined(__clang__)
51075         "adcs	r2, %[r]\n\t"
51076 #else
51077         "adc	r2, %[r]\n\t"
51078 #endif
51079 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51080         "lsrs	r5, %[a], #16\n\t"
51081 #else
51082         "lsr	r5, %[a], #16\n\t"
51083 #endif
51084 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51085         "lsrs	r6, r7, #16\n\t"
51086 #else
51087         "lsr	r6, r7, #16\n\t"
51088 #endif
51089 #ifdef WOLFSSL_KEIL
51090         "muls	r6, r5, r6\n\t"
51091 #elif defined(__clang__)
51092         "muls	r6, r5\n\t"
51093 #else
51094         "mul	r6, r5\n\t"
51095 #endif
51096 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51097         "adds	r4, r4, r6\n\t"
51098 #else
51099         "add	r4, r4, r6\n\t"
51100 #endif
51101 #ifdef WOLFSSL_KEIL
51102         "adcs	r2, r2, %[r]\n\t"
51103 #elif defined(__clang__)
51104         "adcs	r2, %[r]\n\t"
51105 #else
51106         "adc	r2, %[r]\n\t"
51107 #endif
51108 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51109         "adds	r4, r4, r6\n\t"
51110 #else
51111         "add	r4, r4, r6\n\t"
51112 #endif
51113 #ifdef WOLFSSL_KEIL
51114         "adcs	r2, r2, %[r]\n\t"
51115 #elif defined(__clang__)
51116         "adcs	r2, %[r]\n\t"
51117 #else
51118         "adc	r2, %[r]\n\t"
51119 #endif
51120         "uxth	r6, r7\n\t"
51121 #ifdef WOLFSSL_KEIL
51122         "muls	r5, r6, r5\n\t"
51123 #elif defined(__clang__)
51124         "muls	r5, r6\n\t"
51125 #else
51126         "mul	r5, r6\n\t"
51127 #endif
51128 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51129         "lsrs	r6, r5, #16\n\t"
51130 #else
51131         "lsr	r6, r5, #16\n\t"
51132 #endif
51133 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51134         "lsls	r5, r5, #16\n\t"
51135 #else
51136         "lsl	r5, r5, #16\n\t"
51137 #endif
51138 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51139         "adds	r3, r3, r5\n\t"
51140 #else
51141         "add	r3, r3, r5\n\t"
51142 #endif
51143 #ifdef WOLFSSL_KEIL
51144         "adcs	r4, r4, r6\n\t"
51145 #elif defined(__clang__)
51146         "adcs	r4, r6\n\t"
51147 #else
51148         "adc	r4, r6\n\t"
51149 #endif
51150 #ifdef WOLFSSL_KEIL
51151         "adcs	r2, r2, %[r]\n\t"
51152 #elif defined(__clang__)
51153         "adcs	r2, %[r]\n\t"
51154 #else
51155         "adc	r2, %[r]\n\t"
51156 #endif
51157 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51158         "adds	r3, r3, r5\n\t"
51159 #else
51160         "add	r3, r3, r5\n\t"
51161 #endif
51162 #ifdef WOLFSSL_KEIL
51163         "adcs	r4, r4, r6\n\t"
51164 #elif defined(__clang__)
51165         "adcs	r4, r6\n\t"
51166 #else
51167         "adc	r4, r6\n\t"
51168 #endif
51169 #ifdef WOLFSSL_KEIL
51170         "adcs	r2, r2, %[r]\n\t"
51171 #elif defined(__clang__)
51172         "adcs	r2, %[r]\n\t"
51173 #else
51174         "adc	r2, %[r]\n\t"
51175 #endif
51176         "str	r3, [sp, #4]\n\t"
51177         "#  A[2] * A[0]\n\t"
51178         "movs	r3, #0\n\t"
51179         "mov	%[a], r9\n\t"
51180         "mov	%[a], r12\n\t"
51181         "uxth	r5, %[a]\n\t"
51182         "uxth	r6, r7\n\t"
51183 #ifdef WOLFSSL_KEIL
51184         "muls	r6, r5, r6\n\t"
51185 #elif defined(__clang__)
51186         "muls	r6, r5\n\t"
51187 #else
51188         "mul	r6, r5\n\t"
51189 #endif
51190 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51191         "adds	r4, r4, r6\n\t"
51192 #else
51193         "add	r4, r4, r6\n\t"
51194 #endif
51195 #ifdef WOLFSSL_KEIL
51196         "adcs	r2, r2, %[r]\n\t"
51197 #elif defined(__clang__)
51198         "adcs	r2, %[r]\n\t"
51199 #else
51200         "adc	r2, %[r]\n\t"
51201 #endif
51202 #ifdef WOLFSSL_KEIL
51203         "adcs	r3, r3, %[r]\n\t"
51204 #elif defined(__clang__)
51205         "adcs	r3, %[r]\n\t"
51206 #else
51207         "adc	r3, %[r]\n\t"
51208 #endif
51209 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51210         "adds	r4, r4, r6\n\t"
51211 #else
51212         "add	r4, r4, r6\n\t"
51213 #endif
51214 #ifdef WOLFSSL_KEIL
51215         "adcs	r2, r2, %[r]\n\t"
51216 #elif defined(__clang__)
51217         "adcs	r2, %[r]\n\t"
51218 #else
51219         "adc	r2, %[r]\n\t"
51220 #endif
51221 #ifdef WOLFSSL_KEIL
51222         "adcs	r3, r3, %[r]\n\t"
51223 #elif defined(__clang__)
51224         "adcs	r3, %[r]\n\t"
51225 #else
51226         "adc	r3, %[r]\n\t"
51227 #endif
51228 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51229         "lsrs	r6, r7, #16\n\t"
51230 #else
51231         "lsr	r6, r7, #16\n\t"
51232 #endif
51233 #ifdef WOLFSSL_KEIL
51234         "muls	r5, r6, r5\n\t"
51235 #elif defined(__clang__)
51236         "muls	r5, r6\n\t"
51237 #else
51238         "mul	r5, r6\n\t"
51239 #endif
51240 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51241         "lsrs	r6, r5, #16\n\t"
51242 #else
51243         "lsr	r6, r5, #16\n\t"
51244 #endif
51245 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51246         "lsls	r5, r5, #16\n\t"
51247 #else
51248         "lsl	r5, r5, #16\n\t"
51249 #endif
51250 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51251         "adds	r4, r4, r5\n\t"
51252 #else
51253         "add	r4, r4, r5\n\t"
51254 #endif
51255 #ifdef WOLFSSL_KEIL
51256         "adcs	r2, r2, r6\n\t"
51257 #elif defined(__clang__)
51258         "adcs	r2, r6\n\t"
51259 #else
51260         "adc	r2, r6\n\t"
51261 #endif
51262 #ifdef WOLFSSL_KEIL
51263         "adcs	r3, r3, %[r]\n\t"
51264 #elif defined(__clang__)
51265         "adcs	r3, %[r]\n\t"
51266 #else
51267         "adc	r3, %[r]\n\t"
51268 #endif
51269 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51270         "adds	r4, r4, r5\n\t"
51271 #else
51272         "add	r4, r4, r5\n\t"
51273 #endif
51274 #ifdef WOLFSSL_KEIL
51275         "adcs	r2, r2, r6\n\t"
51276 #elif defined(__clang__)
51277         "adcs	r2, r6\n\t"
51278 #else
51279         "adc	r2, r6\n\t"
51280 #endif
51281 #ifdef WOLFSSL_KEIL
51282         "adcs	r3, r3, %[r]\n\t"
51283 #elif defined(__clang__)
51284         "adcs	r3, %[r]\n\t"
51285 #else
51286         "adc	r3, %[r]\n\t"
51287 #endif
51288 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51289         "lsrs	r5, %[a], #16\n\t"
51290 #else
51291         "lsr	r5, %[a], #16\n\t"
51292 #endif
51293 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51294         "lsrs	r6, r7, #16\n\t"
51295 #else
51296         "lsr	r6, r7, #16\n\t"
51297 #endif
51298 #ifdef WOLFSSL_KEIL
51299         "muls	r6, r5, r6\n\t"
51300 #elif defined(__clang__)
51301         "muls	r6, r5\n\t"
51302 #else
51303         "mul	r6, r5\n\t"
51304 #endif
51305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51306         "adds	r2, r2, r6\n\t"
51307 #else
51308         "add	r2, r2, r6\n\t"
51309 #endif
51310 #ifdef WOLFSSL_KEIL
51311         "adcs	r3, r3, %[r]\n\t"
51312 #elif defined(__clang__)
51313         "adcs	r3, %[r]\n\t"
51314 #else
51315         "adc	r3, %[r]\n\t"
51316 #endif
51317 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51318         "adds	r2, r2, r6\n\t"
51319 #else
51320         "add	r2, r2, r6\n\t"
51321 #endif
51322 #ifdef WOLFSSL_KEIL
51323         "adcs	r3, r3, %[r]\n\t"
51324 #elif defined(__clang__)
51325         "adcs	r3, %[r]\n\t"
51326 #else
51327         "adc	r3, %[r]\n\t"
51328 #endif
51329         "uxth	r6, r7\n\t"
51330 #ifdef WOLFSSL_KEIL
51331         "muls	r5, r6, r5\n\t"
51332 #elif defined(__clang__)
51333         "muls	r5, r6\n\t"
51334 #else
51335         "mul	r5, r6\n\t"
51336 #endif
51337 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51338         "lsrs	r6, r5, #16\n\t"
51339 #else
51340         "lsr	r6, r5, #16\n\t"
51341 #endif
51342 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51343         "lsls	r5, r5, #16\n\t"
51344 #else
51345         "lsl	r5, r5, #16\n\t"
51346 #endif
51347 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51348         "adds	r4, r4, r5\n\t"
51349 #else
51350         "add	r4, r4, r5\n\t"
51351 #endif
51352 #ifdef WOLFSSL_KEIL
51353         "adcs	r2, r2, r6\n\t"
51354 #elif defined(__clang__)
51355         "adcs	r2, r6\n\t"
51356 #else
51357         "adc	r2, r6\n\t"
51358 #endif
51359 #ifdef WOLFSSL_KEIL
51360         "adcs	r3, r3, %[r]\n\t"
51361 #elif defined(__clang__)
51362         "adcs	r3, %[r]\n\t"
51363 #else
51364         "adc	r3, %[r]\n\t"
51365 #endif
51366 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51367         "adds	r4, r4, r5\n\t"
51368 #else
51369         "add	r4, r4, r5\n\t"
51370 #endif
51371 #ifdef WOLFSSL_KEIL
51372         "adcs	r2, r2, r6\n\t"
51373 #elif defined(__clang__)
51374         "adcs	r2, r6\n\t"
51375 #else
51376         "adc	r2, r6\n\t"
51377 #endif
51378 #ifdef WOLFSSL_KEIL
51379         "adcs	r3, r3, %[r]\n\t"
51380 #elif defined(__clang__)
51381         "adcs	r3, %[r]\n\t"
51382 #else
51383         "adc	r3, %[r]\n\t"
51384 #endif
51385         "#  A[1] * A[1]\n\t"
51386         "mov	r7, r11\n\t"
51387 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51388         "lsrs	r6, r7, #16\n\t"
51389 #else
51390         "lsr	r6, r7, #16\n\t"
51391 #endif
51392         "uxth	r5, r7\n\t"
51393 #ifdef WOLFSSL_KEIL
51394         "muls	r5, r5, r5\n\t"
51395 #elif defined(__clang__)
51396         "muls	r5, r5\n\t"
51397 #else
51398         "mul	r5, r5\n\t"
51399 #endif
51400 #ifdef WOLFSSL_KEIL
51401         "muls	r6, r6, r6\n\t"
51402 #elif defined(__clang__)
51403         "muls	r6, r6\n\t"
51404 #else
51405         "mul	r6, r6\n\t"
51406 #endif
51407 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51408         "adds	r4, r4, r5\n\t"
51409 #else
51410         "add	r4, r4, r5\n\t"
51411 #endif
51412 #ifdef WOLFSSL_KEIL
51413         "adcs	r2, r2, r6\n\t"
51414 #elif defined(__clang__)
51415         "adcs	r2, r6\n\t"
51416 #else
51417         "adc	r2, r6\n\t"
51418 #endif
51419 #ifdef WOLFSSL_KEIL
51420         "adcs	r3, r3, %[r]\n\t"
51421 #elif defined(__clang__)
51422         "adcs	r3, %[r]\n\t"
51423 #else
51424         "adc	r3, %[r]\n\t"
51425 #endif
51426 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51427         "lsrs	r6, r7, #16\n\t"
51428 #else
51429         "lsr	r6, r7, #16\n\t"
51430 #endif
51431         "uxth	r5, r7\n\t"
51432 #ifdef WOLFSSL_KEIL
51433         "muls	r5, r6, r5\n\t"
51434 #elif defined(__clang__)
51435         "muls	r5, r6\n\t"
51436 #else
51437         "mul	r5, r6\n\t"
51438 #endif
51439 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51440         "lsrs	r6, r5, #15\n\t"
51441 #else
51442         "lsr	r6, r5, #15\n\t"
51443 #endif
51444 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51445         "lsls	r5, r5, #17\n\t"
51446 #else
51447         "lsl	r5, r5, #17\n\t"
51448 #endif
51449 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51450         "adds	r4, r4, r5\n\t"
51451 #else
51452         "add	r4, r4, r5\n\t"
51453 #endif
51454 #ifdef WOLFSSL_KEIL
51455         "adcs	r2, r2, r6\n\t"
51456 #elif defined(__clang__)
51457         "adcs	r2, r6\n\t"
51458 #else
51459         "adc	r2, r6\n\t"
51460 #endif
51461 #ifdef WOLFSSL_KEIL
51462         "adcs	r3, r3, %[r]\n\t"
51463 #elif defined(__clang__)
51464         "adcs	r3, %[r]\n\t"
51465 #else
51466         "adc	r3, %[r]\n\t"
51467 #endif
51468         "str	r4, [sp, #8]\n\t"
51469         "#  A[2] * A[1]\n\t"
51470         "movs	r4, #0\n\t"
51471         "mov	%[a], r9\n\t"
51472         "mov	%[a], r12\n\t"
51473         "uxth	r5, %[a]\n\t"
51474         "uxth	r6, r7\n\t"
51475 #ifdef WOLFSSL_KEIL
51476         "muls	r6, r5, r6\n\t"
51477 #elif defined(__clang__)
51478         "muls	r6, r5\n\t"
51479 #else
51480         "mul	r6, r5\n\t"
51481 #endif
51482 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51483         "adds	r2, r2, r6\n\t"
51484 #else
51485         "add	r2, r2, r6\n\t"
51486 #endif
51487 #ifdef WOLFSSL_KEIL
51488         "adcs	r3, r3, %[r]\n\t"
51489 #elif defined(__clang__)
51490         "adcs	r3, %[r]\n\t"
51491 #else
51492         "adc	r3, %[r]\n\t"
51493 #endif
51494 #ifdef WOLFSSL_KEIL
51495         "adcs	r4, r4, %[r]\n\t"
51496 #elif defined(__clang__)
51497         "adcs	r4, %[r]\n\t"
51498 #else
51499         "adc	r4, %[r]\n\t"
51500 #endif
51501 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51502         "adds	r2, r2, r6\n\t"
51503 #else
51504         "add	r2, r2, r6\n\t"
51505 #endif
51506 #ifdef WOLFSSL_KEIL
51507         "adcs	r3, r3, %[r]\n\t"
51508 #elif defined(__clang__)
51509         "adcs	r3, %[r]\n\t"
51510 #else
51511         "adc	r3, %[r]\n\t"
51512 #endif
51513 #ifdef WOLFSSL_KEIL
51514         "adcs	r4, r4, %[r]\n\t"
51515 #elif defined(__clang__)
51516         "adcs	r4, %[r]\n\t"
51517 #else
51518         "adc	r4, %[r]\n\t"
51519 #endif
51520 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51521         "lsrs	r6, r7, #16\n\t"
51522 #else
51523         "lsr	r6, r7, #16\n\t"
51524 #endif
51525 #ifdef WOLFSSL_KEIL
51526         "muls	r5, r6, r5\n\t"
51527 #elif defined(__clang__)
51528         "muls	r5, r6\n\t"
51529 #else
51530         "mul	r5, r6\n\t"
51531 #endif
51532 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51533         "lsrs	r6, r5, #16\n\t"
51534 #else
51535         "lsr	r6, r5, #16\n\t"
51536 #endif
51537 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51538         "lsls	r5, r5, #16\n\t"
51539 #else
51540         "lsl	r5, r5, #16\n\t"
51541 #endif
51542 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51543         "adds	r2, r2, r5\n\t"
51544 #else
51545         "add	r2, r2, r5\n\t"
51546 #endif
51547 #ifdef WOLFSSL_KEIL
51548         "adcs	r3, r3, r6\n\t"
51549 #elif defined(__clang__)
51550         "adcs	r3, r6\n\t"
51551 #else
51552         "adc	r3, r6\n\t"
51553 #endif
51554 #ifdef WOLFSSL_KEIL
51555         "adcs	r4, r4, %[r]\n\t"
51556 #elif defined(__clang__)
51557         "adcs	r4, %[r]\n\t"
51558 #else
51559         "adc	r4, %[r]\n\t"
51560 #endif
51561 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51562         "adds	r2, r2, r5\n\t"
51563 #else
51564         "add	r2, r2, r5\n\t"
51565 #endif
51566 #ifdef WOLFSSL_KEIL
51567         "adcs	r3, r3, r6\n\t"
51568 #elif defined(__clang__)
51569         "adcs	r3, r6\n\t"
51570 #else
51571         "adc	r3, r6\n\t"
51572 #endif
51573 #ifdef WOLFSSL_KEIL
51574         "adcs	r4, r4, %[r]\n\t"
51575 #elif defined(__clang__)
51576         "adcs	r4, %[r]\n\t"
51577 #else
51578         "adc	r4, %[r]\n\t"
51579 #endif
51580 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51581         "lsrs	r5, %[a], #16\n\t"
51582 #else
51583         "lsr	r5, %[a], #16\n\t"
51584 #endif
51585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51586         "lsrs	r6, r7, #16\n\t"
51587 #else
51588         "lsr	r6, r7, #16\n\t"
51589 #endif
51590 #ifdef WOLFSSL_KEIL
51591         "muls	r6, r5, r6\n\t"
51592 #elif defined(__clang__)
51593         "muls	r6, r5\n\t"
51594 #else
51595         "mul	r6, r5\n\t"
51596 #endif
51597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51598         "adds	r3, r3, r6\n\t"
51599 #else
51600         "add	r3, r3, r6\n\t"
51601 #endif
51602 #ifdef WOLFSSL_KEIL
51603         "adcs	r4, r4, %[r]\n\t"
51604 #elif defined(__clang__)
51605         "adcs	r4, %[r]\n\t"
51606 #else
51607         "adc	r4, %[r]\n\t"
51608 #endif
51609 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51610         "adds	r3, r3, r6\n\t"
51611 #else
51612         "add	r3, r3, r6\n\t"
51613 #endif
51614 #ifdef WOLFSSL_KEIL
51615         "adcs	r4, r4, %[r]\n\t"
51616 #elif defined(__clang__)
51617         "adcs	r4, %[r]\n\t"
51618 #else
51619         "adc	r4, %[r]\n\t"
51620 #endif
51621         "uxth	r6, r7\n\t"
51622 #ifdef WOLFSSL_KEIL
51623         "muls	r5, r6, r5\n\t"
51624 #elif defined(__clang__)
51625         "muls	r5, r6\n\t"
51626 #else
51627         "mul	r5, r6\n\t"
51628 #endif
51629 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51630         "lsrs	r6, r5, #16\n\t"
51631 #else
51632         "lsr	r6, r5, #16\n\t"
51633 #endif
51634 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51635         "lsls	r5, r5, #16\n\t"
51636 #else
51637         "lsl	r5, r5, #16\n\t"
51638 #endif
51639 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51640         "adds	r2, r2, r5\n\t"
51641 #else
51642         "add	r2, r2, r5\n\t"
51643 #endif
51644 #ifdef WOLFSSL_KEIL
51645         "adcs	r3, r3, r6\n\t"
51646 #elif defined(__clang__)
51647         "adcs	r3, r6\n\t"
51648 #else
51649         "adc	r3, r6\n\t"
51650 #endif
51651 #ifdef WOLFSSL_KEIL
51652         "adcs	r4, r4, %[r]\n\t"
51653 #elif defined(__clang__)
51654         "adcs	r4, %[r]\n\t"
51655 #else
51656         "adc	r4, %[r]\n\t"
51657 #endif
51658 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51659         "adds	r2, r2, r5\n\t"
51660 #else
51661         "add	r2, r2, r5\n\t"
51662 #endif
51663 #ifdef WOLFSSL_KEIL
51664         "adcs	r3, r3, r6\n\t"
51665 #elif defined(__clang__)
51666         "adcs	r3, r6\n\t"
51667 #else
51668         "adc	r3, r6\n\t"
51669 #endif
51670 #ifdef WOLFSSL_KEIL
51671         "adcs	r4, r4, %[r]\n\t"
51672 #elif defined(__clang__)
51673         "adcs	r4, %[r]\n\t"
51674 #else
51675         "adc	r4, %[r]\n\t"
51676 #endif
51677         "#  A[3] * A[0]\n\t"
51678         "mov	%[a], r9\n\t"
51679         "mov	r7, r10\n\t"
51680         "mov	%[a], lr\n\t"
51681         "uxth	r5, %[a]\n\t"
51682         "uxth	r6, r7\n\t"
51683 #ifdef WOLFSSL_KEIL
51684         "muls	r6, r5, r6\n\t"
51685 #elif defined(__clang__)
51686         "muls	r6, r5\n\t"
51687 #else
51688         "mul	r6, r5\n\t"
51689 #endif
51690 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51691         "adds	r2, r2, r6\n\t"
51692 #else
51693         "add	r2, r2, r6\n\t"
51694 #endif
51695 #ifdef WOLFSSL_KEIL
51696         "adcs	r3, r3, %[r]\n\t"
51697 #elif defined(__clang__)
51698         "adcs	r3, %[r]\n\t"
51699 #else
51700         "adc	r3, %[r]\n\t"
51701 #endif
51702 #ifdef WOLFSSL_KEIL
51703         "adcs	r4, r4, %[r]\n\t"
51704 #elif defined(__clang__)
51705         "adcs	r4, %[r]\n\t"
51706 #else
51707         "adc	r4, %[r]\n\t"
51708 #endif
51709 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51710         "adds	r2, r2, r6\n\t"
51711 #else
51712         "add	r2, r2, r6\n\t"
51713 #endif
51714 #ifdef WOLFSSL_KEIL
51715         "adcs	r3, r3, %[r]\n\t"
51716 #elif defined(__clang__)
51717         "adcs	r3, %[r]\n\t"
51718 #else
51719         "adc	r3, %[r]\n\t"
51720 #endif
51721 #ifdef WOLFSSL_KEIL
51722         "adcs	r4, r4, %[r]\n\t"
51723 #elif defined(__clang__)
51724         "adcs	r4, %[r]\n\t"
51725 #else
51726         "adc	r4, %[r]\n\t"
51727 #endif
51728 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51729         "lsrs	r6, r7, #16\n\t"
51730 #else
51731         "lsr	r6, r7, #16\n\t"
51732 #endif
51733 #ifdef WOLFSSL_KEIL
51734         "muls	r5, r6, r5\n\t"
51735 #elif defined(__clang__)
51736         "muls	r5, r6\n\t"
51737 #else
51738         "mul	r5, r6\n\t"
51739 #endif
51740 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51741         "lsrs	r6, r5, #16\n\t"
51742 #else
51743         "lsr	r6, r5, #16\n\t"
51744 #endif
51745 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51746         "lsls	r5, r5, #16\n\t"
51747 #else
51748         "lsl	r5, r5, #16\n\t"
51749 #endif
51750 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51751         "adds	r2, r2, r5\n\t"
51752 #else
51753         "add	r2, r2, r5\n\t"
51754 #endif
51755 #ifdef WOLFSSL_KEIL
51756         "adcs	r3, r3, r6\n\t"
51757 #elif defined(__clang__)
51758         "adcs	r3, r6\n\t"
51759 #else
51760         "adc	r3, r6\n\t"
51761 #endif
51762 #ifdef WOLFSSL_KEIL
51763         "adcs	r4, r4, %[r]\n\t"
51764 #elif defined(__clang__)
51765         "adcs	r4, %[r]\n\t"
51766 #else
51767         "adc	r4, %[r]\n\t"
51768 #endif
51769 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51770         "adds	r2, r2, r5\n\t"
51771 #else
51772         "add	r2, r2, r5\n\t"
51773 #endif
51774 #ifdef WOLFSSL_KEIL
51775         "adcs	r3, r3, r6\n\t"
51776 #elif defined(__clang__)
51777         "adcs	r3, r6\n\t"
51778 #else
51779         "adc	r3, r6\n\t"
51780 #endif
51781 #ifdef WOLFSSL_KEIL
51782         "adcs	r4, r4, %[r]\n\t"
51783 #elif defined(__clang__)
51784         "adcs	r4, %[r]\n\t"
51785 #else
51786         "adc	r4, %[r]\n\t"
51787 #endif
51788 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51789         "lsrs	r5, %[a], #16\n\t"
51790 #else
51791         "lsr	r5, %[a], #16\n\t"
51792 #endif
51793 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51794         "lsrs	r6, r7, #16\n\t"
51795 #else
51796         "lsr	r6, r7, #16\n\t"
51797 #endif
51798 #ifdef WOLFSSL_KEIL
51799         "muls	r6, r5, r6\n\t"
51800 #elif defined(__clang__)
51801         "muls	r6, r5\n\t"
51802 #else
51803         "mul	r6, r5\n\t"
51804 #endif
51805 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51806         "adds	r3, r3, r6\n\t"
51807 #else
51808         "add	r3, r3, r6\n\t"
51809 #endif
51810 #ifdef WOLFSSL_KEIL
51811         "adcs	r4, r4, %[r]\n\t"
51812 #elif defined(__clang__)
51813         "adcs	r4, %[r]\n\t"
51814 #else
51815         "adc	r4, %[r]\n\t"
51816 #endif
51817 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51818         "adds	r3, r3, r6\n\t"
51819 #else
51820         "add	r3, r3, r6\n\t"
51821 #endif
51822 #ifdef WOLFSSL_KEIL
51823         "adcs	r4, r4, %[r]\n\t"
51824 #elif defined(__clang__)
51825         "adcs	r4, %[r]\n\t"
51826 #else
51827         "adc	r4, %[r]\n\t"
51828 #endif
51829         "uxth	r6, r7\n\t"
51830 #ifdef WOLFSSL_KEIL
51831         "muls	r5, r6, r5\n\t"
51832 #elif defined(__clang__)
51833         "muls	r5, r6\n\t"
51834 #else
51835         "mul	r5, r6\n\t"
51836 #endif
51837 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51838         "lsrs	r6, r5, #16\n\t"
51839 #else
51840         "lsr	r6, r5, #16\n\t"
51841 #endif
51842 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51843         "lsls	r5, r5, #16\n\t"
51844 #else
51845         "lsl	r5, r5, #16\n\t"
51846 #endif
51847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51848         "adds	r2, r2, r5\n\t"
51849 #else
51850         "add	r2, r2, r5\n\t"
51851 #endif
51852 #ifdef WOLFSSL_KEIL
51853         "adcs	r3, r3, r6\n\t"
51854 #elif defined(__clang__)
51855         "adcs	r3, r6\n\t"
51856 #else
51857         "adc	r3, r6\n\t"
51858 #endif
51859 #ifdef WOLFSSL_KEIL
51860         "adcs	r4, r4, %[r]\n\t"
51861 #elif defined(__clang__)
51862         "adcs	r4, %[r]\n\t"
51863 #else
51864         "adc	r4, %[r]\n\t"
51865 #endif
51866 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51867         "adds	r2, r2, r5\n\t"
51868 #else
51869         "add	r2, r2, r5\n\t"
51870 #endif
51871 #ifdef WOLFSSL_KEIL
51872         "adcs	r3, r3, r6\n\t"
51873 #elif defined(__clang__)
51874         "adcs	r3, r6\n\t"
51875 #else
51876         "adc	r3, r6\n\t"
51877 #endif
51878 #ifdef WOLFSSL_KEIL
51879         "adcs	r4, r4, %[r]\n\t"
51880 #elif defined(__clang__)
51881         "adcs	r4, %[r]\n\t"
51882 #else
51883         "adc	r4, %[r]\n\t"
51884 #endif
51885         "str	r2, [sp, #12]\n\t"
51886         "#  A[4] * A[0]\n\t"
51887         "movs	r2, #0\n\t"
51888         "mov	%[a], r9\n\t"
51889         "ldr	%[a], [%[a], #16]\n\t"
51890         "uxth	r5, %[a]\n\t"
51891         "uxth	r6, r7\n\t"
51892 #ifdef WOLFSSL_KEIL
51893         "muls	r6, r5, r6\n\t"
51894 #elif defined(__clang__)
51895         "muls	r6, r5\n\t"
51896 #else
51897         "mul	r6, r5\n\t"
51898 #endif
51899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51900         "adds	r3, r3, r6\n\t"
51901 #else
51902         "add	r3, r3, r6\n\t"
51903 #endif
51904 #ifdef WOLFSSL_KEIL
51905         "adcs	r4, r4, %[r]\n\t"
51906 #elif defined(__clang__)
51907         "adcs	r4, %[r]\n\t"
51908 #else
51909         "adc	r4, %[r]\n\t"
51910 #endif
51911 #ifdef WOLFSSL_KEIL
51912         "adcs	r2, r2, %[r]\n\t"
51913 #elif defined(__clang__)
51914         "adcs	r2, %[r]\n\t"
51915 #else
51916         "adc	r2, %[r]\n\t"
51917 #endif
51918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51919         "adds	r3, r3, r6\n\t"
51920 #else
51921         "add	r3, r3, r6\n\t"
51922 #endif
51923 #ifdef WOLFSSL_KEIL
51924         "adcs	r4, r4, %[r]\n\t"
51925 #elif defined(__clang__)
51926         "adcs	r4, %[r]\n\t"
51927 #else
51928         "adc	r4, %[r]\n\t"
51929 #endif
51930 #ifdef WOLFSSL_KEIL
51931         "adcs	r2, r2, %[r]\n\t"
51932 #elif defined(__clang__)
51933         "adcs	r2, %[r]\n\t"
51934 #else
51935         "adc	r2, %[r]\n\t"
51936 #endif
51937 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51938         "lsrs	r6, r7, #16\n\t"
51939 #else
51940         "lsr	r6, r7, #16\n\t"
51941 #endif
51942 #ifdef WOLFSSL_KEIL
51943         "muls	r5, r6, r5\n\t"
51944 #elif defined(__clang__)
51945         "muls	r5, r6\n\t"
51946 #else
51947         "mul	r5, r6\n\t"
51948 #endif
51949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51950         "lsrs	r6, r5, #16\n\t"
51951 #else
51952         "lsr	r6, r5, #16\n\t"
51953 #endif
51954 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51955         "lsls	r5, r5, #16\n\t"
51956 #else
51957         "lsl	r5, r5, #16\n\t"
51958 #endif
51959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51960         "adds	r3, r3, r5\n\t"
51961 #else
51962         "add	r3, r3, r5\n\t"
51963 #endif
51964 #ifdef WOLFSSL_KEIL
51965         "adcs	r4, r4, r6\n\t"
51966 #elif defined(__clang__)
51967         "adcs	r4, r6\n\t"
51968 #else
51969         "adc	r4, r6\n\t"
51970 #endif
51971 #ifdef WOLFSSL_KEIL
51972         "adcs	r2, r2, %[r]\n\t"
51973 #elif defined(__clang__)
51974         "adcs	r2, %[r]\n\t"
51975 #else
51976         "adc	r2, %[r]\n\t"
51977 #endif
51978 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51979         "adds	r3, r3, r5\n\t"
51980 #else
51981         "add	r3, r3, r5\n\t"
51982 #endif
51983 #ifdef WOLFSSL_KEIL
51984         "adcs	r4, r4, r6\n\t"
51985 #elif defined(__clang__)
51986         "adcs	r4, r6\n\t"
51987 #else
51988         "adc	r4, r6\n\t"
51989 #endif
51990 #ifdef WOLFSSL_KEIL
51991         "adcs	r2, r2, %[r]\n\t"
51992 #elif defined(__clang__)
51993         "adcs	r2, %[r]\n\t"
51994 #else
51995         "adc	r2, %[r]\n\t"
51996 #endif
51997 #if defined(__clang__) || defined(WOLFSSL_KEIL)
51998         "lsrs	r5, %[a], #16\n\t"
51999 #else
52000         "lsr	r5, %[a], #16\n\t"
52001 #endif
52002 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52003         "lsrs	r6, r7, #16\n\t"
52004 #else
52005         "lsr	r6, r7, #16\n\t"
52006 #endif
52007 #ifdef WOLFSSL_KEIL
52008         "muls	r6, r5, r6\n\t"
52009 #elif defined(__clang__)
52010         "muls	r6, r5\n\t"
52011 #else
52012         "mul	r6, r5\n\t"
52013 #endif
52014 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52015         "adds	r4, r4, r6\n\t"
52016 #else
52017         "add	r4, r4, r6\n\t"
52018 #endif
52019 #ifdef WOLFSSL_KEIL
52020         "adcs	r2, r2, %[r]\n\t"
52021 #elif defined(__clang__)
52022         "adcs	r2, %[r]\n\t"
52023 #else
52024         "adc	r2, %[r]\n\t"
52025 #endif
52026 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52027         "adds	r4, r4, r6\n\t"
52028 #else
52029         "add	r4, r4, r6\n\t"
52030 #endif
52031 #ifdef WOLFSSL_KEIL
52032         "adcs	r2, r2, %[r]\n\t"
52033 #elif defined(__clang__)
52034         "adcs	r2, %[r]\n\t"
52035 #else
52036         "adc	r2, %[r]\n\t"
52037 #endif
52038         "uxth	r6, r7\n\t"
52039 #ifdef WOLFSSL_KEIL
52040         "muls	r5, r6, r5\n\t"
52041 #elif defined(__clang__)
52042         "muls	r5, r6\n\t"
52043 #else
52044         "mul	r5, r6\n\t"
52045 #endif
52046 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52047         "lsrs	r6, r5, #16\n\t"
52048 #else
52049         "lsr	r6, r5, #16\n\t"
52050 #endif
52051 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52052         "lsls	r5, r5, #16\n\t"
52053 #else
52054         "lsl	r5, r5, #16\n\t"
52055 #endif
52056 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52057         "adds	r3, r3, r5\n\t"
52058 #else
52059         "add	r3, r3, r5\n\t"
52060 #endif
52061 #ifdef WOLFSSL_KEIL
52062         "adcs	r4, r4, r6\n\t"
52063 #elif defined(__clang__)
52064         "adcs	r4, r6\n\t"
52065 #else
52066         "adc	r4, r6\n\t"
52067 #endif
52068 #ifdef WOLFSSL_KEIL
52069         "adcs	r2, r2, %[r]\n\t"
52070 #elif defined(__clang__)
52071         "adcs	r2, %[r]\n\t"
52072 #else
52073         "adc	r2, %[r]\n\t"
52074 #endif
52075 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52076         "adds	r3, r3, r5\n\t"
52077 #else
52078         "add	r3, r3, r5\n\t"
52079 #endif
52080 #ifdef WOLFSSL_KEIL
52081         "adcs	r4, r4, r6\n\t"
52082 #elif defined(__clang__)
52083         "adcs	r4, r6\n\t"
52084 #else
52085         "adc	r4, r6\n\t"
52086 #endif
52087 #ifdef WOLFSSL_KEIL
52088         "adcs	r2, r2, %[r]\n\t"
52089 #elif defined(__clang__)
52090         "adcs	r2, %[r]\n\t"
52091 #else
52092         "adc	r2, %[r]\n\t"
52093 #endif
52094         "#  A[3] * A[1]\n\t"
52095         "mov	%[a], r9\n\t"
52096         "mov	r7, r11\n\t"
52097         "mov	%[a], lr\n\t"
52098         "uxth	r5, %[a]\n\t"
52099         "uxth	r6, r7\n\t"
52100 #ifdef WOLFSSL_KEIL
52101         "muls	r6, r5, r6\n\t"
52102 #elif defined(__clang__)
52103         "muls	r6, r5\n\t"
52104 #else
52105         "mul	r6, r5\n\t"
52106 #endif
52107 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52108         "adds	r3, r3, r6\n\t"
52109 #else
52110         "add	r3, r3, r6\n\t"
52111 #endif
52112 #ifdef WOLFSSL_KEIL
52113         "adcs	r4, r4, %[r]\n\t"
52114 #elif defined(__clang__)
52115         "adcs	r4, %[r]\n\t"
52116 #else
52117         "adc	r4, %[r]\n\t"
52118 #endif
52119 #ifdef WOLFSSL_KEIL
52120         "adcs	r2, r2, %[r]\n\t"
52121 #elif defined(__clang__)
52122         "adcs	r2, %[r]\n\t"
52123 #else
52124         "adc	r2, %[r]\n\t"
52125 #endif
52126 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52127         "adds	r3, r3, r6\n\t"
52128 #else
52129         "add	r3, r3, r6\n\t"
52130 #endif
52131 #ifdef WOLFSSL_KEIL
52132         "adcs	r4, r4, %[r]\n\t"
52133 #elif defined(__clang__)
52134         "adcs	r4, %[r]\n\t"
52135 #else
52136         "adc	r4, %[r]\n\t"
52137 #endif
52138 #ifdef WOLFSSL_KEIL
52139         "adcs	r2, r2, %[r]\n\t"
52140 #elif defined(__clang__)
52141         "adcs	r2, %[r]\n\t"
52142 #else
52143         "adc	r2, %[r]\n\t"
52144 #endif
52145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52146         "lsrs	r6, r7, #16\n\t"
52147 #else
52148         "lsr	r6, r7, #16\n\t"
52149 #endif
52150 #ifdef WOLFSSL_KEIL
52151         "muls	r5, r6, r5\n\t"
52152 #elif defined(__clang__)
52153         "muls	r5, r6\n\t"
52154 #else
52155         "mul	r5, r6\n\t"
52156 #endif
52157 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52158         "lsrs	r6, r5, #16\n\t"
52159 #else
52160         "lsr	r6, r5, #16\n\t"
52161 #endif
52162 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52163         "lsls	r5, r5, #16\n\t"
52164 #else
52165         "lsl	r5, r5, #16\n\t"
52166 #endif
52167 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52168         "adds	r3, r3, r5\n\t"
52169 #else
52170         "add	r3, r3, r5\n\t"
52171 #endif
52172 #ifdef WOLFSSL_KEIL
52173         "adcs	r4, r4, r6\n\t"
52174 #elif defined(__clang__)
52175         "adcs	r4, r6\n\t"
52176 #else
52177         "adc	r4, r6\n\t"
52178 #endif
52179 #ifdef WOLFSSL_KEIL
52180         "adcs	r2, r2, %[r]\n\t"
52181 #elif defined(__clang__)
52182         "adcs	r2, %[r]\n\t"
52183 #else
52184         "adc	r2, %[r]\n\t"
52185 #endif
52186 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52187         "adds	r3, r3, r5\n\t"
52188 #else
52189         "add	r3, r3, r5\n\t"
52190 #endif
52191 #ifdef WOLFSSL_KEIL
52192         "adcs	r4, r4, r6\n\t"
52193 #elif defined(__clang__)
52194         "adcs	r4, r6\n\t"
52195 #else
52196         "adc	r4, r6\n\t"
52197 #endif
52198 #ifdef WOLFSSL_KEIL
52199         "adcs	r2, r2, %[r]\n\t"
52200 #elif defined(__clang__)
52201         "adcs	r2, %[r]\n\t"
52202 #else
52203         "adc	r2, %[r]\n\t"
52204 #endif
52205 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52206         "lsrs	r5, %[a], #16\n\t"
52207 #else
52208         "lsr	r5, %[a], #16\n\t"
52209 #endif
52210 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52211         "lsrs	r6, r7, #16\n\t"
52212 #else
52213         "lsr	r6, r7, #16\n\t"
52214 #endif
52215 #ifdef WOLFSSL_KEIL
52216         "muls	r6, r5, r6\n\t"
52217 #elif defined(__clang__)
52218         "muls	r6, r5\n\t"
52219 #else
52220         "mul	r6, r5\n\t"
52221 #endif
52222 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52223         "adds	r4, r4, r6\n\t"
52224 #else
52225         "add	r4, r4, r6\n\t"
52226 #endif
52227 #ifdef WOLFSSL_KEIL
52228         "adcs	r2, r2, %[r]\n\t"
52229 #elif defined(__clang__)
52230         "adcs	r2, %[r]\n\t"
52231 #else
52232         "adc	r2, %[r]\n\t"
52233 #endif
52234 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52235         "adds	r4, r4, r6\n\t"
52236 #else
52237         "add	r4, r4, r6\n\t"
52238 #endif
52239 #ifdef WOLFSSL_KEIL
52240         "adcs	r2, r2, %[r]\n\t"
52241 #elif defined(__clang__)
52242         "adcs	r2, %[r]\n\t"
52243 #else
52244         "adc	r2, %[r]\n\t"
52245 #endif
52246         "uxth	r6, r7\n\t"
52247 #ifdef WOLFSSL_KEIL
52248         "muls	r5, r6, r5\n\t"
52249 #elif defined(__clang__)
52250         "muls	r5, r6\n\t"
52251 #else
52252         "mul	r5, r6\n\t"
52253 #endif
52254 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52255         "lsrs	r6, r5, #16\n\t"
52256 #else
52257         "lsr	r6, r5, #16\n\t"
52258 #endif
52259 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52260         "lsls	r5, r5, #16\n\t"
52261 #else
52262         "lsl	r5, r5, #16\n\t"
52263 #endif
52264 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52265         "adds	r3, r3, r5\n\t"
52266 #else
52267         "add	r3, r3, r5\n\t"
52268 #endif
52269 #ifdef WOLFSSL_KEIL
52270         "adcs	r4, r4, r6\n\t"
52271 #elif defined(__clang__)
52272         "adcs	r4, r6\n\t"
52273 #else
52274         "adc	r4, r6\n\t"
52275 #endif
52276 #ifdef WOLFSSL_KEIL
52277         "adcs	r2, r2, %[r]\n\t"
52278 #elif defined(__clang__)
52279         "adcs	r2, %[r]\n\t"
52280 #else
52281         "adc	r2, %[r]\n\t"
52282 #endif
52283 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52284         "adds	r3, r3, r5\n\t"
52285 #else
52286         "add	r3, r3, r5\n\t"
52287 #endif
52288 #ifdef WOLFSSL_KEIL
52289         "adcs	r4, r4, r6\n\t"
52290 #elif defined(__clang__)
52291         "adcs	r4, r6\n\t"
52292 #else
52293         "adc	r4, r6\n\t"
52294 #endif
52295 #ifdef WOLFSSL_KEIL
52296         "adcs	r2, r2, %[r]\n\t"
52297 #elif defined(__clang__)
52298         "adcs	r2, %[r]\n\t"
52299 #else
52300         "adc	r2, %[r]\n\t"
52301 #endif
52302         "#  A[2] * A[2]\n\t"
52303         "mov	r7, r12\n\t"
52304 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52305         "lsrs	r6, r7, #16\n\t"
52306 #else
52307         "lsr	r6, r7, #16\n\t"
52308 #endif
52309         "uxth	r5, r7\n\t"
52310 #ifdef WOLFSSL_KEIL
52311         "muls	r5, r5, r5\n\t"
52312 #elif defined(__clang__)
52313         "muls	r5, r5\n\t"
52314 #else
52315         "mul	r5, r5\n\t"
52316 #endif
52317 #ifdef WOLFSSL_KEIL
52318         "muls	r6, r6, r6\n\t"
52319 #elif defined(__clang__)
52320         "muls	r6, r6\n\t"
52321 #else
52322         "mul	r6, r6\n\t"
52323 #endif
52324 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52325         "adds	r3, r3, r5\n\t"
52326 #else
52327         "add	r3, r3, r5\n\t"
52328 #endif
52329 #ifdef WOLFSSL_KEIL
52330         "adcs	r4, r4, r6\n\t"
52331 #elif defined(__clang__)
52332         "adcs	r4, r6\n\t"
52333 #else
52334         "adc	r4, r6\n\t"
52335 #endif
52336 #ifdef WOLFSSL_KEIL
52337         "adcs	r2, r2, %[r]\n\t"
52338 #elif defined(__clang__)
52339         "adcs	r2, %[r]\n\t"
52340 #else
52341         "adc	r2, %[r]\n\t"
52342 #endif
52343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52344         "lsrs	r6, r7, #16\n\t"
52345 #else
52346         "lsr	r6, r7, #16\n\t"
52347 #endif
52348         "uxth	r5, r7\n\t"
52349 #ifdef WOLFSSL_KEIL
52350         "muls	r5, r6, r5\n\t"
52351 #elif defined(__clang__)
52352         "muls	r5, r6\n\t"
52353 #else
52354         "mul	r5, r6\n\t"
52355 #endif
52356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52357         "lsrs	r6, r5, #15\n\t"
52358 #else
52359         "lsr	r6, r5, #15\n\t"
52360 #endif
52361 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52362         "lsls	r5, r5, #17\n\t"
52363 #else
52364         "lsl	r5, r5, #17\n\t"
52365 #endif
52366 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52367         "adds	r3, r3, r5\n\t"
52368 #else
52369         "add	r3, r3, r5\n\t"
52370 #endif
52371 #ifdef WOLFSSL_KEIL
52372         "adcs	r4, r4, r6\n\t"
52373 #elif defined(__clang__)
52374         "adcs	r4, r6\n\t"
52375 #else
52376         "adc	r4, r6\n\t"
52377 #endif
52378 #ifdef WOLFSSL_KEIL
52379         "adcs	r2, r2, %[r]\n\t"
52380 #elif defined(__clang__)
52381         "adcs	r2, %[r]\n\t"
52382 #else
52383         "adc	r2, %[r]\n\t"
52384 #endif
52385         "str	r3, [sp, #16]\n\t"
52386         "#  A[3] * A[2]\n\t"
52387         "movs	r3, #0\n\t"
52388         "mov	%[a], r9\n\t"
52389         "mov	%[a], lr\n\t"
52390         "uxth	r5, %[a]\n\t"
52391         "uxth	r6, r7\n\t"
52392 #ifdef WOLFSSL_KEIL
52393         "muls	r6, r5, r6\n\t"
52394 #elif defined(__clang__)
52395         "muls	r6, r5\n\t"
52396 #else
52397         "mul	r6, r5\n\t"
52398 #endif
52399 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52400         "adds	r4, r4, r6\n\t"
52401 #else
52402         "add	r4, r4, r6\n\t"
52403 #endif
52404 #ifdef WOLFSSL_KEIL
52405         "adcs	r2, r2, %[r]\n\t"
52406 #elif defined(__clang__)
52407         "adcs	r2, %[r]\n\t"
52408 #else
52409         "adc	r2, %[r]\n\t"
52410 #endif
52411 #ifdef WOLFSSL_KEIL
52412         "adcs	r3, r3, %[r]\n\t"
52413 #elif defined(__clang__)
52414         "adcs	r3, %[r]\n\t"
52415 #else
52416         "adc	r3, %[r]\n\t"
52417 #endif
52418 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52419         "adds	r4, r4, r6\n\t"
52420 #else
52421         "add	r4, r4, r6\n\t"
52422 #endif
52423 #ifdef WOLFSSL_KEIL
52424         "adcs	r2, r2, %[r]\n\t"
52425 #elif defined(__clang__)
52426         "adcs	r2, %[r]\n\t"
52427 #else
52428         "adc	r2, %[r]\n\t"
52429 #endif
52430 #ifdef WOLFSSL_KEIL
52431         "adcs	r3, r3, %[r]\n\t"
52432 #elif defined(__clang__)
52433         "adcs	r3, %[r]\n\t"
52434 #else
52435         "adc	r3, %[r]\n\t"
52436 #endif
52437 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52438         "lsrs	r6, r7, #16\n\t"
52439 #else
52440         "lsr	r6, r7, #16\n\t"
52441 #endif
52442 #ifdef WOLFSSL_KEIL
52443         "muls	r5, r6, r5\n\t"
52444 #elif defined(__clang__)
52445         "muls	r5, r6\n\t"
52446 #else
52447         "mul	r5, r6\n\t"
52448 #endif
52449 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52450         "lsrs	r6, r5, #16\n\t"
52451 #else
52452         "lsr	r6, r5, #16\n\t"
52453 #endif
52454 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52455         "lsls	r5, r5, #16\n\t"
52456 #else
52457         "lsl	r5, r5, #16\n\t"
52458 #endif
52459 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52460         "adds	r4, r4, r5\n\t"
52461 #else
52462         "add	r4, r4, r5\n\t"
52463 #endif
52464 #ifdef WOLFSSL_KEIL
52465         "adcs	r2, r2, r6\n\t"
52466 #elif defined(__clang__)
52467         "adcs	r2, r6\n\t"
52468 #else
52469         "adc	r2, r6\n\t"
52470 #endif
52471 #ifdef WOLFSSL_KEIL
52472         "adcs	r3, r3, %[r]\n\t"
52473 #elif defined(__clang__)
52474         "adcs	r3, %[r]\n\t"
52475 #else
52476         "adc	r3, %[r]\n\t"
52477 #endif
52478 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52479         "adds	r4, r4, r5\n\t"
52480 #else
52481         "add	r4, r4, r5\n\t"
52482 #endif
52483 #ifdef WOLFSSL_KEIL
52484         "adcs	r2, r2, r6\n\t"
52485 #elif defined(__clang__)
52486         "adcs	r2, r6\n\t"
52487 #else
52488         "adc	r2, r6\n\t"
52489 #endif
52490 #ifdef WOLFSSL_KEIL
52491         "adcs	r3, r3, %[r]\n\t"
52492 #elif defined(__clang__)
52493         "adcs	r3, %[r]\n\t"
52494 #else
52495         "adc	r3, %[r]\n\t"
52496 #endif
52497 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52498         "lsrs	r5, %[a], #16\n\t"
52499 #else
52500         "lsr	r5, %[a], #16\n\t"
52501 #endif
52502 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52503         "lsrs	r6, r7, #16\n\t"
52504 #else
52505         "lsr	r6, r7, #16\n\t"
52506 #endif
52507 #ifdef WOLFSSL_KEIL
52508         "muls	r6, r5, r6\n\t"
52509 #elif defined(__clang__)
52510         "muls	r6, r5\n\t"
52511 #else
52512         "mul	r6, r5\n\t"
52513 #endif
52514 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52515         "adds	r2, r2, r6\n\t"
52516 #else
52517         "add	r2, r2, r6\n\t"
52518 #endif
52519 #ifdef WOLFSSL_KEIL
52520         "adcs	r3, r3, %[r]\n\t"
52521 #elif defined(__clang__)
52522         "adcs	r3, %[r]\n\t"
52523 #else
52524         "adc	r3, %[r]\n\t"
52525 #endif
52526 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52527         "adds	r2, r2, r6\n\t"
52528 #else
52529         "add	r2, r2, r6\n\t"
52530 #endif
52531 #ifdef WOLFSSL_KEIL
52532         "adcs	r3, r3, %[r]\n\t"
52533 #elif defined(__clang__)
52534         "adcs	r3, %[r]\n\t"
52535 #else
52536         "adc	r3, %[r]\n\t"
52537 #endif
52538         "uxth	r6, r7\n\t"
52539 #ifdef WOLFSSL_KEIL
52540         "muls	r5, r6, r5\n\t"
52541 #elif defined(__clang__)
52542         "muls	r5, r6\n\t"
52543 #else
52544         "mul	r5, r6\n\t"
52545 #endif
52546 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52547         "lsrs	r6, r5, #16\n\t"
52548 #else
52549         "lsr	r6, r5, #16\n\t"
52550 #endif
52551 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52552         "lsls	r5, r5, #16\n\t"
52553 #else
52554         "lsl	r5, r5, #16\n\t"
52555 #endif
52556 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52557         "adds	r4, r4, r5\n\t"
52558 #else
52559         "add	r4, r4, r5\n\t"
52560 #endif
52561 #ifdef WOLFSSL_KEIL
52562         "adcs	r2, r2, r6\n\t"
52563 #elif defined(__clang__)
52564         "adcs	r2, r6\n\t"
52565 #else
52566         "adc	r2, r6\n\t"
52567 #endif
52568 #ifdef WOLFSSL_KEIL
52569         "adcs	r3, r3, %[r]\n\t"
52570 #elif defined(__clang__)
52571         "adcs	r3, %[r]\n\t"
52572 #else
52573         "adc	r3, %[r]\n\t"
52574 #endif
52575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52576         "adds	r4, r4, r5\n\t"
52577 #else
52578         "add	r4, r4, r5\n\t"
52579 #endif
52580 #ifdef WOLFSSL_KEIL
52581         "adcs	r2, r2, r6\n\t"
52582 #elif defined(__clang__)
52583         "adcs	r2, r6\n\t"
52584 #else
52585         "adc	r2, r6\n\t"
52586 #endif
52587 #ifdef WOLFSSL_KEIL
52588         "adcs	r3, r3, %[r]\n\t"
52589 #elif defined(__clang__)
52590         "adcs	r3, %[r]\n\t"
52591 #else
52592         "adc	r3, %[r]\n\t"
52593 #endif
52594         "#  A[4] * A[1]\n\t"
52595         "mov	%[a], r9\n\t"
52596         "mov	r7, r11\n\t"
52597         "ldr	%[a], [%[a], #16]\n\t"
52598         "uxth	r5, %[a]\n\t"
52599         "uxth	r6, r7\n\t"
52600 #ifdef WOLFSSL_KEIL
52601         "muls	r6, r5, r6\n\t"
52602 #elif defined(__clang__)
52603         "muls	r6, r5\n\t"
52604 #else
52605         "mul	r6, r5\n\t"
52606 #endif
52607 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52608         "adds	r4, r4, r6\n\t"
52609 #else
52610         "add	r4, r4, r6\n\t"
52611 #endif
52612 #ifdef WOLFSSL_KEIL
52613         "adcs	r2, r2, %[r]\n\t"
52614 #elif defined(__clang__)
52615         "adcs	r2, %[r]\n\t"
52616 #else
52617         "adc	r2, %[r]\n\t"
52618 #endif
52619 #ifdef WOLFSSL_KEIL
52620         "adcs	r3, r3, %[r]\n\t"
52621 #elif defined(__clang__)
52622         "adcs	r3, %[r]\n\t"
52623 #else
52624         "adc	r3, %[r]\n\t"
52625 #endif
52626 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52627         "adds	r4, r4, r6\n\t"
52628 #else
52629         "add	r4, r4, r6\n\t"
52630 #endif
52631 #ifdef WOLFSSL_KEIL
52632         "adcs	r2, r2, %[r]\n\t"
52633 #elif defined(__clang__)
52634         "adcs	r2, %[r]\n\t"
52635 #else
52636         "adc	r2, %[r]\n\t"
52637 #endif
52638 #ifdef WOLFSSL_KEIL
52639         "adcs	r3, r3, %[r]\n\t"
52640 #elif defined(__clang__)
52641         "adcs	r3, %[r]\n\t"
52642 #else
52643         "adc	r3, %[r]\n\t"
52644 #endif
52645 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52646         "lsrs	r6, r7, #16\n\t"
52647 #else
52648         "lsr	r6, r7, #16\n\t"
52649 #endif
52650 #ifdef WOLFSSL_KEIL
52651         "muls	r5, r6, r5\n\t"
52652 #elif defined(__clang__)
52653         "muls	r5, r6\n\t"
52654 #else
52655         "mul	r5, r6\n\t"
52656 #endif
52657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52658         "lsrs	r6, r5, #16\n\t"
52659 #else
52660         "lsr	r6, r5, #16\n\t"
52661 #endif
52662 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52663         "lsls	r5, r5, #16\n\t"
52664 #else
52665         "lsl	r5, r5, #16\n\t"
52666 #endif
52667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52668         "adds	r4, r4, r5\n\t"
52669 #else
52670         "add	r4, r4, r5\n\t"
52671 #endif
52672 #ifdef WOLFSSL_KEIL
52673         "adcs	r2, r2, r6\n\t"
52674 #elif defined(__clang__)
52675         "adcs	r2, r6\n\t"
52676 #else
52677         "adc	r2, r6\n\t"
52678 #endif
52679 #ifdef WOLFSSL_KEIL
52680         "adcs	r3, r3, %[r]\n\t"
52681 #elif defined(__clang__)
52682         "adcs	r3, %[r]\n\t"
52683 #else
52684         "adc	r3, %[r]\n\t"
52685 #endif
52686 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52687         "adds	r4, r4, r5\n\t"
52688 #else
52689         "add	r4, r4, r5\n\t"
52690 #endif
52691 #ifdef WOLFSSL_KEIL
52692         "adcs	r2, r2, r6\n\t"
52693 #elif defined(__clang__)
52694         "adcs	r2, r6\n\t"
52695 #else
52696         "adc	r2, r6\n\t"
52697 #endif
52698 #ifdef WOLFSSL_KEIL
52699         "adcs	r3, r3, %[r]\n\t"
52700 #elif defined(__clang__)
52701         "adcs	r3, %[r]\n\t"
52702 #else
52703         "adc	r3, %[r]\n\t"
52704 #endif
52705 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52706         "lsrs	r5, %[a], #16\n\t"
52707 #else
52708         "lsr	r5, %[a], #16\n\t"
52709 #endif
52710 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52711         "lsrs	r6, r7, #16\n\t"
52712 #else
52713         "lsr	r6, r7, #16\n\t"
52714 #endif
52715 #ifdef WOLFSSL_KEIL
52716         "muls	r6, r5, r6\n\t"
52717 #elif defined(__clang__)
52718         "muls	r6, r5\n\t"
52719 #else
52720         "mul	r6, r5\n\t"
52721 #endif
52722 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52723         "adds	r2, r2, r6\n\t"
52724 #else
52725         "add	r2, r2, r6\n\t"
52726 #endif
52727 #ifdef WOLFSSL_KEIL
52728         "adcs	r3, r3, %[r]\n\t"
52729 #elif defined(__clang__)
52730         "adcs	r3, %[r]\n\t"
52731 #else
52732         "adc	r3, %[r]\n\t"
52733 #endif
52734 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52735         "adds	r2, r2, r6\n\t"
52736 #else
52737         "add	r2, r2, r6\n\t"
52738 #endif
52739 #ifdef WOLFSSL_KEIL
52740         "adcs	r3, r3, %[r]\n\t"
52741 #elif defined(__clang__)
52742         "adcs	r3, %[r]\n\t"
52743 #else
52744         "adc	r3, %[r]\n\t"
52745 #endif
52746         "uxth	r6, r7\n\t"
52747 #ifdef WOLFSSL_KEIL
52748         "muls	r5, r6, r5\n\t"
52749 #elif defined(__clang__)
52750         "muls	r5, r6\n\t"
52751 #else
52752         "mul	r5, r6\n\t"
52753 #endif
52754 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52755         "lsrs	r6, r5, #16\n\t"
52756 #else
52757         "lsr	r6, r5, #16\n\t"
52758 #endif
52759 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52760         "lsls	r5, r5, #16\n\t"
52761 #else
52762         "lsl	r5, r5, #16\n\t"
52763 #endif
52764 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52765         "adds	r4, r4, r5\n\t"
52766 #else
52767         "add	r4, r4, r5\n\t"
52768 #endif
52769 #ifdef WOLFSSL_KEIL
52770         "adcs	r2, r2, r6\n\t"
52771 #elif defined(__clang__)
52772         "adcs	r2, r6\n\t"
52773 #else
52774         "adc	r2, r6\n\t"
52775 #endif
52776 #ifdef WOLFSSL_KEIL
52777         "adcs	r3, r3, %[r]\n\t"
52778 #elif defined(__clang__)
52779         "adcs	r3, %[r]\n\t"
52780 #else
52781         "adc	r3, %[r]\n\t"
52782 #endif
52783 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52784         "adds	r4, r4, r5\n\t"
52785 #else
52786         "add	r4, r4, r5\n\t"
52787 #endif
52788 #ifdef WOLFSSL_KEIL
52789         "adcs	r2, r2, r6\n\t"
52790 #elif defined(__clang__)
52791         "adcs	r2, r6\n\t"
52792 #else
52793         "adc	r2, r6\n\t"
52794 #endif
52795 #ifdef WOLFSSL_KEIL
52796         "adcs	r3, r3, %[r]\n\t"
52797 #elif defined(__clang__)
52798         "adcs	r3, %[r]\n\t"
52799 #else
52800         "adc	r3, %[r]\n\t"
52801 #endif
52802         "#  A[5] * A[0]\n\t"
52803         "mov	%[a], r9\n\t"
52804         "mov	r7, r10\n\t"
52805         "ldr	%[a], [%[a], #20]\n\t"
52806         "uxth	r5, %[a]\n\t"
52807         "uxth	r6, r7\n\t"
52808 #ifdef WOLFSSL_KEIL
52809         "muls	r6, r5, r6\n\t"
52810 #elif defined(__clang__)
52811         "muls	r6, r5\n\t"
52812 #else
52813         "mul	r6, r5\n\t"
52814 #endif
52815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52816         "adds	r4, r4, r6\n\t"
52817 #else
52818         "add	r4, r4, r6\n\t"
52819 #endif
52820 #ifdef WOLFSSL_KEIL
52821         "adcs	r2, r2, %[r]\n\t"
52822 #elif defined(__clang__)
52823         "adcs	r2, %[r]\n\t"
52824 #else
52825         "adc	r2, %[r]\n\t"
52826 #endif
52827 #ifdef WOLFSSL_KEIL
52828         "adcs	r3, r3, %[r]\n\t"
52829 #elif defined(__clang__)
52830         "adcs	r3, %[r]\n\t"
52831 #else
52832         "adc	r3, %[r]\n\t"
52833 #endif
52834 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52835         "adds	r4, r4, r6\n\t"
52836 #else
52837         "add	r4, r4, r6\n\t"
52838 #endif
52839 #ifdef WOLFSSL_KEIL
52840         "adcs	r2, r2, %[r]\n\t"
52841 #elif defined(__clang__)
52842         "adcs	r2, %[r]\n\t"
52843 #else
52844         "adc	r2, %[r]\n\t"
52845 #endif
52846 #ifdef WOLFSSL_KEIL
52847         "adcs	r3, r3, %[r]\n\t"
52848 #elif defined(__clang__)
52849         "adcs	r3, %[r]\n\t"
52850 #else
52851         "adc	r3, %[r]\n\t"
52852 #endif
52853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52854         "lsrs	r6, r7, #16\n\t"
52855 #else
52856         "lsr	r6, r7, #16\n\t"
52857 #endif
52858 #ifdef WOLFSSL_KEIL
52859         "muls	r5, r6, r5\n\t"
52860 #elif defined(__clang__)
52861         "muls	r5, r6\n\t"
52862 #else
52863         "mul	r5, r6\n\t"
52864 #endif
52865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52866         "lsrs	r6, r5, #16\n\t"
52867 #else
52868         "lsr	r6, r5, #16\n\t"
52869 #endif
52870 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52871         "lsls	r5, r5, #16\n\t"
52872 #else
52873         "lsl	r5, r5, #16\n\t"
52874 #endif
52875 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52876         "adds	r4, r4, r5\n\t"
52877 #else
52878         "add	r4, r4, r5\n\t"
52879 #endif
52880 #ifdef WOLFSSL_KEIL
52881         "adcs	r2, r2, r6\n\t"
52882 #elif defined(__clang__)
52883         "adcs	r2, r6\n\t"
52884 #else
52885         "adc	r2, r6\n\t"
52886 #endif
52887 #ifdef WOLFSSL_KEIL
52888         "adcs	r3, r3, %[r]\n\t"
52889 #elif defined(__clang__)
52890         "adcs	r3, %[r]\n\t"
52891 #else
52892         "adc	r3, %[r]\n\t"
52893 #endif
52894 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52895         "adds	r4, r4, r5\n\t"
52896 #else
52897         "add	r4, r4, r5\n\t"
52898 #endif
52899 #ifdef WOLFSSL_KEIL
52900         "adcs	r2, r2, r6\n\t"
52901 #elif defined(__clang__)
52902         "adcs	r2, r6\n\t"
52903 #else
52904         "adc	r2, r6\n\t"
52905 #endif
52906 #ifdef WOLFSSL_KEIL
52907         "adcs	r3, r3, %[r]\n\t"
52908 #elif defined(__clang__)
52909         "adcs	r3, %[r]\n\t"
52910 #else
52911         "adc	r3, %[r]\n\t"
52912 #endif
52913 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52914         "lsrs	r5, %[a], #16\n\t"
52915 #else
52916         "lsr	r5, %[a], #16\n\t"
52917 #endif
52918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52919         "lsrs	r6, r7, #16\n\t"
52920 #else
52921         "lsr	r6, r7, #16\n\t"
52922 #endif
52923 #ifdef WOLFSSL_KEIL
52924         "muls	r6, r5, r6\n\t"
52925 #elif defined(__clang__)
52926         "muls	r6, r5\n\t"
52927 #else
52928         "mul	r6, r5\n\t"
52929 #endif
52930 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52931         "adds	r2, r2, r6\n\t"
52932 #else
52933         "add	r2, r2, r6\n\t"
52934 #endif
52935 #ifdef WOLFSSL_KEIL
52936         "adcs	r3, r3, %[r]\n\t"
52937 #elif defined(__clang__)
52938         "adcs	r3, %[r]\n\t"
52939 #else
52940         "adc	r3, %[r]\n\t"
52941 #endif
52942 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52943         "adds	r2, r2, r6\n\t"
52944 #else
52945         "add	r2, r2, r6\n\t"
52946 #endif
52947 #ifdef WOLFSSL_KEIL
52948         "adcs	r3, r3, %[r]\n\t"
52949 #elif defined(__clang__)
52950         "adcs	r3, %[r]\n\t"
52951 #else
52952         "adc	r3, %[r]\n\t"
52953 #endif
52954         "uxth	r6, r7\n\t"
52955 #ifdef WOLFSSL_KEIL
52956         "muls	r5, r6, r5\n\t"
52957 #elif defined(__clang__)
52958         "muls	r5, r6\n\t"
52959 #else
52960         "mul	r5, r6\n\t"
52961 #endif
52962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52963         "lsrs	r6, r5, #16\n\t"
52964 #else
52965         "lsr	r6, r5, #16\n\t"
52966 #endif
52967 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52968         "lsls	r5, r5, #16\n\t"
52969 #else
52970         "lsl	r5, r5, #16\n\t"
52971 #endif
52972 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52973         "adds	r4, r4, r5\n\t"
52974 #else
52975         "add	r4, r4, r5\n\t"
52976 #endif
52977 #ifdef WOLFSSL_KEIL
52978         "adcs	r2, r2, r6\n\t"
52979 #elif defined(__clang__)
52980         "adcs	r2, r6\n\t"
52981 #else
52982         "adc	r2, r6\n\t"
52983 #endif
52984 #ifdef WOLFSSL_KEIL
52985         "adcs	r3, r3, %[r]\n\t"
52986 #elif defined(__clang__)
52987         "adcs	r3, %[r]\n\t"
52988 #else
52989         "adc	r3, %[r]\n\t"
52990 #endif
52991 #if defined(__clang__) || defined(WOLFSSL_KEIL)
52992         "adds	r4, r4, r5\n\t"
52993 #else
52994         "add	r4, r4, r5\n\t"
52995 #endif
52996 #ifdef WOLFSSL_KEIL
52997         "adcs	r2, r2, r6\n\t"
52998 #elif defined(__clang__)
52999         "adcs	r2, r6\n\t"
53000 #else
53001         "adc	r2, r6\n\t"
53002 #endif
53003 #ifdef WOLFSSL_KEIL
53004         "adcs	r3, r3, %[r]\n\t"
53005 #elif defined(__clang__)
53006         "adcs	r3, %[r]\n\t"
53007 #else
53008         "adc	r3, %[r]\n\t"
53009 #endif
53010         "str	r4, [sp, #20]\n\t"
53011         "#  A[6] * A[0]\n\t"
53012         "movs	r4, #0\n\t"
53013         "mov	%[a], r9\n\t"
53014         "ldr	%[a], [%[a], #24]\n\t"
53015         "uxth	r5, %[a]\n\t"
53016         "uxth	r6, r7\n\t"
53017 #ifdef WOLFSSL_KEIL
53018         "muls	r6, r5, r6\n\t"
53019 #elif defined(__clang__)
53020         "muls	r6, r5\n\t"
53021 #else
53022         "mul	r6, r5\n\t"
53023 #endif
53024 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53025         "adds	r2, r2, r6\n\t"
53026 #else
53027         "add	r2, r2, r6\n\t"
53028 #endif
53029 #ifdef WOLFSSL_KEIL
53030         "adcs	r3, r3, %[r]\n\t"
53031 #elif defined(__clang__)
53032         "adcs	r3, %[r]\n\t"
53033 #else
53034         "adc	r3, %[r]\n\t"
53035 #endif
53036 #ifdef WOLFSSL_KEIL
53037         "adcs	r4, r4, %[r]\n\t"
53038 #elif defined(__clang__)
53039         "adcs	r4, %[r]\n\t"
53040 #else
53041         "adc	r4, %[r]\n\t"
53042 #endif
53043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53044         "adds	r2, r2, r6\n\t"
53045 #else
53046         "add	r2, r2, r6\n\t"
53047 #endif
53048 #ifdef WOLFSSL_KEIL
53049         "adcs	r3, r3, %[r]\n\t"
53050 #elif defined(__clang__)
53051         "adcs	r3, %[r]\n\t"
53052 #else
53053         "adc	r3, %[r]\n\t"
53054 #endif
53055 #ifdef WOLFSSL_KEIL
53056         "adcs	r4, r4, %[r]\n\t"
53057 #elif defined(__clang__)
53058         "adcs	r4, %[r]\n\t"
53059 #else
53060         "adc	r4, %[r]\n\t"
53061 #endif
53062 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53063         "lsrs	r6, r7, #16\n\t"
53064 #else
53065         "lsr	r6, r7, #16\n\t"
53066 #endif
53067 #ifdef WOLFSSL_KEIL
53068         "muls	r5, r6, r5\n\t"
53069 #elif defined(__clang__)
53070         "muls	r5, r6\n\t"
53071 #else
53072         "mul	r5, r6\n\t"
53073 #endif
53074 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53075         "lsrs	r6, r5, #16\n\t"
53076 #else
53077         "lsr	r6, r5, #16\n\t"
53078 #endif
53079 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53080         "lsls	r5, r5, #16\n\t"
53081 #else
53082         "lsl	r5, r5, #16\n\t"
53083 #endif
53084 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53085         "adds	r2, r2, r5\n\t"
53086 #else
53087         "add	r2, r2, r5\n\t"
53088 #endif
53089 #ifdef WOLFSSL_KEIL
53090         "adcs	r3, r3, r6\n\t"
53091 #elif defined(__clang__)
53092         "adcs	r3, r6\n\t"
53093 #else
53094         "adc	r3, r6\n\t"
53095 #endif
53096 #ifdef WOLFSSL_KEIL
53097         "adcs	r4, r4, %[r]\n\t"
53098 #elif defined(__clang__)
53099         "adcs	r4, %[r]\n\t"
53100 #else
53101         "adc	r4, %[r]\n\t"
53102 #endif
53103 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53104         "adds	r2, r2, r5\n\t"
53105 #else
53106         "add	r2, r2, r5\n\t"
53107 #endif
53108 #ifdef WOLFSSL_KEIL
53109         "adcs	r3, r3, r6\n\t"
53110 #elif defined(__clang__)
53111         "adcs	r3, r6\n\t"
53112 #else
53113         "adc	r3, r6\n\t"
53114 #endif
53115 #ifdef WOLFSSL_KEIL
53116         "adcs	r4, r4, %[r]\n\t"
53117 #elif defined(__clang__)
53118         "adcs	r4, %[r]\n\t"
53119 #else
53120         "adc	r4, %[r]\n\t"
53121 #endif
53122 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53123         "lsrs	r5, %[a], #16\n\t"
53124 #else
53125         "lsr	r5, %[a], #16\n\t"
53126 #endif
53127 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53128         "lsrs	r6, r7, #16\n\t"
53129 #else
53130         "lsr	r6, r7, #16\n\t"
53131 #endif
53132 #ifdef WOLFSSL_KEIL
53133         "muls	r6, r5, r6\n\t"
53134 #elif defined(__clang__)
53135         "muls	r6, r5\n\t"
53136 #else
53137         "mul	r6, r5\n\t"
53138 #endif
53139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53140         "adds	r3, r3, r6\n\t"
53141 #else
53142         "add	r3, r3, r6\n\t"
53143 #endif
53144 #ifdef WOLFSSL_KEIL
53145         "adcs	r4, r4, %[r]\n\t"
53146 #elif defined(__clang__)
53147         "adcs	r4, %[r]\n\t"
53148 #else
53149         "adc	r4, %[r]\n\t"
53150 #endif
53151 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53152         "adds	r3, r3, r6\n\t"
53153 #else
53154         "add	r3, r3, r6\n\t"
53155 #endif
53156 #ifdef WOLFSSL_KEIL
53157         "adcs	r4, r4, %[r]\n\t"
53158 #elif defined(__clang__)
53159         "adcs	r4, %[r]\n\t"
53160 #else
53161         "adc	r4, %[r]\n\t"
53162 #endif
53163         "uxth	r6, r7\n\t"
53164 #ifdef WOLFSSL_KEIL
53165         "muls	r5, r6, r5\n\t"
53166 #elif defined(__clang__)
53167         "muls	r5, r6\n\t"
53168 #else
53169         "mul	r5, r6\n\t"
53170 #endif
53171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53172         "lsrs	r6, r5, #16\n\t"
53173 #else
53174         "lsr	r6, r5, #16\n\t"
53175 #endif
53176 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53177         "lsls	r5, r5, #16\n\t"
53178 #else
53179         "lsl	r5, r5, #16\n\t"
53180 #endif
53181 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53182         "adds	r2, r2, r5\n\t"
53183 #else
53184         "add	r2, r2, r5\n\t"
53185 #endif
53186 #ifdef WOLFSSL_KEIL
53187         "adcs	r3, r3, r6\n\t"
53188 #elif defined(__clang__)
53189         "adcs	r3, r6\n\t"
53190 #else
53191         "adc	r3, r6\n\t"
53192 #endif
53193 #ifdef WOLFSSL_KEIL
53194         "adcs	r4, r4, %[r]\n\t"
53195 #elif defined(__clang__)
53196         "adcs	r4, %[r]\n\t"
53197 #else
53198         "adc	r4, %[r]\n\t"
53199 #endif
53200 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53201         "adds	r2, r2, r5\n\t"
53202 #else
53203         "add	r2, r2, r5\n\t"
53204 #endif
53205 #ifdef WOLFSSL_KEIL
53206         "adcs	r3, r3, r6\n\t"
53207 #elif defined(__clang__)
53208         "adcs	r3, r6\n\t"
53209 #else
53210         "adc	r3, r6\n\t"
53211 #endif
53212 #ifdef WOLFSSL_KEIL
53213         "adcs	r4, r4, %[r]\n\t"
53214 #elif defined(__clang__)
53215         "adcs	r4, %[r]\n\t"
53216 #else
53217         "adc	r4, %[r]\n\t"
53218 #endif
53219         "#  A[5] * A[1]\n\t"
53220         "mov	%[a], r9\n\t"
53221         "mov	r7, r11\n\t"
53222         "ldr	%[a], [%[a], #20]\n\t"
53223         "uxth	r5, %[a]\n\t"
53224         "uxth	r6, r7\n\t"
53225 #ifdef WOLFSSL_KEIL
53226         "muls	r6, r5, r6\n\t"
53227 #elif defined(__clang__)
53228         "muls	r6, r5\n\t"
53229 #else
53230         "mul	r6, r5\n\t"
53231 #endif
53232 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53233         "adds	r2, r2, r6\n\t"
53234 #else
53235         "add	r2, r2, r6\n\t"
53236 #endif
53237 #ifdef WOLFSSL_KEIL
53238         "adcs	r3, r3, %[r]\n\t"
53239 #elif defined(__clang__)
53240         "adcs	r3, %[r]\n\t"
53241 #else
53242         "adc	r3, %[r]\n\t"
53243 #endif
53244 #ifdef WOLFSSL_KEIL
53245         "adcs	r4, r4, %[r]\n\t"
53246 #elif defined(__clang__)
53247         "adcs	r4, %[r]\n\t"
53248 #else
53249         "adc	r4, %[r]\n\t"
53250 #endif
53251 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53252         "adds	r2, r2, r6\n\t"
53253 #else
53254         "add	r2, r2, r6\n\t"
53255 #endif
53256 #ifdef WOLFSSL_KEIL
53257         "adcs	r3, r3, %[r]\n\t"
53258 #elif defined(__clang__)
53259         "adcs	r3, %[r]\n\t"
53260 #else
53261         "adc	r3, %[r]\n\t"
53262 #endif
53263 #ifdef WOLFSSL_KEIL
53264         "adcs	r4, r4, %[r]\n\t"
53265 #elif defined(__clang__)
53266         "adcs	r4, %[r]\n\t"
53267 #else
53268         "adc	r4, %[r]\n\t"
53269 #endif
53270 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53271         "lsrs	r6, r7, #16\n\t"
53272 #else
53273         "lsr	r6, r7, #16\n\t"
53274 #endif
53275 #ifdef WOLFSSL_KEIL
53276         "muls	r5, r6, r5\n\t"
53277 #elif defined(__clang__)
53278         "muls	r5, r6\n\t"
53279 #else
53280         "mul	r5, r6\n\t"
53281 #endif
53282 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53283         "lsrs	r6, r5, #16\n\t"
53284 #else
53285         "lsr	r6, r5, #16\n\t"
53286 #endif
53287 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53288         "lsls	r5, r5, #16\n\t"
53289 #else
53290         "lsl	r5, r5, #16\n\t"
53291 #endif
53292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53293         "adds	r2, r2, r5\n\t"
53294 #else
53295         "add	r2, r2, r5\n\t"
53296 #endif
53297 #ifdef WOLFSSL_KEIL
53298         "adcs	r3, r3, r6\n\t"
53299 #elif defined(__clang__)
53300         "adcs	r3, r6\n\t"
53301 #else
53302         "adc	r3, r6\n\t"
53303 #endif
53304 #ifdef WOLFSSL_KEIL
53305         "adcs	r4, r4, %[r]\n\t"
53306 #elif defined(__clang__)
53307         "adcs	r4, %[r]\n\t"
53308 #else
53309         "adc	r4, %[r]\n\t"
53310 #endif
53311 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53312         "adds	r2, r2, r5\n\t"
53313 #else
53314         "add	r2, r2, r5\n\t"
53315 #endif
53316 #ifdef WOLFSSL_KEIL
53317         "adcs	r3, r3, r6\n\t"
53318 #elif defined(__clang__)
53319         "adcs	r3, r6\n\t"
53320 #else
53321         "adc	r3, r6\n\t"
53322 #endif
53323 #ifdef WOLFSSL_KEIL
53324         "adcs	r4, r4, %[r]\n\t"
53325 #elif defined(__clang__)
53326         "adcs	r4, %[r]\n\t"
53327 #else
53328         "adc	r4, %[r]\n\t"
53329 #endif
53330 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53331         "lsrs	r5, %[a], #16\n\t"
53332 #else
53333         "lsr	r5, %[a], #16\n\t"
53334 #endif
53335 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53336         "lsrs	r6, r7, #16\n\t"
53337 #else
53338         "lsr	r6, r7, #16\n\t"
53339 #endif
53340 #ifdef WOLFSSL_KEIL
53341         "muls	r6, r5, r6\n\t"
53342 #elif defined(__clang__)
53343         "muls	r6, r5\n\t"
53344 #else
53345         "mul	r6, r5\n\t"
53346 #endif
53347 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53348         "adds	r3, r3, r6\n\t"
53349 #else
53350         "add	r3, r3, r6\n\t"
53351 #endif
53352 #ifdef WOLFSSL_KEIL
53353         "adcs	r4, r4, %[r]\n\t"
53354 #elif defined(__clang__)
53355         "adcs	r4, %[r]\n\t"
53356 #else
53357         "adc	r4, %[r]\n\t"
53358 #endif
53359 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53360         "adds	r3, r3, r6\n\t"
53361 #else
53362         "add	r3, r3, r6\n\t"
53363 #endif
53364 #ifdef WOLFSSL_KEIL
53365         "adcs	r4, r4, %[r]\n\t"
53366 #elif defined(__clang__)
53367         "adcs	r4, %[r]\n\t"
53368 #else
53369         "adc	r4, %[r]\n\t"
53370 #endif
53371         "uxth	r6, r7\n\t"
53372 #ifdef WOLFSSL_KEIL
53373         "muls	r5, r6, r5\n\t"
53374 #elif defined(__clang__)
53375         "muls	r5, r6\n\t"
53376 #else
53377         "mul	r5, r6\n\t"
53378 #endif
53379 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53380         "lsrs	r6, r5, #16\n\t"
53381 #else
53382         "lsr	r6, r5, #16\n\t"
53383 #endif
53384 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53385         "lsls	r5, r5, #16\n\t"
53386 #else
53387         "lsl	r5, r5, #16\n\t"
53388 #endif
53389 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53390         "adds	r2, r2, r5\n\t"
53391 #else
53392         "add	r2, r2, r5\n\t"
53393 #endif
53394 #ifdef WOLFSSL_KEIL
53395         "adcs	r3, r3, r6\n\t"
53396 #elif defined(__clang__)
53397         "adcs	r3, r6\n\t"
53398 #else
53399         "adc	r3, r6\n\t"
53400 #endif
53401 #ifdef WOLFSSL_KEIL
53402         "adcs	r4, r4, %[r]\n\t"
53403 #elif defined(__clang__)
53404         "adcs	r4, %[r]\n\t"
53405 #else
53406         "adc	r4, %[r]\n\t"
53407 #endif
53408 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53409         "adds	r2, r2, r5\n\t"
53410 #else
53411         "add	r2, r2, r5\n\t"
53412 #endif
53413 #ifdef WOLFSSL_KEIL
53414         "adcs	r3, r3, r6\n\t"
53415 #elif defined(__clang__)
53416         "adcs	r3, r6\n\t"
53417 #else
53418         "adc	r3, r6\n\t"
53419 #endif
53420 #ifdef WOLFSSL_KEIL
53421         "adcs	r4, r4, %[r]\n\t"
53422 #elif defined(__clang__)
53423         "adcs	r4, %[r]\n\t"
53424 #else
53425         "adc	r4, %[r]\n\t"
53426 #endif
53427         "#  A[4] * A[2]\n\t"
53428         "mov	%[a], r9\n\t"
53429         "mov	r7, r12\n\t"
53430         "ldr	%[a], [%[a], #16]\n\t"
53431         "uxth	r5, %[a]\n\t"
53432         "uxth	r6, r7\n\t"
53433 #ifdef WOLFSSL_KEIL
53434         "muls	r6, r5, r6\n\t"
53435 #elif defined(__clang__)
53436         "muls	r6, r5\n\t"
53437 #else
53438         "mul	r6, r5\n\t"
53439 #endif
53440 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53441         "adds	r2, r2, r6\n\t"
53442 #else
53443         "add	r2, r2, r6\n\t"
53444 #endif
53445 #ifdef WOLFSSL_KEIL
53446         "adcs	r3, r3, %[r]\n\t"
53447 #elif defined(__clang__)
53448         "adcs	r3, %[r]\n\t"
53449 #else
53450         "adc	r3, %[r]\n\t"
53451 #endif
53452 #ifdef WOLFSSL_KEIL
53453         "adcs	r4, r4, %[r]\n\t"
53454 #elif defined(__clang__)
53455         "adcs	r4, %[r]\n\t"
53456 #else
53457         "adc	r4, %[r]\n\t"
53458 #endif
53459 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53460         "adds	r2, r2, r6\n\t"
53461 #else
53462         "add	r2, r2, r6\n\t"
53463 #endif
53464 #ifdef WOLFSSL_KEIL
53465         "adcs	r3, r3, %[r]\n\t"
53466 #elif defined(__clang__)
53467         "adcs	r3, %[r]\n\t"
53468 #else
53469         "adc	r3, %[r]\n\t"
53470 #endif
53471 #ifdef WOLFSSL_KEIL
53472         "adcs	r4, r4, %[r]\n\t"
53473 #elif defined(__clang__)
53474         "adcs	r4, %[r]\n\t"
53475 #else
53476         "adc	r4, %[r]\n\t"
53477 #endif
53478 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53479         "lsrs	r6, r7, #16\n\t"
53480 #else
53481         "lsr	r6, r7, #16\n\t"
53482 #endif
53483 #ifdef WOLFSSL_KEIL
53484         "muls	r5, r6, r5\n\t"
53485 #elif defined(__clang__)
53486         "muls	r5, r6\n\t"
53487 #else
53488         "mul	r5, r6\n\t"
53489 #endif
53490 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53491         "lsrs	r6, r5, #16\n\t"
53492 #else
53493         "lsr	r6, r5, #16\n\t"
53494 #endif
53495 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53496         "lsls	r5, r5, #16\n\t"
53497 #else
53498         "lsl	r5, r5, #16\n\t"
53499 #endif
53500 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53501         "adds	r2, r2, r5\n\t"
53502 #else
53503         "add	r2, r2, r5\n\t"
53504 #endif
53505 #ifdef WOLFSSL_KEIL
53506         "adcs	r3, r3, r6\n\t"
53507 #elif defined(__clang__)
53508         "adcs	r3, r6\n\t"
53509 #else
53510         "adc	r3, r6\n\t"
53511 #endif
53512 #ifdef WOLFSSL_KEIL
53513         "adcs	r4, r4, %[r]\n\t"
53514 #elif defined(__clang__)
53515         "adcs	r4, %[r]\n\t"
53516 #else
53517         "adc	r4, %[r]\n\t"
53518 #endif
53519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53520         "adds	r2, r2, r5\n\t"
53521 #else
53522         "add	r2, r2, r5\n\t"
53523 #endif
53524 #ifdef WOLFSSL_KEIL
53525         "adcs	r3, r3, r6\n\t"
53526 #elif defined(__clang__)
53527         "adcs	r3, r6\n\t"
53528 #else
53529         "adc	r3, r6\n\t"
53530 #endif
53531 #ifdef WOLFSSL_KEIL
53532         "adcs	r4, r4, %[r]\n\t"
53533 #elif defined(__clang__)
53534         "adcs	r4, %[r]\n\t"
53535 #else
53536         "adc	r4, %[r]\n\t"
53537 #endif
53538 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53539         "lsrs	r5, %[a], #16\n\t"
53540 #else
53541         "lsr	r5, %[a], #16\n\t"
53542 #endif
53543 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53544         "lsrs	r6, r7, #16\n\t"
53545 #else
53546         "lsr	r6, r7, #16\n\t"
53547 #endif
53548 #ifdef WOLFSSL_KEIL
53549         "muls	r6, r5, r6\n\t"
53550 #elif defined(__clang__)
53551         "muls	r6, r5\n\t"
53552 #else
53553         "mul	r6, r5\n\t"
53554 #endif
53555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53556         "adds	r3, r3, r6\n\t"
53557 #else
53558         "add	r3, r3, r6\n\t"
53559 #endif
53560 #ifdef WOLFSSL_KEIL
53561         "adcs	r4, r4, %[r]\n\t"
53562 #elif defined(__clang__)
53563         "adcs	r4, %[r]\n\t"
53564 #else
53565         "adc	r4, %[r]\n\t"
53566 #endif
53567 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53568         "adds	r3, r3, r6\n\t"
53569 #else
53570         "add	r3, r3, r6\n\t"
53571 #endif
53572 #ifdef WOLFSSL_KEIL
53573         "adcs	r4, r4, %[r]\n\t"
53574 #elif defined(__clang__)
53575         "adcs	r4, %[r]\n\t"
53576 #else
53577         "adc	r4, %[r]\n\t"
53578 #endif
53579         "uxth	r6, r7\n\t"
53580 #ifdef WOLFSSL_KEIL
53581         "muls	r5, r6, r5\n\t"
53582 #elif defined(__clang__)
53583         "muls	r5, r6\n\t"
53584 #else
53585         "mul	r5, r6\n\t"
53586 #endif
53587 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53588         "lsrs	r6, r5, #16\n\t"
53589 #else
53590         "lsr	r6, r5, #16\n\t"
53591 #endif
53592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53593         "lsls	r5, r5, #16\n\t"
53594 #else
53595         "lsl	r5, r5, #16\n\t"
53596 #endif
53597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53598         "adds	r2, r2, r5\n\t"
53599 #else
53600         "add	r2, r2, r5\n\t"
53601 #endif
53602 #ifdef WOLFSSL_KEIL
53603         "adcs	r3, r3, r6\n\t"
53604 #elif defined(__clang__)
53605         "adcs	r3, r6\n\t"
53606 #else
53607         "adc	r3, r6\n\t"
53608 #endif
53609 #ifdef WOLFSSL_KEIL
53610         "adcs	r4, r4, %[r]\n\t"
53611 #elif defined(__clang__)
53612         "adcs	r4, %[r]\n\t"
53613 #else
53614         "adc	r4, %[r]\n\t"
53615 #endif
53616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53617         "adds	r2, r2, r5\n\t"
53618 #else
53619         "add	r2, r2, r5\n\t"
53620 #endif
53621 #ifdef WOLFSSL_KEIL
53622         "adcs	r3, r3, r6\n\t"
53623 #elif defined(__clang__)
53624         "adcs	r3, r6\n\t"
53625 #else
53626         "adc	r3, r6\n\t"
53627 #endif
53628 #ifdef WOLFSSL_KEIL
53629         "adcs	r4, r4, %[r]\n\t"
53630 #elif defined(__clang__)
53631         "adcs	r4, %[r]\n\t"
53632 #else
53633         "adc	r4, %[r]\n\t"
53634 #endif
53635         "#  A[3] * A[3]\n\t"
53636         "mov	r7, lr\n\t"
53637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53638         "lsrs	r6, r7, #16\n\t"
53639 #else
53640         "lsr	r6, r7, #16\n\t"
53641 #endif
53642         "uxth	r5, r7\n\t"
53643 #ifdef WOLFSSL_KEIL
53644         "muls	r5, r5, r5\n\t"
53645 #elif defined(__clang__)
53646         "muls	r5, r5\n\t"
53647 #else
53648         "mul	r5, r5\n\t"
53649 #endif
53650 #ifdef WOLFSSL_KEIL
53651         "muls	r6, r6, r6\n\t"
53652 #elif defined(__clang__)
53653         "muls	r6, r6\n\t"
53654 #else
53655         "mul	r6, r6\n\t"
53656 #endif
53657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53658         "adds	r2, r2, r5\n\t"
53659 #else
53660         "add	r2, r2, r5\n\t"
53661 #endif
53662 #ifdef WOLFSSL_KEIL
53663         "adcs	r3, r3, r6\n\t"
53664 #elif defined(__clang__)
53665         "adcs	r3, r6\n\t"
53666 #else
53667         "adc	r3, r6\n\t"
53668 #endif
53669 #ifdef WOLFSSL_KEIL
53670         "adcs	r4, r4, %[r]\n\t"
53671 #elif defined(__clang__)
53672         "adcs	r4, %[r]\n\t"
53673 #else
53674         "adc	r4, %[r]\n\t"
53675 #endif
53676 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53677         "lsrs	r6, r7, #16\n\t"
53678 #else
53679         "lsr	r6, r7, #16\n\t"
53680 #endif
53681         "uxth	r5, r7\n\t"
53682 #ifdef WOLFSSL_KEIL
53683         "muls	r5, r6, r5\n\t"
53684 #elif defined(__clang__)
53685         "muls	r5, r6\n\t"
53686 #else
53687         "mul	r5, r6\n\t"
53688 #endif
53689 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53690         "lsrs	r6, r5, #15\n\t"
53691 #else
53692         "lsr	r6, r5, #15\n\t"
53693 #endif
53694 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53695         "lsls	r5, r5, #17\n\t"
53696 #else
53697         "lsl	r5, r5, #17\n\t"
53698 #endif
53699 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53700         "adds	r2, r2, r5\n\t"
53701 #else
53702         "add	r2, r2, r5\n\t"
53703 #endif
53704 #ifdef WOLFSSL_KEIL
53705         "adcs	r3, r3, r6\n\t"
53706 #elif defined(__clang__)
53707         "adcs	r3, r6\n\t"
53708 #else
53709         "adc	r3, r6\n\t"
53710 #endif
53711 #ifdef WOLFSSL_KEIL
53712         "adcs	r4, r4, %[r]\n\t"
53713 #elif defined(__clang__)
53714         "adcs	r4, %[r]\n\t"
53715 #else
53716         "adc	r4, %[r]\n\t"
53717 #endif
53718         "str	r2, [sp, #24]\n\t"
53719         "#  A[4] * A[3]\n\t"
53720         "movs	r2, #0\n\t"
53721         "mov	%[a], r9\n\t"
53722         "ldr	%[a], [%[a], #16]\n\t"
53723         "uxth	r5, %[a]\n\t"
53724         "uxth	r6, r7\n\t"
53725 #ifdef WOLFSSL_KEIL
53726         "muls	r6, r5, r6\n\t"
53727 #elif defined(__clang__)
53728         "muls	r6, r5\n\t"
53729 #else
53730         "mul	r6, r5\n\t"
53731 #endif
53732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53733         "adds	r3, r3, r6\n\t"
53734 #else
53735         "add	r3, r3, r6\n\t"
53736 #endif
53737 #ifdef WOLFSSL_KEIL
53738         "adcs	r4, r4, %[r]\n\t"
53739 #elif defined(__clang__)
53740         "adcs	r4, %[r]\n\t"
53741 #else
53742         "adc	r4, %[r]\n\t"
53743 #endif
53744 #ifdef WOLFSSL_KEIL
53745         "adcs	r2, r2, %[r]\n\t"
53746 #elif defined(__clang__)
53747         "adcs	r2, %[r]\n\t"
53748 #else
53749         "adc	r2, %[r]\n\t"
53750 #endif
53751 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53752         "adds	r3, r3, r6\n\t"
53753 #else
53754         "add	r3, r3, r6\n\t"
53755 #endif
53756 #ifdef WOLFSSL_KEIL
53757         "adcs	r4, r4, %[r]\n\t"
53758 #elif defined(__clang__)
53759         "adcs	r4, %[r]\n\t"
53760 #else
53761         "adc	r4, %[r]\n\t"
53762 #endif
53763 #ifdef WOLFSSL_KEIL
53764         "adcs	r2, r2, %[r]\n\t"
53765 #elif defined(__clang__)
53766         "adcs	r2, %[r]\n\t"
53767 #else
53768         "adc	r2, %[r]\n\t"
53769 #endif
53770 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53771         "lsrs	r6, r7, #16\n\t"
53772 #else
53773         "lsr	r6, r7, #16\n\t"
53774 #endif
53775 #ifdef WOLFSSL_KEIL
53776         "muls	r5, r6, r5\n\t"
53777 #elif defined(__clang__)
53778         "muls	r5, r6\n\t"
53779 #else
53780         "mul	r5, r6\n\t"
53781 #endif
53782 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53783         "lsrs	r6, r5, #16\n\t"
53784 #else
53785         "lsr	r6, r5, #16\n\t"
53786 #endif
53787 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53788         "lsls	r5, r5, #16\n\t"
53789 #else
53790         "lsl	r5, r5, #16\n\t"
53791 #endif
53792 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53793         "adds	r3, r3, r5\n\t"
53794 #else
53795         "add	r3, r3, r5\n\t"
53796 #endif
53797 #ifdef WOLFSSL_KEIL
53798         "adcs	r4, r4, r6\n\t"
53799 #elif defined(__clang__)
53800         "adcs	r4, r6\n\t"
53801 #else
53802         "adc	r4, r6\n\t"
53803 #endif
53804 #ifdef WOLFSSL_KEIL
53805         "adcs	r2, r2, %[r]\n\t"
53806 #elif defined(__clang__)
53807         "adcs	r2, %[r]\n\t"
53808 #else
53809         "adc	r2, %[r]\n\t"
53810 #endif
53811 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53812         "adds	r3, r3, r5\n\t"
53813 #else
53814         "add	r3, r3, r5\n\t"
53815 #endif
53816 #ifdef WOLFSSL_KEIL
53817         "adcs	r4, r4, r6\n\t"
53818 #elif defined(__clang__)
53819         "adcs	r4, r6\n\t"
53820 #else
53821         "adc	r4, r6\n\t"
53822 #endif
53823 #ifdef WOLFSSL_KEIL
53824         "adcs	r2, r2, %[r]\n\t"
53825 #elif defined(__clang__)
53826         "adcs	r2, %[r]\n\t"
53827 #else
53828         "adc	r2, %[r]\n\t"
53829 #endif
53830 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53831         "lsrs	r5, %[a], #16\n\t"
53832 #else
53833         "lsr	r5, %[a], #16\n\t"
53834 #endif
53835 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53836         "lsrs	r6, r7, #16\n\t"
53837 #else
53838         "lsr	r6, r7, #16\n\t"
53839 #endif
53840 #ifdef WOLFSSL_KEIL
53841         "muls	r6, r5, r6\n\t"
53842 #elif defined(__clang__)
53843         "muls	r6, r5\n\t"
53844 #else
53845         "mul	r6, r5\n\t"
53846 #endif
53847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53848         "adds	r4, r4, r6\n\t"
53849 #else
53850         "add	r4, r4, r6\n\t"
53851 #endif
53852 #ifdef WOLFSSL_KEIL
53853         "adcs	r2, r2, %[r]\n\t"
53854 #elif defined(__clang__)
53855         "adcs	r2, %[r]\n\t"
53856 #else
53857         "adc	r2, %[r]\n\t"
53858 #endif
53859 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53860         "adds	r4, r4, r6\n\t"
53861 #else
53862         "add	r4, r4, r6\n\t"
53863 #endif
53864 #ifdef WOLFSSL_KEIL
53865         "adcs	r2, r2, %[r]\n\t"
53866 #elif defined(__clang__)
53867         "adcs	r2, %[r]\n\t"
53868 #else
53869         "adc	r2, %[r]\n\t"
53870 #endif
53871         "uxth	r6, r7\n\t"
53872 #ifdef WOLFSSL_KEIL
53873         "muls	r5, r6, r5\n\t"
53874 #elif defined(__clang__)
53875         "muls	r5, r6\n\t"
53876 #else
53877         "mul	r5, r6\n\t"
53878 #endif
53879 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53880         "lsrs	r6, r5, #16\n\t"
53881 #else
53882         "lsr	r6, r5, #16\n\t"
53883 #endif
53884 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53885         "lsls	r5, r5, #16\n\t"
53886 #else
53887         "lsl	r5, r5, #16\n\t"
53888 #endif
53889 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53890         "adds	r3, r3, r5\n\t"
53891 #else
53892         "add	r3, r3, r5\n\t"
53893 #endif
53894 #ifdef WOLFSSL_KEIL
53895         "adcs	r4, r4, r6\n\t"
53896 #elif defined(__clang__)
53897         "adcs	r4, r6\n\t"
53898 #else
53899         "adc	r4, r6\n\t"
53900 #endif
53901 #ifdef WOLFSSL_KEIL
53902         "adcs	r2, r2, %[r]\n\t"
53903 #elif defined(__clang__)
53904         "adcs	r2, %[r]\n\t"
53905 #else
53906         "adc	r2, %[r]\n\t"
53907 #endif
53908 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53909         "adds	r3, r3, r5\n\t"
53910 #else
53911         "add	r3, r3, r5\n\t"
53912 #endif
53913 #ifdef WOLFSSL_KEIL
53914         "adcs	r4, r4, r6\n\t"
53915 #elif defined(__clang__)
53916         "adcs	r4, r6\n\t"
53917 #else
53918         "adc	r4, r6\n\t"
53919 #endif
53920 #ifdef WOLFSSL_KEIL
53921         "adcs	r2, r2, %[r]\n\t"
53922 #elif defined(__clang__)
53923         "adcs	r2, %[r]\n\t"
53924 #else
53925         "adc	r2, %[r]\n\t"
53926 #endif
53927         "#  A[5] * A[2]\n\t"
53928         "mov	%[a], r9\n\t"
53929         "mov	r7, r12\n\t"
53930         "ldr	%[a], [%[a], #20]\n\t"
53931         "uxth	r5, %[a]\n\t"
53932         "uxth	r6, r7\n\t"
53933 #ifdef WOLFSSL_KEIL
53934         "muls	r6, r5, r6\n\t"
53935 #elif defined(__clang__)
53936         "muls	r6, r5\n\t"
53937 #else
53938         "mul	r6, r5\n\t"
53939 #endif
53940 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53941         "adds	r3, r3, r6\n\t"
53942 #else
53943         "add	r3, r3, r6\n\t"
53944 #endif
53945 #ifdef WOLFSSL_KEIL
53946         "adcs	r4, r4, %[r]\n\t"
53947 #elif defined(__clang__)
53948         "adcs	r4, %[r]\n\t"
53949 #else
53950         "adc	r4, %[r]\n\t"
53951 #endif
53952 #ifdef WOLFSSL_KEIL
53953         "adcs	r2, r2, %[r]\n\t"
53954 #elif defined(__clang__)
53955         "adcs	r2, %[r]\n\t"
53956 #else
53957         "adc	r2, %[r]\n\t"
53958 #endif
53959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53960         "adds	r3, r3, r6\n\t"
53961 #else
53962         "add	r3, r3, r6\n\t"
53963 #endif
53964 #ifdef WOLFSSL_KEIL
53965         "adcs	r4, r4, %[r]\n\t"
53966 #elif defined(__clang__)
53967         "adcs	r4, %[r]\n\t"
53968 #else
53969         "adc	r4, %[r]\n\t"
53970 #endif
53971 #ifdef WOLFSSL_KEIL
53972         "adcs	r2, r2, %[r]\n\t"
53973 #elif defined(__clang__)
53974         "adcs	r2, %[r]\n\t"
53975 #else
53976         "adc	r2, %[r]\n\t"
53977 #endif
53978 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53979         "lsrs	r6, r7, #16\n\t"
53980 #else
53981         "lsr	r6, r7, #16\n\t"
53982 #endif
53983 #ifdef WOLFSSL_KEIL
53984         "muls	r5, r6, r5\n\t"
53985 #elif defined(__clang__)
53986         "muls	r5, r6\n\t"
53987 #else
53988         "mul	r5, r6\n\t"
53989 #endif
53990 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53991         "lsrs	r6, r5, #16\n\t"
53992 #else
53993         "lsr	r6, r5, #16\n\t"
53994 #endif
53995 #if defined(__clang__) || defined(WOLFSSL_KEIL)
53996         "lsls	r5, r5, #16\n\t"
53997 #else
53998         "lsl	r5, r5, #16\n\t"
53999 #endif
54000 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54001         "adds	r3, r3, r5\n\t"
54002 #else
54003         "add	r3, r3, r5\n\t"
54004 #endif
54005 #ifdef WOLFSSL_KEIL
54006         "adcs	r4, r4, r6\n\t"
54007 #elif defined(__clang__)
54008         "adcs	r4, r6\n\t"
54009 #else
54010         "adc	r4, r6\n\t"
54011 #endif
54012 #ifdef WOLFSSL_KEIL
54013         "adcs	r2, r2, %[r]\n\t"
54014 #elif defined(__clang__)
54015         "adcs	r2, %[r]\n\t"
54016 #else
54017         "adc	r2, %[r]\n\t"
54018 #endif
54019 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54020         "adds	r3, r3, r5\n\t"
54021 #else
54022         "add	r3, r3, r5\n\t"
54023 #endif
54024 #ifdef WOLFSSL_KEIL
54025         "adcs	r4, r4, r6\n\t"
54026 #elif defined(__clang__)
54027         "adcs	r4, r6\n\t"
54028 #else
54029         "adc	r4, r6\n\t"
54030 #endif
54031 #ifdef WOLFSSL_KEIL
54032         "adcs	r2, r2, %[r]\n\t"
54033 #elif defined(__clang__)
54034         "adcs	r2, %[r]\n\t"
54035 #else
54036         "adc	r2, %[r]\n\t"
54037 #endif
54038 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54039         "lsrs	r5, %[a], #16\n\t"
54040 #else
54041         "lsr	r5, %[a], #16\n\t"
54042 #endif
54043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54044         "lsrs	r6, r7, #16\n\t"
54045 #else
54046         "lsr	r6, r7, #16\n\t"
54047 #endif
54048 #ifdef WOLFSSL_KEIL
54049         "muls	r6, r5, r6\n\t"
54050 #elif defined(__clang__)
54051         "muls	r6, r5\n\t"
54052 #else
54053         "mul	r6, r5\n\t"
54054 #endif
54055 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54056         "adds	r4, r4, r6\n\t"
54057 #else
54058         "add	r4, r4, r6\n\t"
54059 #endif
54060 #ifdef WOLFSSL_KEIL
54061         "adcs	r2, r2, %[r]\n\t"
54062 #elif defined(__clang__)
54063         "adcs	r2, %[r]\n\t"
54064 #else
54065         "adc	r2, %[r]\n\t"
54066 #endif
54067 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54068         "adds	r4, r4, r6\n\t"
54069 #else
54070         "add	r4, r4, r6\n\t"
54071 #endif
54072 #ifdef WOLFSSL_KEIL
54073         "adcs	r2, r2, %[r]\n\t"
54074 #elif defined(__clang__)
54075         "adcs	r2, %[r]\n\t"
54076 #else
54077         "adc	r2, %[r]\n\t"
54078 #endif
54079         "uxth	r6, r7\n\t"
54080 #ifdef WOLFSSL_KEIL
54081         "muls	r5, r6, r5\n\t"
54082 #elif defined(__clang__)
54083         "muls	r5, r6\n\t"
54084 #else
54085         "mul	r5, r6\n\t"
54086 #endif
54087 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54088         "lsrs	r6, r5, #16\n\t"
54089 #else
54090         "lsr	r6, r5, #16\n\t"
54091 #endif
54092 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54093         "lsls	r5, r5, #16\n\t"
54094 #else
54095         "lsl	r5, r5, #16\n\t"
54096 #endif
54097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54098         "adds	r3, r3, r5\n\t"
54099 #else
54100         "add	r3, r3, r5\n\t"
54101 #endif
54102 #ifdef WOLFSSL_KEIL
54103         "adcs	r4, r4, r6\n\t"
54104 #elif defined(__clang__)
54105         "adcs	r4, r6\n\t"
54106 #else
54107         "adc	r4, r6\n\t"
54108 #endif
54109 #ifdef WOLFSSL_KEIL
54110         "adcs	r2, r2, %[r]\n\t"
54111 #elif defined(__clang__)
54112         "adcs	r2, %[r]\n\t"
54113 #else
54114         "adc	r2, %[r]\n\t"
54115 #endif
54116 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54117         "adds	r3, r3, r5\n\t"
54118 #else
54119         "add	r3, r3, r5\n\t"
54120 #endif
54121 #ifdef WOLFSSL_KEIL
54122         "adcs	r4, r4, r6\n\t"
54123 #elif defined(__clang__)
54124         "adcs	r4, r6\n\t"
54125 #else
54126         "adc	r4, r6\n\t"
54127 #endif
54128 #ifdef WOLFSSL_KEIL
54129         "adcs	r2, r2, %[r]\n\t"
54130 #elif defined(__clang__)
54131         "adcs	r2, %[r]\n\t"
54132 #else
54133         "adc	r2, %[r]\n\t"
54134 #endif
54135         "#  A[6] * A[1]\n\t"
54136         "mov	%[a], r9\n\t"
54137         "mov	r7, r11\n\t"
54138         "ldr	%[a], [%[a], #24]\n\t"
54139         "uxth	r5, %[a]\n\t"
54140         "uxth	r6, r7\n\t"
54141 #ifdef WOLFSSL_KEIL
54142         "muls	r6, r5, r6\n\t"
54143 #elif defined(__clang__)
54144         "muls	r6, r5\n\t"
54145 #else
54146         "mul	r6, r5\n\t"
54147 #endif
54148 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54149         "adds	r3, r3, r6\n\t"
54150 #else
54151         "add	r3, r3, r6\n\t"
54152 #endif
54153 #ifdef WOLFSSL_KEIL
54154         "adcs	r4, r4, %[r]\n\t"
54155 #elif defined(__clang__)
54156         "adcs	r4, %[r]\n\t"
54157 #else
54158         "adc	r4, %[r]\n\t"
54159 #endif
54160 #ifdef WOLFSSL_KEIL
54161         "adcs	r2, r2, %[r]\n\t"
54162 #elif defined(__clang__)
54163         "adcs	r2, %[r]\n\t"
54164 #else
54165         "adc	r2, %[r]\n\t"
54166 #endif
54167 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54168         "adds	r3, r3, r6\n\t"
54169 #else
54170         "add	r3, r3, r6\n\t"
54171 #endif
54172 #ifdef WOLFSSL_KEIL
54173         "adcs	r4, r4, %[r]\n\t"
54174 #elif defined(__clang__)
54175         "adcs	r4, %[r]\n\t"
54176 #else
54177         "adc	r4, %[r]\n\t"
54178 #endif
54179 #ifdef WOLFSSL_KEIL
54180         "adcs	r2, r2, %[r]\n\t"
54181 #elif defined(__clang__)
54182         "adcs	r2, %[r]\n\t"
54183 #else
54184         "adc	r2, %[r]\n\t"
54185 #endif
54186 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54187         "lsrs	r6, r7, #16\n\t"
54188 #else
54189         "lsr	r6, r7, #16\n\t"
54190 #endif
54191 #ifdef WOLFSSL_KEIL
54192         "muls	r5, r6, r5\n\t"
54193 #elif defined(__clang__)
54194         "muls	r5, r6\n\t"
54195 #else
54196         "mul	r5, r6\n\t"
54197 #endif
54198 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54199         "lsrs	r6, r5, #16\n\t"
54200 #else
54201         "lsr	r6, r5, #16\n\t"
54202 #endif
54203 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54204         "lsls	r5, r5, #16\n\t"
54205 #else
54206         "lsl	r5, r5, #16\n\t"
54207 #endif
54208 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54209         "adds	r3, r3, r5\n\t"
54210 #else
54211         "add	r3, r3, r5\n\t"
54212 #endif
54213 #ifdef WOLFSSL_KEIL
54214         "adcs	r4, r4, r6\n\t"
54215 #elif defined(__clang__)
54216         "adcs	r4, r6\n\t"
54217 #else
54218         "adc	r4, r6\n\t"
54219 #endif
54220 #ifdef WOLFSSL_KEIL
54221         "adcs	r2, r2, %[r]\n\t"
54222 #elif defined(__clang__)
54223         "adcs	r2, %[r]\n\t"
54224 #else
54225         "adc	r2, %[r]\n\t"
54226 #endif
54227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54228         "adds	r3, r3, r5\n\t"
54229 #else
54230         "add	r3, r3, r5\n\t"
54231 #endif
54232 #ifdef WOLFSSL_KEIL
54233         "adcs	r4, r4, r6\n\t"
54234 #elif defined(__clang__)
54235         "adcs	r4, r6\n\t"
54236 #else
54237         "adc	r4, r6\n\t"
54238 #endif
54239 #ifdef WOLFSSL_KEIL
54240         "adcs	r2, r2, %[r]\n\t"
54241 #elif defined(__clang__)
54242         "adcs	r2, %[r]\n\t"
54243 #else
54244         "adc	r2, %[r]\n\t"
54245 #endif
54246 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54247         "lsrs	r5, %[a], #16\n\t"
54248 #else
54249         "lsr	r5, %[a], #16\n\t"
54250 #endif
54251 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54252         "lsrs	r6, r7, #16\n\t"
54253 #else
54254         "lsr	r6, r7, #16\n\t"
54255 #endif
54256 #ifdef WOLFSSL_KEIL
54257         "muls	r6, r5, r6\n\t"
54258 #elif defined(__clang__)
54259         "muls	r6, r5\n\t"
54260 #else
54261         "mul	r6, r5\n\t"
54262 #endif
54263 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54264         "adds	r4, r4, r6\n\t"
54265 #else
54266         "add	r4, r4, r6\n\t"
54267 #endif
54268 #ifdef WOLFSSL_KEIL
54269         "adcs	r2, r2, %[r]\n\t"
54270 #elif defined(__clang__)
54271         "adcs	r2, %[r]\n\t"
54272 #else
54273         "adc	r2, %[r]\n\t"
54274 #endif
54275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54276         "adds	r4, r4, r6\n\t"
54277 #else
54278         "add	r4, r4, r6\n\t"
54279 #endif
54280 #ifdef WOLFSSL_KEIL
54281         "adcs	r2, r2, %[r]\n\t"
54282 #elif defined(__clang__)
54283         "adcs	r2, %[r]\n\t"
54284 #else
54285         "adc	r2, %[r]\n\t"
54286 #endif
54287         "uxth	r6, r7\n\t"
54288 #ifdef WOLFSSL_KEIL
54289         "muls	r5, r6, r5\n\t"
54290 #elif defined(__clang__)
54291         "muls	r5, r6\n\t"
54292 #else
54293         "mul	r5, r6\n\t"
54294 #endif
54295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54296         "lsrs	r6, r5, #16\n\t"
54297 #else
54298         "lsr	r6, r5, #16\n\t"
54299 #endif
54300 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54301         "lsls	r5, r5, #16\n\t"
54302 #else
54303         "lsl	r5, r5, #16\n\t"
54304 #endif
54305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54306         "adds	r3, r3, r5\n\t"
54307 #else
54308         "add	r3, r3, r5\n\t"
54309 #endif
54310 #ifdef WOLFSSL_KEIL
54311         "adcs	r4, r4, r6\n\t"
54312 #elif defined(__clang__)
54313         "adcs	r4, r6\n\t"
54314 #else
54315         "adc	r4, r6\n\t"
54316 #endif
54317 #ifdef WOLFSSL_KEIL
54318         "adcs	r2, r2, %[r]\n\t"
54319 #elif defined(__clang__)
54320         "adcs	r2, %[r]\n\t"
54321 #else
54322         "adc	r2, %[r]\n\t"
54323 #endif
54324 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54325         "adds	r3, r3, r5\n\t"
54326 #else
54327         "add	r3, r3, r5\n\t"
54328 #endif
54329 #ifdef WOLFSSL_KEIL
54330         "adcs	r4, r4, r6\n\t"
54331 #elif defined(__clang__)
54332         "adcs	r4, r6\n\t"
54333 #else
54334         "adc	r4, r6\n\t"
54335 #endif
54336 #ifdef WOLFSSL_KEIL
54337         "adcs	r2, r2, %[r]\n\t"
54338 #elif defined(__clang__)
54339         "adcs	r2, %[r]\n\t"
54340 #else
54341         "adc	r2, %[r]\n\t"
54342 #endif
54343         "#  A[7] * A[0]\n\t"
54344         "mov	%[a], r9\n\t"
54345         "mov	r7, r10\n\t"
54346         "ldr	%[a], [%[a], #28]\n\t"
54347         "uxth	r5, %[a]\n\t"
54348         "uxth	r6, r7\n\t"
54349 #ifdef WOLFSSL_KEIL
54350         "muls	r6, r5, r6\n\t"
54351 #elif defined(__clang__)
54352         "muls	r6, r5\n\t"
54353 #else
54354         "mul	r6, r5\n\t"
54355 #endif
54356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54357         "adds	r3, r3, r6\n\t"
54358 #else
54359         "add	r3, r3, r6\n\t"
54360 #endif
54361 #ifdef WOLFSSL_KEIL
54362         "adcs	r4, r4, %[r]\n\t"
54363 #elif defined(__clang__)
54364         "adcs	r4, %[r]\n\t"
54365 #else
54366         "adc	r4, %[r]\n\t"
54367 #endif
54368 #ifdef WOLFSSL_KEIL
54369         "adcs	r2, r2, %[r]\n\t"
54370 #elif defined(__clang__)
54371         "adcs	r2, %[r]\n\t"
54372 #else
54373         "adc	r2, %[r]\n\t"
54374 #endif
54375 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54376         "adds	r3, r3, r6\n\t"
54377 #else
54378         "add	r3, r3, r6\n\t"
54379 #endif
54380 #ifdef WOLFSSL_KEIL
54381         "adcs	r4, r4, %[r]\n\t"
54382 #elif defined(__clang__)
54383         "adcs	r4, %[r]\n\t"
54384 #else
54385         "adc	r4, %[r]\n\t"
54386 #endif
54387 #ifdef WOLFSSL_KEIL
54388         "adcs	r2, r2, %[r]\n\t"
54389 #elif defined(__clang__)
54390         "adcs	r2, %[r]\n\t"
54391 #else
54392         "adc	r2, %[r]\n\t"
54393 #endif
54394 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54395         "lsrs	r6, r7, #16\n\t"
54396 #else
54397         "lsr	r6, r7, #16\n\t"
54398 #endif
54399 #ifdef WOLFSSL_KEIL
54400         "muls	r5, r6, r5\n\t"
54401 #elif defined(__clang__)
54402         "muls	r5, r6\n\t"
54403 #else
54404         "mul	r5, r6\n\t"
54405 #endif
54406 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54407         "lsrs	r6, r5, #16\n\t"
54408 #else
54409         "lsr	r6, r5, #16\n\t"
54410 #endif
54411 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54412         "lsls	r5, r5, #16\n\t"
54413 #else
54414         "lsl	r5, r5, #16\n\t"
54415 #endif
54416 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54417         "adds	r3, r3, r5\n\t"
54418 #else
54419         "add	r3, r3, r5\n\t"
54420 #endif
54421 #ifdef WOLFSSL_KEIL
54422         "adcs	r4, r4, r6\n\t"
54423 #elif defined(__clang__)
54424         "adcs	r4, r6\n\t"
54425 #else
54426         "adc	r4, r6\n\t"
54427 #endif
54428 #ifdef WOLFSSL_KEIL
54429         "adcs	r2, r2, %[r]\n\t"
54430 #elif defined(__clang__)
54431         "adcs	r2, %[r]\n\t"
54432 #else
54433         "adc	r2, %[r]\n\t"
54434 #endif
54435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54436         "adds	r3, r3, r5\n\t"
54437 #else
54438         "add	r3, r3, r5\n\t"
54439 #endif
54440 #ifdef WOLFSSL_KEIL
54441         "adcs	r4, r4, r6\n\t"
54442 #elif defined(__clang__)
54443         "adcs	r4, r6\n\t"
54444 #else
54445         "adc	r4, r6\n\t"
54446 #endif
54447 #ifdef WOLFSSL_KEIL
54448         "adcs	r2, r2, %[r]\n\t"
54449 #elif defined(__clang__)
54450         "adcs	r2, %[r]\n\t"
54451 #else
54452         "adc	r2, %[r]\n\t"
54453 #endif
54454 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54455         "lsrs	r5, %[a], #16\n\t"
54456 #else
54457         "lsr	r5, %[a], #16\n\t"
54458 #endif
54459 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54460         "lsrs	r6, r7, #16\n\t"
54461 #else
54462         "lsr	r6, r7, #16\n\t"
54463 #endif
54464 #ifdef WOLFSSL_KEIL
54465         "muls	r6, r5, r6\n\t"
54466 #elif defined(__clang__)
54467         "muls	r6, r5\n\t"
54468 #else
54469         "mul	r6, r5\n\t"
54470 #endif
54471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54472         "adds	r4, r4, r6\n\t"
54473 #else
54474         "add	r4, r4, r6\n\t"
54475 #endif
54476 #ifdef WOLFSSL_KEIL
54477         "adcs	r2, r2, %[r]\n\t"
54478 #elif defined(__clang__)
54479         "adcs	r2, %[r]\n\t"
54480 #else
54481         "adc	r2, %[r]\n\t"
54482 #endif
54483 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54484         "adds	r4, r4, r6\n\t"
54485 #else
54486         "add	r4, r4, r6\n\t"
54487 #endif
54488 #ifdef WOLFSSL_KEIL
54489         "adcs	r2, r2, %[r]\n\t"
54490 #elif defined(__clang__)
54491         "adcs	r2, %[r]\n\t"
54492 #else
54493         "adc	r2, %[r]\n\t"
54494 #endif
54495         "uxth	r6, r7\n\t"
54496 #ifdef WOLFSSL_KEIL
54497         "muls	r5, r6, r5\n\t"
54498 #elif defined(__clang__)
54499         "muls	r5, r6\n\t"
54500 #else
54501         "mul	r5, r6\n\t"
54502 #endif
54503 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54504         "lsrs	r6, r5, #16\n\t"
54505 #else
54506         "lsr	r6, r5, #16\n\t"
54507 #endif
54508 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54509         "lsls	r5, r5, #16\n\t"
54510 #else
54511         "lsl	r5, r5, #16\n\t"
54512 #endif
54513 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54514         "adds	r3, r3, r5\n\t"
54515 #else
54516         "add	r3, r3, r5\n\t"
54517 #endif
54518 #ifdef WOLFSSL_KEIL
54519         "adcs	r4, r4, r6\n\t"
54520 #elif defined(__clang__)
54521         "adcs	r4, r6\n\t"
54522 #else
54523         "adc	r4, r6\n\t"
54524 #endif
54525 #ifdef WOLFSSL_KEIL
54526         "adcs	r2, r2, %[r]\n\t"
54527 #elif defined(__clang__)
54528         "adcs	r2, %[r]\n\t"
54529 #else
54530         "adc	r2, %[r]\n\t"
54531 #endif
54532 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54533         "adds	r3, r3, r5\n\t"
54534 #else
54535         "add	r3, r3, r5\n\t"
54536 #endif
54537 #ifdef WOLFSSL_KEIL
54538         "adcs	r4, r4, r6\n\t"
54539 #elif defined(__clang__)
54540         "adcs	r4, r6\n\t"
54541 #else
54542         "adc	r4, r6\n\t"
54543 #endif
54544 #ifdef WOLFSSL_KEIL
54545         "adcs	r2, r2, %[r]\n\t"
54546 #elif defined(__clang__)
54547         "adcs	r2, %[r]\n\t"
54548 #else
54549         "adc	r2, %[r]\n\t"
54550 #endif
54551         "str	r3, [sp, #28]\n\t"
54552         "#  A[8] * A[0]\n\t"
54553         "movs	r3, #0\n\t"
54554         "mov	%[a], r9\n\t"
54555         "ldr	%[a], [%[a], #32]\n\t"
54556         "uxth	r5, %[a]\n\t"
54557         "uxth	r6, r7\n\t"
54558 #ifdef WOLFSSL_KEIL
54559         "muls	r6, r5, r6\n\t"
54560 #elif defined(__clang__)
54561         "muls	r6, r5\n\t"
54562 #else
54563         "mul	r6, r5\n\t"
54564 #endif
54565 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54566         "adds	r4, r4, r6\n\t"
54567 #else
54568         "add	r4, r4, r6\n\t"
54569 #endif
54570 #ifdef WOLFSSL_KEIL
54571         "adcs	r2, r2, %[r]\n\t"
54572 #elif defined(__clang__)
54573         "adcs	r2, %[r]\n\t"
54574 #else
54575         "adc	r2, %[r]\n\t"
54576 #endif
54577 #ifdef WOLFSSL_KEIL
54578         "adcs	r3, r3, %[r]\n\t"
54579 #elif defined(__clang__)
54580         "adcs	r3, %[r]\n\t"
54581 #else
54582         "adc	r3, %[r]\n\t"
54583 #endif
54584 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54585         "adds	r4, r4, r6\n\t"
54586 #else
54587         "add	r4, r4, r6\n\t"
54588 #endif
54589 #ifdef WOLFSSL_KEIL
54590         "adcs	r2, r2, %[r]\n\t"
54591 #elif defined(__clang__)
54592         "adcs	r2, %[r]\n\t"
54593 #else
54594         "adc	r2, %[r]\n\t"
54595 #endif
54596 #ifdef WOLFSSL_KEIL
54597         "adcs	r3, r3, %[r]\n\t"
54598 #elif defined(__clang__)
54599         "adcs	r3, %[r]\n\t"
54600 #else
54601         "adc	r3, %[r]\n\t"
54602 #endif
54603 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54604         "lsrs	r6, r7, #16\n\t"
54605 #else
54606         "lsr	r6, r7, #16\n\t"
54607 #endif
54608 #ifdef WOLFSSL_KEIL
54609         "muls	r5, r6, r5\n\t"
54610 #elif defined(__clang__)
54611         "muls	r5, r6\n\t"
54612 #else
54613         "mul	r5, r6\n\t"
54614 #endif
54615 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54616         "lsrs	r6, r5, #16\n\t"
54617 #else
54618         "lsr	r6, r5, #16\n\t"
54619 #endif
54620 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54621         "lsls	r5, r5, #16\n\t"
54622 #else
54623         "lsl	r5, r5, #16\n\t"
54624 #endif
54625 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54626         "adds	r4, r4, r5\n\t"
54627 #else
54628         "add	r4, r4, r5\n\t"
54629 #endif
54630 #ifdef WOLFSSL_KEIL
54631         "adcs	r2, r2, r6\n\t"
54632 #elif defined(__clang__)
54633         "adcs	r2, r6\n\t"
54634 #else
54635         "adc	r2, r6\n\t"
54636 #endif
54637 #ifdef WOLFSSL_KEIL
54638         "adcs	r3, r3, %[r]\n\t"
54639 #elif defined(__clang__)
54640         "adcs	r3, %[r]\n\t"
54641 #else
54642         "adc	r3, %[r]\n\t"
54643 #endif
54644 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54645         "adds	r4, r4, r5\n\t"
54646 #else
54647         "add	r4, r4, r5\n\t"
54648 #endif
54649 #ifdef WOLFSSL_KEIL
54650         "adcs	r2, r2, r6\n\t"
54651 #elif defined(__clang__)
54652         "adcs	r2, r6\n\t"
54653 #else
54654         "adc	r2, r6\n\t"
54655 #endif
54656 #ifdef WOLFSSL_KEIL
54657         "adcs	r3, r3, %[r]\n\t"
54658 #elif defined(__clang__)
54659         "adcs	r3, %[r]\n\t"
54660 #else
54661         "adc	r3, %[r]\n\t"
54662 #endif
54663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54664         "lsrs	r5, %[a], #16\n\t"
54665 #else
54666         "lsr	r5, %[a], #16\n\t"
54667 #endif
54668 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54669         "lsrs	r6, r7, #16\n\t"
54670 #else
54671         "lsr	r6, r7, #16\n\t"
54672 #endif
54673 #ifdef WOLFSSL_KEIL
54674         "muls	r6, r5, r6\n\t"
54675 #elif defined(__clang__)
54676         "muls	r6, r5\n\t"
54677 #else
54678         "mul	r6, r5\n\t"
54679 #endif
54680 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54681         "adds	r2, r2, r6\n\t"
54682 #else
54683         "add	r2, r2, r6\n\t"
54684 #endif
54685 #ifdef WOLFSSL_KEIL
54686         "adcs	r3, r3, %[r]\n\t"
54687 #elif defined(__clang__)
54688         "adcs	r3, %[r]\n\t"
54689 #else
54690         "adc	r3, %[r]\n\t"
54691 #endif
54692 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54693         "adds	r2, r2, r6\n\t"
54694 #else
54695         "add	r2, r2, r6\n\t"
54696 #endif
54697 #ifdef WOLFSSL_KEIL
54698         "adcs	r3, r3, %[r]\n\t"
54699 #elif defined(__clang__)
54700         "adcs	r3, %[r]\n\t"
54701 #else
54702         "adc	r3, %[r]\n\t"
54703 #endif
54704         "uxth	r6, r7\n\t"
54705 #ifdef WOLFSSL_KEIL
54706         "muls	r5, r6, r5\n\t"
54707 #elif defined(__clang__)
54708         "muls	r5, r6\n\t"
54709 #else
54710         "mul	r5, r6\n\t"
54711 #endif
54712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54713         "lsrs	r6, r5, #16\n\t"
54714 #else
54715         "lsr	r6, r5, #16\n\t"
54716 #endif
54717 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54718         "lsls	r5, r5, #16\n\t"
54719 #else
54720         "lsl	r5, r5, #16\n\t"
54721 #endif
54722 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54723         "adds	r4, r4, r5\n\t"
54724 #else
54725         "add	r4, r4, r5\n\t"
54726 #endif
54727 #ifdef WOLFSSL_KEIL
54728         "adcs	r2, r2, r6\n\t"
54729 #elif defined(__clang__)
54730         "adcs	r2, r6\n\t"
54731 #else
54732         "adc	r2, r6\n\t"
54733 #endif
54734 #ifdef WOLFSSL_KEIL
54735         "adcs	r3, r3, %[r]\n\t"
54736 #elif defined(__clang__)
54737         "adcs	r3, %[r]\n\t"
54738 #else
54739         "adc	r3, %[r]\n\t"
54740 #endif
54741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54742         "adds	r4, r4, r5\n\t"
54743 #else
54744         "add	r4, r4, r5\n\t"
54745 #endif
54746 #ifdef WOLFSSL_KEIL
54747         "adcs	r2, r2, r6\n\t"
54748 #elif defined(__clang__)
54749         "adcs	r2, r6\n\t"
54750 #else
54751         "adc	r2, r6\n\t"
54752 #endif
54753 #ifdef WOLFSSL_KEIL
54754         "adcs	r3, r3, %[r]\n\t"
54755 #elif defined(__clang__)
54756         "adcs	r3, %[r]\n\t"
54757 #else
54758         "adc	r3, %[r]\n\t"
54759 #endif
54760         "#  A[7] * A[1]\n\t"
54761         "mov	%[a], r9\n\t"
54762         "mov	r7, r11\n\t"
54763         "ldr	%[a], [%[a], #28]\n\t"
54764         "uxth	r5, %[a]\n\t"
54765         "uxth	r6, r7\n\t"
54766 #ifdef WOLFSSL_KEIL
54767         "muls	r6, r5, r6\n\t"
54768 #elif defined(__clang__)
54769         "muls	r6, r5\n\t"
54770 #else
54771         "mul	r6, r5\n\t"
54772 #endif
54773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54774         "adds	r4, r4, r6\n\t"
54775 #else
54776         "add	r4, r4, r6\n\t"
54777 #endif
54778 #ifdef WOLFSSL_KEIL
54779         "adcs	r2, r2, %[r]\n\t"
54780 #elif defined(__clang__)
54781         "adcs	r2, %[r]\n\t"
54782 #else
54783         "adc	r2, %[r]\n\t"
54784 #endif
54785 #ifdef WOLFSSL_KEIL
54786         "adcs	r3, r3, %[r]\n\t"
54787 #elif defined(__clang__)
54788         "adcs	r3, %[r]\n\t"
54789 #else
54790         "adc	r3, %[r]\n\t"
54791 #endif
54792 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54793         "adds	r4, r4, r6\n\t"
54794 #else
54795         "add	r4, r4, r6\n\t"
54796 #endif
54797 #ifdef WOLFSSL_KEIL
54798         "adcs	r2, r2, %[r]\n\t"
54799 #elif defined(__clang__)
54800         "adcs	r2, %[r]\n\t"
54801 #else
54802         "adc	r2, %[r]\n\t"
54803 #endif
54804 #ifdef WOLFSSL_KEIL
54805         "adcs	r3, r3, %[r]\n\t"
54806 #elif defined(__clang__)
54807         "adcs	r3, %[r]\n\t"
54808 #else
54809         "adc	r3, %[r]\n\t"
54810 #endif
54811 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54812         "lsrs	r6, r7, #16\n\t"
54813 #else
54814         "lsr	r6, r7, #16\n\t"
54815 #endif
54816 #ifdef WOLFSSL_KEIL
54817         "muls	r5, r6, r5\n\t"
54818 #elif defined(__clang__)
54819         "muls	r5, r6\n\t"
54820 #else
54821         "mul	r5, r6\n\t"
54822 #endif
54823 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54824         "lsrs	r6, r5, #16\n\t"
54825 #else
54826         "lsr	r6, r5, #16\n\t"
54827 #endif
54828 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54829         "lsls	r5, r5, #16\n\t"
54830 #else
54831         "lsl	r5, r5, #16\n\t"
54832 #endif
54833 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54834         "adds	r4, r4, r5\n\t"
54835 #else
54836         "add	r4, r4, r5\n\t"
54837 #endif
54838 #ifdef WOLFSSL_KEIL
54839         "adcs	r2, r2, r6\n\t"
54840 #elif defined(__clang__)
54841         "adcs	r2, r6\n\t"
54842 #else
54843         "adc	r2, r6\n\t"
54844 #endif
54845 #ifdef WOLFSSL_KEIL
54846         "adcs	r3, r3, %[r]\n\t"
54847 #elif defined(__clang__)
54848         "adcs	r3, %[r]\n\t"
54849 #else
54850         "adc	r3, %[r]\n\t"
54851 #endif
54852 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54853         "adds	r4, r4, r5\n\t"
54854 #else
54855         "add	r4, r4, r5\n\t"
54856 #endif
54857 #ifdef WOLFSSL_KEIL
54858         "adcs	r2, r2, r6\n\t"
54859 #elif defined(__clang__)
54860         "adcs	r2, r6\n\t"
54861 #else
54862         "adc	r2, r6\n\t"
54863 #endif
54864 #ifdef WOLFSSL_KEIL
54865         "adcs	r3, r3, %[r]\n\t"
54866 #elif defined(__clang__)
54867         "adcs	r3, %[r]\n\t"
54868 #else
54869         "adc	r3, %[r]\n\t"
54870 #endif
54871 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54872         "lsrs	r5, %[a], #16\n\t"
54873 #else
54874         "lsr	r5, %[a], #16\n\t"
54875 #endif
54876 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54877         "lsrs	r6, r7, #16\n\t"
54878 #else
54879         "lsr	r6, r7, #16\n\t"
54880 #endif
54881 #ifdef WOLFSSL_KEIL
54882         "muls	r6, r5, r6\n\t"
54883 #elif defined(__clang__)
54884         "muls	r6, r5\n\t"
54885 #else
54886         "mul	r6, r5\n\t"
54887 #endif
54888 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54889         "adds	r2, r2, r6\n\t"
54890 #else
54891         "add	r2, r2, r6\n\t"
54892 #endif
54893 #ifdef WOLFSSL_KEIL
54894         "adcs	r3, r3, %[r]\n\t"
54895 #elif defined(__clang__)
54896         "adcs	r3, %[r]\n\t"
54897 #else
54898         "adc	r3, %[r]\n\t"
54899 #endif
54900 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54901         "adds	r2, r2, r6\n\t"
54902 #else
54903         "add	r2, r2, r6\n\t"
54904 #endif
54905 #ifdef WOLFSSL_KEIL
54906         "adcs	r3, r3, %[r]\n\t"
54907 #elif defined(__clang__)
54908         "adcs	r3, %[r]\n\t"
54909 #else
54910         "adc	r3, %[r]\n\t"
54911 #endif
54912         "uxth	r6, r7\n\t"
54913 #ifdef WOLFSSL_KEIL
54914         "muls	r5, r6, r5\n\t"
54915 #elif defined(__clang__)
54916         "muls	r5, r6\n\t"
54917 #else
54918         "mul	r5, r6\n\t"
54919 #endif
54920 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54921         "lsrs	r6, r5, #16\n\t"
54922 #else
54923         "lsr	r6, r5, #16\n\t"
54924 #endif
54925 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54926         "lsls	r5, r5, #16\n\t"
54927 #else
54928         "lsl	r5, r5, #16\n\t"
54929 #endif
54930 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54931         "adds	r4, r4, r5\n\t"
54932 #else
54933         "add	r4, r4, r5\n\t"
54934 #endif
54935 #ifdef WOLFSSL_KEIL
54936         "adcs	r2, r2, r6\n\t"
54937 #elif defined(__clang__)
54938         "adcs	r2, r6\n\t"
54939 #else
54940         "adc	r2, r6\n\t"
54941 #endif
54942 #ifdef WOLFSSL_KEIL
54943         "adcs	r3, r3, %[r]\n\t"
54944 #elif defined(__clang__)
54945         "adcs	r3, %[r]\n\t"
54946 #else
54947         "adc	r3, %[r]\n\t"
54948 #endif
54949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54950         "adds	r4, r4, r5\n\t"
54951 #else
54952         "add	r4, r4, r5\n\t"
54953 #endif
54954 #ifdef WOLFSSL_KEIL
54955         "adcs	r2, r2, r6\n\t"
54956 #elif defined(__clang__)
54957         "adcs	r2, r6\n\t"
54958 #else
54959         "adc	r2, r6\n\t"
54960 #endif
54961 #ifdef WOLFSSL_KEIL
54962         "adcs	r3, r3, %[r]\n\t"
54963 #elif defined(__clang__)
54964         "adcs	r3, %[r]\n\t"
54965 #else
54966         "adc	r3, %[r]\n\t"
54967 #endif
54968         "#  A[6] * A[2]\n\t"
54969         "mov	%[a], r9\n\t"
54970         "mov	r7, r12\n\t"
54971         "ldr	%[a], [%[a], #24]\n\t"
54972         "uxth	r5, %[a]\n\t"
54973         "uxth	r6, r7\n\t"
54974 #ifdef WOLFSSL_KEIL
54975         "muls	r6, r5, r6\n\t"
54976 #elif defined(__clang__)
54977         "muls	r6, r5\n\t"
54978 #else
54979         "mul	r6, r5\n\t"
54980 #endif
54981 #if defined(__clang__) || defined(WOLFSSL_KEIL)
54982         "adds	r4, r4, r6\n\t"
54983 #else
54984         "add	r4, r4, r6\n\t"
54985 #endif
54986 #ifdef WOLFSSL_KEIL
54987         "adcs	r2, r2, %[r]\n\t"
54988 #elif defined(__clang__)
54989         "adcs	r2, %[r]\n\t"
54990 #else
54991         "adc	r2, %[r]\n\t"
54992 #endif
54993 #ifdef WOLFSSL_KEIL
54994         "adcs	r3, r3, %[r]\n\t"
54995 #elif defined(__clang__)
54996         "adcs	r3, %[r]\n\t"
54997 #else
54998         "adc	r3, %[r]\n\t"
54999 #endif
55000 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55001         "adds	r4, r4, r6\n\t"
55002 #else
55003         "add	r4, r4, r6\n\t"
55004 #endif
55005 #ifdef WOLFSSL_KEIL
55006         "adcs	r2, r2, %[r]\n\t"
55007 #elif defined(__clang__)
55008         "adcs	r2, %[r]\n\t"
55009 #else
55010         "adc	r2, %[r]\n\t"
55011 #endif
55012 #ifdef WOLFSSL_KEIL
55013         "adcs	r3, r3, %[r]\n\t"
55014 #elif defined(__clang__)
55015         "adcs	r3, %[r]\n\t"
55016 #else
55017         "adc	r3, %[r]\n\t"
55018 #endif
55019 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55020         "lsrs	r6, r7, #16\n\t"
55021 #else
55022         "lsr	r6, r7, #16\n\t"
55023 #endif
55024 #ifdef WOLFSSL_KEIL
55025         "muls	r5, r6, r5\n\t"
55026 #elif defined(__clang__)
55027         "muls	r5, r6\n\t"
55028 #else
55029         "mul	r5, r6\n\t"
55030 #endif
55031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55032         "lsrs	r6, r5, #16\n\t"
55033 #else
55034         "lsr	r6, r5, #16\n\t"
55035 #endif
55036 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55037         "lsls	r5, r5, #16\n\t"
55038 #else
55039         "lsl	r5, r5, #16\n\t"
55040 #endif
55041 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55042         "adds	r4, r4, r5\n\t"
55043 #else
55044         "add	r4, r4, r5\n\t"
55045 #endif
55046 #ifdef WOLFSSL_KEIL
55047         "adcs	r2, r2, r6\n\t"
55048 #elif defined(__clang__)
55049         "adcs	r2, r6\n\t"
55050 #else
55051         "adc	r2, r6\n\t"
55052 #endif
55053 #ifdef WOLFSSL_KEIL
55054         "adcs	r3, r3, %[r]\n\t"
55055 #elif defined(__clang__)
55056         "adcs	r3, %[r]\n\t"
55057 #else
55058         "adc	r3, %[r]\n\t"
55059 #endif
55060 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55061         "adds	r4, r4, r5\n\t"
55062 #else
55063         "add	r4, r4, r5\n\t"
55064 #endif
55065 #ifdef WOLFSSL_KEIL
55066         "adcs	r2, r2, r6\n\t"
55067 #elif defined(__clang__)
55068         "adcs	r2, r6\n\t"
55069 #else
55070         "adc	r2, r6\n\t"
55071 #endif
55072 #ifdef WOLFSSL_KEIL
55073         "adcs	r3, r3, %[r]\n\t"
55074 #elif defined(__clang__)
55075         "adcs	r3, %[r]\n\t"
55076 #else
55077         "adc	r3, %[r]\n\t"
55078 #endif
55079 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55080         "lsrs	r5, %[a], #16\n\t"
55081 #else
55082         "lsr	r5, %[a], #16\n\t"
55083 #endif
55084 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55085         "lsrs	r6, r7, #16\n\t"
55086 #else
55087         "lsr	r6, r7, #16\n\t"
55088 #endif
55089 #ifdef WOLFSSL_KEIL
55090         "muls	r6, r5, r6\n\t"
55091 #elif defined(__clang__)
55092         "muls	r6, r5\n\t"
55093 #else
55094         "mul	r6, r5\n\t"
55095 #endif
55096 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55097         "adds	r2, r2, r6\n\t"
55098 #else
55099         "add	r2, r2, r6\n\t"
55100 #endif
55101 #ifdef WOLFSSL_KEIL
55102         "adcs	r3, r3, %[r]\n\t"
55103 #elif defined(__clang__)
55104         "adcs	r3, %[r]\n\t"
55105 #else
55106         "adc	r3, %[r]\n\t"
55107 #endif
55108 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55109         "adds	r2, r2, r6\n\t"
55110 #else
55111         "add	r2, r2, r6\n\t"
55112 #endif
55113 #ifdef WOLFSSL_KEIL
55114         "adcs	r3, r3, %[r]\n\t"
55115 #elif defined(__clang__)
55116         "adcs	r3, %[r]\n\t"
55117 #else
55118         "adc	r3, %[r]\n\t"
55119 #endif
55120         "uxth	r6, r7\n\t"
55121 #ifdef WOLFSSL_KEIL
55122         "muls	r5, r6, r5\n\t"
55123 #elif defined(__clang__)
55124         "muls	r5, r6\n\t"
55125 #else
55126         "mul	r5, r6\n\t"
55127 #endif
55128 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55129         "lsrs	r6, r5, #16\n\t"
55130 #else
55131         "lsr	r6, r5, #16\n\t"
55132 #endif
55133 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55134         "lsls	r5, r5, #16\n\t"
55135 #else
55136         "lsl	r5, r5, #16\n\t"
55137 #endif
55138 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55139         "adds	r4, r4, r5\n\t"
55140 #else
55141         "add	r4, r4, r5\n\t"
55142 #endif
55143 #ifdef WOLFSSL_KEIL
55144         "adcs	r2, r2, r6\n\t"
55145 #elif defined(__clang__)
55146         "adcs	r2, r6\n\t"
55147 #else
55148         "adc	r2, r6\n\t"
55149 #endif
55150 #ifdef WOLFSSL_KEIL
55151         "adcs	r3, r3, %[r]\n\t"
55152 #elif defined(__clang__)
55153         "adcs	r3, %[r]\n\t"
55154 #else
55155         "adc	r3, %[r]\n\t"
55156 #endif
55157 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55158         "adds	r4, r4, r5\n\t"
55159 #else
55160         "add	r4, r4, r5\n\t"
55161 #endif
55162 #ifdef WOLFSSL_KEIL
55163         "adcs	r2, r2, r6\n\t"
55164 #elif defined(__clang__)
55165         "adcs	r2, r6\n\t"
55166 #else
55167         "adc	r2, r6\n\t"
55168 #endif
55169 #ifdef WOLFSSL_KEIL
55170         "adcs	r3, r3, %[r]\n\t"
55171 #elif defined(__clang__)
55172         "adcs	r3, %[r]\n\t"
55173 #else
55174         "adc	r3, %[r]\n\t"
55175 #endif
55176         "#  A[5] * A[3]\n\t"
55177         "mov	%[a], r9\n\t"
55178         "mov	r7, lr\n\t"
55179         "ldr	%[a], [%[a], #20]\n\t"
55180         "uxth	r5, %[a]\n\t"
55181         "uxth	r6, r7\n\t"
55182 #ifdef WOLFSSL_KEIL
55183         "muls	r6, r5, r6\n\t"
55184 #elif defined(__clang__)
55185         "muls	r6, r5\n\t"
55186 #else
55187         "mul	r6, r5\n\t"
55188 #endif
55189 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55190         "adds	r4, r4, r6\n\t"
55191 #else
55192         "add	r4, r4, r6\n\t"
55193 #endif
55194 #ifdef WOLFSSL_KEIL
55195         "adcs	r2, r2, %[r]\n\t"
55196 #elif defined(__clang__)
55197         "adcs	r2, %[r]\n\t"
55198 #else
55199         "adc	r2, %[r]\n\t"
55200 #endif
55201 #ifdef WOLFSSL_KEIL
55202         "adcs	r3, r3, %[r]\n\t"
55203 #elif defined(__clang__)
55204         "adcs	r3, %[r]\n\t"
55205 #else
55206         "adc	r3, %[r]\n\t"
55207 #endif
55208 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55209         "adds	r4, r4, r6\n\t"
55210 #else
55211         "add	r4, r4, r6\n\t"
55212 #endif
55213 #ifdef WOLFSSL_KEIL
55214         "adcs	r2, r2, %[r]\n\t"
55215 #elif defined(__clang__)
55216         "adcs	r2, %[r]\n\t"
55217 #else
55218         "adc	r2, %[r]\n\t"
55219 #endif
55220 #ifdef WOLFSSL_KEIL
55221         "adcs	r3, r3, %[r]\n\t"
55222 #elif defined(__clang__)
55223         "adcs	r3, %[r]\n\t"
55224 #else
55225         "adc	r3, %[r]\n\t"
55226 #endif
55227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55228         "lsrs	r6, r7, #16\n\t"
55229 #else
55230         "lsr	r6, r7, #16\n\t"
55231 #endif
55232 #ifdef WOLFSSL_KEIL
55233         "muls	r5, r6, r5\n\t"
55234 #elif defined(__clang__)
55235         "muls	r5, r6\n\t"
55236 #else
55237         "mul	r5, r6\n\t"
55238 #endif
55239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55240         "lsrs	r6, r5, #16\n\t"
55241 #else
55242         "lsr	r6, r5, #16\n\t"
55243 #endif
55244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55245         "lsls	r5, r5, #16\n\t"
55246 #else
55247         "lsl	r5, r5, #16\n\t"
55248 #endif
55249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55250         "adds	r4, r4, r5\n\t"
55251 #else
55252         "add	r4, r4, r5\n\t"
55253 #endif
55254 #ifdef WOLFSSL_KEIL
55255         "adcs	r2, r2, r6\n\t"
55256 #elif defined(__clang__)
55257         "adcs	r2, r6\n\t"
55258 #else
55259         "adc	r2, r6\n\t"
55260 #endif
55261 #ifdef WOLFSSL_KEIL
55262         "adcs	r3, r3, %[r]\n\t"
55263 #elif defined(__clang__)
55264         "adcs	r3, %[r]\n\t"
55265 #else
55266         "adc	r3, %[r]\n\t"
55267 #endif
55268 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55269         "adds	r4, r4, r5\n\t"
55270 #else
55271         "add	r4, r4, r5\n\t"
55272 #endif
55273 #ifdef WOLFSSL_KEIL
55274         "adcs	r2, r2, r6\n\t"
55275 #elif defined(__clang__)
55276         "adcs	r2, r6\n\t"
55277 #else
55278         "adc	r2, r6\n\t"
55279 #endif
55280 #ifdef WOLFSSL_KEIL
55281         "adcs	r3, r3, %[r]\n\t"
55282 #elif defined(__clang__)
55283         "adcs	r3, %[r]\n\t"
55284 #else
55285         "adc	r3, %[r]\n\t"
55286 #endif
55287 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55288         "lsrs	r5, %[a], #16\n\t"
55289 #else
55290         "lsr	r5, %[a], #16\n\t"
55291 #endif
55292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55293         "lsrs	r6, r7, #16\n\t"
55294 #else
55295         "lsr	r6, r7, #16\n\t"
55296 #endif
55297 #ifdef WOLFSSL_KEIL
55298         "muls	r6, r5, r6\n\t"
55299 #elif defined(__clang__)
55300         "muls	r6, r5\n\t"
55301 #else
55302         "mul	r6, r5\n\t"
55303 #endif
55304 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55305         "adds	r2, r2, r6\n\t"
55306 #else
55307         "add	r2, r2, r6\n\t"
55308 #endif
55309 #ifdef WOLFSSL_KEIL
55310         "adcs	r3, r3, %[r]\n\t"
55311 #elif defined(__clang__)
55312         "adcs	r3, %[r]\n\t"
55313 #else
55314         "adc	r3, %[r]\n\t"
55315 #endif
55316 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55317         "adds	r2, r2, r6\n\t"
55318 #else
55319         "add	r2, r2, r6\n\t"
55320 #endif
55321 #ifdef WOLFSSL_KEIL
55322         "adcs	r3, r3, %[r]\n\t"
55323 #elif defined(__clang__)
55324         "adcs	r3, %[r]\n\t"
55325 #else
55326         "adc	r3, %[r]\n\t"
55327 #endif
55328         "uxth	r6, r7\n\t"
55329 #ifdef WOLFSSL_KEIL
55330         "muls	r5, r6, r5\n\t"
55331 #elif defined(__clang__)
55332         "muls	r5, r6\n\t"
55333 #else
55334         "mul	r5, r6\n\t"
55335 #endif
55336 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55337         "lsrs	r6, r5, #16\n\t"
55338 #else
55339         "lsr	r6, r5, #16\n\t"
55340 #endif
55341 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55342         "lsls	r5, r5, #16\n\t"
55343 #else
55344         "lsl	r5, r5, #16\n\t"
55345 #endif
55346 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55347         "adds	r4, r4, r5\n\t"
55348 #else
55349         "add	r4, r4, r5\n\t"
55350 #endif
55351 #ifdef WOLFSSL_KEIL
55352         "adcs	r2, r2, r6\n\t"
55353 #elif defined(__clang__)
55354         "adcs	r2, r6\n\t"
55355 #else
55356         "adc	r2, r6\n\t"
55357 #endif
55358 #ifdef WOLFSSL_KEIL
55359         "adcs	r3, r3, %[r]\n\t"
55360 #elif defined(__clang__)
55361         "adcs	r3, %[r]\n\t"
55362 #else
55363         "adc	r3, %[r]\n\t"
55364 #endif
55365 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55366         "adds	r4, r4, r5\n\t"
55367 #else
55368         "add	r4, r4, r5\n\t"
55369 #endif
55370 #ifdef WOLFSSL_KEIL
55371         "adcs	r2, r2, r6\n\t"
55372 #elif defined(__clang__)
55373         "adcs	r2, r6\n\t"
55374 #else
55375         "adc	r2, r6\n\t"
55376 #endif
55377 #ifdef WOLFSSL_KEIL
55378         "adcs	r3, r3, %[r]\n\t"
55379 #elif defined(__clang__)
55380         "adcs	r3, %[r]\n\t"
55381 #else
55382         "adc	r3, %[r]\n\t"
55383 #endif
55384         "#  A[4] * A[4]\n\t"
55385         "mov	%[a], r9\n\t"
55386         "ldr	r7, [%[a], #16]\n\t"
55387 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55388         "lsrs	r6, r7, #16\n\t"
55389 #else
55390         "lsr	r6, r7, #16\n\t"
55391 #endif
55392         "uxth	r5, r7\n\t"
55393 #ifdef WOLFSSL_KEIL
55394         "muls	r5, r5, r5\n\t"
55395 #elif defined(__clang__)
55396         "muls	r5, r5\n\t"
55397 #else
55398         "mul	r5, r5\n\t"
55399 #endif
55400 #ifdef WOLFSSL_KEIL
55401         "muls	r6, r6, r6\n\t"
55402 #elif defined(__clang__)
55403         "muls	r6, r6\n\t"
55404 #else
55405         "mul	r6, r6\n\t"
55406 #endif
55407 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55408         "adds	r4, r4, r5\n\t"
55409 #else
55410         "add	r4, r4, r5\n\t"
55411 #endif
55412 #ifdef WOLFSSL_KEIL
55413         "adcs	r2, r2, r6\n\t"
55414 #elif defined(__clang__)
55415         "adcs	r2, r6\n\t"
55416 #else
55417         "adc	r2, r6\n\t"
55418 #endif
55419 #ifdef WOLFSSL_KEIL
55420         "adcs	r3, r3, %[r]\n\t"
55421 #elif defined(__clang__)
55422         "adcs	r3, %[r]\n\t"
55423 #else
55424         "adc	r3, %[r]\n\t"
55425 #endif
55426 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55427         "lsrs	r6, r7, #16\n\t"
55428 #else
55429         "lsr	r6, r7, #16\n\t"
55430 #endif
55431         "uxth	r5, r7\n\t"
55432 #ifdef WOLFSSL_KEIL
55433         "muls	r5, r6, r5\n\t"
55434 #elif defined(__clang__)
55435         "muls	r5, r6\n\t"
55436 #else
55437         "mul	r5, r6\n\t"
55438 #endif
55439 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55440         "lsrs	r6, r5, #15\n\t"
55441 #else
55442         "lsr	r6, r5, #15\n\t"
55443 #endif
55444 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55445         "lsls	r5, r5, #17\n\t"
55446 #else
55447         "lsl	r5, r5, #17\n\t"
55448 #endif
55449 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55450         "adds	r4, r4, r5\n\t"
55451 #else
55452         "add	r4, r4, r5\n\t"
55453 #endif
55454 #ifdef WOLFSSL_KEIL
55455         "adcs	r2, r2, r6\n\t"
55456 #elif defined(__clang__)
55457         "adcs	r2, r6\n\t"
55458 #else
55459         "adc	r2, r6\n\t"
55460 #endif
55461 #ifdef WOLFSSL_KEIL
55462         "adcs	r3, r3, %[r]\n\t"
55463 #elif defined(__clang__)
55464         "adcs	r3, %[r]\n\t"
55465 #else
55466         "adc	r3, %[r]\n\t"
55467 #endif
55468         "str	r4, [sp, #32]\n\t"
55469         "#  A[5] * A[4]\n\t"
55470         "movs	r4, #0\n\t"
55471         "ldr	%[a], [%[a], #20]\n\t"
55472         "uxth	r5, %[a]\n\t"
55473         "uxth	r6, r7\n\t"
55474 #ifdef WOLFSSL_KEIL
55475         "muls	r6, r5, r6\n\t"
55476 #elif defined(__clang__)
55477         "muls	r6, r5\n\t"
55478 #else
55479         "mul	r6, r5\n\t"
55480 #endif
55481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55482         "adds	r2, r2, r6\n\t"
55483 #else
55484         "add	r2, r2, r6\n\t"
55485 #endif
55486 #ifdef WOLFSSL_KEIL
55487         "adcs	r3, r3, %[r]\n\t"
55488 #elif defined(__clang__)
55489         "adcs	r3, %[r]\n\t"
55490 #else
55491         "adc	r3, %[r]\n\t"
55492 #endif
55493 #ifdef WOLFSSL_KEIL
55494         "adcs	r4, r4, %[r]\n\t"
55495 #elif defined(__clang__)
55496         "adcs	r4, %[r]\n\t"
55497 #else
55498         "adc	r4, %[r]\n\t"
55499 #endif
55500 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55501         "adds	r2, r2, r6\n\t"
55502 #else
55503         "add	r2, r2, r6\n\t"
55504 #endif
55505 #ifdef WOLFSSL_KEIL
55506         "adcs	r3, r3, %[r]\n\t"
55507 #elif defined(__clang__)
55508         "adcs	r3, %[r]\n\t"
55509 #else
55510         "adc	r3, %[r]\n\t"
55511 #endif
55512 #ifdef WOLFSSL_KEIL
55513         "adcs	r4, r4, %[r]\n\t"
55514 #elif defined(__clang__)
55515         "adcs	r4, %[r]\n\t"
55516 #else
55517         "adc	r4, %[r]\n\t"
55518 #endif
55519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55520         "lsrs	r6, r7, #16\n\t"
55521 #else
55522         "lsr	r6, r7, #16\n\t"
55523 #endif
55524 #ifdef WOLFSSL_KEIL
55525         "muls	r5, r6, r5\n\t"
55526 #elif defined(__clang__)
55527         "muls	r5, r6\n\t"
55528 #else
55529         "mul	r5, r6\n\t"
55530 #endif
55531 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55532         "lsrs	r6, r5, #16\n\t"
55533 #else
55534         "lsr	r6, r5, #16\n\t"
55535 #endif
55536 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55537         "lsls	r5, r5, #16\n\t"
55538 #else
55539         "lsl	r5, r5, #16\n\t"
55540 #endif
55541 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55542         "adds	r2, r2, r5\n\t"
55543 #else
55544         "add	r2, r2, r5\n\t"
55545 #endif
55546 #ifdef WOLFSSL_KEIL
55547         "adcs	r3, r3, r6\n\t"
55548 #elif defined(__clang__)
55549         "adcs	r3, r6\n\t"
55550 #else
55551         "adc	r3, r6\n\t"
55552 #endif
55553 #ifdef WOLFSSL_KEIL
55554         "adcs	r4, r4, %[r]\n\t"
55555 #elif defined(__clang__)
55556         "adcs	r4, %[r]\n\t"
55557 #else
55558         "adc	r4, %[r]\n\t"
55559 #endif
55560 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55561         "adds	r2, r2, r5\n\t"
55562 #else
55563         "add	r2, r2, r5\n\t"
55564 #endif
55565 #ifdef WOLFSSL_KEIL
55566         "adcs	r3, r3, r6\n\t"
55567 #elif defined(__clang__)
55568         "adcs	r3, r6\n\t"
55569 #else
55570         "adc	r3, r6\n\t"
55571 #endif
55572 #ifdef WOLFSSL_KEIL
55573         "adcs	r4, r4, %[r]\n\t"
55574 #elif defined(__clang__)
55575         "adcs	r4, %[r]\n\t"
55576 #else
55577         "adc	r4, %[r]\n\t"
55578 #endif
55579 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55580         "lsrs	r5, %[a], #16\n\t"
55581 #else
55582         "lsr	r5, %[a], #16\n\t"
55583 #endif
55584 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55585         "lsrs	r6, r7, #16\n\t"
55586 #else
55587         "lsr	r6, r7, #16\n\t"
55588 #endif
55589 #ifdef WOLFSSL_KEIL
55590         "muls	r6, r5, r6\n\t"
55591 #elif defined(__clang__)
55592         "muls	r6, r5\n\t"
55593 #else
55594         "mul	r6, r5\n\t"
55595 #endif
55596 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55597         "adds	r3, r3, r6\n\t"
55598 #else
55599         "add	r3, r3, r6\n\t"
55600 #endif
55601 #ifdef WOLFSSL_KEIL
55602         "adcs	r4, r4, %[r]\n\t"
55603 #elif defined(__clang__)
55604         "adcs	r4, %[r]\n\t"
55605 #else
55606         "adc	r4, %[r]\n\t"
55607 #endif
55608 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55609         "adds	r3, r3, r6\n\t"
55610 #else
55611         "add	r3, r3, r6\n\t"
55612 #endif
55613 #ifdef WOLFSSL_KEIL
55614         "adcs	r4, r4, %[r]\n\t"
55615 #elif defined(__clang__)
55616         "adcs	r4, %[r]\n\t"
55617 #else
55618         "adc	r4, %[r]\n\t"
55619 #endif
55620         "uxth	r6, r7\n\t"
55621 #ifdef WOLFSSL_KEIL
55622         "muls	r5, r6, r5\n\t"
55623 #elif defined(__clang__)
55624         "muls	r5, r6\n\t"
55625 #else
55626         "mul	r5, r6\n\t"
55627 #endif
55628 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55629         "lsrs	r6, r5, #16\n\t"
55630 #else
55631         "lsr	r6, r5, #16\n\t"
55632 #endif
55633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55634         "lsls	r5, r5, #16\n\t"
55635 #else
55636         "lsl	r5, r5, #16\n\t"
55637 #endif
55638 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55639         "adds	r2, r2, r5\n\t"
55640 #else
55641         "add	r2, r2, r5\n\t"
55642 #endif
55643 #ifdef WOLFSSL_KEIL
55644         "adcs	r3, r3, r6\n\t"
55645 #elif defined(__clang__)
55646         "adcs	r3, r6\n\t"
55647 #else
55648         "adc	r3, r6\n\t"
55649 #endif
55650 #ifdef WOLFSSL_KEIL
55651         "adcs	r4, r4, %[r]\n\t"
55652 #elif defined(__clang__)
55653         "adcs	r4, %[r]\n\t"
55654 #else
55655         "adc	r4, %[r]\n\t"
55656 #endif
55657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55658         "adds	r2, r2, r5\n\t"
55659 #else
55660         "add	r2, r2, r5\n\t"
55661 #endif
55662 #ifdef WOLFSSL_KEIL
55663         "adcs	r3, r3, r6\n\t"
55664 #elif defined(__clang__)
55665         "adcs	r3, r6\n\t"
55666 #else
55667         "adc	r3, r6\n\t"
55668 #endif
55669 #ifdef WOLFSSL_KEIL
55670         "adcs	r4, r4, %[r]\n\t"
55671 #elif defined(__clang__)
55672         "adcs	r4, %[r]\n\t"
55673 #else
55674         "adc	r4, %[r]\n\t"
55675 #endif
55676         "#  A[6] * A[3]\n\t"
55677         "mov	%[a], r9\n\t"
55678         "mov	r7, lr\n\t"
55679         "ldr	%[a], [%[a], #24]\n\t"
55680         "uxth	r5, %[a]\n\t"
55681         "uxth	r6, r7\n\t"
55682 #ifdef WOLFSSL_KEIL
55683         "muls	r6, r5, r6\n\t"
55684 #elif defined(__clang__)
55685         "muls	r6, r5\n\t"
55686 #else
55687         "mul	r6, r5\n\t"
55688 #endif
55689 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55690         "adds	r2, r2, r6\n\t"
55691 #else
55692         "add	r2, r2, r6\n\t"
55693 #endif
55694 #ifdef WOLFSSL_KEIL
55695         "adcs	r3, r3, %[r]\n\t"
55696 #elif defined(__clang__)
55697         "adcs	r3, %[r]\n\t"
55698 #else
55699         "adc	r3, %[r]\n\t"
55700 #endif
55701 #ifdef WOLFSSL_KEIL
55702         "adcs	r4, r4, %[r]\n\t"
55703 #elif defined(__clang__)
55704         "adcs	r4, %[r]\n\t"
55705 #else
55706         "adc	r4, %[r]\n\t"
55707 #endif
55708 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55709         "adds	r2, r2, r6\n\t"
55710 #else
55711         "add	r2, r2, r6\n\t"
55712 #endif
55713 #ifdef WOLFSSL_KEIL
55714         "adcs	r3, r3, %[r]\n\t"
55715 #elif defined(__clang__)
55716         "adcs	r3, %[r]\n\t"
55717 #else
55718         "adc	r3, %[r]\n\t"
55719 #endif
55720 #ifdef WOLFSSL_KEIL
55721         "adcs	r4, r4, %[r]\n\t"
55722 #elif defined(__clang__)
55723         "adcs	r4, %[r]\n\t"
55724 #else
55725         "adc	r4, %[r]\n\t"
55726 #endif
55727 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55728         "lsrs	r6, r7, #16\n\t"
55729 #else
55730         "lsr	r6, r7, #16\n\t"
55731 #endif
55732 #ifdef WOLFSSL_KEIL
55733         "muls	r5, r6, r5\n\t"
55734 #elif defined(__clang__)
55735         "muls	r5, r6\n\t"
55736 #else
55737         "mul	r5, r6\n\t"
55738 #endif
55739 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55740         "lsrs	r6, r5, #16\n\t"
55741 #else
55742         "lsr	r6, r5, #16\n\t"
55743 #endif
55744 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55745         "lsls	r5, r5, #16\n\t"
55746 #else
55747         "lsl	r5, r5, #16\n\t"
55748 #endif
55749 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55750         "adds	r2, r2, r5\n\t"
55751 #else
55752         "add	r2, r2, r5\n\t"
55753 #endif
55754 #ifdef WOLFSSL_KEIL
55755         "adcs	r3, r3, r6\n\t"
55756 #elif defined(__clang__)
55757         "adcs	r3, r6\n\t"
55758 #else
55759         "adc	r3, r6\n\t"
55760 #endif
55761 #ifdef WOLFSSL_KEIL
55762         "adcs	r4, r4, %[r]\n\t"
55763 #elif defined(__clang__)
55764         "adcs	r4, %[r]\n\t"
55765 #else
55766         "adc	r4, %[r]\n\t"
55767 #endif
55768 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55769         "adds	r2, r2, r5\n\t"
55770 #else
55771         "add	r2, r2, r5\n\t"
55772 #endif
55773 #ifdef WOLFSSL_KEIL
55774         "adcs	r3, r3, r6\n\t"
55775 #elif defined(__clang__)
55776         "adcs	r3, r6\n\t"
55777 #else
55778         "adc	r3, r6\n\t"
55779 #endif
55780 #ifdef WOLFSSL_KEIL
55781         "adcs	r4, r4, %[r]\n\t"
55782 #elif defined(__clang__)
55783         "adcs	r4, %[r]\n\t"
55784 #else
55785         "adc	r4, %[r]\n\t"
55786 #endif
55787 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55788         "lsrs	r5, %[a], #16\n\t"
55789 #else
55790         "lsr	r5, %[a], #16\n\t"
55791 #endif
55792 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55793         "lsrs	r6, r7, #16\n\t"
55794 #else
55795         "lsr	r6, r7, #16\n\t"
55796 #endif
55797 #ifdef WOLFSSL_KEIL
55798         "muls	r6, r5, r6\n\t"
55799 #elif defined(__clang__)
55800         "muls	r6, r5\n\t"
55801 #else
55802         "mul	r6, r5\n\t"
55803 #endif
55804 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55805         "adds	r3, r3, r6\n\t"
55806 #else
55807         "add	r3, r3, r6\n\t"
55808 #endif
55809 #ifdef WOLFSSL_KEIL
55810         "adcs	r4, r4, %[r]\n\t"
55811 #elif defined(__clang__)
55812         "adcs	r4, %[r]\n\t"
55813 #else
55814         "adc	r4, %[r]\n\t"
55815 #endif
55816 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55817         "adds	r3, r3, r6\n\t"
55818 #else
55819         "add	r3, r3, r6\n\t"
55820 #endif
55821 #ifdef WOLFSSL_KEIL
55822         "adcs	r4, r4, %[r]\n\t"
55823 #elif defined(__clang__)
55824         "adcs	r4, %[r]\n\t"
55825 #else
55826         "adc	r4, %[r]\n\t"
55827 #endif
55828         "uxth	r6, r7\n\t"
55829 #ifdef WOLFSSL_KEIL
55830         "muls	r5, r6, r5\n\t"
55831 #elif defined(__clang__)
55832         "muls	r5, r6\n\t"
55833 #else
55834         "mul	r5, r6\n\t"
55835 #endif
55836 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55837         "lsrs	r6, r5, #16\n\t"
55838 #else
55839         "lsr	r6, r5, #16\n\t"
55840 #endif
55841 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55842         "lsls	r5, r5, #16\n\t"
55843 #else
55844         "lsl	r5, r5, #16\n\t"
55845 #endif
55846 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55847         "adds	r2, r2, r5\n\t"
55848 #else
55849         "add	r2, r2, r5\n\t"
55850 #endif
55851 #ifdef WOLFSSL_KEIL
55852         "adcs	r3, r3, r6\n\t"
55853 #elif defined(__clang__)
55854         "adcs	r3, r6\n\t"
55855 #else
55856         "adc	r3, r6\n\t"
55857 #endif
55858 #ifdef WOLFSSL_KEIL
55859         "adcs	r4, r4, %[r]\n\t"
55860 #elif defined(__clang__)
55861         "adcs	r4, %[r]\n\t"
55862 #else
55863         "adc	r4, %[r]\n\t"
55864 #endif
55865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55866         "adds	r2, r2, r5\n\t"
55867 #else
55868         "add	r2, r2, r5\n\t"
55869 #endif
55870 #ifdef WOLFSSL_KEIL
55871         "adcs	r3, r3, r6\n\t"
55872 #elif defined(__clang__)
55873         "adcs	r3, r6\n\t"
55874 #else
55875         "adc	r3, r6\n\t"
55876 #endif
55877 #ifdef WOLFSSL_KEIL
55878         "adcs	r4, r4, %[r]\n\t"
55879 #elif defined(__clang__)
55880         "adcs	r4, %[r]\n\t"
55881 #else
55882         "adc	r4, %[r]\n\t"
55883 #endif
55884         "#  A[7] * A[2]\n\t"
55885         "mov	%[a], r9\n\t"
55886         "mov	r7, r12\n\t"
55887         "ldr	%[a], [%[a], #28]\n\t"
55888         "uxth	r5, %[a]\n\t"
55889         "uxth	r6, r7\n\t"
55890 #ifdef WOLFSSL_KEIL
55891         "muls	r6, r5, r6\n\t"
55892 #elif defined(__clang__)
55893         "muls	r6, r5\n\t"
55894 #else
55895         "mul	r6, r5\n\t"
55896 #endif
55897 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55898         "adds	r2, r2, r6\n\t"
55899 #else
55900         "add	r2, r2, r6\n\t"
55901 #endif
55902 #ifdef WOLFSSL_KEIL
55903         "adcs	r3, r3, %[r]\n\t"
55904 #elif defined(__clang__)
55905         "adcs	r3, %[r]\n\t"
55906 #else
55907         "adc	r3, %[r]\n\t"
55908 #endif
55909 #ifdef WOLFSSL_KEIL
55910         "adcs	r4, r4, %[r]\n\t"
55911 #elif defined(__clang__)
55912         "adcs	r4, %[r]\n\t"
55913 #else
55914         "adc	r4, %[r]\n\t"
55915 #endif
55916 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55917         "adds	r2, r2, r6\n\t"
55918 #else
55919         "add	r2, r2, r6\n\t"
55920 #endif
55921 #ifdef WOLFSSL_KEIL
55922         "adcs	r3, r3, %[r]\n\t"
55923 #elif defined(__clang__)
55924         "adcs	r3, %[r]\n\t"
55925 #else
55926         "adc	r3, %[r]\n\t"
55927 #endif
55928 #ifdef WOLFSSL_KEIL
55929         "adcs	r4, r4, %[r]\n\t"
55930 #elif defined(__clang__)
55931         "adcs	r4, %[r]\n\t"
55932 #else
55933         "adc	r4, %[r]\n\t"
55934 #endif
55935 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55936         "lsrs	r6, r7, #16\n\t"
55937 #else
55938         "lsr	r6, r7, #16\n\t"
55939 #endif
55940 #ifdef WOLFSSL_KEIL
55941         "muls	r5, r6, r5\n\t"
55942 #elif defined(__clang__)
55943         "muls	r5, r6\n\t"
55944 #else
55945         "mul	r5, r6\n\t"
55946 #endif
55947 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55948         "lsrs	r6, r5, #16\n\t"
55949 #else
55950         "lsr	r6, r5, #16\n\t"
55951 #endif
55952 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55953         "lsls	r5, r5, #16\n\t"
55954 #else
55955         "lsl	r5, r5, #16\n\t"
55956 #endif
55957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55958         "adds	r2, r2, r5\n\t"
55959 #else
55960         "add	r2, r2, r5\n\t"
55961 #endif
55962 #ifdef WOLFSSL_KEIL
55963         "adcs	r3, r3, r6\n\t"
55964 #elif defined(__clang__)
55965         "adcs	r3, r6\n\t"
55966 #else
55967         "adc	r3, r6\n\t"
55968 #endif
55969 #ifdef WOLFSSL_KEIL
55970         "adcs	r4, r4, %[r]\n\t"
55971 #elif defined(__clang__)
55972         "adcs	r4, %[r]\n\t"
55973 #else
55974         "adc	r4, %[r]\n\t"
55975 #endif
55976 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55977         "adds	r2, r2, r5\n\t"
55978 #else
55979         "add	r2, r2, r5\n\t"
55980 #endif
55981 #ifdef WOLFSSL_KEIL
55982         "adcs	r3, r3, r6\n\t"
55983 #elif defined(__clang__)
55984         "adcs	r3, r6\n\t"
55985 #else
55986         "adc	r3, r6\n\t"
55987 #endif
55988 #ifdef WOLFSSL_KEIL
55989         "adcs	r4, r4, %[r]\n\t"
55990 #elif defined(__clang__)
55991         "adcs	r4, %[r]\n\t"
55992 #else
55993         "adc	r4, %[r]\n\t"
55994 #endif
55995 #if defined(__clang__) || defined(WOLFSSL_KEIL)
55996         "lsrs	r5, %[a], #16\n\t"
55997 #else
55998         "lsr	r5, %[a], #16\n\t"
55999 #endif
56000 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56001         "lsrs	r6, r7, #16\n\t"
56002 #else
56003         "lsr	r6, r7, #16\n\t"
56004 #endif
56005 #ifdef WOLFSSL_KEIL
56006         "muls	r6, r5, r6\n\t"
56007 #elif defined(__clang__)
56008         "muls	r6, r5\n\t"
56009 #else
56010         "mul	r6, r5\n\t"
56011 #endif
56012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56013         "adds	r3, r3, r6\n\t"
56014 #else
56015         "add	r3, r3, r6\n\t"
56016 #endif
56017 #ifdef WOLFSSL_KEIL
56018         "adcs	r4, r4, %[r]\n\t"
56019 #elif defined(__clang__)
56020         "adcs	r4, %[r]\n\t"
56021 #else
56022         "adc	r4, %[r]\n\t"
56023 #endif
56024 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56025         "adds	r3, r3, r6\n\t"
56026 #else
56027         "add	r3, r3, r6\n\t"
56028 #endif
56029 #ifdef WOLFSSL_KEIL
56030         "adcs	r4, r4, %[r]\n\t"
56031 #elif defined(__clang__)
56032         "adcs	r4, %[r]\n\t"
56033 #else
56034         "adc	r4, %[r]\n\t"
56035 #endif
56036         "uxth	r6, r7\n\t"
56037 #ifdef WOLFSSL_KEIL
56038         "muls	r5, r6, r5\n\t"
56039 #elif defined(__clang__)
56040         "muls	r5, r6\n\t"
56041 #else
56042         "mul	r5, r6\n\t"
56043 #endif
56044 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56045         "lsrs	r6, r5, #16\n\t"
56046 #else
56047         "lsr	r6, r5, #16\n\t"
56048 #endif
56049 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56050         "lsls	r5, r5, #16\n\t"
56051 #else
56052         "lsl	r5, r5, #16\n\t"
56053 #endif
56054 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56055         "adds	r2, r2, r5\n\t"
56056 #else
56057         "add	r2, r2, r5\n\t"
56058 #endif
56059 #ifdef WOLFSSL_KEIL
56060         "adcs	r3, r3, r6\n\t"
56061 #elif defined(__clang__)
56062         "adcs	r3, r6\n\t"
56063 #else
56064         "adc	r3, r6\n\t"
56065 #endif
56066 #ifdef WOLFSSL_KEIL
56067         "adcs	r4, r4, %[r]\n\t"
56068 #elif defined(__clang__)
56069         "adcs	r4, %[r]\n\t"
56070 #else
56071         "adc	r4, %[r]\n\t"
56072 #endif
56073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56074         "adds	r2, r2, r5\n\t"
56075 #else
56076         "add	r2, r2, r5\n\t"
56077 #endif
56078 #ifdef WOLFSSL_KEIL
56079         "adcs	r3, r3, r6\n\t"
56080 #elif defined(__clang__)
56081         "adcs	r3, r6\n\t"
56082 #else
56083         "adc	r3, r6\n\t"
56084 #endif
56085 #ifdef WOLFSSL_KEIL
56086         "adcs	r4, r4, %[r]\n\t"
56087 #elif defined(__clang__)
56088         "adcs	r4, %[r]\n\t"
56089 #else
56090         "adc	r4, %[r]\n\t"
56091 #endif
56092         "#  A[8] * A[1]\n\t"
56093         "mov	%[a], r9\n\t"
56094         "mov	r7, r11\n\t"
56095         "ldr	%[a], [%[a], #32]\n\t"
56096         "uxth	r5, %[a]\n\t"
56097         "uxth	r6, r7\n\t"
56098 #ifdef WOLFSSL_KEIL
56099         "muls	r6, r5, r6\n\t"
56100 #elif defined(__clang__)
56101         "muls	r6, r5\n\t"
56102 #else
56103         "mul	r6, r5\n\t"
56104 #endif
56105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56106         "adds	r2, r2, r6\n\t"
56107 #else
56108         "add	r2, r2, r6\n\t"
56109 #endif
56110 #ifdef WOLFSSL_KEIL
56111         "adcs	r3, r3, %[r]\n\t"
56112 #elif defined(__clang__)
56113         "adcs	r3, %[r]\n\t"
56114 #else
56115         "adc	r3, %[r]\n\t"
56116 #endif
56117 #ifdef WOLFSSL_KEIL
56118         "adcs	r4, r4, %[r]\n\t"
56119 #elif defined(__clang__)
56120         "adcs	r4, %[r]\n\t"
56121 #else
56122         "adc	r4, %[r]\n\t"
56123 #endif
56124 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56125         "adds	r2, r2, r6\n\t"
56126 #else
56127         "add	r2, r2, r6\n\t"
56128 #endif
56129 #ifdef WOLFSSL_KEIL
56130         "adcs	r3, r3, %[r]\n\t"
56131 #elif defined(__clang__)
56132         "adcs	r3, %[r]\n\t"
56133 #else
56134         "adc	r3, %[r]\n\t"
56135 #endif
56136 #ifdef WOLFSSL_KEIL
56137         "adcs	r4, r4, %[r]\n\t"
56138 #elif defined(__clang__)
56139         "adcs	r4, %[r]\n\t"
56140 #else
56141         "adc	r4, %[r]\n\t"
56142 #endif
56143 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56144         "lsrs	r6, r7, #16\n\t"
56145 #else
56146         "lsr	r6, r7, #16\n\t"
56147 #endif
56148 #ifdef WOLFSSL_KEIL
56149         "muls	r5, r6, r5\n\t"
56150 #elif defined(__clang__)
56151         "muls	r5, r6\n\t"
56152 #else
56153         "mul	r5, r6\n\t"
56154 #endif
56155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56156         "lsrs	r6, r5, #16\n\t"
56157 #else
56158         "lsr	r6, r5, #16\n\t"
56159 #endif
56160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56161         "lsls	r5, r5, #16\n\t"
56162 #else
56163         "lsl	r5, r5, #16\n\t"
56164 #endif
56165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56166         "adds	r2, r2, r5\n\t"
56167 #else
56168         "add	r2, r2, r5\n\t"
56169 #endif
56170 #ifdef WOLFSSL_KEIL
56171         "adcs	r3, r3, r6\n\t"
56172 #elif defined(__clang__)
56173         "adcs	r3, r6\n\t"
56174 #else
56175         "adc	r3, r6\n\t"
56176 #endif
56177 #ifdef WOLFSSL_KEIL
56178         "adcs	r4, r4, %[r]\n\t"
56179 #elif defined(__clang__)
56180         "adcs	r4, %[r]\n\t"
56181 #else
56182         "adc	r4, %[r]\n\t"
56183 #endif
56184 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56185         "adds	r2, r2, r5\n\t"
56186 #else
56187         "add	r2, r2, r5\n\t"
56188 #endif
56189 #ifdef WOLFSSL_KEIL
56190         "adcs	r3, r3, r6\n\t"
56191 #elif defined(__clang__)
56192         "adcs	r3, r6\n\t"
56193 #else
56194         "adc	r3, r6\n\t"
56195 #endif
56196 #ifdef WOLFSSL_KEIL
56197         "adcs	r4, r4, %[r]\n\t"
56198 #elif defined(__clang__)
56199         "adcs	r4, %[r]\n\t"
56200 #else
56201         "adc	r4, %[r]\n\t"
56202 #endif
56203 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56204         "lsrs	r5, %[a], #16\n\t"
56205 #else
56206         "lsr	r5, %[a], #16\n\t"
56207 #endif
56208 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56209         "lsrs	r6, r7, #16\n\t"
56210 #else
56211         "lsr	r6, r7, #16\n\t"
56212 #endif
56213 #ifdef WOLFSSL_KEIL
56214         "muls	r6, r5, r6\n\t"
56215 #elif defined(__clang__)
56216         "muls	r6, r5\n\t"
56217 #else
56218         "mul	r6, r5\n\t"
56219 #endif
56220 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56221         "adds	r3, r3, r6\n\t"
56222 #else
56223         "add	r3, r3, r6\n\t"
56224 #endif
56225 #ifdef WOLFSSL_KEIL
56226         "adcs	r4, r4, %[r]\n\t"
56227 #elif defined(__clang__)
56228         "adcs	r4, %[r]\n\t"
56229 #else
56230         "adc	r4, %[r]\n\t"
56231 #endif
56232 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56233         "adds	r3, r3, r6\n\t"
56234 #else
56235         "add	r3, r3, r6\n\t"
56236 #endif
56237 #ifdef WOLFSSL_KEIL
56238         "adcs	r4, r4, %[r]\n\t"
56239 #elif defined(__clang__)
56240         "adcs	r4, %[r]\n\t"
56241 #else
56242         "adc	r4, %[r]\n\t"
56243 #endif
56244         "uxth	r6, r7\n\t"
56245 #ifdef WOLFSSL_KEIL
56246         "muls	r5, r6, r5\n\t"
56247 #elif defined(__clang__)
56248         "muls	r5, r6\n\t"
56249 #else
56250         "mul	r5, r6\n\t"
56251 #endif
56252 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56253         "lsrs	r6, r5, #16\n\t"
56254 #else
56255         "lsr	r6, r5, #16\n\t"
56256 #endif
56257 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56258         "lsls	r5, r5, #16\n\t"
56259 #else
56260         "lsl	r5, r5, #16\n\t"
56261 #endif
56262 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56263         "adds	r2, r2, r5\n\t"
56264 #else
56265         "add	r2, r2, r5\n\t"
56266 #endif
56267 #ifdef WOLFSSL_KEIL
56268         "adcs	r3, r3, r6\n\t"
56269 #elif defined(__clang__)
56270         "adcs	r3, r6\n\t"
56271 #else
56272         "adc	r3, r6\n\t"
56273 #endif
56274 #ifdef WOLFSSL_KEIL
56275         "adcs	r4, r4, %[r]\n\t"
56276 #elif defined(__clang__)
56277         "adcs	r4, %[r]\n\t"
56278 #else
56279         "adc	r4, %[r]\n\t"
56280 #endif
56281 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56282         "adds	r2, r2, r5\n\t"
56283 #else
56284         "add	r2, r2, r5\n\t"
56285 #endif
56286 #ifdef WOLFSSL_KEIL
56287         "adcs	r3, r3, r6\n\t"
56288 #elif defined(__clang__)
56289         "adcs	r3, r6\n\t"
56290 #else
56291         "adc	r3, r6\n\t"
56292 #endif
56293 #ifdef WOLFSSL_KEIL
56294         "adcs	r4, r4, %[r]\n\t"
56295 #elif defined(__clang__)
56296         "adcs	r4, %[r]\n\t"
56297 #else
56298         "adc	r4, %[r]\n\t"
56299 #endif
56300         "#  A[9] * A[0]\n\t"
56301         "mov	%[a], r9\n\t"
56302         "mov	r7, r10\n\t"
56303         "ldr	%[a], [%[a], #36]\n\t"
56304         "uxth	r5, %[a]\n\t"
56305         "uxth	r6, r7\n\t"
56306 #ifdef WOLFSSL_KEIL
56307         "muls	r6, r5, r6\n\t"
56308 #elif defined(__clang__)
56309         "muls	r6, r5\n\t"
56310 #else
56311         "mul	r6, r5\n\t"
56312 #endif
56313 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56314         "adds	r2, r2, r6\n\t"
56315 #else
56316         "add	r2, r2, r6\n\t"
56317 #endif
56318 #ifdef WOLFSSL_KEIL
56319         "adcs	r3, r3, %[r]\n\t"
56320 #elif defined(__clang__)
56321         "adcs	r3, %[r]\n\t"
56322 #else
56323         "adc	r3, %[r]\n\t"
56324 #endif
56325 #ifdef WOLFSSL_KEIL
56326         "adcs	r4, r4, %[r]\n\t"
56327 #elif defined(__clang__)
56328         "adcs	r4, %[r]\n\t"
56329 #else
56330         "adc	r4, %[r]\n\t"
56331 #endif
56332 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56333         "adds	r2, r2, r6\n\t"
56334 #else
56335         "add	r2, r2, r6\n\t"
56336 #endif
56337 #ifdef WOLFSSL_KEIL
56338         "adcs	r3, r3, %[r]\n\t"
56339 #elif defined(__clang__)
56340         "adcs	r3, %[r]\n\t"
56341 #else
56342         "adc	r3, %[r]\n\t"
56343 #endif
56344 #ifdef WOLFSSL_KEIL
56345         "adcs	r4, r4, %[r]\n\t"
56346 #elif defined(__clang__)
56347         "adcs	r4, %[r]\n\t"
56348 #else
56349         "adc	r4, %[r]\n\t"
56350 #endif
56351 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56352         "lsrs	r6, r7, #16\n\t"
56353 #else
56354         "lsr	r6, r7, #16\n\t"
56355 #endif
56356 #ifdef WOLFSSL_KEIL
56357         "muls	r5, r6, r5\n\t"
56358 #elif defined(__clang__)
56359         "muls	r5, r6\n\t"
56360 #else
56361         "mul	r5, r6\n\t"
56362 #endif
56363 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56364         "lsrs	r6, r5, #16\n\t"
56365 #else
56366         "lsr	r6, r5, #16\n\t"
56367 #endif
56368 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56369         "lsls	r5, r5, #16\n\t"
56370 #else
56371         "lsl	r5, r5, #16\n\t"
56372 #endif
56373 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56374         "adds	r2, r2, r5\n\t"
56375 #else
56376         "add	r2, r2, r5\n\t"
56377 #endif
56378 #ifdef WOLFSSL_KEIL
56379         "adcs	r3, r3, r6\n\t"
56380 #elif defined(__clang__)
56381         "adcs	r3, r6\n\t"
56382 #else
56383         "adc	r3, r6\n\t"
56384 #endif
56385 #ifdef WOLFSSL_KEIL
56386         "adcs	r4, r4, %[r]\n\t"
56387 #elif defined(__clang__)
56388         "adcs	r4, %[r]\n\t"
56389 #else
56390         "adc	r4, %[r]\n\t"
56391 #endif
56392 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56393         "adds	r2, r2, r5\n\t"
56394 #else
56395         "add	r2, r2, r5\n\t"
56396 #endif
56397 #ifdef WOLFSSL_KEIL
56398         "adcs	r3, r3, r6\n\t"
56399 #elif defined(__clang__)
56400         "adcs	r3, r6\n\t"
56401 #else
56402         "adc	r3, r6\n\t"
56403 #endif
56404 #ifdef WOLFSSL_KEIL
56405         "adcs	r4, r4, %[r]\n\t"
56406 #elif defined(__clang__)
56407         "adcs	r4, %[r]\n\t"
56408 #else
56409         "adc	r4, %[r]\n\t"
56410 #endif
56411 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56412         "lsrs	r5, %[a], #16\n\t"
56413 #else
56414         "lsr	r5, %[a], #16\n\t"
56415 #endif
56416 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56417         "lsrs	r6, r7, #16\n\t"
56418 #else
56419         "lsr	r6, r7, #16\n\t"
56420 #endif
56421 #ifdef WOLFSSL_KEIL
56422         "muls	r6, r5, r6\n\t"
56423 #elif defined(__clang__)
56424         "muls	r6, r5\n\t"
56425 #else
56426         "mul	r6, r5\n\t"
56427 #endif
56428 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56429         "adds	r3, r3, r6\n\t"
56430 #else
56431         "add	r3, r3, r6\n\t"
56432 #endif
56433 #ifdef WOLFSSL_KEIL
56434         "adcs	r4, r4, %[r]\n\t"
56435 #elif defined(__clang__)
56436         "adcs	r4, %[r]\n\t"
56437 #else
56438         "adc	r4, %[r]\n\t"
56439 #endif
56440 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56441         "adds	r3, r3, r6\n\t"
56442 #else
56443         "add	r3, r3, r6\n\t"
56444 #endif
56445 #ifdef WOLFSSL_KEIL
56446         "adcs	r4, r4, %[r]\n\t"
56447 #elif defined(__clang__)
56448         "adcs	r4, %[r]\n\t"
56449 #else
56450         "adc	r4, %[r]\n\t"
56451 #endif
56452         "uxth	r6, r7\n\t"
56453 #ifdef WOLFSSL_KEIL
56454         "muls	r5, r6, r5\n\t"
56455 #elif defined(__clang__)
56456         "muls	r5, r6\n\t"
56457 #else
56458         "mul	r5, r6\n\t"
56459 #endif
56460 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56461         "lsrs	r6, r5, #16\n\t"
56462 #else
56463         "lsr	r6, r5, #16\n\t"
56464 #endif
56465 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56466         "lsls	r5, r5, #16\n\t"
56467 #else
56468         "lsl	r5, r5, #16\n\t"
56469 #endif
56470 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56471         "adds	r2, r2, r5\n\t"
56472 #else
56473         "add	r2, r2, r5\n\t"
56474 #endif
56475 #ifdef WOLFSSL_KEIL
56476         "adcs	r3, r3, r6\n\t"
56477 #elif defined(__clang__)
56478         "adcs	r3, r6\n\t"
56479 #else
56480         "adc	r3, r6\n\t"
56481 #endif
56482 #ifdef WOLFSSL_KEIL
56483         "adcs	r4, r4, %[r]\n\t"
56484 #elif defined(__clang__)
56485         "adcs	r4, %[r]\n\t"
56486 #else
56487         "adc	r4, %[r]\n\t"
56488 #endif
56489 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56490         "adds	r2, r2, r5\n\t"
56491 #else
56492         "add	r2, r2, r5\n\t"
56493 #endif
56494 #ifdef WOLFSSL_KEIL
56495         "adcs	r3, r3, r6\n\t"
56496 #elif defined(__clang__)
56497         "adcs	r3, r6\n\t"
56498 #else
56499         "adc	r3, r6\n\t"
56500 #endif
56501 #ifdef WOLFSSL_KEIL
56502         "adcs	r4, r4, %[r]\n\t"
56503 #elif defined(__clang__)
56504         "adcs	r4, %[r]\n\t"
56505 #else
56506         "adc	r4, %[r]\n\t"
56507 #endif
56508         "str	r2, [sp, #36]\n\t"
56509         "#  A[10] * A[0]\n\t"
56510         "movs	r2, #0\n\t"
56511         "mov	%[a], r9\n\t"
56512         "ldr	%[a], [%[a], #40]\n\t"
56513         "uxth	r5, %[a]\n\t"
56514         "uxth	r6, r7\n\t"
56515 #ifdef WOLFSSL_KEIL
56516         "muls	r6, r5, r6\n\t"
56517 #elif defined(__clang__)
56518         "muls	r6, r5\n\t"
56519 #else
56520         "mul	r6, r5\n\t"
56521 #endif
56522 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56523         "adds	r3, r3, r6\n\t"
56524 #else
56525         "add	r3, r3, r6\n\t"
56526 #endif
56527 #ifdef WOLFSSL_KEIL
56528         "adcs	r4, r4, %[r]\n\t"
56529 #elif defined(__clang__)
56530         "adcs	r4, %[r]\n\t"
56531 #else
56532         "adc	r4, %[r]\n\t"
56533 #endif
56534 #ifdef WOLFSSL_KEIL
56535         "adcs	r2, r2, %[r]\n\t"
56536 #elif defined(__clang__)
56537         "adcs	r2, %[r]\n\t"
56538 #else
56539         "adc	r2, %[r]\n\t"
56540 #endif
56541 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56542         "adds	r3, r3, r6\n\t"
56543 #else
56544         "add	r3, r3, r6\n\t"
56545 #endif
56546 #ifdef WOLFSSL_KEIL
56547         "adcs	r4, r4, %[r]\n\t"
56548 #elif defined(__clang__)
56549         "adcs	r4, %[r]\n\t"
56550 #else
56551         "adc	r4, %[r]\n\t"
56552 #endif
56553 #ifdef WOLFSSL_KEIL
56554         "adcs	r2, r2, %[r]\n\t"
56555 #elif defined(__clang__)
56556         "adcs	r2, %[r]\n\t"
56557 #else
56558         "adc	r2, %[r]\n\t"
56559 #endif
56560 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56561         "lsrs	r6, r7, #16\n\t"
56562 #else
56563         "lsr	r6, r7, #16\n\t"
56564 #endif
56565 #ifdef WOLFSSL_KEIL
56566         "muls	r5, r6, r5\n\t"
56567 #elif defined(__clang__)
56568         "muls	r5, r6\n\t"
56569 #else
56570         "mul	r5, r6\n\t"
56571 #endif
56572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56573         "lsrs	r6, r5, #16\n\t"
56574 #else
56575         "lsr	r6, r5, #16\n\t"
56576 #endif
56577 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56578         "lsls	r5, r5, #16\n\t"
56579 #else
56580         "lsl	r5, r5, #16\n\t"
56581 #endif
56582 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56583         "adds	r3, r3, r5\n\t"
56584 #else
56585         "add	r3, r3, r5\n\t"
56586 #endif
56587 #ifdef WOLFSSL_KEIL
56588         "adcs	r4, r4, r6\n\t"
56589 #elif defined(__clang__)
56590         "adcs	r4, r6\n\t"
56591 #else
56592         "adc	r4, r6\n\t"
56593 #endif
56594 #ifdef WOLFSSL_KEIL
56595         "adcs	r2, r2, %[r]\n\t"
56596 #elif defined(__clang__)
56597         "adcs	r2, %[r]\n\t"
56598 #else
56599         "adc	r2, %[r]\n\t"
56600 #endif
56601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56602         "adds	r3, r3, r5\n\t"
56603 #else
56604         "add	r3, r3, r5\n\t"
56605 #endif
56606 #ifdef WOLFSSL_KEIL
56607         "adcs	r4, r4, r6\n\t"
56608 #elif defined(__clang__)
56609         "adcs	r4, r6\n\t"
56610 #else
56611         "adc	r4, r6\n\t"
56612 #endif
56613 #ifdef WOLFSSL_KEIL
56614         "adcs	r2, r2, %[r]\n\t"
56615 #elif defined(__clang__)
56616         "adcs	r2, %[r]\n\t"
56617 #else
56618         "adc	r2, %[r]\n\t"
56619 #endif
56620 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56621         "lsrs	r5, %[a], #16\n\t"
56622 #else
56623         "lsr	r5, %[a], #16\n\t"
56624 #endif
56625 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56626         "lsrs	r6, r7, #16\n\t"
56627 #else
56628         "lsr	r6, r7, #16\n\t"
56629 #endif
56630 #ifdef WOLFSSL_KEIL
56631         "muls	r6, r5, r6\n\t"
56632 #elif defined(__clang__)
56633         "muls	r6, r5\n\t"
56634 #else
56635         "mul	r6, r5\n\t"
56636 #endif
56637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56638         "adds	r4, r4, r6\n\t"
56639 #else
56640         "add	r4, r4, r6\n\t"
56641 #endif
56642 #ifdef WOLFSSL_KEIL
56643         "adcs	r2, r2, %[r]\n\t"
56644 #elif defined(__clang__)
56645         "adcs	r2, %[r]\n\t"
56646 #else
56647         "adc	r2, %[r]\n\t"
56648 #endif
56649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56650         "adds	r4, r4, r6\n\t"
56651 #else
56652         "add	r4, r4, r6\n\t"
56653 #endif
56654 #ifdef WOLFSSL_KEIL
56655         "adcs	r2, r2, %[r]\n\t"
56656 #elif defined(__clang__)
56657         "adcs	r2, %[r]\n\t"
56658 #else
56659         "adc	r2, %[r]\n\t"
56660 #endif
56661         "uxth	r6, r7\n\t"
56662 #ifdef WOLFSSL_KEIL
56663         "muls	r5, r6, r5\n\t"
56664 #elif defined(__clang__)
56665         "muls	r5, r6\n\t"
56666 #else
56667         "mul	r5, r6\n\t"
56668 #endif
56669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56670         "lsrs	r6, r5, #16\n\t"
56671 #else
56672         "lsr	r6, r5, #16\n\t"
56673 #endif
56674 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56675         "lsls	r5, r5, #16\n\t"
56676 #else
56677         "lsl	r5, r5, #16\n\t"
56678 #endif
56679 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56680         "adds	r3, r3, r5\n\t"
56681 #else
56682         "add	r3, r3, r5\n\t"
56683 #endif
56684 #ifdef WOLFSSL_KEIL
56685         "adcs	r4, r4, r6\n\t"
56686 #elif defined(__clang__)
56687         "adcs	r4, r6\n\t"
56688 #else
56689         "adc	r4, r6\n\t"
56690 #endif
56691 #ifdef WOLFSSL_KEIL
56692         "adcs	r2, r2, %[r]\n\t"
56693 #elif defined(__clang__)
56694         "adcs	r2, %[r]\n\t"
56695 #else
56696         "adc	r2, %[r]\n\t"
56697 #endif
56698 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56699         "adds	r3, r3, r5\n\t"
56700 #else
56701         "add	r3, r3, r5\n\t"
56702 #endif
56703 #ifdef WOLFSSL_KEIL
56704         "adcs	r4, r4, r6\n\t"
56705 #elif defined(__clang__)
56706         "adcs	r4, r6\n\t"
56707 #else
56708         "adc	r4, r6\n\t"
56709 #endif
56710 #ifdef WOLFSSL_KEIL
56711         "adcs	r2, r2, %[r]\n\t"
56712 #elif defined(__clang__)
56713         "adcs	r2, %[r]\n\t"
56714 #else
56715         "adc	r2, %[r]\n\t"
56716 #endif
56717         "#  A[9] * A[1]\n\t"
56718         "mov	%[a], r9\n\t"
56719         "mov	r7, r11\n\t"
56720         "ldr	%[a], [%[a], #36]\n\t"
56721         "uxth	r5, %[a]\n\t"
56722         "uxth	r6, r7\n\t"
56723 #ifdef WOLFSSL_KEIL
56724         "muls	r6, r5, r6\n\t"
56725 #elif defined(__clang__)
56726         "muls	r6, r5\n\t"
56727 #else
56728         "mul	r6, r5\n\t"
56729 #endif
56730 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56731         "adds	r3, r3, r6\n\t"
56732 #else
56733         "add	r3, r3, r6\n\t"
56734 #endif
56735 #ifdef WOLFSSL_KEIL
56736         "adcs	r4, r4, %[r]\n\t"
56737 #elif defined(__clang__)
56738         "adcs	r4, %[r]\n\t"
56739 #else
56740         "adc	r4, %[r]\n\t"
56741 #endif
56742 #ifdef WOLFSSL_KEIL
56743         "adcs	r2, r2, %[r]\n\t"
56744 #elif defined(__clang__)
56745         "adcs	r2, %[r]\n\t"
56746 #else
56747         "adc	r2, %[r]\n\t"
56748 #endif
56749 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56750         "adds	r3, r3, r6\n\t"
56751 #else
56752         "add	r3, r3, r6\n\t"
56753 #endif
56754 #ifdef WOLFSSL_KEIL
56755         "adcs	r4, r4, %[r]\n\t"
56756 #elif defined(__clang__)
56757         "adcs	r4, %[r]\n\t"
56758 #else
56759         "adc	r4, %[r]\n\t"
56760 #endif
56761 #ifdef WOLFSSL_KEIL
56762         "adcs	r2, r2, %[r]\n\t"
56763 #elif defined(__clang__)
56764         "adcs	r2, %[r]\n\t"
56765 #else
56766         "adc	r2, %[r]\n\t"
56767 #endif
56768 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56769         "lsrs	r6, r7, #16\n\t"
56770 #else
56771         "lsr	r6, r7, #16\n\t"
56772 #endif
56773 #ifdef WOLFSSL_KEIL
56774         "muls	r5, r6, r5\n\t"
56775 #elif defined(__clang__)
56776         "muls	r5, r6\n\t"
56777 #else
56778         "mul	r5, r6\n\t"
56779 #endif
56780 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56781         "lsrs	r6, r5, #16\n\t"
56782 #else
56783         "lsr	r6, r5, #16\n\t"
56784 #endif
56785 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56786         "lsls	r5, r5, #16\n\t"
56787 #else
56788         "lsl	r5, r5, #16\n\t"
56789 #endif
56790 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56791         "adds	r3, r3, r5\n\t"
56792 #else
56793         "add	r3, r3, r5\n\t"
56794 #endif
56795 #ifdef WOLFSSL_KEIL
56796         "adcs	r4, r4, r6\n\t"
56797 #elif defined(__clang__)
56798         "adcs	r4, r6\n\t"
56799 #else
56800         "adc	r4, r6\n\t"
56801 #endif
56802 #ifdef WOLFSSL_KEIL
56803         "adcs	r2, r2, %[r]\n\t"
56804 #elif defined(__clang__)
56805         "adcs	r2, %[r]\n\t"
56806 #else
56807         "adc	r2, %[r]\n\t"
56808 #endif
56809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56810         "adds	r3, r3, r5\n\t"
56811 #else
56812         "add	r3, r3, r5\n\t"
56813 #endif
56814 #ifdef WOLFSSL_KEIL
56815         "adcs	r4, r4, r6\n\t"
56816 #elif defined(__clang__)
56817         "adcs	r4, r6\n\t"
56818 #else
56819         "adc	r4, r6\n\t"
56820 #endif
56821 #ifdef WOLFSSL_KEIL
56822         "adcs	r2, r2, %[r]\n\t"
56823 #elif defined(__clang__)
56824         "adcs	r2, %[r]\n\t"
56825 #else
56826         "adc	r2, %[r]\n\t"
56827 #endif
56828 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56829         "lsrs	r5, %[a], #16\n\t"
56830 #else
56831         "lsr	r5, %[a], #16\n\t"
56832 #endif
56833 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56834         "lsrs	r6, r7, #16\n\t"
56835 #else
56836         "lsr	r6, r7, #16\n\t"
56837 #endif
56838 #ifdef WOLFSSL_KEIL
56839         "muls	r6, r5, r6\n\t"
56840 #elif defined(__clang__)
56841         "muls	r6, r5\n\t"
56842 #else
56843         "mul	r6, r5\n\t"
56844 #endif
56845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56846         "adds	r4, r4, r6\n\t"
56847 #else
56848         "add	r4, r4, r6\n\t"
56849 #endif
56850 #ifdef WOLFSSL_KEIL
56851         "adcs	r2, r2, %[r]\n\t"
56852 #elif defined(__clang__)
56853         "adcs	r2, %[r]\n\t"
56854 #else
56855         "adc	r2, %[r]\n\t"
56856 #endif
56857 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56858         "adds	r4, r4, r6\n\t"
56859 #else
56860         "add	r4, r4, r6\n\t"
56861 #endif
56862 #ifdef WOLFSSL_KEIL
56863         "adcs	r2, r2, %[r]\n\t"
56864 #elif defined(__clang__)
56865         "adcs	r2, %[r]\n\t"
56866 #else
56867         "adc	r2, %[r]\n\t"
56868 #endif
56869         "uxth	r6, r7\n\t"
56870 #ifdef WOLFSSL_KEIL
56871         "muls	r5, r6, r5\n\t"
56872 #elif defined(__clang__)
56873         "muls	r5, r6\n\t"
56874 #else
56875         "mul	r5, r6\n\t"
56876 #endif
56877 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56878         "lsrs	r6, r5, #16\n\t"
56879 #else
56880         "lsr	r6, r5, #16\n\t"
56881 #endif
56882 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56883         "lsls	r5, r5, #16\n\t"
56884 #else
56885         "lsl	r5, r5, #16\n\t"
56886 #endif
56887 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56888         "adds	r3, r3, r5\n\t"
56889 #else
56890         "add	r3, r3, r5\n\t"
56891 #endif
56892 #ifdef WOLFSSL_KEIL
56893         "adcs	r4, r4, r6\n\t"
56894 #elif defined(__clang__)
56895         "adcs	r4, r6\n\t"
56896 #else
56897         "adc	r4, r6\n\t"
56898 #endif
56899 #ifdef WOLFSSL_KEIL
56900         "adcs	r2, r2, %[r]\n\t"
56901 #elif defined(__clang__)
56902         "adcs	r2, %[r]\n\t"
56903 #else
56904         "adc	r2, %[r]\n\t"
56905 #endif
56906 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56907         "adds	r3, r3, r5\n\t"
56908 #else
56909         "add	r3, r3, r5\n\t"
56910 #endif
56911 #ifdef WOLFSSL_KEIL
56912         "adcs	r4, r4, r6\n\t"
56913 #elif defined(__clang__)
56914         "adcs	r4, r6\n\t"
56915 #else
56916         "adc	r4, r6\n\t"
56917 #endif
56918 #ifdef WOLFSSL_KEIL
56919         "adcs	r2, r2, %[r]\n\t"
56920 #elif defined(__clang__)
56921         "adcs	r2, %[r]\n\t"
56922 #else
56923         "adc	r2, %[r]\n\t"
56924 #endif
56925         "#  A[8] * A[2]\n\t"
56926         "mov	%[a], r9\n\t"
56927         "mov	r7, r12\n\t"
56928         "ldr	%[a], [%[a], #32]\n\t"
56929         "uxth	r5, %[a]\n\t"
56930         "uxth	r6, r7\n\t"
56931 #ifdef WOLFSSL_KEIL
56932         "muls	r6, r5, r6\n\t"
56933 #elif defined(__clang__)
56934         "muls	r6, r5\n\t"
56935 #else
56936         "mul	r6, r5\n\t"
56937 #endif
56938 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56939         "adds	r3, r3, r6\n\t"
56940 #else
56941         "add	r3, r3, r6\n\t"
56942 #endif
56943 #ifdef WOLFSSL_KEIL
56944         "adcs	r4, r4, %[r]\n\t"
56945 #elif defined(__clang__)
56946         "adcs	r4, %[r]\n\t"
56947 #else
56948         "adc	r4, %[r]\n\t"
56949 #endif
56950 #ifdef WOLFSSL_KEIL
56951         "adcs	r2, r2, %[r]\n\t"
56952 #elif defined(__clang__)
56953         "adcs	r2, %[r]\n\t"
56954 #else
56955         "adc	r2, %[r]\n\t"
56956 #endif
56957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56958         "adds	r3, r3, r6\n\t"
56959 #else
56960         "add	r3, r3, r6\n\t"
56961 #endif
56962 #ifdef WOLFSSL_KEIL
56963         "adcs	r4, r4, %[r]\n\t"
56964 #elif defined(__clang__)
56965         "adcs	r4, %[r]\n\t"
56966 #else
56967         "adc	r4, %[r]\n\t"
56968 #endif
56969 #ifdef WOLFSSL_KEIL
56970         "adcs	r2, r2, %[r]\n\t"
56971 #elif defined(__clang__)
56972         "adcs	r2, %[r]\n\t"
56973 #else
56974         "adc	r2, %[r]\n\t"
56975 #endif
56976 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56977         "lsrs	r6, r7, #16\n\t"
56978 #else
56979         "lsr	r6, r7, #16\n\t"
56980 #endif
56981 #ifdef WOLFSSL_KEIL
56982         "muls	r5, r6, r5\n\t"
56983 #elif defined(__clang__)
56984         "muls	r5, r6\n\t"
56985 #else
56986         "mul	r5, r6\n\t"
56987 #endif
56988 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56989         "lsrs	r6, r5, #16\n\t"
56990 #else
56991         "lsr	r6, r5, #16\n\t"
56992 #endif
56993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56994         "lsls	r5, r5, #16\n\t"
56995 #else
56996         "lsl	r5, r5, #16\n\t"
56997 #endif
56998 #if defined(__clang__) || defined(WOLFSSL_KEIL)
56999         "adds	r3, r3, r5\n\t"
57000 #else
57001         "add	r3, r3, r5\n\t"
57002 #endif
57003 #ifdef WOLFSSL_KEIL
57004         "adcs	r4, r4, r6\n\t"
57005 #elif defined(__clang__)
57006         "adcs	r4, r6\n\t"
57007 #else
57008         "adc	r4, r6\n\t"
57009 #endif
57010 #ifdef WOLFSSL_KEIL
57011         "adcs	r2, r2, %[r]\n\t"
57012 #elif defined(__clang__)
57013         "adcs	r2, %[r]\n\t"
57014 #else
57015         "adc	r2, %[r]\n\t"
57016 #endif
57017 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57018         "adds	r3, r3, r5\n\t"
57019 #else
57020         "add	r3, r3, r5\n\t"
57021 #endif
57022 #ifdef WOLFSSL_KEIL
57023         "adcs	r4, r4, r6\n\t"
57024 #elif defined(__clang__)
57025         "adcs	r4, r6\n\t"
57026 #else
57027         "adc	r4, r6\n\t"
57028 #endif
57029 #ifdef WOLFSSL_KEIL
57030         "adcs	r2, r2, %[r]\n\t"
57031 #elif defined(__clang__)
57032         "adcs	r2, %[r]\n\t"
57033 #else
57034         "adc	r2, %[r]\n\t"
57035 #endif
57036 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57037         "lsrs	r5, %[a], #16\n\t"
57038 #else
57039         "lsr	r5, %[a], #16\n\t"
57040 #endif
57041 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57042         "lsrs	r6, r7, #16\n\t"
57043 #else
57044         "lsr	r6, r7, #16\n\t"
57045 #endif
57046 #ifdef WOLFSSL_KEIL
57047         "muls	r6, r5, r6\n\t"
57048 #elif defined(__clang__)
57049         "muls	r6, r5\n\t"
57050 #else
57051         "mul	r6, r5\n\t"
57052 #endif
57053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57054         "adds	r4, r4, r6\n\t"
57055 #else
57056         "add	r4, r4, r6\n\t"
57057 #endif
57058 #ifdef WOLFSSL_KEIL
57059         "adcs	r2, r2, %[r]\n\t"
57060 #elif defined(__clang__)
57061         "adcs	r2, %[r]\n\t"
57062 #else
57063         "adc	r2, %[r]\n\t"
57064 #endif
57065 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57066         "adds	r4, r4, r6\n\t"
57067 #else
57068         "add	r4, r4, r6\n\t"
57069 #endif
57070 #ifdef WOLFSSL_KEIL
57071         "adcs	r2, r2, %[r]\n\t"
57072 #elif defined(__clang__)
57073         "adcs	r2, %[r]\n\t"
57074 #else
57075         "adc	r2, %[r]\n\t"
57076 #endif
57077         "uxth	r6, r7\n\t"
57078 #ifdef WOLFSSL_KEIL
57079         "muls	r5, r6, r5\n\t"
57080 #elif defined(__clang__)
57081         "muls	r5, r6\n\t"
57082 #else
57083         "mul	r5, r6\n\t"
57084 #endif
57085 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57086         "lsrs	r6, r5, #16\n\t"
57087 #else
57088         "lsr	r6, r5, #16\n\t"
57089 #endif
57090 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57091         "lsls	r5, r5, #16\n\t"
57092 #else
57093         "lsl	r5, r5, #16\n\t"
57094 #endif
57095 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57096         "adds	r3, r3, r5\n\t"
57097 #else
57098         "add	r3, r3, r5\n\t"
57099 #endif
57100 #ifdef WOLFSSL_KEIL
57101         "adcs	r4, r4, r6\n\t"
57102 #elif defined(__clang__)
57103         "adcs	r4, r6\n\t"
57104 #else
57105         "adc	r4, r6\n\t"
57106 #endif
57107 #ifdef WOLFSSL_KEIL
57108         "adcs	r2, r2, %[r]\n\t"
57109 #elif defined(__clang__)
57110         "adcs	r2, %[r]\n\t"
57111 #else
57112         "adc	r2, %[r]\n\t"
57113 #endif
57114 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57115         "adds	r3, r3, r5\n\t"
57116 #else
57117         "add	r3, r3, r5\n\t"
57118 #endif
57119 #ifdef WOLFSSL_KEIL
57120         "adcs	r4, r4, r6\n\t"
57121 #elif defined(__clang__)
57122         "adcs	r4, r6\n\t"
57123 #else
57124         "adc	r4, r6\n\t"
57125 #endif
57126 #ifdef WOLFSSL_KEIL
57127         "adcs	r2, r2, %[r]\n\t"
57128 #elif defined(__clang__)
57129         "adcs	r2, %[r]\n\t"
57130 #else
57131         "adc	r2, %[r]\n\t"
57132 #endif
57133         "#  A[7] * A[3]\n\t"
57134         "mov	%[a], r9\n\t"
57135         "mov	r7, lr\n\t"
57136         "ldr	%[a], [%[a], #28]\n\t"
57137         "uxth	r5, %[a]\n\t"
57138         "uxth	r6, r7\n\t"
57139 #ifdef WOLFSSL_KEIL
57140         "muls	r6, r5, r6\n\t"
57141 #elif defined(__clang__)
57142         "muls	r6, r5\n\t"
57143 #else
57144         "mul	r6, r5\n\t"
57145 #endif
57146 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57147         "adds	r3, r3, r6\n\t"
57148 #else
57149         "add	r3, r3, r6\n\t"
57150 #endif
57151 #ifdef WOLFSSL_KEIL
57152         "adcs	r4, r4, %[r]\n\t"
57153 #elif defined(__clang__)
57154         "adcs	r4, %[r]\n\t"
57155 #else
57156         "adc	r4, %[r]\n\t"
57157 #endif
57158 #ifdef WOLFSSL_KEIL
57159         "adcs	r2, r2, %[r]\n\t"
57160 #elif defined(__clang__)
57161         "adcs	r2, %[r]\n\t"
57162 #else
57163         "adc	r2, %[r]\n\t"
57164 #endif
57165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57166         "adds	r3, r3, r6\n\t"
57167 #else
57168         "add	r3, r3, r6\n\t"
57169 #endif
57170 #ifdef WOLFSSL_KEIL
57171         "adcs	r4, r4, %[r]\n\t"
57172 #elif defined(__clang__)
57173         "adcs	r4, %[r]\n\t"
57174 #else
57175         "adc	r4, %[r]\n\t"
57176 #endif
57177 #ifdef WOLFSSL_KEIL
57178         "adcs	r2, r2, %[r]\n\t"
57179 #elif defined(__clang__)
57180         "adcs	r2, %[r]\n\t"
57181 #else
57182         "adc	r2, %[r]\n\t"
57183 #endif
57184 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57185         "lsrs	r6, r7, #16\n\t"
57186 #else
57187         "lsr	r6, r7, #16\n\t"
57188 #endif
57189 #ifdef WOLFSSL_KEIL
57190         "muls	r5, r6, r5\n\t"
57191 #elif defined(__clang__)
57192         "muls	r5, r6\n\t"
57193 #else
57194         "mul	r5, r6\n\t"
57195 #endif
57196 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57197         "lsrs	r6, r5, #16\n\t"
57198 #else
57199         "lsr	r6, r5, #16\n\t"
57200 #endif
57201 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57202         "lsls	r5, r5, #16\n\t"
57203 #else
57204         "lsl	r5, r5, #16\n\t"
57205 #endif
57206 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57207         "adds	r3, r3, r5\n\t"
57208 #else
57209         "add	r3, r3, r5\n\t"
57210 #endif
57211 #ifdef WOLFSSL_KEIL
57212         "adcs	r4, r4, r6\n\t"
57213 #elif defined(__clang__)
57214         "adcs	r4, r6\n\t"
57215 #else
57216         "adc	r4, r6\n\t"
57217 #endif
57218 #ifdef WOLFSSL_KEIL
57219         "adcs	r2, r2, %[r]\n\t"
57220 #elif defined(__clang__)
57221         "adcs	r2, %[r]\n\t"
57222 #else
57223         "adc	r2, %[r]\n\t"
57224 #endif
57225 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57226         "adds	r3, r3, r5\n\t"
57227 #else
57228         "add	r3, r3, r5\n\t"
57229 #endif
57230 #ifdef WOLFSSL_KEIL
57231         "adcs	r4, r4, r6\n\t"
57232 #elif defined(__clang__)
57233         "adcs	r4, r6\n\t"
57234 #else
57235         "adc	r4, r6\n\t"
57236 #endif
57237 #ifdef WOLFSSL_KEIL
57238         "adcs	r2, r2, %[r]\n\t"
57239 #elif defined(__clang__)
57240         "adcs	r2, %[r]\n\t"
57241 #else
57242         "adc	r2, %[r]\n\t"
57243 #endif
57244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57245         "lsrs	r5, %[a], #16\n\t"
57246 #else
57247         "lsr	r5, %[a], #16\n\t"
57248 #endif
57249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57250         "lsrs	r6, r7, #16\n\t"
57251 #else
57252         "lsr	r6, r7, #16\n\t"
57253 #endif
57254 #ifdef WOLFSSL_KEIL
57255         "muls	r6, r5, r6\n\t"
57256 #elif defined(__clang__)
57257         "muls	r6, r5\n\t"
57258 #else
57259         "mul	r6, r5\n\t"
57260 #endif
57261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57262         "adds	r4, r4, r6\n\t"
57263 #else
57264         "add	r4, r4, r6\n\t"
57265 #endif
57266 #ifdef WOLFSSL_KEIL
57267         "adcs	r2, r2, %[r]\n\t"
57268 #elif defined(__clang__)
57269         "adcs	r2, %[r]\n\t"
57270 #else
57271         "adc	r2, %[r]\n\t"
57272 #endif
57273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57274         "adds	r4, r4, r6\n\t"
57275 #else
57276         "add	r4, r4, r6\n\t"
57277 #endif
57278 #ifdef WOLFSSL_KEIL
57279         "adcs	r2, r2, %[r]\n\t"
57280 #elif defined(__clang__)
57281         "adcs	r2, %[r]\n\t"
57282 #else
57283         "adc	r2, %[r]\n\t"
57284 #endif
57285         "uxth	r6, r7\n\t"
57286 #ifdef WOLFSSL_KEIL
57287         "muls	r5, r6, r5\n\t"
57288 #elif defined(__clang__)
57289         "muls	r5, r6\n\t"
57290 #else
57291         "mul	r5, r6\n\t"
57292 #endif
57293 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57294         "lsrs	r6, r5, #16\n\t"
57295 #else
57296         "lsr	r6, r5, #16\n\t"
57297 #endif
57298 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57299         "lsls	r5, r5, #16\n\t"
57300 #else
57301         "lsl	r5, r5, #16\n\t"
57302 #endif
57303 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57304         "adds	r3, r3, r5\n\t"
57305 #else
57306         "add	r3, r3, r5\n\t"
57307 #endif
57308 #ifdef WOLFSSL_KEIL
57309         "adcs	r4, r4, r6\n\t"
57310 #elif defined(__clang__)
57311         "adcs	r4, r6\n\t"
57312 #else
57313         "adc	r4, r6\n\t"
57314 #endif
57315 #ifdef WOLFSSL_KEIL
57316         "adcs	r2, r2, %[r]\n\t"
57317 #elif defined(__clang__)
57318         "adcs	r2, %[r]\n\t"
57319 #else
57320         "adc	r2, %[r]\n\t"
57321 #endif
57322 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57323         "adds	r3, r3, r5\n\t"
57324 #else
57325         "add	r3, r3, r5\n\t"
57326 #endif
57327 #ifdef WOLFSSL_KEIL
57328         "adcs	r4, r4, r6\n\t"
57329 #elif defined(__clang__)
57330         "adcs	r4, r6\n\t"
57331 #else
57332         "adc	r4, r6\n\t"
57333 #endif
57334 #ifdef WOLFSSL_KEIL
57335         "adcs	r2, r2, %[r]\n\t"
57336 #elif defined(__clang__)
57337         "adcs	r2, %[r]\n\t"
57338 #else
57339         "adc	r2, %[r]\n\t"
57340 #endif
57341         "#  A[6] * A[4]\n\t"
57342         "mov	%[a], r9\n\t"
57343         "ldr	r7, [%[a], #16]\n\t"
57344         "ldr	%[a], [%[a], #24]\n\t"
57345         "uxth	r5, %[a]\n\t"
57346         "uxth	r6, r7\n\t"
57347 #ifdef WOLFSSL_KEIL
57348         "muls	r6, r5, r6\n\t"
57349 #elif defined(__clang__)
57350         "muls	r6, r5\n\t"
57351 #else
57352         "mul	r6, r5\n\t"
57353 #endif
57354 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57355         "adds	r3, r3, r6\n\t"
57356 #else
57357         "add	r3, r3, r6\n\t"
57358 #endif
57359 #ifdef WOLFSSL_KEIL
57360         "adcs	r4, r4, %[r]\n\t"
57361 #elif defined(__clang__)
57362         "adcs	r4, %[r]\n\t"
57363 #else
57364         "adc	r4, %[r]\n\t"
57365 #endif
57366 #ifdef WOLFSSL_KEIL
57367         "adcs	r2, r2, %[r]\n\t"
57368 #elif defined(__clang__)
57369         "adcs	r2, %[r]\n\t"
57370 #else
57371         "adc	r2, %[r]\n\t"
57372 #endif
57373 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57374         "adds	r3, r3, r6\n\t"
57375 #else
57376         "add	r3, r3, r6\n\t"
57377 #endif
57378 #ifdef WOLFSSL_KEIL
57379         "adcs	r4, r4, %[r]\n\t"
57380 #elif defined(__clang__)
57381         "adcs	r4, %[r]\n\t"
57382 #else
57383         "adc	r4, %[r]\n\t"
57384 #endif
57385 #ifdef WOLFSSL_KEIL
57386         "adcs	r2, r2, %[r]\n\t"
57387 #elif defined(__clang__)
57388         "adcs	r2, %[r]\n\t"
57389 #else
57390         "adc	r2, %[r]\n\t"
57391 #endif
57392 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57393         "lsrs	r6, r7, #16\n\t"
57394 #else
57395         "lsr	r6, r7, #16\n\t"
57396 #endif
57397 #ifdef WOLFSSL_KEIL
57398         "muls	r5, r6, r5\n\t"
57399 #elif defined(__clang__)
57400         "muls	r5, r6\n\t"
57401 #else
57402         "mul	r5, r6\n\t"
57403 #endif
57404 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57405         "lsrs	r6, r5, #16\n\t"
57406 #else
57407         "lsr	r6, r5, #16\n\t"
57408 #endif
57409 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57410         "lsls	r5, r5, #16\n\t"
57411 #else
57412         "lsl	r5, r5, #16\n\t"
57413 #endif
57414 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57415         "adds	r3, r3, r5\n\t"
57416 #else
57417         "add	r3, r3, r5\n\t"
57418 #endif
57419 #ifdef WOLFSSL_KEIL
57420         "adcs	r4, r4, r6\n\t"
57421 #elif defined(__clang__)
57422         "adcs	r4, r6\n\t"
57423 #else
57424         "adc	r4, r6\n\t"
57425 #endif
57426 #ifdef WOLFSSL_KEIL
57427         "adcs	r2, r2, %[r]\n\t"
57428 #elif defined(__clang__)
57429         "adcs	r2, %[r]\n\t"
57430 #else
57431         "adc	r2, %[r]\n\t"
57432 #endif
57433 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57434         "adds	r3, r3, r5\n\t"
57435 #else
57436         "add	r3, r3, r5\n\t"
57437 #endif
57438 #ifdef WOLFSSL_KEIL
57439         "adcs	r4, r4, r6\n\t"
57440 #elif defined(__clang__)
57441         "adcs	r4, r6\n\t"
57442 #else
57443         "adc	r4, r6\n\t"
57444 #endif
57445 #ifdef WOLFSSL_KEIL
57446         "adcs	r2, r2, %[r]\n\t"
57447 #elif defined(__clang__)
57448         "adcs	r2, %[r]\n\t"
57449 #else
57450         "adc	r2, %[r]\n\t"
57451 #endif
57452 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57453         "lsrs	r5, %[a], #16\n\t"
57454 #else
57455         "lsr	r5, %[a], #16\n\t"
57456 #endif
57457 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57458         "lsrs	r6, r7, #16\n\t"
57459 #else
57460         "lsr	r6, r7, #16\n\t"
57461 #endif
57462 #ifdef WOLFSSL_KEIL
57463         "muls	r6, r5, r6\n\t"
57464 #elif defined(__clang__)
57465         "muls	r6, r5\n\t"
57466 #else
57467         "mul	r6, r5\n\t"
57468 #endif
57469 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57470         "adds	r4, r4, r6\n\t"
57471 #else
57472         "add	r4, r4, r6\n\t"
57473 #endif
57474 #ifdef WOLFSSL_KEIL
57475         "adcs	r2, r2, %[r]\n\t"
57476 #elif defined(__clang__)
57477         "adcs	r2, %[r]\n\t"
57478 #else
57479         "adc	r2, %[r]\n\t"
57480 #endif
57481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57482         "adds	r4, r4, r6\n\t"
57483 #else
57484         "add	r4, r4, r6\n\t"
57485 #endif
57486 #ifdef WOLFSSL_KEIL
57487         "adcs	r2, r2, %[r]\n\t"
57488 #elif defined(__clang__)
57489         "adcs	r2, %[r]\n\t"
57490 #else
57491         "adc	r2, %[r]\n\t"
57492 #endif
57493         "uxth	r6, r7\n\t"
57494 #ifdef WOLFSSL_KEIL
57495         "muls	r5, r6, r5\n\t"
57496 #elif defined(__clang__)
57497         "muls	r5, r6\n\t"
57498 #else
57499         "mul	r5, r6\n\t"
57500 #endif
57501 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57502         "lsrs	r6, r5, #16\n\t"
57503 #else
57504         "lsr	r6, r5, #16\n\t"
57505 #endif
57506 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57507         "lsls	r5, r5, #16\n\t"
57508 #else
57509         "lsl	r5, r5, #16\n\t"
57510 #endif
57511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57512         "adds	r3, r3, r5\n\t"
57513 #else
57514         "add	r3, r3, r5\n\t"
57515 #endif
57516 #ifdef WOLFSSL_KEIL
57517         "adcs	r4, r4, r6\n\t"
57518 #elif defined(__clang__)
57519         "adcs	r4, r6\n\t"
57520 #else
57521         "adc	r4, r6\n\t"
57522 #endif
57523 #ifdef WOLFSSL_KEIL
57524         "adcs	r2, r2, %[r]\n\t"
57525 #elif defined(__clang__)
57526         "adcs	r2, %[r]\n\t"
57527 #else
57528         "adc	r2, %[r]\n\t"
57529 #endif
57530 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57531         "adds	r3, r3, r5\n\t"
57532 #else
57533         "add	r3, r3, r5\n\t"
57534 #endif
57535 #ifdef WOLFSSL_KEIL
57536         "adcs	r4, r4, r6\n\t"
57537 #elif defined(__clang__)
57538         "adcs	r4, r6\n\t"
57539 #else
57540         "adc	r4, r6\n\t"
57541 #endif
57542 #ifdef WOLFSSL_KEIL
57543         "adcs	r2, r2, %[r]\n\t"
57544 #elif defined(__clang__)
57545         "adcs	r2, %[r]\n\t"
57546 #else
57547         "adc	r2, %[r]\n\t"
57548 #endif
57549         "#  A[5] * A[5]\n\t"
57550         "mov	%[a], r9\n\t"
57551         "ldr	r7, [%[a], #20]\n\t"
57552 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57553         "lsrs	r6, r7, #16\n\t"
57554 #else
57555         "lsr	r6, r7, #16\n\t"
57556 #endif
57557         "uxth	r5, r7\n\t"
57558 #ifdef WOLFSSL_KEIL
57559         "muls	r5, r5, r5\n\t"
57560 #elif defined(__clang__)
57561         "muls	r5, r5\n\t"
57562 #else
57563         "mul	r5, r5\n\t"
57564 #endif
57565 #ifdef WOLFSSL_KEIL
57566         "muls	r6, r6, r6\n\t"
57567 #elif defined(__clang__)
57568         "muls	r6, r6\n\t"
57569 #else
57570         "mul	r6, r6\n\t"
57571 #endif
57572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57573         "adds	r3, r3, r5\n\t"
57574 #else
57575         "add	r3, r3, r5\n\t"
57576 #endif
57577 #ifdef WOLFSSL_KEIL
57578         "adcs	r4, r4, r6\n\t"
57579 #elif defined(__clang__)
57580         "adcs	r4, r6\n\t"
57581 #else
57582         "adc	r4, r6\n\t"
57583 #endif
57584 #ifdef WOLFSSL_KEIL
57585         "adcs	r2, r2, %[r]\n\t"
57586 #elif defined(__clang__)
57587         "adcs	r2, %[r]\n\t"
57588 #else
57589         "adc	r2, %[r]\n\t"
57590 #endif
57591 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57592         "lsrs	r6, r7, #16\n\t"
57593 #else
57594         "lsr	r6, r7, #16\n\t"
57595 #endif
57596         "uxth	r5, r7\n\t"
57597 #ifdef WOLFSSL_KEIL
57598         "muls	r5, r6, r5\n\t"
57599 #elif defined(__clang__)
57600         "muls	r5, r6\n\t"
57601 #else
57602         "mul	r5, r6\n\t"
57603 #endif
57604 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57605         "lsrs	r6, r5, #15\n\t"
57606 #else
57607         "lsr	r6, r5, #15\n\t"
57608 #endif
57609 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57610         "lsls	r5, r5, #17\n\t"
57611 #else
57612         "lsl	r5, r5, #17\n\t"
57613 #endif
57614 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57615         "adds	r3, r3, r5\n\t"
57616 #else
57617         "add	r3, r3, r5\n\t"
57618 #endif
57619 #ifdef WOLFSSL_KEIL
57620         "adcs	r4, r4, r6\n\t"
57621 #elif defined(__clang__)
57622         "adcs	r4, r6\n\t"
57623 #else
57624         "adc	r4, r6\n\t"
57625 #endif
57626 #ifdef WOLFSSL_KEIL
57627         "adcs	r2, r2, %[r]\n\t"
57628 #elif defined(__clang__)
57629         "adcs	r2, %[r]\n\t"
57630 #else
57631         "adc	r2, %[r]\n\t"
57632 #endif
57633         "str	r3, [sp, #40]\n\t"
57634         "#  A[6] * A[5]\n\t"
57635         "movs	r3, #0\n\t"
57636         "ldr	%[a], [%[a], #24]\n\t"
57637         "uxth	r5, %[a]\n\t"
57638         "uxth	r6, r7\n\t"
57639 #ifdef WOLFSSL_KEIL
57640         "muls	r6, r5, r6\n\t"
57641 #elif defined(__clang__)
57642         "muls	r6, r5\n\t"
57643 #else
57644         "mul	r6, r5\n\t"
57645 #endif
57646 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57647         "adds	r4, r4, r6\n\t"
57648 #else
57649         "add	r4, r4, r6\n\t"
57650 #endif
57651 #ifdef WOLFSSL_KEIL
57652         "adcs	r2, r2, %[r]\n\t"
57653 #elif defined(__clang__)
57654         "adcs	r2, %[r]\n\t"
57655 #else
57656         "adc	r2, %[r]\n\t"
57657 #endif
57658 #ifdef WOLFSSL_KEIL
57659         "adcs	r3, r3, %[r]\n\t"
57660 #elif defined(__clang__)
57661         "adcs	r3, %[r]\n\t"
57662 #else
57663         "adc	r3, %[r]\n\t"
57664 #endif
57665 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57666         "adds	r4, r4, r6\n\t"
57667 #else
57668         "add	r4, r4, r6\n\t"
57669 #endif
57670 #ifdef WOLFSSL_KEIL
57671         "adcs	r2, r2, %[r]\n\t"
57672 #elif defined(__clang__)
57673         "adcs	r2, %[r]\n\t"
57674 #else
57675         "adc	r2, %[r]\n\t"
57676 #endif
57677 #ifdef WOLFSSL_KEIL
57678         "adcs	r3, r3, %[r]\n\t"
57679 #elif defined(__clang__)
57680         "adcs	r3, %[r]\n\t"
57681 #else
57682         "adc	r3, %[r]\n\t"
57683 #endif
57684 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57685         "lsrs	r6, r7, #16\n\t"
57686 #else
57687         "lsr	r6, r7, #16\n\t"
57688 #endif
57689 #ifdef WOLFSSL_KEIL
57690         "muls	r5, r6, r5\n\t"
57691 #elif defined(__clang__)
57692         "muls	r5, r6\n\t"
57693 #else
57694         "mul	r5, r6\n\t"
57695 #endif
57696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57697         "lsrs	r6, r5, #16\n\t"
57698 #else
57699         "lsr	r6, r5, #16\n\t"
57700 #endif
57701 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57702         "lsls	r5, r5, #16\n\t"
57703 #else
57704         "lsl	r5, r5, #16\n\t"
57705 #endif
57706 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57707         "adds	r4, r4, r5\n\t"
57708 #else
57709         "add	r4, r4, r5\n\t"
57710 #endif
57711 #ifdef WOLFSSL_KEIL
57712         "adcs	r2, r2, r6\n\t"
57713 #elif defined(__clang__)
57714         "adcs	r2, r6\n\t"
57715 #else
57716         "adc	r2, r6\n\t"
57717 #endif
57718 #ifdef WOLFSSL_KEIL
57719         "adcs	r3, r3, %[r]\n\t"
57720 #elif defined(__clang__)
57721         "adcs	r3, %[r]\n\t"
57722 #else
57723         "adc	r3, %[r]\n\t"
57724 #endif
57725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57726         "adds	r4, r4, r5\n\t"
57727 #else
57728         "add	r4, r4, r5\n\t"
57729 #endif
57730 #ifdef WOLFSSL_KEIL
57731         "adcs	r2, r2, r6\n\t"
57732 #elif defined(__clang__)
57733         "adcs	r2, r6\n\t"
57734 #else
57735         "adc	r2, r6\n\t"
57736 #endif
57737 #ifdef WOLFSSL_KEIL
57738         "adcs	r3, r3, %[r]\n\t"
57739 #elif defined(__clang__)
57740         "adcs	r3, %[r]\n\t"
57741 #else
57742         "adc	r3, %[r]\n\t"
57743 #endif
57744 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57745         "lsrs	r5, %[a], #16\n\t"
57746 #else
57747         "lsr	r5, %[a], #16\n\t"
57748 #endif
57749 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57750         "lsrs	r6, r7, #16\n\t"
57751 #else
57752         "lsr	r6, r7, #16\n\t"
57753 #endif
57754 #ifdef WOLFSSL_KEIL
57755         "muls	r6, r5, r6\n\t"
57756 #elif defined(__clang__)
57757         "muls	r6, r5\n\t"
57758 #else
57759         "mul	r6, r5\n\t"
57760 #endif
57761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57762         "adds	r2, r2, r6\n\t"
57763 #else
57764         "add	r2, r2, r6\n\t"
57765 #endif
57766 #ifdef WOLFSSL_KEIL
57767         "adcs	r3, r3, %[r]\n\t"
57768 #elif defined(__clang__)
57769         "adcs	r3, %[r]\n\t"
57770 #else
57771         "adc	r3, %[r]\n\t"
57772 #endif
57773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57774         "adds	r2, r2, r6\n\t"
57775 #else
57776         "add	r2, r2, r6\n\t"
57777 #endif
57778 #ifdef WOLFSSL_KEIL
57779         "adcs	r3, r3, %[r]\n\t"
57780 #elif defined(__clang__)
57781         "adcs	r3, %[r]\n\t"
57782 #else
57783         "adc	r3, %[r]\n\t"
57784 #endif
57785         "uxth	r6, r7\n\t"
57786 #ifdef WOLFSSL_KEIL
57787         "muls	r5, r6, r5\n\t"
57788 #elif defined(__clang__)
57789         "muls	r5, r6\n\t"
57790 #else
57791         "mul	r5, r6\n\t"
57792 #endif
57793 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57794         "lsrs	r6, r5, #16\n\t"
57795 #else
57796         "lsr	r6, r5, #16\n\t"
57797 #endif
57798 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57799         "lsls	r5, r5, #16\n\t"
57800 #else
57801         "lsl	r5, r5, #16\n\t"
57802 #endif
57803 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57804         "adds	r4, r4, r5\n\t"
57805 #else
57806         "add	r4, r4, r5\n\t"
57807 #endif
57808 #ifdef WOLFSSL_KEIL
57809         "adcs	r2, r2, r6\n\t"
57810 #elif defined(__clang__)
57811         "adcs	r2, r6\n\t"
57812 #else
57813         "adc	r2, r6\n\t"
57814 #endif
57815 #ifdef WOLFSSL_KEIL
57816         "adcs	r3, r3, %[r]\n\t"
57817 #elif defined(__clang__)
57818         "adcs	r3, %[r]\n\t"
57819 #else
57820         "adc	r3, %[r]\n\t"
57821 #endif
57822 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57823         "adds	r4, r4, r5\n\t"
57824 #else
57825         "add	r4, r4, r5\n\t"
57826 #endif
57827 #ifdef WOLFSSL_KEIL
57828         "adcs	r2, r2, r6\n\t"
57829 #elif defined(__clang__)
57830         "adcs	r2, r6\n\t"
57831 #else
57832         "adc	r2, r6\n\t"
57833 #endif
57834 #ifdef WOLFSSL_KEIL
57835         "adcs	r3, r3, %[r]\n\t"
57836 #elif defined(__clang__)
57837         "adcs	r3, %[r]\n\t"
57838 #else
57839         "adc	r3, %[r]\n\t"
57840 #endif
57841         "#  A[7] * A[4]\n\t"
57842         "mov	%[a], r9\n\t"
57843         "ldr	r7, [%[a], #16]\n\t"
57844         "ldr	%[a], [%[a], #28]\n\t"
57845         "uxth	r5, %[a]\n\t"
57846         "uxth	r6, r7\n\t"
57847 #ifdef WOLFSSL_KEIL
57848         "muls	r6, r5, r6\n\t"
57849 #elif defined(__clang__)
57850         "muls	r6, r5\n\t"
57851 #else
57852         "mul	r6, r5\n\t"
57853 #endif
57854 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57855         "adds	r4, r4, r6\n\t"
57856 #else
57857         "add	r4, r4, r6\n\t"
57858 #endif
57859 #ifdef WOLFSSL_KEIL
57860         "adcs	r2, r2, %[r]\n\t"
57861 #elif defined(__clang__)
57862         "adcs	r2, %[r]\n\t"
57863 #else
57864         "adc	r2, %[r]\n\t"
57865 #endif
57866 #ifdef WOLFSSL_KEIL
57867         "adcs	r3, r3, %[r]\n\t"
57868 #elif defined(__clang__)
57869         "adcs	r3, %[r]\n\t"
57870 #else
57871         "adc	r3, %[r]\n\t"
57872 #endif
57873 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57874         "adds	r4, r4, r6\n\t"
57875 #else
57876         "add	r4, r4, r6\n\t"
57877 #endif
57878 #ifdef WOLFSSL_KEIL
57879         "adcs	r2, r2, %[r]\n\t"
57880 #elif defined(__clang__)
57881         "adcs	r2, %[r]\n\t"
57882 #else
57883         "adc	r2, %[r]\n\t"
57884 #endif
57885 #ifdef WOLFSSL_KEIL
57886         "adcs	r3, r3, %[r]\n\t"
57887 #elif defined(__clang__)
57888         "adcs	r3, %[r]\n\t"
57889 #else
57890         "adc	r3, %[r]\n\t"
57891 #endif
57892 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57893         "lsrs	r6, r7, #16\n\t"
57894 #else
57895         "lsr	r6, r7, #16\n\t"
57896 #endif
57897 #ifdef WOLFSSL_KEIL
57898         "muls	r5, r6, r5\n\t"
57899 #elif defined(__clang__)
57900         "muls	r5, r6\n\t"
57901 #else
57902         "mul	r5, r6\n\t"
57903 #endif
57904 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57905         "lsrs	r6, r5, #16\n\t"
57906 #else
57907         "lsr	r6, r5, #16\n\t"
57908 #endif
57909 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57910         "lsls	r5, r5, #16\n\t"
57911 #else
57912         "lsl	r5, r5, #16\n\t"
57913 #endif
57914 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57915         "adds	r4, r4, r5\n\t"
57916 #else
57917         "add	r4, r4, r5\n\t"
57918 #endif
57919 #ifdef WOLFSSL_KEIL
57920         "adcs	r2, r2, r6\n\t"
57921 #elif defined(__clang__)
57922         "adcs	r2, r6\n\t"
57923 #else
57924         "adc	r2, r6\n\t"
57925 #endif
57926 #ifdef WOLFSSL_KEIL
57927         "adcs	r3, r3, %[r]\n\t"
57928 #elif defined(__clang__)
57929         "adcs	r3, %[r]\n\t"
57930 #else
57931         "adc	r3, %[r]\n\t"
57932 #endif
57933 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57934         "adds	r4, r4, r5\n\t"
57935 #else
57936         "add	r4, r4, r5\n\t"
57937 #endif
57938 #ifdef WOLFSSL_KEIL
57939         "adcs	r2, r2, r6\n\t"
57940 #elif defined(__clang__)
57941         "adcs	r2, r6\n\t"
57942 #else
57943         "adc	r2, r6\n\t"
57944 #endif
57945 #ifdef WOLFSSL_KEIL
57946         "adcs	r3, r3, %[r]\n\t"
57947 #elif defined(__clang__)
57948         "adcs	r3, %[r]\n\t"
57949 #else
57950         "adc	r3, %[r]\n\t"
57951 #endif
57952 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57953         "lsrs	r5, %[a], #16\n\t"
57954 #else
57955         "lsr	r5, %[a], #16\n\t"
57956 #endif
57957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57958         "lsrs	r6, r7, #16\n\t"
57959 #else
57960         "lsr	r6, r7, #16\n\t"
57961 #endif
57962 #ifdef WOLFSSL_KEIL
57963         "muls	r6, r5, r6\n\t"
57964 #elif defined(__clang__)
57965         "muls	r6, r5\n\t"
57966 #else
57967         "mul	r6, r5\n\t"
57968 #endif
57969 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57970         "adds	r2, r2, r6\n\t"
57971 #else
57972         "add	r2, r2, r6\n\t"
57973 #endif
57974 #ifdef WOLFSSL_KEIL
57975         "adcs	r3, r3, %[r]\n\t"
57976 #elif defined(__clang__)
57977         "adcs	r3, %[r]\n\t"
57978 #else
57979         "adc	r3, %[r]\n\t"
57980 #endif
57981 #if defined(__clang__) || defined(WOLFSSL_KEIL)
57982         "adds	r2, r2, r6\n\t"
57983 #else
57984         "add	r2, r2, r6\n\t"
57985 #endif
57986 #ifdef WOLFSSL_KEIL
57987         "adcs	r3, r3, %[r]\n\t"
57988 #elif defined(__clang__)
57989         "adcs	r3, %[r]\n\t"
57990 #else
57991         "adc	r3, %[r]\n\t"
57992 #endif
57993         "uxth	r6, r7\n\t"
57994 #ifdef WOLFSSL_KEIL
57995         "muls	r5, r6, r5\n\t"
57996 #elif defined(__clang__)
57997         "muls	r5, r6\n\t"
57998 #else
57999         "mul	r5, r6\n\t"
58000 #endif
58001 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58002         "lsrs	r6, r5, #16\n\t"
58003 #else
58004         "lsr	r6, r5, #16\n\t"
58005 #endif
58006 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58007         "lsls	r5, r5, #16\n\t"
58008 #else
58009         "lsl	r5, r5, #16\n\t"
58010 #endif
58011 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58012         "adds	r4, r4, r5\n\t"
58013 #else
58014         "add	r4, r4, r5\n\t"
58015 #endif
58016 #ifdef WOLFSSL_KEIL
58017         "adcs	r2, r2, r6\n\t"
58018 #elif defined(__clang__)
58019         "adcs	r2, r6\n\t"
58020 #else
58021         "adc	r2, r6\n\t"
58022 #endif
58023 #ifdef WOLFSSL_KEIL
58024         "adcs	r3, r3, %[r]\n\t"
58025 #elif defined(__clang__)
58026         "adcs	r3, %[r]\n\t"
58027 #else
58028         "adc	r3, %[r]\n\t"
58029 #endif
58030 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58031         "adds	r4, r4, r5\n\t"
58032 #else
58033         "add	r4, r4, r5\n\t"
58034 #endif
58035 #ifdef WOLFSSL_KEIL
58036         "adcs	r2, r2, r6\n\t"
58037 #elif defined(__clang__)
58038         "adcs	r2, r6\n\t"
58039 #else
58040         "adc	r2, r6\n\t"
58041 #endif
58042 #ifdef WOLFSSL_KEIL
58043         "adcs	r3, r3, %[r]\n\t"
58044 #elif defined(__clang__)
58045         "adcs	r3, %[r]\n\t"
58046 #else
58047         "adc	r3, %[r]\n\t"
58048 #endif
58049         "#  A[8] * A[3]\n\t"
58050         "mov	%[a], r9\n\t"
58051         "mov	r7, lr\n\t"
58052         "ldr	%[a], [%[a], #32]\n\t"
58053         "uxth	r5, %[a]\n\t"
58054         "uxth	r6, r7\n\t"
58055 #ifdef WOLFSSL_KEIL
58056         "muls	r6, r5, r6\n\t"
58057 #elif defined(__clang__)
58058         "muls	r6, r5\n\t"
58059 #else
58060         "mul	r6, r5\n\t"
58061 #endif
58062 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58063         "adds	r4, r4, r6\n\t"
58064 #else
58065         "add	r4, r4, r6\n\t"
58066 #endif
58067 #ifdef WOLFSSL_KEIL
58068         "adcs	r2, r2, %[r]\n\t"
58069 #elif defined(__clang__)
58070         "adcs	r2, %[r]\n\t"
58071 #else
58072         "adc	r2, %[r]\n\t"
58073 #endif
58074 #ifdef WOLFSSL_KEIL
58075         "adcs	r3, r3, %[r]\n\t"
58076 #elif defined(__clang__)
58077         "adcs	r3, %[r]\n\t"
58078 #else
58079         "adc	r3, %[r]\n\t"
58080 #endif
58081 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58082         "adds	r4, r4, r6\n\t"
58083 #else
58084         "add	r4, r4, r6\n\t"
58085 #endif
58086 #ifdef WOLFSSL_KEIL
58087         "adcs	r2, r2, %[r]\n\t"
58088 #elif defined(__clang__)
58089         "adcs	r2, %[r]\n\t"
58090 #else
58091         "adc	r2, %[r]\n\t"
58092 #endif
58093 #ifdef WOLFSSL_KEIL
58094         "adcs	r3, r3, %[r]\n\t"
58095 #elif defined(__clang__)
58096         "adcs	r3, %[r]\n\t"
58097 #else
58098         "adc	r3, %[r]\n\t"
58099 #endif
58100 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58101         "lsrs	r6, r7, #16\n\t"
58102 #else
58103         "lsr	r6, r7, #16\n\t"
58104 #endif
58105 #ifdef WOLFSSL_KEIL
58106         "muls	r5, r6, r5\n\t"
58107 #elif defined(__clang__)
58108         "muls	r5, r6\n\t"
58109 #else
58110         "mul	r5, r6\n\t"
58111 #endif
58112 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58113         "lsrs	r6, r5, #16\n\t"
58114 #else
58115         "lsr	r6, r5, #16\n\t"
58116 #endif
58117 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58118         "lsls	r5, r5, #16\n\t"
58119 #else
58120         "lsl	r5, r5, #16\n\t"
58121 #endif
58122 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58123         "adds	r4, r4, r5\n\t"
58124 #else
58125         "add	r4, r4, r5\n\t"
58126 #endif
58127 #ifdef WOLFSSL_KEIL
58128         "adcs	r2, r2, r6\n\t"
58129 #elif defined(__clang__)
58130         "adcs	r2, r6\n\t"
58131 #else
58132         "adc	r2, r6\n\t"
58133 #endif
58134 #ifdef WOLFSSL_KEIL
58135         "adcs	r3, r3, %[r]\n\t"
58136 #elif defined(__clang__)
58137         "adcs	r3, %[r]\n\t"
58138 #else
58139         "adc	r3, %[r]\n\t"
58140 #endif
58141 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58142         "adds	r4, r4, r5\n\t"
58143 #else
58144         "add	r4, r4, r5\n\t"
58145 #endif
58146 #ifdef WOLFSSL_KEIL
58147         "adcs	r2, r2, r6\n\t"
58148 #elif defined(__clang__)
58149         "adcs	r2, r6\n\t"
58150 #else
58151         "adc	r2, r6\n\t"
58152 #endif
58153 #ifdef WOLFSSL_KEIL
58154         "adcs	r3, r3, %[r]\n\t"
58155 #elif defined(__clang__)
58156         "adcs	r3, %[r]\n\t"
58157 #else
58158         "adc	r3, %[r]\n\t"
58159 #endif
58160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58161         "lsrs	r5, %[a], #16\n\t"
58162 #else
58163         "lsr	r5, %[a], #16\n\t"
58164 #endif
58165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58166         "lsrs	r6, r7, #16\n\t"
58167 #else
58168         "lsr	r6, r7, #16\n\t"
58169 #endif
58170 #ifdef WOLFSSL_KEIL
58171         "muls	r6, r5, r6\n\t"
58172 #elif defined(__clang__)
58173         "muls	r6, r5\n\t"
58174 #else
58175         "mul	r6, r5\n\t"
58176 #endif
58177 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58178         "adds	r2, r2, r6\n\t"
58179 #else
58180         "add	r2, r2, r6\n\t"
58181 #endif
58182 #ifdef WOLFSSL_KEIL
58183         "adcs	r3, r3, %[r]\n\t"
58184 #elif defined(__clang__)
58185         "adcs	r3, %[r]\n\t"
58186 #else
58187         "adc	r3, %[r]\n\t"
58188 #endif
58189 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58190         "adds	r2, r2, r6\n\t"
58191 #else
58192         "add	r2, r2, r6\n\t"
58193 #endif
58194 #ifdef WOLFSSL_KEIL
58195         "adcs	r3, r3, %[r]\n\t"
58196 #elif defined(__clang__)
58197         "adcs	r3, %[r]\n\t"
58198 #else
58199         "adc	r3, %[r]\n\t"
58200 #endif
58201         "uxth	r6, r7\n\t"
58202 #ifdef WOLFSSL_KEIL
58203         "muls	r5, r6, r5\n\t"
58204 #elif defined(__clang__)
58205         "muls	r5, r6\n\t"
58206 #else
58207         "mul	r5, r6\n\t"
58208 #endif
58209 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58210         "lsrs	r6, r5, #16\n\t"
58211 #else
58212         "lsr	r6, r5, #16\n\t"
58213 #endif
58214 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58215         "lsls	r5, r5, #16\n\t"
58216 #else
58217         "lsl	r5, r5, #16\n\t"
58218 #endif
58219 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58220         "adds	r4, r4, r5\n\t"
58221 #else
58222         "add	r4, r4, r5\n\t"
58223 #endif
58224 #ifdef WOLFSSL_KEIL
58225         "adcs	r2, r2, r6\n\t"
58226 #elif defined(__clang__)
58227         "adcs	r2, r6\n\t"
58228 #else
58229         "adc	r2, r6\n\t"
58230 #endif
58231 #ifdef WOLFSSL_KEIL
58232         "adcs	r3, r3, %[r]\n\t"
58233 #elif defined(__clang__)
58234         "adcs	r3, %[r]\n\t"
58235 #else
58236         "adc	r3, %[r]\n\t"
58237 #endif
58238 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58239         "adds	r4, r4, r5\n\t"
58240 #else
58241         "add	r4, r4, r5\n\t"
58242 #endif
58243 #ifdef WOLFSSL_KEIL
58244         "adcs	r2, r2, r6\n\t"
58245 #elif defined(__clang__)
58246         "adcs	r2, r6\n\t"
58247 #else
58248         "adc	r2, r6\n\t"
58249 #endif
58250 #ifdef WOLFSSL_KEIL
58251         "adcs	r3, r3, %[r]\n\t"
58252 #elif defined(__clang__)
58253         "adcs	r3, %[r]\n\t"
58254 #else
58255         "adc	r3, %[r]\n\t"
58256 #endif
58257         "#  A[9] * A[2]\n\t"
58258         "mov	%[a], r9\n\t"
58259         "mov	r7, r12\n\t"
58260         "ldr	%[a], [%[a], #36]\n\t"
58261         "uxth	r5, %[a]\n\t"
58262         "uxth	r6, r7\n\t"
58263 #ifdef WOLFSSL_KEIL
58264         "muls	r6, r5, r6\n\t"
58265 #elif defined(__clang__)
58266         "muls	r6, r5\n\t"
58267 #else
58268         "mul	r6, r5\n\t"
58269 #endif
58270 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58271         "adds	r4, r4, r6\n\t"
58272 #else
58273         "add	r4, r4, r6\n\t"
58274 #endif
58275 #ifdef WOLFSSL_KEIL
58276         "adcs	r2, r2, %[r]\n\t"
58277 #elif defined(__clang__)
58278         "adcs	r2, %[r]\n\t"
58279 #else
58280         "adc	r2, %[r]\n\t"
58281 #endif
58282 #ifdef WOLFSSL_KEIL
58283         "adcs	r3, r3, %[r]\n\t"
58284 #elif defined(__clang__)
58285         "adcs	r3, %[r]\n\t"
58286 #else
58287         "adc	r3, %[r]\n\t"
58288 #endif
58289 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58290         "adds	r4, r4, r6\n\t"
58291 #else
58292         "add	r4, r4, r6\n\t"
58293 #endif
58294 #ifdef WOLFSSL_KEIL
58295         "adcs	r2, r2, %[r]\n\t"
58296 #elif defined(__clang__)
58297         "adcs	r2, %[r]\n\t"
58298 #else
58299         "adc	r2, %[r]\n\t"
58300 #endif
58301 #ifdef WOLFSSL_KEIL
58302         "adcs	r3, r3, %[r]\n\t"
58303 #elif defined(__clang__)
58304         "adcs	r3, %[r]\n\t"
58305 #else
58306         "adc	r3, %[r]\n\t"
58307 #endif
58308 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58309         "lsrs	r6, r7, #16\n\t"
58310 #else
58311         "lsr	r6, r7, #16\n\t"
58312 #endif
58313 #ifdef WOLFSSL_KEIL
58314         "muls	r5, r6, r5\n\t"
58315 #elif defined(__clang__)
58316         "muls	r5, r6\n\t"
58317 #else
58318         "mul	r5, r6\n\t"
58319 #endif
58320 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58321         "lsrs	r6, r5, #16\n\t"
58322 #else
58323         "lsr	r6, r5, #16\n\t"
58324 #endif
58325 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58326         "lsls	r5, r5, #16\n\t"
58327 #else
58328         "lsl	r5, r5, #16\n\t"
58329 #endif
58330 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58331         "adds	r4, r4, r5\n\t"
58332 #else
58333         "add	r4, r4, r5\n\t"
58334 #endif
58335 #ifdef WOLFSSL_KEIL
58336         "adcs	r2, r2, r6\n\t"
58337 #elif defined(__clang__)
58338         "adcs	r2, r6\n\t"
58339 #else
58340         "adc	r2, r6\n\t"
58341 #endif
58342 #ifdef WOLFSSL_KEIL
58343         "adcs	r3, r3, %[r]\n\t"
58344 #elif defined(__clang__)
58345         "adcs	r3, %[r]\n\t"
58346 #else
58347         "adc	r3, %[r]\n\t"
58348 #endif
58349 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58350         "adds	r4, r4, r5\n\t"
58351 #else
58352         "add	r4, r4, r5\n\t"
58353 #endif
58354 #ifdef WOLFSSL_KEIL
58355         "adcs	r2, r2, r6\n\t"
58356 #elif defined(__clang__)
58357         "adcs	r2, r6\n\t"
58358 #else
58359         "adc	r2, r6\n\t"
58360 #endif
58361 #ifdef WOLFSSL_KEIL
58362         "adcs	r3, r3, %[r]\n\t"
58363 #elif defined(__clang__)
58364         "adcs	r3, %[r]\n\t"
58365 #else
58366         "adc	r3, %[r]\n\t"
58367 #endif
58368 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58369         "lsrs	r5, %[a], #16\n\t"
58370 #else
58371         "lsr	r5, %[a], #16\n\t"
58372 #endif
58373 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58374         "lsrs	r6, r7, #16\n\t"
58375 #else
58376         "lsr	r6, r7, #16\n\t"
58377 #endif
58378 #ifdef WOLFSSL_KEIL
58379         "muls	r6, r5, r6\n\t"
58380 #elif defined(__clang__)
58381         "muls	r6, r5\n\t"
58382 #else
58383         "mul	r6, r5\n\t"
58384 #endif
58385 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58386         "adds	r2, r2, r6\n\t"
58387 #else
58388         "add	r2, r2, r6\n\t"
58389 #endif
58390 #ifdef WOLFSSL_KEIL
58391         "adcs	r3, r3, %[r]\n\t"
58392 #elif defined(__clang__)
58393         "adcs	r3, %[r]\n\t"
58394 #else
58395         "adc	r3, %[r]\n\t"
58396 #endif
58397 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58398         "adds	r2, r2, r6\n\t"
58399 #else
58400         "add	r2, r2, r6\n\t"
58401 #endif
58402 #ifdef WOLFSSL_KEIL
58403         "adcs	r3, r3, %[r]\n\t"
58404 #elif defined(__clang__)
58405         "adcs	r3, %[r]\n\t"
58406 #else
58407         "adc	r3, %[r]\n\t"
58408 #endif
58409         "uxth	r6, r7\n\t"
58410 #ifdef WOLFSSL_KEIL
58411         "muls	r5, r6, r5\n\t"
58412 #elif defined(__clang__)
58413         "muls	r5, r6\n\t"
58414 #else
58415         "mul	r5, r6\n\t"
58416 #endif
58417 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58418         "lsrs	r6, r5, #16\n\t"
58419 #else
58420         "lsr	r6, r5, #16\n\t"
58421 #endif
58422 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58423         "lsls	r5, r5, #16\n\t"
58424 #else
58425         "lsl	r5, r5, #16\n\t"
58426 #endif
58427 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58428         "adds	r4, r4, r5\n\t"
58429 #else
58430         "add	r4, r4, r5\n\t"
58431 #endif
58432 #ifdef WOLFSSL_KEIL
58433         "adcs	r2, r2, r6\n\t"
58434 #elif defined(__clang__)
58435         "adcs	r2, r6\n\t"
58436 #else
58437         "adc	r2, r6\n\t"
58438 #endif
58439 #ifdef WOLFSSL_KEIL
58440         "adcs	r3, r3, %[r]\n\t"
58441 #elif defined(__clang__)
58442         "adcs	r3, %[r]\n\t"
58443 #else
58444         "adc	r3, %[r]\n\t"
58445 #endif
58446 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58447         "adds	r4, r4, r5\n\t"
58448 #else
58449         "add	r4, r4, r5\n\t"
58450 #endif
58451 #ifdef WOLFSSL_KEIL
58452         "adcs	r2, r2, r6\n\t"
58453 #elif defined(__clang__)
58454         "adcs	r2, r6\n\t"
58455 #else
58456         "adc	r2, r6\n\t"
58457 #endif
58458 #ifdef WOLFSSL_KEIL
58459         "adcs	r3, r3, %[r]\n\t"
58460 #elif defined(__clang__)
58461         "adcs	r3, %[r]\n\t"
58462 #else
58463         "adc	r3, %[r]\n\t"
58464 #endif
58465         "#  A[10] * A[1]\n\t"
58466         "mov	%[a], r9\n\t"
58467         "mov	r7, r11\n\t"
58468         "ldr	%[a], [%[a], #40]\n\t"
58469         "uxth	r5, %[a]\n\t"
58470         "uxth	r6, r7\n\t"
58471 #ifdef WOLFSSL_KEIL
58472         "muls	r6, r5, r6\n\t"
58473 #elif defined(__clang__)
58474         "muls	r6, r5\n\t"
58475 #else
58476         "mul	r6, r5\n\t"
58477 #endif
58478 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58479         "adds	r4, r4, r6\n\t"
58480 #else
58481         "add	r4, r4, r6\n\t"
58482 #endif
58483 #ifdef WOLFSSL_KEIL
58484         "adcs	r2, r2, %[r]\n\t"
58485 #elif defined(__clang__)
58486         "adcs	r2, %[r]\n\t"
58487 #else
58488         "adc	r2, %[r]\n\t"
58489 #endif
58490 #ifdef WOLFSSL_KEIL
58491         "adcs	r3, r3, %[r]\n\t"
58492 #elif defined(__clang__)
58493         "adcs	r3, %[r]\n\t"
58494 #else
58495         "adc	r3, %[r]\n\t"
58496 #endif
58497 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58498         "adds	r4, r4, r6\n\t"
58499 #else
58500         "add	r4, r4, r6\n\t"
58501 #endif
58502 #ifdef WOLFSSL_KEIL
58503         "adcs	r2, r2, %[r]\n\t"
58504 #elif defined(__clang__)
58505         "adcs	r2, %[r]\n\t"
58506 #else
58507         "adc	r2, %[r]\n\t"
58508 #endif
58509 #ifdef WOLFSSL_KEIL
58510         "adcs	r3, r3, %[r]\n\t"
58511 #elif defined(__clang__)
58512         "adcs	r3, %[r]\n\t"
58513 #else
58514         "adc	r3, %[r]\n\t"
58515 #endif
58516 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58517         "lsrs	r6, r7, #16\n\t"
58518 #else
58519         "lsr	r6, r7, #16\n\t"
58520 #endif
58521 #ifdef WOLFSSL_KEIL
58522         "muls	r5, r6, r5\n\t"
58523 #elif defined(__clang__)
58524         "muls	r5, r6\n\t"
58525 #else
58526         "mul	r5, r6\n\t"
58527 #endif
58528 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58529         "lsrs	r6, r5, #16\n\t"
58530 #else
58531         "lsr	r6, r5, #16\n\t"
58532 #endif
58533 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58534         "lsls	r5, r5, #16\n\t"
58535 #else
58536         "lsl	r5, r5, #16\n\t"
58537 #endif
58538 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58539         "adds	r4, r4, r5\n\t"
58540 #else
58541         "add	r4, r4, r5\n\t"
58542 #endif
58543 #ifdef WOLFSSL_KEIL
58544         "adcs	r2, r2, r6\n\t"
58545 #elif defined(__clang__)
58546         "adcs	r2, r6\n\t"
58547 #else
58548         "adc	r2, r6\n\t"
58549 #endif
58550 #ifdef WOLFSSL_KEIL
58551         "adcs	r3, r3, %[r]\n\t"
58552 #elif defined(__clang__)
58553         "adcs	r3, %[r]\n\t"
58554 #else
58555         "adc	r3, %[r]\n\t"
58556 #endif
58557 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58558         "adds	r4, r4, r5\n\t"
58559 #else
58560         "add	r4, r4, r5\n\t"
58561 #endif
58562 #ifdef WOLFSSL_KEIL
58563         "adcs	r2, r2, r6\n\t"
58564 #elif defined(__clang__)
58565         "adcs	r2, r6\n\t"
58566 #else
58567         "adc	r2, r6\n\t"
58568 #endif
58569 #ifdef WOLFSSL_KEIL
58570         "adcs	r3, r3, %[r]\n\t"
58571 #elif defined(__clang__)
58572         "adcs	r3, %[r]\n\t"
58573 #else
58574         "adc	r3, %[r]\n\t"
58575 #endif
58576 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58577         "lsrs	r5, %[a], #16\n\t"
58578 #else
58579         "lsr	r5, %[a], #16\n\t"
58580 #endif
58581 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58582         "lsrs	r6, r7, #16\n\t"
58583 #else
58584         "lsr	r6, r7, #16\n\t"
58585 #endif
58586 #ifdef WOLFSSL_KEIL
58587         "muls	r6, r5, r6\n\t"
58588 #elif defined(__clang__)
58589         "muls	r6, r5\n\t"
58590 #else
58591         "mul	r6, r5\n\t"
58592 #endif
58593 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58594         "adds	r2, r2, r6\n\t"
58595 #else
58596         "add	r2, r2, r6\n\t"
58597 #endif
58598 #ifdef WOLFSSL_KEIL
58599         "adcs	r3, r3, %[r]\n\t"
58600 #elif defined(__clang__)
58601         "adcs	r3, %[r]\n\t"
58602 #else
58603         "adc	r3, %[r]\n\t"
58604 #endif
58605 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58606         "adds	r2, r2, r6\n\t"
58607 #else
58608         "add	r2, r2, r6\n\t"
58609 #endif
58610 #ifdef WOLFSSL_KEIL
58611         "adcs	r3, r3, %[r]\n\t"
58612 #elif defined(__clang__)
58613         "adcs	r3, %[r]\n\t"
58614 #else
58615         "adc	r3, %[r]\n\t"
58616 #endif
58617         "uxth	r6, r7\n\t"
58618 #ifdef WOLFSSL_KEIL
58619         "muls	r5, r6, r5\n\t"
58620 #elif defined(__clang__)
58621         "muls	r5, r6\n\t"
58622 #else
58623         "mul	r5, r6\n\t"
58624 #endif
58625 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58626         "lsrs	r6, r5, #16\n\t"
58627 #else
58628         "lsr	r6, r5, #16\n\t"
58629 #endif
58630 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58631         "lsls	r5, r5, #16\n\t"
58632 #else
58633         "lsl	r5, r5, #16\n\t"
58634 #endif
58635 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58636         "adds	r4, r4, r5\n\t"
58637 #else
58638         "add	r4, r4, r5\n\t"
58639 #endif
58640 #ifdef WOLFSSL_KEIL
58641         "adcs	r2, r2, r6\n\t"
58642 #elif defined(__clang__)
58643         "adcs	r2, r6\n\t"
58644 #else
58645         "adc	r2, r6\n\t"
58646 #endif
58647 #ifdef WOLFSSL_KEIL
58648         "adcs	r3, r3, %[r]\n\t"
58649 #elif defined(__clang__)
58650         "adcs	r3, %[r]\n\t"
58651 #else
58652         "adc	r3, %[r]\n\t"
58653 #endif
58654 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58655         "adds	r4, r4, r5\n\t"
58656 #else
58657         "add	r4, r4, r5\n\t"
58658 #endif
58659 #ifdef WOLFSSL_KEIL
58660         "adcs	r2, r2, r6\n\t"
58661 #elif defined(__clang__)
58662         "adcs	r2, r6\n\t"
58663 #else
58664         "adc	r2, r6\n\t"
58665 #endif
58666 #ifdef WOLFSSL_KEIL
58667         "adcs	r3, r3, %[r]\n\t"
58668 #elif defined(__clang__)
58669         "adcs	r3, %[r]\n\t"
58670 #else
58671         "adc	r3, %[r]\n\t"
58672 #endif
58673         "#  A[11] * A[0]\n\t"
58674         "mov	%[a], r9\n\t"
58675         "mov	r7, r10\n\t"
58676         "ldr	%[a], [%[a], #44]\n\t"
58677         "uxth	r5, %[a]\n\t"
58678         "uxth	r6, r7\n\t"
58679 #ifdef WOLFSSL_KEIL
58680         "muls	r6, r5, r6\n\t"
58681 #elif defined(__clang__)
58682         "muls	r6, r5\n\t"
58683 #else
58684         "mul	r6, r5\n\t"
58685 #endif
58686 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58687         "adds	r4, r4, r6\n\t"
58688 #else
58689         "add	r4, r4, r6\n\t"
58690 #endif
58691 #ifdef WOLFSSL_KEIL
58692         "adcs	r2, r2, %[r]\n\t"
58693 #elif defined(__clang__)
58694         "adcs	r2, %[r]\n\t"
58695 #else
58696         "adc	r2, %[r]\n\t"
58697 #endif
58698 #ifdef WOLFSSL_KEIL
58699         "adcs	r3, r3, %[r]\n\t"
58700 #elif defined(__clang__)
58701         "adcs	r3, %[r]\n\t"
58702 #else
58703         "adc	r3, %[r]\n\t"
58704 #endif
58705 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58706         "adds	r4, r4, r6\n\t"
58707 #else
58708         "add	r4, r4, r6\n\t"
58709 #endif
58710 #ifdef WOLFSSL_KEIL
58711         "adcs	r2, r2, %[r]\n\t"
58712 #elif defined(__clang__)
58713         "adcs	r2, %[r]\n\t"
58714 #else
58715         "adc	r2, %[r]\n\t"
58716 #endif
58717 #ifdef WOLFSSL_KEIL
58718         "adcs	r3, r3, %[r]\n\t"
58719 #elif defined(__clang__)
58720         "adcs	r3, %[r]\n\t"
58721 #else
58722         "adc	r3, %[r]\n\t"
58723 #endif
58724 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58725         "lsrs	r6, r7, #16\n\t"
58726 #else
58727         "lsr	r6, r7, #16\n\t"
58728 #endif
58729 #ifdef WOLFSSL_KEIL
58730         "muls	r5, r6, r5\n\t"
58731 #elif defined(__clang__)
58732         "muls	r5, r6\n\t"
58733 #else
58734         "mul	r5, r6\n\t"
58735 #endif
58736 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58737         "lsrs	r6, r5, #16\n\t"
58738 #else
58739         "lsr	r6, r5, #16\n\t"
58740 #endif
58741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58742         "lsls	r5, r5, #16\n\t"
58743 #else
58744         "lsl	r5, r5, #16\n\t"
58745 #endif
58746 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58747         "adds	r4, r4, r5\n\t"
58748 #else
58749         "add	r4, r4, r5\n\t"
58750 #endif
58751 #ifdef WOLFSSL_KEIL
58752         "adcs	r2, r2, r6\n\t"
58753 #elif defined(__clang__)
58754         "adcs	r2, r6\n\t"
58755 #else
58756         "adc	r2, r6\n\t"
58757 #endif
58758 #ifdef WOLFSSL_KEIL
58759         "adcs	r3, r3, %[r]\n\t"
58760 #elif defined(__clang__)
58761         "adcs	r3, %[r]\n\t"
58762 #else
58763         "adc	r3, %[r]\n\t"
58764 #endif
58765 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58766         "adds	r4, r4, r5\n\t"
58767 #else
58768         "add	r4, r4, r5\n\t"
58769 #endif
58770 #ifdef WOLFSSL_KEIL
58771         "adcs	r2, r2, r6\n\t"
58772 #elif defined(__clang__)
58773         "adcs	r2, r6\n\t"
58774 #else
58775         "adc	r2, r6\n\t"
58776 #endif
58777 #ifdef WOLFSSL_KEIL
58778         "adcs	r3, r3, %[r]\n\t"
58779 #elif defined(__clang__)
58780         "adcs	r3, %[r]\n\t"
58781 #else
58782         "adc	r3, %[r]\n\t"
58783 #endif
58784 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58785         "lsrs	r5, %[a], #16\n\t"
58786 #else
58787         "lsr	r5, %[a], #16\n\t"
58788 #endif
58789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58790         "lsrs	r6, r7, #16\n\t"
58791 #else
58792         "lsr	r6, r7, #16\n\t"
58793 #endif
58794 #ifdef WOLFSSL_KEIL
58795         "muls	r6, r5, r6\n\t"
58796 #elif defined(__clang__)
58797         "muls	r6, r5\n\t"
58798 #else
58799         "mul	r6, r5\n\t"
58800 #endif
58801 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58802         "adds	r2, r2, r6\n\t"
58803 #else
58804         "add	r2, r2, r6\n\t"
58805 #endif
58806 #ifdef WOLFSSL_KEIL
58807         "adcs	r3, r3, %[r]\n\t"
58808 #elif defined(__clang__)
58809         "adcs	r3, %[r]\n\t"
58810 #else
58811         "adc	r3, %[r]\n\t"
58812 #endif
58813 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58814         "adds	r2, r2, r6\n\t"
58815 #else
58816         "add	r2, r2, r6\n\t"
58817 #endif
58818 #ifdef WOLFSSL_KEIL
58819         "adcs	r3, r3, %[r]\n\t"
58820 #elif defined(__clang__)
58821         "adcs	r3, %[r]\n\t"
58822 #else
58823         "adc	r3, %[r]\n\t"
58824 #endif
58825         "uxth	r6, r7\n\t"
58826 #ifdef WOLFSSL_KEIL
58827         "muls	r5, r6, r5\n\t"
58828 #elif defined(__clang__)
58829         "muls	r5, r6\n\t"
58830 #else
58831         "mul	r5, r6\n\t"
58832 #endif
58833 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58834         "lsrs	r6, r5, #16\n\t"
58835 #else
58836         "lsr	r6, r5, #16\n\t"
58837 #endif
58838 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58839         "lsls	r5, r5, #16\n\t"
58840 #else
58841         "lsl	r5, r5, #16\n\t"
58842 #endif
58843 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58844         "adds	r4, r4, r5\n\t"
58845 #else
58846         "add	r4, r4, r5\n\t"
58847 #endif
58848 #ifdef WOLFSSL_KEIL
58849         "adcs	r2, r2, r6\n\t"
58850 #elif defined(__clang__)
58851         "adcs	r2, r6\n\t"
58852 #else
58853         "adc	r2, r6\n\t"
58854 #endif
58855 #ifdef WOLFSSL_KEIL
58856         "adcs	r3, r3, %[r]\n\t"
58857 #elif defined(__clang__)
58858         "adcs	r3, %[r]\n\t"
58859 #else
58860         "adc	r3, %[r]\n\t"
58861 #endif
58862 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58863         "adds	r4, r4, r5\n\t"
58864 #else
58865         "add	r4, r4, r5\n\t"
58866 #endif
58867 #ifdef WOLFSSL_KEIL
58868         "adcs	r2, r2, r6\n\t"
58869 #elif defined(__clang__)
58870         "adcs	r2, r6\n\t"
58871 #else
58872         "adc	r2, r6\n\t"
58873 #endif
58874 #ifdef WOLFSSL_KEIL
58875         "adcs	r3, r3, %[r]\n\t"
58876 #elif defined(__clang__)
58877         "adcs	r3, %[r]\n\t"
58878 #else
58879         "adc	r3, %[r]\n\t"
58880 #endif
58881         "str	r4, [sp, #44]\n\t"
58882         "#  A[11] * A[1]\n\t"
58883         "movs	r4, #0\n\t"
58884         "mov	%[a], r9\n\t"
58885         "mov	r7, r11\n\t"
58886         "ldr	%[a], [%[a], #44]\n\t"
58887         "uxth	r5, %[a]\n\t"
58888         "uxth	r6, r7\n\t"
58889 #ifdef WOLFSSL_KEIL
58890         "muls	r6, r5, r6\n\t"
58891 #elif defined(__clang__)
58892         "muls	r6, r5\n\t"
58893 #else
58894         "mul	r6, r5\n\t"
58895 #endif
58896 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58897         "adds	r2, r2, r6\n\t"
58898 #else
58899         "add	r2, r2, r6\n\t"
58900 #endif
58901 #ifdef WOLFSSL_KEIL
58902         "adcs	r3, r3, %[r]\n\t"
58903 #elif defined(__clang__)
58904         "adcs	r3, %[r]\n\t"
58905 #else
58906         "adc	r3, %[r]\n\t"
58907 #endif
58908 #ifdef WOLFSSL_KEIL
58909         "adcs	r4, r4, %[r]\n\t"
58910 #elif defined(__clang__)
58911         "adcs	r4, %[r]\n\t"
58912 #else
58913         "adc	r4, %[r]\n\t"
58914 #endif
58915 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58916         "adds	r2, r2, r6\n\t"
58917 #else
58918         "add	r2, r2, r6\n\t"
58919 #endif
58920 #ifdef WOLFSSL_KEIL
58921         "adcs	r3, r3, %[r]\n\t"
58922 #elif defined(__clang__)
58923         "adcs	r3, %[r]\n\t"
58924 #else
58925         "adc	r3, %[r]\n\t"
58926 #endif
58927 #ifdef WOLFSSL_KEIL
58928         "adcs	r4, r4, %[r]\n\t"
58929 #elif defined(__clang__)
58930         "adcs	r4, %[r]\n\t"
58931 #else
58932         "adc	r4, %[r]\n\t"
58933 #endif
58934 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58935         "lsrs	r6, r7, #16\n\t"
58936 #else
58937         "lsr	r6, r7, #16\n\t"
58938 #endif
58939 #ifdef WOLFSSL_KEIL
58940         "muls	r5, r6, r5\n\t"
58941 #elif defined(__clang__)
58942         "muls	r5, r6\n\t"
58943 #else
58944         "mul	r5, r6\n\t"
58945 #endif
58946 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58947         "lsrs	r6, r5, #16\n\t"
58948 #else
58949         "lsr	r6, r5, #16\n\t"
58950 #endif
58951 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58952         "lsls	r5, r5, #16\n\t"
58953 #else
58954         "lsl	r5, r5, #16\n\t"
58955 #endif
58956 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58957         "adds	r2, r2, r5\n\t"
58958 #else
58959         "add	r2, r2, r5\n\t"
58960 #endif
58961 #ifdef WOLFSSL_KEIL
58962         "adcs	r3, r3, r6\n\t"
58963 #elif defined(__clang__)
58964         "adcs	r3, r6\n\t"
58965 #else
58966         "adc	r3, r6\n\t"
58967 #endif
58968 #ifdef WOLFSSL_KEIL
58969         "adcs	r4, r4, %[r]\n\t"
58970 #elif defined(__clang__)
58971         "adcs	r4, %[r]\n\t"
58972 #else
58973         "adc	r4, %[r]\n\t"
58974 #endif
58975 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58976         "adds	r2, r2, r5\n\t"
58977 #else
58978         "add	r2, r2, r5\n\t"
58979 #endif
58980 #ifdef WOLFSSL_KEIL
58981         "adcs	r3, r3, r6\n\t"
58982 #elif defined(__clang__)
58983         "adcs	r3, r6\n\t"
58984 #else
58985         "adc	r3, r6\n\t"
58986 #endif
58987 #ifdef WOLFSSL_KEIL
58988         "adcs	r4, r4, %[r]\n\t"
58989 #elif defined(__clang__)
58990         "adcs	r4, %[r]\n\t"
58991 #else
58992         "adc	r4, %[r]\n\t"
58993 #endif
58994 #if defined(__clang__) || defined(WOLFSSL_KEIL)
58995         "lsrs	r5, %[a], #16\n\t"
58996 #else
58997         "lsr	r5, %[a], #16\n\t"
58998 #endif
58999 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59000         "lsrs	r6, r7, #16\n\t"
59001 #else
59002         "lsr	r6, r7, #16\n\t"
59003 #endif
59004 #ifdef WOLFSSL_KEIL
59005         "muls	r6, r5, r6\n\t"
59006 #elif defined(__clang__)
59007         "muls	r6, r5\n\t"
59008 #else
59009         "mul	r6, r5\n\t"
59010 #endif
59011 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59012         "adds	r3, r3, r6\n\t"
59013 #else
59014         "add	r3, r3, r6\n\t"
59015 #endif
59016 #ifdef WOLFSSL_KEIL
59017         "adcs	r4, r4, %[r]\n\t"
59018 #elif defined(__clang__)
59019         "adcs	r4, %[r]\n\t"
59020 #else
59021         "adc	r4, %[r]\n\t"
59022 #endif
59023 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59024         "adds	r3, r3, r6\n\t"
59025 #else
59026         "add	r3, r3, r6\n\t"
59027 #endif
59028 #ifdef WOLFSSL_KEIL
59029         "adcs	r4, r4, %[r]\n\t"
59030 #elif defined(__clang__)
59031         "adcs	r4, %[r]\n\t"
59032 #else
59033         "adc	r4, %[r]\n\t"
59034 #endif
59035         "uxth	r6, r7\n\t"
59036 #ifdef WOLFSSL_KEIL
59037         "muls	r5, r6, r5\n\t"
59038 #elif defined(__clang__)
59039         "muls	r5, r6\n\t"
59040 #else
59041         "mul	r5, r6\n\t"
59042 #endif
59043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59044         "lsrs	r6, r5, #16\n\t"
59045 #else
59046         "lsr	r6, r5, #16\n\t"
59047 #endif
59048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59049         "lsls	r5, r5, #16\n\t"
59050 #else
59051         "lsl	r5, r5, #16\n\t"
59052 #endif
59053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59054         "adds	r2, r2, r5\n\t"
59055 #else
59056         "add	r2, r2, r5\n\t"
59057 #endif
59058 #ifdef WOLFSSL_KEIL
59059         "adcs	r3, r3, r6\n\t"
59060 #elif defined(__clang__)
59061         "adcs	r3, r6\n\t"
59062 #else
59063         "adc	r3, r6\n\t"
59064 #endif
59065 #ifdef WOLFSSL_KEIL
59066         "adcs	r4, r4, %[r]\n\t"
59067 #elif defined(__clang__)
59068         "adcs	r4, %[r]\n\t"
59069 #else
59070         "adc	r4, %[r]\n\t"
59071 #endif
59072 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59073         "adds	r2, r2, r5\n\t"
59074 #else
59075         "add	r2, r2, r5\n\t"
59076 #endif
59077 #ifdef WOLFSSL_KEIL
59078         "adcs	r3, r3, r6\n\t"
59079 #elif defined(__clang__)
59080         "adcs	r3, r6\n\t"
59081 #else
59082         "adc	r3, r6\n\t"
59083 #endif
59084 #ifdef WOLFSSL_KEIL
59085         "adcs	r4, r4, %[r]\n\t"
59086 #elif defined(__clang__)
59087         "adcs	r4, %[r]\n\t"
59088 #else
59089         "adc	r4, %[r]\n\t"
59090 #endif
59091         "#  A[10] * A[2]\n\t"
59092         "mov	%[a], r9\n\t"
59093         "mov	r7, r12\n\t"
59094         "ldr	%[a], [%[a], #40]\n\t"
59095         "uxth	r5, %[a]\n\t"
59096         "uxth	r6, r7\n\t"
59097 #ifdef WOLFSSL_KEIL
59098         "muls	r6, r5, r6\n\t"
59099 #elif defined(__clang__)
59100         "muls	r6, r5\n\t"
59101 #else
59102         "mul	r6, r5\n\t"
59103 #endif
59104 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59105         "adds	r2, r2, r6\n\t"
59106 #else
59107         "add	r2, r2, r6\n\t"
59108 #endif
59109 #ifdef WOLFSSL_KEIL
59110         "adcs	r3, r3, %[r]\n\t"
59111 #elif defined(__clang__)
59112         "adcs	r3, %[r]\n\t"
59113 #else
59114         "adc	r3, %[r]\n\t"
59115 #endif
59116 #ifdef WOLFSSL_KEIL
59117         "adcs	r4, r4, %[r]\n\t"
59118 #elif defined(__clang__)
59119         "adcs	r4, %[r]\n\t"
59120 #else
59121         "adc	r4, %[r]\n\t"
59122 #endif
59123 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59124         "adds	r2, r2, r6\n\t"
59125 #else
59126         "add	r2, r2, r6\n\t"
59127 #endif
59128 #ifdef WOLFSSL_KEIL
59129         "adcs	r3, r3, %[r]\n\t"
59130 #elif defined(__clang__)
59131         "adcs	r3, %[r]\n\t"
59132 #else
59133         "adc	r3, %[r]\n\t"
59134 #endif
59135 #ifdef WOLFSSL_KEIL
59136         "adcs	r4, r4, %[r]\n\t"
59137 #elif defined(__clang__)
59138         "adcs	r4, %[r]\n\t"
59139 #else
59140         "adc	r4, %[r]\n\t"
59141 #endif
59142 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59143         "lsrs	r6, r7, #16\n\t"
59144 #else
59145         "lsr	r6, r7, #16\n\t"
59146 #endif
59147 #ifdef WOLFSSL_KEIL
59148         "muls	r5, r6, r5\n\t"
59149 #elif defined(__clang__)
59150         "muls	r5, r6\n\t"
59151 #else
59152         "mul	r5, r6\n\t"
59153 #endif
59154 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59155         "lsrs	r6, r5, #16\n\t"
59156 #else
59157         "lsr	r6, r5, #16\n\t"
59158 #endif
59159 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59160         "lsls	r5, r5, #16\n\t"
59161 #else
59162         "lsl	r5, r5, #16\n\t"
59163 #endif
59164 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59165         "adds	r2, r2, r5\n\t"
59166 #else
59167         "add	r2, r2, r5\n\t"
59168 #endif
59169 #ifdef WOLFSSL_KEIL
59170         "adcs	r3, r3, r6\n\t"
59171 #elif defined(__clang__)
59172         "adcs	r3, r6\n\t"
59173 #else
59174         "adc	r3, r6\n\t"
59175 #endif
59176 #ifdef WOLFSSL_KEIL
59177         "adcs	r4, r4, %[r]\n\t"
59178 #elif defined(__clang__)
59179         "adcs	r4, %[r]\n\t"
59180 #else
59181         "adc	r4, %[r]\n\t"
59182 #endif
59183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59184         "adds	r2, r2, r5\n\t"
59185 #else
59186         "add	r2, r2, r5\n\t"
59187 #endif
59188 #ifdef WOLFSSL_KEIL
59189         "adcs	r3, r3, r6\n\t"
59190 #elif defined(__clang__)
59191         "adcs	r3, r6\n\t"
59192 #else
59193         "adc	r3, r6\n\t"
59194 #endif
59195 #ifdef WOLFSSL_KEIL
59196         "adcs	r4, r4, %[r]\n\t"
59197 #elif defined(__clang__)
59198         "adcs	r4, %[r]\n\t"
59199 #else
59200         "adc	r4, %[r]\n\t"
59201 #endif
59202 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59203         "lsrs	r5, %[a], #16\n\t"
59204 #else
59205         "lsr	r5, %[a], #16\n\t"
59206 #endif
59207 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59208         "lsrs	r6, r7, #16\n\t"
59209 #else
59210         "lsr	r6, r7, #16\n\t"
59211 #endif
59212 #ifdef WOLFSSL_KEIL
59213         "muls	r6, r5, r6\n\t"
59214 #elif defined(__clang__)
59215         "muls	r6, r5\n\t"
59216 #else
59217         "mul	r6, r5\n\t"
59218 #endif
59219 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59220         "adds	r3, r3, r6\n\t"
59221 #else
59222         "add	r3, r3, r6\n\t"
59223 #endif
59224 #ifdef WOLFSSL_KEIL
59225         "adcs	r4, r4, %[r]\n\t"
59226 #elif defined(__clang__)
59227         "adcs	r4, %[r]\n\t"
59228 #else
59229         "adc	r4, %[r]\n\t"
59230 #endif
59231 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59232         "adds	r3, r3, r6\n\t"
59233 #else
59234         "add	r3, r3, r6\n\t"
59235 #endif
59236 #ifdef WOLFSSL_KEIL
59237         "adcs	r4, r4, %[r]\n\t"
59238 #elif defined(__clang__)
59239         "adcs	r4, %[r]\n\t"
59240 #else
59241         "adc	r4, %[r]\n\t"
59242 #endif
59243         "uxth	r6, r7\n\t"
59244 #ifdef WOLFSSL_KEIL
59245         "muls	r5, r6, r5\n\t"
59246 #elif defined(__clang__)
59247         "muls	r5, r6\n\t"
59248 #else
59249         "mul	r5, r6\n\t"
59250 #endif
59251 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59252         "lsrs	r6, r5, #16\n\t"
59253 #else
59254         "lsr	r6, r5, #16\n\t"
59255 #endif
59256 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59257         "lsls	r5, r5, #16\n\t"
59258 #else
59259         "lsl	r5, r5, #16\n\t"
59260 #endif
59261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59262         "adds	r2, r2, r5\n\t"
59263 #else
59264         "add	r2, r2, r5\n\t"
59265 #endif
59266 #ifdef WOLFSSL_KEIL
59267         "adcs	r3, r3, r6\n\t"
59268 #elif defined(__clang__)
59269         "adcs	r3, r6\n\t"
59270 #else
59271         "adc	r3, r6\n\t"
59272 #endif
59273 #ifdef WOLFSSL_KEIL
59274         "adcs	r4, r4, %[r]\n\t"
59275 #elif defined(__clang__)
59276         "adcs	r4, %[r]\n\t"
59277 #else
59278         "adc	r4, %[r]\n\t"
59279 #endif
59280 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59281         "adds	r2, r2, r5\n\t"
59282 #else
59283         "add	r2, r2, r5\n\t"
59284 #endif
59285 #ifdef WOLFSSL_KEIL
59286         "adcs	r3, r3, r6\n\t"
59287 #elif defined(__clang__)
59288         "adcs	r3, r6\n\t"
59289 #else
59290         "adc	r3, r6\n\t"
59291 #endif
59292 #ifdef WOLFSSL_KEIL
59293         "adcs	r4, r4, %[r]\n\t"
59294 #elif defined(__clang__)
59295         "adcs	r4, %[r]\n\t"
59296 #else
59297         "adc	r4, %[r]\n\t"
59298 #endif
59299         "#  A[9] * A[3]\n\t"
59300         "mov	%[a], r9\n\t"
59301         "mov	r7, lr\n\t"
59302         "ldr	%[a], [%[a], #36]\n\t"
59303         "uxth	r5, %[a]\n\t"
59304         "uxth	r6, r7\n\t"
59305 #ifdef WOLFSSL_KEIL
59306         "muls	r6, r5, r6\n\t"
59307 #elif defined(__clang__)
59308         "muls	r6, r5\n\t"
59309 #else
59310         "mul	r6, r5\n\t"
59311 #endif
59312 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59313         "adds	r2, r2, r6\n\t"
59314 #else
59315         "add	r2, r2, r6\n\t"
59316 #endif
59317 #ifdef WOLFSSL_KEIL
59318         "adcs	r3, r3, %[r]\n\t"
59319 #elif defined(__clang__)
59320         "adcs	r3, %[r]\n\t"
59321 #else
59322         "adc	r3, %[r]\n\t"
59323 #endif
59324 #ifdef WOLFSSL_KEIL
59325         "adcs	r4, r4, %[r]\n\t"
59326 #elif defined(__clang__)
59327         "adcs	r4, %[r]\n\t"
59328 #else
59329         "adc	r4, %[r]\n\t"
59330 #endif
59331 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59332         "adds	r2, r2, r6\n\t"
59333 #else
59334         "add	r2, r2, r6\n\t"
59335 #endif
59336 #ifdef WOLFSSL_KEIL
59337         "adcs	r3, r3, %[r]\n\t"
59338 #elif defined(__clang__)
59339         "adcs	r3, %[r]\n\t"
59340 #else
59341         "adc	r3, %[r]\n\t"
59342 #endif
59343 #ifdef WOLFSSL_KEIL
59344         "adcs	r4, r4, %[r]\n\t"
59345 #elif defined(__clang__)
59346         "adcs	r4, %[r]\n\t"
59347 #else
59348         "adc	r4, %[r]\n\t"
59349 #endif
59350 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59351         "lsrs	r6, r7, #16\n\t"
59352 #else
59353         "lsr	r6, r7, #16\n\t"
59354 #endif
59355 #ifdef WOLFSSL_KEIL
59356         "muls	r5, r6, r5\n\t"
59357 #elif defined(__clang__)
59358         "muls	r5, r6\n\t"
59359 #else
59360         "mul	r5, r6\n\t"
59361 #endif
59362 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59363         "lsrs	r6, r5, #16\n\t"
59364 #else
59365         "lsr	r6, r5, #16\n\t"
59366 #endif
59367 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59368         "lsls	r5, r5, #16\n\t"
59369 #else
59370         "lsl	r5, r5, #16\n\t"
59371 #endif
59372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59373         "adds	r2, r2, r5\n\t"
59374 #else
59375         "add	r2, r2, r5\n\t"
59376 #endif
59377 #ifdef WOLFSSL_KEIL
59378         "adcs	r3, r3, r6\n\t"
59379 #elif defined(__clang__)
59380         "adcs	r3, r6\n\t"
59381 #else
59382         "adc	r3, r6\n\t"
59383 #endif
59384 #ifdef WOLFSSL_KEIL
59385         "adcs	r4, r4, %[r]\n\t"
59386 #elif defined(__clang__)
59387         "adcs	r4, %[r]\n\t"
59388 #else
59389         "adc	r4, %[r]\n\t"
59390 #endif
59391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59392         "adds	r2, r2, r5\n\t"
59393 #else
59394         "add	r2, r2, r5\n\t"
59395 #endif
59396 #ifdef WOLFSSL_KEIL
59397         "adcs	r3, r3, r6\n\t"
59398 #elif defined(__clang__)
59399         "adcs	r3, r6\n\t"
59400 #else
59401         "adc	r3, r6\n\t"
59402 #endif
59403 #ifdef WOLFSSL_KEIL
59404         "adcs	r4, r4, %[r]\n\t"
59405 #elif defined(__clang__)
59406         "adcs	r4, %[r]\n\t"
59407 #else
59408         "adc	r4, %[r]\n\t"
59409 #endif
59410 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59411         "lsrs	r5, %[a], #16\n\t"
59412 #else
59413         "lsr	r5, %[a], #16\n\t"
59414 #endif
59415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59416         "lsrs	r6, r7, #16\n\t"
59417 #else
59418         "lsr	r6, r7, #16\n\t"
59419 #endif
59420 #ifdef WOLFSSL_KEIL
59421         "muls	r6, r5, r6\n\t"
59422 #elif defined(__clang__)
59423         "muls	r6, r5\n\t"
59424 #else
59425         "mul	r6, r5\n\t"
59426 #endif
59427 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59428         "adds	r3, r3, r6\n\t"
59429 #else
59430         "add	r3, r3, r6\n\t"
59431 #endif
59432 #ifdef WOLFSSL_KEIL
59433         "adcs	r4, r4, %[r]\n\t"
59434 #elif defined(__clang__)
59435         "adcs	r4, %[r]\n\t"
59436 #else
59437         "adc	r4, %[r]\n\t"
59438 #endif
59439 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59440         "adds	r3, r3, r6\n\t"
59441 #else
59442         "add	r3, r3, r6\n\t"
59443 #endif
59444 #ifdef WOLFSSL_KEIL
59445         "adcs	r4, r4, %[r]\n\t"
59446 #elif defined(__clang__)
59447         "adcs	r4, %[r]\n\t"
59448 #else
59449         "adc	r4, %[r]\n\t"
59450 #endif
59451         "uxth	r6, r7\n\t"
59452 #ifdef WOLFSSL_KEIL
59453         "muls	r5, r6, r5\n\t"
59454 #elif defined(__clang__)
59455         "muls	r5, r6\n\t"
59456 #else
59457         "mul	r5, r6\n\t"
59458 #endif
59459 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59460         "lsrs	r6, r5, #16\n\t"
59461 #else
59462         "lsr	r6, r5, #16\n\t"
59463 #endif
59464 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59465         "lsls	r5, r5, #16\n\t"
59466 #else
59467         "lsl	r5, r5, #16\n\t"
59468 #endif
59469 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59470         "adds	r2, r2, r5\n\t"
59471 #else
59472         "add	r2, r2, r5\n\t"
59473 #endif
59474 #ifdef WOLFSSL_KEIL
59475         "adcs	r3, r3, r6\n\t"
59476 #elif defined(__clang__)
59477         "adcs	r3, r6\n\t"
59478 #else
59479         "adc	r3, r6\n\t"
59480 #endif
59481 #ifdef WOLFSSL_KEIL
59482         "adcs	r4, r4, %[r]\n\t"
59483 #elif defined(__clang__)
59484         "adcs	r4, %[r]\n\t"
59485 #else
59486         "adc	r4, %[r]\n\t"
59487 #endif
59488 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59489         "adds	r2, r2, r5\n\t"
59490 #else
59491         "add	r2, r2, r5\n\t"
59492 #endif
59493 #ifdef WOLFSSL_KEIL
59494         "adcs	r3, r3, r6\n\t"
59495 #elif defined(__clang__)
59496         "adcs	r3, r6\n\t"
59497 #else
59498         "adc	r3, r6\n\t"
59499 #endif
59500 #ifdef WOLFSSL_KEIL
59501         "adcs	r4, r4, %[r]\n\t"
59502 #elif defined(__clang__)
59503         "adcs	r4, %[r]\n\t"
59504 #else
59505         "adc	r4, %[r]\n\t"
59506 #endif
59507         "#  A[8] * A[4]\n\t"
59508         "mov	%[a], r9\n\t"
59509         "ldr	r7, [%[a], #16]\n\t"
59510         "ldr	%[a], [%[a], #32]\n\t"
59511         "uxth	r5, %[a]\n\t"
59512         "uxth	r6, r7\n\t"
59513 #ifdef WOLFSSL_KEIL
59514         "muls	r6, r5, r6\n\t"
59515 #elif defined(__clang__)
59516         "muls	r6, r5\n\t"
59517 #else
59518         "mul	r6, r5\n\t"
59519 #endif
59520 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59521         "adds	r2, r2, r6\n\t"
59522 #else
59523         "add	r2, r2, r6\n\t"
59524 #endif
59525 #ifdef WOLFSSL_KEIL
59526         "adcs	r3, r3, %[r]\n\t"
59527 #elif defined(__clang__)
59528         "adcs	r3, %[r]\n\t"
59529 #else
59530         "adc	r3, %[r]\n\t"
59531 #endif
59532 #ifdef WOLFSSL_KEIL
59533         "adcs	r4, r4, %[r]\n\t"
59534 #elif defined(__clang__)
59535         "adcs	r4, %[r]\n\t"
59536 #else
59537         "adc	r4, %[r]\n\t"
59538 #endif
59539 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59540         "adds	r2, r2, r6\n\t"
59541 #else
59542         "add	r2, r2, r6\n\t"
59543 #endif
59544 #ifdef WOLFSSL_KEIL
59545         "adcs	r3, r3, %[r]\n\t"
59546 #elif defined(__clang__)
59547         "adcs	r3, %[r]\n\t"
59548 #else
59549         "adc	r3, %[r]\n\t"
59550 #endif
59551 #ifdef WOLFSSL_KEIL
59552         "adcs	r4, r4, %[r]\n\t"
59553 #elif defined(__clang__)
59554         "adcs	r4, %[r]\n\t"
59555 #else
59556         "adc	r4, %[r]\n\t"
59557 #endif
59558 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59559         "lsrs	r6, r7, #16\n\t"
59560 #else
59561         "lsr	r6, r7, #16\n\t"
59562 #endif
59563 #ifdef WOLFSSL_KEIL
59564         "muls	r5, r6, r5\n\t"
59565 #elif defined(__clang__)
59566         "muls	r5, r6\n\t"
59567 #else
59568         "mul	r5, r6\n\t"
59569 #endif
59570 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59571         "lsrs	r6, r5, #16\n\t"
59572 #else
59573         "lsr	r6, r5, #16\n\t"
59574 #endif
59575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59576         "lsls	r5, r5, #16\n\t"
59577 #else
59578         "lsl	r5, r5, #16\n\t"
59579 #endif
59580 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59581         "adds	r2, r2, r5\n\t"
59582 #else
59583         "add	r2, r2, r5\n\t"
59584 #endif
59585 #ifdef WOLFSSL_KEIL
59586         "adcs	r3, r3, r6\n\t"
59587 #elif defined(__clang__)
59588         "adcs	r3, r6\n\t"
59589 #else
59590         "adc	r3, r6\n\t"
59591 #endif
59592 #ifdef WOLFSSL_KEIL
59593         "adcs	r4, r4, %[r]\n\t"
59594 #elif defined(__clang__)
59595         "adcs	r4, %[r]\n\t"
59596 #else
59597         "adc	r4, %[r]\n\t"
59598 #endif
59599 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59600         "adds	r2, r2, r5\n\t"
59601 #else
59602         "add	r2, r2, r5\n\t"
59603 #endif
59604 #ifdef WOLFSSL_KEIL
59605         "adcs	r3, r3, r6\n\t"
59606 #elif defined(__clang__)
59607         "adcs	r3, r6\n\t"
59608 #else
59609         "adc	r3, r6\n\t"
59610 #endif
59611 #ifdef WOLFSSL_KEIL
59612         "adcs	r4, r4, %[r]\n\t"
59613 #elif defined(__clang__)
59614         "adcs	r4, %[r]\n\t"
59615 #else
59616         "adc	r4, %[r]\n\t"
59617 #endif
59618 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59619         "lsrs	r5, %[a], #16\n\t"
59620 #else
59621         "lsr	r5, %[a], #16\n\t"
59622 #endif
59623 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59624         "lsrs	r6, r7, #16\n\t"
59625 #else
59626         "lsr	r6, r7, #16\n\t"
59627 #endif
59628 #ifdef WOLFSSL_KEIL
59629         "muls	r6, r5, r6\n\t"
59630 #elif defined(__clang__)
59631         "muls	r6, r5\n\t"
59632 #else
59633         "mul	r6, r5\n\t"
59634 #endif
59635 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59636         "adds	r3, r3, r6\n\t"
59637 #else
59638         "add	r3, r3, r6\n\t"
59639 #endif
59640 #ifdef WOLFSSL_KEIL
59641         "adcs	r4, r4, %[r]\n\t"
59642 #elif defined(__clang__)
59643         "adcs	r4, %[r]\n\t"
59644 #else
59645         "adc	r4, %[r]\n\t"
59646 #endif
59647 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59648         "adds	r3, r3, r6\n\t"
59649 #else
59650         "add	r3, r3, r6\n\t"
59651 #endif
59652 #ifdef WOLFSSL_KEIL
59653         "adcs	r4, r4, %[r]\n\t"
59654 #elif defined(__clang__)
59655         "adcs	r4, %[r]\n\t"
59656 #else
59657         "adc	r4, %[r]\n\t"
59658 #endif
59659         "uxth	r6, r7\n\t"
59660 #ifdef WOLFSSL_KEIL
59661         "muls	r5, r6, r5\n\t"
59662 #elif defined(__clang__)
59663         "muls	r5, r6\n\t"
59664 #else
59665         "mul	r5, r6\n\t"
59666 #endif
59667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59668         "lsrs	r6, r5, #16\n\t"
59669 #else
59670         "lsr	r6, r5, #16\n\t"
59671 #endif
59672 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59673         "lsls	r5, r5, #16\n\t"
59674 #else
59675         "lsl	r5, r5, #16\n\t"
59676 #endif
59677 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59678         "adds	r2, r2, r5\n\t"
59679 #else
59680         "add	r2, r2, r5\n\t"
59681 #endif
59682 #ifdef WOLFSSL_KEIL
59683         "adcs	r3, r3, r6\n\t"
59684 #elif defined(__clang__)
59685         "adcs	r3, r6\n\t"
59686 #else
59687         "adc	r3, r6\n\t"
59688 #endif
59689 #ifdef WOLFSSL_KEIL
59690         "adcs	r4, r4, %[r]\n\t"
59691 #elif defined(__clang__)
59692         "adcs	r4, %[r]\n\t"
59693 #else
59694         "adc	r4, %[r]\n\t"
59695 #endif
59696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59697         "adds	r2, r2, r5\n\t"
59698 #else
59699         "add	r2, r2, r5\n\t"
59700 #endif
59701 #ifdef WOLFSSL_KEIL
59702         "adcs	r3, r3, r6\n\t"
59703 #elif defined(__clang__)
59704         "adcs	r3, r6\n\t"
59705 #else
59706         "adc	r3, r6\n\t"
59707 #endif
59708 #ifdef WOLFSSL_KEIL
59709         "adcs	r4, r4, %[r]\n\t"
59710 #elif defined(__clang__)
59711         "adcs	r4, %[r]\n\t"
59712 #else
59713         "adc	r4, %[r]\n\t"
59714 #endif
59715         "#  A[7] * A[5]\n\t"
59716         "mov	%[a], r9\n\t"
59717         "ldr	r7, [%[a], #20]\n\t"
59718         "ldr	%[a], [%[a], #28]\n\t"
59719         "uxth	r5, %[a]\n\t"
59720         "uxth	r6, r7\n\t"
59721 #ifdef WOLFSSL_KEIL
59722         "muls	r6, r5, r6\n\t"
59723 #elif defined(__clang__)
59724         "muls	r6, r5\n\t"
59725 #else
59726         "mul	r6, r5\n\t"
59727 #endif
59728 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59729         "adds	r2, r2, r6\n\t"
59730 #else
59731         "add	r2, r2, r6\n\t"
59732 #endif
59733 #ifdef WOLFSSL_KEIL
59734         "adcs	r3, r3, %[r]\n\t"
59735 #elif defined(__clang__)
59736         "adcs	r3, %[r]\n\t"
59737 #else
59738         "adc	r3, %[r]\n\t"
59739 #endif
59740 #ifdef WOLFSSL_KEIL
59741         "adcs	r4, r4, %[r]\n\t"
59742 #elif defined(__clang__)
59743         "adcs	r4, %[r]\n\t"
59744 #else
59745         "adc	r4, %[r]\n\t"
59746 #endif
59747 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59748         "adds	r2, r2, r6\n\t"
59749 #else
59750         "add	r2, r2, r6\n\t"
59751 #endif
59752 #ifdef WOLFSSL_KEIL
59753         "adcs	r3, r3, %[r]\n\t"
59754 #elif defined(__clang__)
59755         "adcs	r3, %[r]\n\t"
59756 #else
59757         "adc	r3, %[r]\n\t"
59758 #endif
59759 #ifdef WOLFSSL_KEIL
59760         "adcs	r4, r4, %[r]\n\t"
59761 #elif defined(__clang__)
59762         "adcs	r4, %[r]\n\t"
59763 #else
59764         "adc	r4, %[r]\n\t"
59765 #endif
59766 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59767         "lsrs	r6, r7, #16\n\t"
59768 #else
59769         "lsr	r6, r7, #16\n\t"
59770 #endif
59771 #ifdef WOLFSSL_KEIL
59772         "muls	r5, r6, r5\n\t"
59773 #elif defined(__clang__)
59774         "muls	r5, r6\n\t"
59775 #else
59776         "mul	r5, r6\n\t"
59777 #endif
59778 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59779         "lsrs	r6, r5, #16\n\t"
59780 #else
59781         "lsr	r6, r5, #16\n\t"
59782 #endif
59783 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59784         "lsls	r5, r5, #16\n\t"
59785 #else
59786         "lsl	r5, r5, #16\n\t"
59787 #endif
59788 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59789         "adds	r2, r2, r5\n\t"
59790 #else
59791         "add	r2, r2, r5\n\t"
59792 #endif
59793 #ifdef WOLFSSL_KEIL
59794         "adcs	r3, r3, r6\n\t"
59795 #elif defined(__clang__)
59796         "adcs	r3, r6\n\t"
59797 #else
59798         "adc	r3, r6\n\t"
59799 #endif
59800 #ifdef WOLFSSL_KEIL
59801         "adcs	r4, r4, %[r]\n\t"
59802 #elif defined(__clang__)
59803         "adcs	r4, %[r]\n\t"
59804 #else
59805         "adc	r4, %[r]\n\t"
59806 #endif
59807 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59808         "adds	r2, r2, r5\n\t"
59809 #else
59810         "add	r2, r2, r5\n\t"
59811 #endif
59812 #ifdef WOLFSSL_KEIL
59813         "adcs	r3, r3, r6\n\t"
59814 #elif defined(__clang__)
59815         "adcs	r3, r6\n\t"
59816 #else
59817         "adc	r3, r6\n\t"
59818 #endif
59819 #ifdef WOLFSSL_KEIL
59820         "adcs	r4, r4, %[r]\n\t"
59821 #elif defined(__clang__)
59822         "adcs	r4, %[r]\n\t"
59823 #else
59824         "adc	r4, %[r]\n\t"
59825 #endif
59826 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59827         "lsrs	r5, %[a], #16\n\t"
59828 #else
59829         "lsr	r5, %[a], #16\n\t"
59830 #endif
59831 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59832         "lsrs	r6, r7, #16\n\t"
59833 #else
59834         "lsr	r6, r7, #16\n\t"
59835 #endif
59836 #ifdef WOLFSSL_KEIL
59837         "muls	r6, r5, r6\n\t"
59838 #elif defined(__clang__)
59839         "muls	r6, r5\n\t"
59840 #else
59841         "mul	r6, r5\n\t"
59842 #endif
59843 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59844         "adds	r3, r3, r6\n\t"
59845 #else
59846         "add	r3, r3, r6\n\t"
59847 #endif
59848 #ifdef WOLFSSL_KEIL
59849         "adcs	r4, r4, %[r]\n\t"
59850 #elif defined(__clang__)
59851         "adcs	r4, %[r]\n\t"
59852 #else
59853         "adc	r4, %[r]\n\t"
59854 #endif
59855 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59856         "adds	r3, r3, r6\n\t"
59857 #else
59858         "add	r3, r3, r6\n\t"
59859 #endif
59860 #ifdef WOLFSSL_KEIL
59861         "adcs	r4, r4, %[r]\n\t"
59862 #elif defined(__clang__)
59863         "adcs	r4, %[r]\n\t"
59864 #else
59865         "adc	r4, %[r]\n\t"
59866 #endif
59867         "uxth	r6, r7\n\t"
59868 #ifdef WOLFSSL_KEIL
59869         "muls	r5, r6, r5\n\t"
59870 #elif defined(__clang__)
59871         "muls	r5, r6\n\t"
59872 #else
59873         "mul	r5, r6\n\t"
59874 #endif
59875 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59876         "lsrs	r6, r5, #16\n\t"
59877 #else
59878         "lsr	r6, r5, #16\n\t"
59879 #endif
59880 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59881         "lsls	r5, r5, #16\n\t"
59882 #else
59883         "lsl	r5, r5, #16\n\t"
59884 #endif
59885 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59886         "adds	r2, r2, r5\n\t"
59887 #else
59888         "add	r2, r2, r5\n\t"
59889 #endif
59890 #ifdef WOLFSSL_KEIL
59891         "adcs	r3, r3, r6\n\t"
59892 #elif defined(__clang__)
59893         "adcs	r3, r6\n\t"
59894 #else
59895         "adc	r3, r6\n\t"
59896 #endif
59897 #ifdef WOLFSSL_KEIL
59898         "adcs	r4, r4, %[r]\n\t"
59899 #elif defined(__clang__)
59900         "adcs	r4, %[r]\n\t"
59901 #else
59902         "adc	r4, %[r]\n\t"
59903 #endif
59904 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59905         "adds	r2, r2, r5\n\t"
59906 #else
59907         "add	r2, r2, r5\n\t"
59908 #endif
59909 #ifdef WOLFSSL_KEIL
59910         "adcs	r3, r3, r6\n\t"
59911 #elif defined(__clang__)
59912         "adcs	r3, r6\n\t"
59913 #else
59914         "adc	r3, r6\n\t"
59915 #endif
59916 #ifdef WOLFSSL_KEIL
59917         "adcs	r4, r4, %[r]\n\t"
59918 #elif defined(__clang__)
59919         "adcs	r4, %[r]\n\t"
59920 #else
59921         "adc	r4, %[r]\n\t"
59922 #endif
59923         "#  A[6] * A[6]\n\t"
59924         "mov	%[a], r9\n\t"
59925         "ldr	r7, [%[a], #24]\n\t"
59926 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59927         "lsrs	r6, r7, #16\n\t"
59928 #else
59929         "lsr	r6, r7, #16\n\t"
59930 #endif
59931         "uxth	r5, r7\n\t"
59932 #ifdef WOLFSSL_KEIL
59933         "muls	r5, r5, r5\n\t"
59934 #elif defined(__clang__)
59935         "muls	r5, r5\n\t"
59936 #else
59937         "mul	r5, r5\n\t"
59938 #endif
59939 #ifdef WOLFSSL_KEIL
59940         "muls	r6, r6, r6\n\t"
59941 #elif defined(__clang__)
59942         "muls	r6, r6\n\t"
59943 #else
59944         "mul	r6, r6\n\t"
59945 #endif
59946 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59947         "adds	r2, r2, r5\n\t"
59948 #else
59949         "add	r2, r2, r5\n\t"
59950 #endif
59951 #ifdef WOLFSSL_KEIL
59952         "adcs	r3, r3, r6\n\t"
59953 #elif defined(__clang__)
59954         "adcs	r3, r6\n\t"
59955 #else
59956         "adc	r3, r6\n\t"
59957 #endif
59958 #ifdef WOLFSSL_KEIL
59959         "adcs	r4, r4, %[r]\n\t"
59960 #elif defined(__clang__)
59961         "adcs	r4, %[r]\n\t"
59962 #else
59963         "adc	r4, %[r]\n\t"
59964 #endif
59965 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59966         "lsrs	r6, r7, #16\n\t"
59967 #else
59968         "lsr	r6, r7, #16\n\t"
59969 #endif
59970         "uxth	r5, r7\n\t"
59971 #ifdef WOLFSSL_KEIL
59972         "muls	r5, r6, r5\n\t"
59973 #elif defined(__clang__)
59974         "muls	r5, r6\n\t"
59975 #else
59976         "mul	r5, r6\n\t"
59977 #endif
59978 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59979         "lsrs	r6, r5, #15\n\t"
59980 #else
59981         "lsr	r6, r5, #15\n\t"
59982 #endif
59983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59984         "lsls	r5, r5, #17\n\t"
59985 #else
59986         "lsl	r5, r5, #17\n\t"
59987 #endif
59988 #if defined(__clang__) || defined(WOLFSSL_KEIL)
59989         "adds	r2, r2, r5\n\t"
59990 #else
59991         "add	r2, r2, r5\n\t"
59992 #endif
59993 #ifdef WOLFSSL_KEIL
59994         "adcs	r3, r3, r6\n\t"
59995 #elif defined(__clang__)
59996         "adcs	r3, r6\n\t"
59997 #else
59998         "adc	r3, r6\n\t"
59999 #endif
60000 #ifdef WOLFSSL_KEIL
60001         "adcs	r4, r4, %[r]\n\t"
60002 #elif defined(__clang__)
60003         "adcs	r4, %[r]\n\t"
60004 #else
60005         "adc	r4, %[r]\n\t"
60006 #endif
60007         "mov	%[r], r8\n\t"
60008         "str	r2, [%[r], #48]\n\t"
60009         "movs	%[r], #0\n\t"
60010         "movs	%[a], #32\n\t"
60011         "add	%[a], %[a], r9\n\t"
60012         "ldm	%[a]!, {r5, r6}\n\t"
60013         "mov	r10, r5\n\t"
60014         "mov	r11, r6\n\t"
60015         "ldm	%[a]!, {r5, r6}\n\t"
60016         "mov	r12, r5\n\t"
60017         "mov	lr, r6\n\t"
60018         "mov	%[a], r9\n\t"
60019         "#  A[7] * A[6]\n\t"
60020         "movs	r2, #0\n\t"
60021         "ldr	%[a], [%[a], #28]\n\t"
60022         "uxth	r5, %[a]\n\t"
60023         "uxth	r6, r7\n\t"
60024 #ifdef WOLFSSL_KEIL
60025         "muls	r6, r5, r6\n\t"
60026 #elif defined(__clang__)
60027         "muls	r6, r5\n\t"
60028 #else
60029         "mul	r6, r5\n\t"
60030 #endif
60031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60032         "adds	r3, r3, r6\n\t"
60033 #else
60034         "add	r3, r3, r6\n\t"
60035 #endif
60036 #ifdef WOLFSSL_KEIL
60037         "adcs	r4, r4, %[r]\n\t"
60038 #elif defined(__clang__)
60039         "adcs	r4, %[r]\n\t"
60040 #else
60041         "adc	r4, %[r]\n\t"
60042 #endif
60043 #ifdef WOLFSSL_KEIL
60044         "adcs	r2, r2, %[r]\n\t"
60045 #elif defined(__clang__)
60046         "adcs	r2, %[r]\n\t"
60047 #else
60048         "adc	r2, %[r]\n\t"
60049 #endif
60050 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60051         "adds	r3, r3, r6\n\t"
60052 #else
60053         "add	r3, r3, r6\n\t"
60054 #endif
60055 #ifdef WOLFSSL_KEIL
60056         "adcs	r4, r4, %[r]\n\t"
60057 #elif defined(__clang__)
60058         "adcs	r4, %[r]\n\t"
60059 #else
60060         "adc	r4, %[r]\n\t"
60061 #endif
60062 #ifdef WOLFSSL_KEIL
60063         "adcs	r2, r2, %[r]\n\t"
60064 #elif defined(__clang__)
60065         "adcs	r2, %[r]\n\t"
60066 #else
60067         "adc	r2, %[r]\n\t"
60068 #endif
60069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60070         "lsrs	r6, r7, #16\n\t"
60071 #else
60072         "lsr	r6, r7, #16\n\t"
60073 #endif
60074 #ifdef WOLFSSL_KEIL
60075         "muls	r5, r6, r5\n\t"
60076 #elif defined(__clang__)
60077         "muls	r5, r6\n\t"
60078 #else
60079         "mul	r5, r6\n\t"
60080 #endif
60081 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60082         "lsrs	r6, r5, #16\n\t"
60083 #else
60084         "lsr	r6, r5, #16\n\t"
60085 #endif
60086 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60087         "lsls	r5, r5, #16\n\t"
60088 #else
60089         "lsl	r5, r5, #16\n\t"
60090 #endif
60091 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60092         "adds	r3, r3, r5\n\t"
60093 #else
60094         "add	r3, r3, r5\n\t"
60095 #endif
60096 #ifdef WOLFSSL_KEIL
60097         "adcs	r4, r4, r6\n\t"
60098 #elif defined(__clang__)
60099         "adcs	r4, r6\n\t"
60100 #else
60101         "adc	r4, r6\n\t"
60102 #endif
60103 #ifdef WOLFSSL_KEIL
60104         "adcs	r2, r2, %[r]\n\t"
60105 #elif defined(__clang__)
60106         "adcs	r2, %[r]\n\t"
60107 #else
60108         "adc	r2, %[r]\n\t"
60109 #endif
60110 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60111         "adds	r3, r3, r5\n\t"
60112 #else
60113         "add	r3, r3, r5\n\t"
60114 #endif
60115 #ifdef WOLFSSL_KEIL
60116         "adcs	r4, r4, r6\n\t"
60117 #elif defined(__clang__)
60118         "adcs	r4, r6\n\t"
60119 #else
60120         "adc	r4, r6\n\t"
60121 #endif
60122 #ifdef WOLFSSL_KEIL
60123         "adcs	r2, r2, %[r]\n\t"
60124 #elif defined(__clang__)
60125         "adcs	r2, %[r]\n\t"
60126 #else
60127         "adc	r2, %[r]\n\t"
60128 #endif
60129 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60130         "lsrs	r5, %[a], #16\n\t"
60131 #else
60132         "lsr	r5, %[a], #16\n\t"
60133 #endif
60134 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60135         "lsrs	r6, r7, #16\n\t"
60136 #else
60137         "lsr	r6, r7, #16\n\t"
60138 #endif
60139 #ifdef WOLFSSL_KEIL
60140         "muls	r6, r5, r6\n\t"
60141 #elif defined(__clang__)
60142         "muls	r6, r5\n\t"
60143 #else
60144         "mul	r6, r5\n\t"
60145 #endif
60146 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60147         "adds	r4, r4, r6\n\t"
60148 #else
60149         "add	r4, r4, r6\n\t"
60150 #endif
60151 #ifdef WOLFSSL_KEIL
60152         "adcs	r2, r2, %[r]\n\t"
60153 #elif defined(__clang__)
60154         "adcs	r2, %[r]\n\t"
60155 #else
60156         "adc	r2, %[r]\n\t"
60157 #endif
60158 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60159         "adds	r4, r4, r6\n\t"
60160 #else
60161         "add	r4, r4, r6\n\t"
60162 #endif
60163 #ifdef WOLFSSL_KEIL
60164         "adcs	r2, r2, %[r]\n\t"
60165 #elif defined(__clang__)
60166         "adcs	r2, %[r]\n\t"
60167 #else
60168         "adc	r2, %[r]\n\t"
60169 #endif
60170         "uxth	r6, r7\n\t"
60171 #ifdef WOLFSSL_KEIL
60172         "muls	r5, r6, r5\n\t"
60173 #elif defined(__clang__)
60174         "muls	r5, r6\n\t"
60175 #else
60176         "mul	r5, r6\n\t"
60177 #endif
60178 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60179         "lsrs	r6, r5, #16\n\t"
60180 #else
60181         "lsr	r6, r5, #16\n\t"
60182 #endif
60183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60184         "lsls	r5, r5, #16\n\t"
60185 #else
60186         "lsl	r5, r5, #16\n\t"
60187 #endif
60188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60189         "adds	r3, r3, r5\n\t"
60190 #else
60191         "add	r3, r3, r5\n\t"
60192 #endif
60193 #ifdef WOLFSSL_KEIL
60194         "adcs	r4, r4, r6\n\t"
60195 #elif defined(__clang__)
60196         "adcs	r4, r6\n\t"
60197 #else
60198         "adc	r4, r6\n\t"
60199 #endif
60200 #ifdef WOLFSSL_KEIL
60201         "adcs	r2, r2, %[r]\n\t"
60202 #elif defined(__clang__)
60203         "adcs	r2, %[r]\n\t"
60204 #else
60205         "adc	r2, %[r]\n\t"
60206 #endif
60207 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60208         "adds	r3, r3, r5\n\t"
60209 #else
60210         "add	r3, r3, r5\n\t"
60211 #endif
60212 #ifdef WOLFSSL_KEIL
60213         "adcs	r4, r4, r6\n\t"
60214 #elif defined(__clang__)
60215         "adcs	r4, r6\n\t"
60216 #else
60217         "adc	r4, r6\n\t"
60218 #endif
60219 #ifdef WOLFSSL_KEIL
60220         "adcs	r2, r2, %[r]\n\t"
60221 #elif defined(__clang__)
60222         "adcs	r2, %[r]\n\t"
60223 #else
60224         "adc	r2, %[r]\n\t"
60225 #endif
60226         "#  A[8] * A[5]\n\t"
60227         "mov	%[a], r9\n\t"
60228         "ldr	r7, [%[a], #20]\n\t"
60229         "mov	%[a], r10\n\t"
60230         "uxth	r5, %[a]\n\t"
60231         "uxth	r6, r7\n\t"
60232 #ifdef WOLFSSL_KEIL
60233         "muls	r6, r5, r6\n\t"
60234 #elif defined(__clang__)
60235         "muls	r6, r5\n\t"
60236 #else
60237         "mul	r6, r5\n\t"
60238 #endif
60239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60240         "adds	r3, r3, r6\n\t"
60241 #else
60242         "add	r3, r3, r6\n\t"
60243 #endif
60244 #ifdef WOLFSSL_KEIL
60245         "adcs	r4, r4, %[r]\n\t"
60246 #elif defined(__clang__)
60247         "adcs	r4, %[r]\n\t"
60248 #else
60249         "adc	r4, %[r]\n\t"
60250 #endif
60251 #ifdef WOLFSSL_KEIL
60252         "adcs	r2, r2, %[r]\n\t"
60253 #elif defined(__clang__)
60254         "adcs	r2, %[r]\n\t"
60255 #else
60256         "adc	r2, %[r]\n\t"
60257 #endif
60258 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60259         "adds	r3, r3, r6\n\t"
60260 #else
60261         "add	r3, r3, r6\n\t"
60262 #endif
60263 #ifdef WOLFSSL_KEIL
60264         "adcs	r4, r4, %[r]\n\t"
60265 #elif defined(__clang__)
60266         "adcs	r4, %[r]\n\t"
60267 #else
60268         "adc	r4, %[r]\n\t"
60269 #endif
60270 #ifdef WOLFSSL_KEIL
60271         "adcs	r2, r2, %[r]\n\t"
60272 #elif defined(__clang__)
60273         "adcs	r2, %[r]\n\t"
60274 #else
60275         "adc	r2, %[r]\n\t"
60276 #endif
60277 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60278         "lsrs	r6, r7, #16\n\t"
60279 #else
60280         "lsr	r6, r7, #16\n\t"
60281 #endif
60282 #ifdef WOLFSSL_KEIL
60283         "muls	r5, r6, r5\n\t"
60284 #elif defined(__clang__)
60285         "muls	r5, r6\n\t"
60286 #else
60287         "mul	r5, r6\n\t"
60288 #endif
60289 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60290         "lsrs	r6, r5, #16\n\t"
60291 #else
60292         "lsr	r6, r5, #16\n\t"
60293 #endif
60294 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60295         "lsls	r5, r5, #16\n\t"
60296 #else
60297         "lsl	r5, r5, #16\n\t"
60298 #endif
60299 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60300         "adds	r3, r3, r5\n\t"
60301 #else
60302         "add	r3, r3, r5\n\t"
60303 #endif
60304 #ifdef WOLFSSL_KEIL
60305         "adcs	r4, r4, r6\n\t"
60306 #elif defined(__clang__)
60307         "adcs	r4, r6\n\t"
60308 #else
60309         "adc	r4, r6\n\t"
60310 #endif
60311 #ifdef WOLFSSL_KEIL
60312         "adcs	r2, r2, %[r]\n\t"
60313 #elif defined(__clang__)
60314         "adcs	r2, %[r]\n\t"
60315 #else
60316         "adc	r2, %[r]\n\t"
60317 #endif
60318 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60319         "adds	r3, r3, r5\n\t"
60320 #else
60321         "add	r3, r3, r5\n\t"
60322 #endif
60323 #ifdef WOLFSSL_KEIL
60324         "adcs	r4, r4, r6\n\t"
60325 #elif defined(__clang__)
60326         "adcs	r4, r6\n\t"
60327 #else
60328         "adc	r4, r6\n\t"
60329 #endif
60330 #ifdef WOLFSSL_KEIL
60331         "adcs	r2, r2, %[r]\n\t"
60332 #elif defined(__clang__)
60333         "adcs	r2, %[r]\n\t"
60334 #else
60335         "adc	r2, %[r]\n\t"
60336 #endif
60337 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60338         "lsrs	r5, %[a], #16\n\t"
60339 #else
60340         "lsr	r5, %[a], #16\n\t"
60341 #endif
60342 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60343         "lsrs	r6, r7, #16\n\t"
60344 #else
60345         "lsr	r6, r7, #16\n\t"
60346 #endif
60347 #ifdef WOLFSSL_KEIL
60348         "muls	r6, r5, r6\n\t"
60349 #elif defined(__clang__)
60350         "muls	r6, r5\n\t"
60351 #else
60352         "mul	r6, r5\n\t"
60353 #endif
60354 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60355         "adds	r4, r4, r6\n\t"
60356 #else
60357         "add	r4, r4, r6\n\t"
60358 #endif
60359 #ifdef WOLFSSL_KEIL
60360         "adcs	r2, r2, %[r]\n\t"
60361 #elif defined(__clang__)
60362         "adcs	r2, %[r]\n\t"
60363 #else
60364         "adc	r2, %[r]\n\t"
60365 #endif
60366 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60367         "adds	r4, r4, r6\n\t"
60368 #else
60369         "add	r4, r4, r6\n\t"
60370 #endif
60371 #ifdef WOLFSSL_KEIL
60372         "adcs	r2, r2, %[r]\n\t"
60373 #elif defined(__clang__)
60374         "adcs	r2, %[r]\n\t"
60375 #else
60376         "adc	r2, %[r]\n\t"
60377 #endif
60378         "uxth	r6, r7\n\t"
60379 #ifdef WOLFSSL_KEIL
60380         "muls	r5, r6, r5\n\t"
60381 #elif defined(__clang__)
60382         "muls	r5, r6\n\t"
60383 #else
60384         "mul	r5, r6\n\t"
60385 #endif
60386 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60387         "lsrs	r6, r5, #16\n\t"
60388 #else
60389         "lsr	r6, r5, #16\n\t"
60390 #endif
60391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60392         "lsls	r5, r5, #16\n\t"
60393 #else
60394         "lsl	r5, r5, #16\n\t"
60395 #endif
60396 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60397         "adds	r3, r3, r5\n\t"
60398 #else
60399         "add	r3, r3, r5\n\t"
60400 #endif
60401 #ifdef WOLFSSL_KEIL
60402         "adcs	r4, r4, r6\n\t"
60403 #elif defined(__clang__)
60404         "adcs	r4, r6\n\t"
60405 #else
60406         "adc	r4, r6\n\t"
60407 #endif
60408 #ifdef WOLFSSL_KEIL
60409         "adcs	r2, r2, %[r]\n\t"
60410 #elif defined(__clang__)
60411         "adcs	r2, %[r]\n\t"
60412 #else
60413         "adc	r2, %[r]\n\t"
60414 #endif
60415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60416         "adds	r3, r3, r5\n\t"
60417 #else
60418         "add	r3, r3, r5\n\t"
60419 #endif
60420 #ifdef WOLFSSL_KEIL
60421         "adcs	r4, r4, r6\n\t"
60422 #elif defined(__clang__)
60423         "adcs	r4, r6\n\t"
60424 #else
60425         "adc	r4, r6\n\t"
60426 #endif
60427 #ifdef WOLFSSL_KEIL
60428         "adcs	r2, r2, %[r]\n\t"
60429 #elif defined(__clang__)
60430         "adcs	r2, %[r]\n\t"
60431 #else
60432         "adc	r2, %[r]\n\t"
60433 #endif
60434         "#  A[9] * A[4]\n\t"
60435         "mov	%[a], r9\n\t"
60436         "ldr	r7, [%[a], #16]\n\t"
60437         "mov	%[a], r11\n\t"
60438         "uxth	r5, %[a]\n\t"
60439         "uxth	r6, r7\n\t"
60440 #ifdef WOLFSSL_KEIL
60441         "muls	r6, r5, r6\n\t"
60442 #elif defined(__clang__)
60443         "muls	r6, r5\n\t"
60444 #else
60445         "mul	r6, r5\n\t"
60446 #endif
60447 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60448         "adds	r3, r3, r6\n\t"
60449 #else
60450         "add	r3, r3, r6\n\t"
60451 #endif
60452 #ifdef WOLFSSL_KEIL
60453         "adcs	r4, r4, %[r]\n\t"
60454 #elif defined(__clang__)
60455         "adcs	r4, %[r]\n\t"
60456 #else
60457         "adc	r4, %[r]\n\t"
60458 #endif
60459 #ifdef WOLFSSL_KEIL
60460         "adcs	r2, r2, %[r]\n\t"
60461 #elif defined(__clang__)
60462         "adcs	r2, %[r]\n\t"
60463 #else
60464         "adc	r2, %[r]\n\t"
60465 #endif
60466 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60467         "adds	r3, r3, r6\n\t"
60468 #else
60469         "add	r3, r3, r6\n\t"
60470 #endif
60471 #ifdef WOLFSSL_KEIL
60472         "adcs	r4, r4, %[r]\n\t"
60473 #elif defined(__clang__)
60474         "adcs	r4, %[r]\n\t"
60475 #else
60476         "adc	r4, %[r]\n\t"
60477 #endif
60478 #ifdef WOLFSSL_KEIL
60479         "adcs	r2, r2, %[r]\n\t"
60480 #elif defined(__clang__)
60481         "adcs	r2, %[r]\n\t"
60482 #else
60483         "adc	r2, %[r]\n\t"
60484 #endif
60485 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60486         "lsrs	r6, r7, #16\n\t"
60487 #else
60488         "lsr	r6, r7, #16\n\t"
60489 #endif
60490 #ifdef WOLFSSL_KEIL
60491         "muls	r5, r6, r5\n\t"
60492 #elif defined(__clang__)
60493         "muls	r5, r6\n\t"
60494 #else
60495         "mul	r5, r6\n\t"
60496 #endif
60497 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60498         "lsrs	r6, r5, #16\n\t"
60499 #else
60500         "lsr	r6, r5, #16\n\t"
60501 #endif
60502 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60503         "lsls	r5, r5, #16\n\t"
60504 #else
60505         "lsl	r5, r5, #16\n\t"
60506 #endif
60507 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60508         "adds	r3, r3, r5\n\t"
60509 #else
60510         "add	r3, r3, r5\n\t"
60511 #endif
60512 #ifdef WOLFSSL_KEIL
60513         "adcs	r4, r4, r6\n\t"
60514 #elif defined(__clang__)
60515         "adcs	r4, r6\n\t"
60516 #else
60517         "adc	r4, r6\n\t"
60518 #endif
60519 #ifdef WOLFSSL_KEIL
60520         "adcs	r2, r2, %[r]\n\t"
60521 #elif defined(__clang__)
60522         "adcs	r2, %[r]\n\t"
60523 #else
60524         "adc	r2, %[r]\n\t"
60525 #endif
60526 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60527         "adds	r3, r3, r5\n\t"
60528 #else
60529         "add	r3, r3, r5\n\t"
60530 #endif
60531 #ifdef WOLFSSL_KEIL
60532         "adcs	r4, r4, r6\n\t"
60533 #elif defined(__clang__)
60534         "adcs	r4, r6\n\t"
60535 #else
60536         "adc	r4, r6\n\t"
60537 #endif
60538 #ifdef WOLFSSL_KEIL
60539         "adcs	r2, r2, %[r]\n\t"
60540 #elif defined(__clang__)
60541         "adcs	r2, %[r]\n\t"
60542 #else
60543         "adc	r2, %[r]\n\t"
60544 #endif
60545 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60546         "lsrs	r5, %[a], #16\n\t"
60547 #else
60548         "lsr	r5, %[a], #16\n\t"
60549 #endif
60550 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60551         "lsrs	r6, r7, #16\n\t"
60552 #else
60553         "lsr	r6, r7, #16\n\t"
60554 #endif
60555 #ifdef WOLFSSL_KEIL
60556         "muls	r6, r5, r6\n\t"
60557 #elif defined(__clang__)
60558         "muls	r6, r5\n\t"
60559 #else
60560         "mul	r6, r5\n\t"
60561 #endif
60562 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60563         "adds	r4, r4, r6\n\t"
60564 #else
60565         "add	r4, r4, r6\n\t"
60566 #endif
60567 #ifdef WOLFSSL_KEIL
60568         "adcs	r2, r2, %[r]\n\t"
60569 #elif defined(__clang__)
60570         "adcs	r2, %[r]\n\t"
60571 #else
60572         "adc	r2, %[r]\n\t"
60573 #endif
60574 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60575         "adds	r4, r4, r6\n\t"
60576 #else
60577         "add	r4, r4, r6\n\t"
60578 #endif
60579 #ifdef WOLFSSL_KEIL
60580         "adcs	r2, r2, %[r]\n\t"
60581 #elif defined(__clang__)
60582         "adcs	r2, %[r]\n\t"
60583 #else
60584         "adc	r2, %[r]\n\t"
60585 #endif
60586         "uxth	r6, r7\n\t"
60587 #ifdef WOLFSSL_KEIL
60588         "muls	r5, r6, r5\n\t"
60589 #elif defined(__clang__)
60590         "muls	r5, r6\n\t"
60591 #else
60592         "mul	r5, r6\n\t"
60593 #endif
60594 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60595         "lsrs	r6, r5, #16\n\t"
60596 #else
60597         "lsr	r6, r5, #16\n\t"
60598 #endif
60599 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60600         "lsls	r5, r5, #16\n\t"
60601 #else
60602         "lsl	r5, r5, #16\n\t"
60603 #endif
60604 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60605         "adds	r3, r3, r5\n\t"
60606 #else
60607         "add	r3, r3, r5\n\t"
60608 #endif
60609 #ifdef WOLFSSL_KEIL
60610         "adcs	r4, r4, r6\n\t"
60611 #elif defined(__clang__)
60612         "adcs	r4, r6\n\t"
60613 #else
60614         "adc	r4, r6\n\t"
60615 #endif
60616 #ifdef WOLFSSL_KEIL
60617         "adcs	r2, r2, %[r]\n\t"
60618 #elif defined(__clang__)
60619         "adcs	r2, %[r]\n\t"
60620 #else
60621         "adc	r2, %[r]\n\t"
60622 #endif
60623 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60624         "adds	r3, r3, r5\n\t"
60625 #else
60626         "add	r3, r3, r5\n\t"
60627 #endif
60628 #ifdef WOLFSSL_KEIL
60629         "adcs	r4, r4, r6\n\t"
60630 #elif defined(__clang__)
60631         "adcs	r4, r6\n\t"
60632 #else
60633         "adc	r4, r6\n\t"
60634 #endif
60635 #ifdef WOLFSSL_KEIL
60636         "adcs	r2, r2, %[r]\n\t"
60637 #elif defined(__clang__)
60638         "adcs	r2, %[r]\n\t"
60639 #else
60640         "adc	r2, %[r]\n\t"
60641 #endif
60642         "#  A[10] * A[3]\n\t"
60643         "mov	%[a], r9\n\t"
60644         "ldr	r7, [%[a], #12]\n\t"
60645         "mov	%[a], r12\n\t"
60646         "uxth	r5, %[a]\n\t"
60647         "uxth	r6, r7\n\t"
60648 #ifdef WOLFSSL_KEIL
60649         "muls	r6, r5, r6\n\t"
60650 #elif defined(__clang__)
60651         "muls	r6, r5\n\t"
60652 #else
60653         "mul	r6, r5\n\t"
60654 #endif
60655 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60656         "adds	r3, r3, r6\n\t"
60657 #else
60658         "add	r3, r3, r6\n\t"
60659 #endif
60660 #ifdef WOLFSSL_KEIL
60661         "adcs	r4, r4, %[r]\n\t"
60662 #elif defined(__clang__)
60663         "adcs	r4, %[r]\n\t"
60664 #else
60665         "adc	r4, %[r]\n\t"
60666 #endif
60667 #ifdef WOLFSSL_KEIL
60668         "adcs	r2, r2, %[r]\n\t"
60669 #elif defined(__clang__)
60670         "adcs	r2, %[r]\n\t"
60671 #else
60672         "adc	r2, %[r]\n\t"
60673 #endif
60674 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60675         "adds	r3, r3, r6\n\t"
60676 #else
60677         "add	r3, r3, r6\n\t"
60678 #endif
60679 #ifdef WOLFSSL_KEIL
60680         "adcs	r4, r4, %[r]\n\t"
60681 #elif defined(__clang__)
60682         "adcs	r4, %[r]\n\t"
60683 #else
60684         "adc	r4, %[r]\n\t"
60685 #endif
60686 #ifdef WOLFSSL_KEIL
60687         "adcs	r2, r2, %[r]\n\t"
60688 #elif defined(__clang__)
60689         "adcs	r2, %[r]\n\t"
60690 #else
60691         "adc	r2, %[r]\n\t"
60692 #endif
60693 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60694         "lsrs	r6, r7, #16\n\t"
60695 #else
60696         "lsr	r6, r7, #16\n\t"
60697 #endif
60698 #ifdef WOLFSSL_KEIL
60699         "muls	r5, r6, r5\n\t"
60700 #elif defined(__clang__)
60701         "muls	r5, r6\n\t"
60702 #else
60703         "mul	r5, r6\n\t"
60704 #endif
60705 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60706         "lsrs	r6, r5, #16\n\t"
60707 #else
60708         "lsr	r6, r5, #16\n\t"
60709 #endif
60710 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60711         "lsls	r5, r5, #16\n\t"
60712 #else
60713         "lsl	r5, r5, #16\n\t"
60714 #endif
60715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60716         "adds	r3, r3, r5\n\t"
60717 #else
60718         "add	r3, r3, r5\n\t"
60719 #endif
60720 #ifdef WOLFSSL_KEIL
60721         "adcs	r4, r4, r6\n\t"
60722 #elif defined(__clang__)
60723         "adcs	r4, r6\n\t"
60724 #else
60725         "adc	r4, r6\n\t"
60726 #endif
60727 #ifdef WOLFSSL_KEIL
60728         "adcs	r2, r2, %[r]\n\t"
60729 #elif defined(__clang__)
60730         "adcs	r2, %[r]\n\t"
60731 #else
60732         "adc	r2, %[r]\n\t"
60733 #endif
60734 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60735         "adds	r3, r3, r5\n\t"
60736 #else
60737         "add	r3, r3, r5\n\t"
60738 #endif
60739 #ifdef WOLFSSL_KEIL
60740         "adcs	r4, r4, r6\n\t"
60741 #elif defined(__clang__)
60742         "adcs	r4, r6\n\t"
60743 #else
60744         "adc	r4, r6\n\t"
60745 #endif
60746 #ifdef WOLFSSL_KEIL
60747         "adcs	r2, r2, %[r]\n\t"
60748 #elif defined(__clang__)
60749         "adcs	r2, %[r]\n\t"
60750 #else
60751         "adc	r2, %[r]\n\t"
60752 #endif
60753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60754         "lsrs	r5, %[a], #16\n\t"
60755 #else
60756         "lsr	r5, %[a], #16\n\t"
60757 #endif
60758 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60759         "lsrs	r6, r7, #16\n\t"
60760 #else
60761         "lsr	r6, r7, #16\n\t"
60762 #endif
60763 #ifdef WOLFSSL_KEIL
60764         "muls	r6, r5, r6\n\t"
60765 #elif defined(__clang__)
60766         "muls	r6, r5\n\t"
60767 #else
60768         "mul	r6, r5\n\t"
60769 #endif
60770 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60771         "adds	r4, r4, r6\n\t"
60772 #else
60773         "add	r4, r4, r6\n\t"
60774 #endif
60775 #ifdef WOLFSSL_KEIL
60776         "adcs	r2, r2, %[r]\n\t"
60777 #elif defined(__clang__)
60778         "adcs	r2, %[r]\n\t"
60779 #else
60780         "adc	r2, %[r]\n\t"
60781 #endif
60782 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60783         "adds	r4, r4, r6\n\t"
60784 #else
60785         "add	r4, r4, r6\n\t"
60786 #endif
60787 #ifdef WOLFSSL_KEIL
60788         "adcs	r2, r2, %[r]\n\t"
60789 #elif defined(__clang__)
60790         "adcs	r2, %[r]\n\t"
60791 #else
60792         "adc	r2, %[r]\n\t"
60793 #endif
60794         "uxth	r6, r7\n\t"
60795 #ifdef WOLFSSL_KEIL
60796         "muls	r5, r6, r5\n\t"
60797 #elif defined(__clang__)
60798         "muls	r5, r6\n\t"
60799 #else
60800         "mul	r5, r6\n\t"
60801 #endif
60802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60803         "lsrs	r6, r5, #16\n\t"
60804 #else
60805         "lsr	r6, r5, #16\n\t"
60806 #endif
60807 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60808         "lsls	r5, r5, #16\n\t"
60809 #else
60810         "lsl	r5, r5, #16\n\t"
60811 #endif
60812 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60813         "adds	r3, r3, r5\n\t"
60814 #else
60815         "add	r3, r3, r5\n\t"
60816 #endif
60817 #ifdef WOLFSSL_KEIL
60818         "adcs	r4, r4, r6\n\t"
60819 #elif defined(__clang__)
60820         "adcs	r4, r6\n\t"
60821 #else
60822         "adc	r4, r6\n\t"
60823 #endif
60824 #ifdef WOLFSSL_KEIL
60825         "adcs	r2, r2, %[r]\n\t"
60826 #elif defined(__clang__)
60827         "adcs	r2, %[r]\n\t"
60828 #else
60829         "adc	r2, %[r]\n\t"
60830 #endif
60831 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60832         "adds	r3, r3, r5\n\t"
60833 #else
60834         "add	r3, r3, r5\n\t"
60835 #endif
60836 #ifdef WOLFSSL_KEIL
60837         "adcs	r4, r4, r6\n\t"
60838 #elif defined(__clang__)
60839         "adcs	r4, r6\n\t"
60840 #else
60841         "adc	r4, r6\n\t"
60842 #endif
60843 #ifdef WOLFSSL_KEIL
60844         "adcs	r2, r2, %[r]\n\t"
60845 #elif defined(__clang__)
60846         "adcs	r2, %[r]\n\t"
60847 #else
60848         "adc	r2, %[r]\n\t"
60849 #endif
60850         "#  A[11] * A[2]\n\t"
60851         "mov	%[a], r9\n\t"
60852         "ldr	r7, [%[a], #8]\n\t"
60853         "mov	%[a], lr\n\t"
60854         "uxth	r5, %[a]\n\t"
60855         "uxth	r6, r7\n\t"
60856 #ifdef WOLFSSL_KEIL
60857         "muls	r6, r5, r6\n\t"
60858 #elif defined(__clang__)
60859         "muls	r6, r5\n\t"
60860 #else
60861         "mul	r6, r5\n\t"
60862 #endif
60863 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60864         "adds	r3, r3, r6\n\t"
60865 #else
60866         "add	r3, r3, r6\n\t"
60867 #endif
60868 #ifdef WOLFSSL_KEIL
60869         "adcs	r4, r4, %[r]\n\t"
60870 #elif defined(__clang__)
60871         "adcs	r4, %[r]\n\t"
60872 #else
60873         "adc	r4, %[r]\n\t"
60874 #endif
60875 #ifdef WOLFSSL_KEIL
60876         "adcs	r2, r2, %[r]\n\t"
60877 #elif defined(__clang__)
60878         "adcs	r2, %[r]\n\t"
60879 #else
60880         "adc	r2, %[r]\n\t"
60881 #endif
60882 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60883         "adds	r3, r3, r6\n\t"
60884 #else
60885         "add	r3, r3, r6\n\t"
60886 #endif
60887 #ifdef WOLFSSL_KEIL
60888         "adcs	r4, r4, %[r]\n\t"
60889 #elif defined(__clang__)
60890         "adcs	r4, %[r]\n\t"
60891 #else
60892         "adc	r4, %[r]\n\t"
60893 #endif
60894 #ifdef WOLFSSL_KEIL
60895         "adcs	r2, r2, %[r]\n\t"
60896 #elif defined(__clang__)
60897         "adcs	r2, %[r]\n\t"
60898 #else
60899         "adc	r2, %[r]\n\t"
60900 #endif
60901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60902         "lsrs	r6, r7, #16\n\t"
60903 #else
60904         "lsr	r6, r7, #16\n\t"
60905 #endif
60906 #ifdef WOLFSSL_KEIL
60907         "muls	r5, r6, r5\n\t"
60908 #elif defined(__clang__)
60909         "muls	r5, r6\n\t"
60910 #else
60911         "mul	r5, r6\n\t"
60912 #endif
60913 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60914         "lsrs	r6, r5, #16\n\t"
60915 #else
60916         "lsr	r6, r5, #16\n\t"
60917 #endif
60918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60919         "lsls	r5, r5, #16\n\t"
60920 #else
60921         "lsl	r5, r5, #16\n\t"
60922 #endif
60923 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60924         "adds	r3, r3, r5\n\t"
60925 #else
60926         "add	r3, r3, r5\n\t"
60927 #endif
60928 #ifdef WOLFSSL_KEIL
60929         "adcs	r4, r4, r6\n\t"
60930 #elif defined(__clang__)
60931         "adcs	r4, r6\n\t"
60932 #else
60933         "adc	r4, r6\n\t"
60934 #endif
60935 #ifdef WOLFSSL_KEIL
60936         "adcs	r2, r2, %[r]\n\t"
60937 #elif defined(__clang__)
60938         "adcs	r2, %[r]\n\t"
60939 #else
60940         "adc	r2, %[r]\n\t"
60941 #endif
60942 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60943         "adds	r3, r3, r5\n\t"
60944 #else
60945         "add	r3, r3, r5\n\t"
60946 #endif
60947 #ifdef WOLFSSL_KEIL
60948         "adcs	r4, r4, r6\n\t"
60949 #elif defined(__clang__)
60950         "adcs	r4, r6\n\t"
60951 #else
60952         "adc	r4, r6\n\t"
60953 #endif
60954 #ifdef WOLFSSL_KEIL
60955         "adcs	r2, r2, %[r]\n\t"
60956 #elif defined(__clang__)
60957         "adcs	r2, %[r]\n\t"
60958 #else
60959         "adc	r2, %[r]\n\t"
60960 #endif
60961 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60962         "lsrs	r5, %[a], #16\n\t"
60963 #else
60964         "lsr	r5, %[a], #16\n\t"
60965 #endif
60966 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60967         "lsrs	r6, r7, #16\n\t"
60968 #else
60969         "lsr	r6, r7, #16\n\t"
60970 #endif
60971 #ifdef WOLFSSL_KEIL
60972         "muls	r6, r5, r6\n\t"
60973 #elif defined(__clang__)
60974         "muls	r6, r5\n\t"
60975 #else
60976         "mul	r6, r5\n\t"
60977 #endif
60978 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60979         "adds	r4, r4, r6\n\t"
60980 #else
60981         "add	r4, r4, r6\n\t"
60982 #endif
60983 #ifdef WOLFSSL_KEIL
60984         "adcs	r2, r2, %[r]\n\t"
60985 #elif defined(__clang__)
60986         "adcs	r2, %[r]\n\t"
60987 #else
60988         "adc	r2, %[r]\n\t"
60989 #endif
60990 #if defined(__clang__) || defined(WOLFSSL_KEIL)
60991         "adds	r4, r4, r6\n\t"
60992 #else
60993         "add	r4, r4, r6\n\t"
60994 #endif
60995 #ifdef WOLFSSL_KEIL
60996         "adcs	r2, r2, %[r]\n\t"
60997 #elif defined(__clang__)
60998         "adcs	r2, %[r]\n\t"
60999 #else
61000         "adc	r2, %[r]\n\t"
61001 #endif
61002         "uxth	r6, r7\n\t"
61003 #ifdef WOLFSSL_KEIL
61004         "muls	r5, r6, r5\n\t"
61005 #elif defined(__clang__)
61006         "muls	r5, r6\n\t"
61007 #else
61008         "mul	r5, r6\n\t"
61009 #endif
61010 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61011         "lsrs	r6, r5, #16\n\t"
61012 #else
61013         "lsr	r6, r5, #16\n\t"
61014 #endif
61015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61016         "lsls	r5, r5, #16\n\t"
61017 #else
61018         "lsl	r5, r5, #16\n\t"
61019 #endif
61020 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61021         "adds	r3, r3, r5\n\t"
61022 #else
61023         "add	r3, r3, r5\n\t"
61024 #endif
61025 #ifdef WOLFSSL_KEIL
61026         "adcs	r4, r4, r6\n\t"
61027 #elif defined(__clang__)
61028         "adcs	r4, r6\n\t"
61029 #else
61030         "adc	r4, r6\n\t"
61031 #endif
61032 #ifdef WOLFSSL_KEIL
61033         "adcs	r2, r2, %[r]\n\t"
61034 #elif defined(__clang__)
61035         "adcs	r2, %[r]\n\t"
61036 #else
61037         "adc	r2, %[r]\n\t"
61038 #endif
61039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61040         "adds	r3, r3, r5\n\t"
61041 #else
61042         "add	r3, r3, r5\n\t"
61043 #endif
61044 #ifdef WOLFSSL_KEIL
61045         "adcs	r4, r4, r6\n\t"
61046 #elif defined(__clang__)
61047         "adcs	r4, r6\n\t"
61048 #else
61049         "adc	r4, r6\n\t"
61050 #endif
61051 #ifdef WOLFSSL_KEIL
61052         "adcs	r2, r2, %[r]\n\t"
61053 #elif defined(__clang__)
61054         "adcs	r2, %[r]\n\t"
61055 #else
61056         "adc	r2, %[r]\n\t"
61057 #endif
61058         "mov	%[r], r8\n\t"
61059         "str	r3, [%[r], #52]\n\t"
61060         "movs	%[r], #0\n\t"
61061         "#  A[11] * A[3]\n\t"
61062         "movs	r3, #0\n\t"
61063         "mov	%[a], r9\n\t"
61064         "ldr	r7, [%[a], #12]\n\t"
61065         "mov	%[a], lr\n\t"
61066         "uxth	r5, %[a]\n\t"
61067         "uxth	r6, r7\n\t"
61068 #ifdef WOLFSSL_KEIL
61069         "muls	r6, r5, r6\n\t"
61070 #elif defined(__clang__)
61071         "muls	r6, r5\n\t"
61072 #else
61073         "mul	r6, r5\n\t"
61074 #endif
61075 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61076         "adds	r4, r4, r6\n\t"
61077 #else
61078         "add	r4, r4, r6\n\t"
61079 #endif
61080 #ifdef WOLFSSL_KEIL
61081         "adcs	r2, r2, %[r]\n\t"
61082 #elif defined(__clang__)
61083         "adcs	r2, %[r]\n\t"
61084 #else
61085         "adc	r2, %[r]\n\t"
61086 #endif
61087 #ifdef WOLFSSL_KEIL
61088         "adcs	r3, r3, %[r]\n\t"
61089 #elif defined(__clang__)
61090         "adcs	r3, %[r]\n\t"
61091 #else
61092         "adc	r3, %[r]\n\t"
61093 #endif
61094 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61095         "adds	r4, r4, r6\n\t"
61096 #else
61097         "add	r4, r4, r6\n\t"
61098 #endif
61099 #ifdef WOLFSSL_KEIL
61100         "adcs	r2, r2, %[r]\n\t"
61101 #elif defined(__clang__)
61102         "adcs	r2, %[r]\n\t"
61103 #else
61104         "adc	r2, %[r]\n\t"
61105 #endif
61106 #ifdef WOLFSSL_KEIL
61107         "adcs	r3, r3, %[r]\n\t"
61108 #elif defined(__clang__)
61109         "adcs	r3, %[r]\n\t"
61110 #else
61111         "adc	r3, %[r]\n\t"
61112 #endif
61113 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61114         "lsrs	r6, r7, #16\n\t"
61115 #else
61116         "lsr	r6, r7, #16\n\t"
61117 #endif
61118 #ifdef WOLFSSL_KEIL
61119         "muls	r5, r6, r5\n\t"
61120 #elif defined(__clang__)
61121         "muls	r5, r6\n\t"
61122 #else
61123         "mul	r5, r6\n\t"
61124 #endif
61125 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61126         "lsrs	r6, r5, #16\n\t"
61127 #else
61128         "lsr	r6, r5, #16\n\t"
61129 #endif
61130 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61131         "lsls	r5, r5, #16\n\t"
61132 #else
61133         "lsl	r5, r5, #16\n\t"
61134 #endif
61135 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61136         "adds	r4, r4, r5\n\t"
61137 #else
61138         "add	r4, r4, r5\n\t"
61139 #endif
61140 #ifdef WOLFSSL_KEIL
61141         "adcs	r2, r2, r6\n\t"
61142 #elif defined(__clang__)
61143         "adcs	r2, r6\n\t"
61144 #else
61145         "adc	r2, r6\n\t"
61146 #endif
61147 #ifdef WOLFSSL_KEIL
61148         "adcs	r3, r3, %[r]\n\t"
61149 #elif defined(__clang__)
61150         "adcs	r3, %[r]\n\t"
61151 #else
61152         "adc	r3, %[r]\n\t"
61153 #endif
61154 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61155         "adds	r4, r4, r5\n\t"
61156 #else
61157         "add	r4, r4, r5\n\t"
61158 #endif
61159 #ifdef WOLFSSL_KEIL
61160         "adcs	r2, r2, r6\n\t"
61161 #elif defined(__clang__)
61162         "adcs	r2, r6\n\t"
61163 #else
61164         "adc	r2, r6\n\t"
61165 #endif
61166 #ifdef WOLFSSL_KEIL
61167         "adcs	r3, r3, %[r]\n\t"
61168 #elif defined(__clang__)
61169         "adcs	r3, %[r]\n\t"
61170 #else
61171         "adc	r3, %[r]\n\t"
61172 #endif
61173 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61174         "lsrs	r5, %[a], #16\n\t"
61175 #else
61176         "lsr	r5, %[a], #16\n\t"
61177 #endif
61178 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61179         "lsrs	r6, r7, #16\n\t"
61180 #else
61181         "lsr	r6, r7, #16\n\t"
61182 #endif
61183 #ifdef WOLFSSL_KEIL
61184         "muls	r6, r5, r6\n\t"
61185 #elif defined(__clang__)
61186         "muls	r6, r5\n\t"
61187 #else
61188         "mul	r6, r5\n\t"
61189 #endif
61190 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61191         "adds	r2, r2, r6\n\t"
61192 #else
61193         "add	r2, r2, r6\n\t"
61194 #endif
61195 #ifdef WOLFSSL_KEIL
61196         "adcs	r3, r3, %[r]\n\t"
61197 #elif defined(__clang__)
61198         "adcs	r3, %[r]\n\t"
61199 #else
61200         "adc	r3, %[r]\n\t"
61201 #endif
61202 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61203         "adds	r2, r2, r6\n\t"
61204 #else
61205         "add	r2, r2, r6\n\t"
61206 #endif
61207 #ifdef WOLFSSL_KEIL
61208         "adcs	r3, r3, %[r]\n\t"
61209 #elif defined(__clang__)
61210         "adcs	r3, %[r]\n\t"
61211 #else
61212         "adc	r3, %[r]\n\t"
61213 #endif
61214         "uxth	r6, r7\n\t"
61215 #ifdef WOLFSSL_KEIL
61216         "muls	r5, r6, r5\n\t"
61217 #elif defined(__clang__)
61218         "muls	r5, r6\n\t"
61219 #else
61220         "mul	r5, r6\n\t"
61221 #endif
61222 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61223         "lsrs	r6, r5, #16\n\t"
61224 #else
61225         "lsr	r6, r5, #16\n\t"
61226 #endif
61227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61228         "lsls	r5, r5, #16\n\t"
61229 #else
61230         "lsl	r5, r5, #16\n\t"
61231 #endif
61232 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61233         "adds	r4, r4, r5\n\t"
61234 #else
61235         "add	r4, r4, r5\n\t"
61236 #endif
61237 #ifdef WOLFSSL_KEIL
61238         "adcs	r2, r2, r6\n\t"
61239 #elif defined(__clang__)
61240         "adcs	r2, r6\n\t"
61241 #else
61242         "adc	r2, r6\n\t"
61243 #endif
61244 #ifdef WOLFSSL_KEIL
61245         "adcs	r3, r3, %[r]\n\t"
61246 #elif defined(__clang__)
61247         "adcs	r3, %[r]\n\t"
61248 #else
61249         "adc	r3, %[r]\n\t"
61250 #endif
61251 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61252         "adds	r4, r4, r5\n\t"
61253 #else
61254         "add	r4, r4, r5\n\t"
61255 #endif
61256 #ifdef WOLFSSL_KEIL
61257         "adcs	r2, r2, r6\n\t"
61258 #elif defined(__clang__)
61259         "adcs	r2, r6\n\t"
61260 #else
61261         "adc	r2, r6\n\t"
61262 #endif
61263 #ifdef WOLFSSL_KEIL
61264         "adcs	r3, r3, %[r]\n\t"
61265 #elif defined(__clang__)
61266         "adcs	r3, %[r]\n\t"
61267 #else
61268         "adc	r3, %[r]\n\t"
61269 #endif
61270         "#  A[10] * A[4]\n\t"
61271         "mov	%[a], r9\n\t"
61272         "ldr	r7, [%[a], #16]\n\t"
61273         "mov	%[a], r12\n\t"
61274         "uxth	r5, %[a]\n\t"
61275         "uxth	r6, r7\n\t"
61276 #ifdef WOLFSSL_KEIL
61277         "muls	r6, r5, r6\n\t"
61278 #elif defined(__clang__)
61279         "muls	r6, r5\n\t"
61280 #else
61281         "mul	r6, r5\n\t"
61282 #endif
61283 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61284         "adds	r4, r4, r6\n\t"
61285 #else
61286         "add	r4, r4, r6\n\t"
61287 #endif
61288 #ifdef WOLFSSL_KEIL
61289         "adcs	r2, r2, %[r]\n\t"
61290 #elif defined(__clang__)
61291         "adcs	r2, %[r]\n\t"
61292 #else
61293         "adc	r2, %[r]\n\t"
61294 #endif
61295 #ifdef WOLFSSL_KEIL
61296         "adcs	r3, r3, %[r]\n\t"
61297 #elif defined(__clang__)
61298         "adcs	r3, %[r]\n\t"
61299 #else
61300         "adc	r3, %[r]\n\t"
61301 #endif
61302 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61303         "adds	r4, r4, r6\n\t"
61304 #else
61305         "add	r4, r4, r6\n\t"
61306 #endif
61307 #ifdef WOLFSSL_KEIL
61308         "adcs	r2, r2, %[r]\n\t"
61309 #elif defined(__clang__)
61310         "adcs	r2, %[r]\n\t"
61311 #else
61312         "adc	r2, %[r]\n\t"
61313 #endif
61314 #ifdef WOLFSSL_KEIL
61315         "adcs	r3, r3, %[r]\n\t"
61316 #elif defined(__clang__)
61317         "adcs	r3, %[r]\n\t"
61318 #else
61319         "adc	r3, %[r]\n\t"
61320 #endif
61321 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61322         "lsrs	r6, r7, #16\n\t"
61323 #else
61324         "lsr	r6, r7, #16\n\t"
61325 #endif
61326 #ifdef WOLFSSL_KEIL
61327         "muls	r5, r6, r5\n\t"
61328 #elif defined(__clang__)
61329         "muls	r5, r6\n\t"
61330 #else
61331         "mul	r5, r6\n\t"
61332 #endif
61333 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61334         "lsrs	r6, r5, #16\n\t"
61335 #else
61336         "lsr	r6, r5, #16\n\t"
61337 #endif
61338 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61339         "lsls	r5, r5, #16\n\t"
61340 #else
61341         "lsl	r5, r5, #16\n\t"
61342 #endif
61343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61344         "adds	r4, r4, r5\n\t"
61345 #else
61346         "add	r4, r4, r5\n\t"
61347 #endif
61348 #ifdef WOLFSSL_KEIL
61349         "adcs	r2, r2, r6\n\t"
61350 #elif defined(__clang__)
61351         "adcs	r2, r6\n\t"
61352 #else
61353         "adc	r2, r6\n\t"
61354 #endif
61355 #ifdef WOLFSSL_KEIL
61356         "adcs	r3, r3, %[r]\n\t"
61357 #elif defined(__clang__)
61358         "adcs	r3, %[r]\n\t"
61359 #else
61360         "adc	r3, %[r]\n\t"
61361 #endif
61362 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61363         "adds	r4, r4, r5\n\t"
61364 #else
61365         "add	r4, r4, r5\n\t"
61366 #endif
61367 #ifdef WOLFSSL_KEIL
61368         "adcs	r2, r2, r6\n\t"
61369 #elif defined(__clang__)
61370         "adcs	r2, r6\n\t"
61371 #else
61372         "adc	r2, r6\n\t"
61373 #endif
61374 #ifdef WOLFSSL_KEIL
61375         "adcs	r3, r3, %[r]\n\t"
61376 #elif defined(__clang__)
61377         "adcs	r3, %[r]\n\t"
61378 #else
61379         "adc	r3, %[r]\n\t"
61380 #endif
61381 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61382         "lsrs	r5, %[a], #16\n\t"
61383 #else
61384         "lsr	r5, %[a], #16\n\t"
61385 #endif
61386 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61387         "lsrs	r6, r7, #16\n\t"
61388 #else
61389         "lsr	r6, r7, #16\n\t"
61390 #endif
61391 #ifdef WOLFSSL_KEIL
61392         "muls	r6, r5, r6\n\t"
61393 #elif defined(__clang__)
61394         "muls	r6, r5\n\t"
61395 #else
61396         "mul	r6, r5\n\t"
61397 #endif
61398 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61399         "adds	r2, r2, r6\n\t"
61400 #else
61401         "add	r2, r2, r6\n\t"
61402 #endif
61403 #ifdef WOLFSSL_KEIL
61404         "adcs	r3, r3, %[r]\n\t"
61405 #elif defined(__clang__)
61406         "adcs	r3, %[r]\n\t"
61407 #else
61408         "adc	r3, %[r]\n\t"
61409 #endif
61410 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61411         "adds	r2, r2, r6\n\t"
61412 #else
61413         "add	r2, r2, r6\n\t"
61414 #endif
61415 #ifdef WOLFSSL_KEIL
61416         "adcs	r3, r3, %[r]\n\t"
61417 #elif defined(__clang__)
61418         "adcs	r3, %[r]\n\t"
61419 #else
61420         "adc	r3, %[r]\n\t"
61421 #endif
61422         "uxth	r6, r7\n\t"
61423 #ifdef WOLFSSL_KEIL
61424         "muls	r5, r6, r5\n\t"
61425 #elif defined(__clang__)
61426         "muls	r5, r6\n\t"
61427 #else
61428         "mul	r5, r6\n\t"
61429 #endif
61430 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61431         "lsrs	r6, r5, #16\n\t"
61432 #else
61433         "lsr	r6, r5, #16\n\t"
61434 #endif
61435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61436         "lsls	r5, r5, #16\n\t"
61437 #else
61438         "lsl	r5, r5, #16\n\t"
61439 #endif
61440 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61441         "adds	r4, r4, r5\n\t"
61442 #else
61443         "add	r4, r4, r5\n\t"
61444 #endif
61445 #ifdef WOLFSSL_KEIL
61446         "adcs	r2, r2, r6\n\t"
61447 #elif defined(__clang__)
61448         "adcs	r2, r6\n\t"
61449 #else
61450         "adc	r2, r6\n\t"
61451 #endif
61452 #ifdef WOLFSSL_KEIL
61453         "adcs	r3, r3, %[r]\n\t"
61454 #elif defined(__clang__)
61455         "adcs	r3, %[r]\n\t"
61456 #else
61457         "adc	r3, %[r]\n\t"
61458 #endif
61459 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61460         "adds	r4, r4, r5\n\t"
61461 #else
61462         "add	r4, r4, r5\n\t"
61463 #endif
61464 #ifdef WOLFSSL_KEIL
61465         "adcs	r2, r2, r6\n\t"
61466 #elif defined(__clang__)
61467         "adcs	r2, r6\n\t"
61468 #else
61469         "adc	r2, r6\n\t"
61470 #endif
61471 #ifdef WOLFSSL_KEIL
61472         "adcs	r3, r3, %[r]\n\t"
61473 #elif defined(__clang__)
61474         "adcs	r3, %[r]\n\t"
61475 #else
61476         "adc	r3, %[r]\n\t"
61477 #endif
61478         "#  A[9] * A[5]\n\t"
61479         "mov	%[a], r9\n\t"
61480         "ldr	r7, [%[a], #20]\n\t"
61481         "mov	%[a], r11\n\t"
61482         "uxth	r5, %[a]\n\t"
61483         "uxth	r6, r7\n\t"
61484 #ifdef WOLFSSL_KEIL
61485         "muls	r6, r5, r6\n\t"
61486 #elif defined(__clang__)
61487         "muls	r6, r5\n\t"
61488 #else
61489         "mul	r6, r5\n\t"
61490 #endif
61491 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61492         "adds	r4, r4, r6\n\t"
61493 #else
61494         "add	r4, r4, r6\n\t"
61495 #endif
61496 #ifdef WOLFSSL_KEIL
61497         "adcs	r2, r2, %[r]\n\t"
61498 #elif defined(__clang__)
61499         "adcs	r2, %[r]\n\t"
61500 #else
61501         "adc	r2, %[r]\n\t"
61502 #endif
61503 #ifdef WOLFSSL_KEIL
61504         "adcs	r3, r3, %[r]\n\t"
61505 #elif defined(__clang__)
61506         "adcs	r3, %[r]\n\t"
61507 #else
61508         "adc	r3, %[r]\n\t"
61509 #endif
61510 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61511         "adds	r4, r4, r6\n\t"
61512 #else
61513         "add	r4, r4, r6\n\t"
61514 #endif
61515 #ifdef WOLFSSL_KEIL
61516         "adcs	r2, r2, %[r]\n\t"
61517 #elif defined(__clang__)
61518         "adcs	r2, %[r]\n\t"
61519 #else
61520         "adc	r2, %[r]\n\t"
61521 #endif
61522 #ifdef WOLFSSL_KEIL
61523         "adcs	r3, r3, %[r]\n\t"
61524 #elif defined(__clang__)
61525         "adcs	r3, %[r]\n\t"
61526 #else
61527         "adc	r3, %[r]\n\t"
61528 #endif
61529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61530         "lsrs	r6, r7, #16\n\t"
61531 #else
61532         "lsr	r6, r7, #16\n\t"
61533 #endif
61534 #ifdef WOLFSSL_KEIL
61535         "muls	r5, r6, r5\n\t"
61536 #elif defined(__clang__)
61537         "muls	r5, r6\n\t"
61538 #else
61539         "mul	r5, r6\n\t"
61540 #endif
61541 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61542         "lsrs	r6, r5, #16\n\t"
61543 #else
61544         "lsr	r6, r5, #16\n\t"
61545 #endif
61546 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61547         "lsls	r5, r5, #16\n\t"
61548 #else
61549         "lsl	r5, r5, #16\n\t"
61550 #endif
61551 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61552         "adds	r4, r4, r5\n\t"
61553 #else
61554         "add	r4, r4, r5\n\t"
61555 #endif
61556 #ifdef WOLFSSL_KEIL
61557         "adcs	r2, r2, r6\n\t"
61558 #elif defined(__clang__)
61559         "adcs	r2, r6\n\t"
61560 #else
61561         "adc	r2, r6\n\t"
61562 #endif
61563 #ifdef WOLFSSL_KEIL
61564         "adcs	r3, r3, %[r]\n\t"
61565 #elif defined(__clang__)
61566         "adcs	r3, %[r]\n\t"
61567 #else
61568         "adc	r3, %[r]\n\t"
61569 #endif
61570 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61571         "adds	r4, r4, r5\n\t"
61572 #else
61573         "add	r4, r4, r5\n\t"
61574 #endif
61575 #ifdef WOLFSSL_KEIL
61576         "adcs	r2, r2, r6\n\t"
61577 #elif defined(__clang__)
61578         "adcs	r2, r6\n\t"
61579 #else
61580         "adc	r2, r6\n\t"
61581 #endif
61582 #ifdef WOLFSSL_KEIL
61583         "adcs	r3, r3, %[r]\n\t"
61584 #elif defined(__clang__)
61585         "adcs	r3, %[r]\n\t"
61586 #else
61587         "adc	r3, %[r]\n\t"
61588 #endif
61589 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61590         "lsrs	r5, %[a], #16\n\t"
61591 #else
61592         "lsr	r5, %[a], #16\n\t"
61593 #endif
61594 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61595         "lsrs	r6, r7, #16\n\t"
61596 #else
61597         "lsr	r6, r7, #16\n\t"
61598 #endif
61599 #ifdef WOLFSSL_KEIL
61600         "muls	r6, r5, r6\n\t"
61601 #elif defined(__clang__)
61602         "muls	r6, r5\n\t"
61603 #else
61604         "mul	r6, r5\n\t"
61605 #endif
61606 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61607         "adds	r2, r2, r6\n\t"
61608 #else
61609         "add	r2, r2, r6\n\t"
61610 #endif
61611 #ifdef WOLFSSL_KEIL
61612         "adcs	r3, r3, %[r]\n\t"
61613 #elif defined(__clang__)
61614         "adcs	r3, %[r]\n\t"
61615 #else
61616         "adc	r3, %[r]\n\t"
61617 #endif
61618 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61619         "adds	r2, r2, r6\n\t"
61620 #else
61621         "add	r2, r2, r6\n\t"
61622 #endif
61623 #ifdef WOLFSSL_KEIL
61624         "adcs	r3, r3, %[r]\n\t"
61625 #elif defined(__clang__)
61626         "adcs	r3, %[r]\n\t"
61627 #else
61628         "adc	r3, %[r]\n\t"
61629 #endif
61630         "uxth	r6, r7\n\t"
61631 #ifdef WOLFSSL_KEIL
61632         "muls	r5, r6, r5\n\t"
61633 #elif defined(__clang__)
61634         "muls	r5, r6\n\t"
61635 #else
61636         "mul	r5, r6\n\t"
61637 #endif
61638 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61639         "lsrs	r6, r5, #16\n\t"
61640 #else
61641         "lsr	r6, r5, #16\n\t"
61642 #endif
61643 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61644         "lsls	r5, r5, #16\n\t"
61645 #else
61646         "lsl	r5, r5, #16\n\t"
61647 #endif
61648 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61649         "adds	r4, r4, r5\n\t"
61650 #else
61651         "add	r4, r4, r5\n\t"
61652 #endif
61653 #ifdef WOLFSSL_KEIL
61654         "adcs	r2, r2, r6\n\t"
61655 #elif defined(__clang__)
61656         "adcs	r2, r6\n\t"
61657 #else
61658         "adc	r2, r6\n\t"
61659 #endif
61660 #ifdef WOLFSSL_KEIL
61661         "adcs	r3, r3, %[r]\n\t"
61662 #elif defined(__clang__)
61663         "adcs	r3, %[r]\n\t"
61664 #else
61665         "adc	r3, %[r]\n\t"
61666 #endif
61667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61668         "adds	r4, r4, r5\n\t"
61669 #else
61670         "add	r4, r4, r5\n\t"
61671 #endif
61672 #ifdef WOLFSSL_KEIL
61673         "adcs	r2, r2, r6\n\t"
61674 #elif defined(__clang__)
61675         "adcs	r2, r6\n\t"
61676 #else
61677         "adc	r2, r6\n\t"
61678 #endif
61679 #ifdef WOLFSSL_KEIL
61680         "adcs	r3, r3, %[r]\n\t"
61681 #elif defined(__clang__)
61682         "adcs	r3, %[r]\n\t"
61683 #else
61684         "adc	r3, %[r]\n\t"
61685 #endif
61686         "#  A[8] * A[6]\n\t"
61687         "mov	%[a], r9\n\t"
61688         "ldr	r7, [%[a], #24]\n\t"
61689         "mov	%[a], r10\n\t"
61690         "uxth	r5, %[a]\n\t"
61691         "uxth	r6, r7\n\t"
61692 #ifdef WOLFSSL_KEIL
61693         "muls	r6, r5, r6\n\t"
61694 #elif defined(__clang__)
61695         "muls	r6, r5\n\t"
61696 #else
61697         "mul	r6, r5\n\t"
61698 #endif
61699 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61700         "adds	r4, r4, r6\n\t"
61701 #else
61702         "add	r4, r4, r6\n\t"
61703 #endif
61704 #ifdef WOLFSSL_KEIL
61705         "adcs	r2, r2, %[r]\n\t"
61706 #elif defined(__clang__)
61707         "adcs	r2, %[r]\n\t"
61708 #else
61709         "adc	r2, %[r]\n\t"
61710 #endif
61711 #ifdef WOLFSSL_KEIL
61712         "adcs	r3, r3, %[r]\n\t"
61713 #elif defined(__clang__)
61714         "adcs	r3, %[r]\n\t"
61715 #else
61716         "adc	r3, %[r]\n\t"
61717 #endif
61718 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61719         "adds	r4, r4, r6\n\t"
61720 #else
61721         "add	r4, r4, r6\n\t"
61722 #endif
61723 #ifdef WOLFSSL_KEIL
61724         "adcs	r2, r2, %[r]\n\t"
61725 #elif defined(__clang__)
61726         "adcs	r2, %[r]\n\t"
61727 #else
61728         "adc	r2, %[r]\n\t"
61729 #endif
61730 #ifdef WOLFSSL_KEIL
61731         "adcs	r3, r3, %[r]\n\t"
61732 #elif defined(__clang__)
61733         "adcs	r3, %[r]\n\t"
61734 #else
61735         "adc	r3, %[r]\n\t"
61736 #endif
61737 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61738         "lsrs	r6, r7, #16\n\t"
61739 #else
61740         "lsr	r6, r7, #16\n\t"
61741 #endif
61742 #ifdef WOLFSSL_KEIL
61743         "muls	r5, r6, r5\n\t"
61744 #elif defined(__clang__)
61745         "muls	r5, r6\n\t"
61746 #else
61747         "mul	r5, r6\n\t"
61748 #endif
61749 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61750         "lsrs	r6, r5, #16\n\t"
61751 #else
61752         "lsr	r6, r5, #16\n\t"
61753 #endif
61754 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61755         "lsls	r5, r5, #16\n\t"
61756 #else
61757         "lsl	r5, r5, #16\n\t"
61758 #endif
61759 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61760         "adds	r4, r4, r5\n\t"
61761 #else
61762         "add	r4, r4, r5\n\t"
61763 #endif
61764 #ifdef WOLFSSL_KEIL
61765         "adcs	r2, r2, r6\n\t"
61766 #elif defined(__clang__)
61767         "adcs	r2, r6\n\t"
61768 #else
61769         "adc	r2, r6\n\t"
61770 #endif
61771 #ifdef WOLFSSL_KEIL
61772         "adcs	r3, r3, %[r]\n\t"
61773 #elif defined(__clang__)
61774         "adcs	r3, %[r]\n\t"
61775 #else
61776         "adc	r3, %[r]\n\t"
61777 #endif
61778 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61779         "adds	r4, r4, r5\n\t"
61780 #else
61781         "add	r4, r4, r5\n\t"
61782 #endif
61783 #ifdef WOLFSSL_KEIL
61784         "adcs	r2, r2, r6\n\t"
61785 #elif defined(__clang__)
61786         "adcs	r2, r6\n\t"
61787 #else
61788         "adc	r2, r6\n\t"
61789 #endif
61790 #ifdef WOLFSSL_KEIL
61791         "adcs	r3, r3, %[r]\n\t"
61792 #elif defined(__clang__)
61793         "adcs	r3, %[r]\n\t"
61794 #else
61795         "adc	r3, %[r]\n\t"
61796 #endif
61797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61798         "lsrs	r5, %[a], #16\n\t"
61799 #else
61800         "lsr	r5, %[a], #16\n\t"
61801 #endif
61802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61803         "lsrs	r6, r7, #16\n\t"
61804 #else
61805         "lsr	r6, r7, #16\n\t"
61806 #endif
61807 #ifdef WOLFSSL_KEIL
61808         "muls	r6, r5, r6\n\t"
61809 #elif defined(__clang__)
61810         "muls	r6, r5\n\t"
61811 #else
61812         "mul	r6, r5\n\t"
61813 #endif
61814 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61815         "adds	r2, r2, r6\n\t"
61816 #else
61817         "add	r2, r2, r6\n\t"
61818 #endif
61819 #ifdef WOLFSSL_KEIL
61820         "adcs	r3, r3, %[r]\n\t"
61821 #elif defined(__clang__)
61822         "adcs	r3, %[r]\n\t"
61823 #else
61824         "adc	r3, %[r]\n\t"
61825 #endif
61826 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61827         "adds	r2, r2, r6\n\t"
61828 #else
61829         "add	r2, r2, r6\n\t"
61830 #endif
61831 #ifdef WOLFSSL_KEIL
61832         "adcs	r3, r3, %[r]\n\t"
61833 #elif defined(__clang__)
61834         "adcs	r3, %[r]\n\t"
61835 #else
61836         "adc	r3, %[r]\n\t"
61837 #endif
61838         "uxth	r6, r7\n\t"
61839 #ifdef WOLFSSL_KEIL
61840         "muls	r5, r6, r5\n\t"
61841 #elif defined(__clang__)
61842         "muls	r5, r6\n\t"
61843 #else
61844         "mul	r5, r6\n\t"
61845 #endif
61846 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61847         "lsrs	r6, r5, #16\n\t"
61848 #else
61849         "lsr	r6, r5, #16\n\t"
61850 #endif
61851 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61852         "lsls	r5, r5, #16\n\t"
61853 #else
61854         "lsl	r5, r5, #16\n\t"
61855 #endif
61856 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61857         "adds	r4, r4, r5\n\t"
61858 #else
61859         "add	r4, r4, r5\n\t"
61860 #endif
61861 #ifdef WOLFSSL_KEIL
61862         "adcs	r2, r2, r6\n\t"
61863 #elif defined(__clang__)
61864         "adcs	r2, r6\n\t"
61865 #else
61866         "adc	r2, r6\n\t"
61867 #endif
61868 #ifdef WOLFSSL_KEIL
61869         "adcs	r3, r3, %[r]\n\t"
61870 #elif defined(__clang__)
61871         "adcs	r3, %[r]\n\t"
61872 #else
61873         "adc	r3, %[r]\n\t"
61874 #endif
61875 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61876         "adds	r4, r4, r5\n\t"
61877 #else
61878         "add	r4, r4, r5\n\t"
61879 #endif
61880 #ifdef WOLFSSL_KEIL
61881         "adcs	r2, r2, r6\n\t"
61882 #elif defined(__clang__)
61883         "adcs	r2, r6\n\t"
61884 #else
61885         "adc	r2, r6\n\t"
61886 #endif
61887 #ifdef WOLFSSL_KEIL
61888         "adcs	r3, r3, %[r]\n\t"
61889 #elif defined(__clang__)
61890         "adcs	r3, %[r]\n\t"
61891 #else
61892         "adc	r3, %[r]\n\t"
61893 #endif
61894         "#  A[7] * A[7]\n\t"
61895         "mov	%[a], r9\n\t"
61896         "ldr	r7, [%[a], #28]\n\t"
61897 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61898         "lsrs	r6, r7, #16\n\t"
61899 #else
61900         "lsr	r6, r7, #16\n\t"
61901 #endif
61902         "uxth	r5, r7\n\t"
61903 #ifdef WOLFSSL_KEIL
61904         "muls	r5, r5, r5\n\t"
61905 #elif defined(__clang__)
61906         "muls	r5, r5\n\t"
61907 #else
61908         "mul	r5, r5\n\t"
61909 #endif
61910 #ifdef WOLFSSL_KEIL
61911         "muls	r6, r6, r6\n\t"
61912 #elif defined(__clang__)
61913         "muls	r6, r6\n\t"
61914 #else
61915         "mul	r6, r6\n\t"
61916 #endif
61917 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61918         "adds	r4, r4, r5\n\t"
61919 #else
61920         "add	r4, r4, r5\n\t"
61921 #endif
61922 #ifdef WOLFSSL_KEIL
61923         "adcs	r2, r2, r6\n\t"
61924 #elif defined(__clang__)
61925         "adcs	r2, r6\n\t"
61926 #else
61927         "adc	r2, r6\n\t"
61928 #endif
61929 #ifdef WOLFSSL_KEIL
61930         "adcs	r3, r3, %[r]\n\t"
61931 #elif defined(__clang__)
61932         "adcs	r3, %[r]\n\t"
61933 #else
61934         "adc	r3, %[r]\n\t"
61935 #endif
61936 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61937         "lsrs	r6, r7, #16\n\t"
61938 #else
61939         "lsr	r6, r7, #16\n\t"
61940 #endif
61941         "uxth	r5, r7\n\t"
61942 #ifdef WOLFSSL_KEIL
61943         "muls	r5, r6, r5\n\t"
61944 #elif defined(__clang__)
61945         "muls	r5, r6\n\t"
61946 #else
61947         "mul	r5, r6\n\t"
61948 #endif
61949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61950         "lsrs	r6, r5, #15\n\t"
61951 #else
61952         "lsr	r6, r5, #15\n\t"
61953 #endif
61954 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61955         "lsls	r5, r5, #17\n\t"
61956 #else
61957         "lsl	r5, r5, #17\n\t"
61958 #endif
61959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61960         "adds	r4, r4, r5\n\t"
61961 #else
61962         "add	r4, r4, r5\n\t"
61963 #endif
61964 #ifdef WOLFSSL_KEIL
61965         "adcs	r2, r2, r6\n\t"
61966 #elif defined(__clang__)
61967         "adcs	r2, r6\n\t"
61968 #else
61969         "adc	r2, r6\n\t"
61970 #endif
61971 #ifdef WOLFSSL_KEIL
61972         "adcs	r3, r3, %[r]\n\t"
61973 #elif defined(__clang__)
61974         "adcs	r3, %[r]\n\t"
61975 #else
61976         "adc	r3, %[r]\n\t"
61977 #endif
61978         "mov	%[r], r8\n\t"
61979         "str	r4, [%[r], #56]\n\t"
61980         "movs	%[r], #0\n\t"
61981         "#  A[8] * A[7]\n\t"
61982         "movs	r4, #0\n\t"
61983         "mov	%[a], r10\n\t"
61984         "uxth	r5, %[a]\n\t"
61985         "uxth	r6, r7\n\t"
61986 #ifdef WOLFSSL_KEIL
61987         "muls	r6, r5, r6\n\t"
61988 #elif defined(__clang__)
61989         "muls	r6, r5\n\t"
61990 #else
61991         "mul	r6, r5\n\t"
61992 #endif
61993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
61994         "adds	r2, r2, r6\n\t"
61995 #else
61996         "add	r2, r2, r6\n\t"
61997 #endif
61998 #ifdef WOLFSSL_KEIL
61999         "adcs	r3, r3, %[r]\n\t"
62000 #elif defined(__clang__)
62001         "adcs	r3, %[r]\n\t"
62002 #else
62003         "adc	r3, %[r]\n\t"
62004 #endif
62005 #ifdef WOLFSSL_KEIL
62006         "adcs	r4, r4, %[r]\n\t"
62007 #elif defined(__clang__)
62008         "adcs	r4, %[r]\n\t"
62009 #else
62010         "adc	r4, %[r]\n\t"
62011 #endif
62012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62013         "adds	r2, r2, r6\n\t"
62014 #else
62015         "add	r2, r2, r6\n\t"
62016 #endif
62017 #ifdef WOLFSSL_KEIL
62018         "adcs	r3, r3, %[r]\n\t"
62019 #elif defined(__clang__)
62020         "adcs	r3, %[r]\n\t"
62021 #else
62022         "adc	r3, %[r]\n\t"
62023 #endif
62024 #ifdef WOLFSSL_KEIL
62025         "adcs	r4, r4, %[r]\n\t"
62026 #elif defined(__clang__)
62027         "adcs	r4, %[r]\n\t"
62028 #else
62029         "adc	r4, %[r]\n\t"
62030 #endif
62031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62032         "lsrs	r6, r7, #16\n\t"
62033 #else
62034         "lsr	r6, r7, #16\n\t"
62035 #endif
62036 #ifdef WOLFSSL_KEIL
62037         "muls	r5, r6, r5\n\t"
62038 #elif defined(__clang__)
62039         "muls	r5, r6\n\t"
62040 #else
62041         "mul	r5, r6\n\t"
62042 #endif
62043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62044         "lsrs	r6, r5, #16\n\t"
62045 #else
62046         "lsr	r6, r5, #16\n\t"
62047 #endif
62048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62049         "lsls	r5, r5, #16\n\t"
62050 #else
62051         "lsl	r5, r5, #16\n\t"
62052 #endif
62053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62054         "adds	r2, r2, r5\n\t"
62055 #else
62056         "add	r2, r2, r5\n\t"
62057 #endif
62058 #ifdef WOLFSSL_KEIL
62059         "adcs	r3, r3, r6\n\t"
62060 #elif defined(__clang__)
62061         "adcs	r3, r6\n\t"
62062 #else
62063         "adc	r3, r6\n\t"
62064 #endif
62065 #ifdef WOLFSSL_KEIL
62066         "adcs	r4, r4, %[r]\n\t"
62067 #elif defined(__clang__)
62068         "adcs	r4, %[r]\n\t"
62069 #else
62070         "adc	r4, %[r]\n\t"
62071 #endif
62072 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62073         "adds	r2, r2, r5\n\t"
62074 #else
62075         "add	r2, r2, r5\n\t"
62076 #endif
62077 #ifdef WOLFSSL_KEIL
62078         "adcs	r3, r3, r6\n\t"
62079 #elif defined(__clang__)
62080         "adcs	r3, r6\n\t"
62081 #else
62082         "adc	r3, r6\n\t"
62083 #endif
62084 #ifdef WOLFSSL_KEIL
62085         "adcs	r4, r4, %[r]\n\t"
62086 #elif defined(__clang__)
62087         "adcs	r4, %[r]\n\t"
62088 #else
62089         "adc	r4, %[r]\n\t"
62090 #endif
62091 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62092         "lsrs	r5, %[a], #16\n\t"
62093 #else
62094         "lsr	r5, %[a], #16\n\t"
62095 #endif
62096 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62097         "lsrs	r6, r7, #16\n\t"
62098 #else
62099         "lsr	r6, r7, #16\n\t"
62100 #endif
62101 #ifdef WOLFSSL_KEIL
62102         "muls	r6, r5, r6\n\t"
62103 #elif defined(__clang__)
62104         "muls	r6, r5\n\t"
62105 #else
62106         "mul	r6, r5\n\t"
62107 #endif
62108 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62109         "adds	r3, r3, r6\n\t"
62110 #else
62111         "add	r3, r3, r6\n\t"
62112 #endif
62113 #ifdef WOLFSSL_KEIL
62114         "adcs	r4, r4, %[r]\n\t"
62115 #elif defined(__clang__)
62116         "adcs	r4, %[r]\n\t"
62117 #else
62118         "adc	r4, %[r]\n\t"
62119 #endif
62120 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62121         "adds	r3, r3, r6\n\t"
62122 #else
62123         "add	r3, r3, r6\n\t"
62124 #endif
62125 #ifdef WOLFSSL_KEIL
62126         "adcs	r4, r4, %[r]\n\t"
62127 #elif defined(__clang__)
62128         "adcs	r4, %[r]\n\t"
62129 #else
62130         "adc	r4, %[r]\n\t"
62131 #endif
62132         "uxth	r6, r7\n\t"
62133 #ifdef WOLFSSL_KEIL
62134         "muls	r5, r6, r5\n\t"
62135 #elif defined(__clang__)
62136         "muls	r5, r6\n\t"
62137 #else
62138         "mul	r5, r6\n\t"
62139 #endif
62140 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62141         "lsrs	r6, r5, #16\n\t"
62142 #else
62143         "lsr	r6, r5, #16\n\t"
62144 #endif
62145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62146         "lsls	r5, r5, #16\n\t"
62147 #else
62148         "lsl	r5, r5, #16\n\t"
62149 #endif
62150 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62151         "adds	r2, r2, r5\n\t"
62152 #else
62153         "add	r2, r2, r5\n\t"
62154 #endif
62155 #ifdef WOLFSSL_KEIL
62156         "adcs	r3, r3, r6\n\t"
62157 #elif defined(__clang__)
62158         "adcs	r3, r6\n\t"
62159 #else
62160         "adc	r3, r6\n\t"
62161 #endif
62162 #ifdef WOLFSSL_KEIL
62163         "adcs	r4, r4, %[r]\n\t"
62164 #elif defined(__clang__)
62165         "adcs	r4, %[r]\n\t"
62166 #else
62167         "adc	r4, %[r]\n\t"
62168 #endif
62169 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62170         "adds	r2, r2, r5\n\t"
62171 #else
62172         "add	r2, r2, r5\n\t"
62173 #endif
62174 #ifdef WOLFSSL_KEIL
62175         "adcs	r3, r3, r6\n\t"
62176 #elif defined(__clang__)
62177         "adcs	r3, r6\n\t"
62178 #else
62179         "adc	r3, r6\n\t"
62180 #endif
62181 #ifdef WOLFSSL_KEIL
62182         "adcs	r4, r4, %[r]\n\t"
62183 #elif defined(__clang__)
62184         "adcs	r4, %[r]\n\t"
62185 #else
62186         "adc	r4, %[r]\n\t"
62187 #endif
62188         "#  A[9] * A[6]\n\t"
62189         "mov	%[a], r9\n\t"
62190         "ldr	r7, [%[a], #24]\n\t"
62191         "mov	%[a], r11\n\t"
62192         "uxth	r5, %[a]\n\t"
62193         "uxth	r6, r7\n\t"
62194 #ifdef WOLFSSL_KEIL
62195         "muls	r6, r5, r6\n\t"
62196 #elif defined(__clang__)
62197         "muls	r6, r5\n\t"
62198 #else
62199         "mul	r6, r5\n\t"
62200 #endif
62201 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62202         "adds	r2, r2, r6\n\t"
62203 #else
62204         "add	r2, r2, r6\n\t"
62205 #endif
62206 #ifdef WOLFSSL_KEIL
62207         "adcs	r3, r3, %[r]\n\t"
62208 #elif defined(__clang__)
62209         "adcs	r3, %[r]\n\t"
62210 #else
62211         "adc	r3, %[r]\n\t"
62212 #endif
62213 #ifdef WOLFSSL_KEIL
62214         "adcs	r4, r4, %[r]\n\t"
62215 #elif defined(__clang__)
62216         "adcs	r4, %[r]\n\t"
62217 #else
62218         "adc	r4, %[r]\n\t"
62219 #endif
62220 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62221         "adds	r2, r2, r6\n\t"
62222 #else
62223         "add	r2, r2, r6\n\t"
62224 #endif
62225 #ifdef WOLFSSL_KEIL
62226         "adcs	r3, r3, %[r]\n\t"
62227 #elif defined(__clang__)
62228         "adcs	r3, %[r]\n\t"
62229 #else
62230         "adc	r3, %[r]\n\t"
62231 #endif
62232 #ifdef WOLFSSL_KEIL
62233         "adcs	r4, r4, %[r]\n\t"
62234 #elif defined(__clang__)
62235         "adcs	r4, %[r]\n\t"
62236 #else
62237         "adc	r4, %[r]\n\t"
62238 #endif
62239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62240         "lsrs	r6, r7, #16\n\t"
62241 #else
62242         "lsr	r6, r7, #16\n\t"
62243 #endif
62244 #ifdef WOLFSSL_KEIL
62245         "muls	r5, r6, r5\n\t"
62246 #elif defined(__clang__)
62247         "muls	r5, r6\n\t"
62248 #else
62249         "mul	r5, r6\n\t"
62250 #endif
62251 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62252         "lsrs	r6, r5, #16\n\t"
62253 #else
62254         "lsr	r6, r5, #16\n\t"
62255 #endif
62256 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62257         "lsls	r5, r5, #16\n\t"
62258 #else
62259         "lsl	r5, r5, #16\n\t"
62260 #endif
62261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62262         "adds	r2, r2, r5\n\t"
62263 #else
62264         "add	r2, r2, r5\n\t"
62265 #endif
62266 #ifdef WOLFSSL_KEIL
62267         "adcs	r3, r3, r6\n\t"
62268 #elif defined(__clang__)
62269         "adcs	r3, r6\n\t"
62270 #else
62271         "adc	r3, r6\n\t"
62272 #endif
62273 #ifdef WOLFSSL_KEIL
62274         "adcs	r4, r4, %[r]\n\t"
62275 #elif defined(__clang__)
62276         "adcs	r4, %[r]\n\t"
62277 #else
62278         "adc	r4, %[r]\n\t"
62279 #endif
62280 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62281         "adds	r2, r2, r5\n\t"
62282 #else
62283         "add	r2, r2, r5\n\t"
62284 #endif
62285 #ifdef WOLFSSL_KEIL
62286         "adcs	r3, r3, r6\n\t"
62287 #elif defined(__clang__)
62288         "adcs	r3, r6\n\t"
62289 #else
62290         "adc	r3, r6\n\t"
62291 #endif
62292 #ifdef WOLFSSL_KEIL
62293         "adcs	r4, r4, %[r]\n\t"
62294 #elif defined(__clang__)
62295         "adcs	r4, %[r]\n\t"
62296 #else
62297         "adc	r4, %[r]\n\t"
62298 #endif
62299 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62300         "lsrs	r5, %[a], #16\n\t"
62301 #else
62302         "lsr	r5, %[a], #16\n\t"
62303 #endif
62304 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62305         "lsrs	r6, r7, #16\n\t"
62306 #else
62307         "lsr	r6, r7, #16\n\t"
62308 #endif
62309 #ifdef WOLFSSL_KEIL
62310         "muls	r6, r5, r6\n\t"
62311 #elif defined(__clang__)
62312         "muls	r6, r5\n\t"
62313 #else
62314         "mul	r6, r5\n\t"
62315 #endif
62316 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62317         "adds	r3, r3, r6\n\t"
62318 #else
62319         "add	r3, r3, r6\n\t"
62320 #endif
62321 #ifdef WOLFSSL_KEIL
62322         "adcs	r4, r4, %[r]\n\t"
62323 #elif defined(__clang__)
62324         "adcs	r4, %[r]\n\t"
62325 #else
62326         "adc	r4, %[r]\n\t"
62327 #endif
62328 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62329         "adds	r3, r3, r6\n\t"
62330 #else
62331         "add	r3, r3, r6\n\t"
62332 #endif
62333 #ifdef WOLFSSL_KEIL
62334         "adcs	r4, r4, %[r]\n\t"
62335 #elif defined(__clang__)
62336         "adcs	r4, %[r]\n\t"
62337 #else
62338         "adc	r4, %[r]\n\t"
62339 #endif
62340         "uxth	r6, r7\n\t"
62341 #ifdef WOLFSSL_KEIL
62342         "muls	r5, r6, r5\n\t"
62343 #elif defined(__clang__)
62344         "muls	r5, r6\n\t"
62345 #else
62346         "mul	r5, r6\n\t"
62347 #endif
62348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62349         "lsrs	r6, r5, #16\n\t"
62350 #else
62351         "lsr	r6, r5, #16\n\t"
62352 #endif
62353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62354         "lsls	r5, r5, #16\n\t"
62355 #else
62356         "lsl	r5, r5, #16\n\t"
62357 #endif
62358 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62359         "adds	r2, r2, r5\n\t"
62360 #else
62361         "add	r2, r2, r5\n\t"
62362 #endif
62363 #ifdef WOLFSSL_KEIL
62364         "adcs	r3, r3, r6\n\t"
62365 #elif defined(__clang__)
62366         "adcs	r3, r6\n\t"
62367 #else
62368         "adc	r3, r6\n\t"
62369 #endif
62370 #ifdef WOLFSSL_KEIL
62371         "adcs	r4, r4, %[r]\n\t"
62372 #elif defined(__clang__)
62373         "adcs	r4, %[r]\n\t"
62374 #else
62375         "adc	r4, %[r]\n\t"
62376 #endif
62377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62378         "adds	r2, r2, r5\n\t"
62379 #else
62380         "add	r2, r2, r5\n\t"
62381 #endif
62382 #ifdef WOLFSSL_KEIL
62383         "adcs	r3, r3, r6\n\t"
62384 #elif defined(__clang__)
62385         "adcs	r3, r6\n\t"
62386 #else
62387         "adc	r3, r6\n\t"
62388 #endif
62389 #ifdef WOLFSSL_KEIL
62390         "adcs	r4, r4, %[r]\n\t"
62391 #elif defined(__clang__)
62392         "adcs	r4, %[r]\n\t"
62393 #else
62394         "adc	r4, %[r]\n\t"
62395 #endif
62396         "#  A[10] * A[5]\n\t"
62397         "mov	%[a], r9\n\t"
62398         "ldr	r7, [%[a], #20]\n\t"
62399         "mov	%[a], r12\n\t"
62400         "uxth	r5, %[a]\n\t"
62401         "uxth	r6, r7\n\t"
62402 #ifdef WOLFSSL_KEIL
62403         "muls	r6, r5, r6\n\t"
62404 #elif defined(__clang__)
62405         "muls	r6, r5\n\t"
62406 #else
62407         "mul	r6, r5\n\t"
62408 #endif
62409 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62410         "adds	r2, r2, r6\n\t"
62411 #else
62412         "add	r2, r2, r6\n\t"
62413 #endif
62414 #ifdef WOLFSSL_KEIL
62415         "adcs	r3, r3, %[r]\n\t"
62416 #elif defined(__clang__)
62417         "adcs	r3, %[r]\n\t"
62418 #else
62419         "adc	r3, %[r]\n\t"
62420 #endif
62421 #ifdef WOLFSSL_KEIL
62422         "adcs	r4, r4, %[r]\n\t"
62423 #elif defined(__clang__)
62424         "adcs	r4, %[r]\n\t"
62425 #else
62426         "adc	r4, %[r]\n\t"
62427 #endif
62428 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62429         "adds	r2, r2, r6\n\t"
62430 #else
62431         "add	r2, r2, r6\n\t"
62432 #endif
62433 #ifdef WOLFSSL_KEIL
62434         "adcs	r3, r3, %[r]\n\t"
62435 #elif defined(__clang__)
62436         "adcs	r3, %[r]\n\t"
62437 #else
62438         "adc	r3, %[r]\n\t"
62439 #endif
62440 #ifdef WOLFSSL_KEIL
62441         "adcs	r4, r4, %[r]\n\t"
62442 #elif defined(__clang__)
62443         "adcs	r4, %[r]\n\t"
62444 #else
62445         "adc	r4, %[r]\n\t"
62446 #endif
62447 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62448         "lsrs	r6, r7, #16\n\t"
62449 #else
62450         "lsr	r6, r7, #16\n\t"
62451 #endif
62452 #ifdef WOLFSSL_KEIL
62453         "muls	r5, r6, r5\n\t"
62454 #elif defined(__clang__)
62455         "muls	r5, r6\n\t"
62456 #else
62457         "mul	r5, r6\n\t"
62458 #endif
62459 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62460         "lsrs	r6, r5, #16\n\t"
62461 #else
62462         "lsr	r6, r5, #16\n\t"
62463 #endif
62464 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62465         "lsls	r5, r5, #16\n\t"
62466 #else
62467         "lsl	r5, r5, #16\n\t"
62468 #endif
62469 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62470         "adds	r2, r2, r5\n\t"
62471 #else
62472         "add	r2, r2, r5\n\t"
62473 #endif
62474 #ifdef WOLFSSL_KEIL
62475         "adcs	r3, r3, r6\n\t"
62476 #elif defined(__clang__)
62477         "adcs	r3, r6\n\t"
62478 #else
62479         "adc	r3, r6\n\t"
62480 #endif
62481 #ifdef WOLFSSL_KEIL
62482         "adcs	r4, r4, %[r]\n\t"
62483 #elif defined(__clang__)
62484         "adcs	r4, %[r]\n\t"
62485 #else
62486         "adc	r4, %[r]\n\t"
62487 #endif
62488 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62489         "adds	r2, r2, r5\n\t"
62490 #else
62491         "add	r2, r2, r5\n\t"
62492 #endif
62493 #ifdef WOLFSSL_KEIL
62494         "adcs	r3, r3, r6\n\t"
62495 #elif defined(__clang__)
62496         "adcs	r3, r6\n\t"
62497 #else
62498         "adc	r3, r6\n\t"
62499 #endif
62500 #ifdef WOLFSSL_KEIL
62501         "adcs	r4, r4, %[r]\n\t"
62502 #elif defined(__clang__)
62503         "adcs	r4, %[r]\n\t"
62504 #else
62505         "adc	r4, %[r]\n\t"
62506 #endif
62507 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62508         "lsrs	r5, %[a], #16\n\t"
62509 #else
62510         "lsr	r5, %[a], #16\n\t"
62511 #endif
62512 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62513         "lsrs	r6, r7, #16\n\t"
62514 #else
62515         "lsr	r6, r7, #16\n\t"
62516 #endif
62517 #ifdef WOLFSSL_KEIL
62518         "muls	r6, r5, r6\n\t"
62519 #elif defined(__clang__)
62520         "muls	r6, r5\n\t"
62521 #else
62522         "mul	r6, r5\n\t"
62523 #endif
62524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62525         "adds	r3, r3, r6\n\t"
62526 #else
62527         "add	r3, r3, r6\n\t"
62528 #endif
62529 #ifdef WOLFSSL_KEIL
62530         "adcs	r4, r4, %[r]\n\t"
62531 #elif defined(__clang__)
62532         "adcs	r4, %[r]\n\t"
62533 #else
62534         "adc	r4, %[r]\n\t"
62535 #endif
62536 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62537         "adds	r3, r3, r6\n\t"
62538 #else
62539         "add	r3, r3, r6\n\t"
62540 #endif
62541 #ifdef WOLFSSL_KEIL
62542         "adcs	r4, r4, %[r]\n\t"
62543 #elif defined(__clang__)
62544         "adcs	r4, %[r]\n\t"
62545 #else
62546         "adc	r4, %[r]\n\t"
62547 #endif
62548         "uxth	r6, r7\n\t"
62549 #ifdef WOLFSSL_KEIL
62550         "muls	r5, r6, r5\n\t"
62551 #elif defined(__clang__)
62552         "muls	r5, r6\n\t"
62553 #else
62554         "mul	r5, r6\n\t"
62555 #endif
62556 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62557         "lsrs	r6, r5, #16\n\t"
62558 #else
62559         "lsr	r6, r5, #16\n\t"
62560 #endif
62561 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62562         "lsls	r5, r5, #16\n\t"
62563 #else
62564         "lsl	r5, r5, #16\n\t"
62565 #endif
62566 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62567         "adds	r2, r2, r5\n\t"
62568 #else
62569         "add	r2, r2, r5\n\t"
62570 #endif
62571 #ifdef WOLFSSL_KEIL
62572         "adcs	r3, r3, r6\n\t"
62573 #elif defined(__clang__)
62574         "adcs	r3, r6\n\t"
62575 #else
62576         "adc	r3, r6\n\t"
62577 #endif
62578 #ifdef WOLFSSL_KEIL
62579         "adcs	r4, r4, %[r]\n\t"
62580 #elif defined(__clang__)
62581         "adcs	r4, %[r]\n\t"
62582 #else
62583         "adc	r4, %[r]\n\t"
62584 #endif
62585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62586         "adds	r2, r2, r5\n\t"
62587 #else
62588         "add	r2, r2, r5\n\t"
62589 #endif
62590 #ifdef WOLFSSL_KEIL
62591         "adcs	r3, r3, r6\n\t"
62592 #elif defined(__clang__)
62593         "adcs	r3, r6\n\t"
62594 #else
62595         "adc	r3, r6\n\t"
62596 #endif
62597 #ifdef WOLFSSL_KEIL
62598         "adcs	r4, r4, %[r]\n\t"
62599 #elif defined(__clang__)
62600         "adcs	r4, %[r]\n\t"
62601 #else
62602         "adc	r4, %[r]\n\t"
62603 #endif
62604         "#  A[11] * A[4]\n\t"
62605         "mov	%[a], r9\n\t"
62606         "ldr	r7, [%[a], #16]\n\t"
62607         "mov	%[a], lr\n\t"
62608         "uxth	r5, %[a]\n\t"
62609         "uxth	r6, r7\n\t"
62610 #ifdef WOLFSSL_KEIL
62611         "muls	r6, r5, r6\n\t"
62612 #elif defined(__clang__)
62613         "muls	r6, r5\n\t"
62614 #else
62615         "mul	r6, r5\n\t"
62616 #endif
62617 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62618         "adds	r2, r2, r6\n\t"
62619 #else
62620         "add	r2, r2, r6\n\t"
62621 #endif
62622 #ifdef WOLFSSL_KEIL
62623         "adcs	r3, r3, %[r]\n\t"
62624 #elif defined(__clang__)
62625         "adcs	r3, %[r]\n\t"
62626 #else
62627         "adc	r3, %[r]\n\t"
62628 #endif
62629 #ifdef WOLFSSL_KEIL
62630         "adcs	r4, r4, %[r]\n\t"
62631 #elif defined(__clang__)
62632         "adcs	r4, %[r]\n\t"
62633 #else
62634         "adc	r4, %[r]\n\t"
62635 #endif
62636 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62637         "adds	r2, r2, r6\n\t"
62638 #else
62639         "add	r2, r2, r6\n\t"
62640 #endif
62641 #ifdef WOLFSSL_KEIL
62642         "adcs	r3, r3, %[r]\n\t"
62643 #elif defined(__clang__)
62644         "adcs	r3, %[r]\n\t"
62645 #else
62646         "adc	r3, %[r]\n\t"
62647 #endif
62648 #ifdef WOLFSSL_KEIL
62649         "adcs	r4, r4, %[r]\n\t"
62650 #elif defined(__clang__)
62651         "adcs	r4, %[r]\n\t"
62652 #else
62653         "adc	r4, %[r]\n\t"
62654 #endif
62655 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62656         "lsrs	r6, r7, #16\n\t"
62657 #else
62658         "lsr	r6, r7, #16\n\t"
62659 #endif
62660 #ifdef WOLFSSL_KEIL
62661         "muls	r5, r6, r5\n\t"
62662 #elif defined(__clang__)
62663         "muls	r5, r6\n\t"
62664 #else
62665         "mul	r5, r6\n\t"
62666 #endif
62667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62668         "lsrs	r6, r5, #16\n\t"
62669 #else
62670         "lsr	r6, r5, #16\n\t"
62671 #endif
62672 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62673         "lsls	r5, r5, #16\n\t"
62674 #else
62675         "lsl	r5, r5, #16\n\t"
62676 #endif
62677 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62678         "adds	r2, r2, r5\n\t"
62679 #else
62680         "add	r2, r2, r5\n\t"
62681 #endif
62682 #ifdef WOLFSSL_KEIL
62683         "adcs	r3, r3, r6\n\t"
62684 #elif defined(__clang__)
62685         "adcs	r3, r6\n\t"
62686 #else
62687         "adc	r3, r6\n\t"
62688 #endif
62689 #ifdef WOLFSSL_KEIL
62690         "adcs	r4, r4, %[r]\n\t"
62691 #elif defined(__clang__)
62692         "adcs	r4, %[r]\n\t"
62693 #else
62694         "adc	r4, %[r]\n\t"
62695 #endif
62696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62697         "adds	r2, r2, r5\n\t"
62698 #else
62699         "add	r2, r2, r5\n\t"
62700 #endif
62701 #ifdef WOLFSSL_KEIL
62702         "adcs	r3, r3, r6\n\t"
62703 #elif defined(__clang__)
62704         "adcs	r3, r6\n\t"
62705 #else
62706         "adc	r3, r6\n\t"
62707 #endif
62708 #ifdef WOLFSSL_KEIL
62709         "adcs	r4, r4, %[r]\n\t"
62710 #elif defined(__clang__)
62711         "adcs	r4, %[r]\n\t"
62712 #else
62713         "adc	r4, %[r]\n\t"
62714 #endif
62715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62716         "lsrs	r5, %[a], #16\n\t"
62717 #else
62718         "lsr	r5, %[a], #16\n\t"
62719 #endif
62720 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62721         "lsrs	r6, r7, #16\n\t"
62722 #else
62723         "lsr	r6, r7, #16\n\t"
62724 #endif
62725 #ifdef WOLFSSL_KEIL
62726         "muls	r6, r5, r6\n\t"
62727 #elif defined(__clang__)
62728         "muls	r6, r5\n\t"
62729 #else
62730         "mul	r6, r5\n\t"
62731 #endif
62732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62733         "adds	r3, r3, r6\n\t"
62734 #else
62735         "add	r3, r3, r6\n\t"
62736 #endif
62737 #ifdef WOLFSSL_KEIL
62738         "adcs	r4, r4, %[r]\n\t"
62739 #elif defined(__clang__)
62740         "adcs	r4, %[r]\n\t"
62741 #else
62742         "adc	r4, %[r]\n\t"
62743 #endif
62744 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62745         "adds	r3, r3, r6\n\t"
62746 #else
62747         "add	r3, r3, r6\n\t"
62748 #endif
62749 #ifdef WOLFSSL_KEIL
62750         "adcs	r4, r4, %[r]\n\t"
62751 #elif defined(__clang__)
62752         "adcs	r4, %[r]\n\t"
62753 #else
62754         "adc	r4, %[r]\n\t"
62755 #endif
62756         "uxth	r6, r7\n\t"
62757 #ifdef WOLFSSL_KEIL
62758         "muls	r5, r6, r5\n\t"
62759 #elif defined(__clang__)
62760         "muls	r5, r6\n\t"
62761 #else
62762         "mul	r5, r6\n\t"
62763 #endif
62764 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62765         "lsrs	r6, r5, #16\n\t"
62766 #else
62767         "lsr	r6, r5, #16\n\t"
62768 #endif
62769 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62770         "lsls	r5, r5, #16\n\t"
62771 #else
62772         "lsl	r5, r5, #16\n\t"
62773 #endif
62774 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62775         "adds	r2, r2, r5\n\t"
62776 #else
62777         "add	r2, r2, r5\n\t"
62778 #endif
62779 #ifdef WOLFSSL_KEIL
62780         "adcs	r3, r3, r6\n\t"
62781 #elif defined(__clang__)
62782         "adcs	r3, r6\n\t"
62783 #else
62784         "adc	r3, r6\n\t"
62785 #endif
62786 #ifdef WOLFSSL_KEIL
62787         "adcs	r4, r4, %[r]\n\t"
62788 #elif defined(__clang__)
62789         "adcs	r4, %[r]\n\t"
62790 #else
62791         "adc	r4, %[r]\n\t"
62792 #endif
62793 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62794         "adds	r2, r2, r5\n\t"
62795 #else
62796         "add	r2, r2, r5\n\t"
62797 #endif
62798 #ifdef WOLFSSL_KEIL
62799         "adcs	r3, r3, r6\n\t"
62800 #elif defined(__clang__)
62801         "adcs	r3, r6\n\t"
62802 #else
62803         "adc	r3, r6\n\t"
62804 #endif
62805 #ifdef WOLFSSL_KEIL
62806         "adcs	r4, r4, %[r]\n\t"
62807 #elif defined(__clang__)
62808         "adcs	r4, %[r]\n\t"
62809 #else
62810         "adc	r4, %[r]\n\t"
62811 #endif
62812         "mov	%[r], r8\n\t"
62813         "str	r2, [%[r], #60]\n\t"
62814         "movs	%[r], #0\n\t"
62815         "#  A[11] * A[5]\n\t"
62816         "movs	r2, #0\n\t"
62817         "mov	%[a], r9\n\t"
62818         "ldr	r7, [%[a], #20]\n\t"
62819         "mov	%[a], lr\n\t"
62820         "uxth	r5, %[a]\n\t"
62821         "uxth	r6, r7\n\t"
62822 #ifdef WOLFSSL_KEIL
62823         "muls	r6, r5, r6\n\t"
62824 #elif defined(__clang__)
62825         "muls	r6, r5\n\t"
62826 #else
62827         "mul	r6, r5\n\t"
62828 #endif
62829 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62830         "adds	r3, r3, r6\n\t"
62831 #else
62832         "add	r3, r3, r6\n\t"
62833 #endif
62834 #ifdef WOLFSSL_KEIL
62835         "adcs	r4, r4, %[r]\n\t"
62836 #elif defined(__clang__)
62837         "adcs	r4, %[r]\n\t"
62838 #else
62839         "adc	r4, %[r]\n\t"
62840 #endif
62841 #ifdef WOLFSSL_KEIL
62842         "adcs	r2, r2, %[r]\n\t"
62843 #elif defined(__clang__)
62844         "adcs	r2, %[r]\n\t"
62845 #else
62846         "adc	r2, %[r]\n\t"
62847 #endif
62848 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62849         "adds	r3, r3, r6\n\t"
62850 #else
62851         "add	r3, r3, r6\n\t"
62852 #endif
62853 #ifdef WOLFSSL_KEIL
62854         "adcs	r4, r4, %[r]\n\t"
62855 #elif defined(__clang__)
62856         "adcs	r4, %[r]\n\t"
62857 #else
62858         "adc	r4, %[r]\n\t"
62859 #endif
62860 #ifdef WOLFSSL_KEIL
62861         "adcs	r2, r2, %[r]\n\t"
62862 #elif defined(__clang__)
62863         "adcs	r2, %[r]\n\t"
62864 #else
62865         "adc	r2, %[r]\n\t"
62866 #endif
62867 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62868         "lsrs	r6, r7, #16\n\t"
62869 #else
62870         "lsr	r6, r7, #16\n\t"
62871 #endif
62872 #ifdef WOLFSSL_KEIL
62873         "muls	r5, r6, r5\n\t"
62874 #elif defined(__clang__)
62875         "muls	r5, r6\n\t"
62876 #else
62877         "mul	r5, r6\n\t"
62878 #endif
62879 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62880         "lsrs	r6, r5, #16\n\t"
62881 #else
62882         "lsr	r6, r5, #16\n\t"
62883 #endif
62884 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62885         "lsls	r5, r5, #16\n\t"
62886 #else
62887         "lsl	r5, r5, #16\n\t"
62888 #endif
62889 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62890         "adds	r3, r3, r5\n\t"
62891 #else
62892         "add	r3, r3, r5\n\t"
62893 #endif
62894 #ifdef WOLFSSL_KEIL
62895         "adcs	r4, r4, r6\n\t"
62896 #elif defined(__clang__)
62897         "adcs	r4, r6\n\t"
62898 #else
62899         "adc	r4, r6\n\t"
62900 #endif
62901 #ifdef WOLFSSL_KEIL
62902         "adcs	r2, r2, %[r]\n\t"
62903 #elif defined(__clang__)
62904         "adcs	r2, %[r]\n\t"
62905 #else
62906         "adc	r2, %[r]\n\t"
62907 #endif
62908 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62909         "adds	r3, r3, r5\n\t"
62910 #else
62911         "add	r3, r3, r5\n\t"
62912 #endif
62913 #ifdef WOLFSSL_KEIL
62914         "adcs	r4, r4, r6\n\t"
62915 #elif defined(__clang__)
62916         "adcs	r4, r6\n\t"
62917 #else
62918         "adc	r4, r6\n\t"
62919 #endif
62920 #ifdef WOLFSSL_KEIL
62921         "adcs	r2, r2, %[r]\n\t"
62922 #elif defined(__clang__)
62923         "adcs	r2, %[r]\n\t"
62924 #else
62925         "adc	r2, %[r]\n\t"
62926 #endif
62927 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62928         "lsrs	r5, %[a], #16\n\t"
62929 #else
62930         "lsr	r5, %[a], #16\n\t"
62931 #endif
62932 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62933         "lsrs	r6, r7, #16\n\t"
62934 #else
62935         "lsr	r6, r7, #16\n\t"
62936 #endif
62937 #ifdef WOLFSSL_KEIL
62938         "muls	r6, r5, r6\n\t"
62939 #elif defined(__clang__)
62940         "muls	r6, r5\n\t"
62941 #else
62942         "mul	r6, r5\n\t"
62943 #endif
62944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62945         "adds	r4, r4, r6\n\t"
62946 #else
62947         "add	r4, r4, r6\n\t"
62948 #endif
62949 #ifdef WOLFSSL_KEIL
62950         "adcs	r2, r2, %[r]\n\t"
62951 #elif defined(__clang__)
62952         "adcs	r2, %[r]\n\t"
62953 #else
62954         "adc	r2, %[r]\n\t"
62955 #endif
62956 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62957         "adds	r4, r4, r6\n\t"
62958 #else
62959         "add	r4, r4, r6\n\t"
62960 #endif
62961 #ifdef WOLFSSL_KEIL
62962         "adcs	r2, r2, %[r]\n\t"
62963 #elif defined(__clang__)
62964         "adcs	r2, %[r]\n\t"
62965 #else
62966         "adc	r2, %[r]\n\t"
62967 #endif
62968         "uxth	r6, r7\n\t"
62969 #ifdef WOLFSSL_KEIL
62970         "muls	r5, r6, r5\n\t"
62971 #elif defined(__clang__)
62972         "muls	r5, r6\n\t"
62973 #else
62974         "mul	r5, r6\n\t"
62975 #endif
62976 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62977         "lsrs	r6, r5, #16\n\t"
62978 #else
62979         "lsr	r6, r5, #16\n\t"
62980 #endif
62981 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62982         "lsls	r5, r5, #16\n\t"
62983 #else
62984         "lsl	r5, r5, #16\n\t"
62985 #endif
62986 #if defined(__clang__) || defined(WOLFSSL_KEIL)
62987         "adds	r3, r3, r5\n\t"
62988 #else
62989         "add	r3, r3, r5\n\t"
62990 #endif
62991 #ifdef WOLFSSL_KEIL
62992         "adcs	r4, r4, r6\n\t"
62993 #elif defined(__clang__)
62994         "adcs	r4, r6\n\t"
62995 #else
62996         "adc	r4, r6\n\t"
62997 #endif
62998 #ifdef WOLFSSL_KEIL
62999         "adcs	r2, r2, %[r]\n\t"
63000 #elif defined(__clang__)
63001         "adcs	r2, %[r]\n\t"
63002 #else
63003         "adc	r2, %[r]\n\t"
63004 #endif
63005 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63006         "adds	r3, r3, r5\n\t"
63007 #else
63008         "add	r3, r3, r5\n\t"
63009 #endif
63010 #ifdef WOLFSSL_KEIL
63011         "adcs	r4, r4, r6\n\t"
63012 #elif defined(__clang__)
63013         "adcs	r4, r6\n\t"
63014 #else
63015         "adc	r4, r6\n\t"
63016 #endif
63017 #ifdef WOLFSSL_KEIL
63018         "adcs	r2, r2, %[r]\n\t"
63019 #elif defined(__clang__)
63020         "adcs	r2, %[r]\n\t"
63021 #else
63022         "adc	r2, %[r]\n\t"
63023 #endif
63024         "#  A[10] * A[6]\n\t"
63025         "mov	%[a], r9\n\t"
63026         "ldr	r7, [%[a], #24]\n\t"
63027         "mov	%[a], r12\n\t"
63028         "uxth	r5, %[a]\n\t"
63029         "uxth	r6, r7\n\t"
63030 #ifdef WOLFSSL_KEIL
63031         "muls	r6, r5, r6\n\t"
63032 #elif defined(__clang__)
63033         "muls	r6, r5\n\t"
63034 #else
63035         "mul	r6, r5\n\t"
63036 #endif
63037 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63038         "adds	r3, r3, r6\n\t"
63039 #else
63040         "add	r3, r3, r6\n\t"
63041 #endif
63042 #ifdef WOLFSSL_KEIL
63043         "adcs	r4, r4, %[r]\n\t"
63044 #elif defined(__clang__)
63045         "adcs	r4, %[r]\n\t"
63046 #else
63047         "adc	r4, %[r]\n\t"
63048 #endif
63049 #ifdef WOLFSSL_KEIL
63050         "adcs	r2, r2, %[r]\n\t"
63051 #elif defined(__clang__)
63052         "adcs	r2, %[r]\n\t"
63053 #else
63054         "adc	r2, %[r]\n\t"
63055 #endif
63056 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63057         "adds	r3, r3, r6\n\t"
63058 #else
63059         "add	r3, r3, r6\n\t"
63060 #endif
63061 #ifdef WOLFSSL_KEIL
63062         "adcs	r4, r4, %[r]\n\t"
63063 #elif defined(__clang__)
63064         "adcs	r4, %[r]\n\t"
63065 #else
63066         "adc	r4, %[r]\n\t"
63067 #endif
63068 #ifdef WOLFSSL_KEIL
63069         "adcs	r2, r2, %[r]\n\t"
63070 #elif defined(__clang__)
63071         "adcs	r2, %[r]\n\t"
63072 #else
63073         "adc	r2, %[r]\n\t"
63074 #endif
63075 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63076         "lsrs	r6, r7, #16\n\t"
63077 #else
63078         "lsr	r6, r7, #16\n\t"
63079 #endif
63080 #ifdef WOLFSSL_KEIL
63081         "muls	r5, r6, r5\n\t"
63082 #elif defined(__clang__)
63083         "muls	r5, r6\n\t"
63084 #else
63085         "mul	r5, r6\n\t"
63086 #endif
63087 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63088         "lsrs	r6, r5, #16\n\t"
63089 #else
63090         "lsr	r6, r5, #16\n\t"
63091 #endif
63092 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63093         "lsls	r5, r5, #16\n\t"
63094 #else
63095         "lsl	r5, r5, #16\n\t"
63096 #endif
63097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63098         "adds	r3, r3, r5\n\t"
63099 #else
63100         "add	r3, r3, r5\n\t"
63101 #endif
63102 #ifdef WOLFSSL_KEIL
63103         "adcs	r4, r4, r6\n\t"
63104 #elif defined(__clang__)
63105         "adcs	r4, r6\n\t"
63106 #else
63107         "adc	r4, r6\n\t"
63108 #endif
63109 #ifdef WOLFSSL_KEIL
63110         "adcs	r2, r2, %[r]\n\t"
63111 #elif defined(__clang__)
63112         "adcs	r2, %[r]\n\t"
63113 #else
63114         "adc	r2, %[r]\n\t"
63115 #endif
63116 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63117         "adds	r3, r3, r5\n\t"
63118 #else
63119         "add	r3, r3, r5\n\t"
63120 #endif
63121 #ifdef WOLFSSL_KEIL
63122         "adcs	r4, r4, r6\n\t"
63123 #elif defined(__clang__)
63124         "adcs	r4, r6\n\t"
63125 #else
63126         "adc	r4, r6\n\t"
63127 #endif
63128 #ifdef WOLFSSL_KEIL
63129         "adcs	r2, r2, %[r]\n\t"
63130 #elif defined(__clang__)
63131         "adcs	r2, %[r]\n\t"
63132 #else
63133         "adc	r2, %[r]\n\t"
63134 #endif
63135 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63136         "lsrs	r5, %[a], #16\n\t"
63137 #else
63138         "lsr	r5, %[a], #16\n\t"
63139 #endif
63140 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63141         "lsrs	r6, r7, #16\n\t"
63142 #else
63143         "lsr	r6, r7, #16\n\t"
63144 #endif
63145 #ifdef WOLFSSL_KEIL
63146         "muls	r6, r5, r6\n\t"
63147 #elif defined(__clang__)
63148         "muls	r6, r5\n\t"
63149 #else
63150         "mul	r6, r5\n\t"
63151 #endif
63152 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63153         "adds	r4, r4, r6\n\t"
63154 #else
63155         "add	r4, r4, r6\n\t"
63156 #endif
63157 #ifdef WOLFSSL_KEIL
63158         "adcs	r2, r2, %[r]\n\t"
63159 #elif defined(__clang__)
63160         "adcs	r2, %[r]\n\t"
63161 #else
63162         "adc	r2, %[r]\n\t"
63163 #endif
63164 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63165         "adds	r4, r4, r6\n\t"
63166 #else
63167         "add	r4, r4, r6\n\t"
63168 #endif
63169 #ifdef WOLFSSL_KEIL
63170         "adcs	r2, r2, %[r]\n\t"
63171 #elif defined(__clang__)
63172         "adcs	r2, %[r]\n\t"
63173 #else
63174         "adc	r2, %[r]\n\t"
63175 #endif
63176         "uxth	r6, r7\n\t"
63177 #ifdef WOLFSSL_KEIL
63178         "muls	r5, r6, r5\n\t"
63179 #elif defined(__clang__)
63180         "muls	r5, r6\n\t"
63181 #else
63182         "mul	r5, r6\n\t"
63183 #endif
63184 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63185         "lsrs	r6, r5, #16\n\t"
63186 #else
63187         "lsr	r6, r5, #16\n\t"
63188 #endif
63189 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63190         "lsls	r5, r5, #16\n\t"
63191 #else
63192         "lsl	r5, r5, #16\n\t"
63193 #endif
63194 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63195         "adds	r3, r3, r5\n\t"
63196 #else
63197         "add	r3, r3, r5\n\t"
63198 #endif
63199 #ifdef WOLFSSL_KEIL
63200         "adcs	r4, r4, r6\n\t"
63201 #elif defined(__clang__)
63202         "adcs	r4, r6\n\t"
63203 #else
63204         "adc	r4, r6\n\t"
63205 #endif
63206 #ifdef WOLFSSL_KEIL
63207         "adcs	r2, r2, %[r]\n\t"
63208 #elif defined(__clang__)
63209         "adcs	r2, %[r]\n\t"
63210 #else
63211         "adc	r2, %[r]\n\t"
63212 #endif
63213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63214         "adds	r3, r3, r5\n\t"
63215 #else
63216         "add	r3, r3, r5\n\t"
63217 #endif
63218 #ifdef WOLFSSL_KEIL
63219         "adcs	r4, r4, r6\n\t"
63220 #elif defined(__clang__)
63221         "adcs	r4, r6\n\t"
63222 #else
63223         "adc	r4, r6\n\t"
63224 #endif
63225 #ifdef WOLFSSL_KEIL
63226         "adcs	r2, r2, %[r]\n\t"
63227 #elif defined(__clang__)
63228         "adcs	r2, %[r]\n\t"
63229 #else
63230         "adc	r2, %[r]\n\t"
63231 #endif
63232         "#  A[9] * A[7]\n\t"
63233         "mov	%[a], r9\n\t"
63234         "ldr	r7, [%[a], #28]\n\t"
63235         "mov	%[a], r11\n\t"
63236         "uxth	r5, %[a]\n\t"
63237         "uxth	r6, r7\n\t"
63238 #ifdef WOLFSSL_KEIL
63239         "muls	r6, r5, r6\n\t"
63240 #elif defined(__clang__)
63241         "muls	r6, r5\n\t"
63242 #else
63243         "mul	r6, r5\n\t"
63244 #endif
63245 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63246         "adds	r3, r3, r6\n\t"
63247 #else
63248         "add	r3, r3, r6\n\t"
63249 #endif
63250 #ifdef WOLFSSL_KEIL
63251         "adcs	r4, r4, %[r]\n\t"
63252 #elif defined(__clang__)
63253         "adcs	r4, %[r]\n\t"
63254 #else
63255         "adc	r4, %[r]\n\t"
63256 #endif
63257 #ifdef WOLFSSL_KEIL
63258         "adcs	r2, r2, %[r]\n\t"
63259 #elif defined(__clang__)
63260         "adcs	r2, %[r]\n\t"
63261 #else
63262         "adc	r2, %[r]\n\t"
63263 #endif
63264 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63265         "adds	r3, r3, r6\n\t"
63266 #else
63267         "add	r3, r3, r6\n\t"
63268 #endif
63269 #ifdef WOLFSSL_KEIL
63270         "adcs	r4, r4, %[r]\n\t"
63271 #elif defined(__clang__)
63272         "adcs	r4, %[r]\n\t"
63273 #else
63274         "adc	r4, %[r]\n\t"
63275 #endif
63276 #ifdef WOLFSSL_KEIL
63277         "adcs	r2, r2, %[r]\n\t"
63278 #elif defined(__clang__)
63279         "adcs	r2, %[r]\n\t"
63280 #else
63281         "adc	r2, %[r]\n\t"
63282 #endif
63283 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63284         "lsrs	r6, r7, #16\n\t"
63285 #else
63286         "lsr	r6, r7, #16\n\t"
63287 #endif
63288 #ifdef WOLFSSL_KEIL
63289         "muls	r5, r6, r5\n\t"
63290 #elif defined(__clang__)
63291         "muls	r5, r6\n\t"
63292 #else
63293         "mul	r5, r6\n\t"
63294 #endif
63295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63296         "lsrs	r6, r5, #16\n\t"
63297 #else
63298         "lsr	r6, r5, #16\n\t"
63299 #endif
63300 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63301         "lsls	r5, r5, #16\n\t"
63302 #else
63303         "lsl	r5, r5, #16\n\t"
63304 #endif
63305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63306         "adds	r3, r3, r5\n\t"
63307 #else
63308         "add	r3, r3, r5\n\t"
63309 #endif
63310 #ifdef WOLFSSL_KEIL
63311         "adcs	r4, r4, r6\n\t"
63312 #elif defined(__clang__)
63313         "adcs	r4, r6\n\t"
63314 #else
63315         "adc	r4, r6\n\t"
63316 #endif
63317 #ifdef WOLFSSL_KEIL
63318         "adcs	r2, r2, %[r]\n\t"
63319 #elif defined(__clang__)
63320         "adcs	r2, %[r]\n\t"
63321 #else
63322         "adc	r2, %[r]\n\t"
63323 #endif
63324 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63325         "adds	r3, r3, r5\n\t"
63326 #else
63327         "add	r3, r3, r5\n\t"
63328 #endif
63329 #ifdef WOLFSSL_KEIL
63330         "adcs	r4, r4, r6\n\t"
63331 #elif defined(__clang__)
63332         "adcs	r4, r6\n\t"
63333 #else
63334         "adc	r4, r6\n\t"
63335 #endif
63336 #ifdef WOLFSSL_KEIL
63337         "adcs	r2, r2, %[r]\n\t"
63338 #elif defined(__clang__)
63339         "adcs	r2, %[r]\n\t"
63340 #else
63341         "adc	r2, %[r]\n\t"
63342 #endif
63343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63344         "lsrs	r5, %[a], #16\n\t"
63345 #else
63346         "lsr	r5, %[a], #16\n\t"
63347 #endif
63348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63349         "lsrs	r6, r7, #16\n\t"
63350 #else
63351         "lsr	r6, r7, #16\n\t"
63352 #endif
63353 #ifdef WOLFSSL_KEIL
63354         "muls	r6, r5, r6\n\t"
63355 #elif defined(__clang__)
63356         "muls	r6, r5\n\t"
63357 #else
63358         "mul	r6, r5\n\t"
63359 #endif
63360 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63361         "adds	r4, r4, r6\n\t"
63362 #else
63363         "add	r4, r4, r6\n\t"
63364 #endif
63365 #ifdef WOLFSSL_KEIL
63366         "adcs	r2, r2, %[r]\n\t"
63367 #elif defined(__clang__)
63368         "adcs	r2, %[r]\n\t"
63369 #else
63370         "adc	r2, %[r]\n\t"
63371 #endif
63372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63373         "adds	r4, r4, r6\n\t"
63374 #else
63375         "add	r4, r4, r6\n\t"
63376 #endif
63377 #ifdef WOLFSSL_KEIL
63378         "adcs	r2, r2, %[r]\n\t"
63379 #elif defined(__clang__)
63380         "adcs	r2, %[r]\n\t"
63381 #else
63382         "adc	r2, %[r]\n\t"
63383 #endif
63384         "uxth	r6, r7\n\t"
63385 #ifdef WOLFSSL_KEIL
63386         "muls	r5, r6, r5\n\t"
63387 #elif defined(__clang__)
63388         "muls	r5, r6\n\t"
63389 #else
63390         "mul	r5, r6\n\t"
63391 #endif
63392 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63393         "lsrs	r6, r5, #16\n\t"
63394 #else
63395         "lsr	r6, r5, #16\n\t"
63396 #endif
63397 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63398         "lsls	r5, r5, #16\n\t"
63399 #else
63400         "lsl	r5, r5, #16\n\t"
63401 #endif
63402 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63403         "adds	r3, r3, r5\n\t"
63404 #else
63405         "add	r3, r3, r5\n\t"
63406 #endif
63407 #ifdef WOLFSSL_KEIL
63408         "adcs	r4, r4, r6\n\t"
63409 #elif defined(__clang__)
63410         "adcs	r4, r6\n\t"
63411 #else
63412         "adc	r4, r6\n\t"
63413 #endif
63414 #ifdef WOLFSSL_KEIL
63415         "adcs	r2, r2, %[r]\n\t"
63416 #elif defined(__clang__)
63417         "adcs	r2, %[r]\n\t"
63418 #else
63419         "adc	r2, %[r]\n\t"
63420 #endif
63421 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63422         "adds	r3, r3, r5\n\t"
63423 #else
63424         "add	r3, r3, r5\n\t"
63425 #endif
63426 #ifdef WOLFSSL_KEIL
63427         "adcs	r4, r4, r6\n\t"
63428 #elif defined(__clang__)
63429         "adcs	r4, r6\n\t"
63430 #else
63431         "adc	r4, r6\n\t"
63432 #endif
63433 #ifdef WOLFSSL_KEIL
63434         "adcs	r2, r2, %[r]\n\t"
63435 #elif defined(__clang__)
63436         "adcs	r2, %[r]\n\t"
63437 #else
63438         "adc	r2, %[r]\n\t"
63439 #endif
63440         "#  A[8] * A[8]\n\t"
63441         "mov	r7, r10\n\t"
63442 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63443         "lsrs	r6, r7, #16\n\t"
63444 #else
63445         "lsr	r6, r7, #16\n\t"
63446 #endif
63447         "uxth	r5, r7\n\t"
63448 #ifdef WOLFSSL_KEIL
63449         "muls	r5, r5, r5\n\t"
63450 #elif defined(__clang__)
63451         "muls	r5, r5\n\t"
63452 #else
63453         "mul	r5, r5\n\t"
63454 #endif
63455 #ifdef WOLFSSL_KEIL
63456         "muls	r6, r6, r6\n\t"
63457 #elif defined(__clang__)
63458         "muls	r6, r6\n\t"
63459 #else
63460         "mul	r6, r6\n\t"
63461 #endif
63462 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63463         "adds	r3, r3, r5\n\t"
63464 #else
63465         "add	r3, r3, r5\n\t"
63466 #endif
63467 #ifdef WOLFSSL_KEIL
63468         "adcs	r4, r4, r6\n\t"
63469 #elif defined(__clang__)
63470         "adcs	r4, r6\n\t"
63471 #else
63472         "adc	r4, r6\n\t"
63473 #endif
63474 #ifdef WOLFSSL_KEIL
63475         "adcs	r2, r2, %[r]\n\t"
63476 #elif defined(__clang__)
63477         "adcs	r2, %[r]\n\t"
63478 #else
63479         "adc	r2, %[r]\n\t"
63480 #endif
63481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63482         "lsrs	r6, r7, #16\n\t"
63483 #else
63484         "lsr	r6, r7, #16\n\t"
63485 #endif
63486         "uxth	r5, r7\n\t"
63487 #ifdef WOLFSSL_KEIL
63488         "muls	r5, r6, r5\n\t"
63489 #elif defined(__clang__)
63490         "muls	r5, r6\n\t"
63491 #else
63492         "mul	r5, r6\n\t"
63493 #endif
63494 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63495         "lsrs	r6, r5, #15\n\t"
63496 #else
63497         "lsr	r6, r5, #15\n\t"
63498 #endif
63499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63500         "lsls	r5, r5, #17\n\t"
63501 #else
63502         "lsl	r5, r5, #17\n\t"
63503 #endif
63504 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63505         "adds	r3, r3, r5\n\t"
63506 #else
63507         "add	r3, r3, r5\n\t"
63508 #endif
63509 #ifdef WOLFSSL_KEIL
63510         "adcs	r4, r4, r6\n\t"
63511 #elif defined(__clang__)
63512         "adcs	r4, r6\n\t"
63513 #else
63514         "adc	r4, r6\n\t"
63515 #endif
63516 #ifdef WOLFSSL_KEIL
63517         "adcs	r2, r2, %[r]\n\t"
63518 #elif defined(__clang__)
63519         "adcs	r2, %[r]\n\t"
63520 #else
63521         "adc	r2, %[r]\n\t"
63522 #endif
63523         "mov	%[r], r8\n\t"
63524         "str	r3, [%[r], #64]\n\t"
63525         "movs	%[r], #0\n\t"
63526         "#  A[9] * A[8]\n\t"
63527         "movs	r3, #0\n\t"
63528         "mov	%[a], r9\n\t"
63529         "mov	%[a], r11\n\t"
63530         "uxth	r5, %[a]\n\t"
63531         "uxth	r6, r7\n\t"
63532 #ifdef WOLFSSL_KEIL
63533         "muls	r6, r5, r6\n\t"
63534 #elif defined(__clang__)
63535         "muls	r6, r5\n\t"
63536 #else
63537         "mul	r6, r5\n\t"
63538 #endif
63539 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63540         "adds	r4, r4, r6\n\t"
63541 #else
63542         "add	r4, r4, r6\n\t"
63543 #endif
63544 #ifdef WOLFSSL_KEIL
63545         "adcs	r2, r2, %[r]\n\t"
63546 #elif defined(__clang__)
63547         "adcs	r2, %[r]\n\t"
63548 #else
63549         "adc	r2, %[r]\n\t"
63550 #endif
63551 #ifdef WOLFSSL_KEIL
63552         "adcs	r3, r3, %[r]\n\t"
63553 #elif defined(__clang__)
63554         "adcs	r3, %[r]\n\t"
63555 #else
63556         "adc	r3, %[r]\n\t"
63557 #endif
63558 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63559         "adds	r4, r4, r6\n\t"
63560 #else
63561         "add	r4, r4, r6\n\t"
63562 #endif
63563 #ifdef WOLFSSL_KEIL
63564         "adcs	r2, r2, %[r]\n\t"
63565 #elif defined(__clang__)
63566         "adcs	r2, %[r]\n\t"
63567 #else
63568         "adc	r2, %[r]\n\t"
63569 #endif
63570 #ifdef WOLFSSL_KEIL
63571         "adcs	r3, r3, %[r]\n\t"
63572 #elif defined(__clang__)
63573         "adcs	r3, %[r]\n\t"
63574 #else
63575         "adc	r3, %[r]\n\t"
63576 #endif
63577 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63578         "lsrs	r6, r7, #16\n\t"
63579 #else
63580         "lsr	r6, r7, #16\n\t"
63581 #endif
63582 #ifdef WOLFSSL_KEIL
63583         "muls	r5, r6, r5\n\t"
63584 #elif defined(__clang__)
63585         "muls	r5, r6\n\t"
63586 #else
63587         "mul	r5, r6\n\t"
63588 #endif
63589 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63590         "lsrs	r6, r5, #16\n\t"
63591 #else
63592         "lsr	r6, r5, #16\n\t"
63593 #endif
63594 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63595         "lsls	r5, r5, #16\n\t"
63596 #else
63597         "lsl	r5, r5, #16\n\t"
63598 #endif
63599 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63600         "adds	r4, r4, r5\n\t"
63601 #else
63602         "add	r4, r4, r5\n\t"
63603 #endif
63604 #ifdef WOLFSSL_KEIL
63605         "adcs	r2, r2, r6\n\t"
63606 #elif defined(__clang__)
63607         "adcs	r2, r6\n\t"
63608 #else
63609         "adc	r2, r6\n\t"
63610 #endif
63611 #ifdef WOLFSSL_KEIL
63612         "adcs	r3, r3, %[r]\n\t"
63613 #elif defined(__clang__)
63614         "adcs	r3, %[r]\n\t"
63615 #else
63616         "adc	r3, %[r]\n\t"
63617 #endif
63618 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63619         "adds	r4, r4, r5\n\t"
63620 #else
63621         "add	r4, r4, r5\n\t"
63622 #endif
63623 #ifdef WOLFSSL_KEIL
63624         "adcs	r2, r2, r6\n\t"
63625 #elif defined(__clang__)
63626         "adcs	r2, r6\n\t"
63627 #else
63628         "adc	r2, r6\n\t"
63629 #endif
63630 #ifdef WOLFSSL_KEIL
63631         "adcs	r3, r3, %[r]\n\t"
63632 #elif defined(__clang__)
63633         "adcs	r3, %[r]\n\t"
63634 #else
63635         "adc	r3, %[r]\n\t"
63636 #endif
63637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63638         "lsrs	r5, %[a], #16\n\t"
63639 #else
63640         "lsr	r5, %[a], #16\n\t"
63641 #endif
63642 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63643         "lsrs	r6, r7, #16\n\t"
63644 #else
63645         "lsr	r6, r7, #16\n\t"
63646 #endif
63647 #ifdef WOLFSSL_KEIL
63648         "muls	r6, r5, r6\n\t"
63649 #elif defined(__clang__)
63650         "muls	r6, r5\n\t"
63651 #else
63652         "mul	r6, r5\n\t"
63653 #endif
63654 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63655         "adds	r2, r2, r6\n\t"
63656 #else
63657         "add	r2, r2, r6\n\t"
63658 #endif
63659 #ifdef WOLFSSL_KEIL
63660         "adcs	r3, r3, %[r]\n\t"
63661 #elif defined(__clang__)
63662         "adcs	r3, %[r]\n\t"
63663 #else
63664         "adc	r3, %[r]\n\t"
63665 #endif
63666 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63667         "adds	r2, r2, r6\n\t"
63668 #else
63669         "add	r2, r2, r6\n\t"
63670 #endif
63671 #ifdef WOLFSSL_KEIL
63672         "adcs	r3, r3, %[r]\n\t"
63673 #elif defined(__clang__)
63674         "adcs	r3, %[r]\n\t"
63675 #else
63676         "adc	r3, %[r]\n\t"
63677 #endif
63678         "uxth	r6, r7\n\t"
63679 #ifdef WOLFSSL_KEIL
63680         "muls	r5, r6, r5\n\t"
63681 #elif defined(__clang__)
63682         "muls	r5, r6\n\t"
63683 #else
63684         "mul	r5, r6\n\t"
63685 #endif
63686 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63687         "lsrs	r6, r5, #16\n\t"
63688 #else
63689         "lsr	r6, r5, #16\n\t"
63690 #endif
63691 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63692         "lsls	r5, r5, #16\n\t"
63693 #else
63694         "lsl	r5, r5, #16\n\t"
63695 #endif
63696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63697         "adds	r4, r4, r5\n\t"
63698 #else
63699         "add	r4, r4, r5\n\t"
63700 #endif
63701 #ifdef WOLFSSL_KEIL
63702         "adcs	r2, r2, r6\n\t"
63703 #elif defined(__clang__)
63704         "adcs	r2, r6\n\t"
63705 #else
63706         "adc	r2, r6\n\t"
63707 #endif
63708 #ifdef WOLFSSL_KEIL
63709         "adcs	r3, r3, %[r]\n\t"
63710 #elif defined(__clang__)
63711         "adcs	r3, %[r]\n\t"
63712 #else
63713         "adc	r3, %[r]\n\t"
63714 #endif
63715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63716         "adds	r4, r4, r5\n\t"
63717 #else
63718         "add	r4, r4, r5\n\t"
63719 #endif
63720 #ifdef WOLFSSL_KEIL
63721         "adcs	r2, r2, r6\n\t"
63722 #elif defined(__clang__)
63723         "adcs	r2, r6\n\t"
63724 #else
63725         "adc	r2, r6\n\t"
63726 #endif
63727 #ifdef WOLFSSL_KEIL
63728         "adcs	r3, r3, %[r]\n\t"
63729 #elif defined(__clang__)
63730         "adcs	r3, %[r]\n\t"
63731 #else
63732         "adc	r3, %[r]\n\t"
63733 #endif
63734         "#  A[10] * A[7]\n\t"
63735         "mov	%[a], r9\n\t"
63736         "ldr	r7, [%[a], #28]\n\t"
63737         "mov	%[a], r12\n\t"
63738         "uxth	r5, %[a]\n\t"
63739         "uxth	r6, r7\n\t"
63740 #ifdef WOLFSSL_KEIL
63741         "muls	r6, r5, r6\n\t"
63742 #elif defined(__clang__)
63743         "muls	r6, r5\n\t"
63744 #else
63745         "mul	r6, r5\n\t"
63746 #endif
63747 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63748         "adds	r4, r4, r6\n\t"
63749 #else
63750         "add	r4, r4, r6\n\t"
63751 #endif
63752 #ifdef WOLFSSL_KEIL
63753         "adcs	r2, r2, %[r]\n\t"
63754 #elif defined(__clang__)
63755         "adcs	r2, %[r]\n\t"
63756 #else
63757         "adc	r2, %[r]\n\t"
63758 #endif
63759 #ifdef WOLFSSL_KEIL
63760         "adcs	r3, r3, %[r]\n\t"
63761 #elif defined(__clang__)
63762         "adcs	r3, %[r]\n\t"
63763 #else
63764         "adc	r3, %[r]\n\t"
63765 #endif
63766 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63767         "adds	r4, r4, r6\n\t"
63768 #else
63769         "add	r4, r4, r6\n\t"
63770 #endif
63771 #ifdef WOLFSSL_KEIL
63772         "adcs	r2, r2, %[r]\n\t"
63773 #elif defined(__clang__)
63774         "adcs	r2, %[r]\n\t"
63775 #else
63776         "adc	r2, %[r]\n\t"
63777 #endif
63778 #ifdef WOLFSSL_KEIL
63779         "adcs	r3, r3, %[r]\n\t"
63780 #elif defined(__clang__)
63781         "adcs	r3, %[r]\n\t"
63782 #else
63783         "adc	r3, %[r]\n\t"
63784 #endif
63785 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63786         "lsrs	r6, r7, #16\n\t"
63787 #else
63788         "lsr	r6, r7, #16\n\t"
63789 #endif
63790 #ifdef WOLFSSL_KEIL
63791         "muls	r5, r6, r5\n\t"
63792 #elif defined(__clang__)
63793         "muls	r5, r6\n\t"
63794 #else
63795         "mul	r5, r6\n\t"
63796 #endif
63797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63798         "lsrs	r6, r5, #16\n\t"
63799 #else
63800         "lsr	r6, r5, #16\n\t"
63801 #endif
63802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63803         "lsls	r5, r5, #16\n\t"
63804 #else
63805         "lsl	r5, r5, #16\n\t"
63806 #endif
63807 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63808         "adds	r4, r4, r5\n\t"
63809 #else
63810         "add	r4, r4, r5\n\t"
63811 #endif
63812 #ifdef WOLFSSL_KEIL
63813         "adcs	r2, r2, r6\n\t"
63814 #elif defined(__clang__)
63815         "adcs	r2, r6\n\t"
63816 #else
63817         "adc	r2, r6\n\t"
63818 #endif
63819 #ifdef WOLFSSL_KEIL
63820         "adcs	r3, r3, %[r]\n\t"
63821 #elif defined(__clang__)
63822         "adcs	r3, %[r]\n\t"
63823 #else
63824         "adc	r3, %[r]\n\t"
63825 #endif
63826 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63827         "adds	r4, r4, r5\n\t"
63828 #else
63829         "add	r4, r4, r5\n\t"
63830 #endif
63831 #ifdef WOLFSSL_KEIL
63832         "adcs	r2, r2, r6\n\t"
63833 #elif defined(__clang__)
63834         "adcs	r2, r6\n\t"
63835 #else
63836         "adc	r2, r6\n\t"
63837 #endif
63838 #ifdef WOLFSSL_KEIL
63839         "adcs	r3, r3, %[r]\n\t"
63840 #elif defined(__clang__)
63841         "adcs	r3, %[r]\n\t"
63842 #else
63843         "adc	r3, %[r]\n\t"
63844 #endif
63845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63846         "lsrs	r5, %[a], #16\n\t"
63847 #else
63848         "lsr	r5, %[a], #16\n\t"
63849 #endif
63850 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63851         "lsrs	r6, r7, #16\n\t"
63852 #else
63853         "lsr	r6, r7, #16\n\t"
63854 #endif
63855 #ifdef WOLFSSL_KEIL
63856         "muls	r6, r5, r6\n\t"
63857 #elif defined(__clang__)
63858         "muls	r6, r5\n\t"
63859 #else
63860         "mul	r6, r5\n\t"
63861 #endif
63862 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63863         "adds	r2, r2, r6\n\t"
63864 #else
63865         "add	r2, r2, r6\n\t"
63866 #endif
63867 #ifdef WOLFSSL_KEIL
63868         "adcs	r3, r3, %[r]\n\t"
63869 #elif defined(__clang__)
63870         "adcs	r3, %[r]\n\t"
63871 #else
63872         "adc	r3, %[r]\n\t"
63873 #endif
63874 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63875         "adds	r2, r2, r6\n\t"
63876 #else
63877         "add	r2, r2, r6\n\t"
63878 #endif
63879 #ifdef WOLFSSL_KEIL
63880         "adcs	r3, r3, %[r]\n\t"
63881 #elif defined(__clang__)
63882         "adcs	r3, %[r]\n\t"
63883 #else
63884         "adc	r3, %[r]\n\t"
63885 #endif
63886         "uxth	r6, r7\n\t"
63887 #ifdef WOLFSSL_KEIL
63888         "muls	r5, r6, r5\n\t"
63889 #elif defined(__clang__)
63890         "muls	r5, r6\n\t"
63891 #else
63892         "mul	r5, r6\n\t"
63893 #endif
63894 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63895         "lsrs	r6, r5, #16\n\t"
63896 #else
63897         "lsr	r6, r5, #16\n\t"
63898 #endif
63899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63900         "lsls	r5, r5, #16\n\t"
63901 #else
63902         "lsl	r5, r5, #16\n\t"
63903 #endif
63904 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63905         "adds	r4, r4, r5\n\t"
63906 #else
63907         "add	r4, r4, r5\n\t"
63908 #endif
63909 #ifdef WOLFSSL_KEIL
63910         "adcs	r2, r2, r6\n\t"
63911 #elif defined(__clang__)
63912         "adcs	r2, r6\n\t"
63913 #else
63914         "adc	r2, r6\n\t"
63915 #endif
63916 #ifdef WOLFSSL_KEIL
63917         "adcs	r3, r3, %[r]\n\t"
63918 #elif defined(__clang__)
63919         "adcs	r3, %[r]\n\t"
63920 #else
63921         "adc	r3, %[r]\n\t"
63922 #endif
63923 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63924         "adds	r4, r4, r5\n\t"
63925 #else
63926         "add	r4, r4, r5\n\t"
63927 #endif
63928 #ifdef WOLFSSL_KEIL
63929         "adcs	r2, r2, r6\n\t"
63930 #elif defined(__clang__)
63931         "adcs	r2, r6\n\t"
63932 #else
63933         "adc	r2, r6\n\t"
63934 #endif
63935 #ifdef WOLFSSL_KEIL
63936         "adcs	r3, r3, %[r]\n\t"
63937 #elif defined(__clang__)
63938         "adcs	r3, %[r]\n\t"
63939 #else
63940         "adc	r3, %[r]\n\t"
63941 #endif
63942         "#  A[11] * A[6]\n\t"
63943         "mov	%[a], r9\n\t"
63944         "ldr	r7, [%[a], #24]\n\t"
63945         "mov	%[a], lr\n\t"
63946         "uxth	r5, %[a]\n\t"
63947         "uxth	r6, r7\n\t"
63948 #ifdef WOLFSSL_KEIL
63949         "muls	r6, r5, r6\n\t"
63950 #elif defined(__clang__)
63951         "muls	r6, r5\n\t"
63952 #else
63953         "mul	r6, r5\n\t"
63954 #endif
63955 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63956         "adds	r4, r4, r6\n\t"
63957 #else
63958         "add	r4, r4, r6\n\t"
63959 #endif
63960 #ifdef WOLFSSL_KEIL
63961         "adcs	r2, r2, %[r]\n\t"
63962 #elif defined(__clang__)
63963         "adcs	r2, %[r]\n\t"
63964 #else
63965         "adc	r2, %[r]\n\t"
63966 #endif
63967 #ifdef WOLFSSL_KEIL
63968         "adcs	r3, r3, %[r]\n\t"
63969 #elif defined(__clang__)
63970         "adcs	r3, %[r]\n\t"
63971 #else
63972         "adc	r3, %[r]\n\t"
63973 #endif
63974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63975         "adds	r4, r4, r6\n\t"
63976 #else
63977         "add	r4, r4, r6\n\t"
63978 #endif
63979 #ifdef WOLFSSL_KEIL
63980         "adcs	r2, r2, %[r]\n\t"
63981 #elif defined(__clang__)
63982         "adcs	r2, %[r]\n\t"
63983 #else
63984         "adc	r2, %[r]\n\t"
63985 #endif
63986 #ifdef WOLFSSL_KEIL
63987         "adcs	r3, r3, %[r]\n\t"
63988 #elif defined(__clang__)
63989         "adcs	r3, %[r]\n\t"
63990 #else
63991         "adc	r3, %[r]\n\t"
63992 #endif
63993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
63994         "lsrs	r6, r7, #16\n\t"
63995 #else
63996         "lsr	r6, r7, #16\n\t"
63997 #endif
63998 #ifdef WOLFSSL_KEIL
63999         "muls	r5, r6, r5\n\t"
64000 #elif defined(__clang__)
64001         "muls	r5, r6\n\t"
64002 #else
64003         "mul	r5, r6\n\t"
64004 #endif
64005 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64006         "lsrs	r6, r5, #16\n\t"
64007 #else
64008         "lsr	r6, r5, #16\n\t"
64009 #endif
64010 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64011         "lsls	r5, r5, #16\n\t"
64012 #else
64013         "lsl	r5, r5, #16\n\t"
64014 #endif
64015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64016         "adds	r4, r4, r5\n\t"
64017 #else
64018         "add	r4, r4, r5\n\t"
64019 #endif
64020 #ifdef WOLFSSL_KEIL
64021         "adcs	r2, r2, r6\n\t"
64022 #elif defined(__clang__)
64023         "adcs	r2, r6\n\t"
64024 #else
64025         "adc	r2, r6\n\t"
64026 #endif
64027 #ifdef WOLFSSL_KEIL
64028         "adcs	r3, r3, %[r]\n\t"
64029 #elif defined(__clang__)
64030         "adcs	r3, %[r]\n\t"
64031 #else
64032         "adc	r3, %[r]\n\t"
64033 #endif
64034 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64035         "adds	r4, r4, r5\n\t"
64036 #else
64037         "add	r4, r4, r5\n\t"
64038 #endif
64039 #ifdef WOLFSSL_KEIL
64040         "adcs	r2, r2, r6\n\t"
64041 #elif defined(__clang__)
64042         "adcs	r2, r6\n\t"
64043 #else
64044         "adc	r2, r6\n\t"
64045 #endif
64046 #ifdef WOLFSSL_KEIL
64047         "adcs	r3, r3, %[r]\n\t"
64048 #elif defined(__clang__)
64049         "adcs	r3, %[r]\n\t"
64050 #else
64051         "adc	r3, %[r]\n\t"
64052 #endif
64053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64054         "lsrs	r5, %[a], #16\n\t"
64055 #else
64056         "lsr	r5, %[a], #16\n\t"
64057 #endif
64058 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64059         "lsrs	r6, r7, #16\n\t"
64060 #else
64061         "lsr	r6, r7, #16\n\t"
64062 #endif
64063 #ifdef WOLFSSL_KEIL
64064         "muls	r6, r5, r6\n\t"
64065 #elif defined(__clang__)
64066         "muls	r6, r5\n\t"
64067 #else
64068         "mul	r6, r5\n\t"
64069 #endif
64070 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64071         "adds	r2, r2, r6\n\t"
64072 #else
64073         "add	r2, r2, r6\n\t"
64074 #endif
64075 #ifdef WOLFSSL_KEIL
64076         "adcs	r3, r3, %[r]\n\t"
64077 #elif defined(__clang__)
64078         "adcs	r3, %[r]\n\t"
64079 #else
64080         "adc	r3, %[r]\n\t"
64081 #endif
64082 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64083         "adds	r2, r2, r6\n\t"
64084 #else
64085         "add	r2, r2, r6\n\t"
64086 #endif
64087 #ifdef WOLFSSL_KEIL
64088         "adcs	r3, r3, %[r]\n\t"
64089 #elif defined(__clang__)
64090         "adcs	r3, %[r]\n\t"
64091 #else
64092         "adc	r3, %[r]\n\t"
64093 #endif
64094         "uxth	r6, r7\n\t"
64095 #ifdef WOLFSSL_KEIL
64096         "muls	r5, r6, r5\n\t"
64097 #elif defined(__clang__)
64098         "muls	r5, r6\n\t"
64099 #else
64100         "mul	r5, r6\n\t"
64101 #endif
64102 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64103         "lsrs	r6, r5, #16\n\t"
64104 #else
64105         "lsr	r6, r5, #16\n\t"
64106 #endif
64107 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64108         "lsls	r5, r5, #16\n\t"
64109 #else
64110         "lsl	r5, r5, #16\n\t"
64111 #endif
64112 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64113         "adds	r4, r4, r5\n\t"
64114 #else
64115         "add	r4, r4, r5\n\t"
64116 #endif
64117 #ifdef WOLFSSL_KEIL
64118         "adcs	r2, r2, r6\n\t"
64119 #elif defined(__clang__)
64120         "adcs	r2, r6\n\t"
64121 #else
64122         "adc	r2, r6\n\t"
64123 #endif
64124 #ifdef WOLFSSL_KEIL
64125         "adcs	r3, r3, %[r]\n\t"
64126 #elif defined(__clang__)
64127         "adcs	r3, %[r]\n\t"
64128 #else
64129         "adc	r3, %[r]\n\t"
64130 #endif
64131 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64132         "adds	r4, r4, r5\n\t"
64133 #else
64134         "add	r4, r4, r5\n\t"
64135 #endif
64136 #ifdef WOLFSSL_KEIL
64137         "adcs	r2, r2, r6\n\t"
64138 #elif defined(__clang__)
64139         "adcs	r2, r6\n\t"
64140 #else
64141         "adc	r2, r6\n\t"
64142 #endif
64143 #ifdef WOLFSSL_KEIL
64144         "adcs	r3, r3, %[r]\n\t"
64145 #elif defined(__clang__)
64146         "adcs	r3, %[r]\n\t"
64147 #else
64148         "adc	r3, %[r]\n\t"
64149 #endif
64150         "mov	%[r], r8\n\t"
64151         "str	r4, [%[r], #68]\n\t"
64152         "movs	%[r], #0\n\t"
64153         "#  A[11] * A[7]\n\t"
64154         "movs	r4, #0\n\t"
64155         "mov	%[a], r9\n\t"
64156         "ldr	r7, [%[a], #28]\n\t"
64157         "mov	%[a], lr\n\t"
64158         "uxth	r5, %[a]\n\t"
64159         "uxth	r6, r7\n\t"
64160 #ifdef WOLFSSL_KEIL
64161         "muls	r6, r5, r6\n\t"
64162 #elif defined(__clang__)
64163         "muls	r6, r5\n\t"
64164 #else
64165         "mul	r6, r5\n\t"
64166 #endif
64167 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64168         "adds	r2, r2, r6\n\t"
64169 #else
64170         "add	r2, r2, r6\n\t"
64171 #endif
64172 #ifdef WOLFSSL_KEIL
64173         "adcs	r3, r3, %[r]\n\t"
64174 #elif defined(__clang__)
64175         "adcs	r3, %[r]\n\t"
64176 #else
64177         "adc	r3, %[r]\n\t"
64178 #endif
64179 #ifdef WOLFSSL_KEIL
64180         "adcs	r4, r4, %[r]\n\t"
64181 #elif defined(__clang__)
64182         "adcs	r4, %[r]\n\t"
64183 #else
64184         "adc	r4, %[r]\n\t"
64185 #endif
64186 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64187         "adds	r2, r2, r6\n\t"
64188 #else
64189         "add	r2, r2, r6\n\t"
64190 #endif
64191 #ifdef WOLFSSL_KEIL
64192         "adcs	r3, r3, %[r]\n\t"
64193 #elif defined(__clang__)
64194         "adcs	r3, %[r]\n\t"
64195 #else
64196         "adc	r3, %[r]\n\t"
64197 #endif
64198 #ifdef WOLFSSL_KEIL
64199         "adcs	r4, r4, %[r]\n\t"
64200 #elif defined(__clang__)
64201         "adcs	r4, %[r]\n\t"
64202 #else
64203         "adc	r4, %[r]\n\t"
64204 #endif
64205 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64206         "lsrs	r6, r7, #16\n\t"
64207 #else
64208         "lsr	r6, r7, #16\n\t"
64209 #endif
64210 #ifdef WOLFSSL_KEIL
64211         "muls	r5, r6, r5\n\t"
64212 #elif defined(__clang__)
64213         "muls	r5, r6\n\t"
64214 #else
64215         "mul	r5, r6\n\t"
64216 #endif
64217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64218         "lsrs	r6, r5, #16\n\t"
64219 #else
64220         "lsr	r6, r5, #16\n\t"
64221 #endif
64222 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64223         "lsls	r5, r5, #16\n\t"
64224 #else
64225         "lsl	r5, r5, #16\n\t"
64226 #endif
64227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64228         "adds	r2, r2, r5\n\t"
64229 #else
64230         "add	r2, r2, r5\n\t"
64231 #endif
64232 #ifdef WOLFSSL_KEIL
64233         "adcs	r3, r3, r6\n\t"
64234 #elif defined(__clang__)
64235         "adcs	r3, r6\n\t"
64236 #else
64237         "adc	r3, r6\n\t"
64238 #endif
64239 #ifdef WOLFSSL_KEIL
64240         "adcs	r4, r4, %[r]\n\t"
64241 #elif defined(__clang__)
64242         "adcs	r4, %[r]\n\t"
64243 #else
64244         "adc	r4, %[r]\n\t"
64245 #endif
64246 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64247         "adds	r2, r2, r5\n\t"
64248 #else
64249         "add	r2, r2, r5\n\t"
64250 #endif
64251 #ifdef WOLFSSL_KEIL
64252         "adcs	r3, r3, r6\n\t"
64253 #elif defined(__clang__)
64254         "adcs	r3, r6\n\t"
64255 #else
64256         "adc	r3, r6\n\t"
64257 #endif
64258 #ifdef WOLFSSL_KEIL
64259         "adcs	r4, r4, %[r]\n\t"
64260 #elif defined(__clang__)
64261         "adcs	r4, %[r]\n\t"
64262 #else
64263         "adc	r4, %[r]\n\t"
64264 #endif
64265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64266         "lsrs	r5, %[a], #16\n\t"
64267 #else
64268         "lsr	r5, %[a], #16\n\t"
64269 #endif
64270 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64271         "lsrs	r6, r7, #16\n\t"
64272 #else
64273         "lsr	r6, r7, #16\n\t"
64274 #endif
64275 #ifdef WOLFSSL_KEIL
64276         "muls	r6, r5, r6\n\t"
64277 #elif defined(__clang__)
64278         "muls	r6, r5\n\t"
64279 #else
64280         "mul	r6, r5\n\t"
64281 #endif
64282 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64283         "adds	r3, r3, r6\n\t"
64284 #else
64285         "add	r3, r3, r6\n\t"
64286 #endif
64287 #ifdef WOLFSSL_KEIL
64288         "adcs	r4, r4, %[r]\n\t"
64289 #elif defined(__clang__)
64290         "adcs	r4, %[r]\n\t"
64291 #else
64292         "adc	r4, %[r]\n\t"
64293 #endif
64294 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64295         "adds	r3, r3, r6\n\t"
64296 #else
64297         "add	r3, r3, r6\n\t"
64298 #endif
64299 #ifdef WOLFSSL_KEIL
64300         "adcs	r4, r4, %[r]\n\t"
64301 #elif defined(__clang__)
64302         "adcs	r4, %[r]\n\t"
64303 #else
64304         "adc	r4, %[r]\n\t"
64305 #endif
64306         "uxth	r6, r7\n\t"
64307 #ifdef WOLFSSL_KEIL
64308         "muls	r5, r6, r5\n\t"
64309 #elif defined(__clang__)
64310         "muls	r5, r6\n\t"
64311 #else
64312         "mul	r5, r6\n\t"
64313 #endif
64314 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64315         "lsrs	r6, r5, #16\n\t"
64316 #else
64317         "lsr	r6, r5, #16\n\t"
64318 #endif
64319 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64320         "lsls	r5, r5, #16\n\t"
64321 #else
64322         "lsl	r5, r5, #16\n\t"
64323 #endif
64324 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64325         "adds	r2, r2, r5\n\t"
64326 #else
64327         "add	r2, r2, r5\n\t"
64328 #endif
64329 #ifdef WOLFSSL_KEIL
64330         "adcs	r3, r3, r6\n\t"
64331 #elif defined(__clang__)
64332         "adcs	r3, r6\n\t"
64333 #else
64334         "adc	r3, r6\n\t"
64335 #endif
64336 #ifdef WOLFSSL_KEIL
64337         "adcs	r4, r4, %[r]\n\t"
64338 #elif defined(__clang__)
64339         "adcs	r4, %[r]\n\t"
64340 #else
64341         "adc	r4, %[r]\n\t"
64342 #endif
64343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64344         "adds	r2, r2, r5\n\t"
64345 #else
64346         "add	r2, r2, r5\n\t"
64347 #endif
64348 #ifdef WOLFSSL_KEIL
64349         "adcs	r3, r3, r6\n\t"
64350 #elif defined(__clang__)
64351         "adcs	r3, r6\n\t"
64352 #else
64353         "adc	r3, r6\n\t"
64354 #endif
64355 #ifdef WOLFSSL_KEIL
64356         "adcs	r4, r4, %[r]\n\t"
64357 #elif defined(__clang__)
64358         "adcs	r4, %[r]\n\t"
64359 #else
64360         "adc	r4, %[r]\n\t"
64361 #endif
64362         "#  A[10] * A[8]\n\t"
64363         "mov	%[a], r9\n\t"
64364         "mov	r7, r10\n\t"
64365         "mov	%[a], r12\n\t"
64366         "uxth	r5, %[a]\n\t"
64367         "uxth	r6, r7\n\t"
64368 #ifdef WOLFSSL_KEIL
64369         "muls	r6, r5, r6\n\t"
64370 #elif defined(__clang__)
64371         "muls	r6, r5\n\t"
64372 #else
64373         "mul	r6, r5\n\t"
64374 #endif
64375 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64376         "adds	r2, r2, r6\n\t"
64377 #else
64378         "add	r2, r2, r6\n\t"
64379 #endif
64380 #ifdef WOLFSSL_KEIL
64381         "adcs	r3, r3, %[r]\n\t"
64382 #elif defined(__clang__)
64383         "adcs	r3, %[r]\n\t"
64384 #else
64385         "adc	r3, %[r]\n\t"
64386 #endif
64387 #ifdef WOLFSSL_KEIL
64388         "adcs	r4, r4, %[r]\n\t"
64389 #elif defined(__clang__)
64390         "adcs	r4, %[r]\n\t"
64391 #else
64392         "adc	r4, %[r]\n\t"
64393 #endif
64394 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64395         "adds	r2, r2, r6\n\t"
64396 #else
64397         "add	r2, r2, r6\n\t"
64398 #endif
64399 #ifdef WOLFSSL_KEIL
64400         "adcs	r3, r3, %[r]\n\t"
64401 #elif defined(__clang__)
64402         "adcs	r3, %[r]\n\t"
64403 #else
64404         "adc	r3, %[r]\n\t"
64405 #endif
64406 #ifdef WOLFSSL_KEIL
64407         "adcs	r4, r4, %[r]\n\t"
64408 #elif defined(__clang__)
64409         "adcs	r4, %[r]\n\t"
64410 #else
64411         "adc	r4, %[r]\n\t"
64412 #endif
64413 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64414         "lsrs	r6, r7, #16\n\t"
64415 #else
64416         "lsr	r6, r7, #16\n\t"
64417 #endif
64418 #ifdef WOLFSSL_KEIL
64419         "muls	r5, r6, r5\n\t"
64420 #elif defined(__clang__)
64421         "muls	r5, r6\n\t"
64422 #else
64423         "mul	r5, r6\n\t"
64424 #endif
64425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64426         "lsrs	r6, r5, #16\n\t"
64427 #else
64428         "lsr	r6, r5, #16\n\t"
64429 #endif
64430 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64431         "lsls	r5, r5, #16\n\t"
64432 #else
64433         "lsl	r5, r5, #16\n\t"
64434 #endif
64435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64436         "adds	r2, r2, r5\n\t"
64437 #else
64438         "add	r2, r2, r5\n\t"
64439 #endif
64440 #ifdef WOLFSSL_KEIL
64441         "adcs	r3, r3, r6\n\t"
64442 #elif defined(__clang__)
64443         "adcs	r3, r6\n\t"
64444 #else
64445         "adc	r3, r6\n\t"
64446 #endif
64447 #ifdef WOLFSSL_KEIL
64448         "adcs	r4, r4, %[r]\n\t"
64449 #elif defined(__clang__)
64450         "adcs	r4, %[r]\n\t"
64451 #else
64452         "adc	r4, %[r]\n\t"
64453 #endif
64454 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64455         "adds	r2, r2, r5\n\t"
64456 #else
64457         "add	r2, r2, r5\n\t"
64458 #endif
64459 #ifdef WOLFSSL_KEIL
64460         "adcs	r3, r3, r6\n\t"
64461 #elif defined(__clang__)
64462         "adcs	r3, r6\n\t"
64463 #else
64464         "adc	r3, r6\n\t"
64465 #endif
64466 #ifdef WOLFSSL_KEIL
64467         "adcs	r4, r4, %[r]\n\t"
64468 #elif defined(__clang__)
64469         "adcs	r4, %[r]\n\t"
64470 #else
64471         "adc	r4, %[r]\n\t"
64472 #endif
64473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64474         "lsrs	r5, %[a], #16\n\t"
64475 #else
64476         "lsr	r5, %[a], #16\n\t"
64477 #endif
64478 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64479         "lsrs	r6, r7, #16\n\t"
64480 #else
64481         "lsr	r6, r7, #16\n\t"
64482 #endif
64483 #ifdef WOLFSSL_KEIL
64484         "muls	r6, r5, r6\n\t"
64485 #elif defined(__clang__)
64486         "muls	r6, r5\n\t"
64487 #else
64488         "mul	r6, r5\n\t"
64489 #endif
64490 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64491         "adds	r3, r3, r6\n\t"
64492 #else
64493         "add	r3, r3, r6\n\t"
64494 #endif
64495 #ifdef WOLFSSL_KEIL
64496         "adcs	r4, r4, %[r]\n\t"
64497 #elif defined(__clang__)
64498         "adcs	r4, %[r]\n\t"
64499 #else
64500         "adc	r4, %[r]\n\t"
64501 #endif
64502 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64503         "adds	r3, r3, r6\n\t"
64504 #else
64505         "add	r3, r3, r6\n\t"
64506 #endif
64507 #ifdef WOLFSSL_KEIL
64508         "adcs	r4, r4, %[r]\n\t"
64509 #elif defined(__clang__)
64510         "adcs	r4, %[r]\n\t"
64511 #else
64512         "adc	r4, %[r]\n\t"
64513 #endif
64514         "uxth	r6, r7\n\t"
64515 #ifdef WOLFSSL_KEIL
64516         "muls	r5, r6, r5\n\t"
64517 #elif defined(__clang__)
64518         "muls	r5, r6\n\t"
64519 #else
64520         "mul	r5, r6\n\t"
64521 #endif
64522 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64523         "lsrs	r6, r5, #16\n\t"
64524 #else
64525         "lsr	r6, r5, #16\n\t"
64526 #endif
64527 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64528         "lsls	r5, r5, #16\n\t"
64529 #else
64530         "lsl	r5, r5, #16\n\t"
64531 #endif
64532 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64533         "adds	r2, r2, r5\n\t"
64534 #else
64535         "add	r2, r2, r5\n\t"
64536 #endif
64537 #ifdef WOLFSSL_KEIL
64538         "adcs	r3, r3, r6\n\t"
64539 #elif defined(__clang__)
64540         "adcs	r3, r6\n\t"
64541 #else
64542         "adc	r3, r6\n\t"
64543 #endif
64544 #ifdef WOLFSSL_KEIL
64545         "adcs	r4, r4, %[r]\n\t"
64546 #elif defined(__clang__)
64547         "adcs	r4, %[r]\n\t"
64548 #else
64549         "adc	r4, %[r]\n\t"
64550 #endif
64551 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64552         "adds	r2, r2, r5\n\t"
64553 #else
64554         "add	r2, r2, r5\n\t"
64555 #endif
64556 #ifdef WOLFSSL_KEIL
64557         "adcs	r3, r3, r6\n\t"
64558 #elif defined(__clang__)
64559         "adcs	r3, r6\n\t"
64560 #else
64561         "adc	r3, r6\n\t"
64562 #endif
64563 #ifdef WOLFSSL_KEIL
64564         "adcs	r4, r4, %[r]\n\t"
64565 #elif defined(__clang__)
64566         "adcs	r4, %[r]\n\t"
64567 #else
64568         "adc	r4, %[r]\n\t"
64569 #endif
64570         "#  A[9] * A[9]\n\t"
64571         "mov	r7, r11\n\t"
64572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64573         "lsrs	r6, r7, #16\n\t"
64574 #else
64575         "lsr	r6, r7, #16\n\t"
64576 #endif
64577         "uxth	r5, r7\n\t"
64578 #ifdef WOLFSSL_KEIL
64579         "muls	r5, r5, r5\n\t"
64580 #elif defined(__clang__)
64581         "muls	r5, r5\n\t"
64582 #else
64583         "mul	r5, r5\n\t"
64584 #endif
64585 #ifdef WOLFSSL_KEIL
64586         "muls	r6, r6, r6\n\t"
64587 #elif defined(__clang__)
64588         "muls	r6, r6\n\t"
64589 #else
64590         "mul	r6, r6\n\t"
64591 #endif
64592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64593         "adds	r2, r2, r5\n\t"
64594 #else
64595         "add	r2, r2, r5\n\t"
64596 #endif
64597 #ifdef WOLFSSL_KEIL
64598         "adcs	r3, r3, r6\n\t"
64599 #elif defined(__clang__)
64600         "adcs	r3, r6\n\t"
64601 #else
64602         "adc	r3, r6\n\t"
64603 #endif
64604 #ifdef WOLFSSL_KEIL
64605         "adcs	r4, r4, %[r]\n\t"
64606 #elif defined(__clang__)
64607         "adcs	r4, %[r]\n\t"
64608 #else
64609         "adc	r4, %[r]\n\t"
64610 #endif
64611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64612         "lsrs	r6, r7, #16\n\t"
64613 #else
64614         "lsr	r6, r7, #16\n\t"
64615 #endif
64616         "uxth	r5, r7\n\t"
64617 #ifdef WOLFSSL_KEIL
64618         "muls	r5, r6, r5\n\t"
64619 #elif defined(__clang__)
64620         "muls	r5, r6\n\t"
64621 #else
64622         "mul	r5, r6\n\t"
64623 #endif
64624 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64625         "lsrs	r6, r5, #15\n\t"
64626 #else
64627         "lsr	r6, r5, #15\n\t"
64628 #endif
64629 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64630         "lsls	r5, r5, #17\n\t"
64631 #else
64632         "lsl	r5, r5, #17\n\t"
64633 #endif
64634 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64635         "adds	r2, r2, r5\n\t"
64636 #else
64637         "add	r2, r2, r5\n\t"
64638 #endif
64639 #ifdef WOLFSSL_KEIL
64640         "adcs	r3, r3, r6\n\t"
64641 #elif defined(__clang__)
64642         "adcs	r3, r6\n\t"
64643 #else
64644         "adc	r3, r6\n\t"
64645 #endif
64646 #ifdef WOLFSSL_KEIL
64647         "adcs	r4, r4, %[r]\n\t"
64648 #elif defined(__clang__)
64649         "adcs	r4, %[r]\n\t"
64650 #else
64651         "adc	r4, %[r]\n\t"
64652 #endif
64653         "mov	%[r], r8\n\t"
64654         "str	r2, [%[r], #72]\n\t"
64655         "movs	%[r], #0\n\t"
64656         "#  A[10] * A[9]\n\t"
64657         "movs	r2, #0\n\t"
64658         "mov	%[a], r9\n\t"
64659         "mov	%[a], r12\n\t"
64660         "uxth	r5, %[a]\n\t"
64661         "uxth	r6, r7\n\t"
64662 #ifdef WOLFSSL_KEIL
64663         "muls	r6, r5, r6\n\t"
64664 #elif defined(__clang__)
64665         "muls	r6, r5\n\t"
64666 #else
64667         "mul	r6, r5\n\t"
64668 #endif
64669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64670         "adds	r3, r3, r6\n\t"
64671 #else
64672         "add	r3, r3, r6\n\t"
64673 #endif
64674 #ifdef WOLFSSL_KEIL
64675         "adcs	r4, r4, %[r]\n\t"
64676 #elif defined(__clang__)
64677         "adcs	r4, %[r]\n\t"
64678 #else
64679         "adc	r4, %[r]\n\t"
64680 #endif
64681 #ifdef WOLFSSL_KEIL
64682         "adcs	r2, r2, %[r]\n\t"
64683 #elif defined(__clang__)
64684         "adcs	r2, %[r]\n\t"
64685 #else
64686         "adc	r2, %[r]\n\t"
64687 #endif
64688 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64689         "adds	r3, r3, r6\n\t"
64690 #else
64691         "add	r3, r3, r6\n\t"
64692 #endif
64693 #ifdef WOLFSSL_KEIL
64694         "adcs	r4, r4, %[r]\n\t"
64695 #elif defined(__clang__)
64696         "adcs	r4, %[r]\n\t"
64697 #else
64698         "adc	r4, %[r]\n\t"
64699 #endif
64700 #ifdef WOLFSSL_KEIL
64701         "adcs	r2, r2, %[r]\n\t"
64702 #elif defined(__clang__)
64703         "adcs	r2, %[r]\n\t"
64704 #else
64705         "adc	r2, %[r]\n\t"
64706 #endif
64707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64708         "lsrs	r6, r7, #16\n\t"
64709 #else
64710         "lsr	r6, r7, #16\n\t"
64711 #endif
64712 #ifdef WOLFSSL_KEIL
64713         "muls	r5, r6, r5\n\t"
64714 #elif defined(__clang__)
64715         "muls	r5, r6\n\t"
64716 #else
64717         "mul	r5, r6\n\t"
64718 #endif
64719 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64720         "lsrs	r6, r5, #16\n\t"
64721 #else
64722         "lsr	r6, r5, #16\n\t"
64723 #endif
64724 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64725         "lsls	r5, r5, #16\n\t"
64726 #else
64727         "lsl	r5, r5, #16\n\t"
64728 #endif
64729 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64730         "adds	r3, r3, r5\n\t"
64731 #else
64732         "add	r3, r3, r5\n\t"
64733 #endif
64734 #ifdef WOLFSSL_KEIL
64735         "adcs	r4, r4, r6\n\t"
64736 #elif defined(__clang__)
64737         "adcs	r4, r6\n\t"
64738 #else
64739         "adc	r4, r6\n\t"
64740 #endif
64741 #ifdef WOLFSSL_KEIL
64742         "adcs	r2, r2, %[r]\n\t"
64743 #elif defined(__clang__)
64744         "adcs	r2, %[r]\n\t"
64745 #else
64746         "adc	r2, %[r]\n\t"
64747 #endif
64748 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64749         "adds	r3, r3, r5\n\t"
64750 #else
64751         "add	r3, r3, r5\n\t"
64752 #endif
64753 #ifdef WOLFSSL_KEIL
64754         "adcs	r4, r4, r6\n\t"
64755 #elif defined(__clang__)
64756         "adcs	r4, r6\n\t"
64757 #else
64758         "adc	r4, r6\n\t"
64759 #endif
64760 #ifdef WOLFSSL_KEIL
64761         "adcs	r2, r2, %[r]\n\t"
64762 #elif defined(__clang__)
64763         "adcs	r2, %[r]\n\t"
64764 #else
64765         "adc	r2, %[r]\n\t"
64766 #endif
64767 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64768         "lsrs	r5, %[a], #16\n\t"
64769 #else
64770         "lsr	r5, %[a], #16\n\t"
64771 #endif
64772 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64773         "lsrs	r6, r7, #16\n\t"
64774 #else
64775         "lsr	r6, r7, #16\n\t"
64776 #endif
64777 #ifdef WOLFSSL_KEIL
64778         "muls	r6, r5, r6\n\t"
64779 #elif defined(__clang__)
64780         "muls	r6, r5\n\t"
64781 #else
64782         "mul	r6, r5\n\t"
64783 #endif
64784 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64785         "adds	r4, r4, r6\n\t"
64786 #else
64787         "add	r4, r4, r6\n\t"
64788 #endif
64789 #ifdef WOLFSSL_KEIL
64790         "adcs	r2, r2, %[r]\n\t"
64791 #elif defined(__clang__)
64792         "adcs	r2, %[r]\n\t"
64793 #else
64794         "adc	r2, %[r]\n\t"
64795 #endif
64796 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64797         "adds	r4, r4, r6\n\t"
64798 #else
64799         "add	r4, r4, r6\n\t"
64800 #endif
64801 #ifdef WOLFSSL_KEIL
64802         "adcs	r2, r2, %[r]\n\t"
64803 #elif defined(__clang__)
64804         "adcs	r2, %[r]\n\t"
64805 #else
64806         "adc	r2, %[r]\n\t"
64807 #endif
64808         "uxth	r6, r7\n\t"
64809 #ifdef WOLFSSL_KEIL
64810         "muls	r5, r6, r5\n\t"
64811 #elif defined(__clang__)
64812         "muls	r5, r6\n\t"
64813 #else
64814         "mul	r5, r6\n\t"
64815 #endif
64816 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64817         "lsrs	r6, r5, #16\n\t"
64818 #else
64819         "lsr	r6, r5, #16\n\t"
64820 #endif
64821 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64822         "lsls	r5, r5, #16\n\t"
64823 #else
64824         "lsl	r5, r5, #16\n\t"
64825 #endif
64826 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64827         "adds	r3, r3, r5\n\t"
64828 #else
64829         "add	r3, r3, r5\n\t"
64830 #endif
64831 #ifdef WOLFSSL_KEIL
64832         "adcs	r4, r4, r6\n\t"
64833 #elif defined(__clang__)
64834         "adcs	r4, r6\n\t"
64835 #else
64836         "adc	r4, r6\n\t"
64837 #endif
64838 #ifdef WOLFSSL_KEIL
64839         "adcs	r2, r2, %[r]\n\t"
64840 #elif defined(__clang__)
64841         "adcs	r2, %[r]\n\t"
64842 #else
64843         "adc	r2, %[r]\n\t"
64844 #endif
64845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64846         "adds	r3, r3, r5\n\t"
64847 #else
64848         "add	r3, r3, r5\n\t"
64849 #endif
64850 #ifdef WOLFSSL_KEIL
64851         "adcs	r4, r4, r6\n\t"
64852 #elif defined(__clang__)
64853         "adcs	r4, r6\n\t"
64854 #else
64855         "adc	r4, r6\n\t"
64856 #endif
64857 #ifdef WOLFSSL_KEIL
64858         "adcs	r2, r2, %[r]\n\t"
64859 #elif defined(__clang__)
64860         "adcs	r2, %[r]\n\t"
64861 #else
64862         "adc	r2, %[r]\n\t"
64863 #endif
64864         "#  A[11] * A[8]\n\t"
64865         "mov	%[a], r9\n\t"
64866         "mov	r7, r10\n\t"
64867         "mov	%[a], lr\n\t"
64868         "uxth	r5, %[a]\n\t"
64869         "uxth	r6, r7\n\t"
64870 #ifdef WOLFSSL_KEIL
64871         "muls	r6, r5, r6\n\t"
64872 #elif defined(__clang__)
64873         "muls	r6, r5\n\t"
64874 #else
64875         "mul	r6, r5\n\t"
64876 #endif
64877 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64878         "adds	r3, r3, r6\n\t"
64879 #else
64880         "add	r3, r3, r6\n\t"
64881 #endif
64882 #ifdef WOLFSSL_KEIL
64883         "adcs	r4, r4, %[r]\n\t"
64884 #elif defined(__clang__)
64885         "adcs	r4, %[r]\n\t"
64886 #else
64887         "adc	r4, %[r]\n\t"
64888 #endif
64889 #ifdef WOLFSSL_KEIL
64890         "adcs	r2, r2, %[r]\n\t"
64891 #elif defined(__clang__)
64892         "adcs	r2, %[r]\n\t"
64893 #else
64894         "adc	r2, %[r]\n\t"
64895 #endif
64896 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64897         "adds	r3, r3, r6\n\t"
64898 #else
64899         "add	r3, r3, r6\n\t"
64900 #endif
64901 #ifdef WOLFSSL_KEIL
64902         "adcs	r4, r4, %[r]\n\t"
64903 #elif defined(__clang__)
64904         "adcs	r4, %[r]\n\t"
64905 #else
64906         "adc	r4, %[r]\n\t"
64907 #endif
64908 #ifdef WOLFSSL_KEIL
64909         "adcs	r2, r2, %[r]\n\t"
64910 #elif defined(__clang__)
64911         "adcs	r2, %[r]\n\t"
64912 #else
64913         "adc	r2, %[r]\n\t"
64914 #endif
64915 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64916         "lsrs	r6, r7, #16\n\t"
64917 #else
64918         "lsr	r6, r7, #16\n\t"
64919 #endif
64920 #ifdef WOLFSSL_KEIL
64921         "muls	r5, r6, r5\n\t"
64922 #elif defined(__clang__)
64923         "muls	r5, r6\n\t"
64924 #else
64925         "mul	r5, r6\n\t"
64926 #endif
64927 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64928         "lsrs	r6, r5, #16\n\t"
64929 #else
64930         "lsr	r6, r5, #16\n\t"
64931 #endif
64932 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64933         "lsls	r5, r5, #16\n\t"
64934 #else
64935         "lsl	r5, r5, #16\n\t"
64936 #endif
64937 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64938         "adds	r3, r3, r5\n\t"
64939 #else
64940         "add	r3, r3, r5\n\t"
64941 #endif
64942 #ifdef WOLFSSL_KEIL
64943         "adcs	r4, r4, r6\n\t"
64944 #elif defined(__clang__)
64945         "adcs	r4, r6\n\t"
64946 #else
64947         "adc	r4, r6\n\t"
64948 #endif
64949 #ifdef WOLFSSL_KEIL
64950         "adcs	r2, r2, %[r]\n\t"
64951 #elif defined(__clang__)
64952         "adcs	r2, %[r]\n\t"
64953 #else
64954         "adc	r2, %[r]\n\t"
64955 #endif
64956 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64957         "adds	r3, r3, r5\n\t"
64958 #else
64959         "add	r3, r3, r5\n\t"
64960 #endif
64961 #ifdef WOLFSSL_KEIL
64962         "adcs	r4, r4, r6\n\t"
64963 #elif defined(__clang__)
64964         "adcs	r4, r6\n\t"
64965 #else
64966         "adc	r4, r6\n\t"
64967 #endif
64968 #ifdef WOLFSSL_KEIL
64969         "adcs	r2, r2, %[r]\n\t"
64970 #elif defined(__clang__)
64971         "adcs	r2, %[r]\n\t"
64972 #else
64973         "adc	r2, %[r]\n\t"
64974 #endif
64975 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64976         "lsrs	r5, %[a], #16\n\t"
64977 #else
64978         "lsr	r5, %[a], #16\n\t"
64979 #endif
64980 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64981         "lsrs	r6, r7, #16\n\t"
64982 #else
64983         "lsr	r6, r7, #16\n\t"
64984 #endif
64985 #ifdef WOLFSSL_KEIL
64986         "muls	r6, r5, r6\n\t"
64987 #elif defined(__clang__)
64988         "muls	r6, r5\n\t"
64989 #else
64990         "mul	r6, r5\n\t"
64991 #endif
64992 #if defined(__clang__) || defined(WOLFSSL_KEIL)
64993         "adds	r4, r4, r6\n\t"
64994 #else
64995         "add	r4, r4, r6\n\t"
64996 #endif
64997 #ifdef WOLFSSL_KEIL
64998         "adcs	r2, r2, %[r]\n\t"
64999 #elif defined(__clang__)
65000         "adcs	r2, %[r]\n\t"
65001 #else
65002         "adc	r2, %[r]\n\t"
65003 #endif
65004 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65005         "adds	r4, r4, r6\n\t"
65006 #else
65007         "add	r4, r4, r6\n\t"
65008 #endif
65009 #ifdef WOLFSSL_KEIL
65010         "adcs	r2, r2, %[r]\n\t"
65011 #elif defined(__clang__)
65012         "adcs	r2, %[r]\n\t"
65013 #else
65014         "adc	r2, %[r]\n\t"
65015 #endif
65016         "uxth	r6, r7\n\t"
65017 #ifdef WOLFSSL_KEIL
65018         "muls	r5, r6, r5\n\t"
65019 #elif defined(__clang__)
65020         "muls	r5, r6\n\t"
65021 #else
65022         "mul	r5, r6\n\t"
65023 #endif
65024 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65025         "lsrs	r6, r5, #16\n\t"
65026 #else
65027         "lsr	r6, r5, #16\n\t"
65028 #endif
65029 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65030         "lsls	r5, r5, #16\n\t"
65031 #else
65032         "lsl	r5, r5, #16\n\t"
65033 #endif
65034 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65035         "adds	r3, r3, r5\n\t"
65036 #else
65037         "add	r3, r3, r5\n\t"
65038 #endif
65039 #ifdef WOLFSSL_KEIL
65040         "adcs	r4, r4, r6\n\t"
65041 #elif defined(__clang__)
65042         "adcs	r4, r6\n\t"
65043 #else
65044         "adc	r4, r6\n\t"
65045 #endif
65046 #ifdef WOLFSSL_KEIL
65047         "adcs	r2, r2, %[r]\n\t"
65048 #elif defined(__clang__)
65049         "adcs	r2, %[r]\n\t"
65050 #else
65051         "adc	r2, %[r]\n\t"
65052 #endif
65053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65054         "adds	r3, r3, r5\n\t"
65055 #else
65056         "add	r3, r3, r5\n\t"
65057 #endif
65058 #ifdef WOLFSSL_KEIL
65059         "adcs	r4, r4, r6\n\t"
65060 #elif defined(__clang__)
65061         "adcs	r4, r6\n\t"
65062 #else
65063         "adc	r4, r6\n\t"
65064 #endif
65065 #ifdef WOLFSSL_KEIL
65066         "adcs	r2, r2, %[r]\n\t"
65067 #elif defined(__clang__)
65068         "adcs	r2, %[r]\n\t"
65069 #else
65070         "adc	r2, %[r]\n\t"
65071 #endif
65072         "mov	%[r], r8\n\t"
65073         "str	r3, [%[r], #76]\n\t"
65074         "movs	%[r], #0\n\t"
65075         "#  A[11] * A[9]\n\t"
65076         "movs	r3, #0\n\t"
65077         "mov	%[a], r9\n\t"
65078         "mov	r7, r11\n\t"
65079         "mov	%[a], lr\n\t"
65080         "uxth	r5, %[a]\n\t"
65081         "uxth	r6, r7\n\t"
65082 #ifdef WOLFSSL_KEIL
65083         "muls	r6, r5, r6\n\t"
65084 #elif defined(__clang__)
65085         "muls	r6, r5\n\t"
65086 #else
65087         "mul	r6, r5\n\t"
65088 #endif
65089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65090         "adds	r4, r4, r6\n\t"
65091 #else
65092         "add	r4, r4, r6\n\t"
65093 #endif
65094 #ifdef WOLFSSL_KEIL
65095         "adcs	r2, r2, %[r]\n\t"
65096 #elif defined(__clang__)
65097         "adcs	r2, %[r]\n\t"
65098 #else
65099         "adc	r2, %[r]\n\t"
65100 #endif
65101 #ifdef WOLFSSL_KEIL
65102         "adcs	r3, r3, %[r]\n\t"
65103 #elif defined(__clang__)
65104         "adcs	r3, %[r]\n\t"
65105 #else
65106         "adc	r3, %[r]\n\t"
65107 #endif
65108 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65109         "adds	r4, r4, r6\n\t"
65110 #else
65111         "add	r4, r4, r6\n\t"
65112 #endif
65113 #ifdef WOLFSSL_KEIL
65114         "adcs	r2, r2, %[r]\n\t"
65115 #elif defined(__clang__)
65116         "adcs	r2, %[r]\n\t"
65117 #else
65118         "adc	r2, %[r]\n\t"
65119 #endif
65120 #ifdef WOLFSSL_KEIL
65121         "adcs	r3, r3, %[r]\n\t"
65122 #elif defined(__clang__)
65123         "adcs	r3, %[r]\n\t"
65124 #else
65125         "adc	r3, %[r]\n\t"
65126 #endif
65127 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65128         "lsrs	r6, r7, #16\n\t"
65129 #else
65130         "lsr	r6, r7, #16\n\t"
65131 #endif
65132 #ifdef WOLFSSL_KEIL
65133         "muls	r5, r6, r5\n\t"
65134 #elif defined(__clang__)
65135         "muls	r5, r6\n\t"
65136 #else
65137         "mul	r5, r6\n\t"
65138 #endif
65139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65140         "lsrs	r6, r5, #16\n\t"
65141 #else
65142         "lsr	r6, r5, #16\n\t"
65143 #endif
65144 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65145         "lsls	r5, r5, #16\n\t"
65146 #else
65147         "lsl	r5, r5, #16\n\t"
65148 #endif
65149 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65150         "adds	r4, r4, r5\n\t"
65151 #else
65152         "add	r4, r4, r5\n\t"
65153 #endif
65154 #ifdef WOLFSSL_KEIL
65155         "adcs	r2, r2, r6\n\t"
65156 #elif defined(__clang__)
65157         "adcs	r2, r6\n\t"
65158 #else
65159         "adc	r2, r6\n\t"
65160 #endif
65161 #ifdef WOLFSSL_KEIL
65162         "adcs	r3, r3, %[r]\n\t"
65163 #elif defined(__clang__)
65164         "adcs	r3, %[r]\n\t"
65165 #else
65166         "adc	r3, %[r]\n\t"
65167 #endif
65168 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65169         "adds	r4, r4, r5\n\t"
65170 #else
65171         "add	r4, r4, r5\n\t"
65172 #endif
65173 #ifdef WOLFSSL_KEIL
65174         "adcs	r2, r2, r6\n\t"
65175 #elif defined(__clang__)
65176         "adcs	r2, r6\n\t"
65177 #else
65178         "adc	r2, r6\n\t"
65179 #endif
65180 #ifdef WOLFSSL_KEIL
65181         "adcs	r3, r3, %[r]\n\t"
65182 #elif defined(__clang__)
65183         "adcs	r3, %[r]\n\t"
65184 #else
65185         "adc	r3, %[r]\n\t"
65186 #endif
65187 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65188         "lsrs	r5, %[a], #16\n\t"
65189 #else
65190         "lsr	r5, %[a], #16\n\t"
65191 #endif
65192 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65193         "lsrs	r6, r7, #16\n\t"
65194 #else
65195         "lsr	r6, r7, #16\n\t"
65196 #endif
65197 #ifdef WOLFSSL_KEIL
65198         "muls	r6, r5, r6\n\t"
65199 #elif defined(__clang__)
65200         "muls	r6, r5\n\t"
65201 #else
65202         "mul	r6, r5\n\t"
65203 #endif
65204 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65205         "adds	r2, r2, r6\n\t"
65206 #else
65207         "add	r2, r2, r6\n\t"
65208 #endif
65209 #ifdef WOLFSSL_KEIL
65210         "adcs	r3, r3, %[r]\n\t"
65211 #elif defined(__clang__)
65212         "adcs	r3, %[r]\n\t"
65213 #else
65214         "adc	r3, %[r]\n\t"
65215 #endif
65216 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65217         "adds	r2, r2, r6\n\t"
65218 #else
65219         "add	r2, r2, r6\n\t"
65220 #endif
65221 #ifdef WOLFSSL_KEIL
65222         "adcs	r3, r3, %[r]\n\t"
65223 #elif defined(__clang__)
65224         "adcs	r3, %[r]\n\t"
65225 #else
65226         "adc	r3, %[r]\n\t"
65227 #endif
65228         "uxth	r6, r7\n\t"
65229 #ifdef WOLFSSL_KEIL
65230         "muls	r5, r6, r5\n\t"
65231 #elif defined(__clang__)
65232         "muls	r5, r6\n\t"
65233 #else
65234         "mul	r5, r6\n\t"
65235 #endif
65236 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65237         "lsrs	r6, r5, #16\n\t"
65238 #else
65239         "lsr	r6, r5, #16\n\t"
65240 #endif
65241 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65242         "lsls	r5, r5, #16\n\t"
65243 #else
65244         "lsl	r5, r5, #16\n\t"
65245 #endif
65246 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65247         "adds	r4, r4, r5\n\t"
65248 #else
65249         "add	r4, r4, r5\n\t"
65250 #endif
65251 #ifdef WOLFSSL_KEIL
65252         "adcs	r2, r2, r6\n\t"
65253 #elif defined(__clang__)
65254         "adcs	r2, r6\n\t"
65255 #else
65256         "adc	r2, r6\n\t"
65257 #endif
65258 #ifdef WOLFSSL_KEIL
65259         "adcs	r3, r3, %[r]\n\t"
65260 #elif defined(__clang__)
65261         "adcs	r3, %[r]\n\t"
65262 #else
65263         "adc	r3, %[r]\n\t"
65264 #endif
65265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65266         "adds	r4, r4, r5\n\t"
65267 #else
65268         "add	r4, r4, r5\n\t"
65269 #endif
65270 #ifdef WOLFSSL_KEIL
65271         "adcs	r2, r2, r6\n\t"
65272 #elif defined(__clang__)
65273         "adcs	r2, r6\n\t"
65274 #else
65275         "adc	r2, r6\n\t"
65276 #endif
65277 #ifdef WOLFSSL_KEIL
65278         "adcs	r3, r3, %[r]\n\t"
65279 #elif defined(__clang__)
65280         "adcs	r3, %[r]\n\t"
65281 #else
65282         "adc	r3, %[r]\n\t"
65283 #endif
65284         "#  A[10] * A[10]\n\t"
65285         "mov	r7, r12\n\t"
65286 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65287         "lsrs	r6, r7, #16\n\t"
65288 #else
65289         "lsr	r6, r7, #16\n\t"
65290 #endif
65291         "uxth	r5, r7\n\t"
65292 #ifdef WOLFSSL_KEIL
65293         "muls	r5, r5, r5\n\t"
65294 #elif defined(__clang__)
65295         "muls	r5, r5\n\t"
65296 #else
65297         "mul	r5, r5\n\t"
65298 #endif
65299 #ifdef WOLFSSL_KEIL
65300         "muls	r6, r6, r6\n\t"
65301 #elif defined(__clang__)
65302         "muls	r6, r6\n\t"
65303 #else
65304         "mul	r6, r6\n\t"
65305 #endif
65306 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65307         "adds	r4, r4, r5\n\t"
65308 #else
65309         "add	r4, r4, r5\n\t"
65310 #endif
65311 #ifdef WOLFSSL_KEIL
65312         "adcs	r2, r2, r6\n\t"
65313 #elif defined(__clang__)
65314         "adcs	r2, r6\n\t"
65315 #else
65316         "adc	r2, r6\n\t"
65317 #endif
65318 #ifdef WOLFSSL_KEIL
65319         "adcs	r3, r3, %[r]\n\t"
65320 #elif defined(__clang__)
65321         "adcs	r3, %[r]\n\t"
65322 #else
65323         "adc	r3, %[r]\n\t"
65324 #endif
65325 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65326         "lsrs	r6, r7, #16\n\t"
65327 #else
65328         "lsr	r6, r7, #16\n\t"
65329 #endif
65330         "uxth	r5, r7\n\t"
65331 #ifdef WOLFSSL_KEIL
65332         "muls	r5, r6, r5\n\t"
65333 #elif defined(__clang__)
65334         "muls	r5, r6\n\t"
65335 #else
65336         "mul	r5, r6\n\t"
65337 #endif
65338 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65339         "lsrs	r6, r5, #15\n\t"
65340 #else
65341         "lsr	r6, r5, #15\n\t"
65342 #endif
65343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65344         "lsls	r5, r5, #17\n\t"
65345 #else
65346         "lsl	r5, r5, #17\n\t"
65347 #endif
65348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65349         "adds	r4, r4, r5\n\t"
65350 #else
65351         "add	r4, r4, r5\n\t"
65352 #endif
65353 #ifdef WOLFSSL_KEIL
65354         "adcs	r2, r2, r6\n\t"
65355 #elif defined(__clang__)
65356         "adcs	r2, r6\n\t"
65357 #else
65358         "adc	r2, r6\n\t"
65359 #endif
65360 #ifdef WOLFSSL_KEIL
65361         "adcs	r3, r3, %[r]\n\t"
65362 #elif defined(__clang__)
65363         "adcs	r3, %[r]\n\t"
65364 #else
65365         "adc	r3, %[r]\n\t"
65366 #endif
65367         "mov	%[r], r8\n\t"
65368         "str	r4, [%[r], #80]\n\t"
65369         "movs	%[r], #0\n\t"
65370         "#  A[11] * A[10]\n\t"
65371         "movs	r4, #0\n\t"
65372         "mov	%[a], r9\n\t"
65373         "mov	%[a], lr\n\t"
65374         "uxth	r5, %[a]\n\t"
65375         "uxth	r6, r7\n\t"
65376 #ifdef WOLFSSL_KEIL
65377         "muls	r6, r5, r6\n\t"
65378 #elif defined(__clang__)
65379         "muls	r6, r5\n\t"
65380 #else
65381         "mul	r6, r5\n\t"
65382 #endif
65383 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65384         "adds	r2, r2, r6\n\t"
65385 #else
65386         "add	r2, r2, r6\n\t"
65387 #endif
65388 #ifdef WOLFSSL_KEIL
65389         "adcs	r3, r3, %[r]\n\t"
65390 #elif defined(__clang__)
65391         "adcs	r3, %[r]\n\t"
65392 #else
65393         "adc	r3, %[r]\n\t"
65394 #endif
65395 #ifdef WOLFSSL_KEIL
65396         "adcs	r4, r4, %[r]\n\t"
65397 #elif defined(__clang__)
65398         "adcs	r4, %[r]\n\t"
65399 #else
65400         "adc	r4, %[r]\n\t"
65401 #endif
65402 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65403         "adds	r2, r2, r6\n\t"
65404 #else
65405         "add	r2, r2, r6\n\t"
65406 #endif
65407 #ifdef WOLFSSL_KEIL
65408         "adcs	r3, r3, %[r]\n\t"
65409 #elif defined(__clang__)
65410         "adcs	r3, %[r]\n\t"
65411 #else
65412         "adc	r3, %[r]\n\t"
65413 #endif
65414 #ifdef WOLFSSL_KEIL
65415         "adcs	r4, r4, %[r]\n\t"
65416 #elif defined(__clang__)
65417         "adcs	r4, %[r]\n\t"
65418 #else
65419         "adc	r4, %[r]\n\t"
65420 #endif
65421 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65422         "lsrs	r6, r7, #16\n\t"
65423 #else
65424         "lsr	r6, r7, #16\n\t"
65425 #endif
65426 #ifdef WOLFSSL_KEIL
65427         "muls	r5, r6, r5\n\t"
65428 #elif defined(__clang__)
65429         "muls	r5, r6\n\t"
65430 #else
65431         "mul	r5, r6\n\t"
65432 #endif
65433 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65434         "lsrs	r6, r5, #16\n\t"
65435 #else
65436         "lsr	r6, r5, #16\n\t"
65437 #endif
65438 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65439         "lsls	r5, r5, #16\n\t"
65440 #else
65441         "lsl	r5, r5, #16\n\t"
65442 #endif
65443 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65444         "adds	r2, r2, r5\n\t"
65445 #else
65446         "add	r2, r2, r5\n\t"
65447 #endif
65448 #ifdef WOLFSSL_KEIL
65449         "adcs	r3, r3, r6\n\t"
65450 #elif defined(__clang__)
65451         "adcs	r3, r6\n\t"
65452 #else
65453         "adc	r3, r6\n\t"
65454 #endif
65455 #ifdef WOLFSSL_KEIL
65456         "adcs	r4, r4, %[r]\n\t"
65457 #elif defined(__clang__)
65458         "adcs	r4, %[r]\n\t"
65459 #else
65460         "adc	r4, %[r]\n\t"
65461 #endif
65462 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65463         "adds	r2, r2, r5\n\t"
65464 #else
65465         "add	r2, r2, r5\n\t"
65466 #endif
65467 #ifdef WOLFSSL_KEIL
65468         "adcs	r3, r3, r6\n\t"
65469 #elif defined(__clang__)
65470         "adcs	r3, r6\n\t"
65471 #else
65472         "adc	r3, r6\n\t"
65473 #endif
65474 #ifdef WOLFSSL_KEIL
65475         "adcs	r4, r4, %[r]\n\t"
65476 #elif defined(__clang__)
65477         "adcs	r4, %[r]\n\t"
65478 #else
65479         "adc	r4, %[r]\n\t"
65480 #endif
65481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65482         "lsrs	r5, %[a], #16\n\t"
65483 #else
65484         "lsr	r5, %[a], #16\n\t"
65485 #endif
65486 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65487         "lsrs	r6, r7, #16\n\t"
65488 #else
65489         "lsr	r6, r7, #16\n\t"
65490 #endif
65491 #ifdef WOLFSSL_KEIL
65492         "muls	r6, r5, r6\n\t"
65493 #elif defined(__clang__)
65494         "muls	r6, r5\n\t"
65495 #else
65496         "mul	r6, r5\n\t"
65497 #endif
65498 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65499         "adds	r3, r3, r6\n\t"
65500 #else
65501         "add	r3, r3, r6\n\t"
65502 #endif
65503 #ifdef WOLFSSL_KEIL
65504         "adcs	r4, r4, %[r]\n\t"
65505 #elif defined(__clang__)
65506         "adcs	r4, %[r]\n\t"
65507 #else
65508         "adc	r4, %[r]\n\t"
65509 #endif
65510 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65511         "adds	r3, r3, r6\n\t"
65512 #else
65513         "add	r3, r3, r6\n\t"
65514 #endif
65515 #ifdef WOLFSSL_KEIL
65516         "adcs	r4, r4, %[r]\n\t"
65517 #elif defined(__clang__)
65518         "adcs	r4, %[r]\n\t"
65519 #else
65520         "adc	r4, %[r]\n\t"
65521 #endif
65522         "uxth	r6, r7\n\t"
65523 #ifdef WOLFSSL_KEIL
65524         "muls	r5, r6, r5\n\t"
65525 #elif defined(__clang__)
65526         "muls	r5, r6\n\t"
65527 #else
65528         "mul	r5, r6\n\t"
65529 #endif
65530 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65531         "lsrs	r6, r5, #16\n\t"
65532 #else
65533         "lsr	r6, r5, #16\n\t"
65534 #endif
65535 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65536         "lsls	r5, r5, #16\n\t"
65537 #else
65538         "lsl	r5, r5, #16\n\t"
65539 #endif
65540 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65541         "adds	r2, r2, r5\n\t"
65542 #else
65543         "add	r2, r2, r5\n\t"
65544 #endif
65545 #ifdef WOLFSSL_KEIL
65546         "adcs	r3, r3, r6\n\t"
65547 #elif defined(__clang__)
65548         "adcs	r3, r6\n\t"
65549 #else
65550         "adc	r3, r6\n\t"
65551 #endif
65552 #ifdef WOLFSSL_KEIL
65553         "adcs	r4, r4, %[r]\n\t"
65554 #elif defined(__clang__)
65555         "adcs	r4, %[r]\n\t"
65556 #else
65557         "adc	r4, %[r]\n\t"
65558 #endif
65559 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65560         "adds	r2, r2, r5\n\t"
65561 #else
65562         "add	r2, r2, r5\n\t"
65563 #endif
65564 #ifdef WOLFSSL_KEIL
65565         "adcs	r3, r3, r6\n\t"
65566 #elif defined(__clang__)
65567         "adcs	r3, r6\n\t"
65568 #else
65569         "adc	r3, r6\n\t"
65570 #endif
65571 #ifdef WOLFSSL_KEIL
65572         "adcs	r4, r4, %[r]\n\t"
65573 #elif defined(__clang__)
65574         "adcs	r4, %[r]\n\t"
65575 #else
65576         "adc	r4, %[r]\n\t"
65577 #endif
65578         "mov	%[r], r8\n\t"
65579         "str	r2, [%[r], #84]\n\t"
65580         "movs	%[r], #0\n\t"
65581         "#  A[11] * A[11]\n\t"
65582         "mov	%[a], r9\n\t"
65583         "mov	r7, lr\n\t"
65584 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65585         "lsrs	r6, r7, #16\n\t"
65586 #else
65587         "lsr	r6, r7, #16\n\t"
65588 #endif
65589         "uxth	r5, r7\n\t"
65590 #ifdef WOLFSSL_KEIL
65591         "muls	r5, r5, r5\n\t"
65592 #elif defined(__clang__)
65593         "muls	r5, r5\n\t"
65594 #else
65595         "mul	r5, r5\n\t"
65596 #endif
65597 #ifdef WOLFSSL_KEIL
65598         "muls	r6, r6, r6\n\t"
65599 #elif defined(__clang__)
65600         "muls	r6, r6\n\t"
65601 #else
65602         "mul	r6, r6\n\t"
65603 #endif
65604 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65605         "adds	r3, r3, r5\n\t"
65606 #else
65607         "add	r3, r3, r5\n\t"
65608 #endif
65609 #ifdef WOLFSSL_KEIL
65610         "adcs	r4, r4, r6\n\t"
65611 #elif defined(__clang__)
65612         "adcs	r4, r6\n\t"
65613 #else
65614         "adc	r4, r6\n\t"
65615 #endif
65616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65617         "lsrs	r6, r7, #16\n\t"
65618 #else
65619         "lsr	r6, r7, #16\n\t"
65620 #endif
65621         "uxth	r5, r7\n\t"
65622 #ifdef WOLFSSL_KEIL
65623         "muls	r5, r6, r5\n\t"
65624 #elif defined(__clang__)
65625         "muls	r5, r6\n\t"
65626 #else
65627         "mul	r5, r6\n\t"
65628 #endif
65629 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65630         "lsrs	r6, r5, #15\n\t"
65631 #else
65632         "lsr	r6, r5, #15\n\t"
65633 #endif
65634 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65635         "lsls	r5, r5, #17\n\t"
65636 #else
65637         "lsl	r5, r5, #17\n\t"
65638 #endif
65639 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65640         "adds	r3, r3, r5\n\t"
65641 #else
65642         "add	r3, r3, r5\n\t"
65643 #endif
65644 #ifdef WOLFSSL_KEIL
65645         "adcs	r4, r4, r6\n\t"
65646 #elif defined(__clang__)
65647         "adcs	r4, r6\n\t"
65648 #else
65649         "adc	r4, r6\n\t"
65650 #endif
65651         "mov	%[r], r8\n\t"
65652         "str	r3, [%[r], #88]\n\t"
65653         "str	r4, [%[r], #92]\n\t"
65654         "pop	{r2, r3, r4, r5}\n\t"
65655         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
65656         "pop	{r2, r3, r4, r5}\n\t"
65657         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
65658         "pop	{r2, r3, r4, r5}\n\t"
65659         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
65660         : [r] "+r" (r), [a] "+r" (a)
65661         :
65662         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "lr"
65663     );
65664 }
65665 
65666 #endif /* !WOLFSSL_SP_LARGE_CODE */
65667 /* Add b to a into r. (r = a + b)
65668  *
65669  * r  A single precision integer.
65670  * a  A single precision integer.
65671  * b  A single precision integer.
65672  */
sp_3072_add_12(sp_digit * r,const sp_digit * a,const sp_digit * b)65673 SP_NOINLINE static sp_digit sp_3072_add_12(sp_digit* r, const sp_digit* a,
65674         const sp_digit* b)
65675 {
65676     __asm__ __volatile__ (
65677         "ldm	%[b]!, {r5, r6}\n\t"
65678         "ldm	%[a]!, {r3, r4}\n\t"
65679 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65680         "adds	r3, r3, r5\n\t"
65681 #else
65682         "add	r3, r3, r5\n\t"
65683 #endif
65684 #ifdef WOLFSSL_KEIL
65685         "adcs	r4, r4, r6\n\t"
65686 #elif defined(__clang__)
65687         "adcs	r4, r6\n\t"
65688 #else
65689         "adc	r4, r6\n\t"
65690 #endif
65691         "stm	%[r]!, {r3, r4}\n\t"
65692         "ldm	%[b]!, {r5, r6}\n\t"
65693         "ldm	%[a]!, {r3, r4}\n\t"
65694 #ifdef WOLFSSL_KEIL
65695         "adcs	r3, r3, r5\n\t"
65696 #elif defined(__clang__)
65697         "adcs	r3, r5\n\t"
65698 #else
65699         "adc	r3, r5\n\t"
65700 #endif
65701 #ifdef WOLFSSL_KEIL
65702         "adcs	r4, r4, r6\n\t"
65703 #elif defined(__clang__)
65704         "adcs	r4, r6\n\t"
65705 #else
65706         "adc	r4, r6\n\t"
65707 #endif
65708         "stm	%[r]!, {r3, r4}\n\t"
65709         "ldm	%[b]!, {r5, r6}\n\t"
65710         "ldm	%[a]!, {r3, r4}\n\t"
65711 #ifdef WOLFSSL_KEIL
65712         "adcs	r3, r3, r5\n\t"
65713 #elif defined(__clang__)
65714         "adcs	r3, r5\n\t"
65715 #else
65716         "adc	r3, r5\n\t"
65717 #endif
65718 #ifdef WOLFSSL_KEIL
65719         "adcs	r4, r4, r6\n\t"
65720 #elif defined(__clang__)
65721         "adcs	r4, r6\n\t"
65722 #else
65723         "adc	r4, r6\n\t"
65724 #endif
65725         "stm	%[r]!, {r3, r4}\n\t"
65726         "ldm	%[b]!, {r5, r6}\n\t"
65727         "ldm	%[a]!, {r3, r4}\n\t"
65728 #ifdef WOLFSSL_KEIL
65729         "adcs	r3, r3, r5\n\t"
65730 #elif defined(__clang__)
65731         "adcs	r3, r5\n\t"
65732 #else
65733         "adc	r3, r5\n\t"
65734 #endif
65735 #ifdef WOLFSSL_KEIL
65736         "adcs	r4, r4, r6\n\t"
65737 #elif defined(__clang__)
65738         "adcs	r4, r6\n\t"
65739 #else
65740         "adc	r4, r6\n\t"
65741 #endif
65742         "stm	%[r]!, {r3, r4}\n\t"
65743         "ldm	%[b]!, {r5, r6}\n\t"
65744         "ldm	%[a]!, {r3, r4}\n\t"
65745 #ifdef WOLFSSL_KEIL
65746         "adcs	r3, r3, r5\n\t"
65747 #elif defined(__clang__)
65748         "adcs	r3, r5\n\t"
65749 #else
65750         "adc	r3, r5\n\t"
65751 #endif
65752 #ifdef WOLFSSL_KEIL
65753         "adcs	r4, r4, r6\n\t"
65754 #elif defined(__clang__)
65755         "adcs	r4, r6\n\t"
65756 #else
65757         "adc	r4, r6\n\t"
65758 #endif
65759         "stm	%[r]!, {r3, r4}\n\t"
65760         "ldm	%[b]!, {r5, r6}\n\t"
65761         "ldm	%[a]!, {r3, r4}\n\t"
65762 #ifdef WOLFSSL_KEIL
65763         "adcs	r3, r3, r5\n\t"
65764 #elif defined(__clang__)
65765         "adcs	r3, r5\n\t"
65766 #else
65767         "adc	r3, r5\n\t"
65768 #endif
65769 #ifdef WOLFSSL_KEIL
65770         "adcs	r4, r4, r6\n\t"
65771 #elif defined(__clang__)
65772         "adcs	r4, r6\n\t"
65773 #else
65774         "adc	r4, r6\n\t"
65775 #endif
65776         "stm	%[r]!, {r3, r4}\n\t"
65777         "movs	%[r], #0\n\t"
65778 #ifdef WOLFSSL_KEIL
65779         "adcs	%[r], %[r], %[r]\n\t"
65780 #elif defined(__clang__)
65781         "adcs	%[r], %[r]\n\t"
65782 #else
65783         "adc	%[r], %[r]\n\t"
65784 #endif
65785         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
65786         :
65787         : "memory", "r3", "r4", "r5", "r6"
65788     );
65789     return (uint32_t)(size_t)r;
65790 }
65791 
65792 /* Add b to a into r. (r = a + b)
65793  *
65794  * r  A single precision integer.
65795  * a  A single precision integer.
65796  * b  A single precision integer.
65797  */
sp_3072_add_to_word_12(sp_digit * r,sp_digit a,const sp_digit * b)65798 SP_NOINLINE static sp_digit sp_3072_add_to_word_12(sp_digit* r, sp_digit a,
65799         const sp_digit* b)
65800 {
65801     __asm__ __volatile__ (
65802         "movs	r5, #0\n\t"
65803         "ldm	%[b]!, {r3, r4}\n\t"
65804 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65805         "adds	r3, r3, %[a]\n\t"
65806 #else
65807         "add	r3, r3, %[a]\n\t"
65808 #endif
65809 #ifdef WOLFSSL_KEIL
65810         "adcs	r4, r4, r5\n\t"
65811 #elif defined(__clang__)
65812         "adcs	r4, r5\n\t"
65813 #else
65814         "adc	r4, r5\n\t"
65815 #endif
65816         "stm	%[r]!, {r3, r4}\n\t"
65817         "ldm	%[b]!, {r3, r4}\n\t"
65818 #ifdef WOLFSSL_KEIL
65819         "adcs	r3, r3, r5\n\t"
65820 #elif defined(__clang__)
65821         "adcs	r3, r5\n\t"
65822 #else
65823         "adc	r3, r5\n\t"
65824 #endif
65825 #ifdef WOLFSSL_KEIL
65826         "adcs	r4, r4, r5\n\t"
65827 #elif defined(__clang__)
65828         "adcs	r4, r5\n\t"
65829 #else
65830         "adc	r4, r5\n\t"
65831 #endif
65832         "stm	%[r]!, {r3, r4}\n\t"
65833         "ldm	%[b]!, {r3, r4}\n\t"
65834 #ifdef WOLFSSL_KEIL
65835         "adcs	r3, r3, r5\n\t"
65836 #elif defined(__clang__)
65837         "adcs	r3, r5\n\t"
65838 #else
65839         "adc	r3, r5\n\t"
65840 #endif
65841 #ifdef WOLFSSL_KEIL
65842         "adcs	r4, r4, r5\n\t"
65843 #elif defined(__clang__)
65844         "adcs	r4, r5\n\t"
65845 #else
65846         "adc	r4, r5\n\t"
65847 #endif
65848         "stm	%[r]!, {r3, r4}\n\t"
65849         "ldm	%[b]!, {r3, r4}\n\t"
65850 #ifdef WOLFSSL_KEIL
65851         "adcs	r3, r3, r5\n\t"
65852 #elif defined(__clang__)
65853         "adcs	r3, r5\n\t"
65854 #else
65855         "adc	r3, r5\n\t"
65856 #endif
65857 #ifdef WOLFSSL_KEIL
65858         "adcs	r4, r4, r5\n\t"
65859 #elif defined(__clang__)
65860         "adcs	r4, r5\n\t"
65861 #else
65862         "adc	r4, r5\n\t"
65863 #endif
65864         "stm	%[r]!, {r3, r4}\n\t"
65865         "ldm	%[b]!, {r3, r4}\n\t"
65866 #ifdef WOLFSSL_KEIL
65867         "adcs	r3, r3, r5\n\t"
65868 #elif defined(__clang__)
65869         "adcs	r3, r5\n\t"
65870 #else
65871         "adc	r3, r5\n\t"
65872 #endif
65873 #ifdef WOLFSSL_KEIL
65874         "adcs	r4, r4, r5\n\t"
65875 #elif defined(__clang__)
65876         "adcs	r4, r5\n\t"
65877 #else
65878         "adc	r4, r5\n\t"
65879 #endif
65880         "stm	%[r]!, {r3, r4}\n\t"
65881         "ldm	%[b]!, {r3, r4}\n\t"
65882 #ifdef WOLFSSL_KEIL
65883         "adcs	r3, r3, r5\n\t"
65884 #elif defined(__clang__)
65885         "adcs	r3, r5\n\t"
65886 #else
65887         "adc	r3, r5\n\t"
65888 #endif
65889 #ifdef WOLFSSL_KEIL
65890         "adcs	r4, r4, r5\n\t"
65891 #elif defined(__clang__)
65892         "adcs	r4, r5\n\t"
65893 #else
65894         "adc	r4, r5\n\t"
65895 #endif
65896         "stm	%[r]!, {r3, r4}\n\t"
65897         "movs	%[r], #0\n\t"
65898 #ifdef WOLFSSL_KEIL
65899         "adcs	%[r], %[r], %[r]\n\t"
65900 #elif defined(__clang__)
65901         "adcs	%[r], %[r]\n\t"
65902 #else
65903         "adc	%[r], %[r]\n\t"
65904 #endif
65905         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
65906         :
65907         : "memory", "r3", "r4", "r5"
65908     );
65909     return (uint32_t)(size_t)r;
65910 }
65911 
65912 /* Sub b from a into a. (a -= b)
65913  *
65914  * a  A single precision integer.
65915  * b  A single precision integer.
65916  */
sp_3072_sub_in_place_24(sp_digit * a,const sp_digit * b)65917 SP_NOINLINE static sp_digit sp_3072_sub_in_place_24(sp_digit* a,
65918         const sp_digit* b)
65919 {
65920     __asm__ __volatile__ (
65921         "ldm	%[b]!, {r4, r5}\n\t"
65922         "ldr	r2, [%[a]]\n\t"
65923         "ldr	r3, [%[a], #4]\n\t"
65924 #if defined(__clang__) || defined(WOLFSSL_KEIL)
65925         "subs	r2, r2, r4\n\t"
65926 #else
65927         "sub	r2, r2, r4\n\t"
65928 #endif
65929 #ifdef WOLFSSL_KEIL
65930         "sbcs	r3, r3, r5\n\t"
65931 #elif defined(__clang__)
65932         "sbcs	r3, r5\n\t"
65933 #else
65934         "sbc	r3, r5\n\t"
65935 #endif
65936         "stm	%[a]!, {r2, r3}\n\t"
65937         "ldm	%[b]!, {r4, r5}\n\t"
65938         "ldr	r2, [%[a]]\n\t"
65939         "ldr	r3, [%[a], #4]\n\t"
65940 #ifdef WOLFSSL_KEIL
65941         "sbcs	r2, r2, r4\n\t"
65942 #elif defined(__clang__)
65943         "sbcs	r2, r4\n\t"
65944 #else
65945         "sbc	r2, r4\n\t"
65946 #endif
65947 #ifdef WOLFSSL_KEIL
65948         "sbcs	r3, r3, r5\n\t"
65949 #elif defined(__clang__)
65950         "sbcs	r3, r5\n\t"
65951 #else
65952         "sbc	r3, r5\n\t"
65953 #endif
65954         "stm	%[a]!, {r2, r3}\n\t"
65955         "ldm	%[b]!, {r4, r5}\n\t"
65956         "ldr	r2, [%[a]]\n\t"
65957         "ldr	r3, [%[a], #4]\n\t"
65958 #ifdef WOLFSSL_KEIL
65959         "sbcs	r2, r2, r4\n\t"
65960 #elif defined(__clang__)
65961         "sbcs	r2, r4\n\t"
65962 #else
65963         "sbc	r2, r4\n\t"
65964 #endif
65965 #ifdef WOLFSSL_KEIL
65966         "sbcs	r3, r3, r5\n\t"
65967 #elif defined(__clang__)
65968         "sbcs	r3, r5\n\t"
65969 #else
65970         "sbc	r3, r5\n\t"
65971 #endif
65972         "stm	%[a]!, {r2, r3}\n\t"
65973         "ldm	%[b]!, {r4, r5}\n\t"
65974         "ldr	r2, [%[a]]\n\t"
65975         "ldr	r3, [%[a], #4]\n\t"
65976 #ifdef WOLFSSL_KEIL
65977         "sbcs	r2, r2, r4\n\t"
65978 #elif defined(__clang__)
65979         "sbcs	r2, r4\n\t"
65980 #else
65981         "sbc	r2, r4\n\t"
65982 #endif
65983 #ifdef WOLFSSL_KEIL
65984         "sbcs	r3, r3, r5\n\t"
65985 #elif defined(__clang__)
65986         "sbcs	r3, r5\n\t"
65987 #else
65988         "sbc	r3, r5\n\t"
65989 #endif
65990         "stm	%[a]!, {r2, r3}\n\t"
65991         "ldm	%[b]!, {r4, r5}\n\t"
65992         "ldr	r2, [%[a]]\n\t"
65993         "ldr	r3, [%[a], #4]\n\t"
65994 #ifdef WOLFSSL_KEIL
65995         "sbcs	r2, r2, r4\n\t"
65996 #elif defined(__clang__)
65997         "sbcs	r2, r4\n\t"
65998 #else
65999         "sbc	r2, r4\n\t"
66000 #endif
66001 #ifdef WOLFSSL_KEIL
66002         "sbcs	r3, r3, r5\n\t"
66003 #elif defined(__clang__)
66004         "sbcs	r3, r5\n\t"
66005 #else
66006         "sbc	r3, r5\n\t"
66007 #endif
66008         "stm	%[a]!, {r2, r3}\n\t"
66009         "ldm	%[b]!, {r4, r5}\n\t"
66010         "ldr	r2, [%[a]]\n\t"
66011         "ldr	r3, [%[a], #4]\n\t"
66012 #ifdef WOLFSSL_KEIL
66013         "sbcs	r2, r2, r4\n\t"
66014 #elif defined(__clang__)
66015         "sbcs	r2, r4\n\t"
66016 #else
66017         "sbc	r2, r4\n\t"
66018 #endif
66019 #ifdef WOLFSSL_KEIL
66020         "sbcs	r3, r3, r5\n\t"
66021 #elif defined(__clang__)
66022         "sbcs	r3, r5\n\t"
66023 #else
66024         "sbc	r3, r5\n\t"
66025 #endif
66026         "stm	%[a]!, {r2, r3}\n\t"
66027         "ldm	%[b]!, {r4, r5}\n\t"
66028         "ldr	r2, [%[a]]\n\t"
66029         "ldr	r3, [%[a], #4]\n\t"
66030 #ifdef WOLFSSL_KEIL
66031         "sbcs	r2, r2, r4\n\t"
66032 #elif defined(__clang__)
66033         "sbcs	r2, r4\n\t"
66034 #else
66035         "sbc	r2, r4\n\t"
66036 #endif
66037 #ifdef WOLFSSL_KEIL
66038         "sbcs	r3, r3, r5\n\t"
66039 #elif defined(__clang__)
66040         "sbcs	r3, r5\n\t"
66041 #else
66042         "sbc	r3, r5\n\t"
66043 #endif
66044         "stm	%[a]!, {r2, r3}\n\t"
66045         "ldm	%[b]!, {r4, r5}\n\t"
66046         "ldr	r2, [%[a]]\n\t"
66047         "ldr	r3, [%[a], #4]\n\t"
66048 #ifdef WOLFSSL_KEIL
66049         "sbcs	r2, r2, r4\n\t"
66050 #elif defined(__clang__)
66051         "sbcs	r2, r4\n\t"
66052 #else
66053         "sbc	r2, r4\n\t"
66054 #endif
66055 #ifdef WOLFSSL_KEIL
66056         "sbcs	r3, r3, r5\n\t"
66057 #elif defined(__clang__)
66058         "sbcs	r3, r5\n\t"
66059 #else
66060         "sbc	r3, r5\n\t"
66061 #endif
66062         "stm	%[a]!, {r2, r3}\n\t"
66063         "ldm	%[b]!, {r4, r5}\n\t"
66064         "ldr	r2, [%[a]]\n\t"
66065         "ldr	r3, [%[a], #4]\n\t"
66066 #ifdef WOLFSSL_KEIL
66067         "sbcs	r2, r2, r4\n\t"
66068 #elif defined(__clang__)
66069         "sbcs	r2, r4\n\t"
66070 #else
66071         "sbc	r2, r4\n\t"
66072 #endif
66073 #ifdef WOLFSSL_KEIL
66074         "sbcs	r3, r3, r5\n\t"
66075 #elif defined(__clang__)
66076         "sbcs	r3, r5\n\t"
66077 #else
66078         "sbc	r3, r5\n\t"
66079 #endif
66080         "stm	%[a]!, {r2, r3}\n\t"
66081         "ldm	%[b]!, {r4, r5}\n\t"
66082         "ldr	r2, [%[a]]\n\t"
66083         "ldr	r3, [%[a], #4]\n\t"
66084 #ifdef WOLFSSL_KEIL
66085         "sbcs	r2, r2, r4\n\t"
66086 #elif defined(__clang__)
66087         "sbcs	r2, r4\n\t"
66088 #else
66089         "sbc	r2, r4\n\t"
66090 #endif
66091 #ifdef WOLFSSL_KEIL
66092         "sbcs	r3, r3, r5\n\t"
66093 #elif defined(__clang__)
66094         "sbcs	r3, r5\n\t"
66095 #else
66096         "sbc	r3, r5\n\t"
66097 #endif
66098         "stm	%[a]!, {r2, r3}\n\t"
66099         "ldm	%[b]!, {r4, r5}\n\t"
66100         "ldr	r2, [%[a]]\n\t"
66101         "ldr	r3, [%[a], #4]\n\t"
66102 #ifdef WOLFSSL_KEIL
66103         "sbcs	r2, r2, r4\n\t"
66104 #elif defined(__clang__)
66105         "sbcs	r2, r4\n\t"
66106 #else
66107         "sbc	r2, r4\n\t"
66108 #endif
66109 #ifdef WOLFSSL_KEIL
66110         "sbcs	r3, r3, r5\n\t"
66111 #elif defined(__clang__)
66112         "sbcs	r3, r5\n\t"
66113 #else
66114         "sbc	r3, r5\n\t"
66115 #endif
66116         "stm	%[a]!, {r2, r3}\n\t"
66117         "ldm	%[b]!, {r4, r5}\n\t"
66118         "ldr	r2, [%[a]]\n\t"
66119         "ldr	r3, [%[a], #4]\n\t"
66120 #ifdef WOLFSSL_KEIL
66121         "sbcs	r2, r2, r4\n\t"
66122 #elif defined(__clang__)
66123         "sbcs	r2, r4\n\t"
66124 #else
66125         "sbc	r2, r4\n\t"
66126 #endif
66127 #ifdef WOLFSSL_KEIL
66128         "sbcs	r3, r3, r5\n\t"
66129 #elif defined(__clang__)
66130         "sbcs	r3, r5\n\t"
66131 #else
66132         "sbc	r3, r5\n\t"
66133 #endif
66134         "stm	%[a]!, {r2, r3}\n\t"
66135 #ifdef WOLFSSL_KEIL
66136         "sbcs	%[a], %[a], %[a]\n\t"
66137 #elif defined(__clang__)
66138         "sbcs	%[a], %[a]\n\t"
66139 #else
66140         "sbc	%[a], %[a]\n\t"
66141 #endif
66142         : [a] "+r" (a), [b] "+r" (b)
66143         :
66144         : "memory", "r2", "r3", "r4", "r5"
66145     );
66146     return (uint32_t)(size_t)a;
66147 }
66148 
66149 /* Add b to a into r. (r = a + b)
66150  *
66151  * r  A single precision integer.
66152  * a  A single precision integer.
66153  * b  A single precision integer.
66154  */
sp_3072_add_24(sp_digit * r,const sp_digit * a,const sp_digit * b)66155 SP_NOINLINE static sp_digit sp_3072_add_24(sp_digit* r, const sp_digit* a,
66156         const sp_digit* b)
66157 {
66158     __asm__ __volatile__ (
66159         "ldm	%[b]!, {r5, r6}\n\t"
66160         "ldm	%[a]!, {r3, r4}\n\t"
66161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
66162         "adds	r3, r3, r5\n\t"
66163 #else
66164         "add	r3, r3, r5\n\t"
66165 #endif
66166 #ifdef WOLFSSL_KEIL
66167         "adcs	r4, r4, r6\n\t"
66168 #elif defined(__clang__)
66169         "adcs	r4, r6\n\t"
66170 #else
66171         "adc	r4, r6\n\t"
66172 #endif
66173         "stm	%[r]!, {r3, r4}\n\t"
66174         "ldm	%[b]!, {r5, r6}\n\t"
66175         "ldm	%[a]!, {r3, r4}\n\t"
66176 #ifdef WOLFSSL_KEIL
66177         "adcs	r3, r3, r5\n\t"
66178 #elif defined(__clang__)
66179         "adcs	r3, r5\n\t"
66180 #else
66181         "adc	r3, r5\n\t"
66182 #endif
66183 #ifdef WOLFSSL_KEIL
66184         "adcs	r4, r4, r6\n\t"
66185 #elif defined(__clang__)
66186         "adcs	r4, r6\n\t"
66187 #else
66188         "adc	r4, r6\n\t"
66189 #endif
66190         "stm	%[r]!, {r3, r4}\n\t"
66191         "ldm	%[b]!, {r5, r6}\n\t"
66192         "ldm	%[a]!, {r3, r4}\n\t"
66193 #ifdef WOLFSSL_KEIL
66194         "adcs	r3, r3, r5\n\t"
66195 #elif defined(__clang__)
66196         "adcs	r3, r5\n\t"
66197 #else
66198         "adc	r3, r5\n\t"
66199 #endif
66200 #ifdef WOLFSSL_KEIL
66201         "adcs	r4, r4, r6\n\t"
66202 #elif defined(__clang__)
66203         "adcs	r4, r6\n\t"
66204 #else
66205         "adc	r4, r6\n\t"
66206 #endif
66207         "stm	%[r]!, {r3, r4}\n\t"
66208         "ldm	%[b]!, {r5, r6}\n\t"
66209         "ldm	%[a]!, {r3, r4}\n\t"
66210 #ifdef WOLFSSL_KEIL
66211         "adcs	r3, r3, r5\n\t"
66212 #elif defined(__clang__)
66213         "adcs	r3, r5\n\t"
66214 #else
66215         "adc	r3, r5\n\t"
66216 #endif
66217 #ifdef WOLFSSL_KEIL
66218         "adcs	r4, r4, r6\n\t"
66219 #elif defined(__clang__)
66220         "adcs	r4, r6\n\t"
66221 #else
66222         "adc	r4, r6\n\t"
66223 #endif
66224         "stm	%[r]!, {r3, r4}\n\t"
66225         "ldm	%[b]!, {r5, r6}\n\t"
66226         "ldm	%[a]!, {r3, r4}\n\t"
66227 #ifdef WOLFSSL_KEIL
66228         "adcs	r3, r3, r5\n\t"
66229 #elif defined(__clang__)
66230         "adcs	r3, r5\n\t"
66231 #else
66232         "adc	r3, r5\n\t"
66233 #endif
66234 #ifdef WOLFSSL_KEIL
66235         "adcs	r4, r4, r6\n\t"
66236 #elif defined(__clang__)
66237         "adcs	r4, r6\n\t"
66238 #else
66239         "adc	r4, r6\n\t"
66240 #endif
66241         "stm	%[r]!, {r3, r4}\n\t"
66242         "ldm	%[b]!, {r5, r6}\n\t"
66243         "ldm	%[a]!, {r3, r4}\n\t"
66244 #ifdef WOLFSSL_KEIL
66245         "adcs	r3, r3, r5\n\t"
66246 #elif defined(__clang__)
66247         "adcs	r3, r5\n\t"
66248 #else
66249         "adc	r3, r5\n\t"
66250 #endif
66251 #ifdef WOLFSSL_KEIL
66252         "adcs	r4, r4, r6\n\t"
66253 #elif defined(__clang__)
66254         "adcs	r4, r6\n\t"
66255 #else
66256         "adc	r4, r6\n\t"
66257 #endif
66258         "stm	%[r]!, {r3, r4}\n\t"
66259         "ldm	%[b]!, {r5, r6}\n\t"
66260         "ldm	%[a]!, {r3, r4}\n\t"
66261 #ifdef WOLFSSL_KEIL
66262         "adcs	r3, r3, r5\n\t"
66263 #elif defined(__clang__)
66264         "adcs	r3, r5\n\t"
66265 #else
66266         "adc	r3, r5\n\t"
66267 #endif
66268 #ifdef WOLFSSL_KEIL
66269         "adcs	r4, r4, r6\n\t"
66270 #elif defined(__clang__)
66271         "adcs	r4, r6\n\t"
66272 #else
66273         "adc	r4, r6\n\t"
66274 #endif
66275         "stm	%[r]!, {r3, r4}\n\t"
66276         "ldm	%[b]!, {r5, r6}\n\t"
66277         "ldm	%[a]!, {r3, r4}\n\t"
66278 #ifdef WOLFSSL_KEIL
66279         "adcs	r3, r3, r5\n\t"
66280 #elif defined(__clang__)
66281         "adcs	r3, r5\n\t"
66282 #else
66283         "adc	r3, r5\n\t"
66284 #endif
66285 #ifdef WOLFSSL_KEIL
66286         "adcs	r4, r4, r6\n\t"
66287 #elif defined(__clang__)
66288         "adcs	r4, r6\n\t"
66289 #else
66290         "adc	r4, r6\n\t"
66291 #endif
66292         "stm	%[r]!, {r3, r4}\n\t"
66293         "ldm	%[b]!, {r5, r6}\n\t"
66294         "ldm	%[a]!, {r3, r4}\n\t"
66295 #ifdef WOLFSSL_KEIL
66296         "adcs	r3, r3, r5\n\t"
66297 #elif defined(__clang__)
66298         "adcs	r3, r5\n\t"
66299 #else
66300         "adc	r3, r5\n\t"
66301 #endif
66302 #ifdef WOLFSSL_KEIL
66303         "adcs	r4, r4, r6\n\t"
66304 #elif defined(__clang__)
66305         "adcs	r4, r6\n\t"
66306 #else
66307         "adc	r4, r6\n\t"
66308 #endif
66309         "stm	%[r]!, {r3, r4}\n\t"
66310         "ldm	%[b]!, {r5, r6}\n\t"
66311         "ldm	%[a]!, {r3, r4}\n\t"
66312 #ifdef WOLFSSL_KEIL
66313         "adcs	r3, r3, r5\n\t"
66314 #elif defined(__clang__)
66315         "adcs	r3, r5\n\t"
66316 #else
66317         "adc	r3, r5\n\t"
66318 #endif
66319 #ifdef WOLFSSL_KEIL
66320         "adcs	r4, r4, r6\n\t"
66321 #elif defined(__clang__)
66322         "adcs	r4, r6\n\t"
66323 #else
66324         "adc	r4, r6\n\t"
66325 #endif
66326         "stm	%[r]!, {r3, r4}\n\t"
66327         "ldm	%[b]!, {r5, r6}\n\t"
66328         "ldm	%[a]!, {r3, r4}\n\t"
66329 #ifdef WOLFSSL_KEIL
66330         "adcs	r3, r3, r5\n\t"
66331 #elif defined(__clang__)
66332         "adcs	r3, r5\n\t"
66333 #else
66334         "adc	r3, r5\n\t"
66335 #endif
66336 #ifdef WOLFSSL_KEIL
66337         "adcs	r4, r4, r6\n\t"
66338 #elif defined(__clang__)
66339         "adcs	r4, r6\n\t"
66340 #else
66341         "adc	r4, r6\n\t"
66342 #endif
66343         "stm	%[r]!, {r3, r4}\n\t"
66344         "ldm	%[b]!, {r5, r6}\n\t"
66345         "ldm	%[a]!, {r3, r4}\n\t"
66346 #ifdef WOLFSSL_KEIL
66347         "adcs	r3, r3, r5\n\t"
66348 #elif defined(__clang__)
66349         "adcs	r3, r5\n\t"
66350 #else
66351         "adc	r3, r5\n\t"
66352 #endif
66353 #ifdef WOLFSSL_KEIL
66354         "adcs	r4, r4, r6\n\t"
66355 #elif defined(__clang__)
66356         "adcs	r4, r6\n\t"
66357 #else
66358         "adc	r4, r6\n\t"
66359 #endif
66360         "stm	%[r]!, {r3, r4}\n\t"
66361         "movs	%[r], #0\n\t"
66362 #ifdef WOLFSSL_KEIL
66363         "adcs	%[r], %[r], %[r]\n\t"
66364 #elif defined(__clang__)
66365         "adcs	%[r], %[r]\n\t"
66366 #else
66367         "adc	%[r], %[r]\n\t"
66368 #endif
66369         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
66370         :
66371         : "memory", "r3", "r4", "r5", "r6"
66372     );
66373     return (uint32_t)(size_t)r;
66374 }
66375 
66376 /* AND m into each word of a and store in r.
66377  *
66378  * r  A single precision integer.
66379  * a  A single precision integer.
66380  * m  Mask to AND against each digit.
66381  */
sp_3072_mask_12(sp_digit * r,const sp_digit * a,sp_digit m)66382 static void sp_3072_mask_12(sp_digit* r, const sp_digit* a, sp_digit m)
66383 {
66384 #ifdef WOLFSSL_SP_SMALL
66385     int i;
66386 
66387     for (i=0; i<12; i++) {
66388         r[i] = a[i] & m;
66389     }
66390 #else
66391     r[0] = a[0] & m;
66392     r[1] = a[1] & m;
66393     r[2] = a[2] & m;
66394     r[3] = a[3] & m;
66395     r[4] = a[4] & m;
66396     r[5] = a[5] & m;
66397     r[6] = a[6] & m;
66398     r[7] = a[7] & m;
66399     r[8] = a[8] & m;
66400     r[9] = a[9] & m;
66401     r[10] = a[10] & m;
66402     r[11] = a[11] & m;
66403 #endif
66404 }
66405 
66406 /* Multiply a and b into r. (r = a * b)
66407  *
66408  * r  A single precision integer.
66409  * a  A single precision integer.
66410  * b  A single precision integer.
66411  */
sp_3072_mul_24(sp_digit * r,const sp_digit * a,const sp_digit * b)66412 SP_NOINLINE static void sp_3072_mul_24(sp_digit* r, const sp_digit* a,
66413         const sp_digit* b)
66414 {
66415     sp_digit* z0 = r;
66416     sp_digit z1[24];
66417     sp_digit a1[12];
66418     sp_digit b1[12];
66419     sp_digit z2[24];
66420     sp_digit u;
66421     sp_digit ca;
66422     sp_digit cb;
66423 
66424     ca = sp_3072_add_12(a1, a, &a[12]);
66425     cb = sp_3072_add_12(b1, b, &b[12]);
66426     u  = ca & cb;
66427     sp_3072_mul_12(z1, a1, b1);
66428     sp_3072_mul_12(z2, &a[12], &b[12]);
66429     sp_3072_mul_12(z0, a, b);
66430     sp_3072_mask_12(r + 24, a1, 0 - cb);
66431     sp_3072_mask_12(b1, b1, 0 - ca);
66432     u += sp_3072_add_12(r + 24, r + 24, b1);
66433     u += sp_3072_sub_in_place_24(z1, z2);
66434     u += sp_3072_sub_in_place_24(z1, z0);
66435     u += sp_3072_add_24(r + 12, r + 12, z1);
66436     u += sp_3072_add_12(r + 24, r + 24, z2);
66437     (void)sp_3072_add_to_word_12(r + 36, u, z2 + 12);
66438 }
66439 
66440 /* Double a into r. (r = a + a)
66441  *
66442  * r  A single precision integer.
66443  * a  A single precision integer.
66444  */
sp_3072_dbl_12(sp_digit * r,const sp_digit * a)66445 SP_NOINLINE static sp_digit sp_3072_dbl_12(sp_digit* r, const sp_digit* a)
66446 {
66447     __asm__ __volatile__ (
66448         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
66449 #if defined(__clang__) || defined(WOLFSSL_KEIL)
66450         "adds	r2, r2, r2\n\t"
66451 #else
66452         "add	r2, r2, r2\n\t"
66453 #endif
66454 #ifdef WOLFSSL_KEIL
66455         "adcs	r3, r3, r3\n\t"
66456 #elif defined(__clang__)
66457         "adcs	r3, r3\n\t"
66458 #else
66459         "adc	r3, r3\n\t"
66460 #endif
66461 #ifdef WOLFSSL_KEIL
66462         "adcs	r4, r4, r4\n\t"
66463 #elif defined(__clang__)
66464         "adcs	r4, r4\n\t"
66465 #else
66466         "adc	r4, r4\n\t"
66467 #endif
66468 #ifdef WOLFSSL_KEIL
66469         "adcs	r5, r5, r5\n\t"
66470 #elif defined(__clang__)
66471         "adcs	r5, r5\n\t"
66472 #else
66473         "adc	r5, r5\n\t"
66474 #endif
66475         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
66476         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
66477 #ifdef WOLFSSL_KEIL
66478         "adcs	r2, r2, r2\n\t"
66479 #elif defined(__clang__)
66480         "adcs	r2, r2\n\t"
66481 #else
66482         "adc	r2, r2\n\t"
66483 #endif
66484 #ifdef WOLFSSL_KEIL
66485         "adcs	r3, r3, r3\n\t"
66486 #elif defined(__clang__)
66487         "adcs	r3, r3\n\t"
66488 #else
66489         "adc	r3, r3\n\t"
66490 #endif
66491 #ifdef WOLFSSL_KEIL
66492         "adcs	r4, r4, r4\n\t"
66493 #elif defined(__clang__)
66494         "adcs	r4, r4\n\t"
66495 #else
66496         "adc	r4, r4\n\t"
66497 #endif
66498 #ifdef WOLFSSL_KEIL
66499         "adcs	r5, r5, r5\n\t"
66500 #elif defined(__clang__)
66501         "adcs	r5, r5\n\t"
66502 #else
66503         "adc	r5, r5\n\t"
66504 #endif
66505         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
66506         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
66507 #ifdef WOLFSSL_KEIL
66508         "adcs	r2, r2, r2\n\t"
66509 #elif defined(__clang__)
66510         "adcs	r2, r2\n\t"
66511 #else
66512         "adc	r2, r2\n\t"
66513 #endif
66514 #ifdef WOLFSSL_KEIL
66515         "adcs	r3, r3, r3\n\t"
66516 #elif defined(__clang__)
66517         "adcs	r3, r3\n\t"
66518 #else
66519         "adc	r3, r3\n\t"
66520 #endif
66521 #ifdef WOLFSSL_KEIL
66522         "adcs	r4, r4, r4\n\t"
66523 #elif defined(__clang__)
66524         "adcs	r4, r4\n\t"
66525 #else
66526         "adc	r4, r4\n\t"
66527 #endif
66528 #ifdef WOLFSSL_KEIL
66529         "adcs	r5, r5, r5\n\t"
66530 #elif defined(__clang__)
66531         "adcs	r5, r5\n\t"
66532 #else
66533         "adc	r5, r5\n\t"
66534 #endif
66535         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
66536         "movs	%[r], #0\n\t"
66537 #ifdef WOLFSSL_KEIL
66538         "adcs	%[r], %[r], %[r]\n\t"
66539 #elif defined(__clang__)
66540         "adcs	%[r], %[r]\n\t"
66541 #else
66542         "adc	%[r], %[r]\n\t"
66543 #endif
66544         : [r] "+r" (r), [a] "+r" (a)
66545         :
66546         : "memory", "r2", "r3", "r4", "r5"
66547     );
66548     return (uint32_t)(size_t)r;
66549 }
66550 
66551 /* Square a and put result in r. (r = a * a)
66552  *
66553  * r  A single precision integer.
66554  * a  A single precision integer.
66555  */
sp_3072_sqr_24(sp_digit * r,const sp_digit * a)66556 SP_NOINLINE static void sp_3072_sqr_24(sp_digit* r, const sp_digit* a)
66557 {
66558     sp_digit* z0 = r;
66559     sp_digit z2[24];
66560     sp_digit z1[24];
66561     sp_digit a1[12];
66562     sp_digit u;
66563 
66564     u = sp_3072_add_12(a1, a, &a[12]);
66565     sp_3072_sqr_12(z1, a1);
66566     sp_3072_sqr_12(z2, &a[12]);
66567     sp_3072_sqr_12(z0, a);
66568     sp_3072_mask_12(r + 24, a1, 0 - u);
66569     u += sp_3072_dbl_12(r + 24, r + 24);
66570     u += sp_3072_sub_in_place_24(z1, z2);
66571     u += sp_3072_sub_in_place_24(z1, z0);
66572     u += sp_3072_add_24(r + 12, r + 12, z1);
66573     u += sp_3072_add_12(r + 24, r + 24, z2);
66574     (void)sp_3072_add_to_word_12(r + 36, u, z2 + 12);
66575 }
66576 
66577 /* Add b to a into r. (r = a + b)
66578  *
66579  * r  A single precision integer.
66580  * a  A single precision integer.
66581  * b  A single precision integer.
66582  */
sp_3072_add_to_word_24(sp_digit * r,sp_digit a,const sp_digit * b)66583 SP_NOINLINE static sp_digit sp_3072_add_to_word_24(sp_digit* r, sp_digit a,
66584         const sp_digit* b)
66585 {
66586     __asm__ __volatile__ (
66587         "movs	r5, #0\n\t"
66588         "ldm	%[b]!, {r3, r4}\n\t"
66589 #if defined(__clang__) || defined(WOLFSSL_KEIL)
66590         "adds	r3, r3, %[a]\n\t"
66591 #else
66592         "add	r3, r3, %[a]\n\t"
66593 #endif
66594 #ifdef WOLFSSL_KEIL
66595         "adcs	r4, r4, r5\n\t"
66596 #elif defined(__clang__)
66597         "adcs	r4, r5\n\t"
66598 #else
66599         "adc	r4, r5\n\t"
66600 #endif
66601         "stm	%[r]!, {r3, r4}\n\t"
66602         "ldm	%[b]!, {r3, r4}\n\t"
66603 #ifdef WOLFSSL_KEIL
66604         "adcs	r3, r3, r5\n\t"
66605 #elif defined(__clang__)
66606         "adcs	r3, r5\n\t"
66607 #else
66608         "adc	r3, r5\n\t"
66609 #endif
66610 #ifdef WOLFSSL_KEIL
66611         "adcs	r4, r4, r5\n\t"
66612 #elif defined(__clang__)
66613         "adcs	r4, r5\n\t"
66614 #else
66615         "adc	r4, r5\n\t"
66616 #endif
66617         "stm	%[r]!, {r3, r4}\n\t"
66618         "ldm	%[b]!, {r3, r4}\n\t"
66619 #ifdef WOLFSSL_KEIL
66620         "adcs	r3, r3, r5\n\t"
66621 #elif defined(__clang__)
66622         "adcs	r3, r5\n\t"
66623 #else
66624         "adc	r3, r5\n\t"
66625 #endif
66626 #ifdef WOLFSSL_KEIL
66627         "adcs	r4, r4, r5\n\t"
66628 #elif defined(__clang__)
66629         "adcs	r4, r5\n\t"
66630 #else
66631         "adc	r4, r5\n\t"
66632 #endif
66633         "stm	%[r]!, {r3, r4}\n\t"
66634         "ldm	%[b]!, {r3, r4}\n\t"
66635 #ifdef WOLFSSL_KEIL
66636         "adcs	r3, r3, r5\n\t"
66637 #elif defined(__clang__)
66638         "adcs	r3, r5\n\t"
66639 #else
66640         "adc	r3, r5\n\t"
66641 #endif
66642 #ifdef WOLFSSL_KEIL
66643         "adcs	r4, r4, r5\n\t"
66644 #elif defined(__clang__)
66645         "adcs	r4, r5\n\t"
66646 #else
66647         "adc	r4, r5\n\t"
66648 #endif
66649         "stm	%[r]!, {r3, r4}\n\t"
66650         "ldm	%[b]!, {r3, r4}\n\t"
66651 #ifdef WOLFSSL_KEIL
66652         "adcs	r3, r3, r5\n\t"
66653 #elif defined(__clang__)
66654         "adcs	r3, r5\n\t"
66655 #else
66656         "adc	r3, r5\n\t"
66657 #endif
66658 #ifdef WOLFSSL_KEIL
66659         "adcs	r4, r4, r5\n\t"
66660 #elif defined(__clang__)
66661         "adcs	r4, r5\n\t"
66662 #else
66663         "adc	r4, r5\n\t"
66664 #endif
66665         "stm	%[r]!, {r3, r4}\n\t"
66666         "ldm	%[b]!, {r3, r4}\n\t"
66667 #ifdef WOLFSSL_KEIL
66668         "adcs	r3, r3, r5\n\t"
66669 #elif defined(__clang__)
66670         "adcs	r3, r5\n\t"
66671 #else
66672         "adc	r3, r5\n\t"
66673 #endif
66674 #ifdef WOLFSSL_KEIL
66675         "adcs	r4, r4, r5\n\t"
66676 #elif defined(__clang__)
66677         "adcs	r4, r5\n\t"
66678 #else
66679         "adc	r4, r5\n\t"
66680 #endif
66681         "stm	%[r]!, {r3, r4}\n\t"
66682         "ldm	%[b]!, {r3, r4}\n\t"
66683 #ifdef WOLFSSL_KEIL
66684         "adcs	r3, r3, r5\n\t"
66685 #elif defined(__clang__)
66686         "adcs	r3, r5\n\t"
66687 #else
66688         "adc	r3, r5\n\t"
66689 #endif
66690 #ifdef WOLFSSL_KEIL
66691         "adcs	r4, r4, r5\n\t"
66692 #elif defined(__clang__)
66693         "adcs	r4, r5\n\t"
66694 #else
66695         "adc	r4, r5\n\t"
66696 #endif
66697         "stm	%[r]!, {r3, r4}\n\t"
66698         "ldm	%[b]!, {r3, r4}\n\t"
66699 #ifdef WOLFSSL_KEIL
66700         "adcs	r3, r3, r5\n\t"
66701 #elif defined(__clang__)
66702         "adcs	r3, r5\n\t"
66703 #else
66704         "adc	r3, r5\n\t"
66705 #endif
66706 #ifdef WOLFSSL_KEIL
66707         "adcs	r4, r4, r5\n\t"
66708 #elif defined(__clang__)
66709         "adcs	r4, r5\n\t"
66710 #else
66711         "adc	r4, r5\n\t"
66712 #endif
66713         "stm	%[r]!, {r3, r4}\n\t"
66714         "ldm	%[b]!, {r3, r4}\n\t"
66715 #ifdef WOLFSSL_KEIL
66716         "adcs	r3, r3, r5\n\t"
66717 #elif defined(__clang__)
66718         "adcs	r3, r5\n\t"
66719 #else
66720         "adc	r3, r5\n\t"
66721 #endif
66722 #ifdef WOLFSSL_KEIL
66723         "adcs	r4, r4, r5\n\t"
66724 #elif defined(__clang__)
66725         "adcs	r4, r5\n\t"
66726 #else
66727         "adc	r4, r5\n\t"
66728 #endif
66729         "stm	%[r]!, {r3, r4}\n\t"
66730         "ldm	%[b]!, {r3, r4}\n\t"
66731 #ifdef WOLFSSL_KEIL
66732         "adcs	r3, r3, r5\n\t"
66733 #elif defined(__clang__)
66734         "adcs	r3, r5\n\t"
66735 #else
66736         "adc	r3, r5\n\t"
66737 #endif
66738 #ifdef WOLFSSL_KEIL
66739         "adcs	r4, r4, r5\n\t"
66740 #elif defined(__clang__)
66741         "adcs	r4, r5\n\t"
66742 #else
66743         "adc	r4, r5\n\t"
66744 #endif
66745         "stm	%[r]!, {r3, r4}\n\t"
66746         "ldm	%[b]!, {r3, r4}\n\t"
66747 #ifdef WOLFSSL_KEIL
66748         "adcs	r3, r3, r5\n\t"
66749 #elif defined(__clang__)
66750         "adcs	r3, r5\n\t"
66751 #else
66752         "adc	r3, r5\n\t"
66753 #endif
66754 #ifdef WOLFSSL_KEIL
66755         "adcs	r4, r4, r5\n\t"
66756 #elif defined(__clang__)
66757         "adcs	r4, r5\n\t"
66758 #else
66759         "adc	r4, r5\n\t"
66760 #endif
66761         "stm	%[r]!, {r3, r4}\n\t"
66762         "ldm	%[b]!, {r3, r4}\n\t"
66763 #ifdef WOLFSSL_KEIL
66764         "adcs	r3, r3, r5\n\t"
66765 #elif defined(__clang__)
66766         "adcs	r3, r5\n\t"
66767 #else
66768         "adc	r3, r5\n\t"
66769 #endif
66770 #ifdef WOLFSSL_KEIL
66771         "adcs	r4, r4, r5\n\t"
66772 #elif defined(__clang__)
66773         "adcs	r4, r5\n\t"
66774 #else
66775         "adc	r4, r5\n\t"
66776 #endif
66777         "stm	%[r]!, {r3, r4}\n\t"
66778         "movs	%[r], #0\n\t"
66779 #ifdef WOLFSSL_KEIL
66780         "adcs	%[r], %[r], %[r]\n\t"
66781 #elif defined(__clang__)
66782         "adcs	%[r], %[r]\n\t"
66783 #else
66784         "adc	%[r], %[r]\n\t"
66785 #endif
66786         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
66787         :
66788         : "memory", "r3", "r4", "r5"
66789     );
66790     return (uint32_t)(size_t)r;
66791 }
66792 
66793 /* Sub b from a into a. (a -= b)
66794  *
66795  * a  A single precision integer.
66796  * b  A single precision integer.
66797  */
sp_3072_sub_in_place_48(sp_digit * a,const sp_digit * b)66798 SP_NOINLINE static sp_digit sp_3072_sub_in_place_48(sp_digit* a,
66799         const sp_digit* b)
66800 {
66801     __asm__ __volatile__ (
66802         "ldm	%[b]!, {r4, r5}\n\t"
66803         "ldr	r2, [%[a]]\n\t"
66804         "ldr	r3, [%[a], #4]\n\t"
66805 #if defined(__clang__) || defined(WOLFSSL_KEIL)
66806         "subs	r2, r2, r4\n\t"
66807 #else
66808         "sub	r2, r2, r4\n\t"
66809 #endif
66810 #ifdef WOLFSSL_KEIL
66811         "sbcs	r3, r3, r5\n\t"
66812 #elif defined(__clang__)
66813         "sbcs	r3, r5\n\t"
66814 #else
66815         "sbc	r3, r5\n\t"
66816 #endif
66817         "stm	%[a]!, {r2, r3}\n\t"
66818         "ldm	%[b]!, {r4, r5}\n\t"
66819         "ldr	r2, [%[a]]\n\t"
66820         "ldr	r3, [%[a], #4]\n\t"
66821 #ifdef WOLFSSL_KEIL
66822         "sbcs	r2, r2, r4\n\t"
66823 #elif defined(__clang__)
66824         "sbcs	r2, r4\n\t"
66825 #else
66826         "sbc	r2, r4\n\t"
66827 #endif
66828 #ifdef WOLFSSL_KEIL
66829         "sbcs	r3, r3, r5\n\t"
66830 #elif defined(__clang__)
66831         "sbcs	r3, r5\n\t"
66832 #else
66833         "sbc	r3, r5\n\t"
66834 #endif
66835         "stm	%[a]!, {r2, r3}\n\t"
66836         "ldm	%[b]!, {r4, r5}\n\t"
66837         "ldr	r2, [%[a]]\n\t"
66838         "ldr	r3, [%[a], #4]\n\t"
66839 #ifdef WOLFSSL_KEIL
66840         "sbcs	r2, r2, r4\n\t"
66841 #elif defined(__clang__)
66842         "sbcs	r2, r4\n\t"
66843 #else
66844         "sbc	r2, r4\n\t"
66845 #endif
66846 #ifdef WOLFSSL_KEIL
66847         "sbcs	r3, r3, r5\n\t"
66848 #elif defined(__clang__)
66849         "sbcs	r3, r5\n\t"
66850 #else
66851         "sbc	r3, r5\n\t"
66852 #endif
66853         "stm	%[a]!, {r2, r3}\n\t"
66854         "ldm	%[b]!, {r4, r5}\n\t"
66855         "ldr	r2, [%[a]]\n\t"
66856         "ldr	r3, [%[a], #4]\n\t"
66857 #ifdef WOLFSSL_KEIL
66858         "sbcs	r2, r2, r4\n\t"
66859 #elif defined(__clang__)
66860         "sbcs	r2, r4\n\t"
66861 #else
66862         "sbc	r2, r4\n\t"
66863 #endif
66864 #ifdef WOLFSSL_KEIL
66865         "sbcs	r3, r3, r5\n\t"
66866 #elif defined(__clang__)
66867         "sbcs	r3, r5\n\t"
66868 #else
66869         "sbc	r3, r5\n\t"
66870 #endif
66871         "stm	%[a]!, {r2, r3}\n\t"
66872         "ldm	%[b]!, {r4, r5}\n\t"
66873         "ldr	r2, [%[a]]\n\t"
66874         "ldr	r3, [%[a], #4]\n\t"
66875 #ifdef WOLFSSL_KEIL
66876         "sbcs	r2, r2, r4\n\t"
66877 #elif defined(__clang__)
66878         "sbcs	r2, r4\n\t"
66879 #else
66880         "sbc	r2, r4\n\t"
66881 #endif
66882 #ifdef WOLFSSL_KEIL
66883         "sbcs	r3, r3, r5\n\t"
66884 #elif defined(__clang__)
66885         "sbcs	r3, r5\n\t"
66886 #else
66887         "sbc	r3, r5\n\t"
66888 #endif
66889         "stm	%[a]!, {r2, r3}\n\t"
66890         "ldm	%[b]!, {r4, r5}\n\t"
66891         "ldr	r2, [%[a]]\n\t"
66892         "ldr	r3, [%[a], #4]\n\t"
66893 #ifdef WOLFSSL_KEIL
66894         "sbcs	r2, r2, r4\n\t"
66895 #elif defined(__clang__)
66896         "sbcs	r2, r4\n\t"
66897 #else
66898         "sbc	r2, r4\n\t"
66899 #endif
66900 #ifdef WOLFSSL_KEIL
66901         "sbcs	r3, r3, r5\n\t"
66902 #elif defined(__clang__)
66903         "sbcs	r3, r5\n\t"
66904 #else
66905         "sbc	r3, r5\n\t"
66906 #endif
66907         "stm	%[a]!, {r2, r3}\n\t"
66908         "ldm	%[b]!, {r4, r5}\n\t"
66909         "ldr	r2, [%[a]]\n\t"
66910         "ldr	r3, [%[a], #4]\n\t"
66911 #ifdef WOLFSSL_KEIL
66912         "sbcs	r2, r2, r4\n\t"
66913 #elif defined(__clang__)
66914         "sbcs	r2, r4\n\t"
66915 #else
66916         "sbc	r2, r4\n\t"
66917 #endif
66918 #ifdef WOLFSSL_KEIL
66919         "sbcs	r3, r3, r5\n\t"
66920 #elif defined(__clang__)
66921         "sbcs	r3, r5\n\t"
66922 #else
66923         "sbc	r3, r5\n\t"
66924 #endif
66925         "stm	%[a]!, {r2, r3}\n\t"
66926         "ldm	%[b]!, {r4, r5}\n\t"
66927         "ldr	r2, [%[a]]\n\t"
66928         "ldr	r3, [%[a], #4]\n\t"
66929 #ifdef WOLFSSL_KEIL
66930         "sbcs	r2, r2, r4\n\t"
66931 #elif defined(__clang__)
66932         "sbcs	r2, r4\n\t"
66933 #else
66934         "sbc	r2, r4\n\t"
66935 #endif
66936 #ifdef WOLFSSL_KEIL
66937         "sbcs	r3, r3, r5\n\t"
66938 #elif defined(__clang__)
66939         "sbcs	r3, r5\n\t"
66940 #else
66941         "sbc	r3, r5\n\t"
66942 #endif
66943         "stm	%[a]!, {r2, r3}\n\t"
66944         "ldm	%[b]!, {r4, r5}\n\t"
66945         "ldr	r2, [%[a]]\n\t"
66946         "ldr	r3, [%[a], #4]\n\t"
66947 #ifdef WOLFSSL_KEIL
66948         "sbcs	r2, r2, r4\n\t"
66949 #elif defined(__clang__)
66950         "sbcs	r2, r4\n\t"
66951 #else
66952         "sbc	r2, r4\n\t"
66953 #endif
66954 #ifdef WOLFSSL_KEIL
66955         "sbcs	r3, r3, r5\n\t"
66956 #elif defined(__clang__)
66957         "sbcs	r3, r5\n\t"
66958 #else
66959         "sbc	r3, r5\n\t"
66960 #endif
66961         "stm	%[a]!, {r2, r3}\n\t"
66962         "ldm	%[b]!, {r4, r5}\n\t"
66963         "ldr	r2, [%[a]]\n\t"
66964         "ldr	r3, [%[a], #4]\n\t"
66965 #ifdef WOLFSSL_KEIL
66966         "sbcs	r2, r2, r4\n\t"
66967 #elif defined(__clang__)
66968         "sbcs	r2, r4\n\t"
66969 #else
66970         "sbc	r2, r4\n\t"
66971 #endif
66972 #ifdef WOLFSSL_KEIL
66973         "sbcs	r3, r3, r5\n\t"
66974 #elif defined(__clang__)
66975         "sbcs	r3, r5\n\t"
66976 #else
66977         "sbc	r3, r5\n\t"
66978 #endif
66979         "stm	%[a]!, {r2, r3}\n\t"
66980         "ldm	%[b]!, {r4, r5}\n\t"
66981         "ldr	r2, [%[a]]\n\t"
66982         "ldr	r3, [%[a], #4]\n\t"
66983 #ifdef WOLFSSL_KEIL
66984         "sbcs	r2, r2, r4\n\t"
66985 #elif defined(__clang__)
66986         "sbcs	r2, r4\n\t"
66987 #else
66988         "sbc	r2, r4\n\t"
66989 #endif
66990 #ifdef WOLFSSL_KEIL
66991         "sbcs	r3, r3, r5\n\t"
66992 #elif defined(__clang__)
66993         "sbcs	r3, r5\n\t"
66994 #else
66995         "sbc	r3, r5\n\t"
66996 #endif
66997         "stm	%[a]!, {r2, r3}\n\t"
66998         "ldm	%[b]!, {r4, r5}\n\t"
66999         "ldr	r2, [%[a]]\n\t"
67000         "ldr	r3, [%[a], #4]\n\t"
67001 #ifdef WOLFSSL_KEIL
67002         "sbcs	r2, r2, r4\n\t"
67003 #elif defined(__clang__)
67004         "sbcs	r2, r4\n\t"
67005 #else
67006         "sbc	r2, r4\n\t"
67007 #endif
67008 #ifdef WOLFSSL_KEIL
67009         "sbcs	r3, r3, r5\n\t"
67010 #elif defined(__clang__)
67011         "sbcs	r3, r5\n\t"
67012 #else
67013         "sbc	r3, r5\n\t"
67014 #endif
67015         "stm	%[a]!, {r2, r3}\n\t"
67016         "ldm	%[b]!, {r4, r5}\n\t"
67017         "ldr	r2, [%[a]]\n\t"
67018         "ldr	r3, [%[a], #4]\n\t"
67019 #ifdef WOLFSSL_KEIL
67020         "sbcs	r2, r2, r4\n\t"
67021 #elif defined(__clang__)
67022         "sbcs	r2, r4\n\t"
67023 #else
67024         "sbc	r2, r4\n\t"
67025 #endif
67026 #ifdef WOLFSSL_KEIL
67027         "sbcs	r3, r3, r5\n\t"
67028 #elif defined(__clang__)
67029         "sbcs	r3, r5\n\t"
67030 #else
67031         "sbc	r3, r5\n\t"
67032 #endif
67033         "stm	%[a]!, {r2, r3}\n\t"
67034         "ldm	%[b]!, {r4, r5}\n\t"
67035         "ldr	r2, [%[a]]\n\t"
67036         "ldr	r3, [%[a], #4]\n\t"
67037 #ifdef WOLFSSL_KEIL
67038         "sbcs	r2, r2, r4\n\t"
67039 #elif defined(__clang__)
67040         "sbcs	r2, r4\n\t"
67041 #else
67042         "sbc	r2, r4\n\t"
67043 #endif
67044 #ifdef WOLFSSL_KEIL
67045         "sbcs	r3, r3, r5\n\t"
67046 #elif defined(__clang__)
67047         "sbcs	r3, r5\n\t"
67048 #else
67049         "sbc	r3, r5\n\t"
67050 #endif
67051         "stm	%[a]!, {r2, r3}\n\t"
67052         "ldm	%[b]!, {r4, r5}\n\t"
67053         "ldr	r2, [%[a]]\n\t"
67054         "ldr	r3, [%[a], #4]\n\t"
67055 #ifdef WOLFSSL_KEIL
67056         "sbcs	r2, r2, r4\n\t"
67057 #elif defined(__clang__)
67058         "sbcs	r2, r4\n\t"
67059 #else
67060         "sbc	r2, r4\n\t"
67061 #endif
67062 #ifdef WOLFSSL_KEIL
67063         "sbcs	r3, r3, r5\n\t"
67064 #elif defined(__clang__)
67065         "sbcs	r3, r5\n\t"
67066 #else
67067         "sbc	r3, r5\n\t"
67068 #endif
67069         "stm	%[a]!, {r2, r3}\n\t"
67070         "ldm	%[b]!, {r4, r5}\n\t"
67071         "ldr	r2, [%[a]]\n\t"
67072         "ldr	r3, [%[a], #4]\n\t"
67073 #ifdef WOLFSSL_KEIL
67074         "sbcs	r2, r2, r4\n\t"
67075 #elif defined(__clang__)
67076         "sbcs	r2, r4\n\t"
67077 #else
67078         "sbc	r2, r4\n\t"
67079 #endif
67080 #ifdef WOLFSSL_KEIL
67081         "sbcs	r3, r3, r5\n\t"
67082 #elif defined(__clang__)
67083         "sbcs	r3, r5\n\t"
67084 #else
67085         "sbc	r3, r5\n\t"
67086 #endif
67087         "stm	%[a]!, {r2, r3}\n\t"
67088         "ldm	%[b]!, {r4, r5}\n\t"
67089         "ldr	r2, [%[a]]\n\t"
67090         "ldr	r3, [%[a], #4]\n\t"
67091 #ifdef WOLFSSL_KEIL
67092         "sbcs	r2, r2, r4\n\t"
67093 #elif defined(__clang__)
67094         "sbcs	r2, r4\n\t"
67095 #else
67096         "sbc	r2, r4\n\t"
67097 #endif
67098 #ifdef WOLFSSL_KEIL
67099         "sbcs	r3, r3, r5\n\t"
67100 #elif defined(__clang__)
67101         "sbcs	r3, r5\n\t"
67102 #else
67103         "sbc	r3, r5\n\t"
67104 #endif
67105         "stm	%[a]!, {r2, r3}\n\t"
67106         "ldm	%[b]!, {r4, r5}\n\t"
67107         "ldr	r2, [%[a]]\n\t"
67108         "ldr	r3, [%[a], #4]\n\t"
67109 #ifdef WOLFSSL_KEIL
67110         "sbcs	r2, r2, r4\n\t"
67111 #elif defined(__clang__)
67112         "sbcs	r2, r4\n\t"
67113 #else
67114         "sbc	r2, r4\n\t"
67115 #endif
67116 #ifdef WOLFSSL_KEIL
67117         "sbcs	r3, r3, r5\n\t"
67118 #elif defined(__clang__)
67119         "sbcs	r3, r5\n\t"
67120 #else
67121         "sbc	r3, r5\n\t"
67122 #endif
67123         "stm	%[a]!, {r2, r3}\n\t"
67124         "ldm	%[b]!, {r4, r5}\n\t"
67125         "ldr	r2, [%[a]]\n\t"
67126         "ldr	r3, [%[a], #4]\n\t"
67127 #ifdef WOLFSSL_KEIL
67128         "sbcs	r2, r2, r4\n\t"
67129 #elif defined(__clang__)
67130         "sbcs	r2, r4\n\t"
67131 #else
67132         "sbc	r2, r4\n\t"
67133 #endif
67134 #ifdef WOLFSSL_KEIL
67135         "sbcs	r3, r3, r5\n\t"
67136 #elif defined(__clang__)
67137         "sbcs	r3, r5\n\t"
67138 #else
67139         "sbc	r3, r5\n\t"
67140 #endif
67141         "stm	%[a]!, {r2, r3}\n\t"
67142         "ldm	%[b]!, {r4, r5}\n\t"
67143         "ldr	r2, [%[a]]\n\t"
67144         "ldr	r3, [%[a], #4]\n\t"
67145 #ifdef WOLFSSL_KEIL
67146         "sbcs	r2, r2, r4\n\t"
67147 #elif defined(__clang__)
67148         "sbcs	r2, r4\n\t"
67149 #else
67150         "sbc	r2, r4\n\t"
67151 #endif
67152 #ifdef WOLFSSL_KEIL
67153         "sbcs	r3, r3, r5\n\t"
67154 #elif defined(__clang__)
67155         "sbcs	r3, r5\n\t"
67156 #else
67157         "sbc	r3, r5\n\t"
67158 #endif
67159         "stm	%[a]!, {r2, r3}\n\t"
67160         "ldm	%[b]!, {r4, r5}\n\t"
67161         "ldr	r2, [%[a]]\n\t"
67162         "ldr	r3, [%[a], #4]\n\t"
67163 #ifdef WOLFSSL_KEIL
67164         "sbcs	r2, r2, r4\n\t"
67165 #elif defined(__clang__)
67166         "sbcs	r2, r4\n\t"
67167 #else
67168         "sbc	r2, r4\n\t"
67169 #endif
67170 #ifdef WOLFSSL_KEIL
67171         "sbcs	r3, r3, r5\n\t"
67172 #elif defined(__clang__)
67173         "sbcs	r3, r5\n\t"
67174 #else
67175         "sbc	r3, r5\n\t"
67176 #endif
67177         "stm	%[a]!, {r2, r3}\n\t"
67178         "ldm	%[b]!, {r4, r5}\n\t"
67179         "ldr	r2, [%[a]]\n\t"
67180         "ldr	r3, [%[a], #4]\n\t"
67181 #ifdef WOLFSSL_KEIL
67182         "sbcs	r2, r2, r4\n\t"
67183 #elif defined(__clang__)
67184         "sbcs	r2, r4\n\t"
67185 #else
67186         "sbc	r2, r4\n\t"
67187 #endif
67188 #ifdef WOLFSSL_KEIL
67189         "sbcs	r3, r3, r5\n\t"
67190 #elif defined(__clang__)
67191         "sbcs	r3, r5\n\t"
67192 #else
67193         "sbc	r3, r5\n\t"
67194 #endif
67195         "stm	%[a]!, {r2, r3}\n\t"
67196         "ldm	%[b]!, {r4, r5}\n\t"
67197         "ldr	r2, [%[a]]\n\t"
67198         "ldr	r3, [%[a], #4]\n\t"
67199 #ifdef WOLFSSL_KEIL
67200         "sbcs	r2, r2, r4\n\t"
67201 #elif defined(__clang__)
67202         "sbcs	r2, r4\n\t"
67203 #else
67204         "sbc	r2, r4\n\t"
67205 #endif
67206 #ifdef WOLFSSL_KEIL
67207         "sbcs	r3, r3, r5\n\t"
67208 #elif defined(__clang__)
67209         "sbcs	r3, r5\n\t"
67210 #else
67211         "sbc	r3, r5\n\t"
67212 #endif
67213         "stm	%[a]!, {r2, r3}\n\t"
67214         "ldm	%[b]!, {r4, r5}\n\t"
67215         "ldr	r2, [%[a]]\n\t"
67216         "ldr	r3, [%[a], #4]\n\t"
67217 #ifdef WOLFSSL_KEIL
67218         "sbcs	r2, r2, r4\n\t"
67219 #elif defined(__clang__)
67220         "sbcs	r2, r4\n\t"
67221 #else
67222         "sbc	r2, r4\n\t"
67223 #endif
67224 #ifdef WOLFSSL_KEIL
67225         "sbcs	r3, r3, r5\n\t"
67226 #elif defined(__clang__)
67227         "sbcs	r3, r5\n\t"
67228 #else
67229         "sbc	r3, r5\n\t"
67230 #endif
67231         "stm	%[a]!, {r2, r3}\n\t"
67232 #ifdef WOLFSSL_KEIL
67233         "sbcs	%[a], %[a], %[a]\n\t"
67234 #elif defined(__clang__)
67235         "sbcs	%[a], %[a]\n\t"
67236 #else
67237         "sbc	%[a], %[a]\n\t"
67238 #endif
67239         : [a] "+r" (a), [b] "+r" (b)
67240         :
67241         : "memory", "r2", "r3", "r4", "r5"
67242     );
67243     return (uint32_t)(size_t)a;
67244 }
67245 
67246 /* Add b to a into r. (r = a + b)
67247  *
67248  * r  A single precision integer.
67249  * a  A single precision integer.
67250  * b  A single precision integer.
67251  */
sp_3072_add_48(sp_digit * r,const sp_digit * a,const sp_digit * b)67252 SP_NOINLINE static sp_digit sp_3072_add_48(sp_digit* r, const sp_digit* a,
67253         const sp_digit* b)
67254 {
67255     __asm__ __volatile__ (
67256         "ldm	%[b]!, {r5, r6}\n\t"
67257         "ldm	%[a]!, {r3, r4}\n\t"
67258 #if defined(__clang__) || defined(WOLFSSL_KEIL)
67259         "adds	r3, r3, r5\n\t"
67260 #else
67261         "add	r3, r3, r5\n\t"
67262 #endif
67263 #ifdef WOLFSSL_KEIL
67264         "adcs	r4, r4, r6\n\t"
67265 #elif defined(__clang__)
67266         "adcs	r4, r6\n\t"
67267 #else
67268         "adc	r4, r6\n\t"
67269 #endif
67270         "stm	%[r]!, {r3, r4}\n\t"
67271         "ldm	%[b]!, {r5, r6}\n\t"
67272         "ldm	%[a]!, {r3, r4}\n\t"
67273 #ifdef WOLFSSL_KEIL
67274         "adcs	r3, r3, r5\n\t"
67275 #elif defined(__clang__)
67276         "adcs	r3, r5\n\t"
67277 #else
67278         "adc	r3, r5\n\t"
67279 #endif
67280 #ifdef WOLFSSL_KEIL
67281         "adcs	r4, r4, r6\n\t"
67282 #elif defined(__clang__)
67283         "adcs	r4, r6\n\t"
67284 #else
67285         "adc	r4, r6\n\t"
67286 #endif
67287         "stm	%[r]!, {r3, r4}\n\t"
67288         "ldm	%[b]!, {r5, r6}\n\t"
67289         "ldm	%[a]!, {r3, r4}\n\t"
67290 #ifdef WOLFSSL_KEIL
67291         "adcs	r3, r3, r5\n\t"
67292 #elif defined(__clang__)
67293         "adcs	r3, r5\n\t"
67294 #else
67295         "adc	r3, r5\n\t"
67296 #endif
67297 #ifdef WOLFSSL_KEIL
67298         "adcs	r4, r4, r6\n\t"
67299 #elif defined(__clang__)
67300         "adcs	r4, r6\n\t"
67301 #else
67302         "adc	r4, r6\n\t"
67303 #endif
67304         "stm	%[r]!, {r3, r4}\n\t"
67305         "ldm	%[b]!, {r5, r6}\n\t"
67306         "ldm	%[a]!, {r3, r4}\n\t"
67307 #ifdef WOLFSSL_KEIL
67308         "adcs	r3, r3, r5\n\t"
67309 #elif defined(__clang__)
67310         "adcs	r3, r5\n\t"
67311 #else
67312         "adc	r3, r5\n\t"
67313 #endif
67314 #ifdef WOLFSSL_KEIL
67315         "adcs	r4, r4, r6\n\t"
67316 #elif defined(__clang__)
67317         "adcs	r4, r6\n\t"
67318 #else
67319         "adc	r4, r6\n\t"
67320 #endif
67321         "stm	%[r]!, {r3, r4}\n\t"
67322         "ldm	%[b]!, {r5, r6}\n\t"
67323         "ldm	%[a]!, {r3, r4}\n\t"
67324 #ifdef WOLFSSL_KEIL
67325         "adcs	r3, r3, r5\n\t"
67326 #elif defined(__clang__)
67327         "adcs	r3, r5\n\t"
67328 #else
67329         "adc	r3, r5\n\t"
67330 #endif
67331 #ifdef WOLFSSL_KEIL
67332         "adcs	r4, r4, r6\n\t"
67333 #elif defined(__clang__)
67334         "adcs	r4, r6\n\t"
67335 #else
67336         "adc	r4, r6\n\t"
67337 #endif
67338         "stm	%[r]!, {r3, r4}\n\t"
67339         "ldm	%[b]!, {r5, r6}\n\t"
67340         "ldm	%[a]!, {r3, r4}\n\t"
67341 #ifdef WOLFSSL_KEIL
67342         "adcs	r3, r3, r5\n\t"
67343 #elif defined(__clang__)
67344         "adcs	r3, r5\n\t"
67345 #else
67346         "adc	r3, r5\n\t"
67347 #endif
67348 #ifdef WOLFSSL_KEIL
67349         "adcs	r4, r4, r6\n\t"
67350 #elif defined(__clang__)
67351         "adcs	r4, r6\n\t"
67352 #else
67353         "adc	r4, r6\n\t"
67354 #endif
67355         "stm	%[r]!, {r3, r4}\n\t"
67356         "ldm	%[b]!, {r5, r6}\n\t"
67357         "ldm	%[a]!, {r3, r4}\n\t"
67358 #ifdef WOLFSSL_KEIL
67359         "adcs	r3, r3, r5\n\t"
67360 #elif defined(__clang__)
67361         "adcs	r3, r5\n\t"
67362 #else
67363         "adc	r3, r5\n\t"
67364 #endif
67365 #ifdef WOLFSSL_KEIL
67366         "adcs	r4, r4, r6\n\t"
67367 #elif defined(__clang__)
67368         "adcs	r4, r6\n\t"
67369 #else
67370         "adc	r4, r6\n\t"
67371 #endif
67372         "stm	%[r]!, {r3, r4}\n\t"
67373         "ldm	%[b]!, {r5, r6}\n\t"
67374         "ldm	%[a]!, {r3, r4}\n\t"
67375 #ifdef WOLFSSL_KEIL
67376         "adcs	r3, r3, r5\n\t"
67377 #elif defined(__clang__)
67378         "adcs	r3, r5\n\t"
67379 #else
67380         "adc	r3, r5\n\t"
67381 #endif
67382 #ifdef WOLFSSL_KEIL
67383         "adcs	r4, r4, r6\n\t"
67384 #elif defined(__clang__)
67385         "adcs	r4, r6\n\t"
67386 #else
67387         "adc	r4, r6\n\t"
67388 #endif
67389         "stm	%[r]!, {r3, r4}\n\t"
67390         "ldm	%[b]!, {r5, r6}\n\t"
67391         "ldm	%[a]!, {r3, r4}\n\t"
67392 #ifdef WOLFSSL_KEIL
67393         "adcs	r3, r3, r5\n\t"
67394 #elif defined(__clang__)
67395         "adcs	r3, r5\n\t"
67396 #else
67397         "adc	r3, r5\n\t"
67398 #endif
67399 #ifdef WOLFSSL_KEIL
67400         "adcs	r4, r4, r6\n\t"
67401 #elif defined(__clang__)
67402         "adcs	r4, r6\n\t"
67403 #else
67404         "adc	r4, r6\n\t"
67405 #endif
67406         "stm	%[r]!, {r3, r4}\n\t"
67407         "ldm	%[b]!, {r5, r6}\n\t"
67408         "ldm	%[a]!, {r3, r4}\n\t"
67409 #ifdef WOLFSSL_KEIL
67410         "adcs	r3, r3, r5\n\t"
67411 #elif defined(__clang__)
67412         "adcs	r3, r5\n\t"
67413 #else
67414         "adc	r3, r5\n\t"
67415 #endif
67416 #ifdef WOLFSSL_KEIL
67417         "adcs	r4, r4, r6\n\t"
67418 #elif defined(__clang__)
67419         "adcs	r4, r6\n\t"
67420 #else
67421         "adc	r4, r6\n\t"
67422 #endif
67423         "stm	%[r]!, {r3, r4}\n\t"
67424         "ldm	%[b]!, {r5, r6}\n\t"
67425         "ldm	%[a]!, {r3, r4}\n\t"
67426 #ifdef WOLFSSL_KEIL
67427         "adcs	r3, r3, r5\n\t"
67428 #elif defined(__clang__)
67429         "adcs	r3, r5\n\t"
67430 #else
67431         "adc	r3, r5\n\t"
67432 #endif
67433 #ifdef WOLFSSL_KEIL
67434         "adcs	r4, r4, r6\n\t"
67435 #elif defined(__clang__)
67436         "adcs	r4, r6\n\t"
67437 #else
67438         "adc	r4, r6\n\t"
67439 #endif
67440         "stm	%[r]!, {r3, r4}\n\t"
67441         "ldm	%[b]!, {r5, r6}\n\t"
67442         "ldm	%[a]!, {r3, r4}\n\t"
67443 #ifdef WOLFSSL_KEIL
67444         "adcs	r3, r3, r5\n\t"
67445 #elif defined(__clang__)
67446         "adcs	r3, r5\n\t"
67447 #else
67448         "adc	r3, r5\n\t"
67449 #endif
67450 #ifdef WOLFSSL_KEIL
67451         "adcs	r4, r4, r6\n\t"
67452 #elif defined(__clang__)
67453         "adcs	r4, r6\n\t"
67454 #else
67455         "adc	r4, r6\n\t"
67456 #endif
67457         "stm	%[r]!, {r3, r4}\n\t"
67458         "ldm	%[b]!, {r5, r6}\n\t"
67459         "ldm	%[a]!, {r3, r4}\n\t"
67460 #ifdef WOLFSSL_KEIL
67461         "adcs	r3, r3, r5\n\t"
67462 #elif defined(__clang__)
67463         "adcs	r3, r5\n\t"
67464 #else
67465         "adc	r3, r5\n\t"
67466 #endif
67467 #ifdef WOLFSSL_KEIL
67468         "adcs	r4, r4, r6\n\t"
67469 #elif defined(__clang__)
67470         "adcs	r4, r6\n\t"
67471 #else
67472         "adc	r4, r6\n\t"
67473 #endif
67474         "stm	%[r]!, {r3, r4}\n\t"
67475         "ldm	%[b]!, {r5, r6}\n\t"
67476         "ldm	%[a]!, {r3, r4}\n\t"
67477 #ifdef WOLFSSL_KEIL
67478         "adcs	r3, r3, r5\n\t"
67479 #elif defined(__clang__)
67480         "adcs	r3, r5\n\t"
67481 #else
67482         "adc	r3, r5\n\t"
67483 #endif
67484 #ifdef WOLFSSL_KEIL
67485         "adcs	r4, r4, r6\n\t"
67486 #elif defined(__clang__)
67487         "adcs	r4, r6\n\t"
67488 #else
67489         "adc	r4, r6\n\t"
67490 #endif
67491         "stm	%[r]!, {r3, r4}\n\t"
67492         "ldm	%[b]!, {r5, r6}\n\t"
67493         "ldm	%[a]!, {r3, r4}\n\t"
67494 #ifdef WOLFSSL_KEIL
67495         "adcs	r3, r3, r5\n\t"
67496 #elif defined(__clang__)
67497         "adcs	r3, r5\n\t"
67498 #else
67499         "adc	r3, r5\n\t"
67500 #endif
67501 #ifdef WOLFSSL_KEIL
67502         "adcs	r4, r4, r6\n\t"
67503 #elif defined(__clang__)
67504         "adcs	r4, r6\n\t"
67505 #else
67506         "adc	r4, r6\n\t"
67507 #endif
67508         "stm	%[r]!, {r3, r4}\n\t"
67509         "ldm	%[b]!, {r5, r6}\n\t"
67510         "ldm	%[a]!, {r3, r4}\n\t"
67511 #ifdef WOLFSSL_KEIL
67512         "adcs	r3, r3, r5\n\t"
67513 #elif defined(__clang__)
67514         "adcs	r3, r5\n\t"
67515 #else
67516         "adc	r3, r5\n\t"
67517 #endif
67518 #ifdef WOLFSSL_KEIL
67519         "adcs	r4, r4, r6\n\t"
67520 #elif defined(__clang__)
67521         "adcs	r4, r6\n\t"
67522 #else
67523         "adc	r4, r6\n\t"
67524 #endif
67525         "stm	%[r]!, {r3, r4}\n\t"
67526         "ldm	%[b]!, {r5, r6}\n\t"
67527         "ldm	%[a]!, {r3, r4}\n\t"
67528 #ifdef WOLFSSL_KEIL
67529         "adcs	r3, r3, r5\n\t"
67530 #elif defined(__clang__)
67531         "adcs	r3, r5\n\t"
67532 #else
67533         "adc	r3, r5\n\t"
67534 #endif
67535 #ifdef WOLFSSL_KEIL
67536         "adcs	r4, r4, r6\n\t"
67537 #elif defined(__clang__)
67538         "adcs	r4, r6\n\t"
67539 #else
67540         "adc	r4, r6\n\t"
67541 #endif
67542         "stm	%[r]!, {r3, r4}\n\t"
67543         "ldm	%[b]!, {r5, r6}\n\t"
67544         "ldm	%[a]!, {r3, r4}\n\t"
67545 #ifdef WOLFSSL_KEIL
67546         "adcs	r3, r3, r5\n\t"
67547 #elif defined(__clang__)
67548         "adcs	r3, r5\n\t"
67549 #else
67550         "adc	r3, r5\n\t"
67551 #endif
67552 #ifdef WOLFSSL_KEIL
67553         "adcs	r4, r4, r6\n\t"
67554 #elif defined(__clang__)
67555         "adcs	r4, r6\n\t"
67556 #else
67557         "adc	r4, r6\n\t"
67558 #endif
67559         "stm	%[r]!, {r3, r4}\n\t"
67560         "ldm	%[b]!, {r5, r6}\n\t"
67561         "ldm	%[a]!, {r3, r4}\n\t"
67562 #ifdef WOLFSSL_KEIL
67563         "adcs	r3, r3, r5\n\t"
67564 #elif defined(__clang__)
67565         "adcs	r3, r5\n\t"
67566 #else
67567         "adc	r3, r5\n\t"
67568 #endif
67569 #ifdef WOLFSSL_KEIL
67570         "adcs	r4, r4, r6\n\t"
67571 #elif defined(__clang__)
67572         "adcs	r4, r6\n\t"
67573 #else
67574         "adc	r4, r6\n\t"
67575 #endif
67576         "stm	%[r]!, {r3, r4}\n\t"
67577         "ldm	%[b]!, {r5, r6}\n\t"
67578         "ldm	%[a]!, {r3, r4}\n\t"
67579 #ifdef WOLFSSL_KEIL
67580         "adcs	r3, r3, r5\n\t"
67581 #elif defined(__clang__)
67582         "adcs	r3, r5\n\t"
67583 #else
67584         "adc	r3, r5\n\t"
67585 #endif
67586 #ifdef WOLFSSL_KEIL
67587         "adcs	r4, r4, r6\n\t"
67588 #elif defined(__clang__)
67589         "adcs	r4, r6\n\t"
67590 #else
67591         "adc	r4, r6\n\t"
67592 #endif
67593         "stm	%[r]!, {r3, r4}\n\t"
67594         "ldm	%[b]!, {r5, r6}\n\t"
67595         "ldm	%[a]!, {r3, r4}\n\t"
67596 #ifdef WOLFSSL_KEIL
67597         "adcs	r3, r3, r5\n\t"
67598 #elif defined(__clang__)
67599         "adcs	r3, r5\n\t"
67600 #else
67601         "adc	r3, r5\n\t"
67602 #endif
67603 #ifdef WOLFSSL_KEIL
67604         "adcs	r4, r4, r6\n\t"
67605 #elif defined(__clang__)
67606         "adcs	r4, r6\n\t"
67607 #else
67608         "adc	r4, r6\n\t"
67609 #endif
67610         "stm	%[r]!, {r3, r4}\n\t"
67611         "ldm	%[b]!, {r5, r6}\n\t"
67612         "ldm	%[a]!, {r3, r4}\n\t"
67613 #ifdef WOLFSSL_KEIL
67614         "adcs	r3, r3, r5\n\t"
67615 #elif defined(__clang__)
67616         "adcs	r3, r5\n\t"
67617 #else
67618         "adc	r3, r5\n\t"
67619 #endif
67620 #ifdef WOLFSSL_KEIL
67621         "adcs	r4, r4, r6\n\t"
67622 #elif defined(__clang__)
67623         "adcs	r4, r6\n\t"
67624 #else
67625         "adc	r4, r6\n\t"
67626 #endif
67627         "stm	%[r]!, {r3, r4}\n\t"
67628         "ldm	%[b]!, {r5, r6}\n\t"
67629         "ldm	%[a]!, {r3, r4}\n\t"
67630 #ifdef WOLFSSL_KEIL
67631         "adcs	r3, r3, r5\n\t"
67632 #elif defined(__clang__)
67633         "adcs	r3, r5\n\t"
67634 #else
67635         "adc	r3, r5\n\t"
67636 #endif
67637 #ifdef WOLFSSL_KEIL
67638         "adcs	r4, r4, r6\n\t"
67639 #elif defined(__clang__)
67640         "adcs	r4, r6\n\t"
67641 #else
67642         "adc	r4, r6\n\t"
67643 #endif
67644         "stm	%[r]!, {r3, r4}\n\t"
67645         "ldm	%[b]!, {r5, r6}\n\t"
67646         "ldm	%[a]!, {r3, r4}\n\t"
67647 #ifdef WOLFSSL_KEIL
67648         "adcs	r3, r3, r5\n\t"
67649 #elif defined(__clang__)
67650         "adcs	r3, r5\n\t"
67651 #else
67652         "adc	r3, r5\n\t"
67653 #endif
67654 #ifdef WOLFSSL_KEIL
67655         "adcs	r4, r4, r6\n\t"
67656 #elif defined(__clang__)
67657         "adcs	r4, r6\n\t"
67658 #else
67659         "adc	r4, r6\n\t"
67660 #endif
67661         "stm	%[r]!, {r3, r4}\n\t"
67662         "movs	%[r], #0\n\t"
67663 #ifdef WOLFSSL_KEIL
67664         "adcs	%[r], %[r], %[r]\n\t"
67665 #elif defined(__clang__)
67666         "adcs	%[r], %[r]\n\t"
67667 #else
67668         "adc	%[r], %[r]\n\t"
67669 #endif
67670         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
67671         :
67672         : "memory", "r3", "r4", "r5", "r6"
67673     );
67674     return (uint32_t)(size_t)r;
67675 }
67676 
67677 /* AND m into each word of a and store in r.
67678  *
67679  * r  A single precision integer.
67680  * a  A single precision integer.
67681  * m  Mask to AND against each digit.
67682  */
sp_3072_mask_24(sp_digit * r,const sp_digit * a,sp_digit m)67683 static void sp_3072_mask_24(sp_digit* r, const sp_digit* a, sp_digit m)
67684 {
67685 #ifdef WOLFSSL_SP_SMALL
67686     int i;
67687 
67688     for (i=0; i<24; i++) {
67689         r[i] = a[i] & m;
67690     }
67691 #else
67692     int i;
67693 
67694     for (i = 0; i < 24; i += 8) {
67695         r[i+0] = a[i+0] & m;
67696         r[i+1] = a[i+1] & m;
67697         r[i+2] = a[i+2] & m;
67698         r[i+3] = a[i+3] & m;
67699         r[i+4] = a[i+4] & m;
67700         r[i+5] = a[i+5] & m;
67701         r[i+6] = a[i+6] & m;
67702         r[i+7] = a[i+7] & m;
67703     }
67704 #endif
67705 }
67706 
67707 /* Multiply a and b into r. (r = a * b)
67708  *
67709  * r  A single precision integer.
67710  * a  A single precision integer.
67711  * b  A single precision integer.
67712  */
sp_3072_mul_48(sp_digit * r,const sp_digit * a,const sp_digit * b)67713 SP_NOINLINE static void sp_3072_mul_48(sp_digit* r, const sp_digit* a,
67714         const sp_digit* b)
67715 {
67716     sp_digit* z0 = r;
67717     sp_digit z1[48];
67718     sp_digit a1[24];
67719     sp_digit b1[24];
67720     sp_digit z2[48];
67721     sp_digit u;
67722     sp_digit ca;
67723     sp_digit cb;
67724 
67725     ca = sp_3072_add_24(a1, a, &a[24]);
67726     cb = sp_3072_add_24(b1, b, &b[24]);
67727     u  = ca & cb;
67728     sp_3072_mul_24(z1, a1, b1);
67729     sp_3072_mul_24(z2, &a[24], &b[24]);
67730     sp_3072_mul_24(z0, a, b);
67731     sp_3072_mask_24(r + 48, a1, 0 - cb);
67732     sp_3072_mask_24(b1, b1, 0 - ca);
67733     u += sp_3072_add_24(r + 48, r + 48, b1);
67734     u += sp_3072_sub_in_place_48(z1, z2);
67735     u += sp_3072_sub_in_place_48(z1, z0);
67736     u += sp_3072_add_48(r + 24, r + 24, z1);
67737     u += sp_3072_add_24(r + 48, r + 48, z2);
67738     (void)sp_3072_add_to_word_24(r + 72, u, z2 + 24);
67739 }
67740 
67741 /* Double a into r. (r = a + a)
67742  *
67743  * r  A single precision integer.
67744  * a  A single precision integer.
67745  */
sp_3072_dbl_24(sp_digit * r,const sp_digit * a)67746 SP_NOINLINE static sp_digit sp_3072_dbl_24(sp_digit* r, const sp_digit* a)
67747 {
67748     __asm__ __volatile__ (
67749         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
67750 #if defined(__clang__) || defined(WOLFSSL_KEIL)
67751         "adds	r2, r2, r2\n\t"
67752 #else
67753         "add	r2, r2, r2\n\t"
67754 #endif
67755 #ifdef WOLFSSL_KEIL
67756         "adcs	r3, r3, r3\n\t"
67757 #elif defined(__clang__)
67758         "adcs	r3, r3\n\t"
67759 #else
67760         "adc	r3, r3\n\t"
67761 #endif
67762 #ifdef WOLFSSL_KEIL
67763         "adcs	r4, r4, r4\n\t"
67764 #elif defined(__clang__)
67765         "adcs	r4, r4\n\t"
67766 #else
67767         "adc	r4, r4\n\t"
67768 #endif
67769 #ifdef WOLFSSL_KEIL
67770         "adcs	r5, r5, r5\n\t"
67771 #elif defined(__clang__)
67772         "adcs	r5, r5\n\t"
67773 #else
67774         "adc	r5, r5\n\t"
67775 #endif
67776         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
67777         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
67778 #ifdef WOLFSSL_KEIL
67779         "adcs	r2, r2, r2\n\t"
67780 #elif defined(__clang__)
67781         "adcs	r2, r2\n\t"
67782 #else
67783         "adc	r2, r2\n\t"
67784 #endif
67785 #ifdef WOLFSSL_KEIL
67786         "adcs	r3, r3, r3\n\t"
67787 #elif defined(__clang__)
67788         "adcs	r3, r3\n\t"
67789 #else
67790         "adc	r3, r3\n\t"
67791 #endif
67792 #ifdef WOLFSSL_KEIL
67793         "adcs	r4, r4, r4\n\t"
67794 #elif defined(__clang__)
67795         "adcs	r4, r4\n\t"
67796 #else
67797         "adc	r4, r4\n\t"
67798 #endif
67799 #ifdef WOLFSSL_KEIL
67800         "adcs	r5, r5, r5\n\t"
67801 #elif defined(__clang__)
67802         "adcs	r5, r5\n\t"
67803 #else
67804         "adc	r5, r5\n\t"
67805 #endif
67806         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
67807         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
67808 #ifdef WOLFSSL_KEIL
67809         "adcs	r2, r2, r2\n\t"
67810 #elif defined(__clang__)
67811         "adcs	r2, r2\n\t"
67812 #else
67813         "adc	r2, r2\n\t"
67814 #endif
67815 #ifdef WOLFSSL_KEIL
67816         "adcs	r3, r3, r3\n\t"
67817 #elif defined(__clang__)
67818         "adcs	r3, r3\n\t"
67819 #else
67820         "adc	r3, r3\n\t"
67821 #endif
67822 #ifdef WOLFSSL_KEIL
67823         "adcs	r4, r4, r4\n\t"
67824 #elif defined(__clang__)
67825         "adcs	r4, r4\n\t"
67826 #else
67827         "adc	r4, r4\n\t"
67828 #endif
67829 #ifdef WOLFSSL_KEIL
67830         "adcs	r5, r5, r5\n\t"
67831 #elif defined(__clang__)
67832         "adcs	r5, r5\n\t"
67833 #else
67834         "adc	r5, r5\n\t"
67835 #endif
67836         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
67837         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
67838 #ifdef WOLFSSL_KEIL
67839         "adcs	r2, r2, r2\n\t"
67840 #elif defined(__clang__)
67841         "adcs	r2, r2\n\t"
67842 #else
67843         "adc	r2, r2\n\t"
67844 #endif
67845 #ifdef WOLFSSL_KEIL
67846         "adcs	r3, r3, r3\n\t"
67847 #elif defined(__clang__)
67848         "adcs	r3, r3\n\t"
67849 #else
67850         "adc	r3, r3\n\t"
67851 #endif
67852 #ifdef WOLFSSL_KEIL
67853         "adcs	r4, r4, r4\n\t"
67854 #elif defined(__clang__)
67855         "adcs	r4, r4\n\t"
67856 #else
67857         "adc	r4, r4\n\t"
67858 #endif
67859 #ifdef WOLFSSL_KEIL
67860         "adcs	r5, r5, r5\n\t"
67861 #elif defined(__clang__)
67862         "adcs	r5, r5\n\t"
67863 #else
67864         "adc	r5, r5\n\t"
67865 #endif
67866         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
67867         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
67868 #ifdef WOLFSSL_KEIL
67869         "adcs	r2, r2, r2\n\t"
67870 #elif defined(__clang__)
67871         "adcs	r2, r2\n\t"
67872 #else
67873         "adc	r2, r2\n\t"
67874 #endif
67875 #ifdef WOLFSSL_KEIL
67876         "adcs	r3, r3, r3\n\t"
67877 #elif defined(__clang__)
67878         "adcs	r3, r3\n\t"
67879 #else
67880         "adc	r3, r3\n\t"
67881 #endif
67882 #ifdef WOLFSSL_KEIL
67883         "adcs	r4, r4, r4\n\t"
67884 #elif defined(__clang__)
67885         "adcs	r4, r4\n\t"
67886 #else
67887         "adc	r4, r4\n\t"
67888 #endif
67889 #ifdef WOLFSSL_KEIL
67890         "adcs	r5, r5, r5\n\t"
67891 #elif defined(__clang__)
67892         "adcs	r5, r5\n\t"
67893 #else
67894         "adc	r5, r5\n\t"
67895 #endif
67896         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
67897         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
67898 #ifdef WOLFSSL_KEIL
67899         "adcs	r2, r2, r2\n\t"
67900 #elif defined(__clang__)
67901         "adcs	r2, r2\n\t"
67902 #else
67903         "adc	r2, r2\n\t"
67904 #endif
67905 #ifdef WOLFSSL_KEIL
67906         "adcs	r3, r3, r3\n\t"
67907 #elif defined(__clang__)
67908         "adcs	r3, r3\n\t"
67909 #else
67910         "adc	r3, r3\n\t"
67911 #endif
67912 #ifdef WOLFSSL_KEIL
67913         "adcs	r4, r4, r4\n\t"
67914 #elif defined(__clang__)
67915         "adcs	r4, r4\n\t"
67916 #else
67917         "adc	r4, r4\n\t"
67918 #endif
67919 #ifdef WOLFSSL_KEIL
67920         "adcs	r5, r5, r5\n\t"
67921 #elif defined(__clang__)
67922         "adcs	r5, r5\n\t"
67923 #else
67924         "adc	r5, r5\n\t"
67925 #endif
67926         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
67927         "movs	%[r], #0\n\t"
67928 #ifdef WOLFSSL_KEIL
67929         "adcs	%[r], %[r], %[r]\n\t"
67930 #elif defined(__clang__)
67931         "adcs	%[r], %[r]\n\t"
67932 #else
67933         "adc	%[r], %[r]\n\t"
67934 #endif
67935         : [r] "+r" (r), [a] "+r" (a)
67936         :
67937         : "memory", "r2", "r3", "r4", "r5"
67938     );
67939     return (uint32_t)(size_t)r;
67940 }
67941 
67942 /* Square a and put result in r. (r = a * a)
67943  *
67944  * r  A single precision integer.
67945  * a  A single precision integer.
67946  */
sp_3072_sqr_48(sp_digit * r,const sp_digit * a)67947 SP_NOINLINE static void sp_3072_sqr_48(sp_digit* r, const sp_digit* a)
67948 {
67949     sp_digit* z0 = r;
67950     sp_digit z2[48];
67951     sp_digit z1[48];
67952     sp_digit a1[24];
67953     sp_digit u;
67954 
67955     u = sp_3072_add_24(a1, a, &a[24]);
67956     sp_3072_sqr_24(z1, a1);
67957     sp_3072_sqr_24(z2, &a[24]);
67958     sp_3072_sqr_24(z0, a);
67959     sp_3072_mask_24(r + 48, a1, 0 - u);
67960     u += sp_3072_dbl_24(r + 48, r + 48);
67961     u += sp_3072_sub_in_place_48(z1, z2);
67962     u += sp_3072_sub_in_place_48(z1, z0);
67963     u += sp_3072_add_48(r + 24, r + 24, z1);
67964     u += sp_3072_add_24(r + 48, r + 48, z2);
67965     (void)sp_3072_add_to_word_24(r + 72, u, z2 + 24);
67966 }
67967 
67968 /* Add b to a into r. (r = a + b)
67969  *
67970  * r  A single precision integer.
67971  * a  A single precision integer.
67972  * b  A single precision integer.
67973  */
sp_3072_add_to_word_48(sp_digit * r,sp_digit a,const sp_digit * b)67974 SP_NOINLINE static sp_digit sp_3072_add_to_word_48(sp_digit* r, sp_digit a,
67975         const sp_digit* b)
67976 {
67977     __asm__ __volatile__ (
67978         "movs	r5, #0\n\t"
67979         "ldm	%[b]!, {r3, r4}\n\t"
67980 #if defined(__clang__) || defined(WOLFSSL_KEIL)
67981         "adds	r3, r3, %[a]\n\t"
67982 #else
67983         "add	r3, r3, %[a]\n\t"
67984 #endif
67985 #ifdef WOLFSSL_KEIL
67986         "adcs	r4, r4, r5\n\t"
67987 #elif defined(__clang__)
67988         "adcs	r4, r5\n\t"
67989 #else
67990         "adc	r4, r5\n\t"
67991 #endif
67992         "stm	%[r]!, {r3, r4}\n\t"
67993         "ldm	%[b]!, {r3, r4}\n\t"
67994 #ifdef WOLFSSL_KEIL
67995         "adcs	r3, r3, r5\n\t"
67996 #elif defined(__clang__)
67997         "adcs	r3, r5\n\t"
67998 #else
67999         "adc	r3, r5\n\t"
68000 #endif
68001 #ifdef WOLFSSL_KEIL
68002         "adcs	r4, r4, r5\n\t"
68003 #elif defined(__clang__)
68004         "adcs	r4, r5\n\t"
68005 #else
68006         "adc	r4, r5\n\t"
68007 #endif
68008         "stm	%[r]!, {r3, r4}\n\t"
68009         "ldm	%[b]!, {r3, r4}\n\t"
68010 #ifdef WOLFSSL_KEIL
68011         "adcs	r3, r3, r5\n\t"
68012 #elif defined(__clang__)
68013         "adcs	r3, r5\n\t"
68014 #else
68015         "adc	r3, r5\n\t"
68016 #endif
68017 #ifdef WOLFSSL_KEIL
68018         "adcs	r4, r4, r5\n\t"
68019 #elif defined(__clang__)
68020         "adcs	r4, r5\n\t"
68021 #else
68022         "adc	r4, r5\n\t"
68023 #endif
68024         "stm	%[r]!, {r3, r4}\n\t"
68025         "ldm	%[b]!, {r3, r4}\n\t"
68026 #ifdef WOLFSSL_KEIL
68027         "adcs	r3, r3, r5\n\t"
68028 #elif defined(__clang__)
68029         "adcs	r3, r5\n\t"
68030 #else
68031         "adc	r3, r5\n\t"
68032 #endif
68033 #ifdef WOLFSSL_KEIL
68034         "adcs	r4, r4, r5\n\t"
68035 #elif defined(__clang__)
68036         "adcs	r4, r5\n\t"
68037 #else
68038         "adc	r4, r5\n\t"
68039 #endif
68040         "stm	%[r]!, {r3, r4}\n\t"
68041         "ldm	%[b]!, {r3, r4}\n\t"
68042 #ifdef WOLFSSL_KEIL
68043         "adcs	r3, r3, r5\n\t"
68044 #elif defined(__clang__)
68045         "adcs	r3, r5\n\t"
68046 #else
68047         "adc	r3, r5\n\t"
68048 #endif
68049 #ifdef WOLFSSL_KEIL
68050         "adcs	r4, r4, r5\n\t"
68051 #elif defined(__clang__)
68052         "adcs	r4, r5\n\t"
68053 #else
68054         "adc	r4, r5\n\t"
68055 #endif
68056         "stm	%[r]!, {r3, r4}\n\t"
68057         "ldm	%[b]!, {r3, r4}\n\t"
68058 #ifdef WOLFSSL_KEIL
68059         "adcs	r3, r3, r5\n\t"
68060 #elif defined(__clang__)
68061         "adcs	r3, r5\n\t"
68062 #else
68063         "adc	r3, r5\n\t"
68064 #endif
68065 #ifdef WOLFSSL_KEIL
68066         "adcs	r4, r4, r5\n\t"
68067 #elif defined(__clang__)
68068         "adcs	r4, r5\n\t"
68069 #else
68070         "adc	r4, r5\n\t"
68071 #endif
68072         "stm	%[r]!, {r3, r4}\n\t"
68073         "ldm	%[b]!, {r3, r4}\n\t"
68074 #ifdef WOLFSSL_KEIL
68075         "adcs	r3, r3, r5\n\t"
68076 #elif defined(__clang__)
68077         "adcs	r3, r5\n\t"
68078 #else
68079         "adc	r3, r5\n\t"
68080 #endif
68081 #ifdef WOLFSSL_KEIL
68082         "adcs	r4, r4, r5\n\t"
68083 #elif defined(__clang__)
68084         "adcs	r4, r5\n\t"
68085 #else
68086         "adc	r4, r5\n\t"
68087 #endif
68088         "stm	%[r]!, {r3, r4}\n\t"
68089         "ldm	%[b]!, {r3, r4}\n\t"
68090 #ifdef WOLFSSL_KEIL
68091         "adcs	r3, r3, r5\n\t"
68092 #elif defined(__clang__)
68093         "adcs	r3, r5\n\t"
68094 #else
68095         "adc	r3, r5\n\t"
68096 #endif
68097 #ifdef WOLFSSL_KEIL
68098         "adcs	r4, r4, r5\n\t"
68099 #elif defined(__clang__)
68100         "adcs	r4, r5\n\t"
68101 #else
68102         "adc	r4, r5\n\t"
68103 #endif
68104         "stm	%[r]!, {r3, r4}\n\t"
68105         "ldm	%[b]!, {r3, r4}\n\t"
68106 #ifdef WOLFSSL_KEIL
68107         "adcs	r3, r3, r5\n\t"
68108 #elif defined(__clang__)
68109         "adcs	r3, r5\n\t"
68110 #else
68111         "adc	r3, r5\n\t"
68112 #endif
68113 #ifdef WOLFSSL_KEIL
68114         "adcs	r4, r4, r5\n\t"
68115 #elif defined(__clang__)
68116         "adcs	r4, r5\n\t"
68117 #else
68118         "adc	r4, r5\n\t"
68119 #endif
68120         "stm	%[r]!, {r3, r4}\n\t"
68121         "ldm	%[b]!, {r3, r4}\n\t"
68122 #ifdef WOLFSSL_KEIL
68123         "adcs	r3, r3, r5\n\t"
68124 #elif defined(__clang__)
68125         "adcs	r3, r5\n\t"
68126 #else
68127         "adc	r3, r5\n\t"
68128 #endif
68129 #ifdef WOLFSSL_KEIL
68130         "adcs	r4, r4, r5\n\t"
68131 #elif defined(__clang__)
68132         "adcs	r4, r5\n\t"
68133 #else
68134         "adc	r4, r5\n\t"
68135 #endif
68136         "stm	%[r]!, {r3, r4}\n\t"
68137         "ldm	%[b]!, {r3, r4}\n\t"
68138 #ifdef WOLFSSL_KEIL
68139         "adcs	r3, r3, r5\n\t"
68140 #elif defined(__clang__)
68141         "adcs	r3, r5\n\t"
68142 #else
68143         "adc	r3, r5\n\t"
68144 #endif
68145 #ifdef WOLFSSL_KEIL
68146         "adcs	r4, r4, r5\n\t"
68147 #elif defined(__clang__)
68148         "adcs	r4, r5\n\t"
68149 #else
68150         "adc	r4, r5\n\t"
68151 #endif
68152         "stm	%[r]!, {r3, r4}\n\t"
68153         "ldm	%[b]!, {r3, r4}\n\t"
68154 #ifdef WOLFSSL_KEIL
68155         "adcs	r3, r3, r5\n\t"
68156 #elif defined(__clang__)
68157         "adcs	r3, r5\n\t"
68158 #else
68159         "adc	r3, r5\n\t"
68160 #endif
68161 #ifdef WOLFSSL_KEIL
68162         "adcs	r4, r4, r5\n\t"
68163 #elif defined(__clang__)
68164         "adcs	r4, r5\n\t"
68165 #else
68166         "adc	r4, r5\n\t"
68167 #endif
68168         "stm	%[r]!, {r3, r4}\n\t"
68169         "ldm	%[b]!, {r3, r4}\n\t"
68170 #ifdef WOLFSSL_KEIL
68171         "adcs	r3, r3, r5\n\t"
68172 #elif defined(__clang__)
68173         "adcs	r3, r5\n\t"
68174 #else
68175         "adc	r3, r5\n\t"
68176 #endif
68177 #ifdef WOLFSSL_KEIL
68178         "adcs	r4, r4, r5\n\t"
68179 #elif defined(__clang__)
68180         "adcs	r4, r5\n\t"
68181 #else
68182         "adc	r4, r5\n\t"
68183 #endif
68184         "stm	%[r]!, {r3, r4}\n\t"
68185         "ldm	%[b]!, {r3, r4}\n\t"
68186 #ifdef WOLFSSL_KEIL
68187         "adcs	r3, r3, r5\n\t"
68188 #elif defined(__clang__)
68189         "adcs	r3, r5\n\t"
68190 #else
68191         "adc	r3, r5\n\t"
68192 #endif
68193 #ifdef WOLFSSL_KEIL
68194         "adcs	r4, r4, r5\n\t"
68195 #elif defined(__clang__)
68196         "adcs	r4, r5\n\t"
68197 #else
68198         "adc	r4, r5\n\t"
68199 #endif
68200         "stm	%[r]!, {r3, r4}\n\t"
68201         "ldm	%[b]!, {r3, r4}\n\t"
68202 #ifdef WOLFSSL_KEIL
68203         "adcs	r3, r3, r5\n\t"
68204 #elif defined(__clang__)
68205         "adcs	r3, r5\n\t"
68206 #else
68207         "adc	r3, r5\n\t"
68208 #endif
68209 #ifdef WOLFSSL_KEIL
68210         "adcs	r4, r4, r5\n\t"
68211 #elif defined(__clang__)
68212         "adcs	r4, r5\n\t"
68213 #else
68214         "adc	r4, r5\n\t"
68215 #endif
68216         "stm	%[r]!, {r3, r4}\n\t"
68217         "ldm	%[b]!, {r3, r4}\n\t"
68218 #ifdef WOLFSSL_KEIL
68219         "adcs	r3, r3, r5\n\t"
68220 #elif defined(__clang__)
68221         "adcs	r3, r5\n\t"
68222 #else
68223         "adc	r3, r5\n\t"
68224 #endif
68225 #ifdef WOLFSSL_KEIL
68226         "adcs	r4, r4, r5\n\t"
68227 #elif defined(__clang__)
68228         "adcs	r4, r5\n\t"
68229 #else
68230         "adc	r4, r5\n\t"
68231 #endif
68232         "stm	%[r]!, {r3, r4}\n\t"
68233         "ldm	%[b]!, {r3, r4}\n\t"
68234 #ifdef WOLFSSL_KEIL
68235         "adcs	r3, r3, r5\n\t"
68236 #elif defined(__clang__)
68237         "adcs	r3, r5\n\t"
68238 #else
68239         "adc	r3, r5\n\t"
68240 #endif
68241 #ifdef WOLFSSL_KEIL
68242         "adcs	r4, r4, r5\n\t"
68243 #elif defined(__clang__)
68244         "adcs	r4, r5\n\t"
68245 #else
68246         "adc	r4, r5\n\t"
68247 #endif
68248         "stm	%[r]!, {r3, r4}\n\t"
68249         "ldm	%[b]!, {r3, r4}\n\t"
68250 #ifdef WOLFSSL_KEIL
68251         "adcs	r3, r3, r5\n\t"
68252 #elif defined(__clang__)
68253         "adcs	r3, r5\n\t"
68254 #else
68255         "adc	r3, r5\n\t"
68256 #endif
68257 #ifdef WOLFSSL_KEIL
68258         "adcs	r4, r4, r5\n\t"
68259 #elif defined(__clang__)
68260         "adcs	r4, r5\n\t"
68261 #else
68262         "adc	r4, r5\n\t"
68263 #endif
68264         "stm	%[r]!, {r3, r4}\n\t"
68265         "ldm	%[b]!, {r3, r4}\n\t"
68266 #ifdef WOLFSSL_KEIL
68267         "adcs	r3, r3, r5\n\t"
68268 #elif defined(__clang__)
68269         "adcs	r3, r5\n\t"
68270 #else
68271         "adc	r3, r5\n\t"
68272 #endif
68273 #ifdef WOLFSSL_KEIL
68274         "adcs	r4, r4, r5\n\t"
68275 #elif defined(__clang__)
68276         "adcs	r4, r5\n\t"
68277 #else
68278         "adc	r4, r5\n\t"
68279 #endif
68280         "stm	%[r]!, {r3, r4}\n\t"
68281         "ldm	%[b]!, {r3, r4}\n\t"
68282 #ifdef WOLFSSL_KEIL
68283         "adcs	r3, r3, r5\n\t"
68284 #elif defined(__clang__)
68285         "adcs	r3, r5\n\t"
68286 #else
68287         "adc	r3, r5\n\t"
68288 #endif
68289 #ifdef WOLFSSL_KEIL
68290         "adcs	r4, r4, r5\n\t"
68291 #elif defined(__clang__)
68292         "adcs	r4, r5\n\t"
68293 #else
68294         "adc	r4, r5\n\t"
68295 #endif
68296         "stm	%[r]!, {r3, r4}\n\t"
68297         "ldm	%[b]!, {r3, r4}\n\t"
68298 #ifdef WOLFSSL_KEIL
68299         "adcs	r3, r3, r5\n\t"
68300 #elif defined(__clang__)
68301         "adcs	r3, r5\n\t"
68302 #else
68303         "adc	r3, r5\n\t"
68304 #endif
68305 #ifdef WOLFSSL_KEIL
68306         "adcs	r4, r4, r5\n\t"
68307 #elif defined(__clang__)
68308         "adcs	r4, r5\n\t"
68309 #else
68310         "adc	r4, r5\n\t"
68311 #endif
68312         "stm	%[r]!, {r3, r4}\n\t"
68313         "ldm	%[b]!, {r3, r4}\n\t"
68314 #ifdef WOLFSSL_KEIL
68315         "adcs	r3, r3, r5\n\t"
68316 #elif defined(__clang__)
68317         "adcs	r3, r5\n\t"
68318 #else
68319         "adc	r3, r5\n\t"
68320 #endif
68321 #ifdef WOLFSSL_KEIL
68322         "adcs	r4, r4, r5\n\t"
68323 #elif defined(__clang__)
68324         "adcs	r4, r5\n\t"
68325 #else
68326         "adc	r4, r5\n\t"
68327 #endif
68328         "stm	%[r]!, {r3, r4}\n\t"
68329         "ldm	%[b]!, {r3, r4}\n\t"
68330 #ifdef WOLFSSL_KEIL
68331         "adcs	r3, r3, r5\n\t"
68332 #elif defined(__clang__)
68333         "adcs	r3, r5\n\t"
68334 #else
68335         "adc	r3, r5\n\t"
68336 #endif
68337 #ifdef WOLFSSL_KEIL
68338         "adcs	r4, r4, r5\n\t"
68339 #elif defined(__clang__)
68340         "adcs	r4, r5\n\t"
68341 #else
68342         "adc	r4, r5\n\t"
68343 #endif
68344         "stm	%[r]!, {r3, r4}\n\t"
68345         "ldm	%[b]!, {r3, r4}\n\t"
68346 #ifdef WOLFSSL_KEIL
68347         "adcs	r3, r3, r5\n\t"
68348 #elif defined(__clang__)
68349         "adcs	r3, r5\n\t"
68350 #else
68351         "adc	r3, r5\n\t"
68352 #endif
68353 #ifdef WOLFSSL_KEIL
68354         "adcs	r4, r4, r5\n\t"
68355 #elif defined(__clang__)
68356         "adcs	r4, r5\n\t"
68357 #else
68358         "adc	r4, r5\n\t"
68359 #endif
68360         "stm	%[r]!, {r3, r4}\n\t"
68361         "movs	%[r], #0\n\t"
68362 #ifdef WOLFSSL_KEIL
68363         "adcs	%[r], %[r], %[r]\n\t"
68364 #elif defined(__clang__)
68365         "adcs	%[r], %[r]\n\t"
68366 #else
68367         "adc	%[r], %[r]\n\t"
68368 #endif
68369         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
68370         :
68371         : "memory", "r3", "r4", "r5"
68372     );
68373     return (uint32_t)(size_t)r;
68374 }
68375 
68376 /* Sub b from a into a. (a -= b)
68377  *
68378  * a  A single precision integer.
68379  * b  A single precision integer.
68380  */
sp_3072_sub_in_place_96(sp_digit * a,const sp_digit * b)68381 SP_NOINLINE static sp_digit sp_3072_sub_in_place_96(sp_digit* a,
68382         const sp_digit* b)
68383 {
68384     __asm__ __volatile__ (
68385         "ldm	%[b]!, {r4, r5}\n\t"
68386         "ldr	r2, [%[a]]\n\t"
68387         "ldr	r3, [%[a], #4]\n\t"
68388 #if defined(__clang__) || defined(WOLFSSL_KEIL)
68389         "subs	r2, r2, r4\n\t"
68390 #else
68391         "sub	r2, r2, r4\n\t"
68392 #endif
68393 #ifdef WOLFSSL_KEIL
68394         "sbcs	r3, r3, r5\n\t"
68395 #elif defined(__clang__)
68396         "sbcs	r3, r5\n\t"
68397 #else
68398         "sbc	r3, r5\n\t"
68399 #endif
68400         "stm	%[a]!, {r2, r3}\n\t"
68401         "ldm	%[b]!, {r4, r5}\n\t"
68402         "ldr	r2, [%[a]]\n\t"
68403         "ldr	r3, [%[a], #4]\n\t"
68404 #ifdef WOLFSSL_KEIL
68405         "sbcs	r2, r2, r4\n\t"
68406 #elif defined(__clang__)
68407         "sbcs	r2, r4\n\t"
68408 #else
68409         "sbc	r2, r4\n\t"
68410 #endif
68411 #ifdef WOLFSSL_KEIL
68412         "sbcs	r3, r3, r5\n\t"
68413 #elif defined(__clang__)
68414         "sbcs	r3, r5\n\t"
68415 #else
68416         "sbc	r3, r5\n\t"
68417 #endif
68418         "stm	%[a]!, {r2, r3}\n\t"
68419         "ldm	%[b]!, {r4, r5}\n\t"
68420         "ldr	r2, [%[a]]\n\t"
68421         "ldr	r3, [%[a], #4]\n\t"
68422 #ifdef WOLFSSL_KEIL
68423         "sbcs	r2, r2, r4\n\t"
68424 #elif defined(__clang__)
68425         "sbcs	r2, r4\n\t"
68426 #else
68427         "sbc	r2, r4\n\t"
68428 #endif
68429 #ifdef WOLFSSL_KEIL
68430         "sbcs	r3, r3, r5\n\t"
68431 #elif defined(__clang__)
68432         "sbcs	r3, r5\n\t"
68433 #else
68434         "sbc	r3, r5\n\t"
68435 #endif
68436         "stm	%[a]!, {r2, r3}\n\t"
68437         "ldm	%[b]!, {r4, r5}\n\t"
68438         "ldr	r2, [%[a]]\n\t"
68439         "ldr	r3, [%[a], #4]\n\t"
68440 #ifdef WOLFSSL_KEIL
68441         "sbcs	r2, r2, r4\n\t"
68442 #elif defined(__clang__)
68443         "sbcs	r2, r4\n\t"
68444 #else
68445         "sbc	r2, r4\n\t"
68446 #endif
68447 #ifdef WOLFSSL_KEIL
68448         "sbcs	r3, r3, r5\n\t"
68449 #elif defined(__clang__)
68450         "sbcs	r3, r5\n\t"
68451 #else
68452         "sbc	r3, r5\n\t"
68453 #endif
68454         "stm	%[a]!, {r2, r3}\n\t"
68455         "ldm	%[b]!, {r4, r5}\n\t"
68456         "ldr	r2, [%[a]]\n\t"
68457         "ldr	r3, [%[a], #4]\n\t"
68458 #ifdef WOLFSSL_KEIL
68459         "sbcs	r2, r2, r4\n\t"
68460 #elif defined(__clang__)
68461         "sbcs	r2, r4\n\t"
68462 #else
68463         "sbc	r2, r4\n\t"
68464 #endif
68465 #ifdef WOLFSSL_KEIL
68466         "sbcs	r3, r3, r5\n\t"
68467 #elif defined(__clang__)
68468         "sbcs	r3, r5\n\t"
68469 #else
68470         "sbc	r3, r5\n\t"
68471 #endif
68472         "stm	%[a]!, {r2, r3}\n\t"
68473         "ldm	%[b]!, {r4, r5}\n\t"
68474         "ldr	r2, [%[a]]\n\t"
68475         "ldr	r3, [%[a], #4]\n\t"
68476 #ifdef WOLFSSL_KEIL
68477         "sbcs	r2, r2, r4\n\t"
68478 #elif defined(__clang__)
68479         "sbcs	r2, r4\n\t"
68480 #else
68481         "sbc	r2, r4\n\t"
68482 #endif
68483 #ifdef WOLFSSL_KEIL
68484         "sbcs	r3, r3, r5\n\t"
68485 #elif defined(__clang__)
68486         "sbcs	r3, r5\n\t"
68487 #else
68488         "sbc	r3, r5\n\t"
68489 #endif
68490         "stm	%[a]!, {r2, r3}\n\t"
68491         "ldm	%[b]!, {r4, r5}\n\t"
68492         "ldr	r2, [%[a]]\n\t"
68493         "ldr	r3, [%[a], #4]\n\t"
68494 #ifdef WOLFSSL_KEIL
68495         "sbcs	r2, r2, r4\n\t"
68496 #elif defined(__clang__)
68497         "sbcs	r2, r4\n\t"
68498 #else
68499         "sbc	r2, r4\n\t"
68500 #endif
68501 #ifdef WOLFSSL_KEIL
68502         "sbcs	r3, r3, r5\n\t"
68503 #elif defined(__clang__)
68504         "sbcs	r3, r5\n\t"
68505 #else
68506         "sbc	r3, r5\n\t"
68507 #endif
68508         "stm	%[a]!, {r2, r3}\n\t"
68509         "ldm	%[b]!, {r4, r5}\n\t"
68510         "ldr	r2, [%[a]]\n\t"
68511         "ldr	r3, [%[a], #4]\n\t"
68512 #ifdef WOLFSSL_KEIL
68513         "sbcs	r2, r2, r4\n\t"
68514 #elif defined(__clang__)
68515         "sbcs	r2, r4\n\t"
68516 #else
68517         "sbc	r2, r4\n\t"
68518 #endif
68519 #ifdef WOLFSSL_KEIL
68520         "sbcs	r3, r3, r5\n\t"
68521 #elif defined(__clang__)
68522         "sbcs	r3, r5\n\t"
68523 #else
68524         "sbc	r3, r5\n\t"
68525 #endif
68526         "stm	%[a]!, {r2, r3}\n\t"
68527         "ldm	%[b]!, {r4, r5}\n\t"
68528         "ldr	r2, [%[a]]\n\t"
68529         "ldr	r3, [%[a], #4]\n\t"
68530 #ifdef WOLFSSL_KEIL
68531         "sbcs	r2, r2, r4\n\t"
68532 #elif defined(__clang__)
68533         "sbcs	r2, r4\n\t"
68534 #else
68535         "sbc	r2, r4\n\t"
68536 #endif
68537 #ifdef WOLFSSL_KEIL
68538         "sbcs	r3, r3, r5\n\t"
68539 #elif defined(__clang__)
68540         "sbcs	r3, r5\n\t"
68541 #else
68542         "sbc	r3, r5\n\t"
68543 #endif
68544         "stm	%[a]!, {r2, r3}\n\t"
68545         "ldm	%[b]!, {r4, r5}\n\t"
68546         "ldr	r2, [%[a]]\n\t"
68547         "ldr	r3, [%[a], #4]\n\t"
68548 #ifdef WOLFSSL_KEIL
68549         "sbcs	r2, r2, r4\n\t"
68550 #elif defined(__clang__)
68551         "sbcs	r2, r4\n\t"
68552 #else
68553         "sbc	r2, r4\n\t"
68554 #endif
68555 #ifdef WOLFSSL_KEIL
68556         "sbcs	r3, r3, r5\n\t"
68557 #elif defined(__clang__)
68558         "sbcs	r3, r5\n\t"
68559 #else
68560         "sbc	r3, r5\n\t"
68561 #endif
68562         "stm	%[a]!, {r2, r3}\n\t"
68563         "ldm	%[b]!, {r4, r5}\n\t"
68564         "ldr	r2, [%[a]]\n\t"
68565         "ldr	r3, [%[a], #4]\n\t"
68566 #ifdef WOLFSSL_KEIL
68567         "sbcs	r2, r2, r4\n\t"
68568 #elif defined(__clang__)
68569         "sbcs	r2, r4\n\t"
68570 #else
68571         "sbc	r2, r4\n\t"
68572 #endif
68573 #ifdef WOLFSSL_KEIL
68574         "sbcs	r3, r3, r5\n\t"
68575 #elif defined(__clang__)
68576         "sbcs	r3, r5\n\t"
68577 #else
68578         "sbc	r3, r5\n\t"
68579 #endif
68580         "stm	%[a]!, {r2, r3}\n\t"
68581         "ldm	%[b]!, {r4, r5}\n\t"
68582         "ldr	r2, [%[a]]\n\t"
68583         "ldr	r3, [%[a], #4]\n\t"
68584 #ifdef WOLFSSL_KEIL
68585         "sbcs	r2, r2, r4\n\t"
68586 #elif defined(__clang__)
68587         "sbcs	r2, r4\n\t"
68588 #else
68589         "sbc	r2, r4\n\t"
68590 #endif
68591 #ifdef WOLFSSL_KEIL
68592         "sbcs	r3, r3, r5\n\t"
68593 #elif defined(__clang__)
68594         "sbcs	r3, r5\n\t"
68595 #else
68596         "sbc	r3, r5\n\t"
68597 #endif
68598         "stm	%[a]!, {r2, r3}\n\t"
68599         "ldm	%[b]!, {r4, r5}\n\t"
68600         "ldr	r2, [%[a]]\n\t"
68601         "ldr	r3, [%[a], #4]\n\t"
68602 #ifdef WOLFSSL_KEIL
68603         "sbcs	r2, r2, r4\n\t"
68604 #elif defined(__clang__)
68605         "sbcs	r2, r4\n\t"
68606 #else
68607         "sbc	r2, r4\n\t"
68608 #endif
68609 #ifdef WOLFSSL_KEIL
68610         "sbcs	r3, r3, r5\n\t"
68611 #elif defined(__clang__)
68612         "sbcs	r3, r5\n\t"
68613 #else
68614         "sbc	r3, r5\n\t"
68615 #endif
68616         "stm	%[a]!, {r2, r3}\n\t"
68617         "ldm	%[b]!, {r4, r5}\n\t"
68618         "ldr	r2, [%[a]]\n\t"
68619         "ldr	r3, [%[a], #4]\n\t"
68620 #ifdef WOLFSSL_KEIL
68621         "sbcs	r2, r2, r4\n\t"
68622 #elif defined(__clang__)
68623         "sbcs	r2, r4\n\t"
68624 #else
68625         "sbc	r2, r4\n\t"
68626 #endif
68627 #ifdef WOLFSSL_KEIL
68628         "sbcs	r3, r3, r5\n\t"
68629 #elif defined(__clang__)
68630         "sbcs	r3, r5\n\t"
68631 #else
68632         "sbc	r3, r5\n\t"
68633 #endif
68634         "stm	%[a]!, {r2, r3}\n\t"
68635         "ldm	%[b]!, {r4, r5}\n\t"
68636         "ldr	r2, [%[a]]\n\t"
68637         "ldr	r3, [%[a], #4]\n\t"
68638 #ifdef WOLFSSL_KEIL
68639         "sbcs	r2, r2, r4\n\t"
68640 #elif defined(__clang__)
68641         "sbcs	r2, r4\n\t"
68642 #else
68643         "sbc	r2, r4\n\t"
68644 #endif
68645 #ifdef WOLFSSL_KEIL
68646         "sbcs	r3, r3, r5\n\t"
68647 #elif defined(__clang__)
68648         "sbcs	r3, r5\n\t"
68649 #else
68650         "sbc	r3, r5\n\t"
68651 #endif
68652         "stm	%[a]!, {r2, r3}\n\t"
68653         "ldm	%[b]!, {r4, r5}\n\t"
68654         "ldr	r2, [%[a]]\n\t"
68655         "ldr	r3, [%[a], #4]\n\t"
68656 #ifdef WOLFSSL_KEIL
68657         "sbcs	r2, r2, r4\n\t"
68658 #elif defined(__clang__)
68659         "sbcs	r2, r4\n\t"
68660 #else
68661         "sbc	r2, r4\n\t"
68662 #endif
68663 #ifdef WOLFSSL_KEIL
68664         "sbcs	r3, r3, r5\n\t"
68665 #elif defined(__clang__)
68666         "sbcs	r3, r5\n\t"
68667 #else
68668         "sbc	r3, r5\n\t"
68669 #endif
68670         "stm	%[a]!, {r2, r3}\n\t"
68671         "ldm	%[b]!, {r4, r5}\n\t"
68672         "ldr	r2, [%[a]]\n\t"
68673         "ldr	r3, [%[a], #4]\n\t"
68674 #ifdef WOLFSSL_KEIL
68675         "sbcs	r2, r2, r4\n\t"
68676 #elif defined(__clang__)
68677         "sbcs	r2, r4\n\t"
68678 #else
68679         "sbc	r2, r4\n\t"
68680 #endif
68681 #ifdef WOLFSSL_KEIL
68682         "sbcs	r3, r3, r5\n\t"
68683 #elif defined(__clang__)
68684         "sbcs	r3, r5\n\t"
68685 #else
68686         "sbc	r3, r5\n\t"
68687 #endif
68688         "stm	%[a]!, {r2, r3}\n\t"
68689         "ldm	%[b]!, {r4, r5}\n\t"
68690         "ldr	r2, [%[a]]\n\t"
68691         "ldr	r3, [%[a], #4]\n\t"
68692 #ifdef WOLFSSL_KEIL
68693         "sbcs	r2, r2, r4\n\t"
68694 #elif defined(__clang__)
68695         "sbcs	r2, r4\n\t"
68696 #else
68697         "sbc	r2, r4\n\t"
68698 #endif
68699 #ifdef WOLFSSL_KEIL
68700         "sbcs	r3, r3, r5\n\t"
68701 #elif defined(__clang__)
68702         "sbcs	r3, r5\n\t"
68703 #else
68704         "sbc	r3, r5\n\t"
68705 #endif
68706         "stm	%[a]!, {r2, r3}\n\t"
68707         "ldm	%[b]!, {r4, r5}\n\t"
68708         "ldr	r2, [%[a]]\n\t"
68709         "ldr	r3, [%[a], #4]\n\t"
68710 #ifdef WOLFSSL_KEIL
68711         "sbcs	r2, r2, r4\n\t"
68712 #elif defined(__clang__)
68713         "sbcs	r2, r4\n\t"
68714 #else
68715         "sbc	r2, r4\n\t"
68716 #endif
68717 #ifdef WOLFSSL_KEIL
68718         "sbcs	r3, r3, r5\n\t"
68719 #elif defined(__clang__)
68720         "sbcs	r3, r5\n\t"
68721 #else
68722         "sbc	r3, r5\n\t"
68723 #endif
68724         "stm	%[a]!, {r2, r3}\n\t"
68725         "ldm	%[b]!, {r4, r5}\n\t"
68726         "ldr	r2, [%[a]]\n\t"
68727         "ldr	r3, [%[a], #4]\n\t"
68728 #ifdef WOLFSSL_KEIL
68729         "sbcs	r2, r2, r4\n\t"
68730 #elif defined(__clang__)
68731         "sbcs	r2, r4\n\t"
68732 #else
68733         "sbc	r2, r4\n\t"
68734 #endif
68735 #ifdef WOLFSSL_KEIL
68736         "sbcs	r3, r3, r5\n\t"
68737 #elif defined(__clang__)
68738         "sbcs	r3, r5\n\t"
68739 #else
68740         "sbc	r3, r5\n\t"
68741 #endif
68742         "stm	%[a]!, {r2, r3}\n\t"
68743         "ldm	%[b]!, {r4, r5}\n\t"
68744         "ldr	r2, [%[a]]\n\t"
68745         "ldr	r3, [%[a], #4]\n\t"
68746 #ifdef WOLFSSL_KEIL
68747         "sbcs	r2, r2, r4\n\t"
68748 #elif defined(__clang__)
68749         "sbcs	r2, r4\n\t"
68750 #else
68751         "sbc	r2, r4\n\t"
68752 #endif
68753 #ifdef WOLFSSL_KEIL
68754         "sbcs	r3, r3, r5\n\t"
68755 #elif defined(__clang__)
68756         "sbcs	r3, r5\n\t"
68757 #else
68758         "sbc	r3, r5\n\t"
68759 #endif
68760         "stm	%[a]!, {r2, r3}\n\t"
68761         "ldm	%[b]!, {r4, r5}\n\t"
68762         "ldr	r2, [%[a]]\n\t"
68763         "ldr	r3, [%[a], #4]\n\t"
68764 #ifdef WOLFSSL_KEIL
68765         "sbcs	r2, r2, r4\n\t"
68766 #elif defined(__clang__)
68767         "sbcs	r2, r4\n\t"
68768 #else
68769         "sbc	r2, r4\n\t"
68770 #endif
68771 #ifdef WOLFSSL_KEIL
68772         "sbcs	r3, r3, r5\n\t"
68773 #elif defined(__clang__)
68774         "sbcs	r3, r5\n\t"
68775 #else
68776         "sbc	r3, r5\n\t"
68777 #endif
68778         "stm	%[a]!, {r2, r3}\n\t"
68779         "ldm	%[b]!, {r4, r5}\n\t"
68780         "ldr	r2, [%[a]]\n\t"
68781         "ldr	r3, [%[a], #4]\n\t"
68782 #ifdef WOLFSSL_KEIL
68783         "sbcs	r2, r2, r4\n\t"
68784 #elif defined(__clang__)
68785         "sbcs	r2, r4\n\t"
68786 #else
68787         "sbc	r2, r4\n\t"
68788 #endif
68789 #ifdef WOLFSSL_KEIL
68790         "sbcs	r3, r3, r5\n\t"
68791 #elif defined(__clang__)
68792         "sbcs	r3, r5\n\t"
68793 #else
68794         "sbc	r3, r5\n\t"
68795 #endif
68796         "stm	%[a]!, {r2, r3}\n\t"
68797         "ldm	%[b]!, {r4, r5}\n\t"
68798         "ldr	r2, [%[a]]\n\t"
68799         "ldr	r3, [%[a], #4]\n\t"
68800 #ifdef WOLFSSL_KEIL
68801         "sbcs	r2, r2, r4\n\t"
68802 #elif defined(__clang__)
68803         "sbcs	r2, r4\n\t"
68804 #else
68805         "sbc	r2, r4\n\t"
68806 #endif
68807 #ifdef WOLFSSL_KEIL
68808         "sbcs	r3, r3, r5\n\t"
68809 #elif defined(__clang__)
68810         "sbcs	r3, r5\n\t"
68811 #else
68812         "sbc	r3, r5\n\t"
68813 #endif
68814         "stm	%[a]!, {r2, r3}\n\t"
68815         "ldm	%[b]!, {r4, r5}\n\t"
68816         "ldr	r2, [%[a]]\n\t"
68817         "ldr	r3, [%[a], #4]\n\t"
68818 #ifdef WOLFSSL_KEIL
68819         "sbcs	r2, r2, r4\n\t"
68820 #elif defined(__clang__)
68821         "sbcs	r2, r4\n\t"
68822 #else
68823         "sbc	r2, r4\n\t"
68824 #endif
68825 #ifdef WOLFSSL_KEIL
68826         "sbcs	r3, r3, r5\n\t"
68827 #elif defined(__clang__)
68828         "sbcs	r3, r5\n\t"
68829 #else
68830         "sbc	r3, r5\n\t"
68831 #endif
68832         "stm	%[a]!, {r2, r3}\n\t"
68833         "ldm	%[b]!, {r4, r5}\n\t"
68834         "ldr	r2, [%[a]]\n\t"
68835         "ldr	r3, [%[a], #4]\n\t"
68836 #ifdef WOLFSSL_KEIL
68837         "sbcs	r2, r2, r4\n\t"
68838 #elif defined(__clang__)
68839         "sbcs	r2, r4\n\t"
68840 #else
68841         "sbc	r2, r4\n\t"
68842 #endif
68843 #ifdef WOLFSSL_KEIL
68844         "sbcs	r3, r3, r5\n\t"
68845 #elif defined(__clang__)
68846         "sbcs	r3, r5\n\t"
68847 #else
68848         "sbc	r3, r5\n\t"
68849 #endif
68850         "stm	%[a]!, {r2, r3}\n\t"
68851         "ldm	%[b]!, {r4, r5}\n\t"
68852         "ldr	r2, [%[a]]\n\t"
68853         "ldr	r3, [%[a], #4]\n\t"
68854 #ifdef WOLFSSL_KEIL
68855         "sbcs	r2, r2, r4\n\t"
68856 #elif defined(__clang__)
68857         "sbcs	r2, r4\n\t"
68858 #else
68859         "sbc	r2, r4\n\t"
68860 #endif
68861 #ifdef WOLFSSL_KEIL
68862         "sbcs	r3, r3, r5\n\t"
68863 #elif defined(__clang__)
68864         "sbcs	r3, r5\n\t"
68865 #else
68866         "sbc	r3, r5\n\t"
68867 #endif
68868         "stm	%[a]!, {r2, r3}\n\t"
68869         "ldm	%[b]!, {r4, r5}\n\t"
68870         "ldr	r2, [%[a]]\n\t"
68871         "ldr	r3, [%[a], #4]\n\t"
68872 #ifdef WOLFSSL_KEIL
68873         "sbcs	r2, r2, r4\n\t"
68874 #elif defined(__clang__)
68875         "sbcs	r2, r4\n\t"
68876 #else
68877         "sbc	r2, r4\n\t"
68878 #endif
68879 #ifdef WOLFSSL_KEIL
68880         "sbcs	r3, r3, r5\n\t"
68881 #elif defined(__clang__)
68882         "sbcs	r3, r5\n\t"
68883 #else
68884         "sbc	r3, r5\n\t"
68885 #endif
68886         "stm	%[a]!, {r2, r3}\n\t"
68887         "ldm	%[b]!, {r4, r5}\n\t"
68888         "ldr	r2, [%[a]]\n\t"
68889         "ldr	r3, [%[a], #4]\n\t"
68890 #ifdef WOLFSSL_KEIL
68891         "sbcs	r2, r2, r4\n\t"
68892 #elif defined(__clang__)
68893         "sbcs	r2, r4\n\t"
68894 #else
68895         "sbc	r2, r4\n\t"
68896 #endif
68897 #ifdef WOLFSSL_KEIL
68898         "sbcs	r3, r3, r5\n\t"
68899 #elif defined(__clang__)
68900         "sbcs	r3, r5\n\t"
68901 #else
68902         "sbc	r3, r5\n\t"
68903 #endif
68904         "stm	%[a]!, {r2, r3}\n\t"
68905         "ldm	%[b]!, {r4, r5}\n\t"
68906         "ldr	r2, [%[a]]\n\t"
68907         "ldr	r3, [%[a], #4]\n\t"
68908 #ifdef WOLFSSL_KEIL
68909         "sbcs	r2, r2, r4\n\t"
68910 #elif defined(__clang__)
68911         "sbcs	r2, r4\n\t"
68912 #else
68913         "sbc	r2, r4\n\t"
68914 #endif
68915 #ifdef WOLFSSL_KEIL
68916         "sbcs	r3, r3, r5\n\t"
68917 #elif defined(__clang__)
68918         "sbcs	r3, r5\n\t"
68919 #else
68920         "sbc	r3, r5\n\t"
68921 #endif
68922         "stm	%[a]!, {r2, r3}\n\t"
68923         "ldm	%[b]!, {r4, r5}\n\t"
68924         "ldr	r2, [%[a]]\n\t"
68925         "ldr	r3, [%[a], #4]\n\t"
68926 #ifdef WOLFSSL_KEIL
68927         "sbcs	r2, r2, r4\n\t"
68928 #elif defined(__clang__)
68929         "sbcs	r2, r4\n\t"
68930 #else
68931         "sbc	r2, r4\n\t"
68932 #endif
68933 #ifdef WOLFSSL_KEIL
68934         "sbcs	r3, r3, r5\n\t"
68935 #elif defined(__clang__)
68936         "sbcs	r3, r5\n\t"
68937 #else
68938         "sbc	r3, r5\n\t"
68939 #endif
68940         "stm	%[a]!, {r2, r3}\n\t"
68941         "ldm	%[b]!, {r4, r5}\n\t"
68942         "ldr	r2, [%[a]]\n\t"
68943         "ldr	r3, [%[a], #4]\n\t"
68944 #ifdef WOLFSSL_KEIL
68945         "sbcs	r2, r2, r4\n\t"
68946 #elif defined(__clang__)
68947         "sbcs	r2, r4\n\t"
68948 #else
68949         "sbc	r2, r4\n\t"
68950 #endif
68951 #ifdef WOLFSSL_KEIL
68952         "sbcs	r3, r3, r5\n\t"
68953 #elif defined(__clang__)
68954         "sbcs	r3, r5\n\t"
68955 #else
68956         "sbc	r3, r5\n\t"
68957 #endif
68958         "stm	%[a]!, {r2, r3}\n\t"
68959         "ldm	%[b]!, {r4, r5}\n\t"
68960         "ldr	r2, [%[a]]\n\t"
68961         "ldr	r3, [%[a], #4]\n\t"
68962 #ifdef WOLFSSL_KEIL
68963         "sbcs	r2, r2, r4\n\t"
68964 #elif defined(__clang__)
68965         "sbcs	r2, r4\n\t"
68966 #else
68967         "sbc	r2, r4\n\t"
68968 #endif
68969 #ifdef WOLFSSL_KEIL
68970         "sbcs	r3, r3, r5\n\t"
68971 #elif defined(__clang__)
68972         "sbcs	r3, r5\n\t"
68973 #else
68974         "sbc	r3, r5\n\t"
68975 #endif
68976         "stm	%[a]!, {r2, r3}\n\t"
68977         "ldm	%[b]!, {r4, r5}\n\t"
68978         "ldr	r2, [%[a]]\n\t"
68979         "ldr	r3, [%[a], #4]\n\t"
68980 #ifdef WOLFSSL_KEIL
68981         "sbcs	r2, r2, r4\n\t"
68982 #elif defined(__clang__)
68983         "sbcs	r2, r4\n\t"
68984 #else
68985         "sbc	r2, r4\n\t"
68986 #endif
68987 #ifdef WOLFSSL_KEIL
68988         "sbcs	r3, r3, r5\n\t"
68989 #elif defined(__clang__)
68990         "sbcs	r3, r5\n\t"
68991 #else
68992         "sbc	r3, r5\n\t"
68993 #endif
68994         "stm	%[a]!, {r2, r3}\n\t"
68995         "ldm	%[b]!, {r4, r5}\n\t"
68996         "ldr	r2, [%[a]]\n\t"
68997         "ldr	r3, [%[a], #4]\n\t"
68998 #ifdef WOLFSSL_KEIL
68999         "sbcs	r2, r2, r4\n\t"
69000 #elif defined(__clang__)
69001         "sbcs	r2, r4\n\t"
69002 #else
69003         "sbc	r2, r4\n\t"
69004 #endif
69005 #ifdef WOLFSSL_KEIL
69006         "sbcs	r3, r3, r5\n\t"
69007 #elif defined(__clang__)
69008         "sbcs	r3, r5\n\t"
69009 #else
69010         "sbc	r3, r5\n\t"
69011 #endif
69012         "stm	%[a]!, {r2, r3}\n\t"
69013         "ldm	%[b]!, {r4, r5}\n\t"
69014         "ldr	r2, [%[a]]\n\t"
69015         "ldr	r3, [%[a], #4]\n\t"
69016 #ifdef WOLFSSL_KEIL
69017         "sbcs	r2, r2, r4\n\t"
69018 #elif defined(__clang__)
69019         "sbcs	r2, r4\n\t"
69020 #else
69021         "sbc	r2, r4\n\t"
69022 #endif
69023 #ifdef WOLFSSL_KEIL
69024         "sbcs	r3, r3, r5\n\t"
69025 #elif defined(__clang__)
69026         "sbcs	r3, r5\n\t"
69027 #else
69028         "sbc	r3, r5\n\t"
69029 #endif
69030         "stm	%[a]!, {r2, r3}\n\t"
69031         "ldm	%[b]!, {r4, r5}\n\t"
69032         "ldr	r2, [%[a]]\n\t"
69033         "ldr	r3, [%[a], #4]\n\t"
69034 #ifdef WOLFSSL_KEIL
69035         "sbcs	r2, r2, r4\n\t"
69036 #elif defined(__clang__)
69037         "sbcs	r2, r4\n\t"
69038 #else
69039         "sbc	r2, r4\n\t"
69040 #endif
69041 #ifdef WOLFSSL_KEIL
69042         "sbcs	r3, r3, r5\n\t"
69043 #elif defined(__clang__)
69044         "sbcs	r3, r5\n\t"
69045 #else
69046         "sbc	r3, r5\n\t"
69047 #endif
69048         "stm	%[a]!, {r2, r3}\n\t"
69049         "ldm	%[b]!, {r4, r5}\n\t"
69050         "ldr	r2, [%[a]]\n\t"
69051         "ldr	r3, [%[a], #4]\n\t"
69052 #ifdef WOLFSSL_KEIL
69053         "sbcs	r2, r2, r4\n\t"
69054 #elif defined(__clang__)
69055         "sbcs	r2, r4\n\t"
69056 #else
69057         "sbc	r2, r4\n\t"
69058 #endif
69059 #ifdef WOLFSSL_KEIL
69060         "sbcs	r3, r3, r5\n\t"
69061 #elif defined(__clang__)
69062         "sbcs	r3, r5\n\t"
69063 #else
69064         "sbc	r3, r5\n\t"
69065 #endif
69066         "stm	%[a]!, {r2, r3}\n\t"
69067         "ldm	%[b]!, {r4, r5}\n\t"
69068         "ldr	r2, [%[a]]\n\t"
69069         "ldr	r3, [%[a], #4]\n\t"
69070 #ifdef WOLFSSL_KEIL
69071         "sbcs	r2, r2, r4\n\t"
69072 #elif defined(__clang__)
69073         "sbcs	r2, r4\n\t"
69074 #else
69075         "sbc	r2, r4\n\t"
69076 #endif
69077 #ifdef WOLFSSL_KEIL
69078         "sbcs	r3, r3, r5\n\t"
69079 #elif defined(__clang__)
69080         "sbcs	r3, r5\n\t"
69081 #else
69082         "sbc	r3, r5\n\t"
69083 #endif
69084         "stm	%[a]!, {r2, r3}\n\t"
69085         "ldm	%[b]!, {r4, r5}\n\t"
69086         "ldr	r2, [%[a]]\n\t"
69087         "ldr	r3, [%[a], #4]\n\t"
69088 #ifdef WOLFSSL_KEIL
69089         "sbcs	r2, r2, r4\n\t"
69090 #elif defined(__clang__)
69091         "sbcs	r2, r4\n\t"
69092 #else
69093         "sbc	r2, r4\n\t"
69094 #endif
69095 #ifdef WOLFSSL_KEIL
69096         "sbcs	r3, r3, r5\n\t"
69097 #elif defined(__clang__)
69098         "sbcs	r3, r5\n\t"
69099 #else
69100         "sbc	r3, r5\n\t"
69101 #endif
69102         "stm	%[a]!, {r2, r3}\n\t"
69103         "ldm	%[b]!, {r4, r5}\n\t"
69104         "ldr	r2, [%[a]]\n\t"
69105         "ldr	r3, [%[a], #4]\n\t"
69106 #ifdef WOLFSSL_KEIL
69107         "sbcs	r2, r2, r4\n\t"
69108 #elif defined(__clang__)
69109         "sbcs	r2, r4\n\t"
69110 #else
69111         "sbc	r2, r4\n\t"
69112 #endif
69113 #ifdef WOLFSSL_KEIL
69114         "sbcs	r3, r3, r5\n\t"
69115 #elif defined(__clang__)
69116         "sbcs	r3, r5\n\t"
69117 #else
69118         "sbc	r3, r5\n\t"
69119 #endif
69120         "stm	%[a]!, {r2, r3}\n\t"
69121         "ldm	%[b]!, {r4, r5}\n\t"
69122         "ldr	r2, [%[a]]\n\t"
69123         "ldr	r3, [%[a], #4]\n\t"
69124 #ifdef WOLFSSL_KEIL
69125         "sbcs	r2, r2, r4\n\t"
69126 #elif defined(__clang__)
69127         "sbcs	r2, r4\n\t"
69128 #else
69129         "sbc	r2, r4\n\t"
69130 #endif
69131 #ifdef WOLFSSL_KEIL
69132         "sbcs	r3, r3, r5\n\t"
69133 #elif defined(__clang__)
69134         "sbcs	r3, r5\n\t"
69135 #else
69136         "sbc	r3, r5\n\t"
69137 #endif
69138         "stm	%[a]!, {r2, r3}\n\t"
69139         "ldm	%[b]!, {r4, r5}\n\t"
69140         "ldr	r2, [%[a]]\n\t"
69141         "ldr	r3, [%[a], #4]\n\t"
69142 #ifdef WOLFSSL_KEIL
69143         "sbcs	r2, r2, r4\n\t"
69144 #elif defined(__clang__)
69145         "sbcs	r2, r4\n\t"
69146 #else
69147         "sbc	r2, r4\n\t"
69148 #endif
69149 #ifdef WOLFSSL_KEIL
69150         "sbcs	r3, r3, r5\n\t"
69151 #elif defined(__clang__)
69152         "sbcs	r3, r5\n\t"
69153 #else
69154         "sbc	r3, r5\n\t"
69155 #endif
69156         "stm	%[a]!, {r2, r3}\n\t"
69157         "ldm	%[b]!, {r4, r5}\n\t"
69158         "ldr	r2, [%[a]]\n\t"
69159         "ldr	r3, [%[a], #4]\n\t"
69160 #ifdef WOLFSSL_KEIL
69161         "sbcs	r2, r2, r4\n\t"
69162 #elif defined(__clang__)
69163         "sbcs	r2, r4\n\t"
69164 #else
69165         "sbc	r2, r4\n\t"
69166 #endif
69167 #ifdef WOLFSSL_KEIL
69168         "sbcs	r3, r3, r5\n\t"
69169 #elif defined(__clang__)
69170         "sbcs	r3, r5\n\t"
69171 #else
69172         "sbc	r3, r5\n\t"
69173 #endif
69174         "stm	%[a]!, {r2, r3}\n\t"
69175         "ldm	%[b]!, {r4, r5}\n\t"
69176         "ldr	r2, [%[a]]\n\t"
69177         "ldr	r3, [%[a], #4]\n\t"
69178 #ifdef WOLFSSL_KEIL
69179         "sbcs	r2, r2, r4\n\t"
69180 #elif defined(__clang__)
69181         "sbcs	r2, r4\n\t"
69182 #else
69183         "sbc	r2, r4\n\t"
69184 #endif
69185 #ifdef WOLFSSL_KEIL
69186         "sbcs	r3, r3, r5\n\t"
69187 #elif defined(__clang__)
69188         "sbcs	r3, r5\n\t"
69189 #else
69190         "sbc	r3, r5\n\t"
69191 #endif
69192         "stm	%[a]!, {r2, r3}\n\t"
69193         "ldm	%[b]!, {r4, r5}\n\t"
69194         "ldr	r2, [%[a]]\n\t"
69195         "ldr	r3, [%[a], #4]\n\t"
69196 #ifdef WOLFSSL_KEIL
69197         "sbcs	r2, r2, r4\n\t"
69198 #elif defined(__clang__)
69199         "sbcs	r2, r4\n\t"
69200 #else
69201         "sbc	r2, r4\n\t"
69202 #endif
69203 #ifdef WOLFSSL_KEIL
69204         "sbcs	r3, r3, r5\n\t"
69205 #elif defined(__clang__)
69206         "sbcs	r3, r5\n\t"
69207 #else
69208         "sbc	r3, r5\n\t"
69209 #endif
69210         "stm	%[a]!, {r2, r3}\n\t"
69211         "ldm	%[b]!, {r4, r5}\n\t"
69212         "ldr	r2, [%[a]]\n\t"
69213         "ldr	r3, [%[a], #4]\n\t"
69214 #ifdef WOLFSSL_KEIL
69215         "sbcs	r2, r2, r4\n\t"
69216 #elif defined(__clang__)
69217         "sbcs	r2, r4\n\t"
69218 #else
69219         "sbc	r2, r4\n\t"
69220 #endif
69221 #ifdef WOLFSSL_KEIL
69222         "sbcs	r3, r3, r5\n\t"
69223 #elif defined(__clang__)
69224         "sbcs	r3, r5\n\t"
69225 #else
69226         "sbc	r3, r5\n\t"
69227 #endif
69228         "stm	%[a]!, {r2, r3}\n\t"
69229         "ldm	%[b]!, {r4, r5}\n\t"
69230         "ldr	r2, [%[a]]\n\t"
69231         "ldr	r3, [%[a], #4]\n\t"
69232 #ifdef WOLFSSL_KEIL
69233         "sbcs	r2, r2, r4\n\t"
69234 #elif defined(__clang__)
69235         "sbcs	r2, r4\n\t"
69236 #else
69237         "sbc	r2, r4\n\t"
69238 #endif
69239 #ifdef WOLFSSL_KEIL
69240         "sbcs	r3, r3, r5\n\t"
69241 #elif defined(__clang__)
69242         "sbcs	r3, r5\n\t"
69243 #else
69244         "sbc	r3, r5\n\t"
69245 #endif
69246         "stm	%[a]!, {r2, r3}\n\t"
69247 #ifdef WOLFSSL_KEIL
69248         "sbcs	%[a], %[a], %[a]\n\t"
69249 #elif defined(__clang__)
69250         "sbcs	%[a], %[a]\n\t"
69251 #else
69252         "sbc	%[a], %[a]\n\t"
69253 #endif
69254         : [a] "+r" (a), [b] "+r" (b)
69255         :
69256         : "memory", "r2", "r3", "r4", "r5"
69257     );
69258     return (uint32_t)(size_t)a;
69259 }
69260 
69261 /* Add b to a into r. (r = a + b)
69262  *
69263  * r  A single precision integer.
69264  * a  A single precision integer.
69265  * b  A single precision integer.
69266  */
sp_3072_add_96(sp_digit * r,const sp_digit * a,const sp_digit * b)69267 SP_NOINLINE static sp_digit sp_3072_add_96(sp_digit* r, const sp_digit* a,
69268         const sp_digit* b)
69269 {
69270     __asm__ __volatile__ (
69271         "ldm	%[b]!, {r5, r6}\n\t"
69272         "ldm	%[a]!, {r3, r4}\n\t"
69273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
69274         "adds	r3, r3, r5\n\t"
69275 #else
69276         "add	r3, r3, r5\n\t"
69277 #endif
69278 #ifdef WOLFSSL_KEIL
69279         "adcs	r4, r4, r6\n\t"
69280 #elif defined(__clang__)
69281         "adcs	r4, r6\n\t"
69282 #else
69283         "adc	r4, r6\n\t"
69284 #endif
69285         "stm	%[r]!, {r3, r4}\n\t"
69286         "ldm	%[b]!, {r5, r6}\n\t"
69287         "ldm	%[a]!, {r3, r4}\n\t"
69288 #ifdef WOLFSSL_KEIL
69289         "adcs	r3, r3, r5\n\t"
69290 #elif defined(__clang__)
69291         "adcs	r3, r5\n\t"
69292 #else
69293         "adc	r3, r5\n\t"
69294 #endif
69295 #ifdef WOLFSSL_KEIL
69296         "adcs	r4, r4, r6\n\t"
69297 #elif defined(__clang__)
69298         "adcs	r4, r6\n\t"
69299 #else
69300         "adc	r4, r6\n\t"
69301 #endif
69302         "stm	%[r]!, {r3, r4}\n\t"
69303         "ldm	%[b]!, {r5, r6}\n\t"
69304         "ldm	%[a]!, {r3, r4}\n\t"
69305 #ifdef WOLFSSL_KEIL
69306         "adcs	r3, r3, r5\n\t"
69307 #elif defined(__clang__)
69308         "adcs	r3, r5\n\t"
69309 #else
69310         "adc	r3, r5\n\t"
69311 #endif
69312 #ifdef WOLFSSL_KEIL
69313         "adcs	r4, r4, r6\n\t"
69314 #elif defined(__clang__)
69315         "adcs	r4, r6\n\t"
69316 #else
69317         "adc	r4, r6\n\t"
69318 #endif
69319         "stm	%[r]!, {r3, r4}\n\t"
69320         "ldm	%[b]!, {r5, r6}\n\t"
69321         "ldm	%[a]!, {r3, r4}\n\t"
69322 #ifdef WOLFSSL_KEIL
69323         "adcs	r3, r3, r5\n\t"
69324 #elif defined(__clang__)
69325         "adcs	r3, r5\n\t"
69326 #else
69327         "adc	r3, r5\n\t"
69328 #endif
69329 #ifdef WOLFSSL_KEIL
69330         "adcs	r4, r4, r6\n\t"
69331 #elif defined(__clang__)
69332         "adcs	r4, r6\n\t"
69333 #else
69334         "adc	r4, r6\n\t"
69335 #endif
69336         "stm	%[r]!, {r3, r4}\n\t"
69337         "ldm	%[b]!, {r5, r6}\n\t"
69338         "ldm	%[a]!, {r3, r4}\n\t"
69339 #ifdef WOLFSSL_KEIL
69340         "adcs	r3, r3, r5\n\t"
69341 #elif defined(__clang__)
69342         "adcs	r3, r5\n\t"
69343 #else
69344         "adc	r3, r5\n\t"
69345 #endif
69346 #ifdef WOLFSSL_KEIL
69347         "adcs	r4, r4, r6\n\t"
69348 #elif defined(__clang__)
69349         "adcs	r4, r6\n\t"
69350 #else
69351         "adc	r4, r6\n\t"
69352 #endif
69353         "stm	%[r]!, {r3, r4}\n\t"
69354         "ldm	%[b]!, {r5, r6}\n\t"
69355         "ldm	%[a]!, {r3, r4}\n\t"
69356 #ifdef WOLFSSL_KEIL
69357         "adcs	r3, r3, r5\n\t"
69358 #elif defined(__clang__)
69359         "adcs	r3, r5\n\t"
69360 #else
69361         "adc	r3, r5\n\t"
69362 #endif
69363 #ifdef WOLFSSL_KEIL
69364         "adcs	r4, r4, r6\n\t"
69365 #elif defined(__clang__)
69366         "adcs	r4, r6\n\t"
69367 #else
69368         "adc	r4, r6\n\t"
69369 #endif
69370         "stm	%[r]!, {r3, r4}\n\t"
69371         "ldm	%[b]!, {r5, r6}\n\t"
69372         "ldm	%[a]!, {r3, r4}\n\t"
69373 #ifdef WOLFSSL_KEIL
69374         "adcs	r3, r3, r5\n\t"
69375 #elif defined(__clang__)
69376         "adcs	r3, r5\n\t"
69377 #else
69378         "adc	r3, r5\n\t"
69379 #endif
69380 #ifdef WOLFSSL_KEIL
69381         "adcs	r4, r4, r6\n\t"
69382 #elif defined(__clang__)
69383         "adcs	r4, r6\n\t"
69384 #else
69385         "adc	r4, r6\n\t"
69386 #endif
69387         "stm	%[r]!, {r3, r4}\n\t"
69388         "ldm	%[b]!, {r5, r6}\n\t"
69389         "ldm	%[a]!, {r3, r4}\n\t"
69390 #ifdef WOLFSSL_KEIL
69391         "adcs	r3, r3, r5\n\t"
69392 #elif defined(__clang__)
69393         "adcs	r3, r5\n\t"
69394 #else
69395         "adc	r3, r5\n\t"
69396 #endif
69397 #ifdef WOLFSSL_KEIL
69398         "adcs	r4, r4, r6\n\t"
69399 #elif defined(__clang__)
69400         "adcs	r4, r6\n\t"
69401 #else
69402         "adc	r4, r6\n\t"
69403 #endif
69404         "stm	%[r]!, {r3, r4}\n\t"
69405         "ldm	%[b]!, {r5, r6}\n\t"
69406         "ldm	%[a]!, {r3, r4}\n\t"
69407 #ifdef WOLFSSL_KEIL
69408         "adcs	r3, r3, r5\n\t"
69409 #elif defined(__clang__)
69410         "adcs	r3, r5\n\t"
69411 #else
69412         "adc	r3, r5\n\t"
69413 #endif
69414 #ifdef WOLFSSL_KEIL
69415         "adcs	r4, r4, r6\n\t"
69416 #elif defined(__clang__)
69417         "adcs	r4, r6\n\t"
69418 #else
69419         "adc	r4, r6\n\t"
69420 #endif
69421         "stm	%[r]!, {r3, r4}\n\t"
69422         "ldm	%[b]!, {r5, r6}\n\t"
69423         "ldm	%[a]!, {r3, r4}\n\t"
69424 #ifdef WOLFSSL_KEIL
69425         "adcs	r3, r3, r5\n\t"
69426 #elif defined(__clang__)
69427         "adcs	r3, r5\n\t"
69428 #else
69429         "adc	r3, r5\n\t"
69430 #endif
69431 #ifdef WOLFSSL_KEIL
69432         "adcs	r4, r4, r6\n\t"
69433 #elif defined(__clang__)
69434         "adcs	r4, r6\n\t"
69435 #else
69436         "adc	r4, r6\n\t"
69437 #endif
69438         "stm	%[r]!, {r3, r4}\n\t"
69439         "ldm	%[b]!, {r5, r6}\n\t"
69440         "ldm	%[a]!, {r3, r4}\n\t"
69441 #ifdef WOLFSSL_KEIL
69442         "adcs	r3, r3, r5\n\t"
69443 #elif defined(__clang__)
69444         "adcs	r3, r5\n\t"
69445 #else
69446         "adc	r3, r5\n\t"
69447 #endif
69448 #ifdef WOLFSSL_KEIL
69449         "adcs	r4, r4, r6\n\t"
69450 #elif defined(__clang__)
69451         "adcs	r4, r6\n\t"
69452 #else
69453         "adc	r4, r6\n\t"
69454 #endif
69455         "stm	%[r]!, {r3, r4}\n\t"
69456         "ldm	%[b]!, {r5, r6}\n\t"
69457         "ldm	%[a]!, {r3, r4}\n\t"
69458 #ifdef WOLFSSL_KEIL
69459         "adcs	r3, r3, r5\n\t"
69460 #elif defined(__clang__)
69461         "adcs	r3, r5\n\t"
69462 #else
69463         "adc	r3, r5\n\t"
69464 #endif
69465 #ifdef WOLFSSL_KEIL
69466         "adcs	r4, r4, r6\n\t"
69467 #elif defined(__clang__)
69468         "adcs	r4, r6\n\t"
69469 #else
69470         "adc	r4, r6\n\t"
69471 #endif
69472         "stm	%[r]!, {r3, r4}\n\t"
69473         "ldm	%[b]!, {r5, r6}\n\t"
69474         "ldm	%[a]!, {r3, r4}\n\t"
69475 #ifdef WOLFSSL_KEIL
69476         "adcs	r3, r3, r5\n\t"
69477 #elif defined(__clang__)
69478         "adcs	r3, r5\n\t"
69479 #else
69480         "adc	r3, r5\n\t"
69481 #endif
69482 #ifdef WOLFSSL_KEIL
69483         "adcs	r4, r4, r6\n\t"
69484 #elif defined(__clang__)
69485         "adcs	r4, r6\n\t"
69486 #else
69487         "adc	r4, r6\n\t"
69488 #endif
69489         "stm	%[r]!, {r3, r4}\n\t"
69490         "ldm	%[b]!, {r5, r6}\n\t"
69491         "ldm	%[a]!, {r3, r4}\n\t"
69492 #ifdef WOLFSSL_KEIL
69493         "adcs	r3, r3, r5\n\t"
69494 #elif defined(__clang__)
69495         "adcs	r3, r5\n\t"
69496 #else
69497         "adc	r3, r5\n\t"
69498 #endif
69499 #ifdef WOLFSSL_KEIL
69500         "adcs	r4, r4, r6\n\t"
69501 #elif defined(__clang__)
69502         "adcs	r4, r6\n\t"
69503 #else
69504         "adc	r4, r6\n\t"
69505 #endif
69506         "stm	%[r]!, {r3, r4}\n\t"
69507         "ldm	%[b]!, {r5, r6}\n\t"
69508         "ldm	%[a]!, {r3, r4}\n\t"
69509 #ifdef WOLFSSL_KEIL
69510         "adcs	r3, r3, r5\n\t"
69511 #elif defined(__clang__)
69512         "adcs	r3, r5\n\t"
69513 #else
69514         "adc	r3, r5\n\t"
69515 #endif
69516 #ifdef WOLFSSL_KEIL
69517         "adcs	r4, r4, r6\n\t"
69518 #elif defined(__clang__)
69519         "adcs	r4, r6\n\t"
69520 #else
69521         "adc	r4, r6\n\t"
69522 #endif
69523         "stm	%[r]!, {r3, r4}\n\t"
69524         "ldm	%[b]!, {r5, r6}\n\t"
69525         "ldm	%[a]!, {r3, r4}\n\t"
69526 #ifdef WOLFSSL_KEIL
69527         "adcs	r3, r3, r5\n\t"
69528 #elif defined(__clang__)
69529         "adcs	r3, r5\n\t"
69530 #else
69531         "adc	r3, r5\n\t"
69532 #endif
69533 #ifdef WOLFSSL_KEIL
69534         "adcs	r4, r4, r6\n\t"
69535 #elif defined(__clang__)
69536         "adcs	r4, r6\n\t"
69537 #else
69538         "adc	r4, r6\n\t"
69539 #endif
69540         "stm	%[r]!, {r3, r4}\n\t"
69541         "ldm	%[b]!, {r5, r6}\n\t"
69542         "ldm	%[a]!, {r3, r4}\n\t"
69543 #ifdef WOLFSSL_KEIL
69544         "adcs	r3, r3, r5\n\t"
69545 #elif defined(__clang__)
69546         "adcs	r3, r5\n\t"
69547 #else
69548         "adc	r3, r5\n\t"
69549 #endif
69550 #ifdef WOLFSSL_KEIL
69551         "adcs	r4, r4, r6\n\t"
69552 #elif defined(__clang__)
69553         "adcs	r4, r6\n\t"
69554 #else
69555         "adc	r4, r6\n\t"
69556 #endif
69557         "stm	%[r]!, {r3, r4}\n\t"
69558         "ldm	%[b]!, {r5, r6}\n\t"
69559         "ldm	%[a]!, {r3, r4}\n\t"
69560 #ifdef WOLFSSL_KEIL
69561         "adcs	r3, r3, r5\n\t"
69562 #elif defined(__clang__)
69563         "adcs	r3, r5\n\t"
69564 #else
69565         "adc	r3, r5\n\t"
69566 #endif
69567 #ifdef WOLFSSL_KEIL
69568         "adcs	r4, r4, r6\n\t"
69569 #elif defined(__clang__)
69570         "adcs	r4, r6\n\t"
69571 #else
69572         "adc	r4, r6\n\t"
69573 #endif
69574         "stm	%[r]!, {r3, r4}\n\t"
69575         "ldm	%[b]!, {r5, r6}\n\t"
69576         "ldm	%[a]!, {r3, r4}\n\t"
69577 #ifdef WOLFSSL_KEIL
69578         "adcs	r3, r3, r5\n\t"
69579 #elif defined(__clang__)
69580         "adcs	r3, r5\n\t"
69581 #else
69582         "adc	r3, r5\n\t"
69583 #endif
69584 #ifdef WOLFSSL_KEIL
69585         "adcs	r4, r4, r6\n\t"
69586 #elif defined(__clang__)
69587         "adcs	r4, r6\n\t"
69588 #else
69589         "adc	r4, r6\n\t"
69590 #endif
69591         "stm	%[r]!, {r3, r4}\n\t"
69592         "ldm	%[b]!, {r5, r6}\n\t"
69593         "ldm	%[a]!, {r3, r4}\n\t"
69594 #ifdef WOLFSSL_KEIL
69595         "adcs	r3, r3, r5\n\t"
69596 #elif defined(__clang__)
69597         "adcs	r3, r5\n\t"
69598 #else
69599         "adc	r3, r5\n\t"
69600 #endif
69601 #ifdef WOLFSSL_KEIL
69602         "adcs	r4, r4, r6\n\t"
69603 #elif defined(__clang__)
69604         "adcs	r4, r6\n\t"
69605 #else
69606         "adc	r4, r6\n\t"
69607 #endif
69608         "stm	%[r]!, {r3, r4}\n\t"
69609         "ldm	%[b]!, {r5, r6}\n\t"
69610         "ldm	%[a]!, {r3, r4}\n\t"
69611 #ifdef WOLFSSL_KEIL
69612         "adcs	r3, r3, r5\n\t"
69613 #elif defined(__clang__)
69614         "adcs	r3, r5\n\t"
69615 #else
69616         "adc	r3, r5\n\t"
69617 #endif
69618 #ifdef WOLFSSL_KEIL
69619         "adcs	r4, r4, r6\n\t"
69620 #elif defined(__clang__)
69621         "adcs	r4, r6\n\t"
69622 #else
69623         "adc	r4, r6\n\t"
69624 #endif
69625         "stm	%[r]!, {r3, r4}\n\t"
69626         "ldm	%[b]!, {r5, r6}\n\t"
69627         "ldm	%[a]!, {r3, r4}\n\t"
69628 #ifdef WOLFSSL_KEIL
69629         "adcs	r3, r3, r5\n\t"
69630 #elif defined(__clang__)
69631         "adcs	r3, r5\n\t"
69632 #else
69633         "adc	r3, r5\n\t"
69634 #endif
69635 #ifdef WOLFSSL_KEIL
69636         "adcs	r4, r4, r6\n\t"
69637 #elif defined(__clang__)
69638         "adcs	r4, r6\n\t"
69639 #else
69640         "adc	r4, r6\n\t"
69641 #endif
69642         "stm	%[r]!, {r3, r4}\n\t"
69643         "ldm	%[b]!, {r5, r6}\n\t"
69644         "ldm	%[a]!, {r3, r4}\n\t"
69645 #ifdef WOLFSSL_KEIL
69646         "adcs	r3, r3, r5\n\t"
69647 #elif defined(__clang__)
69648         "adcs	r3, r5\n\t"
69649 #else
69650         "adc	r3, r5\n\t"
69651 #endif
69652 #ifdef WOLFSSL_KEIL
69653         "adcs	r4, r4, r6\n\t"
69654 #elif defined(__clang__)
69655         "adcs	r4, r6\n\t"
69656 #else
69657         "adc	r4, r6\n\t"
69658 #endif
69659         "stm	%[r]!, {r3, r4}\n\t"
69660         "ldm	%[b]!, {r5, r6}\n\t"
69661         "ldm	%[a]!, {r3, r4}\n\t"
69662 #ifdef WOLFSSL_KEIL
69663         "adcs	r3, r3, r5\n\t"
69664 #elif defined(__clang__)
69665         "adcs	r3, r5\n\t"
69666 #else
69667         "adc	r3, r5\n\t"
69668 #endif
69669 #ifdef WOLFSSL_KEIL
69670         "adcs	r4, r4, r6\n\t"
69671 #elif defined(__clang__)
69672         "adcs	r4, r6\n\t"
69673 #else
69674         "adc	r4, r6\n\t"
69675 #endif
69676         "stm	%[r]!, {r3, r4}\n\t"
69677         "ldm	%[b]!, {r5, r6}\n\t"
69678         "ldm	%[a]!, {r3, r4}\n\t"
69679 #ifdef WOLFSSL_KEIL
69680         "adcs	r3, r3, r5\n\t"
69681 #elif defined(__clang__)
69682         "adcs	r3, r5\n\t"
69683 #else
69684         "adc	r3, r5\n\t"
69685 #endif
69686 #ifdef WOLFSSL_KEIL
69687         "adcs	r4, r4, r6\n\t"
69688 #elif defined(__clang__)
69689         "adcs	r4, r6\n\t"
69690 #else
69691         "adc	r4, r6\n\t"
69692 #endif
69693         "stm	%[r]!, {r3, r4}\n\t"
69694         "ldm	%[b]!, {r5, r6}\n\t"
69695         "ldm	%[a]!, {r3, r4}\n\t"
69696 #ifdef WOLFSSL_KEIL
69697         "adcs	r3, r3, r5\n\t"
69698 #elif defined(__clang__)
69699         "adcs	r3, r5\n\t"
69700 #else
69701         "adc	r3, r5\n\t"
69702 #endif
69703 #ifdef WOLFSSL_KEIL
69704         "adcs	r4, r4, r6\n\t"
69705 #elif defined(__clang__)
69706         "adcs	r4, r6\n\t"
69707 #else
69708         "adc	r4, r6\n\t"
69709 #endif
69710         "stm	%[r]!, {r3, r4}\n\t"
69711         "ldm	%[b]!, {r5, r6}\n\t"
69712         "ldm	%[a]!, {r3, r4}\n\t"
69713 #ifdef WOLFSSL_KEIL
69714         "adcs	r3, r3, r5\n\t"
69715 #elif defined(__clang__)
69716         "adcs	r3, r5\n\t"
69717 #else
69718         "adc	r3, r5\n\t"
69719 #endif
69720 #ifdef WOLFSSL_KEIL
69721         "adcs	r4, r4, r6\n\t"
69722 #elif defined(__clang__)
69723         "adcs	r4, r6\n\t"
69724 #else
69725         "adc	r4, r6\n\t"
69726 #endif
69727         "stm	%[r]!, {r3, r4}\n\t"
69728         "ldm	%[b]!, {r5, r6}\n\t"
69729         "ldm	%[a]!, {r3, r4}\n\t"
69730 #ifdef WOLFSSL_KEIL
69731         "adcs	r3, r3, r5\n\t"
69732 #elif defined(__clang__)
69733         "adcs	r3, r5\n\t"
69734 #else
69735         "adc	r3, r5\n\t"
69736 #endif
69737 #ifdef WOLFSSL_KEIL
69738         "adcs	r4, r4, r6\n\t"
69739 #elif defined(__clang__)
69740         "adcs	r4, r6\n\t"
69741 #else
69742         "adc	r4, r6\n\t"
69743 #endif
69744         "stm	%[r]!, {r3, r4}\n\t"
69745         "ldm	%[b]!, {r5, r6}\n\t"
69746         "ldm	%[a]!, {r3, r4}\n\t"
69747 #ifdef WOLFSSL_KEIL
69748         "adcs	r3, r3, r5\n\t"
69749 #elif defined(__clang__)
69750         "adcs	r3, r5\n\t"
69751 #else
69752         "adc	r3, r5\n\t"
69753 #endif
69754 #ifdef WOLFSSL_KEIL
69755         "adcs	r4, r4, r6\n\t"
69756 #elif defined(__clang__)
69757         "adcs	r4, r6\n\t"
69758 #else
69759         "adc	r4, r6\n\t"
69760 #endif
69761         "stm	%[r]!, {r3, r4}\n\t"
69762         "ldm	%[b]!, {r5, r6}\n\t"
69763         "ldm	%[a]!, {r3, r4}\n\t"
69764 #ifdef WOLFSSL_KEIL
69765         "adcs	r3, r3, r5\n\t"
69766 #elif defined(__clang__)
69767         "adcs	r3, r5\n\t"
69768 #else
69769         "adc	r3, r5\n\t"
69770 #endif
69771 #ifdef WOLFSSL_KEIL
69772         "adcs	r4, r4, r6\n\t"
69773 #elif defined(__clang__)
69774         "adcs	r4, r6\n\t"
69775 #else
69776         "adc	r4, r6\n\t"
69777 #endif
69778         "stm	%[r]!, {r3, r4}\n\t"
69779         "ldm	%[b]!, {r5, r6}\n\t"
69780         "ldm	%[a]!, {r3, r4}\n\t"
69781 #ifdef WOLFSSL_KEIL
69782         "adcs	r3, r3, r5\n\t"
69783 #elif defined(__clang__)
69784         "adcs	r3, r5\n\t"
69785 #else
69786         "adc	r3, r5\n\t"
69787 #endif
69788 #ifdef WOLFSSL_KEIL
69789         "adcs	r4, r4, r6\n\t"
69790 #elif defined(__clang__)
69791         "adcs	r4, r6\n\t"
69792 #else
69793         "adc	r4, r6\n\t"
69794 #endif
69795         "stm	%[r]!, {r3, r4}\n\t"
69796         "ldm	%[b]!, {r5, r6}\n\t"
69797         "ldm	%[a]!, {r3, r4}\n\t"
69798 #ifdef WOLFSSL_KEIL
69799         "adcs	r3, r3, r5\n\t"
69800 #elif defined(__clang__)
69801         "adcs	r3, r5\n\t"
69802 #else
69803         "adc	r3, r5\n\t"
69804 #endif
69805 #ifdef WOLFSSL_KEIL
69806         "adcs	r4, r4, r6\n\t"
69807 #elif defined(__clang__)
69808         "adcs	r4, r6\n\t"
69809 #else
69810         "adc	r4, r6\n\t"
69811 #endif
69812         "stm	%[r]!, {r3, r4}\n\t"
69813         "ldm	%[b]!, {r5, r6}\n\t"
69814         "ldm	%[a]!, {r3, r4}\n\t"
69815 #ifdef WOLFSSL_KEIL
69816         "adcs	r3, r3, r5\n\t"
69817 #elif defined(__clang__)
69818         "adcs	r3, r5\n\t"
69819 #else
69820         "adc	r3, r5\n\t"
69821 #endif
69822 #ifdef WOLFSSL_KEIL
69823         "adcs	r4, r4, r6\n\t"
69824 #elif defined(__clang__)
69825         "adcs	r4, r6\n\t"
69826 #else
69827         "adc	r4, r6\n\t"
69828 #endif
69829         "stm	%[r]!, {r3, r4}\n\t"
69830         "ldm	%[b]!, {r5, r6}\n\t"
69831         "ldm	%[a]!, {r3, r4}\n\t"
69832 #ifdef WOLFSSL_KEIL
69833         "adcs	r3, r3, r5\n\t"
69834 #elif defined(__clang__)
69835         "adcs	r3, r5\n\t"
69836 #else
69837         "adc	r3, r5\n\t"
69838 #endif
69839 #ifdef WOLFSSL_KEIL
69840         "adcs	r4, r4, r6\n\t"
69841 #elif defined(__clang__)
69842         "adcs	r4, r6\n\t"
69843 #else
69844         "adc	r4, r6\n\t"
69845 #endif
69846         "stm	%[r]!, {r3, r4}\n\t"
69847         "ldm	%[b]!, {r5, r6}\n\t"
69848         "ldm	%[a]!, {r3, r4}\n\t"
69849 #ifdef WOLFSSL_KEIL
69850         "adcs	r3, r3, r5\n\t"
69851 #elif defined(__clang__)
69852         "adcs	r3, r5\n\t"
69853 #else
69854         "adc	r3, r5\n\t"
69855 #endif
69856 #ifdef WOLFSSL_KEIL
69857         "adcs	r4, r4, r6\n\t"
69858 #elif defined(__clang__)
69859         "adcs	r4, r6\n\t"
69860 #else
69861         "adc	r4, r6\n\t"
69862 #endif
69863         "stm	%[r]!, {r3, r4}\n\t"
69864         "ldm	%[b]!, {r5, r6}\n\t"
69865         "ldm	%[a]!, {r3, r4}\n\t"
69866 #ifdef WOLFSSL_KEIL
69867         "adcs	r3, r3, r5\n\t"
69868 #elif defined(__clang__)
69869         "adcs	r3, r5\n\t"
69870 #else
69871         "adc	r3, r5\n\t"
69872 #endif
69873 #ifdef WOLFSSL_KEIL
69874         "adcs	r4, r4, r6\n\t"
69875 #elif defined(__clang__)
69876         "adcs	r4, r6\n\t"
69877 #else
69878         "adc	r4, r6\n\t"
69879 #endif
69880         "stm	%[r]!, {r3, r4}\n\t"
69881         "ldm	%[b]!, {r5, r6}\n\t"
69882         "ldm	%[a]!, {r3, r4}\n\t"
69883 #ifdef WOLFSSL_KEIL
69884         "adcs	r3, r3, r5\n\t"
69885 #elif defined(__clang__)
69886         "adcs	r3, r5\n\t"
69887 #else
69888         "adc	r3, r5\n\t"
69889 #endif
69890 #ifdef WOLFSSL_KEIL
69891         "adcs	r4, r4, r6\n\t"
69892 #elif defined(__clang__)
69893         "adcs	r4, r6\n\t"
69894 #else
69895         "adc	r4, r6\n\t"
69896 #endif
69897         "stm	%[r]!, {r3, r4}\n\t"
69898         "ldm	%[b]!, {r5, r6}\n\t"
69899         "ldm	%[a]!, {r3, r4}\n\t"
69900 #ifdef WOLFSSL_KEIL
69901         "adcs	r3, r3, r5\n\t"
69902 #elif defined(__clang__)
69903         "adcs	r3, r5\n\t"
69904 #else
69905         "adc	r3, r5\n\t"
69906 #endif
69907 #ifdef WOLFSSL_KEIL
69908         "adcs	r4, r4, r6\n\t"
69909 #elif defined(__clang__)
69910         "adcs	r4, r6\n\t"
69911 #else
69912         "adc	r4, r6\n\t"
69913 #endif
69914         "stm	%[r]!, {r3, r4}\n\t"
69915         "ldm	%[b]!, {r5, r6}\n\t"
69916         "ldm	%[a]!, {r3, r4}\n\t"
69917 #ifdef WOLFSSL_KEIL
69918         "adcs	r3, r3, r5\n\t"
69919 #elif defined(__clang__)
69920         "adcs	r3, r5\n\t"
69921 #else
69922         "adc	r3, r5\n\t"
69923 #endif
69924 #ifdef WOLFSSL_KEIL
69925         "adcs	r4, r4, r6\n\t"
69926 #elif defined(__clang__)
69927         "adcs	r4, r6\n\t"
69928 #else
69929         "adc	r4, r6\n\t"
69930 #endif
69931         "stm	%[r]!, {r3, r4}\n\t"
69932         "ldm	%[b]!, {r5, r6}\n\t"
69933         "ldm	%[a]!, {r3, r4}\n\t"
69934 #ifdef WOLFSSL_KEIL
69935         "adcs	r3, r3, r5\n\t"
69936 #elif defined(__clang__)
69937         "adcs	r3, r5\n\t"
69938 #else
69939         "adc	r3, r5\n\t"
69940 #endif
69941 #ifdef WOLFSSL_KEIL
69942         "adcs	r4, r4, r6\n\t"
69943 #elif defined(__clang__)
69944         "adcs	r4, r6\n\t"
69945 #else
69946         "adc	r4, r6\n\t"
69947 #endif
69948         "stm	%[r]!, {r3, r4}\n\t"
69949         "ldm	%[b]!, {r5, r6}\n\t"
69950         "ldm	%[a]!, {r3, r4}\n\t"
69951 #ifdef WOLFSSL_KEIL
69952         "adcs	r3, r3, r5\n\t"
69953 #elif defined(__clang__)
69954         "adcs	r3, r5\n\t"
69955 #else
69956         "adc	r3, r5\n\t"
69957 #endif
69958 #ifdef WOLFSSL_KEIL
69959         "adcs	r4, r4, r6\n\t"
69960 #elif defined(__clang__)
69961         "adcs	r4, r6\n\t"
69962 #else
69963         "adc	r4, r6\n\t"
69964 #endif
69965         "stm	%[r]!, {r3, r4}\n\t"
69966         "ldm	%[b]!, {r5, r6}\n\t"
69967         "ldm	%[a]!, {r3, r4}\n\t"
69968 #ifdef WOLFSSL_KEIL
69969         "adcs	r3, r3, r5\n\t"
69970 #elif defined(__clang__)
69971         "adcs	r3, r5\n\t"
69972 #else
69973         "adc	r3, r5\n\t"
69974 #endif
69975 #ifdef WOLFSSL_KEIL
69976         "adcs	r4, r4, r6\n\t"
69977 #elif defined(__clang__)
69978         "adcs	r4, r6\n\t"
69979 #else
69980         "adc	r4, r6\n\t"
69981 #endif
69982         "stm	%[r]!, {r3, r4}\n\t"
69983         "ldm	%[b]!, {r5, r6}\n\t"
69984         "ldm	%[a]!, {r3, r4}\n\t"
69985 #ifdef WOLFSSL_KEIL
69986         "adcs	r3, r3, r5\n\t"
69987 #elif defined(__clang__)
69988         "adcs	r3, r5\n\t"
69989 #else
69990         "adc	r3, r5\n\t"
69991 #endif
69992 #ifdef WOLFSSL_KEIL
69993         "adcs	r4, r4, r6\n\t"
69994 #elif defined(__clang__)
69995         "adcs	r4, r6\n\t"
69996 #else
69997         "adc	r4, r6\n\t"
69998 #endif
69999         "stm	%[r]!, {r3, r4}\n\t"
70000         "ldm	%[b]!, {r5, r6}\n\t"
70001         "ldm	%[a]!, {r3, r4}\n\t"
70002 #ifdef WOLFSSL_KEIL
70003         "adcs	r3, r3, r5\n\t"
70004 #elif defined(__clang__)
70005         "adcs	r3, r5\n\t"
70006 #else
70007         "adc	r3, r5\n\t"
70008 #endif
70009 #ifdef WOLFSSL_KEIL
70010         "adcs	r4, r4, r6\n\t"
70011 #elif defined(__clang__)
70012         "adcs	r4, r6\n\t"
70013 #else
70014         "adc	r4, r6\n\t"
70015 #endif
70016         "stm	%[r]!, {r3, r4}\n\t"
70017         "ldm	%[b]!, {r5, r6}\n\t"
70018         "ldm	%[a]!, {r3, r4}\n\t"
70019 #ifdef WOLFSSL_KEIL
70020         "adcs	r3, r3, r5\n\t"
70021 #elif defined(__clang__)
70022         "adcs	r3, r5\n\t"
70023 #else
70024         "adc	r3, r5\n\t"
70025 #endif
70026 #ifdef WOLFSSL_KEIL
70027         "adcs	r4, r4, r6\n\t"
70028 #elif defined(__clang__)
70029         "adcs	r4, r6\n\t"
70030 #else
70031         "adc	r4, r6\n\t"
70032 #endif
70033         "stm	%[r]!, {r3, r4}\n\t"
70034         "ldm	%[b]!, {r5, r6}\n\t"
70035         "ldm	%[a]!, {r3, r4}\n\t"
70036 #ifdef WOLFSSL_KEIL
70037         "adcs	r3, r3, r5\n\t"
70038 #elif defined(__clang__)
70039         "adcs	r3, r5\n\t"
70040 #else
70041         "adc	r3, r5\n\t"
70042 #endif
70043 #ifdef WOLFSSL_KEIL
70044         "adcs	r4, r4, r6\n\t"
70045 #elif defined(__clang__)
70046         "adcs	r4, r6\n\t"
70047 #else
70048         "adc	r4, r6\n\t"
70049 #endif
70050         "stm	%[r]!, {r3, r4}\n\t"
70051         "ldm	%[b]!, {r5, r6}\n\t"
70052         "ldm	%[a]!, {r3, r4}\n\t"
70053 #ifdef WOLFSSL_KEIL
70054         "adcs	r3, r3, r5\n\t"
70055 #elif defined(__clang__)
70056         "adcs	r3, r5\n\t"
70057 #else
70058         "adc	r3, r5\n\t"
70059 #endif
70060 #ifdef WOLFSSL_KEIL
70061         "adcs	r4, r4, r6\n\t"
70062 #elif defined(__clang__)
70063         "adcs	r4, r6\n\t"
70064 #else
70065         "adc	r4, r6\n\t"
70066 #endif
70067         "stm	%[r]!, {r3, r4}\n\t"
70068         "ldm	%[b]!, {r5, r6}\n\t"
70069         "ldm	%[a]!, {r3, r4}\n\t"
70070 #ifdef WOLFSSL_KEIL
70071         "adcs	r3, r3, r5\n\t"
70072 #elif defined(__clang__)
70073         "adcs	r3, r5\n\t"
70074 #else
70075         "adc	r3, r5\n\t"
70076 #endif
70077 #ifdef WOLFSSL_KEIL
70078         "adcs	r4, r4, r6\n\t"
70079 #elif defined(__clang__)
70080         "adcs	r4, r6\n\t"
70081 #else
70082         "adc	r4, r6\n\t"
70083 #endif
70084         "stm	%[r]!, {r3, r4}\n\t"
70085         "movs	%[r], #0\n\t"
70086 #ifdef WOLFSSL_KEIL
70087         "adcs	%[r], %[r], %[r]\n\t"
70088 #elif defined(__clang__)
70089         "adcs	%[r], %[r]\n\t"
70090 #else
70091         "adc	%[r], %[r]\n\t"
70092 #endif
70093         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
70094         :
70095         : "memory", "r3", "r4", "r5", "r6"
70096     );
70097     return (uint32_t)(size_t)r;
70098 }
70099 
70100 /* AND m into each word of a and store in r.
70101  *
70102  * r  A single precision integer.
70103  * a  A single precision integer.
70104  * m  Mask to AND against each digit.
70105  */
sp_3072_mask_48(sp_digit * r,const sp_digit * a,sp_digit m)70106 static void sp_3072_mask_48(sp_digit* r, const sp_digit* a, sp_digit m)
70107 {
70108 #ifdef WOLFSSL_SP_SMALL
70109     int i;
70110 
70111     for (i=0; i<48; i++) {
70112         r[i] = a[i] & m;
70113     }
70114 #else
70115     int i;
70116 
70117     for (i = 0; i < 48; i += 8) {
70118         r[i+0] = a[i+0] & m;
70119         r[i+1] = a[i+1] & m;
70120         r[i+2] = a[i+2] & m;
70121         r[i+3] = a[i+3] & m;
70122         r[i+4] = a[i+4] & m;
70123         r[i+5] = a[i+5] & m;
70124         r[i+6] = a[i+6] & m;
70125         r[i+7] = a[i+7] & m;
70126     }
70127 #endif
70128 }
70129 
70130 /* Multiply a and b into r. (r = a * b)
70131  *
70132  * r  A single precision integer.
70133  * a  A single precision integer.
70134  * b  A single precision integer.
70135  */
sp_3072_mul_96(sp_digit * r,const sp_digit * a,const sp_digit * b)70136 SP_NOINLINE static void sp_3072_mul_96(sp_digit* r, const sp_digit* a,
70137         const sp_digit* b)
70138 {
70139     sp_digit* z0 = r;
70140     sp_digit z1[96];
70141     sp_digit a1[48];
70142     sp_digit b1[48];
70143     sp_digit z2[96];
70144     sp_digit u;
70145     sp_digit ca;
70146     sp_digit cb;
70147 
70148     ca = sp_3072_add_48(a1, a, &a[48]);
70149     cb = sp_3072_add_48(b1, b, &b[48]);
70150     u  = ca & cb;
70151     sp_3072_mul_48(z1, a1, b1);
70152     sp_3072_mul_48(z2, &a[48], &b[48]);
70153     sp_3072_mul_48(z0, a, b);
70154     sp_3072_mask_48(r + 96, a1, 0 - cb);
70155     sp_3072_mask_48(b1, b1, 0 - ca);
70156     u += sp_3072_add_48(r + 96, r + 96, b1);
70157     u += sp_3072_sub_in_place_96(z1, z2);
70158     u += sp_3072_sub_in_place_96(z1, z0);
70159     u += sp_3072_add_96(r + 48, r + 48, z1);
70160     u += sp_3072_add_48(r + 96, r + 96, z2);
70161     (void)sp_3072_add_to_word_48(r + 144, u, z2 + 48);
70162 }
70163 
70164 /* Double a into r. (r = a + a)
70165  *
70166  * r  A single precision integer.
70167  * a  A single precision integer.
70168  */
sp_3072_dbl_48(sp_digit * r,const sp_digit * a)70169 SP_NOINLINE static sp_digit sp_3072_dbl_48(sp_digit* r, const sp_digit* a)
70170 {
70171     __asm__ __volatile__ (
70172         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
70173 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70174         "adds	r2, r2, r2\n\t"
70175 #else
70176         "add	r2, r2, r2\n\t"
70177 #endif
70178 #ifdef WOLFSSL_KEIL
70179         "adcs	r3, r3, r3\n\t"
70180 #elif defined(__clang__)
70181         "adcs	r3, r3\n\t"
70182 #else
70183         "adc	r3, r3\n\t"
70184 #endif
70185 #ifdef WOLFSSL_KEIL
70186         "adcs	r4, r4, r4\n\t"
70187 #elif defined(__clang__)
70188         "adcs	r4, r4\n\t"
70189 #else
70190         "adc	r4, r4\n\t"
70191 #endif
70192 #ifdef WOLFSSL_KEIL
70193         "adcs	r5, r5, r5\n\t"
70194 #elif defined(__clang__)
70195         "adcs	r5, r5\n\t"
70196 #else
70197         "adc	r5, r5\n\t"
70198 #endif
70199         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
70200         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
70201 #ifdef WOLFSSL_KEIL
70202         "adcs	r2, r2, r2\n\t"
70203 #elif defined(__clang__)
70204         "adcs	r2, r2\n\t"
70205 #else
70206         "adc	r2, r2\n\t"
70207 #endif
70208 #ifdef WOLFSSL_KEIL
70209         "adcs	r3, r3, r3\n\t"
70210 #elif defined(__clang__)
70211         "adcs	r3, r3\n\t"
70212 #else
70213         "adc	r3, r3\n\t"
70214 #endif
70215 #ifdef WOLFSSL_KEIL
70216         "adcs	r4, r4, r4\n\t"
70217 #elif defined(__clang__)
70218         "adcs	r4, r4\n\t"
70219 #else
70220         "adc	r4, r4\n\t"
70221 #endif
70222 #ifdef WOLFSSL_KEIL
70223         "adcs	r5, r5, r5\n\t"
70224 #elif defined(__clang__)
70225         "adcs	r5, r5\n\t"
70226 #else
70227         "adc	r5, r5\n\t"
70228 #endif
70229         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
70230         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
70231 #ifdef WOLFSSL_KEIL
70232         "adcs	r2, r2, r2\n\t"
70233 #elif defined(__clang__)
70234         "adcs	r2, r2\n\t"
70235 #else
70236         "adc	r2, r2\n\t"
70237 #endif
70238 #ifdef WOLFSSL_KEIL
70239         "adcs	r3, r3, r3\n\t"
70240 #elif defined(__clang__)
70241         "adcs	r3, r3\n\t"
70242 #else
70243         "adc	r3, r3\n\t"
70244 #endif
70245 #ifdef WOLFSSL_KEIL
70246         "adcs	r4, r4, r4\n\t"
70247 #elif defined(__clang__)
70248         "adcs	r4, r4\n\t"
70249 #else
70250         "adc	r4, r4\n\t"
70251 #endif
70252 #ifdef WOLFSSL_KEIL
70253         "adcs	r5, r5, r5\n\t"
70254 #elif defined(__clang__)
70255         "adcs	r5, r5\n\t"
70256 #else
70257         "adc	r5, r5\n\t"
70258 #endif
70259         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
70260         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
70261 #ifdef WOLFSSL_KEIL
70262         "adcs	r2, r2, r2\n\t"
70263 #elif defined(__clang__)
70264         "adcs	r2, r2\n\t"
70265 #else
70266         "adc	r2, r2\n\t"
70267 #endif
70268 #ifdef WOLFSSL_KEIL
70269         "adcs	r3, r3, r3\n\t"
70270 #elif defined(__clang__)
70271         "adcs	r3, r3\n\t"
70272 #else
70273         "adc	r3, r3\n\t"
70274 #endif
70275 #ifdef WOLFSSL_KEIL
70276         "adcs	r4, r4, r4\n\t"
70277 #elif defined(__clang__)
70278         "adcs	r4, r4\n\t"
70279 #else
70280         "adc	r4, r4\n\t"
70281 #endif
70282 #ifdef WOLFSSL_KEIL
70283         "adcs	r5, r5, r5\n\t"
70284 #elif defined(__clang__)
70285         "adcs	r5, r5\n\t"
70286 #else
70287         "adc	r5, r5\n\t"
70288 #endif
70289         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
70290         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
70291 #ifdef WOLFSSL_KEIL
70292         "adcs	r2, r2, r2\n\t"
70293 #elif defined(__clang__)
70294         "adcs	r2, r2\n\t"
70295 #else
70296         "adc	r2, r2\n\t"
70297 #endif
70298 #ifdef WOLFSSL_KEIL
70299         "adcs	r3, r3, r3\n\t"
70300 #elif defined(__clang__)
70301         "adcs	r3, r3\n\t"
70302 #else
70303         "adc	r3, r3\n\t"
70304 #endif
70305 #ifdef WOLFSSL_KEIL
70306         "adcs	r4, r4, r4\n\t"
70307 #elif defined(__clang__)
70308         "adcs	r4, r4\n\t"
70309 #else
70310         "adc	r4, r4\n\t"
70311 #endif
70312 #ifdef WOLFSSL_KEIL
70313         "adcs	r5, r5, r5\n\t"
70314 #elif defined(__clang__)
70315         "adcs	r5, r5\n\t"
70316 #else
70317         "adc	r5, r5\n\t"
70318 #endif
70319         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
70320         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
70321 #ifdef WOLFSSL_KEIL
70322         "adcs	r2, r2, r2\n\t"
70323 #elif defined(__clang__)
70324         "adcs	r2, r2\n\t"
70325 #else
70326         "adc	r2, r2\n\t"
70327 #endif
70328 #ifdef WOLFSSL_KEIL
70329         "adcs	r3, r3, r3\n\t"
70330 #elif defined(__clang__)
70331         "adcs	r3, r3\n\t"
70332 #else
70333         "adc	r3, r3\n\t"
70334 #endif
70335 #ifdef WOLFSSL_KEIL
70336         "adcs	r4, r4, r4\n\t"
70337 #elif defined(__clang__)
70338         "adcs	r4, r4\n\t"
70339 #else
70340         "adc	r4, r4\n\t"
70341 #endif
70342 #ifdef WOLFSSL_KEIL
70343         "adcs	r5, r5, r5\n\t"
70344 #elif defined(__clang__)
70345         "adcs	r5, r5\n\t"
70346 #else
70347         "adc	r5, r5\n\t"
70348 #endif
70349         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
70350         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
70351 #ifdef WOLFSSL_KEIL
70352         "adcs	r2, r2, r2\n\t"
70353 #elif defined(__clang__)
70354         "adcs	r2, r2\n\t"
70355 #else
70356         "adc	r2, r2\n\t"
70357 #endif
70358 #ifdef WOLFSSL_KEIL
70359         "adcs	r3, r3, r3\n\t"
70360 #elif defined(__clang__)
70361         "adcs	r3, r3\n\t"
70362 #else
70363         "adc	r3, r3\n\t"
70364 #endif
70365 #ifdef WOLFSSL_KEIL
70366         "adcs	r4, r4, r4\n\t"
70367 #elif defined(__clang__)
70368         "adcs	r4, r4\n\t"
70369 #else
70370         "adc	r4, r4\n\t"
70371 #endif
70372 #ifdef WOLFSSL_KEIL
70373         "adcs	r5, r5, r5\n\t"
70374 #elif defined(__clang__)
70375         "adcs	r5, r5\n\t"
70376 #else
70377         "adc	r5, r5\n\t"
70378 #endif
70379         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
70380         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
70381 #ifdef WOLFSSL_KEIL
70382         "adcs	r2, r2, r2\n\t"
70383 #elif defined(__clang__)
70384         "adcs	r2, r2\n\t"
70385 #else
70386         "adc	r2, r2\n\t"
70387 #endif
70388 #ifdef WOLFSSL_KEIL
70389         "adcs	r3, r3, r3\n\t"
70390 #elif defined(__clang__)
70391         "adcs	r3, r3\n\t"
70392 #else
70393         "adc	r3, r3\n\t"
70394 #endif
70395 #ifdef WOLFSSL_KEIL
70396         "adcs	r4, r4, r4\n\t"
70397 #elif defined(__clang__)
70398         "adcs	r4, r4\n\t"
70399 #else
70400         "adc	r4, r4\n\t"
70401 #endif
70402 #ifdef WOLFSSL_KEIL
70403         "adcs	r5, r5, r5\n\t"
70404 #elif defined(__clang__)
70405         "adcs	r5, r5\n\t"
70406 #else
70407         "adc	r5, r5\n\t"
70408 #endif
70409         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
70410         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
70411 #ifdef WOLFSSL_KEIL
70412         "adcs	r2, r2, r2\n\t"
70413 #elif defined(__clang__)
70414         "adcs	r2, r2\n\t"
70415 #else
70416         "adc	r2, r2\n\t"
70417 #endif
70418 #ifdef WOLFSSL_KEIL
70419         "adcs	r3, r3, r3\n\t"
70420 #elif defined(__clang__)
70421         "adcs	r3, r3\n\t"
70422 #else
70423         "adc	r3, r3\n\t"
70424 #endif
70425 #ifdef WOLFSSL_KEIL
70426         "adcs	r4, r4, r4\n\t"
70427 #elif defined(__clang__)
70428         "adcs	r4, r4\n\t"
70429 #else
70430         "adc	r4, r4\n\t"
70431 #endif
70432 #ifdef WOLFSSL_KEIL
70433         "adcs	r5, r5, r5\n\t"
70434 #elif defined(__clang__)
70435         "adcs	r5, r5\n\t"
70436 #else
70437         "adc	r5, r5\n\t"
70438 #endif
70439         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
70440         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
70441 #ifdef WOLFSSL_KEIL
70442         "adcs	r2, r2, r2\n\t"
70443 #elif defined(__clang__)
70444         "adcs	r2, r2\n\t"
70445 #else
70446         "adc	r2, r2\n\t"
70447 #endif
70448 #ifdef WOLFSSL_KEIL
70449         "adcs	r3, r3, r3\n\t"
70450 #elif defined(__clang__)
70451         "adcs	r3, r3\n\t"
70452 #else
70453         "adc	r3, r3\n\t"
70454 #endif
70455 #ifdef WOLFSSL_KEIL
70456         "adcs	r4, r4, r4\n\t"
70457 #elif defined(__clang__)
70458         "adcs	r4, r4\n\t"
70459 #else
70460         "adc	r4, r4\n\t"
70461 #endif
70462 #ifdef WOLFSSL_KEIL
70463         "adcs	r5, r5, r5\n\t"
70464 #elif defined(__clang__)
70465         "adcs	r5, r5\n\t"
70466 #else
70467         "adc	r5, r5\n\t"
70468 #endif
70469         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
70470         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
70471 #ifdef WOLFSSL_KEIL
70472         "adcs	r2, r2, r2\n\t"
70473 #elif defined(__clang__)
70474         "adcs	r2, r2\n\t"
70475 #else
70476         "adc	r2, r2\n\t"
70477 #endif
70478 #ifdef WOLFSSL_KEIL
70479         "adcs	r3, r3, r3\n\t"
70480 #elif defined(__clang__)
70481         "adcs	r3, r3\n\t"
70482 #else
70483         "adc	r3, r3\n\t"
70484 #endif
70485 #ifdef WOLFSSL_KEIL
70486         "adcs	r4, r4, r4\n\t"
70487 #elif defined(__clang__)
70488         "adcs	r4, r4\n\t"
70489 #else
70490         "adc	r4, r4\n\t"
70491 #endif
70492 #ifdef WOLFSSL_KEIL
70493         "adcs	r5, r5, r5\n\t"
70494 #elif defined(__clang__)
70495         "adcs	r5, r5\n\t"
70496 #else
70497         "adc	r5, r5\n\t"
70498 #endif
70499         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
70500         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
70501 #ifdef WOLFSSL_KEIL
70502         "adcs	r2, r2, r2\n\t"
70503 #elif defined(__clang__)
70504         "adcs	r2, r2\n\t"
70505 #else
70506         "adc	r2, r2\n\t"
70507 #endif
70508 #ifdef WOLFSSL_KEIL
70509         "adcs	r3, r3, r3\n\t"
70510 #elif defined(__clang__)
70511         "adcs	r3, r3\n\t"
70512 #else
70513         "adc	r3, r3\n\t"
70514 #endif
70515 #ifdef WOLFSSL_KEIL
70516         "adcs	r4, r4, r4\n\t"
70517 #elif defined(__clang__)
70518         "adcs	r4, r4\n\t"
70519 #else
70520         "adc	r4, r4\n\t"
70521 #endif
70522 #ifdef WOLFSSL_KEIL
70523         "adcs	r5, r5, r5\n\t"
70524 #elif defined(__clang__)
70525         "adcs	r5, r5\n\t"
70526 #else
70527         "adc	r5, r5\n\t"
70528 #endif
70529         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
70530         "movs	%[r], #0\n\t"
70531 #ifdef WOLFSSL_KEIL
70532         "adcs	%[r], %[r], %[r]\n\t"
70533 #elif defined(__clang__)
70534         "adcs	%[r], %[r]\n\t"
70535 #else
70536         "adc	%[r], %[r]\n\t"
70537 #endif
70538         : [r] "+r" (r), [a] "+r" (a)
70539         :
70540         : "memory", "r2", "r3", "r4", "r5"
70541     );
70542     return (uint32_t)(size_t)r;
70543 }
70544 
70545 /* Square a and put result in r. (r = a * a)
70546  *
70547  * r  A single precision integer.
70548  * a  A single precision integer.
70549  */
sp_3072_sqr_96(sp_digit * r,const sp_digit * a)70550 SP_NOINLINE static void sp_3072_sqr_96(sp_digit* r, const sp_digit* a)
70551 {
70552     sp_digit* z0 = r;
70553     sp_digit z2[96];
70554     sp_digit z1[96];
70555     sp_digit a1[48];
70556     sp_digit u;
70557 
70558     u = sp_3072_add_48(a1, a, &a[48]);
70559     sp_3072_sqr_48(z1, a1);
70560     sp_3072_sqr_48(z2, &a[48]);
70561     sp_3072_sqr_48(z0, a);
70562     sp_3072_mask_48(r + 96, a1, 0 - u);
70563     u += sp_3072_dbl_48(r + 96, r + 96);
70564     u += sp_3072_sub_in_place_96(z1, z2);
70565     u += sp_3072_sub_in_place_96(z1, z0);
70566     u += sp_3072_add_96(r + 48, r + 48, z1);
70567     u += sp_3072_add_48(r + 96, r + 96, z2);
70568     (void)sp_3072_add_to_word_48(r + 144, u, z2 + 48);
70569 }
70570 
70571 #endif /* !WOLFSSL_SP_SMALL */
70572 #ifdef WOLFSSL_SP_SMALL
70573 /* Add b to a into r. (r = a + b)
70574  *
70575  * r  A single precision integer.
70576  * a  A single precision integer.
70577  * b  A single precision integer.
70578  */
sp_3072_add_96(sp_digit * r,const sp_digit * a,const sp_digit * b)70579 SP_NOINLINE static sp_digit sp_3072_add_96(sp_digit* r, const sp_digit* a,
70580         const sp_digit* b)
70581 {
70582     __asm__ __volatile__ (
70583         "movs	r6, %[a]\n\t"
70584         "movs	r7, #0\n\t"
70585         "movs	r3, #0\n\t"
70586         "movs	r4, #0xff\n\t"
70587 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70588         "adds	r4, r4, #0x81\n\t"
70589 #else
70590         "add	r4, r4, #0x81\n\t"
70591 #endif
70592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70593         "subs	r7, r7, #1\n\t"
70594 #else
70595         "sub	r7, r7, #1\n\t"
70596 #endif
70597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70598         "adds	r6, r6, r4\n\t"
70599 #else
70600         "add	r6, r6, r4\n\t"
70601 #endif
70602         "\n"
70603     "L_sp_3072_add_96_word_%=:\n\t"
70604 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70605         "adds	r3, r3, r7\n\t"
70606 #else
70607         "add	r3, r3, r7\n\t"
70608 #endif
70609         "ldr	r4, [%[a]]\n\t"
70610         "ldr	r5, [%[b]]\n\t"
70611 #ifdef WOLFSSL_KEIL
70612         "adcs	r4, r4, r5\n\t"
70613 #elif defined(__clang__)
70614         "adcs	r4, r5\n\t"
70615 #else
70616         "adc	r4, r5\n\t"
70617 #endif
70618         "str	r4, [%[r]]\n\t"
70619         "movs	r3, #0\n\t"
70620 #ifdef WOLFSSL_KEIL
70621         "adcs	r3, r3, r3\n\t"
70622 #elif defined(__clang__)
70623         "adcs	r3, r3\n\t"
70624 #else
70625         "adc	r3, r3\n\t"
70626 #endif
70627 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70628         "adds	%[a], %[a], #4\n\t"
70629 #else
70630         "add	%[a], %[a], #4\n\t"
70631 #endif
70632 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70633         "adds	%[b], %[b], #4\n\t"
70634 #else
70635         "add	%[b], %[b], #4\n\t"
70636 #endif
70637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70638         "adds	%[r], %[r], #4\n\t"
70639 #else
70640         "add	%[r], %[r], #4\n\t"
70641 #endif
70642         "cmp	%[a], r6\n\t"
70643         "bne	L_sp_3072_add_96_word_%=\n\t"
70644         "movs	%[r], r3\n\t"
70645         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
70646         :
70647         : "memory", "r3", "r4", "r5", "r6", "r7"
70648     );
70649     return (uint32_t)(size_t)r;
70650 }
70651 
70652 #endif /* WOLFSSL_SP_SMALL */
70653 #ifdef WOLFSSL_SP_SMALL
70654 /* Sub b from a into a. (a -= b)
70655  *
70656  * a  A single precision integer.
70657  * b  A single precision integer.
70658  */
sp_3072_sub_in_place_96(sp_digit * a,const sp_digit * b)70659 SP_NOINLINE static sp_digit sp_3072_sub_in_place_96(sp_digit* a,
70660         const sp_digit* b)
70661 {
70662     __asm__ __volatile__ (
70663         "movs	r7, %[a]\n\t"
70664         "movs	r2, #0\n\t"
70665         "movs	r5, #0xff\n\t"
70666 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70667         "adds	r5, r5, #0x81\n\t"
70668 #else
70669         "add	r5, r5, #0x81\n\t"
70670 #endif
70671 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70672         "adds	r7, r7, r5\n\t"
70673 #else
70674         "add	r7, r7, r5\n\t"
70675 #endif
70676         "\n"
70677     "L_sp_3072_sub_in_place_96_words_%=:\n\t"
70678         "movs	r5, #0\n\t"
70679 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70680         "subs	r5, r5, r2\n\t"
70681 #else
70682         "sub	r5, r5, r2\n\t"
70683 #endif
70684         "ldr	r3, [%[a]]\n\t"
70685         "ldr	r4, [%[a], #4]\n\t"
70686         "ldr	r5, [%[b]]\n\t"
70687         "ldr	r6, [%[b], #4]\n\t"
70688 #ifdef WOLFSSL_KEIL
70689         "sbcs	r3, r3, r5\n\t"
70690 #elif defined(__clang__)
70691         "sbcs	r3, r5\n\t"
70692 #else
70693         "sbc	r3, r5\n\t"
70694 #endif
70695 #ifdef WOLFSSL_KEIL
70696         "sbcs	r4, r4, r6\n\t"
70697 #elif defined(__clang__)
70698         "sbcs	r4, r6\n\t"
70699 #else
70700         "sbc	r4, r6\n\t"
70701 #endif
70702         "str	r3, [%[a]]\n\t"
70703         "str	r4, [%[a], #4]\n\t"
70704 #ifdef WOLFSSL_KEIL
70705         "sbcs	r2, r2, r2\n\t"
70706 #elif defined(__clang__)
70707         "sbcs	r2, r2\n\t"
70708 #else
70709         "sbc	r2, r2\n\t"
70710 #endif
70711 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70712         "adds	%[a], %[a], #8\n\t"
70713 #else
70714         "add	%[a], %[a], #8\n\t"
70715 #endif
70716 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70717         "adds	%[b], %[b], #8\n\t"
70718 #else
70719         "add	%[b], %[b], #8\n\t"
70720 #endif
70721         "cmp	%[a], r7\n\t"
70722         "bne	L_sp_3072_sub_in_place_96_words_%=\n\t"
70723         "movs	%[a], r2\n\t"
70724         : [a] "+r" (a), [b] "+r" (b)
70725         :
70726         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
70727     );
70728     return (uint32_t)(size_t)a;
70729 }
70730 
70731 #endif /* WOLFSSL_SP_SMALL */
70732 #ifdef WOLFSSL_SP_SMALL
70733 /* Multiply a and b into r. (r = a * b)
70734  *
70735  * r  A single precision integer.
70736  * a  A single precision integer.
70737  * b  A single precision integer.
70738  */
sp_3072_mul_96(sp_digit * r,const sp_digit * a,const sp_digit * b)70739 SP_NOINLINE static void sp_3072_mul_96(sp_digit* r, const sp_digit* a,
70740         const sp_digit* b)
70741 {
70742     sp_digit t[96 * 2];
70743     sp_digit* tmp = t;
70744     __asm__ __volatile__ (
70745         "movs	r3, #0\n\t"
70746         "movs	r4, #0\n\t"
70747         "mov	r8, r3\n\t"
70748         "mov	r11, %[tmp]\n\t"
70749         "mov	r9, %[a]\n\t"
70750         "mov	r10, %[b]\n\t"
70751         "movs	r6, #0xff\n\t"
70752 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70753         "adds	r6, r6, #0x81\n\t"
70754 #else
70755         "add	r6, r6, #0x81\n\t"
70756 #endif
70757         "add	r6, r6, r9\n\t"
70758         "mov	r12, r6\n\t"
70759         "\n"
70760     "L_sp_3072_mul_96_words_%=:\n\t"
70761         "movs	%[tmp], #0\n\t"
70762         "movs	r5, #0\n\t"
70763         "movs	r6, #0xff\n\t"
70764 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70765         "adds	r6, r6, #0x7d\n\t"
70766 #else
70767         "add	r6, r6, #0x7d\n\t"
70768 #endif
70769         "mov	%[a], r8\n\t"
70770 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70771         "subs	%[a], %[a], r6\n\t"
70772 #else
70773         "sub	%[a], %[a], r6\n\t"
70774 #endif
70775 #ifdef WOLFSSL_KEIL
70776         "sbcs	r6, r6, r6\n\t"
70777 #elif defined(__clang__)
70778         "sbcs	r6, r6\n\t"
70779 #else
70780         "sbc	r6, r6\n\t"
70781 #endif
70782 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70783         "mvns	r6, r6\n\t"
70784 #else
70785         "mvn	r6, r6\n\t"
70786 #endif
70787 #ifdef WOLFSSL_KEIL
70788         "ands	%[a], %[a], r6\n\t"
70789 #elif defined(__clang__)
70790         "ands	%[a], r6\n\t"
70791 #else
70792         "and	%[a], r6\n\t"
70793 #endif
70794         "mov	%[b], r8\n\t"
70795 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70796         "subs	%[b], %[b], %[a]\n\t"
70797 #else
70798         "sub	%[b], %[b], %[a]\n\t"
70799 #endif
70800         "add	%[a], %[a], r9\n\t"
70801         "add	%[b], %[b], r10\n\t"
70802         "\n"
70803     "L_sp_3072_mul_96_mul_%=:\n\t"
70804         "# Multiply Start\n\t"
70805         "ldrh	r6, [%[a]]\n\t"
70806         "ldrh	r7, [%[b]]\n\t"
70807 #ifdef WOLFSSL_KEIL
70808         "muls	r7, r6, r7\n\t"
70809 #elif defined(__clang__)
70810         "muls	r7, r6\n\t"
70811 #else
70812         "mul	r7, r6\n\t"
70813 #endif
70814 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70815         "adds	r3, r3, r7\n\t"
70816 #else
70817         "add	r3, r3, r7\n\t"
70818 #endif
70819 #ifdef WOLFSSL_KEIL
70820         "adcs	r4, r4, %[tmp]\n\t"
70821 #elif defined(__clang__)
70822         "adcs	r4, %[tmp]\n\t"
70823 #else
70824         "adc	r4, %[tmp]\n\t"
70825 #endif
70826 #ifdef WOLFSSL_KEIL
70827         "adcs	r5, r5, %[tmp]\n\t"
70828 #elif defined(__clang__)
70829         "adcs	r5, %[tmp]\n\t"
70830 #else
70831         "adc	r5, %[tmp]\n\t"
70832 #endif
70833         "ldr	r7, [%[b]]\n\t"
70834 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70835         "lsrs	r7, r7, #16\n\t"
70836 #else
70837         "lsr	r7, r7, #16\n\t"
70838 #endif
70839 #ifdef WOLFSSL_KEIL
70840         "muls	r6, r7, r6\n\t"
70841 #elif defined(__clang__)
70842         "muls	r6, r7\n\t"
70843 #else
70844         "mul	r6, r7\n\t"
70845 #endif
70846 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70847         "lsrs	r7, r6, #16\n\t"
70848 #else
70849         "lsr	r7, r6, #16\n\t"
70850 #endif
70851 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70852         "lsls	r6, r6, #16\n\t"
70853 #else
70854         "lsl	r6, r6, #16\n\t"
70855 #endif
70856 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70857         "adds	r3, r3, r6\n\t"
70858 #else
70859         "add	r3, r3, r6\n\t"
70860 #endif
70861 #ifdef WOLFSSL_KEIL
70862         "adcs	r4, r4, r7\n\t"
70863 #elif defined(__clang__)
70864         "adcs	r4, r7\n\t"
70865 #else
70866         "adc	r4, r7\n\t"
70867 #endif
70868 #ifdef WOLFSSL_KEIL
70869         "adcs	r5, r5, %[tmp]\n\t"
70870 #elif defined(__clang__)
70871         "adcs	r5, %[tmp]\n\t"
70872 #else
70873         "adc	r5, %[tmp]\n\t"
70874 #endif
70875         "ldr	r6, [%[a]]\n\t"
70876         "ldr	r7, [%[b]]\n\t"
70877 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70878         "lsrs	r6, r6, #16\n\t"
70879 #else
70880         "lsr	r6, r6, #16\n\t"
70881 #endif
70882 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70883         "lsrs	r7, r7, #16\n\t"
70884 #else
70885         "lsr	r7, r7, #16\n\t"
70886 #endif
70887 #ifdef WOLFSSL_KEIL
70888         "muls	r7, r6, r7\n\t"
70889 #elif defined(__clang__)
70890         "muls	r7, r6\n\t"
70891 #else
70892         "mul	r7, r6\n\t"
70893 #endif
70894 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70895         "adds	r4, r4, r7\n\t"
70896 #else
70897         "add	r4, r4, r7\n\t"
70898 #endif
70899 #ifdef WOLFSSL_KEIL
70900         "adcs	r5, r5, %[tmp]\n\t"
70901 #elif defined(__clang__)
70902         "adcs	r5, %[tmp]\n\t"
70903 #else
70904         "adc	r5, %[tmp]\n\t"
70905 #endif
70906         "ldrh	r7, [%[b]]\n\t"
70907 #ifdef WOLFSSL_KEIL
70908         "muls	r6, r7, r6\n\t"
70909 #elif defined(__clang__)
70910         "muls	r6, r7\n\t"
70911 #else
70912         "mul	r6, r7\n\t"
70913 #endif
70914 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70915         "lsrs	r7, r6, #16\n\t"
70916 #else
70917         "lsr	r7, r6, #16\n\t"
70918 #endif
70919 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70920         "lsls	r6, r6, #16\n\t"
70921 #else
70922         "lsl	r6, r6, #16\n\t"
70923 #endif
70924 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70925         "adds	r3, r3, r6\n\t"
70926 #else
70927         "add	r3, r3, r6\n\t"
70928 #endif
70929 #ifdef WOLFSSL_KEIL
70930         "adcs	r4, r4, r7\n\t"
70931 #elif defined(__clang__)
70932         "adcs	r4, r7\n\t"
70933 #else
70934         "adc	r4, r7\n\t"
70935 #endif
70936 #ifdef WOLFSSL_KEIL
70937         "adcs	r5, r5, %[tmp]\n\t"
70938 #elif defined(__clang__)
70939         "adcs	r5, %[tmp]\n\t"
70940 #else
70941         "adc	r5, %[tmp]\n\t"
70942 #endif
70943         "# Multiply Done\n\t"
70944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70945         "adds	%[a], %[a], #4\n\t"
70946 #else
70947         "add	%[a], %[a], #4\n\t"
70948 #endif
70949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70950         "subs	%[b], %[b], #4\n\t"
70951 #else
70952         "sub	%[b], %[b], #4\n\t"
70953 #endif
70954         "cmp	%[a], r12\n\t"
70955         "beq	L_sp_3072_mul_96_done_mul_%=\n\t"
70956         "mov	r6, r8\n\t"
70957         "add	r6, r6, r9\n\t"
70958         "cmp	%[a], r6\n\t"
70959         "ble	L_sp_3072_mul_96_mul_%=\n\t"
70960         "\n"
70961     "L_sp_3072_mul_96_done_mul_%=:\n\t"
70962         "mov	%[tmp], r11\n\t"
70963         "mov	r7, r8\n\t"
70964         "str	r3, [%[tmp], r7]\n\t"
70965         "movs	r3, r4\n\t"
70966         "movs	r4, r5\n\t"
70967 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70968         "adds	r7, r7, #4\n\t"
70969 #else
70970         "add	r7, r7, #4\n\t"
70971 #endif
70972         "mov	r8, r7\n\t"
70973         "movs	r6, #2\n\t"
70974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70975         "lsls	r6, r6, #8\n\t"
70976 #else
70977         "lsl	r6, r6, #8\n\t"
70978 #endif
70979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
70980         "adds	r6, r6, #0xf8\n\t"
70981 #else
70982         "add	r6, r6, #0xf8\n\t"
70983 #endif
70984         "cmp	r7, r6\n\t"
70985         "ble	L_sp_3072_mul_96_words_%=\n\t"
70986         "str	r3, [%[tmp], r7]\n\t"
70987         "mov	%[a], r9\n\t"
70988         "mov	%[b], r10\n\t"
70989         : [a] "+r" (a), [b] "+r" (b), [tmp] "+r" (tmp)
70990         :
70991         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
70992     );
70993 
70994     XMEMCPY(r, t, sizeof(t));
70995 }
70996 
70997 /* Square a and put result in r. (r = a * a)
70998  *
70999  * r  A single precision integer.
71000  * a  A single precision integer.
71001  */
sp_3072_sqr_96(sp_digit * r,const sp_digit * a)71002 SP_NOINLINE static void sp_3072_sqr_96(sp_digit* r, const sp_digit* a)
71003 {
71004     __asm__ __volatile__ (
71005         "movs	r3, #0\n\t"
71006         "movs	r4, #0\n\t"
71007         "movs	r5, #0\n\t"
71008         "mov	r8, r3\n\t"
71009         "mov	r11, %[r]\n\t"
71010         "movs	r6, #3\n\t"
71011 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71012         "lsls	r6, r6, #8\n\t"
71013 #else
71014         "lsl	r6, r6, #8\n\t"
71015 #endif
71016 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71017         "negs	r6, r6\n\t"
71018 #else
71019         "neg	r6, r6\n\t"
71020 #endif
71021         "add	sp, sp, r6\n\t"
71022         "mov	r10, sp\n\t"
71023         "mov	r9, %[a]\n\t"
71024         "\n"
71025     "L_sp_3072_sqr_96_words_%=:\n\t"
71026         "movs	%[r], #0\n\t"
71027         "movs	r6, #0xff\n\t"
71028 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71029         "adds	r6, r6, #0x7d\n\t"
71030 #else
71031         "add	r6, r6, #0x7d\n\t"
71032 #endif
71033         "mov	%[a], r8\n\t"
71034 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71035         "subs	%[a], %[a], r6\n\t"
71036 #else
71037         "sub	%[a], %[a], r6\n\t"
71038 #endif
71039 #ifdef WOLFSSL_KEIL
71040         "sbcs	r6, r6, r6\n\t"
71041 #elif defined(__clang__)
71042         "sbcs	r6, r6\n\t"
71043 #else
71044         "sbc	r6, r6\n\t"
71045 #endif
71046 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71047         "mvns	r6, r6\n\t"
71048 #else
71049         "mvn	r6, r6\n\t"
71050 #endif
71051 #ifdef WOLFSSL_KEIL
71052         "ands	%[a], %[a], r6\n\t"
71053 #elif defined(__clang__)
71054         "ands	%[a], r6\n\t"
71055 #else
71056         "and	%[a], r6\n\t"
71057 #endif
71058         "mov	r2, r8\n\t"
71059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71060         "subs	r2, r2, %[a]\n\t"
71061 #else
71062         "sub	r2, r2, %[a]\n\t"
71063 #endif
71064         "add	%[a], %[a], r9\n\t"
71065         "add	r2, r2, r9\n\t"
71066         "\n"
71067     "L_sp_3072_sqr_96_mul_%=:\n\t"
71068         "cmp	r2, %[a]\n\t"
71069         "beq	L_sp_3072_sqr_96_sqr_%=\n\t"
71070         "# Multiply * 2: Start\n\t"
71071         "ldrh	r6, [%[a]]\n\t"
71072         "ldrh	r7, [r2]\n\t"
71073 #ifdef WOLFSSL_KEIL
71074         "muls	r7, r6, r7\n\t"
71075 #elif defined(__clang__)
71076         "muls	r7, r6\n\t"
71077 #else
71078         "mul	r7, r6\n\t"
71079 #endif
71080 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71081         "adds	r3, r3, r7\n\t"
71082 #else
71083         "add	r3, r3, r7\n\t"
71084 #endif
71085 #ifdef WOLFSSL_KEIL
71086         "adcs	r4, r4, %[r]\n\t"
71087 #elif defined(__clang__)
71088         "adcs	r4, %[r]\n\t"
71089 #else
71090         "adc	r4, %[r]\n\t"
71091 #endif
71092 #ifdef WOLFSSL_KEIL
71093         "adcs	r5, r5, %[r]\n\t"
71094 #elif defined(__clang__)
71095         "adcs	r5, %[r]\n\t"
71096 #else
71097         "adc	r5, %[r]\n\t"
71098 #endif
71099 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71100         "adds	r3, r3, r7\n\t"
71101 #else
71102         "add	r3, r3, r7\n\t"
71103 #endif
71104 #ifdef WOLFSSL_KEIL
71105         "adcs	r4, r4, %[r]\n\t"
71106 #elif defined(__clang__)
71107         "adcs	r4, %[r]\n\t"
71108 #else
71109         "adc	r4, %[r]\n\t"
71110 #endif
71111 #ifdef WOLFSSL_KEIL
71112         "adcs	r5, r5, %[r]\n\t"
71113 #elif defined(__clang__)
71114         "adcs	r5, %[r]\n\t"
71115 #else
71116         "adc	r5, %[r]\n\t"
71117 #endif
71118         "ldr	r7, [r2]\n\t"
71119 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71120         "lsrs	r7, r7, #16\n\t"
71121 #else
71122         "lsr	r7, r7, #16\n\t"
71123 #endif
71124 #ifdef WOLFSSL_KEIL
71125         "muls	r6, r7, r6\n\t"
71126 #elif defined(__clang__)
71127         "muls	r6, r7\n\t"
71128 #else
71129         "mul	r6, r7\n\t"
71130 #endif
71131 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71132         "lsrs	r7, r6, #16\n\t"
71133 #else
71134         "lsr	r7, r6, #16\n\t"
71135 #endif
71136 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71137         "lsls	r6, r6, #16\n\t"
71138 #else
71139         "lsl	r6, r6, #16\n\t"
71140 #endif
71141 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71142         "adds	r3, r3, r6\n\t"
71143 #else
71144         "add	r3, r3, r6\n\t"
71145 #endif
71146 #ifdef WOLFSSL_KEIL
71147         "adcs	r4, r4, r7\n\t"
71148 #elif defined(__clang__)
71149         "adcs	r4, r7\n\t"
71150 #else
71151         "adc	r4, r7\n\t"
71152 #endif
71153 #ifdef WOLFSSL_KEIL
71154         "adcs	r5, r5, %[r]\n\t"
71155 #elif defined(__clang__)
71156         "adcs	r5, %[r]\n\t"
71157 #else
71158         "adc	r5, %[r]\n\t"
71159 #endif
71160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71161         "adds	r3, r3, r6\n\t"
71162 #else
71163         "add	r3, r3, r6\n\t"
71164 #endif
71165 #ifdef WOLFSSL_KEIL
71166         "adcs	r4, r4, r7\n\t"
71167 #elif defined(__clang__)
71168         "adcs	r4, r7\n\t"
71169 #else
71170         "adc	r4, r7\n\t"
71171 #endif
71172 #ifdef WOLFSSL_KEIL
71173         "adcs	r5, r5, %[r]\n\t"
71174 #elif defined(__clang__)
71175         "adcs	r5, %[r]\n\t"
71176 #else
71177         "adc	r5, %[r]\n\t"
71178 #endif
71179         "ldr	r6, [%[a]]\n\t"
71180         "ldr	r7, [r2]\n\t"
71181 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71182         "lsrs	r6, r6, #16\n\t"
71183 #else
71184         "lsr	r6, r6, #16\n\t"
71185 #endif
71186 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71187         "lsrs	r7, r7, #16\n\t"
71188 #else
71189         "lsr	r7, r7, #16\n\t"
71190 #endif
71191 #ifdef WOLFSSL_KEIL
71192         "muls	r7, r6, r7\n\t"
71193 #elif defined(__clang__)
71194         "muls	r7, r6\n\t"
71195 #else
71196         "mul	r7, r6\n\t"
71197 #endif
71198 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71199         "adds	r4, r4, r7\n\t"
71200 #else
71201         "add	r4, r4, r7\n\t"
71202 #endif
71203 #ifdef WOLFSSL_KEIL
71204         "adcs	r5, r5, %[r]\n\t"
71205 #elif defined(__clang__)
71206         "adcs	r5, %[r]\n\t"
71207 #else
71208         "adc	r5, %[r]\n\t"
71209 #endif
71210 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71211         "adds	r4, r4, r7\n\t"
71212 #else
71213         "add	r4, r4, r7\n\t"
71214 #endif
71215 #ifdef WOLFSSL_KEIL
71216         "adcs	r5, r5, %[r]\n\t"
71217 #elif defined(__clang__)
71218         "adcs	r5, %[r]\n\t"
71219 #else
71220         "adc	r5, %[r]\n\t"
71221 #endif
71222         "ldrh	r7, [r2]\n\t"
71223 #ifdef WOLFSSL_KEIL
71224         "muls	r6, r7, r6\n\t"
71225 #elif defined(__clang__)
71226         "muls	r6, r7\n\t"
71227 #else
71228         "mul	r6, r7\n\t"
71229 #endif
71230 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71231         "lsrs	r7, r6, #16\n\t"
71232 #else
71233         "lsr	r7, r6, #16\n\t"
71234 #endif
71235 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71236         "lsls	r6, r6, #16\n\t"
71237 #else
71238         "lsl	r6, r6, #16\n\t"
71239 #endif
71240 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71241         "adds	r3, r3, r6\n\t"
71242 #else
71243         "add	r3, r3, r6\n\t"
71244 #endif
71245 #ifdef WOLFSSL_KEIL
71246         "adcs	r4, r4, r7\n\t"
71247 #elif defined(__clang__)
71248         "adcs	r4, r7\n\t"
71249 #else
71250         "adc	r4, r7\n\t"
71251 #endif
71252 #ifdef WOLFSSL_KEIL
71253         "adcs	r5, r5, %[r]\n\t"
71254 #elif defined(__clang__)
71255         "adcs	r5, %[r]\n\t"
71256 #else
71257         "adc	r5, %[r]\n\t"
71258 #endif
71259 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71260         "adds	r3, r3, r6\n\t"
71261 #else
71262         "add	r3, r3, r6\n\t"
71263 #endif
71264 #ifdef WOLFSSL_KEIL
71265         "adcs	r4, r4, r7\n\t"
71266 #elif defined(__clang__)
71267         "adcs	r4, r7\n\t"
71268 #else
71269         "adc	r4, r7\n\t"
71270 #endif
71271 #ifdef WOLFSSL_KEIL
71272         "adcs	r5, r5, %[r]\n\t"
71273 #elif defined(__clang__)
71274         "adcs	r5, %[r]\n\t"
71275 #else
71276         "adc	r5, %[r]\n\t"
71277 #endif
71278         "# Multiply * 2: Done\n\t"
71279         "bal	L_sp_3072_sqr_96_done_sqr_%=\n\t"
71280         "\n"
71281     "L_sp_3072_sqr_96_sqr_%=:\n\t"
71282         "mov	r12, r2\n\t"
71283         "ldr	r2, [%[a]]\n\t"
71284         "# Square: Start\n\t"
71285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71286         "lsrs	r7, r2, #16\n\t"
71287 #else
71288         "lsr	r7, r2, #16\n\t"
71289 #endif
71290         "uxth	r6, r2\n\t"
71291 #ifdef WOLFSSL_KEIL
71292         "muls	r6, r6, r6\n\t"
71293 #elif defined(__clang__)
71294         "muls	r6, r6\n\t"
71295 #else
71296         "mul	r6, r6\n\t"
71297 #endif
71298 #ifdef WOLFSSL_KEIL
71299         "muls	r7, r7, r7\n\t"
71300 #elif defined(__clang__)
71301         "muls	r7, r7\n\t"
71302 #else
71303         "mul	r7, r7\n\t"
71304 #endif
71305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71306         "adds	r3, r3, r6\n\t"
71307 #else
71308         "add	r3, r3, r6\n\t"
71309 #endif
71310 #ifdef WOLFSSL_KEIL
71311         "adcs	r4, r4, r7\n\t"
71312 #elif defined(__clang__)
71313         "adcs	r4, r7\n\t"
71314 #else
71315         "adc	r4, r7\n\t"
71316 #endif
71317 #ifdef WOLFSSL_KEIL
71318         "adcs	r5, r5, %[r]\n\t"
71319 #elif defined(__clang__)
71320         "adcs	r5, %[r]\n\t"
71321 #else
71322         "adc	r5, %[r]\n\t"
71323 #endif
71324 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71325         "lsrs	r7, r2, #16\n\t"
71326 #else
71327         "lsr	r7, r2, #16\n\t"
71328 #endif
71329         "uxth	r6, r2\n\t"
71330 #ifdef WOLFSSL_KEIL
71331         "muls	r6, r7, r6\n\t"
71332 #elif defined(__clang__)
71333         "muls	r6, r7\n\t"
71334 #else
71335         "mul	r6, r7\n\t"
71336 #endif
71337 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71338         "lsrs	r7, r6, #15\n\t"
71339 #else
71340         "lsr	r7, r6, #15\n\t"
71341 #endif
71342 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71343         "lsls	r6, r6, #17\n\t"
71344 #else
71345         "lsl	r6, r6, #17\n\t"
71346 #endif
71347 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71348         "adds	r3, r3, r6\n\t"
71349 #else
71350         "add	r3, r3, r6\n\t"
71351 #endif
71352 #ifdef WOLFSSL_KEIL
71353         "adcs	r4, r4, r7\n\t"
71354 #elif defined(__clang__)
71355         "adcs	r4, r7\n\t"
71356 #else
71357         "adc	r4, r7\n\t"
71358 #endif
71359 #ifdef WOLFSSL_KEIL
71360         "adcs	r5, r5, %[r]\n\t"
71361 #elif defined(__clang__)
71362         "adcs	r5, %[r]\n\t"
71363 #else
71364         "adc	r5, %[r]\n\t"
71365 #endif
71366         "# Square: Done\n\t"
71367         "mov	r2, r12\n\t"
71368         "\n"
71369     "L_sp_3072_sqr_96_done_sqr_%=:\n\t"
71370 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71371         "adds	%[a], %[a], #4\n\t"
71372 #else
71373         "add	%[a], %[a], #4\n\t"
71374 #endif
71375 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71376         "subs	r2, r2, #4\n\t"
71377 #else
71378         "sub	r2, r2, #4\n\t"
71379 #endif
71380         "movs	r6, #0xff\n\t"
71381 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71382         "adds	r6, r6, #0x81\n\t"
71383 #else
71384         "add	r6, r6, #0x81\n\t"
71385 #endif
71386         "add	r6, r6, r9\n\t"
71387         "cmp	%[a], r6\n\t"
71388         "beq	L_sp_3072_sqr_96_done_mul_%=\n\t"
71389         "cmp	%[a], r2\n\t"
71390         "bgt	L_sp_3072_sqr_96_done_mul_%=\n\t"
71391         "mov	r7, r8\n\t"
71392         "add	r7, r7, r9\n\t"
71393         "cmp	%[a], r7\n\t"
71394         "ble	L_sp_3072_sqr_96_mul_%=\n\t"
71395         "\n"
71396     "L_sp_3072_sqr_96_done_mul_%=:\n\t"
71397         "mov	%[r], r10\n\t"
71398         "mov	r7, r8\n\t"
71399         "str	r3, [%[r], r7]\n\t"
71400         "movs	r3, r4\n\t"
71401         "movs	r4, r5\n\t"
71402         "movs	r5, #0\n\t"
71403 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71404         "adds	r7, r7, #4\n\t"
71405 #else
71406         "add	r7, r7, #4\n\t"
71407 #endif
71408         "mov	r8, r7\n\t"
71409         "movs	r6, #2\n\t"
71410 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71411         "lsls	r6, r6, #8\n\t"
71412 #else
71413         "lsl	r6, r6, #8\n\t"
71414 #endif
71415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71416         "adds	r6, r6, #0xf8\n\t"
71417 #else
71418         "add	r6, r6, #0xf8\n\t"
71419 #endif
71420         "cmp	r7, r6\n\t"
71421         "ble	L_sp_3072_sqr_96_words_%=\n\t"
71422         "mov	%[a], r9\n\t"
71423         "str	r3, [%[r], r7]\n\t"
71424         "mov	%[r], r11\n\t"
71425         "mov	%[a], r10\n\t"
71426         "movs	r3, #2\n\t"
71427 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71428         "lsls	r3, r3, #8\n\t"
71429 #else
71430         "lsl	r3, r3, #8\n\t"
71431 #endif
71432 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71433         "adds	r3, r3, #0xfc\n\t"
71434 #else
71435         "add	r3, r3, #0xfc\n\t"
71436 #endif
71437         "\n"
71438     "L_sp_3072_sqr_96_store_%=:\n\t"
71439         "ldr	r6, [%[a], r3]\n\t"
71440         "str	r6, [%[r], r3]\n\t"
71441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71442         "subs	r3, r3, #4\n\t"
71443 #else
71444         "sub	r3, r3, #4\n\t"
71445 #endif
71446         "bge	L_sp_3072_sqr_96_store_%=\n\t"
71447         "movs	r6, #3\n\t"
71448 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71449         "lsls	r6, r6, #8\n\t"
71450 #else
71451         "lsl	r6, r6, #8\n\t"
71452 #endif
71453         "add	sp, sp, r6\n\t"
71454         : [r] "+r" (r), [a] "+r" (a)
71455         :
71456         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
71457     );
71458 }
71459 
71460 #endif /* WOLFSSL_SP_SMALL */
71461 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
71462 #ifdef WOLFSSL_SP_SMALL
71463 /* AND m into each word of a and store in r.
71464  *
71465  * r  A single precision integer.
71466  * a  A single precision integer.
71467  * m  Mask to AND against each digit.
71468  */
sp_3072_mask_48(sp_digit * r,const sp_digit * a,sp_digit m)71469 static void sp_3072_mask_48(sp_digit* r, const sp_digit* a, sp_digit m)
71470 {
71471     int i;
71472 
71473     for (i=0; i<48; i++) {
71474         r[i] = a[i] & m;
71475     }
71476 }
71477 
71478 #endif /* WOLFSSL_SP_SMALL */
71479 #ifdef WOLFSSL_SP_SMALL
71480 /* Add b to a into r. (r = a + b)
71481  *
71482  * r  A single precision integer.
71483  * a  A single precision integer.
71484  * b  A single precision integer.
71485  */
sp_3072_add_48(sp_digit * r,const sp_digit * a,const sp_digit * b)71486 SP_NOINLINE static sp_digit sp_3072_add_48(sp_digit* r, const sp_digit* a,
71487         const sp_digit* b)
71488 {
71489     __asm__ __volatile__ (
71490         "movs	r6, %[a]\n\t"
71491         "movs	r7, #0\n\t"
71492         "movs	r3, #0\n\t"
71493 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71494         "adds	r6, r6, #0xc0\n\t"
71495 #else
71496         "add	r6, r6, #0xc0\n\t"
71497 #endif
71498 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71499         "subs	r7, r7, #1\n\t"
71500 #else
71501         "sub	r7, r7, #1\n\t"
71502 #endif
71503         "\n"
71504     "L_sp_3072_add_48_word_%=:\n\t"
71505 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71506         "adds	r3, r3, r7\n\t"
71507 #else
71508         "add	r3, r3, r7\n\t"
71509 #endif
71510         "ldr	r4, [%[a]]\n\t"
71511         "ldr	r5, [%[b]]\n\t"
71512 #ifdef WOLFSSL_KEIL
71513         "adcs	r4, r4, r5\n\t"
71514 #elif defined(__clang__)
71515         "adcs	r4, r5\n\t"
71516 #else
71517         "adc	r4, r5\n\t"
71518 #endif
71519         "str	r4, [%[r]]\n\t"
71520         "movs	r3, #0\n\t"
71521 #ifdef WOLFSSL_KEIL
71522         "adcs	r3, r3, r3\n\t"
71523 #elif defined(__clang__)
71524         "adcs	r3, r3\n\t"
71525 #else
71526         "adc	r3, r3\n\t"
71527 #endif
71528 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71529         "adds	%[a], %[a], #4\n\t"
71530 #else
71531         "add	%[a], %[a], #4\n\t"
71532 #endif
71533 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71534         "adds	%[b], %[b], #4\n\t"
71535 #else
71536         "add	%[b], %[b], #4\n\t"
71537 #endif
71538 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71539         "adds	%[r], %[r], #4\n\t"
71540 #else
71541         "add	%[r], %[r], #4\n\t"
71542 #endif
71543         "cmp	%[a], r6\n\t"
71544         "bne	L_sp_3072_add_48_word_%=\n\t"
71545         "movs	%[r], r3\n\t"
71546         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
71547         :
71548         : "memory", "r3", "r4", "r5", "r6", "r7"
71549     );
71550     return (uint32_t)(size_t)r;
71551 }
71552 
71553 #endif /* WOLFSSL_SP_SMALL */
71554 #ifdef WOLFSSL_SP_SMALL
71555 /* Sub b from a into a. (a -= b)
71556  *
71557  * a  A single precision integer.
71558  * b  A single precision integer.
71559  */
sp_3072_sub_in_place_48(sp_digit * a,const sp_digit * b)71560 SP_NOINLINE static sp_digit sp_3072_sub_in_place_48(sp_digit* a,
71561         const sp_digit* b)
71562 {
71563     __asm__ __volatile__ (
71564         "movs	r7, %[a]\n\t"
71565         "movs	r2, #0\n\t"
71566 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71567         "adds	r7, r7, #0xc0\n\t"
71568 #else
71569         "add	r7, r7, #0xc0\n\t"
71570 #endif
71571         "\n"
71572     "L_sp_3072_sub_in_place_48_words_%=:\n\t"
71573         "movs	r5, #0\n\t"
71574 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71575         "subs	r5, r5, r2\n\t"
71576 #else
71577         "sub	r5, r5, r2\n\t"
71578 #endif
71579         "ldr	r3, [%[a]]\n\t"
71580         "ldr	r4, [%[a], #4]\n\t"
71581         "ldr	r5, [%[b]]\n\t"
71582         "ldr	r6, [%[b], #4]\n\t"
71583 #ifdef WOLFSSL_KEIL
71584         "sbcs	r3, r3, r5\n\t"
71585 #elif defined(__clang__)
71586         "sbcs	r3, r5\n\t"
71587 #else
71588         "sbc	r3, r5\n\t"
71589 #endif
71590 #ifdef WOLFSSL_KEIL
71591         "sbcs	r4, r4, r6\n\t"
71592 #elif defined(__clang__)
71593         "sbcs	r4, r6\n\t"
71594 #else
71595         "sbc	r4, r6\n\t"
71596 #endif
71597         "str	r3, [%[a]]\n\t"
71598         "str	r4, [%[a], #4]\n\t"
71599 #ifdef WOLFSSL_KEIL
71600         "sbcs	r2, r2, r2\n\t"
71601 #elif defined(__clang__)
71602         "sbcs	r2, r2\n\t"
71603 #else
71604         "sbc	r2, r2\n\t"
71605 #endif
71606 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71607         "adds	%[a], %[a], #8\n\t"
71608 #else
71609         "add	%[a], %[a], #8\n\t"
71610 #endif
71611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71612         "adds	%[b], %[b], #8\n\t"
71613 #else
71614         "add	%[b], %[b], #8\n\t"
71615 #endif
71616         "cmp	%[a], r7\n\t"
71617         "bne	L_sp_3072_sub_in_place_48_words_%=\n\t"
71618         "movs	%[a], r2\n\t"
71619         : [a] "+r" (a), [b] "+r" (b)
71620         :
71621         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
71622     );
71623     return (uint32_t)(size_t)a;
71624 }
71625 
71626 #endif /* WOLFSSL_SP_SMALL */
71627 #ifdef WOLFSSL_SP_SMALL
71628 /* Multiply a and b into r. (r = a * b)
71629  *
71630  * r  A single precision integer.
71631  * a  A single precision integer.
71632  * b  A single precision integer.
71633  */
sp_3072_mul_48(sp_digit * r,const sp_digit * a,const sp_digit * b)71634 SP_NOINLINE static void sp_3072_mul_48(sp_digit* r, const sp_digit* a,
71635         const sp_digit* b)
71636 {
71637     sp_digit t[48 * 2];
71638     sp_digit* tmp = t;
71639     __asm__ __volatile__ (
71640         "movs	r3, #0\n\t"
71641         "movs	r4, #0\n\t"
71642         "mov	r8, r3\n\t"
71643         "mov	r11, %[tmp]\n\t"
71644         "mov	r9, %[a]\n\t"
71645         "mov	r10, %[b]\n\t"
71646         "movs	r6, #0xc0\n\t"
71647         "add	r6, r6, r9\n\t"
71648         "mov	r12, r6\n\t"
71649         "\n"
71650     "L_sp_3072_mul_48_words_%=:\n\t"
71651         "movs	%[tmp], #0\n\t"
71652         "movs	r5, #0\n\t"
71653         "movs	r6, #0xbc\n\t"
71654         "mov	%[a], r8\n\t"
71655 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71656         "subs	%[a], %[a], r6\n\t"
71657 #else
71658         "sub	%[a], %[a], r6\n\t"
71659 #endif
71660 #ifdef WOLFSSL_KEIL
71661         "sbcs	r6, r6, r6\n\t"
71662 #elif defined(__clang__)
71663         "sbcs	r6, r6\n\t"
71664 #else
71665         "sbc	r6, r6\n\t"
71666 #endif
71667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71668         "mvns	r6, r6\n\t"
71669 #else
71670         "mvn	r6, r6\n\t"
71671 #endif
71672 #ifdef WOLFSSL_KEIL
71673         "ands	%[a], %[a], r6\n\t"
71674 #elif defined(__clang__)
71675         "ands	%[a], r6\n\t"
71676 #else
71677         "and	%[a], r6\n\t"
71678 #endif
71679         "mov	%[b], r8\n\t"
71680 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71681         "subs	%[b], %[b], %[a]\n\t"
71682 #else
71683         "sub	%[b], %[b], %[a]\n\t"
71684 #endif
71685         "add	%[a], %[a], r9\n\t"
71686         "add	%[b], %[b], r10\n\t"
71687         "\n"
71688     "L_sp_3072_mul_48_mul_%=:\n\t"
71689         "# Multiply Start\n\t"
71690         "ldrh	r6, [%[a]]\n\t"
71691         "ldrh	r7, [%[b]]\n\t"
71692 #ifdef WOLFSSL_KEIL
71693         "muls	r7, r6, r7\n\t"
71694 #elif defined(__clang__)
71695         "muls	r7, r6\n\t"
71696 #else
71697         "mul	r7, r6\n\t"
71698 #endif
71699 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71700         "adds	r3, r3, r7\n\t"
71701 #else
71702         "add	r3, r3, r7\n\t"
71703 #endif
71704 #ifdef WOLFSSL_KEIL
71705         "adcs	r4, r4, %[tmp]\n\t"
71706 #elif defined(__clang__)
71707         "adcs	r4, %[tmp]\n\t"
71708 #else
71709         "adc	r4, %[tmp]\n\t"
71710 #endif
71711 #ifdef WOLFSSL_KEIL
71712         "adcs	r5, r5, %[tmp]\n\t"
71713 #elif defined(__clang__)
71714         "adcs	r5, %[tmp]\n\t"
71715 #else
71716         "adc	r5, %[tmp]\n\t"
71717 #endif
71718         "ldr	r7, [%[b]]\n\t"
71719 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71720         "lsrs	r7, r7, #16\n\t"
71721 #else
71722         "lsr	r7, r7, #16\n\t"
71723 #endif
71724 #ifdef WOLFSSL_KEIL
71725         "muls	r6, r7, r6\n\t"
71726 #elif defined(__clang__)
71727         "muls	r6, r7\n\t"
71728 #else
71729         "mul	r6, r7\n\t"
71730 #endif
71731 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71732         "lsrs	r7, r6, #16\n\t"
71733 #else
71734         "lsr	r7, r6, #16\n\t"
71735 #endif
71736 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71737         "lsls	r6, r6, #16\n\t"
71738 #else
71739         "lsl	r6, r6, #16\n\t"
71740 #endif
71741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71742         "adds	r3, r3, r6\n\t"
71743 #else
71744         "add	r3, r3, r6\n\t"
71745 #endif
71746 #ifdef WOLFSSL_KEIL
71747         "adcs	r4, r4, r7\n\t"
71748 #elif defined(__clang__)
71749         "adcs	r4, r7\n\t"
71750 #else
71751         "adc	r4, r7\n\t"
71752 #endif
71753 #ifdef WOLFSSL_KEIL
71754         "adcs	r5, r5, %[tmp]\n\t"
71755 #elif defined(__clang__)
71756         "adcs	r5, %[tmp]\n\t"
71757 #else
71758         "adc	r5, %[tmp]\n\t"
71759 #endif
71760         "ldr	r6, [%[a]]\n\t"
71761         "ldr	r7, [%[b]]\n\t"
71762 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71763         "lsrs	r6, r6, #16\n\t"
71764 #else
71765         "lsr	r6, r6, #16\n\t"
71766 #endif
71767 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71768         "lsrs	r7, r7, #16\n\t"
71769 #else
71770         "lsr	r7, r7, #16\n\t"
71771 #endif
71772 #ifdef WOLFSSL_KEIL
71773         "muls	r7, r6, r7\n\t"
71774 #elif defined(__clang__)
71775         "muls	r7, r6\n\t"
71776 #else
71777         "mul	r7, r6\n\t"
71778 #endif
71779 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71780         "adds	r4, r4, r7\n\t"
71781 #else
71782         "add	r4, r4, r7\n\t"
71783 #endif
71784 #ifdef WOLFSSL_KEIL
71785         "adcs	r5, r5, %[tmp]\n\t"
71786 #elif defined(__clang__)
71787         "adcs	r5, %[tmp]\n\t"
71788 #else
71789         "adc	r5, %[tmp]\n\t"
71790 #endif
71791         "ldrh	r7, [%[b]]\n\t"
71792 #ifdef WOLFSSL_KEIL
71793         "muls	r6, r7, r6\n\t"
71794 #elif defined(__clang__)
71795         "muls	r6, r7\n\t"
71796 #else
71797         "mul	r6, r7\n\t"
71798 #endif
71799 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71800         "lsrs	r7, r6, #16\n\t"
71801 #else
71802         "lsr	r7, r6, #16\n\t"
71803 #endif
71804 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71805         "lsls	r6, r6, #16\n\t"
71806 #else
71807         "lsl	r6, r6, #16\n\t"
71808 #endif
71809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71810         "adds	r3, r3, r6\n\t"
71811 #else
71812         "add	r3, r3, r6\n\t"
71813 #endif
71814 #ifdef WOLFSSL_KEIL
71815         "adcs	r4, r4, r7\n\t"
71816 #elif defined(__clang__)
71817         "adcs	r4, r7\n\t"
71818 #else
71819         "adc	r4, r7\n\t"
71820 #endif
71821 #ifdef WOLFSSL_KEIL
71822         "adcs	r5, r5, %[tmp]\n\t"
71823 #elif defined(__clang__)
71824         "adcs	r5, %[tmp]\n\t"
71825 #else
71826         "adc	r5, %[tmp]\n\t"
71827 #endif
71828         "# Multiply Done\n\t"
71829 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71830         "adds	%[a], %[a], #4\n\t"
71831 #else
71832         "add	%[a], %[a], #4\n\t"
71833 #endif
71834 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71835         "subs	%[b], %[b], #4\n\t"
71836 #else
71837         "sub	%[b], %[b], #4\n\t"
71838 #endif
71839         "cmp	%[a], r12\n\t"
71840         "beq	L_sp_3072_mul_48_done_mul_%=\n\t"
71841         "mov	r6, r8\n\t"
71842         "add	r6, r6, r9\n\t"
71843         "cmp	%[a], r6\n\t"
71844         "ble	L_sp_3072_mul_48_mul_%=\n\t"
71845         "\n"
71846     "L_sp_3072_mul_48_done_mul_%=:\n\t"
71847         "mov	%[tmp], r11\n\t"
71848         "mov	r7, r8\n\t"
71849         "str	r3, [%[tmp], r7]\n\t"
71850         "movs	r3, r4\n\t"
71851         "movs	r4, r5\n\t"
71852 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71853         "adds	r7, r7, #4\n\t"
71854 #else
71855         "add	r7, r7, #4\n\t"
71856 #endif
71857         "mov	r8, r7\n\t"
71858         "movs	r6, #0xff\n\t"
71859 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71860         "adds	r6, r6, #0x79\n\t"
71861 #else
71862         "add	r6, r6, #0x79\n\t"
71863 #endif
71864         "cmp	r7, r6\n\t"
71865         "ble	L_sp_3072_mul_48_words_%=\n\t"
71866         "str	r3, [%[tmp], r7]\n\t"
71867         "mov	%[a], r9\n\t"
71868         "mov	%[b], r10\n\t"
71869         : [a] "+r" (a), [b] "+r" (b), [tmp] "+r" (tmp)
71870         :
71871         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
71872     );
71873 
71874     XMEMCPY(r, t, sizeof(t));
71875 }
71876 
71877 /* Square a and put result in r. (r = a * a)
71878  *
71879  * r  A single precision integer.
71880  * a  A single precision integer.
71881  */
sp_3072_sqr_48(sp_digit * r,const sp_digit * a)71882 SP_NOINLINE static void sp_3072_sqr_48(sp_digit* r, const sp_digit* a)
71883 {
71884     __asm__ __volatile__ (
71885         "movs	r3, #0\n\t"
71886         "movs	r4, #0\n\t"
71887         "movs	r5, #0\n\t"
71888         "mov	r8, r3\n\t"
71889         "mov	r11, %[r]\n\t"
71890         "movs	r6, #0xff\n\t"
71891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71892         "adds	r6, r6, #0x81\n\t"
71893 #else
71894         "add	r6, r6, #0x81\n\t"
71895 #endif
71896 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71897         "negs	r6, r6\n\t"
71898 #else
71899         "neg	r6, r6\n\t"
71900 #endif
71901         "add	sp, sp, r6\n\t"
71902         "mov	r10, sp\n\t"
71903         "mov	r9, %[a]\n\t"
71904         "\n"
71905     "L_sp_3072_sqr_48_words_%=:\n\t"
71906         "movs	%[r], #0\n\t"
71907         "movs	r6, #0xbc\n\t"
71908         "mov	%[a], r8\n\t"
71909 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71910         "subs	%[a], %[a], r6\n\t"
71911 #else
71912         "sub	%[a], %[a], r6\n\t"
71913 #endif
71914 #ifdef WOLFSSL_KEIL
71915         "sbcs	r6, r6, r6\n\t"
71916 #elif defined(__clang__)
71917         "sbcs	r6, r6\n\t"
71918 #else
71919         "sbc	r6, r6\n\t"
71920 #endif
71921 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71922         "mvns	r6, r6\n\t"
71923 #else
71924         "mvn	r6, r6\n\t"
71925 #endif
71926 #ifdef WOLFSSL_KEIL
71927         "ands	%[a], %[a], r6\n\t"
71928 #elif defined(__clang__)
71929         "ands	%[a], r6\n\t"
71930 #else
71931         "and	%[a], r6\n\t"
71932 #endif
71933         "mov	r2, r8\n\t"
71934 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71935         "subs	r2, r2, %[a]\n\t"
71936 #else
71937         "sub	r2, r2, %[a]\n\t"
71938 #endif
71939         "add	%[a], %[a], r9\n\t"
71940         "add	r2, r2, r9\n\t"
71941         "\n"
71942     "L_sp_3072_sqr_48_mul_%=:\n\t"
71943         "cmp	r2, %[a]\n\t"
71944         "beq	L_sp_3072_sqr_48_sqr_%=\n\t"
71945         "# Multiply * 2: Start\n\t"
71946         "ldrh	r6, [%[a]]\n\t"
71947         "ldrh	r7, [r2]\n\t"
71948 #ifdef WOLFSSL_KEIL
71949         "muls	r7, r6, r7\n\t"
71950 #elif defined(__clang__)
71951         "muls	r7, r6\n\t"
71952 #else
71953         "mul	r7, r6\n\t"
71954 #endif
71955 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71956         "adds	r3, r3, r7\n\t"
71957 #else
71958         "add	r3, r3, r7\n\t"
71959 #endif
71960 #ifdef WOLFSSL_KEIL
71961         "adcs	r4, r4, %[r]\n\t"
71962 #elif defined(__clang__)
71963         "adcs	r4, %[r]\n\t"
71964 #else
71965         "adc	r4, %[r]\n\t"
71966 #endif
71967 #ifdef WOLFSSL_KEIL
71968         "adcs	r5, r5, %[r]\n\t"
71969 #elif defined(__clang__)
71970         "adcs	r5, %[r]\n\t"
71971 #else
71972         "adc	r5, %[r]\n\t"
71973 #endif
71974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71975         "adds	r3, r3, r7\n\t"
71976 #else
71977         "add	r3, r3, r7\n\t"
71978 #endif
71979 #ifdef WOLFSSL_KEIL
71980         "adcs	r4, r4, %[r]\n\t"
71981 #elif defined(__clang__)
71982         "adcs	r4, %[r]\n\t"
71983 #else
71984         "adc	r4, %[r]\n\t"
71985 #endif
71986 #ifdef WOLFSSL_KEIL
71987         "adcs	r5, r5, %[r]\n\t"
71988 #elif defined(__clang__)
71989         "adcs	r5, %[r]\n\t"
71990 #else
71991         "adc	r5, %[r]\n\t"
71992 #endif
71993         "ldr	r7, [r2]\n\t"
71994 #if defined(__clang__) || defined(WOLFSSL_KEIL)
71995         "lsrs	r7, r7, #16\n\t"
71996 #else
71997         "lsr	r7, r7, #16\n\t"
71998 #endif
71999 #ifdef WOLFSSL_KEIL
72000         "muls	r6, r7, r6\n\t"
72001 #elif defined(__clang__)
72002         "muls	r6, r7\n\t"
72003 #else
72004         "mul	r6, r7\n\t"
72005 #endif
72006 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72007         "lsrs	r7, r6, #16\n\t"
72008 #else
72009         "lsr	r7, r6, #16\n\t"
72010 #endif
72011 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72012         "lsls	r6, r6, #16\n\t"
72013 #else
72014         "lsl	r6, r6, #16\n\t"
72015 #endif
72016 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72017         "adds	r3, r3, r6\n\t"
72018 #else
72019         "add	r3, r3, r6\n\t"
72020 #endif
72021 #ifdef WOLFSSL_KEIL
72022         "adcs	r4, r4, r7\n\t"
72023 #elif defined(__clang__)
72024         "adcs	r4, r7\n\t"
72025 #else
72026         "adc	r4, r7\n\t"
72027 #endif
72028 #ifdef WOLFSSL_KEIL
72029         "adcs	r5, r5, %[r]\n\t"
72030 #elif defined(__clang__)
72031         "adcs	r5, %[r]\n\t"
72032 #else
72033         "adc	r5, %[r]\n\t"
72034 #endif
72035 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72036         "adds	r3, r3, r6\n\t"
72037 #else
72038         "add	r3, r3, r6\n\t"
72039 #endif
72040 #ifdef WOLFSSL_KEIL
72041         "adcs	r4, r4, r7\n\t"
72042 #elif defined(__clang__)
72043         "adcs	r4, r7\n\t"
72044 #else
72045         "adc	r4, r7\n\t"
72046 #endif
72047 #ifdef WOLFSSL_KEIL
72048         "adcs	r5, r5, %[r]\n\t"
72049 #elif defined(__clang__)
72050         "adcs	r5, %[r]\n\t"
72051 #else
72052         "adc	r5, %[r]\n\t"
72053 #endif
72054         "ldr	r6, [%[a]]\n\t"
72055         "ldr	r7, [r2]\n\t"
72056 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72057         "lsrs	r6, r6, #16\n\t"
72058 #else
72059         "lsr	r6, r6, #16\n\t"
72060 #endif
72061 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72062         "lsrs	r7, r7, #16\n\t"
72063 #else
72064         "lsr	r7, r7, #16\n\t"
72065 #endif
72066 #ifdef WOLFSSL_KEIL
72067         "muls	r7, r6, r7\n\t"
72068 #elif defined(__clang__)
72069         "muls	r7, r6\n\t"
72070 #else
72071         "mul	r7, r6\n\t"
72072 #endif
72073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72074         "adds	r4, r4, r7\n\t"
72075 #else
72076         "add	r4, r4, r7\n\t"
72077 #endif
72078 #ifdef WOLFSSL_KEIL
72079         "adcs	r5, r5, %[r]\n\t"
72080 #elif defined(__clang__)
72081         "adcs	r5, %[r]\n\t"
72082 #else
72083         "adc	r5, %[r]\n\t"
72084 #endif
72085 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72086         "adds	r4, r4, r7\n\t"
72087 #else
72088         "add	r4, r4, r7\n\t"
72089 #endif
72090 #ifdef WOLFSSL_KEIL
72091         "adcs	r5, r5, %[r]\n\t"
72092 #elif defined(__clang__)
72093         "adcs	r5, %[r]\n\t"
72094 #else
72095         "adc	r5, %[r]\n\t"
72096 #endif
72097         "ldrh	r7, [r2]\n\t"
72098 #ifdef WOLFSSL_KEIL
72099         "muls	r6, r7, r6\n\t"
72100 #elif defined(__clang__)
72101         "muls	r6, r7\n\t"
72102 #else
72103         "mul	r6, r7\n\t"
72104 #endif
72105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72106         "lsrs	r7, r6, #16\n\t"
72107 #else
72108         "lsr	r7, r6, #16\n\t"
72109 #endif
72110 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72111         "lsls	r6, r6, #16\n\t"
72112 #else
72113         "lsl	r6, r6, #16\n\t"
72114 #endif
72115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72116         "adds	r3, r3, r6\n\t"
72117 #else
72118         "add	r3, r3, r6\n\t"
72119 #endif
72120 #ifdef WOLFSSL_KEIL
72121         "adcs	r4, r4, r7\n\t"
72122 #elif defined(__clang__)
72123         "adcs	r4, r7\n\t"
72124 #else
72125         "adc	r4, r7\n\t"
72126 #endif
72127 #ifdef WOLFSSL_KEIL
72128         "adcs	r5, r5, %[r]\n\t"
72129 #elif defined(__clang__)
72130         "adcs	r5, %[r]\n\t"
72131 #else
72132         "adc	r5, %[r]\n\t"
72133 #endif
72134 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72135         "adds	r3, r3, r6\n\t"
72136 #else
72137         "add	r3, r3, r6\n\t"
72138 #endif
72139 #ifdef WOLFSSL_KEIL
72140         "adcs	r4, r4, r7\n\t"
72141 #elif defined(__clang__)
72142         "adcs	r4, r7\n\t"
72143 #else
72144         "adc	r4, r7\n\t"
72145 #endif
72146 #ifdef WOLFSSL_KEIL
72147         "adcs	r5, r5, %[r]\n\t"
72148 #elif defined(__clang__)
72149         "adcs	r5, %[r]\n\t"
72150 #else
72151         "adc	r5, %[r]\n\t"
72152 #endif
72153         "# Multiply * 2: Done\n\t"
72154         "bal	L_sp_3072_sqr_48_done_sqr_%=\n\t"
72155         "\n"
72156     "L_sp_3072_sqr_48_sqr_%=:\n\t"
72157         "mov	r12, r2\n\t"
72158         "ldr	r2, [%[a]]\n\t"
72159         "# Square: Start\n\t"
72160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72161         "lsrs	r7, r2, #16\n\t"
72162 #else
72163         "lsr	r7, r2, #16\n\t"
72164 #endif
72165         "uxth	r6, r2\n\t"
72166 #ifdef WOLFSSL_KEIL
72167         "muls	r6, r6, r6\n\t"
72168 #elif defined(__clang__)
72169         "muls	r6, r6\n\t"
72170 #else
72171         "mul	r6, r6\n\t"
72172 #endif
72173 #ifdef WOLFSSL_KEIL
72174         "muls	r7, r7, r7\n\t"
72175 #elif defined(__clang__)
72176         "muls	r7, r7\n\t"
72177 #else
72178         "mul	r7, r7\n\t"
72179 #endif
72180 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72181         "adds	r3, r3, r6\n\t"
72182 #else
72183         "add	r3, r3, r6\n\t"
72184 #endif
72185 #ifdef WOLFSSL_KEIL
72186         "adcs	r4, r4, r7\n\t"
72187 #elif defined(__clang__)
72188         "adcs	r4, r7\n\t"
72189 #else
72190         "adc	r4, r7\n\t"
72191 #endif
72192 #ifdef WOLFSSL_KEIL
72193         "adcs	r5, r5, %[r]\n\t"
72194 #elif defined(__clang__)
72195         "adcs	r5, %[r]\n\t"
72196 #else
72197         "adc	r5, %[r]\n\t"
72198 #endif
72199 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72200         "lsrs	r7, r2, #16\n\t"
72201 #else
72202         "lsr	r7, r2, #16\n\t"
72203 #endif
72204         "uxth	r6, r2\n\t"
72205 #ifdef WOLFSSL_KEIL
72206         "muls	r6, r7, r6\n\t"
72207 #elif defined(__clang__)
72208         "muls	r6, r7\n\t"
72209 #else
72210         "mul	r6, r7\n\t"
72211 #endif
72212 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72213         "lsrs	r7, r6, #15\n\t"
72214 #else
72215         "lsr	r7, r6, #15\n\t"
72216 #endif
72217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72218         "lsls	r6, r6, #17\n\t"
72219 #else
72220         "lsl	r6, r6, #17\n\t"
72221 #endif
72222 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72223         "adds	r3, r3, r6\n\t"
72224 #else
72225         "add	r3, r3, r6\n\t"
72226 #endif
72227 #ifdef WOLFSSL_KEIL
72228         "adcs	r4, r4, r7\n\t"
72229 #elif defined(__clang__)
72230         "adcs	r4, r7\n\t"
72231 #else
72232         "adc	r4, r7\n\t"
72233 #endif
72234 #ifdef WOLFSSL_KEIL
72235         "adcs	r5, r5, %[r]\n\t"
72236 #elif defined(__clang__)
72237         "adcs	r5, %[r]\n\t"
72238 #else
72239         "adc	r5, %[r]\n\t"
72240 #endif
72241         "# Square: Done\n\t"
72242         "mov	r2, r12\n\t"
72243         "\n"
72244     "L_sp_3072_sqr_48_done_sqr_%=:\n\t"
72245 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72246         "adds	%[a], %[a], #4\n\t"
72247 #else
72248         "add	%[a], %[a], #4\n\t"
72249 #endif
72250 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72251         "subs	r2, r2, #4\n\t"
72252 #else
72253         "sub	r2, r2, #4\n\t"
72254 #endif
72255         "movs	r6, #0xc0\n\t"
72256         "add	r6, r6, r9\n\t"
72257         "cmp	%[a], r6\n\t"
72258         "beq	L_sp_3072_sqr_48_done_mul_%=\n\t"
72259         "cmp	%[a], r2\n\t"
72260         "bgt	L_sp_3072_sqr_48_done_mul_%=\n\t"
72261         "mov	r7, r8\n\t"
72262         "add	r7, r7, r9\n\t"
72263         "cmp	%[a], r7\n\t"
72264         "ble	L_sp_3072_sqr_48_mul_%=\n\t"
72265         "\n"
72266     "L_sp_3072_sqr_48_done_mul_%=:\n\t"
72267         "mov	%[r], r10\n\t"
72268         "mov	r7, r8\n\t"
72269         "str	r3, [%[r], r7]\n\t"
72270         "movs	r3, r4\n\t"
72271         "movs	r4, r5\n\t"
72272         "movs	r5, #0\n\t"
72273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72274         "adds	r7, r7, #4\n\t"
72275 #else
72276         "add	r7, r7, #4\n\t"
72277 #endif
72278         "mov	r8, r7\n\t"
72279         "movs	r6, #0xff\n\t"
72280 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72281         "adds	r6, r6, #0x79\n\t"
72282 #else
72283         "add	r6, r6, #0x79\n\t"
72284 #endif
72285         "cmp	r7, r6\n\t"
72286         "ble	L_sp_3072_sqr_48_words_%=\n\t"
72287         "mov	%[a], r9\n\t"
72288         "str	r3, [%[r], r7]\n\t"
72289         "mov	%[r], r11\n\t"
72290         "mov	%[a], r10\n\t"
72291         "movs	r3, #0xff\n\t"
72292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72293         "adds	r3, r3, #0x7d\n\t"
72294 #else
72295         "add	r3, r3, #0x7d\n\t"
72296 #endif
72297         "\n"
72298     "L_sp_3072_sqr_48_store_%=:\n\t"
72299         "ldr	r6, [%[a], r3]\n\t"
72300         "str	r6, [%[r], r3]\n\t"
72301 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72302         "subs	r3, r3, #4\n\t"
72303 #else
72304         "sub	r3, r3, #4\n\t"
72305 #endif
72306         "bge	L_sp_3072_sqr_48_store_%=\n\t"
72307         "movs	r6, #0xff\n\t"
72308 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72309         "adds	r6, r6, #0x81\n\t"
72310 #else
72311         "add	r6, r6, #0x81\n\t"
72312 #endif
72313         "add	sp, sp, r6\n\t"
72314         : [r] "+r" (r), [a] "+r" (a)
72315         :
72316         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
72317     );
72318 }
72319 
72320 #endif /* WOLFSSL_SP_SMALL */
72321 #endif /* (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) | WOLFSSL_HAVE_SP_DH */
72322 
72323 /* Caclulate the bottom digit of -1/a mod 2^n.
72324  *
72325  * a    A single precision number.
72326  * rho  Bottom word of inverse.
72327  */
sp_3072_mont_setup(const sp_digit * a,sp_digit * rho)72328 static void sp_3072_mont_setup(const sp_digit* a, sp_digit* rho)
72329 {
72330     sp_digit x;
72331     sp_digit b;
72332 
72333     b = a[0];
72334     x = (((b + 2) & 4) << 1) + b; /* here x*a==1 mod 2**4 */
72335     x *= 2 - b * x;               /* here x*a==1 mod 2**8 */
72336     x *= 2 - b * x;               /* here x*a==1 mod 2**16 */
72337     x *= 2 - b * x;               /* here x*a==1 mod 2**32 */
72338 
72339     /* rho = -1/m mod b */
72340     *rho = (sp_digit)0 - x;
72341 }
72342 
72343 /* Mul a by digit b into r. (r = a * b)
72344  *
72345  * r  A single precision integer.
72346  * a  A single precision integer.
72347  * b  A single precision digit.
72348  */
sp_3072_mul_d_96(sp_digit * r,const sp_digit * a,sp_digit b)72349 SP_NOINLINE static void sp_3072_mul_d_96(sp_digit* r, const sp_digit* a,
72350         sp_digit b)
72351 {
72352     __asm__ __volatile__ (
72353         "movs	r6, #0xff\n\t"
72354 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72355         "adds	r6, r6, #0x81\n\t"
72356 #else
72357         "add	r6, r6, #0x81\n\t"
72358 #endif
72359 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72360         "adds	r6, r6, %[a]\n\t"
72361 #else
72362         "add	r6, r6, %[a]\n\t"
72363 #endif
72364         "mov	r8, %[r]\n\t"
72365         "mov	r9, r6\n\t"
72366         "movs	r3, #0\n\t"
72367         "movs	r4, #0\n\t"
72368         "\n"
72369     "L_sp_3072_mul_d_96_%=:\n\t"
72370         "movs	%[r], #0\n\t"
72371         "movs	r5, #0\n\t"
72372         "# A[] * B\n\t"
72373         "ldrh	r6, [%[a]]\n\t"
72374         "uxth	r7, %[b]\n\t"
72375 #ifdef WOLFSSL_KEIL
72376         "muls	r7, r6, r7\n\t"
72377 #elif defined(__clang__)
72378         "muls	r7, r6\n\t"
72379 #else
72380         "mul	r7, r6\n\t"
72381 #endif
72382 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72383         "adds	r3, r3, r7\n\t"
72384 #else
72385         "add	r3, r3, r7\n\t"
72386 #endif
72387 #ifdef WOLFSSL_KEIL
72388         "adcs	r4, r4, %[r]\n\t"
72389 #elif defined(__clang__)
72390         "adcs	r4, %[r]\n\t"
72391 #else
72392         "adc	r4, %[r]\n\t"
72393 #endif
72394 #ifdef WOLFSSL_KEIL
72395         "adcs	r5, r5, %[r]\n\t"
72396 #elif defined(__clang__)
72397         "adcs	r5, %[r]\n\t"
72398 #else
72399         "adc	r5, %[r]\n\t"
72400 #endif
72401 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72402         "lsrs	r7, %[b], #16\n\t"
72403 #else
72404         "lsr	r7, %[b], #16\n\t"
72405 #endif
72406 #ifdef WOLFSSL_KEIL
72407         "muls	r6, r7, r6\n\t"
72408 #elif defined(__clang__)
72409         "muls	r6, r7\n\t"
72410 #else
72411         "mul	r6, r7\n\t"
72412 #endif
72413 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72414         "lsrs	r7, r6, #16\n\t"
72415 #else
72416         "lsr	r7, r6, #16\n\t"
72417 #endif
72418 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72419         "lsls	r6, r6, #16\n\t"
72420 #else
72421         "lsl	r6, r6, #16\n\t"
72422 #endif
72423 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72424         "adds	r3, r3, r6\n\t"
72425 #else
72426         "add	r3, r3, r6\n\t"
72427 #endif
72428 #ifdef WOLFSSL_KEIL
72429         "adcs	r4, r4, r7\n\t"
72430 #elif defined(__clang__)
72431         "adcs	r4, r7\n\t"
72432 #else
72433         "adc	r4, r7\n\t"
72434 #endif
72435 #ifdef WOLFSSL_KEIL
72436         "adcs	r5, r5, %[r]\n\t"
72437 #elif defined(__clang__)
72438         "adcs	r5, %[r]\n\t"
72439 #else
72440         "adc	r5, %[r]\n\t"
72441 #endif
72442         "ldr	r6, [%[a]]\n\t"
72443 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72444         "lsrs	r6, r6, #16\n\t"
72445 #else
72446         "lsr	r6, r6, #16\n\t"
72447 #endif
72448 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72449         "lsrs	r7, %[b], #16\n\t"
72450 #else
72451         "lsr	r7, %[b], #16\n\t"
72452 #endif
72453 #ifdef WOLFSSL_KEIL
72454         "muls	r7, r6, r7\n\t"
72455 #elif defined(__clang__)
72456         "muls	r7, r6\n\t"
72457 #else
72458         "mul	r7, r6\n\t"
72459 #endif
72460 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72461         "adds	r4, r4, r7\n\t"
72462 #else
72463         "add	r4, r4, r7\n\t"
72464 #endif
72465 #ifdef WOLFSSL_KEIL
72466         "adcs	r5, r5, %[r]\n\t"
72467 #elif defined(__clang__)
72468         "adcs	r5, %[r]\n\t"
72469 #else
72470         "adc	r5, %[r]\n\t"
72471 #endif
72472         "uxth	r7, %[b]\n\t"
72473 #ifdef WOLFSSL_KEIL
72474         "muls	r6, r7, r6\n\t"
72475 #elif defined(__clang__)
72476         "muls	r6, r7\n\t"
72477 #else
72478         "mul	r6, r7\n\t"
72479 #endif
72480 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72481         "lsrs	r7, r6, #16\n\t"
72482 #else
72483         "lsr	r7, r6, #16\n\t"
72484 #endif
72485 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72486         "lsls	r6, r6, #16\n\t"
72487 #else
72488         "lsl	r6, r6, #16\n\t"
72489 #endif
72490 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72491         "adds	r3, r3, r6\n\t"
72492 #else
72493         "add	r3, r3, r6\n\t"
72494 #endif
72495 #ifdef WOLFSSL_KEIL
72496         "adcs	r4, r4, r7\n\t"
72497 #elif defined(__clang__)
72498         "adcs	r4, r7\n\t"
72499 #else
72500         "adc	r4, r7\n\t"
72501 #endif
72502 #ifdef WOLFSSL_KEIL
72503         "adcs	r5, r5, %[r]\n\t"
72504 #elif defined(__clang__)
72505         "adcs	r5, %[r]\n\t"
72506 #else
72507         "adc	r5, %[r]\n\t"
72508 #endif
72509         "# A[] * B - Done\n\t"
72510         "mov	%[r], r8\n\t"
72511         "str	r3, [%[r]]\n\t"
72512         "movs	r3, r4\n\t"
72513         "movs	r4, r5\n\t"
72514 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72515         "adds	%[r], %[r], #4\n\t"
72516 #else
72517         "add	%[r], %[r], #4\n\t"
72518 #endif
72519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72520         "adds	%[a], %[a], #4\n\t"
72521 #else
72522         "add	%[a], %[a], #4\n\t"
72523 #endif
72524         "mov	r8, %[r]\n\t"
72525         "cmp	%[a], r9\n\t"
72526         "blt	L_sp_3072_mul_d_96_%=\n\t"
72527         "str	r3, [%[r]]\n\t"
72528         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
72529         :
72530         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
72531     );
72532 }
72533 
72534 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
72535 /* r = 2^n mod m where n is the number of bits to reduce by.
72536  * Given m must be 3072 bits, just need to subtract.
72537  *
72538  * r  A single precision number.
72539  * m  A single precision number.
72540  */
sp_3072_mont_norm_48(sp_digit * r,const sp_digit * m)72541 static void sp_3072_mont_norm_48(sp_digit* r, const sp_digit* m)
72542 {
72543     XMEMSET(r, 0, sizeof(sp_digit) * 48);
72544 
72545     /* r = 2^n mod m */
72546     sp_3072_sub_in_place_48(r, m);
72547 }
72548 
72549 /* Conditionally subtract b from a using the mask m.
72550  * m is -1 to subtract and 0 when not copying.
72551  *
72552  * r  A single precision number representing condition subtract result.
72553  * a  A single precision number to subtract from.
72554  * b  A single precision number to subtract.
72555  * m  Mask value to apply.
72556  */
sp_3072_cond_sub_48(sp_digit * r,const sp_digit * a,const sp_digit * b,sp_digit m)72557 SP_NOINLINE static sp_digit sp_3072_cond_sub_48(sp_digit* r, const sp_digit* a,
72558         const sp_digit* b, sp_digit m)
72559 {
72560     __asm__ __volatile__ (
72561         "movs	r4, #0\n\t"
72562         "movs	r5, #0xc0\n\t"
72563         "mov	r8, r5\n\t"
72564         "movs	r7, #0\n\t"
72565         "\n"
72566     "L_sp_3072_cond_sub_48_words_%=:\n\t"
72567         "ldr	r6, [%[b], r7]\n\t"
72568 #ifdef WOLFSSL_KEIL
72569         "ands	r6, r6, %[m]\n\t"
72570 #elif defined(__clang__)
72571         "ands	r6, %[m]\n\t"
72572 #else
72573         "and	r6, %[m]\n\t"
72574 #endif
72575         "movs	r5, #0\n\t"
72576 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72577         "subs	r5, r5, r4\n\t"
72578 #else
72579         "sub	r5, r5, r4\n\t"
72580 #endif
72581         "ldr	r5, [%[a], r7]\n\t"
72582 #ifdef WOLFSSL_KEIL
72583         "sbcs	r5, r5, r6\n\t"
72584 #elif defined(__clang__)
72585         "sbcs	r5, r6\n\t"
72586 #else
72587         "sbc	r5, r6\n\t"
72588 #endif
72589 #ifdef WOLFSSL_KEIL
72590         "sbcs	r4, r4, r4\n\t"
72591 #elif defined(__clang__)
72592         "sbcs	r4, r4\n\t"
72593 #else
72594         "sbc	r4, r4\n\t"
72595 #endif
72596         "str	r5, [%[r], r7]\n\t"
72597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72598         "adds	r7, r7, #4\n\t"
72599 #else
72600         "add	r7, r7, #4\n\t"
72601 #endif
72602         "cmp	r7, r8\n\t"
72603         "blt	L_sp_3072_cond_sub_48_words_%=\n\t"
72604         "movs	%[r], r4\n\t"
72605         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
72606         :
72607         : "memory", "r4", "r5", "r6", "r7", "r8"
72608     );
72609     return (uint32_t)(size_t)r;
72610 }
72611 
72612 /* Reduce the number back to 3072 bits using Montgomery reduction.
72613  *
72614  * a   A single precision number to reduce in place.
72615  * m   The single precision number representing the modulus.
72616  * mp  The digit representing the negative inverse of m mod 2^n.
72617  */
sp_3072_mont_reduce_48(sp_digit * a,const sp_digit * m,sp_digit mp)72618 SP_NOINLINE static void sp_3072_mont_reduce_48(sp_digit* a, const sp_digit* m,
72619         sp_digit mp)
72620 {
72621     __asm__ __volatile__ (
72622         "movs	r7, #0\n\t"
72623         "mov	r8, %[mp]\n\t"
72624         "mov	r12, r7\n\t"
72625         "mov	lr, %[m]\n\t"
72626         "mov	r9, %[a]\n\t"
72627         "mov	r11, %[a]\n\t"
72628         "movs	r5, #0xbc\n\t"
72629         "movs	r6, #0xc0\n\t"
72630         "add	r9, r9, r5\n\t"
72631         "add	r11, r11, r6\n\t"
72632         "\n"
72633     "L_sp_3072_mont_reduce_48_mod_%=:\n\t"
72634         "movs	r7, #0\n\t"
72635         "movs	r4, #0\n\t"
72636         "# a[i] += m[0] * mu\n\t"
72637         "ldm	%[m]!, {%[mp]}\n\t"
72638         "ldm	%[a]!, {r3}\n\t"
72639         "# mu = a[i] * mp\n\t"
72640         "mov	r5, r8\n\t"
72641 #ifdef WOLFSSL_KEIL
72642         "muls	r5, r3, r5\n\t"
72643 #elif defined(__clang__)
72644         "muls	r5, r3\n\t"
72645 #else
72646         "mul	r5, r3\n\t"
72647 #endif
72648         "mov	r10, r5\n\t"
72649         "# Multiply m[0] and mu - Start\n\t"
72650         "mov	r5, r10\n\t"
72651         "uxth	r6, %[mp]\n\t"
72652         "uxth	r5, r5\n\t"
72653 #ifdef WOLFSSL_KEIL
72654         "muls	r6, r5, r6\n\t"
72655 #elif defined(__clang__)
72656         "muls	r6, r5\n\t"
72657 #else
72658         "mul	r6, r5\n\t"
72659 #endif
72660 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72661         "adds	r3, r3, r6\n\t"
72662 #else
72663         "add	r3, r3, r6\n\t"
72664 #endif
72665 #ifdef WOLFSSL_KEIL
72666         "adcs	r4, r4, r7\n\t"
72667 #elif defined(__clang__)
72668         "adcs	r4, r7\n\t"
72669 #else
72670         "adc	r4, r7\n\t"
72671 #endif
72672 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72673         "lsrs	r6, %[mp], #16\n\t"
72674 #else
72675         "lsr	r6, %[mp], #16\n\t"
72676 #endif
72677 #ifdef WOLFSSL_KEIL
72678         "muls	r5, r6, r5\n\t"
72679 #elif defined(__clang__)
72680         "muls	r5, r6\n\t"
72681 #else
72682         "mul	r5, r6\n\t"
72683 #endif
72684 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72685         "lsrs	r6, r5, #16\n\t"
72686 #else
72687         "lsr	r6, r5, #16\n\t"
72688 #endif
72689 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72690         "lsls	r5, r5, #16\n\t"
72691 #else
72692         "lsl	r5, r5, #16\n\t"
72693 #endif
72694 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72695         "adds	r3, r3, r5\n\t"
72696 #else
72697         "add	r3, r3, r5\n\t"
72698 #endif
72699 #ifdef WOLFSSL_KEIL
72700         "adcs	r4, r4, r6\n\t"
72701 #elif defined(__clang__)
72702         "adcs	r4, r6\n\t"
72703 #else
72704         "adc	r4, r6\n\t"
72705 #endif
72706         "mov	r5, r10\n\t"
72707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72708         "lsrs	r6, %[mp], #16\n\t"
72709 #else
72710         "lsr	r6, %[mp], #16\n\t"
72711 #endif
72712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72713         "lsrs	r5, r5, #16\n\t"
72714 #else
72715         "lsr	r5, r5, #16\n\t"
72716 #endif
72717 #ifdef WOLFSSL_KEIL
72718         "muls	r6, r5, r6\n\t"
72719 #elif defined(__clang__)
72720         "muls	r6, r5\n\t"
72721 #else
72722         "mul	r6, r5\n\t"
72723 #endif
72724 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72725         "adds	r4, r4, r6\n\t"
72726 #else
72727         "add	r4, r4, r6\n\t"
72728 #endif
72729         "uxth	r6, %[mp]\n\t"
72730 #ifdef WOLFSSL_KEIL
72731         "muls	r5, r6, r5\n\t"
72732 #elif defined(__clang__)
72733         "muls	r5, r6\n\t"
72734 #else
72735         "mul	r5, r6\n\t"
72736 #endif
72737 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72738         "lsrs	r6, r5, #16\n\t"
72739 #else
72740         "lsr	r6, r5, #16\n\t"
72741 #endif
72742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72743         "lsls	r5, r5, #16\n\t"
72744 #else
72745         "lsl	r5, r5, #16\n\t"
72746 #endif
72747 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72748         "adds	r3, r3, r5\n\t"
72749 #else
72750         "add	r3, r3, r5\n\t"
72751 #endif
72752 #ifdef WOLFSSL_KEIL
72753         "adcs	r4, r4, r6\n\t"
72754 #elif defined(__clang__)
72755         "adcs	r4, r6\n\t"
72756 #else
72757         "adc	r4, r6\n\t"
72758 #endif
72759         "# Multiply m[0] and mu - Done\n\t"
72760         "\n"
72761     "L_sp_3072_mont_reduce_48_word_%=:\n\t"
72762         "# a[i+j] += m[j] * mu\n\t"
72763         "ldr	r3, [%[a]]\n\t"
72764         "ldm	%[m]!, {%[mp]}\n\t"
72765 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72766         "adds	r3, r3, r4\n\t"
72767 #else
72768         "add	r3, r3, r4\n\t"
72769 #endif
72770         "movs	r4, #0\n\t"
72771 #ifdef WOLFSSL_KEIL
72772         "adcs	r4, r4, r7\n\t"
72773 #elif defined(__clang__)
72774         "adcs	r4, r7\n\t"
72775 #else
72776         "adc	r4, r7\n\t"
72777 #endif
72778         "# Multiply m[j] and mu - Start\n\t"
72779         "mov	r5, r10\n\t"
72780         "uxth	r6, %[mp]\n\t"
72781         "uxth	r5, r5\n\t"
72782 #ifdef WOLFSSL_KEIL
72783         "muls	r6, r5, r6\n\t"
72784 #elif defined(__clang__)
72785         "muls	r6, r5\n\t"
72786 #else
72787         "mul	r6, r5\n\t"
72788 #endif
72789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72790         "adds	r3, r3, r6\n\t"
72791 #else
72792         "add	r3, r3, r6\n\t"
72793 #endif
72794 #ifdef WOLFSSL_KEIL
72795         "adcs	r4, r4, r7\n\t"
72796 #elif defined(__clang__)
72797         "adcs	r4, r7\n\t"
72798 #else
72799         "adc	r4, r7\n\t"
72800 #endif
72801 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72802         "lsrs	r6, %[mp], #16\n\t"
72803 #else
72804         "lsr	r6, %[mp], #16\n\t"
72805 #endif
72806 #ifdef WOLFSSL_KEIL
72807         "muls	r5, r6, r5\n\t"
72808 #elif defined(__clang__)
72809         "muls	r5, r6\n\t"
72810 #else
72811         "mul	r5, r6\n\t"
72812 #endif
72813 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72814         "lsrs	r6, r5, #16\n\t"
72815 #else
72816         "lsr	r6, r5, #16\n\t"
72817 #endif
72818 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72819         "lsls	r5, r5, #16\n\t"
72820 #else
72821         "lsl	r5, r5, #16\n\t"
72822 #endif
72823 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72824         "adds	r3, r3, r5\n\t"
72825 #else
72826         "add	r3, r3, r5\n\t"
72827 #endif
72828 #ifdef WOLFSSL_KEIL
72829         "adcs	r4, r4, r6\n\t"
72830 #elif defined(__clang__)
72831         "adcs	r4, r6\n\t"
72832 #else
72833         "adc	r4, r6\n\t"
72834 #endif
72835         "mov	r5, r10\n\t"
72836 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72837         "lsrs	r6, %[mp], #16\n\t"
72838 #else
72839         "lsr	r6, %[mp], #16\n\t"
72840 #endif
72841 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72842         "lsrs	r5, r5, #16\n\t"
72843 #else
72844         "lsr	r5, r5, #16\n\t"
72845 #endif
72846 #ifdef WOLFSSL_KEIL
72847         "muls	r6, r5, r6\n\t"
72848 #elif defined(__clang__)
72849         "muls	r6, r5\n\t"
72850 #else
72851         "mul	r6, r5\n\t"
72852 #endif
72853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72854         "adds	r4, r4, r6\n\t"
72855 #else
72856         "add	r4, r4, r6\n\t"
72857 #endif
72858         "uxth	r6, %[mp]\n\t"
72859 #ifdef WOLFSSL_KEIL
72860         "muls	r5, r6, r5\n\t"
72861 #elif defined(__clang__)
72862         "muls	r5, r6\n\t"
72863 #else
72864         "mul	r5, r6\n\t"
72865 #endif
72866 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72867         "lsrs	r6, r5, #16\n\t"
72868 #else
72869         "lsr	r6, r5, #16\n\t"
72870 #endif
72871 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72872         "lsls	r5, r5, #16\n\t"
72873 #else
72874         "lsl	r5, r5, #16\n\t"
72875 #endif
72876 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72877         "adds	r3, r3, r5\n\t"
72878 #else
72879         "add	r3, r3, r5\n\t"
72880 #endif
72881 #ifdef WOLFSSL_KEIL
72882         "adcs	r4, r4, r6\n\t"
72883 #elif defined(__clang__)
72884         "adcs	r4, r6\n\t"
72885 #else
72886         "adc	r4, r6\n\t"
72887 #endif
72888         "# Multiply m[j] and mu - Done\n\t"
72889         "stm	%[a]!, {r3}\n\t"
72890         "cmp	%[a], r9\n\t"
72891         "blt	L_sp_3072_mont_reduce_48_word_%=\n\t"
72892         "# a[i+47] += m[47] * mu\n\t"
72893         "ldr	%[mp], [%[m]]\n\t"
72894         "mov	r3, r12\n\t"
72895         "# Multiply m[47] and mu - Start\n\t"
72896         "mov	r5, r10\n\t"
72897         "uxth	r6, %[mp]\n\t"
72898         "uxth	r5, r5\n\t"
72899 #ifdef WOLFSSL_KEIL
72900         "muls	r6, r5, r6\n\t"
72901 #elif defined(__clang__)
72902         "muls	r6, r5\n\t"
72903 #else
72904         "mul	r6, r5\n\t"
72905 #endif
72906 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72907         "adds	r4, r4, r6\n\t"
72908 #else
72909         "add	r4, r4, r6\n\t"
72910 #endif
72911 #ifdef WOLFSSL_KEIL
72912         "adcs	r3, r3, r7\n\t"
72913 #elif defined(__clang__)
72914         "adcs	r3, r7\n\t"
72915 #else
72916         "adc	r3, r7\n\t"
72917 #endif
72918 #ifdef WOLFSSL_KEIL
72919         "adcs	r7, r7, r7\n\t"
72920 #elif defined(__clang__)
72921         "adcs	r7, r7\n\t"
72922 #else
72923         "adc	r7, r7\n\t"
72924 #endif
72925 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72926         "lsrs	r6, %[mp], #16\n\t"
72927 #else
72928         "lsr	r6, %[mp], #16\n\t"
72929 #endif
72930 #ifdef WOLFSSL_KEIL
72931         "muls	r5, r6, r5\n\t"
72932 #elif defined(__clang__)
72933         "muls	r5, r6\n\t"
72934 #else
72935         "mul	r5, r6\n\t"
72936 #endif
72937 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72938         "lsrs	r6, r5, #16\n\t"
72939 #else
72940         "lsr	r6, r5, #16\n\t"
72941 #endif
72942 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72943         "lsls	r5, r5, #16\n\t"
72944 #else
72945         "lsl	r5, r5, #16\n\t"
72946 #endif
72947 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72948         "adds	r4, r4, r5\n\t"
72949 #else
72950         "add	r4, r4, r5\n\t"
72951 #endif
72952 #ifdef WOLFSSL_KEIL
72953         "adcs	r3, r3, r6\n\t"
72954 #elif defined(__clang__)
72955         "adcs	r3, r6\n\t"
72956 #else
72957         "adc	r3, r6\n\t"
72958 #endif
72959 #ifdef WOLFSSL_KEIL
72960         "adcs	r7, r7, r7\n\t"
72961 #elif defined(__clang__)
72962         "adcs	r7, r7\n\t"
72963 #else
72964         "adc	r7, r7\n\t"
72965 #endif
72966         "mov	r5, r10\n\t"
72967 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72968         "lsrs	r6, %[mp], #16\n\t"
72969 #else
72970         "lsr	r6, %[mp], #16\n\t"
72971 #endif
72972 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72973         "lsrs	r5, r5, #16\n\t"
72974 #else
72975         "lsr	r5, r5, #16\n\t"
72976 #endif
72977 #ifdef WOLFSSL_KEIL
72978         "muls	r6, r5, r6\n\t"
72979 #elif defined(__clang__)
72980         "muls	r6, r5\n\t"
72981 #else
72982         "mul	r6, r5\n\t"
72983 #endif
72984 #if defined(__clang__) || defined(WOLFSSL_KEIL)
72985         "adds	r3, r3, r6\n\t"
72986 #else
72987         "add	r3, r3, r6\n\t"
72988 #endif
72989 #ifdef WOLFSSL_KEIL
72990         "adcs	r7, r7, r7\n\t"
72991 #elif defined(__clang__)
72992         "adcs	r7, r7\n\t"
72993 #else
72994         "adc	r7, r7\n\t"
72995 #endif
72996         "uxth	r6, %[mp]\n\t"
72997 #ifdef WOLFSSL_KEIL
72998         "muls	r5, r6, r5\n\t"
72999 #elif defined(__clang__)
73000         "muls	r5, r6\n\t"
73001 #else
73002         "mul	r5, r6\n\t"
73003 #endif
73004 #if defined(__clang__) || defined(WOLFSSL_KEIL)
73005         "lsrs	r6, r5, #16\n\t"
73006 #else
73007         "lsr	r6, r5, #16\n\t"
73008 #endif
73009 #if defined(__clang__) || defined(WOLFSSL_KEIL)
73010         "lsls	r5, r5, #16\n\t"
73011 #else
73012         "lsl	r5, r5, #16\n\t"
73013 #endif
73014 #if defined(__clang__) || defined(WOLFSSL_KEIL)
73015         "adds	r4, r4, r5\n\t"
73016 #else
73017         "add	r4, r4, r5\n\t"
73018 #endif
73019 #ifdef WOLFSSL_KEIL
73020         "adcs	r3, r3, r6\n\t"
73021 #elif defined(__clang__)
73022         "adcs	r3, r6\n\t"
73023 #else
73024         "adc	r3, r6\n\t"
73025 #endif
73026 #ifdef WOLFSSL_KEIL
73027         "adcs	r7, r7, r7\n\t"
73028 #elif defined(__clang__)
73029         "adcs	r7, r7\n\t"
73030 #else
73031         "adc	r7, r7\n\t"
73032 #endif
73033         "# Multiply m[47] and mu - Done\n\t"
73034         "ldr	r5, [%[a]]\n\t"
73035         "ldr	r6, [%[a], #4]\n\t"
73036         "movs	%[mp], #0\n\t"
73037 #if defined(__clang__) || defined(WOLFSSL_KEIL)
73038         "adds	r5, r5, r4\n\t"
73039 #else
73040         "add	r5, r5, r4\n\t"
73041 #endif
73042 #ifdef WOLFSSL_KEIL
73043         "adcs	r6, r6, r3\n\t"
73044 #elif defined(__clang__)
73045         "adcs	r6, r3\n\t"
73046 #else
73047         "adc	r6, r3\n\t"
73048 #endif
73049 #ifdef WOLFSSL_KEIL
73050         "adcs	r7, r7, %[mp]\n\t"
73051 #elif defined(__clang__)
73052         "adcs	r7, %[mp]\n\t"
73053 #else
73054         "adc	r7, %[mp]\n\t"
73055 #endif
73056         "stm	%[a]!, {r5, r6}\n\t"
73057         "# i += 1\n\t"
73058 #if defined(__clang__) || defined(WOLFSSL_KEIL)
73059         "subs	%[a], %[a], #4\n\t"
73060 #else
73061         "sub	%[a], %[a], #4\n\t"
73062 #endif
73063         "movs	r3, #0xbc\n\t"
73064         "mov	r9, %[a]\n\t"
73065 #if defined(__clang__) || defined(WOLFSSL_KEIL)
73066         "subs	%[a], %[a], r3\n\t"
73067 #else
73068         "sub	%[a], %[a], r3\n\t"
73069 #endif
73070         "mov	r12, r7\n\t"
73071         "mov	%[m], lr\n\t"
73072         "cmp	r11, %[a]\n\t"
73073         "bgt	L_sp_3072_mont_reduce_48_mod_%=\n\t"
73074 #if defined(__clang__) || defined(WOLFSSL_KEIL)
73075         "negs	r7, r7\n\t"
73076 #else
73077         "neg	r7, r7\n\t"
73078 #endif
73079         "# Subtract masked modulus\n\t"
73080         "movs	r4, #0xc0\n\t"
73081         "movs	%[mp], #0\n\t"
73082         "movs	r3, #0\n\t"
73083 #if defined(__clang__) || defined(WOLFSSL_KEIL)
73084         "subs	%[a], %[a], r4\n\t"
73085 #else
73086         "sub	%[a], %[a], r4\n\t"
73087 #endif
73088 #ifndef WOLFSSL_SP_LARGE_CODE
73089         "\n"
73090     "L_sp_3072_mont_reduce_48_sub_mask_%=:\n\t"
73091         "ldm	%[m]!, {r6}\n\t"
73092         "movs	r5, #0\n\t"
73093 #ifdef WOLFSSL_KEIL
73094         "ands	r6, r6, r7\n\t"
73095 #elif defined(__clang__)
73096         "ands	r6, r7\n\t"
73097 #else
73098         "and	r6, r7\n\t"
73099 #endif
73100 #if defined(__clang__) || defined(WOLFSSL_KEIL)
73101         "subs	r5, r5, %[mp]\n\t"
73102 #else
73103         "sub	r5, r5, %[mp]\n\t"
73104 #endif
73105         "ldr	r5, [%[a], r4]\n\t"
73106 #ifdef WOLFSSL_KEIL
73107         "sbcs	r5, r5, r6\n\t"
73108 #elif defined(__clang__)
73109         "sbcs	r5, r6\n\t"
73110 #else
73111         "sbc	r5, r6\n\t"
73112 #endif
73113 #ifdef WOLFSSL_KEIL
73114         "sbcs	%[mp], %[mp], %[mp]\n\t"
73115 #elif defined(__clang__)
73116         "sbcs	%[mp], %[mp]\n\t"
73117 #else
73118         "sbc	%[mp], %[mp]\n\t"
73119 #endif
73120         "stm	%[a]!, {r5}\n\t"
73121 #if defined(__clang__) || defined(WOLFSSL_KEIL)
73122         "adds	r3, r3, #4\n\t"
73123 #else
73124         "add	r3, r3, #4\n\t"
73125 #endif
73126         "cmp	r3, r4\n\t"
73127         "blt	L_sp_3072_mont_reduce_48_sub_mask_%=\n\t"
73128 #else /* WOLFSSL_SP_LARGE_CODE */
73129         "ldm	%[m]!, {r6}\n\t"
73130 #ifdef WOLFSSL_KEIL
73131         "ands	r6, r6, r7\n\t"
73132 #elif defined(__clang__)
73133         "ands	r6, r7\n\t"
73134 #else
73135         "and	r6, r7\n\t"
73136 #endif
73137         "ldr	r5, [%[a], r4]\n\t"
73138 #if defined(__clang__) || defined(WOLFSSL_KEIL)
73139         "subs	r5, r5, r6\n\t"
73140 #else
73141         "sub	r5, r5, r6\n\t"
73142 #endif
73143         "stm	%[a]!, {r5}\n\t"
73144         "ldm	%[m]!, {r6}\n\t"
73145 #ifdef WOLFSSL_KEIL
73146         "ands	r6, r6, r7\n\t"
73147 #elif defined(__clang__)
73148         "ands	r6, r7\n\t"
73149 #else
73150         "and	r6, r7\n\t"
73151 #endif
73152         "ldr	r5, [%[a], r4]\n\t"
73153 #ifdef WOLFSSL_KEIL
73154         "sbcs	r5, r5, r6\n\t"
73155 #elif defined(__clang__)
73156         "sbcs	r5, r6\n\t"
73157 #else
73158         "sbc	r5, r6\n\t"
73159 #endif
73160         "stm	%[a]!, {r5}\n\t"
73161         "ldm	%[m]!, {r6}\n\t"
73162 #ifdef WOLFSSL_KEIL
73163         "ands	r6, r6, r7\n\t"
73164 #elif defined(__clang__)
73165         "ands	r6, r7\n\t"
73166 #else
73167         "and	r6, r7\n\t"
73168 #endif
73169         "ldr	r5, [%[a], r4]\n\t"
73170 #ifdef WOLFSSL_KEIL
73171         "sbcs	r5, r5, r6\n\t"
73172 #elif defined(__clang__)
73173         "sbcs	r5, r6\n\t"
73174 #else
73175         "sbc	r5, r6\n\t"
73176 #endif
73177         "stm	%[a]!, {r5}\n\t"
73178         "ldm	%[m]!, {r6}\n\t"
73179 #ifdef WOLFSSL_KEIL
73180         "ands	r6, r6, r7\n\t"
73181 #elif defined(__clang__)
73182         "ands	r6, r7\n\t"
73183 #else
73184         "and	r6, r7\n\t"
73185 #endif
73186         "ldr	r5, [%[a], r4]\n\t"
73187 #ifdef WOLFSSL_KEIL
73188         "sbcs	r5, r5, r6\n\t"
73189 #elif defined(__clang__)
73190         "sbcs	r5, r6\n\t"
73191 #else
73192         "sbc	r5, r6\n\t"
73193 #endif
73194         "stm	%[a]!, {r5}\n\t"
73195         "ldm	%[m]!, {r6}\n\t"
73196 #ifdef WOLFSSL_KEIL
73197         "ands	r6, r6, r7\n\t"
73198 #elif defined(__clang__)
73199         "ands	r6, r7\n\t"
73200 #else
73201         "and	r6, r7\n\t"
73202 #endif
73203         "ldr	r5, [%[a], r4]\n\t"
73204 #ifdef WOLFSSL_KEIL
73205         "sbcs	r5, r5, r6\n\t"
73206 #elif defined(__clang__)
73207         "sbcs	r5, r6\n\t"
73208 #else
73209         "sbc	r5, r6\n\t"
73210 #endif
73211         "stm	%[a]!, {r5}\n\t"
73212         "ldm	%[m]!, {r6}\n\t"
73213 #ifdef WOLFSSL_KEIL
73214         "ands	r6, r6, r7\n\t"
73215 #elif defined(__clang__)
73216         "ands	r6, r7\n\t"
73217 #else
73218         "and	r6, r7\n\t"
73219 #endif
73220         "ldr	r5, [%[a], r4]\n\t"
73221 #ifdef WOLFSSL_KEIL
73222         "sbcs	r5, r5, r6\n\t"
73223 #elif defined(__clang__)
73224         "sbcs	r5, r6\n\t"
73225 #else
73226         "sbc	r5, r6\n\t"
73227 #endif
73228         "stm	%[a]!, {r5}\n\t"
73229         "ldm	%[m]!, {r6}\n\t"
73230 #ifdef WOLFSSL_KEIL
73231         "ands	r6, r6, r7\n\t"
73232 #elif defined(__clang__)
73233         "ands	r6, r7\n\t"
73234 #else
73235         "and	r6, r7\n\t"
73236 #endif
73237         "ldr	r5, [%[a], r4]\n\t"
73238 #ifdef WOLFSSL_KEIL
73239         "sbcs	r5, r5, r6\n\t"
73240 #elif defined(__clang__)
73241         "sbcs	r5, r6\n\t"
73242 #else
73243         "sbc	r5, r6\n\t"
73244 #endif
73245         "stm	%[a]!, {r5}\n\t"
73246         "ldm	%[m]!, {r6}\n\t"
73247 #ifdef WOLFSSL_KEIL
73248         "ands	r6, r6, r7\n\t"
73249 #elif defined(__clang__)
73250         "ands	r6, r7\n\t"
73251 #else
73252         "and	r6, r7\n\t"
73253 #endif
73254         "ldr	r5, [%[a], r4]\n\t"
73255 #ifdef WOLFSSL_KEIL
73256         "sbcs	r5, r5, r6\n\t"
73257 #elif defined(__clang__)
73258         "sbcs	r5, r6\n\t"
73259 #else
73260         "sbc	r5, r6\n\t"
73261 #endif
73262         "stm	%[a]!, {r5}\n\t"
73263         "ldm	%[m]!, {r6}\n\t"
73264 #ifdef WOLFSSL_KEIL
73265         "ands	r6, r6, r7\n\t"
73266 #elif defined(__clang__)
73267         "ands	r6, r7\n\t"
73268 #else
73269         "and	r6, r7\n\t"
73270 #endif
73271         "ldr	r5, [%[a], r4]\n\t"
73272 #ifdef WOLFSSL_KEIL
73273         "sbcs	r5, r5, r6\n\t"
73274 #elif defined(__clang__)
73275         "sbcs	r5, r6\n\t"
73276 #else
73277         "sbc	r5, r6\n\t"
73278 #endif
73279         "stm	%[a]!, {r5}\n\t"
73280         "ldm	%[m]!, {r6}\n\t"
73281 #ifdef WOLFSSL_KEIL
73282         "ands	r6, r6, r7\n\t"
73283 #elif defined(__clang__)
73284         "ands	r6, r7\n\t"
73285 #else
73286         "and	r6, r7\n\t"
73287 #endif
73288         "ldr	r5, [%[a], r4]\n\t"
73289 #ifdef WOLFSSL_KEIL
73290         "sbcs	r5, r5, r6\n\t"
73291 #elif defined(__clang__)
73292         "sbcs	r5, r6\n\t"
73293 #else
73294         "sbc	r5, r6\n\t"
73295 #endif
73296         "stm	%[a]!, {r5}\n\t"
73297         "ldm	%[m]!, {r6}\n\t"
73298 #ifdef WOLFSSL_KEIL
73299         "ands	r6, r6, r7\n\t"
73300 #elif defined(__clang__)
73301         "ands	r6, r7\n\t"
73302 #else
73303         "and	r6, r7\n\t"
73304 #endif
73305         "ldr	r5, [%[a], r4]\n\t"
73306 #ifdef WOLFSSL_KEIL
73307         "sbcs	r5, r5, r6\n\t"
73308 #elif defined(__clang__)
73309         "sbcs	r5, r6\n\t"
73310 #else
73311         "sbc	r5, r6\n\t"
73312 #endif
73313         "stm	%[a]!, {r5}\n\t"
73314         "ldm	%[m]!, {r6}\n\t"
73315 #ifdef WOLFSSL_KEIL
73316         "ands	r6, r6, r7\n\t"
73317 #elif defined(__clang__)
73318         "ands	r6, r7\n\t"
73319 #else
73320         "and	r6, r7\n\t"
73321 #endif
73322         "ldr	r5, [%[a], r4]\n\t"
73323 #ifdef WOLFSSL_KEIL
73324         "sbcs	r5, r5, r6\n\t"
73325 #elif defined(__clang__)
73326         "sbcs	r5, r6\n\t"
73327 #else
73328         "sbc	r5, r6\n\t"
73329 #endif
73330         "stm	%[a]!, {r5}\n\t"
73331         "ldm	%[m]!, {r6}\n\t"
73332 #ifdef WOLFSSL_KEIL
73333         "ands	r6, r6, r7\n\t"
73334 #elif defined(__clang__)
73335         "ands	r6, r7\n\t"
73336 #else
73337         "and	r6, r7\n\t"
73338 #endif
73339         "ldr	r5, [%[a], r4]\n\t"
73340 #ifdef WOLFSSL_KEIL
73341         "sbcs	r5, r5, r6\n\t"
73342 #elif defined(__clang__)
73343         "sbcs	r5, r6\n\t"
73344 #else
73345         "sbc	r5, r6\n\t"
73346 #endif
73347         "stm	%[a]!, {r5}\n\t"
73348         "ldm	%[m]!, {r6}\n\t"
73349 #ifdef WOLFSSL_KEIL
73350         "ands	r6, r6, r7\n\t"
73351 #elif defined(__clang__)
73352         "ands	r6, r7\n\t"
73353 #else
73354         "and	r6, r7\n\t"
73355 #endif
73356         "ldr	r5, [%[a], r4]\n\t"
73357 #ifdef WOLFSSL_KEIL
73358         "sbcs	r5, r5, r6\n\t"
73359 #elif defined(__clang__)
73360         "sbcs	r5, r6\n\t"
73361 #else
73362         "sbc	r5, r6\n\t"
73363 #endif
73364         "stm	%[a]!, {r5}\n\t"
73365         "ldm	%[m]!, {r6}\n\t"
73366 #ifdef WOLFSSL_KEIL
73367         "ands	r6, r6, r7\n\t"
73368 #elif defined(__clang__)
73369         "ands	r6, r7\n\t"
73370 #else
73371         "and	r6, r7\n\t"
73372 #endif
73373         "ldr	r5, [%[a], r4]\n\t"
73374 #ifdef WOLFSSL_KEIL
73375         "sbcs	r5, r5, r6\n\t"
73376 #elif defined(__clang__)
73377         "sbcs	r5, r6\n\t"
73378 #else
73379         "sbc	r5, r6\n\t"
73380 #endif
73381         "stm	%[a]!, {r5}\n\t"
73382         "ldm	%[m]!, {r6}\n\t"
73383 #ifdef WOLFSSL_KEIL
73384         "ands	r6, r6, r7\n\t"
73385 #elif defined(__clang__)
73386         "ands	r6, r7\n\t"
73387 #else
73388         "and	r6, r7\n\t"
73389 #endif
73390         "ldr	r5, [%[a], r4]\n\t"
73391 #ifdef WOLFSSL_KEIL
73392         "sbcs	r5, r5, r6\n\t"
73393 #elif defined(__clang__)
73394         "sbcs	r5, r6\n\t"
73395 #else
73396         "sbc	r5, r6\n\t"
73397 #endif
73398         "stm	%[a]!, {r5}\n\t"
73399         "ldm	%[m]!, {r6}\n\t"
73400 #ifdef WOLFSSL_KEIL
73401         "ands	r6, r6, r7\n\t"
73402 #elif defined(__clang__)
73403         "ands	r6, r7\n\t"
73404 #else
73405         "and	r6, r7\n\t"
73406 #endif
73407         "ldr	r5, [%[a], r4]\n\t"
73408 #ifdef WOLFSSL_KEIL
73409         "sbcs	r5, r5, r6\n\t"
73410 #elif defined(__clang__)
73411         "sbcs	r5, r6\n\t"
73412 #else
73413         "sbc	r5, r6\n\t"
73414 #endif
73415         "stm	%[a]!, {r5}\n\t"
73416         "ldm	%[m]!, {r6}\n\t"
73417 #ifdef WOLFSSL_KEIL
73418         "ands	r6, r6, r7\n\t"
73419 #elif defined(__clang__)
73420         "ands	r6, r7\n\t"
73421 #else
73422         "and	r6, r7\n\t"
73423 #endif
73424         "ldr	r5, [%[a], r4]\n\t"
73425 #ifdef WOLFSSL_KEIL
73426         "sbcs	r5, r5, r6\n\t"
73427 #elif defined(__clang__)
73428         "sbcs	r5, r6\n\t"
73429 #else
73430         "sbc	r5, r6\n\t"
73431 #endif
73432         "stm	%[a]!, {r5}\n\t"
73433         "ldm	%[m]!, {r6}\n\t"
73434 #ifdef WOLFSSL_KEIL
73435         "ands	r6, r6, r7\n\t"
73436 #elif defined(__clang__)
73437         "ands	r6, r7\n\t"
73438 #else
73439         "and	r6, r7\n\t"
73440 #endif
73441         "ldr	r5, [%[a], r4]\n\t"
73442 #ifdef WOLFSSL_KEIL
73443         "sbcs	r5, r5, r6\n\t"
73444 #elif defined(__clang__)
73445         "sbcs	r5, r6\n\t"
73446 #else
73447         "sbc	r5, r6\n\t"
73448 #endif
73449         "stm	%[a]!, {r5}\n\t"
73450         "ldm	%[m]!, {r6}\n\t"
73451 #ifdef WOLFSSL_KEIL
73452         "ands	r6, r6, r7\n\t"
73453 #elif defined(__clang__)
73454         "ands	r6, r7\n\t"
73455 #else
73456         "and	r6, r7\n\t"
73457 #endif
73458         "ldr	r5, [%[a], r4]\n\t"
73459 #ifdef WOLFSSL_KEIL
73460         "sbcs	r5, r5, r6\n\t"
73461 #elif defined(__clang__)
73462         "sbcs	r5, r6\n\t"
73463 #else
73464         "sbc	r5, r6\n\t"
73465 #endif
73466         "stm	%[a]!, {r5}\n\t"
73467         "ldm	%[m]!, {r6}\n\t"
73468 #ifdef WOLFSSL_KEIL
73469         "ands	r6, r6, r7\n\t"
73470 #elif defined(__clang__)
73471         "ands	r6, r7\n\t"
73472 #else
73473         "and	r6, r7\n\t"
73474 #endif
73475         "ldr	r5, [%[a], r4]\n\t"
73476 #ifdef WOLFSSL_KEIL
73477         "sbcs	r5, r5, r6\n\t"
73478 #elif defined(__clang__)
73479         "sbcs	r5, r6\n\t"
73480 #else
73481         "sbc	r5, r6\n\t"
73482 #endif
73483         "stm	%[a]!, {r5}\n\t"
73484         "ldm	%[m]!, {r6}\n\t"
73485 #ifdef WOLFSSL_KEIL
73486         "ands	r6, r6, r7\n\t"
73487 #elif defined(__clang__)
73488         "ands	r6, r7\n\t"
73489 #else
73490         "and	r6, r7\n\t"
73491 #endif
73492         "ldr	r5, [%[a], r4]\n\t"
73493 #ifdef WOLFSSL_KEIL
73494         "sbcs	r5, r5, r6\n\t"
73495 #elif defined(__clang__)
73496         "sbcs	r5, r6\n\t"
73497 #else
73498         "sbc	r5, r6\n\t"
73499 #endif
73500         "stm	%[a]!, {r5}\n\t"
73501         "ldm	%[m]!, {r6}\n\t"
73502 #ifdef WOLFSSL_KEIL
73503         "ands	r6, r6, r7\n\t"
73504 #elif defined(__clang__)
73505         "ands	r6, r7\n\t"
73506 #else
73507         "and	r6, r7\n\t"
73508 #endif
73509         "ldr	r5, [%[a], r4]\n\t"
73510 #ifdef WOLFSSL_KEIL
73511         "sbcs	r5, r5, r6\n\t"
73512 #elif defined(__clang__)
73513         "sbcs	r5, r6\n\t"
73514 #else
73515         "sbc	r5, r6\n\t"
73516 #endif
73517         "stm	%[a]!, {r5}\n\t"
73518         "ldm	%[m]!, {r6}\n\t"
73519 #ifdef WOLFSSL_KEIL
73520         "ands	r6, r6, r7\n\t"
73521 #elif defined(__clang__)
73522         "ands	r6, r7\n\t"
73523 #else
73524         "and	r6, r7\n\t"
73525 #endif
73526         "ldr	r5, [%[a], r4]\n\t"
73527 #ifdef WOLFSSL_KEIL
73528         "sbcs	r5, r5, r6\n\t"
73529 #elif defined(__clang__)
73530         "sbcs	r5, r6\n\t"
73531 #else
73532         "sbc	r5, r6\n\t"
73533 #endif
73534         "stm	%[a]!, {r5}\n\t"
73535         "ldm	%[m]!, {r6}\n\t"
73536 #ifdef WOLFSSL_KEIL
73537         "ands	r6, r6, r7\n\t"
73538 #elif defined(__clang__)
73539         "ands	r6, r7\n\t"
73540 #else
73541         "and	r6, r7\n\t"
73542 #endif
73543         "ldr	r5, [%[a], r4]\n\t"
73544 #ifdef WOLFSSL_KEIL
73545         "sbcs	r5, r5, r6\n\t"
73546 #elif defined(__clang__)
73547         "sbcs	r5, r6\n\t"
73548 #else
73549         "sbc	r5, r6\n\t"
73550 #endif
73551         "stm	%[a]!, {r5}\n\t"
73552         "ldm	%[m]!, {r6}\n\t"
73553 #ifdef WOLFSSL_KEIL
73554         "ands	r6, r6, r7\n\t"
73555 #elif defined(__clang__)
73556         "ands	r6, r7\n\t"
73557 #else
73558         "and	r6, r7\n\t"
73559 #endif
73560         "ldr	r5, [%[a], r4]\n\t"
73561 #ifdef WOLFSSL_KEIL
73562         "sbcs	r5, r5, r6\n\t"
73563 #elif defined(__clang__)
73564         "sbcs	r5, r6\n\t"
73565 #else
73566         "sbc	r5, r6\n\t"
73567 #endif
73568         "stm	%[a]!, {r5}\n\t"
73569         "ldm	%[m]!, {r6}\n\t"
73570 #ifdef WOLFSSL_KEIL
73571         "ands	r6, r6, r7\n\t"
73572 #elif defined(__clang__)
73573         "ands	r6, r7\n\t"
73574 #else
73575         "and	r6, r7\n\t"
73576 #endif
73577         "ldr	r5, [%[a], r4]\n\t"
73578 #ifdef WOLFSSL_KEIL
73579         "sbcs	r5, r5, r6\n\t"
73580 #elif defined(__clang__)
73581         "sbcs	r5, r6\n\t"
73582 #else
73583         "sbc	r5, r6\n\t"
73584 #endif
73585         "stm	%[a]!, {r5}\n\t"
73586         "ldm	%[m]!, {r6}\n\t"
73587 #ifdef WOLFSSL_KEIL
73588         "ands	r6, r6, r7\n\t"
73589 #elif defined(__clang__)
73590         "ands	r6, r7\n\t"
73591 #else
73592         "and	r6, r7\n\t"
73593 #endif
73594         "ldr	r5, [%[a], r4]\n\t"
73595 #ifdef WOLFSSL_KEIL
73596         "sbcs	r5, r5, r6\n\t"
73597 #elif defined(__clang__)
73598         "sbcs	r5, r6\n\t"
73599 #else
73600         "sbc	r5, r6\n\t"
73601 #endif
73602         "stm	%[a]!, {r5}\n\t"
73603         "ldm	%[m]!, {r6}\n\t"
73604 #ifdef WOLFSSL_KEIL
73605         "ands	r6, r6, r7\n\t"
73606 #elif defined(__clang__)
73607         "ands	r6, r7\n\t"
73608 #else
73609         "and	r6, r7\n\t"
73610 #endif
73611         "ldr	r5, [%[a], r4]\n\t"
73612 #ifdef WOLFSSL_KEIL
73613         "sbcs	r5, r5, r6\n\t"
73614 #elif defined(__clang__)
73615         "sbcs	r5, r6\n\t"
73616 #else
73617         "sbc	r5, r6\n\t"
73618 #endif
73619         "stm	%[a]!, {r5}\n\t"
73620         "ldm	%[m]!, {r6}\n\t"
73621 #ifdef WOLFSSL_KEIL
73622         "ands	r6, r6, r7\n\t"
73623 #elif defined(__clang__)
73624         "ands	r6, r7\n\t"
73625 #else
73626         "and	r6, r7\n\t"
73627 #endif
73628         "ldr	r5, [%[a], r4]\n\t"
73629 #ifdef WOLFSSL_KEIL
73630         "sbcs	r5, r5, r6\n\t"
73631 #elif defined(__clang__)
73632         "sbcs	r5, r6\n\t"
73633 #else
73634         "sbc	r5, r6\n\t"
73635 #endif
73636         "stm	%[a]!, {r5}\n\t"
73637         "ldm	%[m]!, {r6}\n\t"
73638 #ifdef WOLFSSL_KEIL
73639         "ands	r6, r6, r7\n\t"
73640 #elif defined(__clang__)
73641         "ands	r6, r7\n\t"
73642 #else
73643         "and	r6, r7\n\t"
73644 #endif
73645         "ldr	r5, [%[a], r4]\n\t"
73646 #ifdef WOLFSSL_KEIL
73647         "sbcs	r5, r5, r6\n\t"
73648 #elif defined(__clang__)
73649         "sbcs	r5, r6\n\t"
73650 #else
73651         "sbc	r5, r6\n\t"
73652 #endif
73653         "stm	%[a]!, {r5}\n\t"
73654         "ldm	%[m]!, {r6}\n\t"
73655 #ifdef WOLFSSL_KEIL
73656         "ands	r6, r6, r7\n\t"
73657 #elif defined(__clang__)
73658         "ands	r6, r7\n\t"
73659 #else
73660         "and	r6, r7\n\t"
73661 #endif
73662         "ldr	r5, [%[a], r4]\n\t"
73663 #ifdef WOLFSSL_KEIL
73664         "sbcs	r5, r5, r6\n\t"
73665 #elif defined(__clang__)
73666         "sbcs	r5, r6\n\t"
73667 #else
73668         "sbc	r5, r6\n\t"
73669 #endif
73670         "stm	%[a]!, {r5}\n\t"
73671         "ldm	%[m]!, {r6}\n\t"
73672 #ifdef WOLFSSL_KEIL
73673         "ands	r6, r6, r7\n\t"
73674 #elif defined(__clang__)
73675         "ands	r6, r7\n\t"
73676 #else
73677         "and	r6, r7\n\t"
73678 #endif
73679         "ldr	r5, [%[a], r4]\n\t"
73680 #ifdef WOLFSSL_KEIL
73681         "sbcs	r5, r5, r6\n\t"
73682 #elif defined(__clang__)
73683         "sbcs	r5, r6\n\t"
73684 #else
73685         "sbc	r5, r6\n\t"
73686 #endif
73687         "stm	%[a]!, {r5}\n\t"
73688         "ldm	%[m]!, {r6}\n\t"
73689 #ifdef WOLFSSL_KEIL
73690         "ands	r6, r6, r7\n\t"
73691 #elif defined(__clang__)
73692         "ands	r6, r7\n\t"
73693 #else
73694         "and	r6, r7\n\t"
73695 #endif
73696         "ldr	r5, [%[a], r4]\n\t"
73697 #ifdef WOLFSSL_KEIL
73698         "sbcs	r5, r5, r6\n\t"
73699 #elif defined(__clang__)
73700         "sbcs	r5, r6\n\t"
73701 #else
73702         "sbc	r5, r6\n\t"
73703 #endif
73704         "stm	%[a]!, {r5}\n\t"
73705         "ldm	%[m]!, {r6}\n\t"
73706 #ifdef WOLFSSL_KEIL
73707         "ands	r6, r6, r7\n\t"
73708 #elif defined(__clang__)
73709         "ands	r6, r7\n\t"
73710 #else
73711         "and	r6, r7\n\t"
73712 #endif
73713         "ldr	r5, [%[a], r4]\n\t"
73714 #ifdef WOLFSSL_KEIL
73715         "sbcs	r5, r5, r6\n\t"
73716 #elif defined(__clang__)
73717         "sbcs	r5, r6\n\t"
73718 #else
73719         "sbc	r5, r6\n\t"
73720 #endif
73721         "stm	%[a]!, {r5}\n\t"
73722         "ldm	%[m]!, {r6}\n\t"
73723 #ifdef WOLFSSL_KEIL
73724         "ands	r6, r6, r7\n\t"
73725 #elif defined(__clang__)
73726         "ands	r6, r7\n\t"
73727 #else
73728         "and	r6, r7\n\t"
73729 #endif
73730         "ldr	r5, [%[a], r4]\n\t"
73731 #ifdef WOLFSSL_KEIL
73732         "sbcs	r5, r5, r6\n\t"
73733 #elif defined(__clang__)
73734         "sbcs	r5, r6\n\t"
73735 #else
73736         "sbc	r5, r6\n\t"
73737 #endif
73738         "stm	%[a]!, {r5}\n\t"
73739         "ldm	%[m]!, {r6}\n\t"
73740 #ifdef WOLFSSL_KEIL
73741         "ands	r6, r6, r7\n\t"
73742 #elif defined(__clang__)
73743         "ands	r6, r7\n\t"
73744 #else
73745         "and	r6, r7\n\t"
73746 #endif
73747         "ldr	r5, [%[a], r4]\n\t"
73748 #ifdef WOLFSSL_KEIL
73749         "sbcs	r5, r5, r6\n\t"
73750 #elif defined(__clang__)
73751         "sbcs	r5, r6\n\t"
73752 #else
73753         "sbc	r5, r6\n\t"
73754 #endif
73755         "stm	%[a]!, {r5}\n\t"
73756         "ldm	%[m]!, {r6}\n\t"
73757 #ifdef WOLFSSL_KEIL
73758         "ands	r6, r6, r7\n\t"
73759 #elif defined(__clang__)
73760         "ands	r6, r7\n\t"
73761 #else
73762         "and	r6, r7\n\t"
73763 #endif
73764         "ldr	r5, [%[a], r4]\n\t"
73765 #ifdef WOLFSSL_KEIL
73766         "sbcs	r5, r5, r6\n\t"
73767 #elif defined(__clang__)
73768         "sbcs	r5, r6\n\t"
73769 #else
73770         "sbc	r5, r6\n\t"
73771 #endif
73772         "stm	%[a]!, {r5}\n\t"
73773         "ldm	%[m]!, {r6}\n\t"
73774 #ifdef WOLFSSL_KEIL
73775         "ands	r6, r6, r7\n\t"
73776 #elif defined(__clang__)
73777         "ands	r6, r7\n\t"
73778 #else
73779         "and	r6, r7\n\t"
73780 #endif
73781         "ldr	r5, [%[a], r4]\n\t"
73782 #ifdef WOLFSSL_KEIL
73783         "sbcs	r5, r5, r6\n\t"
73784 #elif defined(__clang__)
73785         "sbcs	r5, r6\n\t"
73786 #else
73787         "sbc	r5, r6\n\t"
73788 #endif
73789         "stm	%[a]!, {r5}\n\t"
73790         "ldm	%[m]!, {r6}\n\t"
73791 #ifdef WOLFSSL_KEIL
73792         "ands	r6, r6, r7\n\t"
73793 #elif defined(__clang__)
73794         "ands	r6, r7\n\t"
73795 #else
73796         "and	r6, r7\n\t"
73797 #endif
73798         "ldr	r5, [%[a], r4]\n\t"
73799 #ifdef WOLFSSL_KEIL
73800         "sbcs	r5, r5, r6\n\t"
73801 #elif defined(__clang__)
73802         "sbcs	r5, r6\n\t"
73803 #else
73804         "sbc	r5, r6\n\t"
73805 #endif
73806         "stm	%[a]!, {r5}\n\t"
73807         "ldm	%[m]!, {r6}\n\t"
73808 #ifdef WOLFSSL_KEIL
73809         "ands	r6, r6, r7\n\t"
73810 #elif defined(__clang__)
73811         "ands	r6, r7\n\t"
73812 #else
73813         "and	r6, r7\n\t"
73814 #endif
73815         "ldr	r5, [%[a], r4]\n\t"
73816 #ifdef WOLFSSL_KEIL
73817         "sbcs	r5, r5, r6\n\t"
73818 #elif defined(__clang__)
73819         "sbcs	r5, r6\n\t"
73820 #else
73821         "sbc	r5, r6\n\t"
73822 #endif
73823         "stm	%[a]!, {r5}\n\t"
73824         "ldm	%[m]!, {r6}\n\t"
73825 #ifdef WOLFSSL_KEIL
73826         "ands	r6, r6, r7\n\t"
73827 #elif defined(__clang__)
73828         "ands	r6, r7\n\t"
73829 #else
73830         "and	r6, r7\n\t"
73831 #endif
73832         "ldr	r5, [%[a], r4]\n\t"
73833 #ifdef WOLFSSL_KEIL
73834         "sbcs	r5, r5, r6\n\t"
73835 #elif defined(__clang__)
73836         "sbcs	r5, r6\n\t"
73837 #else
73838         "sbc	r5, r6\n\t"
73839 #endif
73840         "stm	%[a]!, {r5}\n\t"
73841         "ldm	%[m]!, {r6}\n\t"
73842 #ifdef WOLFSSL_KEIL
73843         "ands	r6, r6, r7\n\t"
73844 #elif defined(__clang__)
73845         "ands	r6, r7\n\t"
73846 #else
73847         "and	r6, r7\n\t"
73848 #endif
73849         "ldr	r5, [%[a], r4]\n\t"
73850 #ifdef WOLFSSL_KEIL
73851         "sbcs	r5, r5, r6\n\t"
73852 #elif defined(__clang__)
73853         "sbcs	r5, r6\n\t"
73854 #else
73855         "sbc	r5, r6\n\t"
73856 #endif
73857         "stm	%[a]!, {r5}\n\t"
73858         "ldm	%[m]!, {r6}\n\t"
73859 #ifdef WOLFSSL_KEIL
73860         "ands	r6, r6, r7\n\t"
73861 #elif defined(__clang__)
73862         "ands	r6, r7\n\t"
73863 #else
73864         "and	r6, r7\n\t"
73865 #endif
73866         "ldr	r5, [%[a], r4]\n\t"
73867 #ifdef WOLFSSL_KEIL
73868         "sbcs	r5, r5, r6\n\t"
73869 #elif defined(__clang__)
73870         "sbcs	r5, r6\n\t"
73871 #else
73872         "sbc	r5, r6\n\t"
73873 #endif
73874         "stm	%[a]!, {r5}\n\t"
73875         "ldm	%[m]!, {r6}\n\t"
73876 #ifdef WOLFSSL_KEIL
73877         "ands	r6, r6, r7\n\t"
73878 #elif defined(__clang__)
73879         "ands	r6, r7\n\t"
73880 #else
73881         "and	r6, r7\n\t"
73882 #endif
73883         "ldr	r5, [%[a], r4]\n\t"
73884 #ifdef WOLFSSL_KEIL
73885         "sbcs	r5, r5, r6\n\t"
73886 #elif defined(__clang__)
73887         "sbcs	r5, r6\n\t"
73888 #else
73889         "sbc	r5, r6\n\t"
73890 #endif
73891         "stm	%[a]!, {r5}\n\t"
73892         "ldm	%[m]!, {r6}\n\t"
73893 #ifdef WOLFSSL_KEIL
73894         "ands	r6, r6, r7\n\t"
73895 #elif defined(__clang__)
73896         "ands	r6, r7\n\t"
73897 #else
73898         "and	r6, r7\n\t"
73899 #endif
73900         "ldr	r5, [%[a], r4]\n\t"
73901 #ifdef WOLFSSL_KEIL
73902         "sbcs	r5, r5, r6\n\t"
73903 #elif defined(__clang__)
73904         "sbcs	r5, r6\n\t"
73905 #else
73906         "sbc	r5, r6\n\t"
73907 #endif
73908         "stm	%[a]!, {r5}\n\t"
73909         "ldm	%[m]!, {r6}\n\t"
73910 #ifdef WOLFSSL_KEIL
73911         "ands	r6, r6, r7\n\t"
73912 #elif defined(__clang__)
73913         "ands	r6, r7\n\t"
73914 #else
73915         "and	r6, r7\n\t"
73916 #endif
73917         "ldr	r5, [%[a], r4]\n\t"
73918 #ifdef WOLFSSL_KEIL
73919         "sbcs	r5, r5, r6\n\t"
73920 #elif defined(__clang__)
73921         "sbcs	r5, r6\n\t"
73922 #else
73923         "sbc	r5, r6\n\t"
73924 #endif
73925         "stm	%[a]!, {r5}\n\t"
73926         "ldm	%[m]!, {r6}\n\t"
73927 #ifdef WOLFSSL_KEIL
73928         "ands	r6, r6, r7\n\t"
73929 #elif defined(__clang__)
73930         "ands	r6, r7\n\t"
73931 #else
73932         "and	r6, r7\n\t"
73933 #endif
73934         "ldr	r5, [%[a], r4]\n\t"
73935 #ifdef WOLFSSL_KEIL
73936         "sbcs	r5, r5, r6\n\t"
73937 #elif defined(__clang__)
73938         "sbcs	r5, r6\n\t"
73939 #else
73940         "sbc	r5, r6\n\t"
73941 #endif
73942         "stm	%[a]!, {r5}\n\t"
73943 #endif /* WOLFSSL_SP_LARGE_CODE */
73944         : [a] "+r" (a), [m] "+r" (m), [mp] "+r" (mp)
73945         :
73946         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "lr"
73947     );
73948 }
73949 
73950 /* Multiply two Montgomery form numbers mod the modulus (prime).
73951  * (r = a * b mod m)
73952  *
73953  * r   Result of multiplication.
73954  * a   First number to multiply in Montgomery form.
73955  * b   Second number to multiply in Montgomery form.
73956  * m   Modulus (prime).
73957  * mp  Montgomery mulitplier.
73958  */
sp_3072_mont_mul_48(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)73959 static void sp_3072_mont_mul_48(sp_digit* r, const sp_digit* a,
73960         const sp_digit* b, const sp_digit* m, sp_digit mp)
73961 {
73962     sp_3072_mul_48(r, a, b);
73963     sp_3072_mont_reduce_48(r, m, mp);
73964 }
73965 
73966 /* Square the Montgomery form number. (r = a * a mod m)
73967  *
73968  * r   Result of squaring.
73969  * a   Number to square in Montgomery form.
73970  * m   Modulus (prime).
73971  * mp  Montgomery mulitplier.
73972  */
sp_3072_mont_sqr_48(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)73973 static void sp_3072_mont_sqr_48(sp_digit* r, const sp_digit* a,
73974         const sp_digit* m, sp_digit mp)
73975 {
73976     sp_3072_sqr_48(r, a);
73977     sp_3072_mont_reduce_48(r, m, mp);
73978 }
73979 
73980 /* Mul a by digit b into r. (r = a * b)
73981  *
73982  * r  A single precision integer.
73983  * a  A single precision integer.
73984  * b  A single precision digit.
73985  */
sp_3072_mul_d_48(sp_digit * r,const sp_digit * a,sp_digit b)73986 SP_NOINLINE static void sp_3072_mul_d_48(sp_digit* r, const sp_digit* a,
73987         sp_digit b)
73988 {
73989     __asm__ __volatile__ (
73990         "movs	r6, #0xc0\n\t"
73991 #if defined(__clang__) || defined(WOLFSSL_KEIL)
73992         "adds	r6, r6, %[a]\n\t"
73993 #else
73994         "add	r6, r6, %[a]\n\t"
73995 #endif
73996         "mov	r8, %[r]\n\t"
73997         "mov	r9, r6\n\t"
73998         "movs	r3, #0\n\t"
73999         "movs	r4, #0\n\t"
74000         "\n"
74001     "L_sp_3072_mul_d_48_%=:\n\t"
74002         "movs	%[r], #0\n\t"
74003         "movs	r5, #0\n\t"
74004         "# A[] * B\n\t"
74005         "ldrh	r6, [%[a]]\n\t"
74006         "uxth	r7, %[b]\n\t"
74007 #ifdef WOLFSSL_KEIL
74008         "muls	r7, r6, r7\n\t"
74009 #elif defined(__clang__)
74010         "muls	r7, r6\n\t"
74011 #else
74012         "mul	r7, r6\n\t"
74013 #endif
74014 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74015         "adds	r3, r3, r7\n\t"
74016 #else
74017         "add	r3, r3, r7\n\t"
74018 #endif
74019 #ifdef WOLFSSL_KEIL
74020         "adcs	r4, r4, %[r]\n\t"
74021 #elif defined(__clang__)
74022         "adcs	r4, %[r]\n\t"
74023 #else
74024         "adc	r4, %[r]\n\t"
74025 #endif
74026 #ifdef WOLFSSL_KEIL
74027         "adcs	r5, r5, %[r]\n\t"
74028 #elif defined(__clang__)
74029         "adcs	r5, %[r]\n\t"
74030 #else
74031         "adc	r5, %[r]\n\t"
74032 #endif
74033 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74034         "lsrs	r7, %[b], #16\n\t"
74035 #else
74036         "lsr	r7, %[b], #16\n\t"
74037 #endif
74038 #ifdef WOLFSSL_KEIL
74039         "muls	r6, r7, r6\n\t"
74040 #elif defined(__clang__)
74041         "muls	r6, r7\n\t"
74042 #else
74043         "mul	r6, r7\n\t"
74044 #endif
74045 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74046         "lsrs	r7, r6, #16\n\t"
74047 #else
74048         "lsr	r7, r6, #16\n\t"
74049 #endif
74050 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74051         "lsls	r6, r6, #16\n\t"
74052 #else
74053         "lsl	r6, r6, #16\n\t"
74054 #endif
74055 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74056         "adds	r3, r3, r6\n\t"
74057 #else
74058         "add	r3, r3, r6\n\t"
74059 #endif
74060 #ifdef WOLFSSL_KEIL
74061         "adcs	r4, r4, r7\n\t"
74062 #elif defined(__clang__)
74063         "adcs	r4, r7\n\t"
74064 #else
74065         "adc	r4, r7\n\t"
74066 #endif
74067 #ifdef WOLFSSL_KEIL
74068         "adcs	r5, r5, %[r]\n\t"
74069 #elif defined(__clang__)
74070         "adcs	r5, %[r]\n\t"
74071 #else
74072         "adc	r5, %[r]\n\t"
74073 #endif
74074         "ldr	r6, [%[a]]\n\t"
74075 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74076         "lsrs	r6, r6, #16\n\t"
74077 #else
74078         "lsr	r6, r6, #16\n\t"
74079 #endif
74080 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74081         "lsrs	r7, %[b], #16\n\t"
74082 #else
74083         "lsr	r7, %[b], #16\n\t"
74084 #endif
74085 #ifdef WOLFSSL_KEIL
74086         "muls	r7, r6, r7\n\t"
74087 #elif defined(__clang__)
74088         "muls	r7, r6\n\t"
74089 #else
74090         "mul	r7, r6\n\t"
74091 #endif
74092 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74093         "adds	r4, r4, r7\n\t"
74094 #else
74095         "add	r4, r4, r7\n\t"
74096 #endif
74097 #ifdef WOLFSSL_KEIL
74098         "adcs	r5, r5, %[r]\n\t"
74099 #elif defined(__clang__)
74100         "adcs	r5, %[r]\n\t"
74101 #else
74102         "adc	r5, %[r]\n\t"
74103 #endif
74104         "uxth	r7, %[b]\n\t"
74105 #ifdef WOLFSSL_KEIL
74106         "muls	r6, r7, r6\n\t"
74107 #elif defined(__clang__)
74108         "muls	r6, r7\n\t"
74109 #else
74110         "mul	r6, r7\n\t"
74111 #endif
74112 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74113         "lsrs	r7, r6, #16\n\t"
74114 #else
74115         "lsr	r7, r6, #16\n\t"
74116 #endif
74117 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74118         "lsls	r6, r6, #16\n\t"
74119 #else
74120         "lsl	r6, r6, #16\n\t"
74121 #endif
74122 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74123         "adds	r3, r3, r6\n\t"
74124 #else
74125         "add	r3, r3, r6\n\t"
74126 #endif
74127 #ifdef WOLFSSL_KEIL
74128         "adcs	r4, r4, r7\n\t"
74129 #elif defined(__clang__)
74130         "adcs	r4, r7\n\t"
74131 #else
74132         "adc	r4, r7\n\t"
74133 #endif
74134 #ifdef WOLFSSL_KEIL
74135         "adcs	r5, r5, %[r]\n\t"
74136 #elif defined(__clang__)
74137         "adcs	r5, %[r]\n\t"
74138 #else
74139         "adc	r5, %[r]\n\t"
74140 #endif
74141         "# A[] * B - Done\n\t"
74142         "mov	%[r], r8\n\t"
74143         "str	r3, [%[r]]\n\t"
74144         "movs	r3, r4\n\t"
74145         "movs	r4, r5\n\t"
74146 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74147         "adds	%[r], %[r], #4\n\t"
74148 #else
74149         "add	%[r], %[r], #4\n\t"
74150 #endif
74151 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74152         "adds	%[a], %[a], #4\n\t"
74153 #else
74154         "add	%[a], %[a], #4\n\t"
74155 #endif
74156         "mov	r8, %[r]\n\t"
74157         "cmp	%[a], r9\n\t"
74158         "blt	L_sp_3072_mul_d_48_%=\n\t"
74159         "str	r3, [%[r]]\n\t"
74160         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
74161         :
74162         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
74163     );
74164 }
74165 
74166 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
74167  *
74168  * d1   The high order half of the number to divide.
74169  * d0   The low order half of the number to divide.
74170  * div  The dividend.
74171  * returns the result of the division.
74172  *
74173  * Note that this is an approximate div. It may give an answer 1 larger.
74174  */
div_3072_word_48(sp_digit d1,sp_digit d0,sp_digit div)74175 SP_NOINLINE static sp_digit div_3072_word_48(sp_digit d1, sp_digit d0,
74176         sp_digit div)
74177 {
74178     __asm__ __volatile__ (
74179         "movs	r3, #0\n\t"
74180 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74181         "lsrs	r5, %[div], #1\n\t"
74182 #else
74183         "lsr	r5, %[div], #1\n\t"
74184 #endif
74185 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74186         "adds	r5, r5, #1\n\t"
74187 #else
74188         "add	r5, r5, #1\n\t"
74189 #endif
74190         "mov	r8, %[d0]\n\t"
74191         "mov	r9, %[d1]\n\t"
74192         "# Do top 32\n\t"
74193         "movs	r6, r5\n\t"
74194 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74195         "subs	r6, r6, %[d1]\n\t"
74196 #else
74197         "sub	r6, r6, %[d1]\n\t"
74198 #endif
74199 #ifdef WOLFSSL_KEIL
74200         "sbcs	r6, r6, r6\n\t"
74201 #elif defined(__clang__)
74202         "sbcs	r6, r6\n\t"
74203 #else
74204         "sbc	r6, r6\n\t"
74205 #endif
74206 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74207         "adds	r3, r3, r3\n\t"
74208 #else
74209         "add	r3, r3, r3\n\t"
74210 #endif
74211 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74212         "subs	r3, r3, r6\n\t"
74213 #else
74214         "sub	r3, r3, r6\n\t"
74215 #endif
74216 #ifdef WOLFSSL_KEIL
74217         "ands	r6, r6, r5\n\t"
74218 #elif defined(__clang__)
74219         "ands	r6, r5\n\t"
74220 #else
74221         "and	r6, r5\n\t"
74222 #endif
74223 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74224         "subs	%[d1], %[d1], r6\n\t"
74225 #else
74226         "sub	%[d1], %[d1], r6\n\t"
74227 #endif
74228         "movs	r4, #29\n\t"
74229         "\n"
74230     "L_div_3072_word_48_loop_%=:\n\t"
74231 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74232         "lsls	%[d0], %[d0], #1\n\t"
74233 #else
74234         "lsl	%[d0], %[d0], #1\n\t"
74235 #endif
74236 #ifdef WOLFSSL_KEIL
74237         "adcs	%[d1], %[d1], %[d1]\n\t"
74238 #elif defined(__clang__)
74239         "adcs	%[d1], %[d1]\n\t"
74240 #else
74241         "adc	%[d1], %[d1]\n\t"
74242 #endif
74243         "movs	r6, r5\n\t"
74244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74245         "subs	r6, r6, %[d1]\n\t"
74246 #else
74247         "sub	r6, r6, %[d1]\n\t"
74248 #endif
74249 #ifdef WOLFSSL_KEIL
74250         "sbcs	r6, r6, r6\n\t"
74251 #elif defined(__clang__)
74252         "sbcs	r6, r6\n\t"
74253 #else
74254         "sbc	r6, r6\n\t"
74255 #endif
74256 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74257         "adds	r3, r3, r3\n\t"
74258 #else
74259         "add	r3, r3, r3\n\t"
74260 #endif
74261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74262         "subs	r3, r3, r6\n\t"
74263 #else
74264         "sub	r3, r3, r6\n\t"
74265 #endif
74266 #ifdef WOLFSSL_KEIL
74267         "ands	r6, r6, r5\n\t"
74268 #elif defined(__clang__)
74269         "ands	r6, r5\n\t"
74270 #else
74271         "and	r6, r5\n\t"
74272 #endif
74273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74274         "subs	%[d1], %[d1], r6\n\t"
74275 #else
74276         "sub	%[d1], %[d1], r6\n\t"
74277 #endif
74278 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74279         "subs	r4, r4, #1\n\t"
74280 #else
74281         "sub	r4, r4, #1\n\t"
74282 #endif
74283         "bpl	L_div_3072_word_48_loop_%=\n\t"
74284         "movs	r7, #0\n\t"
74285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74286         "adds	r3, r3, r3\n\t"
74287 #else
74288         "add	r3, r3, r3\n\t"
74289 #endif
74290 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74291         "adds	r3, r3, #1\n\t"
74292 #else
74293         "add	r3, r3, #1\n\t"
74294 #endif
74295         "# r * div - Start\n\t"
74296         "uxth	%[d1], r3\n\t"
74297         "uxth	r4, %[div]\n\t"
74298 #ifdef WOLFSSL_KEIL
74299         "muls	r4, %[d1], r4\n\t"
74300 #elif defined(__clang__)
74301         "muls	r4, %[d1]\n\t"
74302 #else
74303         "mul	r4, %[d1]\n\t"
74304 #endif
74305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74306         "lsrs	r6, %[div], #16\n\t"
74307 #else
74308         "lsr	r6, %[div], #16\n\t"
74309 #endif
74310 #ifdef WOLFSSL_KEIL
74311         "muls	%[d1], r6, %[d1]\n\t"
74312 #elif defined(__clang__)
74313         "muls	%[d1], r6\n\t"
74314 #else
74315         "mul	%[d1], r6\n\t"
74316 #endif
74317 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74318         "lsrs	r5, %[d1], #16\n\t"
74319 #else
74320         "lsr	r5, %[d1], #16\n\t"
74321 #endif
74322 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74323         "lsls	%[d1], %[d1], #16\n\t"
74324 #else
74325         "lsl	%[d1], %[d1], #16\n\t"
74326 #endif
74327 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74328         "adds	r4, r4, %[d1]\n\t"
74329 #else
74330         "add	r4, r4, %[d1]\n\t"
74331 #endif
74332 #ifdef WOLFSSL_KEIL
74333         "adcs	r5, r5, r7\n\t"
74334 #elif defined(__clang__)
74335         "adcs	r5, r7\n\t"
74336 #else
74337         "adc	r5, r7\n\t"
74338 #endif
74339 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74340         "lsrs	%[d1], r3, #16\n\t"
74341 #else
74342         "lsr	%[d1], r3, #16\n\t"
74343 #endif
74344 #ifdef WOLFSSL_KEIL
74345         "muls	r6, %[d1], r6\n\t"
74346 #elif defined(__clang__)
74347         "muls	r6, %[d1]\n\t"
74348 #else
74349         "mul	r6, %[d1]\n\t"
74350 #endif
74351 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74352         "adds	r5, r5, r6\n\t"
74353 #else
74354         "add	r5, r5, r6\n\t"
74355 #endif
74356         "uxth	r6, %[div]\n\t"
74357 #ifdef WOLFSSL_KEIL
74358         "muls	%[d1], r6, %[d1]\n\t"
74359 #elif defined(__clang__)
74360         "muls	%[d1], r6\n\t"
74361 #else
74362         "mul	%[d1], r6\n\t"
74363 #endif
74364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74365         "lsrs	r6, %[d1], #16\n\t"
74366 #else
74367         "lsr	r6, %[d1], #16\n\t"
74368 #endif
74369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74370         "lsls	%[d1], %[d1], #16\n\t"
74371 #else
74372         "lsl	%[d1], %[d1], #16\n\t"
74373 #endif
74374 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74375         "adds	r4, r4, %[d1]\n\t"
74376 #else
74377         "add	r4, r4, %[d1]\n\t"
74378 #endif
74379 #ifdef WOLFSSL_KEIL
74380         "adcs	r5, r5, r6\n\t"
74381 #elif defined(__clang__)
74382         "adcs	r5, r6\n\t"
74383 #else
74384         "adc	r5, r6\n\t"
74385 #endif
74386         "# r * div - Done\n\t"
74387         "mov	%[d1], r8\n\t"
74388 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74389         "subs	%[d1], %[d1], r4\n\t"
74390 #else
74391         "sub	%[d1], %[d1], r4\n\t"
74392 #endif
74393         "movs	r4, %[d1]\n\t"
74394         "mov	%[d1], r9\n\t"
74395 #ifdef WOLFSSL_KEIL
74396         "sbcs	%[d1], %[d1], r5\n\t"
74397 #elif defined(__clang__)
74398         "sbcs	%[d1], r5\n\t"
74399 #else
74400         "sbc	%[d1], r5\n\t"
74401 #endif
74402         "movs	r5, %[d1]\n\t"
74403 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74404         "adds	r3, r3, r5\n\t"
74405 #else
74406         "add	r3, r3, r5\n\t"
74407 #endif
74408         "# r * div - Start\n\t"
74409         "uxth	%[d1], r3\n\t"
74410         "uxth	r4, %[div]\n\t"
74411 #ifdef WOLFSSL_KEIL
74412         "muls	r4, %[d1], r4\n\t"
74413 #elif defined(__clang__)
74414         "muls	r4, %[d1]\n\t"
74415 #else
74416         "mul	r4, %[d1]\n\t"
74417 #endif
74418 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74419         "lsrs	r6, %[div], #16\n\t"
74420 #else
74421         "lsr	r6, %[div], #16\n\t"
74422 #endif
74423 #ifdef WOLFSSL_KEIL
74424         "muls	%[d1], r6, %[d1]\n\t"
74425 #elif defined(__clang__)
74426         "muls	%[d1], r6\n\t"
74427 #else
74428         "mul	%[d1], r6\n\t"
74429 #endif
74430 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74431         "lsrs	r5, %[d1], #16\n\t"
74432 #else
74433         "lsr	r5, %[d1], #16\n\t"
74434 #endif
74435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74436         "lsls	%[d1], %[d1], #16\n\t"
74437 #else
74438         "lsl	%[d1], %[d1], #16\n\t"
74439 #endif
74440 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74441         "adds	r4, r4, %[d1]\n\t"
74442 #else
74443         "add	r4, r4, %[d1]\n\t"
74444 #endif
74445 #ifdef WOLFSSL_KEIL
74446         "adcs	r5, r5, r7\n\t"
74447 #elif defined(__clang__)
74448         "adcs	r5, r7\n\t"
74449 #else
74450         "adc	r5, r7\n\t"
74451 #endif
74452 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74453         "lsrs	%[d1], r3, #16\n\t"
74454 #else
74455         "lsr	%[d1], r3, #16\n\t"
74456 #endif
74457 #ifdef WOLFSSL_KEIL
74458         "muls	r6, %[d1], r6\n\t"
74459 #elif defined(__clang__)
74460         "muls	r6, %[d1]\n\t"
74461 #else
74462         "mul	r6, %[d1]\n\t"
74463 #endif
74464 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74465         "adds	r5, r5, r6\n\t"
74466 #else
74467         "add	r5, r5, r6\n\t"
74468 #endif
74469         "uxth	r6, %[div]\n\t"
74470 #ifdef WOLFSSL_KEIL
74471         "muls	%[d1], r6, %[d1]\n\t"
74472 #elif defined(__clang__)
74473         "muls	%[d1], r6\n\t"
74474 #else
74475         "mul	%[d1], r6\n\t"
74476 #endif
74477 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74478         "lsrs	r6, %[d1], #16\n\t"
74479 #else
74480         "lsr	r6, %[d1], #16\n\t"
74481 #endif
74482 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74483         "lsls	%[d1], %[d1], #16\n\t"
74484 #else
74485         "lsl	%[d1], %[d1], #16\n\t"
74486 #endif
74487 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74488         "adds	r4, r4, %[d1]\n\t"
74489 #else
74490         "add	r4, r4, %[d1]\n\t"
74491 #endif
74492 #ifdef WOLFSSL_KEIL
74493         "adcs	r5, r5, r6\n\t"
74494 #elif defined(__clang__)
74495         "adcs	r5, r6\n\t"
74496 #else
74497         "adc	r5, r6\n\t"
74498 #endif
74499         "# r * div - Done\n\t"
74500         "mov	%[d1], r8\n\t"
74501         "mov	r6, r9\n\t"
74502 #ifdef WOLFSSL_KEIL
74503         "subs	r4, %[d1], r4\n\t"
74504 #else
74505 #ifdef __clang__
74506         "subs	r4, %[d1], r4\n\t"
74507 #else
74508         "sub	r4, %[d1], r4\n\t"
74509 #endif
74510 #endif
74511 #ifdef WOLFSSL_KEIL
74512         "sbcs	r6, r6, r5\n\t"
74513 #elif defined(__clang__)
74514         "sbcs	r6, r5\n\t"
74515 #else
74516         "sbc	r6, r5\n\t"
74517 #endif
74518         "movs	r5, r6\n\t"
74519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74520         "adds	r3, r3, r5\n\t"
74521 #else
74522         "add	r3, r3, r5\n\t"
74523 #endif
74524         "# r * div - Start\n\t"
74525         "uxth	%[d1], r3\n\t"
74526         "uxth	r4, %[div]\n\t"
74527 #ifdef WOLFSSL_KEIL
74528         "muls	r4, %[d1], r4\n\t"
74529 #elif defined(__clang__)
74530         "muls	r4, %[d1]\n\t"
74531 #else
74532         "mul	r4, %[d1]\n\t"
74533 #endif
74534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74535         "lsrs	r6, %[div], #16\n\t"
74536 #else
74537         "lsr	r6, %[div], #16\n\t"
74538 #endif
74539 #ifdef WOLFSSL_KEIL
74540         "muls	%[d1], r6, %[d1]\n\t"
74541 #elif defined(__clang__)
74542         "muls	%[d1], r6\n\t"
74543 #else
74544         "mul	%[d1], r6\n\t"
74545 #endif
74546 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74547         "lsrs	r5, %[d1], #16\n\t"
74548 #else
74549         "lsr	r5, %[d1], #16\n\t"
74550 #endif
74551 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74552         "lsls	%[d1], %[d1], #16\n\t"
74553 #else
74554         "lsl	%[d1], %[d1], #16\n\t"
74555 #endif
74556 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74557         "adds	r4, r4, %[d1]\n\t"
74558 #else
74559         "add	r4, r4, %[d1]\n\t"
74560 #endif
74561 #ifdef WOLFSSL_KEIL
74562         "adcs	r5, r5, r7\n\t"
74563 #elif defined(__clang__)
74564         "adcs	r5, r7\n\t"
74565 #else
74566         "adc	r5, r7\n\t"
74567 #endif
74568 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74569         "lsrs	%[d1], r3, #16\n\t"
74570 #else
74571         "lsr	%[d1], r3, #16\n\t"
74572 #endif
74573 #ifdef WOLFSSL_KEIL
74574         "muls	r6, %[d1], r6\n\t"
74575 #elif defined(__clang__)
74576         "muls	r6, %[d1]\n\t"
74577 #else
74578         "mul	r6, %[d1]\n\t"
74579 #endif
74580 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74581         "adds	r5, r5, r6\n\t"
74582 #else
74583         "add	r5, r5, r6\n\t"
74584 #endif
74585         "uxth	r6, %[div]\n\t"
74586 #ifdef WOLFSSL_KEIL
74587         "muls	%[d1], r6, %[d1]\n\t"
74588 #elif defined(__clang__)
74589         "muls	%[d1], r6\n\t"
74590 #else
74591         "mul	%[d1], r6\n\t"
74592 #endif
74593 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74594         "lsrs	r6, %[d1], #16\n\t"
74595 #else
74596         "lsr	r6, %[d1], #16\n\t"
74597 #endif
74598 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74599         "lsls	%[d1], %[d1], #16\n\t"
74600 #else
74601         "lsl	%[d1], %[d1], #16\n\t"
74602 #endif
74603 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74604         "adds	r4, r4, %[d1]\n\t"
74605 #else
74606         "add	r4, r4, %[d1]\n\t"
74607 #endif
74608 #ifdef WOLFSSL_KEIL
74609         "adcs	r5, r5, r6\n\t"
74610 #elif defined(__clang__)
74611         "adcs	r5, r6\n\t"
74612 #else
74613         "adc	r5, r6\n\t"
74614 #endif
74615         "# r * div - Done\n\t"
74616         "mov	%[d1], r8\n\t"
74617         "mov	r6, r9\n\t"
74618 #ifdef WOLFSSL_KEIL
74619         "subs	r4, %[d1], r4\n\t"
74620 #else
74621 #ifdef __clang__
74622         "subs	r4, %[d1], r4\n\t"
74623 #else
74624         "sub	r4, %[d1], r4\n\t"
74625 #endif
74626 #endif
74627 #ifdef WOLFSSL_KEIL
74628         "sbcs	r6, r6, r5\n\t"
74629 #elif defined(__clang__)
74630         "sbcs	r6, r5\n\t"
74631 #else
74632         "sbc	r6, r5\n\t"
74633 #endif
74634         "movs	r5, r6\n\t"
74635 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74636         "adds	r3, r3, r5\n\t"
74637 #else
74638         "add	r3, r3, r5\n\t"
74639 #endif
74640         "movs	r6, %[div]\n\t"
74641 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74642         "subs	r6, r6, r4\n\t"
74643 #else
74644         "sub	r6, r6, r4\n\t"
74645 #endif
74646 #ifdef WOLFSSL_KEIL
74647         "sbcs	r6, r6, r6\n\t"
74648 #elif defined(__clang__)
74649         "sbcs	r6, r6\n\t"
74650 #else
74651         "sbc	r6, r6\n\t"
74652 #endif
74653 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74654         "subs	r3, r3, r6\n\t"
74655 #else
74656         "sub	r3, r3, r6\n\t"
74657 #endif
74658         "movs	%[d1], r3\n\t"
74659         : [d1] "+r" (d1), [d0] "+r" (d0), [div] "+r" (div)
74660         :
74661         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
74662     );
74663     return (uint32_t)(size_t)d1;
74664 }
74665 
74666 /* Compare a with b in constant time.
74667  *
74668  * a  A single precision integer.
74669  * b  A single precision integer.
74670  * return -ve, 0 or +ve if a is less than, equal to or greater than b
74671  * respectively.
74672  */
sp_3072_cmp_48(const sp_digit * a,const sp_digit * b)74673 SP_NOINLINE static sp_int32 sp_3072_cmp_48(const sp_digit* a, const sp_digit* b)
74674 {
74675     __asm__ __volatile__ (
74676         "movs	r2, #0\n\t"
74677         "movs	r3, #0\n\t"
74678 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74679         "mvns	r3, r3\n\t"
74680 #else
74681         "mvn	r3, r3\n\t"
74682 #endif
74683         "movs	r6, #0xbc\n\t"
74684         "\n"
74685     "L_sp_3072_cmp_48_words_%=:\n\t"
74686         "ldr	r7, [%[a], r6]\n\t"
74687         "ldr	r5, [%[b], r6]\n\t"
74688 #ifdef WOLFSSL_KEIL
74689         "ands	r7, r7, r3\n\t"
74690 #elif defined(__clang__)
74691         "ands	r7, r3\n\t"
74692 #else
74693         "and	r7, r3\n\t"
74694 #endif
74695 #ifdef WOLFSSL_KEIL
74696         "ands	r5, r5, r3\n\t"
74697 #elif defined(__clang__)
74698         "ands	r5, r3\n\t"
74699 #else
74700         "and	r5, r3\n\t"
74701 #endif
74702         "movs	r4, r7\n\t"
74703 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74704         "subs	r7, r7, r5\n\t"
74705 #else
74706         "sub	r7, r7, r5\n\t"
74707 #endif
74708 #ifdef WOLFSSL_KEIL
74709         "sbcs	r7, r7, r7\n\t"
74710 #elif defined(__clang__)
74711         "sbcs	r7, r7\n\t"
74712 #else
74713         "sbc	r7, r7\n\t"
74714 #endif
74715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74716         "adds	r2, r2, r7\n\t"
74717 #else
74718         "add	r2, r2, r7\n\t"
74719 #endif
74720 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74721         "mvns	r7, r7\n\t"
74722 #else
74723         "mvn	r7, r7\n\t"
74724 #endif
74725 #ifdef WOLFSSL_KEIL
74726         "ands	r3, r3, r7\n\t"
74727 #elif defined(__clang__)
74728         "ands	r3, r7\n\t"
74729 #else
74730         "and	r3, r7\n\t"
74731 #endif
74732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74733         "subs	r5, r5, r4\n\t"
74734 #else
74735         "sub	r5, r5, r4\n\t"
74736 #endif
74737 #ifdef WOLFSSL_KEIL
74738         "sbcs	r7, r7, r7\n\t"
74739 #elif defined(__clang__)
74740         "sbcs	r7, r7\n\t"
74741 #else
74742         "sbc	r7, r7\n\t"
74743 #endif
74744 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74745         "subs	r2, r2, r7\n\t"
74746 #else
74747         "sub	r2, r2, r7\n\t"
74748 #endif
74749 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74750         "mvns	r7, r7\n\t"
74751 #else
74752         "mvn	r7, r7\n\t"
74753 #endif
74754 #ifdef WOLFSSL_KEIL
74755         "ands	r3, r3, r7\n\t"
74756 #elif defined(__clang__)
74757         "ands	r3, r7\n\t"
74758 #else
74759         "and	r3, r7\n\t"
74760 #endif
74761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
74762         "subs	r6, r6, #4\n\t"
74763 #else
74764         "sub	r6, r6, #4\n\t"
74765 #endif
74766         "cmp	r6, #0\n\t"
74767         "bge	L_sp_3072_cmp_48_words_%=\n\t"
74768         "movs	%[a], r2\n\t"
74769         : [a] "+r" (a), [b] "+r" (b)
74770         :
74771         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
74772     );
74773     return (uint32_t)(size_t)a;
74774 }
74775 
74776 /* Divide d in a and put remainder into r (m*d + r = a)
74777  * m is not calculated as it is not needed at this time.
74778  *
74779  * a  Number to be divided.
74780  * d  Number to divide with.
74781  * m  Multiplier result.
74782  * r  Remainder from the division.
74783  * returns MP_OKAY indicating success.
74784  */
sp_3072_div_48(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)74785 static WC_INLINE int sp_3072_div_48(const sp_digit* a, const sp_digit* d, sp_digit* m,
74786         sp_digit* r)
74787 {
74788     sp_digit t1[96], t2[49];
74789     sp_digit div, r1;
74790     int i;
74791 
74792     (void)m;
74793 
74794     div = d[47];
74795     XMEMCPY(t1, a, sizeof(*t1) * 2 * 48);
74796     for (i=47; i>=0; i--) {
74797         sp_digit hi = t1[48 + i] - (t1[48 + i] == div);
74798         r1 = div_3072_word_48(hi, t1[48 + i - 1], div);
74799 
74800         sp_3072_mul_d_48(t2, d, r1);
74801         t1[48 + i] += sp_3072_sub_in_place_48(&t1[i], t2);
74802         t1[48 + i] -= t2[48];
74803         sp_3072_mask_48(t2, d, t1[48 + i]);
74804         t1[48 + i] += sp_3072_add_48(&t1[i], &t1[i], t2);
74805         sp_3072_mask_48(t2, d, t1[48 + i]);
74806         t1[48 + i] += sp_3072_add_48(&t1[i], &t1[i], t2);
74807     }
74808 
74809     r1 = sp_3072_cmp_48(t1, d) >= 0;
74810     sp_3072_cond_sub_48(r, t1, d, (sp_digit)0 - r1);
74811 
74812     return MP_OKAY;
74813 }
74814 
74815 /* Reduce a modulo m into r. (r = a mod m)
74816  *
74817  * r  A single precision number that is the reduced result.
74818  * a  A single precision number that is to be reduced.
74819  * m  A single precision number that is the modulus to reduce with.
74820  * returns MP_OKAY indicating success.
74821  */
sp_3072_mod_48(sp_digit * r,const sp_digit * a,const sp_digit * m)74822 static WC_INLINE int sp_3072_mod_48(sp_digit* r, const sp_digit* a, const sp_digit* m)
74823 {
74824     return sp_3072_div_48(a, m, NULL, r);
74825 }
74826 
74827 #ifdef WOLFSSL_SP_SMALL
74828 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
74829  *
74830  * r     A single precision number that is the result of the operation.
74831  * a     A single precision number being exponentiated.
74832  * e     A single precision number that is the exponent.
74833  * bits  The number of bits in the exponent.
74834  * m     A single precision number that is the modulus.
74835  * returns  0 on success.
74836  * returns  MEMORY_E on dynamic memory allocation failure.
74837  * returns  MP_VAL when base is even or exponent is 0.
74838  */
sp_3072_mod_exp_48(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)74839 static int sp_3072_mod_exp_48(sp_digit* r, const sp_digit* a, const sp_digit* e,
74840         int bits, const sp_digit* m, int reduceA)
74841 {
74842 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
74843     sp_digit* td = NULL;
74844 #else
74845     sp_digit td[16 * 96];
74846 #endif
74847     sp_digit* t[16];
74848     sp_digit* norm = NULL;
74849     sp_digit mp = 1;
74850     sp_digit n;
74851     sp_digit mask;
74852     int i;
74853     int c;
74854     byte y;
74855     int err = MP_OKAY;
74856 
74857     if ((m[0] & 1) == 0) {
74858         err = MP_VAL;
74859     }
74860     else if (bits == 0) {
74861         err = MP_VAL;
74862     }
74863 
74864 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
74865     if (err == MP_OKAY) {
74866         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (16 * 96), NULL,
74867                                 DYNAMIC_TYPE_TMP_BUFFER);
74868         if (td == NULL)
74869             err = MEMORY_E;
74870     }
74871 #endif
74872 
74873     if (err == MP_OKAY) {
74874         norm = td;
74875         for (i=0; i<16; i++) {
74876             t[i] = td + i * 96;
74877         }
74878 
74879         sp_3072_mont_setup(m, &mp);
74880         sp_3072_mont_norm_48(norm, m);
74881 
74882         XMEMSET(t[1], 0, sizeof(sp_digit) * 48U);
74883         if (reduceA != 0) {
74884             err = sp_3072_mod_48(t[1] + 48, a, m);
74885             if (err == MP_OKAY) {
74886                 err = sp_3072_mod_48(t[1], t[1], m);
74887             }
74888         }
74889         else {
74890             XMEMCPY(t[1] + 48, a, sizeof(sp_digit) * 48);
74891             err = sp_3072_mod_48(t[1], t[1], m);
74892         }
74893     }
74894 
74895     if (err == MP_OKAY) {
74896         sp_3072_mont_sqr_48(t[ 2], t[ 1], m, mp);
74897         sp_3072_mont_mul_48(t[ 3], t[ 2], t[ 1], m, mp);
74898         sp_3072_mont_sqr_48(t[ 4], t[ 2], m, mp);
74899         sp_3072_mont_mul_48(t[ 5], t[ 3], t[ 2], m, mp);
74900         sp_3072_mont_sqr_48(t[ 6], t[ 3], m, mp);
74901         sp_3072_mont_mul_48(t[ 7], t[ 4], t[ 3], m, mp);
74902         sp_3072_mont_sqr_48(t[ 8], t[ 4], m, mp);
74903         sp_3072_mont_mul_48(t[ 9], t[ 5], t[ 4], m, mp);
74904         sp_3072_mont_sqr_48(t[10], t[ 5], m, mp);
74905         sp_3072_mont_mul_48(t[11], t[ 6], t[ 5], m, mp);
74906         sp_3072_mont_sqr_48(t[12], t[ 6], m, mp);
74907         sp_3072_mont_mul_48(t[13], t[ 7], t[ 6], m, mp);
74908         sp_3072_mont_sqr_48(t[14], t[ 7], m, mp);
74909         sp_3072_mont_mul_48(t[15], t[ 8], t[ 7], m, mp);
74910 
74911         i = (bits - 1) / 32;
74912         n = e[i--];
74913         c = bits & 31;
74914         if (c == 0) {
74915             c = 32;
74916         }
74917         c -= bits % 4;
74918         if (c == 32) {
74919             c = 28;
74920         }
74921         if (c < 0) {
74922             /* Number of bits in top word is less than number needed. */
74923             c = -c;
74924             y = (byte)(n << c);
74925             n = e[i--];
74926             y |= (byte)(n >> (64 - c));
74927             n <<= c;
74928             c = 64 - c;
74929         }
74930         else {
74931             y = (byte)(n >> c);
74932             n <<= 32 - c;
74933         }
74934         XMEMCPY(r, t[y], sizeof(sp_digit) * 48);
74935         for (; i>=0 || c>=4; ) {
74936             if (c == 0) {
74937                 n = e[i--];
74938                 y = (byte)(n >> 28);
74939                 n <<= 4;
74940                 c = 28;
74941             }
74942             else if (c < 4) {
74943                 y = (byte)(n >> 28);
74944                 n = e[i--];
74945                 c = 4 - c;
74946                 y |= (byte)(n >> (32 - c));
74947                 n <<= c;
74948                 c = 32 - c;
74949             }
74950             else {
74951                 y = (byte)((n >> 28) & 0xf);
74952                 n <<= 4;
74953                 c -= 4;
74954             }
74955 
74956             sp_3072_mont_sqr_48(r, r, m, mp);
74957             sp_3072_mont_sqr_48(r, r, m, mp);
74958             sp_3072_mont_sqr_48(r, r, m, mp);
74959             sp_3072_mont_sqr_48(r, r, m, mp);
74960 
74961             sp_3072_mont_mul_48(r, r, t[y], m, mp);
74962         }
74963 
74964         XMEMSET(&r[48], 0, sizeof(sp_digit) * 48U);
74965         sp_3072_mont_reduce_48(r, m, mp);
74966 
74967         mask = 0 - (sp_3072_cmp_48(r, m) >= 0);
74968         sp_3072_cond_sub_48(r, r, m, mask);
74969     }
74970 
74971 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
74972     if (td != NULL)
74973         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
74974 #endif
74975 
74976     return err;
74977 }
74978 #else
74979 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
74980  *
74981  * r     A single precision number that is the result of the operation.
74982  * a     A single precision number being exponentiated.
74983  * e     A single precision number that is the exponent.
74984  * bits  The number of bits in the exponent.
74985  * m     A single precision number that is the modulus.
74986  * returns  0 on success.
74987  * returns  MEMORY_E on dynamic memory allocation failure.
74988  * returns  MP_VAL when base is even or exponent is 0.
74989  */
sp_3072_mod_exp_48(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)74990 static int sp_3072_mod_exp_48(sp_digit* r, const sp_digit* a, const sp_digit* e,
74991         int bits, const sp_digit* m, int reduceA)
74992 {
74993 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
74994     sp_digit* td = NULL;
74995 #else
74996     sp_digit td[32 * 96];
74997 #endif
74998     sp_digit* t[32];
74999     sp_digit* norm = NULL;
75000     sp_digit mp = 1;
75001     sp_digit n;
75002     sp_digit mask;
75003     int i;
75004     int c;
75005     byte y;
75006     int err = MP_OKAY;
75007 
75008     if ((m[0] & 1) == 0) {
75009         err = MP_VAL;
75010     }
75011     else if (bits == 0) {
75012         err = MP_VAL;
75013     }
75014 
75015 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
75016     if (err == MP_OKAY) {
75017         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (32 * 96), NULL,
75018                                 DYNAMIC_TYPE_TMP_BUFFER);
75019         if (td == NULL)
75020             err = MEMORY_E;
75021     }
75022 #endif
75023 
75024     if (err == MP_OKAY) {
75025         norm = td;
75026         for (i=0; i<32; i++) {
75027             t[i] = td + i * 96;
75028         }
75029 
75030         sp_3072_mont_setup(m, &mp);
75031         sp_3072_mont_norm_48(norm, m);
75032 
75033         XMEMSET(t[1], 0, sizeof(sp_digit) * 48U);
75034         if (reduceA != 0) {
75035             err = sp_3072_mod_48(t[1] + 48, a, m);
75036             if (err == MP_OKAY) {
75037                 err = sp_3072_mod_48(t[1], t[1], m);
75038             }
75039         }
75040         else {
75041             XMEMCPY(t[1] + 48, a, sizeof(sp_digit) * 48);
75042             err = sp_3072_mod_48(t[1], t[1], m);
75043         }
75044     }
75045 
75046     if (err == MP_OKAY) {
75047         sp_3072_mont_sqr_48(t[ 2], t[ 1], m, mp);
75048         sp_3072_mont_mul_48(t[ 3], t[ 2], t[ 1], m, mp);
75049         sp_3072_mont_sqr_48(t[ 4], t[ 2], m, mp);
75050         sp_3072_mont_mul_48(t[ 5], t[ 3], t[ 2], m, mp);
75051         sp_3072_mont_sqr_48(t[ 6], t[ 3], m, mp);
75052         sp_3072_mont_mul_48(t[ 7], t[ 4], t[ 3], m, mp);
75053         sp_3072_mont_sqr_48(t[ 8], t[ 4], m, mp);
75054         sp_3072_mont_mul_48(t[ 9], t[ 5], t[ 4], m, mp);
75055         sp_3072_mont_sqr_48(t[10], t[ 5], m, mp);
75056         sp_3072_mont_mul_48(t[11], t[ 6], t[ 5], m, mp);
75057         sp_3072_mont_sqr_48(t[12], t[ 6], m, mp);
75058         sp_3072_mont_mul_48(t[13], t[ 7], t[ 6], m, mp);
75059         sp_3072_mont_sqr_48(t[14], t[ 7], m, mp);
75060         sp_3072_mont_mul_48(t[15], t[ 8], t[ 7], m, mp);
75061         sp_3072_mont_sqr_48(t[16], t[ 8], m, mp);
75062         sp_3072_mont_mul_48(t[17], t[ 9], t[ 8], m, mp);
75063         sp_3072_mont_sqr_48(t[18], t[ 9], m, mp);
75064         sp_3072_mont_mul_48(t[19], t[10], t[ 9], m, mp);
75065         sp_3072_mont_sqr_48(t[20], t[10], m, mp);
75066         sp_3072_mont_mul_48(t[21], t[11], t[10], m, mp);
75067         sp_3072_mont_sqr_48(t[22], t[11], m, mp);
75068         sp_3072_mont_mul_48(t[23], t[12], t[11], m, mp);
75069         sp_3072_mont_sqr_48(t[24], t[12], m, mp);
75070         sp_3072_mont_mul_48(t[25], t[13], t[12], m, mp);
75071         sp_3072_mont_sqr_48(t[26], t[13], m, mp);
75072         sp_3072_mont_mul_48(t[27], t[14], t[13], m, mp);
75073         sp_3072_mont_sqr_48(t[28], t[14], m, mp);
75074         sp_3072_mont_mul_48(t[29], t[15], t[14], m, mp);
75075         sp_3072_mont_sqr_48(t[30], t[15], m, mp);
75076         sp_3072_mont_mul_48(t[31], t[16], t[15], m, mp);
75077 
75078         i = (bits - 1) / 32;
75079         n = e[i--];
75080         c = bits & 31;
75081         if (c == 0) {
75082             c = 32;
75083         }
75084         c -= bits % 5;
75085         if (c == 32) {
75086             c = 27;
75087         }
75088         if (c < 0) {
75089             /* Number of bits in top word is less than number needed. */
75090             c = -c;
75091             y = (byte)(n << c);
75092             n = e[i--];
75093             y |= (byte)(n >> (64 - c));
75094             n <<= c;
75095             c = 64 - c;
75096         }
75097         else {
75098             y = (byte)(n >> c);
75099             n <<= 32 - c;
75100         }
75101         XMEMCPY(r, t[y], sizeof(sp_digit) * 48);
75102         for (; i>=0 || c>=5; ) {
75103             if (c == 0) {
75104                 n = e[i--];
75105                 y = (byte)(n >> 27);
75106                 n <<= 5;
75107                 c = 27;
75108             }
75109             else if (c < 5) {
75110                 y = (byte)(n >> 27);
75111                 n = e[i--];
75112                 c = 5 - c;
75113                 y |= (byte)(n >> (32 - c));
75114                 n <<= c;
75115                 c = 32 - c;
75116             }
75117             else {
75118                 y = (byte)((n >> 27) & 0x1f);
75119                 n <<= 5;
75120                 c -= 5;
75121             }
75122 
75123             sp_3072_mont_sqr_48(r, r, m, mp);
75124             sp_3072_mont_sqr_48(r, r, m, mp);
75125             sp_3072_mont_sqr_48(r, r, m, mp);
75126             sp_3072_mont_sqr_48(r, r, m, mp);
75127             sp_3072_mont_sqr_48(r, r, m, mp);
75128 
75129             sp_3072_mont_mul_48(r, r, t[y], m, mp);
75130         }
75131 
75132         XMEMSET(&r[48], 0, sizeof(sp_digit) * 48U);
75133         sp_3072_mont_reduce_48(r, m, mp);
75134 
75135         mask = 0 - (sp_3072_cmp_48(r, m) >= 0);
75136         sp_3072_cond_sub_48(r, r, m, mask);
75137     }
75138 
75139 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
75140     if (td != NULL)
75141         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
75142 #endif
75143 
75144     return err;
75145 }
75146 #endif /* WOLFSSL_SP_SMALL */
75147 
75148 #endif /* (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) | WOLFSSL_HAVE_SP_DH */
75149 
75150 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
75151 /* r = 2^n mod m where n is the number of bits to reduce by.
75152  * Given m must be 3072 bits, just need to subtract.
75153  *
75154  * r  A single precision number.
75155  * m  A single precision number.
75156  */
sp_3072_mont_norm_96(sp_digit * r,const sp_digit * m)75157 static void sp_3072_mont_norm_96(sp_digit* r, const sp_digit* m)
75158 {
75159     XMEMSET(r, 0, sizeof(sp_digit) * 96);
75160 
75161     /* r = 2^n mod m */
75162     sp_3072_sub_in_place_96(r, m);
75163 }
75164 
75165 #endif /* (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) | WOLFSSL_HAVE_SP_DH */
75166 /* Conditionally subtract b from a using the mask m.
75167  * m is -1 to subtract and 0 when not copying.
75168  *
75169  * r  A single precision number representing condition subtract result.
75170  * a  A single precision number to subtract from.
75171  * b  A single precision number to subtract.
75172  * m  Mask value to apply.
75173  */
sp_3072_cond_sub_96(sp_digit * r,const sp_digit * a,const sp_digit * b,sp_digit m)75174 SP_NOINLINE static sp_digit sp_3072_cond_sub_96(sp_digit* r, const sp_digit* a,
75175         const sp_digit* b, sp_digit m)
75176 {
75177     __asm__ __volatile__ (
75178         "movs	r4, #0\n\t"
75179         "movs	r5, #0xff\n\t"
75180 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75181         "adds	r5, r5, #0x81\n\t"
75182 #else
75183         "add	r5, r5, #0x81\n\t"
75184 #endif
75185         "mov	r8, r5\n\t"
75186         "movs	r7, #0\n\t"
75187         "\n"
75188     "L_sp_3072_cond_sub_96_words_%=:\n\t"
75189         "ldr	r6, [%[b], r7]\n\t"
75190 #ifdef WOLFSSL_KEIL
75191         "ands	r6, r6, %[m]\n\t"
75192 #elif defined(__clang__)
75193         "ands	r6, %[m]\n\t"
75194 #else
75195         "and	r6, %[m]\n\t"
75196 #endif
75197         "movs	r5, #0\n\t"
75198 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75199         "subs	r5, r5, r4\n\t"
75200 #else
75201         "sub	r5, r5, r4\n\t"
75202 #endif
75203         "ldr	r5, [%[a], r7]\n\t"
75204 #ifdef WOLFSSL_KEIL
75205         "sbcs	r5, r5, r6\n\t"
75206 #elif defined(__clang__)
75207         "sbcs	r5, r6\n\t"
75208 #else
75209         "sbc	r5, r6\n\t"
75210 #endif
75211 #ifdef WOLFSSL_KEIL
75212         "sbcs	r4, r4, r4\n\t"
75213 #elif defined(__clang__)
75214         "sbcs	r4, r4\n\t"
75215 #else
75216         "sbc	r4, r4\n\t"
75217 #endif
75218         "str	r5, [%[r], r7]\n\t"
75219 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75220         "adds	r7, r7, #4\n\t"
75221 #else
75222         "add	r7, r7, #4\n\t"
75223 #endif
75224         "cmp	r7, r8\n\t"
75225         "blt	L_sp_3072_cond_sub_96_words_%=\n\t"
75226         "movs	%[r], r4\n\t"
75227         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
75228         :
75229         : "memory", "r4", "r5", "r6", "r7", "r8"
75230     );
75231     return (uint32_t)(size_t)r;
75232 }
75233 
75234 /* Reduce the number back to 3072 bits using Montgomery reduction.
75235  *
75236  * a   A single precision number to reduce in place.
75237  * m   The single precision number representing the modulus.
75238  * mp  The digit representing the negative inverse of m mod 2^n.
75239  */
sp_3072_mont_reduce_96(sp_digit * a,const sp_digit * m,sp_digit mp)75240 SP_NOINLINE static void sp_3072_mont_reduce_96(sp_digit* a, const sp_digit* m,
75241         sp_digit mp)
75242 {
75243     __asm__ __volatile__ (
75244         "movs	r7, #0\n\t"
75245         "mov	r8, %[mp]\n\t"
75246         "mov	r12, r7\n\t"
75247         "mov	lr, %[m]\n\t"
75248         "mov	r9, %[a]\n\t"
75249         "mov	r11, %[a]\n\t"
75250         "movs	r5, #0xff\n\t"
75251 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75252         "adds	r5, r5, #0x7d\n\t"
75253 #else
75254         "add	r5, r5, #0x7d\n\t"
75255 #endif
75256         "movs	r6, #0xff\n\t"
75257 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75258         "adds	r6, r6, #0x81\n\t"
75259 #else
75260         "add	r6, r6, #0x81\n\t"
75261 #endif
75262         "add	r9, r9, r5\n\t"
75263         "add	r11, r11, r6\n\t"
75264         "\n"
75265     "L_sp_3072_mont_reduce_96_mod_%=:\n\t"
75266         "movs	r7, #0\n\t"
75267         "movs	r4, #0\n\t"
75268         "# a[i] += m[0] * mu\n\t"
75269         "ldm	%[m]!, {%[mp]}\n\t"
75270         "ldm	%[a]!, {r3}\n\t"
75271         "# mu = a[i] * mp\n\t"
75272         "mov	r5, r8\n\t"
75273 #ifdef WOLFSSL_KEIL
75274         "muls	r5, r3, r5\n\t"
75275 #elif defined(__clang__)
75276         "muls	r5, r3\n\t"
75277 #else
75278         "mul	r5, r3\n\t"
75279 #endif
75280         "mov	r10, r5\n\t"
75281         "# Multiply m[0] and mu - Start\n\t"
75282         "mov	r5, r10\n\t"
75283         "uxth	r6, %[mp]\n\t"
75284         "uxth	r5, r5\n\t"
75285 #ifdef WOLFSSL_KEIL
75286         "muls	r6, r5, r6\n\t"
75287 #elif defined(__clang__)
75288         "muls	r6, r5\n\t"
75289 #else
75290         "mul	r6, r5\n\t"
75291 #endif
75292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75293         "adds	r3, r3, r6\n\t"
75294 #else
75295         "add	r3, r3, r6\n\t"
75296 #endif
75297 #ifdef WOLFSSL_KEIL
75298         "adcs	r4, r4, r7\n\t"
75299 #elif defined(__clang__)
75300         "adcs	r4, r7\n\t"
75301 #else
75302         "adc	r4, r7\n\t"
75303 #endif
75304 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75305         "lsrs	r6, %[mp], #16\n\t"
75306 #else
75307         "lsr	r6, %[mp], #16\n\t"
75308 #endif
75309 #ifdef WOLFSSL_KEIL
75310         "muls	r5, r6, r5\n\t"
75311 #elif defined(__clang__)
75312         "muls	r5, r6\n\t"
75313 #else
75314         "mul	r5, r6\n\t"
75315 #endif
75316 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75317         "lsrs	r6, r5, #16\n\t"
75318 #else
75319         "lsr	r6, r5, #16\n\t"
75320 #endif
75321 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75322         "lsls	r5, r5, #16\n\t"
75323 #else
75324         "lsl	r5, r5, #16\n\t"
75325 #endif
75326 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75327         "adds	r3, r3, r5\n\t"
75328 #else
75329         "add	r3, r3, r5\n\t"
75330 #endif
75331 #ifdef WOLFSSL_KEIL
75332         "adcs	r4, r4, r6\n\t"
75333 #elif defined(__clang__)
75334         "adcs	r4, r6\n\t"
75335 #else
75336         "adc	r4, r6\n\t"
75337 #endif
75338         "mov	r5, r10\n\t"
75339 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75340         "lsrs	r6, %[mp], #16\n\t"
75341 #else
75342         "lsr	r6, %[mp], #16\n\t"
75343 #endif
75344 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75345         "lsrs	r5, r5, #16\n\t"
75346 #else
75347         "lsr	r5, r5, #16\n\t"
75348 #endif
75349 #ifdef WOLFSSL_KEIL
75350         "muls	r6, r5, r6\n\t"
75351 #elif defined(__clang__)
75352         "muls	r6, r5\n\t"
75353 #else
75354         "mul	r6, r5\n\t"
75355 #endif
75356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75357         "adds	r4, r4, r6\n\t"
75358 #else
75359         "add	r4, r4, r6\n\t"
75360 #endif
75361         "uxth	r6, %[mp]\n\t"
75362 #ifdef WOLFSSL_KEIL
75363         "muls	r5, r6, r5\n\t"
75364 #elif defined(__clang__)
75365         "muls	r5, r6\n\t"
75366 #else
75367         "mul	r5, r6\n\t"
75368 #endif
75369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75370         "lsrs	r6, r5, #16\n\t"
75371 #else
75372         "lsr	r6, r5, #16\n\t"
75373 #endif
75374 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75375         "lsls	r5, r5, #16\n\t"
75376 #else
75377         "lsl	r5, r5, #16\n\t"
75378 #endif
75379 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75380         "adds	r3, r3, r5\n\t"
75381 #else
75382         "add	r3, r3, r5\n\t"
75383 #endif
75384 #ifdef WOLFSSL_KEIL
75385         "adcs	r4, r4, r6\n\t"
75386 #elif defined(__clang__)
75387         "adcs	r4, r6\n\t"
75388 #else
75389         "adc	r4, r6\n\t"
75390 #endif
75391         "# Multiply m[0] and mu - Done\n\t"
75392         "\n"
75393     "L_sp_3072_mont_reduce_96_word_%=:\n\t"
75394         "# a[i+j] += m[j] * mu\n\t"
75395         "ldr	r3, [%[a]]\n\t"
75396         "ldm	%[m]!, {%[mp]}\n\t"
75397 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75398         "adds	r3, r3, r4\n\t"
75399 #else
75400         "add	r3, r3, r4\n\t"
75401 #endif
75402         "movs	r4, #0\n\t"
75403 #ifdef WOLFSSL_KEIL
75404         "adcs	r4, r4, r7\n\t"
75405 #elif defined(__clang__)
75406         "adcs	r4, r7\n\t"
75407 #else
75408         "adc	r4, r7\n\t"
75409 #endif
75410         "# Multiply m[j] and mu - Start\n\t"
75411         "mov	r5, r10\n\t"
75412         "uxth	r6, %[mp]\n\t"
75413         "uxth	r5, r5\n\t"
75414 #ifdef WOLFSSL_KEIL
75415         "muls	r6, r5, r6\n\t"
75416 #elif defined(__clang__)
75417         "muls	r6, r5\n\t"
75418 #else
75419         "mul	r6, r5\n\t"
75420 #endif
75421 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75422         "adds	r3, r3, r6\n\t"
75423 #else
75424         "add	r3, r3, r6\n\t"
75425 #endif
75426 #ifdef WOLFSSL_KEIL
75427         "adcs	r4, r4, r7\n\t"
75428 #elif defined(__clang__)
75429         "adcs	r4, r7\n\t"
75430 #else
75431         "adc	r4, r7\n\t"
75432 #endif
75433 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75434         "lsrs	r6, %[mp], #16\n\t"
75435 #else
75436         "lsr	r6, %[mp], #16\n\t"
75437 #endif
75438 #ifdef WOLFSSL_KEIL
75439         "muls	r5, r6, r5\n\t"
75440 #elif defined(__clang__)
75441         "muls	r5, r6\n\t"
75442 #else
75443         "mul	r5, r6\n\t"
75444 #endif
75445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75446         "lsrs	r6, r5, #16\n\t"
75447 #else
75448         "lsr	r6, r5, #16\n\t"
75449 #endif
75450 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75451         "lsls	r5, r5, #16\n\t"
75452 #else
75453         "lsl	r5, r5, #16\n\t"
75454 #endif
75455 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75456         "adds	r3, r3, r5\n\t"
75457 #else
75458         "add	r3, r3, r5\n\t"
75459 #endif
75460 #ifdef WOLFSSL_KEIL
75461         "adcs	r4, r4, r6\n\t"
75462 #elif defined(__clang__)
75463         "adcs	r4, r6\n\t"
75464 #else
75465         "adc	r4, r6\n\t"
75466 #endif
75467         "mov	r5, r10\n\t"
75468 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75469         "lsrs	r6, %[mp], #16\n\t"
75470 #else
75471         "lsr	r6, %[mp], #16\n\t"
75472 #endif
75473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75474         "lsrs	r5, r5, #16\n\t"
75475 #else
75476         "lsr	r5, r5, #16\n\t"
75477 #endif
75478 #ifdef WOLFSSL_KEIL
75479         "muls	r6, r5, r6\n\t"
75480 #elif defined(__clang__)
75481         "muls	r6, r5\n\t"
75482 #else
75483         "mul	r6, r5\n\t"
75484 #endif
75485 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75486         "adds	r4, r4, r6\n\t"
75487 #else
75488         "add	r4, r4, r6\n\t"
75489 #endif
75490         "uxth	r6, %[mp]\n\t"
75491 #ifdef WOLFSSL_KEIL
75492         "muls	r5, r6, r5\n\t"
75493 #elif defined(__clang__)
75494         "muls	r5, r6\n\t"
75495 #else
75496         "mul	r5, r6\n\t"
75497 #endif
75498 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75499         "lsrs	r6, r5, #16\n\t"
75500 #else
75501         "lsr	r6, r5, #16\n\t"
75502 #endif
75503 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75504         "lsls	r5, r5, #16\n\t"
75505 #else
75506         "lsl	r5, r5, #16\n\t"
75507 #endif
75508 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75509         "adds	r3, r3, r5\n\t"
75510 #else
75511         "add	r3, r3, r5\n\t"
75512 #endif
75513 #ifdef WOLFSSL_KEIL
75514         "adcs	r4, r4, r6\n\t"
75515 #elif defined(__clang__)
75516         "adcs	r4, r6\n\t"
75517 #else
75518         "adc	r4, r6\n\t"
75519 #endif
75520         "# Multiply m[j] and mu - Done\n\t"
75521         "stm	%[a]!, {r3}\n\t"
75522         "cmp	%[a], r9\n\t"
75523         "blt	L_sp_3072_mont_reduce_96_word_%=\n\t"
75524         "# a[i+95] += m[95] * mu\n\t"
75525         "ldr	%[mp], [%[m]]\n\t"
75526         "mov	r3, r12\n\t"
75527         "# Multiply m[95] and mu - Start\n\t"
75528         "mov	r5, r10\n\t"
75529         "uxth	r6, %[mp]\n\t"
75530         "uxth	r5, r5\n\t"
75531 #ifdef WOLFSSL_KEIL
75532         "muls	r6, r5, r6\n\t"
75533 #elif defined(__clang__)
75534         "muls	r6, r5\n\t"
75535 #else
75536         "mul	r6, r5\n\t"
75537 #endif
75538 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75539         "adds	r4, r4, r6\n\t"
75540 #else
75541         "add	r4, r4, r6\n\t"
75542 #endif
75543 #ifdef WOLFSSL_KEIL
75544         "adcs	r3, r3, r7\n\t"
75545 #elif defined(__clang__)
75546         "adcs	r3, r7\n\t"
75547 #else
75548         "adc	r3, r7\n\t"
75549 #endif
75550 #ifdef WOLFSSL_KEIL
75551         "adcs	r7, r7, r7\n\t"
75552 #elif defined(__clang__)
75553         "adcs	r7, r7\n\t"
75554 #else
75555         "adc	r7, r7\n\t"
75556 #endif
75557 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75558         "lsrs	r6, %[mp], #16\n\t"
75559 #else
75560         "lsr	r6, %[mp], #16\n\t"
75561 #endif
75562 #ifdef WOLFSSL_KEIL
75563         "muls	r5, r6, r5\n\t"
75564 #elif defined(__clang__)
75565         "muls	r5, r6\n\t"
75566 #else
75567         "mul	r5, r6\n\t"
75568 #endif
75569 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75570         "lsrs	r6, r5, #16\n\t"
75571 #else
75572         "lsr	r6, r5, #16\n\t"
75573 #endif
75574 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75575         "lsls	r5, r5, #16\n\t"
75576 #else
75577         "lsl	r5, r5, #16\n\t"
75578 #endif
75579 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75580         "adds	r4, r4, r5\n\t"
75581 #else
75582         "add	r4, r4, r5\n\t"
75583 #endif
75584 #ifdef WOLFSSL_KEIL
75585         "adcs	r3, r3, r6\n\t"
75586 #elif defined(__clang__)
75587         "adcs	r3, r6\n\t"
75588 #else
75589         "adc	r3, r6\n\t"
75590 #endif
75591 #ifdef WOLFSSL_KEIL
75592         "adcs	r7, r7, r7\n\t"
75593 #elif defined(__clang__)
75594         "adcs	r7, r7\n\t"
75595 #else
75596         "adc	r7, r7\n\t"
75597 #endif
75598         "mov	r5, r10\n\t"
75599 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75600         "lsrs	r6, %[mp], #16\n\t"
75601 #else
75602         "lsr	r6, %[mp], #16\n\t"
75603 #endif
75604 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75605         "lsrs	r5, r5, #16\n\t"
75606 #else
75607         "lsr	r5, r5, #16\n\t"
75608 #endif
75609 #ifdef WOLFSSL_KEIL
75610         "muls	r6, r5, r6\n\t"
75611 #elif defined(__clang__)
75612         "muls	r6, r5\n\t"
75613 #else
75614         "mul	r6, r5\n\t"
75615 #endif
75616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75617         "adds	r3, r3, r6\n\t"
75618 #else
75619         "add	r3, r3, r6\n\t"
75620 #endif
75621 #ifdef WOLFSSL_KEIL
75622         "adcs	r7, r7, r7\n\t"
75623 #elif defined(__clang__)
75624         "adcs	r7, r7\n\t"
75625 #else
75626         "adc	r7, r7\n\t"
75627 #endif
75628         "uxth	r6, %[mp]\n\t"
75629 #ifdef WOLFSSL_KEIL
75630         "muls	r5, r6, r5\n\t"
75631 #elif defined(__clang__)
75632         "muls	r5, r6\n\t"
75633 #else
75634         "mul	r5, r6\n\t"
75635 #endif
75636 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75637         "lsrs	r6, r5, #16\n\t"
75638 #else
75639         "lsr	r6, r5, #16\n\t"
75640 #endif
75641 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75642         "lsls	r5, r5, #16\n\t"
75643 #else
75644         "lsl	r5, r5, #16\n\t"
75645 #endif
75646 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75647         "adds	r4, r4, r5\n\t"
75648 #else
75649         "add	r4, r4, r5\n\t"
75650 #endif
75651 #ifdef WOLFSSL_KEIL
75652         "adcs	r3, r3, r6\n\t"
75653 #elif defined(__clang__)
75654         "adcs	r3, r6\n\t"
75655 #else
75656         "adc	r3, r6\n\t"
75657 #endif
75658 #ifdef WOLFSSL_KEIL
75659         "adcs	r7, r7, r7\n\t"
75660 #elif defined(__clang__)
75661         "adcs	r7, r7\n\t"
75662 #else
75663         "adc	r7, r7\n\t"
75664 #endif
75665         "# Multiply m[95] and mu - Done\n\t"
75666         "ldr	r5, [%[a]]\n\t"
75667         "ldr	r6, [%[a], #4]\n\t"
75668         "movs	%[mp], #0\n\t"
75669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75670         "adds	r5, r5, r4\n\t"
75671 #else
75672         "add	r5, r5, r4\n\t"
75673 #endif
75674 #ifdef WOLFSSL_KEIL
75675         "adcs	r6, r6, r3\n\t"
75676 #elif defined(__clang__)
75677         "adcs	r6, r3\n\t"
75678 #else
75679         "adc	r6, r3\n\t"
75680 #endif
75681 #ifdef WOLFSSL_KEIL
75682         "adcs	r7, r7, %[mp]\n\t"
75683 #elif defined(__clang__)
75684         "adcs	r7, %[mp]\n\t"
75685 #else
75686         "adc	r7, %[mp]\n\t"
75687 #endif
75688         "stm	%[a]!, {r5, r6}\n\t"
75689         "# i += 1\n\t"
75690 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75691         "subs	%[a], %[a], #4\n\t"
75692 #else
75693         "sub	%[a], %[a], #4\n\t"
75694 #endif
75695         "movs	r3, #0xff\n\t"
75696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75697         "adds	r3, r3, #0x7d\n\t"
75698 #else
75699         "add	r3, r3, #0x7d\n\t"
75700 #endif
75701         "mov	r9, %[a]\n\t"
75702 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75703         "subs	%[a], %[a], r3\n\t"
75704 #else
75705         "sub	%[a], %[a], r3\n\t"
75706 #endif
75707         "mov	r12, r7\n\t"
75708         "mov	%[m], lr\n\t"
75709         "cmp	r11, %[a]\n\t"
75710         "bgt	L_sp_3072_mont_reduce_96_mod_%=\n\t"
75711 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75712         "negs	r7, r7\n\t"
75713 #else
75714         "neg	r7, r7\n\t"
75715 #endif
75716         "# Subtract masked modulus\n\t"
75717         "movs	r4, #0xff\n\t"
75718 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75719         "adds	r4, r4, #0x81\n\t"
75720 #else
75721         "add	r4, r4, #0x81\n\t"
75722 #endif
75723         "movs	%[mp], #0\n\t"
75724         "movs	r3, #0\n\t"
75725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75726         "subs	%[a], %[a], r4\n\t"
75727 #else
75728         "sub	%[a], %[a], r4\n\t"
75729 #endif
75730 #ifndef WOLFSSL_SP_LARGE_CODE
75731         "\n"
75732     "L_sp_3072_mont_reduce_96_sub_mask_%=:\n\t"
75733         "ldm	%[m]!, {r6}\n\t"
75734         "movs	r5, #0\n\t"
75735 #ifdef WOLFSSL_KEIL
75736         "ands	r6, r6, r7\n\t"
75737 #elif defined(__clang__)
75738         "ands	r6, r7\n\t"
75739 #else
75740         "and	r6, r7\n\t"
75741 #endif
75742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75743         "subs	r5, r5, %[mp]\n\t"
75744 #else
75745         "sub	r5, r5, %[mp]\n\t"
75746 #endif
75747         "ldr	r5, [%[a], r4]\n\t"
75748 #ifdef WOLFSSL_KEIL
75749         "sbcs	r5, r5, r6\n\t"
75750 #elif defined(__clang__)
75751         "sbcs	r5, r6\n\t"
75752 #else
75753         "sbc	r5, r6\n\t"
75754 #endif
75755 #ifdef WOLFSSL_KEIL
75756         "sbcs	%[mp], %[mp], %[mp]\n\t"
75757 #elif defined(__clang__)
75758         "sbcs	%[mp], %[mp]\n\t"
75759 #else
75760         "sbc	%[mp], %[mp]\n\t"
75761 #endif
75762         "stm	%[a]!, {r5}\n\t"
75763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75764         "adds	r3, r3, #4\n\t"
75765 #else
75766         "add	r3, r3, #4\n\t"
75767 #endif
75768         "cmp	r3, r4\n\t"
75769         "blt	L_sp_3072_mont_reduce_96_sub_mask_%=\n\t"
75770 #else /* WOLFSSL_SP_LARGE_CODE */
75771         "ldm	%[m]!, {r6}\n\t"
75772 #ifdef WOLFSSL_KEIL
75773         "ands	r6, r6, r7\n\t"
75774 #elif defined(__clang__)
75775         "ands	r6, r7\n\t"
75776 #else
75777         "and	r6, r7\n\t"
75778 #endif
75779         "ldr	r5, [%[a], r4]\n\t"
75780 #if defined(__clang__) || defined(WOLFSSL_KEIL)
75781         "subs	r5, r5, r6\n\t"
75782 #else
75783         "sub	r5, r5, r6\n\t"
75784 #endif
75785         "stm	%[a]!, {r5}\n\t"
75786         "ldm	%[m]!, {r6}\n\t"
75787 #ifdef WOLFSSL_KEIL
75788         "ands	r6, r6, r7\n\t"
75789 #elif defined(__clang__)
75790         "ands	r6, r7\n\t"
75791 #else
75792         "and	r6, r7\n\t"
75793 #endif
75794         "ldr	r5, [%[a], r4]\n\t"
75795 #ifdef WOLFSSL_KEIL
75796         "sbcs	r5, r5, r6\n\t"
75797 #elif defined(__clang__)
75798         "sbcs	r5, r6\n\t"
75799 #else
75800         "sbc	r5, r6\n\t"
75801 #endif
75802         "stm	%[a]!, {r5}\n\t"
75803         "ldm	%[m]!, {r6}\n\t"
75804 #ifdef WOLFSSL_KEIL
75805         "ands	r6, r6, r7\n\t"
75806 #elif defined(__clang__)
75807         "ands	r6, r7\n\t"
75808 #else
75809         "and	r6, r7\n\t"
75810 #endif
75811         "ldr	r5, [%[a], r4]\n\t"
75812 #ifdef WOLFSSL_KEIL
75813         "sbcs	r5, r5, r6\n\t"
75814 #elif defined(__clang__)
75815         "sbcs	r5, r6\n\t"
75816 #else
75817         "sbc	r5, r6\n\t"
75818 #endif
75819         "stm	%[a]!, {r5}\n\t"
75820         "ldm	%[m]!, {r6}\n\t"
75821 #ifdef WOLFSSL_KEIL
75822         "ands	r6, r6, r7\n\t"
75823 #elif defined(__clang__)
75824         "ands	r6, r7\n\t"
75825 #else
75826         "and	r6, r7\n\t"
75827 #endif
75828         "ldr	r5, [%[a], r4]\n\t"
75829 #ifdef WOLFSSL_KEIL
75830         "sbcs	r5, r5, r6\n\t"
75831 #elif defined(__clang__)
75832         "sbcs	r5, r6\n\t"
75833 #else
75834         "sbc	r5, r6\n\t"
75835 #endif
75836         "stm	%[a]!, {r5}\n\t"
75837         "ldm	%[m]!, {r6}\n\t"
75838 #ifdef WOLFSSL_KEIL
75839         "ands	r6, r6, r7\n\t"
75840 #elif defined(__clang__)
75841         "ands	r6, r7\n\t"
75842 #else
75843         "and	r6, r7\n\t"
75844 #endif
75845         "ldr	r5, [%[a], r4]\n\t"
75846 #ifdef WOLFSSL_KEIL
75847         "sbcs	r5, r5, r6\n\t"
75848 #elif defined(__clang__)
75849         "sbcs	r5, r6\n\t"
75850 #else
75851         "sbc	r5, r6\n\t"
75852 #endif
75853         "stm	%[a]!, {r5}\n\t"
75854         "ldm	%[m]!, {r6}\n\t"
75855 #ifdef WOLFSSL_KEIL
75856         "ands	r6, r6, r7\n\t"
75857 #elif defined(__clang__)
75858         "ands	r6, r7\n\t"
75859 #else
75860         "and	r6, r7\n\t"
75861 #endif
75862         "ldr	r5, [%[a], r4]\n\t"
75863 #ifdef WOLFSSL_KEIL
75864         "sbcs	r5, r5, r6\n\t"
75865 #elif defined(__clang__)
75866         "sbcs	r5, r6\n\t"
75867 #else
75868         "sbc	r5, r6\n\t"
75869 #endif
75870         "stm	%[a]!, {r5}\n\t"
75871         "ldm	%[m]!, {r6}\n\t"
75872 #ifdef WOLFSSL_KEIL
75873         "ands	r6, r6, r7\n\t"
75874 #elif defined(__clang__)
75875         "ands	r6, r7\n\t"
75876 #else
75877         "and	r6, r7\n\t"
75878 #endif
75879         "ldr	r5, [%[a], r4]\n\t"
75880 #ifdef WOLFSSL_KEIL
75881         "sbcs	r5, r5, r6\n\t"
75882 #elif defined(__clang__)
75883         "sbcs	r5, r6\n\t"
75884 #else
75885         "sbc	r5, r6\n\t"
75886 #endif
75887         "stm	%[a]!, {r5}\n\t"
75888         "ldm	%[m]!, {r6}\n\t"
75889 #ifdef WOLFSSL_KEIL
75890         "ands	r6, r6, r7\n\t"
75891 #elif defined(__clang__)
75892         "ands	r6, r7\n\t"
75893 #else
75894         "and	r6, r7\n\t"
75895 #endif
75896         "ldr	r5, [%[a], r4]\n\t"
75897 #ifdef WOLFSSL_KEIL
75898         "sbcs	r5, r5, r6\n\t"
75899 #elif defined(__clang__)
75900         "sbcs	r5, r6\n\t"
75901 #else
75902         "sbc	r5, r6\n\t"
75903 #endif
75904         "stm	%[a]!, {r5}\n\t"
75905         "ldm	%[m]!, {r6}\n\t"
75906 #ifdef WOLFSSL_KEIL
75907         "ands	r6, r6, r7\n\t"
75908 #elif defined(__clang__)
75909         "ands	r6, r7\n\t"
75910 #else
75911         "and	r6, r7\n\t"
75912 #endif
75913         "ldr	r5, [%[a], r4]\n\t"
75914 #ifdef WOLFSSL_KEIL
75915         "sbcs	r5, r5, r6\n\t"
75916 #elif defined(__clang__)
75917         "sbcs	r5, r6\n\t"
75918 #else
75919         "sbc	r5, r6\n\t"
75920 #endif
75921         "stm	%[a]!, {r5}\n\t"
75922         "ldm	%[m]!, {r6}\n\t"
75923 #ifdef WOLFSSL_KEIL
75924         "ands	r6, r6, r7\n\t"
75925 #elif defined(__clang__)
75926         "ands	r6, r7\n\t"
75927 #else
75928         "and	r6, r7\n\t"
75929 #endif
75930         "ldr	r5, [%[a], r4]\n\t"
75931 #ifdef WOLFSSL_KEIL
75932         "sbcs	r5, r5, r6\n\t"
75933 #elif defined(__clang__)
75934         "sbcs	r5, r6\n\t"
75935 #else
75936         "sbc	r5, r6\n\t"
75937 #endif
75938         "stm	%[a]!, {r5}\n\t"
75939         "ldm	%[m]!, {r6}\n\t"
75940 #ifdef WOLFSSL_KEIL
75941         "ands	r6, r6, r7\n\t"
75942 #elif defined(__clang__)
75943         "ands	r6, r7\n\t"
75944 #else
75945         "and	r6, r7\n\t"
75946 #endif
75947         "ldr	r5, [%[a], r4]\n\t"
75948 #ifdef WOLFSSL_KEIL
75949         "sbcs	r5, r5, r6\n\t"
75950 #elif defined(__clang__)
75951         "sbcs	r5, r6\n\t"
75952 #else
75953         "sbc	r5, r6\n\t"
75954 #endif
75955         "stm	%[a]!, {r5}\n\t"
75956         "ldm	%[m]!, {r6}\n\t"
75957 #ifdef WOLFSSL_KEIL
75958         "ands	r6, r6, r7\n\t"
75959 #elif defined(__clang__)
75960         "ands	r6, r7\n\t"
75961 #else
75962         "and	r6, r7\n\t"
75963 #endif
75964         "ldr	r5, [%[a], r4]\n\t"
75965 #ifdef WOLFSSL_KEIL
75966         "sbcs	r5, r5, r6\n\t"
75967 #elif defined(__clang__)
75968         "sbcs	r5, r6\n\t"
75969 #else
75970         "sbc	r5, r6\n\t"
75971 #endif
75972         "stm	%[a]!, {r5}\n\t"
75973         "ldm	%[m]!, {r6}\n\t"
75974 #ifdef WOLFSSL_KEIL
75975         "ands	r6, r6, r7\n\t"
75976 #elif defined(__clang__)
75977         "ands	r6, r7\n\t"
75978 #else
75979         "and	r6, r7\n\t"
75980 #endif
75981         "ldr	r5, [%[a], r4]\n\t"
75982 #ifdef WOLFSSL_KEIL
75983         "sbcs	r5, r5, r6\n\t"
75984 #elif defined(__clang__)
75985         "sbcs	r5, r6\n\t"
75986 #else
75987         "sbc	r5, r6\n\t"
75988 #endif
75989         "stm	%[a]!, {r5}\n\t"
75990         "ldm	%[m]!, {r6}\n\t"
75991 #ifdef WOLFSSL_KEIL
75992         "ands	r6, r6, r7\n\t"
75993 #elif defined(__clang__)
75994         "ands	r6, r7\n\t"
75995 #else
75996         "and	r6, r7\n\t"
75997 #endif
75998         "ldr	r5, [%[a], r4]\n\t"
75999 #ifdef WOLFSSL_KEIL
76000         "sbcs	r5, r5, r6\n\t"
76001 #elif defined(__clang__)
76002         "sbcs	r5, r6\n\t"
76003 #else
76004         "sbc	r5, r6\n\t"
76005 #endif
76006         "stm	%[a]!, {r5}\n\t"
76007         "ldm	%[m]!, {r6}\n\t"
76008 #ifdef WOLFSSL_KEIL
76009         "ands	r6, r6, r7\n\t"
76010 #elif defined(__clang__)
76011         "ands	r6, r7\n\t"
76012 #else
76013         "and	r6, r7\n\t"
76014 #endif
76015         "ldr	r5, [%[a], r4]\n\t"
76016 #ifdef WOLFSSL_KEIL
76017         "sbcs	r5, r5, r6\n\t"
76018 #elif defined(__clang__)
76019         "sbcs	r5, r6\n\t"
76020 #else
76021         "sbc	r5, r6\n\t"
76022 #endif
76023         "stm	%[a]!, {r5}\n\t"
76024         "ldm	%[m]!, {r6}\n\t"
76025 #ifdef WOLFSSL_KEIL
76026         "ands	r6, r6, r7\n\t"
76027 #elif defined(__clang__)
76028         "ands	r6, r7\n\t"
76029 #else
76030         "and	r6, r7\n\t"
76031 #endif
76032         "ldr	r5, [%[a], r4]\n\t"
76033 #ifdef WOLFSSL_KEIL
76034         "sbcs	r5, r5, r6\n\t"
76035 #elif defined(__clang__)
76036         "sbcs	r5, r6\n\t"
76037 #else
76038         "sbc	r5, r6\n\t"
76039 #endif
76040         "stm	%[a]!, {r5}\n\t"
76041         "ldm	%[m]!, {r6}\n\t"
76042 #ifdef WOLFSSL_KEIL
76043         "ands	r6, r6, r7\n\t"
76044 #elif defined(__clang__)
76045         "ands	r6, r7\n\t"
76046 #else
76047         "and	r6, r7\n\t"
76048 #endif
76049         "ldr	r5, [%[a], r4]\n\t"
76050 #ifdef WOLFSSL_KEIL
76051         "sbcs	r5, r5, r6\n\t"
76052 #elif defined(__clang__)
76053         "sbcs	r5, r6\n\t"
76054 #else
76055         "sbc	r5, r6\n\t"
76056 #endif
76057         "stm	%[a]!, {r5}\n\t"
76058         "ldm	%[m]!, {r6}\n\t"
76059 #ifdef WOLFSSL_KEIL
76060         "ands	r6, r6, r7\n\t"
76061 #elif defined(__clang__)
76062         "ands	r6, r7\n\t"
76063 #else
76064         "and	r6, r7\n\t"
76065 #endif
76066         "ldr	r5, [%[a], r4]\n\t"
76067 #ifdef WOLFSSL_KEIL
76068         "sbcs	r5, r5, r6\n\t"
76069 #elif defined(__clang__)
76070         "sbcs	r5, r6\n\t"
76071 #else
76072         "sbc	r5, r6\n\t"
76073 #endif
76074         "stm	%[a]!, {r5}\n\t"
76075         "ldm	%[m]!, {r6}\n\t"
76076 #ifdef WOLFSSL_KEIL
76077         "ands	r6, r6, r7\n\t"
76078 #elif defined(__clang__)
76079         "ands	r6, r7\n\t"
76080 #else
76081         "and	r6, r7\n\t"
76082 #endif
76083         "ldr	r5, [%[a], r4]\n\t"
76084 #ifdef WOLFSSL_KEIL
76085         "sbcs	r5, r5, r6\n\t"
76086 #elif defined(__clang__)
76087         "sbcs	r5, r6\n\t"
76088 #else
76089         "sbc	r5, r6\n\t"
76090 #endif
76091         "stm	%[a]!, {r5}\n\t"
76092         "ldm	%[m]!, {r6}\n\t"
76093 #ifdef WOLFSSL_KEIL
76094         "ands	r6, r6, r7\n\t"
76095 #elif defined(__clang__)
76096         "ands	r6, r7\n\t"
76097 #else
76098         "and	r6, r7\n\t"
76099 #endif
76100         "ldr	r5, [%[a], r4]\n\t"
76101 #ifdef WOLFSSL_KEIL
76102         "sbcs	r5, r5, r6\n\t"
76103 #elif defined(__clang__)
76104         "sbcs	r5, r6\n\t"
76105 #else
76106         "sbc	r5, r6\n\t"
76107 #endif
76108         "stm	%[a]!, {r5}\n\t"
76109         "ldm	%[m]!, {r6}\n\t"
76110 #ifdef WOLFSSL_KEIL
76111         "ands	r6, r6, r7\n\t"
76112 #elif defined(__clang__)
76113         "ands	r6, r7\n\t"
76114 #else
76115         "and	r6, r7\n\t"
76116 #endif
76117         "ldr	r5, [%[a], r4]\n\t"
76118 #ifdef WOLFSSL_KEIL
76119         "sbcs	r5, r5, r6\n\t"
76120 #elif defined(__clang__)
76121         "sbcs	r5, r6\n\t"
76122 #else
76123         "sbc	r5, r6\n\t"
76124 #endif
76125         "stm	%[a]!, {r5}\n\t"
76126         "ldm	%[m]!, {r6}\n\t"
76127 #ifdef WOLFSSL_KEIL
76128         "ands	r6, r6, r7\n\t"
76129 #elif defined(__clang__)
76130         "ands	r6, r7\n\t"
76131 #else
76132         "and	r6, r7\n\t"
76133 #endif
76134         "ldr	r5, [%[a], r4]\n\t"
76135 #ifdef WOLFSSL_KEIL
76136         "sbcs	r5, r5, r6\n\t"
76137 #elif defined(__clang__)
76138         "sbcs	r5, r6\n\t"
76139 #else
76140         "sbc	r5, r6\n\t"
76141 #endif
76142         "stm	%[a]!, {r5}\n\t"
76143         "ldm	%[m]!, {r6}\n\t"
76144 #ifdef WOLFSSL_KEIL
76145         "ands	r6, r6, r7\n\t"
76146 #elif defined(__clang__)
76147         "ands	r6, r7\n\t"
76148 #else
76149         "and	r6, r7\n\t"
76150 #endif
76151         "ldr	r5, [%[a], r4]\n\t"
76152 #ifdef WOLFSSL_KEIL
76153         "sbcs	r5, r5, r6\n\t"
76154 #elif defined(__clang__)
76155         "sbcs	r5, r6\n\t"
76156 #else
76157         "sbc	r5, r6\n\t"
76158 #endif
76159         "stm	%[a]!, {r5}\n\t"
76160         "ldm	%[m]!, {r6}\n\t"
76161 #ifdef WOLFSSL_KEIL
76162         "ands	r6, r6, r7\n\t"
76163 #elif defined(__clang__)
76164         "ands	r6, r7\n\t"
76165 #else
76166         "and	r6, r7\n\t"
76167 #endif
76168         "ldr	r5, [%[a], r4]\n\t"
76169 #ifdef WOLFSSL_KEIL
76170         "sbcs	r5, r5, r6\n\t"
76171 #elif defined(__clang__)
76172         "sbcs	r5, r6\n\t"
76173 #else
76174         "sbc	r5, r6\n\t"
76175 #endif
76176         "stm	%[a]!, {r5}\n\t"
76177         "ldm	%[m]!, {r6}\n\t"
76178 #ifdef WOLFSSL_KEIL
76179         "ands	r6, r6, r7\n\t"
76180 #elif defined(__clang__)
76181         "ands	r6, r7\n\t"
76182 #else
76183         "and	r6, r7\n\t"
76184 #endif
76185         "ldr	r5, [%[a], r4]\n\t"
76186 #ifdef WOLFSSL_KEIL
76187         "sbcs	r5, r5, r6\n\t"
76188 #elif defined(__clang__)
76189         "sbcs	r5, r6\n\t"
76190 #else
76191         "sbc	r5, r6\n\t"
76192 #endif
76193         "stm	%[a]!, {r5}\n\t"
76194         "ldm	%[m]!, {r6}\n\t"
76195 #ifdef WOLFSSL_KEIL
76196         "ands	r6, r6, r7\n\t"
76197 #elif defined(__clang__)
76198         "ands	r6, r7\n\t"
76199 #else
76200         "and	r6, r7\n\t"
76201 #endif
76202         "ldr	r5, [%[a], r4]\n\t"
76203 #ifdef WOLFSSL_KEIL
76204         "sbcs	r5, r5, r6\n\t"
76205 #elif defined(__clang__)
76206         "sbcs	r5, r6\n\t"
76207 #else
76208         "sbc	r5, r6\n\t"
76209 #endif
76210         "stm	%[a]!, {r5}\n\t"
76211         "ldm	%[m]!, {r6}\n\t"
76212 #ifdef WOLFSSL_KEIL
76213         "ands	r6, r6, r7\n\t"
76214 #elif defined(__clang__)
76215         "ands	r6, r7\n\t"
76216 #else
76217         "and	r6, r7\n\t"
76218 #endif
76219         "ldr	r5, [%[a], r4]\n\t"
76220 #ifdef WOLFSSL_KEIL
76221         "sbcs	r5, r5, r6\n\t"
76222 #elif defined(__clang__)
76223         "sbcs	r5, r6\n\t"
76224 #else
76225         "sbc	r5, r6\n\t"
76226 #endif
76227         "stm	%[a]!, {r5}\n\t"
76228         "ldm	%[m]!, {r6}\n\t"
76229 #ifdef WOLFSSL_KEIL
76230         "ands	r6, r6, r7\n\t"
76231 #elif defined(__clang__)
76232         "ands	r6, r7\n\t"
76233 #else
76234         "and	r6, r7\n\t"
76235 #endif
76236         "ldr	r5, [%[a], r4]\n\t"
76237 #ifdef WOLFSSL_KEIL
76238         "sbcs	r5, r5, r6\n\t"
76239 #elif defined(__clang__)
76240         "sbcs	r5, r6\n\t"
76241 #else
76242         "sbc	r5, r6\n\t"
76243 #endif
76244         "stm	%[a]!, {r5}\n\t"
76245         "ldm	%[m]!, {r6}\n\t"
76246 #ifdef WOLFSSL_KEIL
76247         "ands	r6, r6, r7\n\t"
76248 #elif defined(__clang__)
76249         "ands	r6, r7\n\t"
76250 #else
76251         "and	r6, r7\n\t"
76252 #endif
76253         "ldr	r5, [%[a], r4]\n\t"
76254 #ifdef WOLFSSL_KEIL
76255         "sbcs	r5, r5, r6\n\t"
76256 #elif defined(__clang__)
76257         "sbcs	r5, r6\n\t"
76258 #else
76259         "sbc	r5, r6\n\t"
76260 #endif
76261         "stm	%[a]!, {r5}\n\t"
76262         "ldm	%[m]!, {r6}\n\t"
76263 #ifdef WOLFSSL_KEIL
76264         "ands	r6, r6, r7\n\t"
76265 #elif defined(__clang__)
76266         "ands	r6, r7\n\t"
76267 #else
76268         "and	r6, r7\n\t"
76269 #endif
76270         "ldr	r5, [%[a], r4]\n\t"
76271 #ifdef WOLFSSL_KEIL
76272         "sbcs	r5, r5, r6\n\t"
76273 #elif defined(__clang__)
76274         "sbcs	r5, r6\n\t"
76275 #else
76276         "sbc	r5, r6\n\t"
76277 #endif
76278         "stm	%[a]!, {r5}\n\t"
76279         "ldm	%[m]!, {r6}\n\t"
76280 #ifdef WOLFSSL_KEIL
76281         "ands	r6, r6, r7\n\t"
76282 #elif defined(__clang__)
76283         "ands	r6, r7\n\t"
76284 #else
76285         "and	r6, r7\n\t"
76286 #endif
76287         "ldr	r5, [%[a], r4]\n\t"
76288 #ifdef WOLFSSL_KEIL
76289         "sbcs	r5, r5, r6\n\t"
76290 #elif defined(__clang__)
76291         "sbcs	r5, r6\n\t"
76292 #else
76293         "sbc	r5, r6\n\t"
76294 #endif
76295         "stm	%[a]!, {r5}\n\t"
76296         "ldm	%[m]!, {r6}\n\t"
76297 #ifdef WOLFSSL_KEIL
76298         "ands	r6, r6, r7\n\t"
76299 #elif defined(__clang__)
76300         "ands	r6, r7\n\t"
76301 #else
76302         "and	r6, r7\n\t"
76303 #endif
76304         "ldr	r5, [%[a], r4]\n\t"
76305 #ifdef WOLFSSL_KEIL
76306         "sbcs	r5, r5, r6\n\t"
76307 #elif defined(__clang__)
76308         "sbcs	r5, r6\n\t"
76309 #else
76310         "sbc	r5, r6\n\t"
76311 #endif
76312         "stm	%[a]!, {r5}\n\t"
76313         "ldm	%[m]!, {r6}\n\t"
76314 #ifdef WOLFSSL_KEIL
76315         "ands	r6, r6, r7\n\t"
76316 #elif defined(__clang__)
76317         "ands	r6, r7\n\t"
76318 #else
76319         "and	r6, r7\n\t"
76320 #endif
76321         "ldr	r5, [%[a], r4]\n\t"
76322 #ifdef WOLFSSL_KEIL
76323         "sbcs	r5, r5, r6\n\t"
76324 #elif defined(__clang__)
76325         "sbcs	r5, r6\n\t"
76326 #else
76327         "sbc	r5, r6\n\t"
76328 #endif
76329         "stm	%[a]!, {r5}\n\t"
76330         "ldm	%[m]!, {r6}\n\t"
76331 #ifdef WOLFSSL_KEIL
76332         "ands	r6, r6, r7\n\t"
76333 #elif defined(__clang__)
76334         "ands	r6, r7\n\t"
76335 #else
76336         "and	r6, r7\n\t"
76337 #endif
76338         "ldr	r5, [%[a], r4]\n\t"
76339 #ifdef WOLFSSL_KEIL
76340         "sbcs	r5, r5, r6\n\t"
76341 #elif defined(__clang__)
76342         "sbcs	r5, r6\n\t"
76343 #else
76344         "sbc	r5, r6\n\t"
76345 #endif
76346         "stm	%[a]!, {r5}\n\t"
76347         "ldm	%[m]!, {r6}\n\t"
76348 #ifdef WOLFSSL_KEIL
76349         "ands	r6, r6, r7\n\t"
76350 #elif defined(__clang__)
76351         "ands	r6, r7\n\t"
76352 #else
76353         "and	r6, r7\n\t"
76354 #endif
76355         "ldr	r5, [%[a], r4]\n\t"
76356 #ifdef WOLFSSL_KEIL
76357         "sbcs	r5, r5, r6\n\t"
76358 #elif defined(__clang__)
76359         "sbcs	r5, r6\n\t"
76360 #else
76361         "sbc	r5, r6\n\t"
76362 #endif
76363         "stm	%[a]!, {r5}\n\t"
76364         "ldm	%[m]!, {r6}\n\t"
76365 #ifdef WOLFSSL_KEIL
76366         "ands	r6, r6, r7\n\t"
76367 #elif defined(__clang__)
76368         "ands	r6, r7\n\t"
76369 #else
76370         "and	r6, r7\n\t"
76371 #endif
76372         "ldr	r5, [%[a], r4]\n\t"
76373 #ifdef WOLFSSL_KEIL
76374         "sbcs	r5, r5, r6\n\t"
76375 #elif defined(__clang__)
76376         "sbcs	r5, r6\n\t"
76377 #else
76378         "sbc	r5, r6\n\t"
76379 #endif
76380         "stm	%[a]!, {r5}\n\t"
76381         "ldm	%[m]!, {r6}\n\t"
76382 #ifdef WOLFSSL_KEIL
76383         "ands	r6, r6, r7\n\t"
76384 #elif defined(__clang__)
76385         "ands	r6, r7\n\t"
76386 #else
76387         "and	r6, r7\n\t"
76388 #endif
76389         "ldr	r5, [%[a], r4]\n\t"
76390 #ifdef WOLFSSL_KEIL
76391         "sbcs	r5, r5, r6\n\t"
76392 #elif defined(__clang__)
76393         "sbcs	r5, r6\n\t"
76394 #else
76395         "sbc	r5, r6\n\t"
76396 #endif
76397         "stm	%[a]!, {r5}\n\t"
76398         "ldm	%[m]!, {r6}\n\t"
76399 #ifdef WOLFSSL_KEIL
76400         "ands	r6, r6, r7\n\t"
76401 #elif defined(__clang__)
76402         "ands	r6, r7\n\t"
76403 #else
76404         "and	r6, r7\n\t"
76405 #endif
76406         "ldr	r5, [%[a], r4]\n\t"
76407 #ifdef WOLFSSL_KEIL
76408         "sbcs	r5, r5, r6\n\t"
76409 #elif defined(__clang__)
76410         "sbcs	r5, r6\n\t"
76411 #else
76412         "sbc	r5, r6\n\t"
76413 #endif
76414         "stm	%[a]!, {r5}\n\t"
76415         "ldm	%[m]!, {r6}\n\t"
76416 #ifdef WOLFSSL_KEIL
76417         "ands	r6, r6, r7\n\t"
76418 #elif defined(__clang__)
76419         "ands	r6, r7\n\t"
76420 #else
76421         "and	r6, r7\n\t"
76422 #endif
76423         "ldr	r5, [%[a], r4]\n\t"
76424 #ifdef WOLFSSL_KEIL
76425         "sbcs	r5, r5, r6\n\t"
76426 #elif defined(__clang__)
76427         "sbcs	r5, r6\n\t"
76428 #else
76429         "sbc	r5, r6\n\t"
76430 #endif
76431         "stm	%[a]!, {r5}\n\t"
76432         "ldm	%[m]!, {r6}\n\t"
76433 #ifdef WOLFSSL_KEIL
76434         "ands	r6, r6, r7\n\t"
76435 #elif defined(__clang__)
76436         "ands	r6, r7\n\t"
76437 #else
76438         "and	r6, r7\n\t"
76439 #endif
76440         "ldr	r5, [%[a], r4]\n\t"
76441 #ifdef WOLFSSL_KEIL
76442         "sbcs	r5, r5, r6\n\t"
76443 #elif defined(__clang__)
76444         "sbcs	r5, r6\n\t"
76445 #else
76446         "sbc	r5, r6\n\t"
76447 #endif
76448         "stm	%[a]!, {r5}\n\t"
76449         "ldm	%[m]!, {r6}\n\t"
76450 #ifdef WOLFSSL_KEIL
76451         "ands	r6, r6, r7\n\t"
76452 #elif defined(__clang__)
76453         "ands	r6, r7\n\t"
76454 #else
76455         "and	r6, r7\n\t"
76456 #endif
76457         "ldr	r5, [%[a], r4]\n\t"
76458 #ifdef WOLFSSL_KEIL
76459         "sbcs	r5, r5, r6\n\t"
76460 #elif defined(__clang__)
76461         "sbcs	r5, r6\n\t"
76462 #else
76463         "sbc	r5, r6\n\t"
76464 #endif
76465         "stm	%[a]!, {r5}\n\t"
76466         "ldm	%[m]!, {r6}\n\t"
76467 #ifdef WOLFSSL_KEIL
76468         "ands	r6, r6, r7\n\t"
76469 #elif defined(__clang__)
76470         "ands	r6, r7\n\t"
76471 #else
76472         "and	r6, r7\n\t"
76473 #endif
76474         "ldr	r5, [%[a], r4]\n\t"
76475 #ifdef WOLFSSL_KEIL
76476         "sbcs	r5, r5, r6\n\t"
76477 #elif defined(__clang__)
76478         "sbcs	r5, r6\n\t"
76479 #else
76480         "sbc	r5, r6\n\t"
76481 #endif
76482         "stm	%[a]!, {r5}\n\t"
76483         "ldm	%[m]!, {r6}\n\t"
76484 #ifdef WOLFSSL_KEIL
76485         "ands	r6, r6, r7\n\t"
76486 #elif defined(__clang__)
76487         "ands	r6, r7\n\t"
76488 #else
76489         "and	r6, r7\n\t"
76490 #endif
76491         "ldr	r5, [%[a], r4]\n\t"
76492 #ifdef WOLFSSL_KEIL
76493         "sbcs	r5, r5, r6\n\t"
76494 #elif defined(__clang__)
76495         "sbcs	r5, r6\n\t"
76496 #else
76497         "sbc	r5, r6\n\t"
76498 #endif
76499         "stm	%[a]!, {r5}\n\t"
76500         "ldm	%[m]!, {r6}\n\t"
76501 #ifdef WOLFSSL_KEIL
76502         "ands	r6, r6, r7\n\t"
76503 #elif defined(__clang__)
76504         "ands	r6, r7\n\t"
76505 #else
76506         "and	r6, r7\n\t"
76507 #endif
76508         "ldr	r5, [%[a], r4]\n\t"
76509 #ifdef WOLFSSL_KEIL
76510         "sbcs	r5, r5, r6\n\t"
76511 #elif defined(__clang__)
76512         "sbcs	r5, r6\n\t"
76513 #else
76514         "sbc	r5, r6\n\t"
76515 #endif
76516         "stm	%[a]!, {r5}\n\t"
76517         "ldm	%[m]!, {r6}\n\t"
76518 #ifdef WOLFSSL_KEIL
76519         "ands	r6, r6, r7\n\t"
76520 #elif defined(__clang__)
76521         "ands	r6, r7\n\t"
76522 #else
76523         "and	r6, r7\n\t"
76524 #endif
76525         "ldr	r5, [%[a], r4]\n\t"
76526 #ifdef WOLFSSL_KEIL
76527         "sbcs	r5, r5, r6\n\t"
76528 #elif defined(__clang__)
76529         "sbcs	r5, r6\n\t"
76530 #else
76531         "sbc	r5, r6\n\t"
76532 #endif
76533         "stm	%[a]!, {r5}\n\t"
76534         "ldm	%[m]!, {r6}\n\t"
76535 #ifdef WOLFSSL_KEIL
76536         "ands	r6, r6, r7\n\t"
76537 #elif defined(__clang__)
76538         "ands	r6, r7\n\t"
76539 #else
76540         "and	r6, r7\n\t"
76541 #endif
76542         "ldr	r5, [%[a], r4]\n\t"
76543 #ifdef WOLFSSL_KEIL
76544         "sbcs	r5, r5, r6\n\t"
76545 #elif defined(__clang__)
76546         "sbcs	r5, r6\n\t"
76547 #else
76548         "sbc	r5, r6\n\t"
76549 #endif
76550         "stm	%[a]!, {r5}\n\t"
76551         "ldm	%[m]!, {r6}\n\t"
76552 #ifdef WOLFSSL_KEIL
76553         "ands	r6, r6, r7\n\t"
76554 #elif defined(__clang__)
76555         "ands	r6, r7\n\t"
76556 #else
76557         "and	r6, r7\n\t"
76558 #endif
76559         "ldr	r5, [%[a], r4]\n\t"
76560 #ifdef WOLFSSL_KEIL
76561         "sbcs	r5, r5, r6\n\t"
76562 #elif defined(__clang__)
76563         "sbcs	r5, r6\n\t"
76564 #else
76565         "sbc	r5, r6\n\t"
76566 #endif
76567         "stm	%[a]!, {r5}\n\t"
76568         "ldm	%[m]!, {r6}\n\t"
76569 #ifdef WOLFSSL_KEIL
76570         "ands	r6, r6, r7\n\t"
76571 #elif defined(__clang__)
76572         "ands	r6, r7\n\t"
76573 #else
76574         "and	r6, r7\n\t"
76575 #endif
76576         "ldr	r5, [%[a], r4]\n\t"
76577 #ifdef WOLFSSL_KEIL
76578         "sbcs	r5, r5, r6\n\t"
76579 #elif defined(__clang__)
76580         "sbcs	r5, r6\n\t"
76581 #else
76582         "sbc	r5, r6\n\t"
76583 #endif
76584         "stm	%[a]!, {r5}\n\t"
76585         "ldm	%[m]!, {r6}\n\t"
76586 #ifdef WOLFSSL_KEIL
76587         "ands	r6, r6, r7\n\t"
76588 #elif defined(__clang__)
76589         "ands	r6, r7\n\t"
76590 #else
76591         "and	r6, r7\n\t"
76592 #endif
76593         "ldr	r5, [%[a], r4]\n\t"
76594 #ifdef WOLFSSL_KEIL
76595         "sbcs	r5, r5, r6\n\t"
76596 #elif defined(__clang__)
76597         "sbcs	r5, r6\n\t"
76598 #else
76599         "sbc	r5, r6\n\t"
76600 #endif
76601         "stm	%[a]!, {r5}\n\t"
76602         "ldm	%[m]!, {r6}\n\t"
76603 #ifdef WOLFSSL_KEIL
76604         "ands	r6, r6, r7\n\t"
76605 #elif defined(__clang__)
76606         "ands	r6, r7\n\t"
76607 #else
76608         "and	r6, r7\n\t"
76609 #endif
76610         "ldr	r5, [%[a], r4]\n\t"
76611 #ifdef WOLFSSL_KEIL
76612         "sbcs	r5, r5, r6\n\t"
76613 #elif defined(__clang__)
76614         "sbcs	r5, r6\n\t"
76615 #else
76616         "sbc	r5, r6\n\t"
76617 #endif
76618         "stm	%[a]!, {r5}\n\t"
76619         "ldm	%[m]!, {r6}\n\t"
76620 #ifdef WOLFSSL_KEIL
76621         "ands	r6, r6, r7\n\t"
76622 #elif defined(__clang__)
76623         "ands	r6, r7\n\t"
76624 #else
76625         "and	r6, r7\n\t"
76626 #endif
76627         "ldr	r5, [%[a], r4]\n\t"
76628 #ifdef WOLFSSL_KEIL
76629         "sbcs	r5, r5, r6\n\t"
76630 #elif defined(__clang__)
76631         "sbcs	r5, r6\n\t"
76632 #else
76633         "sbc	r5, r6\n\t"
76634 #endif
76635         "stm	%[a]!, {r5}\n\t"
76636         "ldm	%[m]!, {r6}\n\t"
76637 #ifdef WOLFSSL_KEIL
76638         "ands	r6, r6, r7\n\t"
76639 #elif defined(__clang__)
76640         "ands	r6, r7\n\t"
76641 #else
76642         "and	r6, r7\n\t"
76643 #endif
76644         "ldr	r5, [%[a], r4]\n\t"
76645 #ifdef WOLFSSL_KEIL
76646         "sbcs	r5, r5, r6\n\t"
76647 #elif defined(__clang__)
76648         "sbcs	r5, r6\n\t"
76649 #else
76650         "sbc	r5, r6\n\t"
76651 #endif
76652         "stm	%[a]!, {r5}\n\t"
76653         "ldm	%[m]!, {r6}\n\t"
76654 #ifdef WOLFSSL_KEIL
76655         "ands	r6, r6, r7\n\t"
76656 #elif defined(__clang__)
76657         "ands	r6, r7\n\t"
76658 #else
76659         "and	r6, r7\n\t"
76660 #endif
76661         "ldr	r5, [%[a], r4]\n\t"
76662 #ifdef WOLFSSL_KEIL
76663         "sbcs	r5, r5, r6\n\t"
76664 #elif defined(__clang__)
76665         "sbcs	r5, r6\n\t"
76666 #else
76667         "sbc	r5, r6\n\t"
76668 #endif
76669         "stm	%[a]!, {r5}\n\t"
76670         "ldm	%[m]!, {r6}\n\t"
76671 #ifdef WOLFSSL_KEIL
76672         "ands	r6, r6, r7\n\t"
76673 #elif defined(__clang__)
76674         "ands	r6, r7\n\t"
76675 #else
76676         "and	r6, r7\n\t"
76677 #endif
76678         "ldr	r5, [%[a], r4]\n\t"
76679 #ifdef WOLFSSL_KEIL
76680         "sbcs	r5, r5, r6\n\t"
76681 #elif defined(__clang__)
76682         "sbcs	r5, r6\n\t"
76683 #else
76684         "sbc	r5, r6\n\t"
76685 #endif
76686         "stm	%[a]!, {r5}\n\t"
76687         "ldm	%[m]!, {r6}\n\t"
76688 #ifdef WOLFSSL_KEIL
76689         "ands	r6, r6, r7\n\t"
76690 #elif defined(__clang__)
76691         "ands	r6, r7\n\t"
76692 #else
76693         "and	r6, r7\n\t"
76694 #endif
76695         "ldr	r5, [%[a], r4]\n\t"
76696 #ifdef WOLFSSL_KEIL
76697         "sbcs	r5, r5, r6\n\t"
76698 #elif defined(__clang__)
76699         "sbcs	r5, r6\n\t"
76700 #else
76701         "sbc	r5, r6\n\t"
76702 #endif
76703         "stm	%[a]!, {r5}\n\t"
76704         "ldm	%[m]!, {r6}\n\t"
76705 #ifdef WOLFSSL_KEIL
76706         "ands	r6, r6, r7\n\t"
76707 #elif defined(__clang__)
76708         "ands	r6, r7\n\t"
76709 #else
76710         "and	r6, r7\n\t"
76711 #endif
76712         "ldr	r5, [%[a], r4]\n\t"
76713 #ifdef WOLFSSL_KEIL
76714         "sbcs	r5, r5, r6\n\t"
76715 #elif defined(__clang__)
76716         "sbcs	r5, r6\n\t"
76717 #else
76718         "sbc	r5, r6\n\t"
76719 #endif
76720         "stm	%[a]!, {r5}\n\t"
76721         "ldm	%[m]!, {r6}\n\t"
76722 #ifdef WOLFSSL_KEIL
76723         "ands	r6, r6, r7\n\t"
76724 #elif defined(__clang__)
76725         "ands	r6, r7\n\t"
76726 #else
76727         "and	r6, r7\n\t"
76728 #endif
76729         "ldr	r5, [%[a], r4]\n\t"
76730 #ifdef WOLFSSL_KEIL
76731         "sbcs	r5, r5, r6\n\t"
76732 #elif defined(__clang__)
76733         "sbcs	r5, r6\n\t"
76734 #else
76735         "sbc	r5, r6\n\t"
76736 #endif
76737         "stm	%[a]!, {r5}\n\t"
76738         "ldm	%[m]!, {r6}\n\t"
76739 #ifdef WOLFSSL_KEIL
76740         "ands	r6, r6, r7\n\t"
76741 #elif defined(__clang__)
76742         "ands	r6, r7\n\t"
76743 #else
76744         "and	r6, r7\n\t"
76745 #endif
76746         "ldr	r5, [%[a], r4]\n\t"
76747 #ifdef WOLFSSL_KEIL
76748         "sbcs	r5, r5, r6\n\t"
76749 #elif defined(__clang__)
76750         "sbcs	r5, r6\n\t"
76751 #else
76752         "sbc	r5, r6\n\t"
76753 #endif
76754         "stm	%[a]!, {r5}\n\t"
76755         "ldm	%[m]!, {r6}\n\t"
76756 #ifdef WOLFSSL_KEIL
76757         "ands	r6, r6, r7\n\t"
76758 #elif defined(__clang__)
76759         "ands	r6, r7\n\t"
76760 #else
76761         "and	r6, r7\n\t"
76762 #endif
76763         "ldr	r5, [%[a], r4]\n\t"
76764 #ifdef WOLFSSL_KEIL
76765         "sbcs	r5, r5, r6\n\t"
76766 #elif defined(__clang__)
76767         "sbcs	r5, r6\n\t"
76768 #else
76769         "sbc	r5, r6\n\t"
76770 #endif
76771         "stm	%[a]!, {r5}\n\t"
76772         "ldm	%[m]!, {r6}\n\t"
76773 #ifdef WOLFSSL_KEIL
76774         "ands	r6, r6, r7\n\t"
76775 #elif defined(__clang__)
76776         "ands	r6, r7\n\t"
76777 #else
76778         "and	r6, r7\n\t"
76779 #endif
76780         "ldr	r5, [%[a], r4]\n\t"
76781 #ifdef WOLFSSL_KEIL
76782         "sbcs	r5, r5, r6\n\t"
76783 #elif defined(__clang__)
76784         "sbcs	r5, r6\n\t"
76785 #else
76786         "sbc	r5, r6\n\t"
76787 #endif
76788         "stm	%[a]!, {r5}\n\t"
76789         "ldm	%[m]!, {r6}\n\t"
76790 #ifdef WOLFSSL_KEIL
76791         "ands	r6, r6, r7\n\t"
76792 #elif defined(__clang__)
76793         "ands	r6, r7\n\t"
76794 #else
76795         "and	r6, r7\n\t"
76796 #endif
76797         "ldr	r5, [%[a], r4]\n\t"
76798 #ifdef WOLFSSL_KEIL
76799         "sbcs	r5, r5, r6\n\t"
76800 #elif defined(__clang__)
76801         "sbcs	r5, r6\n\t"
76802 #else
76803         "sbc	r5, r6\n\t"
76804 #endif
76805         "stm	%[a]!, {r5}\n\t"
76806         "ldm	%[m]!, {r6}\n\t"
76807 #ifdef WOLFSSL_KEIL
76808         "ands	r6, r6, r7\n\t"
76809 #elif defined(__clang__)
76810         "ands	r6, r7\n\t"
76811 #else
76812         "and	r6, r7\n\t"
76813 #endif
76814         "ldr	r5, [%[a], r4]\n\t"
76815 #ifdef WOLFSSL_KEIL
76816         "sbcs	r5, r5, r6\n\t"
76817 #elif defined(__clang__)
76818         "sbcs	r5, r6\n\t"
76819 #else
76820         "sbc	r5, r6\n\t"
76821 #endif
76822         "stm	%[a]!, {r5}\n\t"
76823         "ldm	%[m]!, {r6}\n\t"
76824 #ifdef WOLFSSL_KEIL
76825         "ands	r6, r6, r7\n\t"
76826 #elif defined(__clang__)
76827         "ands	r6, r7\n\t"
76828 #else
76829         "and	r6, r7\n\t"
76830 #endif
76831         "ldr	r5, [%[a], r4]\n\t"
76832 #ifdef WOLFSSL_KEIL
76833         "sbcs	r5, r5, r6\n\t"
76834 #elif defined(__clang__)
76835         "sbcs	r5, r6\n\t"
76836 #else
76837         "sbc	r5, r6\n\t"
76838 #endif
76839         "stm	%[a]!, {r5}\n\t"
76840         "ldm	%[m]!, {r6}\n\t"
76841 #ifdef WOLFSSL_KEIL
76842         "ands	r6, r6, r7\n\t"
76843 #elif defined(__clang__)
76844         "ands	r6, r7\n\t"
76845 #else
76846         "and	r6, r7\n\t"
76847 #endif
76848         "ldr	r5, [%[a], r4]\n\t"
76849 #ifdef WOLFSSL_KEIL
76850         "sbcs	r5, r5, r6\n\t"
76851 #elif defined(__clang__)
76852         "sbcs	r5, r6\n\t"
76853 #else
76854         "sbc	r5, r6\n\t"
76855 #endif
76856         "stm	%[a]!, {r5}\n\t"
76857         "ldm	%[m]!, {r6}\n\t"
76858 #ifdef WOLFSSL_KEIL
76859         "ands	r6, r6, r7\n\t"
76860 #elif defined(__clang__)
76861         "ands	r6, r7\n\t"
76862 #else
76863         "and	r6, r7\n\t"
76864 #endif
76865         "ldr	r5, [%[a], r4]\n\t"
76866 #ifdef WOLFSSL_KEIL
76867         "sbcs	r5, r5, r6\n\t"
76868 #elif defined(__clang__)
76869         "sbcs	r5, r6\n\t"
76870 #else
76871         "sbc	r5, r6\n\t"
76872 #endif
76873         "stm	%[a]!, {r5}\n\t"
76874         "ldm	%[m]!, {r6}\n\t"
76875 #ifdef WOLFSSL_KEIL
76876         "ands	r6, r6, r7\n\t"
76877 #elif defined(__clang__)
76878         "ands	r6, r7\n\t"
76879 #else
76880         "and	r6, r7\n\t"
76881 #endif
76882         "ldr	r5, [%[a], r4]\n\t"
76883 #ifdef WOLFSSL_KEIL
76884         "sbcs	r5, r5, r6\n\t"
76885 #elif defined(__clang__)
76886         "sbcs	r5, r6\n\t"
76887 #else
76888         "sbc	r5, r6\n\t"
76889 #endif
76890         "stm	%[a]!, {r5}\n\t"
76891         "ldm	%[m]!, {r6}\n\t"
76892 #ifdef WOLFSSL_KEIL
76893         "ands	r6, r6, r7\n\t"
76894 #elif defined(__clang__)
76895         "ands	r6, r7\n\t"
76896 #else
76897         "and	r6, r7\n\t"
76898 #endif
76899         "ldr	r5, [%[a], r4]\n\t"
76900 #ifdef WOLFSSL_KEIL
76901         "sbcs	r5, r5, r6\n\t"
76902 #elif defined(__clang__)
76903         "sbcs	r5, r6\n\t"
76904 #else
76905         "sbc	r5, r6\n\t"
76906 #endif
76907         "stm	%[a]!, {r5}\n\t"
76908         "ldm	%[m]!, {r6}\n\t"
76909 #ifdef WOLFSSL_KEIL
76910         "ands	r6, r6, r7\n\t"
76911 #elif defined(__clang__)
76912         "ands	r6, r7\n\t"
76913 #else
76914         "and	r6, r7\n\t"
76915 #endif
76916         "ldr	r5, [%[a], r4]\n\t"
76917 #ifdef WOLFSSL_KEIL
76918         "sbcs	r5, r5, r6\n\t"
76919 #elif defined(__clang__)
76920         "sbcs	r5, r6\n\t"
76921 #else
76922         "sbc	r5, r6\n\t"
76923 #endif
76924         "stm	%[a]!, {r5}\n\t"
76925         "ldm	%[m]!, {r6}\n\t"
76926 #ifdef WOLFSSL_KEIL
76927         "ands	r6, r6, r7\n\t"
76928 #elif defined(__clang__)
76929         "ands	r6, r7\n\t"
76930 #else
76931         "and	r6, r7\n\t"
76932 #endif
76933         "ldr	r5, [%[a], r4]\n\t"
76934 #ifdef WOLFSSL_KEIL
76935         "sbcs	r5, r5, r6\n\t"
76936 #elif defined(__clang__)
76937         "sbcs	r5, r6\n\t"
76938 #else
76939         "sbc	r5, r6\n\t"
76940 #endif
76941         "stm	%[a]!, {r5}\n\t"
76942         "ldm	%[m]!, {r6}\n\t"
76943 #ifdef WOLFSSL_KEIL
76944         "ands	r6, r6, r7\n\t"
76945 #elif defined(__clang__)
76946         "ands	r6, r7\n\t"
76947 #else
76948         "and	r6, r7\n\t"
76949 #endif
76950         "ldr	r5, [%[a], r4]\n\t"
76951 #ifdef WOLFSSL_KEIL
76952         "sbcs	r5, r5, r6\n\t"
76953 #elif defined(__clang__)
76954         "sbcs	r5, r6\n\t"
76955 #else
76956         "sbc	r5, r6\n\t"
76957 #endif
76958         "stm	%[a]!, {r5}\n\t"
76959         "ldm	%[m]!, {r6}\n\t"
76960 #ifdef WOLFSSL_KEIL
76961         "ands	r6, r6, r7\n\t"
76962 #elif defined(__clang__)
76963         "ands	r6, r7\n\t"
76964 #else
76965         "and	r6, r7\n\t"
76966 #endif
76967         "ldr	r5, [%[a], r4]\n\t"
76968 #ifdef WOLFSSL_KEIL
76969         "sbcs	r5, r5, r6\n\t"
76970 #elif defined(__clang__)
76971         "sbcs	r5, r6\n\t"
76972 #else
76973         "sbc	r5, r6\n\t"
76974 #endif
76975         "stm	%[a]!, {r5}\n\t"
76976         "ldm	%[m]!, {r6}\n\t"
76977 #ifdef WOLFSSL_KEIL
76978         "ands	r6, r6, r7\n\t"
76979 #elif defined(__clang__)
76980         "ands	r6, r7\n\t"
76981 #else
76982         "and	r6, r7\n\t"
76983 #endif
76984         "ldr	r5, [%[a], r4]\n\t"
76985 #ifdef WOLFSSL_KEIL
76986         "sbcs	r5, r5, r6\n\t"
76987 #elif defined(__clang__)
76988         "sbcs	r5, r6\n\t"
76989 #else
76990         "sbc	r5, r6\n\t"
76991 #endif
76992         "stm	%[a]!, {r5}\n\t"
76993         "ldm	%[m]!, {r6}\n\t"
76994 #ifdef WOLFSSL_KEIL
76995         "ands	r6, r6, r7\n\t"
76996 #elif defined(__clang__)
76997         "ands	r6, r7\n\t"
76998 #else
76999         "and	r6, r7\n\t"
77000 #endif
77001         "ldr	r5, [%[a], r4]\n\t"
77002 #ifdef WOLFSSL_KEIL
77003         "sbcs	r5, r5, r6\n\t"
77004 #elif defined(__clang__)
77005         "sbcs	r5, r6\n\t"
77006 #else
77007         "sbc	r5, r6\n\t"
77008 #endif
77009         "stm	%[a]!, {r5}\n\t"
77010         "ldm	%[m]!, {r6}\n\t"
77011 #ifdef WOLFSSL_KEIL
77012         "ands	r6, r6, r7\n\t"
77013 #elif defined(__clang__)
77014         "ands	r6, r7\n\t"
77015 #else
77016         "and	r6, r7\n\t"
77017 #endif
77018         "ldr	r5, [%[a], r4]\n\t"
77019 #ifdef WOLFSSL_KEIL
77020         "sbcs	r5, r5, r6\n\t"
77021 #elif defined(__clang__)
77022         "sbcs	r5, r6\n\t"
77023 #else
77024         "sbc	r5, r6\n\t"
77025 #endif
77026         "stm	%[a]!, {r5}\n\t"
77027         "ldm	%[m]!, {r6}\n\t"
77028 #ifdef WOLFSSL_KEIL
77029         "ands	r6, r6, r7\n\t"
77030 #elif defined(__clang__)
77031         "ands	r6, r7\n\t"
77032 #else
77033         "and	r6, r7\n\t"
77034 #endif
77035         "ldr	r5, [%[a], r4]\n\t"
77036 #ifdef WOLFSSL_KEIL
77037         "sbcs	r5, r5, r6\n\t"
77038 #elif defined(__clang__)
77039         "sbcs	r5, r6\n\t"
77040 #else
77041         "sbc	r5, r6\n\t"
77042 #endif
77043         "stm	%[a]!, {r5}\n\t"
77044         "ldm	%[m]!, {r6}\n\t"
77045 #ifdef WOLFSSL_KEIL
77046         "ands	r6, r6, r7\n\t"
77047 #elif defined(__clang__)
77048         "ands	r6, r7\n\t"
77049 #else
77050         "and	r6, r7\n\t"
77051 #endif
77052         "ldr	r5, [%[a], r4]\n\t"
77053 #ifdef WOLFSSL_KEIL
77054         "sbcs	r5, r5, r6\n\t"
77055 #elif defined(__clang__)
77056         "sbcs	r5, r6\n\t"
77057 #else
77058         "sbc	r5, r6\n\t"
77059 #endif
77060         "stm	%[a]!, {r5}\n\t"
77061         "ldm	%[m]!, {r6}\n\t"
77062 #ifdef WOLFSSL_KEIL
77063         "ands	r6, r6, r7\n\t"
77064 #elif defined(__clang__)
77065         "ands	r6, r7\n\t"
77066 #else
77067         "and	r6, r7\n\t"
77068 #endif
77069         "ldr	r5, [%[a], r4]\n\t"
77070 #ifdef WOLFSSL_KEIL
77071         "sbcs	r5, r5, r6\n\t"
77072 #elif defined(__clang__)
77073         "sbcs	r5, r6\n\t"
77074 #else
77075         "sbc	r5, r6\n\t"
77076 #endif
77077         "stm	%[a]!, {r5}\n\t"
77078         "ldm	%[m]!, {r6}\n\t"
77079 #ifdef WOLFSSL_KEIL
77080         "ands	r6, r6, r7\n\t"
77081 #elif defined(__clang__)
77082         "ands	r6, r7\n\t"
77083 #else
77084         "and	r6, r7\n\t"
77085 #endif
77086         "ldr	r5, [%[a], r4]\n\t"
77087 #ifdef WOLFSSL_KEIL
77088         "sbcs	r5, r5, r6\n\t"
77089 #elif defined(__clang__)
77090         "sbcs	r5, r6\n\t"
77091 #else
77092         "sbc	r5, r6\n\t"
77093 #endif
77094         "stm	%[a]!, {r5}\n\t"
77095         "ldm	%[m]!, {r6}\n\t"
77096 #ifdef WOLFSSL_KEIL
77097         "ands	r6, r6, r7\n\t"
77098 #elif defined(__clang__)
77099         "ands	r6, r7\n\t"
77100 #else
77101         "and	r6, r7\n\t"
77102 #endif
77103         "ldr	r5, [%[a], r4]\n\t"
77104 #ifdef WOLFSSL_KEIL
77105         "sbcs	r5, r5, r6\n\t"
77106 #elif defined(__clang__)
77107         "sbcs	r5, r6\n\t"
77108 #else
77109         "sbc	r5, r6\n\t"
77110 #endif
77111         "stm	%[a]!, {r5}\n\t"
77112         "ldm	%[m]!, {r6}\n\t"
77113 #ifdef WOLFSSL_KEIL
77114         "ands	r6, r6, r7\n\t"
77115 #elif defined(__clang__)
77116         "ands	r6, r7\n\t"
77117 #else
77118         "and	r6, r7\n\t"
77119 #endif
77120         "ldr	r5, [%[a], r4]\n\t"
77121 #ifdef WOLFSSL_KEIL
77122         "sbcs	r5, r5, r6\n\t"
77123 #elif defined(__clang__)
77124         "sbcs	r5, r6\n\t"
77125 #else
77126         "sbc	r5, r6\n\t"
77127 #endif
77128         "stm	%[a]!, {r5}\n\t"
77129         "ldm	%[m]!, {r6}\n\t"
77130 #ifdef WOLFSSL_KEIL
77131         "ands	r6, r6, r7\n\t"
77132 #elif defined(__clang__)
77133         "ands	r6, r7\n\t"
77134 #else
77135         "and	r6, r7\n\t"
77136 #endif
77137         "ldr	r5, [%[a], r4]\n\t"
77138 #ifdef WOLFSSL_KEIL
77139         "sbcs	r5, r5, r6\n\t"
77140 #elif defined(__clang__)
77141         "sbcs	r5, r6\n\t"
77142 #else
77143         "sbc	r5, r6\n\t"
77144 #endif
77145         "stm	%[a]!, {r5}\n\t"
77146         "ldm	%[m]!, {r6}\n\t"
77147 #ifdef WOLFSSL_KEIL
77148         "ands	r6, r6, r7\n\t"
77149 #elif defined(__clang__)
77150         "ands	r6, r7\n\t"
77151 #else
77152         "and	r6, r7\n\t"
77153 #endif
77154         "ldr	r5, [%[a], r4]\n\t"
77155 #ifdef WOLFSSL_KEIL
77156         "sbcs	r5, r5, r6\n\t"
77157 #elif defined(__clang__)
77158         "sbcs	r5, r6\n\t"
77159 #else
77160         "sbc	r5, r6\n\t"
77161 #endif
77162         "stm	%[a]!, {r5}\n\t"
77163         "ldm	%[m]!, {r6}\n\t"
77164 #ifdef WOLFSSL_KEIL
77165         "ands	r6, r6, r7\n\t"
77166 #elif defined(__clang__)
77167         "ands	r6, r7\n\t"
77168 #else
77169         "and	r6, r7\n\t"
77170 #endif
77171         "ldr	r5, [%[a], r4]\n\t"
77172 #ifdef WOLFSSL_KEIL
77173         "sbcs	r5, r5, r6\n\t"
77174 #elif defined(__clang__)
77175         "sbcs	r5, r6\n\t"
77176 #else
77177         "sbc	r5, r6\n\t"
77178 #endif
77179         "stm	%[a]!, {r5}\n\t"
77180         "ldm	%[m]!, {r6}\n\t"
77181 #ifdef WOLFSSL_KEIL
77182         "ands	r6, r6, r7\n\t"
77183 #elif defined(__clang__)
77184         "ands	r6, r7\n\t"
77185 #else
77186         "and	r6, r7\n\t"
77187 #endif
77188         "ldr	r5, [%[a], r4]\n\t"
77189 #ifdef WOLFSSL_KEIL
77190         "sbcs	r5, r5, r6\n\t"
77191 #elif defined(__clang__)
77192         "sbcs	r5, r6\n\t"
77193 #else
77194         "sbc	r5, r6\n\t"
77195 #endif
77196         "stm	%[a]!, {r5}\n\t"
77197         "ldm	%[m]!, {r6}\n\t"
77198 #ifdef WOLFSSL_KEIL
77199         "ands	r6, r6, r7\n\t"
77200 #elif defined(__clang__)
77201         "ands	r6, r7\n\t"
77202 #else
77203         "and	r6, r7\n\t"
77204 #endif
77205         "ldr	r5, [%[a], r4]\n\t"
77206 #ifdef WOLFSSL_KEIL
77207         "sbcs	r5, r5, r6\n\t"
77208 #elif defined(__clang__)
77209         "sbcs	r5, r6\n\t"
77210 #else
77211         "sbc	r5, r6\n\t"
77212 #endif
77213         "stm	%[a]!, {r5}\n\t"
77214         "ldm	%[m]!, {r6}\n\t"
77215 #ifdef WOLFSSL_KEIL
77216         "ands	r6, r6, r7\n\t"
77217 #elif defined(__clang__)
77218         "ands	r6, r7\n\t"
77219 #else
77220         "and	r6, r7\n\t"
77221 #endif
77222         "ldr	r5, [%[a], r4]\n\t"
77223 #ifdef WOLFSSL_KEIL
77224         "sbcs	r5, r5, r6\n\t"
77225 #elif defined(__clang__)
77226         "sbcs	r5, r6\n\t"
77227 #else
77228         "sbc	r5, r6\n\t"
77229 #endif
77230         "stm	%[a]!, {r5}\n\t"
77231         "ldm	%[m]!, {r6}\n\t"
77232 #ifdef WOLFSSL_KEIL
77233         "ands	r6, r6, r7\n\t"
77234 #elif defined(__clang__)
77235         "ands	r6, r7\n\t"
77236 #else
77237         "and	r6, r7\n\t"
77238 #endif
77239         "ldr	r5, [%[a], r4]\n\t"
77240 #ifdef WOLFSSL_KEIL
77241         "sbcs	r5, r5, r6\n\t"
77242 #elif defined(__clang__)
77243         "sbcs	r5, r6\n\t"
77244 #else
77245         "sbc	r5, r6\n\t"
77246 #endif
77247         "stm	%[a]!, {r5}\n\t"
77248         "ldm	%[m]!, {r6}\n\t"
77249 #ifdef WOLFSSL_KEIL
77250         "ands	r6, r6, r7\n\t"
77251 #elif defined(__clang__)
77252         "ands	r6, r7\n\t"
77253 #else
77254         "and	r6, r7\n\t"
77255 #endif
77256         "ldr	r5, [%[a], r4]\n\t"
77257 #ifdef WOLFSSL_KEIL
77258         "sbcs	r5, r5, r6\n\t"
77259 #elif defined(__clang__)
77260         "sbcs	r5, r6\n\t"
77261 #else
77262         "sbc	r5, r6\n\t"
77263 #endif
77264         "stm	%[a]!, {r5}\n\t"
77265         "ldm	%[m]!, {r6}\n\t"
77266 #ifdef WOLFSSL_KEIL
77267         "ands	r6, r6, r7\n\t"
77268 #elif defined(__clang__)
77269         "ands	r6, r7\n\t"
77270 #else
77271         "and	r6, r7\n\t"
77272 #endif
77273         "ldr	r5, [%[a], r4]\n\t"
77274 #ifdef WOLFSSL_KEIL
77275         "sbcs	r5, r5, r6\n\t"
77276 #elif defined(__clang__)
77277         "sbcs	r5, r6\n\t"
77278 #else
77279         "sbc	r5, r6\n\t"
77280 #endif
77281         "stm	%[a]!, {r5}\n\t"
77282         "ldm	%[m]!, {r6}\n\t"
77283 #ifdef WOLFSSL_KEIL
77284         "ands	r6, r6, r7\n\t"
77285 #elif defined(__clang__)
77286         "ands	r6, r7\n\t"
77287 #else
77288         "and	r6, r7\n\t"
77289 #endif
77290         "ldr	r5, [%[a], r4]\n\t"
77291 #ifdef WOLFSSL_KEIL
77292         "sbcs	r5, r5, r6\n\t"
77293 #elif defined(__clang__)
77294         "sbcs	r5, r6\n\t"
77295 #else
77296         "sbc	r5, r6\n\t"
77297 #endif
77298         "stm	%[a]!, {r5}\n\t"
77299         "ldm	%[m]!, {r6}\n\t"
77300 #ifdef WOLFSSL_KEIL
77301         "ands	r6, r6, r7\n\t"
77302 #elif defined(__clang__)
77303         "ands	r6, r7\n\t"
77304 #else
77305         "and	r6, r7\n\t"
77306 #endif
77307         "ldr	r5, [%[a], r4]\n\t"
77308 #ifdef WOLFSSL_KEIL
77309         "sbcs	r5, r5, r6\n\t"
77310 #elif defined(__clang__)
77311         "sbcs	r5, r6\n\t"
77312 #else
77313         "sbc	r5, r6\n\t"
77314 #endif
77315         "stm	%[a]!, {r5}\n\t"
77316         "ldm	%[m]!, {r6}\n\t"
77317 #ifdef WOLFSSL_KEIL
77318         "ands	r6, r6, r7\n\t"
77319 #elif defined(__clang__)
77320         "ands	r6, r7\n\t"
77321 #else
77322         "and	r6, r7\n\t"
77323 #endif
77324         "ldr	r5, [%[a], r4]\n\t"
77325 #ifdef WOLFSSL_KEIL
77326         "sbcs	r5, r5, r6\n\t"
77327 #elif defined(__clang__)
77328         "sbcs	r5, r6\n\t"
77329 #else
77330         "sbc	r5, r6\n\t"
77331 #endif
77332         "stm	%[a]!, {r5}\n\t"
77333         "ldm	%[m]!, {r6}\n\t"
77334 #ifdef WOLFSSL_KEIL
77335         "ands	r6, r6, r7\n\t"
77336 #elif defined(__clang__)
77337         "ands	r6, r7\n\t"
77338 #else
77339         "and	r6, r7\n\t"
77340 #endif
77341         "ldr	r5, [%[a], r4]\n\t"
77342 #ifdef WOLFSSL_KEIL
77343         "sbcs	r5, r5, r6\n\t"
77344 #elif defined(__clang__)
77345         "sbcs	r5, r6\n\t"
77346 #else
77347         "sbc	r5, r6\n\t"
77348 #endif
77349         "stm	%[a]!, {r5}\n\t"
77350         "ldm	%[m]!, {r6}\n\t"
77351 #ifdef WOLFSSL_KEIL
77352         "ands	r6, r6, r7\n\t"
77353 #elif defined(__clang__)
77354         "ands	r6, r7\n\t"
77355 #else
77356         "and	r6, r7\n\t"
77357 #endif
77358         "ldr	r5, [%[a], r4]\n\t"
77359 #ifdef WOLFSSL_KEIL
77360         "sbcs	r5, r5, r6\n\t"
77361 #elif defined(__clang__)
77362         "sbcs	r5, r6\n\t"
77363 #else
77364         "sbc	r5, r6\n\t"
77365 #endif
77366         "stm	%[a]!, {r5}\n\t"
77367         "ldm	%[m]!, {r6}\n\t"
77368 #ifdef WOLFSSL_KEIL
77369         "ands	r6, r6, r7\n\t"
77370 #elif defined(__clang__)
77371         "ands	r6, r7\n\t"
77372 #else
77373         "and	r6, r7\n\t"
77374 #endif
77375         "ldr	r5, [%[a], r4]\n\t"
77376 #ifdef WOLFSSL_KEIL
77377         "sbcs	r5, r5, r6\n\t"
77378 #elif defined(__clang__)
77379         "sbcs	r5, r6\n\t"
77380 #else
77381         "sbc	r5, r6\n\t"
77382 #endif
77383         "stm	%[a]!, {r5}\n\t"
77384         "ldm	%[m]!, {r6}\n\t"
77385 #ifdef WOLFSSL_KEIL
77386         "ands	r6, r6, r7\n\t"
77387 #elif defined(__clang__)
77388         "ands	r6, r7\n\t"
77389 #else
77390         "and	r6, r7\n\t"
77391 #endif
77392         "ldr	r5, [%[a], r4]\n\t"
77393 #ifdef WOLFSSL_KEIL
77394         "sbcs	r5, r5, r6\n\t"
77395 #elif defined(__clang__)
77396         "sbcs	r5, r6\n\t"
77397 #else
77398         "sbc	r5, r6\n\t"
77399 #endif
77400         "stm	%[a]!, {r5}\n\t"
77401 #endif /* WOLFSSL_SP_LARGE_CODE */
77402         : [a] "+r" (a), [m] "+r" (m), [mp] "+r" (mp)
77403         :
77404         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "lr"
77405     );
77406 }
77407 
77408 /* Multiply two Montgomery form numbers mod the modulus (prime).
77409  * (r = a * b mod m)
77410  *
77411  * r   Result of multiplication.
77412  * a   First number to multiply in Montgomery form.
77413  * b   Second number to multiply in Montgomery form.
77414  * m   Modulus (prime).
77415  * mp  Montgomery mulitplier.
77416  */
sp_3072_mont_mul_96(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)77417 static void sp_3072_mont_mul_96(sp_digit* r, const sp_digit* a,
77418         const sp_digit* b, const sp_digit* m, sp_digit mp)
77419 {
77420     sp_3072_mul_96(r, a, b);
77421     sp_3072_mont_reduce_96(r, m, mp);
77422 }
77423 
77424 /* Square the Montgomery form number. (r = a * a mod m)
77425  *
77426  * r   Result of squaring.
77427  * a   Number to square in Montgomery form.
77428  * m   Modulus (prime).
77429  * mp  Montgomery mulitplier.
77430  */
sp_3072_mont_sqr_96(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)77431 static void sp_3072_mont_sqr_96(sp_digit* r, const sp_digit* a,
77432         const sp_digit* m, sp_digit mp)
77433 {
77434     sp_3072_sqr_96(r, a);
77435     sp_3072_mont_reduce_96(r, m, mp);
77436 }
77437 
77438 #ifdef WOLFSSL_SP_SMALL
77439 /* Sub b from a into r. (r = a - b)
77440  *
77441  * r  A single precision integer.
77442  * a  A single precision integer.
77443  * b  A single precision integer.
77444  */
sp_3072_sub_96(sp_digit * r,const sp_digit * a,const sp_digit * b)77445 SP_NOINLINE static sp_digit sp_3072_sub_96(sp_digit* r, const sp_digit* a,
77446         const sp_digit* b)
77447 {
77448     __asm__ __volatile__ (
77449         "movs	r6, %[a]\n\t"
77450         "movs	r3, #0\n\t"
77451         "movs	r5, #0xff\n\t"
77452 #if defined(__clang__) || defined(WOLFSSL_KEIL)
77453         "adds	r5, r5, #0x81\n\t"
77454 #else
77455         "add	r5, r5, #0x81\n\t"
77456 #endif
77457 #if defined(__clang__) || defined(WOLFSSL_KEIL)
77458         "adds	r6, r6, r5\n\t"
77459 #else
77460         "add	r6, r6, r5\n\t"
77461 #endif
77462         "\n"
77463     "L_sp_3072_sub_96_word_%=:\n\t"
77464         "movs	r5, #0\n\t"
77465 #if defined(__clang__) || defined(WOLFSSL_KEIL)
77466         "subs	r5, r5, r3\n\t"
77467 #else
77468         "sub	r5, r5, r3\n\t"
77469 #endif
77470         "ldr	r4, [%[a]]\n\t"
77471         "ldr	r5, [%[b]]\n\t"
77472 #ifdef WOLFSSL_KEIL
77473         "sbcs	r4, r4, r5\n\t"
77474 #elif defined(__clang__)
77475         "sbcs	r4, r5\n\t"
77476 #else
77477         "sbc	r4, r5\n\t"
77478 #endif
77479         "str	r4, [%[r]]\n\t"
77480 #ifdef WOLFSSL_KEIL
77481         "sbcs	r3, r3, r3\n\t"
77482 #elif defined(__clang__)
77483         "sbcs	r3, r3\n\t"
77484 #else
77485         "sbc	r3, r3\n\t"
77486 #endif
77487 #if defined(__clang__) || defined(WOLFSSL_KEIL)
77488         "adds	%[a], %[a], #4\n\t"
77489 #else
77490         "add	%[a], %[a], #4\n\t"
77491 #endif
77492 #if defined(__clang__) || defined(WOLFSSL_KEIL)
77493         "adds	%[b], %[b], #4\n\t"
77494 #else
77495         "add	%[b], %[b], #4\n\t"
77496 #endif
77497 #if defined(__clang__) || defined(WOLFSSL_KEIL)
77498         "adds	%[r], %[r], #4\n\t"
77499 #else
77500         "add	%[r], %[r], #4\n\t"
77501 #endif
77502         "cmp	%[a], r6\n\t"
77503         "bne	L_sp_3072_sub_96_word_%=\n\t"
77504         "movs	%[r], r3\n\t"
77505         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
77506         :
77507         : "memory", "r3", "r4", "r5", "r6"
77508     );
77509     return (uint32_t)(size_t)r;
77510 }
77511 
77512 #else
77513 /* Sub b from a into r. (r = a - b)
77514  *
77515  * r  A single precision integer.
77516  * a  A single precision integer.
77517  * b  A single precision integer.
77518  */
sp_3072_sub_96(sp_digit * r,const sp_digit * a,const sp_digit * b)77519 SP_NOINLINE static sp_digit sp_3072_sub_96(sp_digit* r, const sp_digit* a,
77520         const sp_digit* b)
77521 {
77522     __asm__ __volatile__ (
77523         "ldm	%[b]!, {r5, r6}\n\t"
77524         "ldm	%[a]!, {r3, r4}\n\t"
77525 #if defined(__clang__) || defined(WOLFSSL_KEIL)
77526         "subs	r3, r3, r5\n\t"
77527 #else
77528         "sub	r3, r3, r5\n\t"
77529 #endif
77530 #ifdef WOLFSSL_KEIL
77531         "sbcs	r4, r4, r6\n\t"
77532 #elif defined(__clang__)
77533         "sbcs	r4, r6\n\t"
77534 #else
77535         "sbc	r4, r6\n\t"
77536 #endif
77537         "stm	%[r]!, {r3, r4}\n\t"
77538         "ldm	%[b]!, {r5, r6}\n\t"
77539         "ldm	%[a]!, {r3, r4}\n\t"
77540 #ifdef WOLFSSL_KEIL
77541         "sbcs	r3, r3, r5\n\t"
77542 #elif defined(__clang__)
77543         "sbcs	r3, r5\n\t"
77544 #else
77545         "sbc	r3, r5\n\t"
77546 #endif
77547 #ifdef WOLFSSL_KEIL
77548         "sbcs	r4, r4, r6\n\t"
77549 #elif defined(__clang__)
77550         "sbcs	r4, r6\n\t"
77551 #else
77552         "sbc	r4, r6\n\t"
77553 #endif
77554         "stm	%[r]!, {r3, r4}\n\t"
77555         "ldm	%[b]!, {r5, r6}\n\t"
77556         "ldm	%[a]!, {r3, r4}\n\t"
77557 #ifdef WOLFSSL_KEIL
77558         "sbcs	r3, r3, r5\n\t"
77559 #elif defined(__clang__)
77560         "sbcs	r3, r5\n\t"
77561 #else
77562         "sbc	r3, r5\n\t"
77563 #endif
77564 #ifdef WOLFSSL_KEIL
77565         "sbcs	r4, r4, r6\n\t"
77566 #elif defined(__clang__)
77567         "sbcs	r4, r6\n\t"
77568 #else
77569         "sbc	r4, r6\n\t"
77570 #endif
77571         "stm	%[r]!, {r3, r4}\n\t"
77572         "ldm	%[b]!, {r5, r6}\n\t"
77573         "ldm	%[a]!, {r3, r4}\n\t"
77574 #ifdef WOLFSSL_KEIL
77575         "sbcs	r3, r3, r5\n\t"
77576 #elif defined(__clang__)
77577         "sbcs	r3, r5\n\t"
77578 #else
77579         "sbc	r3, r5\n\t"
77580 #endif
77581 #ifdef WOLFSSL_KEIL
77582         "sbcs	r4, r4, r6\n\t"
77583 #elif defined(__clang__)
77584         "sbcs	r4, r6\n\t"
77585 #else
77586         "sbc	r4, r6\n\t"
77587 #endif
77588         "stm	%[r]!, {r3, r4}\n\t"
77589         "ldm	%[b]!, {r5, r6}\n\t"
77590         "ldm	%[a]!, {r3, r4}\n\t"
77591 #ifdef WOLFSSL_KEIL
77592         "sbcs	r3, r3, r5\n\t"
77593 #elif defined(__clang__)
77594         "sbcs	r3, r5\n\t"
77595 #else
77596         "sbc	r3, r5\n\t"
77597 #endif
77598 #ifdef WOLFSSL_KEIL
77599         "sbcs	r4, r4, r6\n\t"
77600 #elif defined(__clang__)
77601         "sbcs	r4, r6\n\t"
77602 #else
77603         "sbc	r4, r6\n\t"
77604 #endif
77605         "stm	%[r]!, {r3, r4}\n\t"
77606         "ldm	%[b]!, {r5, r6}\n\t"
77607         "ldm	%[a]!, {r3, r4}\n\t"
77608 #ifdef WOLFSSL_KEIL
77609         "sbcs	r3, r3, r5\n\t"
77610 #elif defined(__clang__)
77611         "sbcs	r3, r5\n\t"
77612 #else
77613         "sbc	r3, r5\n\t"
77614 #endif
77615 #ifdef WOLFSSL_KEIL
77616         "sbcs	r4, r4, r6\n\t"
77617 #elif defined(__clang__)
77618         "sbcs	r4, r6\n\t"
77619 #else
77620         "sbc	r4, r6\n\t"
77621 #endif
77622         "stm	%[r]!, {r3, r4}\n\t"
77623         "ldm	%[b]!, {r5, r6}\n\t"
77624         "ldm	%[a]!, {r3, r4}\n\t"
77625 #ifdef WOLFSSL_KEIL
77626         "sbcs	r3, r3, r5\n\t"
77627 #elif defined(__clang__)
77628         "sbcs	r3, r5\n\t"
77629 #else
77630         "sbc	r3, r5\n\t"
77631 #endif
77632 #ifdef WOLFSSL_KEIL
77633         "sbcs	r4, r4, r6\n\t"
77634 #elif defined(__clang__)
77635         "sbcs	r4, r6\n\t"
77636 #else
77637         "sbc	r4, r6\n\t"
77638 #endif
77639         "stm	%[r]!, {r3, r4}\n\t"
77640         "ldm	%[b]!, {r5, r6}\n\t"
77641         "ldm	%[a]!, {r3, r4}\n\t"
77642 #ifdef WOLFSSL_KEIL
77643         "sbcs	r3, r3, r5\n\t"
77644 #elif defined(__clang__)
77645         "sbcs	r3, r5\n\t"
77646 #else
77647         "sbc	r3, r5\n\t"
77648 #endif
77649 #ifdef WOLFSSL_KEIL
77650         "sbcs	r4, r4, r6\n\t"
77651 #elif defined(__clang__)
77652         "sbcs	r4, r6\n\t"
77653 #else
77654         "sbc	r4, r6\n\t"
77655 #endif
77656         "stm	%[r]!, {r3, r4}\n\t"
77657         "ldm	%[b]!, {r5, r6}\n\t"
77658         "ldm	%[a]!, {r3, r4}\n\t"
77659 #ifdef WOLFSSL_KEIL
77660         "sbcs	r3, r3, r5\n\t"
77661 #elif defined(__clang__)
77662         "sbcs	r3, r5\n\t"
77663 #else
77664         "sbc	r3, r5\n\t"
77665 #endif
77666 #ifdef WOLFSSL_KEIL
77667         "sbcs	r4, r4, r6\n\t"
77668 #elif defined(__clang__)
77669         "sbcs	r4, r6\n\t"
77670 #else
77671         "sbc	r4, r6\n\t"
77672 #endif
77673         "stm	%[r]!, {r3, r4}\n\t"
77674         "ldm	%[b]!, {r5, r6}\n\t"
77675         "ldm	%[a]!, {r3, r4}\n\t"
77676 #ifdef WOLFSSL_KEIL
77677         "sbcs	r3, r3, r5\n\t"
77678 #elif defined(__clang__)
77679         "sbcs	r3, r5\n\t"
77680 #else
77681         "sbc	r3, r5\n\t"
77682 #endif
77683 #ifdef WOLFSSL_KEIL
77684         "sbcs	r4, r4, r6\n\t"
77685 #elif defined(__clang__)
77686         "sbcs	r4, r6\n\t"
77687 #else
77688         "sbc	r4, r6\n\t"
77689 #endif
77690         "stm	%[r]!, {r3, r4}\n\t"
77691         "ldm	%[b]!, {r5, r6}\n\t"
77692         "ldm	%[a]!, {r3, r4}\n\t"
77693 #ifdef WOLFSSL_KEIL
77694         "sbcs	r3, r3, r5\n\t"
77695 #elif defined(__clang__)
77696         "sbcs	r3, r5\n\t"
77697 #else
77698         "sbc	r3, r5\n\t"
77699 #endif
77700 #ifdef WOLFSSL_KEIL
77701         "sbcs	r4, r4, r6\n\t"
77702 #elif defined(__clang__)
77703         "sbcs	r4, r6\n\t"
77704 #else
77705         "sbc	r4, r6\n\t"
77706 #endif
77707         "stm	%[r]!, {r3, r4}\n\t"
77708         "ldm	%[b]!, {r5, r6}\n\t"
77709         "ldm	%[a]!, {r3, r4}\n\t"
77710 #ifdef WOLFSSL_KEIL
77711         "sbcs	r3, r3, r5\n\t"
77712 #elif defined(__clang__)
77713         "sbcs	r3, r5\n\t"
77714 #else
77715         "sbc	r3, r5\n\t"
77716 #endif
77717 #ifdef WOLFSSL_KEIL
77718         "sbcs	r4, r4, r6\n\t"
77719 #elif defined(__clang__)
77720         "sbcs	r4, r6\n\t"
77721 #else
77722         "sbc	r4, r6\n\t"
77723 #endif
77724         "stm	%[r]!, {r3, r4}\n\t"
77725         "ldm	%[b]!, {r5, r6}\n\t"
77726         "ldm	%[a]!, {r3, r4}\n\t"
77727 #ifdef WOLFSSL_KEIL
77728         "sbcs	r3, r3, r5\n\t"
77729 #elif defined(__clang__)
77730         "sbcs	r3, r5\n\t"
77731 #else
77732         "sbc	r3, r5\n\t"
77733 #endif
77734 #ifdef WOLFSSL_KEIL
77735         "sbcs	r4, r4, r6\n\t"
77736 #elif defined(__clang__)
77737         "sbcs	r4, r6\n\t"
77738 #else
77739         "sbc	r4, r6\n\t"
77740 #endif
77741         "stm	%[r]!, {r3, r4}\n\t"
77742         "ldm	%[b]!, {r5, r6}\n\t"
77743         "ldm	%[a]!, {r3, r4}\n\t"
77744 #ifdef WOLFSSL_KEIL
77745         "sbcs	r3, r3, r5\n\t"
77746 #elif defined(__clang__)
77747         "sbcs	r3, r5\n\t"
77748 #else
77749         "sbc	r3, r5\n\t"
77750 #endif
77751 #ifdef WOLFSSL_KEIL
77752         "sbcs	r4, r4, r6\n\t"
77753 #elif defined(__clang__)
77754         "sbcs	r4, r6\n\t"
77755 #else
77756         "sbc	r4, r6\n\t"
77757 #endif
77758         "stm	%[r]!, {r3, r4}\n\t"
77759         "ldm	%[b]!, {r5, r6}\n\t"
77760         "ldm	%[a]!, {r3, r4}\n\t"
77761 #ifdef WOLFSSL_KEIL
77762         "sbcs	r3, r3, r5\n\t"
77763 #elif defined(__clang__)
77764         "sbcs	r3, r5\n\t"
77765 #else
77766         "sbc	r3, r5\n\t"
77767 #endif
77768 #ifdef WOLFSSL_KEIL
77769         "sbcs	r4, r4, r6\n\t"
77770 #elif defined(__clang__)
77771         "sbcs	r4, r6\n\t"
77772 #else
77773         "sbc	r4, r6\n\t"
77774 #endif
77775         "stm	%[r]!, {r3, r4}\n\t"
77776         "ldm	%[b]!, {r5, r6}\n\t"
77777         "ldm	%[a]!, {r3, r4}\n\t"
77778 #ifdef WOLFSSL_KEIL
77779         "sbcs	r3, r3, r5\n\t"
77780 #elif defined(__clang__)
77781         "sbcs	r3, r5\n\t"
77782 #else
77783         "sbc	r3, r5\n\t"
77784 #endif
77785 #ifdef WOLFSSL_KEIL
77786         "sbcs	r4, r4, r6\n\t"
77787 #elif defined(__clang__)
77788         "sbcs	r4, r6\n\t"
77789 #else
77790         "sbc	r4, r6\n\t"
77791 #endif
77792         "stm	%[r]!, {r3, r4}\n\t"
77793         "ldm	%[b]!, {r5, r6}\n\t"
77794         "ldm	%[a]!, {r3, r4}\n\t"
77795 #ifdef WOLFSSL_KEIL
77796         "sbcs	r3, r3, r5\n\t"
77797 #elif defined(__clang__)
77798         "sbcs	r3, r5\n\t"
77799 #else
77800         "sbc	r3, r5\n\t"
77801 #endif
77802 #ifdef WOLFSSL_KEIL
77803         "sbcs	r4, r4, r6\n\t"
77804 #elif defined(__clang__)
77805         "sbcs	r4, r6\n\t"
77806 #else
77807         "sbc	r4, r6\n\t"
77808 #endif
77809         "stm	%[r]!, {r3, r4}\n\t"
77810         "ldm	%[b]!, {r5, r6}\n\t"
77811         "ldm	%[a]!, {r3, r4}\n\t"
77812 #ifdef WOLFSSL_KEIL
77813         "sbcs	r3, r3, r5\n\t"
77814 #elif defined(__clang__)
77815         "sbcs	r3, r5\n\t"
77816 #else
77817         "sbc	r3, r5\n\t"
77818 #endif
77819 #ifdef WOLFSSL_KEIL
77820         "sbcs	r4, r4, r6\n\t"
77821 #elif defined(__clang__)
77822         "sbcs	r4, r6\n\t"
77823 #else
77824         "sbc	r4, r6\n\t"
77825 #endif
77826         "stm	%[r]!, {r3, r4}\n\t"
77827         "ldm	%[b]!, {r5, r6}\n\t"
77828         "ldm	%[a]!, {r3, r4}\n\t"
77829 #ifdef WOLFSSL_KEIL
77830         "sbcs	r3, r3, r5\n\t"
77831 #elif defined(__clang__)
77832         "sbcs	r3, r5\n\t"
77833 #else
77834         "sbc	r3, r5\n\t"
77835 #endif
77836 #ifdef WOLFSSL_KEIL
77837         "sbcs	r4, r4, r6\n\t"
77838 #elif defined(__clang__)
77839         "sbcs	r4, r6\n\t"
77840 #else
77841         "sbc	r4, r6\n\t"
77842 #endif
77843         "stm	%[r]!, {r3, r4}\n\t"
77844         "ldm	%[b]!, {r5, r6}\n\t"
77845         "ldm	%[a]!, {r3, r4}\n\t"
77846 #ifdef WOLFSSL_KEIL
77847         "sbcs	r3, r3, r5\n\t"
77848 #elif defined(__clang__)
77849         "sbcs	r3, r5\n\t"
77850 #else
77851         "sbc	r3, r5\n\t"
77852 #endif
77853 #ifdef WOLFSSL_KEIL
77854         "sbcs	r4, r4, r6\n\t"
77855 #elif defined(__clang__)
77856         "sbcs	r4, r6\n\t"
77857 #else
77858         "sbc	r4, r6\n\t"
77859 #endif
77860         "stm	%[r]!, {r3, r4}\n\t"
77861         "ldm	%[b]!, {r5, r6}\n\t"
77862         "ldm	%[a]!, {r3, r4}\n\t"
77863 #ifdef WOLFSSL_KEIL
77864         "sbcs	r3, r3, r5\n\t"
77865 #elif defined(__clang__)
77866         "sbcs	r3, r5\n\t"
77867 #else
77868         "sbc	r3, r5\n\t"
77869 #endif
77870 #ifdef WOLFSSL_KEIL
77871         "sbcs	r4, r4, r6\n\t"
77872 #elif defined(__clang__)
77873         "sbcs	r4, r6\n\t"
77874 #else
77875         "sbc	r4, r6\n\t"
77876 #endif
77877         "stm	%[r]!, {r3, r4}\n\t"
77878         "ldm	%[b]!, {r5, r6}\n\t"
77879         "ldm	%[a]!, {r3, r4}\n\t"
77880 #ifdef WOLFSSL_KEIL
77881         "sbcs	r3, r3, r5\n\t"
77882 #elif defined(__clang__)
77883         "sbcs	r3, r5\n\t"
77884 #else
77885         "sbc	r3, r5\n\t"
77886 #endif
77887 #ifdef WOLFSSL_KEIL
77888         "sbcs	r4, r4, r6\n\t"
77889 #elif defined(__clang__)
77890         "sbcs	r4, r6\n\t"
77891 #else
77892         "sbc	r4, r6\n\t"
77893 #endif
77894         "stm	%[r]!, {r3, r4}\n\t"
77895         "ldm	%[b]!, {r5, r6}\n\t"
77896         "ldm	%[a]!, {r3, r4}\n\t"
77897 #ifdef WOLFSSL_KEIL
77898         "sbcs	r3, r3, r5\n\t"
77899 #elif defined(__clang__)
77900         "sbcs	r3, r5\n\t"
77901 #else
77902         "sbc	r3, r5\n\t"
77903 #endif
77904 #ifdef WOLFSSL_KEIL
77905         "sbcs	r4, r4, r6\n\t"
77906 #elif defined(__clang__)
77907         "sbcs	r4, r6\n\t"
77908 #else
77909         "sbc	r4, r6\n\t"
77910 #endif
77911         "stm	%[r]!, {r3, r4}\n\t"
77912         "ldm	%[b]!, {r5, r6}\n\t"
77913         "ldm	%[a]!, {r3, r4}\n\t"
77914 #ifdef WOLFSSL_KEIL
77915         "sbcs	r3, r3, r5\n\t"
77916 #elif defined(__clang__)
77917         "sbcs	r3, r5\n\t"
77918 #else
77919         "sbc	r3, r5\n\t"
77920 #endif
77921 #ifdef WOLFSSL_KEIL
77922         "sbcs	r4, r4, r6\n\t"
77923 #elif defined(__clang__)
77924         "sbcs	r4, r6\n\t"
77925 #else
77926         "sbc	r4, r6\n\t"
77927 #endif
77928         "stm	%[r]!, {r3, r4}\n\t"
77929         "ldm	%[b]!, {r5, r6}\n\t"
77930         "ldm	%[a]!, {r3, r4}\n\t"
77931 #ifdef WOLFSSL_KEIL
77932         "sbcs	r3, r3, r5\n\t"
77933 #elif defined(__clang__)
77934         "sbcs	r3, r5\n\t"
77935 #else
77936         "sbc	r3, r5\n\t"
77937 #endif
77938 #ifdef WOLFSSL_KEIL
77939         "sbcs	r4, r4, r6\n\t"
77940 #elif defined(__clang__)
77941         "sbcs	r4, r6\n\t"
77942 #else
77943         "sbc	r4, r6\n\t"
77944 #endif
77945         "stm	%[r]!, {r3, r4}\n\t"
77946         "ldm	%[b]!, {r5, r6}\n\t"
77947         "ldm	%[a]!, {r3, r4}\n\t"
77948 #ifdef WOLFSSL_KEIL
77949         "sbcs	r3, r3, r5\n\t"
77950 #elif defined(__clang__)
77951         "sbcs	r3, r5\n\t"
77952 #else
77953         "sbc	r3, r5\n\t"
77954 #endif
77955 #ifdef WOLFSSL_KEIL
77956         "sbcs	r4, r4, r6\n\t"
77957 #elif defined(__clang__)
77958         "sbcs	r4, r6\n\t"
77959 #else
77960         "sbc	r4, r6\n\t"
77961 #endif
77962         "stm	%[r]!, {r3, r4}\n\t"
77963         "ldm	%[b]!, {r5, r6}\n\t"
77964         "ldm	%[a]!, {r3, r4}\n\t"
77965 #ifdef WOLFSSL_KEIL
77966         "sbcs	r3, r3, r5\n\t"
77967 #elif defined(__clang__)
77968         "sbcs	r3, r5\n\t"
77969 #else
77970         "sbc	r3, r5\n\t"
77971 #endif
77972 #ifdef WOLFSSL_KEIL
77973         "sbcs	r4, r4, r6\n\t"
77974 #elif defined(__clang__)
77975         "sbcs	r4, r6\n\t"
77976 #else
77977         "sbc	r4, r6\n\t"
77978 #endif
77979         "stm	%[r]!, {r3, r4}\n\t"
77980         "ldm	%[b]!, {r5, r6}\n\t"
77981         "ldm	%[a]!, {r3, r4}\n\t"
77982 #ifdef WOLFSSL_KEIL
77983         "sbcs	r3, r3, r5\n\t"
77984 #elif defined(__clang__)
77985         "sbcs	r3, r5\n\t"
77986 #else
77987         "sbc	r3, r5\n\t"
77988 #endif
77989 #ifdef WOLFSSL_KEIL
77990         "sbcs	r4, r4, r6\n\t"
77991 #elif defined(__clang__)
77992         "sbcs	r4, r6\n\t"
77993 #else
77994         "sbc	r4, r6\n\t"
77995 #endif
77996         "stm	%[r]!, {r3, r4}\n\t"
77997         "ldm	%[b]!, {r5, r6}\n\t"
77998         "ldm	%[a]!, {r3, r4}\n\t"
77999 #ifdef WOLFSSL_KEIL
78000         "sbcs	r3, r3, r5\n\t"
78001 #elif defined(__clang__)
78002         "sbcs	r3, r5\n\t"
78003 #else
78004         "sbc	r3, r5\n\t"
78005 #endif
78006 #ifdef WOLFSSL_KEIL
78007         "sbcs	r4, r4, r6\n\t"
78008 #elif defined(__clang__)
78009         "sbcs	r4, r6\n\t"
78010 #else
78011         "sbc	r4, r6\n\t"
78012 #endif
78013         "stm	%[r]!, {r3, r4}\n\t"
78014         "ldm	%[b]!, {r5, r6}\n\t"
78015         "ldm	%[a]!, {r3, r4}\n\t"
78016 #ifdef WOLFSSL_KEIL
78017         "sbcs	r3, r3, r5\n\t"
78018 #elif defined(__clang__)
78019         "sbcs	r3, r5\n\t"
78020 #else
78021         "sbc	r3, r5\n\t"
78022 #endif
78023 #ifdef WOLFSSL_KEIL
78024         "sbcs	r4, r4, r6\n\t"
78025 #elif defined(__clang__)
78026         "sbcs	r4, r6\n\t"
78027 #else
78028         "sbc	r4, r6\n\t"
78029 #endif
78030         "stm	%[r]!, {r3, r4}\n\t"
78031         "ldm	%[b]!, {r5, r6}\n\t"
78032         "ldm	%[a]!, {r3, r4}\n\t"
78033 #ifdef WOLFSSL_KEIL
78034         "sbcs	r3, r3, r5\n\t"
78035 #elif defined(__clang__)
78036         "sbcs	r3, r5\n\t"
78037 #else
78038         "sbc	r3, r5\n\t"
78039 #endif
78040 #ifdef WOLFSSL_KEIL
78041         "sbcs	r4, r4, r6\n\t"
78042 #elif defined(__clang__)
78043         "sbcs	r4, r6\n\t"
78044 #else
78045         "sbc	r4, r6\n\t"
78046 #endif
78047         "stm	%[r]!, {r3, r4}\n\t"
78048         "ldm	%[b]!, {r5, r6}\n\t"
78049         "ldm	%[a]!, {r3, r4}\n\t"
78050 #ifdef WOLFSSL_KEIL
78051         "sbcs	r3, r3, r5\n\t"
78052 #elif defined(__clang__)
78053         "sbcs	r3, r5\n\t"
78054 #else
78055         "sbc	r3, r5\n\t"
78056 #endif
78057 #ifdef WOLFSSL_KEIL
78058         "sbcs	r4, r4, r6\n\t"
78059 #elif defined(__clang__)
78060         "sbcs	r4, r6\n\t"
78061 #else
78062         "sbc	r4, r6\n\t"
78063 #endif
78064         "stm	%[r]!, {r3, r4}\n\t"
78065         "ldm	%[b]!, {r5, r6}\n\t"
78066         "ldm	%[a]!, {r3, r4}\n\t"
78067 #ifdef WOLFSSL_KEIL
78068         "sbcs	r3, r3, r5\n\t"
78069 #elif defined(__clang__)
78070         "sbcs	r3, r5\n\t"
78071 #else
78072         "sbc	r3, r5\n\t"
78073 #endif
78074 #ifdef WOLFSSL_KEIL
78075         "sbcs	r4, r4, r6\n\t"
78076 #elif defined(__clang__)
78077         "sbcs	r4, r6\n\t"
78078 #else
78079         "sbc	r4, r6\n\t"
78080 #endif
78081         "stm	%[r]!, {r3, r4}\n\t"
78082         "ldm	%[b]!, {r5, r6}\n\t"
78083         "ldm	%[a]!, {r3, r4}\n\t"
78084 #ifdef WOLFSSL_KEIL
78085         "sbcs	r3, r3, r5\n\t"
78086 #elif defined(__clang__)
78087         "sbcs	r3, r5\n\t"
78088 #else
78089         "sbc	r3, r5\n\t"
78090 #endif
78091 #ifdef WOLFSSL_KEIL
78092         "sbcs	r4, r4, r6\n\t"
78093 #elif defined(__clang__)
78094         "sbcs	r4, r6\n\t"
78095 #else
78096         "sbc	r4, r6\n\t"
78097 #endif
78098         "stm	%[r]!, {r3, r4}\n\t"
78099         "ldm	%[b]!, {r5, r6}\n\t"
78100         "ldm	%[a]!, {r3, r4}\n\t"
78101 #ifdef WOLFSSL_KEIL
78102         "sbcs	r3, r3, r5\n\t"
78103 #elif defined(__clang__)
78104         "sbcs	r3, r5\n\t"
78105 #else
78106         "sbc	r3, r5\n\t"
78107 #endif
78108 #ifdef WOLFSSL_KEIL
78109         "sbcs	r4, r4, r6\n\t"
78110 #elif defined(__clang__)
78111         "sbcs	r4, r6\n\t"
78112 #else
78113         "sbc	r4, r6\n\t"
78114 #endif
78115         "stm	%[r]!, {r3, r4}\n\t"
78116         "ldm	%[b]!, {r5, r6}\n\t"
78117         "ldm	%[a]!, {r3, r4}\n\t"
78118 #ifdef WOLFSSL_KEIL
78119         "sbcs	r3, r3, r5\n\t"
78120 #elif defined(__clang__)
78121         "sbcs	r3, r5\n\t"
78122 #else
78123         "sbc	r3, r5\n\t"
78124 #endif
78125 #ifdef WOLFSSL_KEIL
78126         "sbcs	r4, r4, r6\n\t"
78127 #elif defined(__clang__)
78128         "sbcs	r4, r6\n\t"
78129 #else
78130         "sbc	r4, r6\n\t"
78131 #endif
78132         "stm	%[r]!, {r3, r4}\n\t"
78133         "ldm	%[b]!, {r5, r6}\n\t"
78134         "ldm	%[a]!, {r3, r4}\n\t"
78135 #ifdef WOLFSSL_KEIL
78136         "sbcs	r3, r3, r5\n\t"
78137 #elif defined(__clang__)
78138         "sbcs	r3, r5\n\t"
78139 #else
78140         "sbc	r3, r5\n\t"
78141 #endif
78142 #ifdef WOLFSSL_KEIL
78143         "sbcs	r4, r4, r6\n\t"
78144 #elif defined(__clang__)
78145         "sbcs	r4, r6\n\t"
78146 #else
78147         "sbc	r4, r6\n\t"
78148 #endif
78149         "stm	%[r]!, {r3, r4}\n\t"
78150         "ldm	%[b]!, {r5, r6}\n\t"
78151         "ldm	%[a]!, {r3, r4}\n\t"
78152 #ifdef WOLFSSL_KEIL
78153         "sbcs	r3, r3, r5\n\t"
78154 #elif defined(__clang__)
78155         "sbcs	r3, r5\n\t"
78156 #else
78157         "sbc	r3, r5\n\t"
78158 #endif
78159 #ifdef WOLFSSL_KEIL
78160         "sbcs	r4, r4, r6\n\t"
78161 #elif defined(__clang__)
78162         "sbcs	r4, r6\n\t"
78163 #else
78164         "sbc	r4, r6\n\t"
78165 #endif
78166         "stm	%[r]!, {r3, r4}\n\t"
78167         "ldm	%[b]!, {r5, r6}\n\t"
78168         "ldm	%[a]!, {r3, r4}\n\t"
78169 #ifdef WOLFSSL_KEIL
78170         "sbcs	r3, r3, r5\n\t"
78171 #elif defined(__clang__)
78172         "sbcs	r3, r5\n\t"
78173 #else
78174         "sbc	r3, r5\n\t"
78175 #endif
78176 #ifdef WOLFSSL_KEIL
78177         "sbcs	r4, r4, r6\n\t"
78178 #elif defined(__clang__)
78179         "sbcs	r4, r6\n\t"
78180 #else
78181         "sbc	r4, r6\n\t"
78182 #endif
78183         "stm	%[r]!, {r3, r4}\n\t"
78184         "ldm	%[b]!, {r5, r6}\n\t"
78185         "ldm	%[a]!, {r3, r4}\n\t"
78186 #ifdef WOLFSSL_KEIL
78187         "sbcs	r3, r3, r5\n\t"
78188 #elif defined(__clang__)
78189         "sbcs	r3, r5\n\t"
78190 #else
78191         "sbc	r3, r5\n\t"
78192 #endif
78193 #ifdef WOLFSSL_KEIL
78194         "sbcs	r4, r4, r6\n\t"
78195 #elif defined(__clang__)
78196         "sbcs	r4, r6\n\t"
78197 #else
78198         "sbc	r4, r6\n\t"
78199 #endif
78200         "stm	%[r]!, {r3, r4}\n\t"
78201         "ldm	%[b]!, {r5, r6}\n\t"
78202         "ldm	%[a]!, {r3, r4}\n\t"
78203 #ifdef WOLFSSL_KEIL
78204         "sbcs	r3, r3, r5\n\t"
78205 #elif defined(__clang__)
78206         "sbcs	r3, r5\n\t"
78207 #else
78208         "sbc	r3, r5\n\t"
78209 #endif
78210 #ifdef WOLFSSL_KEIL
78211         "sbcs	r4, r4, r6\n\t"
78212 #elif defined(__clang__)
78213         "sbcs	r4, r6\n\t"
78214 #else
78215         "sbc	r4, r6\n\t"
78216 #endif
78217         "stm	%[r]!, {r3, r4}\n\t"
78218         "ldm	%[b]!, {r5, r6}\n\t"
78219         "ldm	%[a]!, {r3, r4}\n\t"
78220 #ifdef WOLFSSL_KEIL
78221         "sbcs	r3, r3, r5\n\t"
78222 #elif defined(__clang__)
78223         "sbcs	r3, r5\n\t"
78224 #else
78225         "sbc	r3, r5\n\t"
78226 #endif
78227 #ifdef WOLFSSL_KEIL
78228         "sbcs	r4, r4, r6\n\t"
78229 #elif defined(__clang__)
78230         "sbcs	r4, r6\n\t"
78231 #else
78232         "sbc	r4, r6\n\t"
78233 #endif
78234         "stm	%[r]!, {r3, r4}\n\t"
78235         "ldm	%[b]!, {r5, r6}\n\t"
78236         "ldm	%[a]!, {r3, r4}\n\t"
78237 #ifdef WOLFSSL_KEIL
78238         "sbcs	r3, r3, r5\n\t"
78239 #elif defined(__clang__)
78240         "sbcs	r3, r5\n\t"
78241 #else
78242         "sbc	r3, r5\n\t"
78243 #endif
78244 #ifdef WOLFSSL_KEIL
78245         "sbcs	r4, r4, r6\n\t"
78246 #elif defined(__clang__)
78247         "sbcs	r4, r6\n\t"
78248 #else
78249         "sbc	r4, r6\n\t"
78250 #endif
78251         "stm	%[r]!, {r3, r4}\n\t"
78252         "ldm	%[b]!, {r5, r6}\n\t"
78253         "ldm	%[a]!, {r3, r4}\n\t"
78254 #ifdef WOLFSSL_KEIL
78255         "sbcs	r3, r3, r5\n\t"
78256 #elif defined(__clang__)
78257         "sbcs	r3, r5\n\t"
78258 #else
78259         "sbc	r3, r5\n\t"
78260 #endif
78261 #ifdef WOLFSSL_KEIL
78262         "sbcs	r4, r4, r6\n\t"
78263 #elif defined(__clang__)
78264         "sbcs	r4, r6\n\t"
78265 #else
78266         "sbc	r4, r6\n\t"
78267 #endif
78268         "stm	%[r]!, {r3, r4}\n\t"
78269         "ldm	%[b]!, {r5, r6}\n\t"
78270         "ldm	%[a]!, {r3, r4}\n\t"
78271 #ifdef WOLFSSL_KEIL
78272         "sbcs	r3, r3, r5\n\t"
78273 #elif defined(__clang__)
78274         "sbcs	r3, r5\n\t"
78275 #else
78276         "sbc	r3, r5\n\t"
78277 #endif
78278 #ifdef WOLFSSL_KEIL
78279         "sbcs	r4, r4, r6\n\t"
78280 #elif defined(__clang__)
78281         "sbcs	r4, r6\n\t"
78282 #else
78283         "sbc	r4, r6\n\t"
78284 #endif
78285         "stm	%[r]!, {r3, r4}\n\t"
78286         "ldm	%[b]!, {r5, r6}\n\t"
78287         "ldm	%[a]!, {r3, r4}\n\t"
78288 #ifdef WOLFSSL_KEIL
78289         "sbcs	r3, r3, r5\n\t"
78290 #elif defined(__clang__)
78291         "sbcs	r3, r5\n\t"
78292 #else
78293         "sbc	r3, r5\n\t"
78294 #endif
78295 #ifdef WOLFSSL_KEIL
78296         "sbcs	r4, r4, r6\n\t"
78297 #elif defined(__clang__)
78298         "sbcs	r4, r6\n\t"
78299 #else
78300         "sbc	r4, r6\n\t"
78301 #endif
78302         "stm	%[r]!, {r3, r4}\n\t"
78303         "ldm	%[b]!, {r5, r6}\n\t"
78304         "ldm	%[a]!, {r3, r4}\n\t"
78305 #ifdef WOLFSSL_KEIL
78306         "sbcs	r3, r3, r5\n\t"
78307 #elif defined(__clang__)
78308         "sbcs	r3, r5\n\t"
78309 #else
78310         "sbc	r3, r5\n\t"
78311 #endif
78312 #ifdef WOLFSSL_KEIL
78313         "sbcs	r4, r4, r6\n\t"
78314 #elif defined(__clang__)
78315         "sbcs	r4, r6\n\t"
78316 #else
78317         "sbc	r4, r6\n\t"
78318 #endif
78319         "stm	%[r]!, {r3, r4}\n\t"
78320         "ldm	%[b]!, {r5, r6}\n\t"
78321         "ldm	%[a]!, {r3, r4}\n\t"
78322 #ifdef WOLFSSL_KEIL
78323         "sbcs	r3, r3, r5\n\t"
78324 #elif defined(__clang__)
78325         "sbcs	r3, r5\n\t"
78326 #else
78327         "sbc	r3, r5\n\t"
78328 #endif
78329 #ifdef WOLFSSL_KEIL
78330         "sbcs	r4, r4, r6\n\t"
78331 #elif defined(__clang__)
78332         "sbcs	r4, r6\n\t"
78333 #else
78334         "sbc	r4, r6\n\t"
78335 #endif
78336         "stm	%[r]!, {r3, r4}\n\t"
78337 #ifdef WOLFSSL_KEIL
78338         "sbcs	%[r], %[r], %[r]\n\t"
78339 #elif defined(__clang__)
78340         "sbcs	%[r], %[r]\n\t"
78341 #else
78342         "sbc	%[r], %[r]\n\t"
78343 #endif
78344         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
78345         :
78346         : "memory", "r3", "r4", "r5", "r6"
78347     );
78348     return (uint32_t)(size_t)r;
78349 }
78350 
78351 #endif /* WOLFSSL_SP_SMALL */
78352 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
78353  *
78354  * d1   The high order half of the number to divide.
78355  * d0   The low order half of the number to divide.
78356  * div  The dividend.
78357  * returns the result of the division.
78358  *
78359  * Note that this is an approximate div. It may give an answer 1 larger.
78360  */
div_3072_word_96(sp_digit d1,sp_digit d0,sp_digit div)78361 SP_NOINLINE static sp_digit div_3072_word_96(sp_digit d1, sp_digit d0,
78362         sp_digit div)
78363 {
78364     __asm__ __volatile__ (
78365         "movs	r3, #0\n\t"
78366 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78367         "lsrs	r5, %[div], #1\n\t"
78368 #else
78369         "lsr	r5, %[div], #1\n\t"
78370 #endif
78371 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78372         "adds	r5, r5, #1\n\t"
78373 #else
78374         "add	r5, r5, #1\n\t"
78375 #endif
78376         "mov	r8, %[d0]\n\t"
78377         "mov	r9, %[d1]\n\t"
78378         "# Do top 32\n\t"
78379         "movs	r6, r5\n\t"
78380 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78381         "subs	r6, r6, %[d1]\n\t"
78382 #else
78383         "sub	r6, r6, %[d1]\n\t"
78384 #endif
78385 #ifdef WOLFSSL_KEIL
78386         "sbcs	r6, r6, r6\n\t"
78387 #elif defined(__clang__)
78388         "sbcs	r6, r6\n\t"
78389 #else
78390         "sbc	r6, r6\n\t"
78391 #endif
78392 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78393         "adds	r3, r3, r3\n\t"
78394 #else
78395         "add	r3, r3, r3\n\t"
78396 #endif
78397 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78398         "subs	r3, r3, r6\n\t"
78399 #else
78400         "sub	r3, r3, r6\n\t"
78401 #endif
78402 #ifdef WOLFSSL_KEIL
78403         "ands	r6, r6, r5\n\t"
78404 #elif defined(__clang__)
78405         "ands	r6, r5\n\t"
78406 #else
78407         "and	r6, r5\n\t"
78408 #endif
78409 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78410         "subs	%[d1], %[d1], r6\n\t"
78411 #else
78412         "sub	%[d1], %[d1], r6\n\t"
78413 #endif
78414         "movs	r4, #29\n\t"
78415         "\n"
78416     "L_div_3072_word_96_loop_%=:\n\t"
78417 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78418         "lsls	%[d0], %[d0], #1\n\t"
78419 #else
78420         "lsl	%[d0], %[d0], #1\n\t"
78421 #endif
78422 #ifdef WOLFSSL_KEIL
78423         "adcs	%[d1], %[d1], %[d1]\n\t"
78424 #elif defined(__clang__)
78425         "adcs	%[d1], %[d1]\n\t"
78426 #else
78427         "adc	%[d1], %[d1]\n\t"
78428 #endif
78429         "movs	r6, r5\n\t"
78430 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78431         "subs	r6, r6, %[d1]\n\t"
78432 #else
78433         "sub	r6, r6, %[d1]\n\t"
78434 #endif
78435 #ifdef WOLFSSL_KEIL
78436         "sbcs	r6, r6, r6\n\t"
78437 #elif defined(__clang__)
78438         "sbcs	r6, r6\n\t"
78439 #else
78440         "sbc	r6, r6\n\t"
78441 #endif
78442 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78443         "adds	r3, r3, r3\n\t"
78444 #else
78445         "add	r3, r3, r3\n\t"
78446 #endif
78447 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78448         "subs	r3, r3, r6\n\t"
78449 #else
78450         "sub	r3, r3, r6\n\t"
78451 #endif
78452 #ifdef WOLFSSL_KEIL
78453         "ands	r6, r6, r5\n\t"
78454 #elif defined(__clang__)
78455         "ands	r6, r5\n\t"
78456 #else
78457         "and	r6, r5\n\t"
78458 #endif
78459 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78460         "subs	%[d1], %[d1], r6\n\t"
78461 #else
78462         "sub	%[d1], %[d1], r6\n\t"
78463 #endif
78464 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78465         "subs	r4, r4, #1\n\t"
78466 #else
78467         "sub	r4, r4, #1\n\t"
78468 #endif
78469         "bpl	L_div_3072_word_96_loop_%=\n\t"
78470         "movs	r7, #0\n\t"
78471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78472         "adds	r3, r3, r3\n\t"
78473 #else
78474         "add	r3, r3, r3\n\t"
78475 #endif
78476 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78477         "adds	r3, r3, #1\n\t"
78478 #else
78479         "add	r3, r3, #1\n\t"
78480 #endif
78481         "# r * div - Start\n\t"
78482         "uxth	%[d1], r3\n\t"
78483         "uxth	r4, %[div]\n\t"
78484 #ifdef WOLFSSL_KEIL
78485         "muls	r4, %[d1], r4\n\t"
78486 #elif defined(__clang__)
78487         "muls	r4, %[d1]\n\t"
78488 #else
78489         "mul	r4, %[d1]\n\t"
78490 #endif
78491 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78492         "lsrs	r6, %[div], #16\n\t"
78493 #else
78494         "lsr	r6, %[div], #16\n\t"
78495 #endif
78496 #ifdef WOLFSSL_KEIL
78497         "muls	%[d1], r6, %[d1]\n\t"
78498 #elif defined(__clang__)
78499         "muls	%[d1], r6\n\t"
78500 #else
78501         "mul	%[d1], r6\n\t"
78502 #endif
78503 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78504         "lsrs	r5, %[d1], #16\n\t"
78505 #else
78506         "lsr	r5, %[d1], #16\n\t"
78507 #endif
78508 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78509         "lsls	%[d1], %[d1], #16\n\t"
78510 #else
78511         "lsl	%[d1], %[d1], #16\n\t"
78512 #endif
78513 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78514         "adds	r4, r4, %[d1]\n\t"
78515 #else
78516         "add	r4, r4, %[d1]\n\t"
78517 #endif
78518 #ifdef WOLFSSL_KEIL
78519         "adcs	r5, r5, r7\n\t"
78520 #elif defined(__clang__)
78521         "adcs	r5, r7\n\t"
78522 #else
78523         "adc	r5, r7\n\t"
78524 #endif
78525 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78526         "lsrs	%[d1], r3, #16\n\t"
78527 #else
78528         "lsr	%[d1], r3, #16\n\t"
78529 #endif
78530 #ifdef WOLFSSL_KEIL
78531         "muls	r6, %[d1], r6\n\t"
78532 #elif defined(__clang__)
78533         "muls	r6, %[d1]\n\t"
78534 #else
78535         "mul	r6, %[d1]\n\t"
78536 #endif
78537 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78538         "adds	r5, r5, r6\n\t"
78539 #else
78540         "add	r5, r5, r6\n\t"
78541 #endif
78542         "uxth	r6, %[div]\n\t"
78543 #ifdef WOLFSSL_KEIL
78544         "muls	%[d1], r6, %[d1]\n\t"
78545 #elif defined(__clang__)
78546         "muls	%[d1], r6\n\t"
78547 #else
78548         "mul	%[d1], r6\n\t"
78549 #endif
78550 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78551         "lsrs	r6, %[d1], #16\n\t"
78552 #else
78553         "lsr	r6, %[d1], #16\n\t"
78554 #endif
78555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78556         "lsls	%[d1], %[d1], #16\n\t"
78557 #else
78558         "lsl	%[d1], %[d1], #16\n\t"
78559 #endif
78560 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78561         "adds	r4, r4, %[d1]\n\t"
78562 #else
78563         "add	r4, r4, %[d1]\n\t"
78564 #endif
78565 #ifdef WOLFSSL_KEIL
78566         "adcs	r5, r5, r6\n\t"
78567 #elif defined(__clang__)
78568         "adcs	r5, r6\n\t"
78569 #else
78570         "adc	r5, r6\n\t"
78571 #endif
78572         "# r * div - Done\n\t"
78573         "mov	%[d1], r8\n\t"
78574 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78575         "subs	%[d1], %[d1], r4\n\t"
78576 #else
78577         "sub	%[d1], %[d1], r4\n\t"
78578 #endif
78579         "movs	r4, %[d1]\n\t"
78580         "mov	%[d1], r9\n\t"
78581 #ifdef WOLFSSL_KEIL
78582         "sbcs	%[d1], %[d1], r5\n\t"
78583 #elif defined(__clang__)
78584         "sbcs	%[d1], r5\n\t"
78585 #else
78586         "sbc	%[d1], r5\n\t"
78587 #endif
78588         "movs	r5, %[d1]\n\t"
78589 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78590         "adds	r3, r3, r5\n\t"
78591 #else
78592         "add	r3, r3, r5\n\t"
78593 #endif
78594         "# r * div - Start\n\t"
78595         "uxth	%[d1], r3\n\t"
78596         "uxth	r4, %[div]\n\t"
78597 #ifdef WOLFSSL_KEIL
78598         "muls	r4, %[d1], r4\n\t"
78599 #elif defined(__clang__)
78600         "muls	r4, %[d1]\n\t"
78601 #else
78602         "mul	r4, %[d1]\n\t"
78603 #endif
78604 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78605         "lsrs	r6, %[div], #16\n\t"
78606 #else
78607         "lsr	r6, %[div], #16\n\t"
78608 #endif
78609 #ifdef WOLFSSL_KEIL
78610         "muls	%[d1], r6, %[d1]\n\t"
78611 #elif defined(__clang__)
78612         "muls	%[d1], r6\n\t"
78613 #else
78614         "mul	%[d1], r6\n\t"
78615 #endif
78616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78617         "lsrs	r5, %[d1], #16\n\t"
78618 #else
78619         "lsr	r5, %[d1], #16\n\t"
78620 #endif
78621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78622         "lsls	%[d1], %[d1], #16\n\t"
78623 #else
78624         "lsl	%[d1], %[d1], #16\n\t"
78625 #endif
78626 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78627         "adds	r4, r4, %[d1]\n\t"
78628 #else
78629         "add	r4, r4, %[d1]\n\t"
78630 #endif
78631 #ifdef WOLFSSL_KEIL
78632         "adcs	r5, r5, r7\n\t"
78633 #elif defined(__clang__)
78634         "adcs	r5, r7\n\t"
78635 #else
78636         "adc	r5, r7\n\t"
78637 #endif
78638 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78639         "lsrs	%[d1], r3, #16\n\t"
78640 #else
78641         "lsr	%[d1], r3, #16\n\t"
78642 #endif
78643 #ifdef WOLFSSL_KEIL
78644         "muls	r6, %[d1], r6\n\t"
78645 #elif defined(__clang__)
78646         "muls	r6, %[d1]\n\t"
78647 #else
78648         "mul	r6, %[d1]\n\t"
78649 #endif
78650 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78651         "adds	r5, r5, r6\n\t"
78652 #else
78653         "add	r5, r5, r6\n\t"
78654 #endif
78655         "uxth	r6, %[div]\n\t"
78656 #ifdef WOLFSSL_KEIL
78657         "muls	%[d1], r6, %[d1]\n\t"
78658 #elif defined(__clang__)
78659         "muls	%[d1], r6\n\t"
78660 #else
78661         "mul	%[d1], r6\n\t"
78662 #endif
78663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78664         "lsrs	r6, %[d1], #16\n\t"
78665 #else
78666         "lsr	r6, %[d1], #16\n\t"
78667 #endif
78668 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78669         "lsls	%[d1], %[d1], #16\n\t"
78670 #else
78671         "lsl	%[d1], %[d1], #16\n\t"
78672 #endif
78673 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78674         "adds	r4, r4, %[d1]\n\t"
78675 #else
78676         "add	r4, r4, %[d1]\n\t"
78677 #endif
78678 #ifdef WOLFSSL_KEIL
78679         "adcs	r5, r5, r6\n\t"
78680 #elif defined(__clang__)
78681         "adcs	r5, r6\n\t"
78682 #else
78683         "adc	r5, r6\n\t"
78684 #endif
78685         "# r * div - Done\n\t"
78686         "mov	%[d1], r8\n\t"
78687         "mov	r6, r9\n\t"
78688 #ifdef WOLFSSL_KEIL
78689         "subs	r4, %[d1], r4\n\t"
78690 #else
78691 #ifdef __clang__
78692         "subs	r4, %[d1], r4\n\t"
78693 #else
78694         "sub	r4, %[d1], r4\n\t"
78695 #endif
78696 #endif
78697 #ifdef WOLFSSL_KEIL
78698         "sbcs	r6, r6, r5\n\t"
78699 #elif defined(__clang__)
78700         "sbcs	r6, r5\n\t"
78701 #else
78702         "sbc	r6, r5\n\t"
78703 #endif
78704         "movs	r5, r6\n\t"
78705 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78706         "adds	r3, r3, r5\n\t"
78707 #else
78708         "add	r3, r3, r5\n\t"
78709 #endif
78710         "# r * div - Start\n\t"
78711         "uxth	%[d1], r3\n\t"
78712         "uxth	r4, %[div]\n\t"
78713 #ifdef WOLFSSL_KEIL
78714         "muls	r4, %[d1], r4\n\t"
78715 #elif defined(__clang__)
78716         "muls	r4, %[d1]\n\t"
78717 #else
78718         "mul	r4, %[d1]\n\t"
78719 #endif
78720 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78721         "lsrs	r6, %[div], #16\n\t"
78722 #else
78723         "lsr	r6, %[div], #16\n\t"
78724 #endif
78725 #ifdef WOLFSSL_KEIL
78726         "muls	%[d1], r6, %[d1]\n\t"
78727 #elif defined(__clang__)
78728         "muls	%[d1], r6\n\t"
78729 #else
78730         "mul	%[d1], r6\n\t"
78731 #endif
78732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78733         "lsrs	r5, %[d1], #16\n\t"
78734 #else
78735         "lsr	r5, %[d1], #16\n\t"
78736 #endif
78737 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78738         "lsls	%[d1], %[d1], #16\n\t"
78739 #else
78740         "lsl	%[d1], %[d1], #16\n\t"
78741 #endif
78742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78743         "adds	r4, r4, %[d1]\n\t"
78744 #else
78745         "add	r4, r4, %[d1]\n\t"
78746 #endif
78747 #ifdef WOLFSSL_KEIL
78748         "adcs	r5, r5, r7\n\t"
78749 #elif defined(__clang__)
78750         "adcs	r5, r7\n\t"
78751 #else
78752         "adc	r5, r7\n\t"
78753 #endif
78754 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78755         "lsrs	%[d1], r3, #16\n\t"
78756 #else
78757         "lsr	%[d1], r3, #16\n\t"
78758 #endif
78759 #ifdef WOLFSSL_KEIL
78760         "muls	r6, %[d1], r6\n\t"
78761 #elif defined(__clang__)
78762         "muls	r6, %[d1]\n\t"
78763 #else
78764         "mul	r6, %[d1]\n\t"
78765 #endif
78766 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78767         "adds	r5, r5, r6\n\t"
78768 #else
78769         "add	r5, r5, r6\n\t"
78770 #endif
78771         "uxth	r6, %[div]\n\t"
78772 #ifdef WOLFSSL_KEIL
78773         "muls	%[d1], r6, %[d1]\n\t"
78774 #elif defined(__clang__)
78775         "muls	%[d1], r6\n\t"
78776 #else
78777         "mul	%[d1], r6\n\t"
78778 #endif
78779 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78780         "lsrs	r6, %[d1], #16\n\t"
78781 #else
78782         "lsr	r6, %[d1], #16\n\t"
78783 #endif
78784 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78785         "lsls	%[d1], %[d1], #16\n\t"
78786 #else
78787         "lsl	%[d1], %[d1], #16\n\t"
78788 #endif
78789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78790         "adds	r4, r4, %[d1]\n\t"
78791 #else
78792         "add	r4, r4, %[d1]\n\t"
78793 #endif
78794 #ifdef WOLFSSL_KEIL
78795         "adcs	r5, r5, r6\n\t"
78796 #elif defined(__clang__)
78797         "adcs	r5, r6\n\t"
78798 #else
78799         "adc	r5, r6\n\t"
78800 #endif
78801         "# r * div - Done\n\t"
78802         "mov	%[d1], r8\n\t"
78803         "mov	r6, r9\n\t"
78804 #ifdef WOLFSSL_KEIL
78805         "subs	r4, %[d1], r4\n\t"
78806 #else
78807 #ifdef __clang__
78808         "subs	r4, %[d1], r4\n\t"
78809 #else
78810         "sub	r4, %[d1], r4\n\t"
78811 #endif
78812 #endif
78813 #ifdef WOLFSSL_KEIL
78814         "sbcs	r6, r6, r5\n\t"
78815 #elif defined(__clang__)
78816         "sbcs	r6, r5\n\t"
78817 #else
78818         "sbc	r6, r5\n\t"
78819 #endif
78820         "movs	r5, r6\n\t"
78821 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78822         "adds	r3, r3, r5\n\t"
78823 #else
78824         "add	r3, r3, r5\n\t"
78825 #endif
78826         "movs	r6, %[div]\n\t"
78827 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78828         "subs	r6, r6, r4\n\t"
78829 #else
78830         "sub	r6, r6, r4\n\t"
78831 #endif
78832 #ifdef WOLFSSL_KEIL
78833         "sbcs	r6, r6, r6\n\t"
78834 #elif defined(__clang__)
78835         "sbcs	r6, r6\n\t"
78836 #else
78837         "sbc	r6, r6\n\t"
78838 #endif
78839 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78840         "subs	r3, r3, r6\n\t"
78841 #else
78842         "sub	r3, r3, r6\n\t"
78843 #endif
78844         "movs	%[d1], r3\n\t"
78845         : [d1] "+r" (d1), [d0] "+r" (d0), [div] "+r" (div)
78846         :
78847         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
78848     );
78849     return (uint32_t)(size_t)d1;
78850 }
78851 
78852 /* Divide d in a and put remainder into r (m*d + r = a)
78853  * m is not calculated as it is not needed at this time.
78854  *
78855  * a  Number to be divided.
78856  * d  Number to divide with.
78857  * m  Multiplier result.
78858  * r  Remainder from the division.
78859  * returns MP_OKAY indicating success.
78860  */
sp_3072_div_96_cond(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)78861 static WC_INLINE int sp_3072_div_96_cond(const sp_digit* a, const sp_digit* d, sp_digit* m,
78862         sp_digit* r)
78863 {
78864     sp_digit t1[192], t2[97];
78865     sp_digit div, r1;
78866     int i;
78867 
78868     (void)m;
78869 
78870     div = d[95];
78871     XMEMCPY(t1, a, sizeof(*t1) * 2 * 96);
78872     for (i=95; i>=0; i--) {
78873         sp_digit hi = t1[96 + i] - (t1[96 + i] == div);
78874         r1 = div_3072_word_96(hi, t1[96 + i - 1], div);
78875 
78876         sp_3072_mul_d_96(t2, d, r1);
78877         t1[96 + i] += sp_3072_sub_in_place_96(&t1[i], t2);
78878         t1[96 + i] -= t2[96];
78879         if (t1[96 + i] != 0) {
78880             t1[96 + i] += sp_3072_add_96(&t1[i], &t1[i], d);
78881             if (t1[96 + i] != 0)
78882                 t1[96 + i] += sp_3072_add_96(&t1[i], &t1[i], d);
78883         }
78884     }
78885 
78886     for (i = 95; i > 0; i--) {
78887         if (t1[i] != d[i])
78888             break;
78889     }
78890     if (t1[i] >= d[i]) {
78891         sp_3072_sub_96(r, t1, d);
78892     }
78893     else {
78894         XMEMCPY(r, t1, sizeof(*t1) * 96);
78895     }
78896 
78897     return MP_OKAY;
78898 }
78899 
78900 /* Reduce a modulo m into r. (r = a mod m)
78901  *
78902  * r  A single precision number that is the reduced result.
78903  * a  A single precision number that is to be reduced.
78904  * m  A single precision number that is the modulus to reduce with.
78905  * returns MP_OKAY indicating success.
78906  */
sp_3072_mod_96_cond(sp_digit * r,const sp_digit * a,const sp_digit * m)78907 static WC_INLINE int sp_3072_mod_96_cond(sp_digit* r, const sp_digit* a, const sp_digit* m)
78908 {
78909     return sp_3072_div_96_cond(a, m, NULL, r);
78910 }
78911 
78912 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
78913 /* AND m into each word of a and store in r.
78914  *
78915  * r  A single precision integer.
78916  * a  A single precision integer.
78917  * m  Mask to AND against each digit.
78918  */
sp_3072_mask_96(sp_digit * r,const sp_digit * a,sp_digit m)78919 static void sp_3072_mask_96(sp_digit* r, const sp_digit* a, sp_digit m)
78920 {
78921 #ifdef WOLFSSL_SP_SMALL
78922     int i;
78923 
78924     for (i=0; i<96; i++) {
78925         r[i] = a[i] & m;
78926     }
78927 #else
78928     int i;
78929 
78930     for (i = 0; i < 96; i += 8) {
78931         r[i+0] = a[i+0] & m;
78932         r[i+1] = a[i+1] & m;
78933         r[i+2] = a[i+2] & m;
78934         r[i+3] = a[i+3] & m;
78935         r[i+4] = a[i+4] & m;
78936         r[i+5] = a[i+5] & m;
78937         r[i+6] = a[i+6] & m;
78938         r[i+7] = a[i+7] & m;
78939     }
78940 #endif
78941 }
78942 
78943 /* Compare a with b in constant time.
78944  *
78945  * a  A single precision integer.
78946  * b  A single precision integer.
78947  * return -ve, 0 or +ve if a is less than, equal to or greater than b
78948  * respectively.
78949  */
sp_3072_cmp_96(const sp_digit * a,const sp_digit * b)78950 SP_NOINLINE static sp_int32 sp_3072_cmp_96(const sp_digit* a, const sp_digit* b)
78951 {
78952     __asm__ __volatile__ (
78953         "movs	r2, #0\n\t"
78954         "movs	r3, #0\n\t"
78955 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78956         "mvns	r3, r3\n\t"
78957 #else
78958         "mvn	r3, r3\n\t"
78959 #endif
78960         "movs	r6, #0xff\n\t"
78961 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78962         "adds	r6, r6, #0x7d\n\t"
78963 #else
78964         "add	r6, r6, #0x7d\n\t"
78965 #endif
78966         "\n"
78967     "L_sp_3072_cmp_96_words_%=:\n\t"
78968         "ldr	r7, [%[a], r6]\n\t"
78969         "ldr	r5, [%[b], r6]\n\t"
78970 #ifdef WOLFSSL_KEIL
78971         "ands	r7, r7, r3\n\t"
78972 #elif defined(__clang__)
78973         "ands	r7, r3\n\t"
78974 #else
78975         "and	r7, r3\n\t"
78976 #endif
78977 #ifdef WOLFSSL_KEIL
78978         "ands	r5, r5, r3\n\t"
78979 #elif defined(__clang__)
78980         "ands	r5, r3\n\t"
78981 #else
78982         "and	r5, r3\n\t"
78983 #endif
78984         "movs	r4, r7\n\t"
78985 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78986         "subs	r7, r7, r5\n\t"
78987 #else
78988         "sub	r7, r7, r5\n\t"
78989 #endif
78990 #ifdef WOLFSSL_KEIL
78991         "sbcs	r7, r7, r7\n\t"
78992 #elif defined(__clang__)
78993         "sbcs	r7, r7\n\t"
78994 #else
78995         "sbc	r7, r7\n\t"
78996 #endif
78997 #if defined(__clang__) || defined(WOLFSSL_KEIL)
78998         "adds	r2, r2, r7\n\t"
78999 #else
79000         "add	r2, r2, r7\n\t"
79001 #endif
79002 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79003         "mvns	r7, r7\n\t"
79004 #else
79005         "mvn	r7, r7\n\t"
79006 #endif
79007 #ifdef WOLFSSL_KEIL
79008         "ands	r3, r3, r7\n\t"
79009 #elif defined(__clang__)
79010         "ands	r3, r7\n\t"
79011 #else
79012         "and	r3, r7\n\t"
79013 #endif
79014 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79015         "subs	r5, r5, r4\n\t"
79016 #else
79017         "sub	r5, r5, r4\n\t"
79018 #endif
79019 #ifdef WOLFSSL_KEIL
79020         "sbcs	r7, r7, r7\n\t"
79021 #elif defined(__clang__)
79022         "sbcs	r7, r7\n\t"
79023 #else
79024         "sbc	r7, r7\n\t"
79025 #endif
79026 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79027         "subs	r2, r2, r7\n\t"
79028 #else
79029         "sub	r2, r2, r7\n\t"
79030 #endif
79031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79032         "mvns	r7, r7\n\t"
79033 #else
79034         "mvn	r7, r7\n\t"
79035 #endif
79036 #ifdef WOLFSSL_KEIL
79037         "ands	r3, r3, r7\n\t"
79038 #elif defined(__clang__)
79039         "ands	r3, r7\n\t"
79040 #else
79041         "and	r3, r7\n\t"
79042 #endif
79043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79044         "subs	r6, r6, #4\n\t"
79045 #else
79046         "sub	r6, r6, #4\n\t"
79047 #endif
79048         "cmp	r6, #0\n\t"
79049         "bge	L_sp_3072_cmp_96_words_%=\n\t"
79050         "movs	%[a], r2\n\t"
79051         : [a] "+r" (a), [b] "+r" (b)
79052         :
79053         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
79054     );
79055     return (uint32_t)(size_t)a;
79056 }
79057 
79058 /* Divide d in a and put remainder into r (m*d + r = a)
79059  * m is not calculated as it is not needed at this time.
79060  *
79061  * a  Number to be divided.
79062  * d  Number to divide with.
79063  * m  Multiplier result.
79064  * r  Remainder from the division.
79065  * returns MP_OKAY indicating success.
79066  */
sp_3072_div_96(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)79067 static WC_INLINE int sp_3072_div_96(const sp_digit* a, const sp_digit* d, sp_digit* m,
79068         sp_digit* r)
79069 {
79070     sp_digit t1[192], t2[97];
79071     sp_digit div, r1;
79072     int i;
79073 
79074     (void)m;
79075 
79076     div = d[95];
79077     XMEMCPY(t1, a, sizeof(*t1) * 2 * 96);
79078     for (i=95; i>=0; i--) {
79079         sp_digit hi = t1[96 + i] - (t1[96 + i] == div);
79080         r1 = div_3072_word_96(hi, t1[96 + i - 1], div);
79081 
79082         sp_3072_mul_d_96(t2, d, r1);
79083         t1[96 + i] += sp_3072_sub_in_place_96(&t1[i], t2);
79084         t1[96 + i] -= t2[96];
79085         sp_3072_mask_96(t2, d, t1[96 + i]);
79086         t1[96 + i] += sp_3072_add_96(&t1[i], &t1[i], t2);
79087         sp_3072_mask_96(t2, d, t1[96 + i]);
79088         t1[96 + i] += sp_3072_add_96(&t1[i], &t1[i], t2);
79089     }
79090 
79091     r1 = sp_3072_cmp_96(t1, d) >= 0;
79092     sp_3072_cond_sub_96(r, t1, d, (sp_digit)0 - r1);
79093 
79094     return MP_OKAY;
79095 }
79096 
79097 /* Reduce a modulo m into r. (r = a mod m)
79098  *
79099  * r  A single precision number that is the reduced result.
79100  * a  A single precision number that is to be reduced.
79101  * m  A single precision number that is the modulus to reduce with.
79102  * returns MP_OKAY indicating success.
79103  */
sp_3072_mod_96(sp_digit * r,const sp_digit * a,const sp_digit * m)79104 static WC_INLINE int sp_3072_mod_96(sp_digit* r, const sp_digit* a, const sp_digit* m)
79105 {
79106     return sp_3072_div_96(a, m, NULL, r);
79107 }
79108 
79109 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
79110                                                      defined(WOLFSSL_HAVE_SP_DH)
79111 #ifdef WOLFSSL_SP_SMALL
79112 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
79113  *
79114  * r     A single precision number that is the result of the operation.
79115  * a     A single precision number being exponentiated.
79116  * e     A single precision number that is the exponent.
79117  * bits  The number of bits in the exponent.
79118  * m     A single precision number that is the modulus.
79119  * returns  0 on success.
79120  * returns  MEMORY_E on dynamic memory allocation failure.
79121  * returns  MP_VAL when base is even or exponent is 0.
79122  */
sp_3072_mod_exp_96(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)79123 static int sp_3072_mod_exp_96(sp_digit* r, const sp_digit* a, const sp_digit* e,
79124         int bits, const sp_digit* m, int reduceA)
79125 {
79126 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79127     sp_digit* td = NULL;
79128 #else
79129     sp_digit td[8 * 192];
79130 #endif
79131     sp_digit* t[8];
79132     sp_digit* norm = NULL;
79133     sp_digit mp = 1;
79134     sp_digit n;
79135     sp_digit mask;
79136     int i;
79137     int c;
79138     byte y;
79139     int err = MP_OKAY;
79140 
79141     if ((m[0] & 1) == 0) {
79142         err = MP_VAL;
79143     }
79144     else if (bits == 0) {
79145         err = MP_VAL;
79146     }
79147 
79148 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79149     if (err == MP_OKAY) {
79150         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (8 * 192), NULL,
79151                                 DYNAMIC_TYPE_TMP_BUFFER);
79152         if (td == NULL)
79153             err = MEMORY_E;
79154     }
79155 #endif
79156 
79157     if (err == MP_OKAY) {
79158         norm = td;
79159         for (i=0; i<8; i++) {
79160             t[i] = td + i * 192;
79161         }
79162 
79163         sp_3072_mont_setup(m, &mp);
79164         sp_3072_mont_norm_96(norm, m);
79165 
79166         XMEMSET(t[1], 0, sizeof(sp_digit) * 96U);
79167         if (reduceA != 0) {
79168             err = sp_3072_mod_96(t[1] + 96, a, m);
79169             if (err == MP_OKAY) {
79170                 err = sp_3072_mod_96(t[1], t[1], m);
79171             }
79172         }
79173         else {
79174             XMEMCPY(t[1] + 96, a, sizeof(sp_digit) * 96);
79175             err = sp_3072_mod_96(t[1], t[1], m);
79176         }
79177     }
79178 
79179     if (err == MP_OKAY) {
79180         sp_3072_mont_sqr_96(t[ 2], t[ 1], m, mp);
79181         sp_3072_mont_mul_96(t[ 3], t[ 2], t[ 1], m, mp);
79182         sp_3072_mont_sqr_96(t[ 4], t[ 2], m, mp);
79183         sp_3072_mont_mul_96(t[ 5], t[ 3], t[ 2], m, mp);
79184         sp_3072_mont_sqr_96(t[ 6], t[ 3], m, mp);
79185         sp_3072_mont_mul_96(t[ 7], t[ 4], t[ 3], m, mp);
79186 
79187         i = (bits - 1) / 32;
79188         n = e[i--];
79189         c = bits & 31;
79190         if (c == 0) {
79191             c = 32;
79192         }
79193         c -= bits % 3;
79194         if (c == 32) {
79195             c = 29;
79196         }
79197         if (c < 0) {
79198             /* Number of bits in top word is less than number needed. */
79199             c = -c;
79200             y = (byte)(n << c);
79201             n = e[i--];
79202             y |= (byte)(n >> (64 - c));
79203             n <<= c;
79204             c = 64 - c;
79205         }
79206         else {
79207             y = (byte)(n >> c);
79208             n <<= 32 - c;
79209         }
79210         XMEMCPY(r, t[y], sizeof(sp_digit) * 96);
79211         for (; i>=0 || c>=3; ) {
79212             if (c == 0) {
79213                 n = e[i--];
79214                 y = (byte)(n >> 29);
79215                 n <<= 3;
79216                 c = 29;
79217             }
79218             else if (c < 3) {
79219                 y = (byte)(n >> 29);
79220                 n = e[i--];
79221                 c = 3 - c;
79222                 y |= (byte)(n >> (32 - c));
79223                 n <<= c;
79224                 c = 32 - c;
79225             }
79226             else {
79227                 y = (byte)((n >> 29) & 0x7);
79228                 n <<= 3;
79229                 c -= 3;
79230             }
79231 
79232             sp_3072_mont_sqr_96(r, r, m, mp);
79233             sp_3072_mont_sqr_96(r, r, m, mp);
79234             sp_3072_mont_sqr_96(r, r, m, mp);
79235 
79236             sp_3072_mont_mul_96(r, r, t[y], m, mp);
79237         }
79238 
79239         XMEMSET(&r[96], 0, sizeof(sp_digit) * 96U);
79240         sp_3072_mont_reduce_96(r, m, mp);
79241 
79242         mask = 0 - (sp_3072_cmp_96(r, m) >= 0);
79243         sp_3072_cond_sub_96(r, r, m, mask);
79244     }
79245 
79246 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79247     if (td != NULL)
79248         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
79249 #endif
79250 
79251     return err;
79252 }
79253 #else
79254 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
79255  *
79256  * r     A single precision number that is the result of the operation.
79257  * a     A single precision number being exponentiated.
79258  * e     A single precision number that is the exponent.
79259  * bits  The number of bits in the exponent.
79260  * m     A single precision number that is the modulus.
79261  * returns  0 on success.
79262  * returns  MEMORY_E on dynamic memory allocation failure.
79263  * returns  MP_VAL when base is even or exponent is 0.
79264  */
sp_3072_mod_exp_96(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)79265 static int sp_3072_mod_exp_96(sp_digit* r, const sp_digit* a, const sp_digit* e,
79266         int bits, const sp_digit* m, int reduceA)
79267 {
79268 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79269     sp_digit* td = NULL;
79270 #else
79271     sp_digit td[16 * 192];
79272 #endif
79273     sp_digit* t[16];
79274     sp_digit* norm = NULL;
79275     sp_digit mp = 1;
79276     sp_digit n;
79277     sp_digit mask;
79278     int i;
79279     int c;
79280     byte y;
79281     int err = MP_OKAY;
79282 
79283     if ((m[0] & 1) == 0) {
79284         err = MP_VAL;
79285     }
79286     else if (bits == 0) {
79287         err = MP_VAL;
79288     }
79289 
79290 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79291     if (err == MP_OKAY) {
79292         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (16 * 192), NULL,
79293                                 DYNAMIC_TYPE_TMP_BUFFER);
79294         if (td == NULL)
79295             err = MEMORY_E;
79296     }
79297 #endif
79298 
79299     if (err == MP_OKAY) {
79300         norm = td;
79301         for (i=0; i<16; i++) {
79302             t[i] = td + i * 192;
79303         }
79304 
79305         sp_3072_mont_setup(m, &mp);
79306         sp_3072_mont_norm_96(norm, m);
79307 
79308         XMEMSET(t[1], 0, sizeof(sp_digit) * 96U);
79309         if (reduceA != 0) {
79310             err = sp_3072_mod_96(t[1] + 96, a, m);
79311             if (err == MP_OKAY) {
79312                 err = sp_3072_mod_96(t[1], t[1], m);
79313             }
79314         }
79315         else {
79316             XMEMCPY(t[1] + 96, a, sizeof(sp_digit) * 96);
79317             err = sp_3072_mod_96(t[1], t[1], m);
79318         }
79319     }
79320 
79321     if (err == MP_OKAY) {
79322         sp_3072_mont_sqr_96(t[ 2], t[ 1], m, mp);
79323         sp_3072_mont_mul_96(t[ 3], t[ 2], t[ 1], m, mp);
79324         sp_3072_mont_sqr_96(t[ 4], t[ 2], m, mp);
79325         sp_3072_mont_mul_96(t[ 5], t[ 3], t[ 2], m, mp);
79326         sp_3072_mont_sqr_96(t[ 6], t[ 3], m, mp);
79327         sp_3072_mont_mul_96(t[ 7], t[ 4], t[ 3], m, mp);
79328         sp_3072_mont_sqr_96(t[ 8], t[ 4], m, mp);
79329         sp_3072_mont_mul_96(t[ 9], t[ 5], t[ 4], m, mp);
79330         sp_3072_mont_sqr_96(t[10], t[ 5], m, mp);
79331         sp_3072_mont_mul_96(t[11], t[ 6], t[ 5], m, mp);
79332         sp_3072_mont_sqr_96(t[12], t[ 6], m, mp);
79333         sp_3072_mont_mul_96(t[13], t[ 7], t[ 6], m, mp);
79334         sp_3072_mont_sqr_96(t[14], t[ 7], m, mp);
79335         sp_3072_mont_mul_96(t[15], t[ 8], t[ 7], m, mp);
79336 
79337         i = (bits - 1) / 32;
79338         n = e[i--];
79339         c = bits & 31;
79340         if (c == 0) {
79341             c = 32;
79342         }
79343         c -= bits % 4;
79344         if (c == 32) {
79345             c = 28;
79346         }
79347         if (c < 0) {
79348             /* Number of bits in top word is less than number needed. */
79349             c = -c;
79350             y = (byte)(n << c);
79351             n = e[i--];
79352             y |= (byte)(n >> (64 - c));
79353             n <<= c;
79354             c = 64 - c;
79355         }
79356         else {
79357             y = (byte)(n >> c);
79358             n <<= 32 - c;
79359         }
79360         XMEMCPY(r, t[y], sizeof(sp_digit) * 96);
79361         for (; i>=0 || c>=4; ) {
79362             if (c == 0) {
79363                 n = e[i--];
79364                 y = (byte)(n >> 28);
79365                 n <<= 4;
79366                 c = 28;
79367             }
79368             else if (c < 4) {
79369                 y = (byte)(n >> 28);
79370                 n = e[i--];
79371                 c = 4 - c;
79372                 y |= (byte)(n >> (32 - c));
79373                 n <<= c;
79374                 c = 32 - c;
79375             }
79376             else {
79377                 y = (byte)((n >> 28) & 0xf);
79378                 n <<= 4;
79379                 c -= 4;
79380             }
79381 
79382             sp_3072_mont_sqr_96(r, r, m, mp);
79383             sp_3072_mont_sqr_96(r, r, m, mp);
79384             sp_3072_mont_sqr_96(r, r, m, mp);
79385             sp_3072_mont_sqr_96(r, r, m, mp);
79386 
79387             sp_3072_mont_mul_96(r, r, t[y], m, mp);
79388         }
79389 
79390         XMEMSET(&r[96], 0, sizeof(sp_digit) * 96U);
79391         sp_3072_mont_reduce_96(r, m, mp);
79392 
79393         mask = 0 - (sp_3072_cmp_96(r, m) >= 0);
79394         sp_3072_cond_sub_96(r, r, m, mask);
79395     }
79396 
79397 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79398     if (td != NULL)
79399         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
79400 #endif
79401 
79402     return err;
79403 }
79404 #endif /* WOLFSSL_SP_SMALL */
79405 #endif /* (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
79406 
79407 #endif /* (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
79408 #ifdef WOLFSSL_HAVE_SP_RSA
79409 /* RSA public key operation.
79410  *
79411  * in      Array of bytes representing the number to exponentiate, base.
79412  * inLen   Number of bytes in base.
79413  * em      Public exponent.
79414  * mm      Modulus.
79415  * out     Buffer to hold big-endian bytes of exponentiation result.
79416  *         Must be at least 384 bytes long.
79417  * outLen  Number of bytes in result.
79418  * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
79419  * an array is too long and MEMORY_E when dynamic memory allocation fails.
79420  */
sp_RsaPublic_3072(const byte * in,word32 inLen,const mp_int * em,const mp_int * mm,byte * out,word32 * outLen)79421 int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em,
79422     const mp_int* mm, byte* out, word32* outLen)
79423 {
79424 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79425     sp_digit* a = NULL;
79426 #else
79427     sp_digit a[96 * 5];
79428 #endif
79429     sp_digit* m = NULL;
79430     sp_digit* r = NULL;
79431     sp_digit *ah = NULL;
79432     sp_digit e[1] = {0};
79433     int err = MP_OKAY;
79434 
79435     if (*outLen < 384) {
79436         err = MP_TO_E;
79437     }
79438     else if (mp_count_bits(em) > 32 || inLen > 384 ||
79439                                                      mp_count_bits(mm) != 3072) {
79440         err = MP_READ_E;
79441     }
79442     else if (mp_iseven(mm)) {
79443         err = MP_VAL;
79444     }
79445 
79446 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79447     if (err == MP_OKAY) {
79448         a = (sp_digit*)XMALLOC(sizeof(sp_digit) * 96 * 5, NULL,
79449                                                               DYNAMIC_TYPE_RSA);
79450         if (a == NULL)
79451             err = MEMORY_E;
79452     }
79453 #endif
79454 
79455     if (err == MP_OKAY) {
79456         r = a + 96 * 2;
79457         m = r + 96 * 2;
79458         ah = a + 96;
79459 
79460         sp_3072_from_bin(ah, 96, in, inLen);
79461 #if DIGIT_BIT >= 32
79462         e[0] = em->dp[0];
79463 #else
79464         e[0] = em->dp[0];
79465         if (em->used > 1) {
79466             e[0] |= ((sp_digit)em->dp[1]) << DIGIT_BIT;
79467         }
79468 #endif
79469         if (e[0] == 0) {
79470             err = MP_EXPTMOD_E;
79471         }
79472     }
79473     if (err == MP_OKAY) {
79474         sp_3072_from_mp(m, 96, mm);
79475 
79476         if (e[0] == 0x3) {
79477             if (err == MP_OKAY) {
79478                 sp_3072_sqr_96(r, ah);
79479                 err = sp_3072_mod_96_cond(r, r, m);
79480             }
79481             if (err == MP_OKAY) {
79482                 sp_3072_mul_96(r, ah, r);
79483                 err = sp_3072_mod_96_cond(r, r, m);
79484             }
79485         }
79486         else {
79487             int i;
79488             sp_digit mp;
79489 
79490             sp_3072_mont_setup(m, &mp);
79491 
79492             /* Convert to Montgomery form. */
79493             XMEMSET(a, 0, sizeof(sp_digit) * 96);
79494             err = sp_3072_mod_96_cond(a, a, m);
79495 
79496             if (err == MP_OKAY) {
79497                 for (i = 31; i >= 0; i--) {
79498                     if (e[0] >> i) {
79499                         break;
79500                     }
79501                 }
79502 
79503                 XMEMCPY(r, a, sizeof(sp_digit) * 96);
79504                 for (i--; i>=0; i--) {
79505                     sp_3072_mont_sqr_96(r, r, m, mp);
79506                     if (((e[0] >> i) & 1) == 1) {
79507                         sp_3072_mont_mul_96(r, r, a, m, mp);
79508                     }
79509                 }
79510                 XMEMSET(&r[96], 0, sizeof(sp_digit) * 96);
79511                 sp_3072_mont_reduce_96(r, m, mp);
79512 
79513                 for (i = 95; i > 0; i--) {
79514                     if (r[i] != m[i]) {
79515                         break;
79516                     }
79517                 }
79518                 if (r[i] >= m[i]) {
79519                     sp_3072_sub_in_place_96(r, m);
79520                 }
79521             }
79522         }
79523     }
79524 
79525     if (err == MP_OKAY) {
79526         sp_3072_to_bin_96(r, out);
79527         *outLen = 384;
79528     }
79529 
79530 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79531     if (a != NULL)
79532         XFREE(a, NULL, DYNAMIC_TYPE_RSA);
79533 #endif
79534 
79535     return err;
79536 }
79537 
79538 #ifndef WOLFSSL_RSA_PUBLIC_ONLY
79539 /* Conditionally add a and b using the mask m.
79540  * m is -1 to add and 0 when not.
79541  *
79542  * r  A single precision number representing conditional add result.
79543  * a  A single precision number to add with.
79544  * b  A single precision number to add.
79545  * m  Mask value to apply.
79546  */
sp_3072_cond_add_48(sp_digit * r,const sp_digit * a,const sp_digit * b,sp_digit m)79547 SP_NOINLINE static sp_digit sp_3072_cond_add_48(sp_digit* r, const sp_digit* a,
79548         const sp_digit* b, sp_digit m)
79549 {
79550     __asm__ __volatile__ (
79551         "movs	r4, #0\n\t"
79552         "movs	r5, #0xc0\n\t"
79553         "mov	r8, r5\n\t"
79554         "movs	r7, #0\n\t"
79555         "\n"
79556     "L_sp_3072_cond_add_48_words_%=:\n\t"
79557         "ldr	r6, [%[b], r7]\n\t"
79558 #ifdef WOLFSSL_KEIL
79559         "ands	r6, r6, %[m]\n\t"
79560 #elif defined(__clang__)
79561         "ands	r6, %[m]\n\t"
79562 #else
79563         "and	r6, %[m]\n\t"
79564 #endif
79565         "movs	r5, #0\n\t"
79566 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79567         "subs	r5, r5, #1\n\t"
79568 #else
79569         "sub	r5, r5, #1\n\t"
79570 #endif
79571 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79572         "adds	r5, r5, r4\n\t"
79573 #else
79574         "add	r5, r5, r4\n\t"
79575 #endif
79576         "ldr	r5, [%[a], r7]\n\t"
79577 #ifdef WOLFSSL_KEIL
79578         "adcs	r5, r5, r6\n\t"
79579 #elif defined(__clang__)
79580         "adcs	r5, r6\n\t"
79581 #else
79582         "adc	r5, r6\n\t"
79583 #endif
79584         "movs	r4, #0\n\t"
79585 #ifdef WOLFSSL_KEIL
79586         "adcs	r4, r4, r4\n\t"
79587 #elif defined(__clang__)
79588         "adcs	r4, r4\n\t"
79589 #else
79590         "adc	r4, r4\n\t"
79591 #endif
79592         "str	r5, [%[r], r7]\n\t"
79593 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79594         "adds	r7, r7, #4\n\t"
79595 #else
79596         "add	r7, r7, #4\n\t"
79597 #endif
79598         "cmp	r7, r8\n\t"
79599         "blt	L_sp_3072_cond_add_48_words_%=\n\t"
79600         "movs	%[r], r4\n\t"
79601         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
79602         :
79603         : "memory", "r4", "r5", "r6", "r7", "r8"
79604     );
79605     return (uint32_t)(size_t)r;
79606 }
79607 
79608 /* RSA private key operation.
79609  *
79610  * in      Array of bytes representing the number to exponentiate, base.
79611  * inLen   Number of bytes in base.
79612  * dm      Private exponent.
79613  * pm      First prime.
79614  * qm      Second prime.
79615  * dpm     First prime's CRT exponent.
79616  * dqm     Second prime's CRT exponent.
79617  * qim     Inverse of second prime mod p.
79618  * mm      Modulus.
79619  * out     Buffer to hold big-endian bytes of exponentiation result.
79620  *         Must be at least 384 bytes long.
79621  * outLen  Number of bytes in result.
79622  * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
79623  * an array is too long and MEMORY_E when dynamic memory allocation fails.
79624  */
sp_RsaPrivate_3072(const byte * in,word32 inLen,const mp_int * dm,const mp_int * pm,const mp_int * qm,const mp_int * dpm,const mp_int * dqm,const mp_int * qim,const mp_int * mm,byte * out,word32 * outLen)79625 int sp_RsaPrivate_3072(const byte* in, word32 inLen, const mp_int* dm,
79626     const mp_int* pm, const mp_int* qm, const mp_int* dpm, const mp_int* dqm,
79627     const mp_int* qim, const mp_int* mm, byte* out, word32* outLen)
79628 {
79629 #if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
79630 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79631     sp_digit* d = NULL;
79632 #else
79633     sp_digit  d[96 * 4];
79634 #endif
79635     sp_digit* a = NULL;
79636     sp_digit* m = NULL;
79637     sp_digit* r = NULL;
79638     int err = MP_OKAY;
79639 
79640     (void)pm;
79641     (void)qm;
79642     (void)dpm;
79643     (void)dqm;
79644     (void)qim;
79645 
79646     if (*outLen < 384U) {
79647         err = MP_TO_E;
79648     }
79649     if (err == MP_OKAY) {
79650         if (mp_count_bits(dm) > 3072) {
79651            err = MP_READ_E;
79652         }
79653         else if (inLen > 384) {
79654             err = MP_READ_E;
79655         }
79656         else if (mp_count_bits(mm) != 3072) {
79657             err = MP_READ_E;
79658         }
79659         else if (mp_iseven(mm)) {
79660             err = MP_VAL;
79661         }
79662     }
79663 
79664 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79665     if (err == MP_OKAY) {
79666         d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 96 * 4, NULL,
79667                                                               DYNAMIC_TYPE_RSA);
79668         if (d == NULL)
79669             err = MEMORY_E;
79670     }
79671 #endif
79672 
79673     if (err == MP_OKAY) {
79674         a = d + 96;
79675         m = a + 192;
79676         r = a;
79677 
79678         sp_3072_from_bin(a, 96, in, inLen);
79679         sp_3072_from_mp(d, 96, dm);
79680         sp_3072_from_mp(m, 96, mm);
79681         err = sp_3072_mod_exp_96(r, a, d, 3072, m, 0);
79682     }
79683 
79684     if (err == MP_OKAY) {
79685         sp_3072_to_bin_96(r, out);
79686         *outLen = 384;
79687     }
79688 
79689 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79690     if (d != NULL)
79691 #endif
79692     {
79693         /* only "a" and "r" are sensitive and need zeroized (same pointer) */
79694         if (a != NULL)
79695             ForceZero(a, sizeof(sp_digit) * 96);
79696 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79697         XFREE(d, NULL, DYNAMIC_TYPE_RSA);
79698 #endif
79699     }
79700 
79701     return err;
79702 #else
79703 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79704     sp_digit* a = NULL;
79705 #else
79706     sp_digit a[48 * 11];
79707 #endif
79708     sp_digit* p = NULL;
79709     sp_digit* q = NULL;
79710     sp_digit* dp = NULL;
79711     sp_digit* tmpa = NULL;
79712     sp_digit* tmpb = NULL;
79713     sp_digit* r = NULL;
79714     sp_digit* qi = NULL;
79715     sp_digit* dq = NULL;
79716     sp_digit c;
79717     int err = MP_OKAY;
79718 
79719     (void)dm;
79720     (void)mm;
79721 
79722     if (*outLen < 384) {
79723         err = MP_TO_E;
79724     }
79725     else if (inLen > 384 || mp_count_bits(mm) != 3072) {
79726         err = MP_READ_E;
79727     }
79728     else if (mp_iseven(mm)) {
79729         err = MP_VAL;
79730     }
79731 
79732 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79733     if (err == MP_OKAY) {
79734         a = (sp_digit*)XMALLOC(sizeof(sp_digit) * 48 * 11, NULL,
79735                                                               DYNAMIC_TYPE_RSA);
79736         if (a == NULL)
79737             err = MEMORY_E;
79738     }
79739 #endif
79740 
79741     if (err == MP_OKAY) {
79742         p = a + 96 * 2;
79743         q = p + 48;
79744         qi = dq = dp = q + 48;
79745         tmpa = qi + 48;
79746         tmpb = tmpa + 96;
79747         r = a;
79748 
79749         sp_3072_from_bin(a, 96, in, inLen);
79750         sp_3072_from_mp(p, 48, pm);
79751         sp_3072_from_mp(q, 48, qm);
79752         sp_3072_from_mp(dp, 48, dpm);
79753 
79754         err = sp_3072_mod_exp_48(tmpa, a, dp, 1536, p, 1);
79755     }
79756     if (err == MP_OKAY) {
79757         sp_3072_from_mp(dq, 48, dqm);
79758         err = sp_3072_mod_exp_48(tmpb, a, dq, 1536, q, 1);
79759     }
79760 
79761     if (err == MP_OKAY) {
79762         c = sp_3072_sub_in_place_48(tmpa, tmpb);
79763         c += sp_3072_cond_add_48(tmpa, tmpa, p, c);
79764         sp_3072_cond_add_48(tmpa, tmpa, p, c);
79765 
79766         sp_3072_from_mp(qi, 48, qim);
79767         sp_3072_mul_48(tmpa, tmpa, qi);
79768         err = sp_3072_mod_48(tmpa, tmpa, p);
79769     }
79770 
79771     if (err == MP_OKAY) {
79772         sp_3072_mul_48(tmpa, q, tmpa);
79773         XMEMSET(&tmpb[48], 0, sizeof(sp_digit) * 48);
79774         sp_3072_add_96(r, tmpb, tmpa);
79775 
79776         sp_3072_to_bin_96(r, out);
79777         *outLen = 384;
79778     }
79779 
79780 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79781     if (a != NULL)
79782 #endif
79783     {
79784         ForceZero(a, sizeof(sp_digit) * 48 * 11);
79785     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
79786         XFREE(a, NULL, DYNAMIC_TYPE_RSA);
79787     #endif
79788     }
79789 #endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
79790     return err;
79791 }
79792 #endif /* WOLFSSL_RSA_PUBLIC_ONLY */
79793 #endif /* WOLFSSL_HAVE_SP_RSA */
79794 #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
79795                                               !defined(WOLFSSL_RSA_PUBLIC_ONLY))
79796 /* Convert an array of sp_digit to an mp_int.
79797  *
79798  * a  A single precision integer.
79799  * r  A multi-precision integer.
79800  */
sp_3072_to_mp(const sp_digit * a,mp_int * r)79801 static int sp_3072_to_mp(const sp_digit* a, mp_int* r)
79802 {
79803     int err;
79804 
79805     err = mp_grow(r, (3072 + DIGIT_BIT - 1) / DIGIT_BIT);
79806     if (err == MP_OKAY) { /*lint !e774 case where err is always MP_OKAY*/
79807 #if DIGIT_BIT == 32
79808         XMEMCPY(r->dp, a, sizeof(sp_digit) * 96);
79809         r->used = 96;
79810         mp_clamp(r);
79811 #elif DIGIT_BIT < 32
79812         int i;
79813         int j = 0;
79814         int s = 0;
79815 
79816         r->dp[0] = 0;
79817         for (i = 0; i < 96; i++) {
79818             r->dp[j] |= (mp_digit)(a[i] << s);
79819             r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
79820             s = DIGIT_BIT - s;
79821             r->dp[++j] = (mp_digit)(a[i] >> s);
79822             while (s + DIGIT_BIT <= 32) {
79823                 s += DIGIT_BIT;
79824                 r->dp[j++] &= ((sp_digit)1 << DIGIT_BIT) - 1;
79825                 if (s == SP_WORD_SIZE) {
79826                     r->dp[j] = 0;
79827                 }
79828                 else {
79829                     r->dp[j] = (mp_digit)(a[i] >> s);
79830                 }
79831             }
79832             s = 32 - s;
79833         }
79834         r->used = (3072 + DIGIT_BIT - 1) / DIGIT_BIT;
79835         mp_clamp(r);
79836 #else
79837         int i;
79838         int j = 0;
79839         int s = 0;
79840 
79841         r->dp[0] = 0;
79842         for (i = 0; i < 96; i++) {
79843             r->dp[j] |= ((mp_digit)a[i]) << s;
79844             if (s + 32 >= DIGIT_BIT) {
79845     #if DIGIT_BIT != 32 && DIGIT_BIT != 64
79846                 r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
79847     #endif
79848                 s = DIGIT_BIT - s;
79849                 r->dp[++j] = a[i] >> s;
79850                 s = 32 - s;
79851             }
79852             else {
79853                 s += 32;
79854             }
79855         }
79856         r->used = (3072 + DIGIT_BIT - 1) / DIGIT_BIT;
79857         mp_clamp(r);
79858 #endif
79859     }
79860 
79861     return err;
79862 }
79863 
79864 /* Perform the modular exponentiation for Diffie-Hellman.
79865  *
79866  * base  Base. MP integer.
79867  * exp   Exponent. MP integer.
79868  * mod   Modulus. MP integer.
79869  * res   Result. MP integer.
79870  * returns 0 on success, MP_READ_E if there are too many bytes in an array
79871  * and MEMORY_E if memory allocation fails.
79872  */
sp_ModExp_3072(const mp_int * base,const mp_int * exp,const mp_int * mod,mp_int * res)79873 int sp_ModExp_3072(const mp_int* base, const mp_int* exp, const mp_int* mod,
79874     mp_int* res)
79875 {
79876     int err = MP_OKAY;
79877     sp_digit b[192];
79878     sp_digit e[96];
79879     sp_digit m[96];
79880     sp_digit* r = b;
79881     int expBits = mp_count_bits(exp);
79882 
79883     if (mp_count_bits(base) > 3072) {
79884         err = MP_READ_E;
79885     }
79886     else if (expBits > 3072) {
79887         err = MP_READ_E;
79888     }
79889     else if (mp_count_bits(mod) != 3072) {
79890         err = MP_READ_E;
79891     }
79892     else if (mp_iseven(mod)) {
79893         err = MP_VAL;
79894     }
79895 
79896     if (err == MP_OKAY) {
79897         sp_3072_from_mp(b, 96, base);
79898         sp_3072_from_mp(e, 96, exp);
79899         sp_3072_from_mp(m, 96, mod);
79900 
79901         err = sp_3072_mod_exp_96(r, b, e, expBits, m, 0);
79902     }
79903 
79904     if (err == MP_OKAY) {
79905         err = sp_3072_to_mp(r, res);
79906     }
79907 
79908     XMEMSET(e, 0, sizeof(e));
79909 
79910     return err;
79911 }
79912 
79913 #ifdef WOLFSSL_HAVE_SP_DH
79914 
79915 #ifdef HAVE_FFDHE_3072
79916 /* Lefy shift a by n bits into r. (r = a << n)
79917  *
79918  * r  A single precision integer.
79919  * a  A single precision integer.
79920  * n  Integer representing number of bits to shift.
79921  */
sp_3072_lshift_96(sp_digit * r,const sp_digit * a,byte n)79922 static void sp_3072_lshift_96(sp_digit* r, const sp_digit* a, byte n)
79923 {
79924     __asm__ __volatile__ (
79925         "movs	r7, #31\n\t"
79926 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79927         "subs	r7, r7, %[n]\n\t"
79928 #else
79929         "sub	r7, r7, %[n]\n\t"
79930 #endif
79931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79932         "adds	%[a], %[a], #0xff\n\t"
79933 #else
79934         "add	%[a], %[a], #0xff\n\t"
79935 #endif
79936 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79937         "adds	%[r], %[r], #0xff\n\t"
79938 #else
79939         "add	%[r], %[r], #0xff\n\t"
79940 #endif
79941 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79942         "adds	%[a], %[a], #0x41\n\t"
79943 #else
79944         "add	%[a], %[a], #0x41\n\t"
79945 #endif
79946 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79947         "adds	%[r], %[r], #0x41\n\t"
79948 #else
79949         "add	%[r], %[r], #0x41\n\t"
79950 #endif
79951         "ldr	r4, [%[a], #60]\n\t"
79952 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79953         "lsrs	r5, r4, #1\n\t"
79954 #else
79955         "lsr	r5, r4, #1\n\t"
79956 #endif
79957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79958         "lsls	r4, r4, %[n]\n\t"
79959 #else
79960         "lsl	r4, r4, %[n]\n\t"
79961 #endif
79962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79963         "lsrs	r5, r5, r7\n\t"
79964 #else
79965         "lsr	r5, r5, r7\n\t"
79966 #endif
79967         "ldr	r3, [%[a], #56]\n\t"
79968         "str	r5, [%[r], #64]\n\t"
79969 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79970         "lsrs	r6, r3, #1\n\t"
79971 #else
79972         "lsr	r6, r3, #1\n\t"
79973 #endif
79974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79975         "lsls	r3, r3, %[n]\n\t"
79976 #else
79977         "lsl	r3, r3, %[n]\n\t"
79978 #endif
79979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79980         "lsrs	r6, r6, r7\n\t"
79981 #else
79982         "lsr	r6, r6, r7\n\t"
79983 #endif
79984 #ifdef WOLFSSL_KEIL
79985         "orrs	r4, r4, r6\n\t"
79986 #elif defined(__clang__)
79987         "orrs	r4, r6\n\t"
79988 #else
79989         "orr	r4, r6\n\t"
79990 #endif
79991         "ldr	r5, [%[a], #52]\n\t"
79992         "str	r4, [%[r], #60]\n\t"
79993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79994         "lsrs	r6, r5, #1\n\t"
79995 #else
79996         "lsr	r6, r5, #1\n\t"
79997 #endif
79998 #if defined(__clang__) || defined(WOLFSSL_KEIL)
79999         "lsls	r5, r5, %[n]\n\t"
80000 #else
80001         "lsl	r5, r5, %[n]\n\t"
80002 #endif
80003 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80004         "lsrs	r6, r6, r7\n\t"
80005 #else
80006         "lsr	r6, r6, r7\n\t"
80007 #endif
80008 #ifdef WOLFSSL_KEIL
80009         "orrs	r3, r3, r6\n\t"
80010 #elif defined(__clang__)
80011         "orrs	r3, r6\n\t"
80012 #else
80013         "orr	r3, r6\n\t"
80014 #endif
80015         "ldr	r4, [%[a], #48]\n\t"
80016         "str	r3, [%[r], #56]\n\t"
80017 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80018         "lsrs	r6, r4, #1\n\t"
80019 #else
80020         "lsr	r6, r4, #1\n\t"
80021 #endif
80022 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80023         "lsls	r4, r4, %[n]\n\t"
80024 #else
80025         "lsl	r4, r4, %[n]\n\t"
80026 #endif
80027 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80028         "lsrs	r6, r6, r7\n\t"
80029 #else
80030         "lsr	r6, r6, r7\n\t"
80031 #endif
80032 #ifdef WOLFSSL_KEIL
80033         "orrs	r5, r5, r6\n\t"
80034 #elif defined(__clang__)
80035         "orrs	r5, r6\n\t"
80036 #else
80037         "orr	r5, r6\n\t"
80038 #endif
80039         "ldr	r3, [%[a], #44]\n\t"
80040         "str	r5, [%[r], #52]\n\t"
80041 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80042         "lsrs	r6, r3, #1\n\t"
80043 #else
80044         "lsr	r6, r3, #1\n\t"
80045 #endif
80046 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80047         "lsls	r3, r3, %[n]\n\t"
80048 #else
80049         "lsl	r3, r3, %[n]\n\t"
80050 #endif
80051 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80052         "lsrs	r6, r6, r7\n\t"
80053 #else
80054         "lsr	r6, r6, r7\n\t"
80055 #endif
80056 #ifdef WOLFSSL_KEIL
80057         "orrs	r4, r4, r6\n\t"
80058 #elif defined(__clang__)
80059         "orrs	r4, r6\n\t"
80060 #else
80061         "orr	r4, r6\n\t"
80062 #endif
80063         "ldr	r5, [%[a], #40]\n\t"
80064         "str	r4, [%[r], #48]\n\t"
80065 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80066         "lsrs	r6, r5, #1\n\t"
80067 #else
80068         "lsr	r6, r5, #1\n\t"
80069 #endif
80070 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80071         "lsls	r5, r5, %[n]\n\t"
80072 #else
80073         "lsl	r5, r5, %[n]\n\t"
80074 #endif
80075 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80076         "lsrs	r6, r6, r7\n\t"
80077 #else
80078         "lsr	r6, r6, r7\n\t"
80079 #endif
80080 #ifdef WOLFSSL_KEIL
80081         "orrs	r3, r3, r6\n\t"
80082 #elif defined(__clang__)
80083         "orrs	r3, r6\n\t"
80084 #else
80085         "orr	r3, r6\n\t"
80086 #endif
80087         "ldr	r4, [%[a], #36]\n\t"
80088         "str	r3, [%[r], #44]\n\t"
80089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80090         "lsrs	r6, r4, #1\n\t"
80091 #else
80092         "lsr	r6, r4, #1\n\t"
80093 #endif
80094 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80095         "lsls	r4, r4, %[n]\n\t"
80096 #else
80097         "lsl	r4, r4, %[n]\n\t"
80098 #endif
80099 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80100         "lsrs	r6, r6, r7\n\t"
80101 #else
80102         "lsr	r6, r6, r7\n\t"
80103 #endif
80104 #ifdef WOLFSSL_KEIL
80105         "orrs	r5, r5, r6\n\t"
80106 #elif defined(__clang__)
80107         "orrs	r5, r6\n\t"
80108 #else
80109         "orr	r5, r6\n\t"
80110 #endif
80111         "ldr	r3, [%[a], #32]\n\t"
80112         "str	r5, [%[r], #40]\n\t"
80113 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80114         "lsrs	r6, r3, #1\n\t"
80115 #else
80116         "lsr	r6, r3, #1\n\t"
80117 #endif
80118 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80119         "lsls	r3, r3, %[n]\n\t"
80120 #else
80121         "lsl	r3, r3, %[n]\n\t"
80122 #endif
80123 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80124         "lsrs	r6, r6, r7\n\t"
80125 #else
80126         "lsr	r6, r6, r7\n\t"
80127 #endif
80128 #ifdef WOLFSSL_KEIL
80129         "orrs	r4, r4, r6\n\t"
80130 #elif defined(__clang__)
80131         "orrs	r4, r6\n\t"
80132 #else
80133         "orr	r4, r6\n\t"
80134 #endif
80135         "ldr	r5, [%[a], #28]\n\t"
80136         "str	r4, [%[r], #36]\n\t"
80137 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80138         "lsrs	r6, r5, #1\n\t"
80139 #else
80140         "lsr	r6, r5, #1\n\t"
80141 #endif
80142 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80143         "lsls	r5, r5, %[n]\n\t"
80144 #else
80145         "lsl	r5, r5, %[n]\n\t"
80146 #endif
80147 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80148         "lsrs	r6, r6, r7\n\t"
80149 #else
80150         "lsr	r6, r6, r7\n\t"
80151 #endif
80152 #ifdef WOLFSSL_KEIL
80153         "orrs	r3, r3, r6\n\t"
80154 #elif defined(__clang__)
80155         "orrs	r3, r6\n\t"
80156 #else
80157         "orr	r3, r6\n\t"
80158 #endif
80159         "ldr	r4, [%[a], #24]\n\t"
80160         "str	r3, [%[r], #32]\n\t"
80161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80162         "lsrs	r6, r4, #1\n\t"
80163 #else
80164         "lsr	r6, r4, #1\n\t"
80165 #endif
80166 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80167         "lsls	r4, r4, %[n]\n\t"
80168 #else
80169         "lsl	r4, r4, %[n]\n\t"
80170 #endif
80171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80172         "lsrs	r6, r6, r7\n\t"
80173 #else
80174         "lsr	r6, r6, r7\n\t"
80175 #endif
80176 #ifdef WOLFSSL_KEIL
80177         "orrs	r5, r5, r6\n\t"
80178 #elif defined(__clang__)
80179         "orrs	r5, r6\n\t"
80180 #else
80181         "orr	r5, r6\n\t"
80182 #endif
80183         "ldr	r3, [%[a], #20]\n\t"
80184         "str	r5, [%[r], #28]\n\t"
80185 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80186         "lsrs	r6, r3, #1\n\t"
80187 #else
80188         "lsr	r6, r3, #1\n\t"
80189 #endif
80190 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80191         "lsls	r3, r3, %[n]\n\t"
80192 #else
80193         "lsl	r3, r3, %[n]\n\t"
80194 #endif
80195 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80196         "lsrs	r6, r6, r7\n\t"
80197 #else
80198         "lsr	r6, r6, r7\n\t"
80199 #endif
80200 #ifdef WOLFSSL_KEIL
80201         "orrs	r4, r4, r6\n\t"
80202 #elif defined(__clang__)
80203         "orrs	r4, r6\n\t"
80204 #else
80205         "orr	r4, r6\n\t"
80206 #endif
80207         "ldr	r5, [%[a], #16]\n\t"
80208         "str	r4, [%[r], #24]\n\t"
80209 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80210         "lsrs	r6, r5, #1\n\t"
80211 #else
80212         "lsr	r6, r5, #1\n\t"
80213 #endif
80214 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80215         "lsls	r5, r5, %[n]\n\t"
80216 #else
80217         "lsl	r5, r5, %[n]\n\t"
80218 #endif
80219 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80220         "lsrs	r6, r6, r7\n\t"
80221 #else
80222         "lsr	r6, r6, r7\n\t"
80223 #endif
80224 #ifdef WOLFSSL_KEIL
80225         "orrs	r3, r3, r6\n\t"
80226 #elif defined(__clang__)
80227         "orrs	r3, r6\n\t"
80228 #else
80229         "orr	r3, r6\n\t"
80230 #endif
80231         "ldr	r4, [%[a], #12]\n\t"
80232         "str	r3, [%[r], #20]\n\t"
80233 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80234         "lsrs	r6, r4, #1\n\t"
80235 #else
80236         "lsr	r6, r4, #1\n\t"
80237 #endif
80238 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80239         "lsls	r4, r4, %[n]\n\t"
80240 #else
80241         "lsl	r4, r4, %[n]\n\t"
80242 #endif
80243 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80244         "lsrs	r6, r6, r7\n\t"
80245 #else
80246         "lsr	r6, r6, r7\n\t"
80247 #endif
80248 #ifdef WOLFSSL_KEIL
80249         "orrs	r5, r5, r6\n\t"
80250 #elif defined(__clang__)
80251         "orrs	r5, r6\n\t"
80252 #else
80253         "orr	r5, r6\n\t"
80254 #endif
80255         "ldr	r3, [%[a], #8]\n\t"
80256         "str	r5, [%[r], #16]\n\t"
80257 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80258         "lsrs	r6, r3, #1\n\t"
80259 #else
80260         "lsr	r6, r3, #1\n\t"
80261 #endif
80262 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80263         "lsls	r3, r3, %[n]\n\t"
80264 #else
80265         "lsl	r3, r3, %[n]\n\t"
80266 #endif
80267 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80268         "lsrs	r6, r6, r7\n\t"
80269 #else
80270         "lsr	r6, r6, r7\n\t"
80271 #endif
80272 #ifdef WOLFSSL_KEIL
80273         "orrs	r4, r4, r6\n\t"
80274 #elif defined(__clang__)
80275         "orrs	r4, r6\n\t"
80276 #else
80277         "orr	r4, r6\n\t"
80278 #endif
80279         "ldr	r5, [%[a], #4]\n\t"
80280         "str	r4, [%[r], #12]\n\t"
80281 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80282         "lsrs	r6, r5, #1\n\t"
80283 #else
80284         "lsr	r6, r5, #1\n\t"
80285 #endif
80286 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80287         "lsls	r5, r5, %[n]\n\t"
80288 #else
80289         "lsl	r5, r5, %[n]\n\t"
80290 #endif
80291 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80292         "lsrs	r6, r6, r7\n\t"
80293 #else
80294         "lsr	r6, r6, r7\n\t"
80295 #endif
80296 #ifdef WOLFSSL_KEIL
80297         "orrs	r3, r3, r6\n\t"
80298 #elif defined(__clang__)
80299         "orrs	r3, r6\n\t"
80300 #else
80301         "orr	r3, r6\n\t"
80302 #endif
80303         "ldr	r4, [%[a]]\n\t"
80304         "str	r3, [%[r], #8]\n\t"
80305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80306         "lsrs	r6, r4, #1\n\t"
80307 #else
80308         "lsr	r6, r4, #1\n\t"
80309 #endif
80310 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80311         "lsls	r4, r4, %[n]\n\t"
80312 #else
80313         "lsl	r4, r4, %[n]\n\t"
80314 #endif
80315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80316         "lsrs	r6, r6, r7\n\t"
80317 #else
80318         "lsr	r6, r6, r7\n\t"
80319 #endif
80320 #ifdef WOLFSSL_KEIL
80321         "orrs	r5, r5, r6\n\t"
80322 #elif defined(__clang__)
80323         "orrs	r5, r6\n\t"
80324 #else
80325         "orr	r5, r6\n\t"
80326 #endif
80327 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80328         "subs	%[a], %[a], #0x40\n\t"
80329 #else
80330         "sub	%[a], %[a], #0x40\n\t"
80331 #endif
80332 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80333         "subs	%[r], %[r], #0x40\n\t"
80334 #else
80335         "sub	%[r], %[r], #0x40\n\t"
80336 #endif
80337         "ldr	r3, [%[a], #60]\n\t"
80338         "str	r5, [%[r], #68]\n\t"
80339 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80340         "lsrs	r6, r3, #1\n\t"
80341 #else
80342         "lsr	r6, r3, #1\n\t"
80343 #endif
80344 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80345         "lsls	r3, r3, %[n]\n\t"
80346 #else
80347         "lsl	r3, r3, %[n]\n\t"
80348 #endif
80349 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80350         "lsrs	r6, r6, r7\n\t"
80351 #else
80352         "lsr	r6, r6, r7\n\t"
80353 #endif
80354 #ifdef WOLFSSL_KEIL
80355         "orrs	r4, r4, r6\n\t"
80356 #elif defined(__clang__)
80357         "orrs	r4, r6\n\t"
80358 #else
80359         "orr	r4, r6\n\t"
80360 #endif
80361         "ldr	r5, [%[a], #56]\n\t"
80362         "str	r4, [%[r], #64]\n\t"
80363 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80364         "lsrs	r6, r5, #1\n\t"
80365 #else
80366         "lsr	r6, r5, #1\n\t"
80367 #endif
80368 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80369         "lsls	r5, r5, %[n]\n\t"
80370 #else
80371         "lsl	r5, r5, %[n]\n\t"
80372 #endif
80373 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80374         "lsrs	r6, r6, r7\n\t"
80375 #else
80376         "lsr	r6, r6, r7\n\t"
80377 #endif
80378 #ifdef WOLFSSL_KEIL
80379         "orrs	r3, r3, r6\n\t"
80380 #elif defined(__clang__)
80381         "orrs	r3, r6\n\t"
80382 #else
80383         "orr	r3, r6\n\t"
80384 #endif
80385         "ldr	r4, [%[a], #52]\n\t"
80386         "str	r3, [%[r], #60]\n\t"
80387 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80388         "lsrs	r6, r4, #1\n\t"
80389 #else
80390         "lsr	r6, r4, #1\n\t"
80391 #endif
80392 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80393         "lsls	r4, r4, %[n]\n\t"
80394 #else
80395         "lsl	r4, r4, %[n]\n\t"
80396 #endif
80397 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80398         "lsrs	r6, r6, r7\n\t"
80399 #else
80400         "lsr	r6, r6, r7\n\t"
80401 #endif
80402 #ifdef WOLFSSL_KEIL
80403         "orrs	r5, r5, r6\n\t"
80404 #elif defined(__clang__)
80405         "orrs	r5, r6\n\t"
80406 #else
80407         "orr	r5, r6\n\t"
80408 #endif
80409         "ldr	r3, [%[a], #48]\n\t"
80410         "str	r5, [%[r], #56]\n\t"
80411 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80412         "lsrs	r6, r3, #1\n\t"
80413 #else
80414         "lsr	r6, r3, #1\n\t"
80415 #endif
80416 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80417         "lsls	r3, r3, %[n]\n\t"
80418 #else
80419         "lsl	r3, r3, %[n]\n\t"
80420 #endif
80421 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80422         "lsrs	r6, r6, r7\n\t"
80423 #else
80424         "lsr	r6, r6, r7\n\t"
80425 #endif
80426 #ifdef WOLFSSL_KEIL
80427         "orrs	r4, r4, r6\n\t"
80428 #elif defined(__clang__)
80429         "orrs	r4, r6\n\t"
80430 #else
80431         "orr	r4, r6\n\t"
80432 #endif
80433         "ldr	r5, [%[a], #44]\n\t"
80434         "str	r4, [%[r], #52]\n\t"
80435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80436         "lsrs	r6, r5, #1\n\t"
80437 #else
80438         "lsr	r6, r5, #1\n\t"
80439 #endif
80440 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80441         "lsls	r5, r5, %[n]\n\t"
80442 #else
80443         "lsl	r5, r5, %[n]\n\t"
80444 #endif
80445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80446         "lsrs	r6, r6, r7\n\t"
80447 #else
80448         "lsr	r6, r6, r7\n\t"
80449 #endif
80450 #ifdef WOLFSSL_KEIL
80451         "orrs	r3, r3, r6\n\t"
80452 #elif defined(__clang__)
80453         "orrs	r3, r6\n\t"
80454 #else
80455         "orr	r3, r6\n\t"
80456 #endif
80457         "ldr	r4, [%[a], #40]\n\t"
80458         "str	r3, [%[r], #48]\n\t"
80459 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80460         "lsrs	r6, r4, #1\n\t"
80461 #else
80462         "lsr	r6, r4, #1\n\t"
80463 #endif
80464 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80465         "lsls	r4, r4, %[n]\n\t"
80466 #else
80467         "lsl	r4, r4, %[n]\n\t"
80468 #endif
80469 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80470         "lsrs	r6, r6, r7\n\t"
80471 #else
80472         "lsr	r6, r6, r7\n\t"
80473 #endif
80474 #ifdef WOLFSSL_KEIL
80475         "orrs	r5, r5, r6\n\t"
80476 #elif defined(__clang__)
80477         "orrs	r5, r6\n\t"
80478 #else
80479         "orr	r5, r6\n\t"
80480 #endif
80481         "ldr	r3, [%[a], #36]\n\t"
80482         "str	r5, [%[r], #44]\n\t"
80483 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80484         "lsrs	r6, r3, #1\n\t"
80485 #else
80486         "lsr	r6, r3, #1\n\t"
80487 #endif
80488 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80489         "lsls	r3, r3, %[n]\n\t"
80490 #else
80491         "lsl	r3, r3, %[n]\n\t"
80492 #endif
80493 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80494         "lsrs	r6, r6, r7\n\t"
80495 #else
80496         "lsr	r6, r6, r7\n\t"
80497 #endif
80498 #ifdef WOLFSSL_KEIL
80499         "orrs	r4, r4, r6\n\t"
80500 #elif defined(__clang__)
80501         "orrs	r4, r6\n\t"
80502 #else
80503         "orr	r4, r6\n\t"
80504 #endif
80505         "ldr	r5, [%[a], #32]\n\t"
80506         "str	r4, [%[r], #40]\n\t"
80507 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80508         "lsrs	r6, r5, #1\n\t"
80509 #else
80510         "lsr	r6, r5, #1\n\t"
80511 #endif
80512 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80513         "lsls	r5, r5, %[n]\n\t"
80514 #else
80515         "lsl	r5, r5, %[n]\n\t"
80516 #endif
80517 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80518         "lsrs	r6, r6, r7\n\t"
80519 #else
80520         "lsr	r6, r6, r7\n\t"
80521 #endif
80522 #ifdef WOLFSSL_KEIL
80523         "orrs	r3, r3, r6\n\t"
80524 #elif defined(__clang__)
80525         "orrs	r3, r6\n\t"
80526 #else
80527         "orr	r3, r6\n\t"
80528 #endif
80529         "ldr	r4, [%[a], #28]\n\t"
80530         "str	r3, [%[r], #36]\n\t"
80531 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80532         "lsrs	r6, r4, #1\n\t"
80533 #else
80534         "lsr	r6, r4, #1\n\t"
80535 #endif
80536 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80537         "lsls	r4, r4, %[n]\n\t"
80538 #else
80539         "lsl	r4, r4, %[n]\n\t"
80540 #endif
80541 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80542         "lsrs	r6, r6, r7\n\t"
80543 #else
80544         "lsr	r6, r6, r7\n\t"
80545 #endif
80546 #ifdef WOLFSSL_KEIL
80547         "orrs	r5, r5, r6\n\t"
80548 #elif defined(__clang__)
80549         "orrs	r5, r6\n\t"
80550 #else
80551         "orr	r5, r6\n\t"
80552 #endif
80553         "ldr	r3, [%[a], #24]\n\t"
80554         "str	r5, [%[r], #32]\n\t"
80555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80556         "lsrs	r6, r3, #1\n\t"
80557 #else
80558         "lsr	r6, r3, #1\n\t"
80559 #endif
80560 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80561         "lsls	r3, r3, %[n]\n\t"
80562 #else
80563         "lsl	r3, r3, %[n]\n\t"
80564 #endif
80565 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80566         "lsrs	r6, r6, r7\n\t"
80567 #else
80568         "lsr	r6, r6, r7\n\t"
80569 #endif
80570 #ifdef WOLFSSL_KEIL
80571         "orrs	r4, r4, r6\n\t"
80572 #elif defined(__clang__)
80573         "orrs	r4, r6\n\t"
80574 #else
80575         "orr	r4, r6\n\t"
80576 #endif
80577         "ldr	r5, [%[a], #20]\n\t"
80578         "str	r4, [%[r], #28]\n\t"
80579 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80580         "lsrs	r6, r5, #1\n\t"
80581 #else
80582         "lsr	r6, r5, #1\n\t"
80583 #endif
80584 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80585         "lsls	r5, r5, %[n]\n\t"
80586 #else
80587         "lsl	r5, r5, %[n]\n\t"
80588 #endif
80589 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80590         "lsrs	r6, r6, r7\n\t"
80591 #else
80592         "lsr	r6, r6, r7\n\t"
80593 #endif
80594 #ifdef WOLFSSL_KEIL
80595         "orrs	r3, r3, r6\n\t"
80596 #elif defined(__clang__)
80597         "orrs	r3, r6\n\t"
80598 #else
80599         "orr	r3, r6\n\t"
80600 #endif
80601         "ldr	r4, [%[a], #16]\n\t"
80602         "str	r3, [%[r], #24]\n\t"
80603 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80604         "lsrs	r6, r4, #1\n\t"
80605 #else
80606         "lsr	r6, r4, #1\n\t"
80607 #endif
80608 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80609         "lsls	r4, r4, %[n]\n\t"
80610 #else
80611         "lsl	r4, r4, %[n]\n\t"
80612 #endif
80613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80614         "lsrs	r6, r6, r7\n\t"
80615 #else
80616         "lsr	r6, r6, r7\n\t"
80617 #endif
80618 #ifdef WOLFSSL_KEIL
80619         "orrs	r5, r5, r6\n\t"
80620 #elif defined(__clang__)
80621         "orrs	r5, r6\n\t"
80622 #else
80623         "orr	r5, r6\n\t"
80624 #endif
80625         "ldr	r3, [%[a], #12]\n\t"
80626         "str	r5, [%[r], #20]\n\t"
80627 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80628         "lsrs	r6, r3, #1\n\t"
80629 #else
80630         "lsr	r6, r3, #1\n\t"
80631 #endif
80632 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80633         "lsls	r3, r3, %[n]\n\t"
80634 #else
80635         "lsl	r3, r3, %[n]\n\t"
80636 #endif
80637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80638         "lsrs	r6, r6, r7\n\t"
80639 #else
80640         "lsr	r6, r6, r7\n\t"
80641 #endif
80642 #ifdef WOLFSSL_KEIL
80643         "orrs	r4, r4, r6\n\t"
80644 #elif defined(__clang__)
80645         "orrs	r4, r6\n\t"
80646 #else
80647         "orr	r4, r6\n\t"
80648 #endif
80649         "ldr	r5, [%[a], #8]\n\t"
80650         "str	r4, [%[r], #16]\n\t"
80651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80652         "lsrs	r6, r5, #1\n\t"
80653 #else
80654         "lsr	r6, r5, #1\n\t"
80655 #endif
80656 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80657         "lsls	r5, r5, %[n]\n\t"
80658 #else
80659         "lsl	r5, r5, %[n]\n\t"
80660 #endif
80661 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80662         "lsrs	r6, r6, r7\n\t"
80663 #else
80664         "lsr	r6, r6, r7\n\t"
80665 #endif
80666 #ifdef WOLFSSL_KEIL
80667         "orrs	r3, r3, r6\n\t"
80668 #elif defined(__clang__)
80669         "orrs	r3, r6\n\t"
80670 #else
80671         "orr	r3, r6\n\t"
80672 #endif
80673         "ldr	r4, [%[a], #4]\n\t"
80674         "str	r3, [%[r], #12]\n\t"
80675 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80676         "lsrs	r6, r4, #1\n\t"
80677 #else
80678         "lsr	r6, r4, #1\n\t"
80679 #endif
80680 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80681         "lsls	r4, r4, %[n]\n\t"
80682 #else
80683         "lsl	r4, r4, %[n]\n\t"
80684 #endif
80685 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80686         "lsrs	r6, r6, r7\n\t"
80687 #else
80688         "lsr	r6, r6, r7\n\t"
80689 #endif
80690 #ifdef WOLFSSL_KEIL
80691         "orrs	r5, r5, r6\n\t"
80692 #elif defined(__clang__)
80693         "orrs	r5, r6\n\t"
80694 #else
80695         "orr	r5, r6\n\t"
80696 #endif
80697         "ldr	r3, [%[a]]\n\t"
80698         "str	r5, [%[r], #8]\n\t"
80699 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80700         "lsrs	r6, r3, #1\n\t"
80701 #else
80702         "lsr	r6, r3, #1\n\t"
80703 #endif
80704 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80705         "lsls	r3, r3, %[n]\n\t"
80706 #else
80707         "lsl	r3, r3, %[n]\n\t"
80708 #endif
80709 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80710         "lsrs	r6, r6, r7\n\t"
80711 #else
80712         "lsr	r6, r6, r7\n\t"
80713 #endif
80714 #ifdef WOLFSSL_KEIL
80715         "orrs	r4, r4, r6\n\t"
80716 #elif defined(__clang__)
80717         "orrs	r4, r6\n\t"
80718 #else
80719         "orr	r4, r6\n\t"
80720 #endif
80721 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80722         "subs	%[a], %[a], #0x40\n\t"
80723 #else
80724         "sub	%[a], %[a], #0x40\n\t"
80725 #endif
80726 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80727         "subs	%[r], %[r], #0x40\n\t"
80728 #else
80729         "sub	%[r], %[r], #0x40\n\t"
80730 #endif
80731         "ldr	r5, [%[a], #60]\n\t"
80732         "str	r4, [%[r], #68]\n\t"
80733 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80734         "lsrs	r6, r5, #1\n\t"
80735 #else
80736         "lsr	r6, r5, #1\n\t"
80737 #endif
80738 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80739         "lsls	r5, r5, %[n]\n\t"
80740 #else
80741         "lsl	r5, r5, %[n]\n\t"
80742 #endif
80743 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80744         "lsrs	r6, r6, r7\n\t"
80745 #else
80746         "lsr	r6, r6, r7\n\t"
80747 #endif
80748 #ifdef WOLFSSL_KEIL
80749         "orrs	r3, r3, r6\n\t"
80750 #elif defined(__clang__)
80751         "orrs	r3, r6\n\t"
80752 #else
80753         "orr	r3, r6\n\t"
80754 #endif
80755         "ldr	r4, [%[a], #56]\n\t"
80756         "str	r3, [%[r], #64]\n\t"
80757 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80758         "lsrs	r6, r4, #1\n\t"
80759 #else
80760         "lsr	r6, r4, #1\n\t"
80761 #endif
80762 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80763         "lsls	r4, r4, %[n]\n\t"
80764 #else
80765         "lsl	r4, r4, %[n]\n\t"
80766 #endif
80767 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80768         "lsrs	r6, r6, r7\n\t"
80769 #else
80770         "lsr	r6, r6, r7\n\t"
80771 #endif
80772 #ifdef WOLFSSL_KEIL
80773         "orrs	r5, r5, r6\n\t"
80774 #elif defined(__clang__)
80775         "orrs	r5, r6\n\t"
80776 #else
80777         "orr	r5, r6\n\t"
80778 #endif
80779         "ldr	r3, [%[a], #52]\n\t"
80780         "str	r5, [%[r], #60]\n\t"
80781 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80782         "lsrs	r6, r3, #1\n\t"
80783 #else
80784         "lsr	r6, r3, #1\n\t"
80785 #endif
80786 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80787         "lsls	r3, r3, %[n]\n\t"
80788 #else
80789         "lsl	r3, r3, %[n]\n\t"
80790 #endif
80791 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80792         "lsrs	r6, r6, r7\n\t"
80793 #else
80794         "lsr	r6, r6, r7\n\t"
80795 #endif
80796 #ifdef WOLFSSL_KEIL
80797         "orrs	r4, r4, r6\n\t"
80798 #elif defined(__clang__)
80799         "orrs	r4, r6\n\t"
80800 #else
80801         "orr	r4, r6\n\t"
80802 #endif
80803         "ldr	r5, [%[a], #48]\n\t"
80804         "str	r4, [%[r], #56]\n\t"
80805 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80806         "lsrs	r6, r5, #1\n\t"
80807 #else
80808         "lsr	r6, r5, #1\n\t"
80809 #endif
80810 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80811         "lsls	r5, r5, %[n]\n\t"
80812 #else
80813         "lsl	r5, r5, %[n]\n\t"
80814 #endif
80815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80816         "lsrs	r6, r6, r7\n\t"
80817 #else
80818         "lsr	r6, r6, r7\n\t"
80819 #endif
80820 #ifdef WOLFSSL_KEIL
80821         "orrs	r3, r3, r6\n\t"
80822 #elif defined(__clang__)
80823         "orrs	r3, r6\n\t"
80824 #else
80825         "orr	r3, r6\n\t"
80826 #endif
80827         "ldr	r4, [%[a], #44]\n\t"
80828         "str	r3, [%[r], #52]\n\t"
80829 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80830         "lsrs	r6, r4, #1\n\t"
80831 #else
80832         "lsr	r6, r4, #1\n\t"
80833 #endif
80834 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80835         "lsls	r4, r4, %[n]\n\t"
80836 #else
80837         "lsl	r4, r4, %[n]\n\t"
80838 #endif
80839 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80840         "lsrs	r6, r6, r7\n\t"
80841 #else
80842         "lsr	r6, r6, r7\n\t"
80843 #endif
80844 #ifdef WOLFSSL_KEIL
80845         "orrs	r5, r5, r6\n\t"
80846 #elif defined(__clang__)
80847         "orrs	r5, r6\n\t"
80848 #else
80849         "orr	r5, r6\n\t"
80850 #endif
80851         "ldr	r3, [%[a], #40]\n\t"
80852         "str	r5, [%[r], #48]\n\t"
80853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80854         "lsrs	r6, r3, #1\n\t"
80855 #else
80856         "lsr	r6, r3, #1\n\t"
80857 #endif
80858 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80859         "lsls	r3, r3, %[n]\n\t"
80860 #else
80861         "lsl	r3, r3, %[n]\n\t"
80862 #endif
80863 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80864         "lsrs	r6, r6, r7\n\t"
80865 #else
80866         "lsr	r6, r6, r7\n\t"
80867 #endif
80868 #ifdef WOLFSSL_KEIL
80869         "orrs	r4, r4, r6\n\t"
80870 #elif defined(__clang__)
80871         "orrs	r4, r6\n\t"
80872 #else
80873         "orr	r4, r6\n\t"
80874 #endif
80875         "ldr	r5, [%[a], #36]\n\t"
80876         "str	r4, [%[r], #44]\n\t"
80877 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80878         "lsrs	r6, r5, #1\n\t"
80879 #else
80880         "lsr	r6, r5, #1\n\t"
80881 #endif
80882 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80883         "lsls	r5, r5, %[n]\n\t"
80884 #else
80885         "lsl	r5, r5, %[n]\n\t"
80886 #endif
80887 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80888         "lsrs	r6, r6, r7\n\t"
80889 #else
80890         "lsr	r6, r6, r7\n\t"
80891 #endif
80892 #ifdef WOLFSSL_KEIL
80893         "orrs	r3, r3, r6\n\t"
80894 #elif defined(__clang__)
80895         "orrs	r3, r6\n\t"
80896 #else
80897         "orr	r3, r6\n\t"
80898 #endif
80899         "ldr	r4, [%[a], #32]\n\t"
80900         "str	r3, [%[r], #40]\n\t"
80901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80902         "lsrs	r6, r4, #1\n\t"
80903 #else
80904         "lsr	r6, r4, #1\n\t"
80905 #endif
80906 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80907         "lsls	r4, r4, %[n]\n\t"
80908 #else
80909         "lsl	r4, r4, %[n]\n\t"
80910 #endif
80911 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80912         "lsrs	r6, r6, r7\n\t"
80913 #else
80914         "lsr	r6, r6, r7\n\t"
80915 #endif
80916 #ifdef WOLFSSL_KEIL
80917         "orrs	r5, r5, r6\n\t"
80918 #elif defined(__clang__)
80919         "orrs	r5, r6\n\t"
80920 #else
80921         "orr	r5, r6\n\t"
80922 #endif
80923         "ldr	r3, [%[a], #28]\n\t"
80924         "str	r5, [%[r], #36]\n\t"
80925 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80926         "lsrs	r6, r3, #1\n\t"
80927 #else
80928         "lsr	r6, r3, #1\n\t"
80929 #endif
80930 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80931         "lsls	r3, r3, %[n]\n\t"
80932 #else
80933         "lsl	r3, r3, %[n]\n\t"
80934 #endif
80935 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80936         "lsrs	r6, r6, r7\n\t"
80937 #else
80938         "lsr	r6, r6, r7\n\t"
80939 #endif
80940 #ifdef WOLFSSL_KEIL
80941         "orrs	r4, r4, r6\n\t"
80942 #elif defined(__clang__)
80943         "orrs	r4, r6\n\t"
80944 #else
80945         "orr	r4, r6\n\t"
80946 #endif
80947         "ldr	r5, [%[a], #24]\n\t"
80948         "str	r4, [%[r], #32]\n\t"
80949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80950         "lsrs	r6, r5, #1\n\t"
80951 #else
80952         "lsr	r6, r5, #1\n\t"
80953 #endif
80954 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80955         "lsls	r5, r5, %[n]\n\t"
80956 #else
80957         "lsl	r5, r5, %[n]\n\t"
80958 #endif
80959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80960         "lsrs	r6, r6, r7\n\t"
80961 #else
80962         "lsr	r6, r6, r7\n\t"
80963 #endif
80964 #ifdef WOLFSSL_KEIL
80965         "orrs	r3, r3, r6\n\t"
80966 #elif defined(__clang__)
80967         "orrs	r3, r6\n\t"
80968 #else
80969         "orr	r3, r6\n\t"
80970 #endif
80971         "ldr	r4, [%[a], #20]\n\t"
80972         "str	r3, [%[r], #28]\n\t"
80973 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80974         "lsrs	r6, r4, #1\n\t"
80975 #else
80976         "lsr	r6, r4, #1\n\t"
80977 #endif
80978 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80979         "lsls	r4, r4, %[n]\n\t"
80980 #else
80981         "lsl	r4, r4, %[n]\n\t"
80982 #endif
80983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80984         "lsrs	r6, r6, r7\n\t"
80985 #else
80986         "lsr	r6, r6, r7\n\t"
80987 #endif
80988 #ifdef WOLFSSL_KEIL
80989         "orrs	r5, r5, r6\n\t"
80990 #elif defined(__clang__)
80991         "orrs	r5, r6\n\t"
80992 #else
80993         "orr	r5, r6\n\t"
80994 #endif
80995         "ldr	r3, [%[a], #16]\n\t"
80996         "str	r5, [%[r], #24]\n\t"
80997 #if defined(__clang__) || defined(WOLFSSL_KEIL)
80998         "lsrs	r6, r3, #1\n\t"
80999 #else
81000         "lsr	r6, r3, #1\n\t"
81001 #endif
81002 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81003         "lsls	r3, r3, %[n]\n\t"
81004 #else
81005         "lsl	r3, r3, %[n]\n\t"
81006 #endif
81007 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81008         "lsrs	r6, r6, r7\n\t"
81009 #else
81010         "lsr	r6, r6, r7\n\t"
81011 #endif
81012 #ifdef WOLFSSL_KEIL
81013         "orrs	r4, r4, r6\n\t"
81014 #elif defined(__clang__)
81015         "orrs	r4, r6\n\t"
81016 #else
81017         "orr	r4, r6\n\t"
81018 #endif
81019         "ldr	r5, [%[a], #12]\n\t"
81020         "str	r4, [%[r], #20]\n\t"
81021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81022         "lsrs	r6, r5, #1\n\t"
81023 #else
81024         "lsr	r6, r5, #1\n\t"
81025 #endif
81026 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81027         "lsls	r5, r5, %[n]\n\t"
81028 #else
81029         "lsl	r5, r5, %[n]\n\t"
81030 #endif
81031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81032         "lsrs	r6, r6, r7\n\t"
81033 #else
81034         "lsr	r6, r6, r7\n\t"
81035 #endif
81036 #ifdef WOLFSSL_KEIL
81037         "orrs	r3, r3, r6\n\t"
81038 #elif defined(__clang__)
81039         "orrs	r3, r6\n\t"
81040 #else
81041         "orr	r3, r6\n\t"
81042 #endif
81043         "ldr	r4, [%[a], #8]\n\t"
81044         "str	r3, [%[r], #16]\n\t"
81045 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81046         "lsrs	r6, r4, #1\n\t"
81047 #else
81048         "lsr	r6, r4, #1\n\t"
81049 #endif
81050 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81051         "lsls	r4, r4, %[n]\n\t"
81052 #else
81053         "lsl	r4, r4, %[n]\n\t"
81054 #endif
81055 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81056         "lsrs	r6, r6, r7\n\t"
81057 #else
81058         "lsr	r6, r6, r7\n\t"
81059 #endif
81060 #ifdef WOLFSSL_KEIL
81061         "orrs	r5, r5, r6\n\t"
81062 #elif defined(__clang__)
81063         "orrs	r5, r6\n\t"
81064 #else
81065         "orr	r5, r6\n\t"
81066 #endif
81067         "ldr	r3, [%[a], #4]\n\t"
81068         "str	r5, [%[r], #12]\n\t"
81069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81070         "lsrs	r6, r3, #1\n\t"
81071 #else
81072         "lsr	r6, r3, #1\n\t"
81073 #endif
81074 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81075         "lsls	r3, r3, %[n]\n\t"
81076 #else
81077         "lsl	r3, r3, %[n]\n\t"
81078 #endif
81079 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81080         "lsrs	r6, r6, r7\n\t"
81081 #else
81082         "lsr	r6, r6, r7\n\t"
81083 #endif
81084 #ifdef WOLFSSL_KEIL
81085         "orrs	r4, r4, r6\n\t"
81086 #elif defined(__clang__)
81087         "orrs	r4, r6\n\t"
81088 #else
81089         "orr	r4, r6\n\t"
81090 #endif
81091         "ldr	r5, [%[a]]\n\t"
81092         "str	r4, [%[r], #8]\n\t"
81093 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81094         "lsrs	r6, r5, #1\n\t"
81095 #else
81096         "lsr	r6, r5, #1\n\t"
81097 #endif
81098 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81099         "lsls	r5, r5, %[n]\n\t"
81100 #else
81101         "lsl	r5, r5, %[n]\n\t"
81102 #endif
81103 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81104         "lsrs	r6, r6, r7\n\t"
81105 #else
81106         "lsr	r6, r6, r7\n\t"
81107 #endif
81108 #ifdef WOLFSSL_KEIL
81109         "orrs	r3, r3, r6\n\t"
81110 #elif defined(__clang__)
81111         "orrs	r3, r6\n\t"
81112 #else
81113         "orr	r3, r6\n\t"
81114 #endif
81115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81116         "subs	%[a], %[a], #0x40\n\t"
81117 #else
81118         "sub	%[a], %[a], #0x40\n\t"
81119 #endif
81120 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81121         "subs	%[r], %[r], #0x40\n\t"
81122 #else
81123         "sub	%[r], %[r], #0x40\n\t"
81124 #endif
81125         "ldr	r4, [%[a], #60]\n\t"
81126         "str	r3, [%[r], #68]\n\t"
81127 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81128         "lsrs	r6, r4, #1\n\t"
81129 #else
81130         "lsr	r6, r4, #1\n\t"
81131 #endif
81132 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81133         "lsls	r4, r4, %[n]\n\t"
81134 #else
81135         "lsl	r4, r4, %[n]\n\t"
81136 #endif
81137 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81138         "lsrs	r6, r6, r7\n\t"
81139 #else
81140         "lsr	r6, r6, r7\n\t"
81141 #endif
81142 #ifdef WOLFSSL_KEIL
81143         "orrs	r5, r5, r6\n\t"
81144 #elif defined(__clang__)
81145         "orrs	r5, r6\n\t"
81146 #else
81147         "orr	r5, r6\n\t"
81148 #endif
81149         "ldr	r3, [%[a], #56]\n\t"
81150         "str	r5, [%[r], #64]\n\t"
81151 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81152         "lsrs	r6, r3, #1\n\t"
81153 #else
81154         "lsr	r6, r3, #1\n\t"
81155 #endif
81156 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81157         "lsls	r3, r3, %[n]\n\t"
81158 #else
81159         "lsl	r3, r3, %[n]\n\t"
81160 #endif
81161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81162         "lsrs	r6, r6, r7\n\t"
81163 #else
81164         "lsr	r6, r6, r7\n\t"
81165 #endif
81166 #ifdef WOLFSSL_KEIL
81167         "orrs	r4, r4, r6\n\t"
81168 #elif defined(__clang__)
81169         "orrs	r4, r6\n\t"
81170 #else
81171         "orr	r4, r6\n\t"
81172 #endif
81173         "ldr	r5, [%[a], #52]\n\t"
81174         "str	r4, [%[r], #60]\n\t"
81175 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81176         "lsrs	r6, r5, #1\n\t"
81177 #else
81178         "lsr	r6, r5, #1\n\t"
81179 #endif
81180 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81181         "lsls	r5, r5, %[n]\n\t"
81182 #else
81183         "lsl	r5, r5, %[n]\n\t"
81184 #endif
81185 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81186         "lsrs	r6, r6, r7\n\t"
81187 #else
81188         "lsr	r6, r6, r7\n\t"
81189 #endif
81190 #ifdef WOLFSSL_KEIL
81191         "orrs	r3, r3, r6\n\t"
81192 #elif defined(__clang__)
81193         "orrs	r3, r6\n\t"
81194 #else
81195         "orr	r3, r6\n\t"
81196 #endif
81197         "ldr	r4, [%[a], #48]\n\t"
81198         "str	r3, [%[r], #56]\n\t"
81199 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81200         "lsrs	r6, r4, #1\n\t"
81201 #else
81202         "lsr	r6, r4, #1\n\t"
81203 #endif
81204 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81205         "lsls	r4, r4, %[n]\n\t"
81206 #else
81207         "lsl	r4, r4, %[n]\n\t"
81208 #endif
81209 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81210         "lsrs	r6, r6, r7\n\t"
81211 #else
81212         "lsr	r6, r6, r7\n\t"
81213 #endif
81214 #ifdef WOLFSSL_KEIL
81215         "orrs	r5, r5, r6\n\t"
81216 #elif defined(__clang__)
81217         "orrs	r5, r6\n\t"
81218 #else
81219         "orr	r5, r6\n\t"
81220 #endif
81221         "ldr	r3, [%[a], #44]\n\t"
81222         "str	r5, [%[r], #52]\n\t"
81223 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81224         "lsrs	r6, r3, #1\n\t"
81225 #else
81226         "lsr	r6, r3, #1\n\t"
81227 #endif
81228 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81229         "lsls	r3, r3, %[n]\n\t"
81230 #else
81231         "lsl	r3, r3, %[n]\n\t"
81232 #endif
81233 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81234         "lsrs	r6, r6, r7\n\t"
81235 #else
81236         "lsr	r6, r6, r7\n\t"
81237 #endif
81238 #ifdef WOLFSSL_KEIL
81239         "orrs	r4, r4, r6\n\t"
81240 #elif defined(__clang__)
81241         "orrs	r4, r6\n\t"
81242 #else
81243         "orr	r4, r6\n\t"
81244 #endif
81245         "ldr	r5, [%[a], #40]\n\t"
81246         "str	r4, [%[r], #48]\n\t"
81247 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81248         "lsrs	r6, r5, #1\n\t"
81249 #else
81250         "lsr	r6, r5, #1\n\t"
81251 #endif
81252 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81253         "lsls	r5, r5, %[n]\n\t"
81254 #else
81255         "lsl	r5, r5, %[n]\n\t"
81256 #endif
81257 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81258         "lsrs	r6, r6, r7\n\t"
81259 #else
81260         "lsr	r6, r6, r7\n\t"
81261 #endif
81262 #ifdef WOLFSSL_KEIL
81263         "orrs	r3, r3, r6\n\t"
81264 #elif defined(__clang__)
81265         "orrs	r3, r6\n\t"
81266 #else
81267         "orr	r3, r6\n\t"
81268 #endif
81269         "ldr	r4, [%[a], #36]\n\t"
81270         "str	r3, [%[r], #44]\n\t"
81271 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81272         "lsrs	r6, r4, #1\n\t"
81273 #else
81274         "lsr	r6, r4, #1\n\t"
81275 #endif
81276 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81277         "lsls	r4, r4, %[n]\n\t"
81278 #else
81279         "lsl	r4, r4, %[n]\n\t"
81280 #endif
81281 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81282         "lsrs	r6, r6, r7\n\t"
81283 #else
81284         "lsr	r6, r6, r7\n\t"
81285 #endif
81286 #ifdef WOLFSSL_KEIL
81287         "orrs	r5, r5, r6\n\t"
81288 #elif defined(__clang__)
81289         "orrs	r5, r6\n\t"
81290 #else
81291         "orr	r5, r6\n\t"
81292 #endif
81293         "ldr	r3, [%[a], #32]\n\t"
81294         "str	r5, [%[r], #40]\n\t"
81295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81296         "lsrs	r6, r3, #1\n\t"
81297 #else
81298         "lsr	r6, r3, #1\n\t"
81299 #endif
81300 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81301         "lsls	r3, r3, %[n]\n\t"
81302 #else
81303         "lsl	r3, r3, %[n]\n\t"
81304 #endif
81305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81306         "lsrs	r6, r6, r7\n\t"
81307 #else
81308         "lsr	r6, r6, r7\n\t"
81309 #endif
81310 #ifdef WOLFSSL_KEIL
81311         "orrs	r4, r4, r6\n\t"
81312 #elif defined(__clang__)
81313         "orrs	r4, r6\n\t"
81314 #else
81315         "orr	r4, r6\n\t"
81316 #endif
81317         "ldr	r5, [%[a], #28]\n\t"
81318         "str	r4, [%[r], #36]\n\t"
81319 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81320         "lsrs	r6, r5, #1\n\t"
81321 #else
81322         "lsr	r6, r5, #1\n\t"
81323 #endif
81324 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81325         "lsls	r5, r5, %[n]\n\t"
81326 #else
81327         "lsl	r5, r5, %[n]\n\t"
81328 #endif
81329 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81330         "lsrs	r6, r6, r7\n\t"
81331 #else
81332         "lsr	r6, r6, r7\n\t"
81333 #endif
81334 #ifdef WOLFSSL_KEIL
81335         "orrs	r3, r3, r6\n\t"
81336 #elif defined(__clang__)
81337         "orrs	r3, r6\n\t"
81338 #else
81339         "orr	r3, r6\n\t"
81340 #endif
81341         "ldr	r4, [%[a], #24]\n\t"
81342         "str	r3, [%[r], #32]\n\t"
81343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81344         "lsrs	r6, r4, #1\n\t"
81345 #else
81346         "lsr	r6, r4, #1\n\t"
81347 #endif
81348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81349         "lsls	r4, r4, %[n]\n\t"
81350 #else
81351         "lsl	r4, r4, %[n]\n\t"
81352 #endif
81353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81354         "lsrs	r6, r6, r7\n\t"
81355 #else
81356         "lsr	r6, r6, r7\n\t"
81357 #endif
81358 #ifdef WOLFSSL_KEIL
81359         "orrs	r5, r5, r6\n\t"
81360 #elif defined(__clang__)
81361         "orrs	r5, r6\n\t"
81362 #else
81363         "orr	r5, r6\n\t"
81364 #endif
81365         "ldr	r3, [%[a], #20]\n\t"
81366         "str	r5, [%[r], #28]\n\t"
81367 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81368         "lsrs	r6, r3, #1\n\t"
81369 #else
81370         "lsr	r6, r3, #1\n\t"
81371 #endif
81372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81373         "lsls	r3, r3, %[n]\n\t"
81374 #else
81375         "lsl	r3, r3, %[n]\n\t"
81376 #endif
81377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81378         "lsrs	r6, r6, r7\n\t"
81379 #else
81380         "lsr	r6, r6, r7\n\t"
81381 #endif
81382 #ifdef WOLFSSL_KEIL
81383         "orrs	r4, r4, r6\n\t"
81384 #elif defined(__clang__)
81385         "orrs	r4, r6\n\t"
81386 #else
81387         "orr	r4, r6\n\t"
81388 #endif
81389         "ldr	r5, [%[a], #16]\n\t"
81390         "str	r4, [%[r], #24]\n\t"
81391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81392         "lsrs	r6, r5, #1\n\t"
81393 #else
81394         "lsr	r6, r5, #1\n\t"
81395 #endif
81396 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81397         "lsls	r5, r5, %[n]\n\t"
81398 #else
81399         "lsl	r5, r5, %[n]\n\t"
81400 #endif
81401 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81402         "lsrs	r6, r6, r7\n\t"
81403 #else
81404         "lsr	r6, r6, r7\n\t"
81405 #endif
81406 #ifdef WOLFSSL_KEIL
81407         "orrs	r3, r3, r6\n\t"
81408 #elif defined(__clang__)
81409         "orrs	r3, r6\n\t"
81410 #else
81411         "orr	r3, r6\n\t"
81412 #endif
81413         "ldr	r4, [%[a], #12]\n\t"
81414         "str	r3, [%[r], #20]\n\t"
81415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81416         "lsrs	r6, r4, #1\n\t"
81417 #else
81418         "lsr	r6, r4, #1\n\t"
81419 #endif
81420 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81421         "lsls	r4, r4, %[n]\n\t"
81422 #else
81423         "lsl	r4, r4, %[n]\n\t"
81424 #endif
81425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81426         "lsrs	r6, r6, r7\n\t"
81427 #else
81428         "lsr	r6, r6, r7\n\t"
81429 #endif
81430 #ifdef WOLFSSL_KEIL
81431         "orrs	r5, r5, r6\n\t"
81432 #elif defined(__clang__)
81433         "orrs	r5, r6\n\t"
81434 #else
81435         "orr	r5, r6\n\t"
81436 #endif
81437         "ldr	r3, [%[a], #8]\n\t"
81438         "str	r5, [%[r], #16]\n\t"
81439 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81440         "lsrs	r6, r3, #1\n\t"
81441 #else
81442         "lsr	r6, r3, #1\n\t"
81443 #endif
81444 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81445         "lsls	r3, r3, %[n]\n\t"
81446 #else
81447         "lsl	r3, r3, %[n]\n\t"
81448 #endif
81449 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81450         "lsrs	r6, r6, r7\n\t"
81451 #else
81452         "lsr	r6, r6, r7\n\t"
81453 #endif
81454 #ifdef WOLFSSL_KEIL
81455         "orrs	r4, r4, r6\n\t"
81456 #elif defined(__clang__)
81457         "orrs	r4, r6\n\t"
81458 #else
81459         "orr	r4, r6\n\t"
81460 #endif
81461         "ldr	r5, [%[a], #4]\n\t"
81462         "str	r4, [%[r], #12]\n\t"
81463 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81464         "lsrs	r6, r5, #1\n\t"
81465 #else
81466         "lsr	r6, r5, #1\n\t"
81467 #endif
81468 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81469         "lsls	r5, r5, %[n]\n\t"
81470 #else
81471         "lsl	r5, r5, %[n]\n\t"
81472 #endif
81473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81474         "lsrs	r6, r6, r7\n\t"
81475 #else
81476         "lsr	r6, r6, r7\n\t"
81477 #endif
81478 #ifdef WOLFSSL_KEIL
81479         "orrs	r3, r3, r6\n\t"
81480 #elif defined(__clang__)
81481         "orrs	r3, r6\n\t"
81482 #else
81483         "orr	r3, r6\n\t"
81484 #endif
81485         "ldr	r4, [%[a]]\n\t"
81486         "str	r3, [%[r], #8]\n\t"
81487 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81488         "lsrs	r6, r4, #1\n\t"
81489 #else
81490         "lsr	r6, r4, #1\n\t"
81491 #endif
81492 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81493         "lsls	r4, r4, %[n]\n\t"
81494 #else
81495         "lsl	r4, r4, %[n]\n\t"
81496 #endif
81497 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81498         "lsrs	r6, r6, r7\n\t"
81499 #else
81500         "lsr	r6, r6, r7\n\t"
81501 #endif
81502 #ifdef WOLFSSL_KEIL
81503         "orrs	r5, r5, r6\n\t"
81504 #elif defined(__clang__)
81505         "orrs	r5, r6\n\t"
81506 #else
81507         "orr	r5, r6\n\t"
81508 #endif
81509 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81510         "subs	%[a], %[a], #0x40\n\t"
81511 #else
81512         "sub	%[a], %[a], #0x40\n\t"
81513 #endif
81514 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81515         "subs	%[r], %[r], #0x40\n\t"
81516 #else
81517         "sub	%[r], %[r], #0x40\n\t"
81518 #endif
81519         "ldr	r3, [%[a], #60]\n\t"
81520         "str	r5, [%[r], #68]\n\t"
81521 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81522         "lsrs	r6, r3, #1\n\t"
81523 #else
81524         "lsr	r6, r3, #1\n\t"
81525 #endif
81526 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81527         "lsls	r3, r3, %[n]\n\t"
81528 #else
81529         "lsl	r3, r3, %[n]\n\t"
81530 #endif
81531 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81532         "lsrs	r6, r6, r7\n\t"
81533 #else
81534         "lsr	r6, r6, r7\n\t"
81535 #endif
81536 #ifdef WOLFSSL_KEIL
81537         "orrs	r4, r4, r6\n\t"
81538 #elif defined(__clang__)
81539         "orrs	r4, r6\n\t"
81540 #else
81541         "orr	r4, r6\n\t"
81542 #endif
81543         "ldr	r5, [%[a], #56]\n\t"
81544         "str	r4, [%[r], #64]\n\t"
81545 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81546         "lsrs	r6, r5, #1\n\t"
81547 #else
81548         "lsr	r6, r5, #1\n\t"
81549 #endif
81550 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81551         "lsls	r5, r5, %[n]\n\t"
81552 #else
81553         "lsl	r5, r5, %[n]\n\t"
81554 #endif
81555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81556         "lsrs	r6, r6, r7\n\t"
81557 #else
81558         "lsr	r6, r6, r7\n\t"
81559 #endif
81560 #ifdef WOLFSSL_KEIL
81561         "orrs	r3, r3, r6\n\t"
81562 #elif defined(__clang__)
81563         "orrs	r3, r6\n\t"
81564 #else
81565         "orr	r3, r6\n\t"
81566 #endif
81567         "ldr	r4, [%[a], #52]\n\t"
81568         "str	r3, [%[r], #60]\n\t"
81569 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81570         "lsrs	r6, r4, #1\n\t"
81571 #else
81572         "lsr	r6, r4, #1\n\t"
81573 #endif
81574 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81575         "lsls	r4, r4, %[n]\n\t"
81576 #else
81577         "lsl	r4, r4, %[n]\n\t"
81578 #endif
81579 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81580         "lsrs	r6, r6, r7\n\t"
81581 #else
81582         "lsr	r6, r6, r7\n\t"
81583 #endif
81584 #ifdef WOLFSSL_KEIL
81585         "orrs	r5, r5, r6\n\t"
81586 #elif defined(__clang__)
81587         "orrs	r5, r6\n\t"
81588 #else
81589         "orr	r5, r6\n\t"
81590 #endif
81591         "ldr	r3, [%[a], #48]\n\t"
81592         "str	r5, [%[r], #56]\n\t"
81593 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81594         "lsrs	r6, r3, #1\n\t"
81595 #else
81596         "lsr	r6, r3, #1\n\t"
81597 #endif
81598 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81599         "lsls	r3, r3, %[n]\n\t"
81600 #else
81601         "lsl	r3, r3, %[n]\n\t"
81602 #endif
81603 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81604         "lsrs	r6, r6, r7\n\t"
81605 #else
81606         "lsr	r6, r6, r7\n\t"
81607 #endif
81608 #ifdef WOLFSSL_KEIL
81609         "orrs	r4, r4, r6\n\t"
81610 #elif defined(__clang__)
81611         "orrs	r4, r6\n\t"
81612 #else
81613         "orr	r4, r6\n\t"
81614 #endif
81615         "ldr	r5, [%[a], #44]\n\t"
81616         "str	r4, [%[r], #52]\n\t"
81617 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81618         "lsrs	r6, r5, #1\n\t"
81619 #else
81620         "lsr	r6, r5, #1\n\t"
81621 #endif
81622 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81623         "lsls	r5, r5, %[n]\n\t"
81624 #else
81625         "lsl	r5, r5, %[n]\n\t"
81626 #endif
81627 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81628         "lsrs	r6, r6, r7\n\t"
81629 #else
81630         "lsr	r6, r6, r7\n\t"
81631 #endif
81632 #ifdef WOLFSSL_KEIL
81633         "orrs	r3, r3, r6\n\t"
81634 #elif defined(__clang__)
81635         "orrs	r3, r6\n\t"
81636 #else
81637         "orr	r3, r6\n\t"
81638 #endif
81639         "ldr	r4, [%[a], #40]\n\t"
81640         "str	r3, [%[r], #48]\n\t"
81641 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81642         "lsrs	r6, r4, #1\n\t"
81643 #else
81644         "lsr	r6, r4, #1\n\t"
81645 #endif
81646 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81647         "lsls	r4, r4, %[n]\n\t"
81648 #else
81649         "lsl	r4, r4, %[n]\n\t"
81650 #endif
81651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81652         "lsrs	r6, r6, r7\n\t"
81653 #else
81654         "lsr	r6, r6, r7\n\t"
81655 #endif
81656 #ifdef WOLFSSL_KEIL
81657         "orrs	r5, r5, r6\n\t"
81658 #elif defined(__clang__)
81659         "orrs	r5, r6\n\t"
81660 #else
81661         "orr	r5, r6\n\t"
81662 #endif
81663         "ldr	r3, [%[a], #36]\n\t"
81664         "str	r5, [%[r], #44]\n\t"
81665 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81666         "lsrs	r6, r3, #1\n\t"
81667 #else
81668         "lsr	r6, r3, #1\n\t"
81669 #endif
81670 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81671         "lsls	r3, r3, %[n]\n\t"
81672 #else
81673         "lsl	r3, r3, %[n]\n\t"
81674 #endif
81675 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81676         "lsrs	r6, r6, r7\n\t"
81677 #else
81678         "lsr	r6, r6, r7\n\t"
81679 #endif
81680 #ifdef WOLFSSL_KEIL
81681         "orrs	r4, r4, r6\n\t"
81682 #elif defined(__clang__)
81683         "orrs	r4, r6\n\t"
81684 #else
81685         "orr	r4, r6\n\t"
81686 #endif
81687         "ldr	r5, [%[a], #32]\n\t"
81688         "str	r4, [%[r], #40]\n\t"
81689 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81690         "lsrs	r6, r5, #1\n\t"
81691 #else
81692         "lsr	r6, r5, #1\n\t"
81693 #endif
81694 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81695         "lsls	r5, r5, %[n]\n\t"
81696 #else
81697         "lsl	r5, r5, %[n]\n\t"
81698 #endif
81699 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81700         "lsrs	r6, r6, r7\n\t"
81701 #else
81702         "lsr	r6, r6, r7\n\t"
81703 #endif
81704 #ifdef WOLFSSL_KEIL
81705         "orrs	r3, r3, r6\n\t"
81706 #elif defined(__clang__)
81707         "orrs	r3, r6\n\t"
81708 #else
81709         "orr	r3, r6\n\t"
81710 #endif
81711         "ldr	r4, [%[a], #28]\n\t"
81712         "str	r3, [%[r], #36]\n\t"
81713 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81714         "lsrs	r6, r4, #1\n\t"
81715 #else
81716         "lsr	r6, r4, #1\n\t"
81717 #endif
81718 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81719         "lsls	r4, r4, %[n]\n\t"
81720 #else
81721         "lsl	r4, r4, %[n]\n\t"
81722 #endif
81723 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81724         "lsrs	r6, r6, r7\n\t"
81725 #else
81726         "lsr	r6, r6, r7\n\t"
81727 #endif
81728 #ifdef WOLFSSL_KEIL
81729         "orrs	r5, r5, r6\n\t"
81730 #elif defined(__clang__)
81731         "orrs	r5, r6\n\t"
81732 #else
81733         "orr	r5, r6\n\t"
81734 #endif
81735         "ldr	r3, [%[a], #24]\n\t"
81736         "str	r5, [%[r], #32]\n\t"
81737 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81738         "lsrs	r6, r3, #1\n\t"
81739 #else
81740         "lsr	r6, r3, #1\n\t"
81741 #endif
81742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81743         "lsls	r3, r3, %[n]\n\t"
81744 #else
81745         "lsl	r3, r3, %[n]\n\t"
81746 #endif
81747 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81748         "lsrs	r6, r6, r7\n\t"
81749 #else
81750         "lsr	r6, r6, r7\n\t"
81751 #endif
81752 #ifdef WOLFSSL_KEIL
81753         "orrs	r4, r4, r6\n\t"
81754 #elif defined(__clang__)
81755         "orrs	r4, r6\n\t"
81756 #else
81757         "orr	r4, r6\n\t"
81758 #endif
81759         "ldr	r5, [%[a], #20]\n\t"
81760         "str	r4, [%[r], #28]\n\t"
81761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81762         "lsrs	r6, r5, #1\n\t"
81763 #else
81764         "lsr	r6, r5, #1\n\t"
81765 #endif
81766 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81767         "lsls	r5, r5, %[n]\n\t"
81768 #else
81769         "lsl	r5, r5, %[n]\n\t"
81770 #endif
81771 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81772         "lsrs	r6, r6, r7\n\t"
81773 #else
81774         "lsr	r6, r6, r7\n\t"
81775 #endif
81776 #ifdef WOLFSSL_KEIL
81777         "orrs	r3, r3, r6\n\t"
81778 #elif defined(__clang__)
81779         "orrs	r3, r6\n\t"
81780 #else
81781         "orr	r3, r6\n\t"
81782 #endif
81783         "ldr	r4, [%[a], #16]\n\t"
81784         "str	r3, [%[r], #24]\n\t"
81785 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81786         "lsrs	r6, r4, #1\n\t"
81787 #else
81788         "lsr	r6, r4, #1\n\t"
81789 #endif
81790 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81791         "lsls	r4, r4, %[n]\n\t"
81792 #else
81793         "lsl	r4, r4, %[n]\n\t"
81794 #endif
81795 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81796         "lsrs	r6, r6, r7\n\t"
81797 #else
81798         "lsr	r6, r6, r7\n\t"
81799 #endif
81800 #ifdef WOLFSSL_KEIL
81801         "orrs	r5, r5, r6\n\t"
81802 #elif defined(__clang__)
81803         "orrs	r5, r6\n\t"
81804 #else
81805         "orr	r5, r6\n\t"
81806 #endif
81807         "ldr	r3, [%[a], #12]\n\t"
81808         "str	r5, [%[r], #20]\n\t"
81809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81810         "lsrs	r6, r3, #1\n\t"
81811 #else
81812         "lsr	r6, r3, #1\n\t"
81813 #endif
81814 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81815         "lsls	r3, r3, %[n]\n\t"
81816 #else
81817         "lsl	r3, r3, %[n]\n\t"
81818 #endif
81819 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81820         "lsrs	r6, r6, r7\n\t"
81821 #else
81822         "lsr	r6, r6, r7\n\t"
81823 #endif
81824 #ifdef WOLFSSL_KEIL
81825         "orrs	r4, r4, r6\n\t"
81826 #elif defined(__clang__)
81827         "orrs	r4, r6\n\t"
81828 #else
81829         "orr	r4, r6\n\t"
81830 #endif
81831         "ldr	r5, [%[a], #8]\n\t"
81832         "str	r4, [%[r], #16]\n\t"
81833 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81834         "lsrs	r6, r5, #1\n\t"
81835 #else
81836         "lsr	r6, r5, #1\n\t"
81837 #endif
81838 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81839         "lsls	r5, r5, %[n]\n\t"
81840 #else
81841         "lsl	r5, r5, %[n]\n\t"
81842 #endif
81843 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81844         "lsrs	r6, r6, r7\n\t"
81845 #else
81846         "lsr	r6, r6, r7\n\t"
81847 #endif
81848 #ifdef WOLFSSL_KEIL
81849         "orrs	r3, r3, r6\n\t"
81850 #elif defined(__clang__)
81851         "orrs	r3, r6\n\t"
81852 #else
81853         "orr	r3, r6\n\t"
81854 #endif
81855         "ldr	r4, [%[a], #4]\n\t"
81856         "str	r3, [%[r], #12]\n\t"
81857 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81858         "lsrs	r6, r4, #1\n\t"
81859 #else
81860         "lsr	r6, r4, #1\n\t"
81861 #endif
81862 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81863         "lsls	r4, r4, %[n]\n\t"
81864 #else
81865         "lsl	r4, r4, %[n]\n\t"
81866 #endif
81867 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81868         "lsrs	r6, r6, r7\n\t"
81869 #else
81870         "lsr	r6, r6, r7\n\t"
81871 #endif
81872 #ifdef WOLFSSL_KEIL
81873         "orrs	r5, r5, r6\n\t"
81874 #elif defined(__clang__)
81875         "orrs	r5, r6\n\t"
81876 #else
81877         "orr	r5, r6\n\t"
81878 #endif
81879         "ldr	r3, [%[a]]\n\t"
81880         "str	r5, [%[r], #8]\n\t"
81881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81882         "lsrs	r6, r3, #1\n\t"
81883 #else
81884         "lsr	r6, r3, #1\n\t"
81885 #endif
81886 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81887         "lsls	r3, r3, %[n]\n\t"
81888 #else
81889         "lsl	r3, r3, %[n]\n\t"
81890 #endif
81891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81892         "lsrs	r6, r6, r7\n\t"
81893 #else
81894         "lsr	r6, r6, r7\n\t"
81895 #endif
81896 #ifdef WOLFSSL_KEIL
81897         "orrs	r4, r4, r6\n\t"
81898 #elif defined(__clang__)
81899         "orrs	r4, r6\n\t"
81900 #else
81901         "orr	r4, r6\n\t"
81902 #endif
81903 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81904         "subs	%[a], %[a], #0x40\n\t"
81905 #else
81906         "sub	%[a], %[a], #0x40\n\t"
81907 #endif
81908 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81909         "subs	%[r], %[r], #0x40\n\t"
81910 #else
81911         "sub	%[r], %[r], #0x40\n\t"
81912 #endif
81913         "ldr	r5, [%[a], #60]\n\t"
81914         "str	r4, [%[r], #68]\n\t"
81915 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81916         "lsrs	r6, r5, #1\n\t"
81917 #else
81918         "lsr	r6, r5, #1\n\t"
81919 #endif
81920 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81921         "lsls	r5, r5, %[n]\n\t"
81922 #else
81923         "lsl	r5, r5, %[n]\n\t"
81924 #endif
81925 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81926         "lsrs	r6, r6, r7\n\t"
81927 #else
81928         "lsr	r6, r6, r7\n\t"
81929 #endif
81930 #ifdef WOLFSSL_KEIL
81931         "orrs	r3, r3, r6\n\t"
81932 #elif defined(__clang__)
81933         "orrs	r3, r6\n\t"
81934 #else
81935         "orr	r3, r6\n\t"
81936 #endif
81937         "ldr	r4, [%[a], #56]\n\t"
81938         "str	r3, [%[r], #64]\n\t"
81939 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81940         "lsrs	r6, r4, #1\n\t"
81941 #else
81942         "lsr	r6, r4, #1\n\t"
81943 #endif
81944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81945         "lsls	r4, r4, %[n]\n\t"
81946 #else
81947         "lsl	r4, r4, %[n]\n\t"
81948 #endif
81949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81950         "lsrs	r6, r6, r7\n\t"
81951 #else
81952         "lsr	r6, r6, r7\n\t"
81953 #endif
81954 #ifdef WOLFSSL_KEIL
81955         "orrs	r5, r5, r6\n\t"
81956 #elif defined(__clang__)
81957         "orrs	r5, r6\n\t"
81958 #else
81959         "orr	r5, r6\n\t"
81960 #endif
81961         "ldr	r3, [%[a], #52]\n\t"
81962         "str	r5, [%[r], #60]\n\t"
81963 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81964         "lsrs	r6, r3, #1\n\t"
81965 #else
81966         "lsr	r6, r3, #1\n\t"
81967 #endif
81968 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81969         "lsls	r3, r3, %[n]\n\t"
81970 #else
81971         "lsl	r3, r3, %[n]\n\t"
81972 #endif
81973 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81974         "lsrs	r6, r6, r7\n\t"
81975 #else
81976         "lsr	r6, r6, r7\n\t"
81977 #endif
81978 #ifdef WOLFSSL_KEIL
81979         "orrs	r4, r4, r6\n\t"
81980 #elif defined(__clang__)
81981         "orrs	r4, r6\n\t"
81982 #else
81983         "orr	r4, r6\n\t"
81984 #endif
81985         "ldr	r5, [%[a], #48]\n\t"
81986         "str	r4, [%[r], #56]\n\t"
81987 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81988         "lsrs	r6, r5, #1\n\t"
81989 #else
81990         "lsr	r6, r5, #1\n\t"
81991 #endif
81992 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81993         "lsls	r5, r5, %[n]\n\t"
81994 #else
81995         "lsl	r5, r5, %[n]\n\t"
81996 #endif
81997 #if defined(__clang__) || defined(WOLFSSL_KEIL)
81998         "lsrs	r6, r6, r7\n\t"
81999 #else
82000         "lsr	r6, r6, r7\n\t"
82001 #endif
82002 #ifdef WOLFSSL_KEIL
82003         "orrs	r3, r3, r6\n\t"
82004 #elif defined(__clang__)
82005         "orrs	r3, r6\n\t"
82006 #else
82007         "orr	r3, r6\n\t"
82008 #endif
82009         "ldr	r4, [%[a], #44]\n\t"
82010         "str	r3, [%[r], #52]\n\t"
82011 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82012         "lsrs	r6, r4, #1\n\t"
82013 #else
82014         "lsr	r6, r4, #1\n\t"
82015 #endif
82016 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82017         "lsls	r4, r4, %[n]\n\t"
82018 #else
82019         "lsl	r4, r4, %[n]\n\t"
82020 #endif
82021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82022         "lsrs	r6, r6, r7\n\t"
82023 #else
82024         "lsr	r6, r6, r7\n\t"
82025 #endif
82026 #ifdef WOLFSSL_KEIL
82027         "orrs	r5, r5, r6\n\t"
82028 #elif defined(__clang__)
82029         "orrs	r5, r6\n\t"
82030 #else
82031         "orr	r5, r6\n\t"
82032 #endif
82033         "ldr	r3, [%[a], #40]\n\t"
82034         "str	r5, [%[r], #48]\n\t"
82035 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82036         "lsrs	r6, r3, #1\n\t"
82037 #else
82038         "lsr	r6, r3, #1\n\t"
82039 #endif
82040 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82041         "lsls	r3, r3, %[n]\n\t"
82042 #else
82043         "lsl	r3, r3, %[n]\n\t"
82044 #endif
82045 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82046         "lsrs	r6, r6, r7\n\t"
82047 #else
82048         "lsr	r6, r6, r7\n\t"
82049 #endif
82050 #ifdef WOLFSSL_KEIL
82051         "orrs	r4, r4, r6\n\t"
82052 #elif defined(__clang__)
82053         "orrs	r4, r6\n\t"
82054 #else
82055         "orr	r4, r6\n\t"
82056 #endif
82057         "ldr	r5, [%[a], #36]\n\t"
82058         "str	r4, [%[r], #44]\n\t"
82059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82060         "lsrs	r6, r5, #1\n\t"
82061 #else
82062         "lsr	r6, r5, #1\n\t"
82063 #endif
82064 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82065         "lsls	r5, r5, %[n]\n\t"
82066 #else
82067         "lsl	r5, r5, %[n]\n\t"
82068 #endif
82069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82070         "lsrs	r6, r6, r7\n\t"
82071 #else
82072         "lsr	r6, r6, r7\n\t"
82073 #endif
82074 #ifdef WOLFSSL_KEIL
82075         "orrs	r3, r3, r6\n\t"
82076 #elif defined(__clang__)
82077         "orrs	r3, r6\n\t"
82078 #else
82079         "orr	r3, r6\n\t"
82080 #endif
82081         "ldr	r4, [%[a], #32]\n\t"
82082         "str	r3, [%[r], #40]\n\t"
82083 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82084         "lsrs	r6, r4, #1\n\t"
82085 #else
82086         "lsr	r6, r4, #1\n\t"
82087 #endif
82088 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82089         "lsls	r4, r4, %[n]\n\t"
82090 #else
82091         "lsl	r4, r4, %[n]\n\t"
82092 #endif
82093 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82094         "lsrs	r6, r6, r7\n\t"
82095 #else
82096         "lsr	r6, r6, r7\n\t"
82097 #endif
82098 #ifdef WOLFSSL_KEIL
82099         "orrs	r5, r5, r6\n\t"
82100 #elif defined(__clang__)
82101         "orrs	r5, r6\n\t"
82102 #else
82103         "orr	r5, r6\n\t"
82104 #endif
82105         "ldr	r3, [%[a], #28]\n\t"
82106         "str	r5, [%[r], #36]\n\t"
82107 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82108         "lsrs	r6, r3, #1\n\t"
82109 #else
82110         "lsr	r6, r3, #1\n\t"
82111 #endif
82112 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82113         "lsls	r3, r3, %[n]\n\t"
82114 #else
82115         "lsl	r3, r3, %[n]\n\t"
82116 #endif
82117 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82118         "lsrs	r6, r6, r7\n\t"
82119 #else
82120         "lsr	r6, r6, r7\n\t"
82121 #endif
82122 #ifdef WOLFSSL_KEIL
82123         "orrs	r4, r4, r6\n\t"
82124 #elif defined(__clang__)
82125         "orrs	r4, r6\n\t"
82126 #else
82127         "orr	r4, r6\n\t"
82128 #endif
82129         "ldr	r5, [%[a], #24]\n\t"
82130         "str	r4, [%[r], #32]\n\t"
82131 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82132         "lsrs	r6, r5, #1\n\t"
82133 #else
82134         "lsr	r6, r5, #1\n\t"
82135 #endif
82136 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82137         "lsls	r5, r5, %[n]\n\t"
82138 #else
82139         "lsl	r5, r5, %[n]\n\t"
82140 #endif
82141 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82142         "lsrs	r6, r6, r7\n\t"
82143 #else
82144         "lsr	r6, r6, r7\n\t"
82145 #endif
82146 #ifdef WOLFSSL_KEIL
82147         "orrs	r3, r3, r6\n\t"
82148 #elif defined(__clang__)
82149         "orrs	r3, r6\n\t"
82150 #else
82151         "orr	r3, r6\n\t"
82152 #endif
82153         "ldr	r4, [%[a], #20]\n\t"
82154         "str	r3, [%[r], #28]\n\t"
82155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82156         "lsrs	r6, r4, #1\n\t"
82157 #else
82158         "lsr	r6, r4, #1\n\t"
82159 #endif
82160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82161         "lsls	r4, r4, %[n]\n\t"
82162 #else
82163         "lsl	r4, r4, %[n]\n\t"
82164 #endif
82165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82166         "lsrs	r6, r6, r7\n\t"
82167 #else
82168         "lsr	r6, r6, r7\n\t"
82169 #endif
82170 #ifdef WOLFSSL_KEIL
82171         "orrs	r5, r5, r6\n\t"
82172 #elif defined(__clang__)
82173         "orrs	r5, r6\n\t"
82174 #else
82175         "orr	r5, r6\n\t"
82176 #endif
82177         "ldr	r3, [%[a], #16]\n\t"
82178         "str	r5, [%[r], #24]\n\t"
82179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82180         "lsrs	r6, r3, #1\n\t"
82181 #else
82182         "lsr	r6, r3, #1\n\t"
82183 #endif
82184 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82185         "lsls	r3, r3, %[n]\n\t"
82186 #else
82187         "lsl	r3, r3, %[n]\n\t"
82188 #endif
82189 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82190         "lsrs	r6, r6, r7\n\t"
82191 #else
82192         "lsr	r6, r6, r7\n\t"
82193 #endif
82194 #ifdef WOLFSSL_KEIL
82195         "orrs	r4, r4, r6\n\t"
82196 #elif defined(__clang__)
82197         "orrs	r4, r6\n\t"
82198 #else
82199         "orr	r4, r6\n\t"
82200 #endif
82201         "ldr	r5, [%[a], #12]\n\t"
82202         "str	r4, [%[r], #20]\n\t"
82203 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82204         "lsrs	r6, r5, #1\n\t"
82205 #else
82206         "lsr	r6, r5, #1\n\t"
82207 #endif
82208 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82209         "lsls	r5, r5, %[n]\n\t"
82210 #else
82211         "lsl	r5, r5, %[n]\n\t"
82212 #endif
82213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82214         "lsrs	r6, r6, r7\n\t"
82215 #else
82216         "lsr	r6, r6, r7\n\t"
82217 #endif
82218 #ifdef WOLFSSL_KEIL
82219         "orrs	r3, r3, r6\n\t"
82220 #elif defined(__clang__)
82221         "orrs	r3, r6\n\t"
82222 #else
82223         "orr	r3, r6\n\t"
82224 #endif
82225         "ldr	r4, [%[a], #8]\n\t"
82226         "str	r3, [%[r], #16]\n\t"
82227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82228         "lsrs	r6, r4, #1\n\t"
82229 #else
82230         "lsr	r6, r4, #1\n\t"
82231 #endif
82232 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82233         "lsls	r4, r4, %[n]\n\t"
82234 #else
82235         "lsl	r4, r4, %[n]\n\t"
82236 #endif
82237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82238         "lsrs	r6, r6, r7\n\t"
82239 #else
82240         "lsr	r6, r6, r7\n\t"
82241 #endif
82242 #ifdef WOLFSSL_KEIL
82243         "orrs	r5, r5, r6\n\t"
82244 #elif defined(__clang__)
82245         "orrs	r5, r6\n\t"
82246 #else
82247         "orr	r5, r6\n\t"
82248 #endif
82249         "ldr	r3, [%[a], #4]\n\t"
82250         "str	r5, [%[r], #12]\n\t"
82251 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82252         "lsrs	r6, r3, #1\n\t"
82253 #else
82254         "lsr	r6, r3, #1\n\t"
82255 #endif
82256 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82257         "lsls	r3, r3, %[n]\n\t"
82258 #else
82259         "lsl	r3, r3, %[n]\n\t"
82260 #endif
82261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82262         "lsrs	r6, r6, r7\n\t"
82263 #else
82264         "lsr	r6, r6, r7\n\t"
82265 #endif
82266 #ifdef WOLFSSL_KEIL
82267         "orrs	r4, r4, r6\n\t"
82268 #elif defined(__clang__)
82269         "orrs	r4, r6\n\t"
82270 #else
82271         "orr	r4, r6\n\t"
82272 #endif
82273         "ldr	r5, [%[a]]\n\t"
82274         "str	r4, [%[r], #8]\n\t"
82275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82276         "lsrs	r6, r5, #1\n\t"
82277 #else
82278         "lsr	r6, r5, #1\n\t"
82279 #endif
82280 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82281         "lsls	r5, r5, %[n]\n\t"
82282 #else
82283         "lsl	r5, r5, %[n]\n\t"
82284 #endif
82285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82286         "lsrs	r6, r6, r7\n\t"
82287 #else
82288         "lsr	r6, r6, r7\n\t"
82289 #endif
82290 #ifdef WOLFSSL_KEIL
82291         "orrs	r3, r3, r6\n\t"
82292 #elif defined(__clang__)
82293         "orrs	r3, r6\n\t"
82294 #else
82295         "orr	r3, r6\n\t"
82296 #endif
82297         "str	r5, [%[r]]\n\t"
82298         "str	r3, [%[r], #4]\n\t"
82299         : [r] "+r" (r), [a] "+r" (a), [n] "+r" (n)
82300         :
82301         : "memory", "r3", "r4", "r5", "r6", "r7"
82302     );
82303 }
82304 
82305 /* Modular exponentiate 2 to the e mod m. (r = 2^e mod m)
82306  *
82307  * r     A single precision number that is the result of the operation.
82308  * e     A single precision number that is the exponent.
82309  * bits  The number of bits in the exponent.
82310  * m     A single precision number that is the modulus.
82311  * returns  0 on success.
82312  * returns  MEMORY_E on dynamic memory allocation failure.
82313  * returns  MP_VAL when base is even.
82314  */
sp_3072_mod_exp_2_96(sp_digit * r,const sp_digit * e,int bits,const sp_digit * m)82315 static int sp_3072_mod_exp_2_96(sp_digit* r, const sp_digit* e, int bits,
82316         const sp_digit* m)
82317 {
82318 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
82319     sp_digit* td = NULL;
82320 #else
82321     sp_digit td[289];
82322 #endif
82323     sp_digit* norm = NULL;
82324     sp_digit* tmp = NULL;
82325     sp_digit mp = 1;
82326     sp_digit n;
82327     sp_digit o;
82328     sp_digit mask;
82329     int i;
82330     int c;
82331     byte y;
82332     int err = MP_OKAY;
82333 
82334     if ((m[0] & 1) == 0) {
82335         err = MP_VAL;
82336     }
82337 
82338 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
82339     if (err == MP_OKAY) {
82340         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 289, NULL,
82341                                 DYNAMIC_TYPE_TMP_BUFFER);
82342         if (td == NULL)
82343             err = MEMORY_E;
82344     }
82345 #endif
82346 
82347     if (err == MP_OKAY) {
82348         norm = td;
82349         tmp = td + 192;
82350 
82351         sp_3072_mont_setup(m, &mp);
82352         sp_3072_mont_norm_96(norm, m);
82353 
82354         i = (bits - 1) / 32;
82355         n = e[i--];
82356         c = bits & 31;
82357         if (c == 0) {
82358             c = 32;
82359         }
82360         c -= bits % 5;
82361         if (c == 32) {
82362             c = 27;
82363         }
82364         if (c < 0) {
82365             /* Number of bits in top word is less than number needed. */
82366             c = -c;
82367             y = (byte)(n << c);
82368             n = e[i--];
82369             y |= (byte)(n >> (64 - c));
82370             n <<= c;
82371             c = 64 - c;
82372         }
82373         else {
82374             y = (byte)(n >> c);
82375             n <<= 32 - c;
82376         }
82377         sp_3072_lshift_96(r, norm, y);
82378         for (; i>=0 || c>=5; ) {
82379             if (c == 0) {
82380                 n = e[i--];
82381                 y = (byte)(n >> 27);
82382                 n <<= 5;
82383                 c = 27;
82384             }
82385             else if (c < 5) {
82386                 y = (byte)(n >> 27);
82387                 n = e[i--];
82388                 c = 5 - c;
82389                 y |= (byte)(n >> (32 - c));
82390                 n <<= c;
82391                 c = 32 - c;
82392             }
82393             else {
82394                 y = (byte)((n >> 27) & 0x1f);
82395                 n <<= 5;
82396                 c -= 5;
82397             }
82398 
82399             sp_3072_mont_sqr_96(r, r, m, mp);
82400             sp_3072_mont_sqr_96(r, r, m, mp);
82401             sp_3072_mont_sqr_96(r, r, m, mp);
82402             sp_3072_mont_sqr_96(r, r, m, mp);
82403             sp_3072_mont_sqr_96(r, r, m, mp);
82404 
82405             sp_3072_lshift_96(r, r, y);
82406             sp_3072_mul_d_96(tmp, norm, r[96]);
82407             r[96] = 0;
82408             o = sp_3072_add_96(r, r, tmp);
82409             sp_3072_cond_sub_96(r, r, m, (sp_digit)0 - o);
82410         }
82411 
82412         XMEMSET(&r[96], 0, sizeof(sp_digit) * 96U);
82413         sp_3072_mont_reduce_96(r, m, mp);
82414 
82415         mask = 0 - (sp_3072_cmp_96(r, m) >= 0);
82416         sp_3072_cond_sub_96(r, r, m, mask);
82417     }
82418 
82419 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
82420     if (td != NULL)
82421         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
82422 #endif
82423 
82424     return err;
82425 }
82426 #endif /* HAVE_FFDHE_3072 */
82427 
82428 /* Perform the modular exponentiation for Diffie-Hellman.
82429  *
82430  * base     Base.
82431  * exp      Array of bytes that is the exponent.
82432  * expLen   Length of data, in bytes, in exponent.
82433  * mod      Modulus.
82434  * out      Buffer to hold big-endian bytes of exponentiation result.
82435  *          Must be at least 384 bytes long.
82436  * outLen   Length, in bytes, of exponentiation result.
82437  * returns 0 on success, MP_READ_E if there are too many bytes in an array
82438  * and MEMORY_E if memory allocation fails.
82439  */
sp_DhExp_3072(const mp_int * base,const byte * exp,word32 expLen,const mp_int * mod,byte * out,word32 * outLen)82440 int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen,
82441     const mp_int* mod, byte* out, word32* outLen)
82442 {
82443     int err = MP_OKAY;
82444     sp_digit b[192];
82445     sp_digit e[96];
82446     sp_digit m[96];
82447     sp_digit* r = b;
82448     word32 i;
82449 
82450     if (mp_count_bits(base) > 3072) {
82451         err = MP_READ_E;
82452     }
82453     else if (expLen > 384) {
82454         err = MP_READ_E;
82455     }
82456     else if (mp_count_bits(mod) != 3072) {
82457         err = MP_READ_E;
82458     }
82459     else if (mp_iseven(mod)) {
82460         err = MP_VAL;
82461     }
82462 
82463     if (err == MP_OKAY) {
82464         sp_3072_from_mp(b, 96, base);
82465         sp_3072_from_bin(e, 96, exp, expLen);
82466         sp_3072_from_mp(m, 96, mod);
82467 
82468     #ifdef HAVE_FFDHE_3072
82469         if (base->used == 1 && base->dp[0] == 2 && m[95] == (sp_digit)-1)
82470             err = sp_3072_mod_exp_2_96(r, e, expLen * 8, m);
82471         else
82472     #endif
82473             err = sp_3072_mod_exp_96(r, b, e, expLen * 8, m, 0);
82474 
82475     }
82476 
82477     if (err == MP_OKAY) {
82478         sp_3072_to_bin_96(r, out);
82479         *outLen = 384;
82480         for (i=0; i<384 && out[i] == 0; i++) {
82481             /* Search for first non-zero. */
82482         }
82483         *outLen -= i;
82484         XMEMMOVE(out, out + i, *outLen);
82485 
82486     }
82487 
82488     XMEMSET(e, 0, sizeof(e));
82489 
82490     return err;
82491 }
82492 #endif /* WOLFSSL_HAVE_SP_DH */
82493 
82494 /* Perform the modular exponentiation for Diffie-Hellman.
82495  *
82496  * base  Base. MP integer.
82497  * exp   Exponent. MP integer.
82498  * mod   Modulus. MP integer.
82499  * res   Result. MP integer.
82500  * returns 0 on success, MP_READ_E if there are too many bytes in an array
82501  * and MEMORY_E if memory allocation fails.
82502  */
sp_ModExp_1536(const mp_int * base,const mp_int * exp,const mp_int * mod,mp_int * res)82503 int sp_ModExp_1536(const mp_int* base, const mp_int* exp, const mp_int* mod,
82504     mp_int* res)
82505 {
82506     int err = MP_OKAY;
82507     sp_digit b[96];
82508     sp_digit e[48];
82509     sp_digit m[48];
82510     sp_digit* r = b;
82511     int expBits = mp_count_bits(exp);
82512 
82513     if (mp_count_bits(base) > 1536) {
82514         err = MP_READ_E;
82515     }
82516     else if (expBits > 1536) {
82517         err = MP_READ_E;
82518     }
82519     else if (mp_count_bits(mod) != 1536) {
82520         err = MP_READ_E;
82521     }
82522     else if (mp_iseven(mod)) {
82523         err = MP_VAL;
82524     }
82525 
82526     if (err == MP_OKAY) {
82527         sp_3072_from_mp(b, 48, base);
82528         sp_3072_from_mp(e, 48, exp);
82529         sp_3072_from_mp(m, 48, mod);
82530 
82531         err = sp_3072_mod_exp_48(r, b, e, expBits, m, 0);
82532     }
82533 
82534     if (err == MP_OKAY) {
82535         XMEMSET(r + 48, 0, sizeof(*r) * 48U);
82536         err = sp_3072_to_mp(r, res);
82537         res->used = mod->used;
82538         mp_clamp(res);
82539     }
82540 
82541     XMEMSET(e, 0, sizeof(e));
82542 
82543     return err;
82544 }
82545 
82546 #endif /* WOLFSSL_HAVE_SP_DH | (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) */
82547 
82548 #endif /* !WOLFSSL_SP_NO_3072 */
82549 
82550 #ifdef WOLFSSL_SP_4096
82551 /* Read big endian unsigned byte array into r.
82552  *
82553  * r  A single precision integer.
82554  * size  Maximum number of bytes to convert
82555  * a  Byte array.
82556  * n  Number of bytes in array to read.
82557  */
sp_4096_from_bin(sp_digit * r,int size,const byte * a,int n)82558 static void sp_4096_from_bin(sp_digit* r, int size, const byte* a, int n)
82559 {
82560     int i;
82561     int j = 0;
82562     word32 s = 0;
82563 
82564     r[0] = 0;
82565     for (i = n-1; i >= 0; i--) {
82566         r[j] |= (((sp_digit)a[i]) << s);
82567         if (s >= 24U) {
82568             r[j] &= 0xffffffff;
82569             s = 32U - s;
82570             if (j + 1 >= size) {
82571                 break;
82572             }
82573             r[++j] = (sp_digit)a[i] >> s;
82574             s = 8U - s;
82575         }
82576         else {
82577             s += 8U;
82578         }
82579     }
82580 
82581     for (j++; j < size; j++) {
82582         r[j] = 0;
82583     }
82584 }
82585 
82586 /* Convert an mp_int to an array of sp_digit.
82587  *
82588  * r  A single precision integer.
82589  * size  Maximum number of bytes to convert
82590  * a  A multi-precision integer.
82591  */
sp_4096_from_mp(sp_digit * r,int size,const mp_int * a)82592 static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a)
82593 {
82594 #if DIGIT_BIT == 32
82595     int j;
82596 
82597     XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
82598 
82599     for (j = a->used; j < size; j++) {
82600         r[j] = 0;
82601     }
82602 #elif DIGIT_BIT > 32
82603     int i;
82604     int j = 0;
82605     word32 s = 0;
82606 
82607     r[0] = 0;
82608     for (i = 0; i < a->used && j < size; i++) {
82609         r[j] |= ((sp_digit)a->dp[i] << s);
82610         r[j] &= 0xffffffff;
82611         s = 32U - s;
82612         if (j + 1 >= size) {
82613             break;
82614         }
82615         /* lint allow cast of mismatch word32 and mp_digit */
82616         r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
82617         while ((s + 32U) <= (word32)DIGIT_BIT) {
82618             s += 32U;
82619             r[j] &= 0xffffffff;
82620             if (j + 1 >= size) {
82621                 break;
82622             }
82623             if (s < (word32)DIGIT_BIT) {
82624                 /* lint allow cast of mismatch word32 and mp_digit */
82625                 r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
82626             }
82627             else {
82628                 r[++j] = (sp_digit)0;
82629             }
82630         }
82631         s = (word32)DIGIT_BIT - s;
82632     }
82633 
82634     for (j++; j < size; j++) {
82635         r[j] = 0;
82636     }
82637 #else
82638     int i;
82639     int j = 0;
82640     int s = 0;
82641 
82642     r[0] = 0;
82643     for (i = 0; i < a->used && j < size; i++) {
82644         r[j] |= ((sp_digit)a->dp[i]) << s;
82645         if (s + DIGIT_BIT >= 32) {
82646             r[j] &= 0xffffffff;
82647             if (j + 1 >= size) {
82648                 break;
82649             }
82650             s = 32 - s;
82651             if (s == DIGIT_BIT) {
82652                 r[++j] = 0;
82653                 s = 0;
82654             }
82655             else {
82656                 r[++j] = a->dp[i] >> s;
82657                 s = DIGIT_BIT - s;
82658             }
82659         }
82660         else {
82661             s += DIGIT_BIT;
82662         }
82663     }
82664 
82665     for (j++; j < size; j++) {
82666         r[j] = 0;
82667     }
82668 #endif
82669 }
82670 
82671 /* Write r as big endian to byte array.
82672  * Fixed length number of bytes written: 512
82673  *
82674  * r  A single precision integer.
82675  * a  Byte array.
82676  */
sp_4096_to_bin_128(sp_digit * r,byte * a)82677 static void sp_4096_to_bin_128(sp_digit* r, byte* a)
82678 {
82679     int i;
82680     int j;
82681     int s = 0;
82682     int b;
82683 
82684     j = 4096 / 8 - 1;
82685     a[j] = 0;
82686     for (i=0; i<128 && j>=0; i++) {
82687         b = 0;
82688         /* lint allow cast of mismatch sp_digit and int */
82689         a[j--] |= (byte)(r[i] << s); /*lint !e9033*/
82690         b += 8 - s;
82691         if (j < 0) {
82692             break;
82693         }
82694         while (b < 32) {
82695             a[j--] = (byte)(r[i] >> b);
82696             b += 8;
82697             if (j < 0) {
82698                 break;
82699             }
82700         }
82701         s = 8 - (b - 32);
82702         if (j >= 0) {
82703             a[j] = 0;
82704         }
82705         if (s != 0) {
82706             j++;
82707         }
82708     }
82709 }
82710 
82711 #if (defined(WOLFSSL_HAVE_SP_RSA) && (!defined(WOLFSSL_RSA_PUBLIC_ONLY) || !defined(WOLFSSL_SP_SMALL))) || defined(WOLFSSL_HAVE_SP_DH)
82712 /* Normalize the values in each word to 32.
82713  *
82714  * a  Array of sp_digit to normalize.
82715  */
82716 #define sp_4096_norm_128(a)
82717 
82718 #endif /* (WOLFSSL_HAVE_SP_RSA && (!WOLFSSL_RSA_PUBLIC_ONLY || !WOLFSSL_SP_SMALL)) || WOLFSSL_HAVE_SP_DH */
82719 /* Normalize the values in each word to 32.
82720  *
82721  * a  Array of sp_digit to normalize.
82722  */
82723 #define sp_4096_norm_128(a)
82724 
82725 #ifndef WOLFSSL_SP_SMALL
82726 /* Add b to a into r. (r = a + b)
82727  *
82728  * r  A single precision integer.
82729  * a  A single precision integer.
82730  * b  A single precision integer.
82731  */
sp_4096_add_to_word_64(sp_digit * r,sp_digit a,const sp_digit * b)82732 SP_NOINLINE static sp_digit sp_4096_add_to_word_64(sp_digit* r, sp_digit a,
82733         const sp_digit* b)
82734 {
82735     __asm__ __volatile__ (
82736         "movs	r5, #0\n\t"
82737         "ldm	%[b]!, {r3, r4}\n\t"
82738 #if defined(__clang__) || defined(WOLFSSL_KEIL)
82739         "adds	r3, r3, %[a]\n\t"
82740 #else
82741         "add	r3, r3, %[a]\n\t"
82742 #endif
82743 #ifdef WOLFSSL_KEIL
82744         "adcs	r4, r4, r5\n\t"
82745 #elif defined(__clang__)
82746         "adcs	r4, r5\n\t"
82747 #else
82748         "adc	r4, r5\n\t"
82749 #endif
82750         "stm	%[r]!, {r3, r4}\n\t"
82751         "ldm	%[b]!, {r3, r4}\n\t"
82752 #ifdef WOLFSSL_KEIL
82753         "adcs	r3, r3, r5\n\t"
82754 #elif defined(__clang__)
82755         "adcs	r3, r5\n\t"
82756 #else
82757         "adc	r3, r5\n\t"
82758 #endif
82759 #ifdef WOLFSSL_KEIL
82760         "adcs	r4, r4, r5\n\t"
82761 #elif defined(__clang__)
82762         "adcs	r4, r5\n\t"
82763 #else
82764         "adc	r4, r5\n\t"
82765 #endif
82766         "stm	%[r]!, {r3, r4}\n\t"
82767         "ldm	%[b]!, {r3, r4}\n\t"
82768 #ifdef WOLFSSL_KEIL
82769         "adcs	r3, r3, r5\n\t"
82770 #elif defined(__clang__)
82771         "adcs	r3, r5\n\t"
82772 #else
82773         "adc	r3, r5\n\t"
82774 #endif
82775 #ifdef WOLFSSL_KEIL
82776         "adcs	r4, r4, r5\n\t"
82777 #elif defined(__clang__)
82778         "adcs	r4, r5\n\t"
82779 #else
82780         "adc	r4, r5\n\t"
82781 #endif
82782         "stm	%[r]!, {r3, r4}\n\t"
82783         "ldm	%[b]!, {r3, r4}\n\t"
82784 #ifdef WOLFSSL_KEIL
82785         "adcs	r3, r3, r5\n\t"
82786 #elif defined(__clang__)
82787         "adcs	r3, r5\n\t"
82788 #else
82789         "adc	r3, r5\n\t"
82790 #endif
82791 #ifdef WOLFSSL_KEIL
82792         "adcs	r4, r4, r5\n\t"
82793 #elif defined(__clang__)
82794         "adcs	r4, r5\n\t"
82795 #else
82796         "adc	r4, r5\n\t"
82797 #endif
82798         "stm	%[r]!, {r3, r4}\n\t"
82799         "ldm	%[b]!, {r3, r4}\n\t"
82800 #ifdef WOLFSSL_KEIL
82801         "adcs	r3, r3, r5\n\t"
82802 #elif defined(__clang__)
82803         "adcs	r3, r5\n\t"
82804 #else
82805         "adc	r3, r5\n\t"
82806 #endif
82807 #ifdef WOLFSSL_KEIL
82808         "adcs	r4, r4, r5\n\t"
82809 #elif defined(__clang__)
82810         "adcs	r4, r5\n\t"
82811 #else
82812         "adc	r4, r5\n\t"
82813 #endif
82814         "stm	%[r]!, {r3, r4}\n\t"
82815         "ldm	%[b]!, {r3, r4}\n\t"
82816 #ifdef WOLFSSL_KEIL
82817         "adcs	r3, r3, r5\n\t"
82818 #elif defined(__clang__)
82819         "adcs	r3, r5\n\t"
82820 #else
82821         "adc	r3, r5\n\t"
82822 #endif
82823 #ifdef WOLFSSL_KEIL
82824         "adcs	r4, r4, r5\n\t"
82825 #elif defined(__clang__)
82826         "adcs	r4, r5\n\t"
82827 #else
82828         "adc	r4, r5\n\t"
82829 #endif
82830         "stm	%[r]!, {r3, r4}\n\t"
82831         "ldm	%[b]!, {r3, r4}\n\t"
82832 #ifdef WOLFSSL_KEIL
82833         "adcs	r3, r3, r5\n\t"
82834 #elif defined(__clang__)
82835         "adcs	r3, r5\n\t"
82836 #else
82837         "adc	r3, r5\n\t"
82838 #endif
82839 #ifdef WOLFSSL_KEIL
82840         "adcs	r4, r4, r5\n\t"
82841 #elif defined(__clang__)
82842         "adcs	r4, r5\n\t"
82843 #else
82844         "adc	r4, r5\n\t"
82845 #endif
82846         "stm	%[r]!, {r3, r4}\n\t"
82847         "ldm	%[b]!, {r3, r4}\n\t"
82848 #ifdef WOLFSSL_KEIL
82849         "adcs	r3, r3, r5\n\t"
82850 #elif defined(__clang__)
82851         "adcs	r3, r5\n\t"
82852 #else
82853         "adc	r3, r5\n\t"
82854 #endif
82855 #ifdef WOLFSSL_KEIL
82856         "adcs	r4, r4, r5\n\t"
82857 #elif defined(__clang__)
82858         "adcs	r4, r5\n\t"
82859 #else
82860         "adc	r4, r5\n\t"
82861 #endif
82862         "stm	%[r]!, {r3, r4}\n\t"
82863         "ldm	%[b]!, {r3, r4}\n\t"
82864 #ifdef WOLFSSL_KEIL
82865         "adcs	r3, r3, r5\n\t"
82866 #elif defined(__clang__)
82867         "adcs	r3, r5\n\t"
82868 #else
82869         "adc	r3, r5\n\t"
82870 #endif
82871 #ifdef WOLFSSL_KEIL
82872         "adcs	r4, r4, r5\n\t"
82873 #elif defined(__clang__)
82874         "adcs	r4, r5\n\t"
82875 #else
82876         "adc	r4, r5\n\t"
82877 #endif
82878         "stm	%[r]!, {r3, r4}\n\t"
82879         "ldm	%[b]!, {r3, r4}\n\t"
82880 #ifdef WOLFSSL_KEIL
82881         "adcs	r3, r3, r5\n\t"
82882 #elif defined(__clang__)
82883         "adcs	r3, r5\n\t"
82884 #else
82885         "adc	r3, r5\n\t"
82886 #endif
82887 #ifdef WOLFSSL_KEIL
82888         "adcs	r4, r4, r5\n\t"
82889 #elif defined(__clang__)
82890         "adcs	r4, r5\n\t"
82891 #else
82892         "adc	r4, r5\n\t"
82893 #endif
82894         "stm	%[r]!, {r3, r4}\n\t"
82895         "ldm	%[b]!, {r3, r4}\n\t"
82896 #ifdef WOLFSSL_KEIL
82897         "adcs	r3, r3, r5\n\t"
82898 #elif defined(__clang__)
82899         "adcs	r3, r5\n\t"
82900 #else
82901         "adc	r3, r5\n\t"
82902 #endif
82903 #ifdef WOLFSSL_KEIL
82904         "adcs	r4, r4, r5\n\t"
82905 #elif defined(__clang__)
82906         "adcs	r4, r5\n\t"
82907 #else
82908         "adc	r4, r5\n\t"
82909 #endif
82910         "stm	%[r]!, {r3, r4}\n\t"
82911         "ldm	%[b]!, {r3, r4}\n\t"
82912 #ifdef WOLFSSL_KEIL
82913         "adcs	r3, r3, r5\n\t"
82914 #elif defined(__clang__)
82915         "adcs	r3, r5\n\t"
82916 #else
82917         "adc	r3, r5\n\t"
82918 #endif
82919 #ifdef WOLFSSL_KEIL
82920         "adcs	r4, r4, r5\n\t"
82921 #elif defined(__clang__)
82922         "adcs	r4, r5\n\t"
82923 #else
82924         "adc	r4, r5\n\t"
82925 #endif
82926         "stm	%[r]!, {r3, r4}\n\t"
82927         "ldm	%[b]!, {r3, r4}\n\t"
82928 #ifdef WOLFSSL_KEIL
82929         "adcs	r3, r3, r5\n\t"
82930 #elif defined(__clang__)
82931         "adcs	r3, r5\n\t"
82932 #else
82933         "adc	r3, r5\n\t"
82934 #endif
82935 #ifdef WOLFSSL_KEIL
82936         "adcs	r4, r4, r5\n\t"
82937 #elif defined(__clang__)
82938         "adcs	r4, r5\n\t"
82939 #else
82940         "adc	r4, r5\n\t"
82941 #endif
82942         "stm	%[r]!, {r3, r4}\n\t"
82943         "ldm	%[b]!, {r3, r4}\n\t"
82944 #ifdef WOLFSSL_KEIL
82945         "adcs	r3, r3, r5\n\t"
82946 #elif defined(__clang__)
82947         "adcs	r3, r5\n\t"
82948 #else
82949         "adc	r3, r5\n\t"
82950 #endif
82951 #ifdef WOLFSSL_KEIL
82952         "adcs	r4, r4, r5\n\t"
82953 #elif defined(__clang__)
82954         "adcs	r4, r5\n\t"
82955 #else
82956         "adc	r4, r5\n\t"
82957 #endif
82958         "stm	%[r]!, {r3, r4}\n\t"
82959         "ldm	%[b]!, {r3, r4}\n\t"
82960 #ifdef WOLFSSL_KEIL
82961         "adcs	r3, r3, r5\n\t"
82962 #elif defined(__clang__)
82963         "adcs	r3, r5\n\t"
82964 #else
82965         "adc	r3, r5\n\t"
82966 #endif
82967 #ifdef WOLFSSL_KEIL
82968         "adcs	r4, r4, r5\n\t"
82969 #elif defined(__clang__)
82970         "adcs	r4, r5\n\t"
82971 #else
82972         "adc	r4, r5\n\t"
82973 #endif
82974         "stm	%[r]!, {r3, r4}\n\t"
82975         "ldm	%[b]!, {r3, r4}\n\t"
82976 #ifdef WOLFSSL_KEIL
82977         "adcs	r3, r3, r5\n\t"
82978 #elif defined(__clang__)
82979         "adcs	r3, r5\n\t"
82980 #else
82981         "adc	r3, r5\n\t"
82982 #endif
82983 #ifdef WOLFSSL_KEIL
82984         "adcs	r4, r4, r5\n\t"
82985 #elif defined(__clang__)
82986         "adcs	r4, r5\n\t"
82987 #else
82988         "adc	r4, r5\n\t"
82989 #endif
82990         "stm	%[r]!, {r3, r4}\n\t"
82991         "ldm	%[b]!, {r3, r4}\n\t"
82992 #ifdef WOLFSSL_KEIL
82993         "adcs	r3, r3, r5\n\t"
82994 #elif defined(__clang__)
82995         "adcs	r3, r5\n\t"
82996 #else
82997         "adc	r3, r5\n\t"
82998 #endif
82999 #ifdef WOLFSSL_KEIL
83000         "adcs	r4, r4, r5\n\t"
83001 #elif defined(__clang__)
83002         "adcs	r4, r5\n\t"
83003 #else
83004         "adc	r4, r5\n\t"
83005 #endif
83006         "stm	%[r]!, {r3, r4}\n\t"
83007         "ldm	%[b]!, {r3, r4}\n\t"
83008 #ifdef WOLFSSL_KEIL
83009         "adcs	r3, r3, r5\n\t"
83010 #elif defined(__clang__)
83011         "adcs	r3, r5\n\t"
83012 #else
83013         "adc	r3, r5\n\t"
83014 #endif
83015 #ifdef WOLFSSL_KEIL
83016         "adcs	r4, r4, r5\n\t"
83017 #elif defined(__clang__)
83018         "adcs	r4, r5\n\t"
83019 #else
83020         "adc	r4, r5\n\t"
83021 #endif
83022         "stm	%[r]!, {r3, r4}\n\t"
83023         "ldm	%[b]!, {r3, r4}\n\t"
83024 #ifdef WOLFSSL_KEIL
83025         "adcs	r3, r3, r5\n\t"
83026 #elif defined(__clang__)
83027         "adcs	r3, r5\n\t"
83028 #else
83029         "adc	r3, r5\n\t"
83030 #endif
83031 #ifdef WOLFSSL_KEIL
83032         "adcs	r4, r4, r5\n\t"
83033 #elif defined(__clang__)
83034         "adcs	r4, r5\n\t"
83035 #else
83036         "adc	r4, r5\n\t"
83037 #endif
83038         "stm	%[r]!, {r3, r4}\n\t"
83039         "ldm	%[b]!, {r3, r4}\n\t"
83040 #ifdef WOLFSSL_KEIL
83041         "adcs	r3, r3, r5\n\t"
83042 #elif defined(__clang__)
83043         "adcs	r3, r5\n\t"
83044 #else
83045         "adc	r3, r5\n\t"
83046 #endif
83047 #ifdef WOLFSSL_KEIL
83048         "adcs	r4, r4, r5\n\t"
83049 #elif defined(__clang__)
83050         "adcs	r4, r5\n\t"
83051 #else
83052         "adc	r4, r5\n\t"
83053 #endif
83054         "stm	%[r]!, {r3, r4}\n\t"
83055         "ldm	%[b]!, {r3, r4}\n\t"
83056 #ifdef WOLFSSL_KEIL
83057         "adcs	r3, r3, r5\n\t"
83058 #elif defined(__clang__)
83059         "adcs	r3, r5\n\t"
83060 #else
83061         "adc	r3, r5\n\t"
83062 #endif
83063 #ifdef WOLFSSL_KEIL
83064         "adcs	r4, r4, r5\n\t"
83065 #elif defined(__clang__)
83066         "adcs	r4, r5\n\t"
83067 #else
83068         "adc	r4, r5\n\t"
83069 #endif
83070         "stm	%[r]!, {r3, r4}\n\t"
83071         "ldm	%[b]!, {r3, r4}\n\t"
83072 #ifdef WOLFSSL_KEIL
83073         "adcs	r3, r3, r5\n\t"
83074 #elif defined(__clang__)
83075         "adcs	r3, r5\n\t"
83076 #else
83077         "adc	r3, r5\n\t"
83078 #endif
83079 #ifdef WOLFSSL_KEIL
83080         "adcs	r4, r4, r5\n\t"
83081 #elif defined(__clang__)
83082         "adcs	r4, r5\n\t"
83083 #else
83084         "adc	r4, r5\n\t"
83085 #endif
83086         "stm	%[r]!, {r3, r4}\n\t"
83087         "ldm	%[b]!, {r3, r4}\n\t"
83088 #ifdef WOLFSSL_KEIL
83089         "adcs	r3, r3, r5\n\t"
83090 #elif defined(__clang__)
83091         "adcs	r3, r5\n\t"
83092 #else
83093         "adc	r3, r5\n\t"
83094 #endif
83095 #ifdef WOLFSSL_KEIL
83096         "adcs	r4, r4, r5\n\t"
83097 #elif defined(__clang__)
83098         "adcs	r4, r5\n\t"
83099 #else
83100         "adc	r4, r5\n\t"
83101 #endif
83102         "stm	%[r]!, {r3, r4}\n\t"
83103         "ldm	%[b]!, {r3, r4}\n\t"
83104 #ifdef WOLFSSL_KEIL
83105         "adcs	r3, r3, r5\n\t"
83106 #elif defined(__clang__)
83107         "adcs	r3, r5\n\t"
83108 #else
83109         "adc	r3, r5\n\t"
83110 #endif
83111 #ifdef WOLFSSL_KEIL
83112         "adcs	r4, r4, r5\n\t"
83113 #elif defined(__clang__)
83114         "adcs	r4, r5\n\t"
83115 #else
83116         "adc	r4, r5\n\t"
83117 #endif
83118         "stm	%[r]!, {r3, r4}\n\t"
83119         "ldm	%[b]!, {r3, r4}\n\t"
83120 #ifdef WOLFSSL_KEIL
83121         "adcs	r3, r3, r5\n\t"
83122 #elif defined(__clang__)
83123         "adcs	r3, r5\n\t"
83124 #else
83125         "adc	r3, r5\n\t"
83126 #endif
83127 #ifdef WOLFSSL_KEIL
83128         "adcs	r4, r4, r5\n\t"
83129 #elif defined(__clang__)
83130         "adcs	r4, r5\n\t"
83131 #else
83132         "adc	r4, r5\n\t"
83133 #endif
83134         "stm	%[r]!, {r3, r4}\n\t"
83135         "ldm	%[b]!, {r3, r4}\n\t"
83136 #ifdef WOLFSSL_KEIL
83137         "adcs	r3, r3, r5\n\t"
83138 #elif defined(__clang__)
83139         "adcs	r3, r5\n\t"
83140 #else
83141         "adc	r3, r5\n\t"
83142 #endif
83143 #ifdef WOLFSSL_KEIL
83144         "adcs	r4, r4, r5\n\t"
83145 #elif defined(__clang__)
83146         "adcs	r4, r5\n\t"
83147 #else
83148         "adc	r4, r5\n\t"
83149 #endif
83150         "stm	%[r]!, {r3, r4}\n\t"
83151         "ldm	%[b]!, {r3, r4}\n\t"
83152 #ifdef WOLFSSL_KEIL
83153         "adcs	r3, r3, r5\n\t"
83154 #elif defined(__clang__)
83155         "adcs	r3, r5\n\t"
83156 #else
83157         "adc	r3, r5\n\t"
83158 #endif
83159 #ifdef WOLFSSL_KEIL
83160         "adcs	r4, r4, r5\n\t"
83161 #elif defined(__clang__)
83162         "adcs	r4, r5\n\t"
83163 #else
83164         "adc	r4, r5\n\t"
83165 #endif
83166         "stm	%[r]!, {r3, r4}\n\t"
83167         "ldm	%[b]!, {r3, r4}\n\t"
83168 #ifdef WOLFSSL_KEIL
83169         "adcs	r3, r3, r5\n\t"
83170 #elif defined(__clang__)
83171         "adcs	r3, r5\n\t"
83172 #else
83173         "adc	r3, r5\n\t"
83174 #endif
83175 #ifdef WOLFSSL_KEIL
83176         "adcs	r4, r4, r5\n\t"
83177 #elif defined(__clang__)
83178         "adcs	r4, r5\n\t"
83179 #else
83180         "adc	r4, r5\n\t"
83181 #endif
83182         "stm	%[r]!, {r3, r4}\n\t"
83183         "ldm	%[b]!, {r3, r4}\n\t"
83184 #ifdef WOLFSSL_KEIL
83185         "adcs	r3, r3, r5\n\t"
83186 #elif defined(__clang__)
83187         "adcs	r3, r5\n\t"
83188 #else
83189         "adc	r3, r5\n\t"
83190 #endif
83191 #ifdef WOLFSSL_KEIL
83192         "adcs	r4, r4, r5\n\t"
83193 #elif defined(__clang__)
83194         "adcs	r4, r5\n\t"
83195 #else
83196         "adc	r4, r5\n\t"
83197 #endif
83198         "stm	%[r]!, {r3, r4}\n\t"
83199         "ldm	%[b]!, {r3, r4}\n\t"
83200 #ifdef WOLFSSL_KEIL
83201         "adcs	r3, r3, r5\n\t"
83202 #elif defined(__clang__)
83203         "adcs	r3, r5\n\t"
83204 #else
83205         "adc	r3, r5\n\t"
83206 #endif
83207 #ifdef WOLFSSL_KEIL
83208         "adcs	r4, r4, r5\n\t"
83209 #elif defined(__clang__)
83210         "adcs	r4, r5\n\t"
83211 #else
83212         "adc	r4, r5\n\t"
83213 #endif
83214         "stm	%[r]!, {r3, r4}\n\t"
83215         "ldm	%[b]!, {r3, r4}\n\t"
83216 #ifdef WOLFSSL_KEIL
83217         "adcs	r3, r3, r5\n\t"
83218 #elif defined(__clang__)
83219         "adcs	r3, r5\n\t"
83220 #else
83221         "adc	r3, r5\n\t"
83222 #endif
83223 #ifdef WOLFSSL_KEIL
83224         "adcs	r4, r4, r5\n\t"
83225 #elif defined(__clang__)
83226         "adcs	r4, r5\n\t"
83227 #else
83228         "adc	r4, r5\n\t"
83229 #endif
83230         "stm	%[r]!, {r3, r4}\n\t"
83231         "ldm	%[b]!, {r3, r4}\n\t"
83232 #ifdef WOLFSSL_KEIL
83233         "adcs	r3, r3, r5\n\t"
83234 #elif defined(__clang__)
83235         "adcs	r3, r5\n\t"
83236 #else
83237         "adc	r3, r5\n\t"
83238 #endif
83239 #ifdef WOLFSSL_KEIL
83240         "adcs	r4, r4, r5\n\t"
83241 #elif defined(__clang__)
83242         "adcs	r4, r5\n\t"
83243 #else
83244         "adc	r4, r5\n\t"
83245 #endif
83246         "stm	%[r]!, {r3, r4}\n\t"
83247         "movs	%[r], #0\n\t"
83248 #ifdef WOLFSSL_KEIL
83249         "adcs	%[r], %[r], %[r]\n\t"
83250 #elif defined(__clang__)
83251         "adcs	%[r], %[r]\n\t"
83252 #else
83253         "adc	%[r], %[r]\n\t"
83254 #endif
83255         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
83256         :
83257         : "memory", "r3", "r4", "r5"
83258     );
83259     return (uint32_t)(size_t)r;
83260 }
83261 
83262 /* Sub b from a into a. (a -= b)
83263  *
83264  * a  A single precision integer.
83265  * b  A single precision integer.
83266  */
sp_4096_sub_in_place_128(sp_digit * a,const sp_digit * b)83267 SP_NOINLINE static sp_digit sp_4096_sub_in_place_128(sp_digit* a,
83268         const sp_digit* b)
83269 {
83270     __asm__ __volatile__ (
83271         "ldm	%[b]!, {r4, r5}\n\t"
83272         "ldr	r2, [%[a]]\n\t"
83273         "ldr	r3, [%[a], #4]\n\t"
83274 #if defined(__clang__) || defined(WOLFSSL_KEIL)
83275         "subs	r2, r2, r4\n\t"
83276 #else
83277         "sub	r2, r2, r4\n\t"
83278 #endif
83279 #ifdef WOLFSSL_KEIL
83280         "sbcs	r3, r3, r5\n\t"
83281 #elif defined(__clang__)
83282         "sbcs	r3, r5\n\t"
83283 #else
83284         "sbc	r3, r5\n\t"
83285 #endif
83286         "stm	%[a]!, {r2, r3}\n\t"
83287         "ldm	%[b]!, {r4, r5}\n\t"
83288         "ldr	r2, [%[a]]\n\t"
83289         "ldr	r3, [%[a], #4]\n\t"
83290 #ifdef WOLFSSL_KEIL
83291         "sbcs	r2, r2, r4\n\t"
83292 #elif defined(__clang__)
83293         "sbcs	r2, r4\n\t"
83294 #else
83295         "sbc	r2, r4\n\t"
83296 #endif
83297 #ifdef WOLFSSL_KEIL
83298         "sbcs	r3, r3, r5\n\t"
83299 #elif defined(__clang__)
83300         "sbcs	r3, r5\n\t"
83301 #else
83302         "sbc	r3, r5\n\t"
83303 #endif
83304         "stm	%[a]!, {r2, r3}\n\t"
83305         "ldm	%[b]!, {r4, r5}\n\t"
83306         "ldr	r2, [%[a]]\n\t"
83307         "ldr	r3, [%[a], #4]\n\t"
83308 #ifdef WOLFSSL_KEIL
83309         "sbcs	r2, r2, r4\n\t"
83310 #elif defined(__clang__)
83311         "sbcs	r2, r4\n\t"
83312 #else
83313         "sbc	r2, r4\n\t"
83314 #endif
83315 #ifdef WOLFSSL_KEIL
83316         "sbcs	r3, r3, r5\n\t"
83317 #elif defined(__clang__)
83318         "sbcs	r3, r5\n\t"
83319 #else
83320         "sbc	r3, r5\n\t"
83321 #endif
83322         "stm	%[a]!, {r2, r3}\n\t"
83323         "ldm	%[b]!, {r4, r5}\n\t"
83324         "ldr	r2, [%[a]]\n\t"
83325         "ldr	r3, [%[a], #4]\n\t"
83326 #ifdef WOLFSSL_KEIL
83327         "sbcs	r2, r2, r4\n\t"
83328 #elif defined(__clang__)
83329         "sbcs	r2, r4\n\t"
83330 #else
83331         "sbc	r2, r4\n\t"
83332 #endif
83333 #ifdef WOLFSSL_KEIL
83334         "sbcs	r3, r3, r5\n\t"
83335 #elif defined(__clang__)
83336         "sbcs	r3, r5\n\t"
83337 #else
83338         "sbc	r3, r5\n\t"
83339 #endif
83340         "stm	%[a]!, {r2, r3}\n\t"
83341         "ldm	%[b]!, {r4, r5}\n\t"
83342         "ldr	r2, [%[a]]\n\t"
83343         "ldr	r3, [%[a], #4]\n\t"
83344 #ifdef WOLFSSL_KEIL
83345         "sbcs	r2, r2, r4\n\t"
83346 #elif defined(__clang__)
83347         "sbcs	r2, r4\n\t"
83348 #else
83349         "sbc	r2, r4\n\t"
83350 #endif
83351 #ifdef WOLFSSL_KEIL
83352         "sbcs	r3, r3, r5\n\t"
83353 #elif defined(__clang__)
83354         "sbcs	r3, r5\n\t"
83355 #else
83356         "sbc	r3, r5\n\t"
83357 #endif
83358         "stm	%[a]!, {r2, r3}\n\t"
83359         "ldm	%[b]!, {r4, r5}\n\t"
83360         "ldr	r2, [%[a]]\n\t"
83361         "ldr	r3, [%[a], #4]\n\t"
83362 #ifdef WOLFSSL_KEIL
83363         "sbcs	r2, r2, r4\n\t"
83364 #elif defined(__clang__)
83365         "sbcs	r2, r4\n\t"
83366 #else
83367         "sbc	r2, r4\n\t"
83368 #endif
83369 #ifdef WOLFSSL_KEIL
83370         "sbcs	r3, r3, r5\n\t"
83371 #elif defined(__clang__)
83372         "sbcs	r3, r5\n\t"
83373 #else
83374         "sbc	r3, r5\n\t"
83375 #endif
83376         "stm	%[a]!, {r2, r3}\n\t"
83377         "ldm	%[b]!, {r4, r5}\n\t"
83378         "ldr	r2, [%[a]]\n\t"
83379         "ldr	r3, [%[a], #4]\n\t"
83380 #ifdef WOLFSSL_KEIL
83381         "sbcs	r2, r2, r4\n\t"
83382 #elif defined(__clang__)
83383         "sbcs	r2, r4\n\t"
83384 #else
83385         "sbc	r2, r4\n\t"
83386 #endif
83387 #ifdef WOLFSSL_KEIL
83388         "sbcs	r3, r3, r5\n\t"
83389 #elif defined(__clang__)
83390         "sbcs	r3, r5\n\t"
83391 #else
83392         "sbc	r3, r5\n\t"
83393 #endif
83394         "stm	%[a]!, {r2, r3}\n\t"
83395         "ldm	%[b]!, {r4, r5}\n\t"
83396         "ldr	r2, [%[a]]\n\t"
83397         "ldr	r3, [%[a], #4]\n\t"
83398 #ifdef WOLFSSL_KEIL
83399         "sbcs	r2, r2, r4\n\t"
83400 #elif defined(__clang__)
83401         "sbcs	r2, r4\n\t"
83402 #else
83403         "sbc	r2, r4\n\t"
83404 #endif
83405 #ifdef WOLFSSL_KEIL
83406         "sbcs	r3, r3, r5\n\t"
83407 #elif defined(__clang__)
83408         "sbcs	r3, r5\n\t"
83409 #else
83410         "sbc	r3, r5\n\t"
83411 #endif
83412         "stm	%[a]!, {r2, r3}\n\t"
83413         "ldm	%[b]!, {r4, r5}\n\t"
83414         "ldr	r2, [%[a]]\n\t"
83415         "ldr	r3, [%[a], #4]\n\t"
83416 #ifdef WOLFSSL_KEIL
83417         "sbcs	r2, r2, r4\n\t"
83418 #elif defined(__clang__)
83419         "sbcs	r2, r4\n\t"
83420 #else
83421         "sbc	r2, r4\n\t"
83422 #endif
83423 #ifdef WOLFSSL_KEIL
83424         "sbcs	r3, r3, r5\n\t"
83425 #elif defined(__clang__)
83426         "sbcs	r3, r5\n\t"
83427 #else
83428         "sbc	r3, r5\n\t"
83429 #endif
83430         "stm	%[a]!, {r2, r3}\n\t"
83431         "ldm	%[b]!, {r4, r5}\n\t"
83432         "ldr	r2, [%[a]]\n\t"
83433         "ldr	r3, [%[a], #4]\n\t"
83434 #ifdef WOLFSSL_KEIL
83435         "sbcs	r2, r2, r4\n\t"
83436 #elif defined(__clang__)
83437         "sbcs	r2, r4\n\t"
83438 #else
83439         "sbc	r2, r4\n\t"
83440 #endif
83441 #ifdef WOLFSSL_KEIL
83442         "sbcs	r3, r3, r5\n\t"
83443 #elif defined(__clang__)
83444         "sbcs	r3, r5\n\t"
83445 #else
83446         "sbc	r3, r5\n\t"
83447 #endif
83448         "stm	%[a]!, {r2, r3}\n\t"
83449         "ldm	%[b]!, {r4, r5}\n\t"
83450         "ldr	r2, [%[a]]\n\t"
83451         "ldr	r3, [%[a], #4]\n\t"
83452 #ifdef WOLFSSL_KEIL
83453         "sbcs	r2, r2, r4\n\t"
83454 #elif defined(__clang__)
83455         "sbcs	r2, r4\n\t"
83456 #else
83457         "sbc	r2, r4\n\t"
83458 #endif
83459 #ifdef WOLFSSL_KEIL
83460         "sbcs	r3, r3, r5\n\t"
83461 #elif defined(__clang__)
83462         "sbcs	r3, r5\n\t"
83463 #else
83464         "sbc	r3, r5\n\t"
83465 #endif
83466         "stm	%[a]!, {r2, r3}\n\t"
83467         "ldm	%[b]!, {r4, r5}\n\t"
83468         "ldr	r2, [%[a]]\n\t"
83469         "ldr	r3, [%[a], #4]\n\t"
83470 #ifdef WOLFSSL_KEIL
83471         "sbcs	r2, r2, r4\n\t"
83472 #elif defined(__clang__)
83473         "sbcs	r2, r4\n\t"
83474 #else
83475         "sbc	r2, r4\n\t"
83476 #endif
83477 #ifdef WOLFSSL_KEIL
83478         "sbcs	r3, r3, r5\n\t"
83479 #elif defined(__clang__)
83480         "sbcs	r3, r5\n\t"
83481 #else
83482         "sbc	r3, r5\n\t"
83483 #endif
83484         "stm	%[a]!, {r2, r3}\n\t"
83485         "ldm	%[b]!, {r4, r5}\n\t"
83486         "ldr	r2, [%[a]]\n\t"
83487         "ldr	r3, [%[a], #4]\n\t"
83488 #ifdef WOLFSSL_KEIL
83489         "sbcs	r2, r2, r4\n\t"
83490 #elif defined(__clang__)
83491         "sbcs	r2, r4\n\t"
83492 #else
83493         "sbc	r2, r4\n\t"
83494 #endif
83495 #ifdef WOLFSSL_KEIL
83496         "sbcs	r3, r3, r5\n\t"
83497 #elif defined(__clang__)
83498         "sbcs	r3, r5\n\t"
83499 #else
83500         "sbc	r3, r5\n\t"
83501 #endif
83502         "stm	%[a]!, {r2, r3}\n\t"
83503         "ldm	%[b]!, {r4, r5}\n\t"
83504         "ldr	r2, [%[a]]\n\t"
83505         "ldr	r3, [%[a], #4]\n\t"
83506 #ifdef WOLFSSL_KEIL
83507         "sbcs	r2, r2, r4\n\t"
83508 #elif defined(__clang__)
83509         "sbcs	r2, r4\n\t"
83510 #else
83511         "sbc	r2, r4\n\t"
83512 #endif
83513 #ifdef WOLFSSL_KEIL
83514         "sbcs	r3, r3, r5\n\t"
83515 #elif defined(__clang__)
83516         "sbcs	r3, r5\n\t"
83517 #else
83518         "sbc	r3, r5\n\t"
83519 #endif
83520         "stm	%[a]!, {r2, r3}\n\t"
83521         "ldm	%[b]!, {r4, r5}\n\t"
83522         "ldr	r2, [%[a]]\n\t"
83523         "ldr	r3, [%[a], #4]\n\t"
83524 #ifdef WOLFSSL_KEIL
83525         "sbcs	r2, r2, r4\n\t"
83526 #elif defined(__clang__)
83527         "sbcs	r2, r4\n\t"
83528 #else
83529         "sbc	r2, r4\n\t"
83530 #endif
83531 #ifdef WOLFSSL_KEIL
83532         "sbcs	r3, r3, r5\n\t"
83533 #elif defined(__clang__)
83534         "sbcs	r3, r5\n\t"
83535 #else
83536         "sbc	r3, r5\n\t"
83537 #endif
83538         "stm	%[a]!, {r2, r3}\n\t"
83539         "ldm	%[b]!, {r4, r5}\n\t"
83540         "ldr	r2, [%[a]]\n\t"
83541         "ldr	r3, [%[a], #4]\n\t"
83542 #ifdef WOLFSSL_KEIL
83543         "sbcs	r2, r2, r4\n\t"
83544 #elif defined(__clang__)
83545         "sbcs	r2, r4\n\t"
83546 #else
83547         "sbc	r2, r4\n\t"
83548 #endif
83549 #ifdef WOLFSSL_KEIL
83550         "sbcs	r3, r3, r5\n\t"
83551 #elif defined(__clang__)
83552         "sbcs	r3, r5\n\t"
83553 #else
83554         "sbc	r3, r5\n\t"
83555 #endif
83556         "stm	%[a]!, {r2, r3}\n\t"
83557         "ldm	%[b]!, {r4, r5}\n\t"
83558         "ldr	r2, [%[a]]\n\t"
83559         "ldr	r3, [%[a], #4]\n\t"
83560 #ifdef WOLFSSL_KEIL
83561         "sbcs	r2, r2, r4\n\t"
83562 #elif defined(__clang__)
83563         "sbcs	r2, r4\n\t"
83564 #else
83565         "sbc	r2, r4\n\t"
83566 #endif
83567 #ifdef WOLFSSL_KEIL
83568         "sbcs	r3, r3, r5\n\t"
83569 #elif defined(__clang__)
83570         "sbcs	r3, r5\n\t"
83571 #else
83572         "sbc	r3, r5\n\t"
83573 #endif
83574         "stm	%[a]!, {r2, r3}\n\t"
83575         "ldm	%[b]!, {r4, r5}\n\t"
83576         "ldr	r2, [%[a]]\n\t"
83577         "ldr	r3, [%[a], #4]\n\t"
83578 #ifdef WOLFSSL_KEIL
83579         "sbcs	r2, r2, r4\n\t"
83580 #elif defined(__clang__)
83581         "sbcs	r2, r4\n\t"
83582 #else
83583         "sbc	r2, r4\n\t"
83584 #endif
83585 #ifdef WOLFSSL_KEIL
83586         "sbcs	r3, r3, r5\n\t"
83587 #elif defined(__clang__)
83588         "sbcs	r3, r5\n\t"
83589 #else
83590         "sbc	r3, r5\n\t"
83591 #endif
83592         "stm	%[a]!, {r2, r3}\n\t"
83593         "ldm	%[b]!, {r4, r5}\n\t"
83594         "ldr	r2, [%[a]]\n\t"
83595         "ldr	r3, [%[a], #4]\n\t"
83596 #ifdef WOLFSSL_KEIL
83597         "sbcs	r2, r2, r4\n\t"
83598 #elif defined(__clang__)
83599         "sbcs	r2, r4\n\t"
83600 #else
83601         "sbc	r2, r4\n\t"
83602 #endif
83603 #ifdef WOLFSSL_KEIL
83604         "sbcs	r3, r3, r5\n\t"
83605 #elif defined(__clang__)
83606         "sbcs	r3, r5\n\t"
83607 #else
83608         "sbc	r3, r5\n\t"
83609 #endif
83610         "stm	%[a]!, {r2, r3}\n\t"
83611         "ldm	%[b]!, {r4, r5}\n\t"
83612         "ldr	r2, [%[a]]\n\t"
83613         "ldr	r3, [%[a], #4]\n\t"
83614 #ifdef WOLFSSL_KEIL
83615         "sbcs	r2, r2, r4\n\t"
83616 #elif defined(__clang__)
83617         "sbcs	r2, r4\n\t"
83618 #else
83619         "sbc	r2, r4\n\t"
83620 #endif
83621 #ifdef WOLFSSL_KEIL
83622         "sbcs	r3, r3, r5\n\t"
83623 #elif defined(__clang__)
83624         "sbcs	r3, r5\n\t"
83625 #else
83626         "sbc	r3, r5\n\t"
83627 #endif
83628         "stm	%[a]!, {r2, r3}\n\t"
83629         "ldm	%[b]!, {r4, r5}\n\t"
83630         "ldr	r2, [%[a]]\n\t"
83631         "ldr	r3, [%[a], #4]\n\t"
83632 #ifdef WOLFSSL_KEIL
83633         "sbcs	r2, r2, r4\n\t"
83634 #elif defined(__clang__)
83635         "sbcs	r2, r4\n\t"
83636 #else
83637         "sbc	r2, r4\n\t"
83638 #endif
83639 #ifdef WOLFSSL_KEIL
83640         "sbcs	r3, r3, r5\n\t"
83641 #elif defined(__clang__)
83642         "sbcs	r3, r5\n\t"
83643 #else
83644         "sbc	r3, r5\n\t"
83645 #endif
83646         "stm	%[a]!, {r2, r3}\n\t"
83647         "ldm	%[b]!, {r4, r5}\n\t"
83648         "ldr	r2, [%[a]]\n\t"
83649         "ldr	r3, [%[a], #4]\n\t"
83650 #ifdef WOLFSSL_KEIL
83651         "sbcs	r2, r2, r4\n\t"
83652 #elif defined(__clang__)
83653         "sbcs	r2, r4\n\t"
83654 #else
83655         "sbc	r2, r4\n\t"
83656 #endif
83657 #ifdef WOLFSSL_KEIL
83658         "sbcs	r3, r3, r5\n\t"
83659 #elif defined(__clang__)
83660         "sbcs	r3, r5\n\t"
83661 #else
83662         "sbc	r3, r5\n\t"
83663 #endif
83664         "stm	%[a]!, {r2, r3}\n\t"
83665         "ldm	%[b]!, {r4, r5}\n\t"
83666         "ldr	r2, [%[a]]\n\t"
83667         "ldr	r3, [%[a], #4]\n\t"
83668 #ifdef WOLFSSL_KEIL
83669         "sbcs	r2, r2, r4\n\t"
83670 #elif defined(__clang__)
83671         "sbcs	r2, r4\n\t"
83672 #else
83673         "sbc	r2, r4\n\t"
83674 #endif
83675 #ifdef WOLFSSL_KEIL
83676         "sbcs	r3, r3, r5\n\t"
83677 #elif defined(__clang__)
83678         "sbcs	r3, r5\n\t"
83679 #else
83680         "sbc	r3, r5\n\t"
83681 #endif
83682         "stm	%[a]!, {r2, r3}\n\t"
83683         "ldm	%[b]!, {r4, r5}\n\t"
83684         "ldr	r2, [%[a]]\n\t"
83685         "ldr	r3, [%[a], #4]\n\t"
83686 #ifdef WOLFSSL_KEIL
83687         "sbcs	r2, r2, r4\n\t"
83688 #elif defined(__clang__)
83689         "sbcs	r2, r4\n\t"
83690 #else
83691         "sbc	r2, r4\n\t"
83692 #endif
83693 #ifdef WOLFSSL_KEIL
83694         "sbcs	r3, r3, r5\n\t"
83695 #elif defined(__clang__)
83696         "sbcs	r3, r5\n\t"
83697 #else
83698         "sbc	r3, r5\n\t"
83699 #endif
83700         "stm	%[a]!, {r2, r3}\n\t"
83701         "ldm	%[b]!, {r4, r5}\n\t"
83702         "ldr	r2, [%[a]]\n\t"
83703         "ldr	r3, [%[a], #4]\n\t"
83704 #ifdef WOLFSSL_KEIL
83705         "sbcs	r2, r2, r4\n\t"
83706 #elif defined(__clang__)
83707         "sbcs	r2, r4\n\t"
83708 #else
83709         "sbc	r2, r4\n\t"
83710 #endif
83711 #ifdef WOLFSSL_KEIL
83712         "sbcs	r3, r3, r5\n\t"
83713 #elif defined(__clang__)
83714         "sbcs	r3, r5\n\t"
83715 #else
83716         "sbc	r3, r5\n\t"
83717 #endif
83718         "stm	%[a]!, {r2, r3}\n\t"
83719         "ldm	%[b]!, {r4, r5}\n\t"
83720         "ldr	r2, [%[a]]\n\t"
83721         "ldr	r3, [%[a], #4]\n\t"
83722 #ifdef WOLFSSL_KEIL
83723         "sbcs	r2, r2, r4\n\t"
83724 #elif defined(__clang__)
83725         "sbcs	r2, r4\n\t"
83726 #else
83727         "sbc	r2, r4\n\t"
83728 #endif
83729 #ifdef WOLFSSL_KEIL
83730         "sbcs	r3, r3, r5\n\t"
83731 #elif defined(__clang__)
83732         "sbcs	r3, r5\n\t"
83733 #else
83734         "sbc	r3, r5\n\t"
83735 #endif
83736         "stm	%[a]!, {r2, r3}\n\t"
83737         "ldm	%[b]!, {r4, r5}\n\t"
83738         "ldr	r2, [%[a]]\n\t"
83739         "ldr	r3, [%[a], #4]\n\t"
83740 #ifdef WOLFSSL_KEIL
83741         "sbcs	r2, r2, r4\n\t"
83742 #elif defined(__clang__)
83743         "sbcs	r2, r4\n\t"
83744 #else
83745         "sbc	r2, r4\n\t"
83746 #endif
83747 #ifdef WOLFSSL_KEIL
83748         "sbcs	r3, r3, r5\n\t"
83749 #elif defined(__clang__)
83750         "sbcs	r3, r5\n\t"
83751 #else
83752         "sbc	r3, r5\n\t"
83753 #endif
83754         "stm	%[a]!, {r2, r3}\n\t"
83755         "ldm	%[b]!, {r4, r5}\n\t"
83756         "ldr	r2, [%[a]]\n\t"
83757         "ldr	r3, [%[a], #4]\n\t"
83758 #ifdef WOLFSSL_KEIL
83759         "sbcs	r2, r2, r4\n\t"
83760 #elif defined(__clang__)
83761         "sbcs	r2, r4\n\t"
83762 #else
83763         "sbc	r2, r4\n\t"
83764 #endif
83765 #ifdef WOLFSSL_KEIL
83766         "sbcs	r3, r3, r5\n\t"
83767 #elif defined(__clang__)
83768         "sbcs	r3, r5\n\t"
83769 #else
83770         "sbc	r3, r5\n\t"
83771 #endif
83772         "stm	%[a]!, {r2, r3}\n\t"
83773         "ldm	%[b]!, {r4, r5}\n\t"
83774         "ldr	r2, [%[a]]\n\t"
83775         "ldr	r3, [%[a], #4]\n\t"
83776 #ifdef WOLFSSL_KEIL
83777         "sbcs	r2, r2, r4\n\t"
83778 #elif defined(__clang__)
83779         "sbcs	r2, r4\n\t"
83780 #else
83781         "sbc	r2, r4\n\t"
83782 #endif
83783 #ifdef WOLFSSL_KEIL
83784         "sbcs	r3, r3, r5\n\t"
83785 #elif defined(__clang__)
83786         "sbcs	r3, r5\n\t"
83787 #else
83788         "sbc	r3, r5\n\t"
83789 #endif
83790         "stm	%[a]!, {r2, r3}\n\t"
83791         "ldm	%[b]!, {r4, r5}\n\t"
83792         "ldr	r2, [%[a]]\n\t"
83793         "ldr	r3, [%[a], #4]\n\t"
83794 #ifdef WOLFSSL_KEIL
83795         "sbcs	r2, r2, r4\n\t"
83796 #elif defined(__clang__)
83797         "sbcs	r2, r4\n\t"
83798 #else
83799         "sbc	r2, r4\n\t"
83800 #endif
83801 #ifdef WOLFSSL_KEIL
83802         "sbcs	r3, r3, r5\n\t"
83803 #elif defined(__clang__)
83804         "sbcs	r3, r5\n\t"
83805 #else
83806         "sbc	r3, r5\n\t"
83807 #endif
83808         "stm	%[a]!, {r2, r3}\n\t"
83809         "ldm	%[b]!, {r4, r5}\n\t"
83810         "ldr	r2, [%[a]]\n\t"
83811         "ldr	r3, [%[a], #4]\n\t"
83812 #ifdef WOLFSSL_KEIL
83813         "sbcs	r2, r2, r4\n\t"
83814 #elif defined(__clang__)
83815         "sbcs	r2, r4\n\t"
83816 #else
83817         "sbc	r2, r4\n\t"
83818 #endif
83819 #ifdef WOLFSSL_KEIL
83820         "sbcs	r3, r3, r5\n\t"
83821 #elif defined(__clang__)
83822         "sbcs	r3, r5\n\t"
83823 #else
83824         "sbc	r3, r5\n\t"
83825 #endif
83826         "stm	%[a]!, {r2, r3}\n\t"
83827         "ldm	%[b]!, {r4, r5}\n\t"
83828         "ldr	r2, [%[a]]\n\t"
83829         "ldr	r3, [%[a], #4]\n\t"
83830 #ifdef WOLFSSL_KEIL
83831         "sbcs	r2, r2, r4\n\t"
83832 #elif defined(__clang__)
83833         "sbcs	r2, r4\n\t"
83834 #else
83835         "sbc	r2, r4\n\t"
83836 #endif
83837 #ifdef WOLFSSL_KEIL
83838         "sbcs	r3, r3, r5\n\t"
83839 #elif defined(__clang__)
83840         "sbcs	r3, r5\n\t"
83841 #else
83842         "sbc	r3, r5\n\t"
83843 #endif
83844         "stm	%[a]!, {r2, r3}\n\t"
83845         "ldm	%[b]!, {r4, r5}\n\t"
83846         "ldr	r2, [%[a]]\n\t"
83847         "ldr	r3, [%[a], #4]\n\t"
83848 #ifdef WOLFSSL_KEIL
83849         "sbcs	r2, r2, r4\n\t"
83850 #elif defined(__clang__)
83851         "sbcs	r2, r4\n\t"
83852 #else
83853         "sbc	r2, r4\n\t"
83854 #endif
83855 #ifdef WOLFSSL_KEIL
83856         "sbcs	r3, r3, r5\n\t"
83857 #elif defined(__clang__)
83858         "sbcs	r3, r5\n\t"
83859 #else
83860         "sbc	r3, r5\n\t"
83861 #endif
83862         "stm	%[a]!, {r2, r3}\n\t"
83863         "ldm	%[b]!, {r4, r5}\n\t"
83864         "ldr	r2, [%[a]]\n\t"
83865         "ldr	r3, [%[a], #4]\n\t"
83866 #ifdef WOLFSSL_KEIL
83867         "sbcs	r2, r2, r4\n\t"
83868 #elif defined(__clang__)
83869         "sbcs	r2, r4\n\t"
83870 #else
83871         "sbc	r2, r4\n\t"
83872 #endif
83873 #ifdef WOLFSSL_KEIL
83874         "sbcs	r3, r3, r5\n\t"
83875 #elif defined(__clang__)
83876         "sbcs	r3, r5\n\t"
83877 #else
83878         "sbc	r3, r5\n\t"
83879 #endif
83880         "stm	%[a]!, {r2, r3}\n\t"
83881         "ldm	%[b]!, {r4, r5}\n\t"
83882         "ldr	r2, [%[a]]\n\t"
83883         "ldr	r3, [%[a], #4]\n\t"
83884 #ifdef WOLFSSL_KEIL
83885         "sbcs	r2, r2, r4\n\t"
83886 #elif defined(__clang__)
83887         "sbcs	r2, r4\n\t"
83888 #else
83889         "sbc	r2, r4\n\t"
83890 #endif
83891 #ifdef WOLFSSL_KEIL
83892         "sbcs	r3, r3, r5\n\t"
83893 #elif defined(__clang__)
83894         "sbcs	r3, r5\n\t"
83895 #else
83896         "sbc	r3, r5\n\t"
83897 #endif
83898         "stm	%[a]!, {r2, r3}\n\t"
83899         "ldm	%[b]!, {r4, r5}\n\t"
83900         "ldr	r2, [%[a]]\n\t"
83901         "ldr	r3, [%[a], #4]\n\t"
83902 #ifdef WOLFSSL_KEIL
83903         "sbcs	r2, r2, r4\n\t"
83904 #elif defined(__clang__)
83905         "sbcs	r2, r4\n\t"
83906 #else
83907         "sbc	r2, r4\n\t"
83908 #endif
83909 #ifdef WOLFSSL_KEIL
83910         "sbcs	r3, r3, r5\n\t"
83911 #elif defined(__clang__)
83912         "sbcs	r3, r5\n\t"
83913 #else
83914         "sbc	r3, r5\n\t"
83915 #endif
83916         "stm	%[a]!, {r2, r3}\n\t"
83917         "ldm	%[b]!, {r4, r5}\n\t"
83918         "ldr	r2, [%[a]]\n\t"
83919         "ldr	r3, [%[a], #4]\n\t"
83920 #ifdef WOLFSSL_KEIL
83921         "sbcs	r2, r2, r4\n\t"
83922 #elif defined(__clang__)
83923         "sbcs	r2, r4\n\t"
83924 #else
83925         "sbc	r2, r4\n\t"
83926 #endif
83927 #ifdef WOLFSSL_KEIL
83928         "sbcs	r3, r3, r5\n\t"
83929 #elif defined(__clang__)
83930         "sbcs	r3, r5\n\t"
83931 #else
83932         "sbc	r3, r5\n\t"
83933 #endif
83934         "stm	%[a]!, {r2, r3}\n\t"
83935         "ldm	%[b]!, {r4, r5}\n\t"
83936         "ldr	r2, [%[a]]\n\t"
83937         "ldr	r3, [%[a], #4]\n\t"
83938 #ifdef WOLFSSL_KEIL
83939         "sbcs	r2, r2, r4\n\t"
83940 #elif defined(__clang__)
83941         "sbcs	r2, r4\n\t"
83942 #else
83943         "sbc	r2, r4\n\t"
83944 #endif
83945 #ifdef WOLFSSL_KEIL
83946         "sbcs	r3, r3, r5\n\t"
83947 #elif defined(__clang__)
83948         "sbcs	r3, r5\n\t"
83949 #else
83950         "sbc	r3, r5\n\t"
83951 #endif
83952         "stm	%[a]!, {r2, r3}\n\t"
83953         "ldm	%[b]!, {r4, r5}\n\t"
83954         "ldr	r2, [%[a]]\n\t"
83955         "ldr	r3, [%[a], #4]\n\t"
83956 #ifdef WOLFSSL_KEIL
83957         "sbcs	r2, r2, r4\n\t"
83958 #elif defined(__clang__)
83959         "sbcs	r2, r4\n\t"
83960 #else
83961         "sbc	r2, r4\n\t"
83962 #endif
83963 #ifdef WOLFSSL_KEIL
83964         "sbcs	r3, r3, r5\n\t"
83965 #elif defined(__clang__)
83966         "sbcs	r3, r5\n\t"
83967 #else
83968         "sbc	r3, r5\n\t"
83969 #endif
83970         "stm	%[a]!, {r2, r3}\n\t"
83971         "ldm	%[b]!, {r4, r5}\n\t"
83972         "ldr	r2, [%[a]]\n\t"
83973         "ldr	r3, [%[a], #4]\n\t"
83974 #ifdef WOLFSSL_KEIL
83975         "sbcs	r2, r2, r4\n\t"
83976 #elif defined(__clang__)
83977         "sbcs	r2, r4\n\t"
83978 #else
83979         "sbc	r2, r4\n\t"
83980 #endif
83981 #ifdef WOLFSSL_KEIL
83982         "sbcs	r3, r3, r5\n\t"
83983 #elif defined(__clang__)
83984         "sbcs	r3, r5\n\t"
83985 #else
83986         "sbc	r3, r5\n\t"
83987 #endif
83988         "stm	%[a]!, {r2, r3}\n\t"
83989         "ldm	%[b]!, {r4, r5}\n\t"
83990         "ldr	r2, [%[a]]\n\t"
83991         "ldr	r3, [%[a], #4]\n\t"
83992 #ifdef WOLFSSL_KEIL
83993         "sbcs	r2, r2, r4\n\t"
83994 #elif defined(__clang__)
83995         "sbcs	r2, r4\n\t"
83996 #else
83997         "sbc	r2, r4\n\t"
83998 #endif
83999 #ifdef WOLFSSL_KEIL
84000         "sbcs	r3, r3, r5\n\t"
84001 #elif defined(__clang__)
84002         "sbcs	r3, r5\n\t"
84003 #else
84004         "sbc	r3, r5\n\t"
84005 #endif
84006         "stm	%[a]!, {r2, r3}\n\t"
84007         "ldm	%[b]!, {r4, r5}\n\t"
84008         "ldr	r2, [%[a]]\n\t"
84009         "ldr	r3, [%[a], #4]\n\t"
84010 #ifdef WOLFSSL_KEIL
84011         "sbcs	r2, r2, r4\n\t"
84012 #elif defined(__clang__)
84013         "sbcs	r2, r4\n\t"
84014 #else
84015         "sbc	r2, r4\n\t"
84016 #endif
84017 #ifdef WOLFSSL_KEIL
84018         "sbcs	r3, r3, r5\n\t"
84019 #elif defined(__clang__)
84020         "sbcs	r3, r5\n\t"
84021 #else
84022         "sbc	r3, r5\n\t"
84023 #endif
84024         "stm	%[a]!, {r2, r3}\n\t"
84025         "ldm	%[b]!, {r4, r5}\n\t"
84026         "ldr	r2, [%[a]]\n\t"
84027         "ldr	r3, [%[a], #4]\n\t"
84028 #ifdef WOLFSSL_KEIL
84029         "sbcs	r2, r2, r4\n\t"
84030 #elif defined(__clang__)
84031         "sbcs	r2, r4\n\t"
84032 #else
84033         "sbc	r2, r4\n\t"
84034 #endif
84035 #ifdef WOLFSSL_KEIL
84036         "sbcs	r3, r3, r5\n\t"
84037 #elif defined(__clang__)
84038         "sbcs	r3, r5\n\t"
84039 #else
84040         "sbc	r3, r5\n\t"
84041 #endif
84042         "stm	%[a]!, {r2, r3}\n\t"
84043         "ldm	%[b]!, {r4, r5}\n\t"
84044         "ldr	r2, [%[a]]\n\t"
84045         "ldr	r3, [%[a], #4]\n\t"
84046 #ifdef WOLFSSL_KEIL
84047         "sbcs	r2, r2, r4\n\t"
84048 #elif defined(__clang__)
84049         "sbcs	r2, r4\n\t"
84050 #else
84051         "sbc	r2, r4\n\t"
84052 #endif
84053 #ifdef WOLFSSL_KEIL
84054         "sbcs	r3, r3, r5\n\t"
84055 #elif defined(__clang__)
84056         "sbcs	r3, r5\n\t"
84057 #else
84058         "sbc	r3, r5\n\t"
84059 #endif
84060         "stm	%[a]!, {r2, r3}\n\t"
84061         "ldm	%[b]!, {r4, r5}\n\t"
84062         "ldr	r2, [%[a]]\n\t"
84063         "ldr	r3, [%[a], #4]\n\t"
84064 #ifdef WOLFSSL_KEIL
84065         "sbcs	r2, r2, r4\n\t"
84066 #elif defined(__clang__)
84067         "sbcs	r2, r4\n\t"
84068 #else
84069         "sbc	r2, r4\n\t"
84070 #endif
84071 #ifdef WOLFSSL_KEIL
84072         "sbcs	r3, r3, r5\n\t"
84073 #elif defined(__clang__)
84074         "sbcs	r3, r5\n\t"
84075 #else
84076         "sbc	r3, r5\n\t"
84077 #endif
84078         "stm	%[a]!, {r2, r3}\n\t"
84079         "ldm	%[b]!, {r4, r5}\n\t"
84080         "ldr	r2, [%[a]]\n\t"
84081         "ldr	r3, [%[a], #4]\n\t"
84082 #ifdef WOLFSSL_KEIL
84083         "sbcs	r2, r2, r4\n\t"
84084 #elif defined(__clang__)
84085         "sbcs	r2, r4\n\t"
84086 #else
84087         "sbc	r2, r4\n\t"
84088 #endif
84089 #ifdef WOLFSSL_KEIL
84090         "sbcs	r3, r3, r5\n\t"
84091 #elif defined(__clang__)
84092         "sbcs	r3, r5\n\t"
84093 #else
84094         "sbc	r3, r5\n\t"
84095 #endif
84096         "stm	%[a]!, {r2, r3}\n\t"
84097         "ldm	%[b]!, {r4, r5}\n\t"
84098         "ldr	r2, [%[a]]\n\t"
84099         "ldr	r3, [%[a], #4]\n\t"
84100 #ifdef WOLFSSL_KEIL
84101         "sbcs	r2, r2, r4\n\t"
84102 #elif defined(__clang__)
84103         "sbcs	r2, r4\n\t"
84104 #else
84105         "sbc	r2, r4\n\t"
84106 #endif
84107 #ifdef WOLFSSL_KEIL
84108         "sbcs	r3, r3, r5\n\t"
84109 #elif defined(__clang__)
84110         "sbcs	r3, r5\n\t"
84111 #else
84112         "sbc	r3, r5\n\t"
84113 #endif
84114         "stm	%[a]!, {r2, r3}\n\t"
84115         "ldm	%[b]!, {r4, r5}\n\t"
84116         "ldr	r2, [%[a]]\n\t"
84117         "ldr	r3, [%[a], #4]\n\t"
84118 #ifdef WOLFSSL_KEIL
84119         "sbcs	r2, r2, r4\n\t"
84120 #elif defined(__clang__)
84121         "sbcs	r2, r4\n\t"
84122 #else
84123         "sbc	r2, r4\n\t"
84124 #endif
84125 #ifdef WOLFSSL_KEIL
84126         "sbcs	r3, r3, r5\n\t"
84127 #elif defined(__clang__)
84128         "sbcs	r3, r5\n\t"
84129 #else
84130         "sbc	r3, r5\n\t"
84131 #endif
84132         "stm	%[a]!, {r2, r3}\n\t"
84133         "ldm	%[b]!, {r4, r5}\n\t"
84134         "ldr	r2, [%[a]]\n\t"
84135         "ldr	r3, [%[a], #4]\n\t"
84136 #ifdef WOLFSSL_KEIL
84137         "sbcs	r2, r2, r4\n\t"
84138 #elif defined(__clang__)
84139         "sbcs	r2, r4\n\t"
84140 #else
84141         "sbc	r2, r4\n\t"
84142 #endif
84143 #ifdef WOLFSSL_KEIL
84144         "sbcs	r3, r3, r5\n\t"
84145 #elif defined(__clang__)
84146         "sbcs	r3, r5\n\t"
84147 #else
84148         "sbc	r3, r5\n\t"
84149 #endif
84150         "stm	%[a]!, {r2, r3}\n\t"
84151         "ldm	%[b]!, {r4, r5}\n\t"
84152         "ldr	r2, [%[a]]\n\t"
84153         "ldr	r3, [%[a], #4]\n\t"
84154 #ifdef WOLFSSL_KEIL
84155         "sbcs	r2, r2, r4\n\t"
84156 #elif defined(__clang__)
84157         "sbcs	r2, r4\n\t"
84158 #else
84159         "sbc	r2, r4\n\t"
84160 #endif
84161 #ifdef WOLFSSL_KEIL
84162         "sbcs	r3, r3, r5\n\t"
84163 #elif defined(__clang__)
84164         "sbcs	r3, r5\n\t"
84165 #else
84166         "sbc	r3, r5\n\t"
84167 #endif
84168         "stm	%[a]!, {r2, r3}\n\t"
84169         "ldm	%[b]!, {r4, r5}\n\t"
84170         "ldr	r2, [%[a]]\n\t"
84171         "ldr	r3, [%[a], #4]\n\t"
84172 #ifdef WOLFSSL_KEIL
84173         "sbcs	r2, r2, r4\n\t"
84174 #elif defined(__clang__)
84175         "sbcs	r2, r4\n\t"
84176 #else
84177         "sbc	r2, r4\n\t"
84178 #endif
84179 #ifdef WOLFSSL_KEIL
84180         "sbcs	r3, r3, r5\n\t"
84181 #elif defined(__clang__)
84182         "sbcs	r3, r5\n\t"
84183 #else
84184         "sbc	r3, r5\n\t"
84185 #endif
84186         "stm	%[a]!, {r2, r3}\n\t"
84187         "ldm	%[b]!, {r4, r5}\n\t"
84188         "ldr	r2, [%[a]]\n\t"
84189         "ldr	r3, [%[a], #4]\n\t"
84190 #ifdef WOLFSSL_KEIL
84191         "sbcs	r2, r2, r4\n\t"
84192 #elif defined(__clang__)
84193         "sbcs	r2, r4\n\t"
84194 #else
84195         "sbc	r2, r4\n\t"
84196 #endif
84197 #ifdef WOLFSSL_KEIL
84198         "sbcs	r3, r3, r5\n\t"
84199 #elif defined(__clang__)
84200         "sbcs	r3, r5\n\t"
84201 #else
84202         "sbc	r3, r5\n\t"
84203 #endif
84204         "stm	%[a]!, {r2, r3}\n\t"
84205         "ldm	%[b]!, {r4, r5}\n\t"
84206         "ldr	r2, [%[a]]\n\t"
84207         "ldr	r3, [%[a], #4]\n\t"
84208 #ifdef WOLFSSL_KEIL
84209         "sbcs	r2, r2, r4\n\t"
84210 #elif defined(__clang__)
84211         "sbcs	r2, r4\n\t"
84212 #else
84213         "sbc	r2, r4\n\t"
84214 #endif
84215 #ifdef WOLFSSL_KEIL
84216         "sbcs	r3, r3, r5\n\t"
84217 #elif defined(__clang__)
84218         "sbcs	r3, r5\n\t"
84219 #else
84220         "sbc	r3, r5\n\t"
84221 #endif
84222         "stm	%[a]!, {r2, r3}\n\t"
84223         "ldm	%[b]!, {r4, r5}\n\t"
84224         "ldr	r2, [%[a]]\n\t"
84225         "ldr	r3, [%[a], #4]\n\t"
84226 #ifdef WOLFSSL_KEIL
84227         "sbcs	r2, r2, r4\n\t"
84228 #elif defined(__clang__)
84229         "sbcs	r2, r4\n\t"
84230 #else
84231         "sbc	r2, r4\n\t"
84232 #endif
84233 #ifdef WOLFSSL_KEIL
84234         "sbcs	r3, r3, r5\n\t"
84235 #elif defined(__clang__)
84236         "sbcs	r3, r5\n\t"
84237 #else
84238         "sbc	r3, r5\n\t"
84239 #endif
84240         "stm	%[a]!, {r2, r3}\n\t"
84241         "ldm	%[b]!, {r4, r5}\n\t"
84242         "ldr	r2, [%[a]]\n\t"
84243         "ldr	r3, [%[a], #4]\n\t"
84244 #ifdef WOLFSSL_KEIL
84245         "sbcs	r2, r2, r4\n\t"
84246 #elif defined(__clang__)
84247         "sbcs	r2, r4\n\t"
84248 #else
84249         "sbc	r2, r4\n\t"
84250 #endif
84251 #ifdef WOLFSSL_KEIL
84252         "sbcs	r3, r3, r5\n\t"
84253 #elif defined(__clang__)
84254         "sbcs	r3, r5\n\t"
84255 #else
84256         "sbc	r3, r5\n\t"
84257 #endif
84258         "stm	%[a]!, {r2, r3}\n\t"
84259         "ldm	%[b]!, {r4, r5}\n\t"
84260         "ldr	r2, [%[a]]\n\t"
84261         "ldr	r3, [%[a], #4]\n\t"
84262 #ifdef WOLFSSL_KEIL
84263         "sbcs	r2, r2, r4\n\t"
84264 #elif defined(__clang__)
84265         "sbcs	r2, r4\n\t"
84266 #else
84267         "sbc	r2, r4\n\t"
84268 #endif
84269 #ifdef WOLFSSL_KEIL
84270         "sbcs	r3, r3, r5\n\t"
84271 #elif defined(__clang__)
84272         "sbcs	r3, r5\n\t"
84273 #else
84274         "sbc	r3, r5\n\t"
84275 #endif
84276         "stm	%[a]!, {r2, r3}\n\t"
84277         "ldm	%[b]!, {r4, r5}\n\t"
84278         "ldr	r2, [%[a]]\n\t"
84279         "ldr	r3, [%[a], #4]\n\t"
84280 #ifdef WOLFSSL_KEIL
84281         "sbcs	r2, r2, r4\n\t"
84282 #elif defined(__clang__)
84283         "sbcs	r2, r4\n\t"
84284 #else
84285         "sbc	r2, r4\n\t"
84286 #endif
84287 #ifdef WOLFSSL_KEIL
84288         "sbcs	r3, r3, r5\n\t"
84289 #elif defined(__clang__)
84290         "sbcs	r3, r5\n\t"
84291 #else
84292         "sbc	r3, r5\n\t"
84293 #endif
84294         "stm	%[a]!, {r2, r3}\n\t"
84295         "ldm	%[b]!, {r4, r5}\n\t"
84296         "ldr	r2, [%[a]]\n\t"
84297         "ldr	r3, [%[a], #4]\n\t"
84298 #ifdef WOLFSSL_KEIL
84299         "sbcs	r2, r2, r4\n\t"
84300 #elif defined(__clang__)
84301         "sbcs	r2, r4\n\t"
84302 #else
84303         "sbc	r2, r4\n\t"
84304 #endif
84305 #ifdef WOLFSSL_KEIL
84306         "sbcs	r3, r3, r5\n\t"
84307 #elif defined(__clang__)
84308         "sbcs	r3, r5\n\t"
84309 #else
84310         "sbc	r3, r5\n\t"
84311 #endif
84312         "stm	%[a]!, {r2, r3}\n\t"
84313         "ldm	%[b]!, {r4, r5}\n\t"
84314         "ldr	r2, [%[a]]\n\t"
84315         "ldr	r3, [%[a], #4]\n\t"
84316 #ifdef WOLFSSL_KEIL
84317         "sbcs	r2, r2, r4\n\t"
84318 #elif defined(__clang__)
84319         "sbcs	r2, r4\n\t"
84320 #else
84321         "sbc	r2, r4\n\t"
84322 #endif
84323 #ifdef WOLFSSL_KEIL
84324         "sbcs	r3, r3, r5\n\t"
84325 #elif defined(__clang__)
84326         "sbcs	r3, r5\n\t"
84327 #else
84328         "sbc	r3, r5\n\t"
84329 #endif
84330         "stm	%[a]!, {r2, r3}\n\t"
84331         "ldm	%[b]!, {r4, r5}\n\t"
84332         "ldr	r2, [%[a]]\n\t"
84333         "ldr	r3, [%[a], #4]\n\t"
84334 #ifdef WOLFSSL_KEIL
84335         "sbcs	r2, r2, r4\n\t"
84336 #elif defined(__clang__)
84337         "sbcs	r2, r4\n\t"
84338 #else
84339         "sbc	r2, r4\n\t"
84340 #endif
84341 #ifdef WOLFSSL_KEIL
84342         "sbcs	r3, r3, r5\n\t"
84343 #elif defined(__clang__)
84344         "sbcs	r3, r5\n\t"
84345 #else
84346         "sbc	r3, r5\n\t"
84347 #endif
84348         "stm	%[a]!, {r2, r3}\n\t"
84349         "ldm	%[b]!, {r4, r5}\n\t"
84350         "ldr	r2, [%[a]]\n\t"
84351         "ldr	r3, [%[a], #4]\n\t"
84352 #ifdef WOLFSSL_KEIL
84353         "sbcs	r2, r2, r4\n\t"
84354 #elif defined(__clang__)
84355         "sbcs	r2, r4\n\t"
84356 #else
84357         "sbc	r2, r4\n\t"
84358 #endif
84359 #ifdef WOLFSSL_KEIL
84360         "sbcs	r3, r3, r5\n\t"
84361 #elif defined(__clang__)
84362         "sbcs	r3, r5\n\t"
84363 #else
84364         "sbc	r3, r5\n\t"
84365 #endif
84366         "stm	%[a]!, {r2, r3}\n\t"
84367         "ldm	%[b]!, {r4, r5}\n\t"
84368         "ldr	r2, [%[a]]\n\t"
84369         "ldr	r3, [%[a], #4]\n\t"
84370 #ifdef WOLFSSL_KEIL
84371         "sbcs	r2, r2, r4\n\t"
84372 #elif defined(__clang__)
84373         "sbcs	r2, r4\n\t"
84374 #else
84375         "sbc	r2, r4\n\t"
84376 #endif
84377 #ifdef WOLFSSL_KEIL
84378         "sbcs	r3, r3, r5\n\t"
84379 #elif defined(__clang__)
84380         "sbcs	r3, r5\n\t"
84381 #else
84382         "sbc	r3, r5\n\t"
84383 #endif
84384         "stm	%[a]!, {r2, r3}\n\t"
84385         "ldm	%[b]!, {r4, r5}\n\t"
84386         "ldr	r2, [%[a]]\n\t"
84387         "ldr	r3, [%[a], #4]\n\t"
84388 #ifdef WOLFSSL_KEIL
84389         "sbcs	r2, r2, r4\n\t"
84390 #elif defined(__clang__)
84391         "sbcs	r2, r4\n\t"
84392 #else
84393         "sbc	r2, r4\n\t"
84394 #endif
84395 #ifdef WOLFSSL_KEIL
84396         "sbcs	r3, r3, r5\n\t"
84397 #elif defined(__clang__)
84398         "sbcs	r3, r5\n\t"
84399 #else
84400         "sbc	r3, r5\n\t"
84401 #endif
84402         "stm	%[a]!, {r2, r3}\n\t"
84403         "ldm	%[b]!, {r4, r5}\n\t"
84404         "ldr	r2, [%[a]]\n\t"
84405         "ldr	r3, [%[a], #4]\n\t"
84406 #ifdef WOLFSSL_KEIL
84407         "sbcs	r2, r2, r4\n\t"
84408 #elif defined(__clang__)
84409         "sbcs	r2, r4\n\t"
84410 #else
84411         "sbc	r2, r4\n\t"
84412 #endif
84413 #ifdef WOLFSSL_KEIL
84414         "sbcs	r3, r3, r5\n\t"
84415 #elif defined(__clang__)
84416         "sbcs	r3, r5\n\t"
84417 #else
84418         "sbc	r3, r5\n\t"
84419 #endif
84420         "stm	%[a]!, {r2, r3}\n\t"
84421 #ifdef WOLFSSL_KEIL
84422         "sbcs	%[a], %[a], %[a]\n\t"
84423 #elif defined(__clang__)
84424         "sbcs	%[a], %[a]\n\t"
84425 #else
84426         "sbc	%[a], %[a]\n\t"
84427 #endif
84428         : [a] "+r" (a), [b] "+r" (b)
84429         :
84430         : "memory", "r2", "r3", "r4", "r5"
84431     );
84432     return (uint32_t)(size_t)a;
84433 }
84434 
84435 /* Add b to a into r. (r = a + b)
84436  *
84437  * r  A single precision integer.
84438  * a  A single precision integer.
84439  * b  A single precision integer.
84440  */
sp_4096_add_128(sp_digit * r,const sp_digit * a,const sp_digit * b)84441 SP_NOINLINE static sp_digit sp_4096_add_128(sp_digit* r, const sp_digit* a,
84442         const sp_digit* b)
84443 {
84444     __asm__ __volatile__ (
84445         "ldm	%[b]!, {r5, r6}\n\t"
84446         "ldm	%[a]!, {r3, r4}\n\t"
84447 #if defined(__clang__) || defined(WOLFSSL_KEIL)
84448         "adds	r3, r3, r5\n\t"
84449 #else
84450         "add	r3, r3, r5\n\t"
84451 #endif
84452 #ifdef WOLFSSL_KEIL
84453         "adcs	r4, r4, r6\n\t"
84454 #elif defined(__clang__)
84455         "adcs	r4, r6\n\t"
84456 #else
84457         "adc	r4, r6\n\t"
84458 #endif
84459         "stm	%[r]!, {r3, r4}\n\t"
84460         "ldm	%[b]!, {r5, r6}\n\t"
84461         "ldm	%[a]!, {r3, r4}\n\t"
84462 #ifdef WOLFSSL_KEIL
84463         "adcs	r3, r3, r5\n\t"
84464 #elif defined(__clang__)
84465         "adcs	r3, r5\n\t"
84466 #else
84467         "adc	r3, r5\n\t"
84468 #endif
84469 #ifdef WOLFSSL_KEIL
84470         "adcs	r4, r4, r6\n\t"
84471 #elif defined(__clang__)
84472         "adcs	r4, r6\n\t"
84473 #else
84474         "adc	r4, r6\n\t"
84475 #endif
84476         "stm	%[r]!, {r3, r4}\n\t"
84477         "ldm	%[b]!, {r5, r6}\n\t"
84478         "ldm	%[a]!, {r3, r4}\n\t"
84479 #ifdef WOLFSSL_KEIL
84480         "adcs	r3, r3, r5\n\t"
84481 #elif defined(__clang__)
84482         "adcs	r3, r5\n\t"
84483 #else
84484         "adc	r3, r5\n\t"
84485 #endif
84486 #ifdef WOLFSSL_KEIL
84487         "adcs	r4, r4, r6\n\t"
84488 #elif defined(__clang__)
84489         "adcs	r4, r6\n\t"
84490 #else
84491         "adc	r4, r6\n\t"
84492 #endif
84493         "stm	%[r]!, {r3, r4}\n\t"
84494         "ldm	%[b]!, {r5, r6}\n\t"
84495         "ldm	%[a]!, {r3, r4}\n\t"
84496 #ifdef WOLFSSL_KEIL
84497         "adcs	r3, r3, r5\n\t"
84498 #elif defined(__clang__)
84499         "adcs	r3, r5\n\t"
84500 #else
84501         "adc	r3, r5\n\t"
84502 #endif
84503 #ifdef WOLFSSL_KEIL
84504         "adcs	r4, r4, r6\n\t"
84505 #elif defined(__clang__)
84506         "adcs	r4, r6\n\t"
84507 #else
84508         "adc	r4, r6\n\t"
84509 #endif
84510         "stm	%[r]!, {r3, r4}\n\t"
84511         "ldm	%[b]!, {r5, r6}\n\t"
84512         "ldm	%[a]!, {r3, r4}\n\t"
84513 #ifdef WOLFSSL_KEIL
84514         "adcs	r3, r3, r5\n\t"
84515 #elif defined(__clang__)
84516         "adcs	r3, r5\n\t"
84517 #else
84518         "adc	r3, r5\n\t"
84519 #endif
84520 #ifdef WOLFSSL_KEIL
84521         "adcs	r4, r4, r6\n\t"
84522 #elif defined(__clang__)
84523         "adcs	r4, r6\n\t"
84524 #else
84525         "adc	r4, r6\n\t"
84526 #endif
84527         "stm	%[r]!, {r3, r4}\n\t"
84528         "ldm	%[b]!, {r5, r6}\n\t"
84529         "ldm	%[a]!, {r3, r4}\n\t"
84530 #ifdef WOLFSSL_KEIL
84531         "adcs	r3, r3, r5\n\t"
84532 #elif defined(__clang__)
84533         "adcs	r3, r5\n\t"
84534 #else
84535         "adc	r3, r5\n\t"
84536 #endif
84537 #ifdef WOLFSSL_KEIL
84538         "adcs	r4, r4, r6\n\t"
84539 #elif defined(__clang__)
84540         "adcs	r4, r6\n\t"
84541 #else
84542         "adc	r4, r6\n\t"
84543 #endif
84544         "stm	%[r]!, {r3, r4}\n\t"
84545         "ldm	%[b]!, {r5, r6}\n\t"
84546         "ldm	%[a]!, {r3, r4}\n\t"
84547 #ifdef WOLFSSL_KEIL
84548         "adcs	r3, r3, r5\n\t"
84549 #elif defined(__clang__)
84550         "adcs	r3, r5\n\t"
84551 #else
84552         "adc	r3, r5\n\t"
84553 #endif
84554 #ifdef WOLFSSL_KEIL
84555         "adcs	r4, r4, r6\n\t"
84556 #elif defined(__clang__)
84557         "adcs	r4, r6\n\t"
84558 #else
84559         "adc	r4, r6\n\t"
84560 #endif
84561         "stm	%[r]!, {r3, r4}\n\t"
84562         "ldm	%[b]!, {r5, r6}\n\t"
84563         "ldm	%[a]!, {r3, r4}\n\t"
84564 #ifdef WOLFSSL_KEIL
84565         "adcs	r3, r3, r5\n\t"
84566 #elif defined(__clang__)
84567         "adcs	r3, r5\n\t"
84568 #else
84569         "adc	r3, r5\n\t"
84570 #endif
84571 #ifdef WOLFSSL_KEIL
84572         "adcs	r4, r4, r6\n\t"
84573 #elif defined(__clang__)
84574         "adcs	r4, r6\n\t"
84575 #else
84576         "adc	r4, r6\n\t"
84577 #endif
84578         "stm	%[r]!, {r3, r4}\n\t"
84579         "ldm	%[b]!, {r5, r6}\n\t"
84580         "ldm	%[a]!, {r3, r4}\n\t"
84581 #ifdef WOLFSSL_KEIL
84582         "adcs	r3, r3, r5\n\t"
84583 #elif defined(__clang__)
84584         "adcs	r3, r5\n\t"
84585 #else
84586         "adc	r3, r5\n\t"
84587 #endif
84588 #ifdef WOLFSSL_KEIL
84589         "adcs	r4, r4, r6\n\t"
84590 #elif defined(__clang__)
84591         "adcs	r4, r6\n\t"
84592 #else
84593         "adc	r4, r6\n\t"
84594 #endif
84595         "stm	%[r]!, {r3, r4}\n\t"
84596         "ldm	%[b]!, {r5, r6}\n\t"
84597         "ldm	%[a]!, {r3, r4}\n\t"
84598 #ifdef WOLFSSL_KEIL
84599         "adcs	r3, r3, r5\n\t"
84600 #elif defined(__clang__)
84601         "adcs	r3, r5\n\t"
84602 #else
84603         "adc	r3, r5\n\t"
84604 #endif
84605 #ifdef WOLFSSL_KEIL
84606         "adcs	r4, r4, r6\n\t"
84607 #elif defined(__clang__)
84608         "adcs	r4, r6\n\t"
84609 #else
84610         "adc	r4, r6\n\t"
84611 #endif
84612         "stm	%[r]!, {r3, r4}\n\t"
84613         "ldm	%[b]!, {r5, r6}\n\t"
84614         "ldm	%[a]!, {r3, r4}\n\t"
84615 #ifdef WOLFSSL_KEIL
84616         "adcs	r3, r3, r5\n\t"
84617 #elif defined(__clang__)
84618         "adcs	r3, r5\n\t"
84619 #else
84620         "adc	r3, r5\n\t"
84621 #endif
84622 #ifdef WOLFSSL_KEIL
84623         "adcs	r4, r4, r6\n\t"
84624 #elif defined(__clang__)
84625         "adcs	r4, r6\n\t"
84626 #else
84627         "adc	r4, r6\n\t"
84628 #endif
84629         "stm	%[r]!, {r3, r4}\n\t"
84630         "ldm	%[b]!, {r5, r6}\n\t"
84631         "ldm	%[a]!, {r3, r4}\n\t"
84632 #ifdef WOLFSSL_KEIL
84633         "adcs	r3, r3, r5\n\t"
84634 #elif defined(__clang__)
84635         "adcs	r3, r5\n\t"
84636 #else
84637         "adc	r3, r5\n\t"
84638 #endif
84639 #ifdef WOLFSSL_KEIL
84640         "adcs	r4, r4, r6\n\t"
84641 #elif defined(__clang__)
84642         "adcs	r4, r6\n\t"
84643 #else
84644         "adc	r4, r6\n\t"
84645 #endif
84646         "stm	%[r]!, {r3, r4}\n\t"
84647         "ldm	%[b]!, {r5, r6}\n\t"
84648         "ldm	%[a]!, {r3, r4}\n\t"
84649 #ifdef WOLFSSL_KEIL
84650         "adcs	r3, r3, r5\n\t"
84651 #elif defined(__clang__)
84652         "adcs	r3, r5\n\t"
84653 #else
84654         "adc	r3, r5\n\t"
84655 #endif
84656 #ifdef WOLFSSL_KEIL
84657         "adcs	r4, r4, r6\n\t"
84658 #elif defined(__clang__)
84659         "adcs	r4, r6\n\t"
84660 #else
84661         "adc	r4, r6\n\t"
84662 #endif
84663         "stm	%[r]!, {r3, r4}\n\t"
84664         "ldm	%[b]!, {r5, r6}\n\t"
84665         "ldm	%[a]!, {r3, r4}\n\t"
84666 #ifdef WOLFSSL_KEIL
84667         "adcs	r3, r3, r5\n\t"
84668 #elif defined(__clang__)
84669         "adcs	r3, r5\n\t"
84670 #else
84671         "adc	r3, r5\n\t"
84672 #endif
84673 #ifdef WOLFSSL_KEIL
84674         "adcs	r4, r4, r6\n\t"
84675 #elif defined(__clang__)
84676         "adcs	r4, r6\n\t"
84677 #else
84678         "adc	r4, r6\n\t"
84679 #endif
84680         "stm	%[r]!, {r3, r4}\n\t"
84681         "ldm	%[b]!, {r5, r6}\n\t"
84682         "ldm	%[a]!, {r3, r4}\n\t"
84683 #ifdef WOLFSSL_KEIL
84684         "adcs	r3, r3, r5\n\t"
84685 #elif defined(__clang__)
84686         "adcs	r3, r5\n\t"
84687 #else
84688         "adc	r3, r5\n\t"
84689 #endif
84690 #ifdef WOLFSSL_KEIL
84691         "adcs	r4, r4, r6\n\t"
84692 #elif defined(__clang__)
84693         "adcs	r4, r6\n\t"
84694 #else
84695         "adc	r4, r6\n\t"
84696 #endif
84697         "stm	%[r]!, {r3, r4}\n\t"
84698         "ldm	%[b]!, {r5, r6}\n\t"
84699         "ldm	%[a]!, {r3, r4}\n\t"
84700 #ifdef WOLFSSL_KEIL
84701         "adcs	r3, r3, r5\n\t"
84702 #elif defined(__clang__)
84703         "adcs	r3, r5\n\t"
84704 #else
84705         "adc	r3, r5\n\t"
84706 #endif
84707 #ifdef WOLFSSL_KEIL
84708         "adcs	r4, r4, r6\n\t"
84709 #elif defined(__clang__)
84710         "adcs	r4, r6\n\t"
84711 #else
84712         "adc	r4, r6\n\t"
84713 #endif
84714         "stm	%[r]!, {r3, r4}\n\t"
84715         "ldm	%[b]!, {r5, r6}\n\t"
84716         "ldm	%[a]!, {r3, r4}\n\t"
84717 #ifdef WOLFSSL_KEIL
84718         "adcs	r3, r3, r5\n\t"
84719 #elif defined(__clang__)
84720         "adcs	r3, r5\n\t"
84721 #else
84722         "adc	r3, r5\n\t"
84723 #endif
84724 #ifdef WOLFSSL_KEIL
84725         "adcs	r4, r4, r6\n\t"
84726 #elif defined(__clang__)
84727         "adcs	r4, r6\n\t"
84728 #else
84729         "adc	r4, r6\n\t"
84730 #endif
84731         "stm	%[r]!, {r3, r4}\n\t"
84732         "ldm	%[b]!, {r5, r6}\n\t"
84733         "ldm	%[a]!, {r3, r4}\n\t"
84734 #ifdef WOLFSSL_KEIL
84735         "adcs	r3, r3, r5\n\t"
84736 #elif defined(__clang__)
84737         "adcs	r3, r5\n\t"
84738 #else
84739         "adc	r3, r5\n\t"
84740 #endif
84741 #ifdef WOLFSSL_KEIL
84742         "adcs	r4, r4, r6\n\t"
84743 #elif defined(__clang__)
84744         "adcs	r4, r6\n\t"
84745 #else
84746         "adc	r4, r6\n\t"
84747 #endif
84748         "stm	%[r]!, {r3, r4}\n\t"
84749         "ldm	%[b]!, {r5, r6}\n\t"
84750         "ldm	%[a]!, {r3, r4}\n\t"
84751 #ifdef WOLFSSL_KEIL
84752         "adcs	r3, r3, r5\n\t"
84753 #elif defined(__clang__)
84754         "adcs	r3, r5\n\t"
84755 #else
84756         "adc	r3, r5\n\t"
84757 #endif
84758 #ifdef WOLFSSL_KEIL
84759         "adcs	r4, r4, r6\n\t"
84760 #elif defined(__clang__)
84761         "adcs	r4, r6\n\t"
84762 #else
84763         "adc	r4, r6\n\t"
84764 #endif
84765         "stm	%[r]!, {r3, r4}\n\t"
84766         "ldm	%[b]!, {r5, r6}\n\t"
84767         "ldm	%[a]!, {r3, r4}\n\t"
84768 #ifdef WOLFSSL_KEIL
84769         "adcs	r3, r3, r5\n\t"
84770 #elif defined(__clang__)
84771         "adcs	r3, r5\n\t"
84772 #else
84773         "adc	r3, r5\n\t"
84774 #endif
84775 #ifdef WOLFSSL_KEIL
84776         "adcs	r4, r4, r6\n\t"
84777 #elif defined(__clang__)
84778         "adcs	r4, r6\n\t"
84779 #else
84780         "adc	r4, r6\n\t"
84781 #endif
84782         "stm	%[r]!, {r3, r4}\n\t"
84783         "ldm	%[b]!, {r5, r6}\n\t"
84784         "ldm	%[a]!, {r3, r4}\n\t"
84785 #ifdef WOLFSSL_KEIL
84786         "adcs	r3, r3, r5\n\t"
84787 #elif defined(__clang__)
84788         "adcs	r3, r5\n\t"
84789 #else
84790         "adc	r3, r5\n\t"
84791 #endif
84792 #ifdef WOLFSSL_KEIL
84793         "adcs	r4, r4, r6\n\t"
84794 #elif defined(__clang__)
84795         "adcs	r4, r6\n\t"
84796 #else
84797         "adc	r4, r6\n\t"
84798 #endif
84799         "stm	%[r]!, {r3, r4}\n\t"
84800         "ldm	%[b]!, {r5, r6}\n\t"
84801         "ldm	%[a]!, {r3, r4}\n\t"
84802 #ifdef WOLFSSL_KEIL
84803         "adcs	r3, r3, r5\n\t"
84804 #elif defined(__clang__)
84805         "adcs	r3, r5\n\t"
84806 #else
84807         "adc	r3, r5\n\t"
84808 #endif
84809 #ifdef WOLFSSL_KEIL
84810         "adcs	r4, r4, r6\n\t"
84811 #elif defined(__clang__)
84812         "adcs	r4, r6\n\t"
84813 #else
84814         "adc	r4, r6\n\t"
84815 #endif
84816         "stm	%[r]!, {r3, r4}\n\t"
84817         "ldm	%[b]!, {r5, r6}\n\t"
84818         "ldm	%[a]!, {r3, r4}\n\t"
84819 #ifdef WOLFSSL_KEIL
84820         "adcs	r3, r3, r5\n\t"
84821 #elif defined(__clang__)
84822         "adcs	r3, r5\n\t"
84823 #else
84824         "adc	r3, r5\n\t"
84825 #endif
84826 #ifdef WOLFSSL_KEIL
84827         "adcs	r4, r4, r6\n\t"
84828 #elif defined(__clang__)
84829         "adcs	r4, r6\n\t"
84830 #else
84831         "adc	r4, r6\n\t"
84832 #endif
84833         "stm	%[r]!, {r3, r4}\n\t"
84834         "ldm	%[b]!, {r5, r6}\n\t"
84835         "ldm	%[a]!, {r3, r4}\n\t"
84836 #ifdef WOLFSSL_KEIL
84837         "adcs	r3, r3, r5\n\t"
84838 #elif defined(__clang__)
84839         "adcs	r3, r5\n\t"
84840 #else
84841         "adc	r3, r5\n\t"
84842 #endif
84843 #ifdef WOLFSSL_KEIL
84844         "adcs	r4, r4, r6\n\t"
84845 #elif defined(__clang__)
84846         "adcs	r4, r6\n\t"
84847 #else
84848         "adc	r4, r6\n\t"
84849 #endif
84850         "stm	%[r]!, {r3, r4}\n\t"
84851         "ldm	%[b]!, {r5, r6}\n\t"
84852         "ldm	%[a]!, {r3, r4}\n\t"
84853 #ifdef WOLFSSL_KEIL
84854         "adcs	r3, r3, r5\n\t"
84855 #elif defined(__clang__)
84856         "adcs	r3, r5\n\t"
84857 #else
84858         "adc	r3, r5\n\t"
84859 #endif
84860 #ifdef WOLFSSL_KEIL
84861         "adcs	r4, r4, r6\n\t"
84862 #elif defined(__clang__)
84863         "adcs	r4, r6\n\t"
84864 #else
84865         "adc	r4, r6\n\t"
84866 #endif
84867         "stm	%[r]!, {r3, r4}\n\t"
84868         "ldm	%[b]!, {r5, r6}\n\t"
84869         "ldm	%[a]!, {r3, r4}\n\t"
84870 #ifdef WOLFSSL_KEIL
84871         "adcs	r3, r3, r5\n\t"
84872 #elif defined(__clang__)
84873         "adcs	r3, r5\n\t"
84874 #else
84875         "adc	r3, r5\n\t"
84876 #endif
84877 #ifdef WOLFSSL_KEIL
84878         "adcs	r4, r4, r6\n\t"
84879 #elif defined(__clang__)
84880         "adcs	r4, r6\n\t"
84881 #else
84882         "adc	r4, r6\n\t"
84883 #endif
84884         "stm	%[r]!, {r3, r4}\n\t"
84885         "ldm	%[b]!, {r5, r6}\n\t"
84886         "ldm	%[a]!, {r3, r4}\n\t"
84887 #ifdef WOLFSSL_KEIL
84888         "adcs	r3, r3, r5\n\t"
84889 #elif defined(__clang__)
84890         "adcs	r3, r5\n\t"
84891 #else
84892         "adc	r3, r5\n\t"
84893 #endif
84894 #ifdef WOLFSSL_KEIL
84895         "adcs	r4, r4, r6\n\t"
84896 #elif defined(__clang__)
84897         "adcs	r4, r6\n\t"
84898 #else
84899         "adc	r4, r6\n\t"
84900 #endif
84901         "stm	%[r]!, {r3, r4}\n\t"
84902         "ldm	%[b]!, {r5, r6}\n\t"
84903         "ldm	%[a]!, {r3, r4}\n\t"
84904 #ifdef WOLFSSL_KEIL
84905         "adcs	r3, r3, r5\n\t"
84906 #elif defined(__clang__)
84907         "adcs	r3, r5\n\t"
84908 #else
84909         "adc	r3, r5\n\t"
84910 #endif
84911 #ifdef WOLFSSL_KEIL
84912         "adcs	r4, r4, r6\n\t"
84913 #elif defined(__clang__)
84914         "adcs	r4, r6\n\t"
84915 #else
84916         "adc	r4, r6\n\t"
84917 #endif
84918         "stm	%[r]!, {r3, r4}\n\t"
84919         "ldm	%[b]!, {r5, r6}\n\t"
84920         "ldm	%[a]!, {r3, r4}\n\t"
84921 #ifdef WOLFSSL_KEIL
84922         "adcs	r3, r3, r5\n\t"
84923 #elif defined(__clang__)
84924         "adcs	r3, r5\n\t"
84925 #else
84926         "adc	r3, r5\n\t"
84927 #endif
84928 #ifdef WOLFSSL_KEIL
84929         "adcs	r4, r4, r6\n\t"
84930 #elif defined(__clang__)
84931         "adcs	r4, r6\n\t"
84932 #else
84933         "adc	r4, r6\n\t"
84934 #endif
84935         "stm	%[r]!, {r3, r4}\n\t"
84936         "ldm	%[b]!, {r5, r6}\n\t"
84937         "ldm	%[a]!, {r3, r4}\n\t"
84938 #ifdef WOLFSSL_KEIL
84939         "adcs	r3, r3, r5\n\t"
84940 #elif defined(__clang__)
84941         "adcs	r3, r5\n\t"
84942 #else
84943         "adc	r3, r5\n\t"
84944 #endif
84945 #ifdef WOLFSSL_KEIL
84946         "adcs	r4, r4, r6\n\t"
84947 #elif defined(__clang__)
84948         "adcs	r4, r6\n\t"
84949 #else
84950         "adc	r4, r6\n\t"
84951 #endif
84952         "stm	%[r]!, {r3, r4}\n\t"
84953         "ldm	%[b]!, {r5, r6}\n\t"
84954         "ldm	%[a]!, {r3, r4}\n\t"
84955 #ifdef WOLFSSL_KEIL
84956         "adcs	r3, r3, r5\n\t"
84957 #elif defined(__clang__)
84958         "adcs	r3, r5\n\t"
84959 #else
84960         "adc	r3, r5\n\t"
84961 #endif
84962 #ifdef WOLFSSL_KEIL
84963         "adcs	r4, r4, r6\n\t"
84964 #elif defined(__clang__)
84965         "adcs	r4, r6\n\t"
84966 #else
84967         "adc	r4, r6\n\t"
84968 #endif
84969         "stm	%[r]!, {r3, r4}\n\t"
84970         "ldm	%[b]!, {r5, r6}\n\t"
84971         "ldm	%[a]!, {r3, r4}\n\t"
84972 #ifdef WOLFSSL_KEIL
84973         "adcs	r3, r3, r5\n\t"
84974 #elif defined(__clang__)
84975         "adcs	r3, r5\n\t"
84976 #else
84977         "adc	r3, r5\n\t"
84978 #endif
84979 #ifdef WOLFSSL_KEIL
84980         "adcs	r4, r4, r6\n\t"
84981 #elif defined(__clang__)
84982         "adcs	r4, r6\n\t"
84983 #else
84984         "adc	r4, r6\n\t"
84985 #endif
84986         "stm	%[r]!, {r3, r4}\n\t"
84987         "ldm	%[b]!, {r5, r6}\n\t"
84988         "ldm	%[a]!, {r3, r4}\n\t"
84989 #ifdef WOLFSSL_KEIL
84990         "adcs	r3, r3, r5\n\t"
84991 #elif defined(__clang__)
84992         "adcs	r3, r5\n\t"
84993 #else
84994         "adc	r3, r5\n\t"
84995 #endif
84996 #ifdef WOLFSSL_KEIL
84997         "adcs	r4, r4, r6\n\t"
84998 #elif defined(__clang__)
84999         "adcs	r4, r6\n\t"
85000 #else
85001         "adc	r4, r6\n\t"
85002 #endif
85003         "stm	%[r]!, {r3, r4}\n\t"
85004         "ldm	%[b]!, {r5, r6}\n\t"
85005         "ldm	%[a]!, {r3, r4}\n\t"
85006 #ifdef WOLFSSL_KEIL
85007         "adcs	r3, r3, r5\n\t"
85008 #elif defined(__clang__)
85009         "adcs	r3, r5\n\t"
85010 #else
85011         "adc	r3, r5\n\t"
85012 #endif
85013 #ifdef WOLFSSL_KEIL
85014         "adcs	r4, r4, r6\n\t"
85015 #elif defined(__clang__)
85016         "adcs	r4, r6\n\t"
85017 #else
85018         "adc	r4, r6\n\t"
85019 #endif
85020         "stm	%[r]!, {r3, r4}\n\t"
85021         "ldm	%[b]!, {r5, r6}\n\t"
85022         "ldm	%[a]!, {r3, r4}\n\t"
85023 #ifdef WOLFSSL_KEIL
85024         "adcs	r3, r3, r5\n\t"
85025 #elif defined(__clang__)
85026         "adcs	r3, r5\n\t"
85027 #else
85028         "adc	r3, r5\n\t"
85029 #endif
85030 #ifdef WOLFSSL_KEIL
85031         "adcs	r4, r4, r6\n\t"
85032 #elif defined(__clang__)
85033         "adcs	r4, r6\n\t"
85034 #else
85035         "adc	r4, r6\n\t"
85036 #endif
85037         "stm	%[r]!, {r3, r4}\n\t"
85038         "ldm	%[b]!, {r5, r6}\n\t"
85039         "ldm	%[a]!, {r3, r4}\n\t"
85040 #ifdef WOLFSSL_KEIL
85041         "adcs	r3, r3, r5\n\t"
85042 #elif defined(__clang__)
85043         "adcs	r3, r5\n\t"
85044 #else
85045         "adc	r3, r5\n\t"
85046 #endif
85047 #ifdef WOLFSSL_KEIL
85048         "adcs	r4, r4, r6\n\t"
85049 #elif defined(__clang__)
85050         "adcs	r4, r6\n\t"
85051 #else
85052         "adc	r4, r6\n\t"
85053 #endif
85054         "stm	%[r]!, {r3, r4}\n\t"
85055         "ldm	%[b]!, {r5, r6}\n\t"
85056         "ldm	%[a]!, {r3, r4}\n\t"
85057 #ifdef WOLFSSL_KEIL
85058         "adcs	r3, r3, r5\n\t"
85059 #elif defined(__clang__)
85060         "adcs	r3, r5\n\t"
85061 #else
85062         "adc	r3, r5\n\t"
85063 #endif
85064 #ifdef WOLFSSL_KEIL
85065         "adcs	r4, r4, r6\n\t"
85066 #elif defined(__clang__)
85067         "adcs	r4, r6\n\t"
85068 #else
85069         "adc	r4, r6\n\t"
85070 #endif
85071         "stm	%[r]!, {r3, r4}\n\t"
85072         "ldm	%[b]!, {r5, r6}\n\t"
85073         "ldm	%[a]!, {r3, r4}\n\t"
85074 #ifdef WOLFSSL_KEIL
85075         "adcs	r3, r3, r5\n\t"
85076 #elif defined(__clang__)
85077         "adcs	r3, r5\n\t"
85078 #else
85079         "adc	r3, r5\n\t"
85080 #endif
85081 #ifdef WOLFSSL_KEIL
85082         "adcs	r4, r4, r6\n\t"
85083 #elif defined(__clang__)
85084         "adcs	r4, r6\n\t"
85085 #else
85086         "adc	r4, r6\n\t"
85087 #endif
85088         "stm	%[r]!, {r3, r4}\n\t"
85089         "ldm	%[b]!, {r5, r6}\n\t"
85090         "ldm	%[a]!, {r3, r4}\n\t"
85091 #ifdef WOLFSSL_KEIL
85092         "adcs	r3, r3, r5\n\t"
85093 #elif defined(__clang__)
85094         "adcs	r3, r5\n\t"
85095 #else
85096         "adc	r3, r5\n\t"
85097 #endif
85098 #ifdef WOLFSSL_KEIL
85099         "adcs	r4, r4, r6\n\t"
85100 #elif defined(__clang__)
85101         "adcs	r4, r6\n\t"
85102 #else
85103         "adc	r4, r6\n\t"
85104 #endif
85105         "stm	%[r]!, {r3, r4}\n\t"
85106         "ldm	%[b]!, {r5, r6}\n\t"
85107         "ldm	%[a]!, {r3, r4}\n\t"
85108 #ifdef WOLFSSL_KEIL
85109         "adcs	r3, r3, r5\n\t"
85110 #elif defined(__clang__)
85111         "adcs	r3, r5\n\t"
85112 #else
85113         "adc	r3, r5\n\t"
85114 #endif
85115 #ifdef WOLFSSL_KEIL
85116         "adcs	r4, r4, r6\n\t"
85117 #elif defined(__clang__)
85118         "adcs	r4, r6\n\t"
85119 #else
85120         "adc	r4, r6\n\t"
85121 #endif
85122         "stm	%[r]!, {r3, r4}\n\t"
85123         "ldm	%[b]!, {r5, r6}\n\t"
85124         "ldm	%[a]!, {r3, r4}\n\t"
85125 #ifdef WOLFSSL_KEIL
85126         "adcs	r3, r3, r5\n\t"
85127 #elif defined(__clang__)
85128         "adcs	r3, r5\n\t"
85129 #else
85130         "adc	r3, r5\n\t"
85131 #endif
85132 #ifdef WOLFSSL_KEIL
85133         "adcs	r4, r4, r6\n\t"
85134 #elif defined(__clang__)
85135         "adcs	r4, r6\n\t"
85136 #else
85137         "adc	r4, r6\n\t"
85138 #endif
85139         "stm	%[r]!, {r3, r4}\n\t"
85140         "ldm	%[b]!, {r5, r6}\n\t"
85141         "ldm	%[a]!, {r3, r4}\n\t"
85142 #ifdef WOLFSSL_KEIL
85143         "adcs	r3, r3, r5\n\t"
85144 #elif defined(__clang__)
85145         "adcs	r3, r5\n\t"
85146 #else
85147         "adc	r3, r5\n\t"
85148 #endif
85149 #ifdef WOLFSSL_KEIL
85150         "adcs	r4, r4, r6\n\t"
85151 #elif defined(__clang__)
85152         "adcs	r4, r6\n\t"
85153 #else
85154         "adc	r4, r6\n\t"
85155 #endif
85156         "stm	%[r]!, {r3, r4}\n\t"
85157         "ldm	%[b]!, {r5, r6}\n\t"
85158         "ldm	%[a]!, {r3, r4}\n\t"
85159 #ifdef WOLFSSL_KEIL
85160         "adcs	r3, r3, r5\n\t"
85161 #elif defined(__clang__)
85162         "adcs	r3, r5\n\t"
85163 #else
85164         "adc	r3, r5\n\t"
85165 #endif
85166 #ifdef WOLFSSL_KEIL
85167         "adcs	r4, r4, r6\n\t"
85168 #elif defined(__clang__)
85169         "adcs	r4, r6\n\t"
85170 #else
85171         "adc	r4, r6\n\t"
85172 #endif
85173         "stm	%[r]!, {r3, r4}\n\t"
85174         "ldm	%[b]!, {r5, r6}\n\t"
85175         "ldm	%[a]!, {r3, r4}\n\t"
85176 #ifdef WOLFSSL_KEIL
85177         "adcs	r3, r3, r5\n\t"
85178 #elif defined(__clang__)
85179         "adcs	r3, r5\n\t"
85180 #else
85181         "adc	r3, r5\n\t"
85182 #endif
85183 #ifdef WOLFSSL_KEIL
85184         "adcs	r4, r4, r6\n\t"
85185 #elif defined(__clang__)
85186         "adcs	r4, r6\n\t"
85187 #else
85188         "adc	r4, r6\n\t"
85189 #endif
85190         "stm	%[r]!, {r3, r4}\n\t"
85191         "ldm	%[b]!, {r5, r6}\n\t"
85192         "ldm	%[a]!, {r3, r4}\n\t"
85193 #ifdef WOLFSSL_KEIL
85194         "adcs	r3, r3, r5\n\t"
85195 #elif defined(__clang__)
85196         "adcs	r3, r5\n\t"
85197 #else
85198         "adc	r3, r5\n\t"
85199 #endif
85200 #ifdef WOLFSSL_KEIL
85201         "adcs	r4, r4, r6\n\t"
85202 #elif defined(__clang__)
85203         "adcs	r4, r6\n\t"
85204 #else
85205         "adc	r4, r6\n\t"
85206 #endif
85207         "stm	%[r]!, {r3, r4}\n\t"
85208         "ldm	%[b]!, {r5, r6}\n\t"
85209         "ldm	%[a]!, {r3, r4}\n\t"
85210 #ifdef WOLFSSL_KEIL
85211         "adcs	r3, r3, r5\n\t"
85212 #elif defined(__clang__)
85213         "adcs	r3, r5\n\t"
85214 #else
85215         "adc	r3, r5\n\t"
85216 #endif
85217 #ifdef WOLFSSL_KEIL
85218         "adcs	r4, r4, r6\n\t"
85219 #elif defined(__clang__)
85220         "adcs	r4, r6\n\t"
85221 #else
85222         "adc	r4, r6\n\t"
85223 #endif
85224         "stm	%[r]!, {r3, r4}\n\t"
85225         "ldm	%[b]!, {r5, r6}\n\t"
85226         "ldm	%[a]!, {r3, r4}\n\t"
85227 #ifdef WOLFSSL_KEIL
85228         "adcs	r3, r3, r5\n\t"
85229 #elif defined(__clang__)
85230         "adcs	r3, r5\n\t"
85231 #else
85232         "adc	r3, r5\n\t"
85233 #endif
85234 #ifdef WOLFSSL_KEIL
85235         "adcs	r4, r4, r6\n\t"
85236 #elif defined(__clang__)
85237         "adcs	r4, r6\n\t"
85238 #else
85239         "adc	r4, r6\n\t"
85240 #endif
85241         "stm	%[r]!, {r3, r4}\n\t"
85242         "ldm	%[b]!, {r5, r6}\n\t"
85243         "ldm	%[a]!, {r3, r4}\n\t"
85244 #ifdef WOLFSSL_KEIL
85245         "adcs	r3, r3, r5\n\t"
85246 #elif defined(__clang__)
85247         "adcs	r3, r5\n\t"
85248 #else
85249         "adc	r3, r5\n\t"
85250 #endif
85251 #ifdef WOLFSSL_KEIL
85252         "adcs	r4, r4, r6\n\t"
85253 #elif defined(__clang__)
85254         "adcs	r4, r6\n\t"
85255 #else
85256         "adc	r4, r6\n\t"
85257 #endif
85258         "stm	%[r]!, {r3, r4}\n\t"
85259         "ldm	%[b]!, {r5, r6}\n\t"
85260         "ldm	%[a]!, {r3, r4}\n\t"
85261 #ifdef WOLFSSL_KEIL
85262         "adcs	r3, r3, r5\n\t"
85263 #elif defined(__clang__)
85264         "adcs	r3, r5\n\t"
85265 #else
85266         "adc	r3, r5\n\t"
85267 #endif
85268 #ifdef WOLFSSL_KEIL
85269         "adcs	r4, r4, r6\n\t"
85270 #elif defined(__clang__)
85271         "adcs	r4, r6\n\t"
85272 #else
85273         "adc	r4, r6\n\t"
85274 #endif
85275         "stm	%[r]!, {r3, r4}\n\t"
85276         "ldm	%[b]!, {r5, r6}\n\t"
85277         "ldm	%[a]!, {r3, r4}\n\t"
85278 #ifdef WOLFSSL_KEIL
85279         "adcs	r3, r3, r5\n\t"
85280 #elif defined(__clang__)
85281         "adcs	r3, r5\n\t"
85282 #else
85283         "adc	r3, r5\n\t"
85284 #endif
85285 #ifdef WOLFSSL_KEIL
85286         "adcs	r4, r4, r6\n\t"
85287 #elif defined(__clang__)
85288         "adcs	r4, r6\n\t"
85289 #else
85290         "adc	r4, r6\n\t"
85291 #endif
85292         "stm	%[r]!, {r3, r4}\n\t"
85293         "ldm	%[b]!, {r5, r6}\n\t"
85294         "ldm	%[a]!, {r3, r4}\n\t"
85295 #ifdef WOLFSSL_KEIL
85296         "adcs	r3, r3, r5\n\t"
85297 #elif defined(__clang__)
85298         "adcs	r3, r5\n\t"
85299 #else
85300         "adc	r3, r5\n\t"
85301 #endif
85302 #ifdef WOLFSSL_KEIL
85303         "adcs	r4, r4, r6\n\t"
85304 #elif defined(__clang__)
85305         "adcs	r4, r6\n\t"
85306 #else
85307         "adc	r4, r6\n\t"
85308 #endif
85309         "stm	%[r]!, {r3, r4}\n\t"
85310         "ldm	%[b]!, {r5, r6}\n\t"
85311         "ldm	%[a]!, {r3, r4}\n\t"
85312 #ifdef WOLFSSL_KEIL
85313         "adcs	r3, r3, r5\n\t"
85314 #elif defined(__clang__)
85315         "adcs	r3, r5\n\t"
85316 #else
85317         "adc	r3, r5\n\t"
85318 #endif
85319 #ifdef WOLFSSL_KEIL
85320         "adcs	r4, r4, r6\n\t"
85321 #elif defined(__clang__)
85322         "adcs	r4, r6\n\t"
85323 #else
85324         "adc	r4, r6\n\t"
85325 #endif
85326         "stm	%[r]!, {r3, r4}\n\t"
85327         "ldm	%[b]!, {r5, r6}\n\t"
85328         "ldm	%[a]!, {r3, r4}\n\t"
85329 #ifdef WOLFSSL_KEIL
85330         "adcs	r3, r3, r5\n\t"
85331 #elif defined(__clang__)
85332         "adcs	r3, r5\n\t"
85333 #else
85334         "adc	r3, r5\n\t"
85335 #endif
85336 #ifdef WOLFSSL_KEIL
85337         "adcs	r4, r4, r6\n\t"
85338 #elif defined(__clang__)
85339         "adcs	r4, r6\n\t"
85340 #else
85341         "adc	r4, r6\n\t"
85342 #endif
85343         "stm	%[r]!, {r3, r4}\n\t"
85344         "ldm	%[b]!, {r5, r6}\n\t"
85345         "ldm	%[a]!, {r3, r4}\n\t"
85346 #ifdef WOLFSSL_KEIL
85347         "adcs	r3, r3, r5\n\t"
85348 #elif defined(__clang__)
85349         "adcs	r3, r5\n\t"
85350 #else
85351         "adc	r3, r5\n\t"
85352 #endif
85353 #ifdef WOLFSSL_KEIL
85354         "adcs	r4, r4, r6\n\t"
85355 #elif defined(__clang__)
85356         "adcs	r4, r6\n\t"
85357 #else
85358         "adc	r4, r6\n\t"
85359 #endif
85360         "stm	%[r]!, {r3, r4}\n\t"
85361         "ldm	%[b]!, {r5, r6}\n\t"
85362         "ldm	%[a]!, {r3, r4}\n\t"
85363 #ifdef WOLFSSL_KEIL
85364         "adcs	r3, r3, r5\n\t"
85365 #elif defined(__clang__)
85366         "adcs	r3, r5\n\t"
85367 #else
85368         "adc	r3, r5\n\t"
85369 #endif
85370 #ifdef WOLFSSL_KEIL
85371         "adcs	r4, r4, r6\n\t"
85372 #elif defined(__clang__)
85373         "adcs	r4, r6\n\t"
85374 #else
85375         "adc	r4, r6\n\t"
85376 #endif
85377         "stm	%[r]!, {r3, r4}\n\t"
85378         "ldm	%[b]!, {r5, r6}\n\t"
85379         "ldm	%[a]!, {r3, r4}\n\t"
85380 #ifdef WOLFSSL_KEIL
85381         "adcs	r3, r3, r5\n\t"
85382 #elif defined(__clang__)
85383         "adcs	r3, r5\n\t"
85384 #else
85385         "adc	r3, r5\n\t"
85386 #endif
85387 #ifdef WOLFSSL_KEIL
85388         "adcs	r4, r4, r6\n\t"
85389 #elif defined(__clang__)
85390         "adcs	r4, r6\n\t"
85391 #else
85392         "adc	r4, r6\n\t"
85393 #endif
85394         "stm	%[r]!, {r3, r4}\n\t"
85395         "ldm	%[b]!, {r5, r6}\n\t"
85396         "ldm	%[a]!, {r3, r4}\n\t"
85397 #ifdef WOLFSSL_KEIL
85398         "adcs	r3, r3, r5\n\t"
85399 #elif defined(__clang__)
85400         "adcs	r3, r5\n\t"
85401 #else
85402         "adc	r3, r5\n\t"
85403 #endif
85404 #ifdef WOLFSSL_KEIL
85405         "adcs	r4, r4, r6\n\t"
85406 #elif defined(__clang__)
85407         "adcs	r4, r6\n\t"
85408 #else
85409         "adc	r4, r6\n\t"
85410 #endif
85411         "stm	%[r]!, {r3, r4}\n\t"
85412         "ldm	%[b]!, {r5, r6}\n\t"
85413         "ldm	%[a]!, {r3, r4}\n\t"
85414 #ifdef WOLFSSL_KEIL
85415         "adcs	r3, r3, r5\n\t"
85416 #elif defined(__clang__)
85417         "adcs	r3, r5\n\t"
85418 #else
85419         "adc	r3, r5\n\t"
85420 #endif
85421 #ifdef WOLFSSL_KEIL
85422         "adcs	r4, r4, r6\n\t"
85423 #elif defined(__clang__)
85424         "adcs	r4, r6\n\t"
85425 #else
85426         "adc	r4, r6\n\t"
85427 #endif
85428         "stm	%[r]!, {r3, r4}\n\t"
85429         "ldm	%[b]!, {r5, r6}\n\t"
85430         "ldm	%[a]!, {r3, r4}\n\t"
85431 #ifdef WOLFSSL_KEIL
85432         "adcs	r3, r3, r5\n\t"
85433 #elif defined(__clang__)
85434         "adcs	r3, r5\n\t"
85435 #else
85436         "adc	r3, r5\n\t"
85437 #endif
85438 #ifdef WOLFSSL_KEIL
85439         "adcs	r4, r4, r6\n\t"
85440 #elif defined(__clang__)
85441         "adcs	r4, r6\n\t"
85442 #else
85443         "adc	r4, r6\n\t"
85444 #endif
85445         "stm	%[r]!, {r3, r4}\n\t"
85446         "ldm	%[b]!, {r5, r6}\n\t"
85447         "ldm	%[a]!, {r3, r4}\n\t"
85448 #ifdef WOLFSSL_KEIL
85449         "adcs	r3, r3, r5\n\t"
85450 #elif defined(__clang__)
85451         "adcs	r3, r5\n\t"
85452 #else
85453         "adc	r3, r5\n\t"
85454 #endif
85455 #ifdef WOLFSSL_KEIL
85456         "adcs	r4, r4, r6\n\t"
85457 #elif defined(__clang__)
85458         "adcs	r4, r6\n\t"
85459 #else
85460         "adc	r4, r6\n\t"
85461 #endif
85462         "stm	%[r]!, {r3, r4}\n\t"
85463         "ldm	%[b]!, {r5, r6}\n\t"
85464         "ldm	%[a]!, {r3, r4}\n\t"
85465 #ifdef WOLFSSL_KEIL
85466         "adcs	r3, r3, r5\n\t"
85467 #elif defined(__clang__)
85468         "adcs	r3, r5\n\t"
85469 #else
85470         "adc	r3, r5\n\t"
85471 #endif
85472 #ifdef WOLFSSL_KEIL
85473         "adcs	r4, r4, r6\n\t"
85474 #elif defined(__clang__)
85475         "adcs	r4, r6\n\t"
85476 #else
85477         "adc	r4, r6\n\t"
85478 #endif
85479         "stm	%[r]!, {r3, r4}\n\t"
85480         "ldm	%[b]!, {r5, r6}\n\t"
85481         "ldm	%[a]!, {r3, r4}\n\t"
85482 #ifdef WOLFSSL_KEIL
85483         "adcs	r3, r3, r5\n\t"
85484 #elif defined(__clang__)
85485         "adcs	r3, r5\n\t"
85486 #else
85487         "adc	r3, r5\n\t"
85488 #endif
85489 #ifdef WOLFSSL_KEIL
85490         "adcs	r4, r4, r6\n\t"
85491 #elif defined(__clang__)
85492         "adcs	r4, r6\n\t"
85493 #else
85494         "adc	r4, r6\n\t"
85495 #endif
85496         "stm	%[r]!, {r3, r4}\n\t"
85497         "ldm	%[b]!, {r5, r6}\n\t"
85498         "ldm	%[a]!, {r3, r4}\n\t"
85499 #ifdef WOLFSSL_KEIL
85500         "adcs	r3, r3, r5\n\t"
85501 #elif defined(__clang__)
85502         "adcs	r3, r5\n\t"
85503 #else
85504         "adc	r3, r5\n\t"
85505 #endif
85506 #ifdef WOLFSSL_KEIL
85507         "adcs	r4, r4, r6\n\t"
85508 #elif defined(__clang__)
85509         "adcs	r4, r6\n\t"
85510 #else
85511         "adc	r4, r6\n\t"
85512 #endif
85513         "stm	%[r]!, {r3, r4}\n\t"
85514         "ldm	%[b]!, {r5, r6}\n\t"
85515         "ldm	%[a]!, {r3, r4}\n\t"
85516 #ifdef WOLFSSL_KEIL
85517         "adcs	r3, r3, r5\n\t"
85518 #elif defined(__clang__)
85519         "adcs	r3, r5\n\t"
85520 #else
85521         "adc	r3, r5\n\t"
85522 #endif
85523 #ifdef WOLFSSL_KEIL
85524         "adcs	r4, r4, r6\n\t"
85525 #elif defined(__clang__)
85526         "adcs	r4, r6\n\t"
85527 #else
85528         "adc	r4, r6\n\t"
85529 #endif
85530         "stm	%[r]!, {r3, r4}\n\t"
85531         "movs	%[r], #0\n\t"
85532 #ifdef WOLFSSL_KEIL
85533         "adcs	%[r], %[r], %[r]\n\t"
85534 #elif defined(__clang__)
85535         "adcs	%[r], %[r]\n\t"
85536 #else
85537         "adc	%[r], %[r]\n\t"
85538 #endif
85539         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
85540         :
85541         : "memory", "r3", "r4", "r5", "r6"
85542     );
85543     return (uint32_t)(size_t)r;
85544 }
85545 
85546 /* Multiply a and b into r. (r = a * b)
85547  *
85548  * r  A single precision integer.
85549  * a  A single precision integer.
85550  * b  A single precision integer.
85551  */
sp_4096_mul_128(sp_digit * r,const sp_digit * a,const sp_digit * b)85552 SP_NOINLINE static void sp_4096_mul_128(sp_digit* r, const sp_digit* a,
85553         const sp_digit* b)
85554 {
85555     sp_digit* z0 = r;
85556     sp_digit z1[128];
85557     sp_digit a1[64];
85558     sp_digit b1[64];
85559     sp_digit z2[128];
85560     sp_digit u;
85561     sp_digit ca;
85562     sp_digit cb;
85563 
85564     ca = sp_2048_add_64(a1, a, &a[64]);
85565     cb = sp_2048_add_64(b1, b, &b[64]);
85566     u  = ca & cb;
85567     sp_2048_mul_64(z1, a1, b1);
85568     sp_2048_mul_64(z2, &a[64], &b[64]);
85569     sp_2048_mul_64(z0, a, b);
85570     sp_2048_mask_64(r + 128, a1, 0 - cb);
85571     sp_2048_mask_64(b1, b1, 0 - ca);
85572     u += sp_2048_add_64(r + 128, r + 128, b1);
85573     u += sp_4096_sub_in_place_128(z1, z2);
85574     u += sp_4096_sub_in_place_128(z1, z0);
85575     u += sp_4096_add_128(r + 64, r + 64, z1);
85576     u += sp_4096_add_64(r + 128, r + 128, z2);
85577     (void)sp_4096_add_to_word_64(r + 192, u, z2 + 64);
85578 }
85579 
85580 /* Square a and put result in r. (r = a * a)
85581  *
85582  * r  A single precision integer.
85583  * a  A single precision integer.
85584  */
sp_4096_sqr_128(sp_digit * r,const sp_digit * a)85585 SP_NOINLINE static void sp_4096_sqr_128(sp_digit* r, const sp_digit* a)
85586 {
85587     sp_digit* z0 = r;
85588     sp_digit z2[128];
85589     sp_digit z1[128];
85590     sp_digit a1[64];
85591     sp_digit u;
85592 
85593     u = sp_2048_add_64(a1, a, &a[64]);
85594     sp_2048_sqr_64(z1, a1);
85595     sp_2048_sqr_64(z2, &a[64]);
85596     sp_2048_sqr_64(z0, a);
85597     sp_2048_mask_64(r + 128, a1, 0 - u);
85598     u += sp_2048_dbl_64(r + 128, r + 128);
85599     u += sp_4096_sub_in_place_128(z1, z2);
85600     u += sp_4096_sub_in_place_128(z1, z0);
85601     u += sp_4096_add_128(r + 64, r + 64, z1);
85602     u += sp_4096_add_64(r + 128, r + 128, z2);
85603     (void)sp_4096_add_to_word_64(r + 192, u, z2 + 64);
85604 }
85605 
85606 #endif /* !WOLFSSL_SP_SMALL */
85607 #ifdef WOLFSSL_SP_SMALL
85608 /* Add b to a into r. (r = a + b)
85609  *
85610  * r  A single precision integer.
85611  * a  A single precision integer.
85612  * b  A single precision integer.
85613  */
sp_4096_add_128(sp_digit * r,const sp_digit * a,const sp_digit * b)85614 SP_NOINLINE static sp_digit sp_4096_add_128(sp_digit* r, const sp_digit* a,
85615         const sp_digit* b)
85616 {
85617     __asm__ __volatile__ (
85618         "movs	r6, %[a]\n\t"
85619         "movs	r7, #0\n\t"
85620         "movs	r3, #0\n\t"
85621         "movs	r4, #2\n\t"
85622 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85623         "lsls	r4, r4, #8\n\t"
85624 #else
85625         "lsl	r4, r4, #8\n\t"
85626 #endif
85627 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85628         "subs	r7, r7, #1\n\t"
85629 #else
85630         "sub	r7, r7, #1\n\t"
85631 #endif
85632 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85633         "adds	r6, r6, r4\n\t"
85634 #else
85635         "add	r6, r6, r4\n\t"
85636 #endif
85637         "\n"
85638     "L_sp_4096_add_128_word_%=:\n\t"
85639 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85640         "adds	r3, r3, r7\n\t"
85641 #else
85642         "add	r3, r3, r7\n\t"
85643 #endif
85644         "ldr	r4, [%[a]]\n\t"
85645         "ldr	r5, [%[b]]\n\t"
85646 #ifdef WOLFSSL_KEIL
85647         "adcs	r4, r4, r5\n\t"
85648 #elif defined(__clang__)
85649         "adcs	r4, r5\n\t"
85650 #else
85651         "adc	r4, r5\n\t"
85652 #endif
85653         "str	r4, [%[r]]\n\t"
85654         "movs	r3, #0\n\t"
85655 #ifdef WOLFSSL_KEIL
85656         "adcs	r3, r3, r3\n\t"
85657 #elif defined(__clang__)
85658         "adcs	r3, r3\n\t"
85659 #else
85660         "adc	r3, r3\n\t"
85661 #endif
85662 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85663         "adds	%[a], %[a], #4\n\t"
85664 #else
85665         "add	%[a], %[a], #4\n\t"
85666 #endif
85667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85668         "adds	%[b], %[b], #4\n\t"
85669 #else
85670         "add	%[b], %[b], #4\n\t"
85671 #endif
85672 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85673         "adds	%[r], %[r], #4\n\t"
85674 #else
85675         "add	%[r], %[r], #4\n\t"
85676 #endif
85677         "cmp	%[a], r6\n\t"
85678         "bne	L_sp_4096_add_128_word_%=\n\t"
85679         "movs	%[r], r3\n\t"
85680         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
85681         :
85682         : "memory", "r3", "r4", "r5", "r6", "r7"
85683     );
85684     return (uint32_t)(size_t)r;
85685 }
85686 
85687 #endif /* WOLFSSL_SP_SMALL */
85688 #ifdef WOLFSSL_SP_SMALL
85689 /* Sub b from a into a. (a -= b)
85690  *
85691  * a  A single precision integer.
85692  * b  A single precision integer.
85693  */
sp_4096_sub_in_place_128(sp_digit * a,const sp_digit * b)85694 SP_NOINLINE static sp_digit sp_4096_sub_in_place_128(sp_digit* a,
85695         const sp_digit* b)
85696 {
85697     __asm__ __volatile__ (
85698         "movs	r7, %[a]\n\t"
85699         "movs	r2, #0\n\t"
85700         "movs	r5, #2\n\t"
85701 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85702         "lsls	r5, r5, #8\n\t"
85703 #else
85704         "lsl	r5, r5, #8\n\t"
85705 #endif
85706 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85707         "adds	r7, r7, r5\n\t"
85708 #else
85709         "add	r7, r7, r5\n\t"
85710 #endif
85711         "\n"
85712     "L_sp_4096_sub_in_place_128_words_%=:\n\t"
85713         "movs	r5, #0\n\t"
85714 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85715         "subs	r5, r5, r2\n\t"
85716 #else
85717         "sub	r5, r5, r2\n\t"
85718 #endif
85719         "ldr	r3, [%[a]]\n\t"
85720         "ldr	r4, [%[a], #4]\n\t"
85721         "ldr	r5, [%[b]]\n\t"
85722         "ldr	r6, [%[b], #4]\n\t"
85723 #ifdef WOLFSSL_KEIL
85724         "sbcs	r3, r3, r5\n\t"
85725 #elif defined(__clang__)
85726         "sbcs	r3, r5\n\t"
85727 #else
85728         "sbc	r3, r5\n\t"
85729 #endif
85730 #ifdef WOLFSSL_KEIL
85731         "sbcs	r4, r4, r6\n\t"
85732 #elif defined(__clang__)
85733         "sbcs	r4, r6\n\t"
85734 #else
85735         "sbc	r4, r6\n\t"
85736 #endif
85737         "str	r3, [%[a]]\n\t"
85738         "str	r4, [%[a], #4]\n\t"
85739 #ifdef WOLFSSL_KEIL
85740         "sbcs	r2, r2, r2\n\t"
85741 #elif defined(__clang__)
85742         "sbcs	r2, r2\n\t"
85743 #else
85744         "sbc	r2, r2\n\t"
85745 #endif
85746 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85747         "adds	%[a], %[a], #8\n\t"
85748 #else
85749         "add	%[a], %[a], #8\n\t"
85750 #endif
85751 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85752         "adds	%[b], %[b], #8\n\t"
85753 #else
85754         "add	%[b], %[b], #8\n\t"
85755 #endif
85756         "cmp	%[a], r7\n\t"
85757         "bne	L_sp_4096_sub_in_place_128_words_%=\n\t"
85758         "movs	%[a], r2\n\t"
85759         : [a] "+r" (a), [b] "+r" (b)
85760         :
85761         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
85762     );
85763     return (uint32_t)(size_t)a;
85764 }
85765 
85766 #endif /* WOLFSSL_SP_SMALL */
85767 #ifdef WOLFSSL_SP_SMALL
85768 /* Multiply a and b into r. (r = a * b)
85769  *
85770  * r  A single precision integer.
85771  * a  A single precision integer.
85772  * b  A single precision integer.
85773  */
sp_4096_mul_128(sp_digit * r,const sp_digit * a,const sp_digit * b)85774 SP_NOINLINE static void sp_4096_mul_128(sp_digit* r, const sp_digit* a,
85775         const sp_digit* b)
85776 {
85777     sp_digit t[128 * 2];
85778     sp_digit* tmp = t;
85779     __asm__ __volatile__ (
85780         "movs	r3, #0\n\t"
85781         "movs	r4, #0\n\t"
85782         "mov	r8, r3\n\t"
85783         "mov	r11, %[tmp]\n\t"
85784         "mov	r9, %[a]\n\t"
85785         "mov	r10, %[b]\n\t"
85786         "movs	r6, #2\n\t"
85787 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85788         "lsls	r6, r6, #8\n\t"
85789 #else
85790         "lsl	r6, r6, #8\n\t"
85791 #endif
85792         "add	r6, r6, r9\n\t"
85793         "mov	r12, r6\n\t"
85794         "\n"
85795     "L_sp_4096_mul_128_words_%=:\n\t"
85796         "movs	%[tmp], #0\n\t"
85797         "movs	r5, #0\n\t"
85798         "movs	r6, #0xff\n\t"
85799 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85800         "adds	r6, r6, #0xfd\n\t"
85801 #else
85802         "add	r6, r6, #0xfd\n\t"
85803 #endif
85804         "mov	%[a], r8\n\t"
85805 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85806         "subs	%[a], %[a], r6\n\t"
85807 #else
85808         "sub	%[a], %[a], r6\n\t"
85809 #endif
85810 #ifdef WOLFSSL_KEIL
85811         "sbcs	r6, r6, r6\n\t"
85812 #elif defined(__clang__)
85813         "sbcs	r6, r6\n\t"
85814 #else
85815         "sbc	r6, r6\n\t"
85816 #endif
85817 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85818         "mvns	r6, r6\n\t"
85819 #else
85820         "mvn	r6, r6\n\t"
85821 #endif
85822 #ifdef WOLFSSL_KEIL
85823         "ands	%[a], %[a], r6\n\t"
85824 #elif defined(__clang__)
85825         "ands	%[a], r6\n\t"
85826 #else
85827         "and	%[a], r6\n\t"
85828 #endif
85829         "mov	%[b], r8\n\t"
85830 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85831         "subs	%[b], %[b], %[a]\n\t"
85832 #else
85833         "sub	%[b], %[b], %[a]\n\t"
85834 #endif
85835         "add	%[a], %[a], r9\n\t"
85836         "add	%[b], %[b], r10\n\t"
85837         "\n"
85838     "L_sp_4096_mul_128_mul_%=:\n\t"
85839         "# Multiply Start\n\t"
85840         "ldrh	r6, [%[a]]\n\t"
85841         "ldrh	r7, [%[b]]\n\t"
85842 #ifdef WOLFSSL_KEIL
85843         "muls	r7, r6, r7\n\t"
85844 #elif defined(__clang__)
85845         "muls	r7, r6\n\t"
85846 #else
85847         "mul	r7, r6\n\t"
85848 #endif
85849 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85850         "adds	r3, r3, r7\n\t"
85851 #else
85852         "add	r3, r3, r7\n\t"
85853 #endif
85854 #ifdef WOLFSSL_KEIL
85855         "adcs	r4, r4, %[tmp]\n\t"
85856 #elif defined(__clang__)
85857         "adcs	r4, %[tmp]\n\t"
85858 #else
85859         "adc	r4, %[tmp]\n\t"
85860 #endif
85861 #ifdef WOLFSSL_KEIL
85862         "adcs	r5, r5, %[tmp]\n\t"
85863 #elif defined(__clang__)
85864         "adcs	r5, %[tmp]\n\t"
85865 #else
85866         "adc	r5, %[tmp]\n\t"
85867 #endif
85868         "ldr	r7, [%[b]]\n\t"
85869 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85870         "lsrs	r7, r7, #16\n\t"
85871 #else
85872         "lsr	r7, r7, #16\n\t"
85873 #endif
85874 #ifdef WOLFSSL_KEIL
85875         "muls	r6, r7, r6\n\t"
85876 #elif defined(__clang__)
85877         "muls	r6, r7\n\t"
85878 #else
85879         "mul	r6, r7\n\t"
85880 #endif
85881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85882         "lsrs	r7, r6, #16\n\t"
85883 #else
85884         "lsr	r7, r6, #16\n\t"
85885 #endif
85886 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85887         "lsls	r6, r6, #16\n\t"
85888 #else
85889         "lsl	r6, r6, #16\n\t"
85890 #endif
85891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85892         "adds	r3, r3, r6\n\t"
85893 #else
85894         "add	r3, r3, r6\n\t"
85895 #endif
85896 #ifdef WOLFSSL_KEIL
85897         "adcs	r4, r4, r7\n\t"
85898 #elif defined(__clang__)
85899         "adcs	r4, r7\n\t"
85900 #else
85901         "adc	r4, r7\n\t"
85902 #endif
85903 #ifdef WOLFSSL_KEIL
85904         "adcs	r5, r5, %[tmp]\n\t"
85905 #elif defined(__clang__)
85906         "adcs	r5, %[tmp]\n\t"
85907 #else
85908         "adc	r5, %[tmp]\n\t"
85909 #endif
85910         "ldr	r6, [%[a]]\n\t"
85911         "ldr	r7, [%[b]]\n\t"
85912 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85913         "lsrs	r6, r6, #16\n\t"
85914 #else
85915         "lsr	r6, r6, #16\n\t"
85916 #endif
85917 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85918         "lsrs	r7, r7, #16\n\t"
85919 #else
85920         "lsr	r7, r7, #16\n\t"
85921 #endif
85922 #ifdef WOLFSSL_KEIL
85923         "muls	r7, r6, r7\n\t"
85924 #elif defined(__clang__)
85925         "muls	r7, r6\n\t"
85926 #else
85927         "mul	r7, r6\n\t"
85928 #endif
85929 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85930         "adds	r4, r4, r7\n\t"
85931 #else
85932         "add	r4, r4, r7\n\t"
85933 #endif
85934 #ifdef WOLFSSL_KEIL
85935         "adcs	r5, r5, %[tmp]\n\t"
85936 #elif defined(__clang__)
85937         "adcs	r5, %[tmp]\n\t"
85938 #else
85939         "adc	r5, %[tmp]\n\t"
85940 #endif
85941         "ldrh	r7, [%[b]]\n\t"
85942 #ifdef WOLFSSL_KEIL
85943         "muls	r6, r7, r6\n\t"
85944 #elif defined(__clang__)
85945         "muls	r6, r7\n\t"
85946 #else
85947         "mul	r6, r7\n\t"
85948 #endif
85949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85950         "lsrs	r7, r6, #16\n\t"
85951 #else
85952         "lsr	r7, r6, #16\n\t"
85953 #endif
85954 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85955         "lsls	r6, r6, #16\n\t"
85956 #else
85957         "lsl	r6, r6, #16\n\t"
85958 #endif
85959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85960         "adds	r3, r3, r6\n\t"
85961 #else
85962         "add	r3, r3, r6\n\t"
85963 #endif
85964 #ifdef WOLFSSL_KEIL
85965         "adcs	r4, r4, r7\n\t"
85966 #elif defined(__clang__)
85967         "adcs	r4, r7\n\t"
85968 #else
85969         "adc	r4, r7\n\t"
85970 #endif
85971 #ifdef WOLFSSL_KEIL
85972         "adcs	r5, r5, %[tmp]\n\t"
85973 #elif defined(__clang__)
85974         "adcs	r5, %[tmp]\n\t"
85975 #else
85976         "adc	r5, %[tmp]\n\t"
85977 #endif
85978         "# Multiply Done\n\t"
85979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85980         "adds	%[a], %[a], #4\n\t"
85981 #else
85982         "add	%[a], %[a], #4\n\t"
85983 #endif
85984 #if defined(__clang__) || defined(WOLFSSL_KEIL)
85985         "subs	%[b], %[b], #4\n\t"
85986 #else
85987         "sub	%[b], %[b], #4\n\t"
85988 #endif
85989         "cmp	%[a], r12\n\t"
85990         "beq	L_sp_4096_mul_128_done_mul_%=\n\t"
85991         "mov	r6, r8\n\t"
85992         "add	r6, r6, r9\n\t"
85993         "cmp	%[a], r6\n\t"
85994         "ble	L_sp_4096_mul_128_mul_%=\n\t"
85995         "\n"
85996     "L_sp_4096_mul_128_done_mul_%=:\n\t"
85997         "mov	%[tmp], r11\n\t"
85998         "mov	r7, r8\n\t"
85999         "str	r3, [%[tmp], r7]\n\t"
86000         "movs	r3, r4\n\t"
86001         "movs	r4, r5\n\t"
86002 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86003         "adds	r7, r7, #4\n\t"
86004 #else
86005         "add	r7, r7, #4\n\t"
86006 #endif
86007         "mov	r8, r7\n\t"
86008         "movs	r6, #3\n\t"
86009 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86010         "lsls	r6, r6, #8\n\t"
86011 #else
86012         "lsl	r6, r6, #8\n\t"
86013 #endif
86014 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86015         "adds	r6, r6, #0xf8\n\t"
86016 #else
86017         "add	r6, r6, #0xf8\n\t"
86018 #endif
86019         "cmp	r7, r6\n\t"
86020         "ble	L_sp_4096_mul_128_words_%=\n\t"
86021         "str	r3, [%[tmp], r7]\n\t"
86022         "mov	%[a], r9\n\t"
86023         "mov	%[b], r10\n\t"
86024         : [a] "+r" (a), [b] "+r" (b), [tmp] "+r" (tmp)
86025         :
86026         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
86027     );
86028 
86029     XMEMCPY(r, t, sizeof(t));
86030 }
86031 
86032 /* Square a and put result in r. (r = a * a)
86033  *
86034  * r  A single precision integer.
86035  * a  A single precision integer.
86036  */
sp_4096_sqr_128(sp_digit * r,const sp_digit * a)86037 SP_NOINLINE static void sp_4096_sqr_128(sp_digit* r, const sp_digit* a)
86038 {
86039     __asm__ __volatile__ (
86040         "movs	r3, #0\n\t"
86041         "movs	r4, #0\n\t"
86042         "movs	r5, #0\n\t"
86043         "mov	r8, r3\n\t"
86044         "mov	r11, %[r]\n\t"
86045         "movs	r6, #4\n\t"
86046 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86047         "lsls	r6, r6, #8\n\t"
86048 #else
86049         "lsl	r6, r6, #8\n\t"
86050 #endif
86051 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86052         "negs	r6, r6\n\t"
86053 #else
86054         "neg	r6, r6\n\t"
86055 #endif
86056         "add	sp, sp, r6\n\t"
86057         "mov	r10, sp\n\t"
86058         "mov	r9, %[a]\n\t"
86059         "\n"
86060     "L_sp_4096_sqr_128_words_%=:\n\t"
86061         "movs	%[r], #0\n\t"
86062         "movs	r6, #0xff\n\t"
86063 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86064         "adds	r6, r6, #0xfd\n\t"
86065 #else
86066         "add	r6, r6, #0xfd\n\t"
86067 #endif
86068         "mov	%[a], r8\n\t"
86069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86070         "subs	%[a], %[a], r6\n\t"
86071 #else
86072         "sub	%[a], %[a], r6\n\t"
86073 #endif
86074 #ifdef WOLFSSL_KEIL
86075         "sbcs	r6, r6, r6\n\t"
86076 #elif defined(__clang__)
86077         "sbcs	r6, r6\n\t"
86078 #else
86079         "sbc	r6, r6\n\t"
86080 #endif
86081 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86082         "mvns	r6, r6\n\t"
86083 #else
86084         "mvn	r6, r6\n\t"
86085 #endif
86086 #ifdef WOLFSSL_KEIL
86087         "ands	%[a], %[a], r6\n\t"
86088 #elif defined(__clang__)
86089         "ands	%[a], r6\n\t"
86090 #else
86091         "and	%[a], r6\n\t"
86092 #endif
86093         "mov	r2, r8\n\t"
86094 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86095         "subs	r2, r2, %[a]\n\t"
86096 #else
86097         "sub	r2, r2, %[a]\n\t"
86098 #endif
86099         "add	%[a], %[a], r9\n\t"
86100         "add	r2, r2, r9\n\t"
86101         "\n"
86102     "L_sp_4096_sqr_128_mul_%=:\n\t"
86103         "cmp	r2, %[a]\n\t"
86104         "beq	L_sp_4096_sqr_128_sqr_%=\n\t"
86105         "# Multiply * 2: Start\n\t"
86106         "ldrh	r6, [%[a]]\n\t"
86107         "ldrh	r7, [r2]\n\t"
86108 #ifdef WOLFSSL_KEIL
86109         "muls	r7, r6, r7\n\t"
86110 #elif defined(__clang__)
86111         "muls	r7, r6\n\t"
86112 #else
86113         "mul	r7, r6\n\t"
86114 #endif
86115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86116         "adds	r3, r3, r7\n\t"
86117 #else
86118         "add	r3, r3, r7\n\t"
86119 #endif
86120 #ifdef WOLFSSL_KEIL
86121         "adcs	r4, r4, %[r]\n\t"
86122 #elif defined(__clang__)
86123         "adcs	r4, %[r]\n\t"
86124 #else
86125         "adc	r4, %[r]\n\t"
86126 #endif
86127 #ifdef WOLFSSL_KEIL
86128         "adcs	r5, r5, %[r]\n\t"
86129 #elif defined(__clang__)
86130         "adcs	r5, %[r]\n\t"
86131 #else
86132         "adc	r5, %[r]\n\t"
86133 #endif
86134 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86135         "adds	r3, r3, r7\n\t"
86136 #else
86137         "add	r3, r3, r7\n\t"
86138 #endif
86139 #ifdef WOLFSSL_KEIL
86140         "adcs	r4, r4, %[r]\n\t"
86141 #elif defined(__clang__)
86142         "adcs	r4, %[r]\n\t"
86143 #else
86144         "adc	r4, %[r]\n\t"
86145 #endif
86146 #ifdef WOLFSSL_KEIL
86147         "adcs	r5, r5, %[r]\n\t"
86148 #elif defined(__clang__)
86149         "adcs	r5, %[r]\n\t"
86150 #else
86151         "adc	r5, %[r]\n\t"
86152 #endif
86153         "ldr	r7, [r2]\n\t"
86154 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86155         "lsrs	r7, r7, #16\n\t"
86156 #else
86157         "lsr	r7, r7, #16\n\t"
86158 #endif
86159 #ifdef WOLFSSL_KEIL
86160         "muls	r6, r7, r6\n\t"
86161 #elif defined(__clang__)
86162         "muls	r6, r7\n\t"
86163 #else
86164         "mul	r6, r7\n\t"
86165 #endif
86166 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86167         "lsrs	r7, r6, #16\n\t"
86168 #else
86169         "lsr	r7, r6, #16\n\t"
86170 #endif
86171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86172         "lsls	r6, r6, #16\n\t"
86173 #else
86174         "lsl	r6, r6, #16\n\t"
86175 #endif
86176 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86177         "adds	r3, r3, r6\n\t"
86178 #else
86179         "add	r3, r3, r6\n\t"
86180 #endif
86181 #ifdef WOLFSSL_KEIL
86182         "adcs	r4, r4, r7\n\t"
86183 #elif defined(__clang__)
86184         "adcs	r4, r7\n\t"
86185 #else
86186         "adc	r4, r7\n\t"
86187 #endif
86188 #ifdef WOLFSSL_KEIL
86189         "adcs	r5, r5, %[r]\n\t"
86190 #elif defined(__clang__)
86191         "adcs	r5, %[r]\n\t"
86192 #else
86193         "adc	r5, %[r]\n\t"
86194 #endif
86195 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86196         "adds	r3, r3, r6\n\t"
86197 #else
86198         "add	r3, r3, r6\n\t"
86199 #endif
86200 #ifdef WOLFSSL_KEIL
86201         "adcs	r4, r4, r7\n\t"
86202 #elif defined(__clang__)
86203         "adcs	r4, r7\n\t"
86204 #else
86205         "adc	r4, r7\n\t"
86206 #endif
86207 #ifdef WOLFSSL_KEIL
86208         "adcs	r5, r5, %[r]\n\t"
86209 #elif defined(__clang__)
86210         "adcs	r5, %[r]\n\t"
86211 #else
86212         "adc	r5, %[r]\n\t"
86213 #endif
86214         "ldr	r6, [%[a]]\n\t"
86215         "ldr	r7, [r2]\n\t"
86216 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86217         "lsrs	r6, r6, #16\n\t"
86218 #else
86219         "lsr	r6, r6, #16\n\t"
86220 #endif
86221 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86222         "lsrs	r7, r7, #16\n\t"
86223 #else
86224         "lsr	r7, r7, #16\n\t"
86225 #endif
86226 #ifdef WOLFSSL_KEIL
86227         "muls	r7, r6, r7\n\t"
86228 #elif defined(__clang__)
86229         "muls	r7, r6\n\t"
86230 #else
86231         "mul	r7, r6\n\t"
86232 #endif
86233 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86234         "adds	r4, r4, r7\n\t"
86235 #else
86236         "add	r4, r4, r7\n\t"
86237 #endif
86238 #ifdef WOLFSSL_KEIL
86239         "adcs	r5, r5, %[r]\n\t"
86240 #elif defined(__clang__)
86241         "adcs	r5, %[r]\n\t"
86242 #else
86243         "adc	r5, %[r]\n\t"
86244 #endif
86245 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86246         "adds	r4, r4, r7\n\t"
86247 #else
86248         "add	r4, r4, r7\n\t"
86249 #endif
86250 #ifdef WOLFSSL_KEIL
86251         "adcs	r5, r5, %[r]\n\t"
86252 #elif defined(__clang__)
86253         "adcs	r5, %[r]\n\t"
86254 #else
86255         "adc	r5, %[r]\n\t"
86256 #endif
86257         "ldrh	r7, [r2]\n\t"
86258 #ifdef WOLFSSL_KEIL
86259         "muls	r6, r7, r6\n\t"
86260 #elif defined(__clang__)
86261         "muls	r6, r7\n\t"
86262 #else
86263         "mul	r6, r7\n\t"
86264 #endif
86265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86266         "lsrs	r7, r6, #16\n\t"
86267 #else
86268         "lsr	r7, r6, #16\n\t"
86269 #endif
86270 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86271         "lsls	r6, r6, #16\n\t"
86272 #else
86273         "lsl	r6, r6, #16\n\t"
86274 #endif
86275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86276         "adds	r3, r3, r6\n\t"
86277 #else
86278         "add	r3, r3, r6\n\t"
86279 #endif
86280 #ifdef WOLFSSL_KEIL
86281         "adcs	r4, r4, r7\n\t"
86282 #elif defined(__clang__)
86283         "adcs	r4, r7\n\t"
86284 #else
86285         "adc	r4, r7\n\t"
86286 #endif
86287 #ifdef WOLFSSL_KEIL
86288         "adcs	r5, r5, %[r]\n\t"
86289 #elif defined(__clang__)
86290         "adcs	r5, %[r]\n\t"
86291 #else
86292         "adc	r5, %[r]\n\t"
86293 #endif
86294 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86295         "adds	r3, r3, r6\n\t"
86296 #else
86297         "add	r3, r3, r6\n\t"
86298 #endif
86299 #ifdef WOLFSSL_KEIL
86300         "adcs	r4, r4, r7\n\t"
86301 #elif defined(__clang__)
86302         "adcs	r4, r7\n\t"
86303 #else
86304         "adc	r4, r7\n\t"
86305 #endif
86306 #ifdef WOLFSSL_KEIL
86307         "adcs	r5, r5, %[r]\n\t"
86308 #elif defined(__clang__)
86309         "adcs	r5, %[r]\n\t"
86310 #else
86311         "adc	r5, %[r]\n\t"
86312 #endif
86313         "# Multiply * 2: Done\n\t"
86314         "bal	L_sp_4096_sqr_128_done_sqr_%=\n\t"
86315         "\n"
86316     "L_sp_4096_sqr_128_sqr_%=:\n\t"
86317         "mov	r12, r2\n\t"
86318         "ldr	r2, [%[a]]\n\t"
86319         "# Square: Start\n\t"
86320 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86321         "lsrs	r7, r2, #16\n\t"
86322 #else
86323         "lsr	r7, r2, #16\n\t"
86324 #endif
86325         "uxth	r6, r2\n\t"
86326 #ifdef WOLFSSL_KEIL
86327         "muls	r6, r6, r6\n\t"
86328 #elif defined(__clang__)
86329         "muls	r6, r6\n\t"
86330 #else
86331         "mul	r6, r6\n\t"
86332 #endif
86333 #ifdef WOLFSSL_KEIL
86334         "muls	r7, r7, r7\n\t"
86335 #elif defined(__clang__)
86336         "muls	r7, r7\n\t"
86337 #else
86338         "mul	r7, r7\n\t"
86339 #endif
86340 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86341         "adds	r3, r3, r6\n\t"
86342 #else
86343         "add	r3, r3, r6\n\t"
86344 #endif
86345 #ifdef WOLFSSL_KEIL
86346         "adcs	r4, r4, r7\n\t"
86347 #elif defined(__clang__)
86348         "adcs	r4, r7\n\t"
86349 #else
86350         "adc	r4, r7\n\t"
86351 #endif
86352 #ifdef WOLFSSL_KEIL
86353         "adcs	r5, r5, %[r]\n\t"
86354 #elif defined(__clang__)
86355         "adcs	r5, %[r]\n\t"
86356 #else
86357         "adc	r5, %[r]\n\t"
86358 #endif
86359 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86360         "lsrs	r7, r2, #16\n\t"
86361 #else
86362         "lsr	r7, r2, #16\n\t"
86363 #endif
86364         "uxth	r6, r2\n\t"
86365 #ifdef WOLFSSL_KEIL
86366         "muls	r6, r7, r6\n\t"
86367 #elif defined(__clang__)
86368         "muls	r6, r7\n\t"
86369 #else
86370         "mul	r6, r7\n\t"
86371 #endif
86372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86373         "lsrs	r7, r6, #15\n\t"
86374 #else
86375         "lsr	r7, r6, #15\n\t"
86376 #endif
86377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86378         "lsls	r6, r6, #17\n\t"
86379 #else
86380         "lsl	r6, r6, #17\n\t"
86381 #endif
86382 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86383         "adds	r3, r3, r6\n\t"
86384 #else
86385         "add	r3, r3, r6\n\t"
86386 #endif
86387 #ifdef WOLFSSL_KEIL
86388         "adcs	r4, r4, r7\n\t"
86389 #elif defined(__clang__)
86390         "adcs	r4, r7\n\t"
86391 #else
86392         "adc	r4, r7\n\t"
86393 #endif
86394 #ifdef WOLFSSL_KEIL
86395         "adcs	r5, r5, %[r]\n\t"
86396 #elif defined(__clang__)
86397         "adcs	r5, %[r]\n\t"
86398 #else
86399         "adc	r5, %[r]\n\t"
86400 #endif
86401         "# Square: Done\n\t"
86402         "mov	r2, r12\n\t"
86403         "\n"
86404     "L_sp_4096_sqr_128_done_sqr_%=:\n\t"
86405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86406         "adds	%[a], %[a], #4\n\t"
86407 #else
86408         "add	%[a], %[a], #4\n\t"
86409 #endif
86410 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86411         "subs	r2, r2, #4\n\t"
86412 #else
86413         "sub	r2, r2, #4\n\t"
86414 #endif
86415         "movs	r6, #2\n\t"
86416 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86417         "lsls	r6, r6, #8\n\t"
86418 #else
86419         "lsl	r6, r6, #8\n\t"
86420 #endif
86421         "add	r6, r6, r9\n\t"
86422         "cmp	%[a], r6\n\t"
86423         "beq	L_sp_4096_sqr_128_done_mul_%=\n\t"
86424         "cmp	%[a], r2\n\t"
86425         "bgt	L_sp_4096_sqr_128_done_mul_%=\n\t"
86426         "mov	r7, r8\n\t"
86427         "add	r7, r7, r9\n\t"
86428         "cmp	%[a], r7\n\t"
86429         "ble	L_sp_4096_sqr_128_mul_%=\n\t"
86430         "\n"
86431     "L_sp_4096_sqr_128_done_mul_%=:\n\t"
86432         "mov	%[r], r10\n\t"
86433         "mov	r7, r8\n\t"
86434         "str	r3, [%[r], r7]\n\t"
86435         "movs	r3, r4\n\t"
86436         "movs	r4, r5\n\t"
86437         "movs	r5, #0\n\t"
86438 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86439         "adds	r7, r7, #4\n\t"
86440 #else
86441         "add	r7, r7, #4\n\t"
86442 #endif
86443         "mov	r8, r7\n\t"
86444         "movs	r6, #3\n\t"
86445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86446         "lsls	r6, r6, #8\n\t"
86447 #else
86448         "lsl	r6, r6, #8\n\t"
86449 #endif
86450 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86451         "adds	r6, r6, #0xf8\n\t"
86452 #else
86453         "add	r6, r6, #0xf8\n\t"
86454 #endif
86455         "cmp	r7, r6\n\t"
86456         "ble	L_sp_4096_sqr_128_words_%=\n\t"
86457         "mov	%[a], r9\n\t"
86458         "str	r3, [%[r], r7]\n\t"
86459         "mov	%[r], r11\n\t"
86460         "mov	%[a], r10\n\t"
86461         "movs	r3, #3\n\t"
86462 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86463         "lsls	r3, r3, #8\n\t"
86464 #else
86465         "lsl	r3, r3, #8\n\t"
86466 #endif
86467 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86468         "adds	r3, r3, #0xfc\n\t"
86469 #else
86470         "add	r3, r3, #0xfc\n\t"
86471 #endif
86472         "\n"
86473     "L_sp_4096_sqr_128_store_%=:\n\t"
86474         "ldr	r6, [%[a], r3]\n\t"
86475         "str	r6, [%[r], r3]\n\t"
86476 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86477         "subs	r3, r3, #4\n\t"
86478 #else
86479         "sub	r3, r3, #4\n\t"
86480 #endif
86481         "bge	L_sp_4096_sqr_128_store_%=\n\t"
86482         "movs	r6, #4\n\t"
86483 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86484         "lsls	r6, r6, #8\n\t"
86485 #else
86486         "lsl	r6, r6, #8\n\t"
86487 #endif
86488         "add	sp, sp, r6\n\t"
86489         : [r] "+r" (r), [a] "+r" (a)
86490         :
86491         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
86492     );
86493 }
86494 
86495 #endif /* WOLFSSL_SP_SMALL */
86496 /* Caclulate the bottom digit of -1/a mod 2^n.
86497  *
86498  * a    A single precision number.
86499  * rho  Bottom word of inverse.
86500  */
sp_4096_mont_setup(const sp_digit * a,sp_digit * rho)86501 static void sp_4096_mont_setup(const sp_digit* a, sp_digit* rho)
86502 {
86503     sp_digit x;
86504     sp_digit b;
86505 
86506     b = a[0];
86507     x = (((b + 2) & 4) << 1) + b; /* here x*a==1 mod 2**4 */
86508     x *= 2 - b * x;               /* here x*a==1 mod 2**8 */
86509     x *= 2 - b * x;               /* here x*a==1 mod 2**16 */
86510     x *= 2 - b * x;               /* here x*a==1 mod 2**32 */
86511 
86512     /* rho = -1/m mod b */
86513     *rho = (sp_digit)0 - x;
86514 }
86515 
86516 /* Mul a by digit b into r. (r = a * b)
86517  *
86518  * r  A single precision integer.
86519  * a  A single precision integer.
86520  * b  A single precision digit.
86521  */
sp_4096_mul_d_128(sp_digit * r,const sp_digit * a,sp_digit b)86522 SP_NOINLINE static void sp_4096_mul_d_128(sp_digit* r, const sp_digit* a,
86523         sp_digit b)
86524 {
86525     __asm__ __volatile__ (
86526         "movs	r6, #2\n\t"
86527 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86528         "lsls	r6, r6, #8\n\t"
86529 #else
86530         "lsl	r6, r6, #8\n\t"
86531 #endif
86532 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86533         "adds	r6, r6, %[a]\n\t"
86534 #else
86535         "add	r6, r6, %[a]\n\t"
86536 #endif
86537         "mov	r8, %[r]\n\t"
86538         "mov	r9, r6\n\t"
86539         "movs	r3, #0\n\t"
86540         "movs	r4, #0\n\t"
86541         "\n"
86542     "L_sp_4096_mul_d_128_%=:\n\t"
86543         "movs	%[r], #0\n\t"
86544         "movs	r5, #0\n\t"
86545         "# A[] * B\n\t"
86546         "ldrh	r6, [%[a]]\n\t"
86547         "uxth	r7, %[b]\n\t"
86548 #ifdef WOLFSSL_KEIL
86549         "muls	r7, r6, r7\n\t"
86550 #elif defined(__clang__)
86551         "muls	r7, r6\n\t"
86552 #else
86553         "mul	r7, r6\n\t"
86554 #endif
86555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86556         "adds	r3, r3, r7\n\t"
86557 #else
86558         "add	r3, r3, r7\n\t"
86559 #endif
86560 #ifdef WOLFSSL_KEIL
86561         "adcs	r4, r4, %[r]\n\t"
86562 #elif defined(__clang__)
86563         "adcs	r4, %[r]\n\t"
86564 #else
86565         "adc	r4, %[r]\n\t"
86566 #endif
86567 #ifdef WOLFSSL_KEIL
86568         "adcs	r5, r5, %[r]\n\t"
86569 #elif defined(__clang__)
86570         "adcs	r5, %[r]\n\t"
86571 #else
86572         "adc	r5, %[r]\n\t"
86573 #endif
86574 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86575         "lsrs	r7, %[b], #16\n\t"
86576 #else
86577         "lsr	r7, %[b], #16\n\t"
86578 #endif
86579 #ifdef WOLFSSL_KEIL
86580         "muls	r6, r7, r6\n\t"
86581 #elif defined(__clang__)
86582         "muls	r6, r7\n\t"
86583 #else
86584         "mul	r6, r7\n\t"
86585 #endif
86586 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86587         "lsrs	r7, r6, #16\n\t"
86588 #else
86589         "lsr	r7, r6, #16\n\t"
86590 #endif
86591 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86592         "lsls	r6, r6, #16\n\t"
86593 #else
86594         "lsl	r6, r6, #16\n\t"
86595 #endif
86596 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86597         "adds	r3, r3, r6\n\t"
86598 #else
86599         "add	r3, r3, r6\n\t"
86600 #endif
86601 #ifdef WOLFSSL_KEIL
86602         "adcs	r4, r4, r7\n\t"
86603 #elif defined(__clang__)
86604         "adcs	r4, r7\n\t"
86605 #else
86606         "adc	r4, r7\n\t"
86607 #endif
86608 #ifdef WOLFSSL_KEIL
86609         "adcs	r5, r5, %[r]\n\t"
86610 #elif defined(__clang__)
86611         "adcs	r5, %[r]\n\t"
86612 #else
86613         "adc	r5, %[r]\n\t"
86614 #endif
86615         "ldr	r6, [%[a]]\n\t"
86616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86617         "lsrs	r6, r6, #16\n\t"
86618 #else
86619         "lsr	r6, r6, #16\n\t"
86620 #endif
86621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86622         "lsrs	r7, %[b], #16\n\t"
86623 #else
86624         "lsr	r7, %[b], #16\n\t"
86625 #endif
86626 #ifdef WOLFSSL_KEIL
86627         "muls	r7, r6, r7\n\t"
86628 #elif defined(__clang__)
86629         "muls	r7, r6\n\t"
86630 #else
86631         "mul	r7, r6\n\t"
86632 #endif
86633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86634         "adds	r4, r4, r7\n\t"
86635 #else
86636         "add	r4, r4, r7\n\t"
86637 #endif
86638 #ifdef WOLFSSL_KEIL
86639         "adcs	r5, r5, %[r]\n\t"
86640 #elif defined(__clang__)
86641         "adcs	r5, %[r]\n\t"
86642 #else
86643         "adc	r5, %[r]\n\t"
86644 #endif
86645         "uxth	r7, %[b]\n\t"
86646 #ifdef WOLFSSL_KEIL
86647         "muls	r6, r7, r6\n\t"
86648 #elif defined(__clang__)
86649         "muls	r6, r7\n\t"
86650 #else
86651         "mul	r6, r7\n\t"
86652 #endif
86653 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86654         "lsrs	r7, r6, #16\n\t"
86655 #else
86656         "lsr	r7, r6, #16\n\t"
86657 #endif
86658 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86659         "lsls	r6, r6, #16\n\t"
86660 #else
86661         "lsl	r6, r6, #16\n\t"
86662 #endif
86663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86664         "adds	r3, r3, r6\n\t"
86665 #else
86666         "add	r3, r3, r6\n\t"
86667 #endif
86668 #ifdef WOLFSSL_KEIL
86669         "adcs	r4, r4, r7\n\t"
86670 #elif defined(__clang__)
86671         "adcs	r4, r7\n\t"
86672 #else
86673         "adc	r4, r7\n\t"
86674 #endif
86675 #ifdef WOLFSSL_KEIL
86676         "adcs	r5, r5, %[r]\n\t"
86677 #elif defined(__clang__)
86678         "adcs	r5, %[r]\n\t"
86679 #else
86680         "adc	r5, %[r]\n\t"
86681 #endif
86682         "# A[] * B - Done\n\t"
86683         "mov	%[r], r8\n\t"
86684         "str	r3, [%[r]]\n\t"
86685         "movs	r3, r4\n\t"
86686         "movs	r4, r5\n\t"
86687 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86688         "adds	%[r], %[r], #4\n\t"
86689 #else
86690         "add	%[r], %[r], #4\n\t"
86691 #endif
86692 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86693         "adds	%[a], %[a], #4\n\t"
86694 #else
86695         "add	%[a], %[a], #4\n\t"
86696 #endif
86697         "mov	r8, %[r]\n\t"
86698         "cmp	%[a], r9\n\t"
86699         "blt	L_sp_4096_mul_d_128_%=\n\t"
86700         "str	r3, [%[r]]\n\t"
86701         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
86702         :
86703         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
86704     );
86705 }
86706 
86707 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
86708 /* r = 2^n mod m where n is the number of bits to reduce by.
86709  * Given m must be 4096 bits, just need to subtract.
86710  *
86711  * r  A single precision number.
86712  * m  A single precision number.
86713  */
sp_4096_mont_norm_128(sp_digit * r,const sp_digit * m)86714 static void sp_4096_mont_norm_128(sp_digit* r, const sp_digit* m)
86715 {
86716     XMEMSET(r, 0, sizeof(sp_digit) * 128);
86717 
86718     /* r = 2^n mod m */
86719     sp_4096_sub_in_place_128(r, m);
86720 }
86721 
86722 #endif /* (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) | WOLFSSL_HAVE_SP_DH */
86723 /* Conditionally subtract b from a using the mask m.
86724  * m is -1 to subtract and 0 when not copying.
86725  *
86726  * r  A single precision number representing condition subtract result.
86727  * a  A single precision number to subtract from.
86728  * b  A single precision number to subtract.
86729  * m  Mask value to apply.
86730  */
sp_4096_cond_sub_128(sp_digit * r,const sp_digit * a,const sp_digit * b,sp_digit m)86731 SP_NOINLINE static sp_digit sp_4096_cond_sub_128(sp_digit* r, const sp_digit* a,
86732         const sp_digit* b, sp_digit m)
86733 {
86734     __asm__ __volatile__ (
86735         "movs	r4, #0\n\t"
86736         "movs	r5, #2\n\t"
86737 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86738         "lsls	r5, r5, #8\n\t"
86739 #else
86740         "lsl	r5, r5, #8\n\t"
86741 #endif
86742         "mov	r8, r5\n\t"
86743         "movs	r7, #0\n\t"
86744         "\n"
86745     "L_sp_4096_cond_sub_128_words_%=:\n\t"
86746         "ldr	r6, [%[b], r7]\n\t"
86747 #ifdef WOLFSSL_KEIL
86748         "ands	r6, r6, %[m]\n\t"
86749 #elif defined(__clang__)
86750         "ands	r6, %[m]\n\t"
86751 #else
86752         "and	r6, %[m]\n\t"
86753 #endif
86754         "movs	r5, #0\n\t"
86755 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86756         "subs	r5, r5, r4\n\t"
86757 #else
86758         "sub	r5, r5, r4\n\t"
86759 #endif
86760         "ldr	r5, [%[a], r7]\n\t"
86761 #ifdef WOLFSSL_KEIL
86762         "sbcs	r5, r5, r6\n\t"
86763 #elif defined(__clang__)
86764         "sbcs	r5, r6\n\t"
86765 #else
86766         "sbc	r5, r6\n\t"
86767 #endif
86768 #ifdef WOLFSSL_KEIL
86769         "sbcs	r4, r4, r4\n\t"
86770 #elif defined(__clang__)
86771         "sbcs	r4, r4\n\t"
86772 #else
86773         "sbc	r4, r4\n\t"
86774 #endif
86775         "str	r5, [%[r], r7]\n\t"
86776 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86777         "adds	r7, r7, #4\n\t"
86778 #else
86779         "add	r7, r7, #4\n\t"
86780 #endif
86781         "cmp	r7, r8\n\t"
86782         "blt	L_sp_4096_cond_sub_128_words_%=\n\t"
86783         "movs	%[r], r4\n\t"
86784         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
86785         :
86786         : "memory", "r4", "r5", "r6", "r7", "r8"
86787     );
86788     return (uint32_t)(size_t)r;
86789 }
86790 
86791 /* Reduce the number back to 4096 bits using Montgomery reduction.
86792  *
86793  * a   A single precision number to reduce in place.
86794  * m   The single precision number representing the modulus.
86795  * mp  The digit representing the negative inverse of m mod 2^n.
86796  */
sp_4096_mont_reduce_128(sp_digit * a,const sp_digit * m,sp_digit mp)86797 SP_NOINLINE static void sp_4096_mont_reduce_128(sp_digit* a, const sp_digit* m,
86798         sp_digit mp)
86799 {
86800     __asm__ __volatile__ (
86801         "movs	r7, #0\n\t"
86802         "mov	r8, %[mp]\n\t"
86803         "mov	r12, r7\n\t"
86804         "mov	lr, %[m]\n\t"
86805         "mov	r9, %[a]\n\t"
86806         "mov	r11, %[a]\n\t"
86807         "movs	r5, #0xff\n\t"
86808 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86809         "adds	r5, r5, #0xfd\n\t"
86810 #else
86811         "add	r5, r5, #0xfd\n\t"
86812 #endif
86813         "movs	r6, #2\n\t"
86814 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86815         "lsls	r6, r6, #8\n\t"
86816 #else
86817         "lsl	r6, r6, #8\n\t"
86818 #endif
86819         "add	r9, r9, r5\n\t"
86820         "add	r11, r11, r6\n\t"
86821         "\n"
86822     "L_sp_4096_mont_reduce_128_mod_%=:\n\t"
86823         "movs	r7, #0\n\t"
86824         "movs	r4, #0\n\t"
86825         "# a[i] += m[0] * mu\n\t"
86826         "ldm	%[m]!, {%[mp]}\n\t"
86827         "ldm	%[a]!, {r3}\n\t"
86828         "# mu = a[i] * mp\n\t"
86829         "mov	r5, r8\n\t"
86830 #ifdef WOLFSSL_KEIL
86831         "muls	r5, r3, r5\n\t"
86832 #elif defined(__clang__)
86833         "muls	r5, r3\n\t"
86834 #else
86835         "mul	r5, r3\n\t"
86836 #endif
86837         "mov	r10, r5\n\t"
86838         "# Multiply m[0] and mu - Start\n\t"
86839         "mov	r5, r10\n\t"
86840         "uxth	r6, %[mp]\n\t"
86841         "uxth	r5, r5\n\t"
86842 #ifdef WOLFSSL_KEIL
86843         "muls	r6, r5, r6\n\t"
86844 #elif defined(__clang__)
86845         "muls	r6, r5\n\t"
86846 #else
86847         "mul	r6, r5\n\t"
86848 #endif
86849 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86850         "adds	r3, r3, r6\n\t"
86851 #else
86852         "add	r3, r3, r6\n\t"
86853 #endif
86854 #ifdef WOLFSSL_KEIL
86855         "adcs	r4, r4, r7\n\t"
86856 #elif defined(__clang__)
86857         "adcs	r4, r7\n\t"
86858 #else
86859         "adc	r4, r7\n\t"
86860 #endif
86861 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86862         "lsrs	r6, %[mp], #16\n\t"
86863 #else
86864         "lsr	r6, %[mp], #16\n\t"
86865 #endif
86866 #ifdef WOLFSSL_KEIL
86867         "muls	r5, r6, r5\n\t"
86868 #elif defined(__clang__)
86869         "muls	r5, r6\n\t"
86870 #else
86871         "mul	r5, r6\n\t"
86872 #endif
86873 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86874         "lsrs	r6, r5, #16\n\t"
86875 #else
86876         "lsr	r6, r5, #16\n\t"
86877 #endif
86878 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86879         "lsls	r5, r5, #16\n\t"
86880 #else
86881         "lsl	r5, r5, #16\n\t"
86882 #endif
86883 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86884         "adds	r3, r3, r5\n\t"
86885 #else
86886         "add	r3, r3, r5\n\t"
86887 #endif
86888 #ifdef WOLFSSL_KEIL
86889         "adcs	r4, r4, r6\n\t"
86890 #elif defined(__clang__)
86891         "adcs	r4, r6\n\t"
86892 #else
86893         "adc	r4, r6\n\t"
86894 #endif
86895         "mov	r5, r10\n\t"
86896 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86897         "lsrs	r6, %[mp], #16\n\t"
86898 #else
86899         "lsr	r6, %[mp], #16\n\t"
86900 #endif
86901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86902         "lsrs	r5, r5, #16\n\t"
86903 #else
86904         "lsr	r5, r5, #16\n\t"
86905 #endif
86906 #ifdef WOLFSSL_KEIL
86907         "muls	r6, r5, r6\n\t"
86908 #elif defined(__clang__)
86909         "muls	r6, r5\n\t"
86910 #else
86911         "mul	r6, r5\n\t"
86912 #endif
86913 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86914         "adds	r4, r4, r6\n\t"
86915 #else
86916         "add	r4, r4, r6\n\t"
86917 #endif
86918         "uxth	r6, %[mp]\n\t"
86919 #ifdef WOLFSSL_KEIL
86920         "muls	r5, r6, r5\n\t"
86921 #elif defined(__clang__)
86922         "muls	r5, r6\n\t"
86923 #else
86924         "mul	r5, r6\n\t"
86925 #endif
86926 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86927         "lsrs	r6, r5, #16\n\t"
86928 #else
86929         "lsr	r6, r5, #16\n\t"
86930 #endif
86931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86932         "lsls	r5, r5, #16\n\t"
86933 #else
86934         "lsl	r5, r5, #16\n\t"
86935 #endif
86936 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86937         "adds	r3, r3, r5\n\t"
86938 #else
86939         "add	r3, r3, r5\n\t"
86940 #endif
86941 #ifdef WOLFSSL_KEIL
86942         "adcs	r4, r4, r6\n\t"
86943 #elif defined(__clang__)
86944         "adcs	r4, r6\n\t"
86945 #else
86946         "adc	r4, r6\n\t"
86947 #endif
86948         "# Multiply m[0] and mu - Done\n\t"
86949         "\n"
86950     "L_sp_4096_mont_reduce_128_word_%=:\n\t"
86951         "# a[i+j] += m[j] * mu\n\t"
86952         "ldr	r3, [%[a]]\n\t"
86953         "ldm	%[m]!, {%[mp]}\n\t"
86954 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86955         "adds	r3, r3, r4\n\t"
86956 #else
86957         "add	r3, r3, r4\n\t"
86958 #endif
86959         "movs	r4, #0\n\t"
86960 #ifdef WOLFSSL_KEIL
86961         "adcs	r4, r4, r7\n\t"
86962 #elif defined(__clang__)
86963         "adcs	r4, r7\n\t"
86964 #else
86965         "adc	r4, r7\n\t"
86966 #endif
86967         "# Multiply m[j] and mu - Start\n\t"
86968         "mov	r5, r10\n\t"
86969         "uxth	r6, %[mp]\n\t"
86970         "uxth	r5, r5\n\t"
86971 #ifdef WOLFSSL_KEIL
86972         "muls	r6, r5, r6\n\t"
86973 #elif defined(__clang__)
86974         "muls	r6, r5\n\t"
86975 #else
86976         "mul	r6, r5\n\t"
86977 #endif
86978 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86979         "adds	r3, r3, r6\n\t"
86980 #else
86981         "add	r3, r3, r6\n\t"
86982 #endif
86983 #ifdef WOLFSSL_KEIL
86984         "adcs	r4, r4, r7\n\t"
86985 #elif defined(__clang__)
86986         "adcs	r4, r7\n\t"
86987 #else
86988         "adc	r4, r7\n\t"
86989 #endif
86990 #if defined(__clang__) || defined(WOLFSSL_KEIL)
86991         "lsrs	r6, %[mp], #16\n\t"
86992 #else
86993         "lsr	r6, %[mp], #16\n\t"
86994 #endif
86995 #ifdef WOLFSSL_KEIL
86996         "muls	r5, r6, r5\n\t"
86997 #elif defined(__clang__)
86998         "muls	r5, r6\n\t"
86999 #else
87000         "mul	r5, r6\n\t"
87001 #endif
87002 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87003         "lsrs	r6, r5, #16\n\t"
87004 #else
87005         "lsr	r6, r5, #16\n\t"
87006 #endif
87007 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87008         "lsls	r5, r5, #16\n\t"
87009 #else
87010         "lsl	r5, r5, #16\n\t"
87011 #endif
87012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87013         "adds	r3, r3, r5\n\t"
87014 #else
87015         "add	r3, r3, r5\n\t"
87016 #endif
87017 #ifdef WOLFSSL_KEIL
87018         "adcs	r4, r4, r6\n\t"
87019 #elif defined(__clang__)
87020         "adcs	r4, r6\n\t"
87021 #else
87022         "adc	r4, r6\n\t"
87023 #endif
87024         "mov	r5, r10\n\t"
87025 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87026         "lsrs	r6, %[mp], #16\n\t"
87027 #else
87028         "lsr	r6, %[mp], #16\n\t"
87029 #endif
87030 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87031         "lsrs	r5, r5, #16\n\t"
87032 #else
87033         "lsr	r5, r5, #16\n\t"
87034 #endif
87035 #ifdef WOLFSSL_KEIL
87036         "muls	r6, r5, r6\n\t"
87037 #elif defined(__clang__)
87038         "muls	r6, r5\n\t"
87039 #else
87040         "mul	r6, r5\n\t"
87041 #endif
87042 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87043         "adds	r4, r4, r6\n\t"
87044 #else
87045         "add	r4, r4, r6\n\t"
87046 #endif
87047         "uxth	r6, %[mp]\n\t"
87048 #ifdef WOLFSSL_KEIL
87049         "muls	r5, r6, r5\n\t"
87050 #elif defined(__clang__)
87051         "muls	r5, r6\n\t"
87052 #else
87053         "mul	r5, r6\n\t"
87054 #endif
87055 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87056         "lsrs	r6, r5, #16\n\t"
87057 #else
87058         "lsr	r6, r5, #16\n\t"
87059 #endif
87060 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87061         "lsls	r5, r5, #16\n\t"
87062 #else
87063         "lsl	r5, r5, #16\n\t"
87064 #endif
87065 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87066         "adds	r3, r3, r5\n\t"
87067 #else
87068         "add	r3, r3, r5\n\t"
87069 #endif
87070 #ifdef WOLFSSL_KEIL
87071         "adcs	r4, r4, r6\n\t"
87072 #elif defined(__clang__)
87073         "adcs	r4, r6\n\t"
87074 #else
87075         "adc	r4, r6\n\t"
87076 #endif
87077         "# Multiply m[j] and mu - Done\n\t"
87078         "stm	%[a]!, {r3}\n\t"
87079         "cmp	%[a], r9\n\t"
87080         "blt	L_sp_4096_mont_reduce_128_word_%=\n\t"
87081         "# a[i+127] += m[127] * mu\n\t"
87082         "ldr	%[mp], [%[m]]\n\t"
87083         "mov	r3, r12\n\t"
87084         "# Multiply m[127] and mu - Start\n\t"
87085         "mov	r5, r10\n\t"
87086         "uxth	r6, %[mp]\n\t"
87087         "uxth	r5, r5\n\t"
87088 #ifdef WOLFSSL_KEIL
87089         "muls	r6, r5, r6\n\t"
87090 #elif defined(__clang__)
87091         "muls	r6, r5\n\t"
87092 #else
87093         "mul	r6, r5\n\t"
87094 #endif
87095 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87096         "adds	r4, r4, r6\n\t"
87097 #else
87098         "add	r4, r4, r6\n\t"
87099 #endif
87100 #ifdef WOLFSSL_KEIL
87101         "adcs	r3, r3, r7\n\t"
87102 #elif defined(__clang__)
87103         "adcs	r3, r7\n\t"
87104 #else
87105         "adc	r3, r7\n\t"
87106 #endif
87107 #ifdef WOLFSSL_KEIL
87108         "adcs	r7, r7, r7\n\t"
87109 #elif defined(__clang__)
87110         "adcs	r7, r7\n\t"
87111 #else
87112         "adc	r7, r7\n\t"
87113 #endif
87114 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87115         "lsrs	r6, %[mp], #16\n\t"
87116 #else
87117         "lsr	r6, %[mp], #16\n\t"
87118 #endif
87119 #ifdef WOLFSSL_KEIL
87120         "muls	r5, r6, r5\n\t"
87121 #elif defined(__clang__)
87122         "muls	r5, r6\n\t"
87123 #else
87124         "mul	r5, r6\n\t"
87125 #endif
87126 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87127         "lsrs	r6, r5, #16\n\t"
87128 #else
87129         "lsr	r6, r5, #16\n\t"
87130 #endif
87131 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87132         "lsls	r5, r5, #16\n\t"
87133 #else
87134         "lsl	r5, r5, #16\n\t"
87135 #endif
87136 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87137         "adds	r4, r4, r5\n\t"
87138 #else
87139         "add	r4, r4, r5\n\t"
87140 #endif
87141 #ifdef WOLFSSL_KEIL
87142         "adcs	r3, r3, r6\n\t"
87143 #elif defined(__clang__)
87144         "adcs	r3, r6\n\t"
87145 #else
87146         "adc	r3, r6\n\t"
87147 #endif
87148 #ifdef WOLFSSL_KEIL
87149         "adcs	r7, r7, r7\n\t"
87150 #elif defined(__clang__)
87151         "adcs	r7, r7\n\t"
87152 #else
87153         "adc	r7, r7\n\t"
87154 #endif
87155         "mov	r5, r10\n\t"
87156 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87157         "lsrs	r6, %[mp], #16\n\t"
87158 #else
87159         "lsr	r6, %[mp], #16\n\t"
87160 #endif
87161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87162         "lsrs	r5, r5, #16\n\t"
87163 #else
87164         "lsr	r5, r5, #16\n\t"
87165 #endif
87166 #ifdef WOLFSSL_KEIL
87167         "muls	r6, r5, r6\n\t"
87168 #elif defined(__clang__)
87169         "muls	r6, r5\n\t"
87170 #else
87171         "mul	r6, r5\n\t"
87172 #endif
87173 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87174         "adds	r3, r3, r6\n\t"
87175 #else
87176         "add	r3, r3, r6\n\t"
87177 #endif
87178 #ifdef WOLFSSL_KEIL
87179         "adcs	r7, r7, r7\n\t"
87180 #elif defined(__clang__)
87181         "adcs	r7, r7\n\t"
87182 #else
87183         "adc	r7, r7\n\t"
87184 #endif
87185         "uxth	r6, %[mp]\n\t"
87186 #ifdef WOLFSSL_KEIL
87187         "muls	r5, r6, r5\n\t"
87188 #elif defined(__clang__)
87189         "muls	r5, r6\n\t"
87190 #else
87191         "mul	r5, r6\n\t"
87192 #endif
87193 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87194         "lsrs	r6, r5, #16\n\t"
87195 #else
87196         "lsr	r6, r5, #16\n\t"
87197 #endif
87198 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87199         "lsls	r5, r5, #16\n\t"
87200 #else
87201         "lsl	r5, r5, #16\n\t"
87202 #endif
87203 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87204         "adds	r4, r4, r5\n\t"
87205 #else
87206         "add	r4, r4, r5\n\t"
87207 #endif
87208 #ifdef WOLFSSL_KEIL
87209         "adcs	r3, r3, r6\n\t"
87210 #elif defined(__clang__)
87211         "adcs	r3, r6\n\t"
87212 #else
87213         "adc	r3, r6\n\t"
87214 #endif
87215 #ifdef WOLFSSL_KEIL
87216         "adcs	r7, r7, r7\n\t"
87217 #elif defined(__clang__)
87218         "adcs	r7, r7\n\t"
87219 #else
87220         "adc	r7, r7\n\t"
87221 #endif
87222         "# Multiply m[127] and mu - Done\n\t"
87223         "ldr	r5, [%[a]]\n\t"
87224         "ldr	r6, [%[a], #4]\n\t"
87225         "movs	%[mp], #0\n\t"
87226 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87227         "adds	r5, r5, r4\n\t"
87228 #else
87229         "add	r5, r5, r4\n\t"
87230 #endif
87231 #ifdef WOLFSSL_KEIL
87232         "adcs	r6, r6, r3\n\t"
87233 #elif defined(__clang__)
87234         "adcs	r6, r3\n\t"
87235 #else
87236         "adc	r6, r3\n\t"
87237 #endif
87238 #ifdef WOLFSSL_KEIL
87239         "adcs	r7, r7, %[mp]\n\t"
87240 #elif defined(__clang__)
87241         "adcs	r7, %[mp]\n\t"
87242 #else
87243         "adc	r7, %[mp]\n\t"
87244 #endif
87245         "stm	%[a]!, {r5, r6}\n\t"
87246         "# i += 1\n\t"
87247 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87248         "subs	%[a], %[a], #4\n\t"
87249 #else
87250         "sub	%[a], %[a], #4\n\t"
87251 #endif
87252         "movs	r3, #0xff\n\t"
87253 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87254         "adds	r3, r3, #0xfd\n\t"
87255 #else
87256         "add	r3, r3, #0xfd\n\t"
87257 #endif
87258         "mov	r9, %[a]\n\t"
87259 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87260         "subs	%[a], %[a], r3\n\t"
87261 #else
87262         "sub	%[a], %[a], r3\n\t"
87263 #endif
87264         "mov	r12, r7\n\t"
87265         "mov	%[m], lr\n\t"
87266         "cmp	r11, %[a]\n\t"
87267         "bgt	L_sp_4096_mont_reduce_128_mod_%=\n\t"
87268 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87269         "negs	r7, r7\n\t"
87270 #else
87271         "neg	r7, r7\n\t"
87272 #endif
87273         "# Subtract masked modulus\n\t"
87274         "movs	r4, #2\n\t"
87275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87276         "lsls	r4, r4, #8\n\t"
87277 #else
87278         "lsl	r4, r4, #8\n\t"
87279 #endif
87280         "movs	%[mp], #0\n\t"
87281         "movs	r3, #0\n\t"
87282 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87283         "subs	%[a], %[a], r4\n\t"
87284 #else
87285         "sub	%[a], %[a], r4\n\t"
87286 #endif
87287 #ifndef WOLFSSL_SP_LARGE_CODE
87288         "\n"
87289     "L_sp_4096_mont_reduce_128_sub_mask_%=:\n\t"
87290         "ldm	%[m]!, {r6}\n\t"
87291         "movs	r5, #0\n\t"
87292 #ifdef WOLFSSL_KEIL
87293         "ands	r6, r6, r7\n\t"
87294 #elif defined(__clang__)
87295         "ands	r6, r7\n\t"
87296 #else
87297         "and	r6, r7\n\t"
87298 #endif
87299 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87300         "subs	r5, r5, %[mp]\n\t"
87301 #else
87302         "sub	r5, r5, %[mp]\n\t"
87303 #endif
87304         "ldr	r5, [%[a], r4]\n\t"
87305 #ifdef WOLFSSL_KEIL
87306         "sbcs	r5, r5, r6\n\t"
87307 #elif defined(__clang__)
87308         "sbcs	r5, r6\n\t"
87309 #else
87310         "sbc	r5, r6\n\t"
87311 #endif
87312 #ifdef WOLFSSL_KEIL
87313         "sbcs	%[mp], %[mp], %[mp]\n\t"
87314 #elif defined(__clang__)
87315         "sbcs	%[mp], %[mp]\n\t"
87316 #else
87317         "sbc	%[mp], %[mp]\n\t"
87318 #endif
87319         "stm	%[a]!, {r5}\n\t"
87320 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87321         "adds	r3, r3, #4\n\t"
87322 #else
87323         "add	r3, r3, #4\n\t"
87324 #endif
87325         "cmp	r3, r4\n\t"
87326         "blt	L_sp_4096_mont_reduce_128_sub_mask_%=\n\t"
87327 #else /* WOLFSSL_SP_LARGE_CODE */
87328         "ldm	%[m]!, {r6}\n\t"
87329 #ifdef WOLFSSL_KEIL
87330         "ands	r6, r6, r7\n\t"
87331 #elif defined(__clang__)
87332         "ands	r6, r7\n\t"
87333 #else
87334         "and	r6, r7\n\t"
87335 #endif
87336         "ldr	r5, [%[a], r4]\n\t"
87337 #if defined(__clang__) || defined(WOLFSSL_KEIL)
87338         "subs	r5, r5, r6\n\t"
87339 #else
87340         "sub	r5, r5, r6\n\t"
87341 #endif
87342         "stm	%[a]!, {r5}\n\t"
87343         "ldm	%[m]!, {r6}\n\t"
87344 #ifdef WOLFSSL_KEIL
87345         "ands	r6, r6, r7\n\t"
87346 #elif defined(__clang__)
87347         "ands	r6, r7\n\t"
87348 #else
87349         "and	r6, r7\n\t"
87350 #endif
87351         "ldr	r5, [%[a], r4]\n\t"
87352 #ifdef WOLFSSL_KEIL
87353         "sbcs	r5, r5, r6\n\t"
87354 #elif defined(__clang__)
87355         "sbcs	r5, r6\n\t"
87356 #else
87357         "sbc	r5, r6\n\t"
87358 #endif
87359         "stm	%[a]!, {r5}\n\t"
87360         "ldm	%[m]!, {r6}\n\t"
87361 #ifdef WOLFSSL_KEIL
87362         "ands	r6, r6, r7\n\t"
87363 #elif defined(__clang__)
87364         "ands	r6, r7\n\t"
87365 #else
87366         "and	r6, r7\n\t"
87367 #endif
87368         "ldr	r5, [%[a], r4]\n\t"
87369 #ifdef WOLFSSL_KEIL
87370         "sbcs	r5, r5, r6\n\t"
87371 #elif defined(__clang__)
87372         "sbcs	r5, r6\n\t"
87373 #else
87374         "sbc	r5, r6\n\t"
87375 #endif
87376         "stm	%[a]!, {r5}\n\t"
87377         "ldm	%[m]!, {r6}\n\t"
87378 #ifdef WOLFSSL_KEIL
87379         "ands	r6, r6, r7\n\t"
87380 #elif defined(__clang__)
87381         "ands	r6, r7\n\t"
87382 #else
87383         "and	r6, r7\n\t"
87384 #endif
87385         "ldr	r5, [%[a], r4]\n\t"
87386 #ifdef WOLFSSL_KEIL
87387         "sbcs	r5, r5, r6\n\t"
87388 #elif defined(__clang__)
87389         "sbcs	r5, r6\n\t"
87390 #else
87391         "sbc	r5, r6\n\t"
87392 #endif
87393         "stm	%[a]!, {r5}\n\t"
87394         "ldm	%[m]!, {r6}\n\t"
87395 #ifdef WOLFSSL_KEIL
87396         "ands	r6, r6, r7\n\t"
87397 #elif defined(__clang__)
87398         "ands	r6, r7\n\t"
87399 #else
87400         "and	r6, r7\n\t"
87401 #endif
87402         "ldr	r5, [%[a], r4]\n\t"
87403 #ifdef WOLFSSL_KEIL
87404         "sbcs	r5, r5, r6\n\t"
87405 #elif defined(__clang__)
87406         "sbcs	r5, r6\n\t"
87407 #else
87408         "sbc	r5, r6\n\t"
87409 #endif
87410         "stm	%[a]!, {r5}\n\t"
87411         "ldm	%[m]!, {r6}\n\t"
87412 #ifdef WOLFSSL_KEIL
87413         "ands	r6, r6, r7\n\t"
87414 #elif defined(__clang__)
87415         "ands	r6, r7\n\t"
87416 #else
87417         "and	r6, r7\n\t"
87418 #endif
87419         "ldr	r5, [%[a], r4]\n\t"
87420 #ifdef WOLFSSL_KEIL
87421         "sbcs	r5, r5, r6\n\t"
87422 #elif defined(__clang__)
87423         "sbcs	r5, r6\n\t"
87424 #else
87425         "sbc	r5, r6\n\t"
87426 #endif
87427         "stm	%[a]!, {r5}\n\t"
87428         "ldm	%[m]!, {r6}\n\t"
87429 #ifdef WOLFSSL_KEIL
87430         "ands	r6, r6, r7\n\t"
87431 #elif defined(__clang__)
87432         "ands	r6, r7\n\t"
87433 #else
87434         "and	r6, r7\n\t"
87435 #endif
87436         "ldr	r5, [%[a], r4]\n\t"
87437 #ifdef WOLFSSL_KEIL
87438         "sbcs	r5, r5, r6\n\t"
87439 #elif defined(__clang__)
87440         "sbcs	r5, r6\n\t"
87441 #else
87442         "sbc	r5, r6\n\t"
87443 #endif
87444         "stm	%[a]!, {r5}\n\t"
87445         "ldm	%[m]!, {r6}\n\t"
87446 #ifdef WOLFSSL_KEIL
87447         "ands	r6, r6, r7\n\t"
87448 #elif defined(__clang__)
87449         "ands	r6, r7\n\t"
87450 #else
87451         "and	r6, r7\n\t"
87452 #endif
87453         "ldr	r5, [%[a], r4]\n\t"
87454 #ifdef WOLFSSL_KEIL
87455         "sbcs	r5, r5, r6\n\t"
87456 #elif defined(__clang__)
87457         "sbcs	r5, r6\n\t"
87458 #else
87459         "sbc	r5, r6\n\t"
87460 #endif
87461         "stm	%[a]!, {r5}\n\t"
87462         "ldm	%[m]!, {r6}\n\t"
87463 #ifdef WOLFSSL_KEIL
87464         "ands	r6, r6, r7\n\t"
87465 #elif defined(__clang__)
87466         "ands	r6, r7\n\t"
87467 #else
87468         "and	r6, r7\n\t"
87469 #endif
87470         "ldr	r5, [%[a], r4]\n\t"
87471 #ifdef WOLFSSL_KEIL
87472         "sbcs	r5, r5, r6\n\t"
87473 #elif defined(__clang__)
87474         "sbcs	r5, r6\n\t"
87475 #else
87476         "sbc	r5, r6\n\t"
87477 #endif
87478         "stm	%[a]!, {r5}\n\t"
87479         "ldm	%[m]!, {r6}\n\t"
87480 #ifdef WOLFSSL_KEIL
87481         "ands	r6, r6, r7\n\t"
87482 #elif defined(__clang__)
87483         "ands	r6, r7\n\t"
87484 #else
87485         "and	r6, r7\n\t"
87486 #endif
87487         "ldr	r5, [%[a], r4]\n\t"
87488 #ifdef WOLFSSL_KEIL
87489         "sbcs	r5, r5, r6\n\t"
87490 #elif defined(__clang__)
87491         "sbcs	r5, r6\n\t"
87492 #else
87493         "sbc	r5, r6\n\t"
87494 #endif
87495         "stm	%[a]!, {r5}\n\t"
87496         "ldm	%[m]!, {r6}\n\t"
87497 #ifdef WOLFSSL_KEIL
87498         "ands	r6, r6, r7\n\t"
87499 #elif defined(__clang__)
87500         "ands	r6, r7\n\t"
87501 #else
87502         "and	r6, r7\n\t"
87503 #endif
87504         "ldr	r5, [%[a], r4]\n\t"
87505 #ifdef WOLFSSL_KEIL
87506         "sbcs	r5, r5, r6\n\t"
87507 #elif defined(__clang__)
87508         "sbcs	r5, r6\n\t"
87509 #else
87510         "sbc	r5, r6\n\t"
87511 #endif
87512         "stm	%[a]!, {r5}\n\t"
87513         "ldm	%[m]!, {r6}\n\t"
87514 #ifdef WOLFSSL_KEIL
87515         "ands	r6, r6, r7\n\t"
87516 #elif defined(__clang__)
87517         "ands	r6, r7\n\t"
87518 #else
87519         "and	r6, r7\n\t"
87520 #endif
87521         "ldr	r5, [%[a], r4]\n\t"
87522 #ifdef WOLFSSL_KEIL
87523         "sbcs	r5, r5, r6\n\t"
87524 #elif defined(__clang__)
87525         "sbcs	r5, r6\n\t"
87526 #else
87527         "sbc	r5, r6\n\t"
87528 #endif
87529         "stm	%[a]!, {r5}\n\t"
87530         "ldm	%[m]!, {r6}\n\t"
87531 #ifdef WOLFSSL_KEIL
87532         "ands	r6, r6, r7\n\t"
87533 #elif defined(__clang__)
87534         "ands	r6, r7\n\t"
87535 #else
87536         "and	r6, r7\n\t"
87537 #endif
87538         "ldr	r5, [%[a], r4]\n\t"
87539 #ifdef WOLFSSL_KEIL
87540         "sbcs	r5, r5, r6\n\t"
87541 #elif defined(__clang__)
87542         "sbcs	r5, r6\n\t"
87543 #else
87544         "sbc	r5, r6\n\t"
87545 #endif
87546         "stm	%[a]!, {r5}\n\t"
87547         "ldm	%[m]!, {r6}\n\t"
87548 #ifdef WOLFSSL_KEIL
87549         "ands	r6, r6, r7\n\t"
87550 #elif defined(__clang__)
87551         "ands	r6, r7\n\t"
87552 #else
87553         "and	r6, r7\n\t"
87554 #endif
87555         "ldr	r5, [%[a], r4]\n\t"
87556 #ifdef WOLFSSL_KEIL
87557         "sbcs	r5, r5, r6\n\t"
87558 #elif defined(__clang__)
87559         "sbcs	r5, r6\n\t"
87560 #else
87561         "sbc	r5, r6\n\t"
87562 #endif
87563         "stm	%[a]!, {r5}\n\t"
87564         "ldm	%[m]!, {r6}\n\t"
87565 #ifdef WOLFSSL_KEIL
87566         "ands	r6, r6, r7\n\t"
87567 #elif defined(__clang__)
87568         "ands	r6, r7\n\t"
87569 #else
87570         "and	r6, r7\n\t"
87571 #endif
87572         "ldr	r5, [%[a], r4]\n\t"
87573 #ifdef WOLFSSL_KEIL
87574         "sbcs	r5, r5, r6\n\t"
87575 #elif defined(__clang__)
87576         "sbcs	r5, r6\n\t"
87577 #else
87578         "sbc	r5, r6\n\t"
87579 #endif
87580         "stm	%[a]!, {r5}\n\t"
87581         "ldm	%[m]!, {r6}\n\t"
87582 #ifdef WOLFSSL_KEIL
87583         "ands	r6, r6, r7\n\t"
87584 #elif defined(__clang__)
87585         "ands	r6, r7\n\t"
87586 #else
87587         "and	r6, r7\n\t"
87588 #endif
87589         "ldr	r5, [%[a], r4]\n\t"
87590 #ifdef WOLFSSL_KEIL
87591         "sbcs	r5, r5, r6\n\t"
87592 #elif defined(__clang__)
87593         "sbcs	r5, r6\n\t"
87594 #else
87595         "sbc	r5, r6\n\t"
87596 #endif
87597         "stm	%[a]!, {r5}\n\t"
87598         "ldm	%[m]!, {r6}\n\t"
87599 #ifdef WOLFSSL_KEIL
87600         "ands	r6, r6, r7\n\t"
87601 #elif defined(__clang__)
87602         "ands	r6, r7\n\t"
87603 #else
87604         "and	r6, r7\n\t"
87605 #endif
87606         "ldr	r5, [%[a], r4]\n\t"
87607 #ifdef WOLFSSL_KEIL
87608         "sbcs	r5, r5, r6\n\t"
87609 #elif defined(__clang__)
87610         "sbcs	r5, r6\n\t"
87611 #else
87612         "sbc	r5, r6\n\t"
87613 #endif
87614         "stm	%[a]!, {r5}\n\t"
87615         "ldm	%[m]!, {r6}\n\t"
87616 #ifdef WOLFSSL_KEIL
87617         "ands	r6, r6, r7\n\t"
87618 #elif defined(__clang__)
87619         "ands	r6, r7\n\t"
87620 #else
87621         "and	r6, r7\n\t"
87622 #endif
87623         "ldr	r5, [%[a], r4]\n\t"
87624 #ifdef WOLFSSL_KEIL
87625         "sbcs	r5, r5, r6\n\t"
87626 #elif defined(__clang__)
87627         "sbcs	r5, r6\n\t"
87628 #else
87629         "sbc	r5, r6\n\t"
87630 #endif
87631         "stm	%[a]!, {r5}\n\t"
87632         "ldm	%[m]!, {r6}\n\t"
87633 #ifdef WOLFSSL_KEIL
87634         "ands	r6, r6, r7\n\t"
87635 #elif defined(__clang__)
87636         "ands	r6, r7\n\t"
87637 #else
87638         "and	r6, r7\n\t"
87639 #endif
87640         "ldr	r5, [%[a], r4]\n\t"
87641 #ifdef WOLFSSL_KEIL
87642         "sbcs	r5, r5, r6\n\t"
87643 #elif defined(__clang__)
87644         "sbcs	r5, r6\n\t"
87645 #else
87646         "sbc	r5, r6\n\t"
87647 #endif
87648         "stm	%[a]!, {r5}\n\t"
87649         "ldm	%[m]!, {r6}\n\t"
87650 #ifdef WOLFSSL_KEIL
87651         "ands	r6, r6, r7\n\t"
87652 #elif defined(__clang__)
87653         "ands	r6, r7\n\t"
87654 #else
87655         "and	r6, r7\n\t"
87656 #endif
87657         "ldr	r5, [%[a], r4]\n\t"
87658 #ifdef WOLFSSL_KEIL
87659         "sbcs	r5, r5, r6\n\t"
87660 #elif defined(__clang__)
87661         "sbcs	r5, r6\n\t"
87662 #else
87663         "sbc	r5, r6\n\t"
87664 #endif
87665         "stm	%[a]!, {r5}\n\t"
87666         "ldm	%[m]!, {r6}\n\t"
87667 #ifdef WOLFSSL_KEIL
87668         "ands	r6, r6, r7\n\t"
87669 #elif defined(__clang__)
87670         "ands	r6, r7\n\t"
87671 #else
87672         "and	r6, r7\n\t"
87673 #endif
87674         "ldr	r5, [%[a], r4]\n\t"
87675 #ifdef WOLFSSL_KEIL
87676         "sbcs	r5, r5, r6\n\t"
87677 #elif defined(__clang__)
87678         "sbcs	r5, r6\n\t"
87679 #else
87680         "sbc	r5, r6\n\t"
87681 #endif
87682         "stm	%[a]!, {r5}\n\t"
87683         "ldm	%[m]!, {r6}\n\t"
87684 #ifdef WOLFSSL_KEIL
87685         "ands	r6, r6, r7\n\t"
87686 #elif defined(__clang__)
87687         "ands	r6, r7\n\t"
87688 #else
87689         "and	r6, r7\n\t"
87690 #endif
87691         "ldr	r5, [%[a], r4]\n\t"
87692 #ifdef WOLFSSL_KEIL
87693         "sbcs	r5, r5, r6\n\t"
87694 #elif defined(__clang__)
87695         "sbcs	r5, r6\n\t"
87696 #else
87697         "sbc	r5, r6\n\t"
87698 #endif
87699         "stm	%[a]!, {r5}\n\t"
87700         "ldm	%[m]!, {r6}\n\t"
87701 #ifdef WOLFSSL_KEIL
87702         "ands	r6, r6, r7\n\t"
87703 #elif defined(__clang__)
87704         "ands	r6, r7\n\t"
87705 #else
87706         "and	r6, r7\n\t"
87707 #endif
87708         "ldr	r5, [%[a], r4]\n\t"
87709 #ifdef WOLFSSL_KEIL
87710         "sbcs	r5, r5, r6\n\t"
87711 #elif defined(__clang__)
87712         "sbcs	r5, r6\n\t"
87713 #else
87714         "sbc	r5, r6\n\t"
87715 #endif
87716         "stm	%[a]!, {r5}\n\t"
87717         "ldm	%[m]!, {r6}\n\t"
87718 #ifdef WOLFSSL_KEIL
87719         "ands	r6, r6, r7\n\t"
87720 #elif defined(__clang__)
87721         "ands	r6, r7\n\t"
87722 #else
87723         "and	r6, r7\n\t"
87724 #endif
87725         "ldr	r5, [%[a], r4]\n\t"
87726 #ifdef WOLFSSL_KEIL
87727         "sbcs	r5, r5, r6\n\t"
87728 #elif defined(__clang__)
87729         "sbcs	r5, r6\n\t"
87730 #else
87731         "sbc	r5, r6\n\t"
87732 #endif
87733         "stm	%[a]!, {r5}\n\t"
87734         "ldm	%[m]!, {r6}\n\t"
87735 #ifdef WOLFSSL_KEIL
87736         "ands	r6, r6, r7\n\t"
87737 #elif defined(__clang__)
87738         "ands	r6, r7\n\t"
87739 #else
87740         "and	r6, r7\n\t"
87741 #endif
87742         "ldr	r5, [%[a], r4]\n\t"
87743 #ifdef WOLFSSL_KEIL
87744         "sbcs	r5, r5, r6\n\t"
87745 #elif defined(__clang__)
87746         "sbcs	r5, r6\n\t"
87747 #else
87748         "sbc	r5, r6\n\t"
87749 #endif
87750         "stm	%[a]!, {r5}\n\t"
87751         "ldm	%[m]!, {r6}\n\t"
87752 #ifdef WOLFSSL_KEIL
87753         "ands	r6, r6, r7\n\t"
87754 #elif defined(__clang__)
87755         "ands	r6, r7\n\t"
87756 #else
87757         "and	r6, r7\n\t"
87758 #endif
87759         "ldr	r5, [%[a], r4]\n\t"
87760 #ifdef WOLFSSL_KEIL
87761         "sbcs	r5, r5, r6\n\t"
87762 #elif defined(__clang__)
87763         "sbcs	r5, r6\n\t"
87764 #else
87765         "sbc	r5, r6\n\t"
87766 #endif
87767         "stm	%[a]!, {r5}\n\t"
87768         "ldm	%[m]!, {r6}\n\t"
87769 #ifdef WOLFSSL_KEIL
87770         "ands	r6, r6, r7\n\t"
87771 #elif defined(__clang__)
87772         "ands	r6, r7\n\t"
87773 #else
87774         "and	r6, r7\n\t"
87775 #endif
87776         "ldr	r5, [%[a], r4]\n\t"
87777 #ifdef WOLFSSL_KEIL
87778         "sbcs	r5, r5, r6\n\t"
87779 #elif defined(__clang__)
87780         "sbcs	r5, r6\n\t"
87781 #else
87782         "sbc	r5, r6\n\t"
87783 #endif
87784         "stm	%[a]!, {r5}\n\t"
87785         "ldm	%[m]!, {r6}\n\t"
87786 #ifdef WOLFSSL_KEIL
87787         "ands	r6, r6, r7\n\t"
87788 #elif defined(__clang__)
87789         "ands	r6, r7\n\t"
87790 #else
87791         "and	r6, r7\n\t"
87792 #endif
87793         "ldr	r5, [%[a], r4]\n\t"
87794 #ifdef WOLFSSL_KEIL
87795         "sbcs	r5, r5, r6\n\t"
87796 #elif defined(__clang__)
87797         "sbcs	r5, r6\n\t"
87798 #else
87799         "sbc	r5, r6\n\t"
87800 #endif
87801         "stm	%[a]!, {r5}\n\t"
87802         "ldm	%[m]!, {r6}\n\t"
87803 #ifdef WOLFSSL_KEIL
87804         "ands	r6, r6, r7\n\t"
87805 #elif defined(__clang__)
87806         "ands	r6, r7\n\t"
87807 #else
87808         "and	r6, r7\n\t"
87809 #endif
87810         "ldr	r5, [%[a], r4]\n\t"
87811 #ifdef WOLFSSL_KEIL
87812         "sbcs	r5, r5, r6\n\t"
87813 #elif defined(__clang__)
87814         "sbcs	r5, r6\n\t"
87815 #else
87816         "sbc	r5, r6\n\t"
87817 #endif
87818         "stm	%[a]!, {r5}\n\t"
87819         "ldm	%[m]!, {r6}\n\t"
87820 #ifdef WOLFSSL_KEIL
87821         "ands	r6, r6, r7\n\t"
87822 #elif defined(__clang__)
87823         "ands	r6, r7\n\t"
87824 #else
87825         "and	r6, r7\n\t"
87826 #endif
87827         "ldr	r5, [%[a], r4]\n\t"
87828 #ifdef WOLFSSL_KEIL
87829         "sbcs	r5, r5, r6\n\t"
87830 #elif defined(__clang__)
87831         "sbcs	r5, r6\n\t"
87832 #else
87833         "sbc	r5, r6\n\t"
87834 #endif
87835         "stm	%[a]!, {r5}\n\t"
87836         "ldm	%[m]!, {r6}\n\t"
87837 #ifdef WOLFSSL_KEIL
87838         "ands	r6, r6, r7\n\t"
87839 #elif defined(__clang__)
87840         "ands	r6, r7\n\t"
87841 #else
87842         "and	r6, r7\n\t"
87843 #endif
87844         "ldr	r5, [%[a], r4]\n\t"
87845 #ifdef WOLFSSL_KEIL
87846         "sbcs	r5, r5, r6\n\t"
87847 #elif defined(__clang__)
87848         "sbcs	r5, r6\n\t"
87849 #else
87850         "sbc	r5, r6\n\t"
87851 #endif
87852         "stm	%[a]!, {r5}\n\t"
87853         "ldm	%[m]!, {r6}\n\t"
87854 #ifdef WOLFSSL_KEIL
87855         "ands	r6, r6, r7\n\t"
87856 #elif defined(__clang__)
87857         "ands	r6, r7\n\t"
87858 #else
87859         "and	r6, r7\n\t"
87860 #endif
87861         "ldr	r5, [%[a], r4]\n\t"
87862 #ifdef WOLFSSL_KEIL
87863         "sbcs	r5, r5, r6\n\t"
87864 #elif defined(__clang__)
87865         "sbcs	r5, r6\n\t"
87866 #else
87867         "sbc	r5, r6\n\t"
87868 #endif
87869         "stm	%[a]!, {r5}\n\t"
87870         "ldm	%[m]!, {r6}\n\t"
87871 #ifdef WOLFSSL_KEIL
87872         "ands	r6, r6, r7\n\t"
87873 #elif defined(__clang__)
87874         "ands	r6, r7\n\t"
87875 #else
87876         "and	r6, r7\n\t"
87877 #endif
87878         "ldr	r5, [%[a], r4]\n\t"
87879 #ifdef WOLFSSL_KEIL
87880         "sbcs	r5, r5, r6\n\t"
87881 #elif defined(__clang__)
87882         "sbcs	r5, r6\n\t"
87883 #else
87884         "sbc	r5, r6\n\t"
87885 #endif
87886         "stm	%[a]!, {r5}\n\t"
87887         "ldm	%[m]!, {r6}\n\t"
87888 #ifdef WOLFSSL_KEIL
87889         "ands	r6, r6, r7\n\t"
87890 #elif defined(__clang__)
87891         "ands	r6, r7\n\t"
87892 #else
87893         "and	r6, r7\n\t"
87894 #endif
87895         "ldr	r5, [%[a], r4]\n\t"
87896 #ifdef WOLFSSL_KEIL
87897         "sbcs	r5, r5, r6\n\t"
87898 #elif defined(__clang__)
87899         "sbcs	r5, r6\n\t"
87900 #else
87901         "sbc	r5, r6\n\t"
87902 #endif
87903         "stm	%[a]!, {r5}\n\t"
87904         "ldm	%[m]!, {r6}\n\t"
87905 #ifdef WOLFSSL_KEIL
87906         "ands	r6, r6, r7\n\t"
87907 #elif defined(__clang__)
87908         "ands	r6, r7\n\t"
87909 #else
87910         "and	r6, r7\n\t"
87911 #endif
87912         "ldr	r5, [%[a], r4]\n\t"
87913 #ifdef WOLFSSL_KEIL
87914         "sbcs	r5, r5, r6\n\t"
87915 #elif defined(__clang__)
87916         "sbcs	r5, r6\n\t"
87917 #else
87918         "sbc	r5, r6\n\t"
87919 #endif
87920         "stm	%[a]!, {r5}\n\t"
87921         "ldm	%[m]!, {r6}\n\t"
87922 #ifdef WOLFSSL_KEIL
87923         "ands	r6, r6, r7\n\t"
87924 #elif defined(__clang__)
87925         "ands	r6, r7\n\t"
87926 #else
87927         "and	r6, r7\n\t"
87928 #endif
87929         "ldr	r5, [%[a], r4]\n\t"
87930 #ifdef WOLFSSL_KEIL
87931         "sbcs	r5, r5, r6\n\t"
87932 #elif defined(__clang__)
87933         "sbcs	r5, r6\n\t"
87934 #else
87935         "sbc	r5, r6\n\t"
87936 #endif
87937         "stm	%[a]!, {r5}\n\t"
87938         "ldm	%[m]!, {r6}\n\t"
87939 #ifdef WOLFSSL_KEIL
87940         "ands	r6, r6, r7\n\t"
87941 #elif defined(__clang__)
87942         "ands	r6, r7\n\t"
87943 #else
87944         "and	r6, r7\n\t"
87945 #endif
87946         "ldr	r5, [%[a], r4]\n\t"
87947 #ifdef WOLFSSL_KEIL
87948         "sbcs	r5, r5, r6\n\t"
87949 #elif defined(__clang__)
87950         "sbcs	r5, r6\n\t"
87951 #else
87952         "sbc	r5, r6\n\t"
87953 #endif
87954         "stm	%[a]!, {r5}\n\t"
87955         "ldm	%[m]!, {r6}\n\t"
87956 #ifdef WOLFSSL_KEIL
87957         "ands	r6, r6, r7\n\t"
87958 #elif defined(__clang__)
87959         "ands	r6, r7\n\t"
87960 #else
87961         "and	r6, r7\n\t"
87962 #endif
87963         "ldr	r5, [%[a], r4]\n\t"
87964 #ifdef WOLFSSL_KEIL
87965         "sbcs	r5, r5, r6\n\t"
87966 #elif defined(__clang__)
87967         "sbcs	r5, r6\n\t"
87968 #else
87969         "sbc	r5, r6\n\t"
87970 #endif
87971         "stm	%[a]!, {r5}\n\t"
87972         "ldm	%[m]!, {r6}\n\t"
87973 #ifdef WOLFSSL_KEIL
87974         "ands	r6, r6, r7\n\t"
87975 #elif defined(__clang__)
87976         "ands	r6, r7\n\t"
87977 #else
87978         "and	r6, r7\n\t"
87979 #endif
87980         "ldr	r5, [%[a], r4]\n\t"
87981 #ifdef WOLFSSL_KEIL
87982         "sbcs	r5, r5, r6\n\t"
87983 #elif defined(__clang__)
87984         "sbcs	r5, r6\n\t"
87985 #else
87986         "sbc	r5, r6\n\t"
87987 #endif
87988         "stm	%[a]!, {r5}\n\t"
87989         "ldm	%[m]!, {r6}\n\t"
87990 #ifdef WOLFSSL_KEIL
87991         "ands	r6, r6, r7\n\t"
87992 #elif defined(__clang__)
87993         "ands	r6, r7\n\t"
87994 #else
87995         "and	r6, r7\n\t"
87996 #endif
87997         "ldr	r5, [%[a], r4]\n\t"
87998 #ifdef WOLFSSL_KEIL
87999         "sbcs	r5, r5, r6\n\t"
88000 #elif defined(__clang__)
88001         "sbcs	r5, r6\n\t"
88002 #else
88003         "sbc	r5, r6\n\t"
88004 #endif
88005         "stm	%[a]!, {r5}\n\t"
88006         "ldm	%[m]!, {r6}\n\t"
88007 #ifdef WOLFSSL_KEIL
88008         "ands	r6, r6, r7\n\t"
88009 #elif defined(__clang__)
88010         "ands	r6, r7\n\t"
88011 #else
88012         "and	r6, r7\n\t"
88013 #endif
88014         "ldr	r5, [%[a], r4]\n\t"
88015 #ifdef WOLFSSL_KEIL
88016         "sbcs	r5, r5, r6\n\t"
88017 #elif defined(__clang__)
88018         "sbcs	r5, r6\n\t"
88019 #else
88020         "sbc	r5, r6\n\t"
88021 #endif
88022         "stm	%[a]!, {r5}\n\t"
88023         "ldm	%[m]!, {r6}\n\t"
88024 #ifdef WOLFSSL_KEIL
88025         "ands	r6, r6, r7\n\t"
88026 #elif defined(__clang__)
88027         "ands	r6, r7\n\t"
88028 #else
88029         "and	r6, r7\n\t"
88030 #endif
88031         "ldr	r5, [%[a], r4]\n\t"
88032 #ifdef WOLFSSL_KEIL
88033         "sbcs	r5, r5, r6\n\t"
88034 #elif defined(__clang__)
88035         "sbcs	r5, r6\n\t"
88036 #else
88037         "sbc	r5, r6\n\t"
88038 #endif
88039         "stm	%[a]!, {r5}\n\t"
88040         "ldm	%[m]!, {r6}\n\t"
88041 #ifdef WOLFSSL_KEIL
88042         "ands	r6, r6, r7\n\t"
88043 #elif defined(__clang__)
88044         "ands	r6, r7\n\t"
88045 #else
88046         "and	r6, r7\n\t"
88047 #endif
88048         "ldr	r5, [%[a], r4]\n\t"
88049 #ifdef WOLFSSL_KEIL
88050         "sbcs	r5, r5, r6\n\t"
88051 #elif defined(__clang__)
88052         "sbcs	r5, r6\n\t"
88053 #else
88054         "sbc	r5, r6\n\t"
88055 #endif
88056         "stm	%[a]!, {r5}\n\t"
88057         "ldm	%[m]!, {r6}\n\t"
88058 #ifdef WOLFSSL_KEIL
88059         "ands	r6, r6, r7\n\t"
88060 #elif defined(__clang__)
88061         "ands	r6, r7\n\t"
88062 #else
88063         "and	r6, r7\n\t"
88064 #endif
88065         "ldr	r5, [%[a], r4]\n\t"
88066 #ifdef WOLFSSL_KEIL
88067         "sbcs	r5, r5, r6\n\t"
88068 #elif defined(__clang__)
88069         "sbcs	r5, r6\n\t"
88070 #else
88071         "sbc	r5, r6\n\t"
88072 #endif
88073         "stm	%[a]!, {r5}\n\t"
88074         "ldm	%[m]!, {r6}\n\t"
88075 #ifdef WOLFSSL_KEIL
88076         "ands	r6, r6, r7\n\t"
88077 #elif defined(__clang__)
88078         "ands	r6, r7\n\t"
88079 #else
88080         "and	r6, r7\n\t"
88081 #endif
88082         "ldr	r5, [%[a], r4]\n\t"
88083 #ifdef WOLFSSL_KEIL
88084         "sbcs	r5, r5, r6\n\t"
88085 #elif defined(__clang__)
88086         "sbcs	r5, r6\n\t"
88087 #else
88088         "sbc	r5, r6\n\t"
88089 #endif
88090         "stm	%[a]!, {r5}\n\t"
88091         "ldm	%[m]!, {r6}\n\t"
88092 #ifdef WOLFSSL_KEIL
88093         "ands	r6, r6, r7\n\t"
88094 #elif defined(__clang__)
88095         "ands	r6, r7\n\t"
88096 #else
88097         "and	r6, r7\n\t"
88098 #endif
88099         "ldr	r5, [%[a], r4]\n\t"
88100 #ifdef WOLFSSL_KEIL
88101         "sbcs	r5, r5, r6\n\t"
88102 #elif defined(__clang__)
88103         "sbcs	r5, r6\n\t"
88104 #else
88105         "sbc	r5, r6\n\t"
88106 #endif
88107         "stm	%[a]!, {r5}\n\t"
88108         "ldm	%[m]!, {r6}\n\t"
88109 #ifdef WOLFSSL_KEIL
88110         "ands	r6, r6, r7\n\t"
88111 #elif defined(__clang__)
88112         "ands	r6, r7\n\t"
88113 #else
88114         "and	r6, r7\n\t"
88115 #endif
88116         "ldr	r5, [%[a], r4]\n\t"
88117 #ifdef WOLFSSL_KEIL
88118         "sbcs	r5, r5, r6\n\t"
88119 #elif defined(__clang__)
88120         "sbcs	r5, r6\n\t"
88121 #else
88122         "sbc	r5, r6\n\t"
88123 #endif
88124         "stm	%[a]!, {r5}\n\t"
88125         "ldm	%[m]!, {r6}\n\t"
88126 #ifdef WOLFSSL_KEIL
88127         "ands	r6, r6, r7\n\t"
88128 #elif defined(__clang__)
88129         "ands	r6, r7\n\t"
88130 #else
88131         "and	r6, r7\n\t"
88132 #endif
88133         "ldr	r5, [%[a], r4]\n\t"
88134 #ifdef WOLFSSL_KEIL
88135         "sbcs	r5, r5, r6\n\t"
88136 #elif defined(__clang__)
88137         "sbcs	r5, r6\n\t"
88138 #else
88139         "sbc	r5, r6\n\t"
88140 #endif
88141         "stm	%[a]!, {r5}\n\t"
88142         "ldm	%[m]!, {r6}\n\t"
88143 #ifdef WOLFSSL_KEIL
88144         "ands	r6, r6, r7\n\t"
88145 #elif defined(__clang__)
88146         "ands	r6, r7\n\t"
88147 #else
88148         "and	r6, r7\n\t"
88149 #endif
88150         "ldr	r5, [%[a], r4]\n\t"
88151 #ifdef WOLFSSL_KEIL
88152         "sbcs	r5, r5, r6\n\t"
88153 #elif defined(__clang__)
88154         "sbcs	r5, r6\n\t"
88155 #else
88156         "sbc	r5, r6\n\t"
88157 #endif
88158         "stm	%[a]!, {r5}\n\t"
88159         "ldm	%[m]!, {r6}\n\t"
88160 #ifdef WOLFSSL_KEIL
88161         "ands	r6, r6, r7\n\t"
88162 #elif defined(__clang__)
88163         "ands	r6, r7\n\t"
88164 #else
88165         "and	r6, r7\n\t"
88166 #endif
88167         "ldr	r5, [%[a], r4]\n\t"
88168 #ifdef WOLFSSL_KEIL
88169         "sbcs	r5, r5, r6\n\t"
88170 #elif defined(__clang__)
88171         "sbcs	r5, r6\n\t"
88172 #else
88173         "sbc	r5, r6\n\t"
88174 #endif
88175         "stm	%[a]!, {r5}\n\t"
88176         "ldm	%[m]!, {r6}\n\t"
88177 #ifdef WOLFSSL_KEIL
88178         "ands	r6, r6, r7\n\t"
88179 #elif defined(__clang__)
88180         "ands	r6, r7\n\t"
88181 #else
88182         "and	r6, r7\n\t"
88183 #endif
88184         "ldr	r5, [%[a], r4]\n\t"
88185 #ifdef WOLFSSL_KEIL
88186         "sbcs	r5, r5, r6\n\t"
88187 #elif defined(__clang__)
88188         "sbcs	r5, r6\n\t"
88189 #else
88190         "sbc	r5, r6\n\t"
88191 #endif
88192         "stm	%[a]!, {r5}\n\t"
88193         "ldm	%[m]!, {r6}\n\t"
88194 #ifdef WOLFSSL_KEIL
88195         "ands	r6, r6, r7\n\t"
88196 #elif defined(__clang__)
88197         "ands	r6, r7\n\t"
88198 #else
88199         "and	r6, r7\n\t"
88200 #endif
88201         "ldr	r5, [%[a], r4]\n\t"
88202 #ifdef WOLFSSL_KEIL
88203         "sbcs	r5, r5, r6\n\t"
88204 #elif defined(__clang__)
88205         "sbcs	r5, r6\n\t"
88206 #else
88207         "sbc	r5, r6\n\t"
88208 #endif
88209         "stm	%[a]!, {r5}\n\t"
88210         "ldm	%[m]!, {r6}\n\t"
88211 #ifdef WOLFSSL_KEIL
88212         "ands	r6, r6, r7\n\t"
88213 #elif defined(__clang__)
88214         "ands	r6, r7\n\t"
88215 #else
88216         "and	r6, r7\n\t"
88217 #endif
88218         "ldr	r5, [%[a], r4]\n\t"
88219 #ifdef WOLFSSL_KEIL
88220         "sbcs	r5, r5, r6\n\t"
88221 #elif defined(__clang__)
88222         "sbcs	r5, r6\n\t"
88223 #else
88224         "sbc	r5, r6\n\t"
88225 #endif
88226         "stm	%[a]!, {r5}\n\t"
88227         "ldm	%[m]!, {r6}\n\t"
88228 #ifdef WOLFSSL_KEIL
88229         "ands	r6, r6, r7\n\t"
88230 #elif defined(__clang__)
88231         "ands	r6, r7\n\t"
88232 #else
88233         "and	r6, r7\n\t"
88234 #endif
88235         "ldr	r5, [%[a], r4]\n\t"
88236 #ifdef WOLFSSL_KEIL
88237         "sbcs	r5, r5, r6\n\t"
88238 #elif defined(__clang__)
88239         "sbcs	r5, r6\n\t"
88240 #else
88241         "sbc	r5, r6\n\t"
88242 #endif
88243         "stm	%[a]!, {r5}\n\t"
88244         "ldm	%[m]!, {r6}\n\t"
88245 #ifdef WOLFSSL_KEIL
88246         "ands	r6, r6, r7\n\t"
88247 #elif defined(__clang__)
88248         "ands	r6, r7\n\t"
88249 #else
88250         "and	r6, r7\n\t"
88251 #endif
88252         "ldr	r5, [%[a], r4]\n\t"
88253 #ifdef WOLFSSL_KEIL
88254         "sbcs	r5, r5, r6\n\t"
88255 #elif defined(__clang__)
88256         "sbcs	r5, r6\n\t"
88257 #else
88258         "sbc	r5, r6\n\t"
88259 #endif
88260         "stm	%[a]!, {r5}\n\t"
88261         "ldm	%[m]!, {r6}\n\t"
88262 #ifdef WOLFSSL_KEIL
88263         "ands	r6, r6, r7\n\t"
88264 #elif defined(__clang__)
88265         "ands	r6, r7\n\t"
88266 #else
88267         "and	r6, r7\n\t"
88268 #endif
88269         "ldr	r5, [%[a], r4]\n\t"
88270 #ifdef WOLFSSL_KEIL
88271         "sbcs	r5, r5, r6\n\t"
88272 #elif defined(__clang__)
88273         "sbcs	r5, r6\n\t"
88274 #else
88275         "sbc	r5, r6\n\t"
88276 #endif
88277         "stm	%[a]!, {r5}\n\t"
88278         "ldm	%[m]!, {r6}\n\t"
88279 #ifdef WOLFSSL_KEIL
88280         "ands	r6, r6, r7\n\t"
88281 #elif defined(__clang__)
88282         "ands	r6, r7\n\t"
88283 #else
88284         "and	r6, r7\n\t"
88285 #endif
88286         "ldr	r5, [%[a], r4]\n\t"
88287 #ifdef WOLFSSL_KEIL
88288         "sbcs	r5, r5, r6\n\t"
88289 #elif defined(__clang__)
88290         "sbcs	r5, r6\n\t"
88291 #else
88292         "sbc	r5, r6\n\t"
88293 #endif
88294         "stm	%[a]!, {r5}\n\t"
88295         "ldm	%[m]!, {r6}\n\t"
88296 #ifdef WOLFSSL_KEIL
88297         "ands	r6, r6, r7\n\t"
88298 #elif defined(__clang__)
88299         "ands	r6, r7\n\t"
88300 #else
88301         "and	r6, r7\n\t"
88302 #endif
88303         "ldr	r5, [%[a], r4]\n\t"
88304 #ifdef WOLFSSL_KEIL
88305         "sbcs	r5, r5, r6\n\t"
88306 #elif defined(__clang__)
88307         "sbcs	r5, r6\n\t"
88308 #else
88309         "sbc	r5, r6\n\t"
88310 #endif
88311         "stm	%[a]!, {r5}\n\t"
88312         "ldm	%[m]!, {r6}\n\t"
88313 #ifdef WOLFSSL_KEIL
88314         "ands	r6, r6, r7\n\t"
88315 #elif defined(__clang__)
88316         "ands	r6, r7\n\t"
88317 #else
88318         "and	r6, r7\n\t"
88319 #endif
88320         "ldr	r5, [%[a], r4]\n\t"
88321 #ifdef WOLFSSL_KEIL
88322         "sbcs	r5, r5, r6\n\t"
88323 #elif defined(__clang__)
88324         "sbcs	r5, r6\n\t"
88325 #else
88326         "sbc	r5, r6\n\t"
88327 #endif
88328         "stm	%[a]!, {r5}\n\t"
88329         "ldm	%[m]!, {r6}\n\t"
88330 #ifdef WOLFSSL_KEIL
88331         "ands	r6, r6, r7\n\t"
88332 #elif defined(__clang__)
88333         "ands	r6, r7\n\t"
88334 #else
88335         "and	r6, r7\n\t"
88336 #endif
88337         "ldr	r5, [%[a], r4]\n\t"
88338 #ifdef WOLFSSL_KEIL
88339         "sbcs	r5, r5, r6\n\t"
88340 #elif defined(__clang__)
88341         "sbcs	r5, r6\n\t"
88342 #else
88343         "sbc	r5, r6\n\t"
88344 #endif
88345         "stm	%[a]!, {r5}\n\t"
88346         "ldm	%[m]!, {r6}\n\t"
88347 #ifdef WOLFSSL_KEIL
88348         "ands	r6, r6, r7\n\t"
88349 #elif defined(__clang__)
88350         "ands	r6, r7\n\t"
88351 #else
88352         "and	r6, r7\n\t"
88353 #endif
88354         "ldr	r5, [%[a], r4]\n\t"
88355 #ifdef WOLFSSL_KEIL
88356         "sbcs	r5, r5, r6\n\t"
88357 #elif defined(__clang__)
88358         "sbcs	r5, r6\n\t"
88359 #else
88360         "sbc	r5, r6\n\t"
88361 #endif
88362         "stm	%[a]!, {r5}\n\t"
88363         "ldm	%[m]!, {r6}\n\t"
88364 #ifdef WOLFSSL_KEIL
88365         "ands	r6, r6, r7\n\t"
88366 #elif defined(__clang__)
88367         "ands	r6, r7\n\t"
88368 #else
88369         "and	r6, r7\n\t"
88370 #endif
88371         "ldr	r5, [%[a], r4]\n\t"
88372 #ifdef WOLFSSL_KEIL
88373         "sbcs	r5, r5, r6\n\t"
88374 #elif defined(__clang__)
88375         "sbcs	r5, r6\n\t"
88376 #else
88377         "sbc	r5, r6\n\t"
88378 #endif
88379         "stm	%[a]!, {r5}\n\t"
88380         "ldm	%[m]!, {r6}\n\t"
88381 #ifdef WOLFSSL_KEIL
88382         "ands	r6, r6, r7\n\t"
88383 #elif defined(__clang__)
88384         "ands	r6, r7\n\t"
88385 #else
88386         "and	r6, r7\n\t"
88387 #endif
88388         "ldr	r5, [%[a], r4]\n\t"
88389 #ifdef WOLFSSL_KEIL
88390         "sbcs	r5, r5, r6\n\t"
88391 #elif defined(__clang__)
88392         "sbcs	r5, r6\n\t"
88393 #else
88394         "sbc	r5, r6\n\t"
88395 #endif
88396         "stm	%[a]!, {r5}\n\t"
88397         "ldm	%[m]!, {r6}\n\t"
88398 #ifdef WOLFSSL_KEIL
88399         "ands	r6, r6, r7\n\t"
88400 #elif defined(__clang__)
88401         "ands	r6, r7\n\t"
88402 #else
88403         "and	r6, r7\n\t"
88404 #endif
88405         "ldr	r5, [%[a], r4]\n\t"
88406 #ifdef WOLFSSL_KEIL
88407         "sbcs	r5, r5, r6\n\t"
88408 #elif defined(__clang__)
88409         "sbcs	r5, r6\n\t"
88410 #else
88411         "sbc	r5, r6\n\t"
88412 #endif
88413         "stm	%[a]!, {r5}\n\t"
88414         "ldm	%[m]!, {r6}\n\t"
88415 #ifdef WOLFSSL_KEIL
88416         "ands	r6, r6, r7\n\t"
88417 #elif defined(__clang__)
88418         "ands	r6, r7\n\t"
88419 #else
88420         "and	r6, r7\n\t"
88421 #endif
88422         "ldr	r5, [%[a], r4]\n\t"
88423 #ifdef WOLFSSL_KEIL
88424         "sbcs	r5, r5, r6\n\t"
88425 #elif defined(__clang__)
88426         "sbcs	r5, r6\n\t"
88427 #else
88428         "sbc	r5, r6\n\t"
88429 #endif
88430         "stm	%[a]!, {r5}\n\t"
88431         "ldm	%[m]!, {r6}\n\t"
88432 #ifdef WOLFSSL_KEIL
88433         "ands	r6, r6, r7\n\t"
88434 #elif defined(__clang__)
88435         "ands	r6, r7\n\t"
88436 #else
88437         "and	r6, r7\n\t"
88438 #endif
88439         "ldr	r5, [%[a], r4]\n\t"
88440 #ifdef WOLFSSL_KEIL
88441         "sbcs	r5, r5, r6\n\t"
88442 #elif defined(__clang__)
88443         "sbcs	r5, r6\n\t"
88444 #else
88445         "sbc	r5, r6\n\t"
88446 #endif
88447         "stm	%[a]!, {r5}\n\t"
88448         "ldm	%[m]!, {r6}\n\t"
88449 #ifdef WOLFSSL_KEIL
88450         "ands	r6, r6, r7\n\t"
88451 #elif defined(__clang__)
88452         "ands	r6, r7\n\t"
88453 #else
88454         "and	r6, r7\n\t"
88455 #endif
88456         "ldr	r5, [%[a], r4]\n\t"
88457 #ifdef WOLFSSL_KEIL
88458         "sbcs	r5, r5, r6\n\t"
88459 #elif defined(__clang__)
88460         "sbcs	r5, r6\n\t"
88461 #else
88462         "sbc	r5, r6\n\t"
88463 #endif
88464         "stm	%[a]!, {r5}\n\t"
88465         "ldm	%[m]!, {r6}\n\t"
88466 #ifdef WOLFSSL_KEIL
88467         "ands	r6, r6, r7\n\t"
88468 #elif defined(__clang__)
88469         "ands	r6, r7\n\t"
88470 #else
88471         "and	r6, r7\n\t"
88472 #endif
88473         "ldr	r5, [%[a], r4]\n\t"
88474 #ifdef WOLFSSL_KEIL
88475         "sbcs	r5, r5, r6\n\t"
88476 #elif defined(__clang__)
88477         "sbcs	r5, r6\n\t"
88478 #else
88479         "sbc	r5, r6\n\t"
88480 #endif
88481         "stm	%[a]!, {r5}\n\t"
88482         "ldm	%[m]!, {r6}\n\t"
88483 #ifdef WOLFSSL_KEIL
88484         "ands	r6, r6, r7\n\t"
88485 #elif defined(__clang__)
88486         "ands	r6, r7\n\t"
88487 #else
88488         "and	r6, r7\n\t"
88489 #endif
88490         "ldr	r5, [%[a], r4]\n\t"
88491 #ifdef WOLFSSL_KEIL
88492         "sbcs	r5, r5, r6\n\t"
88493 #elif defined(__clang__)
88494         "sbcs	r5, r6\n\t"
88495 #else
88496         "sbc	r5, r6\n\t"
88497 #endif
88498         "stm	%[a]!, {r5}\n\t"
88499         "ldm	%[m]!, {r6}\n\t"
88500 #ifdef WOLFSSL_KEIL
88501         "ands	r6, r6, r7\n\t"
88502 #elif defined(__clang__)
88503         "ands	r6, r7\n\t"
88504 #else
88505         "and	r6, r7\n\t"
88506 #endif
88507         "ldr	r5, [%[a], r4]\n\t"
88508 #ifdef WOLFSSL_KEIL
88509         "sbcs	r5, r5, r6\n\t"
88510 #elif defined(__clang__)
88511         "sbcs	r5, r6\n\t"
88512 #else
88513         "sbc	r5, r6\n\t"
88514 #endif
88515         "stm	%[a]!, {r5}\n\t"
88516         "ldm	%[m]!, {r6}\n\t"
88517 #ifdef WOLFSSL_KEIL
88518         "ands	r6, r6, r7\n\t"
88519 #elif defined(__clang__)
88520         "ands	r6, r7\n\t"
88521 #else
88522         "and	r6, r7\n\t"
88523 #endif
88524         "ldr	r5, [%[a], r4]\n\t"
88525 #ifdef WOLFSSL_KEIL
88526         "sbcs	r5, r5, r6\n\t"
88527 #elif defined(__clang__)
88528         "sbcs	r5, r6\n\t"
88529 #else
88530         "sbc	r5, r6\n\t"
88531 #endif
88532         "stm	%[a]!, {r5}\n\t"
88533         "ldm	%[m]!, {r6}\n\t"
88534 #ifdef WOLFSSL_KEIL
88535         "ands	r6, r6, r7\n\t"
88536 #elif defined(__clang__)
88537         "ands	r6, r7\n\t"
88538 #else
88539         "and	r6, r7\n\t"
88540 #endif
88541         "ldr	r5, [%[a], r4]\n\t"
88542 #ifdef WOLFSSL_KEIL
88543         "sbcs	r5, r5, r6\n\t"
88544 #elif defined(__clang__)
88545         "sbcs	r5, r6\n\t"
88546 #else
88547         "sbc	r5, r6\n\t"
88548 #endif
88549         "stm	%[a]!, {r5}\n\t"
88550         "ldm	%[m]!, {r6}\n\t"
88551 #ifdef WOLFSSL_KEIL
88552         "ands	r6, r6, r7\n\t"
88553 #elif defined(__clang__)
88554         "ands	r6, r7\n\t"
88555 #else
88556         "and	r6, r7\n\t"
88557 #endif
88558         "ldr	r5, [%[a], r4]\n\t"
88559 #ifdef WOLFSSL_KEIL
88560         "sbcs	r5, r5, r6\n\t"
88561 #elif defined(__clang__)
88562         "sbcs	r5, r6\n\t"
88563 #else
88564         "sbc	r5, r6\n\t"
88565 #endif
88566         "stm	%[a]!, {r5}\n\t"
88567         "ldm	%[m]!, {r6}\n\t"
88568 #ifdef WOLFSSL_KEIL
88569         "ands	r6, r6, r7\n\t"
88570 #elif defined(__clang__)
88571         "ands	r6, r7\n\t"
88572 #else
88573         "and	r6, r7\n\t"
88574 #endif
88575         "ldr	r5, [%[a], r4]\n\t"
88576 #ifdef WOLFSSL_KEIL
88577         "sbcs	r5, r5, r6\n\t"
88578 #elif defined(__clang__)
88579         "sbcs	r5, r6\n\t"
88580 #else
88581         "sbc	r5, r6\n\t"
88582 #endif
88583         "stm	%[a]!, {r5}\n\t"
88584         "ldm	%[m]!, {r6}\n\t"
88585 #ifdef WOLFSSL_KEIL
88586         "ands	r6, r6, r7\n\t"
88587 #elif defined(__clang__)
88588         "ands	r6, r7\n\t"
88589 #else
88590         "and	r6, r7\n\t"
88591 #endif
88592         "ldr	r5, [%[a], r4]\n\t"
88593 #ifdef WOLFSSL_KEIL
88594         "sbcs	r5, r5, r6\n\t"
88595 #elif defined(__clang__)
88596         "sbcs	r5, r6\n\t"
88597 #else
88598         "sbc	r5, r6\n\t"
88599 #endif
88600         "stm	%[a]!, {r5}\n\t"
88601         "ldm	%[m]!, {r6}\n\t"
88602 #ifdef WOLFSSL_KEIL
88603         "ands	r6, r6, r7\n\t"
88604 #elif defined(__clang__)
88605         "ands	r6, r7\n\t"
88606 #else
88607         "and	r6, r7\n\t"
88608 #endif
88609         "ldr	r5, [%[a], r4]\n\t"
88610 #ifdef WOLFSSL_KEIL
88611         "sbcs	r5, r5, r6\n\t"
88612 #elif defined(__clang__)
88613         "sbcs	r5, r6\n\t"
88614 #else
88615         "sbc	r5, r6\n\t"
88616 #endif
88617         "stm	%[a]!, {r5}\n\t"
88618         "ldm	%[m]!, {r6}\n\t"
88619 #ifdef WOLFSSL_KEIL
88620         "ands	r6, r6, r7\n\t"
88621 #elif defined(__clang__)
88622         "ands	r6, r7\n\t"
88623 #else
88624         "and	r6, r7\n\t"
88625 #endif
88626         "ldr	r5, [%[a], r4]\n\t"
88627 #ifdef WOLFSSL_KEIL
88628         "sbcs	r5, r5, r6\n\t"
88629 #elif defined(__clang__)
88630         "sbcs	r5, r6\n\t"
88631 #else
88632         "sbc	r5, r6\n\t"
88633 #endif
88634         "stm	%[a]!, {r5}\n\t"
88635         "ldm	%[m]!, {r6}\n\t"
88636 #ifdef WOLFSSL_KEIL
88637         "ands	r6, r6, r7\n\t"
88638 #elif defined(__clang__)
88639         "ands	r6, r7\n\t"
88640 #else
88641         "and	r6, r7\n\t"
88642 #endif
88643         "ldr	r5, [%[a], r4]\n\t"
88644 #ifdef WOLFSSL_KEIL
88645         "sbcs	r5, r5, r6\n\t"
88646 #elif defined(__clang__)
88647         "sbcs	r5, r6\n\t"
88648 #else
88649         "sbc	r5, r6\n\t"
88650 #endif
88651         "stm	%[a]!, {r5}\n\t"
88652         "ldm	%[m]!, {r6}\n\t"
88653 #ifdef WOLFSSL_KEIL
88654         "ands	r6, r6, r7\n\t"
88655 #elif defined(__clang__)
88656         "ands	r6, r7\n\t"
88657 #else
88658         "and	r6, r7\n\t"
88659 #endif
88660         "ldr	r5, [%[a], r4]\n\t"
88661 #ifdef WOLFSSL_KEIL
88662         "sbcs	r5, r5, r6\n\t"
88663 #elif defined(__clang__)
88664         "sbcs	r5, r6\n\t"
88665 #else
88666         "sbc	r5, r6\n\t"
88667 #endif
88668         "stm	%[a]!, {r5}\n\t"
88669         "ldm	%[m]!, {r6}\n\t"
88670 #ifdef WOLFSSL_KEIL
88671         "ands	r6, r6, r7\n\t"
88672 #elif defined(__clang__)
88673         "ands	r6, r7\n\t"
88674 #else
88675         "and	r6, r7\n\t"
88676 #endif
88677         "ldr	r5, [%[a], r4]\n\t"
88678 #ifdef WOLFSSL_KEIL
88679         "sbcs	r5, r5, r6\n\t"
88680 #elif defined(__clang__)
88681         "sbcs	r5, r6\n\t"
88682 #else
88683         "sbc	r5, r6\n\t"
88684 #endif
88685         "stm	%[a]!, {r5}\n\t"
88686         "ldm	%[m]!, {r6}\n\t"
88687 #ifdef WOLFSSL_KEIL
88688         "ands	r6, r6, r7\n\t"
88689 #elif defined(__clang__)
88690         "ands	r6, r7\n\t"
88691 #else
88692         "and	r6, r7\n\t"
88693 #endif
88694         "ldr	r5, [%[a], r4]\n\t"
88695 #ifdef WOLFSSL_KEIL
88696         "sbcs	r5, r5, r6\n\t"
88697 #elif defined(__clang__)
88698         "sbcs	r5, r6\n\t"
88699 #else
88700         "sbc	r5, r6\n\t"
88701 #endif
88702         "stm	%[a]!, {r5}\n\t"
88703         "ldm	%[m]!, {r6}\n\t"
88704 #ifdef WOLFSSL_KEIL
88705         "ands	r6, r6, r7\n\t"
88706 #elif defined(__clang__)
88707         "ands	r6, r7\n\t"
88708 #else
88709         "and	r6, r7\n\t"
88710 #endif
88711         "ldr	r5, [%[a], r4]\n\t"
88712 #ifdef WOLFSSL_KEIL
88713         "sbcs	r5, r5, r6\n\t"
88714 #elif defined(__clang__)
88715         "sbcs	r5, r6\n\t"
88716 #else
88717         "sbc	r5, r6\n\t"
88718 #endif
88719         "stm	%[a]!, {r5}\n\t"
88720         "ldm	%[m]!, {r6}\n\t"
88721 #ifdef WOLFSSL_KEIL
88722         "ands	r6, r6, r7\n\t"
88723 #elif defined(__clang__)
88724         "ands	r6, r7\n\t"
88725 #else
88726         "and	r6, r7\n\t"
88727 #endif
88728         "ldr	r5, [%[a], r4]\n\t"
88729 #ifdef WOLFSSL_KEIL
88730         "sbcs	r5, r5, r6\n\t"
88731 #elif defined(__clang__)
88732         "sbcs	r5, r6\n\t"
88733 #else
88734         "sbc	r5, r6\n\t"
88735 #endif
88736         "stm	%[a]!, {r5}\n\t"
88737         "ldm	%[m]!, {r6}\n\t"
88738 #ifdef WOLFSSL_KEIL
88739         "ands	r6, r6, r7\n\t"
88740 #elif defined(__clang__)
88741         "ands	r6, r7\n\t"
88742 #else
88743         "and	r6, r7\n\t"
88744 #endif
88745         "ldr	r5, [%[a], r4]\n\t"
88746 #ifdef WOLFSSL_KEIL
88747         "sbcs	r5, r5, r6\n\t"
88748 #elif defined(__clang__)
88749         "sbcs	r5, r6\n\t"
88750 #else
88751         "sbc	r5, r6\n\t"
88752 #endif
88753         "stm	%[a]!, {r5}\n\t"
88754         "ldm	%[m]!, {r6}\n\t"
88755 #ifdef WOLFSSL_KEIL
88756         "ands	r6, r6, r7\n\t"
88757 #elif defined(__clang__)
88758         "ands	r6, r7\n\t"
88759 #else
88760         "and	r6, r7\n\t"
88761 #endif
88762         "ldr	r5, [%[a], r4]\n\t"
88763 #ifdef WOLFSSL_KEIL
88764         "sbcs	r5, r5, r6\n\t"
88765 #elif defined(__clang__)
88766         "sbcs	r5, r6\n\t"
88767 #else
88768         "sbc	r5, r6\n\t"
88769 #endif
88770         "stm	%[a]!, {r5}\n\t"
88771         "ldm	%[m]!, {r6}\n\t"
88772 #ifdef WOLFSSL_KEIL
88773         "ands	r6, r6, r7\n\t"
88774 #elif defined(__clang__)
88775         "ands	r6, r7\n\t"
88776 #else
88777         "and	r6, r7\n\t"
88778 #endif
88779         "ldr	r5, [%[a], r4]\n\t"
88780 #ifdef WOLFSSL_KEIL
88781         "sbcs	r5, r5, r6\n\t"
88782 #elif defined(__clang__)
88783         "sbcs	r5, r6\n\t"
88784 #else
88785         "sbc	r5, r6\n\t"
88786 #endif
88787         "stm	%[a]!, {r5}\n\t"
88788         "ldm	%[m]!, {r6}\n\t"
88789 #ifdef WOLFSSL_KEIL
88790         "ands	r6, r6, r7\n\t"
88791 #elif defined(__clang__)
88792         "ands	r6, r7\n\t"
88793 #else
88794         "and	r6, r7\n\t"
88795 #endif
88796         "ldr	r5, [%[a], r4]\n\t"
88797 #ifdef WOLFSSL_KEIL
88798         "sbcs	r5, r5, r6\n\t"
88799 #elif defined(__clang__)
88800         "sbcs	r5, r6\n\t"
88801 #else
88802         "sbc	r5, r6\n\t"
88803 #endif
88804         "stm	%[a]!, {r5}\n\t"
88805         "ldm	%[m]!, {r6}\n\t"
88806 #ifdef WOLFSSL_KEIL
88807         "ands	r6, r6, r7\n\t"
88808 #elif defined(__clang__)
88809         "ands	r6, r7\n\t"
88810 #else
88811         "and	r6, r7\n\t"
88812 #endif
88813         "ldr	r5, [%[a], r4]\n\t"
88814 #ifdef WOLFSSL_KEIL
88815         "sbcs	r5, r5, r6\n\t"
88816 #elif defined(__clang__)
88817         "sbcs	r5, r6\n\t"
88818 #else
88819         "sbc	r5, r6\n\t"
88820 #endif
88821         "stm	%[a]!, {r5}\n\t"
88822         "ldm	%[m]!, {r6}\n\t"
88823 #ifdef WOLFSSL_KEIL
88824         "ands	r6, r6, r7\n\t"
88825 #elif defined(__clang__)
88826         "ands	r6, r7\n\t"
88827 #else
88828         "and	r6, r7\n\t"
88829 #endif
88830         "ldr	r5, [%[a], r4]\n\t"
88831 #ifdef WOLFSSL_KEIL
88832         "sbcs	r5, r5, r6\n\t"
88833 #elif defined(__clang__)
88834         "sbcs	r5, r6\n\t"
88835 #else
88836         "sbc	r5, r6\n\t"
88837 #endif
88838         "stm	%[a]!, {r5}\n\t"
88839         "ldm	%[m]!, {r6}\n\t"
88840 #ifdef WOLFSSL_KEIL
88841         "ands	r6, r6, r7\n\t"
88842 #elif defined(__clang__)
88843         "ands	r6, r7\n\t"
88844 #else
88845         "and	r6, r7\n\t"
88846 #endif
88847         "ldr	r5, [%[a], r4]\n\t"
88848 #ifdef WOLFSSL_KEIL
88849         "sbcs	r5, r5, r6\n\t"
88850 #elif defined(__clang__)
88851         "sbcs	r5, r6\n\t"
88852 #else
88853         "sbc	r5, r6\n\t"
88854 #endif
88855         "stm	%[a]!, {r5}\n\t"
88856         "ldm	%[m]!, {r6}\n\t"
88857 #ifdef WOLFSSL_KEIL
88858         "ands	r6, r6, r7\n\t"
88859 #elif defined(__clang__)
88860         "ands	r6, r7\n\t"
88861 #else
88862         "and	r6, r7\n\t"
88863 #endif
88864         "ldr	r5, [%[a], r4]\n\t"
88865 #ifdef WOLFSSL_KEIL
88866         "sbcs	r5, r5, r6\n\t"
88867 #elif defined(__clang__)
88868         "sbcs	r5, r6\n\t"
88869 #else
88870         "sbc	r5, r6\n\t"
88871 #endif
88872         "stm	%[a]!, {r5}\n\t"
88873         "ldm	%[m]!, {r6}\n\t"
88874 #ifdef WOLFSSL_KEIL
88875         "ands	r6, r6, r7\n\t"
88876 #elif defined(__clang__)
88877         "ands	r6, r7\n\t"
88878 #else
88879         "and	r6, r7\n\t"
88880 #endif
88881         "ldr	r5, [%[a], r4]\n\t"
88882 #ifdef WOLFSSL_KEIL
88883         "sbcs	r5, r5, r6\n\t"
88884 #elif defined(__clang__)
88885         "sbcs	r5, r6\n\t"
88886 #else
88887         "sbc	r5, r6\n\t"
88888 #endif
88889         "stm	%[a]!, {r5}\n\t"
88890         "ldm	%[m]!, {r6}\n\t"
88891 #ifdef WOLFSSL_KEIL
88892         "ands	r6, r6, r7\n\t"
88893 #elif defined(__clang__)
88894         "ands	r6, r7\n\t"
88895 #else
88896         "and	r6, r7\n\t"
88897 #endif
88898         "ldr	r5, [%[a], r4]\n\t"
88899 #ifdef WOLFSSL_KEIL
88900         "sbcs	r5, r5, r6\n\t"
88901 #elif defined(__clang__)
88902         "sbcs	r5, r6\n\t"
88903 #else
88904         "sbc	r5, r6\n\t"
88905 #endif
88906         "stm	%[a]!, {r5}\n\t"
88907         "ldm	%[m]!, {r6}\n\t"
88908 #ifdef WOLFSSL_KEIL
88909         "ands	r6, r6, r7\n\t"
88910 #elif defined(__clang__)
88911         "ands	r6, r7\n\t"
88912 #else
88913         "and	r6, r7\n\t"
88914 #endif
88915         "ldr	r5, [%[a], r4]\n\t"
88916 #ifdef WOLFSSL_KEIL
88917         "sbcs	r5, r5, r6\n\t"
88918 #elif defined(__clang__)
88919         "sbcs	r5, r6\n\t"
88920 #else
88921         "sbc	r5, r6\n\t"
88922 #endif
88923         "stm	%[a]!, {r5}\n\t"
88924         "ldm	%[m]!, {r6}\n\t"
88925 #ifdef WOLFSSL_KEIL
88926         "ands	r6, r6, r7\n\t"
88927 #elif defined(__clang__)
88928         "ands	r6, r7\n\t"
88929 #else
88930         "and	r6, r7\n\t"
88931 #endif
88932         "ldr	r5, [%[a], r4]\n\t"
88933 #ifdef WOLFSSL_KEIL
88934         "sbcs	r5, r5, r6\n\t"
88935 #elif defined(__clang__)
88936         "sbcs	r5, r6\n\t"
88937 #else
88938         "sbc	r5, r6\n\t"
88939 #endif
88940         "stm	%[a]!, {r5}\n\t"
88941         "ldm	%[m]!, {r6}\n\t"
88942 #ifdef WOLFSSL_KEIL
88943         "ands	r6, r6, r7\n\t"
88944 #elif defined(__clang__)
88945         "ands	r6, r7\n\t"
88946 #else
88947         "and	r6, r7\n\t"
88948 #endif
88949         "ldr	r5, [%[a], r4]\n\t"
88950 #ifdef WOLFSSL_KEIL
88951         "sbcs	r5, r5, r6\n\t"
88952 #elif defined(__clang__)
88953         "sbcs	r5, r6\n\t"
88954 #else
88955         "sbc	r5, r6\n\t"
88956 #endif
88957         "stm	%[a]!, {r5}\n\t"
88958         "ldm	%[m]!, {r6}\n\t"
88959 #ifdef WOLFSSL_KEIL
88960         "ands	r6, r6, r7\n\t"
88961 #elif defined(__clang__)
88962         "ands	r6, r7\n\t"
88963 #else
88964         "and	r6, r7\n\t"
88965 #endif
88966         "ldr	r5, [%[a], r4]\n\t"
88967 #ifdef WOLFSSL_KEIL
88968         "sbcs	r5, r5, r6\n\t"
88969 #elif defined(__clang__)
88970         "sbcs	r5, r6\n\t"
88971 #else
88972         "sbc	r5, r6\n\t"
88973 #endif
88974         "stm	%[a]!, {r5}\n\t"
88975         "ldm	%[m]!, {r6}\n\t"
88976 #ifdef WOLFSSL_KEIL
88977         "ands	r6, r6, r7\n\t"
88978 #elif defined(__clang__)
88979         "ands	r6, r7\n\t"
88980 #else
88981         "and	r6, r7\n\t"
88982 #endif
88983         "ldr	r5, [%[a], r4]\n\t"
88984 #ifdef WOLFSSL_KEIL
88985         "sbcs	r5, r5, r6\n\t"
88986 #elif defined(__clang__)
88987         "sbcs	r5, r6\n\t"
88988 #else
88989         "sbc	r5, r6\n\t"
88990 #endif
88991         "stm	%[a]!, {r5}\n\t"
88992         "ldm	%[m]!, {r6}\n\t"
88993 #ifdef WOLFSSL_KEIL
88994         "ands	r6, r6, r7\n\t"
88995 #elif defined(__clang__)
88996         "ands	r6, r7\n\t"
88997 #else
88998         "and	r6, r7\n\t"
88999 #endif
89000         "ldr	r5, [%[a], r4]\n\t"
89001 #ifdef WOLFSSL_KEIL
89002         "sbcs	r5, r5, r6\n\t"
89003 #elif defined(__clang__)
89004         "sbcs	r5, r6\n\t"
89005 #else
89006         "sbc	r5, r6\n\t"
89007 #endif
89008         "stm	%[a]!, {r5}\n\t"
89009         "ldm	%[m]!, {r6}\n\t"
89010 #ifdef WOLFSSL_KEIL
89011         "ands	r6, r6, r7\n\t"
89012 #elif defined(__clang__)
89013         "ands	r6, r7\n\t"
89014 #else
89015         "and	r6, r7\n\t"
89016 #endif
89017         "ldr	r5, [%[a], r4]\n\t"
89018 #ifdef WOLFSSL_KEIL
89019         "sbcs	r5, r5, r6\n\t"
89020 #elif defined(__clang__)
89021         "sbcs	r5, r6\n\t"
89022 #else
89023         "sbc	r5, r6\n\t"
89024 #endif
89025         "stm	%[a]!, {r5}\n\t"
89026         "ldm	%[m]!, {r6}\n\t"
89027 #ifdef WOLFSSL_KEIL
89028         "ands	r6, r6, r7\n\t"
89029 #elif defined(__clang__)
89030         "ands	r6, r7\n\t"
89031 #else
89032         "and	r6, r7\n\t"
89033 #endif
89034         "ldr	r5, [%[a], r4]\n\t"
89035 #ifdef WOLFSSL_KEIL
89036         "sbcs	r5, r5, r6\n\t"
89037 #elif defined(__clang__)
89038         "sbcs	r5, r6\n\t"
89039 #else
89040         "sbc	r5, r6\n\t"
89041 #endif
89042         "stm	%[a]!, {r5}\n\t"
89043         "ldm	%[m]!, {r6}\n\t"
89044 #ifdef WOLFSSL_KEIL
89045         "ands	r6, r6, r7\n\t"
89046 #elif defined(__clang__)
89047         "ands	r6, r7\n\t"
89048 #else
89049         "and	r6, r7\n\t"
89050 #endif
89051         "ldr	r5, [%[a], r4]\n\t"
89052 #ifdef WOLFSSL_KEIL
89053         "sbcs	r5, r5, r6\n\t"
89054 #elif defined(__clang__)
89055         "sbcs	r5, r6\n\t"
89056 #else
89057         "sbc	r5, r6\n\t"
89058 #endif
89059         "stm	%[a]!, {r5}\n\t"
89060         "ldm	%[m]!, {r6}\n\t"
89061 #ifdef WOLFSSL_KEIL
89062         "ands	r6, r6, r7\n\t"
89063 #elif defined(__clang__)
89064         "ands	r6, r7\n\t"
89065 #else
89066         "and	r6, r7\n\t"
89067 #endif
89068         "ldr	r5, [%[a], r4]\n\t"
89069 #ifdef WOLFSSL_KEIL
89070         "sbcs	r5, r5, r6\n\t"
89071 #elif defined(__clang__)
89072         "sbcs	r5, r6\n\t"
89073 #else
89074         "sbc	r5, r6\n\t"
89075 #endif
89076         "stm	%[a]!, {r5}\n\t"
89077         "ldm	%[m]!, {r6}\n\t"
89078 #ifdef WOLFSSL_KEIL
89079         "ands	r6, r6, r7\n\t"
89080 #elif defined(__clang__)
89081         "ands	r6, r7\n\t"
89082 #else
89083         "and	r6, r7\n\t"
89084 #endif
89085         "ldr	r5, [%[a], r4]\n\t"
89086 #ifdef WOLFSSL_KEIL
89087         "sbcs	r5, r5, r6\n\t"
89088 #elif defined(__clang__)
89089         "sbcs	r5, r6\n\t"
89090 #else
89091         "sbc	r5, r6\n\t"
89092 #endif
89093         "stm	%[a]!, {r5}\n\t"
89094         "ldm	%[m]!, {r6}\n\t"
89095 #ifdef WOLFSSL_KEIL
89096         "ands	r6, r6, r7\n\t"
89097 #elif defined(__clang__)
89098         "ands	r6, r7\n\t"
89099 #else
89100         "and	r6, r7\n\t"
89101 #endif
89102         "ldr	r5, [%[a], r4]\n\t"
89103 #ifdef WOLFSSL_KEIL
89104         "sbcs	r5, r5, r6\n\t"
89105 #elif defined(__clang__)
89106         "sbcs	r5, r6\n\t"
89107 #else
89108         "sbc	r5, r6\n\t"
89109 #endif
89110         "stm	%[a]!, {r5}\n\t"
89111         "ldm	%[m]!, {r6}\n\t"
89112 #ifdef WOLFSSL_KEIL
89113         "ands	r6, r6, r7\n\t"
89114 #elif defined(__clang__)
89115         "ands	r6, r7\n\t"
89116 #else
89117         "and	r6, r7\n\t"
89118 #endif
89119         "ldr	r5, [%[a], r4]\n\t"
89120 #ifdef WOLFSSL_KEIL
89121         "sbcs	r5, r5, r6\n\t"
89122 #elif defined(__clang__)
89123         "sbcs	r5, r6\n\t"
89124 #else
89125         "sbc	r5, r6\n\t"
89126 #endif
89127         "stm	%[a]!, {r5}\n\t"
89128         "ldm	%[m]!, {r6}\n\t"
89129 #ifdef WOLFSSL_KEIL
89130         "ands	r6, r6, r7\n\t"
89131 #elif defined(__clang__)
89132         "ands	r6, r7\n\t"
89133 #else
89134         "and	r6, r7\n\t"
89135 #endif
89136         "ldr	r5, [%[a], r4]\n\t"
89137 #ifdef WOLFSSL_KEIL
89138         "sbcs	r5, r5, r6\n\t"
89139 #elif defined(__clang__)
89140         "sbcs	r5, r6\n\t"
89141 #else
89142         "sbc	r5, r6\n\t"
89143 #endif
89144         "stm	%[a]!, {r5}\n\t"
89145         "ldm	%[m]!, {r6}\n\t"
89146 #ifdef WOLFSSL_KEIL
89147         "ands	r6, r6, r7\n\t"
89148 #elif defined(__clang__)
89149         "ands	r6, r7\n\t"
89150 #else
89151         "and	r6, r7\n\t"
89152 #endif
89153         "ldr	r5, [%[a], r4]\n\t"
89154 #ifdef WOLFSSL_KEIL
89155         "sbcs	r5, r5, r6\n\t"
89156 #elif defined(__clang__)
89157         "sbcs	r5, r6\n\t"
89158 #else
89159         "sbc	r5, r6\n\t"
89160 #endif
89161         "stm	%[a]!, {r5}\n\t"
89162         "ldm	%[m]!, {r6}\n\t"
89163 #ifdef WOLFSSL_KEIL
89164         "ands	r6, r6, r7\n\t"
89165 #elif defined(__clang__)
89166         "ands	r6, r7\n\t"
89167 #else
89168         "and	r6, r7\n\t"
89169 #endif
89170         "ldr	r5, [%[a], r4]\n\t"
89171 #ifdef WOLFSSL_KEIL
89172         "sbcs	r5, r5, r6\n\t"
89173 #elif defined(__clang__)
89174         "sbcs	r5, r6\n\t"
89175 #else
89176         "sbc	r5, r6\n\t"
89177 #endif
89178         "stm	%[a]!, {r5}\n\t"
89179         "ldm	%[m]!, {r6}\n\t"
89180 #ifdef WOLFSSL_KEIL
89181         "ands	r6, r6, r7\n\t"
89182 #elif defined(__clang__)
89183         "ands	r6, r7\n\t"
89184 #else
89185         "and	r6, r7\n\t"
89186 #endif
89187         "ldr	r5, [%[a], r4]\n\t"
89188 #ifdef WOLFSSL_KEIL
89189         "sbcs	r5, r5, r6\n\t"
89190 #elif defined(__clang__)
89191         "sbcs	r5, r6\n\t"
89192 #else
89193         "sbc	r5, r6\n\t"
89194 #endif
89195         "stm	%[a]!, {r5}\n\t"
89196         "ldm	%[m]!, {r6}\n\t"
89197 #ifdef WOLFSSL_KEIL
89198         "ands	r6, r6, r7\n\t"
89199 #elif defined(__clang__)
89200         "ands	r6, r7\n\t"
89201 #else
89202         "and	r6, r7\n\t"
89203 #endif
89204         "ldr	r5, [%[a], r4]\n\t"
89205 #ifdef WOLFSSL_KEIL
89206         "sbcs	r5, r5, r6\n\t"
89207 #elif defined(__clang__)
89208         "sbcs	r5, r6\n\t"
89209 #else
89210         "sbc	r5, r6\n\t"
89211 #endif
89212         "stm	%[a]!, {r5}\n\t"
89213         "ldm	%[m]!, {r6}\n\t"
89214 #ifdef WOLFSSL_KEIL
89215         "ands	r6, r6, r7\n\t"
89216 #elif defined(__clang__)
89217         "ands	r6, r7\n\t"
89218 #else
89219         "and	r6, r7\n\t"
89220 #endif
89221         "ldr	r5, [%[a], r4]\n\t"
89222 #ifdef WOLFSSL_KEIL
89223         "sbcs	r5, r5, r6\n\t"
89224 #elif defined(__clang__)
89225         "sbcs	r5, r6\n\t"
89226 #else
89227         "sbc	r5, r6\n\t"
89228 #endif
89229         "stm	%[a]!, {r5}\n\t"
89230         "ldm	%[m]!, {r6}\n\t"
89231 #ifdef WOLFSSL_KEIL
89232         "ands	r6, r6, r7\n\t"
89233 #elif defined(__clang__)
89234         "ands	r6, r7\n\t"
89235 #else
89236         "and	r6, r7\n\t"
89237 #endif
89238         "ldr	r5, [%[a], r4]\n\t"
89239 #ifdef WOLFSSL_KEIL
89240         "sbcs	r5, r5, r6\n\t"
89241 #elif defined(__clang__)
89242         "sbcs	r5, r6\n\t"
89243 #else
89244         "sbc	r5, r6\n\t"
89245 #endif
89246         "stm	%[a]!, {r5}\n\t"
89247         "ldm	%[m]!, {r6}\n\t"
89248 #ifdef WOLFSSL_KEIL
89249         "ands	r6, r6, r7\n\t"
89250 #elif defined(__clang__)
89251         "ands	r6, r7\n\t"
89252 #else
89253         "and	r6, r7\n\t"
89254 #endif
89255         "ldr	r5, [%[a], r4]\n\t"
89256 #ifdef WOLFSSL_KEIL
89257         "sbcs	r5, r5, r6\n\t"
89258 #elif defined(__clang__)
89259         "sbcs	r5, r6\n\t"
89260 #else
89261         "sbc	r5, r6\n\t"
89262 #endif
89263         "stm	%[a]!, {r5}\n\t"
89264         "ldm	%[m]!, {r6}\n\t"
89265 #ifdef WOLFSSL_KEIL
89266         "ands	r6, r6, r7\n\t"
89267 #elif defined(__clang__)
89268         "ands	r6, r7\n\t"
89269 #else
89270         "and	r6, r7\n\t"
89271 #endif
89272         "ldr	r5, [%[a], r4]\n\t"
89273 #ifdef WOLFSSL_KEIL
89274         "sbcs	r5, r5, r6\n\t"
89275 #elif defined(__clang__)
89276         "sbcs	r5, r6\n\t"
89277 #else
89278         "sbc	r5, r6\n\t"
89279 #endif
89280         "stm	%[a]!, {r5}\n\t"
89281         "ldm	%[m]!, {r6}\n\t"
89282 #ifdef WOLFSSL_KEIL
89283         "ands	r6, r6, r7\n\t"
89284 #elif defined(__clang__)
89285         "ands	r6, r7\n\t"
89286 #else
89287         "and	r6, r7\n\t"
89288 #endif
89289         "ldr	r5, [%[a], r4]\n\t"
89290 #ifdef WOLFSSL_KEIL
89291         "sbcs	r5, r5, r6\n\t"
89292 #elif defined(__clang__)
89293         "sbcs	r5, r6\n\t"
89294 #else
89295         "sbc	r5, r6\n\t"
89296 #endif
89297         "stm	%[a]!, {r5}\n\t"
89298         "ldm	%[m]!, {r6}\n\t"
89299 #ifdef WOLFSSL_KEIL
89300         "ands	r6, r6, r7\n\t"
89301 #elif defined(__clang__)
89302         "ands	r6, r7\n\t"
89303 #else
89304         "and	r6, r7\n\t"
89305 #endif
89306         "ldr	r5, [%[a], r4]\n\t"
89307 #ifdef WOLFSSL_KEIL
89308         "sbcs	r5, r5, r6\n\t"
89309 #elif defined(__clang__)
89310         "sbcs	r5, r6\n\t"
89311 #else
89312         "sbc	r5, r6\n\t"
89313 #endif
89314         "stm	%[a]!, {r5}\n\t"
89315         "ldm	%[m]!, {r6}\n\t"
89316 #ifdef WOLFSSL_KEIL
89317         "ands	r6, r6, r7\n\t"
89318 #elif defined(__clang__)
89319         "ands	r6, r7\n\t"
89320 #else
89321         "and	r6, r7\n\t"
89322 #endif
89323         "ldr	r5, [%[a], r4]\n\t"
89324 #ifdef WOLFSSL_KEIL
89325         "sbcs	r5, r5, r6\n\t"
89326 #elif defined(__clang__)
89327         "sbcs	r5, r6\n\t"
89328 #else
89329         "sbc	r5, r6\n\t"
89330 #endif
89331         "stm	%[a]!, {r5}\n\t"
89332         "ldm	%[m]!, {r6}\n\t"
89333 #ifdef WOLFSSL_KEIL
89334         "ands	r6, r6, r7\n\t"
89335 #elif defined(__clang__)
89336         "ands	r6, r7\n\t"
89337 #else
89338         "and	r6, r7\n\t"
89339 #endif
89340         "ldr	r5, [%[a], r4]\n\t"
89341 #ifdef WOLFSSL_KEIL
89342         "sbcs	r5, r5, r6\n\t"
89343 #elif defined(__clang__)
89344         "sbcs	r5, r6\n\t"
89345 #else
89346         "sbc	r5, r6\n\t"
89347 #endif
89348         "stm	%[a]!, {r5}\n\t"
89349         "ldm	%[m]!, {r6}\n\t"
89350 #ifdef WOLFSSL_KEIL
89351         "ands	r6, r6, r7\n\t"
89352 #elif defined(__clang__)
89353         "ands	r6, r7\n\t"
89354 #else
89355         "and	r6, r7\n\t"
89356 #endif
89357         "ldr	r5, [%[a], r4]\n\t"
89358 #ifdef WOLFSSL_KEIL
89359         "sbcs	r5, r5, r6\n\t"
89360 #elif defined(__clang__)
89361         "sbcs	r5, r6\n\t"
89362 #else
89363         "sbc	r5, r6\n\t"
89364 #endif
89365         "stm	%[a]!, {r5}\n\t"
89366         "ldm	%[m]!, {r6}\n\t"
89367 #ifdef WOLFSSL_KEIL
89368         "ands	r6, r6, r7\n\t"
89369 #elif defined(__clang__)
89370         "ands	r6, r7\n\t"
89371 #else
89372         "and	r6, r7\n\t"
89373 #endif
89374         "ldr	r5, [%[a], r4]\n\t"
89375 #ifdef WOLFSSL_KEIL
89376         "sbcs	r5, r5, r6\n\t"
89377 #elif defined(__clang__)
89378         "sbcs	r5, r6\n\t"
89379 #else
89380         "sbc	r5, r6\n\t"
89381 #endif
89382         "stm	%[a]!, {r5}\n\t"
89383         "ldm	%[m]!, {r6}\n\t"
89384 #ifdef WOLFSSL_KEIL
89385         "ands	r6, r6, r7\n\t"
89386 #elif defined(__clang__)
89387         "ands	r6, r7\n\t"
89388 #else
89389         "and	r6, r7\n\t"
89390 #endif
89391         "ldr	r5, [%[a], r4]\n\t"
89392 #ifdef WOLFSSL_KEIL
89393         "sbcs	r5, r5, r6\n\t"
89394 #elif defined(__clang__)
89395         "sbcs	r5, r6\n\t"
89396 #else
89397         "sbc	r5, r6\n\t"
89398 #endif
89399         "stm	%[a]!, {r5}\n\t"
89400         "ldm	%[m]!, {r6}\n\t"
89401 #ifdef WOLFSSL_KEIL
89402         "ands	r6, r6, r7\n\t"
89403 #elif defined(__clang__)
89404         "ands	r6, r7\n\t"
89405 #else
89406         "and	r6, r7\n\t"
89407 #endif
89408         "ldr	r5, [%[a], r4]\n\t"
89409 #ifdef WOLFSSL_KEIL
89410         "sbcs	r5, r5, r6\n\t"
89411 #elif defined(__clang__)
89412         "sbcs	r5, r6\n\t"
89413 #else
89414         "sbc	r5, r6\n\t"
89415 #endif
89416         "stm	%[a]!, {r5}\n\t"
89417         "ldm	%[m]!, {r6}\n\t"
89418 #ifdef WOLFSSL_KEIL
89419         "ands	r6, r6, r7\n\t"
89420 #elif defined(__clang__)
89421         "ands	r6, r7\n\t"
89422 #else
89423         "and	r6, r7\n\t"
89424 #endif
89425         "ldr	r5, [%[a], r4]\n\t"
89426 #ifdef WOLFSSL_KEIL
89427         "sbcs	r5, r5, r6\n\t"
89428 #elif defined(__clang__)
89429         "sbcs	r5, r6\n\t"
89430 #else
89431         "sbc	r5, r6\n\t"
89432 #endif
89433         "stm	%[a]!, {r5}\n\t"
89434         "ldm	%[m]!, {r6}\n\t"
89435 #ifdef WOLFSSL_KEIL
89436         "ands	r6, r6, r7\n\t"
89437 #elif defined(__clang__)
89438         "ands	r6, r7\n\t"
89439 #else
89440         "and	r6, r7\n\t"
89441 #endif
89442         "ldr	r5, [%[a], r4]\n\t"
89443 #ifdef WOLFSSL_KEIL
89444         "sbcs	r5, r5, r6\n\t"
89445 #elif defined(__clang__)
89446         "sbcs	r5, r6\n\t"
89447 #else
89448         "sbc	r5, r6\n\t"
89449 #endif
89450         "stm	%[a]!, {r5}\n\t"
89451         "ldm	%[m]!, {r6}\n\t"
89452 #ifdef WOLFSSL_KEIL
89453         "ands	r6, r6, r7\n\t"
89454 #elif defined(__clang__)
89455         "ands	r6, r7\n\t"
89456 #else
89457         "and	r6, r7\n\t"
89458 #endif
89459         "ldr	r5, [%[a], r4]\n\t"
89460 #ifdef WOLFSSL_KEIL
89461         "sbcs	r5, r5, r6\n\t"
89462 #elif defined(__clang__)
89463         "sbcs	r5, r6\n\t"
89464 #else
89465         "sbc	r5, r6\n\t"
89466 #endif
89467         "stm	%[a]!, {r5}\n\t"
89468         "ldm	%[m]!, {r6}\n\t"
89469 #ifdef WOLFSSL_KEIL
89470         "ands	r6, r6, r7\n\t"
89471 #elif defined(__clang__)
89472         "ands	r6, r7\n\t"
89473 #else
89474         "and	r6, r7\n\t"
89475 #endif
89476         "ldr	r5, [%[a], r4]\n\t"
89477 #ifdef WOLFSSL_KEIL
89478         "sbcs	r5, r5, r6\n\t"
89479 #elif defined(__clang__)
89480         "sbcs	r5, r6\n\t"
89481 #else
89482         "sbc	r5, r6\n\t"
89483 #endif
89484         "stm	%[a]!, {r5}\n\t"
89485         "ldm	%[m]!, {r6}\n\t"
89486 #ifdef WOLFSSL_KEIL
89487         "ands	r6, r6, r7\n\t"
89488 #elif defined(__clang__)
89489         "ands	r6, r7\n\t"
89490 #else
89491         "and	r6, r7\n\t"
89492 #endif
89493         "ldr	r5, [%[a], r4]\n\t"
89494 #ifdef WOLFSSL_KEIL
89495         "sbcs	r5, r5, r6\n\t"
89496 #elif defined(__clang__)
89497         "sbcs	r5, r6\n\t"
89498 #else
89499         "sbc	r5, r6\n\t"
89500 #endif
89501         "stm	%[a]!, {r5}\n\t"
89502 #endif /* WOLFSSL_SP_LARGE_CODE */
89503         : [a] "+r" (a), [m] "+r" (m), [mp] "+r" (mp)
89504         :
89505         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "lr"
89506     );
89507 }
89508 
89509 /* Multiply two Montgomery form numbers mod the modulus (prime).
89510  * (r = a * b mod m)
89511  *
89512  * r   Result of multiplication.
89513  * a   First number to multiply in Montgomery form.
89514  * b   Second number to multiply in Montgomery form.
89515  * m   Modulus (prime).
89516  * mp  Montgomery mulitplier.
89517  */
sp_4096_mont_mul_128(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)89518 static void sp_4096_mont_mul_128(sp_digit* r, const sp_digit* a,
89519         const sp_digit* b, const sp_digit* m, sp_digit mp)
89520 {
89521     sp_4096_mul_128(r, a, b);
89522     sp_4096_mont_reduce_128(r, m, mp);
89523 }
89524 
89525 /* Square the Montgomery form number. (r = a * a mod m)
89526  *
89527  * r   Result of squaring.
89528  * a   Number to square in Montgomery form.
89529  * m   Modulus (prime).
89530  * mp  Montgomery mulitplier.
89531  */
sp_4096_mont_sqr_128(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)89532 static void sp_4096_mont_sqr_128(sp_digit* r, const sp_digit* a,
89533         const sp_digit* m, sp_digit mp)
89534 {
89535     sp_4096_sqr_128(r, a);
89536     sp_4096_mont_reduce_128(r, m, mp);
89537 }
89538 
89539 #ifdef WOLFSSL_SP_SMALL
89540 /* Sub b from a into r. (r = a - b)
89541  *
89542  * r  A single precision integer.
89543  * a  A single precision integer.
89544  * b  A single precision integer.
89545  */
sp_4096_sub_128(sp_digit * r,const sp_digit * a,const sp_digit * b)89546 SP_NOINLINE static sp_digit sp_4096_sub_128(sp_digit* r, const sp_digit* a,
89547         const sp_digit* b)
89548 {
89549     __asm__ __volatile__ (
89550         "movs	r6, %[a]\n\t"
89551         "movs	r3, #0\n\t"
89552         "movs	r5, #2\n\t"
89553 #if defined(__clang__) || defined(WOLFSSL_KEIL)
89554         "lsls	r5, r5, #8\n\t"
89555 #else
89556         "lsl	r5, r5, #8\n\t"
89557 #endif
89558 #if defined(__clang__) || defined(WOLFSSL_KEIL)
89559         "adds	r6, r6, r5\n\t"
89560 #else
89561         "add	r6, r6, r5\n\t"
89562 #endif
89563         "\n"
89564     "L_sp_4096_sub_128_word_%=:\n\t"
89565         "movs	r5, #0\n\t"
89566 #if defined(__clang__) || defined(WOLFSSL_KEIL)
89567         "subs	r5, r5, r3\n\t"
89568 #else
89569         "sub	r5, r5, r3\n\t"
89570 #endif
89571         "ldr	r4, [%[a]]\n\t"
89572         "ldr	r5, [%[b]]\n\t"
89573 #ifdef WOLFSSL_KEIL
89574         "sbcs	r4, r4, r5\n\t"
89575 #elif defined(__clang__)
89576         "sbcs	r4, r5\n\t"
89577 #else
89578         "sbc	r4, r5\n\t"
89579 #endif
89580         "str	r4, [%[r]]\n\t"
89581 #ifdef WOLFSSL_KEIL
89582         "sbcs	r3, r3, r3\n\t"
89583 #elif defined(__clang__)
89584         "sbcs	r3, r3\n\t"
89585 #else
89586         "sbc	r3, r3\n\t"
89587 #endif
89588 #if defined(__clang__) || defined(WOLFSSL_KEIL)
89589         "adds	%[a], %[a], #4\n\t"
89590 #else
89591         "add	%[a], %[a], #4\n\t"
89592 #endif
89593 #if defined(__clang__) || defined(WOLFSSL_KEIL)
89594         "adds	%[b], %[b], #4\n\t"
89595 #else
89596         "add	%[b], %[b], #4\n\t"
89597 #endif
89598 #if defined(__clang__) || defined(WOLFSSL_KEIL)
89599         "adds	%[r], %[r], #4\n\t"
89600 #else
89601         "add	%[r], %[r], #4\n\t"
89602 #endif
89603         "cmp	%[a], r6\n\t"
89604         "bne	L_sp_4096_sub_128_word_%=\n\t"
89605         "movs	%[r], r3\n\t"
89606         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
89607         :
89608         : "memory", "r3", "r4", "r5", "r6"
89609     );
89610     return (uint32_t)(size_t)r;
89611 }
89612 
89613 #else
89614 /* Sub b from a into r. (r = a - b)
89615  *
89616  * r  A single precision integer.
89617  * a  A single precision integer.
89618  * b  A single precision integer.
89619  */
sp_4096_sub_128(sp_digit * r,const sp_digit * a,const sp_digit * b)89620 SP_NOINLINE static sp_digit sp_4096_sub_128(sp_digit* r, const sp_digit* a,
89621         const sp_digit* b)
89622 {
89623     __asm__ __volatile__ (
89624         "ldm	%[b]!, {r5, r6}\n\t"
89625         "ldm	%[a]!, {r3, r4}\n\t"
89626 #if defined(__clang__) || defined(WOLFSSL_KEIL)
89627         "subs	r3, r3, r5\n\t"
89628 #else
89629         "sub	r3, r3, r5\n\t"
89630 #endif
89631 #ifdef WOLFSSL_KEIL
89632         "sbcs	r4, r4, r6\n\t"
89633 #elif defined(__clang__)
89634         "sbcs	r4, r6\n\t"
89635 #else
89636         "sbc	r4, r6\n\t"
89637 #endif
89638         "stm	%[r]!, {r3, r4}\n\t"
89639         "ldm	%[b]!, {r5, r6}\n\t"
89640         "ldm	%[a]!, {r3, r4}\n\t"
89641 #ifdef WOLFSSL_KEIL
89642         "sbcs	r3, r3, r5\n\t"
89643 #elif defined(__clang__)
89644         "sbcs	r3, r5\n\t"
89645 #else
89646         "sbc	r3, r5\n\t"
89647 #endif
89648 #ifdef WOLFSSL_KEIL
89649         "sbcs	r4, r4, r6\n\t"
89650 #elif defined(__clang__)
89651         "sbcs	r4, r6\n\t"
89652 #else
89653         "sbc	r4, r6\n\t"
89654 #endif
89655         "stm	%[r]!, {r3, r4}\n\t"
89656         "ldm	%[b]!, {r5, r6}\n\t"
89657         "ldm	%[a]!, {r3, r4}\n\t"
89658 #ifdef WOLFSSL_KEIL
89659         "sbcs	r3, r3, r5\n\t"
89660 #elif defined(__clang__)
89661         "sbcs	r3, r5\n\t"
89662 #else
89663         "sbc	r3, r5\n\t"
89664 #endif
89665 #ifdef WOLFSSL_KEIL
89666         "sbcs	r4, r4, r6\n\t"
89667 #elif defined(__clang__)
89668         "sbcs	r4, r6\n\t"
89669 #else
89670         "sbc	r4, r6\n\t"
89671 #endif
89672         "stm	%[r]!, {r3, r4}\n\t"
89673         "ldm	%[b]!, {r5, r6}\n\t"
89674         "ldm	%[a]!, {r3, r4}\n\t"
89675 #ifdef WOLFSSL_KEIL
89676         "sbcs	r3, r3, r5\n\t"
89677 #elif defined(__clang__)
89678         "sbcs	r3, r5\n\t"
89679 #else
89680         "sbc	r3, r5\n\t"
89681 #endif
89682 #ifdef WOLFSSL_KEIL
89683         "sbcs	r4, r4, r6\n\t"
89684 #elif defined(__clang__)
89685         "sbcs	r4, r6\n\t"
89686 #else
89687         "sbc	r4, r6\n\t"
89688 #endif
89689         "stm	%[r]!, {r3, r4}\n\t"
89690         "ldm	%[b]!, {r5, r6}\n\t"
89691         "ldm	%[a]!, {r3, r4}\n\t"
89692 #ifdef WOLFSSL_KEIL
89693         "sbcs	r3, r3, r5\n\t"
89694 #elif defined(__clang__)
89695         "sbcs	r3, r5\n\t"
89696 #else
89697         "sbc	r3, r5\n\t"
89698 #endif
89699 #ifdef WOLFSSL_KEIL
89700         "sbcs	r4, r4, r6\n\t"
89701 #elif defined(__clang__)
89702         "sbcs	r4, r6\n\t"
89703 #else
89704         "sbc	r4, r6\n\t"
89705 #endif
89706         "stm	%[r]!, {r3, r4}\n\t"
89707         "ldm	%[b]!, {r5, r6}\n\t"
89708         "ldm	%[a]!, {r3, r4}\n\t"
89709 #ifdef WOLFSSL_KEIL
89710         "sbcs	r3, r3, r5\n\t"
89711 #elif defined(__clang__)
89712         "sbcs	r3, r5\n\t"
89713 #else
89714         "sbc	r3, r5\n\t"
89715 #endif
89716 #ifdef WOLFSSL_KEIL
89717         "sbcs	r4, r4, r6\n\t"
89718 #elif defined(__clang__)
89719         "sbcs	r4, r6\n\t"
89720 #else
89721         "sbc	r4, r6\n\t"
89722 #endif
89723         "stm	%[r]!, {r3, r4}\n\t"
89724         "ldm	%[b]!, {r5, r6}\n\t"
89725         "ldm	%[a]!, {r3, r4}\n\t"
89726 #ifdef WOLFSSL_KEIL
89727         "sbcs	r3, r3, r5\n\t"
89728 #elif defined(__clang__)
89729         "sbcs	r3, r5\n\t"
89730 #else
89731         "sbc	r3, r5\n\t"
89732 #endif
89733 #ifdef WOLFSSL_KEIL
89734         "sbcs	r4, r4, r6\n\t"
89735 #elif defined(__clang__)
89736         "sbcs	r4, r6\n\t"
89737 #else
89738         "sbc	r4, r6\n\t"
89739 #endif
89740         "stm	%[r]!, {r3, r4}\n\t"
89741         "ldm	%[b]!, {r5, r6}\n\t"
89742         "ldm	%[a]!, {r3, r4}\n\t"
89743 #ifdef WOLFSSL_KEIL
89744         "sbcs	r3, r3, r5\n\t"
89745 #elif defined(__clang__)
89746         "sbcs	r3, r5\n\t"
89747 #else
89748         "sbc	r3, r5\n\t"
89749 #endif
89750 #ifdef WOLFSSL_KEIL
89751         "sbcs	r4, r4, r6\n\t"
89752 #elif defined(__clang__)
89753         "sbcs	r4, r6\n\t"
89754 #else
89755         "sbc	r4, r6\n\t"
89756 #endif
89757         "stm	%[r]!, {r3, r4}\n\t"
89758         "ldm	%[b]!, {r5, r6}\n\t"
89759         "ldm	%[a]!, {r3, r4}\n\t"
89760 #ifdef WOLFSSL_KEIL
89761         "sbcs	r3, r3, r5\n\t"
89762 #elif defined(__clang__)
89763         "sbcs	r3, r5\n\t"
89764 #else
89765         "sbc	r3, r5\n\t"
89766 #endif
89767 #ifdef WOLFSSL_KEIL
89768         "sbcs	r4, r4, r6\n\t"
89769 #elif defined(__clang__)
89770         "sbcs	r4, r6\n\t"
89771 #else
89772         "sbc	r4, r6\n\t"
89773 #endif
89774         "stm	%[r]!, {r3, r4}\n\t"
89775         "ldm	%[b]!, {r5, r6}\n\t"
89776         "ldm	%[a]!, {r3, r4}\n\t"
89777 #ifdef WOLFSSL_KEIL
89778         "sbcs	r3, r3, r5\n\t"
89779 #elif defined(__clang__)
89780         "sbcs	r3, r5\n\t"
89781 #else
89782         "sbc	r3, r5\n\t"
89783 #endif
89784 #ifdef WOLFSSL_KEIL
89785         "sbcs	r4, r4, r6\n\t"
89786 #elif defined(__clang__)
89787         "sbcs	r4, r6\n\t"
89788 #else
89789         "sbc	r4, r6\n\t"
89790 #endif
89791         "stm	%[r]!, {r3, r4}\n\t"
89792         "ldm	%[b]!, {r5, r6}\n\t"
89793         "ldm	%[a]!, {r3, r4}\n\t"
89794 #ifdef WOLFSSL_KEIL
89795         "sbcs	r3, r3, r5\n\t"
89796 #elif defined(__clang__)
89797         "sbcs	r3, r5\n\t"
89798 #else
89799         "sbc	r3, r5\n\t"
89800 #endif
89801 #ifdef WOLFSSL_KEIL
89802         "sbcs	r4, r4, r6\n\t"
89803 #elif defined(__clang__)
89804         "sbcs	r4, r6\n\t"
89805 #else
89806         "sbc	r4, r6\n\t"
89807 #endif
89808         "stm	%[r]!, {r3, r4}\n\t"
89809         "ldm	%[b]!, {r5, r6}\n\t"
89810         "ldm	%[a]!, {r3, r4}\n\t"
89811 #ifdef WOLFSSL_KEIL
89812         "sbcs	r3, r3, r5\n\t"
89813 #elif defined(__clang__)
89814         "sbcs	r3, r5\n\t"
89815 #else
89816         "sbc	r3, r5\n\t"
89817 #endif
89818 #ifdef WOLFSSL_KEIL
89819         "sbcs	r4, r4, r6\n\t"
89820 #elif defined(__clang__)
89821         "sbcs	r4, r6\n\t"
89822 #else
89823         "sbc	r4, r6\n\t"
89824 #endif
89825         "stm	%[r]!, {r3, r4}\n\t"
89826         "ldm	%[b]!, {r5, r6}\n\t"
89827         "ldm	%[a]!, {r3, r4}\n\t"
89828 #ifdef WOLFSSL_KEIL
89829         "sbcs	r3, r3, r5\n\t"
89830 #elif defined(__clang__)
89831         "sbcs	r3, r5\n\t"
89832 #else
89833         "sbc	r3, r5\n\t"
89834 #endif
89835 #ifdef WOLFSSL_KEIL
89836         "sbcs	r4, r4, r6\n\t"
89837 #elif defined(__clang__)
89838         "sbcs	r4, r6\n\t"
89839 #else
89840         "sbc	r4, r6\n\t"
89841 #endif
89842         "stm	%[r]!, {r3, r4}\n\t"
89843         "ldm	%[b]!, {r5, r6}\n\t"
89844         "ldm	%[a]!, {r3, r4}\n\t"
89845 #ifdef WOLFSSL_KEIL
89846         "sbcs	r3, r3, r5\n\t"
89847 #elif defined(__clang__)
89848         "sbcs	r3, r5\n\t"
89849 #else
89850         "sbc	r3, r5\n\t"
89851 #endif
89852 #ifdef WOLFSSL_KEIL
89853         "sbcs	r4, r4, r6\n\t"
89854 #elif defined(__clang__)
89855         "sbcs	r4, r6\n\t"
89856 #else
89857         "sbc	r4, r6\n\t"
89858 #endif
89859         "stm	%[r]!, {r3, r4}\n\t"
89860         "ldm	%[b]!, {r5, r6}\n\t"
89861         "ldm	%[a]!, {r3, r4}\n\t"
89862 #ifdef WOLFSSL_KEIL
89863         "sbcs	r3, r3, r5\n\t"
89864 #elif defined(__clang__)
89865         "sbcs	r3, r5\n\t"
89866 #else
89867         "sbc	r3, r5\n\t"
89868 #endif
89869 #ifdef WOLFSSL_KEIL
89870         "sbcs	r4, r4, r6\n\t"
89871 #elif defined(__clang__)
89872         "sbcs	r4, r6\n\t"
89873 #else
89874         "sbc	r4, r6\n\t"
89875 #endif
89876         "stm	%[r]!, {r3, r4}\n\t"
89877         "ldm	%[b]!, {r5, r6}\n\t"
89878         "ldm	%[a]!, {r3, r4}\n\t"
89879 #ifdef WOLFSSL_KEIL
89880         "sbcs	r3, r3, r5\n\t"
89881 #elif defined(__clang__)
89882         "sbcs	r3, r5\n\t"
89883 #else
89884         "sbc	r3, r5\n\t"
89885 #endif
89886 #ifdef WOLFSSL_KEIL
89887         "sbcs	r4, r4, r6\n\t"
89888 #elif defined(__clang__)
89889         "sbcs	r4, r6\n\t"
89890 #else
89891         "sbc	r4, r6\n\t"
89892 #endif
89893         "stm	%[r]!, {r3, r4}\n\t"
89894         "ldm	%[b]!, {r5, r6}\n\t"
89895         "ldm	%[a]!, {r3, r4}\n\t"
89896 #ifdef WOLFSSL_KEIL
89897         "sbcs	r3, r3, r5\n\t"
89898 #elif defined(__clang__)
89899         "sbcs	r3, r5\n\t"
89900 #else
89901         "sbc	r3, r5\n\t"
89902 #endif
89903 #ifdef WOLFSSL_KEIL
89904         "sbcs	r4, r4, r6\n\t"
89905 #elif defined(__clang__)
89906         "sbcs	r4, r6\n\t"
89907 #else
89908         "sbc	r4, r6\n\t"
89909 #endif
89910         "stm	%[r]!, {r3, r4}\n\t"
89911         "ldm	%[b]!, {r5, r6}\n\t"
89912         "ldm	%[a]!, {r3, r4}\n\t"
89913 #ifdef WOLFSSL_KEIL
89914         "sbcs	r3, r3, r5\n\t"
89915 #elif defined(__clang__)
89916         "sbcs	r3, r5\n\t"
89917 #else
89918         "sbc	r3, r5\n\t"
89919 #endif
89920 #ifdef WOLFSSL_KEIL
89921         "sbcs	r4, r4, r6\n\t"
89922 #elif defined(__clang__)
89923         "sbcs	r4, r6\n\t"
89924 #else
89925         "sbc	r4, r6\n\t"
89926 #endif
89927         "stm	%[r]!, {r3, r4}\n\t"
89928         "ldm	%[b]!, {r5, r6}\n\t"
89929         "ldm	%[a]!, {r3, r4}\n\t"
89930 #ifdef WOLFSSL_KEIL
89931         "sbcs	r3, r3, r5\n\t"
89932 #elif defined(__clang__)
89933         "sbcs	r3, r5\n\t"
89934 #else
89935         "sbc	r3, r5\n\t"
89936 #endif
89937 #ifdef WOLFSSL_KEIL
89938         "sbcs	r4, r4, r6\n\t"
89939 #elif defined(__clang__)
89940         "sbcs	r4, r6\n\t"
89941 #else
89942         "sbc	r4, r6\n\t"
89943 #endif
89944         "stm	%[r]!, {r3, r4}\n\t"
89945         "ldm	%[b]!, {r5, r6}\n\t"
89946         "ldm	%[a]!, {r3, r4}\n\t"
89947 #ifdef WOLFSSL_KEIL
89948         "sbcs	r3, r3, r5\n\t"
89949 #elif defined(__clang__)
89950         "sbcs	r3, r5\n\t"
89951 #else
89952         "sbc	r3, r5\n\t"
89953 #endif
89954 #ifdef WOLFSSL_KEIL
89955         "sbcs	r4, r4, r6\n\t"
89956 #elif defined(__clang__)
89957         "sbcs	r4, r6\n\t"
89958 #else
89959         "sbc	r4, r6\n\t"
89960 #endif
89961         "stm	%[r]!, {r3, r4}\n\t"
89962         "ldm	%[b]!, {r5, r6}\n\t"
89963         "ldm	%[a]!, {r3, r4}\n\t"
89964 #ifdef WOLFSSL_KEIL
89965         "sbcs	r3, r3, r5\n\t"
89966 #elif defined(__clang__)
89967         "sbcs	r3, r5\n\t"
89968 #else
89969         "sbc	r3, r5\n\t"
89970 #endif
89971 #ifdef WOLFSSL_KEIL
89972         "sbcs	r4, r4, r6\n\t"
89973 #elif defined(__clang__)
89974         "sbcs	r4, r6\n\t"
89975 #else
89976         "sbc	r4, r6\n\t"
89977 #endif
89978         "stm	%[r]!, {r3, r4}\n\t"
89979         "ldm	%[b]!, {r5, r6}\n\t"
89980         "ldm	%[a]!, {r3, r4}\n\t"
89981 #ifdef WOLFSSL_KEIL
89982         "sbcs	r3, r3, r5\n\t"
89983 #elif defined(__clang__)
89984         "sbcs	r3, r5\n\t"
89985 #else
89986         "sbc	r3, r5\n\t"
89987 #endif
89988 #ifdef WOLFSSL_KEIL
89989         "sbcs	r4, r4, r6\n\t"
89990 #elif defined(__clang__)
89991         "sbcs	r4, r6\n\t"
89992 #else
89993         "sbc	r4, r6\n\t"
89994 #endif
89995         "stm	%[r]!, {r3, r4}\n\t"
89996         "ldm	%[b]!, {r5, r6}\n\t"
89997         "ldm	%[a]!, {r3, r4}\n\t"
89998 #ifdef WOLFSSL_KEIL
89999         "sbcs	r3, r3, r5\n\t"
90000 #elif defined(__clang__)
90001         "sbcs	r3, r5\n\t"
90002 #else
90003         "sbc	r3, r5\n\t"
90004 #endif
90005 #ifdef WOLFSSL_KEIL
90006         "sbcs	r4, r4, r6\n\t"
90007 #elif defined(__clang__)
90008         "sbcs	r4, r6\n\t"
90009 #else
90010         "sbc	r4, r6\n\t"
90011 #endif
90012         "stm	%[r]!, {r3, r4}\n\t"
90013         "ldm	%[b]!, {r5, r6}\n\t"
90014         "ldm	%[a]!, {r3, r4}\n\t"
90015 #ifdef WOLFSSL_KEIL
90016         "sbcs	r3, r3, r5\n\t"
90017 #elif defined(__clang__)
90018         "sbcs	r3, r5\n\t"
90019 #else
90020         "sbc	r3, r5\n\t"
90021 #endif
90022 #ifdef WOLFSSL_KEIL
90023         "sbcs	r4, r4, r6\n\t"
90024 #elif defined(__clang__)
90025         "sbcs	r4, r6\n\t"
90026 #else
90027         "sbc	r4, r6\n\t"
90028 #endif
90029         "stm	%[r]!, {r3, r4}\n\t"
90030         "ldm	%[b]!, {r5, r6}\n\t"
90031         "ldm	%[a]!, {r3, r4}\n\t"
90032 #ifdef WOLFSSL_KEIL
90033         "sbcs	r3, r3, r5\n\t"
90034 #elif defined(__clang__)
90035         "sbcs	r3, r5\n\t"
90036 #else
90037         "sbc	r3, r5\n\t"
90038 #endif
90039 #ifdef WOLFSSL_KEIL
90040         "sbcs	r4, r4, r6\n\t"
90041 #elif defined(__clang__)
90042         "sbcs	r4, r6\n\t"
90043 #else
90044         "sbc	r4, r6\n\t"
90045 #endif
90046         "stm	%[r]!, {r3, r4}\n\t"
90047         "ldm	%[b]!, {r5, r6}\n\t"
90048         "ldm	%[a]!, {r3, r4}\n\t"
90049 #ifdef WOLFSSL_KEIL
90050         "sbcs	r3, r3, r5\n\t"
90051 #elif defined(__clang__)
90052         "sbcs	r3, r5\n\t"
90053 #else
90054         "sbc	r3, r5\n\t"
90055 #endif
90056 #ifdef WOLFSSL_KEIL
90057         "sbcs	r4, r4, r6\n\t"
90058 #elif defined(__clang__)
90059         "sbcs	r4, r6\n\t"
90060 #else
90061         "sbc	r4, r6\n\t"
90062 #endif
90063         "stm	%[r]!, {r3, r4}\n\t"
90064         "ldm	%[b]!, {r5, r6}\n\t"
90065         "ldm	%[a]!, {r3, r4}\n\t"
90066 #ifdef WOLFSSL_KEIL
90067         "sbcs	r3, r3, r5\n\t"
90068 #elif defined(__clang__)
90069         "sbcs	r3, r5\n\t"
90070 #else
90071         "sbc	r3, r5\n\t"
90072 #endif
90073 #ifdef WOLFSSL_KEIL
90074         "sbcs	r4, r4, r6\n\t"
90075 #elif defined(__clang__)
90076         "sbcs	r4, r6\n\t"
90077 #else
90078         "sbc	r4, r6\n\t"
90079 #endif
90080         "stm	%[r]!, {r3, r4}\n\t"
90081         "ldm	%[b]!, {r5, r6}\n\t"
90082         "ldm	%[a]!, {r3, r4}\n\t"
90083 #ifdef WOLFSSL_KEIL
90084         "sbcs	r3, r3, r5\n\t"
90085 #elif defined(__clang__)
90086         "sbcs	r3, r5\n\t"
90087 #else
90088         "sbc	r3, r5\n\t"
90089 #endif
90090 #ifdef WOLFSSL_KEIL
90091         "sbcs	r4, r4, r6\n\t"
90092 #elif defined(__clang__)
90093         "sbcs	r4, r6\n\t"
90094 #else
90095         "sbc	r4, r6\n\t"
90096 #endif
90097         "stm	%[r]!, {r3, r4}\n\t"
90098         "ldm	%[b]!, {r5, r6}\n\t"
90099         "ldm	%[a]!, {r3, r4}\n\t"
90100 #ifdef WOLFSSL_KEIL
90101         "sbcs	r3, r3, r5\n\t"
90102 #elif defined(__clang__)
90103         "sbcs	r3, r5\n\t"
90104 #else
90105         "sbc	r3, r5\n\t"
90106 #endif
90107 #ifdef WOLFSSL_KEIL
90108         "sbcs	r4, r4, r6\n\t"
90109 #elif defined(__clang__)
90110         "sbcs	r4, r6\n\t"
90111 #else
90112         "sbc	r4, r6\n\t"
90113 #endif
90114         "stm	%[r]!, {r3, r4}\n\t"
90115         "ldm	%[b]!, {r5, r6}\n\t"
90116         "ldm	%[a]!, {r3, r4}\n\t"
90117 #ifdef WOLFSSL_KEIL
90118         "sbcs	r3, r3, r5\n\t"
90119 #elif defined(__clang__)
90120         "sbcs	r3, r5\n\t"
90121 #else
90122         "sbc	r3, r5\n\t"
90123 #endif
90124 #ifdef WOLFSSL_KEIL
90125         "sbcs	r4, r4, r6\n\t"
90126 #elif defined(__clang__)
90127         "sbcs	r4, r6\n\t"
90128 #else
90129         "sbc	r4, r6\n\t"
90130 #endif
90131         "stm	%[r]!, {r3, r4}\n\t"
90132         "ldm	%[b]!, {r5, r6}\n\t"
90133         "ldm	%[a]!, {r3, r4}\n\t"
90134 #ifdef WOLFSSL_KEIL
90135         "sbcs	r3, r3, r5\n\t"
90136 #elif defined(__clang__)
90137         "sbcs	r3, r5\n\t"
90138 #else
90139         "sbc	r3, r5\n\t"
90140 #endif
90141 #ifdef WOLFSSL_KEIL
90142         "sbcs	r4, r4, r6\n\t"
90143 #elif defined(__clang__)
90144         "sbcs	r4, r6\n\t"
90145 #else
90146         "sbc	r4, r6\n\t"
90147 #endif
90148         "stm	%[r]!, {r3, r4}\n\t"
90149         "ldm	%[b]!, {r5, r6}\n\t"
90150         "ldm	%[a]!, {r3, r4}\n\t"
90151 #ifdef WOLFSSL_KEIL
90152         "sbcs	r3, r3, r5\n\t"
90153 #elif defined(__clang__)
90154         "sbcs	r3, r5\n\t"
90155 #else
90156         "sbc	r3, r5\n\t"
90157 #endif
90158 #ifdef WOLFSSL_KEIL
90159         "sbcs	r4, r4, r6\n\t"
90160 #elif defined(__clang__)
90161         "sbcs	r4, r6\n\t"
90162 #else
90163         "sbc	r4, r6\n\t"
90164 #endif
90165         "stm	%[r]!, {r3, r4}\n\t"
90166         "ldm	%[b]!, {r5, r6}\n\t"
90167         "ldm	%[a]!, {r3, r4}\n\t"
90168 #ifdef WOLFSSL_KEIL
90169         "sbcs	r3, r3, r5\n\t"
90170 #elif defined(__clang__)
90171         "sbcs	r3, r5\n\t"
90172 #else
90173         "sbc	r3, r5\n\t"
90174 #endif
90175 #ifdef WOLFSSL_KEIL
90176         "sbcs	r4, r4, r6\n\t"
90177 #elif defined(__clang__)
90178         "sbcs	r4, r6\n\t"
90179 #else
90180         "sbc	r4, r6\n\t"
90181 #endif
90182         "stm	%[r]!, {r3, r4}\n\t"
90183         "ldm	%[b]!, {r5, r6}\n\t"
90184         "ldm	%[a]!, {r3, r4}\n\t"
90185 #ifdef WOLFSSL_KEIL
90186         "sbcs	r3, r3, r5\n\t"
90187 #elif defined(__clang__)
90188         "sbcs	r3, r5\n\t"
90189 #else
90190         "sbc	r3, r5\n\t"
90191 #endif
90192 #ifdef WOLFSSL_KEIL
90193         "sbcs	r4, r4, r6\n\t"
90194 #elif defined(__clang__)
90195         "sbcs	r4, r6\n\t"
90196 #else
90197         "sbc	r4, r6\n\t"
90198 #endif
90199         "stm	%[r]!, {r3, r4}\n\t"
90200         "ldm	%[b]!, {r5, r6}\n\t"
90201         "ldm	%[a]!, {r3, r4}\n\t"
90202 #ifdef WOLFSSL_KEIL
90203         "sbcs	r3, r3, r5\n\t"
90204 #elif defined(__clang__)
90205         "sbcs	r3, r5\n\t"
90206 #else
90207         "sbc	r3, r5\n\t"
90208 #endif
90209 #ifdef WOLFSSL_KEIL
90210         "sbcs	r4, r4, r6\n\t"
90211 #elif defined(__clang__)
90212         "sbcs	r4, r6\n\t"
90213 #else
90214         "sbc	r4, r6\n\t"
90215 #endif
90216         "stm	%[r]!, {r3, r4}\n\t"
90217         "ldm	%[b]!, {r5, r6}\n\t"
90218         "ldm	%[a]!, {r3, r4}\n\t"
90219 #ifdef WOLFSSL_KEIL
90220         "sbcs	r3, r3, r5\n\t"
90221 #elif defined(__clang__)
90222         "sbcs	r3, r5\n\t"
90223 #else
90224         "sbc	r3, r5\n\t"
90225 #endif
90226 #ifdef WOLFSSL_KEIL
90227         "sbcs	r4, r4, r6\n\t"
90228 #elif defined(__clang__)
90229         "sbcs	r4, r6\n\t"
90230 #else
90231         "sbc	r4, r6\n\t"
90232 #endif
90233         "stm	%[r]!, {r3, r4}\n\t"
90234         "ldm	%[b]!, {r5, r6}\n\t"
90235         "ldm	%[a]!, {r3, r4}\n\t"
90236 #ifdef WOLFSSL_KEIL
90237         "sbcs	r3, r3, r5\n\t"
90238 #elif defined(__clang__)
90239         "sbcs	r3, r5\n\t"
90240 #else
90241         "sbc	r3, r5\n\t"
90242 #endif
90243 #ifdef WOLFSSL_KEIL
90244         "sbcs	r4, r4, r6\n\t"
90245 #elif defined(__clang__)
90246         "sbcs	r4, r6\n\t"
90247 #else
90248         "sbc	r4, r6\n\t"
90249 #endif
90250         "stm	%[r]!, {r3, r4}\n\t"
90251         "ldm	%[b]!, {r5, r6}\n\t"
90252         "ldm	%[a]!, {r3, r4}\n\t"
90253 #ifdef WOLFSSL_KEIL
90254         "sbcs	r3, r3, r5\n\t"
90255 #elif defined(__clang__)
90256         "sbcs	r3, r5\n\t"
90257 #else
90258         "sbc	r3, r5\n\t"
90259 #endif
90260 #ifdef WOLFSSL_KEIL
90261         "sbcs	r4, r4, r6\n\t"
90262 #elif defined(__clang__)
90263         "sbcs	r4, r6\n\t"
90264 #else
90265         "sbc	r4, r6\n\t"
90266 #endif
90267         "stm	%[r]!, {r3, r4}\n\t"
90268         "ldm	%[b]!, {r5, r6}\n\t"
90269         "ldm	%[a]!, {r3, r4}\n\t"
90270 #ifdef WOLFSSL_KEIL
90271         "sbcs	r3, r3, r5\n\t"
90272 #elif defined(__clang__)
90273         "sbcs	r3, r5\n\t"
90274 #else
90275         "sbc	r3, r5\n\t"
90276 #endif
90277 #ifdef WOLFSSL_KEIL
90278         "sbcs	r4, r4, r6\n\t"
90279 #elif defined(__clang__)
90280         "sbcs	r4, r6\n\t"
90281 #else
90282         "sbc	r4, r6\n\t"
90283 #endif
90284         "stm	%[r]!, {r3, r4}\n\t"
90285         "ldm	%[b]!, {r5, r6}\n\t"
90286         "ldm	%[a]!, {r3, r4}\n\t"
90287 #ifdef WOLFSSL_KEIL
90288         "sbcs	r3, r3, r5\n\t"
90289 #elif defined(__clang__)
90290         "sbcs	r3, r5\n\t"
90291 #else
90292         "sbc	r3, r5\n\t"
90293 #endif
90294 #ifdef WOLFSSL_KEIL
90295         "sbcs	r4, r4, r6\n\t"
90296 #elif defined(__clang__)
90297         "sbcs	r4, r6\n\t"
90298 #else
90299         "sbc	r4, r6\n\t"
90300 #endif
90301         "stm	%[r]!, {r3, r4}\n\t"
90302         "ldm	%[b]!, {r5, r6}\n\t"
90303         "ldm	%[a]!, {r3, r4}\n\t"
90304 #ifdef WOLFSSL_KEIL
90305         "sbcs	r3, r3, r5\n\t"
90306 #elif defined(__clang__)
90307         "sbcs	r3, r5\n\t"
90308 #else
90309         "sbc	r3, r5\n\t"
90310 #endif
90311 #ifdef WOLFSSL_KEIL
90312         "sbcs	r4, r4, r6\n\t"
90313 #elif defined(__clang__)
90314         "sbcs	r4, r6\n\t"
90315 #else
90316         "sbc	r4, r6\n\t"
90317 #endif
90318         "stm	%[r]!, {r3, r4}\n\t"
90319         "ldm	%[b]!, {r5, r6}\n\t"
90320         "ldm	%[a]!, {r3, r4}\n\t"
90321 #ifdef WOLFSSL_KEIL
90322         "sbcs	r3, r3, r5\n\t"
90323 #elif defined(__clang__)
90324         "sbcs	r3, r5\n\t"
90325 #else
90326         "sbc	r3, r5\n\t"
90327 #endif
90328 #ifdef WOLFSSL_KEIL
90329         "sbcs	r4, r4, r6\n\t"
90330 #elif defined(__clang__)
90331         "sbcs	r4, r6\n\t"
90332 #else
90333         "sbc	r4, r6\n\t"
90334 #endif
90335         "stm	%[r]!, {r3, r4}\n\t"
90336         "ldm	%[b]!, {r5, r6}\n\t"
90337         "ldm	%[a]!, {r3, r4}\n\t"
90338 #ifdef WOLFSSL_KEIL
90339         "sbcs	r3, r3, r5\n\t"
90340 #elif defined(__clang__)
90341         "sbcs	r3, r5\n\t"
90342 #else
90343         "sbc	r3, r5\n\t"
90344 #endif
90345 #ifdef WOLFSSL_KEIL
90346         "sbcs	r4, r4, r6\n\t"
90347 #elif defined(__clang__)
90348         "sbcs	r4, r6\n\t"
90349 #else
90350         "sbc	r4, r6\n\t"
90351 #endif
90352         "stm	%[r]!, {r3, r4}\n\t"
90353         "ldm	%[b]!, {r5, r6}\n\t"
90354         "ldm	%[a]!, {r3, r4}\n\t"
90355 #ifdef WOLFSSL_KEIL
90356         "sbcs	r3, r3, r5\n\t"
90357 #elif defined(__clang__)
90358         "sbcs	r3, r5\n\t"
90359 #else
90360         "sbc	r3, r5\n\t"
90361 #endif
90362 #ifdef WOLFSSL_KEIL
90363         "sbcs	r4, r4, r6\n\t"
90364 #elif defined(__clang__)
90365         "sbcs	r4, r6\n\t"
90366 #else
90367         "sbc	r4, r6\n\t"
90368 #endif
90369         "stm	%[r]!, {r3, r4}\n\t"
90370         "ldm	%[b]!, {r5, r6}\n\t"
90371         "ldm	%[a]!, {r3, r4}\n\t"
90372 #ifdef WOLFSSL_KEIL
90373         "sbcs	r3, r3, r5\n\t"
90374 #elif defined(__clang__)
90375         "sbcs	r3, r5\n\t"
90376 #else
90377         "sbc	r3, r5\n\t"
90378 #endif
90379 #ifdef WOLFSSL_KEIL
90380         "sbcs	r4, r4, r6\n\t"
90381 #elif defined(__clang__)
90382         "sbcs	r4, r6\n\t"
90383 #else
90384         "sbc	r4, r6\n\t"
90385 #endif
90386         "stm	%[r]!, {r3, r4}\n\t"
90387         "ldm	%[b]!, {r5, r6}\n\t"
90388         "ldm	%[a]!, {r3, r4}\n\t"
90389 #ifdef WOLFSSL_KEIL
90390         "sbcs	r3, r3, r5\n\t"
90391 #elif defined(__clang__)
90392         "sbcs	r3, r5\n\t"
90393 #else
90394         "sbc	r3, r5\n\t"
90395 #endif
90396 #ifdef WOLFSSL_KEIL
90397         "sbcs	r4, r4, r6\n\t"
90398 #elif defined(__clang__)
90399         "sbcs	r4, r6\n\t"
90400 #else
90401         "sbc	r4, r6\n\t"
90402 #endif
90403         "stm	%[r]!, {r3, r4}\n\t"
90404         "ldm	%[b]!, {r5, r6}\n\t"
90405         "ldm	%[a]!, {r3, r4}\n\t"
90406 #ifdef WOLFSSL_KEIL
90407         "sbcs	r3, r3, r5\n\t"
90408 #elif defined(__clang__)
90409         "sbcs	r3, r5\n\t"
90410 #else
90411         "sbc	r3, r5\n\t"
90412 #endif
90413 #ifdef WOLFSSL_KEIL
90414         "sbcs	r4, r4, r6\n\t"
90415 #elif defined(__clang__)
90416         "sbcs	r4, r6\n\t"
90417 #else
90418         "sbc	r4, r6\n\t"
90419 #endif
90420         "stm	%[r]!, {r3, r4}\n\t"
90421         "ldm	%[b]!, {r5, r6}\n\t"
90422         "ldm	%[a]!, {r3, r4}\n\t"
90423 #ifdef WOLFSSL_KEIL
90424         "sbcs	r3, r3, r5\n\t"
90425 #elif defined(__clang__)
90426         "sbcs	r3, r5\n\t"
90427 #else
90428         "sbc	r3, r5\n\t"
90429 #endif
90430 #ifdef WOLFSSL_KEIL
90431         "sbcs	r4, r4, r6\n\t"
90432 #elif defined(__clang__)
90433         "sbcs	r4, r6\n\t"
90434 #else
90435         "sbc	r4, r6\n\t"
90436 #endif
90437         "stm	%[r]!, {r3, r4}\n\t"
90438         "ldm	%[b]!, {r5, r6}\n\t"
90439         "ldm	%[a]!, {r3, r4}\n\t"
90440 #ifdef WOLFSSL_KEIL
90441         "sbcs	r3, r3, r5\n\t"
90442 #elif defined(__clang__)
90443         "sbcs	r3, r5\n\t"
90444 #else
90445         "sbc	r3, r5\n\t"
90446 #endif
90447 #ifdef WOLFSSL_KEIL
90448         "sbcs	r4, r4, r6\n\t"
90449 #elif defined(__clang__)
90450         "sbcs	r4, r6\n\t"
90451 #else
90452         "sbc	r4, r6\n\t"
90453 #endif
90454         "stm	%[r]!, {r3, r4}\n\t"
90455         "ldm	%[b]!, {r5, r6}\n\t"
90456         "ldm	%[a]!, {r3, r4}\n\t"
90457 #ifdef WOLFSSL_KEIL
90458         "sbcs	r3, r3, r5\n\t"
90459 #elif defined(__clang__)
90460         "sbcs	r3, r5\n\t"
90461 #else
90462         "sbc	r3, r5\n\t"
90463 #endif
90464 #ifdef WOLFSSL_KEIL
90465         "sbcs	r4, r4, r6\n\t"
90466 #elif defined(__clang__)
90467         "sbcs	r4, r6\n\t"
90468 #else
90469         "sbc	r4, r6\n\t"
90470 #endif
90471         "stm	%[r]!, {r3, r4}\n\t"
90472         "ldm	%[b]!, {r5, r6}\n\t"
90473         "ldm	%[a]!, {r3, r4}\n\t"
90474 #ifdef WOLFSSL_KEIL
90475         "sbcs	r3, r3, r5\n\t"
90476 #elif defined(__clang__)
90477         "sbcs	r3, r5\n\t"
90478 #else
90479         "sbc	r3, r5\n\t"
90480 #endif
90481 #ifdef WOLFSSL_KEIL
90482         "sbcs	r4, r4, r6\n\t"
90483 #elif defined(__clang__)
90484         "sbcs	r4, r6\n\t"
90485 #else
90486         "sbc	r4, r6\n\t"
90487 #endif
90488         "stm	%[r]!, {r3, r4}\n\t"
90489         "ldm	%[b]!, {r5, r6}\n\t"
90490         "ldm	%[a]!, {r3, r4}\n\t"
90491 #ifdef WOLFSSL_KEIL
90492         "sbcs	r3, r3, r5\n\t"
90493 #elif defined(__clang__)
90494         "sbcs	r3, r5\n\t"
90495 #else
90496         "sbc	r3, r5\n\t"
90497 #endif
90498 #ifdef WOLFSSL_KEIL
90499         "sbcs	r4, r4, r6\n\t"
90500 #elif defined(__clang__)
90501         "sbcs	r4, r6\n\t"
90502 #else
90503         "sbc	r4, r6\n\t"
90504 #endif
90505         "stm	%[r]!, {r3, r4}\n\t"
90506         "ldm	%[b]!, {r5, r6}\n\t"
90507         "ldm	%[a]!, {r3, r4}\n\t"
90508 #ifdef WOLFSSL_KEIL
90509         "sbcs	r3, r3, r5\n\t"
90510 #elif defined(__clang__)
90511         "sbcs	r3, r5\n\t"
90512 #else
90513         "sbc	r3, r5\n\t"
90514 #endif
90515 #ifdef WOLFSSL_KEIL
90516         "sbcs	r4, r4, r6\n\t"
90517 #elif defined(__clang__)
90518         "sbcs	r4, r6\n\t"
90519 #else
90520         "sbc	r4, r6\n\t"
90521 #endif
90522         "stm	%[r]!, {r3, r4}\n\t"
90523         "ldm	%[b]!, {r5, r6}\n\t"
90524         "ldm	%[a]!, {r3, r4}\n\t"
90525 #ifdef WOLFSSL_KEIL
90526         "sbcs	r3, r3, r5\n\t"
90527 #elif defined(__clang__)
90528         "sbcs	r3, r5\n\t"
90529 #else
90530         "sbc	r3, r5\n\t"
90531 #endif
90532 #ifdef WOLFSSL_KEIL
90533         "sbcs	r4, r4, r6\n\t"
90534 #elif defined(__clang__)
90535         "sbcs	r4, r6\n\t"
90536 #else
90537         "sbc	r4, r6\n\t"
90538 #endif
90539         "stm	%[r]!, {r3, r4}\n\t"
90540         "ldm	%[b]!, {r5, r6}\n\t"
90541         "ldm	%[a]!, {r3, r4}\n\t"
90542 #ifdef WOLFSSL_KEIL
90543         "sbcs	r3, r3, r5\n\t"
90544 #elif defined(__clang__)
90545         "sbcs	r3, r5\n\t"
90546 #else
90547         "sbc	r3, r5\n\t"
90548 #endif
90549 #ifdef WOLFSSL_KEIL
90550         "sbcs	r4, r4, r6\n\t"
90551 #elif defined(__clang__)
90552         "sbcs	r4, r6\n\t"
90553 #else
90554         "sbc	r4, r6\n\t"
90555 #endif
90556         "stm	%[r]!, {r3, r4}\n\t"
90557         "ldm	%[b]!, {r5, r6}\n\t"
90558         "ldm	%[a]!, {r3, r4}\n\t"
90559 #ifdef WOLFSSL_KEIL
90560         "sbcs	r3, r3, r5\n\t"
90561 #elif defined(__clang__)
90562         "sbcs	r3, r5\n\t"
90563 #else
90564         "sbc	r3, r5\n\t"
90565 #endif
90566 #ifdef WOLFSSL_KEIL
90567         "sbcs	r4, r4, r6\n\t"
90568 #elif defined(__clang__)
90569         "sbcs	r4, r6\n\t"
90570 #else
90571         "sbc	r4, r6\n\t"
90572 #endif
90573         "stm	%[r]!, {r3, r4}\n\t"
90574         "ldm	%[b]!, {r5, r6}\n\t"
90575         "ldm	%[a]!, {r3, r4}\n\t"
90576 #ifdef WOLFSSL_KEIL
90577         "sbcs	r3, r3, r5\n\t"
90578 #elif defined(__clang__)
90579         "sbcs	r3, r5\n\t"
90580 #else
90581         "sbc	r3, r5\n\t"
90582 #endif
90583 #ifdef WOLFSSL_KEIL
90584         "sbcs	r4, r4, r6\n\t"
90585 #elif defined(__clang__)
90586         "sbcs	r4, r6\n\t"
90587 #else
90588         "sbc	r4, r6\n\t"
90589 #endif
90590         "stm	%[r]!, {r3, r4}\n\t"
90591         "ldm	%[b]!, {r5, r6}\n\t"
90592         "ldm	%[a]!, {r3, r4}\n\t"
90593 #ifdef WOLFSSL_KEIL
90594         "sbcs	r3, r3, r5\n\t"
90595 #elif defined(__clang__)
90596         "sbcs	r3, r5\n\t"
90597 #else
90598         "sbc	r3, r5\n\t"
90599 #endif
90600 #ifdef WOLFSSL_KEIL
90601         "sbcs	r4, r4, r6\n\t"
90602 #elif defined(__clang__)
90603         "sbcs	r4, r6\n\t"
90604 #else
90605         "sbc	r4, r6\n\t"
90606 #endif
90607         "stm	%[r]!, {r3, r4}\n\t"
90608         "ldm	%[b]!, {r5, r6}\n\t"
90609         "ldm	%[a]!, {r3, r4}\n\t"
90610 #ifdef WOLFSSL_KEIL
90611         "sbcs	r3, r3, r5\n\t"
90612 #elif defined(__clang__)
90613         "sbcs	r3, r5\n\t"
90614 #else
90615         "sbc	r3, r5\n\t"
90616 #endif
90617 #ifdef WOLFSSL_KEIL
90618         "sbcs	r4, r4, r6\n\t"
90619 #elif defined(__clang__)
90620         "sbcs	r4, r6\n\t"
90621 #else
90622         "sbc	r4, r6\n\t"
90623 #endif
90624         "stm	%[r]!, {r3, r4}\n\t"
90625         "ldm	%[b]!, {r5, r6}\n\t"
90626         "ldm	%[a]!, {r3, r4}\n\t"
90627 #ifdef WOLFSSL_KEIL
90628         "sbcs	r3, r3, r5\n\t"
90629 #elif defined(__clang__)
90630         "sbcs	r3, r5\n\t"
90631 #else
90632         "sbc	r3, r5\n\t"
90633 #endif
90634 #ifdef WOLFSSL_KEIL
90635         "sbcs	r4, r4, r6\n\t"
90636 #elif defined(__clang__)
90637         "sbcs	r4, r6\n\t"
90638 #else
90639         "sbc	r4, r6\n\t"
90640 #endif
90641         "stm	%[r]!, {r3, r4}\n\t"
90642         "ldm	%[b]!, {r5, r6}\n\t"
90643         "ldm	%[a]!, {r3, r4}\n\t"
90644 #ifdef WOLFSSL_KEIL
90645         "sbcs	r3, r3, r5\n\t"
90646 #elif defined(__clang__)
90647         "sbcs	r3, r5\n\t"
90648 #else
90649         "sbc	r3, r5\n\t"
90650 #endif
90651 #ifdef WOLFSSL_KEIL
90652         "sbcs	r4, r4, r6\n\t"
90653 #elif defined(__clang__)
90654         "sbcs	r4, r6\n\t"
90655 #else
90656         "sbc	r4, r6\n\t"
90657 #endif
90658         "stm	%[r]!, {r3, r4}\n\t"
90659         "ldm	%[b]!, {r5, r6}\n\t"
90660         "ldm	%[a]!, {r3, r4}\n\t"
90661 #ifdef WOLFSSL_KEIL
90662         "sbcs	r3, r3, r5\n\t"
90663 #elif defined(__clang__)
90664         "sbcs	r3, r5\n\t"
90665 #else
90666         "sbc	r3, r5\n\t"
90667 #endif
90668 #ifdef WOLFSSL_KEIL
90669         "sbcs	r4, r4, r6\n\t"
90670 #elif defined(__clang__)
90671         "sbcs	r4, r6\n\t"
90672 #else
90673         "sbc	r4, r6\n\t"
90674 #endif
90675         "stm	%[r]!, {r3, r4}\n\t"
90676         "ldm	%[b]!, {r5, r6}\n\t"
90677         "ldm	%[a]!, {r3, r4}\n\t"
90678 #ifdef WOLFSSL_KEIL
90679         "sbcs	r3, r3, r5\n\t"
90680 #elif defined(__clang__)
90681         "sbcs	r3, r5\n\t"
90682 #else
90683         "sbc	r3, r5\n\t"
90684 #endif
90685 #ifdef WOLFSSL_KEIL
90686         "sbcs	r4, r4, r6\n\t"
90687 #elif defined(__clang__)
90688         "sbcs	r4, r6\n\t"
90689 #else
90690         "sbc	r4, r6\n\t"
90691 #endif
90692         "stm	%[r]!, {r3, r4}\n\t"
90693         "ldm	%[b]!, {r5, r6}\n\t"
90694         "ldm	%[a]!, {r3, r4}\n\t"
90695 #ifdef WOLFSSL_KEIL
90696         "sbcs	r3, r3, r5\n\t"
90697 #elif defined(__clang__)
90698         "sbcs	r3, r5\n\t"
90699 #else
90700         "sbc	r3, r5\n\t"
90701 #endif
90702 #ifdef WOLFSSL_KEIL
90703         "sbcs	r4, r4, r6\n\t"
90704 #elif defined(__clang__)
90705         "sbcs	r4, r6\n\t"
90706 #else
90707         "sbc	r4, r6\n\t"
90708 #endif
90709         "stm	%[r]!, {r3, r4}\n\t"
90710 #ifdef WOLFSSL_KEIL
90711         "sbcs	%[r], %[r], %[r]\n\t"
90712 #elif defined(__clang__)
90713         "sbcs	%[r], %[r]\n\t"
90714 #else
90715         "sbc	%[r], %[r]\n\t"
90716 #endif
90717         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
90718         :
90719         : "memory", "r3", "r4", "r5", "r6"
90720     );
90721     return (uint32_t)(size_t)r;
90722 }
90723 
90724 #endif /* WOLFSSL_SP_SMALL */
90725 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
90726  *
90727  * d1   The high order half of the number to divide.
90728  * d0   The low order half of the number to divide.
90729  * div  The dividend.
90730  * returns the result of the division.
90731  *
90732  * Note that this is an approximate div. It may give an answer 1 larger.
90733  */
div_4096_word_128(sp_digit d1,sp_digit d0,sp_digit div)90734 SP_NOINLINE static sp_digit div_4096_word_128(sp_digit d1, sp_digit d0,
90735         sp_digit div)
90736 {
90737     __asm__ __volatile__ (
90738         "movs	r3, #0\n\t"
90739 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90740         "lsrs	r5, %[div], #1\n\t"
90741 #else
90742         "lsr	r5, %[div], #1\n\t"
90743 #endif
90744 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90745         "adds	r5, r5, #1\n\t"
90746 #else
90747         "add	r5, r5, #1\n\t"
90748 #endif
90749         "mov	r8, %[d0]\n\t"
90750         "mov	r9, %[d1]\n\t"
90751         "# Do top 32\n\t"
90752         "movs	r6, r5\n\t"
90753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90754         "subs	r6, r6, %[d1]\n\t"
90755 #else
90756         "sub	r6, r6, %[d1]\n\t"
90757 #endif
90758 #ifdef WOLFSSL_KEIL
90759         "sbcs	r6, r6, r6\n\t"
90760 #elif defined(__clang__)
90761         "sbcs	r6, r6\n\t"
90762 #else
90763         "sbc	r6, r6\n\t"
90764 #endif
90765 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90766         "adds	r3, r3, r3\n\t"
90767 #else
90768         "add	r3, r3, r3\n\t"
90769 #endif
90770 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90771         "subs	r3, r3, r6\n\t"
90772 #else
90773         "sub	r3, r3, r6\n\t"
90774 #endif
90775 #ifdef WOLFSSL_KEIL
90776         "ands	r6, r6, r5\n\t"
90777 #elif defined(__clang__)
90778         "ands	r6, r5\n\t"
90779 #else
90780         "and	r6, r5\n\t"
90781 #endif
90782 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90783         "subs	%[d1], %[d1], r6\n\t"
90784 #else
90785         "sub	%[d1], %[d1], r6\n\t"
90786 #endif
90787         "movs	r4, #29\n\t"
90788         "\n"
90789     "L_div_4096_word_128_loop_%=:\n\t"
90790 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90791         "lsls	%[d0], %[d0], #1\n\t"
90792 #else
90793         "lsl	%[d0], %[d0], #1\n\t"
90794 #endif
90795 #ifdef WOLFSSL_KEIL
90796         "adcs	%[d1], %[d1], %[d1]\n\t"
90797 #elif defined(__clang__)
90798         "adcs	%[d1], %[d1]\n\t"
90799 #else
90800         "adc	%[d1], %[d1]\n\t"
90801 #endif
90802         "movs	r6, r5\n\t"
90803 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90804         "subs	r6, r6, %[d1]\n\t"
90805 #else
90806         "sub	r6, r6, %[d1]\n\t"
90807 #endif
90808 #ifdef WOLFSSL_KEIL
90809         "sbcs	r6, r6, r6\n\t"
90810 #elif defined(__clang__)
90811         "sbcs	r6, r6\n\t"
90812 #else
90813         "sbc	r6, r6\n\t"
90814 #endif
90815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90816         "adds	r3, r3, r3\n\t"
90817 #else
90818         "add	r3, r3, r3\n\t"
90819 #endif
90820 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90821         "subs	r3, r3, r6\n\t"
90822 #else
90823         "sub	r3, r3, r6\n\t"
90824 #endif
90825 #ifdef WOLFSSL_KEIL
90826         "ands	r6, r6, r5\n\t"
90827 #elif defined(__clang__)
90828         "ands	r6, r5\n\t"
90829 #else
90830         "and	r6, r5\n\t"
90831 #endif
90832 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90833         "subs	%[d1], %[d1], r6\n\t"
90834 #else
90835         "sub	%[d1], %[d1], r6\n\t"
90836 #endif
90837 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90838         "subs	r4, r4, #1\n\t"
90839 #else
90840         "sub	r4, r4, #1\n\t"
90841 #endif
90842         "bpl	L_div_4096_word_128_loop_%=\n\t"
90843         "movs	r7, #0\n\t"
90844 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90845         "adds	r3, r3, r3\n\t"
90846 #else
90847         "add	r3, r3, r3\n\t"
90848 #endif
90849 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90850         "adds	r3, r3, #1\n\t"
90851 #else
90852         "add	r3, r3, #1\n\t"
90853 #endif
90854         "# r * div - Start\n\t"
90855         "uxth	%[d1], r3\n\t"
90856         "uxth	r4, %[div]\n\t"
90857 #ifdef WOLFSSL_KEIL
90858         "muls	r4, %[d1], r4\n\t"
90859 #elif defined(__clang__)
90860         "muls	r4, %[d1]\n\t"
90861 #else
90862         "mul	r4, %[d1]\n\t"
90863 #endif
90864 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90865         "lsrs	r6, %[div], #16\n\t"
90866 #else
90867         "lsr	r6, %[div], #16\n\t"
90868 #endif
90869 #ifdef WOLFSSL_KEIL
90870         "muls	%[d1], r6, %[d1]\n\t"
90871 #elif defined(__clang__)
90872         "muls	%[d1], r6\n\t"
90873 #else
90874         "mul	%[d1], r6\n\t"
90875 #endif
90876 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90877         "lsrs	r5, %[d1], #16\n\t"
90878 #else
90879         "lsr	r5, %[d1], #16\n\t"
90880 #endif
90881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90882         "lsls	%[d1], %[d1], #16\n\t"
90883 #else
90884         "lsl	%[d1], %[d1], #16\n\t"
90885 #endif
90886 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90887         "adds	r4, r4, %[d1]\n\t"
90888 #else
90889         "add	r4, r4, %[d1]\n\t"
90890 #endif
90891 #ifdef WOLFSSL_KEIL
90892         "adcs	r5, r5, r7\n\t"
90893 #elif defined(__clang__)
90894         "adcs	r5, r7\n\t"
90895 #else
90896         "adc	r5, r7\n\t"
90897 #endif
90898 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90899         "lsrs	%[d1], r3, #16\n\t"
90900 #else
90901         "lsr	%[d1], r3, #16\n\t"
90902 #endif
90903 #ifdef WOLFSSL_KEIL
90904         "muls	r6, %[d1], r6\n\t"
90905 #elif defined(__clang__)
90906         "muls	r6, %[d1]\n\t"
90907 #else
90908         "mul	r6, %[d1]\n\t"
90909 #endif
90910 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90911         "adds	r5, r5, r6\n\t"
90912 #else
90913         "add	r5, r5, r6\n\t"
90914 #endif
90915         "uxth	r6, %[div]\n\t"
90916 #ifdef WOLFSSL_KEIL
90917         "muls	%[d1], r6, %[d1]\n\t"
90918 #elif defined(__clang__)
90919         "muls	%[d1], r6\n\t"
90920 #else
90921         "mul	%[d1], r6\n\t"
90922 #endif
90923 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90924         "lsrs	r6, %[d1], #16\n\t"
90925 #else
90926         "lsr	r6, %[d1], #16\n\t"
90927 #endif
90928 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90929         "lsls	%[d1], %[d1], #16\n\t"
90930 #else
90931         "lsl	%[d1], %[d1], #16\n\t"
90932 #endif
90933 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90934         "adds	r4, r4, %[d1]\n\t"
90935 #else
90936         "add	r4, r4, %[d1]\n\t"
90937 #endif
90938 #ifdef WOLFSSL_KEIL
90939         "adcs	r5, r5, r6\n\t"
90940 #elif defined(__clang__)
90941         "adcs	r5, r6\n\t"
90942 #else
90943         "adc	r5, r6\n\t"
90944 #endif
90945         "# r * div - Done\n\t"
90946         "mov	%[d1], r8\n\t"
90947 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90948         "subs	%[d1], %[d1], r4\n\t"
90949 #else
90950         "sub	%[d1], %[d1], r4\n\t"
90951 #endif
90952         "movs	r4, %[d1]\n\t"
90953         "mov	%[d1], r9\n\t"
90954 #ifdef WOLFSSL_KEIL
90955         "sbcs	%[d1], %[d1], r5\n\t"
90956 #elif defined(__clang__)
90957         "sbcs	%[d1], r5\n\t"
90958 #else
90959         "sbc	%[d1], r5\n\t"
90960 #endif
90961         "movs	r5, %[d1]\n\t"
90962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90963         "adds	r3, r3, r5\n\t"
90964 #else
90965         "add	r3, r3, r5\n\t"
90966 #endif
90967         "# r * div - Start\n\t"
90968         "uxth	%[d1], r3\n\t"
90969         "uxth	r4, %[div]\n\t"
90970 #ifdef WOLFSSL_KEIL
90971         "muls	r4, %[d1], r4\n\t"
90972 #elif defined(__clang__)
90973         "muls	r4, %[d1]\n\t"
90974 #else
90975         "mul	r4, %[d1]\n\t"
90976 #endif
90977 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90978         "lsrs	r6, %[div], #16\n\t"
90979 #else
90980         "lsr	r6, %[div], #16\n\t"
90981 #endif
90982 #ifdef WOLFSSL_KEIL
90983         "muls	%[d1], r6, %[d1]\n\t"
90984 #elif defined(__clang__)
90985         "muls	%[d1], r6\n\t"
90986 #else
90987         "mul	%[d1], r6\n\t"
90988 #endif
90989 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90990         "lsrs	r5, %[d1], #16\n\t"
90991 #else
90992         "lsr	r5, %[d1], #16\n\t"
90993 #endif
90994 #if defined(__clang__) || defined(WOLFSSL_KEIL)
90995         "lsls	%[d1], %[d1], #16\n\t"
90996 #else
90997         "lsl	%[d1], %[d1], #16\n\t"
90998 #endif
90999 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91000         "adds	r4, r4, %[d1]\n\t"
91001 #else
91002         "add	r4, r4, %[d1]\n\t"
91003 #endif
91004 #ifdef WOLFSSL_KEIL
91005         "adcs	r5, r5, r7\n\t"
91006 #elif defined(__clang__)
91007         "adcs	r5, r7\n\t"
91008 #else
91009         "adc	r5, r7\n\t"
91010 #endif
91011 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91012         "lsrs	%[d1], r3, #16\n\t"
91013 #else
91014         "lsr	%[d1], r3, #16\n\t"
91015 #endif
91016 #ifdef WOLFSSL_KEIL
91017         "muls	r6, %[d1], r6\n\t"
91018 #elif defined(__clang__)
91019         "muls	r6, %[d1]\n\t"
91020 #else
91021         "mul	r6, %[d1]\n\t"
91022 #endif
91023 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91024         "adds	r5, r5, r6\n\t"
91025 #else
91026         "add	r5, r5, r6\n\t"
91027 #endif
91028         "uxth	r6, %[div]\n\t"
91029 #ifdef WOLFSSL_KEIL
91030         "muls	%[d1], r6, %[d1]\n\t"
91031 #elif defined(__clang__)
91032         "muls	%[d1], r6\n\t"
91033 #else
91034         "mul	%[d1], r6\n\t"
91035 #endif
91036 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91037         "lsrs	r6, %[d1], #16\n\t"
91038 #else
91039         "lsr	r6, %[d1], #16\n\t"
91040 #endif
91041 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91042         "lsls	%[d1], %[d1], #16\n\t"
91043 #else
91044         "lsl	%[d1], %[d1], #16\n\t"
91045 #endif
91046 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91047         "adds	r4, r4, %[d1]\n\t"
91048 #else
91049         "add	r4, r4, %[d1]\n\t"
91050 #endif
91051 #ifdef WOLFSSL_KEIL
91052         "adcs	r5, r5, r6\n\t"
91053 #elif defined(__clang__)
91054         "adcs	r5, r6\n\t"
91055 #else
91056         "adc	r5, r6\n\t"
91057 #endif
91058         "# r * div - Done\n\t"
91059         "mov	%[d1], r8\n\t"
91060         "mov	r6, r9\n\t"
91061 #ifdef WOLFSSL_KEIL
91062         "subs	r4, %[d1], r4\n\t"
91063 #else
91064 #ifdef __clang__
91065         "subs	r4, %[d1], r4\n\t"
91066 #else
91067         "sub	r4, %[d1], r4\n\t"
91068 #endif
91069 #endif
91070 #ifdef WOLFSSL_KEIL
91071         "sbcs	r6, r6, r5\n\t"
91072 #elif defined(__clang__)
91073         "sbcs	r6, r5\n\t"
91074 #else
91075         "sbc	r6, r5\n\t"
91076 #endif
91077         "movs	r5, r6\n\t"
91078 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91079         "adds	r3, r3, r5\n\t"
91080 #else
91081         "add	r3, r3, r5\n\t"
91082 #endif
91083         "# r * div - Start\n\t"
91084         "uxth	%[d1], r3\n\t"
91085         "uxth	r4, %[div]\n\t"
91086 #ifdef WOLFSSL_KEIL
91087         "muls	r4, %[d1], r4\n\t"
91088 #elif defined(__clang__)
91089         "muls	r4, %[d1]\n\t"
91090 #else
91091         "mul	r4, %[d1]\n\t"
91092 #endif
91093 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91094         "lsrs	r6, %[div], #16\n\t"
91095 #else
91096         "lsr	r6, %[div], #16\n\t"
91097 #endif
91098 #ifdef WOLFSSL_KEIL
91099         "muls	%[d1], r6, %[d1]\n\t"
91100 #elif defined(__clang__)
91101         "muls	%[d1], r6\n\t"
91102 #else
91103         "mul	%[d1], r6\n\t"
91104 #endif
91105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91106         "lsrs	r5, %[d1], #16\n\t"
91107 #else
91108         "lsr	r5, %[d1], #16\n\t"
91109 #endif
91110 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91111         "lsls	%[d1], %[d1], #16\n\t"
91112 #else
91113         "lsl	%[d1], %[d1], #16\n\t"
91114 #endif
91115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91116         "adds	r4, r4, %[d1]\n\t"
91117 #else
91118         "add	r4, r4, %[d1]\n\t"
91119 #endif
91120 #ifdef WOLFSSL_KEIL
91121         "adcs	r5, r5, r7\n\t"
91122 #elif defined(__clang__)
91123         "adcs	r5, r7\n\t"
91124 #else
91125         "adc	r5, r7\n\t"
91126 #endif
91127 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91128         "lsrs	%[d1], r3, #16\n\t"
91129 #else
91130         "lsr	%[d1], r3, #16\n\t"
91131 #endif
91132 #ifdef WOLFSSL_KEIL
91133         "muls	r6, %[d1], r6\n\t"
91134 #elif defined(__clang__)
91135         "muls	r6, %[d1]\n\t"
91136 #else
91137         "mul	r6, %[d1]\n\t"
91138 #endif
91139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91140         "adds	r5, r5, r6\n\t"
91141 #else
91142         "add	r5, r5, r6\n\t"
91143 #endif
91144         "uxth	r6, %[div]\n\t"
91145 #ifdef WOLFSSL_KEIL
91146         "muls	%[d1], r6, %[d1]\n\t"
91147 #elif defined(__clang__)
91148         "muls	%[d1], r6\n\t"
91149 #else
91150         "mul	%[d1], r6\n\t"
91151 #endif
91152 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91153         "lsrs	r6, %[d1], #16\n\t"
91154 #else
91155         "lsr	r6, %[d1], #16\n\t"
91156 #endif
91157 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91158         "lsls	%[d1], %[d1], #16\n\t"
91159 #else
91160         "lsl	%[d1], %[d1], #16\n\t"
91161 #endif
91162 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91163         "adds	r4, r4, %[d1]\n\t"
91164 #else
91165         "add	r4, r4, %[d1]\n\t"
91166 #endif
91167 #ifdef WOLFSSL_KEIL
91168         "adcs	r5, r5, r6\n\t"
91169 #elif defined(__clang__)
91170         "adcs	r5, r6\n\t"
91171 #else
91172         "adc	r5, r6\n\t"
91173 #endif
91174         "# r * div - Done\n\t"
91175         "mov	%[d1], r8\n\t"
91176         "mov	r6, r9\n\t"
91177 #ifdef WOLFSSL_KEIL
91178         "subs	r4, %[d1], r4\n\t"
91179 #else
91180 #ifdef __clang__
91181         "subs	r4, %[d1], r4\n\t"
91182 #else
91183         "sub	r4, %[d1], r4\n\t"
91184 #endif
91185 #endif
91186 #ifdef WOLFSSL_KEIL
91187         "sbcs	r6, r6, r5\n\t"
91188 #elif defined(__clang__)
91189         "sbcs	r6, r5\n\t"
91190 #else
91191         "sbc	r6, r5\n\t"
91192 #endif
91193         "movs	r5, r6\n\t"
91194 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91195         "adds	r3, r3, r5\n\t"
91196 #else
91197         "add	r3, r3, r5\n\t"
91198 #endif
91199         "movs	r6, %[div]\n\t"
91200 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91201         "subs	r6, r6, r4\n\t"
91202 #else
91203         "sub	r6, r6, r4\n\t"
91204 #endif
91205 #ifdef WOLFSSL_KEIL
91206         "sbcs	r6, r6, r6\n\t"
91207 #elif defined(__clang__)
91208         "sbcs	r6, r6\n\t"
91209 #else
91210         "sbc	r6, r6\n\t"
91211 #endif
91212 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91213         "subs	r3, r3, r6\n\t"
91214 #else
91215         "sub	r3, r3, r6\n\t"
91216 #endif
91217         "movs	%[d1], r3\n\t"
91218         : [d1] "+r" (d1), [d0] "+r" (d0), [div] "+r" (div)
91219         :
91220         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
91221     );
91222     return (uint32_t)(size_t)d1;
91223 }
91224 
91225 /* Divide d in a and put remainder into r (m*d + r = a)
91226  * m is not calculated as it is not needed at this time.
91227  *
91228  * a  Number to be divided.
91229  * d  Number to divide with.
91230  * m  Multiplier result.
91231  * r  Remainder from the division.
91232  * returns MP_OKAY indicating success.
91233  */
sp_4096_div_128_cond(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)91234 static WC_INLINE int sp_4096_div_128_cond(const sp_digit* a, const sp_digit* d, sp_digit* m,
91235         sp_digit* r)
91236 {
91237     sp_digit t1[256], t2[129];
91238     sp_digit div, r1;
91239     int i;
91240 
91241     (void)m;
91242 
91243     div = d[127];
91244     XMEMCPY(t1, a, sizeof(*t1) * 2 * 128);
91245     for (i=127; i>=0; i--) {
91246         sp_digit hi = t1[128 + i] - (t1[128 + i] == div);
91247         r1 = div_4096_word_128(hi, t1[128 + i - 1], div);
91248 
91249         sp_4096_mul_d_128(t2, d, r1);
91250         t1[128 + i] += sp_4096_sub_in_place_128(&t1[i], t2);
91251         t1[128 + i] -= t2[128];
91252         if (t1[128 + i] != 0) {
91253             t1[128 + i] += sp_4096_add_128(&t1[i], &t1[i], d);
91254             if (t1[128 + i] != 0)
91255                 t1[128 + i] += sp_4096_add_128(&t1[i], &t1[i], d);
91256         }
91257     }
91258 
91259     for (i = 127; i > 0; i--) {
91260         if (t1[i] != d[i])
91261             break;
91262     }
91263     if (t1[i] >= d[i]) {
91264         sp_4096_sub_128(r, t1, d);
91265     }
91266     else {
91267         XMEMCPY(r, t1, sizeof(*t1) * 128);
91268     }
91269 
91270     return MP_OKAY;
91271 }
91272 
91273 /* Reduce a modulo m into r. (r = a mod m)
91274  *
91275  * r  A single precision number that is the reduced result.
91276  * a  A single precision number that is to be reduced.
91277  * m  A single precision number that is the modulus to reduce with.
91278  * returns MP_OKAY indicating success.
91279  */
sp_4096_mod_128_cond(sp_digit * r,const sp_digit * a,const sp_digit * m)91280 static WC_INLINE int sp_4096_mod_128_cond(sp_digit* r, const sp_digit* a, const sp_digit* m)
91281 {
91282     return sp_4096_div_128_cond(a, m, NULL, r);
91283 }
91284 
91285 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
91286 /* AND m into each word of a and store in r.
91287  *
91288  * r  A single precision integer.
91289  * a  A single precision integer.
91290  * m  Mask to AND against each digit.
91291  */
sp_4096_mask_128(sp_digit * r,const sp_digit * a,sp_digit m)91292 static void sp_4096_mask_128(sp_digit* r, const sp_digit* a, sp_digit m)
91293 {
91294 #ifdef WOLFSSL_SP_SMALL
91295     int i;
91296 
91297     for (i=0; i<128; i++) {
91298         r[i] = a[i] & m;
91299     }
91300 #else
91301     int i;
91302 
91303     for (i = 0; i < 128; i += 8) {
91304         r[i+0] = a[i+0] & m;
91305         r[i+1] = a[i+1] & m;
91306         r[i+2] = a[i+2] & m;
91307         r[i+3] = a[i+3] & m;
91308         r[i+4] = a[i+4] & m;
91309         r[i+5] = a[i+5] & m;
91310         r[i+6] = a[i+6] & m;
91311         r[i+7] = a[i+7] & m;
91312     }
91313 #endif
91314 }
91315 
91316 /* Compare a with b in constant time.
91317  *
91318  * a  A single precision integer.
91319  * b  A single precision integer.
91320  * return -ve, 0 or +ve if a is less than, equal to or greater than b
91321  * respectively.
91322  */
sp_4096_cmp_128(const sp_digit * a,const sp_digit * b)91323 SP_NOINLINE static sp_int32 sp_4096_cmp_128(const sp_digit* a,
91324         const sp_digit* b)
91325 {
91326     __asm__ __volatile__ (
91327         "movs	r2, #0\n\t"
91328         "movs	r3, #0\n\t"
91329 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91330         "mvns	r3, r3\n\t"
91331 #else
91332         "mvn	r3, r3\n\t"
91333 #endif
91334         "movs	r6, #0xff\n\t"
91335 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91336         "adds	r6, r6, #0xfd\n\t"
91337 #else
91338         "add	r6, r6, #0xfd\n\t"
91339 #endif
91340         "\n"
91341     "L_sp_4096_cmp_128_words_%=:\n\t"
91342         "ldr	r7, [%[a], r6]\n\t"
91343         "ldr	r5, [%[b], r6]\n\t"
91344 #ifdef WOLFSSL_KEIL
91345         "ands	r7, r7, r3\n\t"
91346 #elif defined(__clang__)
91347         "ands	r7, r3\n\t"
91348 #else
91349         "and	r7, r3\n\t"
91350 #endif
91351 #ifdef WOLFSSL_KEIL
91352         "ands	r5, r5, r3\n\t"
91353 #elif defined(__clang__)
91354         "ands	r5, r3\n\t"
91355 #else
91356         "and	r5, r3\n\t"
91357 #endif
91358         "movs	r4, r7\n\t"
91359 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91360         "subs	r7, r7, r5\n\t"
91361 #else
91362         "sub	r7, r7, r5\n\t"
91363 #endif
91364 #ifdef WOLFSSL_KEIL
91365         "sbcs	r7, r7, r7\n\t"
91366 #elif defined(__clang__)
91367         "sbcs	r7, r7\n\t"
91368 #else
91369         "sbc	r7, r7\n\t"
91370 #endif
91371 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91372         "adds	r2, r2, r7\n\t"
91373 #else
91374         "add	r2, r2, r7\n\t"
91375 #endif
91376 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91377         "mvns	r7, r7\n\t"
91378 #else
91379         "mvn	r7, r7\n\t"
91380 #endif
91381 #ifdef WOLFSSL_KEIL
91382         "ands	r3, r3, r7\n\t"
91383 #elif defined(__clang__)
91384         "ands	r3, r7\n\t"
91385 #else
91386         "and	r3, r7\n\t"
91387 #endif
91388 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91389         "subs	r5, r5, r4\n\t"
91390 #else
91391         "sub	r5, r5, r4\n\t"
91392 #endif
91393 #ifdef WOLFSSL_KEIL
91394         "sbcs	r7, r7, r7\n\t"
91395 #elif defined(__clang__)
91396         "sbcs	r7, r7\n\t"
91397 #else
91398         "sbc	r7, r7\n\t"
91399 #endif
91400 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91401         "subs	r2, r2, r7\n\t"
91402 #else
91403         "sub	r2, r2, r7\n\t"
91404 #endif
91405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91406         "mvns	r7, r7\n\t"
91407 #else
91408         "mvn	r7, r7\n\t"
91409 #endif
91410 #ifdef WOLFSSL_KEIL
91411         "ands	r3, r3, r7\n\t"
91412 #elif defined(__clang__)
91413         "ands	r3, r7\n\t"
91414 #else
91415         "and	r3, r7\n\t"
91416 #endif
91417 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91418         "subs	r6, r6, #4\n\t"
91419 #else
91420         "sub	r6, r6, #4\n\t"
91421 #endif
91422         "cmp	r6, #0\n\t"
91423         "bge	L_sp_4096_cmp_128_words_%=\n\t"
91424         "movs	%[a], r2\n\t"
91425         : [a] "+r" (a), [b] "+r" (b)
91426         :
91427         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
91428     );
91429     return (uint32_t)(size_t)a;
91430 }
91431 
91432 /* Divide d in a and put remainder into r (m*d + r = a)
91433  * m is not calculated as it is not needed at this time.
91434  *
91435  * a  Number to be divided.
91436  * d  Number to divide with.
91437  * m  Multiplier result.
91438  * r  Remainder from the division.
91439  * returns MP_OKAY indicating success.
91440  */
sp_4096_div_128(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)91441 static WC_INLINE int sp_4096_div_128(const sp_digit* a, const sp_digit* d, sp_digit* m,
91442         sp_digit* r)
91443 {
91444     sp_digit t1[256], t2[129];
91445     sp_digit div, r1;
91446     int i;
91447 
91448     (void)m;
91449 
91450     div = d[127];
91451     XMEMCPY(t1, a, sizeof(*t1) * 2 * 128);
91452     for (i=127; i>=0; i--) {
91453         sp_digit hi = t1[128 + i] - (t1[128 + i] == div);
91454         r1 = div_4096_word_128(hi, t1[128 + i - 1], div);
91455 
91456         sp_4096_mul_d_128(t2, d, r1);
91457         t1[128 + i] += sp_4096_sub_in_place_128(&t1[i], t2);
91458         t1[128 + i] -= t2[128];
91459         sp_4096_mask_128(t2, d, t1[128 + i]);
91460         t1[128 + i] += sp_4096_add_128(&t1[i], &t1[i], t2);
91461         sp_4096_mask_128(t2, d, t1[128 + i]);
91462         t1[128 + i] += sp_4096_add_128(&t1[i], &t1[i], t2);
91463     }
91464 
91465     r1 = sp_4096_cmp_128(t1, d) >= 0;
91466     sp_4096_cond_sub_128(r, t1, d, (sp_digit)0 - r1);
91467 
91468     return MP_OKAY;
91469 }
91470 
91471 /* Reduce a modulo m into r. (r = a mod m)
91472  *
91473  * r  A single precision number that is the reduced result.
91474  * a  A single precision number that is to be reduced.
91475  * m  A single precision number that is the modulus to reduce with.
91476  * returns MP_OKAY indicating success.
91477  */
sp_4096_mod_128(sp_digit * r,const sp_digit * a,const sp_digit * m)91478 static WC_INLINE int sp_4096_mod_128(sp_digit* r, const sp_digit* a, const sp_digit* m)
91479 {
91480     return sp_4096_div_128(a, m, NULL, r);
91481 }
91482 
91483 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
91484                                                      defined(WOLFSSL_HAVE_SP_DH)
91485 #ifdef WOLFSSL_SP_SMALL
91486 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
91487  *
91488  * r     A single precision number that is the result of the operation.
91489  * a     A single precision number being exponentiated.
91490  * e     A single precision number that is the exponent.
91491  * bits  The number of bits in the exponent.
91492  * m     A single precision number that is the modulus.
91493  * returns  0 on success.
91494  * returns  MEMORY_E on dynamic memory allocation failure.
91495  * returns  MP_VAL when base is even or exponent is 0.
91496  */
sp_4096_mod_exp_128(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)91497 static int sp_4096_mod_exp_128(sp_digit* r, const sp_digit* a, const sp_digit* e,
91498         int bits, const sp_digit* m, int reduceA)
91499 {
91500 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
91501     sp_digit* td = NULL;
91502 #else
91503     sp_digit td[8 * 256];
91504 #endif
91505     sp_digit* t[8];
91506     sp_digit* norm = NULL;
91507     sp_digit mp = 1;
91508     sp_digit n;
91509     sp_digit mask;
91510     int i;
91511     int c;
91512     byte y;
91513     int err = MP_OKAY;
91514 
91515     if ((m[0] & 1) == 0) {
91516         err = MP_VAL;
91517     }
91518     else if (bits == 0) {
91519         err = MP_VAL;
91520     }
91521 
91522 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
91523     if (err == MP_OKAY) {
91524         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (8 * 256), NULL,
91525                                 DYNAMIC_TYPE_TMP_BUFFER);
91526         if (td == NULL)
91527             err = MEMORY_E;
91528     }
91529 #endif
91530 
91531     if (err == MP_OKAY) {
91532         norm = td;
91533         for (i=0; i<8; i++) {
91534             t[i] = td + i * 256;
91535         }
91536 
91537         sp_4096_mont_setup(m, &mp);
91538         sp_4096_mont_norm_128(norm, m);
91539 
91540         XMEMSET(t[1], 0, sizeof(sp_digit) * 128U);
91541         if (reduceA != 0) {
91542             err = sp_4096_mod_128(t[1] + 128, a, m);
91543             if (err == MP_OKAY) {
91544                 err = sp_4096_mod_128(t[1], t[1], m);
91545             }
91546         }
91547         else {
91548             XMEMCPY(t[1] + 128, a, sizeof(sp_digit) * 128);
91549             err = sp_4096_mod_128(t[1], t[1], m);
91550         }
91551     }
91552 
91553     if (err == MP_OKAY) {
91554         sp_4096_mont_sqr_128(t[ 2], t[ 1], m, mp);
91555         sp_4096_mont_mul_128(t[ 3], t[ 2], t[ 1], m, mp);
91556         sp_4096_mont_sqr_128(t[ 4], t[ 2], m, mp);
91557         sp_4096_mont_mul_128(t[ 5], t[ 3], t[ 2], m, mp);
91558         sp_4096_mont_sqr_128(t[ 6], t[ 3], m, mp);
91559         sp_4096_mont_mul_128(t[ 7], t[ 4], t[ 3], m, mp);
91560 
91561         i = (bits - 1) / 32;
91562         n = e[i--];
91563         c = bits & 31;
91564         if (c == 0) {
91565             c = 32;
91566         }
91567         c -= bits % 3;
91568         if (c == 32) {
91569             c = 29;
91570         }
91571         if (c < 0) {
91572             /* Number of bits in top word is less than number needed. */
91573             c = -c;
91574             y = (byte)(n << c);
91575             n = e[i--];
91576             y |= (byte)(n >> (64 - c));
91577             n <<= c;
91578             c = 64 - c;
91579         }
91580         else {
91581             y = (byte)(n >> c);
91582             n <<= 32 - c;
91583         }
91584         XMEMCPY(r, t[y], sizeof(sp_digit) * 128);
91585         for (; i>=0 || c>=3; ) {
91586             if (c == 0) {
91587                 n = e[i--];
91588                 y = (byte)(n >> 29);
91589                 n <<= 3;
91590                 c = 29;
91591             }
91592             else if (c < 3) {
91593                 y = (byte)(n >> 29);
91594                 n = e[i--];
91595                 c = 3 - c;
91596                 y |= (byte)(n >> (32 - c));
91597                 n <<= c;
91598                 c = 32 - c;
91599             }
91600             else {
91601                 y = (byte)((n >> 29) & 0x7);
91602                 n <<= 3;
91603                 c -= 3;
91604             }
91605 
91606             sp_4096_mont_sqr_128(r, r, m, mp);
91607             sp_4096_mont_sqr_128(r, r, m, mp);
91608             sp_4096_mont_sqr_128(r, r, m, mp);
91609 
91610             sp_4096_mont_mul_128(r, r, t[y], m, mp);
91611         }
91612 
91613         XMEMSET(&r[128], 0, sizeof(sp_digit) * 128U);
91614         sp_4096_mont_reduce_128(r, m, mp);
91615 
91616         mask = 0 - (sp_4096_cmp_128(r, m) >= 0);
91617         sp_4096_cond_sub_128(r, r, m, mask);
91618     }
91619 
91620 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
91621     if (td != NULL)
91622         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
91623 #endif
91624 
91625     return err;
91626 }
91627 #else
91628 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
91629  *
91630  * r     A single precision number that is the result of the operation.
91631  * a     A single precision number being exponentiated.
91632  * e     A single precision number that is the exponent.
91633  * bits  The number of bits in the exponent.
91634  * m     A single precision number that is the modulus.
91635  * returns  0 on success.
91636  * returns  MEMORY_E on dynamic memory allocation failure.
91637  * returns  MP_VAL when base is even or exponent is 0.
91638  */
sp_4096_mod_exp_128(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)91639 static int sp_4096_mod_exp_128(sp_digit* r, const sp_digit* a, const sp_digit* e,
91640         int bits, const sp_digit* m, int reduceA)
91641 {
91642 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
91643     sp_digit* td = NULL;
91644 #else
91645     sp_digit td[16 * 256];
91646 #endif
91647     sp_digit* t[16];
91648     sp_digit* norm = NULL;
91649     sp_digit mp = 1;
91650     sp_digit n;
91651     sp_digit mask;
91652     int i;
91653     int c;
91654     byte y;
91655     int err = MP_OKAY;
91656 
91657     if ((m[0] & 1) == 0) {
91658         err = MP_VAL;
91659     }
91660     else if (bits == 0) {
91661         err = MP_VAL;
91662     }
91663 
91664 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
91665     if (err == MP_OKAY) {
91666         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (16 * 256), NULL,
91667                                 DYNAMIC_TYPE_TMP_BUFFER);
91668         if (td == NULL)
91669             err = MEMORY_E;
91670     }
91671 #endif
91672 
91673     if (err == MP_OKAY) {
91674         norm = td;
91675         for (i=0; i<16; i++) {
91676             t[i] = td + i * 256;
91677         }
91678 
91679         sp_4096_mont_setup(m, &mp);
91680         sp_4096_mont_norm_128(norm, m);
91681 
91682         XMEMSET(t[1], 0, sizeof(sp_digit) * 128U);
91683         if (reduceA != 0) {
91684             err = sp_4096_mod_128(t[1] + 128, a, m);
91685             if (err == MP_OKAY) {
91686                 err = sp_4096_mod_128(t[1], t[1], m);
91687             }
91688         }
91689         else {
91690             XMEMCPY(t[1] + 128, a, sizeof(sp_digit) * 128);
91691             err = sp_4096_mod_128(t[1], t[1], m);
91692         }
91693     }
91694 
91695     if (err == MP_OKAY) {
91696         sp_4096_mont_sqr_128(t[ 2], t[ 1], m, mp);
91697         sp_4096_mont_mul_128(t[ 3], t[ 2], t[ 1], m, mp);
91698         sp_4096_mont_sqr_128(t[ 4], t[ 2], m, mp);
91699         sp_4096_mont_mul_128(t[ 5], t[ 3], t[ 2], m, mp);
91700         sp_4096_mont_sqr_128(t[ 6], t[ 3], m, mp);
91701         sp_4096_mont_mul_128(t[ 7], t[ 4], t[ 3], m, mp);
91702         sp_4096_mont_sqr_128(t[ 8], t[ 4], m, mp);
91703         sp_4096_mont_mul_128(t[ 9], t[ 5], t[ 4], m, mp);
91704         sp_4096_mont_sqr_128(t[10], t[ 5], m, mp);
91705         sp_4096_mont_mul_128(t[11], t[ 6], t[ 5], m, mp);
91706         sp_4096_mont_sqr_128(t[12], t[ 6], m, mp);
91707         sp_4096_mont_mul_128(t[13], t[ 7], t[ 6], m, mp);
91708         sp_4096_mont_sqr_128(t[14], t[ 7], m, mp);
91709         sp_4096_mont_mul_128(t[15], t[ 8], t[ 7], m, mp);
91710 
91711         i = (bits - 1) / 32;
91712         n = e[i--];
91713         c = bits & 31;
91714         if (c == 0) {
91715             c = 32;
91716         }
91717         c -= bits % 4;
91718         if (c == 32) {
91719             c = 28;
91720         }
91721         if (c < 0) {
91722             /* Number of bits in top word is less than number needed. */
91723             c = -c;
91724             y = (byte)(n << c);
91725             n = e[i--];
91726             y |= (byte)(n >> (64 - c));
91727             n <<= c;
91728             c = 64 - c;
91729         }
91730         else {
91731             y = (byte)(n >> c);
91732             n <<= 32 - c;
91733         }
91734         XMEMCPY(r, t[y], sizeof(sp_digit) * 128);
91735         for (; i>=0 || c>=4; ) {
91736             if (c == 0) {
91737                 n = e[i--];
91738                 y = (byte)(n >> 28);
91739                 n <<= 4;
91740                 c = 28;
91741             }
91742             else if (c < 4) {
91743                 y = (byte)(n >> 28);
91744                 n = e[i--];
91745                 c = 4 - c;
91746                 y |= (byte)(n >> (32 - c));
91747                 n <<= c;
91748                 c = 32 - c;
91749             }
91750             else {
91751                 y = (byte)((n >> 28) & 0xf);
91752                 n <<= 4;
91753                 c -= 4;
91754             }
91755 
91756             sp_4096_mont_sqr_128(r, r, m, mp);
91757             sp_4096_mont_sqr_128(r, r, m, mp);
91758             sp_4096_mont_sqr_128(r, r, m, mp);
91759             sp_4096_mont_sqr_128(r, r, m, mp);
91760 
91761             sp_4096_mont_mul_128(r, r, t[y], m, mp);
91762         }
91763 
91764         XMEMSET(&r[128], 0, sizeof(sp_digit) * 128U);
91765         sp_4096_mont_reduce_128(r, m, mp);
91766 
91767         mask = 0 - (sp_4096_cmp_128(r, m) >= 0);
91768         sp_4096_cond_sub_128(r, r, m, mask);
91769     }
91770 
91771 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
91772     if (td != NULL)
91773         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
91774 #endif
91775 
91776     return err;
91777 }
91778 #endif /* WOLFSSL_SP_SMALL */
91779 #endif /* (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
91780 
91781 #endif /* (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
91782 #ifdef WOLFSSL_HAVE_SP_RSA
91783 /* RSA public key operation.
91784  *
91785  * in      Array of bytes representing the number to exponentiate, base.
91786  * inLen   Number of bytes in base.
91787  * em      Public exponent.
91788  * mm      Modulus.
91789  * out     Buffer to hold big-endian bytes of exponentiation result.
91790  *         Must be at least 512 bytes long.
91791  * outLen  Number of bytes in result.
91792  * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
91793  * an array is too long and MEMORY_E when dynamic memory allocation fails.
91794  */
sp_RsaPublic_4096(const byte * in,word32 inLen,const mp_int * em,const mp_int * mm,byte * out,word32 * outLen)91795 int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em,
91796     const mp_int* mm, byte* out, word32* outLen)
91797 {
91798 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
91799     sp_digit* a = NULL;
91800 #else
91801     sp_digit a[128 * 5];
91802 #endif
91803     sp_digit* m = NULL;
91804     sp_digit* r = NULL;
91805     sp_digit *ah = NULL;
91806     sp_digit e[1] = {0};
91807     int err = MP_OKAY;
91808 
91809     if (*outLen < 512) {
91810         err = MP_TO_E;
91811     }
91812     else if (mp_count_bits(em) > 32 || inLen > 512 ||
91813                                                      mp_count_bits(mm) != 4096) {
91814         err = MP_READ_E;
91815     }
91816     else if (mp_iseven(mm)) {
91817         err = MP_VAL;
91818     }
91819 
91820 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
91821     if (err == MP_OKAY) {
91822         a = (sp_digit*)XMALLOC(sizeof(sp_digit) * 128 * 5, NULL,
91823                                                               DYNAMIC_TYPE_RSA);
91824         if (a == NULL)
91825             err = MEMORY_E;
91826     }
91827 #endif
91828 
91829     if (err == MP_OKAY) {
91830         r = a + 128 * 2;
91831         m = r + 128 * 2;
91832         ah = a + 128;
91833 
91834         sp_4096_from_bin(ah, 128, in, inLen);
91835 #if DIGIT_BIT >= 32
91836         e[0] = em->dp[0];
91837 #else
91838         e[0] = em->dp[0];
91839         if (em->used > 1) {
91840             e[0] |= ((sp_digit)em->dp[1]) << DIGIT_BIT;
91841         }
91842 #endif
91843         if (e[0] == 0) {
91844             err = MP_EXPTMOD_E;
91845         }
91846     }
91847     if (err == MP_OKAY) {
91848         sp_4096_from_mp(m, 128, mm);
91849 
91850         if (e[0] == 0x3) {
91851             if (err == MP_OKAY) {
91852                 sp_4096_sqr_128(r, ah);
91853                 err = sp_4096_mod_128_cond(r, r, m);
91854             }
91855             if (err == MP_OKAY) {
91856                 sp_4096_mul_128(r, ah, r);
91857                 err = sp_4096_mod_128_cond(r, r, m);
91858             }
91859         }
91860         else {
91861             int i;
91862             sp_digit mp;
91863 
91864             sp_4096_mont_setup(m, &mp);
91865 
91866             /* Convert to Montgomery form. */
91867             XMEMSET(a, 0, sizeof(sp_digit) * 128);
91868             err = sp_4096_mod_128_cond(a, a, m);
91869 
91870             if (err == MP_OKAY) {
91871                 for (i = 31; i >= 0; i--) {
91872                     if (e[0] >> i) {
91873                         break;
91874                     }
91875                 }
91876 
91877                 XMEMCPY(r, a, sizeof(sp_digit) * 128);
91878                 for (i--; i>=0; i--) {
91879                     sp_4096_mont_sqr_128(r, r, m, mp);
91880                     if (((e[0] >> i) & 1) == 1) {
91881                         sp_4096_mont_mul_128(r, r, a, m, mp);
91882                     }
91883                 }
91884                 XMEMSET(&r[128], 0, sizeof(sp_digit) * 128);
91885                 sp_4096_mont_reduce_128(r, m, mp);
91886 
91887                 for (i = 127; i > 0; i--) {
91888                     if (r[i] != m[i]) {
91889                         break;
91890                     }
91891                 }
91892                 if (r[i] >= m[i]) {
91893                     sp_4096_sub_in_place_128(r, m);
91894                 }
91895             }
91896         }
91897     }
91898 
91899     if (err == MP_OKAY) {
91900         sp_4096_to_bin_128(r, out);
91901         *outLen = 512;
91902     }
91903 
91904 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
91905     if (a != NULL)
91906         XFREE(a, NULL, DYNAMIC_TYPE_RSA);
91907 #endif
91908 
91909     return err;
91910 }
91911 
91912 #ifndef WOLFSSL_RSA_PUBLIC_ONLY
91913 /* Conditionally add a and b using the mask m.
91914  * m is -1 to add and 0 when not.
91915  *
91916  * r  A single precision number representing conditional add result.
91917  * a  A single precision number to add with.
91918  * b  A single precision number to add.
91919  * m  Mask value to apply.
91920  */
sp_4096_cond_add_64(sp_digit * r,const sp_digit * a,const sp_digit * b,sp_digit m)91921 SP_NOINLINE static sp_digit sp_4096_cond_add_64(sp_digit* r, const sp_digit* a,
91922         const sp_digit* b, sp_digit m)
91923 {
91924     __asm__ __volatile__ (
91925         "movs	r4, #0\n\t"
91926         "movs	r5, #0xff\n\t"
91927 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91928         "adds	r5, r5, #1\n\t"
91929 #else
91930         "add	r5, r5, #1\n\t"
91931 #endif
91932         "mov	r8, r5\n\t"
91933         "movs	r7, #0\n\t"
91934         "\n"
91935     "L_sp_4096_cond_add_64_words_%=:\n\t"
91936         "ldr	r6, [%[b], r7]\n\t"
91937 #ifdef WOLFSSL_KEIL
91938         "ands	r6, r6, %[m]\n\t"
91939 #elif defined(__clang__)
91940         "ands	r6, %[m]\n\t"
91941 #else
91942         "and	r6, %[m]\n\t"
91943 #endif
91944         "movs	r5, #0\n\t"
91945 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91946         "subs	r5, r5, #1\n\t"
91947 #else
91948         "sub	r5, r5, #1\n\t"
91949 #endif
91950 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91951         "adds	r5, r5, r4\n\t"
91952 #else
91953         "add	r5, r5, r4\n\t"
91954 #endif
91955         "ldr	r5, [%[a], r7]\n\t"
91956 #ifdef WOLFSSL_KEIL
91957         "adcs	r5, r5, r6\n\t"
91958 #elif defined(__clang__)
91959         "adcs	r5, r6\n\t"
91960 #else
91961         "adc	r5, r6\n\t"
91962 #endif
91963         "movs	r4, #0\n\t"
91964 #ifdef WOLFSSL_KEIL
91965         "adcs	r4, r4, r4\n\t"
91966 #elif defined(__clang__)
91967         "adcs	r4, r4\n\t"
91968 #else
91969         "adc	r4, r4\n\t"
91970 #endif
91971         "str	r5, [%[r], r7]\n\t"
91972 #if defined(__clang__) || defined(WOLFSSL_KEIL)
91973         "adds	r7, r7, #4\n\t"
91974 #else
91975         "add	r7, r7, #4\n\t"
91976 #endif
91977         "cmp	r7, r8\n\t"
91978         "blt	L_sp_4096_cond_add_64_words_%=\n\t"
91979         "movs	%[r], r4\n\t"
91980         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
91981         :
91982         : "memory", "r4", "r5", "r6", "r7", "r8"
91983     );
91984     return (uint32_t)(size_t)r;
91985 }
91986 
91987 /* RSA private key operation.
91988  *
91989  * in      Array of bytes representing the number to exponentiate, base.
91990  * inLen   Number of bytes in base.
91991  * dm      Private exponent.
91992  * pm      First prime.
91993  * qm      Second prime.
91994  * dpm     First prime's CRT exponent.
91995  * dqm     Second prime's CRT exponent.
91996  * qim     Inverse of second prime mod p.
91997  * mm      Modulus.
91998  * out     Buffer to hold big-endian bytes of exponentiation result.
91999  *         Must be at least 512 bytes long.
92000  * outLen  Number of bytes in result.
92001  * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
92002  * an array is too long and MEMORY_E when dynamic memory allocation fails.
92003  */
sp_RsaPrivate_4096(const byte * in,word32 inLen,const mp_int * dm,const mp_int * pm,const mp_int * qm,const mp_int * dpm,const mp_int * dqm,const mp_int * qim,const mp_int * mm,byte * out,word32 * outLen)92004 int sp_RsaPrivate_4096(const byte* in, word32 inLen, const mp_int* dm,
92005     const mp_int* pm, const mp_int* qm, const mp_int* dpm, const mp_int* dqm,
92006     const mp_int* qim, const mp_int* mm, byte* out, word32* outLen)
92007 {
92008 #if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
92009 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
92010     sp_digit* d = NULL;
92011 #else
92012     sp_digit  d[128 * 4];
92013 #endif
92014     sp_digit* a = NULL;
92015     sp_digit* m = NULL;
92016     sp_digit* r = NULL;
92017     int err = MP_OKAY;
92018 
92019     (void)pm;
92020     (void)qm;
92021     (void)dpm;
92022     (void)dqm;
92023     (void)qim;
92024 
92025     if (*outLen < 512U) {
92026         err = MP_TO_E;
92027     }
92028     if (err == MP_OKAY) {
92029         if (mp_count_bits(dm) > 4096) {
92030            err = MP_READ_E;
92031         }
92032         else if (inLen > 512) {
92033             err = MP_READ_E;
92034         }
92035         else if (mp_count_bits(mm) != 4096) {
92036             err = MP_READ_E;
92037         }
92038         else if (mp_iseven(mm)) {
92039             err = MP_VAL;
92040         }
92041     }
92042 
92043 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
92044     if (err == MP_OKAY) {
92045         d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 128 * 4, NULL,
92046                                                               DYNAMIC_TYPE_RSA);
92047         if (d == NULL)
92048             err = MEMORY_E;
92049     }
92050 #endif
92051 
92052     if (err == MP_OKAY) {
92053         a = d + 128;
92054         m = a + 256;
92055         r = a;
92056 
92057         sp_4096_from_bin(a, 128, in, inLen);
92058         sp_4096_from_mp(d, 128, dm);
92059         sp_4096_from_mp(m, 128, mm);
92060         err = sp_4096_mod_exp_128(r, a, d, 4096, m, 0);
92061     }
92062 
92063     if (err == MP_OKAY) {
92064         sp_4096_to_bin_128(r, out);
92065         *outLen = 512;
92066     }
92067 
92068 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
92069     if (d != NULL)
92070 #endif
92071     {
92072         /* only "a" and "r" are sensitive and need zeroized (same pointer) */
92073         if (a != NULL)
92074             ForceZero(a, sizeof(sp_digit) * 128);
92075 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
92076         XFREE(d, NULL, DYNAMIC_TYPE_RSA);
92077 #endif
92078     }
92079 
92080     return err;
92081 #else
92082 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
92083     sp_digit* a = NULL;
92084 #else
92085     sp_digit a[64 * 11];
92086 #endif
92087     sp_digit* p = NULL;
92088     sp_digit* q = NULL;
92089     sp_digit* dp = NULL;
92090     sp_digit* tmpa = NULL;
92091     sp_digit* tmpb = NULL;
92092     sp_digit* r = NULL;
92093     sp_digit* qi = NULL;
92094     sp_digit* dq = NULL;
92095     sp_digit c;
92096     int err = MP_OKAY;
92097 
92098     (void)dm;
92099     (void)mm;
92100 
92101     if (*outLen < 512) {
92102         err = MP_TO_E;
92103     }
92104     else if (inLen > 512 || mp_count_bits(mm) != 4096) {
92105         err = MP_READ_E;
92106     }
92107     else if (mp_iseven(mm)) {
92108         err = MP_VAL;
92109     }
92110 
92111 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
92112     if (err == MP_OKAY) {
92113         a = (sp_digit*)XMALLOC(sizeof(sp_digit) * 64 * 11, NULL,
92114                                                               DYNAMIC_TYPE_RSA);
92115         if (a == NULL)
92116             err = MEMORY_E;
92117     }
92118 #endif
92119 
92120     if (err == MP_OKAY) {
92121         p = a + 128 * 2;
92122         q = p + 64;
92123         qi = dq = dp = q + 64;
92124         tmpa = qi + 64;
92125         tmpb = tmpa + 128;
92126         r = a;
92127 
92128         sp_4096_from_bin(a, 128, in, inLen);
92129         sp_4096_from_mp(p, 64, pm);
92130         sp_4096_from_mp(q, 64, qm);
92131         sp_4096_from_mp(dp, 64, dpm);
92132 
92133         err = sp_2048_mod_exp_64(tmpa, a, dp, 2048, p, 1);
92134     }
92135     if (err == MP_OKAY) {
92136         sp_4096_from_mp(dq, 64, dqm);
92137         err = sp_2048_mod_exp_64(tmpb, a, dq, 2048, q, 1);
92138     }
92139 
92140     if (err == MP_OKAY) {
92141         c = sp_2048_sub_in_place_64(tmpa, tmpb);
92142         c += sp_4096_cond_add_64(tmpa, tmpa, p, c);
92143         sp_4096_cond_add_64(tmpa, tmpa, p, c);
92144 
92145         sp_2048_from_mp(qi, 64, qim);
92146         sp_2048_mul_64(tmpa, tmpa, qi);
92147         err = sp_2048_mod_64(tmpa, tmpa, p);
92148     }
92149 
92150     if (err == MP_OKAY) {
92151         sp_2048_mul_64(tmpa, q, tmpa);
92152         XMEMSET(&tmpb[64], 0, sizeof(sp_digit) * 64);
92153         sp_4096_add_128(r, tmpb, tmpa);
92154 
92155         sp_4096_to_bin_128(r, out);
92156         *outLen = 512;
92157     }
92158 
92159 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
92160     if (a != NULL)
92161 #endif
92162     {
92163         ForceZero(a, sizeof(sp_digit) * 64 * 11);
92164     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
92165         XFREE(a, NULL, DYNAMIC_TYPE_RSA);
92166     #endif
92167     }
92168 #endif /* SP_RSA_PRIVATE_EXP_D || RSA_LOW_MEM */
92169     return err;
92170 }
92171 #endif /* WOLFSSL_RSA_PUBLIC_ONLY */
92172 #endif /* WOLFSSL_HAVE_SP_RSA */
92173 #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
92174                                               !defined(WOLFSSL_RSA_PUBLIC_ONLY))
92175 /* Convert an array of sp_digit to an mp_int.
92176  *
92177  * a  A single precision integer.
92178  * r  A multi-precision integer.
92179  */
sp_4096_to_mp(const sp_digit * a,mp_int * r)92180 static int sp_4096_to_mp(const sp_digit* a, mp_int* r)
92181 {
92182     int err;
92183 
92184     err = mp_grow(r, (4096 + DIGIT_BIT - 1) / DIGIT_BIT);
92185     if (err == MP_OKAY) { /*lint !e774 case where err is always MP_OKAY*/
92186 #if DIGIT_BIT == 32
92187         XMEMCPY(r->dp, a, sizeof(sp_digit) * 128);
92188         r->used = 128;
92189         mp_clamp(r);
92190 #elif DIGIT_BIT < 32
92191         int i;
92192         int j = 0;
92193         int s = 0;
92194 
92195         r->dp[0] = 0;
92196         for (i = 0; i < 128; i++) {
92197             r->dp[j] |= (mp_digit)(a[i] << s);
92198             r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
92199             s = DIGIT_BIT - s;
92200             r->dp[++j] = (mp_digit)(a[i] >> s);
92201             while (s + DIGIT_BIT <= 32) {
92202                 s += DIGIT_BIT;
92203                 r->dp[j++] &= ((sp_digit)1 << DIGIT_BIT) - 1;
92204                 if (s == SP_WORD_SIZE) {
92205                     r->dp[j] = 0;
92206                 }
92207                 else {
92208                     r->dp[j] = (mp_digit)(a[i] >> s);
92209                 }
92210             }
92211             s = 32 - s;
92212         }
92213         r->used = (4096 + DIGIT_BIT - 1) / DIGIT_BIT;
92214         mp_clamp(r);
92215 #else
92216         int i;
92217         int j = 0;
92218         int s = 0;
92219 
92220         r->dp[0] = 0;
92221         for (i = 0; i < 128; i++) {
92222             r->dp[j] |= ((mp_digit)a[i]) << s;
92223             if (s + 32 >= DIGIT_BIT) {
92224     #if DIGIT_BIT != 32 && DIGIT_BIT != 64
92225                 r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
92226     #endif
92227                 s = DIGIT_BIT - s;
92228                 r->dp[++j] = a[i] >> s;
92229                 s = 32 - s;
92230             }
92231             else {
92232                 s += 32;
92233             }
92234         }
92235         r->used = (4096 + DIGIT_BIT - 1) / DIGIT_BIT;
92236         mp_clamp(r);
92237 #endif
92238     }
92239 
92240     return err;
92241 }
92242 
92243 /* Perform the modular exponentiation for Diffie-Hellman.
92244  *
92245  * base  Base. MP integer.
92246  * exp   Exponent. MP integer.
92247  * mod   Modulus. MP integer.
92248  * res   Result. MP integer.
92249  * returns 0 on success, MP_READ_E if there are too many bytes in an array
92250  * and MEMORY_E if memory allocation fails.
92251  */
sp_ModExp_4096(const mp_int * base,const mp_int * exp,const mp_int * mod,mp_int * res)92252 int sp_ModExp_4096(const mp_int* base, const mp_int* exp, const mp_int* mod,
92253     mp_int* res)
92254 {
92255     int err = MP_OKAY;
92256     sp_digit b[256];
92257     sp_digit e[128];
92258     sp_digit m[128];
92259     sp_digit* r = b;
92260     int expBits = mp_count_bits(exp);
92261 
92262     if (mp_count_bits(base) > 4096) {
92263         err = MP_READ_E;
92264     }
92265     else if (expBits > 4096) {
92266         err = MP_READ_E;
92267     }
92268     else if (mp_count_bits(mod) != 4096) {
92269         err = MP_READ_E;
92270     }
92271     else if (mp_iseven(mod)) {
92272         err = MP_VAL;
92273     }
92274 
92275     if (err == MP_OKAY) {
92276         sp_4096_from_mp(b, 128, base);
92277         sp_4096_from_mp(e, 128, exp);
92278         sp_4096_from_mp(m, 128, mod);
92279 
92280         err = sp_4096_mod_exp_128(r, b, e, expBits, m, 0);
92281     }
92282 
92283     if (err == MP_OKAY) {
92284         err = sp_4096_to_mp(r, res);
92285     }
92286 
92287     XMEMSET(e, 0, sizeof(e));
92288 
92289     return err;
92290 }
92291 
92292 #ifdef WOLFSSL_HAVE_SP_DH
92293 
92294 #ifdef HAVE_FFDHE_4096
92295 /* Lefy shift a by n bits into r. (r = a << n)
92296  *
92297  * r  A single precision integer.
92298  * a  A single precision integer.
92299  * n  Integer representing number of bits to shift.
92300  */
sp_4096_lshift_128(sp_digit * r,const sp_digit * a,byte n)92301 static void sp_4096_lshift_128(sp_digit* r, const sp_digit* a, byte n)
92302 {
92303     __asm__ __volatile__ (
92304         "movs	r7, #31\n\t"
92305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92306         "subs	r7, r7, %[n]\n\t"
92307 #else
92308         "sub	r7, r7, %[n]\n\t"
92309 #endif
92310 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92311         "adds	%[a], %[a], #0xff\n\t"
92312 #else
92313         "add	%[a], %[a], #0xff\n\t"
92314 #endif
92315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92316         "adds	%[r], %[r], #0xff\n\t"
92317 #else
92318         "add	%[r], %[r], #0xff\n\t"
92319 #endif
92320 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92321         "adds	%[a], %[a], #0xc1\n\t"
92322 #else
92323         "add	%[a], %[a], #0xc1\n\t"
92324 #endif
92325 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92326         "adds	%[r], %[r], #0xc1\n\t"
92327 #else
92328         "add	%[r], %[r], #0xc1\n\t"
92329 #endif
92330         "ldr	r4, [%[a], #60]\n\t"
92331 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92332         "lsrs	r5, r4, #1\n\t"
92333 #else
92334         "lsr	r5, r4, #1\n\t"
92335 #endif
92336 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92337         "lsls	r4, r4, %[n]\n\t"
92338 #else
92339         "lsl	r4, r4, %[n]\n\t"
92340 #endif
92341 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92342         "lsrs	r5, r5, r7\n\t"
92343 #else
92344         "lsr	r5, r5, r7\n\t"
92345 #endif
92346         "ldr	r3, [%[a], #56]\n\t"
92347         "str	r5, [%[r], #64]\n\t"
92348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92349         "lsrs	r6, r3, #1\n\t"
92350 #else
92351         "lsr	r6, r3, #1\n\t"
92352 #endif
92353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92354         "lsls	r3, r3, %[n]\n\t"
92355 #else
92356         "lsl	r3, r3, %[n]\n\t"
92357 #endif
92358 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92359         "lsrs	r6, r6, r7\n\t"
92360 #else
92361         "lsr	r6, r6, r7\n\t"
92362 #endif
92363 #ifdef WOLFSSL_KEIL
92364         "orrs	r4, r4, r6\n\t"
92365 #elif defined(__clang__)
92366         "orrs	r4, r6\n\t"
92367 #else
92368         "orr	r4, r6\n\t"
92369 #endif
92370         "ldr	r5, [%[a], #52]\n\t"
92371         "str	r4, [%[r], #60]\n\t"
92372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92373         "lsrs	r6, r5, #1\n\t"
92374 #else
92375         "lsr	r6, r5, #1\n\t"
92376 #endif
92377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92378         "lsls	r5, r5, %[n]\n\t"
92379 #else
92380         "lsl	r5, r5, %[n]\n\t"
92381 #endif
92382 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92383         "lsrs	r6, r6, r7\n\t"
92384 #else
92385         "lsr	r6, r6, r7\n\t"
92386 #endif
92387 #ifdef WOLFSSL_KEIL
92388         "orrs	r3, r3, r6\n\t"
92389 #elif defined(__clang__)
92390         "orrs	r3, r6\n\t"
92391 #else
92392         "orr	r3, r6\n\t"
92393 #endif
92394         "ldr	r4, [%[a], #48]\n\t"
92395         "str	r3, [%[r], #56]\n\t"
92396 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92397         "lsrs	r6, r4, #1\n\t"
92398 #else
92399         "lsr	r6, r4, #1\n\t"
92400 #endif
92401 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92402         "lsls	r4, r4, %[n]\n\t"
92403 #else
92404         "lsl	r4, r4, %[n]\n\t"
92405 #endif
92406 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92407         "lsrs	r6, r6, r7\n\t"
92408 #else
92409         "lsr	r6, r6, r7\n\t"
92410 #endif
92411 #ifdef WOLFSSL_KEIL
92412         "orrs	r5, r5, r6\n\t"
92413 #elif defined(__clang__)
92414         "orrs	r5, r6\n\t"
92415 #else
92416         "orr	r5, r6\n\t"
92417 #endif
92418         "ldr	r3, [%[a], #44]\n\t"
92419         "str	r5, [%[r], #52]\n\t"
92420 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92421         "lsrs	r6, r3, #1\n\t"
92422 #else
92423         "lsr	r6, r3, #1\n\t"
92424 #endif
92425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92426         "lsls	r3, r3, %[n]\n\t"
92427 #else
92428         "lsl	r3, r3, %[n]\n\t"
92429 #endif
92430 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92431         "lsrs	r6, r6, r7\n\t"
92432 #else
92433         "lsr	r6, r6, r7\n\t"
92434 #endif
92435 #ifdef WOLFSSL_KEIL
92436         "orrs	r4, r4, r6\n\t"
92437 #elif defined(__clang__)
92438         "orrs	r4, r6\n\t"
92439 #else
92440         "orr	r4, r6\n\t"
92441 #endif
92442         "ldr	r5, [%[a], #40]\n\t"
92443         "str	r4, [%[r], #48]\n\t"
92444 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92445         "lsrs	r6, r5, #1\n\t"
92446 #else
92447         "lsr	r6, r5, #1\n\t"
92448 #endif
92449 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92450         "lsls	r5, r5, %[n]\n\t"
92451 #else
92452         "lsl	r5, r5, %[n]\n\t"
92453 #endif
92454 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92455         "lsrs	r6, r6, r7\n\t"
92456 #else
92457         "lsr	r6, r6, r7\n\t"
92458 #endif
92459 #ifdef WOLFSSL_KEIL
92460         "orrs	r3, r3, r6\n\t"
92461 #elif defined(__clang__)
92462         "orrs	r3, r6\n\t"
92463 #else
92464         "orr	r3, r6\n\t"
92465 #endif
92466         "ldr	r4, [%[a], #36]\n\t"
92467         "str	r3, [%[r], #44]\n\t"
92468 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92469         "lsrs	r6, r4, #1\n\t"
92470 #else
92471         "lsr	r6, r4, #1\n\t"
92472 #endif
92473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92474         "lsls	r4, r4, %[n]\n\t"
92475 #else
92476         "lsl	r4, r4, %[n]\n\t"
92477 #endif
92478 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92479         "lsrs	r6, r6, r7\n\t"
92480 #else
92481         "lsr	r6, r6, r7\n\t"
92482 #endif
92483 #ifdef WOLFSSL_KEIL
92484         "orrs	r5, r5, r6\n\t"
92485 #elif defined(__clang__)
92486         "orrs	r5, r6\n\t"
92487 #else
92488         "orr	r5, r6\n\t"
92489 #endif
92490         "ldr	r3, [%[a], #32]\n\t"
92491         "str	r5, [%[r], #40]\n\t"
92492 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92493         "lsrs	r6, r3, #1\n\t"
92494 #else
92495         "lsr	r6, r3, #1\n\t"
92496 #endif
92497 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92498         "lsls	r3, r3, %[n]\n\t"
92499 #else
92500         "lsl	r3, r3, %[n]\n\t"
92501 #endif
92502 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92503         "lsrs	r6, r6, r7\n\t"
92504 #else
92505         "lsr	r6, r6, r7\n\t"
92506 #endif
92507 #ifdef WOLFSSL_KEIL
92508         "orrs	r4, r4, r6\n\t"
92509 #elif defined(__clang__)
92510         "orrs	r4, r6\n\t"
92511 #else
92512         "orr	r4, r6\n\t"
92513 #endif
92514         "ldr	r5, [%[a], #28]\n\t"
92515         "str	r4, [%[r], #36]\n\t"
92516 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92517         "lsrs	r6, r5, #1\n\t"
92518 #else
92519         "lsr	r6, r5, #1\n\t"
92520 #endif
92521 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92522         "lsls	r5, r5, %[n]\n\t"
92523 #else
92524         "lsl	r5, r5, %[n]\n\t"
92525 #endif
92526 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92527         "lsrs	r6, r6, r7\n\t"
92528 #else
92529         "lsr	r6, r6, r7\n\t"
92530 #endif
92531 #ifdef WOLFSSL_KEIL
92532         "orrs	r3, r3, r6\n\t"
92533 #elif defined(__clang__)
92534         "orrs	r3, r6\n\t"
92535 #else
92536         "orr	r3, r6\n\t"
92537 #endif
92538         "ldr	r4, [%[a], #24]\n\t"
92539         "str	r3, [%[r], #32]\n\t"
92540 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92541         "lsrs	r6, r4, #1\n\t"
92542 #else
92543         "lsr	r6, r4, #1\n\t"
92544 #endif
92545 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92546         "lsls	r4, r4, %[n]\n\t"
92547 #else
92548         "lsl	r4, r4, %[n]\n\t"
92549 #endif
92550 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92551         "lsrs	r6, r6, r7\n\t"
92552 #else
92553         "lsr	r6, r6, r7\n\t"
92554 #endif
92555 #ifdef WOLFSSL_KEIL
92556         "orrs	r5, r5, r6\n\t"
92557 #elif defined(__clang__)
92558         "orrs	r5, r6\n\t"
92559 #else
92560         "orr	r5, r6\n\t"
92561 #endif
92562         "ldr	r3, [%[a], #20]\n\t"
92563         "str	r5, [%[r], #28]\n\t"
92564 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92565         "lsrs	r6, r3, #1\n\t"
92566 #else
92567         "lsr	r6, r3, #1\n\t"
92568 #endif
92569 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92570         "lsls	r3, r3, %[n]\n\t"
92571 #else
92572         "lsl	r3, r3, %[n]\n\t"
92573 #endif
92574 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92575         "lsrs	r6, r6, r7\n\t"
92576 #else
92577         "lsr	r6, r6, r7\n\t"
92578 #endif
92579 #ifdef WOLFSSL_KEIL
92580         "orrs	r4, r4, r6\n\t"
92581 #elif defined(__clang__)
92582         "orrs	r4, r6\n\t"
92583 #else
92584         "orr	r4, r6\n\t"
92585 #endif
92586         "ldr	r5, [%[a], #16]\n\t"
92587         "str	r4, [%[r], #24]\n\t"
92588 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92589         "lsrs	r6, r5, #1\n\t"
92590 #else
92591         "lsr	r6, r5, #1\n\t"
92592 #endif
92593 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92594         "lsls	r5, r5, %[n]\n\t"
92595 #else
92596         "lsl	r5, r5, %[n]\n\t"
92597 #endif
92598 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92599         "lsrs	r6, r6, r7\n\t"
92600 #else
92601         "lsr	r6, r6, r7\n\t"
92602 #endif
92603 #ifdef WOLFSSL_KEIL
92604         "orrs	r3, r3, r6\n\t"
92605 #elif defined(__clang__)
92606         "orrs	r3, r6\n\t"
92607 #else
92608         "orr	r3, r6\n\t"
92609 #endif
92610         "ldr	r4, [%[a], #12]\n\t"
92611         "str	r3, [%[r], #20]\n\t"
92612 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92613         "lsrs	r6, r4, #1\n\t"
92614 #else
92615         "lsr	r6, r4, #1\n\t"
92616 #endif
92617 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92618         "lsls	r4, r4, %[n]\n\t"
92619 #else
92620         "lsl	r4, r4, %[n]\n\t"
92621 #endif
92622 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92623         "lsrs	r6, r6, r7\n\t"
92624 #else
92625         "lsr	r6, r6, r7\n\t"
92626 #endif
92627 #ifdef WOLFSSL_KEIL
92628         "orrs	r5, r5, r6\n\t"
92629 #elif defined(__clang__)
92630         "orrs	r5, r6\n\t"
92631 #else
92632         "orr	r5, r6\n\t"
92633 #endif
92634         "ldr	r3, [%[a], #8]\n\t"
92635         "str	r5, [%[r], #16]\n\t"
92636 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92637         "lsrs	r6, r3, #1\n\t"
92638 #else
92639         "lsr	r6, r3, #1\n\t"
92640 #endif
92641 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92642         "lsls	r3, r3, %[n]\n\t"
92643 #else
92644         "lsl	r3, r3, %[n]\n\t"
92645 #endif
92646 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92647         "lsrs	r6, r6, r7\n\t"
92648 #else
92649         "lsr	r6, r6, r7\n\t"
92650 #endif
92651 #ifdef WOLFSSL_KEIL
92652         "orrs	r4, r4, r6\n\t"
92653 #elif defined(__clang__)
92654         "orrs	r4, r6\n\t"
92655 #else
92656         "orr	r4, r6\n\t"
92657 #endif
92658         "ldr	r5, [%[a], #4]\n\t"
92659         "str	r4, [%[r], #12]\n\t"
92660 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92661         "lsrs	r6, r5, #1\n\t"
92662 #else
92663         "lsr	r6, r5, #1\n\t"
92664 #endif
92665 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92666         "lsls	r5, r5, %[n]\n\t"
92667 #else
92668         "lsl	r5, r5, %[n]\n\t"
92669 #endif
92670 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92671         "lsrs	r6, r6, r7\n\t"
92672 #else
92673         "lsr	r6, r6, r7\n\t"
92674 #endif
92675 #ifdef WOLFSSL_KEIL
92676         "orrs	r3, r3, r6\n\t"
92677 #elif defined(__clang__)
92678         "orrs	r3, r6\n\t"
92679 #else
92680         "orr	r3, r6\n\t"
92681 #endif
92682         "ldr	r4, [%[a]]\n\t"
92683         "str	r3, [%[r], #8]\n\t"
92684 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92685         "lsrs	r6, r4, #1\n\t"
92686 #else
92687         "lsr	r6, r4, #1\n\t"
92688 #endif
92689 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92690         "lsls	r4, r4, %[n]\n\t"
92691 #else
92692         "lsl	r4, r4, %[n]\n\t"
92693 #endif
92694 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92695         "lsrs	r6, r6, r7\n\t"
92696 #else
92697         "lsr	r6, r6, r7\n\t"
92698 #endif
92699 #ifdef WOLFSSL_KEIL
92700         "orrs	r5, r5, r6\n\t"
92701 #elif defined(__clang__)
92702         "orrs	r5, r6\n\t"
92703 #else
92704         "orr	r5, r6\n\t"
92705 #endif
92706 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92707         "subs	%[a], %[a], #0x40\n\t"
92708 #else
92709         "sub	%[a], %[a], #0x40\n\t"
92710 #endif
92711 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92712         "subs	%[r], %[r], #0x40\n\t"
92713 #else
92714         "sub	%[r], %[r], #0x40\n\t"
92715 #endif
92716         "ldr	r3, [%[a], #60]\n\t"
92717         "str	r5, [%[r], #68]\n\t"
92718 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92719         "lsrs	r6, r3, #1\n\t"
92720 #else
92721         "lsr	r6, r3, #1\n\t"
92722 #endif
92723 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92724         "lsls	r3, r3, %[n]\n\t"
92725 #else
92726         "lsl	r3, r3, %[n]\n\t"
92727 #endif
92728 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92729         "lsrs	r6, r6, r7\n\t"
92730 #else
92731         "lsr	r6, r6, r7\n\t"
92732 #endif
92733 #ifdef WOLFSSL_KEIL
92734         "orrs	r4, r4, r6\n\t"
92735 #elif defined(__clang__)
92736         "orrs	r4, r6\n\t"
92737 #else
92738         "orr	r4, r6\n\t"
92739 #endif
92740         "ldr	r5, [%[a], #56]\n\t"
92741         "str	r4, [%[r], #64]\n\t"
92742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92743         "lsrs	r6, r5, #1\n\t"
92744 #else
92745         "lsr	r6, r5, #1\n\t"
92746 #endif
92747 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92748         "lsls	r5, r5, %[n]\n\t"
92749 #else
92750         "lsl	r5, r5, %[n]\n\t"
92751 #endif
92752 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92753         "lsrs	r6, r6, r7\n\t"
92754 #else
92755         "lsr	r6, r6, r7\n\t"
92756 #endif
92757 #ifdef WOLFSSL_KEIL
92758         "orrs	r3, r3, r6\n\t"
92759 #elif defined(__clang__)
92760         "orrs	r3, r6\n\t"
92761 #else
92762         "orr	r3, r6\n\t"
92763 #endif
92764         "ldr	r4, [%[a], #52]\n\t"
92765         "str	r3, [%[r], #60]\n\t"
92766 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92767         "lsrs	r6, r4, #1\n\t"
92768 #else
92769         "lsr	r6, r4, #1\n\t"
92770 #endif
92771 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92772         "lsls	r4, r4, %[n]\n\t"
92773 #else
92774         "lsl	r4, r4, %[n]\n\t"
92775 #endif
92776 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92777         "lsrs	r6, r6, r7\n\t"
92778 #else
92779         "lsr	r6, r6, r7\n\t"
92780 #endif
92781 #ifdef WOLFSSL_KEIL
92782         "orrs	r5, r5, r6\n\t"
92783 #elif defined(__clang__)
92784         "orrs	r5, r6\n\t"
92785 #else
92786         "orr	r5, r6\n\t"
92787 #endif
92788         "ldr	r3, [%[a], #48]\n\t"
92789         "str	r5, [%[r], #56]\n\t"
92790 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92791         "lsrs	r6, r3, #1\n\t"
92792 #else
92793         "lsr	r6, r3, #1\n\t"
92794 #endif
92795 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92796         "lsls	r3, r3, %[n]\n\t"
92797 #else
92798         "lsl	r3, r3, %[n]\n\t"
92799 #endif
92800 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92801         "lsrs	r6, r6, r7\n\t"
92802 #else
92803         "lsr	r6, r6, r7\n\t"
92804 #endif
92805 #ifdef WOLFSSL_KEIL
92806         "orrs	r4, r4, r6\n\t"
92807 #elif defined(__clang__)
92808         "orrs	r4, r6\n\t"
92809 #else
92810         "orr	r4, r6\n\t"
92811 #endif
92812         "ldr	r5, [%[a], #44]\n\t"
92813         "str	r4, [%[r], #52]\n\t"
92814 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92815         "lsrs	r6, r5, #1\n\t"
92816 #else
92817         "lsr	r6, r5, #1\n\t"
92818 #endif
92819 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92820         "lsls	r5, r5, %[n]\n\t"
92821 #else
92822         "lsl	r5, r5, %[n]\n\t"
92823 #endif
92824 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92825         "lsrs	r6, r6, r7\n\t"
92826 #else
92827         "lsr	r6, r6, r7\n\t"
92828 #endif
92829 #ifdef WOLFSSL_KEIL
92830         "orrs	r3, r3, r6\n\t"
92831 #elif defined(__clang__)
92832         "orrs	r3, r6\n\t"
92833 #else
92834         "orr	r3, r6\n\t"
92835 #endif
92836         "ldr	r4, [%[a], #40]\n\t"
92837         "str	r3, [%[r], #48]\n\t"
92838 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92839         "lsrs	r6, r4, #1\n\t"
92840 #else
92841         "lsr	r6, r4, #1\n\t"
92842 #endif
92843 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92844         "lsls	r4, r4, %[n]\n\t"
92845 #else
92846         "lsl	r4, r4, %[n]\n\t"
92847 #endif
92848 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92849         "lsrs	r6, r6, r7\n\t"
92850 #else
92851         "lsr	r6, r6, r7\n\t"
92852 #endif
92853 #ifdef WOLFSSL_KEIL
92854         "orrs	r5, r5, r6\n\t"
92855 #elif defined(__clang__)
92856         "orrs	r5, r6\n\t"
92857 #else
92858         "orr	r5, r6\n\t"
92859 #endif
92860         "ldr	r3, [%[a], #36]\n\t"
92861         "str	r5, [%[r], #44]\n\t"
92862 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92863         "lsrs	r6, r3, #1\n\t"
92864 #else
92865         "lsr	r6, r3, #1\n\t"
92866 #endif
92867 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92868         "lsls	r3, r3, %[n]\n\t"
92869 #else
92870         "lsl	r3, r3, %[n]\n\t"
92871 #endif
92872 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92873         "lsrs	r6, r6, r7\n\t"
92874 #else
92875         "lsr	r6, r6, r7\n\t"
92876 #endif
92877 #ifdef WOLFSSL_KEIL
92878         "orrs	r4, r4, r6\n\t"
92879 #elif defined(__clang__)
92880         "orrs	r4, r6\n\t"
92881 #else
92882         "orr	r4, r6\n\t"
92883 #endif
92884         "ldr	r5, [%[a], #32]\n\t"
92885         "str	r4, [%[r], #40]\n\t"
92886 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92887         "lsrs	r6, r5, #1\n\t"
92888 #else
92889         "lsr	r6, r5, #1\n\t"
92890 #endif
92891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92892         "lsls	r5, r5, %[n]\n\t"
92893 #else
92894         "lsl	r5, r5, %[n]\n\t"
92895 #endif
92896 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92897         "lsrs	r6, r6, r7\n\t"
92898 #else
92899         "lsr	r6, r6, r7\n\t"
92900 #endif
92901 #ifdef WOLFSSL_KEIL
92902         "orrs	r3, r3, r6\n\t"
92903 #elif defined(__clang__)
92904         "orrs	r3, r6\n\t"
92905 #else
92906         "orr	r3, r6\n\t"
92907 #endif
92908         "ldr	r4, [%[a], #28]\n\t"
92909         "str	r3, [%[r], #36]\n\t"
92910 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92911         "lsrs	r6, r4, #1\n\t"
92912 #else
92913         "lsr	r6, r4, #1\n\t"
92914 #endif
92915 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92916         "lsls	r4, r4, %[n]\n\t"
92917 #else
92918         "lsl	r4, r4, %[n]\n\t"
92919 #endif
92920 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92921         "lsrs	r6, r6, r7\n\t"
92922 #else
92923         "lsr	r6, r6, r7\n\t"
92924 #endif
92925 #ifdef WOLFSSL_KEIL
92926         "orrs	r5, r5, r6\n\t"
92927 #elif defined(__clang__)
92928         "orrs	r5, r6\n\t"
92929 #else
92930         "orr	r5, r6\n\t"
92931 #endif
92932         "ldr	r3, [%[a], #24]\n\t"
92933         "str	r5, [%[r], #32]\n\t"
92934 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92935         "lsrs	r6, r3, #1\n\t"
92936 #else
92937         "lsr	r6, r3, #1\n\t"
92938 #endif
92939 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92940         "lsls	r3, r3, %[n]\n\t"
92941 #else
92942         "lsl	r3, r3, %[n]\n\t"
92943 #endif
92944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92945         "lsrs	r6, r6, r7\n\t"
92946 #else
92947         "lsr	r6, r6, r7\n\t"
92948 #endif
92949 #ifdef WOLFSSL_KEIL
92950         "orrs	r4, r4, r6\n\t"
92951 #elif defined(__clang__)
92952         "orrs	r4, r6\n\t"
92953 #else
92954         "orr	r4, r6\n\t"
92955 #endif
92956         "ldr	r5, [%[a], #20]\n\t"
92957         "str	r4, [%[r], #28]\n\t"
92958 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92959         "lsrs	r6, r5, #1\n\t"
92960 #else
92961         "lsr	r6, r5, #1\n\t"
92962 #endif
92963 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92964         "lsls	r5, r5, %[n]\n\t"
92965 #else
92966         "lsl	r5, r5, %[n]\n\t"
92967 #endif
92968 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92969         "lsrs	r6, r6, r7\n\t"
92970 #else
92971         "lsr	r6, r6, r7\n\t"
92972 #endif
92973 #ifdef WOLFSSL_KEIL
92974         "orrs	r3, r3, r6\n\t"
92975 #elif defined(__clang__)
92976         "orrs	r3, r6\n\t"
92977 #else
92978         "orr	r3, r6\n\t"
92979 #endif
92980         "ldr	r4, [%[a], #16]\n\t"
92981         "str	r3, [%[r], #24]\n\t"
92982 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92983         "lsrs	r6, r4, #1\n\t"
92984 #else
92985         "lsr	r6, r4, #1\n\t"
92986 #endif
92987 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92988         "lsls	r4, r4, %[n]\n\t"
92989 #else
92990         "lsl	r4, r4, %[n]\n\t"
92991 #endif
92992 #if defined(__clang__) || defined(WOLFSSL_KEIL)
92993         "lsrs	r6, r6, r7\n\t"
92994 #else
92995         "lsr	r6, r6, r7\n\t"
92996 #endif
92997 #ifdef WOLFSSL_KEIL
92998         "orrs	r5, r5, r6\n\t"
92999 #elif defined(__clang__)
93000         "orrs	r5, r6\n\t"
93001 #else
93002         "orr	r5, r6\n\t"
93003 #endif
93004         "ldr	r3, [%[a], #12]\n\t"
93005         "str	r5, [%[r], #20]\n\t"
93006 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93007         "lsrs	r6, r3, #1\n\t"
93008 #else
93009         "lsr	r6, r3, #1\n\t"
93010 #endif
93011 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93012         "lsls	r3, r3, %[n]\n\t"
93013 #else
93014         "lsl	r3, r3, %[n]\n\t"
93015 #endif
93016 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93017         "lsrs	r6, r6, r7\n\t"
93018 #else
93019         "lsr	r6, r6, r7\n\t"
93020 #endif
93021 #ifdef WOLFSSL_KEIL
93022         "orrs	r4, r4, r6\n\t"
93023 #elif defined(__clang__)
93024         "orrs	r4, r6\n\t"
93025 #else
93026         "orr	r4, r6\n\t"
93027 #endif
93028         "ldr	r5, [%[a], #8]\n\t"
93029         "str	r4, [%[r], #16]\n\t"
93030 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93031         "lsrs	r6, r5, #1\n\t"
93032 #else
93033         "lsr	r6, r5, #1\n\t"
93034 #endif
93035 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93036         "lsls	r5, r5, %[n]\n\t"
93037 #else
93038         "lsl	r5, r5, %[n]\n\t"
93039 #endif
93040 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93041         "lsrs	r6, r6, r7\n\t"
93042 #else
93043         "lsr	r6, r6, r7\n\t"
93044 #endif
93045 #ifdef WOLFSSL_KEIL
93046         "orrs	r3, r3, r6\n\t"
93047 #elif defined(__clang__)
93048         "orrs	r3, r6\n\t"
93049 #else
93050         "orr	r3, r6\n\t"
93051 #endif
93052         "ldr	r4, [%[a], #4]\n\t"
93053         "str	r3, [%[r], #12]\n\t"
93054 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93055         "lsrs	r6, r4, #1\n\t"
93056 #else
93057         "lsr	r6, r4, #1\n\t"
93058 #endif
93059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93060         "lsls	r4, r4, %[n]\n\t"
93061 #else
93062         "lsl	r4, r4, %[n]\n\t"
93063 #endif
93064 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93065         "lsrs	r6, r6, r7\n\t"
93066 #else
93067         "lsr	r6, r6, r7\n\t"
93068 #endif
93069 #ifdef WOLFSSL_KEIL
93070         "orrs	r5, r5, r6\n\t"
93071 #elif defined(__clang__)
93072         "orrs	r5, r6\n\t"
93073 #else
93074         "orr	r5, r6\n\t"
93075 #endif
93076         "ldr	r3, [%[a]]\n\t"
93077         "str	r5, [%[r], #8]\n\t"
93078 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93079         "lsrs	r6, r3, #1\n\t"
93080 #else
93081         "lsr	r6, r3, #1\n\t"
93082 #endif
93083 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93084         "lsls	r3, r3, %[n]\n\t"
93085 #else
93086         "lsl	r3, r3, %[n]\n\t"
93087 #endif
93088 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93089         "lsrs	r6, r6, r7\n\t"
93090 #else
93091         "lsr	r6, r6, r7\n\t"
93092 #endif
93093 #ifdef WOLFSSL_KEIL
93094         "orrs	r4, r4, r6\n\t"
93095 #elif defined(__clang__)
93096         "orrs	r4, r6\n\t"
93097 #else
93098         "orr	r4, r6\n\t"
93099 #endif
93100 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93101         "subs	%[a], %[a], #0x40\n\t"
93102 #else
93103         "sub	%[a], %[a], #0x40\n\t"
93104 #endif
93105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93106         "subs	%[r], %[r], #0x40\n\t"
93107 #else
93108         "sub	%[r], %[r], #0x40\n\t"
93109 #endif
93110         "ldr	r5, [%[a], #60]\n\t"
93111         "str	r4, [%[r], #68]\n\t"
93112 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93113         "lsrs	r6, r5, #1\n\t"
93114 #else
93115         "lsr	r6, r5, #1\n\t"
93116 #endif
93117 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93118         "lsls	r5, r5, %[n]\n\t"
93119 #else
93120         "lsl	r5, r5, %[n]\n\t"
93121 #endif
93122 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93123         "lsrs	r6, r6, r7\n\t"
93124 #else
93125         "lsr	r6, r6, r7\n\t"
93126 #endif
93127 #ifdef WOLFSSL_KEIL
93128         "orrs	r3, r3, r6\n\t"
93129 #elif defined(__clang__)
93130         "orrs	r3, r6\n\t"
93131 #else
93132         "orr	r3, r6\n\t"
93133 #endif
93134         "ldr	r4, [%[a], #56]\n\t"
93135         "str	r3, [%[r], #64]\n\t"
93136 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93137         "lsrs	r6, r4, #1\n\t"
93138 #else
93139         "lsr	r6, r4, #1\n\t"
93140 #endif
93141 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93142         "lsls	r4, r4, %[n]\n\t"
93143 #else
93144         "lsl	r4, r4, %[n]\n\t"
93145 #endif
93146 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93147         "lsrs	r6, r6, r7\n\t"
93148 #else
93149         "lsr	r6, r6, r7\n\t"
93150 #endif
93151 #ifdef WOLFSSL_KEIL
93152         "orrs	r5, r5, r6\n\t"
93153 #elif defined(__clang__)
93154         "orrs	r5, r6\n\t"
93155 #else
93156         "orr	r5, r6\n\t"
93157 #endif
93158         "ldr	r3, [%[a], #52]\n\t"
93159         "str	r5, [%[r], #60]\n\t"
93160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93161         "lsrs	r6, r3, #1\n\t"
93162 #else
93163         "lsr	r6, r3, #1\n\t"
93164 #endif
93165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93166         "lsls	r3, r3, %[n]\n\t"
93167 #else
93168         "lsl	r3, r3, %[n]\n\t"
93169 #endif
93170 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93171         "lsrs	r6, r6, r7\n\t"
93172 #else
93173         "lsr	r6, r6, r7\n\t"
93174 #endif
93175 #ifdef WOLFSSL_KEIL
93176         "orrs	r4, r4, r6\n\t"
93177 #elif defined(__clang__)
93178         "orrs	r4, r6\n\t"
93179 #else
93180         "orr	r4, r6\n\t"
93181 #endif
93182         "ldr	r5, [%[a], #48]\n\t"
93183         "str	r4, [%[r], #56]\n\t"
93184 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93185         "lsrs	r6, r5, #1\n\t"
93186 #else
93187         "lsr	r6, r5, #1\n\t"
93188 #endif
93189 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93190         "lsls	r5, r5, %[n]\n\t"
93191 #else
93192         "lsl	r5, r5, %[n]\n\t"
93193 #endif
93194 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93195         "lsrs	r6, r6, r7\n\t"
93196 #else
93197         "lsr	r6, r6, r7\n\t"
93198 #endif
93199 #ifdef WOLFSSL_KEIL
93200         "orrs	r3, r3, r6\n\t"
93201 #elif defined(__clang__)
93202         "orrs	r3, r6\n\t"
93203 #else
93204         "orr	r3, r6\n\t"
93205 #endif
93206         "ldr	r4, [%[a], #44]\n\t"
93207         "str	r3, [%[r], #52]\n\t"
93208 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93209         "lsrs	r6, r4, #1\n\t"
93210 #else
93211         "lsr	r6, r4, #1\n\t"
93212 #endif
93213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93214         "lsls	r4, r4, %[n]\n\t"
93215 #else
93216         "lsl	r4, r4, %[n]\n\t"
93217 #endif
93218 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93219         "lsrs	r6, r6, r7\n\t"
93220 #else
93221         "lsr	r6, r6, r7\n\t"
93222 #endif
93223 #ifdef WOLFSSL_KEIL
93224         "orrs	r5, r5, r6\n\t"
93225 #elif defined(__clang__)
93226         "orrs	r5, r6\n\t"
93227 #else
93228         "orr	r5, r6\n\t"
93229 #endif
93230         "ldr	r3, [%[a], #40]\n\t"
93231         "str	r5, [%[r], #48]\n\t"
93232 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93233         "lsrs	r6, r3, #1\n\t"
93234 #else
93235         "lsr	r6, r3, #1\n\t"
93236 #endif
93237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93238         "lsls	r3, r3, %[n]\n\t"
93239 #else
93240         "lsl	r3, r3, %[n]\n\t"
93241 #endif
93242 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93243         "lsrs	r6, r6, r7\n\t"
93244 #else
93245         "lsr	r6, r6, r7\n\t"
93246 #endif
93247 #ifdef WOLFSSL_KEIL
93248         "orrs	r4, r4, r6\n\t"
93249 #elif defined(__clang__)
93250         "orrs	r4, r6\n\t"
93251 #else
93252         "orr	r4, r6\n\t"
93253 #endif
93254         "ldr	r5, [%[a], #36]\n\t"
93255         "str	r4, [%[r], #44]\n\t"
93256 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93257         "lsrs	r6, r5, #1\n\t"
93258 #else
93259         "lsr	r6, r5, #1\n\t"
93260 #endif
93261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93262         "lsls	r5, r5, %[n]\n\t"
93263 #else
93264         "lsl	r5, r5, %[n]\n\t"
93265 #endif
93266 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93267         "lsrs	r6, r6, r7\n\t"
93268 #else
93269         "lsr	r6, r6, r7\n\t"
93270 #endif
93271 #ifdef WOLFSSL_KEIL
93272         "orrs	r3, r3, r6\n\t"
93273 #elif defined(__clang__)
93274         "orrs	r3, r6\n\t"
93275 #else
93276         "orr	r3, r6\n\t"
93277 #endif
93278         "ldr	r4, [%[a], #32]\n\t"
93279         "str	r3, [%[r], #40]\n\t"
93280 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93281         "lsrs	r6, r4, #1\n\t"
93282 #else
93283         "lsr	r6, r4, #1\n\t"
93284 #endif
93285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93286         "lsls	r4, r4, %[n]\n\t"
93287 #else
93288         "lsl	r4, r4, %[n]\n\t"
93289 #endif
93290 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93291         "lsrs	r6, r6, r7\n\t"
93292 #else
93293         "lsr	r6, r6, r7\n\t"
93294 #endif
93295 #ifdef WOLFSSL_KEIL
93296         "orrs	r5, r5, r6\n\t"
93297 #elif defined(__clang__)
93298         "orrs	r5, r6\n\t"
93299 #else
93300         "orr	r5, r6\n\t"
93301 #endif
93302         "ldr	r3, [%[a], #28]\n\t"
93303         "str	r5, [%[r], #36]\n\t"
93304 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93305         "lsrs	r6, r3, #1\n\t"
93306 #else
93307         "lsr	r6, r3, #1\n\t"
93308 #endif
93309 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93310         "lsls	r3, r3, %[n]\n\t"
93311 #else
93312         "lsl	r3, r3, %[n]\n\t"
93313 #endif
93314 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93315         "lsrs	r6, r6, r7\n\t"
93316 #else
93317         "lsr	r6, r6, r7\n\t"
93318 #endif
93319 #ifdef WOLFSSL_KEIL
93320         "orrs	r4, r4, r6\n\t"
93321 #elif defined(__clang__)
93322         "orrs	r4, r6\n\t"
93323 #else
93324         "orr	r4, r6\n\t"
93325 #endif
93326         "ldr	r5, [%[a], #24]\n\t"
93327         "str	r4, [%[r], #32]\n\t"
93328 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93329         "lsrs	r6, r5, #1\n\t"
93330 #else
93331         "lsr	r6, r5, #1\n\t"
93332 #endif
93333 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93334         "lsls	r5, r5, %[n]\n\t"
93335 #else
93336         "lsl	r5, r5, %[n]\n\t"
93337 #endif
93338 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93339         "lsrs	r6, r6, r7\n\t"
93340 #else
93341         "lsr	r6, r6, r7\n\t"
93342 #endif
93343 #ifdef WOLFSSL_KEIL
93344         "orrs	r3, r3, r6\n\t"
93345 #elif defined(__clang__)
93346         "orrs	r3, r6\n\t"
93347 #else
93348         "orr	r3, r6\n\t"
93349 #endif
93350         "ldr	r4, [%[a], #20]\n\t"
93351         "str	r3, [%[r], #28]\n\t"
93352 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93353         "lsrs	r6, r4, #1\n\t"
93354 #else
93355         "lsr	r6, r4, #1\n\t"
93356 #endif
93357 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93358         "lsls	r4, r4, %[n]\n\t"
93359 #else
93360         "lsl	r4, r4, %[n]\n\t"
93361 #endif
93362 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93363         "lsrs	r6, r6, r7\n\t"
93364 #else
93365         "lsr	r6, r6, r7\n\t"
93366 #endif
93367 #ifdef WOLFSSL_KEIL
93368         "orrs	r5, r5, r6\n\t"
93369 #elif defined(__clang__)
93370         "orrs	r5, r6\n\t"
93371 #else
93372         "orr	r5, r6\n\t"
93373 #endif
93374         "ldr	r3, [%[a], #16]\n\t"
93375         "str	r5, [%[r], #24]\n\t"
93376 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93377         "lsrs	r6, r3, #1\n\t"
93378 #else
93379         "lsr	r6, r3, #1\n\t"
93380 #endif
93381 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93382         "lsls	r3, r3, %[n]\n\t"
93383 #else
93384         "lsl	r3, r3, %[n]\n\t"
93385 #endif
93386 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93387         "lsrs	r6, r6, r7\n\t"
93388 #else
93389         "lsr	r6, r6, r7\n\t"
93390 #endif
93391 #ifdef WOLFSSL_KEIL
93392         "orrs	r4, r4, r6\n\t"
93393 #elif defined(__clang__)
93394         "orrs	r4, r6\n\t"
93395 #else
93396         "orr	r4, r6\n\t"
93397 #endif
93398         "ldr	r5, [%[a], #12]\n\t"
93399         "str	r4, [%[r], #20]\n\t"
93400 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93401         "lsrs	r6, r5, #1\n\t"
93402 #else
93403         "lsr	r6, r5, #1\n\t"
93404 #endif
93405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93406         "lsls	r5, r5, %[n]\n\t"
93407 #else
93408         "lsl	r5, r5, %[n]\n\t"
93409 #endif
93410 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93411         "lsrs	r6, r6, r7\n\t"
93412 #else
93413         "lsr	r6, r6, r7\n\t"
93414 #endif
93415 #ifdef WOLFSSL_KEIL
93416         "orrs	r3, r3, r6\n\t"
93417 #elif defined(__clang__)
93418         "orrs	r3, r6\n\t"
93419 #else
93420         "orr	r3, r6\n\t"
93421 #endif
93422         "ldr	r4, [%[a], #8]\n\t"
93423         "str	r3, [%[r], #16]\n\t"
93424 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93425         "lsrs	r6, r4, #1\n\t"
93426 #else
93427         "lsr	r6, r4, #1\n\t"
93428 #endif
93429 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93430         "lsls	r4, r4, %[n]\n\t"
93431 #else
93432         "lsl	r4, r4, %[n]\n\t"
93433 #endif
93434 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93435         "lsrs	r6, r6, r7\n\t"
93436 #else
93437         "lsr	r6, r6, r7\n\t"
93438 #endif
93439 #ifdef WOLFSSL_KEIL
93440         "orrs	r5, r5, r6\n\t"
93441 #elif defined(__clang__)
93442         "orrs	r5, r6\n\t"
93443 #else
93444         "orr	r5, r6\n\t"
93445 #endif
93446         "ldr	r3, [%[a], #4]\n\t"
93447         "str	r5, [%[r], #12]\n\t"
93448 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93449         "lsrs	r6, r3, #1\n\t"
93450 #else
93451         "lsr	r6, r3, #1\n\t"
93452 #endif
93453 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93454         "lsls	r3, r3, %[n]\n\t"
93455 #else
93456         "lsl	r3, r3, %[n]\n\t"
93457 #endif
93458 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93459         "lsrs	r6, r6, r7\n\t"
93460 #else
93461         "lsr	r6, r6, r7\n\t"
93462 #endif
93463 #ifdef WOLFSSL_KEIL
93464         "orrs	r4, r4, r6\n\t"
93465 #elif defined(__clang__)
93466         "orrs	r4, r6\n\t"
93467 #else
93468         "orr	r4, r6\n\t"
93469 #endif
93470         "ldr	r5, [%[a]]\n\t"
93471         "str	r4, [%[r], #8]\n\t"
93472 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93473         "lsrs	r6, r5, #1\n\t"
93474 #else
93475         "lsr	r6, r5, #1\n\t"
93476 #endif
93477 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93478         "lsls	r5, r5, %[n]\n\t"
93479 #else
93480         "lsl	r5, r5, %[n]\n\t"
93481 #endif
93482 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93483         "lsrs	r6, r6, r7\n\t"
93484 #else
93485         "lsr	r6, r6, r7\n\t"
93486 #endif
93487 #ifdef WOLFSSL_KEIL
93488         "orrs	r3, r3, r6\n\t"
93489 #elif defined(__clang__)
93490         "orrs	r3, r6\n\t"
93491 #else
93492         "orr	r3, r6\n\t"
93493 #endif
93494 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93495         "subs	%[a], %[a], #0x40\n\t"
93496 #else
93497         "sub	%[a], %[a], #0x40\n\t"
93498 #endif
93499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93500         "subs	%[r], %[r], #0x40\n\t"
93501 #else
93502         "sub	%[r], %[r], #0x40\n\t"
93503 #endif
93504         "ldr	r4, [%[a], #60]\n\t"
93505         "str	r3, [%[r], #68]\n\t"
93506 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93507         "lsrs	r6, r4, #1\n\t"
93508 #else
93509         "lsr	r6, r4, #1\n\t"
93510 #endif
93511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93512         "lsls	r4, r4, %[n]\n\t"
93513 #else
93514         "lsl	r4, r4, %[n]\n\t"
93515 #endif
93516 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93517         "lsrs	r6, r6, r7\n\t"
93518 #else
93519         "lsr	r6, r6, r7\n\t"
93520 #endif
93521 #ifdef WOLFSSL_KEIL
93522         "orrs	r5, r5, r6\n\t"
93523 #elif defined(__clang__)
93524         "orrs	r5, r6\n\t"
93525 #else
93526         "orr	r5, r6\n\t"
93527 #endif
93528         "ldr	r3, [%[a], #56]\n\t"
93529         "str	r5, [%[r], #64]\n\t"
93530 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93531         "lsrs	r6, r3, #1\n\t"
93532 #else
93533         "lsr	r6, r3, #1\n\t"
93534 #endif
93535 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93536         "lsls	r3, r3, %[n]\n\t"
93537 #else
93538         "lsl	r3, r3, %[n]\n\t"
93539 #endif
93540 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93541         "lsrs	r6, r6, r7\n\t"
93542 #else
93543         "lsr	r6, r6, r7\n\t"
93544 #endif
93545 #ifdef WOLFSSL_KEIL
93546         "orrs	r4, r4, r6\n\t"
93547 #elif defined(__clang__)
93548         "orrs	r4, r6\n\t"
93549 #else
93550         "orr	r4, r6\n\t"
93551 #endif
93552         "ldr	r5, [%[a], #52]\n\t"
93553         "str	r4, [%[r], #60]\n\t"
93554 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93555         "lsrs	r6, r5, #1\n\t"
93556 #else
93557         "lsr	r6, r5, #1\n\t"
93558 #endif
93559 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93560         "lsls	r5, r5, %[n]\n\t"
93561 #else
93562         "lsl	r5, r5, %[n]\n\t"
93563 #endif
93564 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93565         "lsrs	r6, r6, r7\n\t"
93566 #else
93567         "lsr	r6, r6, r7\n\t"
93568 #endif
93569 #ifdef WOLFSSL_KEIL
93570         "orrs	r3, r3, r6\n\t"
93571 #elif defined(__clang__)
93572         "orrs	r3, r6\n\t"
93573 #else
93574         "orr	r3, r6\n\t"
93575 #endif
93576         "ldr	r4, [%[a], #48]\n\t"
93577         "str	r3, [%[r], #56]\n\t"
93578 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93579         "lsrs	r6, r4, #1\n\t"
93580 #else
93581         "lsr	r6, r4, #1\n\t"
93582 #endif
93583 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93584         "lsls	r4, r4, %[n]\n\t"
93585 #else
93586         "lsl	r4, r4, %[n]\n\t"
93587 #endif
93588 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93589         "lsrs	r6, r6, r7\n\t"
93590 #else
93591         "lsr	r6, r6, r7\n\t"
93592 #endif
93593 #ifdef WOLFSSL_KEIL
93594         "orrs	r5, r5, r6\n\t"
93595 #elif defined(__clang__)
93596         "orrs	r5, r6\n\t"
93597 #else
93598         "orr	r5, r6\n\t"
93599 #endif
93600         "ldr	r3, [%[a], #44]\n\t"
93601         "str	r5, [%[r], #52]\n\t"
93602 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93603         "lsrs	r6, r3, #1\n\t"
93604 #else
93605         "lsr	r6, r3, #1\n\t"
93606 #endif
93607 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93608         "lsls	r3, r3, %[n]\n\t"
93609 #else
93610         "lsl	r3, r3, %[n]\n\t"
93611 #endif
93612 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93613         "lsrs	r6, r6, r7\n\t"
93614 #else
93615         "lsr	r6, r6, r7\n\t"
93616 #endif
93617 #ifdef WOLFSSL_KEIL
93618         "orrs	r4, r4, r6\n\t"
93619 #elif defined(__clang__)
93620         "orrs	r4, r6\n\t"
93621 #else
93622         "orr	r4, r6\n\t"
93623 #endif
93624         "ldr	r5, [%[a], #40]\n\t"
93625         "str	r4, [%[r], #48]\n\t"
93626 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93627         "lsrs	r6, r5, #1\n\t"
93628 #else
93629         "lsr	r6, r5, #1\n\t"
93630 #endif
93631 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93632         "lsls	r5, r5, %[n]\n\t"
93633 #else
93634         "lsl	r5, r5, %[n]\n\t"
93635 #endif
93636 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93637         "lsrs	r6, r6, r7\n\t"
93638 #else
93639         "lsr	r6, r6, r7\n\t"
93640 #endif
93641 #ifdef WOLFSSL_KEIL
93642         "orrs	r3, r3, r6\n\t"
93643 #elif defined(__clang__)
93644         "orrs	r3, r6\n\t"
93645 #else
93646         "orr	r3, r6\n\t"
93647 #endif
93648         "ldr	r4, [%[a], #36]\n\t"
93649         "str	r3, [%[r], #44]\n\t"
93650 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93651         "lsrs	r6, r4, #1\n\t"
93652 #else
93653         "lsr	r6, r4, #1\n\t"
93654 #endif
93655 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93656         "lsls	r4, r4, %[n]\n\t"
93657 #else
93658         "lsl	r4, r4, %[n]\n\t"
93659 #endif
93660 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93661         "lsrs	r6, r6, r7\n\t"
93662 #else
93663         "lsr	r6, r6, r7\n\t"
93664 #endif
93665 #ifdef WOLFSSL_KEIL
93666         "orrs	r5, r5, r6\n\t"
93667 #elif defined(__clang__)
93668         "orrs	r5, r6\n\t"
93669 #else
93670         "orr	r5, r6\n\t"
93671 #endif
93672         "ldr	r3, [%[a], #32]\n\t"
93673         "str	r5, [%[r], #40]\n\t"
93674 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93675         "lsrs	r6, r3, #1\n\t"
93676 #else
93677         "lsr	r6, r3, #1\n\t"
93678 #endif
93679 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93680         "lsls	r3, r3, %[n]\n\t"
93681 #else
93682         "lsl	r3, r3, %[n]\n\t"
93683 #endif
93684 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93685         "lsrs	r6, r6, r7\n\t"
93686 #else
93687         "lsr	r6, r6, r7\n\t"
93688 #endif
93689 #ifdef WOLFSSL_KEIL
93690         "orrs	r4, r4, r6\n\t"
93691 #elif defined(__clang__)
93692         "orrs	r4, r6\n\t"
93693 #else
93694         "orr	r4, r6\n\t"
93695 #endif
93696         "ldr	r5, [%[a], #28]\n\t"
93697         "str	r4, [%[r], #36]\n\t"
93698 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93699         "lsrs	r6, r5, #1\n\t"
93700 #else
93701         "lsr	r6, r5, #1\n\t"
93702 #endif
93703 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93704         "lsls	r5, r5, %[n]\n\t"
93705 #else
93706         "lsl	r5, r5, %[n]\n\t"
93707 #endif
93708 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93709         "lsrs	r6, r6, r7\n\t"
93710 #else
93711         "lsr	r6, r6, r7\n\t"
93712 #endif
93713 #ifdef WOLFSSL_KEIL
93714         "orrs	r3, r3, r6\n\t"
93715 #elif defined(__clang__)
93716         "orrs	r3, r6\n\t"
93717 #else
93718         "orr	r3, r6\n\t"
93719 #endif
93720         "ldr	r4, [%[a], #24]\n\t"
93721         "str	r3, [%[r], #32]\n\t"
93722 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93723         "lsrs	r6, r4, #1\n\t"
93724 #else
93725         "lsr	r6, r4, #1\n\t"
93726 #endif
93727 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93728         "lsls	r4, r4, %[n]\n\t"
93729 #else
93730         "lsl	r4, r4, %[n]\n\t"
93731 #endif
93732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93733         "lsrs	r6, r6, r7\n\t"
93734 #else
93735         "lsr	r6, r6, r7\n\t"
93736 #endif
93737 #ifdef WOLFSSL_KEIL
93738         "orrs	r5, r5, r6\n\t"
93739 #elif defined(__clang__)
93740         "orrs	r5, r6\n\t"
93741 #else
93742         "orr	r5, r6\n\t"
93743 #endif
93744         "ldr	r3, [%[a], #20]\n\t"
93745         "str	r5, [%[r], #28]\n\t"
93746 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93747         "lsrs	r6, r3, #1\n\t"
93748 #else
93749         "lsr	r6, r3, #1\n\t"
93750 #endif
93751 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93752         "lsls	r3, r3, %[n]\n\t"
93753 #else
93754         "lsl	r3, r3, %[n]\n\t"
93755 #endif
93756 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93757         "lsrs	r6, r6, r7\n\t"
93758 #else
93759         "lsr	r6, r6, r7\n\t"
93760 #endif
93761 #ifdef WOLFSSL_KEIL
93762         "orrs	r4, r4, r6\n\t"
93763 #elif defined(__clang__)
93764         "orrs	r4, r6\n\t"
93765 #else
93766         "orr	r4, r6\n\t"
93767 #endif
93768         "ldr	r5, [%[a], #16]\n\t"
93769         "str	r4, [%[r], #24]\n\t"
93770 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93771         "lsrs	r6, r5, #1\n\t"
93772 #else
93773         "lsr	r6, r5, #1\n\t"
93774 #endif
93775 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93776         "lsls	r5, r5, %[n]\n\t"
93777 #else
93778         "lsl	r5, r5, %[n]\n\t"
93779 #endif
93780 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93781         "lsrs	r6, r6, r7\n\t"
93782 #else
93783         "lsr	r6, r6, r7\n\t"
93784 #endif
93785 #ifdef WOLFSSL_KEIL
93786         "orrs	r3, r3, r6\n\t"
93787 #elif defined(__clang__)
93788         "orrs	r3, r6\n\t"
93789 #else
93790         "orr	r3, r6\n\t"
93791 #endif
93792         "ldr	r4, [%[a], #12]\n\t"
93793         "str	r3, [%[r], #20]\n\t"
93794 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93795         "lsrs	r6, r4, #1\n\t"
93796 #else
93797         "lsr	r6, r4, #1\n\t"
93798 #endif
93799 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93800         "lsls	r4, r4, %[n]\n\t"
93801 #else
93802         "lsl	r4, r4, %[n]\n\t"
93803 #endif
93804 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93805         "lsrs	r6, r6, r7\n\t"
93806 #else
93807         "lsr	r6, r6, r7\n\t"
93808 #endif
93809 #ifdef WOLFSSL_KEIL
93810         "orrs	r5, r5, r6\n\t"
93811 #elif defined(__clang__)
93812         "orrs	r5, r6\n\t"
93813 #else
93814         "orr	r5, r6\n\t"
93815 #endif
93816         "ldr	r3, [%[a], #8]\n\t"
93817         "str	r5, [%[r], #16]\n\t"
93818 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93819         "lsrs	r6, r3, #1\n\t"
93820 #else
93821         "lsr	r6, r3, #1\n\t"
93822 #endif
93823 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93824         "lsls	r3, r3, %[n]\n\t"
93825 #else
93826         "lsl	r3, r3, %[n]\n\t"
93827 #endif
93828 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93829         "lsrs	r6, r6, r7\n\t"
93830 #else
93831         "lsr	r6, r6, r7\n\t"
93832 #endif
93833 #ifdef WOLFSSL_KEIL
93834         "orrs	r4, r4, r6\n\t"
93835 #elif defined(__clang__)
93836         "orrs	r4, r6\n\t"
93837 #else
93838         "orr	r4, r6\n\t"
93839 #endif
93840         "ldr	r5, [%[a], #4]\n\t"
93841         "str	r4, [%[r], #12]\n\t"
93842 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93843         "lsrs	r6, r5, #1\n\t"
93844 #else
93845         "lsr	r6, r5, #1\n\t"
93846 #endif
93847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93848         "lsls	r5, r5, %[n]\n\t"
93849 #else
93850         "lsl	r5, r5, %[n]\n\t"
93851 #endif
93852 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93853         "lsrs	r6, r6, r7\n\t"
93854 #else
93855         "lsr	r6, r6, r7\n\t"
93856 #endif
93857 #ifdef WOLFSSL_KEIL
93858         "orrs	r3, r3, r6\n\t"
93859 #elif defined(__clang__)
93860         "orrs	r3, r6\n\t"
93861 #else
93862         "orr	r3, r6\n\t"
93863 #endif
93864         "ldr	r4, [%[a]]\n\t"
93865         "str	r3, [%[r], #8]\n\t"
93866 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93867         "lsrs	r6, r4, #1\n\t"
93868 #else
93869         "lsr	r6, r4, #1\n\t"
93870 #endif
93871 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93872         "lsls	r4, r4, %[n]\n\t"
93873 #else
93874         "lsl	r4, r4, %[n]\n\t"
93875 #endif
93876 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93877         "lsrs	r6, r6, r7\n\t"
93878 #else
93879         "lsr	r6, r6, r7\n\t"
93880 #endif
93881 #ifdef WOLFSSL_KEIL
93882         "orrs	r5, r5, r6\n\t"
93883 #elif defined(__clang__)
93884         "orrs	r5, r6\n\t"
93885 #else
93886         "orr	r5, r6\n\t"
93887 #endif
93888 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93889         "subs	%[a], %[a], #0x40\n\t"
93890 #else
93891         "sub	%[a], %[a], #0x40\n\t"
93892 #endif
93893 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93894         "subs	%[r], %[r], #0x40\n\t"
93895 #else
93896         "sub	%[r], %[r], #0x40\n\t"
93897 #endif
93898         "ldr	r3, [%[a], #60]\n\t"
93899         "str	r5, [%[r], #68]\n\t"
93900 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93901         "lsrs	r6, r3, #1\n\t"
93902 #else
93903         "lsr	r6, r3, #1\n\t"
93904 #endif
93905 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93906         "lsls	r3, r3, %[n]\n\t"
93907 #else
93908         "lsl	r3, r3, %[n]\n\t"
93909 #endif
93910 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93911         "lsrs	r6, r6, r7\n\t"
93912 #else
93913         "lsr	r6, r6, r7\n\t"
93914 #endif
93915 #ifdef WOLFSSL_KEIL
93916         "orrs	r4, r4, r6\n\t"
93917 #elif defined(__clang__)
93918         "orrs	r4, r6\n\t"
93919 #else
93920         "orr	r4, r6\n\t"
93921 #endif
93922         "ldr	r5, [%[a], #56]\n\t"
93923         "str	r4, [%[r], #64]\n\t"
93924 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93925         "lsrs	r6, r5, #1\n\t"
93926 #else
93927         "lsr	r6, r5, #1\n\t"
93928 #endif
93929 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93930         "lsls	r5, r5, %[n]\n\t"
93931 #else
93932         "lsl	r5, r5, %[n]\n\t"
93933 #endif
93934 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93935         "lsrs	r6, r6, r7\n\t"
93936 #else
93937         "lsr	r6, r6, r7\n\t"
93938 #endif
93939 #ifdef WOLFSSL_KEIL
93940         "orrs	r3, r3, r6\n\t"
93941 #elif defined(__clang__)
93942         "orrs	r3, r6\n\t"
93943 #else
93944         "orr	r3, r6\n\t"
93945 #endif
93946         "ldr	r4, [%[a], #52]\n\t"
93947         "str	r3, [%[r], #60]\n\t"
93948 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93949         "lsrs	r6, r4, #1\n\t"
93950 #else
93951         "lsr	r6, r4, #1\n\t"
93952 #endif
93953 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93954         "lsls	r4, r4, %[n]\n\t"
93955 #else
93956         "lsl	r4, r4, %[n]\n\t"
93957 #endif
93958 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93959         "lsrs	r6, r6, r7\n\t"
93960 #else
93961         "lsr	r6, r6, r7\n\t"
93962 #endif
93963 #ifdef WOLFSSL_KEIL
93964         "orrs	r5, r5, r6\n\t"
93965 #elif defined(__clang__)
93966         "orrs	r5, r6\n\t"
93967 #else
93968         "orr	r5, r6\n\t"
93969 #endif
93970         "ldr	r3, [%[a], #48]\n\t"
93971         "str	r5, [%[r], #56]\n\t"
93972 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93973         "lsrs	r6, r3, #1\n\t"
93974 #else
93975         "lsr	r6, r3, #1\n\t"
93976 #endif
93977 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93978         "lsls	r3, r3, %[n]\n\t"
93979 #else
93980         "lsl	r3, r3, %[n]\n\t"
93981 #endif
93982 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93983         "lsrs	r6, r6, r7\n\t"
93984 #else
93985         "lsr	r6, r6, r7\n\t"
93986 #endif
93987 #ifdef WOLFSSL_KEIL
93988         "orrs	r4, r4, r6\n\t"
93989 #elif defined(__clang__)
93990         "orrs	r4, r6\n\t"
93991 #else
93992         "orr	r4, r6\n\t"
93993 #endif
93994         "ldr	r5, [%[a], #44]\n\t"
93995         "str	r4, [%[r], #52]\n\t"
93996 #if defined(__clang__) || defined(WOLFSSL_KEIL)
93997         "lsrs	r6, r5, #1\n\t"
93998 #else
93999         "lsr	r6, r5, #1\n\t"
94000 #endif
94001 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94002         "lsls	r5, r5, %[n]\n\t"
94003 #else
94004         "lsl	r5, r5, %[n]\n\t"
94005 #endif
94006 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94007         "lsrs	r6, r6, r7\n\t"
94008 #else
94009         "lsr	r6, r6, r7\n\t"
94010 #endif
94011 #ifdef WOLFSSL_KEIL
94012         "orrs	r3, r3, r6\n\t"
94013 #elif defined(__clang__)
94014         "orrs	r3, r6\n\t"
94015 #else
94016         "orr	r3, r6\n\t"
94017 #endif
94018         "ldr	r4, [%[a], #40]\n\t"
94019         "str	r3, [%[r], #48]\n\t"
94020 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94021         "lsrs	r6, r4, #1\n\t"
94022 #else
94023         "lsr	r6, r4, #1\n\t"
94024 #endif
94025 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94026         "lsls	r4, r4, %[n]\n\t"
94027 #else
94028         "lsl	r4, r4, %[n]\n\t"
94029 #endif
94030 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94031         "lsrs	r6, r6, r7\n\t"
94032 #else
94033         "lsr	r6, r6, r7\n\t"
94034 #endif
94035 #ifdef WOLFSSL_KEIL
94036         "orrs	r5, r5, r6\n\t"
94037 #elif defined(__clang__)
94038         "orrs	r5, r6\n\t"
94039 #else
94040         "orr	r5, r6\n\t"
94041 #endif
94042         "ldr	r3, [%[a], #36]\n\t"
94043         "str	r5, [%[r], #44]\n\t"
94044 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94045         "lsrs	r6, r3, #1\n\t"
94046 #else
94047         "lsr	r6, r3, #1\n\t"
94048 #endif
94049 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94050         "lsls	r3, r3, %[n]\n\t"
94051 #else
94052         "lsl	r3, r3, %[n]\n\t"
94053 #endif
94054 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94055         "lsrs	r6, r6, r7\n\t"
94056 #else
94057         "lsr	r6, r6, r7\n\t"
94058 #endif
94059 #ifdef WOLFSSL_KEIL
94060         "orrs	r4, r4, r6\n\t"
94061 #elif defined(__clang__)
94062         "orrs	r4, r6\n\t"
94063 #else
94064         "orr	r4, r6\n\t"
94065 #endif
94066         "ldr	r5, [%[a], #32]\n\t"
94067         "str	r4, [%[r], #40]\n\t"
94068 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94069         "lsrs	r6, r5, #1\n\t"
94070 #else
94071         "lsr	r6, r5, #1\n\t"
94072 #endif
94073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94074         "lsls	r5, r5, %[n]\n\t"
94075 #else
94076         "lsl	r5, r5, %[n]\n\t"
94077 #endif
94078 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94079         "lsrs	r6, r6, r7\n\t"
94080 #else
94081         "lsr	r6, r6, r7\n\t"
94082 #endif
94083 #ifdef WOLFSSL_KEIL
94084         "orrs	r3, r3, r6\n\t"
94085 #elif defined(__clang__)
94086         "orrs	r3, r6\n\t"
94087 #else
94088         "orr	r3, r6\n\t"
94089 #endif
94090         "ldr	r4, [%[a], #28]\n\t"
94091         "str	r3, [%[r], #36]\n\t"
94092 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94093         "lsrs	r6, r4, #1\n\t"
94094 #else
94095         "lsr	r6, r4, #1\n\t"
94096 #endif
94097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94098         "lsls	r4, r4, %[n]\n\t"
94099 #else
94100         "lsl	r4, r4, %[n]\n\t"
94101 #endif
94102 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94103         "lsrs	r6, r6, r7\n\t"
94104 #else
94105         "lsr	r6, r6, r7\n\t"
94106 #endif
94107 #ifdef WOLFSSL_KEIL
94108         "orrs	r5, r5, r6\n\t"
94109 #elif defined(__clang__)
94110         "orrs	r5, r6\n\t"
94111 #else
94112         "orr	r5, r6\n\t"
94113 #endif
94114         "ldr	r3, [%[a], #24]\n\t"
94115         "str	r5, [%[r], #32]\n\t"
94116 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94117         "lsrs	r6, r3, #1\n\t"
94118 #else
94119         "lsr	r6, r3, #1\n\t"
94120 #endif
94121 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94122         "lsls	r3, r3, %[n]\n\t"
94123 #else
94124         "lsl	r3, r3, %[n]\n\t"
94125 #endif
94126 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94127         "lsrs	r6, r6, r7\n\t"
94128 #else
94129         "lsr	r6, r6, r7\n\t"
94130 #endif
94131 #ifdef WOLFSSL_KEIL
94132         "orrs	r4, r4, r6\n\t"
94133 #elif defined(__clang__)
94134         "orrs	r4, r6\n\t"
94135 #else
94136         "orr	r4, r6\n\t"
94137 #endif
94138         "ldr	r5, [%[a], #20]\n\t"
94139         "str	r4, [%[r], #28]\n\t"
94140 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94141         "lsrs	r6, r5, #1\n\t"
94142 #else
94143         "lsr	r6, r5, #1\n\t"
94144 #endif
94145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94146         "lsls	r5, r5, %[n]\n\t"
94147 #else
94148         "lsl	r5, r5, %[n]\n\t"
94149 #endif
94150 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94151         "lsrs	r6, r6, r7\n\t"
94152 #else
94153         "lsr	r6, r6, r7\n\t"
94154 #endif
94155 #ifdef WOLFSSL_KEIL
94156         "orrs	r3, r3, r6\n\t"
94157 #elif defined(__clang__)
94158         "orrs	r3, r6\n\t"
94159 #else
94160         "orr	r3, r6\n\t"
94161 #endif
94162         "ldr	r4, [%[a], #16]\n\t"
94163         "str	r3, [%[r], #24]\n\t"
94164 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94165         "lsrs	r6, r4, #1\n\t"
94166 #else
94167         "lsr	r6, r4, #1\n\t"
94168 #endif
94169 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94170         "lsls	r4, r4, %[n]\n\t"
94171 #else
94172         "lsl	r4, r4, %[n]\n\t"
94173 #endif
94174 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94175         "lsrs	r6, r6, r7\n\t"
94176 #else
94177         "lsr	r6, r6, r7\n\t"
94178 #endif
94179 #ifdef WOLFSSL_KEIL
94180         "orrs	r5, r5, r6\n\t"
94181 #elif defined(__clang__)
94182         "orrs	r5, r6\n\t"
94183 #else
94184         "orr	r5, r6\n\t"
94185 #endif
94186         "ldr	r3, [%[a], #12]\n\t"
94187         "str	r5, [%[r], #20]\n\t"
94188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94189         "lsrs	r6, r3, #1\n\t"
94190 #else
94191         "lsr	r6, r3, #1\n\t"
94192 #endif
94193 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94194         "lsls	r3, r3, %[n]\n\t"
94195 #else
94196         "lsl	r3, r3, %[n]\n\t"
94197 #endif
94198 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94199         "lsrs	r6, r6, r7\n\t"
94200 #else
94201         "lsr	r6, r6, r7\n\t"
94202 #endif
94203 #ifdef WOLFSSL_KEIL
94204         "orrs	r4, r4, r6\n\t"
94205 #elif defined(__clang__)
94206         "orrs	r4, r6\n\t"
94207 #else
94208         "orr	r4, r6\n\t"
94209 #endif
94210         "ldr	r5, [%[a], #8]\n\t"
94211         "str	r4, [%[r], #16]\n\t"
94212 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94213         "lsrs	r6, r5, #1\n\t"
94214 #else
94215         "lsr	r6, r5, #1\n\t"
94216 #endif
94217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94218         "lsls	r5, r5, %[n]\n\t"
94219 #else
94220         "lsl	r5, r5, %[n]\n\t"
94221 #endif
94222 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94223         "lsrs	r6, r6, r7\n\t"
94224 #else
94225         "lsr	r6, r6, r7\n\t"
94226 #endif
94227 #ifdef WOLFSSL_KEIL
94228         "orrs	r3, r3, r6\n\t"
94229 #elif defined(__clang__)
94230         "orrs	r3, r6\n\t"
94231 #else
94232         "orr	r3, r6\n\t"
94233 #endif
94234         "ldr	r4, [%[a], #4]\n\t"
94235         "str	r3, [%[r], #12]\n\t"
94236 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94237         "lsrs	r6, r4, #1\n\t"
94238 #else
94239         "lsr	r6, r4, #1\n\t"
94240 #endif
94241 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94242         "lsls	r4, r4, %[n]\n\t"
94243 #else
94244         "lsl	r4, r4, %[n]\n\t"
94245 #endif
94246 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94247         "lsrs	r6, r6, r7\n\t"
94248 #else
94249         "lsr	r6, r6, r7\n\t"
94250 #endif
94251 #ifdef WOLFSSL_KEIL
94252         "orrs	r5, r5, r6\n\t"
94253 #elif defined(__clang__)
94254         "orrs	r5, r6\n\t"
94255 #else
94256         "orr	r5, r6\n\t"
94257 #endif
94258         "ldr	r3, [%[a]]\n\t"
94259         "str	r5, [%[r], #8]\n\t"
94260 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94261         "lsrs	r6, r3, #1\n\t"
94262 #else
94263         "lsr	r6, r3, #1\n\t"
94264 #endif
94265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94266         "lsls	r3, r3, %[n]\n\t"
94267 #else
94268         "lsl	r3, r3, %[n]\n\t"
94269 #endif
94270 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94271         "lsrs	r6, r6, r7\n\t"
94272 #else
94273         "lsr	r6, r6, r7\n\t"
94274 #endif
94275 #ifdef WOLFSSL_KEIL
94276         "orrs	r4, r4, r6\n\t"
94277 #elif defined(__clang__)
94278         "orrs	r4, r6\n\t"
94279 #else
94280         "orr	r4, r6\n\t"
94281 #endif
94282 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94283         "subs	%[a], %[a], #0x40\n\t"
94284 #else
94285         "sub	%[a], %[a], #0x40\n\t"
94286 #endif
94287 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94288         "subs	%[r], %[r], #0x40\n\t"
94289 #else
94290         "sub	%[r], %[r], #0x40\n\t"
94291 #endif
94292         "ldr	r5, [%[a], #60]\n\t"
94293         "str	r4, [%[r], #68]\n\t"
94294 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94295         "lsrs	r6, r5, #1\n\t"
94296 #else
94297         "lsr	r6, r5, #1\n\t"
94298 #endif
94299 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94300         "lsls	r5, r5, %[n]\n\t"
94301 #else
94302         "lsl	r5, r5, %[n]\n\t"
94303 #endif
94304 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94305         "lsrs	r6, r6, r7\n\t"
94306 #else
94307         "lsr	r6, r6, r7\n\t"
94308 #endif
94309 #ifdef WOLFSSL_KEIL
94310         "orrs	r3, r3, r6\n\t"
94311 #elif defined(__clang__)
94312         "orrs	r3, r6\n\t"
94313 #else
94314         "orr	r3, r6\n\t"
94315 #endif
94316         "ldr	r4, [%[a], #56]\n\t"
94317         "str	r3, [%[r], #64]\n\t"
94318 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94319         "lsrs	r6, r4, #1\n\t"
94320 #else
94321         "lsr	r6, r4, #1\n\t"
94322 #endif
94323 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94324         "lsls	r4, r4, %[n]\n\t"
94325 #else
94326         "lsl	r4, r4, %[n]\n\t"
94327 #endif
94328 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94329         "lsrs	r6, r6, r7\n\t"
94330 #else
94331         "lsr	r6, r6, r7\n\t"
94332 #endif
94333 #ifdef WOLFSSL_KEIL
94334         "orrs	r5, r5, r6\n\t"
94335 #elif defined(__clang__)
94336         "orrs	r5, r6\n\t"
94337 #else
94338         "orr	r5, r6\n\t"
94339 #endif
94340         "ldr	r3, [%[a], #52]\n\t"
94341         "str	r5, [%[r], #60]\n\t"
94342 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94343         "lsrs	r6, r3, #1\n\t"
94344 #else
94345         "lsr	r6, r3, #1\n\t"
94346 #endif
94347 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94348         "lsls	r3, r3, %[n]\n\t"
94349 #else
94350         "lsl	r3, r3, %[n]\n\t"
94351 #endif
94352 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94353         "lsrs	r6, r6, r7\n\t"
94354 #else
94355         "lsr	r6, r6, r7\n\t"
94356 #endif
94357 #ifdef WOLFSSL_KEIL
94358         "orrs	r4, r4, r6\n\t"
94359 #elif defined(__clang__)
94360         "orrs	r4, r6\n\t"
94361 #else
94362         "orr	r4, r6\n\t"
94363 #endif
94364         "ldr	r5, [%[a], #48]\n\t"
94365         "str	r4, [%[r], #56]\n\t"
94366 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94367         "lsrs	r6, r5, #1\n\t"
94368 #else
94369         "lsr	r6, r5, #1\n\t"
94370 #endif
94371 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94372         "lsls	r5, r5, %[n]\n\t"
94373 #else
94374         "lsl	r5, r5, %[n]\n\t"
94375 #endif
94376 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94377         "lsrs	r6, r6, r7\n\t"
94378 #else
94379         "lsr	r6, r6, r7\n\t"
94380 #endif
94381 #ifdef WOLFSSL_KEIL
94382         "orrs	r3, r3, r6\n\t"
94383 #elif defined(__clang__)
94384         "orrs	r3, r6\n\t"
94385 #else
94386         "orr	r3, r6\n\t"
94387 #endif
94388         "ldr	r4, [%[a], #44]\n\t"
94389         "str	r3, [%[r], #52]\n\t"
94390 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94391         "lsrs	r6, r4, #1\n\t"
94392 #else
94393         "lsr	r6, r4, #1\n\t"
94394 #endif
94395 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94396         "lsls	r4, r4, %[n]\n\t"
94397 #else
94398         "lsl	r4, r4, %[n]\n\t"
94399 #endif
94400 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94401         "lsrs	r6, r6, r7\n\t"
94402 #else
94403         "lsr	r6, r6, r7\n\t"
94404 #endif
94405 #ifdef WOLFSSL_KEIL
94406         "orrs	r5, r5, r6\n\t"
94407 #elif defined(__clang__)
94408         "orrs	r5, r6\n\t"
94409 #else
94410         "orr	r5, r6\n\t"
94411 #endif
94412         "ldr	r3, [%[a], #40]\n\t"
94413         "str	r5, [%[r], #48]\n\t"
94414 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94415         "lsrs	r6, r3, #1\n\t"
94416 #else
94417         "lsr	r6, r3, #1\n\t"
94418 #endif
94419 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94420         "lsls	r3, r3, %[n]\n\t"
94421 #else
94422         "lsl	r3, r3, %[n]\n\t"
94423 #endif
94424 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94425         "lsrs	r6, r6, r7\n\t"
94426 #else
94427         "lsr	r6, r6, r7\n\t"
94428 #endif
94429 #ifdef WOLFSSL_KEIL
94430         "orrs	r4, r4, r6\n\t"
94431 #elif defined(__clang__)
94432         "orrs	r4, r6\n\t"
94433 #else
94434         "orr	r4, r6\n\t"
94435 #endif
94436         "ldr	r5, [%[a], #36]\n\t"
94437         "str	r4, [%[r], #44]\n\t"
94438 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94439         "lsrs	r6, r5, #1\n\t"
94440 #else
94441         "lsr	r6, r5, #1\n\t"
94442 #endif
94443 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94444         "lsls	r5, r5, %[n]\n\t"
94445 #else
94446         "lsl	r5, r5, %[n]\n\t"
94447 #endif
94448 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94449         "lsrs	r6, r6, r7\n\t"
94450 #else
94451         "lsr	r6, r6, r7\n\t"
94452 #endif
94453 #ifdef WOLFSSL_KEIL
94454         "orrs	r3, r3, r6\n\t"
94455 #elif defined(__clang__)
94456         "orrs	r3, r6\n\t"
94457 #else
94458         "orr	r3, r6\n\t"
94459 #endif
94460         "ldr	r4, [%[a], #32]\n\t"
94461         "str	r3, [%[r], #40]\n\t"
94462 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94463         "lsrs	r6, r4, #1\n\t"
94464 #else
94465         "lsr	r6, r4, #1\n\t"
94466 #endif
94467 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94468         "lsls	r4, r4, %[n]\n\t"
94469 #else
94470         "lsl	r4, r4, %[n]\n\t"
94471 #endif
94472 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94473         "lsrs	r6, r6, r7\n\t"
94474 #else
94475         "lsr	r6, r6, r7\n\t"
94476 #endif
94477 #ifdef WOLFSSL_KEIL
94478         "orrs	r5, r5, r6\n\t"
94479 #elif defined(__clang__)
94480         "orrs	r5, r6\n\t"
94481 #else
94482         "orr	r5, r6\n\t"
94483 #endif
94484         "ldr	r3, [%[a], #28]\n\t"
94485         "str	r5, [%[r], #36]\n\t"
94486 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94487         "lsrs	r6, r3, #1\n\t"
94488 #else
94489         "lsr	r6, r3, #1\n\t"
94490 #endif
94491 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94492         "lsls	r3, r3, %[n]\n\t"
94493 #else
94494         "lsl	r3, r3, %[n]\n\t"
94495 #endif
94496 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94497         "lsrs	r6, r6, r7\n\t"
94498 #else
94499         "lsr	r6, r6, r7\n\t"
94500 #endif
94501 #ifdef WOLFSSL_KEIL
94502         "orrs	r4, r4, r6\n\t"
94503 #elif defined(__clang__)
94504         "orrs	r4, r6\n\t"
94505 #else
94506         "orr	r4, r6\n\t"
94507 #endif
94508         "ldr	r5, [%[a], #24]\n\t"
94509         "str	r4, [%[r], #32]\n\t"
94510 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94511         "lsrs	r6, r5, #1\n\t"
94512 #else
94513         "lsr	r6, r5, #1\n\t"
94514 #endif
94515 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94516         "lsls	r5, r5, %[n]\n\t"
94517 #else
94518         "lsl	r5, r5, %[n]\n\t"
94519 #endif
94520 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94521         "lsrs	r6, r6, r7\n\t"
94522 #else
94523         "lsr	r6, r6, r7\n\t"
94524 #endif
94525 #ifdef WOLFSSL_KEIL
94526         "orrs	r3, r3, r6\n\t"
94527 #elif defined(__clang__)
94528         "orrs	r3, r6\n\t"
94529 #else
94530         "orr	r3, r6\n\t"
94531 #endif
94532         "ldr	r4, [%[a], #20]\n\t"
94533         "str	r3, [%[r], #28]\n\t"
94534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94535         "lsrs	r6, r4, #1\n\t"
94536 #else
94537         "lsr	r6, r4, #1\n\t"
94538 #endif
94539 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94540         "lsls	r4, r4, %[n]\n\t"
94541 #else
94542         "lsl	r4, r4, %[n]\n\t"
94543 #endif
94544 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94545         "lsrs	r6, r6, r7\n\t"
94546 #else
94547         "lsr	r6, r6, r7\n\t"
94548 #endif
94549 #ifdef WOLFSSL_KEIL
94550         "orrs	r5, r5, r6\n\t"
94551 #elif defined(__clang__)
94552         "orrs	r5, r6\n\t"
94553 #else
94554         "orr	r5, r6\n\t"
94555 #endif
94556         "ldr	r3, [%[a], #16]\n\t"
94557         "str	r5, [%[r], #24]\n\t"
94558 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94559         "lsrs	r6, r3, #1\n\t"
94560 #else
94561         "lsr	r6, r3, #1\n\t"
94562 #endif
94563 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94564         "lsls	r3, r3, %[n]\n\t"
94565 #else
94566         "lsl	r3, r3, %[n]\n\t"
94567 #endif
94568 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94569         "lsrs	r6, r6, r7\n\t"
94570 #else
94571         "lsr	r6, r6, r7\n\t"
94572 #endif
94573 #ifdef WOLFSSL_KEIL
94574         "orrs	r4, r4, r6\n\t"
94575 #elif defined(__clang__)
94576         "orrs	r4, r6\n\t"
94577 #else
94578         "orr	r4, r6\n\t"
94579 #endif
94580         "ldr	r5, [%[a], #12]\n\t"
94581         "str	r4, [%[r], #20]\n\t"
94582 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94583         "lsrs	r6, r5, #1\n\t"
94584 #else
94585         "lsr	r6, r5, #1\n\t"
94586 #endif
94587 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94588         "lsls	r5, r5, %[n]\n\t"
94589 #else
94590         "lsl	r5, r5, %[n]\n\t"
94591 #endif
94592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94593         "lsrs	r6, r6, r7\n\t"
94594 #else
94595         "lsr	r6, r6, r7\n\t"
94596 #endif
94597 #ifdef WOLFSSL_KEIL
94598         "orrs	r3, r3, r6\n\t"
94599 #elif defined(__clang__)
94600         "orrs	r3, r6\n\t"
94601 #else
94602         "orr	r3, r6\n\t"
94603 #endif
94604         "ldr	r4, [%[a], #8]\n\t"
94605         "str	r3, [%[r], #16]\n\t"
94606 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94607         "lsrs	r6, r4, #1\n\t"
94608 #else
94609         "lsr	r6, r4, #1\n\t"
94610 #endif
94611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94612         "lsls	r4, r4, %[n]\n\t"
94613 #else
94614         "lsl	r4, r4, %[n]\n\t"
94615 #endif
94616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94617         "lsrs	r6, r6, r7\n\t"
94618 #else
94619         "lsr	r6, r6, r7\n\t"
94620 #endif
94621 #ifdef WOLFSSL_KEIL
94622         "orrs	r5, r5, r6\n\t"
94623 #elif defined(__clang__)
94624         "orrs	r5, r6\n\t"
94625 #else
94626         "orr	r5, r6\n\t"
94627 #endif
94628         "ldr	r3, [%[a], #4]\n\t"
94629         "str	r5, [%[r], #12]\n\t"
94630 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94631         "lsrs	r6, r3, #1\n\t"
94632 #else
94633         "lsr	r6, r3, #1\n\t"
94634 #endif
94635 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94636         "lsls	r3, r3, %[n]\n\t"
94637 #else
94638         "lsl	r3, r3, %[n]\n\t"
94639 #endif
94640 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94641         "lsrs	r6, r6, r7\n\t"
94642 #else
94643         "lsr	r6, r6, r7\n\t"
94644 #endif
94645 #ifdef WOLFSSL_KEIL
94646         "orrs	r4, r4, r6\n\t"
94647 #elif defined(__clang__)
94648         "orrs	r4, r6\n\t"
94649 #else
94650         "orr	r4, r6\n\t"
94651 #endif
94652         "ldr	r5, [%[a]]\n\t"
94653         "str	r4, [%[r], #8]\n\t"
94654 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94655         "lsrs	r6, r5, #1\n\t"
94656 #else
94657         "lsr	r6, r5, #1\n\t"
94658 #endif
94659 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94660         "lsls	r5, r5, %[n]\n\t"
94661 #else
94662         "lsl	r5, r5, %[n]\n\t"
94663 #endif
94664 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94665         "lsrs	r6, r6, r7\n\t"
94666 #else
94667         "lsr	r6, r6, r7\n\t"
94668 #endif
94669 #ifdef WOLFSSL_KEIL
94670         "orrs	r3, r3, r6\n\t"
94671 #elif defined(__clang__)
94672         "orrs	r3, r6\n\t"
94673 #else
94674         "orr	r3, r6\n\t"
94675 #endif
94676 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94677         "subs	%[a], %[a], #0x40\n\t"
94678 #else
94679         "sub	%[a], %[a], #0x40\n\t"
94680 #endif
94681 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94682         "subs	%[r], %[r], #0x40\n\t"
94683 #else
94684         "sub	%[r], %[r], #0x40\n\t"
94685 #endif
94686         "ldr	r4, [%[a], #60]\n\t"
94687         "str	r3, [%[r], #68]\n\t"
94688 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94689         "lsrs	r6, r4, #1\n\t"
94690 #else
94691         "lsr	r6, r4, #1\n\t"
94692 #endif
94693 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94694         "lsls	r4, r4, %[n]\n\t"
94695 #else
94696         "lsl	r4, r4, %[n]\n\t"
94697 #endif
94698 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94699         "lsrs	r6, r6, r7\n\t"
94700 #else
94701         "lsr	r6, r6, r7\n\t"
94702 #endif
94703 #ifdef WOLFSSL_KEIL
94704         "orrs	r5, r5, r6\n\t"
94705 #elif defined(__clang__)
94706         "orrs	r5, r6\n\t"
94707 #else
94708         "orr	r5, r6\n\t"
94709 #endif
94710         "ldr	r3, [%[a], #56]\n\t"
94711         "str	r5, [%[r], #64]\n\t"
94712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94713         "lsrs	r6, r3, #1\n\t"
94714 #else
94715         "lsr	r6, r3, #1\n\t"
94716 #endif
94717 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94718         "lsls	r3, r3, %[n]\n\t"
94719 #else
94720         "lsl	r3, r3, %[n]\n\t"
94721 #endif
94722 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94723         "lsrs	r6, r6, r7\n\t"
94724 #else
94725         "lsr	r6, r6, r7\n\t"
94726 #endif
94727 #ifdef WOLFSSL_KEIL
94728         "orrs	r4, r4, r6\n\t"
94729 #elif defined(__clang__)
94730         "orrs	r4, r6\n\t"
94731 #else
94732         "orr	r4, r6\n\t"
94733 #endif
94734         "ldr	r5, [%[a], #52]\n\t"
94735         "str	r4, [%[r], #60]\n\t"
94736 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94737         "lsrs	r6, r5, #1\n\t"
94738 #else
94739         "lsr	r6, r5, #1\n\t"
94740 #endif
94741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94742         "lsls	r5, r5, %[n]\n\t"
94743 #else
94744         "lsl	r5, r5, %[n]\n\t"
94745 #endif
94746 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94747         "lsrs	r6, r6, r7\n\t"
94748 #else
94749         "lsr	r6, r6, r7\n\t"
94750 #endif
94751 #ifdef WOLFSSL_KEIL
94752         "orrs	r3, r3, r6\n\t"
94753 #elif defined(__clang__)
94754         "orrs	r3, r6\n\t"
94755 #else
94756         "orr	r3, r6\n\t"
94757 #endif
94758         "ldr	r4, [%[a], #48]\n\t"
94759         "str	r3, [%[r], #56]\n\t"
94760 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94761         "lsrs	r6, r4, #1\n\t"
94762 #else
94763         "lsr	r6, r4, #1\n\t"
94764 #endif
94765 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94766         "lsls	r4, r4, %[n]\n\t"
94767 #else
94768         "lsl	r4, r4, %[n]\n\t"
94769 #endif
94770 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94771         "lsrs	r6, r6, r7\n\t"
94772 #else
94773         "lsr	r6, r6, r7\n\t"
94774 #endif
94775 #ifdef WOLFSSL_KEIL
94776         "orrs	r5, r5, r6\n\t"
94777 #elif defined(__clang__)
94778         "orrs	r5, r6\n\t"
94779 #else
94780         "orr	r5, r6\n\t"
94781 #endif
94782         "ldr	r3, [%[a], #44]\n\t"
94783         "str	r5, [%[r], #52]\n\t"
94784 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94785         "lsrs	r6, r3, #1\n\t"
94786 #else
94787         "lsr	r6, r3, #1\n\t"
94788 #endif
94789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94790         "lsls	r3, r3, %[n]\n\t"
94791 #else
94792         "lsl	r3, r3, %[n]\n\t"
94793 #endif
94794 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94795         "lsrs	r6, r6, r7\n\t"
94796 #else
94797         "lsr	r6, r6, r7\n\t"
94798 #endif
94799 #ifdef WOLFSSL_KEIL
94800         "orrs	r4, r4, r6\n\t"
94801 #elif defined(__clang__)
94802         "orrs	r4, r6\n\t"
94803 #else
94804         "orr	r4, r6\n\t"
94805 #endif
94806         "ldr	r5, [%[a], #40]\n\t"
94807         "str	r4, [%[r], #48]\n\t"
94808 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94809         "lsrs	r6, r5, #1\n\t"
94810 #else
94811         "lsr	r6, r5, #1\n\t"
94812 #endif
94813 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94814         "lsls	r5, r5, %[n]\n\t"
94815 #else
94816         "lsl	r5, r5, %[n]\n\t"
94817 #endif
94818 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94819         "lsrs	r6, r6, r7\n\t"
94820 #else
94821         "lsr	r6, r6, r7\n\t"
94822 #endif
94823 #ifdef WOLFSSL_KEIL
94824         "orrs	r3, r3, r6\n\t"
94825 #elif defined(__clang__)
94826         "orrs	r3, r6\n\t"
94827 #else
94828         "orr	r3, r6\n\t"
94829 #endif
94830         "ldr	r4, [%[a], #36]\n\t"
94831         "str	r3, [%[r], #44]\n\t"
94832 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94833         "lsrs	r6, r4, #1\n\t"
94834 #else
94835         "lsr	r6, r4, #1\n\t"
94836 #endif
94837 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94838         "lsls	r4, r4, %[n]\n\t"
94839 #else
94840         "lsl	r4, r4, %[n]\n\t"
94841 #endif
94842 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94843         "lsrs	r6, r6, r7\n\t"
94844 #else
94845         "lsr	r6, r6, r7\n\t"
94846 #endif
94847 #ifdef WOLFSSL_KEIL
94848         "orrs	r5, r5, r6\n\t"
94849 #elif defined(__clang__)
94850         "orrs	r5, r6\n\t"
94851 #else
94852         "orr	r5, r6\n\t"
94853 #endif
94854         "ldr	r3, [%[a], #32]\n\t"
94855         "str	r5, [%[r], #40]\n\t"
94856 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94857         "lsrs	r6, r3, #1\n\t"
94858 #else
94859         "lsr	r6, r3, #1\n\t"
94860 #endif
94861 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94862         "lsls	r3, r3, %[n]\n\t"
94863 #else
94864         "lsl	r3, r3, %[n]\n\t"
94865 #endif
94866 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94867         "lsrs	r6, r6, r7\n\t"
94868 #else
94869         "lsr	r6, r6, r7\n\t"
94870 #endif
94871 #ifdef WOLFSSL_KEIL
94872         "orrs	r4, r4, r6\n\t"
94873 #elif defined(__clang__)
94874         "orrs	r4, r6\n\t"
94875 #else
94876         "orr	r4, r6\n\t"
94877 #endif
94878         "ldr	r5, [%[a], #28]\n\t"
94879         "str	r4, [%[r], #36]\n\t"
94880 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94881         "lsrs	r6, r5, #1\n\t"
94882 #else
94883         "lsr	r6, r5, #1\n\t"
94884 #endif
94885 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94886         "lsls	r5, r5, %[n]\n\t"
94887 #else
94888         "lsl	r5, r5, %[n]\n\t"
94889 #endif
94890 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94891         "lsrs	r6, r6, r7\n\t"
94892 #else
94893         "lsr	r6, r6, r7\n\t"
94894 #endif
94895 #ifdef WOLFSSL_KEIL
94896         "orrs	r3, r3, r6\n\t"
94897 #elif defined(__clang__)
94898         "orrs	r3, r6\n\t"
94899 #else
94900         "orr	r3, r6\n\t"
94901 #endif
94902         "ldr	r4, [%[a], #24]\n\t"
94903         "str	r3, [%[r], #32]\n\t"
94904 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94905         "lsrs	r6, r4, #1\n\t"
94906 #else
94907         "lsr	r6, r4, #1\n\t"
94908 #endif
94909 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94910         "lsls	r4, r4, %[n]\n\t"
94911 #else
94912         "lsl	r4, r4, %[n]\n\t"
94913 #endif
94914 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94915         "lsrs	r6, r6, r7\n\t"
94916 #else
94917         "lsr	r6, r6, r7\n\t"
94918 #endif
94919 #ifdef WOLFSSL_KEIL
94920         "orrs	r5, r5, r6\n\t"
94921 #elif defined(__clang__)
94922         "orrs	r5, r6\n\t"
94923 #else
94924         "orr	r5, r6\n\t"
94925 #endif
94926         "ldr	r3, [%[a], #20]\n\t"
94927         "str	r5, [%[r], #28]\n\t"
94928 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94929         "lsrs	r6, r3, #1\n\t"
94930 #else
94931         "lsr	r6, r3, #1\n\t"
94932 #endif
94933 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94934         "lsls	r3, r3, %[n]\n\t"
94935 #else
94936         "lsl	r3, r3, %[n]\n\t"
94937 #endif
94938 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94939         "lsrs	r6, r6, r7\n\t"
94940 #else
94941         "lsr	r6, r6, r7\n\t"
94942 #endif
94943 #ifdef WOLFSSL_KEIL
94944         "orrs	r4, r4, r6\n\t"
94945 #elif defined(__clang__)
94946         "orrs	r4, r6\n\t"
94947 #else
94948         "orr	r4, r6\n\t"
94949 #endif
94950         "ldr	r5, [%[a], #16]\n\t"
94951         "str	r4, [%[r], #24]\n\t"
94952 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94953         "lsrs	r6, r5, #1\n\t"
94954 #else
94955         "lsr	r6, r5, #1\n\t"
94956 #endif
94957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94958         "lsls	r5, r5, %[n]\n\t"
94959 #else
94960         "lsl	r5, r5, %[n]\n\t"
94961 #endif
94962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94963         "lsrs	r6, r6, r7\n\t"
94964 #else
94965         "lsr	r6, r6, r7\n\t"
94966 #endif
94967 #ifdef WOLFSSL_KEIL
94968         "orrs	r3, r3, r6\n\t"
94969 #elif defined(__clang__)
94970         "orrs	r3, r6\n\t"
94971 #else
94972         "orr	r3, r6\n\t"
94973 #endif
94974         "ldr	r4, [%[a], #12]\n\t"
94975         "str	r3, [%[r], #20]\n\t"
94976 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94977         "lsrs	r6, r4, #1\n\t"
94978 #else
94979         "lsr	r6, r4, #1\n\t"
94980 #endif
94981 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94982         "lsls	r4, r4, %[n]\n\t"
94983 #else
94984         "lsl	r4, r4, %[n]\n\t"
94985 #endif
94986 #if defined(__clang__) || defined(WOLFSSL_KEIL)
94987         "lsrs	r6, r6, r7\n\t"
94988 #else
94989         "lsr	r6, r6, r7\n\t"
94990 #endif
94991 #ifdef WOLFSSL_KEIL
94992         "orrs	r5, r5, r6\n\t"
94993 #elif defined(__clang__)
94994         "orrs	r5, r6\n\t"
94995 #else
94996         "orr	r5, r6\n\t"
94997 #endif
94998         "ldr	r3, [%[a], #8]\n\t"
94999         "str	r5, [%[r], #16]\n\t"
95000 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95001         "lsrs	r6, r3, #1\n\t"
95002 #else
95003         "lsr	r6, r3, #1\n\t"
95004 #endif
95005 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95006         "lsls	r3, r3, %[n]\n\t"
95007 #else
95008         "lsl	r3, r3, %[n]\n\t"
95009 #endif
95010 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95011         "lsrs	r6, r6, r7\n\t"
95012 #else
95013         "lsr	r6, r6, r7\n\t"
95014 #endif
95015 #ifdef WOLFSSL_KEIL
95016         "orrs	r4, r4, r6\n\t"
95017 #elif defined(__clang__)
95018         "orrs	r4, r6\n\t"
95019 #else
95020         "orr	r4, r6\n\t"
95021 #endif
95022         "ldr	r5, [%[a], #4]\n\t"
95023         "str	r4, [%[r], #12]\n\t"
95024 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95025         "lsrs	r6, r5, #1\n\t"
95026 #else
95027         "lsr	r6, r5, #1\n\t"
95028 #endif
95029 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95030         "lsls	r5, r5, %[n]\n\t"
95031 #else
95032         "lsl	r5, r5, %[n]\n\t"
95033 #endif
95034 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95035         "lsrs	r6, r6, r7\n\t"
95036 #else
95037         "lsr	r6, r6, r7\n\t"
95038 #endif
95039 #ifdef WOLFSSL_KEIL
95040         "orrs	r3, r3, r6\n\t"
95041 #elif defined(__clang__)
95042         "orrs	r3, r6\n\t"
95043 #else
95044         "orr	r3, r6\n\t"
95045 #endif
95046         "ldr	r4, [%[a]]\n\t"
95047         "str	r3, [%[r], #8]\n\t"
95048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95049         "lsrs	r6, r4, #1\n\t"
95050 #else
95051         "lsr	r6, r4, #1\n\t"
95052 #endif
95053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95054         "lsls	r4, r4, %[n]\n\t"
95055 #else
95056         "lsl	r4, r4, %[n]\n\t"
95057 #endif
95058 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95059         "lsrs	r6, r6, r7\n\t"
95060 #else
95061         "lsr	r6, r6, r7\n\t"
95062 #endif
95063 #ifdef WOLFSSL_KEIL
95064         "orrs	r5, r5, r6\n\t"
95065 #elif defined(__clang__)
95066         "orrs	r5, r6\n\t"
95067 #else
95068         "orr	r5, r6\n\t"
95069 #endif
95070 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95071         "subs	%[a], %[a], #0x40\n\t"
95072 #else
95073         "sub	%[a], %[a], #0x40\n\t"
95074 #endif
95075 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95076         "subs	%[r], %[r], #0x40\n\t"
95077 #else
95078         "sub	%[r], %[r], #0x40\n\t"
95079 #endif
95080         "ldr	r3, [%[a], #60]\n\t"
95081         "str	r5, [%[r], #68]\n\t"
95082 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95083         "lsrs	r6, r3, #1\n\t"
95084 #else
95085         "lsr	r6, r3, #1\n\t"
95086 #endif
95087 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95088         "lsls	r3, r3, %[n]\n\t"
95089 #else
95090         "lsl	r3, r3, %[n]\n\t"
95091 #endif
95092 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95093         "lsrs	r6, r6, r7\n\t"
95094 #else
95095         "lsr	r6, r6, r7\n\t"
95096 #endif
95097 #ifdef WOLFSSL_KEIL
95098         "orrs	r4, r4, r6\n\t"
95099 #elif defined(__clang__)
95100         "orrs	r4, r6\n\t"
95101 #else
95102         "orr	r4, r6\n\t"
95103 #endif
95104         "ldr	r5, [%[a], #56]\n\t"
95105         "str	r4, [%[r], #64]\n\t"
95106 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95107         "lsrs	r6, r5, #1\n\t"
95108 #else
95109         "lsr	r6, r5, #1\n\t"
95110 #endif
95111 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95112         "lsls	r5, r5, %[n]\n\t"
95113 #else
95114         "lsl	r5, r5, %[n]\n\t"
95115 #endif
95116 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95117         "lsrs	r6, r6, r7\n\t"
95118 #else
95119         "lsr	r6, r6, r7\n\t"
95120 #endif
95121 #ifdef WOLFSSL_KEIL
95122         "orrs	r3, r3, r6\n\t"
95123 #elif defined(__clang__)
95124         "orrs	r3, r6\n\t"
95125 #else
95126         "orr	r3, r6\n\t"
95127 #endif
95128         "ldr	r4, [%[a], #52]\n\t"
95129         "str	r3, [%[r], #60]\n\t"
95130 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95131         "lsrs	r6, r4, #1\n\t"
95132 #else
95133         "lsr	r6, r4, #1\n\t"
95134 #endif
95135 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95136         "lsls	r4, r4, %[n]\n\t"
95137 #else
95138         "lsl	r4, r4, %[n]\n\t"
95139 #endif
95140 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95141         "lsrs	r6, r6, r7\n\t"
95142 #else
95143         "lsr	r6, r6, r7\n\t"
95144 #endif
95145 #ifdef WOLFSSL_KEIL
95146         "orrs	r5, r5, r6\n\t"
95147 #elif defined(__clang__)
95148         "orrs	r5, r6\n\t"
95149 #else
95150         "orr	r5, r6\n\t"
95151 #endif
95152         "ldr	r3, [%[a], #48]\n\t"
95153         "str	r5, [%[r], #56]\n\t"
95154 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95155         "lsrs	r6, r3, #1\n\t"
95156 #else
95157         "lsr	r6, r3, #1\n\t"
95158 #endif
95159 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95160         "lsls	r3, r3, %[n]\n\t"
95161 #else
95162         "lsl	r3, r3, %[n]\n\t"
95163 #endif
95164 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95165         "lsrs	r6, r6, r7\n\t"
95166 #else
95167         "lsr	r6, r6, r7\n\t"
95168 #endif
95169 #ifdef WOLFSSL_KEIL
95170         "orrs	r4, r4, r6\n\t"
95171 #elif defined(__clang__)
95172         "orrs	r4, r6\n\t"
95173 #else
95174         "orr	r4, r6\n\t"
95175 #endif
95176         "ldr	r5, [%[a], #44]\n\t"
95177         "str	r4, [%[r], #52]\n\t"
95178 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95179         "lsrs	r6, r5, #1\n\t"
95180 #else
95181         "lsr	r6, r5, #1\n\t"
95182 #endif
95183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95184         "lsls	r5, r5, %[n]\n\t"
95185 #else
95186         "lsl	r5, r5, %[n]\n\t"
95187 #endif
95188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95189         "lsrs	r6, r6, r7\n\t"
95190 #else
95191         "lsr	r6, r6, r7\n\t"
95192 #endif
95193 #ifdef WOLFSSL_KEIL
95194         "orrs	r3, r3, r6\n\t"
95195 #elif defined(__clang__)
95196         "orrs	r3, r6\n\t"
95197 #else
95198         "orr	r3, r6\n\t"
95199 #endif
95200         "ldr	r4, [%[a], #40]\n\t"
95201         "str	r3, [%[r], #48]\n\t"
95202 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95203         "lsrs	r6, r4, #1\n\t"
95204 #else
95205         "lsr	r6, r4, #1\n\t"
95206 #endif
95207 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95208         "lsls	r4, r4, %[n]\n\t"
95209 #else
95210         "lsl	r4, r4, %[n]\n\t"
95211 #endif
95212 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95213         "lsrs	r6, r6, r7\n\t"
95214 #else
95215         "lsr	r6, r6, r7\n\t"
95216 #endif
95217 #ifdef WOLFSSL_KEIL
95218         "orrs	r5, r5, r6\n\t"
95219 #elif defined(__clang__)
95220         "orrs	r5, r6\n\t"
95221 #else
95222         "orr	r5, r6\n\t"
95223 #endif
95224         "ldr	r3, [%[a], #36]\n\t"
95225         "str	r5, [%[r], #44]\n\t"
95226 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95227         "lsrs	r6, r3, #1\n\t"
95228 #else
95229         "lsr	r6, r3, #1\n\t"
95230 #endif
95231 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95232         "lsls	r3, r3, %[n]\n\t"
95233 #else
95234         "lsl	r3, r3, %[n]\n\t"
95235 #endif
95236 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95237         "lsrs	r6, r6, r7\n\t"
95238 #else
95239         "lsr	r6, r6, r7\n\t"
95240 #endif
95241 #ifdef WOLFSSL_KEIL
95242         "orrs	r4, r4, r6\n\t"
95243 #elif defined(__clang__)
95244         "orrs	r4, r6\n\t"
95245 #else
95246         "orr	r4, r6\n\t"
95247 #endif
95248         "ldr	r5, [%[a], #32]\n\t"
95249         "str	r4, [%[r], #40]\n\t"
95250 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95251         "lsrs	r6, r5, #1\n\t"
95252 #else
95253         "lsr	r6, r5, #1\n\t"
95254 #endif
95255 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95256         "lsls	r5, r5, %[n]\n\t"
95257 #else
95258         "lsl	r5, r5, %[n]\n\t"
95259 #endif
95260 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95261         "lsrs	r6, r6, r7\n\t"
95262 #else
95263         "lsr	r6, r6, r7\n\t"
95264 #endif
95265 #ifdef WOLFSSL_KEIL
95266         "orrs	r3, r3, r6\n\t"
95267 #elif defined(__clang__)
95268         "orrs	r3, r6\n\t"
95269 #else
95270         "orr	r3, r6\n\t"
95271 #endif
95272         "ldr	r4, [%[a], #28]\n\t"
95273         "str	r3, [%[r], #36]\n\t"
95274 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95275         "lsrs	r6, r4, #1\n\t"
95276 #else
95277         "lsr	r6, r4, #1\n\t"
95278 #endif
95279 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95280         "lsls	r4, r4, %[n]\n\t"
95281 #else
95282         "lsl	r4, r4, %[n]\n\t"
95283 #endif
95284 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95285         "lsrs	r6, r6, r7\n\t"
95286 #else
95287         "lsr	r6, r6, r7\n\t"
95288 #endif
95289 #ifdef WOLFSSL_KEIL
95290         "orrs	r5, r5, r6\n\t"
95291 #elif defined(__clang__)
95292         "orrs	r5, r6\n\t"
95293 #else
95294         "orr	r5, r6\n\t"
95295 #endif
95296         "ldr	r3, [%[a], #24]\n\t"
95297         "str	r5, [%[r], #32]\n\t"
95298 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95299         "lsrs	r6, r3, #1\n\t"
95300 #else
95301         "lsr	r6, r3, #1\n\t"
95302 #endif
95303 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95304         "lsls	r3, r3, %[n]\n\t"
95305 #else
95306         "lsl	r3, r3, %[n]\n\t"
95307 #endif
95308 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95309         "lsrs	r6, r6, r7\n\t"
95310 #else
95311         "lsr	r6, r6, r7\n\t"
95312 #endif
95313 #ifdef WOLFSSL_KEIL
95314         "orrs	r4, r4, r6\n\t"
95315 #elif defined(__clang__)
95316         "orrs	r4, r6\n\t"
95317 #else
95318         "orr	r4, r6\n\t"
95319 #endif
95320         "ldr	r5, [%[a], #20]\n\t"
95321         "str	r4, [%[r], #28]\n\t"
95322 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95323         "lsrs	r6, r5, #1\n\t"
95324 #else
95325         "lsr	r6, r5, #1\n\t"
95326 #endif
95327 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95328         "lsls	r5, r5, %[n]\n\t"
95329 #else
95330         "lsl	r5, r5, %[n]\n\t"
95331 #endif
95332 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95333         "lsrs	r6, r6, r7\n\t"
95334 #else
95335         "lsr	r6, r6, r7\n\t"
95336 #endif
95337 #ifdef WOLFSSL_KEIL
95338         "orrs	r3, r3, r6\n\t"
95339 #elif defined(__clang__)
95340         "orrs	r3, r6\n\t"
95341 #else
95342         "orr	r3, r6\n\t"
95343 #endif
95344         "ldr	r4, [%[a], #16]\n\t"
95345         "str	r3, [%[r], #24]\n\t"
95346 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95347         "lsrs	r6, r4, #1\n\t"
95348 #else
95349         "lsr	r6, r4, #1\n\t"
95350 #endif
95351 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95352         "lsls	r4, r4, %[n]\n\t"
95353 #else
95354         "lsl	r4, r4, %[n]\n\t"
95355 #endif
95356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95357         "lsrs	r6, r6, r7\n\t"
95358 #else
95359         "lsr	r6, r6, r7\n\t"
95360 #endif
95361 #ifdef WOLFSSL_KEIL
95362         "orrs	r5, r5, r6\n\t"
95363 #elif defined(__clang__)
95364         "orrs	r5, r6\n\t"
95365 #else
95366         "orr	r5, r6\n\t"
95367 #endif
95368         "ldr	r3, [%[a], #12]\n\t"
95369         "str	r5, [%[r], #20]\n\t"
95370 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95371         "lsrs	r6, r3, #1\n\t"
95372 #else
95373         "lsr	r6, r3, #1\n\t"
95374 #endif
95375 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95376         "lsls	r3, r3, %[n]\n\t"
95377 #else
95378         "lsl	r3, r3, %[n]\n\t"
95379 #endif
95380 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95381         "lsrs	r6, r6, r7\n\t"
95382 #else
95383         "lsr	r6, r6, r7\n\t"
95384 #endif
95385 #ifdef WOLFSSL_KEIL
95386         "orrs	r4, r4, r6\n\t"
95387 #elif defined(__clang__)
95388         "orrs	r4, r6\n\t"
95389 #else
95390         "orr	r4, r6\n\t"
95391 #endif
95392         "ldr	r5, [%[a], #8]\n\t"
95393         "str	r4, [%[r], #16]\n\t"
95394 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95395         "lsrs	r6, r5, #1\n\t"
95396 #else
95397         "lsr	r6, r5, #1\n\t"
95398 #endif
95399 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95400         "lsls	r5, r5, %[n]\n\t"
95401 #else
95402         "lsl	r5, r5, %[n]\n\t"
95403 #endif
95404 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95405         "lsrs	r6, r6, r7\n\t"
95406 #else
95407         "lsr	r6, r6, r7\n\t"
95408 #endif
95409 #ifdef WOLFSSL_KEIL
95410         "orrs	r3, r3, r6\n\t"
95411 #elif defined(__clang__)
95412         "orrs	r3, r6\n\t"
95413 #else
95414         "orr	r3, r6\n\t"
95415 #endif
95416         "ldr	r4, [%[a], #4]\n\t"
95417         "str	r3, [%[r], #12]\n\t"
95418 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95419         "lsrs	r6, r4, #1\n\t"
95420 #else
95421         "lsr	r6, r4, #1\n\t"
95422 #endif
95423 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95424         "lsls	r4, r4, %[n]\n\t"
95425 #else
95426         "lsl	r4, r4, %[n]\n\t"
95427 #endif
95428 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95429         "lsrs	r6, r6, r7\n\t"
95430 #else
95431         "lsr	r6, r6, r7\n\t"
95432 #endif
95433 #ifdef WOLFSSL_KEIL
95434         "orrs	r5, r5, r6\n\t"
95435 #elif defined(__clang__)
95436         "orrs	r5, r6\n\t"
95437 #else
95438         "orr	r5, r6\n\t"
95439 #endif
95440         "ldr	r3, [%[a]]\n\t"
95441         "str	r5, [%[r], #8]\n\t"
95442 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95443         "lsrs	r6, r3, #1\n\t"
95444 #else
95445         "lsr	r6, r3, #1\n\t"
95446 #endif
95447 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95448         "lsls	r3, r3, %[n]\n\t"
95449 #else
95450         "lsl	r3, r3, %[n]\n\t"
95451 #endif
95452 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95453         "lsrs	r6, r6, r7\n\t"
95454 #else
95455         "lsr	r6, r6, r7\n\t"
95456 #endif
95457 #ifdef WOLFSSL_KEIL
95458         "orrs	r4, r4, r6\n\t"
95459 #elif defined(__clang__)
95460         "orrs	r4, r6\n\t"
95461 #else
95462         "orr	r4, r6\n\t"
95463 #endif
95464         "str	r3, [%[r]]\n\t"
95465         "str	r4, [%[r], #4]\n\t"
95466         : [r] "+r" (r), [a] "+r" (a), [n] "+r" (n)
95467         :
95468         : "memory", "r3", "r4", "r5", "r6", "r7"
95469     );
95470 }
95471 
95472 /* Modular exponentiate 2 to the e mod m. (r = 2^e mod m)
95473  *
95474  * r     A single precision number that is the result of the operation.
95475  * e     A single precision number that is the exponent.
95476  * bits  The number of bits in the exponent.
95477  * m     A single precision number that is the modulus.
95478  * returns  0 on success.
95479  * returns  MEMORY_E on dynamic memory allocation failure.
95480  * returns  MP_VAL when base is even.
95481  */
sp_4096_mod_exp_2_128(sp_digit * r,const sp_digit * e,int bits,const sp_digit * m)95482 static int sp_4096_mod_exp_2_128(sp_digit* r, const sp_digit* e, int bits,
95483         const sp_digit* m)
95484 {
95485 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
95486     sp_digit* td = NULL;
95487 #else
95488     sp_digit td[385];
95489 #endif
95490     sp_digit* norm = NULL;
95491     sp_digit* tmp = NULL;
95492     sp_digit mp = 1;
95493     sp_digit n;
95494     sp_digit o;
95495     sp_digit mask;
95496     int i;
95497     int c;
95498     byte y;
95499     int err = MP_OKAY;
95500 
95501     if ((m[0] & 1) == 0) {
95502         err = MP_VAL;
95503     }
95504 
95505 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
95506     if (err == MP_OKAY) {
95507         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 385, NULL,
95508                                 DYNAMIC_TYPE_TMP_BUFFER);
95509         if (td == NULL)
95510             err = MEMORY_E;
95511     }
95512 #endif
95513 
95514     if (err == MP_OKAY) {
95515         norm = td;
95516         tmp = td + 256;
95517 
95518         sp_4096_mont_setup(m, &mp);
95519         sp_4096_mont_norm_128(norm, m);
95520 
95521         i = (bits - 1) / 32;
95522         n = e[i--];
95523         c = bits & 31;
95524         if (c == 0) {
95525             c = 32;
95526         }
95527         c -= bits % 5;
95528         if (c == 32) {
95529             c = 27;
95530         }
95531         if (c < 0) {
95532             /* Number of bits in top word is less than number needed. */
95533             c = -c;
95534             y = (byte)(n << c);
95535             n = e[i--];
95536             y |= (byte)(n >> (64 - c));
95537             n <<= c;
95538             c = 64 - c;
95539         }
95540         else {
95541             y = (byte)(n >> c);
95542             n <<= 32 - c;
95543         }
95544         sp_4096_lshift_128(r, norm, y);
95545         for (; i>=0 || c>=5; ) {
95546             if (c == 0) {
95547                 n = e[i--];
95548                 y = (byte)(n >> 27);
95549                 n <<= 5;
95550                 c = 27;
95551             }
95552             else if (c < 5) {
95553                 y = (byte)(n >> 27);
95554                 n = e[i--];
95555                 c = 5 - c;
95556                 y |= (byte)(n >> (32 - c));
95557                 n <<= c;
95558                 c = 32 - c;
95559             }
95560             else {
95561                 y = (byte)((n >> 27) & 0x1f);
95562                 n <<= 5;
95563                 c -= 5;
95564             }
95565 
95566             sp_4096_mont_sqr_128(r, r, m, mp);
95567             sp_4096_mont_sqr_128(r, r, m, mp);
95568             sp_4096_mont_sqr_128(r, r, m, mp);
95569             sp_4096_mont_sqr_128(r, r, m, mp);
95570             sp_4096_mont_sqr_128(r, r, m, mp);
95571 
95572             sp_4096_lshift_128(r, r, y);
95573             sp_4096_mul_d_128(tmp, norm, r[128]);
95574             r[128] = 0;
95575             o = sp_4096_add_128(r, r, tmp);
95576             sp_4096_cond_sub_128(r, r, m, (sp_digit)0 - o);
95577         }
95578 
95579         XMEMSET(&r[128], 0, sizeof(sp_digit) * 128U);
95580         sp_4096_mont_reduce_128(r, m, mp);
95581 
95582         mask = 0 - (sp_4096_cmp_128(r, m) >= 0);
95583         sp_4096_cond_sub_128(r, r, m, mask);
95584     }
95585 
95586 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
95587     if (td != NULL)
95588         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
95589 #endif
95590 
95591     return err;
95592 }
95593 #endif /* HAVE_FFDHE_4096 */
95594 
95595 /* Perform the modular exponentiation for Diffie-Hellman.
95596  *
95597  * base     Base.
95598  * exp      Array of bytes that is the exponent.
95599  * expLen   Length of data, in bytes, in exponent.
95600  * mod      Modulus.
95601  * out      Buffer to hold big-endian bytes of exponentiation result.
95602  *          Must be at least 512 bytes long.
95603  * outLen   Length, in bytes, of exponentiation result.
95604  * returns 0 on success, MP_READ_E if there are too many bytes in an array
95605  * and MEMORY_E if memory allocation fails.
95606  */
sp_DhExp_4096(const mp_int * base,const byte * exp,word32 expLen,const mp_int * mod,byte * out,word32 * outLen)95607 int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen,
95608     const mp_int* mod, byte* out, word32* outLen)
95609 {
95610     int err = MP_OKAY;
95611     sp_digit b[256];
95612     sp_digit e[128];
95613     sp_digit m[128];
95614     sp_digit* r = b;
95615     word32 i;
95616 
95617     if (mp_count_bits(base) > 4096) {
95618         err = MP_READ_E;
95619     }
95620     else if (expLen > 512) {
95621         err = MP_READ_E;
95622     }
95623     else if (mp_count_bits(mod) != 4096) {
95624         err = MP_READ_E;
95625     }
95626     else if (mp_iseven(mod)) {
95627         err = MP_VAL;
95628     }
95629 
95630     if (err == MP_OKAY) {
95631         sp_4096_from_mp(b, 128, base);
95632         sp_4096_from_bin(e, 128, exp, expLen);
95633         sp_4096_from_mp(m, 128, mod);
95634 
95635     #ifdef HAVE_FFDHE_4096
95636         if (base->used == 1 && base->dp[0] == 2 && m[127] == (sp_digit)-1)
95637             err = sp_4096_mod_exp_2_128(r, e, expLen * 8, m);
95638         else
95639     #endif
95640             err = sp_4096_mod_exp_128(r, b, e, expLen * 8, m, 0);
95641 
95642     }
95643 
95644     if (err == MP_OKAY) {
95645         sp_4096_to_bin_128(r, out);
95646         *outLen = 512;
95647         for (i=0; i<512 && out[i] == 0; i++) {
95648             /* Search for first non-zero. */
95649         }
95650         *outLen -= i;
95651         XMEMMOVE(out, out + i, *outLen);
95652 
95653     }
95654 
95655     XMEMSET(e, 0, sizeof(e));
95656 
95657     return err;
95658 }
95659 #endif /* WOLFSSL_HAVE_SP_DH */
95660 
95661 #endif /* WOLFSSL_HAVE_SP_DH | (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) */
95662 
95663 #endif /* WOLFSSL_SP_4096 */
95664 
95665 #endif /* WOLFSSL_HAVE_SP_RSA | WOLFSSL_HAVE_SP_DH */
95666 #ifdef WOLFSSL_HAVE_SP_ECC
95667 #ifndef WOLFSSL_SP_NO_256
95668 
95669 /* Point structure to use. */
95670 typedef struct sp_point_256 {
95671     /* X ordinate of point. */
95672     sp_digit x[2 * 8];
95673     /* Y ordinate of point. */
95674     sp_digit y[2 * 8];
95675     /* Z ordinate of point. */
95676     sp_digit z[2 * 8];
95677     /* Indicates point is at infinity. */
95678     int infinity;
95679 } sp_point_256;
95680 
95681 /* The modulus (prime) of the curve P256. */
95682 static const sp_digit p256_mod[8] = {
95683     0xffffffff,0xffffffff,0xffffffff,0x00000000,0x00000000,0x00000000,
95684     0x00000001,0xffffffff
95685 };
95686 /* The Montgomery normalizer for modulus of the curve P256. */
95687 static const sp_digit p256_norm_mod[8] = {
95688     0x00000001,0x00000000,0x00000000,0xffffffff,0xffffffff,0xffffffff,
95689     0xfffffffe,0x00000000
95690 };
95691 /* The Montgomery multiplier for modulus of the curve P256. */
95692 static const sp_digit p256_mp_mod = 0x00000001;
95693 #if defined(WOLFSSL_VALIDATE_ECC_KEYGEN) || defined(HAVE_ECC_SIGN) || \
95694                                             defined(HAVE_ECC_VERIFY)
95695 /* The order of the curve P256. */
95696 static const sp_digit p256_order[8] = {
95697     0xfc632551,0xf3b9cac2,0xa7179e84,0xbce6faad,0xffffffff,0xffffffff,
95698     0x00000000,0xffffffff
95699 };
95700 #endif
95701 /* The order of the curve P256 minus 2. */
95702 static const sp_digit p256_order2[8] = {
95703     0xfc63254f,0xf3b9cac2,0xa7179e84,0xbce6faad,0xffffffff,0xffffffff,
95704     0x00000000,0xffffffff
95705 };
95706 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
95707 /* The Montgomery normalizer for order of the curve P256. */
95708 static const sp_digit p256_norm_order[8] = {
95709     0x039cdaaf,0x0c46353d,0x58e8617b,0x43190552,0x00000000,0x00000000,
95710     0xffffffff,0x00000000
95711 };
95712 #endif
95713 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
95714 /* The Montgomery multiplier for order of the curve P256. */
95715 static const sp_digit p256_mp_order = 0xee00bc4f;
95716 #endif
95717 /* The base point of curve P256. */
95718 static const sp_point_256 p256_base = {
95719     /* X ordinate */
95720     {
95721         0xd898c296,0xf4a13945,0x2deb33a0,0x77037d81,0x63a440f2,0xf8bce6e5,
95722         0xe12c4247,0x6b17d1f2,
95723         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
95724         (sp_digit)0, (sp_digit)0, (sp_digit)0
95725     },
95726     /* Y ordinate */
95727     {
95728         0x37bf51f5,0xcbb64068,0x6b315ece,0x2bce3357,0x7c0f9e16,0x8ee7eb4a,
95729         0xfe1a7f9b,0x4fe342e2,
95730         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
95731         (sp_digit)0, (sp_digit)0, (sp_digit)0
95732     },
95733     /* Z ordinate */
95734     {
95735         0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
95736         0x00000000,0x00000000,
95737         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
95738         (sp_digit)0, (sp_digit)0, (sp_digit)0
95739     },
95740     /* infinity */
95741     0
95742 };
95743 #if defined(HAVE_ECC_CHECK_KEY) || defined(HAVE_COMP_KEY)
95744 static const sp_digit p256_b[8] = {
95745     0x27d2604b,0x3bce3c3e,0xcc53b0f6,0x651d06b0,0x769886bc,0xb3ebbd55,
95746     0xaa3a93e7,0x5ac635d8
95747 };
95748 #endif
95749 
95750 /* Multiply a and b into r. (r = a * b)
95751  *
95752  * r  A single precision integer.
95753  * a  A single precision integer.
95754  * b  A single precision integer.
95755  */
sp_256_mul_8(sp_digit * r,const sp_digit * a,const sp_digit * b)95756 SP_NOINLINE static void sp_256_mul_8(sp_digit* r, const sp_digit* a,
95757         const sp_digit* b)
95758 {
95759     sp_digit t[8 * 2];
95760     sp_digit* tmp = t;
95761     __asm__ __volatile__ (
95762         "movs	r3, #0\n\t"
95763         "movs	r4, #0\n\t"
95764         "mov	r8, r3\n\t"
95765         "mov	r11, %[tmp]\n\t"
95766         "mov	r9, %[a]\n\t"
95767         "mov	r10, %[b]\n\t"
95768         "movs	r6, #32\n\t"
95769         "add	r6, r6, r9\n\t"
95770         "mov	r12, r6\n\t"
95771         "\n"
95772     "L_sp_256_mul_8_words_%=:\n\t"
95773         "movs	%[tmp], #0\n\t"
95774         "movs	r5, #0\n\t"
95775         "movs	r6, #28\n\t"
95776         "mov	%[a], r8\n\t"
95777 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95778         "subs	%[a], %[a], r6\n\t"
95779 #else
95780         "sub	%[a], %[a], r6\n\t"
95781 #endif
95782 #ifdef WOLFSSL_KEIL
95783         "sbcs	r6, r6, r6\n\t"
95784 #elif defined(__clang__)
95785         "sbcs	r6, r6\n\t"
95786 #else
95787         "sbc	r6, r6\n\t"
95788 #endif
95789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95790         "mvns	r6, r6\n\t"
95791 #else
95792         "mvn	r6, r6\n\t"
95793 #endif
95794 #ifdef WOLFSSL_KEIL
95795         "ands	%[a], %[a], r6\n\t"
95796 #elif defined(__clang__)
95797         "ands	%[a], r6\n\t"
95798 #else
95799         "and	%[a], r6\n\t"
95800 #endif
95801         "mov	%[b], r8\n\t"
95802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95803         "subs	%[b], %[b], %[a]\n\t"
95804 #else
95805         "sub	%[b], %[b], %[a]\n\t"
95806 #endif
95807         "add	%[a], %[a], r9\n\t"
95808         "add	%[b], %[b], r10\n\t"
95809         "\n"
95810     "L_sp_256_mul_8_mul_%=:\n\t"
95811         "# Multiply Start\n\t"
95812         "ldrh	r6, [%[a]]\n\t"
95813         "ldrh	r7, [%[b]]\n\t"
95814 #ifdef WOLFSSL_KEIL
95815         "muls	r7, r6, r7\n\t"
95816 #elif defined(__clang__)
95817         "muls	r7, r6\n\t"
95818 #else
95819         "mul	r7, r6\n\t"
95820 #endif
95821 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95822         "adds	r3, r3, r7\n\t"
95823 #else
95824         "add	r3, r3, r7\n\t"
95825 #endif
95826 #ifdef WOLFSSL_KEIL
95827         "adcs	r4, r4, %[tmp]\n\t"
95828 #elif defined(__clang__)
95829         "adcs	r4, %[tmp]\n\t"
95830 #else
95831         "adc	r4, %[tmp]\n\t"
95832 #endif
95833 #ifdef WOLFSSL_KEIL
95834         "adcs	r5, r5, %[tmp]\n\t"
95835 #elif defined(__clang__)
95836         "adcs	r5, %[tmp]\n\t"
95837 #else
95838         "adc	r5, %[tmp]\n\t"
95839 #endif
95840         "ldr	r7, [%[b]]\n\t"
95841 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95842         "lsrs	r7, r7, #16\n\t"
95843 #else
95844         "lsr	r7, r7, #16\n\t"
95845 #endif
95846 #ifdef WOLFSSL_KEIL
95847         "muls	r6, r7, r6\n\t"
95848 #elif defined(__clang__)
95849         "muls	r6, r7\n\t"
95850 #else
95851         "mul	r6, r7\n\t"
95852 #endif
95853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95854         "lsrs	r7, r6, #16\n\t"
95855 #else
95856         "lsr	r7, r6, #16\n\t"
95857 #endif
95858 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95859         "lsls	r6, r6, #16\n\t"
95860 #else
95861         "lsl	r6, r6, #16\n\t"
95862 #endif
95863 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95864         "adds	r3, r3, r6\n\t"
95865 #else
95866         "add	r3, r3, r6\n\t"
95867 #endif
95868 #ifdef WOLFSSL_KEIL
95869         "adcs	r4, r4, r7\n\t"
95870 #elif defined(__clang__)
95871         "adcs	r4, r7\n\t"
95872 #else
95873         "adc	r4, r7\n\t"
95874 #endif
95875 #ifdef WOLFSSL_KEIL
95876         "adcs	r5, r5, %[tmp]\n\t"
95877 #elif defined(__clang__)
95878         "adcs	r5, %[tmp]\n\t"
95879 #else
95880         "adc	r5, %[tmp]\n\t"
95881 #endif
95882         "ldr	r6, [%[a]]\n\t"
95883         "ldr	r7, [%[b]]\n\t"
95884 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95885         "lsrs	r6, r6, #16\n\t"
95886 #else
95887         "lsr	r6, r6, #16\n\t"
95888 #endif
95889 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95890         "lsrs	r7, r7, #16\n\t"
95891 #else
95892         "lsr	r7, r7, #16\n\t"
95893 #endif
95894 #ifdef WOLFSSL_KEIL
95895         "muls	r7, r6, r7\n\t"
95896 #elif defined(__clang__)
95897         "muls	r7, r6\n\t"
95898 #else
95899         "mul	r7, r6\n\t"
95900 #endif
95901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95902         "adds	r4, r4, r7\n\t"
95903 #else
95904         "add	r4, r4, r7\n\t"
95905 #endif
95906 #ifdef WOLFSSL_KEIL
95907         "adcs	r5, r5, %[tmp]\n\t"
95908 #elif defined(__clang__)
95909         "adcs	r5, %[tmp]\n\t"
95910 #else
95911         "adc	r5, %[tmp]\n\t"
95912 #endif
95913         "ldrh	r7, [%[b]]\n\t"
95914 #ifdef WOLFSSL_KEIL
95915         "muls	r6, r7, r6\n\t"
95916 #elif defined(__clang__)
95917         "muls	r6, r7\n\t"
95918 #else
95919         "mul	r6, r7\n\t"
95920 #endif
95921 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95922         "lsrs	r7, r6, #16\n\t"
95923 #else
95924         "lsr	r7, r6, #16\n\t"
95925 #endif
95926 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95927         "lsls	r6, r6, #16\n\t"
95928 #else
95929         "lsl	r6, r6, #16\n\t"
95930 #endif
95931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95932         "adds	r3, r3, r6\n\t"
95933 #else
95934         "add	r3, r3, r6\n\t"
95935 #endif
95936 #ifdef WOLFSSL_KEIL
95937         "adcs	r4, r4, r7\n\t"
95938 #elif defined(__clang__)
95939         "adcs	r4, r7\n\t"
95940 #else
95941         "adc	r4, r7\n\t"
95942 #endif
95943 #ifdef WOLFSSL_KEIL
95944         "adcs	r5, r5, %[tmp]\n\t"
95945 #elif defined(__clang__)
95946         "adcs	r5, %[tmp]\n\t"
95947 #else
95948         "adc	r5, %[tmp]\n\t"
95949 #endif
95950         "# Multiply Done\n\t"
95951 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95952         "adds	%[a], %[a], #4\n\t"
95953 #else
95954         "add	%[a], %[a], #4\n\t"
95955 #endif
95956 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95957         "subs	%[b], %[b], #4\n\t"
95958 #else
95959         "sub	%[b], %[b], #4\n\t"
95960 #endif
95961         "cmp	%[a], r12\n\t"
95962         "beq	L_sp_256_mul_8_done_mul_%=\n\t"
95963         "mov	r6, r8\n\t"
95964         "add	r6, r6, r9\n\t"
95965         "cmp	%[a], r6\n\t"
95966         "ble	L_sp_256_mul_8_mul_%=\n\t"
95967         "\n"
95968     "L_sp_256_mul_8_done_mul_%=:\n\t"
95969         "mov	%[tmp], r11\n\t"
95970         "mov	r7, r8\n\t"
95971         "str	r3, [%[tmp], r7]\n\t"
95972         "movs	r3, r4\n\t"
95973         "movs	r4, r5\n\t"
95974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
95975         "adds	r7, r7, #4\n\t"
95976 #else
95977         "add	r7, r7, #4\n\t"
95978 #endif
95979         "mov	r8, r7\n\t"
95980         "movs	r6, #56\n\t"
95981         "cmp	r7, r6\n\t"
95982         "ble	L_sp_256_mul_8_words_%=\n\t"
95983         "str	r3, [%[tmp], r7]\n\t"
95984         "mov	%[a], r9\n\t"
95985         "mov	%[b], r10\n\t"
95986         : [a] "+r" (a), [b] "+r" (b), [tmp] "+r" (tmp)
95987         :
95988         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
95989     );
95990 
95991     XMEMCPY(r, t, sizeof(t));
95992 }
95993 
95994 /* Square a and put result in r. (r = a * a)
95995  *
95996  * r  A single precision integer.
95997  * a  A single precision integer.
95998  */
sp_256_sqr_8(sp_digit * r,const sp_digit * a)95999 SP_NOINLINE static void sp_256_sqr_8(sp_digit* r, const sp_digit* a)
96000 {
96001     __asm__ __volatile__ (
96002         "movs	r3, #0\n\t"
96003         "movs	r4, #0\n\t"
96004         "movs	r5, #0\n\t"
96005         "mov	r8, r3\n\t"
96006         "mov	r11, %[r]\n\t"
96007         "movs	r6, #0x40\n\t"
96008 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96009         "negs	r6, r6\n\t"
96010 #else
96011         "neg	r6, r6\n\t"
96012 #endif
96013         "add	sp, sp, r6\n\t"
96014         "mov	r10, sp\n\t"
96015         "mov	r9, %[a]\n\t"
96016         "\n"
96017     "L_sp_256_sqr_8_words_%=:\n\t"
96018         "movs	%[r], #0\n\t"
96019         "movs	r6, #28\n\t"
96020         "mov	%[a], r8\n\t"
96021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96022         "subs	%[a], %[a], r6\n\t"
96023 #else
96024         "sub	%[a], %[a], r6\n\t"
96025 #endif
96026 #ifdef WOLFSSL_KEIL
96027         "sbcs	r6, r6, r6\n\t"
96028 #elif defined(__clang__)
96029         "sbcs	r6, r6\n\t"
96030 #else
96031         "sbc	r6, r6\n\t"
96032 #endif
96033 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96034         "mvns	r6, r6\n\t"
96035 #else
96036         "mvn	r6, r6\n\t"
96037 #endif
96038 #ifdef WOLFSSL_KEIL
96039         "ands	%[a], %[a], r6\n\t"
96040 #elif defined(__clang__)
96041         "ands	%[a], r6\n\t"
96042 #else
96043         "and	%[a], r6\n\t"
96044 #endif
96045         "mov	r2, r8\n\t"
96046 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96047         "subs	r2, r2, %[a]\n\t"
96048 #else
96049         "sub	r2, r2, %[a]\n\t"
96050 #endif
96051         "add	%[a], %[a], r9\n\t"
96052         "add	r2, r2, r9\n\t"
96053         "\n"
96054     "L_sp_256_sqr_8_mul_%=:\n\t"
96055         "cmp	r2, %[a]\n\t"
96056         "beq	L_sp_256_sqr_8_sqr_%=\n\t"
96057         "# Multiply * 2: Start\n\t"
96058         "ldrh	r6, [%[a]]\n\t"
96059         "ldrh	r7, [r2]\n\t"
96060 #ifdef WOLFSSL_KEIL
96061         "muls	r7, r6, r7\n\t"
96062 #elif defined(__clang__)
96063         "muls	r7, r6\n\t"
96064 #else
96065         "mul	r7, r6\n\t"
96066 #endif
96067 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96068         "adds	r3, r3, r7\n\t"
96069 #else
96070         "add	r3, r3, r7\n\t"
96071 #endif
96072 #ifdef WOLFSSL_KEIL
96073         "adcs	r4, r4, %[r]\n\t"
96074 #elif defined(__clang__)
96075         "adcs	r4, %[r]\n\t"
96076 #else
96077         "adc	r4, %[r]\n\t"
96078 #endif
96079 #ifdef WOLFSSL_KEIL
96080         "adcs	r5, r5, %[r]\n\t"
96081 #elif defined(__clang__)
96082         "adcs	r5, %[r]\n\t"
96083 #else
96084         "adc	r5, %[r]\n\t"
96085 #endif
96086 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96087         "adds	r3, r3, r7\n\t"
96088 #else
96089         "add	r3, r3, r7\n\t"
96090 #endif
96091 #ifdef WOLFSSL_KEIL
96092         "adcs	r4, r4, %[r]\n\t"
96093 #elif defined(__clang__)
96094         "adcs	r4, %[r]\n\t"
96095 #else
96096         "adc	r4, %[r]\n\t"
96097 #endif
96098 #ifdef WOLFSSL_KEIL
96099         "adcs	r5, r5, %[r]\n\t"
96100 #elif defined(__clang__)
96101         "adcs	r5, %[r]\n\t"
96102 #else
96103         "adc	r5, %[r]\n\t"
96104 #endif
96105         "ldr	r7, [r2]\n\t"
96106 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96107         "lsrs	r7, r7, #16\n\t"
96108 #else
96109         "lsr	r7, r7, #16\n\t"
96110 #endif
96111 #ifdef WOLFSSL_KEIL
96112         "muls	r6, r7, r6\n\t"
96113 #elif defined(__clang__)
96114         "muls	r6, r7\n\t"
96115 #else
96116         "mul	r6, r7\n\t"
96117 #endif
96118 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96119         "lsrs	r7, r6, #16\n\t"
96120 #else
96121         "lsr	r7, r6, #16\n\t"
96122 #endif
96123 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96124         "lsls	r6, r6, #16\n\t"
96125 #else
96126         "lsl	r6, r6, #16\n\t"
96127 #endif
96128 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96129         "adds	r3, r3, r6\n\t"
96130 #else
96131         "add	r3, r3, r6\n\t"
96132 #endif
96133 #ifdef WOLFSSL_KEIL
96134         "adcs	r4, r4, r7\n\t"
96135 #elif defined(__clang__)
96136         "adcs	r4, r7\n\t"
96137 #else
96138         "adc	r4, r7\n\t"
96139 #endif
96140 #ifdef WOLFSSL_KEIL
96141         "adcs	r5, r5, %[r]\n\t"
96142 #elif defined(__clang__)
96143         "adcs	r5, %[r]\n\t"
96144 #else
96145         "adc	r5, %[r]\n\t"
96146 #endif
96147 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96148         "adds	r3, r3, r6\n\t"
96149 #else
96150         "add	r3, r3, r6\n\t"
96151 #endif
96152 #ifdef WOLFSSL_KEIL
96153         "adcs	r4, r4, r7\n\t"
96154 #elif defined(__clang__)
96155         "adcs	r4, r7\n\t"
96156 #else
96157         "adc	r4, r7\n\t"
96158 #endif
96159 #ifdef WOLFSSL_KEIL
96160         "adcs	r5, r5, %[r]\n\t"
96161 #elif defined(__clang__)
96162         "adcs	r5, %[r]\n\t"
96163 #else
96164         "adc	r5, %[r]\n\t"
96165 #endif
96166         "ldr	r6, [%[a]]\n\t"
96167         "ldr	r7, [r2]\n\t"
96168 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96169         "lsrs	r6, r6, #16\n\t"
96170 #else
96171         "lsr	r6, r6, #16\n\t"
96172 #endif
96173 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96174         "lsrs	r7, r7, #16\n\t"
96175 #else
96176         "lsr	r7, r7, #16\n\t"
96177 #endif
96178 #ifdef WOLFSSL_KEIL
96179         "muls	r7, r6, r7\n\t"
96180 #elif defined(__clang__)
96181         "muls	r7, r6\n\t"
96182 #else
96183         "mul	r7, r6\n\t"
96184 #endif
96185 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96186         "adds	r4, r4, r7\n\t"
96187 #else
96188         "add	r4, r4, r7\n\t"
96189 #endif
96190 #ifdef WOLFSSL_KEIL
96191         "adcs	r5, r5, %[r]\n\t"
96192 #elif defined(__clang__)
96193         "adcs	r5, %[r]\n\t"
96194 #else
96195         "adc	r5, %[r]\n\t"
96196 #endif
96197 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96198         "adds	r4, r4, r7\n\t"
96199 #else
96200         "add	r4, r4, r7\n\t"
96201 #endif
96202 #ifdef WOLFSSL_KEIL
96203         "adcs	r5, r5, %[r]\n\t"
96204 #elif defined(__clang__)
96205         "adcs	r5, %[r]\n\t"
96206 #else
96207         "adc	r5, %[r]\n\t"
96208 #endif
96209         "ldrh	r7, [r2]\n\t"
96210 #ifdef WOLFSSL_KEIL
96211         "muls	r6, r7, r6\n\t"
96212 #elif defined(__clang__)
96213         "muls	r6, r7\n\t"
96214 #else
96215         "mul	r6, r7\n\t"
96216 #endif
96217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96218         "lsrs	r7, r6, #16\n\t"
96219 #else
96220         "lsr	r7, r6, #16\n\t"
96221 #endif
96222 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96223         "lsls	r6, r6, #16\n\t"
96224 #else
96225         "lsl	r6, r6, #16\n\t"
96226 #endif
96227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96228         "adds	r3, r3, r6\n\t"
96229 #else
96230         "add	r3, r3, r6\n\t"
96231 #endif
96232 #ifdef WOLFSSL_KEIL
96233         "adcs	r4, r4, r7\n\t"
96234 #elif defined(__clang__)
96235         "adcs	r4, r7\n\t"
96236 #else
96237         "adc	r4, r7\n\t"
96238 #endif
96239 #ifdef WOLFSSL_KEIL
96240         "adcs	r5, r5, %[r]\n\t"
96241 #elif defined(__clang__)
96242         "adcs	r5, %[r]\n\t"
96243 #else
96244         "adc	r5, %[r]\n\t"
96245 #endif
96246 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96247         "adds	r3, r3, r6\n\t"
96248 #else
96249         "add	r3, r3, r6\n\t"
96250 #endif
96251 #ifdef WOLFSSL_KEIL
96252         "adcs	r4, r4, r7\n\t"
96253 #elif defined(__clang__)
96254         "adcs	r4, r7\n\t"
96255 #else
96256         "adc	r4, r7\n\t"
96257 #endif
96258 #ifdef WOLFSSL_KEIL
96259         "adcs	r5, r5, %[r]\n\t"
96260 #elif defined(__clang__)
96261         "adcs	r5, %[r]\n\t"
96262 #else
96263         "adc	r5, %[r]\n\t"
96264 #endif
96265         "# Multiply * 2: Done\n\t"
96266         "bal	L_sp_256_sqr_8_done_sqr_%=\n\t"
96267         "\n"
96268     "L_sp_256_sqr_8_sqr_%=:\n\t"
96269         "mov	r12, r2\n\t"
96270         "ldr	r2, [%[a]]\n\t"
96271         "# Square: Start\n\t"
96272 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96273         "lsrs	r7, r2, #16\n\t"
96274 #else
96275         "lsr	r7, r2, #16\n\t"
96276 #endif
96277         "uxth	r6, r2\n\t"
96278 #ifdef WOLFSSL_KEIL
96279         "muls	r6, r6, r6\n\t"
96280 #elif defined(__clang__)
96281         "muls	r6, r6\n\t"
96282 #else
96283         "mul	r6, r6\n\t"
96284 #endif
96285 #ifdef WOLFSSL_KEIL
96286         "muls	r7, r7, r7\n\t"
96287 #elif defined(__clang__)
96288         "muls	r7, r7\n\t"
96289 #else
96290         "mul	r7, r7\n\t"
96291 #endif
96292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96293         "adds	r3, r3, r6\n\t"
96294 #else
96295         "add	r3, r3, r6\n\t"
96296 #endif
96297 #ifdef WOLFSSL_KEIL
96298         "adcs	r4, r4, r7\n\t"
96299 #elif defined(__clang__)
96300         "adcs	r4, r7\n\t"
96301 #else
96302         "adc	r4, r7\n\t"
96303 #endif
96304 #ifdef WOLFSSL_KEIL
96305         "adcs	r5, r5, %[r]\n\t"
96306 #elif defined(__clang__)
96307         "adcs	r5, %[r]\n\t"
96308 #else
96309         "adc	r5, %[r]\n\t"
96310 #endif
96311 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96312         "lsrs	r7, r2, #16\n\t"
96313 #else
96314         "lsr	r7, r2, #16\n\t"
96315 #endif
96316         "uxth	r6, r2\n\t"
96317 #ifdef WOLFSSL_KEIL
96318         "muls	r6, r7, r6\n\t"
96319 #elif defined(__clang__)
96320         "muls	r6, r7\n\t"
96321 #else
96322         "mul	r6, r7\n\t"
96323 #endif
96324 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96325         "lsrs	r7, r6, #15\n\t"
96326 #else
96327         "lsr	r7, r6, #15\n\t"
96328 #endif
96329 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96330         "lsls	r6, r6, #17\n\t"
96331 #else
96332         "lsl	r6, r6, #17\n\t"
96333 #endif
96334 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96335         "adds	r3, r3, r6\n\t"
96336 #else
96337         "add	r3, r3, r6\n\t"
96338 #endif
96339 #ifdef WOLFSSL_KEIL
96340         "adcs	r4, r4, r7\n\t"
96341 #elif defined(__clang__)
96342         "adcs	r4, r7\n\t"
96343 #else
96344         "adc	r4, r7\n\t"
96345 #endif
96346 #ifdef WOLFSSL_KEIL
96347         "adcs	r5, r5, %[r]\n\t"
96348 #elif defined(__clang__)
96349         "adcs	r5, %[r]\n\t"
96350 #else
96351         "adc	r5, %[r]\n\t"
96352 #endif
96353         "# Square: Done\n\t"
96354         "mov	r2, r12\n\t"
96355         "\n"
96356     "L_sp_256_sqr_8_done_sqr_%=:\n\t"
96357 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96358         "adds	%[a], %[a], #4\n\t"
96359 #else
96360         "add	%[a], %[a], #4\n\t"
96361 #endif
96362 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96363         "subs	r2, r2, #4\n\t"
96364 #else
96365         "sub	r2, r2, #4\n\t"
96366 #endif
96367         "movs	r6, #32\n\t"
96368         "add	r6, r6, r9\n\t"
96369         "cmp	%[a], r6\n\t"
96370         "beq	L_sp_256_sqr_8_done_mul_%=\n\t"
96371         "cmp	%[a], r2\n\t"
96372         "bgt	L_sp_256_sqr_8_done_mul_%=\n\t"
96373         "mov	r7, r8\n\t"
96374         "add	r7, r7, r9\n\t"
96375         "cmp	%[a], r7\n\t"
96376         "ble	L_sp_256_sqr_8_mul_%=\n\t"
96377         "\n"
96378     "L_sp_256_sqr_8_done_mul_%=:\n\t"
96379         "mov	%[r], r10\n\t"
96380         "mov	r7, r8\n\t"
96381         "str	r3, [%[r], r7]\n\t"
96382         "movs	r3, r4\n\t"
96383         "movs	r4, r5\n\t"
96384         "movs	r5, #0\n\t"
96385 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96386         "adds	r7, r7, #4\n\t"
96387 #else
96388         "add	r7, r7, #4\n\t"
96389 #endif
96390         "mov	r8, r7\n\t"
96391         "movs	r6, #56\n\t"
96392         "cmp	r7, r6\n\t"
96393         "ble	L_sp_256_sqr_8_words_%=\n\t"
96394         "mov	%[a], r9\n\t"
96395         "str	r3, [%[r], r7]\n\t"
96396         "mov	%[r], r11\n\t"
96397         "mov	%[a], r10\n\t"
96398         "movs	r3, #60\n\t"
96399         "\n"
96400     "L_sp_256_sqr_8_store_%=:\n\t"
96401         "ldr	r6, [%[a], r3]\n\t"
96402         "str	r6, [%[r], r3]\n\t"
96403 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96404         "subs	r3, r3, #4\n\t"
96405 #else
96406         "sub	r3, r3, #4\n\t"
96407 #endif
96408         "bge	L_sp_256_sqr_8_store_%=\n\t"
96409         "movs	r6, #0x40\n\t"
96410         "add	sp, sp, r6\n\t"
96411         : [r] "+r" (r), [a] "+r" (a)
96412         :
96413         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
96414     );
96415 }
96416 
96417 #ifdef WOLFSSL_SP_SMALL
96418 /* Add b to a into r. (r = a + b)
96419  *
96420  * r  A single precision integer.
96421  * a  A single precision integer.
96422  * b  A single precision integer.
96423  */
sp_256_add_8(sp_digit * r,const sp_digit * a,const sp_digit * b)96424 SP_NOINLINE static sp_digit sp_256_add_8(sp_digit* r, const sp_digit* a,
96425         const sp_digit* b)
96426 {
96427     __asm__ __volatile__ (
96428         "movs	r6, %[a]\n\t"
96429         "movs	r7, #0\n\t"
96430         "movs	r3, #0\n\t"
96431 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96432         "adds	r6, r6, #32\n\t"
96433 #else
96434         "add	r6, r6, #32\n\t"
96435 #endif
96436 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96437         "subs	r7, r7, #1\n\t"
96438 #else
96439         "sub	r7, r7, #1\n\t"
96440 #endif
96441         "\n"
96442     "L_sp_256_add_8_word_%=:\n\t"
96443 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96444         "adds	r3, r3, r7\n\t"
96445 #else
96446         "add	r3, r3, r7\n\t"
96447 #endif
96448         "ldr	r4, [%[a]]\n\t"
96449         "ldr	r5, [%[b]]\n\t"
96450 #ifdef WOLFSSL_KEIL
96451         "adcs	r4, r4, r5\n\t"
96452 #elif defined(__clang__)
96453         "adcs	r4, r5\n\t"
96454 #else
96455         "adc	r4, r5\n\t"
96456 #endif
96457         "str	r4, [%[r]]\n\t"
96458         "movs	r3, #0\n\t"
96459 #ifdef WOLFSSL_KEIL
96460         "adcs	r3, r3, r3\n\t"
96461 #elif defined(__clang__)
96462         "adcs	r3, r3\n\t"
96463 #else
96464         "adc	r3, r3\n\t"
96465 #endif
96466 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96467         "adds	%[a], %[a], #4\n\t"
96468 #else
96469         "add	%[a], %[a], #4\n\t"
96470 #endif
96471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96472         "adds	%[b], %[b], #4\n\t"
96473 #else
96474         "add	%[b], %[b], #4\n\t"
96475 #endif
96476 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96477         "adds	%[r], %[r], #4\n\t"
96478 #else
96479         "add	%[r], %[r], #4\n\t"
96480 #endif
96481         "cmp	%[a], r6\n\t"
96482         "bne	L_sp_256_add_8_word_%=\n\t"
96483         "movs	%[r], r3\n\t"
96484         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
96485         :
96486         : "memory", "r3", "r4", "r5", "r6", "r7"
96487     );
96488     return (uint32_t)(size_t)r;
96489 }
96490 
96491 #else
96492 /* Add b to a into r. (r = a + b)
96493  *
96494  * r  A single precision integer.
96495  * a  A single precision integer.
96496  * b  A single precision integer.
96497  */
sp_256_add_8(sp_digit * r,const sp_digit * a,const sp_digit * b)96498 SP_NOINLINE static sp_digit sp_256_add_8(sp_digit* r, const sp_digit* a,
96499         const sp_digit* b)
96500 {
96501     __asm__ __volatile__ (
96502         "ldm	%[b]!, {r5, r6}\n\t"
96503         "ldm	%[a]!, {r3, r4}\n\t"
96504 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96505         "adds	r3, r3, r5\n\t"
96506 #else
96507         "add	r3, r3, r5\n\t"
96508 #endif
96509 #ifdef WOLFSSL_KEIL
96510         "adcs	r4, r4, r6\n\t"
96511 #elif defined(__clang__)
96512         "adcs	r4, r6\n\t"
96513 #else
96514         "adc	r4, r6\n\t"
96515 #endif
96516         "stm	%[r]!, {r3, r4}\n\t"
96517         "ldm	%[b]!, {r5, r6}\n\t"
96518         "ldm	%[a]!, {r3, r4}\n\t"
96519 #ifdef WOLFSSL_KEIL
96520         "adcs	r3, r3, r5\n\t"
96521 #elif defined(__clang__)
96522         "adcs	r3, r5\n\t"
96523 #else
96524         "adc	r3, r5\n\t"
96525 #endif
96526 #ifdef WOLFSSL_KEIL
96527         "adcs	r4, r4, r6\n\t"
96528 #elif defined(__clang__)
96529         "adcs	r4, r6\n\t"
96530 #else
96531         "adc	r4, r6\n\t"
96532 #endif
96533         "stm	%[r]!, {r3, r4}\n\t"
96534         "ldm	%[b]!, {r5, r6}\n\t"
96535         "ldm	%[a]!, {r3, r4}\n\t"
96536 #ifdef WOLFSSL_KEIL
96537         "adcs	r3, r3, r5\n\t"
96538 #elif defined(__clang__)
96539         "adcs	r3, r5\n\t"
96540 #else
96541         "adc	r3, r5\n\t"
96542 #endif
96543 #ifdef WOLFSSL_KEIL
96544         "adcs	r4, r4, r6\n\t"
96545 #elif defined(__clang__)
96546         "adcs	r4, r6\n\t"
96547 #else
96548         "adc	r4, r6\n\t"
96549 #endif
96550         "stm	%[r]!, {r3, r4}\n\t"
96551         "ldm	%[b]!, {r5, r6}\n\t"
96552         "ldm	%[a]!, {r3, r4}\n\t"
96553 #ifdef WOLFSSL_KEIL
96554         "adcs	r3, r3, r5\n\t"
96555 #elif defined(__clang__)
96556         "adcs	r3, r5\n\t"
96557 #else
96558         "adc	r3, r5\n\t"
96559 #endif
96560 #ifdef WOLFSSL_KEIL
96561         "adcs	r4, r4, r6\n\t"
96562 #elif defined(__clang__)
96563         "adcs	r4, r6\n\t"
96564 #else
96565         "adc	r4, r6\n\t"
96566 #endif
96567         "stm	%[r]!, {r3, r4}\n\t"
96568         "movs	%[r], #0\n\t"
96569 #ifdef WOLFSSL_KEIL
96570         "adcs	%[r], %[r], %[r]\n\t"
96571 #elif defined(__clang__)
96572         "adcs	%[r], %[r]\n\t"
96573 #else
96574         "adc	%[r], %[r]\n\t"
96575 #endif
96576         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
96577         :
96578         : "memory", "r3", "r4", "r5", "r6"
96579     );
96580     return (uint32_t)(size_t)r;
96581 }
96582 
96583 #endif /* WOLFSSL_SP_SMALL */
96584 #ifdef WOLFSSL_SP_SMALL
96585 /* Sub b from a into r. (r = a - b)
96586  *
96587  * r  A single precision integer.
96588  * a  A single precision integer.
96589  * b  A single precision integer.
96590  */
sp_256_sub_8(sp_digit * r,const sp_digit * a,const sp_digit * b)96591 SP_NOINLINE static sp_digit sp_256_sub_8(sp_digit* r, const sp_digit* a,
96592         const sp_digit* b)
96593 {
96594     __asm__ __volatile__ (
96595         "movs	r6, %[a]\n\t"
96596         "movs	r3, #0\n\t"
96597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96598         "adds	r6, r6, #32\n\t"
96599 #else
96600         "add	r6, r6, #32\n\t"
96601 #endif
96602         "\n"
96603     "L_sp_256_sub_8_word_%=:\n\t"
96604         "movs	r5, #0\n\t"
96605 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96606         "subs	r5, r5, r3\n\t"
96607 #else
96608         "sub	r5, r5, r3\n\t"
96609 #endif
96610         "ldr	r4, [%[a]]\n\t"
96611         "ldr	r5, [%[b]]\n\t"
96612 #ifdef WOLFSSL_KEIL
96613         "sbcs	r4, r4, r5\n\t"
96614 #elif defined(__clang__)
96615         "sbcs	r4, r5\n\t"
96616 #else
96617         "sbc	r4, r5\n\t"
96618 #endif
96619         "str	r4, [%[r]]\n\t"
96620 #ifdef WOLFSSL_KEIL
96621         "sbcs	r3, r3, r3\n\t"
96622 #elif defined(__clang__)
96623         "sbcs	r3, r3\n\t"
96624 #else
96625         "sbc	r3, r3\n\t"
96626 #endif
96627 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96628         "adds	%[a], %[a], #4\n\t"
96629 #else
96630         "add	%[a], %[a], #4\n\t"
96631 #endif
96632 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96633         "adds	%[b], %[b], #4\n\t"
96634 #else
96635         "add	%[b], %[b], #4\n\t"
96636 #endif
96637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96638         "adds	%[r], %[r], #4\n\t"
96639 #else
96640         "add	%[r], %[r], #4\n\t"
96641 #endif
96642         "cmp	%[a], r6\n\t"
96643         "bne	L_sp_256_sub_8_word_%=\n\t"
96644         "movs	%[r], r3\n\t"
96645         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
96646         :
96647         : "memory", "r3", "r4", "r5", "r6"
96648     );
96649     return (uint32_t)(size_t)r;
96650 }
96651 
96652 #else
96653 /* Sub b from a into r. (r = a - b)
96654  *
96655  * r  A single precision integer.
96656  * a  A single precision integer.
96657  * b  A single precision integer.
96658  */
sp_256_sub_8(sp_digit * r,const sp_digit * a,const sp_digit * b)96659 SP_NOINLINE static sp_digit sp_256_sub_8(sp_digit* r, const sp_digit* a,
96660         const sp_digit* b)
96661 {
96662     __asm__ __volatile__ (
96663         "ldm	%[b]!, {r5, r6}\n\t"
96664         "ldm	%[a]!, {r3, r4}\n\t"
96665 #if defined(__clang__) || defined(WOLFSSL_KEIL)
96666         "subs	r3, r3, r5\n\t"
96667 #else
96668         "sub	r3, r3, r5\n\t"
96669 #endif
96670 #ifdef WOLFSSL_KEIL
96671         "sbcs	r4, r4, r6\n\t"
96672 #elif defined(__clang__)
96673         "sbcs	r4, r6\n\t"
96674 #else
96675         "sbc	r4, r6\n\t"
96676 #endif
96677         "stm	%[r]!, {r3, r4}\n\t"
96678         "ldm	%[b]!, {r5, r6}\n\t"
96679         "ldm	%[a]!, {r3, r4}\n\t"
96680 #ifdef WOLFSSL_KEIL
96681         "sbcs	r3, r3, r5\n\t"
96682 #elif defined(__clang__)
96683         "sbcs	r3, r5\n\t"
96684 #else
96685         "sbc	r3, r5\n\t"
96686 #endif
96687 #ifdef WOLFSSL_KEIL
96688         "sbcs	r4, r4, r6\n\t"
96689 #elif defined(__clang__)
96690         "sbcs	r4, r6\n\t"
96691 #else
96692         "sbc	r4, r6\n\t"
96693 #endif
96694         "stm	%[r]!, {r3, r4}\n\t"
96695         "ldm	%[b]!, {r5, r6}\n\t"
96696         "ldm	%[a]!, {r3, r4}\n\t"
96697 #ifdef WOLFSSL_KEIL
96698         "sbcs	r3, r3, r5\n\t"
96699 #elif defined(__clang__)
96700         "sbcs	r3, r5\n\t"
96701 #else
96702         "sbc	r3, r5\n\t"
96703 #endif
96704 #ifdef WOLFSSL_KEIL
96705         "sbcs	r4, r4, r6\n\t"
96706 #elif defined(__clang__)
96707         "sbcs	r4, r6\n\t"
96708 #else
96709         "sbc	r4, r6\n\t"
96710 #endif
96711         "stm	%[r]!, {r3, r4}\n\t"
96712         "ldm	%[b]!, {r5, r6}\n\t"
96713         "ldm	%[a]!, {r3, r4}\n\t"
96714 #ifdef WOLFSSL_KEIL
96715         "sbcs	r3, r3, r5\n\t"
96716 #elif defined(__clang__)
96717         "sbcs	r3, r5\n\t"
96718 #else
96719         "sbc	r3, r5\n\t"
96720 #endif
96721 #ifdef WOLFSSL_KEIL
96722         "sbcs	r4, r4, r6\n\t"
96723 #elif defined(__clang__)
96724         "sbcs	r4, r6\n\t"
96725 #else
96726         "sbc	r4, r6\n\t"
96727 #endif
96728         "stm	%[r]!, {r3, r4}\n\t"
96729 #ifdef WOLFSSL_KEIL
96730         "sbcs	%[r], %[r], %[r]\n\t"
96731 #elif defined(__clang__)
96732         "sbcs	%[r], %[r]\n\t"
96733 #else
96734         "sbc	%[r], %[r]\n\t"
96735 #endif
96736         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
96737         :
96738         : "memory", "r3", "r4", "r5", "r6"
96739     );
96740     return (uint32_t)(size_t)r;
96741 }
96742 
96743 #endif /* WOLFSSL_SP_SMALL */
96744 /* Multiply a number by Montgomery normalizer mod modulus (prime).
96745  *
96746  * r  The resulting Montgomery form number.
96747  * a  The number to convert.
96748  * m  The modulus (prime).
96749  */
sp_256_mod_mul_norm_8(sp_digit * r,const sp_digit * a,const sp_digit * m)96750 static int sp_256_mod_mul_norm_8(sp_digit* r, const sp_digit* a, const sp_digit* m)
96751 {
96752     int64_t t[8];
96753     int64_t a64[8];
96754     int64_t o;
96755 
96756     (void)m;
96757 
96758     a64[0] = a[0];
96759     a64[1] = a[1];
96760     a64[2] = a[2];
96761     a64[3] = a[3];
96762     a64[4] = a[4];
96763     a64[5] = a[5];
96764     a64[6] = a[6];
96765     a64[7] = a[7];
96766 
96767     /*  1  1  0 -1 -1 -1 -1  0 */
96768     t[0] = 0 + a64[0] + a64[1] - a64[3] - a64[4] - a64[5] - a64[6];
96769     /*  0  1  1  0 -1 -1 -1 -1 */
96770     t[1] = 0 + a64[1] + a64[2] - a64[4] - a64[5] - a64[6] - a64[7];
96771     /*  0  0  1  1  0 -1 -1 -1 */
96772     t[2] = 0 + a64[2] + a64[3] - a64[5] - a64[6] - a64[7];
96773     /* -1 -1  0  2  2  1  0 -1 */
96774     t[3] = 0 - a64[0] - a64[1] + 2 * a64[3] + 2 * a64[4] + a64[5] - a64[7];
96775     /*  0 -1 -1  0  2  2  1  0 */
96776     t[4] = 0 - a64[1] - a64[2] + 2 * a64[4] + 2 * a64[5] + a64[6];
96777     /*  0  0 -1 -1  0  2  2  1 */
96778     t[5] = 0 - a64[2] - a64[3] + 2 * a64[5] + 2 * a64[6] + a64[7];
96779     /* -1 -1  0  0  0  1  3  2 */
96780     t[6] = 0 - a64[0] - a64[1] + a64[5] + 3 * a64[6] + 2 * a64[7];
96781     /*  1  0 -1 -1 -1 -1  0  3 */
96782     t[7] = 0 + a64[0] - a64[2] - a64[3] - a64[4] - a64[5] + 3 * a64[7];
96783 
96784     t[1] += t[0] >> 32; t[0] &= 0xffffffff;
96785     t[2] += t[1] >> 32; t[1] &= 0xffffffff;
96786     t[3] += t[2] >> 32; t[2] &= 0xffffffff;
96787     t[4] += t[3] >> 32; t[3] &= 0xffffffff;
96788     t[5] += t[4] >> 32; t[4] &= 0xffffffff;
96789     t[6] += t[5] >> 32; t[5] &= 0xffffffff;
96790     t[7] += t[6] >> 32; t[6] &= 0xffffffff;
96791     o     = t[7] >> 32; t[7] &= 0xffffffff;
96792     t[0] += o;
96793     t[3] -= o;
96794     t[6] -= o;
96795     t[7] += o;
96796     t[1] += t[0] >> 32; t[0] &= 0xffffffff;
96797     t[2] += t[1] >> 32; t[1] &= 0xffffffff;
96798     t[3] += t[2] >> 32; t[2] &= 0xffffffff;
96799     t[4] += t[3] >> 32; t[3] &= 0xffffffff;
96800     t[5] += t[4] >> 32; t[4] &= 0xffffffff;
96801     t[6] += t[5] >> 32; t[5] &= 0xffffffff;
96802     t[7] += t[6] >> 32; t[6] &= 0xffffffff;
96803     r[0] = (sp_digit)t[0];
96804     r[1] = (sp_digit)t[1];
96805     r[2] = (sp_digit)t[2];
96806     r[3] = (sp_digit)t[3];
96807     r[4] = (sp_digit)t[4];
96808     r[5] = (sp_digit)t[5];
96809     r[6] = (sp_digit)t[6];
96810     r[7] = (sp_digit)t[7];
96811 
96812     return MP_OKAY;
96813 }
96814 
96815 /* Convert an mp_int to an array of sp_digit.
96816  *
96817  * r  A single precision integer.
96818  * size  Maximum number of bytes to convert
96819  * a  A multi-precision integer.
96820  */
sp_256_from_mp(sp_digit * r,int size,const mp_int * a)96821 static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a)
96822 {
96823 #if DIGIT_BIT == 32
96824     int j;
96825 
96826     XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
96827 
96828     for (j = a->used; j < size; j++) {
96829         r[j] = 0;
96830     }
96831 #elif DIGIT_BIT > 32
96832     int i;
96833     int j = 0;
96834     word32 s = 0;
96835 
96836     r[0] = 0;
96837     for (i = 0; i < a->used && j < size; i++) {
96838         r[j] |= ((sp_digit)a->dp[i] << s);
96839         r[j] &= 0xffffffff;
96840         s = 32U - s;
96841         if (j + 1 >= size) {
96842             break;
96843         }
96844         /* lint allow cast of mismatch word32 and mp_digit */
96845         r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
96846         while ((s + 32U) <= (word32)DIGIT_BIT) {
96847             s += 32U;
96848             r[j] &= 0xffffffff;
96849             if (j + 1 >= size) {
96850                 break;
96851             }
96852             if (s < (word32)DIGIT_BIT) {
96853                 /* lint allow cast of mismatch word32 and mp_digit */
96854                 r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
96855             }
96856             else {
96857                 r[++j] = (sp_digit)0;
96858             }
96859         }
96860         s = (word32)DIGIT_BIT - s;
96861     }
96862 
96863     for (j++; j < size; j++) {
96864         r[j] = 0;
96865     }
96866 #else
96867     int i;
96868     int j = 0;
96869     int s = 0;
96870 
96871     r[0] = 0;
96872     for (i = 0; i < a->used && j < size; i++) {
96873         r[j] |= ((sp_digit)a->dp[i]) << s;
96874         if (s + DIGIT_BIT >= 32) {
96875             r[j] &= 0xffffffff;
96876             if (j + 1 >= size) {
96877                 break;
96878             }
96879             s = 32 - s;
96880             if (s == DIGIT_BIT) {
96881                 r[++j] = 0;
96882                 s = 0;
96883             }
96884             else {
96885                 r[++j] = a->dp[i] >> s;
96886                 s = DIGIT_BIT - s;
96887             }
96888         }
96889         else {
96890             s += DIGIT_BIT;
96891         }
96892     }
96893 
96894     for (j++; j < size; j++) {
96895         r[j] = 0;
96896     }
96897 #endif
96898 }
96899 
96900 /* Convert a point of type ecc_point to type sp_point_256.
96901  *
96902  * p   Point of type sp_point_256 (result).
96903  * pm  Point of type ecc_point.
96904  */
sp_256_point_from_ecc_point_8(sp_point_256 * p,const ecc_point * pm)96905 static void sp_256_point_from_ecc_point_8(sp_point_256* p,
96906         const ecc_point* pm)
96907 {
96908     XMEMSET(p->x, 0, sizeof(p->x));
96909     XMEMSET(p->y, 0, sizeof(p->y));
96910     XMEMSET(p->z, 0, sizeof(p->z));
96911     sp_256_from_mp(p->x, 8, pm->x);
96912     sp_256_from_mp(p->y, 8, pm->y);
96913     sp_256_from_mp(p->z, 8, pm->z);
96914     p->infinity = 0;
96915 }
96916 
96917 /* Convert an array of sp_digit to an mp_int.
96918  *
96919  * a  A single precision integer.
96920  * r  A multi-precision integer.
96921  */
sp_256_to_mp(const sp_digit * a,mp_int * r)96922 static int sp_256_to_mp(const sp_digit* a, mp_int* r)
96923 {
96924     int err;
96925 
96926     err = mp_grow(r, (256 + DIGIT_BIT - 1) / DIGIT_BIT);
96927     if (err == MP_OKAY) { /*lint !e774 case where err is always MP_OKAY*/
96928 #if DIGIT_BIT == 32
96929         XMEMCPY(r->dp, a, sizeof(sp_digit) * 8);
96930         r->used = 8;
96931         mp_clamp(r);
96932 #elif DIGIT_BIT < 32
96933         int i;
96934         int j = 0;
96935         int s = 0;
96936 
96937         r->dp[0] = 0;
96938         for (i = 0; i < 8; i++) {
96939             r->dp[j] |= (mp_digit)(a[i] << s);
96940             r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
96941             s = DIGIT_BIT - s;
96942             r->dp[++j] = (mp_digit)(a[i] >> s);
96943             while (s + DIGIT_BIT <= 32) {
96944                 s += DIGIT_BIT;
96945                 r->dp[j++] &= ((sp_digit)1 << DIGIT_BIT) - 1;
96946                 if (s == SP_WORD_SIZE) {
96947                     r->dp[j] = 0;
96948                 }
96949                 else {
96950                     r->dp[j] = (mp_digit)(a[i] >> s);
96951                 }
96952             }
96953             s = 32 - s;
96954         }
96955         r->used = (256 + DIGIT_BIT - 1) / DIGIT_BIT;
96956         mp_clamp(r);
96957 #else
96958         int i;
96959         int j = 0;
96960         int s = 0;
96961 
96962         r->dp[0] = 0;
96963         for (i = 0; i < 8; i++) {
96964             r->dp[j] |= ((mp_digit)a[i]) << s;
96965             if (s + 32 >= DIGIT_BIT) {
96966     #if DIGIT_BIT != 32 && DIGIT_BIT != 64
96967                 r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
96968     #endif
96969                 s = DIGIT_BIT - s;
96970                 r->dp[++j] = a[i] >> s;
96971                 s = 32 - s;
96972             }
96973             else {
96974                 s += 32;
96975             }
96976         }
96977         r->used = (256 + DIGIT_BIT - 1) / DIGIT_BIT;
96978         mp_clamp(r);
96979 #endif
96980     }
96981 
96982     return err;
96983 }
96984 
96985 /* Convert a point of type sp_point_256 to type ecc_point.
96986  *
96987  * p   Point of type sp_point_256.
96988  * pm  Point of type ecc_point (result).
96989  * returns MEMORY_E when allocation of memory in ecc_point fails otherwise
96990  * MP_OKAY.
96991  */
sp_256_point_to_ecc_point_8(const sp_point_256 * p,ecc_point * pm)96992 static int sp_256_point_to_ecc_point_8(const sp_point_256* p, ecc_point* pm)
96993 {
96994     int err;
96995 
96996     err = sp_256_to_mp(p->x, pm->x);
96997     if (err == MP_OKAY) {
96998         err = sp_256_to_mp(p->y, pm->y);
96999     }
97000     if (err == MP_OKAY) {
97001         err = sp_256_to_mp(p->z, pm->z);
97002     }
97003 
97004     return err;
97005 }
97006 
97007 /* Conditionally subtract b from a using the mask m.
97008  * m is -1 to subtract and 0 when not copying.
97009  *
97010  * r  A single precision number representing condition subtract result.
97011  * a  A single precision number to subtract from.
97012  * b  A single precision number to subtract.
97013  * m  Mask value to apply.
97014  */
sp_256_cond_sub_8(sp_digit * r,const sp_digit * a,const sp_digit * b,sp_digit m)97015 SP_NOINLINE static sp_digit sp_256_cond_sub_8(sp_digit* r, const sp_digit* a,
97016         const sp_digit* b, sp_digit m)
97017 {
97018     __asm__ __volatile__ (
97019         "movs	r4, #0\n\t"
97020         "movs	r5, #32\n\t"
97021         "mov	r8, r5\n\t"
97022         "movs	r7, #0\n\t"
97023         "\n"
97024     "L_sp_256_cond_sub_8_words_%=:\n\t"
97025         "ldr	r6, [%[b], r7]\n\t"
97026 #ifdef WOLFSSL_KEIL
97027         "ands	r6, r6, %[m]\n\t"
97028 #elif defined(__clang__)
97029         "ands	r6, %[m]\n\t"
97030 #else
97031         "and	r6, %[m]\n\t"
97032 #endif
97033         "movs	r5, #0\n\t"
97034 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97035         "subs	r5, r5, r4\n\t"
97036 #else
97037         "sub	r5, r5, r4\n\t"
97038 #endif
97039         "ldr	r5, [%[a], r7]\n\t"
97040 #ifdef WOLFSSL_KEIL
97041         "sbcs	r5, r5, r6\n\t"
97042 #elif defined(__clang__)
97043         "sbcs	r5, r6\n\t"
97044 #else
97045         "sbc	r5, r6\n\t"
97046 #endif
97047 #ifdef WOLFSSL_KEIL
97048         "sbcs	r4, r4, r4\n\t"
97049 #elif defined(__clang__)
97050         "sbcs	r4, r4\n\t"
97051 #else
97052         "sbc	r4, r4\n\t"
97053 #endif
97054         "str	r5, [%[r], r7]\n\t"
97055 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97056         "adds	r7, r7, #4\n\t"
97057 #else
97058         "add	r7, r7, #4\n\t"
97059 #endif
97060         "cmp	r7, r8\n\t"
97061         "blt	L_sp_256_cond_sub_8_words_%=\n\t"
97062         "movs	%[r], r4\n\t"
97063         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
97064         :
97065         : "memory", "r4", "r5", "r6", "r7", "r8"
97066     );
97067     return (uint32_t)(size_t)r;
97068 }
97069 
97070 /* Reduce the number back to 256 bits using Montgomery reduction.
97071  *
97072  * a   A single precision number to reduce in place.
97073  * m   The single precision number representing the modulus.
97074  * mp  The digit representing the negative inverse of m mod 2^n.
97075  */
sp_256_mont_reduce_8(sp_digit * a,const sp_digit * m,sp_digit mp)97076 SP_NOINLINE static void sp_256_mont_reduce_8(sp_digit* a, const sp_digit* m,
97077         sp_digit mp)
97078 {
97079     (void)mp;
97080     (void)m;
97081 
97082     __asm__ __volatile__ (
97083         "movs	r2, #0\n\t"
97084         "movs	r1, #0\n\t"
97085         "# i = 0\n\t"
97086         "mov	r8, r2\n\t"
97087         "\n"
97088     "L_sp_256_mont_reduce_8_mod_%=:\n\t"
97089         "movs	r4, #0\n\t"
97090         "# mu = a[i] * 1 (mp) = a[i]\n\t"
97091         "ldr	r3, [%[a]]\n\t"
97092         "# a[i+0] += -1 * mu\n\t"
97093         "movs	r5, r3\n\t"
97094         "str	r4, [%[a]]\n\t"
97095         "# a[i+1] += -1 * mu\n\t"
97096         "ldr	r6, [%[a], #4]\n\t"
97097         "movs	r4, r3\n\t"
97098 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97099         "subs	r5, r5, r3\n\t"
97100 #else
97101         "sub	r5, r5, r3\n\t"
97102 #endif
97103 #ifdef WOLFSSL_KEIL
97104         "sbcs	r4, r4, r2\n\t"
97105 #elif defined(__clang__)
97106         "sbcs	r4, r2\n\t"
97107 #else
97108         "sbc	r4, r2\n\t"
97109 #endif
97110 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97111         "adds	r5, r5, r6\n\t"
97112 #else
97113         "add	r5, r5, r6\n\t"
97114 #endif
97115 #ifdef WOLFSSL_KEIL
97116         "adcs	r4, r4, r2\n\t"
97117 #elif defined(__clang__)
97118         "adcs	r4, r2\n\t"
97119 #else
97120         "adc	r4, r2\n\t"
97121 #endif
97122         "str	r5, [%[a], #4]\n\t"
97123         "# a[i+2] += -1 * mu\n\t"
97124         "ldr	r6, [%[a], #8]\n\t"
97125         "movs	r5, r3\n\t"
97126 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97127         "subs	r4, r4, r3\n\t"
97128 #else
97129         "sub	r4, r4, r3\n\t"
97130 #endif
97131 #ifdef WOLFSSL_KEIL
97132         "sbcs	r5, r5, r2\n\t"
97133 #elif defined(__clang__)
97134         "sbcs	r5, r2\n\t"
97135 #else
97136         "sbc	r5, r2\n\t"
97137 #endif
97138 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97139         "adds	r4, r4, r6\n\t"
97140 #else
97141         "add	r4, r4, r6\n\t"
97142 #endif
97143 #ifdef WOLFSSL_KEIL
97144         "adcs	r5, r5, r2\n\t"
97145 #elif defined(__clang__)
97146         "adcs	r5, r2\n\t"
97147 #else
97148         "adc	r5, r2\n\t"
97149 #endif
97150         "str	r4, [%[a], #8]\n\t"
97151         "# a[i+3] += 0 * mu\n\t"
97152         "ldr	r6, [%[a], #12]\n\t"
97153         "movs	r4, #0\n\t"
97154 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97155         "adds	r5, r5, r6\n\t"
97156 #else
97157         "add	r5, r5, r6\n\t"
97158 #endif
97159 #ifdef WOLFSSL_KEIL
97160         "adcs	r4, r4, r2\n\t"
97161 #elif defined(__clang__)
97162         "adcs	r4, r2\n\t"
97163 #else
97164         "adc	r4, r2\n\t"
97165 #endif
97166         "str	r5, [%[a], #12]\n\t"
97167         "# a[i+4] += 0 * mu\n\t"
97168         "ldr	r6, [%[a], #16]\n\t"
97169         "movs	r5, #0\n\t"
97170 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97171         "adds	r4, r4, r6\n\t"
97172 #else
97173         "add	r4, r4, r6\n\t"
97174 #endif
97175 #ifdef WOLFSSL_KEIL
97176         "adcs	r5, r5, r2\n\t"
97177 #elif defined(__clang__)
97178         "adcs	r5, r2\n\t"
97179 #else
97180         "adc	r5, r2\n\t"
97181 #endif
97182         "str	r4, [%[a], #16]\n\t"
97183         "# a[i+5] += 0 * mu\n\t"
97184         "ldr	r6, [%[a], #20]\n\t"
97185         "movs	r4, #0\n\t"
97186 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97187         "adds	r5, r5, r6\n\t"
97188 #else
97189         "add	r5, r5, r6\n\t"
97190 #endif
97191 #ifdef WOLFSSL_KEIL
97192         "adcs	r4, r4, r2\n\t"
97193 #elif defined(__clang__)
97194         "adcs	r4, r2\n\t"
97195 #else
97196         "adc	r4, r2\n\t"
97197 #endif
97198         "str	r5, [%[a], #20]\n\t"
97199         "# a[i+6] += 1 * mu\n\t"
97200         "ldr	r6, [%[a], #24]\n\t"
97201         "movs	r5, #0\n\t"
97202 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97203         "adds	r4, r4, r3\n\t"
97204 #else
97205         "add	r4, r4, r3\n\t"
97206 #endif
97207 #ifdef WOLFSSL_KEIL
97208         "adcs	r5, r5, r2\n\t"
97209 #elif defined(__clang__)
97210         "adcs	r5, r2\n\t"
97211 #else
97212         "adc	r5, r2\n\t"
97213 #endif
97214 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97215         "adds	r4, r4, r6\n\t"
97216 #else
97217         "add	r4, r4, r6\n\t"
97218 #endif
97219 #ifdef WOLFSSL_KEIL
97220         "adcs	r5, r5, r2\n\t"
97221 #elif defined(__clang__)
97222         "adcs	r5, r2\n\t"
97223 #else
97224         "adc	r5, r2\n\t"
97225 #endif
97226         "str	r4, [%[a], #24]\n\t"
97227         "# a[i+7] += -1 * mu\n\t"
97228         "ldr	r6, [%[a], #28]\n\t"
97229         "ldr	r7, [%[a], #32]\n\t"
97230 #ifdef WOLFSSL_KEIL
97231         "adds	r4, r1, r3\n\t"
97232 #else
97233     #ifdef __clang__
97234         "adds	r4, r1, r3\n\t"
97235     #else
97236         "add	r4, r1, r3\n\t"
97237     #endif
97238 #endif
97239         "movs	r1, #0\n\t"
97240 #ifdef WOLFSSL_KEIL
97241         "adcs	r1, r1, r2\n\t"
97242 #elif defined(__clang__)
97243         "adcs	r1, r2\n\t"
97244 #else
97245         "adc	r1, r2\n\t"
97246 #endif
97247 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97248         "subs	r5, r5, r3\n\t"
97249 #else
97250         "sub	r5, r5, r3\n\t"
97251 #endif
97252 #ifdef WOLFSSL_KEIL
97253         "sbcs	r4, r4, r2\n\t"
97254 #elif defined(__clang__)
97255         "sbcs	r4, r2\n\t"
97256 #else
97257         "sbc	r4, r2\n\t"
97258 #endif
97259 #ifdef WOLFSSL_KEIL
97260         "sbcs	r1, r1, r2\n\t"
97261 #elif defined(__clang__)
97262         "sbcs	r1, r2\n\t"
97263 #else
97264         "sbc	r1, r2\n\t"
97265 #endif
97266 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97267         "adds	r5, r5, r6\n\t"
97268 #else
97269         "add	r5, r5, r6\n\t"
97270 #endif
97271 #ifdef WOLFSSL_KEIL
97272         "adcs	r4, r4, r7\n\t"
97273 #elif defined(__clang__)
97274         "adcs	r4, r7\n\t"
97275 #else
97276         "adc	r4, r7\n\t"
97277 #endif
97278 #ifdef WOLFSSL_KEIL
97279         "adcs	r1, r1, r2\n\t"
97280 #elif defined(__clang__)
97281         "adcs	r1, r2\n\t"
97282 #else
97283         "adc	r1, r2\n\t"
97284 #endif
97285         "str	r5, [%[a], #28]\n\t"
97286         "str	r4, [%[a], #32]\n\t"
97287         "# i += 1\n\t"
97288         "movs	r6, #4\n\t"
97289         "add	r8, r8, r6\n\t"
97290 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97291         "adds	%[a], %[a], #4\n\t"
97292 #else
97293         "add	%[a], %[a], #4\n\t"
97294 #endif
97295         "movs	r6, #32\n\t"
97296         "cmp	r8, r6\n\t"
97297         "blt	L_sp_256_mont_reduce_8_mod_%=\n\t"
97298 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97299         "subs	%[a], %[a], #32\n\t"
97300 #else
97301         "sub	%[a], %[a], #32\n\t"
97302 #endif
97303         "movs	r3, r1\n\t"
97304 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97305         "subs	r1, r1, #1\n\t"
97306 #else
97307         "sub	r1, r1, #1\n\t"
97308 #endif
97309 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97310         "mvns	r1, r1\n\t"
97311 #else
97312         "mvn	r1, r1\n\t"
97313 #endif
97314         "ldr	r5, [%[a], #32]\n\t"
97315         "ldr	r4, [%[a], #36]\n\t"
97316         "ldr	r6, [%[a], #40]\n\t"
97317         "ldr	r7, [%[a], #44]\n\t"
97318 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97319         "subs	r5, r5, r1\n\t"
97320 #else
97321         "sub	r5, r5, r1\n\t"
97322 #endif
97323 #ifdef WOLFSSL_KEIL
97324         "sbcs	r4, r4, r1\n\t"
97325 #elif defined(__clang__)
97326         "sbcs	r4, r1\n\t"
97327 #else
97328         "sbc	r4, r1\n\t"
97329 #endif
97330 #ifdef WOLFSSL_KEIL
97331         "sbcs	r6, r6, r1\n\t"
97332 #elif defined(__clang__)
97333         "sbcs	r6, r1\n\t"
97334 #else
97335         "sbc	r6, r1\n\t"
97336 #endif
97337 #ifdef WOLFSSL_KEIL
97338         "sbcs	r7, r7, r2\n\t"
97339 #elif defined(__clang__)
97340         "sbcs	r7, r2\n\t"
97341 #else
97342         "sbc	r7, r2\n\t"
97343 #endif
97344         "str	r5, [%[a]]\n\t"
97345         "str	r4, [%[a], #4]\n\t"
97346         "str	r6, [%[a], #8]\n\t"
97347         "str	r7, [%[a], #12]\n\t"
97348         "ldr	r5, [%[a], #48]\n\t"
97349         "ldr	r4, [%[a], #52]\n\t"
97350         "ldr	r6, [%[a], #56]\n\t"
97351         "ldr	r7, [%[a], #60]\n\t"
97352 #ifdef WOLFSSL_KEIL
97353         "sbcs	r5, r5, r2\n\t"
97354 #elif defined(__clang__)
97355         "sbcs	r5, r2\n\t"
97356 #else
97357         "sbc	r5, r2\n\t"
97358 #endif
97359 #ifdef WOLFSSL_KEIL
97360         "sbcs	r4, r4, r2\n\t"
97361 #elif defined(__clang__)
97362         "sbcs	r4, r2\n\t"
97363 #else
97364         "sbc	r4, r2\n\t"
97365 #endif
97366 #ifdef WOLFSSL_KEIL
97367         "sbcs	r6, r6, r3\n\t"
97368 #elif defined(__clang__)
97369         "sbcs	r6, r3\n\t"
97370 #else
97371         "sbc	r6, r3\n\t"
97372 #endif
97373 #ifdef WOLFSSL_KEIL
97374         "sbcs	r7, r7, r1\n\t"
97375 #elif defined(__clang__)
97376         "sbcs	r7, r1\n\t"
97377 #else
97378         "sbc	r7, r1\n\t"
97379 #endif
97380         "str	r5, [%[a], #16]\n\t"
97381         "str	r4, [%[a], #20]\n\t"
97382         "str	r6, [%[a], #24]\n\t"
97383         "str	r7, [%[a], #28]\n\t"
97384         : [a] "+r" (a)
97385         :
97386         : "memory", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8"
97387     );
97388 }
97389 
97390 /* Reduce the number back to 256 bits using Montgomery reduction.
97391  *
97392  * a   A single precision number to reduce in place.
97393  * m   The single precision number representing the modulus.
97394  * mp  The digit representing the negative inverse of m mod 2^n.
97395  */
sp_256_mont_reduce_order_8(sp_digit * a,const sp_digit * m,sp_digit mp)97396 SP_NOINLINE static void sp_256_mont_reduce_order_8(sp_digit* a,
97397         const sp_digit* m, sp_digit mp)
97398 {
97399     __asm__ __volatile__ (
97400         "movs	r7, #0\n\t"
97401         "mov	r8, %[mp]\n\t"
97402         "mov	r12, r7\n\t"
97403         "mov	lr, %[m]\n\t"
97404         "mov	r9, %[a]\n\t"
97405         "mov	r11, %[a]\n\t"
97406         "movs	r5, #28\n\t"
97407         "movs	r6, #32\n\t"
97408         "add	r9, r9, r5\n\t"
97409         "add	r11, r11, r6\n\t"
97410         "\n"
97411     "L_sp_256_mont_reduce_order_8_mod_%=:\n\t"
97412         "movs	r7, #0\n\t"
97413         "movs	r4, #0\n\t"
97414         "# a[i] += m[0] * mu\n\t"
97415         "ldm	%[m]!, {%[mp]}\n\t"
97416         "ldm	%[a]!, {r3}\n\t"
97417         "# mu = a[i] * mp\n\t"
97418         "mov	r5, r8\n\t"
97419 #ifdef WOLFSSL_KEIL
97420         "muls	r5, r3, r5\n\t"
97421 #elif defined(__clang__)
97422         "muls	r5, r3\n\t"
97423 #else
97424         "mul	r5, r3\n\t"
97425 #endif
97426         "mov	r10, r5\n\t"
97427         "# Multiply m[0] and mu - Start\n\t"
97428         "mov	r5, r10\n\t"
97429         "uxth	r6, %[mp]\n\t"
97430         "uxth	r5, r5\n\t"
97431 #ifdef WOLFSSL_KEIL
97432         "muls	r6, r5, r6\n\t"
97433 #elif defined(__clang__)
97434         "muls	r6, r5\n\t"
97435 #else
97436         "mul	r6, r5\n\t"
97437 #endif
97438 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97439         "adds	r3, r3, r6\n\t"
97440 #else
97441         "add	r3, r3, r6\n\t"
97442 #endif
97443 #ifdef WOLFSSL_KEIL
97444         "adcs	r4, r4, r7\n\t"
97445 #elif defined(__clang__)
97446         "adcs	r4, r7\n\t"
97447 #else
97448         "adc	r4, r7\n\t"
97449 #endif
97450 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97451         "lsrs	r6, %[mp], #16\n\t"
97452 #else
97453         "lsr	r6, %[mp], #16\n\t"
97454 #endif
97455 #ifdef WOLFSSL_KEIL
97456         "muls	r5, r6, r5\n\t"
97457 #elif defined(__clang__)
97458         "muls	r5, r6\n\t"
97459 #else
97460         "mul	r5, r6\n\t"
97461 #endif
97462 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97463         "lsrs	r6, r5, #16\n\t"
97464 #else
97465         "lsr	r6, r5, #16\n\t"
97466 #endif
97467 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97468         "lsls	r5, r5, #16\n\t"
97469 #else
97470         "lsl	r5, r5, #16\n\t"
97471 #endif
97472 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97473         "adds	r3, r3, r5\n\t"
97474 #else
97475         "add	r3, r3, r5\n\t"
97476 #endif
97477 #ifdef WOLFSSL_KEIL
97478         "adcs	r4, r4, r6\n\t"
97479 #elif defined(__clang__)
97480         "adcs	r4, r6\n\t"
97481 #else
97482         "adc	r4, r6\n\t"
97483 #endif
97484         "mov	r5, r10\n\t"
97485 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97486         "lsrs	r6, %[mp], #16\n\t"
97487 #else
97488         "lsr	r6, %[mp], #16\n\t"
97489 #endif
97490 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97491         "lsrs	r5, r5, #16\n\t"
97492 #else
97493         "lsr	r5, r5, #16\n\t"
97494 #endif
97495 #ifdef WOLFSSL_KEIL
97496         "muls	r6, r5, r6\n\t"
97497 #elif defined(__clang__)
97498         "muls	r6, r5\n\t"
97499 #else
97500         "mul	r6, r5\n\t"
97501 #endif
97502 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97503         "adds	r4, r4, r6\n\t"
97504 #else
97505         "add	r4, r4, r6\n\t"
97506 #endif
97507         "uxth	r6, %[mp]\n\t"
97508 #ifdef WOLFSSL_KEIL
97509         "muls	r5, r6, r5\n\t"
97510 #elif defined(__clang__)
97511         "muls	r5, r6\n\t"
97512 #else
97513         "mul	r5, r6\n\t"
97514 #endif
97515 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97516         "lsrs	r6, r5, #16\n\t"
97517 #else
97518         "lsr	r6, r5, #16\n\t"
97519 #endif
97520 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97521         "lsls	r5, r5, #16\n\t"
97522 #else
97523         "lsl	r5, r5, #16\n\t"
97524 #endif
97525 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97526         "adds	r3, r3, r5\n\t"
97527 #else
97528         "add	r3, r3, r5\n\t"
97529 #endif
97530 #ifdef WOLFSSL_KEIL
97531         "adcs	r4, r4, r6\n\t"
97532 #elif defined(__clang__)
97533         "adcs	r4, r6\n\t"
97534 #else
97535         "adc	r4, r6\n\t"
97536 #endif
97537         "# Multiply m[0] and mu - Done\n\t"
97538         "\n"
97539     "L_sp_256_mont_reduce_order_8_word_%=:\n\t"
97540         "# a[i+j] += m[j] * mu\n\t"
97541         "ldr	r3, [%[a]]\n\t"
97542         "ldm	%[m]!, {%[mp]}\n\t"
97543 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97544         "adds	r3, r3, r4\n\t"
97545 #else
97546         "add	r3, r3, r4\n\t"
97547 #endif
97548         "movs	r4, #0\n\t"
97549 #ifdef WOLFSSL_KEIL
97550         "adcs	r4, r4, r7\n\t"
97551 #elif defined(__clang__)
97552         "adcs	r4, r7\n\t"
97553 #else
97554         "adc	r4, r7\n\t"
97555 #endif
97556         "# Multiply m[j] and mu - Start\n\t"
97557         "mov	r5, r10\n\t"
97558         "uxth	r6, %[mp]\n\t"
97559         "uxth	r5, r5\n\t"
97560 #ifdef WOLFSSL_KEIL
97561         "muls	r6, r5, r6\n\t"
97562 #elif defined(__clang__)
97563         "muls	r6, r5\n\t"
97564 #else
97565         "mul	r6, r5\n\t"
97566 #endif
97567 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97568         "adds	r3, r3, r6\n\t"
97569 #else
97570         "add	r3, r3, r6\n\t"
97571 #endif
97572 #ifdef WOLFSSL_KEIL
97573         "adcs	r4, r4, r7\n\t"
97574 #elif defined(__clang__)
97575         "adcs	r4, r7\n\t"
97576 #else
97577         "adc	r4, r7\n\t"
97578 #endif
97579 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97580         "lsrs	r6, %[mp], #16\n\t"
97581 #else
97582         "lsr	r6, %[mp], #16\n\t"
97583 #endif
97584 #ifdef WOLFSSL_KEIL
97585         "muls	r5, r6, r5\n\t"
97586 #elif defined(__clang__)
97587         "muls	r5, r6\n\t"
97588 #else
97589         "mul	r5, r6\n\t"
97590 #endif
97591 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97592         "lsrs	r6, r5, #16\n\t"
97593 #else
97594         "lsr	r6, r5, #16\n\t"
97595 #endif
97596 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97597         "lsls	r5, r5, #16\n\t"
97598 #else
97599         "lsl	r5, r5, #16\n\t"
97600 #endif
97601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97602         "adds	r3, r3, r5\n\t"
97603 #else
97604         "add	r3, r3, r5\n\t"
97605 #endif
97606 #ifdef WOLFSSL_KEIL
97607         "adcs	r4, r4, r6\n\t"
97608 #elif defined(__clang__)
97609         "adcs	r4, r6\n\t"
97610 #else
97611         "adc	r4, r6\n\t"
97612 #endif
97613         "mov	r5, r10\n\t"
97614 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97615         "lsrs	r6, %[mp], #16\n\t"
97616 #else
97617         "lsr	r6, %[mp], #16\n\t"
97618 #endif
97619 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97620         "lsrs	r5, r5, #16\n\t"
97621 #else
97622         "lsr	r5, r5, #16\n\t"
97623 #endif
97624 #ifdef WOLFSSL_KEIL
97625         "muls	r6, r5, r6\n\t"
97626 #elif defined(__clang__)
97627         "muls	r6, r5\n\t"
97628 #else
97629         "mul	r6, r5\n\t"
97630 #endif
97631 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97632         "adds	r4, r4, r6\n\t"
97633 #else
97634         "add	r4, r4, r6\n\t"
97635 #endif
97636         "uxth	r6, %[mp]\n\t"
97637 #ifdef WOLFSSL_KEIL
97638         "muls	r5, r6, r5\n\t"
97639 #elif defined(__clang__)
97640         "muls	r5, r6\n\t"
97641 #else
97642         "mul	r5, r6\n\t"
97643 #endif
97644 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97645         "lsrs	r6, r5, #16\n\t"
97646 #else
97647         "lsr	r6, r5, #16\n\t"
97648 #endif
97649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97650         "lsls	r5, r5, #16\n\t"
97651 #else
97652         "lsl	r5, r5, #16\n\t"
97653 #endif
97654 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97655         "adds	r3, r3, r5\n\t"
97656 #else
97657         "add	r3, r3, r5\n\t"
97658 #endif
97659 #ifdef WOLFSSL_KEIL
97660         "adcs	r4, r4, r6\n\t"
97661 #elif defined(__clang__)
97662         "adcs	r4, r6\n\t"
97663 #else
97664         "adc	r4, r6\n\t"
97665 #endif
97666         "# Multiply m[j] and mu - Done\n\t"
97667         "stm	%[a]!, {r3}\n\t"
97668         "cmp	%[a], r9\n\t"
97669         "blt	L_sp_256_mont_reduce_order_8_word_%=\n\t"
97670         "# a[i+7] += m[7] * mu\n\t"
97671         "ldr	%[mp], [%[m]]\n\t"
97672         "mov	r3, r12\n\t"
97673         "# Multiply m[7] and mu - Start\n\t"
97674         "mov	r5, r10\n\t"
97675         "uxth	r6, %[mp]\n\t"
97676         "uxth	r5, r5\n\t"
97677 #ifdef WOLFSSL_KEIL
97678         "muls	r6, r5, r6\n\t"
97679 #elif defined(__clang__)
97680         "muls	r6, r5\n\t"
97681 #else
97682         "mul	r6, r5\n\t"
97683 #endif
97684 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97685         "adds	r4, r4, r6\n\t"
97686 #else
97687         "add	r4, r4, r6\n\t"
97688 #endif
97689 #ifdef WOLFSSL_KEIL
97690         "adcs	r3, r3, r7\n\t"
97691 #elif defined(__clang__)
97692         "adcs	r3, r7\n\t"
97693 #else
97694         "adc	r3, r7\n\t"
97695 #endif
97696 #ifdef WOLFSSL_KEIL
97697         "adcs	r7, r7, r7\n\t"
97698 #elif defined(__clang__)
97699         "adcs	r7, r7\n\t"
97700 #else
97701         "adc	r7, r7\n\t"
97702 #endif
97703 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97704         "lsrs	r6, %[mp], #16\n\t"
97705 #else
97706         "lsr	r6, %[mp], #16\n\t"
97707 #endif
97708 #ifdef WOLFSSL_KEIL
97709         "muls	r5, r6, r5\n\t"
97710 #elif defined(__clang__)
97711         "muls	r5, r6\n\t"
97712 #else
97713         "mul	r5, r6\n\t"
97714 #endif
97715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97716         "lsrs	r6, r5, #16\n\t"
97717 #else
97718         "lsr	r6, r5, #16\n\t"
97719 #endif
97720 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97721         "lsls	r5, r5, #16\n\t"
97722 #else
97723         "lsl	r5, r5, #16\n\t"
97724 #endif
97725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97726         "adds	r4, r4, r5\n\t"
97727 #else
97728         "add	r4, r4, r5\n\t"
97729 #endif
97730 #ifdef WOLFSSL_KEIL
97731         "adcs	r3, r3, r6\n\t"
97732 #elif defined(__clang__)
97733         "adcs	r3, r6\n\t"
97734 #else
97735         "adc	r3, r6\n\t"
97736 #endif
97737 #ifdef WOLFSSL_KEIL
97738         "adcs	r7, r7, r7\n\t"
97739 #elif defined(__clang__)
97740         "adcs	r7, r7\n\t"
97741 #else
97742         "adc	r7, r7\n\t"
97743 #endif
97744         "mov	r5, r10\n\t"
97745 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97746         "lsrs	r6, %[mp], #16\n\t"
97747 #else
97748         "lsr	r6, %[mp], #16\n\t"
97749 #endif
97750 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97751         "lsrs	r5, r5, #16\n\t"
97752 #else
97753         "lsr	r5, r5, #16\n\t"
97754 #endif
97755 #ifdef WOLFSSL_KEIL
97756         "muls	r6, r5, r6\n\t"
97757 #elif defined(__clang__)
97758         "muls	r6, r5\n\t"
97759 #else
97760         "mul	r6, r5\n\t"
97761 #endif
97762 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97763         "adds	r3, r3, r6\n\t"
97764 #else
97765         "add	r3, r3, r6\n\t"
97766 #endif
97767 #ifdef WOLFSSL_KEIL
97768         "adcs	r7, r7, r7\n\t"
97769 #elif defined(__clang__)
97770         "adcs	r7, r7\n\t"
97771 #else
97772         "adc	r7, r7\n\t"
97773 #endif
97774         "uxth	r6, %[mp]\n\t"
97775 #ifdef WOLFSSL_KEIL
97776         "muls	r5, r6, r5\n\t"
97777 #elif defined(__clang__)
97778         "muls	r5, r6\n\t"
97779 #else
97780         "mul	r5, r6\n\t"
97781 #endif
97782 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97783         "lsrs	r6, r5, #16\n\t"
97784 #else
97785         "lsr	r6, r5, #16\n\t"
97786 #endif
97787 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97788         "lsls	r5, r5, #16\n\t"
97789 #else
97790         "lsl	r5, r5, #16\n\t"
97791 #endif
97792 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97793         "adds	r4, r4, r5\n\t"
97794 #else
97795         "add	r4, r4, r5\n\t"
97796 #endif
97797 #ifdef WOLFSSL_KEIL
97798         "adcs	r3, r3, r6\n\t"
97799 #elif defined(__clang__)
97800         "adcs	r3, r6\n\t"
97801 #else
97802         "adc	r3, r6\n\t"
97803 #endif
97804 #ifdef WOLFSSL_KEIL
97805         "adcs	r7, r7, r7\n\t"
97806 #elif defined(__clang__)
97807         "adcs	r7, r7\n\t"
97808 #else
97809         "adc	r7, r7\n\t"
97810 #endif
97811         "# Multiply m[7] and mu - Done\n\t"
97812         "ldr	r5, [%[a]]\n\t"
97813         "ldr	r6, [%[a], #4]\n\t"
97814         "movs	%[mp], #0\n\t"
97815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97816         "adds	r5, r5, r4\n\t"
97817 #else
97818         "add	r5, r5, r4\n\t"
97819 #endif
97820 #ifdef WOLFSSL_KEIL
97821         "adcs	r6, r6, r3\n\t"
97822 #elif defined(__clang__)
97823         "adcs	r6, r3\n\t"
97824 #else
97825         "adc	r6, r3\n\t"
97826 #endif
97827 #ifdef WOLFSSL_KEIL
97828         "adcs	r7, r7, %[mp]\n\t"
97829 #elif defined(__clang__)
97830         "adcs	r7, %[mp]\n\t"
97831 #else
97832         "adc	r7, %[mp]\n\t"
97833 #endif
97834         "stm	%[a]!, {r5, r6}\n\t"
97835         "# i += 1\n\t"
97836 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97837         "subs	%[a], %[a], #4\n\t"
97838 #else
97839         "sub	%[a], %[a], #4\n\t"
97840 #endif
97841         "movs	r3, #28\n\t"
97842         "mov	r9, %[a]\n\t"
97843 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97844         "subs	%[a], %[a], r3\n\t"
97845 #else
97846         "sub	%[a], %[a], r3\n\t"
97847 #endif
97848         "mov	r12, r7\n\t"
97849         "mov	%[m], lr\n\t"
97850         "cmp	r11, %[a]\n\t"
97851         "bgt	L_sp_256_mont_reduce_order_8_mod_%=\n\t"
97852 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97853         "negs	r7, r7\n\t"
97854 #else
97855         "neg	r7, r7\n\t"
97856 #endif
97857         "# Subtract masked modulus\n\t"
97858         "movs	r4, #32\n\t"
97859         "movs	%[mp], #0\n\t"
97860         "movs	r3, #0\n\t"
97861 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97862         "subs	%[a], %[a], r4\n\t"
97863 #else
97864         "sub	%[a], %[a], r4\n\t"
97865 #endif
97866 #ifndef WOLFSSL_SP_LARGE_CODE
97867         "\n"
97868     "L_sp_256_mont_reduce_order_8_sub_mask_%=:\n\t"
97869         "ldm	%[m]!, {r6}\n\t"
97870         "movs	r5, #0\n\t"
97871 #ifdef WOLFSSL_KEIL
97872         "ands	r6, r6, r7\n\t"
97873 #elif defined(__clang__)
97874         "ands	r6, r7\n\t"
97875 #else
97876         "and	r6, r7\n\t"
97877 #endif
97878 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97879         "subs	r5, r5, %[mp]\n\t"
97880 #else
97881         "sub	r5, r5, %[mp]\n\t"
97882 #endif
97883         "ldr	r5, [%[a], r4]\n\t"
97884 #ifdef WOLFSSL_KEIL
97885         "sbcs	r5, r5, r6\n\t"
97886 #elif defined(__clang__)
97887         "sbcs	r5, r6\n\t"
97888 #else
97889         "sbc	r5, r6\n\t"
97890 #endif
97891 #ifdef WOLFSSL_KEIL
97892         "sbcs	%[mp], %[mp], %[mp]\n\t"
97893 #elif defined(__clang__)
97894         "sbcs	%[mp], %[mp]\n\t"
97895 #else
97896         "sbc	%[mp], %[mp]\n\t"
97897 #endif
97898         "stm	%[a]!, {r5}\n\t"
97899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97900         "adds	r3, r3, #4\n\t"
97901 #else
97902         "add	r3, r3, #4\n\t"
97903 #endif
97904         "cmp	r3, r4\n\t"
97905         "blt	L_sp_256_mont_reduce_order_8_sub_mask_%=\n\t"
97906 #else /* WOLFSSL_SP_LARGE_CODE */
97907         "ldm	%[m]!, {r6}\n\t"
97908 #ifdef WOLFSSL_KEIL
97909         "ands	r6, r6, r7\n\t"
97910 #elif defined(__clang__)
97911         "ands	r6, r7\n\t"
97912 #else
97913         "and	r6, r7\n\t"
97914 #endif
97915         "ldr	r5, [%[a], r4]\n\t"
97916 #if defined(__clang__) || defined(WOLFSSL_KEIL)
97917         "subs	r5, r5, r6\n\t"
97918 #else
97919         "sub	r5, r5, r6\n\t"
97920 #endif
97921         "stm	%[a]!, {r5}\n\t"
97922         "ldm	%[m]!, {r6}\n\t"
97923 #ifdef WOLFSSL_KEIL
97924         "ands	r6, r6, r7\n\t"
97925 #elif defined(__clang__)
97926         "ands	r6, r7\n\t"
97927 #else
97928         "and	r6, r7\n\t"
97929 #endif
97930         "ldr	r5, [%[a], r4]\n\t"
97931 #ifdef WOLFSSL_KEIL
97932         "sbcs	r5, r5, r6\n\t"
97933 #elif defined(__clang__)
97934         "sbcs	r5, r6\n\t"
97935 #else
97936         "sbc	r5, r6\n\t"
97937 #endif
97938         "stm	%[a]!, {r5}\n\t"
97939         "ldm	%[m]!, {r6}\n\t"
97940 #ifdef WOLFSSL_KEIL
97941         "ands	r6, r6, r7\n\t"
97942 #elif defined(__clang__)
97943         "ands	r6, r7\n\t"
97944 #else
97945         "and	r6, r7\n\t"
97946 #endif
97947         "ldr	r5, [%[a], r4]\n\t"
97948 #ifdef WOLFSSL_KEIL
97949         "sbcs	r5, r5, r6\n\t"
97950 #elif defined(__clang__)
97951         "sbcs	r5, r6\n\t"
97952 #else
97953         "sbc	r5, r6\n\t"
97954 #endif
97955         "stm	%[a]!, {r5}\n\t"
97956         "ldm	%[m]!, {r6}\n\t"
97957 #ifdef WOLFSSL_KEIL
97958         "ands	r6, r6, r7\n\t"
97959 #elif defined(__clang__)
97960         "ands	r6, r7\n\t"
97961 #else
97962         "and	r6, r7\n\t"
97963 #endif
97964         "ldr	r5, [%[a], r4]\n\t"
97965 #ifdef WOLFSSL_KEIL
97966         "sbcs	r5, r5, r6\n\t"
97967 #elif defined(__clang__)
97968         "sbcs	r5, r6\n\t"
97969 #else
97970         "sbc	r5, r6\n\t"
97971 #endif
97972         "stm	%[a]!, {r5}\n\t"
97973         "ldm	%[m]!, {r6}\n\t"
97974 #ifdef WOLFSSL_KEIL
97975         "ands	r6, r6, r7\n\t"
97976 #elif defined(__clang__)
97977         "ands	r6, r7\n\t"
97978 #else
97979         "and	r6, r7\n\t"
97980 #endif
97981         "ldr	r5, [%[a], r4]\n\t"
97982 #ifdef WOLFSSL_KEIL
97983         "sbcs	r5, r5, r6\n\t"
97984 #elif defined(__clang__)
97985         "sbcs	r5, r6\n\t"
97986 #else
97987         "sbc	r5, r6\n\t"
97988 #endif
97989         "stm	%[a]!, {r5}\n\t"
97990         "ldm	%[m]!, {r6}\n\t"
97991 #ifdef WOLFSSL_KEIL
97992         "ands	r6, r6, r7\n\t"
97993 #elif defined(__clang__)
97994         "ands	r6, r7\n\t"
97995 #else
97996         "and	r6, r7\n\t"
97997 #endif
97998         "ldr	r5, [%[a], r4]\n\t"
97999 #ifdef WOLFSSL_KEIL
98000         "sbcs	r5, r5, r6\n\t"
98001 #elif defined(__clang__)
98002         "sbcs	r5, r6\n\t"
98003 #else
98004         "sbc	r5, r6\n\t"
98005 #endif
98006         "stm	%[a]!, {r5}\n\t"
98007         "ldm	%[m]!, {r6}\n\t"
98008 #ifdef WOLFSSL_KEIL
98009         "ands	r6, r6, r7\n\t"
98010 #elif defined(__clang__)
98011         "ands	r6, r7\n\t"
98012 #else
98013         "and	r6, r7\n\t"
98014 #endif
98015         "ldr	r5, [%[a], r4]\n\t"
98016 #ifdef WOLFSSL_KEIL
98017         "sbcs	r5, r5, r6\n\t"
98018 #elif defined(__clang__)
98019         "sbcs	r5, r6\n\t"
98020 #else
98021         "sbc	r5, r6\n\t"
98022 #endif
98023         "stm	%[a]!, {r5}\n\t"
98024         "ldm	%[m]!, {r6}\n\t"
98025 #ifdef WOLFSSL_KEIL
98026         "ands	r6, r6, r7\n\t"
98027 #elif defined(__clang__)
98028         "ands	r6, r7\n\t"
98029 #else
98030         "and	r6, r7\n\t"
98031 #endif
98032         "ldr	r5, [%[a], r4]\n\t"
98033 #ifdef WOLFSSL_KEIL
98034         "sbcs	r5, r5, r6\n\t"
98035 #elif defined(__clang__)
98036         "sbcs	r5, r6\n\t"
98037 #else
98038         "sbc	r5, r6\n\t"
98039 #endif
98040         "stm	%[a]!, {r5}\n\t"
98041 #endif /* WOLFSSL_SP_LARGE_CODE */
98042         : [a] "+r" (a), [m] "+r" (m), [mp] "+r" (mp)
98043         :
98044         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "lr"
98045     );
98046 }
98047 
98048 /* Multiply two Montgomery form numbers mod the modulus (prime).
98049  * (r = a * b mod m)
98050  *
98051  * r   Result of multiplication.
98052  * a   First number to multiply in Montgomery form.
98053  * b   Second number to multiply in Montgomery form.
98054  * m   Modulus (prime).
98055  * mp  Montgomery mulitplier.
98056  */
sp_256_mont_mul_8(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)98057 static void sp_256_mont_mul_8(sp_digit* r, const sp_digit* a,
98058         const sp_digit* b, const sp_digit* m, sp_digit mp)
98059 {
98060     sp_256_mul_8(r, a, b);
98061     sp_256_mont_reduce_8(r, m, mp);
98062 }
98063 
98064 /* Square the Montgomery form number. (r = a * a mod m)
98065  *
98066  * r   Result of squaring.
98067  * a   Number to square in Montgomery form.
98068  * m   Modulus (prime).
98069  * mp  Montgomery mulitplier.
98070  */
sp_256_mont_sqr_8(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)98071 static void sp_256_mont_sqr_8(sp_digit* r, const sp_digit* a,
98072         const sp_digit* m, sp_digit mp)
98073 {
98074     sp_256_sqr_8(r, a);
98075     sp_256_mont_reduce_8(r, m, mp);
98076 }
98077 
98078 #if !defined(WOLFSSL_SP_SMALL) || defined(HAVE_COMP_KEY)
98079 /* Square the Montgomery form number a number of times. (r = a ^ n mod m)
98080  *
98081  * r   Result of squaring.
98082  * a   Number to square in Montgomery form.
98083  * n   Number of times to square.
98084  * m   Modulus (prime).
98085  * mp  Montgomery mulitplier.
98086  */
sp_256_mont_sqr_n_8(sp_digit * r,const sp_digit * a,int n,const sp_digit * m,sp_digit mp)98087 static void sp_256_mont_sqr_n_8(sp_digit* r, const sp_digit* a, int n,
98088         const sp_digit* m, sp_digit mp)
98089 {
98090     sp_256_mont_sqr_8(r, a, m, mp);
98091     for (; n > 1; n--) {
98092         sp_256_mont_sqr_8(r, r, m, mp);
98093     }
98094 }
98095 
98096 #endif /* !WOLFSSL_SP_SMALL | HAVE_COMP_KEY */
98097 #ifdef WOLFSSL_SP_SMALL
98098 /* Mod-2 for the P256 curve. */
98099 static const uint32_t p256_mod_minus_2[8] = {
98100     0xfffffffdU,0xffffffffU,0xffffffffU,0x00000000U,0x00000000U,0x00000000U,
98101     0x00000001U,0xffffffffU
98102 };
98103 #endif /* !WOLFSSL_SP_SMALL */
98104 
98105 /* Invert the number, in Montgomery form, modulo the modulus (prime) of the
98106  * P256 curve. (r = 1 / a mod m)
98107  *
98108  * r   Inverse result.
98109  * a   Number to invert.
98110  * td  Temporary data.
98111  */
sp_256_mont_inv_8(sp_digit * r,const sp_digit * a,sp_digit * td)98112 static void sp_256_mont_inv_8(sp_digit* r, const sp_digit* a, sp_digit* td)
98113 {
98114 #ifdef WOLFSSL_SP_SMALL
98115     sp_digit* t = td;
98116     int i;
98117 
98118     XMEMCPY(t, a, sizeof(sp_digit) * 8);
98119     for (i=254; i>=0; i--) {
98120         sp_256_mont_sqr_8(t, t, p256_mod, p256_mp_mod);
98121         if (p256_mod_minus_2[i / 32] & ((sp_digit)1 << (i % 32)))
98122             sp_256_mont_mul_8(t, t, a, p256_mod, p256_mp_mod);
98123     }
98124     XMEMCPY(r, t, sizeof(sp_digit) * 8);
98125 #else
98126     sp_digit* t1 = td;
98127     sp_digit* t2 = td + 2 * 8;
98128     sp_digit* t3 = td + 4 * 8;
98129     /* 0x2 */
98130     sp_256_mont_sqr_8(t1, a, p256_mod, p256_mp_mod);
98131     /* 0x3 */
98132     sp_256_mont_mul_8(t2, t1, a, p256_mod, p256_mp_mod);
98133     /* 0xc */
98134     sp_256_mont_sqr_n_8(t1, t2, 2, p256_mod, p256_mp_mod);
98135     /* 0xd */
98136     sp_256_mont_mul_8(t3, t1, a, p256_mod, p256_mp_mod);
98137     /* 0xf */
98138     sp_256_mont_mul_8(t2, t2, t1, p256_mod, p256_mp_mod);
98139     /* 0xf0 */
98140     sp_256_mont_sqr_n_8(t1, t2, 4, p256_mod, p256_mp_mod);
98141     /* 0xfd */
98142     sp_256_mont_mul_8(t3, t3, t1, p256_mod, p256_mp_mod);
98143     /* 0xff */
98144     sp_256_mont_mul_8(t2, t2, t1, p256_mod, p256_mp_mod);
98145     /* 0xff00 */
98146     sp_256_mont_sqr_n_8(t1, t2, 8, p256_mod, p256_mp_mod);
98147     /* 0xfffd */
98148     sp_256_mont_mul_8(t3, t3, t1, p256_mod, p256_mp_mod);
98149     /* 0xffff */
98150     sp_256_mont_mul_8(t2, t2, t1, p256_mod, p256_mp_mod);
98151     /* 0xffff0000 */
98152     sp_256_mont_sqr_n_8(t1, t2, 16, p256_mod, p256_mp_mod);
98153     /* 0xfffffffd */
98154     sp_256_mont_mul_8(t3, t3, t1, p256_mod, p256_mp_mod);
98155     /* 0xffffffff */
98156     sp_256_mont_mul_8(t2, t2, t1, p256_mod, p256_mp_mod);
98157     /* 0xffffffff00000000 */
98158     sp_256_mont_sqr_n_8(t1, t2, 32, p256_mod, p256_mp_mod);
98159     /* 0xffffffffffffffff */
98160     sp_256_mont_mul_8(t2, t2, t1, p256_mod, p256_mp_mod);
98161     /* 0xffffffff00000001 */
98162     sp_256_mont_mul_8(r, t1, a, p256_mod, p256_mp_mod);
98163     /* 0xffffffff000000010000000000000000000000000000000000000000 */
98164     sp_256_mont_sqr_n_8(r, r, 160, p256_mod, p256_mp_mod);
98165     /* 0xffffffff00000001000000000000000000000000ffffffffffffffff */
98166     sp_256_mont_mul_8(r, r, t2, p256_mod, p256_mp_mod);
98167     /* 0xffffffff00000001000000000000000000000000ffffffffffffffff00000000 */
98168     sp_256_mont_sqr_n_8(r, r, 32, p256_mod, p256_mp_mod);
98169     /* 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffd */
98170     sp_256_mont_mul_8(r, r, t3, p256_mod, p256_mp_mod);
98171 #endif /* WOLFSSL_SP_SMALL */
98172 }
98173 
98174 /* Compare a with b in constant time.
98175  *
98176  * a  A single precision integer.
98177  * b  A single precision integer.
98178  * return -ve, 0 or +ve if a is less than, equal to or greater than b
98179  * respectively.
98180  */
sp_256_cmp_8(const sp_digit * a,const sp_digit * b)98181 SP_NOINLINE static sp_int32 sp_256_cmp_8(const sp_digit* a, const sp_digit* b)
98182 {
98183     __asm__ __volatile__ (
98184         "movs	r2, #0\n\t"
98185         "movs	r3, #0\n\t"
98186 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98187         "mvns	r3, r3\n\t"
98188 #else
98189         "mvn	r3, r3\n\t"
98190 #endif
98191         "movs	r6, #28\n\t"
98192         "\n"
98193     "L_sp_256_cmp_8_words_%=:\n\t"
98194         "ldr	r7, [%[a], r6]\n\t"
98195         "ldr	r5, [%[b], r6]\n\t"
98196 #ifdef WOLFSSL_KEIL
98197         "ands	r7, r7, r3\n\t"
98198 #elif defined(__clang__)
98199         "ands	r7, r3\n\t"
98200 #else
98201         "and	r7, r3\n\t"
98202 #endif
98203 #ifdef WOLFSSL_KEIL
98204         "ands	r5, r5, r3\n\t"
98205 #elif defined(__clang__)
98206         "ands	r5, r3\n\t"
98207 #else
98208         "and	r5, r3\n\t"
98209 #endif
98210         "movs	r4, r7\n\t"
98211 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98212         "subs	r7, r7, r5\n\t"
98213 #else
98214         "sub	r7, r7, r5\n\t"
98215 #endif
98216 #ifdef WOLFSSL_KEIL
98217         "sbcs	r7, r7, r7\n\t"
98218 #elif defined(__clang__)
98219         "sbcs	r7, r7\n\t"
98220 #else
98221         "sbc	r7, r7\n\t"
98222 #endif
98223 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98224         "adds	r2, r2, r7\n\t"
98225 #else
98226         "add	r2, r2, r7\n\t"
98227 #endif
98228 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98229         "mvns	r7, r7\n\t"
98230 #else
98231         "mvn	r7, r7\n\t"
98232 #endif
98233 #ifdef WOLFSSL_KEIL
98234         "ands	r3, r3, r7\n\t"
98235 #elif defined(__clang__)
98236         "ands	r3, r7\n\t"
98237 #else
98238         "and	r3, r7\n\t"
98239 #endif
98240 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98241         "subs	r5, r5, r4\n\t"
98242 #else
98243         "sub	r5, r5, r4\n\t"
98244 #endif
98245 #ifdef WOLFSSL_KEIL
98246         "sbcs	r7, r7, r7\n\t"
98247 #elif defined(__clang__)
98248         "sbcs	r7, r7\n\t"
98249 #else
98250         "sbc	r7, r7\n\t"
98251 #endif
98252 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98253         "subs	r2, r2, r7\n\t"
98254 #else
98255         "sub	r2, r2, r7\n\t"
98256 #endif
98257 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98258         "mvns	r7, r7\n\t"
98259 #else
98260         "mvn	r7, r7\n\t"
98261 #endif
98262 #ifdef WOLFSSL_KEIL
98263         "ands	r3, r3, r7\n\t"
98264 #elif defined(__clang__)
98265         "ands	r3, r7\n\t"
98266 #else
98267         "and	r3, r7\n\t"
98268 #endif
98269 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98270         "subs	r6, r6, #4\n\t"
98271 #else
98272         "sub	r6, r6, #4\n\t"
98273 #endif
98274         "cmp	r6, #0\n\t"
98275         "bge	L_sp_256_cmp_8_words_%=\n\t"
98276         "movs	%[a], r2\n\t"
98277         : [a] "+r" (a), [b] "+r" (b)
98278         :
98279         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
98280     );
98281     return (uint32_t)(size_t)a;
98282 }
98283 
98284 /* Normalize the values in each word to 32.
98285  *
98286  * a  Array of sp_digit to normalize.
98287  */
98288 #define sp_256_norm_8(a)
98289 
98290 /* Map the Montgomery form projective coordinate point to an affine point.
98291  *
98292  * r  Resulting affine coordinate point.
98293  * p  Montgomery form projective coordinate point.
98294  * t  Temporary ordinate data.
98295  */
sp_256_map_8(sp_point_256 * r,const sp_point_256 * p,sp_digit * t)98296 static void sp_256_map_8(sp_point_256* r, const sp_point_256* p,
98297     sp_digit* t)
98298 {
98299     sp_digit* t1 = t;
98300     sp_digit* t2 = t + 2*8;
98301     sp_int32 n;
98302 
98303     sp_256_mont_inv_8(t1, p->z, t + 2*8);
98304 
98305     sp_256_mont_sqr_8(t2, t1, p256_mod, p256_mp_mod);
98306     sp_256_mont_mul_8(t1, t2, t1, p256_mod, p256_mp_mod);
98307 
98308     /* x /= z^2 */
98309     sp_256_mont_mul_8(r->x, p->x, t2, p256_mod, p256_mp_mod);
98310     XMEMSET(r->x + 8, 0, sizeof(r->x) / 2U);
98311     sp_256_mont_reduce_8(r->x, p256_mod, p256_mp_mod);
98312     /* Reduce x to less than modulus */
98313     n = sp_256_cmp_8(r->x, p256_mod);
98314     sp_256_cond_sub_8(r->x, r->x, p256_mod, 0 - ((n >= 0) ?
98315                 (sp_digit)1 : (sp_digit)0));
98316     sp_256_norm_8(r->x);
98317 
98318     /* y /= z^3 */
98319     sp_256_mont_mul_8(r->y, p->y, t1, p256_mod, p256_mp_mod);
98320     XMEMSET(r->y + 8, 0, sizeof(r->y) / 2U);
98321     sp_256_mont_reduce_8(r->y, p256_mod, p256_mp_mod);
98322     /* Reduce y to less than modulus */
98323     n = sp_256_cmp_8(r->y, p256_mod);
98324     sp_256_cond_sub_8(r->y, r->y, p256_mod, 0 - ((n >= 0) ?
98325                 (sp_digit)1 : (sp_digit)0));
98326     sp_256_norm_8(r->y);
98327 
98328     XMEMSET(r->z, 0, sizeof(r->z));
98329     r->z[0] = 1;
98330 
98331 }
98332 
98333 /* Add two Montgomery form numbers (r = a + b % m).
98334  *
98335  * r   Result of addition.
98336  * a   First number to add in Montgomery form.
98337  * b   Second number to add in Montgomery form.
98338  * m   Modulus (prime).
98339  */
sp_256_mont_add_8(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m)98340 SP_NOINLINE static void sp_256_mont_add_8(sp_digit* r, const sp_digit* a,
98341         const sp_digit* b, const sp_digit* m)
98342 {
98343     (void)m;
98344     __asm__ __volatile__ (
98345         "movs	r3, #0\n\t"
98346         "ldr	r4, [%[a]]\n\t"
98347         "ldr	r5, [%[a], #4]\n\t"
98348         "ldr	r6, [%[b]]\n\t"
98349         "ldr	r7, [%[b], #4]\n\t"
98350 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98351         "adds	r4, r4, r6\n\t"
98352 #else
98353         "add	r4, r4, r6\n\t"
98354 #endif
98355 #ifdef WOLFSSL_KEIL
98356         "adcs	r5, r5, r7\n\t"
98357 #elif defined(__clang__)
98358         "adcs	r5, r7\n\t"
98359 #else
98360         "adc	r5, r7\n\t"
98361 #endif
98362         "str	r4, [%[r]]\n\t"
98363         "str	r5, [%[r], #4]\n\t"
98364         "ldr	r4, [%[a], #8]\n\t"
98365         "ldr	r5, [%[a], #12]\n\t"
98366         "ldr	r6, [%[b], #8]\n\t"
98367         "ldr	r7, [%[b], #12]\n\t"
98368 #ifdef WOLFSSL_KEIL
98369         "adcs	r4, r4, r6\n\t"
98370 #elif defined(__clang__)
98371         "adcs	r4, r6\n\t"
98372 #else
98373         "adc	r4, r6\n\t"
98374 #endif
98375 #ifdef WOLFSSL_KEIL
98376         "adcs	r5, r5, r7\n\t"
98377 #elif defined(__clang__)
98378         "adcs	r5, r7\n\t"
98379 #else
98380         "adc	r5, r7\n\t"
98381 #endif
98382         "str	r4, [%[r], #8]\n\t"
98383         "str	r5, [%[r], #12]\n\t"
98384         "ldr	r4, [%[a], #16]\n\t"
98385         "ldr	r5, [%[a], #20]\n\t"
98386         "ldr	r6, [%[b], #16]\n\t"
98387         "ldr	r7, [%[b], #20]\n\t"
98388 #ifdef WOLFSSL_KEIL
98389         "adcs	r4, r4, r6\n\t"
98390 #elif defined(__clang__)
98391         "adcs	r4, r6\n\t"
98392 #else
98393         "adc	r4, r6\n\t"
98394 #endif
98395 #ifdef WOLFSSL_KEIL
98396         "adcs	r5, r5, r7\n\t"
98397 #elif defined(__clang__)
98398         "adcs	r5, r7\n\t"
98399 #else
98400         "adc	r5, r7\n\t"
98401 #endif
98402         "mov	r8, r4\n\t"
98403         "mov	r9, r5\n\t"
98404         "ldr	r4, [%[a], #24]\n\t"
98405         "ldr	r5, [%[a], #28]\n\t"
98406         "ldr	r6, [%[b], #24]\n\t"
98407         "ldr	r7, [%[b], #28]\n\t"
98408 #ifdef WOLFSSL_KEIL
98409         "adcs	r4, r4, r6\n\t"
98410 #elif defined(__clang__)
98411         "adcs	r4, r6\n\t"
98412 #else
98413         "adc	r4, r6\n\t"
98414 #endif
98415 #ifdef WOLFSSL_KEIL
98416         "adcs	r5, r5, r7\n\t"
98417 #elif defined(__clang__)
98418         "adcs	r5, r7\n\t"
98419 #else
98420         "adc	r5, r7\n\t"
98421 #endif
98422         "mov	r10, r4\n\t"
98423         "mov	r11, r5\n\t"
98424 #ifdef WOLFSSL_KEIL
98425         "adcs	r3, r3, r3\n\t"
98426 #elif defined(__clang__)
98427         "adcs	r3, r3\n\t"
98428 #else
98429         "adc	r3, r3\n\t"
98430 #endif
98431         "movs	r6, r3\n\t"
98432 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98433         "subs	r3, r3, #1\n\t"
98434 #else
98435         "sub	r3, r3, #1\n\t"
98436 #endif
98437 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98438         "mvns	r3, r3\n\t"
98439 #else
98440         "mvn	r3, r3\n\t"
98441 #endif
98442         "movs	r7, #0\n\t"
98443         "ldr	r4, [%[r]]\n\t"
98444         "ldr	r5, [%[r], #4]\n\t"
98445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98446         "subs	r4, r4, r3\n\t"
98447 #else
98448         "sub	r4, r4, r3\n\t"
98449 #endif
98450 #ifdef WOLFSSL_KEIL
98451         "sbcs	r5, r5, r3\n\t"
98452 #elif defined(__clang__)
98453         "sbcs	r5, r3\n\t"
98454 #else
98455         "sbc	r5, r3\n\t"
98456 #endif
98457         "str	r4, [%[r]]\n\t"
98458         "str	r5, [%[r], #4]\n\t"
98459         "ldr	r4, [%[r], #8]\n\t"
98460         "ldr	r5, [%[r], #12]\n\t"
98461 #ifdef WOLFSSL_KEIL
98462         "sbcs	r4, r4, r3\n\t"
98463 #elif defined(__clang__)
98464         "sbcs	r4, r3\n\t"
98465 #else
98466         "sbc	r4, r3\n\t"
98467 #endif
98468 #ifdef WOLFSSL_KEIL
98469         "sbcs	r5, r5, r7\n\t"
98470 #elif defined(__clang__)
98471         "sbcs	r5, r7\n\t"
98472 #else
98473         "sbc	r5, r7\n\t"
98474 #endif
98475         "str	r4, [%[r], #8]\n\t"
98476         "str	r5, [%[r], #12]\n\t"
98477         "mov	r4, r8\n\t"
98478         "mov	r5, r9\n\t"
98479 #ifdef WOLFSSL_KEIL
98480         "sbcs	r4, r4, r7\n\t"
98481 #elif defined(__clang__)
98482         "sbcs	r4, r7\n\t"
98483 #else
98484         "sbc	r4, r7\n\t"
98485 #endif
98486 #ifdef WOLFSSL_KEIL
98487         "sbcs	r5, r5, r7\n\t"
98488 #elif defined(__clang__)
98489         "sbcs	r5, r7\n\t"
98490 #else
98491         "sbc	r5, r7\n\t"
98492 #endif
98493         "str	r4, [%[r], #16]\n\t"
98494         "str	r5, [%[r], #20]\n\t"
98495         "mov	r4, r10\n\t"
98496         "mov	r5, r11\n\t"
98497 #ifdef WOLFSSL_KEIL
98498         "sbcs	r4, r4, r6\n\t"
98499 #elif defined(__clang__)
98500         "sbcs	r4, r6\n\t"
98501 #else
98502         "sbc	r4, r6\n\t"
98503 #endif
98504 #ifdef WOLFSSL_KEIL
98505         "sbcs	r5, r5, r3\n\t"
98506 #elif defined(__clang__)
98507         "sbcs	r5, r3\n\t"
98508 #else
98509         "sbc	r5, r3\n\t"
98510 #endif
98511         "str	r4, [%[r], #24]\n\t"
98512         "str	r5, [%[r], #28]\n\t"
98513         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
98514         :
98515         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
98516     );
98517 }
98518 
98519 /* Double a Montgomery form number (r = a + a % m).
98520  *
98521  * r   Result of doubling.
98522  * a   Number to double in Montgomery form.
98523  * m   Modulus (prime).
98524  */
sp_256_mont_dbl_8(sp_digit * r,const sp_digit * a,const sp_digit * m)98525 SP_NOINLINE static void sp_256_mont_dbl_8(sp_digit* r, const sp_digit* a,
98526         const sp_digit* m)
98527 {
98528     (void)m;
98529     __asm__ __volatile__ (
98530         "ldr	r4, [%[a]]\n\t"
98531         "ldr	r5, [%[a], #4]\n\t"
98532         "ldr	r6, [%[a], #8]\n\t"
98533         "ldr	r7, [%[a], #12]\n\t"
98534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98535         "adds	r4, r4, r4\n\t"
98536 #else
98537         "add	r4, r4, r4\n\t"
98538 #endif
98539 #ifdef WOLFSSL_KEIL
98540         "adcs	r5, r5, r5\n\t"
98541 #elif defined(__clang__)
98542         "adcs	r5, r5\n\t"
98543 #else
98544         "adc	r5, r5\n\t"
98545 #endif
98546 #ifdef WOLFSSL_KEIL
98547         "adcs	r6, r6, r6\n\t"
98548 #elif defined(__clang__)
98549         "adcs	r6, r6\n\t"
98550 #else
98551         "adc	r6, r6\n\t"
98552 #endif
98553 #ifdef WOLFSSL_KEIL
98554         "adcs	r7, r7, r7\n\t"
98555 #elif defined(__clang__)
98556         "adcs	r7, r7\n\t"
98557 #else
98558         "adc	r7, r7\n\t"
98559 #endif
98560         "str	r4, [%[r]]\n\t"
98561         "str	r5, [%[r], #4]\n\t"
98562         "str	r6, [%[r], #8]\n\t"
98563         "str	r7, [%[r], #12]\n\t"
98564         "ldr	r4, [%[a], #16]\n\t"
98565         "ldr	r5, [%[a], #20]\n\t"
98566         "ldr	r6, [%[a], #24]\n\t"
98567         "ldr	r7, [%[a], #28]\n\t"
98568 #ifdef WOLFSSL_KEIL
98569         "adcs	r4, r4, r4\n\t"
98570 #elif defined(__clang__)
98571         "adcs	r4, r4\n\t"
98572 #else
98573         "adc	r4, r4\n\t"
98574 #endif
98575 #ifdef WOLFSSL_KEIL
98576         "adcs	r5, r5, r5\n\t"
98577 #elif defined(__clang__)
98578         "adcs	r5, r5\n\t"
98579 #else
98580         "adc	r5, r5\n\t"
98581 #endif
98582 #ifdef WOLFSSL_KEIL
98583         "adcs	r6, r6, r6\n\t"
98584 #elif defined(__clang__)
98585         "adcs	r6, r6\n\t"
98586 #else
98587         "adc	r6, r6\n\t"
98588 #endif
98589 #ifdef WOLFSSL_KEIL
98590         "adcs	r7, r7, r7\n\t"
98591 #elif defined(__clang__)
98592         "adcs	r7, r7\n\t"
98593 #else
98594         "adc	r7, r7\n\t"
98595 #endif
98596         "mov	r8, r4\n\t"
98597         "mov	r9, r5\n\t"
98598         "mov	r10, r6\n\t"
98599         "mov	r11, r7\n\t"
98600         "movs	r3, #0\n\t"
98601         "movs	r7, #0\n\t"
98602 #ifdef WOLFSSL_KEIL
98603         "adcs	r3, r3, r3\n\t"
98604 #elif defined(__clang__)
98605         "adcs	r3, r3\n\t"
98606 #else
98607         "adc	r3, r3\n\t"
98608 #endif
98609         "movs	r2, r3\n\t"
98610 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98611         "subs	r3, r3, #1\n\t"
98612 #else
98613         "sub	r3, r3, #1\n\t"
98614 #endif
98615 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98616         "mvns	r3, r3\n\t"
98617 #else
98618         "mvn	r3, r3\n\t"
98619 #endif
98620         "ldr	r4, [%[r]]\n\t"
98621         "ldr	r5, [%[r], #4]\n\t"
98622         "ldr	r6, [%[r], #8]\n\t"
98623 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98624         "subs	r4, r4, r3\n\t"
98625 #else
98626         "sub	r4, r4, r3\n\t"
98627 #endif
98628 #ifdef WOLFSSL_KEIL
98629         "sbcs	r5, r5, r3\n\t"
98630 #elif defined(__clang__)
98631         "sbcs	r5, r3\n\t"
98632 #else
98633         "sbc	r5, r3\n\t"
98634 #endif
98635 #ifdef WOLFSSL_KEIL
98636         "sbcs	r6, r6, r3\n\t"
98637 #elif defined(__clang__)
98638         "sbcs	r6, r3\n\t"
98639 #else
98640         "sbc	r6, r3\n\t"
98641 #endif
98642         "str	r4, [%[r]]\n\t"
98643         "str	r5, [%[r], #4]\n\t"
98644         "str	r6, [%[r], #8]\n\t"
98645         "ldr	r4, [%[r], #12]\n\t"
98646         "mov	r5, r8\n\t"
98647         "mov	r6, r9\n\t"
98648 #ifdef WOLFSSL_KEIL
98649         "sbcs	r4, r4, r7\n\t"
98650 #elif defined(__clang__)
98651         "sbcs	r4, r7\n\t"
98652 #else
98653         "sbc	r4, r7\n\t"
98654 #endif
98655 #ifdef WOLFSSL_KEIL
98656         "sbcs	r5, r5, r7\n\t"
98657 #elif defined(__clang__)
98658         "sbcs	r5, r7\n\t"
98659 #else
98660         "sbc	r5, r7\n\t"
98661 #endif
98662 #ifdef WOLFSSL_KEIL
98663         "sbcs	r6, r6, r7\n\t"
98664 #elif defined(__clang__)
98665         "sbcs	r6, r7\n\t"
98666 #else
98667         "sbc	r6, r7\n\t"
98668 #endif
98669         "str	r4, [%[r], #12]\n\t"
98670         "str	r5, [%[r], #16]\n\t"
98671         "str	r6, [%[r], #20]\n\t"
98672         "mov	r4, r10\n\t"
98673         "mov	r5, r11\n\t"
98674 #ifdef WOLFSSL_KEIL
98675         "sbcs	r4, r4, r2\n\t"
98676 #elif defined(__clang__)
98677         "sbcs	r4, r2\n\t"
98678 #else
98679         "sbc	r4, r2\n\t"
98680 #endif
98681 #ifdef WOLFSSL_KEIL
98682         "sbcs	r5, r5, r3\n\t"
98683 #elif defined(__clang__)
98684         "sbcs	r5, r3\n\t"
98685 #else
98686         "sbc	r5, r3\n\t"
98687 #endif
98688         "str	r4, [%[r], #24]\n\t"
98689         "str	r5, [%[r], #28]\n\t"
98690         : [r] "+r" (r), [a] "+r" (a)
98691         :
98692         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
98693     );
98694 }
98695 
98696 /* Triple a Montgomery form number (r = a + a + a % m).
98697  *
98698  * r   Result of Tripling.
98699  * a   Number to triple in Montgomery form.
98700  * m   Modulus (prime).
98701  */
sp_256_mont_tpl_8(sp_digit * r,const sp_digit * a,const sp_digit * m)98702 SP_NOINLINE static void sp_256_mont_tpl_8(sp_digit* r, const sp_digit* a,
98703         const sp_digit* m)
98704 {
98705     (void)m;
98706     __asm__ __volatile__ (
98707         "ldr	r6, [%[a]]\n\t"
98708         "ldr	r7, [%[a], #4]\n\t"
98709         "ldr	r4, [%[a], #8]\n\t"
98710         "ldr	r5, [%[a], #12]\n\t"
98711 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98712         "adds	r6, r6, r6\n\t"
98713 #else
98714         "add	r6, r6, r6\n\t"
98715 #endif
98716 #ifdef WOLFSSL_KEIL
98717         "adcs	r7, r7, r7\n\t"
98718 #elif defined(__clang__)
98719         "adcs	r7, r7\n\t"
98720 #else
98721         "adc	r7, r7\n\t"
98722 #endif
98723 #ifdef WOLFSSL_KEIL
98724         "adcs	r4, r4, r4\n\t"
98725 #elif defined(__clang__)
98726         "adcs	r4, r4\n\t"
98727 #else
98728         "adc	r4, r4\n\t"
98729 #endif
98730 #ifdef WOLFSSL_KEIL
98731         "adcs	r5, r5, r5\n\t"
98732 #elif defined(__clang__)
98733         "adcs	r5, r5\n\t"
98734 #else
98735         "adc	r5, r5\n\t"
98736 #endif
98737         "mov	r8, r4\n\t"
98738         "mov	r9, r5\n\t"
98739         "ldr	r2, [%[a], #16]\n\t"
98740         "ldr	r3, [%[a], #20]\n\t"
98741         "ldr	r4, [%[a], #24]\n\t"
98742         "ldr	r5, [%[a], #28]\n\t"
98743 #ifdef WOLFSSL_KEIL
98744         "adcs	r2, r2, r2\n\t"
98745 #elif defined(__clang__)
98746         "adcs	r2, r2\n\t"
98747 #else
98748         "adc	r2, r2\n\t"
98749 #endif
98750 #ifdef WOLFSSL_KEIL
98751         "adcs	r3, r3, r3\n\t"
98752 #elif defined(__clang__)
98753         "adcs	r3, r3\n\t"
98754 #else
98755         "adc	r3, r3\n\t"
98756 #endif
98757 #ifdef WOLFSSL_KEIL
98758         "adcs	r4, r4, r4\n\t"
98759 #elif defined(__clang__)
98760         "adcs	r4, r4\n\t"
98761 #else
98762         "adc	r4, r4\n\t"
98763 #endif
98764 #ifdef WOLFSSL_KEIL
98765         "adcs	r5, r5, r5\n\t"
98766 #elif defined(__clang__)
98767         "adcs	r5, r5\n\t"
98768 #else
98769         "adc	r5, r5\n\t"
98770 #endif
98771         "mov	r10, r2\n\t"
98772         "mov	r11, r3\n\t"
98773         "mov	r12, r4\n\t"
98774         "mov	lr, r5\n\t"
98775         "movs	r3, #0\n\t"
98776         "movs	r5, #0\n\t"
98777 #ifdef WOLFSSL_KEIL
98778         "adcs	r3, r3, r3\n\t"
98779 #elif defined(__clang__)
98780         "adcs	r3, r3\n\t"
98781 #else
98782         "adc	r3, r3\n\t"
98783 #endif
98784         "movs	r4, r3\n\t"
98785 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98786         "subs	r3, r3, #1\n\t"
98787 #else
98788         "sub	r3, r3, #1\n\t"
98789 #endif
98790 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98791         "mvns	r3, r3\n\t"
98792 #else
98793         "mvn	r3, r3\n\t"
98794 #endif
98795 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98796         "subs	r6, r6, r3\n\t"
98797 #else
98798         "sub	r6, r6, r3\n\t"
98799 #endif
98800 #ifdef WOLFSSL_KEIL
98801         "sbcs	r7, r7, r3\n\t"
98802 #elif defined(__clang__)
98803         "sbcs	r7, r3\n\t"
98804 #else
98805         "sbc	r7, r3\n\t"
98806 #endif
98807         "mov	r2, r8\n\t"
98808 #ifdef WOLFSSL_KEIL
98809         "sbcs	r2, r2, r3\n\t"
98810 #elif defined(__clang__)
98811         "sbcs	r2, r3\n\t"
98812 #else
98813         "sbc	r2, r3\n\t"
98814 #endif
98815         "mov	r8, r2\n\t"
98816         "mov	r2, r9\n\t"
98817 #ifdef WOLFSSL_KEIL
98818         "sbcs	r2, r2, r5\n\t"
98819 #elif defined(__clang__)
98820         "sbcs	r2, r5\n\t"
98821 #else
98822         "sbc	r2, r5\n\t"
98823 #endif
98824         "mov	r9, r2\n\t"
98825         "mov	r2, r10\n\t"
98826 #ifdef WOLFSSL_KEIL
98827         "sbcs	r2, r2, r5\n\t"
98828 #elif defined(__clang__)
98829         "sbcs	r2, r5\n\t"
98830 #else
98831         "sbc	r2, r5\n\t"
98832 #endif
98833         "mov	r10, r2\n\t"
98834         "mov	r2, r11\n\t"
98835 #ifdef WOLFSSL_KEIL
98836         "sbcs	r2, r2, r5\n\t"
98837 #elif defined(__clang__)
98838         "sbcs	r2, r5\n\t"
98839 #else
98840         "sbc	r2, r5\n\t"
98841 #endif
98842         "mov	r11, r2\n\t"
98843         "mov	r2, r12\n\t"
98844 #ifdef WOLFSSL_KEIL
98845         "sbcs	r2, r2, r4\n\t"
98846 #elif defined(__clang__)
98847         "sbcs	r2, r4\n\t"
98848 #else
98849         "sbc	r2, r4\n\t"
98850 #endif
98851         "mov	r12, r2\n\t"
98852         "mov	r2, lr\n\t"
98853 #ifdef WOLFSSL_KEIL
98854         "sbcs	r2, r2, r3\n\t"
98855 #elif defined(__clang__)
98856         "sbcs	r2, r3\n\t"
98857 #else
98858         "sbc	r2, r3\n\t"
98859 #endif
98860         "mov	lr, r2\n\t"
98861         "ldr	r2, [%[a]]\n\t"
98862         "ldr	r3, [%[a], #4]\n\t"
98863 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98864         "adds	r6, r6, r2\n\t"
98865 #else
98866         "add	r6, r6, r2\n\t"
98867 #endif
98868 #ifdef WOLFSSL_KEIL
98869         "adcs	r7, r7, r3\n\t"
98870 #elif defined(__clang__)
98871         "adcs	r7, r3\n\t"
98872 #else
98873         "adc	r7, r3\n\t"
98874 #endif
98875         "ldr	r2, [%[a], #8]\n\t"
98876         "ldr	r3, [%[a], #12]\n\t"
98877         "mov	r4, r8\n\t"
98878         "mov	r5, r9\n\t"
98879 #ifdef WOLFSSL_KEIL
98880         "adcs	r2, r2, r4\n\t"
98881 #elif defined(__clang__)
98882         "adcs	r2, r4\n\t"
98883 #else
98884         "adc	r2, r4\n\t"
98885 #endif
98886 #ifdef WOLFSSL_KEIL
98887         "adcs	r3, r3, r5\n\t"
98888 #elif defined(__clang__)
98889         "adcs	r3, r5\n\t"
98890 #else
98891         "adc	r3, r5\n\t"
98892 #endif
98893         "mov	r8, r2\n\t"
98894         "mov	r9, r3\n\t"
98895         "ldr	r2, [%[a], #16]\n\t"
98896         "ldr	r3, [%[a], #20]\n\t"
98897         "mov	r4, r10\n\t"
98898         "mov	r5, r11\n\t"
98899 #ifdef WOLFSSL_KEIL
98900         "adcs	r2, r2, r4\n\t"
98901 #elif defined(__clang__)
98902         "adcs	r2, r4\n\t"
98903 #else
98904         "adc	r2, r4\n\t"
98905 #endif
98906 #ifdef WOLFSSL_KEIL
98907         "adcs	r3, r3, r5\n\t"
98908 #elif defined(__clang__)
98909         "adcs	r3, r5\n\t"
98910 #else
98911         "adc	r3, r5\n\t"
98912 #endif
98913         "mov	r10, r2\n\t"
98914         "mov	r11, r3\n\t"
98915         "ldr	r2, [%[a], #24]\n\t"
98916         "ldr	r3, [%[a], #28]\n\t"
98917         "mov	r4, r12\n\t"
98918         "mov	r5, lr\n\t"
98919 #ifdef WOLFSSL_KEIL
98920         "adcs	r2, r2, r4\n\t"
98921 #elif defined(__clang__)
98922         "adcs	r2, r4\n\t"
98923 #else
98924         "adc	r2, r4\n\t"
98925 #endif
98926 #ifdef WOLFSSL_KEIL
98927         "adcs	r3, r3, r5\n\t"
98928 #elif defined(__clang__)
98929         "adcs	r3, r5\n\t"
98930 #else
98931         "adc	r3, r5\n\t"
98932 #endif
98933         "mov	r12, r2\n\t"
98934         "mov	lr, r3\n\t"
98935         "movs	r3, #0\n\t"
98936         "movs	r5, #0\n\t"
98937 #ifdef WOLFSSL_KEIL
98938         "adcs	r3, r3, r3\n\t"
98939 #elif defined(__clang__)
98940         "adcs	r3, r3\n\t"
98941 #else
98942         "adc	r3, r3\n\t"
98943 #endif
98944         "movs	r4, r3\n\t"
98945 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98946         "subs	r3, r3, #1\n\t"
98947 #else
98948         "sub	r3, r3, #1\n\t"
98949 #endif
98950 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98951         "mvns	r3, r3\n\t"
98952 #else
98953         "mvn	r3, r3\n\t"
98954 #endif
98955 #if defined(__clang__) || defined(WOLFSSL_KEIL)
98956         "subs	r6, r6, r3\n\t"
98957 #else
98958         "sub	r6, r6, r3\n\t"
98959 #endif
98960         "str	r6, [%[r]]\n\t"
98961 #ifdef WOLFSSL_KEIL
98962         "sbcs	r7, r7, r3\n\t"
98963 #elif defined(__clang__)
98964         "sbcs	r7, r3\n\t"
98965 #else
98966         "sbc	r7, r3\n\t"
98967 #endif
98968         "str	r7, [%[r], #4]\n\t"
98969         "mov	r2, r8\n\t"
98970 #ifdef WOLFSSL_KEIL
98971         "sbcs	r2, r2, r3\n\t"
98972 #elif defined(__clang__)
98973         "sbcs	r2, r3\n\t"
98974 #else
98975         "sbc	r2, r3\n\t"
98976 #endif
98977         "str	r2, [%[r], #8]\n\t"
98978         "mov	r2, r9\n\t"
98979 #ifdef WOLFSSL_KEIL
98980         "sbcs	r2, r2, r5\n\t"
98981 #elif defined(__clang__)
98982         "sbcs	r2, r5\n\t"
98983 #else
98984         "sbc	r2, r5\n\t"
98985 #endif
98986         "str	r2, [%[r], #12]\n\t"
98987         "mov	r2, r10\n\t"
98988 #ifdef WOLFSSL_KEIL
98989         "sbcs	r2, r2, r5\n\t"
98990 #elif defined(__clang__)
98991         "sbcs	r2, r5\n\t"
98992 #else
98993         "sbc	r2, r5\n\t"
98994 #endif
98995         "str	r2, [%[r], #16]\n\t"
98996         "mov	r2, r11\n\t"
98997 #ifdef WOLFSSL_KEIL
98998         "sbcs	r2, r2, r5\n\t"
98999 #elif defined(__clang__)
99000         "sbcs	r2, r5\n\t"
99001 #else
99002         "sbc	r2, r5\n\t"
99003 #endif
99004         "str	r2, [%[r], #20]\n\t"
99005         "mov	r2, r12\n\t"
99006 #ifdef WOLFSSL_KEIL
99007         "sbcs	r2, r2, r4\n\t"
99008 #elif defined(__clang__)
99009         "sbcs	r2, r4\n\t"
99010 #else
99011         "sbc	r2, r4\n\t"
99012 #endif
99013         "str	r2, [%[r], #24]\n\t"
99014         "mov	r2, lr\n\t"
99015 #ifdef WOLFSSL_KEIL
99016         "sbcs	r2, r2, r3\n\t"
99017 #elif defined(__clang__)
99018         "sbcs	r2, r3\n\t"
99019 #else
99020         "sbc	r2, r3\n\t"
99021 #endif
99022         "str	r2, [%[r], #28]\n\t"
99023         : [r] "+r" (r), [a] "+r" (a)
99024         :
99025         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "lr"
99026     );
99027 }
99028 
99029 /* Subtract two Montgomery form numbers (r = a - b % m).
99030  *
99031  * r   Result of subtration.
99032  * a   Number to subtract from in Montgomery form.
99033  * b   Number to subtract with in Montgomery form.
99034  * m   Modulus (prime).
99035  */
sp_256_mont_sub_8(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m)99036 SP_NOINLINE static void sp_256_mont_sub_8(sp_digit* r, const sp_digit* a,
99037         const sp_digit* b, const sp_digit* m)
99038 {
99039     (void)m;
99040     __asm__ __volatile__ (
99041         "ldr	r4, [%[a]]\n\t"
99042         "ldr	r5, [%[a], #4]\n\t"
99043         "ldr	r6, [%[b]]\n\t"
99044         "ldr	r7, [%[b], #4]\n\t"
99045 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99046         "subs	r4, r4, r6\n\t"
99047 #else
99048         "sub	r4, r4, r6\n\t"
99049 #endif
99050 #ifdef WOLFSSL_KEIL
99051         "sbcs	r5, r5, r7\n\t"
99052 #elif defined(__clang__)
99053         "sbcs	r5, r7\n\t"
99054 #else
99055         "sbc	r5, r7\n\t"
99056 #endif
99057         "str	r4, [%[r]]\n\t"
99058         "str	r5, [%[r], #4]\n\t"
99059         "ldr	r4, [%[a], #8]\n\t"
99060         "ldr	r5, [%[a], #12]\n\t"
99061         "ldr	r6, [%[b], #8]\n\t"
99062         "ldr	r7, [%[b], #12]\n\t"
99063 #ifdef WOLFSSL_KEIL
99064         "sbcs	r4, r4, r6\n\t"
99065 #elif defined(__clang__)
99066         "sbcs	r4, r6\n\t"
99067 #else
99068         "sbc	r4, r6\n\t"
99069 #endif
99070 #ifdef WOLFSSL_KEIL
99071         "sbcs	r5, r5, r7\n\t"
99072 #elif defined(__clang__)
99073         "sbcs	r5, r7\n\t"
99074 #else
99075         "sbc	r5, r7\n\t"
99076 #endif
99077         "str	r4, [%[r], #8]\n\t"
99078         "str	r5, [%[r], #12]\n\t"
99079         "ldr	r4, [%[a], #16]\n\t"
99080         "ldr	r5, [%[a], #20]\n\t"
99081         "ldr	r6, [%[b], #16]\n\t"
99082         "ldr	r7, [%[b], #20]\n\t"
99083 #ifdef WOLFSSL_KEIL
99084         "sbcs	r4, r4, r6\n\t"
99085 #elif defined(__clang__)
99086         "sbcs	r4, r6\n\t"
99087 #else
99088         "sbc	r4, r6\n\t"
99089 #endif
99090 #ifdef WOLFSSL_KEIL
99091         "sbcs	r5, r5, r7\n\t"
99092 #elif defined(__clang__)
99093         "sbcs	r5, r7\n\t"
99094 #else
99095         "sbc	r5, r7\n\t"
99096 #endif
99097         "mov	r8, r4\n\t"
99098         "mov	r9, r5\n\t"
99099         "ldr	r4, [%[a], #24]\n\t"
99100         "ldr	r5, [%[a], #28]\n\t"
99101         "ldr	r6, [%[b], #24]\n\t"
99102         "ldr	r7, [%[b], #28]\n\t"
99103 #ifdef WOLFSSL_KEIL
99104         "sbcs	r4, r4, r6\n\t"
99105 #elif defined(__clang__)
99106         "sbcs	r4, r6\n\t"
99107 #else
99108         "sbc	r4, r6\n\t"
99109 #endif
99110 #ifdef WOLFSSL_KEIL
99111         "sbcs	r5, r5, r7\n\t"
99112 #elif defined(__clang__)
99113         "sbcs	r5, r7\n\t"
99114 #else
99115         "sbc	r5, r7\n\t"
99116 #endif
99117         "mov	r10, r4\n\t"
99118         "mov	r11, r5\n\t"
99119 #ifdef WOLFSSL_KEIL
99120         "sbcs	r3, r3, r3\n\t"
99121 #elif defined(__clang__)
99122         "sbcs	r3, r3\n\t"
99123 #else
99124         "sbc	r3, r3\n\t"
99125 #endif
99126 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99127         "lsrs	r7, r3, #31\n\t"
99128 #else
99129         "lsr	r7, r3, #31\n\t"
99130 #endif
99131         "movs	r6, #0\n\t"
99132         "ldr	r4, [%[r]]\n\t"
99133         "ldr	r5, [%[r], #4]\n\t"
99134 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99135         "adds	r4, r4, r3\n\t"
99136 #else
99137         "add	r4, r4, r3\n\t"
99138 #endif
99139 #ifdef WOLFSSL_KEIL
99140         "adcs	r5, r5, r3\n\t"
99141 #elif defined(__clang__)
99142         "adcs	r5, r3\n\t"
99143 #else
99144         "adc	r5, r3\n\t"
99145 #endif
99146         "str	r4, [%[r]]\n\t"
99147         "str	r5, [%[r], #4]\n\t"
99148         "ldr	r4, [%[r], #8]\n\t"
99149         "ldr	r5, [%[r], #12]\n\t"
99150 #ifdef WOLFSSL_KEIL
99151         "adcs	r4, r4, r3\n\t"
99152 #elif defined(__clang__)
99153         "adcs	r4, r3\n\t"
99154 #else
99155         "adc	r4, r3\n\t"
99156 #endif
99157 #ifdef WOLFSSL_KEIL
99158         "adcs	r5, r5, r6\n\t"
99159 #elif defined(__clang__)
99160         "adcs	r5, r6\n\t"
99161 #else
99162         "adc	r5, r6\n\t"
99163 #endif
99164         "str	r4, [%[r], #8]\n\t"
99165         "str	r5, [%[r], #12]\n\t"
99166         "mov	r4, r8\n\t"
99167         "mov	r5, r9\n\t"
99168 #ifdef WOLFSSL_KEIL
99169         "adcs	r4, r4, r6\n\t"
99170 #elif defined(__clang__)
99171         "adcs	r4, r6\n\t"
99172 #else
99173         "adc	r4, r6\n\t"
99174 #endif
99175 #ifdef WOLFSSL_KEIL
99176         "adcs	r5, r5, r6\n\t"
99177 #elif defined(__clang__)
99178         "adcs	r5, r6\n\t"
99179 #else
99180         "adc	r5, r6\n\t"
99181 #endif
99182         "str	r4, [%[r], #16]\n\t"
99183         "str	r5, [%[r], #20]\n\t"
99184         "mov	r4, r10\n\t"
99185         "mov	r5, r11\n\t"
99186 #ifdef WOLFSSL_KEIL
99187         "adcs	r4, r4, r7\n\t"
99188 #elif defined(__clang__)
99189         "adcs	r4, r7\n\t"
99190 #else
99191         "adc	r4, r7\n\t"
99192 #endif
99193 #ifdef WOLFSSL_KEIL
99194         "adcs	r5, r5, r3\n\t"
99195 #elif defined(__clang__)
99196         "adcs	r5, r3\n\t"
99197 #else
99198         "adc	r5, r3\n\t"
99199 #endif
99200         "str	r4, [%[r], #24]\n\t"
99201         "str	r5, [%[r], #28]\n\t"
99202         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
99203         :
99204         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
99205     );
99206 }
99207 
99208 /* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m)
99209  *
99210  * r  Result of division by 2.
99211  * a  Number to divide.
99212  * m  Modulus (prime).
99213  */
sp_256_div2_8(sp_digit * r,const sp_digit * a,const sp_digit * m)99214 SP_NOINLINE static void sp_256_div2_8(sp_digit* r, const sp_digit* a,
99215         const sp_digit* m)
99216 {
99217     (void)m;
99218     __asm__ __volatile__ (
99219         "ldr	r6, [%[a]]\n\t"
99220 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99221         "lsls	r6, r6, #31\n\t"
99222 #else
99223         "lsl	r6, r6, #31\n\t"
99224 #endif
99225 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99226         "lsrs	r6, r6, #31\n\t"
99227 #else
99228         "lsr	r6, r6, #31\n\t"
99229 #endif
99230         "movs	r4, #0\n\t"
99231 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99232         "subs	r4, r4, r6\n\t"
99233 #else
99234         "sub	r4, r4, r6\n\t"
99235 #endif
99236         "movs	r6, #0\n\t"
99237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99238         "lsls	r5, r4, #31\n\t"
99239 #else
99240         "lsl	r5, r4, #31\n\t"
99241 #endif
99242 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99243         "lsrs	r5, r5, #31\n\t"
99244 #else
99245         "lsr	r5, r5, #31\n\t"
99246 #endif
99247         "ldr	r2, [%[a]]\n\t"
99248         "ldr	r3, [%[a], #4]\n\t"
99249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99250         "adds	r2, r2, r4\n\t"
99251 #else
99252         "add	r2, r2, r4\n\t"
99253 #endif
99254 #ifdef WOLFSSL_KEIL
99255         "adcs	r3, r3, r4\n\t"
99256 #elif defined(__clang__)
99257         "adcs	r3, r4\n\t"
99258 #else
99259         "adc	r3, r4\n\t"
99260 #endif
99261         "str	r2, [%[r]]\n\t"
99262         "str	r3, [%[r], #4]\n\t"
99263         "ldr	r2, [%[a], #8]\n\t"
99264         "ldr	r3, [%[a], #12]\n\t"
99265 #ifdef WOLFSSL_KEIL
99266         "adcs	r2, r2, r4\n\t"
99267 #elif defined(__clang__)
99268         "adcs	r2, r4\n\t"
99269 #else
99270         "adc	r2, r4\n\t"
99271 #endif
99272 #ifdef WOLFSSL_KEIL
99273         "adcs	r3, r3, r6\n\t"
99274 #elif defined(__clang__)
99275         "adcs	r3, r6\n\t"
99276 #else
99277         "adc	r3, r6\n\t"
99278 #endif
99279         "str	r2, [%[r], #8]\n\t"
99280         "str	r3, [%[r], #12]\n\t"
99281         "ldr	r2, [%[a], #16]\n\t"
99282         "ldr	r3, [%[a], #20]\n\t"
99283 #ifdef WOLFSSL_KEIL
99284         "adcs	r2, r2, r6\n\t"
99285 #elif defined(__clang__)
99286         "adcs	r2, r6\n\t"
99287 #else
99288         "adc	r2, r6\n\t"
99289 #endif
99290 #ifdef WOLFSSL_KEIL
99291         "adcs	r3, r3, r6\n\t"
99292 #elif defined(__clang__)
99293         "adcs	r3, r6\n\t"
99294 #else
99295         "adc	r3, r6\n\t"
99296 #endif
99297         "str	r2, [%[r], #16]\n\t"
99298         "str	r3, [%[r], #20]\n\t"
99299         "ldr	r2, [%[a], #24]\n\t"
99300         "ldr	r3, [%[a], #28]\n\t"
99301 #ifdef WOLFSSL_KEIL
99302         "adcs	r2, r2, r5\n\t"
99303 #elif defined(__clang__)
99304         "adcs	r2, r5\n\t"
99305 #else
99306         "adc	r2, r5\n\t"
99307 #endif
99308 #ifdef WOLFSSL_KEIL
99309         "adcs	r3, r3, r4\n\t"
99310 #elif defined(__clang__)
99311         "adcs	r3, r4\n\t"
99312 #else
99313         "adc	r3, r4\n\t"
99314 #endif
99315 #ifdef WOLFSSL_KEIL
99316         "adcs	r6, r6, r6\n\t"
99317 #elif defined(__clang__)
99318         "adcs	r6, r6\n\t"
99319 #else
99320         "adc	r6, r6\n\t"
99321 #endif
99322 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99323         "lsls	r6, r6, #31\n\t"
99324 #else
99325         "lsl	r6, r6, #31\n\t"
99326 #endif
99327 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99328         "lsrs	r4, r2, #1\n\t"
99329 #else
99330         "lsr	r4, r2, #1\n\t"
99331 #endif
99332 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99333         "lsls	r2, r2, #31\n\t"
99334 #else
99335         "lsl	r2, r2, #31\n\t"
99336 #endif
99337 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99338         "lsrs	r5, r3, #1\n\t"
99339 #else
99340         "lsr	r5, r3, #1\n\t"
99341 #endif
99342 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99343         "lsls	r3, r3, #31\n\t"
99344 #else
99345         "lsl	r3, r3, #31\n\t"
99346 #endif
99347 #ifdef WOLFSSL_KEIL
99348         "orrs	r4, r4, r3\n\t"
99349 #elif defined(__clang__)
99350         "orrs	r4, r3\n\t"
99351 #else
99352         "orr	r4, r3\n\t"
99353 #endif
99354 #ifdef WOLFSSL_KEIL
99355         "orrs	r5, r5, r6\n\t"
99356 #elif defined(__clang__)
99357         "orrs	r5, r6\n\t"
99358 #else
99359         "orr	r5, r6\n\t"
99360 #endif
99361         "movs	r6, r2\n\t"
99362         "str	r4, [%[r], #24]\n\t"
99363         "str	r5, [%[r], #28]\n\t"
99364         "ldr	r2, [%[r], #16]\n\t"
99365         "ldr	r3, [%[r], #20]\n\t"
99366 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99367         "lsrs	r4, r2, #1\n\t"
99368 #else
99369         "lsr	r4, r2, #1\n\t"
99370 #endif
99371 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99372         "lsls	r2, r2, #31\n\t"
99373 #else
99374         "lsl	r2, r2, #31\n\t"
99375 #endif
99376 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99377         "lsrs	r5, r3, #1\n\t"
99378 #else
99379         "lsr	r5, r3, #1\n\t"
99380 #endif
99381 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99382         "lsls	r3, r3, #31\n\t"
99383 #else
99384         "lsl	r3, r3, #31\n\t"
99385 #endif
99386 #ifdef WOLFSSL_KEIL
99387         "orrs	r4, r4, r3\n\t"
99388 #elif defined(__clang__)
99389         "orrs	r4, r3\n\t"
99390 #else
99391         "orr	r4, r3\n\t"
99392 #endif
99393 #ifdef WOLFSSL_KEIL
99394         "orrs	r5, r5, r6\n\t"
99395 #elif defined(__clang__)
99396         "orrs	r5, r6\n\t"
99397 #else
99398         "orr	r5, r6\n\t"
99399 #endif
99400         "movs	r6, r2\n\t"
99401         "str	r4, [%[r], #16]\n\t"
99402         "str	r5, [%[r], #20]\n\t"
99403         "ldr	r2, [%[r], #8]\n\t"
99404         "ldr	r3, [%[r], #12]\n\t"
99405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99406         "lsrs	r4, r2, #1\n\t"
99407 #else
99408         "lsr	r4, r2, #1\n\t"
99409 #endif
99410 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99411         "lsls	r2, r2, #31\n\t"
99412 #else
99413         "lsl	r2, r2, #31\n\t"
99414 #endif
99415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99416         "lsrs	r5, r3, #1\n\t"
99417 #else
99418         "lsr	r5, r3, #1\n\t"
99419 #endif
99420 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99421         "lsls	r3, r3, #31\n\t"
99422 #else
99423         "lsl	r3, r3, #31\n\t"
99424 #endif
99425 #ifdef WOLFSSL_KEIL
99426         "orrs	r4, r4, r3\n\t"
99427 #elif defined(__clang__)
99428         "orrs	r4, r3\n\t"
99429 #else
99430         "orr	r4, r3\n\t"
99431 #endif
99432 #ifdef WOLFSSL_KEIL
99433         "orrs	r5, r5, r6\n\t"
99434 #elif defined(__clang__)
99435         "orrs	r5, r6\n\t"
99436 #else
99437         "orr	r5, r6\n\t"
99438 #endif
99439         "movs	r6, r2\n\t"
99440         "str	r4, [%[r], #8]\n\t"
99441         "str	r5, [%[r], #12]\n\t"
99442         "ldr	r2, [%[r]]\n\t"
99443         "ldr	r3, [%[r], #4]\n\t"
99444 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99445         "lsrs	r4, r2, #1\n\t"
99446 #else
99447         "lsr	r4, r2, #1\n\t"
99448 #endif
99449 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99450         "lsrs	r5, r3, #1\n\t"
99451 #else
99452         "lsr	r5, r3, #1\n\t"
99453 #endif
99454 #if defined(__clang__) || defined(WOLFSSL_KEIL)
99455         "lsls	r3, r3, #31\n\t"
99456 #else
99457         "lsl	r3, r3, #31\n\t"
99458 #endif
99459 #ifdef WOLFSSL_KEIL
99460         "orrs	r4, r4, r3\n\t"
99461 #elif defined(__clang__)
99462         "orrs	r4, r3\n\t"
99463 #else
99464         "orr	r4, r3\n\t"
99465 #endif
99466 #ifdef WOLFSSL_KEIL
99467         "orrs	r5, r5, r6\n\t"
99468 #elif defined(__clang__)
99469         "orrs	r5, r6\n\t"
99470 #else
99471         "orr	r5, r6\n\t"
99472 #endif
99473         "str	r4, [%[r]]\n\t"
99474         "str	r5, [%[r], #4]\n\t"
99475         : [r] "+r" (r), [a] "+r" (a)
99476         :
99477         : "memory", "r2", "r3", "r4", "r5", "r6"
99478     );
99479 }
99480 
99481 /* Double the Montgomery form projective point p.
99482  *
99483  * r  Result of doubling point.
99484  * p  Point to double.
99485  * t  Temporary ordinate data.
99486  */
99487 #ifdef WOLFSSL_SP_NONBLOCK
99488 typedef struct sp_256_proj_point_dbl_8_ctx {
99489     int state;
99490     sp_digit* t1;
99491     sp_digit* t2;
99492     sp_digit* x;
99493     sp_digit* y;
99494     sp_digit* z;
99495 } sp_256_proj_point_dbl_8_ctx;
99496 
sp_256_proj_point_dbl_8_nb(sp_ecc_ctx_t * sp_ctx,sp_point_256 * r,const sp_point_256 * p,sp_digit * t)99497 static int sp_256_proj_point_dbl_8_nb(sp_ecc_ctx_t* sp_ctx, sp_point_256* r, const sp_point_256* p, sp_digit* t)
99498 {
99499     int err = FP_WOULDBLOCK;
99500     sp_256_proj_point_dbl_8_ctx* ctx = (sp_256_proj_point_dbl_8_ctx*)sp_ctx->data;
99501 
99502     typedef char ctx_size_test[sizeof(sp_256_proj_point_dbl_8_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
99503     (void)sizeof(ctx_size_test);
99504 
99505     switch (ctx->state) {
99506     case 0:
99507         ctx->t1 = t;
99508         ctx->t2 = t + 2*8;
99509         ctx->x = r->x;
99510         ctx->y = r->y;
99511         ctx->z = r->z;
99512 
99513         /* Put infinity into result. */
99514         if (r != p) {
99515             r->infinity = p->infinity;
99516         }
99517         ctx->state = 1;
99518         break;
99519     case 1:
99520         /* T1 = Z * Z */
99521         sp_256_mont_sqr_8(ctx->t1, p->z, p256_mod, p256_mp_mod);
99522         ctx->state = 2;
99523         break;
99524     case 2:
99525         /* Z = Y * Z */
99526         sp_256_mont_mul_8(ctx->z, p->y, p->z, p256_mod, p256_mp_mod);
99527         ctx->state = 3;
99528         break;
99529     case 3:
99530         /* Z = 2Z */
99531         sp_256_mont_dbl_8(ctx->z, ctx->z, p256_mod);
99532         ctx->state = 4;
99533         break;
99534     case 4:
99535         /* T2 = X - T1 */
99536         sp_256_mont_sub_8(ctx->t2, p->x, ctx->t1, p256_mod);
99537         ctx->state = 5;
99538         break;
99539     case 5:
99540         /* T1 = X + T1 */
99541         sp_256_mont_add_8(ctx->t1, p->x, ctx->t1, p256_mod);
99542         ctx->state = 6;
99543         break;
99544     case 6:
99545         /* T2 = T1 * T2 */
99546         sp_256_mont_mul_8(ctx->t2, ctx->t1, ctx->t2, p256_mod, p256_mp_mod);
99547         ctx->state = 7;
99548         break;
99549     case 7:
99550         /* T1 = 3T2 */
99551         sp_256_mont_tpl_8(ctx->t1, ctx->t2, p256_mod);
99552         ctx->state = 8;
99553         break;
99554     case 8:
99555         /* Y = 2Y */
99556         sp_256_mont_dbl_8(ctx->y, p->y, p256_mod);
99557         ctx->state = 9;
99558         break;
99559     case 9:
99560         /* Y = Y * Y */
99561         sp_256_mont_sqr_8(ctx->y, ctx->y, p256_mod, p256_mp_mod);
99562         ctx->state = 10;
99563         break;
99564     case 10:
99565         /* T2 = Y * Y */
99566         sp_256_mont_sqr_8(ctx->t2, ctx->y, p256_mod, p256_mp_mod);
99567         ctx->state = 11;
99568         break;
99569     case 11:
99570         /* T2 = T2/2 */
99571         sp_256_div2_8(ctx->t2, ctx->t2, p256_mod);
99572         ctx->state = 12;
99573         break;
99574     case 12:
99575         /* Y = Y * X */
99576         sp_256_mont_mul_8(ctx->y, ctx->y, p->x, p256_mod, p256_mp_mod);
99577         ctx->state = 13;
99578         break;
99579     case 13:
99580         /* X = T1 * T1 */
99581         sp_256_mont_sqr_8(ctx->x, ctx->t1, p256_mod, p256_mp_mod);
99582         ctx->state = 14;
99583         break;
99584     case 14:
99585         /* X = X - Y */
99586         sp_256_mont_sub_8(ctx->x, ctx->x, ctx->y, p256_mod);
99587         ctx->state = 15;
99588         break;
99589     case 15:
99590         /* X = X - Y */
99591         sp_256_mont_sub_8(ctx->x, ctx->x, ctx->y, p256_mod);
99592         ctx->state = 16;
99593         break;
99594     case 16:
99595         /* Y = Y - X */
99596         sp_256_mont_sub_8(ctx->y, ctx->y, ctx->x, p256_mod);
99597         ctx->state = 17;
99598         break;
99599     case 17:
99600         /* Y = Y * T1 */
99601         sp_256_mont_mul_8(ctx->y, ctx->y, ctx->t1, p256_mod, p256_mp_mod);
99602         ctx->state = 18;
99603         break;
99604     case 18:
99605         /* Y = Y - T2 */
99606         sp_256_mont_sub_8(ctx->y, ctx->y, ctx->t2, p256_mod);
99607         ctx->state = 19;
99608         /* fall-through */
99609     case 19:
99610         err = MP_OKAY;
99611         break;
99612     }
99613 
99614     if (err == MP_OKAY && ctx->state != 19) {
99615         err = FP_WOULDBLOCK;
99616     }
99617 
99618     return err;
99619 }
99620 #endif /* WOLFSSL_SP_NONBLOCK */
99621 
sp_256_proj_point_dbl_8(sp_point_256 * r,const sp_point_256 * p,sp_digit * t)99622 static void sp_256_proj_point_dbl_8(sp_point_256* r, const sp_point_256* p, sp_digit* t)
99623 {
99624     sp_digit* t1 = t;
99625     sp_digit* t2 = t + 2*8;
99626     sp_digit* x;
99627     sp_digit* y;
99628     sp_digit* z;
99629 
99630     x = r->x;
99631     y = r->y;
99632     z = r->z;
99633     /* Put infinity into result. */
99634     if (r != p) {
99635         r->infinity = p->infinity;
99636     }
99637 
99638     /* T1 = Z * Z */
99639     sp_256_mont_sqr_8(t1, p->z, p256_mod, p256_mp_mod);
99640     /* Z = Y * Z */
99641     sp_256_mont_mul_8(z, p->y, p->z, p256_mod, p256_mp_mod);
99642     /* Z = 2Z */
99643     sp_256_mont_dbl_8(z, z, p256_mod);
99644     /* T2 = X - T1 */
99645     sp_256_mont_sub_8(t2, p->x, t1, p256_mod);
99646     /* T1 = X + T1 */
99647     sp_256_mont_add_8(t1, p->x, t1, p256_mod);
99648     /* T2 = T1 * T2 */
99649     sp_256_mont_mul_8(t2, t1, t2, p256_mod, p256_mp_mod);
99650     /* T1 = 3T2 */
99651     sp_256_mont_tpl_8(t1, t2, p256_mod);
99652     /* Y = 2Y */
99653     sp_256_mont_dbl_8(y, p->y, p256_mod);
99654     /* Y = Y * Y */
99655     sp_256_mont_sqr_8(y, y, p256_mod, p256_mp_mod);
99656     /* T2 = Y * Y */
99657     sp_256_mont_sqr_8(t2, y, p256_mod, p256_mp_mod);
99658     /* T2 = T2/2 */
99659     sp_256_div2_8(t2, t2, p256_mod);
99660     /* Y = Y * X */
99661     sp_256_mont_mul_8(y, y, p->x, p256_mod, p256_mp_mod);
99662     /* X = T1 * T1 */
99663     sp_256_mont_sqr_8(x, t1, p256_mod, p256_mp_mod);
99664     /* X = X - Y */
99665     sp_256_mont_sub_8(x, x, y, p256_mod);
99666     /* X = X - Y */
99667     sp_256_mont_sub_8(x, x, y, p256_mod);
99668     /* Y = Y - X */
99669     sp_256_mont_sub_8(y, y, x, p256_mod);
99670     /* Y = Y * T1 */
99671     sp_256_mont_mul_8(y, y, t1, p256_mod, p256_mp_mod);
99672     /* Y = Y - T2 */
99673     sp_256_mont_sub_8(y, y, t2, p256_mod);
99674 }
99675 
99676 /* Compare two numbers to determine if they are equal.
99677  * Constant time implementation.
99678  *
99679  * a  First number to compare.
99680  * b  Second number to compare.
99681  * returns 1 when equal and 0 otherwise.
99682  */
sp_256_cmp_equal_8(const sp_digit * a,const sp_digit * b)99683 static int sp_256_cmp_equal_8(const sp_digit* a, const sp_digit* b)
99684 {
99685     return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2]) |
99686             (a[3] ^ b[3]) | (a[4] ^ b[4]) | (a[5] ^ b[5]) |
99687             (a[6] ^ b[6]) | (a[7] ^ b[7])) == 0;
99688 }
99689 
99690 /* Add two Montgomery form projective points.
99691  *
99692  * r  Result of addition.
99693  * p  First point to add.
99694  * q  Second point to add.
99695  * t  Temporary ordinate data.
99696  */
99697 
99698 #ifdef WOLFSSL_SP_NONBLOCK
99699 typedef struct sp_256_proj_point_add_8_ctx {
99700     int state;
99701     sp_256_proj_point_dbl_8_ctx dbl_ctx;
99702     const sp_point_256* ap[2];
99703     sp_point_256* rp[2];
99704     sp_digit* t1;
99705     sp_digit* t2;
99706     sp_digit* t3;
99707     sp_digit* t4;
99708     sp_digit* t5;
99709     sp_digit* x;
99710     sp_digit* y;
99711     sp_digit* z;
99712 } sp_256_proj_point_add_8_ctx;
99713 
sp_256_proj_point_add_8_nb(sp_ecc_ctx_t * sp_ctx,sp_point_256 * r,const sp_point_256 * p,const sp_point_256 * q,sp_digit * t)99714 static int sp_256_proj_point_add_8_nb(sp_ecc_ctx_t* sp_ctx, sp_point_256* r,
99715     const sp_point_256* p, const sp_point_256* q, sp_digit* t)
99716 {
99717     int err = FP_WOULDBLOCK;
99718     sp_256_proj_point_add_8_ctx* ctx = (sp_256_proj_point_add_8_ctx*)sp_ctx->data;
99719 
99720     /* Ensure only the first point is the same as the result. */
99721     if (q == r) {
99722         const sp_point_256* a = p;
99723         p = q;
99724         q = a;
99725     }
99726 
99727     typedef char ctx_size_test[sizeof(sp_256_proj_point_add_8_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
99728     (void)sizeof(ctx_size_test);
99729 
99730     switch (ctx->state) {
99731     case 0: /* INIT */
99732         ctx->t1 = t;
99733         ctx->t2 = t + 2*8;
99734         ctx->t3 = t + 4*8;
99735         ctx->t4 = t + 6*8;
99736         ctx->t5 = t + 8*8;
99737 
99738         ctx->state = 1;
99739         break;
99740     case 1:
99741         /* Check double */
99742         (void)sp_256_sub_8(ctx->t1, p256_mod, q->y);
99743         sp_256_norm_8(ctx->t1);
99744         if ((sp_256_cmp_equal_8(p->x, q->x) & sp_256_cmp_equal_8(p->z, q->z) &
99745             (sp_256_cmp_equal_8(p->y, q->y) | sp_256_cmp_equal_8(p->y, ctx->t1))) != 0)
99746         {
99747             XMEMSET(&ctx->dbl_ctx, 0, sizeof(ctx->dbl_ctx));
99748             ctx->state = 2;
99749         }
99750         else {
99751             ctx->state = 3;
99752         }
99753         break;
99754     case 2:
99755         err = sp_256_proj_point_dbl_8_nb((sp_ecc_ctx_t*)&ctx->dbl_ctx, r, p, t);
99756         if (err == MP_OKAY)
99757             ctx->state = 27; /* done */
99758         break;
99759     case 3:
99760     {
99761         int i;
99762         ctx->rp[0] = r;
99763 
99764         /*lint allow cast to different type of pointer*/
99765         ctx->rp[1] = (sp_point_256*)t; /*lint !e9087 !e740*/
99766         XMEMSET(ctx->rp[1], 0, sizeof(sp_point_256));
99767         ctx->x = ctx->rp[p->infinity | q->infinity]->x;
99768         ctx->y = ctx->rp[p->infinity | q->infinity]->y;
99769         ctx->z = ctx->rp[p->infinity | q->infinity]->z;
99770 
99771         ctx->ap[0] = p;
99772         ctx->ap[1] = q;
99773         for (i=0; i<8; i++) {
99774             r->x[i] = ctx->ap[p->infinity]->x[i];
99775         }
99776         for (i=0; i<8; i++) {
99777             r->y[i] = ctx->ap[p->infinity]->y[i];
99778         }
99779         for (i=0; i<8; i++) {
99780             r->z[i] = ctx->ap[p->infinity]->z[i];
99781         }
99782         r->infinity = ctx->ap[p->infinity]->infinity;
99783 
99784         ctx->state = 4;
99785         break;
99786     }
99787     case 4:
99788         /* U1 = X1*Z2^2 */
99789         sp_256_mont_sqr_8(ctx->t1, q->z, p256_mod, p256_mp_mod);
99790         ctx->state = 5;
99791         break;
99792     case 5:
99793         sp_256_mont_mul_8(ctx->t3, ctx->t1, q->z, p256_mod, p256_mp_mod);
99794         ctx->state = 6;
99795         break;
99796     case 6:
99797         sp_256_mont_mul_8(ctx->t1, ctx->t1, ctx->x, p256_mod, p256_mp_mod);
99798         ctx->state = 7;
99799         break;
99800     case 7:
99801         /* U2 = X2*Z1^2 */
99802         sp_256_mont_sqr_8(ctx->t2, ctx->z, p256_mod, p256_mp_mod);
99803         ctx->state = 8;
99804         break;
99805     case 8:
99806         sp_256_mont_mul_8(ctx->t4, ctx->t2, ctx->z, p256_mod, p256_mp_mod);
99807         ctx->state = 9;
99808         break;
99809     case 9:
99810         sp_256_mont_mul_8(ctx->t2, ctx->t2, q->x, p256_mod, p256_mp_mod);
99811         ctx->state = 10;
99812         break;
99813     case 10:
99814         /* S1 = Y1*Z2^3 */
99815         sp_256_mont_mul_8(ctx->t3, ctx->t3, ctx->y, p256_mod, p256_mp_mod);
99816         ctx->state = 11;
99817         break;
99818     case 11:
99819         /* S2 = Y2*Z1^3 */
99820         sp_256_mont_mul_8(ctx->t4, ctx->t4, q->y, p256_mod, p256_mp_mod);
99821         ctx->state = 12;
99822         break;
99823     case 12:
99824         /* H = U2 - U1 */
99825         sp_256_mont_sub_8(ctx->t2, ctx->t2, ctx->t1, p256_mod);
99826         ctx->state = 13;
99827         break;
99828     case 13:
99829         /* R = S2 - S1 */
99830         sp_256_mont_sub_8(ctx->t4, ctx->t4, ctx->t3, p256_mod);
99831         ctx->state = 14;
99832         break;
99833     case 14:
99834         /* Z3 = H*Z1*Z2 */
99835         sp_256_mont_mul_8(ctx->z, ctx->z, q->z, p256_mod, p256_mp_mod);
99836         ctx->state = 15;
99837         break;
99838     case 15:
99839         sp_256_mont_mul_8(ctx->z, ctx->z, ctx->t2, p256_mod, p256_mp_mod);
99840         ctx->state = 16;
99841         break;
99842     case 16:
99843         /* X3 = R^2 - H^3 - 2*U1*H^2 */
99844         sp_256_mont_sqr_8(ctx->x, ctx->t4, p256_mod, p256_mp_mod);
99845         ctx->state = 17;
99846         break;
99847     case 17:
99848         sp_256_mont_sqr_8(ctx->t5, ctx->t2, p256_mod, p256_mp_mod);
99849         ctx->state = 18;
99850         break;
99851     case 18:
99852         sp_256_mont_mul_8(ctx->y, ctx->t1, ctx->t5, p256_mod, p256_mp_mod);
99853         ctx->state = 19;
99854         break;
99855     case 19:
99856         sp_256_mont_mul_8(ctx->t5, ctx->t5, ctx->t2, p256_mod, p256_mp_mod);
99857         ctx->state = 20;
99858         break;
99859     case 20:
99860         sp_256_mont_sub_8(ctx->x, ctx->x, ctx->t5, p256_mod);
99861         ctx->state = 21;
99862         break;
99863     case 21:
99864         sp_256_mont_dbl_8(ctx->t1, ctx->y, p256_mod);
99865         ctx->state = 22;
99866         break;
99867     case 22:
99868         sp_256_mont_sub_8(ctx->x, ctx->x, ctx->t1, p256_mod);
99869         ctx->state = 23;
99870         break;
99871     case 23:
99872         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
99873         sp_256_mont_sub_8(ctx->y, ctx->y, ctx->x, p256_mod);
99874         ctx->state = 24;
99875         break;
99876     case 24:
99877         sp_256_mont_mul_8(ctx->y, ctx->y, ctx->t4, p256_mod, p256_mp_mod);
99878         ctx->state = 25;
99879         break;
99880     case 25:
99881         sp_256_mont_mul_8(ctx->t5, ctx->t5, ctx->t3, p256_mod, p256_mp_mod);
99882         ctx->state = 26;
99883         break;
99884     case 26:
99885         sp_256_mont_sub_8(ctx->y, ctx->y, ctx->t5, p256_mod);
99886         ctx->state = 27;
99887         /* fall-through */
99888     case 27:
99889         err = MP_OKAY;
99890         break;
99891     }
99892 
99893     if (err == MP_OKAY && ctx->state != 27) {
99894         err = FP_WOULDBLOCK;
99895     }
99896     return err;
99897 }
99898 #endif /* WOLFSSL_SP_NONBLOCK */
99899 
sp_256_proj_point_add_8(sp_point_256 * r,const sp_point_256 * p,const sp_point_256 * q,sp_digit * t)99900 static void sp_256_proj_point_add_8(sp_point_256* r,
99901         const sp_point_256* p, const sp_point_256* q, sp_digit* t)
99902 {
99903     const sp_point_256* ap[2];
99904     sp_point_256* rp[2];
99905     sp_digit* t1 = t;
99906     sp_digit* t2 = t + 2*8;
99907     sp_digit* t3 = t + 4*8;
99908     sp_digit* t4 = t + 6*8;
99909     sp_digit* t5 = t + 8*8;
99910     sp_digit* x;
99911     sp_digit* y;
99912     sp_digit* z;
99913     int i;
99914 
99915     /* Ensure only the first point is the same as the result. */
99916     if (q == r) {
99917         const sp_point_256* a = p;
99918         p = q;
99919         q = a;
99920     }
99921 
99922     /* Check double */
99923     (void)sp_256_sub_8(t1, p256_mod, q->y);
99924     sp_256_norm_8(t1);
99925     if ((sp_256_cmp_equal_8(p->x, q->x) & sp_256_cmp_equal_8(p->z, q->z) &
99926         (sp_256_cmp_equal_8(p->y, q->y) | sp_256_cmp_equal_8(p->y, t1))) != 0) {
99927         sp_256_proj_point_dbl_8(r, p, t);
99928     }
99929     else {
99930         rp[0] = r;
99931 
99932         /*lint allow cast to different type of pointer*/
99933         rp[1] = (sp_point_256*)t; /*lint !e9087 !e740*/
99934         XMEMSET(rp[1], 0, sizeof(sp_point_256));
99935         x = rp[p->infinity | q->infinity]->x;
99936         y = rp[p->infinity | q->infinity]->y;
99937         z = rp[p->infinity | q->infinity]->z;
99938 
99939         ap[0] = p;
99940         ap[1] = q;
99941         for (i=0; i<8; i++) {
99942             r->x[i] = ap[p->infinity]->x[i];
99943         }
99944         for (i=0; i<8; i++) {
99945             r->y[i] = ap[p->infinity]->y[i];
99946         }
99947         for (i=0; i<8; i++) {
99948             r->z[i] = ap[p->infinity]->z[i];
99949         }
99950         r->infinity = ap[p->infinity]->infinity;
99951 
99952         /* U1 = X1*Z2^2 */
99953         sp_256_mont_sqr_8(t1, q->z, p256_mod, p256_mp_mod);
99954         sp_256_mont_mul_8(t3, t1, q->z, p256_mod, p256_mp_mod);
99955         sp_256_mont_mul_8(t1, t1, x, p256_mod, p256_mp_mod);
99956         /* U2 = X2*Z1^2 */
99957         sp_256_mont_sqr_8(t2, z, p256_mod, p256_mp_mod);
99958         sp_256_mont_mul_8(t4, t2, z, p256_mod, p256_mp_mod);
99959         sp_256_mont_mul_8(t2, t2, q->x, p256_mod, p256_mp_mod);
99960         /* S1 = Y1*Z2^3 */
99961         sp_256_mont_mul_8(t3, t3, y, p256_mod, p256_mp_mod);
99962         /* S2 = Y2*Z1^3 */
99963         sp_256_mont_mul_8(t4, t4, q->y, p256_mod, p256_mp_mod);
99964         /* H = U2 - U1 */
99965         sp_256_mont_sub_8(t2, t2, t1, p256_mod);
99966         /* R = S2 - S1 */
99967         sp_256_mont_sub_8(t4, t4, t3, p256_mod);
99968         /* Z3 = H*Z1*Z2 */
99969         sp_256_mont_mul_8(z, z, q->z, p256_mod, p256_mp_mod);
99970         sp_256_mont_mul_8(z, z, t2, p256_mod, p256_mp_mod);
99971         /* X3 = R^2 - H^3 - 2*U1*H^2 */
99972         sp_256_mont_sqr_8(x, t4, p256_mod, p256_mp_mod);
99973         sp_256_mont_sqr_8(t5, t2, p256_mod, p256_mp_mod);
99974         sp_256_mont_mul_8(y, t1, t5, p256_mod, p256_mp_mod);
99975         sp_256_mont_mul_8(t5, t5, t2, p256_mod, p256_mp_mod);
99976         sp_256_mont_sub_8(x, x, t5, p256_mod);
99977         sp_256_mont_dbl_8(t1, y, p256_mod);
99978         sp_256_mont_sub_8(x, x, t1, p256_mod);
99979         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
99980         sp_256_mont_sub_8(y, y, x, p256_mod);
99981         sp_256_mont_mul_8(y, y, t4, p256_mod, p256_mp_mod);
99982         sp_256_mont_mul_8(t5, t5, t3, p256_mod, p256_mp_mod);
99983         sp_256_mont_sub_8(y, y, t5, p256_mod);
99984     }
99985 }
99986 
99987 #ifndef WC_NO_CACHE_RESISTANT
99988 /* Touch each possible point that could be being copied.
99989  *
99990  * r      Point to copy into.
99991  * table  Table - start of the entires to access
99992  * idx    Index of entry to retrieve.
99993  */
sp_256_get_point_16_8(sp_point_256 * r,const sp_point_256 * table,int idx)99994 static void sp_256_get_point_16_8(sp_point_256* r, const sp_point_256* table,
99995     int idx)
99996 {
99997     int i;
99998     sp_digit mask;
99999 
100000     r->x[0] = 0;
100001     r->x[1] = 0;
100002     r->x[2] = 0;
100003     r->x[3] = 0;
100004     r->x[4] = 0;
100005     r->x[5] = 0;
100006     r->x[6] = 0;
100007     r->x[7] = 0;
100008     r->y[0] = 0;
100009     r->y[1] = 0;
100010     r->y[2] = 0;
100011     r->y[3] = 0;
100012     r->y[4] = 0;
100013     r->y[5] = 0;
100014     r->y[6] = 0;
100015     r->y[7] = 0;
100016     r->z[0] = 0;
100017     r->z[1] = 0;
100018     r->z[2] = 0;
100019     r->z[3] = 0;
100020     r->z[4] = 0;
100021     r->z[5] = 0;
100022     r->z[6] = 0;
100023     r->z[7] = 0;
100024     for (i = 1; i < 16; i++) {
100025         mask = 0 - (i == idx);
100026         r->x[0] |= mask & table[i].x[0];
100027         r->x[1] |= mask & table[i].x[1];
100028         r->x[2] |= mask & table[i].x[2];
100029         r->x[3] |= mask & table[i].x[3];
100030         r->x[4] |= mask & table[i].x[4];
100031         r->x[5] |= mask & table[i].x[5];
100032         r->x[6] |= mask & table[i].x[6];
100033         r->x[7] |= mask & table[i].x[7];
100034         r->y[0] |= mask & table[i].y[0];
100035         r->y[1] |= mask & table[i].y[1];
100036         r->y[2] |= mask & table[i].y[2];
100037         r->y[3] |= mask & table[i].y[3];
100038         r->y[4] |= mask & table[i].y[4];
100039         r->y[5] |= mask & table[i].y[5];
100040         r->y[6] |= mask & table[i].y[6];
100041         r->y[7] |= mask & table[i].y[7];
100042         r->z[0] |= mask & table[i].z[0];
100043         r->z[1] |= mask & table[i].z[1];
100044         r->z[2] |= mask & table[i].z[2];
100045         r->z[3] |= mask & table[i].z[3];
100046         r->z[4] |= mask & table[i].z[4];
100047         r->z[5] |= mask & table[i].z[5];
100048         r->z[6] |= mask & table[i].z[6];
100049         r->z[7] |= mask & table[i].z[7];
100050     }
100051 }
100052 #endif /* !WC_NO_CACHE_RESISTANT */
100053 /* Multiply the point by the scalar and return the result.
100054  * If map is true then convert result to affine coordinates.
100055  *
100056  * Fast implementation that generates a pre-computation table.
100057  * 4 bits of window (no sliding!).
100058  * Uses add and double for calculating table.
100059  * 256 doubles.
100060  * 76 adds.
100061  *
100062  * r     Resulting point.
100063  * g     Point to multiply.
100064  * k     Scalar to multiply by.
100065  * map   Indicates whether to convert result to affine.
100066  * ct    Constant time required.
100067  * heap  Heap to use for allocation.
100068  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
100069  */
sp_256_ecc_mulmod_fast_8(sp_point_256 * r,const sp_point_256 * g,const sp_digit * k,int map,int ct,void * heap)100070 static int sp_256_ecc_mulmod_fast_8(sp_point_256* r, const sp_point_256* g, const sp_digit* k,
100071         int map, int ct, void* heap)
100072 {
100073 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100074     sp_point_256* t = NULL;
100075     sp_digit* tmp = NULL;
100076 #else
100077     sp_point_256 t[16 + 1];
100078     sp_digit tmp[2 * 8 * 5];
100079 #endif
100080     sp_point_256* rt = NULL;
100081 #ifndef WC_NO_CACHE_RESISTANT
100082 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100083     sp_point_256* p = NULL;
100084 #else
100085     sp_point_256 p[1];
100086 #endif
100087 #endif /* !WC_NO_CACHE_RESISTANT */
100088     sp_digit n;
100089     int i;
100090     int c;
100091     int y;
100092     int err = MP_OKAY;
100093 
100094     /* Constant time used for cache attack resistance implementation. */
100095     (void)ct;
100096     (void)heap;
100097 
100098 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100099     t = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * (16 + 1),
100100         heap, DYNAMIC_TYPE_ECC);
100101     if (t == NULL)
100102         err = MEMORY_E;
100103     #ifndef WC_NO_CACHE_RESISTANT
100104     if (err == MP_OKAY) {
100105         p = (sp_point_256*)XMALLOC(sizeof(sp_point_256),
100106             heap, DYNAMIC_TYPE_ECC);
100107         if (p == NULL)
100108             err = MEMORY_E;
100109     }
100110     #endif
100111     if (err == MP_OKAY) {
100112         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 8 * 5, heap,
100113                                 DYNAMIC_TYPE_ECC);
100114         if (tmp == NULL)
100115             err = MEMORY_E;
100116     }
100117 #endif
100118 
100119     if (err == MP_OKAY) {
100120         rt = t + 16;
100121 
100122         /* t[0] = {0, 0, 1} * norm */
100123         XMEMSET(&t[0], 0, sizeof(t[0]));
100124         t[0].infinity = 1;
100125         /* t[1] = {g->x, g->y, g->z} * norm */
100126         (void)sp_256_mod_mul_norm_8(t[1].x, g->x, p256_mod);
100127         (void)sp_256_mod_mul_norm_8(t[1].y, g->y, p256_mod);
100128         (void)sp_256_mod_mul_norm_8(t[1].z, g->z, p256_mod);
100129         t[1].infinity = 0;
100130         sp_256_proj_point_dbl_8(&t[ 2], &t[ 1], tmp);
100131         t[ 2].infinity = 0;
100132         sp_256_proj_point_add_8(&t[ 3], &t[ 2], &t[ 1], tmp);
100133         t[ 3].infinity = 0;
100134         sp_256_proj_point_dbl_8(&t[ 4], &t[ 2], tmp);
100135         t[ 4].infinity = 0;
100136         sp_256_proj_point_add_8(&t[ 5], &t[ 3], &t[ 2], tmp);
100137         t[ 5].infinity = 0;
100138         sp_256_proj_point_dbl_8(&t[ 6], &t[ 3], tmp);
100139         t[ 6].infinity = 0;
100140         sp_256_proj_point_add_8(&t[ 7], &t[ 4], &t[ 3], tmp);
100141         t[ 7].infinity = 0;
100142         sp_256_proj_point_dbl_8(&t[ 8], &t[ 4], tmp);
100143         t[ 8].infinity = 0;
100144         sp_256_proj_point_add_8(&t[ 9], &t[ 5], &t[ 4], tmp);
100145         t[ 9].infinity = 0;
100146         sp_256_proj_point_dbl_8(&t[10], &t[ 5], tmp);
100147         t[10].infinity = 0;
100148         sp_256_proj_point_add_8(&t[11], &t[ 6], &t[ 5], tmp);
100149         t[11].infinity = 0;
100150         sp_256_proj_point_dbl_8(&t[12], &t[ 6], tmp);
100151         t[12].infinity = 0;
100152         sp_256_proj_point_add_8(&t[13], &t[ 7], &t[ 6], tmp);
100153         t[13].infinity = 0;
100154         sp_256_proj_point_dbl_8(&t[14], &t[ 7], tmp);
100155         t[14].infinity = 0;
100156         sp_256_proj_point_add_8(&t[15], &t[ 8], &t[ 7], tmp);
100157         t[15].infinity = 0;
100158 
100159         i = 6;
100160         n = k[i+1] << 0;
100161         c = 28;
100162         y = (int)(n >> 28);
100163     #ifndef WC_NO_CACHE_RESISTANT
100164         if (ct) {
100165             sp_256_get_point_16_8(rt, t, y);
100166             rt->infinity = !y;
100167         }
100168         else
100169     #endif
100170         {
100171             XMEMCPY(rt, &t[y], sizeof(sp_point_256));
100172         }
100173         n <<= 4;
100174         for (; i>=0 || c>=4; ) {
100175             if (c < 4) {
100176                 n |= k[i--];
100177                 c += 32;
100178             }
100179             y = (n >> 28) & 0xf;
100180             n <<= 4;
100181             c -= 4;
100182 
100183             sp_256_proj_point_dbl_8(rt, rt, tmp);
100184             sp_256_proj_point_dbl_8(rt, rt, tmp);
100185             sp_256_proj_point_dbl_8(rt, rt, tmp);
100186             sp_256_proj_point_dbl_8(rt, rt, tmp);
100187 
100188     #ifndef WC_NO_CACHE_RESISTANT
100189             if (ct) {
100190                 sp_256_get_point_16_8(p, t, y);
100191                 p->infinity = !y;
100192                 sp_256_proj_point_add_8(rt, rt, p, tmp);
100193             }
100194             else
100195     #endif
100196             {
100197                 sp_256_proj_point_add_8(rt, rt, &t[y], tmp);
100198             }
100199         }
100200 
100201         if (map != 0) {
100202             sp_256_map_8(r, rt, tmp);
100203         }
100204         else {
100205             XMEMCPY(r, rt, sizeof(sp_point_256));
100206         }
100207     }
100208 
100209 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100210     if (tmp != NULL)
100211 #endif
100212     {
100213         ForceZero(tmp, sizeof(sp_digit) * 2 * 8 * 5);
100214     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100215         XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
100216     #endif
100217     }
100218 #ifndef WC_NO_CACHE_RESISTANT
100219     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100220     if (p != NULL)
100221     #endif
100222         {
100223             ForceZero(p, sizeof(sp_point_256));
100224         #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100225             XFREE(p, heap, DYNAMIC_TYPE_ECC);
100226         #endif
100227         }
100228 #endif /* !WC_NO_CACHE_RESISTANT */
100229 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100230     if (t != NULL)
100231 #endif
100232     {
100233         ForceZero(t, sizeof(sp_point_256) * 17);
100234     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100235         XFREE(t, heap, DYNAMIC_TYPE_ECC);
100236     #endif
100237     }
100238 
100239     return err;
100240 }
100241 
100242 #ifdef FP_ECC
100243 /* Double the Montgomery form projective point p a number of times.
100244  *
100245  * r  Result of repeated doubling of point.
100246  * p  Point to double.
100247  * n  Number of times to double
100248  * t  Temporary ordinate data.
100249  */
sp_256_proj_point_dbl_n_8(sp_point_256 * p,int n,sp_digit * t)100250 static void sp_256_proj_point_dbl_n_8(sp_point_256* p, int n,
100251     sp_digit* t)
100252 {
100253     sp_digit* w = t;
100254     sp_digit* a = t + 2*8;
100255     sp_digit* b = t + 4*8;
100256     sp_digit* t1 = t + 6*8;
100257     sp_digit* t2 = t + 8*8;
100258     sp_digit* x;
100259     sp_digit* y;
100260     sp_digit* z;
100261 
100262     x = p->x;
100263     y = p->y;
100264     z = p->z;
100265 
100266     /* Y = 2*Y */
100267     sp_256_mont_dbl_8(y, y, p256_mod);
100268     /* W = Z^4 */
100269     sp_256_mont_sqr_8(w, z, p256_mod, p256_mp_mod);
100270     sp_256_mont_sqr_8(w, w, p256_mod, p256_mp_mod);
100271 
100272 #ifndef WOLFSSL_SP_SMALL
100273     while (--n > 0)
100274 #else
100275     while (--n >= 0)
100276 #endif
100277     {
100278         /* A = 3*(X^2 - W) */
100279         sp_256_mont_sqr_8(t1, x, p256_mod, p256_mp_mod);
100280         sp_256_mont_sub_8(t1, t1, w, p256_mod);
100281         sp_256_mont_tpl_8(a, t1, p256_mod);
100282         /* B = X*Y^2 */
100283         sp_256_mont_sqr_8(t1, y, p256_mod, p256_mp_mod);
100284         sp_256_mont_mul_8(b, t1, x, p256_mod, p256_mp_mod);
100285         /* X = A^2 - 2B */
100286         sp_256_mont_sqr_8(x, a, p256_mod, p256_mp_mod);
100287         sp_256_mont_dbl_8(t2, b, p256_mod);
100288         sp_256_mont_sub_8(x, x, t2, p256_mod);
100289         /* Z = Z*Y */
100290         sp_256_mont_mul_8(z, z, y, p256_mod, p256_mp_mod);
100291         /* t2 = Y^4 */
100292         sp_256_mont_sqr_8(t1, t1, p256_mod, p256_mp_mod);
100293 #ifdef WOLFSSL_SP_SMALL
100294         if (n != 0)
100295 #endif
100296         {
100297             /* W = W*Y^4 */
100298             sp_256_mont_mul_8(w, w, t1, p256_mod, p256_mp_mod);
100299         }
100300         /* y = 2*A*(B - X) - Y^4 */
100301         sp_256_mont_sub_8(y, b, x, p256_mod);
100302         sp_256_mont_mul_8(y, y, a, p256_mod, p256_mp_mod);
100303         sp_256_mont_dbl_8(y, y, p256_mod);
100304         sp_256_mont_sub_8(y, y, t1, p256_mod);
100305     }
100306 #ifndef WOLFSSL_SP_SMALL
100307     /* A = 3*(X^2 - W) */
100308     sp_256_mont_sqr_8(t1, x, p256_mod, p256_mp_mod);
100309     sp_256_mont_sub_8(t1, t1, w, p256_mod);
100310     sp_256_mont_tpl_8(a, t1, p256_mod);
100311     /* B = X*Y^2 */
100312     sp_256_mont_sqr_8(t1, y, p256_mod, p256_mp_mod);
100313     sp_256_mont_mul_8(b, t1, x, p256_mod, p256_mp_mod);
100314     /* X = A^2 - 2B */
100315     sp_256_mont_sqr_8(x, a, p256_mod, p256_mp_mod);
100316     sp_256_mont_dbl_8(t2, b, p256_mod);
100317     sp_256_mont_sub_8(x, x, t2, p256_mod);
100318     /* Z = Z*Y */
100319     sp_256_mont_mul_8(z, z, y, p256_mod, p256_mp_mod);
100320     /* t2 = Y^4 */
100321     sp_256_mont_sqr_8(t1, t1, p256_mod, p256_mp_mod);
100322     /* y = 2*A*(B - X) - Y^4 */
100323     sp_256_mont_sub_8(y, b, x, p256_mod);
100324     sp_256_mont_mul_8(y, y, a, p256_mod, p256_mp_mod);
100325     sp_256_mont_dbl_8(y, y, p256_mod);
100326     sp_256_mont_sub_8(y, y, t1, p256_mod);
100327 #endif
100328     /* Y = Y/2 */
100329     sp_256_div2_8(y, y, p256_mod);
100330 }
100331 
100332 /* Convert the projective point to affine.
100333  * Ordinates are in Montgomery form.
100334  *
100335  * a  Point to convert.
100336  * t  Temporary data.
100337  */
sp_256_proj_to_affine_8(sp_point_256 * a,sp_digit * t)100338 static void sp_256_proj_to_affine_8(sp_point_256* a, sp_digit* t)
100339 {
100340     sp_digit* t1 = t;
100341     sp_digit* t2 = t + 2 * 8;
100342     sp_digit* tmp = t + 4 * 8;
100343 
100344     sp_256_mont_inv_8(t1, a->z, tmp);
100345 
100346     sp_256_mont_sqr_8(t2, t1, p256_mod, p256_mp_mod);
100347     sp_256_mont_mul_8(t1, t2, t1, p256_mod, p256_mp_mod);
100348 
100349     sp_256_mont_mul_8(a->x, a->x, t2, p256_mod, p256_mp_mod);
100350     sp_256_mont_mul_8(a->y, a->y, t1, p256_mod, p256_mp_mod);
100351     XMEMCPY(a->z, p256_norm_mod, sizeof(p256_norm_mod));
100352 }
100353 
100354 #endif /* FP_ECC */
100355 /* A table entry for pre-computed points. */
100356 typedef struct sp_table_entry_256 {
100357     sp_digit x[8];
100358     sp_digit y[8];
100359 } sp_table_entry_256;
100360 
100361 #ifdef FP_ECC
100362 #endif /* FP_ECC */
100363 /* Add two Montgomery form projective points. The second point has a q value of
100364  * one.
100365  * Only the first point can be the same pointer as the result point.
100366  *
100367  * r  Result of addition.
100368  * p  First point to add.
100369  * q  Second point to add.
100370  * t  Temporary ordinate data.
100371  */
sp_256_proj_point_add_qz1_8(sp_point_256 * r,const sp_point_256 * p,const sp_point_256 * q,sp_digit * t)100372 static void sp_256_proj_point_add_qz1_8(sp_point_256* r, const sp_point_256* p,
100373         const sp_point_256* q, sp_digit* t)
100374 {
100375     const sp_point_256* ap[2];
100376     sp_point_256* rp[2];
100377     sp_digit* t1 = t;
100378     sp_digit* t2 = t + 2*8;
100379     sp_digit* t3 = t + 4*8;
100380     sp_digit* t4 = t + 6*8;
100381     sp_digit* t5 = t + 8*8;
100382     sp_digit* x;
100383     sp_digit* y;
100384     sp_digit* z;
100385     int i;
100386 
100387     /* Check double */
100388     (void)sp_256_sub_8(t1, p256_mod, q->y);
100389     sp_256_norm_8(t1);
100390     if ((sp_256_cmp_equal_8(p->x, q->x) & sp_256_cmp_equal_8(p->z, q->z) &
100391         (sp_256_cmp_equal_8(p->y, q->y) | sp_256_cmp_equal_8(p->y, t1))) != 0) {
100392         sp_256_proj_point_dbl_8(r, p, t);
100393     }
100394     else {
100395         rp[0] = r;
100396 
100397         /*lint allow cast to different type of pointer*/
100398         rp[1] = (sp_point_256*)t; /*lint !e9087 !e740*/
100399         XMEMSET(rp[1], 0, sizeof(sp_point_256));
100400         x = rp[p->infinity | q->infinity]->x;
100401         y = rp[p->infinity | q->infinity]->y;
100402         z = rp[p->infinity | q->infinity]->z;
100403 
100404         ap[0] = p;
100405         ap[1] = q;
100406         for (i=0; i<8; i++) {
100407             r->x[i] = ap[p->infinity]->x[i];
100408         }
100409         for (i=0; i<8; i++) {
100410             r->y[i] = ap[p->infinity]->y[i];
100411         }
100412         for (i=0; i<8; i++) {
100413             r->z[i] = ap[p->infinity]->z[i];
100414         }
100415         r->infinity = ap[p->infinity]->infinity;
100416 
100417         /* U2 = X2*Z1^2 */
100418         sp_256_mont_sqr_8(t2, z, p256_mod, p256_mp_mod);
100419         sp_256_mont_mul_8(t4, t2, z, p256_mod, p256_mp_mod);
100420         sp_256_mont_mul_8(t2, t2, q->x, p256_mod, p256_mp_mod);
100421         /* S2 = Y2*Z1^3 */
100422         sp_256_mont_mul_8(t4, t4, q->y, p256_mod, p256_mp_mod);
100423         /* H = U2 - X1 */
100424         sp_256_mont_sub_8(t2, t2, x, p256_mod);
100425         /* R = S2 - Y1 */
100426         sp_256_mont_sub_8(t4, t4, y, p256_mod);
100427         /* Z3 = H*Z1 */
100428         sp_256_mont_mul_8(z, z, t2, p256_mod, p256_mp_mod);
100429         /* X3 = R^2 - H^3 - 2*X1*H^2 */
100430         sp_256_mont_sqr_8(t1, t4, p256_mod, p256_mp_mod);
100431         sp_256_mont_sqr_8(t5, t2, p256_mod, p256_mp_mod);
100432         sp_256_mont_mul_8(t3, x, t5, p256_mod, p256_mp_mod);
100433         sp_256_mont_mul_8(t5, t5, t2, p256_mod, p256_mp_mod);
100434         sp_256_mont_sub_8(x, t1, t5, p256_mod);
100435         sp_256_mont_dbl_8(t1, t3, p256_mod);
100436         sp_256_mont_sub_8(x, x, t1, p256_mod);
100437         /* Y3 = R*(X1*H^2 - X3) - Y1*H^3 */
100438         sp_256_mont_sub_8(t3, t3, x, p256_mod);
100439         sp_256_mont_mul_8(t3, t3, t4, p256_mod, p256_mp_mod);
100440         sp_256_mont_mul_8(t5, t5, y, p256_mod, p256_mp_mod);
100441         sp_256_mont_sub_8(y, t3, t5, p256_mod);
100442     }
100443 }
100444 
100445 #ifdef WOLFSSL_SP_SMALL
100446 #ifdef FP_ECC
100447 /* Generate the pre-computed table of points for the base point.
100448  *
100449  * width = 4
100450  * 16 entries
100451  * 64 bits between
100452  *
100453  * a      The base point.
100454  * table  Place to store generated point data.
100455  * tmp    Temporary data.
100456  * heap  Heap to use for allocation.
100457  */
sp_256_gen_stripe_table_8(const sp_point_256 * a,sp_table_entry_256 * table,sp_digit * tmp,void * heap)100458 static int sp_256_gen_stripe_table_8(const sp_point_256* a,
100459         sp_table_entry_256* table, sp_digit* tmp, void* heap)
100460 {
100461 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100462     sp_point_256* t = NULL;
100463 #else
100464     sp_point_256 t[3];
100465 #endif
100466     sp_point_256* s1 = NULL;
100467     sp_point_256* s2 = NULL;
100468     int i;
100469     int j;
100470     int err = MP_OKAY;
100471 
100472     (void)heap;
100473 
100474 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100475     t = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 3, heap,
100476                                      DYNAMIC_TYPE_ECC);
100477     if (t == NULL)
100478         err = MEMORY_E;
100479 #endif
100480 
100481     if (err == MP_OKAY) {
100482         s1 = t + 1;
100483         s2 = t + 2;
100484 
100485         err = sp_256_mod_mul_norm_8(t->x, a->x, p256_mod);
100486     }
100487     if (err == MP_OKAY) {
100488         err = sp_256_mod_mul_norm_8(t->y, a->y, p256_mod);
100489     }
100490     if (err == MP_OKAY) {
100491         err = sp_256_mod_mul_norm_8(t->z, a->z, p256_mod);
100492     }
100493     if (err == MP_OKAY) {
100494         t->infinity = 0;
100495         sp_256_proj_to_affine_8(t, tmp);
100496 
100497         XMEMCPY(s1->z, p256_norm_mod, sizeof(p256_norm_mod));
100498         s1->infinity = 0;
100499         XMEMCPY(s2->z, p256_norm_mod, sizeof(p256_norm_mod));
100500         s2->infinity = 0;
100501 
100502         /* table[0] = {0, 0, infinity} */
100503         XMEMSET(&table[0], 0, sizeof(sp_table_entry_256));
100504         /* table[1] = Affine version of 'a' in Montgomery form */
100505         XMEMCPY(table[1].x, t->x, sizeof(table->x));
100506         XMEMCPY(table[1].y, t->y, sizeof(table->y));
100507 
100508         for (i=1; i<4; i++) {
100509             sp_256_proj_point_dbl_n_8(t, 64, tmp);
100510             sp_256_proj_to_affine_8(t, tmp);
100511             XMEMCPY(table[1<<i].x, t->x, sizeof(table->x));
100512             XMEMCPY(table[1<<i].y, t->y, sizeof(table->y));
100513         }
100514 
100515         for (i=1; i<4; i++) {
100516             XMEMCPY(s1->x, table[1<<i].x, sizeof(table->x));
100517             XMEMCPY(s1->y, table[1<<i].y, sizeof(table->y));
100518             for (j=(1<<i)+1; j<(1<<(i+1)); j++) {
100519                 XMEMCPY(s2->x, table[j-(1<<i)].x, sizeof(table->x));
100520                 XMEMCPY(s2->y, table[j-(1<<i)].y, sizeof(table->y));
100521                 sp_256_proj_point_add_qz1_8(t, s1, s2, tmp);
100522                 sp_256_proj_to_affine_8(t, tmp);
100523                 XMEMCPY(table[j].x, t->x, sizeof(table->x));
100524                 XMEMCPY(table[j].y, t->y, sizeof(table->y));
100525             }
100526         }
100527     }
100528 
100529 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100530     if (t != NULL)
100531         XFREE(t, heap, DYNAMIC_TYPE_ECC);
100532 #endif
100533 
100534     return err;
100535 }
100536 
100537 #endif /* FP_ECC */
100538 #ifndef WC_NO_CACHE_RESISTANT
100539 /* Touch each possible entry that could be being copied.
100540  *
100541  * r      Point to copy into.
100542  * table  Table - start of the entires to access
100543  * idx    Index of entry to retrieve.
100544  */
sp_256_get_entry_16_8(sp_point_256 * r,const sp_table_entry_256 * table,int idx)100545 static void sp_256_get_entry_16_8(sp_point_256* r,
100546     const sp_table_entry_256* table, int idx)
100547 {
100548     int i;
100549     sp_digit mask;
100550 
100551     r->x[0] = 0;
100552     r->x[1] = 0;
100553     r->x[2] = 0;
100554     r->x[3] = 0;
100555     r->x[4] = 0;
100556     r->x[5] = 0;
100557     r->x[6] = 0;
100558     r->x[7] = 0;
100559     r->y[0] = 0;
100560     r->y[1] = 0;
100561     r->y[2] = 0;
100562     r->y[3] = 0;
100563     r->y[4] = 0;
100564     r->y[5] = 0;
100565     r->y[6] = 0;
100566     r->y[7] = 0;
100567     for (i = 1; i < 16; i++) {
100568         mask = 0 - (i == idx);
100569         r->x[0] |= mask & table[i].x[0];
100570         r->x[1] |= mask & table[i].x[1];
100571         r->x[2] |= mask & table[i].x[2];
100572         r->x[3] |= mask & table[i].x[3];
100573         r->x[4] |= mask & table[i].x[4];
100574         r->x[5] |= mask & table[i].x[5];
100575         r->x[6] |= mask & table[i].x[6];
100576         r->x[7] |= mask & table[i].x[7];
100577         r->y[0] |= mask & table[i].y[0];
100578         r->y[1] |= mask & table[i].y[1];
100579         r->y[2] |= mask & table[i].y[2];
100580         r->y[3] |= mask & table[i].y[3];
100581         r->y[4] |= mask & table[i].y[4];
100582         r->y[5] |= mask & table[i].y[5];
100583         r->y[6] |= mask & table[i].y[6];
100584         r->y[7] |= mask & table[i].y[7];
100585     }
100586 }
100587 #endif /* !WC_NO_CACHE_RESISTANT */
100588 /* Multiply the point by the scalar and return the result.
100589  * If map is true then convert result to affine coordinates.
100590  *
100591  * Stripe implementation.
100592  * Pre-generated: 2^0, 2^64, ...
100593  * Pre-generated: products of all combinations of above.
100594  * 4 doubles and adds (with qz=1)
100595  *
100596  * r      Resulting point.
100597  * k      Scalar to multiply by.
100598  * table  Pre-computed table.
100599  * map    Indicates whether to convert result to affine.
100600  * ct     Constant time required.
100601  * heap   Heap to use for allocation.
100602  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
100603  */
sp_256_ecc_mulmod_stripe_8(sp_point_256 * r,const sp_point_256 * g,const sp_table_entry_256 * table,const sp_digit * k,int map,int ct,void * heap)100604 static int sp_256_ecc_mulmod_stripe_8(sp_point_256* r, const sp_point_256* g,
100605         const sp_table_entry_256* table, const sp_digit* k, int map,
100606         int ct, void* heap)
100607 {
100608 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100609     sp_point_256* rt = NULL;
100610     sp_digit* t = NULL;
100611 #else
100612     sp_point_256 rt[2];
100613     sp_digit t[2 * 8 * 5];
100614 #endif
100615     sp_point_256* p = NULL;
100616     int i;
100617     int j;
100618     int y;
100619     int x;
100620     int err = MP_OKAY;
100621 
100622     (void)g;
100623     /* Constant time used for cache attack resistance implementation. */
100624     (void)ct;
100625     (void)heap;
100626 
100627 
100628 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100629     rt = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap,
100630                                       DYNAMIC_TYPE_ECC);
100631     if (rt == NULL)
100632         err = MEMORY_E;
100633     if (err == MP_OKAY) {
100634         t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 8 * 5, heap,
100635                                DYNAMIC_TYPE_ECC);
100636         if (t == NULL)
100637             err = MEMORY_E;
100638     }
100639 #endif
100640 
100641     if (err == MP_OKAY) {
100642         p = rt + 1;
100643 
100644         XMEMCPY(p->z, p256_norm_mod, sizeof(p256_norm_mod));
100645         XMEMCPY(rt->z, p256_norm_mod, sizeof(p256_norm_mod));
100646 
100647         y = 0;
100648         x = 63;
100649         for (j=0; j<4; j++) {
100650             y |= (int)(((k[x / 32] >> (x % 32)) & 1) << j);
100651             x += 64;
100652         }
100653     #ifndef WC_NO_CACHE_RESISTANT
100654         if (ct) {
100655             sp_256_get_entry_16_8(rt, table, y);
100656         } else
100657     #endif
100658         {
100659             XMEMCPY(rt->x, table[y].x, sizeof(table[y].x));
100660             XMEMCPY(rt->y, table[y].y, sizeof(table[y].y));
100661         }
100662         rt->infinity = !y;
100663         for (i=62; i>=0; i--) {
100664             y = 0;
100665             x = i;
100666             for (j=0; j<4; j++) {
100667                 y |= (int)(((k[x / 32] >> (x % 32)) & 1) << j);
100668                 x += 64;
100669             }
100670 
100671             sp_256_proj_point_dbl_8(rt, rt, t);
100672         #ifndef WC_NO_CACHE_RESISTANT
100673             if (ct) {
100674                 sp_256_get_entry_16_8(p, table, y);
100675             }
100676             else
100677         #endif
100678             {
100679                 XMEMCPY(p->x, table[y].x, sizeof(table[y].x));
100680                 XMEMCPY(p->y, table[y].y, sizeof(table[y].y));
100681             }
100682             p->infinity = !y;
100683             sp_256_proj_point_add_qz1_8(rt, rt, p, t);
100684         }
100685 
100686         if (map != 0) {
100687             sp_256_map_8(r, rt, t);
100688         }
100689         else {
100690             XMEMCPY(r, rt, sizeof(sp_point_256));
100691         }
100692     }
100693 
100694 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100695     if (t != NULL)
100696         XFREE(t, heap, DYNAMIC_TYPE_ECC);
100697     if (rt != NULL)
100698         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
100699 #endif
100700 
100701     return err;
100702 }
100703 
100704 #ifdef FP_ECC
100705 #ifndef FP_ENTRIES
100706     #define FP_ENTRIES 16
100707 #endif
100708 
100709 /* Cache entry - holds precomputation tables for a point. */
100710 typedef struct sp_cache_256_t {
100711     /* X ordinate of point that table was generated from. */
100712     sp_digit x[8];
100713     /* Y ordinate of point that table was generated from. */
100714     sp_digit y[8];
100715     /* Precomputation table for point. */
100716     sp_table_entry_256 table[16];
100717     /* Count of entries in table. */
100718     uint32_t cnt;
100719     /* Point and table set in entry. */
100720     int set;
100721 } sp_cache_256_t;
100722 
100723 /* Cache of tables. */
100724 static THREAD_LS_T sp_cache_256_t sp_cache_256[FP_ENTRIES];
100725 /* Index of last entry in cache. */
100726 static THREAD_LS_T int sp_cache_256_last = -1;
100727 /* Cache has been initialized. */
100728 static THREAD_LS_T int sp_cache_256_inited = 0;
100729 
100730 #ifndef HAVE_THREAD_LS
100731     static volatile int initCacheMutex_256 = 0;
100732     static wolfSSL_Mutex sp_cache_256_lock;
100733 #endif
100734 
100735 /* Get the cache entry for the point.
100736  *
100737  * g      [in]   Point scalar multipling.
100738  * cache  [out]  Cache table to use.
100739  */
sp_ecc_get_cache_256(const sp_point_256 * g,sp_cache_256_t ** cache)100740 static void sp_ecc_get_cache_256(const sp_point_256* g, sp_cache_256_t** cache)
100741 {
100742     int i;
100743     int j;
100744     uint32_t least;
100745 
100746     if (sp_cache_256_inited == 0) {
100747         for (i=0; i<FP_ENTRIES; i++) {
100748             sp_cache_256[i].set = 0;
100749         }
100750         sp_cache_256_inited = 1;
100751     }
100752 
100753     /* Compare point with those in cache. */
100754     for (i=0; i<FP_ENTRIES; i++) {
100755         if (!sp_cache_256[i].set)
100756             continue;
100757 
100758         if (sp_256_cmp_equal_8(g->x, sp_cache_256[i].x) &
100759                            sp_256_cmp_equal_8(g->y, sp_cache_256[i].y)) {
100760             sp_cache_256[i].cnt++;
100761             break;
100762         }
100763     }
100764 
100765     /* No match. */
100766     if (i == FP_ENTRIES) {
100767         /* Find empty entry. */
100768         i = (sp_cache_256_last + 1) % FP_ENTRIES;
100769         for (; i != sp_cache_256_last; i=(i+1)%FP_ENTRIES) {
100770             if (!sp_cache_256[i].set) {
100771                 break;
100772             }
100773         }
100774 
100775         /* Evict least used. */
100776         if (i == sp_cache_256_last) {
100777             least = sp_cache_256[0].cnt;
100778             for (j=1; j<FP_ENTRIES; j++) {
100779                 if (sp_cache_256[j].cnt < least) {
100780                     i = j;
100781                     least = sp_cache_256[i].cnt;
100782                 }
100783             }
100784         }
100785 
100786         XMEMCPY(sp_cache_256[i].x, g->x, sizeof(sp_cache_256[i].x));
100787         XMEMCPY(sp_cache_256[i].y, g->y, sizeof(sp_cache_256[i].y));
100788         sp_cache_256[i].set = 1;
100789         sp_cache_256[i].cnt = 1;
100790     }
100791 
100792     *cache = &sp_cache_256[i];
100793     sp_cache_256_last = i;
100794 }
100795 #endif /* FP_ECC */
100796 
100797 /* Multiply the base point of P256 by the scalar and return the result.
100798  * If map is true then convert result to affine coordinates.
100799  *
100800  * r     Resulting point.
100801  * g     Point to multiply.
100802  * k     Scalar to multiply by.
100803  * map   Indicates whether to convert result to affine.
100804  * ct    Constant time required.
100805  * heap  Heap to use for allocation.
100806  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
100807  */
sp_256_ecc_mulmod_8(sp_point_256 * r,const sp_point_256 * g,const sp_digit * k,int map,int ct,void * heap)100808 static int sp_256_ecc_mulmod_8(sp_point_256* r, const sp_point_256* g, const sp_digit* k,
100809         int map, int ct, void* heap)
100810 {
100811 #ifndef FP_ECC
100812     return sp_256_ecc_mulmod_fast_8(r, g, k, map, ct, heap);
100813 #else
100814     sp_digit tmp[2 * 8 * 5];
100815     sp_cache_256_t* cache;
100816     int err = MP_OKAY;
100817 
100818 #ifndef HAVE_THREAD_LS
100819     if (initCacheMutex_256 == 0) {
100820          wc_InitMutex(&sp_cache_256_lock);
100821          initCacheMutex_256 = 1;
100822     }
100823     if (wc_LockMutex(&sp_cache_256_lock) != 0)
100824        err = BAD_MUTEX_E;
100825 #endif /* HAVE_THREAD_LS */
100826 
100827     if (err == MP_OKAY) {
100828         sp_ecc_get_cache_256(g, &cache);
100829         if (cache->cnt == 2)
100830             sp_256_gen_stripe_table_8(g, cache->table, tmp, heap);
100831 
100832 #ifndef HAVE_THREAD_LS
100833         wc_UnLockMutex(&sp_cache_256_lock);
100834 #endif /* HAVE_THREAD_LS */
100835 
100836         if (cache->cnt < 2) {
100837             err = sp_256_ecc_mulmod_fast_8(r, g, k, map, ct, heap);
100838         }
100839         else {
100840             err = sp_256_ecc_mulmod_stripe_8(r, g, cache->table, k,
100841                     map, ct, heap);
100842         }
100843     }
100844 
100845     return err;
100846 #endif
100847 }
100848 
100849 #else
100850 #ifdef FP_ECC
100851 /* Generate the pre-computed table of points for the base point.
100852  *
100853  * width = 8
100854  * 256 entries
100855  * 32 bits between
100856  *
100857  * a      The base point.
100858  * table  Place to store generated point data.
100859  * tmp    Temporary data.
100860  * heap  Heap to use for allocation.
100861  */
sp_256_gen_stripe_table_8(const sp_point_256 * a,sp_table_entry_256 * table,sp_digit * tmp,void * heap)100862 static int sp_256_gen_stripe_table_8(const sp_point_256* a,
100863         sp_table_entry_256* table, sp_digit* tmp, void* heap)
100864 {
100865 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100866     sp_point_256* t = NULL;
100867 #else
100868     sp_point_256 t[3];
100869 #endif
100870     sp_point_256* s1 = NULL;
100871     sp_point_256* s2 = NULL;
100872     int i;
100873     int j;
100874     int err = MP_OKAY;
100875 
100876     (void)heap;
100877 
100878 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100879     t = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 3, heap,
100880                                      DYNAMIC_TYPE_ECC);
100881     if (t == NULL)
100882         err = MEMORY_E;
100883 #endif
100884 
100885     if (err == MP_OKAY) {
100886         s1 = t + 1;
100887         s2 = t + 2;
100888 
100889         err = sp_256_mod_mul_norm_8(t->x, a->x, p256_mod);
100890     }
100891     if (err == MP_OKAY) {
100892         err = sp_256_mod_mul_norm_8(t->y, a->y, p256_mod);
100893     }
100894     if (err == MP_OKAY) {
100895         err = sp_256_mod_mul_norm_8(t->z, a->z, p256_mod);
100896     }
100897     if (err == MP_OKAY) {
100898         t->infinity = 0;
100899         sp_256_proj_to_affine_8(t, tmp);
100900 
100901         XMEMCPY(s1->z, p256_norm_mod, sizeof(p256_norm_mod));
100902         s1->infinity = 0;
100903         XMEMCPY(s2->z, p256_norm_mod, sizeof(p256_norm_mod));
100904         s2->infinity = 0;
100905 
100906         /* table[0] = {0, 0, infinity} */
100907         XMEMSET(&table[0], 0, sizeof(sp_table_entry_256));
100908         /* table[1] = Affine version of 'a' in Montgomery form */
100909         XMEMCPY(table[1].x, t->x, sizeof(table->x));
100910         XMEMCPY(table[1].y, t->y, sizeof(table->y));
100911 
100912         for (i=1; i<8; i++) {
100913             sp_256_proj_point_dbl_n_8(t, 32, tmp);
100914             sp_256_proj_to_affine_8(t, tmp);
100915             XMEMCPY(table[1<<i].x, t->x, sizeof(table->x));
100916             XMEMCPY(table[1<<i].y, t->y, sizeof(table->y));
100917         }
100918 
100919         for (i=1; i<8; i++) {
100920             XMEMCPY(s1->x, table[1<<i].x, sizeof(table->x));
100921             XMEMCPY(s1->y, table[1<<i].y, sizeof(table->y));
100922             for (j=(1<<i)+1; j<(1<<(i+1)); j++) {
100923                 XMEMCPY(s2->x, table[j-(1<<i)].x, sizeof(table->x));
100924                 XMEMCPY(s2->y, table[j-(1<<i)].y, sizeof(table->y));
100925                 sp_256_proj_point_add_qz1_8(t, s1, s2, tmp);
100926                 sp_256_proj_to_affine_8(t, tmp);
100927                 XMEMCPY(table[j].x, t->x, sizeof(table->x));
100928                 XMEMCPY(table[j].y, t->y, sizeof(table->y));
100929             }
100930         }
100931     }
100932 
100933 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
100934     if (t != NULL)
100935         XFREE(t, heap, DYNAMIC_TYPE_ECC);
100936 #endif
100937 
100938     return err;
100939 }
100940 
100941 #endif /* FP_ECC */
100942 #ifndef WC_NO_CACHE_RESISTANT
100943 /* Touch each possible entry that could be being copied.
100944  *
100945  * r      Point to copy into.
100946  * table  Table - start of the entires to access
100947  * idx    Index of entry to retrieve.
100948  */
sp_256_get_entry_256_8(sp_point_256 * r,const sp_table_entry_256 * table,int idx)100949 static void sp_256_get_entry_256_8(sp_point_256* r,
100950     const sp_table_entry_256* table, int idx)
100951 {
100952     int i;
100953     sp_digit mask;
100954 
100955     r->x[0] = 0;
100956     r->x[1] = 0;
100957     r->x[2] = 0;
100958     r->x[3] = 0;
100959     r->x[4] = 0;
100960     r->x[5] = 0;
100961     r->x[6] = 0;
100962     r->x[7] = 0;
100963     r->y[0] = 0;
100964     r->y[1] = 0;
100965     r->y[2] = 0;
100966     r->y[3] = 0;
100967     r->y[4] = 0;
100968     r->y[5] = 0;
100969     r->y[6] = 0;
100970     r->y[7] = 0;
100971     for (i = 1; i < 256; i++) {
100972         mask = 0 - (i == idx);
100973         r->x[0] |= mask & table[i].x[0];
100974         r->x[1] |= mask & table[i].x[1];
100975         r->x[2] |= mask & table[i].x[2];
100976         r->x[3] |= mask & table[i].x[3];
100977         r->x[4] |= mask & table[i].x[4];
100978         r->x[5] |= mask & table[i].x[5];
100979         r->x[6] |= mask & table[i].x[6];
100980         r->x[7] |= mask & table[i].x[7];
100981         r->y[0] |= mask & table[i].y[0];
100982         r->y[1] |= mask & table[i].y[1];
100983         r->y[2] |= mask & table[i].y[2];
100984         r->y[3] |= mask & table[i].y[3];
100985         r->y[4] |= mask & table[i].y[4];
100986         r->y[5] |= mask & table[i].y[5];
100987         r->y[6] |= mask & table[i].y[6];
100988         r->y[7] |= mask & table[i].y[7];
100989     }
100990 }
100991 #endif /* !WC_NO_CACHE_RESISTANT */
100992 /* Multiply the point by the scalar and return the result.
100993  * If map is true then convert result to affine coordinates.
100994  *
100995  * Stripe implementation.
100996  * Pre-generated: 2^0, 2^32, ...
100997  * Pre-generated: products of all combinations of above.
100998  * 8 doubles and adds (with qz=1)
100999  *
101000  * r      Resulting point.
101001  * k      Scalar to multiply by.
101002  * table  Pre-computed table.
101003  * map    Indicates whether to convert result to affine.
101004  * ct     Constant time required.
101005  * heap   Heap to use for allocation.
101006  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
101007  */
sp_256_ecc_mulmod_stripe_8(sp_point_256 * r,const sp_point_256 * g,const sp_table_entry_256 * table,const sp_digit * k,int map,int ct,void * heap)101008 static int sp_256_ecc_mulmod_stripe_8(sp_point_256* r, const sp_point_256* g,
101009         const sp_table_entry_256* table, const sp_digit* k, int map,
101010         int ct, void* heap)
101011 {
101012 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
101013     sp_point_256* rt = NULL;
101014     sp_digit* t = NULL;
101015 #else
101016     sp_point_256 rt[2];
101017     sp_digit t[2 * 8 * 5];
101018 #endif
101019     sp_point_256* p = NULL;
101020     int i;
101021     int j;
101022     int y;
101023     int x;
101024     int err = MP_OKAY;
101025 
101026     (void)g;
101027     /* Constant time used for cache attack resistance implementation. */
101028     (void)ct;
101029     (void)heap;
101030 
101031 
101032 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
101033     rt = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap,
101034                                       DYNAMIC_TYPE_ECC);
101035     if (rt == NULL)
101036         err = MEMORY_E;
101037     if (err == MP_OKAY) {
101038         t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 8 * 5, heap,
101039                                DYNAMIC_TYPE_ECC);
101040         if (t == NULL)
101041             err = MEMORY_E;
101042     }
101043 #endif
101044 
101045     if (err == MP_OKAY) {
101046         p = rt + 1;
101047 
101048         XMEMCPY(p->z, p256_norm_mod, sizeof(p256_norm_mod));
101049         XMEMCPY(rt->z, p256_norm_mod, sizeof(p256_norm_mod));
101050 
101051         y = 0;
101052         x = 31;
101053         for (j=0; j<8; j++) {
101054             y |= (int)(((k[x / 32] >> (x % 32)) & 1) << j);
101055             x += 32;
101056         }
101057     #ifndef WC_NO_CACHE_RESISTANT
101058         if (ct) {
101059             sp_256_get_entry_256_8(rt, table, y);
101060         } else
101061     #endif
101062         {
101063             XMEMCPY(rt->x, table[y].x, sizeof(table[y].x));
101064             XMEMCPY(rt->y, table[y].y, sizeof(table[y].y));
101065         }
101066         rt->infinity = !y;
101067         for (i=30; i>=0; i--) {
101068             y = 0;
101069             x = i;
101070             for (j=0; j<8; j++) {
101071                 y |= (int)(((k[x / 32] >> (x % 32)) & 1) << j);
101072                 x += 32;
101073             }
101074 
101075             sp_256_proj_point_dbl_8(rt, rt, t);
101076         #ifndef WC_NO_CACHE_RESISTANT
101077             if (ct) {
101078                 sp_256_get_entry_256_8(p, table, y);
101079             }
101080             else
101081         #endif
101082             {
101083                 XMEMCPY(p->x, table[y].x, sizeof(table[y].x));
101084                 XMEMCPY(p->y, table[y].y, sizeof(table[y].y));
101085             }
101086             p->infinity = !y;
101087             sp_256_proj_point_add_qz1_8(rt, rt, p, t);
101088         }
101089 
101090         if (map != 0) {
101091             sp_256_map_8(r, rt, t);
101092         }
101093         else {
101094             XMEMCPY(r, rt, sizeof(sp_point_256));
101095         }
101096     }
101097 
101098 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
101099     if (t != NULL)
101100         XFREE(t, heap, DYNAMIC_TYPE_ECC);
101101     if (rt != NULL)
101102         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
101103 #endif
101104 
101105     return err;
101106 }
101107 
101108 #ifdef FP_ECC
101109 #ifndef FP_ENTRIES
101110     #define FP_ENTRIES 16
101111 #endif
101112 
101113 /* Cache entry - holds precomputation tables for a point. */
101114 typedef struct sp_cache_256_t {
101115     /* X ordinate of point that table was generated from. */
101116     sp_digit x[8];
101117     /* Y ordinate of point that table was generated from. */
101118     sp_digit y[8];
101119     /* Precomputation table for point. */
101120     sp_table_entry_256 table[256];
101121     /* Count of entries in table. */
101122     uint32_t cnt;
101123     /* Point and table set in entry. */
101124     int set;
101125 } sp_cache_256_t;
101126 
101127 /* Cache of tables. */
101128 static THREAD_LS_T sp_cache_256_t sp_cache_256[FP_ENTRIES];
101129 /* Index of last entry in cache. */
101130 static THREAD_LS_T int sp_cache_256_last = -1;
101131 /* Cache has been initialized. */
101132 static THREAD_LS_T int sp_cache_256_inited = 0;
101133 
101134 #ifndef HAVE_THREAD_LS
101135     static volatile int initCacheMutex_256 = 0;
101136     static wolfSSL_Mutex sp_cache_256_lock;
101137 #endif
101138 
101139 /* Get the cache entry for the point.
101140  *
101141  * g      [in]   Point scalar multipling.
101142  * cache  [out]  Cache table to use.
101143  */
sp_ecc_get_cache_256(const sp_point_256 * g,sp_cache_256_t ** cache)101144 static void sp_ecc_get_cache_256(const sp_point_256* g, sp_cache_256_t** cache)
101145 {
101146     int i;
101147     int j;
101148     uint32_t least;
101149 
101150     if (sp_cache_256_inited == 0) {
101151         for (i=0; i<FP_ENTRIES; i++) {
101152             sp_cache_256[i].set = 0;
101153         }
101154         sp_cache_256_inited = 1;
101155     }
101156 
101157     /* Compare point with those in cache. */
101158     for (i=0; i<FP_ENTRIES; i++) {
101159         if (!sp_cache_256[i].set)
101160             continue;
101161 
101162         if (sp_256_cmp_equal_8(g->x, sp_cache_256[i].x) &
101163                            sp_256_cmp_equal_8(g->y, sp_cache_256[i].y)) {
101164             sp_cache_256[i].cnt++;
101165             break;
101166         }
101167     }
101168 
101169     /* No match. */
101170     if (i == FP_ENTRIES) {
101171         /* Find empty entry. */
101172         i = (sp_cache_256_last + 1) % FP_ENTRIES;
101173         for (; i != sp_cache_256_last; i=(i+1)%FP_ENTRIES) {
101174             if (!sp_cache_256[i].set) {
101175                 break;
101176             }
101177         }
101178 
101179         /* Evict least used. */
101180         if (i == sp_cache_256_last) {
101181             least = sp_cache_256[0].cnt;
101182             for (j=1; j<FP_ENTRIES; j++) {
101183                 if (sp_cache_256[j].cnt < least) {
101184                     i = j;
101185                     least = sp_cache_256[i].cnt;
101186                 }
101187             }
101188         }
101189 
101190         XMEMCPY(sp_cache_256[i].x, g->x, sizeof(sp_cache_256[i].x));
101191         XMEMCPY(sp_cache_256[i].y, g->y, sizeof(sp_cache_256[i].y));
101192         sp_cache_256[i].set = 1;
101193         sp_cache_256[i].cnt = 1;
101194     }
101195 
101196     *cache = &sp_cache_256[i];
101197     sp_cache_256_last = i;
101198 }
101199 #endif /* FP_ECC */
101200 
101201 /* Multiply the base point of P256 by the scalar and return the result.
101202  * If map is true then convert result to affine coordinates.
101203  *
101204  * r     Resulting point.
101205  * g     Point to multiply.
101206  * k     Scalar to multiply by.
101207  * map   Indicates whether to convert result to affine.
101208  * ct    Constant time required.
101209  * heap  Heap to use for allocation.
101210  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
101211  */
sp_256_ecc_mulmod_8(sp_point_256 * r,const sp_point_256 * g,const sp_digit * k,int map,int ct,void * heap)101212 static int sp_256_ecc_mulmod_8(sp_point_256* r, const sp_point_256* g, const sp_digit* k,
101213         int map, int ct, void* heap)
101214 {
101215 #ifndef FP_ECC
101216     return sp_256_ecc_mulmod_fast_8(r, g, k, map, ct, heap);
101217 #else
101218     sp_digit tmp[2 * 8 * 5];
101219     sp_cache_256_t* cache;
101220     int err = MP_OKAY;
101221 
101222 #ifndef HAVE_THREAD_LS
101223     if (initCacheMutex_256 == 0) {
101224          wc_InitMutex(&sp_cache_256_lock);
101225          initCacheMutex_256 = 1;
101226     }
101227     if (wc_LockMutex(&sp_cache_256_lock) != 0)
101228        err = BAD_MUTEX_E;
101229 #endif /* HAVE_THREAD_LS */
101230 
101231     if (err == MP_OKAY) {
101232         sp_ecc_get_cache_256(g, &cache);
101233         if (cache->cnt == 2)
101234             sp_256_gen_stripe_table_8(g, cache->table, tmp, heap);
101235 
101236 #ifndef HAVE_THREAD_LS
101237         wc_UnLockMutex(&sp_cache_256_lock);
101238 #endif /* HAVE_THREAD_LS */
101239 
101240         if (cache->cnt < 2) {
101241             err = sp_256_ecc_mulmod_fast_8(r, g, k, map, ct, heap);
101242         }
101243         else {
101244             err = sp_256_ecc_mulmod_stripe_8(r, g, cache->table, k,
101245                     map, ct, heap);
101246         }
101247     }
101248 
101249     return err;
101250 #endif
101251 }
101252 
101253 #endif /* WOLFSSL_SP_SMALL */
101254 /* Multiply the point by the scalar and return the result.
101255  * If map is true then convert result to affine coordinates.
101256  *
101257  * km    Scalar to multiply by.
101258  * p     Point to multiply.
101259  * r     Resulting point.
101260  * map   Indicates whether to convert result to affine.
101261  * heap  Heap to use for allocation.
101262  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
101263  */
sp_ecc_mulmod_256(const mp_int * km,const ecc_point * gm,ecc_point * r,int map,void * heap)101264 int sp_ecc_mulmod_256(const mp_int* km, const ecc_point* gm, ecc_point* r,
101265         int map, void* heap)
101266 {
101267 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
101268     sp_point_256* point = NULL;
101269     sp_digit* k = NULL;
101270 #else
101271     sp_point_256 point[1];
101272     sp_digit k[8];
101273 #endif
101274     int err = MP_OKAY;
101275 
101276 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
101277     point = (sp_point_256*)XMALLOC(sizeof(sp_point_256), heap,
101278                                          DYNAMIC_TYPE_ECC);
101279     if (point == NULL)
101280         err = MEMORY_E;
101281     if (err == MP_OKAY) {
101282         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 8, heap,
101283                                DYNAMIC_TYPE_ECC);
101284         if (k == NULL)
101285             err = MEMORY_E;
101286     }
101287 #endif
101288 
101289     if (err == MP_OKAY) {
101290         sp_256_from_mp(k, 8, km);
101291         sp_256_point_from_ecc_point_8(point, gm);
101292 
101293             err = sp_256_ecc_mulmod_8(point, point, k, map, 1, heap);
101294     }
101295     if (err == MP_OKAY) {
101296         err = sp_256_point_to_ecc_point_8(point, r);
101297     }
101298 
101299 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
101300     if (k != NULL)
101301         XFREE(k, heap, DYNAMIC_TYPE_ECC);
101302     if (point != NULL)
101303         XFREE(point, heap, DYNAMIC_TYPE_ECC);
101304 #endif
101305 
101306     return err;
101307 }
101308 
101309 /* Multiply the point by the scalar, add point a and return the result.
101310  * If map is true then convert result to affine coordinates.
101311  *
101312  * km      Scalar to multiply by.
101313  * p       Point to multiply.
101314  * am      Point to add to scalar mulitply result.
101315  * inMont  Point to add is in montgomery form.
101316  * r       Resulting point.
101317  * map     Indicates whether to convert result to affine.
101318  * heap    Heap to use for allocation.
101319  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
101320  */
sp_ecc_mulmod_add_256(const mp_int * km,const ecc_point * gm,const ecc_point * am,int inMont,ecc_point * r,int map,void * heap)101321 int sp_ecc_mulmod_add_256(const mp_int* km, const ecc_point* gm,
101322     const ecc_point* am, int inMont, ecc_point* r, int map, void* heap)
101323 {
101324 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
101325     sp_point_256* point = NULL;
101326     sp_digit* k = NULL;
101327 #else
101328     sp_point_256 point[2];
101329     sp_digit k[8 + 8 * 2 * 5];
101330 #endif
101331     sp_point_256* addP = NULL;
101332     sp_digit* tmp = NULL;
101333     int err = MP_OKAY;
101334 
101335 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
101336     point = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap,
101337                                          DYNAMIC_TYPE_ECC);
101338     if (point == NULL)
101339         err = MEMORY_E;
101340     if (err == MP_OKAY) {
101341         k = (sp_digit*)XMALLOC(
101342             sizeof(sp_digit) * (8 + 8 * 2 * 5), heap,
101343             DYNAMIC_TYPE_ECC);
101344         if (k == NULL)
101345             err = MEMORY_E;
101346     }
101347 #endif
101348 
101349     if (err == MP_OKAY) {
101350         addP = point + 1;
101351         tmp = k + 8;
101352 
101353         sp_256_from_mp(k, 8, km);
101354         sp_256_point_from_ecc_point_8(point, gm);
101355         sp_256_point_from_ecc_point_8(addP, am);
101356     }
101357     if ((err == MP_OKAY) && (!inMont)) {
101358         err = sp_256_mod_mul_norm_8(addP->x, addP->x, p256_mod);
101359     }
101360     if ((err == MP_OKAY) && (!inMont)) {
101361         err = sp_256_mod_mul_norm_8(addP->y, addP->y, p256_mod);
101362     }
101363     if ((err == MP_OKAY) && (!inMont)) {
101364         err = sp_256_mod_mul_norm_8(addP->z, addP->z, p256_mod);
101365     }
101366     if (err == MP_OKAY) {
101367             err = sp_256_ecc_mulmod_8(point, point, k, 0, 0, heap);
101368     }
101369     if (err == MP_OKAY) {
101370             sp_256_proj_point_add_8(point, point, addP, tmp);
101371 
101372         if (map) {
101373                 sp_256_map_8(point, point, tmp);
101374         }
101375 
101376         err = sp_256_point_to_ecc_point_8(point, r);
101377     }
101378 
101379 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
101380     if (k != NULL)
101381         XFREE(k, heap, DYNAMIC_TYPE_ECC);
101382     if (point != NULL)
101383         XFREE(point, heap, DYNAMIC_TYPE_ECC);
101384 #endif
101385 
101386     return err;
101387 }
101388 
101389 #ifdef WOLFSSL_SP_SMALL
101390 /* Striping precomputation table.
101391  * 4 points combined into a table of 16 points.
101392  * Distance of 64 between points.
101393  */
101394 static const sp_table_entry_256 p256_table[16] = {
101395     /* 0 */
101396     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
101397       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
101398     /* 1 */
101399     { { 0x18a9143c,0x79e730d4,0x5fedb601,0x75ba95fc,0x77622510,0x79fb732b,
101400         0xa53755c6,0x18905f76 },
101401       { 0xce95560a,0xddf25357,0xba19e45c,0x8b4ab8e4,0xdd21f325,0xd2e88688,
101402         0x25885d85,0x8571ff18 } },
101403     /* 2 */
101404     { { 0x16a0d2bb,0x4f922fc5,0x1a623499,0x0d5cc16c,0x57c62c8b,0x9241cf3a,
101405         0xfd1b667f,0x2f5e6961 },
101406       { 0xf5a01797,0x5c15c70b,0x60956192,0x3d20b44d,0x071fdb52,0x04911b37,
101407         0x8d6f0f7b,0xf648f916 } },
101408     /* 3 */
101409     { { 0xe137bbbc,0x9e566847,0x8a6a0bec,0xe434469e,0x79d73463,0xb1c42761,
101410         0x133d0015,0x5abe0285 },
101411       { 0xc04c7dab,0x92aa837c,0x43260c07,0x573d9f4c,0x78e6cc37,0x0c931562,
101412         0x6b6f7383,0x94bb725b } },
101413     /* 4 */
101414     { { 0xbfe20925,0x62a8c244,0x8fdce867,0x91c19ac3,0xdd387063,0x5a96a5d5,
101415         0x21d324f6,0x61d587d4 },
101416       { 0xa37173ea,0xe87673a2,0x53778b65,0x23848008,0x05bab43e,0x10f8441e,
101417         0x4621efbe,0xfa11fe12 } },
101418     /* 5 */
101419     { { 0x2cb19ffd,0x1c891f2b,0xb1923c23,0x01ba8d5b,0x8ac5ca8e,0xb6d03d67,
101420         0x1f13bedc,0x586eb04c },
101421       { 0x27e8ed09,0x0c35c6e5,0x1819ede2,0x1e81a33c,0x56c652fa,0x278fd6c0,
101422         0x70864f11,0x19d5ac08 } },
101423     /* 6 */
101424     { { 0xd2b533d5,0x62577734,0xa1bdddc0,0x673b8af6,0xa79ec293,0x577e7c9a,
101425         0xc3b266b1,0xbb6de651 },
101426       { 0xb65259b3,0xe7e9303a,0xd03a7480,0xd6a0afd3,0x9b3cfc27,0xc5ac83d1,
101427         0x5d18b99b,0x60b4619a } },
101428     /* 7 */
101429     { { 0x1ae5aa1c,0xbd6a38e1,0x49e73658,0xb8b7652b,0xee5f87ed,0x0b130014,
101430         0xaeebffcd,0x9d0f27b2 },
101431       { 0x7a730a55,0xca924631,0xddbbc83a,0x9c955b2f,0xac019a71,0x07c1dfe0,
101432         0x356ec48d,0x244a566d } },
101433     /* 8 */
101434     { { 0xf4f8b16a,0x56f8410e,0xc47b266a,0x97241afe,0x6d9c87c1,0x0a406b8e,
101435         0xcd42ab1b,0x803f3e02 },
101436       { 0x04dbec69,0x7f0309a8,0x3bbad05f,0xa83b85f7,0xad8e197f,0xc6097273,
101437         0x5067adc1,0xc097440e } },
101438     /* 9 */
101439     { { 0xc379ab34,0x846a56f2,0x841df8d1,0xa8ee068b,0x176c68ef,0x20314459,
101440         0x915f1f30,0xf1af32d5 },
101441       { 0x5d75bd50,0x99c37531,0xf72f67bc,0x837cffba,0x48d7723f,0x0613a418,
101442         0xe2d41c8b,0x23d0f130 } },
101443     /* 10 */
101444     { { 0xd5be5a2b,0xed93e225,0x5934f3c6,0x6fe79983,0x22626ffc,0x43140926,
101445         0x7990216a,0x50bbb4d9 },
101446       { 0xe57ec63e,0x378191c6,0x181dcdb2,0x65422c40,0x0236e0f6,0x41a8099b,
101447         0x01fe49c3,0x2b100118 } },
101448     /* 11 */
101449     { { 0x9b391593,0xfc68b5c5,0x598270fc,0xc385f5a2,0xd19adcbb,0x7144f3aa,
101450         0x83fbae0c,0xdd558999 },
101451       { 0x74b82ff4,0x93b88b8e,0x71e734c9,0xd2e03c40,0x43c0322a,0x9a7a9eaf,
101452         0x149d6041,0xe6e4c551 } },
101453     /* 12 */
101454     { { 0x80ec21fe,0x5fe14bfe,0xc255be82,0xf6ce116a,0x2f4a5d67,0x98bc5a07,
101455         0xdb7e63af,0xfad27148 },
101456       { 0x29ab05b3,0x90c0b6ac,0x4e251ae6,0x37a9a83c,0xc2aade7d,0x0a7dc875,
101457         0x9f0e1a84,0x77387de3 } },
101458     /* 13 */
101459     { { 0xa56c0dd7,0x1e9ecc49,0x46086c74,0xa5cffcd8,0xf505aece,0x8f7a1408,
101460         0xbef0c47e,0xb37b85c0 },
101461       { 0xcc0e6a8f,0x3596b6e4,0x6b388f23,0xfd6d4bbf,0xc39cef4e,0xaba453fa,
101462         0xf9f628d5,0x9c135ac8 } },
101463     /* 14 */
101464     { { 0x95c8f8be,0x0a1c7294,0x3bf362bf,0x2961c480,0xdf63d4ac,0x9e418403,
101465         0x91ece900,0xc109f9cb },
101466       { 0x58945705,0xc2d095d0,0xddeb85c0,0xb9083d96,0x7a40449b,0x84692b8d,
101467         0x2eee1ee1,0x9bc3344f } },
101468     /* 15 */
101469     { { 0x42913074,0x0d5ae356,0x48a542b1,0x55491b27,0xb310732a,0x469ca665,
101470         0x5f1a4cc1,0x29591d52 },
101471       { 0xb84f983f,0xe76f5b6b,0x9f5f84e1,0xbe7eef41,0x80baa189,0x1200d496,
101472         0x18ef332c,0x6376551f } },
101473 };
101474 
101475 /* Multiply the base point of P256 by the scalar and return the result.
101476  * If map is true then convert result to affine coordinates.
101477  *
101478  * Stripe implementation.
101479  * Pre-generated: 2^0, 2^64, ...
101480  * Pre-generated: products of all combinations of above.
101481  * 4 doubles and adds (with qz=1)
101482  *
101483  * r     Resulting point.
101484  * k     Scalar to multiply by.
101485  * map   Indicates whether to convert result to affine.
101486  * ct    Constant time required.
101487  * heap  Heap to use for allocation.
101488  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
101489  */
sp_256_ecc_mulmod_base_8(sp_point_256 * r,const sp_digit * k,int map,int ct,void * heap)101490 static int sp_256_ecc_mulmod_base_8(sp_point_256* r, const sp_digit* k,
101491         int map, int ct, void* heap)
101492 {
101493     return sp_256_ecc_mulmod_stripe_8(r, &p256_base, p256_table,
101494                                       k, map, ct, heap);
101495 }
101496 
101497 #else
101498 /* Striping precomputation table.
101499  * 8 points combined into a table of 256 points.
101500  * Distance of 32 between points.
101501  */
101502 static const sp_table_entry_256 p256_table[256] = {
101503     /* 0 */
101504     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
101505       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
101506     /* 1 */
101507     { { 0x18a9143c,0x79e730d4,0x5fedb601,0x75ba95fc,0x77622510,0x79fb732b,
101508         0xa53755c6,0x18905f76 },
101509       { 0xce95560a,0xddf25357,0xba19e45c,0x8b4ab8e4,0xdd21f325,0xd2e88688,
101510         0x25885d85,0x8571ff18 } },
101511     /* 2 */
101512     { { 0x4147519a,0x20288602,0x26b372f0,0xd0981eac,0xa785ebc8,0xa9d4a7ca,
101513         0xdbdf58e9,0xd953c50d },
101514       { 0xfd590f8f,0x9d6361cc,0x44e6c917,0x72e9626b,0x22eb64cf,0x7fd96110,
101515         0x9eb288f3,0x863ebb7e } },
101516     /* 3 */
101517     { { 0x5cdb6485,0x7856b623,0x2f0a2f97,0x808f0ea2,0x4f7e300b,0x3e68d954,
101518         0xb5ff80a0,0x00076055 },
101519       { 0x838d2010,0x7634eb9b,0x3243708a,0x54014fbb,0x842a6606,0xe0e47d39,
101520         0x34373ee0,0x83087761 } },
101521     /* 4 */
101522     { { 0x16a0d2bb,0x4f922fc5,0x1a623499,0x0d5cc16c,0x57c62c8b,0x9241cf3a,
101523         0xfd1b667f,0x2f5e6961 },
101524       { 0xf5a01797,0x5c15c70b,0x60956192,0x3d20b44d,0x071fdb52,0x04911b37,
101525         0x8d6f0f7b,0xf648f916 } },
101526     /* 5 */
101527     { { 0xe137bbbc,0x9e566847,0x8a6a0bec,0xe434469e,0x79d73463,0xb1c42761,
101528         0x133d0015,0x5abe0285 },
101529       { 0xc04c7dab,0x92aa837c,0x43260c07,0x573d9f4c,0x78e6cc37,0x0c931562,
101530         0x6b6f7383,0x94bb725b } },
101531     /* 6 */
101532     { { 0x720f141c,0xbbf9b48f,0x2df5bc74,0x6199b3cd,0x411045c4,0xdc3f6129,
101533         0x2f7dc4ef,0xcdd6bbcb },
101534       { 0xeaf436fd,0xcca6700b,0xb99326be,0x6f647f6d,0x014f2522,0x0c0fa792,
101535         0x4bdae5f6,0xa361bebd } },
101536     /* 7 */
101537     { { 0x597c13c7,0x28aa2558,0x50b7c3e1,0xc38d635f,0xf3c09d1d,0x07039aec,
101538         0xc4b5292c,0xba12ca09 },
101539       { 0x59f91dfd,0x9e408fa4,0xceea07fb,0x3af43b66,0x9d780b29,0x1eceb089,
101540         0x701fef4b,0x53ebb99d } },
101541     /* 8 */
101542     { { 0xb0e63d34,0x4fe7ee31,0xa9e54fab,0xf4600572,0xd5e7b5a4,0xc0493334,
101543         0x06d54831,0x8589fb92 },
101544       { 0x6583553a,0xaa70f5cc,0xe25649e5,0x0879094a,0x10044652,0xcc904507,
101545         0x02541c4f,0xebb0696d } },
101546     /* 9 */
101547     { { 0xac1647c5,0x4616ca15,0xc4cf5799,0xb8127d47,0x764dfbac,0xdc666aa3,
101548         0xd1b27da3,0xeb2820cb },
101549       { 0x6a87e008,0x9406f8d8,0x922378f3,0xd87dfa9d,0x80ccecb2,0x56ed2e42,
101550         0x55a7da1d,0x1f28289b } },
101551     /* 10 */
101552     { { 0x3b89da99,0xabbaa0c0,0xb8284022,0xa6f2d79e,0xb81c05e8,0x27847862,
101553         0x05e54d63,0x337a4b59 },
101554       { 0x21f7794a,0x3c67500d,0x7d6d7f61,0x207005b7,0x04cfd6e8,0x0a5a3781,
101555         0xf4c2fbd6,0x0d65e0d5 } },
101556     /* 11 */
101557     { { 0xb5275d38,0xd9d09bbe,0x0be0a358,0x4268a745,0x973eb265,0xf0762ff4,
101558         0x52f4a232,0xc23da242 },
101559       { 0x0b94520c,0x5da1b84f,0xb05bd78e,0x09666763,0x94d29ea1,0x3a4dcb86,
101560         0xc790cff1,0x19de3b8c } },
101561     /* 12 */
101562     { { 0x26c5fe04,0x183a716c,0x3bba1bdb,0x3b28de0b,0xa4cb712c,0x7432c586,
101563         0x91fccbfd,0xe34dcbd4 },
101564       { 0xaaa58403,0xb408d46b,0x82e97a53,0x9a697486,0x36aaa8af,0x9e390127,
101565         0x7b4e0f7f,0xe7641f44 } },
101566     /* 13 */
101567     { { 0xdf64ba59,0x7d753941,0x0b0242fc,0xd33f10ec,0xa1581859,0x4f06dfc6,
101568         0x052a57bf,0x4a12df57 },
101569       { 0x9439dbd0,0xbfa6338f,0xbde53e1f,0xd3c24bd4,0x21f1b314,0xfd5e4ffa,
101570         0xbb5bea46,0x6af5aa93 } },
101571     /* 14 */
101572     { { 0x10c91999,0xda10b699,0x2a580491,0x0a24b440,0xb8cc2090,0x3e0094b4,
101573         0x66a44013,0x5fe3475a },
101574       { 0xf93e7b4b,0xb0f8cabd,0x7c23f91a,0x292b501a,0xcd1e6263,0x42e889ae,
101575         0xecfea916,0xb544e308 } },
101576     /* 15 */
101577     { { 0x16ddfdce,0x6478c6e9,0xf89179e6,0x2c329166,0x4d4e67e1,0x4e8d6e76,
101578         0xa6b0c20b,0xe0b6b2bd },
101579       { 0xbb7efb57,0x0d312df2,0x790c4007,0x1aac0dde,0x679bc944,0xf90336ad,
101580         0x25a63774,0x71c023de } },
101581     /* 16 */
101582     { { 0xbfe20925,0x62a8c244,0x8fdce867,0x91c19ac3,0xdd387063,0x5a96a5d5,
101583         0x21d324f6,0x61d587d4 },
101584       { 0xa37173ea,0xe87673a2,0x53778b65,0x23848008,0x05bab43e,0x10f8441e,
101585         0x4621efbe,0xfa11fe12 } },
101586     /* 17 */
101587     { { 0x2cb19ffd,0x1c891f2b,0xb1923c23,0x01ba8d5b,0x8ac5ca8e,0xb6d03d67,
101588         0x1f13bedc,0x586eb04c },
101589       { 0x27e8ed09,0x0c35c6e5,0x1819ede2,0x1e81a33c,0x56c652fa,0x278fd6c0,
101590         0x70864f11,0x19d5ac08 } },
101591     /* 18 */
101592     { { 0x309a4e1f,0x1e99f581,0xe9270074,0xab7de71b,0xefd28d20,0x26a5ef0b,
101593         0x7f9c563f,0xe7c0073f },
101594       { 0x0ef59f76,0x1f6d663a,0x20fcb050,0x669b3b54,0x7a6602d4,0xc08c1f7a,
101595         0xc65b3c0a,0xe08504fe } },
101596     /* 19 */
101597     { { 0xa031b3ca,0xf098f68d,0xe6da6d66,0x6d1cab9e,0x94f246e8,0x5bfd81fa,
101598         0x5b0996b4,0x78f01882 },
101599       { 0x3a25787f,0xb7eefde4,0x1dccac9b,0x8016f80d,0xb35bfc36,0x0cea4877,
101600         0x7e94747a,0x43a773b8 } },
101601     /* 20 */
101602     { { 0xd2b533d5,0x62577734,0xa1bdddc0,0x673b8af6,0xa79ec293,0x577e7c9a,
101603         0xc3b266b1,0xbb6de651 },
101604       { 0xb65259b3,0xe7e9303a,0xd03a7480,0xd6a0afd3,0x9b3cfc27,0xc5ac83d1,
101605         0x5d18b99b,0x60b4619a } },
101606     /* 21 */
101607     { { 0x1ae5aa1c,0xbd6a38e1,0x49e73658,0xb8b7652b,0xee5f87ed,0x0b130014,
101608         0xaeebffcd,0x9d0f27b2 },
101609       { 0x7a730a55,0xca924631,0xddbbc83a,0x9c955b2f,0xac019a71,0x07c1dfe0,
101610         0x356ec48d,0x244a566d } },
101611     /* 22 */
101612     { { 0xeacf1f96,0x6db0394a,0x024c271c,0x9f2122a9,0x82cbd3b9,0x2626ac1b,
101613         0x3581ef69,0x45e58c87 },
101614       { 0xa38f9dbc,0xd3ff479d,0xe888a040,0xa8aaf146,0x46e0bed7,0x945adfb2,
101615         0xc1e4b7a4,0xc040e21c } },
101616     /* 23 */
101617     { { 0x6f8117b6,0x847af000,0x73a35433,0x651969ff,0x1d9475eb,0x482b3576,
101618         0x682c6ec7,0x1cdf5c97 },
101619       { 0x11f04839,0x7db775b4,0x48de1698,0x7dbeacf4,0xb70b3219,0xb2921dd1,
101620         0xa92dff3d,0x046755f8 } },
101621     /* 24 */
101622     { { 0xbce8ffcd,0xcc8ac5d2,0x2fe61a82,0x0d53c48b,0x7202d6c7,0xf6f16172,
101623         0x3b83a5f3,0x046e5e11 },
101624       { 0xd8007f01,0xe7b8ff64,0x5af43183,0x7fb1ef12,0x35e1a03c,0x045c5ea6,
101625         0x303d005b,0x6e0106c3 } },
101626     /* 25 */
101627     { { 0x88dd73b1,0x48c73584,0x995ed0d9,0x7670708f,0xc56a2ab7,0x38385ea8,
101628         0xe901cf1f,0x442594ed },
101629       { 0x12d4b65b,0xf8faa2c9,0x96c90c37,0x94c2343b,0x5e978d1f,0xd326e4a1,
101630         0x4c2ee68e,0xa796fa51 } },
101631     /* 26 */
101632     { { 0x823addd7,0x359fb604,0xe56693b3,0x9e2a6183,0x3cbf3c80,0xf885b78e,
101633         0xc69766e9,0xe4ad2da9 },
101634       { 0x8e048a61,0x357f7f42,0xc092d9a0,0x082d198c,0xc03ed8ef,0xfc3a1af4,
101635         0xc37b5143,0xc5e94046 } },
101636     /* 27 */
101637     { { 0x2be75f9e,0x476a538c,0xcb123a78,0x6fd1a9e8,0xb109c04b,0xd85e4df0,
101638         0xdb464747,0x63283daf },
101639       { 0xbaf2df15,0xce728cf7,0x0ad9a7f4,0xe592c455,0xe834bcc3,0xfab226ad,
101640         0x1981a938,0x68bd19ab } },
101641     /* 28 */
101642     { { 0x1887d659,0xc08ead51,0xb359305a,0x3374d5f4,0xcfe74fe3,0x96986981,
101643         0x3c6fdfd6,0x495292f5 },
101644       { 0x1acec896,0x4a878c9e,0xec5b4484,0xd964b210,0x664d60a7,0x6696f7e2,
101645         0x26036837,0x0ec7530d } },
101646     /* 29 */
101647     { { 0xad2687bb,0x2da13a05,0xf32e21fa,0xa1f83b6a,0x1dd4607b,0x390f5ef5,
101648         0x64863f0b,0x0f6207a6 },
101649       { 0x0f138233,0xbd67e3bb,0x272aa718,0xdd66b96c,0x26ec88ae,0x8ed00407,
101650         0x08ed6dcf,0xff0db072 } },
101651     /* 30 */
101652     { { 0x4c95d553,0x749fa101,0x5d680a8a,0xa44052fd,0xff3b566f,0x183b4317,
101653         0x88740ea3,0x313b513c },
101654       { 0x08d11549,0xb402e2ac,0xb4dee21c,0x071ee10b,0x47f2320e,0x26b987dd,
101655         0x86f19f81,0x2d3abcf9 } },
101656     /* 31 */
101657     { { 0x815581a2,0x4c288501,0x632211af,0x9a0a6d56,0x0cab2e99,0x19ba7a0f,
101658         0xded98cdf,0xc036fa10 },
101659       { 0xc1fbd009,0x29ae08ba,0x06d15816,0x0b68b190,0x9b9e0d8f,0xc2eb3277,
101660         0xb6d40194,0xa6b2a2c4 } },
101661     /* 32 */
101662     { { 0x6d3549cf,0xd433e50f,0xfacd665e,0x6f33696f,0xce11fcb4,0x695bfdac,
101663         0xaf7c9860,0x810ee252 },
101664       { 0x7159bb2c,0x65450fe1,0x758b357b,0xf7dfbebe,0xd69fea72,0x2b057e74,
101665         0x92731745,0xd485717a } },
101666     /* 33 */
101667     { { 0xf0cb5a98,0x11741a8a,0x1f3110bf,0xd3da8f93,0xab382adf,0x1994e2cb,
101668         0x2f9a604e,0x6a6045a7 },
101669       { 0xa2b2411d,0x170c0d3f,0x510e96e0,0xbe0eb83e,0x8865b3cc,0x3bcc9f73,
101670         0xf9e15790,0xd3e45cfa } },
101671     /* 34 */
101672     { { 0xe83f7669,0xce1f69bb,0x72877d6b,0x09f8ae82,0x3244278d,0x9548ae54,
101673         0xe3c2c19c,0x207755de },
101674       { 0x6fef1945,0x87bd61d9,0xb12d28c3,0x18813cef,0x72df64aa,0x9fbcd1d6,
101675         0x7154b00d,0x48dc5ee5 } },
101676     /* 35 */
101677     { { 0xf7e5a199,0x123790bf,0x989ccbb7,0xe0efb8cf,0x0a519c79,0xc27a2bfe,
101678         0xdff6f445,0xf2fb0aed },
101679       { 0xf0b5025f,0x41c09575,0x40fa9f22,0x550543d7,0x380bfbd0,0x8fa3c8ad,
101680         0xdb28d525,0xa13e9015 } },
101681     /* 36 */
101682     { { 0xa2b65cbc,0xf9f7a350,0x2a464226,0x0b04b972,0xe23f07a1,0x265ce241,
101683         0x1497526f,0x2bf0d6b0 },
101684       { 0x4b216fb7,0xd3d4dd3f,0xfbdda26a,0xf7d7b867,0x6708505c,0xaeb7b83f,
101685         0x162fe89f,0x42a94a5a } },
101686     /* 37 */
101687     { { 0xeaadf191,0x5846ad0b,0x25a268d7,0x0f8a4890,0x494dc1f6,0xe8603050,
101688         0xc65ede3d,0x2c2dd969 },
101689       { 0x93849c17,0x6d02171d,0x1da250dd,0x460488ba,0x3c3a5485,0x4810c706,
101690         0x42c56dbc,0xf437fa1f } },
101691     /* 38 */
101692     { { 0x4a0f7dab,0x6aa0d714,0x1776e9ac,0x0f049793,0xf5f39786,0x52c0a050,
101693         0x54707aa8,0xaaf45b33 },
101694       { 0xc18d364a,0x85e37c33,0x3e497165,0xd40b9b06,0x15ec5444,0xf4171681,
101695         0xf4f272bc,0xcdf6310d } },
101696     /* 39 */
101697     { { 0x8ea8b7ef,0x7473c623,0x85bc2287,0x08e93518,0x2bda8e34,0x41956772,
101698         0xda9e2ff2,0xf0d008ba },
101699       { 0x2414d3b1,0x2912671d,0xb019ea76,0xb3754985,0x453bcbdb,0x5c61b96d,
101700         0xca887b8b,0x5bd5c2f5 } },
101701     /* 40 */
101702     { { 0xf49a3154,0xef0f469e,0x6e2b2e9a,0x3e85a595,0xaa924a9c,0x45aaec1e,
101703         0xa09e4719,0xaa12dfc8 },
101704       { 0x4df69f1d,0x26f27227,0xa2ff5e73,0xe0e4c82c,0xb7a9dd44,0xb9d8ce73,
101705         0xe48ca901,0x6c036e73 } },
101706     /* 41 */
101707     { { 0x0f6e3138,0x5cfae12a,0x25ad345a,0x6966ef00,0x45672bc5,0x8993c64b,
101708         0x96afbe24,0x292ff658 },
101709       { 0x5e213402,0xd5250d44,0x4392c9fe,0xf6580e27,0xda1c72e8,0x097b397f,
101710         0x311b7276,0x644e0c90 } },
101711     /* 42 */
101712     { { 0xa47153f0,0xe1e421e1,0x920418c9,0xb86c3b79,0x705d7672,0x93bdce87,
101713         0xcab79a77,0xf25ae793 },
101714       { 0x6d869d0c,0x1f3194a3,0x4986c264,0x9d55c882,0x096e945e,0x49fb5ea3,
101715         0x13db0a3e,0x39b8e653 } },
101716     /* 43 */
101717     { { 0xb6fd2e59,0x37754200,0x9255c98f,0x35e2c066,0x0e2a5739,0xd9dab21a,
101718         0x0f19db06,0x39122f2f },
101719       { 0x03cad53c,0xcfbce1e0,0xe65c17e3,0x225b2c0f,0x9aa13877,0x72baf1d2,
101720         0xce80ff8d,0x8de80af8 } },
101721     /* 44 */
101722     { { 0x207bbb76,0xafbea8d9,0x21782758,0x921c7e7c,0x1c0436b1,0xdfa2b74b,
101723         0x2e368c04,0x87194906 },
101724       { 0xa3993df5,0xb5f928bb,0xf3b3d26a,0x639d75b5,0x85b55050,0x011aa78a,
101725         0x5b74fde1,0xfc315e6a } },
101726     /* 45 */
101727     { { 0xe8d6ecfa,0x561fd41a,0x1aec7f86,0x5f8c44f6,0x4924741d,0x98452a7b,
101728         0xee389088,0xe6d4a7ad },
101729       { 0x4593c75d,0x60552ed1,0xdd271162,0x70a70da4,0x7ba2c7db,0xd2aede93,
101730         0x9be2ae57,0x35dfaf9a } },
101731     /* 46 */
101732     { { 0xaa736636,0x6b956fcd,0xae2cab7e,0x09f51d97,0x0f349966,0xfb10bf41,
101733         0x1c830d2b,0x1da5c7d7 },
101734       { 0x3cce6825,0x5c41e483,0xf9573c3b,0x15ad118f,0xf23036b8,0xa28552c7,
101735         0xdbf4b9d6,0x7077c0fd } },
101736     /* 47 */
101737     { { 0x46b9661c,0xbf63ff8d,0x0d2cfd71,0xa1dfd36b,0xa847f8f7,0x0373e140,
101738         0xe50efe44,0x53a8632e },
101739       { 0x696d8051,0x0976ff68,0xc74f468a,0xdaec0c95,0x5e4e26bd,0x62994dc3,
101740         0x34e1fcc1,0x028ca76d } },
101741     /* 48 */
101742     { { 0xfc9877ee,0xd11d47dc,0x801d0002,0xc8b36210,0x54c260b6,0xd002c117,
101743         0x6962f046,0x04c17cd8 },
101744       { 0xb0daddf5,0x6d9bd094,0x24ce55c0,0xbea23575,0x72da03b5,0x663356e6,
101745         0xfed97474,0xf7ba4de9 } },
101746     /* 49 */
101747     { { 0xebe1263f,0xd0dbfa34,0x71ae7ce6,0x55763735,0x82a6f523,0xd2440553,
101748         0x52131c41,0xe31f9600 },
101749       { 0xea6b6ec6,0xd1bb9216,0x73c2fc44,0x37a1d12e,0x89d0a294,0xc10e7eac,
101750         0xce34d47b,0xaa3a6259 } },
101751     /* 50 */
101752     { { 0x36f3dcd3,0xfbcf9df5,0xd2bf7360,0x6ceded50,0xdf504f5b,0x491710fa,
101753         0x7e79daee,0x2398dd62 },
101754       { 0x6d09569e,0xcf4705a3,0x5149f769,0xea0619bb,0x35f6034c,0xff9c0377,
101755         0x1c046210,0x5717f5b2 } },
101756     /* 51 */
101757     { { 0x21dd895e,0x9fe229c9,0x40c28451,0x8e518500,0x1d637ecd,0xfa13d239,
101758         0x0e3c28de,0x660a2c56 },
101759       { 0xd67fcbd0,0x9cca88ae,0x0ea9f096,0xc8472478,0x72e92b4d,0x32b2f481,
101760         0x4f522453,0x624ee54c } },
101761     /* 52 */
101762     { { 0xd897eccc,0x09549ce4,0x3f9880aa,0x4d49d1d9,0x043a7c20,0x723c2423,
101763         0x92bdfbc0,0x4f392afb },
101764       { 0x7de44fd9,0x6969f8fa,0x57b32156,0xb66cfbe4,0x368ebc3c,0xdb2fa803,
101765         0xccdb399c,0x8a3e7977 } },
101766     /* 53 */
101767     { { 0x06c4b125,0xdde1881f,0xf6e3ca8c,0xae34e300,0x5c7a13e9,0xef6999de,
101768         0x70c24404,0x3888d023 },
101769       { 0x44f91081,0x76280356,0x5f015504,0x3d9fcf61,0x632cd36e,0x1827edc8,
101770         0x18102336,0xa5e62e47 } },
101771     /* 54 */
101772     { { 0x2facd6c8,0x1a825ee3,0x54bcbc66,0x699c6354,0x98df9931,0x0ce3edf7,
101773         0x466a5adc,0x2c4768e6 },
101774       { 0x90a64bc9,0xb346ff8c,0xe4779f5c,0x630a6020,0xbc05e884,0xd949d064,
101775         0xf9e652a0,0x7b5e6441 } },
101776     /* 55 */
101777     { { 0x1d28444a,0x2169422c,0xbe136a39,0xe996c5d8,0xfb0c7fce,0x2387afe5,
101778         0x0c8d744a,0xb8af73cb },
101779       { 0x338b86fd,0x5fde83aa,0xa58a5cff,0xfee3f158,0x20ac9433,0xc9ee8f6f,
101780         0x7f3f0895,0xa036395f } },
101781     /* 56 */
101782     { { 0xa10f7770,0x8c73c6bb,0xa12a0e24,0xa6f16d81,0x51bc2b9f,0x100df682,
101783         0x875fb533,0x4be36b01 },
101784       { 0x9fb56dbb,0x9226086e,0x07e7a4f8,0x306fef8b,0x66d52f20,0xeeaccc05,
101785         0x1bdc00c0,0x8cbc9a87 } },
101786     /* 57 */
101787     { { 0xc0dac4ab,0xe131895c,0x712ff112,0xa874a440,0x6a1cee57,0x6332ae7c,
101788         0x0c0835f8,0x44e7553e },
101789       { 0x7734002d,0x6d503fff,0x0b34425c,0x9d35cb8b,0x0e8738b5,0x95f70276,
101790         0x5eb8fc18,0x470a683a } },
101791     /* 58 */
101792     { { 0x90513482,0x81b761dc,0x01e9276a,0x0287202a,0x0ce73083,0xcda441ee,
101793         0xc63dc6ef,0x16410690 },
101794       { 0x6d06a2ed,0xf5034a06,0x189b100b,0xdd4d7745,0xab8218c9,0xd914ae72,
101795         0x7abcbb4f,0xd73479fd } },
101796     /* 59 */
101797     { { 0x5ad4c6e5,0x7edefb16,0x5b06d04d,0x262cf08f,0x8575cb14,0x12ed5bb1,
101798         0x0771666b,0x816469e3 },
101799       { 0x561e291e,0xd7ab9d79,0xc1de1661,0xeb9daf22,0x135e0513,0xf49827eb,
101800         0xf0dd3f9c,0x0a36dd23 } },
101801     /* 60 */
101802     { { 0x41d5533c,0x098d32c7,0x8684628f,0x7c5f5a9e,0xe349bd11,0x39a228ad,
101803         0xfdbab118,0xe331dfd6 },
101804       { 0x6bcc6ed8,0x5100ab68,0xef7a260e,0x7160c3bd,0xbce850d7,0x9063d9a7,
101805         0x492e3389,0xd3b4782a } },
101806     /* 61 */
101807     { { 0xf3821f90,0xa149b6e8,0x66eb7aad,0x92edd9ed,0x1a013116,0x0bb66953,
101808         0x4c86a5bd,0x7281275a },
101809       { 0xd3ff47e5,0x503858f7,0x61016441,0x5e1616bc,0x7dfd9bb1,0x62b0f11a,
101810         0xce145059,0x2c062e7e } },
101811     /* 62 */
101812     { { 0x0159ac2e,0xa76f996f,0xcbdb2713,0x281e7736,0x08e46047,0x2ad6d288,
101813         0x2c4e7ef1,0x282a35f9 },
101814       { 0xc0ce5cd2,0x9c354b1e,0x1379c229,0xcf99efc9,0x3e82c11e,0x992caf38,
101815         0x554d2abd,0xc71cd513 } },
101816     /* 63 */
101817     { { 0x09b578f4,0x4885de9c,0xe3affa7a,0x1884e258,0x59182f1f,0x8f76b1b7,
101818         0xcf47f3a3,0xc50f6740 },
101819       { 0x374b68ea,0xa9c4adf3,0x69965fe2,0xa406f323,0x85a53050,0x2f86a222,
101820         0x212958dc,0xb9ecb3a7 } },
101821     /* 64 */
101822     { { 0xf4f8b16a,0x56f8410e,0xc47b266a,0x97241afe,0x6d9c87c1,0x0a406b8e,
101823         0xcd42ab1b,0x803f3e02 },
101824       { 0x04dbec69,0x7f0309a8,0x3bbad05f,0xa83b85f7,0xad8e197f,0xc6097273,
101825         0x5067adc1,0xc097440e } },
101826     /* 65 */
101827     { { 0xc379ab34,0x846a56f2,0x841df8d1,0xa8ee068b,0x176c68ef,0x20314459,
101828         0x915f1f30,0xf1af32d5 },
101829       { 0x5d75bd50,0x99c37531,0xf72f67bc,0x837cffba,0x48d7723f,0x0613a418,
101830         0xe2d41c8b,0x23d0f130 } },
101831     /* 66 */
101832     { { 0xf41500d9,0x857ab6ed,0xfcbeada8,0x0d890ae5,0x89725951,0x52fe8648,
101833         0xc0a3fadd,0xb0288dd6 },
101834       { 0x650bcb08,0x85320f30,0x695d6e16,0x71af6313,0xb989aa76,0x31f520a7,
101835         0xf408c8d2,0xffd3724f } },
101836     /* 67 */
101837     { { 0xb458e6cb,0x53968e64,0x317a5d28,0x992dad20,0x7aa75f56,0x3814ae0b,
101838         0xd78c26df,0xf5590f4a },
101839       { 0xcf0ba55a,0x0fc24bd3,0x0c778bae,0x0fc4724a,0x683b674a,0x1ce9864f,
101840         0xf6f74a20,0x18d6da54 } },
101841     /* 68 */
101842     { { 0xd5be5a2b,0xed93e225,0x5934f3c6,0x6fe79983,0x22626ffc,0x43140926,
101843         0x7990216a,0x50bbb4d9 },
101844       { 0xe57ec63e,0x378191c6,0x181dcdb2,0x65422c40,0x0236e0f6,0x41a8099b,
101845         0x01fe49c3,0x2b100118 } },
101846     /* 69 */
101847     { { 0x9b391593,0xfc68b5c5,0x598270fc,0xc385f5a2,0xd19adcbb,0x7144f3aa,
101848         0x83fbae0c,0xdd558999 },
101849       { 0x74b82ff4,0x93b88b8e,0x71e734c9,0xd2e03c40,0x43c0322a,0x9a7a9eaf,
101850         0x149d6041,0xe6e4c551 } },
101851     /* 70 */
101852     { { 0x1e9af288,0x55f655bb,0xf7ada931,0x647e1a64,0xcb2820e5,0x43697e4b,
101853         0x07ed56ff,0x51e00db1 },
101854       { 0x771c327e,0x43d169b8,0x4a96c2ad,0x29cdb20b,0x3deb4779,0xc07d51f5,
101855         0x49829177,0xe22f4241 } },
101856     /* 71 */
101857     { { 0x635f1abb,0xcd45e8f4,0x68538874,0x7edc0cb5,0xb5a8034d,0xc9472c1f,
101858         0x52dc48c9,0xf709373d },
101859       { 0xa8af30d6,0x401966bb,0xf137b69c,0x95bf5f4a,0x9361c47e,0x3966162a,
101860         0xe7275b11,0xbd52d288 } },
101861     /* 72 */
101862     { { 0x9c5fa877,0xab155c7a,0x7d3a3d48,0x17dad672,0x73d189d8,0x43f43f9e,
101863         0xc8aa77a6,0xa0d0f8e4 },
101864       { 0xcc94f92d,0x0bbeafd8,0x0c4ddb3a,0xd818c8be,0xb82eba14,0x22cc65f8,
101865         0x946d6a00,0xa56c78c7 } },
101866     /* 73 */
101867     { { 0x0dd09529,0x2962391b,0x3daddfcf,0x803e0ea6,0x5b5bf481,0x2c77351f,
101868         0x731a367a,0xd8befdf8 },
101869       { 0xfc0157f4,0xab919d42,0xfec8e650,0xf51caed7,0x02d48b0a,0xcdf9cb40,
101870         0xce9f6478,0x854a68a5 } },
101871     /* 74 */
101872     { { 0x63506ea5,0xdc35f67b,0xa4fe0d66,0x9286c489,0xfe95cd4d,0x3f101d3b,
101873         0x98846a95,0x5cacea0b },
101874       { 0x9ceac44d,0xa90df60c,0x354d1c3a,0x3db29af4,0xad5dbabe,0x08dd3de8,
101875         0x35e4efa9,0xe4982d12 } },
101876     /* 75 */
101877     { { 0xc34cd55e,0x23104a22,0x2680d132,0x58695bb3,0x1fa1d943,0xfb345afa,
101878         0x16b20499,0x8046b7f6 },
101879       { 0x38e7d098,0xb533581e,0xf46f0b70,0xd7f61e8d,0x44cb78c4,0x30dea9ea,
101880         0x9082af55,0xeb17ca7b } },
101881     /* 76 */
101882     { { 0x76a145b9,0x1751b598,0xc1bc71ec,0xa5cf6b0f,0x392715bb,0xd3e03565,
101883         0xfab5e131,0x097b00ba },
101884       { 0x565f69e1,0xaa66c8e9,0xb5be5199,0x77e8f75a,0xda4fd984,0x6033ba11,
101885         0xafdbcc9e,0xf95c747b } },
101886     /* 77 */
101887     { { 0xbebae45e,0x558f01d3,0xc4bc6955,0xa8ebe9f0,0xdbc64fc6,0xaeb705b1,
101888         0x566ed837,0x3512601e },
101889       { 0xfa1161cd,0x9336f1e1,0x4c65ef87,0x328ab8d5,0x724f21e5,0x4757eee2,
101890         0x6068ab6b,0x0ef97123 } },
101891     /* 78 */
101892     { { 0x54ca4226,0x02598cf7,0xf8642c8e,0x5eede138,0x468e1790,0x48963f74,
101893         0x3b4fbc95,0xfc16d933 },
101894       { 0xe7c800ca,0xbe96fb31,0x2678adaa,0x13806331,0x6ff3e8b5,0x3d624497,
101895         0xb95d7a17,0x14ca4af1 } },
101896     /* 79 */
101897     { { 0xbd2f81d5,0x7a4771ba,0x01f7d196,0x1a5f9d69,0xcad9c907,0xd898bef7,
101898         0xf59c231d,0x4057b063 },
101899       { 0x89c05c0a,0xbffd82fe,0x1dc0df85,0xe4911c6f,0xa35a16db,0x3befccae,
101900         0xf1330b13,0x1c3b5d64 } },
101901     /* 80 */
101902     { { 0x80ec21fe,0x5fe14bfe,0xc255be82,0xf6ce116a,0x2f4a5d67,0x98bc5a07,
101903         0xdb7e63af,0xfad27148 },
101904       { 0x29ab05b3,0x90c0b6ac,0x4e251ae6,0x37a9a83c,0xc2aade7d,0x0a7dc875,
101905         0x9f0e1a84,0x77387de3 } },
101906     /* 81 */
101907     { { 0xa56c0dd7,0x1e9ecc49,0x46086c74,0xa5cffcd8,0xf505aece,0x8f7a1408,
101908         0xbef0c47e,0xb37b85c0 },
101909       { 0xcc0e6a8f,0x3596b6e4,0x6b388f23,0xfd6d4bbf,0xc39cef4e,0xaba453fa,
101910         0xf9f628d5,0x9c135ac8 } },
101911     /* 82 */
101912     { { 0x84e35743,0x32aa3202,0x85a3cdef,0x320d6ab1,0x1df19819,0xb821b176,
101913         0xc433851f,0x5721361f },
101914       { 0x71fc9168,0x1f0db36a,0x5e5c403c,0x5f98ba73,0x37bcd8f5,0xf64ca87e,
101915         0xe6bb11bd,0xdcbac3c9 } },
101916     /* 83 */
101917     { { 0x4518cbe2,0xf01d9968,0x9c9eb04e,0xd242fc18,0xe47feebf,0x727663c7,
101918         0x2d626862,0xb8c1c89e },
101919       { 0xc8e1d569,0x51a58bdd,0xb7d88cd0,0x563809c8,0xf11f31eb,0x26c27fd9,
101920         0x2f9422d4,0x5d23bbda } },
101921     /* 84 */
101922     { { 0x95c8f8be,0x0a1c7294,0x3bf362bf,0x2961c480,0xdf63d4ac,0x9e418403,
101923         0x91ece900,0xc109f9cb },
101924       { 0x58945705,0xc2d095d0,0xddeb85c0,0xb9083d96,0x7a40449b,0x84692b8d,
101925         0x2eee1ee1,0x9bc3344f } },
101926     /* 85 */
101927     { { 0x42913074,0x0d5ae356,0x48a542b1,0x55491b27,0xb310732a,0x469ca665,
101928         0x5f1a4cc1,0x29591d52 },
101929       { 0xb84f983f,0xe76f5b6b,0x9f5f84e1,0xbe7eef41,0x80baa189,0x1200d496,
101930         0x18ef332c,0x6376551f } },
101931     /* 86 */
101932     { { 0x562976cc,0xbda5f14e,0x0ef12c38,0x22bca3e6,0x6cca9852,0xbbfa3064,
101933         0x08e2987a,0xbdb79dc8 },
101934       { 0xcb06a772,0xfd2cb5c9,0xfe536dce,0x38f475aa,0x7c2b5db8,0xc2a3e022,
101935         0xadd3c14a,0x8ee86001 } },
101936     /* 87 */
101937     { { 0xa4ade873,0xcbe96981,0xc4fba48c,0x7ee9aa4d,0x5a054ba5,0x2cee2899,
101938         0x6f77aa4b,0x92e51d7a },
101939       { 0x7190a34d,0x948bafa8,0xf6bd1ed1,0xd698f75b,0x0caf1144,0xd00ee6e3,
101940         0x0a56aaaa,0x5182f86f } },
101941     /* 88 */
101942     { { 0x7a4cc99c,0xfba6212c,0x3e6d9ca1,0xff609b68,0x5ac98c5a,0x5dbb27cb,
101943         0x4073a6f2,0x91dcab5d },
101944       { 0x5f575a70,0x01b6cc3d,0x6f8d87fa,0x0cb36139,0x89981736,0x165d4e8c,
101945         0x97974f2b,0x17a0cedb } },
101946     /* 89 */
101947     { { 0x076c8d3a,0x38861e2a,0x210f924b,0x701aad39,0x13a835d9,0x94d0eae4,
101948         0x7f4cdf41,0x2e8ce36c },
101949       { 0x037a862b,0x91273dab,0x60e4c8fa,0x01ba9bb7,0x33baf2dd,0xf9645388,
101950         0x34f668f3,0xf4ccc6cb } },
101951     /* 90 */
101952     { { 0xf1f79687,0x44ef525c,0x92efa815,0x7c595495,0xa5c78d29,0xe1231741,
101953         0x9a0df3c9,0xac0db488 },
101954       { 0xdf01747f,0x86bfc711,0xef17df13,0x592b9358,0x5ccb6bb5,0xe5880e4f,
101955         0x94c974a2,0x95a64a61 } },
101956     /* 91 */
101957     { { 0xc15a4c93,0x72c1efda,0x82585141,0x40269b73,0x16cb0bad,0x6a8dfb1c,
101958         0x29210677,0x231e54ba },
101959       { 0x8ae6d2dc,0xa70df917,0x39112918,0x4d6aa63f,0x5e5b7223,0xf627726b,
101960         0xd8a731e1,0xab0be032 } },
101961     /* 92 */
101962     { { 0x8d131f2d,0x097ad0e9,0x3b04f101,0x637f09e3,0xd5e9a748,0x1ac86196,
101963         0x2cf6a679,0xf1bcc880 },
101964       { 0xe8daacb4,0x25c69140,0x60f65009,0x3c4e4055,0x477937a6,0x591cc8fc,
101965         0x5aebb271,0x85169469 } },
101966     /* 93 */
101967     { { 0xf1dcf593,0xde35c143,0xb018be3b,0x78202b29,0x9bdd9d3d,0xe9cdadc2,
101968         0xdaad55d8,0x8f67d9d2 },
101969       { 0x7481ea5f,0x84111656,0xe34c590c,0xe7d2dde9,0x05053fa8,0xffdd43f4,
101970         0xc0728b5d,0xf84572b9 } },
101971     /* 94 */
101972     { { 0x97af71c9,0x5e1a7a71,0x7a736565,0xa1449444,0x0e1d5063,0xa1b4ae07,
101973         0x616b2c19,0xedee2710 },
101974       { 0x11734121,0xb2f034f5,0x4a25e9f0,0x1cac6e55,0xa40c2ecf,0x8dc148f3,
101975         0x44ebd7f4,0x9fd27e9b } },
101976     /* 95 */
101977     { { 0xf6e2cb16,0x3cc7658a,0xfe5919b6,0xe3eb7d2c,0x168d5583,0x5a8c5816,
101978         0x958ff387,0xa40c2fb6 },
101979       { 0xfedcc158,0x8c9ec560,0x55f23056,0x7ad804c6,0x9a307e12,0xd9396704,
101980         0x7dc6decf,0x99bc9bb8 } },
101981     /* 96 */
101982     { { 0x927dafc6,0x84a9521d,0x5c09cd19,0x52c1fb69,0xf9366dde,0x9d9581a0,
101983         0xa16d7e64,0x9abe210b },
101984       { 0x48915220,0x480af84a,0x4dd816c6,0xfa73176a,0x1681ca5a,0xc7d53987,
101985         0x87f344b0,0x7881c257 } },
101986     /* 97 */
101987     { { 0xe0bcf3ff,0x93399b51,0x127f74f6,0x0d02cbc5,0xdd01d968,0x8fb465a2,
101988         0xa30e8940,0x15e6e319 },
101989       { 0x3e0e05f4,0x646d6e0d,0x43588404,0xfad7bddc,0xc4f850d3,0xbe61c7d1,
101990         0x191172ce,0x0e55facf } },
101991     /* 98 */
101992     { { 0xf8787564,0x7e9d9806,0x31e85ce6,0x1a331721,0xb819e8d6,0x6b0158ca,
101993         0x6fe96577,0xd73d0976 },
101994       { 0x1eb7206e,0x42483425,0xc618bb42,0xa519290f,0x5e30a520,0x5dcbb859,
101995         0x8f15a50b,0x9250a374 } },
101996     /* 99 */
101997     { { 0xbe577410,0xcaff08f8,0x5077a8c6,0xfd408a03,0xec0a63a4,0xf1f63289,
101998         0xc1cc8c0b,0x77414082 },
101999       { 0xeb0991cd,0x05a40fa6,0x49fdc296,0xc1ca0866,0xb324fd40,0x3a68a3c7,
102000         0x12eb20b9,0x8cb04f4d } },
102001     /* 100 */
102002     { { 0x6906171c,0xb1c2d055,0xb0240c3f,0x9073e9cd,0xd8906841,0xdb8e6b4f,
102003         0x47123b51,0xe4e429ef },
102004       { 0x38ec36f4,0x0b8dd53c,0xff4b6a27,0xf9d2dc01,0x879a9a48,0x5d066e07,
102005         0x3c6e6552,0x37bca2ff } },
102006     /* 101 */
102007     { { 0xdf562470,0x4cd2e3c7,0xc0964ac9,0x44f272a2,0x80c793be,0x7c6d5df9,
102008         0x3002b22a,0x59913edc },
102009       { 0x5750592a,0x7a139a83,0xe783de02,0x99e01d80,0xea05d64f,0xcf8c0375,
102010         0xb013e226,0x43786e4a } },
102011     /* 102 */
102012     { { 0x9e56b5a6,0xff32b0ed,0xd9fc68f9,0x0750d9a6,0x597846a7,0xec15e845,
102013         0xb7e79e7a,0x8638ca98 },
102014       { 0x0afc24b2,0x2f5ae096,0x4dace8f2,0x05398eaf,0xaecba78f,0x3b765dd0,
102015         0x7b3aa6f0,0x1ecdd36a } },
102016     /* 103 */
102017     { { 0x6c5ff2f3,0x5d3acd62,0x2873a978,0xa2d516c0,0xd2110d54,0xad94c9fa,
102018         0xd459f32d,0xd85d0f85 },
102019       { 0x10b11da3,0x9f700b8d,0xa78318c4,0xd2c22c30,0x9208decd,0x556988f4,
102020         0xb4ed3c62,0xa04f19c3 } },
102021     /* 104 */
102022     { { 0xed7f93bd,0x087924c8,0x392f51f6,0xcb64ac5d,0x821b71af,0x7cae330a,
102023         0x5c0950b0,0x92b2eeea },
102024       { 0x85b6e235,0x85ac4c94,0x2936c0f0,0xab2ca4a9,0xe0508891,0x80faa6b3,
102025         0x5834276c,0x1ee78221 } },
102026     /* 105 */
102027     { { 0xe63e79f7,0xa60a2e00,0xf399d906,0xf590e7b2,0x6607c09d,0x9021054a,
102028         0x57a6e150,0xf3f2ced8 },
102029       { 0xf10d9b55,0x200510f3,0xd8642648,0x9d2fcfac,0xe8bd0e7c,0xe5631aa7,
102030         0x3da3e210,0x0f56a454 } },
102031     /* 106 */
102032     { { 0x1043e0df,0x5b21bffa,0x9c007e6d,0x6c74b6cc,0xd4a8517a,0x1a656ec0,
102033         0x1969e263,0xbd8f1741 },
102034       { 0xbeb7494a,0x8a9bbb86,0x45f3b838,0x1567d46f,0xa4e5a79a,0xdf7a12a7,
102035         0x30ccfa09,0x2d1a1c35 } },
102036     /* 107 */
102037     { { 0x506508da,0x192e3813,0xa1d795a7,0x336180c4,0x7a9944b3,0xcddb5949,
102038         0xb91fba46,0xa107a65e },
102039       { 0x0f94d639,0xe6d1d1c5,0x8a58b7d7,0x8b4af375,0xbd37ca1c,0x1a7c5584,
102040         0xf87a9af2,0x183d760a } },
102041     /* 108 */
102042     { { 0x0dde59a4,0x29d69711,0x0e8bef87,0xf1ad8d07,0x4f2ebe78,0x229b4963,
102043         0xc269d754,0x1d44179d },
102044       { 0x8390d30e,0xb32dc0cf,0x0de8110c,0x0a3b2753,0x2bc0339a,0x31af1dc5,
102045         0x9606d262,0x771f9cc2 } },
102046     /* 109 */
102047     { { 0x85040739,0x99993e77,0x8026a939,0x44539db9,0xf5f8fc26,0xcf40f6f2,
102048         0x0362718e,0x64427a31 },
102049       { 0x85428aa8,0x4f4f2d87,0xebfb49a8,0x7b7adc3f,0xf23d01ac,0x201b2c6d,
102050         0x6ae90d6d,0x49d9b749 } },
102051     /* 110 */
102052     { { 0x435d1099,0xcc78d8bc,0x8e8d1a08,0x2adbcd4e,0x2cb68a41,0x02c2e2a0,
102053         0x3f605445,0x9037d81b },
102054       { 0x074c7b61,0x7cdbac27,0x57bfd72e,0xfe2031ab,0x596d5352,0x61ccec96,
102055         0x7cc0639c,0x08c3de6a } },
102056     /* 111 */
102057     { { 0xf6d552ab,0x20fdd020,0x05cd81f1,0x56baff98,0x91351291,0x06fb7c3e,
102058         0x45796b2f,0xc6909442 },
102059       { 0x41231bd1,0x17b3ae9c,0x5cc58205,0x1eac6e87,0xf9d6a122,0x208837ab,
102060         0xcafe3ac0,0x3fa3db02 } },
102061     /* 112 */
102062     { { 0x05058880,0xd75a3e65,0x643943f2,0x7da365ef,0xfab24925,0x4147861c,
102063         0xfdb808ff,0xc5c4bdb0 },
102064       { 0xb272b56b,0x73513e34,0x11b9043a,0xc8327e95,0xf8844969,0xfd8ce37d,
102065         0x46c2b6b5,0x2d56db94 } },
102066     /* 113 */
102067     { { 0xff46ac6b,0x2461782f,0x07a2e425,0xd19f7926,0x09a48de1,0xfafea3c4,
102068         0xe503ba42,0x0f56bd9d },
102069       { 0x345cda49,0x137d4ed1,0x816f299d,0x821158fc,0xaeb43402,0xe7c6a54a,
102070         0x1173b5f1,0x4003bb9d } },
102071     /* 114 */
102072     { { 0xa0803387,0x3b8e8189,0x39cbd404,0xece115f5,0xd2877f21,0x4297208d,
102073         0xa07f2f9e,0x53765522 },
102074       { 0xa8a4182d,0xa4980a21,0x3219df79,0xa2bbd07a,0x1a19a2d4,0x674d0a2e,
102075         0x6c5d4549,0x7a056f58 } },
102076     /* 115 */
102077     { { 0x9d8a2a47,0x646b2558,0xc3df2773,0x5b582948,0xabf0d539,0x51ec000e,
102078         0x7a1a2675,0x77d482f1 },
102079       { 0x87853948,0xb8a1bd95,0x6cfbffee,0xa6f817bd,0x80681e47,0xab6ec057,
102080         0x2b38b0e4,0x4115012b } },
102081     /* 116 */
102082     { { 0x6de28ced,0x3c73f0f4,0x9b13ec47,0x1d5da760,0x6e5c6392,0x61b8ce9e,
102083         0xfbea0946,0xcdf04572 },
102084       { 0x6c53c3b0,0x1cb3c58b,0x447b843c,0x97fe3c10,0x2cb9780e,0xfb2b8ae1,
102085         0x97383109,0xee703dda } },
102086     /* 117 */
102087     { { 0xff57e43a,0x34515140,0xb1b811b8,0xd44660d3,0x8f42b986,0x2b3b5dff,
102088         0xa162ce21,0x2a0ad89d },
102089       { 0x6bc277ba,0x64e4a694,0xc141c276,0xc788c954,0xcabf6274,0x141aa64c,
102090         0xac2b4659,0xd62d0b67 } },
102091     /* 118 */
102092     { { 0x2c054ac4,0x39c5d87b,0xf27df788,0x57005859,0xb18128d6,0xedf7cbf3,
102093         0x991c2426,0xb39a23f2 },
102094       { 0xf0b16ae5,0x95284a15,0xa136f51b,0x0c6a05b1,0xf2700783,0x1d63c137,
102095         0xc0674cc5,0x04ed0092 } },
102096     /* 119 */
102097     { { 0x9ae90393,0x1f4185d1,0x4a3d64e6,0x3047b429,0x9854fc14,0xae0001a6,
102098         0x0177c387,0xa0a91fc1 },
102099       { 0xae2c831e,0xff0a3f01,0x2b727e16,0xbb76ae82,0x5a3075b4,0x8f12c8a1,
102100         0x9ed20c41,0x084cf988 } },
102101     /* 120 */
102102     { { 0xfca6becf,0xd98509de,0x7dffb328,0x2fceae80,0x4778e8b9,0x5d8a15c4,
102103         0x73abf77e,0xd57955b2 },
102104       { 0x31b5d4f1,0x210da79e,0x3cfa7a1c,0xaa52f04b,0xdc27c20b,0xd4d12089,
102105         0x02d141f1,0x8e14ea42 } },
102106     /* 121 */
102107     { { 0xf2897042,0xeed50345,0x43402c4a,0x8d05331f,0xc8bdfb21,0xc8d9c194,
102108         0x2aa4d158,0x597e1a37 },
102109       { 0xcf0bd68c,0x0327ec1a,0xab024945,0x6d4be0dc,0xc9fe3e84,0x5b9c8d7a,
102110         0x199b4dea,0xca3f0236 } },
102111     /* 122 */
102112     { { 0x6170bd20,0x592a10b5,0x6d3f5de7,0x0ea897f1,0x44b2ade2,0xa3363ff1,
102113         0x309c07e4,0xbde7fd7e },
102114       { 0xb8f5432c,0x516bb6d2,0xe043444b,0x210dc1cb,0xf8f95b5a,0x3db01e6f,
102115         0x0a7dd198,0xb623ad0e } },
102116     /* 123 */
102117     { { 0x60c7b65b,0xa75bd675,0x23a4a289,0xab8c5590,0xd7b26795,0xf8220fd0,
102118         0x58ec137b,0xd6aa2e46 },
102119       { 0x5138bb85,0x10abc00b,0xd833a95c,0x8c31d121,0x1702a32e,0xb24ff00b,
102120         0x2dcc513a,0x111662e0 } },
102121     /* 124 */
102122     { { 0xefb42b87,0x78114015,0x1b6c4dff,0xbd9f5d70,0xa7d7c129,0x66ecccd7,
102123         0x94b750f8,0xdb3ee1cb },
102124       { 0xf34837cf,0xb26f3db0,0xb9578d4f,0xe7eed18b,0x7c56657d,0x5d2cdf93,
102125         0x52206a59,0x886a6442 } },
102126     /* 125 */
102127     { { 0x65b569ea,0x3c234cfb,0xf72119c1,0x20011141,0xa15a619e,0x8badc85d,
102128         0x018a17bc,0xa70cf4eb },
102129       { 0x8c4a6a65,0x224f97ae,0x0134378f,0x36e5cf27,0x4f7e0960,0xbe3a609e,
102130         0xd1747b77,0xaa4772ab } },
102131     /* 126 */
102132     { { 0x7aa60cc0,0x67676131,0x0368115f,0xc7916361,0xbbc1bb5a,0xded98bb4,
102133         0x30faf974,0x611a6ddc },
102134       { 0xc15ee47a,0x30e78cbc,0x4e0d96a5,0x2e896282,0x3dd9ed88,0x36f35adf,
102135         0x16429c88,0x5cfffaf8 } },
102136     /* 127 */
102137     { { 0x9b7a99cd,0xc0d54cff,0x843c45a1,0x7bf3b99d,0x62c739e1,0x038a908f,
102138         0x7dc1994c,0x6e5a6b23 },
102139       { 0x0ba5db77,0xef8b454e,0xacf60d63,0xb7b8807f,0x76608378,0xe591c0c6,
102140         0x242dabcc,0x481a238d } },
102141     /* 128 */
102142     { { 0x35d0b34a,0xe3417bc0,0x8327c0a7,0x440b386b,0xac0362d1,0x8fb7262d,
102143         0xe0cdf943,0x2c41114c },
102144       { 0xad95a0b1,0x2ba5cef1,0x67d54362,0xc09b37a8,0x01e486c9,0x26d6cdd2,
102145         0x42ff9297,0x20477abf } },
102146     /* 129 */
102147     { { 0x18d65dbf,0x2f75173c,0x339edad8,0x77bf940e,0xdcf1001c,0x7022d26b,
102148         0xc77396b6,0xac66409a },
102149       { 0xc6261cc3,0x8b0bb36f,0x190e7e90,0x213f7bc9,0xa45e6c10,0x6541ceba,
102150         0xcc122f85,0xce8e6975 } },
102151     /* 130 */
102152     { { 0xbc0a67d2,0x0f121b41,0x444d248a,0x62d4760a,0x659b4737,0x0e044f1d,
102153         0x250bb4a8,0x08fde365 },
102154       { 0x848bf287,0xaceec3da,0xd3369d6e,0xc2a62182,0x92449482,0x3582dfdc,
102155         0x565d6cd7,0x2f7e2fd2 } },
102156     /* 131 */
102157     { { 0xc3770fa7,0xae4b92db,0x379043f9,0x095e8d5c,0x17761171,0x54f34e9d,
102158         0x907702ae,0xc65be92e },
102159       { 0xf6fd0a40,0x2758a303,0xbcce784b,0xe7d822e3,0x4f9767bf,0x7ae4f585,
102160         0xd1193b3a,0x4bff8e47 } },
102161     /* 132 */
102162     { { 0x00ff1480,0xcd41d21f,0x0754db16,0x2ab8fb7d,0xbbe0f3ea,0xac81d2ef,
102163         0x5772967d,0x3e4e4ae6 },
102164       { 0x3c5303e6,0x7e18f36d,0x92262397,0x3bd9994b,0x1324c3c0,0x9ed70e26,
102165         0x58ec6028,0x5388aefd } },
102166     /* 133 */
102167     { { 0x5e5d7713,0xad1317eb,0x75de49da,0x09b985ee,0xc74fb261,0x32f5bc4f,
102168         0x4f75be0e,0x5cf908d1 },
102169       { 0x8e657b12,0x76043510,0xb96ed9e6,0xbfd421a5,0x8970ccc2,0x0e29f51f,
102170         0x60f00ce2,0xa698ba40 } },
102171     /* 134 */
102172     { { 0xef748fec,0x73db1686,0x7e9d2cf9,0xe6e755a2,0xce265eff,0x630b6544,
102173         0x7aebad8d,0xb142ef8a },
102174       { 0x17d5770a,0xad31af9f,0x2cb3412f,0x66af3b67,0xdf3359de,0x6bd60d1b,
102175         0x58515075,0xd1896a96 } },
102176     /* 135 */
102177     { { 0x33c41c08,0xec5957ab,0x5468e2e1,0x87de94ac,0xac472f6c,0x18816b73,
102178         0x7981da39,0x267b0e0b },
102179       { 0x8e62b988,0x6e554e5d,0x116d21e7,0xd8ddc755,0x3d2a6f99,0x4610faf0,
102180         0xa1119393,0xb54e287a } },
102181     /* 136 */
102182     { { 0x178a876b,0x0a0122b5,0x085104b4,0x51ff96ff,0x14f29f76,0x050b31ab,
102183         0x5f87d4e6,0x84abb28b },
102184       { 0x8270790a,0xd5ed439f,0x85e3f46b,0x2d6cb59d,0x6c1e2212,0x75f55c1b,
102185         0x17655640,0xe5436f67 } },
102186     /* 137 */
102187     { { 0x2286e8d5,0x53f9025e,0x864453be,0x353c95b4,0xe408e3a0,0xd832f5bd,
102188         0x5b9ce99e,0x0404f68b },
102189       { 0xa781e8e5,0xcad33bde,0x163c2f5b,0x3cdf5018,0x0119caa3,0x57576960,
102190         0x0ac1c701,0x3a4263df } },
102191     /* 138 */
102192     { { 0x9aeb596d,0xc2965ecc,0x023c92b4,0x01ea03e7,0x2e013961,0x4704b4b6,
102193         0x905ea367,0x0ca8fd3f },
102194       { 0x551b2b61,0x92523a42,0x390fcd06,0x1eb7a89c,0x0392a63e,0xe7f1d2be,
102195         0x4ddb0c33,0x96dca264 } },
102196     /* 139 */
102197     { { 0x387510af,0x203bb43a,0xa9a36a01,0x846feaa8,0x2f950378,0xd23a5770,
102198         0x3aad59dc,0x4363e212 },
102199       { 0x40246a47,0xca43a1c7,0xe55dd24d,0xb362b8d2,0x5d8faf96,0xf9b08604,
102200         0xd8bb98c4,0x840e115c } },
102201     /* 140 */
102202     { { 0x1023e8a7,0xf12205e2,0xd8dc7a0b,0xc808a8cd,0x163a5ddf,0xe292a272,
102203         0x30ded6d4,0x5e0d6abd },
102204       { 0x7cfc0f64,0x07a721c2,0x0e55ed88,0x42eec01d,0x1d1f9db2,0x26a7bef9,
102205         0x2945a25a,0x7dea48f4 } },
102206     /* 141 */
102207     { { 0xe5060a81,0xabdf6f1c,0xf8f95615,0xe79f9c72,0x06ac268b,0xcfd36c54,
102208         0xebfd16d1,0xabc2a2be },
102209       { 0xd3e2eac7,0x8ac66f91,0xd2dd0466,0x6f10ba63,0x0282d31b,0x6790e377,
102210         0x6c7eefc1,0x4ea35394 } },
102211     /* 142 */
102212     { { 0x5266309d,0xed8a2f8d,0x81945a3e,0x0a51c6c0,0x578c5dc1,0xcecaf45a,
102213         0x1c94ffc3,0x3a76e689 },
102214       { 0x7d7b0d0f,0x9aace8a4,0x8f584a5f,0x963ace96,0x4e697fbe,0x51a30c72,
102215         0x465e6464,0x8212a10a } },
102216     /* 143 */
102217     { { 0xcfab8caa,0xef7c61c3,0x0e142390,0x18eb8e84,0x7e9733ca,0xcd1dff67,
102218         0x599cb164,0xaa7cab71 },
102219       { 0xbc837bd1,0x02fc9273,0xc36af5d7,0xc06407d0,0xf423da49,0x17621292,
102220         0xfe0617c3,0x40e38073 } },
102221     /* 144 */
102222     { { 0xa7bf9b7c,0xf4f80824,0x3fbe30d0,0x365d2320,0x97cf9ce3,0xbfbe5320,
102223         0xb3055526,0xe3604700 },
102224       { 0x6cc6c2c7,0x4dcb9911,0xba4cbee6,0x72683708,0x637ad9ec,0xdcded434,
102225         0xa3dee15f,0x6542d677 } },
102226     /* 145 */
102227     { { 0x7b6c377a,0x3f32b6d0,0x903448be,0x6cb03847,0x20da8af7,0xd6fdd3a8,
102228         0x09bb6f21,0xa6534aee },
102229       { 0x1035facf,0x30a1780d,0x9dcb47e6,0x35e55a33,0xc447f393,0x6ea50fe1,
102230         0xdc9aef22,0xf3cb672f } },
102231     /* 146 */
102232     { { 0x3b55fd83,0xeb3719fe,0x875ddd10,0xe0d7a46c,0x05cea784,0x33ac9fa9,
102233         0xaae870e7,0x7cafaa2e },
102234       { 0x1d53b338,0x9b814d04,0xef87e6c6,0xe0acc0a0,0x11672b0f,0xfb93d108,
102235         0xb9bd522e,0x0aab13c1 } },
102236     /* 147 */
102237     { { 0xd2681297,0xddcce278,0xb509546a,0xcb350eb1,0x7661aaf2,0x2dc43173,
102238         0x847012e9,0x4b91a602 },
102239       { 0x72f8ddcf,0xdcff1095,0x9a911af4,0x08ebf61e,0xc372430e,0x48f4360a,
102240         0x72321cab,0x49534c53 } },
102241     /* 148 */
102242     { { 0xf07b7e9d,0x83df7d71,0x13cd516f,0xa478efa3,0x6c047ee3,0x78ef264b,
102243         0xd65ac5ee,0xcaf46c4f },
102244       { 0x92aa8266,0xa04d0c77,0x913684bb,0xedf45466,0xae4b16b0,0x56e65168,
102245         0x04c6770f,0x14ce9e57 } },
102246     /* 149 */
102247     { { 0x965e8f91,0x99445e3e,0xcb0f2492,0xd3aca1ba,0x90c8a0a0,0xd31cc70f,
102248         0x3e4c9a71,0x1bb708a5 },
102249       { 0x558bdd7a,0xd5ca9e69,0x018a26b1,0x734a0508,0x4c9cf1ec,0xb093aa71,
102250         0xda300102,0xf9d126f2 } },
102251     /* 150 */
102252     { { 0xaff9563e,0x749bca7a,0xb49914a0,0xdd077afe,0xbf5f1671,0xe27a0311,
102253         0x729ecc69,0x807afcb9 },
102254       { 0xc9b08b77,0x7f8a9337,0x443c7e38,0x86c3a785,0x476fd8ba,0x85fafa59,
102255         0x6568cd8c,0x751adcd1 } },
102256     /* 151 */
102257     { { 0x10715c0d,0x8aea38b4,0x8f7697f7,0xd113ea71,0x93fbf06d,0x665eab14,
102258         0x2537743f,0x29ec4468 },
102259       { 0xb50bebbc,0x3d94719c,0xe4505422,0x399ee5bf,0x8d2dedb1,0x90cd5b3a,
102260         0x92a4077d,0xff9370e3 } },
102261     /* 152 */
102262     { { 0xc6b75b65,0x59a2d69b,0x266651c5,0x4188f8d5,0x3de9d7d2,0x28a9f33e,
102263         0xa2a9d01a,0x9776478b },
102264       { 0x929af2c7,0x8852622d,0x4e690923,0x334f5d6d,0xa89a51e9,0xce6cc7e5,
102265         0xac2f82fa,0x74a6313f } },
102266     /* 153 */
102267     { { 0xb75f079c,0xb2f4dfdd,0x18e36fbb,0x85b07c95,0xe7cd36dd,0x1b6cfcf0,
102268         0x0ff4863d,0xab75be15 },
102269       { 0x173fc9b7,0x81b367c0,0xd2594fd0,0xb90a7420,0xc4091236,0x15fdbf03,
102270         0x0b4459f6,0x4ebeac2e } },
102271     /* 154 */
102272     { { 0x5c9f2c53,0xeb6c5fe7,0x8eae9411,0xd2522011,0xf95ac5d8,0xc8887633,
102273         0x2c1baffc,0xdf99887b },
102274       { 0x850aaecb,0xbb78eed2,0x01d6a272,0x9d49181b,0xb1cdbcac,0x978dd511,
102275         0x779f4058,0x27b040a7 } },
102276     /* 155 */
102277     { { 0xf73b2eb2,0x90405db7,0x8e1b2118,0xe0df8508,0x5962327e,0x501b7152,
102278         0xe4cfa3f5,0xb393dd37 },
102279       { 0x3fd75165,0xa1230e7b,0xbcd33554,0xd66344c2,0x0f7b5022,0x6c36f1be,
102280         0xd0463419,0x09588c12 } },
102281     /* 156 */
102282     { { 0x02601c3b,0xe086093f,0xcf5c335f,0xfb0252f8,0x894aff28,0x955cf280,
102283         0xdb9f648b,0x81c879a9 },
102284       { 0xc6f56c51,0x040e687c,0x3f17618c,0xfed47169,0x9059353b,0x44f88a41,
102285         0x5fc11bc4,0xfa0d48f5 } },
102286     /* 157 */
102287     { { 0xe1608e4d,0xbc6e1c9d,0x3582822c,0x010dda11,0x157ec2d7,0xf6b7ddc1,
102288         0xb6a367d6,0x8ea0e156 },
102289       { 0x2383b3b4,0xa354e02f,0x3f01f53c,0x69966b94,0x2de03ca5,0x4ff6632b,
102290         0xfa00b5ac,0x3f5ab924 } },
102291     /* 158 */
102292     { { 0x59739efb,0x337bb0d9,0xe7ebec0d,0xc751b0f4,0x411a67d1,0x2da52dd6,
102293         0x2b74256e,0x8bc76887 },
102294       { 0x82d3d253,0xa5be3b72,0xf58d779f,0xa9f679a1,0xe16767bb,0xa1cac168,
102295         0x60fcf34f,0xb386f190 } },
102296     /* 159 */
102297     { { 0x2fedcfc2,0x31f3c135,0x62f8af0d,0x5396bf62,0xe57288c2,0x9a02b4ea,
102298         0x1b069c4d,0x4cb460f7 },
102299       { 0x5b8095ea,0xae67b4d3,0x6fc07603,0x92bbf859,0xb614a165,0xe1475f66,
102300         0x95ef5223,0x52c0d508 } },
102301     /* 160 */
102302     { { 0x15339848,0x231c210e,0x70778c8d,0xe87a28e8,0x6956e170,0x9d1de661,
102303         0x2bb09c0b,0x4ac3c938 },
102304       { 0x6998987d,0x19be0551,0xae09f4d6,0x8b2376c4,0x1a3f933d,0x1de0b765,
102305         0xe39705f4,0x380d94c7 } },
102306     /* 161 */
102307     { { 0x81542e75,0x01a355aa,0xee01b9b7,0x96c724a1,0x624d7087,0x6b3a2977,
102308         0xde2637af,0x2ce3e171 },
102309       { 0xf5d5bc1a,0xcfefeb49,0x2777e2b5,0xa655607e,0x9513756c,0x4feaac2f,
102310         0x0b624e4d,0x2e6cd852 } },
102311     /* 162 */
102312     { { 0x8c31c31d,0x3685954b,0x5bf21a0c,0x68533d00,0x75c79ec9,0x0bd7626e,
102313         0x42c69d54,0xca177547 },
102314       { 0xf6d2dbb2,0xcc6edaff,0x174a9d18,0xfd0d8cbd,0xaa4578e8,0x875e8793,
102315         0x9cab2ce6,0xa976a713 } },
102316     /* 163 */
102317     { { 0x93fb353d,0x0a651f1b,0x57fcfa72,0xd75cab8b,0x31b15281,0xaa88cfa7,
102318         0x0a1f4999,0x8720a717 },
102319       { 0x693e1b90,0x8c3e8d37,0x16f6dfc3,0xd345dc0b,0xb52a8742,0x8ea8d00a,
102320         0xc769893c,0x9719ef29 } },
102321     /* 164 */
102322     { { 0x58e35909,0x820eed8d,0x33ddc116,0x9366d8dc,0x6e205026,0xd7f999d0,
102323         0xe15704c1,0xa5072976 },
102324       { 0xc4e70b2e,0x002a37ea,0x6890aa8a,0x84dcf657,0x645b2a5c,0xcd71bf18,
102325         0xf7b77725,0x99389c9d } },
102326     /* 165 */
102327     { { 0x7ada7a4b,0x238c08f2,0xfd389366,0x3abe9d03,0x766f512c,0x6b672e89,
102328         0x202c82e4,0xa88806aa },
102329       { 0xd380184e,0x6602044a,0x126a8b85,0xa8cb78c4,0xad844f17,0x79d670c0,
102330         0x4738dcfe,0x0043bffb } },
102331     /* 166 */
102332     { { 0x36d5192e,0x8d59b5dc,0x4590b2af,0xacf885d3,0x11601781,0x83566d0a,
102333         0xba6c4866,0x52f3ef01 },
102334       { 0x0edcb64d,0x3986732a,0x8068379f,0x0a482c23,0x7040f309,0x16cbe5fa,
102335         0x9ef27e75,0x3296bd89 } },
102336     /* 167 */
102337     { { 0x454d81d7,0x476aba89,0x51eb9b3c,0x9eade7ef,0x81c57986,0x619a21cd,
102338         0xaee571e9,0x3b90febf },
102339       { 0x5496f7cb,0x9393023e,0x7fb51bc4,0x55be41d8,0x99beb5ce,0x03f1dd48,
102340         0x9f810b18,0x6e88069d } },
102341     /* 168 */
102342     { { 0xb43ea1db,0xce37ab11,0x5259d292,0x0a7ff1a9,0x8f84f186,0x851b0221,
102343         0xdefaad13,0xa7222bea },
102344       { 0x2b0a9144,0xa2ac78ec,0xf2fa59c5,0x5a024051,0x6147ce38,0x91d1eca5,
102345         0xbc2ac690,0xbe94d523 } },
102346     /* 169 */
102347     { { 0x0b226ce7,0x72f4945e,0x967e8b70,0xb8afd747,0x85a6c63e,0xedea46f1,
102348         0x9be8c766,0x7782defe },
102349       { 0x3db38626,0x760d2aa4,0x76f67ad1,0x460ae787,0x54499cdb,0x341b86fc,
102350         0xa2892e4b,0x03838567 } },
102351     /* 170 */
102352     { { 0x79ec1a0f,0x2d8daefd,0xceb39c97,0x3bbcd6fd,0x58f61a95,0xf5575ffc,
102353         0xadf7b420,0xdbd986c4 },
102354       { 0x15f39eb7,0x81aa8814,0xb98d976c,0x6ee2fcf5,0xcf2f717d,0x5465475d,
102355         0x6860bbd0,0x8e24d3c4 } },
102356     /* 171 */
102357     { { 0x9a587390,0x749d8e54,0x0cbec588,0x12bb194f,0xb25983c6,0x46e07da4,
102358         0x407bafc8,0x541a99c4 },
102359       { 0x624c8842,0xdb241692,0xd86c05ff,0x6044c12a,0x4f7fcf62,0xc59d14b4,
102360         0xf57d35d1,0xc0092c49 } },
102361     /* 172 */
102362     { { 0xdf2e61ef,0xd3cc75c3,0x2e1b35ca,0x7e8841c8,0x909f29f4,0xc62d30d1,
102363         0x7286944d,0x75e40634 },
102364       { 0xbbc237d0,0xe7d41fc5,0xec4f01c9,0xc9537bf0,0x282bd534,0x91c51a16,
102365         0xc7848586,0x5b7cb658 } },
102366     /* 173 */
102367     { { 0x8a28ead1,0x964a7084,0xfd3b47f6,0x802dc508,0x767e5b39,0x9ae4bfd1,
102368         0x8df097a1,0x7ae13eba },
102369       { 0xeadd384e,0xfd216ef8,0xb6b2ff06,0x0361a2d9,0x4bcdb5f3,0x204b9878,
102370         0xe2a8e3fd,0x787d8074 } },
102371     /* 174 */
102372     { { 0x757fbb1c,0xc5e25d6b,0xca201deb,0xe47bddb2,0x6d2233ff,0x4a55e9a3,
102373         0x9ef28484,0x5c222819 },
102374       { 0x88315250,0x773d4a85,0x827097c1,0x21b21a2b,0xdef5d33f,0xab7c4ea1,
102375         0xbaf0f2b0,0xe45d37ab } },
102376     /* 175 */
102377     { { 0x28511c8a,0xd2df1e34,0xbdca6cd3,0xebb229c8,0x627c39a7,0x578a71a7,
102378         0x84dfb9d3,0xed7bc122 },
102379       { 0x93dea561,0xcf22a6df,0xd48f0ed1,0x5443f18d,0x5bad23e8,0xd8b86140,
102380         0x45ca6d27,0xaac97cc9 } },
102381     /* 176 */
102382     { { 0xa16bd00a,0xeb54ea74,0xf5c0bcc1,0xd839e9ad,0x1f9bfc06,0x092bb7f1,
102383         0x1163dc4e,0x318f97b3 },
102384       { 0xc30d7138,0xecc0c5be,0xabc30220,0x44e8df23,0xb0223606,0x2bb7972f,
102385         0x9a84ff4d,0xfa41faa1 } },
102386     /* 177 */
102387     { { 0xa6642269,0x4402d974,0x9bb783bd,0xc81814ce,0x7941e60b,0x398d38e4,
102388         0x1d26e9e2,0x38bb6b2c },
102389       { 0x6a577f87,0xc64e4a25,0xdc11fe1c,0x8b52d253,0x62280728,0xff336abf,
102390         0xce7601a5,0x94dd0905 } },
102391     /* 178 */
102392     { { 0xde93f92a,0x156cf7dc,0x89b5f315,0xa01333cb,0xc995e750,0x02404df9,
102393         0xd25c2ae9,0x92077867 },
102394       { 0x0bf39d44,0xe2471e01,0x96bb53d7,0x5f2c9020,0x5c9c3d8f,0x4c44b7b3,
102395         0xd29beb51,0x81e8428b } },
102396     /* 179 */
102397     { { 0xc477199f,0x6dd9c2ba,0x6b5ecdd9,0x8cb8eeee,0xee40fd0e,0x8af7db3f,
102398         0xdbbfa4b1,0x1b94ab62 },
102399       { 0xce47f143,0x44f0d8b3,0x63f46163,0x51e623fc,0xcc599383,0xf18f270f,
102400         0x055590ee,0x06a38e28 } },
102401     /* 180 */
102402     { { 0xb3355b49,0x2e5b0139,0xb4ebf99b,0x20e26560,0xd269f3dc,0xc08ffa6b,
102403         0x83d9d4f8,0xa7b36c20 },
102404       { 0x1b3e8830,0x64d15c3a,0xa89f9c0b,0xd5fceae1,0xe2d16930,0xcfeee4a2,
102405         0xa2822a20,0xbe54c6b4 } },
102406     /* 181 */
102407     { { 0x8d91167c,0xd6cdb3df,0xe7a6625e,0x517c3f79,0x346ac7f4,0x7105648f,
102408         0xeae022bb,0xbf30a5ab },
102409       { 0x93828a68,0x8e7785be,0x7f3ef036,0x5161c332,0x592146b2,0xe11b5feb,
102410         0x2732d13a,0xd1c820de } },
102411     /* 182 */
102412     { { 0x9038b363,0x043e1347,0x6b05e519,0x58c11f54,0x6026cad1,0x4fe57abe,
102413         0x68a18da3,0xb7d17bed },
102414       { 0xe29c2559,0x44ca5891,0x5bfffd84,0x4f7a0376,0x74e46948,0x498de4af,
102415         0x6412cc64,0x3997fd5e } },
102416     /* 183 */
102417     { { 0x8bd61507,0xf2074682,0x34a64d2a,0x29e132d5,0x8a8a15e3,0xffeddfb0,
102418         0x3c6c13e8,0x0eeb8929 },
102419       { 0xa7e259f8,0xe9b69a3e,0xd13e7e67,0xce1db7e6,0xad1fa685,0x277318f6,
102420         0xc922b6ef,0x228916f8 } },
102421     /* 184 */
102422     { { 0x0a12ab5b,0x959ae25b,0x957bc136,0xcc11171f,0xd16e2b0c,0x8058429e,
102423         0x6e93097e,0xec05ad1d },
102424       { 0xac3f3708,0x157ba5be,0x30b59d77,0x31baf935,0x118234e5,0x47b55237,
102425         0x7ff11b37,0x7d314156 } },
102426     /* 185 */
102427     { { 0xf6dfefab,0x7bd9c05c,0xdcb37707,0xbe2f2268,0x3a38bb95,0xe53ead97,
102428         0x9bc1d7a3,0xe9ce66fc },
102429       { 0x6f6a02a1,0x75aa1576,0x60e600ed,0x38c087df,0x68cdc1b9,0xf8947f34,
102430         0x72280651,0xd9650b01 } },
102431     /* 186 */
102432     { { 0x5a057e60,0x504b4c4a,0x8def25e4,0xcbccc3be,0x17c1ccbd,0xa6353208,
102433         0x804eb7a2,0x14d6699a },
102434       { 0xdb1f411a,0x2c8a8415,0xf80d769c,0x09fbaf0b,0x1c2f77ad,0xb4deef90,
102435         0x0d43598a,0x6f4c6841 } },
102436     /* 187 */
102437     { { 0x96c24a96,0x8726df4e,0xfcbd99a3,0x534dbc85,0x8b2ae30a,0x3c466ef2,
102438         0x61189abb,0x4c4350fd },
102439       { 0xf855b8da,0x2967f716,0x463c38a1,0x41a42394,0xeae93343,0xc37e1413,
102440         0x5a3118b5,0xa726d242 } },
102441     /* 188 */
102442     { { 0x948c1086,0xdae6b3ee,0xcbd3a2e1,0xf1de503d,0x03d022f3,0x3f35ed3f,
102443         0xcc6cf392,0x13639e82 },
102444       { 0xcdafaa86,0x9ac938fb,0x2654a258,0xf45bc5fb,0x45051329,0x1963b26e,
102445         0xc1a335a3,0xca9365e1 } },
102446     /* 189 */
102447     { { 0x4c3b2d20,0x3615ac75,0x904e241b,0x742a5417,0xcc9d071d,0xb08521c4,
102448         0x970b72a5,0x9ce29c34 },
102449       { 0x6d3e0ad6,0x8cc81f73,0xf2f8434c,0x8060da9e,0x6ce862d9,0x35ed1d1a,
102450         0xab42af98,0x48c4abd7 } },
102451     /* 190 */
102452     { { 0x40c7485a,0xd221b0cc,0xe5274dbf,0xead455bb,0x9263d2e8,0x493c7698,
102453         0xf67b33cb,0x78017c32 },
102454       { 0x930cb5ee,0xb9d35769,0x0c408ed2,0xc0d14e94,0x272f1a4d,0xf8b7bf55,
102455         0xde5c1c04,0x53cd0454 } },
102456     /* 191 */
102457     { { 0x5d28ccac,0xbcd585fa,0x005b746e,0x5f823e56,0xcd0123aa,0x7c79f0a1,
102458         0xd3d7fa8f,0xeea465c1 },
102459       { 0x0551803b,0x7810659f,0x7ce6af70,0x6c0b599f,0x29288e70,0x4195a770,
102460         0x7ae69193,0x1b6e42a4 } },
102461     /* 192 */
102462     { { 0xf67d04c3,0x2e80937c,0x89eeb811,0x1e312be2,0x92594d60,0x56b5d887,
102463         0x187fbd3d,0x0224da14 },
102464       { 0x0c5fe36f,0x87abb863,0x4ef51f5f,0x580f3c60,0xb3b429ec,0x964fb1bf,
102465         0x42bfff33,0x60838ef0 } },
102466     /* 193 */
102467     { { 0x7e0bbe99,0x432cb2f2,0x04aa39ee,0x7bda44f3,0x9fa93903,0x5f497c7a,
102468         0x2d331643,0x636eb202 },
102469       { 0x93ae00aa,0xfcfd0e61,0x31ae6d2f,0x875a00fe,0x9f93901c,0xf43658a2,
102470         0x39218bac,0x8844eeb6 } },
102471     /* 194 */
102472     { { 0x6b3bae58,0x114171d2,0x17e39f3e,0x7db3df71,0x81a8eada,0xcd37bc7f,
102473         0x51fb789e,0x27ba83dc },
102474       { 0xfbf54de5,0xa7df439f,0xb5fe1a71,0x7277030b,0xdb297a48,0x42ee8e35,
102475         0x87f3a4ab,0xadb62d34 } },
102476     /* 195 */
102477     { { 0xa175df2a,0x9b1168a2,0x618c32e9,0x082aa04f,0x146b0916,0xc9e4f2e7,
102478         0x75e7c8b2,0xb990fd76 },
102479       { 0x4df37313,0x0829d96b,0xd0b40789,0x1c205579,0x78087711,0x66c9ae4a,
102480         0x4d10d18d,0x81707ef9 } },
102481     /* 196 */
102482     { { 0x03d6ff96,0x97d7cab2,0x0d843360,0x5b851bfc,0xd042db4b,0x268823c4,
102483         0xd5a8aa5c,0x3792daea },
102484       { 0x941afa0b,0x52818865,0x42d83671,0xf3e9e741,0x5be4e0a7,0x17c82527,
102485         0x94b001ba,0x5abd635e } },
102486     /* 197 */
102487     { { 0x0ac4927c,0x727fa84e,0xa7c8cf23,0xe3886035,0x4adca0df,0xa4bcd5ea,
102488         0x846ab610,0x5995bf21 },
102489       { 0x829dfa33,0xe90f860b,0x958fc18b,0xcaafe2ae,0x78630366,0x9b3baf44,
102490         0xd483411e,0x44c32ca2 } },
102491     /* 198 */
102492     { { 0xe40ed80c,0xa74a97f1,0x31d2ca82,0x5f938cb1,0x7c2d6ad9,0x53f2124b,
102493         0x8082a54c,0x1f2162fb },
102494       { 0x720b173e,0x7e467cc5,0x085f12f9,0x40e8a666,0x4c9d65dc,0x8cebc20e,
102495         0xc3e907c9,0x8f1d402b } },
102496     /* 199 */
102497     { { 0xfbc4058a,0x4f592f9c,0x292f5670,0xb15e14b6,0xbc1d8c57,0xc55cfe37,
102498         0x926edbf9,0xb1980f43 },
102499       { 0x32c76b09,0x98c33e09,0x33b07f78,0x1df5279d,0x863bb461,0x6f08ead4,
102500         0x37448e45,0x2828ad9b } },
102501     /* 200 */
102502     { { 0xc4cf4ac5,0x696722c4,0xdde64afb,0xf5ac1a3f,0xe0890832,0x0551baa2,
102503         0x5a14b390,0x4973f127 },
102504       { 0x322eac5d,0xe59d8335,0x0bd9b568,0x5e07eef5,0xa2588393,0xab36720f,
102505         0xdb168ac7,0x6dac8ed0 } },
102506     /* 201 */
102507     { { 0xeda835ef,0xf7b545ae,0x1d10ed51,0x4aa113d2,0x13741b09,0x035a65e0,
102508         0x20b9de4c,0x4b23ef59 },
102509       { 0x3c4c7341,0xe82bb680,0x3f58bc37,0xd457706d,0xa51e3ee8,0x73527863,
102510         0xddf49a4e,0x4dd71534 } },
102511     /* 202 */
102512     { { 0x95476cd9,0xbf944672,0xe31a725b,0x648d072f,0xfc4b67e0,0x1441c8b8,
102513         0x2f4a4dbb,0xfd317000 },
102514       { 0x8995d0e1,0x1cb43ff4,0x0ef729aa,0x76e695d1,0x41798982,0xe0d5f976,
102515         0x9569f365,0x14fac58c } },
102516     /* 203 */
102517     { { 0xf312ae18,0xad9a0065,0xfcc93fc9,0x51958dc0,0x8a7d2846,0xd9a14240,
102518         0x36abda50,0xed7c7651 },
102519       { 0x25d4abbc,0x46270f1a,0xf1a113ea,0x9b5dd8f3,0x5b51952f,0xc609b075,
102520         0x4d2e9f53,0xfefcb7f7 } },
102521     /* 204 */
102522     { { 0xba119185,0xbd09497a,0xaac45ba4,0xd54e8c30,0xaa521179,0x492479de,
102523         0x87e0d80b,0x1801a57e },
102524       { 0xfcafffb0,0x073d3f8d,0xae255240,0x6cf33c0b,0x5b5fdfbc,0x781d763b,
102525         0x1ead1064,0x9f8fc11e } },
102526     /* 205 */
102527     { { 0x5e69544c,0x1583a171,0xf04b7813,0x0eaf8567,0x278a4c32,0x1e22a8fd,
102528         0x3d3a69a9,0xa9d3809d },
102529       { 0x59a2da3b,0x936c2c2c,0x1895c847,0x38ccbcf6,0x63d50869,0x5e65244e,
102530         0xe1178ef7,0x3006b9ae } },
102531     /* 206 */
102532     { { 0xc9eead28,0x0bb1f2b0,0x89f4dfbc,0x7eef635d,0xb2ce8939,0x074757fd,
102533         0x45f8f761,0x0ab85fd7 },
102534       { 0x3e5b4549,0xecda7c93,0x97922f21,0x4be2bb5c,0xb43b8040,0x261a1274,
102535         0x11e942c2,0xb122d675 } },
102536     /* 207 */
102537     { { 0x66a5ae7a,0x3be607be,0x76adcbe3,0x01e703fa,0x4eb6e5c5,0xaf904301,
102538         0x097dbaec,0x9f599dc1 },
102539       { 0x0ff250ed,0x6d75b718,0x349a20dc,0x8eb91574,0x10b227a3,0x425605a4,
102540         0x8a294b78,0x7d5528e0 } },
102541     /* 208 */
102542     { { 0x20c26def,0xf0f58f66,0x582b2d1e,0x025585ea,0x01ce3881,0xfbe7d79b,
102543         0x303f1730,0x28ccea01 },
102544       { 0x79644ba5,0xd1dabcd1,0x06fff0b8,0x1fc643e8,0x66b3e17b,0xa60a76fc,
102545         0xa1d013bf,0xc18baf48 } },
102546     /* 209 */
102547     { { 0x5dc4216d,0x34e638c8,0x206142ac,0x00c01067,0x95f5064a,0xd453a171,
102548         0xb7a9596b,0x9def809d },
102549       { 0x67ab8d2c,0x41e8642e,0x6237a2b6,0xb4240433,0x64c4218b,0x7d506a6d,
102550         0x68808ce5,0x0357f8b0 } },
102551     /* 210 */
102552     { { 0x4cd2cc88,0x8e9dbe64,0xf0b8f39d,0xcc61c28d,0xcd30a0c8,0x4a309874,
102553         0x1b489887,0xe4a01add },
102554       { 0xf57cd8f9,0x2ed1eeac,0xbd594c48,0x1b767d3e,0x7bd2f787,0xa7295c71,
102555         0xce10cc30,0x466d7d79 } },
102556     /* 211 */
102557     { { 0x9dada2c7,0x47d31892,0x8f9aa27d,0x4fa0a6c3,0x820a59e1,0x90e4fd28,
102558         0x451ead1a,0xc672a522 },
102559       { 0x5d86b655,0x30607cc8,0xf9ad4af1,0xf0235d3b,0x571172a6,0x99a08680,
102560         0xf2a67513,0x5e3d64fa } },
102561     /* 212 */
102562     { { 0x9b3b4416,0xaa6410c7,0xeab26d99,0xcd8fcf85,0xdb656a74,0x5ebff74a,
102563         0xeb8e42fc,0x6c8a7a95 },
102564       { 0xb02a63bd,0x10c60ba7,0x8b8f0047,0x6b2f2303,0x312d90b0,0x8c6c3738,
102565         0xad82ca91,0x348ae422 } },
102566     /* 213 */
102567     { { 0x5ccda2fb,0x7f474663,0x8e0726d2,0x22accaa1,0x492b1f20,0x85adf782,
102568         0xd9ef2d2e,0xc1074de0 },
102569       { 0xae9a65b3,0xfcf3ce44,0x05d7151b,0xfd71e4ac,0xce6a9788,0xd4711f50,
102570         0xc9e54ffc,0xfbadfbdb } },
102571     /* 214 */
102572     { { 0x20a99363,0x1713f1cd,0x6cf22775,0xb915658f,0x24d359b2,0x968175cd,
102573         0x83716fcd,0xb7f976b4 },
102574       { 0x5d6dbf74,0x5758e24d,0x71c3af36,0x8d23bafd,0x0243dfe3,0x48f47760,
102575         0xcafcc805,0xf4d41b2e } },
102576     /* 215 */
102577     { { 0xfdabd48d,0x51f1cf28,0x32c078a4,0xce81be36,0x117146e9,0x6ace2974,
102578         0xe0160f10,0x180824ea },
102579       { 0x66e58358,0x0387698b,0xce6ca358,0x63568752,0x5e41e6c5,0x82380e34,
102580         0x83cf6d25,0x67e5f639 } },
102581     /* 216 */
102582     { { 0xcf4899ef,0xf89ccb8d,0x9ebb44c0,0x949015f0,0xb2598ec9,0x546f9276,
102583         0x04c11fc6,0x9fef789a },
102584       { 0x53d2a071,0x6d367ecf,0xa4519b09,0xb10e1a7f,0x611e2eef,0xca6b3fb0,
102585         0xa99c4e20,0xbc80c181 } },
102586     /* 217 */
102587     { { 0xe5eb82e6,0x972536f8,0xf56cb920,0x1a484fc7,0x50b5da5e,0xc78e2171,
102588         0x9f8cdf10,0x49270e62 },
102589       { 0xea6b50ad,0x1a39b7bb,0xa2388ffc,0x9a0284c1,0x8107197b,0x5403eb17,
102590         0x61372f7f,0xd2ee52f9 } },
102591     /* 218 */
102592     { { 0x88e0362a,0xd37cd285,0x8fa5d94d,0x442fa8a7,0xa434a526,0xaff836e5,
102593         0xe5abb733,0xdfb478be },
102594       { 0x673eede6,0xa91f1ce7,0x2b5b2f04,0xa5390ad4,0x5530da2f,0x5e66f7bf,
102595         0x08df473a,0xd9a140b4 } },
102596     /* 219 */
102597     { { 0x6e8ea498,0x0e0221b5,0x3563ee09,0x62347829,0x335d2ade,0xe06b8391,
102598         0x623f4b1a,0x760c058d },
102599       { 0xc198aa79,0x0b89b58c,0xf07aba7f,0xf74890d2,0xfde2556a,0x4e204110,
102600         0x8f190409,0x7141982d } },
102601     /* 220 */
102602     { { 0x4d4b0f45,0x6f0a0e33,0x392a94e1,0xd9280b38,0xb3c61d5e,0x3af324c6,
102603         0x89d54e47,0x3af9d1ce },
102604       { 0x20930371,0xfd8f7981,0x21c17097,0xeda2664c,0xdc42309b,0x0e9545dc,
102605         0x73957dd6,0xb1f815c3 } },
102606     /* 221 */
102607     { { 0x89fec44a,0x84faa78e,0x3caa4caf,0xc8c2ae47,0xc1b6a624,0x691c807d,
102608         0x1543f052,0xa41aed14 },
102609       { 0x7d5ffe04,0x42435399,0x625b6e20,0x8bacb2df,0x87817775,0x85d660be,
102610         0x86fb60ef,0xd6e9c1dd } },
102611     /* 222 */
102612     { { 0xc6853264,0x3aa2e97e,0xe2304a0b,0x771533b7,0xb8eae9be,0x1b912bb7,
102613         0xae9bf8c2,0x9c9c6e10 },
102614       { 0xe030b74c,0xa2309a59,0x6a631e90,0x4ed7494d,0xa49b79f2,0x89f44b23,
102615         0x40fa61b6,0x566bd596 } },
102616     /* 223 */
102617     { { 0xc18061f3,0x066c0118,0x7c83fc70,0x190b25d3,0x27273245,0xf05fc8e0,
102618         0xf525345e,0xcf2c7390 },
102619       { 0x10eb30cf,0xa09bceb4,0x0d77703a,0xcfd2ebba,0x150ff255,0xe842c43a,
102620         0x8aa20979,0x02f51755 } },
102621     /* 224 */
102622     { { 0xaddb7d07,0x396ef794,0x24455500,0x0b4fc742,0xc78aa3ce,0xfaff8eac,
102623         0xe8d4d97d,0x14e9ada5 },
102624       { 0x2f7079e2,0xdaa480a1,0xe4b0800e,0x45baa3cd,0x7838157d,0x01765e2d,
102625         0x8e9d9ae8,0xa0ad4fab } },
102626     /* 225 */
102627     { { 0x4a653618,0x0bfb7621,0x31eaaa5f,0x1872813c,0x44949d5e,0x1553e737,
102628         0x6e56ed1e,0xbcd530b8 },
102629       { 0x32e9c47b,0x169be853,0xb50059ab,0xdc2776fe,0x192bfbb4,0xcdba9761,
102630         0x6979341d,0x909283cf } },
102631     /* 226 */
102632     { { 0x76e81a13,0x67b00324,0x62171239,0x9bee1a99,0xd32e19d6,0x08ed361b,
102633         0xace1549a,0x35eeb7c9 },
102634       { 0x7e4e5bdc,0x1280ae5a,0xb6ceec6e,0x2dcd2cd3,0x6e266bc1,0x52e4224c,
102635         0x448ae864,0x9a8b2cf4 } },
102636     /* 227 */
102637     { { 0x09d03b59,0xf6471bf2,0xb65af2ab,0xc90e62a3,0xebd5eec9,0xff7ff168,
102638         0xd4491379,0x6bdb60f4 },
102639       { 0x8a55bc30,0xdadafebc,0x10097fe0,0xc79ead16,0x4c1e3bdd,0x42e19741,
102640         0x94ba08a9,0x01ec3cfd } },
102641     /* 228 */
102642     { { 0xdc9485c2,0xba6277eb,0x22fb10c7,0x48cc9a79,0x70a28d8a,0x4f61d60f,
102643         0x475464f6,0xd1acb1c0 },
102644       { 0x26f36612,0xd26902b1,0xe0618d8b,0x59c3a44e,0x308357ee,0x4df8a813,
102645         0x405626c2,0x7dcd079d } },
102646     /* 229 */
102647     { { 0xf05a4b48,0x5ce7d4d3,0x37230772,0xadcd2952,0x812a915a,0xd18f7971,
102648         0x377d19b8,0x0bf53589 },
102649       { 0x6c68ea73,0x35ecd95a,0x823a584d,0xc7f3bbca,0xf473a723,0x9fb674c6,
102650         0xe16686fc,0xd28be4d9 } },
102651     /* 230 */
102652     { { 0x38fa8e4b,0x5d2b9906,0x893fd8fc,0x559f186e,0x436fb6fc,0x3a6de2aa,
102653         0x510f88ce,0xd76007aa },
102654       { 0x523a4988,0x2d10aab6,0x74dd0273,0xb455cf44,0xa3407278,0x7f467082,
102655         0xb303bb01,0xf2b52f68 } },
102656     /* 231 */
102657     { { 0x9835b4ca,0x0d57eafa,0xbb669cbc,0x2d2232fc,0xc6643198,0x8eeeb680,
102658         0xcc5aed3a,0xd8dbe98e },
102659       { 0xc5a02709,0xcba9be3f,0xf5ba1fa8,0x30be68e5,0xf10ea852,0xfebd43cd,
102660         0xee559705,0xe01593a3 } },
102661     /* 232 */
102662     { { 0xea75a0a6,0xd3e5af50,0x57858033,0x512226ac,0xd0176406,0x6fe6d50f,
102663         0xaeb8ef06,0xafec07b1 },
102664       { 0x80bb0a31,0x7fb99567,0x37309aae,0x6f1af3cc,0x01abf389,0x9153a15a,
102665         0x6e2dbfdd,0xa71b9354 } },
102666     /* 233 */
102667     { { 0x18f593d2,0xbf8e12e0,0xa078122b,0xd1a90428,0x0ba4f2ad,0x150505db,
102668         0x628523d9,0x53a2005c },
102669       { 0xe7f2b935,0x07c8b639,0xc182961a,0x2bff975a,0x7518ca2c,0x86bceea7,
102670         0x3d588e3d,0xbf47d19b } },
102671     /* 234 */
102672     { { 0xdd7665d5,0x672967a7,0x2f2f4de5,0x4e303057,0x80d4903f,0x144005ae,
102673         0x39c9a1b6,0x001c2c7f },
102674       { 0x69efc6d6,0x143a8014,0x7bc7a724,0xc810bdaa,0xa78150a4,0x5f65670b,
102675         0x86ffb99b,0xfdadf8e7 } },
102676     /* 235 */
102677     { { 0xffc00785,0xfd38cb88,0x3b48eb67,0x77fa7591,0xbf368fbc,0x0454d055,
102678         0x5aa43c94,0x3a838e4d },
102679       { 0x3e97bb9a,0x56166329,0x441d94d9,0x9eb93363,0x0adb2a83,0x515591a6,
102680         0x873e1da3,0x3cdb8257 } },
102681     /* 236 */
102682     { { 0x7de77eab,0x137140a9,0x41648109,0xf7e1c50d,0xceb1d0df,0x762dcad2,
102683         0xf1f57fba,0x5a60cc89 },
102684       { 0x40d45673,0x80b36382,0x5913c655,0x1b82be19,0xdd64b741,0x057284b8,
102685         0xdbfd8fc0,0x922ff56f } },
102686     /* 237 */
102687     { { 0xc9a129a1,0x1b265dee,0xcc284e04,0xa5b1ce57,0xcebfbe3c,0x04380c46,
102688         0xf6c5cd62,0x72919a7d },
102689       { 0x8fb90f9a,0x298f453a,0x88e4031b,0xd719c00b,0x796f1856,0xe32c0e77,
102690         0x3624089a,0x5e791780 } },
102691     /* 238 */
102692     { { 0x7f63cdfb,0x5c16ec55,0xf1cae4fd,0x8e6a3571,0x560597ca,0xfce26bea,
102693         0xe24c2fab,0x4e0a5371 },
102694       { 0xa5765357,0x276a40d3,0x0d73a2b4,0x3c89af44,0x41d11a32,0xb8f370ae,
102695         0xd56604ee,0xf5ff7818 } },
102696     /* 239 */
102697     { { 0x1a09df21,0xfbf3e3fe,0xe66e8e47,0x26d5d28e,0x29c89015,0x2096bd0a,
102698         0x533f5e64,0xe41df0e9 },
102699       { 0xb3ba9e3f,0x305fda40,0x2604d895,0xf2340ceb,0x7f0367c7,0x0866e192,
102700         0xac4f155f,0x8edd7d6e } },
102701     /* 240 */
102702     { { 0x0bfc8ff3,0xc9a1dc0e,0xe936f42f,0x14efd82b,0xcca381ef,0x67016f7c,
102703         0xed8aee96,0x1432c1ca },
102704       { 0x70b23c26,0xec684829,0x0735b273,0xa64fe873,0xeaef0f5a,0xe389f6e5,
102705         0x5ac8d2c6,0xcaef480b } },
102706     /* 241 */
102707     { { 0x75315922,0x5245c978,0x3063cca5,0xd8295171,0xb64ef2cb,0xf3ce60d0,
102708         0x8efae236,0xd0ba177e },
102709       { 0xb1b3af60,0x53a9ae8f,0x3d2da20e,0x1a796ae5,0xdf9eef28,0x01d63605,
102710         0x1c54ae16,0xf31c957c } },
102711     /* 242 */
102712     { { 0x49cc4597,0xc0f58d52,0xbae0a028,0xdc5015b0,0x734a814a,0xefc5fc55,
102713         0x96e17c3a,0x013404cb },
102714       { 0xc9a824bf,0xb29e2585,0x001eaed7,0xd593185e,0x61ef68ac,0x8d6ee682,
102715         0x91933e6c,0x6f377c4b } },
102716     /* 243 */
102717     { { 0xa8333fd2,0x9f93bad1,0x5a2a95b8,0xa8930202,0xeaf75ace,0x211e5037,
102718         0xd2d09506,0x6dba3e4e },
102719       { 0xd04399cd,0xa48ef98c,0xe6b73ade,0x1811c66e,0xc17ecaf3,0x72f60752,
102720         0x3becf4a7,0xf13cf342 } },
102721     /* 244 */
102722     { { 0xa919e2eb,0xceeb9ec0,0xf62c0f68,0x83a9a195,0x7aba2299,0xcfba3bb6,
102723         0x274bbad3,0xc83fa9a9 },
102724       { 0x62fa1ce0,0x0d7d1b0b,0x3418efbf,0xe58b60f5,0x52706f04,0xbfa8ef9e,
102725         0x5d702683,0xb49d70f4 } },
102726     /* 245 */
102727     { { 0xfad5513b,0x914c7510,0xb1751e2d,0x05f32eec,0xd9fb9d59,0x6d850418,
102728         0x0c30f1cf,0x59cfadbb },
102729       { 0x55cb7fd6,0xe167ac23,0x820426a3,0x249367b8,0x90a78864,0xeaeec58c,
102730         0x354a4b67,0x5babf362 } },
102731     /* 246 */
102732     { { 0xee424865,0x37c981d1,0xf2e5577f,0x8b002878,0xb9e0c058,0x702970f1,
102733         0x9026c8f0,0x6188c6a7 },
102734       { 0xd0f244da,0x06f9a19b,0xfb080873,0x1ecced5c,0x9f213637,0x35470f9b,
102735         0xdf50b9d9,0x993fe475 } },
102736     /* 247 */
102737     { { 0x9b2c3609,0x68e31cdf,0x2c46d4ea,0x84eb19c0,0x9a775101,0x7ac9ec1a,
102738         0x4c80616b,0x81f76466 },
102739       { 0x75fbe978,0x1d7c2a5a,0xf183b356,0x6743fed3,0x501dd2bf,0x838d1f04,
102740         0x5fe9060d,0x564a812a } },
102741     /* 248 */
102742     { { 0xfa817d1d,0x7a5a64f4,0xbea82e0f,0x55f96844,0xcd57f9aa,0xb5ff5a0f,
102743         0x00e51d6c,0x226bf3cf },
102744       { 0x2f2833cf,0xd6d1a9f9,0x4f4f89a8,0x20a0a35a,0x8f3f7f77,0x11536c49,
102745         0xff257836,0x68779f47 } },
102746     /* 249 */
102747     { { 0x73043d08,0x79b0c1c1,0x1fc020fa,0xa5446774,0x9a6d26d0,0xd3767e28,
102748         0xeb092e0b,0x97bcb0d1 },
102749       { 0xf32ed3c3,0x2ab6eaa8,0xb281bc48,0xc8a4f151,0xbfa178f3,0x4d1bf4f3,
102750         0x0a784655,0xa872ffe8 } },
102751     /* 250 */
102752     { { 0xa32b2086,0xb1ab7935,0x8160f486,0xe1eb710e,0x3b6ae6be,0x9bd0cd91,
102753         0xb732a36a,0x02812bfc },
102754       { 0xcf605318,0xa63fd7ca,0xfdfd6d1d,0x646e5d50,0x2102d619,0xa1d68398,
102755         0xfe5396af,0x07391cc9 } },
102756     /* 251 */
102757     { { 0x8b80d02b,0xc50157f0,0x62877f7f,0x6b8333d1,0x78d542ae,0x7aca1af8,
102758         0x7e6d2a08,0x355d2adc },
102759       { 0x287386e1,0xb41f335a,0xf8e43275,0xfd272a94,0xe79989ea,0x286ca2cd,
102760         0x7c2a3a79,0x3dc2b1e3 } },
102761     /* 252 */
102762     { { 0x04581352,0xd689d21c,0x376782be,0x0a00c825,0x9fed701f,0x203bd590,
102763         0x3ccd846b,0xc4786910 },
102764       { 0x24c768ed,0x5dba7708,0x6841f657,0x72feea02,0x6accce0e,0x73313ed5,
102765         0xd5bb4d32,0xccc42968 } },
102766     /* 253 */
102767     { { 0x3d7620b9,0x94e50de1,0x5992a56a,0xd89a5c8a,0x675487c9,0xdc007640,
102768         0xaa4871cf,0xe147eb42 },
102769       { 0xacf3ae46,0x274ab4ee,0x50350fbe,0xfd4936fb,0x48c840ea,0xdf2afe47,
102770         0x080e96e3,0x239ac047 } },
102771     /* 254 */
102772     { { 0x2bfee8d4,0x481d1f35,0xfa7b0fec,0xce80b5cf,0x2ce9af3c,0x105c4c9e,
102773         0xf5f7e59d,0xc55fa1a3 },
102774       { 0x8257c227,0x3186f14e,0x342be00b,0xc5b1653f,0xaa904fb2,0x09afc998,
102775         0xd4f4b699,0x094cd99c } },
102776     /* 255 */
102777     { { 0xd703beba,0x8a981c84,0x32ceb291,0x8631d150,0xe3bd49ec,0xa445f2c9,
102778         0x42abad33,0xb90a30b6 },
102779       { 0xb4a5abf9,0xb465404f,0x75db7603,0x004750c3,0xca35d89f,0x6f9a42cc,
102780         0x1b7924f7,0x019f8b9a } },
102781 };
102782 
102783 /* Multiply the base point of P256 by the scalar and return the result.
102784  * If map is true then convert result to affine coordinates.
102785  *
102786  * Stripe implementation.
102787  * Pre-generated: 2^0, 2^32, ...
102788  * Pre-generated: products of all combinations of above.
102789  * 8 doubles and adds (with qz=1)
102790  *
102791  * r     Resulting point.
102792  * k     Scalar to multiply by.
102793  * map   Indicates whether to convert result to affine.
102794  * ct    Constant time required.
102795  * heap  Heap to use for allocation.
102796  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
102797  */
sp_256_ecc_mulmod_base_8(sp_point_256 * r,const sp_digit * k,int map,int ct,void * heap)102798 static int sp_256_ecc_mulmod_base_8(sp_point_256* r, const sp_digit* k,
102799         int map, int ct, void* heap)
102800 {
102801     return sp_256_ecc_mulmod_stripe_8(r, &p256_base, p256_table,
102802                                       k, map, ct, heap);
102803 }
102804 
102805 #endif
102806 
102807 /* Multiply the base point of P256 by the scalar and return the result.
102808  * If map is true then convert result to affine coordinates.
102809  *
102810  * km    Scalar to multiply by.
102811  * r     Resulting point.
102812  * map   Indicates whether to convert result to affine.
102813  * heap  Heap to use for allocation.
102814  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
102815  */
sp_ecc_mulmod_base_256(const mp_int * km,ecc_point * r,int map,void * heap)102816 int sp_ecc_mulmod_base_256(const mp_int* km, ecc_point* r, int map, void* heap)
102817 {
102818 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
102819     sp_point_256* point = NULL;
102820     sp_digit* k = NULL;
102821 #else
102822     sp_point_256  point[1];
102823     sp_digit k[8];
102824 #endif
102825     int err = MP_OKAY;
102826 
102827 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
102828     point = (sp_point_256*)XMALLOC(sizeof(sp_point_256), heap,
102829                                          DYNAMIC_TYPE_ECC);
102830     if (point == NULL)
102831         err = MEMORY_E;
102832     if (err == MP_OKAY) {
102833         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 8, heap,
102834                                DYNAMIC_TYPE_ECC);
102835         if (k == NULL)
102836             err = MEMORY_E;
102837     }
102838 #endif
102839 
102840     if (err == MP_OKAY) {
102841         sp_256_from_mp(k, 8, km);
102842 
102843             err = sp_256_ecc_mulmod_base_8(point, k, map, 1, heap);
102844     }
102845     if (err == MP_OKAY) {
102846         err = sp_256_point_to_ecc_point_8(point, r);
102847     }
102848 
102849 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
102850     if (k != NULL)
102851         XFREE(k, heap, DYNAMIC_TYPE_ECC);
102852     if (point != NULL)
102853         XFREE(point, heap, DYNAMIC_TYPE_ECC);
102854 #endif
102855 
102856     return err;
102857 }
102858 
102859 /* Multiply the base point of P256 by the scalar, add point a and return
102860  * the result. If map is true then convert result to affine coordinates.
102861  *
102862  * km      Scalar to multiply by.
102863  * am      Point to add to scalar mulitply result.
102864  * inMont  Point to add is in montgomery form.
102865  * r       Resulting point.
102866  * map     Indicates whether to convert result to affine.
102867  * heap    Heap to use for allocation.
102868  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
102869  */
sp_ecc_mulmod_base_add_256(const mp_int * km,const ecc_point * am,int inMont,ecc_point * r,int map,void * heap)102870 int sp_ecc_mulmod_base_add_256(const mp_int* km, const ecc_point* am,
102871         int inMont, ecc_point* r, int map, void* heap)
102872 {
102873 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
102874     sp_point_256* point = NULL;
102875     sp_digit* k = NULL;
102876 #else
102877     sp_point_256 point[2];
102878     sp_digit k[8 + 8 * 2 * 5];
102879 #endif
102880     sp_point_256* addP = NULL;
102881     sp_digit* tmp = NULL;
102882     int err = MP_OKAY;
102883 
102884 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
102885     point = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap,
102886                                          DYNAMIC_TYPE_ECC);
102887     if (point == NULL)
102888         err = MEMORY_E;
102889     if (err == MP_OKAY) {
102890         k = (sp_digit*)XMALLOC(
102891             sizeof(sp_digit) * (8 + 8 * 2 * 5),
102892             heap, DYNAMIC_TYPE_ECC);
102893         if (k == NULL)
102894             err = MEMORY_E;
102895     }
102896 #endif
102897 
102898     if (err == MP_OKAY) {
102899         addP = point + 1;
102900         tmp = k + 8;
102901 
102902         sp_256_from_mp(k, 8, km);
102903         sp_256_point_from_ecc_point_8(addP, am);
102904     }
102905     if ((err == MP_OKAY) && (!inMont)) {
102906         err = sp_256_mod_mul_norm_8(addP->x, addP->x, p256_mod);
102907     }
102908     if ((err == MP_OKAY) && (!inMont)) {
102909         err = sp_256_mod_mul_norm_8(addP->y, addP->y, p256_mod);
102910     }
102911     if ((err == MP_OKAY) && (!inMont)) {
102912         err = sp_256_mod_mul_norm_8(addP->z, addP->z, p256_mod);
102913     }
102914     if (err == MP_OKAY) {
102915             err = sp_256_ecc_mulmod_base_8(point, k, 0, 0, heap);
102916     }
102917     if (err == MP_OKAY) {
102918             sp_256_proj_point_add_8(point, point, addP, tmp);
102919 
102920         if (map) {
102921                 sp_256_map_8(point, point, tmp);
102922         }
102923 
102924         err = sp_256_point_to_ecc_point_8(point, r);
102925     }
102926 
102927 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
102928     if (k != NULL)
102929         XFREE(k, heap, DYNAMIC_TYPE_ECC);
102930     if (point)
102931         XFREE(point, heap, DYNAMIC_TYPE_ECC);
102932 #endif
102933 
102934     return err;
102935 }
102936 
102937 #if defined(WOLFSSL_VALIDATE_ECC_KEYGEN) || defined(HAVE_ECC_SIGN) || \
102938                                                         defined(HAVE_ECC_VERIFY)
102939 /* Returns 1 if the number of zero.
102940  * Implementation is constant time.
102941  *
102942  * a  Number to check.
102943  * returns 1 if the number is zero and 0 otherwise.
102944  */
sp_256_iszero_8(const sp_digit * a)102945 static int sp_256_iszero_8(const sp_digit* a)
102946 {
102947     return (a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7]) == 0;
102948 }
102949 
102950 #endif /* WOLFSSL_VALIDATE_ECC_KEYGEN | HAVE_ECC_SIGN | HAVE_ECC_VERIFY */
102951 /* Add 1 to a. (a = a + 1)
102952  *
102953  * a  A single precision integer.
102954  */
sp_256_add_one_8(sp_digit * a)102955 SP_NOINLINE static void sp_256_add_one_8(sp_digit* a)
102956 {
102957     __asm__ __volatile__ (
102958         "movs	r2, #1\n\t"
102959         "ldr	r1, [%[a]]\n\t"
102960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
102961         "adds	r1, r1, r2\n\t"
102962 #else
102963         "add	r1, r1, r2\n\t"
102964 #endif
102965         "movs	r2, #0\n\t"
102966         "str	r1, [%[a]]\n\t"
102967         "ldr	r1, [%[a], #4]\n\t"
102968 #ifdef WOLFSSL_KEIL
102969         "adcs	r1, r1, r2\n\t"
102970 #elif defined(__clang__)
102971         "adcs	r1, r2\n\t"
102972 #else
102973         "adc	r1, r2\n\t"
102974 #endif
102975         "str	r1, [%[a], #4]\n\t"
102976         "ldr	r1, [%[a], #8]\n\t"
102977 #ifdef WOLFSSL_KEIL
102978         "adcs	r1, r1, r2\n\t"
102979 #elif defined(__clang__)
102980         "adcs	r1, r2\n\t"
102981 #else
102982         "adc	r1, r2\n\t"
102983 #endif
102984         "str	r1, [%[a], #8]\n\t"
102985         "ldr	r1, [%[a], #12]\n\t"
102986 #ifdef WOLFSSL_KEIL
102987         "adcs	r1, r1, r2\n\t"
102988 #elif defined(__clang__)
102989         "adcs	r1, r2\n\t"
102990 #else
102991         "adc	r1, r2\n\t"
102992 #endif
102993         "str	r1, [%[a], #12]\n\t"
102994         "ldr	r1, [%[a], #16]\n\t"
102995 #ifdef WOLFSSL_KEIL
102996         "adcs	r1, r1, r2\n\t"
102997 #elif defined(__clang__)
102998         "adcs	r1, r2\n\t"
102999 #else
103000         "adc	r1, r2\n\t"
103001 #endif
103002         "str	r1, [%[a], #16]\n\t"
103003         "ldr	r1, [%[a], #20]\n\t"
103004 #ifdef WOLFSSL_KEIL
103005         "adcs	r1, r1, r2\n\t"
103006 #elif defined(__clang__)
103007         "adcs	r1, r2\n\t"
103008 #else
103009         "adc	r1, r2\n\t"
103010 #endif
103011         "str	r1, [%[a], #20]\n\t"
103012         "ldr	r1, [%[a], #24]\n\t"
103013 #ifdef WOLFSSL_KEIL
103014         "adcs	r1, r1, r2\n\t"
103015 #elif defined(__clang__)
103016         "adcs	r1, r2\n\t"
103017 #else
103018         "adc	r1, r2\n\t"
103019 #endif
103020         "str	r1, [%[a], #24]\n\t"
103021         "ldr	r1, [%[a], #28]\n\t"
103022 #ifdef WOLFSSL_KEIL
103023         "adcs	r1, r1, r2\n\t"
103024 #elif defined(__clang__)
103025         "adcs	r1, r2\n\t"
103026 #else
103027         "adc	r1, r2\n\t"
103028 #endif
103029         "str	r1, [%[a], #28]\n\t"
103030         : [a] "+r" (a)
103031         :
103032         : "memory", "r1", "r2"
103033     );
103034 }
103035 
103036 /* Read big endian unsigned byte array into r.
103037  *
103038  * r  A single precision integer.
103039  * size  Maximum number of bytes to convert
103040  * a  Byte array.
103041  * n  Number of bytes in array to read.
103042  */
sp_256_from_bin(sp_digit * r,int size,const byte * a,int n)103043 static void sp_256_from_bin(sp_digit* r, int size, const byte* a, int n)
103044 {
103045     int i;
103046     int j = 0;
103047     word32 s = 0;
103048 
103049     r[0] = 0;
103050     for (i = n-1; i >= 0; i--) {
103051         r[j] |= (((sp_digit)a[i]) << s);
103052         if (s >= 24U) {
103053             r[j] &= 0xffffffff;
103054             s = 32U - s;
103055             if (j + 1 >= size) {
103056                 break;
103057             }
103058             r[++j] = (sp_digit)a[i] >> s;
103059             s = 8U - s;
103060         }
103061         else {
103062             s += 8U;
103063         }
103064     }
103065 
103066     for (j++; j < size; j++) {
103067         r[j] = 0;
103068     }
103069 }
103070 
103071 /* Generates a scalar that is in the range 1..order-1.
103072  *
103073  * rng  Random number generator.
103074  * k    Scalar value.
103075  * returns RNG failures, MEMORY_E when memory allocation fails and
103076  * MP_OKAY on success.
103077  */
sp_256_ecc_gen_k_8(WC_RNG * rng,sp_digit * k)103078 static int sp_256_ecc_gen_k_8(WC_RNG* rng, sp_digit* k)
103079 {
103080     int err;
103081     byte buf[32];
103082 
103083     do {
103084         err = wc_RNG_GenerateBlock(rng, buf, sizeof(buf));
103085         if (err == 0) {
103086             sp_256_from_bin(k, 8, buf, (int)sizeof(buf));
103087             if (sp_256_cmp_8(k, p256_order2) <= 0) {
103088                 sp_256_add_one_8(k);
103089                 break;
103090             }
103091         }
103092     }
103093     while (err == 0);
103094 
103095     return err;
103096 }
103097 
103098 /* Makes a random EC key pair.
103099  *
103100  * rng   Random number generator.
103101  * priv  Generated private value.
103102  * pub   Generated public point.
103103  * heap  Heap to use for allocation.
103104  * returns ECC_INF_E when the point does not have the correct order, RNG
103105  * failures, MEMORY_E when memory allocation fails and MP_OKAY on success.
103106  */
sp_ecc_make_key_256(WC_RNG * rng,mp_int * priv,ecc_point * pub,void * heap)103107 int sp_ecc_make_key_256(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap)
103108 {
103109 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
103110     sp_point_256* point = NULL;
103111     sp_digit* k = NULL;
103112 #else
103113     #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
103114     sp_point_256 point[2];
103115     #else
103116     sp_point_256 point[1];
103117     #endif
103118     sp_digit k[8];
103119 #endif
103120 #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
103121     sp_point_256* infinity = NULL;
103122 #endif
103123     int err = MP_OKAY;
103124 
103125 
103126     (void)heap;
103127 
103128 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
103129     #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
103130     point = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap, DYNAMIC_TYPE_ECC);
103131     #else
103132     point = (sp_point_256*)XMALLOC(sizeof(sp_point_256), heap, DYNAMIC_TYPE_ECC);
103133     #endif
103134     if (point == NULL)
103135         err = MEMORY_E;
103136     if (err == MP_OKAY) {
103137         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 8, heap,
103138                                DYNAMIC_TYPE_ECC);
103139         if (k == NULL)
103140             err = MEMORY_E;
103141     }
103142 #endif
103143 
103144     if (err == MP_OKAY) {
103145     #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
103146         infinity = point + 1;
103147     #endif
103148 
103149         err = sp_256_ecc_gen_k_8(rng, k);
103150     }
103151     if (err == MP_OKAY) {
103152             err = sp_256_ecc_mulmod_base_8(point, k, 1, 1, NULL);
103153     }
103154 
103155 #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
103156     if (err == MP_OKAY) {
103157             err = sp_256_ecc_mulmod_8(infinity, point, p256_order, 1, 1, NULL);
103158     }
103159     if (err == MP_OKAY) {
103160         if (sp_256_iszero_8(point->x) || sp_256_iszero_8(point->y)) {
103161             err = ECC_INF_E;
103162         }
103163     }
103164 #endif
103165 
103166     if (err == MP_OKAY) {
103167         err = sp_256_to_mp(k, priv);
103168     }
103169     if (err == MP_OKAY) {
103170         err = sp_256_point_to_ecc_point_8(point, pub);
103171     }
103172 
103173 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
103174     if (k != NULL)
103175         XFREE(k, heap, DYNAMIC_TYPE_ECC);
103176     if (point != NULL) {
103177         /* point is not sensitive, so no need to zeroize */
103178         XFREE(point, heap, DYNAMIC_TYPE_ECC);
103179     }
103180 #endif
103181 
103182     return err;
103183 }
103184 
103185 #ifdef HAVE_ECC_DHE
103186 /* Write r as big endian to byte array.
103187  * Fixed length number of bytes written: 32
103188  *
103189  * r  A single precision integer.
103190  * a  Byte array.
103191  */
sp_256_to_bin_8(sp_digit * r,byte * a)103192 static void sp_256_to_bin_8(sp_digit* r, byte* a)
103193 {
103194     int i;
103195     int j;
103196     int s = 0;
103197     int b;
103198 
103199     j = 256 / 8 - 1;
103200     a[j] = 0;
103201     for (i=0; i<8 && j>=0; i++) {
103202         b = 0;
103203         /* lint allow cast of mismatch sp_digit and int */
103204         a[j--] |= (byte)(r[i] << s); /*lint !e9033*/
103205         b += 8 - s;
103206         if (j < 0) {
103207             break;
103208         }
103209         while (b < 32) {
103210             a[j--] = (byte)(r[i] >> b);
103211             b += 8;
103212             if (j < 0) {
103213                 break;
103214             }
103215         }
103216         s = 8 - (b - 32);
103217         if (j >= 0) {
103218             a[j] = 0;
103219         }
103220         if (s != 0) {
103221             j++;
103222         }
103223     }
103224 }
103225 
103226 /* Multiply the point by the scalar and serialize the X ordinate.
103227  * The number is 0 padded to maximum size on output.
103228  *
103229  * priv    Scalar to multiply the point by.
103230  * pub     Point to multiply.
103231  * out     Buffer to hold X ordinate.
103232  * outLen  On entry, size of the buffer in bytes.
103233  *         On exit, length of data in buffer in bytes.
103234  * heap    Heap to use for allocation.
103235  * returns BUFFER_E if the buffer is to small for output size,
103236  * MEMORY_E when memory allocation fails and MP_OKAY on success.
103237  */
sp_ecc_secret_gen_256(const mp_int * priv,const ecc_point * pub,byte * out,word32 * outLen,void * heap)103238 int sp_ecc_secret_gen_256(const mp_int* priv, const ecc_point* pub, byte* out,
103239                           word32* outLen, void* heap)
103240 {
103241 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
103242     sp_point_256* point = NULL;
103243     sp_digit* k = NULL;
103244 #else
103245     sp_point_256 point[1];
103246     sp_digit k[8];
103247 #endif
103248     int err = MP_OKAY;
103249 
103250     if (*outLen < 32U) {
103251         err = BUFFER_E;
103252     }
103253 
103254 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
103255     if (err == MP_OKAY) {
103256         point = (sp_point_256*)XMALLOC(sizeof(sp_point_256), heap,
103257                                          DYNAMIC_TYPE_ECC);
103258         if (point == NULL)
103259             err = MEMORY_E;
103260     }
103261     if (err == MP_OKAY) {
103262         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 8, heap,
103263                                DYNAMIC_TYPE_ECC);
103264         if (k == NULL)
103265             err = MEMORY_E;
103266     }
103267 #endif
103268 
103269     if (err == MP_OKAY) {
103270         sp_256_from_mp(k, 8, priv);
103271         sp_256_point_from_ecc_point_8(point, pub);
103272             err = sp_256_ecc_mulmod_8(point, point, k, 1, 1, heap);
103273     }
103274     if (err == MP_OKAY) {
103275         sp_256_to_bin_8(point->x, out);
103276         *outLen = 32;
103277     }
103278 
103279 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
103280     if (k != NULL)
103281         XFREE(k, heap, DYNAMIC_TYPE_ECC);
103282     if (point != NULL)
103283         XFREE(point, heap, DYNAMIC_TYPE_ECC);
103284 #endif
103285 
103286     return err;
103287 }
103288 #endif /* HAVE_ECC_DHE */
103289 
103290 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
103291 #endif
103292 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
103293 #ifdef WOLFSSL_SP_SMALL
103294 /* Sub b from a into a. (a -= b)
103295  *
103296  * a  A single precision integer.
103297  * b  A single precision integer.
103298  */
sp_256_sub_in_place_8(sp_digit * a,const sp_digit * b)103299 SP_NOINLINE static sp_digit sp_256_sub_in_place_8(sp_digit* a,
103300         const sp_digit* b)
103301 {
103302     __asm__ __volatile__ (
103303         "movs	r7, %[a]\n\t"
103304         "movs	r2, #0\n\t"
103305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103306         "adds	r7, r7, #32\n\t"
103307 #else
103308         "add	r7, r7, #32\n\t"
103309 #endif
103310         "\n"
103311     "L_sp_256_sub_in_place_8_words_%=:\n\t"
103312         "movs	r5, #0\n\t"
103313 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103314         "subs	r5, r5, r2\n\t"
103315 #else
103316         "sub	r5, r5, r2\n\t"
103317 #endif
103318         "ldr	r3, [%[a]]\n\t"
103319         "ldr	r4, [%[a], #4]\n\t"
103320         "ldr	r5, [%[b]]\n\t"
103321         "ldr	r6, [%[b], #4]\n\t"
103322 #ifdef WOLFSSL_KEIL
103323         "sbcs	r3, r3, r5\n\t"
103324 #elif defined(__clang__)
103325         "sbcs	r3, r5\n\t"
103326 #else
103327         "sbc	r3, r5\n\t"
103328 #endif
103329 #ifdef WOLFSSL_KEIL
103330         "sbcs	r4, r4, r6\n\t"
103331 #elif defined(__clang__)
103332         "sbcs	r4, r6\n\t"
103333 #else
103334         "sbc	r4, r6\n\t"
103335 #endif
103336         "str	r3, [%[a]]\n\t"
103337         "str	r4, [%[a], #4]\n\t"
103338 #ifdef WOLFSSL_KEIL
103339         "sbcs	r2, r2, r2\n\t"
103340 #elif defined(__clang__)
103341         "sbcs	r2, r2\n\t"
103342 #else
103343         "sbc	r2, r2\n\t"
103344 #endif
103345 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103346         "adds	%[a], %[a], #8\n\t"
103347 #else
103348         "add	%[a], %[a], #8\n\t"
103349 #endif
103350 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103351         "adds	%[b], %[b], #8\n\t"
103352 #else
103353         "add	%[b], %[b], #8\n\t"
103354 #endif
103355         "cmp	%[a], r7\n\t"
103356         "bne	L_sp_256_sub_in_place_8_words_%=\n\t"
103357         "movs	%[a], r2\n\t"
103358         : [a] "+r" (a), [b] "+r" (b)
103359         :
103360         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
103361     );
103362     return (uint32_t)(size_t)a;
103363 }
103364 
103365 #else
103366 /* Sub b from a into a. (a -= b)
103367  *
103368  * a  A single precision integer.
103369  * b  A single precision integer.
103370  */
sp_256_sub_in_place_8(sp_digit * a,const sp_digit * b)103371 SP_NOINLINE static sp_digit sp_256_sub_in_place_8(sp_digit* a,
103372         const sp_digit* b)
103373 {
103374     __asm__ __volatile__ (
103375         "ldm	%[b]!, {r4, r5}\n\t"
103376         "ldr	r2, [%[a]]\n\t"
103377         "ldr	r3, [%[a], #4]\n\t"
103378 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103379         "subs	r2, r2, r4\n\t"
103380 #else
103381         "sub	r2, r2, r4\n\t"
103382 #endif
103383 #ifdef WOLFSSL_KEIL
103384         "sbcs	r3, r3, r5\n\t"
103385 #elif defined(__clang__)
103386         "sbcs	r3, r5\n\t"
103387 #else
103388         "sbc	r3, r5\n\t"
103389 #endif
103390         "stm	%[a]!, {r2, r3}\n\t"
103391         "ldm	%[b]!, {r4, r5}\n\t"
103392         "ldr	r2, [%[a]]\n\t"
103393         "ldr	r3, [%[a], #4]\n\t"
103394 #ifdef WOLFSSL_KEIL
103395         "sbcs	r2, r2, r4\n\t"
103396 #elif defined(__clang__)
103397         "sbcs	r2, r4\n\t"
103398 #else
103399         "sbc	r2, r4\n\t"
103400 #endif
103401 #ifdef WOLFSSL_KEIL
103402         "sbcs	r3, r3, r5\n\t"
103403 #elif defined(__clang__)
103404         "sbcs	r3, r5\n\t"
103405 #else
103406         "sbc	r3, r5\n\t"
103407 #endif
103408         "stm	%[a]!, {r2, r3}\n\t"
103409         "ldm	%[b]!, {r4, r5}\n\t"
103410         "ldr	r2, [%[a]]\n\t"
103411         "ldr	r3, [%[a], #4]\n\t"
103412 #ifdef WOLFSSL_KEIL
103413         "sbcs	r2, r2, r4\n\t"
103414 #elif defined(__clang__)
103415         "sbcs	r2, r4\n\t"
103416 #else
103417         "sbc	r2, r4\n\t"
103418 #endif
103419 #ifdef WOLFSSL_KEIL
103420         "sbcs	r3, r3, r5\n\t"
103421 #elif defined(__clang__)
103422         "sbcs	r3, r5\n\t"
103423 #else
103424         "sbc	r3, r5\n\t"
103425 #endif
103426         "stm	%[a]!, {r2, r3}\n\t"
103427         "ldm	%[b]!, {r4, r5}\n\t"
103428         "ldr	r2, [%[a]]\n\t"
103429         "ldr	r3, [%[a], #4]\n\t"
103430 #ifdef WOLFSSL_KEIL
103431         "sbcs	r2, r2, r4\n\t"
103432 #elif defined(__clang__)
103433         "sbcs	r2, r4\n\t"
103434 #else
103435         "sbc	r2, r4\n\t"
103436 #endif
103437 #ifdef WOLFSSL_KEIL
103438         "sbcs	r3, r3, r5\n\t"
103439 #elif defined(__clang__)
103440         "sbcs	r3, r5\n\t"
103441 #else
103442         "sbc	r3, r5\n\t"
103443 #endif
103444         "stm	%[a]!, {r2, r3}\n\t"
103445 #ifdef WOLFSSL_KEIL
103446         "sbcs	%[a], %[a], %[a]\n\t"
103447 #elif defined(__clang__)
103448         "sbcs	%[a], %[a]\n\t"
103449 #else
103450         "sbc	%[a], %[a]\n\t"
103451 #endif
103452         : [a] "+r" (a), [b] "+r" (b)
103453         :
103454         : "memory", "r2", "r3", "r4", "r5"
103455     );
103456     return (uint32_t)(size_t)a;
103457 }
103458 
103459 #endif /* WOLFSSL_SP_SMALL */
103460 /* Mul a by digit b into r. (r = a * b)
103461  *
103462  * r  A single precision integer.
103463  * a  A single precision integer.
103464  * b  A single precision digit.
103465  */
sp_256_mul_d_8(sp_digit * r,const sp_digit * a,sp_digit b)103466 SP_NOINLINE static void sp_256_mul_d_8(sp_digit* r, const sp_digit* a,
103467         sp_digit b)
103468 {
103469     __asm__ __volatile__ (
103470         "movs	r6, #32\n\t"
103471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103472         "adds	r6, r6, %[a]\n\t"
103473 #else
103474         "add	r6, r6, %[a]\n\t"
103475 #endif
103476         "mov	r8, %[r]\n\t"
103477         "mov	r9, r6\n\t"
103478         "movs	r3, #0\n\t"
103479         "movs	r4, #0\n\t"
103480         "\n"
103481     "L_sp_256_mul_d_8_%=:\n\t"
103482         "movs	%[r], #0\n\t"
103483         "movs	r5, #0\n\t"
103484         "# A[] * B\n\t"
103485         "ldrh	r6, [%[a]]\n\t"
103486         "uxth	r7, %[b]\n\t"
103487 #ifdef WOLFSSL_KEIL
103488         "muls	r7, r6, r7\n\t"
103489 #elif defined(__clang__)
103490         "muls	r7, r6\n\t"
103491 #else
103492         "mul	r7, r6\n\t"
103493 #endif
103494 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103495         "adds	r3, r3, r7\n\t"
103496 #else
103497         "add	r3, r3, r7\n\t"
103498 #endif
103499 #ifdef WOLFSSL_KEIL
103500         "adcs	r4, r4, %[r]\n\t"
103501 #elif defined(__clang__)
103502         "adcs	r4, %[r]\n\t"
103503 #else
103504         "adc	r4, %[r]\n\t"
103505 #endif
103506 #ifdef WOLFSSL_KEIL
103507         "adcs	r5, r5, %[r]\n\t"
103508 #elif defined(__clang__)
103509         "adcs	r5, %[r]\n\t"
103510 #else
103511         "adc	r5, %[r]\n\t"
103512 #endif
103513 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103514         "lsrs	r7, %[b], #16\n\t"
103515 #else
103516         "lsr	r7, %[b], #16\n\t"
103517 #endif
103518 #ifdef WOLFSSL_KEIL
103519         "muls	r6, r7, r6\n\t"
103520 #elif defined(__clang__)
103521         "muls	r6, r7\n\t"
103522 #else
103523         "mul	r6, r7\n\t"
103524 #endif
103525 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103526         "lsrs	r7, r6, #16\n\t"
103527 #else
103528         "lsr	r7, r6, #16\n\t"
103529 #endif
103530 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103531         "lsls	r6, r6, #16\n\t"
103532 #else
103533         "lsl	r6, r6, #16\n\t"
103534 #endif
103535 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103536         "adds	r3, r3, r6\n\t"
103537 #else
103538         "add	r3, r3, r6\n\t"
103539 #endif
103540 #ifdef WOLFSSL_KEIL
103541         "adcs	r4, r4, r7\n\t"
103542 #elif defined(__clang__)
103543         "adcs	r4, r7\n\t"
103544 #else
103545         "adc	r4, r7\n\t"
103546 #endif
103547 #ifdef WOLFSSL_KEIL
103548         "adcs	r5, r5, %[r]\n\t"
103549 #elif defined(__clang__)
103550         "adcs	r5, %[r]\n\t"
103551 #else
103552         "adc	r5, %[r]\n\t"
103553 #endif
103554         "ldr	r6, [%[a]]\n\t"
103555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103556         "lsrs	r6, r6, #16\n\t"
103557 #else
103558         "lsr	r6, r6, #16\n\t"
103559 #endif
103560 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103561         "lsrs	r7, %[b], #16\n\t"
103562 #else
103563         "lsr	r7, %[b], #16\n\t"
103564 #endif
103565 #ifdef WOLFSSL_KEIL
103566         "muls	r7, r6, r7\n\t"
103567 #elif defined(__clang__)
103568         "muls	r7, r6\n\t"
103569 #else
103570         "mul	r7, r6\n\t"
103571 #endif
103572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103573         "adds	r4, r4, r7\n\t"
103574 #else
103575         "add	r4, r4, r7\n\t"
103576 #endif
103577 #ifdef WOLFSSL_KEIL
103578         "adcs	r5, r5, %[r]\n\t"
103579 #elif defined(__clang__)
103580         "adcs	r5, %[r]\n\t"
103581 #else
103582         "adc	r5, %[r]\n\t"
103583 #endif
103584         "uxth	r7, %[b]\n\t"
103585 #ifdef WOLFSSL_KEIL
103586         "muls	r6, r7, r6\n\t"
103587 #elif defined(__clang__)
103588         "muls	r6, r7\n\t"
103589 #else
103590         "mul	r6, r7\n\t"
103591 #endif
103592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103593         "lsrs	r7, r6, #16\n\t"
103594 #else
103595         "lsr	r7, r6, #16\n\t"
103596 #endif
103597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103598         "lsls	r6, r6, #16\n\t"
103599 #else
103600         "lsl	r6, r6, #16\n\t"
103601 #endif
103602 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103603         "adds	r3, r3, r6\n\t"
103604 #else
103605         "add	r3, r3, r6\n\t"
103606 #endif
103607 #ifdef WOLFSSL_KEIL
103608         "adcs	r4, r4, r7\n\t"
103609 #elif defined(__clang__)
103610         "adcs	r4, r7\n\t"
103611 #else
103612         "adc	r4, r7\n\t"
103613 #endif
103614 #ifdef WOLFSSL_KEIL
103615         "adcs	r5, r5, %[r]\n\t"
103616 #elif defined(__clang__)
103617         "adcs	r5, %[r]\n\t"
103618 #else
103619         "adc	r5, %[r]\n\t"
103620 #endif
103621         "# A[] * B - Done\n\t"
103622         "mov	%[r], r8\n\t"
103623         "str	r3, [%[r]]\n\t"
103624         "movs	r3, r4\n\t"
103625         "movs	r4, r5\n\t"
103626 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103627         "adds	%[r], %[r], #4\n\t"
103628 #else
103629         "add	%[r], %[r], #4\n\t"
103630 #endif
103631 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103632         "adds	%[a], %[a], #4\n\t"
103633 #else
103634         "add	%[a], %[a], #4\n\t"
103635 #endif
103636         "mov	r8, %[r]\n\t"
103637         "cmp	%[a], r9\n\t"
103638         "blt	L_sp_256_mul_d_8_%=\n\t"
103639         "str	r3, [%[r]]\n\t"
103640         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
103641         :
103642         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
103643     );
103644 }
103645 
103646 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
103647  *
103648  * d1   The high order half of the number to divide.
103649  * d0   The low order half of the number to divide.
103650  * div  The dividend.
103651  * returns the result of the division.
103652  *
103653  * Note that this is an approximate div. It may give an answer 1 larger.
103654  */
div_256_word_8(sp_digit d1,sp_digit d0,sp_digit div)103655 SP_NOINLINE static sp_digit div_256_word_8(sp_digit d1, sp_digit d0,
103656         sp_digit div)
103657 {
103658     __asm__ __volatile__ (
103659         "movs	r3, #0\n\t"
103660 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103661         "lsrs	r5, %[div], #1\n\t"
103662 #else
103663         "lsr	r5, %[div], #1\n\t"
103664 #endif
103665 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103666         "adds	r5, r5, #1\n\t"
103667 #else
103668         "add	r5, r5, #1\n\t"
103669 #endif
103670         "mov	r8, %[d0]\n\t"
103671         "mov	r9, %[d1]\n\t"
103672         "# Do top 32\n\t"
103673         "movs	r6, r5\n\t"
103674 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103675         "subs	r6, r6, %[d1]\n\t"
103676 #else
103677         "sub	r6, r6, %[d1]\n\t"
103678 #endif
103679 #ifdef WOLFSSL_KEIL
103680         "sbcs	r6, r6, r6\n\t"
103681 #elif defined(__clang__)
103682         "sbcs	r6, r6\n\t"
103683 #else
103684         "sbc	r6, r6\n\t"
103685 #endif
103686 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103687         "adds	r3, r3, r3\n\t"
103688 #else
103689         "add	r3, r3, r3\n\t"
103690 #endif
103691 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103692         "subs	r3, r3, r6\n\t"
103693 #else
103694         "sub	r3, r3, r6\n\t"
103695 #endif
103696 #ifdef WOLFSSL_KEIL
103697         "ands	r6, r6, r5\n\t"
103698 #elif defined(__clang__)
103699         "ands	r6, r5\n\t"
103700 #else
103701         "and	r6, r5\n\t"
103702 #endif
103703 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103704         "subs	%[d1], %[d1], r6\n\t"
103705 #else
103706         "sub	%[d1], %[d1], r6\n\t"
103707 #endif
103708         "movs	r4, #29\n\t"
103709         "\n"
103710     "L_div_256_word_8_loop_%=:\n\t"
103711 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103712         "lsls	%[d0], %[d0], #1\n\t"
103713 #else
103714         "lsl	%[d0], %[d0], #1\n\t"
103715 #endif
103716 #ifdef WOLFSSL_KEIL
103717         "adcs	%[d1], %[d1], %[d1]\n\t"
103718 #elif defined(__clang__)
103719         "adcs	%[d1], %[d1]\n\t"
103720 #else
103721         "adc	%[d1], %[d1]\n\t"
103722 #endif
103723         "movs	r6, r5\n\t"
103724 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103725         "subs	r6, r6, %[d1]\n\t"
103726 #else
103727         "sub	r6, r6, %[d1]\n\t"
103728 #endif
103729 #ifdef WOLFSSL_KEIL
103730         "sbcs	r6, r6, r6\n\t"
103731 #elif defined(__clang__)
103732         "sbcs	r6, r6\n\t"
103733 #else
103734         "sbc	r6, r6\n\t"
103735 #endif
103736 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103737         "adds	r3, r3, r3\n\t"
103738 #else
103739         "add	r3, r3, r3\n\t"
103740 #endif
103741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103742         "subs	r3, r3, r6\n\t"
103743 #else
103744         "sub	r3, r3, r6\n\t"
103745 #endif
103746 #ifdef WOLFSSL_KEIL
103747         "ands	r6, r6, r5\n\t"
103748 #elif defined(__clang__)
103749         "ands	r6, r5\n\t"
103750 #else
103751         "and	r6, r5\n\t"
103752 #endif
103753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103754         "subs	%[d1], %[d1], r6\n\t"
103755 #else
103756         "sub	%[d1], %[d1], r6\n\t"
103757 #endif
103758 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103759         "subs	r4, r4, #1\n\t"
103760 #else
103761         "sub	r4, r4, #1\n\t"
103762 #endif
103763         "bpl	L_div_256_word_8_loop_%=\n\t"
103764         "movs	r7, #0\n\t"
103765 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103766         "adds	r3, r3, r3\n\t"
103767 #else
103768         "add	r3, r3, r3\n\t"
103769 #endif
103770 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103771         "adds	r3, r3, #1\n\t"
103772 #else
103773         "add	r3, r3, #1\n\t"
103774 #endif
103775         "# r * div - Start\n\t"
103776         "uxth	%[d1], r3\n\t"
103777         "uxth	r4, %[div]\n\t"
103778 #ifdef WOLFSSL_KEIL
103779         "muls	r4, %[d1], r4\n\t"
103780 #elif defined(__clang__)
103781         "muls	r4, %[d1]\n\t"
103782 #else
103783         "mul	r4, %[d1]\n\t"
103784 #endif
103785 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103786         "lsrs	r6, %[div], #16\n\t"
103787 #else
103788         "lsr	r6, %[div], #16\n\t"
103789 #endif
103790 #ifdef WOLFSSL_KEIL
103791         "muls	%[d1], r6, %[d1]\n\t"
103792 #elif defined(__clang__)
103793         "muls	%[d1], r6\n\t"
103794 #else
103795         "mul	%[d1], r6\n\t"
103796 #endif
103797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103798         "lsrs	r5, %[d1], #16\n\t"
103799 #else
103800         "lsr	r5, %[d1], #16\n\t"
103801 #endif
103802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103803         "lsls	%[d1], %[d1], #16\n\t"
103804 #else
103805         "lsl	%[d1], %[d1], #16\n\t"
103806 #endif
103807 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103808         "adds	r4, r4, %[d1]\n\t"
103809 #else
103810         "add	r4, r4, %[d1]\n\t"
103811 #endif
103812 #ifdef WOLFSSL_KEIL
103813         "adcs	r5, r5, r7\n\t"
103814 #elif defined(__clang__)
103815         "adcs	r5, r7\n\t"
103816 #else
103817         "adc	r5, r7\n\t"
103818 #endif
103819 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103820         "lsrs	%[d1], r3, #16\n\t"
103821 #else
103822         "lsr	%[d1], r3, #16\n\t"
103823 #endif
103824 #ifdef WOLFSSL_KEIL
103825         "muls	r6, %[d1], r6\n\t"
103826 #elif defined(__clang__)
103827         "muls	r6, %[d1]\n\t"
103828 #else
103829         "mul	r6, %[d1]\n\t"
103830 #endif
103831 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103832         "adds	r5, r5, r6\n\t"
103833 #else
103834         "add	r5, r5, r6\n\t"
103835 #endif
103836         "uxth	r6, %[div]\n\t"
103837 #ifdef WOLFSSL_KEIL
103838         "muls	%[d1], r6, %[d1]\n\t"
103839 #elif defined(__clang__)
103840         "muls	%[d1], r6\n\t"
103841 #else
103842         "mul	%[d1], r6\n\t"
103843 #endif
103844 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103845         "lsrs	r6, %[d1], #16\n\t"
103846 #else
103847         "lsr	r6, %[d1], #16\n\t"
103848 #endif
103849 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103850         "lsls	%[d1], %[d1], #16\n\t"
103851 #else
103852         "lsl	%[d1], %[d1], #16\n\t"
103853 #endif
103854 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103855         "adds	r4, r4, %[d1]\n\t"
103856 #else
103857         "add	r4, r4, %[d1]\n\t"
103858 #endif
103859 #ifdef WOLFSSL_KEIL
103860         "adcs	r5, r5, r6\n\t"
103861 #elif defined(__clang__)
103862         "adcs	r5, r6\n\t"
103863 #else
103864         "adc	r5, r6\n\t"
103865 #endif
103866         "# r * div - Done\n\t"
103867         "mov	%[d1], r8\n\t"
103868 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103869         "subs	%[d1], %[d1], r4\n\t"
103870 #else
103871         "sub	%[d1], %[d1], r4\n\t"
103872 #endif
103873         "movs	r4, %[d1]\n\t"
103874         "mov	%[d1], r9\n\t"
103875 #ifdef WOLFSSL_KEIL
103876         "sbcs	%[d1], %[d1], r5\n\t"
103877 #elif defined(__clang__)
103878         "sbcs	%[d1], r5\n\t"
103879 #else
103880         "sbc	%[d1], r5\n\t"
103881 #endif
103882         "movs	r5, %[d1]\n\t"
103883 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103884         "adds	r3, r3, r5\n\t"
103885 #else
103886         "add	r3, r3, r5\n\t"
103887 #endif
103888         "# r * div - Start\n\t"
103889         "uxth	%[d1], r3\n\t"
103890         "uxth	r4, %[div]\n\t"
103891 #ifdef WOLFSSL_KEIL
103892         "muls	r4, %[d1], r4\n\t"
103893 #elif defined(__clang__)
103894         "muls	r4, %[d1]\n\t"
103895 #else
103896         "mul	r4, %[d1]\n\t"
103897 #endif
103898 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103899         "lsrs	r6, %[div], #16\n\t"
103900 #else
103901         "lsr	r6, %[div], #16\n\t"
103902 #endif
103903 #ifdef WOLFSSL_KEIL
103904         "muls	%[d1], r6, %[d1]\n\t"
103905 #elif defined(__clang__)
103906         "muls	%[d1], r6\n\t"
103907 #else
103908         "mul	%[d1], r6\n\t"
103909 #endif
103910 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103911         "lsrs	r5, %[d1], #16\n\t"
103912 #else
103913         "lsr	r5, %[d1], #16\n\t"
103914 #endif
103915 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103916         "lsls	%[d1], %[d1], #16\n\t"
103917 #else
103918         "lsl	%[d1], %[d1], #16\n\t"
103919 #endif
103920 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103921         "adds	r4, r4, %[d1]\n\t"
103922 #else
103923         "add	r4, r4, %[d1]\n\t"
103924 #endif
103925 #ifdef WOLFSSL_KEIL
103926         "adcs	r5, r5, r7\n\t"
103927 #elif defined(__clang__)
103928         "adcs	r5, r7\n\t"
103929 #else
103930         "adc	r5, r7\n\t"
103931 #endif
103932 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103933         "lsrs	%[d1], r3, #16\n\t"
103934 #else
103935         "lsr	%[d1], r3, #16\n\t"
103936 #endif
103937 #ifdef WOLFSSL_KEIL
103938         "muls	r6, %[d1], r6\n\t"
103939 #elif defined(__clang__)
103940         "muls	r6, %[d1]\n\t"
103941 #else
103942         "mul	r6, %[d1]\n\t"
103943 #endif
103944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103945         "adds	r5, r5, r6\n\t"
103946 #else
103947         "add	r5, r5, r6\n\t"
103948 #endif
103949         "uxth	r6, %[div]\n\t"
103950 #ifdef WOLFSSL_KEIL
103951         "muls	%[d1], r6, %[d1]\n\t"
103952 #elif defined(__clang__)
103953         "muls	%[d1], r6\n\t"
103954 #else
103955         "mul	%[d1], r6\n\t"
103956 #endif
103957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103958         "lsrs	r6, %[d1], #16\n\t"
103959 #else
103960         "lsr	r6, %[d1], #16\n\t"
103961 #endif
103962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103963         "lsls	%[d1], %[d1], #16\n\t"
103964 #else
103965         "lsl	%[d1], %[d1], #16\n\t"
103966 #endif
103967 #if defined(__clang__) || defined(WOLFSSL_KEIL)
103968         "adds	r4, r4, %[d1]\n\t"
103969 #else
103970         "add	r4, r4, %[d1]\n\t"
103971 #endif
103972 #ifdef WOLFSSL_KEIL
103973         "adcs	r5, r5, r6\n\t"
103974 #elif defined(__clang__)
103975         "adcs	r5, r6\n\t"
103976 #else
103977         "adc	r5, r6\n\t"
103978 #endif
103979         "# r * div - Done\n\t"
103980         "mov	%[d1], r8\n\t"
103981         "mov	r6, r9\n\t"
103982 #ifdef WOLFSSL_KEIL
103983         "subs	r4, %[d1], r4\n\t"
103984 #else
103985 #ifdef __clang__
103986         "subs	r4, %[d1], r4\n\t"
103987 #else
103988         "sub	r4, %[d1], r4\n\t"
103989 #endif
103990 #endif
103991 #ifdef WOLFSSL_KEIL
103992         "sbcs	r6, r6, r5\n\t"
103993 #elif defined(__clang__)
103994         "sbcs	r6, r5\n\t"
103995 #else
103996         "sbc	r6, r5\n\t"
103997 #endif
103998         "movs	r5, r6\n\t"
103999 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104000         "adds	r3, r3, r5\n\t"
104001 #else
104002         "add	r3, r3, r5\n\t"
104003 #endif
104004         "# r * div - Start\n\t"
104005         "uxth	%[d1], r3\n\t"
104006         "uxth	r4, %[div]\n\t"
104007 #ifdef WOLFSSL_KEIL
104008         "muls	r4, %[d1], r4\n\t"
104009 #elif defined(__clang__)
104010         "muls	r4, %[d1]\n\t"
104011 #else
104012         "mul	r4, %[d1]\n\t"
104013 #endif
104014 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104015         "lsrs	r6, %[div], #16\n\t"
104016 #else
104017         "lsr	r6, %[div], #16\n\t"
104018 #endif
104019 #ifdef WOLFSSL_KEIL
104020         "muls	%[d1], r6, %[d1]\n\t"
104021 #elif defined(__clang__)
104022         "muls	%[d1], r6\n\t"
104023 #else
104024         "mul	%[d1], r6\n\t"
104025 #endif
104026 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104027         "lsrs	r5, %[d1], #16\n\t"
104028 #else
104029         "lsr	r5, %[d1], #16\n\t"
104030 #endif
104031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104032         "lsls	%[d1], %[d1], #16\n\t"
104033 #else
104034         "lsl	%[d1], %[d1], #16\n\t"
104035 #endif
104036 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104037         "adds	r4, r4, %[d1]\n\t"
104038 #else
104039         "add	r4, r4, %[d1]\n\t"
104040 #endif
104041 #ifdef WOLFSSL_KEIL
104042         "adcs	r5, r5, r7\n\t"
104043 #elif defined(__clang__)
104044         "adcs	r5, r7\n\t"
104045 #else
104046         "adc	r5, r7\n\t"
104047 #endif
104048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104049         "lsrs	%[d1], r3, #16\n\t"
104050 #else
104051         "lsr	%[d1], r3, #16\n\t"
104052 #endif
104053 #ifdef WOLFSSL_KEIL
104054         "muls	r6, %[d1], r6\n\t"
104055 #elif defined(__clang__)
104056         "muls	r6, %[d1]\n\t"
104057 #else
104058         "mul	r6, %[d1]\n\t"
104059 #endif
104060 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104061         "adds	r5, r5, r6\n\t"
104062 #else
104063         "add	r5, r5, r6\n\t"
104064 #endif
104065         "uxth	r6, %[div]\n\t"
104066 #ifdef WOLFSSL_KEIL
104067         "muls	%[d1], r6, %[d1]\n\t"
104068 #elif defined(__clang__)
104069         "muls	%[d1], r6\n\t"
104070 #else
104071         "mul	%[d1], r6\n\t"
104072 #endif
104073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104074         "lsrs	r6, %[d1], #16\n\t"
104075 #else
104076         "lsr	r6, %[d1], #16\n\t"
104077 #endif
104078 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104079         "lsls	%[d1], %[d1], #16\n\t"
104080 #else
104081         "lsl	%[d1], %[d1], #16\n\t"
104082 #endif
104083 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104084         "adds	r4, r4, %[d1]\n\t"
104085 #else
104086         "add	r4, r4, %[d1]\n\t"
104087 #endif
104088 #ifdef WOLFSSL_KEIL
104089         "adcs	r5, r5, r6\n\t"
104090 #elif defined(__clang__)
104091         "adcs	r5, r6\n\t"
104092 #else
104093         "adc	r5, r6\n\t"
104094 #endif
104095         "# r * div - Done\n\t"
104096         "mov	%[d1], r8\n\t"
104097         "mov	r6, r9\n\t"
104098 #ifdef WOLFSSL_KEIL
104099         "subs	r4, %[d1], r4\n\t"
104100 #else
104101 #ifdef __clang__
104102         "subs	r4, %[d1], r4\n\t"
104103 #else
104104         "sub	r4, %[d1], r4\n\t"
104105 #endif
104106 #endif
104107 #ifdef WOLFSSL_KEIL
104108         "sbcs	r6, r6, r5\n\t"
104109 #elif defined(__clang__)
104110         "sbcs	r6, r5\n\t"
104111 #else
104112         "sbc	r6, r5\n\t"
104113 #endif
104114         "movs	r5, r6\n\t"
104115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104116         "adds	r3, r3, r5\n\t"
104117 #else
104118         "add	r3, r3, r5\n\t"
104119 #endif
104120         "movs	r6, %[div]\n\t"
104121 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104122         "subs	r6, r6, r4\n\t"
104123 #else
104124         "sub	r6, r6, r4\n\t"
104125 #endif
104126 #ifdef WOLFSSL_KEIL
104127         "sbcs	r6, r6, r6\n\t"
104128 #elif defined(__clang__)
104129         "sbcs	r6, r6\n\t"
104130 #else
104131         "sbc	r6, r6\n\t"
104132 #endif
104133 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104134         "subs	r3, r3, r6\n\t"
104135 #else
104136         "sub	r3, r3, r6\n\t"
104137 #endif
104138         "movs	%[d1], r3\n\t"
104139         : [d1] "+r" (d1), [d0] "+r" (d0), [div] "+r" (div)
104140         :
104141         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
104142     );
104143     return (uint32_t)(size_t)d1;
104144 }
104145 
104146 /* AND m into each word of a and store in r.
104147  *
104148  * r  A single precision integer.
104149  * a  A single precision integer.
104150  * m  Mask to AND against each digit.
104151  */
sp_256_mask_8(sp_digit * r,const sp_digit * a,sp_digit m)104152 static void sp_256_mask_8(sp_digit* r, const sp_digit* a, sp_digit m)
104153 {
104154 #ifdef WOLFSSL_SP_SMALL
104155     int i;
104156 
104157     for (i=0; i<8; i++) {
104158         r[i] = a[i] & m;
104159     }
104160 #else
104161     r[0] = a[0] & m;
104162     r[1] = a[1] & m;
104163     r[2] = a[2] & m;
104164     r[3] = a[3] & m;
104165     r[4] = a[4] & m;
104166     r[5] = a[5] & m;
104167     r[6] = a[6] & m;
104168     r[7] = a[7] & m;
104169 #endif
104170 }
104171 
104172 /* Divide d in a and put remainder into r (m*d + r = a)
104173  * m is not calculated as it is not needed at this time.
104174  *
104175  * a  Number to be divided.
104176  * d  Number to divide with.
104177  * m  Multiplier result.
104178  * r  Remainder from the division.
104179  * returns MP_OKAY indicating success.
104180  */
sp_256_div_8(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)104181 static WC_INLINE int sp_256_div_8(const sp_digit* a, const sp_digit* d, sp_digit* m,
104182         sp_digit* r)
104183 {
104184     sp_digit t1[16], t2[9];
104185     sp_digit div, r1;
104186     int i;
104187 
104188     (void)m;
104189 
104190     div = d[7];
104191     XMEMCPY(t1, a, sizeof(*t1) * 2 * 8);
104192     for (i=7; i>=0; i--) {
104193         sp_digit hi = t1[8 + i] - (t1[8 + i] == div);
104194         r1 = div_256_word_8(hi, t1[8 + i - 1], div);
104195 
104196         sp_256_mul_d_8(t2, d, r1);
104197         t1[8 + i] += sp_256_sub_in_place_8(&t1[i], t2);
104198         t1[8 + i] -= t2[8];
104199         sp_256_mask_8(t2, d, t1[8 + i]);
104200         t1[8 + i] += sp_256_add_8(&t1[i], &t1[i], t2);
104201         sp_256_mask_8(t2, d, t1[8 + i]);
104202         t1[8 + i] += sp_256_add_8(&t1[i], &t1[i], t2);
104203     }
104204 
104205     r1 = sp_256_cmp_8(t1, d) >= 0;
104206     sp_256_cond_sub_8(r, t1, d, (sp_digit)0 - r1);
104207 
104208     return MP_OKAY;
104209 }
104210 
104211 /* Reduce a modulo m into r. (r = a mod m)
104212  *
104213  * r  A single precision number that is the reduced result.
104214  * a  A single precision number that is to be reduced.
104215  * m  A single precision number that is the modulus to reduce with.
104216  * returns MP_OKAY indicating success.
104217  */
sp_256_mod_8(sp_digit * r,const sp_digit * a,const sp_digit * m)104218 static WC_INLINE int sp_256_mod_8(sp_digit* r, const sp_digit* a, const sp_digit* m)
104219 {
104220     return sp_256_div_8(a, m, NULL, r);
104221 }
104222 
104223 #endif
104224 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
104225 /* Multiply two number mod the order of P256 curve. (r = a * b mod order)
104226  *
104227  * r  Result of the multiplication.
104228  * a  First operand of the multiplication.
104229  * b  Second operand of the multiplication.
104230  */
sp_256_mont_mul_order_8(sp_digit * r,const sp_digit * a,const sp_digit * b)104231 static void sp_256_mont_mul_order_8(sp_digit* r, const sp_digit* a, const sp_digit* b)
104232 {
104233     sp_256_mul_8(r, a, b);
104234     sp_256_mont_reduce_order_8(r, p256_order, p256_mp_order);
104235 }
104236 
104237 #if defined(HAVE_ECC_SIGN) || (defined(HAVE_ECC_VERIFY) && defined(WOLFSSL_SP_SMALL))
104238 #ifdef WOLFSSL_SP_SMALL
104239 /* Order-2 for the P256 curve. */
104240 static const uint32_t p256_order_minus_2[8] = {
104241     0xfc63254fU,0xf3b9cac2U,0xa7179e84U,0xbce6faadU,0xffffffffU,0xffffffffU,
104242     0x00000000U,0xffffffffU
104243 };
104244 #else
104245 /* The low half of the order-2 of the P256 curve. */
104246 static const sp_int_digit p256_order_low[4] = {
104247     0xfc63254fU,0xf3b9cac2U,0xa7179e84U,0xbce6faadU
104248 };
104249 #endif /* WOLFSSL_SP_SMALL */
104250 
104251 /* Square number mod the order of P256 curve. (r = a * a mod order)
104252  *
104253  * r  Result of the squaring.
104254  * a  Number to square.
104255  */
sp_256_mont_sqr_order_8(sp_digit * r,const sp_digit * a)104256 static void sp_256_mont_sqr_order_8(sp_digit* r, const sp_digit* a)
104257 {
104258     sp_256_sqr_8(r, a);
104259     sp_256_mont_reduce_order_8(r, p256_order, p256_mp_order);
104260 }
104261 
104262 #ifndef WOLFSSL_SP_SMALL
104263 /* Square number mod the order of P256 curve a number of times.
104264  * (r = a ^ n mod order)
104265  *
104266  * r  Result of the squaring.
104267  * a  Number to square.
104268  */
sp_256_mont_sqr_n_order_8(sp_digit * r,const sp_digit * a,int n)104269 static void sp_256_mont_sqr_n_order_8(sp_digit* r, const sp_digit* a, int n)
104270 {
104271     int i;
104272 
104273     sp_256_mont_sqr_order_8(r, a);
104274     for (i=1; i<n; i++) {
104275         sp_256_mont_sqr_order_8(r, r);
104276     }
104277 }
104278 #endif /* !WOLFSSL_SP_SMALL */
104279 
104280 /* Invert the number, in Montgomery form, modulo the order of the P256 curve.
104281  * (r = 1 / a mod order)
104282  *
104283  * r   Inverse result.
104284  * a   Number to invert.
104285  * td  Temporary data.
104286  */
104287 
104288 #ifdef WOLFSSL_SP_NONBLOCK
104289 typedef struct sp_256_mont_inv_order_8_ctx {
104290     int state;
104291     int i;
104292 } sp_256_mont_inv_order_8_ctx;
sp_256_mont_inv_order_8_nb(sp_ecc_ctx_t * sp_ctx,sp_digit * r,const sp_digit * a,sp_digit * t)104293 static int sp_256_mont_inv_order_8_nb(sp_ecc_ctx_t* sp_ctx, sp_digit* r, const sp_digit* a,
104294         sp_digit* t)
104295 {
104296     int err = FP_WOULDBLOCK;
104297     sp_256_mont_inv_order_8_ctx* ctx = (sp_256_mont_inv_order_8_ctx*)sp_ctx;
104298 
104299     typedef char ctx_size_test[sizeof(sp_256_mont_inv_order_8_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
104300     (void)sizeof(ctx_size_test);
104301 
104302     switch (ctx->state) {
104303     case 0:
104304         XMEMCPY(t, a, sizeof(sp_digit) * 8);
104305         ctx->i = 254;
104306         ctx->state = 1;
104307         break;
104308     case 1:
104309         sp_256_mont_sqr_order_8(t, t);
104310         ctx->state = 2;
104311         break;
104312     case 2:
104313         if ((p256_order_minus_2[ctx->i / 32] & ((sp_int_digit)1 << (ctx->i % 32))) != 0) {
104314             sp_256_mont_mul_order_8(t, t, a);
104315         }
104316         ctx->i--;
104317         ctx->state = (ctx->i == 0) ? 3 : 1;
104318         break;
104319     case 3:
104320         XMEMCPY(r, t, sizeof(sp_digit) * 8U);
104321         err = MP_OKAY;
104322         break;
104323     }
104324     return err;
104325 }
104326 #endif /* WOLFSSL_SP_NONBLOCK */
104327 
sp_256_mont_inv_order_8(sp_digit * r,const sp_digit * a,sp_digit * td)104328 static void sp_256_mont_inv_order_8(sp_digit* r, const sp_digit* a,
104329         sp_digit* td)
104330 {
104331 #ifdef WOLFSSL_SP_SMALL
104332     sp_digit* t = td;
104333     int i;
104334 
104335     XMEMCPY(t, a, sizeof(sp_digit) * 8);
104336     for (i=254; i>=0; i--) {
104337         sp_256_mont_sqr_order_8(t, t);
104338         if ((p256_order_minus_2[i / 32] & ((sp_int_digit)1 << (i % 32))) != 0) {
104339             sp_256_mont_mul_order_8(t, t, a);
104340         }
104341     }
104342     XMEMCPY(r, t, sizeof(sp_digit) * 8U);
104343 #else
104344     sp_digit* t = td;
104345     sp_digit* t2 = td + 2 * 8;
104346     sp_digit* t3 = td + 4 * 8;
104347     int i;
104348 
104349     /* t = a^2 */
104350     sp_256_mont_sqr_order_8(t, a);
104351     /* t = a^3 = t * a */
104352     sp_256_mont_mul_order_8(t, t, a);
104353     /* t2= a^c = t ^ 2 ^ 2 */
104354     sp_256_mont_sqr_n_order_8(t2, t, 2);
104355     /* t3= a^f = t2 * t */
104356     sp_256_mont_mul_order_8(t3, t2, t);
104357     /* t2= a^f0 = t3 ^ 2 ^ 4 */
104358     sp_256_mont_sqr_n_order_8(t2, t3, 4);
104359     /* t = a^ff = t2 * t3 */
104360     sp_256_mont_mul_order_8(t, t2, t3);
104361     /* t3= a^ff00 = t ^ 2 ^ 8 */
104362     sp_256_mont_sqr_n_order_8(t2, t, 8);
104363     /* t = a^ffff = t2 * t */
104364     sp_256_mont_mul_order_8(t, t2, t);
104365     /* t2= a^ffff0000 = t ^ 2 ^ 16 */
104366     sp_256_mont_sqr_n_order_8(t2, t, 16);
104367     /* t = a^ffffffff = t2 * t */
104368     sp_256_mont_mul_order_8(t, t2, t);
104369     /* t2= a^ffffffff0000000000000000 = t ^ 2 ^ 64  */
104370     sp_256_mont_sqr_n_order_8(t2, t, 64);
104371     /* t2= a^ffffffff00000000ffffffff = t2 * t */
104372     sp_256_mont_mul_order_8(t2, t2, t);
104373     /* t2= a^ffffffff00000000ffffffff00000000 = t2 ^ 2 ^ 32  */
104374     sp_256_mont_sqr_n_order_8(t2, t2, 32);
104375     /* t2= a^ffffffff00000000ffffffffffffffff = t2 * t */
104376     sp_256_mont_mul_order_8(t2, t2, t);
104377     /* t2= a^ffffffff00000000ffffffffffffffffbce6 */
104378     for (i=127; i>=112; i--) {
104379         sp_256_mont_sqr_order_8(t2, t2);
104380         if ((p256_order_low[i / 32] & ((sp_int_digit)1 << (i % 32))) != 0) {
104381             sp_256_mont_mul_order_8(t2, t2, a);
104382         }
104383     }
104384     /* t2= a^ffffffff00000000ffffffffffffffffbce6f */
104385     sp_256_mont_sqr_n_order_8(t2, t2, 4);
104386     sp_256_mont_mul_order_8(t2, t2, t3);
104387     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84 */
104388     for (i=107; i>=64; i--) {
104389         sp_256_mont_sqr_order_8(t2, t2);
104390         if ((p256_order_low[i / 32] & ((sp_int_digit)1 << (i % 32))) != 0) {
104391             sp_256_mont_mul_order_8(t2, t2, a);
104392         }
104393     }
104394     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f */
104395     sp_256_mont_sqr_n_order_8(t2, t2, 4);
104396     sp_256_mont_mul_order_8(t2, t2, t3);
104397     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2 */
104398     for (i=59; i>=32; i--) {
104399         sp_256_mont_sqr_order_8(t2, t2);
104400         if ((p256_order_low[i / 32] & ((sp_int_digit)1 << (i % 32))) != 0) {
104401             sp_256_mont_mul_order_8(t2, t2, a);
104402         }
104403     }
104404     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2f */
104405     sp_256_mont_sqr_n_order_8(t2, t2, 4);
104406     sp_256_mont_mul_order_8(t2, t2, t3);
104407     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254 */
104408     for (i=27; i>=0; i--) {
104409         sp_256_mont_sqr_order_8(t2, t2);
104410         if ((p256_order_low[i / 32] & ((sp_int_digit)1 << (i % 32))) != 0) {
104411             sp_256_mont_mul_order_8(t2, t2, a);
104412         }
104413     }
104414     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632540 */
104415     sp_256_mont_sqr_n_order_8(t2, t2, 4);
104416     /* r = a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f */
104417     sp_256_mont_mul_order_8(r, t2, t3);
104418 #endif /* WOLFSSL_SP_SMALL */
104419 }
104420 
104421 #endif /* HAVE_ECC_SIGN || (HAVE_ECC_VERIFY && WOLFSSL_SP_SMALL) */
104422 #endif /* HAVE_ECC_SIGN | HAVE_ECC_VERIFY */
104423 #ifdef HAVE_ECC_SIGN
104424 #ifndef SP_ECC_MAX_SIG_GEN
104425 #define SP_ECC_MAX_SIG_GEN  64
104426 #endif
104427 
104428 /* Calculate second signature value S from R, k and private value.
104429  *
104430  * s = (r * x + e) / k
104431  *
104432  * s    Signature value.
104433  * r    First signature value.
104434  * k    Ephemeral private key.
104435  * x    Private key as a number.
104436  * e    Hash of message as a number.
104437  * tmp  Temporary storage for intermediate numbers.
104438  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
104439  */
sp_256_calc_s_8(sp_digit * s,const sp_digit * r,sp_digit * k,sp_digit * x,const sp_digit * e,sp_digit * tmp)104440 static int sp_256_calc_s_8(sp_digit* s, const sp_digit* r, sp_digit* k,
104441     sp_digit* x, const sp_digit* e, sp_digit* tmp)
104442 {
104443     int err;
104444     sp_digit carry;
104445     sp_int32 c;
104446     sp_digit* kInv = k;
104447 
104448     /* Conv k to Montgomery form (mod order) */
104449         sp_256_mul_8(k, k, p256_norm_order);
104450     err = sp_256_mod_8(k, k, p256_order);
104451     if (err == MP_OKAY) {
104452         sp_256_norm_8(k);
104453 
104454         /* kInv = 1/k mod order */
104455             sp_256_mont_inv_order_8(kInv, k, tmp);
104456         sp_256_norm_8(kInv);
104457 
104458         /* s = r * x + e */
104459             sp_256_mul_8(x, x, r);
104460         err = sp_256_mod_8(x, x, p256_order);
104461     }
104462     if (err == MP_OKAY) {
104463         sp_256_norm_8(x);
104464         carry = sp_256_add_8(s, e, x);
104465         sp_256_cond_sub_8(s, s, p256_order, 0 - carry);
104466         sp_256_norm_8(s);
104467         c = sp_256_cmp_8(s, p256_order);
104468         sp_256_cond_sub_8(s, s, p256_order,
104469             (sp_digit)0 - (sp_digit)(c >= 0));
104470         sp_256_norm_8(s);
104471 
104472         /* s = s * k^-1 mod order */
104473             sp_256_mont_mul_order_8(s, s, kInv);
104474         sp_256_norm_8(s);
104475     }
104476 
104477     return err;
104478 }
104479 
104480 /* Sign the hash using the private key.
104481  *   e = [hash, 256 bits] from binary
104482  *   r = (k.G)->x mod order
104483  *   s = (r * x + e) / k mod order
104484  * The hash is truncated to the first 256 bits.
104485  *
104486  * hash     Hash to sign.
104487  * hashLen  Length of the hash data.
104488  * rng      Random number generator.
104489  * priv     Private part of key - scalar.
104490  * rm       First part of result as an mp_int.
104491  * sm       Sirst part of result as an mp_int.
104492  * heap     Heap to use for allocation.
104493  * returns RNG failures, MEMORY_E when memory allocation fails and
104494  * MP_OKAY on success.
104495  */
104496 #ifdef WOLFSSL_SP_NONBLOCK
104497 typedef struct sp_ecc_sign_256_ctx {
104498     int state;
104499     union {
104500         sp_256_ecc_mulmod_8_ctx mulmod_ctx;
104501         sp_256_mont_inv_order_8_ctx mont_inv_order_ctx;
104502     };
104503     sp_digit e[2*8];
104504     sp_digit x[2*8];
104505     sp_digit k[2*8];
104506     sp_digit r[2*8];
104507     sp_digit tmp[3 * 2*8];
104508     sp_point_256 point;
104509     sp_digit* s;
104510     sp_digit* kInv;
104511     int i;
104512 } sp_ecc_sign_256_ctx;
104513 
sp_ecc_sign_256_nb(sp_ecc_ctx_t * sp_ctx,const byte * hash,word32 hashLen,WC_RNG * rng,mp_int * priv,mp_int * rm,mp_int * sm,mp_int * km,void * heap)104514 int sp_ecc_sign_256_nb(sp_ecc_ctx_t* sp_ctx, const byte* hash, word32 hashLen, WC_RNG* rng,
104515     mp_int* priv, mp_int* rm, mp_int* sm, mp_int* km, void* heap)
104516 {
104517     int err = FP_WOULDBLOCK;
104518     sp_ecc_sign_256_ctx* ctx = (sp_ecc_sign_256_ctx*)sp_ctx->data;
104519 
104520     typedef char ctx_size_test[sizeof(sp_ecc_sign_256_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
104521     (void)sizeof(ctx_size_test);
104522 
104523     (void)heap;
104524 
104525     switch (ctx->state) {
104526     case 0: /* INIT */
104527         ctx->s = ctx->e;
104528         ctx->kInv = ctx->k;
104529         if (hashLen > 32U) {
104530             hashLen = 32U;
104531         }
104532 
104533         ctx->i = SP_ECC_MAX_SIG_GEN;
104534         ctx->state = 1;
104535         break;
104536     case 1: /* GEN */
104537         /* New random point. */
104538         if (km == NULL || mp_iszero(km)) {
104539             err = sp_256_ecc_gen_k_8(rng, ctx->k);
104540         }
104541         else {
104542             sp_256_from_mp(ctx->k, 8, km);
104543             mp_zero(km);
104544         }
104545         XMEMSET(&ctx->mulmod_ctx, 0, sizeof(ctx->mulmod_ctx));
104546         ctx->state = 2;
104547         break;
104548     case 2: /* MULMOD */
104549         err = sp_256_ecc_mulmod_8_nb((sp_ecc_ctx_t*)&ctx->mulmod_ctx,
104550             &ctx->point, &p256_base, ctx->k, 1, 1, heap);
104551         if (err == MP_OKAY) {
104552             ctx->state = 3;
104553         }
104554         break;
104555     case 3: /* MODORDER */
104556     {
104557         sp_int32 c;
104558         /* r = point->x mod order */
104559         XMEMCPY(ctx->r, ctx->point.x, sizeof(sp_digit) * 8U);
104560         sp_256_norm_8(ctx->r);
104561         c = sp_256_cmp_8(ctx->r, p256_order);
104562         sp_256_cond_sub_8(ctx->r, ctx->r, p256_order,
104563             (sp_digit)0 - (sp_digit)(c >= 0));
104564         sp_256_norm_8(ctx->r);
104565 
104566         sp_256_from_mp(ctx->x, 8, priv);
104567         sp_256_from_bin(ctx->e, 8, hash, (int)hashLen);
104568         ctx->state = 4;
104569         break;
104570     }
104571     case 4: /* KMODORDER */
104572         /* Conv k to Montgomery form (mod order) */
104573         sp_256_mul_8(ctx->k, ctx->k, p256_norm_order);
104574         err = sp_256_mod_8(ctx->k, ctx->k, p256_order);
104575         if (err == MP_OKAY) {
104576             sp_256_norm_8(ctx->k);
104577             XMEMSET(&ctx->mont_inv_order_ctx, 0, sizeof(ctx->mont_inv_order_ctx));
104578             ctx->state = 5;
104579         }
104580         break;
104581     case 5: /* KINV */
104582         /* kInv = 1/k mod order */
104583         err = sp_256_mont_inv_order_8_nb((sp_ecc_ctx_t*)&ctx->mont_inv_order_ctx, ctx->kInv, ctx->k, ctx->tmp);
104584         if (err == MP_OKAY) {
104585             XMEMSET(&ctx->mont_inv_order_ctx, 0, sizeof(ctx->mont_inv_order_ctx));
104586             ctx->state = 6;
104587         }
104588         break;
104589     case 6: /* KINVNORM */
104590         sp_256_norm_8(ctx->kInv);
104591         ctx->state = 7;
104592         break;
104593     case 7: /* R */
104594         /* s = r * x + e */
104595         sp_256_mul_8(ctx->x, ctx->x, ctx->r);
104596         ctx->state = 8;
104597         break;
104598     case 8: /* S1 */
104599         err = sp_256_mod_8(ctx->x, ctx->x, p256_order);
104600         if (err == MP_OKAY)
104601             ctx->state = 9;
104602         break;
104603     case 9: /* S2 */
104604     {
104605         sp_digit carry;
104606         sp_int32 c;
104607         sp_256_norm_8(ctx->x);
104608         carry = sp_256_add_8(ctx->s, ctx->e, ctx->x);
104609         sp_256_cond_sub_8(ctx->s, ctx->s,
104610             p256_order, 0 - carry);
104611         sp_256_norm_8(ctx->s);
104612         c = sp_256_cmp_8(ctx->s, p256_order);
104613         sp_256_cond_sub_8(ctx->s, ctx->s, p256_order,
104614             (sp_digit)0 - (sp_digit)(c >= 0));
104615         sp_256_norm_8(ctx->s);
104616 
104617         /* s = s * k^-1 mod order */
104618         sp_256_mont_mul_order_8(ctx->s, ctx->s, ctx->kInv);
104619         sp_256_norm_8(ctx->s);
104620 
104621         /* Check that signature is usable. */
104622         if (sp_256_iszero_8(ctx->s) == 0) {
104623             ctx->state = 10;
104624             break;
104625         }
104626     #ifdef WOLFSSL_ECDSA_SET_K_ONE_LOOP
104627         ctx->i = 1;
104628     #endif
104629 
104630         /* not usable gen, try again */
104631         ctx->i--;
104632         if (ctx->i == 0) {
104633             err = RNG_FAILURE_E;
104634         }
104635         ctx->state = 1;
104636         break;
104637     }
104638     case 10: /* RES */
104639         err = sp_256_to_mp(ctx->r, rm);
104640         if (err == MP_OKAY) {
104641             err = sp_256_to_mp(ctx->s, sm);
104642         }
104643         break;
104644     }
104645 
104646     if (err == MP_OKAY && ctx->state != 10) {
104647         err = FP_WOULDBLOCK;
104648     }
104649     if (err != FP_WOULDBLOCK) {
104650         XMEMSET(ctx->e, 0, sizeof(sp_digit) * 2U * 8U);
104651         XMEMSET(ctx->x, 0, sizeof(sp_digit) * 2U * 8U);
104652         XMEMSET(ctx->k, 0, sizeof(sp_digit) * 2U * 8U);
104653         XMEMSET(ctx->r, 0, sizeof(sp_digit) * 2U * 8U);
104654         XMEMSET(ctx->tmp, 0, sizeof(sp_digit) * 3U * 2U * 8U);
104655     }
104656 
104657     return err;
104658 }
104659 #endif /* WOLFSSL_SP_NONBLOCK */
104660 
sp_ecc_sign_256(const byte * hash,word32 hashLen,WC_RNG * rng,const mp_int * priv,mp_int * rm,mp_int * sm,mp_int * km,void * heap)104661 int sp_ecc_sign_256(const byte* hash, word32 hashLen, WC_RNG* rng,
104662     const mp_int* priv, mp_int* rm, mp_int* sm, mp_int* km, void* heap)
104663 {
104664 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
104665     sp_digit* e = NULL;
104666     sp_point_256* point = NULL;
104667 #else
104668     sp_digit e[7 * 2 * 8];
104669     sp_point_256 point[1];
104670 #endif
104671     sp_digit* x = NULL;
104672     sp_digit* k = NULL;
104673     sp_digit* r = NULL;
104674     sp_digit* tmp = NULL;
104675     sp_digit* s = NULL;
104676     sp_int32 c;
104677     int err = MP_OKAY;
104678     int i;
104679 
104680     (void)heap;
104681 
104682 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
104683     if (err == MP_OKAY) {
104684         point = (sp_point_256*)XMALLOC(sizeof(sp_point_256), heap,
104685                                              DYNAMIC_TYPE_ECC);
104686         if (point == NULL)
104687             err = MEMORY_E;
104688     }
104689     if (err == MP_OKAY) {
104690         e = (sp_digit*)XMALLOC(sizeof(sp_digit) * 7 * 2 * 8, heap,
104691                                DYNAMIC_TYPE_ECC);
104692         if (e == NULL)
104693             err = MEMORY_E;
104694     }
104695 #endif
104696 
104697     if (err == MP_OKAY) {
104698         x = e + 2 * 8;
104699         k = e + 4 * 8;
104700         r = e + 6 * 8;
104701         tmp = e + 8 * 8;
104702         s = e;
104703 
104704         if (hashLen > 32U) {
104705             hashLen = 32U;
104706         }
104707     }
104708 
104709     for (i = SP_ECC_MAX_SIG_GEN; err == MP_OKAY && i > 0; i--) {
104710         /* New random point. */
104711         if (km == NULL || mp_iszero(km)) {
104712             err = sp_256_ecc_gen_k_8(rng, k);
104713         }
104714         else {
104715             sp_256_from_mp(k, 8, km);
104716             mp_zero(km);
104717         }
104718         if (err == MP_OKAY) {
104719                 err = sp_256_ecc_mulmod_base_8(point, k, 1, 1, heap);
104720         }
104721 
104722         if (err == MP_OKAY) {
104723             /* r = point->x mod order */
104724             XMEMCPY(r, point->x, sizeof(sp_digit) * 8U);
104725             sp_256_norm_8(r);
104726             c = sp_256_cmp_8(r, p256_order);
104727             sp_256_cond_sub_8(r, r, p256_order,
104728                 (sp_digit)0 - (sp_digit)(c >= 0));
104729             sp_256_norm_8(r);
104730 
104731             sp_256_from_mp(x, 8, priv);
104732             sp_256_from_bin(e, 8, hash, (int)hashLen);
104733 
104734             err = sp_256_calc_s_8(s, r, k, x, e, tmp);
104735         }
104736 
104737         /* Check that signature is usable. */
104738         if ((err == MP_OKAY) && (sp_256_iszero_8(s) == 0)) {
104739             break;
104740         }
104741 #ifdef WOLFSSL_ECDSA_SET_K_ONE_LOOP
104742         i = 1;
104743 #endif
104744     }
104745 
104746     if (i == 0) {
104747         err = RNG_FAILURE_E;
104748     }
104749 
104750     if (err == MP_OKAY) {
104751         err = sp_256_to_mp(r, rm);
104752     }
104753     if (err == MP_OKAY) {
104754         err = sp_256_to_mp(s, sm);
104755     }
104756 
104757 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
104758     if (e != NULL)
104759 #endif
104760     {
104761         ForceZero(e, sizeof(sp_digit) * 7 * 2 * 8);
104762     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
104763         XFREE(e, heap, DYNAMIC_TYPE_ECC);
104764     #endif
104765     }
104766 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
104767     if (point != NULL)
104768 #endif
104769     {
104770         ForceZero(point, sizeof(sp_point_256));
104771     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
104772         XFREE(point, heap, DYNAMIC_TYPE_ECC);
104773     #endif
104774     }
104775 
104776     return err;
104777 }
104778 #endif /* HAVE_ECC_SIGN */
104779 
104780 #ifndef WOLFSSL_SP_SMALL
104781 /* Right shift a by 1 bit into r. (r = a >> 1)
104782  *
104783  * r  A single precision integer.
104784  * a  A single precision integer.
104785  */
sp_256_rshift1_8(sp_digit * r,const sp_digit * a)104786 static void sp_256_rshift1_8(sp_digit* r, const sp_digit* a)
104787 {
104788     __asm__ __volatile__ (
104789         "ldr	r2, [%[a]]\n\t"
104790         "ldr	r3, [%[a], #4]\n\t"
104791 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104792         "lsrs	r2, r2, #1\n\t"
104793 #else
104794         "lsr	r2, r2, #1\n\t"
104795 #endif
104796 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104797         "lsls	r5, r3, #31\n\t"
104798 #else
104799         "lsl	r5, r3, #31\n\t"
104800 #endif
104801 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104802         "lsrs	r3, r3, #1\n\t"
104803 #else
104804         "lsr	r3, r3, #1\n\t"
104805 #endif
104806 #ifdef WOLFSSL_KEIL
104807         "orrs	r2, r2, r5\n\t"
104808 #elif defined(__clang__)
104809         "orrs	r2, r5\n\t"
104810 #else
104811         "orr	r2, r5\n\t"
104812 #endif
104813         "ldr	r4, [%[a], #8]\n\t"
104814         "str	r2, [%[r]]\n\t"
104815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104816         "lsls	r5, r4, #31\n\t"
104817 #else
104818         "lsl	r5, r4, #31\n\t"
104819 #endif
104820 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104821         "lsrs	r4, r4, #1\n\t"
104822 #else
104823         "lsr	r4, r4, #1\n\t"
104824 #endif
104825 #ifdef WOLFSSL_KEIL
104826         "orrs	r3, r3, r5\n\t"
104827 #elif defined(__clang__)
104828         "orrs	r3, r5\n\t"
104829 #else
104830         "orr	r3, r5\n\t"
104831 #endif
104832         "ldr	r2, [%[a], #12]\n\t"
104833         "str	r3, [%[r], #4]\n\t"
104834 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104835         "lsls	r5, r2, #31\n\t"
104836 #else
104837         "lsl	r5, r2, #31\n\t"
104838 #endif
104839 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104840         "lsrs	r2, r2, #1\n\t"
104841 #else
104842         "lsr	r2, r2, #1\n\t"
104843 #endif
104844 #ifdef WOLFSSL_KEIL
104845         "orrs	r4, r4, r5\n\t"
104846 #elif defined(__clang__)
104847         "orrs	r4, r5\n\t"
104848 #else
104849         "orr	r4, r5\n\t"
104850 #endif
104851         "ldr	r3, [%[a], #16]\n\t"
104852         "str	r4, [%[r], #8]\n\t"
104853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104854         "lsls	r5, r3, #31\n\t"
104855 #else
104856         "lsl	r5, r3, #31\n\t"
104857 #endif
104858 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104859         "lsrs	r3, r3, #1\n\t"
104860 #else
104861         "lsr	r3, r3, #1\n\t"
104862 #endif
104863 #ifdef WOLFSSL_KEIL
104864         "orrs	r2, r2, r5\n\t"
104865 #elif defined(__clang__)
104866         "orrs	r2, r5\n\t"
104867 #else
104868         "orr	r2, r5\n\t"
104869 #endif
104870         "ldr	r4, [%[a], #20]\n\t"
104871         "str	r2, [%[r], #12]\n\t"
104872 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104873         "lsls	r5, r4, #31\n\t"
104874 #else
104875         "lsl	r5, r4, #31\n\t"
104876 #endif
104877 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104878         "lsrs	r4, r4, #1\n\t"
104879 #else
104880         "lsr	r4, r4, #1\n\t"
104881 #endif
104882 #ifdef WOLFSSL_KEIL
104883         "orrs	r3, r3, r5\n\t"
104884 #elif defined(__clang__)
104885         "orrs	r3, r5\n\t"
104886 #else
104887         "orr	r3, r5\n\t"
104888 #endif
104889         "ldr	r2, [%[a], #24]\n\t"
104890         "str	r3, [%[r], #16]\n\t"
104891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104892         "lsls	r5, r2, #31\n\t"
104893 #else
104894         "lsl	r5, r2, #31\n\t"
104895 #endif
104896 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104897         "lsrs	r2, r2, #1\n\t"
104898 #else
104899         "lsr	r2, r2, #1\n\t"
104900 #endif
104901 #ifdef WOLFSSL_KEIL
104902         "orrs	r4, r4, r5\n\t"
104903 #elif defined(__clang__)
104904         "orrs	r4, r5\n\t"
104905 #else
104906         "orr	r4, r5\n\t"
104907 #endif
104908         "ldr	r3, [%[a], #28]\n\t"
104909         "str	r4, [%[r], #20]\n\t"
104910 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104911         "lsls	r5, r3, #31\n\t"
104912 #else
104913         "lsl	r5, r3, #31\n\t"
104914 #endif
104915 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104916         "lsrs	r3, r3, #1\n\t"
104917 #else
104918         "lsr	r3, r3, #1\n\t"
104919 #endif
104920 #ifdef WOLFSSL_KEIL
104921         "orrs	r2, r2, r5\n\t"
104922 #elif defined(__clang__)
104923         "orrs	r2, r5\n\t"
104924 #else
104925         "orr	r2, r5\n\t"
104926 #endif
104927         "str	r2, [%[r], #24]\n\t"
104928         "str	r3, [%[r], #28]\n\t"
104929         : [r] "+r" (r), [a] "+r" (a)
104930         :
104931         : "memory", "r2", "r3", "r4", "r5"
104932     );
104933 }
104934 
104935 /* Divide the number by 2 mod the modulus. (r = a / 2 % m)
104936  *
104937  * r  Result of division by 2.
104938  * a  Number to divide.
104939  * m  Modulus.
104940  */
sp_256_div2_mod_8(sp_digit * r,const sp_digit * a,const sp_digit * m)104941 static void sp_256_div2_mod_8(sp_digit* r, const sp_digit* a, const sp_digit* m)
104942 {
104943     __asm__ __volatile__ (
104944         "ldr	r7, [%[a]]\n\t"
104945 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104946         "lsls	r7, r7, #31\n\t"
104947 #else
104948         "lsl	r7, r7, #31\n\t"
104949 #endif
104950         "beq	L_sp_256_div2_mod_8_no_add_%=\n\t"
104951 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104952         "lsrs	r7, r7, #31\n\t"
104953 #else
104954         "lsr	r7, r7, #31\n\t"
104955 #endif
104956         "ldr	r5, [%[m]]\n\t"
104957         "ldr	r6, [%[m], #4]\n\t"
104958         "ldr	r3, [%[a]]\n\t"
104959         "ldr	r4, [%[a], #4]\n\t"
104960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
104961         "adds	r3, r3, r5\n\t"
104962 #else
104963         "add	r3, r3, r5\n\t"
104964 #endif
104965 #ifdef WOLFSSL_KEIL
104966         "adcs	r4, r4, r6\n\t"
104967 #elif defined(__clang__)
104968         "adcs	r4, r6\n\t"
104969 #else
104970         "adc	r4, r6\n\t"
104971 #endif
104972         "str	r3, [%[r]]\n\t"
104973         "str	r4, [%[r], #4]\n\t"
104974         "ldr	r5, [%[m], #8]\n\t"
104975         "ldr	r6, [%[m], #12]\n\t"
104976         "ldr	r3, [%[a], #8]\n\t"
104977         "ldr	r4, [%[a], #12]\n\t"
104978 #ifdef WOLFSSL_KEIL
104979         "adcs	r3, r3, r5\n\t"
104980 #elif defined(__clang__)
104981         "adcs	r3, r5\n\t"
104982 #else
104983         "adc	r3, r5\n\t"
104984 #endif
104985 #ifdef WOLFSSL_KEIL
104986         "adcs	r4, r4, r6\n\t"
104987 #elif defined(__clang__)
104988         "adcs	r4, r6\n\t"
104989 #else
104990         "adc	r4, r6\n\t"
104991 #endif
104992         "str	r3, [%[r], #8]\n\t"
104993         "str	r4, [%[r], #12]\n\t"
104994         "ldr	r5, [%[m], #16]\n\t"
104995         "ldr	r6, [%[m], #20]\n\t"
104996         "ldr	r3, [%[a], #16]\n\t"
104997         "ldr	r4, [%[a], #20]\n\t"
104998 #ifdef WOLFSSL_KEIL
104999         "adcs	r3, r3, r5\n\t"
105000 #elif defined(__clang__)
105001         "adcs	r3, r5\n\t"
105002 #else
105003         "adc	r3, r5\n\t"
105004 #endif
105005 #ifdef WOLFSSL_KEIL
105006         "adcs	r4, r4, r6\n\t"
105007 #elif defined(__clang__)
105008         "adcs	r4, r6\n\t"
105009 #else
105010         "adc	r4, r6\n\t"
105011 #endif
105012         "str	r3, [%[r], #16]\n\t"
105013         "str	r4, [%[r], #20]\n\t"
105014         "ldr	r5, [%[m], #24]\n\t"
105015         "ldr	r6, [%[m], #28]\n\t"
105016         "ldr	r3, [%[a], #24]\n\t"
105017         "ldr	r4, [%[a], #28]\n\t"
105018 #ifdef WOLFSSL_KEIL
105019         "adcs	r3, r3, r5\n\t"
105020 #elif defined(__clang__)
105021         "adcs	r3, r5\n\t"
105022 #else
105023         "adc	r3, r5\n\t"
105024 #endif
105025 #ifdef WOLFSSL_KEIL
105026         "adcs	r4, r4, r6\n\t"
105027 #elif defined(__clang__)
105028         "adcs	r4, r6\n\t"
105029 #else
105030         "adc	r4, r6\n\t"
105031 #endif
105032         "movs	r7, #0\n\t"
105033 #ifdef WOLFSSL_KEIL
105034         "adcs	r7, r7, r7\n\t"
105035 #elif defined(__clang__)
105036         "adcs	r7, r7\n\t"
105037 #else
105038         "adc	r7, r7\n\t"
105039 #endif
105040 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105041         "lsls	r7, r7, #31\n\t"
105042 #else
105043         "lsl	r7, r7, #31\n\t"
105044 #endif
105045         "b	L_sp_256_div2_mod_8_div2_%=\n\t"
105046         "\n"
105047     "L_sp_256_div2_mod_8_no_add_%=:\n\t"
105048         "ldr	r3, [%[a], #24]\n\t"
105049         "ldr	r4, [%[a], #28]\n\t"
105050         "\n"
105051     "L_sp_256_div2_mod_8_div2_%=:\n\t"
105052 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105053         "lsrs	r5, r3, #1\n\t"
105054 #else
105055         "lsr	r5, r3, #1\n\t"
105056 #endif
105057 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105058         "lsls	r3, r3, #31\n\t"
105059 #else
105060         "lsl	r3, r3, #31\n\t"
105061 #endif
105062 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105063         "lsrs	r6, r4, #1\n\t"
105064 #else
105065         "lsr	r6, r4, #1\n\t"
105066 #endif
105067 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105068         "lsls	r4, r4, #31\n\t"
105069 #else
105070         "lsl	r4, r4, #31\n\t"
105071 #endif
105072 #ifdef WOLFSSL_KEIL
105073         "orrs	r5, r5, r4\n\t"
105074 #elif defined(__clang__)
105075         "orrs	r5, r4\n\t"
105076 #else
105077         "orr	r5, r4\n\t"
105078 #endif
105079 #ifdef WOLFSSL_KEIL
105080         "orrs	r6, r6, r7\n\t"
105081 #elif defined(__clang__)
105082         "orrs	r6, r7\n\t"
105083 #else
105084         "orr	r6, r7\n\t"
105085 #endif
105086         "movs	r7, r3\n\t"
105087         "str	r5, [%[r], #24]\n\t"
105088         "str	r6, [%[r], #28]\n\t"
105089         "ldr	r3, [%[a], #16]\n\t"
105090         "ldr	r4, [%[a], #20]\n\t"
105091 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105092         "lsrs	r5, r3, #1\n\t"
105093 #else
105094         "lsr	r5, r3, #1\n\t"
105095 #endif
105096 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105097         "lsls	r3, r3, #31\n\t"
105098 #else
105099         "lsl	r3, r3, #31\n\t"
105100 #endif
105101 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105102         "lsrs	r6, r4, #1\n\t"
105103 #else
105104         "lsr	r6, r4, #1\n\t"
105105 #endif
105106 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105107         "lsls	r4, r4, #31\n\t"
105108 #else
105109         "lsl	r4, r4, #31\n\t"
105110 #endif
105111 #ifdef WOLFSSL_KEIL
105112         "orrs	r5, r5, r4\n\t"
105113 #elif defined(__clang__)
105114         "orrs	r5, r4\n\t"
105115 #else
105116         "orr	r5, r4\n\t"
105117 #endif
105118 #ifdef WOLFSSL_KEIL
105119         "orrs	r6, r6, r7\n\t"
105120 #elif defined(__clang__)
105121         "orrs	r6, r7\n\t"
105122 #else
105123         "orr	r6, r7\n\t"
105124 #endif
105125         "movs	r7, r3\n\t"
105126         "str	r5, [%[r], #16]\n\t"
105127         "str	r6, [%[r], #20]\n\t"
105128         "ldr	r3, [%[a], #8]\n\t"
105129         "ldr	r4, [%[a], #12]\n\t"
105130 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105131         "lsrs	r5, r3, #1\n\t"
105132 #else
105133         "lsr	r5, r3, #1\n\t"
105134 #endif
105135 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105136         "lsls	r3, r3, #31\n\t"
105137 #else
105138         "lsl	r3, r3, #31\n\t"
105139 #endif
105140 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105141         "lsrs	r6, r4, #1\n\t"
105142 #else
105143         "lsr	r6, r4, #1\n\t"
105144 #endif
105145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105146         "lsls	r4, r4, #31\n\t"
105147 #else
105148         "lsl	r4, r4, #31\n\t"
105149 #endif
105150 #ifdef WOLFSSL_KEIL
105151         "orrs	r5, r5, r4\n\t"
105152 #elif defined(__clang__)
105153         "orrs	r5, r4\n\t"
105154 #else
105155         "orr	r5, r4\n\t"
105156 #endif
105157 #ifdef WOLFSSL_KEIL
105158         "orrs	r6, r6, r7\n\t"
105159 #elif defined(__clang__)
105160         "orrs	r6, r7\n\t"
105161 #else
105162         "orr	r6, r7\n\t"
105163 #endif
105164         "movs	r7, r3\n\t"
105165         "str	r5, [%[r], #8]\n\t"
105166         "str	r6, [%[r], #12]\n\t"
105167         "ldr	r3, [%[r]]\n\t"
105168         "ldr	r4, [%[r], #4]\n\t"
105169 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105170         "lsrs	r5, r3, #1\n\t"
105171 #else
105172         "lsr	r5, r3, #1\n\t"
105173 #endif
105174 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105175         "lsrs	r6, r4, #1\n\t"
105176 #else
105177         "lsr	r6, r4, #1\n\t"
105178 #endif
105179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105180         "lsls	r4, r4, #31\n\t"
105181 #else
105182         "lsl	r4, r4, #31\n\t"
105183 #endif
105184 #ifdef WOLFSSL_KEIL
105185         "orrs	r5, r5, r4\n\t"
105186 #elif defined(__clang__)
105187         "orrs	r5, r4\n\t"
105188 #else
105189         "orr	r5, r4\n\t"
105190 #endif
105191 #ifdef WOLFSSL_KEIL
105192         "orrs	r6, r6, r7\n\t"
105193 #elif defined(__clang__)
105194         "orrs	r6, r7\n\t"
105195 #else
105196         "orr	r6, r7\n\t"
105197 #endif
105198         "str	r5, [%[r]]\n\t"
105199         "str	r6, [%[r], #4]\n\t"
105200         : [r] "+r" (r), [a] "+r" (a), [m] "+r" (m)
105201         :
105202         : "memory", "r3", "r4", "r5", "r6", "r7", "r8"
105203     );
105204 }
105205 
sp_256_num_bits_8(sp_digit * a)105206 static int sp_256_num_bits_8(sp_digit* a)
105207 {
105208     static const byte sp_num_bits_table[256] = {
105209         0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
105210         5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
105211         6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
105212         6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
105213         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
105214         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
105215         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
105216         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
105217         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
105218         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
105219         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
105220         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
105221         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
105222         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
105223         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
105224         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
105225     };
105226     const byte* table = sp_num_bits_table;
105227     __asm__ __volatile__ (
105228         "movs	r6, #0xff\n\t"
105229         "ldr	r3, [%[a], #28]\n\t"
105230         "cmp	r3, #0\n\t"
105231         "beq	L_sp_256_num_bits_8_7_%=\n\t"
105232 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105233         "lsrs	r5, r3, #24\n\t"
105234 #else
105235         "lsr	r5, r3, #24\n\t"
105236 #endif
105237         "cmp	r5, #0\n\t"
105238         "beq	L_sp_256_num_bits_8_93_%=\n\t"
105239         "movs	r2, #0xf8\n\t"
105240         "ldrb	r4, [%[table], r5]\n\t"
105241 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105242         "adds	r2, r2, r4\n\t"
105243 #else
105244         "add	r2, r2, r4\n\t"
105245 #endif
105246         "b	L_sp_256_num_bits_8_9_%=\n\t"
105247         "\n"
105248     "L_sp_256_num_bits_8_93_%=:\n\t"
105249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105250         "lsrs	r5, r3, #16\n\t"
105251 #else
105252         "lsr	r5, r3, #16\n\t"
105253 #endif
105254 #ifdef WOLFSSL_KEIL
105255         "ands	r5, r5, r6\n\t"
105256 #elif defined(__clang__)
105257         "ands	r5, r6\n\t"
105258 #else
105259         "and	r5, r6\n\t"
105260 #endif
105261         "cmp	r5, #0\n\t"
105262         "beq	L_sp_256_num_bits_8_92_%=\n\t"
105263         "movs	r2, #0xf0\n\t"
105264         "ldrb	r4, [%[table], r5]\n\t"
105265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105266         "adds	r2, r2, r4\n\t"
105267 #else
105268         "add	r2, r2, r4\n\t"
105269 #endif
105270         "b	L_sp_256_num_bits_8_9_%=\n\t"
105271         "\n"
105272     "L_sp_256_num_bits_8_92_%=:\n\t"
105273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105274         "lsrs	r5, r3, #8\n\t"
105275 #else
105276         "lsr	r5, r3, #8\n\t"
105277 #endif
105278 #ifdef WOLFSSL_KEIL
105279         "ands	r5, r5, r6\n\t"
105280 #elif defined(__clang__)
105281         "ands	r5, r6\n\t"
105282 #else
105283         "and	r5, r6\n\t"
105284 #endif
105285         "cmp	r5, #0\n\t"
105286         "beq	L_sp_256_num_bits_8_91_%=\n\t"
105287         "movs	r2, #0xe8\n\t"
105288         "ldrb	r4, [%[table], r5]\n\t"
105289 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105290         "adds	r2, r2, r4\n\t"
105291 #else
105292         "add	r2, r2, r4\n\t"
105293 #endif
105294         "b	L_sp_256_num_bits_8_9_%=\n\t"
105295         "\n"
105296     "L_sp_256_num_bits_8_91_%=:\n\t"
105297         "movs	r5, r3\n\t"
105298 #ifdef WOLFSSL_KEIL
105299         "ands	r5, r5, r6\n\t"
105300 #elif defined(__clang__)
105301         "ands	r5, r6\n\t"
105302 #else
105303         "and	r5, r6\n\t"
105304 #endif
105305         "cmp	r5, #0\n\t"
105306         "beq	L_sp_256_num_bits_8_90_%=\n\t"
105307         "movs	r2, #0xe0\n\t"
105308         "ldrb	r4, [%[table], r5]\n\t"
105309 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105310         "adds	r2, r2, r4\n\t"
105311 #else
105312         "add	r2, r2, r4\n\t"
105313 #endif
105314         "b	L_sp_256_num_bits_8_9_%=\n\t"
105315         "\n"
105316     "L_sp_256_num_bits_8_90_%=:\n\t"
105317         "b	L_sp_256_num_bits_8_9_%=\n\t"
105318         "\n"
105319     "L_sp_256_num_bits_8_7_%=:\n\t"
105320         "ldr	r3, [%[a], #24]\n\t"
105321         "cmp	r3, #0\n\t"
105322         "beq	L_sp_256_num_bits_8_6_%=\n\t"
105323 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105324         "lsrs	r5, r3, #24\n\t"
105325 #else
105326         "lsr	r5, r3, #24\n\t"
105327 #endif
105328         "cmp	r5, #0\n\t"
105329         "beq	L_sp_256_num_bits_8_83_%=\n\t"
105330         "movs	r2, #0xd8\n\t"
105331         "ldrb	r4, [%[table], r5]\n\t"
105332 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105333         "adds	r2, r2, r4\n\t"
105334 #else
105335         "add	r2, r2, r4\n\t"
105336 #endif
105337         "b	L_sp_256_num_bits_8_9_%=\n\t"
105338         "\n"
105339     "L_sp_256_num_bits_8_83_%=:\n\t"
105340 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105341         "lsrs	r5, r3, #16\n\t"
105342 #else
105343         "lsr	r5, r3, #16\n\t"
105344 #endif
105345 #ifdef WOLFSSL_KEIL
105346         "ands	r5, r5, r6\n\t"
105347 #elif defined(__clang__)
105348         "ands	r5, r6\n\t"
105349 #else
105350         "and	r5, r6\n\t"
105351 #endif
105352         "cmp	r5, #0\n\t"
105353         "beq	L_sp_256_num_bits_8_82_%=\n\t"
105354         "movs	r2, #0xd0\n\t"
105355         "ldrb	r4, [%[table], r5]\n\t"
105356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105357         "adds	r2, r2, r4\n\t"
105358 #else
105359         "add	r2, r2, r4\n\t"
105360 #endif
105361         "b	L_sp_256_num_bits_8_9_%=\n\t"
105362         "\n"
105363     "L_sp_256_num_bits_8_82_%=:\n\t"
105364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105365         "lsrs	r5, r3, #8\n\t"
105366 #else
105367         "lsr	r5, r3, #8\n\t"
105368 #endif
105369 #ifdef WOLFSSL_KEIL
105370         "ands	r5, r5, r6\n\t"
105371 #elif defined(__clang__)
105372         "ands	r5, r6\n\t"
105373 #else
105374         "and	r5, r6\n\t"
105375 #endif
105376         "cmp	r5, #0\n\t"
105377         "beq	L_sp_256_num_bits_8_81_%=\n\t"
105378         "movs	r2, #0xc8\n\t"
105379         "ldrb	r4, [%[table], r5]\n\t"
105380 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105381         "adds	r2, r2, r4\n\t"
105382 #else
105383         "add	r2, r2, r4\n\t"
105384 #endif
105385         "b	L_sp_256_num_bits_8_9_%=\n\t"
105386         "\n"
105387     "L_sp_256_num_bits_8_81_%=:\n\t"
105388         "movs	r5, r3\n\t"
105389 #ifdef WOLFSSL_KEIL
105390         "ands	r5, r5, r6\n\t"
105391 #elif defined(__clang__)
105392         "ands	r5, r6\n\t"
105393 #else
105394         "and	r5, r6\n\t"
105395 #endif
105396         "cmp	r5, #0\n\t"
105397         "beq	L_sp_256_num_bits_8_80_%=\n\t"
105398         "movs	r2, #0xc0\n\t"
105399         "ldrb	r4, [%[table], r5]\n\t"
105400 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105401         "adds	r2, r2, r4\n\t"
105402 #else
105403         "add	r2, r2, r4\n\t"
105404 #endif
105405         "b	L_sp_256_num_bits_8_9_%=\n\t"
105406         "\n"
105407     "L_sp_256_num_bits_8_80_%=:\n\t"
105408         "b	L_sp_256_num_bits_8_9_%=\n\t"
105409         "\n"
105410     "L_sp_256_num_bits_8_6_%=:\n\t"
105411         "ldr	r3, [%[a], #20]\n\t"
105412         "cmp	r3, #0\n\t"
105413         "beq	L_sp_256_num_bits_8_5_%=\n\t"
105414 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105415         "lsrs	r5, r3, #24\n\t"
105416 #else
105417         "lsr	r5, r3, #24\n\t"
105418 #endif
105419         "cmp	r5, #0\n\t"
105420         "beq	L_sp_256_num_bits_8_73_%=\n\t"
105421         "movs	r2, #0xb8\n\t"
105422         "ldrb	r4, [%[table], r5]\n\t"
105423 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105424         "adds	r2, r2, r4\n\t"
105425 #else
105426         "add	r2, r2, r4\n\t"
105427 #endif
105428         "b	L_sp_256_num_bits_8_9_%=\n\t"
105429         "\n"
105430     "L_sp_256_num_bits_8_73_%=:\n\t"
105431 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105432         "lsrs	r5, r3, #16\n\t"
105433 #else
105434         "lsr	r5, r3, #16\n\t"
105435 #endif
105436 #ifdef WOLFSSL_KEIL
105437         "ands	r5, r5, r6\n\t"
105438 #elif defined(__clang__)
105439         "ands	r5, r6\n\t"
105440 #else
105441         "and	r5, r6\n\t"
105442 #endif
105443         "cmp	r5, #0\n\t"
105444         "beq	L_sp_256_num_bits_8_72_%=\n\t"
105445         "movs	r2, #0xb0\n\t"
105446         "ldrb	r4, [%[table], r5]\n\t"
105447 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105448         "adds	r2, r2, r4\n\t"
105449 #else
105450         "add	r2, r2, r4\n\t"
105451 #endif
105452         "b	L_sp_256_num_bits_8_9_%=\n\t"
105453         "\n"
105454     "L_sp_256_num_bits_8_72_%=:\n\t"
105455 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105456         "lsrs	r5, r3, #8\n\t"
105457 #else
105458         "lsr	r5, r3, #8\n\t"
105459 #endif
105460 #ifdef WOLFSSL_KEIL
105461         "ands	r5, r5, r6\n\t"
105462 #elif defined(__clang__)
105463         "ands	r5, r6\n\t"
105464 #else
105465         "and	r5, r6\n\t"
105466 #endif
105467         "cmp	r5, #0\n\t"
105468         "beq	L_sp_256_num_bits_8_71_%=\n\t"
105469         "movs	r2, #0xa8\n\t"
105470         "ldrb	r4, [%[table], r5]\n\t"
105471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105472         "adds	r2, r2, r4\n\t"
105473 #else
105474         "add	r2, r2, r4\n\t"
105475 #endif
105476         "b	L_sp_256_num_bits_8_9_%=\n\t"
105477         "\n"
105478     "L_sp_256_num_bits_8_71_%=:\n\t"
105479         "movs	r5, r3\n\t"
105480 #ifdef WOLFSSL_KEIL
105481         "ands	r5, r5, r6\n\t"
105482 #elif defined(__clang__)
105483         "ands	r5, r6\n\t"
105484 #else
105485         "and	r5, r6\n\t"
105486 #endif
105487         "cmp	r5, #0\n\t"
105488         "beq	L_sp_256_num_bits_8_70_%=\n\t"
105489         "movs	r2, #0xa0\n\t"
105490         "ldrb	r4, [%[table], r5]\n\t"
105491 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105492         "adds	r2, r2, r4\n\t"
105493 #else
105494         "add	r2, r2, r4\n\t"
105495 #endif
105496         "b	L_sp_256_num_bits_8_9_%=\n\t"
105497         "\n"
105498     "L_sp_256_num_bits_8_70_%=:\n\t"
105499         "b	L_sp_256_num_bits_8_9_%=\n\t"
105500         "\n"
105501     "L_sp_256_num_bits_8_5_%=:\n\t"
105502         "ldr	r3, [%[a], #16]\n\t"
105503         "cmp	r3, #0\n\t"
105504         "beq	L_sp_256_num_bits_8_4_%=\n\t"
105505 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105506         "lsrs	r5, r3, #24\n\t"
105507 #else
105508         "lsr	r5, r3, #24\n\t"
105509 #endif
105510         "cmp	r5, #0\n\t"
105511         "beq	L_sp_256_num_bits_8_63_%=\n\t"
105512         "movs	r2, #0x98\n\t"
105513         "ldrb	r4, [%[table], r5]\n\t"
105514 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105515         "adds	r2, r2, r4\n\t"
105516 #else
105517         "add	r2, r2, r4\n\t"
105518 #endif
105519         "b	L_sp_256_num_bits_8_9_%=\n\t"
105520         "\n"
105521     "L_sp_256_num_bits_8_63_%=:\n\t"
105522 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105523         "lsrs	r5, r3, #16\n\t"
105524 #else
105525         "lsr	r5, r3, #16\n\t"
105526 #endif
105527 #ifdef WOLFSSL_KEIL
105528         "ands	r5, r5, r6\n\t"
105529 #elif defined(__clang__)
105530         "ands	r5, r6\n\t"
105531 #else
105532         "and	r5, r6\n\t"
105533 #endif
105534         "cmp	r5, #0\n\t"
105535         "beq	L_sp_256_num_bits_8_62_%=\n\t"
105536         "movs	r2, #0x90\n\t"
105537         "ldrb	r4, [%[table], r5]\n\t"
105538 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105539         "adds	r2, r2, r4\n\t"
105540 #else
105541         "add	r2, r2, r4\n\t"
105542 #endif
105543         "b	L_sp_256_num_bits_8_9_%=\n\t"
105544         "\n"
105545     "L_sp_256_num_bits_8_62_%=:\n\t"
105546 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105547         "lsrs	r5, r3, #8\n\t"
105548 #else
105549         "lsr	r5, r3, #8\n\t"
105550 #endif
105551 #ifdef WOLFSSL_KEIL
105552         "ands	r5, r5, r6\n\t"
105553 #elif defined(__clang__)
105554         "ands	r5, r6\n\t"
105555 #else
105556         "and	r5, r6\n\t"
105557 #endif
105558         "cmp	r5, #0\n\t"
105559         "beq	L_sp_256_num_bits_8_61_%=\n\t"
105560         "movs	r2, #0x88\n\t"
105561         "ldrb	r4, [%[table], r5]\n\t"
105562 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105563         "adds	r2, r2, r4\n\t"
105564 #else
105565         "add	r2, r2, r4\n\t"
105566 #endif
105567         "b	L_sp_256_num_bits_8_9_%=\n\t"
105568         "\n"
105569     "L_sp_256_num_bits_8_61_%=:\n\t"
105570         "movs	r5, r3\n\t"
105571 #ifdef WOLFSSL_KEIL
105572         "ands	r5, r5, r6\n\t"
105573 #elif defined(__clang__)
105574         "ands	r5, r6\n\t"
105575 #else
105576         "and	r5, r6\n\t"
105577 #endif
105578         "cmp	r5, #0\n\t"
105579         "beq	L_sp_256_num_bits_8_60_%=\n\t"
105580         "movs	r2, #0x80\n\t"
105581         "ldrb	r4, [%[table], r5]\n\t"
105582 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105583         "adds	r2, r2, r4\n\t"
105584 #else
105585         "add	r2, r2, r4\n\t"
105586 #endif
105587         "b	L_sp_256_num_bits_8_9_%=\n\t"
105588         "\n"
105589     "L_sp_256_num_bits_8_60_%=:\n\t"
105590         "b	L_sp_256_num_bits_8_9_%=\n\t"
105591         "\n"
105592     "L_sp_256_num_bits_8_4_%=:\n\t"
105593         "ldr	r3, [%[a], #12]\n\t"
105594         "cmp	r3, #0\n\t"
105595         "beq	L_sp_256_num_bits_8_3_%=\n\t"
105596 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105597         "lsrs	r5, r3, #24\n\t"
105598 #else
105599         "lsr	r5, r3, #24\n\t"
105600 #endif
105601         "cmp	r5, #0\n\t"
105602         "beq	L_sp_256_num_bits_8_53_%=\n\t"
105603         "movs	r2, #0x78\n\t"
105604         "ldrb	r4, [%[table], r5]\n\t"
105605 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105606         "adds	r2, r2, r4\n\t"
105607 #else
105608         "add	r2, r2, r4\n\t"
105609 #endif
105610         "b	L_sp_256_num_bits_8_9_%=\n\t"
105611         "\n"
105612     "L_sp_256_num_bits_8_53_%=:\n\t"
105613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105614         "lsrs	r5, r3, #16\n\t"
105615 #else
105616         "lsr	r5, r3, #16\n\t"
105617 #endif
105618 #ifdef WOLFSSL_KEIL
105619         "ands	r5, r5, r6\n\t"
105620 #elif defined(__clang__)
105621         "ands	r5, r6\n\t"
105622 #else
105623         "and	r5, r6\n\t"
105624 #endif
105625         "cmp	r5, #0\n\t"
105626         "beq	L_sp_256_num_bits_8_52_%=\n\t"
105627         "movs	r2, #0x70\n\t"
105628         "ldrb	r4, [%[table], r5]\n\t"
105629 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105630         "adds	r2, r2, r4\n\t"
105631 #else
105632         "add	r2, r2, r4\n\t"
105633 #endif
105634         "b	L_sp_256_num_bits_8_9_%=\n\t"
105635         "\n"
105636     "L_sp_256_num_bits_8_52_%=:\n\t"
105637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105638         "lsrs	r5, r3, #8\n\t"
105639 #else
105640         "lsr	r5, r3, #8\n\t"
105641 #endif
105642 #ifdef WOLFSSL_KEIL
105643         "ands	r5, r5, r6\n\t"
105644 #elif defined(__clang__)
105645         "ands	r5, r6\n\t"
105646 #else
105647         "and	r5, r6\n\t"
105648 #endif
105649         "cmp	r5, #0\n\t"
105650         "beq	L_sp_256_num_bits_8_51_%=\n\t"
105651         "movs	r2, #0x68\n\t"
105652         "ldrb	r4, [%[table], r5]\n\t"
105653 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105654         "adds	r2, r2, r4\n\t"
105655 #else
105656         "add	r2, r2, r4\n\t"
105657 #endif
105658         "b	L_sp_256_num_bits_8_9_%=\n\t"
105659         "\n"
105660     "L_sp_256_num_bits_8_51_%=:\n\t"
105661         "movs	r5, r3\n\t"
105662 #ifdef WOLFSSL_KEIL
105663         "ands	r5, r5, r6\n\t"
105664 #elif defined(__clang__)
105665         "ands	r5, r6\n\t"
105666 #else
105667         "and	r5, r6\n\t"
105668 #endif
105669         "cmp	r5, #0\n\t"
105670         "beq	L_sp_256_num_bits_8_50_%=\n\t"
105671         "movs	r2, #0x60\n\t"
105672         "ldrb	r4, [%[table], r5]\n\t"
105673 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105674         "adds	r2, r2, r4\n\t"
105675 #else
105676         "add	r2, r2, r4\n\t"
105677 #endif
105678         "b	L_sp_256_num_bits_8_9_%=\n\t"
105679         "\n"
105680     "L_sp_256_num_bits_8_50_%=:\n\t"
105681         "b	L_sp_256_num_bits_8_9_%=\n\t"
105682         "\n"
105683     "L_sp_256_num_bits_8_3_%=:\n\t"
105684         "ldr	r3, [%[a], #8]\n\t"
105685         "cmp	r3, #0\n\t"
105686         "beq	L_sp_256_num_bits_8_2_%=\n\t"
105687 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105688         "lsrs	r5, r3, #24\n\t"
105689 #else
105690         "lsr	r5, r3, #24\n\t"
105691 #endif
105692         "cmp	r5, #0\n\t"
105693         "beq	L_sp_256_num_bits_8_43_%=\n\t"
105694         "movs	r2, #0x58\n\t"
105695         "ldrb	r4, [%[table], r5]\n\t"
105696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105697         "adds	r2, r2, r4\n\t"
105698 #else
105699         "add	r2, r2, r4\n\t"
105700 #endif
105701         "b	L_sp_256_num_bits_8_9_%=\n\t"
105702         "\n"
105703     "L_sp_256_num_bits_8_43_%=:\n\t"
105704 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105705         "lsrs	r5, r3, #16\n\t"
105706 #else
105707         "lsr	r5, r3, #16\n\t"
105708 #endif
105709 #ifdef WOLFSSL_KEIL
105710         "ands	r5, r5, r6\n\t"
105711 #elif defined(__clang__)
105712         "ands	r5, r6\n\t"
105713 #else
105714         "and	r5, r6\n\t"
105715 #endif
105716         "cmp	r5, #0\n\t"
105717         "beq	L_sp_256_num_bits_8_42_%=\n\t"
105718         "movs	r2, #0x50\n\t"
105719         "ldrb	r4, [%[table], r5]\n\t"
105720 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105721         "adds	r2, r2, r4\n\t"
105722 #else
105723         "add	r2, r2, r4\n\t"
105724 #endif
105725         "b	L_sp_256_num_bits_8_9_%=\n\t"
105726         "\n"
105727     "L_sp_256_num_bits_8_42_%=:\n\t"
105728 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105729         "lsrs	r5, r3, #8\n\t"
105730 #else
105731         "lsr	r5, r3, #8\n\t"
105732 #endif
105733 #ifdef WOLFSSL_KEIL
105734         "ands	r5, r5, r6\n\t"
105735 #elif defined(__clang__)
105736         "ands	r5, r6\n\t"
105737 #else
105738         "and	r5, r6\n\t"
105739 #endif
105740         "cmp	r5, #0\n\t"
105741         "beq	L_sp_256_num_bits_8_41_%=\n\t"
105742         "movs	r2, #0x48\n\t"
105743         "ldrb	r4, [%[table], r5]\n\t"
105744 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105745         "adds	r2, r2, r4\n\t"
105746 #else
105747         "add	r2, r2, r4\n\t"
105748 #endif
105749         "b	L_sp_256_num_bits_8_9_%=\n\t"
105750         "\n"
105751     "L_sp_256_num_bits_8_41_%=:\n\t"
105752         "movs	r5, r3\n\t"
105753 #ifdef WOLFSSL_KEIL
105754         "ands	r5, r5, r6\n\t"
105755 #elif defined(__clang__)
105756         "ands	r5, r6\n\t"
105757 #else
105758         "and	r5, r6\n\t"
105759 #endif
105760         "cmp	r5, #0\n\t"
105761         "beq	L_sp_256_num_bits_8_40_%=\n\t"
105762         "movs	r2, #0x40\n\t"
105763         "ldrb	r4, [%[table], r5]\n\t"
105764 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105765         "adds	r2, r2, r4\n\t"
105766 #else
105767         "add	r2, r2, r4\n\t"
105768 #endif
105769         "b	L_sp_256_num_bits_8_9_%=\n\t"
105770         "\n"
105771     "L_sp_256_num_bits_8_40_%=:\n\t"
105772         "b	L_sp_256_num_bits_8_9_%=\n\t"
105773         "\n"
105774     "L_sp_256_num_bits_8_2_%=:\n\t"
105775         "ldr	r3, [%[a], #4]\n\t"
105776         "cmp	r3, #0\n\t"
105777         "beq	L_sp_256_num_bits_8_1_%=\n\t"
105778 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105779         "lsrs	r5, r3, #24\n\t"
105780 #else
105781         "lsr	r5, r3, #24\n\t"
105782 #endif
105783         "cmp	r5, #0\n\t"
105784         "beq	L_sp_256_num_bits_8_33_%=\n\t"
105785         "movs	r2, #56\n\t"
105786         "ldrb	r4, [%[table], r5]\n\t"
105787 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105788         "adds	r2, r2, r4\n\t"
105789 #else
105790         "add	r2, r2, r4\n\t"
105791 #endif
105792         "b	L_sp_256_num_bits_8_9_%=\n\t"
105793         "\n"
105794     "L_sp_256_num_bits_8_33_%=:\n\t"
105795 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105796         "lsrs	r5, r3, #16\n\t"
105797 #else
105798         "lsr	r5, r3, #16\n\t"
105799 #endif
105800 #ifdef WOLFSSL_KEIL
105801         "ands	r5, r5, r6\n\t"
105802 #elif defined(__clang__)
105803         "ands	r5, r6\n\t"
105804 #else
105805         "and	r5, r6\n\t"
105806 #endif
105807         "cmp	r5, #0\n\t"
105808         "beq	L_sp_256_num_bits_8_32_%=\n\t"
105809         "movs	r2, #48\n\t"
105810         "ldrb	r4, [%[table], r5]\n\t"
105811 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105812         "adds	r2, r2, r4\n\t"
105813 #else
105814         "add	r2, r2, r4\n\t"
105815 #endif
105816         "b	L_sp_256_num_bits_8_9_%=\n\t"
105817         "\n"
105818     "L_sp_256_num_bits_8_32_%=:\n\t"
105819 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105820         "lsrs	r5, r3, #8\n\t"
105821 #else
105822         "lsr	r5, r3, #8\n\t"
105823 #endif
105824 #ifdef WOLFSSL_KEIL
105825         "ands	r5, r5, r6\n\t"
105826 #elif defined(__clang__)
105827         "ands	r5, r6\n\t"
105828 #else
105829         "and	r5, r6\n\t"
105830 #endif
105831         "cmp	r5, #0\n\t"
105832         "beq	L_sp_256_num_bits_8_31_%=\n\t"
105833         "movs	r2, #40\n\t"
105834         "ldrb	r4, [%[table], r5]\n\t"
105835 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105836         "adds	r2, r2, r4\n\t"
105837 #else
105838         "add	r2, r2, r4\n\t"
105839 #endif
105840         "b	L_sp_256_num_bits_8_9_%=\n\t"
105841         "\n"
105842     "L_sp_256_num_bits_8_31_%=:\n\t"
105843         "movs	r5, r3\n\t"
105844 #ifdef WOLFSSL_KEIL
105845         "ands	r5, r5, r6\n\t"
105846 #elif defined(__clang__)
105847         "ands	r5, r6\n\t"
105848 #else
105849         "and	r5, r6\n\t"
105850 #endif
105851         "cmp	r5, #0\n\t"
105852         "beq	L_sp_256_num_bits_8_30_%=\n\t"
105853         "movs	r2, #32\n\t"
105854         "ldrb	r4, [%[table], r5]\n\t"
105855 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105856         "adds	r2, r2, r4\n\t"
105857 #else
105858         "add	r2, r2, r4\n\t"
105859 #endif
105860         "b	L_sp_256_num_bits_8_9_%=\n\t"
105861         "\n"
105862     "L_sp_256_num_bits_8_30_%=:\n\t"
105863         "b	L_sp_256_num_bits_8_9_%=\n\t"
105864         "\n"
105865     "L_sp_256_num_bits_8_1_%=:\n\t"
105866         "ldr	r3, [%[a]]\n\t"
105867 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105868         "lsrs	r5, r3, #24\n\t"
105869 #else
105870         "lsr	r5, r3, #24\n\t"
105871 #endif
105872         "cmp	r5, #0\n\t"
105873         "beq	L_sp_256_num_bits_8_23_%=\n\t"
105874         "movs	r2, #24\n\t"
105875         "ldrb	r4, [%[table], r5]\n\t"
105876 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105877         "adds	r2, r2, r4\n\t"
105878 #else
105879         "add	r2, r2, r4\n\t"
105880 #endif
105881         "b	L_sp_256_num_bits_8_9_%=\n\t"
105882         "\n"
105883     "L_sp_256_num_bits_8_23_%=:\n\t"
105884 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105885         "lsrs	r5, r3, #16\n\t"
105886 #else
105887         "lsr	r5, r3, #16\n\t"
105888 #endif
105889 #ifdef WOLFSSL_KEIL
105890         "ands	r5, r5, r6\n\t"
105891 #elif defined(__clang__)
105892         "ands	r5, r6\n\t"
105893 #else
105894         "and	r5, r6\n\t"
105895 #endif
105896         "cmp	r5, #0\n\t"
105897         "beq	L_sp_256_num_bits_8_22_%=\n\t"
105898         "movs	r2, #16\n\t"
105899         "ldrb	r4, [%[table], r5]\n\t"
105900 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105901         "adds	r2, r2, r4\n\t"
105902 #else
105903         "add	r2, r2, r4\n\t"
105904 #endif
105905         "b	L_sp_256_num_bits_8_9_%=\n\t"
105906         "\n"
105907     "L_sp_256_num_bits_8_22_%=:\n\t"
105908 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105909         "lsrs	r5, r3, #8\n\t"
105910 #else
105911         "lsr	r5, r3, #8\n\t"
105912 #endif
105913 #ifdef WOLFSSL_KEIL
105914         "ands	r5, r5, r6\n\t"
105915 #elif defined(__clang__)
105916         "ands	r5, r6\n\t"
105917 #else
105918         "and	r5, r6\n\t"
105919 #endif
105920         "cmp	r5, #0\n\t"
105921         "beq	L_sp_256_num_bits_8_21_%=\n\t"
105922         "movs	r2, #8\n\t"
105923         "ldrb	r4, [%[table], r5]\n\t"
105924 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105925         "adds	r2, r2, r4\n\t"
105926 #else
105927         "add	r2, r2, r4\n\t"
105928 #endif
105929         "b	L_sp_256_num_bits_8_9_%=\n\t"
105930         "\n"
105931     "L_sp_256_num_bits_8_21_%=:\n\t"
105932         "movs	r5, r3\n\t"
105933 #ifdef WOLFSSL_KEIL
105934         "ands	r5, r5, r6\n\t"
105935 #elif defined(__clang__)
105936         "ands	r5, r6\n\t"
105937 #else
105938         "and	r5, r6\n\t"
105939 #endif
105940         "cmp	r5, #0\n\t"
105941         "beq	L_sp_256_num_bits_8_20_%=\n\t"
105942         "movs	r2, #0\n\t"
105943         "ldrb	r4, [%[table], r5]\n\t"
105944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
105945         "adds	r2, r2, r4\n\t"
105946 #else
105947         "add	r2, r2, r4\n\t"
105948 #endif
105949         "b	L_sp_256_num_bits_8_9_%=\n\t"
105950         "\n"
105951     "L_sp_256_num_bits_8_20_%=:\n\t"
105952         "\n"
105953     "L_sp_256_num_bits_8_9_%=:\n\t"
105954         "movs	%[a], r2\n\t"
105955         : [a] "+r" (a), [table] "+r" (table)
105956         :
105957         : "memory", "r2", "r3", "r4", "r5", "r6"
105958     );
105959     return (uint32_t)(size_t)a;
105960 }
105961 
105962 /* Non-constant time modular inversion.
105963  *
105964  * @param  [out]  r   Resulting number.
105965  * @param  [in]   a   Number to invert.
105966  * @param  [in]   m   Modulus.
105967  * @return  MP_OKAY on success.
105968  */
sp_256_mod_inv_8(sp_digit * r,const sp_digit * a,const sp_digit * m)105969 static int sp_256_mod_inv_8(sp_digit* r, const sp_digit* a, const sp_digit* m)
105970 {
105971     sp_digit u[8];
105972     sp_digit v[8];
105973     sp_digit b[8];
105974     sp_digit d[8];
105975     int ut, vt;
105976     sp_digit o;
105977 
105978     XMEMCPY(u, m, sizeof(u));
105979     XMEMCPY(v, a, sizeof(v));
105980 
105981     ut = sp_256_num_bits_8(u);
105982     vt = sp_256_num_bits_8(v);
105983 
105984     XMEMSET(b, 0, sizeof(b));
105985     if ((v[0] & 1) == 0) {
105986         sp_256_rshift1_8(v, v);
105987         XMEMCPY(d, m, sizeof(u));
105988         d[0] += 1;
105989         sp_256_rshift1_8(d, d);
105990         vt--;
105991 
105992         while ((v[0] & 1) == 0) {
105993             sp_256_rshift1_8(v, v);
105994             sp_256_div2_mod_8(d, d, m);
105995             vt--;
105996         }
105997     }
105998     else {
105999         XMEMSET(d+1, 0, sizeof(d)-sizeof(sp_digit));
106000         d[0] = 1;
106001     }
106002 
106003     while (ut > 1 && vt > 1) {
106004         if (ut > vt || (ut == vt && sp_256_cmp_8(u, v) >= 0)) {
106005             sp_256_sub_8(u, u, v);
106006             o = sp_256_sub_8(b, b, d);
106007             if (o != 0)
106008                 sp_256_add_8(b, b, m);
106009             ut = sp_256_num_bits_8(u);
106010 
106011             do {
106012                 sp_256_rshift1_8(u, u);
106013                 sp_256_div2_mod_8(b, b, m);
106014                 ut--;
106015             }
106016             while (ut > 0 && (u[0] & 1) == 0);
106017         }
106018         else {
106019             sp_256_sub_8(v, v, u);
106020             o = sp_256_sub_8(d, d, b);
106021             if (o != 0)
106022                 sp_256_add_8(d, d, m);
106023             vt = sp_256_num_bits_8(v);
106024 
106025             do {
106026                 sp_256_rshift1_8(v, v);
106027                 sp_256_div2_mod_8(d, d, m);
106028                 vt--;
106029             }
106030             while (vt > 0 && (v[0] & 1) == 0);
106031         }
106032     }
106033 
106034     if (ut == 1)
106035         XMEMCPY(r, b, sizeof(b));
106036     else
106037         XMEMCPY(r, d, sizeof(d));
106038 
106039     return MP_OKAY;
106040 }
106041 
106042 #endif /* WOLFSSL_SP_SMALL */
106043 
106044 /* Add point p1 into point p2. Handles p1 == p2 and result at infinity.
106045  *
106046  * p1   First point to add and holds result.
106047  * p2   Second point to add.
106048  * tmp  Temporary storage for intermediate numbers.
106049  */
sp_256_add_points_8(sp_point_256 * p1,const sp_point_256 * p2,sp_digit * tmp)106050 static void sp_256_add_points_8(sp_point_256* p1, const sp_point_256* p2,
106051     sp_digit* tmp)
106052 {
106053 
106054         sp_256_proj_point_add_8(p1, p1, p2, tmp);
106055     if (sp_256_iszero_8(p1->z)) {
106056         if (sp_256_iszero_8(p1->x) && sp_256_iszero_8(p1->y)) {
106057                 sp_256_proj_point_dbl_8(p1, p2, tmp);
106058         }
106059         else {
106060             /* Y ordinate is not used from here - don't set. */
106061             p1->x[0] = 0;
106062             p1->x[1] = 0;
106063             p1->x[2] = 0;
106064             p1->x[3] = 0;
106065             p1->x[4] = 0;
106066             p1->x[5] = 0;
106067             p1->x[6] = 0;
106068             p1->x[7] = 0;
106069             XMEMCPY(p1->z, p256_norm_mod, sizeof(p256_norm_mod));
106070         }
106071     }
106072 }
106073 
106074 /* Calculate the verification point: [e/s]G + [r/s]Q
106075  *
106076  * p1    Calculated point.
106077  * p2    Public point and temporary.
106078  * s     Second part of signature as a number.
106079  * u1    Temporary number.
106080  * u2    Temproray number.
106081  * heap  Heap to use for allocation.
106082  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
106083  */
sp_256_calc_vfy_point_8(sp_point_256 * p1,sp_point_256 * p2,sp_digit * s,sp_digit * u1,sp_digit * u2,sp_digit * tmp,void * heap)106084 static int sp_256_calc_vfy_point_8(sp_point_256* p1, sp_point_256* p2,
106085     sp_digit* s, sp_digit* u1, sp_digit* u2, sp_digit* tmp, void* heap)
106086 {
106087     int err;
106088 
106089 #ifndef WOLFSSL_SP_SMALL
106090     err = sp_256_mod_inv_8(s, s, p256_order);
106091     if (err == MP_OKAY)
106092 #endif /* !WOLFSSL_SP_SMALL */
106093     {
106094         sp_256_mul_8(s, s, p256_norm_order);
106095         err = sp_256_mod_8(s, s, p256_order);
106096     }
106097     if (err == MP_OKAY) {
106098         sp_256_norm_8(s);
106099 #ifdef WOLFSSL_SP_SMALL
106100         {
106101             sp_256_mont_inv_order_8(s, s, tmp);
106102             sp_256_mont_mul_order_8(u1, u1, s);
106103             sp_256_mont_mul_order_8(u2, u2, s);
106104         }
106105 #else
106106         {
106107             sp_256_mont_mul_order_8(u1, u1, s);
106108             sp_256_mont_mul_order_8(u2, u2, s);
106109         }
106110 #endif /* WOLFSSL_SP_SMALL */
106111         {
106112             err = sp_256_ecc_mulmod_base_8(p1, u1, 0, 0, heap);
106113         }
106114     }
106115     if ((err == MP_OKAY) && sp_256_iszero_8(p1->z)) {
106116         p1->infinity = 1;
106117     }
106118     if (err == MP_OKAY) {
106119             err = sp_256_ecc_mulmod_8(p2, p2, u2, 0, 0, heap);
106120     }
106121     if ((err == MP_OKAY) && sp_256_iszero_8(p2->z)) {
106122         p2->infinity = 1;
106123     }
106124 
106125     if (err == MP_OKAY) {
106126         sp_256_add_points_8(p1, p2, tmp);
106127     }
106128 
106129     return err;
106130 }
106131 
106132 #ifdef HAVE_ECC_VERIFY
106133 /* Verify the signature values with the hash and public key.
106134  *   e = Truncate(hash, 256)
106135  *   u1 = e/s mod order
106136  *   u2 = r/s mod order
106137  *   r == (u1.G + u2.Q)->x mod order
106138  * Optimization: Leave point in projective form.
106139  *   (x, y, 1) == (x' / z'*z', y' / z'*z'*z', z' / z')
106140  *   (r + n*order).z'.z' mod prime == (u1.G + u2.Q)->x'
106141  * The hash is truncated to the first 256 bits.
106142  *
106143  * hash     Hash to sign.
106144  * hashLen  Length of the hash data.
106145  * rng      Random number generator.
106146  * priv     Private part of key - scalar.
106147  * rm       First part of result as an mp_int.
106148  * sm       Sirst part of result as an mp_int.
106149  * heap     Heap to use for allocation.
106150  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
106151  */
106152 #ifdef WOLFSSL_SP_NONBLOCK
106153 typedef struct sp_ecc_verify_256_ctx {
106154     int state;
106155     union {
106156         sp_256_ecc_mulmod_8_ctx mulmod_ctx;
106157         sp_256_mont_inv_order_8_ctx mont_inv_order_ctx;
106158         sp_256_proj_point_dbl_8_ctx dbl_ctx;
106159         sp_256_proj_point_add_8_ctx add_ctx;
106160     };
106161     sp_digit u1[2*8];
106162     sp_digit u2[2*8];
106163     sp_digit s[2*8];
106164     sp_digit tmp[2*8 * 5];
106165     sp_point_256 p1;
106166     sp_point_256 p2;
106167 } sp_ecc_verify_256_ctx;
106168 
sp_ecc_verify_256_nb(sp_ecc_ctx_t * sp_ctx,const byte * hash,word32 hashLen,const mp_int * pX,const mp_int * pY,const mp_int * pZ,const mp_int * rm,const mp_int * sm,int * res,void * heap)106169 int sp_ecc_verify_256_nb(sp_ecc_ctx_t* sp_ctx, const byte* hash,
106170     word32 hashLen, const mp_int* pX, const mp_int* pY, const mp_int* pZ,
106171     const mp_int* rm, const mp_int* sm, int* res, void* heap)
106172 {
106173     int err = FP_WOULDBLOCK;
106174     sp_ecc_verify_256_ctx* ctx = (sp_ecc_verify_256_ctx*)sp_ctx->data;
106175 
106176     typedef char ctx_size_test[sizeof(sp_ecc_verify_256_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
106177     (void)sizeof(ctx_size_test);
106178 
106179     switch (ctx->state) {
106180     case 0: /* INIT */
106181         if (hashLen > 32U) {
106182             hashLen = 32U;
106183         }
106184 
106185         sp_256_from_bin(ctx->u1, 8, hash, (int)hashLen);
106186         sp_256_from_mp(ctx->u2, 8, rm);
106187         sp_256_from_mp(ctx->s, 8, sm);
106188         sp_256_from_mp(ctx->p2.x, 8, pX);
106189         sp_256_from_mp(ctx->p2.y, 8, pY);
106190         sp_256_from_mp(ctx->p2.z, 8, pZ);
106191         ctx->state = 1;
106192         break;
106193     case 1: /* NORMS0 */
106194         sp_256_mul_8(ctx->s, ctx->s, p256_norm_order);
106195         err = sp_256_mod_8(ctx->s, ctx->s, p256_order);
106196         if (err == MP_OKAY)
106197             ctx->state = 2;
106198         break;
106199     case 2: /* NORMS1 */
106200         sp_256_norm_8(ctx->s);
106201         XMEMSET(&ctx->mont_inv_order_ctx, 0, sizeof(ctx->mont_inv_order_ctx));
106202         ctx->state = 3;
106203         break;
106204     case 3: /* NORMS2 */
106205         err = sp_256_mont_inv_order_8_nb((sp_ecc_ctx_t*)&ctx->mont_inv_order_ctx, ctx->s, ctx->s, ctx->tmp);
106206         if (err == MP_OKAY) {
106207             ctx->state = 4;
106208         }
106209         break;
106210     case 4: /* NORMS3 */
106211         sp_256_mont_mul_order_8(ctx->u1, ctx->u1, ctx->s);
106212         ctx->state = 5;
106213         break;
106214     case 5: /* NORMS4 */
106215         sp_256_mont_mul_order_8(ctx->u2, ctx->u2, ctx->s);
106216         XMEMSET(&ctx->mulmod_ctx, 0, sizeof(ctx->mulmod_ctx));
106217         ctx->state = 6;
106218         break;
106219     case 6: /* MULBASE */
106220         err = sp_256_ecc_mulmod_8_nb((sp_ecc_ctx_t*)&ctx->mulmod_ctx, &ctx->p1, &p256_base, ctx->u1, 0, 0, heap);
106221         if (err == MP_OKAY) {
106222             if (sp_256_iszero_8(ctx->p1.z)) {
106223                 ctx->p1.infinity = 1;
106224             }
106225             XMEMSET(&ctx->mulmod_ctx, 0, sizeof(ctx->mulmod_ctx));
106226             ctx->state = 7;
106227         }
106228         break;
106229     case 7: /* MULMOD */
106230         err = sp_256_ecc_mulmod_8_nb((sp_ecc_ctx_t*)&ctx->mulmod_ctx, &ctx->p2, &ctx->p2, ctx->u2, 0, 0, heap);
106231         if (err == MP_OKAY) {
106232             if (sp_256_iszero_8(ctx->p2.z)) {
106233                 ctx->p2.infinity = 1;
106234             }
106235             XMEMSET(&ctx->add_ctx, 0, sizeof(ctx->add_ctx));
106236             ctx->state = 8;
106237         }
106238         break;
106239     case 8: /* ADD */
106240         err = sp_256_proj_point_add_8_nb((sp_ecc_ctx_t*)&ctx->add_ctx, &ctx->p1, &ctx->p1, &ctx->p2, ctx->tmp);
106241         if (err == MP_OKAY)
106242             ctx->state = 9;
106243         break;
106244     case 9: /* MONT */
106245         /* (r + n*order).z'.z' mod prime == (u1.G + u2.Q)->x' */
106246         /* Reload r and convert to Montgomery form. */
106247         sp_256_from_mp(ctx->u2, 8, rm);
106248         err = sp_256_mod_mul_norm_8(ctx->u2, ctx->u2, p256_mod);
106249         if (err == MP_OKAY)
106250             ctx->state = 10;
106251         break;
106252     case 10: /* SQR */
106253         /* u1 = r.z'.z' mod prime */
106254         sp_256_mont_sqr_8(ctx->p1.z, ctx->p1.z, p256_mod, p256_mp_mod);
106255         ctx->state = 11;
106256         break;
106257     case 11: /* MUL */
106258         sp_256_mont_mul_8(ctx->u1, ctx->u2, ctx->p1.z, p256_mod, p256_mp_mod);
106259         ctx->state = 12;
106260         break;
106261     case 12: /* RES */
106262     {
106263         sp_int32 c = 0;
106264         err = MP_OKAY; /* math okay, now check result */
106265         *res = (int)(sp_256_cmp_8(ctx->p1.x, ctx->u1) == 0);
106266         if (*res == 0) {
106267             sp_digit carry;
106268 
106269             /* Reload r and add order. */
106270             sp_256_from_mp(ctx->u2, 8, rm);
106271             carry = sp_256_add_8(ctx->u2, ctx->u2, p256_order);
106272             /* Carry means result is greater than mod and is not valid. */
106273             if (carry == 0) {
106274                 sp_256_norm_8(ctx->u2);
106275 
106276                 /* Compare with mod and if greater or equal then not valid. */
106277                 c = sp_256_cmp_8(ctx->u2, p256_mod);
106278             }
106279         }
106280         if ((*res == 0) && (c < 0)) {
106281             /* Convert to Montogomery form */
106282             err = sp_256_mod_mul_norm_8(ctx->u2, ctx->u2, p256_mod);
106283             if (err == MP_OKAY) {
106284                 /* u1 = (r + 1*order).z'.z' mod prime */
106285                 sp_256_mont_mul_8(ctx->u1, ctx->u2, ctx->p1.z, p256_mod,
106286                                                             p256_mp_mod);
106287                 *res = (int)(sp_256_cmp_8(ctx->p1.x, ctx->u1) == 0);
106288             }
106289         }
106290         break;
106291     }
106292     } /* switch */
106293 
106294     if (err == MP_OKAY && ctx->state != 12) {
106295         err = FP_WOULDBLOCK;
106296     }
106297 
106298     return err;
106299 }
106300 #endif /* WOLFSSL_SP_NONBLOCK */
106301 
sp_ecc_verify_256(const byte * hash,word32 hashLen,const mp_int * pX,const mp_int * pY,const mp_int * pZ,const mp_int * rm,const mp_int * sm,int * res,void * heap)106302 int sp_ecc_verify_256(const byte* hash, word32 hashLen, const mp_int* pX,
106303     const mp_int* pY, const mp_int* pZ, const mp_int* rm, const mp_int* sm,
106304     int* res, void* heap)
106305 {
106306 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106307     sp_digit* u1 = NULL;
106308     sp_point_256* p1 = NULL;
106309 #else
106310     sp_digit  u1[16 * 8];
106311     sp_point_256 p1[2];
106312 #endif
106313     sp_digit* u2 = NULL;
106314     sp_digit* s = NULL;
106315     sp_digit* tmp = NULL;
106316     sp_point_256* p2 = NULL;
106317     sp_digit carry;
106318     sp_int32 c = 0;
106319     int err = MP_OKAY;
106320 
106321 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106322     if (err == MP_OKAY) {
106323         p1 = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap,
106324                                              DYNAMIC_TYPE_ECC);
106325         if (p1 == NULL)
106326             err = MEMORY_E;
106327     }
106328     if (err == MP_OKAY) {
106329         u1 = (sp_digit*)XMALLOC(sizeof(sp_digit) * 16 * 8, heap,
106330                                                               DYNAMIC_TYPE_ECC);
106331         if (u1 == NULL)
106332             err = MEMORY_E;
106333     }
106334 #endif
106335 
106336     if (err == MP_OKAY) {
106337         u2  = u1 + 2 * 8;
106338         s   = u1 + 4 * 8;
106339         tmp = u1 + 6 * 8;
106340         p2 = p1 + 1;
106341 
106342         if (hashLen > 32U) {
106343             hashLen = 32U;
106344         }
106345 
106346         sp_256_from_bin(u1, 8, hash, (int)hashLen);
106347         sp_256_from_mp(u2, 8, rm);
106348         sp_256_from_mp(s, 8, sm);
106349         sp_256_from_mp(p2->x, 8, pX);
106350         sp_256_from_mp(p2->y, 8, pY);
106351         sp_256_from_mp(p2->z, 8, pZ);
106352 
106353         err = sp_256_calc_vfy_point_8(p1, p2, s, u1, u2, tmp, heap);
106354     }
106355     if (err == MP_OKAY) {
106356         /* (r + n*order).z'.z' mod prime == (u1.G + u2.Q)->x' */
106357         /* Reload r and convert to Montgomery form. */
106358         sp_256_from_mp(u2, 8, rm);
106359         err = sp_256_mod_mul_norm_8(u2, u2, p256_mod);
106360     }
106361 
106362     if (err == MP_OKAY) {
106363         /* u1 = r.z'.z' mod prime */
106364         sp_256_mont_sqr_8(p1->z, p1->z, p256_mod, p256_mp_mod);
106365         sp_256_mont_mul_8(u1, u2, p1->z, p256_mod, p256_mp_mod);
106366         *res = (int)(sp_256_cmp_8(p1->x, u1) == 0);
106367         if (*res == 0) {
106368             /* Reload r and add order. */
106369             sp_256_from_mp(u2, 8, rm);
106370             carry = sp_256_add_8(u2, u2, p256_order);
106371             /* Carry means result is greater than mod and is not valid. */
106372             if (carry == 0) {
106373                 sp_256_norm_8(u2);
106374 
106375                 /* Compare with mod and if greater or equal then not valid. */
106376                 c = sp_256_cmp_8(u2, p256_mod);
106377             }
106378         }
106379         if ((*res == 0) && (c < 0)) {
106380             /* Convert to Montogomery form */
106381             err = sp_256_mod_mul_norm_8(u2, u2, p256_mod);
106382             if (err == MP_OKAY) {
106383                 /* u1 = (r + 1*order).z'.z' mod prime */
106384                 sp_256_mont_mul_8(u1, u2, p1->z, p256_mod,
106385                     p256_mp_mod);
106386                 *res = (sp_256_cmp_8(p1->x, u1) == 0);
106387             }
106388         }
106389     }
106390 
106391 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106392     if (u1 != NULL)
106393         XFREE(u1, heap, DYNAMIC_TYPE_ECC);
106394     if (p1 != NULL)
106395         XFREE(p1, heap, DYNAMIC_TYPE_ECC);
106396 #endif
106397 
106398     return err;
106399 }
106400 #endif /* HAVE_ECC_VERIFY */
106401 
106402 #ifdef HAVE_ECC_CHECK_KEY
106403 /* Check that the x and y oridinates are a valid point on the curve.
106404  *
106405  * point  EC point.
106406  * heap   Heap to use if dynamically allocating.
106407  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
106408  * not on the curve and MP_OKAY otherwise.
106409  */
sp_256_ecc_is_point_8(const sp_point_256 * point,void * heap)106410 static int sp_256_ecc_is_point_8(const sp_point_256* point,
106411     void* heap)
106412 {
106413 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106414     sp_digit* t1 = NULL;
106415 #else
106416     sp_digit t1[8 * 4];
106417 #endif
106418     sp_digit* t2 = NULL;
106419     int err = MP_OKAY;
106420 
106421 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106422     t1 = (sp_digit*)XMALLOC(sizeof(sp_digit) * 8 * 4, heap, DYNAMIC_TYPE_ECC);
106423     if (t1 == NULL)
106424         err = MEMORY_E;
106425 #endif
106426     (void)heap;
106427 
106428     if (err == MP_OKAY) {
106429         t2 = t1 + 2 * 8;
106430 
106431         sp_256_sqr_8(t1, point->y);
106432         (void)sp_256_mod_8(t1, t1, p256_mod);
106433         sp_256_sqr_8(t2, point->x);
106434         (void)sp_256_mod_8(t2, t2, p256_mod);
106435         sp_256_mul_8(t2, t2, point->x);
106436         (void)sp_256_mod_8(t2, t2, p256_mod);
106437         (void)sp_256_sub_8(t2, p256_mod, t2);
106438         sp_256_mont_add_8(t1, t1, t2, p256_mod);
106439 
106440         sp_256_mont_add_8(t1, t1, point->x, p256_mod);
106441         sp_256_mont_add_8(t1, t1, point->x, p256_mod);
106442         sp_256_mont_add_8(t1, t1, point->x, p256_mod);
106443 
106444         if (sp_256_cmp_8(t1, p256_b) != 0) {
106445             err = MP_VAL;
106446         }
106447     }
106448 
106449 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106450     if (t1 != NULL)
106451         XFREE(t1, heap, DYNAMIC_TYPE_ECC);
106452 #endif
106453 
106454     return err;
106455 }
106456 
106457 /* Check that the x and y oridinates are a valid point on the curve.
106458  *
106459  * pX  X ordinate of EC point.
106460  * pY  Y ordinate of EC point.
106461  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
106462  * not on the curve and MP_OKAY otherwise.
106463  */
sp_ecc_is_point_256(const mp_int * pX,const mp_int * pY)106464 int sp_ecc_is_point_256(const mp_int* pX, const mp_int* pY)
106465 {
106466 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106467     sp_point_256* pub = NULL;
106468 #else
106469     sp_point_256 pub[1];
106470 #endif
106471     const byte one[1] = { 1 };
106472     int err = MP_OKAY;
106473 
106474 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106475     pub = (sp_point_256*)XMALLOC(sizeof(sp_point_256), NULL,
106476                                        DYNAMIC_TYPE_ECC);
106477     if (pub == NULL)
106478         err = MEMORY_E;
106479 #endif
106480 
106481     if (err == MP_OKAY) {
106482         sp_256_from_mp(pub->x, 8, pX);
106483         sp_256_from_mp(pub->y, 8, pY);
106484         sp_256_from_bin(pub->z, 8, one, (int)sizeof(one));
106485 
106486         err = sp_256_ecc_is_point_8(pub, NULL);
106487     }
106488 
106489 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106490     if (pub != NULL)
106491         XFREE(pub, NULL, DYNAMIC_TYPE_ECC);
106492 #endif
106493 
106494     return err;
106495 }
106496 
106497 /* Check that the private scalar generates the EC point (px, py), the point is
106498  * on the curve and the point has the correct order.
106499  *
106500  * pX     X ordinate of EC point.
106501  * pY     Y ordinate of EC point.
106502  * privm  Private scalar that generates EC point.
106503  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
106504  * not on the curve, ECC_INF_E if the point does not have the correct order,
106505  * ECC_PRIV_KEY_E when the private scalar doesn't generate the EC point and
106506  * MP_OKAY otherwise.
106507  */
sp_ecc_check_key_256(const mp_int * pX,const mp_int * pY,const mp_int * privm,void * heap)106508 int sp_ecc_check_key_256(const mp_int* pX, const mp_int* pY,
106509     const mp_int* privm, void* heap)
106510 {
106511 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106512     sp_digit* priv = NULL;
106513     sp_point_256* pub = NULL;
106514 #else
106515     sp_digit priv[8];
106516     sp_point_256 pub[2];
106517 #endif
106518     sp_point_256* p = NULL;
106519     const byte one[1] = { 1 };
106520     int err = MP_OKAY;
106521 
106522 
106523     /* Quick check the lengs of public key ordinates and private key are in
106524      * range. Proper check later.
106525      */
106526     if (((mp_count_bits(pX) > 256) ||
106527         (mp_count_bits(pY) > 256) ||
106528         ((privm != NULL) && (mp_count_bits(privm) > 256)))) {
106529         err = ECC_OUT_OF_RANGE_E;
106530     }
106531 
106532 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106533     if (err == MP_OKAY) {
106534         pub = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap,
106535                                            DYNAMIC_TYPE_ECC);
106536         if (pub == NULL)
106537             err = MEMORY_E;
106538     }
106539     if (err == MP_OKAY && privm) {
106540         priv = (sp_digit*)XMALLOC(sizeof(sp_digit) * 8, heap,
106541                                   DYNAMIC_TYPE_ECC);
106542         if (priv == NULL)
106543             err = MEMORY_E;
106544     }
106545 #endif
106546 
106547     if (err == MP_OKAY) {
106548         p = pub + 1;
106549 
106550         sp_256_from_mp(pub->x, 8, pX);
106551         sp_256_from_mp(pub->y, 8, pY);
106552         sp_256_from_bin(pub->z, 8, one, (int)sizeof(one));
106553         if (privm)
106554             sp_256_from_mp(priv, 8, privm);
106555 
106556         /* Check point at infinitiy. */
106557         if ((sp_256_iszero_8(pub->x) != 0) &&
106558             (sp_256_iszero_8(pub->y) != 0)) {
106559             err = ECC_INF_E;
106560         }
106561     }
106562 
106563     /* Check range of X and Y */
106564     if ((err == MP_OKAY) &&
106565             ((sp_256_cmp_8(pub->x, p256_mod) >= 0) ||
106566              (sp_256_cmp_8(pub->y, p256_mod) >= 0))) {
106567         err = ECC_OUT_OF_RANGE_E;
106568     }
106569 
106570     if (err == MP_OKAY) {
106571         /* Check point is on curve */
106572         err = sp_256_ecc_is_point_8(pub, heap);
106573     }
106574 
106575     if (err == MP_OKAY) {
106576         /* Point * order = infinity */
106577             err = sp_256_ecc_mulmod_8(p, pub, p256_order, 1, 1, heap);
106578     }
106579     /* Check result is infinity */
106580     if ((err == MP_OKAY) && ((sp_256_iszero_8(p->x) == 0) ||
106581                              (sp_256_iszero_8(p->y) == 0))) {
106582         err = ECC_INF_E;
106583     }
106584 
106585     if (privm) {
106586         if (err == MP_OKAY) {
106587             /* Base * private = point */
106588                 err = sp_256_ecc_mulmod_base_8(p, priv, 1, 1, heap);
106589         }
106590         /* Check result is public key */
106591         if ((err == MP_OKAY) &&
106592                 ((sp_256_cmp_8(p->x, pub->x) != 0) ||
106593                  (sp_256_cmp_8(p->y, pub->y) != 0))) {
106594             err = ECC_PRIV_KEY_E;
106595         }
106596     }
106597 
106598 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106599     if (pub != NULL)
106600         XFREE(pub, heap, DYNAMIC_TYPE_ECC);
106601     if (priv != NULL)
106602         XFREE(priv, heap, DYNAMIC_TYPE_ECC);
106603 #endif
106604 
106605     return err;
106606 }
106607 #endif
106608 #ifdef WOLFSSL_PUBLIC_ECC_ADD_DBL
106609 /* Add two projective EC points together.
106610  * (pX, pY, pZ) + (qX, qY, qZ) = (rX, rY, rZ)
106611  *
106612  * pX   First EC point's X ordinate.
106613  * pY   First EC point's Y ordinate.
106614  * pZ   First EC point's Z ordinate.
106615  * qX   Second EC point's X ordinate.
106616  * qY   Second EC point's Y ordinate.
106617  * qZ   Second EC point's Z ordinate.
106618  * rX   Resultant EC point's X ordinate.
106619  * rY   Resultant EC point's Y ordinate.
106620  * rZ   Resultant EC point's Z ordinate.
106621  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
106622  */
sp_ecc_proj_add_point_256(mp_int * pX,mp_int * pY,mp_int * pZ,mp_int * qX,mp_int * qY,mp_int * qZ,mp_int * rX,mp_int * rY,mp_int * rZ)106623 int sp_ecc_proj_add_point_256(mp_int* pX, mp_int* pY, mp_int* pZ,
106624                               mp_int* qX, mp_int* qY, mp_int* qZ,
106625                               mp_int* rX, mp_int* rY, mp_int* rZ)
106626 {
106627 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106628     sp_digit* tmp = NULL;
106629     sp_point_256* p = NULL;
106630 #else
106631     sp_digit tmp[2 * 8 * 5];
106632     sp_point_256 p[2];
106633 #endif
106634     sp_point_256* q = NULL;
106635     int err = MP_OKAY;
106636 
106637 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106638     if (err == MP_OKAY) {
106639         p = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, NULL,
106640                                          DYNAMIC_TYPE_ECC);
106641         if (p == NULL)
106642             err = MEMORY_E;
106643     }
106644     if (err == MP_OKAY) {
106645         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 8 * 5, NULL,
106646                                  DYNAMIC_TYPE_ECC);
106647         if (tmp == NULL) {
106648             err = MEMORY_E;
106649         }
106650     }
106651 #endif
106652 
106653     if (err == MP_OKAY) {
106654         q = p + 1;
106655 
106656         sp_256_from_mp(p->x, 8, pX);
106657         sp_256_from_mp(p->y, 8, pY);
106658         sp_256_from_mp(p->z, 8, pZ);
106659         sp_256_from_mp(q->x, 8, qX);
106660         sp_256_from_mp(q->y, 8, qY);
106661         sp_256_from_mp(q->z, 8, qZ);
106662         p->infinity = sp_256_iszero_8(p->x) &
106663                       sp_256_iszero_8(p->y);
106664         q->infinity = sp_256_iszero_8(q->x) &
106665                       sp_256_iszero_8(q->y);
106666 
106667             sp_256_proj_point_add_8(p, p, q, tmp);
106668     }
106669 
106670     if (err == MP_OKAY) {
106671         err = sp_256_to_mp(p->x, rX);
106672     }
106673     if (err == MP_OKAY) {
106674         err = sp_256_to_mp(p->y, rY);
106675     }
106676     if (err == MP_OKAY) {
106677         err = sp_256_to_mp(p->z, rZ);
106678     }
106679 
106680 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106681     if (tmp != NULL)
106682         XFREE(tmp, NULL, DYNAMIC_TYPE_ECC);
106683     if (p != NULL)
106684         XFREE(p, NULL, DYNAMIC_TYPE_ECC);
106685 #endif
106686 
106687     return err;
106688 }
106689 
106690 /* Double a projective EC point.
106691  * (pX, pY, pZ) + (pX, pY, pZ) = (rX, rY, rZ)
106692  *
106693  * pX   EC point's X ordinate.
106694  * pY   EC point's Y ordinate.
106695  * pZ   EC point's Z ordinate.
106696  * rX   Resultant EC point's X ordinate.
106697  * rY   Resultant EC point's Y ordinate.
106698  * rZ   Resultant EC point's Z ordinate.
106699  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
106700  */
sp_ecc_proj_dbl_point_256(mp_int * pX,mp_int * pY,mp_int * pZ,mp_int * rX,mp_int * rY,mp_int * rZ)106701 int sp_ecc_proj_dbl_point_256(mp_int* pX, mp_int* pY, mp_int* pZ,
106702                               mp_int* rX, mp_int* rY, mp_int* rZ)
106703 {
106704 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106705     sp_digit* tmp = NULL;
106706     sp_point_256* p = NULL;
106707 #else
106708     sp_digit tmp[2 * 8 * 2];
106709     sp_point_256 p[1];
106710 #endif
106711     int err = MP_OKAY;
106712 
106713 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106714     if (err == MP_OKAY) {
106715         p = (sp_point_256*)XMALLOC(sizeof(sp_point_256), NULL,
106716                                          DYNAMIC_TYPE_ECC);
106717         if (p == NULL)
106718             err = MEMORY_E;
106719     }
106720     if (err == MP_OKAY) {
106721         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 8 * 2, NULL,
106722                                  DYNAMIC_TYPE_ECC);
106723         if (tmp == NULL)
106724             err = MEMORY_E;
106725     }
106726 #endif
106727 
106728     if (err == MP_OKAY) {
106729         sp_256_from_mp(p->x, 8, pX);
106730         sp_256_from_mp(p->y, 8, pY);
106731         sp_256_from_mp(p->z, 8, pZ);
106732         p->infinity = sp_256_iszero_8(p->x) &
106733                       sp_256_iszero_8(p->y);
106734 
106735             sp_256_proj_point_dbl_8(p, p, tmp);
106736     }
106737 
106738     if (err == MP_OKAY) {
106739         err = sp_256_to_mp(p->x, rX);
106740     }
106741     if (err == MP_OKAY) {
106742         err = sp_256_to_mp(p->y, rY);
106743     }
106744     if (err == MP_OKAY) {
106745         err = sp_256_to_mp(p->z, rZ);
106746     }
106747 
106748 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106749     if (tmp != NULL)
106750         XFREE(tmp, NULL, DYNAMIC_TYPE_ECC);
106751     if (p != NULL)
106752         XFREE(p, NULL, DYNAMIC_TYPE_ECC);
106753 #endif
106754 
106755     return err;
106756 }
106757 
106758 /* Map a projective EC point to affine in place.
106759  * pZ will be one.
106760  *
106761  * pX   EC point's X ordinate.
106762  * pY   EC point's Y ordinate.
106763  * pZ   EC point's Z ordinate.
106764  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
106765  */
sp_ecc_map_256(mp_int * pX,mp_int * pY,mp_int * pZ)106766 int sp_ecc_map_256(mp_int* pX, mp_int* pY, mp_int* pZ)
106767 {
106768 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106769     sp_digit* tmp = NULL;
106770     sp_point_256* p = NULL;
106771 #else
106772     sp_digit tmp[2 * 8 * 4];
106773     sp_point_256 p[1];
106774 #endif
106775     int err = MP_OKAY;
106776 
106777 
106778 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106779     if (err == MP_OKAY) {
106780         p = (sp_point_256*)XMALLOC(sizeof(sp_point_256), NULL,
106781                                          DYNAMIC_TYPE_ECC);
106782         if (p == NULL)
106783             err = MEMORY_E;
106784     }
106785     if (err == MP_OKAY) {
106786         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 8 * 4, NULL,
106787                                  DYNAMIC_TYPE_ECC);
106788         if (tmp == NULL)
106789             err = MEMORY_E;
106790     }
106791 #endif
106792     if (err == MP_OKAY) {
106793         sp_256_from_mp(p->x, 8, pX);
106794         sp_256_from_mp(p->y, 8, pY);
106795         sp_256_from_mp(p->z, 8, pZ);
106796         p->infinity = sp_256_iszero_8(p->x) &
106797                       sp_256_iszero_8(p->y);
106798 
106799             sp_256_map_8(p, p, tmp);
106800     }
106801 
106802     if (err == MP_OKAY) {
106803         err = sp_256_to_mp(p->x, pX);
106804     }
106805     if (err == MP_OKAY) {
106806         err = sp_256_to_mp(p->y, pY);
106807     }
106808     if (err == MP_OKAY) {
106809         err = sp_256_to_mp(p->z, pZ);
106810     }
106811 
106812 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106813     if (tmp != NULL)
106814         XFREE(tmp, NULL, DYNAMIC_TYPE_ECC);
106815     if (p != NULL)
106816         XFREE(p, NULL, DYNAMIC_TYPE_ECC);
106817 #endif
106818 
106819     return err;
106820 }
106821 #endif /* WOLFSSL_PUBLIC_ECC_ADD_DBL */
106822 #ifdef HAVE_COMP_KEY
106823 /* Find the square root of a number mod the prime of the curve.
106824  *
106825  * y  The number to operate on and the result.
106826  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
106827  */
sp_256_mont_sqrt_8(sp_digit * y)106828 static int sp_256_mont_sqrt_8(sp_digit* y)
106829 {
106830 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106831     sp_digit* t1 = NULL;
106832 #else
106833     sp_digit t1[4 * 8];
106834 #endif
106835     sp_digit* t2 = NULL;
106836     int err = MP_OKAY;
106837 
106838 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106839     t1 = (sp_digit*)XMALLOC(sizeof(sp_digit) * 4 * 8, NULL, DYNAMIC_TYPE_ECC);
106840     if (t1 == NULL) {
106841         err = MEMORY_E;
106842     }
106843 #endif
106844 
106845     if (err == MP_OKAY) {
106846         t2 = t1 + 2 * 8;
106847 
106848         {
106849             /* t2 = y ^ 0x2 */
106850             sp_256_mont_sqr_8(t2, y, p256_mod, p256_mp_mod);
106851             /* t1 = y ^ 0x3 */
106852             sp_256_mont_mul_8(t1, t2, y, p256_mod, p256_mp_mod);
106853             /* t2 = y ^ 0xc */
106854             sp_256_mont_sqr_n_8(t2, t1, 2, p256_mod, p256_mp_mod);
106855             /* t1 = y ^ 0xf */
106856             sp_256_mont_mul_8(t1, t1, t2, p256_mod, p256_mp_mod);
106857             /* t2 = y ^ 0xf0 */
106858             sp_256_mont_sqr_n_8(t2, t1, 4, p256_mod, p256_mp_mod);
106859             /* t1 = y ^ 0xff */
106860             sp_256_mont_mul_8(t1, t1, t2, p256_mod, p256_mp_mod);
106861             /* t2 = y ^ 0xff00 */
106862             sp_256_mont_sqr_n_8(t2, t1, 8, p256_mod, p256_mp_mod);
106863             /* t1 = y ^ 0xffff */
106864             sp_256_mont_mul_8(t1, t1, t2, p256_mod, p256_mp_mod);
106865             /* t2 = y ^ 0xffff0000 */
106866             sp_256_mont_sqr_n_8(t2, t1, 16, p256_mod, p256_mp_mod);
106867             /* t1 = y ^ 0xffffffff */
106868             sp_256_mont_mul_8(t1, t1, t2, p256_mod, p256_mp_mod);
106869             /* t1 = y ^ 0xffffffff00000000 */
106870             sp_256_mont_sqr_n_8(t1, t1, 32, p256_mod, p256_mp_mod);
106871             /* t1 = y ^ 0xffffffff00000001 */
106872             sp_256_mont_mul_8(t1, t1, y, p256_mod, p256_mp_mod);
106873             /* t1 = y ^ 0xffffffff00000001000000000000000000000000 */
106874             sp_256_mont_sqr_n_8(t1, t1, 96, p256_mod, p256_mp_mod);
106875             /* t1 = y ^ 0xffffffff00000001000000000000000000000001 */
106876             sp_256_mont_mul_8(t1, t1, y, p256_mod, p256_mp_mod);
106877             sp_256_mont_sqr_n_8(y, t1, 94, p256_mod, p256_mp_mod);
106878         }
106879     }
106880 
106881 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106882     if (t1 != NULL)
106883         XFREE(t1, NULL, DYNAMIC_TYPE_ECC);
106884 #endif
106885 
106886     return err;
106887 }
106888 
106889 
106890 /* Uncompress the point given the X ordinate.
106891  *
106892  * xm    X ordinate.
106893  * odd   Whether the Y ordinate is odd.
106894  * ym    Calculated Y ordinate.
106895  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
106896  */
sp_ecc_uncompress_256(mp_int * xm,int odd,mp_int * ym)106897 int sp_ecc_uncompress_256(mp_int* xm, int odd, mp_int* ym)
106898 {
106899 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106900     sp_digit* x = NULL;
106901 #else
106902     sp_digit x[4 * 8];
106903 #endif
106904     sp_digit* y = NULL;
106905     int err = MP_OKAY;
106906 
106907 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106908     x = (sp_digit*)XMALLOC(sizeof(sp_digit) * 4 * 8, NULL, DYNAMIC_TYPE_ECC);
106909     if (x == NULL)
106910         err = MEMORY_E;
106911 #endif
106912 
106913     if (err == MP_OKAY) {
106914         y = x + 2 * 8;
106915 
106916         sp_256_from_mp(x, 8, xm);
106917         err = sp_256_mod_mul_norm_8(x, x, p256_mod);
106918     }
106919     if (err == MP_OKAY) {
106920         /* y = x^3 */
106921         {
106922             sp_256_mont_sqr_8(y, x, p256_mod, p256_mp_mod);
106923             sp_256_mont_mul_8(y, y, x, p256_mod, p256_mp_mod);
106924         }
106925         /* y = x^3 - 3x */
106926         sp_256_mont_sub_8(y, y, x, p256_mod);
106927         sp_256_mont_sub_8(y, y, x, p256_mod);
106928         sp_256_mont_sub_8(y, y, x, p256_mod);
106929         /* y = x^3 - 3x + b */
106930         err = sp_256_mod_mul_norm_8(x, p256_b, p256_mod);
106931     }
106932     if (err == MP_OKAY) {
106933         sp_256_mont_add_8(y, y, x, p256_mod);
106934         /* y = sqrt(x^3 - 3x + b) */
106935         err = sp_256_mont_sqrt_8(y);
106936     }
106937     if (err == MP_OKAY) {
106938         XMEMSET(y + 8, 0, 8U * sizeof(sp_digit));
106939         sp_256_mont_reduce_8(y, p256_mod, p256_mp_mod);
106940         if ((((word32)y[0] ^ (word32)odd) & 1U) != 0U) {
106941             sp_256_mont_sub_8(y, p256_mod, y, p256_mod);
106942         }
106943 
106944         err = sp_256_to_mp(y, ym);
106945     }
106946 
106947 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
106948     if (x != NULL)
106949         XFREE(x, NULL, DYNAMIC_TYPE_ECC);
106950 #endif
106951 
106952     return err;
106953 }
106954 #endif
106955 #endif /* !WOLFSSL_SP_NO_256 */
106956 #ifdef WOLFSSL_SP_384
106957 
106958 /* Point structure to use. */
106959 typedef struct sp_point_384 {
106960     /* X ordinate of point. */
106961     sp_digit x[2 * 12];
106962     /* Y ordinate of point. */
106963     sp_digit y[2 * 12];
106964     /* Z ordinate of point. */
106965     sp_digit z[2 * 12];
106966     /* Indicates point is at infinity. */
106967     int infinity;
106968 } sp_point_384;
106969 
106970 /* The modulus (prime) of the curve P384. */
106971 static const sp_digit p384_mod[12] = {
106972     0xffffffff,0x00000000,0x00000000,0xffffffff,0xfffffffe,0xffffffff,
106973     0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff
106974 };
106975 /* The Montgomery normalizer for modulus of the curve P384. */
106976 static const sp_digit p384_norm_mod[12] = {
106977     0x00000001,0xffffffff,0xffffffff,0x00000000,0x00000001,0x00000000,
106978     0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000
106979 };
106980 /* The Montgomery multiplier for modulus of the curve P384. */
106981 static sp_digit p384_mp_mod = 0x00000001;
106982 #if defined(WOLFSSL_VALIDATE_ECC_KEYGEN) || defined(HAVE_ECC_SIGN) || \
106983                                             defined(HAVE_ECC_VERIFY)
106984 /* The order of the curve P384. */
106985 static const sp_digit p384_order[12] = {
106986     0xccc52973,0xecec196a,0x48b0a77a,0x581a0db2,0xf4372ddf,0xc7634d81,
106987     0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff
106988 };
106989 #endif
106990 /* The order of the curve P384 minus 2. */
106991 static const sp_digit p384_order2[12] = {
106992     0xccc52971,0xecec196a,0x48b0a77a,0x581a0db2,0xf4372ddf,0xc7634d81,
106993     0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff
106994 };
106995 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
106996 /* The Montgomery normalizer for order of the curve P384. */
106997 static const sp_digit p384_norm_order[12] = {
106998     0x333ad68d,0x1313e695,0xb74f5885,0xa7e5f24d,0x0bc8d220,0x389cb27e,
106999     0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000
107000 };
107001 #endif
107002 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
107003 /* The Montgomery multiplier for order of the curve P384. */
107004 static sp_digit p384_mp_order = 0xe88fdc45;
107005 #endif
107006 /* The base point of curve P384. */
107007 static const sp_point_384 p384_base = {
107008     /* X ordinate */
107009     {
107010         0x72760ab7,0x3a545e38,0xbf55296c,0x5502f25d,0x82542a38,0x59f741e0,
107011         0x8ba79b98,0x6e1d3b62,0xf320ad74,0x8eb1c71e,0xbe8b0537,0xaa87ca22,
107012         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
107013         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
107014         (sp_digit)0, (sp_digit)0
107015     },
107016     /* Y ordinate */
107017     {
107018         0x90ea0e5f,0x7a431d7c,0x1d7e819d,0x0a60b1ce,0xb5f0b8c0,0xe9da3113,
107019         0x289a147c,0xf8f41dbd,0x9292dc29,0x5d9e98bf,0x96262c6f,0x3617de4a,
107020         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
107021         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
107022         (sp_digit)0, (sp_digit)0
107023     },
107024     /* Z ordinate */
107025     {
107026         0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
107027         0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
107028         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
107029         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
107030         (sp_digit)0, (sp_digit)0
107031     },
107032     /* infinity */
107033     0
107034 };
107035 #if defined(HAVE_ECC_CHECK_KEY) || defined(HAVE_COMP_KEY)
107036 static const sp_digit p384_b[12] = {
107037     0xd3ec2aef,0x2a85c8ed,0x8a2ed19d,0xc656398d,0x5013875a,0x0314088f,
107038     0xfe814112,0x181d9c6e,0xe3f82d19,0x988e056b,0xe23ee7e4,0xb3312fa7
107039 };
107040 #endif
107041 
107042 /* Multiply a and b into r. (r = a * b)
107043  *
107044  * r  A single precision integer.
107045  * a  A single precision integer.
107046  * b  A single precision integer.
107047  */
sp_384_mul_12(sp_digit * r,const sp_digit * a,const sp_digit * b)107048 SP_NOINLINE static void sp_384_mul_12(sp_digit* r, const sp_digit* a,
107049         const sp_digit* b)
107050 {
107051     sp_digit t[12 * 2];
107052     sp_digit* tmp = t;
107053     __asm__ __volatile__ (
107054         "movs	r3, #0\n\t"
107055         "movs	r4, #0\n\t"
107056         "mov	r8, r3\n\t"
107057         "mov	r11, %[tmp]\n\t"
107058         "mov	r9, %[a]\n\t"
107059         "mov	r10, %[b]\n\t"
107060         "movs	r6, #48\n\t"
107061         "add	r6, r6, r9\n\t"
107062         "mov	r12, r6\n\t"
107063         "\n"
107064     "L_sp_384_mul_12_words_%=:\n\t"
107065         "movs	%[tmp], #0\n\t"
107066         "movs	r5, #0\n\t"
107067         "movs	r6, #44\n\t"
107068         "mov	%[a], r8\n\t"
107069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107070         "subs	%[a], %[a], r6\n\t"
107071 #else
107072         "sub	%[a], %[a], r6\n\t"
107073 #endif
107074 #ifdef WOLFSSL_KEIL
107075         "sbcs	r6, r6, r6\n\t"
107076 #elif defined(__clang__)
107077         "sbcs	r6, r6\n\t"
107078 #else
107079         "sbc	r6, r6\n\t"
107080 #endif
107081 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107082         "mvns	r6, r6\n\t"
107083 #else
107084         "mvn	r6, r6\n\t"
107085 #endif
107086 #ifdef WOLFSSL_KEIL
107087         "ands	%[a], %[a], r6\n\t"
107088 #elif defined(__clang__)
107089         "ands	%[a], r6\n\t"
107090 #else
107091         "and	%[a], r6\n\t"
107092 #endif
107093         "mov	%[b], r8\n\t"
107094 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107095         "subs	%[b], %[b], %[a]\n\t"
107096 #else
107097         "sub	%[b], %[b], %[a]\n\t"
107098 #endif
107099         "add	%[a], %[a], r9\n\t"
107100         "add	%[b], %[b], r10\n\t"
107101         "\n"
107102     "L_sp_384_mul_12_mul_%=:\n\t"
107103         "# Multiply Start\n\t"
107104         "ldrh	r6, [%[a]]\n\t"
107105         "ldrh	r7, [%[b]]\n\t"
107106 #ifdef WOLFSSL_KEIL
107107         "muls	r7, r6, r7\n\t"
107108 #elif defined(__clang__)
107109         "muls	r7, r6\n\t"
107110 #else
107111         "mul	r7, r6\n\t"
107112 #endif
107113 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107114         "adds	r3, r3, r7\n\t"
107115 #else
107116         "add	r3, r3, r7\n\t"
107117 #endif
107118 #ifdef WOLFSSL_KEIL
107119         "adcs	r4, r4, %[tmp]\n\t"
107120 #elif defined(__clang__)
107121         "adcs	r4, %[tmp]\n\t"
107122 #else
107123         "adc	r4, %[tmp]\n\t"
107124 #endif
107125 #ifdef WOLFSSL_KEIL
107126         "adcs	r5, r5, %[tmp]\n\t"
107127 #elif defined(__clang__)
107128         "adcs	r5, %[tmp]\n\t"
107129 #else
107130         "adc	r5, %[tmp]\n\t"
107131 #endif
107132         "ldr	r7, [%[b]]\n\t"
107133 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107134         "lsrs	r7, r7, #16\n\t"
107135 #else
107136         "lsr	r7, r7, #16\n\t"
107137 #endif
107138 #ifdef WOLFSSL_KEIL
107139         "muls	r6, r7, r6\n\t"
107140 #elif defined(__clang__)
107141         "muls	r6, r7\n\t"
107142 #else
107143         "mul	r6, r7\n\t"
107144 #endif
107145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107146         "lsrs	r7, r6, #16\n\t"
107147 #else
107148         "lsr	r7, r6, #16\n\t"
107149 #endif
107150 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107151         "lsls	r6, r6, #16\n\t"
107152 #else
107153         "lsl	r6, r6, #16\n\t"
107154 #endif
107155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107156         "adds	r3, r3, r6\n\t"
107157 #else
107158         "add	r3, r3, r6\n\t"
107159 #endif
107160 #ifdef WOLFSSL_KEIL
107161         "adcs	r4, r4, r7\n\t"
107162 #elif defined(__clang__)
107163         "adcs	r4, r7\n\t"
107164 #else
107165         "adc	r4, r7\n\t"
107166 #endif
107167 #ifdef WOLFSSL_KEIL
107168         "adcs	r5, r5, %[tmp]\n\t"
107169 #elif defined(__clang__)
107170         "adcs	r5, %[tmp]\n\t"
107171 #else
107172         "adc	r5, %[tmp]\n\t"
107173 #endif
107174         "ldr	r6, [%[a]]\n\t"
107175         "ldr	r7, [%[b]]\n\t"
107176 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107177         "lsrs	r6, r6, #16\n\t"
107178 #else
107179         "lsr	r6, r6, #16\n\t"
107180 #endif
107181 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107182         "lsrs	r7, r7, #16\n\t"
107183 #else
107184         "lsr	r7, r7, #16\n\t"
107185 #endif
107186 #ifdef WOLFSSL_KEIL
107187         "muls	r7, r6, r7\n\t"
107188 #elif defined(__clang__)
107189         "muls	r7, r6\n\t"
107190 #else
107191         "mul	r7, r6\n\t"
107192 #endif
107193 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107194         "adds	r4, r4, r7\n\t"
107195 #else
107196         "add	r4, r4, r7\n\t"
107197 #endif
107198 #ifdef WOLFSSL_KEIL
107199         "adcs	r5, r5, %[tmp]\n\t"
107200 #elif defined(__clang__)
107201         "adcs	r5, %[tmp]\n\t"
107202 #else
107203         "adc	r5, %[tmp]\n\t"
107204 #endif
107205         "ldrh	r7, [%[b]]\n\t"
107206 #ifdef WOLFSSL_KEIL
107207         "muls	r6, r7, r6\n\t"
107208 #elif defined(__clang__)
107209         "muls	r6, r7\n\t"
107210 #else
107211         "mul	r6, r7\n\t"
107212 #endif
107213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107214         "lsrs	r7, r6, #16\n\t"
107215 #else
107216         "lsr	r7, r6, #16\n\t"
107217 #endif
107218 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107219         "lsls	r6, r6, #16\n\t"
107220 #else
107221         "lsl	r6, r6, #16\n\t"
107222 #endif
107223 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107224         "adds	r3, r3, r6\n\t"
107225 #else
107226         "add	r3, r3, r6\n\t"
107227 #endif
107228 #ifdef WOLFSSL_KEIL
107229         "adcs	r4, r4, r7\n\t"
107230 #elif defined(__clang__)
107231         "adcs	r4, r7\n\t"
107232 #else
107233         "adc	r4, r7\n\t"
107234 #endif
107235 #ifdef WOLFSSL_KEIL
107236         "adcs	r5, r5, %[tmp]\n\t"
107237 #elif defined(__clang__)
107238         "adcs	r5, %[tmp]\n\t"
107239 #else
107240         "adc	r5, %[tmp]\n\t"
107241 #endif
107242         "# Multiply Done\n\t"
107243 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107244         "adds	%[a], %[a], #4\n\t"
107245 #else
107246         "add	%[a], %[a], #4\n\t"
107247 #endif
107248 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107249         "subs	%[b], %[b], #4\n\t"
107250 #else
107251         "sub	%[b], %[b], #4\n\t"
107252 #endif
107253         "cmp	%[a], r12\n\t"
107254         "beq	L_sp_384_mul_12_done_mul_%=\n\t"
107255         "mov	r6, r8\n\t"
107256         "add	r6, r6, r9\n\t"
107257         "cmp	%[a], r6\n\t"
107258         "ble	L_sp_384_mul_12_mul_%=\n\t"
107259         "\n"
107260     "L_sp_384_mul_12_done_mul_%=:\n\t"
107261         "mov	%[tmp], r11\n\t"
107262         "mov	r7, r8\n\t"
107263         "str	r3, [%[tmp], r7]\n\t"
107264         "movs	r3, r4\n\t"
107265         "movs	r4, r5\n\t"
107266 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107267         "adds	r7, r7, #4\n\t"
107268 #else
107269         "add	r7, r7, #4\n\t"
107270 #endif
107271         "mov	r8, r7\n\t"
107272         "movs	r6, #0x58\n\t"
107273         "cmp	r7, r6\n\t"
107274         "ble	L_sp_384_mul_12_words_%=\n\t"
107275         "str	r3, [%[tmp], r7]\n\t"
107276         "mov	%[a], r9\n\t"
107277         "mov	%[b], r10\n\t"
107278         : [a] "+r" (a), [b] "+r" (b), [tmp] "+r" (tmp)
107279         :
107280         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
107281     );
107282 
107283     XMEMCPY(r, t, sizeof(t));
107284 }
107285 
107286 /* Square a and put result in r. (r = a * a)
107287  *
107288  * r  A single precision integer.
107289  * a  A single precision integer.
107290  */
sp_384_sqr_12(sp_digit * r,const sp_digit * a)107291 SP_NOINLINE static void sp_384_sqr_12(sp_digit* r, const sp_digit* a)
107292 {
107293     __asm__ __volatile__ (
107294         "movs	r3, #0\n\t"
107295         "movs	r4, #0\n\t"
107296         "movs	r5, #0\n\t"
107297         "mov	r8, r3\n\t"
107298         "mov	r11, %[r]\n\t"
107299         "movs	r6, #0x60\n\t"
107300 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107301         "negs	r6, r6\n\t"
107302 #else
107303         "neg	r6, r6\n\t"
107304 #endif
107305         "add	sp, sp, r6\n\t"
107306         "mov	r10, sp\n\t"
107307         "mov	r9, %[a]\n\t"
107308         "\n"
107309     "L_sp_384_sqr_12_words_%=:\n\t"
107310         "movs	%[r], #0\n\t"
107311         "movs	r6, #44\n\t"
107312         "mov	%[a], r8\n\t"
107313 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107314         "subs	%[a], %[a], r6\n\t"
107315 #else
107316         "sub	%[a], %[a], r6\n\t"
107317 #endif
107318 #ifdef WOLFSSL_KEIL
107319         "sbcs	r6, r6, r6\n\t"
107320 #elif defined(__clang__)
107321         "sbcs	r6, r6\n\t"
107322 #else
107323         "sbc	r6, r6\n\t"
107324 #endif
107325 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107326         "mvns	r6, r6\n\t"
107327 #else
107328         "mvn	r6, r6\n\t"
107329 #endif
107330 #ifdef WOLFSSL_KEIL
107331         "ands	%[a], %[a], r6\n\t"
107332 #elif defined(__clang__)
107333         "ands	%[a], r6\n\t"
107334 #else
107335         "and	%[a], r6\n\t"
107336 #endif
107337         "mov	r2, r8\n\t"
107338 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107339         "subs	r2, r2, %[a]\n\t"
107340 #else
107341         "sub	r2, r2, %[a]\n\t"
107342 #endif
107343         "add	%[a], %[a], r9\n\t"
107344         "add	r2, r2, r9\n\t"
107345         "\n"
107346     "L_sp_384_sqr_12_mul_%=:\n\t"
107347         "cmp	r2, %[a]\n\t"
107348         "beq	L_sp_384_sqr_12_sqr_%=\n\t"
107349         "# Multiply * 2: Start\n\t"
107350         "ldrh	r6, [%[a]]\n\t"
107351         "ldrh	r7, [r2]\n\t"
107352 #ifdef WOLFSSL_KEIL
107353         "muls	r7, r6, r7\n\t"
107354 #elif defined(__clang__)
107355         "muls	r7, r6\n\t"
107356 #else
107357         "mul	r7, r6\n\t"
107358 #endif
107359 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107360         "adds	r3, r3, r7\n\t"
107361 #else
107362         "add	r3, r3, r7\n\t"
107363 #endif
107364 #ifdef WOLFSSL_KEIL
107365         "adcs	r4, r4, %[r]\n\t"
107366 #elif defined(__clang__)
107367         "adcs	r4, %[r]\n\t"
107368 #else
107369         "adc	r4, %[r]\n\t"
107370 #endif
107371 #ifdef WOLFSSL_KEIL
107372         "adcs	r5, r5, %[r]\n\t"
107373 #elif defined(__clang__)
107374         "adcs	r5, %[r]\n\t"
107375 #else
107376         "adc	r5, %[r]\n\t"
107377 #endif
107378 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107379         "adds	r3, r3, r7\n\t"
107380 #else
107381         "add	r3, r3, r7\n\t"
107382 #endif
107383 #ifdef WOLFSSL_KEIL
107384         "adcs	r4, r4, %[r]\n\t"
107385 #elif defined(__clang__)
107386         "adcs	r4, %[r]\n\t"
107387 #else
107388         "adc	r4, %[r]\n\t"
107389 #endif
107390 #ifdef WOLFSSL_KEIL
107391         "adcs	r5, r5, %[r]\n\t"
107392 #elif defined(__clang__)
107393         "adcs	r5, %[r]\n\t"
107394 #else
107395         "adc	r5, %[r]\n\t"
107396 #endif
107397         "ldr	r7, [r2]\n\t"
107398 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107399         "lsrs	r7, r7, #16\n\t"
107400 #else
107401         "lsr	r7, r7, #16\n\t"
107402 #endif
107403 #ifdef WOLFSSL_KEIL
107404         "muls	r6, r7, r6\n\t"
107405 #elif defined(__clang__)
107406         "muls	r6, r7\n\t"
107407 #else
107408         "mul	r6, r7\n\t"
107409 #endif
107410 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107411         "lsrs	r7, r6, #16\n\t"
107412 #else
107413         "lsr	r7, r6, #16\n\t"
107414 #endif
107415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107416         "lsls	r6, r6, #16\n\t"
107417 #else
107418         "lsl	r6, r6, #16\n\t"
107419 #endif
107420 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107421         "adds	r3, r3, r6\n\t"
107422 #else
107423         "add	r3, r3, r6\n\t"
107424 #endif
107425 #ifdef WOLFSSL_KEIL
107426         "adcs	r4, r4, r7\n\t"
107427 #elif defined(__clang__)
107428         "adcs	r4, r7\n\t"
107429 #else
107430         "adc	r4, r7\n\t"
107431 #endif
107432 #ifdef WOLFSSL_KEIL
107433         "adcs	r5, r5, %[r]\n\t"
107434 #elif defined(__clang__)
107435         "adcs	r5, %[r]\n\t"
107436 #else
107437         "adc	r5, %[r]\n\t"
107438 #endif
107439 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107440         "adds	r3, r3, r6\n\t"
107441 #else
107442         "add	r3, r3, r6\n\t"
107443 #endif
107444 #ifdef WOLFSSL_KEIL
107445         "adcs	r4, r4, r7\n\t"
107446 #elif defined(__clang__)
107447         "adcs	r4, r7\n\t"
107448 #else
107449         "adc	r4, r7\n\t"
107450 #endif
107451 #ifdef WOLFSSL_KEIL
107452         "adcs	r5, r5, %[r]\n\t"
107453 #elif defined(__clang__)
107454         "adcs	r5, %[r]\n\t"
107455 #else
107456         "adc	r5, %[r]\n\t"
107457 #endif
107458         "ldr	r6, [%[a]]\n\t"
107459         "ldr	r7, [r2]\n\t"
107460 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107461         "lsrs	r6, r6, #16\n\t"
107462 #else
107463         "lsr	r6, r6, #16\n\t"
107464 #endif
107465 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107466         "lsrs	r7, r7, #16\n\t"
107467 #else
107468         "lsr	r7, r7, #16\n\t"
107469 #endif
107470 #ifdef WOLFSSL_KEIL
107471         "muls	r7, r6, r7\n\t"
107472 #elif defined(__clang__)
107473         "muls	r7, r6\n\t"
107474 #else
107475         "mul	r7, r6\n\t"
107476 #endif
107477 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107478         "adds	r4, r4, r7\n\t"
107479 #else
107480         "add	r4, r4, r7\n\t"
107481 #endif
107482 #ifdef WOLFSSL_KEIL
107483         "adcs	r5, r5, %[r]\n\t"
107484 #elif defined(__clang__)
107485         "adcs	r5, %[r]\n\t"
107486 #else
107487         "adc	r5, %[r]\n\t"
107488 #endif
107489 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107490         "adds	r4, r4, r7\n\t"
107491 #else
107492         "add	r4, r4, r7\n\t"
107493 #endif
107494 #ifdef WOLFSSL_KEIL
107495         "adcs	r5, r5, %[r]\n\t"
107496 #elif defined(__clang__)
107497         "adcs	r5, %[r]\n\t"
107498 #else
107499         "adc	r5, %[r]\n\t"
107500 #endif
107501         "ldrh	r7, [r2]\n\t"
107502 #ifdef WOLFSSL_KEIL
107503         "muls	r6, r7, r6\n\t"
107504 #elif defined(__clang__)
107505         "muls	r6, r7\n\t"
107506 #else
107507         "mul	r6, r7\n\t"
107508 #endif
107509 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107510         "lsrs	r7, r6, #16\n\t"
107511 #else
107512         "lsr	r7, r6, #16\n\t"
107513 #endif
107514 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107515         "lsls	r6, r6, #16\n\t"
107516 #else
107517         "lsl	r6, r6, #16\n\t"
107518 #endif
107519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107520         "adds	r3, r3, r6\n\t"
107521 #else
107522         "add	r3, r3, r6\n\t"
107523 #endif
107524 #ifdef WOLFSSL_KEIL
107525         "adcs	r4, r4, r7\n\t"
107526 #elif defined(__clang__)
107527         "adcs	r4, r7\n\t"
107528 #else
107529         "adc	r4, r7\n\t"
107530 #endif
107531 #ifdef WOLFSSL_KEIL
107532         "adcs	r5, r5, %[r]\n\t"
107533 #elif defined(__clang__)
107534         "adcs	r5, %[r]\n\t"
107535 #else
107536         "adc	r5, %[r]\n\t"
107537 #endif
107538 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107539         "adds	r3, r3, r6\n\t"
107540 #else
107541         "add	r3, r3, r6\n\t"
107542 #endif
107543 #ifdef WOLFSSL_KEIL
107544         "adcs	r4, r4, r7\n\t"
107545 #elif defined(__clang__)
107546         "adcs	r4, r7\n\t"
107547 #else
107548         "adc	r4, r7\n\t"
107549 #endif
107550 #ifdef WOLFSSL_KEIL
107551         "adcs	r5, r5, %[r]\n\t"
107552 #elif defined(__clang__)
107553         "adcs	r5, %[r]\n\t"
107554 #else
107555         "adc	r5, %[r]\n\t"
107556 #endif
107557         "# Multiply * 2: Done\n\t"
107558         "bal	L_sp_384_sqr_12_done_sqr_%=\n\t"
107559         "\n"
107560     "L_sp_384_sqr_12_sqr_%=:\n\t"
107561         "mov	r12, r2\n\t"
107562         "ldr	r2, [%[a]]\n\t"
107563         "# Square: Start\n\t"
107564 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107565         "lsrs	r7, r2, #16\n\t"
107566 #else
107567         "lsr	r7, r2, #16\n\t"
107568 #endif
107569         "uxth	r6, r2\n\t"
107570 #ifdef WOLFSSL_KEIL
107571         "muls	r6, r6, r6\n\t"
107572 #elif defined(__clang__)
107573         "muls	r6, r6\n\t"
107574 #else
107575         "mul	r6, r6\n\t"
107576 #endif
107577 #ifdef WOLFSSL_KEIL
107578         "muls	r7, r7, r7\n\t"
107579 #elif defined(__clang__)
107580         "muls	r7, r7\n\t"
107581 #else
107582         "mul	r7, r7\n\t"
107583 #endif
107584 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107585         "adds	r3, r3, r6\n\t"
107586 #else
107587         "add	r3, r3, r6\n\t"
107588 #endif
107589 #ifdef WOLFSSL_KEIL
107590         "adcs	r4, r4, r7\n\t"
107591 #elif defined(__clang__)
107592         "adcs	r4, r7\n\t"
107593 #else
107594         "adc	r4, r7\n\t"
107595 #endif
107596 #ifdef WOLFSSL_KEIL
107597         "adcs	r5, r5, %[r]\n\t"
107598 #elif defined(__clang__)
107599         "adcs	r5, %[r]\n\t"
107600 #else
107601         "adc	r5, %[r]\n\t"
107602 #endif
107603 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107604         "lsrs	r7, r2, #16\n\t"
107605 #else
107606         "lsr	r7, r2, #16\n\t"
107607 #endif
107608         "uxth	r6, r2\n\t"
107609 #ifdef WOLFSSL_KEIL
107610         "muls	r6, r7, r6\n\t"
107611 #elif defined(__clang__)
107612         "muls	r6, r7\n\t"
107613 #else
107614         "mul	r6, r7\n\t"
107615 #endif
107616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107617         "lsrs	r7, r6, #15\n\t"
107618 #else
107619         "lsr	r7, r6, #15\n\t"
107620 #endif
107621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107622         "lsls	r6, r6, #17\n\t"
107623 #else
107624         "lsl	r6, r6, #17\n\t"
107625 #endif
107626 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107627         "adds	r3, r3, r6\n\t"
107628 #else
107629         "add	r3, r3, r6\n\t"
107630 #endif
107631 #ifdef WOLFSSL_KEIL
107632         "adcs	r4, r4, r7\n\t"
107633 #elif defined(__clang__)
107634         "adcs	r4, r7\n\t"
107635 #else
107636         "adc	r4, r7\n\t"
107637 #endif
107638 #ifdef WOLFSSL_KEIL
107639         "adcs	r5, r5, %[r]\n\t"
107640 #elif defined(__clang__)
107641         "adcs	r5, %[r]\n\t"
107642 #else
107643         "adc	r5, %[r]\n\t"
107644 #endif
107645         "# Square: Done\n\t"
107646         "mov	r2, r12\n\t"
107647         "\n"
107648     "L_sp_384_sqr_12_done_sqr_%=:\n\t"
107649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107650         "adds	%[a], %[a], #4\n\t"
107651 #else
107652         "add	%[a], %[a], #4\n\t"
107653 #endif
107654 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107655         "subs	r2, r2, #4\n\t"
107656 #else
107657         "sub	r2, r2, #4\n\t"
107658 #endif
107659         "movs	r6, #48\n\t"
107660         "add	r6, r6, r9\n\t"
107661         "cmp	%[a], r6\n\t"
107662         "beq	L_sp_384_sqr_12_done_mul_%=\n\t"
107663         "cmp	%[a], r2\n\t"
107664         "bgt	L_sp_384_sqr_12_done_mul_%=\n\t"
107665         "mov	r7, r8\n\t"
107666         "add	r7, r7, r9\n\t"
107667         "cmp	%[a], r7\n\t"
107668         "ble	L_sp_384_sqr_12_mul_%=\n\t"
107669         "\n"
107670     "L_sp_384_sqr_12_done_mul_%=:\n\t"
107671         "mov	%[r], r10\n\t"
107672         "mov	r7, r8\n\t"
107673         "str	r3, [%[r], r7]\n\t"
107674         "movs	r3, r4\n\t"
107675         "movs	r4, r5\n\t"
107676         "movs	r5, #0\n\t"
107677 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107678         "adds	r7, r7, #4\n\t"
107679 #else
107680         "add	r7, r7, #4\n\t"
107681 #endif
107682         "mov	r8, r7\n\t"
107683         "movs	r6, #0x58\n\t"
107684         "cmp	r7, r6\n\t"
107685         "ble	L_sp_384_sqr_12_words_%=\n\t"
107686         "mov	%[a], r9\n\t"
107687         "str	r3, [%[r], r7]\n\t"
107688         "mov	%[r], r11\n\t"
107689         "mov	%[a], r10\n\t"
107690         "movs	r3, #0x5c\n\t"
107691         "\n"
107692     "L_sp_384_sqr_12_store_%=:\n\t"
107693         "ldr	r6, [%[a], r3]\n\t"
107694         "str	r6, [%[r], r3]\n\t"
107695 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107696         "subs	r3, r3, #4\n\t"
107697 #else
107698         "sub	r3, r3, #4\n\t"
107699 #endif
107700         "bge	L_sp_384_sqr_12_store_%=\n\t"
107701         "movs	r6, #0x60\n\t"
107702         "add	sp, sp, r6\n\t"
107703         : [r] "+r" (r), [a] "+r" (a)
107704         :
107705         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
107706     );
107707 }
107708 
107709 #ifdef WOLFSSL_SP_SMALL
107710 /* Add b to a into r. (r = a + b)
107711  *
107712  * r  A single precision integer.
107713  * a  A single precision integer.
107714  * b  A single precision integer.
107715  */
sp_384_add_12(sp_digit * r,const sp_digit * a,const sp_digit * b)107716 SP_NOINLINE static sp_digit sp_384_add_12(sp_digit* r, const sp_digit* a,
107717         const sp_digit* b)
107718 {
107719     __asm__ __volatile__ (
107720         "movs	r6, %[a]\n\t"
107721         "movs	r7, #0\n\t"
107722         "movs	r3, #0\n\t"
107723 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107724         "adds	r6, r6, #48\n\t"
107725 #else
107726         "add	r6, r6, #48\n\t"
107727 #endif
107728 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107729         "subs	r7, r7, #1\n\t"
107730 #else
107731         "sub	r7, r7, #1\n\t"
107732 #endif
107733         "\n"
107734     "L_sp_384_add_12_word_%=:\n\t"
107735 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107736         "adds	r3, r3, r7\n\t"
107737 #else
107738         "add	r3, r3, r7\n\t"
107739 #endif
107740         "ldr	r4, [%[a]]\n\t"
107741         "ldr	r5, [%[b]]\n\t"
107742 #ifdef WOLFSSL_KEIL
107743         "adcs	r4, r4, r5\n\t"
107744 #elif defined(__clang__)
107745         "adcs	r4, r5\n\t"
107746 #else
107747         "adc	r4, r5\n\t"
107748 #endif
107749         "str	r4, [%[r]]\n\t"
107750         "movs	r3, #0\n\t"
107751 #ifdef WOLFSSL_KEIL
107752         "adcs	r3, r3, r3\n\t"
107753 #elif defined(__clang__)
107754         "adcs	r3, r3\n\t"
107755 #else
107756         "adc	r3, r3\n\t"
107757 #endif
107758 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107759         "adds	%[a], %[a], #4\n\t"
107760 #else
107761         "add	%[a], %[a], #4\n\t"
107762 #endif
107763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107764         "adds	%[b], %[b], #4\n\t"
107765 #else
107766         "add	%[b], %[b], #4\n\t"
107767 #endif
107768 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107769         "adds	%[r], %[r], #4\n\t"
107770 #else
107771         "add	%[r], %[r], #4\n\t"
107772 #endif
107773         "cmp	%[a], r6\n\t"
107774         "bne	L_sp_384_add_12_word_%=\n\t"
107775         "movs	%[r], r3\n\t"
107776         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
107777         :
107778         : "memory", "r3", "r4", "r5", "r6", "r7"
107779     );
107780     return (uint32_t)(size_t)r;
107781 }
107782 
107783 #else
107784 /* Add b to a into r. (r = a + b)
107785  *
107786  * r  A single precision integer.
107787  * a  A single precision integer.
107788  * b  A single precision integer.
107789  */
sp_384_add_12(sp_digit * r,const sp_digit * a,const sp_digit * b)107790 SP_NOINLINE static sp_digit sp_384_add_12(sp_digit* r, const sp_digit* a,
107791         const sp_digit* b)
107792 {
107793     __asm__ __volatile__ (
107794         "ldm	%[b]!, {r5, r6}\n\t"
107795         "ldm	%[a]!, {r3, r4}\n\t"
107796 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107797         "adds	r3, r3, r5\n\t"
107798 #else
107799         "add	r3, r3, r5\n\t"
107800 #endif
107801 #ifdef WOLFSSL_KEIL
107802         "adcs	r4, r4, r6\n\t"
107803 #elif defined(__clang__)
107804         "adcs	r4, r6\n\t"
107805 #else
107806         "adc	r4, r6\n\t"
107807 #endif
107808         "stm	%[r]!, {r3, r4}\n\t"
107809         "ldm	%[b]!, {r5, r6}\n\t"
107810         "ldm	%[a]!, {r3, r4}\n\t"
107811 #ifdef WOLFSSL_KEIL
107812         "adcs	r3, r3, r5\n\t"
107813 #elif defined(__clang__)
107814         "adcs	r3, r5\n\t"
107815 #else
107816         "adc	r3, r5\n\t"
107817 #endif
107818 #ifdef WOLFSSL_KEIL
107819         "adcs	r4, r4, r6\n\t"
107820 #elif defined(__clang__)
107821         "adcs	r4, r6\n\t"
107822 #else
107823         "adc	r4, r6\n\t"
107824 #endif
107825         "stm	%[r]!, {r3, r4}\n\t"
107826         "ldm	%[b]!, {r5, r6}\n\t"
107827         "ldm	%[a]!, {r3, r4}\n\t"
107828 #ifdef WOLFSSL_KEIL
107829         "adcs	r3, r3, r5\n\t"
107830 #elif defined(__clang__)
107831         "adcs	r3, r5\n\t"
107832 #else
107833         "adc	r3, r5\n\t"
107834 #endif
107835 #ifdef WOLFSSL_KEIL
107836         "adcs	r4, r4, r6\n\t"
107837 #elif defined(__clang__)
107838         "adcs	r4, r6\n\t"
107839 #else
107840         "adc	r4, r6\n\t"
107841 #endif
107842         "stm	%[r]!, {r3, r4}\n\t"
107843         "ldm	%[b]!, {r5, r6}\n\t"
107844         "ldm	%[a]!, {r3, r4}\n\t"
107845 #ifdef WOLFSSL_KEIL
107846         "adcs	r3, r3, r5\n\t"
107847 #elif defined(__clang__)
107848         "adcs	r3, r5\n\t"
107849 #else
107850         "adc	r3, r5\n\t"
107851 #endif
107852 #ifdef WOLFSSL_KEIL
107853         "adcs	r4, r4, r6\n\t"
107854 #elif defined(__clang__)
107855         "adcs	r4, r6\n\t"
107856 #else
107857         "adc	r4, r6\n\t"
107858 #endif
107859         "stm	%[r]!, {r3, r4}\n\t"
107860         "ldm	%[b]!, {r5, r6}\n\t"
107861         "ldm	%[a]!, {r3, r4}\n\t"
107862 #ifdef WOLFSSL_KEIL
107863         "adcs	r3, r3, r5\n\t"
107864 #elif defined(__clang__)
107865         "adcs	r3, r5\n\t"
107866 #else
107867         "adc	r3, r5\n\t"
107868 #endif
107869 #ifdef WOLFSSL_KEIL
107870         "adcs	r4, r4, r6\n\t"
107871 #elif defined(__clang__)
107872         "adcs	r4, r6\n\t"
107873 #else
107874         "adc	r4, r6\n\t"
107875 #endif
107876         "stm	%[r]!, {r3, r4}\n\t"
107877         "ldm	%[b]!, {r5, r6}\n\t"
107878         "ldm	%[a]!, {r3, r4}\n\t"
107879 #ifdef WOLFSSL_KEIL
107880         "adcs	r3, r3, r5\n\t"
107881 #elif defined(__clang__)
107882         "adcs	r3, r5\n\t"
107883 #else
107884         "adc	r3, r5\n\t"
107885 #endif
107886 #ifdef WOLFSSL_KEIL
107887         "adcs	r4, r4, r6\n\t"
107888 #elif defined(__clang__)
107889         "adcs	r4, r6\n\t"
107890 #else
107891         "adc	r4, r6\n\t"
107892 #endif
107893         "stm	%[r]!, {r3, r4}\n\t"
107894         "movs	%[r], #0\n\t"
107895 #ifdef WOLFSSL_KEIL
107896         "adcs	%[r], %[r], %[r]\n\t"
107897 #elif defined(__clang__)
107898         "adcs	%[r], %[r]\n\t"
107899 #else
107900         "adc	%[r], %[r]\n\t"
107901 #endif
107902         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
107903         :
107904         : "memory", "r3", "r4", "r5", "r6"
107905     );
107906     return (uint32_t)(size_t)r;
107907 }
107908 
107909 #endif /* WOLFSSL_SP_SMALL */
107910 #ifdef WOLFSSL_SP_SMALL
107911 /* Sub b from a into r. (r = a - b)
107912  *
107913  * r  A single precision integer.
107914  * a  A single precision integer.
107915  * b  A single precision integer.
107916  */
sp_384_sub_12(sp_digit * r,const sp_digit * a,const sp_digit * b)107917 SP_NOINLINE static sp_digit sp_384_sub_12(sp_digit* r, const sp_digit* a,
107918         const sp_digit* b)
107919 {
107920     __asm__ __volatile__ (
107921         "movs	r6, %[a]\n\t"
107922         "movs	r3, #0\n\t"
107923 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107924         "adds	r6, r6, #48\n\t"
107925 #else
107926         "add	r6, r6, #48\n\t"
107927 #endif
107928         "\n"
107929     "L_sp_384_sub_12_word_%=:\n\t"
107930         "movs	r5, #0\n\t"
107931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107932         "subs	r5, r5, r3\n\t"
107933 #else
107934         "sub	r5, r5, r3\n\t"
107935 #endif
107936         "ldr	r4, [%[a]]\n\t"
107937         "ldr	r5, [%[b]]\n\t"
107938 #ifdef WOLFSSL_KEIL
107939         "sbcs	r4, r4, r5\n\t"
107940 #elif defined(__clang__)
107941         "sbcs	r4, r5\n\t"
107942 #else
107943         "sbc	r4, r5\n\t"
107944 #endif
107945         "str	r4, [%[r]]\n\t"
107946 #ifdef WOLFSSL_KEIL
107947         "sbcs	r3, r3, r3\n\t"
107948 #elif defined(__clang__)
107949         "sbcs	r3, r3\n\t"
107950 #else
107951         "sbc	r3, r3\n\t"
107952 #endif
107953 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107954         "adds	%[a], %[a], #4\n\t"
107955 #else
107956         "add	%[a], %[a], #4\n\t"
107957 #endif
107958 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107959         "adds	%[b], %[b], #4\n\t"
107960 #else
107961         "add	%[b], %[b], #4\n\t"
107962 #endif
107963 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107964         "adds	%[r], %[r], #4\n\t"
107965 #else
107966         "add	%[r], %[r], #4\n\t"
107967 #endif
107968         "cmp	%[a], r6\n\t"
107969         "bne	L_sp_384_sub_12_word_%=\n\t"
107970         "movs	%[r], r3\n\t"
107971         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
107972         :
107973         : "memory", "r3", "r4", "r5", "r6"
107974     );
107975     return (uint32_t)(size_t)r;
107976 }
107977 
107978 #else
107979 /* Sub b from a into r. (r = a - b)
107980  *
107981  * r  A single precision integer.
107982  * a  A single precision integer.
107983  * b  A single precision integer.
107984  */
sp_384_sub_12(sp_digit * r,const sp_digit * a,const sp_digit * b)107985 SP_NOINLINE static sp_digit sp_384_sub_12(sp_digit* r, const sp_digit* a,
107986         const sp_digit* b)
107987 {
107988     __asm__ __volatile__ (
107989         "ldm	%[b]!, {r5, r6}\n\t"
107990         "ldm	%[a]!, {r3, r4}\n\t"
107991 #if defined(__clang__) || defined(WOLFSSL_KEIL)
107992         "subs	r3, r3, r5\n\t"
107993 #else
107994         "sub	r3, r3, r5\n\t"
107995 #endif
107996 #ifdef WOLFSSL_KEIL
107997         "sbcs	r4, r4, r6\n\t"
107998 #elif defined(__clang__)
107999         "sbcs	r4, r6\n\t"
108000 #else
108001         "sbc	r4, r6\n\t"
108002 #endif
108003         "stm	%[r]!, {r3, r4}\n\t"
108004         "ldm	%[b]!, {r5, r6}\n\t"
108005         "ldm	%[a]!, {r3, r4}\n\t"
108006 #ifdef WOLFSSL_KEIL
108007         "sbcs	r3, r3, r5\n\t"
108008 #elif defined(__clang__)
108009         "sbcs	r3, r5\n\t"
108010 #else
108011         "sbc	r3, r5\n\t"
108012 #endif
108013 #ifdef WOLFSSL_KEIL
108014         "sbcs	r4, r4, r6\n\t"
108015 #elif defined(__clang__)
108016         "sbcs	r4, r6\n\t"
108017 #else
108018         "sbc	r4, r6\n\t"
108019 #endif
108020         "stm	%[r]!, {r3, r4}\n\t"
108021         "ldm	%[b]!, {r5, r6}\n\t"
108022         "ldm	%[a]!, {r3, r4}\n\t"
108023 #ifdef WOLFSSL_KEIL
108024         "sbcs	r3, r3, r5\n\t"
108025 #elif defined(__clang__)
108026         "sbcs	r3, r5\n\t"
108027 #else
108028         "sbc	r3, r5\n\t"
108029 #endif
108030 #ifdef WOLFSSL_KEIL
108031         "sbcs	r4, r4, r6\n\t"
108032 #elif defined(__clang__)
108033         "sbcs	r4, r6\n\t"
108034 #else
108035         "sbc	r4, r6\n\t"
108036 #endif
108037         "stm	%[r]!, {r3, r4}\n\t"
108038         "ldm	%[b]!, {r5, r6}\n\t"
108039         "ldm	%[a]!, {r3, r4}\n\t"
108040 #ifdef WOLFSSL_KEIL
108041         "sbcs	r3, r3, r5\n\t"
108042 #elif defined(__clang__)
108043         "sbcs	r3, r5\n\t"
108044 #else
108045         "sbc	r3, r5\n\t"
108046 #endif
108047 #ifdef WOLFSSL_KEIL
108048         "sbcs	r4, r4, r6\n\t"
108049 #elif defined(__clang__)
108050         "sbcs	r4, r6\n\t"
108051 #else
108052         "sbc	r4, r6\n\t"
108053 #endif
108054         "stm	%[r]!, {r3, r4}\n\t"
108055         "ldm	%[b]!, {r5, r6}\n\t"
108056         "ldm	%[a]!, {r3, r4}\n\t"
108057 #ifdef WOLFSSL_KEIL
108058         "sbcs	r3, r3, r5\n\t"
108059 #elif defined(__clang__)
108060         "sbcs	r3, r5\n\t"
108061 #else
108062         "sbc	r3, r5\n\t"
108063 #endif
108064 #ifdef WOLFSSL_KEIL
108065         "sbcs	r4, r4, r6\n\t"
108066 #elif defined(__clang__)
108067         "sbcs	r4, r6\n\t"
108068 #else
108069         "sbc	r4, r6\n\t"
108070 #endif
108071         "stm	%[r]!, {r3, r4}\n\t"
108072         "ldm	%[b]!, {r5, r6}\n\t"
108073         "ldm	%[a]!, {r3, r4}\n\t"
108074 #ifdef WOLFSSL_KEIL
108075         "sbcs	r3, r3, r5\n\t"
108076 #elif defined(__clang__)
108077         "sbcs	r3, r5\n\t"
108078 #else
108079         "sbc	r3, r5\n\t"
108080 #endif
108081 #ifdef WOLFSSL_KEIL
108082         "sbcs	r4, r4, r6\n\t"
108083 #elif defined(__clang__)
108084         "sbcs	r4, r6\n\t"
108085 #else
108086         "sbc	r4, r6\n\t"
108087 #endif
108088         "stm	%[r]!, {r3, r4}\n\t"
108089 #ifdef WOLFSSL_KEIL
108090         "sbcs	%[r], %[r], %[r]\n\t"
108091 #elif defined(__clang__)
108092         "sbcs	%[r], %[r]\n\t"
108093 #else
108094         "sbc	%[r], %[r]\n\t"
108095 #endif
108096         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
108097         :
108098         : "memory", "r3", "r4", "r5", "r6"
108099     );
108100     return (uint32_t)(size_t)r;
108101 }
108102 
108103 #endif /* WOLFSSL_SP_SMALL */
108104 /* Multiply a number by Montgomery normalizer mod modulus (prime).
108105  *
108106  * r  The resulting Montgomery form number.
108107  * a  The number to convert.
108108  * m  The modulus (prime).
108109  * returns MEMORY_E when memory allocation fails and MP_OKAY otherwise.
108110  */
sp_384_mod_mul_norm_12(sp_digit * r,const sp_digit * a,const sp_digit * m)108111 static int sp_384_mod_mul_norm_12(sp_digit* r, const sp_digit* a, const sp_digit* m)
108112 {
108113 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
108114     int64_t* t = NULL;
108115 #else
108116     int64_t t[12];
108117 #endif
108118     int64_t o;
108119     int err = MP_OKAY;
108120 
108121     (void)m;
108122 
108123 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
108124     t = (int64_t*)XMALLOC(sizeof(int64_t) * 12, NULL, DYNAMIC_TYPE_ECC);
108125     if (t == NULL) {
108126         err = MEMORY_E;
108127     }
108128 #endif
108129 
108130     if (err == MP_OKAY) {
108131         /*  1  0  0  0  0  0  0  0  1  1  0 -1 */
108132         t[0] = 0 + (int64_t)a[0] + (int64_t)a[8] + (int64_t)a[9] - (int64_t)a[11];
108133         /* -1  1  0  0  0  0  0  0 -1  0  1  1 */
108134         t[1] = 0 - (int64_t)a[0] + (int64_t)a[1] - (int64_t)a[8] + (int64_t)a[10] + (int64_t)a[11];
108135         /*  0 -1  1  0  0  0  0  0  0 -1  0  1 */
108136         t[2] = 0 - (int64_t)a[1] + (int64_t)a[2] - (int64_t)a[9] + (int64_t)a[11];
108137         /*  1  0 -1  1  0  0  0  0  1  1 -1 -1 */
108138         t[3] = 0 + (int64_t)a[0] - (int64_t)a[2] + (int64_t)a[3] + (int64_t)a[8] + (int64_t)a[9] - (int64_t)a[10] - (int64_t)a[11];
108139         /*  1  1  0 -1  1  0  0  0  1  2  1 -2 */
108140         t[4] = 0 + (int64_t)a[0] + (int64_t)a[1] - (int64_t)a[3] + (int64_t)a[4] + (int64_t)a[8] + 2 * (int64_t)a[9] + (int64_t)a[10] -  2 * (int64_t)a[11];
108141         /*  0  1  1  0 -1  1  0  0  0  1  2  1 */
108142         t[5] = 0 + (int64_t)a[1] + (int64_t)a[2] - (int64_t)a[4] + (int64_t)a[5] + (int64_t)a[9] + 2 * (int64_t)a[10] + (int64_t)a[11];
108143         /*  0  0  1  1  0 -1  1  0  0  0  1  2 */
108144         t[6] = 0 + (int64_t)a[2] + (int64_t)a[3] - (int64_t)a[5] + (int64_t)a[6] + (int64_t)a[10] + 2 * (int64_t)a[11];
108145         /*  0  0  0  1  1  0 -1  1  0  0  0  1 */
108146         t[7] = 0 + (int64_t)a[3] + (int64_t)a[4] - (int64_t)a[6] + (int64_t)a[7] + (int64_t)a[11];
108147         /*  0  0  0  0  1  1  0 -1  1  0  0  0 */
108148         t[8] = 0 + (int64_t)a[4] + (int64_t)a[5] - (int64_t)a[7] + (int64_t)a[8];
108149         /*  0  0  0  0  0  1  1  0 -1  1  0  0 */
108150         t[9] = 0 + (int64_t)a[5] + (int64_t)a[6] - (int64_t)a[8] + (int64_t)a[9];
108151         /*  0  0  0  0  0  0  1  1  0 -1  1  0 */
108152         t[10] = 0 + (int64_t)a[6] + (int64_t)a[7] - (int64_t)a[9] + (int64_t)a[10];
108153         /*  0  0  0  0  0  0  0  1  1  0 -1  1 */
108154         t[11] = 0 + (int64_t)a[7] + (int64_t)a[8] - (int64_t)a[10] + (int64_t)a[11];
108155 
108156         t[1] += t[0] >> 32; t[0] &= 0xffffffff;
108157         t[2] += t[1] >> 32; t[1] &= 0xffffffff;
108158         t[3] += t[2] >> 32; t[2] &= 0xffffffff;
108159         t[4] += t[3] >> 32; t[3] &= 0xffffffff;
108160         t[5] += t[4] >> 32; t[4] &= 0xffffffff;
108161         t[6] += t[5] >> 32; t[5] &= 0xffffffff;
108162         t[7] += t[6] >> 32; t[6] &= 0xffffffff;
108163         t[8] += t[7] >> 32; t[7] &= 0xffffffff;
108164         t[9] += t[8] >> 32; t[8] &= 0xffffffff;
108165         t[10] += t[9] >> 32; t[9] &= 0xffffffff;
108166         t[11] += t[10] >> 32; t[10] &= 0xffffffff;
108167         o     = t[11] >> 32; t[11] &= 0xffffffff;
108168         t[0] += o;
108169         t[1] -= o;
108170         t[3] += o;
108171         t[4] += o;
108172         t[1] += t[0] >> 32; t[0] &= 0xffffffff;
108173         t[2] += t[1] >> 32; t[1] &= 0xffffffff;
108174         t[3] += t[2] >> 32; t[2] &= 0xffffffff;
108175         t[4] += t[3] >> 32; t[3] &= 0xffffffff;
108176         t[5] += t[4] >> 32; t[4] &= 0xffffffff;
108177         t[6] += t[5] >> 32; t[5] &= 0xffffffff;
108178         t[7] += t[6] >> 32; t[6] &= 0xffffffff;
108179         t[8] += t[7] >> 32; t[7] &= 0xffffffff;
108180         t[9] += t[8] >> 32; t[8] &= 0xffffffff;
108181         t[10] += t[9] >> 32; t[9] &= 0xffffffff;
108182         t[11] += t[10] >> 32; t[10] &= 0xffffffff;
108183 
108184         r[0] = t[0];
108185         r[1] = t[1];
108186         r[2] = t[2];
108187         r[3] = t[3];
108188         r[4] = t[4];
108189         r[5] = t[5];
108190         r[6] = t[6];
108191         r[7] = t[7];
108192         r[8] = t[8];
108193         r[9] = t[9];
108194         r[10] = t[10];
108195         r[11] = t[11];
108196     }
108197 
108198 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
108199     if (t != NULL)
108200         XFREE(t, NULL, DYNAMIC_TYPE_ECC);
108201 #endif
108202 
108203     return err;
108204 }
108205 
108206 /* Convert an mp_int to an array of sp_digit.
108207  *
108208  * r  A single precision integer.
108209  * size  Maximum number of bytes to convert
108210  * a  A multi-precision integer.
108211  */
sp_384_from_mp(sp_digit * r,int size,const mp_int * a)108212 static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a)
108213 {
108214 #if DIGIT_BIT == 32
108215     int j;
108216 
108217     XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
108218 
108219     for (j = a->used; j < size; j++) {
108220         r[j] = 0;
108221     }
108222 #elif DIGIT_BIT > 32
108223     int i;
108224     int j = 0;
108225     word32 s = 0;
108226 
108227     r[0] = 0;
108228     for (i = 0; i < a->used && j < size; i++) {
108229         r[j] |= ((sp_digit)a->dp[i] << s);
108230         r[j] &= 0xffffffff;
108231         s = 32U - s;
108232         if (j + 1 >= size) {
108233             break;
108234         }
108235         /* lint allow cast of mismatch word32 and mp_digit */
108236         r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
108237         while ((s + 32U) <= (word32)DIGIT_BIT) {
108238             s += 32U;
108239             r[j] &= 0xffffffff;
108240             if (j + 1 >= size) {
108241                 break;
108242             }
108243             if (s < (word32)DIGIT_BIT) {
108244                 /* lint allow cast of mismatch word32 and mp_digit */
108245                 r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
108246             }
108247             else {
108248                 r[++j] = (sp_digit)0;
108249             }
108250         }
108251         s = (word32)DIGIT_BIT - s;
108252     }
108253 
108254     for (j++; j < size; j++) {
108255         r[j] = 0;
108256     }
108257 #else
108258     int i;
108259     int j = 0;
108260     int s = 0;
108261 
108262     r[0] = 0;
108263     for (i = 0; i < a->used && j < size; i++) {
108264         r[j] |= ((sp_digit)a->dp[i]) << s;
108265         if (s + DIGIT_BIT >= 32) {
108266             r[j] &= 0xffffffff;
108267             if (j + 1 >= size) {
108268                 break;
108269             }
108270             s = 32 - s;
108271             if (s == DIGIT_BIT) {
108272                 r[++j] = 0;
108273                 s = 0;
108274             }
108275             else {
108276                 r[++j] = a->dp[i] >> s;
108277                 s = DIGIT_BIT - s;
108278             }
108279         }
108280         else {
108281             s += DIGIT_BIT;
108282         }
108283     }
108284 
108285     for (j++; j < size; j++) {
108286         r[j] = 0;
108287     }
108288 #endif
108289 }
108290 
108291 /* Convert a point of type ecc_point to type sp_point_384.
108292  *
108293  * p   Point of type sp_point_384 (result).
108294  * pm  Point of type ecc_point.
108295  */
sp_384_point_from_ecc_point_12(sp_point_384 * p,const ecc_point * pm)108296 static void sp_384_point_from_ecc_point_12(sp_point_384* p,
108297         const ecc_point* pm)
108298 {
108299     XMEMSET(p->x, 0, sizeof(p->x));
108300     XMEMSET(p->y, 0, sizeof(p->y));
108301     XMEMSET(p->z, 0, sizeof(p->z));
108302     sp_384_from_mp(p->x, 12, pm->x);
108303     sp_384_from_mp(p->y, 12, pm->y);
108304     sp_384_from_mp(p->z, 12, pm->z);
108305     p->infinity = 0;
108306 }
108307 
108308 /* Convert an array of sp_digit to an mp_int.
108309  *
108310  * a  A single precision integer.
108311  * r  A multi-precision integer.
108312  */
sp_384_to_mp(const sp_digit * a,mp_int * r)108313 static int sp_384_to_mp(const sp_digit* a, mp_int* r)
108314 {
108315     int err;
108316 
108317     err = mp_grow(r, (384 + DIGIT_BIT - 1) / DIGIT_BIT);
108318     if (err == MP_OKAY) { /*lint !e774 case where err is always MP_OKAY*/
108319 #if DIGIT_BIT == 32
108320         XMEMCPY(r->dp, a, sizeof(sp_digit) * 12);
108321         r->used = 12;
108322         mp_clamp(r);
108323 #elif DIGIT_BIT < 32
108324         int i;
108325         int j = 0;
108326         int s = 0;
108327 
108328         r->dp[0] = 0;
108329         for (i = 0; i < 12; i++) {
108330             r->dp[j] |= (mp_digit)(a[i] << s);
108331             r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
108332             s = DIGIT_BIT - s;
108333             r->dp[++j] = (mp_digit)(a[i] >> s);
108334             while (s + DIGIT_BIT <= 32) {
108335                 s += DIGIT_BIT;
108336                 r->dp[j++] &= ((sp_digit)1 << DIGIT_BIT) - 1;
108337                 if (s == SP_WORD_SIZE) {
108338                     r->dp[j] = 0;
108339                 }
108340                 else {
108341                     r->dp[j] = (mp_digit)(a[i] >> s);
108342                 }
108343             }
108344             s = 32 - s;
108345         }
108346         r->used = (384 + DIGIT_BIT - 1) / DIGIT_BIT;
108347         mp_clamp(r);
108348 #else
108349         int i;
108350         int j = 0;
108351         int s = 0;
108352 
108353         r->dp[0] = 0;
108354         for (i = 0; i < 12; i++) {
108355             r->dp[j] |= ((mp_digit)a[i]) << s;
108356             if (s + 32 >= DIGIT_BIT) {
108357     #if DIGIT_BIT != 32 && DIGIT_BIT != 64
108358                 r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
108359     #endif
108360                 s = DIGIT_BIT - s;
108361                 r->dp[++j] = a[i] >> s;
108362                 s = 32 - s;
108363             }
108364             else {
108365                 s += 32;
108366             }
108367         }
108368         r->used = (384 + DIGIT_BIT - 1) / DIGIT_BIT;
108369         mp_clamp(r);
108370 #endif
108371     }
108372 
108373     return err;
108374 }
108375 
108376 /* Convert a point of type sp_point_384 to type ecc_point.
108377  *
108378  * p   Point of type sp_point_384.
108379  * pm  Point of type ecc_point (result).
108380  * returns MEMORY_E when allocation of memory in ecc_point fails otherwise
108381  * MP_OKAY.
108382  */
sp_384_point_to_ecc_point_12(const sp_point_384 * p,ecc_point * pm)108383 static int sp_384_point_to_ecc_point_12(const sp_point_384* p, ecc_point* pm)
108384 {
108385     int err;
108386 
108387     err = sp_384_to_mp(p->x, pm->x);
108388     if (err == MP_OKAY) {
108389         err = sp_384_to_mp(p->y, pm->y);
108390     }
108391     if (err == MP_OKAY) {
108392         err = sp_384_to_mp(p->z, pm->z);
108393     }
108394 
108395     return err;
108396 }
108397 
108398 /* Conditionally subtract b from a using the mask m.
108399  * m is -1 to subtract and 0 when not copying.
108400  *
108401  * r  A single precision number representing condition subtract result.
108402  * a  A single precision number to subtract from.
108403  * b  A single precision number to subtract.
108404  * m  Mask value to apply.
108405  */
sp_384_cond_sub_12(sp_digit * r,const sp_digit * a,const sp_digit * b,sp_digit m)108406 SP_NOINLINE static sp_digit sp_384_cond_sub_12(sp_digit* r, const sp_digit* a,
108407         const sp_digit* b, sp_digit m)
108408 {
108409     __asm__ __volatile__ (
108410         "movs	r4, #0\n\t"
108411         "movs	r5, #48\n\t"
108412         "mov	r8, r5\n\t"
108413         "movs	r7, #0\n\t"
108414         "\n"
108415     "L_sp_384_cond_sub_12_words_%=:\n\t"
108416         "ldr	r6, [%[b], r7]\n\t"
108417 #ifdef WOLFSSL_KEIL
108418         "ands	r6, r6, %[m]\n\t"
108419 #elif defined(__clang__)
108420         "ands	r6, %[m]\n\t"
108421 #else
108422         "and	r6, %[m]\n\t"
108423 #endif
108424         "movs	r5, #0\n\t"
108425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108426         "subs	r5, r5, r4\n\t"
108427 #else
108428         "sub	r5, r5, r4\n\t"
108429 #endif
108430         "ldr	r5, [%[a], r7]\n\t"
108431 #ifdef WOLFSSL_KEIL
108432         "sbcs	r5, r5, r6\n\t"
108433 #elif defined(__clang__)
108434         "sbcs	r5, r6\n\t"
108435 #else
108436         "sbc	r5, r6\n\t"
108437 #endif
108438 #ifdef WOLFSSL_KEIL
108439         "sbcs	r4, r4, r4\n\t"
108440 #elif defined(__clang__)
108441         "sbcs	r4, r4\n\t"
108442 #else
108443         "sbc	r4, r4\n\t"
108444 #endif
108445         "str	r5, [%[r], r7]\n\t"
108446 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108447         "adds	r7, r7, #4\n\t"
108448 #else
108449         "add	r7, r7, #4\n\t"
108450 #endif
108451         "cmp	r7, r8\n\t"
108452         "blt	L_sp_384_cond_sub_12_words_%=\n\t"
108453         "movs	%[r], r4\n\t"
108454         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
108455         :
108456         : "memory", "r4", "r5", "r6", "r7", "r8"
108457     );
108458     return (uint32_t)(size_t)r;
108459 }
108460 
108461 #define sp_384_mont_reduce_order_12   sp_384_mont_reduce_12
108462 
108463 /* Reduce the number back to 384 bits using Montgomery reduction.
108464  *
108465  * a   A single precision number to reduce in place.
108466  * m   The single precision number representing the modulus.
108467  * mp  The digit representing the negative inverse of m mod 2^n.
108468  */
sp_384_mont_reduce_12(sp_digit * a,const sp_digit * m,sp_digit mp)108469 SP_NOINLINE static void sp_384_mont_reduce_12(sp_digit* a, const sp_digit* m,
108470         sp_digit mp)
108471 {
108472     __asm__ __volatile__ (
108473         "movs	r7, #0\n\t"
108474         "mov	r8, %[mp]\n\t"
108475         "mov	r12, r7\n\t"
108476         "mov	lr, %[m]\n\t"
108477         "mov	r9, %[a]\n\t"
108478         "mov	r11, %[a]\n\t"
108479         "movs	r5, #44\n\t"
108480         "movs	r6, #48\n\t"
108481         "add	r9, r9, r5\n\t"
108482         "add	r11, r11, r6\n\t"
108483         "\n"
108484     "L_sp_384_mont_reduce_12_mod_%=:\n\t"
108485         "movs	r7, #0\n\t"
108486         "movs	r4, #0\n\t"
108487         "# a[i] += m[0] * mu\n\t"
108488         "ldm	%[m]!, {%[mp]}\n\t"
108489         "ldm	%[a]!, {r3}\n\t"
108490         "# mu = a[i] * mp\n\t"
108491         "mov	r5, r8\n\t"
108492 #ifdef WOLFSSL_KEIL
108493         "muls	r5, r3, r5\n\t"
108494 #elif defined(__clang__)
108495         "muls	r5, r3\n\t"
108496 #else
108497         "mul	r5, r3\n\t"
108498 #endif
108499         "mov	r10, r5\n\t"
108500         "# Multiply m[0] and mu - Start\n\t"
108501         "mov	r5, r10\n\t"
108502         "uxth	r6, %[mp]\n\t"
108503         "uxth	r5, r5\n\t"
108504 #ifdef WOLFSSL_KEIL
108505         "muls	r6, r5, r6\n\t"
108506 #elif defined(__clang__)
108507         "muls	r6, r5\n\t"
108508 #else
108509         "mul	r6, r5\n\t"
108510 #endif
108511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108512         "adds	r3, r3, r6\n\t"
108513 #else
108514         "add	r3, r3, r6\n\t"
108515 #endif
108516 #ifdef WOLFSSL_KEIL
108517         "adcs	r4, r4, r7\n\t"
108518 #elif defined(__clang__)
108519         "adcs	r4, r7\n\t"
108520 #else
108521         "adc	r4, r7\n\t"
108522 #endif
108523 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108524         "lsrs	r6, %[mp], #16\n\t"
108525 #else
108526         "lsr	r6, %[mp], #16\n\t"
108527 #endif
108528 #ifdef WOLFSSL_KEIL
108529         "muls	r5, r6, r5\n\t"
108530 #elif defined(__clang__)
108531         "muls	r5, r6\n\t"
108532 #else
108533         "mul	r5, r6\n\t"
108534 #endif
108535 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108536         "lsrs	r6, r5, #16\n\t"
108537 #else
108538         "lsr	r6, r5, #16\n\t"
108539 #endif
108540 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108541         "lsls	r5, r5, #16\n\t"
108542 #else
108543         "lsl	r5, r5, #16\n\t"
108544 #endif
108545 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108546         "adds	r3, r3, r5\n\t"
108547 #else
108548         "add	r3, r3, r5\n\t"
108549 #endif
108550 #ifdef WOLFSSL_KEIL
108551         "adcs	r4, r4, r6\n\t"
108552 #elif defined(__clang__)
108553         "adcs	r4, r6\n\t"
108554 #else
108555         "adc	r4, r6\n\t"
108556 #endif
108557         "mov	r5, r10\n\t"
108558 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108559         "lsrs	r6, %[mp], #16\n\t"
108560 #else
108561         "lsr	r6, %[mp], #16\n\t"
108562 #endif
108563 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108564         "lsrs	r5, r5, #16\n\t"
108565 #else
108566         "lsr	r5, r5, #16\n\t"
108567 #endif
108568 #ifdef WOLFSSL_KEIL
108569         "muls	r6, r5, r6\n\t"
108570 #elif defined(__clang__)
108571         "muls	r6, r5\n\t"
108572 #else
108573         "mul	r6, r5\n\t"
108574 #endif
108575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108576         "adds	r4, r4, r6\n\t"
108577 #else
108578         "add	r4, r4, r6\n\t"
108579 #endif
108580         "uxth	r6, %[mp]\n\t"
108581 #ifdef WOLFSSL_KEIL
108582         "muls	r5, r6, r5\n\t"
108583 #elif defined(__clang__)
108584         "muls	r5, r6\n\t"
108585 #else
108586         "mul	r5, r6\n\t"
108587 #endif
108588 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108589         "lsrs	r6, r5, #16\n\t"
108590 #else
108591         "lsr	r6, r5, #16\n\t"
108592 #endif
108593 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108594         "lsls	r5, r5, #16\n\t"
108595 #else
108596         "lsl	r5, r5, #16\n\t"
108597 #endif
108598 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108599         "adds	r3, r3, r5\n\t"
108600 #else
108601         "add	r3, r3, r5\n\t"
108602 #endif
108603 #ifdef WOLFSSL_KEIL
108604         "adcs	r4, r4, r6\n\t"
108605 #elif defined(__clang__)
108606         "adcs	r4, r6\n\t"
108607 #else
108608         "adc	r4, r6\n\t"
108609 #endif
108610         "# Multiply m[0] and mu - Done\n\t"
108611         "\n"
108612     "L_sp_384_mont_reduce_12_word_%=:\n\t"
108613         "# a[i+j] += m[j] * mu\n\t"
108614         "ldr	r3, [%[a]]\n\t"
108615         "ldm	%[m]!, {%[mp]}\n\t"
108616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108617         "adds	r3, r3, r4\n\t"
108618 #else
108619         "add	r3, r3, r4\n\t"
108620 #endif
108621         "movs	r4, #0\n\t"
108622 #ifdef WOLFSSL_KEIL
108623         "adcs	r4, r4, r7\n\t"
108624 #elif defined(__clang__)
108625         "adcs	r4, r7\n\t"
108626 #else
108627         "adc	r4, r7\n\t"
108628 #endif
108629         "# Multiply m[j] and mu - Start\n\t"
108630         "mov	r5, r10\n\t"
108631         "uxth	r6, %[mp]\n\t"
108632         "uxth	r5, r5\n\t"
108633 #ifdef WOLFSSL_KEIL
108634         "muls	r6, r5, r6\n\t"
108635 #elif defined(__clang__)
108636         "muls	r6, r5\n\t"
108637 #else
108638         "mul	r6, r5\n\t"
108639 #endif
108640 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108641         "adds	r3, r3, r6\n\t"
108642 #else
108643         "add	r3, r3, r6\n\t"
108644 #endif
108645 #ifdef WOLFSSL_KEIL
108646         "adcs	r4, r4, r7\n\t"
108647 #elif defined(__clang__)
108648         "adcs	r4, r7\n\t"
108649 #else
108650         "adc	r4, r7\n\t"
108651 #endif
108652 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108653         "lsrs	r6, %[mp], #16\n\t"
108654 #else
108655         "lsr	r6, %[mp], #16\n\t"
108656 #endif
108657 #ifdef WOLFSSL_KEIL
108658         "muls	r5, r6, r5\n\t"
108659 #elif defined(__clang__)
108660         "muls	r5, r6\n\t"
108661 #else
108662         "mul	r5, r6\n\t"
108663 #endif
108664 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108665         "lsrs	r6, r5, #16\n\t"
108666 #else
108667         "lsr	r6, r5, #16\n\t"
108668 #endif
108669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108670         "lsls	r5, r5, #16\n\t"
108671 #else
108672         "lsl	r5, r5, #16\n\t"
108673 #endif
108674 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108675         "adds	r3, r3, r5\n\t"
108676 #else
108677         "add	r3, r3, r5\n\t"
108678 #endif
108679 #ifdef WOLFSSL_KEIL
108680         "adcs	r4, r4, r6\n\t"
108681 #elif defined(__clang__)
108682         "adcs	r4, r6\n\t"
108683 #else
108684         "adc	r4, r6\n\t"
108685 #endif
108686         "mov	r5, r10\n\t"
108687 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108688         "lsrs	r6, %[mp], #16\n\t"
108689 #else
108690         "lsr	r6, %[mp], #16\n\t"
108691 #endif
108692 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108693         "lsrs	r5, r5, #16\n\t"
108694 #else
108695         "lsr	r5, r5, #16\n\t"
108696 #endif
108697 #ifdef WOLFSSL_KEIL
108698         "muls	r6, r5, r6\n\t"
108699 #elif defined(__clang__)
108700         "muls	r6, r5\n\t"
108701 #else
108702         "mul	r6, r5\n\t"
108703 #endif
108704 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108705         "adds	r4, r4, r6\n\t"
108706 #else
108707         "add	r4, r4, r6\n\t"
108708 #endif
108709         "uxth	r6, %[mp]\n\t"
108710 #ifdef WOLFSSL_KEIL
108711         "muls	r5, r6, r5\n\t"
108712 #elif defined(__clang__)
108713         "muls	r5, r6\n\t"
108714 #else
108715         "mul	r5, r6\n\t"
108716 #endif
108717 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108718         "lsrs	r6, r5, #16\n\t"
108719 #else
108720         "lsr	r6, r5, #16\n\t"
108721 #endif
108722 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108723         "lsls	r5, r5, #16\n\t"
108724 #else
108725         "lsl	r5, r5, #16\n\t"
108726 #endif
108727 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108728         "adds	r3, r3, r5\n\t"
108729 #else
108730         "add	r3, r3, r5\n\t"
108731 #endif
108732 #ifdef WOLFSSL_KEIL
108733         "adcs	r4, r4, r6\n\t"
108734 #elif defined(__clang__)
108735         "adcs	r4, r6\n\t"
108736 #else
108737         "adc	r4, r6\n\t"
108738 #endif
108739         "# Multiply m[j] and mu - Done\n\t"
108740         "stm	%[a]!, {r3}\n\t"
108741         "cmp	%[a], r9\n\t"
108742         "blt	L_sp_384_mont_reduce_12_word_%=\n\t"
108743         "# a[i+11] += m[11] * mu\n\t"
108744         "ldr	%[mp], [%[m]]\n\t"
108745         "mov	r3, r12\n\t"
108746         "# Multiply m[11] and mu - Start\n\t"
108747         "mov	r5, r10\n\t"
108748         "uxth	r6, %[mp]\n\t"
108749         "uxth	r5, r5\n\t"
108750 #ifdef WOLFSSL_KEIL
108751         "muls	r6, r5, r6\n\t"
108752 #elif defined(__clang__)
108753         "muls	r6, r5\n\t"
108754 #else
108755         "mul	r6, r5\n\t"
108756 #endif
108757 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108758         "adds	r4, r4, r6\n\t"
108759 #else
108760         "add	r4, r4, r6\n\t"
108761 #endif
108762 #ifdef WOLFSSL_KEIL
108763         "adcs	r3, r3, r7\n\t"
108764 #elif defined(__clang__)
108765         "adcs	r3, r7\n\t"
108766 #else
108767         "adc	r3, r7\n\t"
108768 #endif
108769 #ifdef WOLFSSL_KEIL
108770         "adcs	r7, r7, r7\n\t"
108771 #elif defined(__clang__)
108772         "adcs	r7, r7\n\t"
108773 #else
108774         "adc	r7, r7\n\t"
108775 #endif
108776 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108777         "lsrs	r6, %[mp], #16\n\t"
108778 #else
108779         "lsr	r6, %[mp], #16\n\t"
108780 #endif
108781 #ifdef WOLFSSL_KEIL
108782         "muls	r5, r6, r5\n\t"
108783 #elif defined(__clang__)
108784         "muls	r5, r6\n\t"
108785 #else
108786         "mul	r5, r6\n\t"
108787 #endif
108788 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108789         "lsrs	r6, r5, #16\n\t"
108790 #else
108791         "lsr	r6, r5, #16\n\t"
108792 #endif
108793 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108794         "lsls	r5, r5, #16\n\t"
108795 #else
108796         "lsl	r5, r5, #16\n\t"
108797 #endif
108798 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108799         "adds	r4, r4, r5\n\t"
108800 #else
108801         "add	r4, r4, r5\n\t"
108802 #endif
108803 #ifdef WOLFSSL_KEIL
108804         "adcs	r3, r3, r6\n\t"
108805 #elif defined(__clang__)
108806         "adcs	r3, r6\n\t"
108807 #else
108808         "adc	r3, r6\n\t"
108809 #endif
108810 #ifdef WOLFSSL_KEIL
108811         "adcs	r7, r7, r7\n\t"
108812 #elif defined(__clang__)
108813         "adcs	r7, r7\n\t"
108814 #else
108815         "adc	r7, r7\n\t"
108816 #endif
108817         "mov	r5, r10\n\t"
108818 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108819         "lsrs	r6, %[mp], #16\n\t"
108820 #else
108821         "lsr	r6, %[mp], #16\n\t"
108822 #endif
108823 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108824         "lsrs	r5, r5, #16\n\t"
108825 #else
108826         "lsr	r5, r5, #16\n\t"
108827 #endif
108828 #ifdef WOLFSSL_KEIL
108829         "muls	r6, r5, r6\n\t"
108830 #elif defined(__clang__)
108831         "muls	r6, r5\n\t"
108832 #else
108833         "mul	r6, r5\n\t"
108834 #endif
108835 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108836         "adds	r3, r3, r6\n\t"
108837 #else
108838         "add	r3, r3, r6\n\t"
108839 #endif
108840 #ifdef WOLFSSL_KEIL
108841         "adcs	r7, r7, r7\n\t"
108842 #elif defined(__clang__)
108843         "adcs	r7, r7\n\t"
108844 #else
108845         "adc	r7, r7\n\t"
108846 #endif
108847         "uxth	r6, %[mp]\n\t"
108848 #ifdef WOLFSSL_KEIL
108849         "muls	r5, r6, r5\n\t"
108850 #elif defined(__clang__)
108851         "muls	r5, r6\n\t"
108852 #else
108853         "mul	r5, r6\n\t"
108854 #endif
108855 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108856         "lsrs	r6, r5, #16\n\t"
108857 #else
108858         "lsr	r6, r5, #16\n\t"
108859 #endif
108860 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108861         "lsls	r5, r5, #16\n\t"
108862 #else
108863         "lsl	r5, r5, #16\n\t"
108864 #endif
108865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108866         "adds	r4, r4, r5\n\t"
108867 #else
108868         "add	r4, r4, r5\n\t"
108869 #endif
108870 #ifdef WOLFSSL_KEIL
108871         "adcs	r3, r3, r6\n\t"
108872 #elif defined(__clang__)
108873         "adcs	r3, r6\n\t"
108874 #else
108875         "adc	r3, r6\n\t"
108876 #endif
108877 #ifdef WOLFSSL_KEIL
108878         "adcs	r7, r7, r7\n\t"
108879 #elif defined(__clang__)
108880         "adcs	r7, r7\n\t"
108881 #else
108882         "adc	r7, r7\n\t"
108883 #endif
108884         "# Multiply m[11] and mu - Done\n\t"
108885         "ldr	r5, [%[a]]\n\t"
108886         "ldr	r6, [%[a], #4]\n\t"
108887         "movs	%[mp], #0\n\t"
108888 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108889         "adds	r5, r5, r4\n\t"
108890 #else
108891         "add	r5, r5, r4\n\t"
108892 #endif
108893 #ifdef WOLFSSL_KEIL
108894         "adcs	r6, r6, r3\n\t"
108895 #elif defined(__clang__)
108896         "adcs	r6, r3\n\t"
108897 #else
108898         "adc	r6, r3\n\t"
108899 #endif
108900 #ifdef WOLFSSL_KEIL
108901         "adcs	r7, r7, %[mp]\n\t"
108902 #elif defined(__clang__)
108903         "adcs	r7, %[mp]\n\t"
108904 #else
108905         "adc	r7, %[mp]\n\t"
108906 #endif
108907         "stm	%[a]!, {r5, r6}\n\t"
108908         "# i += 1\n\t"
108909 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108910         "subs	%[a], %[a], #4\n\t"
108911 #else
108912         "sub	%[a], %[a], #4\n\t"
108913 #endif
108914         "movs	r3, #44\n\t"
108915         "mov	r9, %[a]\n\t"
108916 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108917         "subs	%[a], %[a], r3\n\t"
108918 #else
108919         "sub	%[a], %[a], r3\n\t"
108920 #endif
108921         "mov	r12, r7\n\t"
108922         "mov	%[m], lr\n\t"
108923         "cmp	r11, %[a]\n\t"
108924         "bgt	L_sp_384_mont_reduce_12_mod_%=\n\t"
108925 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108926         "negs	r7, r7\n\t"
108927 #else
108928         "neg	r7, r7\n\t"
108929 #endif
108930         "# Subtract masked modulus\n\t"
108931         "movs	r4, #48\n\t"
108932         "movs	%[mp], #0\n\t"
108933         "movs	r3, #0\n\t"
108934 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108935         "subs	%[a], %[a], r4\n\t"
108936 #else
108937         "sub	%[a], %[a], r4\n\t"
108938 #endif
108939 #ifndef WOLFSSL_SP_LARGE_CODE
108940         "\n"
108941     "L_sp_384_mont_reduce_12_sub_mask_%=:\n\t"
108942         "ldm	%[m]!, {r6}\n\t"
108943         "movs	r5, #0\n\t"
108944 #ifdef WOLFSSL_KEIL
108945         "ands	r6, r6, r7\n\t"
108946 #elif defined(__clang__)
108947         "ands	r6, r7\n\t"
108948 #else
108949         "and	r6, r7\n\t"
108950 #endif
108951 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108952         "subs	r5, r5, %[mp]\n\t"
108953 #else
108954         "sub	r5, r5, %[mp]\n\t"
108955 #endif
108956         "ldr	r5, [%[a], r4]\n\t"
108957 #ifdef WOLFSSL_KEIL
108958         "sbcs	r5, r5, r6\n\t"
108959 #elif defined(__clang__)
108960         "sbcs	r5, r6\n\t"
108961 #else
108962         "sbc	r5, r6\n\t"
108963 #endif
108964 #ifdef WOLFSSL_KEIL
108965         "sbcs	%[mp], %[mp], %[mp]\n\t"
108966 #elif defined(__clang__)
108967         "sbcs	%[mp], %[mp]\n\t"
108968 #else
108969         "sbc	%[mp], %[mp]\n\t"
108970 #endif
108971         "stm	%[a]!, {r5}\n\t"
108972 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108973         "adds	r3, r3, #4\n\t"
108974 #else
108975         "add	r3, r3, #4\n\t"
108976 #endif
108977         "cmp	r3, r4\n\t"
108978         "blt	L_sp_384_mont_reduce_12_sub_mask_%=\n\t"
108979 #else /* WOLFSSL_SP_LARGE_CODE */
108980         "ldm	%[m]!, {r6}\n\t"
108981 #ifdef WOLFSSL_KEIL
108982         "ands	r6, r6, r7\n\t"
108983 #elif defined(__clang__)
108984         "ands	r6, r7\n\t"
108985 #else
108986         "and	r6, r7\n\t"
108987 #endif
108988         "ldr	r5, [%[a], r4]\n\t"
108989 #if defined(__clang__) || defined(WOLFSSL_KEIL)
108990         "subs	r5, r5, r6\n\t"
108991 #else
108992         "sub	r5, r5, r6\n\t"
108993 #endif
108994         "stm	%[a]!, {r5}\n\t"
108995         "ldm	%[m]!, {r6}\n\t"
108996 #ifdef WOLFSSL_KEIL
108997         "ands	r6, r6, r7\n\t"
108998 #elif defined(__clang__)
108999         "ands	r6, r7\n\t"
109000 #else
109001         "and	r6, r7\n\t"
109002 #endif
109003         "ldr	r5, [%[a], r4]\n\t"
109004 #ifdef WOLFSSL_KEIL
109005         "sbcs	r5, r5, r6\n\t"
109006 #elif defined(__clang__)
109007         "sbcs	r5, r6\n\t"
109008 #else
109009         "sbc	r5, r6\n\t"
109010 #endif
109011         "stm	%[a]!, {r5}\n\t"
109012         "ldm	%[m]!, {r6}\n\t"
109013 #ifdef WOLFSSL_KEIL
109014         "ands	r6, r6, r7\n\t"
109015 #elif defined(__clang__)
109016         "ands	r6, r7\n\t"
109017 #else
109018         "and	r6, r7\n\t"
109019 #endif
109020         "ldr	r5, [%[a], r4]\n\t"
109021 #ifdef WOLFSSL_KEIL
109022         "sbcs	r5, r5, r6\n\t"
109023 #elif defined(__clang__)
109024         "sbcs	r5, r6\n\t"
109025 #else
109026         "sbc	r5, r6\n\t"
109027 #endif
109028         "stm	%[a]!, {r5}\n\t"
109029         "ldm	%[m]!, {r6}\n\t"
109030 #ifdef WOLFSSL_KEIL
109031         "ands	r6, r6, r7\n\t"
109032 #elif defined(__clang__)
109033         "ands	r6, r7\n\t"
109034 #else
109035         "and	r6, r7\n\t"
109036 #endif
109037         "ldr	r5, [%[a], r4]\n\t"
109038 #ifdef WOLFSSL_KEIL
109039         "sbcs	r5, r5, r6\n\t"
109040 #elif defined(__clang__)
109041         "sbcs	r5, r6\n\t"
109042 #else
109043         "sbc	r5, r6\n\t"
109044 #endif
109045         "stm	%[a]!, {r5}\n\t"
109046         "ldm	%[m]!, {r6}\n\t"
109047 #ifdef WOLFSSL_KEIL
109048         "ands	r6, r6, r7\n\t"
109049 #elif defined(__clang__)
109050         "ands	r6, r7\n\t"
109051 #else
109052         "and	r6, r7\n\t"
109053 #endif
109054         "ldr	r5, [%[a], r4]\n\t"
109055 #ifdef WOLFSSL_KEIL
109056         "sbcs	r5, r5, r6\n\t"
109057 #elif defined(__clang__)
109058         "sbcs	r5, r6\n\t"
109059 #else
109060         "sbc	r5, r6\n\t"
109061 #endif
109062         "stm	%[a]!, {r5}\n\t"
109063         "ldm	%[m]!, {r6}\n\t"
109064 #ifdef WOLFSSL_KEIL
109065         "ands	r6, r6, r7\n\t"
109066 #elif defined(__clang__)
109067         "ands	r6, r7\n\t"
109068 #else
109069         "and	r6, r7\n\t"
109070 #endif
109071         "ldr	r5, [%[a], r4]\n\t"
109072 #ifdef WOLFSSL_KEIL
109073         "sbcs	r5, r5, r6\n\t"
109074 #elif defined(__clang__)
109075         "sbcs	r5, r6\n\t"
109076 #else
109077         "sbc	r5, r6\n\t"
109078 #endif
109079         "stm	%[a]!, {r5}\n\t"
109080         "ldm	%[m]!, {r6}\n\t"
109081 #ifdef WOLFSSL_KEIL
109082         "ands	r6, r6, r7\n\t"
109083 #elif defined(__clang__)
109084         "ands	r6, r7\n\t"
109085 #else
109086         "and	r6, r7\n\t"
109087 #endif
109088         "ldr	r5, [%[a], r4]\n\t"
109089 #ifdef WOLFSSL_KEIL
109090         "sbcs	r5, r5, r6\n\t"
109091 #elif defined(__clang__)
109092         "sbcs	r5, r6\n\t"
109093 #else
109094         "sbc	r5, r6\n\t"
109095 #endif
109096         "stm	%[a]!, {r5}\n\t"
109097         "ldm	%[m]!, {r6}\n\t"
109098 #ifdef WOLFSSL_KEIL
109099         "ands	r6, r6, r7\n\t"
109100 #elif defined(__clang__)
109101         "ands	r6, r7\n\t"
109102 #else
109103         "and	r6, r7\n\t"
109104 #endif
109105         "ldr	r5, [%[a], r4]\n\t"
109106 #ifdef WOLFSSL_KEIL
109107         "sbcs	r5, r5, r6\n\t"
109108 #elif defined(__clang__)
109109         "sbcs	r5, r6\n\t"
109110 #else
109111         "sbc	r5, r6\n\t"
109112 #endif
109113         "stm	%[a]!, {r5}\n\t"
109114         "ldm	%[m]!, {r6}\n\t"
109115 #ifdef WOLFSSL_KEIL
109116         "ands	r6, r6, r7\n\t"
109117 #elif defined(__clang__)
109118         "ands	r6, r7\n\t"
109119 #else
109120         "and	r6, r7\n\t"
109121 #endif
109122         "ldr	r5, [%[a], r4]\n\t"
109123 #ifdef WOLFSSL_KEIL
109124         "sbcs	r5, r5, r6\n\t"
109125 #elif defined(__clang__)
109126         "sbcs	r5, r6\n\t"
109127 #else
109128         "sbc	r5, r6\n\t"
109129 #endif
109130         "stm	%[a]!, {r5}\n\t"
109131         "ldm	%[m]!, {r6}\n\t"
109132 #ifdef WOLFSSL_KEIL
109133         "ands	r6, r6, r7\n\t"
109134 #elif defined(__clang__)
109135         "ands	r6, r7\n\t"
109136 #else
109137         "and	r6, r7\n\t"
109138 #endif
109139         "ldr	r5, [%[a], r4]\n\t"
109140 #ifdef WOLFSSL_KEIL
109141         "sbcs	r5, r5, r6\n\t"
109142 #elif defined(__clang__)
109143         "sbcs	r5, r6\n\t"
109144 #else
109145         "sbc	r5, r6\n\t"
109146 #endif
109147         "stm	%[a]!, {r5}\n\t"
109148         "ldm	%[m]!, {r6}\n\t"
109149 #ifdef WOLFSSL_KEIL
109150         "ands	r6, r6, r7\n\t"
109151 #elif defined(__clang__)
109152         "ands	r6, r7\n\t"
109153 #else
109154         "and	r6, r7\n\t"
109155 #endif
109156         "ldr	r5, [%[a], r4]\n\t"
109157 #ifdef WOLFSSL_KEIL
109158         "sbcs	r5, r5, r6\n\t"
109159 #elif defined(__clang__)
109160         "sbcs	r5, r6\n\t"
109161 #else
109162         "sbc	r5, r6\n\t"
109163 #endif
109164         "stm	%[a]!, {r5}\n\t"
109165         "ldm	%[m]!, {r6}\n\t"
109166 #ifdef WOLFSSL_KEIL
109167         "ands	r6, r6, r7\n\t"
109168 #elif defined(__clang__)
109169         "ands	r6, r7\n\t"
109170 #else
109171         "and	r6, r7\n\t"
109172 #endif
109173         "ldr	r5, [%[a], r4]\n\t"
109174 #ifdef WOLFSSL_KEIL
109175         "sbcs	r5, r5, r6\n\t"
109176 #elif defined(__clang__)
109177         "sbcs	r5, r6\n\t"
109178 #else
109179         "sbc	r5, r6\n\t"
109180 #endif
109181         "stm	%[a]!, {r5}\n\t"
109182 #endif /* WOLFSSL_SP_LARGE_CODE */
109183         : [a] "+r" (a), [m] "+r" (m), [mp] "+r" (mp)
109184         :
109185         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "lr"
109186     );
109187 }
109188 
109189 /* Multiply two Montgomery form numbers mod the modulus (prime).
109190  * (r = a * b mod m)
109191  *
109192  * r   Result of multiplication.
109193  * a   First number to multiply in Montgomery form.
109194  * b   Second number to multiply in Montgomery form.
109195  * m   Modulus (prime).
109196  * mp  Montgomery mulitplier.
109197  */
sp_384_mont_mul_12(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)109198 static void sp_384_mont_mul_12(sp_digit* r, const sp_digit* a,
109199         const sp_digit* b, const sp_digit* m, sp_digit mp)
109200 {
109201     sp_384_mul_12(r, a, b);
109202     sp_384_mont_reduce_12(r, m, mp);
109203 }
109204 
109205 /* Square the Montgomery form number. (r = a * a mod m)
109206  *
109207  * r   Result of squaring.
109208  * a   Number to square in Montgomery form.
109209  * m   Modulus (prime).
109210  * mp  Montgomery mulitplier.
109211  */
sp_384_mont_sqr_12(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)109212 static void sp_384_mont_sqr_12(sp_digit* r, const sp_digit* a,
109213         const sp_digit* m, sp_digit mp)
109214 {
109215     sp_384_sqr_12(r, a);
109216     sp_384_mont_reduce_12(r, m, mp);
109217 }
109218 
109219 #if !defined(WOLFSSL_SP_SMALL) || defined(HAVE_COMP_KEY)
109220 /* Square the Montgomery form number a number of times. (r = a ^ n mod m)
109221  *
109222  * r   Result of squaring.
109223  * a   Number to square in Montgomery form.
109224  * n   Number of times to square.
109225  * m   Modulus (prime).
109226  * mp  Montgomery mulitplier.
109227  */
sp_384_mont_sqr_n_12(sp_digit * r,const sp_digit * a,int n,const sp_digit * m,sp_digit mp)109228 static void sp_384_mont_sqr_n_12(sp_digit* r, const sp_digit* a, int n,
109229         const sp_digit* m, sp_digit mp)
109230 {
109231     sp_384_mont_sqr_12(r, a, m, mp);
109232     for (; n > 1; n--) {
109233         sp_384_mont_sqr_12(r, r, m, mp);
109234     }
109235 }
109236 
109237 #endif /* !WOLFSSL_SP_SMALL | HAVE_COMP_KEY */
109238 #ifdef WOLFSSL_SP_SMALL
109239 /* Mod-2 for the P384 curve. */
109240 static const uint32_t p384_mod_minus_2[12] = {
109241     0xfffffffdU,0x00000000U,0x00000000U,0xffffffffU,0xfffffffeU,0xffffffffU,
109242     0xffffffffU,0xffffffffU,0xffffffffU,0xffffffffU,0xffffffffU,0xffffffffU
109243 };
109244 #endif /* !WOLFSSL_SP_SMALL */
109245 
109246 /* Invert the number, in Montgomery form, modulo the modulus (prime) of the
109247  * P384 curve. (r = 1 / a mod m)
109248  *
109249  * r   Inverse result.
109250  * a   Number to invert.
109251  * td  Temporary data.
109252  */
sp_384_mont_inv_12(sp_digit * r,const sp_digit * a,sp_digit * td)109253 static void sp_384_mont_inv_12(sp_digit* r, const sp_digit* a, sp_digit* td)
109254 {
109255 #ifdef WOLFSSL_SP_SMALL
109256     sp_digit* t = td;
109257     int i;
109258 
109259     XMEMCPY(t, a, sizeof(sp_digit) * 12);
109260     for (i=382; i>=0; i--) {
109261         sp_384_mont_sqr_12(t, t, p384_mod, p384_mp_mod);
109262         if (p384_mod_minus_2[i / 32] & ((sp_digit)1 << (i % 32)))
109263             sp_384_mont_mul_12(t, t, a, p384_mod, p384_mp_mod);
109264     }
109265     XMEMCPY(r, t, sizeof(sp_digit) * 12);
109266 #else
109267     sp_digit* t1 = td;
109268     sp_digit* t2 = td + 2 * 12;
109269     sp_digit* t3 = td + 4 * 12;
109270     sp_digit* t4 = td + 6 * 12;
109271     sp_digit* t5 = td + 8 * 12;
109272 
109273     /* 0x2 */
109274     sp_384_mont_sqr_12(t1, a, p384_mod, p384_mp_mod);
109275     /* 0x3 */
109276     sp_384_mont_mul_12(t5, t1, a, p384_mod, p384_mp_mod);
109277     /* 0xc */
109278     sp_384_mont_sqr_n_12(t1, t5, 2, p384_mod, p384_mp_mod);
109279     /* 0xf */
109280     sp_384_mont_mul_12(t2, t5, t1, p384_mod, p384_mp_mod);
109281     /* 0x1e */
109282     sp_384_mont_sqr_12(t1, t2, p384_mod, p384_mp_mod);
109283     /* 0x1f */
109284     sp_384_mont_mul_12(t4, t1, a, p384_mod, p384_mp_mod);
109285     /* 0x3e0 */
109286     sp_384_mont_sqr_n_12(t1, t4, 5, p384_mod, p384_mp_mod);
109287     /* 0x3ff */
109288     sp_384_mont_mul_12(t2, t4, t1, p384_mod, p384_mp_mod);
109289     /* 0x7fe0 */
109290     sp_384_mont_sqr_n_12(t1, t2, 5, p384_mod, p384_mp_mod);
109291     /* 0x7fff */
109292     sp_384_mont_mul_12(t4, t4, t1, p384_mod, p384_mp_mod);
109293     /* 0x3fff8000 */
109294     sp_384_mont_sqr_n_12(t1, t4, 15, p384_mod, p384_mp_mod);
109295     /* 0x3fffffff */
109296     sp_384_mont_mul_12(t2, t4, t1, p384_mod, p384_mp_mod);
109297     /* 0xfffffffc */
109298     sp_384_mont_sqr_n_12(t3, t2, 2, p384_mod, p384_mp_mod);
109299     /* 0xfffffffd */
109300     sp_384_mont_mul_12(r, t3, a, p384_mod, p384_mp_mod);
109301     /* 0xffffffff */
109302     sp_384_mont_mul_12(t3, t5, t3, p384_mod, p384_mp_mod);
109303     /* 0xfffffffc0000000 */
109304     sp_384_mont_sqr_n_12(t1, t2, 30, p384_mod, p384_mp_mod);
109305     /* 0xfffffffffffffff */
109306     sp_384_mont_mul_12(t2, t2, t1, p384_mod, p384_mp_mod);
109307     /* 0xfffffffffffffff000000000000000 */
109308     sp_384_mont_sqr_n_12(t1, t2, 60, p384_mod, p384_mp_mod);
109309     /* 0xffffffffffffffffffffffffffffff */
109310     sp_384_mont_mul_12(t2, t2, t1, p384_mod, p384_mp_mod);
109311     /* 0xffffffffffffffffffffffffffffff000000000000000000000000000000 */
109312     sp_384_mont_sqr_n_12(t1, t2, 120, p384_mod, p384_mp_mod);
109313     /* 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff */
109314     sp_384_mont_mul_12(t2, t2, t1, p384_mod, p384_mp_mod);
109315     /* 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000 */
109316     sp_384_mont_sqr_n_12(t1, t2, 15, p384_mod, p384_mp_mod);
109317     /* 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff */
109318     sp_384_mont_mul_12(t2, t4, t1, p384_mod, p384_mp_mod);
109319     /* 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000 */
109320     sp_384_mont_sqr_n_12(t1, t2, 33, p384_mod, p384_mp_mod);
109321     /* 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff */
109322     sp_384_mont_mul_12(t2, t3, t1, p384_mod, p384_mp_mod);
109323     /* 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000000000000 */
109324     sp_384_mont_sqr_n_12(t1, t2, 96, p384_mod, p384_mp_mod);
109325     /* 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffd */
109326     sp_384_mont_mul_12(r, r, t1, p384_mod, p384_mp_mod);
109327 
109328 #endif /* WOLFSSL_SP_SMALL */
109329 }
109330 
109331 /* Compare a with b in constant time.
109332  *
109333  * a  A single precision integer.
109334  * b  A single precision integer.
109335  * return -ve, 0 or +ve if a is less than, equal to or greater than b
109336  * respectively.
109337  */
sp_384_cmp_12(const sp_digit * a,const sp_digit * b)109338 SP_NOINLINE static sp_int32 sp_384_cmp_12(const sp_digit* a, const sp_digit* b)
109339 {
109340     __asm__ __volatile__ (
109341         "movs	r2, #0\n\t"
109342         "movs	r3, #0\n\t"
109343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109344         "mvns	r3, r3\n\t"
109345 #else
109346         "mvn	r3, r3\n\t"
109347 #endif
109348         "movs	r6, #44\n\t"
109349         "\n"
109350     "L_sp_384_cmp_12_words_%=:\n\t"
109351         "ldr	r7, [%[a], r6]\n\t"
109352         "ldr	r5, [%[b], r6]\n\t"
109353 #ifdef WOLFSSL_KEIL
109354         "ands	r7, r7, r3\n\t"
109355 #elif defined(__clang__)
109356         "ands	r7, r3\n\t"
109357 #else
109358         "and	r7, r3\n\t"
109359 #endif
109360 #ifdef WOLFSSL_KEIL
109361         "ands	r5, r5, r3\n\t"
109362 #elif defined(__clang__)
109363         "ands	r5, r3\n\t"
109364 #else
109365         "and	r5, r3\n\t"
109366 #endif
109367         "movs	r4, r7\n\t"
109368 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109369         "subs	r7, r7, r5\n\t"
109370 #else
109371         "sub	r7, r7, r5\n\t"
109372 #endif
109373 #ifdef WOLFSSL_KEIL
109374         "sbcs	r7, r7, r7\n\t"
109375 #elif defined(__clang__)
109376         "sbcs	r7, r7\n\t"
109377 #else
109378         "sbc	r7, r7\n\t"
109379 #endif
109380 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109381         "adds	r2, r2, r7\n\t"
109382 #else
109383         "add	r2, r2, r7\n\t"
109384 #endif
109385 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109386         "mvns	r7, r7\n\t"
109387 #else
109388         "mvn	r7, r7\n\t"
109389 #endif
109390 #ifdef WOLFSSL_KEIL
109391         "ands	r3, r3, r7\n\t"
109392 #elif defined(__clang__)
109393         "ands	r3, r7\n\t"
109394 #else
109395         "and	r3, r7\n\t"
109396 #endif
109397 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109398         "subs	r5, r5, r4\n\t"
109399 #else
109400         "sub	r5, r5, r4\n\t"
109401 #endif
109402 #ifdef WOLFSSL_KEIL
109403         "sbcs	r7, r7, r7\n\t"
109404 #elif defined(__clang__)
109405         "sbcs	r7, r7\n\t"
109406 #else
109407         "sbc	r7, r7\n\t"
109408 #endif
109409 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109410         "subs	r2, r2, r7\n\t"
109411 #else
109412         "sub	r2, r2, r7\n\t"
109413 #endif
109414 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109415         "mvns	r7, r7\n\t"
109416 #else
109417         "mvn	r7, r7\n\t"
109418 #endif
109419 #ifdef WOLFSSL_KEIL
109420         "ands	r3, r3, r7\n\t"
109421 #elif defined(__clang__)
109422         "ands	r3, r7\n\t"
109423 #else
109424         "and	r3, r7\n\t"
109425 #endif
109426 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109427         "subs	r6, r6, #4\n\t"
109428 #else
109429         "sub	r6, r6, #4\n\t"
109430 #endif
109431         "cmp	r6, #0\n\t"
109432         "bge	L_sp_384_cmp_12_words_%=\n\t"
109433         "movs	%[a], r2\n\t"
109434         : [a] "+r" (a), [b] "+r" (b)
109435         :
109436         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
109437     );
109438     return (uint32_t)(size_t)a;
109439 }
109440 
109441 /* Normalize the values in each word to 32.
109442  *
109443  * a  Array of sp_digit to normalize.
109444  */
109445 #define sp_384_norm_12(a)
109446 
109447 /* Map the Montgomery form projective coordinate point to an affine point.
109448  *
109449  * r  Resulting affine coordinate point.
109450  * p  Montgomery form projective coordinate point.
109451  * t  Temporary ordinate data.
109452  */
sp_384_map_12(sp_point_384 * r,const sp_point_384 * p,sp_digit * t)109453 static void sp_384_map_12(sp_point_384* r, const sp_point_384* p,
109454     sp_digit* t)
109455 {
109456     sp_digit* t1 = t;
109457     sp_digit* t2 = t + 2*12;
109458     sp_int32 n;
109459 
109460     sp_384_mont_inv_12(t1, p->z, t + 2*12);
109461 
109462     sp_384_mont_sqr_12(t2, t1, p384_mod, p384_mp_mod);
109463     sp_384_mont_mul_12(t1, t2, t1, p384_mod, p384_mp_mod);
109464 
109465     /* x /= z^2 */
109466     sp_384_mont_mul_12(r->x, p->x, t2, p384_mod, p384_mp_mod);
109467     XMEMSET(r->x + 12, 0, sizeof(r->x) / 2U);
109468     sp_384_mont_reduce_12(r->x, p384_mod, p384_mp_mod);
109469     /* Reduce x to less than modulus */
109470     n = sp_384_cmp_12(r->x, p384_mod);
109471     sp_384_cond_sub_12(r->x, r->x, p384_mod, 0 - ((n >= 0) ?
109472                 (sp_digit)1 : (sp_digit)0));
109473     sp_384_norm_12(r->x);
109474 
109475     /* y /= z^3 */
109476     sp_384_mont_mul_12(r->y, p->y, t1, p384_mod, p384_mp_mod);
109477     XMEMSET(r->y + 12, 0, sizeof(r->y) / 2U);
109478     sp_384_mont_reduce_12(r->y, p384_mod, p384_mp_mod);
109479     /* Reduce y to less than modulus */
109480     n = sp_384_cmp_12(r->y, p384_mod);
109481     sp_384_cond_sub_12(r->y, r->y, p384_mod, 0 - ((n >= 0) ?
109482                 (sp_digit)1 : (sp_digit)0));
109483     sp_384_norm_12(r->y);
109484 
109485     XMEMSET(r->z, 0, sizeof(r->z));
109486     r->z[0] = 1;
109487 
109488 }
109489 
109490 /* Add two Montgomery form numbers (r = a + b % m).
109491  *
109492  * r   Result of addition.
109493  * a   First number to add in Montgomery form.
109494  * b   Second number to add in Montgomery form.
109495  * m   Modulus (prime).
109496  */
sp_384_mont_add_12(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m)109497 SP_NOINLINE static void sp_384_mont_add_12(sp_digit* r, const sp_digit* a,
109498         const sp_digit* b, const sp_digit* m)
109499 {
109500     sp_digit o;
109501 
109502     o = sp_384_add_12(r, a, b);
109503     sp_384_cond_sub_12(r, r, m, 0 - o);
109504 }
109505 
109506 /* Double a Montgomery form number (r = a + a % m).
109507  *
109508  * r   Result of doubling.
109509  * a   Number to double in Montgomery form.
109510  * m   Modulus (prime).
109511  */
sp_384_mont_dbl_12(sp_digit * r,const sp_digit * a,const sp_digit * m)109512 SP_NOINLINE static void sp_384_mont_dbl_12(sp_digit* r, const sp_digit* a,
109513         const sp_digit* m)
109514 {
109515     sp_digit o;
109516 
109517     o = sp_384_add_12(r, a, a);
109518     sp_384_cond_sub_12(r, r, m, 0 - o);
109519 }
109520 
109521 /* Triple a Montgomery form number (r = a + a + a % m).
109522  *
109523  * r   Result of Tripling.
109524  * a   Number to triple in Montgomery form.
109525  * m   Modulus (prime).
109526  */
sp_384_mont_tpl_12(sp_digit * r,const sp_digit * a,const sp_digit * m)109527 SP_NOINLINE static void sp_384_mont_tpl_12(sp_digit* r, const sp_digit* a,
109528         const sp_digit* m)
109529 {
109530     sp_digit o;
109531 
109532     o = sp_384_add_12(r, a, a);
109533     sp_384_cond_sub_12(r, r, m, 0 - o);
109534     o = sp_384_add_12(r, r, a);
109535     sp_384_cond_sub_12(r, r, m, 0 - o);
109536 }
109537 
109538 /* Conditionally add a and b using the mask m.
109539  * m is -1 to add and 0 when not.
109540  *
109541  * r  A single precision number representing conditional add result.
109542  * a  A single precision number to add with.
109543  * b  A single precision number to add.
109544  * m  Mask value to apply.
109545  */
sp_384_cond_add_12(sp_digit * r,const sp_digit * a,const sp_digit * b,sp_digit m)109546 SP_NOINLINE static sp_digit sp_384_cond_add_12(sp_digit* r, const sp_digit* a,
109547         const sp_digit* b, sp_digit m)
109548 {
109549     __asm__ __volatile__ (
109550         "movs	r4, #0\n\t"
109551         "movs	r5, #48\n\t"
109552         "mov	r8, r5\n\t"
109553         "movs	r7, #0\n\t"
109554         "\n"
109555     "L_sp_384_cond_add_12_words_%=:\n\t"
109556         "ldr	r6, [%[b], r7]\n\t"
109557 #ifdef WOLFSSL_KEIL
109558         "ands	r6, r6, %[m]\n\t"
109559 #elif defined(__clang__)
109560         "ands	r6, %[m]\n\t"
109561 #else
109562         "and	r6, %[m]\n\t"
109563 #endif
109564         "movs	r5, #0\n\t"
109565 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109566         "subs	r5, r5, #1\n\t"
109567 #else
109568         "sub	r5, r5, #1\n\t"
109569 #endif
109570 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109571         "adds	r5, r5, r4\n\t"
109572 #else
109573         "add	r5, r5, r4\n\t"
109574 #endif
109575         "ldr	r5, [%[a], r7]\n\t"
109576 #ifdef WOLFSSL_KEIL
109577         "adcs	r5, r5, r6\n\t"
109578 #elif defined(__clang__)
109579         "adcs	r5, r6\n\t"
109580 #else
109581         "adc	r5, r6\n\t"
109582 #endif
109583         "movs	r4, #0\n\t"
109584 #ifdef WOLFSSL_KEIL
109585         "adcs	r4, r4, r4\n\t"
109586 #elif defined(__clang__)
109587         "adcs	r4, r4\n\t"
109588 #else
109589         "adc	r4, r4\n\t"
109590 #endif
109591         "str	r5, [%[r], r7]\n\t"
109592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109593         "adds	r7, r7, #4\n\t"
109594 #else
109595         "add	r7, r7, #4\n\t"
109596 #endif
109597         "cmp	r7, r8\n\t"
109598         "blt	L_sp_384_cond_add_12_words_%=\n\t"
109599         "movs	%[r], r4\n\t"
109600         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
109601         :
109602         : "memory", "r4", "r5", "r6", "r7", "r8"
109603     );
109604     return (uint32_t)(size_t)r;
109605 }
109606 
109607 /* Subtract two Montgomery form numbers (r = a - b % m).
109608  *
109609  * r   Result of subtration.
109610  * a   Number to subtract from in Montgomery form.
109611  * b   Number to subtract with in Montgomery form.
109612  * m   Modulus (prime).
109613  */
sp_384_mont_sub_12(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m)109614 SP_NOINLINE static void sp_384_mont_sub_12(sp_digit* r, const sp_digit* a,
109615         const sp_digit* b, const sp_digit* m)
109616 {
109617     sp_digit o;
109618 
109619     o = sp_384_sub_12(r, a, b);
109620     sp_384_cond_add_12(r, r, m, o);
109621 }
109622 
109623 /* Right shift a by 1 bit into r. (r = a >> 1)
109624  *
109625  * r  A single precision integer.
109626  * a  A single precision integer.
109627  */
sp_384_rshift1_12(sp_digit * r,const sp_digit * a)109628 static void sp_384_rshift1_12(sp_digit* r, const sp_digit* a)
109629 {
109630     __asm__ __volatile__ (
109631         "ldr	r2, [%[a]]\n\t"
109632         "ldr	r3, [%[a], #4]\n\t"
109633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109634         "lsrs	r2, r2, #1\n\t"
109635 #else
109636         "lsr	r2, r2, #1\n\t"
109637 #endif
109638 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109639         "lsls	r5, r3, #31\n\t"
109640 #else
109641         "lsl	r5, r3, #31\n\t"
109642 #endif
109643 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109644         "lsrs	r3, r3, #1\n\t"
109645 #else
109646         "lsr	r3, r3, #1\n\t"
109647 #endif
109648 #ifdef WOLFSSL_KEIL
109649         "orrs	r2, r2, r5\n\t"
109650 #elif defined(__clang__)
109651         "orrs	r2, r5\n\t"
109652 #else
109653         "orr	r2, r5\n\t"
109654 #endif
109655         "ldr	r4, [%[a], #8]\n\t"
109656         "str	r2, [%[r]]\n\t"
109657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109658         "lsls	r5, r4, #31\n\t"
109659 #else
109660         "lsl	r5, r4, #31\n\t"
109661 #endif
109662 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109663         "lsrs	r4, r4, #1\n\t"
109664 #else
109665         "lsr	r4, r4, #1\n\t"
109666 #endif
109667 #ifdef WOLFSSL_KEIL
109668         "orrs	r3, r3, r5\n\t"
109669 #elif defined(__clang__)
109670         "orrs	r3, r5\n\t"
109671 #else
109672         "orr	r3, r5\n\t"
109673 #endif
109674         "ldr	r2, [%[a], #12]\n\t"
109675         "str	r3, [%[r], #4]\n\t"
109676 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109677         "lsls	r5, r2, #31\n\t"
109678 #else
109679         "lsl	r5, r2, #31\n\t"
109680 #endif
109681 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109682         "lsrs	r2, r2, #1\n\t"
109683 #else
109684         "lsr	r2, r2, #1\n\t"
109685 #endif
109686 #ifdef WOLFSSL_KEIL
109687         "orrs	r4, r4, r5\n\t"
109688 #elif defined(__clang__)
109689         "orrs	r4, r5\n\t"
109690 #else
109691         "orr	r4, r5\n\t"
109692 #endif
109693         "ldr	r3, [%[a], #16]\n\t"
109694         "str	r4, [%[r], #8]\n\t"
109695 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109696         "lsls	r5, r3, #31\n\t"
109697 #else
109698         "lsl	r5, r3, #31\n\t"
109699 #endif
109700 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109701         "lsrs	r3, r3, #1\n\t"
109702 #else
109703         "lsr	r3, r3, #1\n\t"
109704 #endif
109705 #ifdef WOLFSSL_KEIL
109706         "orrs	r2, r2, r5\n\t"
109707 #elif defined(__clang__)
109708         "orrs	r2, r5\n\t"
109709 #else
109710         "orr	r2, r5\n\t"
109711 #endif
109712         "ldr	r4, [%[a], #20]\n\t"
109713         "str	r2, [%[r], #12]\n\t"
109714 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109715         "lsls	r5, r4, #31\n\t"
109716 #else
109717         "lsl	r5, r4, #31\n\t"
109718 #endif
109719 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109720         "lsrs	r4, r4, #1\n\t"
109721 #else
109722         "lsr	r4, r4, #1\n\t"
109723 #endif
109724 #ifdef WOLFSSL_KEIL
109725         "orrs	r3, r3, r5\n\t"
109726 #elif defined(__clang__)
109727         "orrs	r3, r5\n\t"
109728 #else
109729         "orr	r3, r5\n\t"
109730 #endif
109731         "ldr	r2, [%[a], #24]\n\t"
109732         "str	r3, [%[r], #16]\n\t"
109733 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109734         "lsls	r5, r2, #31\n\t"
109735 #else
109736         "lsl	r5, r2, #31\n\t"
109737 #endif
109738 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109739         "lsrs	r2, r2, #1\n\t"
109740 #else
109741         "lsr	r2, r2, #1\n\t"
109742 #endif
109743 #ifdef WOLFSSL_KEIL
109744         "orrs	r4, r4, r5\n\t"
109745 #elif defined(__clang__)
109746         "orrs	r4, r5\n\t"
109747 #else
109748         "orr	r4, r5\n\t"
109749 #endif
109750         "ldr	r3, [%[a], #28]\n\t"
109751         "str	r4, [%[r], #20]\n\t"
109752 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109753         "lsls	r5, r3, #31\n\t"
109754 #else
109755         "lsl	r5, r3, #31\n\t"
109756 #endif
109757 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109758         "lsrs	r3, r3, #1\n\t"
109759 #else
109760         "lsr	r3, r3, #1\n\t"
109761 #endif
109762 #ifdef WOLFSSL_KEIL
109763         "orrs	r2, r2, r5\n\t"
109764 #elif defined(__clang__)
109765         "orrs	r2, r5\n\t"
109766 #else
109767         "orr	r2, r5\n\t"
109768 #endif
109769         "ldr	r4, [%[a], #32]\n\t"
109770         "str	r2, [%[r], #24]\n\t"
109771 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109772         "lsls	r5, r4, #31\n\t"
109773 #else
109774         "lsl	r5, r4, #31\n\t"
109775 #endif
109776 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109777         "lsrs	r4, r4, #1\n\t"
109778 #else
109779         "lsr	r4, r4, #1\n\t"
109780 #endif
109781 #ifdef WOLFSSL_KEIL
109782         "orrs	r3, r3, r5\n\t"
109783 #elif defined(__clang__)
109784         "orrs	r3, r5\n\t"
109785 #else
109786         "orr	r3, r5\n\t"
109787 #endif
109788         "ldr	r2, [%[a], #36]\n\t"
109789         "str	r3, [%[r], #28]\n\t"
109790 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109791         "lsls	r5, r2, #31\n\t"
109792 #else
109793         "lsl	r5, r2, #31\n\t"
109794 #endif
109795 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109796         "lsrs	r2, r2, #1\n\t"
109797 #else
109798         "lsr	r2, r2, #1\n\t"
109799 #endif
109800 #ifdef WOLFSSL_KEIL
109801         "orrs	r4, r4, r5\n\t"
109802 #elif defined(__clang__)
109803         "orrs	r4, r5\n\t"
109804 #else
109805         "orr	r4, r5\n\t"
109806 #endif
109807         "ldr	r3, [%[a], #40]\n\t"
109808         "str	r4, [%[r], #32]\n\t"
109809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109810         "lsls	r5, r3, #31\n\t"
109811 #else
109812         "lsl	r5, r3, #31\n\t"
109813 #endif
109814 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109815         "lsrs	r3, r3, #1\n\t"
109816 #else
109817         "lsr	r3, r3, #1\n\t"
109818 #endif
109819 #ifdef WOLFSSL_KEIL
109820         "orrs	r2, r2, r5\n\t"
109821 #elif defined(__clang__)
109822         "orrs	r2, r5\n\t"
109823 #else
109824         "orr	r2, r5\n\t"
109825 #endif
109826         "ldr	r4, [%[a], #44]\n\t"
109827         "str	r2, [%[r], #36]\n\t"
109828 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109829         "lsls	r5, r4, #31\n\t"
109830 #else
109831         "lsl	r5, r4, #31\n\t"
109832 #endif
109833 #if defined(__clang__) || defined(WOLFSSL_KEIL)
109834         "lsrs	r4, r4, #1\n\t"
109835 #else
109836         "lsr	r4, r4, #1\n\t"
109837 #endif
109838 #ifdef WOLFSSL_KEIL
109839         "orrs	r3, r3, r5\n\t"
109840 #elif defined(__clang__)
109841         "orrs	r3, r5\n\t"
109842 #else
109843         "orr	r3, r5\n\t"
109844 #endif
109845         "str	r3, [%[r], #40]\n\t"
109846         "str	r4, [%[r], #44]\n\t"
109847         : [r] "+r" (r), [a] "+r" (a)
109848         :
109849         : "memory", "r2", "r3", "r4", "r5"
109850     );
109851 }
109852 
109853 /* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m)
109854  *
109855  * r  Result of division by 2.
109856  * a  Number to divide.
109857  * m  Modulus (prime).
109858  */
sp_384_div2_12(sp_digit * r,const sp_digit * a,const sp_digit * m)109859 SP_NOINLINE static void sp_384_div2_12(sp_digit* r, const sp_digit* a,
109860         const sp_digit* m)
109861 {
109862     sp_digit o;
109863 
109864     o = sp_384_cond_add_12(r, a, m, 0 - (a[0] & 1));
109865     sp_384_rshift1_12(r, r);
109866     r[11] |= o << 31;
109867 }
109868 
109869 /* Double the Montgomery form projective point p.
109870  *
109871  * r  Result of doubling point.
109872  * p  Point to double.
109873  * t  Temporary ordinate data.
109874  */
109875 #ifdef WOLFSSL_SP_NONBLOCK
109876 typedef struct sp_384_proj_point_dbl_12_ctx {
109877     int state;
109878     sp_digit* t1;
109879     sp_digit* t2;
109880     sp_digit* x;
109881     sp_digit* y;
109882     sp_digit* z;
109883 } sp_384_proj_point_dbl_12_ctx;
109884 
sp_384_proj_point_dbl_12_nb(sp_ecc_ctx_t * sp_ctx,sp_point_384 * r,const sp_point_384 * p,sp_digit * t)109885 static int sp_384_proj_point_dbl_12_nb(sp_ecc_ctx_t* sp_ctx, sp_point_384* r, const sp_point_384* p, sp_digit* t)
109886 {
109887     int err = FP_WOULDBLOCK;
109888     sp_384_proj_point_dbl_12_ctx* ctx = (sp_384_proj_point_dbl_12_ctx*)sp_ctx->data;
109889 
109890     typedef char ctx_size_test[sizeof(sp_384_proj_point_dbl_12_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
109891     (void)sizeof(ctx_size_test);
109892 
109893     switch (ctx->state) {
109894     case 0:
109895         ctx->t1 = t;
109896         ctx->t2 = t + 2*12;
109897         ctx->x = r->x;
109898         ctx->y = r->y;
109899         ctx->z = r->z;
109900 
109901         /* Put infinity into result. */
109902         if (r != p) {
109903             r->infinity = p->infinity;
109904         }
109905         ctx->state = 1;
109906         break;
109907     case 1:
109908         /* T1 = Z * Z */
109909         sp_384_mont_sqr_12(ctx->t1, p->z, p384_mod, p384_mp_mod);
109910         ctx->state = 2;
109911         break;
109912     case 2:
109913         /* Z = Y * Z */
109914         sp_384_mont_mul_12(ctx->z, p->y, p->z, p384_mod, p384_mp_mod);
109915         ctx->state = 3;
109916         break;
109917     case 3:
109918         /* Z = 2Z */
109919         sp_384_mont_dbl_12(ctx->z, ctx->z, p384_mod);
109920         ctx->state = 4;
109921         break;
109922     case 4:
109923         /* T2 = X - T1 */
109924         sp_384_mont_sub_12(ctx->t2, p->x, ctx->t1, p384_mod);
109925         ctx->state = 5;
109926         break;
109927     case 5:
109928         /* T1 = X + T1 */
109929         sp_384_mont_add_12(ctx->t1, p->x, ctx->t1, p384_mod);
109930         ctx->state = 6;
109931         break;
109932     case 6:
109933         /* T2 = T1 * T2 */
109934         sp_384_mont_mul_12(ctx->t2, ctx->t1, ctx->t2, p384_mod, p384_mp_mod);
109935         ctx->state = 7;
109936         break;
109937     case 7:
109938         /* T1 = 3T2 */
109939         sp_384_mont_tpl_12(ctx->t1, ctx->t2, p384_mod);
109940         ctx->state = 8;
109941         break;
109942     case 8:
109943         /* Y = 2Y */
109944         sp_384_mont_dbl_12(ctx->y, p->y, p384_mod);
109945         ctx->state = 9;
109946         break;
109947     case 9:
109948         /* Y = Y * Y */
109949         sp_384_mont_sqr_12(ctx->y, ctx->y, p384_mod, p384_mp_mod);
109950         ctx->state = 10;
109951         break;
109952     case 10:
109953         /* T2 = Y * Y */
109954         sp_384_mont_sqr_12(ctx->t2, ctx->y, p384_mod, p384_mp_mod);
109955         ctx->state = 11;
109956         break;
109957     case 11:
109958         /* T2 = T2/2 */
109959         sp_384_div2_12(ctx->t2, ctx->t2, p384_mod);
109960         ctx->state = 12;
109961         break;
109962     case 12:
109963         /* Y = Y * X */
109964         sp_384_mont_mul_12(ctx->y, ctx->y, p->x, p384_mod, p384_mp_mod);
109965         ctx->state = 13;
109966         break;
109967     case 13:
109968         /* X = T1 * T1 */
109969         sp_384_mont_sqr_12(ctx->x, ctx->t1, p384_mod, p384_mp_mod);
109970         ctx->state = 14;
109971         break;
109972     case 14:
109973         /* X = X - Y */
109974         sp_384_mont_sub_12(ctx->x, ctx->x, ctx->y, p384_mod);
109975         ctx->state = 15;
109976         break;
109977     case 15:
109978         /* X = X - Y */
109979         sp_384_mont_sub_12(ctx->x, ctx->x, ctx->y, p384_mod);
109980         ctx->state = 16;
109981         break;
109982     case 16:
109983         /* Y = Y - X */
109984         sp_384_mont_sub_12(ctx->y, ctx->y, ctx->x, p384_mod);
109985         ctx->state = 17;
109986         break;
109987     case 17:
109988         /* Y = Y * T1 */
109989         sp_384_mont_mul_12(ctx->y, ctx->y, ctx->t1, p384_mod, p384_mp_mod);
109990         ctx->state = 18;
109991         break;
109992     case 18:
109993         /* Y = Y - T2 */
109994         sp_384_mont_sub_12(ctx->y, ctx->y, ctx->t2, p384_mod);
109995         ctx->state = 19;
109996         /* fall-through */
109997     case 19:
109998         err = MP_OKAY;
109999         break;
110000     }
110001 
110002     if (err == MP_OKAY && ctx->state != 19) {
110003         err = FP_WOULDBLOCK;
110004     }
110005 
110006     return err;
110007 }
110008 #endif /* WOLFSSL_SP_NONBLOCK */
110009 
sp_384_proj_point_dbl_12(sp_point_384 * r,const sp_point_384 * p,sp_digit * t)110010 static void sp_384_proj_point_dbl_12(sp_point_384* r, const sp_point_384* p, sp_digit* t)
110011 {
110012     sp_digit* t1 = t;
110013     sp_digit* t2 = t + 2*12;
110014     sp_digit* x;
110015     sp_digit* y;
110016     sp_digit* z;
110017 
110018     x = r->x;
110019     y = r->y;
110020     z = r->z;
110021     /* Put infinity into result. */
110022     if (r != p) {
110023         r->infinity = p->infinity;
110024     }
110025 
110026     /* T1 = Z * Z */
110027     sp_384_mont_sqr_12(t1, p->z, p384_mod, p384_mp_mod);
110028     /* Z = Y * Z */
110029     sp_384_mont_mul_12(z, p->y, p->z, p384_mod, p384_mp_mod);
110030     /* Z = 2Z */
110031     sp_384_mont_dbl_12(z, z, p384_mod);
110032     /* T2 = X - T1 */
110033     sp_384_mont_sub_12(t2, p->x, t1, p384_mod);
110034     /* T1 = X + T1 */
110035     sp_384_mont_add_12(t1, p->x, t1, p384_mod);
110036     /* T2 = T1 * T2 */
110037     sp_384_mont_mul_12(t2, t1, t2, p384_mod, p384_mp_mod);
110038     /* T1 = 3T2 */
110039     sp_384_mont_tpl_12(t1, t2, p384_mod);
110040     /* Y = 2Y */
110041     sp_384_mont_dbl_12(y, p->y, p384_mod);
110042     /* Y = Y * Y */
110043     sp_384_mont_sqr_12(y, y, p384_mod, p384_mp_mod);
110044     /* T2 = Y * Y */
110045     sp_384_mont_sqr_12(t2, y, p384_mod, p384_mp_mod);
110046     /* T2 = T2/2 */
110047     sp_384_div2_12(t2, t2, p384_mod);
110048     /* Y = Y * X */
110049     sp_384_mont_mul_12(y, y, p->x, p384_mod, p384_mp_mod);
110050     /* X = T1 * T1 */
110051     sp_384_mont_sqr_12(x, t1, p384_mod, p384_mp_mod);
110052     /* X = X - Y */
110053     sp_384_mont_sub_12(x, x, y, p384_mod);
110054     /* X = X - Y */
110055     sp_384_mont_sub_12(x, x, y, p384_mod);
110056     /* Y = Y - X */
110057     sp_384_mont_sub_12(y, y, x, p384_mod);
110058     /* Y = Y * T1 */
110059     sp_384_mont_mul_12(y, y, t1, p384_mod, p384_mp_mod);
110060     /* Y = Y - T2 */
110061     sp_384_mont_sub_12(y, y, t2, p384_mod);
110062 }
110063 
110064 /* Compare two numbers to determine if they are equal.
110065  * Constant time implementation.
110066  *
110067  * a  First number to compare.
110068  * b  Second number to compare.
110069  * returns 1 when equal and 0 otherwise.
110070  */
sp_384_cmp_equal_12(const sp_digit * a,const sp_digit * b)110071 static int sp_384_cmp_equal_12(const sp_digit* a, const sp_digit* b)
110072 {
110073     return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2]) |
110074             (a[3] ^ b[3]) | (a[4] ^ b[4]) | (a[5] ^ b[5]) |
110075             (a[6] ^ b[6]) | (a[7] ^ b[7]) | (a[8] ^ b[8]) |
110076             (a[9] ^ b[9]) | (a[10] ^ b[10]) | (a[11] ^ b[11])) == 0;
110077 }
110078 
110079 /* Add two Montgomery form projective points.
110080  *
110081  * r  Result of addition.
110082  * p  First point to add.
110083  * q  Second point to add.
110084  * t  Temporary ordinate data.
110085  */
110086 
110087 #ifdef WOLFSSL_SP_NONBLOCK
110088 typedef struct sp_384_proj_point_add_12_ctx {
110089     int state;
110090     sp_384_proj_point_dbl_12_ctx dbl_ctx;
110091     const sp_point_384* ap[2];
110092     sp_point_384* rp[2];
110093     sp_digit* t1;
110094     sp_digit* t2;
110095     sp_digit* t3;
110096     sp_digit* t4;
110097     sp_digit* t5;
110098     sp_digit* x;
110099     sp_digit* y;
110100     sp_digit* z;
110101 } sp_384_proj_point_add_12_ctx;
110102 
sp_384_proj_point_add_12_nb(sp_ecc_ctx_t * sp_ctx,sp_point_384 * r,const sp_point_384 * p,const sp_point_384 * q,sp_digit * t)110103 static int sp_384_proj_point_add_12_nb(sp_ecc_ctx_t* sp_ctx, sp_point_384* r,
110104     const sp_point_384* p, const sp_point_384* q, sp_digit* t)
110105 {
110106     int err = FP_WOULDBLOCK;
110107     sp_384_proj_point_add_12_ctx* ctx = (sp_384_proj_point_add_12_ctx*)sp_ctx->data;
110108 
110109     /* Ensure only the first point is the same as the result. */
110110     if (q == r) {
110111         const sp_point_384* a = p;
110112         p = q;
110113         q = a;
110114     }
110115 
110116     typedef char ctx_size_test[sizeof(sp_384_proj_point_add_12_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
110117     (void)sizeof(ctx_size_test);
110118 
110119     switch (ctx->state) {
110120     case 0: /* INIT */
110121         ctx->t1 = t;
110122         ctx->t2 = t + 2*12;
110123         ctx->t3 = t + 4*12;
110124         ctx->t4 = t + 6*12;
110125         ctx->t5 = t + 8*12;
110126 
110127         ctx->state = 1;
110128         break;
110129     case 1:
110130         /* Check double */
110131         (void)sp_384_sub_12(ctx->t1, p384_mod, q->y);
110132         sp_384_norm_12(ctx->t1);
110133         if ((sp_384_cmp_equal_12(p->x, q->x) & sp_384_cmp_equal_12(p->z, q->z) &
110134             (sp_384_cmp_equal_12(p->y, q->y) | sp_384_cmp_equal_12(p->y, ctx->t1))) != 0)
110135         {
110136             XMEMSET(&ctx->dbl_ctx, 0, sizeof(ctx->dbl_ctx));
110137             ctx->state = 2;
110138         }
110139         else {
110140             ctx->state = 3;
110141         }
110142         break;
110143     case 2:
110144         err = sp_384_proj_point_dbl_12_nb((sp_ecc_ctx_t*)&ctx->dbl_ctx, r, p, t);
110145         if (err == MP_OKAY)
110146             ctx->state = 27; /* done */
110147         break;
110148     case 3:
110149     {
110150         int i;
110151         ctx->rp[0] = r;
110152 
110153         /*lint allow cast to different type of pointer*/
110154         ctx->rp[1] = (sp_point_384*)t; /*lint !e9087 !e740*/
110155         XMEMSET(ctx->rp[1], 0, sizeof(sp_point_384));
110156         ctx->x = ctx->rp[p->infinity | q->infinity]->x;
110157         ctx->y = ctx->rp[p->infinity | q->infinity]->y;
110158         ctx->z = ctx->rp[p->infinity | q->infinity]->z;
110159 
110160         ctx->ap[0] = p;
110161         ctx->ap[1] = q;
110162         for (i=0; i<12; i++) {
110163             r->x[i] = ctx->ap[p->infinity]->x[i];
110164         }
110165         for (i=0; i<12; i++) {
110166             r->y[i] = ctx->ap[p->infinity]->y[i];
110167         }
110168         for (i=0; i<12; i++) {
110169             r->z[i] = ctx->ap[p->infinity]->z[i];
110170         }
110171         r->infinity = ctx->ap[p->infinity]->infinity;
110172 
110173         ctx->state = 4;
110174         break;
110175     }
110176     case 4:
110177         /* U1 = X1*Z2^2 */
110178         sp_384_mont_sqr_12(ctx->t1, q->z, p384_mod, p384_mp_mod);
110179         ctx->state = 5;
110180         break;
110181     case 5:
110182         sp_384_mont_mul_12(ctx->t3, ctx->t1, q->z, p384_mod, p384_mp_mod);
110183         ctx->state = 6;
110184         break;
110185     case 6:
110186         sp_384_mont_mul_12(ctx->t1, ctx->t1, ctx->x, p384_mod, p384_mp_mod);
110187         ctx->state = 7;
110188         break;
110189     case 7:
110190         /* U2 = X2*Z1^2 */
110191         sp_384_mont_sqr_12(ctx->t2, ctx->z, p384_mod, p384_mp_mod);
110192         ctx->state = 8;
110193         break;
110194     case 8:
110195         sp_384_mont_mul_12(ctx->t4, ctx->t2, ctx->z, p384_mod, p384_mp_mod);
110196         ctx->state = 9;
110197         break;
110198     case 9:
110199         sp_384_mont_mul_12(ctx->t2, ctx->t2, q->x, p384_mod, p384_mp_mod);
110200         ctx->state = 10;
110201         break;
110202     case 10:
110203         /* S1 = Y1*Z2^3 */
110204         sp_384_mont_mul_12(ctx->t3, ctx->t3, ctx->y, p384_mod, p384_mp_mod);
110205         ctx->state = 11;
110206         break;
110207     case 11:
110208         /* S2 = Y2*Z1^3 */
110209         sp_384_mont_mul_12(ctx->t4, ctx->t4, q->y, p384_mod, p384_mp_mod);
110210         ctx->state = 12;
110211         break;
110212     case 12:
110213         /* H = U2 - U1 */
110214         sp_384_mont_sub_12(ctx->t2, ctx->t2, ctx->t1, p384_mod);
110215         ctx->state = 13;
110216         break;
110217     case 13:
110218         /* R = S2 - S1 */
110219         sp_384_mont_sub_12(ctx->t4, ctx->t4, ctx->t3, p384_mod);
110220         ctx->state = 14;
110221         break;
110222     case 14:
110223         /* Z3 = H*Z1*Z2 */
110224         sp_384_mont_mul_12(ctx->z, ctx->z, q->z, p384_mod, p384_mp_mod);
110225         ctx->state = 15;
110226         break;
110227     case 15:
110228         sp_384_mont_mul_12(ctx->z, ctx->z, ctx->t2, p384_mod, p384_mp_mod);
110229         ctx->state = 16;
110230         break;
110231     case 16:
110232         /* X3 = R^2 - H^3 - 2*U1*H^2 */
110233         sp_384_mont_sqr_12(ctx->x, ctx->t4, p384_mod, p384_mp_mod);
110234         ctx->state = 17;
110235         break;
110236     case 17:
110237         sp_384_mont_sqr_12(ctx->t5, ctx->t2, p384_mod, p384_mp_mod);
110238         ctx->state = 18;
110239         break;
110240     case 18:
110241         sp_384_mont_mul_12(ctx->y, ctx->t1, ctx->t5, p384_mod, p384_mp_mod);
110242         ctx->state = 19;
110243         break;
110244     case 19:
110245         sp_384_mont_mul_12(ctx->t5, ctx->t5, ctx->t2, p384_mod, p384_mp_mod);
110246         ctx->state = 20;
110247         break;
110248     case 20:
110249         sp_384_mont_sub_12(ctx->x, ctx->x, ctx->t5, p384_mod);
110250         ctx->state = 21;
110251         break;
110252     case 21:
110253         sp_384_mont_dbl_12(ctx->t1, ctx->y, p384_mod);
110254         ctx->state = 22;
110255         break;
110256     case 22:
110257         sp_384_mont_sub_12(ctx->x, ctx->x, ctx->t1, p384_mod);
110258         ctx->state = 23;
110259         break;
110260     case 23:
110261         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
110262         sp_384_mont_sub_12(ctx->y, ctx->y, ctx->x, p384_mod);
110263         ctx->state = 24;
110264         break;
110265     case 24:
110266         sp_384_mont_mul_12(ctx->y, ctx->y, ctx->t4, p384_mod, p384_mp_mod);
110267         ctx->state = 25;
110268         break;
110269     case 25:
110270         sp_384_mont_mul_12(ctx->t5, ctx->t5, ctx->t3, p384_mod, p384_mp_mod);
110271         ctx->state = 26;
110272         break;
110273     case 26:
110274         sp_384_mont_sub_12(ctx->y, ctx->y, ctx->t5, p384_mod);
110275         ctx->state = 27;
110276         /* fall-through */
110277     case 27:
110278         err = MP_OKAY;
110279         break;
110280     }
110281 
110282     if (err == MP_OKAY && ctx->state != 27) {
110283         err = FP_WOULDBLOCK;
110284     }
110285     return err;
110286 }
110287 #endif /* WOLFSSL_SP_NONBLOCK */
110288 
sp_384_proj_point_add_12(sp_point_384 * r,const sp_point_384 * p,const sp_point_384 * q,sp_digit * t)110289 static void sp_384_proj_point_add_12(sp_point_384* r,
110290         const sp_point_384* p, const sp_point_384* q, sp_digit* t)
110291 {
110292     const sp_point_384* ap[2];
110293     sp_point_384* rp[2];
110294     sp_digit* t1 = t;
110295     sp_digit* t2 = t + 2*12;
110296     sp_digit* t3 = t + 4*12;
110297     sp_digit* t4 = t + 6*12;
110298     sp_digit* t5 = t + 8*12;
110299     sp_digit* x;
110300     sp_digit* y;
110301     sp_digit* z;
110302     int i;
110303 
110304     /* Ensure only the first point is the same as the result. */
110305     if (q == r) {
110306         const sp_point_384* a = p;
110307         p = q;
110308         q = a;
110309     }
110310 
110311     /* Check double */
110312     (void)sp_384_sub_12(t1, p384_mod, q->y);
110313     sp_384_norm_12(t1);
110314     if ((sp_384_cmp_equal_12(p->x, q->x) & sp_384_cmp_equal_12(p->z, q->z) &
110315         (sp_384_cmp_equal_12(p->y, q->y) | sp_384_cmp_equal_12(p->y, t1))) != 0) {
110316         sp_384_proj_point_dbl_12(r, p, t);
110317     }
110318     else {
110319         rp[0] = r;
110320 
110321         /*lint allow cast to different type of pointer*/
110322         rp[1] = (sp_point_384*)t; /*lint !e9087 !e740*/
110323         XMEMSET(rp[1], 0, sizeof(sp_point_384));
110324         x = rp[p->infinity | q->infinity]->x;
110325         y = rp[p->infinity | q->infinity]->y;
110326         z = rp[p->infinity | q->infinity]->z;
110327 
110328         ap[0] = p;
110329         ap[1] = q;
110330         for (i=0; i<12; i++) {
110331             r->x[i] = ap[p->infinity]->x[i];
110332         }
110333         for (i=0; i<12; i++) {
110334             r->y[i] = ap[p->infinity]->y[i];
110335         }
110336         for (i=0; i<12; i++) {
110337             r->z[i] = ap[p->infinity]->z[i];
110338         }
110339         r->infinity = ap[p->infinity]->infinity;
110340 
110341         /* U1 = X1*Z2^2 */
110342         sp_384_mont_sqr_12(t1, q->z, p384_mod, p384_mp_mod);
110343         sp_384_mont_mul_12(t3, t1, q->z, p384_mod, p384_mp_mod);
110344         sp_384_mont_mul_12(t1, t1, x, p384_mod, p384_mp_mod);
110345         /* U2 = X2*Z1^2 */
110346         sp_384_mont_sqr_12(t2, z, p384_mod, p384_mp_mod);
110347         sp_384_mont_mul_12(t4, t2, z, p384_mod, p384_mp_mod);
110348         sp_384_mont_mul_12(t2, t2, q->x, p384_mod, p384_mp_mod);
110349         /* S1 = Y1*Z2^3 */
110350         sp_384_mont_mul_12(t3, t3, y, p384_mod, p384_mp_mod);
110351         /* S2 = Y2*Z1^3 */
110352         sp_384_mont_mul_12(t4, t4, q->y, p384_mod, p384_mp_mod);
110353         /* H = U2 - U1 */
110354         sp_384_mont_sub_12(t2, t2, t1, p384_mod);
110355         /* R = S2 - S1 */
110356         sp_384_mont_sub_12(t4, t4, t3, p384_mod);
110357         /* Z3 = H*Z1*Z2 */
110358         sp_384_mont_mul_12(z, z, q->z, p384_mod, p384_mp_mod);
110359         sp_384_mont_mul_12(z, z, t2, p384_mod, p384_mp_mod);
110360         /* X3 = R^2 - H^3 - 2*U1*H^2 */
110361         sp_384_mont_sqr_12(x, t4, p384_mod, p384_mp_mod);
110362         sp_384_mont_sqr_12(t5, t2, p384_mod, p384_mp_mod);
110363         sp_384_mont_mul_12(y, t1, t5, p384_mod, p384_mp_mod);
110364         sp_384_mont_mul_12(t5, t5, t2, p384_mod, p384_mp_mod);
110365         sp_384_mont_sub_12(x, x, t5, p384_mod);
110366         sp_384_mont_dbl_12(t1, y, p384_mod);
110367         sp_384_mont_sub_12(x, x, t1, p384_mod);
110368         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
110369         sp_384_mont_sub_12(y, y, x, p384_mod);
110370         sp_384_mont_mul_12(y, y, t4, p384_mod, p384_mp_mod);
110371         sp_384_mont_mul_12(t5, t5, t3, p384_mod, p384_mp_mod);
110372         sp_384_mont_sub_12(y, y, t5, p384_mod);
110373     }
110374 }
110375 
110376 #ifndef WC_NO_CACHE_RESISTANT
110377 /* Touch each possible point that could be being copied.
110378  *
110379  * r      Point to copy into.
110380  * table  Table - start of the entires to access
110381  * idx    Index of entry to retrieve.
110382  */
sp_384_get_point_16_12(sp_point_384 * r,const sp_point_384 * table,int idx)110383 static void sp_384_get_point_16_12(sp_point_384* r, const sp_point_384* table,
110384     int idx)
110385 {
110386     int i;
110387     sp_digit mask;
110388 
110389     r->x[0] = 0;
110390     r->x[1] = 0;
110391     r->x[2] = 0;
110392     r->x[3] = 0;
110393     r->x[4] = 0;
110394     r->x[5] = 0;
110395     r->x[6] = 0;
110396     r->x[7] = 0;
110397     r->x[8] = 0;
110398     r->x[9] = 0;
110399     r->x[10] = 0;
110400     r->x[11] = 0;
110401     r->y[0] = 0;
110402     r->y[1] = 0;
110403     r->y[2] = 0;
110404     r->y[3] = 0;
110405     r->y[4] = 0;
110406     r->y[5] = 0;
110407     r->y[6] = 0;
110408     r->y[7] = 0;
110409     r->y[8] = 0;
110410     r->y[9] = 0;
110411     r->y[10] = 0;
110412     r->y[11] = 0;
110413     r->z[0] = 0;
110414     r->z[1] = 0;
110415     r->z[2] = 0;
110416     r->z[3] = 0;
110417     r->z[4] = 0;
110418     r->z[5] = 0;
110419     r->z[6] = 0;
110420     r->z[7] = 0;
110421     r->z[8] = 0;
110422     r->z[9] = 0;
110423     r->z[10] = 0;
110424     r->z[11] = 0;
110425     for (i = 1; i < 16; i++) {
110426         mask = 0 - (i == idx);
110427         r->x[0] |= mask & table[i].x[0];
110428         r->x[1] |= mask & table[i].x[1];
110429         r->x[2] |= mask & table[i].x[2];
110430         r->x[3] |= mask & table[i].x[3];
110431         r->x[4] |= mask & table[i].x[4];
110432         r->x[5] |= mask & table[i].x[5];
110433         r->x[6] |= mask & table[i].x[6];
110434         r->x[7] |= mask & table[i].x[7];
110435         r->x[8] |= mask & table[i].x[8];
110436         r->x[9] |= mask & table[i].x[9];
110437         r->x[10] |= mask & table[i].x[10];
110438         r->x[11] |= mask & table[i].x[11];
110439         r->y[0] |= mask & table[i].y[0];
110440         r->y[1] |= mask & table[i].y[1];
110441         r->y[2] |= mask & table[i].y[2];
110442         r->y[3] |= mask & table[i].y[3];
110443         r->y[4] |= mask & table[i].y[4];
110444         r->y[5] |= mask & table[i].y[5];
110445         r->y[6] |= mask & table[i].y[6];
110446         r->y[7] |= mask & table[i].y[7];
110447         r->y[8] |= mask & table[i].y[8];
110448         r->y[9] |= mask & table[i].y[9];
110449         r->y[10] |= mask & table[i].y[10];
110450         r->y[11] |= mask & table[i].y[11];
110451         r->z[0] |= mask & table[i].z[0];
110452         r->z[1] |= mask & table[i].z[1];
110453         r->z[2] |= mask & table[i].z[2];
110454         r->z[3] |= mask & table[i].z[3];
110455         r->z[4] |= mask & table[i].z[4];
110456         r->z[5] |= mask & table[i].z[5];
110457         r->z[6] |= mask & table[i].z[6];
110458         r->z[7] |= mask & table[i].z[7];
110459         r->z[8] |= mask & table[i].z[8];
110460         r->z[9] |= mask & table[i].z[9];
110461         r->z[10] |= mask & table[i].z[10];
110462         r->z[11] |= mask & table[i].z[11];
110463     }
110464 }
110465 #endif /* !WC_NO_CACHE_RESISTANT */
110466 /* Multiply the point by the scalar and return the result.
110467  * If map is true then convert result to affine coordinates.
110468  *
110469  * Fast implementation that generates a pre-computation table.
110470  * 4 bits of window (no sliding!).
110471  * Uses add and double for calculating table.
110472  * 384 doubles.
110473  * 108 adds.
110474  *
110475  * r     Resulting point.
110476  * g     Point to multiply.
110477  * k     Scalar to multiply by.
110478  * map   Indicates whether to convert result to affine.
110479  * ct    Constant time required.
110480  * heap  Heap to use for allocation.
110481  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
110482  */
sp_384_ecc_mulmod_fast_12(sp_point_384 * r,const sp_point_384 * g,const sp_digit * k,int map,int ct,void * heap)110483 static int sp_384_ecc_mulmod_fast_12(sp_point_384* r, const sp_point_384* g, const sp_digit* k,
110484         int map, int ct, void* heap)
110485 {
110486 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
110487     sp_point_384* t = NULL;
110488     sp_digit* tmp = NULL;
110489 #else
110490     sp_point_384 t[16 + 1];
110491     sp_digit tmp[2 * 12 * 6];
110492 #endif
110493     sp_point_384* rt = NULL;
110494 #ifndef WC_NO_CACHE_RESISTANT
110495 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
110496     sp_point_384* p = NULL;
110497 #else
110498     sp_point_384 p[1];
110499 #endif
110500 #endif /* !WC_NO_CACHE_RESISTANT */
110501     sp_digit n;
110502     int i;
110503     int c;
110504     int y;
110505     int err = MP_OKAY;
110506 
110507     /* Constant time used for cache attack resistance implementation. */
110508     (void)ct;
110509     (void)heap;
110510 
110511 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
110512     t = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * (16 + 1),
110513         heap, DYNAMIC_TYPE_ECC);
110514     if (t == NULL)
110515         err = MEMORY_E;
110516     #ifndef WC_NO_CACHE_RESISTANT
110517     if (err == MP_OKAY) {
110518         p = (sp_point_384*)XMALLOC(sizeof(sp_point_384),
110519             heap, DYNAMIC_TYPE_ECC);
110520         if (p == NULL)
110521             err = MEMORY_E;
110522     }
110523     #endif
110524     if (err == MP_OKAY) {
110525         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 12 * 6, heap,
110526                                 DYNAMIC_TYPE_ECC);
110527         if (tmp == NULL)
110528             err = MEMORY_E;
110529     }
110530 #endif
110531 
110532     if (err == MP_OKAY) {
110533         rt = t + 16;
110534 
110535         /* t[0] = {0, 0, 1} * norm */
110536         XMEMSET(&t[0], 0, sizeof(t[0]));
110537         t[0].infinity = 1;
110538         /* t[1] = {g->x, g->y, g->z} * norm */
110539         (void)sp_384_mod_mul_norm_12(t[1].x, g->x, p384_mod);
110540         (void)sp_384_mod_mul_norm_12(t[1].y, g->y, p384_mod);
110541         (void)sp_384_mod_mul_norm_12(t[1].z, g->z, p384_mod);
110542         t[1].infinity = 0;
110543         sp_384_proj_point_dbl_12(&t[ 2], &t[ 1], tmp);
110544         t[ 2].infinity = 0;
110545         sp_384_proj_point_add_12(&t[ 3], &t[ 2], &t[ 1], tmp);
110546         t[ 3].infinity = 0;
110547         sp_384_proj_point_dbl_12(&t[ 4], &t[ 2], tmp);
110548         t[ 4].infinity = 0;
110549         sp_384_proj_point_add_12(&t[ 5], &t[ 3], &t[ 2], tmp);
110550         t[ 5].infinity = 0;
110551         sp_384_proj_point_dbl_12(&t[ 6], &t[ 3], tmp);
110552         t[ 6].infinity = 0;
110553         sp_384_proj_point_add_12(&t[ 7], &t[ 4], &t[ 3], tmp);
110554         t[ 7].infinity = 0;
110555         sp_384_proj_point_dbl_12(&t[ 8], &t[ 4], tmp);
110556         t[ 8].infinity = 0;
110557         sp_384_proj_point_add_12(&t[ 9], &t[ 5], &t[ 4], tmp);
110558         t[ 9].infinity = 0;
110559         sp_384_proj_point_dbl_12(&t[10], &t[ 5], tmp);
110560         t[10].infinity = 0;
110561         sp_384_proj_point_add_12(&t[11], &t[ 6], &t[ 5], tmp);
110562         t[11].infinity = 0;
110563         sp_384_proj_point_dbl_12(&t[12], &t[ 6], tmp);
110564         t[12].infinity = 0;
110565         sp_384_proj_point_add_12(&t[13], &t[ 7], &t[ 6], tmp);
110566         t[13].infinity = 0;
110567         sp_384_proj_point_dbl_12(&t[14], &t[ 7], tmp);
110568         t[14].infinity = 0;
110569         sp_384_proj_point_add_12(&t[15], &t[ 8], &t[ 7], tmp);
110570         t[15].infinity = 0;
110571 
110572         i = 10;
110573         n = k[i+1] << 0;
110574         c = 28;
110575         y = (int)(n >> 28);
110576     #ifndef WC_NO_CACHE_RESISTANT
110577         if (ct) {
110578             sp_384_get_point_16_12(rt, t, y);
110579             rt->infinity = !y;
110580         }
110581         else
110582     #endif
110583         {
110584             XMEMCPY(rt, &t[y], sizeof(sp_point_384));
110585         }
110586         n <<= 4;
110587         for (; i>=0 || c>=4; ) {
110588             if (c < 4) {
110589                 n |= k[i--];
110590                 c += 32;
110591             }
110592             y = (n >> 28) & 0xf;
110593             n <<= 4;
110594             c -= 4;
110595 
110596             sp_384_proj_point_dbl_12(rt, rt, tmp);
110597             sp_384_proj_point_dbl_12(rt, rt, tmp);
110598             sp_384_proj_point_dbl_12(rt, rt, tmp);
110599             sp_384_proj_point_dbl_12(rt, rt, tmp);
110600 
110601     #ifndef WC_NO_CACHE_RESISTANT
110602             if (ct) {
110603                 sp_384_get_point_16_12(p, t, y);
110604                 p->infinity = !y;
110605                 sp_384_proj_point_add_12(rt, rt, p, tmp);
110606             }
110607             else
110608     #endif
110609             {
110610                 sp_384_proj_point_add_12(rt, rt, &t[y], tmp);
110611             }
110612         }
110613 
110614         if (map != 0) {
110615             sp_384_map_12(r, rt, tmp);
110616         }
110617         else {
110618             XMEMCPY(r, rt, sizeof(sp_point_384));
110619         }
110620     }
110621 
110622 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
110623     if (tmp != NULL)
110624 #endif
110625     {
110626         ForceZero(tmp, sizeof(sp_digit) * 2 * 12 * 6);
110627     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
110628         XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
110629     #endif
110630     }
110631 #ifndef WC_NO_CACHE_RESISTANT
110632     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
110633     if (p != NULL)
110634     #endif
110635         {
110636             ForceZero(p, sizeof(sp_point_384));
110637         #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
110638             XFREE(p, heap, DYNAMIC_TYPE_ECC);
110639         #endif
110640         }
110641 #endif /* !WC_NO_CACHE_RESISTANT */
110642 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
110643     if (t != NULL)
110644 #endif
110645     {
110646         ForceZero(t, sizeof(sp_point_384) * 17);
110647     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
110648         XFREE(t, heap, DYNAMIC_TYPE_ECC);
110649     #endif
110650     }
110651 
110652     return err;
110653 }
110654 
110655 #ifdef FP_ECC
110656 /* Double the Montgomery form projective point p a number of times.
110657  *
110658  * r  Result of repeated doubling of point.
110659  * p  Point to double.
110660  * n  Number of times to double
110661  * t  Temporary ordinate data.
110662  */
sp_384_proj_point_dbl_n_12(sp_point_384 * p,int n,sp_digit * t)110663 static void sp_384_proj_point_dbl_n_12(sp_point_384* p, int n,
110664     sp_digit* t)
110665 {
110666     sp_digit* w = t;
110667     sp_digit* a = t + 2*12;
110668     sp_digit* b = t + 4*12;
110669     sp_digit* t1 = t + 6*12;
110670     sp_digit* t2 = t + 8*12;
110671     sp_digit* x;
110672     sp_digit* y;
110673     sp_digit* z;
110674 
110675     x = p->x;
110676     y = p->y;
110677     z = p->z;
110678 
110679     /* Y = 2*Y */
110680     sp_384_mont_dbl_12(y, y, p384_mod);
110681     /* W = Z^4 */
110682     sp_384_mont_sqr_12(w, z, p384_mod, p384_mp_mod);
110683     sp_384_mont_sqr_12(w, w, p384_mod, p384_mp_mod);
110684 
110685 #ifndef WOLFSSL_SP_SMALL
110686     while (--n > 0)
110687 #else
110688     while (--n >= 0)
110689 #endif
110690     {
110691         /* A = 3*(X^2 - W) */
110692         sp_384_mont_sqr_12(t1, x, p384_mod, p384_mp_mod);
110693         sp_384_mont_sub_12(t1, t1, w, p384_mod);
110694         sp_384_mont_tpl_12(a, t1, p384_mod);
110695         /* B = X*Y^2 */
110696         sp_384_mont_sqr_12(t1, y, p384_mod, p384_mp_mod);
110697         sp_384_mont_mul_12(b, t1, x, p384_mod, p384_mp_mod);
110698         /* X = A^2 - 2B */
110699         sp_384_mont_sqr_12(x, a, p384_mod, p384_mp_mod);
110700         sp_384_mont_dbl_12(t2, b, p384_mod);
110701         sp_384_mont_sub_12(x, x, t2, p384_mod);
110702         /* Z = Z*Y */
110703         sp_384_mont_mul_12(z, z, y, p384_mod, p384_mp_mod);
110704         /* t2 = Y^4 */
110705         sp_384_mont_sqr_12(t1, t1, p384_mod, p384_mp_mod);
110706 #ifdef WOLFSSL_SP_SMALL
110707         if (n != 0)
110708 #endif
110709         {
110710             /* W = W*Y^4 */
110711             sp_384_mont_mul_12(w, w, t1, p384_mod, p384_mp_mod);
110712         }
110713         /* y = 2*A*(B - X) - Y^4 */
110714         sp_384_mont_sub_12(y, b, x, p384_mod);
110715         sp_384_mont_mul_12(y, y, a, p384_mod, p384_mp_mod);
110716         sp_384_mont_dbl_12(y, y, p384_mod);
110717         sp_384_mont_sub_12(y, y, t1, p384_mod);
110718     }
110719 #ifndef WOLFSSL_SP_SMALL
110720     /* A = 3*(X^2 - W) */
110721     sp_384_mont_sqr_12(t1, x, p384_mod, p384_mp_mod);
110722     sp_384_mont_sub_12(t1, t1, w, p384_mod);
110723     sp_384_mont_tpl_12(a, t1, p384_mod);
110724     /* B = X*Y^2 */
110725     sp_384_mont_sqr_12(t1, y, p384_mod, p384_mp_mod);
110726     sp_384_mont_mul_12(b, t1, x, p384_mod, p384_mp_mod);
110727     /* X = A^2 - 2B */
110728     sp_384_mont_sqr_12(x, a, p384_mod, p384_mp_mod);
110729     sp_384_mont_dbl_12(t2, b, p384_mod);
110730     sp_384_mont_sub_12(x, x, t2, p384_mod);
110731     /* Z = Z*Y */
110732     sp_384_mont_mul_12(z, z, y, p384_mod, p384_mp_mod);
110733     /* t2 = Y^4 */
110734     sp_384_mont_sqr_12(t1, t1, p384_mod, p384_mp_mod);
110735     /* y = 2*A*(B - X) - Y^4 */
110736     sp_384_mont_sub_12(y, b, x, p384_mod);
110737     sp_384_mont_mul_12(y, y, a, p384_mod, p384_mp_mod);
110738     sp_384_mont_dbl_12(y, y, p384_mod);
110739     sp_384_mont_sub_12(y, y, t1, p384_mod);
110740 #endif
110741     /* Y = Y/2 */
110742     sp_384_div2_12(y, y, p384_mod);
110743 }
110744 
110745 /* Convert the projective point to affine.
110746  * Ordinates are in Montgomery form.
110747  *
110748  * a  Point to convert.
110749  * t  Temporary data.
110750  */
sp_384_proj_to_affine_12(sp_point_384 * a,sp_digit * t)110751 static void sp_384_proj_to_affine_12(sp_point_384* a, sp_digit* t)
110752 {
110753     sp_digit* t1 = t;
110754     sp_digit* t2 = t + 2 * 12;
110755     sp_digit* tmp = t + 4 * 12;
110756 
110757     sp_384_mont_inv_12(t1, a->z, tmp);
110758 
110759     sp_384_mont_sqr_12(t2, t1, p384_mod, p384_mp_mod);
110760     sp_384_mont_mul_12(t1, t2, t1, p384_mod, p384_mp_mod);
110761 
110762     sp_384_mont_mul_12(a->x, a->x, t2, p384_mod, p384_mp_mod);
110763     sp_384_mont_mul_12(a->y, a->y, t1, p384_mod, p384_mp_mod);
110764     XMEMCPY(a->z, p384_norm_mod, sizeof(p384_norm_mod));
110765 }
110766 
110767 #endif /* FP_ECC */
110768 /* A table entry for pre-computed points. */
110769 typedef struct sp_table_entry_384 {
110770     sp_digit x[12];
110771     sp_digit y[12];
110772 } sp_table_entry_384;
110773 
110774 #ifdef FP_ECC
110775 #endif /* FP_ECC */
110776 /* Add two Montgomery form projective points. The second point has a q value of
110777  * one.
110778  * Only the first point can be the same pointer as the result point.
110779  *
110780  * r  Result of addition.
110781  * p  First point to add.
110782  * q  Second point to add.
110783  * t  Temporary ordinate data.
110784  */
sp_384_proj_point_add_qz1_12(sp_point_384 * r,const sp_point_384 * p,const sp_point_384 * q,sp_digit * t)110785 static void sp_384_proj_point_add_qz1_12(sp_point_384* r, const sp_point_384* p,
110786         const sp_point_384* q, sp_digit* t)
110787 {
110788     const sp_point_384* ap[2];
110789     sp_point_384* rp[2];
110790     sp_digit* t1 = t;
110791     sp_digit* t2 = t + 2*12;
110792     sp_digit* t3 = t + 4*12;
110793     sp_digit* t4 = t + 6*12;
110794     sp_digit* t5 = t + 8*12;
110795     sp_digit* x;
110796     sp_digit* y;
110797     sp_digit* z;
110798     int i;
110799 
110800     /* Check double */
110801     (void)sp_384_sub_12(t1, p384_mod, q->y);
110802     sp_384_norm_12(t1);
110803     if ((sp_384_cmp_equal_12(p->x, q->x) & sp_384_cmp_equal_12(p->z, q->z) &
110804         (sp_384_cmp_equal_12(p->y, q->y) | sp_384_cmp_equal_12(p->y, t1))) != 0) {
110805         sp_384_proj_point_dbl_12(r, p, t);
110806     }
110807     else {
110808         rp[0] = r;
110809 
110810         /*lint allow cast to different type of pointer*/
110811         rp[1] = (sp_point_384*)t; /*lint !e9087 !e740*/
110812         XMEMSET(rp[1], 0, sizeof(sp_point_384));
110813         x = rp[p->infinity | q->infinity]->x;
110814         y = rp[p->infinity | q->infinity]->y;
110815         z = rp[p->infinity | q->infinity]->z;
110816 
110817         ap[0] = p;
110818         ap[1] = q;
110819         for (i=0; i<12; i++) {
110820             r->x[i] = ap[p->infinity]->x[i];
110821         }
110822         for (i=0; i<12; i++) {
110823             r->y[i] = ap[p->infinity]->y[i];
110824         }
110825         for (i=0; i<12; i++) {
110826             r->z[i] = ap[p->infinity]->z[i];
110827         }
110828         r->infinity = ap[p->infinity]->infinity;
110829 
110830         /* U2 = X2*Z1^2 */
110831         sp_384_mont_sqr_12(t2, z, p384_mod, p384_mp_mod);
110832         sp_384_mont_mul_12(t4, t2, z, p384_mod, p384_mp_mod);
110833         sp_384_mont_mul_12(t2, t2, q->x, p384_mod, p384_mp_mod);
110834         /* S2 = Y2*Z1^3 */
110835         sp_384_mont_mul_12(t4, t4, q->y, p384_mod, p384_mp_mod);
110836         /* H = U2 - X1 */
110837         sp_384_mont_sub_12(t2, t2, x, p384_mod);
110838         /* R = S2 - Y1 */
110839         sp_384_mont_sub_12(t4, t4, y, p384_mod);
110840         /* Z3 = H*Z1 */
110841         sp_384_mont_mul_12(z, z, t2, p384_mod, p384_mp_mod);
110842         /* X3 = R^2 - H^3 - 2*X1*H^2 */
110843         sp_384_mont_sqr_12(t1, t4, p384_mod, p384_mp_mod);
110844         sp_384_mont_sqr_12(t5, t2, p384_mod, p384_mp_mod);
110845         sp_384_mont_mul_12(t3, x, t5, p384_mod, p384_mp_mod);
110846         sp_384_mont_mul_12(t5, t5, t2, p384_mod, p384_mp_mod);
110847         sp_384_mont_sub_12(x, t1, t5, p384_mod);
110848         sp_384_mont_dbl_12(t1, t3, p384_mod);
110849         sp_384_mont_sub_12(x, x, t1, p384_mod);
110850         /* Y3 = R*(X1*H^2 - X3) - Y1*H^3 */
110851         sp_384_mont_sub_12(t3, t3, x, p384_mod);
110852         sp_384_mont_mul_12(t3, t3, t4, p384_mod, p384_mp_mod);
110853         sp_384_mont_mul_12(t5, t5, y, p384_mod, p384_mp_mod);
110854         sp_384_mont_sub_12(y, t3, t5, p384_mod);
110855     }
110856 }
110857 
110858 #ifdef WOLFSSL_SP_SMALL
110859 #ifdef FP_ECC
110860 /* Generate the pre-computed table of points for the base point.
110861  *
110862  * width = 4
110863  * 16 entries
110864  * 96 bits between
110865  *
110866  * a      The base point.
110867  * table  Place to store generated point data.
110868  * tmp    Temporary data.
110869  * heap  Heap to use for allocation.
110870  */
sp_384_gen_stripe_table_12(const sp_point_384 * a,sp_table_entry_384 * table,sp_digit * tmp,void * heap)110871 static int sp_384_gen_stripe_table_12(const sp_point_384* a,
110872         sp_table_entry_384* table, sp_digit* tmp, void* heap)
110873 {
110874 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
110875     sp_point_384* t = NULL;
110876 #else
110877     sp_point_384 t[3];
110878 #endif
110879     sp_point_384* s1 = NULL;
110880     sp_point_384* s2 = NULL;
110881     int i;
110882     int j;
110883     int err = MP_OKAY;
110884 
110885     (void)heap;
110886 
110887 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
110888     t = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 3, heap,
110889                                      DYNAMIC_TYPE_ECC);
110890     if (t == NULL)
110891         err = MEMORY_E;
110892 #endif
110893 
110894     if (err == MP_OKAY) {
110895         s1 = t + 1;
110896         s2 = t + 2;
110897 
110898         err = sp_384_mod_mul_norm_12(t->x, a->x, p384_mod);
110899     }
110900     if (err == MP_OKAY) {
110901         err = sp_384_mod_mul_norm_12(t->y, a->y, p384_mod);
110902     }
110903     if (err == MP_OKAY) {
110904         err = sp_384_mod_mul_norm_12(t->z, a->z, p384_mod);
110905     }
110906     if (err == MP_OKAY) {
110907         t->infinity = 0;
110908         sp_384_proj_to_affine_12(t, tmp);
110909 
110910         XMEMCPY(s1->z, p384_norm_mod, sizeof(p384_norm_mod));
110911         s1->infinity = 0;
110912         XMEMCPY(s2->z, p384_norm_mod, sizeof(p384_norm_mod));
110913         s2->infinity = 0;
110914 
110915         /* table[0] = {0, 0, infinity} */
110916         XMEMSET(&table[0], 0, sizeof(sp_table_entry_384));
110917         /* table[1] = Affine version of 'a' in Montgomery form */
110918         XMEMCPY(table[1].x, t->x, sizeof(table->x));
110919         XMEMCPY(table[1].y, t->y, sizeof(table->y));
110920 
110921         for (i=1; i<4; i++) {
110922             sp_384_proj_point_dbl_n_12(t, 96, tmp);
110923             sp_384_proj_to_affine_12(t, tmp);
110924             XMEMCPY(table[1<<i].x, t->x, sizeof(table->x));
110925             XMEMCPY(table[1<<i].y, t->y, sizeof(table->y));
110926         }
110927 
110928         for (i=1; i<4; i++) {
110929             XMEMCPY(s1->x, table[1<<i].x, sizeof(table->x));
110930             XMEMCPY(s1->y, table[1<<i].y, sizeof(table->y));
110931             for (j=(1<<i)+1; j<(1<<(i+1)); j++) {
110932                 XMEMCPY(s2->x, table[j-(1<<i)].x, sizeof(table->x));
110933                 XMEMCPY(s2->y, table[j-(1<<i)].y, sizeof(table->y));
110934                 sp_384_proj_point_add_qz1_12(t, s1, s2, tmp);
110935                 sp_384_proj_to_affine_12(t, tmp);
110936                 XMEMCPY(table[j].x, t->x, sizeof(table->x));
110937                 XMEMCPY(table[j].y, t->y, sizeof(table->y));
110938             }
110939         }
110940     }
110941 
110942 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
110943     if (t != NULL)
110944         XFREE(t, heap, DYNAMIC_TYPE_ECC);
110945 #endif
110946 
110947     return err;
110948 }
110949 
110950 #endif /* FP_ECC */
110951 #ifndef WC_NO_CACHE_RESISTANT
110952 /* Touch each possible entry that could be being copied.
110953  *
110954  * r      Point to copy into.
110955  * table  Table - start of the entires to access
110956  * idx    Index of entry to retrieve.
110957  */
sp_384_get_entry_16_12(sp_point_384 * r,const sp_table_entry_384 * table,int idx)110958 static void sp_384_get_entry_16_12(sp_point_384* r,
110959     const sp_table_entry_384* table, int idx)
110960 {
110961     int i;
110962     sp_digit mask;
110963 
110964     r->x[0] = 0;
110965     r->x[1] = 0;
110966     r->x[2] = 0;
110967     r->x[3] = 0;
110968     r->x[4] = 0;
110969     r->x[5] = 0;
110970     r->x[6] = 0;
110971     r->x[7] = 0;
110972     r->x[8] = 0;
110973     r->x[9] = 0;
110974     r->x[10] = 0;
110975     r->x[11] = 0;
110976     r->y[0] = 0;
110977     r->y[1] = 0;
110978     r->y[2] = 0;
110979     r->y[3] = 0;
110980     r->y[4] = 0;
110981     r->y[5] = 0;
110982     r->y[6] = 0;
110983     r->y[7] = 0;
110984     r->y[8] = 0;
110985     r->y[9] = 0;
110986     r->y[10] = 0;
110987     r->y[11] = 0;
110988     for (i = 1; i < 16; i++) {
110989         mask = 0 - (i == idx);
110990         r->x[0] |= mask & table[i].x[0];
110991         r->x[1] |= mask & table[i].x[1];
110992         r->x[2] |= mask & table[i].x[2];
110993         r->x[3] |= mask & table[i].x[3];
110994         r->x[4] |= mask & table[i].x[4];
110995         r->x[5] |= mask & table[i].x[5];
110996         r->x[6] |= mask & table[i].x[6];
110997         r->x[7] |= mask & table[i].x[7];
110998         r->x[8] |= mask & table[i].x[8];
110999         r->x[9] |= mask & table[i].x[9];
111000         r->x[10] |= mask & table[i].x[10];
111001         r->x[11] |= mask & table[i].x[11];
111002         r->y[0] |= mask & table[i].y[0];
111003         r->y[1] |= mask & table[i].y[1];
111004         r->y[2] |= mask & table[i].y[2];
111005         r->y[3] |= mask & table[i].y[3];
111006         r->y[4] |= mask & table[i].y[4];
111007         r->y[5] |= mask & table[i].y[5];
111008         r->y[6] |= mask & table[i].y[6];
111009         r->y[7] |= mask & table[i].y[7];
111010         r->y[8] |= mask & table[i].y[8];
111011         r->y[9] |= mask & table[i].y[9];
111012         r->y[10] |= mask & table[i].y[10];
111013         r->y[11] |= mask & table[i].y[11];
111014     }
111015 }
111016 #endif /* !WC_NO_CACHE_RESISTANT */
111017 /* Multiply the point by the scalar and return the result.
111018  * If map is true then convert result to affine coordinates.
111019  *
111020  * Stripe implementation.
111021  * Pre-generated: 2^0, 2^96, ...
111022  * Pre-generated: products of all combinations of above.
111023  * 4 doubles and adds (with qz=1)
111024  *
111025  * r      Resulting point.
111026  * k      Scalar to multiply by.
111027  * table  Pre-computed table.
111028  * map    Indicates whether to convert result to affine.
111029  * ct     Constant time required.
111030  * heap   Heap to use for allocation.
111031  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
111032  */
sp_384_ecc_mulmod_stripe_12(sp_point_384 * r,const sp_point_384 * g,const sp_table_entry_384 * table,const sp_digit * k,int map,int ct,void * heap)111033 static int sp_384_ecc_mulmod_stripe_12(sp_point_384* r, const sp_point_384* g,
111034         const sp_table_entry_384* table, const sp_digit* k, int map,
111035         int ct, void* heap)
111036 {
111037 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
111038     sp_point_384* rt = NULL;
111039     sp_digit* t = NULL;
111040 #else
111041     sp_point_384 rt[2];
111042     sp_digit t[2 * 12 * 6];
111043 #endif
111044     sp_point_384* p = NULL;
111045     int i;
111046     int j;
111047     int y;
111048     int x;
111049     int err = MP_OKAY;
111050 
111051     (void)g;
111052     /* Constant time used for cache attack resistance implementation. */
111053     (void)ct;
111054     (void)heap;
111055 
111056 
111057 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
111058     rt = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap,
111059                                       DYNAMIC_TYPE_ECC);
111060     if (rt == NULL)
111061         err = MEMORY_E;
111062     if (err == MP_OKAY) {
111063         t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 12 * 6, heap,
111064                                DYNAMIC_TYPE_ECC);
111065         if (t == NULL)
111066             err = MEMORY_E;
111067     }
111068 #endif
111069 
111070     if (err == MP_OKAY) {
111071         p = rt + 1;
111072 
111073         XMEMCPY(p->z, p384_norm_mod, sizeof(p384_norm_mod));
111074         XMEMCPY(rt->z, p384_norm_mod, sizeof(p384_norm_mod));
111075 
111076         y = 0;
111077         x = 95;
111078         for (j=0; j<4; j++) {
111079             y |= (int)(((k[x / 32] >> (x % 32)) & 1) << j);
111080             x += 96;
111081         }
111082     #ifndef WC_NO_CACHE_RESISTANT
111083         if (ct) {
111084             sp_384_get_entry_16_12(rt, table, y);
111085         } else
111086     #endif
111087         {
111088             XMEMCPY(rt->x, table[y].x, sizeof(table[y].x));
111089             XMEMCPY(rt->y, table[y].y, sizeof(table[y].y));
111090         }
111091         rt->infinity = !y;
111092         for (i=94; i>=0; i--) {
111093             y = 0;
111094             x = i;
111095             for (j=0; j<4; j++) {
111096                 y |= (int)(((k[x / 32] >> (x % 32)) & 1) << j);
111097                 x += 96;
111098             }
111099 
111100             sp_384_proj_point_dbl_12(rt, rt, t);
111101         #ifndef WC_NO_CACHE_RESISTANT
111102             if (ct) {
111103                 sp_384_get_entry_16_12(p, table, y);
111104             }
111105             else
111106         #endif
111107             {
111108                 XMEMCPY(p->x, table[y].x, sizeof(table[y].x));
111109                 XMEMCPY(p->y, table[y].y, sizeof(table[y].y));
111110             }
111111             p->infinity = !y;
111112             sp_384_proj_point_add_qz1_12(rt, rt, p, t);
111113         }
111114 
111115         if (map != 0) {
111116             sp_384_map_12(r, rt, t);
111117         }
111118         else {
111119             XMEMCPY(r, rt, sizeof(sp_point_384));
111120         }
111121     }
111122 
111123 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
111124     if (t != NULL)
111125         XFREE(t, heap, DYNAMIC_TYPE_ECC);
111126     if (rt != NULL)
111127         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
111128 #endif
111129 
111130     return err;
111131 }
111132 
111133 #ifdef FP_ECC
111134 #ifndef FP_ENTRIES
111135     #define FP_ENTRIES 16
111136 #endif
111137 
111138 /* Cache entry - holds precomputation tables for a point. */
111139 typedef struct sp_cache_384_t {
111140     /* X ordinate of point that table was generated from. */
111141     sp_digit x[12];
111142     /* Y ordinate of point that table was generated from. */
111143     sp_digit y[12];
111144     /* Precomputation table for point. */
111145     sp_table_entry_384 table[16];
111146     /* Count of entries in table. */
111147     uint32_t cnt;
111148     /* Point and table set in entry. */
111149     int set;
111150 } sp_cache_384_t;
111151 
111152 /* Cache of tables. */
111153 static THREAD_LS_T sp_cache_384_t sp_cache_384[FP_ENTRIES];
111154 /* Index of last entry in cache. */
111155 static THREAD_LS_T int sp_cache_384_last = -1;
111156 /* Cache has been initialized. */
111157 static THREAD_LS_T int sp_cache_384_inited = 0;
111158 
111159 #ifndef HAVE_THREAD_LS
111160     static volatile int initCacheMutex_384 = 0;
111161     static wolfSSL_Mutex sp_cache_384_lock;
111162 #endif
111163 
111164 /* Get the cache entry for the point.
111165  *
111166  * g      [in]   Point scalar multipling.
111167  * cache  [out]  Cache table to use.
111168  */
sp_ecc_get_cache_384(const sp_point_384 * g,sp_cache_384_t ** cache)111169 static void sp_ecc_get_cache_384(const sp_point_384* g, sp_cache_384_t** cache)
111170 {
111171     int i;
111172     int j;
111173     uint32_t least;
111174 
111175     if (sp_cache_384_inited == 0) {
111176         for (i=0; i<FP_ENTRIES; i++) {
111177             sp_cache_384[i].set = 0;
111178         }
111179         sp_cache_384_inited = 1;
111180     }
111181 
111182     /* Compare point with those in cache. */
111183     for (i=0; i<FP_ENTRIES; i++) {
111184         if (!sp_cache_384[i].set)
111185             continue;
111186 
111187         if (sp_384_cmp_equal_12(g->x, sp_cache_384[i].x) &
111188                            sp_384_cmp_equal_12(g->y, sp_cache_384[i].y)) {
111189             sp_cache_384[i].cnt++;
111190             break;
111191         }
111192     }
111193 
111194     /* No match. */
111195     if (i == FP_ENTRIES) {
111196         /* Find empty entry. */
111197         i = (sp_cache_384_last + 1) % FP_ENTRIES;
111198         for (; i != sp_cache_384_last; i=(i+1)%FP_ENTRIES) {
111199             if (!sp_cache_384[i].set) {
111200                 break;
111201             }
111202         }
111203 
111204         /* Evict least used. */
111205         if (i == sp_cache_384_last) {
111206             least = sp_cache_384[0].cnt;
111207             for (j=1; j<FP_ENTRIES; j++) {
111208                 if (sp_cache_384[j].cnt < least) {
111209                     i = j;
111210                     least = sp_cache_384[i].cnt;
111211                 }
111212             }
111213         }
111214 
111215         XMEMCPY(sp_cache_384[i].x, g->x, sizeof(sp_cache_384[i].x));
111216         XMEMCPY(sp_cache_384[i].y, g->y, sizeof(sp_cache_384[i].y));
111217         sp_cache_384[i].set = 1;
111218         sp_cache_384[i].cnt = 1;
111219     }
111220 
111221     *cache = &sp_cache_384[i];
111222     sp_cache_384_last = i;
111223 }
111224 #endif /* FP_ECC */
111225 
111226 /* Multiply the base point of P384 by the scalar and return the result.
111227  * If map is true then convert result to affine coordinates.
111228  *
111229  * r     Resulting point.
111230  * g     Point to multiply.
111231  * k     Scalar to multiply by.
111232  * map   Indicates whether to convert result to affine.
111233  * ct    Constant time required.
111234  * heap  Heap to use for allocation.
111235  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
111236  */
sp_384_ecc_mulmod_12(sp_point_384 * r,const sp_point_384 * g,const sp_digit * k,int map,int ct,void * heap)111237 static int sp_384_ecc_mulmod_12(sp_point_384* r, const sp_point_384* g, const sp_digit* k,
111238         int map, int ct, void* heap)
111239 {
111240 #ifndef FP_ECC
111241     return sp_384_ecc_mulmod_fast_12(r, g, k, map, ct, heap);
111242 #else
111243     sp_digit tmp[2 * 12 * 7];
111244     sp_cache_384_t* cache;
111245     int err = MP_OKAY;
111246 
111247 #ifndef HAVE_THREAD_LS
111248     if (initCacheMutex_384 == 0) {
111249          wc_InitMutex(&sp_cache_384_lock);
111250          initCacheMutex_384 = 1;
111251     }
111252     if (wc_LockMutex(&sp_cache_384_lock) != 0)
111253        err = BAD_MUTEX_E;
111254 #endif /* HAVE_THREAD_LS */
111255 
111256     if (err == MP_OKAY) {
111257         sp_ecc_get_cache_384(g, &cache);
111258         if (cache->cnt == 2)
111259             sp_384_gen_stripe_table_12(g, cache->table, tmp, heap);
111260 
111261 #ifndef HAVE_THREAD_LS
111262         wc_UnLockMutex(&sp_cache_384_lock);
111263 #endif /* HAVE_THREAD_LS */
111264 
111265         if (cache->cnt < 2) {
111266             err = sp_384_ecc_mulmod_fast_12(r, g, k, map, ct, heap);
111267         }
111268         else {
111269             err = sp_384_ecc_mulmod_stripe_12(r, g, cache->table, k,
111270                     map, ct, heap);
111271         }
111272     }
111273 
111274     return err;
111275 #endif
111276 }
111277 
111278 #else
111279 #ifdef FP_ECC
111280 /* Generate the pre-computed table of points for the base point.
111281  *
111282  * width = 8
111283  * 256 entries
111284  * 48 bits between
111285  *
111286  * a      The base point.
111287  * table  Place to store generated point data.
111288  * tmp    Temporary data.
111289  * heap  Heap to use for allocation.
111290  */
sp_384_gen_stripe_table_12(const sp_point_384 * a,sp_table_entry_384 * table,sp_digit * tmp,void * heap)111291 static int sp_384_gen_stripe_table_12(const sp_point_384* a,
111292         sp_table_entry_384* table, sp_digit* tmp, void* heap)
111293 {
111294 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
111295     sp_point_384* t = NULL;
111296 #else
111297     sp_point_384 t[3];
111298 #endif
111299     sp_point_384* s1 = NULL;
111300     sp_point_384* s2 = NULL;
111301     int i;
111302     int j;
111303     int err = MP_OKAY;
111304 
111305     (void)heap;
111306 
111307 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
111308     t = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 3, heap,
111309                                      DYNAMIC_TYPE_ECC);
111310     if (t == NULL)
111311         err = MEMORY_E;
111312 #endif
111313 
111314     if (err == MP_OKAY) {
111315         s1 = t + 1;
111316         s2 = t + 2;
111317 
111318         err = sp_384_mod_mul_norm_12(t->x, a->x, p384_mod);
111319     }
111320     if (err == MP_OKAY) {
111321         err = sp_384_mod_mul_norm_12(t->y, a->y, p384_mod);
111322     }
111323     if (err == MP_OKAY) {
111324         err = sp_384_mod_mul_norm_12(t->z, a->z, p384_mod);
111325     }
111326     if (err == MP_OKAY) {
111327         t->infinity = 0;
111328         sp_384_proj_to_affine_12(t, tmp);
111329 
111330         XMEMCPY(s1->z, p384_norm_mod, sizeof(p384_norm_mod));
111331         s1->infinity = 0;
111332         XMEMCPY(s2->z, p384_norm_mod, sizeof(p384_norm_mod));
111333         s2->infinity = 0;
111334 
111335         /* table[0] = {0, 0, infinity} */
111336         XMEMSET(&table[0], 0, sizeof(sp_table_entry_384));
111337         /* table[1] = Affine version of 'a' in Montgomery form */
111338         XMEMCPY(table[1].x, t->x, sizeof(table->x));
111339         XMEMCPY(table[1].y, t->y, sizeof(table->y));
111340 
111341         for (i=1; i<8; i++) {
111342             sp_384_proj_point_dbl_n_12(t, 48, tmp);
111343             sp_384_proj_to_affine_12(t, tmp);
111344             XMEMCPY(table[1<<i].x, t->x, sizeof(table->x));
111345             XMEMCPY(table[1<<i].y, t->y, sizeof(table->y));
111346         }
111347 
111348         for (i=1; i<8; i++) {
111349             XMEMCPY(s1->x, table[1<<i].x, sizeof(table->x));
111350             XMEMCPY(s1->y, table[1<<i].y, sizeof(table->y));
111351             for (j=(1<<i)+1; j<(1<<(i+1)); j++) {
111352                 XMEMCPY(s2->x, table[j-(1<<i)].x, sizeof(table->x));
111353                 XMEMCPY(s2->y, table[j-(1<<i)].y, sizeof(table->y));
111354                 sp_384_proj_point_add_qz1_12(t, s1, s2, tmp);
111355                 sp_384_proj_to_affine_12(t, tmp);
111356                 XMEMCPY(table[j].x, t->x, sizeof(table->x));
111357                 XMEMCPY(table[j].y, t->y, sizeof(table->y));
111358             }
111359         }
111360     }
111361 
111362 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
111363     if (t != NULL)
111364         XFREE(t, heap, DYNAMIC_TYPE_ECC);
111365 #endif
111366 
111367     return err;
111368 }
111369 
111370 #endif /* FP_ECC */
111371 #ifndef WC_NO_CACHE_RESISTANT
111372 /* Touch each possible entry that could be being copied.
111373  *
111374  * r      Point to copy into.
111375  * table  Table - start of the entires to access
111376  * idx    Index of entry to retrieve.
111377  */
sp_384_get_entry_256_12(sp_point_384 * r,const sp_table_entry_384 * table,int idx)111378 static void sp_384_get_entry_256_12(sp_point_384* r,
111379     const sp_table_entry_384* table, int idx)
111380 {
111381     int i;
111382     sp_digit mask;
111383 
111384     r->x[0] = 0;
111385     r->x[1] = 0;
111386     r->x[2] = 0;
111387     r->x[3] = 0;
111388     r->x[4] = 0;
111389     r->x[5] = 0;
111390     r->x[6] = 0;
111391     r->x[7] = 0;
111392     r->x[8] = 0;
111393     r->x[9] = 0;
111394     r->x[10] = 0;
111395     r->x[11] = 0;
111396     r->y[0] = 0;
111397     r->y[1] = 0;
111398     r->y[2] = 0;
111399     r->y[3] = 0;
111400     r->y[4] = 0;
111401     r->y[5] = 0;
111402     r->y[6] = 0;
111403     r->y[7] = 0;
111404     r->y[8] = 0;
111405     r->y[9] = 0;
111406     r->y[10] = 0;
111407     r->y[11] = 0;
111408     for (i = 1; i < 256; i++) {
111409         mask = 0 - (i == idx);
111410         r->x[0] |= mask & table[i].x[0];
111411         r->x[1] |= mask & table[i].x[1];
111412         r->x[2] |= mask & table[i].x[2];
111413         r->x[3] |= mask & table[i].x[3];
111414         r->x[4] |= mask & table[i].x[4];
111415         r->x[5] |= mask & table[i].x[5];
111416         r->x[6] |= mask & table[i].x[6];
111417         r->x[7] |= mask & table[i].x[7];
111418         r->x[8] |= mask & table[i].x[8];
111419         r->x[9] |= mask & table[i].x[9];
111420         r->x[10] |= mask & table[i].x[10];
111421         r->x[11] |= mask & table[i].x[11];
111422         r->y[0] |= mask & table[i].y[0];
111423         r->y[1] |= mask & table[i].y[1];
111424         r->y[2] |= mask & table[i].y[2];
111425         r->y[3] |= mask & table[i].y[3];
111426         r->y[4] |= mask & table[i].y[4];
111427         r->y[5] |= mask & table[i].y[5];
111428         r->y[6] |= mask & table[i].y[6];
111429         r->y[7] |= mask & table[i].y[7];
111430         r->y[8] |= mask & table[i].y[8];
111431         r->y[9] |= mask & table[i].y[9];
111432         r->y[10] |= mask & table[i].y[10];
111433         r->y[11] |= mask & table[i].y[11];
111434     }
111435 }
111436 #endif /* !WC_NO_CACHE_RESISTANT */
111437 /* Multiply the point by the scalar and return the result.
111438  * If map is true then convert result to affine coordinates.
111439  *
111440  * Stripe implementation.
111441  * Pre-generated: 2^0, 2^48, ...
111442  * Pre-generated: products of all combinations of above.
111443  * 8 doubles and adds (with qz=1)
111444  *
111445  * r      Resulting point.
111446  * k      Scalar to multiply by.
111447  * table  Pre-computed table.
111448  * map    Indicates whether to convert result to affine.
111449  * ct     Constant time required.
111450  * heap   Heap to use for allocation.
111451  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
111452  */
sp_384_ecc_mulmod_stripe_12(sp_point_384 * r,const sp_point_384 * g,const sp_table_entry_384 * table,const sp_digit * k,int map,int ct,void * heap)111453 static int sp_384_ecc_mulmod_stripe_12(sp_point_384* r, const sp_point_384* g,
111454         const sp_table_entry_384* table, const sp_digit* k, int map,
111455         int ct, void* heap)
111456 {
111457 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
111458     sp_point_384* rt = NULL;
111459     sp_digit* t = NULL;
111460 #else
111461     sp_point_384 rt[2];
111462     sp_digit t[2 * 12 * 6];
111463 #endif
111464     sp_point_384* p = NULL;
111465     int i;
111466     int j;
111467     int y;
111468     int x;
111469     int err = MP_OKAY;
111470 
111471     (void)g;
111472     /* Constant time used for cache attack resistance implementation. */
111473     (void)ct;
111474     (void)heap;
111475 
111476 
111477 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
111478     rt = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap,
111479                                       DYNAMIC_TYPE_ECC);
111480     if (rt == NULL)
111481         err = MEMORY_E;
111482     if (err == MP_OKAY) {
111483         t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 12 * 6, heap,
111484                                DYNAMIC_TYPE_ECC);
111485         if (t == NULL)
111486             err = MEMORY_E;
111487     }
111488 #endif
111489 
111490     if (err == MP_OKAY) {
111491         p = rt + 1;
111492 
111493         XMEMCPY(p->z, p384_norm_mod, sizeof(p384_norm_mod));
111494         XMEMCPY(rt->z, p384_norm_mod, sizeof(p384_norm_mod));
111495 
111496         y = 0;
111497         x = 47;
111498         for (j=0; j<8; j++) {
111499             y |= (int)(((k[x / 32] >> (x % 32)) & 1) << j);
111500             x += 48;
111501         }
111502     #ifndef WC_NO_CACHE_RESISTANT
111503         if (ct) {
111504             sp_384_get_entry_256_12(rt, table, y);
111505         } else
111506     #endif
111507         {
111508             XMEMCPY(rt->x, table[y].x, sizeof(table[y].x));
111509             XMEMCPY(rt->y, table[y].y, sizeof(table[y].y));
111510         }
111511         rt->infinity = !y;
111512         for (i=46; i>=0; i--) {
111513             y = 0;
111514             x = i;
111515             for (j=0; j<8; j++) {
111516                 y |= (int)(((k[x / 32] >> (x % 32)) & 1) << j);
111517                 x += 48;
111518             }
111519 
111520             sp_384_proj_point_dbl_12(rt, rt, t);
111521         #ifndef WC_NO_CACHE_RESISTANT
111522             if (ct) {
111523                 sp_384_get_entry_256_12(p, table, y);
111524             }
111525             else
111526         #endif
111527             {
111528                 XMEMCPY(p->x, table[y].x, sizeof(table[y].x));
111529                 XMEMCPY(p->y, table[y].y, sizeof(table[y].y));
111530             }
111531             p->infinity = !y;
111532             sp_384_proj_point_add_qz1_12(rt, rt, p, t);
111533         }
111534 
111535         if (map != 0) {
111536             sp_384_map_12(r, rt, t);
111537         }
111538         else {
111539             XMEMCPY(r, rt, sizeof(sp_point_384));
111540         }
111541     }
111542 
111543 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
111544     if (t != NULL)
111545         XFREE(t, heap, DYNAMIC_TYPE_ECC);
111546     if (rt != NULL)
111547         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
111548 #endif
111549 
111550     return err;
111551 }
111552 
111553 #ifdef FP_ECC
111554 #ifndef FP_ENTRIES
111555     #define FP_ENTRIES 16
111556 #endif
111557 
111558 /* Cache entry - holds precomputation tables for a point. */
111559 typedef struct sp_cache_384_t {
111560     /* X ordinate of point that table was generated from. */
111561     sp_digit x[12];
111562     /* Y ordinate of point that table was generated from. */
111563     sp_digit y[12];
111564     /* Precomputation table for point. */
111565     sp_table_entry_384 table[256];
111566     /* Count of entries in table. */
111567     uint32_t cnt;
111568     /* Point and table set in entry. */
111569     int set;
111570 } sp_cache_384_t;
111571 
111572 /* Cache of tables. */
111573 static THREAD_LS_T sp_cache_384_t sp_cache_384[FP_ENTRIES];
111574 /* Index of last entry in cache. */
111575 static THREAD_LS_T int sp_cache_384_last = -1;
111576 /* Cache has been initialized. */
111577 static THREAD_LS_T int sp_cache_384_inited = 0;
111578 
111579 #ifndef HAVE_THREAD_LS
111580     static volatile int initCacheMutex_384 = 0;
111581     static wolfSSL_Mutex sp_cache_384_lock;
111582 #endif
111583 
111584 /* Get the cache entry for the point.
111585  *
111586  * g      [in]   Point scalar multipling.
111587  * cache  [out]  Cache table to use.
111588  */
sp_ecc_get_cache_384(const sp_point_384 * g,sp_cache_384_t ** cache)111589 static void sp_ecc_get_cache_384(const sp_point_384* g, sp_cache_384_t** cache)
111590 {
111591     int i;
111592     int j;
111593     uint32_t least;
111594 
111595     if (sp_cache_384_inited == 0) {
111596         for (i=0; i<FP_ENTRIES; i++) {
111597             sp_cache_384[i].set = 0;
111598         }
111599         sp_cache_384_inited = 1;
111600     }
111601 
111602     /* Compare point with those in cache. */
111603     for (i=0; i<FP_ENTRIES; i++) {
111604         if (!sp_cache_384[i].set)
111605             continue;
111606 
111607         if (sp_384_cmp_equal_12(g->x, sp_cache_384[i].x) &
111608                            sp_384_cmp_equal_12(g->y, sp_cache_384[i].y)) {
111609             sp_cache_384[i].cnt++;
111610             break;
111611         }
111612     }
111613 
111614     /* No match. */
111615     if (i == FP_ENTRIES) {
111616         /* Find empty entry. */
111617         i = (sp_cache_384_last + 1) % FP_ENTRIES;
111618         for (; i != sp_cache_384_last; i=(i+1)%FP_ENTRIES) {
111619             if (!sp_cache_384[i].set) {
111620                 break;
111621             }
111622         }
111623 
111624         /* Evict least used. */
111625         if (i == sp_cache_384_last) {
111626             least = sp_cache_384[0].cnt;
111627             for (j=1; j<FP_ENTRIES; j++) {
111628                 if (sp_cache_384[j].cnt < least) {
111629                     i = j;
111630                     least = sp_cache_384[i].cnt;
111631                 }
111632             }
111633         }
111634 
111635         XMEMCPY(sp_cache_384[i].x, g->x, sizeof(sp_cache_384[i].x));
111636         XMEMCPY(sp_cache_384[i].y, g->y, sizeof(sp_cache_384[i].y));
111637         sp_cache_384[i].set = 1;
111638         sp_cache_384[i].cnt = 1;
111639     }
111640 
111641     *cache = &sp_cache_384[i];
111642     sp_cache_384_last = i;
111643 }
111644 #endif /* FP_ECC */
111645 
111646 /* Multiply the base point of P384 by the scalar and return the result.
111647  * If map is true then convert result to affine coordinates.
111648  *
111649  * r     Resulting point.
111650  * g     Point to multiply.
111651  * k     Scalar to multiply by.
111652  * map   Indicates whether to convert result to affine.
111653  * ct    Constant time required.
111654  * heap  Heap to use for allocation.
111655  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
111656  */
sp_384_ecc_mulmod_12(sp_point_384 * r,const sp_point_384 * g,const sp_digit * k,int map,int ct,void * heap)111657 static int sp_384_ecc_mulmod_12(sp_point_384* r, const sp_point_384* g, const sp_digit* k,
111658         int map, int ct, void* heap)
111659 {
111660 #ifndef FP_ECC
111661     return sp_384_ecc_mulmod_fast_12(r, g, k, map, ct, heap);
111662 #else
111663     sp_digit tmp[2 * 12 * 7];
111664     sp_cache_384_t* cache;
111665     int err = MP_OKAY;
111666 
111667 #ifndef HAVE_THREAD_LS
111668     if (initCacheMutex_384 == 0) {
111669          wc_InitMutex(&sp_cache_384_lock);
111670          initCacheMutex_384 = 1;
111671     }
111672     if (wc_LockMutex(&sp_cache_384_lock) != 0)
111673        err = BAD_MUTEX_E;
111674 #endif /* HAVE_THREAD_LS */
111675 
111676     if (err == MP_OKAY) {
111677         sp_ecc_get_cache_384(g, &cache);
111678         if (cache->cnt == 2)
111679             sp_384_gen_stripe_table_12(g, cache->table, tmp, heap);
111680 
111681 #ifndef HAVE_THREAD_LS
111682         wc_UnLockMutex(&sp_cache_384_lock);
111683 #endif /* HAVE_THREAD_LS */
111684 
111685         if (cache->cnt < 2) {
111686             err = sp_384_ecc_mulmod_fast_12(r, g, k, map, ct, heap);
111687         }
111688         else {
111689             err = sp_384_ecc_mulmod_stripe_12(r, g, cache->table, k,
111690                     map, ct, heap);
111691         }
111692     }
111693 
111694     return err;
111695 #endif
111696 }
111697 
111698 #endif /* WOLFSSL_SP_SMALL */
111699 /* Multiply the point by the scalar and return the result.
111700  * If map is true then convert result to affine coordinates.
111701  *
111702  * km    Scalar to multiply by.
111703  * p     Point to multiply.
111704  * r     Resulting point.
111705  * map   Indicates whether to convert result to affine.
111706  * heap  Heap to use for allocation.
111707  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
111708  */
sp_ecc_mulmod_384(const mp_int * km,const ecc_point * gm,ecc_point * r,int map,void * heap)111709 int sp_ecc_mulmod_384(const mp_int* km, const ecc_point* gm, ecc_point* r,
111710         int map, void* heap)
111711 {
111712 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
111713     sp_point_384* point = NULL;
111714     sp_digit* k = NULL;
111715 #else
111716     sp_point_384 point[1];
111717     sp_digit k[12];
111718 #endif
111719     int err = MP_OKAY;
111720 
111721 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
111722     point = (sp_point_384*)XMALLOC(sizeof(sp_point_384), heap,
111723                                          DYNAMIC_TYPE_ECC);
111724     if (point == NULL)
111725         err = MEMORY_E;
111726     if (err == MP_OKAY) {
111727         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 12, heap,
111728                                DYNAMIC_TYPE_ECC);
111729         if (k == NULL)
111730             err = MEMORY_E;
111731     }
111732 #endif
111733 
111734     if (err == MP_OKAY) {
111735         sp_384_from_mp(k, 12, km);
111736         sp_384_point_from_ecc_point_12(point, gm);
111737 
111738             err = sp_384_ecc_mulmod_12(point, point, k, map, 1, heap);
111739     }
111740     if (err == MP_OKAY) {
111741         err = sp_384_point_to_ecc_point_12(point, r);
111742     }
111743 
111744 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
111745     if (k != NULL)
111746         XFREE(k, heap, DYNAMIC_TYPE_ECC);
111747     if (point != NULL)
111748         XFREE(point, heap, DYNAMIC_TYPE_ECC);
111749 #endif
111750 
111751     return err;
111752 }
111753 
111754 /* Multiply the point by the scalar, add point a and return the result.
111755  * If map is true then convert result to affine coordinates.
111756  *
111757  * km      Scalar to multiply by.
111758  * p       Point to multiply.
111759  * am      Point to add to scalar mulitply result.
111760  * inMont  Point to add is in montgomery form.
111761  * r       Resulting point.
111762  * map     Indicates whether to convert result to affine.
111763  * heap    Heap to use for allocation.
111764  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
111765  */
sp_ecc_mulmod_add_384(const mp_int * km,const ecc_point * gm,const ecc_point * am,int inMont,ecc_point * r,int map,void * heap)111766 int sp_ecc_mulmod_add_384(const mp_int* km, const ecc_point* gm,
111767     const ecc_point* am, int inMont, ecc_point* r, int map, void* heap)
111768 {
111769 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
111770     sp_point_384* point = NULL;
111771     sp_digit* k = NULL;
111772 #else
111773     sp_point_384 point[2];
111774     sp_digit k[12 + 12 * 2 * 6];
111775 #endif
111776     sp_point_384* addP = NULL;
111777     sp_digit* tmp = NULL;
111778     int err = MP_OKAY;
111779 
111780 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
111781     point = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap,
111782                                          DYNAMIC_TYPE_ECC);
111783     if (point == NULL)
111784         err = MEMORY_E;
111785     if (err == MP_OKAY) {
111786         k = (sp_digit*)XMALLOC(
111787             sizeof(sp_digit) * (12 + 12 * 2 * 6), heap,
111788             DYNAMIC_TYPE_ECC);
111789         if (k == NULL)
111790             err = MEMORY_E;
111791     }
111792 #endif
111793 
111794     if (err == MP_OKAY) {
111795         addP = point + 1;
111796         tmp = k + 12;
111797 
111798         sp_384_from_mp(k, 12, km);
111799         sp_384_point_from_ecc_point_12(point, gm);
111800         sp_384_point_from_ecc_point_12(addP, am);
111801     }
111802     if ((err == MP_OKAY) && (!inMont)) {
111803         err = sp_384_mod_mul_norm_12(addP->x, addP->x, p384_mod);
111804     }
111805     if ((err == MP_OKAY) && (!inMont)) {
111806         err = sp_384_mod_mul_norm_12(addP->y, addP->y, p384_mod);
111807     }
111808     if ((err == MP_OKAY) && (!inMont)) {
111809         err = sp_384_mod_mul_norm_12(addP->z, addP->z, p384_mod);
111810     }
111811     if (err == MP_OKAY) {
111812             err = sp_384_ecc_mulmod_12(point, point, k, 0, 0, heap);
111813     }
111814     if (err == MP_OKAY) {
111815             sp_384_proj_point_add_12(point, point, addP, tmp);
111816 
111817         if (map) {
111818                 sp_384_map_12(point, point, tmp);
111819         }
111820 
111821         err = sp_384_point_to_ecc_point_12(point, r);
111822     }
111823 
111824 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
111825     if (k != NULL)
111826         XFREE(k, heap, DYNAMIC_TYPE_ECC);
111827     if (point != NULL)
111828         XFREE(point, heap, DYNAMIC_TYPE_ECC);
111829 #endif
111830 
111831     return err;
111832 }
111833 
111834 #ifdef WOLFSSL_SP_SMALL
111835 /* Striping precomputation table.
111836  * 4 points combined into a table of 16 points.
111837  * Distance of 96 between points.
111838  */
111839 static const sp_table_entry_384 p384_table[16] = {
111840     /* 0 */
111841     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
111842       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
111843     /* 1 */
111844     { { 0x49c0b528,0x3dd07566,0xa0d6ce38,0x20e378e2,0x541b4d6e,0x879c3afc,
111845         0x59a30eff,0x64548684,0x614ede2b,0x812ff723,0x299e1513,0x4d3aadc2 },
111846       { 0x4b03a4fe,0x23043dad,0x7bb4a9ac,0xa1bfa8bf,0x2e83b050,0x8bade756,
111847         0x68f4ffd9,0xc6c35219,0x3969a840,0xdd800226,0x5a15c5e9,0x2b78abc2 } },
111848     /* 2 */
111849     { { 0xf26feef9,0x24480c57,0x3a0e1240,0xc31a2694,0x273e2bc7,0x735002c3,
111850         0x3ef1ed4c,0x8c42e9c5,0x7f4948e8,0x028babf6,0x8a978632,0x6a502f43 },
111851       { 0xb74536fe,0xf5f13a46,0xd8a9f0eb,0x1d218bab,0x37232768,0x30f36bcc,
111852         0x576e8c18,0xc5317b31,0x9bbcb766,0xef1d57a6,0xb3e3d4dc,0x917c4930 } },
111853     /* 3 */
111854     { { 0xe349ddd0,0x11426e2e,0x9b2fc250,0x9f117ef9,0xec0174a6,0xff36b480,
111855         0x18458466,0x4f4bde76,0x05806049,0x2f2edb6d,0x19dfca92,0x8adc75d1 },
111856       { 0xb7d5a7ce,0xa619d097,0xa34411e9,0x874275e5,0x0da4b4ef,0x5403e047,
111857         0x77901d8f,0x2ebaafd9,0xa747170f,0x5e63ebce,0x7f9d8036,0x12a36944 } },
111858     /* 4 */
111859     { { 0x2f9fbe67,0x378205de,0x7f728e44,0xc4afcb83,0x682e00f1,0xdbcec06c,
111860         0x114d5423,0xf2a145c3,0x7a52463e,0xa01d9874,0x7d717b0a,0xfc0935b1 },
111861       { 0xd4d01f95,0x9653bc4f,0x9560ad34,0x9aa83ea8,0xaf8e3f3f,0xf77943dc,
111862         0xe86fe16e,0x70774a10,0xbf9ffdcf,0x6b62e6f1,0x588745c9,0x8a72f39e } },
111863     /* 5 */
111864     { { 0x2341c342,0x73ade4da,0xea704422,0xdd326e54,0x3741cef3,0x336c7d98,
111865         0x59e61549,0x1eafa00d,0xbd9a3efd,0xcd3ed892,0xc5c6c7e4,0x03faf26c },
111866       { 0x3045f8ac,0x087e2fcf,0x174f1e73,0x14a65532,0xfe0af9a7,0x2cf84f28,
111867         0x2cdc935b,0xddfd7a84,0x6929c895,0x4c0f117b,0x4c8bcfcc,0x356572d6 } },
111868     /* 6 */
111869     { { 0x3f3b236f,0xfab08607,0x81e221da,0x19e9d41d,0x3927b428,0xf3f6571e,
111870         0x7550f1f6,0x4348a933,0xa85e62f0,0x7167b996,0x7f5452bf,0x62d43759 },
111871       { 0xf2955926,0xd85feb9e,0x6df78353,0x440a561f,0x9ca36b59,0x389668ec,
111872         0xa22da016,0x052bf1a1,0xf6093254,0xbdfbff72,0xe22209f3,0x94e50f28 } },
111873     /* 7 */
111874     { { 0x3062e8af,0x90b2e5b3,0xe8a3d369,0xa8572375,0x201db7b1,0x3fe1b00b,
111875         0xee651aa2,0xe926def0,0xb9b10ad7,0x6542c9be,0xa2fcbe74,0x098e309b },
111876       { 0xfff1d63f,0x779deeb3,0x20bfd374,0x23d0e80a,0x8768f797,0x8452bb3b,
111877         0x1f952856,0xcf75bb4d,0x29ea3faa,0x8fe6b400,0x81373a53,0x12bd3e40 } },
111878     /* 8 */
111879     { { 0x16973cf4,0x070d34e1,0x7e4f34f7,0x20aee08b,0x5eb8ad29,0x269af9b9,
111880         0xa6a45dda,0xdde0a036,0x63df41e0,0xa18b528e,0xa260df2a,0x03cc71b2 },
111881       { 0xa06b1dd7,0x24a6770a,0x9d2675d3,0x5bfa9c11,0x96844432,0x73c1e2a1,
111882         0x131a6cf0,0x3660558d,0x2ee79454,0xb0289c83,0xc6d8ddcd,0xa6aefb01 } },
111883     /* 9 */
111884     { { 0x01ab5245,0xba1464b4,0xc48d93ff,0x9b8d0b6d,0x93ad272c,0x939867dc,
111885         0xae9fdc77,0xbebe085e,0x894ea8bd,0x73ae5103,0x39ac22e1,0x740fc89a },
111886       { 0x28e23b23,0x5e28b0a3,0xe13104d0,0x2352722e,0xb0a2640d,0xf4667a18,
111887         0x49bb37c3,0xac74a72e,0xe81e183a,0x79f734f0,0x3fd9c0eb,0xbffe5b6c } },
111888     /* 10 */
111889     { { 0x00623f3b,0x03cf2922,0x5f29ebff,0x095c7111,0x80aa6823,0x42d72247,
111890         0x7458c0b0,0x044c7ba1,0x0959ec20,0xca62f7ef,0xf8ca929f,0x40ae2ab7 },
111891       { 0xa927b102,0xb8c5377a,0xdc031771,0x398a86a0,0xc216a406,0x04908f9d,
111892         0x918d3300,0xb423a73a,0xe0b94739,0x634b0ff1,0x2d69f697,0xe29de725 } },
111893     /* 11 */
111894     { { 0x8435af04,0x744d1400,0xfec192da,0x5f255b1d,0x336dc542,0x1f17dc12,
111895         0x636a68a8,0x5c90c2a7,0x7704ca1e,0x960c9eb7,0x6fb3d65a,0x9de8cf1e },
111896       { 0x511d3d06,0xc60fee0d,0xf9eb52c7,0x466e2313,0x206b0914,0x743c0f5f,
111897         0x2191aa4d,0x42f55bac,0xffebdbc2,0xcefc7c8f,0xe6e8ed1c,0xd4fa6081 } },
111898     /* 12 */
111899     { { 0x98683186,0x867db639,0xddcc4ea9,0xfb5cf424,0xd4f0e7bd,0xcc9a7ffe,
111900         0x7a779f7e,0x7c57f71c,0xd6b25ef2,0x90774079,0xb4081680,0x90eae903 },
111901       { 0x0ee1fceb,0xdf2aae5e,0xe86c1a1f,0x3ff1da24,0xca193edf,0x80f587d6,
111902         0xdc9b9d6a,0xa5695523,0x85920303,0x7b840900,0xba6dbdef,0x1efa4dfc } },
111903     /* 13 */
111904     { { 0xe0540015,0xfbd838f9,0xc39077dc,0x2c323946,0xad619124,0x8b1fb9e6,
111905         0x0ca62ea8,0x9612440c,0x2dbe00ff,0x9ad9b52c,0xae197643,0xf52abaa1 },
111906       { 0x2cac32ad,0xd0e89894,0x62a98f91,0xdfb79e42,0x276f55cb,0x65452ecf,
111907         0x7ad23e12,0xdb1ac0d2,0xde4986f0,0xf68c5f6a,0x82ce327d,0x389ac37b } },
111908     /* 14 */
111909     { { 0xb8a9e8c9,0xcd96866d,0x5bb8091e,0xa11963b8,0x045b3cd2,0xc7f90d53,
111910         0x80f36504,0x755a72b5,0x21d3751c,0x46f8b399,0x53c193de,0x4bffdc91 },
111911       { 0xb89554e7,0xcd15c049,0xf7a26be6,0x353c6754,0xbd41d970,0x79602370,
111912         0x12b176c0,0xde16470b,0x40c8809d,0x56ba1175,0xe435fb1e,0xe2db35c3 } },
111913     /* 15 */
111914     { { 0x6328e33f,0xd71e4aab,0xaf8136d1,0x5486782b,0x86d57231,0x07a4995f,
111915         0x1651a968,0xf1f0a5bd,0x76803b6d,0xa5dc5b24,0x42dda935,0x5c587cbc },
111916       { 0xbae8b4c0,0x2b6cdb32,0xb1331138,0x66d1598b,0x5d7e9614,0x4a23b2d2,
111917         0x74a8c05d,0x93e402a6,0xda7ce82e,0x45ac94e6,0xe463d465,0xeb9f8281 } },
111918 };
111919 
111920 /* Multiply the base point of P384 by the scalar and return the result.
111921  * If map is true then convert result to affine coordinates.
111922  *
111923  * Stripe implementation.
111924  * Pre-generated: 2^0, 2^96, ...
111925  * Pre-generated: products of all combinations of above.
111926  * 4 doubles and adds (with qz=1)
111927  *
111928  * r     Resulting point.
111929  * k     Scalar to multiply by.
111930  * map   Indicates whether to convert result to affine.
111931  * ct    Constant time required.
111932  * heap  Heap to use for allocation.
111933  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
111934  */
sp_384_ecc_mulmod_base_12(sp_point_384 * r,const sp_digit * k,int map,int ct,void * heap)111935 static int sp_384_ecc_mulmod_base_12(sp_point_384* r, const sp_digit* k,
111936         int map, int ct, void* heap)
111937 {
111938     return sp_384_ecc_mulmod_stripe_12(r, &p384_base, p384_table,
111939                                       k, map, ct, heap);
111940 }
111941 
111942 #else
111943 /* Striping precomputation table.
111944  * 8 points combined into a table of 256 points.
111945  * Distance of 48 between points.
111946  */
111947 static const sp_table_entry_384 p384_table[256] = {
111948     /* 0 */
111949     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
111950       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
111951     /* 1 */
111952     { { 0x49c0b528,0x3dd07566,0xa0d6ce38,0x20e378e2,0x541b4d6e,0x879c3afc,
111953         0x59a30eff,0x64548684,0x614ede2b,0x812ff723,0x299e1513,0x4d3aadc2 },
111954       { 0x4b03a4fe,0x23043dad,0x7bb4a9ac,0xa1bfa8bf,0x2e83b050,0x8bade756,
111955         0x68f4ffd9,0xc6c35219,0x3969a840,0xdd800226,0x5a15c5e9,0x2b78abc2 } },
111956     /* 2 */
111957     { { 0x2b0c535b,0x29864753,0x70506296,0x90dd6953,0x216ab9ac,0x038cd6b4,
111958         0xbe12d76a,0x3df9b7b7,0x5f347bdb,0x13f4d978,0x13e94489,0x222c5c9c },
111959       { 0x2680dc64,0x5f8e796f,0x58352417,0x120e7cb7,0xd10740b8,0x254b5d8a,
111960         0x5337dee6,0xc38b8efb,0x94f02247,0xf688c2e1,0x6c25bc4c,0x7b5c75f3 } },
111961     /* 3 */
111962     { { 0x9edffea5,0xe26a3cc3,0x37d7e9fc,0x35bbfd1c,0x9bde3ef6,0xf0e7700d,
111963         0x1a538f5a,0x0380eb47,0x05bf9eb3,0x2e9da8bb,0x1a460c3e,0xdbb93c73 },
111964       { 0xf526b605,0x37dba260,0xfd785537,0x95d4978e,0xed72a04a,0x24ed793a,
111965         0x76005b1a,0x26948377,0x9e681f82,0x99f557b9,0xd64954ef,0xae5f9557 } },
111966     /* 4 */
111967     { { 0xf26feef9,0x24480c57,0x3a0e1240,0xc31a2694,0x273e2bc7,0x735002c3,
111968         0x3ef1ed4c,0x8c42e9c5,0x7f4948e8,0x028babf6,0x8a978632,0x6a502f43 },
111969       { 0xb74536fe,0xf5f13a46,0xd8a9f0eb,0x1d218bab,0x37232768,0x30f36bcc,
111970         0x576e8c18,0xc5317b31,0x9bbcb766,0xef1d57a6,0xb3e3d4dc,0x917c4930 } },
111971     /* 5 */
111972     { { 0xe349ddd0,0x11426e2e,0x9b2fc250,0x9f117ef9,0xec0174a6,0xff36b480,
111973         0x18458466,0x4f4bde76,0x05806049,0x2f2edb6d,0x19dfca92,0x8adc75d1 },
111974       { 0xb7d5a7ce,0xa619d097,0xa34411e9,0x874275e5,0x0da4b4ef,0x5403e047,
111975         0x77901d8f,0x2ebaafd9,0xa747170f,0x5e63ebce,0x7f9d8036,0x12a36944 } },
111976     /* 6 */
111977     { { 0x4fc52870,0x28f9c07a,0x1a53a961,0xce0b3748,0x0e1828d9,0xd550fa18,
111978         0x6adb225a,0xa24abaf7,0x6e58a348,0xd11ed0a5,0x948acb62,0xf3d811e6 },
111979       { 0x4c61ed22,0x8618dd77,0x80b47c9d,0x0bb747f9,0xde6b8559,0x22bf796f,
111980         0x680a21e9,0xfdfd1c6d,0x2af2c9dd,0xc0db1577,0xc1e90f3d,0xa09379e6 } },
111981     /* 7 */
111982     { { 0xe085c629,0x386c66ef,0x095bc89a,0x5fc2a461,0x203f4b41,0x1353d631,
111983         0x7e4bd8f5,0x7ca1972b,0xa7df8ce9,0xb077380a,0xee7e4ea3,0xd8a90389 },
111984       { 0xe7b14461,0x1bc74dc7,0x0c9c4f78,0xdc2cb014,0x84ef0a10,0x52b4b3a6,
111985         0x20327fe2,0xbde6ea5d,0x660f9615,0xb71ec435,0xb8ad8173,0xeede5a04 } },
111986     /* 8 */
111987     { { 0x893b9a2d,0x5584cbb3,0x00850c5d,0x820c660b,0x7df2d43d,0x4126d826,
111988         0x0109e801,0xdd5bbbf0,0x38172f1c,0x85b92ee3,0xf31430d9,0x609d4f93 },
111989       { 0xeadaf9d6,0x1e059a07,0x0f125fb0,0x70e6536c,0x560f20e7,0xd6220751,
111990         0x7aaf3a9a,0xa59489ae,0x64bae14e,0x7b70e2f6,0x76d08249,0x0dd03701 } },
111991     /* 9 */
111992     { { 0x8510521f,0x4cc13be8,0xf724cc17,0x87315ba9,0x353dc263,0xb49d83bb,
111993         0x0c279257,0x8b677efe,0xc93c9537,0x510a1c1c,0xa4702c99,0x33e30cd8 },
111994       { 0x2208353f,0xf0ffc89d,0xced42b2b,0x0170fa8d,0x26e2a5f5,0x090851ed,
111995         0xecb52c96,0x81276455,0x7fe1adf4,0x0646c4e1,0xb0868eab,0x513f047e } },
111996     /* 10 */
111997     { { 0xdf5bdf53,0xc07611f4,0x58b11a6d,0x45d331a7,0x1c4ee394,0x58965daf,
111998         0x5a5878d1,0xba8bebe7,0x82dd3025,0xaecc0a18,0xa923eb8b,0xcf2a3899 },
111999       { 0xd24fd048,0xf98c9281,0x8bbb025d,0x841bfb59,0xc9ab9d53,0xb8ddf8ce,
112000         0x7fef044e,0x538a4cb6,0x23236662,0x092ac21f,0x0b66f065,0xa919d385 } },
112001     /* 11 */
112002     { { 0x85d480d8,0x3db03b40,0x1b287a7d,0x8cd9f479,0x4a8f3bae,0x8f24dc75,
112003         0x3db41892,0x482eb800,0x9c56e0f5,0x38bf9eb3,0x9a91dc6f,0x8b977320 },
112004       { 0x7209cfc2,0xa31b05b2,0x05b2db70,0x4c49bf85,0xd619527b,0x56462498,
112005         0x1fac51ba,0x3fe51039,0xab4b8342,0xfb04f55e,0x04c6eabf,0xc07c10dc } },
112006     /* 12 */
112007     { { 0xdb32f048,0xad22fe4c,0x475ed6df,0x5f23bf91,0xaa66b6cb,0xa50ce0c0,
112008         0xf03405c0,0xdf627a89,0xf95e2d6a,0x3674837d,0xba42e64e,0x081c95b6 },
112009       { 0xe71d6ceb,0xeba3e036,0x6c6b0271,0xb45bcccf,0x0684701d,0x67b47e63,
112010         0xe712523f,0x60f8f942,0x5cd47adc,0x82423472,0x87649cbb,0x83027d79 } },
112011     /* 13 */
112012     { { 0x3615b0b8,0xb3929ea6,0xa54dac41,0xb41441fd,0xb5b6a368,0x8995d556,
112013         0x167ef05e,0xa80d4529,0x6d25a27f,0xf6bcb4a1,0x7bd55b68,0x210d6a4c },
112014       { 0x25351130,0xf3804abb,0x903e37eb,0x1d2df699,0x084c25c8,0x5f201efc,
112015         0xa1c68e91,0x31a28c87,0x563f62a5,0x81dad253,0xd6c415d4,0x5dd6de70 } },
112016     /* 14 */
112017     { { 0x846612ce,0x29f470fd,0xda18d997,0x986f3eec,0x2f34af86,0x6b84c161,
112018         0x46ddaf8b,0x5ef0a408,0xe49e795f,0x14405a00,0xaa2f7a37,0x5f491b16 },
112019       { 0xdb41b38d,0xc7f07ae4,0x18fbfcaa,0xef7d119e,0x14443b19,0x3a18e076,
112020         0x79a19926,0x4356841a,0xe2226fbe,0x91f4a91c,0x3cc88721,0xdc77248c } },
112021     /* 15 */
112022     { { 0xe4b1ec9d,0xd570ff1a,0xe7eef706,0x21d23e0e,0xca19e086,0x3cde40f4,
112023         0xcd4bb270,0x7d6523c4,0xbf13aa6c,0x16c1f06c,0xd14c4b60,0x5aa7245a },
112024       { 0x44b74de8,0x37f81467,0x620a934e,0x839e7a17,0xde8b1aa1,0xf74d14e8,
112025         0xf30d75e2,0x8789fa51,0xc81c261e,0x09b24052,0x33c565ee,0x654e2678 } },
112026     /* 16 */
112027     { { 0x2f9fbe67,0x378205de,0x7f728e44,0xc4afcb83,0x682e00f1,0xdbcec06c,
112028         0x114d5423,0xf2a145c3,0x7a52463e,0xa01d9874,0x7d717b0a,0xfc0935b1 },
112029       { 0xd4d01f95,0x9653bc4f,0x9560ad34,0x9aa83ea8,0xaf8e3f3f,0xf77943dc,
112030         0xe86fe16e,0x70774a10,0xbf9ffdcf,0x6b62e6f1,0x588745c9,0x8a72f39e } },
112031     /* 17 */
112032     { { 0x2341c342,0x73ade4da,0xea704422,0xdd326e54,0x3741cef3,0x336c7d98,
112033         0x59e61549,0x1eafa00d,0xbd9a3efd,0xcd3ed892,0xc5c6c7e4,0x03faf26c },
112034       { 0x3045f8ac,0x087e2fcf,0x174f1e73,0x14a65532,0xfe0af9a7,0x2cf84f28,
112035         0x2cdc935b,0xddfd7a84,0x6929c895,0x4c0f117b,0x4c8bcfcc,0x356572d6 } },
112036     /* 18 */
112037     { { 0x7d8c1bba,0x7ecbac01,0x90b0f3d5,0x6058f9c3,0xf6197d0f,0xaee116e3,
112038         0x4033b128,0xc4dd7068,0xc209b983,0xf084dba6,0x831dbc4a,0x97c7c2cf },
112039       { 0xf96010e8,0x2f4e61dd,0x529faa17,0xd97e4e20,0x69d37f20,0x4ee66660,
112040         0x3d366d72,0xccc139ed,0x13488e0f,0x690b6ee2,0xf3a6d533,0x7cad1dc5 } },
112041     /* 19 */
112042     { { 0xda57a41f,0x660a9a81,0xec0039b6,0xe74a0412,0x5e1dad15,0x42343c6b,
112043         0x46681d4c,0x284f3ff5,0x63749e89,0xb51087f1,0x6f9f2f13,0x070f23cc },
112044       { 0x5d186e14,0x542211da,0xfddb0dff,0x84748f37,0xdb1f4180,0x41a3aab4,
112045         0xa6402d0e,0x25ed667b,0x02f58355,0x2f2924a9,0xfa44a689,0x5844ee7c } },
112046     /* 20 */
112047     { { 0x3f3b236f,0xfab08607,0x81e221da,0x19e9d41d,0x3927b428,0xf3f6571e,
112048         0x7550f1f6,0x4348a933,0xa85e62f0,0x7167b996,0x7f5452bf,0x62d43759 },
112049       { 0xf2955926,0xd85feb9e,0x6df78353,0x440a561f,0x9ca36b59,0x389668ec,
112050         0xa22da016,0x052bf1a1,0xf6093254,0xbdfbff72,0xe22209f3,0x94e50f28 } },
112051     /* 21 */
112052     { { 0x3062e8af,0x90b2e5b3,0xe8a3d369,0xa8572375,0x201db7b1,0x3fe1b00b,
112053         0xee651aa2,0xe926def0,0xb9b10ad7,0x6542c9be,0xa2fcbe74,0x098e309b },
112054       { 0xfff1d63f,0x779deeb3,0x20bfd374,0x23d0e80a,0x8768f797,0x8452bb3b,
112055         0x1f952856,0xcf75bb4d,0x29ea3faa,0x8fe6b400,0x81373a53,0x12bd3e40 } },
112056     /* 22 */
112057     { { 0x104cbba5,0xc023780d,0xfa35dd4c,0x6207e747,0x1ca9b6a3,0x35c23928,
112058         0x97987b10,0x4ff19be8,0x8022eee8,0xb8476bbf,0xd3bbe74d,0xaa0a4a14 },
112059       { 0x187d4543,0x20f94331,0x79f6e066,0x32153870,0xac7e82e1,0x83b0f74e,
112060         0x828f06ab,0xa7748ba2,0xc26ef35f,0xc5f0298a,0x8e9a7dbd,0x0f0c5070 } },
112061     /* 23 */
112062     { { 0xdef029dd,0x0c5c244c,0x850661b8,0x3dabc687,0xfe11d981,0x9992b865,
112063         0x6274dbad,0xe9801b8f,0x098da242,0xe54e6319,0x91a53d08,0x9929a91a },
112064       { 0x35285887,0x37bffd72,0xf1418102,0xbc759425,0xfd2e6e20,0x9280cc35,
112065         0xfbc42ee5,0x735c600c,0x8837619a,0xb7ad2864,0xa778c57b,0xa3627231 } },
112066     /* 24 */
112067     { { 0x91361ed8,0xae799b5c,0x6c63366c,0x47d71b75,0x1b265a6a,0x54cdd521,
112068         0x98d77b74,0xe0215a59,0xbab29db0,0x4424d9b7,0x7fd9e536,0x8b0ffacc },
112069       { 0x37b5d9ef,0x46d85d12,0xbfa91747,0x5b106d62,0x5f99ba2d,0xed0479f8,
112070         0x1d104de4,0x0e6f3923,0x25e8983f,0x83a84c84,0xf8105a70,0xa9507e0a } },
112071     /* 25 */
112072     { { 0x14cf381c,0xf6c68a6e,0xc22e31cc,0xaf9d27bd,0xaa8a5ccb,0x23568d4d,
112073         0xe338e4d2,0xe431eec0,0x8f52ad1f,0xf1a828fe,0xe86acd80,0xdb6a0579 },
112074       { 0x4507832a,0x2885672e,0x887e5289,0x73fc275f,0x05610d08,0x65f80278,
112075         0x075ff5b0,0x8d9b4554,0x09f712b5,0x3a8e8fb1,0x2ebe9cf2,0x39f0ac86 } },
112076     /* 26 */
112077     { { 0x4c52edf5,0xd8fabf78,0xa589ae53,0xdcd737e5,0xd791ab17,0x94918bf0,
112078         0xbcff06c9,0xb5fbd956,0xdca46d45,0xf6d3032e,0x41a3e486,0x2cdff7e1 },
112079       { 0x61f47ec8,0x6674b3ba,0xeef84608,0x8a882163,0x4c687f90,0xa257c705,
112080         0xf6cdf227,0xe30cb2ed,0x7f6ea846,0x2c4c64ca,0xcc6bcd3c,0x186fa17c } },
112081     /* 27 */
112082     { { 0x1dfcb91e,0x48a3f536,0x646d358a,0x83595e13,0x91128798,0xbd15827b,
112083         0x2187757a,0x3ce612b8,0x61bd7372,0x873150a1,0xb662f568,0xf4684530 },
112084       { 0x401896f6,0x8833950b,0x77f3e090,0xe11cb89a,0x48e7f4a5,0xb2f12cac,
112085         0xf606677e,0x313dd769,0x16579f93,0xfdcf08b3,0x46b8f22b,0x6429cec9 } },
112086     /* 28 */
112087     { { 0xbb75f9a4,0x4984dd54,0x29d3b570,0x4aef06b9,0x3d6e4c1e,0xb5f84ca2,
112088         0xb083ef35,0x24c61c11,0x392ca9ff,0xce4a7392,0x6730a800,0x865d6517 },
112089       { 0x722b4a2b,0xca3dfe76,0x7b083e0e,0x12c04bf9,0x1b86b8a5,0x803ce5b5,
112090         0x6a7e3e0c,0x3fc7632d,0xc81adbe4,0xc89970c2,0x120e16b1,0x3cbcd3ad } },
112091     /* 29 */
112092     { { 0xec30ce93,0xfbfb4cc7,0xb72720a2,0x10ed6c7d,0x47b55500,0xec675bf7,
112093         0x333ff7c3,0x90725903,0x5075bfc0,0xc7c3973e,0x07acf31b,0xb049ecb0 },
112094       { 0x4f58839c,0xb4076eaf,0xa2b05e4f,0x101896da,0xab40c66e,0x3f6033b0,
112095         0xc8d864ba,0x19ee9eeb,0x47bf6d2a,0xeb6cf155,0xf826477d,0x8e5a9663 } },
112096     /* 30 */
112097     { { 0xf7fbd5e1,0x69e62fdd,0x76912b1d,0x38ecfe54,0xd1da3bfb,0x845a3d56,
112098         0x1c86f0d4,0x0494950e,0x3bc36ce8,0x83cadbf9,0x4fccc8d1,0x41fce572 },
112099       { 0x8332c144,0x05f939c2,0x0871e46e,0xb17f248b,0x66e8aff6,0x3d8534e2,
112100         0x3b85c629,0x1d06f1dc,0xa3131b73,0xdb06a32e,0x8b3f64e5,0xf295184d } },
112101     /* 31 */
112102     { { 0x36ddc103,0xd9653ff7,0x95ef606f,0x25f43e37,0xfe06dce8,0x09e301fc,
112103         0x30b6eebf,0x85af2341,0x0ff56b20,0x79b12b53,0xfe9a3c6b,0x9b4fb499 },
112104       { 0x51d27ac2,0x0154f892,0x56ca5389,0xd33167e3,0xafc065a6,0x7828ec1f,
112105         0x7f746c9b,0x0959a258,0x0c44f837,0xb18f1be3,0xc4132fdb,0xa7946117 } },
112106     /* 32 */
112107     { { 0x5e3c647b,0xc0426b77,0x8cf05348,0xbfcbd939,0x172c0d3d,0x31d312e3,
112108         0xee754737,0x5f49fde6,0x6da7ee61,0x895530f0,0xe8b3a5fb,0xcf281b0a },
112109       { 0x41b8a543,0xfd149735,0x3080dd30,0x41a625a7,0x653908cf,0xe2baae07,
112110         0xba02a278,0xc3d01436,0x7b21b8f8,0xa0d0222e,0xd7ec1297,0xfdc270e9 } },
112111     /* 33 */
112112     { { 0xbc7f41d6,0x00873c0c,0x1b7ad641,0xd976113e,0x238443fb,0x2a536ff4,
112113         0x41e62e45,0x030d00e2,0x5f545fc6,0x532e9867,0x8e91208c,0xcd033108 },
112114       { 0x9797612c,0xd1a04c99,0xeea674e2,0xd4393e02,0xe19742a1,0xd56fa69e,
112115         0x85f0590e,0xdd2ab480,0x48a2243d,0xa5cefc52,0x54383f41,0x48cc67b6 } },
112116     /* 34 */
112117     { { 0xfc14ab48,0x4e50430e,0x26706a74,0x195b7f4f,0xcc881ff6,0x2fe8a228,
112118         0xd945013d,0xb1b968e2,0x4b92162b,0x936aa579,0x364e754a,0x4fb766b7 },
112119       { 0x31e1ff7f,0x13f93bca,0xce4f2691,0x696eb5ca,0xa2b09e02,0xff754bf8,
112120         0xe58e3ff8,0x58f13c9c,0x1678c0b0,0xb757346f,0xa86692b3,0xd54200db } },
112121     /* 35 */
112122     { { 0x6dda1265,0x9a030bbd,0xe89718dd,0xf7b4f3fc,0x936065b8,0xa6a4931f,
112123         0x5f72241c,0xbce72d87,0x65775857,0x6cbb51cb,0x4e993675,0xc7161815 },
112124       { 0x2ee32189,0xe81a0f79,0x277dc0b2,0xef2fab26,0xb71f469f,0x9e64f6fe,
112125         0xdfdaf859,0xb448ce33,0xbe6b5df1,0x3f5c1c4c,0x1de45f7b,0xfb8dfb00 } },
112126     /* 36 */
112127     { { 0x4d5bb921,0xc7345fa7,0x4d2b667e,0x5c7e04be,0x282d7a3e,0x47ed3a80,
112128         0x7e47b2a4,0x5c2777f8,0x08488e2e,0x89b3b100,0xb2eb5b45,0x9aad77c2 },
112129       { 0xdaac34ae,0xd681bca7,0x26afb326,0x2452e4e5,0x41a1ee14,0x0c887924,
112130         0xc2407ade,0x743b04d4,0xfc17a2ac,0xcb5e999b,0x4a701a06,0x4dca2f82 } },
112131     /* 37 */
112132     { { 0x1127bc1a,0x68e31ca6,0x17ead3be,0xa3edd59b,0xe25f5a15,0x67b6b645,
112133         0xa420e15e,0x76221794,0x4b1e872e,0x794fd83b,0xb2dece1b,0x7cab3f03 },
112134       { 0xca9b3586,0x7119bf15,0x4d250bd7,0xa5545924,0xcc6bcf24,0x173633ea,
112135         0xb1b6f884,0x9bd308c2,0x447d38c3,0x3bae06f5,0xf341fe1c,0x54dcc135 } },
112136     /* 38 */
112137     { { 0x943caf0d,0x56d3598d,0x225ff133,0xce044ea9,0x563fadea,0x9edf6a7c,
112138         0x73e8dc27,0x632eb944,0x3190dcab,0x814b467e,0x6dbb1e31,0x2d4f4f31 },
112139       { 0xa143b7ca,0x8d69811c,0xde7cf950,0x4ec1ac32,0x37b5fe82,0x223ab5fd,
112140         0x9390f1d9,0xe82616e4,0x75804610,0xabff4b20,0x875b08f0,0x11b9be15 } },
112141     /* 39 */
112142     { { 0x3bbe682c,0x4ae31a3d,0x74eef2dd,0xbc7c5d26,0x3c47dd40,0x92afd10a,
112143         0xc14ab9e1,0xec7e0a3b,0xb2e495e4,0x6a6c3dd1,0x309bcd85,0x085ee5e9 },
112144       { 0x8c2e67fd,0xf381a908,0xe261eaf2,0x32083a80,0x96deee15,0x0fcd6a49,
112145         0x5e524c79,0xe3b8fb03,0x1d5b08b9,0x8dc360d9,0x7f26719f,0x3a06e2c8 } },
112146     /* 40 */
112147     { { 0x7237cac0,0x5cd9f5a8,0x43586794,0x93f0b59d,0xe94f6c4e,0x4384a764,
112148         0xb62782d3,0x8304ed2b,0xcde06015,0x0b8db8b3,0x5dbe190f,0x4336dd53 },
112149       { 0x92ab473a,0x57443553,0xbe5ed046,0x031c7275,0x21909aa4,0x3e78678c,
112150         0x99202ddb,0x4ab7e04f,0x6977e635,0x2648d206,0x093198be,0xd427d184 } },
112151     /* 41 */
112152     { { 0x0f9b5a31,0x822848f5,0xbaadb62a,0xbb003468,0x3357559c,0x233a0472,
112153         0x79aee843,0x49ef6880,0xaeb9e1e3,0xa89867a0,0x1f6f9a55,0xc151931b },
112154       { 0xad74251e,0xd264eb0b,0x4abf295e,0x37b9b263,0x04960d10,0xb600921b,
112155         0x4da77dc0,0x0de53dbc,0xd2b18697,0x01d9bab3,0xf7156ddf,0xad54ec7a } },
112156     /* 42 */
112157     { { 0x79efdc58,0x8e74dc35,0x4ff68ddb,0x456bd369,0xd32096a5,0x724e74cc,
112158         0x386783d0,0xe41cff42,0x7c70d8a4,0xa04c7f21,0xe61a19a2,0x41199d2f },
112159       { 0x29c05dd2,0xd389a3e0,0xe7e3fda9,0x535f2a6b,0x7c2b4df8,0x26ecf72d,
112160         0xfe745294,0x678275f4,0x9d23f519,0x6319c9cc,0x88048fc4,0x1e05a02d } },
112161     /* 43 */
112162     { { 0xd4d5ffe8,0x75cc8e2e,0xdbea17f2,0xf8bb4896,0xcee3cb4a,0x35059790,
112163         0xa47c6165,0x4c06ee85,0x92935d2f,0xf98fff25,0x32ffd7c7,0x34c4a572 },
112164       { 0xea0376a2,0xc4b14806,0x4f115e02,0x2ea5e750,0x1e55d7c0,0x532d76e2,
112165         0xf31044da,0x68dc9411,0x71b77993,0x9272e465,0x93a8cfd5,0xadaa38bb } },
112166     /* 44 */
112167     { { 0x7d4ed72a,0x4bf0c712,0xba1f79a3,0xda0e9264,0xf4c39ea4,0x48c0258b,
112168         0x2a715138,0xa5394ed8,0xbf06c660,0x4af511ce,0xec5c37cd,0xfcebceef },
112169       { 0x779ae8c1,0xf23b75aa,0xad1e606e,0xdeff59cc,0x22755c82,0xf3f526fd,
112170         0xbb32cefd,0x64c5ab44,0x915bdefd,0xa96e11a2,0x1143813e,0xab19746a } },
112171     /* 45 */
112172     { { 0xec837d7d,0x43c78585,0xb8ee0ba4,0xca5b6fbc,0xd5dbb5ee,0x34e924d9,
112173         0xbb4f1ca5,0x3f4fa104,0x398640f7,0x15458b72,0xd7f407ea,0x4231faa9 },
112174       { 0xf96e6896,0x53e0661e,0xd03b0f9d,0x554e4c69,0x9c7858d1,0xd4fcb07b,
112175         0x52cb04fa,0x7e952793,0x8974e7f7,0x5f5f1574,0x6b6d57c8,0x2e3fa558 } },
112176     /* 46 */
112177     { { 0x6a9951a8,0x42cd4803,0x42792ad0,0xa8b15b88,0xabb29a73,0x18e8bcf9,
112178         0x409933e8,0xbfd9a092,0xefb88dc4,0x760a3594,0x40724458,0x14418863 },
112179       { 0x99caedc7,0x162a56ee,0x91d101c9,0x8fb12ecd,0x393202da,0xea671967,
112180         0xa4ccd796,0x1aac8c4a,0x1cf185a8,0x7db05036,0x8cfd095a,0x0c9f86cd } },
112181     /* 47 */
112182     { { 0x10b2a556,0x9a728147,0x327b70b2,0x767ca964,0x5e3799b7,0x04ed9e12,
112183         0x22a3eb2a,0x6781d2dc,0x0d9450ac,0x5bd116eb,0xa7ebe08a,0xeccac1fc },
112184       { 0xdc2d6e94,0xde68444f,0x35ecf21b,0x3621f429,0x29e03a2c,0x14e2d543,
112185         0x7d3e7f0a,0x53e42cd5,0x73ed00b9,0xbba26c09,0xc57d2272,0x00297c39 } },
112186     /* 48 */
112187     { { 0xb8243a7d,0x3aaaab10,0x8fa58c5b,0x6eeef93e,0x9ae7f764,0xf866fca3,
112188         0x61ab04d3,0x64105a26,0x03945d66,0xa3578d8a,0x791b848c,0xb08cd3e4 },
112189       { 0x756d2411,0x45edc5f8,0xa755128c,0xd4a790d9,0x49e5f6a0,0xc2cf0963,
112190         0xf649beaa,0xc66d267d,0x8467039e,0x3ce6d968,0x42f7816f,0x50046c6b } },
112191     /* 49 */
112192     { { 0x66425043,0x92ae1602,0xf08db890,0x1ff66afd,0x8f162ce5,0x386f5a7f,
112193         0xfcf5598f,0x18d2dea0,0x1a8ca18e,0x78372b3a,0x8cd0e6f7,0xdf0d20eb },
112194       { 0x75bb4045,0x7edd5e1d,0xb96d94b7,0x252a47ce,0x2c626776,0xbdb29358,
112195         0x40dd1031,0x853c3943,0x7d5f47fd,0x9dc9becf,0xbae4044a,0x27c2302f } },
112196     /* 50 */
112197     { { 0x8f2d49ce,0x2d1d208a,0x162df0a2,0x0d91aa02,0x09a07f65,0x9c5cce87,
112198         0x84339012,0xdf07238b,0x419442cd,0x5028e2c8,0x72062aba,0x2dcbd358 },
112199       { 0xe4680967,0xb5fbc3cb,0x9f92d72c,0x2a7bc645,0x116c369d,0x806c76e1,
112200         0x3177e8d8,0x5c50677a,0x4569df57,0x753739eb,0x36c3f40b,0x2d481ef6 } },
112201     /* 51 */
112202     { { 0xfea1103e,0x1a2d39fd,0x95f81b17,0xeaae5592,0xf59b264a,0xdbd0aa18,
112203         0xcb592ee0,0x90c39c1a,0x9750cca3,0xdf62f80d,0xdf97cc6c,0xda4d8283 },
112204       { 0x1e201067,0x0a6dd346,0x69fb1f6b,0x1531f859,0x1d60121f,0x4895e552,
112205         0x4c041c91,0x0b21aab0,0xbcc1ccf8,0x9d896c46,0x3141bde7,0xd24da3b3 } },
112206     /* 52 */
112207     { { 0x53b0a354,0x575a0537,0x0c6ddcd8,0x392ff2f4,0x56157b94,0x0b8e8cff,
112208         0x3b1b80d1,0x073e57bd,0x3fedee15,0x2a75e0f0,0xaa8e6f19,0x752380e4 },
112209       { 0x6558ffe9,0x1f4e227c,0x19ec5415,0x3a348618,0xf7997085,0xab382d5e,
112210         0xddc46ac2,0x5e6deaff,0xfc8d094c,0xe5144078,0xf60e37c6,0xf674fe51 } },
112211     /* 53 */
112212     { { 0xaf63408f,0x6fb87ae5,0xcd75a737,0xa39c36a9,0xcf4c618d,0x7833313f,
112213         0xf034c88d,0xfbcd4482,0x39b35288,0x4469a761,0x66b5d9c9,0x77a711c5 },
112214       { 0x944f8d65,0x4a695dc7,0x161aaba8,0xe6da5f65,0x24601669,0x8654e9c3,
112215         0x28ae7491,0xbc8b93f5,0x8f5580d8,0x5f1d1e83,0xcea32cc8,0x8ccf9a1a } },
112216     /* 54 */
112217     { { 0x7196fee2,0x28ab110c,0x874c8945,0x75799d63,0x29aedadd,0xa2629348,
112218         0x2be88ff4,0x9714cc7b,0xd58d60d6,0xf71293cf,0x32a564e9,0xda6b6cb3 },
112219       { 0x3dd821c2,0xf43fddb1,0x90dd323d,0xf2f2785f,0x048489f8,0x91246419,
112220         0xd24c6749,0x61660f26,0xc803c15c,0x961d9e8c,0xfaadc4c9,0x631c6158 } },
112221     /* 55 */
112222     { { 0xfd752366,0xacf2ebe0,0x139be88b,0xb93c340e,0x0f20179e,0x98f66485,
112223         0xff1da785,0x14820254,0x4f85c16e,0x5278e276,0x7aab1913,0xa246ee45 },
112224       { 0x53763b33,0x43861eb4,0x45c0bc0d,0xc49f03fc,0xad6b1ea1,0xafff16bc,
112225         0x6fd49c99,0xce33908b,0xf7fde8c3,0x5c51e9bf,0xff142c5e,0x076a7a39 } },
112226     /* 56 */
112227     { { 0x9e338d10,0x04639dfe,0xf42b411b,0x8ee6996f,0xa875cef2,0x960461d1,
112228         0x95b4d0ba,0x1057b6d6,0xa906e0bc,0x27639252,0xe1c20f8a,0x2c19f09a },
112229       { 0xeef4c43d,0x5b8fc3f0,0x07a84aa9,0xe2e1b1a8,0x835d2bdb,0x5f455528,
112230         0x207132dd,0x0f4aee4d,0x3907f675,0xe9f8338c,0x0e0531f0,0x7a874dc9 } },
112231     /* 57 */
112232     { { 0x97c27050,0x84b22d45,0x59e70bf8,0xbd0b8df7,0x79738b9b,0xb4d67405,
112233         0xcd917c4f,0x47f4d5f5,0x13ce6e33,0x9099c4ce,0x521d0f8b,0x942bfd39 },
112234       { 0xa43b566d,0x5028f0f6,0x21bff7de,0xaf6e8669,0xc44232cd,0x83f6f856,
112235         0xf915069a,0x65680579,0xecfecb85,0xd12095a2,0xdb01ba16,0xcf7f06ae } },
112236     /* 58 */
112237     { { 0x8ef96c80,0x0f56e3c4,0x3ddb609c,0xd521f2b3,0x7dc1450d,0x2be94102,
112238         0x02a91fe2,0x2d21a071,0x1efa37de,0x2e6f74fa,0x156c28a1,0x9a9a90b8 },
112239       { 0x9dc7dfcb,0xc54ea9ea,0x2c2c1d62,0xc74e66fc,0x49d3e067,0x9f23f967,
112240         0x54dd38ad,0x1c7c3a46,0x5946cee3,0xc7005884,0x45cc045d,0x89856368 } },
112241     /* 59 */
112242     { { 0xfce73946,0x29da7cd4,0x23168563,0x8f697db5,0xcba92ec6,0x8e235e9c,
112243         0x9f91d3ea,0x55d4655f,0xaa50a6cd,0xf3689f23,0x21e6a1a0,0xdcf21c26 },
112244       { 0x61b818bf,0xcffbc82e,0xda47a243,0xc74a2f96,0x8bc1a0cf,0x234e980a,
112245         0x7929cb6d,0xf35fd6b5,0xefe17d6c,0x81468e12,0x58b2dafb,0xddea6ae5 } },
112246     /* 60 */
112247     { { 0x7e787b2e,0x294de887,0x39a9310d,0x258acc1f,0xac14265d,0x92d9714a,
112248         0x708b48a0,0x18b5591c,0xe1abbf71,0x27cc6bb0,0x568307b9,0xc0581fa3 },
112249       { 0xf24d4d58,0x9e0f58a3,0xe0ce2327,0xfebe9bb8,0x9d1be702,0x91fd6a41,
112250         0xfacac993,0x9a7d8a45,0x9e50d66d,0xabc0a08c,0x06498201,0x02c342f7 } },
112251     /* 61 */
112252     { { 0x157bdbc2,0xccd71407,0xad0e1605,0x72fa89c6,0xb92a015f,0xb1d3da2b,
112253         0xa0a3fe56,0x8ad9e7cd,0x24f06737,0x160edcbd,0x61275be6,0x79d4db33 },
112254       { 0x5f3497c4,0xd3d31fd9,0x04192fb0,0x8cafeaee,0x13a50af3,0xe13ca745,
112255         0x8c85aae5,0x18826167,0x9eb556ff,0xce06cea8,0xbdb549f3,0x2eef1995 } },
112256     /* 62 */
112257     { { 0x50596edc,0x8ed7d3eb,0x905243a2,0xaa359362,0xa4b6d02b,0xa212c2c2,
112258         0xc4fbec68,0x611fd727,0xb84f733d,0x8a0b8ff7,0x5f0daf0e,0xd85a6b90 },
112259       { 0xd4091cf7,0x60e899f5,0x2eff2768,0x4fef2b67,0x10c33964,0xc1f195cb,
112260         0x93626a8f,0x8275d369,0x0d6c840a,0xc77904f4,0x7a868acd,0x88d8b7fd } },
112261     /* 63 */
112262     { { 0x7bd98425,0x85f23723,0xc70b154e,0xd4463992,0x96687a2e,0xcbb00ee2,
112263         0xc83214fd,0x905fdbf7,0x13593684,0x2019d293,0xef51218e,0x0428c393 },
112264       { 0x981e909a,0x40c7623f,0x7be192da,0x92513385,0x4010907e,0x48fe480f,
112265         0x3120b459,0xdd7a187c,0xa1fd8f3c,0xc9d7702d,0xe358efc5,0x66e4753b } },
112266     /* 64 */
112267     { { 0x16973cf4,0x070d34e1,0x7e4f34f7,0x20aee08b,0x5eb8ad29,0x269af9b9,
112268         0xa6a45dda,0xdde0a036,0x63df41e0,0xa18b528e,0xa260df2a,0x03cc71b2 },
112269       { 0xa06b1dd7,0x24a6770a,0x9d2675d3,0x5bfa9c11,0x96844432,0x73c1e2a1,
112270         0x131a6cf0,0x3660558d,0x2ee79454,0xb0289c83,0xc6d8ddcd,0xa6aefb01 } },
112271     /* 65 */
112272     { { 0x01ab5245,0xba1464b4,0xc48d93ff,0x9b8d0b6d,0x93ad272c,0x939867dc,
112273         0xae9fdc77,0xbebe085e,0x894ea8bd,0x73ae5103,0x39ac22e1,0x740fc89a },
112274       { 0x28e23b23,0x5e28b0a3,0xe13104d0,0x2352722e,0xb0a2640d,0xf4667a18,
112275         0x49bb37c3,0xac74a72e,0xe81e183a,0x79f734f0,0x3fd9c0eb,0xbffe5b6c } },
112276     /* 66 */
112277     { { 0xc6a2123f,0xb1a358f5,0xfe28df6d,0x927b2d95,0xf199d2f9,0x89702753,
112278         0x1a3f82dc,0x0a73754c,0x777affe1,0x063d029d,0xdae6d34d,0x5439817e },
112279       { 0x6b8b83c4,0xf7979eef,0x9d945682,0x615cb214,0xc5e57eae,0x8f0e4fac,
112280         0x113047dd,0x042b89b8,0x93f36508,0x888356dc,0x5fd1f32f,0xbf008d18 } },
112281     /* 67 */
112282     { { 0x4e8068db,0x8012aa24,0xa5729a47,0xc72cc641,0x43f0691d,0x3c33df2c,
112283         0x1d92145f,0xfa057347,0xb97f7946,0xaefc0f2f,0x2f8121bf,0x813d75cb },
112284       { 0x4383bba6,0x05613c72,0xa4224b3f,0xa924ce70,0x5f2179a6,0xe59cecbe,
112285         0x79f62b61,0x78e2e8aa,0x53ad8079,0x3ac2cc3b,0xd8f4fa96,0x55518d71 } },
112286     /* 68 */
112287     { { 0x00623f3b,0x03cf2922,0x5f29ebff,0x095c7111,0x80aa6823,0x42d72247,
112288         0x7458c0b0,0x044c7ba1,0x0959ec20,0xca62f7ef,0xf8ca929f,0x40ae2ab7 },
112289       { 0xa927b102,0xb8c5377a,0xdc031771,0x398a86a0,0xc216a406,0x04908f9d,
112290         0x918d3300,0xb423a73a,0xe0b94739,0x634b0ff1,0x2d69f697,0xe29de725 } },
112291     /* 69 */
112292     { { 0x8435af04,0x744d1400,0xfec192da,0x5f255b1d,0x336dc542,0x1f17dc12,
112293         0x636a68a8,0x5c90c2a7,0x7704ca1e,0x960c9eb7,0x6fb3d65a,0x9de8cf1e },
112294       { 0x511d3d06,0xc60fee0d,0xf9eb52c7,0x466e2313,0x206b0914,0x743c0f5f,
112295         0x2191aa4d,0x42f55bac,0xffebdbc2,0xcefc7c8f,0xe6e8ed1c,0xd4fa6081 } },
112296     /* 70 */
112297     { { 0xb0ab9645,0xb5e405d3,0xd5f1f711,0xaeec7f98,0x585c2a6e,0x8ad42311,
112298         0x512c6944,0x045acb9e,0xa90db1c6,0xae106c4e,0x898e6563,0xb89f33d5 },
112299       { 0x7fed2ce4,0x43b07cd9,0xdd815b20,0xf9934e17,0x0a81a349,0x6778d4d5,
112300         0x52918061,0x9e616ade,0xd7e67112,0xfa06db06,0x88488091,0x1da23cf1 } },
112301     /* 71 */
112302     { { 0x42f2c4b5,0x821c46b3,0x66059e47,0x931513ef,0x66f50cd1,0x7030ae43,
112303         0x43e7b127,0x43b536c9,0x5fca5360,0x006258cf,0x6b557abf,0xe4e3ee79 },
112304       { 0x24c8b22f,0xbb6b3900,0xfcbf1054,0x2eb5e2c1,0x567492af,0x937b18c9,
112305         0xacf53957,0xf09432e4,0x1dbf3a56,0x585f5a9d,0xbe0887cf,0xf86751fd } },
112306     /* 72 */
112307     { { 0x9d10e0b2,0x157399cb,0x60dc51b7,0x1c0d5956,0x1f583090,0x1d496b8a,
112308         0x88590484,0x6658bc26,0x03213f28,0x88c08ab7,0x7ae58de4,0x8d2e0f73 },
112309       { 0x486cfee6,0x9b79bc95,0xe9e5bc57,0x036a26c7,0xcd8ae97a,0x1ad03601,
112310         0xff3a0494,0x06907f87,0x2c7eb584,0x078f4bbf,0x7e8d0a5a,0xe3731bf5 } },
112311     /* 73 */
112312     { { 0xe1cd0abe,0x72f2282b,0x87efefa2,0xd4f9015e,0x6c3834bd,0x9d189806,
112313         0xb8a29ced,0x9c8cdcc1,0xfee82ebc,0x0601b9f4,0x7206a756,0x371052bc },
112314       { 0x46f32562,0x76fa1092,0x17351bb4,0xdaad534c,0xb3636bb5,0xc3d64c37,
112315         0x45d54e00,0x038a8c51,0x32c09e7c,0x301e6180,0x95735151,0x9764eae7 } },
112316     /* 74 */
112317     { { 0xcbd5256a,0x8791b19f,0x6ca13a3b,0x4007e0f2,0x4cf06904,0x03b79460,
112318         0xb6c17589,0xb18a9c22,0x81d45908,0xa1cb7d7d,0x21bb68f1,0x6e13fa9d },
112319       { 0xa71e6e16,0x47183c62,0xe18749ed,0x5cf0ef8e,0x2e5ed409,0x2c9c7f9b,
112320         0xe6e117e1,0x042eeacc,0x13fb5a7f,0xb86d4816,0xc9e5feb1,0xea1cf0ed } },
112321     /* 75 */
112322     { { 0xcea4cc9b,0x6e6573c9,0xafcec8f3,0x5417961d,0xa438b6f6,0x804bf02a,
112323         0xdcd4ea88,0xb894b03c,0x3799571f,0xd0f807e9,0x862156e8,0x3466a7f5 },
112324       { 0x56515664,0x51e59acd,0xa3c5eb0b,0x55b0f93c,0x6a4279db,0x84a06b02,
112325         0xc5fae08e,0x5c850579,0xa663a1a2,0xcf07b8db,0xf46ffc8d,0x49a36bbc } },
112326     /* 76 */
112327     { { 0x46d93106,0xe47f5acc,0xaa897c9c,0x65b7ade0,0x12d7e4be,0x37cf4c94,
112328         0xd4b2caa9,0xa2ae9b80,0xe60357a3,0x5e7ce09c,0xc8ecd5f9,0x29f77667 },
112329       { 0xa8a0b1c5,0xdf6868f5,0x62978ad8,0x240858cf,0xdc0002a1,0x0f7ac101,
112330         0xffe9aa05,0x1d28a9d7,0x5b962c97,0x744984d6,0x3d28c8b2,0xa8a7c00b } },
112331     /* 77 */
112332     { { 0xae11a338,0x7c58a852,0xd1af96e7,0xa78613f1,0x5355cc73,0x7e9767d2,
112333         0x792a2de6,0x6ba37009,0x124386b2,0x7d60f618,0x11157674,0xab09b531 },
112334       { 0x98eb9dd0,0x95a04841,0x15070328,0xe6c17acc,0x489c6e49,0xafc6da45,
112335         0xbb211530,0xab45a60a,0x7d7ea933,0xc58d6592,0x095642c6,0xa3ef3c65 } },
112336     /* 78 */
112337     { { 0xdf010879,0x89d420e9,0x39576179,0x9d25255d,0xe39513b6,0x9cdefd50,
112338         0xd5d1c313,0xe4efe45b,0x3f7af771,0xc0149de7,0x340ab06b,0x55a6b4f4 },
112339       { 0xebeaf771,0xf1325251,0x878d4288,0x2ab44128,0x18e05afe,0xfcd5832e,
112340         0xcc1fb62b,0xef52a348,0xc1c4792a,0x2bd08274,0x877c6dc7,0x345c5846 } },
112341     /* 79 */
112342     { { 0xbea65e90,0xde15ceb0,0x2416d99c,0x0987f72b,0xfd863dec,0x44db578d,
112343         0xac6a3578,0xf617b74b,0xdb48e999,0x9e62bd7a,0xeab1a1be,0x877cae61 },
112344       { 0x3a358610,0x23adddaa,0x325e2b07,0x2fc4d6d1,0x1585754e,0x897198f5,
112345         0xb392b584,0xf741852c,0xb55f7de1,0x9927804c,0x1aa8efae,0xe9e6c4ed } },
112346     /* 80 */
112347     { { 0x98683186,0x867db639,0xddcc4ea9,0xfb5cf424,0xd4f0e7bd,0xcc9a7ffe,
112348         0x7a779f7e,0x7c57f71c,0xd6b25ef2,0x90774079,0xb4081680,0x90eae903 },
112349       { 0x0ee1fceb,0xdf2aae5e,0xe86c1a1f,0x3ff1da24,0xca193edf,0x80f587d6,
112350         0xdc9b9d6a,0xa5695523,0x85920303,0x7b840900,0xba6dbdef,0x1efa4dfc } },
112351     /* 81 */
112352     { { 0xe0540015,0xfbd838f9,0xc39077dc,0x2c323946,0xad619124,0x8b1fb9e6,
112353         0x0ca62ea8,0x9612440c,0x2dbe00ff,0x9ad9b52c,0xae197643,0xf52abaa1 },
112354       { 0x2cac32ad,0xd0e89894,0x62a98f91,0xdfb79e42,0x276f55cb,0x65452ecf,
112355         0x7ad23e12,0xdb1ac0d2,0xde4986f0,0xf68c5f6a,0x82ce327d,0x389ac37b } },
112356     /* 82 */
112357     { { 0xf8e60f5b,0x511188b4,0x48aa2ada,0x7fe67015,0x381abca2,0xdb333cb8,
112358         0xdaf3fc97,0xb15e6d9d,0x36aabc03,0x4b24f6eb,0x72a748b4,0xc59789df },
112359       { 0x29cf5279,0x26fcb8a5,0x01ad9a6c,0x7a3c6bfc,0x4b8bac9b,0x866cf88d,
112360         0x9c80d041,0xf4c89989,0x70add148,0xf0a04241,0x45d81a41,0x5a02f479 } },
112361     /* 83 */
112362     { { 0xc1c90202,0xfa5c877c,0xf8ac7570,0xd099d440,0xd17881f7,0x428a5b1b,
112363         0x5b2501d7,0x61e267db,0xf2e4465b,0xf889bf04,0x76aa4cb8,0x4da3ae08 },
112364       { 0xe3e66861,0x3ef0fe26,0x3318b86d,0x5e772953,0x747396df,0xc3c35fbc,
112365         0x439ffd37,0x5115a29c,0xb2d70374,0xbfc4bd97,0x56246b9d,0x088630ea } },
112366     /* 84 */
112367     { { 0xb8a9e8c9,0xcd96866d,0x5bb8091e,0xa11963b8,0x045b3cd2,0xc7f90d53,
112368         0x80f36504,0x755a72b5,0x21d3751c,0x46f8b399,0x53c193de,0x4bffdc91 },
112369       { 0xb89554e7,0xcd15c049,0xf7a26be6,0x353c6754,0xbd41d970,0x79602370,
112370         0x12b176c0,0xde16470b,0x40c8809d,0x56ba1175,0xe435fb1e,0xe2db35c3 } },
112371     /* 85 */
112372     { { 0x6328e33f,0xd71e4aab,0xaf8136d1,0x5486782b,0x86d57231,0x07a4995f,
112373         0x1651a968,0xf1f0a5bd,0x76803b6d,0xa5dc5b24,0x42dda935,0x5c587cbc },
112374       { 0xbae8b4c0,0x2b6cdb32,0xb1331138,0x66d1598b,0x5d7e9614,0x4a23b2d2,
112375         0x74a8c05d,0x93e402a6,0xda7ce82e,0x45ac94e6,0xe463d465,0xeb9f8281 } },
112376     /* 86 */
112377     { { 0xfecf5b9b,0x34e0f9d1,0xf206966a,0xa115b12b,0x1eaa0534,0x5591cf3b,
112378         0xfb1558f9,0x5f0293cb,0x1bc703a5,0x1c8507a4,0x862c1f81,0x92e6b81c },
112379       { 0xcdaf24e3,0xcc9ebc66,0x72fcfc70,0x68917ecd,0x8157ba48,0x6dc9a930,
112380         0xb06ab2b2,0x5d425c08,0x36e929c4,0x362f8ce7,0x62e89324,0x09f6f57c } },
112381     /* 87 */
112382     { { 0xd29375fb,0x1c7d6b78,0xe35d1157,0xfabd851e,0x4243ea47,0xf6f62dcd,
112383         0x8fe30b0f,0x1dd92460,0xffc6e709,0x08166dfa,0x0881e6a7,0xc6c4c693 },
112384       { 0xd6a53fb0,0x20368f87,0x9eb4d1f9,0x38718e9f,0xafd7e790,0x03f08acd,
112385         0x72fe2a1c,0x0835eb44,0x88076e5d,0x7e050903,0xa638e731,0x538f765e } },
112386     /* 88 */
112387     { { 0xc2663b4b,0x0e0249d9,0x47cd38dd,0xe700ab5b,0x2c46559f,0xb192559d,
112388         0x4bcde66d,0x8f9f74a8,0x3e2aced5,0xad161523,0x3dd03a5b,0xc155c047 },
112389       { 0x3be454eb,0x346a8799,0x83b7dccd,0x66ee94db,0xab9d2abe,0x1f6d8378,
112390         0x7733f355,0x4a396dd2,0xf53553c2,0x419bd40a,0x731dd943,0xd0ead98d } },
112391     /* 89 */
112392     { { 0xec142408,0x908e0b0e,0x4114b310,0x98943cb9,0x1742b1d7,0x03dbf7d8,
112393         0x693412f4,0xd270df6b,0x8f69e20c,0xc5065494,0x697e43a1,0xa76a90c3 },
112394       { 0x4624825a,0xe0fa3384,0x8acc34c2,0x82e48c0b,0xe9a14f2b,0x7b24bd14,
112395         0x4db30803,0x4f5dd5e2,0x932da0a3,0x0c77a9e7,0x74c653dc,0x20db90f2 } },
112396     /* 90 */
112397     { { 0x0e6c5fd9,0x261179b7,0x6c982eea,0xf8bec123,0xd4957b7e,0x47683338,
112398         0x0a72f66a,0xcc47e664,0x1bad9350,0xbd54bf6a,0xf454e95a,0xdfbf4c6a },
112399       { 0x6907f4fa,0x3f7a7afa,0x865ca735,0x7311fae0,0x2a496ada,0x24737ab8,
112400         0x15feb79b,0x13e425f1,0xa1b93c21,0xe9e97c50,0x4ddd3eb5,0xb26b6eac } },
112401     /* 91 */
112402     { { 0x2a2e5f2b,0x81cab9f5,0xbf385ac4,0xf93caf29,0xc909963a,0xf4bf35c3,
112403         0x74c9143c,0x081e7300,0xc281b4c5,0x3ea57fa8,0x9b340741,0xe497905c },
112404       { 0x55ab3cfb,0xf556dd8a,0x518db6ad,0xd444b96b,0x5ef4b955,0x34f5425a,
112405         0xecd26aa3,0xdda7a3ac,0xda655e97,0xb57da11b,0xc2024c70,0x02da3eff } },
112406     /* 92 */
112407     { { 0x6481d0d9,0xe24b0036,0x818fdfe2,0x3740dbe5,0x190fda00,0xc1fc1f45,
112408         0x3cf27fde,0x329c9280,0x6934f43e,0x7435cb53,0x7884e8fe,0x2b505a5d },
112409       { 0x711adcc9,0x6cfcc6a6,0x531e21e1,0xf034325c,0x9b2a8a99,0xa2f4a967,
112410         0x3c21bdff,0x9d5f3842,0x31b57d66,0xb25c7811,0x0b8093b9,0xdb5344d8 } },
112411     /* 93 */
112412     { { 0xae50a2f5,0x0d72e667,0xe4a861d1,0x9b7f8d8a,0x330df1cb,0xa129f70f,
112413         0xe04fefc3,0xe90aa5d7,0xe72c3ae1,0xff561ecb,0xcdb955fa,0x0d8fb428 },
112414       { 0xd7663784,0xd2235f73,0x7e2c456a,0xc05baec6,0x2adbfccc,0xe5c292e4,
112415         0xefb110d5,0x4fd17988,0xd19d49f3,0x27e57734,0x84f679fe,0x188ac4ce } },
112416     /* 94 */
112417     { { 0xa796c53e,0x7ee344cf,0x0868009b,0xbbf6074d,0x474a1295,0x1f1594f7,
112418         0xac11632d,0x66776edc,0x04e2fa5a,0x1862278b,0xc854a89a,0x52665cf2 },
112419       { 0x8104ab58,0x7e376464,0x7204fd6d,0x16775913,0x44ea1199,0x86ca06a5,
112420         0x1c9240dd,0xaa3f765b,0x24746149,0x5f8501a9,0xdcd251d7,0x7b982e30 } },
112421     /* 95 */
112422     { { 0xc15f3060,0xe44e9efc,0xa87ebbe6,0x5ad62f2e,0xc79500d4,0x36499d41,
112423         0x336fa9d1,0xa66d6dc0,0x5afd3b1f,0xf8afc495,0xe5c9822b,0x1d8ccb24 },
112424       { 0x79d7584b,0x4031422b,0xea3f20dd,0xc54a0580,0x958468c5,0x3f837c8f,
112425         0xfbea7735,0x3d82f110,0x7dffe2fc,0x679a8778,0x20704803,0x48eba63b } },
112426     /* 96 */
112427     { { 0xdf46e2f6,0x89b10d41,0x19514367,0x13ab57f8,0x1d469c87,0x067372b9,
112428         0x4f6c5798,0x0c195afa,0x272c9acf,0xea43a12a,0x678abdac,0x9dadd8cb },
112429       { 0xe182579a,0xcce56c6b,0x2d26c2d8,0x86febadb,0x2a44745c,0x1c668ee1,
112430         0x98dc047a,0x580acd86,0x51b9ec2d,0x5a2b79cc,0x4054f6a0,0x007da608 } },
112431     /* 97 */
112432     { { 0x17b00dd0,0x9e3ca352,0x0e81a7a6,0x046779cb,0xd482d871,0xb999fef3,
112433         0xd9233fbc,0xe6f38134,0xf48cd0e0,0x112c3001,0x3c6c66ae,0x934e7576 },
112434       { 0xd73234dc,0xb44d4fc3,0x864eafc1,0xfcae2062,0x26bef21a,0x843afe25,
112435         0xf3b75fdf,0x61355107,0x794c2e6b,0x8367a5aa,0x8548a372,0x3d2629b1 } },
112436     /* 98 */
112437     { { 0x437cfaf8,0x6230618f,0x2032c299,0x5b8742cb,0x2293643a,0x949f7247,
112438         0x09464f79,0xb8040f1a,0x4f254143,0x049462d2,0x366c7e76,0xabd6b522 },
112439       { 0xd5338f55,0x119b392b,0x01495a0c,0x1a80a9ce,0xf8d7537e,0xf3118ca7,
112440         0x6bf4b762,0xb715adc2,0xa8482b6c,0x24506165,0x96a7c84d,0xd958d7c6 } },
112441     /* 99 */
112442     { { 0xbdc21f31,0x9ad8aa87,0x8063e58c,0xadb3cab4,0xb07dd7b8,0xefd86283,
112443         0x1be7c6b4,0xc7b9b762,0x015582de,0x2ef58741,0x299addf3,0xc970c52e },
112444       { 0x22f24d66,0x78f02e2a,0x74cc100a,0xefec1d10,0x09316e1a,0xaf2a6a39,
112445         0x5849dd49,0xce7c2205,0x96bffc4c,0x9c1fe75c,0x7ba06ec0,0xcad98fd2 } },
112446     /* 100 */
112447     { { 0xb648b73e,0xed76e2d0,0x1cfd285e,0xa9f92ce5,0x2ed13de1,0xa8c86c06,
112448         0xa5191a93,0x1d3a574e,0x1ad1b8bf,0x385cdf8b,0x47d2cfe3,0xbbecc28a },
112449       { 0x69cec548,0x98d326c0,0xf240a0b2,0x4f5bc1dd,0x29057236,0x241a7062,
112450         0xc68294a4,0x0fc6e9c5,0xa319f17a,0x4d04838b,0x9ffc1c6f,0x8b612cf1 } },
112451     /* 101 */
112452     { { 0x4c3830eb,0x9bb0b501,0x8ee0d0c5,0x3d08f83c,0x79ba9389,0xa4a62642,
112453         0x9cbc2914,0x5d5d4044,0x074c46f0,0xae9eb83e,0x74ead7d6,0x63bb758f },
112454       { 0xc6bb29e0,0x1c40d2ea,0x4b02f41e,0x95aa2d87,0x53cb199a,0x92989175,
112455         0x51584f6d,0xdd91bafe,0x31a1aaec,0x3715efb9,0x46780f9e,0xc1b6ae5b } },
112456     /* 102 */
112457     { { 0x42772f41,0xcded3e4b,0x3bcb79d1,0x3a700d5d,0x80feee60,0x4430d50e,
112458         0xf5e5d4bb,0x444ef1fc,0xe6e358ff,0xc660194f,0x6a91b43c,0xe68a2f32 },
112459       { 0x977fe4d2,0x5842775c,0x7e2a41eb,0x78fdef5c,0xff8df00e,0x5f3bec02,
112460         0x5852525d,0xf4b840cd,0x4e6988bd,0x0870483a,0xcc64b837,0x39499e39 } },
112461     /* 103 */
112462     { { 0xb08df5fe,0xfc05de80,0x63ba0362,0x0c12957c,0xd5cf1428,0xea379414,
112463         0x54ef6216,0xc559132a,0xb9e65cf8,0x33d5f12f,0x1695d663,0x09c60278 },
112464       { 0x61f7a2fb,0x3ac1ced4,0xd4f5eeb8,0xdd838444,0x8318fcad,0x82a38c6c,
112465         0xe9f1a864,0x315be2e5,0x442daf47,0x317b5771,0x95aa5f9e,0x81b5904a } },
112466     /* 104 */
112467     { { 0x8b21d232,0x6b6b1c50,0x8c2cba75,0x87f3dbc0,0xae9f0faf,0xa7e74b46,
112468         0xbb7b8079,0x036a0985,0x8d974a25,0x4f185b90,0xd9af5ec9,0x5aa7cef0 },
112469       { 0x57dcfffc,0xe0566a70,0xb8453225,0x6ea311da,0x23368aa9,0x72ea1a8d,
112470         0x48cd552d,0xed9b2083,0xc80ea435,0xb987967c,0x6c104173,0xad735c75 } },
112471     /* 105 */
112472     { { 0xcee76ef4,0xaea85ab3,0xaf1d2b93,0x44997444,0xeacb923f,0x0851929b,
112473         0x51e3bc0c,0xb080b590,0x59be68a2,0xc4ee1d86,0x64b26cda,0xf00de219 },
112474       { 0xf2e90d4d,0x8d7fb5c0,0x77d9ec64,0x00e219a7,0x5d1c491c,0xc4e6febd,
112475         0x1a8f4585,0x080e3754,0x48d2af9c,0x4a9b86c8,0xb6679851,0x2ed70db6 } },
112476     /* 106 */
112477     { { 0x586f25cb,0xaee44116,0xa0fcf70f,0xf7b6861f,0x18a350e8,0x55d2cd20,
112478         0x92dc286f,0x861bf3e5,0x6226aba7,0x9ab18ffa,0xa9857b03,0xd15827be },
112479       { 0x92e6acef,0x26c1f547,0xac1fbac3,0x422c63c8,0xfcbfd71d,0xa2d8760d,
112480         0xb2511224,0x35f6a539,0x048d1a21,0xbaa88fa1,0xebf999db,0x49f1abe9 } },
112481     /* 107 */
112482     { { 0xf7492b73,0x16f9f4f4,0xcb392b1a,0xcf28ec1e,0x69ca6ffc,0x45b130d4,
112483         0xb72efa58,0x28ba8d40,0x5ca066f5,0xace987c7,0x4ad022eb,0x3e399246 },
112484       { 0x752555bb,0x63a2d84e,0x9c2ae394,0xaaa93b4a,0xc89539ca,0xcd80424e,
112485         0xaa119a99,0x6d6b5a6d,0x379f2629,0xbd50334c,0xef3cc7d3,0x899e925e } },
112486     /* 108 */
112487     { { 0xbf825dc4,0xb7ff3651,0x40b9c462,0x0f741cc4,0x5cc4fb5b,0x771ff5a9,
112488         0x47fd56fe,0xcb9e9c9b,0x5626c0d3,0xbdf053db,0xf7e14098,0xa97ce675 },
112489       { 0x6c934f5e,0x68afe5a3,0xccefc46f,0x6cd5e148,0xd7a88586,0xc7758570,
112490         0xdd558d40,0x49978f5e,0x64ae00c1,0xa1d5088a,0xf1d65bb2,0x58f2a720 } },
112491     /* 109 */
112492     { { 0x3e4daedb,0x66fdda4a,0x65d1b052,0x38318c12,0x4c4bbf5c,0x28d910a2,
112493         0x78a9cd14,0x762fe5c4,0xd2cc0aee,0x08e5ebaa,0xca0c654c,0xd2cdf257 },
112494       { 0x08b717d2,0x48f7c58b,0x386cd07a,0x3807184a,0xae7d0112,0x3240f626,
112495         0xc43917b0,0x03e9361b,0x20aea018,0xf261a876,0x7e1e6372,0x53f556a4 } },
112496     /* 110 */
112497     { { 0x2f512a90,0xc84cee56,0x1b0ea9f1,0x24b3c004,0xe26cc1ea,0x0ee15d2d,
112498         0xf0c9ef7d,0xd848762c,0xd5341435,0x1026e9c5,0xfdb16b31,0x8f5b73dc },
112499       { 0xd2c75d95,0x1f69bef2,0xbe064dda,0x8d33d581,0x57ed35e6,0x8c024c12,
112500         0xc309c281,0xf8d435f9,0xd6960193,0xfd295061,0xe9e49541,0x66618d78 } },
112501     /* 111 */
112502     { { 0x8ce382de,0x571cfd45,0xde900dde,0x175806ee,0x34aba3b5,0x61849965,
112503         0xde7aec95,0xe899778a,0xff4aa97f,0xe8f00f6e,0x010b0c6d,0xae971cb5 },
112504       { 0x3af788f1,0x1827eebc,0xe413fe2d,0xd46229ff,0x4741c9b4,0x8a15455b,
112505         0xf8e424eb,0x5f02e690,0xdae87712,0x40a1202e,0x64944f6d,0x49b3bda2 } },
112506     /* 112 */
112507     { { 0x035b2d69,0xd63c6067,0x6bed91b0,0xb507150d,0x7afb39b2,0x1f35f82f,
112508         0x16012b66,0xb9bd9c01,0xed0a5f50,0x00d97960,0x2716f7c9,0xed705451 },
112509       { 0x127abdb4,0x1576eff4,0xf01e701c,0x6850d698,0x3fc87e2f,0x9fa7d749,
112510         0xb0ce3e48,0x0b6bcc6f,0xf7d8c1c0,0xf4fbe1f5,0x02719cc6,0xcf75230e } },
112511     /* 113 */
112512     { { 0x722d94ed,0x6761d6c2,0x3718820e,0xd1ec3f21,0x25d0e7c6,0x65a40b70,
112513         0xbaf3cf31,0xd67f830e,0xb93ea430,0x633b3807,0x0bc96c69,0x17faa0ea },
112514       { 0xdf866b98,0xe6bf3482,0xa9db52d4,0x205c1ee9,0xff9ab869,0x51ef9bbd,
112515         0x75eeb985,0x3863dad1,0xd3cf442a,0xef216c3b,0xf9c8e321,0x3fb228e3 } },
112516     /* 114 */
112517     { { 0x0760ac07,0x94f9b70c,0x9d79bf4d,0xf3c9ccae,0xc5ffc83d,0x73cea084,
112518         0xdc49c38e,0xef50f943,0xbc9e7330,0xf467a2ae,0x44ea7fba,0x5ee534b6 },
112519       { 0x03609e7f,0x20cb6272,0x62fdc9f0,0x09844355,0x0f1457f7,0xaf5c8e58,
112520         0xb4b25941,0xd1f50a6c,0x2ec82395,0x77cb247c,0xda3dca33,0xa5f3e1e5 } },
112521     /* 115 */
112522     { { 0x7d85fa94,0x023489d6,0x2db9ce47,0x0ba40537,0xaed7aad1,0x0fdf7a1f,
112523         0x9a4ccb40,0xa57b0d73,0x5b18967c,0x48fcec99,0xb7274d24,0xf30b5b6e },
112524       { 0xc81c5338,0x7ccb4773,0xa3ed6bd0,0xb85639e6,0x1d56eada,0x7d9df95f,
112525         0x0a1607ad,0xe256d57f,0x957574d6,0x6da7ffdc,0x01c7a8c4,0x65f84046 } },
112526     /* 116 */
112527     { { 0xcba1e7f1,0x8d45d0cb,0x02b55f64,0xef0a08c0,0x17e19892,0x771ca31b,
112528         0x4885907e,0xe1843ecb,0x364ce16a,0x67797ebc,0x8df4b338,0x816d2b2d },
112529       { 0x39aa8671,0xe870b0e5,0xc102b5f5,0x9f0db3e4,0x1720c697,0x34296659,
112530         0x613c0d2a,0x0ad4c89e,0x418ddd61,0x1af900b2,0xd336e20e,0xe087ca72 } },
112531     /* 117 */
112532     { { 0xaba10079,0x222831ff,0x6d64fff2,0x0dc5f87b,0x3e8cb330,0x44547907,
112533         0x702a33fb,0xe815aaa2,0x5fba3215,0x338d6b2e,0x79f549c8,0x0f7535cb },
112534       { 0x2ee95923,0x471ecd97,0xc6d1c09f,0x1e868b37,0xc666ef4e,0x2bc7b8ec,
112535         0x808a4bfc,0xf5416589,0x3fbc4d2e,0xf23e9ee2,0x2d75125b,0x4357236c } },
112536     /* 118 */
112537     { { 0xba9cdb1b,0xfe176d95,0x2f82791e,0x45a1ca01,0x4de4cca2,0x97654af2,
112538         0x5cc4bcb9,0xbdbf9d0e,0xad97ac0a,0xf6a7df50,0x61359fd6,0xc52112b0 },
112539       { 0x4f05eae3,0x696d9ce3,0xe943ac2b,0x903adc02,0x0848be17,0xa9075347,
112540         0x2a3973e5,0x1e20f170,0x6feb67e9,0xe1aacc1c,0xe16bc6b9,0x2ca0ac32 } },
112541     /* 119 */
112542     { { 0xef871eb5,0xffea12e4,0xa8bf0a7a,0x94c2f25d,0x78134eaa,0x4d1e4c2a,
112543         0x0360fb10,0x11ed16fb,0x85fc11be,0x4029b6db,0xf4d390fa,0x5e9f7ab7 },
112544       { 0x30646612,0x5076d72f,0xdda1d0d8,0xa0afed1d,0x85a1d103,0x29022257,
112545         0x4e276bcd,0xcb499e17,0x51246c3d,0x16d1da71,0x589a0443,0xc72d56d3 } },
112546     /* 120 */
112547     { { 0xdae5bb45,0xdf5ffc74,0x261bd6dc,0x99068c4a,0xaa98ec7b,0xdc0afa7a,
112548         0xf121e96d,0xedd2ee00,0x1414045c,0x163cc7be,0x335af50e,0xb0b1bbce },
112549       { 0x01a06293,0xd440d785,0x6552e644,0xcdebab7c,0x8c757e46,0x48cb8dbc,
112550         0x3cabe3cb,0x81f9cf78,0xb123f59a,0xddd02611,0xeeb3784d,0x3dc7b88e } },
112551     /* 121 */
112552     { { 0xc4741456,0xe1b8d398,0x6032a121,0xa9dfa902,0x1263245b,0x1cbfc86d,
112553         0x5244718c,0xf411c762,0x05b0fc54,0x96521d54,0xdbaa4985,0x1afab46e },
112554       { 0x8674b4ad,0xa75902ba,0x5ad87d12,0x486b43ad,0x36e0d099,0x72b1c736,
112555         0xbb6cd6d6,0x39890e07,0x59bace4e,0x8128999c,0x7b535e33,0xd8da430b } },
112556     /* 122 */
112557     { { 0xc6b75791,0x39f65642,0x21806bfb,0x050947a6,0x1362ef84,0x0ca3e370,
112558         0x8c3d2391,0x9bc60aed,0x732e1ddc,0x9b488671,0xa98ee077,0x12d10d9e },
112559       { 0x3651b7dc,0xb6f2822d,0x80abd138,0x6345a5ba,0x472d3c84,0x62033262,
112560         0xacc57527,0xd54a1d40,0x424447cb,0x6ea46b3a,0x2fb1a496,0x5bc41057 } },
112561     /* 123 */
112562     { { 0xa751cd0e,0xe70c57a3,0xeba3c7d6,0x190d8419,0x9d47d55a,0xb1c3bee7,
112563         0xf912c6d8,0xda941266,0x407a6ad6,0x12e9aacc,0x6e838911,0xd6ce5f11 },
112564       { 0x70e1f2ce,0x063ca97b,0x8213d434,0xa3e47c72,0x84df810a,0xa016e241,
112565         0xdfd881a4,0x688ad7b0,0xa89bf0ad,0xa37d99fc,0xa23c2d23,0xd8e3f339 } },
112566     /* 124 */
112567     { { 0x750bed6f,0xbdf53163,0x83e68b0a,0x808abc32,0x5bb08a33,0x85a36627,
112568         0x6b0e4abe,0xf72a3a0f,0xfaf0c6ad,0xf7716d19,0x5379b25f,0x22dcc020 },
112569       { 0xf9a56e11,0x7400bf8d,0x56a47f21,0x6cb8bad7,0x7a6eb644,0x7c97176f,
112570         0xd1f5b646,0xe8fd84f7,0x44ddb054,0x98320a94,0x1dde86f5,0x07071ba3 } },
112571     /* 125 */
112572     { { 0x98f8fcb9,0x6fdfa0e5,0x94d0d70c,0x89cec8e0,0x106d20a8,0xa0899397,
112573         0xba8acc9c,0x915bfb9a,0x5507e01c,0x1370c94b,0x8a821ffb,0x83246a60 },
112574       { 0xbe3c378f,0xa8273a9f,0x35a25be9,0x7e544789,0x4dd929d7,0x6cfa4972,
112575         0x365bd878,0x987fed9d,0x5c29a7ae,0x4982ac94,0x5ddd7ec5,0x4589a5d7 } },
112576     /* 126 */
112577     { { 0xa95540a9,0x9fabb174,0x0162c5b0,0x7cfb886f,0xea3dee18,0x17be766b,
112578         0xe88e624c,0xff7da41f,0x8b919c38,0xad0b71eb,0xf31ff9a9,0x86a522e0 },
112579       { 0x868bc259,0xbc8e6f72,0x3ccef9e4,0x6130c638,0x9a466555,0x09f1f454,
112580         0x19b2bfb4,0x8e6c0f09,0x0ca7bb22,0x945c46c9,0x4dafb67b,0xacd87168 } },
112581     /* 127 */
112582     { { 0x10c53841,0x090c72ca,0x55a4fced,0xc20ae01b,0xe10234ad,0x03f7ebd5,
112583         0x85892064,0xb3f42a6a,0xb4a14722,0xbdbc30c0,0x8ca124cc,0x971bc437 },
112584       { 0x517ff2ff,0x6f79f46d,0xecba947b,0x6a9c96e2,0x62925122,0x5e79f2f4,
112585         0x6a4e91f1,0x30a96bb1,0x2d4c72da,0x1147c923,0x5811e4df,0x65bc311f } },
112586     /* 128 */
112587     { { 0x139b3239,0x87c7dd7d,0x4d833bae,0x8b57824e,0x9fff0015,0xbcbc4878,
112588         0x909eaf1a,0x8ffcef8b,0xf1443a78,0x9905f4ee,0xe15cbfed,0x020dd4a2 },
112589       { 0xa306d695,0xca2969ec,0xb93caf60,0xdf940cad,0x87ea6e39,0x67f7fab7,
112590         0xf98c4fe5,0x0d0ee10f,0xc19cb91e,0xc646879a,0x7d1d7ab4,0x4b4ea50c } },
112591     /* 129 */
112592     { { 0x7a0db57e,0x19e40945,0x9a8c9702,0xe6017cad,0x1be5cff9,0xdbf739e5,
112593         0xa7a938a2,0x3646b3cd,0x68350dfc,0x04511085,0x56e098b5,0xad3bd6f3 },
112594       { 0xee2e3e3e,0x935ebabf,0x473926cb,0xfbd01702,0x9e9fb5aa,0x7c735b02,
112595         0x2e3feff0,0xc52a1b85,0x046b405a,0x9199abd3,0x39039971,0xe306fcec } },
112596     /* 130 */
112597     { { 0x23e4712c,0xd6d9aec8,0xc3c198ee,0x7ca8376c,0x31bebd8a,0xe6d83187,
112598         0xd88bfef3,0xed57aff3,0xcf44edc7,0x72a645ee,0x5cbb1517,0xd4e63d0b },
112599       { 0xceee0ecf,0x98ce7a1c,0x5383ee8e,0x8f012633,0xa6b455e8,0x3b879078,
112600         0xc7658c06,0xcbcd3d96,0x0783336a,0x721d6fe7,0x5a677136,0xf21a7263 } },
112601     /* 131 */
112602     { { 0x9586ba11,0x19d8b3cd,0x8a5c0480,0xd9e0aeb2,0x2230ef5c,0xe4261dbf,
112603         0x02e6bf09,0x095a9dee,0x80dc7784,0x8963723c,0x145157b1,0x5c97dbaf },
112604       { 0x4bc4503e,0x97e74434,0x85a6b370,0x0fb1cb31,0xcd205d4b,0x3e8df2be,
112605         0xf8f765da,0x497dd1bc,0x6c988a1a,0x92ef95c7,0x64dc4cfa,0x3f924baa } },
112606     /* 132 */
112607     { { 0x7268b448,0x6bf1b8dd,0xefd79b94,0xd4c28ba1,0xe4e3551f,0x2fa1f8c8,
112608         0x5c9187a9,0x769e3ad4,0x40326c0d,0x28843b4d,0x50d5d669,0xfefc8094 },
112609       { 0x90339366,0x30c85bfd,0x5ccf6c3a,0x4eeb56f1,0x28ccd1dc,0x0e72b149,
112610         0xf2ce978e,0x73ee85b5,0x3165bb23,0xcdeb2bf3,0x4e410abf,0x8106c923 } },
112611     /* 133 */
112612     { { 0x7d02f4ee,0xc8df0161,0x18e21225,0x8a781547,0x6acf9e40,0x4ea895eb,
112613         0x6e5a633d,0x8b000cb5,0x7e981ffb,0xf31d86d5,0x4475bc32,0xf5c8029c },
112614       { 0x1b568973,0x764561ce,0xa62996ec,0x2f809b81,0xda085408,0x9e513d64,
112615         0xe61ce309,0xc27d815d,0x272999e0,0x0da6ff99,0xfead73f7,0xbd284779 } },
112616     /* 134 */
112617     { { 0x9b1cdf2b,0x6033c2f9,0xbc5fa151,0x2a99cf06,0x12177b3b,0x7d27d259,
112618         0xc4485483,0xb1f15273,0x102e2297,0x5fd57d81,0xc7f6acb7,0x3d43e017 },
112619       { 0x3a70eb28,0x41a8bb0b,0x3e80b06b,0x67de2d8e,0x70c28de5,0x09245a41,
112620         0xa7b26023,0xad7dbcb1,0x2cbc6c1e,0x70b08a35,0x9b33041f,0xb504fb66 } },
112621     /* 135 */
112622     { { 0xf97a27c2,0xa8e85ab5,0xc10a011b,0x6ac5ec8b,0xffbcf161,0x55745533,
112623         0x65790a60,0x01780e85,0x99ee75b0,0xe451bf85,0x39c29881,0x8907a63b },
112624       { 0x260189ed,0x76d46738,0x47bd35cb,0x284a4436,0x20cab61e,0xd74e8c40,
112625         0x416cf20a,0x6264bf8c,0x5fd820ce,0xfa5a6c95,0xf24bb5fc,0xfa7154d0 } },
112626     /* 136 */
112627     { { 0x9b3f5034,0x18482cec,0xcd9e68fd,0x962d445a,0x95746f23,0x266fb1d6,
112628         0x58c94a4b,0xc66ade5a,0xed68a5b6,0xdbbda826,0x7ab0d6ae,0x05664a4d },
112629       { 0x025e32fc,0xbcd4fe51,0xa96df252,0x61a5aebf,0x31592a31,0xd88a07e2,
112630         0x98905517,0x5d9d94de,0x5fd440e7,0x96bb4010,0xe807db4c,0x1b0c47a2 } },
112631     /* 137 */
112632     { { 0x08223878,0x5c2a6ac8,0xe65a5558,0xba08c269,0x9bbc27fd,0xd22b1b9b,
112633         0x72b9607d,0x919171bf,0xe588dc58,0x9ab455f9,0x23662d93,0x6d54916e },
112634       { 0x3b1de0c1,0x8da8e938,0x804f278f,0xa84d186a,0xd3461695,0xbf4988cc,
112635         0xe10eb0cb,0xf5eae3be,0xbf2a66ed,0x1ff8b68f,0xc305b570,0xa68daf67 } },
112636     /* 138 */
112637     { { 0x44b2e045,0xc1004cff,0x4b1c05d4,0x91b5e136,0x88a48a07,0x53ae4090,
112638         0xea11bb1a,0x73fb2995,0x3d93a4ea,0x32048570,0x3bfc8a5f,0xcce45de8 },
112639       { 0xc2b3106e,0xaff4a97e,0xb6848b4f,0x9069c630,0xed76241c,0xeda837a6,
112640         0x6cc3f6cf,0x8a0daf13,0x3da018a8,0x199d049d,0xd9093ba3,0xf867c6b1 } },
112641     /* 139 */
112642     { { 0x56527296,0xe4d42a56,0xce71178d,0xae26c73d,0x6c251664,0x70a0adac,
112643         0x5dc0ae1d,0x813483ae,0xdaab2daf,0x7574eacd,0xc2d55f4f,0xc56b52dc },
112644       { 0x95f32923,0x872bc167,0x5bdd2a89,0x4be17581,0xa7699f00,0x9b57f1e7,
112645         0x3ac2de02,0x5fcd9c72,0x92377739,0x83af3ba1,0xfc50b97f,0xa64d4e2b } },
112646     /* 140 */
112647     { { 0x0e552b40,0x2172dae2,0xd34d52e8,0x62f49725,0x07958f98,0x7930ee40,
112648         0x751fdd74,0x56da2a90,0xf53e48c3,0xf1192834,0x8e53c343,0x34d2ac26 },
112649       { 0x13111286,0x1073c218,0xda9d9827,0x201dac14,0xee95d378,0xec2c29db,
112650         0x1f3ee0b1,0x9316f119,0x544ce71c,0x7890c9f0,0x27612127,0xd77138af } },
112651     /* 141 */
112652     { { 0x3b4ad1cd,0x78045e6d,0x4aa49bc1,0xcd86b94e,0xfd677a16,0x57e51f1d,
112653         0xfa613697,0xd9290935,0x34f4d893,0x7a3f9593,0x5d5fcf9b,0x8c9c248b },
112654       { 0x6f70d4e9,0x9f23a482,0x63190ae9,0x17273454,0x5b081a48,0x4bdd7c13,
112655         0x28d65271,0x1e2de389,0xe5841d1f,0x0bbaaa25,0x746772e5,0xc4c18a79 } },
112656     /* 142 */
112657     { { 0x593375ac,0x10ee2681,0x7dd5e113,0x4f3288be,0x240f3538,0x9a97b2fb,
112658         0x1de6b1e2,0xfa11089f,0x1351bc58,0x516da562,0x2dfa85b5,0x573b6119 },
112659       { 0x6cba7df5,0x89e96683,0x8c28ab40,0xf299be15,0xad43fcbf,0xe91c9348,
112660         0x9a1cefb3,0xe9bbc7cc,0x738b2775,0xc8add876,0x775eaa01,0x6e3b1f2e } },
112661     /* 143 */
112662     { { 0xb677788b,0x0365a888,0x3fd6173c,0x634ae8c4,0x9e498dbe,0x30498761,
112663         0xc8f779ab,0x08c43e6d,0x4c09aca9,0x068ae384,0x2018d170,0x2380c70b },
112664       { 0xa297c5ec,0xcf77fbc3,0xca457948,0xdacbc853,0x336bec7e,0x3690de04,
112665         0x14eec461,0x26bbac64,0x1f713abf,0xd1c23c7e,0xe6fd569e,0xf08bbfcd } },
112666     /* 144 */
112667     { { 0x84770ee3,0x5f8163f4,0x744a1706,0x0e0c7f94,0xe1b2d46d,0x9c8f05f7,
112668         0xd01fd99a,0x417eafe7,0x11440e5b,0x2ba15df5,0x91a6fbcf,0xdc5c552a },
112669       { 0xa270f721,0x86271d74,0xa004485b,0x32c0a075,0x8defa075,0x9d1a87e3,
112670         0xbf0d20fe,0xb590a7ac,0x8feda1f5,0x430c41c2,0x58f6ec24,0x454d2879 } },
112671     /* 145 */
112672     { { 0x7c525435,0x52b7a635,0x37c4bdbc,0x3d9ef57f,0xdffcc475,0x2bb93e9e,
112673         0x7710f3be,0xf7b8ba98,0x21b727de,0x42ee86da,0x2e490d01,0x55ac3f19 },
112674       { 0xc0c1c390,0x487e3a6e,0x446cde7b,0x036fb345,0x496ae951,0x089eb276,
112675         0x71ed1234,0xedfed4d9,0x900f0b46,0x661b0dd5,0x8582f0d3,0x11bd6f1b } },
112676     /* 146 */
112677     { { 0x076bc9d1,0x5cf9350f,0xcf3cd2c3,0x15d903be,0x25af031c,0x21cfc8c2,
112678         0x8b1cc657,0xe0ad3248,0x70014e87,0xdd9fb963,0x297f1658,0xf0f3a5a1 },
112679       { 0xf1f703aa,0xbb908fba,0x2f6760ba,0x2f9cc420,0x66a38b51,0x00ceec66,
112680         0x05d645da,0x4deda330,0xf7de3394,0xb9cf5c72,0x1ad4c906,0xaeef6502 } },
112681     /* 147 */
112682     { { 0x7a19045d,0x0583c8b1,0xd052824c,0xae7c3102,0xff6cfa58,0x2a234979,
112683         0x62c733c0,0xfe9dffc9,0x9c0c4b09,0x3a7fa250,0x4fe21805,0x516437bb },
112684       { 0xc2a23ddb,0x9454e3d5,0x289c104e,0x0726d887,0x4fd15243,0x8977d918,
112685         0x6d7790ba,0xc559e73f,0x465af85f,0x8fd3e87d,0x5feee46b,0xa2615c74 } },
112686     /* 148 */
112687     { { 0x4335167d,0xc8d607a8,0xe0f5c887,0x8b42d804,0x398d11f9,0x5f9f13df,
112688         0x20740c67,0x5aaa5087,0xa3d9234b,0x83da9a6a,0x2a54bad1,0xbd3a5c4e },
112689       { 0x2db0f658,0xdd13914c,0x5a3f373a,0x29dcb66e,0x5245a72b,0xbfd62df5,
112690         0x91e40847,0x19d18023,0xb136b1ae,0xd9df74db,0x3f93bc5b,0x72a06b6b } },
112691     /* 149 */
112692     { { 0xad19d96f,0x6da19ec3,0xfb2a4099,0xb342daa4,0x662271ea,0x0e61633a,
112693         0xce8c054b,0x3bcece81,0x8bd62dc6,0x7cc8e061,0xee578d8b,0xae189e19 },
112694       { 0xdced1eed,0x73e7a25d,0x7875d3ab,0xc1257f0a,0x1cfef026,0x2cb2d5a2,
112695         0xb1fdf61c,0xd98ef39b,0x24e83e6c,0xcd8e6f69,0xc7b7088b,0xd71e7076 } },
112696     /* 150 */
112697     { { 0x9d4245bf,0x33936830,0x2ac2953b,0x22d96217,0x56c3c3cd,0xb3bf5a82,
112698         0x0d0699e8,0x50c9be91,0x8f366459,0xec094463,0x513b7c35,0x6c056dba },
112699       { 0x045ab0e3,0x687a6a83,0x445c9295,0x8d40b57f,0xa16f5954,0x0f345048,
112700         0x3d8f0a87,0x64b5c639,0x9f71c5e2,0x106353a2,0x874f0dd4,0xdd58b475 } },
112701     /* 151 */
112702     { { 0x62230c72,0x67ec084f,0x481385e3,0xf14f6cca,0x4cda7774,0xf58bb407,
112703         0xaa2dbb6b,0xe15011b1,0x0c035ab1,0xd488369d,0x8245f2fd,0xef83c24a },
112704       { 0x9fdc2538,0xfb57328f,0x191fe46a,0x79808293,0x32ede548,0xe28f5c44,
112705         0xea1a022c,0x1b3cda99,0x3df2ec7f,0x39e639b7,0x760e9a18,0x77b6272b } },
112706     /* 152 */
112707     { { 0xa65d56d5,0x2b1d51bd,0x7ea696e0,0x3a9b71f9,0x9904f4c4,0x95250ecc,
112708         0xe75774b7,0x8bc4d6eb,0xeaeeb9aa,0x0e343f8a,0x930e04cb,0xc473c1d1 },
112709       { 0x064cd8ae,0x282321b1,0x5562221c,0xf4b4371e,0xd1bf1221,0xc1cc81ec,
112710         0xe2c8082f,0xa52a07a9,0xba64a958,0x350d8e59,0x6fb32c9a,0x29e4f3de } },
112711     /* 153 */
112712     { { 0xba89aaa5,0x0aa9d56c,0xc4c6059e,0xf0208ac0,0xbd6ddca4,0x7400d9c6,
112713         0xf2c2f74a,0xb384e475,0xb1562dd3,0x4c1061fc,0x2e153b8d,0x3924e248 },
112714       { 0x849808ab,0xf38b8d98,0xa491aa36,0x29bf3260,0x88220ede,0x85159ada,
112715         0xbe5bc422,0x8b47915b,0xd7300967,0xa934d72e,0x2e515d0d,0xc4f30398 } },
112716     /* 154 */
112717     { { 0x1b1de38b,0xe3e9ee42,0x42636760,0xa124e25a,0x90165b1a,0x90bf73c0,
112718         0x146434c5,0x21802a34,0x2e1fa109,0x54aa83f2,0xed9c51e9,0x1d4bd03c },
112719       { 0x798751e6,0xc2d96a38,0x8c3507f5,0xed27235f,0xc8c24f88,0xb5fb80e2,
112720         0xd37f4f78,0xf873eefa,0xf224ba96,0x7229fd74,0x9edd7149,0x9dcd9199 } },
112721     /* 155 */
112722     { { 0x4e94f22a,0xee9f81a6,0xf71ec341,0xe5609892,0xa998284e,0x6c818ddd,
112723         0x3b54b098,0x9fd47295,0x0e8a7cc9,0x47a6ac03,0xb207a382,0xde684e5e },
112724       { 0x2b6b956b,0x4bdd1ecd,0xf01b3583,0x09084414,0x55233b14,0xe2f80b32,
112725         0xef5ebc5e,0x5a0fec54,0xbf8b29a2,0x74cf25e6,0x7f29e014,0x1c757fa0 } },
112726     /* 156 */
112727     { { 0xeb0fdfe4,0x1bcb5c4a,0xf0899367,0xd7c649b3,0x05bc083b,0xaef68e3f,
112728         0xa78aa607,0x57a06e46,0x21223a44,0xa2136ecc,0x52f5a50b,0x89bd6484 },
112729       { 0x4455f15a,0x724411b9,0x08a9c0fd,0x23dfa970,0x6db63bef,0x7b0da4d1,
112730         0xfb162443,0x6f8a7ec1,0xe98284fb,0xc1ac9cee,0x33566022,0x085a582b } },
112731     /* 157 */
112732     { { 0xec1f138a,0x15cb61f9,0x668f0c28,0x11c9a230,0xdf93f38f,0xac829729,
112733         0x4048848d,0xcef25698,0x2bba8fbf,0x3f686da0,0x111c619a,0xed5fea78 },
112734       { 0xd6d1c833,0x9b4f73bc,0x86e7bf80,0x50951606,0x042b1d51,0xa2a73508,
112735         0x5fb89ec2,0x9ef6ea49,0x5ef8b892,0xf1008ce9,0x9ae8568b,0x78a7e684 } },
112736     /* 158 */
112737     { { 0x10470cd8,0x3fe83a7c,0xf86df000,0x92734682,0xda9409b5,0xb5dac06b,
112738         0x94939c5f,0x1e7a9660,0x5cc116dc,0xdec6c150,0x66bac8cc,0x1a52b408 },
112739       { 0x6e864045,0x5303a365,0x9139efc1,0x45eae72a,0x6f31d54f,0x83bec646,
112740         0x6e958a6d,0x2fb4a86f,0x4ff44030,0x6760718e,0xe91ae0df,0x008117e3 } },
112741     /* 159 */
112742     { { 0x384310a2,0x5d5833ba,0x1fd6c9fc,0xbdfb4edc,0x849c4fb8,0xb9a4f102,
112743         0x581c1e1f,0xe5fb239a,0xd0a9746d,0xba44b2e7,0x3bd942b9,0x78f7b768 },
112744       { 0xc87607ae,0x076c8ca1,0xd5caaa7e,0x82b23c2e,0x2763e461,0x6a581f39,
112745         0x3886df11,0xca8a5e4a,0x264e7f22,0xc87e90cf,0x215cfcfc,0x04f74870 } },
112746     /* 160 */
112747     { { 0x141d161c,0x5285d116,0x93c4ed17,0x67cd2e0e,0x7c36187e,0x12c62a64,
112748         0xed2584ca,0xf5329539,0x42fbbd69,0xc4c777c4,0x1bdfc50a,0x107de776 },
112749       { 0xe96beebd,0x9976dcc5,0xa865a151,0xbe2aff95,0x9d8872af,0x0e0a9da1,
112750         0xa63c17cc,0x5e357a3d,0xe15cc67c,0xd31fdfd8,0x7970c6d8,0xc44bbefd } },
112751     /* 161 */
112752     { { 0x4c0c62f1,0x703f83e2,0x4e195572,0x9b1e28ee,0xfe26cced,0x6a82858b,
112753         0xc43638fa,0xd381c84b,0xa5ba43d8,0x94f72867,0x10b82743,0x3b4a783d },
112754       { 0x7576451e,0xee1ad7b5,0x14b6b5c8,0xc3d0b597,0xfcacc1b8,0x3dc30954,
112755         0x472c9d7b,0x55df110e,0x02f8a328,0x97c86ed7,0x88dc098f,0xd0433413 } },
112756     /* 162 */
112757     { { 0x2ca8f2fe,0x1a60d152,0x491bd41f,0x61640948,0x58dfe035,0x6dae29a5,
112758         0x278e4863,0x9a615bea,0x9ad7c8e5,0xbbdb4477,0x2ceac2fc,0x1c706630 },
112759       { 0x99699b4b,0x5e2b54c6,0x239e17e8,0xb509ca6d,0xea063a82,0x728165fe,
112760         0xb6a22e02,0x6b5e609d,0xb26ee1df,0x12813905,0x439491fa,0x07b9f722 } },
112761     /* 163 */
112762     { { 0x48ff4e49,0x1592ec14,0x6d644129,0x3e4e9f17,0x1156acc0,0x7acf8288,
112763         0xbb092b0b,0x5aa34ba8,0x7d38393d,0xcd0f9022,0xea4f8187,0x416724dd },
112764       { 0xc0139e73,0x3c4e641c,0x91e4d87d,0xe0fe46cf,0xcab61f8a,0xedb3c792,
112765         0xd3868753,0x4cb46de4,0x20f1098a,0xe449c21d,0xf5b8ea6e,0x5e5fd059 } },
112766     /* 164 */
112767     { { 0x75856031,0x7fcadd46,0xeaf2fbd0,0x89c7a4cd,0x7a87c480,0x1af523ce,
112768         0x61d9ae90,0xe5fc1095,0xbcdb95f5,0x3fb5864f,0xbb5b2c7d,0xbeb5188e },
112769       { 0x3ae65825,0x3d1563c3,0x0e57d641,0x116854c4,0x1942ebd3,0x11f73d34,
112770         0xc06955b3,0x24dc5904,0x995a0a62,0x8a0d4c83,0x5d577b7d,0xfb26b86d } },
112771     /* 165 */
112772     { { 0xc686ae17,0xc53108e7,0xd1c1da56,0x9090d739,0x9aec50ae,0x4583b013,
112773         0xa49a6ab2,0xdd9a088b,0xf382f850,0x28192eea,0xf5fe910e,0xcc8df756 },
112774       { 0x9cab7630,0x877823a3,0xfb8e7fc1,0x64984a9a,0x364bfc16,0x5448ef9c,
112775         0xc44e2a9a,0xbbb4f871,0x435c95e9,0x901a41ab,0xaaa50a06,0xc6c23e5f } },
112776     /* 166 */
112777     { { 0x9034d8dd,0xb78016c1,0x0b13e79b,0x856bb44b,0xb3241a05,0x85c6409a,
112778         0x2d78ed21,0x8d2fe19a,0x726eddf2,0xdcc7c26d,0x25104f04,0x3ccaff5f },
112779       { 0x6b21f843,0x397d7edc,0xe975de4c,0xda88e4dd,0x4f5ab69e,0x5273d396,
112780         0x9aae6cc0,0x537680e3,0x3e6f9461,0xf749cce5,0x957bffd3,0x021ddbd9 } },
112781     /* 167 */
112782     { { 0x777233cf,0x7b64585f,0x0942a6f0,0xfe6771f6,0xdfe6eef0,0x636aba7a,
112783         0x86038029,0x63bbeb56,0xde8fcf36,0xacee5842,0xd4a20524,0x48d9aa99 },
112784       { 0x0da5e57a,0xcff7a74c,0xe549d6c9,0xc232593c,0xf0f2287b,0x68504bcc,
112785         0xbc8360b5,0x6d7d098d,0x5b402f41,0xeac5f149,0xb87d1bf1,0x61936f11 } },
112786     /* 168 */
112787     { { 0xb8153a9d,0xaa9da167,0x9e83ecf0,0xa49fe3ac,0x1b661384,0x14c18f8e,
112788         0x38434de1,0x61c24dab,0x283dae96,0x3d973c3a,0x82754fc9,0xc99baa01 },
112789       { 0x4c26b1e3,0x477d198f,0xa7516202,0x12e8e186,0x362addfa,0x386e52f6,
112790         0xc3962853,0x31e8f695,0x6aaedb60,0xdec2af13,0x29cf74ac,0xfcfdb4c6 } },
112791     /* 169 */
112792     { { 0xcca40298,0x6b3ee958,0xf2f5d195,0xc3878153,0xed2eae5b,0x0c565630,
112793         0x3a697cf2,0xd089b37e,0xad5029ea,0xc2ed2ac7,0x0f0dda6a,0x7e5cdfad },
112794       { 0xd9b86202,0xf98426df,0x4335e054,0xed1960b1,0x3f14639e,0x1fdb0246,
112795         0x0db6c670,0x17f709c3,0x773421e1,0xbfc687ae,0x26c1a8ac,0x13fefc4a } },
112796     /* 170 */
112797     { { 0x7ffa0a5f,0xe361a198,0xc63fe109,0xf4b26102,0x6c74e111,0x264acbc5,
112798         0x77abebaf,0x4af445fa,0x24cddb75,0x448c4fdd,0x44506eea,0x0b13157d },
112799       { 0x72e9993d,0x22a6b159,0x85e5ecbe,0x2c3c57e4,0xfd83e1a1,0xa673560b,
112800         0xc3b8c83b,0x6be23f82,0x40bbe38e,0x40b13a96,0xad17399b,0x66eea033 } },
112801     /* 171 */
112802     { { 0xb4c6c693,0x49fc6e95,0x36af7d38,0xefc735de,0x35fe42fc,0xe053343d,
112803         0x6a9ab7c3,0xf0aa427c,0x4a0fcb24,0xc79f0436,0x93ebbc50,0x16287243 },
112804       { 0x16927e1e,0x5c3d6bd0,0x673b984c,0x40158ed2,0x4cd48b9a,0xa7f86fc8,
112805         0x60ea282d,0x1643eda6,0xe2a1beed,0x45b393ea,0x19571a94,0x664c839e } },
112806     /* 172 */
112807     { { 0x27eeaf94,0x57745750,0xea99e1e7,0x2875c925,0x5086adea,0xc127e7ba,
112808         0x86fe424f,0x765252a0,0x2b6c0281,0x1143cc6c,0xd671312d,0xc9bb2989 },
112809       { 0x51acb0a5,0x880c337c,0xd3c60f78,0xa3710915,0x9262b6ed,0x496113c0,
112810         0x9ce48182,0x5d25d9f8,0xb3813586,0x53b6ad72,0x4c0e159c,0x0ea3bebc } },
112811     /* 173 */
112812     { { 0xc5e49bea,0xcaba450a,0x7c05da59,0x684e5415,0xde7ac36c,0xa2e9cab9,
112813         0x2e6f957b,0x4ca79b5f,0x09b817b1,0xef7b0247,0x7d89df0f,0xeb304990 },
112814       { 0x46fe5096,0x508f7307,0x2e04eaaf,0x695810e8,0x3512f76c,0x88ef1bd9,
112815         0x3ebca06b,0x77661351,0xccf158b7,0xf7d4863a,0x94ee57da,0xb2a81e44 } },
112816     /* 174 */
112817     { { 0x6d53e6ba,0xff288e5b,0x14484ea2,0xa90de1a9,0xed33c8ec,0x2fadb60c,
112818         0x28b66a40,0x579d6ef3,0xec24372d,0x4f2dd6dd,0x1d66ec7d,0xe9e33fc9 },
112819       { 0x039eab6e,0x110899d2,0x3e97bb5e,0xa31a667a,0xcfdce68e,0x6200166d,
112820         0x5137d54b,0xbe83ebae,0x4800acdf,0x085f7d87,0x0c6f8c86,0xcf4ab133 } },
112821     /* 175 */
112822     { { 0x931e08fb,0x03f65845,0x1506e2c0,0x6438551e,0x9c36961f,0x5791f0dc,
112823         0xe3dcc916,0x68107b29,0xf495d2ca,0x83242374,0x6ee5895b,0xd8cfb663 },
112824       { 0xa0349b1b,0x525e0f16,0x4a0fab86,0x33cd2c6c,0x2af8dda9,0x46c12ee8,
112825         0x71e97ad3,0x7cc424ba,0x37621eb0,0x69766ddf,0xa5f0d390,0x95565f56 } },
112826     /* 176 */
112827     { { 0x1a0f5e94,0xe0e7bbf2,0x1d82d327,0xf771e115,0xceb111fa,0x10033e3d,
112828         0xd3426638,0xd269744d,0x00d01ef6,0xbdf2d9da,0xa049ceaf,0x1cb80c71 },
112829       { 0x9e21c677,0x17f18328,0x19c8f98b,0x6452af05,0x80b67997,0x35b9c5f7,
112830         0x40f8f3d4,0x5c2e1cbe,0x66d667ca,0x43f91656,0xcf9d6e79,0x9faaa059 } },
112831     /* 177 */
112832     { { 0x0a078fe6,0x8ad24618,0x464fd1dd,0xf6cc73e6,0xc3e37448,0x4d2ce34d,
112833         0xe3271b5f,0x624950c5,0xefc5af72,0x62910f5e,0xaa132bc6,0x8b585bf8 },
112834       { 0xa839327f,0x11723985,0x4aac252f,0x34e2d27d,0x6296cc4e,0x402f59ef,
112835         0x47053de9,0x00ae055c,0x28b4f09b,0xfc22a972,0xfa0c180e,0xa9e86264 } },
112836     /* 178 */
112837     { { 0xbc310ecc,0x0b7b6224,0x67fa14ed,0x8a1a74f1,0x7214395c,0x87dd0960,
112838         0xf5c91128,0xdf1b3d09,0x86b264a8,0x39ff23c6,0x3e58d4c5,0xdc2d49d0 },
112839       { 0xa9d6f501,0x2152b7d3,0xc04094f7,0xf4c32e24,0xd938990f,0xc6366596,
112840         0x94fb207f,0x084d078f,0x328594cb,0xfd99f1d7,0xcb2d96b3,0x36defa64 } },
112841     /* 179 */
112842     { { 0x13ed7cbe,0x4619b781,0x9784bd0e,0x95e50015,0x2c7705fe,0x2a32251c,
112843         0x5f0dd083,0xa376af99,0x0361a45b,0x55425c6c,0x1f291e7b,0x812d2cef },
112844       { 0x5fd94972,0xccf581a0,0xe56dc383,0x26e20e39,0x63dbfbf0,0x0093685d,
112845         0x36b8c575,0x1fc164cc,0x390ef5e7,0xb9c5ab81,0x26908c66,0x40086beb } },
112846     /* 180 */
112847     { { 0x37e3c115,0xe5e54f79,0xc1445a8a,0x69b8ee8c,0xb7659709,0x79aedff2,
112848         0x1b46fbe6,0xe288e163,0xd18d7bb7,0xdb4844f0,0x48aa6424,0xe0ea23d0 },
112849       { 0xf3d80a73,0x714c0e4e,0x3bd64f98,0x87a0aa9e,0x2ec63080,0x8844b8a8,
112850         0x255d81a3,0xe0ac9c30,0x455397fc,0x86151237,0x2f820155,0x0b979464 } },
112851     /* 181 */
112852     { { 0x4ae03080,0x127a255a,0x580a89fb,0x232306b4,0x6416f539,0x04e8cd6a,
112853         0x13b02a0e,0xaeb70dee,0x4c09684a,0xa3038cf8,0x28e433ee,0xa710ec3c },
112854       { 0x681b1f7d,0x77a72567,0x2fc28170,0x86fbce95,0xf5735ac8,0xd3408683,
112855         0x6bd68e93,0x3a324e2a,0xc027d155,0x7ec74353,0xd4427177,0xab60354c } },
112856     /* 182 */
112857     { { 0xef4c209d,0x32a5342a,0x08d62704,0x2ba75274,0xc825d5fe,0x4bb4af6f,
112858         0xd28e7ff1,0x1c3919ce,0xde0340f6,0x1dfc2fdc,0x29f33ba9,0xc6580baf },
112859       { 0x41d442cb,0xae121e75,0x3a4724e4,0x4c7727fd,0x524f3474,0xe556d6a4,
112860         0x785642a2,0x87e13cc7,0xa17845fd,0x182efbb1,0x4e144857,0xdcec0cf1 } },
112861     /* 183 */
112862     { { 0xe9539819,0x1cb89541,0x9d94dbf1,0xc8cb3b4f,0x417da578,0x1d353f63,
112863         0x8053a09e,0xb7a697fb,0xc35d8b78,0x8d841731,0xb656a7a9,0x85748d6f },
112864       { 0xc1859c5d,0x1fd03947,0x535d22a2,0x6ce965c1,0x0ca3aadc,0x1966a13e,
112865         0x4fb14eff,0x9802e41d,0x76dd3fcd,0xa9048cbb,0xe9455bba,0x89b182b5 } },
112866     /* 184 */
112867     { { 0x43360710,0xd777ad6a,0x55e9936b,0x841287ef,0x04a21b24,0xbaf5c670,
112868         0x35ad86f1,0xf2c0725f,0xc707e72e,0x338fa650,0xd8883e52,0x2bf8ed2e },
112869       { 0xb56e0d6a,0xb0212cf4,0x6843290c,0x50537e12,0x98b3dc6f,0xd8b184a1,
112870         0x0210b722,0xd2be9a35,0x559781ee,0x407406db,0x0bc18534,0x5a78d591 } },
112871     /* 185 */
112872     { { 0xd748b02c,0x4d57aa2a,0xa12b3b95,0xbe5b3451,0x64711258,0xadca7a45,
112873         0x322153db,0x597e091a,0x32eb1eab,0xf3271006,0x2873f301,0xbd9adcba },
112874       { 0x38543f7f,0xd1dc79d1,0x921b1fef,0x00022092,0x1e5df8ed,0x86db3ef5,
112875         0x9e6b944a,0x888cae04,0x791a32b4,0x71bd29ec,0xa6d1c13e,0xd3516206 } },
112876     /* 186 */
112877     { { 0x55924f43,0x2ef6b952,0x4f9de8d5,0xd2f401ae,0xadc68042,0xfc73e8d7,
112878         0x0d9d1bb4,0x627ea70c,0xbbf35679,0xc3bb3e3e,0xd882dee4,0x7e8a254a },
112879       { 0xb5924407,0x08906f50,0xa1ad444a,0xf14a0e61,0x65f3738e,0xaa0efa21,
112880         0xae71f161,0xd60c7dd6,0xf175894d,0x9e8390fa,0x149f4c00,0xd115cd20 } },
112881     /* 187 */
112882     { { 0xa52abf77,0x2f2e2c1d,0x54232568,0xc2a0dca5,0x54966dcc,0xed423ea2,
112883         0xcd0dd039,0xe48c93c7,0x176405c7,0x1e54a225,0x70d58f2e,0x1efb5b16 },
112884       { 0x94fb1471,0xa751f9d9,0x67d2941d,0xfdb31e1f,0x53733698,0xa6c74eb2,
112885         0x89a0f64a,0xd3155d11,0xa4b8d2b6,0x4414cfe4,0xf7a8e9e3,0x8d5a4be8 } },
112886     /* 188 */
112887     { { 0x52669e98,0x5c96b4d4,0x8fd42a03,0x4547f922,0xd285174e,0xcf5c1319,
112888         0x064bffa0,0x805cd1ae,0x246d27e7,0x50e8bc4f,0xd5781e11,0xf89ef98f },
112889       { 0xdee0b63f,0xb4ff95f6,0x222663a4,0xad850047,0x4d23ce9c,0x02691860,
112890         0x50019f59,0x3e5309ce,0x69a508ae,0x27e6f722,0x267ba52c,0xe9376652 } },
112891     /* 189 */
112892     { { 0xc0368708,0xa04d289c,0x5e306e1d,0xc458872f,0x33112fea,0x76fa23de,
112893         0x6efde42e,0x718e3974,0x1d206091,0xf0c98cdc,0x14a71987,0x5fa3ca62 },
112894       { 0xdcaa9f2a,0xeee8188b,0x589a860d,0x312cc732,0xc63aeb1f,0xf9808dd6,
112895         0x4ea62b53,0x70fd43db,0x890b6e97,0x2c2bfe34,0xfa426aa6,0x105f863c } },
112896     /* 190 */
112897     { { 0xb38059ad,0x0b29795d,0x90647ea0,0x5686b77e,0xdb473a3e,0xeff0470e,
112898         0xf9b6d1e2,0x278d2340,0xbd594ec7,0xebbff95b,0xd3a7f23d,0xf4b72334 },
112899       { 0xa5a83f0b,0x2a285980,0x9716a8b3,0x0786c41a,0x22511812,0x138901bd,
112900         0xe2fede6e,0xd1b55221,0xdf4eb590,0x0806e264,0x762e462e,0x6c4c897e } },
112901     /* 191 */
112902     { { 0xb4b41d9d,0xd10b905f,0x4523a65b,0x826ca466,0xb699fa37,0x535bbd13,
112903         0x73bc8f90,0x5b9933d7,0xcd2118ad,0x9332d61f,0xd4a65fd0,0x158c693e },
112904       { 0xe6806e63,0x4ddfb2a8,0xb5de651b,0xe31ed3ec,0x819bc69a,0xf9460e51,
112905         0x2c76b1f8,0x6229c0d6,0x901970a3,0xbb78f231,0x9cee72b8,0x31f3820f } },
112906     /* 192 */
112907     { { 0xc09e1c72,0xe931caf2,0x12990cf4,0x0715f298,0x943262d8,0x33aad81d,
112908         0x73048d3f,0x5d292b7a,0xdc7415f6,0xb152aaa4,0x0fd19587,0xc3d10fd9 },
112909       { 0x75ddadd0,0xf76b35c5,0x1e7b694c,0x9f5f4a51,0xc0663025,0x2f1ab7eb,
112910         0x920260b0,0x01c9cc87,0x05d39da6,0xc4b1f61a,0xeb4a9c4e,0x6dcd76c4 } },
112911     /* 193 */
112912     { { 0xfdc83f01,0x0ba0916f,0x9553e4f9,0x354c8b44,0xffc5e622,0xa6cc511a,
112913         0xe95be787,0xb954726a,0x75b41a62,0xcb048115,0xebfde989,0xfa2ae6cd },
112914       { 0x0f24659a,0x6376bbc7,0x4c289c43,0x13a999fd,0xec9abd8b,0xc7134184,
112915         0xa789ab04,0x28c02bf6,0xd3e526ec,0xff841ebc,0x640893a8,0x442b191e } },
112916     /* 194 */
112917     { { 0xfa2b6e20,0x4cac6c62,0xf6d69861,0x97f29e9b,0xbc96d12d,0x228ab1db,
112918         0x5e8e108d,0x6eb91327,0x40771245,0xd4b3d4d1,0xca8a803a,0x61b20623 },
112919       { 0xa6a560b1,0x2c2f3b41,0x3859fcf4,0x879e1d40,0x024dbfc3,0x7cdb5145,
112920         0x3bfa5315,0x55d08f15,0xaa93823a,0x2f57d773,0xc6a2c9a2,0xa97f259c } },
112921     /* 195 */
112922     { { 0xe58edbbb,0xc306317b,0x79dfdf13,0x25ade51c,0x16d83dd6,0x6b5beaf1,
112923         0x1dd8f925,0xe8038a44,0xb2a87b6b,0x7f00143c,0xf5b438de,0xa885d00d },
112924       { 0xcf9e48bd,0xe9f76790,0xa5162768,0xf0bdf9f0,0xad7b57cb,0x0436709f,
112925         0xf7c15db7,0x7e151c12,0x5d90ee3b,0x3514f022,0x2c361a8d,0x2e84e803 } },
112926     /* 196 */
112927     { { 0x563ec8d8,0x2277607d,0xe3934cb7,0xa661811f,0xf58fd5de,0x3ca72e7a,
112928         0x62294c6a,0x7989da04,0xf6bbefe9,0x88b3708b,0x53ed7c82,0x0d524cf7 },
112929       { 0x2f30c073,0x69f699ca,0x9dc1dcf3,0xf0fa264b,0x05f0aaf6,0x44ca4568,
112930         0xd19b9baf,0x0f5b23c7,0xeabd1107,0x39193f41,0x2a7c9b83,0x9e3e10ad } },
112931     /* 197 */
112932     { { 0xd4ae972f,0xa90824f0,0xc6e846e7,0x43eef02b,0x29d2160a,0x7e460612,
112933         0xfe604e91,0x29a178ac,0x4eb184b2,0x23056f04,0xeb54cdf4,0x4fcad55f },
112934       { 0xae728d15,0xa0ff96f3,0xc6a00331,0x8a2680c6,0x7ee52556,0x5f84cae0,
112935         0xc5a65dad,0x5e462c3a,0xe2d23f4f,0x5d2b81df,0xc5b1eb07,0x6e47301b } },
112936     /* 198 */
112937     { { 0xaf8219b9,0x77411d68,0x51b1907a,0xcb883ce6,0x101383b5,0x25c87e57,
112938         0x982f970d,0x9c7d9859,0x118305d2,0xaa6abca5,0x9013a5db,0x725fed2f },
112939       { 0xababd109,0x487cdbaf,0x87586528,0xc0f8cf56,0x8ad58254,0xa02591e6,
112940         0xdebbd526,0xc071b1d1,0x961e7e31,0x927dfe8b,0x9263dfe1,0x55f895f9 } },
112941     /* 199 */
112942     { { 0xb175645b,0xf899b00d,0xb65b4b92,0x51f3a627,0xb67399ef,0xa2f3ac8d,
112943         0xe400bc20,0xe717867f,0x1967b952,0x42cc9020,0x3ecd1de1,0x3d596751 },
112944       { 0xdb979775,0xd41ebcde,0x6a2e7e88,0x99ba61bc,0x321504f2,0x039149a5,
112945         0x27ba2fad,0xe7dc2314,0xb57d8368,0x9f556308,0x57da80a7,0x2b6d16c9 } },
112946     /* 200 */
112947     { { 0x279ad982,0x84af5e76,0x9c8b81a6,0x9bb4c92d,0x0e698e67,0xd79ad44e,
112948         0x265fc167,0xe8be9048,0x0c3a4ccc,0xf135f7e6,0xb8863a33,0xa0a10d38 },
112949       { 0xd386efd9,0xe197247c,0xb52346c2,0x0eefd3f9,0x78607bc8,0xc22415f9,
112950         0x508674ce,0xa2a8f862,0xc8c9d607,0xa72ad09e,0x50fa764f,0xcd9f0ede } },
112951     /* 201 */
112952     { { 0xd1a46d4d,0x063391c7,0x9eb01693,0x2df51c11,0x849e83de,0xc5849800,
112953         0x8ad08382,0x48fd09aa,0xaa742736,0xa405d873,0xe1f9600c,0xee49e61e },
112954       { 0x48c76f73,0xd76676be,0x01274b2a,0xd9c100f6,0x83f8718d,0x110bb67c,
112955         0x02fc0d73,0xec85a420,0x744656ad,0xc0449e1e,0x37d9939b,0x28ce7376 } },
112956     /* 202 */
112957     { { 0x44544ac7,0x97e9af72,0xba010426,0xf2c658d5,0xfb3adfbd,0x732dec39,
112958         0xa2df0b07,0xd12faf91,0x2171e208,0x8ac26725,0x5b24fa54,0xf820cdc8 },
112959       { 0x94f4cf77,0x307a6eea,0x944a33c6,0x18c783d2,0x0b741ac5,0x4b939d4c,
112960         0x3ffbb6e4,0x1d7acd15,0x7a255e44,0x06a24858,0xce336d50,0x14fbc494 } },
112961     /* 203 */
112962     { { 0x51584e3c,0x9b920c0c,0xf7e54027,0xc7733c59,0x88422bbe,0xe24ce139,
112963         0x523bd6ab,0x11ada812,0xb88e6def,0xde068800,0xfe8c582d,0x7b872671 },
112964       { 0x7de53510,0x4e746f28,0xf7971968,0x492f8b99,0x7d928ac2,0x1ec80bc7,
112965         0x432eb1b5,0xb3913e48,0x32028f6e,0xad084866,0x8fc2f38b,0x122bb835 } },
112966     /* 204 */
112967     { { 0x3b0b29c3,0x0a9f3b1e,0x4fa44151,0x837b6432,0x17b28ea7,0xb9905c92,
112968         0x98451750,0xf39bc937,0xce8b6da1,0xcd383c24,0x010620b2,0x299f57db },
112969       { 0x58afdce3,0x7b6ac396,0x3d05ef47,0xa15206b3,0xb9bb02ff,0xa0ae37e2,
112970         0x9db3964c,0x107760ab,0x67954bea,0xe29de9a0,0x431c3f82,0x446a1ad8 } },
112971     /* 205 */
112972     { { 0x5c6b8195,0xc6fecea0,0xf49e71b9,0xd744a7c5,0x177a7ae7,0xa8e96acc,
112973         0x358773a7,0x1a05746c,0x37567369,0xa4162146,0x87d1c971,0xaa0217f7 },
112974       { 0x77fd3226,0x61e9d158,0xe4f600be,0x0f6f2304,0x7a6dff07,0xa9c4cebc,
112975         0x09f12a24,0xd15afa01,0x8c863ee9,0x2bbadb22,0xe5eb8c78,0xa28290e4 } },
112976     /* 206 */
112977     { { 0x3e9de330,0x55b87fa0,0x195c145b,0x12b26066,0xa920bef0,0xe08536e0,
112978         0x4d195adc,0x7bff6f2c,0x945f4187,0x7f319e9d,0xf892ce47,0xf9848863 },
112979       { 0x4fe37657,0xd0efc1d3,0x5cf0e45a,0x3c58de82,0x8b0ccbbe,0x626ad21a,
112980         0xaf952fc5,0xd2a31208,0xeb437357,0x81791995,0x98e95d4f,0x5f19d30f } },
112981     /* 207 */
112982     { { 0x0e6865bb,0x72e83d9a,0xf63456a6,0x22f5af3b,0x463c8d9e,0x409e9c73,
112983         0xdfe6970e,0x40e9e578,0x711b91ca,0x876b6efa,0x942625a3,0x895512cf },
112984       { 0xcb4e462b,0x84c8eda8,0x4412e7c8,0x84c0154a,0xceb7b71f,0x04325db1,
112985         0x66f70877,0x1537dde3,0x1992b9ac,0xf3a09399,0xd498ae77,0xa7316606 } },
112986     /* 208 */
112987     { { 0xcad260f5,0x13990d2f,0xeec0e8c0,0x76c3be29,0x0f7bd7d5,0x7dc5bee0,
112988         0xefebda4b,0x9be167d2,0x9122b87e,0xcce3dde6,0x82b5415c,0x75a28b09 },
112989       { 0xe84607a6,0xf6810bcd,0x6f4dbf0d,0xc6d58128,0x1b4dafeb,0xfead577d,
112990         0x066b28eb,0x9bc440b2,0x8b17e84b,0x53f1da97,0xcda9a575,0x0459504b } },
112991     /* 209 */
112992     { { 0x329e5836,0x13e39a02,0xf717269d,0x2c9e7d51,0xf26c963b,0xc5ac58d6,
112993         0x79967bf5,0x3b0c6c43,0x55908d9d,0x60bbea3f,0xf07c9ad1,0xd84811e7 },
112994       { 0x5bd20e4a,0xfe7609a7,0x0a70baa8,0xe4325dd2,0xb3600386,0x3711f370,
112995         0xd0924302,0x97f9562f,0x4acc4436,0x040dc0c3,0xde79cdd4,0xfd6d725c } },
112996     /* 210 */
112997     { { 0xcf13eafb,0xb3efd0e3,0x5aa0ae5f,0x21009cbb,0x79022279,0xe480c553,
112998         0xb2fc9a6d,0x755cf334,0x07096ae7,0x8564a5bf,0xbd238139,0xddd649d0 },
112999       { 0x8a045041,0xd0de10b1,0xc957d572,0x6e05b413,0x4e0fb25c,0x5c5ff806,
113000         0x641162fb,0xd933179b,0xe57439f9,0x42d48485,0x8a8d72aa,0x70c5bd0a } },
113001     /* 211 */
113002     { { 0x97bdf646,0xa7671738,0xab329f7c,0xaa1485b4,0xf8f25fdf,0xce3e11d6,
113003         0xc6221824,0x76a3fc7e,0xf3924740,0x045f281f,0x96d13a9a,0x24557d4e },
113004       { 0xdd4c27cd,0x875c804b,0x0f5c7fea,0x11c5f0f4,0xdc55ff7e,0xac8c880b,
113005         0x1103f101,0x2acddec5,0xf99faa89,0x38341a21,0xce9d6b57,0xc7b67a2c } },
113006     /* 212 */
113007     { { 0x8e357586,0x9a0d724f,0xdf648da0,0x1d7f4ff5,0xfdee62a5,0x9c3e6c9b,
113008         0x0389b372,0x0499cef0,0x98eab879,0xe904050d,0x6c051617,0xe8eef1b6 },
113009       { 0xc37e3ca9,0xebf5bfeb,0xa4e0b91d,0x7c5e946d,0x2c4bea28,0x79097314,
113010         0xee67b2b7,0x81f6c109,0xdafc5ede,0xaf237d9b,0x2abb04c7,0xd2e60201 } },
113011     /* 213 */
113012     { { 0x8a4f57bf,0x6156060c,0xff11182a,0xf9758696,0x6296ef00,0x8336773c,
113013         0xff666899,0x9c054bce,0x719cd11c,0xd6a11611,0xdbe1acfa,0x9824a641 },
113014       { 0xba89fd01,0x0b7b7a5f,0x889f79d8,0xf8d3b809,0xf578285c,0xc5e1ea08,
113015         0xae6d8288,0x7ac74536,0x7521ef5f,0x5d37a200,0xb260a25d,0x5ecc4184 } },
113016     /* 214 */
113017     { { 0xa708c8d3,0xddcebb19,0xc63f81ec,0xe63ed04f,0x11873f95,0xd045f5a0,
113018         0x79f276d5,0x3b5ad544,0x425ae5b3,0x81272a3d,0x10ce1605,0x8bfeb501 },
113019       { 0x888228bf,0x4233809c,0xb2aff7df,0x4bd82acf,0x0cbd4a7f,0x9c68f180,
113020         0x6b44323d,0xfcd77124,0x891db957,0x60c0fcf6,0x04da8f7f,0xcfbb4d89 } },
113021     /* 215 */
113022     { { 0x3b26139a,0x9a6a5df9,0xb2cc7eb8,0x3e076a83,0x5a964bcd,0x47a8e82d,
113023         0xb9278d6b,0x8a4e2a39,0xe4443549,0x93506c98,0xf1e0d566,0x06497a8f },
113024       { 0x2b1efa05,0x3dee8d99,0x45393e33,0x2da63ca8,0xcf0579ad,0xa4af7277,
113025         0x3236d8ea,0xaf4b4639,0x32b617f5,0x6ccad95b,0xb88bb124,0xce76d8b8 } },
113026     /* 216 */
113027     { { 0x083843dc,0x63d2537a,0x1e4153b4,0x89eb3514,0xea9afc94,0x5175ebc4,
113028         0x8ed1aed7,0x7a652580,0xd85e8297,0x67295611,0xb584b73d,0x8dd2d68b },
113029       { 0x0133c3a4,0x237139e6,0x4bd278ea,0x9de838ab,0xc062fcd9,0xe829b072,
113030         0x63ba8706,0x70730d4f,0xd3cd05ec,0x6080483f,0x0c85f84d,0x872ab5b8 } },
113031     /* 217 */
113032     { { 0x999d4d49,0xfc0776d3,0xec3f45e7,0xa3eb59de,0x0dae1fc1,0xbc990e44,
113033         0xa15371ff,0x33596b1e,0x9bc7ab25,0xd447dcb2,0x35979582,0xcd5b63e9 },
113034       { 0x77d1ff11,0xae3366fa,0xedee6903,0x59f28f05,0xa4433bf2,0x6f43fed1,
113035         0xdf9ce00e,0x15409c9b,0xaca9c5dc,0x21b5cded,0x82d7bdb4,0xf9f33595 } },
113036     /* 218 */
113037     { { 0x9422c792,0x95944378,0xc958b8bf,0x239ea923,0xdf076541,0x4b61a247,
113038         0xbb9fc544,0x4d29ce85,0x0b424559,0x9a692a67,0x0e486900,0x6e0ca5a0 },
113039       { 0x85b3bece,0x6b79a782,0xc61f9892,0x41f35e39,0xae747f82,0xff82099a,
113040         0xd0ca59d6,0x58c8ae3f,0x99406b5f,0x4ac930e2,0x9df24243,0x2ce04eb9 } },
113041     /* 219 */
113042     { { 0x1ac37b82,0x4366b994,0x25b04d83,0xff0c728d,0x19c47b7c,0x1f551361,
113043         0xbeff13e7,0xdbf2d5ed,0xe12a683d,0xf78efd51,0x989cf9c4,0x82cd85b9 },
113044       { 0xe0cb5d37,0xe23c6db6,0x72ee1a15,0x818aeebd,0x28771b14,0x8212aafd,
113045         0x1def817d,0x7bc221d9,0x9445c51f,0xdac403a2,0x12c3746b,0x711b0517 } },
113046     /* 220 */
113047     { { 0x5ea99ecc,0x0ed9ed48,0xb8cab5e1,0xf799500d,0xb570cbdc,0xa8ec87dc,
113048         0xd35dfaec,0x52cfb2c2,0x6e4d80a4,0x8d31fae2,0xdcdeabe5,0xe6a37dc9 },
113049       { 0x1deca452,0x5d365a34,0x0d68b44e,0x09a5f8a5,0xa60744b1,0x59238ea5,
113050         0xbb4249e9,0xf2fedc0d,0xa909b2e3,0xe395c74e,0x39388250,0xe156d1a5 } },
113051     /* 221 */
113052     { { 0x47181ae9,0xd796b3d0,0x44197808,0xbaf44ba8,0x34cf3fac,0xe6933094,
113053         0xc3bd5c46,0x41aa6ade,0xeed947c6,0x4fda75d8,0x9ea5a525,0xacd9d412 },
113054       { 0xd430301b,0x65cc55a3,0x7b52ea49,0x3c9a5bcf,0x159507f0,0x22d319cf,
113055         0xde74a8dd,0x2ee0b9b5,0x877ac2b6,0x20c26a1e,0x92e7c314,0x387d73da } },
113056     /* 222 */
113057     { { 0x8cd3fdac,0x13c4833e,0x332e5b8e,0x76fcd473,0xe2fe1fd3,0xff671b4b,
113058         0x5d98d8ec,0x4d734e8b,0x514bbc11,0xb1ead3c6,0x7b390494,0xd14ca858 },
113059       { 0x5d2d37e9,0x95a443af,0x00464622,0x73c6ea73,0x15755044,0xa44aeb4b,
113060         0xfab58fee,0xba3f8575,0xdc680a6f,0x9779dbc9,0x7b37ddfc,0xe1ee5f5a } },
113061     /* 223 */
113062     { { 0x12d29f46,0xcd0b4648,0x0ed53137,0x93295b0b,0x80bef6c9,0xbfe26094,
113063         0x54248b00,0xa6565788,0x80e7f9c4,0x69c43fca,0xbe141ea1,0x2190837b },
113064       { 0xa1b26cfb,0x875e159a,0x7affe852,0x90ca9f87,0x92ca598e,0x15e6550d,
113065         0x1938ad11,0xe3e0945d,0x366ef937,0xef7636bb,0xb39869e5,0xb6034d0b } },
113066     /* 224 */
113067     { { 0x26d8356e,0x4d255e30,0xd314626f,0xf83666ed,0xd0c8ed64,0x421ddf61,
113068         0x26677b61,0x96e473c5,0x9e9b18b3,0xdad4af7e,0xa9393f75,0xfceffd4a },
113069       { 0x11c731d5,0x843138a1,0xb2f141d9,0x05bcb3a1,0x617b7671,0x20e1fa95,
113070         0x88ccec7b,0xbefce812,0x90f1b568,0x582073dc,0x1f055cb7,0xf572261a } },
113071     /* 225 */
113072     { { 0x36973088,0xf3148277,0x86a9f980,0xc008e708,0xe046c261,0x1b795947,
113073         0xca76bca0,0xdf1e6a7d,0x71acddf0,0xabafd886,0x1364d8f4,0xff7054d9 },
113074       { 0xe2260594,0x2cf63547,0xd73b277e,0x468a5372,0xef9bd35e,0xc7419e24,
113075         0x24043cc3,0x2b4a1c20,0x890b39cd,0xa28f047a,0x46f9a2e3,0xdca2cea1 } },
113076     /* 226 */
113077     { { 0x53277538,0xab788736,0xcf697738,0xa734e225,0x6b22e2c1,0x66ee1d1e,
113078         0xebe1d212,0x2c615389,0x02bb0766,0xf36cad40,0x3e64f207,0x120885c3 },
113079       { 0x90fbfec2,0x59e77d56,0xd7a574ae,0xf9e781aa,0x5d045e53,0x801410b0,
113080         0xa91b5f0e,0xd3b5f0aa,0x7fbb3521,0xb3d1df00,0xc72bee9a,0x11c4b33e } },
113081     /* 227 */
113082     { { 0x83c3a7f3,0xd32b9832,0x88d8a354,0x8083abcf,0x50f4ec5a,0xdeb16404,
113083         0x641e2907,0x18d747f0,0xf1bbf03e,0x4e8978ae,0x88a0cd89,0x932447dc },
113084       { 0xcf3d5897,0x561e0feb,0x13600e6d,0xfc3a682f,0xd16a6b73,0xc78b9d73,
113085         0xd29bf580,0xe713fede,0x08d69e5c,0x0a225223,0x1ff7fda4,0x3a924a57 } },
113086     /* 228 */
113087     { { 0xb4093bee,0xfb64554c,0xa58c6ec0,0xa6d65a25,0x43d0ed37,0x4126994d,
113088         0x55152d44,0xa5689a51,0x284caa8d,0xb8e5ea8c,0xd1f25538,0x33f05d4f },
113089       { 0x1b615d6e,0xe0fdfe09,0x705507da,0x2ded7e8f,0x17bbcc80,0xdd5631e5,
113090         0x267fd11f,0x4f87453e,0xff89d62d,0xc6da723f,0xe3cda21d,0x55cbcae2 } },
113091     /* 229 */
113092     { { 0x6b4e84f3,0x336bc94e,0x4ef72c35,0x72863031,0xeeb57f99,0x6d85fdee,
113093         0xa42ece1b,0x7f4e3272,0x36f0320a,0x7f86cbb5,0x923331e6,0xf09b6a2b },
113094       { 0x56778435,0x21d3ecf1,0x8323b2d2,0x2977ba99,0x1704bc0f,0x6a1b57fb,
113095         0x389f048a,0xd777cf8b,0xac6b42cd,0x9ce2174f,0x09e6c55a,0x404e2bff } },
113096     /* 230 */
113097     { { 0x204c5ddb,0x9b9b135e,0x3eff550e,0x9dbfe044,0xec3be0f6,0x35eab4bf,
113098         0x0a43e56f,0x8b4c3f0d,0x0e73f9b3,0x4c1c6673,0x2c78c905,0x92ed38bd },
113099       { 0xa386e27c,0xc7003f6a,0xaced8507,0xb9c4f46f,0x59df5464,0xea024ec8,
113100         0x429572ea,0x4af96152,0xe1fc1194,0x279cd5e2,0x281e358c,0xaa376a03 } },
113101     /* 231 */
113102     { { 0x3cdbc95c,0x07859223,0xef2e337a,0xaae1aa6a,0x472a8544,0xc040108d,
113103         0x8d037b7d,0x80c853e6,0x8c7eee24,0xd221315c,0x8ee47752,0x195d3856 },
113104       { 0xdacd7fbe,0xd4b1ba03,0xd3e0c52b,0x4b5ac61e,0x6aab7b52,0x68d3c052,
113105         0x660e3fea,0xf0d7248c,0x3145efb4,0xafdb3f89,0x8f40936d,0xa73fd9a3 } },
113106     /* 232 */
113107     { { 0xbb1b17ce,0x891b9ef3,0xc6127f31,0x14023667,0x305521fd,0x12b2e58d,
113108         0xe3508088,0x3a47e449,0xff751507,0xe49fc84b,0x5310d16e,0x4023f722 },
113109       { 0xb73399fa,0xa608e5ed,0xd532aa3e,0xf12632d8,0x845e8415,0x13a2758e,
113110         0x1fc2d861,0xae4b6f85,0x339d02f2,0x3879f5b1,0x80d99ebd,0x446d22a6 } },
113111     /* 233 */
113112     { { 0x4be164f1,0x0f502302,0x88b81920,0x8d09d2d6,0x984aceff,0x514056f1,
113113         0x75e9e80d,0xa5c4ddf0,0xdf496a93,0x38cb47e6,0x38df6bf7,0x899e1d6b },
113114       { 0xb59eb2a6,0x69e87e88,0x9b47f38b,0x280d9d63,0x3654e955,0x599411ea,
113115         0x969aa581,0xcf8dd4fd,0x530742a7,0xff5c2baf,0x1a373085,0xa4391536 } },
113116     /* 234 */
113117     { { 0xa8a4bdd2,0x6ace72a3,0xb68ef702,0xc656cdd1,0x90c4dad8,0xd4a33e7e,
113118         0x9d951c50,0x4aece08a,0x085d68e6,0xea8005ae,0x6f7502b8,0xfdd7a7d7 },
113119       { 0x98d6fa45,0xce6fb0a6,0x1104eb8c,0x228f8672,0xda09d7dc,0xd23d8787,
113120         0x2ae93065,0x5521428b,0xea56c366,0x95faba3d,0x0a88aca5,0xedbe5039 } },
113121     /* 235 */
113122     { { 0xbfb26c82,0xd64da0ad,0x952c2f9c,0xe5d70b3c,0xf7e77f68,0xf5e8f365,
113123         0x08f2d695,0x7234e002,0xd12e7be6,0xfaf900ee,0x4acf734e,0x27dc6934 },
113124       { 0xc260a46a,0x80e4ff5e,0x2dc31c28,0x7da5ebce,0xca69f552,0x485c5d73,
113125         0x69cc84c2,0xcdfb6b29,0xed6d4eca,0x031c5afe,0x22247637,0xc7bbf4c8 } },
113126     /* 236 */
113127     { { 0x49fe01b2,0x9d5b72c7,0x793a91b8,0x34785186,0xcf460438,0xa3ba3c54,
113128         0x3ab21b6f,0x73e8e43d,0xbe57b8ab,0x50cde8e0,0xdd204264,0x6488b3a7 },
113129       { 0xdddc4582,0xa9e398b3,0x5bec46fe,0x1698c1a9,0x156d3843,0x7f1446ef,
113130         0x770329a2,0x3fd25dd8,0x2c710668,0x05b1221a,0xa72ee6cf,0x65b2dc2a } },
113131     /* 237 */
113132     { { 0xcd021d63,0x21a885f7,0xfea61f08,0x3f344b15,0xc5cf73e6,0xad5ba6dd,
113133         0x227a8b23,0x154d0d8f,0xdc559311,0x9b74373c,0x98620fa1,0x4feab715 },
113134       { 0x7d9ec924,0x5098938e,0x6d47e550,0x84d54a5e,0x1b617506,0x1a2d1bdc,
113135         0x615868a4,0x99fe1782,0x3005a924,0x171da780,0x7d8f79b6,0xa70bf5ed } },
113136     /* 238 */
113137     { { 0xfe2216c5,0x0bc1250d,0x7601b351,0x2c37e250,0xd6f06b7e,0xb6300175,
113138         0x8bfeb9b7,0x4dde8ca1,0xb82f843d,0x4f210432,0xb1ac0afd,0x8d70e2f9 },
113139       { 0xaae91abb,0x25c73b78,0x863028f2,0x0230dca3,0xe5cf30b7,0x8b923ecf,
113140         0x5506f265,0xed754ec2,0x729a5e39,0x8e41b88c,0xbabf889b,0xee67cec2 } },
113141     /* 239 */
113142     { { 0x1be46c65,0xe183acf5,0xe7565d7a,0x9789538f,0xd9627b4e,0x87873391,
113143         0x9f1d9187,0xbf4ac4c1,0x4691f5c8,0x5db99f63,0x74a1fb98,0xa68df803 },
113144       { 0xbf92b5fa,0x3c448ed1,0x3e0bdc32,0xa098c841,0x79bf016c,0x8e74cd55,
113145         0x115e244d,0x5df0d09c,0x3410b66e,0x9418ad01,0x17a02130,0x8b6124cb } },
113146     /* 240 */
113147     { { 0xc26e3392,0x425ec3af,0xa1722e00,0xc07f8470,0xe2356b43,0xdcc28190,
113148         0xb1ef59a6,0x4ed97dff,0xc63028c1,0xc22b3ad1,0x68c18988,0x070723c2 },
113149       { 0x4cf49e7d,0x70da302f,0x3f12a522,0xc5e87c93,0x18594148,0x74acdd1d,
113150         0xca74124c,0xad5f73ab,0xd69fd478,0xe72e4a3e,0x7b117cc3,0x61593868 } },
113151     /* 241 */
113152     { { 0xa9aa0486,0x7b7b9577,0xa063d557,0x6e41fb35,0xda9047d7,0xb017d5c7,
113153         0x68a87ba9,0x8c748280,0xdf08ad93,0xab45fa5c,0x4c288a28,0xcd9fb217 },
113154       { 0x5747843d,0x59544642,0xa56111e3,0x34d64c6c,0x4bfce8d5,0x12e47ea1,
113155         0x6169267f,0x17740e05,0xeed03fb5,0x5c49438e,0x4fc3f513,0x9da30add } },
113156     /* 242 */
113157     { { 0xccfa5200,0xc4e85282,0x6a19b13d,0x2707608f,0xf5726e2f,0xdcb9a53d,
113158         0xe9427de5,0x612407c9,0xd54d582a,0x3e5a17e1,0x655ae118,0xb99877de },
113159       { 0x015254de,0x6f0e972b,0xf0a6f7c5,0x92a56db1,0xa656f8b2,0xd297e4e1,
113160         0xad981983,0x99fe0052,0x07cfed84,0xd3652d2f,0x843c1738,0xc784352e } },
113161     /* 243 */
113162     { { 0x7e9b2d8a,0x6ee90af0,0x57cf1964,0xac8d7018,0x71f28efc,0xf6ed9031,
113163         0x6812b20e,0x7f70d5a9,0xf1c61eee,0x27b557f4,0xc6263758,0xf1c9bd57 },
113164       { 0x2a1a6194,0x5cf7d014,0x1890ab84,0xdd614e0b,0x0e93c2a6,0x3ef9de10,
113165         0xe0cd91c5,0xf98cf575,0x14befc32,0x504ec0c6,0x6279d68c,0xd0513a66 } },
113166     /* 244 */
113167     { { 0xa859fb6a,0xa8eadbad,0xdb283666,0xcf8346e7,0x3e22e355,0x7b35e61a,
113168         0x99639c6b,0x293ece2c,0x56f241c8,0xfa0162e2,0xbf7a1dda,0xd2e6c7b9 },
113169       { 0x40075e63,0xd0de6253,0xf9ec8286,0x2405aa61,0x8fe45494,0x2237830a,
113170         0x364e9c8c,0x4fd01ac7,0x904ba750,0x4d9c3d21,0xaf1b520b,0xd589be14 } },
113171     /* 245 */
113172     { { 0x4662e53b,0x13576a4f,0xf9077676,0x35ec2f51,0x97c0af97,0x66297d13,
113173         0x9e598b58,0xed3201fe,0x5e70f604,0x49bc752a,0xbb12d951,0xb54af535 },
113174       { 0x212c1c76,0x36ea4c2b,0xeb250dfd,0x18f5bbc7,0x9a0a1a46,0xa0d466cc,
113175         0xdac2d917,0x52564da4,0x8e95fab5,0x206559f4,0x9ca67a33,0x7487c190 } },
113176     /* 246 */
113177     { { 0xdde98e9c,0x75abfe37,0x2a411199,0x99b90b26,0xdcdb1f7c,0x1b410996,
113178         0x8b3b5675,0xab346f11,0xf1f8ae1e,0x04852193,0x6b8b98c1,0x1ec4d227 },
113179       { 0x45452baa,0xba3bc926,0xacc4a572,0x387d1858,0xe51f171e,0x9478eff6,
113180         0x931e1c00,0xf357077d,0xe54c8ca8,0xffee77cd,0x551dc9a4,0xfb4892ff } },
113181     /* 247 */
113182     { { 0x2db8dff8,0x5b1bdad0,0x5a2285a2,0xd462f4fd,0xda00b461,0x1d6aad8e,
113183         0x41306d1b,0x43fbefcf,0x6a13fe19,0x428e86f3,0x17f89404,0xc8b2f118 },
113184       { 0xf0d51afb,0x762528aa,0x549b1d06,0xa3e2fea4,0xea3ddf66,0x86fad8f2,
113185         0x4fbdd206,0x0d9ccc4b,0xc189ff5a,0xcde97d4c,0x199f19a6,0xc36793d6 } },
113186     /* 248 */
113187     { { 0x51b85197,0xea38909b,0xb4c92895,0xffb17dd0,0x1ddb3f3f,0x0eb0878b,
113188         0xc57cf0f2,0xb05d28ff,0x1abd57e2,0xd8bde2e7,0xc40c1b20,0x7f2be28d },
113189       { 0x299a2d48,0x6554dca2,0x8377982d,0x5130ba2e,0x1071971a,0x8863205f,
113190         0x7cf2825d,0x15ee6282,0x03748f2b,0xd4b6c57f,0x430385a0,0xa9e3f4da } },
113191     /* 249 */
113192     { { 0x83fbc9c6,0x33eb7cec,0x4541777e,0x24a311c7,0x4f0767fc,0xc81377f7,
113193         0x4ab702da,0x12adae36,0x2a779696,0xb7fcb6db,0x01cea6ad,0x4a6fb284 },
113194       { 0xcdfc73de,0x5e8b1d2a,0x1b02fd32,0xd0efae8d,0xd81d8519,0x3f99c190,
113195         0xfc808971,0x3c18f7fa,0x51b7ae7b,0x41f713e7,0xf07fc3f8,0x0a4b3435 } },
113196     /* 250 */
113197     { { 0x019b7d2e,0x7dda3c4c,0xd4dc4b89,0x631c8d1a,0x1cdb313c,0x5489cd6e,
113198         0x4c07bb06,0xd44aed10,0x75f000d1,0x8f97e13a,0xdda5df4d,0x0e9ee64f },
113199       { 0x3e346910,0xeaa99f3b,0xfa294ad7,0x622f6921,0x0d0b2fe9,0x22aaa20d,
113200         0x1e5881ba,0x4fed2f99,0xc1571802,0x9af3b2d6,0xdc7ee17c,0x919e67a8 } },
113201     /* 251 */
113202     { { 0x76250533,0xc724fe4c,0x7d817ef8,0x8a2080e5,0x172c9751,0xa2afb0f4,
113203         0x17c0702e,0x9b10cdeb,0xc9b7e3e9,0xbf3975e3,0x1cd0cdc5,0x206117df },
113204       { 0xbe05ebd5,0xfb049e61,0x16c782c0,0xeb0bb55c,0xab7fed09,0x13a331b8,
113205         0x632863f0,0xf6c58b1d,0x4d3b6195,0x6264ef6e,0x9a53f116,0x92c51b63 } },
113206     /* 252 */
113207     { { 0x288b364d,0xa57c7bc8,0x7b41e5c4,0x4a562e08,0x698a9a11,0x699d21c6,
113208         0xf3f849b9,0xa4ed9581,0x9eb726ba,0xa223eef3,0xcc2884f9,0x13159c23 },
113209       { 0x3a3f4963,0x73931e58,0x0ada6a81,0x96500389,0x5ab2950b,0x3ee8a1c6,
113210         0x775fab52,0xeedf4949,0x4f2671b6,0x63d652e1,0x3c4e2f55,0xfed4491c } },
113211     /* 253 */
113212     { { 0xf4eb453e,0x335eadc3,0xcadd1a5b,0x5ff74b63,0x5d84a91a,0x6933d0d7,
113213         0xb49ba337,0x9ca3eeb9,0xc04c15b8,0x1f6facce,0xdc09a7e4,0x4ef19326 },
113214       { 0x3dca3233,0x53d2d324,0xa2259d4b,0x0ee40590,0x5546f002,0x18c22edb,
113215         0x09ea6b71,0x92429801,0xb0e91e61,0xaada0add,0x99963c50,0x5fe53ef4 } },
113216     /* 254 */
113217     { { 0x90c28c65,0x372dd06b,0x119ce47d,0x1765242c,0x6b22fc82,0xc041fb80,
113218         0xb0a7ccc1,0x667edf07,0x1261bece,0xc79599e7,0x19cff22a,0xbc69d9ba },
113219       { 0x13c06819,0x009d77cd,0xe282b79d,0x635a66ae,0x225b1be8,0x4edac4a6,
113220         0x524008f9,0x57d4f4e4,0xb056af84,0xee299ac5,0x3a0bc386,0xcc38444c } },
113221     /* 255 */
113222     { { 0xcd4c2356,0x490643b1,0x750547be,0x740a4851,0xd4944c04,0x643eaf29,
113223         0x299a98a0,0xba572479,0xee05fdf9,0x48b29f16,0x089b2d7b,0x33fb4f61 },
113224       { 0xa950f955,0x86704902,0xfedc3ddf,0x97e1034d,0x05fbb6a2,0x211320b6,
113225         0x432299bb,0x23d7b93f,0x8590e4a3,0x1fe1a057,0xf58c0ce6,0x8e1d0586 } },
113226 };
113227 
113228 /* Multiply the base point of P384 by the scalar and return the result.
113229  * If map is true then convert result to affine coordinates.
113230  *
113231  * Stripe implementation.
113232  * Pre-generated: 2^0, 2^48, ...
113233  * Pre-generated: products of all combinations of above.
113234  * 8 doubles and adds (with qz=1)
113235  *
113236  * r     Resulting point.
113237  * k     Scalar to multiply by.
113238  * map   Indicates whether to convert result to affine.
113239  * ct    Constant time required.
113240  * heap  Heap to use for allocation.
113241  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
113242  */
sp_384_ecc_mulmod_base_12(sp_point_384 * r,const sp_digit * k,int map,int ct,void * heap)113243 static int sp_384_ecc_mulmod_base_12(sp_point_384* r, const sp_digit* k,
113244         int map, int ct, void* heap)
113245 {
113246     return sp_384_ecc_mulmod_stripe_12(r, &p384_base, p384_table,
113247                                       k, map, ct, heap);
113248 }
113249 
113250 #endif
113251 
113252 /* Multiply the base point of P384 by the scalar and return the result.
113253  * If map is true then convert result to affine coordinates.
113254  *
113255  * km    Scalar to multiply by.
113256  * r     Resulting point.
113257  * map   Indicates whether to convert result to affine.
113258  * heap  Heap to use for allocation.
113259  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
113260  */
sp_ecc_mulmod_base_384(const mp_int * km,ecc_point * r,int map,void * heap)113261 int sp_ecc_mulmod_base_384(const mp_int* km, ecc_point* r, int map, void* heap)
113262 {
113263 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
113264     sp_point_384* point = NULL;
113265     sp_digit* k = NULL;
113266 #else
113267     sp_point_384  point[1];
113268     sp_digit k[12];
113269 #endif
113270     int err = MP_OKAY;
113271 
113272 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
113273     point = (sp_point_384*)XMALLOC(sizeof(sp_point_384), heap,
113274                                          DYNAMIC_TYPE_ECC);
113275     if (point == NULL)
113276         err = MEMORY_E;
113277     if (err == MP_OKAY) {
113278         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 12, heap,
113279                                DYNAMIC_TYPE_ECC);
113280         if (k == NULL)
113281             err = MEMORY_E;
113282     }
113283 #endif
113284 
113285     if (err == MP_OKAY) {
113286         sp_384_from_mp(k, 12, km);
113287 
113288             err = sp_384_ecc_mulmod_base_12(point, k, map, 1, heap);
113289     }
113290     if (err == MP_OKAY) {
113291         err = sp_384_point_to_ecc_point_12(point, r);
113292     }
113293 
113294 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
113295     if (k != NULL)
113296         XFREE(k, heap, DYNAMIC_TYPE_ECC);
113297     if (point != NULL)
113298         XFREE(point, heap, DYNAMIC_TYPE_ECC);
113299 #endif
113300 
113301     return err;
113302 }
113303 
113304 /* Multiply the base point of P384 by the scalar, add point a and return
113305  * the result. If map is true then convert result to affine coordinates.
113306  *
113307  * km      Scalar to multiply by.
113308  * am      Point to add to scalar mulitply result.
113309  * inMont  Point to add is in montgomery form.
113310  * r       Resulting point.
113311  * map     Indicates whether to convert result to affine.
113312  * heap    Heap to use for allocation.
113313  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
113314  */
sp_ecc_mulmod_base_add_384(const mp_int * km,const ecc_point * am,int inMont,ecc_point * r,int map,void * heap)113315 int sp_ecc_mulmod_base_add_384(const mp_int* km, const ecc_point* am,
113316         int inMont, ecc_point* r, int map, void* heap)
113317 {
113318 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
113319     sp_point_384* point = NULL;
113320     sp_digit* k = NULL;
113321 #else
113322     sp_point_384 point[2];
113323     sp_digit k[12 + 12 * 2 * 6];
113324 #endif
113325     sp_point_384* addP = NULL;
113326     sp_digit* tmp = NULL;
113327     int err = MP_OKAY;
113328 
113329 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
113330     point = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap,
113331                                          DYNAMIC_TYPE_ECC);
113332     if (point == NULL)
113333         err = MEMORY_E;
113334     if (err == MP_OKAY) {
113335         k = (sp_digit*)XMALLOC(
113336             sizeof(sp_digit) * (12 + 12 * 2 * 6),
113337             heap, DYNAMIC_TYPE_ECC);
113338         if (k == NULL)
113339             err = MEMORY_E;
113340     }
113341 #endif
113342 
113343     if (err == MP_OKAY) {
113344         addP = point + 1;
113345         tmp = k + 12;
113346 
113347         sp_384_from_mp(k, 12, km);
113348         sp_384_point_from_ecc_point_12(addP, am);
113349     }
113350     if ((err == MP_OKAY) && (!inMont)) {
113351         err = sp_384_mod_mul_norm_12(addP->x, addP->x, p384_mod);
113352     }
113353     if ((err == MP_OKAY) && (!inMont)) {
113354         err = sp_384_mod_mul_norm_12(addP->y, addP->y, p384_mod);
113355     }
113356     if ((err == MP_OKAY) && (!inMont)) {
113357         err = sp_384_mod_mul_norm_12(addP->z, addP->z, p384_mod);
113358     }
113359     if (err == MP_OKAY) {
113360             err = sp_384_ecc_mulmod_base_12(point, k, 0, 0, heap);
113361     }
113362     if (err == MP_OKAY) {
113363             sp_384_proj_point_add_12(point, point, addP, tmp);
113364 
113365         if (map) {
113366                 sp_384_map_12(point, point, tmp);
113367         }
113368 
113369         err = sp_384_point_to_ecc_point_12(point, r);
113370     }
113371 
113372 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
113373     if (k != NULL)
113374         XFREE(k, heap, DYNAMIC_TYPE_ECC);
113375     if (point)
113376         XFREE(point, heap, DYNAMIC_TYPE_ECC);
113377 #endif
113378 
113379     return err;
113380 }
113381 
113382 #if defined(WOLFSSL_VALIDATE_ECC_KEYGEN) || defined(HAVE_ECC_SIGN) || \
113383                                                         defined(HAVE_ECC_VERIFY)
113384 /* Returns 1 if the number of zero.
113385  * Implementation is constant time.
113386  *
113387  * a  Number to check.
113388  * returns 1 if the number is zero and 0 otherwise.
113389  */
sp_384_iszero_12(const sp_digit * a)113390 static int sp_384_iszero_12(const sp_digit* a)
113391 {
113392     return (a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] |
113393             a[8] | a[9] | a[10] | a[11]) == 0;
113394 }
113395 
113396 #endif /* WOLFSSL_VALIDATE_ECC_KEYGEN | HAVE_ECC_SIGN | HAVE_ECC_VERIFY */
113397 /* Add 1 to a. (a = a + 1)
113398  *
113399  * a  A single precision integer.
113400  */
sp_384_add_one_12(sp_digit * a)113401 SP_NOINLINE static void sp_384_add_one_12(sp_digit* a)
113402 {
113403     __asm__ __volatile__ (
113404         "movs	r2, #1\n\t"
113405         "ldr	r1, [%[a]]\n\t"
113406 #if defined(__clang__) || defined(WOLFSSL_KEIL)
113407         "adds	r1, r1, r2\n\t"
113408 #else
113409         "add	r1, r1, r2\n\t"
113410 #endif
113411         "movs	r2, #0\n\t"
113412         "str	r1, [%[a]]\n\t"
113413         "ldr	r1, [%[a], #4]\n\t"
113414 #ifdef WOLFSSL_KEIL
113415         "adcs	r1, r1, r2\n\t"
113416 #elif defined(__clang__)
113417         "adcs	r1, r2\n\t"
113418 #else
113419         "adc	r1, r2\n\t"
113420 #endif
113421         "str	r1, [%[a], #4]\n\t"
113422         "ldr	r1, [%[a], #8]\n\t"
113423 #ifdef WOLFSSL_KEIL
113424         "adcs	r1, r1, r2\n\t"
113425 #elif defined(__clang__)
113426         "adcs	r1, r2\n\t"
113427 #else
113428         "adc	r1, r2\n\t"
113429 #endif
113430         "str	r1, [%[a], #8]\n\t"
113431         "ldr	r1, [%[a], #12]\n\t"
113432 #ifdef WOLFSSL_KEIL
113433         "adcs	r1, r1, r2\n\t"
113434 #elif defined(__clang__)
113435         "adcs	r1, r2\n\t"
113436 #else
113437         "adc	r1, r2\n\t"
113438 #endif
113439         "str	r1, [%[a], #12]\n\t"
113440         "ldr	r1, [%[a], #16]\n\t"
113441 #ifdef WOLFSSL_KEIL
113442         "adcs	r1, r1, r2\n\t"
113443 #elif defined(__clang__)
113444         "adcs	r1, r2\n\t"
113445 #else
113446         "adc	r1, r2\n\t"
113447 #endif
113448         "str	r1, [%[a], #16]\n\t"
113449         "ldr	r1, [%[a], #20]\n\t"
113450 #ifdef WOLFSSL_KEIL
113451         "adcs	r1, r1, r2\n\t"
113452 #elif defined(__clang__)
113453         "adcs	r1, r2\n\t"
113454 #else
113455         "adc	r1, r2\n\t"
113456 #endif
113457         "str	r1, [%[a], #20]\n\t"
113458         "ldr	r1, [%[a], #24]\n\t"
113459 #ifdef WOLFSSL_KEIL
113460         "adcs	r1, r1, r2\n\t"
113461 #elif defined(__clang__)
113462         "adcs	r1, r2\n\t"
113463 #else
113464         "adc	r1, r2\n\t"
113465 #endif
113466         "str	r1, [%[a], #24]\n\t"
113467         "ldr	r1, [%[a], #28]\n\t"
113468 #ifdef WOLFSSL_KEIL
113469         "adcs	r1, r1, r2\n\t"
113470 #elif defined(__clang__)
113471         "adcs	r1, r2\n\t"
113472 #else
113473         "adc	r1, r2\n\t"
113474 #endif
113475         "str	r1, [%[a], #28]\n\t"
113476         "ldr	r1, [%[a], #32]\n\t"
113477 #ifdef WOLFSSL_KEIL
113478         "adcs	r1, r1, r2\n\t"
113479 #elif defined(__clang__)
113480         "adcs	r1, r2\n\t"
113481 #else
113482         "adc	r1, r2\n\t"
113483 #endif
113484         "str	r1, [%[a], #32]\n\t"
113485         "ldr	r1, [%[a], #36]\n\t"
113486 #ifdef WOLFSSL_KEIL
113487         "adcs	r1, r1, r2\n\t"
113488 #elif defined(__clang__)
113489         "adcs	r1, r2\n\t"
113490 #else
113491         "adc	r1, r2\n\t"
113492 #endif
113493         "str	r1, [%[a], #36]\n\t"
113494         "ldr	r1, [%[a], #40]\n\t"
113495 #ifdef WOLFSSL_KEIL
113496         "adcs	r1, r1, r2\n\t"
113497 #elif defined(__clang__)
113498         "adcs	r1, r2\n\t"
113499 #else
113500         "adc	r1, r2\n\t"
113501 #endif
113502         "str	r1, [%[a], #40]\n\t"
113503         "ldr	r1, [%[a], #44]\n\t"
113504 #ifdef WOLFSSL_KEIL
113505         "adcs	r1, r1, r2\n\t"
113506 #elif defined(__clang__)
113507         "adcs	r1, r2\n\t"
113508 #else
113509         "adc	r1, r2\n\t"
113510 #endif
113511         "str	r1, [%[a], #44]\n\t"
113512         : [a] "+r" (a)
113513         :
113514         : "memory", "r1", "r2"
113515     );
113516 }
113517 
113518 /* Read big endian unsigned byte array into r.
113519  *
113520  * r  A single precision integer.
113521  * size  Maximum number of bytes to convert
113522  * a  Byte array.
113523  * n  Number of bytes in array to read.
113524  */
sp_384_from_bin(sp_digit * r,int size,const byte * a,int n)113525 static void sp_384_from_bin(sp_digit* r, int size, const byte* a, int n)
113526 {
113527     int i;
113528     int j = 0;
113529     word32 s = 0;
113530 
113531     r[0] = 0;
113532     for (i = n-1; i >= 0; i--) {
113533         r[j] |= (((sp_digit)a[i]) << s);
113534         if (s >= 24U) {
113535             r[j] &= 0xffffffff;
113536             s = 32U - s;
113537             if (j + 1 >= size) {
113538                 break;
113539             }
113540             r[++j] = (sp_digit)a[i] >> s;
113541             s = 8U - s;
113542         }
113543         else {
113544             s += 8U;
113545         }
113546     }
113547 
113548     for (j++; j < size; j++) {
113549         r[j] = 0;
113550     }
113551 }
113552 
113553 /* Generates a scalar that is in the range 1..order-1.
113554  *
113555  * rng  Random number generator.
113556  * k    Scalar value.
113557  * returns RNG failures, MEMORY_E when memory allocation fails and
113558  * MP_OKAY on success.
113559  */
sp_384_ecc_gen_k_12(WC_RNG * rng,sp_digit * k)113560 static int sp_384_ecc_gen_k_12(WC_RNG* rng, sp_digit* k)
113561 {
113562     int err;
113563     byte buf[48];
113564 
113565     do {
113566         err = wc_RNG_GenerateBlock(rng, buf, sizeof(buf));
113567         if (err == 0) {
113568             sp_384_from_bin(k, 12, buf, (int)sizeof(buf));
113569             if (sp_384_cmp_12(k, p384_order2) <= 0) {
113570                 sp_384_add_one_12(k);
113571                 break;
113572             }
113573         }
113574     }
113575     while (err == 0);
113576 
113577     return err;
113578 }
113579 
113580 /* Makes a random EC key pair.
113581  *
113582  * rng   Random number generator.
113583  * priv  Generated private value.
113584  * pub   Generated public point.
113585  * heap  Heap to use for allocation.
113586  * returns ECC_INF_E when the point does not have the correct order, RNG
113587  * failures, MEMORY_E when memory allocation fails and MP_OKAY on success.
113588  */
sp_ecc_make_key_384(WC_RNG * rng,mp_int * priv,ecc_point * pub,void * heap)113589 int sp_ecc_make_key_384(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap)
113590 {
113591 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
113592     sp_point_384* point = NULL;
113593     sp_digit* k = NULL;
113594 #else
113595     #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
113596     sp_point_384 point[2];
113597     #else
113598     sp_point_384 point[1];
113599     #endif
113600     sp_digit k[12];
113601 #endif
113602 #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
113603     sp_point_384* infinity = NULL;
113604 #endif
113605     int err = MP_OKAY;
113606 
113607 
113608     (void)heap;
113609 
113610 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
113611     #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
113612     point = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap, DYNAMIC_TYPE_ECC);
113613     #else
113614     point = (sp_point_384*)XMALLOC(sizeof(sp_point_384), heap, DYNAMIC_TYPE_ECC);
113615     #endif
113616     if (point == NULL)
113617         err = MEMORY_E;
113618     if (err == MP_OKAY) {
113619         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 12, heap,
113620                                DYNAMIC_TYPE_ECC);
113621         if (k == NULL)
113622             err = MEMORY_E;
113623     }
113624 #endif
113625 
113626     if (err == MP_OKAY) {
113627     #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
113628         infinity = point + 1;
113629     #endif
113630 
113631         err = sp_384_ecc_gen_k_12(rng, k);
113632     }
113633     if (err == MP_OKAY) {
113634             err = sp_384_ecc_mulmod_base_12(point, k, 1, 1, NULL);
113635     }
113636 
113637 #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
113638     if (err == MP_OKAY) {
113639             err = sp_384_ecc_mulmod_12(infinity, point, p384_order, 1, 1, NULL);
113640     }
113641     if (err == MP_OKAY) {
113642         if (sp_384_iszero_12(point->x) || sp_384_iszero_12(point->y)) {
113643             err = ECC_INF_E;
113644         }
113645     }
113646 #endif
113647 
113648     if (err == MP_OKAY) {
113649         err = sp_384_to_mp(k, priv);
113650     }
113651     if (err == MP_OKAY) {
113652         err = sp_384_point_to_ecc_point_12(point, pub);
113653     }
113654 
113655 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
113656     if (k != NULL)
113657         XFREE(k, heap, DYNAMIC_TYPE_ECC);
113658     if (point != NULL) {
113659         /* point is not sensitive, so no need to zeroize */
113660         XFREE(point, heap, DYNAMIC_TYPE_ECC);
113661     }
113662 #endif
113663 
113664     return err;
113665 }
113666 
113667 #ifdef HAVE_ECC_DHE
113668 /* Write r as big endian to byte array.
113669  * Fixed length number of bytes written: 48
113670  *
113671  * r  A single precision integer.
113672  * a  Byte array.
113673  */
sp_384_to_bin_12(sp_digit * r,byte * a)113674 static void sp_384_to_bin_12(sp_digit* r, byte* a)
113675 {
113676     int i;
113677     int j;
113678     int s = 0;
113679     int b;
113680 
113681     j = 384 / 8 - 1;
113682     a[j] = 0;
113683     for (i=0; i<12 && j>=0; i++) {
113684         b = 0;
113685         /* lint allow cast of mismatch sp_digit and int */
113686         a[j--] |= (byte)(r[i] << s); /*lint !e9033*/
113687         b += 8 - s;
113688         if (j < 0) {
113689             break;
113690         }
113691         while (b < 32) {
113692             a[j--] = (byte)(r[i] >> b);
113693             b += 8;
113694             if (j < 0) {
113695                 break;
113696             }
113697         }
113698         s = 8 - (b - 32);
113699         if (j >= 0) {
113700             a[j] = 0;
113701         }
113702         if (s != 0) {
113703             j++;
113704         }
113705     }
113706 }
113707 
113708 /* Multiply the point by the scalar and serialize the X ordinate.
113709  * The number is 0 padded to maximum size on output.
113710  *
113711  * priv    Scalar to multiply the point by.
113712  * pub     Point to multiply.
113713  * out     Buffer to hold X ordinate.
113714  * outLen  On entry, size of the buffer in bytes.
113715  *         On exit, length of data in buffer in bytes.
113716  * heap    Heap to use for allocation.
113717  * returns BUFFER_E if the buffer is to small for output size,
113718  * MEMORY_E when memory allocation fails and MP_OKAY on success.
113719  */
sp_ecc_secret_gen_384(const mp_int * priv,const ecc_point * pub,byte * out,word32 * outLen,void * heap)113720 int sp_ecc_secret_gen_384(const mp_int* priv, const ecc_point* pub, byte* out,
113721                           word32* outLen, void* heap)
113722 {
113723 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
113724     sp_point_384* point = NULL;
113725     sp_digit* k = NULL;
113726 #else
113727     sp_point_384 point[1];
113728     sp_digit k[12];
113729 #endif
113730     int err = MP_OKAY;
113731 
113732     if (*outLen < 48U) {
113733         err = BUFFER_E;
113734     }
113735 
113736 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
113737     if (err == MP_OKAY) {
113738         point = (sp_point_384*)XMALLOC(sizeof(sp_point_384), heap,
113739                                          DYNAMIC_TYPE_ECC);
113740         if (point == NULL)
113741             err = MEMORY_E;
113742     }
113743     if (err == MP_OKAY) {
113744         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 12, heap,
113745                                DYNAMIC_TYPE_ECC);
113746         if (k == NULL)
113747             err = MEMORY_E;
113748     }
113749 #endif
113750 
113751     if (err == MP_OKAY) {
113752         sp_384_from_mp(k, 12, priv);
113753         sp_384_point_from_ecc_point_12(point, pub);
113754             err = sp_384_ecc_mulmod_12(point, point, k, 1, 1, heap);
113755     }
113756     if (err == MP_OKAY) {
113757         sp_384_to_bin_12(point->x, out);
113758         *outLen = 48;
113759     }
113760 
113761 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
113762     if (k != NULL)
113763         XFREE(k, heap, DYNAMIC_TYPE_ECC);
113764     if (point != NULL)
113765         XFREE(point, heap, DYNAMIC_TYPE_ECC);
113766 #endif
113767 
113768     return err;
113769 }
113770 #endif /* HAVE_ECC_DHE */
113771 
113772 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
113773 #endif
113774 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
113775 #ifdef WOLFSSL_SP_SMALL
113776 /* Sub b from a into a. (a -= b)
113777  *
113778  * a  A single precision integer.
113779  * b  A single precision integer.
113780  */
sp_384_sub_in_place_12(sp_digit * a,const sp_digit * b)113781 SP_NOINLINE static sp_digit sp_384_sub_in_place_12(sp_digit* a,
113782         const sp_digit* b)
113783 {
113784     __asm__ __volatile__ (
113785         "movs	r7, %[a]\n\t"
113786         "movs	r2, #0\n\t"
113787 #if defined(__clang__) || defined(WOLFSSL_KEIL)
113788         "adds	r7, r7, #48\n\t"
113789 #else
113790         "add	r7, r7, #48\n\t"
113791 #endif
113792         "\n"
113793     "L_sp_384_sub_in_place_12_words_%=:\n\t"
113794         "movs	r5, #0\n\t"
113795 #if defined(__clang__) || defined(WOLFSSL_KEIL)
113796         "subs	r5, r5, r2\n\t"
113797 #else
113798         "sub	r5, r5, r2\n\t"
113799 #endif
113800         "ldr	r3, [%[a]]\n\t"
113801         "ldr	r4, [%[a], #4]\n\t"
113802         "ldr	r5, [%[b]]\n\t"
113803         "ldr	r6, [%[b], #4]\n\t"
113804 #ifdef WOLFSSL_KEIL
113805         "sbcs	r3, r3, r5\n\t"
113806 #elif defined(__clang__)
113807         "sbcs	r3, r5\n\t"
113808 #else
113809         "sbc	r3, r5\n\t"
113810 #endif
113811 #ifdef WOLFSSL_KEIL
113812         "sbcs	r4, r4, r6\n\t"
113813 #elif defined(__clang__)
113814         "sbcs	r4, r6\n\t"
113815 #else
113816         "sbc	r4, r6\n\t"
113817 #endif
113818         "str	r3, [%[a]]\n\t"
113819         "str	r4, [%[a], #4]\n\t"
113820 #ifdef WOLFSSL_KEIL
113821         "sbcs	r2, r2, r2\n\t"
113822 #elif defined(__clang__)
113823         "sbcs	r2, r2\n\t"
113824 #else
113825         "sbc	r2, r2\n\t"
113826 #endif
113827 #if defined(__clang__) || defined(WOLFSSL_KEIL)
113828         "adds	%[a], %[a], #8\n\t"
113829 #else
113830         "add	%[a], %[a], #8\n\t"
113831 #endif
113832 #if defined(__clang__) || defined(WOLFSSL_KEIL)
113833         "adds	%[b], %[b], #8\n\t"
113834 #else
113835         "add	%[b], %[b], #8\n\t"
113836 #endif
113837         "cmp	%[a], r7\n\t"
113838         "bne	L_sp_384_sub_in_place_12_words_%=\n\t"
113839         "movs	%[a], r2\n\t"
113840         : [a] "+r" (a), [b] "+r" (b)
113841         :
113842         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
113843     );
113844     return (uint32_t)(size_t)a;
113845 }
113846 
113847 #else
113848 /* Sub b from a into a. (a -= b)
113849  *
113850  * a  A single precision integer.
113851  * b  A single precision integer.
113852  */
sp_384_sub_in_place_12(sp_digit * a,const sp_digit * b)113853 SP_NOINLINE static sp_digit sp_384_sub_in_place_12(sp_digit* a,
113854         const sp_digit* b)
113855 {
113856     __asm__ __volatile__ (
113857         "ldm	%[b]!, {r4, r5}\n\t"
113858         "ldr	r2, [%[a]]\n\t"
113859         "ldr	r3, [%[a], #4]\n\t"
113860 #if defined(__clang__) || defined(WOLFSSL_KEIL)
113861         "subs	r2, r2, r4\n\t"
113862 #else
113863         "sub	r2, r2, r4\n\t"
113864 #endif
113865 #ifdef WOLFSSL_KEIL
113866         "sbcs	r3, r3, r5\n\t"
113867 #elif defined(__clang__)
113868         "sbcs	r3, r5\n\t"
113869 #else
113870         "sbc	r3, r5\n\t"
113871 #endif
113872         "stm	%[a]!, {r2, r3}\n\t"
113873         "ldm	%[b]!, {r4, r5}\n\t"
113874         "ldr	r2, [%[a]]\n\t"
113875         "ldr	r3, [%[a], #4]\n\t"
113876 #ifdef WOLFSSL_KEIL
113877         "sbcs	r2, r2, r4\n\t"
113878 #elif defined(__clang__)
113879         "sbcs	r2, r4\n\t"
113880 #else
113881         "sbc	r2, r4\n\t"
113882 #endif
113883 #ifdef WOLFSSL_KEIL
113884         "sbcs	r3, r3, r5\n\t"
113885 #elif defined(__clang__)
113886         "sbcs	r3, r5\n\t"
113887 #else
113888         "sbc	r3, r5\n\t"
113889 #endif
113890         "stm	%[a]!, {r2, r3}\n\t"
113891         "ldm	%[b]!, {r4, r5}\n\t"
113892         "ldr	r2, [%[a]]\n\t"
113893         "ldr	r3, [%[a], #4]\n\t"
113894 #ifdef WOLFSSL_KEIL
113895         "sbcs	r2, r2, r4\n\t"
113896 #elif defined(__clang__)
113897         "sbcs	r2, r4\n\t"
113898 #else
113899         "sbc	r2, r4\n\t"
113900 #endif
113901 #ifdef WOLFSSL_KEIL
113902         "sbcs	r3, r3, r5\n\t"
113903 #elif defined(__clang__)
113904         "sbcs	r3, r5\n\t"
113905 #else
113906         "sbc	r3, r5\n\t"
113907 #endif
113908         "stm	%[a]!, {r2, r3}\n\t"
113909         "ldm	%[b]!, {r4, r5}\n\t"
113910         "ldr	r2, [%[a]]\n\t"
113911         "ldr	r3, [%[a], #4]\n\t"
113912 #ifdef WOLFSSL_KEIL
113913         "sbcs	r2, r2, r4\n\t"
113914 #elif defined(__clang__)
113915         "sbcs	r2, r4\n\t"
113916 #else
113917         "sbc	r2, r4\n\t"
113918 #endif
113919 #ifdef WOLFSSL_KEIL
113920         "sbcs	r3, r3, r5\n\t"
113921 #elif defined(__clang__)
113922         "sbcs	r3, r5\n\t"
113923 #else
113924         "sbc	r3, r5\n\t"
113925 #endif
113926         "stm	%[a]!, {r2, r3}\n\t"
113927         "ldm	%[b]!, {r4, r5}\n\t"
113928         "ldr	r2, [%[a]]\n\t"
113929         "ldr	r3, [%[a], #4]\n\t"
113930 #ifdef WOLFSSL_KEIL
113931         "sbcs	r2, r2, r4\n\t"
113932 #elif defined(__clang__)
113933         "sbcs	r2, r4\n\t"
113934 #else
113935         "sbc	r2, r4\n\t"
113936 #endif
113937 #ifdef WOLFSSL_KEIL
113938         "sbcs	r3, r3, r5\n\t"
113939 #elif defined(__clang__)
113940         "sbcs	r3, r5\n\t"
113941 #else
113942         "sbc	r3, r5\n\t"
113943 #endif
113944         "stm	%[a]!, {r2, r3}\n\t"
113945         "ldm	%[b]!, {r4, r5}\n\t"
113946         "ldr	r2, [%[a]]\n\t"
113947         "ldr	r3, [%[a], #4]\n\t"
113948 #ifdef WOLFSSL_KEIL
113949         "sbcs	r2, r2, r4\n\t"
113950 #elif defined(__clang__)
113951         "sbcs	r2, r4\n\t"
113952 #else
113953         "sbc	r2, r4\n\t"
113954 #endif
113955 #ifdef WOLFSSL_KEIL
113956         "sbcs	r3, r3, r5\n\t"
113957 #elif defined(__clang__)
113958         "sbcs	r3, r5\n\t"
113959 #else
113960         "sbc	r3, r5\n\t"
113961 #endif
113962         "stm	%[a]!, {r2, r3}\n\t"
113963 #ifdef WOLFSSL_KEIL
113964         "sbcs	%[a], %[a], %[a]\n\t"
113965 #elif defined(__clang__)
113966         "sbcs	%[a], %[a]\n\t"
113967 #else
113968         "sbc	%[a], %[a]\n\t"
113969 #endif
113970         : [a] "+r" (a), [b] "+r" (b)
113971         :
113972         : "memory", "r2", "r3", "r4", "r5"
113973     );
113974     return (uint32_t)(size_t)a;
113975 }
113976 
113977 #endif /* WOLFSSL_SP_SMALL */
113978 /* Mul a by digit b into r. (r = a * b)
113979  *
113980  * r  A single precision integer.
113981  * a  A single precision integer.
113982  * b  A single precision digit.
113983  */
sp_384_mul_d_12(sp_digit * r,const sp_digit * a,sp_digit b)113984 SP_NOINLINE static void sp_384_mul_d_12(sp_digit* r, const sp_digit* a,
113985         sp_digit b)
113986 {
113987     __asm__ __volatile__ (
113988         "movs	r6, #48\n\t"
113989 #if defined(__clang__) || defined(WOLFSSL_KEIL)
113990         "adds	r6, r6, %[a]\n\t"
113991 #else
113992         "add	r6, r6, %[a]\n\t"
113993 #endif
113994         "mov	r8, %[r]\n\t"
113995         "mov	r9, r6\n\t"
113996         "movs	r3, #0\n\t"
113997         "movs	r4, #0\n\t"
113998         "\n"
113999     "L_sp_384_mul_d_12_%=:\n\t"
114000         "movs	%[r], #0\n\t"
114001         "movs	r5, #0\n\t"
114002         "# A[] * B\n\t"
114003         "ldrh	r6, [%[a]]\n\t"
114004         "uxth	r7, %[b]\n\t"
114005 #ifdef WOLFSSL_KEIL
114006         "muls	r7, r6, r7\n\t"
114007 #elif defined(__clang__)
114008         "muls	r7, r6\n\t"
114009 #else
114010         "mul	r7, r6\n\t"
114011 #endif
114012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114013         "adds	r3, r3, r7\n\t"
114014 #else
114015         "add	r3, r3, r7\n\t"
114016 #endif
114017 #ifdef WOLFSSL_KEIL
114018         "adcs	r4, r4, %[r]\n\t"
114019 #elif defined(__clang__)
114020         "adcs	r4, %[r]\n\t"
114021 #else
114022         "adc	r4, %[r]\n\t"
114023 #endif
114024 #ifdef WOLFSSL_KEIL
114025         "adcs	r5, r5, %[r]\n\t"
114026 #elif defined(__clang__)
114027         "adcs	r5, %[r]\n\t"
114028 #else
114029         "adc	r5, %[r]\n\t"
114030 #endif
114031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114032         "lsrs	r7, %[b], #16\n\t"
114033 #else
114034         "lsr	r7, %[b], #16\n\t"
114035 #endif
114036 #ifdef WOLFSSL_KEIL
114037         "muls	r6, r7, r6\n\t"
114038 #elif defined(__clang__)
114039         "muls	r6, r7\n\t"
114040 #else
114041         "mul	r6, r7\n\t"
114042 #endif
114043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114044         "lsrs	r7, r6, #16\n\t"
114045 #else
114046         "lsr	r7, r6, #16\n\t"
114047 #endif
114048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114049         "lsls	r6, r6, #16\n\t"
114050 #else
114051         "lsl	r6, r6, #16\n\t"
114052 #endif
114053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114054         "adds	r3, r3, r6\n\t"
114055 #else
114056         "add	r3, r3, r6\n\t"
114057 #endif
114058 #ifdef WOLFSSL_KEIL
114059         "adcs	r4, r4, r7\n\t"
114060 #elif defined(__clang__)
114061         "adcs	r4, r7\n\t"
114062 #else
114063         "adc	r4, r7\n\t"
114064 #endif
114065 #ifdef WOLFSSL_KEIL
114066         "adcs	r5, r5, %[r]\n\t"
114067 #elif defined(__clang__)
114068         "adcs	r5, %[r]\n\t"
114069 #else
114070         "adc	r5, %[r]\n\t"
114071 #endif
114072         "ldr	r6, [%[a]]\n\t"
114073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114074         "lsrs	r6, r6, #16\n\t"
114075 #else
114076         "lsr	r6, r6, #16\n\t"
114077 #endif
114078 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114079         "lsrs	r7, %[b], #16\n\t"
114080 #else
114081         "lsr	r7, %[b], #16\n\t"
114082 #endif
114083 #ifdef WOLFSSL_KEIL
114084         "muls	r7, r6, r7\n\t"
114085 #elif defined(__clang__)
114086         "muls	r7, r6\n\t"
114087 #else
114088         "mul	r7, r6\n\t"
114089 #endif
114090 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114091         "adds	r4, r4, r7\n\t"
114092 #else
114093         "add	r4, r4, r7\n\t"
114094 #endif
114095 #ifdef WOLFSSL_KEIL
114096         "adcs	r5, r5, %[r]\n\t"
114097 #elif defined(__clang__)
114098         "adcs	r5, %[r]\n\t"
114099 #else
114100         "adc	r5, %[r]\n\t"
114101 #endif
114102         "uxth	r7, %[b]\n\t"
114103 #ifdef WOLFSSL_KEIL
114104         "muls	r6, r7, r6\n\t"
114105 #elif defined(__clang__)
114106         "muls	r6, r7\n\t"
114107 #else
114108         "mul	r6, r7\n\t"
114109 #endif
114110 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114111         "lsrs	r7, r6, #16\n\t"
114112 #else
114113         "lsr	r7, r6, #16\n\t"
114114 #endif
114115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114116         "lsls	r6, r6, #16\n\t"
114117 #else
114118         "lsl	r6, r6, #16\n\t"
114119 #endif
114120 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114121         "adds	r3, r3, r6\n\t"
114122 #else
114123         "add	r3, r3, r6\n\t"
114124 #endif
114125 #ifdef WOLFSSL_KEIL
114126         "adcs	r4, r4, r7\n\t"
114127 #elif defined(__clang__)
114128         "adcs	r4, r7\n\t"
114129 #else
114130         "adc	r4, r7\n\t"
114131 #endif
114132 #ifdef WOLFSSL_KEIL
114133         "adcs	r5, r5, %[r]\n\t"
114134 #elif defined(__clang__)
114135         "adcs	r5, %[r]\n\t"
114136 #else
114137         "adc	r5, %[r]\n\t"
114138 #endif
114139         "# A[] * B - Done\n\t"
114140         "mov	%[r], r8\n\t"
114141         "str	r3, [%[r]]\n\t"
114142         "movs	r3, r4\n\t"
114143         "movs	r4, r5\n\t"
114144 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114145         "adds	%[r], %[r], #4\n\t"
114146 #else
114147         "add	%[r], %[r], #4\n\t"
114148 #endif
114149 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114150         "adds	%[a], %[a], #4\n\t"
114151 #else
114152         "add	%[a], %[a], #4\n\t"
114153 #endif
114154         "mov	r8, %[r]\n\t"
114155         "cmp	%[a], r9\n\t"
114156         "blt	L_sp_384_mul_d_12_%=\n\t"
114157         "str	r3, [%[r]]\n\t"
114158         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
114159         :
114160         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
114161     );
114162 }
114163 
114164 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
114165  *
114166  * d1   The high order half of the number to divide.
114167  * d0   The low order half of the number to divide.
114168  * div  The dividend.
114169  * returns the result of the division.
114170  *
114171  * Note that this is an approximate div. It may give an answer 1 larger.
114172  */
div_384_word_12(sp_digit d1,sp_digit d0,sp_digit div)114173 SP_NOINLINE static sp_digit div_384_word_12(sp_digit d1, sp_digit d0,
114174         sp_digit div)
114175 {
114176     __asm__ __volatile__ (
114177         "movs	r3, #0\n\t"
114178 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114179         "lsrs	r5, %[div], #1\n\t"
114180 #else
114181         "lsr	r5, %[div], #1\n\t"
114182 #endif
114183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114184         "adds	r5, r5, #1\n\t"
114185 #else
114186         "add	r5, r5, #1\n\t"
114187 #endif
114188         "mov	r8, %[d0]\n\t"
114189         "mov	r9, %[d1]\n\t"
114190         "# Do top 32\n\t"
114191         "movs	r6, r5\n\t"
114192 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114193         "subs	r6, r6, %[d1]\n\t"
114194 #else
114195         "sub	r6, r6, %[d1]\n\t"
114196 #endif
114197 #ifdef WOLFSSL_KEIL
114198         "sbcs	r6, r6, r6\n\t"
114199 #elif defined(__clang__)
114200         "sbcs	r6, r6\n\t"
114201 #else
114202         "sbc	r6, r6\n\t"
114203 #endif
114204 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114205         "adds	r3, r3, r3\n\t"
114206 #else
114207         "add	r3, r3, r3\n\t"
114208 #endif
114209 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114210         "subs	r3, r3, r6\n\t"
114211 #else
114212         "sub	r3, r3, r6\n\t"
114213 #endif
114214 #ifdef WOLFSSL_KEIL
114215         "ands	r6, r6, r5\n\t"
114216 #elif defined(__clang__)
114217         "ands	r6, r5\n\t"
114218 #else
114219         "and	r6, r5\n\t"
114220 #endif
114221 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114222         "subs	%[d1], %[d1], r6\n\t"
114223 #else
114224         "sub	%[d1], %[d1], r6\n\t"
114225 #endif
114226         "movs	r4, #29\n\t"
114227         "\n"
114228     "L_div_384_word_12_loop_%=:\n\t"
114229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114230         "lsls	%[d0], %[d0], #1\n\t"
114231 #else
114232         "lsl	%[d0], %[d0], #1\n\t"
114233 #endif
114234 #ifdef WOLFSSL_KEIL
114235         "adcs	%[d1], %[d1], %[d1]\n\t"
114236 #elif defined(__clang__)
114237         "adcs	%[d1], %[d1]\n\t"
114238 #else
114239         "adc	%[d1], %[d1]\n\t"
114240 #endif
114241         "movs	r6, r5\n\t"
114242 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114243         "subs	r6, r6, %[d1]\n\t"
114244 #else
114245         "sub	r6, r6, %[d1]\n\t"
114246 #endif
114247 #ifdef WOLFSSL_KEIL
114248         "sbcs	r6, r6, r6\n\t"
114249 #elif defined(__clang__)
114250         "sbcs	r6, r6\n\t"
114251 #else
114252         "sbc	r6, r6\n\t"
114253 #endif
114254 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114255         "adds	r3, r3, r3\n\t"
114256 #else
114257         "add	r3, r3, r3\n\t"
114258 #endif
114259 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114260         "subs	r3, r3, r6\n\t"
114261 #else
114262         "sub	r3, r3, r6\n\t"
114263 #endif
114264 #ifdef WOLFSSL_KEIL
114265         "ands	r6, r6, r5\n\t"
114266 #elif defined(__clang__)
114267         "ands	r6, r5\n\t"
114268 #else
114269         "and	r6, r5\n\t"
114270 #endif
114271 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114272         "subs	%[d1], %[d1], r6\n\t"
114273 #else
114274         "sub	%[d1], %[d1], r6\n\t"
114275 #endif
114276 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114277         "subs	r4, r4, #1\n\t"
114278 #else
114279         "sub	r4, r4, #1\n\t"
114280 #endif
114281         "bpl	L_div_384_word_12_loop_%=\n\t"
114282         "movs	r7, #0\n\t"
114283 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114284         "adds	r3, r3, r3\n\t"
114285 #else
114286         "add	r3, r3, r3\n\t"
114287 #endif
114288 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114289         "adds	r3, r3, #1\n\t"
114290 #else
114291         "add	r3, r3, #1\n\t"
114292 #endif
114293         "# r * div - Start\n\t"
114294         "uxth	%[d1], r3\n\t"
114295         "uxth	r4, %[div]\n\t"
114296 #ifdef WOLFSSL_KEIL
114297         "muls	r4, %[d1], r4\n\t"
114298 #elif defined(__clang__)
114299         "muls	r4, %[d1]\n\t"
114300 #else
114301         "mul	r4, %[d1]\n\t"
114302 #endif
114303 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114304         "lsrs	r6, %[div], #16\n\t"
114305 #else
114306         "lsr	r6, %[div], #16\n\t"
114307 #endif
114308 #ifdef WOLFSSL_KEIL
114309         "muls	%[d1], r6, %[d1]\n\t"
114310 #elif defined(__clang__)
114311         "muls	%[d1], r6\n\t"
114312 #else
114313         "mul	%[d1], r6\n\t"
114314 #endif
114315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114316         "lsrs	r5, %[d1], #16\n\t"
114317 #else
114318         "lsr	r5, %[d1], #16\n\t"
114319 #endif
114320 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114321         "lsls	%[d1], %[d1], #16\n\t"
114322 #else
114323         "lsl	%[d1], %[d1], #16\n\t"
114324 #endif
114325 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114326         "adds	r4, r4, %[d1]\n\t"
114327 #else
114328         "add	r4, r4, %[d1]\n\t"
114329 #endif
114330 #ifdef WOLFSSL_KEIL
114331         "adcs	r5, r5, r7\n\t"
114332 #elif defined(__clang__)
114333         "adcs	r5, r7\n\t"
114334 #else
114335         "adc	r5, r7\n\t"
114336 #endif
114337 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114338         "lsrs	%[d1], r3, #16\n\t"
114339 #else
114340         "lsr	%[d1], r3, #16\n\t"
114341 #endif
114342 #ifdef WOLFSSL_KEIL
114343         "muls	r6, %[d1], r6\n\t"
114344 #elif defined(__clang__)
114345         "muls	r6, %[d1]\n\t"
114346 #else
114347         "mul	r6, %[d1]\n\t"
114348 #endif
114349 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114350         "adds	r5, r5, r6\n\t"
114351 #else
114352         "add	r5, r5, r6\n\t"
114353 #endif
114354         "uxth	r6, %[div]\n\t"
114355 #ifdef WOLFSSL_KEIL
114356         "muls	%[d1], r6, %[d1]\n\t"
114357 #elif defined(__clang__)
114358         "muls	%[d1], r6\n\t"
114359 #else
114360         "mul	%[d1], r6\n\t"
114361 #endif
114362 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114363         "lsrs	r6, %[d1], #16\n\t"
114364 #else
114365         "lsr	r6, %[d1], #16\n\t"
114366 #endif
114367 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114368         "lsls	%[d1], %[d1], #16\n\t"
114369 #else
114370         "lsl	%[d1], %[d1], #16\n\t"
114371 #endif
114372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114373         "adds	r4, r4, %[d1]\n\t"
114374 #else
114375         "add	r4, r4, %[d1]\n\t"
114376 #endif
114377 #ifdef WOLFSSL_KEIL
114378         "adcs	r5, r5, r6\n\t"
114379 #elif defined(__clang__)
114380         "adcs	r5, r6\n\t"
114381 #else
114382         "adc	r5, r6\n\t"
114383 #endif
114384         "# r * div - Done\n\t"
114385         "mov	%[d1], r8\n\t"
114386 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114387         "subs	%[d1], %[d1], r4\n\t"
114388 #else
114389         "sub	%[d1], %[d1], r4\n\t"
114390 #endif
114391         "movs	r4, %[d1]\n\t"
114392         "mov	%[d1], r9\n\t"
114393 #ifdef WOLFSSL_KEIL
114394         "sbcs	%[d1], %[d1], r5\n\t"
114395 #elif defined(__clang__)
114396         "sbcs	%[d1], r5\n\t"
114397 #else
114398         "sbc	%[d1], r5\n\t"
114399 #endif
114400         "movs	r5, %[d1]\n\t"
114401 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114402         "adds	r3, r3, r5\n\t"
114403 #else
114404         "add	r3, r3, r5\n\t"
114405 #endif
114406         "# r * div - Start\n\t"
114407         "uxth	%[d1], r3\n\t"
114408         "uxth	r4, %[div]\n\t"
114409 #ifdef WOLFSSL_KEIL
114410         "muls	r4, %[d1], r4\n\t"
114411 #elif defined(__clang__)
114412         "muls	r4, %[d1]\n\t"
114413 #else
114414         "mul	r4, %[d1]\n\t"
114415 #endif
114416 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114417         "lsrs	r6, %[div], #16\n\t"
114418 #else
114419         "lsr	r6, %[div], #16\n\t"
114420 #endif
114421 #ifdef WOLFSSL_KEIL
114422         "muls	%[d1], r6, %[d1]\n\t"
114423 #elif defined(__clang__)
114424         "muls	%[d1], r6\n\t"
114425 #else
114426         "mul	%[d1], r6\n\t"
114427 #endif
114428 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114429         "lsrs	r5, %[d1], #16\n\t"
114430 #else
114431         "lsr	r5, %[d1], #16\n\t"
114432 #endif
114433 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114434         "lsls	%[d1], %[d1], #16\n\t"
114435 #else
114436         "lsl	%[d1], %[d1], #16\n\t"
114437 #endif
114438 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114439         "adds	r4, r4, %[d1]\n\t"
114440 #else
114441         "add	r4, r4, %[d1]\n\t"
114442 #endif
114443 #ifdef WOLFSSL_KEIL
114444         "adcs	r5, r5, r7\n\t"
114445 #elif defined(__clang__)
114446         "adcs	r5, r7\n\t"
114447 #else
114448         "adc	r5, r7\n\t"
114449 #endif
114450 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114451         "lsrs	%[d1], r3, #16\n\t"
114452 #else
114453         "lsr	%[d1], r3, #16\n\t"
114454 #endif
114455 #ifdef WOLFSSL_KEIL
114456         "muls	r6, %[d1], r6\n\t"
114457 #elif defined(__clang__)
114458         "muls	r6, %[d1]\n\t"
114459 #else
114460         "mul	r6, %[d1]\n\t"
114461 #endif
114462 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114463         "adds	r5, r5, r6\n\t"
114464 #else
114465         "add	r5, r5, r6\n\t"
114466 #endif
114467         "uxth	r6, %[div]\n\t"
114468 #ifdef WOLFSSL_KEIL
114469         "muls	%[d1], r6, %[d1]\n\t"
114470 #elif defined(__clang__)
114471         "muls	%[d1], r6\n\t"
114472 #else
114473         "mul	%[d1], r6\n\t"
114474 #endif
114475 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114476         "lsrs	r6, %[d1], #16\n\t"
114477 #else
114478         "lsr	r6, %[d1], #16\n\t"
114479 #endif
114480 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114481         "lsls	%[d1], %[d1], #16\n\t"
114482 #else
114483         "lsl	%[d1], %[d1], #16\n\t"
114484 #endif
114485 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114486         "adds	r4, r4, %[d1]\n\t"
114487 #else
114488         "add	r4, r4, %[d1]\n\t"
114489 #endif
114490 #ifdef WOLFSSL_KEIL
114491         "adcs	r5, r5, r6\n\t"
114492 #elif defined(__clang__)
114493         "adcs	r5, r6\n\t"
114494 #else
114495         "adc	r5, r6\n\t"
114496 #endif
114497         "# r * div - Done\n\t"
114498         "mov	%[d1], r8\n\t"
114499         "mov	r6, r9\n\t"
114500 #ifdef WOLFSSL_KEIL
114501         "subs	r4, %[d1], r4\n\t"
114502 #else
114503 #ifdef __clang__
114504         "subs	r4, %[d1], r4\n\t"
114505 #else
114506         "sub	r4, %[d1], r4\n\t"
114507 #endif
114508 #endif
114509 #ifdef WOLFSSL_KEIL
114510         "sbcs	r6, r6, r5\n\t"
114511 #elif defined(__clang__)
114512         "sbcs	r6, r5\n\t"
114513 #else
114514         "sbc	r6, r5\n\t"
114515 #endif
114516         "movs	r5, r6\n\t"
114517 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114518         "adds	r3, r3, r5\n\t"
114519 #else
114520         "add	r3, r3, r5\n\t"
114521 #endif
114522         "# r * div - Start\n\t"
114523         "uxth	%[d1], r3\n\t"
114524         "uxth	r4, %[div]\n\t"
114525 #ifdef WOLFSSL_KEIL
114526         "muls	r4, %[d1], r4\n\t"
114527 #elif defined(__clang__)
114528         "muls	r4, %[d1]\n\t"
114529 #else
114530         "mul	r4, %[d1]\n\t"
114531 #endif
114532 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114533         "lsrs	r6, %[div], #16\n\t"
114534 #else
114535         "lsr	r6, %[div], #16\n\t"
114536 #endif
114537 #ifdef WOLFSSL_KEIL
114538         "muls	%[d1], r6, %[d1]\n\t"
114539 #elif defined(__clang__)
114540         "muls	%[d1], r6\n\t"
114541 #else
114542         "mul	%[d1], r6\n\t"
114543 #endif
114544 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114545         "lsrs	r5, %[d1], #16\n\t"
114546 #else
114547         "lsr	r5, %[d1], #16\n\t"
114548 #endif
114549 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114550         "lsls	%[d1], %[d1], #16\n\t"
114551 #else
114552         "lsl	%[d1], %[d1], #16\n\t"
114553 #endif
114554 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114555         "adds	r4, r4, %[d1]\n\t"
114556 #else
114557         "add	r4, r4, %[d1]\n\t"
114558 #endif
114559 #ifdef WOLFSSL_KEIL
114560         "adcs	r5, r5, r7\n\t"
114561 #elif defined(__clang__)
114562         "adcs	r5, r7\n\t"
114563 #else
114564         "adc	r5, r7\n\t"
114565 #endif
114566 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114567         "lsrs	%[d1], r3, #16\n\t"
114568 #else
114569         "lsr	%[d1], r3, #16\n\t"
114570 #endif
114571 #ifdef WOLFSSL_KEIL
114572         "muls	r6, %[d1], r6\n\t"
114573 #elif defined(__clang__)
114574         "muls	r6, %[d1]\n\t"
114575 #else
114576         "mul	r6, %[d1]\n\t"
114577 #endif
114578 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114579         "adds	r5, r5, r6\n\t"
114580 #else
114581         "add	r5, r5, r6\n\t"
114582 #endif
114583         "uxth	r6, %[div]\n\t"
114584 #ifdef WOLFSSL_KEIL
114585         "muls	%[d1], r6, %[d1]\n\t"
114586 #elif defined(__clang__)
114587         "muls	%[d1], r6\n\t"
114588 #else
114589         "mul	%[d1], r6\n\t"
114590 #endif
114591 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114592         "lsrs	r6, %[d1], #16\n\t"
114593 #else
114594         "lsr	r6, %[d1], #16\n\t"
114595 #endif
114596 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114597         "lsls	%[d1], %[d1], #16\n\t"
114598 #else
114599         "lsl	%[d1], %[d1], #16\n\t"
114600 #endif
114601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114602         "adds	r4, r4, %[d1]\n\t"
114603 #else
114604         "add	r4, r4, %[d1]\n\t"
114605 #endif
114606 #ifdef WOLFSSL_KEIL
114607         "adcs	r5, r5, r6\n\t"
114608 #elif defined(__clang__)
114609         "adcs	r5, r6\n\t"
114610 #else
114611         "adc	r5, r6\n\t"
114612 #endif
114613         "# r * div - Done\n\t"
114614         "mov	%[d1], r8\n\t"
114615         "mov	r6, r9\n\t"
114616 #ifdef WOLFSSL_KEIL
114617         "subs	r4, %[d1], r4\n\t"
114618 #else
114619 #ifdef __clang__
114620         "subs	r4, %[d1], r4\n\t"
114621 #else
114622         "sub	r4, %[d1], r4\n\t"
114623 #endif
114624 #endif
114625 #ifdef WOLFSSL_KEIL
114626         "sbcs	r6, r6, r5\n\t"
114627 #elif defined(__clang__)
114628         "sbcs	r6, r5\n\t"
114629 #else
114630         "sbc	r6, r5\n\t"
114631 #endif
114632         "movs	r5, r6\n\t"
114633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114634         "adds	r3, r3, r5\n\t"
114635 #else
114636         "add	r3, r3, r5\n\t"
114637 #endif
114638         "movs	r6, %[div]\n\t"
114639 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114640         "subs	r6, r6, r4\n\t"
114641 #else
114642         "sub	r6, r6, r4\n\t"
114643 #endif
114644 #ifdef WOLFSSL_KEIL
114645         "sbcs	r6, r6, r6\n\t"
114646 #elif defined(__clang__)
114647         "sbcs	r6, r6\n\t"
114648 #else
114649         "sbc	r6, r6\n\t"
114650 #endif
114651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
114652         "subs	r3, r3, r6\n\t"
114653 #else
114654         "sub	r3, r3, r6\n\t"
114655 #endif
114656         "movs	%[d1], r3\n\t"
114657         : [d1] "+r" (d1), [d0] "+r" (d0), [div] "+r" (div)
114658         :
114659         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
114660     );
114661     return (uint32_t)(size_t)d1;
114662 }
114663 
114664 /* AND m into each word of a and store in r.
114665  *
114666  * r  A single precision integer.
114667  * a  A single precision integer.
114668  * m  Mask to AND against each digit.
114669  */
sp_384_mask_12(sp_digit * r,const sp_digit * a,sp_digit m)114670 static void sp_384_mask_12(sp_digit* r, const sp_digit* a, sp_digit m)
114671 {
114672 #ifdef WOLFSSL_SP_SMALL
114673     int i;
114674 
114675     for (i=0; i<12; i++) {
114676         r[i] = a[i] & m;
114677     }
114678 #else
114679     r[0] = a[0] & m;
114680     r[1] = a[1] & m;
114681     r[2] = a[2] & m;
114682     r[3] = a[3] & m;
114683     r[4] = a[4] & m;
114684     r[5] = a[5] & m;
114685     r[6] = a[6] & m;
114686     r[7] = a[7] & m;
114687     r[8] = a[8] & m;
114688     r[9] = a[9] & m;
114689     r[10] = a[10] & m;
114690     r[11] = a[11] & m;
114691 #endif
114692 }
114693 
114694 /* Divide d in a and put remainder into r (m*d + r = a)
114695  * m is not calculated as it is not needed at this time.
114696  *
114697  * a  Number to be divided.
114698  * d  Number to divide with.
114699  * m  Multiplier result.
114700  * r  Remainder from the division.
114701  * returns MP_OKAY indicating success.
114702  */
sp_384_div_12(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)114703 static WC_INLINE int sp_384_div_12(const sp_digit* a, const sp_digit* d, sp_digit* m,
114704         sp_digit* r)
114705 {
114706     sp_digit t1[24], t2[13];
114707     sp_digit div, r1;
114708     int i;
114709 
114710     (void)m;
114711 
114712     div = d[11];
114713     XMEMCPY(t1, a, sizeof(*t1) * 2 * 12);
114714     for (i=11; i>=0; i--) {
114715         sp_digit hi = t1[12 + i] - (t1[12 + i] == div);
114716         r1 = div_384_word_12(hi, t1[12 + i - 1], div);
114717 
114718         sp_384_mul_d_12(t2, d, r1);
114719         t1[12 + i] += sp_384_sub_in_place_12(&t1[i], t2);
114720         t1[12 + i] -= t2[12];
114721         sp_384_mask_12(t2, d, t1[12 + i]);
114722         t1[12 + i] += sp_384_add_12(&t1[i], &t1[i], t2);
114723         sp_384_mask_12(t2, d, t1[12 + i]);
114724         t1[12 + i] += sp_384_add_12(&t1[i], &t1[i], t2);
114725     }
114726 
114727     r1 = sp_384_cmp_12(t1, d) >= 0;
114728     sp_384_cond_sub_12(r, t1, d, (sp_digit)0 - r1);
114729 
114730     return MP_OKAY;
114731 }
114732 
114733 /* Reduce a modulo m into r. (r = a mod m)
114734  *
114735  * r  A single precision number that is the reduced result.
114736  * a  A single precision number that is to be reduced.
114737  * m  A single precision number that is the modulus to reduce with.
114738  * returns MP_OKAY indicating success.
114739  */
sp_384_mod_12(sp_digit * r,const sp_digit * a,const sp_digit * m)114740 static WC_INLINE int sp_384_mod_12(sp_digit* r, const sp_digit* a, const sp_digit* m)
114741 {
114742     return sp_384_div_12(a, m, NULL, r);
114743 }
114744 
114745 #endif
114746 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
114747 /* Multiply two number mod the order of P384 curve. (r = a * b mod order)
114748  *
114749  * r  Result of the multiplication.
114750  * a  First operand of the multiplication.
114751  * b  Second operand of the multiplication.
114752  */
sp_384_mont_mul_order_12(sp_digit * r,const sp_digit * a,const sp_digit * b)114753 static void sp_384_mont_mul_order_12(sp_digit* r, const sp_digit* a, const sp_digit* b)
114754 {
114755     sp_384_mul_12(r, a, b);
114756     sp_384_mont_reduce_order_12(r, p384_order, p384_mp_order);
114757 }
114758 
114759 #if defined(HAVE_ECC_SIGN) || (defined(HAVE_ECC_VERIFY) && defined(WOLFSSL_SP_SMALL))
114760 #ifdef WOLFSSL_SP_SMALL
114761 /* Order-2 for the P384 curve. */
114762 static const uint32_t p384_order_minus_2[12] = {
114763     0xccc52971U,0xecec196aU,0x48b0a77aU,0x581a0db2U,0xf4372ddfU,0xc7634d81U,
114764     0xffffffffU,0xffffffffU,0xffffffffU,0xffffffffU,0xffffffffU,0xffffffffU
114765 };
114766 #else
114767 /* The low half of the order-2 of the P384 curve. */
114768 static const uint32_t p384_order_low[6] = {
114769     0xccc52971U,0xecec196aU,0x48b0a77aU,0x581a0db2U,0xf4372ddfU,0xc7634d81U
114770 };
114771 #endif /* WOLFSSL_SP_SMALL */
114772 
114773 /* Square number mod the order of P384 curve. (r = a * a mod order)
114774  *
114775  * r  Result of the squaring.
114776  * a  Number to square.
114777  */
sp_384_mont_sqr_order_12(sp_digit * r,const sp_digit * a)114778 static void sp_384_mont_sqr_order_12(sp_digit* r, const sp_digit* a)
114779 {
114780     sp_384_sqr_12(r, a);
114781     sp_384_mont_reduce_order_12(r, p384_order, p384_mp_order);
114782 }
114783 
114784 #ifndef WOLFSSL_SP_SMALL
114785 /* Square number mod the order of P384 curve a number of times.
114786  * (r = a ^ n mod order)
114787  *
114788  * r  Result of the squaring.
114789  * a  Number to square.
114790  */
sp_384_mont_sqr_n_order_12(sp_digit * r,const sp_digit * a,int n)114791 static void sp_384_mont_sqr_n_order_12(sp_digit* r, const sp_digit* a, int n)
114792 {
114793     int i;
114794 
114795     sp_384_mont_sqr_order_12(r, a);
114796     for (i=1; i<n; i++) {
114797         sp_384_mont_sqr_order_12(r, r);
114798     }
114799 }
114800 #endif /* !WOLFSSL_SP_SMALL */
114801 
114802 /* Invert the number, in Montgomery form, modulo the order of the P384 curve.
114803  * (r = 1 / a mod order)
114804  *
114805  * r   Inverse result.
114806  * a   Number to invert.
114807  * td  Temporary data.
114808  */
114809 
114810 #ifdef WOLFSSL_SP_NONBLOCK
114811 typedef struct sp_384_mont_inv_order_12_ctx {
114812     int state;
114813     int i;
114814 } sp_384_mont_inv_order_12_ctx;
sp_384_mont_inv_order_12_nb(sp_ecc_ctx_t * sp_ctx,sp_digit * r,const sp_digit * a,sp_digit * t)114815 static int sp_384_mont_inv_order_12_nb(sp_ecc_ctx_t* sp_ctx, sp_digit* r, const sp_digit* a,
114816         sp_digit* t)
114817 {
114818     int err = FP_WOULDBLOCK;
114819     sp_384_mont_inv_order_12_ctx* ctx = (sp_384_mont_inv_order_12_ctx*)sp_ctx;
114820 
114821     typedef char ctx_size_test[sizeof(sp_384_mont_inv_order_12_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
114822     (void)sizeof(ctx_size_test);
114823 
114824     switch (ctx->state) {
114825     case 0:
114826         XMEMCPY(t, a, sizeof(sp_digit) * 12);
114827         ctx->i = 382;
114828         ctx->state = 1;
114829         break;
114830     case 1:
114831         sp_384_mont_sqr_order_12(t, t);
114832         ctx->state = 2;
114833         break;
114834     case 2:
114835         if ((p384_order_minus_2[ctx->i / 32] & ((sp_int_digit)1 << (ctx->i % 32))) != 0) {
114836             sp_384_mont_mul_order_12(t, t, a);
114837         }
114838         ctx->i--;
114839         ctx->state = (ctx->i == 0) ? 3 : 1;
114840         break;
114841     case 3:
114842         XMEMCPY(r, t, sizeof(sp_digit) * 12U);
114843         err = MP_OKAY;
114844         break;
114845     }
114846     return err;
114847 }
114848 #endif /* WOLFSSL_SP_NONBLOCK */
114849 
sp_384_mont_inv_order_12(sp_digit * r,const sp_digit * a,sp_digit * td)114850 static void sp_384_mont_inv_order_12(sp_digit* r, const sp_digit* a,
114851         sp_digit* td)
114852 {
114853 #ifdef WOLFSSL_SP_SMALL
114854     sp_digit* t = td;
114855     int i;
114856 
114857     XMEMCPY(t, a, sizeof(sp_digit) * 12);
114858     for (i=382; i>=0; i--) {
114859         sp_384_mont_sqr_order_12(t, t);
114860         if ((p384_order_minus_2[i / 32] & ((sp_int_digit)1 << (i % 32))) != 0) {
114861             sp_384_mont_mul_order_12(t, t, a);
114862         }
114863     }
114864     XMEMCPY(r, t, sizeof(sp_digit) * 12U);
114865 #else
114866     sp_digit* t = td;
114867     sp_digit* t2 = td + 2 * 12;
114868     sp_digit* t3 = td + 4 * 12;
114869     int i;
114870 
114871     /* t = a^2 */
114872     sp_384_mont_sqr_order_12(t, a);
114873     /* t = a^3 = t * a */
114874     sp_384_mont_mul_order_12(t, t, a);
114875     /* t2= a^c = t ^ 2 ^ 2 */
114876     sp_384_mont_sqr_n_order_12(t2, t, 2);
114877     /* t = a^f = t2 * t */
114878     sp_384_mont_mul_order_12(t, t2, t);
114879     /* t2= a^f0 = t ^ 2 ^ 4 */
114880     sp_384_mont_sqr_n_order_12(t2, t, 4);
114881     /* t = a^ff = t2 * t */
114882     sp_384_mont_mul_order_12(t, t2, t);
114883     /* t2= a^ff00 = t ^ 2 ^ 8 */
114884     sp_384_mont_sqr_n_order_12(t2, t, 8);
114885     /* t3= a^ffff = t2 * t */
114886     sp_384_mont_mul_order_12(t3, t2, t);
114887     /* t2= a^ffff0000 = t3 ^ 2 ^ 16 */
114888     sp_384_mont_sqr_n_order_12(t2, t3, 16);
114889     /* t = a^ffffffff = t2 * t3 */
114890     sp_384_mont_mul_order_12(t, t2, t3);
114891     /* t2= a^ffffffff0000 = t ^ 2 ^ 16  */
114892     sp_384_mont_sqr_n_order_12(t2, t, 16);
114893     /* t = a^ffffffffffff = t2 * t3 */
114894     sp_384_mont_mul_order_12(t, t2, t3);
114895     /* t2= a^ffffffffffff000000000000 = t ^ 2 ^ 48  */
114896     sp_384_mont_sqr_n_order_12(t2, t, 48);
114897     /* t= a^fffffffffffffffffffffffff = t2 * t */
114898     sp_384_mont_mul_order_12(t, t2, t);
114899     /* t2= a^ffffffffffffffffffffffff000000000000000000000000 */
114900     sp_384_mont_sqr_n_order_12(t2, t, 96);
114901     /* t2= a^ffffffffffffffffffffffffffffffffffffffffffffffff = t2 * t */
114902     sp_384_mont_mul_order_12(t2, t2, t);
114903     for (i=191; i>=1; i--) {
114904         sp_384_mont_sqr_order_12(t2, t2);
114905         if ((p384_order_low[i / 32] & ((sp_int_digit)1 << (i % 32))) != 0) {
114906             sp_384_mont_mul_order_12(t2, t2, a);
114907         }
114908     }
114909     sp_384_mont_sqr_order_12(t2, t2);
114910     sp_384_mont_mul_order_12(r, t2, a);
114911 #endif /* WOLFSSL_SP_SMALL */
114912 }
114913 
114914 #endif /* HAVE_ECC_SIGN || (HAVE_ECC_VERIFY && WOLFSSL_SP_SMALL) */
114915 #endif /* HAVE_ECC_SIGN | HAVE_ECC_VERIFY */
114916 #ifdef HAVE_ECC_SIGN
114917 #ifndef SP_ECC_MAX_SIG_GEN
114918 #define SP_ECC_MAX_SIG_GEN  64
114919 #endif
114920 
114921 /* Calculate second signature value S from R, k and private value.
114922  *
114923  * s = (r * x + e) / k
114924  *
114925  * s    Signature value.
114926  * r    First signature value.
114927  * k    Ephemeral private key.
114928  * x    Private key as a number.
114929  * e    Hash of message as a number.
114930  * tmp  Temporary storage for intermediate numbers.
114931  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
114932  */
sp_384_calc_s_12(sp_digit * s,const sp_digit * r,sp_digit * k,sp_digit * x,const sp_digit * e,sp_digit * tmp)114933 static int sp_384_calc_s_12(sp_digit* s, const sp_digit* r, sp_digit* k,
114934     sp_digit* x, const sp_digit* e, sp_digit* tmp)
114935 {
114936     int err;
114937     sp_digit carry;
114938     sp_int32 c;
114939     sp_digit* kInv = k;
114940 
114941     /* Conv k to Montgomery form (mod order) */
114942         sp_384_mul_12(k, k, p384_norm_order);
114943     err = sp_384_mod_12(k, k, p384_order);
114944     if (err == MP_OKAY) {
114945         sp_384_norm_12(k);
114946 
114947         /* kInv = 1/k mod order */
114948             sp_384_mont_inv_order_12(kInv, k, tmp);
114949         sp_384_norm_12(kInv);
114950 
114951         /* s = r * x + e */
114952             sp_384_mul_12(x, x, r);
114953         err = sp_384_mod_12(x, x, p384_order);
114954     }
114955     if (err == MP_OKAY) {
114956         sp_384_norm_12(x);
114957         carry = sp_384_add_12(s, e, x);
114958         sp_384_cond_sub_12(s, s, p384_order, 0 - carry);
114959         sp_384_norm_12(s);
114960         c = sp_384_cmp_12(s, p384_order);
114961         sp_384_cond_sub_12(s, s, p384_order,
114962             (sp_digit)0 - (sp_digit)(c >= 0));
114963         sp_384_norm_12(s);
114964 
114965         /* s = s * k^-1 mod order */
114966             sp_384_mont_mul_order_12(s, s, kInv);
114967         sp_384_norm_12(s);
114968     }
114969 
114970     return err;
114971 }
114972 
114973 /* Sign the hash using the private key.
114974  *   e = [hash, 384 bits] from binary
114975  *   r = (k.G)->x mod order
114976  *   s = (r * x + e) / k mod order
114977  * The hash is truncated to the first 384 bits.
114978  *
114979  * hash     Hash to sign.
114980  * hashLen  Length of the hash data.
114981  * rng      Random number generator.
114982  * priv     Private part of key - scalar.
114983  * rm       First part of result as an mp_int.
114984  * sm       Sirst part of result as an mp_int.
114985  * heap     Heap to use for allocation.
114986  * returns RNG failures, MEMORY_E when memory allocation fails and
114987  * MP_OKAY on success.
114988  */
114989 #ifdef WOLFSSL_SP_NONBLOCK
114990 typedef struct sp_ecc_sign_384_ctx {
114991     int state;
114992     union {
114993         sp_384_ecc_mulmod_12_ctx mulmod_ctx;
114994         sp_384_mont_inv_order_12_ctx mont_inv_order_ctx;
114995     };
114996     sp_digit e[2*12];
114997     sp_digit x[2*12];
114998     sp_digit k[2*12];
114999     sp_digit r[2*12];
115000     sp_digit tmp[3 * 2*12];
115001     sp_point_384 point;
115002     sp_digit* s;
115003     sp_digit* kInv;
115004     int i;
115005 } sp_ecc_sign_384_ctx;
115006 
sp_ecc_sign_384_nb(sp_ecc_ctx_t * sp_ctx,const byte * hash,word32 hashLen,WC_RNG * rng,mp_int * priv,mp_int * rm,mp_int * sm,mp_int * km,void * heap)115007 int sp_ecc_sign_384_nb(sp_ecc_ctx_t* sp_ctx, const byte* hash, word32 hashLen, WC_RNG* rng,
115008     mp_int* priv, mp_int* rm, mp_int* sm, mp_int* km, void* heap)
115009 {
115010     int err = FP_WOULDBLOCK;
115011     sp_ecc_sign_384_ctx* ctx = (sp_ecc_sign_384_ctx*)sp_ctx->data;
115012 
115013     typedef char ctx_size_test[sizeof(sp_ecc_sign_384_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
115014     (void)sizeof(ctx_size_test);
115015 
115016     (void)heap;
115017 
115018     switch (ctx->state) {
115019     case 0: /* INIT */
115020         ctx->s = ctx->e;
115021         ctx->kInv = ctx->k;
115022         if (hashLen > 48U) {
115023             hashLen = 48U;
115024         }
115025 
115026         ctx->i = SP_ECC_MAX_SIG_GEN;
115027         ctx->state = 1;
115028         break;
115029     case 1: /* GEN */
115030         /* New random point. */
115031         if (km == NULL || mp_iszero(km)) {
115032             err = sp_384_ecc_gen_k_12(rng, ctx->k);
115033         }
115034         else {
115035             sp_384_from_mp(ctx->k, 12, km);
115036             mp_zero(km);
115037         }
115038         XMEMSET(&ctx->mulmod_ctx, 0, sizeof(ctx->mulmod_ctx));
115039         ctx->state = 2;
115040         break;
115041     case 2: /* MULMOD */
115042         err = sp_384_ecc_mulmod_12_nb((sp_ecc_ctx_t*)&ctx->mulmod_ctx,
115043             &ctx->point, &p384_base, ctx->k, 1, 1, heap);
115044         if (err == MP_OKAY) {
115045             ctx->state = 3;
115046         }
115047         break;
115048     case 3: /* MODORDER */
115049     {
115050         sp_int32 c;
115051         /* r = point->x mod order */
115052         XMEMCPY(ctx->r, ctx->point.x, sizeof(sp_digit) * 12U);
115053         sp_384_norm_12(ctx->r);
115054         c = sp_384_cmp_12(ctx->r, p384_order);
115055         sp_384_cond_sub_12(ctx->r, ctx->r, p384_order,
115056             (sp_digit)0 - (sp_digit)(c >= 0));
115057         sp_384_norm_12(ctx->r);
115058 
115059         sp_384_from_mp(ctx->x, 12, priv);
115060         sp_384_from_bin(ctx->e, 12, hash, (int)hashLen);
115061         ctx->state = 4;
115062         break;
115063     }
115064     case 4: /* KMODORDER */
115065         /* Conv k to Montgomery form (mod order) */
115066         sp_384_mul_12(ctx->k, ctx->k, p384_norm_order);
115067         err = sp_384_mod_12(ctx->k, ctx->k, p384_order);
115068         if (err == MP_OKAY) {
115069             sp_384_norm_12(ctx->k);
115070             XMEMSET(&ctx->mont_inv_order_ctx, 0, sizeof(ctx->mont_inv_order_ctx));
115071             ctx->state = 5;
115072         }
115073         break;
115074     case 5: /* KINV */
115075         /* kInv = 1/k mod order */
115076         err = sp_384_mont_inv_order_12_nb((sp_ecc_ctx_t*)&ctx->mont_inv_order_ctx, ctx->kInv, ctx->k, ctx->tmp);
115077         if (err == MP_OKAY) {
115078             XMEMSET(&ctx->mont_inv_order_ctx, 0, sizeof(ctx->mont_inv_order_ctx));
115079             ctx->state = 6;
115080         }
115081         break;
115082     case 6: /* KINVNORM */
115083         sp_384_norm_12(ctx->kInv);
115084         ctx->state = 7;
115085         break;
115086     case 7: /* R */
115087         /* s = r * x + e */
115088         sp_384_mul_12(ctx->x, ctx->x, ctx->r);
115089         ctx->state = 8;
115090         break;
115091     case 8: /* S1 */
115092         err = sp_384_mod_12(ctx->x, ctx->x, p384_order);
115093         if (err == MP_OKAY)
115094             ctx->state = 9;
115095         break;
115096     case 9: /* S2 */
115097     {
115098         sp_digit carry;
115099         sp_int32 c;
115100         sp_384_norm_12(ctx->x);
115101         carry = sp_384_add_12(ctx->s, ctx->e, ctx->x);
115102         sp_384_cond_sub_12(ctx->s, ctx->s,
115103             p384_order, 0 - carry);
115104         sp_384_norm_12(ctx->s);
115105         c = sp_384_cmp_12(ctx->s, p384_order);
115106         sp_384_cond_sub_12(ctx->s, ctx->s, p384_order,
115107             (sp_digit)0 - (sp_digit)(c >= 0));
115108         sp_384_norm_12(ctx->s);
115109 
115110         /* s = s * k^-1 mod order */
115111         sp_384_mont_mul_order_12(ctx->s, ctx->s, ctx->kInv);
115112         sp_384_norm_12(ctx->s);
115113 
115114         /* Check that signature is usable. */
115115         if (sp_384_iszero_12(ctx->s) == 0) {
115116             ctx->state = 10;
115117             break;
115118         }
115119     #ifdef WOLFSSL_ECDSA_SET_K_ONE_LOOP
115120         ctx->i = 1;
115121     #endif
115122 
115123         /* not usable gen, try again */
115124         ctx->i--;
115125         if (ctx->i == 0) {
115126             err = RNG_FAILURE_E;
115127         }
115128         ctx->state = 1;
115129         break;
115130     }
115131     case 10: /* RES */
115132         err = sp_384_to_mp(ctx->r, rm);
115133         if (err == MP_OKAY) {
115134             err = sp_384_to_mp(ctx->s, sm);
115135         }
115136         break;
115137     }
115138 
115139     if (err == MP_OKAY && ctx->state != 10) {
115140         err = FP_WOULDBLOCK;
115141     }
115142     if (err != FP_WOULDBLOCK) {
115143         XMEMSET(ctx->e, 0, sizeof(sp_digit) * 2U * 12U);
115144         XMEMSET(ctx->x, 0, sizeof(sp_digit) * 2U * 12U);
115145         XMEMSET(ctx->k, 0, sizeof(sp_digit) * 2U * 12U);
115146         XMEMSET(ctx->r, 0, sizeof(sp_digit) * 2U * 12U);
115147         XMEMSET(ctx->tmp, 0, sizeof(sp_digit) * 3U * 2U * 12U);
115148     }
115149 
115150     return err;
115151 }
115152 #endif /* WOLFSSL_SP_NONBLOCK */
115153 
sp_ecc_sign_384(const byte * hash,word32 hashLen,WC_RNG * rng,const mp_int * priv,mp_int * rm,mp_int * sm,mp_int * km,void * heap)115154 int sp_ecc_sign_384(const byte* hash, word32 hashLen, WC_RNG* rng,
115155     const mp_int* priv, mp_int* rm, mp_int* sm, mp_int* km, void* heap)
115156 {
115157 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
115158     sp_digit* e = NULL;
115159     sp_point_384* point = NULL;
115160 #else
115161     sp_digit e[7 * 2 * 12];
115162     sp_point_384 point[1];
115163 #endif
115164     sp_digit* x = NULL;
115165     sp_digit* k = NULL;
115166     sp_digit* r = NULL;
115167     sp_digit* tmp = NULL;
115168     sp_digit* s = NULL;
115169     sp_int32 c;
115170     int err = MP_OKAY;
115171     int i;
115172 
115173     (void)heap;
115174 
115175 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
115176     if (err == MP_OKAY) {
115177         point = (sp_point_384*)XMALLOC(sizeof(sp_point_384), heap,
115178                                              DYNAMIC_TYPE_ECC);
115179         if (point == NULL)
115180             err = MEMORY_E;
115181     }
115182     if (err == MP_OKAY) {
115183         e = (sp_digit*)XMALLOC(sizeof(sp_digit) * 7 * 2 * 12, heap,
115184                                DYNAMIC_TYPE_ECC);
115185         if (e == NULL)
115186             err = MEMORY_E;
115187     }
115188 #endif
115189 
115190     if (err == MP_OKAY) {
115191         x = e + 2 * 12;
115192         k = e + 4 * 12;
115193         r = e + 6 * 12;
115194         tmp = e + 8 * 12;
115195         s = e;
115196 
115197         if (hashLen > 48U) {
115198             hashLen = 48U;
115199         }
115200     }
115201 
115202     for (i = SP_ECC_MAX_SIG_GEN; err == MP_OKAY && i > 0; i--) {
115203         /* New random point. */
115204         if (km == NULL || mp_iszero(km)) {
115205             err = sp_384_ecc_gen_k_12(rng, k);
115206         }
115207         else {
115208             sp_384_from_mp(k, 12, km);
115209             mp_zero(km);
115210         }
115211         if (err == MP_OKAY) {
115212                 err = sp_384_ecc_mulmod_base_12(point, k, 1, 1, heap);
115213         }
115214 
115215         if (err == MP_OKAY) {
115216             /* r = point->x mod order */
115217             XMEMCPY(r, point->x, sizeof(sp_digit) * 12U);
115218             sp_384_norm_12(r);
115219             c = sp_384_cmp_12(r, p384_order);
115220             sp_384_cond_sub_12(r, r, p384_order,
115221                 (sp_digit)0 - (sp_digit)(c >= 0));
115222             sp_384_norm_12(r);
115223 
115224             sp_384_from_mp(x, 12, priv);
115225             sp_384_from_bin(e, 12, hash, (int)hashLen);
115226 
115227             err = sp_384_calc_s_12(s, r, k, x, e, tmp);
115228         }
115229 
115230         /* Check that signature is usable. */
115231         if ((err == MP_OKAY) && (sp_384_iszero_12(s) == 0)) {
115232             break;
115233         }
115234 #ifdef WOLFSSL_ECDSA_SET_K_ONE_LOOP
115235         i = 1;
115236 #endif
115237     }
115238 
115239     if (i == 0) {
115240         err = RNG_FAILURE_E;
115241     }
115242 
115243     if (err == MP_OKAY) {
115244         err = sp_384_to_mp(r, rm);
115245     }
115246     if (err == MP_OKAY) {
115247         err = sp_384_to_mp(s, sm);
115248     }
115249 
115250 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
115251     if (e != NULL)
115252 #endif
115253     {
115254         ForceZero(e, sizeof(sp_digit) * 7 * 2 * 12);
115255     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
115256         XFREE(e, heap, DYNAMIC_TYPE_ECC);
115257     #endif
115258     }
115259 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
115260     if (point != NULL)
115261 #endif
115262     {
115263         ForceZero(point, sizeof(sp_point_384));
115264     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
115265         XFREE(point, heap, DYNAMIC_TYPE_ECC);
115266     #endif
115267     }
115268 
115269     return err;
115270 }
115271 #endif /* HAVE_ECC_SIGN */
115272 
115273 #ifndef WOLFSSL_SP_SMALL
115274 /* Divide the number by 2 mod the modulus. (r = a / 2 % m)
115275  *
115276  * r  Result of division by 2.
115277  * a  Number to divide.
115278  * m  Modulus.
115279  */
sp_384_div2_mod_12(sp_digit * r,const sp_digit * a,const sp_digit * m)115280 static void sp_384_div2_mod_12(sp_digit* r, const sp_digit* a,
115281         const sp_digit* m)
115282 {
115283     __asm__ __volatile__ (
115284         "ldr	r3, [%[a]]\n\t"
115285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115286         "lsls	r3, r3, #31\n\t"
115287 #else
115288         "lsl	r3, r3, #31\n\t"
115289 #endif
115290         "beq	L_sp_384_div2_mod_12_no_add_%=\n\t"
115291         "ldr	r4, [%[a]]\n\t"
115292         "ldr	r5, [%[a], #4]\n\t"
115293         "ldr	r6, [%[m]]\n\t"
115294         "ldr	r7, [%[m], #4]\n\t"
115295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115296         "adds	r4, r4, r6\n\t"
115297 #else
115298         "add	r4, r4, r6\n\t"
115299 #endif
115300 #ifdef WOLFSSL_KEIL
115301         "adcs	r5, r5, r7\n\t"
115302 #elif defined(__clang__)
115303         "adcs	r5, r7\n\t"
115304 #else
115305         "adc	r5, r7\n\t"
115306 #endif
115307         "str	r4, [%[r]]\n\t"
115308         "str	r5, [%[r], #4]\n\t"
115309         "ldr	r4, [%[a], #8]\n\t"
115310         "ldr	r5, [%[a], #12]\n\t"
115311         "ldr	r6, [%[m], #8]\n\t"
115312         "ldr	r7, [%[m], #12]\n\t"
115313 #ifdef WOLFSSL_KEIL
115314         "adcs	r4, r4, r6\n\t"
115315 #elif defined(__clang__)
115316         "adcs	r4, r6\n\t"
115317 #else
115318         "adc	r4, r6\n\t"
115319 #endif
115320 #ifdef WOLFSSL_KEIL
115321         "adcs	r5, r5, r7\n\t"
115322 #elif defined(__clang__)
115323         "adcs	r5, r7\n\t"
115324 #else
115325         "adc	r5, r7\n\t"
115326 #endif
115327         "str	r4, [%[r], #8]\n\t"
115328         "str	r5, [%[r], #12]\n\t"
115329         "ldr	r4, [%[a], #16]\n\t"
115330         "ldr	r5, [%[a], #20]\n\t"
115331         "ldr	r6, [%[m], #16]\n\t"
115332         "ldr	r7, [%[m], #20]\n\t"
115333 #ifdef WOLFSSL_KEIL
115334         "adcs	r4, r4, r6\n\t"
115335 #elif defined(__clang__)
115336         "adcs	r4, r6\n\t"
115337 #else
115338         "adc	r4, r6\n\t"
115339 #endif
115340 #ifdef WOLFSSL_KEIL
115341         "adcs	r5, r5, r7\n\t"
115342 #elif defined(__clang__)
115343         "adcs	r5, r7\n\t"
115344 #else
115345         "adc	r5, r7\n\t"
115346 #endif
115347         "str	r4, [%[r], #16]\n\t"
115348         "str	r5, [%[r], #20]\n\t"
115349         "ldr	r4, [%[a], #24]\n\t"
115350         "ldr	r5, [%[a], #28]\n\t"
115351         "ldr	r6, [%[m], #24]\n\t"
115352         "ldr	r7, [%[m], #28]\n\t"
115353 #ifdef WOLFSSL_KEIL
115354         "adcs	r4, r4, r6\n\t"
115355 #elif defined(__clang__)
115356         "adcs	r4, r6\n\t"
115357 #else
115358         "adc	r4, r6\n\t"
115359 #endif
115360 #ifdef WOLFSSL_KEIL
115361         "adcs	r5, r5, r7\n\t"
115362 #elif defined(__clang__)
115363         "adcs	r5, r7\n\t"
115364 #else
115365         "adc	r5, r7\n\t"
115366 #endif
115367         "str	r4, [%[r], #24]\n\t"
115368         "str	r5, [%[r], #28]\n\t"
115369         "ldr	r4, [%[a], #32]\n\t"
115370         "ldr	r5, [%[a], #36]\n\t"
115371         "ldr	r6, [%[m], #32]\n\t"
115372         "ldr	r7, [%[m], #36]\n\t"
115373 #ifdef WOLFSSL_KEIL
115374         "adcs	r4, r4, r6\n\t"
115375 #elif defined(__clang__)
115376         "adcs	r4, r6\n\t"
115377 #else
115378         "adc	r4, r6\n\t"
115379 #endif
115380 #ifdef WOLFSSL_KEIL
115381         "adcs	r5, r5, r7\n\t"
115382 #elif defined(__clang__)
115383         "adcs	r5, r7\n\t"
115384 #else
115385         "adc	r5, r7\n\t"
115386 #endif
115387         "str	r4, [%[r], #32]\n\t"
115388         "str	r5, [%[r], #36]\n\t"
115389         "ldr	r4, [%[a], #40]\n\t"
115390         "ldr	r5, [%[a], #44]\n\t"
115391         "ldr	r6, [%[m], #40]\n\t"
115392         "ldr	r7, [%[m], #44]\n\t"
115393 #ifdef WOLFSSL_KEIL
115394         "adcs	r4, r4, r6\n\t"
115395 #elif defined(__clang__)
115396         "adcs	r4, r6\n\t"
115397 #else
115398         "adc	r4, r6\n\t"
115399 #endif
115400 #ifdef WOLFSSL_KEIL
115401         "adcs	r5, r5, r7\n\t"
115402 #elif defined(__clang__)
115403         "adcs	r5, r7\n\t"
115404 #else
115405         "adc	r5, r7\n\t"
115406 #endif
115407         "str	r4, [%[r], #40]\n\t"
115408         "str	r5, [%[r], #44]\n\t"
115409         "movs	r3, #0\n\t"
115410 #ifdef WOLFSSL_KEIL
115411         "adcs	r3, r3, r3\n\t"
115412 #elif defined(__clang__)
115413         "adcs	r3, r3\n\t"
115414 #else
115415         "adc	r3, r3\n\t"
115416 #endif
115417 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115418         "lsls	r3, r3, #31\n\t"
115419 #else
115420         "lsl	r3, r3, #31\n\t"
115421 #endif
115422         "b	L_sp_384_div2_mod_12_div2_%=\n\t"
115423         "\n"
115424     "L_sp_384_div2_mod_12_no_add_%=:\n\t"
115425         "ldr	r4, [%[a]]\n\t"
115426         "ldr	r5, [%[a], #4]\n\t"
115427         "str	r4, [%[r]]\n\t"
115428         "str	r5, [%[r], #4]\n\t"
115429         "ldr	r4, [%[a], #4]\n\t"
115430         "ldr	r5, [%[a], #8]\n\t"
115431         "str	r4, [%[r], #4]\n\t"
115432         "str	r5, [%[r], #8]\n\t"
115433         "ldr	r4, [%[a], #8]\n\t"
115434         "ldr	r5, [%[a], #12]\n\t"
115435         "str	r4, [%[r], #8]\n\t"
115436         "str	r5, [%[r], #12]\n\t"
115437         "ldr	r4, [%[a], #12]\n\t"
115438         "ldr	r5, [%[a], #16]\n\t"
115439         "str	r4, [%[r], #12]\n\t"
115440         "str	r5, [%[r], #16]\n\t"
115441         "ldr	r4, [%[a], #16]\n\t"
115442         "ldr	r5, [%[a], #20]\n\t"
115443         "str	r4, [%[r], #16]\n\t"
115444         "str	r5, [%[r], #20]\n\t"
115445         "ldr	r4, [%[a], #20]\n\t"
115446         "ldr	r5, [%[a], #24]\n\t"
115447         "str	r4, [%[r], #20]\n\t"
115448         "str	r5, [%[r], #24]\n\t"
115449         "ldr	r4, [%[a], #24]\n\t"
115450         "ldr	r5, [%[a], #28]\n\t"
115451         "str	r4, [%[r], #24]\n\t"
115452         "str	r5, [%[r], #28]\n\t"
115453         "ldr	r4, [%[a], #28]\n\t"
115454         "ldr	r5, [%[a], #32]\n\t"
115455         "str	r4, [%[r], #28]\n\t"
115456         "str	r5, [%[r], #32]\n\t"
115457         "ldr	r4, [%[a], #32]\n\t"
115458         "ldr	r5, [%[a], #36]\n\t"
115459         "str	r4, [%[r], #32]\n\t"
115460         "str	r5, [%[r], #36]\n\t"
115461         "ldr	r4, [%[a], #36]\n\t"
115462         "ldr	r5, [%[a], #40]\n\t"
115463         "str	r4, [%[r], #36]\n\t"
115464         "str	r5, [%[r], #40]\n\t"
115465         "ldr	r4, [%[a], #40]\n\t"
115466         "ldr	r5, [%[a], #44]\n\t"
115467         "str	r4, [%[r], #40]\n\t"
115468         "str	r5, [%[r], #44]\n\t"
115469         "\n"
115470     "L_sp_384_div2_mod_12_div2_%=:\n\t"
115471         "ldr	r4, [%[r]]\n\t"
115472         "ldr	r5, [%[r], #4]\n\t"
115473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115474         "lsrs	r4, r4, #1\n\t"
115475 #else
115476         "lsr	r4, r4, #1\n\t"
115477 #endif
115478 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115479         "lsls	r6, r5, #31\n\t"
115480 #else
115481         "lsl	r6, r5, #31\n\t"
115482 #endif
115483 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115484         "lsrs	r5, r5, #1\n\t"
115485 #else
115486         "lsr	r5, r5, #1\n\t"
115487 #endif
115488 #ifdef WOLFSSL_KEIL
115489         "orrs	r4, r4, r6\n\t"
115490 #elif defined(__clang__)
115491         "orrs	r4, r6\n\t"
115492 #else
115493         "orr	r4, r6\n\t"
115494 #endif
115495         "ldr	r7, [%[r], #8]\n\t"
115496         "str	r4, [%[r]]\n\t"
115497 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115498         "lsls	r6, r7, #31\n\t"
115499 #else
115500         "lsl	r6, r7, #31\n\t"
115501 #endif
115502 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115503         "lsrs	r7, r7, #1\n\t"
115504 #else
115505         "lsr	r7, r7, #1\n\t"
115506 #endif
115507 #ifdef WOLFSSL_KEIL
115508         "orrs	r5, r5, r6\n\t"
115509 #elif defined(__clang__)
115510         "orrs	r5, r6\n\t"
115511 #else
115512         "orr	r5, r6\n\t"
115513 #endif
115514         "ldr	r4, [%[r], #12]\n\t"
115515         "str	r5, [%[r], #4]\n\t"
115516 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115517         "lsls	r6, r4, #31\n\t"
115518 #else
115519         "lsl	r6, r4, #31\n\t"
115520 #endif
115521 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115522         "lsrs	r4, r4, #1\n\t"
115523 #else
115524         "lsr	r4, r4, #1\n\t"
115525 #endif
115526 #ifdef WOLFSSL_KEIL
115527         "orrs	r7, r7, r6\n\t"
115528 #elif defined(__clang__)
115529         "orrs	r7, r6\n\t"
115530 #else
115531         "orr	r7, r6\n\t"
115532 #endif
115533         "ldr	r5, [%[r], #16]\n\t"
115534         "str	r7, [%[r], #8]\n\t"
115535 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115536         "lsls	r6, r5, #31\n\t"
115537 #else
115538         "lsl	r6, r5, #31\n\t"
115539 #endif
115540 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115541         "lsrs	r5, r5, #1\n\t"
115542 #else
115543         "lsr	r5, r5, #1\n\t"
115544 #endif
115545 #ifdef WOLFSSL_KEIL
115546         "orrs	r4, r4, r6\n\t"
115547 #elif defined(__clang__)
115548         "orrs	r4, r6\n\t"
115549 #else
115550         "orr	r4, r6\n\t"
115551 #endif
115552         "ldr	r7, [%[r], #20]\n\t"
115553         "str	r4, [%[r], #12]\n\t"
115554 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115555         "lsls	r6, r7, #31\n\t"
115556 #else
115557         "lsl	r6, r7, #31\n\t"
115558 #endif
115559 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115560         "lsrs	r7, r7, #1\n\t"
115561 #else
115562         "lsr	r7, r7, #1\n\t"
115563 #endif
115564 #ifdef WOLFSSL_KEIL
115565         "orrs	r5, r5, r6\n\t"
115566 #elif defined(__clang__)
115567         "orrs	r5, r6\n\t"
115568 #else
115569         "orr	r5, r6\n\t"
115570 #endif
115571         "ldr	r4, [%[r], #24]\n\t"
115572         "str	r5, [%[r], #16]\n\t"
115573 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115574         "lsls	r6, r4, #31\n\t"
115575 #else
115576         "lsl	r6, r4, #31\n\t"
115577 #endif
115578 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115579         "lsrs	r4, r4, #1\n\t"
115580 #else
115581         "lsr	r4, r4, #1\n\t"
115582 #endif
115583 #ifdef WOLFSSL_KEIL
115584         "orrs	r7, r7, r6\n\t"
115585 #elif defined(__clang__)
115586         "orrs	r7, r6\n\t"
115587 #else
115588         "orr	r7, r6\n\t"
115589 #endif
115590         "ldr	r5, [%[r], #28]\n\t"
115591         "str	r7, [%[r], #20]\n\t"
115592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115593         "lsls	r6, r5, #31\n\t"
115594 #else
115595         "lsl	r6, r5, #31\n\t"
115596 #endif
115597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115598         "lsrs	r5, r5, #1\n\t"
115599 #else
115600         "lsr	r5, r5, #1\n\t"
115601 #endif
115602 #ifdef WOLFSSL_KEIL
115603         "orrs	r4, r4, r6\n\t"
115604 #elif defined(__clang__)
115605         "orrs	r4, r6\n\t"
115606 #else
115607         "orr	r4, r6\n\t"
115608 #endif
115609         "ldr	r7, [%[r], #32]\n\t"
115610         "str	r4, [%[r], #24]\n\t"
115611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115612         "lsls	r6, r7, #31\n\t"
115613 #else
115614         "lsl	r6, r7, #31\n\t"
115615 #endif
115616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115617         "lsrs	r7, r7, #1\n\t"
115618 #else
115619         "lsr	r7, r7, #1\n\t"
115620 #endif
115621 #ifdef WOLFSSL_KEIL
115622         "orrs	r5, r5, r6\n\t"
115623 #elif defined(__clang__)
115624         "orrs	r5, r6\n\t"
115625 #else
115626         "orr	r5, r6\n\t"
115627 #endif
115628         "ldr	r4, [%[r], #36]\n\t"
115629         "str	r5, [%[r], #28]\n\t"
115630 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115631         "lsls	r6, r4, #31\n\t"
115632 #else
115633         "lsl	r6, r4, #31\n\t"
115634 #endif
115635 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115636         "lsrs	r4, r4, #1\n\t"
115637 #else
115638         "lsr	r4, r4, #1\n\t"
115639 #endif
115640 #ifdef WOLFSSL_KEIL
115641         "orrs	r7, r7, r6\n\t"
115642 #elif defined(__clang__)
115643         "orrs	r7, r6\n\t"
115644 #else
115645         "orr	r7, r6\n\t"
115646 #endif
115647         "ldr	r5, [%[r], #40]\n\t"
115648         "str	r7, [%[r], #32]\n\t"
115649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115650         "lsls	r6, r5, #31\n\t"
115651 #else
115652         "lsl	r6, r5, #31\n\t"
115653 #endif
115654 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115655         "lsrs	r5, r5, #1\n\t"
115656 #else
115657         "lsr	r5, r5, #1\n\t"
115658 #endif
115659 #ifdef WOLFSSL_KEIL
115660         "orrs	r4, r4, r6\n\t"
115661 #elif defined(__clang__)
115662         "orrs	r4, r6\n\t"
115663 #else
115664         "orr	r4, r6\n\t"
115665 #endif
115666         "ldr	r7, [%[r], #44]\n\t"
115667         "str	r4, [%[r], #36]\n\t"
115668 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115669         "lsls	r6, r7, #31\n\t"
115670 #else
115671         "lsl	r6, r7, #31\n\t"
115672 #endif
115673 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115674         "lsrs	r7, r7, #1\n\t"
115675 #else
115676         "lsr	r7, r7, #1\n\t"
115677 #endif
115678 #ifdef WOLFSSL_KEIL
115679         "orrs	r5, r5, r6\n\t"
115680 #elif defined(__clang__)
115681         "orrs	r5, r6\n\t"
115682 #else
115683         "orr	r5, r6\n\t"
115684 #endif
115685 #ifdef WOLFSSL_KEIL
115686         "orrs	r7, r7, r3\n\t"
115687 #elif defined(__clang__)
115688         "orrs	r7, r3\n\t"
115689 #else
115690         "orr	r7, r3\n\t"
115691 #endif
115692         "str	r5, [%[r], #40]\n\t"
115693         "str	r7, [%[r], #44]\n\t"
115694         : [r] "+r" (r), [a] "+r" (a), [m] "+r" (m)
115695         :
115696         : "memory", "r3", "r4", "r5", "r6", "r7"
115697     );
115698 }
115699 
sp_384_num_bits_12(sp_digit * a)115700 static int sp_384_num_bits_12(sp_digit* a)
115701 {
115702     static const byte sp_num_bits_table[256] = {
115703         0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
115704         5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
115705         6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
115706         6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
115707         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
115708         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
115709         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
115710         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
115711         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
115712         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
115713         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
115714         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
115715         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
115716         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
115717         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
115718         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
115719     };
115720     const byte* table = sp_num_bits_table;
115721     __asm__ __volatile__ (
115722         "movs	r6, #0xff\n\t"
115723         "ldr	r3, [%[a], #44]\n\t"
115724         "cmp	r3, #0\n\t"
115725         "beq	L_sp_384_num_bits_12_11_%=\n\t"
115726 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115727         "lsrs	r5, r3, #24\n\t"
115728 #else
115729         "lsr	r5, r3, #24\n\t"
115730 #endif
115731         "cmp	r5, #0\n\t"
115732         "beq	L_sp_384_num_bits_12_133_%=\n\t"
115733         "movs	r2, #0xff\n\t"
115734 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115735         "adds	r2, r2, #0x79\n\t"
115736 #else
115737         "add	r2, r2, #0x79\n\t"
115738 #endif
115739         "ldrb	r4, [%[table], r5]\n\t"
115740 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115741         "adds	r2, r2, r4\n\t"
115742 #else
115743         "add	r2, r2, r4\n\t"
115744 #endif
115745         "b	L_sp_384_num_bits_12_13_%=\n\t"
115746         "\n"
115747     "L_sp_384_num_bits_12_133_%=:\n\t"
115748 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115749         "lsrs	r5, r3, #16\n\t"
115750 #else
115751         "lsr	r5, r3, #16\n\t"
115752 #endif
115753 #ifdef WOLFSSL_KEIL
115754         "ands	r5, r5, r6\n\t"
115755 #elif defined(__clang__)
115756         "ands	r5, r6\n\t"
115757 #else
115758         "and	r5, r6\n\t"
115759 #endif
115760         "cmp	r5, #0\n\t"
115761         "beq	L_sp_384_num_bits_12_132_%=\n\t"
115762         "movs	r2, #0xff\n\t"
115763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115764         "adds	r2, r2, #0x71\n\t"
115765 #else
115766         "add	r2, r2, #0x71\n\t"
115767 #endif
115768         "ldrb	r4, [%[table], r5]\n\t"
115769 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115770         "adds	r2, r2, r4\n\t"
115771 #else
115772         "add	r2, r2, r4\n\t"
115773 #endif
115774         "b	L_sp_384_num_bits_12_13_%=\n\t"
115775         "\n"
115776     "L_sp_384_num_bits_12_132_%=:\n\t"
115777 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115778         "lsrs	r5, r3, #8\n\t"
115779 #else
115780         "lsr	r5, r3, #8\n\t"
115781 #endif
115782 #ifdef WOLFSSL_KEIL
115783         "ands	r5, r5, r6\n\t"
115784 #elif defined(__clang__)
115785         "ands	r5, r6\n\t"
115786 #else
115787         "and	r5, r6\n\t"
115788 #endif
115789         "cmp	r5, #0\n\t"
115790         "beq	L_sp_384_num_bits_12_131_%=\n\t"
115791         "movs	r2, #0xff\n\t"
115792 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115793         "adds	r2, r2, #0x69\n\t"
115794 #else
115795         "add	r2, r2, #0x69\n\t"
115796 #endif
115797         "ldrb	r4, [%[table], r5]\n\t"
115798 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115799         "adds	r2, r2, r4\n\t"
115800 #else
115801         "add	r2, r2, r4\n\t"
115802 #endif
115803         "b	L_sp_384_num_bits_12_13_%=\n\t"
115804         "\n"
115805     "L_sp_384_num_bits_12_131_%=:\n\t"
115806         "movs	r5, r3\n\t"
115807 #ifdef WOLFSSL_KEIL
115808         "ands	r5, r5, r6\n\t"
115809 #elif defined(__clang__)
115810         "ands	r5, r6\n\t"
115811 #else
115812         "and	r5, r6\n\t"
115813 #endif
115814         "cmp	r5, #0\n\t"
115815         "beq	L_sp_384_num_bits_12_130_%=\n\t"
115816         "movs	r2, #0xff\n\t"
115817 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115818         "adds	r2, r2, #0x61\n\t"
115819 #else
115820         "add	r2, r2, #0x61\n\t"
115821 #endif
115822         "ldrb	r4, [%[table], r5]\n\t"
115823 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115824         "adds	r2, r2, r4\n\t"
115825 #else
115826         "add	r2, r2, r4\n\t"
115827 #endif
115828         "b	L_sp_384_num_bits_12_13_%=\n\t"
115829         "\n"
115830     "L_sp_384_num_bits_12_130_%=:\n\t"
115831         "b	L_sp_384_num_bits_12_13_%=\n\t"
115832         "\n"
115833     "L_sp_384_num_bits_12_11_%=:\n\t"
115834         "ldr	r3, [%[a], #40]\n\t"
115835         "cmp	r3, #0\n\t"
115836         "beq	L_sp_384_num_bits_12_10_%=\n\t"
115837 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115838         "lsrs	r5, r3, #24\n\t"
115839 #else
115840         "lsr	r5, r3, #24\n\t"
115841 #endif
115842         "cmp	r5, #0\n\t"
115843         "beq	L_sp_384_num_bits_12_123_%=\n\t"
115844         "movs	r2, #0xff\n\t"
115845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115846         "adds	r2, r2, #0x59\n\t"
115847 #else
115848         "add	r2, r2, #0x59\n\t"
115849 #endif
115850         "ldrb	r4, [%[table], r5]\n\t"
115851 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115852         "adds	r2, r2, r4\n\t"
115853 #else
115854         "add	r2, r2, r4\n\t"
115855 #endif
115856         "b	L_sp_384_num_bits_12_13_%=\n\t"
115857         "\n"
115858     "L_sp_384_num_bits_12_123_%=:\n\t"
115859 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115860         "lsrs	r5, r3, #16\n\t"
115861 #else
115862         "lsr	r5, r3, #16\n\t"
115863 #endif
115864 #ifdef WOLFSSL_KEIL
115865         "ands	r5, r5, r6\n\t"
115866 #elif defined(__clang__)
115867         "ands	r5, r6\n\t"
115868 #else
115869         "and	r5, r6\n\t"
115870 #endif
115871         "cmp	r5, #0\n\t"
115872         "beq	L_sp_384_num_bits_12_122_%=\n\t"
115873         "movs	r2, #0xff\n\t"
115874 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115875         "adds	r2, r2, #0x51\n\t"
115876 #else
115877         "add	r2, r2, #0x51\n\t"
115878 #endif
115879         "ldrb	r4, [%[table], r5]\n\t"
115880 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115881         "adds	r2, r2, r4\n\t"
115882 #else
115883         "add	r2, r2, r4\n\t"
115884 #endif
115885         "b	L_sp_384_num_bits_12_13_%=\n\t"
115886         "\n"
115887     "L_sp_384_num_bits_12_122_%=:\n\t"
115888 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115889         "lsrs	r5, r3, #8\n\t"
115890 #else
115891         "lsr	r5, r3, #8\n\t"
115892 #endif
115893 #ifdef WOLFSSL_KEIL
115894         "ands	r5, r5, r6\n\t"
115895 #elif defined(__clang__)
115896         "ands	r5, r6\n\t"
115897 #else
115898         "and	r5, r6\n\t"
115899 #endif
115900         "cmp	r5, #0\n\t"
115901         "beq	L_sp_384_num_bits_12_121_%=\n\t"
115902         "movs	r2, #0xff\n\t"
115903 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115904         "adds	r2, r2, #0x49\n\t"
115905 #else
115906         "add	r2, r2, #0x49\n\t"
115907 #endif
115908         "ldrb	r4, [%[table], r5]\n\t"
115909 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115910         "adds	r2, r2, r4\n\t"
115911 #else
115912         "add	r2, r2, r4\n\t"
115913 #endif
115914         "b	L_sp_384_num_bits_12_13_%=\n\t"
115915         "\n"
115916     "L_sp_384_num_bits_12_121_%=:\n\t"
115917         "movs	r5, r3\n\t"
115918 #ifdef WOLFSSL_KEIL
115919         "ands	r5, r5, r6\n\t"
115920 #elif defined(__clang__)
115921         "ands	r5, r6\n\t"
115922 #else
115923         "and	r5, r6\n\t"
115924 #endif
115925         "cmp	r5, #0\n\t"
115926         "beq	L_sp_384_num_bits_12_120_%=\n\t"
115927         "movs	r2, #0xff\n\t"
115928 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115929         "adds	r2, r2, #0x41\n\t"
115930 #else
115931         "add	r2, r2, #0x41\n\t"
115932 #endif
115933         "ldrb	r4, [%[table], r5]\n\t"
115934 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115935         "adds	r2, r2, r4\n\t"
115936 #else
115937         "add	r2, r2, r4\n\t"
115938 #endif
115939         "b	L_sp_384_num_bits_12_13_%=\n\t"
115940         "\n"
115941     "L_sp_384_num_bits_12_120_%=:\n\t"
115942         "b	L_sp_384_num_bits_12_13_%=\n\t"
115943         "\n"
115944     "L_sp_384_num_bits_12_10_%=:\n\t"
115945         "ldr	r3, [%[a], #36]\n\t"
115946         "cmp	r3, #0\n\t"
115947         "beq	L_sp_384_num_bits_12_9_%=\n\t"
115948 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115949         "lsrs	r5, r3, #24\n\t"
115950 #else
115951         "lsr	r5, r3, #24\n\t"
115952 #endif
115953         "cmp	r5, #0\n\t"
115954         "beq	L_sp_384_num_bits_12_113_%=\n\t"
115955         "movs	r2, #0xff\n\t"
115956 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115957         "adds	r2, r2, #57\n\t"
115958 #else
115959         "add	r2, r2, #57\n\t"
115960 #endif
115961         "ldrb	r4, [%[table], r5]\n\t"
115962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115963         "adds	r2, r2, r4\n\t"
115964 #else
115965         "add	r2, r2, r4\n\t"
115966 #endif
115967         "b	L_sp_384_num_bits_12_13_%=\n\t"
115968         "\n"
115969     "L_sp_384_num_bits_12_113_%=:\n\t"
115970 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115971         "lsrs	r5, r3, #16\n\t"
115972 #else
115973         "lsr	r5, r3, #16\n\t"
115974 #endif
115975 #ifdef WOLFSSL_KEIL
115976         "ands	r5, r5, r6\n\t"
115977 #elif defined(__clang__)
115978         "ands	r5, r6\n\t"
115979 #else
115980         "and	r5, r6\n\t"
115981 #endif
115982         "cmp	r5, #0\n\t"
115983         "beq	L_sp_384_num_bits_12_112_%=\n\t"
115984         "movs	r2, #0xff\n\t"
115985 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115986         "adds	r2, r2, #49\n\t"
115987 #else
115988         "add	r2, r2, #49\n\t"
115989 #endif
115990         "ldrb	r4, [%[table], r5]\n\t"
115991 #if defined(__clang__) || defined(WOLFSSL_KEIL)
115992         "adds	r2, r2, r4\n\t"
115993 #else
115994         "add	r2, r2, r4\n\t"
115995 #endif
115996         "b	L_sp_384_num_bits_12_13_%=\n\t"
115997         "\n"
115998     "L_sp_384_num_bits_12_112_%=:\n\t"
115999 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116000         "lsrs	r5, r3, #8\n\t"
116001 #else
116002         "lsr	r5, r3, #8\n\t"
116003 #endif
116004 #ifdef WOLFSSL_KEIL
116005         "ands	r5, r5, r6\n\t"
116006 #elif defined(__clang__)
116007         "ands	r5, r6\n\t"
116008 #else
116009         "and	r5, r6\n\t"
116010 #endif
116011         "cmp	r5, #0\n\t"
116012         "beq	L_sp_384_num_bits_12_111_%=\n\t"
116013         "movs	r2, #0xff\n\t"
116014 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116015         "adds	r2, r2, #41\n\t"
116016 #else
116017         "add	r2, r2, #41\n\t"
116018 #endif
116019         "ldrb	r4, [%[table], r5]\n\t"
116020 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116021         "adds	r2, r2, r4\n\t"
116022 #else
116023         "add	r2, r2, r4\n\t"
116024 #endif
116025         "b	L_sp_384_num_bits_12_13_%=\n\t"
116026         "\n"
116027     "L_sp_384_num_bits_12_111_%=:\n\t"
116028         "movs	r5, r3\n\t"
116029 #ifdef WOLFSSL_KEIL
116030         "ands	r5, r5, r6\n\t"
116031 #elif defined(__clang__)
116032         "ands	r5, r6\n\t"
116033 #else
116034         "and	r5, r6\n\t"
116035 #endif
116036         "cmp	r5, #0\n\t"
116037         "beq	L_sp_384_num_bits_12_110_%=\n\t"
116038         "movs	r2, #0xff\n\t"
116039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116040         "adds	r2, r2, #33\n\t"
116041 #else
116042         "add	r2, r2, #33\n\t"
116043 #endif
116044         "ldrb	r4, [%[table], r5]\n\t"
116045 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116046         "adds	r2, r2, r4\n\t"
116047 #else
116048         "add	r2, r2, r4\n\t"
116049 #endif
116050         "b	L_sp_384_num_bits_12_13_%=\n\t"
116051         "\n"
116052     "L_sp_384_num_bits_12_110_%=:\n\t"
116053         "b	L_sp_384_num_bits_12_13_%=\n\t"
116054         "\n"
116055     "L_sp_384_num_bits_12_9_%=:\n\t"
116056         "ldr	r3, [%[a], #32]\n\t"
116057         "cmp	r3, #0\n\t"
116058         "beq	L_sp_384_num_bits_12_8_%=\n\t"
116059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116060         "lsrs	r5, r3, #24\n\t"
116061 #else
116062         "lsr	r5, r3, #24\n\t"
116063 #endif
116064         "cmp	r5, #0\n\t"
116065         "beq	L_sp_384_num_bits_12_103_%=\n\t"
116066         "movs	r2, #0xff\n\t"
116067 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116068         "adds	r2, r2, #25\n\t"
116069 #else
116070         "add	r2, r2, #25\n\t"
116071 #endif
116072         "ldrb	r4, [%[table], r5]\n\t"
116073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116074         "adds	r2, r2, r4\n\t"
116075 #else
116076         "add	r2, r2, r4\n\t"
116077 #endif
116078         "b	L_sp_384_num_bits_12_13_%=\n\t"
116079         "\n"
116080     "L_sp_384_num_bits_12_103_%=:\n\t"
116081 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116082         "lsrs	r5, r3, #16\n\t"
116083 #else
116084         "lsr	r5, r3, #16\n\t"
116085 #endif
116086 #ifdef WOLFSSL_KEIL
116087         "ands	r5, r5, r6\n\t"
116088 #elif defined(__clang__)
116089         "ands	r5, r6\n\t"
116090 #else
116091         "and	r5, r6\n\t"
116092 #endif
116093         "cmp	r5, #0\n\t"
116094         "beq	L_sp_384_num_bits_12_102_%=\n\t"
116095         "movs	r2, #0xff\n\t"
116096 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116097         "adds	r2, r2, #17\n\t"
116098 #else
116099         "add	r2, r2, #17\n\t"
116100 #endif
116101         "ldrb	r4, [%[table], r5]\n\t"
116102 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116103         "adds	r2, r2, r4\n\t"
116104 #else
116105         "add	r2, r2, r4\n\t"
116106 #endif
116107         "b	L_sp_384_num_bits_12_13_%=\n\t"
116108         "\n"
116109     "L_sp_384_num_bits_12_102_%=:\n\t"
116110 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116111         "lsrs	r5, r3, #8\n\t"
116112 #else
116113         "lsr	r5, r3, #8\n\t"
116114 #endif
116115 #ifdef WOLFSSL_KEIL
116116         "ands	r5, r5, r6\n\t"
116117 #elif defined(__clang__)
116118         "ands	r5, r6\n\t"
116119 #else
116120         "and	r5, r6\n\t"
116121 #endif
116122         "cmp	r5, #0\n\t"
116123         "beq	L_sp_384_num_bits_12_101_%=\n\t"
116124         "movs	r2, #0xff\n\t"
116125 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116126         "adds	r2, r2, #9\n\t"
116127 #else
116128         "add	r2, r2, #9\n\t"
116129 #endif
116130         "ldrb	r4, [%[table], r5]\n\t"
116131 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116132         "adds	r2, r2, r4\n\t"
116133 #else
116134         "add	r2, r2, r4\n\t"
116135 #endif
116136         "b	L_sp_384_num_bits_12_13_%=\n\t"
116137         "\n"
116138     "L_sp_384_num_bits_12_101_%=:\n\t"
116139         "movs	r5, r3\n\t"
116140 #ifdef WOLFSSL_KEIL
116141         "ands	r5, r5, r6\n\t"
116142 #elif defined(__clang__)
116143         "ands	r5, r6\n\t"
116144 #else
116145         "and	r5, r6\n\t"
116146 #endif
116147         "cmp	r5, #0\n\t"
116148         "beq	L_sp_384_num_bits_12_100_%=\n\t"
116149         "movs	r2, #0xff\n\t"
116150 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116151         "adds	r2, r2, #1\n\t"
116152 #else
116153         "add	r2, r2, #1\n\t"
116154 #endif
116155         "ldrb	r4, [%[table], r5]\n\t"
116156 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116157         "adds	r2, r2, r4\n\t"
116158 #else
116159         "add	r2, r2, r4\n\t"
116160 #endif
116161         "b	L_sp_384_num_bits_12_13_%=\n\t"
116162         "\n"
116163     "L_sp_384_num_bits_12_100_%=:\n\t"
116164         "b	L_sp_384_num_bits_12_13_%=\n\t"
116165         "\n"
116166     "L_sp_384_num_bits_12_8_%=:\n\t"
116167         "ldr	r3, [%[a], #28]\n\t"
116168         "cmp	r3, #0\n\t"
116169         "beq	L_sp_384_num_bits_12_7_%=\n\t"
116170 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116171         "lsrs	r5, r3, #24\n\t"
116172 #else
116173         "lsr	r5, r3, #24\n\t"
116174 #endif
116175         "cmp	r5, #0\n\t"
116176         "beq	L_sp_384_num_bits_12_93_%=\n\t"
116177         "movs	r2, #0xf8\n\t"
116178         "ldrb	r4, [%[table], r5]\n\t"
116179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116180         "adds	r2, r2, r4\n\t"
116181 #else
116182         "add	r2, r2, r4\n\t"
116183 #endif
116184         "b	L_sp_384_num_bits_12_13_%=\n\t"
116185         "\n"
116186     "L_sp_384_num_bits_12_93_%=:\n\t"
116187 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116188         "lsrs	r5, r3, #16\n\t"
116189 #else
116190         "lsr	r5, r3, #16\n\t"
116191 #endif
116192 #ifdef WOLFSSL_KEIL
116193         "ands	r5, r5, r6\n\t"
116194 #elif defined(__clang__)
116195         "ands	r5, r6\n\t"
116196 #else
116197         "and	r5, r6\n\t"
116198 #endif
116199         "cmp	r5, #0\n\t"
116200         "beq	L_sp_384_num_bits_12_92_%=\n\t"
116201         "movs	r2, #0xf0\n\t"
116202         "ldrb	r4, [%[table], r5]\n\t"
116203 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116204         "adds	r2, r2, r4\n\t"
116205 #else
116206         "add	r2, r2, r4\n\t"
116207 #endif
116208         "b	L_sp_384_num_bits_12_13_%=\n\t"
116209         "\n"
116210     "L_sp_384_num_bits_12_92_%=:\n\t"
116211 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116212         "lsrs	r5, r3, #8\n\t"
116213 #else
116214         "lsr	r5, r3, #8\n\t"
116215 #endif
116216 #ifdef WOLFSSL_KEIL
116217         "ands	r5, r5, r6\n\t"
116218 #elif defined(__clang__)
116219         "ands	r5, r6\n\t"
116220 #else
116221         "and	r5, r6\n\t"
116222 #endif
116223         "cmp	r5, #0\n\t"
116224         "beq	L_sp_384_num_bits_12_91_%=\n\t"
116225         "movs	r2, #0xe8\n\t"
116226         "ldrb	r4, [%[table], r5]\n\t"
116227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116228         "adds	r2, r2, r4\n\t"
116229 #else
116230         "add	r2, r2, r4\n\t"
116231 #endif
116232         "b	L_sp_384_num_bits_12_13_%=\n\t"
116233         "\n"
116234     "L_sp_384_num_bits_12_91_%=:\n\t"
116235         "movs	r5, r3\n\t"
116236 #ifdef WOLFSSL_KEIL
116237         "ands	r5, r5, r6\n\t"
116238 #elif defined(__clang__)
116239         "ands	r5, r6\n\t"
116240 #else
116241         "and	r5, r6\n\t"
116242 #endif
116243         "cmp	r5, #0\n\t"
116244         "beq	L_sp_384_num_bits_12_90_%=\n\t"
116245         "movs	r2, #0xe0\n\t"
116246         "ldrb	r4, [%[table], r5]\n\t"
116247 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116248         "adds	r2, r2, r4\n\t"
116249 #else
116250         "add	r2, r2, r4\n\t"
116251 #endif
116252         "b	L_sp_384_num_bits_12_13_%=\n\t"
116253         "\n"
116254     "L_sp_384_num_bits_12_90_%=:\n\t"
116255         "b	L_sp_384_num_bits_12_13_%=\n\t"
116256         "\n"
116257     "L_sp_384_num_bits_12_7_%=:\n\t"
116258         "ldr	r3, [%[a], #24]\n\t"
116259         "cmp	r3, #0\n\t"
116260         "beq	L_sp_384_num_bits_12_6_%=\n\t"
116261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116262         "lsrs	r5, r3, #24\n\t"
116263 #else
116264         "lsr	r5, r3, #24\n\t"
116265 #endif
116266         "cmp	r5, #0\n\t"
116267         "beq	L_sp_384_num_bits_12_83_%=\n\t"
116268         "movs	r2, #0xd8\n\t"
116269         "ldrb	r4, [%[table], r5]\n\t"
116270 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116271         "adds	r2, r2, r4\n\t"
116272 #else
116273         "add	r2, r2, r4\n\t"
116274 #endif
116275         "b	L_sp_384_num_bits_12_13_%=\n\t"
116276         "\n"
116277     "L_sp_384_num_bits_12_83_%=:\n\t"
116278 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116279         "lsrs	r5, r3, #16\n\t"
116280 #else
116281         "lsr	r5, r3, #16\n\t"
116282 #endif
116283 #ifdef WOLFSSL_KEIL
116284         "ands	r5, r5, r6\n\t"
116285 #elif defined(__clang__)
116286         "ands	r5, r6\n\t"
116287 #else
116288         "and	r5, r6\n\t"
116289 #endif
116290         "cmp	r5, #0\n\t"
116291         "beq	L_sp_384_num_bits_12_82_%=\n\t"
116292         "movs	r2, #0xd0\n\t"
116293         "ldrb	r4, [%[table], r5]\n\t"
116294 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116295         "adds	r2, r2, r4\n\t"
116296 #else
116297         "add	r2, r2, r4\n\t"
116298 #endif
116299         "b	L_sp_384_num_bits_12_13_%=\n\t"
116300         "\n"
116301     "L_sp_384_num_bits_12_82_%=:\n\t"
116302 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116303         "lsrs	r5, r3, #8\n\t"
116304 #else
116305         "lsr	r5, r3, #8\n\t"
116306 #endif
116307 #ifdef WOLFSSL_KEIL
116308         "ands	r5, r5, r6\n\t"
116309 #elif defined(__clang__)
116310         "ands	r5, r6\n\t"
116311 #else
116312         "and	r5, r6\n\t"
116313 #endif
116314         "cmp	r5, #0\n\t"
116315         "beq	L_sp_384_num_bits_12_81_%=\n\t"
116316         "movs	r2, #0xc8\n\t"
116317         "ldrb	r4, [%[table], r5]\n\t"
116318 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116319         "adds	r2, r2, r4\n\t"
116320 #else
116321         "add	r2, r2, r4\n\t"
116322 #endif
116323         "b	L_sp_384_num_bits_12_13_%=\n\t"
116324         "\n"
116325     "L_sp_384_num_bits_12_81_%=:\n\t"
116326         "movs	r5, r3\n\t"
116327 #ifdef WOLFSSL_KEIL
116328         "ands	r5, r5, r6\n\t"
116329 #elif defined(__clang__)
116330         "ands	r5, r6\n\t"
116331 #else
116332         "and	r5, r6\n\t"
116333 #endif
116334         "cmp	r5, #0\n\t"
116335         "beq	L_sp_384_num_bits_12_80_%=\n\t"
116336         "movs	r2, #0xc0\n\t"
116337         "ldrb	r4, [%[table], r5]\n\t"
116338 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116339         "adds	r2, r2, r4\n\t"
116340 #else
116341         "add	r2, r2, r4\n\t"
116342 #endif
116343         "b	L_sp_384_num_bits_12_13_%=\n\t"
116344         "\n"
116345     "L_sp_384_num_bits_12_80_%=:\n\t"
116346         "b	L_sp_384_num_bits_12_13_%=\n\t"
116347         "\n"
116348     "L_sp_384_num_bits_12_6_%=:\n\t"
116349         "ldr	r3, [%[a], #20]\n\t"
116350         "cmp	r3, #0\n\t"
116351         "beq	L_sp_384_num_bits_12_5_%=\n\t"
116352 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116353         "lsrs	r5, r3, #24\n\t"
116354 #else
116355         "lsr	r5, r3, #24\n\t"
116356 #endif
116357         "cmp	r5, #0\n\t"
116358         "beq	L_sp_384_num_bits_12_73_%=\n\t"
116359         "movs	r2, #0xb8\n\t"
116360         "ldrb	r4, [%[table], r5]\n\t"
116361 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116362         "adds	r2, r2, r4\n\t"
116363 #else
116364         "add	r2, r2, r4\n\t"
116365 #endif
116366         "b	L_sp_384_num_bits_12_13_%=\n\t"
116367         "\n"
116368     "L_sp_384_num_bits_12_73_%=:\n\t"
116369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116370         "lsrs	r5, r3, #16\n\t"
116371 #else
116372         "lsr	r5, r3, #16\n\t"
116373 #endif
116374 #ifdef WOLFSSL_KEIL
116375         "ands	r5, r5, r6\n\t"
116376 #elif defined(__clang__)
116377         "ands	r5, r6\n\t"
116378 #else
116379         "and	r5, r6\n\t"
116380 #endif
116381         "cmp	r5, #0\n\t"
116382         "beq	L_sp_384_num_bits_12_72_%=\n\t"
116383         "movs	r2, #0xb0\n\t"
116384         "ldrb	r4, [%[table], r5]\n\t"
116385 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116386         "adds	r2, r2, r4\n\t"
116387 #else
116388         "add	r2, r2, r4\n\t"
116389 #endif
116390         "b	L_sp_384_num_bits_12_13_%=\n\t"
116391         "\n"
116392     "L_sp_384_num_bits_12_72_%=:\n\t"
116393 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116394         "lsrs	r5, r3, #8\n\t"
116395 #else
116396         "lsr	r5, r3, #8\n\t"
116397 #endif
116398 #ifdef WOLFSSL_KEIL
116399         "ands	r5, r5, r6\n\t"
116400 #elif defined(__clang__)
116401         "ands	r5, r6\n\t"
116402 #else
116403         "and	r5, r6\n\t"
116404 #endif
116405         "cmp	r5, #0\n\t"
116406         "beq	L_sp_384_num_bits_12_71_%=\n\t"
116407         "movs	r2, #0xa8\n\t"
116408         "ldrb	r4, [%[table], r5]\n\t"
116409 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116410         "adds	r2, r2, r4\n\t"
116411 #else
116412         "add	r2, r2, r4\n\t"
116413 #endif
116414         "b	L_sp_384_num_bits_12_13_%=\n\t"
116415         "\n"
116416     "L_sp_384_num_bits_12_71_%=:\n\t"
116417         "movs	r5, r3\n\t"
116418 #ifdef WOLFSSL_KEIL
116419         "ands	r5, r5, r6\n\t"
116420 #elif defined(__clang__)
116421         "ands	r5, r6\n\t"
116422 #else
116423         "and	r5, r6\n\t"
116424 #endif
116425         "cmp	r5, #0\n\t"
116426         "beq	L_sp_384_num_bits_12_70_%=\n\t"
116427         "movs	r2, #0xa0\n\t"
116428         "ldrb	r4, [%[table], r5]\n\t"
116429 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116430         "adds	r2, r2, r4\n\t"
116431 #else
116432         "add	r2, r2, r4\n\t"
116433 #endif
116434         "b	L_sp_384_num_bits_12_13_%=\n\t"
116435         "\n"
116436     "L_sp_384_num_bits_12_70_%=:\n\t"
116437         "b	L_sp_384_num_bits_12_13_%=\n\t"
116438         "\n"
116439     "L_sp_384_num_bits_12_5_%=:\n\t"
116440         "ldr	r3, [%[a], #16]\n\t"
116441         "cmp	r3, #0\n\t"
116442         "beq	L_sp_384_num_bits_12_4_%=\n\t"
116443 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116444         "lsrs	r5, r3, #24\n\t"
116445 #else
116446         "lsr	r5, r3, #24\n\t"
116447 #endif
116448         "cmp	r5, #0\n\t"
116449         "beq	L_sp_384_num_bits_12_63_%=\n\t"
116450         "movs	r2, #0x98\n\t"
116451         "ldrb	r4, [%[table], r5]\n\t"
116452 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116453         "adds	r2, r2, r4\n\t"
116454 #else
116455         "add	r2, r2, r4\n\t"
116456 #endif
116457         "b	L_sp_384_num_bits_12_13_%=\n\t"
116458         "\n"
116459     "L_sp_384_num_bits_12_63_%=:\n\t"
116460 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116461         "lsrs	r5, r3, #16\n\t"
116462 #else
116463         "lsr	r5, r3, #16\n\t"
116464 #endif
116465 #ifdef WOLFSSL_KEIL
116466         "ands	r5, r5, r6\n\t"
116467 #elif defined(__clang__)
116468         "ands	r5, r6\n\t"
116469 #else
116470         "and	r5, r6\n\t"
116471 #endif
116472         "cmp	r5, #0\n\t"
116473         "beq	L_sp_384_num_bits_12_62_%=\n\t"
116474         "movs	r2, #0x90\n\t"
116475         "ldrb	r4, [%[table], r5]\n\t"
116476 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116477         "adds	r2, r2, r4\n\t"
116478 #else
116479         "add	r2, r2, r4\n\t"
116480 #endif
116481         "b	L_sp_384_num_bits_12_13_%=\n\t"
116482         "\n"
116483     "L_sp_384_num_bits_12_62_%=:\n\t"
116484 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116485         "lsrs	r5, r3, #8\n\t"
116486 #else
116487         "lsr	r5, r3, #8\n\t"
116488 #endif
116489 #ifdef WOLFSSL_KEIL
116490         "ands	r5, r5, r6\n\t"
116491 #elif defined(__clang__)
116492         "ands	r5, r6\n\t"
116493 #else
116494         "and	r5, r6\n\t"
116495 #endif
116496         "cmp	r5, #0\n\t"
116497         "beq	L_sp_384_num_bits_12_61_%=\n\t"
116498         "movs	r2, #0x88\n\t"
116499         "ldrb	r4, [%[table], r5]\n\t"
116500 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116501         "adds	r2, r2, r4\n\t"
116502 #else
116503         "add	r2, r2, r4\n\t"
116504 #endif
116505         "b	L_sp_384_num_bits_12_13_%=\n\t"
116506         "\n"
116507     "L_sp_384_num_bits_12_61_%=:\n\t"
116508         "movs	r5, r3\n\t"
116509 #ifdef WOLFSSL_KEIL
116510         "ands	r5, r5, r6\n\t"
116511 #elif defined(__clang__)
116512         "ands	r5, r6\n\t"
116513 #else
116514         "and	r5, r6\n\t"
116515 #endif
116516         "cmp	r5, #0\n\t"
116517         "beq	L_sp_384_num_bits_12_60_%=\n\t"
116518         "movs	r2, #0x80\n\t"
116519         "ldrb	r4, [%[table], r5]\n\t"
116520 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116521         "adds	r2, r2, r4\n\t"
116522 #else
116523         "add	r2, r2, r4\n\t"
116524 #endif
116525         "b	L_sp_384_num_bits_12_13_%=\n\t"
116526         "\n"
116527     "L_sp_384_num_bits_12_60_%=:\n\t"
116528         "b	L_sp_384_num_bits_12_13_%=\n\t"
116529         "\n"
116530     "L_sp_384_num_bits_12_4_%=:\n\t"
116531         "ldr	r3, [%[a], #12]\n\t"
116532         "cmp	r3, #0\n\t"
116533         "beq	L_sp_384_num_bits_12_3_%=\n\t"
116534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116535         "lsrs	r5, r3, #24\n\t"
116536 #else
116537         "lsr	r5, r3, #24\n\t"
116538 #endif
116539         "cmp	r5, #0\n\t"
116540         "beq	L_sp_384_num_bits_12_53_%=\n\t"
116541         "movs	r2, #0x78\n\t"
116542         "ldrb	r4, [%[table], r5]\n\t"
116543 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116544         "adds	r2, r2, r4\n\t"
116545 #else
116546         "add	r2, r2, r4\n\t"
116547 #endif
116548         "b	L_sp_384_num_bits_12_13_%=\n\t"
116549         "\n"
116550     "L_sp_384_num_bits_12_53_%=:\n\t"
116551 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116552         "lsrs	r5, r3, #16\n\t"
116553 #else
116554         "lsr	r5, r3, #16\n\t"
116555 #endif
116556 #ifdef WOLFSSL_KEIL
116557         "ands	r5, r5, r6\n\t"
116558 #elif defined(__clang__)
116559         "ands	r5, r6\n\t"
116560 #else
116561         "and	r5, r6\n\t"
116562 #endif
116563         "cmp	r5, #0\n\t"
116564         "beq	L_sp_384_num_bits_12_52_%=\n\t"
116565         "movs	r2, #0x70\n\t"
116566         "ldrb	r4, [%[table], r5]\n\t"
116567 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116568         "adds	r2, r2, r4\n\t"
116569 #else
116570         "add	r2, r2, r4\n\t"
116571 #endif
116572         "b	L_sp_384_num_bits_12_13_%=\n\t"
116573         "\n"
116574     "L_sp_384_num_bits_12_52_%=:\n\t"
116575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116576         "lsrs	r5, r3, #8\n\t"
116577 #else
116578         "lsr	r5, r3, #8\n\t"
116579 #endif
116580 #ifdef WOLFSSL_KEIL
116581         "ands	r5, r5, r6\n\t"
116582 #elif defined(__clang__)
116583         "ands	r5, r6\n\t"
116584 #else
116585         "and	r5, r6\n\t"
116586 #endif
116587         "cmp	r5, #0\n\t"
116588         "beq	L_sp_384_num_bits_12_51_%=\n\t"
116589         "movs	r2, #0x68\n\t"
116590         "ldrb	r4, [%[table], r5]\n\t"
116591 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116592         "adds	r2, r2, r4\n\t"
116593 #else
116594         "add	r2, r2, r4\n\t"
116595 #endif
116596         "b	L_sp_384_num_bits_12_13_%=\n\t"
116597         "\n"
116598     "L_sp_384_num_bits_12_51_%=:\n\t"
116599         "movs	r5, r3\n\t"
116600 #ifdef WOLFSSL_KEIL
116601         "ands	r5, r5, r6\n\t"
116602 #elif defined(__clang__)
116603         "ands	r5, r6\n\t"
116604 #else
116605         "and	r5, r6\n\t"
116606 #endif
116607         "cmp	r5, #0\n\t"
116608         "beq	L_sp_384_num_bits_12_50_%=\n\t"
116609         "movs	r2, #0x60\n\t"
116610         "ldrb	r4, [%[table], r5]\n\t"
116611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116612         "adds	r2, r2, r4\n\t"
116613 #else
116614         "add	r2, r2, r4\n\t"
116615 #endif
116616         "b	L_sp_384_num_bits_12_13_%=\n\t"
116617         "\n"
116618     "L_sp_384_num_bits_12_50_%=:\n\t"
116619         "b	L_sp_384_num_bits_12_13_%=\n\t"
116620         "\n"
116621     "L_sp_384_num_bits_12_3_%=:\n\t"
116622         "ldr	r3, [%[a], #8]\n\t"
116623         "cmp	r3, #0\n\t"
116624         "beq	L_sp_384_num_bits_12_2_%=\n\t"
116625 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116626         "lsrs	r5, r3, #24\n\t"
116627 #else
116628         "lsr	r5, r3, #24\n\t"
116629 #endif
116630         "cmp	r5, #0\n\t"
116631         "beq	L_sp_384_num_bits_12_43_%=\n\t"
116632         "movs	r2, #0x58\n\t"
116633         "ldrb	r4, [%[table], r5]\n\t"
116634 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116635         "adds	r2, r2, r4\n\t"
116636 #else
116637         "add	r2, r2, r4\n\t"
116638 #endif
116639         "b	L_sp_384_num_bits_12_13_%=\n\t"
116640         "\n"
116641     "L_sp_384_num_bits_12_43_%=:\n\t"
116642 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116643         "lsrs	r5, r3, #16\n\t"
116644 #else
116645         "lsr	r5, r3, #16\n\t"
116646 #endif
116647 #ifdef WOLFSSL_KEIL
116648         "ands	r5, r5, r6\n\t"
116649 #elif defined(__clang__)
116650         "ands	r5, r6\n\t"
116651 #else
116652         "and	r5, r6\n\t"
116653 #endif
116654         "cmp	r5, #0\n\t"
116655         "beq	L_sp_384_num_bits_12_42_%=\n\t"
116656         "movs	r2, #0x50\n\t"
116657         "ldrb	r4, [%[table], r5]\n\t"
116658 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116659         "adds	r2, r2, r4\n\t"
116660 #else
116661         "add	r2, r2, r4\n\t"
116662 #endif
116663         "b	L_sp_384_num_bits_12_13_%=\n\t"
116664         "\n"
116665     "L_sp_384_num_bits_12_42_%=:\n\t"
116666 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116667         "lsrs	r5, r3, #8\n\t"
116668 #else
116669         "lsr	r5, r3, #8\n\t"
116670 #endif
116671 #ifdef WOLFSSL_KEIL
116672         "ands	r5, r5, r6\n\t"
116673 #elif defined(__clang__)
116674         "ands	r5, r6\n\t"
116675 #else
116676         "and	r5, r6\n\t"
116677 #endif
116678         "cmp	r5, #0\n\t"
116679         "beq	L_sp_384_num_bits_12_41_%=\n\t"
116680         "movs	r2, #0x48\n\t"
116681         "ldrb	r4, [%[table], r5]\n\t"
116682 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116683         "adds	r2, r2, r4\n\t"
116684 #else
116685         "add	r2, r2, r4\n\t"
116686 #endif
116687         "b	L_sp_384_num_bits_12_13_%=\n\t"
116688         "\n"
116689     "L_sp_384_num_bits_12_41_%=:\n\t"
116690         "movs	r5, r3\n\t"
116691 #ifdef WOLFSSL_KEIL
116692         "ands	r5, r5, r6\n\t"
116693 #elif defined(__clang__)
116694         "ands	r5, r6\n\t"
116695 #else
116696         "and	r5, r6\n\t"
116697 #endif
116698         "cmp	r5, #0\n\t"
116699         "beq	L_sp_384_num_bits_12_40_%=\n\t"
116700         "movs	r2, #0x40\n\t"
116701         "ldrb	r4, [%[table], r5]\n\t"
116702 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116703         "adds	r2, r2, r4\n\t"
116704 #else
116705         "add	r2, r2, r4\n\t"
116706 #endif
116707         "b	L_sp_384_num_bits_12_13_%=\n\t"
116708         "\n"
116709     "L_sp_384_num_bits_12_40_%=:\n\t"
116710         "b	L_sp_384_num_bits_12_13_%=\n\t"
116711         "\n"
116712     "L_sp_384_num_bits_12_2_%=:\n\t"
116713         "ldr	r3, [%[a], #4]\n\t"
116714         "cmp	r3, #0\n\t"
116715         "beq	L_sp_384_num_bits_12_1_%=\n\t"
116716 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116717         "lsrs	r5, r3, #24\n\t"
116718 #else
116719         "lsr	r5, r3, #24\n\t"
116720 #endif
116721         "cmp	r5, #0\n\t"
116722         "beq	L_sp_384_num_bits_12_33_%=\n\t"
116723         "movs	r2, #56\n\t"
116724         "ldrb	r4, [%[table], r5]\n\t"
116725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116726         "adds	r2, r2, r4\n\t"
116727 #else
116728         "add	r2, r2, r4\n\t"
116729 #endif
116730         "b	L_sp_384_num_bits_12_13_%=\n\t"
116731         "\n"
116732     "L_sp_384_num_bits_12_33_%=:\n\t"
116733 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116734         "lsrs	r5, r3, #16\n\t"
116735 #else
116736         "lsr	r5, r3, #16\n\t"
116737 #endif
116738 #ifdef WOLFSSL_KEIL
116739         "ands	r5, r5, r6\n\t"
116740 #elif defined(__clang__)
116741         "ands	r5, r6\n\t"
116742 #else
116743         "and	r5, r6\n\t"
116744 #endif
116745         "cmp	r5, #0\n\t"
116746         "beq	L_sp_384_num_bits_12_32_%=\n\t"
116747         "movs	r2, #48\n\t"
116748         "ldrb	r4, [%[table], r5]\n\t"
116749 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116750         "adds	r2, r2, r4\n\t"
116751 #else
116752         "add	r2, r2, r4\n\t"
116753 #endif
116754         "b	L_sp_384_num_bits_12_13_%=\n\t"
116755         "\n"
116756     "L_sp_384_num_bits_12_32_%=:\n\t"
116757 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116758         "lsrs	r5, r3, #8\n\t"
116759 #else
116760         "lsr	r5, r3, #8\n\t"
116761 #endif
116762 #ifdef WOLFSSL_KEIL
116763         "ands	r5, r5, r6\n\t"
116764 #elif defined(__clang__)
116765         "ands	r5, r6\n\t"
116766 #else
116767         "and	r5, r6\n\t"
116768 #endif
116769         "cmp	r5, #0\n\t"
116770         "beq	L_sp_384_num_bits_12_31_%=\n\t"
116771         "movs	r2, #40\n\t"
116772         "ldrb	r4, [%[table], r5]\n\t"
116773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116774         "adds	r2, r2, r4\n\t"
116775 #else
116776         "add	r2, r2, r4\n\t"
116777 #endif
116778         "b	L_sp_384_num_bits_12_13_%=\n\t"
116779         "\n"
116780     "L_sp_384_num_bits_12_31_%=:\n\t"
116781         "movs	r5, r3\n\t"
116782 #ifdef WOLFSSL_KEIL
116783         "ands	r5, r5, r6\n\t"
116784 #elif defined(__clang__)
116785         "ands	r5, r6\n\t"
116786 #else
116787         "and	r5, r6\n\t"
116788 #endif
116789         "cmp	r5, #0\n\t"
116790         "beq	L_sp_384_num_bits_12_30_%=\n\t"
116791         "movs	r2, #32\n\t"
116792         "ldrb	r4, [%[table], r5]\n\t"
116793 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116794         "adds	r2, r2, r4\n\t"
116795 #else
116796         "add	r2, r2, r4\n\t"
116797 #endif
116798         "b	L_sp_384_num_bits_12_13_%=\n\t"
116799         "\n"
116800     "L_sp_384_num_bits_12_30_%=:\n\t"
116801         "b	L_sp_384_num_bits_12_13_%=\n\t"
116802         "\n"
116803     "L_sp_384_num_bits_12_1_%=:\n\t"
116804         "ldr	r3, [%[a]]\n\t"
116805 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116806         "lsrs	r5, r3, #24\n\t"
116807 #else
116808         "lsr	r5, r3, #24\n\t"
116809 #endif
116810         "cmp	r5, #0\n\t"
116811         "beq	L_sp_384_num_bits_12_23_%=\n\t"
116812         "movs	r2, #24\n\t"
116813         "ldrb	r4, [%[table], r5]\n\t"
116814 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116815         "adds	r2, r2, r4\n\t"
116816 #else
116817         "add	r2, r2, r4\n\t"
116818 #endif
116819         "b	L_sp_384_num_bits_12_13_%=\n\t"
116820         "\n"
116821     "L_sp_384_num_bits_12_23_%=:\n\t"
116822 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116823         "lsrs	r5, r3, #16\n\t"
116824 #else
116825         "lsr	r5, r3, #16\n\t"
116826 #endif
116827 #ifdef WOLFSSL_KEIL
116828         "ands	r5, r5, r6\n\t"
116829 #elif defined(__clang__)
116830         "ands	r5, r6\n\t"
116831 #else
116832         "and	r5, r6\n\t"
116833 #endif
116834         "cmp	r5, #0\n\t"
116835         "beq	L_sp_384_num_bits_12_22_%=\n\t"
116836         "movs	r2, #16\n\t"
116837         "ldrb	r4, [%[table], r5]\n\t"
116838 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116839         "adds	r2, r2, r4\n\t"
116840 #else
116841         "add	r2, r2, r4\n\t"
116842 #endif
116843         "b	L_sp_384_num_bits_12_13_%=\n\t"
116844         "\n"
116845     "L_sp_384_num_bits_12_22_%=:\n\t"
116846 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116847         "lsrs	r5, r3, #8\n\t"
116848 #else
116849         "lsr	r5, r3, #8\n\t"
116850 #endif
116851 #ifdef WOLFSSL_KEIL
116852         "ands	r5, r5, r6\n\t"
116853 #elif defined(__clang__)
116854         "ands	r5, r6\n\t"
116855 #else
116856         "and	r5, r6\n\t"
116857 #endif
116858         "cmp	r5, #0\n\t"
116859         "beq	L_sp_384_num_bits_12_21_%=\n\t"
116860         "movs	r2, #8\n\t"
116861         "ldrb	r4, [%[table], r5]\n\t"
116862 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116863         "adds	r2, r2, r4\n\t"
116864 #else
116865         "add	r2, r2, r4\n\t"
116866 #endif
116867         "b	L_sp_384_num_bits_12_13_%=\n\t"
116868         "\n"
116869     "L_sp_384_num_bits_12_21_%=:\n\t"
116870         "movs	r5, r3\n\t"
116871 #ifdef WOLFSSL_KEIL
116872         "ands	r5, r5, r6\n\t"
116873 #elif defined(__clang__)
116874         "ands	r5, r6\n\t"
116875 #else
116876         "and	r5, r6\n\t"
116877 #endif
116878         "cmp	r5, #0\n\t"
116879         "beq	L_sp_384_num_bits_12_20_%=\n\t"
116880         "movs	r2, #0\n\t"
116881         "ldrb	r4, [%[table], r5]\n\t"
116882 #if defined(__clang__) || defined(WOLFSSL_KEIL)
116883         "adds	r2, r2, r4\n\t"
116884 #else
116885         "add	r2, r2, r4\n\t"
116886 #endif
116887         "b	L_sp_384_num_bits_12_13_%=\n\t"
116888         "\n"
116889     "L_sp_384_num_bits_12_20_%=:\n\t"
116890         "\n"
116891     "L_sp_384_num_bits_12_13_%=:\n\t"
116892         "movs	%[a], r2\n\t"
116893         : [a] "+r" (a), [table] "+r" (table)
116894         :
116895         : "memory", "r2", "r3", "r4", "r5", "r6"
116896     );
116897     return (uint32_t)(size_t)a;
116898 }
116899 
116900 /* Non-constant time modular inversion.
116901  *
116902  * @param  [out]  r   Resulting number.
116903  * @param  [in]   a   Number to invert.
116904  * @param  [in]   m   Modulus.
116905  * @return  MP_OKAY on success.
116906  */
sp_384_mod_inv_12(sp_digit * r,const sp_digit * a,const sp_digit * m)116907 static int sp_384_mod_inv_12(sp_digit* r, const sp_digit* a, const sp_digit* m)
116908 {
116909     sp_digit u[12];
116910     sp_digit v[12];
116911     sp_digit b[12];
116912     sp_digit d[12];
116913     int ut, vt;
116914     sp_digit o;
116915 
116916     XMEMCPY(u, m, sizeof(u));
116917     XMEMCPY(v, a, sizeof(v));
116918 
116919     ut = sp_384_num_bits_12(u);
116920     vt = sp_384_num_bits_12(v);
116921 
116922     XMEMSET(b, 0, sizeof(b));
116923     if ((v[0] & 1) == 0) {
116924         sp_384_rshift1_12(v, v);
116925         XMEMCPY(d, m, sizeof(u));
116926         d[0] += 1;
116927         sp_384_rshift1_12(d, d);
116928         vt--;
116929 
116930         while ((v[0] & 1) == 0) {
116931             sp_384_rshift1_12(v, v);
116932             sp_384_div2_mod_12(d, d, m);
116933             vt--;
116934         }
116935     }
116936     else {
116937         XMEMSET(d+1, 0, sizeof(d)-sizeof(sp_digit));
116938         d[0] = 1;
116939     }
116940 
116941     while (ut > 1 && vt > 1) {
116942         if (ut > vt || (ut == vt && sp_384_cmp_12(u, v) >= 0)) {
116943             sp_384_sub_12(u, u, v);
116944             o = sp_384_sub_12(b, b, d);
116945             if (o != 0)
116946                 sp_384_add_12(b, b, m);
116947             ut = sp_384_num_bits_12(u);
116948 
116949             do {
116950                 sp_384_rshift1_12(u, u);
116951                 sp_384_div2_mod_12(b, b, m);
116952                 ut--;
116953             }
116954             while (ut > 0 && (u[0] & 1) == 0);
116955         }
116956         else {
116957             sp_384_sub_12(v, v, u);
116958             o = sp_384_sub_12(d, d, b);
116959             if (o != 0)
116960                 sp_384_add_12(d, d, m);
116961             vt = sp_384_num_bits_12(v);
116962 
116963             do {
116964                 sp_384_rshift1_12(v, v);
116965                 sp_384_div2_mod_12(d, d, m);
116966                 vt--;
116967             }
116968             while (vt > 0 && (v[0] & 1) == 0);
116969         }
116970     }
116971 
116972     if (ut == 1)
116973         XMEMCPY(r, b, sizeof(b));
116974     else
116975         XMEMCPY(r, d, sizeof(d));
116976 
116977     return MP_OKAY;
116978 }
116979 
116980 #endif /* WOLFSSL_SP_SMALL */
116981 
116982 /* Add point p1 into point p2. Handles p1 == p2 and result at infinity.
116983  *
116984  * p1   First point to add and holds result.
116985  * p2   Second point to add.
116986  * tmp  Temporary storage for intermediate numbers.
116987  */
sp_384_add_points_12(sp_point_384 * p1,const sp_point_384 * p2,sp_digit * tmp)116988 static void sp_384_add_points_12(sp_point_384* p1, const sp_point_384* p2,
116989     sp_digit* tmp)
116990 {
116991 
116992         sp_384_proj_point_add_12(p1, p1, p2, tmp);
116993     if (sp_384_iszero_12(p1->z)) {
116994         if (sp_384_iszero_12(p1->x) && sp_384_iszero_12(p1->y)) {
116995                 sp_384_proj_point_dbl_12(p1, p2, tmp);
116996         }
116997         else {
116998             /* Y ordinate is not used from here - don't set. */
116999             p1->x[0] = 0;
117000             p1->x[1] = 0;
117001             p1->x[2] = 0;
117002             p1->x[3] = 0;
117003             p1->x[4] = 0;
117004             p1->x[5] = 0;
117005             p1->x[6] = 0;
117006             p1->x[7] = 0;
117007             p1->x[8] = 0;
117008             p1->x[9] = 0;
117009             p1->x[10] = 0;
117010             p1->x[11] = 0;
117011             XMEMCPY(p1->z, p384_norm_mod, sizeof(p384_norm_mod));
117012         }
117013     }
117014 }
117015 
117016 /* Calculate the verification point: [e/s]G + [r/s]Q
117017  *
117018  * p1    Calculated point.
117019  * p2    Public point and temporary.
117020  * s     Second part of signature as a number.
117021  * u1    Temporary number.
117022  * u2    Temproray number.
117023  * heap  Heap to use for allocation.
117024  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
117025  */
sp_384_calc_vfy_point_12(sp_point_384 * p1,sp_point_384 * p2,sp_digit * s,sp_digit * u1,sp_digit * u2,sp_digit * tmp,void * heap)117026 static int sp_384_calc_vfy_point_12(sp_point_384* p1, sp_point_384* p2,
117027     sp_digit* s, sp_digit* u1, sp_digit* u2, sp_digit* tmp, void* heap)
117028 {
117029     int err;
117030 
117031 #ifndef WOLFSSL_SP_SMALL
117032     err = sp_384_mod_inv_12(s, s, p384_order);
117033     if (err == MP_OKAY)
117034 #endif /* !WOLFSSL_SP_SMALL */
117035     {
117036         sp_384_mul_12(s, s, p384_norm_order);
117037         err = sp_384_mod_12(s, s, p384_order);
117038     }
117039     if (err == MP_OKAY) {
117040         sp_384_norm_12(s);
117041 #ifdef WOLFSSL_SP_SMALL
117042         {
117043             sp_384_mont_inv_order_12(s, s, tmp);
117044             sp_384_mont_mul_order_12(u1, u1, s);
117045             sp_384_mont_mul_order_12(u2, u2, s);
117046         }
117047 #else
117048         {
117049             sp_384_mont_mul_order_12(u1, u1, s);
117050             sp_384_mont_mul_order_12(u2, u2, s);
117051         }
117052 #endif /* WOLFSSL_SP_SMALL */
117053         {
117054             err = sp_384_ecc_mulmod_base_12(p1, u1, 0, 0, heap);
117055         }
117056     }
117057     if ((err == MP_OKAY) && sp_384_iszero_12(p1->z)) {
117058         p1->infinity = 1;
117059     }
117060     if (err == MP_OKAY) {
117061             err = sp_384_ecc_mulmod_12(p2, p2, u2, 0, 0, heap);
117062     }
117063     if ((err == MP_OKAY) && sp_384_iszero_12(p2->z)) {
117064         p2->infinity = 1;
117065     }
117066 
117067     if (err == MP_OKAY) {
117068         sp_384_add_points_12(p1, p2, tmp);
117069     }
117070 
117071     return err;
117072 }
117073 
117074 #ifdef HAVE_ECC_VERIFY
117075 /* Verify the signature values with the hash and public key.
117076  *   e = Truncate(hash, 384)
117077  *   u1 = e/s mod order
117078  *   u2 = r/s mod order
117079  *   r == (u1.G + u2.Q)->x mod order
117080  * Optimization: Leave point in projective form.
117081  *   (x, y, 1) == (x' / z'*z', y' / z'*z'*z', z' / z')
117082  *   (r + n*order).z'.z' mod prime == (u1.G + u2.Q)->x'
117083  * The hash is truncated to the first 384 bits.
117084  *
117085  * hash     Hash to sign.
117086  * hashLen  Length of the hash data.
117087  * rng      Random number generator.
117088  * priv     Private part of key - scalar.
117089  * rm       First part of result as an mp_int.
117090  * sm       Sirst part of result as an mp_int.
117091  * heap     Heap to use for allocation.
117092  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
117093  */
117094 #ifdef WOLFSSL_SP_NONBLOCK
117095 typedef struct sp_ecc_verify_384_ctx {
117096     int state;
117097     union {
117098         sp_384_ecc_mulmod_12_ctx mulmod_ctx;
117099         sp_384_mont_inv_order_12_ctx mont_inv_order_ctx;
117100         sp_384_proj_point_dbl_12_ctx dbl_ctx;
117101         sp_384_proj_point_add_12_ctx add_ctx;
117102     };
117103     sp_digit u1[2*12];
117104     sp_digit u2[2*12];
117105     sp_digit s[2*12];
117106     sp_digit tmp[2*12 * 5];
117107     sp_point_384 p1;
117108     sp_point_384 p2;
117109 } sp_ecc_verify_384_ctx;
117110 
sp_ecc_verify_384_nb(sp_ecc_ctx_t * sp_ctx,const byte * hash,word32 hashLen,const mp_int * pX,const mp_int * pY,const mp_int * pZ,const mp_int * rm,const mp_int * sm,int * res,void * heap)117111 int sp_ecc_verify_384_nb(sp_ecc_ctx_t* sp_ctx, const byte* hash,
117112     word32 hashLen, const mp_int* pX, const mp_int* pY, const mp_int* pZ,
117113     const mp_int* rm, const mp_int* sm, int* res, void* heap)
117114 {
117115     int err = FP_WOULDBLOCK;
117116     sp_ecc_verify_384_ctx* ctx = (sp_ecc_verify_384_ctx*)sp_ctx->data;
117117 
117118     typedef char ctx_size_test[sizeof(sp_ecc_verify_384_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
117119     (void)sizeof(ctx_size_test);
117120 
117121     switch (ctx->state) {
117122     case 0: /* INIT */
117123         if (hashLen > 48U) {
117124             hashLen = 48U;
117125         }
117126 
117127         sp_384_from_bin(ctx->u1, 12, hash, (int)hashLen);
117128         sp_384_from_mp(ctx->u2, 12, rm);
117129         sp_384_from_mp(ctx->s, 12, sm);
117130         sp_384_from_mp(ctx->p2.x, 12, pX);
117131         sp_384_from_mp(ctx->p2.y, 12, pY);
117132         sp_384_from_mp(ctx->p2.z, 12, pZ);
117133         ctx->state = 1;
117134         break;
117135     case 1: /* NORMS0 */
117136         sp_384_mul_12(ctx->s, ctx->s, p384_norm_order);
117137         err = sp_384_mod_12(ctx->s, ctx->s, p384_order);
117138         if (err == MP_OKAY)
117139             ctx->state = 2;
117140         break;
117141     case 2: /* NORMS1 */
117142         sp_384_norm_12(ctx->s);
117143         XMEMSET(&ctx->mont_inv_order_ctx, 0, sizeof(ctx->mont_inv_order_ctx));
117144         ctx->state = 3;
117145         break;
117146     case 3: /* NORMS2 */
117147         err = sp_384_mont_inv_order_12_nb((sp_ecc_ctx_t*)&ctx->mont_inv_order_ctx, ctx->s, ctx->s, ctx->tmp);
117148         if (err == MP_OKAY) {
117149             ctx->state = 4;
117150         }
117151         break;
117152     case 4: /* NORMS3 */
117153         sp_384_mont_mul_order_12(ctx->u1, ctx->u1, ctx->s);
117154         ctx->state = 5;
117155         break;
117156     case 5: /* NORMS4 */
117157         sp_384_mont_mul_order_12(ctx->u2, ctx->u2, ctx->s);
117158         XMEMSET(&ctx->mulmod_ctx, 0, sizeof(ctx->mulmod_ctx));
117159         ctx->state = 6;
117160         break;
117161     case 6: /* MULBASE */
117162         err = sp_384_ecc_mulmod_12_nb((sp_ecc_ctx_t*)&ctx->mulmod_ctx, &ctx->p1, &p384_base, ctx->u1, 0, 0, heap);
117163         if (err == MP_OKAY) {
117164             if (sp_384_iszero_12(ctx->p1.z)) {
117165                 ctx->p1.infinity = 1;
117166             }
117167             XMEMSET(&ctx->mulmod_ctx, 0, sizeof(ctx->mulmod_ctx));
117168             ctx->state = 7;
117169         }
117170         break;
117171     case 7: /* MULMOD */
117172         err = sp_384_ecc_mulmod_12_nb((sp_ecc_ctx_t*)&ctx->mulmod_ctx, &ctx->p2, &ctx->p2, ctx->u2, 0, 0, heap);
117173         if (err == MP_OKAY) {
117174             if (sp_384_iszero_12(ctx->p2.z)) {
117175                 ctx->p2.infinity = 1;
117176             }
117177             XMEMSET(&ctx->add_ctx, 0, sizeof(ctx->add_ctx));
117178             ctx->state = 8;
117179         }
117180         break;
117181     case 8: /* ADD */
117182         err = sp_384_proj_point_add_12_nb((sp_ecc_ctx_t*)&ctx->add_ctx, &ctx->p1, &ctx->p1, &ctx->p2, ctx->tmp);
117183         if (err == MP_OKAY)
117184             ctx->state = 9;
117185         break;
117186     case 9: /* MONT */
117187         /* (r + n*order).z'.z' mod prime == (u1.G + u2.Q)->x' */
117188         /* Reload r and convert to Montgomery form. */
117189         sp_384_from_mp(ctx->u2, 12, rm);
117190         err = sp_384_mod_mul_norm_12(ctx->u2, ctx->u2, p384_mod);
117191         if (err == MP_OKAY)
117192             ctx->state = 10;
117193         break;
117194     case 10: /* SQR */
117195         /* u1 = r.z'.z' mod prime */
117196         sp_384_mont_sqr_12(ctx->p1.z, ctx->p1.z, p384_mod, p384_mp_mod);
117197         ctx->state = 11;
117198         break;
117199     case 11: /* MUL */
117200         sp_384_mont_mul_12(ctx->u1, ctx->u2, ctx->p1.z, p384_mod, p384_mp_mod);
117201         ctx->state = 12;
117202         break;
117203     case 12: /* RES */
117204     {
117205         sp_int32 c = 0;
117206         err = MP_OKAY; /* math okay, now check result */
117207         *res = (int)(sp_384_cmp_12(ctx->p1.x, ctx->u1) == 0);
117208         if (*res == 0) {
117209             sp_digit carry;
117210 
117211             /* Reload r and add order. */
117212             sp_384_from_mp(ctx->u2, 12, rm);
117213             carry = sp_384_add_12(ctx->u2, ctx->u2, p384_order);
117214             /* Carry means result is greater than mod and is not valid. */
117215             if (carry == 0) {
117216                 sp_384_norm_12(ctx->u2);
117217 
117218                 /* Compare with mod and if greater or equal then not valid. */
117219                 c = sp_384_cmp_12(ctx->u2, p384_mod);
117220             }
117221         }
117222         if ((*res == 0) && (c < 0)) {
117223             /* Convert to Montogomery form */
117224             err = sp_384_mod_mul_norm_12(ctx->u2, ctx->u2, p384_mod);
117225             if (err == MP_OKAY) {
117226                 /* u1 = (r + 1*order).z'.z' mod prime */
117227                 sp_384_mont_mul_12(ctx->u1, ctx->u2, ctx->p1.z, p384_mod,
117228                                                             p384_mp_mod);
117229                 *res = (int)(sp_384_cmp_12(ctx->p1.x, ctx->u1) == 0);
117230             }
117231         }
117232         break;
117233     }
117234     } /* switch */
117235 
117236     if (err == MP_OKAY && ctx->state != 12) {
117237         err = FP_WOULDBLOCK;
117238     }
117239 
117240     return err;
117241 }
117242 #endif /* WOLFSSL_SP_NONBLOCK */
117243 
sp_ecc_verify_384(const byte * hash,word32 hashLen,const mp_int * pX,const mp_int * pY,const mp_int * pZ,const mp_int * rm,const mp_int * sm,int * res,void * heap)117244 int sp_ecc_verify_384(const byte* hash, word32 hashLen, const mp_int* pX,
117245     const mp_int* pY, const mp_int* pZ, const mp_int* rm, const mp_int* sm,
117246     int* res, void* heap)
117247 {
117248 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117249     sp_digit* u1 = NULL;
117250     sp_point_384* p1 = NULL;
117251 #else
117252     sp_digit  u1[16 * 12];
117253     sp_point_384 p1[2];
117254 #endif
117255     sp_digit* u2 = NULL;
117256     sp_digit* s = NULL;
117257     sp_digit* tmp = NULL;
117258     sp_point_384* p2 = NULL;
117259     sp_digit carry;
117260     sp_int32 c = 0;
117261     int err = MP_OKAY;
117262 
117263 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117264     if (err == MP_OKAY) {
117265         p1 = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap,
117266                                              DYNAMIC_TYPE_ECC);
117267         if (p1 == NULL)
117268             err = MEMORY_E;
117269     }
117270     if (err == MP_OKAY) {
117271         u1 = (sp_digit*)XMALLOC(sizeof(sp_digit) * 16 * 12, heap,
117272                                                               DYNAMIC_TYPE_ECC);
117273         if (u1 == NULL)
117274             err = MEMORY_E;
117275     }
117276 #endif
117277 
117278     if (err == MP_OKAY) {
117279         u2  = u1 + 2 * 12;
117280         s   = u1 + 4 * 12;
117281         tmp = u1 + 6 * 12;
117282         p2 = p1 + 1;
117283 
117284         if (hashLen > 48U) {
117285             hashLen = 48U;
117286         }
117287 
117288         sp_384_from_bin(u1, 12, hash, (int)hashLen);
117289         sp_384_from_mp(u2, 12, rm);
117290         sp_384_from_mp(s, 12, sm);
117291         sp_384_from_mp(p2->x, 12, pX);
117292         sp_384_from_mp(p2->y, 12, pY);
117293         sp_384_from_mp(p2->z, 12, pZ);
117294 
117295         err = sp_384_calc_vfy_point_12(p1, p2, s, u1, u2, tmp, heap);
117296     }
117297     if (err == MP_OKAY) {
117298         /* (r + n*order).z'.z' mod prime == (u1.G + u2.Q)->x' */
117299         /* Reload r and convert to Montgomery form. */
117300         sp_384_from_mp(u2, 12, rm);
117301         err = sp_384_mod_mul_norm_12(u2, u2, p384_mod);
117302     }
117303 
117304     if (err == MP_OKAY) {
117305         /* u1 = r.z'.z' mod prime */
117306         sp_384_mont_sqr_12(p1->z, p1->z, p384_mod, p384_mp_mod);
117307         sp_384_mont_mul_12(u1, u2, p1->z, p384_mod, p384_mp_mod);
117308         *res = (int)(sp_384_cmp_12(p1->x, u1) == 0);
117309         if (*res == 0) {
117310             /* Reload r and add order. */
117311             sp_384_from_mp(u2, 12, rm);
117312             carry = sp_384_add_12(u2, u2, p384_order);
117313             /* Carry means result is greater than mod and is not valid. */
117314             if (carry == 0) {
117315                 sp_384_norm_12(u2);
117316 
117317                 /* Compare with mod and if greater or equal then not valid. */
117318                 c = sp_384_cmp_12(u2, p384_mod);
117319             }
117320         }
117321         if ((*res == 0) && (c < 0)) {
117322             /* Convert to Montogomery form */
117323             err = sp_384_mod_mul_norm_12(u2, u2, p384_mod);
117324             if (err == MP_OKAY) {
117325                 /* u1 = (r + 1*order).z'.z' mod prime */
117326                 sp_384_mont_mul_12(u1, u2, p1->z, p384_mod,
117327                     p384_mp_mod);
117328                 *res = (sp_384_cmp_12(p1->x, u1) == 0);
117329             }
117330         }
117331     }
117332 
117333 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117334     if (u1 != NULL)
117335         XFREE(u1, heap, DYNAMIC_TYPE_ECC);
117336     if (p1 != NULL)
117337         XFREE(p1, heap, DYNAMIC_TYPE_ECC);
117338 #endif
117339 
117340     return err;
117341 }
117342 #endif /* HAVE_ECC_VERIFY */
117343 
117344 #ifdef HAVE_ECC_CHECK_KEY
117345 /* Check that the x and y oridinates are a valid point on the curve.
117346  *
117347  * point  EC point.
117348  * heap   Heap to use if dynamically allocating.
117349  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
117350  * not on the curve and MP_OKAY otherwise.
117351  */
sp_384_ecc_is_point_12(const sp_point_384 * point,void * heap)117352 static int sp_384_ecc_is_point_12(const sp_point_384* point,
117353     void* heap)
117354 {
117355 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117356     sp_digit* t1 = NULL;
117357 #else
117358     sp_digit t1[12 * 4];
117359 #endif
117360     sp_digit* t2 = NULL;
117361     int err = MP_OKAY;
117362 
117363 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117364     t1 = (sp_digit*)XMALLOC(sizeof(sp_digit) * 12 * 4, heap, DYNAMIC_TYPE_ECC);
117365     if (t1 == NULL)
117366         err = MEMORY_E;
117367 #endif
117368     (void)heap;
117369 
117370     if (err == MP_OKAY) {
117371         t2 = t1 + 2 * 12;
117372 
117373         sp_384_sqr_12(t1, point->y);
117374         (void)sp_384_mod_12(t1, t1, p384_mod);
117375         sp_384_sqr_12(t2, point->x);
117376         (void)sp_384_mod_12(t2, t2, p384_mod);
117377         sp_384_mul_12(t2, t2, point->x);
117378         (void)sp_384_mod_12(t2, t2, p384_mod);
117379         (void)sp_384_sub_12(t2, p384_mod, t2);
117380         sp_384_mont_add_12(t1, t1, t2, p384_mod);
117381 
117382         sp_384_mont_add_12(t1, t1, point->x, p384_mod);
117383         sp_384_mont_add_12(t1, t1, point->x, p384_mod);
117384         sp_384_mont_add_12(t1, t1, point->x, p384_mod);
117385 
117386         if (sp_384_cmp_12(t1, p384_b) != 0) {
117387             err = MP_VAL;
117388         }
117389     }
117390 
117391 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117392     if (t1 != NULL)
117393         XFREE(t1, heap, DYNAMIC_TYPE_ECC);
117394 #endif
117395 
117396     return err;
117397 }
117398 
117399 /* Check that the x and y oridinates are a valid point on the curve.
117400  *
117401  * pX  X ordinate of EC point.
117402  * pY  Y ordinate of EC point.
117403  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
117404  * not on the curve and MP_OKAY otherwise.
117405  */
sp_ecc_is_point_384(const mp_int * pX,const mp_int * pY)117406 int sp_ecc_is_point_384(const mp_int* pX, const mp_int* pY)
117407 {
117408 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117409     sp_point_384* pub = NULL;
117410 #else
117411     sp_point_384 pub[1];
117412 #endif
117413     const byte one[1] = { 1 };
117414     int err = MP_OKAY;
117415 
117416 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117417     pub = (sp_point_384*)XMALLOC(sizeof(sp_point_384), NULL,
117418                                        DYNAMIC_TYPE_ECC);
117419     if (pub == NULL)
117420         err = MEMORY_E;
117421 #endif
117422 
117423     if (err == MP_OKAY) {
117424         sp_384_from_mp(pub->x, 12, pX);
117425         sp_384_from_mp(pub->y, 12, pY);
117426         sp_384_from_bin(pub->z, 12, one, (int)sizeof(one));
117427 
117428         err = sp_384_ecc_is_point_12(pub, NULL);
117429     }
117430 
117431 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117432     if (pub != NULL)
117433         XFREE(pub, NULL, DYNAMIC_TYPE_ECC);
117434 #endif
117435 
117436     return err;
117437 }
117438 
117439 /* Check that the private scalar generates the EC point (px, py), the point is
117440  * on the curve and the point has the correct order.
117441  *
117442  * pX     X ordinate of EC point.
117443  * pY     Y ordinate of EC point.
117444  * privm  Private scalar that generates EC point.
117445  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
117446  * not on the curve, ECC_INF_E if the point does not have the correct order,
117447  * ECC_PRIV_KEY_E when the private scalar doesn't generate the EC point and
117448  * MP_OKAY otherwise.
117449  */
sp_ecc_check_key_384(const mp_int * pX,const mp_int * pY,const mp_int * privm,void * heap)117450 int sp_ecc_check_key_384(const mp_int* pX, const mp_int* pY,
117451     const mp_int* privm, void* heap)
117452 {
117453 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117454     sp_digit* priv = NULL;
117455     sp_point_384* pub = NULL;
117456 #else
117457     sp_digit priv[12];
117458     sp_point_384 pub[2];
117459 #endif
117460     sp_point_384* p = NULL;
117461     const byte one[1] = { 1 };
117462     int err = MP_OKAY;
117463 
117464 
117465     /* Quick check the lengs of public key ordinates and private key are in
117466      * range. Proper check later.
117467      */
117468     if (((mp_count_bits(pX) > 384) ||
117469         (mp_count_bits(pY) > 384) ||
117470         ((privm != NULL) && (mp_count_bits(privm) > 384)))) {
117471         err = ECC_OUT_OF_RANGE_E;
117472     }
117473 
117474 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117475     if (err == MP_OKAY) {
117476         pub = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap,
117477                                            DYNAMIC_TYPE_ECC);
117478         if (pub == NULL)
117479             err = MEMORY_E;
117480     }
117481     if (err == MP_OKAY && privm) {
117482         priv = (sp_digit*)XMALLOC(sizeof(sp_digit) * 12, heap,
117483                                   DYNAMIC_TYPE_ECC);
117484         if (priv == NULL)
117485             err = MEMORY_E;
117486     }
117487 #endif
117488 
117489     if (err == MP_OKAY) {
117490         p = pub + 1;
117491 
117492         sp_384_from_mp(pub->x, 12, pX);
117493         sp_384_from_mp(pub->y, 12, pY);
117494         sp_384_from_bin(pub->z, 12, one, (int)sizeof(one));
117495         if (privm)
117496             sp_384_from_mp(priv, 12, privm);
117497 
117498         /* Check point at infinitiy. */
117499         if ((sp_384_iszero_12(pub->x) != 0) &&
117500             (sp_384_iszero_12(pub->y) != 0)) {
117501             err = ECC_INF_E;
117502         }
117503     }
117504 
117505     /* Check range of X and Y */
117506     if ((err == MP_OKAY) &&
117507             ((sp_384_cmp_12(pub->x, p384_mod) >= 0) ||
117508              (sp_384_cmp_12(pub->y, p384_mod) >= 0))) {
117509         err = ECC_OUT_OF_RANGE_E;
117510     }
117511 
117512     if (err == MP_OKAY) {
117513         /* Check point is on curve */
117514         err = sp_384_ecc_is_point_12(pub, heap);
117515     }
117516 
117517     if (err == MP_OKAY) {
117518         /* Point * order = infinity */
117519             err = sp_384_ecc_mulmod_12(p, pub, p384_order, 1, 1, heap);
117520     }
117521     /* Check result is infinity */
117522     if ((err == MP_OKAY) && ((sp_384_iszero_12(p->x) == 0) ||
117523                              (sp_384_iszero_12(p->y) == 0))) {
117524         err = ECC_INF_E;
117525     }
117526 
117527     if (privm) {
117528         if (err == MP_OKAY) {
117529             /* Base * private = point */
117530                 err = sp_384_ecc_mulmod_base_12(p, priv, 1, 1, heap);
117531         }
117532         /* Check result is public key */
117533         if ((err == MP_OKAY) &&
117534                 ((sp_384_cmp_12(p->x, pub->x) != 0) ||
117535                  (sp_384_cmp_12(p->y, pub->y) != 0))) {
117536             err = ECC_PRIV_KEY_E;
117537         }
117538     }
117539 
117540 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117541     if (pub != NULL)
117542         XFREE(pub, heap, DYNAMIC_TYPE_ECC);
117543     if (priv != NULL)
117544         XFREE(priv, heap, DYNAMIC_TYPE_ECC);
117545 #endif
117546 
117547     return err;
117548 }
117549 #endif
117550 #ifdef WOLFSSL_PUBLIC_ECC_ADD_DBL
117551 /* Add two projective EC points together.
117552  * (pX, pY, pZ) + (qX, qY, qZ) = (rX, rY, rZ)
117553  *
117554  * pX   First EC point's X ordinate.
117555  * pY   First EC point's Y ordinate.
117556  * pZ   First EC point's Z ordinate.
117557  * qX   Second EC point's X ordinate.
117558  * qY   Second EC point's Y ordinate.
117559  * qZ   Second EC point's Z ordinate.
117560  * rX   Resultant EC point's X ordinate.
117561  * rY   Resultant EC point's Y ordinate.
117562  * rZ   Resultant EC point's Z ordinate.
117563  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
117564  */
sp_ecc_proj_add_point_384(mp_int * pX,mp_int * pY,mp_int * pZ,mp_int * qX,mp_int * qY,mp_int * qZ,mp_int * rX,mp_int * rY,mp_int * rZ)117565 int sp_ecc_proj_add_point_384(mp_int* pX, mp_int* pY, mp_int* pZ,
117566                               mp_int* qX, mp_int* qY, mp_int* qZ,
117567                               mp_int* rX, mp_int* rY, mp_int* rZ)
117568 {
117569 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117570     sp_digit* tmp = NULL;
117571     sp_point_384* p = NULL;
117572 #else
117573     sp_digit tmp[2 * 12 * 5];
117574     sp_point_384 p[2];
117575 #endif
117576     sp_point_384* q = NULL;
117577     int err = MP_OKAY;
117578 
117579 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117580     if (err == MP_OKAY) {
117581         p = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, NULL,
117582                                          DYNAMIC_TYPE_ECC);
117583         if (p == NULL)
117584             err = MEMORY_E;
117585     }
117586     if (err == MP_OKAY) {
117587         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 12 * 5, NULL,
117588                                  DYNAMIC_TYPE_ECC);
117589         if (tmp == NULL) {
117590             err = MEMORY_E;
117591         }
117592     }
117593 #endif
117594 
117595     if (err == MP_OKAY) {
117596         q = p + 1;
117597 
117598         sp_384_from_mp(p->x, 12, pX);
117599         sp_384_from_mp(p->y, 12, pY);
117600         sp_384_from_mp(p->z, 12, pZ);
117601         sp_384_from_mp(q->x, 12, qX);
117602         sp_384_from_mp(q->y, 12, qY);
117603         sp_384_from_mp(q->z, 12, qZ);
117604         p->infinity = sp_384_iszero_12(p->x) &
117605                       sp_384_iszero_12(p->y);
117606         q->infinity = sp_384_iszero_12(q->x) &
117607                       sp_384_iszero_12(q->y);
117608 
117609             sp_384_proj_point_add_12(p, p, q, tmp);
117610     }
117611 
117612     if (err == MP_OKAY) {
117613         err = sp_384_to_mp(p->x, rX);
117614     }
117615     if (err == MP_OKAY) {
117616         err = sp_384_to_mp(p->y, rY);
117617     }
117618     if (err == MP_OKAY) {
117619         err = sp_384_to_mp(p->z, rZ);
117620     }
117621 
117622 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117623     if (tmp != NULL)
117624         XFREE(tmp, NULL, DYNAMIC_TYPE_ECC);
117625     if (p != NULL)
117626         XFREE(p, NULL, DYNAMIC_TYPE_ECC);
117627 #endif
117628 
117629     return err;
117630 }
117631 
117632 /* Double a projective EC point.
117633  * (pX, pY, pZ) + (pX, pY, pZ) = (rX, rY, rZ)
117634  *
117635  * pX   EC point's X ordinate.
117636  * pY   EC point's Y ordinate.
117637  * pZ   EC point's Z ordinate.
117638  * rX   Resultant EC point's X ordinate.
117639  * rY   Resultant EC point's Y ordinate.
117640  * rZ   Resultant EC point's Z ordinate.
117641  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
117642  */
sp_ecc_proj_dbl_point_384(mp_int * pX,mp_int * pY,mp_int * pZ,mp_int * rX,mp_int * rY,mp_int * rZ)117643 int sp_ecc_proj_dbl_point_384(mp_int* pX, mp_int* pY, mp_int* pZ,
117644                               mp_int* rX, mp_int* rY, mp_int* rZ)
117645 {
117646 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117647     sp_digit* tmp = NULL;
117648     sp_point_384* p = NULL;
117649 #else
117650     sp_digit tmp[2 * 12 * 2];
117651     sp_point_384 p[1];
117652 #endif
117653     int err = MP_OKAY;
117654 
117655 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117656     if (err == MP_OKAY) {
117657         p = (sp_point_384*)XMALLOC(sizeof(sp_point_384), NULL,
117658                                          DYNAMIC_TYPE_ECC);
117659         if (p == NULL)
117660             err = MEMORY_E;
117661     }
117662     if (err == MP_OKAY) {
117663         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 12 * 2, NULL,
117664                                  DYNAMIC_TYPE_ECC);
117665         if (tmp == NULL)
117666             err = MEMORY_E;
117667     }
117668 #endif
117669 
117670     if (err == MP_OKAY) {
117671         sp_384_from_mp(p->x, 12, pX);
117672         sp_384_from_mp(p->y, 12, pY);
117673         sp_384_from_mp(p->z, 12, pZ);
117674         p->infinity = sp_384_iszero_12(p->x) &
117675                       sp_384_iszero_12(p->y);
117676 
117677             sp_384_proj_point_dbl_12(p, p, tmp);
117678     }
117679 
117680     if (err == MP_OKAY) {
117681         err = sp_384_to_mp(p->x, rX);
117682     }
117683     if (err == MP_OKAY) {
117684         err = sp_384_to_mp(p->y, rY);
117685     }
117686     if (err == MP_OKAY) {
117687         err = sp_384_to_mp(p->z, rZ);
117688     }
117689 
117690 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117691     if (tmp != NULL)
117692         XFREE(tmp, NULL, DYNAMIC_TYPE_ECC);
117693     if (p != NULL)
117694         XFREE(p, NULL, DYNAMIC_TYPE_ECC);
117695 #endif
117696 
117697     return err;
117698 }
117699 
117700 /* Map a projective EC point to affine in place.
117701  * pZ will be one.
117702  *
117703  * pX   EC point's X ordinate.
117704  * pY   EC point's Y ordinate.
117705  * pZ   EC point's Z ordinate.
117706  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
117707  */
sp_ecc_map_384(mp_int * pX,mp_int * pY,mp_int * pZ)117708 int sp_ecc_map_384(mp_int* pX, mp_int* pY, mp_int* pZ)
117709 {
117710 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117711     sp_digit* tmp = NULL;
117712     sp_point_384* p = NULL;
117713 #else
117714     sp_digit tmp[2 * 12 * 6];
117715     sp_point_384 p[1];
117716 #endif
117717     int err = MP_OKAY;
117718 
117719 
117720 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117721     if (err == MP_OKAY) {
117722         p = (sp_point_384*)XMALLOC(sizeof(sp_point_384), NULL,
117723                                          DYNAMIC_TYPE_ECC);
117724         if (p == NULL)
117725             err = MEMORY_E;
117726     }
117727     if (err == MP_OKAY) {
117728         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 12 * 6, NULL,
117729                                  DYNAMIC_TYPE_ECC);
117730         if (tmp == NULL)
117731             err = MEMORY_E;
117732     }
117733 #endif
117734     if (err == MP_OKAY) {
117735         sp_384_from_mp(p->x, 12, pX);
117736         sp_384_from_mp(p->y, 12, pY);
117737         sp_384_from_mp(p->z, 12, pZ);
117738         p->infinity = sp_384_iszero_12(p->x) &
117739                       sp_384_iszero_12(p->y);
117740 
117741             sp_384_map_12(p, p, tmp);
117742     }
117743 
117744     if (err == MP_OKAY) {
117745         err = sp_384_to_mp(p->x, pX);
117746     }
117747     if (err == MP_OKAY) {
117748         err = sp_384_to_mp(p->y, pY);
117749     }
117750     if (err == MP_OKAY) {
117751         err = sp_384_to_mp(p->z, pZ);
117752     }
117753 
117754 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117755     if (tmp != NULL)
117756         XFREE(tmp, NULL, DYNAMIC_TYPE_ECC);
117757     if (p != NULL)
117758         XFREE(p, NULL, DYNAMIC_TYPE_ECC);
117759 #endif
117760 
117761     return err;
117762 }
117763 #endif /* WOLFSSL_PUBLIC_ECC_ADD_DBL */
117764 #ifdef HAVE_COMP_KEY
117765 /* Find the square root of a number mod the prime of the curve.
117766  *
117767  * y  The number to operate on and the result.
117768  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
117769  */
sp_384_mont_sqrt_12(sp_digit * y)117770 static int sp_384_mont_sqrt_12(sp_digit* y)
117771 {
117772 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117773     sp_digit* t1 = NULL;
117774 #else
117775     sp_digit t1[5 * 2 * 12];
117776 #endif
117777     sp_digit* t2 = NULL;
117778     sp_digit* t3 = NULL;
117779     sp_digit* t4 = NULL;
117780     sp_digit* t5 = NULL;
117781     int err = MP_OKAY;
117782 
117783 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117784     t1 = (sp_digit*)XMALLOC(sizeof(sp_digit) * 5 * 2 * 12, NULL, DYNAMIC_TYPE_ECC);
117785     if (t1 == NULL)
117786         err = MEMORY_E;
117787 #endif
117788 
117789     if (err == MP_OKAY) {
117790         t2 = t1 + 2 * 12;
117791         t3 = t1 + 4 * 12;
117792         t4 = t1 + 6 * 12;
117793         t5 = t1 + 8 * 12;
117794 
117795         {
117796             /* t2 = y ^ 0x2 */
117797             sp_384_mont_sqr_12(t2, y, p384_mod, p384_mp_mod);
117798             /* t1 = y ^ 0x3 */
117799             sp_384_mont_mul_12(t1, t2, y, p384_mod, p384_mp_mod);
117800             /* t5 = y ^ 0xc */
117801             sp_384_mont_sqr_n_12(t5, t1, 2, p384_mod, p384_mp_mod);
117802             /* t1 = y ^ 0xf */
117803             sp_384_mont_mul_12(t1, t1, t5, p384_mod, p384_mp_mod);
117804             /* t2 = y ^ 0x1e */
117805             sp_384_mont_sqr_12(t2, t1, p384_mod, p384_mp_mod);
117806             /* t3 = y ^ 0x1f */
117807             sp_384_mont_mul_12(t3, t2, y, p384_mod, p384_mp_mod);
117808             /* t2 = y ^ 0x3e0 */
117809             sp_384_mont_sqr_n_12(t2, t3, 5, p384_mod, p384_mp_mod);
117810             /* t1 = y ^ 0x3ff */
117811             sp_384_mont_mul_12(t1, t3, t2, p384_mod, p384_mp_mod);
117812             /* t2 = y ^ 0x7fe0 */
117813             sp_384_mont_sqr_n_12(t2, t1, 5, p384_mod, p384_mp_mod);
117814             /* t3 = y ^ 0x7fff */
117815             sp_384_mont_mul_12(t3, t3, t2, p384_mod, p384_mp_mod);
117816             /* t2 = y ^ 0x3fff800 */
117817             sp_384_mont_sqr_n_12(t2, t3, 15, p384_mod, p384_mp_mod);
117818             /* t4 = y ^ 0x3ffffff */
117819             sp_384_mont_mul_12(t4, t3, t2, p384_mod, p384_mp_mod);
117820             /* t2 = y ^ 0xffffffc000000 */
117821             sp_384_mont_sqr_n_12(t2, t4, 30, p384_mod, p384_mp_mod);
117822             /* t1 = y ^ 0xfffffffffffff */
117823             sp_384_mont_mul_12(t1, t4, t2, p384_mod, p384_mp_mod);
117824             /* t2 = y ^ 0xfffffffffffffff000000000000000 */
117825             sp_384_mont_sqr_n_12(t2, t1, 60, p384_mod, p384_mp_mod);
117826             /* t1 = y ^ 0xffffffffffffffffffffffffffffff */
117827             sp_384_mont_mul_12(t1, t1, t2, p384_mod, p384_mp_mod);
117828             /* t2 = y ^ 0xffffffffffffffffffffffffffffff000000000000000000000000000000 */
117829             sp_384_mont_sqr_n_12(t2, t1, 120, p384_mod, p384_mp_mod);
117830             /* t1 = y ^ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff */
117831             sp_384_mont_mul_12(t1, t1, t2, p384_mod, p384_mp_mod);
117832             /* t2 = y ^ 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000 */
117833             sp_384_mont_sqr_n_12(t2, t1, 15, p384_mod, p384_mp_mod);
117834             /* t1 = y ^ 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff */
117835             sp_384_mont_mul_12(t1, t3, t2, p384_mod, p384_mp_mod);
117836             /* t2 = y ^ 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000 */
117837             sp_384_mont_sqr_n_12(t2, t1, 31, p384_mod, p384_mp_mod);
117838             /* t1 = y ^ 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffff */
117839             sp_384_mont_mul_12(t1, t4, t2, p384_mod, p384_mp_mod);
117840             /* t2 = y ^ 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffff0 */
117841             sp_384_mont_sqr_n_12(t2, t1, 4, p384_mod, p384_mp_mod);
117842             /* t1 = y ^ 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc */
117843             sp_384_mont_mul_12(t1, t5, t2, p384_mod, p384_mp_mod);
117844             /* t2 = y ^ 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000 */
117845             sp_384_mont_sqr_n_12(t2, t1, 62, p384_mod, p384_mp_mod);
117846             /* t1 = y ^ 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000001 */
117847             sp_384_mont_mul_12(t1, y, t2, p384_mod, p384_mp_mod);
117848             /* t2 = y ^ 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc00000000000000040000000 */
117849             sp_384_mont_sqr_n_12(y, t1, 30, p384_mod, p384_mp_mod);
117850         }
117851     }
117852 
117853 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117854     if (t1 != NULL)
117855         XFREE(t1, NULL, DYNAMIC_TYPE_ECC);
117856 #endif
117857 
117858     return err;
117859 }
117860 
117861 
117862 /* Uncompress the point given the X ordinate.
117863  *
117864  * xm    X ordinate.
117865  * odd   Whether the Y ordinate is odd.
117866  * ym    Calculated Y ordinate.
117867  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
117868  */
sp_ecc_uncompress_384(mp_int * xm,int odd,mp_int * ym)117869 int sp_ecc_uncompress_384(mp_int* xm, int odd, mp_int* ym)
117870 {
117871 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117872     sp_digit* x = NULL;
117873 #else
117874     sp_digit x[4 * 12];
117875 #endif
117876     sp_digit* y = NULL;
117877     int err = MP_OKAY;
117878 
117879 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117880     x = (sp_digit*)XMALLOC(sizeof(sp_digit) * 4 * 12, NULL, DYNAMIC_TYPE_ECC);
117881     if (x == NULL)
117882         err = MEMORY_E;
117883 #endif
117884 
117885     if (err == MP_OKAY) {
117886         y = x + 2 * 12;
117887 
117888         sp_384_from_mp(x, 12, xm);
117889         err = sp_384_mod_mul_norm_12(x, x, p384_mod);
117890     }
117891     if (err == MP_OKAY) {
117892         /* y = x^3 */
117893         {
117894             sp_384_mont_sqr_12(y, x, p384_mod, p384_mp_mod);
117895             sp_384_mont_mul_12(y, y, x, p384_mod, p384_mp_mod);
117896         }
117897         /* y = x^3 - 3x */
117898         sp_384_mont_sub_12(y, y, x, p384_mod);
117899         sp_384_mont_sub_12(y, y, x, p384_mod);
117900         sp_384_mont_sub_12(y, y, x, p384_mod);
117901         /* y = x^3 - 3x + b */
117902         err = sp_384_mod_mul_norm_12(x, p384_b, p384_mod);
117903     }
117904     if (err == MP_OKAY) {
117905         sp_384_mont_add_12(y, y, x, p384_mod);
117906         /* y = sqrt(x^3 - 3x + b) */
117907         err = sp_384_mont_sqrt_12(y);
117908     }
117909     if (err == MP_OKAY) {
117910         XMEMSET(y + 12, 0, 12U * sizeof(sp_digit));
117911         sp_384_mont_reduce_12(y, p384_mod, p384_mp_mod);
117912         if ((((word32)y[0] ^ (word32)odd) & 1U) != 0U) {
117913             sp_384_mont_sub_12(y, p384_mod, y, p384_mod);
117914         }
117915 
117916         err = sp_384_to_mp(y, ym);
117917     }
117918 
117919 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
117920     if (x != NULL)
117921         XFREE(x, NULL, DYNAMIC_TYPE_ECC);
117922 #endif
117923 
117924     return err;
117925 }
117926 #endif
117927 #endif /* WOLFSSL_SP_384 */
117928 #ifdef WOLFSSL_SP_1024
117929 
117930 /* Point structure to use. */
117931 typedef struct sp_point_1024 {
117932     /* X ordinate of point. */
117933     sp_digit x[2 * 32];
117934     /* Y ordinate of point. */
117935     sp_digit y[2 * 32];
117936     /* Z ordinate of point. */
117937     sp_digit z[2 * 32];
117938     /* Indicates point is at infinity. */
117939     int infinity;
117940 } sp_point_1024;
117941 
117942 #ifndef WOLFSSL_SP_SMALL
117943 #ifndef WOLFSSL_SP_LARGE_CODE
117944 /* Multiply a and b into r. (r = a * b)
117945  *
117946  * r  A single precision integer.
117947  * a  A single precision integer.
117948  * b  A single precision integer.
117949  */
sp_1024_mul_16(sp_digit * r,const sp_digit * a,const sp_digit * b)117950 SP_NOINLINE static void sp_1024_mul_16(sp_digit* r, const sp_digit* a,
117951         const sp_digit* b)
117952 {
117953     sp_digit t[16 * 2];
117954     sp_digit* tmp = t;
117955     __asm__ __volatile__ (
117956         "movs	r3, #0\n\t"
117957         "movs	r4, #0\n\t"
117958         "mov	r8, r3\n\t"
117959         "mov	r11, %[tmp]\n\t"
117960         "mov	r9, %[a]\n\t"
117961         "mov	r10, %[b]\n\t"
117962         "movs	r6, #0x40\n\t"
117963         "add	r6, r6, r9\n\t"
117964         "mov	r12, r6\n\t"
117965         "\n"
117966     "L_sp_1024_mul_16_words_%=:\n\t"
117967         "movs	%[tmp], #0\n\t"
117968         "movs	r5, #0\n\t"
117969         "movs	r6, #60\n\t"
117970         "mov	%[a], r8\n\t"
117971 #if defined(__clang__) || defined(WOLFSSL_KEIL)
117972         "subs	%[a], %[a], r6\n\t"
117973 #else
117974         "sub	%[a], %[a], r6\n\t"
117975 #endif
117976 #ifdef WOLFSSL_KEIL
117977         "sbcs	r6, r6, r6\n\t"
117978 #elif defined(__clang__)
117979         "sbcs	r6, r6\n\t"
117980 #else
117981         "sbc	r6, r6\n\t"
117982 #endif
117983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
117984         "mvns	r6, r6\n\t"
117985 #else
117986         "mvn	r6, r6\n\t"
117987 #endif
117988 #ifdef WOLFSSL_KEIL
117989         "ands	%[a], %[a], r6\n\t"
117990 #elif defined(__clang__)
117991         "ands	%[a], r6\n\t"
117992 #else
117993         "and	%[a], r6\n\t"
117994 #endif
117995         "mov	%[b], r8\n\t"
117996 #if defined(__clang__) || defined(WOLFSSL_KEIL)
117997         "subs	%[b], %[b], %[a]\n\t"
117998 #else
117999         "sub	%[b], %[b], %[a]\n\t"
118000 #endif
118001         "add	%[a], %[a], r9\n\t"
118002         "add	%[b], %[b], r10\n\t"
118003         "\n"
118004     "L_sp_1024_mul_16_mul_%=:\n\t"
118005         "# Multiply Start\n\t"
118006         "ldrh	r6, [%[a]]\n\t"
118007         "ldrh	r7, [%[b]]\n\t"
118008 #ifdef WOLFSSL_KEIL
118009         "muls	r7, r6, r7\n\t"
118010 #elif defined(__clang__)
118011         "muls	r7, r6\n\t"
118012 #else
118013         "mul	r7, r6\n\t"
118014 #endif
118015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118016         "adds	r3, r3, r7\n\t"
118017 #else
118018         "add	r3, r3, r7\n\t"
118019 #endif
118020 #ifdef WOLFSSL_KEIL
118021         "adcs	r4, r4, %[tmp]\n\t"
118022 #elif defined(__clang__)
118023         "adcs	r4, %[tmp]\n\t"
118024 #else
118025         "adc	r4, %[tmp]\n\t"
118026 #endif
118027 #ifdef WOLFSSL_KEIL
118028         "adcs	r5, r5, %[tmp]\n\t"
118029 #elif defined(__clang__)
118030         "adcs	r5, %[tmp]\n\t"
118031 #else
118032         "adc	r5, %[tmp]\n\t"
118033 #endif
118034         "ldr	r7, [%[b]]\n\t"
118035 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118036         "lsrs	r7, r7, #16\n\t"
118037 #else
118038         "lsr	r7, r7, #16\n\t"
118039 #endif
118040 #ifdef WOLFSSL_KEIL
118041         "muls	r6, r7, r6\n\t"
118042 #elif defined(__clang__)
118043         "muls	r6, r7\n\t"
118044 #else
118045         "mul	r6, r7\n\t"
118046 #endif
118047 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118048         "lsrs	r7, r6, #16\n\t"
118049 #else
118050         "lsr	r7, r6, #16\n\t"
118051 #endif
118052 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118053         "lsls	r6, r6, #16\n\t"
118054 #else
118055         "lsl	r6, r6, #16\n\t"
118056 #endif
118057 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118058         "adds	r3, r3, r6\n\t"
118059 #else
118060         "add	r3, r3, r6\n\t"
118061 #endif
118062 #ifdef WOLFSSL_KEIL
118063         "adcs	r4, r4, r7\n\t"
118064 #elif defined(__clang__)
118065         "adcs	r4, r7\n\t"
118066 #else
118067         "adc	r4, r7\n\t"
118068 #endif
118069 #ifdef WOLFSSL_KEIL
118070         "adcs	r5, r5, %[tmp]\n\t"
118071 #elif defined(__clang__)
118072         "adcs	r5, %[tmp]\n\t"
118073 #else
118074         "adc	r5, %[tmp]\n\t"
118075 #endif
118076         "ldr	r6, [%[a]]\n\t"
118077         "ldr	r7, [%[b]]\n\t"
118078 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118079         "lsrs	r6, r6, #16\n\t"
118080 #else
118081         "lsr	r6, r6, #16\n\t"
118082 #endif
118083 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118084         "lsrs	r7, r7, #16\n\t"
118085 #else
118086         "lsr	r7, r7, #16\n\t"
118087 #endif
118088 #ifdef WOLFSSL_KEIL
118089         "muls	r7, r6, r7\n\t"
118090 #elif defined(__clang__)
118091         "muls	r7, r6\n\t"
118092 #else
118093         "mul	r7, r6\n\t"
118094 #endif
118095 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118096         "adds	r4, r4, r7\n\t"
118097 #else
118098         "add	r4, r4, r7\n\t"
118099 #endif
118100 #ifdef WOLFSSL_KEIL
118101         "adcs	r5, r5, %[tmp]\n\t"
118102 #elif defined(__clang__)
118103         "adcs	r5, %[tmp]\n\t"
118104 #else
118105         "adc	r5, %[tmp]\n\t"
118106 #endif
118107         "ldrh	r7, [%[b]]\n\t"
118108 #ifdef WOLFSSL_KEIL
118109         "muls	r6, r7, r6\n\t"
118110 #elif defined(__clang__)
118111         "muls	r6, r7\n\t"
118112 #else
118113         "mul	r6, r7\n\t"
118114 #endif
118115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118116         "lsrs	r7, r6, #16\n\t"
118117 #else
118118         "lsr	r7, r6, #16\n\t"
118119 #endif
118120 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118121         "lsls	r6, r6, #16\n\t"
118122 #else
118123         "lsl	r6, r6, #16\n\t"
118124 #endif
118125 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118126         "adds	r3, r3, r6\n\t"
118127 #else
118128         "add	r3, r3, r6\n\t"
118129 #endif
118130 #ifdef WOLFSSL_KEIL
118131         "adcs	r4, r4, r7\n\t"
118132 #elif defined(__clang__)
118133         "adcs	r4, r7\n\t"
118134 #else
118135         "adc	r4, r7\n\t"
118136 #endif
118137 #ifdef WOLFSSL_KEIL
118138         "adcs	r5, r5, %[tmp]\n\t"
118139 #elif defined(__clang__)
118140         "adcs	r5, %[tmp]\n\t"
118141 #else
118142         "adc	r5, %[tmp]\n\t"
118143 #endif
118144         "# Multiply Done\n\t"
118145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118146         "adds	%[a], %[a], #4\n\t"
118147 #else
118148         "add	%[a], %[a], #4\n\t"
118149 #endif
118150 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118151         "subs	%[b], %[b], #4\n\t"
118152 #else
118153         "sub	%[b], %[b], #4\n\t"
118154 #endif
118155         "cmp	%[a], r12\n\t"
118156         "beq	L_sp_1024_mul_16_done_mul_%=\n\t"
118157         "mov	r6, r8\n\t"
118158         "add	r6, r6, r9\n\t"
118159         "cmp	%[a], r6\n\t"
118160         "ble	L_sp_1024_mul_16_mul_%=\n\t"
118161         "\n"
118162     "L_sp_1024_mul_16_done_mul_%=:\n\t"
118163         "mov	%[tmp], r11\n\t"
118164         "mov	r7, r8\n\t"
118165         "str	r3, [%[tmp], r7]\n\t"
118166         "movs	r3, r4\n\t"
118167         "movs	r4, r5\n\t"
118168 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118169         "adds	r7, r7, #4\n\t"
118170 #else
118171         "add	r7, r7, #4\n\t"
118172 #endif
118173         "mov	r8, r7\n\t"
118174         "movs	r6, #0x78\n\t"
118175         "cmp	r7, r6\n\t"
118176         "ble	L_sp_1024_mul_16_words_%=\n\t"
118177         "str	r3, [%[tmp], r7]\n\t"
118178         "mov	%[a], r9\n\t"
118179         "mov	%[b], r10\n\t"
118180         : [a] "+r" (a), [b] "+r" (b), [tmp] "+r" (tmp)
118181         :
118182         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
118183     );
118184 
118185     XMEMCPY(r, t, sizeof(t));
118186 }
118187 
118188 #else
118189 /* Multiply a and b into r. (r = a * b)
118190  *
118191  * r  A single precision integer.
118192  * a  A single precision integer.
118193  * b  A single precision integer.
118194  */
sp_1024_mul_16(sp_digit * r,const sp_digit * a,const sp_digit * b)118195 SP_NOINLINE static void sp_1024_mul_16(sp_digit* r, const sp_digit* a,
118196         const sp_digit* b)
118197 {
118198     __asm__ __volatile__ (
118199         "sub	sp, sp, #0x40\n\t"
118200         "mov	r8, %[r]\n\t"
118201         "mov	r9, %[a]\n\t"
118202         "mov	r10, %[b]\n\t"
118203         "movs	%[r], #0\n\t"
118204         "#  A[0] * B[0]\n\t"
118205         "ldr	%[a], [%[a]]\n\t"
118206         "ldr	%[b], [%[b]]\n\t"
118207         "uxth	r6, %[a]\n\t"
118208         "uxth	r3, %[b]\n\t"
118209 #ifdef WOLFSSL_KEIL
118210         "muls	r3, r6, r3\n\t"
118211 #elif defined(__clang__)
118212         "muls	r3, r6\n\t"
118213 #else
118214         "mul	r3, r6\n\t"
118215 #endif
118216 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118217         "lsrs	r7, %[b], #16\n\t"
118218 #else
118219         "lsr	r7, %[b], #16\n\t"
118220 #endif
118221 #ifdef WOLFSSL_KEIL
118222         "muls	r6, r7, r6\n\t"
118223 #elif defined(__clang__)
118224         "muls	r6, r7\n\t"
118225 #else
118226         "mul	r6, r7\n\t"
118227 #endif
118228 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118229         "lsrs	r4, r6, #16\n\t"
118230 #else
118231         "lsr	r4, r6, #16\n\t"
118232 #endif
118233 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118234         "lsls	r6, r6, #16\n\t"
118235 #else
118236         "lsl	r6, r6, #16\n\t"
118237 #endif
118238 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118239         "adds	r3, r3, r6\n\t"
118240 #else
118241         "add	r3, r3, r6\n\t"
118242 #endif
118243 #ifdef WOLFSSL_KEIL
118244         "adcs	r4, r4, %[r]\n\t"
118245 #elif defined(__clang__)
118246         "adcs	r4, %[r]\n\t"
118247 #else
118248         "adc	r4, %[r]\n\t"
118249 #endif
118250 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118251         "lsrs	r6, %[a], #16\n\t"
118252 #else
118253         "lsr	r6, %[a], #16\n\t"
118254 #endif
118255 #ifdef WOLFSSL_KEIL
118256         "muls	r7, r6, r7\n\t"
118257 #elif defined(__clang__)
118258         "muls	r7, r6\n\t"
118259 #else
118260         "mul	r7, r6\n\t"
118261 #endif
118262 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118263         "adds	r4, r4, r7\n\t"
118264 #else
118265         "add	r4, r4, r7\n\t"
118266 #endif
118267         "uxth	r7, %[b]\n\t"
118268 #ifdef WOLFSSL_KEIL
118269         "muls	r6, r7, r6\n\t"
118270 #elif defined(__clang__)
118271         "muls	r6, r7\n\t"
118272 #else
118273         "mul	r6, r7\n\t"
118274 #endif
118275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118276         "lsrs	r7, r6, #16\n\t"
118277 #else
118278         "lsr	r7, r6, #16\n\t"
118279 #endif
118280 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118281         "lsls	r6, r6, #16\n\t"
118282 #else
118283         "lsl	r6, r6, #16\n\t"
118284 #endif
118285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118286         "adds	r3, r3, r6\n\t"
118287 #else
118288         "add	r3, r3, r6\n\t"
118289 #endif
118290 #ifdef WOLFSSL_KEIL
118291         "adcs	r4, r4, r7\n\t"
118292 #elif defined(__clang__)
118293         "adcs	r4, r7\n\t"
118294 #else
118295         "adc	r4, r7\n\t"
118296 #endif
118297         "movs	r5, #0\n\t"
118298         "str	r3, [sp]\n\t"
118299         "#  A[0] * B[1]\n\t"
118300         "movs	r3, #0\n\t"
118301         "mov	%[a], r9\n\t"
118302         "mov	%[b], r10\n\t"
118303         "ldr	%[a], [%[a]]\n\t"
118304         "ldr	%[b], [%[b], #4]\n\t"
118305         "uxth	r6, %[a]\n\t"
118306         "uxth	r7, %[b]\n\t"
118307 #ifdef WOLFSSL_KEIL
118308         "muls	r7, r6, r7\n\t"
118309 #elif defined(__clang__)
118310         "muls	r7, r6\n\t"
118311 #else
118312         "mul	r7, r6\n\t"
118313 #endif
118314 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118315         "adds	r4, r4, r7\n\t"
118316 #else
118317         "add	r4, r4, r7\n\t"
118318 #endif
118319 #ifdef WOLFSSL_KEIL
118320         "adcs	r5, r5, %[r]\n\t"
118321 #elif defined(__clang__)
118322         "adcs	r5, %[r]\n\t"
118323 #else
118324         "adc	r5, %[r]\n\t"
118325 #endif
118326 #ifdef WOLFSSL_KEIL
118327         "adcs	r3, r3, %[r]\n\t"
118328 #elif defined(__clang__)
118329         "adcs	r3, %[r]\n\t"
118330 #else
118331         "adc	r3, %[r]\n\t"
118332 #endif
118333 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118334         "lsrs	r7, %[b], #16\n\t"
118335 #else
118336         "lsr	r7, %[b], #16\n\t"
118337 #endif
118338 #ifdef WOLFSSL_KEIL
118339         "muls	r6, r7, r6\n\t"
118340 #elif defined(__clang__)
118341         "muls	r6, r7\n\t"
118342 #else
118343         "mul	r6, r7\n\t"
118344 #endif
118345 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118346         "lsrs	r7, r6, #16\n\t"
118347 #else
118348         "lsr	r7, r6, #16\n\t"
118349 #endif
118350 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118351         "lsls	r6, r6, #16\n\t"
118352 #else
118353         "lsl	r6, r6, #16\n\t"
118354 #endif
118355 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118356         "adds	r4, r4, r6\n\t"
118357 #else
118358         "add	r4, r4, r6\n\t"
118359 #endif
118360 #ifdef WOLFSSL_KEIL
118361         "adcs	r5, r5, r7\n\t"
118362 #elif defined(__clang__)
118363         "adcs	r5, r7\n\t"
118364 #else
118365         "adc	r5, r7\n\t"
118366 #endif
118367 #ifdef WOLFSSL_KEIL
118368         "adcs	r3, r3, %[r]\n\t"
118369 #elif defined(__clang__)
118370         "adcs	r3, %[r]\n\t"
118371 #else
118372         "adc	r3, %[r]\n\t"
118373 #endif
118374 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118375         "lsrs	r6, %[a], #16\n\t"
118376 #else
118377         "lsr	r6, %[a], #16\n\t"
118378 #endif
118379 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118380         "lsrs	r7, %[b], #16\n\t"
118381 #else
118382         "lsr	r7, %[b], #16\n\t"
118383 #endif
118384 #ifdef WOLFSSL_KEIL
118385         "muls	r7, r6, r7\n\t"
118386 #elif defined(__clang__)
118387         "muls	r7, r6\n\t"
118388 #else
118389         "mul	r7, r6\n\t"
118390 #endif
118391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118392         "adds	r5, r5, r7\n\t"
118393 #else
118394         "add	r5, r5, r7\n\t"
118395 #endif
118396 #ifdef WOLFSSL_KEIL
118397         "adcs	r3, r3, %[r]\n\t"
118398 #elif defined(__clang__)
118399         "adcs	r3, %[r]\n\t"
118400 #else
118401         "adc	r3, %[r]\n\t"
118402 #endif
118403         "uxth	r7, %[b]\n\t"
118404 #ifdef WOLFSSL_KEIL
118405         "muls	r6, r7, r6\n\t"
118406 #elif defined(__clang__)
118407         "muls	r6, r7\n\t"
118408 #else
118409         "mul	r6, r7\n\t"
118410 #endif
118411 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118412         "lsrs	r7, r6, #16\n\t"
118413 #else
118414         "lsr	r7, r6, #16\n\t"
118415 #endif
118416 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118417         "lsls	r6, r6, #16\n\t"
118418 #else
118419         "lsl	r6, r6, #16\n\t"
118420 #endif
118421 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118422         "adds	r4, r4, r6\n\t"
118423 #else
118424         "add	r4, r4, r6\n\t"
118425 #endif
118426 #ifdef WOLFSSL_KEIL
118427         "adcs	r5, r5, r7\n\t"
118428 #elif defined(__clang__)
118429         "adcs	r5, r7\n\t"
118430 #else
118431         "adc	r5, r7\n\t"
118432 #endif
118433 #ifdef WOLFSSL_KEIL
118434         "adcs	r3, r3, %[r]\n\t"
118435 #elif defined(__clang__)
118436         "adcs	r3, %[r]\n\t"
118437 #else
118438         "adc	r3, %[r]\n\t"
118439 #endif
118440         "#  A[1] * B[0]\n\t"
118441         "mov	%[a], r9\n\t"
118442         "mov	%[b], r10\n\t"
118443         "ldr	%[a], [%[a], #4]\n\t"
118444         "ldr	%[b], [%[b]]\n\t"
118445         "uxth	r6, %[a]\n\t"
118446         "uxth	r7, %[b]\n\t"
118447 #ifdef WOLFSSL_KEIL
118448         "muls	r7, r6, r7\n\t"
118449 #elif defined(__clang__)
118450         "muls	r7, r6\n\t"
118451 #else
118452         "mul	r7, r6\n\t"
118453 #endif
118454 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118455         "adds	r4, r4, r7\n\t"
118456 #else
118457         "add	r4, r4, r7\n\t"
118458 #endif
118459 #ifdef WOLFSSL_KEIL
118460         "adcs	r5, r5, %[r]\n\t"
118461 #elif defined(__clang__)
118462         "adcs	r5, %[r]\n\t"
118463 #else
118464         "adc	r5, %[r]\n\t"
118465 #endif
118466 #ifdef WOLFSSL_KEIL
118467         "adcs	r3, r3, %[r]\n\t"
118468 #elif defined(__clang__)
118469         "adcs	r3, %[r]\n\t"
118470 #else
118471         "adc	r3, %[r]\n\t"
118472 #endif
118473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118474         "lsrs	r7, %[b], #16\n\t"
118475 #else
118476         "lsr	r7, %[b], #16\n\t"
118477 #endif
118478 #ifdef WOLFSSL_KEIL
118479         "muls	r6, r7, r6\n\t"
118480 #elif defined(__clang__)
118481         "muls	r6, r7\n\t"
118482 #else
118483         "mul	r6, r7\n\t"
118484 #endif
118485 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118486         "lsrs	r7, r6, #16\n\t"
118487 #else
118488         "lsr	r7, r6, #16\n\t"
118489 #endif
118490 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118491         "lsls	r6, r6, #16\n\t"
118492 #else
118493         "lsl	r6, r6, #16\n\t"
118494 #endif
118495 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118496         "adds	r4, r4, r6\n\t"
118497 #else
118498         "add	r4, r4, r6\n\t"
118499 #endif
118500 #ifdef WOLFSSL_KEIL
118501         "adcs	r5, r5, r7\n\t"
118502 #elif defined(__clang__)
118503         "adcs	r5, r7\n\t"
118504 #else
118505         "adc	r5, r7\n\t"
118506 #endif
118507 #ifdef WOLFSSL_KEIL
118508         "adcs	r3, r3, %[r]\n\t"
118509 #elif defined(__clang__)
118510         "adcs	r3, %[r]\n\t"
118511 #else
118512         "adc	r3, %[r]\n\t"
118513 #endif
118514 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118515         "lsrs	r6, %[a], #16\n\t"
118516 #else
118517         "lsr	r6, %[a], #16\n\t"
118518 #endif
118519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118520         "lsrs	r7, %[b], #16\n\t"
118521 #else
118522         "lsr	r7, %[b], #16\n\t"
118523 #endif
118524 #ifdef WOLFSSL_KEIL
118525         "muls	r7, r6, r7\n\t"
118526 #elif defined(__clang__)
118527         "muls	r7, r6\n\t"
118528 #else
118529         "mul	r7, r6\n\t"
118530 #endif
118531 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118532         "adds	r5, r5, r7\n\t"
118533 #else
118534         "add	r5, r5, r7\n\t"
118535 #endif
118536 #ifdef WOLFSSL_KEIL
118537         "adcs	r3, r3, %[r]\n\t"
118538 #elif defined(__clang__)
118539         "adcs	r3, %[r]\n\t"
118540 #else
118541         "adc	r3, %[r]\n\t"
118542 #endif
118543         "uxth	r7, %[b]\n\t"
118544 #ifdef WOLFSSL_KEIL
118545         "muls	r6, r7, r6\n\t"
118546 #elif defined(__clang__)
118547         "muls	r6, r7\n\t"
118548 #else
118549         "mul	r6, r7\n\t"
118550 #endif
118551 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118552         "lsrs	r7, r6, #16\n\t"
118553 #else
118554         "lsr	r7, r6, #16\n\t"
118555 #endif
118556 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118557         "lsls	r6, r6, #16\n\t"
118558 #else
118559         "lsl	r6, r6, #16\n\t"
118560 #endif
118561 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118562         "adds	r4, r4, r6\n\t"
118563 #else
118564         "add	r4, r4, r6\n\t"
118565 #endif
118566 #ifdef WOLFSSL_KEIL
118567         "adcs	r5, r5, r7\n\t"
118568 #elif defined(__clang__)
118569         "adcs	r5, r7\n\t"
118570 #else
118571         "adc	r5, r7\n\t"
118572 #endif
118573 #ifdef WOLFSSL_KEIL
118574         "adcs	r3, r3, %[r]\n\t"
118575 #elif defined(__clang__)
118576         "adcs	r3, %[r]\n\t"
118577 #else
118578         "adc	r3, %[r]\n\t"
118579 #endif
118580         "str	r4, [sp, #4]\n\t"
118581         "#  A[2] * B[0]\n\t"
118582         "movs	r4, #0\n\t"
118583         "mov	%[a], r9\n\t"
118584         "mov	%[b], r10\n\t"
118585         "ldr	%[a], [%[a], #8]\n\t"
118586         "ldr	%[b], [%[b]]\n\t"
118587         "uxth	r6, %[a]\n\t"
118588         "uxth	r7, %[b]\n\t"
118589 #ifdef WOLFSSL_KEIL
118590         "muls	r7, r6, r7\n\t"
118591 #elif defined(__clang__)
118592         "muls	r7, r6\n\t"
118593 #else
118594         "mul	r7, r6\n\t"
118595 #endif
118596 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118597         "adds	r5, r5, r7\n\t"
118598 #else
118599         "add	r5, r5, r7\n\t"
118600 #endif
118601 #ifdef WOLFSSL_KEIL
118602         "adcs	r3, r3, %[r]\n\t"
118603 #elif defined(__clang__)
118604         "adcs	r3, %[r]\n\t"
118605 #else
118606         "adc	r3, %[r]\n\t"
118607 #endif
118608 #ifdef WOLFSSL_KEIL
118609         "adcs	r4, r4, %[r]\n\t"
118610 #elif defined(__clang__)
118611         "adcs	r4, %[r]\n\t"
118612 #else
118613         "adc	r4, %[r]\n\t"
118614 #endif
118615 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118616         "lsrs	r7, %[b], #16\n\t"
118617 #else
118618         "lsr	r7, %[b], #16\n\t"
118619 #endif
118620 #ifdef WOLFSSL_KEIL
118621         "muls	r6, r7, r6\n\t"
118622 #elif defined(__clang__)
118623         "muls	r6, r7\n\t"
118624 #else
118625         "mul	r6, r7\n\t"
118626 #endif
118627 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118628         "lsrs	r7, r6, #16\n\t"
118629 #else
118630         "lsr	r7, r6, #16\n\t"
118631 #endif
118632 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118633         "lsls	r6, r6, #16\n\t"
118634 #else
118635         "lsl	r6, r6, #16\n\t"
118636 #endif
118637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118638         "adds	r5, r5, r6\n\t"
118639 #else
118640         "add	r5, r5, r6\n\t"
118641 #endif
118642 #ifdef WOLFSSL_KEIL
118643         "adcs	r3, r3, r7\n\t"
118644 #elif defined(__clang__)
118645         "adcs	r3, r7\n\t"
118646 #else
118647         "adc	r3, r7\n\t"
118648 #endif
118649 #ifdef WOLFSSL_KEIL
118650         "adcs	r4, r4, %[r]\n\t"
118651 #elif defined(__clang__)
118652         "adcs	r4, %[r]\n\t"
118653 #else
118654         "adc	r4, %[r]\n\t"
118655 #endif
118656 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118657         "lsrs	r6, %[a], #16\n\t"
118658 #else
118659         "lsr	r6, %[a], #16\n\t"
118660 #endif
118661 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118662         "lsrs	r7, %[b], #16\n\t"
118663 #else
118664         "lsr	r7, %[b], #16\n\t"
118665 #endif
118666 #ifdef WOLFSSL_KEIL
118667         "muls	r7, r6, r7\n\t"
118668 #elif defined(__clang__)
118669         "muls	r7, r6\n\t"
118670 #else
118671         "mul	r7, r6\n\t"
118672 #endif
118673 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118674         "adds	r3, r3, r7\n\t"
118675 #else
118676         "add	r3, r3, r7\n\t"
118677 #endif
118678 #ifdef WOLFSSL_KEIL
118679         "adcs	r4, r4, %[r]\n\t"
118680 #elif defined(__clang__)
118681         "adcs	r4, %[r]\n\t"
118682 #else
118683         "adc	r4, %[r]\n\t"
118684 #endif
118685         "uxth	r7, %[b]\n\t"
118686 #ifdef WOLFSSL_KEIL
118687         "muls	r6, r7, r6\n\t"
118688 #elif defined(__clang__)
118689         "muls	r6, r7\n\t"
118690 #else
118691         "mul	r6, r7\n\t"
118692 #endif
118693 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118694         "lsrs	r7, r6, #16\n\t"
118695 #else
118696         "lsr	r7, r6, #16\n\t"
118697 #endif
118698 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118699         "lsls	r6, r6, #16\n\t"
118700 #else
118701         "lsl	r6, r6, #16\n\t"
118702 #endif
118703 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118704         "adds	r5, r5, r6\n\t"
118705 #else
118706         "add	r5, r5, r6\n\t"
118707 #endif
118708 #ifdef WOLFSSL_KEIL
118709         "adcs	r3, r3, r7\n\t"
118710 #elif defined(__clang__)
118711         "adcs	r3, r7\n\t"
118712 #else
118713         "adc	r3, r7\n\t"
118714 #endif
118715 #ifdef WOLFSSL_KEIL
118716         "adcs	r4, r4, %[r]\n\t"
118717 #elif defined(__clang__)
118718         "adcs	r4, %[r]\n\t"
118719 #else
118720         "adc	r4, %[r]\n\t"
118721 #endif
118722         "#  A[1] * B[1]\n\t"
118723         "mov	%[a], r9\n\t"
118724         "mov	%[b], r10\n\t"
118725         "ldr	%[a], [%[a], #4]\n\t"
118726         "ldr	%[b], [%[b], #4]\n\t"
118727         "uxth	r6, %[a]\n\t"
118728         "uxth	r7, %[b]\n\t"
118729 #ifdef WOLFSSL_KEIL
118730         "muls	r7, r6, r7\n\t"
118731 #elif defined(__clang__)
118732         "muls	r7, r6\n\t"
118733 #else
118734         "mul	r7, r6\n\t"
118735 #endif
118736 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118737         "adds	r5, r5, r7\n\t"
118738 #else
118739         "add	r5, r5, r7\n\t"
118740 #endif
118741 #ifdef WOLFSSL_KEIL
118742         "adcs	r3, r3, %[r]\n\t"
118743 #elif defined(__clang__)
118744         "adcs	r3, %[r]\n\t"
118745 #else
118746         "adc	r3, %[r]\n\t"
118747 #endif
118748 #ifdef WOLFSSL_KEIL
118749         "adcs	r4, r4, %[r]\n\t"
118750 #elif defined(__clang__)
118751         "adcs	r4, %[r]\n\t"
118752 #else
118753         "adc	r4, %[r]\n\t"
118754 #endif
118755 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118756         "lsrs	r7, %[b], #16\n\t"
118757 #else
118758         "lsr	r7, %[b], #16\n\t"
118759 #endif
118760 #ifdef WOLFSSL_KEIL
118761         "muls	r6, r7, r6\n\t"
118762 #elif defined(__clang__)
118763         "muls	r6, r7\n\t"
118764 #else
118765         "mul	r6, r7\n\t"
118766 #endif
118767 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118768         "lsrs	r7, r6, #16\n\t"
118769 #else
118770         "lsr	r7, r6, #16\n\t"
118771 #endif
118772 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118773         "lsls	r6, r6, #16\n\t"
118774 #else
118775         "lsl	r6, r6, #16\n\t"
118776 #endif
118777 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118778         "adds	r5, r5, r6\n\t"
118779 #else
118780         "add	r5, r5, r6\n\t"
118781 #endif
118782 #ifdef WOLFSSL_KEIL
118783         "adcs	r3, r3, r7\n\t"
118784 #elif defined(__clang__)
118785         "adcs	r3, r7\n\t"
118786 #else
118787         "adc	r3, r7\n\t"
118788 #endif
118789 #ifdef WOLFSSL_KEIL
118790         "adcs	r4, r4, %[r]\n\t"
118791 #elif defined(__clang__)
118792         "adcs	r4, %[r]\n\t"
118793 #else
118794         "adc	r4, %[r]\n\t"
118795 #endif
118796 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118797         "lsrs	r6, %[a], #16\n\t"
118798 #else
118799         "lsr	r6, %[a], #16\n\t"
118800 #endif
118801 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118802         "lsrs	r7, %[b], #16\n\t"
118803 #else
118804         "lsr	r7, %[b], #16\n\t"
118805 #endif
118806 #ifdef WOLFSSL_KEIL
118807         "muls	r7, r6, r7\n\t"
118808 #elif defined(__clang__)
118809         "muls	r7, r6\n\t"
118810 #else
118811         "mul	r7, r6\n\t"
118812 #endif
118813 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118814         "adds	r3, r3, r7\n\t"
118815 #else
118816         "add	r3, r3, r7\n\t"
118817 #endif
118818 #ifdef WOLFSSL_KEIL
118819         "adcs	r4, r4, %[r]\n\t"
118820 #elif defined(__clang__)
118821         "adcs	r4, %[r]\n\t"
118822 #else
118823         "adc	r4, %[r]\n\t"
118824 #endif
118825         "uxth	r7, %[b]\n\t"
118826 #ifdef WOLFSSL_KEIL
118827         "muls	r6, r7, r6\n\t"
118828 #elif defined(__clang__)
118829         "muls	r6, r7\n\t"
118830 #else
118831         "mul	r6, r7\n\t"
118832 #endif
118833 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118834         "lsrs	r7, r6, #16\n\t"
118835 #else
118836         "lsr	r7, r6, #16\n\t"
118837 #endif
118838 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118839         "lsls	r6, r6, #16\n\t"
118840 #else
118841         "lsl	r6, r6, #16\n\t"
118842 #endif
118843 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118844         "adds	r5, r5, r6\n\t"
118845 #else
118846         "add	r5, r5, r6\n\t"
118847 #endif
118848 #ifdef WOLFSSL_KEIL
118849         "adcs	r3, r3, r7\n\t"
118850 #elif defined(__clang__)
118851         "adcs	r3, r7\n\t"
118852 #else
118853         "adc	r3, r7\n\t"
118854 #endif
118855 #ifdef WOLFSSL_KEIL
118856         "adcs	r4, r4, %[r]\n\t"
118857 #elif defined(__clang__)
118858         "adcs	r4, %[r]\n\t"
118859 #else
118860         "adc	r4, %[r]\n\t"
118861 #endif
118862         "#  A[0] * B[2]\n\t"
118863         "mov	%[a], r9\n\t"
118864         "mov	%[b], r10\n\t"
118865         "ldr	%[a], [%[a]]\n\t"
118866         "ldr	%[b], [%[b], #8]\n\t"
118867         "uxth	r6, %[a]\n\t"
118868         "uxth	r7, %[b]\n\t"
118869 #ifdef WOLFSSL_KEIL
118870         "muls	r7, r6, r7\n\t"
118871 #elif defined(__clang__)
118872         "muls	r7, r6\n\t"
118873 #else
118874         "mul	r7, r6\n\t"
118875 #endif
118876 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118877         "adds	r5, r5, r7\n\t"
118878 #else
118879         "add	r5, r5, r7\n\t"
118880 #endif
118881 #ifdef WOLFSSL_KEIL
118882         "adcs	r3, r3, %[r]\n\t"
118883 #elif defined(__clang__)
118884         "adcs	r3, %[r]\n\t"
118885 #else
118886         "adc	r3, %[r]\n\t"
118887 #endif
118888 #ifdef WOLFSSL_KEIL
118889         "adcs	r4, r4, %[r]\n\t"
118890 #elif defined(__clang__)
118891         "adcs	r4, %[r]\n\t"
118892 #else
118893         "adc	r4, %[r]\n\t"
118894 #endif
118895 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118896         "lsrs	r7, %[b], #16\n\t"
118897 #else
118898         "lsr	r7, %[b], #16\n\t"
118899 #endif
118900 #ifdef WOLFSSL_KEIL
118901         "muls	r6, r7, r6\n\t"
118902 #elif defined(__clang__)
118903         "muls	r6, r7\n\t"
118904 #else
118905         "mul	r6, r7\n\t"
118906 #endif
118907 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118908         "lsrs	r7, r6, #16\n\t"
118909 #else
118910         "lsr	r7, r6, #16\n\t"
118911 #endif
118912 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118913         "lsls	r6, r6, #16\n\t"
118914 #else
118915         "lsl	r6, r6, #16\n\t"
118916 #endif
118917 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118918         "adds	r5, r5, r6\n\t"
118919 #else
118920         "add	r5, r5, r6\n\t"
118921 #endif
118922 #ifdef WOLFSSL_KEIL
118923         "adcs	r3, r3, r7\n\t"
118924 #elif defined(__clang__)
118925         "adcs	r3, r7\n\t"
118926 #else
118927         "adc	r3, r7\n\t"
118928 #endif
118929 #ifdef WOLFSSL_KEIL
118930         "adcs	r4, r4, %[r]\n\t"
118931 #elif defined(__clang__)
118932         "adcs	r4, %[r]\n\t"
118933 #else
118934         "adc	r4, %[r]\n\t"
118935 #endif
118936 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118937         "lsrs	r6, %[a], #16\n\t"
118938 #else
118939         "lsr	r6, %[a], #16\n\t"
118940 #endif
118941 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118942         "lsrs	r7, %[b], #16\n\t"
118943 #else
118944         "lsr	r7, %[b], #16\n\t"
118945 #endif
118946 #ifdef WOLFSSL_KEIL
118947         "muls	r7, r6, r7\n\t"
118948 #elif defined(__clang__)
118949         "muls	r7, r6\n\t"
118950 #else
118951         "mul	r7, r6\n\t"
118952 #endif
118953 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118954         "adds	r3, r3, r7\n\t"
118955 #else
118956         "add	r3, r3, r7\n\t"
118957 #endif
118958 #ifdef WOLFSSL_KEIL
118959         "adcs	r4, r4, %[r]\n\t"
118960 #elif defined(__clang__)
118961         "adcs	r4, %[r]\n\t"
118962 #else
118963         "adc	r4, %[r]\n\t"
118964 #endif
118965         "uxth	r7, %[b]\n\t"
118966 #ifdef WOLFSSL_KEIL
118967         "muls	r6, r7, r6\n\t"
118968 #elif defined(__clang__)
118969         "muls	r6, r7\n\t"
118970 #else
118971         "mul	r6, r7\n\t"
118972 #endif
118973 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118974         "lsrs	r7, r6, #16\n\t"
118975 #else
118976         "lsr	r7, r6, #16\n\t"
118977 #endif
118978 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118979         "lsls	r6, r6, #16\n\t"
118980 #else
118981         "lsl	r6, r6, #16\n\t"
118982 #endif
118983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
118984         "adds	r5, r5, r6\n\t"
118985 #else
118986         "add	r5, r5, r6\n\t"
118987 #endif
118988 #ifdef WOLFSSL_KEIL
118989         "adcs	r3, r3, r7\n\t"
118990 #elif defined(__clang__)
118991         "adcs	r3, r7\n\t"
118992 #else
118993         "adc	r3, r7\n\t"
118994 #endif
118995 #ifdef WOLFSSL_KEIL
118996         "adcs	r4, r4, %[r]\n\t"
118997 #elif defined(__clang__)
118998         "adcs	r4, %[r]\n\t"
118999 #else
119000         "adc	r4, %[r]\n\t"
119001 #endif
119002         "str	r5, [sp, #8]\n\t"
119003         "#  A[0] * B[3]\n\t"
119004         "movs	r5, #0\n\t"
119005         "mov	%[a], r9\n\t"
119006         "mov	%[b], r10\n\t"
119007         "ldr	%[a], [%[a]]\n\t"
119008         "ldr	%[b], [%[b], #12]\n\t"
119009         "uxth	r6, %[a]\n\t"
119010         "uxth	r7, %[b]\n\t"
119011 #ifdef WOLFSSL_KEIL
119012         "muls	r7, r6, r7\n\t"
119013 #elif defined(__clang__)
119014         "muls	r7, r6\n\t"
119015 #else
119016         "mul	r7, r6\n\t"
119017 #endif
119018 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119019         "adds	r3, r3, r7\n\t"
119020 #else
119021         "add	r3, r3, r7\n\t"
119022 #endif
119023 #ifdef WOLFSSL_KEIL
119024         "adcs	r4, r4, %[r]\n\t"
119025 #elif defined(__clang__)
119026         "adcs	r4, %[r]\n\t"
119027 #else
119028         "adc	r4, %[r]\n\t"
119029 #endif
119030 #ifdef WOLFSSL_KEIL
119031         "adcs	r5, r5, %[r]\n\t"
119032 #elif defined(__clang__)
119033         "adcs	r5, %[r]\n\t"
119034 #else
119035         "adc	r5, %[r]\n\t"
119036 #endif
119037 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119038         "lsrs	r7, %[b], #16\n\t"
119039 #else
119040         "lsr	r7, %[b], #16\n\t"
119041 #endif
119042 #ifdef WOLFSSL_KEIL
119043         "muls	r6, r7, r6\n\t"
119044 #elif defined(__clang__)
119045         "muls	r6, r7\n\t"
119046 #else
119047         "mul	r6, r7\n\t"
119048 #endif
119049 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119050         "lsrs	r7, r6, #16\n\t"
119051 #else
119052         "lsr	r7, r6, #16\n\t"
119053 #endif
119054 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119055         "lsls	r6, r6, #16\n\t"
119056 #else
119057         "lsl	r6, r6, #16\n\t"
119058 #endif
119059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119060         "adds	r3, r3, r6\n\t"
119061 #else
119062         "add	r3, r3, r6\n\t"
119063 #endif
119064 #ifdef WOLFSSL_KEIL
119065         "adcs	r4, r4, r7\n\t"
119066 #elif defined(__clang__)
119067         "adcs	r4, r7\n\t"
119068 #else
119069         "adc	r4, r7\n\t"
119070 #endif
119071 #ifdef WOLFSSL_KEIL
119072         "adcs	r5, r5, %[r]\n\t"
119073 #elif defined(__clang__)
119074         "adcs	r5, %[r]\n\t"
119075 #else
119076         "adc	r5, %[r]\n\t"
119077 #endif
119078 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119079         "lsrs	r6, %[a], #16\n\t"
119080 #else
119081         "lsr	r6, %[a], #16\n\t"
119082 #endif
119083 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119084         "lsrs	r7, %[b], #16\n\t"
119085 #else
119086         "lsr	r7, %[b], #16\n\t"
119087 #endif
119088 #ifdef WOLFSSL_KEIL
119089         "muls	r7, r6, r7\n\t"
119090 #elif defined(__clang__)
119091         "muls	r7, r6\n\t"
119092 #else
119093         "mul	r7, r6\n\t"
119094 #endif
119095 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119096         "adds	r4, r4, r7\n\t"
119097 #else
119098         "add	r4, r4, r7\n\t"
119099 #endif
119100 #ifdef WOLFSSL_KEIL
119101         "adcs	r5, r5, %[r]\n\t"
119102 #elif defined(__clang__)
119103         "adcs	r5, %[r]\n\t"
119104 #else
119105         "adc	r5, %[r]\n\t"
119106 #endif
119107         "uxth	r7, %[b]\n\t"
119108 #ifdef WOLFSSL_KEIL
119109         "muls	r6, r7, r6\n\t"
119110 #elif defined(__clang__)
119111         "muls	r6, r7\n\t"
119112 #else
119113         "mul	r6, r7\n\t"
119114 #endif
119115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119116         "lsrs	r7, r6, #16\n\t"
119117 #else
119118         "lsr	r7, r6, #16\n\t"
119119 #endif
119120 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119121         "lsls	r6, r6, #16\n\t"
119122 #else
119123         "lsl	r6, r6, #16\n\t"
119124 #endif
119125 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119126         "adds	r3, r3, r6\n\t"
119127 #else
119128         "add	r3, r3, r6\n\t"
119129 #endif
119130 #ifdef WOLFSSL_KEIL
119131         "adcs	r4, r4, r7\n\t"
119132 #elif defined(__clang__)
119133         "adcs	r4, r7\n\t"
119134 #else
119135         "adc	r4, r7\n\t"
119136 #endif
119137 #ifdef WOLFSSL_KEIL
119138         "adcs	r5, r5, %[r]\n\t"
119139 #elif defined(__clang__)
119140         "adcs	r5, %[r]\n\t"
119141 #else
119142         "adc	r5, %[r]\n\t"
119143 #endif
119144         "#  A[1] * B[2]\n\t"
119145         "mov	%[a], r9\n\t"
119146         "mov	%[b], r10\n\t"
119147         "ldr	%[a], [%[a], #4]\n\t"
119148         "ldr	%[b], [%[b], #8]\n\t"
119149         "uxth	r6, %[a]\n\t"
119150         "uxth	r7, %[b]\n\t"
119151 #ifdef WOLFSSL_KEIL
119152         "muls	r7, r6, r7\n\t"
119153 #elif defined(__clang__)
119154         "muls	r7, r6\n\t"
119155 #else
119156         "mul	r7, r6\n\t"
119157 #endif
119158 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119159         "adds	r3, r3, r7\n\t"
119160 #else
119161         "add	r3, r3, r7\n\t"
119162 #endif
119163 #ifdef WOLFSSL_KEIL
119164         "adcs	r4, r4, %[r]\n\t"
119165 #elif defined(__clang__)
119166         "adcs	r4, %[r]\n\t"
119167 #else
119168         "adc	r4, %[r]\n\t"
119169 #endif
119170 #ifdef WOLFSSL_KEIL
119171         "adcs	r5, r5, %[r]\n\t"
119172 #elif defined(__clang__)
119173         "adcs	r5, %[r]\n\t"
119174 #else
119175         "adc	r5, %[r]\n\t"
119176 #endif
119177 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119178         "lsrs	r7, %[b], #16\n\t"
119179 #else
119180         "lsr	r7, %[b], #16\n\t"
119181 #endif
119182 #ifdef WOLFSSL_KEIL
119183         "muls	r6, r7, r6\n\t"
119184 #elif defined(__clang__)
119185         "muls	r6, r7\n\t"
119186 #else
119187         "mul	r6, r7\n\t"
119188 #endif
119189 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119190         "lsrs	r7, r6, #16\n\t"
119191 #else
119192         "lsr	r7, r6, #16\n\t"
119193 #endif
119194 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119195         "lsls	r6, r6, #16\n\t"
119196 #else
119197         "lsl	r6, r6, #16\n\t"
119198 #endif
119199 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119200         "adds	r3, r3, r6\n\t"
119201 #else
119202         "add	r3, r3, r6\n\t"
119203 #endif
119204 #ifdef WOLFSSL_KEIL
119205         "adcs	r4, r4, r7\n\t"
119206 #elif defined(__clang__)
119207         "adcs	r4, r7\n\t"
119208 #else
119209         "adc	r4, r7\n\t"
119210 #endif
119211 #ifdef WOLFSSL_KEIL
119212         "adcs	r5, r5, %[r]\n\t"
119213 #elif defined(__clang__)
119214         "adcs	r5, %[r]\n\t"
119215 #else
119216         "adc	r5, %[r]\n\t"
119217 #endif
119218 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119219         "lsrs	r6, %[a], #16\n\t"
119220 #else
119221         "lsr	r6, %[a], #16\n\t"
119222 #endif
119223 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119224         "lsrs	r7, %[b], #16\n\t"
119225 #else
119226         "lsr	r7, %[b], #16\n\t"
119227 #endif
119228 #ifdef WOLFSSL_KEIL
119229         "muls	r7, r6, r7\n\t"
119230 #elif defined(__clang__)
119231         "muls	r7, r6\n\t"
119232 #else
119233         "mul	r7, r6\n\t"
119234 #endif
119235 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119236         "adds	r4, r4, r7\n\t"
119237 #else
119238         "add	r4, r4, r7\n\t"
119239 #endif
119240 #ifdef WOLFSSL_KEIL
119241         "adcs	r5, r5, %[r]\n\t"
119242 #elif defined(__clang__)
119243         "adcs	r5, %[r]\n\t"
119244 #else
119245         "adc	r5, %[r]\n\t"
119246 #endif
119247         "uxth	r7, %[b]\n\t"
119248 #ifdef WOLFSSL_KEIL
119249         "muls	r6, r7, r6\n\t"
119250 #elif defined(__clang__)
119251         "muls	r6, r7\n\t"
119252 #else
119253         "mul	r6, r7\n\t"
119254 #endif
119255 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119256         "lsrs	r7, r6, #16\n\t"
119257 #else
119258         "lsr	r7, r6, #16\n\t"
119259 #endif
119260 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119261         "lsls	r6, r6, #16\n\t"
119262 #else
119263         "lsl	r6, r6, #16\n\t"
119264 #endif
119265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119266         "adds	r3, r3, r6\n\t"
119267 #else
119268         "add	r3, r3, r6\n\t"
119269 #endif
119270 #ifdef WOLFSSL_KEIL
119271         "adcs	r4, r4, r7\n\t"
119272 #elif defined(__clang__)
119273         "adcs	r4, r7\n\t"
119274 #else
119275         "adc	r4, r7\n\t"
119276 #endif
119277 #ifdef WOLFSSL_KEIL
119278         "adcs	r5, r5, %[r]\n\t"
119279 #elif defined(__clang__)
119280         "adcs	r5, %[r]\n\t"
119281 #else
119282         "adc	r5, %[r]\n\t"
119283 #endif
119284         "#  A[2] * B[1]\n\t"
119285         "mov	%[a], r9\n\t"
119286         "mov	%[b], r10\n\t"
119287         "ldr	%[a], [%[a], #8]\n\t"
119288         "ldr	%[b], [%[b], #4]\n\t"
119289         "uxth	r6, %[a]\n\t"
119290         "uxth	r7, %[b]\n\t"
119291 #ifdef WOLFSSL_KEIL
119292         "muls	r7, r6, r7\n\t"
119293 #elif defined(__clang__)
119294         "muls	r7, r6\n\t"
119295 #else
119296         "mul	r7, r6\n\t"
119297 #endif
119298 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119299         "adds	r3, r3, r7\n\t"
119300 #else
119301         "add	r3, r3, r7\n\t"
119302 #endif
119303 #ifdef WOLFSSL_KEIL
119304         "adcs	r4, r4, %[r]\n\t"
119305 #elif defined(__clang__)
119306         "adcs	r4, %[r]\n\t"
119307 #else
119308         "adc	r4, %[r]\n\t"
119309 #endif
119310 #ifdef WOLFSSL_KEIL
119311         "adcs	r5, r5, %[r]\n\t"
119312 #elif defined(__clang__)
119313         "adcs	r5, %[r]\n\t"
119314 #else
119315         "adc	r5, %[r]\n\t"
119316 #endif
119317 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119318         "lsrs	r7, %[b], #16\n\t"
119319 #else
119320         "lsr	r7, %[b], #16\n\t"
119321 #endif
119322 #ifdef WOLFSSL_KEIL
119323         "muls	r6, r7, r6\n\t"
119324 #elif defined(__clang__)
119325         "muls	r6, r7\n\t"
119326 #else
119327         "mul	r6, r7\n\t"
119328 #endif
119329 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119330         "lsrs	r7, r6, #16\n\t"
119331 #else
119332         "lsr	r7, r6, #16\n\t"
119333 #endif
119334 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119335         "lsls	r6, r6, #16\n\t"
119336 #else
119337         "lsl	r6, r6, #16\n\t"
119338 #endif
119339 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119340         "adds	r3, r3, r6\n\t"
119341 #else
119342         "add	r3, r3, r6\n\t"
119343 #endif
119344 #ifdef WOLFSSL_KEIL
119345         "adcs	r4, r4, r7\n\t"
119346 #elif defined(__clang__)
119347         "adcs	r4, r7\n\t"
119348 #else
119349         "adc	r4, r7\n\t"
119350 #endif
119351 #ifdef WOLFSSL_KEIL
119352         "adcs	r5, r5, %[r]\n\t"
119353 #elif defined(__clang__)
119354         "adcs	r5, %[r]\n\t"
119355 #else
119356         "adc	r5, %[r]\n\t"
119357 #endif
119358 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119359         "lsrs	r6, %[a], #16\n\t"
119360 #else
119361         "lsr	r6, %[a], #16\n\t"
119362 #endif
119363 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119364         "lsrs	r7, %[b], #16\n\t"
119365 #else
119366         "lsr	r7, %[b], #16\n\t"
119367 #endif
119368 #ifdef WOLFSSL_KEIL
119369         "muls	r7, r6, r7\n\t"
119370 #elif defined(__clang__)
119371         "muls	r7, r6\n\t"
119372 #else
119373         "mul	r7, r6\n\t"
119374 #endif
119375 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119376         "adds	r4, r4, r7\n\t"
119377 #else
119378         "add	r4, r4, r7\n\t"
119379 #endif
119380 #ifdef WOLFSSL_KEIL
119381         "adcs	r5, r5, %[r]\n\t"
119382 #elif defined(__clang__)
119383         "adcs	r5, %[r]\n\t"
119384 #else
119385         "adc	r5, %[r]\n\t"
119386 #endif
119387         "uxth	r7, %[b]\n\t"
119388 #ifdef WOLFSSL_KEIL
119389         "muls	r6, r7, r6\n\t"
119390 #elif defined(__clang__)
119391         "muls	r6, r7\n\t"
119392 #else
119393         "mul	r6, r7\n\t"
119394 #endif
119395 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119396         "lsrs	r7, r6, #16\n\t"
119397 #else
119398         "lsr	r7, r6, #16\n\t"
119399 #endif
119400 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119401         "lsls	r6, r6, #16\n\t"
119402 #else
119403         "lsl	r6, r6, #16\n\t"
119404 #endif
119405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119406         "adds	r3, r3, r6\n\t"
119407 #else
119408         "add	r3, r3, r6\n\t"
119409 #endif
119410 #ifdef WOLFSSL_KEIL
119411         "adcs	r4, r4, r7\n\t"
119412 #elif defined(__clang__)
119413         "adcs	r4, r7\n\t"
119414 #else
119415         "adc	r4, r7\n\t"
119416 #endif
119417 #ifdef WOLFSSL_KEIL
119418         "adcs	r5, r5, %[r]\n\t"
119419 #elif defined(__clang__)
119420         "adcs	r5, %[r]\n\t"
119421 #else
119422         "adc	r5, %[r]\n\t"
119423 #endif
119424         "#  A[3] * B[0]\n\t"
119425         "mov	%[a], r9\n\t"
119426         "mov	%[b], r10\n\t"
119427         "ldr	%[a], [%[a], #12]\n\t"
119428         "ldr	%[b], [%[b]]\n\t"
119429         "uxth	r6, %[a]\n\t"
119430         "uxth	r7, %[b]\n\t"
119431 #ifdef WOLFSSL_KEIL
119432         "muls	r7, r6, r7\n\t"
119433 #elif defined(__clang__)
119434         "muls	r7, r6\n\t"
119435 #else
119436         "mul	r7, r6\n\t"
119437 #endif
119438 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119439         "adds	r3, r3, r7\n\t"
119440 #else
119441         "add	r3, r3, r7\n\t"
119442 #endif
119443 #ifdef WOLFSSL_KEIL
119444         "adcs	r4, r4, %[r]\n\t"
119445 #elif defined(__clang__)
119446         "adcs	r4, %[r]\n\t"
119447 #else
119448         "adc	r4, %[r]\n\t"
119449 #endif
119450 #ifdef WOLFSSL_KEIL
119451         "adcs	r5, r5, %[r]\n\t"
119452 #elif defined(__clang__)
119453         "adcs	r5, %[r]\n\t"
119454 #else
119455         "adc	r5, %[r]\n\t"
119456 #endif
119457 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119458         "lsrs	r7, %[b], #16\n\t"
119459 #else
119460         "lsr	r7, %[b], #16\n\t"
119461 #endif
119462 #ifdef WOLFSSL_KEIL
119463         "muls	r6, r7, r6\n\t"
119464 #elif defined(__clang__)
119465         "muls	r6, r7\n\t"
119466 #else
119467         "mul	r6, r7\n\t"
119468 #endif
119469 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119470         "lsrs	r7, r6, #16\n\t"
119471 #else
119472         "lsr	r7, r6, #16\n\t"
119473 #endif
119474 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119475         "lsls	r6, r6, #16\n\t"
119476 #else
119477         "lsl	r6, r6, #16\n\t"
119478 #endif
119479 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119480         "adds	r3, r3, r6\n\t"
119481 #else
119482         "add	r3, r3, r6\n\t"
119483 #endif
119484 #ifdef WOLFSSL_KEIL
119485         "adcs	r4, r4, r7\n\t"
119486 #elif defined(__clang__)
119487         "adcs	r4, r7\n\t"
119488 #else
119489         "adc	r4, r7\n\t"
119490 #endif
119491 #ifdef WOLFSSL_KEIL
119492         "adcs	r5, r5, %[r]\n\t"
119493 #elif defined(__clang__)
119494         "adcs	r5, %[r]\n\t"
119495 #else
119496         "adc	r5, %[r]\n\t"
119497 #endif
119498 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119499         "lsrs	r6, %[a], #16\n\t"
119500 #else
119501         "lsr	r6, %[a], #16\n\t"
119502 #endif
119503 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119504         "lsrs	r7, %[b], #16\n\t"
119505 #else
119506         "lsr	r7, %[b], #16\n\t"
119507 #endif
119508 #ifdef WOLFSSL_KEIL
119509         "muls	r7, r6, r7\n\t"
119510 #elif defined(__clang__)
119511         "muls	r7, r6\n\t"
119512 #else
119513         "mul	r7, r6\n\t"
119514 #endif
119515 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119516         "adds	r4, r4, r7\n\t"
119517 #else
119518         "add	r4, r4, r7\n\t"
119519 #endif
119520 #ifdef WOLFSSL_KEIL
119521         "adcs	r5, r5, %[r]\n\t"
119522 #elif defined(__clang__)
119523         "adcs	r5, %[r]\n\t"
119524 #else
119525         "adc	r5, %[r]\n\t"
119526 #endif
119527         "uxth	r7, %[b]\n\t"
119528 #ifdef WOLFSSL_KEIL
119529         "muls	r6, r7, r6\n\t"
119530 #elif defined(__clang__)
119531         "muls	r6, r7\n\t"
119532 #else
119533         "mul	r6, r7\n\t"
119534 #endif
119535 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119536         "lsrs	r7, r6, #16\n\t"
119537 #else
119538         "lsr	r7, r6, #16\n\t"
119539 #endif
119540 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119541         "lsls	r6, r6, #16\n\t"
119542 #else
119543         "lsl	r6, r6, #16\n\t"
119544 #endif
119545 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119546         "adds	r3, r3, r6\n\t"
119547 #else
119548         "add	r3, r3, r6\n\t"
119549 #endif
119550 #ifdef WOLFSSL_KEIL
119551         "adcs	r4, r4, r7\n\t"
119552 #elif defined(__clang__)
119553         "adcs	r4, r7\n\t"
119554 #else
119555         "adc	r4, r7\n\t"
119556 #endif
119557 #ifdef WOLFSSL_KEIL
119558         "adcs	r5, r5, %[r]\n\t"
119559 #elif defined(__clang__)
119560         "adcs	r5, %[r]\n\t"
119561 #else
119562         "adc	r5, %[r]\n\t"
119563 #endif
119564         "str	r3, [sp, #12]\n\t"
119565         "#  A[4] * B[0]\n\t"
119566         "movs	r3, #0\n\t"
119567         "mov	%[a], r9\n\t"
119568         "mov	%[b], r10\n\t"
119569         "ldr	%[a], [%[a], #16]\n\t"
119570         "ldr	%[b], [%[b]]\n\t"
119571         "uxth	r6, %[a]\n\t"
119572         "uxth	r7, %[b]\n\t"
119573 #ifdef WOLFSSL_KEIL
119574         "muls	r7, r6, r7\n\t"
119575 #elif defined(__clang__)
119576         "muls	r7, r6\n\t"
119577 #else
119578         "mul	r7, r6\n\t"
119579 #endif
119580 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119581         "adds	r4, r4, r7\n\t"
119582 #else
119583         "add	r4, r4, r7\n\t"
119584 #endif
119585 #ifdef WOLFSSL_KEIL
119586         "adcs	r5, r5, %[r]\n\t"
119587 #elif defined(__clang__)
119588         "adcs	r5, %[r]\n\t"
119589 #else
119590         "adc	r5, %[r]\n\t"
119591 #endif
119592 #ifdef WOLFSSL_KEIL
119593         "adcs	r3, r3, %[r]\n\t"
119594 #elif defined(__clang__)
119595         "adcs	r3, %[r]\n\t"
119596 #else
119597         "adc	r3, %[r]\n\t"
119598 #endif
119599 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119600         "lsrs	r7, %[b], #16\n\t"
119601 #else
119602         "lsr	r7, %[b], #16\n\t"
119603 #endif
119604 #ifdef WOLFSSL_KEIL
119605         "muls	r6, r7, r6\n\t"
119606 #elif defined(__clang__)
119607         "muls	r6, r7\n\t"
119608 #else
119609         "mul	r6, r7\n\t"
119610 #endif
119611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119612         "lsrs	r7, r6, #16\n\t"
119613 #else
119614         "lsr	r7, r6, #16\n\t"
119615 #endif
119616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119617         "lsls	r6, r6, #16\n\t"
119618 #else
119619         "lsl	r6, r6, #16\n\t"
119620 #endif
119621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119622         "adds	r4, r4, r6\n\t"
119623 #else
119624         "add	r4, r4, r6\n\t"
119625 #endif
119626 #ifdef WOLFSSL_KEIL
119627         "adcs	r5, r5, r7\n\t"
119628 #elif defined(__clang__)
119629         "adcs	r5, r7\n\t"
119630 #else
119631         "adc	r5, r7\n\t"
119632 #endif
119633 #ifdef WOLFSSL_KEIL
119634         "adcs	r3, r3, %[r]\n\t"
119635 #elif defined(__clang__)
119636         "adcs	r3, %[r]\n\t"
119637 #else
119638         "adc	r3, %[r]\n\t"
119639 #endif
119640 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119641         "lsrs	r6, %[a], #16\n\t"
119642 #else
119643         "lsr	r6, %[a], #16\n\t"
119644 #endif
119645 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119646         "lsrs	r7, %[b], #16\n\t"
119647 #else
119648         "lsr	r7, %[b], #16\n\t"
119649 #endif
119650 #ifdef WOLFSSL_KEIL
119651         "muls	r7, r6, r7\n\t"
119652 #elif defined(__clang__)
119653         "muls	r7, r6\n\t"
119654 #else
119655         "mul	r7, r6\n\t"
119656 #endif
119657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119658         "adds	r5, r5, r7\n\t"
119659 #else
119660         "add	r5, r5, r7\n\t"
119661 #endif
119662 #ifdef WOLFSSL_KEIL
119663         "adcs	r3, r3, %[r]\n\t"
119664 #elif defined(__clang__)
119665         "adcs	r3, %[r]\n\t"
119666 #else
119667         "adc	r3, %[r]\n\t"
119668 #endif
119669         "uxth	r7, %[b]\n\t"
119670 #ifdef WOLFSSL_KEIL
119671         "muls	r6, r7, r6\n\t"
119672 #elif defined(__clang__)
119673         "muls	r6, r7\n\t"
119674 #else
119675         "mul	r6, r7\n\t"
119676 #endif
119677 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119678         "lsrs	r7, r6, #16\n\t"
119679 #else
119680         "lsr	r7, r6, #16\n\t"
119681 #endif
119682 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119683         "lsls	r6, r6, #16\n\t"
119684 #else
119685         "lsl	r6, r6, #16\n\t"
119686 #endif
119687 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119688         "adds	r4, r4, r6\n\t"
119689 #else
119690         "add	r4, r4, r6\n\t"
119691 #endif
119692 #ifdef WOLFSSL_KEIL
119693         "adcs	r5, r5, r7\n\t"
119694 #elif defined(__clang__)
119695         "adcs	r5, r7\n\t"
119696 #else
119697         "adc	r5, r7\n\t"
119698 #endif
119699 #ifdef WOLFSSL_KEIL
119700         "adcs	r3, r3, %[r]\n\t"
119701 #elif defined(__clang__)
119702         "adcs	r3, %[r]\n\t"
119703 #else
119704         "adc	r3, %[r]\n\t"
119705 #endif
119706         "#  A[3] * B[1]\n\t"
119707         "mov	%[a], r9\n\t"
119708         "mov	%[b], r10\n\t"
119709         "ldr	%[a], [%[a], #12]\n\t"
119710         "ldr	%[b], [%[b], #4]\n\t"
119711         "uxth	r6, %[a]\n\t"
119712         "uxth	r7, %[b]\n\t"
119713 #ifdef WOLFSSL_KEIL
119714         "muls	r7, r6, r7\n\t"
119715 #elif defined(__clang__)
119716         "muls	r7, r6\n\t"
119717 #else
119718         "mul	r7, r6\n\t"
119719 #endif
119720 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119721         "adds	r4, r4, r7\n\t"
119722 #else
119723         "add	r4, r4, r7\n\t"
119724 #endif
119725 #ifdef WOLFSSL_KEIL
119726         "adcs	r5, r5, %[r]\n\t"
119727 #elif defined(__clang__)
119728         "adcs	r5, %[r]\n\t"
119729 #else
119730         "adc	r5, %[r]\n\t"
119731 #endif
119732 #ifdef WOLFSSL_KEIL
119733         "adcs	r3, r3, %[r]\n\t"
119734 #elif defined(__clang__)
119735         "adcs	r3, %[r]\n\t"
119736 #else
119737         "adc	r3, %[r]\n\t"
119738 #endif
119739 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119740         "lsrs	r7, %[b], #16\n\t"
119741 #else
119742         "lsr	r7, %[b], #16\n\t"
119743 #endif
119744 #ifdef WOLFSSL_KEIL
119745         "muls	r6, r7, r6\n\t"
119746 #elif defined(__clang__)
119747         "muls	r6, r7\n\t"
119748 #else
119749         "mul	r6, r7\n\t"
119750 #endif
119751 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119752         "lsrs	r7, r6, #16\n\t"
119753 #else
119754         "lsr	r7, r6, #16\n\t"
119755 #endif
119756 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119757         "lsls	r6, r6, #16\n\t"
119758 #else
119759         "lsl	r6, r6, #16\n\t"
119760 #endif
119761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119762         "adds	r4, r4, r6\n\t"
119763 #else
119764         "add	r4, r4, r6\n\t"
119765 #endif
119766 #ifdef WOLFSSL_KEIL
119767         "adcs	r5, r5, r7\n\t"
119768 #elif defined(__clang__)
119769         "adcs	r5, r7\n\t"
119770 #else
119771         "adc	r5, r7\n\t"
119772 #endif
119773 #ifdef WOLFSSL_KEIL
119774         "adcs	r3, r3, %[r]\n\t"
119775 #elif defined(__clang__)
119776         "adcs	r3, %[r]\n\t"
119777 #else
119778         "adc	r3, %[r]\n\t"
119779 #endif
119780 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119781         "lsrs	r6, %[a], #16\n\t"
119782 #else
119783         "lsr	r6, %[a], #16\n\t"
119784 #endif
119785 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119786         "lsrs	r7, %[b], #16\n\t"
119787 #else
119788         "lsr	r7, %[b], #16\n\t"
119789 #endif
119790 #ifdef WOLFSSL_KEIL
119791         "muls	r7, r6, r7\n\t"
119792 #elif defined(__clang__)
119793         "muls	r7, r6\n\t"
119794 #else
119795         "mul	r7, r6\n\t"
119796 #endif
119797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119798         "adds	r5, r5, r7\n\t"
119799 #else
119800         "add	r5, r5, r7\n\t"
119801 #endif
119802 #ifdef WOLFSSL_KEIL
119803         "adcs	r3, r3, %[r]\n\t"
119804 #elif defined(__clang__)
119805         "adcs	r3, %[r]\n\t"
119806 #else
119807         "adc	r3, %[r]\n\t"
119808 #endif
119809         "uxth	r7, %[b]\n\t"
119810 #ifdef WOLFSSL_KEIL
119811         "muls	r6, r7, r6\n\t"
119812 #elif defined(__clang__)
119813         "muls	r6, r7\n\t"
119814 #else
119815         "mul	r6, r7\n\t"
119816 #endif
119817 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119818         "lsrs	r7, r6, #16\n\t"
119819 #else
119820         "lsr	r7, r6, #16\n\t"
119821 #endif
119822 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119823         "lsls	r6, r6, #16\n\t"
119824 #else
119825         "lsl	r6, r6, #16\n\t"
119826 #endif
119827 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119828         "adds	r4, r4, r6\n\t"
119829 #else
119830         "add	r4, r4, r6\n\t"
119831 #endif
119832 #ifdef WOLFSSL_KEIL
119833         "adcs	r5, r5, r7\n\t"
119834 #elif defined(__clang__)
119835         "adcs	r5, r7\n\t"
119836 #else
119837         "adc	r5, r7\n\t"
119838 #endif
119839 #ifdef WOLFSSL_KEIL
119840         "adcs	r3, r3, %[r]\n\t"
119841 #elif defined(__clang__)
119842         "adcs	r3, %[r]\n\t"
119843 #else
119844         "adc	r3, %[r]\n\t"
119845 #endif
119846         "#  A[2] * B[2]\n\t"
119847         "mov	%[a], r9\n\t"
119848         "mov	%[b], r10\n\t"
119849         "ldr	%[a], [%[a], #8]\n\t"
119850         "ldr	%[b], [%[b], #8]\n\t"
119851         "uxth	r6, %[a]\n\t"
119852         "uxth	r7, %[b]\n\t"
119853 #ifdef WOLFSSL_KEIL
119854         "muls	r7, r6, r7\n\t"
119855 #elif defined(__clang__)
119856         "muls	r7, r6\n\t"
119857 #else
119858         "mul	r7, r6\n\t"
119859 #endif
119860 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119861         "adds	r4, r4, r7\n\t"
119862 #else
119863         "add	r4, r4, r7\n\t"
119864 #endif
119865 #ifdef WOLFSSL_KEIL
119866         "adcs	r5, r5, %[r]\n\t"
119867 #elif defined(__clang__)
119868         "adcs	r5, %[r]\n\t"
119869 #else
119870         "adc	r5, %[r]\n\t"
119871 #endif
119872 #ifdef WOLFSSL_KEIL
119873         "adcs	r3, r3, %[r]\n\t"
119874 #elif defined(__clang__)
119875         "adcs	r3, %[r]\n\t"
119876 #else
119877         "adc	r3, %[r]\n\t"
119878 #endif
119879 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119880         "lsrs	r7, %[b], #16\n\t"
119881 #else
119882         "lsr	r7, %[b], #16\n\t"
119883 #endif
119884 #ifdef WOLFSSL_KEIL
119885         "muls	r6, r7, r6\n\t"
119886 #elif defined(__clang__)
119887         "muls	r6, r7\n\t"
119888 #else
119889         "mul	r6, r7\n\t"
119890 #endif
119891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119892         "lsrs	r7, r6, #16\n\t"
119893 #else
119894         "lsr	r7, r6, #16\n\t"
119895 #endif
119896 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119897         "lsls	r6, r6, #16\n\t"
119898 #else
119899         "lsl	r6, r6, #16\n\t"
119900 #endif
119901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119902         "adds	r4, r4, r6\n\t"
119903 #else
119904         "add	r4, r4, r6\n\t"
119905 #endif
119906 #ifdef WOLFSSL_KEIL
119907         "adcs	r5, r5, r7\n\t"
119908 #elif defined(__clang__)
119909         "adcs	r5, r7\n\t"
119910 #else
119911         "adc	r5, r7\n\t"
119912 #endif
119913 #ifdef WOLFSSL_KEIL
119914         "adcs	r3, r3, %[r]\n\t"
119915 #elif defined(__clang__)
119916         "adcs	r3, %[r]\n\t"
119917 #else
119918         "adc	r3, %[r]\n\t"
119919 #endif
119920 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119921         "lsrs	r6, %[a], #16\n\t"
119922 #else
119923         "lsr	r6, %[a], #16\n\t"
119924 #endif
119925 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119926         "lsrs	r7, %[b], #16\n\t"
119927 #else
119928         "lsr	r7, %[b], #16\n\t"
119929 #endif
119930 #ifdef WOLFSSL_KEIL
119931         "muls	r7, r6, r7\n\t"
119932 #elif defined(__clang__)
119933         "muls	r7, r6\n\t"
119934 #else
119935         "mul	r7, r6\n\t"
119936 #endif
119937 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119938         "adds	r5, r5, r7\n\t"
119939 #else
119940         "add	r5, r5, r7\n\t"
119941 #endif
119942 #ifdef WOLFSSL_KEIL
119943         "adcs	r3, r3, %[r]\n\t"
119944 #elif defined(__clang__)
119945         "adcs	r3, %[r]\n\t"
119946 #else
119947         "adc	r3, %[r]\n\t"
119948 #endif
119949         "uxth	r7, %[b]\n\t"
119950 #ifdef WOLFSSL_KEIL
119951         "muls	r6, r7, r6\n\t"
119952 #elif defined(__clang__)
119953         "muls	r6, r7\n\t"
119954 #else
119955         "mul	r6, r7\n\t"
119956 #endif
119957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119958         "lsrs	r7, r6, #16\n\t"
119959 #else
119960         "lsr	r7, r6, #16\n\t"
119961 #endif
119962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119963         "lsls	r6, r6, #16\n\t"
119964 #else
119965         "lsl	r6, r6, #16\n\t"
119966 #endif
119967 #if defined(__clang__) || defined(WOLFSSL_KEIL)
119968         "adds	r4, r4, r6\n\t"
119969 #else
119970         "add	r4, r4, r6\n\t"
119971 #endif
119972 #ifdef WOLFSSL_KEIL
119973         "adcs	r5, r5, r7\n\t"
119974 #elif defined(__clang__)
119975         "adcs	r5, r7\n\t"
119976 #else
119977         "adc	r5, r7\n\t"
119978 #endif
119979 #ifdef WOLFSSL_KEIL
119980         "adcs	r3, r3, %[r]\n\t"
119981 #elif defined(__clang__)
119982         "adcs	r3, %[r]\n\t"
119983 #else
119984         "adc	r3, %[r]\n\t"
119985 #endif
119986         "#  A[1] * B[3]\n\t"
119987         "mov	%[a], r9\n\t"
119988         "mov	%[b], r10\n\t"
119989         "ldr	%[a], [%[a], #4]\n\t"
119990         "ldr	%[b], [%[b], #12]\n\t"
119991         "uxth	r6, %[a]\n\t"
119992         "uxth	r7, %[b]\n\t"
119993 #ifdef WOLFSSL_KEIL
119994         "muls	r7, r6, r7\n\t"
119995 #elif defined(__clang__)
119996         "muls	r7, r6\n\t"
119997 #else
119998         "mul	r7, r6\n\t"
119999 #endif
120000 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120001         "adds	r4, r4, r7\n\t"
120002 #else
120003         "add	r4, r4, r7\n\t"
120004 #endif
120005 #ifdef WOLFSSL_KEIL
120006         "adcs	r5, r5, %[r]\n\t"
120007 #elif defined(__clang__)
120008         "adcs	r5, %[r]\n\t"
120009 #else
120010         "adc	r5, %[r]\n\t"
120011 #endif
120012 #ifdef WOLFSSL_KEIL
120013         "adcs	r3, r3, %[r]\n\t"
120014 #elif defined(__clang__)
120015         "adcs	r3, %[r]\n\t"
120016 #else
120017         "adc	r3, %[r]\n\t"
120018 #endif
120019 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120020         "lsrs	r7, %[b], #16\n\t"
120021 #else
120022         "lsr	r7, %[b], #16\n\t"
120023 #endif
120024 #ifdef WOLFSSL_KEIL
120025         "muls	r6, r7, r6\n\t"
120026 #elif defined(__clang__)
120027         "muls	r6, r7\n\t"
120028 #else
120029         "mul	r6, r7\n\t"
120030 #endif
120031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120032         "lsrs	r7, r6, #16\n\t"
120033 #else
120034         "lsr	r7, r6, #16\n\t"
120035 #endif
120036 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120037         "lsls	r6, r6, #16\n\t"
120038 #else
120039         "lsl	r6, r6, #16\n\t"
120040 #endif
120041 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120042         "adds	r4, r4, r6\n\t"
120043 #else
120044         "add	r4, r4, r6\n\t"
120045 #endif
120046 #ifdef WOLFSSL_KEIL
120047         "adcs	r5, r5, r7\n\t"
120048 #elif defined(__clang__)
120049         "adcs	r5, r7\n\t"
120050 #else
120051         "adc	r5, r7\n\t"
120052 #endif
120053 #ifdef WOLFSSL_KEIL
120054         "adcs	r3, r3, %[r]\n\t"
120055 #elif defined(__clang__)
120056         "adcs	r3, %[r]\n\t"
120057 #else
120058         "adc	r3, %[r]\n\t"
120059 #endif
120060 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120061         "lsrs	r6, %[a], #16\n\t"
120062 #else
120063         "lsr	r6, %[a], #16\n\t"
120064 #endif
120065 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120066         "lsrs	r7, %[b], #16\n\t"
120067 #else
120068         "lsr	r7, %[b], #16\n\t"
120069 #endif
120070 #ifdef WOLFSSL_KEIL
120071         "muls	r7, r6, r7\n\t"
120072 #elif defined(__clang__)
120073         "muls	r7, r6\n\t"
120074 #else
120075         "mul	r7, r6\n\t"
120076 #endif
120077 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120078         "adds	r5, r5, r7\n\t"
120079 #else
120080         "add	r5, r5, r7\n\t"
120081 #endif
120082 #ifdef WOLFSSL_KEIL
120083         "adcs	r3, r3, %[r]\n\t"
120084 #elif defined(__clang__)
120085         "adcs	r3, %[r]\n\t"
120086 #else
120087         "adc	r3, %[r]\n\t"
120088 #endif
120089         "uxth	r7, %[b]\n\t"
120090 #ifdef WOLFSSL_KEIL
120091         "muls	r6, r7, r6\n\t"
120092 #elif defined(__clang__)
120093         "muls	r6, r7\n\t"
120094 #else
120095         "mul	r6, r7\n\t"
120096 #endif
120097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120098         "lsrs	r7, r6, #16\n\t"
120099 #else
120100         "lsr	r7, r6, #16\n\t"
120101 #endif
120102 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120103         "lsls	r6, r6, #16\n\t"
120104 #else
120105         "lsl	r6, r6, #16\n\t"
120106 #endif
120107 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120108         "adds	r4, r4, r6\n\t"
120109 #else
120110         "add	r4, r4, r6\n\t"
120111 #endif
120112 #ifdef WOLFSSL_KEIL
120113         "adcs	r5, r5, r7\n\t"
120114 #elif defined(__clang__)
120115         "adcs	r5, r7\n\t"
120116 #else
120117         "adc	r5, r7\n\t"
120118 #endif
120119 #ifdef WOLFSSL_KEIL
120120         "adcs	r3, r3, %[r]\n\t"
120121 #elif defined(__clang__)
120122         "adcs	r3, %[r]\n\t"
120123 #else
120124         "adc	r3, %[r]\n\t"
120125 #endif
120126         "#  A[0] * B[4]\n\t"
120127         "mov	%[a], r9\n\t"
120128         "mov	%[b], r10\n\t"
120129         "ldr	%[a], [%[a]]\n\t"
120130         "ldr	%[b], [%[b], #16]\n\t"
120131         "uxth	r6, %[a]\n\t"
120132         "uxth	r7, %[b]\n\t"
120133 #ifdef WOLFSSL_KEIL
120134         "muls	r7, r6, r7\n\t"
120135 #elif defined(__clang__)
120136         "muls	r7, r6\n\t"
120137 #else
120138         "mul	r7, r6\n\t"
120139 #endif
120140 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120141         "adds	r4, r4, r7\n\t"
120142 #else
120143         "add	r4, r4, r7\n\t"
120144 #endif
120145 #ifdef WOLFSSL_KEIL
120146         "adcs	r5, r5, %[r]\n\t"
120147 #elif defined(__clang__)
120148         "adcs	r5, %[r]\n\t"
120149 #else
120150         "adc	r5, %[r]\n\t"
120151 #endif
120152 #ifdef WOLFSSL_KEIL
120153         "adcs	r3, r3, %[r]\n\t"
120154 #elif defined(__clang__)
120155         "adcs	r3, %[r]\n\t"
120156 #else
120157         "adc	r3, %[r]\n\t"
120158 #endif
120159 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120160         "lsrs	r7, %[b], #16\n\t"
120161 #else
120162         "lsr	r7, %[b], #16\n\t"
120163 #endif
120164 #ifdef WOLFSSL_KEIL
120165         "muls	r6, r7, r6\n\t"
120166 #elif defined(__clang__)
120167         "muls	r6, r7\n\t"
120168 #else
120169         "mul	r6, r7\n\t"
120170 #endif
120171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120172         "lsrs	r7, r6, #16\n\t"
120173 #else
120174         "lsr	r7, r6, #16\n\t"
120175 #endif
120176 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120177         "lsls	r6, r6, #16\n\t"
120178 #else
120179         "lsl	r6, r6, #16\n\t"
120180 #endif
120181 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120182         "adds	r4, r4, r6\n\t"
120183 #else
120184         "add	r4, r4, r6\n\t"
120185 #endif
120186 #ifdef WOLFSSL_KEIL
120187         "adcs	r5, r5, r7\n\t"
120188 #elif defined(__clang__)
120189         "adcs	r5, r7\n\t"
120190 #else
120191         "adc	r5, r7\n\t"
120192 #endif
120193 #ifdef WOLFSSL_KEIL
120194         "adcs	r3, r3, %[r]\n\t"
120195 #elif defined(__clang__)
120196         "adcs	r3, %[r]\n\t"
120197 #else
120198         "adc	r3, %[r]\n\t"
120199 #endif
120200 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120201         "lsrs	r6, %[a], #16\n\t"
120202 #else
120203         "lsr	r6, %[a], #16\n\t"
120204 #endif
120205 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120206         "lsrs	r7, %[b], #16\n\t"
120207 #else
120208         "lsr	r7, %[b], #16\n\t"
120209 #endif
120210 #ifdef WOLFSSL_KEIL
120211         "muls	r7, r6, r7\n\t"
120212 #elif defined(__clang__)
120213         "muls	r7, r6\n\t"
120214 #else
120215         "mul	r7, r6\n\t"
120216 #endif
120217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120218         "adds	r5, r5, r7\n\t"
120219 #else
120220         "add	r5, r5, r7\n\t"
120221 #endif
120222 #ifdef WOLFSSL_KEIL
120223         "adcs	r3, r3, %[r]\n\t"
120224 #elif defined(__clang__)
120225         "adcs	r3, %[r]\n\t"
120226 #else
120227         "adc	r3, %[r]\n\t"
120228 #endif
120229         "uxth	r7, %[b]\n\t"
120230 #ifdef WOLFSSL_KEIL
120231         "muls	r6, r7, r6\n\t"
120232 #elif defined(__clang__)
120233         "muls	r6, r7\n\t"
120234 #else
120235         "mul	r6, r7\n\t"
120236 #endif
120237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120238         "lsrs	r7, r6, #16\n\t"
120239 #else
120240         "lsr	r7, r6, #16\n\t"
120241 #endif
120242 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120243         "lsls	r6, r6, #16\n\t"
120244 #else
120245         "lsl	r6, r6, #16\n\t"
120246 #endif
120247 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120248         "adds	r4, r4, r6\n\t"
120249 #else
120250         "add	r4, r4, r6\n\t"
120251 #endif
120252 #ifdef WOLFSSL_KEIL
120253         "adcs	r5, r5, r7\n\t"
120254 #elif defined(__clang__)
120255         "adcs	r5, r7\n\t"
120256 #else
120257         "adc	r5, r7\n\t"
120258 #endif
120259 #ifdef WOLFSSL_KEIL
120260         "adcs	r3, r3, %[r]\n\t"
120261 #elif defined(__clang__)
120262         "adcs	r3, %[r]\n\t"
120263 #else
120264         "adc	r3, %[r]\n\t"
120265 #endif
120266         "str	r4, [sp, #16]\n\t"
120267         "#  A[0] * B[5]\n\t"
120268         "movs	r4, #0\n\t"
120269         "mov	%[a], r9\n\t"
120270         "mov	%[b], r10\n\t"
120271         "ldr	%[a], [%[a]]\n\t"
120272         "ldr	%[b], [%[b], #20]\n\t"
120273         "uxth	r6, %[a]\n\t"
120274         "uxth	r7, %[b]\n\t"
120275 #ifdef WOLFSSL_KEIL
120276         "muls	r7, r6, r7\n\t"
120277 #elif defined(__clang__)
120278         "muls	r7, r6\n\t"
120279 #else
120280         "mul	r7, r6\n\t"
120281 #endif
120282 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120283         "adds	r5, r5, r7\n\t"
120284 #else
120285         "add	r5, r5, r7\n\t"
120286 #endif
120287 #ifdef WOLFSSL_KEIL
120288         "adcs	r3, r3, %[r]\n\t"
120289 #elif defined(__clang__)
120290         "adcs	r3, %[r]\n\t"
120291 #else
120292         "adc	r3, %[r]\n\t"
120293 #endif
120294 #ifdef WOLFSSL_KEIL
120295         "adcs	r4, r4, %[r]\n\t"
120296 #elif defined(__clang__)
120297         "adcs	r4, %[r]\n\t"
120298 #else
120299         "adc	r4, %[r]\n\t"
120300 #endif
120301 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120302         "lsrs	r7, %[b], #16\n\t"
120303 #else
120304         "lsr	r7, %[b], #16\n\t"
120305 #endif
120306 #ifdef WOLFSSL_KEIL
120307         "muls	r6, r7, r6\n\t"
120308 #elif defined(__clang__)
120309         "muls	r6, r7\n\t"
120310 #else
120311         "mul	r6, r7\n\t"
120312 #endif
120313 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120314         "lsrs	r7, r6, #16\n\t"
120315 #else
120316         "lsr	r7, r6, #16\n\t"
120317 #endif
120318 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120319         "lsls	r6, r6, #16\n\t"
120320 #else
120321         "lsl	r6, r6, #16\n\t"
120322 #endif
120323 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120324         "adds	r5, r5, r6\n\t"
120325 #else
120326         "add	r5, r5, r6\n\t"
120327 #endif
120328 #ifdef WOLFSSL_KEIL
120329         "adcs	r3, r3, r7\n\t"
120330 #elif defined(__clang__)
120331         "adcs	r3, r7\n\t"
120332 #else
120333         "adc	r3, r7\n\t"
120334 #endif
120335 #ifdef WOLFSSL_KEIL
120336         "adcs	r4, r4, %[r]\n\t"
120337 #elif defined(__clang__)
120338         "adcs	r4, %[r]\n\t"
120339 #else
120340         "adc	r4, %[r]\n\t"
120341 #endif
120342 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120343         "lsrs	r6, %[a], #16\n\t"
120344 #else
120345         "lsr	r6, %[a], #16\n\t"
120346 #endif
120347 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120348         "lsrs	r7, %[b], #16\n\t"
120349 #else
120350         "lsr	r7, %[b], #16\n\t"
120351 #endif
120352 #ifdef WOLFSSL_KEIL
120353         "muls	r7, r6, r7\n\t"
120354 #elif defined(__clang__)
120355         "muls	r7, r6\n\t"
120356 #else
120357         "mul	r7, r6\n\t"
120358 #endif
120359 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120360         "adds	r3, r3, r7\n\t"
120361 #else
120362         "add	r3, r3, r7\n\t"
120363 #endif
120364 #ifdef WOLFSSL_KEIL
120365         "adcs	r4, r4, %[r]\n\t"
120366 #elif defined(__clang__)
120367         "adcs	r4, %[r]\n\t"
120368 #else
120369         "adc	r4, %[r]\n\t"
120370 #endif
120371         "uxth	r7, %[b]\n\t"
120372 #ifdef WOLFSSL_KEIL
120373         "muls	r6, r7, r6\n\t"
120374 #elif defined(__clang__)
120375         "muls	r6, r7\n\t"
120376 #else
120377         "mul	r6, r7\n\t"
120378 #endif
120379 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120380         "lsrs	r7, r6, #16\n\t"
120381 #else
120382         "lsr	r7, r6, #16\n\t"
120383 #endif
120384 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120385         "lsls	r6, r6, #16\n\t"
120386 #else
120387         "lsl	r6, r6, #16\n\t"
120388 #endif
120389 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120390         "adds	r5, r5, r6\n\t"
120391 #else
120392         "add	r5, r5, r6\n\t"
120393 #endif
120394 #ifdef WOLFSSL_KEIL
120395         "adcs	r3, r3, r7\n\t"
120396 #elif defined(__clang__)
120397         "adcs	r3, r7\n\t"
120398 #else
120399         "adc	r3, r7\n\t"
120400 #endif
120401 #ifdef WOLFSSL_KEIL
120402         "adcs	r4, r4, %[r]\n\t"
120403 #elif defined(__clang__)
120404         "adcs	r4, %[r]\n\t"
120405 #else
120406         "adc	r4, %[r]\n\t"
120407 #endif
120408         "#  A[1] * B[4]\n\t"
120409         "mov	%[a], r9\n\t"
120410         "mov	%[b], r10\n\t"
120411         "ldr	%[a], [%[a], #4]\n\t"
120412         "ldr	%[b], [%[b], #16]\n\t"
120413         "uxth	r6, %[a]\n\t"
120414         "uxth	r7, %[b]\n\t"
120415 #ifdef WOLFSSL_KEIL
120416         "muls	r7, r6, r7\n\t"
120417 #elif defined(__clang__)
120418         "muls	r7, r6\n\t"
120419 #else
120420         "mul	r7, r6\n\t"
120421 #endif
120422 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120423         "adds	r5, r5, r7\n\t"
120424 #else
120425         "add	r5, r5, r7\n\t"
120426 #endif
120427 #ifdef WOLFSSL_KEIL
120428         "adcs	r3, r3, %[r]\n\t"
120429 #elif defined(__clang__)
120430         "adcs	r3, %[r]\n\t"
120431 #else
120432         "adc	r3, %[r]\n\t"
120433 #endif
120434 #ifdef WOLFSSL_KEIL
120435         "adcs	r4, r4, %[r]\n\t"
120436 #elif defined(__clang__)
120437         "adcs	r4, %[r]\n\t"
120438 #else
120439         "adc	r4, %[r]\n\t"
120440 #endif
120441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120442         "lsrs	r7, %[b], #16\n\t"
120443 #else
120444         "lsr	r7, %[b], #16\n\t"
120445 #endif
120446 #ifdef WOLFSSL_KEIL
120447         "muls	r6, r7, r6\n\t"
120448 #elif defined(__clang__)
120449         "muls	r6, r7\n\t"
120450 #else
120451         "mul	r6, r7\n\t"
120452 #endif
120453 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120454         "lsrs	r7, r6, #16\n\t"
120455 #else
120456         "lsr	r7, r6, #16\n\t"
120457 #endif
120458 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120459         "lsls	r6, r6, #16\n\t"
120460 #else
120461         "lsl	r6, r6, #16\n\t"
120462 #endif
120463 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120464         "adds	r5, r5, r6\n\t"
120465 #else
120466         "add	r5, r5, r6\n\t"
120467 #endif
120468 #ifdef WOLFSSL_KEIL
120469         "adcs	r3, r3, r7\n\t"
120470 #elif defined(__clang__)
120471         "adcs	r3, r7\n\t"
120472 #else
120473         "adc	r3, r7\n\t"
120474 #endif
120475 #ifdef WOLFSSL_KEIL
120476         "adcs	r4, r4, %[r]\n\t"
120477 #elif defined(__clang__)
120478         "adcs	r4, %[r]\n\t"
120479 #else
120480         "adc	r4, %[r]\n\t"
120481 #endif
120482 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120483         "lsrs	r6, %[a], #16\n\t"
120484 #else
120485         "lsr	r6, %[a], #16\n\t"
120486 #endif
120487 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120488         "lsrs	r7, %[b], #16\n\t"
120489 #else
120490         "lsr	r7, %[b], #16\n\t"
120491 #endif
120492 #ifdef WOLFSSL_KEIL
120493         "muls	r7, r6, r7\n\t"
120494 #elif defined(__clang__)
120495         "muls	r7, r6\n\t"
120496 #else
120497         "mul	r7, r6\n\t"
120498 #endif
120499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120500         "adds	r3, r3, r7\n\t"
120501 #else
120502         "add	r3, r3, r7\n\t"
120503 #endif
120504 #ifdef WOLFSSL_KEIL
120505         "adcs	r4, r4, %[r]\n\t"
120506 #elif defined(__clang__)
120507         "adcs	r4, %[r]\n\t"
120508 #else
120509         "adc	r4, %[r]\n\t"
120510 #endif
120511         "uxth	r7, %[b]\n\t"
120512 #ifdef WOLFSSL_KEIL
120513         "muls	r6, r7, r6\n\t"
120514 #elif defined(__clang__)
120515         "muls	r6, r7\n\t"
120516 #else
120517         "mul	r6, r7\n\t"
120518 #endif
120519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120520         "lsrs	r7, r6, #16\n\t"
120521 #else
120522         "lsr	r7, r6, #16\n\t"
120523 #endif
120524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120525         "lsls	r6, r6, #16\n\t"
120526 #else
120527         "lsl	r6, r6, #16\n\t"
120528 #endif
120529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120530         "adds	r5, r5, r6\n\t"
120531 #else
120532         "add	r5, r5, r6\n\t"
120533 #endif
120534 #ifdef WOLFSSL_KEIL
120535         "adcs	r3, r3, r7\n\t"
120536 #elif defined(__clang__)
120537         "adcs	r3, r7\n\t"
120538 #else
120539         "adc	r3, r7\n\t"
120540 #endif
120541 #ifdef WOLFSSL_KEIL
120542         "adcs	r4, r4, %[r]\n\t"
120543 #elif defined(__clang__)
120544         "adcs	r4, %[r]\n\t"
120545 #else
120546         "adc	r4, %[r]\n\t"
120547 #endif
120548         "#  A[2] * B[3]\n\t"
120549         "mov	%[a], r9\n\t"
120550         "mov	%[b], r10\n\t"
120551         "ldr	%[a], [%[a], #8]\n\t"
120552         "ldr	%[b], [%[b], #12]\n\t"
120553         "uxth	r6, %[a]\n\t"
120554         "uxth	r7, %[b]\n\t"
120555 #ifdef WOLFSSL_KEIL
120556         "muls	r7, r6, r7\n\t"
120557 #elif defined(__clang__)
120558         "muls	r7, r6\n\t"
120559 #else
120560         "mul	r7, r6\n\t"
120561 #endif
120562 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120563         "adds	r5, r5, r7\n\t"
120564 #else
120565         "add	r5, r5, r7\n\t"
120566 #endif
120567 #ifdef WOLFSSL_KEIL
120568         "adcs	r3, r3, %[r]\n\t"
120569 #elif defined(__clang__)
120570         "adcs	r3, %[r]\n\t"
120571 #else
120572         "adc	r3, %[r]\n\t"
120573 #endif
120574 #ifdef WOLFSSL_KEIL
120575         "adcs	r4, r4, %[r]\n\t"
120576 #elif defined(__clang__)
120577         "adcs	r4, %[r]\n\t"
120578 #else
120579         "adc	r4, %[r]\n\t"
120580 #endif
120581 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120582         "lsrs	r7, %[b], #16\n\t"
120583 #else
120584         "lsr	r7, %[b], #16\n\t"
120585 #endif
120586 #ifdef WOLFSSL_KEIL
120587         "muls	r6, r7, r6\n\t"
120588 #elif defined(__clang__)
120589         "muls	r6, r7\n\t"
120590 #else
120591         "mul	r6, r7\n\t"
120592 #endif
120593 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120594         "lsrs	r7, r6, #16\n\t"
120595 #else
120596         "lsr	r7, r6, #16\n\t"
120597 #endif
120598 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120599         "lsls	r6, r6, #16\n\t"
120600 #else
120601         "lsl	r6, r6, #16\n\t"
120602 #endif
120603 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120604         "adds	r5, r5, r6\n\t"
120605 #else
120606         "add	r5, r5, r6\n\t"
120607 #endif
120608 #ifdef WOLFSSL_KEIL
120609         "adcs	r3, r3, r7\n\t"
120610 #elif defined(__clang__)
120611         "adcs	r3, r7\n\t"
120612 #else
120613         "adc	r3, r7\n\t"
120614 #endif
120615 #ifdef WOLFSSL_KEIL
120616         "adcs	r4, r4, %[r]\n\t"
120617 #elif defined(__clang__)
120618         "adcs	r4, %[r]\n\t"
120619 #else
120620         "adc	r4, %[r]\n\t"
120621 #endif
120622 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120623         "lsrs	r6, %[a], #16\n\t"
120624 #else
120625         "lsr	r6, %[a], #16\n\t"
120626 #endif
120627 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120628         "lsrs	r7, %[b], #16\n\t"
120629 #else
120630         "lsr	r7, %[b], #16\n\t"
120631 #endif
120632 #ifdef WOLFSSL_KEIL
120633         "muls	r7, r6, r7\n\t"
120634 #elif defined(__clang__)
120635         "muls	r7, r6\n\t"
120636 #else
120637         "mul	r7, r6\n\t"
120638 #endif
120639 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120640         "adds	r3, r3, r7\n\t"
120641 #else
120642         "add	r3, r3, r7\n\t"
120643 #endif
120644 #ifdef WOLFSSL_KEIL
120645         "adcs	r4, r4, %[r]\n\t"
120646 #elif defined(__clang__)
120647         "adcs	r4, %[r]\n\t"
120648 #else
120649         "adc	r4, %[r]\n\t"
120650 #endif
120651         "uxth	r7, %[b]\n\t"
120652 #ifdef WOLFSSL_KEIL
120653         "muls	r6, r7, r6\n\t"
120654 #elif defined(__clang__)
120655         "muls	r6, r7\n\t"
120656 #else
120657         "mul	r6, r7\n\t"
120658 #endif
120659 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120660         "lsrs	r7, r6, #16\n\t"
120661 #else
120662         "lsr	r7, r6, #16\n\t"
120663 #endif
120664 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120665         "lsls	r6, r6, #16\n\t"
120666 #else
120667         "lsl	r6, r6, #16\n\t"
120668 #endif
120669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120670         "adds	r5, r5, r6\n\t"
120671 #else
120672         "add	r5, r5, r6\n\t"
120673 #endif
120674 #ifdef WOLFSSL_KEIL
120675         "adcs	r3, r3, r7\n\t"
120676 #elif defined(__clang__)
120677         "adcs	r3, r7\n\t"
120678 #else
120679         "adc	r3, r7\n\t"
120680 #endif
120681 #ifdef WOLFSSL_KEIL
120682         "adcs	r4, r4, %[r]\n\t"
120683 #elif defined(__clang__)
120684         "adcs	r4, %[r]\n\t"
120685 #else
120686         "adc	r4, %[r]\n\t"
120687 #endif
120688         "#  A[3] * B[2]\n\t"
120689         "mov	%[a], r9\n\t"
120690         "mov	%[b], r10\n\t"
120691         "ldr	%[a], [%[a], #12]\n\t"
120692         "ldr	%[b], [%[b], #8]\n\t"
120693         "uxth	r6, %[a]\n\t"
120694         "uxth	r7, %[b]\n\t"
120695 #ifdef WOLFSSL_KEIL
120696         "muls	r7, r6, r7\n\t"
120697 #elif defined(__clang__)
120698         "muls	r7, r6\n\t"
120699 #else
120700         "mul	r7, r6\n\t"
120701 #endif
120702 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120703         "adds	r5, r5, r7\n\t"
120704 #else
120705         "add	r5, r5, r7\n\t"
120706 #endif
120707 #ifdef WOLFSSL_KEIL
120708         "adcs	r3, r3, %[r]\n\t"
120709 #elif defined(__clang__)
120710         "adcs	r3, %[r]\n\t"
120711 #else
120712         "adc	r3, %[r]\n\t"
120713 #endif
120714 #ifdef WOLFSSL_KEIL
120715         "adcs	r4, r4, %[r]\n\t"
120716 #elif defined(__clang__)
120717         "adcs	r4, %[r]\n\t"
120718 #else
120719         "adc	r4, %[r]\n\t"
120720 #endif
120721 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120722         "lsrs	r7, %[b], #16\n\t"
120723 #else
120724         "lsr	r7, %[b], #16\n\t"
120725 #endif
120726 #ifdef WOLFSSL_KEIL
120727         "muls	r6, r7, r6\n\t"
120728 #elif defined(__clang__)
120729         "muls	r6, r7\n\t"
120730 #else
120731         "mul	r6, r7\n\t"
120732 #endif
120733 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120734         "lsrs	r7, r6, #16\n\t"
120735 #else
120736         "lsr	r7, r6, #16\n\t"
120737 #endif
120738 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120739         "lsls	r6, r6, #16\n\t"
120740 #else
120741         "lsl	r6, r6, #16\n\t"
120742 #endif
120743 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120744         "adds	r5, r5, r6\n\t"
120745 #else
120746         "add	r5, r5, r6\n\t"
120747 #endif
120748 #ifdef WOLFSSL_KEIL
120749         "adcs	r3, r3, r7\n\t"
120750 #elif defined(__clang__)
120751         "adcs	r3, r7\n\t"
120752 #else
120753         "adc	r3, r7\n\t"
120754 #endif
120755 #ifdef WOLFSSL_KEIL
120756         "adcs	r4, r4, %[r]\n\t"
120757 #elif defined(__clang__)
120758         "adcs	r4, %[r]\n\t"
120759 #else
120760         "adc	r4, %[r]\n\t"
120761 #endif
120762 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120763         "lsrs	r6, %[a], #16\n\t"
120764 #else
120765         "lsr	r6, %[a], #16\n\t"
120766 #endif
120767 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120768         "lsrs	r7, %[b], #16\n\t"
120769 #else
120770         "lsr	r7, %[b], #16\n\t"
120771 #endif
120772 #ifdef WOLFSSL_KEIL
120773         "muls	r7, r6, r7\n\t"
120774 #elif defined(__clang__)
120775         "muls	r7, r6\n\t"
120776 #else
120777         "mul	r7, r6\n\t"
120778 #endif
120779 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120780         "adds	r3, r3, r7\n\t"
120781 #else
120782         "add	r3, r3, r7\n\t"
120783 #endif
120784 #ifdef WOLFSSL_KEIL
120785         "adcs	r4, r4, %[r]\n\t"
120786 #elif defined(__clang__)
120787         "adcs	r4, %[r]\n\t"
120788 #else
120789         "adc	r4, %[r]\n\t"
120790 #endif
120791         "uxth	r7, %[b]\n\t"
120792 #ifdef WOLFSSL_KEIL
120793         "muls	r6, r7, r6\n\t"
120794 #elif defined(__clang__)
120795         "muls	r6, r7\n\t"
120796 #else
120797         "mul	r6, r7\n\t"
120798 #endif
120799 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120800         "lsrs	r7, r6, #16\n\t"
120801 #else
120802         "lsr	r7, r6, #16\n\t"
120803 #endif
120804 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120805         "lsls	r6, r6, #16\n\t"
120806 #else
120807         "lsl	r6, r6, #16\n\t"
120808 #endif
120809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120810         "adds	r5, r5, r6\n\t"
120811 #else
120812         "add	r5, r5, r6\n\t"
120813 #endif
120814 #ifdef WOLFSSL_KEIL
120815         "adcs	r3, r3, r7\n\t"
120816 #elif defined(__clang__)
120817         "adcs	r3, r7\n\t"
120818 #else
120819         "adc	r3, r7\n\t"
120820 #endif
120821 #ifdef WOLFSSL_KEIL
120822         "adcs	r4, r4, %[r]\n\t"
120823 #elif defined(__clang__)
120824         "adcs	r4, %[r]\n\t"
120825 #else
120826         "adc	r4, %[r]\n\t"
120827 #endif
120828         "#  A[4] * B[1]\n\t"
120829         "mov	%[a], r9\n\t"
120830         "mov	%[b], r10\n\t"
120831         "ldr	%[a], [%[a], #16]\n\t"
120832         "ldr	%[b], [%[b], #4]\n\t"
120833         "uxth	r6, %[a]\n\t"
120834         "uxth	r7, %[b]\n\t"
120835 #ifdef WOLFSSL_KEIL
120836         "muls	r7, r6, r7\n\t"
120837 #elif defined(__clang__)
120838         "muls	r7, r6\n\t"
120839 #else
120840         "mul	r7, r6\n\t"
120841 #endif
120842 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120843         "adds	r5, r5, r7\n\t"
120844 #else
120845         "add	r5, r5, r7\n\t"
120846 #endif
120847 #ifdef WOLFSSL_KEIL
120848         "adcs	r3, r3, %[r]\n\t"
120849 #elif defined(__clang__)
120850         "adcs	r3, %[r]\n\t"
120851 #else
120852         "adc	r3, %[r]\n\t"
120853 #endif
120854 #ifdef WOLFSSL_KEIL
120855         "adcs	r4, r4, %[r]\n\t"
120856 #elif defined(__clang__)
120857         "adcs	r4, %[r]\n\t"
120858 #else
120859         "adc	r4, %[r]\n\t"
120860 #endif
120861 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120862         "lsrs	r7, %[b], #16\n\t"
120863 #else
120864         "lsr	r7, %[b], #16\n\t"
120865 #endif
120866 #ifdef WOLFSSL_KEIL
120867         "muls	r6, r7, r6\n\t"
120868 #elif defined(__clang__)
120869         "muls	r6, r7\n\t"
120870 #else
120871         "mul	r6, r7\n\t"
120872 #endif
120873 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120874         "lsrs	r7, r6, #16\n\t"
120875 #else
120876         "lsr	r7, r6, #16\n\t"
120877 #endif
120878 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120879         "lsls	r6, r6, #16\n\t"
120880 #else
120881         "lsl	r6, r6, #16\n\t"
120882 #endif
120883 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120884         "adds	r5, r5, r6\n\t"
120885 #else
120886         "add	r5, r5, r6\n\t"
120887 #endif
120888 #ifdef WOLFSSL_KEIL
120889         "adcs	r3, r3, r7\n\t"
120890 #elif defined(__clang__)
120891         "adcs	r3, r7\n\t"
120892 #else
120893         "adc	r3, r7\n\t"
120894 #endif
120895 #ifdef WOLFSSL_KEIL
120896         "adcs	r4, r4, %[r]\n\t"
120897 #elif defined(__clang__)
120898         "adcs	r4, %[r]\n\t"
120899 #else
120900         "adc	r4, %[r]\n\t"
120901 #endif
120902 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120903         "lsrs	r6, %[a], #16\n\t"
120904 #else
120905         "lsr	r6, %[a], #16\n\t"
120906 #endif
120907 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120908         "lsrs	r7, %[b], #16\n\t"
120909 #else
120910         "lsr	r7, %[b], #16\n\t"
120911 #endif
120912 #ifdef WOLFSSL_KEIL
120913         "muls	r7, r6, r7\n\t"
120914 #elif defined(__clang__)
120915         "muls	r7, r6\n\t"
120916 #else
120917         "mul	r7, r6\n\t"
120918 #endif
120919 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120920         "adds	r3, r3, r7\n\t"
120921 #else
120922         "add	r3, r3, r7\n\t"
120923 #endif
120924 #ifdef WOLFSSL_KEIL
120925         "adcs	r4, r4, %[r]\n\t"
120926 #elif defined(__clang__)
120927         "adcs	r4, %[r]\n\t"
120928 #else
120929         "adc	r4, %[r]\n\t"
120930 #endif
120931         "uxth	r7, %[b]\n\t"
120932 #ifdef WOLFSSL_KEIL
120933         "muls	r6, r7, r6\n\t"
120934 #elif defined(__clang__)
120935         "muls	r6, r7\n\t"
120936 #else
120937         "mul	r6, r7\n\t"
120938 #endif
120939 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120940         "lsrs	r7, r6, #16\n\t"
120941 #else
120942         "lsr	r7, r6, #16\n\t"
120943 #endif
120944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120945         "lsls	r6, r6, #16\n\t"
120946 #else
120947         "lsl	r6, r6, #16\n\t"
120948 #endif
120949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120950         "adds	r5, r5, r6\n\t"
120951 #else
120952         "add	r5, r5, r6\n\t"
120953 #endif
120954 #ifdef WOLFSSL_KEIL
120955         "adcs	r3, r3, r7\n\t"
120956 #elif defined(__clang__)
120957         "adcs	r3, r7\n\t"
120958 #else
120959         "adc	r3, r7\n\t"
120960 #endif
120961 #ifdef WOLFSSL_KEIL
120962         "adcs	r4, r4, %[r]\n\t"
120963 #elif defined(__clang__)
120964         "adcs	r4, %[r]\n\t"
120965 #else
120966         "adc	r4, %[r]\n\t"
120967 #endif
120968         "#  A[5] * B[0]\n\t"
120969         "mov	%[a], r9\n\t"
120970         "mov	%[b], r10\n\t"
120971         "ldr	%[a], [%[a], #20]\n\t"
120972         "ldr	%[b], [%[b]]\n\t"
120973         "uxth	r6, %[a]\n\t"
120974         "uxth	r7, %[b]\n\t"
120975 #ifdef WOLFSSL_KEIL
120976         "muls	r7, r6, r7\n\t"
120977 #elif defined(__clang__)
120978         "muls	r7, r6\n\t"
120979 #else
120980         "mul	r7, r6\n\t"
120981 #endif
120982 #if defined(__clang__) || defined(WOLFSSL_KEIL)
120983         "adds	r5, r5, r7\n\t"
120984 #else
120985         "add	r5, r5, r7\n\t"
120986 #endif
120987 #ifdef WOLFSSL_KEIL
120988         "adcs	r3, r3, %[r]\n\t"
120989 #elif defined(__clang__)
120990         "adcs	r3, %[r]\n\t"
120991 #else
120992         "adc	r3, %[r]\n\t"
120993 #endif
120994 #ifdef WOLFSSL_KEIL
120995         "adcs	r4, r4, %[r]\n\t"
120996 #elif defined(__clang__)
120997         "adcs	r4, %[r]\n\t"
120998 #else
120999         "adc	r4, %[r]\n\t"
121000 #endif
121001 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121002         "lsrs	r7, %[b], #16\n\t"
121003 #else
121004         "lsr	r7, %[b], #16\n\t"
121005 #endif
121006 #ifdef WOLFSSL_KEIL
121007         "muls	r6, r7, r6\n\t"
121008 #elif defined(__clang__)
121009         "muls	r6, r7\n\t"
121010 #else
121011         "mul	r6, r7\n\t"
121012 #endif
121013 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121014         "lsrs	r7, r6, #16\n\t"
121015 #else
121016         "lsr	r7, r6, #16\n\t"
121017 #endif
121018 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121019         "lsls	r6, r6, #16\n\t"
121020 #else
121021         "lsl	r6, r6, #16\n\t"
121022 #endif
121023 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121024         "adds	r5, r5, r6\n\t"
121025 #else
121026         "add	r5, r5, r6\n\t"
121027 #endif
121028 #ifdef WOLFSSL_KEIL
121029         "adcs	r3, r3, r7\n\t"
121030 #elif defined(__clang__)
121031         "adcs	r3, r7\n\t"
121032 #else
121033         "adc	r3, r7\n\t"
121034 #endif
121035 #ifdef WOLFSSL_KEIL
121036         "adcs	r4, r4, %[r]\n\t"
121037 #elif defined(__clang__)
121038         "adcs	r4, %[r]\n\t"
121039 #else
121040         "adc	r4, %[r]\n\t"
121041 #endif
121042 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121043         "lsrs	r6, %[a], #16\n\t"
121044 #else
121045         "lsr	r6, %[a], #16\n\t"
121046 #endif
121047 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121048         "lsrs	r7, %[b], #16\n\t"
121049 #else
121050         "lsr	r7, %[b], #16\n\t"
121051 #endif
121052 #ifdef WOLFSSL_KEIL
121053         "muls	r7, r6, r7\n\t"
121054 #elif defined(__clang__)
121055         "muls	r7, r6\n\t"
121056 #else
121057         "mul	r7, r6\n\t"
121058 #endif
121059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121060         "adds	r3, r3, r7\n\t"
121061 #else
121062         "add	r3, r3, r7\n\t"
121063 #endif
121064 #ifdef WOLFSSL_KEIL
121065         "adcs	r4, r4, %[r]\n\t"
121066 #elif defined(__clang__)
121067         "adcs	r4, %[r]\n\t"
121068 #else
121069         "adc	r4, %[r]\n\t"
121070 #endif
121071         "uxth	r7, %[b]\n\t"
121072 #ifdef WOLFSSL_KEIL
121073         "muls	r6, r7, r6\n\t"
121074 #elif defined(__clang__)
121075         "muls	r6, r7\n\t"
121076 #else
121077         "mul	r6, r7\n\t"
121078 #endif
121079 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121080         "lsrs	r7, r6, #16\n\t"
121081 #else
121082         "lsr	r7, r6, #16\n\t"
121083 #endif
121084 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121085         "lsls	r6, r6, #16\n\t"
121086 #else
121087         "lsl	r6, r6, #16\n\t"
121088 #endif
121089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121090         "adds	r5, r5, r6\n\t"
121091 #else
121092         "add	r5, r5, r6\n\t"
121093 #endif
121094 #ifdef WOLFSSL_KEIL
121095         "adcs	r3, r3, r7\n\t"
121096 #elif defined(__clang__)
121097         "adcs	r3, r7\n\t"
121098 #else
121099         "adc	r3, r7\n\t"
121100 #endif
121101 #ifdef WOLFSSL_KEIL
121102         "adcs	r4, r4, %[r]\n\t"
121103 #elif defined(__clang__)
121104         "adcs	r4, %[r]\n\t"
121105 #else
121106         "adc	r4, %[r]\n\t"
121107 #endif
121108         "str	r5, [sp, #20]\n\t"
121109         "#  A[6] * B[0]\n\t"
121110         "movs	r5, #0\n\t"
121111         "mov	%[a], r9\n\t"
121112         "mov	%[b], r10\n\t"
121113         "ldr	%[a], [%[a], #24]\n\t"
121114         "ldr	%[b], [%[b]]\n\t"
121115         "uxth	r6, %[a]\n\t"
121116         "uxth	r7, %[b]\n\t"
121117 #ifdef WOLFSSL_KEIL
121118         "muls	r7, r6, r7\n\t"
121119 #elif defined(__clang__)
121120         "muls	r7, r6\n\t"
121121 #else
121122         "mul	r7, r6\n\t"
121123 #endif
121124 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121125         "adds	r3, r3, r7\n\t"
121126 #else
121127         "add	r3, r3, r7\n\t"
121128 #endif
121129 #ifdef WOLFSSL_KEIL
121130         "adcs	r4, r4, %[r]\n\t"
121131 #elif defined(__clang__)
121132         "adcs	r4, %[r]\n\t"
121133 #else
121134         "adc	r4, %[r]\n\t"
121135 #endif
121136 #ifdef WOLFSSL_KEIL
121137         "adcs	r5, r5, %[r]\n\t"
121138 #elif defined(__clang__)
121139         "adcs	r5, %[r]\n\t"
121140 #else
121141         "adc	r5, %[r]\n\t"
121142 #endif
121143 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121144         "lsrs	r7, %[b], #16\n\t"
121145 #else
121146         "lsr	r7, %[b], #16\n\t"
121147 #endif
121148 #ifdef WOLFSSL_KEIL
121149         "muls	r6, r7, r6\n\t"
121150 #elif defined(__clang__)
121151         "muls	r6, r7\n\t"
121152 #else
121153         "mul	r6, r7\n\t"
121154 #endif
121155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121156         "lsrs	r7, r6, #16\n\t"
121157 #else
121158         "lsr	r7, r6, #16\n\t"
121159 #endif
121160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121161         "lsls	r6, r6, #16\n\t"
121162 #else
121163         "lsl	r6, r6, #16\n\t"
121164 #endif
121165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121166         "adds	r3, r3, r6\n\t"
121167 #else
121168         "add	r3, r3, r6\n\t"
121169 #endif
121170 #ifdef WOLFSSL_KEIL
121171         "adcs	r4, r4, r7\n\t"
121172 #elif defined(__clang__)
121173         "adcs	r4, r7\n\t"
121174 #else
121175         "adc	r4, r7\n\t"
121176 #endif
121177 #ifdef WOLFSSL_KEIL
121178         "adcs	r5, r5, %[r]\n\t"
121179 #elif defined(__clang__)
121180         "adcs	r5, %[r]\n\t"
121181 #else
121182         "adc	r5, %[r]\n\t"
121183 #endif
121184 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121185         "lsrs	r6, %[a], #16\n\t"
121186 #else
121187         "lsr	r6, %[a], #16\n\t"
121188 #endif
121189 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121190         "lsrs	r7, %[b], #16\n\t"
121191 #else
121192         "lsr	r7, %[b], #16\n\t"
121193 #endif
121194 #ifdef WOLFSSL_KEIL
121195         "muls	r7, r6, r7\n\t"
121196 #elif defined(__clang__)
121197         "muls	r7, r6\n\t"
121198 #else
121199         "mul	r7, r6\n\t"
121200 #endif
121201 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121202         "adds	r4, r4, r7\n\t"
121203 #else
121204         "add	r4, r4, r7\n\t"
121205 #endif
121206 #ifdef WOLFSSL_KEIL
121207         "adcs	r5, r5, %[r]\n\t"
121208 #elif defined(__clang__)
121209         "adcs	r5, %[r]\n\t"
121210 #else
121211         "adc	r5, %[r]\n\t"
121212 #endif
121213         "uxth	r7, %[b]\n\t"
121214 #ifdef WOLFSSL_KEIL
121215         "muls	r6, r7, r6\n\t"
121216 #elif defined(__clang__)
121217         "muls	r6, r7\n\t"
121218 #else
121219         "mul	r6, r7\n\t"
121220 #endif
121221 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121222         "lsrs	r7, r6, #16\n\t"
121223 #else
121224         "lsr	r7, r6, #16\n\t"
121225 #endif
121226 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121227         "lsls	r6, r6, #16\n\t"
121228 #else
121229         "lsl	r6, r6, #16\n\t"
121230 #endif
121231 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121232         "adds	r3, r3, r6\n\t"
121233 #else
121234         "add	r3, r3, r6\n\t"
121235 #endif
121236 #ifdef WOLFSSL_KEIL
121237         "adcs	r4, r4, r7\n\t"
121238 #elif defined(__clang__)
121239         "adcs	r4, r7\n\t"
121240 #else
121241         "adc	r4, r7\n\t"
121242 #endif
121243 #ifdef WOLFSSL_KEIL
121244         "adcs	r5, r5, %[r]\n\t"
121245 #elif defined(__clang__)
121246         "adcs	r5, %[r]\n\t"
121247 #else
121248         "adc	r5, %[r]\n\t"
121249 #endif
121250         "#  A[5] * B[1]\n\t"
121251         "mov	%[a], r9\n\t"
121252         "mov	%[b], r10\n\t"
121253         "ldr	%[a], [%[a], #20]\n\t"
121254         "ldr	%[b], [%[b], #4]\n\t"
121255         "uxth	r6, %[a]\n\t"
121256         "uxth	r7, %[b]\n\t"
121257 #ifdef WOLFSSL_KEIL
121258         "muls	r7, r6, r7\n\t"
121259 #elif defined(__clang__)
121260         "muls	r7, r6\n\t"
121261 #else
121262         "mul	r7, r6\n\t"
121263 #endif
121264 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121265         "adds	r3, r3, r7\n\t"
121266 #else
121267         "add	r3, r3, r7\n\t"
121268 #endif
121269 #ifdef WOLFSSL_KEIL
121270         "adcs	r4, r4, %[r]\n\t"
121271 #elif defined(__clang__)
121272         "adcs	r4, %[r]\n\t"
121273 #else
121274         "adc	r4, %[r]\n\t"
121275 #endif
121276 #ifdef WOLFSSL_KEIL
121277         "adcs	r5, r5, %[r]\n\t"
121278 #elif defined(__clang__)
121279         "adcs	r5, %[r]\n\t"
121280 #else
121281         "adc	r5, %[r]\n\t"
121282 #endif
121283 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121284         "lsrs	r7, %[b], #16\n\t"
121285 #else
121286         "lsr	r7, %[b], #16\n\t"
121287 #endif
121288 #ifdef WOLFSSL_KEIL
121289         "muls	r6, r7, r6\n\t"
121290 #elif defined(__clang__)
121291         "muls	r6, r7\n\t"
121292 #else
121293         "mul	r6, r7\n\t"
121294 #endif
121295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121296         "lsrs	r7, r6, #16\n\t"
121297 #else
121298         "lsr	r7, r6, #16\n\t"
121299 #endif
121300 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121301         "lsls	r6, r6, #16\n\t"
121302 #else
121303         "lsl	r6, r6, #16\n\t"
121304 #endif
121305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121306         "adds	r3, r3, r6\n\t"
121307 #else
121308         "add	r3, r3, r6\n\t"
121309 #endif
121310 #ifdef WOLFSSL_KEIL
121311         "adcs	r4, r4, r7\n\t"
121312 #elif defined(__clang__)
121313         "adcs	r4, r7\n\t"
121314 #else
121315         "adc	r4, r7\n\t"
121316 #endif
121317 #ifdef WOLFSSL_KEIL
121318         "adcs	r5, r5, %[r]\n\t"
121319 #elif defined(__clang__)
121320         "adcs	r5, %[r]\n\t"
121321 #else
121322         "adc	r5, %[r]\n\t"
121323 #endif
121324 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121325         "lsrs	r6, %[a], #16\n\t"
121326 #else
121327         "lsr	r6, %[a], #16\n\t"
121328 #endif
121329 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121330         "lsrs	r7, %[b], #16\n\t"
121331 #else
121332         "lsr	r7, %[b], #16\n\t"
121333 #endif
121334 #ifdef WOLFSSL_KEIL
121335         "muls	r7, r6, r7\n\t"
121336 #elif defined(__clang__)
121337         "muls	r7, r6\n\t"
121338 #else
121339         "mul	r7, r6\n\t"
121340 #endif
121341 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121342         "adds	r4, r4, r7\n\t"
121343 #else
121344         "add	r4, r4, r7\n\t"
121345 #endif
121346 #ifdef WOLFSSL_KEIL
121347         "adcs	r5, r5, %[r]\n\t"
121348 #elif defined(__clang__)
121349         "adcs	r5, %[r]\n\t"
121350 #else
121351         "adc	r5, %[r]\n\t"
121352 #endif
121353         "uxth	r7, %[b]\n\t"
121354 #ifdef WOLFSSL_KEIL
121355         "muls	r6, r7, r6\n\t"
121356 #elif defined(__clang__)
121357         "muls	r6, r7\n\t"
121358 #else
121359         "mul	r6, r7\n\t"
121360 #endif
121361 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121362         "lsrs	r7, r6, #16\n\t"
121363 #else
121364         "lsr	r7, r6, #16\n\t"
121365 #endif
121366 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121367         "lsls	r6, r6, #16\n\t"
121368 #else
121369         "lsl	r6, r6, #16\n\t"
121370 #endif
121371 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121372         "adds	r3, r3, r6\n\t"
121373 #else
121374         "add	r3, r3, r6\n\t"
121375 #endif
121376 #ifdef WOLFSSL_KEIL
121377         "adcs	r4, r4, r7\n\t"
121378 #elif defined(__clang__)
121379         "adcs	r4, r7\n\t"
121380 #else
121381         "adc	r4, r7\n\t"
121382 #endif
121383 #ifdef WOLFSSL_KEIL
121384         "adcs	r5, r5, %[r]\n\t"
121385 #elif defined(__clang__)
121386         "adcs	r5, %[r]\n\t"
121387 #else
121388         "adc	r5, %[r]\n\t"
121389 #endif
121390         "#  A[4] * B[2]\n\t"
121391         "mov	%[a], r9\n\t"
121392         "mov	%[b], r10\n\t"
121393         "ldr	%[a], [%[a], #16]\n\t"
121394         "ldr	%[b], [%[b], #8]\n\t"
121395         "uxth	r6, %[a]\n\t"
121396         "uxth	r7, %[b]\n\t"
121397 #ifdef WOLFSSL_KEIL
121398         "muls	r7, r6, r7\n\t"
121399 #elif defined(__clang__)
121400         "muls	r7, r6\n\t"
121401 #else
121402         "mul	r7, r6\n\t"
121403 #endif
121404 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121405         "adds	r3, r3, r7\n\t"
121406 #else
121407         "add	r3, r3, r7\n\t"
121408 #endif
121409 #ifdef WOLFSSL_KEIL
121410         "adcs	r4, r4, %[r]\n\t"
121411 #elif defined(__clang__)
121412         "adcs	r4, %[r]\n\t"
121413 #else
121414         "adc	r4, %[r]\n\t"
121415 #endif
121416 #ifdef WOLFSSL_KEIL
121417         "adcs	r5, r5, %[r]\n\t"
121418 #elif defined(__clang__)
121419         "adcs	r5, %[r]\n\t"
121420 #else
121421         "adc	r5, %[r]\n\t"
121422 #endif
121423 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121424         "lsrs	r7, %[b], #16\n\t"
121425 #else
121426         "lsr	r7, %[b], #16\n\t"
121427 #endif
121428 #ifdef WOLFSSL_KEIL
121429         "muls	r6, r7, r6\n\t"
121430 #elif defined(__clang__)
121431         "muls	r6, r7\n\t"
121432 #else
121433         "mul	r6, r7\n\t"
121434 #endif
121435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121436         "lsrs	r7, r6, #16\n\t"
121437 #else
121438         "lsr	r7, r6, #16\n\t"
121439 #endif
121440 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121441         "lsls	r6, r6, #16\n\t"
121442 #else
121443         "lsl	r6, r6, #16\n\t"
121444 #endif
121445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121446         "adds	r3, r3, r6\n\t"
121447 #else
121448         "add	r3, r3, r6\n\t"
121449 #endif
121450 #ifdef WOLFSSL_KEIL
121451         "adcs	r4, r4, r7\n\t"
121452 #elif defined(__clang__)
121453         "adcs	r4, r7\n\t"
121454 #else
121455         "adc	r4, r7\n\t"
121456 #endif
121457 #ifdef WOLFSSL_KEIL
121458         "adcs	r5, r5, %[r]\n\t"
121459 #elif defined(__clang__)
121460         "adcs	r5, %[r]\n\t"
121461 #else
121462         "adc	r5, %[r]\n\t"
121463 #endif
121464 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121465         "lsrs	r6, %[a], #16\n\t"
121466 #else
121467         "lsr	r6, %[a], #16\n\t"
121468 #endif
121469 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121470         "lsrs	r7, %[b], #16\n\t"
121471 #else
121472         "lsr	r7, %[b], #16\n\t"
121473 #endif
121474 #ifdef WOLFSSL_KEIL
121475         "muls	r7, r6, r7\n\t"
121476 #elif defined(__clang__)
121477         "muls	r7, r6\n\t"
121478 #else
121479         "mul	r7, r6\n\t"
121480 #endif
121481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121482         "adds	r4, r4, r7\n\t"
121483 #else
121484         "add	r4, r4, r7\n\t"
121485 #endif
121486 #ifdef WOLFSSL_KEIL
121487         "adcs	r5, r5, %[r]\n\t"
121488 #elif defined(__clang__)
121489         "adcs	r5, %[r]\n\t"
121490 #else
121491         "adc	r5, %[r]\n\t"
121492 #endif
121493         "uxth	r7, %[b]\n\t"
121494 #ifdef WOLFSSL_KEIL
121495         "muls	r6, r7, r6\n\t"
121496 #elif defined(__clang__)
121497         "muls	r6, r7\n\t"
121498 #else
121499         "mul	r6, r7\n\t"
121500 #endif
121501 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121502         "lsrs	r7, r6, #16\n\t"
121503 #else
121504         "lsr	r7, r6, #16\n\t"
121505 #endif
121506 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121507         "lsls	r6, r6, #16\n\t"
121508 #else
121509         "lsl	r6, r6, #16\n\t"
121510 #endif
121511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121512         "adds	r3, r3, r6\n\t"
121513 #else
121514         "add	r3, r3, r6\n\t"
121515 #endif
121516 #ifdef WOLFSSL_KEIL
121517         "adcs	r4, r4, r7\n\t"
121518 #elif defined(__clang__)
121519         "adcs	r4, r7\n\t"
121520 #else
121521         "adc	r4, r7\n\t"
121522 #endif
121523 #ifdef WOLFSSL_KEIL
121524         "adcs	r5, r5, %[r]\n\t"
121525 #elif defined(__clang__)
121526         "adcs	r5, %[r]\n\t"
121527 #else
121528         "adc	r5, %[r]\n\t"
121529 #endif
121530         "#  A[3] * B[3]\n\t"
121531         "mov	%[a], r9\n\t"
121532         "mov	%[b], r10\n\t"
121533         "ldr	%[a], [%[a], #12]\n\t"
121534         "ldr	%[b], [%[b], #12]\n\t"
121535         "uxth	r6, %[a]\n\t"
121536         "uxth	r7, %[b]\n\t"
121537 #ifdef WOLFSSL_KEIL
121538         "muls	r7, r6, r7\n\t"
121539 #elif defined(__clang__)
121540         "muls	r7, r6\n\t"
121541 #else
121542         "mul	r7, r6\n\t"
121543 #endif
121544 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121545         "adds	r3, r3, r7\n\t"
121546 #else
121547         "add	r3, r3, r7\n\t"
121548 #endif
121549 #ifdef WOLFSSL_KEIL
121550         "adcs	r4, r4, %[r]\n\t"
121551 #elif defined(__clang__)
121552         "adcs	r4, %[r]\n\t"
121553 #else
121554         "adc	r4, %[r]\n\t"
121555 #endif
121556 #ifdef WOLFSSL_KEIL
121557         "adcs	r5, r5, %[r]\n\t"
121558 #elif defined(__clang__)
121559         "adcs	r5, %[r]\n\t"
121560 #else
121561         "adc	r5, %[r]\n\t"
121562 #endif
121563 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121564         "lsrs	r7, %[b], #16\n\t"
121565 #else
121566         "lsr	r7, %[b], #16\n\t"
121567 #endif
121568 #ifdef WOLFSSL_KEIL
121569         "muls	r6, r7, r6\n\t"
121570 #elif defined(__clang__)
121571         "muls	r6, r7\n\t"
121572 #else
121573         "mul	r6, r7\n\t"
121574 #endif
121575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121576         "lsrs	r7, r6, #16\n\t"
121577 #else
121578         "lsr	r7, r6, #16\n\t"
121579 #endif
121580 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121581         "lsls	r6, r6, #16\n\t"
121582 #else
121583         "lsl	r6, r6, #16\n\t"
121584 #endif
121585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121586         "adds	r3, r3, r6\n\t"
121587 #else
121588         "add	r3, r3, r6\n\t"
121589 #endif
121590 #ifdef WOLFSSL_KEIL
121591         "adcs	r4, r4, r7\n\t"
121592 #elif defined(__clang__)
121593         "adcs	r4, r7\n\t"
121594 #else
121595         "adc	r4, r7\n\t"
121596 #endif
121597 #ifdef WOLFSSL_KEIL
121598         "adcs	r5, r5, %[r]\n\t"
121599 #elif defined(__clang__)
121600         "adcs	r5, %[r]\n\t"
121601 #else
121602         "adc	r5, %[r]\n\t"
121603 #endif
121604 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121605         "lsrs	r6, %[a], #16\n\t"
121606 #else
121607         "lsr	r6, %[a], #16\n\t"
121608 #endif
121609 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121610         "lsrs	r7, %[b], #16\n\t"
121611 #else
121612         "lsr	r7, %[b], #16\n\t"
121613 #endif
121614 #ifdef WOLFSSL_KEIL
121615         "muls	r7, r6, r7\n\t"
121616 #elif defined(__clang__)
121617         "muls	r7, r6\n\t"
121618 #else
121619         "mul	r7, r6\n\t"
121620 #endif
121621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121622         "adds	r4, r4, r7\n\t"
121623 #else
121624         "add	r4, r4, r7\n\t"
121625 #endif
121626 #ifdef WOLFSSL_KEIL
121627         "adcs	r5, r5, %[r]\n\t"
121628 #elif defined(__clang__)
121629         "adcs	r5, %[r]\n\t"
121630 #else
121631         "adc	r5, %[r]\n\t"
121632 #endif
121633         "uxth	r7, %[b]\n\t"
121634 #ifdef WOLFSSL_KEIL
121635         "muls	r6, r7, r6\n\t"
121636 #elif defined(__clang__)
121637         "muls	r6, r7\n\t"
121638 #else
121639         "mul	r6, r7\n\t"
121640 #endif
121641 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121642         "lsrs	r7, r6, #16\n\t"
121643 #else
121644         "lsr	r7, r6, #16\n\t"
121645 #endif
121646 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121647         "lsls	r6, r6, #16\n\t"
121648 #else
121649         "lsl	r6, r6, #16\n\t"
121650 #endif
121651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121652         "adds	r3, r3, r6\n\t"
121653 #else
121654         "add	r3, r3, r6\n\t"
121655 #endif
121656 #ifdef WOLFSSL_KEIL
121657         "adcs	r4, r4, r7\n\t"
121658 #elif defined(__clang__)
121659         "adcs	r4, r7\n\t"
121660 #else
121661         "adc	r4, r7\n\t"
121662 #endif
121663 #ifdef WOLFSSL_KEIL
121664         "adcs	r5, r5, %[r]\n\t"
121665 #elif defined(__clang__)
121666         "adcs	r5, %[r]\n\t"
121667 #else
121668         "adc	r5, %[r]\n\t"
121669 #endif
121670         "#  A[2] * B[4]\n\t"
121671         "mov	%[a], r9\n\t"
121672         "mov	%[b], r10\n\t"
121673         "ldr	%[a], [%[a], #8]\n\t"
121674         "ldr	%[b], [%[b], #16]\n\t"
121675         "uxth	r6, %[a]\n\t"
121676         "uxth	r7, %[b]\n\t"
121677 #ifdef WOLFSSL_KEIL
121678         "muls	r7, r6, r7\n\t"
121679 #elif defined(__clang__)
121680         "muls	r7, r6\n\t"
121681 #else
121682         "mul	r7, r6\n\t"
121683 #endif
121684 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121685         "adds	r3, r3, r7\n\t"
121686 #else
121687         "add	r3, r3, r7\n\t"
121688 #endif
121689 #ifdef WOLFSSL_KEIL
121690         "adcs	r4, r4, %[r]\n\t"
121691 #elif defined(__clang__)
121692         "adcs	r4, %[r]\n\t"
121693 #else
121694         "adc	r4, %[r]\n\t"
121695 #endif
121696 #ifdef WOLFSSL_KEIL
121697         "adcs	r5, r5, %[r]\n\t"
121698 #elif defined(__clang__)
121699         "adcs	r5, %[r]\n\t"
121700 #else
121701         "adc	r5, %[r]\n\t"
121702 #endif
121703 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121704         "lsrs	r7, %[b], #16\n\t"
121705 #else
121706         "lsr	r7, %[b], #16\n\t"
121707 #endif
121708 #ifdef WOLFSSL_KEIL
121709         "muls	r6, r7, r6\n\t"
121710 #elif defined(__clang__)
121711         "muls	r6, r7\n\t"
121712 #else
121713         "mul	r6, r7\n\t"
121714 #endif
121715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121716         "lsrs	r7, r6, #16\n\t"
121717 #else
121718         "lsr	r7, r6, #16\n\t"
121719 #endif
121720 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121721         "lsls	r6, r6, #16\n\t"
121722 #else
121723         "lsl	r6, r6, #16\n\t"
121724 #endif
121725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121726         "adds	r3, r3, r6\n\t"
121727 #else
121728         "add	r3, r3, r6\n\t"
121729 #endif
121730 #ifdef WOLFSSL_KEIL
121731         "adcs	r4, r4, r7\n\t"
121732 #elif defined(__clang__)
121733         "adcs	r4, r7\n\t"
121734 #else
121735         "adc	r4, r7\n\t"
121736 #endif
121737 #ifdef WOLFSSL_KEIL
121738         "adcs	r5, r5, %[r]\n\t"
121739 #elif defined(__clang__)
121740         "adcs	r5, %[r]\n\t"
121741 #else
121742         "adc	r5, %[r]\n\t"
121743 #endif
121744 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121745         "lsrs	r6, %[a], #16\n\t"
121746 #else
121747         "lsr	r6, %[a], #16\n\t"
121748 #endif
121749 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121750         "lsrs	r7, %[b], #16\n\t"
121751 #else
121752         "lsr	r7, %[b], #16\n\t"
121753 #endif
121754 #ifdef WOLFSSL_KEIL
121755         "muls	r7, r6, r7\n\t"
121756 #elif defined(__clang__)
121757         "muls	r7, r6\n\t"
121758 #else
121759         "mul	r7, r6\n\t"
121760 #endif
121761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121762         "adds	r4, r4, r7\n\t"
121763 #else
121764         "add	r4, r4, r7\n\t"
121765 #endif
121766 #ifdef WOLFSSL_KEIL
121767         "adcs	r5, r5, %[r]\n\t"
121768 #elif defined(__clang__)
121769         "adcs	r5, %[r]\n\t"
121770 #else
121771         "adc	r5, %[r]\n\t"
121772 #endif
121773         "uxth	r7, %[b]\n\t"
121774 #ifdef WOLFSSL_KEIL
121775         "muls	r6, r7, r6\n\t"
121776 #elif defined(__clang__)
121777         "muls	r6, r7\n\t"
121778 #else
121779         "mul	r6, r7\n\t"
121780 #endif
121781 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121782         "lsrs	r7, r6, #16\n\t"
121783 #else
121784         "lsr	r7, r6, #16\n\t"
121785 #endif
121786 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121787         "lsls	r6, r6, #16\n\t"
121788 #else
121789         "lsl	r6, r6, #16\n\t"
121790 #endif
121791 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121792         "adds	r3, r3, r6\n\t"
121793 #else
121794         "add	r3, r3, r6\n\t"
121795 #endif
121796 #ifdef WOLFSSL_KEIL
121797         "adcs	r4, r4, r7\n\t"
121798 #elif defined(__clang__)
121799         "adcs	r4, r7\n\t"
121800 #else
121801         "adc	r4, r7\n\t"
121802 #endif
121803 #ifdef WOLFSSL_KEIL
121804         "adcs	r5, r5, %[r]\n\t"
121805 #elif defined(__clang__)
121806         "adcs	r5, %[r]\n\t"
121807 #else
121808         "adc	r5, %[r]\n\t"
121809 #endif
121810         "#  A[1] * B[5]\n\t"
121811         "mov	%[a], r9\n\t"
121812         "mov	%[b], r10\n\t"
121813         "ldr	%[a], [%[a], #4]\n\t"
121814         "ldr	%[b], [%[b], #20]\n\t"
121815         "uxth	r6, %[a]\n\t"
121816         "uxth	r7, %[b]\n\t"
121817 #ifdef WOLFSSL_KEIL
121818         "muls	r7, r6, r7\n\t"
121819 #elif defined(__clang__)
121820         "muls	r7, r6\n\t"
121821 #else
121822         "mul	r7, r6\n\t"
121823 #endif
121824 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121825         "adds	r3, r3, r7\n\t"
121826 #else
121827         "add	r3, r3, r7\n\t"
121828 #endif
121829 #ifdef WOLFSSL_KEIL
121830         "adcs	r4, r4, %[r]\n\t"
121831 #elif defined(__clang__)
121832         "adcs	r4, %[r]\n\t"
121833 #else
121834         "adc	r4, %[r]\n\t"
121835 #endif
121836 #ifdef WOLFSSL_KEIL
121837         "adcs	r5, r5, %[r]\n\t"
121838 #elif defined(__clang__)
121839         "adcs	r5, %[r]\n\t"
121840 #else
121841         "adc	r5, %[r]\n\t"
121842 #endif
121843 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121844         "lsrs	r7, %[b], #16\n\t"
121845 #else
121846         "lsr	r7, %[b], #16\n\t"
121847 #endif
121848 #ifdef WOLFSSL_KEIL
121849         "muls	r6, r7, r6\n\t"
121850 #elif defined(__clang__)
121851         "muls	r6, r7\n\t"
121852 #else
121853         "mul	r6, r7\n\t"
121854 #endif
121855 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121856         "lsrs	r7, r6, #16\n\t"
121857 #else
121858         "lsr	r7, r6, #16\n\t"
121859 #endif
121860 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121861         "lsls	r6, r6, #16\n\t"
121862 #else
121863         "lsl	r6, r6, #16\n\t"
121864 #endif
121865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121866         "adds	r3, r3, r6\n\t"
121867 #else
121868         "add	r3, r3, r6\n\t"
121869 #endif
121870 #ifdef WOLFSSL_KEIL
121871         "adcs	r4, r4, r7\n\t"
121872 #elif defined(__clang__)
121873         "adcs	r4, r7\n\t"
121874 #else
121875         "adc	r4, r7\n\t"
121876 #endif
121877 #ifdef WOLFSSL_KEIL
121878         "adcs	r5, r5, %[r]\n\t"
121879 #elif defined(__clang__)
121880         "adcs	r5, %[r]\n\t"
121881 #else
121882         "adc	r5, %[r]\n\t"
121883 #endif
121884 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121885         "lsrs	r6, %[a], #16\n\t"
121886 #else
121887         "lsr	r6, %[a], #16\n\t"
121888 #endif
121889 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121890         "lsrs	r7, %[b], #16\n\t"
121891 #else
121892         "lsr	r7, %[b], #16\n\t"
121893 #endif
121894 #ifdef WOLFSSL_KEIL
121895         "muls	r7, r6, r7\n\t"
121896 #elif defined(__clang__)
121897         "muls	r7, r6\n\t"
121898 #else
121899         "mul	r7, r6\n\t"
121900 #endif
121901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121902         "adds	r4, r4, r7\n\t"
121903 #else
121904         "add	r4, r4, r7\n\t"
121905 #endif
121906 #ifdef WOLFSSL_KEIL
121907         "adcs	r5, r5, %[r]\n\t"
121908 #elif defined(__clang__)
121909         "adcs	r5, %[r]\n\t"
121910 #else
121911         "adc	r5, %[r]\n\t"
121912 #endif
121913         "uxth	r7, %[b]\n\t"
121914 #ifdef WOLFSSL_KEIL
121915         "muls	r6, r7, r6\n\t"
121916 #elif defined(__clang__)
121917         "muls	r6, r7\n\t"
121918 #else
121919         "mul	r6, r7\n\t"
121920 #endif
121921 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121922         "lsrs	r7, r6, #16\n\t"
121923 #else
121924         "lsr	r7, r6, #16\n\t"
121925 #endif
121926 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121927         "lsls	r6, r6, #16\n\t"
121928 #else
121929         "lsl	r6, r6, #16\n\t"
121930 #endif
121931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121932         "adds	r3, r3, r6\n\t"
121933 #else
121934         "add	r3, r3, r6\n\t"
121935 #endif
121936 #ifdef WOLFSSL_KEIL
121937         "adcs	r4, r4, r7\n\t"
121938 #elif defined(__clang__)
121939         "adcs	r4, r7\n\t"
121940 #else
121941         "adc	r4, r7\n\t"
121942 #endif
121943 #ifdef WOLFSSL_KEIL
121944         "adcs	r5, r5, %[r]\n\t"
121945 #elif defined(__clang__)
121946         "adcs	r5, %[r]\n\t"
121947 #else
121948         "adc	r5, %[r]\n\t"
121949 #endif
121950         "#  A[0] * B[6]\n\t"
121951         "mov	%[a], r9\n\t"
121952         "mov	%[b], r10\n\t"
121953         "ldr	%[a], [%[a]]\n\t"
121954         "ldr	%[b], [%[b], #24]\n\t"
121955         "uxth	r6, %[a]\n\t"
121956         "uxth	r7, %[b]\n\t"
121957 #ifdef WOLFSSL_KEIL
121958         "muls	r7, r6, r7\n\t"
121959 #elif defined(__clang__)
121960         "muls	r7, r6\n\t"
121961 #else
121962         "mul	r7, r6\n\t"
121963 #endif
121964 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121965         "adds	r3, r3, r7\n\t"
121966 #else
121967         "add	r3, r3, r7\n\t"
121968 #endif
121969 #ifdef WOLFSSL_KEIL
121970         "adcs	r4, r4, %[r]\n\t"
121971 #elif defined(__clang__)
121972         "adcs	r4, %[r]\n\t"
121973 #else
121974         "adc	r4, %[r]\n\t"
121975 #endif
121976 #ifdef WOLFSSL_KEIL
121977         "adcs	r5, r5, %[r]\n\t"
121978 #elif defined(__clang__)
121979         "adcs	r5, %[r]\n\t"
121980 #else
121981         "adc	r5, %[r]\n\t"
121982 #endif
121983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121984         "lsrs	r7, %[b], #16\n\t"
121985 #else
121986         "lsr	r7, %[b], #16\n\t"
121987 #endif
121988 #ifdef WOLFSSL_KEIL
121989         "muls	r6, r7, r6\n\t"
121990 #elif defined(__clang__)
121991         "muls	r6, r7\n\t"
121992 #else
121993         "mul	r6, r7\n\t"
121994 #endif
121995 #if defined(__clang__) || defined(WOLFSSL_KEIL)
121996         "lsrs	r7, r6, #16\n\t"
121997 #else
121998         "lsr	r7, r6, #16\n\t"
121999 #endif
122000 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122001         "lsls	r6, r6, #16\n\t"
122002 #else
122003         "lsl	r6, r6, #16\n\t"
122004 #endif
122005 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122006         "adds	r3, r3, r6\n\t"
122007 #else
122008         "add	r3, r3, r6\n\t"
122009 #endif
122010 #ifdef WOLFSSL_KEIL
122011         "adcs	r4, r4, r7\n\t"
122012 #elif defined(__clang__)
122013         "adcs	r4, r7\n\t"
122014 #else
122015         "adc	r4, r7\n\t"
122016 #endif
122017 #ifdef WOLFSSL_KEIL
122018         "adcs	r5, r5, %[r]\n\t"
122019 #elif defined(__clang__)
122020         "adcs	r5, %[r]\n\t"
122021 #else
122022         "adc	r5, %[r]\n\t"
122023 #endif
122024 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122025         "lsrs	r6, %[a], #16\n\t"
122026 #else
122027         "lsr	r6, %[a], #16\n\t"
122028 #endif
122029 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122030         "lsrs	r7, %[b], #16\n\t"
122031 #else
122032         "lsr	r7, %[b], #16\n\t"
122033 #endif
122034 #ifdef WOLFSSL_KEIL
122035         "muls	r7, r6, r7\n\t"
122036 #elif defined(__clang__)
122037         "muls	r7, r6\n\t"
122038 #else
122039         "mul	r7, r6\n\t"
122040 #endif
122041 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122042         "adds	r4, r4, r7\n\t"
122043 #else
122044         "add	r4, r4, r7\n\t"
122045 #endif
122046 #ifdef WOLFSSL_KEIL
122047         "adcs	r5, r5, %[r]\n\t"
122048 #elif defined(__clang__)
122049         "adcs	r5, %[r]\n\t"
122050 #else
122051         "adc	r5, %[r]\n\t"
122052 #endif
122053         "uxth	r7, %[b]\n\t"
122054 #ifdef WOLFSSL_KEIL
122055         "muls	r6, r7, r6\n\t"
122056 #elif defined(__clang__)
122057         "muls	r6, r7\n\t"
122058 #else
122059         "mul	r6, r7\n\t"
122060 #endif
122061 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122062         "lsrs	r7, r6, #16\n\t"
122063 #else
122064         "lsr	r7, r6, #16\n\t"
122065 #endif
122066 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122067         "lsls	r6, r6, #16\n\t"
122068 #else
122069         "lsl	r6, r6, #16\n\t"
122070 #endif
122071 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122072         "adds	r3, r3, r6\n\t"
122073 #else
122074         "add	r3, r3, r6\n\t"
122075 #endif
122076 #ifdef WOLFSSL_KEIL
122077         "adcs	r4, r4, r7\n\t"
122078 #elif defined(__clang__)
122079         "adcs	r4, r7\n\t"
122080 #else
122081         "adc	r4, r7\n\t"
122082 #endif
122083 #ifdef WOLFSSL_KEIL
122084         "adcs	r5, r5, %[r]\n\t"
122085 #elif defined(__clang__)
122086         "adcs	r5, %[r]\n\t"
122087 #else
122088         "adc	r5, %[r]\n\t"
122089 #endif
122090         "str	r3, [sp, #24]\n\t"
122091         "#  A[0] * B[7]\n\t"
122092         "movs	r3, #0\n\t"
122093         "mov	%[a], r9\n\t"
122094         "mov	%[b], r10\n\t"
122095         "ldr	%[a], [%[a]]\n\t"
122096         "ldr	%[b], [%[b], #28]\n\t"
122097         "uxth	r6, %[a]\n\t"
122098         "uxth	r7, %[b]\n\t"
122099 #ifdef WOLFSSL_KEIL
122100         "muls	r7, r6, r7\n\t"
122101 #elif defined(__clang__)
122102         "muls	r7, r6\n\t"
122103 #else
122104         "mul	r7, r6\n\t"
122105 #endif
122106 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122107         "adds	r4, r4, r7\n\t"
122108 #else
122109         "add	r4, r4, r7\n\t"
122110 #endif
122111 #ifdef WOLFSSL_KEIL
122112         "adcs	r5, r5, %[r]\n\t"
122113 #elif defined(__clang__)
122114         "adcs	r5, %[r]\n\t"
122115 #else
122116         "adc	r5, %[r]\n\t"
122117 #endif
122118 #ifdef WOLFSSL_KEIL
122119         "adcs	r3, r3, %[r]\n\t"
122120 #elif defined(__clang__)
122121         "adcs	r3, %[r]\n\t"
122122 #else
122123         "adc	r3, %[r]\n\t"
122124 #endif
122125 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122126         "lsrs	r7, %[b], #16\n\t"
122127 #else
122128         "lsr	r7, %[b], #16\n\t"
122129 #endif
122130 #ifdef WOLFSSL_KEIL
122131         "muls	r6, r7, r6\n\t"
122132 #elif defined(__clang__)
122133         "muls	r6, r7\n\t"
122134 #else
122135         "mul	r6, r7\n\t"
122136 #endif
122137 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122138         "lsrs	r7, r6, #16\n\t"
122139 #else
122140         "lsr	r7, r6, #16\n\t"
122141 #endif
122142 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122143         "lsls	r6, r6, #16\n\t"
122144 #else
122145         "lsl	r6, r6, #16\n\t"
122146 #endif
122147 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122148         "adds	r4, r4, r6\n\t"
122149 #else
122150         "add	r4, r4, r6\n\t"
122151 #endif
122152 #ifdef WOLFSSL_KEIL
122153         "adcs	r5, r5, r7\n\t"
122154 #elif defined(__clang__)
122155         "adcs	r5, r7\n\t"
122156 #else
122157         "adc	r5, r7\n\t"
122158 #endif
122159 #ifdef WOLFSSL_KEIL
122160         "adcs	r3, r3, %[r]\n\t"
122161 #elif defined(__clang__)
122162         "adcs	r3, %[r]\n\t"
122163 #else
122164         "adc	r3, %[r]\n\t"
122165 #endif
122166 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122167         "lsrs	r6, %[a], #16\n\t"
122168 #else
122169         "lsr	r6, %[a], #16\n\t"
122170 #endif
122171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122172         "lsrs	r7, %[b], #16\n\t"
122173 #else
122174         "lsr	r7, %[b], #16\n\t"
122175 #endif
122176 #ifdef WOLFSSL_KEIL
122177         "muls	r7, r6, r7\n\t"
122178 #elif defined(__clang__)
122179         "muls	r7, r6\n\t"
122180 #else
122181         "mul	r7, r6\n\t"
122182 #endif
122183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122184         "adds	r5, r5, r7\n\t"
122185 #else
122186         "add	r5, r5, r7\n\t"
122187 #endif
122188 #ifdef WOLFSSL_KEIL
122189         "adcs	r3, r3, %[r]\n\t"
122190 #elif defined(__clang__)
122191         "adcs	r3, %[r]\n\t"
122192 #else
122193         "adc	r3, %[r]\n\t"
122194 #endif
122195         "uxth	r7, %[b]\n\t"
122196 #ifdef WOLFSSL_KEIL
122197         "muls	r6, r7, r6\n\t"
122198 #elif defined(__clang__)
122199         "muls	r6, r7\n\t"
122200 #else
122201         "mul	r6, r7\n\t"
122202 #endif
122203 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122204         "lsrs	r7, r6, #16\n\t"
122205 #else
122206         "lsr	r7, r6, #16\n\t"
122207 #endif
122208 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122209         "lsls	r6, r6, #16\n\t"
122210 #else
122211         "lsl	r6, r6, #16\n\t"
122212 #endif
122213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122214         "adds	r4, r4, r6\n\t"
122215 #else
122216         "add	r4, r4, r6\n\t"
122217 #endif
122218 #ifdef WOLFSSL_KEIL
122219         "adcs	r5, r5, r7\n\t"
122220 #elif defined(__clang__)
122221         "adcs	r5, r7\n\t"
122222 #else
122223         "adc	r5, r7\n\t"
122224 #endif
122225 #ifdef WOLFSSL_KEIL
122226         "adcs	r3, r3, %[r]\n\t"
122227 #elif defined(__clang__)
122228         "adcs	r3, %[r]\n\t"
122229 #else
122230         "adc	r3, %[r]\n\t"
122231 #endif
122232         "#  A[1] * B[6]\n\t"
122233         "mov	%[a], r9\n\t"
122234         "mov	%[b], r10\n\t"
122235         "ldr	%[a], [%[a], #4]\n\t"
122236         "ldr	%[b], [%[b], #24]\n\t"
122237         "uxth	r6, %[a]\n\t"
122238         "uxth	r7, %[b]\n\t"
122239 #ifdef WOLFSSL_KEIL
122240         "muls	r7, r6, r7\n\t"
122241 #elif defined(__clang__)
122242         "muls	r7, r6\n\t"
122243 #else
122244         "mul	r7, r6\n\t"
122245 #endif
122246 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122247         "adds	r4, r4, r7\n\t"
122248 #else
122249         "add	r4, r4, r7\n\t"
122250 #endif
122251 #ifdef WOLFSSL_KEIL
122252         "adcs	r5, r5, %[r]\n\t"
122253 #elif defined(__clang__)
122254         "adcs	r5, %[r]\n\t"
122255 #else
122256         "adc	r5, %[r]\n\t"
122257 #endif
122258 #ifdef WOLFSSL_KEIL
122259         "adcs	r3, r3, %[r]\n\t"
122260 #elif defined(__clang__)
122261         "adcs	r3, %[r]\n\t"
122262 #else
122263         "adc	r3, %[r]\n\t"
122264 #endif
122265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122266         "lsrs	r7, %[b], #16\n\t"
122267 #else
122268         "lsr	r7, %[b], #16\n\t"
122269 #endif
122270 #ifdef WOLFSSL_KEIL
122271         "muls	r6, r7, r6\n\t"
122272 #elif defined(__clang__)
122273         "muls	r6, r7\n\t"
122274 #else
122275         "mul	r6, r7\n\t"
122276 #endif
122277 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122278         "lsrs	r7, r6, #16\n\t"
122279 #else
122280         "lsr	r7, r6, #16\n\t"
122281 #endif
122282 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122283         "lsls	r6, r6, #16\n\t"
122284 #else
122285         "lsl	r6, r6, #16\n\t"
122286 #endif
122287 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122288         "adds	r4, r4, r6\n\t"
122289 #else
122290         "add	r4, r4, r6\n\t"
122291 #endif
122292 #ifdef WOLFSSL_KEIL
122293         "adcs	r5, r5, r7\n\t"
122294 #elif defined(__clang__)
122295         "adcs	r5, r7\n\t"
122296 #else
122297         "adc	r5, r7\n\t"
122298 #endif
122299 #ifdef WOLFSSL_KEIL
122300         "adcs	r3, r3, %[r]\n\t"
122301 #elif defined(__clang__)
122302         "adcs	r3, %[r]\n\t"
122303 #else
122304         "adc	r3, %[r]\n\t"
122305 #endif
122306 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122307         "lsrs	r6, %[a], #16\n\t"
122308 #else
122309         "lsr	r6, %[a], #16\n\t"
122310 #endif
122311 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122312         "lsrs	r7, %[b], #16\n\t"
122313 #else
122314         "lsr	r7, %[b], #16\n\t"
122315 #endif
122316 #ifdef WOLFSSL_KEIL
122317         "muls	r7, r6, r7\n\t"
122318 #elif defined(__clang__)
122319         "muls	r7, r6\n\t"
122320 #else
122321         "mul	r7, r6\n\t"
122322 #endif
122323 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122324         "adds	r5, r5, r7\n\t"
122325 #else
122326         "add	r5, r5, r7\n\t"
122327 #endif
122328 #ifdef WOLFSSL_KEIL
122329         "adcs	r3, r3, %[r]\n\t"
122330 #elif defined(__clang__)
122331         "adcs	r3, %[r]\n\t"
122332 #else
122333         "adc	r3, %[r]\n\t"
122334 #endif
122335         "uxth	r7, %[b]\n\t"
122336 #ifdef WOLFSSL_KEIL
122337         "muls	r6, r7, r6\n\t"
122338 #elif defined(__clang__)
122339         "muls	r6, r7\n\t"
122340 #else
122341         "mul	r6, r7\n\t"
122342 #endif
122343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122344         "lsrs	r7, r6, #16\n\t"
122345 #else
122346         "lsr	r7, r6, #16\n\t"
122347 #endif
122348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122349         "lsls	r6, r6, #16\n\t"
122350 #else
122351         "lsl	r6, r6, #16\n\t"
122352 #endif
122353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122354         "adds	r4, r4, r6\n\t"
122355 #else
122356         "add	r4, r4, r6\n\t"
122357 #endif
122358 #ifdef WOLFSSL_KEIL
122359         "adcs	r5, r5, r7\n\t"
122360 #elif defined(__clang__)
122361         "adcs	r5, r7\n\t"
122362 #else
122363         "adc	r5, r7\n\t"
122364 #endif
122365 #ifdef WOLFSSL_KEIL
122366         "adcs	r3, r3, %[r]\n\t"
122367 #elif defined(__clang__)
122368         "adcs	r3, %[r]\n\t"
122369 #else
122370         "adc	r3, %[r]\n\t"
122371 #endif
122372         "#  A[2] * B[5]\n\t"
122373         "mov	%[a], r9\n\t"
122374         "mov	%[b], r10\n\t"
122375         "ldr	%[a], [%[a], #8]\n\t"
122376         "ldr	%[b], [%[b], #20]\n\t"
122377         "uxth	r6, %[a]\n\t"
122378         "uxth	r7, %[b]\n\t"
122379 #ifdef WOLFSSL_KEIL
122380         "muls	r7, r6, r7\n\t"
122381 #elif defined(__clang__)
122382         "muls	r7, r6\n\t"
122383 #else
122384         "mul	r7, r6\n\t"
122385 #endif
122386 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122387         "adds	r4, r4, r7\n\t"
122388 #else
122389         "add	r4, r4, r7\n\t"
122390 #endif
122391 #ifdef WOLFSSL_KEIL
122392         "adcs	r5, r5, %[r]\n\t"
122393 #elif defined(__clang__)
122394         "adcs	r5, %[r]\n\t"
122395 #else
122396         "adc	r5, %[r]\n\t"
122397 #endif
122398 #ifdef WOLFSSL_KEIL
122399         "adcs	r3, r3, %[r]\n\t"
122400 #elif defined(__clang__)
122401         "adcs	r3, %[r]\n\t"
122402 #else
122403         "adc	r3, %[r]\n\t"
122404 #endif
122405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122406         "lsrs	r7, %[b], #16\n\t"
122407 #else
122408         "lsr	r7, %[b], #16\n\t"
122409 #endif
122410 #ifdef WOLFSSL_KEIL
122411         "muls	r6, r7, r6\n\t"
122412 #elif defined(__clang__)
122413         "muls	r6, r7\n\t"
122414 #else
122415         "mul	r6, r7\n\t"
122416 #endif
122417 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122418         "lsrs	r7, r6, #16\n\t"
122419 #else
122420         "lsr	r7, r6, #16\n\t"
122421 #endif
122422 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122423         "lsls	r6, r6, #16\n\t"
122424 #else
122425         "lsl	r6, r6, #16\n\t"
122426 #endif
122427 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122428         "adds	r4, r4, r6\n\t"
122429 #else
122430         "add	r4, r4, r6\n\t"
122431 #endif
122432 #ifdef WOLFSSL_KEIL
122433         "adcs	r5, r5, r7\n\t"
122434 #elif defined(__clang__)
122435         "adcs	r5, r7\n\t"
122436 #else
122437         "adc	r5, r7\n\t"
122438 #endif
122439 #ifdef WOLFSSL_KEIL
122440         "adcs	r3, r3, %[r]\n\t"
122441 #elif defined(__clang__)
122442         "adcs	r3, %[r]\n\t"
122443 #else
122444         "adc	r3, %[r]\n\t"
122445 #endif
122446 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122447         "lsrs	r6, %[a], #16\n\t"
122448 #else
122449         "lsr	r6, %[a], #16\n\t"
122450 #endif
122451 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122452         "lsrs	r7, %[b], #16\n\t"
122453 #else
122454         "lsr	r7, %[b], #16\n\t"
122455 #endif
122456 #ifdef WOLFSSL_KEIL
122457         "muls	r7, r6, r7\n\t"
122458 #elif defined(__clang__)
122459         "muls	r7, r6\n\t"
122460 #else
122461         "mul	r7, r6\n\t"
122462 #endif
122463 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122464         "adds	r5, r5, r7\n\t"
122465 #else
122466         "add	r5, r5, r7\n\t"
122467 #endif
122468 #ifdef WOLFSSL_KEIL
122469         "adcs	r3, r3, %[r]\n\t"
122470 #elif defined(__clang__)
122471         "adcs	r3, %[r]\n\t"
122472 #else
122473         "adc	r3, %[r]\n\t"
122474 #endif
122475         "uxth	r7, %[b]\n\t"
122476 #ifdef WOLFSSL_KEIL
122477         "muls	r6, r7, r6\n\t"
122478 #elif defined(__clang__)
122479         "muls	r6, r7\n\t"
122480 #else
122481         "mul	r6, r7\n\t"
122482 #endif
122483 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122484         "lsrs	r7, r6, #16\n\t"
122485 #else
122486         "lsr	r7, r6, #16\n\t"
122487 #endif
122488 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122489         "lsls	r6, r6, #16\n\t"
122490 #else
122491         "lsl	r6, r6, #16\n\t"
122492 #endif
122493 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122494         "adds	r4, r4, r6\n\t"
122495 #else
122496         "add	r4, r4, r6\n\t"
122497 #endif
122498 #ifdef WOLFSSL_KEIL
122499         "adcs	r5, r5, r7\n\t"
122500 #elif defined(__clang__)
122501         "adcs	r5, r7\n\t"
122502 #else
122503         "adc	r5, r7\n\t"
122504 #endif
122505 #ifdef WOLFSSL_KEIL
122506         "adcs	r3, r3, %[r]\n\t"
122507 #elif defined(__clang__)
122508         "adcs	r3, %[r]\n\t"
122509 #else
122510         "adc	r3, %[r]\n\t"
122511 #endif
122512         "#  A[3] * B[4]\n\t"
122513         "mov	%[a], r9\n\t"
122514         "mov	%[b], r10\n\t"
122515         "ldr	%[a], [%[a], #12]\n\t"
122516         "ldr	%[b], [%[b], #16]\n\t"
122517         "uxth	r6, %[a]\n\t"
122518         "uxth	r7, %[b]\n\t"
122519 #ifdef WOLFSSL_KEIL
122520         "muls	r7, r6, r7\n\t"
122521 #elif defined(__clang__)
122522         "muls	r7, r6\n\t"
122523 #else
122524         "mul	r7, r6\n\t"
122525 #endif
122526 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122527         "adds	r4, r4, r7\n\t"
122528 #else
122529         "add	r4, r4, r7\n\t"
122530 #endif
122531 #ifdef WOLFSSL_KEIL
122532         "adcs	r5, r5, %[r]\n\t"
122533 #elif defined(__clang__)
122534         "adcs	r5, %[r]\n\t"
122535 #else
122536         "adc	r5, %[r]\n\t"
122537 #endif
122538 #ifdef WOLFSSL_KEIL
122539         "adcs	r3, r3, %[r]\n\t"
122540 #elif defined(__clang__)
122541         "adcs	r3, %[r]\n\t"
122542 #else
122543         "adc	r3, %[r]\n\t"
122544 #endif
122545 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122546         "lsrs	r7, %[b], #16\n\t"
122547 #else
122548         "lsr	r7, %[b], #16\n\t"
122549 #endif
122550 #ifdef WOLFSSL_KEIL
122551         "muls	r6, r7, r6\n\t"
122552 #elif defined(__clang__)
122553         "muls	r6, r7\n\t"
122554 #else
122555         "mul	r6, r7\n\t"
122556 #endif
122557 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122558         "lsrs	r7, r6, #16\n\t"
122559 #else
122560         "lsr	r7, r6, #16\n\t"
122561 #endif
122562 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122563         "lsls	r6, r6, #16\n\t"
122564 #else
122565         "lsl	r6, r6, #16\n\t"
122566 #endif
122567 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122568         "adds	r4, r4, r6\n\t"
122569 #else
122570         "add	r4, r4, r6\n\t"
122571 #endif
122572 #ifdef WOLFSSL_KEIL
122573         "adcs	r5, r5, r7\n\t"
122574 #elif defined(__clang__)
122575         "adcs	r5, r7\n\t"
122576 #else
122577         "adc	r5, r7\n\t"
122578 #endif
122579 #ifdef WOLFSSL_KEIL
122580         "adcs	r3, r3, %[r]\n\t"
122581 #elif defined(__clang__)
122582         "adcs	r3, %[r]\n\t"
122583 #else
122584         "adc	r3, %[r]\n\t"
122585 #endif
122586 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122587         "lsrs	r6, %[a], #16\n\t"
122588 #else
122589         "lsr	r6, %[a], #16\n\t"
122590 #endif
122591 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122592         "lsrs	r7, %[b], #16\n\t"
122593 #else
122594         "lsr	r7, %[b], #16\n\t"
122595 #endif
122596 #ifdef WOLFSSL_KEIL
122597         "muls	r7, r6, r7\n\t"
122598 #elif defined(__clang__)
122599         "muls	r7, r6\n\t"
122600 #else
122601         "mul	r7, r6\n\t"
122602 #endif
122603 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122604         "adds	r5, r5, r7\n\t"
122605 #else
122606         "add	r5, r5, r7\n\t"
122607 #endif
122608 #ifdef WOLFSSL_KEIL
122609         "adcs	r3, r3, %[r]\n\t"
122610 #elif defined(__clang__)
122611         "adcs	r3, %[r]\n\t"
122612 #else
122613         "adc	r3, %[r]\n\t"
122614 #endif
122615         "uxth	r7, %[b]\n\t"
122616 #ifdef WOLFSSL_KEIL
122617         "muls	r6, r7, r6\n\t"
122618 #elif defined(__clang__)
122619         "muls	r6, r7\n\t"
122620 #else
122621         "mul	r6, r7\n\t"
122622 #endif
122623 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122624         "lsrs	r7, r6, #16\n\t"
122625 #else
122626         "lsr	r7, r6, #16\n\t"
122627 #endif
122628 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122629         "lsls	r6, r6, #16\n\t"
122630 #else
122631         "lsl	r6, r6, #16\n\t"
122632 #endif
122633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122634         "adds	r4, r4, r6\n\t"
122635 #else
122636         "add	r4, r4, r6\n\t"
122637 #endif
122638 #ifdef WOLFSSL_KEIL
122639         "adcs	r5, r5, r7\n\t"
122640 #elif defined(__clang__)
122641         "adcs	r5, r7\n\t"
122642 #else
122643         "adc	r5, r7\n\t"
122644 #endif
122645 #ifdef WOLFSSL_KEIL
122646         "adcs	r3, r3, %[r]\n\t"
122647 #elif defined(__clang__)
122648         "adcs	r3, %[r]\n\t"
122649 #else
122650         "adc	r3, %[r]\n\t"
122651 #endif
122652         "#  A[4] * B[3]\n\t"
122653         "mov	%[a], r9\n\t"
122654         "mov	%[b], r10\n\t"
122655         "ldr	%[a], [%[a], #16]\n\t"
122656         "ldr	%[b], [%[b], #12]\n\t"
122657         "uxth	r6, %[a]\n\t"
122658         "uxth	r7, %[b]\n\t"
122659 #ifdef WOLFSSL_KEIL
122660         "muls	r7, r6, r7\n\t"
122661 #elif defined(__clang__)
122662         "muls	r7, r6\n\t"
122663 #else
122664         "mul	r7, r6\n\t"
122665 #endif
122666 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122667         "adds	r4, r4, r7\n\t"
122668 #else
122669         "add	r4, r4, r7\n\t"
122670 #endif
122671 #ifdef WOLFSSL_KEIL
122672         "adcs	r5, r5, %[r]\n\t"
122673 #elif defined(__clang__)
122674         "adcs	r5, %[r]\n\t"
122675 #else
122676         "adc	r5, %[r]\n\t"
122677 #endif
122678 #ifdef WOLFSSL_KEIL
122679         "adcs	r3, r3, %[r]\n\t"
122680 #elif defined(__clang__)
122681         "adcs	r3, %[r]\n\t"
122682 #else
122683         "adc	r3, %[r]\n\t"
122684 #endif
122685 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122686         "lsrs	r7, %[b], #16\n\t"
122687 #else
122688         "lsr	r7, %[b], #16\n\t"
122689 #endif
122690 #ifdef WOLFSSL_KEIL
122691         "muls	r6, r7, r6\n\t"
122692 #elif defined(__clang__)
122693         "muls	r6, r7\n\t"
122694 #else
122695         "mul	r6, r7\n\t"
122696 #endif
122697 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122698         "lsrs	r7, r6, #16\n\t"
122699 #else
122700         "lsr	r7, r6, #16\n\t"
122701 #endif
122702 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122703         "lsls	r6, r6, #16\n\t"
122704 #else
122705         "lsl	r6, r6, #16\n\t"
122706 #endif
122707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122708         "adds	r4, r4, r6\n\t"
122709 #else
122710         "add	r4, r4, r6\n\t"
122711 #endif
122712 #ifdef WOLFSSL_KEIL
122713         "adcs	r5, r5, r7\n\t"
122714 #elif defined(__clang__)
122715         "adcs	r5, r7\n\t"
122716 #else
122717         "adc	r5, r7\n\t"
122718 #endif
122719 #ifdef WOLFSSL_KEIL
122720         "adcs	r3, r3, %[r]\n\t"
122721 #elif defined(__clang__)
122722         "adcs	r3, %[r]\n\t"
122723 #else
122724         "adc	r3, %[r]\n\t"
122725 #endif
122726 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122727         "lsrs	r6, %[a], #16\n\t"
122728 #else
122729         "lsr	r6, %[a], #16\n\t"
122730 #endif
122731 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122732         "lsrs	r7, %[b], #16\n\t"
122733 #else
122734         "lsr	r7, %[b], #16\n\t"
122735 #endif
122736 #ifdef WOLFSSL_KEIL
122737         "muls	r7, r6, r7\n\t"
122738 #elif defined(__clang__)
122739         "muls	r7, r6\n\t"
122740 #else
122741         "mul	r7, r6\n\t"
122742 #endif
122743 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122744         "adds	r5, r5, r7\n\t"
122745 #else
122746         "add	r5, r5, r7\n\t"
122747 #endif
122748 #ifdef WOLFSSL_KEIL
122749         "adcs	r3, r3, %[r]\n\t"
122750 #elif defined(__clang__)
122751         "adcs	r3, %[r]\n\t"
122752 #else
122753         "adc	r3, %[r]\n\t"
122754 #endif
122755         "uxth	r7, %[b]\n\t"
122756 #ifdef WOLFSSL_KEIL
122757         "muls	r6, r7, r6\n\t"
122758 #elif defined(__clang__)
122759         "muls	r6, r7\n\t"
122760 #else
122761         "mul	r6, r7\n\t"
122762 #endif
122763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122764         "lsrs	r7, r6, #16\n\t"
122765 #else
122766         "lsr	r7, r6, #16\n\t"
122767 #endif
122768 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122769         "lsls	r6, r6, #16\n\t"
122770 #else
122771         "lsl	r6, r6, #16\n\t"
122772 #endif
122773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122774         "adds	r4, r4, r6\n\t"
122775 #else
122776         "add	r4, r4, r6\n\t"
122777 #endif
122778 #ifdef WOLFSSL_KEIL
122779         "adcs	r5, r5, r7\n\t"
122780 #elif defined(__clang__)
122781         "adcs	r5, r7\n\t"
122782 #else
122783         "adc	r5, r7\n\t"
122784 #endif
122785 #ifdef WOLFSSL_KEIL
122786         "adcs	r3, r3, %[r]\n\t"
122787 #elif defined(__clang__)
122788         "adcs	r3, %[r]\n\t"
122789 #else
122790         "adc	r3, %[r]\n\t"
122791 #endif
122792         "#  A[5] * B[2]\n\t"
122793         "mov	%[a], r9\n\t"
122794         "mov	%[b], r10\n\t"
122795         "ldr	%[a], [%[a], #20]\n\t"
122796         "ldr	%[b], [%[b], #8]\n\t"
122797         "uxth	r6, %[a]\n\t"
122798         "uxth	r7, %[b]\n\t"
122799 #ifdef WOLFSSL_KEIL
122800         "muls	r7, r6, r7\n\t"
122801 #elif defined(__clang__)
122802         "muls	r7, r6\n\t"
122803 #else
122804         "mul	r7, r6\n\t"
122805 #endif
122806 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122807         "adds	r4, r4, r7\n\t"
122808 #else
122809         "add	r4, r4, r7\n\t"
122810 #endif
122811 #ifdef WOLFSSL_KEIL
122812         "adcs	r5, r5, %[r]\n\t"
122813 #elif defined(__clang__)
122814         "adcs	r5, %[r]\n\t"
122815 #else
122816         "adc	r5, %[r]\n\t"
122817 #endif
122818 #ifdef WOLFSSL_KEIL
122819         "adcs	r3, r3, %[r]\n\t"
122820 #elif defined(__clang__)
122821         "adcs	r3, %[r]\n\t"
122822 #else
122823         "adc	r3, %[r]\n\t"
122824 #endif
122825 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122826         "lsrs	r7, %[b], #16\n\t"
122827 #else
122828         "lsr	r7, %[b], #16\n\t"
122829 #endif
122830 #ifdef WOLFSSL_KEIL
122831         "muls	r6, r7, r6\n\t"
122832 #elif defined(__clang__)
122833         "muls	r6, r7\n\t"
122834 #else
122835         "mul	r6, r7\n\t"
122836 #endif
122837 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122838         "lsrs	r7, r6, #16\n\t"
122839 #else
122840         "lsr	r7, r6, #16\n\t"
122841 #endif
122842 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122843         "lsls	r6, r6, #16\n\t"
122844 #else
122845         "lsl	r6, r6, #16\n\t"
122846 #endif
122847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122848         "adds	r4, r4, r6\n\t"
122849 #else
122850         "add	r4, r4, r6\n\t"
122851 #endif
122852 #ifdef WOLFSSL_KEIL
122853         "adcs	r5, r5, r7\n\t"
122854 #elif defined(__clang__)
122855         "adcs	r5, r7\n\t"
122856 #else
122857         "adc	r5, r7\n\t"
122858 #endif
122859 #ifdef WOLFSSL_KEIL
122860         "adcs	r3, r3, %[r]\n\t"
122861 #elif defined(__clang__)
122862         "adcs	r3, %[r]\n\t"
122863 #else
122864         "adc	r3, %[r]\n\t"
122865 #endif
122866 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122867         "lsrs	r6, %[a], #16\n\t"
122868 #else
122869         "lsr	r6, %[a], #16\n\t"
122870 #endif
122871 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122872         "lsrs	r7, %[b], #16\n\t"
122873 #else
122874         "lsr	r7, %[b], #16\n\t"
122875 #endif
122876 #ifdef WOLFSSL_KEIL
122877         "muls	r7, r6, r7\n\t"
122878 #elif defined(__clang__)
122879         "muls	r7, r6\n\t"
122880 #else
122881         "mul	r7, r6\n\t"
122882 #endif
122883 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122884         "adds	r5, r5, r7\n\t"
122885 #else
122886         "add	r5, r5, r7\n\t"
122887 #endif
122888 #ifdef WOLFSSL_KEIL
122889         "adcs	r3, r3, %[r]\n\t"
122890 #elif defined(__clang__)
122891         "adcs	r3, %[r]\n\t"
122892 #else
122893         "adc	r3, %[r]\n\t"
122894 #endif
122895         "uxth	r7, %[b]\n\t"
122896 #ifdef WOLFSSL_KEIL
122897         "muls	r6, r7, r6\n\t"
122898 #elif defined(__clang__)
122899         "muls	r6, r7\n\t"
122900 #else
122901         "mul	r6, r7\n\t"
122902 #endif
122903 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122904         "lsrs	r7, r6, #16\n\t"
122905 #else
122906         "lsr	r7, r6, #16\n\t"
122907 #endif
122908 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122909         "lsls	r6, r6, #16\n\t"
122910 #else
122911         "lsl	r6, r6, #16\n\t"
122912 #endif
122913 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122914         "adds	r4, r4, r6\n\t"
122915 #else
122916         "add	r4, r4, r6\n\t"
122917 #endif
122918 #ifdef WOLFSSL_KEIL
122919         "adcs	r5, r5, r7\n\t"
122920 #elif defined(__clang__)
122921         "adcs	r5, r7\n\t"
122922 #else
122923         "adc	r5, r7\n\t"
122924 #endif
122925 #ifdef WOLFSSL_KEIL
122926         "adcs	r3, r3, %[r]\n\t"
122927 #elif defined(__clang__)
122928         "adcs	r3, %[r]\n\t"
122929 #else
122930         "adc	r3, %[r]\n\t"
122931 #endif
122932         "#  A[6] * B[1]\n\t"
122933         "mov	%[a], r9\n\t"
122934         "mov	%[b], r10\n\t"
122935         "ldr	%[a], [%[a], #24]\n\t"
122936         "ldr	%[b], [%[b], #4]\n\t"
122937         "uxth	r6, %[a]\n\t"
122938         "uxth	r7, %[b]\n\t"
122939 #ifdef WOLFSSL_KEIL
122940         "muls	r7, r6, r7\n\t"
122941 #elif defined(__clang__)
122942         "muls	r7, r6\n\t"
122943 #else
122944         "mul	r7, r6\n\t"
122945 #endif
122946 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122947         "adds	r4, r4, r7\n\t"
122948 #else
122949         "add	r4, r4, r7\n\t"
122950 #endif
122951 #ifdef WOLFSSL_KEIL
122952         "adcs	r5, r5, %[r]\n\t"
122953 #elif defined(__clang__)
122954         "adcs	r5, %[r]\n\t"
122955 #else
122956         "adc	r5, %[r]\n\t"
122957 #endif
122958 #ifdef WOLFSSL_KEIL
122959         "adcs	r3, r3, %[r]\n\t"
122960 #elif defined(__clang__)
122961         "adcs	r3, %[r]\n\t"
122962 #else
122963         "adc	r3, %[r]\n\t"
122964 #endif
122965 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122966         "lsrs	r7, %[b], #16\n\t"
122967 #else
122968         "lsr	r7, %[b], #16\n\t"
122969 #endif
122970 #ifdef WOLFSSL_KEIL
122971         "muls	r6, r7, r6\n\t"
122972 #elif defined(__clang__)
122973         "muls	r6, r7\n\t"
122974 #else
122975         "mul	r6, r7\n\t"
122976 #endif
122977 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122978         "lsrs	r7, r6, #16\n\t"
122979 #else
122980         "lsr	r7, r6, #16\n\t"
122981 #endif
122982 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122983         "lsls	r6, r6, #16\n\t"
122984 #else
122985         "lsl	r6, r6, #16\n\t"
122986 #endif
122987 #if defined(__clang__) || defined(WOLFSSL_KEIL)
122988         "adds	r4, r4, r6\n\t"
122989 #else
122990         "add	r4, r4, r6\n\t"
122991 #endif
122992 #ifdef WOLFSSL_KEIL
122993         "adcs	r5, r5, r7\n\t"
122994 #elif defined(__clang__)
122995         "adcs	r5, r7\n\t"
122996 #else
122997         "adc	r5, r7\n\t"
122998 #endif
122999 #ifdef WOLFSSL_KEIL
123000         "adcs	r3, r3, %[r]\n\t"
123001 #elif defined(__clang__)
123002         "adcs	r3, %[r]\n\t"
123003 #else
123004         "adc	r3, %[r]\n\t"
123005 #endif
123006 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123007         "lsrs	r6, %[a], #16\n\t"
123008 #else
123009         "lsr	r6, %[a], #16\n\t"
123010 #endif
123011 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123012         "lsrs	r7, %[b], #16\n\t"
123013 #else
123014         "lsr	r7, %[b], #16\n\t"
123015 #endif
123016 #ifdef WOLFSSL_KEIL
123017         "muls	r7, r6, r7\n\t"
123018 #elif defined(__clang__)
123019         "muls	r7, r6\n\t"
123020 #else
123021         "mul	r7, r6\n\t"
123022 #endif
123023 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123024         "adds	r5, r5, r7\n\t"
123025 #else
123026         "add	r5, r5, r7\n\t"
123027 #endif
123028 #ifdef WOLFSSL_KEIL
123029         "adcs	r3, r3, %[r]\n\t"
123030 #elif defined(__clang__)
123031         "adcs	r3, %[r]\n\t"
123032 #else
123033         "adc	r3, %[r]\n\t"
123034 #endif
123035         "uxth	r7, %[b]\n\t"
123036 #ifdef WOLFSSL_KEIL
123037         "muls	r6, r7, r6\n\t"
123038 #elif defined(__clang__)
123039         "muls	r6, r7\n\t"
123040 #else
123041         "mul	r6, r7\n\t"
123042 #endif
123043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123044         "lsrs	r7, r6, #16\n\t"
123045 #else
123046         "lsr	r7, r6, #16\n\t"
123047 #endif
123048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123049         "lsls	r6, r6, #16\n\t"
123050 #else
123051         "lsl	r6, r6, #16\n\t"
123052 #endif
123053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123054         "adds	r4, r4, r6\n\t"
123055 #else
123056         "add	r4, r4, r6\n\t"
123057 #endif
123058 #ifdef WOLFSSL_KEIL
123059         "adcs	r5, r5, r7\n\t"
123060 #elif defined(__clang__)
123061         "adcs	r5, r7\n\t"
123062 #else
123063         "adc	r5, r7\n\t"
123064 #endif
123065 #ifdef WOLFSSL_KEIL
123066         "adcs	r3, r3, %[r]\n\t"
123067 #elif defined(__clang__)
123068         "adcs	r3, %[r]\n\t"
123069 #else
123070         "adc	r3, %[r]\n\t"
123071 #endif
123072         "#  A[7] * B[0]\n\t"
123073         "mov	%[a], r9\n\t"
123074         "mov	%[b], r10\n\t"
123075         "ldr	%[a], [%[a], #28]\n\t"
123076         "ldr	%[b], [%[b]]\n\t"
123077         "uxth	r6, %[a]\n\t"
123078         "uxth	r7, %[b]\n\t"
123079 #ifdef WOLFSSL_KEIL
123080         "muls	r7, r6, r7\n\t"
123081 #elif defined(__clang__)
123082         "muls	r7, r6\n\t"
123083 #else
123084         "mul	r7, r6\n\t"
123085 #endif
123086 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123087         "adds	r4, r4, r7\n\t"
123088 #else
123089         "add	r4, r4, r7\n\t"
123090 #endif
123091 #ifdef WOLFSSL_KEIL
123092         "adcs	r5, r5, %[r]\n\t"
123093 #elif defined(__clang__)
123094         "adcs	r5, %[r]\n\t"
123095 #else
123096         "adc	r5, %[r]\n\t"
123097 #endif
123098 #ifdef WOLFSSL_KEIL
123099         "adcs	r3, r3, %[r]\n\t"
123100 #elif defined(__clang__)
123101         "adcs	r3, %[r]\n\t"
123102 #else
123103         "adc	r3, %[r]\n\t"
123104 #endif
123105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123106         "lsrs	r7, %[b], #16\n\t"
123107 #else
123108         "lsr	r7, %[b], #16\n\t"
123109 #endif
123110 #ifdef WOLFSSL_KEIL
123111         "muls	r6, r7, r6\n\t"
123112 #elif defined(__clang__)
123113         "muls	r6, r7\n\t"
123114 #else
123115         "mul	r6, r7\n\t"
123116 #endif
123117 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123118         "lsrs	r7, r6, #16\n\t"
123119 #else
123120         "lsr	r7, r6, #16\n\t"
123121 #endif
123122 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123123         "lsls	r6, r6, #16\n\t"
123124 #else
123125         "lsl	r6, r6, #16\n\t"
123126 #endif
123127 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123128         "adds	r4, r4, r6\n\t"
123129 #else
123130         "add	r4, r4, r6\n\t"
123131 #endif
123132 #ifdef WOLFSSL_KEIL
123133         "adcs	r5, r5, r7\n\t"
123134 #elif defined(__clang__)
123135         "adcs	r5, r7\n\t"
123136 #else
123137         "adc	r5, r7\n\t"
123138 #endif
123139 #ifdef WOLFSSL_KEIL
123140         "adcs	r3, r3, %[r]\n\t"
123141 #elif defined(__clang__)
123142         "adcs	r3, %[r]\n\t"
123143 #else
123144         "adc	r3, %[r]\n\t"
123145 #endif
123146 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123147         "lsrs	r6, %[a], #16\n\t"
123148 #else
123149         "lsr	r6, %[a], #16\n\t"
123150 #endif
123151 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123152         "lsrs	r7, %[b], #16\n\t"
123153 #else
123154         "lsr	r7, %[b], #16\n\t"
123155 #endif
123156 #ifdef WOLFSSL_KEIL
123157         "muls	r7, r6, r7\n\t"
123158 #elif defined(__clang__)
123159         "muls	r7, r6\n\t"
123160 #else
123161         "mul	r7, r6\n\t"
123162 #endif
123163 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123164         "adds	r5, r5, r7\n\t"
123165 #else
123166         "add	r5, r5, r7\n\t"
123167 #endif
123168 #ifdef WOLFSSL_KEIL
123169         "adcs	r3, r3, %[r]\n\t"
123170 #elif defined(__clang__)
123171         "adcs	r3, %[r]\n\t"
123172 #else
123173         "adc	r3, %[r]\n\t"
123174 #endif
123175         "uxth	r7, %[b]\n\t"
123176 #ifdef WOLFSSL_KEIL
123177         "muls	r6, r7, r6\n\t"
123178 #elif defined(__clang__)
123179         "muls	r6, r7\n\t"
123180 #else
123181         "mul	r6, r7\n\t"
123182 #endif
123183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123184         "lsrs	r7, r6, #16\n\t"
123185 #else
123186         "lsr	r7, r6, #16\n\t"
123187 #endif
123188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123189         "lsls	r6, r6, #16\n\t"
123190 #else
123191         "lsl	r6, r6, #16\n\t"
123192 #endif
123193 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123194         "adds	r4, r4, r6\n\t"
123195 #else
123196         "add	r4, r4, r6\n\t"
123197 #endif
123198 #ifdef WOLFSSL_KEIL
123199         "adcs	r5, r5, r7\n\t"
123200 #elif defined(__clang__)
123201         "adcs	r5, r7\n\t"
123202 #else
123203         "adc	r5, r7\n\t"
123204 #endif
123205 #ifdef WOLFSSL_KEIL
123206         "adcs	r3, r3, %[r]\n\t"
123207 #elif defined(__clang__)
123208         "adcs	r3, %[r]\n\t"
123209 #else
123210         "adc	r3, %[r]\n\t"
123211 #endif
123212         "str	r4, [sp, #28]\n\t"
123213         "#  A[8] * B[0]\n\t"
123214         "movs	r4, #0\n\t"
123215         "mov	%[a], r9\n\t"
123216         "mov	%[b], r10\n\t"
123217         "ldr	%[a], [%[a], #32]\n\t"
123218         "ldr	%[b], [%[b]]\n\t"
123219         "uxth	r6, %[a]\n\t"
123220         "uxth	r7, %[b]\n\t"
123221 #ifdef WOLFSSL_KEIL
123222         "muls	r7, r6, r7\n\t"
123223 #elif defined(__clang__)
123224         "muls	r7, r6\n\t"
123225 #else
123226         "mul	r7, r6\n\t"
123227 #endif
123228 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123229         "adds	r5, r5, r7\n\t"
123230 #else
123231         "add	r5, r5, r7\n\t"
123232 #endif
123233 #ifdef WOLFSSL_KEIL
123234         "adcs	r3, r3, %[r]\n\t"
123235 #elif defined(__clang__)
123236         "adcs	r3, %[r]\n\t"
123237 #else
123238         "adc	r3, %[r]\n\t"
123239 #endif
123240 #ifdef WOLFSSL_KEIL
123241         "adcs	r4, r4, %[r]\n\t"
123242 #elif defined(__clang__)
123243         "adcs	r4, %[r]\n\t"
123244 #else
123245         "adc	r4, %[r]\n\t"
123246 #endif
123247 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123248         "lsrs	r7, %[b], #16\n\t"
123249 #else
123250         "lsr	r7, %[b], #16\n\t"
123251 #endif
123252 #ifdef WOLFSSL_KEIL
123253         "muls	r6, r7, r6\n\t"
123254 #elif defined(__clang__)
123255         "muls	r6, r7\n\t"
123256 #else
123257         "mul	r6, r7\n\t"
123258 #endif
123259 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123260         "lsrs	r7, r6, #16\n\t"
123261 #else
123262         "lsr	r7, r6, #16\n\t"
123263 #endif
123264 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123265         "lsls	r6, r6, #16\n\t"
123266 #else
123267         "lsl	r6, r6, #16\n\t"
123268 #endif
123269 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123270         "adds	r5, r5, r6\n\t"
123271 #else
123272         "add	r5, r5, r6\n\t"
123273 #endif
123274 #ifdef WOLFSSL_KEIL
123275         "adcs	r3, r3, r7\n\t"
123276 #elif defined(__clang__)
123277         "adcs	r3, r7\n\t"
123278 #else
123279         "adc	r3, r7\n\t"
123280 #endif
123281 #ifdef WOLFSSL_KEIL
123282         "adcs	r4, r4, %[r]\n\t"
123283 #elif defined(__clang__)
123284         "adcs	r4, %[r]\n\t"
123285 #else
123286         "adc	r4, %[r]\n\t"
123287 #endif
123288 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123289         "lsrs	r6, %[a], #16\n\t"
123290 #else
123291         "lsr	r6, %[a], #16\n\t"
123292 #endif
123293 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123294         "lsrs	r7, %[b], #16\n\t"
123295 #else
123296         "lsr	r7, %[b], #16\n\t"
123297 #endif
123298 #ifdef WOLFSSL_KEIL
123299         "muls	r7, r6, r7\n\t"
123300 #elif defined(__clang__)
123301         "muls	r7, r6\n\t"
123302 #else
123303         "mul	r7, r6\n\t"
123304 #endif
123305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123306         "adds	r3, r3, r7\n\t"
123307 #else
123308         "add	r3, r3, r7\n\t"
123309 #endif
123310 #ifdef WOLFSSL_KEIL
123311         "adcs	r4, r4, %[r]\n\t"
123312 #elif defined(__clang__)
123313         "adcs	r4, %[r]\n\t"
123314 #else
123315         "adc	r4, %[r]\n\t"
123316 #endif
123317         "uxth	r7, %[b]\n\t"
123318 #ifdef WOLFSSL_KEIL
123319         "muls	r6, r7, r6\n\t"
123320 #elif defined(__clang__)
123321         "muls	r6, r7\n\t"
123322 #else
123323         "mul	r6, r7\n\t"
123324 #endif
123325 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123326         "lsrs	r7, r6, #16\n\t"
123327 #else
123328         "lsr	r7, r6, #16\n\t"
123329 #endif
123330 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123331         "lsls	r6, r6, #16\n\t"
123332 #else
123333         "lsl	r6, r6, #16\n\t"
123334 #endif
123335 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123336         "adds	r5, r5, r6\n\t"
123337 #else
123338         "add	r5, r5, r6\n\t"
123339 #endif
123340 #ifdef WOLFSSL_KEIL
123341         "adcs	r3, r3, r7\n\t"
123342 #elif defined(__clang__)
123343         "adcs	r3, r7\n\t"
123344 #else
123345         "adc	r3, r7\n\t"
123346 #endif
123347 #ifdef WOLFSSL_KEIL
123348         "adcs	r4, r4, %[r]\n\t"
123349 #elif defined(__clang__)
123350         "adcs	r4, %[r]\n\t"
123351 #else
123352         "adc	r4, %[r]\n\t"
123353 #endif
123354         "#  A[7] * B[1]\n\t"
123355         "mov	%[a], r9\n\t"
123356         "mov	%[b], r10\n\t"
123357         "ldr	%[a], [%[a], #28]\n\t"
123358         "ldr	%[b], [%[b], #4]\n\t"
123359         "uxth	r6, %[a]\n\t"
123360         "uxth	r7, %[b]\n\t"
123361 #ifdef WOLFSSL_KEIL
123362         "muls	r7, r6, r7\n\t"
123363 #elif defined(__clang__)
123364         "muls	r7, r6\n\t"
123365 #else
123366         "mul	r7, r6\n\t"
123367 #endif
123368 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123369         "adds	r5, r5, r7\n\t"
123370 #else
123371         "add	r5, r5, r7\n\t"
123372 #endif
123373 #ifdef WOLFSSL_KEIL
123374         "adcs	r3, r3, %[r]\n\t"
123375 #elif defined(__clang__)
123376         "adcs	r3, %[r]\n\t"
123377 #else
123378         "adc	r3, %[r]\n\t"
123379 #endif
123380 #ifdef WOLFSSL_KEIL
123381         "adcs	r4, r4, %[r]\n\t"
123382 #elif defined(__clang__)
123383         "adcs	r4, %[r]\n\t"
123384 #else
123385         "adc	r4, %[r]\n\t"
123386 #endif
123387 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123388         "lsrs	r7, %[b], #16\n\t"
123389 #else
123390         "lsr	r7, %[b], #16\n\t"
123391 #endif
123392 #ifdef WOLFSSL_KEIL
123393         "muls	r6, r7, r6\n\t"
123394 #elif defined(__clang__)
123395         "muls	r6, r7\n\t"
123396 #else
123397         "mul	r6, r7\n\t"
123398 #endif
123399 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123400         "lsrs	r7, r6, #16\n\t"
123401 #else
123402         "lsr	r7, r6, #16\n\t"
123403 #endif
123404 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123405         "lsls	r6, r6, #16\n\t"
123406 #else
123407         "lsl	r6, r6, #16\n\t"
123408 #endif
123409 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123410         "adds	r5, r5, r6\n\t"
123411 #else
123412         "add	r5, r5, r6\n\t"
123413 #endif
123414 #ifdef WOLFSSL_KEIL
123415         "adcs	r3, r3, r7\n\t"
123416 #elif defined(__clang__)
123417         "adcs	r3, r7\n\t"
123418 #else
123419         "adc	r3, r7\n\t"
123420 #endif
123421 #ifdef WOLFSSL_KEIL
123422         "adcs	r4, r4, %[r]\n\t"
123423 #elif defined(__clang__)
123424         "adcs	r4, %[r]\n\t"
123425 #else
123426         "adc	r4, %[r]\n\t"
123427 #endif
123428 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123429         "lsrs	r6, %[a], #16\n\t"
123430 #else
123431         "lsr	r6, %[a], #16\n\t"
123432 #endif
123433 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123434         "lsrs	r7, %[b], #16\n\t"
123435 #else
123436         "lsr	r7, %[b], #16\n\t"
123437 #endif
123438 #ifdef WOLFSSL_KEIL
123439         "muls	r7, r6, r7\n\t"
123440 #elif defined(__clang__)
123441         "muls	r7, r6\n\t"
123442 #else
123443         "mul	r7, r6\n\t"
123444 #endif
123445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123446         "adds	r3, r3, r7\n\t"
123447 #else
123448         "add	r3, r3, r7\n\t"
123449 #endif
123450 #ifdef WOLFSSL_KEIL
123451         "adcs	r4, r4, %[r]\n\t"
123452 #elif defined(__clang__)
123453         "adcs	r4, %[r]\n\t"
123454 #else
123455         "adc	r4, %[r]\n\t"
123456 #endif
123457         "uxth	r7, %[b]\n\t"
123458 #ifdef WOLFSSL_KEIL
123459         "muls	r6, r7, r6\n\t"
123460 #elif defined(__clang__)
123461         "muls	r6, r7\n\t"
123462 #else
123463         "mul	r6, r7\n\t"
123464 #endif
123465 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123466         "lsrs	r7, r6, #16\n\t"
123467 #else
123468         "lsr	r7, r6, #16\n\t"
123469 #endif
123470 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123471         "lsls	r6, r6, #16\n\t"
123472 #else
123473         "lsl	r6, r6, #16\n\t"
123474 #endif
123475 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123476         "adds	r5, r5, r6\n\t"
123477 #else
123478         "add	r5, r5, r6\n\t"
123479 #endif
123480 #ifdef WOLFSSL_KEIL
123481         "adcs	r3, r3, r7\n\t"
123482 #elif defined(__clang__)
123483         "adcs	r3, r7\n\t"
123484 #else
123485         "adc	r3, r7\n\t"
123486 #endif
123487 #ifdef WOLFSSL_KEIL
123488         "adcs	r4, r4, %[r]\n\t"
123489 #elif defined(__clang__)
123490         "adcs	r4, %[r]\n\t"
123491 #else
123492         "adc	r4, %[r]\n\t"
123493 #endif
123494         "#  A[6] * B[2]\n\t"
123495         "mov	%[a], r9\n\t"
123496         "mov	%[b], r10\n\t"
123497         "ldr	%[a], [%[a], #24]\n\t"
123498         "ldr	%[b], [%[b], #8]\n\t"
123499         "uxth	r6, %[a]\n\t"
123500         "uxth	r7, %[b]\n\t"
123501 #ifdef WOLFSSL_KEIL
123502         "muls	r7, r6, r7\n\t"
123503 #elif defined(__clang__)
123504         "muls	r7, r6\n\t"
123505 #else
123506         "mul	r7, r6\n\t"
123507 #endif
123508 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123509         "adds	r5, r5, r7\n\t"
123510 #else
123511         "add	r5, r5, r7\n\t"
123512 #endif
123513 #ifdef WOLFSSL_KEIL
123514         "adcs	r3, r3, %[r]\n\t"
123515 #elif defined(__clang__)
123516         "adcs	r3, %[r]\n\t"
123517 #else
123518         "adc	r3, %[r]\n\t"
123519 #endif
123520 #ifdef WOLFSSL_KEIL
123521         "adcs	r4, r4, %[r]\n\t"
123522 #elif defined(__clang__)
123523         "adcs	r4, %[r]\n\t"
123524 #else
123525         "adc	r4, %[r]\n\t"
123526 #endif
123527 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123528         "lsrs	r7, %[b], #16\n\t"
123529 #else
123530         "lsr	r7, %[b], #16\n\t"
123531 #endif
123532 #ifdef WOLFSSL_KEIL
123533         "muls	r6, r7, r6\n\t"
123534 #elif defined(__clang__)
123535         "muls	r6, r7\n\t"
123536 #else
123537         "mul	r6, r7\n\t"
123538 #endif
123539 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123540         "lsrs	r7, r6, #16\n\t"
123541 #else
123542         "lsr	r7, r6, #16\n\t"
123543 #endif
123544 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123545         "lsls	r6, r6, #16\n\t"
123546 #else
123547         "lsl	r6, r6, #16\n\t"
123548 #endif
123549 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123550         "adds	r5, r5, r6\n\t"
123551 #else
123552         "add	r5, r5, r6\n\t"
123553 #endif
123554 #ifdef WOLFSSL_KEIL
123555         "adcs	r3, r3, r7\n\t"
123556 #elif defined(__clang__)
123557         "adcs	r3, r7\n\t"
123558 #else
123559         "adc	r3, r7\n\t"
123560 #endif
123561 #ifdef WOLFSSL_KEIL
123562         "adcs	r4, r4, %[r]\n\t"
123563 #elif defined(__clang__)
123564         "adcs	r4, %[r]\n\t"
123565 #else
123566         "adc	r4, %[r]\n\t"
123567 #endif
123568 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123569         "lsrs	r6, %[a], #16\n\t"
123570 #else
123571         "lsr	r6, %[a], #16\n\t"
123572 #endif
123573 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123574         "lsrs	r7, %[b], #16\n\t"
123575 #else
123576         "lsr	r7, %[b], #16\n\t"
123577 #endif
123578 #ifdef WOLFSSL_KEIL
123579         "muls	r7, r6, r7\n\t"
123580 #elif defined(__clang__)
123581         "muls	r7, r6\n\t"
123582 #else
123583         "mul	r7, r6\n\t"
123584 #endif
123585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123586         "adds	r3, r3, r7\n\t"
123587 #else
123588         "add	r3, r3, r7\n\t"
123589 #endif
123590 #ifdef WOLFSSL_KEIL
123591         "adcs	r4, r4, %[r]\n\t"
123592 #elif defined(__clang__)
123593         "adcs	r4, %[r]\n\t"
123594 #else
123595         "adc	r4, %[r]\n\t"
123596 #endif
123597         "uxth	r7, %[b]\n\t"
123598 #ifdef WOLFSSL_KEIL
123599         "muls	r6, r7, r6\n\t"
123600 #elif defined(__clang__)
123601         "muls	r6, r7\n\t"
123602 #else
123603         "mul	r6, r7\n\t"
123604 #endif
123605 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123606         "lsrs	r7, r6, #16\n\t"
123607 #else
123608         "lsr	r7, r6, #16\n\t"
123609 #endif
123610 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123611         "lsls	r6, r6, #16\n\t"
123612 #else
123613         "lsl	r6, r6, #16\n\t"
123614 #endif
123615 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123616         "adds	r5, r5, r6\n\t"
123617 #else
123618         "add	r5, r5, r6\n\t"
123619 #endif
123620 #ifdef WOLFSSL_KEIL
123621         "adcs	r3, r3, r7\n\t"
123622 #elif defined(__clang__)
123623         "adcs	r3, r7\n\t"
123624 #else
123625         "adc	r3, r7\n\t"
123626 #endif
123627 #ifdef WOLFSSL_KEIL
123628         "adcs	r4, r4, %[r]\n\t"
123629 #elif defined(__clang__)
123630         "adcs	r4, %[r]\n\t"
123631 #else
123632         "adc	r4, %[r]\n\t"
123633 #endif
123634         "#  A[5] * B[3]\n\t"
123635         "mov	%[a], r9\n\t"
123636         "mov	%[b], r10\n\t"
123637         "ldr	%[a], [%[a], #20]\n\t"
123638         "ldr	%[b], [%[b], #12]\n\t"
123639         "uxth	r6, %[a]\n\t"
123640         "uxth	r7, %[b]\n\t"
123641 #ifdef WOLFSSL_KEIL
123642         "muls	r7, r6, r7\n\t"
123643 #elif defined(__clang__)
123644         "muls	r7, r6\n\t"
123645 #else
123646         "mul	r7, r6\n\t"
123647 #endif
123648 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123649         "adds	r5, r5, r7\n\t"
123650 #else
123651         "add	r5, r5, r7\n\t"
123652 #endif
123653 #ifdef WOLFSSL_KEIL
123654         "adcs	r3, r3, %[r]\n\t"
123655 #elif defined(__clang__)
123656         "adcs	r3, %[r]\n\t"
123657 #else
123658         "adc	r3, %[r]\n\t"
123659 #endif
123660 #ifdef WOLFSSL_KEIL
123661         "adcs	r4, r4, %[r]\n\t"
123662 #elif defined(__clang__)
123663         "adcs	r4, %[r]\n\t"
123664 #else
123665         "adc	r4, %[r]\n\t"
123666 #endif
123667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123668         "lsrs	r7, %[b], #16\n\t"
123669 #else
123670         "lsr	r7, %[b], #16\n\t"
123671 #endif
123672 #ifdef WOLFSSL_KEIL
123673         "muls	r6, r7, r6\n\t"
123674 #elif defined(__clang__)
123675         "muls	r6, r7\n\t"
123676 #else
123677         "mul	r6, r7\n\t"
123678 #endif
123679 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123680         "lsrs	r7, r6, #16\n\t"
123681 #else
123682         "lsr	r7, r6, #16\n\t"
123683 #endif
123684 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123685         "lsls	r6, r6, #16\n\t"
123686 #else
123687         "lsl	r6, r6, #16\n\t"
123688 #endif
123689 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123690         "adds	r5, r5, r6\n\t"
123691 #else
123692         "add	r5, r5, r6\n\t"
123693 #endif
123694 #ifdef WOLFSSL_KEIL
123695         "adcs	r3, r3, r7\n\t"
123696 #elif defined(__clang__)
123697         "adcs	r3, r7\n\t"
123698 #else
123699         "adc	r3, r7\n\t"
123700 #endif
123701 #ifdef WOLFSSL_KEIL
123702         "adcs	r4, r4, %[r]\n\t"
123703 #elif defined(__clang__)
123704         "adcs	r4, %[r]\n\t"
123705 #else
123706         "adc	r4, %[r]\n\t"
123707 #endif
123708 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123709         "lsrs	r6, %[a], #16\n\t"
123710 #else
123711         "lsr	r6, %[a], #16\n\t"
123712 #endif
123713 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123714         "lsrs	r7, %[b], #16\n\t"
123715 #else
123716         "lsr	r7, %[b], #16\n\t"
123717 #endif
123718 #ifdef WOLFSSL_KEIL
123719         "muls	r7, r6, r7\n\t"
123720 #elif defined(__clang__)
123721         "muls	r7, r6\n\t"
123722 #else
123723         "mul	r7, r6\n\t"
123724 #endif
123725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123726         "adds	r3, r3, r7\n\t"
123727 #else
123728         "add	r3, r3, r7\n\t"
123729 #endif
123730 #ifdef WOLFSSL_KEIL
123731         "adcs	r4, r4, %[r]\n\t"
123732 #elif defined(__clang__)
123733         "adcs	r4, %[r]\n\t"
123734 #else
123735         "adc	r4, %[r]\n\t"
123736 #endif
123737         "uxth	r7, %[b]\n\t"
123738 #ifdef WOLFSSL_KEIL
123739         "muls	r6, r7, r6\n\t"
123740 #elif defined(__clang__)
123741         "muls	r6, r7\n\t"
123742 #else
123743         "mul	r6, r7\n\t"
123744 #endif
123745 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123746         "lsrs	r7, r6, #16\n\t"
123747 #else
123748         "lsr	r7, r6, #16\n\t"
123749 #endif
123750 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123751         "lsls	r6, r6, #16\n\t"
123752 #else
123753         "lsl	r6, r6, #16\n\t"
123754 #endif
123755 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123756         "adds	r5, r5, r6\n\t"
123757 #else
123758         "add	r5, r5, r6\n\t"
123759 #endif
123760 #ifdef WOLFSSL_KEIL
123761         "adcs	r3, r3, r7\n\t"
123762 #elif defined(__clang__)
123763         "adcs	r3, r7\n\t"
123764 #else
123765         "adc	r3, r7\n\t"
123766 #endif
123767 #ifdef WOLFSSL_KEIL
123768         "adcs	r4, r4, %[r]\n\t"
123769 #elif defined(__clang__)
123770         "adcs	r4, %[r]\n\t"
123771 #else
123772         "adc	r4, %[r]\n\t"
123773 #endif
123774         "#  A[4] * B[4]\n\t"
123775         "mov	%[a], r9\n\t"
123776         "mov	%[b], r10\n\t"
123777         "ldr	%[a], [%[a], #16]\n\t"
123778         "ldr	%[b], [%[b], #16]\n\t"
123779         "uxth	r6, %[a]\n\t"
123780         "uxth	r7, %[b]\n\t"
123781 #ifdef WOLFSSL_KEIL
123782         "muls	r7, r6, r7\n\t"
123783 #elif defined(__clang__)
123784         "muls	r7, r6\n\t"
123785 #else
123786         "mul	r7, r6\n\t"
123787 #endif
123788 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123789         "adds	r5, r5, r7\n\t"
123790 #else
123791         "add	r5, r5, r7\n\t"
123792 #endif
123793 #ifdef WOLFSSL_KEIL
123794         "adcs	r3, r3, %[r]\n\t"
123795 #elif defined(__clang__)
123796         "adcs	r3, %[r]\n\t"
123797 #else
123798         "adc	r3, %[r]\n\t"
123799 #endif
123800 #ifdef WOLFSSL_KEIL
123801         "adcs	r4, r4, %[r]\n\t"
123802 #elif defined(__clang__)
123803         "adcs	r4, %[r]\n\t"
123804 #else
123805         "adc	r4, %[r]\n\t"
123806 #endif
123807 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123808         "lsrs	r7, %[b], #16\n\t"
123809 #else
123810         "lsr	r7, %[b], #16\n\t"
123811 #endif
123812 #ifdef WOLFSSL_KEIL
123813         "muls	r6, r7, r6\n\t"
123814 #elif defined(__clang__)
123815         "muls	r6, r7\n\t"
123816 #else
123817         "mul	r6, r7\n\t"
123818 #endif
123819 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123820         "lsrs	r7, r6, #16\n\t"
123821 #else
123822         "lsr	r7, r6, #16\n\t"
123823 #endif
123824 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123825         "lsls	r6, r6, #16\n\t"
123826 #else
123827         "lsl	r6, r6, #16\n\t"
123828 #endif
123829 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123830         "adds	r5, r5, r6\n\t"
123831 #else
123832         "add	r5, r5, r6\n\t"
123833 #endif
123834 #ifdef WOLFSSL_KEIL
123835         "adcs	r3, r3, r7\n\t"
123836 #elif defined(__clang__)
123837         "adcs	r3, r7\n\t"
123838 #else
123839         "adc	r3, r7\n\t"
123840 #endif
123841 #ifdef WOLFSSL_KEIL
123842         "adcs	r4, r4, %[r]\n\t"
123843 #elif defined(__clang__)
123844         "adcs	r4, %[r]\n\t"
123845 #else
123846         "adc	r4, %[r]\n\t"
123847 #endif
123848 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123849         "lsrs	r6, %[a], #16\n\t"
123850 #else
123851         "lsr	r6, %[a], #16\n\t"
123852 #endif
123853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123854         "lsrs	r7, %[b], #16\n\t"
123855 #else
123856         "lsr	r7, %[b], #16\n\t"
123857 #endif
123858 #ifdef WOLFSSL_KEIL
123859         "muls	r7, r6, r7\n\t"
123860 #elif defined(__clang__)
123861         "muls	r7, r6\n\t"
123862 #else
123863         "mul	r7, r6\n\t"
123864 #endif
123865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123866         "adds	r3, r3, r7\n\t"
123867 #else
123868         "add	r3, r3, r7\n\t"
123869 #endif
123870 #ifdef WOLFSSL_KEIL
123871         "adcs	r4, r4, %[r]\n\t"
123872 #elif defined(__clang__)
123873         "adcs	r4, %[r]\n\t"
123874 #else
123875         "adc	r4, %[r]\n\t"
123876 #endif
123877         "uxth	r7, %[b]\n\t"
123878 #ifdef WOLFSSL_KEIL
123879         "muls	r6, r7, r6\n\t"
123880 #elif defined(__clang__)
123881         "muls	r6, r7\n\t"
123882 #else
123883         "mul	r6, r7\n\t"
123884 #endif
123885 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123886         "lsrs	r7, r6, #16\n\t"
123887 #else
123888         "lsr	r7, r6, #16\n\t"
123889 #endif
123890 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123891         "lsls	r6, r6, #16\n\t"
123892 #else
123893         "lsl	r6, r6, #16\n\t"
123894 #endif
123895 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123896         "adds	r5, r5, r6\n\t"
123897 #else
123898         "add	r5, r5, r6\n\t"
123899 #endif
123900 #ifdef WOLFSSL_KEIL
123901         "adcs	r3, r3, r7\n\t"
123902 #elif defined(__clang__)
123903         "adcs	r3, r7\n\t"
123904 #else
123905         "adc	r3, r7\n\t"
123906 #endif
123907 #ifdef WOLFSSL_KEIL
123908         "adcs	r4, r4, %[r]\n\t"
123909 #elif defined(__clang__)
123910         "adcs	r4, %[r]\n\t"
123911 #else
123912         "adc	r4, %[r]\n\t"
123913 #endif
123914         "#  A[3] * B[5]\n\t"
123915         "mov	%[a], r9\n\t"
123916         "mov	%[b], r10\n\t"
123917         "ldr	%[a], [%[a], #12]\n\t"
123918         "ldr	%[b], [%[b], #20]\n\t"
123919         "uxth	r6, %[a]\n\t"
123920         "uxth	r7, %[b]\n\t"
123921 #ifdef WOLFSSL_KEIL
123922         "muls	r7, r6, r7\n\t"
123923 #elif defined(__clang__)
123924         "muls	r7, r6\n\t"
123925 #else
123926         "mul	r7, r6\n\t"
123927 #endif
123928 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123929         "adds	r5, r5, r7\n\t"
123930 #else
123931         "add	r5, r5, r7\n\t"
123932 #endif
123933 #ifdef WOLFSSL_KEIL
123934         "adcs	r3, r3, %[r]\n\t"
123935 #elif defined(__clang__)
123936         "adcs	r3, %[r]\n\t"
123937 #else
123938         "adc	r3, %[r]\n\t"
123939 #endif
123940 #ifdef WOLFSSL_KEIL
123941         "adcs	r4, r4, %[r]\n\t"
123942 #elif defined(__clang__)
123943         "adcs	r4, %[r]\n\t"
123944 #else
123945         "adc	r4, %[r]\n\t"
123946 #endif
123947 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123948         "lsrs	r7, %[b], #16\n\t"
123949 #else
123950         "lsr	r7, %[b], #16\n\t"
123951 #endif
123952 #ifdef WOLFSSL_KEIL
123953         "muls	r6, r7, r6\n\t"
123954 #elif defined(__clang__)
123955         "muls	r6, r7\n\t"
123956 #else
123957         "mul	r6, r7\n\t"
123958 #endif
123959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123960         "lsrs	r7, r6, #16\n\t"
123961 #else
123962         "lsr	r7, r6, #16\n\t"
123963 #endif
123964 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123965         "lsls	r6, r6, #16\n\t"
123966 #else
123967         "lsl	r6, r6, #16\n\t"
123968 #endif
123969 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123970         "adds	r5, r5, r6\n\t"
123971 #else
123972         "add	r5, r5, r6\n\t"
123973 #endif
123974 #ifdef WOLFSSL_KEIL
123975         "adcs	r3, r3, r7\n\t"
123976 #elif defined(__clang__)
123977         "adcs	r3, r7\n\t"
123978 #else
123979         "adc	r3, r7\n\t"
123980 #endif
123981 #ifdef WOLFSSL_KEIL
123982         "adcs	r4, r4, %[r]\n\t"
123983 #elif defined(__clang__)
123984         "adcs	r4, %[r]\n\t"
123985 #else
123986         "adc	r4, %[r]\n\t"
123987 #endif
123988 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123989         "lsrs	r6, %[a], #16\n\t"
123990 #else
123991         "lsr	r6, %[a], #16\n\t"
123992 #endif
123993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
123994         "lsrs	r7, %[b], #16\n\t"
123995 #else
123996         "lsr	r7, %[b], #16\n\t"
123997 #endif
123998 #ifdef WOLFSSL_KEIL
123999         "muls	r7, r6, r7\n\t"
124000 #elif defined(__clang__)
124001         "muls	r7, r6\n\t"
124002 #else
124003         "mul	r7, r6\n\t"
124004 #endif
124005 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124006         "adds	r3, r3, r7\n\t"
124007 #else
124008         "add	r3, r3, r7\n\t"
124009 #endif
124010 #ifdef WOLFSSL_KEIL
124011         "adcs	r4, r4, %[r]\n\t"
124012 #elif defined(__clang__)
124013         "adcs	r4, %[r]\n\t"
124014 #else
124015         "adc	r4, %[r]\n\t"
124016 #endif
124017         "uxth	r7, %[b]\n\t"
124018 #ifdef WOLFSSL_KEIL
124019         "muls	r6, r7, r6\n\t"
124020 #elif defined(__clang__)
124021         "muls	r6, r7\n\t"
124022 #else
124023         "mul	r6, r7\n\t"
124024 #endif
124025 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124026         "lsrs	r7, r6, #16\n\t"
124027 #else
124028         "lsr	r7, r6, #16\n\t"
124029 #endif
124030 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124031         "lsls	r6, r6, #16\n\t"
124032 #else
124033         "lsl	r6, r6, #16\n\t"
124034 #endif
124035 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124036         "adds	r5, r5, r6\n\t"
124037 #else
124038         "add	r5, r5, r6\n\t"
124039 #endif
124040 #ifdef WOLFSSL_KEIL
124041         "adcs	r3, r3, r7\n\t"
124042 #elif defined(__clang__)
124043         "adcs	r3, r7\n\t"
124044 #else
124045         "adc	r3, r7\n\t"
124046 #endif
124047 #ifdef WOLFSSL_KEIL
124048         "adcs	r4, r4, %[r]\n\t"
124049 #elif defined(__clang__)
124050         "adcs	r4, %[r]\n\t"
124051 #else
124052         "adc	r4, %[r]\n\t"
124053 #endif
124054         "#  A[2] * B[6]\n\t"
124055         "mov	%[a], r9\n\t"
124056         "mov	%[b], r10\n\t"
124057         "ldr	%[a], [%[a], #8]\n\t"
124058         "ldr	%[b], [%[b], #24]\n\t"
124059         "uxth	r6, %[a]\n\t"
124060         "uxth	r7, %[b]\n\t"
124061 #ifdef WOLFSSL_KEIL
124062         "muls	r7, r6, r7\n\t"
124063 #elif defined(__clang__)
124064         "muls	r7, r6\n\t"
124065 #else
124066         "mul	r7, r6\n\t"
124067 #endif
124068 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124069         "adds	r5, r5, r7\n\t"
124070 #else
124071         "add	r5, r5, r7\n\t"
124072 #endif
124073 #ifdef WOLFSSL_KEIL
124074         "adcs	r3, r3, %[r]\n\t"
124075 #elif defined(__clang__)
124076         "adcs	r3, %[r]\n\t"
124077 #else
124078         "adc	r3, %[r]\n\t"
124079 #endif
124080 #ifdef WOLFSSL_KEIL
124081         "adcs	r4, r4, %[r]\n\t"
124082 #elif defined(__clang__)
124083         "adcs	r4, %[r]\n\t"
124084 #else
124085         "adc	r4, %[r]\n\t"
124086 #endif
124087 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124088         "lsrs	r7, %[b], #16\n\t"
124089 #else
124090         "lsr	r7, %[b], #16\n\t"
124091 #endif
124092 #ifdef WOLFSSL_KEIL
124093         "muls	r6, r7, r6\n\t"
124094 #elif defined(__clang__)
124095         "muls	r6, r7\n\t"
124096 #else
124097         "mul	r6, r7\n\t"
124098 #endif
124099 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124100         "lsrs	r7, r6, #16\n\t"
124101 #else
124102         "lsr	r7, r6, #16\n\t"
124103 #endif
124104 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124105         "lsls	r6, r6, #16\n\t"
124106 #else
124107         "lsl	r6, r6, #16\n\t"
124108 #endif
124109 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124110         "adds	r5, r5, r6\n\t"
124111 #else
124112         "add	r5, r5, r6\n\t"
124113 #endif
124114 #ifdef WOLFSSL_KEIL
124115         "adcs	r3, r3, r7\n\t"
124116 #elif defined(__clang__)
124117         "adcs	r3, r7\n\t"
124118 #else
124119         "adc	r3, r7\n\t"
124120 #endif
124121 #ifdef WOLFSSL_KEIL
124122         "adcs	r4, r4, %[r]\n\t"
124123 #elif defined(__clang__)
124124         "adcs	r4, %[r]\n\t"
124125 #else
124126         "adc	r4, %[r]\n\t"
124127 #endif
124128 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124129         "lsrs	r6, %[a], #16\n\t"
124130 #else
124131         "lsr	r6, %[a], #16\n\t"
124132 #endif
124133 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124134         "lsrs	r7, %[b], #16\n\t"
124135 #else
124136         "lsr	r7, %[b], #16\n\t"
124137 #endif
124138 #ifdef WOLFSSL_KEIL
124139         "muls	r7, r6, r7\n\t"
124140 #elif defined(__clang__)
124141         "muls	r7, r6\n\t"
124142 #else
124143         "mul	r7, r6\n\t"
124144 #endif
124145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124146         "adds	r3, r3, r7\n\t"
124147 #else
124148         "add	r3, r3, r7\n\t"
124149 #endif
124150 #ifdef WOLFSSL_KEIL
124151         "adcs	r4, r4, %[r]\n\t"
124152 #elif defined(__clang__)
124153         "adcs	r4, %[r]\n\t"
124154 #else
124155         "adc	r4, %[r]\n\t"
124156 #endif
124157         "uxth	r7, %[b]\n\t"
124158 #ifdef WOLFSSL_KEIL
124159         "muls	r6, r7, r6\n\t"
124160 #elif defined(__clang__)
124161         "muls	r6, r7\n\t"
124162 #else
124163         "mul	r6, r7\n\t"
124164 #endif
124165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124166         "lsrs	r7, r6, #16\n\t"
124167 #else
124168         "lsr	r7, r6, #16\n\t"
124169 #endif
124170 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124171         "lsls	r6, r6, #16\n\t"
124172 #else
124173         "lsl	r6, r6, #16\n\t"
124174 #endif
124175 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124176         "adds	r5, r5, r6\n\t"
124177 #else
124178         "add	r5, r5, r6\n\t"
124179 #endif
124180 #ifdef WOLFSSL_KEIL
124181         "adcs	r3, r3, r7\n\t"
124182 #elif defined(__clang__)
124183         "adcs	r3, r7\n\t"
124184 #else
124185         "adc	r3, r7\n\t"
124186 #endif
124187 #ifdef WOLFSSL_KEIL
124188         "adcs	r4, r4, %[r]\n\t"
124189 #elif defined(__clang__)
124190         "adcs	r4, %[r]\n\t"
124191 #else
124192         "adc	r4, %[r]\n\t"
124193 #endif
124194         "#  A[1] * B[7]\n\t"
124195         "mov	%[a], r9\n\t"
124196         "mov	%[b], r10\n\t"
124197         "ldr	%[a], [%[a], #4]\n\t"
124198         "ldr	%[b], [%[b], #28]\n\t"
124199         "uxth	r6, %[a]\n\t"
124200         "uxth	r7, %[b]\n\t"
124201 #ifdef WOLFSSL_KEIL
124202         "muls	r7, r6, r7\n\t"
124203 #elif defined(__clang__)
124204         "muls	r7, r6\n\t"
124205 #else
124206         "mul	r7, r6\n\t"
124207 #endif
124208 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124209         "adds	r5, r5, r7\n\t"
124210 #else
124211         "add	r5, r5, r7\n\t"
124212 #endif
124213 #ifdef WOLFSSL_KEIL
124214         "adcs	r3, r3, %[r]\n\t"
124215 #elif defined(__clang__)
124216         "adcs	r3, %[r]\n\t"
124217 #else
124218         "adc	r3, %[r]\n\t"
124219 #endif
124220 #ifdef WOLFSSL_KEIL
124221         "adcs	r4, r4, %[r]\n\t"
124222 #elif defined(__clang__)
124223         "adcs	r4, %[r]\n\t"
124224 #else
124225         "adc	r4, %[r]\n\t"
124226 #endif
124227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124228         "lsrs	r7, %[b], #16\n\t"
124229 #else
124230         "lsr	r7, %[b], #16\n\t"
124231 #endif
124232 #ifdef WOLFSSL_KEIL
124233         "muls	r6, r7, r6\n\t"
124234 #elif defined(__clang__)
124235         "muls	r6, r7\n\t"
124236 #else
124237         "mul	r6, r7\n\t"
124238 #endif
124239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124240         "lsrs	r7, r6, #16\n\t"
124241 #else
124242         "lsr	r7, r6, #16\n\t"
124243 #endif
124244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124245         "lsls	r6, r6, #16\n\t"
124246 #else
124247         "lsl	r6, r6, #16\n\t"
124248 #endif
124249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124250         "adds	r5, r5, r6\n\t"
124251 #else
124252         "add	r5, r5, r6\n\t"
124253 #endif
124254 #ifdef WOLFSSL_KEIL
124255         "adcs	r3, r3, r7\n\t"
124256 #elif defined(__clang__)
124257         "adcs	r3, r7\n\t"
124258 #else
124259         "adc	r3, r7\n\t"
124260 #endif
124261 #ifdef WOLFSSL_KEIL
124262         "adcs	r4, r4, %[r]\n\t"
124263 #elif defined(__clang__)
124264         "adcs	r4, %[r]\n\t"
124265 #else
124266         "adc	r4, %[r]\n\t"
124267 #endif
124268 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124269         "lsrs	r6, %[a], #16\n\t"
124270 #else
124271         "lsr	r6, %[a], #16\n\t"
124272 #endif
124273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124274         "lsrs	r7, %[b], #16\n\t"
124275 #else
124276         "lsr	r7, %[b], #16\n\t"
124277 #endif
124278 #ifdef WOLFSSL_KEIL
124279         "muls	r7, r6, r7\n\t"
124280 #elif defined(__clang__)
124281         "muls	r7, r6\n\t"
124282 #else
124283         "mul	r7, r6\n\t"
124284 #endif
124285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124286         "adds	r3, r3, r7\n\t"
124287 #else
124288         "add	r3, r3, r7\n\t"
124289 #endif
124290 #ifdef WOLFSSL_KEIL
124291         "adcs	r4, r4, %[r]\n\t"
124292 #elif defined(__clang__)
124293         "adcs	r4, %[r]\n\t"
124294 #else
124295         "adc	r4, %[r]\n\t"
124296 #endif
124297         "uxth	r7, %[b]\n\t"
124298 #ifdef WOLFSSL_KEIL
124299         "muls	r6, r7, r6\n\t"
124300 #elif defined(__clang__)
124301         "muls	r6, r7\n\t"
124302 #else
124303         "mul	r6, r7\n\t"
124304 #endif
124305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124306         "lsrs	r7, r6, #16\n\t"
124307 #else
124308         "lsr	r7, r6, #16\n\t"
124309 #endif
124310 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124311         "lsls	r6, r6, #16\n\t"
124312 #else
124313         "lsl	r6, r6, #16\n\t"
124314 #endif
124315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124316         "adds	r5, r5, r6\n\t"
124317 #else
124318         "add	r5, r5, r6\n\t"
124319 #endif
124320 #ifdef WOLFSSL_KEIL
124321         "adcs	r3, r3, r7\n\t"
124322 #elif defined(__clang__)
124323         "adcs	r3, r7\n\t"
124324 #else
124325         "adc	r3, r7\n\t"
124326 #endif
124327 #ifdef WOLFSSL_KEIL
124328         "adcs	r4, r4, %[r]\n\t"
124329 #elif defined(__clang__)
124330         "adcs	r4, %[r]\n\t"
124331 #else
124332         "adc	r4, %[r]\n\t"
124333 #endif
124334         "#  A[0] * B[8]\n\t"
124335         "mov	%[a], r9\n\t"
124336         "mov	%[b], r10\n\t"
124337         "ldr	%[a], [%[a]]\n\t"
124338         "ldr	%[b], [%[b], #32]\n\t"
124339         "uxth	r6, %[a]\n\t"
124340         "uxth	r7, %[b]\n\t"
124341 #ifdef WOLFSSL_KEIL
124342         "muls	r7, r6, r7\n\t"
124343 #elif defined(__clang__)
124344         "muls	r7, r6\n\t"
124345 #else
124346         "mul	r7, r6\n\t"
124347 #endif
124348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124349         "adds	r5, r5, r7\n\t"
124350 #else
124351         "add	r5, r5, r7\n\t"
124352 #endif
124353 #ifdef WOLFSSL_KEIL
124354         "adcs	r3, r3, %[r]\n\t"
124355 #elif defined(__clang__)
124356         "adcs	r3, %[r]\n\t"
124357 #else
124358         "adc	r3, %[r]\n\t"
124359 #endif
124360 #ifdef WOLFSSL_KEIL
124361         "adcs	r4, r4, %[r]\n\t"
124362 #elif defined(__clang__)
124363         "adcs	r4, %[r]\n\t"
124364 #else
124365         "adc	r4, %[r]\n\t"
124366 #endif
124367 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124368         "lsrs	r7, %[b], #16\n\t"
124369 #else
124370         "lsr	r7, %[b], #16\n\t"
124371 #endif
124372 #ifdef WOLFSSL_KEIL
124373         "muls	r6, r7, r6\n\t"
124374 #elif defined(__clang__)
124375         "muls	r6, r7\n\t"
124376 #else
124377         "mul	r6, r7\n\t"
124378 #endif
124379 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124380         "lsrs	r7, r6, #16\n\t"
124381 #else
124382         "lsr	r7, r6, #16\n\t"
124383 #endif
124384 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124385         "lsls	r6, r6, #16\n\t"
124386 #else
124387         "lsl	r6, r6, #16\n\t"
124388 #endif
124389 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124390         "adds	r5, r5, r6\n\t"
124391 #else
124392         "add	r5, r5, r6\n\t"
124393 #endif
124394 #ifdef WOLFSSL_KEIL
124395         "adcs	r3, r3, r7\n\t"
124396 #elif defined(__clang__)
124397         "adcs	r3, r7\n\t"
124398 #else
124399         "adc	r3, r7\n\t"
124400 #endif
124401 #ifdef WOLFSSL_KEIL
124402         "adcs	r4, r4, %[r]\n\t"
124403 #elif defined(__clang__)
124404         "adcs	r4, %[r]\n\t"
124405 #else
124406         "adc	r4, %[r]\n\t"
124407 #endif
124408 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124409         "lsrs	r6, %[a], #16\n\t"
124410 #else
124411         "lsr	r6, %[a], #16\n\t"
124412 #endif
124413 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124414         "lsrs	r7, %[b], #16\n\t"
124415 #else
124416         "lsr	r7, %[b], #16\n\t"
124417 #endif
124418 #ifdef WOLFSSL_KEIL
124419         "muls	r7, r6, r7\n\t"
124420 #elif defined(__clang__)
124421         "muls	r7, r6\n\t"
124422 #else
124423         "mul	r7, r6\n\t"
124424 #endif
124425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124426         "adds	r3, r3, r7\n\t"
124427 #else
124428         "add	r3, r3, r7\n\t"
124429 #endif
124430 #ifdef WOLFSSL_KEIL
124431         "adcs	r4, r4, %[r]\n\t"
124432 #elif defined(__clang__)
124433         "adcs	r4, %[r]\n\t"
124434 #else
124435         "adc	r4, %[r]\n\t"
124436 #endif
124437         "uxth	r7, %[b]\n\t"
124438 #ifdef WOLFSSL_KEIL
124439         "muls	r6, r7, r6\n\t"
124440 #elif defined(__clang__)
124441         "muls	r6, r7\n\t"
124442 #else
124443         "mul	r6, r7\n\t"
124444 #endif
124445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124446         "lsrs	r7, r6, #16\n\t"
124447 #else
124448         "lsr	r7, r6, #16\n\t"
124449 #endif
124450 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124451         "lsls	r6, r6, #16\n\t"
124452 #else
124453         "lsl	r6, r6, #16\n\t"
124454 #endif
124455 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124456         "adds	r5, r5, r6\n\t"
124457 #else
124458         "add	r5, r5, r6\n\t"
124459 #endif
124460 #ifdef WOLFSSL_KEIL
124461         "adcs	r3, r3, r7\n\t"
124462 #elif defined(__clang__)
124463         "adcs	r3, r7\n\t"
124464 #else
124465         "adc	r3, r7\n\t"
124466 #endif
124467 #ifdef WOLFSSL_KEIL
124468         "adcs	r4, r4, %[r]\n\t"
124469 #elif defined(__clang__)
124470         "adcs	r4, %[r]\n\t"
124471 #else
124472         "adc	r4, %[r]\n\t"
124473 #endif
124474         "str	r5, [sp, #32]\n\t"
124475         "#  A[0] * B[9]\n\t"
124476         "movs	r5, #0\n\t"
124477         "mov	%[a], r9\n\t"
124478         "mov	%[b], r10\n\t"
124479         "ldr	%[a], [%[a]]\n\t"
124480         "ldr	%[b], [%[b], #36]\n\t"
124481         "uxth	r6, %[a]\n\t"
124482         "uxth	r7, %[b]\n\t"
124483 #ifdef WOLFSSL_KEIL
124484         "muls	r7, r6, r7\n\t"
124485 #elif defined(__clang__)
124486         "muls	r7, r6\n\t"
124487 #else
124488         "mul	r7, r6\n\t"
124489 #endif
124490 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124491         "adds	r3, r3, r7\n\t"
124492 #else
124493         "add	r3, r3, r7\n\t"
124494 #endif
124495 #ifdef WOLFSSL_KEIL
124496         "adcs	r4, r4, %[r]\n\t"
124497 #elif defined(__clang__)
124498         "adcs	r4, %[r]\n\t"
124499 #else
124500         "adc	r4, %[r]\n\t"
124501 #endif
124502 #ifdef WOLFSSL_KEIL
124503         "adcs	r5, r5, %[r]\n\t"
124504 #elif defined(__clang__)
124505         "adcs	r5, %[r]\n\t"
124506 #else
124507         "adc	r5, %[r]\n\t"
124508 #endif
124509 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124510         "lsrs	r7, %[b], #16\n\t"
124511 #else
124512         "lsr	r7, %[b], #16\n\t"
124513 #endif
124514 #ifdef WOLFSSL_KEIL
124515         "muls	r6, r7, r6\n\t"
124516 #elif defined(__clang__)
124517         "muls	r6, r7\n\t"
124518 #else
124519         "mul	r6, r7\n\t"
124520 #endif
124521 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124522         "lsrs	r7, r6, #16\n\t"
124523 #else
124524         "lsr	r7, r6, #16\n\t"
124525 #endif
124526 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124527         "lsls	r6, r6, #16\n\t"
124528 #else
124529         "lsl	r6, r6, #16\n\t"
124530 #endif
124531 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124532         "adds	r3, r3, r6\n\t"
124533 #else
124534         "add	r3, r3, r6\n\t"
124535 #endif
124536 #ifdef WOLFSSL_KEIL
124537         "adcs	r4, r4, r7\n\t"
124538 #elif defined(__clang__)
124539         "adcs	r4, r7\n\t"
124540 #else
124541         "adc	r4, r7\n\t"
124542 #endif
124543 #ifdef WOLFSSL_KEIL
124544         "adcs	r5, r5, %[r]\n\t"
124545 #elif defined(__clang__)
124546         "adcs	r5, %[r]\n\t"
124547 #else
124548         "adc	r5, %[r]\n\t"
124549 #endif
124550 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124551         "lsrs	r6, %[a], #16\n\t"
124552 #else
124553         "lsr	r6, %[a], #16\n\t"
124554 #endif
124555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124556         "lsrs	r7, %[b], #16\n\t"
124557 #else
124558         "lsr	r7, %[b], #16\n\t"
124559 #endif
124560 #ifdef WOLFSSL_KEIL
124561         "muls	r7, r6, r7\n\t"
124562 #elif defined(__clang__)
124563         "muls	r7, r6\n\t"
124564 #else
124565         "mul	r7, r6\n\t"
124566 #endif
124567 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124568         "adds	r4, r4, r7\n\t"
124569 #else
124570         "add	r4, r4, r7\n\t"
124571 #endif
124572 #ifdef WOLFSSL_KEIL
124573         "adcs	r5, r5, %[r]\n\t"
124574 #elif defined(__clang__)
124575         "adcs	r5, %[r]\n\t"
124576 #else
124577         "adc	r5, %[r]\n\t"
124578 #endif
124579         "uxth	r7, %[b]\n\t"
124580 #ifdef WOLFSSL_KEIL
124581         "muls	r6, r7, r6\n\t"
124582 #elif defined(__clang__)
124583         "muls	r6, r7\n\t"
124584 #else
124585         "mul	r6, r7\n\t"
124586 #endif
124587 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124588         "lsrs	r7, r6, #16\n\t"
124589 #else
124590         "lsr	r7, r6, #16\n\t"
124591 #endif
124592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124593         "lsls	r6, r6, #16\n\t"
124594 #else
124595         "lsl	r6, r6, #16\n\t"
124596 #endif
124597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124598         "adds	r3, r3, r6\n\t"
124599 #else
124600         "add	r3, r3, r6\n\t"
124601 #endif
124602 #ifdef WOLFSSL_KEIL
124603         "adcs	r4, r4, r7\n\t"
124604 #elif defined(__clang__)
124605         "adcs	r4, r7\n\t"
124606 #else
124607         "adc	r4, r7\n\t"
124608 #endif
124609 #ifdef WOLFSSL_KEIL
124610         "adcs	r5, r5, %[r]\n\t"
124611 #elif defined(__clang__)
124612         "adcs	r5, %[r]\n\t"
124613 #else
124614         "adc	r5, %[r]\n\t"
124615 #endif
124616         "#  A[1] * B[8]\n\t"
124617         "mov	%[a], r9\n\t"
124618         "mov	%[b], r10\n\t"
124619         "ldr	%[a], [%[a], #4]\n\t"
124620         "ldr	%[b], [%[b], #32]\n\t"
124621         "uxth	r6, %[a]\n\t"
124622         "uxth	r7, %[b]\n\t"
124623 #ifdef WOLFSSL_KEIL
124624         "muls	r7, r6, r7\n\t"
124625 #elif defined(__clang__)
124626         "muls	r7, r6\n\t"
124627 #else
124628         "mul	r7, r6\n\t"
124629 #endif
124630 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124631         "adds	r3, r3, r7\n\t"
124632 #else
124633         "add	r3, r3, r7\n\t"
124634 #endif
124635 #ifdef WOLFSSL_KEIL
124636         "adcs	r4, r4, %[r]\n\t"
124637 #elif defined(__clang__)
124638         "adcs	r4, %[r]\n\t"
124639 #else
124640         "adc	r4, %[r]\n\t"
124641 #endif
124642 #ifdef WOLFSSL_KEIL
124643         "adcs	r5, r5, %[r]\n\t"
124644 #elif defined(__clang__)
124645         "adcs	r5, %[r]\n\t"
124646 #else
124647         "adc	r5, %[r]\n\t"
124648 #endif
124649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124650         "lsrs	r7, %[b], #16\n\t"
124651 #else
124652         "lsr	r7, %[b], #16\n\t"
124653 #endif
124654 #ifdef WOLFSSL_KEIL
124655         "muls	r6, r7, r6\n\t"
124656 #elif defined(__clang__)
124657         "muls	r6, r7\n\t"
124658 #else
124659         "mul	r6, r7\n\t"
124660 #endif
124661 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124662         "lsrs	r7, r6, #16\n\t"
124663 #else
124664         "lsr	r7, r6, #16\n\t"
124665 #endif
124666 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124667         "lsls	r6, r6, #16\n\t"
124668 #else
124669         "lsl	r6, r6, #16\n\t"
124670 #endif
124671 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124672         "adds	r3, r3, r6\n\t"
124673 #else
124674         "add	r3, r3, r6\n\t"
124675 #endif
124676 #ifdef WOLFSSL_KEIL
124677         "adcs	r4, r4, r7\n\t"
124678 #elif defined(__clang__)
124679         "adcs	r4, r7\n\t"
124680 #else
124681         "adc	r4, r7\n\t"
124682 #endif
124683 #ifdef WOLFSSL_KEIL
124684         "adcs	r5, r5, %[r]\n\t"
124685 #elif defined(__clang__)
124686         "adcs	r5, %[r]\n\t"
124687 #else
124688         "adc	r5, %[r]\n\t"
124689 #endif
124690 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124691         "lsrs	r6, %[a], #16\n\t"
124692 #else
124693         "lsr	r6, %[a], #16\n\t"
124694 #endif
124695 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124696         "lsrs	r7, %[b], #16\n\t"
124697 #else
124698         "lsr	r7, %[b], #16\n\t"
124699 #endif
124700 #ifdef WOLFSSL_KEIL
124701         "muls	r7, r6, r7\n\t"
124702 #elif defined(__clang__)
124703         "muls	r7, r6\n\t"
124704 #else
124705         "mul	r7, r6\n\t"
124706 #endif
124707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124708         "adds	r4, r4, r7\n\t"
124709 #else
124710         "add	r4, r4, r7\n\t"
124711 #endif
124712 #ifdef WOLFSSL_KEIL
124713         "adcs	r5, r5, %[r]\n\t"
124714 #elif defined(__clang__)
124715         "adcs	r5, %[r]\n\t"
124716 #else
124717         "adc	r5, %[r]\n\t"
124718 #endif
124719         "uxth	r7, %[b]\n\t"
124720 #ifdef WOLFSSL_KEIL
124721         "muls	r6, r7, r6\n\t"
124722 #elif defined(__clang__)
124723         "muls	r6, r7\n\t"
124724 #else
124725         "mul	r6, r7\n\t"
124726 #endif
124727 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124728         "lsrs	r7, r6, #16\n\t"
124729 #else
124730         "lsr	r7, r6, #16\n\t"
124731 #endif
124732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124733         "lsls	r6, r6, #16\n\t"
124734 #else
124735         "lsl	r6, r6, #16\n\t"
124736 #endif
124737 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124738         "adds	r3, r3, r6\n\t"
124739 #else
124740         "add	r3, r3, r6\n\t"
124741 #endif
124742 #ifdef WOLFSSL_KEIL
124743         "adcs	r4, r4, r7\n\t"
124744 #elif defined(__clang__)
124745         "adcs	r4, r7\n\t"
124746 #else
124747         "adc	r4, r7\n\t"
124748 #endif
124749 #ifdef WOLFSSL_KEIL
124750         "adcs	r5, r5, %[r]\n\t"
124751 #elif defined(__clang__)
124752         "adcs	r5, %[r]\n\t"
124753 #else
124754         "adc	r5, %[r]\n\t"
124755 #endif
124756         "#  A[2] * B[7]\n\t"
124757         "mov	%[a], r9\n\t"
124758         "mov	%[b], r10\n\t"
124759         "ldr	%[a], [%[a], #8]\n\t"
124760         "ldr	%[b], [%[b], #28]\n\t"
124761         "uxth	r6, %[a]\n\t"
124762         "uxth	r7, %[b]\n\t"
124763 #ifdef WOLFSSL_KEIL
124764         "muls	r7, r6, r7\n\t"
124765 #elif defined(__clang__)
124766         "muls	r7, r6\n\t"
124767 #else
124768         "mul	r7, r6\n\t"
124769 #endif
124770 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124771         "adds	r3, r3, r7\n\t"
124772 #else
124773         "add	r3, r3, r7\n\t"
124774 #endif
124775 #ifdef WOLFSSL_KEIL
124776         "adcs	r4, r4, %[r]\n\t"
124777 #elif defined(__clang__)
124778         "adcs	r4, %[r]\n\t"
124779 #else
124780         "adc	r4, %[r]\n\t"
124781 #endif
124782 #ifdef WOLFSSL_KEIL
124783         "adcs	r5, r5, %[r]\n\t"
124784 #elif defined(__clang__)
124785         "adcs	r5, %[r]\n\t"
124786 #else
124787         "adc	r5, %[r]\n\t"
124788 #endif
124789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124790         "lsrs	r7, %[b], #16\n\t"
124791 #else
124792         "lsr	r7, %[b], #16\n\t"
124793 #endif
124794 #ifdef WOLFSSL_KEIL
124795         "muls	r6, r7, r6\n\t"
124796 #elif defined(__clang__)
124797         "muls	r6, r7\n\t"
124798 #else
124799         "mul	r6, r7\n\t"
124800 #endif
124801 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124802         "lsrs	r7, r6, #16\n\t"
124803 #else
124804         "lsr	r7, r6, #16\n\t"
124805 #endif
124806 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124807         "lsls	r6, r6, #16\n\t"
124808 #else
124809         "lsl	r6, r6, #16\n\t"
124810 #endif
124811 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124812         "adds	r3, r3, r6\n\t"
124813 #else
124814         "add	r3, r3, r6\n\t"
124815 #endif
124816 #ifdef WOLFSSL_KEIL
124817         "adcs	r4, r4, r7\n\t"
124818 #elif defined(__clang__)
124819         "adcs	r4, r7\n\t"
124820 #else
124821         "adc	r4, r7\n\t"
124822 #endif
124823 #ifdef WOLFSSL_KEIL
124824         "adcs	r5, r5, %[r]\n\t"
124825 #elif defined(__clang__)
124826         "adcs	r5, %[r]\n\t"
124827 #else
124828         "adc	r5, %[r]\n\t"
124829 #endif
124830 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124831         "lsrs	r6, %[a], #16\n\t"
124832 #else
124833         "lsr	r6, %[a], #16\n\t"
124834 #endif
124835 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124836         "lsrs	r7, %[b], #16\n\t"
124837 #else
124838         "lsr	r7, %[b], #16\n\t"
124839 #endif
124840 #ifdef WOLFSSL_KEIL
124841         "muls	r7, r6, r7\n\t"
124842 #elif defined(__clang__)
124843         "muls	r7, r6\n\t"
124844 #else
124845         "mul	r7, r6\n\t"
124846 #endif
124847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124848         "adds	r4, r4, r7\n\t"
124849 #else
124850         "add	r4, r4, r7\n\t"
124851 #endif
124852 #ifdef WOLFSSL_KEIL
124853         "adcs	r5, r5, %[r]\n\t"
124854 #elif defined(__clang__)
124855         "adcs	r5, %[r]\n\t"
124856 #else
124857         "adc	r5, %[r]\n\t"
124858 #endif
124859         "uxth	r7, %[b]\n\t"
124860 #ifdef WOLFSSL_KEIL
124861         "muls	r6, r7, r6\n\t"
124862 #elif defined(__clang__)
124863         "muls	r6, r7\n\t"
124864 #else
124865         "mul	r6, r7\n\t"
124866 #endif
124867 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124868         "lsrs	r7, r6, #16\n\t"
124869 #else
124870         "lsr	r7, r6, #16\n\t"
124871 #endif
124872 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124873         "lsls	r6, r6, #16\n\t"
124874 #else
124875         "lsl	r6, r6, #16\n\t"
124876 #endif
124877 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124878         "adds	r3, r3, r6\n\t"
124879 #else
124880         "add	r3, r3, r6\n\t"
124881 #endif
124882 #ifdef WOLFSSL_KEIL
124883         "adcs	r4, r4, r7\n\t"
124884 #elif defined(__clang__)
124885         "adcs	r4, r7\n\t"
124886 #else
124887         "adc	r4, r7\n\t"
124888 #endif
124889 #ifdef WOLFSSL_KEIL
124890         "adcs	r5, r5, %[r]\n\t"
124891 #elif defined(__clang__)
124892         "adcs	r5, %[r]\n\t"
124893 #else
124894         "adc	r5, %[r]\n\t"
124895 #endif
124896         "#  A[3] * B[6]\n\t"
124897         "mov	%[a], r9\n\t"
124898         "mov	%[b], r10\n\t"
124899         "ldr	%[a], [%[a], #12]\n\t"
124900         "ldr	%[b], [%[b], #24]\n\t"
124901         "uxth	r6, %[a]\n\t"
124902         "uxth	r7, %[b]\n\t"
124903 #ifdef WOLFSSL_KEIL
124904         "muls	r7, r6, r7\n\t"
124905 #elif defined(__clang__)
124906         "muls	r7, r6\n\t"
124907 #else
124908         "mul	r7, r6\n\t"
124909 #endif
124910 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124911         "adds	r3, r3, r7\n\t"
124912 #else
124913         "add	r3, r3, r7\n\t"
124914 #endif
124915 #ifdef WOLFSSL_KEIL
124916         "adcs	r4, r4, %[r]\n\t"
124917 #elif defined(__clang__)
124918         "adcs	r4, %[r]\n\t"
124919 #else
124920         "adc	r4, %[r]\n\t"
124921 #endif
124922 #ifdef WOLFSSL_KEIL
124923         "adcs	r5, r5, %[r]\n\t"
124924 #elif defined(__clang__)
124925         "adcs	r5, %[r]\n\t"
124926 #else
124927         "adc	r5, %[r]\n\t"
124928 #endif
124929 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124930         "lsrs	r7, %[b], #16\n\t"
124931 #else
124932         "lsr	r7, %[b], #16\n\t"
124933 #endif
124934 #ifdef WOLFSSL_KEIL
124935         "muls	r6, r7, r6\n\t"
124936 #elif defined(__clang__)
124937         "muls	r6, r7\n\t"
124938 #else
124939         "mul	r6, r7\n\t"
124940 #endif
124941 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124942         "lsrs	r7, r6, #16\n\t"
124943 #else
124944         "lsr	r7, r6, #16\n\t"
124945 #endif
124946 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124947         "lsls	r6, r6, #16\n\t"
124948 #else
124949         "lsl	r6, r6, #16\n\t"
124950 #endif
124951 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124952         "adds	r3, r3, r6\n\t"
124953 #else
124954         "add	r3, r3, r6\n\t"
124955 #endif
124956 #ifdef WOLFSSL_KEIL
124957         "adcs	r4, r4, r7\n\t"
124958 #elif defined(__clang__)
124959         "adcs	r4, r7\n\t"
124960 #else
124961         "adc	r4, r7\n\t"
124962 #endif
124963 #ifdef WOLFSSL_KEIL
124964         "adcs	r5, r5, %[r]\n\t"
124965 #elif defined(__clang__)
124966         "adcs	r5, %[r]\n\t"
124967 #else
124968         "adc	r5, %[r]\n\t"
124969 #endif
124970 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124971         "lsrs	r6, %[a], #16\n\t"
124972 #else
124973         "lsr	r6, %[a], #16\n\t"
124974 #endif
124975 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124976         "lsrs	r7, %[b], #16\n\t"
124977 #else
124978         "lsr	r7, %[b], #16\n\t"
124979 #endif
124980 #ifdef WOLFSSL_KEIL
124981         "muls	r7, r6, r7\n\t"
124982 #elif defined(__clang__)
124983         "muls	r7, r6\n\t"
124984 #else
124985         "mul	r7, r6\n\t"
124986 #endif
124987 #if defined(__clang__) || defined(WOLFSSL_KEIL)
124988         "adds	r4, r4, r7\n\t"
124989 #else
124990         "add	r4, r4, r7\n\t"
124991 #endif
124992 #ifdef WOLFSSL_KEIL
124993         "adcs	r5, r5, %[r]\n\t"
124994 #elif defined(__clang__)
124995         "adcs	r5, %[r]\n\t"
124996 #else
124997         "adc	r5, %[r]\n\t"
124998 #endif
124999         "uxth	r7, %[b]\n\t"
125000 #ifdef WOLFSSL_KEIL
125001         "muls	r6, r7, r6\n\t"
125002 #elif defined(__clang__)
125003         "muls	r6, r7\n\t"
125004 #else
125005         "mul	r6, r7\n\t"
125006 #endif
125007 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125008         "lsrs	r7, r6, #16\n\t"
125009 #else
125010         "lsr	r7, r6, #16\n\t"
125011 #endif
125012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125013         "lsls	r6, r6, #16\n\t"
125014 #else
125015         "lsl	r6, r6, #16\n\t"
125016 #endif
125017 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125018         "adds	r3, r3, r6\n\t"
125019 #else
125020         "add	r3, r3, r6\n\t"
125021 #endif
125022 #ifdef WOLFSSL_KEIL
125023         "adcs	r4, r4, r7\n\t"
125024 #elif defined(__clang__)
125025         "adcs	r4, r7\n\t"
125026 #else
125027         "adc	r4, r7\n\t"
125028 #endif
125029 #ifdef WOLFSSL_KEIL
125030         "adcs	r5, r5, %[r]\n\t"
125031 #elif defined(__clang__)
125032         "adcs	r5, %[r]\n\t"
125033 #else
125034         "adc	r5, %[r]\n\t"
125035 #endif
125036         "#  A[4] * B[5]\n\t"
125037         "mov	%[a], r9\n\t"
125038         "mov	%[b], r10\n\t"
125039         "ldr	%[a], [%[a], #16]\n\t"
125040         "ldr	%[b], [%[b], #20]\n\t"
125041         "uxth	r6, %[a]\n\t"
125042         "uxth	r7, %[b]\n\t"
125043 #ifdef WOLFSSL_KEIL
125044         "muls	r7, r6, r7\n\t"
125045 #elif defined(__clang__)
125046         "muls	r7, r6\n\t"
125047 #else
125048         "mul	r7, r6\n\t"
125049 #endif
125050 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125051         "adds	r3, r3, r7\n\t"
125052 #else
125053         "add	r3, r3, r7\n\t"
125054 #endif
125055 #ifdef WOLFSSL_KEIL
125056         "adcs	r4, r4, %[r]\n\t"
125057 #elif defined(__clang__)
125058         "adcs	r4, %[r]\n\t"
125059 #else
125060         "adc	r4, %[r]\n\t"
125061 #endif
125062 #ifdef WOLFSSL_KEIL
125063         "adcs	r5, r5, %[r]\n\t"
125064 #elif defined(__clang__)
125065         "adcs	r5, %[r]\n\t"
125066 #else
125067         "adc	r5, %[r]\n\t"
125068 #endif
125069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125070         "lsrs	r7, %[b], #16\n\t"
125071 #else
125072         "lsr	r7, %[b], #16\n\t"
125073 #endif
125074 #ifdef WOLFSSL_KEIL
125075         "muls	r6, r7, r6\n\t"
125076 #elif defined(__clang__)
125077         "muls	r6, r7\n\t"
125078 #else
125079         "mul	r6, r7\n\t"
125080 #endif
125081 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125082         "lsrs	r7, r6, #16\n\t"
125083 #else
125084         "lsr	r7, r6, #16\n\t"
125085 #endif
125086 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125087         "lsls	r6, r6, #16\n\t"
125088 #else
125089         "lsl	r6, r6, #16\n\t"
125090 #endif
125091 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125092         "adds	r3, r3, r6\n\t"
125093 #else
125094         "add	r3, r3, r6\n\t"
125095 #endif
125096 #ifdef WOLFSSL_KEIL
125097         "adcs	r4, r4, r7\n\t"
125098 #elif defined(__clang__)
125099         "adcs	r4, r7\n\t"
125100 #else
125101         "adc	r4, r7\n\t"
125102 #endif
125103 #ifdef WOLFSSL_KEIL
125104         "adcs	r5, r5, %[r]\n\t"
125105 #elif defined(__clang__)
125106         "adcs	r5, %[r]\n\t"
125107 #else
125108         "adc	r5, %[r]\n\t"
125109 #endif
125110 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125111         "lsrs	r6, %[a], #16\n\t"
125112 #else
125113         "lsr	r6, %[a], #16\n\t"
125114 #endif
125115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125116         "lsrs	r7, %[b], #16\n\t"
125117 #else
125118         "lsr	r7, %[b], #16\n\t"
125119 #endif
125120 #ifdef WOLFSSL_KEIL
125121         "muls	r7, r6, r7\n\t"
125122 #elif defined(__clang__)
125123         "muls	r7, r6\n\t"
125124 #else
125125         "mul	r7, r6\n\t"
125126 #endif
125127 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125128         "adds	r4, r4, r7\n\t"
125129 #else
125130         "add	r4, r4, r7\n\t"
125131 #endif
125132 #ifdef WOLFSSL_KEIL
125133         "adcs	r5, r5, %[r]\n\t"
125134 #elif defined(__clang__)
125135         "adcs	r5, %[r]\n\t"
125136 #else
125137         "adc	r5, %[r]\n\t"
125138 #endif
125139         "uxth	r7, %[b]\n\t"
125140 #ifdef WOLFSSL_KEIL
125141         "muls	r6, r7, r6\n\t"
125142 #elif defined(__clang__)
125143         "muls	r6, r7\n\t"
125144 #else
125145         "mul	r6, r7\n\t"
125146 #endif
125147 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125148         "lsrs	r7, r6, #16\n\t"
125149 #else
125150         "lsr	r7, r6, #16\n\t"
125151 #endif
125152 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125153         "lsls	r6, r6, #16\n\t"
125154 #else
125155         "lsl	r6, r6, #16\n\t"
125156 #endif
125157 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125158         "adds	r3, r3, r6\n\t"
125159 #else
125160         "add	r3, r3, r6\n\t"
125161 #endif
125162 #ifdef WOLFSSL_KEIL
125163         "adcs	r4, r4, r7\n\t"
125164 #elif defined(__clang__)
125165         "adcs	r4, r7\n\t"
125166 #else
125167         "adc	r4, r7\n\t"
125168 #endif
125169 #ifdef WOLFSSL_KEIL
125170         "adcs	r5, r5, %[r]\n\t"
125171 #elif defined(__clang__)
125172         "adcs	r5, %[r]\n\t"
125173 #else
125174         "adc	r5, %[r]\n\t"
125175 #endif
125176         "#  A[5] * B[4]\n\t"
125177         "mov	%[a], r9\n\t"
125178         "mov	%[b], r10\n\t"
125179         "ldr	%[a], [%[a], #20]\n\t"
125180         "ldr	%[b], [%[b], #16]\n\t"
125181         "uxth	r6, %[a]\n\t"
125182         "uxth	r7, %[b]\n\t"
125183 #ifdef WOLFSSL_KEIL
125184         "muls	r7, r6, r7\n\t"
125185 #elif defined(__clang__)
125186         "muls	r7, r6\n\t"
125187 #else
125188         "mul	r7, r6\n\t"
125189 #endif
125190 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125191         "adds	r3, r3, r7\n\t"
125192 #else
125193         "add	r3, r3, r7\n\t"
125194 #endif
125195 #ifdef WOLFSSL_KEIL
125196         "adcs	r4, r4, %[r]\n\t"
125197 #elif defined(__clang__)
125198         "adcs	r4, %[r]\n\t"
125199 #else
125200         "adc	r4, %[r]\n\t"
125201 #endif
125202 #ifdef WOLFSSL_KEIL
125203         "adcs	r5, r5, %[r]\n\t"
125204 #elif defined(__clang__)
125205         "adcs	r5, %[r]\n\t"
125206 #else
125207         "adc	r5, %[r]\n\t"
125208 #endif
125209 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125210         "lsrs	r7, %[b], #16\n\t"
125211 #else
125212         "lsr	r7, %[b], #16\n\t"
125213 #endif
125214 #ifdef WOLFSSL_KEIL
125215         "muls	r6, r7, r6\n\t"
125216 #elif defined(__clang__)
125217         "muls	r6, r7\n\t"
125218 #else
125219         "mul	r6, r7\n\t"
125220 #endif
125221 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125222         "lsrs	r7, r6, #16\n\t"
125223 #else
125224         "lsr	r7, r6, #16\n\t"
125225 #endif
125226 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125227         "lsls	r6, r6, #16\n\t"
125228 #else
125229         "lsl	r6, r6, #16\n\t"
125230 #endif
125231 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125232         "adds	r3, r3, r6\n\t"
125233 #else
125234         "add	r3, r3, r6\n\t"
125235 #endif
125236 #ifdef WOLFSSL_KEIL
125237         "adcs	r4, r4, r7\n\t"
125238 #elif defined(__clang__)
125239         "adcs	r4, r7\n\t"
125240 #else
125241         "adc	r4, r7\n\t"
125242 #endif
125243 #ifdef WOLFSSL_KEIL
125244         "adcs	r5, r5, %[r]\n\t"
125245 #elif defined(__clang__)
125246         "adcs	r5, %[r]\n\t"
125247 #else
125248         "adc	r5, %[r]\n\t"
125249 #endif
125250 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125251         "lsrs	r6, %[a], #16\n\t"
125252 #else
125253         "lsr	r6, %[a], #16\n\t"
125254 #endif
125255 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125256         "lsrs	r7, %[b], #16\n\t"
125257 #else
125258         "lsr	r7, %[b], #16\n\t"
125259 #endif
125260 #ifdef WOLFSSL_KEIL
125261         "muls	r7, r6, r7\n\t"
125262 #elif defined(__clang__)
125263         "muls	r7, r6\n\t"
125264 #else
125265         "mul	r7, r6\n\t"
125266 #endif
125267 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125268         "adds	r4, r4, r7\n\t"
125269 #else
125270         "add	r4, r4, r7\n\t"
125271 #endif
125272 #ifdef WOLFSSL_KEIL
125273         "adcs	r5, r5, %[r]\n\t"
125274 #elif defined(__clang__)
125275         "adcs	r5, %[r]\n\t"
125276 #else
125277         "adc	r5, %[r]\n\t"
125278 #endif
125279         "uxth	r7, %[b]\n\t"
125280 #ifdef WOLFSSL_KEIL
125281         "muls	r6, r7, r6\n\t"
125282 #elif defined(__clang__)
125283         "muls	r6, r7\n\t"
125284 #else
125285         "mul	r6, r7\n\t"
125286 #endif
125287 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125288         "lsrs	r7, r6, #16\n\t"
125289 #else
125290         "lsr	r7, r6, #16\n\t"
125291 #endif
125292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125293         "lsls	r6, r6, #16\n\t"
125294 #else
125295         "lsl	r6, r6, #16\n\t"
125296 #endif
125297 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125298         "adds	r3, r3, r6\n\t"
125299 #else
125300         "add	r3, r3, r6\n\t"
125301 #endif
125302 #ifdef WOLFSSL_KEIL
125303         "adcs	r4, r4, r7\n\t"
125304 #elif defined(__clang__)
125305         "adcs	r4, r7\n\t"
125306 #else
125307         "adc	r4, r7\n\t"
125308 #endif
125309 #ifdef WOLFSSL_KEIL
125310         "adcs	r5, r5, %[r]\n\t"
125311 #elif defined(__clang__)
125312         "adcs	r5, %[r]\n\t"
125313 #else
125314         "adc	r5, %[r]\n\t"
125315 #endif
125316         "#  A[6] * B[3]\n\t"
125317         "mov	%[a], r9\n\t"
125318         "mov	%[b], r10\n\t"
125319         "ldr	%[a], [%[a], #24]\n\t"
125320         "ldr	%[b], [%[b], #12]\n\t"
125321         "uxth	r6, %[a]\n\t"
125322         "uxth	r7, %[b]\n\t"
125323 #ifdef WOLFSSL_KEIL
125324         "muls	r7, r6, r7\n\t"
125325 #elif defined(__clang__)
125326         "muls	r7, r6\n\t"
125327 #else
125328         "mul	r7, r6\n\t"
125329 #endif
125330 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125331         "adds	r3, r3, r7\n\t"
125332 #else
125333         "add	r3, r3, r7\n\t"
125334 #endif
125335 #ifdef WOLFSSL_KEIL
125336         "adcs	r4, r4, %[r]\n\t"
125337 #elif defined(__clang__)
125338         "adcs	r4, %[r]\n\t"
125339 #else
125340         "adc	r4, %[r]\n\t"
125341 #endif
125342 #ifdef WOLFSSL_KEIL
125343         "adcs	r5, r5, %[r]\n\t"
125344 #elif defined(__clang__)
125345         "adcs	r5, %[r]\n\t"
125346 #else
125347         "adc	r5, %[r]\n\t"
125348 #endif
125349 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125350         "lsrs	r7, %[b], #16\n\t"
125351 #else
125352         "lsr	r7, %[b], #16\n\t"
125353 #endif
125354 #ifdef WOLFSSL_KEIL
125355         "muls	r6, r7, r6\n\t"
125356 #elif defined(__clang__)
125357         "muls	r6, r7\n\t"
125358 #else
125359         "mul	r6, r7\n\t"
125360 #endif
125361 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125362         "lsrs	r7, r6, #16\n\t"
125363 #else
125364         "lsr	r7, r6, #16\n\t"
125365 #endif
125366 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125367         "lsls	r6, r6, #16\n\t"
125368 #else
125369         "lsl	r6, r6, #16\n\t"
125370 #endif
125371 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125372         "adds	r3, r3, r6\n\t"
125373 #else
125374         "add	r3, r3, r6\n\t"
125375 #endif
125376 #ifdef WOLFSSL_KEIL
125377         "adcs	r4, r4, r7\n\t"
125378 #elif defined(__clang__)
125379         "adcs	r4, r7\n\t"
125380 #else
125381         "adc	r4, r7\n\t"
125382 #endif
125383 #ifdef WOLFSSL_KEIL
125384         "adcs	r5, r5, %[r]\n\t"
125385 #elif defined(__clang__)
125386         "adcs	r5, %[r]\n\t"
125387 #else
125388         "adc	r5, %[r]\n\t"
125389 #endif
125390 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125391         "lsrs	r6, %[a], #16\n\t"
125392 #else
125393         "lsr	r6, %[a], #16\n\t"
125394 #endif
125395 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125396         "lsrs	r7, %[b], #16\n\t"
125397 #else
125398         "lsr	r7, %[b], #16\n\t"
125399 #endif
125400 #ifdef WOLFSSL_KEIL
125401         "muls	r7, r6, r7\n\t"
125402 #elif defined(__clang__)
125403         "muls	r7, r6\n\t"
125404 #else
125405         "mul	r7, r6\n\t"
125406 #endif
125407 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125408         "adds	r4, r4, r7\n\t"
125409 #else
125410         "add	r4, r4, r7\n\t"
125411 #endif
125412 #ifdef WOLFSSL_KEIL
125413         "adcs	r5, r5, %[r]\n\t"
125414 #elif defined(__clang__)
125415         "adcs	r5, %[r]\n\t"
125416 #else
125417         "adc	r5, %[r]\n\t"
125418 #endif
125419         "uxth	r7, %[b]\n\t"
125420 #ifdef WOLFSSL_KEIL
125421         "muls	r6, r7, r6\n\t"
125422 #elif defined(__clang__)
125423         "muls	r6, r7\n\t"
125424 #else
125425         "mul	r6, r7\n\t"
125426 #endif
125427 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125428         "lsrs	r7, r6, #16\n\t"
125429 #else
125430         "lsr	r7, r6, #16\n\t"
125431 #endif
125432 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125433         "lsls	r6, r6, #16\n\t"
125434 #else
125435         "lsl	r6, r6, #16\n\t"
125436 #endif
125437 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125438         "adds	r3, r3, r6\n\t"
125439 #else
125440         "add	r3, r3, r6\n\t"
125441 #endif
125442 #ifdef WOLFSSL_KEIL
125443         "adcs	r4, r4, r7\n\t"
125444 #elif defined(__clang__)
125445         "adcs	r4, r7\n\t"
125446 #else
125447         "adc	r4, r7\n\t"
125448 #endif
125449 #ifdef WOLFSSL_KEIL
125450         "adcs	r5, r5, %[r]\n\t"
125451 #elif defined(__clang__)
125452         "adcs	r5, %[r]\n\t"
125453 #else
125454         "adc	r5, %[r]\n\t"
125455 #endif
125456         "#  A[7] * B[2]\n\t"
125457         "mov	%[a], r9\n\t"
125458         "mov	%[b], r10\n\t"
125459         "ldr	%[a], [%[a], #28]\n\t"
125460         "ldr	%[b], [%[b], #8]\n\t"
125461         "uxth	r6, %[a]\n\t"
125462         "uxth	r7, %[b]\n\t"
125463 #ifdef WOLFSSL_KEIL
125464         "muls	r7, r6, r7\n\t"
125465 #elif defined(__clang__)
125466         "muls	r7, r6\n\t"
125467 #else
125468         "mul	r7, r6\n\t"
125469 #endif
125470 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125471         "adds	r3, r3, r7\n\t"
125472 #else
125473         "add	r3, r3, r7\n\t"
125474 #endif
125475 #ifdef WOLFSSL_KEIL
125476         "adcs	r4, r4, %[r]\n\t"
125477 #elif defined(__clang__)
125478         "adcs	r4, %[r]\n\t"
125479 #else
125480         "adc	r4, %[r]\n\t"
125481 #endif
125482 #ifdef WOLFSSL_KEIL
125483         "adcs	r5, r5, %[r]\n\t"
125484 #elif defined(__clang__)
125485         "adcs	r5, %[r]\n\t"
125486 #else
125487         "adc	r5, %[r]\n\t"
125488 #endif
125489 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125490         "lsrs	r7, %[b], #16\n\t"
125491 #else
125492         "lsr	r7, %[b], #16\n\t"
125493 #endif
125494 #ifdef WOLFSSL_KEIL
125495         "muls	r6, r7, r6\n\t"
125496 #elif defined(__clang__)
125497         "muls	r6, r7\n\t"
125498 #else
125499         "mul	r6, r7\n\t"
125500 #endif
125501 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125502         "lsrs	r7, r6, #16\n\t"
125503 #else
125504         "lsr	r7, r6, #16\n\t"
125505 #endif
125506 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125507         "lsls	r6, r6, #16\n\t"
125508 #else
125509         "lsl	r6, r6, #16\n\t"
125510 #endif
125511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125512         "adds	r3, r3, r6\n\t"
125513 #else
125514         "add	r3, r3, r6\n\t"
125515 #endif
125516 #ifdef WOLFSSL_KEIL
125517         "adcs	r4, r4, r7\n\t"
125518 #elif defined(__clang__)
125519         "adcs	r4, r7\n\t"
125520 #else
125521         "adc	r4, r7\n\t"
125522 #endif
125523 #ifdef WOLFSSL_KEIL
125524         "adcs	r5, r5, %[r]\n\t"
125525 #elif defined(__clang__)
125526         "adcs	r5, %[r]\n\t"
125527 #else
125528         "adc	r5, %[r]\n\t"
125529 #endif
125530 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125531         "lsrs	r6, %[a], #16\n\t"
125532 #else
125533         "lsr	r6, %[a], #16\n\t"
125534 #endif
125535 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125536         "lsrs	r7, %[b], #16\n\t"
125537 #else
125538         "lsr	r7, %[b], #16\n\t"
125539 #endif
125540 #ifdef WOLFSSL_KEIL
125541         "muls	r7, r6, r7\n\t"
125542 #elif defined(__clang__)
125543         "muls	r7, r6\n\t"
125544 #else
125545         "mul	r7, r6\n\t"
125546 #endif
125547 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125548         "adds	r4, r4, r7\n\t"
125549 #else
125550         "add	r4, r4, r7\n\t"
125551 #endif
125552 #ifdef WOLFSSL_KEIL
125553         "adcs	r5, r5, %[r]\n\t"
125554 #elif defined(__clang__)
125555         "adcs	r5, %[r]\n\t"
125556 #else
125557         "adc	r5, %[r]\n\t"
125558 #endif
125559         "uxth	r7, %[b]\n\t"
125560 #ifdef WOLFSSL_KEIL
125561         "muls	r6, r7, r6\n\t"
125562 #elif defined(__clang__)
125563         "muls	r6, r7\n\t"
125564 #else
125565         "mul	r6, r7\n\t"
125566 #endif
125567 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125568         "lsrs	r7, r6, #16\n\t"
125569 #else
125570         "lsr	r7, r6, #16\n\t"
125571 #endif
125572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125573         "lsls	r6, r6, #16\n\t"
125574 #else
125575         "lsl	r6, r6, #16\n\t"
125576 #endif
125577 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125578         "adds	r3, r3, r6\n\t"
125579 #else
125580         "add	r3, r3, r6\n\t"
125581 #endif
125582 #ifdef WOLFSSL_KEIL
125583         "adcs	r4, r4, r7\n\t"
125584 #elif defined(__clang__)
125585         "adcs	r4, r7\n\t"
125586 #else
125587         "adc	r4, r7\n\t"
125588 #endif
125589 #ifdef WOLFSSL_KEIL
125590         "adcs	r5, r5, %[r]\n\t"
125591 #elif defined(__clang__)
125592         "adcs	r5, %[r]\n\t"
125593 #else
125594         "adc	r5, %[r]\n\t"
125595 #endif
125596         "#  A[8] * B[1]\n\t"
125597         "mov	%[a], r9\n\t"
125598         "mov	%[b], r10\n\t"
125599         "ldr	%[a], [%[a], #32]\n\t"
125600         "ldr	%[b], [%[b], #4]\n\t"
125601         "uxth	r6, %[a]\n\t"
125602         "uxth	r7, %[b]\n\t"
125603 #ifdef WOLFSSL_KEIL
125604         "muls	r7, r6, r7\n\t"
125605 #elif defined(__clang__)
125606         "muls	r7, r6\n\t"
125607 #else
125608         "mul	r7, r6\n\t"
125609 #endif
125610 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125611         "adds	r3, r3, r7\n\t"
125612 #else
125613         "add	r3, r3, r7\n\t"
125614 #endif
125615 #ifdef WOLFSSL_KEIL
125616         "adcs	r4, r4, %[r]\n\t"
125617 #elif defined(__clang__)
125618         "adcs	r4, %[r]\n\t"
125619 #else
125620         "adc	r4, %[r]\n\t"
125621 #endif
125622 #ifdef WOLFSSL_KEIL
125623         "adcs	r5, r5, %[r]\n\t"
125624 #elif defined(__clang__)
125625         "adcs	r5, %[r]\n\t"
125626 #else
125627         "adc	r5, %[r]\n\t"
125628 #endif
125629 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125630         "lsrs	r7, %[b], #16\n\t"
125631 #else
125632         "lsr	r7, %[b], #16\n\t"
125633 #endif
125634 #ifdef WOLFSSL_KEIL
125635         "muls	r6, r7, r6\n\t"
125636 #elif defined(__clang__)
125637         "muls	r6, r7\n\t"
125638 #else
125639         "mul	r6, r7\n\t"
125640 #endif
125641 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125642         "lsrs	r7, r6, #16\n\t"
125643 #else
125644         "lsr	r7, r6, #16\n\t"
125645 #endif
125646 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125647         "lsls	r6, r6, #16\n\t"
125648 #else
125649         "lsl	r6, r6, #16\n\t"
125650 #endif
125651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125652         "adds	r3, r3, r6\n\t"
125653 #else
125654         "add	r3, r3, r6\n\t"
125655 #endif
125656 #ifdef WOLFSSL_KEIL
125657         "adcs	r4, r4, r7\n\t"
125658 #elif defined(__clang__)
125659         "adcs	r4, r7\n\t"
125660 #else
125661         "adc	r4, r7\n\t"
125662 #endif
125663 #ifdef WOLFSSL_KEIL
125664         "adcs	r5, r5, %[r]\n\t"
125665 #elif defined(__clang__)
125666         "adcs	r5, %[r]\n\t"
125667 #else
125668         "adc	r5, %[r]\n\t"
125669 #endif
125670 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125671         "lsrs	r6, %[a], #16\n\t"
125672 #else
125673         "lsr	r6, %[a], #16\n\t"
125674 #endif
125675 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125676         "lsrs	r7, %[b], #16\n\t"
125677 #else
125678         "lsr	r7, %[b], #16\n\t"
125679 #endif
125680 #ifdef WOLFSSL_KEIL
125681         "muls	r7, r6, r7\n\t"
125682 #elif defined(__clang__)
125683         "muls	r7, r6\n\t"
125684 #else
125685         "mul	r7, r6\n\t"
125686 #endif
125687 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125688         "adds	r4, r4, r7\n\t"
125689 #else
125690         "add	r4, r4, r7\n\t"
125691 #endif
125692 #ifdef WOLFSSL_KEIL
125693         "adcs	r5, r5, %[r]\n\t"
125694 #elif defined(__clang__)
125695         "adcs	r5, %[r]\n\t"
125696 #else
125697         "adc	r5, %[r]\n\t"
125698 #endif
125699         "uxth	r7, %[b]\n\t"
125700 #ifdef WOLFSSL_KEIL
125701         "muls	r6, r7, r6\n\t"
125702 #elif defined(__clang__)
125703         "muls	r6, r7\n\t"
125704 #else
125705         "mul	r6, r7\n\t"
125706 #endif
125707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125708         "lsrs	r7, r6, #16\n\t"
125709 #else
125710         "lsr	r7, r6, #16\n\t"
125711 #endif
125712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125713         "lsls	r6, r6, #16\n\t"
125714 #else
125715         "lsl	r6, r6, #16\n\t"
125716 #endif
125717 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125718         "adds	r3, r3, r6\n\t"
125719 #else
125720         "add	r3, r3, r6\n\t"
125721 #endif
125722 #ifdef WOLFSSL_KEIL
125723         "adcs	r4, r4, r7\n\t"
125724 #elif defined(__clang__)
125725         "adcs	r4, r7\n\t"
125726 #else
125727         "adc	r4, r7\n\t"
125728 #endif
125729 #ifdef WOLFSSL_KEIL
125730         "adcs	r5, r5, %[r]\n\t"
125731 #elif defined(__clang__)
125732         "adcs	r5, %[r]\n\t"
125733 #else
125734         "adc	r5, %[r]\n\t"
125735 #endif
125736         "#  A[9] * B[0]\n\t"
125737         "mov	%[a], r9\n\t"
125738         "mov	%[b], r10\n\t"
125739         "ldr	%[a], [%[a], #36]\n\t"
125740         "ldr	%[b], [%[b]]\n\t"
125741         "uxth	r6, %[a]\n\t"
125742         "uxth	r7, %[b]\n\t"
125743 #ifdef WOLFSSL_KEIL
125744         "muls	r7, r6, r7\n\t"
125745 #elif defined(__clang__)
125746         "muls	r7, r6\n\t"
125747 #else
125748         "mul	r7, r6\n\t"
125749 #endif
125750 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125751         "adds	r3, r3, r7\n\t"
125752 #else
125753         "add	r3, r3, r7\n\t"
125754 #endif
125755 #ifdef WOLFSSL_KEIL
125756         "adcs	r4, r4, %[r]\n\t"
125757 #elif defined(__clang__)
125758         "adcs	r4, %[r]\n\t"
125759 #else
125760         "adc	r4, %[r]\n\t"
125761 #endif
125762 #ifdef WOLFSSL_KEIL
125763         "adcs	r5, r5, %[r]\n\t"
125764 #elif defined(__clang__)
125765         "adcs	r5, %[r]\n\t"
125766 #else
125767         "adc	r5, %[r]\n\t"
125768 #endif
125769 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125770         "lsrs	r7, %[b], #16\n\t"
125771 #else
125772         "lsr	r7, %[b], #16\n\t"
125773 #endif
125774 #ifdef WOLFSSL_KEIL
125775         "muls	r6, r7, r6\n\t"
125776 #elif defined(__clang__)
125777         "muls	r6, r7\n\t"
125778 #else
125779         "mul	r6, r7\n\t"
125780 #endif
125781 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125782         "lsrs	r7, r6, #16\n\t"
125783 #else
125784         "lsr	r7, r6, #16\n\t"
125785 #endif
125786 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125787         "lsls	r6, r6, #16\n\t"
125788 #else
125789         "lsl	r6, r6, #16\n\t"
125790 #endif
125791 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125792         "adds	r3, r3, r6\n\t"
125793 #else
125794         "add	r3, r3, r6\n\t"
125795 #endif
125796 #ifdef WOLFSSL_KEIL
125797         "adcs	r4, r4, r7\n\t"
125798 #elif defined(__clang__)
125799         "adcs	r4, r7\n\t"
125800 #else
125801         "adc	r4, r7\n\t"
125802 #endif
125803 #ifdef WOLFSSL_KEIL
125804         "adcs	r5, r5, %[r]\n\t"
125805 #elif defined(__clang__)
125806         "adcs	r5, %[r]\n\t"
125807 #else
125808         "adc	r5, %[r]\n\t"
125809 #endif
125810 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125811         "lsrs	r6, %[a], #16\n\t"
125812 #else
125813         "lsr	r6, %[a], #16\n\t"
125814 #endif
125815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125816         "lsrs	r7, %[b], #16\n\t"
125817 #else
125818         "lsr	r7, %[b], #16\n\t"
125819 #endif
125820 #ifdef WOLFSSL_KEIL
125821         "muls	r7, r6, r7\n\t"
125822 #elif defined(__clang__)
125823         "muls	r7, r6\n\t"
125824 #else
125825         "mul	r7, r6\n\t"
125826 #endif
125827 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125828         "adds	r4, r4, r7\n\t"
125829 #else
125830         "add	r4, r4, r7\n\t"
125831 #endif
125832 #ifdef WOLFSSL_KEIL
125833         "adcs	r5, r5, %[r]\n\t"
125834 #elif defined(__clang__)
125835         "adcs	r5, %[r]\n\t"
125836 #else
125837         "adc	r5, %[r]\n\t"
125838 #endif
125839         "uxth	r7, %[b]\n\t"
125840 #ifdef WOLFSSL_KEIL
125841         "muls	r6, r7, r6\n\t"
125842 #elif defined(__clang__)
125843         "muls	r6, r7\n\t"
125844 #else
125845         "mul	r6, r7\n\t"
125846 #endif
125847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125848         "lsrs	r7, r6, #16\n\t"
125849 #else
125850         "lsr	r7, r6, #16\n\t"
125851 #endif
125852 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125853         "lsls	r6, r6, #16\n\t"
125854 #else
125855         "lsl	r6, r6, #16\n\t"
125856 #endif
125857 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125858         "adds	r3, r3, r6\n\t"
125859 #else
125860         "add	r3, r3, r6\n\t"
125861 #endif
125862 #ifdef WOLFSSL_KEIL
125863         "adcs	r4, r4, r7\n\t"
125864 #elif defined(__clang__)
125865         "adcs	r4, r7\n\t"
125866 #else
125867         "adc	r4, r7\n\t"
125868 #endif
125869 #ifdef WOLFSSL_KEIL
125870         "adcs	r5, r5, %[r]\n\t"
125871 #elif defined(__clang__)
125872         "adcs	r5, %[r]\n\t"
125873 #else
125874         "adc	r5, %[r]\n\t"
125875 #endif
125876         "str	r3, [sp, #36]\n\t"
125877         "#  A[10] * B[0]\n\t"
125878         "movs	r3, #0\n\t"
125879         "mov	%[a], r9\n\t"
125880         "mov	%[b], r10\n\t"
125881         "ldr	%[a], [%[a], #40]\n\t"
125882         "ldr	%[b], [%[b]]\n\t"
125883         "uxth	r6, %[a]\n\t"
125884         "uxth	r7, %[b]\n\t"
125885 #ifdef WOLFSSL_KEIL
125886         "muls	r7, r6, r7\n\t"
125887 #elif defined(__clang__)
125888         "muls	r7, r6\n\t"
125889 #else
125890         "mul	r7, r6\n\t"
125891 #endif
125892 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125893         "adds	r4, r4, r7\n\t"
125894 #else
125895         "add	r4, r4, r7\n\t"
125896 #endif
125897 #ifdef WOLFSSL_KEIL
125898         "adcs	r5, r5, %[r]\n\t"
125899 #elif defined(__clang__)
125900         "adcs	r5, %[r]\n\t"
125901 #else
125902         "adc	r5, %[r]\n\t"
125903 #endif
125904 #ifdef WOLFSSL_KEIL
125905         "adcs	r3, r3, %[r]\n\t"
125906 #elif defined(__clang__)
125907         "adcs	r3, %[r]\n\t"
125908 #else
125909         "adc	r3, %[r]\n\t"
125910 #endif
125911 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125912         "lsrs	r7, %[b], #16\n\t"
125913 #else
125914         "lsr	r7, %[b], #16\n\t"
125915 #endif
125916 #ifdef WOLFSSL_KEIL
125917         "muls	r6, r7, r6\n\t"
125918 #elif defined(__clang__)
125919         "muls	r6, r7\n\t"
125920 #else
125921         "mul	r6, r7\n\t"
125922 #endif
125923 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125924         "lsrs	r7, r6, #16\n\t"
125925 #else
125926         "lsr	r7, r6, #16\n\t"
125927 #endif
125928 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125929         "lsls	r6, r6, #16\n\t"
125930 #else
125931         "lsl	r6, r6, #16\n\t"
125932 #endif
125933 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125934         "adds	r4, r4, r6\n\t"
125935 #else
125936         "add	r4, r4, r6\n\t"
125937 #endif
125938 #ifdef WOLFSSL_KEIL
125939         "adcs	r5, r5, r7\n\t"
125940 #elif defined(__clang__)
125941         "adcs	r5, r7\n\t"
125942 #else
125943         "adc	r5, r7\n\t"
125944 #endif
125945 #ifdef WOLFSSL_KEIL
125946         "adcs	r3, r3, %[r]\n\t"
125947 #elif defined(__clang__)
125948         "adcs	r3, %[r]\n\t"
125949 #else
125950         "adc	r3, %[r]\n\t"
125951 #endif
125952 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125953         "lsrs	r6, %[a], #16\n\t"
125954 #else
125955         "lsr	r6, %[a], #16\n\t"
125956 #endif
125957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125958         "lsrs	r7, %[b], #16\n\t"
125959 #else
125960         "lsr	r7, %[b], #16\n\t"
125961 #endif
125962 #ifdef WOLFSSL_KEIL
125963         "muls	r7, r6, r7\n\t"
125964 #elif defined(__clang__)
125965         "muls	r7, r6\n\t"
125966 #else
125967         "mul	r7, r6\n\t"
125968 #endif
125969 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125970         "adds	r5, r5, r7\n\t"
125971 #else
125972         "add	r5, r5, r7\n\t"
125973 #endif
125974 #ifdef WOLFSSL_KEIL
125975         "adcs	r3, r3, %[r]\n\t"
125976 #elif defined(__clang__)
125977         "adcs	r3, %[r]\n\t"
125978 #else
125979         "adc	r3, %[r]\n\t"
125980 #endif
125981         "uxth	r7, %[b]\n\t"
125982 #ifdef WOLFSSL_KEIL
125983         "muls	r6, r7, r6\n\t"
125984 #elif defined(__clang__)
125985         "muls	r6, r7\n\t"
125986 #else
125987         "mul	r6, r7\n\t"
125988 #endif
125989 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125990         "lsrs	r7, r6, #16\n\t"
125991 #else
125992         "lsr	r7, r6, #16\n\t"
125993 #endif
125994 #if defined(__clang__) || defined(WOLFSSL_KEIL)
125995         "lsls	r6, r6, #16\n\t"
125996 #else
125997         "lsl	r6, r6, #16\n\t"
125998 #endif
125999 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126000         "adds	r4, r4, r6\n\t"
126001 #else
126002         "add	r4, r4, r6\n\t"
126003 #endif
126004 #ifdef WOLFSSL_KEIL
126005         "adcs	r5, r5, r7\n\t"
126006 #elif defined(__clang__)
126007         "adcs	r5, r7\n\t"
126008 #else
126009         "adc	r5, r7\n\t"
126010 #endif
126011 #ifdef WOLFSSL_KEIL
126012         "adcs	r3, r3, %[r]\n\t"
126013 #elif defined(__clang__)
126014         "adcs	r3, %[r]\n\t"
126015 #else
126016         "adc	r3, %[r]\n\t"
126017 #endif
126018         "#  A[9] * B[1]\n\t"
126019         "mov	%[a], r9\n\t"
126020         "mov	%[b], r10\n\t"
126021         "ldr	%[a], [%[a], #36]\n\t"
126022         "ldr	%[b], [%[b], #4]\n\t"
126023         "uxth	r6, %[a]\n\t"
126024         "uxth	r7, %[b]\n\t"
126025 #ifdef WOLFSSL_KEIL
126026         "muls	r7, r6, r7\n\t"
126027 #elif defined(__clang__)
126028         "muls	r7, r6\n\t"
126029 #else
126030         "mul	r7, r6\n\t"
126031 #endif
126032 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126033         "adds	r4, r4, r7\n\t"
126034 #else
126035         "add	r4, r4, r7\n\t"
126036 #endif
126037 #ifdef WOLFSSL_KEIL
126038         "adcs	r5, r5, %[r]\n\t"
126039 #elif defined(__clang__)
126040         "adcs	r5, %[r]\n\t"
126041 #else
126042         "adc	r5, %[r]\n\t"
126043 #endif
126044 #ifdef WOLFSSL_KEIL
126045         "adcs	r3, r3, %[r]\n\t"
126046 #elif defined(__clang__)
126047         "adcs	r3, %[r]\n\t"
126048 #else
126049         "adc	r3, %[r]\n\t"
126050 #endif
126051 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126052         "lsrs	r7, %[b], #16\n\t"
126053 #else
126054         "lsr	r7, %[b], #16\n\t"
126055 #endif
126056 #ifdef WOLFSSL_KEIL
126057         "muls	r6, r7, r6\n\t"
126058 #elif defined(__clang__)
126059         "muls	r6, r7\n\t"
126060 #else
126061         "mul	r6, r7\n\t"
126062 #endif
126063 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126064         "lsrs	r7, r6, #16\n\t"
126065 #else
126066         "lsr	r7, r6, #16\n\t"
126067 #endif
126068 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126069         "lsls	r6, r6, #16\n\t"
126070 #else
126071         "lsl	r6, r6, #16\n\t"
126072 #endif
126073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126074         "adds	r4, r4, r6\n\t"
126075 #else
126076         "add	r4, r4, r6\n\t"
126077 #endif
126078 #ifdef WOLFSSL_KEIL
126079         "adcs	r5, r5, r7\n\t"
126080 #elif defined(__clang__)
126081         "adcs	r5, r7\n\t"
126082 #else
126083         "adc	r5, r7\n\t"
126084 #endif
126085 #ifdef WOLFSSL_KEIL
126086         "adcs	r3, r3, %[r]\n\t"
126087 #elif defined(__clang__)
126088         "adcs	r3, %[r]\n\t"
126089 #else
126090         "adc	r3, %[r]\n\t"
126091 #endif
126092 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126093         "lsrs	r6, %[a], #16\n\t"
126094 #else
126095         "lsr	r6, %[a], #16\n\t"
126096 #endif
126097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126098         "lsrs	r7, %[b], #16\n\t"
126099 #else
126100         "lsr	r7, %[b], #16\n\t"
126101 #endif
126102 #ifdef WOLFSSL_KEIL
126103         "muls	r7, r6, r7\n\t"
126104 #elif defined(__clang__)
126105         "muls	r7, r6\n\t"
126106 #else
126107         "mul	r7, r6\n\t"
126108 #endif
126109 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126110         "adds	r5, r5, r7\n\t"
126111 #else
126112         "add	r5, r5, r7\n\t"
126113 #endif
126114 #ifdef WOLFSSL_KEIL
126115         "adcs	r3, r3, %[r]\n\t"
126116 #elif defined(__clang__)
126117         "adcs	r3, %[r]\n\t"
126118 #else
126119         "adc	r3, %[r]\n\t"
126120 #endif
126121         "uxth	r7, %[b]\n\t"
126122 #ifdef WOLFSSL_KEIL
126123         "muls	r6, r7, r6\n\t"
126124 #elif defined(__clang__)
126125         "muls	r6, r7\n\t"
126126 #else
126127         "mul	r6, r7\n\t"
126128 #endif
126129 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126130         "lsrs	r7, r6, #16\n\t"
126131 #else
126132         "lsr	r7, r6, #16\n\t"
126133 #endif
126134 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126135         "lsls	r6, r6, #16\n\t"
126136 #else
126137         "lsl	r6, r6, #16\n\t"
126138 #endif
126139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126140         "adds	r4, r4, r6\n\t"
126141 #else
126142         "add	r4, r4, r6\n\t"
126143 #endif
126144 #ifdef WOLFSSL_KEIL
126145         "adcs	r5, r5, r7\n\t"
126146 #elif defined(__clang__)
126147         "adcs	r5, r7\n\t"
126148 #else
126149         "adc	r5, r7\n\t"
126150 #endif
126151 #ifdef WOLFSSL_KEIL
126152         "adcs	r3, r3, %[r]\n\t"
126153 #elif defined(__clang__)
126154         "adcs	r3, %[r]\n\t"
126155 #else
126156         "adc	r3, %[r]\n\t"
126157 #endif
126158         "#  A[8] * B[2]\n\t"
126159         "mov	%[a], r9\n\t"
126160         "mov	%[b], r10\n\t"
126161         "ldr	%[a], [%[a], #32]\n\t"
126162         "ldr	%[b], [%[b], #8]\n\t"
126163         "uxth	r6, %[a]\n\t"
126164         "uxth	r7, %[b]\n\t"
126165 #ifdef WOLFSSL_KEIL
126166         "muls	r7, r6, r7\n\t"
126167 #elif defined(__clang__)
126168         "muls	r7, r6\n\t"
126169 #else
126170         "mul	r7, r6\n\t"
126171 #endif
126172 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126173         "adds	r4, r4, r7\n\t"
126174 #else
126175         "add	r4, r4, r7\n\t"
126176 #endif
126177 #ifdef WOLFSSL_KEIL
126178         "adcs	r5, r5, %[r]\n\t"
126179 #elif defined(__clang__)
126180         "adcs	r5, %[r]\n\t"
126181 #else
126182         "adc	r5, %[r]\n\t"
126183 #endif
126184 #ifdef WOLFSSL_KEIL
126185         "adcs	r3, r3, %[r]\n\t"
126186 #elif defined(__clang__)
126187         "adcs	r3, %[r]\n\t"
126188 #else
126189         "adc	r3, %[r]\n\t"
126190 #endif
126191 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126192         "lsrs	r7, %[b], #16\n\t"
126193 #else
126194         "lsr	r7, %[b], #16\n\t"
126195 #endif
126196 #ifdef WOLFSSL_KEIL
126197         "muls	r6, r7, r6\n\t"
126198 #elif defined(__clang__)
126199         "muls	r6, r7\n\t"
126200 #else
126201         "mul	r6, r7\n\t"
126202 #endif
126203 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126204         "lsrs	r7, r6, #16\n\t"
126205 #else
126206         "lsr	r7, r6, #16\n\t"
126207 #endif
126208 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126209         "lsls	r6, r6, #16\n\t"
126210 #else
126211         "lsl	r6, r6, #16\n\t"
126212 #endif
126213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126214         "adds	r4, r4, r6\n\t"
126215 #else
126216         "add	r4, r4, r6\n\t"
126217 #endif
126218 #ifdef WOLFSSL_KEIL
126219         "adcs	r5, r5, r7\n\t"
126220 #elif defined(__clang__)
126221         "adcs	r5, r7\n\t"
126222 #else
126223         "adc	r5, r7\n\t"
126224 #endif
126225 #ifdef WOLFSSL_KEIL
126226         "adcs	r3, r3, %[r]\n\t"
126227 #elif defined(__clang__)
126228         "adcs	r3, %[r]\n\t"
126229 #else
126230         "adc	r3, %[r]\n\t"
126231 #endif
126232 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126233         "lsrs	r6, %[a], #16\n\t"
126234 #else
126235         "lsr	r6, %[a], #16\n\t"
126236 #endif
126237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126238         "lsrs	r7, %[b], #16\n\t"
126239 #else
126240         "lsr	r7, %[b], #16\n\t"
126241 #endif
126242 #ifdef WOLFSSL_KEIL
126243         "muls	r7, r6, r7\n\t"
126244 #elif defined(__clang__)
126245         "muls	r7, r6\n\t"
126246 #else
126247         "mul	r7, r6\n\t"
126248 #endif
126249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126250         "adds	r5, r5, r7\n\t"
126251 #else
126252         "add	r5, r5, r7\n\t"
126253 #endif
126254 #ifdef WOLFSSL_KEIL
126255         "adcs	r3, r3, %[r]\n\t"
126256 #elif defined(__clang__)
126257         "adcs	r3, %[r]\n\t"
126258 #else
126259         "adc	r3, %[r]\n\t"
126260 #endif
126261         "uxth	r7, %[b]\n\t"
126262 #ifdef WOLFSSL_KEIL
126263         "muls	r6, r7, r6\n\t"
126264 #elif defined(__clang__)
126265         "muls	r6, r7\n\t"
126266 #else
126267         "mul	r6, r7\n\t"
126268 #endif
126269 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126270         "lsrs	r7, r6, #16\n\t"
126271 #else
126272         "lsr	r7, r6, #16\n\t"
126273 #endif
126274 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126275         "lsls	r6, r6, #16\n\t"
126276 #else
126277         "lsl	r6, r6, #16\n\t"
126278 #endif
126279 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126280         "adds	r4, r4, r6\n\t"
126281 #else
126282         "add	r4, r4, r6\n\t"
126283 #endif
126284 #ifdef WOLFSSL_KEIL
126285         "adcs	r5, r5, r7\n\t"
126286 #elif defined(__clang__)
126287         "adcs	r5, r7\n\t"
126288 #else
126289         "adc	r5, r7\n\t"
126290 #endif
126291 #ifdef WOLFSSL_KEIL
126292         "adcs	r3, r3, %[r]\n\t"
126293 #elif defined(__clang__)
126294         "adcs	r3, %[r]\n\t"
126295 #else
126296         "adc	r3, %[r]\n\t"
126297 #endif
126298         "#  A[7] * B[3]\n\t"
126299         "mov	%[a], r9\n\t"
126300         "mov	%[b], r10\n\t"
126301         "ldr	%[a], [%[a], #28]\n\t"
126302         "ldr	%[b], [%[b], #12]\n\t"
126303         "uxth	r6, %[a]\n\t"
126304         "uxth	r7, %[b]\n\t"
126305 #ifdef WOLFSSL_KEIL
126306         "muls	r7, r6, r7\n\t"
126307 #elif defined(__clang__)
126308         "muls	r7, r6\n\t"
126309 #else
126310         "mul	r7, r6\n\t"
126311 #endif
126312 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126313         "adds	r4, r4, r7\n\t"
126314 #else
126315         "add	r4, r4, r7\n\t"
126316 #endif
126317 #ifdef WOLFSSL_KEIL
126318         "adcs	r5, r5, %[r]\n\t"
126319 #elif defined(__clang__)
126320         "adcs	r5, %[r]\n\t"
126321 #else
126322         "adc	r5, %[r]\n\t"
126323 #endif
126324 #ifdef WOLFSSL_KEIL
126325         "adcs	r3, r3, %[r]\n\t"
126326 #elif defined(__clang__)
126327         "adcs	r3, %[r]\n\t"
126328 #else
126329         "adc	r3, %[r]\n\t"
126330 #endif
126331 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126332         "lsrs	r7, %[b], #16\n\t"
126333 #else
126334         "lsr	r7, %[b], #16\n\t"
126335 #endif
126336 #ifdef WOLFSSL_KEIL
126337         "muls	r6, r7, r6\n\t"
126338 #elif defined(__clang__)
126339         "muls	r6, r7\n\t"
126340 #else
126341         "mul	r6, r7\n\t"
126342 #endif
126343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126344         "lsrs	r7, r6, #16\n\t"
126345 #else
126346         "lsr	r7, r6, #16\n\t"
126347 #endif
126348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126349         "lsls	r6, r6, #16\n\t"
126350 #else
126351         "lsl	r6, r6, #16\n\t"
126352 #endif
126353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126354         "adds	r4, r4, r6\n\t"
126355 #else
126356         "add	r4, r4, r6\n\t"
126357 #endif
126358 #ifdef WOLFSSL_KEIL
126359         "adcs	r5, r5, r7\n\t"
126360 #elif defined(__clang__)
126361         "adcs	r5, r7\n\t"
126362 #else
126363         "adc	r5, r7\n\t"
126364 #endif
126365 #ifdef WOLFSSL_KEIL
126366         "adcs	r3, r3, %[r]\n\t"
126367 #elif defined(__clang__)
126368         "adcs	r3, %[r]\n\t"
126369 #else
126370         "adc	r3, %[r]\n\t"
126371 #endif
126372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126373         "lsrs	r6, %[a], #16\n\t"
126374 #else
126375         "lsr	r6, %[a], #16\n\t"
126376 #endif
126377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126378         "lsrs	r7, %[b], #16\n\t"
126379 #else
126380         "lsr	r7, %[b], #16\n\t"
126381 #endif
126382 #ifdef WOLFSSL_KEIL
126383         "muls	r7, r6, r7\n\t"
126384 #elif defined(__clang__)
126385         "muls	r7, r6\n\t"
126386 #else
126387         "mul	r7, r6\n\t"
126388 #endif
126389 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126390         "adds	r5, r5, r7\n\t"
126391 #else
126392         "add	r5, r5, r7\n\t"
126393 #endif
126394 #ifdef WOLFSSL_KEIL
126395         "adcs	r3, r3, %[r]\n\t"
126396 #elif defined(__clang__)
126397         "adcs	r3, %[r]\n\t"
126398 #else
126399         "adc	r3, %[r]\n\t"
126400 #endif
126401         "uxth	r7, %[b]\n\t"
126402 #ifdef WOLFSSL_KEIL
126403         "muls	r6, r7, r6\n\t"
126404 #elif defined(__clang__)
126405         "muls	r6, r7\n\t"
126406 #else
126407         "mul	r6, r7\n\t"
126408 #endif
126409 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126410         "lsrs	r7, r6, #16\n\t"
126411 #else
126412         "lsr	r7, r6, #16\n\t"
126413 #endif
126414 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126415         "lsls	r6, r6, #16\n\t"
126416 #else
126417         "lsl	r6, r6, #16\n\t"
126418 #endif
126419 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126420         "adds	r4, r4, r6\n\t"
126421 #else
126422         "add	r4, r4, r6\n\t"
126423 #endif
126424 #ifdef WOLFSSL_KEIL
126425         "adcs	r5, r5, r7\n\t"
126426 #elif defined(__clang__)
126427         "adcs	r5, r7\n\t"
126428 #else
126429         "adc	r5, r7\n\t"
126430 #endif
126431 #ifdef WOLFSSL_KEIL
126432         "adcs	r3, r3, %[r]\n\t"
126433 #elif defined(__clang__)
126434         "adcs	r3, %[r]\n\t"
126435 #else
126436         "adc	r3, %[r]\n\t"
126437 #endif
126438         "#  A[6] * B[4]\n\t"
126439         "mov	%[a], r9\n\t"
126440         "mov	%[b], r10\n\t"
126441         "ldr	%[a], [%[a], #24]\n\t"
126442         "ldr	%[b], [%[b], #16]\n\t"
126443         "uxth	r6, %[a]\n\t"
126444         "uxth	r7, %[b]\n\t"
126445 #ifdef WOLFSSL_KEIL
126446         "muls	r7, r6, r7\n\t"
126447 #elif defined(__clang__)
126448         "muls	r7, r6\n\t"
126449 #else
126450         "mul	r7, r6\n\t"
126451 #endif
126452 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126453         "adds	r4, r4, r7\n\t"
126454 #else
126455         "add	r4, r4, r7\n\t"
126456 #endif
126457 #ifdef WOLFSSL_KEIL
126458         "adcs	r5, r5, %[r]\n\t"
126459 #elif defined(__clang__)
126460         "adcs	r5, %[r]\n\t"
126461 #else
126462         "adc	r5, %[r]\n\t"
126463 #endif
126464 #ifdef WOLFSSL_KEIL
126465         "adcs	r3, r3, %[r]\n\t"
126466 #elif defined(__clang__)
126467         "adcs	r3, %[r]\n\t"
126468 #else
126469         "adc	r3, %[r]\n\t"
126470 #endif
126471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126472         "lsrs	r7, %[b], #16\n\t"
126473 #else
126474         "lsr	r7, %[b], #16\n\t"
126475 #endif
126476 #ifdef WOLFSSL_KEIL
126477         "muls	r6, r7, r6\n\t"
126478 #elif defined(__clang__)
126479         "muls	r6, r7\n\t"
126480 #else
126481         "mul	r6, r7\n\t"
126482 #endif
126483 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126484         "lsrs	r7, r6, #16\n\t"
126485 #else
126486         "lsr	r7, r6, #16\n\t"
126487 #endif
126488 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126489         "lsls	r6, r6, #16\n\t"
126490 #else
126491         "lsl	r6, r6, #16\n\t"
126492 #endif
126493 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126494         "adds	r4, r4, r6\n\t"
126495 #else
126496         "add	r4, r4, r6\n\t"
126497 #endif
126498 #ifdef WOLFSSL_KEIL
126499         "adcs	r5, r5, r7\n\t"
126500 #elif defined(__clang__)
126501         "adcs	r5, r7\n\t"
126502 #else
126503         "adc	r5, r7\n\t"
126504 #endif
126505 #ifdef WOLFSSL_KEIL
126506         "adcs	r3, r3, %[r]\n\t"
126507 #elif defined(__clang__)
126508         "adcs	r3, %[r]\n\t"
126509 #else
126510         "adc	r3, %[r]\n\t"
126511 #endif
126512 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126513         "lsrs	r6, %[a], #16\n\t"
126514 #else
126515         "lsr	r6, %[a], #16\n\t"
126516 #endif
126517 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126518         "lsrs	r7, %[b], #16\n\t"
126519 #else
126520         "lsr	r7, %[b], #16\n\t"
126521 #endif
126522 #ifdef WOLFSSL_KEIL
126523         "muls	r7, r6, r7\n\t"
126524 #elif defined(__clang__)
126525         "muls	r7, r6\n\t"
126526 #else
126527         "mul	r7, r6\n\t"
126528 #endif
126529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126530         "adds	r5, r5, r7\n\t"
126531 #else
126532         "add	r5, r5, r7\n\t"
126533 #endif
126534 #ifdef WOLFSSL_KEIL
126535         "adcs	r3, r3, %[r]\n\t"
126536 #elif defined(__clang__)
126537         "adcs	r3, %[r]\n\t"
126538 #else
126539         "adc	r3, %[r]\n\t"
126540 #endif
126541         "uxth	r7, %[b]\n\t"
126542 #ifdef WOLFSSL_KEIL
126543         "muls	r6, r7, r6\n\t"
126544 #elif defined(__clang__)
126545         "muls	r6, r7\n\t"
126546 #else
126547         "mul	r6, r7\n\t"
126548 #endif
126549 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126550         "lsrs	r7, r6, #16\n\t"
126551 #else
126552         "lsr	r7, r6, #16\n\t"
126553 #endif
126554 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126555         "lsls	r6, r6, #16\n\t"
126556 #else
126557         "lsl	r6, r6, #16\n\t"
126558 #endif
126559 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126560         "adds	r4, r4, r6\n\t"
126561 #else
126562         "add	r4, r4, r6\n\t"
126563 #endif
126564 #ifdef WOLFSSL_KEIL
126565         "adcs	r5, r5, r7\n\t"
126566 #elif defined(__clang__)
126567         "adcs	r5, r7\n\t"
126568 #else
126569         "adc	r5, r7\n\t"
126570 #endif
126571 #ifdef WOLFSSL_KEIL
126572         "adcs	r3, r3, %[r]\n\t"
126573 #elif defined(__clang__)
126574         "adcs	r3, %[r]\n\t"
126575 #else
126576         "adc	r3, %[r]\n\t"
126577 #endif
126578         "#  A[5] * B[5]\n\t"
126579         "mov	%[a], r9\n\t"
126580         "mov	%[b], r10\n\t"
126581         "ldr	%[a], [%[a], #20]\n\t"
126582         "ldr	%[b], [%[b], #20]\n\t"
126583         "uxth	r6, %[a]\n\t"
126584         "uxth	r7, %[b]\n\t"
126585 #ifdef WOLFSSL_KEIL
126586         "muls	r7, r6, r7\n\t"
126587 #elif defined(__clang__)
126588         "muls	r7, r6\n\t"
126589 #else
126590         "mul	r7, r6\n\t"
126591 #endif
126592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126593         "adds	r4, r4, r7\n\t"
126594 #else
126595         "add	r4, r4, r7\n\t"
126596 #endif
126597 #ifdef WOLFSSL_KEIL
126598         "adcs	r5, r5, %[r]\n\t"
126599 #elif defined(__clang__)
126600         "adcs	r5, %[r]\n\t"
126601 #else
126602         "adc	r5, %[r]\n\t"
126603 #endif
126604 #ifdef WOLFSSL_KEIL
126605         "adcs	r3, r3, %[r]\n\t"
126606 #elif defined(__clang__)
126607         "adcs	r3, %[r]\n\t"
126608 #else
126609         "adc	r3, %[r]\n\t"
126610 #endif
126611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126612         "lsrs	r7, %[b], #16\n\t"
126613 #else
126614         "lsr	r7, %[b], #16\n\t"
126615 #endif
126616 #ifdef WOLFSSL_KEIL
126617         "muls	r6, r7, r6\n\t"
126618 #elif defined(__clang__)
126619         "muls	r6, r7\n\t"
126620 #else
126621         "mul	r6, r7\n\t"
126622 #endif
126623 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126624         "lsrs	r7, r6, #16\n\t"
126625 #else
126626         "lsr	r7, r6, #16\n\t"
126627 #endif
126628 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126629         "lsls	r6, r6, #16\n\t"
126630 #else
126631         "lsl	r6, r6, #16\n\t"
126632 #endif
126633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126634         "adds	r4, r4, r6\n\t"
126635 #else
126636         "add	r4, r4, r6\n\t"
126637 #endif
126638 #ifdef WOLFSSL_KEIL
126639         "adcs	r5, r5, r7\n\t"
126640 #elif defined(__clang__)
126641         "adcs	r5, r7\n\t"
126642 #else
126643         "adc	r5, r7\n\t"
126644 #endif
126645 #ifdef WOLFSSL_KEIL
126646         "adcs	r3, r3, %[r]\n\t"
126647 #elif defined(__clang__)
126648         "adcs	r3, %[r]\n\t"
126649 #else
126650         "adc	r3, %[r]\n\t"
126651 #endif
126652 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126653         "lsrs	r6, %[a], #16\n\t"
126654 #else
126655         "lsr	r6, %[a], #16\n\t"
126656 #endif
126657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126658         "lsrs	r7, %[b], #16\n\t"
126659 #else
126660         "lsr	r7, %[b], #16\n\t"
126661 #endif
126662 #ifdef WOLFSSL_KEIL
126663         "muls	r7, r6, r7\n\t"
126664 #elif defined(__clang__)
126665         "muls	r7, r6\n\t"
126666 #else
126667         "mul	r7, r6\n\t"
126668 #endif
126669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126670         "adds	r5, r5, r7\n\t"
126671 #else
126672         "add	r5, r5, r7\n\t"
126673 #endif
126674 #ifdef WOLFSSL_KEIL
126675         "adcs	r3, r3, %[r]\n\t"
126676 #elif defined(__clang__)
126677         "adcs	r3, %[r]\n\t"
126678 #else
126679         "adc	r3, %[r]\n\t"
126680 #endif
126681         "uxth	r7, %[b]\n\t"
126682 #ifdef WOLFSSL_KEIL
126683         "muls	r6, r7, r6\n\t"
126684 #elif defined(__clang__)
126685         "muls	r6, r7\n\t"
126686 #else
126687         "mul	r6, r7\n\t"
126688 #endif
126689 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126690         "lsrs	r7, r6, #16\n\t"
126691 #else
126692         "lsr	r7, r6, #16\n\t"
126693 #endif
126694 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126695         "lsls	r6, r6, #16\n\t"
126696 #else
126697         "lsl	r6, r6, #16\n\t"
126698 #endif
126699 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126700         "adds	r4, r4, r6\n\t"
126701 #else
126702         "add	r4, r4, r6\n\t"
126703 #endif
126704 #ifdef WOLFSSL_KEIL
126705         "adcs	r5, r5, r7\n\t"
126706 #elif defined(__clang__)
126707         "adcs	r5, r7\n\t"
126708 #else
126709         "adc	r5, r7\n\t"
126710 #endif
126711 #ifdef WOLFSSL_KEIL
126712         "adcs	r3, r3, %[r]\n\t"
126713 #elif defined(__clang__)
126714         "adcs	r3, %[r]\n\t"
126715 #else
126716         "adc	r3, %[r]\n\t"
126717 #endif
126718         "#  A[4] * B[6]\n\t"
126719         "mov	%[a], r9\n\t"
126720         "mov	%[b], r10\n\t"
126721         "ldr	%[a], [%[a], #16]\n\t"
126722         "ldr	%[b], [%[b], #24]\n\t"
126723         "uxth	r6, %[a]\n\t"
126724         "uxth	r7, %[b]\n\t"
126725 #ifdef WOLFSSL_KEIL
126726         "muls	r7, r6, r7\n\t"
126727 #elif defined(__clang__)
126728         "muls	r7, r6\n\t"
126729 #else
126730         "mul	r7, r6\n\t"
126731 #endif
126732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126733         "adds	r4, r4, r7\n\t"
126734 #else
126735         "add	r4, r4, r7\n\t"
126736 #endif
126737 #ifdef WOLFSSL_KEIL
126738         "adcs	r5, r5, %[r]\n\t"
126739 #elif defined(__clang__)
126740         "adcs	r5, %[r]\n\t"
126741 #else
126742         "adc	r5, %[r]\n\t"
126743 #endif
126744 #ifdef WOLFSSL_KEIL
126745         "adcs	r3, r3, %[r]\n\t"
126746 #elif defined(__clang__)
126747         "adcs	r3, %[r]\n\t"
126748 #else
126749         "adc	r3, %[r]\n\t"
126750 #endif
126751 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126752         "lsrs	r7, %[b], #16\n\t"
126753 #else
126754         "lsr	r7, %[b], #16\n\t"
126755 #endif
126756 #ifdef WOLFSSL_KEIL
126757         "muls	r6, r7, r6\n\t"
126758 #elif defined(__clang__)
126759         "muls	r6, r7\n\t"
126760 #else
126761         "mul	r6, r7\n\t"
126762 #endif
126763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126764         "lsrs	r7, r6, #16\n\t"
126765 #else
126766         "lsr	r7, r6, #16\n\t"
126767 #endif
126768 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126769         "lsls	r6, r6, #16\n\t"
126770 #else
126771         "lsl	r6, r6, #16\n\t"
126772 #endif
126773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126774         "adds	r4, r4, r6\n\t"
126775 #else
126776         "add	r4, r4, r6\n\t"
126777 #endif
126778 #ifdef WOLFSSL_KEIL
126779         "adcs	r5, r5, r7\n\t"
126780 #elif defined(__clang__)
126781         "adcs	r5, r7\n\t"
126782 #else
126783         "adc	r5, r7\n\t"
126784 #endif
126785 #ifdef WOLFSSL_KEIL
126786         "adcs	r3, r3, %[r]\n\t"
126787 #elif defined(__clang__)
126788         "adcs	r3, %[r]\n\t"
126789 #else
126790         "adc	r3, %[r]\n\t"
126791 #endif
126792 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126793         "lsrs	r6, %[a], #16\n\t"
126794 #else
126795         "lsr	r6, %[a], #16\n\t"
126796 #endif
126797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126798         "lsrs	r7, %[b], #16\n\t"
126799 #else
126800         "lsr	r7, %[b], #16\n\t"
126801 #endif
126802 #ifdef WOLFSSL_KEIL
126803         "muls	r7, r6, r7\n\t"
126804 #elif defined(__clang__)
126805         "muls	r7, r6\n\t"
126806 #else
126807         "mul	r7, r6\n\t"
126808 #endif
126809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126810         "adds	r5, r5, r7\n\t"
126811 #else
126812         "add	r5, r5, r7\n\t"
126813 #endif
126814 #ifdef WOLFSSL_KEIL
126815         "adcs	r3, r3, %[r]\n\t"
126816 #elif defined(__clang__)
126817         "adcs	r3, %[r]\n\t"
126818 #else
126819         "adc	r3, %[r]\n\t"
126820 #endif
126821         "uxth	r7, %[b]\n\t"
126822 #ifdef WOLFSSL_KEIL
126823         "muls	r6, r7, r6\n\t"
126824 #elif defined(__clang__)
126825         "muls	r6, r7\n\t"
126826 #else
126827         "mul	r6, r7\n\t"
126828 #endif
126829 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126830         "lsrs	r7, r6, #16\n\t"
126831 #else
126832         "lsr	r7, r6, #16\n\t"
126833 #endif
126834 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126835         "lsls	r6, r6, #16\n\t"
126836 #else
126837         "lsl	r6, r6, #16\n\t"
126838 #endif
126839 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126840         "adds	r4, r4, r6\n\t"
126841 #else
126842         "add	r4, r4, r6\n\t"
126843 #endif
126844 #ifdef WOLFSSL_KEIL
126845         "adcs	r5, r5, r7\n\t"
126846 #elif defined(__clang__)
126847         "adcs	r5, r7\n\t"
126848 #else
126849         "adc	r5, r7\n\t"
126850 #endif
126851 #ifdef WOLFSSL_KEIL
126852         "adcs	r3, r3, %[r]\n\t"
126853 #elif defined(__clang__)
126854         "adcs	r3, %[r]\n\t"
126855 #else
126856         "adc	r3, %[r]\n\t"
126857 #endif
126858         "#  A[3] * B[7]\n\t"
126859         "mov	%[a], r9\n\t"
126860         "mov	%[b], r10\n\t"
126861         "ldr	%[a], [%[a], #12]\n\t"
126862         "ldr	%[b], [%[b], #28]\n\t"
126863         "uxth	r6, %[a]\n\t"
126864         "uxth	r7, %[b]\n\t"
126865 #ifdef WOLFSSL_KEIL
126866         "muls	r7, r6, r7\n\t"
126867 #elif defined(__clang__)
126868         "muls	r7, r6\n\t"
126869 #else
126870         "mul	r7, r6\n\t"
126871 #endif
126872 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126873         "adds	r4, r4, r7\n\t"
126874 #else
126875         "add	r4, r4, r7\n\t"
126876 #endif
126877 #ifdef WOLFSSL_KEIL
126878         "adcs	r5, r5, %[r]\n\t"
126879 #elif defined(__clang__)
126880         "adcs	r5, %[r]\n\t"
126881 #else
126882         "adc	r5, %[r]\n\t"
126883 #endif
126884 #ifdef WOLFSSL_KEIL
126885         "adcs	r3, r3, %[r]\n\t"
126886 #elif defined(__clang__)
126887         "adcs	r3, %[r]\n\t"
126888 #else
126889         "adc	r3, %[r]\n\t"
126890 #endif
126891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126892         "lsrs	r7, %[b], #16\n\t"
126893 #else
126894         "lsr	r7, %[b], #16\n\t"
126895 #endif
126896 #ifdef WOLFSSL_KEIL
126897         "muls	r6, r7, r6\n\t"
126898 #elif defined(__clang__)
126899         "muls	r6, r7\n\t"
126900 #else
126901         "mul	r6, r7\n\t"
126902 #endif
126903 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126904         "lsrs	r7, r6, #16\n\t"
126905 #else
126906         "lsr	r7, r6, #16\n\t"
126907 #endif
126908 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126909         "lsls	r6, r6, #16\n\t"
126910 #else
126911         "lsl	r6, r6, #16\n\t"
126912 #endif
126913 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126914         "adds	r4, r4, r6\n\t"
126915 #else
126916         "add	r4, r4, r6\n\t"
126917 #endif
126918 #ifdef WOLFSSL_KEIL
126919         "adcs	r5, r5, r7\n\t"
126920 #elif defined(__clang__)
126921         "adcs	r5, r7\n\t"
126922 #else
126923         "adc	r5, r7\n\t"
126924 #endif
126925 #ifdef WOLFSSL_KEIL
126926         "adcs	r3, r3, %[r]\n\t"
126927 #elif defined(__clang__)
126928         "adcs	r3, %[r]\n\t"
126929 #else
126930         "adc	r3, %[r]\n\t"
126931 #endif
126932 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126933         "lsrs	r6, %[a], #16\n\t"
126934 #else
126935         "lsr	r6, %[a], #16\n\t"
126936 #endif
126937 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126938         "lsrs	r7, %[b], #16\n\t"
126939 #else
126940         "lsr	r7, %[b], #16\n\t"
126941 #endif
126942 #ifdef WOLFSSL_KEIL
126943         "muls	r7, r6, r7\n\t"
126944 #elif defined(__clang__)
126945         "muls	r7, r6\n\t"
126946 #else
126947         "mul	r7, r6\n\t"
126948 #endif
126949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126950         "adds	r5, r5, r7\n\t"
126951 #else
126952         "add	r5, r5, r7\n\t"
126953 #endif
126954 #ifdef WOLFSSL_KEIL
126955         "adcs	r3, r3, %[r]\n\t"
126956 #elif defined(__clang__)
126957         "adcs	r3, %[r]\n\t"
126958 #else
126959         "adc	r3, %[r]\n\t"
126960 #endif
126961         "uxth	r7, %[b]\n\t"
126962 #ifdef WOLFSSL_KEIL
126963         "muls	r6, r7, r6\n\t"
126964 #elif defined(__clang__)
126965         "muls	r6, r7\n\t"
126966 #else
126967         "mul	r6, r7\n\t"
126968 #endif
126969 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126970         "lsrs	r7, r6, #16\n\t"
126971 #else
126972         "lsr	r7, r6, #16\n\t"
126973 #endif
126974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126975         "lsls	r6, r6, #16\n\t"
126976 #else
126977         "lsl	r6, r6, #16\n\t"
126978 #endif
126979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
126980         "adds	r4, r4, r6\n\t"
126981 #else
126982         "add	r4, r4, r6\n\t"
126983 #endif
126984 #ifdef WOLFSSL_KEIL
126985         "adcs	r5, r5, r7\n\t"
126986 #elif defined(__clang__)
126987         "adcs	r5, r7\n\t"
126988 #else
126989         "adc	r5, r7\n\t"
126990 #endif
126991 #ifdef WOLFSSL_KEIL
126992         "adcs	r3, r3, %[r]\n\t"
126993 #elif defined(__clang__)
126994         "adcs	r3, %[r]\n\t"
126995 #else
126996         "adc	r3, %[r]\n\t"
126997 #endif
126998         "#  A[2] * B[8]\n\t"
126999         "mov	%[a], r9\n\t"
127000         "mov	%[b], r10\n\t"
127001         "ldr	%[a], [%[a], #8]\n\t"
127002         "ldr	%[b], [%[b], #32]\n\t"
127003         "uxth	r6, %[a]\n\t"
127004         "uxth	r7, %[b]\n\t"
127005 #ifdef WOLFSSL_KEIL
127006         "muls	r7, r6, r7\n\t"
127007 #elif defined(__clang__)
127008         "muls	r7, r6\n\t"
127009 #else
127010         "mul	r7, r6\n\t"
127011 #endif
127012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127013         "adds	r4, r4, r7\n\t"
127014 #else
127015         "add	r4, r4, r7\n\t"
127016 #endif
127017 #ifdef WOLFSSL_KEIL
127018         "adcs	r5, r5, %[r]\n\t"
127019 #elif defined(__clang__)
127020         "adcs	r5, %[r]\n\t"
127021 #else
127022         "adc	r5, %[r]\n\t"
127023 #endif
127024 #ifdef WOLFSSL_KEIL
127025         "adcs	r3, r3, %[r]\n\t"
127026 #elif defined(__clang__)
127027         "adcs	r3, %[r]\n\t"
127028 #else
127029         "adc	r3, %[r]\n\t"
127030 #endif
127031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127032         "lsrs	r7, %[b], #16\n\t"
127033 #else
127034         "lsr	r7, %[b], #16\n\t"
127035 #endif
127036 #ifdef WOLFSSL_KEIL
127037         "muls	r6, r7, r6\n\t"
127038 #elif defined(__clang__)
127039         "muls	r6, r7\n\t"
127040 #else
127041         "mul	r6, r7\n\t"
127042 #endif
127043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127044         "lsrs	r7, r6, #16\n\t"
127045 #else
127046         "lsr	r7, r6, #16\n\t"
127047 #endif
127048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127049         "lsls	r6, r6, #16\n\t"
127050 #else
127051         "lsl	r6, r6, #16\n\t"
127052 #endif
127053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127054         "adds	r4, r4, r6\n\t"
127055 #else
127056         "add	r4, r4, r6\n\t"
127057 #endif
127058 #ifdef WOLFSSL_KEIL
127059         "adcs	r5, r5, r7\n\t"
127060 #elif defined(__clang__)
127061         "adcs	r5, r7\n\t"
127062 #else
127063         "adc	r5, r7\n\t"
127064 #endif
127065 #ifdef WOLFSSL_KEIL
127066         "adcs	r3, r3, %[r]\n\t"
127067 #elif defined(__clang__)
127068         "adcs	r3, %[r]\n\t"
127069 #else
127070         "adc	r3, %[r]\n\t"
127071 #endif
127072 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127073         "lsrs	r6, %[a], #16\n\t"
127074 #else
127075         "lsr	r6, %[a], #16\n\t"
127076 #endif
127077 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127078         "lsrs	r7, %[b], #16\n\t"
127079 #else
127080         "lsr	r7, %[b], #16\n\t"
127081 #endif
127082 #ifdef WOLFSSL_KEIL
127083         "muls	r7, r6, r7\n\t"
127084 #elif defined(__clang__)
127085         "muls	r7, r6\n\t"
127086 #else
127087         "mul	r7, r6\n\t"
127088 #endif
127089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127090         "adds	r5, r5, r7\n\t"
127091 #else
127092         "add	r5, r5, r7\n\t"
127093 #endif
127094 #ifdef WOLFSSL_KEIL
127095         "adcs	r3, r3, %[r]\n\t"
127096 #elif defined(__clang__)
127097         "adcs	r3, %[r]\n\t"
127098 #else
127099         "adc	r3, %[r]\n\t"
127100 #endif
127101         "uxth	r7, %[b]\n\t"
127102 #ifdef WOLFSSL_KEIL
127103         "muls	r6, r7, r6\n\t"
127104 #elif defined(__clang__)
127105         "muls	r6, r7\n\t"
127106 #else
127107         "mul	r6, r7\n\t"
127108 #endif
127109 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127110         "lsrs	r7, r6, #16\n\t"
127111 #else
127112         "lsr	r7, r6, #16\n\t"
127113 #endif
127114 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127115         "lsls	r6, r6, #16\n\t"
127116 #else
127117         "lsl	r6, r6, #16\n\t"
127118 #endif
127119 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127120         "adds	r4, r4, r6\n\t"
127121 #else
127122         "add	r4, r4, r6\n\t"
127123 #endif
127124 #ifdef WOLFSSL_KEIL
127125         "adcs	r5, r5, r7\n\t"
127126 #elif defined(__clang__)
127127         "adcs	r5, r7\n\t"
127128 #else
127129         "adc	r5, r7\n\t"
127130 #endif
127131 #ifdef WOLFSSL_KEIL
127132         "adcs	r3, r3, %[r]\n\t"
127133 #elif defined(__clang__)
127134         "adcs	r3, %[r]\n\t"
127135 #else
127136         "adc	r3, %[r]\n\t"
127137 #endif
127138         "#  A[1] * B[9]\n\t"
127139         "mov	%[a], r9\n\t"
127140         "mov	%[b], r10\n\t"
127141         "ldr	%[a], [%[a], #4]\n\t"
127142         "ldr	%[b], [%[b], #36]\n\t"
127143         "uxth	r6, %[a]\n\t"
127144         "uxth	r7, %[b]\n\t"
127145 #ifdef WOLFSSL_KEIL
127146         "muls	r7, r6, r7\n\t"
127147 #elif defined(__clang__)
127148         "muls	r7, r6\n\t"
127149 #else
127150         "mul	r7, r6\n\t"
127151 #endif
127152 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127153         "adds	r4, r4, r7\n\t"
127154 #else
127155         "add	r4, r4, r7\n\t"
127156 #endif
127157 #ifdef WOLFSSL_KEIL
127158         "adcs	r5, r5, %[r]\n\t"
127159 #elif defined(__clang__)
127160         "adcs	r5, %[r]\n\t"
127161 #else
127162         "adc	r5, %[r]\n\t"
127163 #endif
127164 #ifdef WOLFSSL_KEIL
127165         "adcs	r3, r3, %[r]\n\t"
127166 #elif defined(__clang__)
127167         "adcs	r3, %[r]\n\t"
127168 #else
127169         "adc	r3, %[r]\n\t"
127170 #endif
127171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127172         "lsrs	r7, %[b], #16\n\t"
127173 #else
127174         "lsr	r7, %[b], #16\n\t"
127175 #endif
127176 #ifdef WOLFSSL_KEIL
127177         "muls	r6, r7, r6\n\t"
127178 #elif defined(__clang__)
127179         "muls	r6, r7\n\t"
127180 #else
127181         "mul	r6, r7\n\t"
127182 #endif
127183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127184         "lsrs	r7, r6, #16\n\t"
127185 #else
127186         "lsr	r7, r6, #16\n\t"
127187 #endif
127188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127189         "lsls	r6, r6, #16\n\t"
127190 #else
127191         "lsl	r6, r6, #16\n\t"
127192 #endif
127193 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127194         "adds	r4, r4, r6\n\t"
127195 #else
127196         "add	r4, r4, r6\n\t"
127197 #endif
127198 #ifdef WOLFSSL_KEIL
127199         "adcs	r5, r5, r7\n\t"
127200 #elif defined(__clang__)
127201         "adcs	r5, r7\n\t"
127202 #else
127203         "adc	r5, r7\n\t"
127204 #endif
127205 #ifdef WOLFSSL_KEIL
127206         "adcs	r3, r3, %[r]\n\t"
127207 #elif defined(__clang__)
127208         "adcs	r3, %[r]\n\t"
127209 #else
127210         "adc	r3, %[r]\n\t"
127211 #endif
127212 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127213         "lsrs	r6, %[a], #16\n\t"
127214 #else
127215         "lsr	r6, %[a], #16\n\t"
127216 #endif
127217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127218         "lsrs	r7, %[b], #16\n\t"
127219 #else
127220         "lsr	r7, %[b], #16\n\t"
127221 #endif
127222 #ifdef WOLFSSL_KEIL
127223         "muls	r7, r6, r7\n\t"
127224 #elif defined(__clang__)
127225         "muls	r7, r6\n\t"
127226 #else
127227         "mul	r7, r6\n\t"
127228 #endif
127229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127230         "adds	r5, r5, r7\n\t"
127231 #else
127232         "add	r5, r5, r7\n\t"
127233 #endif
127234 #ifdef WOLFSSL_KEIL
127235         "adcs	r3, r3, %[r]\n\t"
127236 #elif defined(__clang__)
127237         "adcs	r3, %[r]\n\t"
127238 #else
127239         "adc	r3, %[r]\n\t"
127240 #endif
127241         "uxth	r7, %[b]\n\t"
127242 #ifdef WOLFSSL_KEIL
127243         "muls	r6, r7, r6\n\t"
127244 #elif defined(__clang__)
127245         "muls	r6, r7\n\t"
127246 #else
127247         "mul	r6, r7\n\t"
127248 #endif
127249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127250         "lsrs	r7, r6, #16\n\t"
127251 #else
127252         "lsr	r7, r6, #16\n\t"
127253 #endif
127254 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127255         "lsls	r6, r6, #16\n\t"
127256 #else
127257         "lsl	r6, r6, #16\n\t"
127258 #endif
127259 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127260         "adds	r4, r4, r6\n\t"
127261 #else
127262         "add	r4, r4, r6\n\t"
127263 #endif
127264 #ifdef WOLFSSL_KEIL
127265         "adcs	r5, r5, r7\n\t"
127266 #elif defined(__clang__)
127267         "adcs	r5, r7\n\t"
127268 #else
127269         "adc	r5, r7\n\t"
127270 #endif
127271 #ifdef WOLFSSL_KEIL
127272         "adcs	r3, r3, %[r]\n\t"
127273 #elif defined(__clang__)
127274         "adcs	r3, %[r]\n\t"
127275 #else
127276         "adc	r3, %[r]\n\t"
127277 #endif
127278         "#  A[0] * B[10]\n\t"
127279         "mov	%[a], r9\n\t"
127280         "mov	%[b], r10\n\t"
127281         "ldr	%[a], [%[a]]\n\t"
127282         "ldr	%[b], [%[b], #40]\n\t"
127283         "uxth	r6, %[a]\n\t"
127284         "uxth	r7, %[b]\n\t"
127285 #ifdef WOLFSSL_KEIL
127286         "muls	r7, r6, r7\n\t"
127287 #elif defined(__clang__)
127288         "muls	r7, r6\n\t"
127289 #else
127290         "mul	r7, r6\n\t"
127291 #endif
127292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127293         "adds	r4, r4, r7\n\t"
127294 #else
127295         "add	r4, r4, r7\n\t"
127296 #endif
127297 #ifdef WOLFSSL_KEIL
127298         "adcs	r5, r5, %[r]\n\t"
127299 #elif defined(__clang__)
127300         "adcs	r5, %[r]\n\t"
127301 #else
127302         "adc	r5, %[r]\n\t"
127303 #endif
127304 #ifdef WOLFSSL_KEIL
127305         "adcs	r3, r3, %[r]\n\t"
127306 #elif defined(__clang__)
127307         "adcs	r3, %[r]\n\t"
127308 #else
127309         "adc	r3, %[r]\n\t"
127310 #endif
127311 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127312         "lsrs	r7, %[b], #16\n\t"
127313 #else
127314         "lsr	r7, %[b], #16\n\t"
127315 #endif
127316 #ifdef WOLFSSL_KEIL
127317         "muls	r6, r7, r6\n\t"
127318 #elif defined(__clang__)
127319         "muls	r6, r7\n\t"
127320 #else
127321         "mul	r6, r7\n\t"
127322 #endif
127323 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127324         "lsrs	r7, r6, #16\n\t"
127325 #else
127326         "lsr	r7, r6, #16\n\t"
127327 #endif
127328 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127329         "lsls	r6, r6, #16\n\t"
127330 #else
127331         "lsl	r6, r6, #16\n\t"
127332 #endif
127333 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127334         "adds	r4, r4, r6\n\t"
127335 #else
127336         "add	r4, r4, r6\n\t"
127337 #endif
127338 #ifdef WOLFSSL_KEIL
127339         "adcs	r5, r5, r7\n\t"
127340 #elif defined(__clang__)
127341         "adcs	r5, r7\n\t"
127342 #else
127343         "adc	r5, r7\n\t"
127344 #endif
127345 #ifdef WOLFSSL_KEIL
127346         "adcs	r3, r3, %[r]\n\t"
127347 #elif defined(__clang__)
127348         "adcs	r3, %[r]\n\t"
127349 #else
127350         "adc	r3, %[r]\n\t"
127351 #endif
127352 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127353         "lsrs	r6, %[a], #16\n\t"
127354 #else
127355         "lsr	r6, %[a], #16\n\t"
127356 #endif
127357 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127358         "lsrs	r7, %[b], #16\n\t"
127359 #else
127360         "lsr	r7, %[b], #16\n\t"
127361 #endif
127362 #ifdef WOLFSSL_KEIL
127363         "muls	r7, r6, r7\n\t"
127364 #elif defined(__clang__)
127365         "muls	r7, r6\n\t"
127366 #else
127367         "mul	r7, r6\n\t"
127368 #endif
127369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127370         "adds	r5, r5, r7\n\t"
127371 #else
127372         "add	r5, r5, r7\n\t"
127373 #endif
127374 #ifdef WOLFSSL_KEIL
127375         "adcs	r3, r3, %[r]\n\t"
127376 #elif defined(__clang__)
127377         "adcs	r3, %[r]\n\t"
127378 #else
127379         "adc	r3, %[r]\n\t"
127380 #endif
127381         "uxth	r7, %[b]\n\t"
127382 #ifdef WOLFSSL_KEIL
127383         "muls	r6, r7, r6\n\t"
127384 #elif defined(__clang__)
127385         "muls	r6, r7\n\t"
127386 #else
127387         "mul	r6, r7\n\t"
127388 #endif
127389 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127390         "lsrs	r7, r6, #16\n\t"
127391 #else
127392         "lsr	r7, r6, #16\n\t"
127393 #endif
127394 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127395         "lsls	r6, r6, #16\n\t"
127396 #else
127397         "lsl	r6, r6, #16\n\t"
127398 #endif
127399 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127400         "adds	r4, r4, r6\n\t"
127401 #else
127402         "add	r4, r4, r6\n\t"
127403 #endif
127404 #ifdef WOLFSSL_KEIL
127405         "adcs	r5, r5, r7\n\t"
127406 #elif defined(__clang__)
127407         "adcs	r5, r7\n\t"
127408 #else
127409         "adc	r5, r7\n\t"
127410 #endif
127411 #ifdef WOLFSSL_KEIL
127412         "adcs	r3, r3, %[r]\n\t"
127413 #elif defined(__clang__)
127414         "adcs	r3, %[r]\n\t"
127415 #else
127416         "adc	r3, %[r]\n\t"
127417 #endif
127418         "str	r4, [sp, #40]\n\t"
127419         "#  A[0] * B[11]\n\t"
127420         "movs	r4, #0\n\t"
127421         "mov	%[a], r9\n\t"
127422         "mov	%[b], r10\n\t"
127423         "ldr	%[a], [%[a]]\n\t"
127424         "ldr	%[b], [%[b], #44]\n\t"
127425         "uxth	r6, %[a]\n\t"
127426         "uxth	r7, %[b]\n\t"
127427 #ifdef WOLFSSL_KEIL
127428         "muls	r7, r6, r7\n\t"
127429 #elif defined(__clang__)
127430         "muls	r7, r6\n\t"
127431 #else
127432         "mul	r7, r6\n\t"
127433 #endif
127434 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127435         "adds	r5, r5, r7\n\t"
127436 #else
127437         "add	r5, r5, r7\n\t"
127438 #endif
127439 #ifdef WOLFSSL_KEIL
127440         "adcs	r3, r3, %[r]\n\t"
127441 #elif defined(__clang__)
127442         "adcs	r3, %[r]\n\t"
127443 #else
127444         "adc	r3, %[r]\n\t"
127445 #endif
127446 #ifdef WOLFSSL_KEIL
127447         "adcs	r4, r4, %[r]\n\t"
127448 #elif defined(__clang__)
127449         "adcs	r4, %[r]\n\t"
127450 #else
127451         "adc	r4, %[r]\n\t"
127452 #endif
127453 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127454         "lsrs	r7, %[b], #16\n\t"
127455 #else
127456         "lsr	r7, %[b], #16\n\t"
127457 #endif
127458 #ifdef WOLFSSL_KEIL
127459         "muls	r6, r7, r6\n\t"
127460 #elif defined(__clang__)
127461         "muls	r6, r7\n\t"
127462 #else
127463         "mul	r6, r7\n\t"
127464 #endif
127465 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127466         "lsrs	r7, r6, #16\n\t"
127467 #else
127468         "lsr	r7, r6, #16\n\t"
127469 #endif
127470 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127471         "lsls	r6, r6, #16\n\t"
127472 #else
127473         "lsl	r6, r6, #16\n\t"
127474 #endif
127475 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127476         "adds	r5, r5, r6\n\t"
127477 #else
127478         "add	r5, r5, r6\n\t"
127479 #endif
127480 #ifdef WOLFSSL_KEIL
127481         "adcs	r3, r3, r7\n\t"
127482 #elif defined(__clang__)
127483         "adcs	r3, r7\n\t"
127484 #else
127485         "adc	r3, r7\n\t"
127486 #endif
127487 #ifdef WOLFSSL_KEIL
127488         "adcs	r4, r4, %[r]\n\t"
127489 #elif defined(__clang__)
127490         "adcs	r4, %[r]\n\t"
127491 #else
127492         "adc	r4, %[r]\n\t"
127493 #endif
127494 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127495         "lsrs	r6, %[a], #16\n\t"
127496 #else
127497         "lsr	r6, %[a], #16\n\t"
127498 #endif
127499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127500         "lsrs	r7, %[b], #16\n\t"
127501 #else
127502         "lsr	r7, %[b], #16\n\t"
127503 #endif
127504 #ifdef WOLFSSL_KEIL
127505         "muls	r7, r6, r7\n\t"
127506 #elif defined(__clang__)
127507         "muls	r7, r6\n\t"
127508 #else
127509         "mul	r7, r6\n\t"
127510 #endif
127511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127512         "adds	r3, r3, r7\n\t"
127513 #else
127514         "add	r3, r3, r7\n\t"
127515 #endif
127516 #ifdef WOLFSSL_KEIL
127517         "adcs	r4, r4, %[r]\n\t"
127518 #elif defined(__clang__)
127519         "adcs	r4, %[r]\n\t"
127520 #else
127521         "adc	r4, %[r]\n\t"
127522 #endif
127523         "uxth	r7, %[b]\n\t"
127524 #ifdef WOLFSSL_KEIL
127525         "muls	r6, r7, r6\n\t"
127526 #elif defined(__clang__)
127527         "muls	r6, r7\n\t"
127528 #else
127529         "mul	r6, r7\n\t"
127530 #endif
127531 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127532         "lsrs	r7, r6, #16\n\t"
127533 #else
127534         "lsr	r7, r6, #16\n\t"
127535 #endif
127536 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127537         "lsls	r6, r6, #16\n\t"
127538 #else
127539         "lsl	r6, r6, #16\n\t"
127540 #endif
127541 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127542         "adds	r5, r5, r6\n\t"
127543 #else
127544         "add	r5, r5, r6\n\t"
127545 #endif
127546 #ifdef WOLFSSL_KEIL
127547         "adcs	r3, r3, r7\n\t"
127548 #elif defined(__clang__)
127549         "adcs	r3, r7\n\t"
127550 #else
127551         "adc	r3, r7\n\t"
127552 #endif
127553 #ifdef WOLFSSL_KEIL
127554         "adcs	r4, r4, %[r]\n\t"
127555 #elif defined(__clang__)
127556         "adcs	r4, %[r]\n\t"
127557 #else
127558         "adc	r4, %[r]\n\t"
127559 #endif
127560         "#  A[1] * B[10]\n\t"
127561         "mov	%[a], r9\n\t"
127562         "mov	%[b], r10\n\t"
127563         "ldr	%[a], [%[a], #4]\n\t"
127564         "ldr	%[b], [%[b], #40]\n\t"
127565         "uxth	r6, %[a]\n\t"
127566         "uxth	r7, %[b]\n\t"
127567 #ifdef WOLFSSL_KEIL
127568         "muls	r7, r6, r7\n\t"
127569 #elif defined(__clang__)
127570         "muls	r7, r6\n\t"
127571 #else
127572         "mul	r7, r6\n\t"
127573 #endif
127574 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127575         "adds	r5, r5, r7\n\t"
127576 #else
127577         "add	r5, r5, r7\n\t"
127578 #endif
127579 #ifdef WOLFSSL_KEIL
127580         "adcs	r3, r3, %[r]\n\t"
127581 #elif defined(__clang__)
127582         "adcs	r3, %[r]\n\t"
127583 #else
127584         "adc	r3, %[r]\n\t"
127585 #endif
127586 #ifdef WOLFSSL_KEIL
127587         "adcs	r4, r4, %[r]\n\t"
127588 #elif defined(__clang__)
127589         "adcs	r4, %[r]\n\t"
127590 #else
127591         "adc	r4, %[r]\n\t"
127592 #endif
127593 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127594         "lsrs	r7, %[b], #16\n\t"
127595 #else
127596         "lsr	r7, %[b], #16\n\t"
127597 #endif
127598 #ifdef WOLFSSL_KEIL
127599         "muls	r6, r7, r6\n\t"
127600 #elif defined(__clang__)
127601         "muls	r6, r7\n\t"
127602 #else
127603         "mul	r6, r7\n\t"
127604 #endif
127605 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127606         "lsrs	r7, r6, #16\n\t"
127607 #else
127608         "lsr	r7, r6, #16\n\t"
127609 #endif
127610 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127611         "lsls	r6, r6, #16\n\t"
127612 #else
127613         "lsl	r6, r6, #16\n\t"
127614 #endif
127615 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127616         "adds	r5, r5, r6\n\t"
127617 #else
127618         "add	r5, r5, r6\n\t"
127619 #endif
127620 #ifdef WOLFSSL_KEIL
127621         "adcs	r3, r3, r7\n\t"
127622 #elif defined(__clang__)
127623         "adcs	r3, r7\n\t"
127624 #else
127625         "adc	r3, r7\n\t"
127626 #endif
127627 #ifdef WOLFSSL_KEIL
127628         "adcs	r4, r4, %[r]\n\t"
127629 #elif defined(__clang__)
127630         "adcs	r4, %[r]\n\t"
127631 #else
127632         "adc	r4, %[r]\n\t"
127633 #endif
127634 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127635         "lsrs	r6, %[a], #16\n\t"
127636 #else
127637         "lsr	r6, %[a], #16\n\t"
127638 #endif
127639 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127640         "lsrs	r7, %[b], #16\n\t"
127641 #else
127642         "lsr	r7, %[b], #16\n\t"
127643 #endif
127644 #ifdef WOLFSSL_KEIL
127645         "muls	r7, r6, r7\n\t"
127646 #elif defined(__clang__)
127647         "muls	r7, r6\n\t"
127648 #else
127649         "mul	r7, r6\n\t"
127650 #endif
127651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127652         "adds	r3, r3, r7\n\t"
127653 #else
127654         "add	r3, r3, r7\n\t"
127655 #endif
127656 #ifdef WOLFSSL_KEIL
127657         "adcs	r4, r4, %[r]\n\t"
127658 #elif defined(__clang__)
127659         "adcs	r4, %[r]\n\t"
127660 #else
127661         "adc	r4, %[r]\n\t"
127662 #endif
127663         "uxth	r7, %[b]\n\t"
127664 #ifdef WOLFSSL_KEIL
127665         "muls	r6, r7, r6\n\t"
127666 #elif defined(__clang__)
127667         "muls	r6, r7\n\t"
127668 #else
127669         "mul	r6, r7\n\t"
127670 #endif
127671 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127672         "lsrs	r7, r6, #16\n\t"
127673 #else
127674         "lsr	r7, r6, #16\n\t"
127675 #endif
127676 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127677         "lsls	r6, r6, #16\n\t"
127678 #else
127679         "lsl	r6, r6, #16\n\t"
127680 #endif
127681 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127682         "adds	r5, r5, r6\n\t"
127683 #else
127684         "add	r5, r5, r6\n\t"
127685 #endif
127686 #ifdef WOLFSSL_KEIL
127687         "adcs	r3, r3, r7\n\t"
127688 #elif defined(__clang__)
127689         "adcs	r3, r7\n\t"
127690 #else
127691         "adc	r3, r7\n\t"
127692 #endif
127693 #ifdef WOLFSSL_KEIL
127694         "adcs	r4, r4, %[r]\n\t"
127695 #elif defined(__clang__)
127696         "adcs	r4, %[r]\n\t"
127697 #else
127698         "adc	r4, %[r]\n\t"
127699 #endif
127700         "#  A[2] * B[9]\n\t"
127701         "mov	%[a], r9\n\t"
127702         "mov	%[b], r10\n\t"
127703         "ldr	%[a], [%[a], #8]\n\t"
127704         "ldr	%[b], [%[b], #36]\n\t"
127705         "uxth	r6, %[a]\n\t"
127706         "uxth	r7, %[b]\n\t"
127707 #ifdef WOLFSSL_KEIL
127708         "muls	r7, r6, r7\n\t"
127709 #elif defined(__clang__)
127710         "muls	r7, r6\n\t"
127711 #else
127712         "mul	r7, r6\n\t"
127713 #endif
127714 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127715         "adds	r5, r5, r7\n\t"
127716 #else
127717         "add	r5, r5, r7\n\t"
127718 #endif
127719 #ifdef WOLFSSL_KEIL
127720         "adcs	r3, r3, %[r]\n\t"
127721 #elif defined(__clang__)
127722         "adcs	r3, %[r]\n\t"
127723 #else
127724         "adc	r3, %[r]\n\t"
127725 #endif
127726 #ifdef WOLFSSL_KEIL
127727         "adcs	r4, r4, %[r]\n\t"
127728 #elif defined(__clang__)
127729         "adcs	r4, %[r]\n\t"
127730 #else
127731         "adc	r4, %[r]\n\t"
127732 #endif
127733 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127734         "lsrs	r7, %[b], #16\n\t"
127735 #else
127736         "lsr	r7, %[b], #16\n\t"
127737 #endif
127738 #ifdef WOLFSSL_KEIL
127739         "muls	r6, r7, r6\n\t"
127740 #elif defined(__clang__)
127741         "muls	r6, r7\n\t"
127742 #else
127743         "mul	r6, r7\n\t"
127744 #endif
127745 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127746         "lsrs	r7, r6, #16\n\t"
127747 #else
127748         "lsr	r7, r6, #16\n\t"
127749 #endif
127750 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127751         "lsls	r6, r6, #16\n\t"
127752 #else
127753         "lsl	r6, r6, #16\n\t"
127754 #endif
127755 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127756         "adds	r5, r5, r6\n\t"
127757 #else
127758         "add	r5, r5, r6\n\t"
127759 #endif
127760 #ifdef WOLFSSL_KEIL
127761         "adcs	r3, r3, r7\n\t"
127762 #elif defined(__clang__)
127763         "adcs	r3, r7\n\t"
127764 #else
127765         "adc	r3, r7\n\t"
127766 #endif
127767 #ifdef WOLFSSL_KEIL
127768         "adcs	r4, r4, %[r]\n\t"
127769 #elif defined(__clang__)
127770         "adcs	r4, %[r]\n\t"
127771 #else
127772         "adc	r4, %[r]\n\t"
127773 #endif
127774 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127775         "lsrs	r6, %[a], #16\n\t"
127776 #else
127777         "lsr	r6, %[a], #16\n\t"
127778 #endif
127779 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127780         "lsrs	r7, %[b], #16\n\t"
127781 #else
127782         "lsr	r7, %[b], #16\n\t"
127783 #endif
127784 #ifdef WOLFSSL_KEIL
127785         "muls	r7, r6, r7\n\t"
127786 #elif defined(__clang__)
127787         "muls	r7, r6\n\t"
127788 #else
127789         "mul	r7, r6\n\t"
127790 #endif
127791 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127792         "adds	r3, r3, r7\n\t"
127793 #else
127794         "add	r3, r3, r7\n\t"
127795 #endif
127796 #ifdef WOLFSSL_KEIL
127797         "adcs	r4, r4, %[r]\n\t"
127798 #elif defined(__clang__)
127799         "adcs	r4, %[r]\n\t"
127800 #else
127801         "adc	r4, %[r]\n\t"
127802 #endif
127803         "uxth	r7, %[b]\n\t"
127804 #ifdef WOLFSSL_KEIL
127805         "muls	r6, r7, r6\n\t"
127806 #elif defined(__clang__)
127807         "muls	r6, r7\n\t"
127808 #else
127809         "mul	r6, r7\n\t"
127810 #endif
127811 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127812         "lsrs	r7, r6, #16\n\t"
127813 #else
127814         "lsr	r7, r6, #16\n\t"
127815 #endif
127816 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127817         "lsls	r6, r6, #16\n\t"
127818 #else
127819         "lsl	r6, r6, #16\n\t"
127820 #endif
127821 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127822         "adds	r5, r5, r6\n\t"
127823 #else
127824         "add	r5, r5, r6\n\t"
127825 #endif
127826 #ifdef WOLFSSL_KEIL
127827         "adcs	r3, r3, r7\n\t"
127828 #elif defined(__clang__)
127829         "adcs	r3, r7\n\t"
127830 #else
127831         "adc	r3, r7\n\t"
127832 #endif
127833 #ifdef WOLFSSL_KEIL
127834         "adcs	r4, r4, %[r]\n\t"
127835 #elif defined(__clang__)
127836         "adcs	r4, %[r]\n\t"
127837 #else
127838         "adc	r4, %[r]\n\t"
127839 #endif
127840         "#  A[3] * B[8]\n\t"
127841         "mov	%[a], r9\n\t"
127842         "mov	%[b], r10\n\t"
127843         "ldr	%[a], [%[a], #12]\n\t"
127844         "ldr	%[b], [%[b], #32]\n\t"
127845         "uxth	r6, %[a]\n\t"
127846         "uxth	r7, %[b]\n\t"
127847 #ifdef WOLFSSL_KEIL
127848         "muls	r7, r6, r7\n\t"
127849 #elif defined(__clang__)
127850         "muls	r7, r6\n\t"
127851 #else
127852         "mul	r7, r6\n\t"
127853 #endif
127854 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127855         "adds	r5, r5, r7\n\t"
127856 #else
127857         "add	r5, r5, r7\n\t"
127858 #endif
127859 #ifdef WOLFSSL_KEIL
127860         "adcs	r3, r3, %[r]\n\t"
127861 #elif defined(__clang__)
127862         "adcs	r3, %[r]\n\t"
127863 #else
127864         "adc	r3, %[r]\n\t"
127865 #endif
127866 #ifdef WOLFSSL_KEIL
127867         "adcs	r4, r4, %[r]\n\t"
127868 #elif defined(__clang__)
127869         "adcs	r4, %[r]\n\t"
127870 #else
127871         "adc	r4, %[r]\n\t"
127872 #endif
127873 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127874         "lsrs	r7, %[b], #16\n\t"
127875 #else
127876         "lsr	r7, %[b], #16\n\t"
127877 #endif
127878 #ifdef WOLFSSL_KEIL
127879         "muls	r6, r7, r6\n\t"
127880 #elif defined(__clang__)
127881         "muls	r6, r7\n\t"
127882 #else
127883         "mul	r6, r7\n\t"
127884 #endif
127885 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127886         "lsrs	r7, r6, #16\n\t"
127887 #else
127888         "lsr	r7, r6, #16\n\t"
127889 #endif
127890 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127891         "lsls	r6, r6, #16\n\t"
127892 #else
127893         "lsl	r6, r6, #16\n\t"
127894 #endif
127895 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127896         "adds	r5, r5, r6\n\t"
127897 #else
127898         "add	r5, r5, r6\n\t"
127899 #endif
127900 #ifdef WOLFSSL_KEIL
127901         "adcs	r3, r3, r7\n\t"
127902 #elif defined(__clang__)
127903         "adcs	r3, r7\n\t"
127904 #else
127905         "adc	r3, r7\n\t"
127906 #endif
127907 #ifdef WOLFSSL_KEIL
127908         "adcs	r4, r4, %[r]\n\t"
127909 #elif defined(__clang__)
127910         "adcs	r4, %[r]\n\t"
127911 #else
127912         "adc	r4, %[r]\n\t"
127913 #endif
127914 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127915         "lsrs	r6, %[a], #16\n\t"
127916 #else
127917         "lsr	r6, %[a], #16\n\t"
127918 #endif
127919 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127920         "lsrs	r7, %[b], #16\n\t"
127921 #else
127922         "lsr	r7, %[b], #16\n\t"
127923 #endif
127924 #ifdef WOLFSSL_KEIL
127925         "muls	r7, r6, r7\n\t"
127926 #elif defined(__clang__)
127927         "muls	r7, r6\n\t"
127928 #else
127929         "mul	r7, r6\n\t"
127930 #endif
127931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127932         "adds	r3, r3, r7\n\t"
127933 #else
127934         "add	r3, r3, r7\n\t"
127935 #endif
127936 #ifdef WOLFSSL_KEIL
127937         "adcs	r4, r4, %[r]\n\t"
127938 #elif defined(__clang__)
127939         "adcs	r4, %[r]\n\t"
127940 #else
127941         "adc	r4, %[r]\n\t"
127942 #endif
127943         "uxth	r7, %[b]\n\t"
127944 #ifdef WOLFSSL_KEIL
127945         "muls	r6, r7, r6\n\t"
127946 #elif defined(__clang__)
127947         "muls	r6, r7\n\t"
127948 #else
127949         "mul	r6, r7\n\t"
127950 #endif
127951 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127952         "lsrs	r7, r6, #16\n\t"
127953 #else
127954         "lsr	r7, r6, #16\n\t"
127955 #endif
127956 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127957         "lsls	r6, r6, #16\n\t"
127958 #else
127959         "lsl	r6, r6, #16\n\t"
127960 #endif
127961 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127962         "adds	r5, r5, r6\n\t"
127963 #else
127964         "add	r5, r5, r6\n\t"
127965 #endif
127966 #ifdef WOLFSSL_KEIL
127967         "adcs	r3, r3, r7\n\t"
127968 #elif defined(__clang__)
127969         "adcs	r3, r7\n\t"
127970 #else
127971         "adc	r3, r7\n\t"
127972 #endif
127973 #ifdef WOLFSSL_KEIL
127974         "adcs	r4, r4, %[r]\n\t"
127975 #elif defined(__clang__)
127976         "adcs	r4, %[r]\n\t"
127977 #else
127978         "adc	r4, %[r]\n\t"
127979 #endif
127980         "#  A[4] * B[7]\n\t"
127981         "mov	%[a], r9\n\t"
127982         "mov	%[b], r10\n\t"
127983         "ldr	%[a], [%[a], #16]\n\t"
127984         "ldr	%[b], [%[b], #28]\n\t"
127985         "uxth	r6, %[a]\n\t"
127986         "uxth	r7, %[b]\n\t"
127987 #ifdef WOLFSSL_KEIL
127988         "muls	r7, r6, r7\n\t"
127989 #elif defined(__clang__)
127990         "muls	r7, r6\n\t"
127991 #else
127992         "mul	r7, r6\n\t"
127993 #endif
127994 #if defined(__clang__) || defined(WOLFSSL_KEIL)
127995         "adds	r5, r5, r7\n\t"
127996 #else
127997         "add	r5, r5, r7\n\t"
127998 #endif
127999 #ifdef WOLFSSL_KEIL
128000         "adcs	r3, r3, %[r]\n\t"
128001 #elif defined(__clang__)
128002         "adcs	r3, %[r]\n\t"
128003 #else
128004         "adc	r3, %[r]\n\t"
128005 #endif
128006 #ifdef WOLFSSL_KEIL
128007         "adcs	r4, r4, %[r]\n\t"
128008 #elif defined(__clang__)
128009         "adcs	r4, %[r]\n\t"
128010 #else
128011         "adc	r4, %[r]\n\t"
128012 #endif
128013 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128014         "lsrs	r7, %[b], #16\n\t"
128015 #else
128016         "lsr	r7, %[b], #16\n\t"
128017 #endif
128018 #ifdef WOLFSSL_KEIL
128019         "muls	r6, r7, r6\n\t"
128020 #elif defined(__clang__)
128021         "muls	r6, r7\n\t"
128022 #else
128023         "mul	r6, r7\n\t"
128024 #endif
128025 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128026         "lsrs	r7, r6, #16\n\t"
128027 #else
128028         "lsr	r7, r6, #16\n\t"
128029 #endif
128030 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128031         "lsls	r6, r6, #16\n\t"
128032 #else
128033         "lsl	r6, r6, #16\n\t"
128034 #endif
128035 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128036         "adds	r5, r5, r6\n\t"
128037 #else
128038         "add	r5, r5, r6\n\t"
128039 #endif
128040 #ifdef WOLFSSL_KEIL
128041         "adcs	r3, r3, r7\n\t"
128042 #elif defined(__clang__)
128043         "adcs	r3, r7\n\t"
128044 #else
128045         "adc	r3, r7\n\t"
128046 #endif
128047 #ifdef WOLFSSL_KEIL
128048         "adcs	r4, r4, %[r]\n\t"
128049 #elif defined(__clang__)
128050         "adcs	r4, %[r]\n\t"
128051 #else
128052         "adc	r4, %[r]\n\t"
128053 #endif
128054 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128055         "lsrs	r6, %[a], #16\n\t"
128056 #else
128057         "lsr	r6, %[a], #16\n\t"
128058 #endif
128059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128060         "lsrs	r7, %[b], #16\n\t"
128061 #else
128062         "lsr	r7, %[b], #16\n\t"
128063 #endif
128064 #ifdef WOLFSSL_KEIL
128065         "muls	r7, r6, r7\n\t"
128066 #elif defined(__clang__)
128067         "muls	r7, r6\n\t"
128068 #else
128069         "mul	r7, r6\n\t"
128070 #endif
128071 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128072         "adds	r3, r3, r7\n\t"
128073 #else
128074         "add	r3, r3, r7\n\t"
128075 #endif
128076 #ifdef WOLFSSL_KEIL
128077         "adcs	r4, r4, %[r]\n\t"
128078 #elif defined(__clang__)
128079         "adcs	r4, %[r]\n\t"
128080 #else
128081         "adc	r4, %[r]\n\t"
128082 #endif
128083         "uxth	r7, %[b]\n\t"
128084 #ifdef WOLFSSL_KEIL
128085         "muls	r6, r7, r6\n\t"
128086 #elif defined(__clang__)
128087         "muls	r6, r7\n\t"
128088 #else
128089         "mul	r6, r7\n\t"
128090 #endif
128091 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128092         "lsrs	r7, r6, #16\n\t"
128093 #else
128094         "lsr	r7, r6, #16\n\t"
128095 #endif
128096 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128097         "lsls	r6, r6, #16\n\t"
128098 #else
128099         "lsl	r6, r6, #16\n\t"
128100 #endif
128101 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128102         "adds	r5, r5, r6\n\t"
128103 #else
128104         "add	r5, r5, r6\n\t"
128105 #endif
128106 #ifdef WOLFSSL_KEIL
128107         "adcs	r3, r3, r7\n\t"
128108 #elif defined(__clang__)
128109         "adcs	r3, r7\n\t"
128110 #else
128111         "adc	r3, r7\n\t"
128112 #endif
128113 #ifdef WOLFSSL_KEIL
128114         "adcs	r4, r4, %[r]\n\t"
128115 #elif defined(__clang__)
128116         "adcs	r4, %[r]\n\t"
128117 #else
128118         "adc	r4, %[r]\n\t"
128119 #endif
128120         "#  A[5] * B[6]\n\t"
128121         "mov	%[a], r9\n\t"
128122         "mov	%[b], r10\n\t"
128123         "ldr	%[a], [%[a], #20]\n\t"
128124         "ldr	%[b], [%[b], #24]\n\t"
128125         "uxth	r6, %[a]\n\t"
128126         "uxth	r7, %[b]\n\t"
128127 #ifdef WOLFSSL_KEIL
128128         "muls	r7, r6, r7\n\t"
128129 #elif defined(__clang__)
128130         "muls	r7, r6\n\t"
128131 #else
128132         "mul	r7, r6\n\t"
128133 #endif
128134 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128135         "adds	r5, r5, r7\n\t"
128136 #else
128137         "add	r5, r5, r7\n\t"
128138 #endif
128139 #ifdef WOLFSSL_KEIL
128140         "adcs	r3, r3, %[r]\n\t"
128141 #elif defined(__clang__)
128142         "adcs	r3, %[r]\n\t"
128143 #else
128144         "adc	r3, %[r]\n\t"
128145 #endif
128146 #ifdef WOLFSSL_KEIL
128147         "adcs	r4, r4, %[r]\n\t"
128148 #elif defined(__clang__)
128149         "adcs	r4, %[r]\n\t"
128150 #else
128151         "adc	r4, %[r]\n\t"
128152 #endif
128153 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128154         "lsrs	r7, %[b], #16\n\t"
128155 #else
128156         "lsr	r7, %[b], #16\n\t"
128157 #endif
128158 #ifdef WOLFSSL_KEIL
128159         "muls	r6, r7, r6\n\t"
128160 #elif defined(__clang__)
128161         "muls	r6, r7\n\t"
128162 #else
128163         "mul	r6, r7\n\t"
128164 #endif
128165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128166         "lsrs	r7, r6, #16\n\t"
128167 #else
128168         "lsr	r7, r6, #16\n\t"
128169 #endif
128170 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128171         "lsls	r6, r6, #16\n\t"
128172 #else
128173         "lsl	r6, r6, #16\n\t"
128174 #endif
128175 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128176         "adds	r5, r5, r6\n\t"
128177 #else
128178         "add	r5, r5, r6\n\t"
128179 #endif
128180 #ifdef WOLFSSL_KEIL
128181         "adcs	r3, r3, r7\n\t"
128182 #elif defined(__clang__)
128183         "adcs	r3, r7\n\t"
128184 #else
128185         "adc	r3, r7\n\t"
128186 #endif
128187 #ifdef WOLFSSL_KEIL
128188         "adcs	r4, r4, %[r]\n\t"
128189 #elif defined(__clang__)
128190         "adcs	r4, %[r]\n\t"
128191 #else
128192         "adc	r4, %[r]\n\t"
128193 #endif
128194 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128195         "lsrs	r6, %[a], #16\n\t"
128196 #else
128197         "lsr	r6, %[a], #16\n\t"
128198 #endif
128199 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128200         "lsrs	r7, %[b], #16\n\t"
128201 #else
128202         "lsr	r7, %[b], #16\n\t"
128203 #endif
128204 #ifdef WOLFSSL_KEIL
128205         "muls	r7, r6, r7\n\t"
128206 #elif defined(__clang__)
128207         "muls	r7, r6\n\t"
128208 #else
128209         "mul	r7, r6\n\t"
128210 #endif
128211 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128212         "adds	r3, r3, r7\n\t"
128213 #else
128214         "add	r3, r3, r7\n\t"
128215 #endif
128216 #ifdef WOLFSSL_KEIL
128217         "adcs	r4, r4, %[r]\n\t"
128218 #elif defined(__clang__)
128219         "adcs	r4, %[r]\n\t"
128220 #else
128221         "adc	r4, %[r]\n\t"
128222 #endif
128223         "uxth	r7, %[b]\n\t"
128224 #ifdef WOLFSSL_KEIL
128225         "muls	r6, r7, r6\n\t"
128226 #elif defined(__clang__)
128227         "muls	r6, r7\n\t"
128228 #else
128229         "mul	r6, r7\n\t"
128230 #endif
128231 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128232         "lsrs	r7, r6, #16\n\t"
128233 #else
128234         "lsr	r7, r6, #16\n\t"
128235 #endif
128236 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128237         "lsls	r6, r6, #16\n\t"
128238 #else
128239         "lsl	r6, r6, #16\n\t"
128240 #endif
128241 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128242         "adds	r5, r5, r6\n\t"
128243 #else
128244         "add	r5, r5, r6\n\t"
128245 #endif
128246 #ifdef WOLFSSL_KEIL
128247         "adcs	r3, r3, r7\n\t"
128248 #elif defined(__clang__)
128249         "adcs	r3, r7\n\t"
128250 #else
128251         "adc	r3, r7\n\t"
128252 #endif
128253 #ifdef WOLFSSL_KEIL
128254         "adcs	r4, r4, %[r]\n\t"
128255 #elif defined(__clang__)
128256         "adcs	r4, %[r]\n\t"
128257 #else
128258         "adc	r4, %[r]\n\t"
128259 #endif
128260         "#  A[6] * B[5]\n\t"
128261         "mov	%[a], r9\n\t"
128262         "mov	%[b], r10\n\t"
128263         "ldr	%[a], [%[a], #24]\n\t"
128264         "ldr	%[b], [%[b], #20]\n\t"
128265         "uxth	r6, %[a]\n\t"
128266         "uxth	r7, %[b]\n\t"
128267 #ifdef WOLFSSL_KEIL
128268         "muls	r7, r6, r7\n\t"
128269 #elif defined(__clang__)
128270         "muls	r7, r6\n\t"
128271 #else
128272         "mul	r7, r6\n\t"
128273 #endif
128274 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128275         "adds	r5, r5, r7\n\t"
128276 #else
128277         "add	r5, r5, r7\n\t"
128278 #endif
128279 #ifdef WOLFSSL_KEIL
128280         "adcs	r3, r3, %[r]\n\t"
128281 #elif defined(__clang__)
128282         "adcs	r3, %[r]\n\t"
128283 #else
128284         "adc	r3, %[r]\n\t"
128285 #endif
128286 #ifdef WOLFSSL_KEIL
128287         "adcs	r4, r4, %[r]\n\t"
128288 #elif defined(__clang__)
128289         "adcs	r4, %[r]\n\t"
128290 #else
128291         "adc	r4, %[r]\n\t"
128292 #endif
128293 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128294         "lsrs	r7, %[b], #16\n\t"
128295 #else
128296         "lsr	r7, %[b], #16\n\t"
128297 #endif
128298 #ifdef WOLFSSL_KEIL
128299         "muls	r6, r7, r6\n\t"
128300 #elif defined(__clang__)
128301         "muls	r6, r7\n\t"
128302 #else
128303         "mul	r6, r7\n\t"
128304 #endif
128305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128306         "lsrs	r7, r6, #16\n\t"
128307 #else
128308         "lsr	r7, r6, #16\n\t"
128309 #endif
128310 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128311         "lsls	r6, r6, #16\n\t"
128312 #else
128313         "lsl	r6, r6, #16\n\t"
128314 #endif
128315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128316         "adds	r5, r5, r6\n\t"
128317 #else
128318         "add	r5, r5, r6\n\t"
128319 #endif
128320 #ifdef WOLFSSL_KEIL
128321         "adcs	r3, r3, r7\n\t"
128322 #elif defined(__clang__)
128323         "adcs	r3, r7\n\t"
128324 #else
128325         "adc	r3, r7\n\t"
128326 #endif
128327 #ifdef WOLFSSL_KEIL
128328         "adcs	r4, r4, %[r]\n\t"
128329 #elif defined(__clang__)
128330         "adcs	r4, %[r]\n\t"
128331 #else
128332         "adc	r4, %[r]\n\t"
128333 #endif
128334 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128335         "lsrs	r6, %[a], #16\n\t"
128336 #else
128337         "lsr	r6, %[a], #16\n\t"
128338 #endif
128339 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128340         "lsrs	r7, %[b], #16\n\t"
128341 #else
128342         "lsr	r7, %[b], #16\n\t"
128343 #endif
128344 #ifdef WOLFSSL_KEIL
128345         "muls	r7, r6, r7\n\t"
128346 #elif defined(__clang__)
128347         "muls	r7, r6\n\t"
128348 #else
128349         "mul	r7, r6\n\t"
128350 #endif
128351 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128352         "adds	r3, r3, r7\n\t"
128353 #else
128354         "add	r3, r3, r7\n\t"
128355 #endif
128356 #ifdef WOLFSSL_KEIL
128357         "adcs	r4, r4, %[r]\n\t"
128358 #elif defined(__clang__)
128359         "adcs	r4, %[r]\n\t"
128360 #else
128361         "adc	r4, %[r]\n\t"
128362 #endif
128363         "uxth	r7, %[b]\n\t"
128364 #ifdef WOLFSSL_KEIL
128365         "muls	r6, r7, r6\n\t"
128366 #elif defined(__clang__)
128367         "muls	r6, r7\n\t"
128368 #else
128369         "mul	r6, r7\n\t"
128370 #endif
128371 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128372         "lsrs	r7, r6, #16\n\t"
128373 #else
128374         "lsr	r7, r6, #16\n\t"
128375 #endif
128376 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128377         "lsls	r6, r6, #16\n\t"
128378 #else
128379         "lsl	r6, r6, #16\n\t"
128380 #endif
128381 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128382         "adds	r5, r5, r6\n\t"
128383 #else
128384         "add	r5, r5, r6\n\t"
128385 #endif
128386 #ifdef WOLFSSL_KEIL
128387         "adcs	r3, r3, r7\n\t"
128388 #elif defined(__clang__)
128389         "adcs	r3, r7\n\t"
128390 #else
128391         "adc	r3, r7\n\t"
128392 #endif
128393 #ifdef WOLFSSL_KEIL
128394         "adcs	r4, r4, %[r]\n\t"
128395 #elif defined(__clang__)
128396         "adcs	r4, %[r]\n\t"
128397 #else
128398         "adc	r4, %[r]\n\t"
128399 #endif
128400         "#  A[7] * B[4]\n\t"
128401         "mov	%[a], r9\n\t"
128402         "mov	%[b], r10\n\t"
128403         "ldr	%[a], [%[a], #28]\n\t"
128404         "ldr	%[b], [%[b], #16]\n\t"
128405         "uxth	r6, %[a]\n\t"
128406         "uxth	r7, %[b]\n\t"
128407 #ifdef WOLFSSL_KEIL
128408         "muls	r7, r6, r7\n\t"
128409 #elif defined(__clang__)
128410         "muls	r7, r6\n\t"
128411 #else
128412         "mul	r7, r6\n\t"
128413 #endif
128414 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128415         "adds	r5, r5, r7\n\t"
128416 #else
128417         "add	r5, r5, r7\n\t"
128418 #endif
128419 #ifdef WOLFSSL_KEIL
128420         "adcs	r3, r3, %[r]\n\t"
128421 #elif defined(__clang__)
128422         "adcs	r3, %[r]\n\t"
128423 #else
128424         "adc	r3, %[r]\n\t"
128425 #endif
128426 #ifdef WOLFSSL_KEIL
128427         "adcs	r4, r4, %[r]\n\t"
128428 #elif defined(__clang__)
128429         "adcs	r4, %[r]\n\t"
128430 #else
128431         "adc	r4, %[r]\n\t"
128432 #endif
128433 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128434         "lsrs	r7, %[b], #16\n\t"
128435 #else
128436         "lsr	r7, %[b], #16\n\t"
128437 #endif
128438 #ifdef WOLFSSL_KEIL
128439         "muls	r6, r7, r6\n\t"
128440 #elif defined(__clang__)
128441         "muls	r6, r7\n\t"
128442 #else
128443         "mul	r6, r7\n\t"
128444 #endif
128445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128446         "lsrs	r7, r6, #16\n\t"
128447 #else
128448         "lsr	r7, r6, #16\n\t"
128449 #endif
128450 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128451         "lsls	r6, r6, #16\n\t"
128452 #else
128453         "lsl	r6, r6, #16\n\t"
128454 #endif
128455 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128456         "adds	r5, r5, r6\n\t"
128457 #else
128458         "add	r5, r5, r6\n\t"
128459 #endif
128460 #ifdef WOLFSSL_KEIL
128461         "adcs	r3, r3, r7\n\t"
128462 #elif defined(__clang__)
128463         "adcs	r3, r7\n\t"
128464 #else
128465         "adc	r3, r7\n\t"
128466 #endif
128467 #ifdef WOLFSSL_KEIL
128468         "adcs	r4, r4, %[r]\n\t"
128469 #elif defined(__clang__)
128470         "adcs	r4, %[r]\n\t"
128471 #else
128472         "adc	r4, %[r]\n\t"
128473 #endif
128474 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128475         "lsrs	r6, %[a], #16\n\t"
128476 #else
128477         "lsr	r6, %[a], #16\n\t"
128478 #endif
128479 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128480         "lsrs	r7, %[b], #16\n\t"
128481 #else
128482         "lsr	r7, %[b], #16\n\t"
128483 #endif
128484 #ifdef WOLFSSL_KEIL
128485         "muls	r7, r6, r7\n\t"
128486 #elif defined(__clang__)
128487         "muls	r7, r6\n\t"
128488 #else
128489         "mul	r7, r6\n\t"
128490 #endif
128491 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128492         "adds	r3, r3, r7\n\t"
128493 #else
128494         "add	r3, r3, r7\n\t"
128495 #endif
128496 #ifdef WOLFSSL_KEIL
128497         "adcs	r4, r4, %[r]\n\t"
128498 #elif defined(__clang__)
128499         "adcs	r4, %[r]\n\t"
128500 #else
128501         "adc	r4, %[r]\n\t"
128502 #endif
128503         "uxth	r7, %[b]\n\t"
128504 #ifdef WOLFSSL_KEIL
128505         "muls	r6, r7, r6\n\t"
128506 #elif defined(__clang__)
128507         "muls	r6, r7\n\t"
128508 #else
128509         "mul	r6, r7\n\t"
128510 #endif
128511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128512         "lsrs	r7, r6, #16\n\t"
128513 #else
128514         "lsr	r7, r6, #16\n\t"
128515 #endif
128516 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128517         "lsls	r6, r6, #16\n\t"
128518 #else
128519         "lsl	r6, r6, #16\n\t"
128520 #endif
128521 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128522         "adds	r5, r5, r6\n\t"
128523 #else
128524         "add	r5, r5, r6\n\t"
128525 #endif
128526 #ifdef WOLFSSL_KEIL
128527         "adcs	r3, r3, r7\n\t"
128528 #elif defined(__clang__)
128529         "adcs	r3, r7\n\t"
128530 #else
128531         "adc	r3, r7\n\t"
128532 #endif
128533 #ifdef WOLFSSL_KEIL
128534         "adcs	r4, r4, %[r]\n\t"
128535 #elif defined(__clang__)
128536         "adcs	r4, %[r]\n\t"
128537 #else
128538         "adc	r4, %[r]\n\t"
128539 #endif
128540         "#  A[8] * B[3]\n\t"
128541         "mov	%[a], r9\n\t"
128542         "mov	%[b], r10\n\t"
128543         "ldr	%[a], [%[a], #32]\n\t"
128544         "ldr	%[b], [%[b], #12]\n\t"
128545         "uxth	r6, %[a]\n\t"
128546         "uxth	r7, %[b]\n\t"
128547 #ifdef WOLFSSL_KEIL
128548         "muls	r7, r6, r7\n\t"
128549 #elif defined(__clang__)
128550         "muls	r7, r6\n\t"
128551 #else
128552         "mul	r7, r6\n\t"
128553 #endif
128554 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128555         "adds	r5, r5, r7\n\t"
128556 #else
128557         "add	r5, r5, r7\n\t"
128558 #endif
128559 #ifdef WOLFSSL_KEIL
128560         "adcs	r3, r3, %[r]\n\t"
128561 #elif defined(__clang__)
128562         "adcs	r3, %[r]\n\t"
128563 #else
128564         "adc	r3, %[r]\n\t"
128565 #endif
128566 #ifdef WOLFSSL_KEIL
128567         "adcs	r4, r4, %[r]\n\t"
128568 #elif defined(__clang__)
128569         "adcs	r4, %[r]\n\t"
128570 #else
128571         "adc	r4, %[r]\n\t"
128572 #endif
128573 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128574         "lsrs	r7, %[b], #16\n\t"
128575 #else
128576         "lsr	r7, %[b], #16\n\t"
128577 #endif
128578 #ifdef WOLFSSL_KEIL
128579         "muls	r6, r7, r6\n\t"
128580 #elif defined(__clang__)
128581         "muls	r6, r7\n\t"
128582 #else
128583         "mul	r6, r7\n\t"
128584 #endif
128585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128586         "lsrs	r7, r6, #16\n\t"
128587 #else
128588         "lsr	r7, r6, #16\n\t"
128589 #endif
128590 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128591         "lsls	r6, r6, #16\n\t"
128592 #else
128593         "lsl	r6, r6, #16\n\t"
128594 #endif
128595 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128596         "adds	r5, r5, r6\n\t"
128597 #else
128598         "add	r5, r5, r6\n\t"
128599 #endif
128600 #ifdef WOLFSSL_KEIL
128601         "adcs	r3, r3, r7\n\t"
128602 #elif defined(__clang__)
128603         "adcs	r3, r7\n\t"
128604 #else
128605         "adc	r3, r7\n\t"
128606 #endif
128607 #ifdef WOLFSSL_KEIL
128608         "adcs	r4, r4, %[r]\n\t"
128609 #elif defined(__clang__)
128610         "adcs	r4, %[r]\n\t"
128611 #else
128612         "adc	r4, %[r]\n\t"
128613 #endif
128614 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128615         "lsrs	r6, %[a], #16\n\t"
128616 #else
128617         "lsr	r6, %[a], #16\n\t"
128618 #endif
128619 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128620         "lsrs	r7, %[b], #16\n\t"
128621 #else
128622         "lsr	r7, %[b], #16\n\t"
128623 #endif
128624 #ifdef WOLFSSL_KEIL
128625         "muls	r7, r6, r7\n\t"
128626 #elif defined(__clang__)
128627         "muls	r7, r6\n\t"
128628 #else
128629         "mul	r7, r6\n\t"
128630 #endif
128631 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128632         "adds	r3, r3, r7\n\t"
128633 #else
128634         "add	r3, r3, r7\n\t"
128635 #endif
128636 #ifdef WOLFSSL_KEIL
128637         "adcs	r4, r4, %[r]\n\t"
128638 #elif defined(__clang__)
128639         "adcs	r4, %[r]\n\t"
128640 #else
128641         "adc	r4, %[r]\n\t"
128642 #endif
128643         "uxth	r7, %[b]\n\t"
128644 #ifdef WOLFSSL_KEIL
128645         "muls	r6, r7, r6\n\t"
128646 #elif defined(__clang__)
128647         "muls	r6, r7\n\t"
128648 #else
128649         "mul	r6, r7\n\t"
128650 #endif
128651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128652         "lsrs	r7, r6, #16\n\t"
128653 #else
128654         "lsr	r7, r6, #16\n\t"
128655 #endif
128656 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128657         "lsls	r6, r6, #16\n\t"
128658 #else
128659         "lsl	r6, r6, #16\n\t"
128660 #endif
128661 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128662         "adds	r5, r5, r6\n\t"
128663 #else
128664         "add	r5, r5, r6\n\t"
128665 #endif
128666 #ifdef WOLFSSL_KEIL
128667         "adcs	r3, r3, r7\n\t"
128668 #elif defined(__clang__)
128669         "adcs	r3, r7\n\t"
128670 #else
128671         "adc	r3, r7\n\t"
128672 #endif
128673 #ifdef WOLFSSL_KEIL
128674         "adcs	r4, r4, %[r]\n\t"
128675 #elif defined(__clang__)
128676         "adcs	r4, %[r]\n\t"
128677 #else
128678         "adc	r4, %[r]\n\t"
128679 #endif
128680         "#  A[9] * B[2]\n\t"
128681         "mov	%[a], r9\n\t"
128682         "mov	%[b], r10\n\t"
128683         "ldr	%[a], [%[a], #36]\n\t"
128684         "ldr	%[b], [%[b], #8]\n\t"
128685         "uxth	r6, %[a]\n\t"
128686         "uxth	r7, %[b]\n\t"
128687 #ifdef WOLFSSL_KEIL
128688         "muls	r7, r6, r7\n\t"
128689 #elif defined(__clang__)
128690         "muls	r7, r6\n\t"
128691 #else
128692         "mul	r7, r6\n\t"
128693 #endif
128694 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128695         "adds	r5, r5, r7\n\t"
128696 #else
128697         "add	r5, r5, r7\n\t"
128698 #endif
128699 #ifdef WOLFSSL_KEIL
128700         "adcs	r3, r3, %[r]\n\t"
128701 #elif defined(__clang__)
128702         "adcs	r3, %[r]\n\t"
128703 #else
128704         "adc	r3, %[r]\n\t"
128705 #endif
128706 #ifdef WOLFSSL_KEIL
128707         "adcs	r4, r4, %[r]\n\t"
128708 #elif defined(__clang__)
128709         "adcs	r4, %[r]\n\t"
128710 #else
128711         "adc	r4, %[r]\n\t"
128712 #endif
128713 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128714         "lsrs	r7, %[b], #16\n\t"
128715 #else
128716         "lsr	r7, %[b], #16\n\t"
128717 #endif
128718 #ifdef WOLFSSL_KEIL
128719         "muls	r6, r7, r6\n\t"
128720 #elif defined(__clang__)
128721         "muls	r6, r7\n\t"
128722 #else
128723         "mul	r6, r7\n\t"
128724 #endif
128725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128726         "lsrs	r7, r6, #16\n\t"
128727 #else
128728         "lsr	r7, r6, #16\n\t"
128729 #endif
128730 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128731         "lsls	r6, r6, #16\n\t"
128732 #else
128733         "lsl	r6, r6, #16\n\t"
128734 #endif
128735 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128736         "adds	r5, r5, r6\n\t"
128737 #else
128738         "add	r5, r5, r6\n\t"
128739 #endif
128740 #ifdef WOLFSSL_KEIL
128741         "adcs	r3, r3, r7\n\t"
128742 #elif defined(__clang__)
128743         "adcs	r3, r7\n\t"
128744 #else
128745         "adc	r3, r7\n\t"
128746 #endif
128747 #ifdef WOLFSSL_KEIL
128748         "adcs	r4, r4, %[r]\n\t"
128749 #elif defined(__clang__)
128750         "adcs	r4, %[r]\n\t"
128751 #else
128752         "adc	r4, %[r]\n\t"
128753 #endif
128754 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128755         "lsrs	r6, %[a], #16\n\t"
128756 #else
128757         "lsr	r6, %[a], #16\n\t"
128758 #endif
128759 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128760         "lsrs	r7, %[b], #16\n\t"
128761 #else
128762         "lsr	r7, %[b], #16\n\t"
128763 #endif
128764 #ifdef WOLFSSL_KEIL
128765         "muls	r7, r6, r7\n\t"
128766 #elif defined(__clang__)
128767         "muls	r7, r6\n\t"
128768 #else
128769         "mul	r7, r6\n\t"
128770 #endif
128771 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128772         "adds	r3, r3, r7\n\t"
128773 #else
128774         "add	r3, r3, r7\n\t"
128775 #endif
128776 #ifdef WOLFSSL_KEIL
128777         "adcs	r4, r4, %[r]\n\t"
128778 #elif defined(__clang__)
128779         "adcs	r4, %[r]\n\t"
128780 #else
128781         "adc	r4, %[r]\n\t"
128782 #endif
128783         "uxth	r7, %[b]\n\t"
128784 #ifdef WOLFSSL_KEIL
128785         "muls	r6, r7, r6\n\t"
128786 #elif defined(__clang__)
128787         "muls	r6, r7\n\t"
128788 #else
128789         "mul	r6, r7\n\t"
128790 #endif
128791 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128792         "lsrs	r7, r6, #16\n\t"
128793 #else
128794         "lsr	r7, r6, #16\n\t"
128795 #endif
128796 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128797         "lsls	r6, r6, #16\n\t"
128798 #else
128799         "lsl	r6, r6, #16\n\t"
128800 #endif
128801 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128802         "adds	r5, r5, r6\n\t"
128803 #else
128804         "add	r5, r5, r6\n\t"
128805 #endif
128806 #ifdef WOLFSSL_KEIL
128807         "adcs	r3, r3, r7\n\t"
128808 #elif defined(__clang__)
128809         "adcs	r3, r7\n\t"
128810 #else
128811         "adc	r3, r7\n\t"
128812 #endif
128813 #ifdef WOLFSSL_KEIL
128814         "adcs	r4, r4, %[r]\n\t"
128815 #elif defined(__clang__)
128816         "adcs	r4, %[r]\n\t"
128817 #else
128818         "adc	r4, %[r]\n\t"
128819 #endif
128820         "#  A[10] * B[1]\n\t"
128821         "mov	%[a], r9\n\t"
128822         "mov	%[b], r10\n\t"
128823         "ldr	%[a], [%[a], #40]\n\t"
128824         "ldr	%[b], [%[b], #4]\n\t"
128825         "uxth	r6, %[a]\n\t"
128826         "uxth	r7, %[b]\n\t"
128827 #ifdef WOLFSSL_KEIL
128828         "muls	r7, r6, r7\n\t"
128829 #elif defined(__clang__)
128830         "muls	r7, r6\n\t"
128831 #else
128832         "mul	r7, r6\n\t"
128833 #endif
128834 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128835         "adds	r5, r5, r7\n\t"
128836 #else
128837         "add	r5, r5, r7\n\t"
128838 #endif
128839 #ifdef WOLFSSL_KEIL
128840         "adcs	r3, r3, %[r]\n\t"
128841 #elif defined(__clang__)
128842         "adcs	r3, %[r]\n\t"
128843 #else
128844         "adc	r3, %[r]\n\t"
128845 #endif
128846 #ifdef WOLFSSL_KEIL
128847         "adcs	r4, r4, %[r]\n\t"
128848 #elif defined(__clang__)
128849         "adcs	r4, %[r]\n\t"
128850 #else
128851         "adc	r4, %[r]\n\t"
128852 #endif
128853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128854         "lsrs	r7, %[b], #16\n\t"
128855 #else
128856         "lsr	r7, %[b], #16\n\t"
128857 #endif
128858 #ifdef WOLFSSL_KEIL
128859         "muls	r6, r7, r6\n\t"
128860 #elif defined(__clang__)
128861         "muls	r6, r7\n\t"
128862 #else
128863         "mul	r6, r7\n\t"
128864 #endif
128865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128866         "lsrs	r7, r6, #16\n\t"
128867 #else
128868         "lsr	r7, r6, #16\n\t"
128869 #endif
128870 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128871         "lsls	r6, r6, #16\n\t"
128872 #else
128873         "lsl	r6, r6, #16\n\t"
128874 #endif
128875 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128876         "adds	r5, r5, r6\n\t"
128877 #else
128878         "add	r5, r5, r6\n\t"
128879 #endif
128880 #ifdef WOLFSSL_KEIL
128881         "adcs	r3, r3, r7\n\t"
128882 #elif defined(__clang__)
128883         "adcs	r3, r7\n\t"
128884 #else
128885         "adc	r3, r7\n\t"
128886 #endif
128887 #ifdef WOLFSSL_KEIL
128888         "adcs	r4, r4, %[r]\n\t"
128889 #elif defined(__clang__)
128890         "adcs	r4, %[r]\n\t"
128891 #else
128892         "adc	r4, %[r]\n\t"
128893 #endif
128894 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128895         "lsrs	r6, %[a], #16\n\t"
128896 #else
128897         "lsr	r6, %[a], #16\n\t"
128898 #endif
128899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128900         "lsrs	r7, %[b], #16\n\t"
128901 #else
128902         "lsr	r7, %[b], #16\n\t"
128903 #endif
128904 #ifdef WOLFSSL_KEIL
128905         "muls	r7, r6, r7\n\t"
128906 #elif defined(__clang__)
128907         "muls	r7, r6\n\t"
128908 #else
128909         "mul	r7, r6\n\t"
128910 #endif
128911 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128912         "adds	r3, r3, r7\n\t"
128913 #else
128914         "add	r3, r3, r7\n\t"
128915 #endif
128916 #ifdef WOLFSSL_KEIL
128917         "adcs	r4, r4, %[r]\n\t"
128918 #elif defined(__clang__)
128919         "adcs	r4, %[r]\n\t"
128920 #else
128921         "adc	r4, %[r]\n\t"
128922 #endif
128923         "uxth	r7, %[b]\n\t"
128924 #ifdef WOLFSSL_KEIL
128925         "muls	r6, r7, r6\n\t"
128926 #elif defined(__clang__)
128927         "muls	r6, r7\n\t"
128928 #else
128929         "mul	r6, r7\n\t"
128930 #endif
128931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128932         "lsrs	r7, r6, #16\n\t"
128933 #else
128934         "lsr	r7, r6, #16\n\t"
128935 #endif
128936 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128937         "lsls	r6, r6, #16\n\t"
128938 #else
128939         "lsl	r6, r6, #16\n\t"
128940 #endif
128941 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128942         "adds	r5, r5, r6\n\t"
128943 #else
128944         "add	r5, r5, r6\n\t"
128945 #endif
128946 #ifdef WOLFSSL_KEIL
128947         "adcs	r3, r3, r7\n\t"
128948 #elif defined(__clang__)
128949         "adcs	r3, r7\n\t"
128950 #else
128951         "adc	r3, r7\n\t"
128952 #endif
128953 #ifdef WOLFSSL_KEIL
128954         "adcs	r4, r4, %[r]\n\t"
128955 #elif defined(__clang__)
128956         "adcs	r4, %[r]\n\t"
128957 #else
128958         "adc	r4, %[r]\n\t"
128959 #endif
128960         "#  A[11] * B[0]\n\t"
128961         "mov	%[a], r9\n\t"
128962         "mov	%[b], r10\n\t"
128963         "ldr	%[a], [%[a], #44]\n\t"
128964         "ldr	%[b], [%[b]]\n\t"
128965         "uxth	r6, %[a]\n\t"
128966         "uxth	r7, %[b]\n\t"
128967 #ifdef WOLFSSL_KEIL
128968         "muls	r7, r6, r7\n\t"
128969 #elif defined(__clang__)
128970         "muls	r7, r6\n\t"
128971 #else
128972         "mul	r7, r6\n\t"
128973 #endif
128974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128975         "adds	r5, r5, r7\n\t"
128976 #else
128977         "add	r5, r5, r7\n\t"
128978 #endif
128979 #ifdef WOLFSSL_KEIL
128980         "adcs	r3, r3, %[r]\n\t"
128981 #elif defined(__clang__)
128982         "adcs	r3, %[r]\n\t"
128983 #else
128984         "adc	r3, %[r]\n\t"
128985 #endif
128986 #ifdef WOLFSSL_KEIL
128987         "adcs	r4, r4, %[r]\n\t"
128988 #elif defined(__clang__)
128989         "adcs	r4, %[r]\n\t"
128990 #else
128991         "adc	r4, %[r]\n\t"
128992 #endif
128993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
128994         "lsrs	r7, %[b], #16\n\t"
128995 #else
128996         "lsr	r7, %[b], #16\n\t"
128997 #endif
128998 #ifdef WOLFSSL_KEIL
128999         "muls	r6, r7, r6\n\t"
129000 #elif defined(__clang__)
129001         "muls	r6, r7\n\t"
129002 #else
129003         "mul	r6, r7\n\t"
129004 #endif
129005 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129006         "lsrs	r7, r6, #16\n\t"
129007 #else
129008         "lsr	r7, r6, #16\n\t"
129009 #endif
129010 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129011         "lsls	r6, r6, #16\n\t"
129012 #else
129013         "lsl	r6, r6, #16\n\t"
129014 #endif
129015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129016         "adds	r5, r5, r6\n\t"
129017 #else
129018         "add	r5, r5, r6\n\t"
129019 #endif
129020 #ifdef WOLFSSL_KEIL
129021         "adcs	r3, r3, r7\n\t"
129022 #elif defined(__clang__)
129023         "adcs	r3, r7\n\t"
129024 #else
129025         "adc	r3, r7\n\t"
129026 #endif
129027 #ifdef WOLFSSL_KEIL
129028         "adcs	r4, r4, %[r]\n\t"
129029 #elif defined(__clang__)
129030         "adcs	r4, %[r]\n\t"
129031 #else
129032         "adc	r4, %[r]\n\t"
129033 #endif
129034 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129035         "lsrs	r6, %[a], #16\n\t"
129036 #else
129037         "lsr	r6, %[a], #16\n\t"
129038 #endif
129039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129040         "lsrs	r7, %[b], #16\n\t"
129041 #else
129042         "lsr	r7, %[b], #16\n\t"
129043 #endif
129044 #ifdef WOLFSSL_KEIL
129045         "muls	r7, r6, r7\n\t"
129046 #elif defined(__clang__)
129047         "muls	r7, r6\n\t"
129048 #else
129049         "mul	r7, r6\n\t"
129050 #endif
129051 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129052         "adds	r3, r3, r7\n\t"
129053 #else
129054         "add	r3, r3, r7\n\t"
129055 #endif
129056 #ifdef WOLFSSL_KEIL
129057         "adcs	r4, r4, %[r]\n\t"
129058 #elif defined(__clang__)
129059         "adcs	r4, %[r]\n\t"
129060 #else
129061         "adc	r4, %[r]\n\t"
129062 #endif
129063         "uxth	r7, %[b]\n\t"
129064 #ifdef WOLFSSL_KEIL
129065         "muls	r6, r7, r6\n\t"
129066 #elif defined(__clang__)
129067         "muls	r6, r7\n\t"
129068 #else
129069         "mul	r6, r7\n\t"
129070 #endif
129071 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129072         "lsrs	r7, r6, #16\n\t"
129073 #else
129074         "lsr	r7, r6, #16\n\t"
129075 #endif
129076 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129077         "lsls	r6, r6, #16\n\t"
129078 #else
129079         "lsl	r6, r6, #16\n\t"
129080 #endif
129081 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129082         "adds	r5, r5, r6\n\t"
129083 #else
129084         "add	r5, r5, r6\n\t"
129085 #endif
129086 #ifdef WOLFSSL_KEIL
129087         "adcs	r3, r3, r7\n\t"
129088 #elif defined(__clang__)
129089         "adcs	r3, r7\n\t"
129090 #else
129091         "adc	r3, r7\n\t"
129092 #endif
129093 #ifdef WOLFSSL_KEIL
129094         "adcs	r4, r4, %[r]\n\t"
129095 #elif defined(__clang__)
129096         "adcs	r4, %[r]\n\t"
129097 #else
129098         "adc	r4, %[r]\n\t"
129099 #endif
129100         "str	r5, [sp, #44]\n\t"
129101         "#  A[12] * B[0]\n\t"
129102         "movs	r5, #0\n\t"
129103         "mov	%[a], r9\n\t"
129104         "mov	%[b], r10\n\t"
129105         "ldr	%[a], [%[a], #48]\n\t"
129106         "ldr	%[b], [%[b]]\n\t"
129107         "uxth	r6, %[a]\n\t"
129108         "uxth	r7, %[b]\n\t"
129109 #ifdef WOLFSSL_KEIL
129110         "muls	r7, r6, r7\n\t"
129111 #elif defined(__clang__)
129112         "muls	r7, r6\n\t"
129113 #else
129114         "mul	r7, r6\n\t"
129115 #endif
129116 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129117         "adds	r3, r3, r7\n\t"
129118 #else
129119         "add	r3, r3, r7\n\t"
129120 #endif
129121 #ifdef WOLFSSL_KEIL
129122         "adcs	r4, r4, %[r]\n\t"
129123 #elif defined(__clang__)
129124         "adcs	r4, %[r]\n\t"
129125 #else
129126         "adc	r4, %[r]\n\t"
129127 #endif
129128 #ifdef WOLFSSL_KEIL
129129         "adcs	r5, r5, %[r]\n\t"
129130 #elif defined(__clang__)
129131         "adcs	r5, %[r]\n\t"
129132 #else
129133         "adc	r5, %[r]\n\t"
129134 #endif
129135 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129136         "lsrs	r7, %[b], #16\n\t"
129137 #else
129138         "lsr	r7, %[b], #16\n\t"
129139 #endif
129140 #ifdef WOLFSSL_KEIL
129141         "muls	r6, r7, r6\n\t"
129142 #elif defined(__clang__)
129143         "muls	r6, r7\n\t"
129144 #else
129145         "mul	r6, r7\n\t"
129146 #endif
129147 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129148         "lsrs	r7, r6, #16\n\t"
129149 #else
129150         "lsr	r7, r6, #16\n\t"
129151 #endif
129152 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129153         "lsls	r6, r6, #16\n\t"
129154 #else
129155         "lsl	r6, r6, #16\n\t"
129156 #endif
129157 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129158         "adds	r3, r3, r6\n\t"
129159 #else
129160         "add	r3, r3, r6\n\t"
129161 #endif
129162 #ifdef WOLFSSL_KEIL
129163         "adcs	r4, r4, r7\n\t"
129164 #elif defined(__clang__)
129165         "adcs	r4, r7\n\t"
129166 #else
129167         "adc	r4, r7\n\t"
129168 #endif
129169 #ifdef WOLFSSL_KEIL
129170         "adcs	r5, r5, %[r]\n\t"
129171 #elif defined(__clang__)
129172         "adcs	r5, %[r]\n\t"
129173 #else
129174         "adc	r5, %[r]\n\t"
129175 #endif
129176 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129177         "lsrs	r6, %[a], #16\n\t"
129178 #else
129179         "lsr	r6, %[a], #16\n\t"
129180 #endif
129181 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129182         "lsrs	r7, %[b], #16\n\t"
129183 #else
129184         "lsr	r7, %[b], #16\n\t"
129185 #endif
129186 #ifdef WOLFSSL_KEIL
129187         "muls	r7, r6, r7\n\t"
129188 #elif defined(__clang__)
129189         "muls	r7, r6\n\t"
129190 #else
129191         "mul	r7, r6\n\t"
129192 #endif
129193 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129194         "adds	r4, r4, r7\n\t"
129195 #else
129196         "add	r4, r4, r7\n\t"
129197 #endif
129198 #ifdef WOLFSSL_KEIL
129199         "adcs	r5, r5, %[r]\n\t"
129200 #elif defined(__clang__)
129201         "adcs	r5, %[r]\n\t"
129202 #else
129203         "adc	r5, %[r]\n\t"
129204 #endif
129205         "uxth	r7, %[b]\n\t"
129206 #ifdef WOLFSSL_KEIL
129207         "muls	r6, r7, r6\n\t"
129208 #elif defined(__clang__)
129209         "muls	r6, r7\n\t"
129210 #else
129211         "mul	r6, r7\n\t"
129212 #endif
129213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129214         "lsrs	r7, r6, #16\n\t"
129215 #else
129216         "lsr	r7, r6, #16\n\t"
129217 #endif
129218 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129219         "lsls	r6, r6, #16\n\t"
129220 #else
129221         "lsl	r6, r6, #16\n\t"
129222 #endif
129223 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129224         "adds	r3, r3, r6\n\t"
129225 #else
129226         "add	r3, r3, r6\n\t"
129227 #endif
129228 #ifdef WOLFSSL_KEIL
129229         "adcs	r4, r4, r7\n\t"
129230 #elif defined(__clang__)
129231         "adcs	r4, r7\n\t"
129232 #else
129233         "adc	r4, r7\n\t"
129234 #endif
129235 #ifdef WOLFSSL_KEIL
129236         "adcs	r5, r5, %[r]\n\t"
129237 #elif defined(__clang__)
129238         "adcs	r5, %[r]\n\t"
129239 #else
129240         "adc	r5, %[r]\n\t"
129241 #endif
129242         "#  A[11] * B[1]\n\t"
129243         "mov	%[a], r9\n\t"
129244         "mov	%[b], r10\n\t"
129245         "ldr	%[a], [%[a], #44]\n\t"
129246         "ldr	%[b], [%[b], #4]\n\t"
129247         "uxth	r6, %[a]\n\t"
129248         "uxth	r7, %[b]\n\t"
129249 #ifdef WOLFSSL_KEIL
129250         "muls	r7, r6, r7\n\t"
129251 #elif defined(__clang__)
129252         "muls	r7, r6\n\t"
129253 #else
129254         "mul	r7, r6\n\t"
129255 #endif
129256 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129257         "adds	r3, r3, r7\n\t"
129258 #else
129259         "add	r3, r3, r7\n\t"
129260 #endif
129261 #ifdef WOLFSSL_KEIL
129262         "adcs	r4, r4, %[r]\n\t"
129263 #elif defined(__clang__)
129264         "adcs	r4, %[r]\n\t"
129265 #else
129266         "adc	r4, %[r]\n\t"
129267 #endif
129268 #ifdef WOLFSSL_KEIL
129269         "adcs	r5, r5, %[r]\n\t"
129270 #elif defined(__clang__)
129271         "adcs	r5, %[r]\n\t"
129272 #else
129273         "adc	r5, %[r]\n\t"
129274 #endif
129275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129276         "lsrs	r7, %[b], #16\n\t"
129277 #else
129278         "lsr	r7, %[b], #16\n\t"
129279 #endif
129280 #ifdef WOLFSSL_KEIL
129281         "muls	r6, r7, r6\n\t"
129282 #elif defined(__clang__)
129283         "muls	r6, r7\n\t"
129284 #else
129285         "mul	r6, r7\n\t"
129286 #endif
129287 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129288         "lsrs	r7, r6, #16\n\t"
129289 #else
129290         "lsr	r7, r6, #16\n\t"
129291 #endif
129292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129293         "lsls	r6, r6, #16\n\t"
129294 #else
129295         "lsl	r6, r6, #16\n\t"
129296 #endif
129297 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129298         "adds	r3, r3, r6\n\t"
129299 #else
129300         "add	r3, r3, r6\n\t"
129301 #endif
129302 #ifdef WOLFSSL_KEIL
129303         "adcs	r4, r4, r7\n\t"
129304 #elif defined(__clang__)
129305         "adcs	r4, r7\n\t"
129306 #else
129307         "adc	r4, r7\n\t"
129308 #endif
129309 #ifdef WOLFSSL_KEIL
129310         "adcs	r5, r5, %[r]\n\t"
129311 #elif defined(__clang__)
129312         "adcs	r5, %[r]\n\t"
129313 #else
129314         "adc	r5, %[r]\n\t"
129315 #endif
129316 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129317         "lsrs	r6, %[a], #16\n\t"
129318 #else
129319         "lsr	r6, %[a], #16\n\t"
129320 #endif
129321 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129322         "lsrs	r7, %[b], #16\n\t"
129323 #else
129324         "lsr	r7, %[b], #16\n\t"
129325 #endif
129326 #ifdef WOLFSSL_KEIL
129327         "muls	r7, r6, r7\n\t"
129328 #elif defined(__clang__)
129329         "muls	r7, r6\n\t"
129330 #else
129331         "mul	r7, r6\n\t"
129332 #endif
129333 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129334         "adds	r4, r4, r7\n\t"
129335 #else
129336         "add	r4, r4, r7\n\t"
129337 #endif
129338 #ifdef WOLFSSL_KEIL
129339         "adcs	r5, r5, %[r]\n\t"
129340 #elif defined(__clang__)
129341         "adcs	r5, %[r]\n\t"
129342 #else
129343         "adc	r5, %[r]\n\t"
129344 #endif
129345         "uxth	r7, %[b]\n\t"
129346 #ifdef WOLFSSL_KEIL
129347         "muls	r6, r7, r6\n\t"
129348 #elif defined(__clang__)
129349         "muls	r6, r7\n\t"
129350 #else
129351         "mul	r6, r7\n\t"
129352 #endif
129353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129354         "lsrs	r7, r6, #16\n\t"
129355 #else
129356         "lsr	r7, r6, #16\n\t"
129357 #endif
129358 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129359         "lsls	r6, r6, #16\n\t"
129360 #else
129361         "lsl	r6, r6, #16\n\t"
129362 #endif
129363 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129364         "adds	r3, r3, r6\n\t"
129365 #else
129366         "add	r3, r3, r6\n\t"
129367 #endif
129368 #ifdef WOLFSSL_KEIL
129369         "adcs	r4, r4, r7\n\t"
129370 #elif defined(__clang__)
129371         "adcs	r4, r7\n\t"
129372 #else
129373         "adc	r4, r7\n\t"
129374 #endif
129375 #ifdef WOLFSSL_KEIL
129376         "adcs	r5, r5, %[r]\n\t"
129377 #elif defined(__clang__)
129378         "adcs	r5, %[r]\n\t"
129379 #else
129380         "adc	r5, %[r]\n\t"
129381 #endif
129382         "#  A[10] * B[2]\n\t"
129383         "mov	%[a], r9\n\t"
129384         "mov	%[b], r10\n\t"
129385         "ldr	%[a], [%[a], #40]\n\t"
129386         "ldr	%[b], [%[b], #8]\n\t"
129387         "uxth	r6, %[a]\n\t"
129388         "uxth	r7, %[b]\n\t"
129389 #ifdef WOLFSSL_KEIL
129390         "muls	r7, r6, r7\n\t"
129391 #elif defined(__clang__)
129392         "muls	r7, r6\n\t"
129393 #else
129394         "mul	r7, r6\n\t"
129395 #endif
129396 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129397         "adds	r3, r3, r7\n\t"
129398 #else
129399         "add	r3, r3, r7\n\t"
129400 #endif
129401 #ifdef WOLFSSL_KEIL
129402         "adcs	r4, r4, %[r]\n\t"
129403 #elif defined(__clang__)
129404         "adcs	r4, %[r]\n\t"
129405 #else
129406         "adc	r4, %[r]\n\t"
129407 #endif
129408 #ifdef WOLFSSL_KEIL
129409         "adcs	r5, r5, %[r]\n\t"
129410 #elif defined(__clang__)
129411         "adcs	r5, %[r]\n\t"
129412 #else
129413         "adc	r5, %[r]\n\t"
129414 #endif
129415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129416         "lsrs	r7, %[b], #16\n\t"
129417 #else
129418         "lsr	r7, %[b], #16\n\t"
129419 #endif
129420 #ifdef WOLFSSL_KEIL
129421         "muls	r6, r7, r6\n\t"
129422 #elif defined(__clang__)
129423         "muls	r6, r7\n\t"
129424 #else
129425         "mul	r6, r7\n\t"
129426 #endif
129427 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129428         "lsrs	r7, r6, #16\n\t"
129429 #else
129430         "lsr	r7, r6, #16\n\t"
129431 #endif
129432 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129433         "lsls	r6, r6, #16\n\t"
129434 #else
129435         "lsl	r6, r6, #16\n\t"
129436 #endif
129437 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129438         "adds	r3, r3, r6\n\t"
129439 #else
129440         "add	r3, r3, r6\n\t"
129441 #endif
129442 #ifdef WOLFSSL_KEIL
129443         "adcs	r4, r4, r7\n\t"
129444 #elif defined(__clang__)
129445         "adcs	r4, r7\n\t"
129446 #else
129447         "adc	r4, r7\n\t"
129448 #endif
129449 #ifdef WOLFSSL_KEIL
129450         "adcs	r5, r5, %[r]\n\t"
129451 #elif defined(__clang__)
129452         "adcs	r5, %[r]\n\t"
129453 #else
129454         "adc	r5, %[r]\n\t"
129455 #endif
129456 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129457         "lsrs	r6, %[a], #16\n\t"
129458 #else
129459         "lsr	r6, %[a], #16\n\t"
129460 #endif
129461 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129462         "lsrs	r7, %[b], #16\n\t"
129463 #else
129464         "lsr	r7, %[b], #16\n\t"
129465 #endif
129466 #ifdef WOLFSSL_KEIL
129467         "muls	r7, r6, r7\n\t"
129468 #elif defined(__clang__)
129469         "muls	r7, r6\n\t"
129470 #else
129471         "mul	r7, r6\n\t"
129472 #endif
129473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129474         "adds	r4, r4, r7\n\t"
129475 #else
129476         "add	r4, r4, r7\n\t"
129477 #endif
129478 #ifdef WOLFSSL_KEIL
129479         "adcs	r5, r5, %[r]\n\t"
129480 #elif defined(__clang__)
129481         "adcs	r5, %[r]\n\t"
129482 #else
129483         "adc	r5, %[r]\n\t"
129484 #endif
129485         "uxth	r7, %[b]\n\t"
129486 #ifdef WOLFSSL_KEIL
129487         "muls	r6, r7, r6\n\t"
129488 #elif defined(__clang__)
129489         "muls	r6, r7\n\t"
129490 #else
129491         "mul	r6, r7\n\t"
129492 #endif
129493 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129494         "lsrs	r7, r6, #16\n\t"
129495 #else
129496         "lsr	r7, r6, #16\n\t"
129497 #endif
129498 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129499         "lsls	r6, r6, #16\n\t"
129500 #else
129501         "lsl	r6, r6, #16\n\t"
129502 #endif
129503 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129504         "adds	r3, r3, r6\n\t"
129505 #else
129506         "add	r3, r3, r6\n\t"
129507 #endif
129508 #ifdef WOLFSSL_KEIL
129509         "adcs	r4, r4, r7\n\t"
129510 #elif defined(__clang__)
129511         "adcs	r4, r7\n\t"
129512 #else
129513         "adc	r4, r7\n\t"
129514 #endif
129515 #ifdef WOLFSSL_KEIL
129516         "adcs	r5, r5, %[r]\n\t"
129517 #elif defined(__clang__)
129518         "adcs	r5, %[r]\n\t"
129519 #else
129520         "adc	r5, %[r]\n\t"
129521 #endif
129522         "#  A[9] * B[3]\n\t"
129523         "mov	%[a], r9\n\t"
129524         "mov	%[b], r10\n\t"
129525         "ldr	%[a], [%[a], #36]\n\t"
129526         "ldr	%[b], [%[b], #12]\n\t"
129527         "uxth	r6, %[a]\n\t"
129528         "uxth	r7, %[b]\n\t"
129529 #ifdef WOLFSSL_KEIL
129530         "muls	r7, r6, r7\n\t"
129531 #elif defined(__clang__)
129532         "muls	r7, r6\n\t"
129533 #else
129534         "mul	r7, r6\n\t"
129535 #endif
129536 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129537         "adds	r3, r3, r7\n\t"
129538 #else
129539         "add	r3, r3, r7\n\t"
129540 #endif
129541 #ifdef WOLFSSL_KEIL
129542         "adcs	r4, r4, %[r]\n\t"
129543 #elif defined(__clang__)
129544         "adcs	r4, %[r]\n\t"
129545 #else
129546         "adc	r4, %[r]\n\t"
129547 #endif
129548 #ifdef WOLFSSL_KEIL
129549         "adcs	r5, r5, %[r]\n\t"
129550 #elif defined(__clang__)
129551         "adcs	r5, %[r]\n\t"
129552 #else
129553         "adc	r5, %[r]\n\t"
129554 #endif
129555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129556         "lsrs	r7, %[b], #16\n\t"
129557 #else
129558         "lsr	r7, %[b], #16\n\t"
129559 #endif
129560 #ifdef WOLFSSL_KEIL
129561         "muls	r6, r7, r6\n\t"
129562 #elif defined(__clang__)
129563         "muls	r6, r7\n\t"
129564 #else
129565         "mul	r6, r7\n\t"
129566 #endif
129567 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129568         "lsrs	r7, r6, #16\n\t"
129569 #else
129570         "lsr	r7, r6, #16\n\t"
129571 #endif
129572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129573         "lsls	r6, r6, #16\n\t"
129574 #else
129575         "lsl	r6, r6, #16\n\t"
129576 #endif
129577 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129578         "adds	r3, r3, r6\n\t"
129579 #else
129580         "add	r3, r3, r6\n\t"
129581 #endif
129582 #ifdef WOLFSSL_KEIL
129583         "adcs	r4, r4, r7\n\t"
129584 #elif defined(__clang__)
129585         "adcs	r4, r7\n\t"
129586 #else
129587         "adc	r4, r7\n\t"
129588 #endif
129589 #ifdef WOLFSSL_KEIL
129590         "adcs	r5, r5, %[r]\n\t"
129591 #elif defined(__clang__)
129592         "adcs	r5, %[r]\n\t"
129593 #else
129594         "adc	r5, %[r]\n\t"
129595 #endif
129596 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129597         "lsrs	r6, %[a], #16\n\t"
129598 #else
129599         "lsr	r6, %[a], #16\n\t"
129600 #endif
129601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129602         "lsrs	r7, %[b], #16\n\t"
129603 #else
129604         "lsr	r7, %[b], #16\n\t"
129605 #endif
129606 #ifdef WOLFSSL_KEIL
129607         "muls	r7, r6, r7\n\t"
129608 #elif defined(__clang__)
129609         "muls	r7, r6\n\t"
129610 #else
129611         "mul	r7, r6\n\t"
129612 #endif
129613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129614         "adds	r4, r4, r7\n\t"
129615 #else
129616         "add	r4, r4, r7\n\t"
129617 #endif
129618 #ifdef WOLFSSL_KEIL
129619         "adcs	r5, r5, %[r]\n\t"
129620 #elif defined(__clang__)
129621         "adcs	r5, %[r]\n\t"
129622 #else
129623         "adc	r5, %[r]\n\t"
129624 #endif
129625         "uxth	r7, %[b]\n\t"
129626 #ifdef WOLFSSL_KEIL
129627         "muls	r6, r7, r6\n\t"
129628 #elif defined(__clang__)
129629         "muls	r6, r7\n\t"
129630 #else
129631         "mul	r6, r7\n\t"
129632 #endif
129633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129634         "lsrs	r7, r6, #16\n\t"
129635 #else
129636         "lsr	r7, r6, #16\n\t"
129637 #endif
129638 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129639         "lsls	r6, r6, #16\n\t"
129640 #else
129641         "lsl	r6, r6, #16\n\t"
129642 #endif
129643 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129644         "adds	r3, r3, r6\n\t"
129645 #else
129646         "add	r3, r3, r6\n\t"
129647 #endif
129648 #ifdef WOLFSSL_KEIL
129649         "adcs	r4, r4, r7\n\t"
129650 #elif defined(__clang__)
129651         "adcs	r4, r7\n\t"
129652 #else
129653         "adc	r4, r7\n\t"
129654 #endif
129655 #ifdef WOLFSSL_KEIL
129656         "adcs	r5, r5, %[r]\n\t"
129657 #elif defined(__clang__)
129658         "adcs	r5, %[r]\n\t"
129659 #else
129660         "adc	r5, %[r]\n\t"
129661 #endif
129662         "#  A[8] * B[4]\n\t"
129663         "mov	%[a], r9\n\t"
129664         "mov	%[b], r10\n\t"
129665         "ldr	%[a], [%[a], #32]\n\t"
129666         "ldr	%[b], [%[b], #16]\n\t"
129667         "uxth	r6, %[a]\n\t"
129668         "uxth	r7, %[b]\n\t"
129669 #ifdef WOLFSSL_KEIL
129670         "muls	r7, r6, r7\n\t"
129671 #elif defined(__clang__)
129672         "muls	r7, r6\n\t"
129673 #else
129674         "mul	r7, r6\n\t"
129675 #endif
129676 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129677         "adds	r3, r3, r7\n\t"
129678 #else
129679         "add	r3, r3, r7\n\t"
129680 #endif
129681 #ifdef WOLFSSL_KEIL
129682         "adcs	r4, r4, %[r]\n\t"
129683 #elif defined(__clang__)
129684         "adcs	r4, %[r]\n\t"
129685 #else
129686         "adc	r4, %[r]\n\t"
129687 #endif
129688 #ifdef WOLFSSL_KEIL
129689         "adcs	r5, r5, %[r]\n\t"
129690 #elif defined(__clang__)
129691         "adcs	r5, %[r]\n\t"
129692 #else
129693         "adc	r5, %[r]\n\t"
129694 #endif
129695 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129696         "lsrs	r7, %[b], #16\n\t"
129697 #else
129698         "lsr	r7, %[b], #16\n\t"
129699 #endif
129700 #ifdef WOLFSSL_KEIL
129701         "muls	r6, r7, r6\n\t"
129702 #elif defined(__clang__)
129703         "muls	r6, r7\n\t"
129704 #else
129705         "mul	r6, r7\n\t"
129706 #endif
129707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129708         "lsrs	r7, r6, #16\n\t"
129709 #else
129710         "lsr	r7, r6, #16\n\t"
129711 #endif
129712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129713         "lsls	r6, r6, #16\n\t"
129714 #else
129715         "lsl	r6, r6, #16\n\t"
129716 #endif
129717 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129718         "adds	r3, r3, r6\n\t"
129719 #else
129720         "add	r3, r3, r6\n\t"
129721 #endif
129722 #ifdef WOLFSSL_KEIL
129723         "adcs	r4, r4, r7\n\t"
129724 #elif defined(__clang__)
129725         "adcs	r4, r7\n\t"
129726 #else
129727         "adc	r4, r7\n\t"
129728 #endif
129729 #ifdef WOLFSSL_KEIL
129730         "adcs	r5, r5, %[r]\n\t"
129731 #elif defined(__clang__)
129732         "adcs	r5, %[r]\n\t"
129733 #else
129734         "adc	r5, %[r]\n\t"
129735 #endif
129736 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129737         "lsrs	r6, %[a], #16\n\t"
129738 #else
129739         "lsr	r6, %[a], #16\n\t"
129740 #endif
129741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129742         "lsrs	r7, %[b], #16\n\t"
129743 #else
129744         "lsr	r7, %[b], #16\n\t"
129745 #endif
129746 #ifdef WOLFSSL_KEIL
129747         "muls	r7, r6, r7\n\t"
129748 #elif defined(__clang__)
129749         "muls	r7, r6\n\t"
129750 #else
129751         "mul	r7, r6\n\t"
129752 #endif
129753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129754         "adds	r4, r4, r7\n\t"
129755 #else
129756         "add	r4, r4, r7\n\t"
129757 #endif
129758 #ifdef WOLFSSL_KEIL
129759         "adcs	r5, r5, %[r]\n\t"
129760 #elif defined(__clang__)
129761         "adcs	r5, %[r]\n\t"
129762 #else
129763         "adc	r5, %[r]\n\t"
129764 #endif
129765         "uxth	r7, %[b]\n\t"
129766 #ifdef WOLFSSL_KEIL
129767         "muls	r6, r7, r6\n\t"
129768 #elif defined(__clang__)
129769         "muls	r6, r7\n\t"
129770 #else
129771         "mul	r6, r7\n\t"
129772 #endif
129773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129774         "lsrs	r7, r6, #16\n\t"
129775 #else
129776         "lsr	r7, r6, #16\n\t"
129777 #endif
129778 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129779         "lsls	r6, r6, #16\n\t"
129780 #else
129781         "lsl	r6, r6, #16\n\t"
129782 #endif
129783 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129784         "adds	r3, r3, r6\n\t"
129785 #else
129786         "add	r3, r3, r6\n\t"
129787 #endif
129788 #ifdef WOLFSSL_KEIL
129789         "adcs	r4, r4, r7\n\t"
129790 #elif defined(__clang__)
129791         "adcs	r4, r7\n\t"
129792 #else
129793         "adc	r4, r7\n\t"
129794 #endif
129795 #ifdef WOLFSSL_KEIL
129796         "adcs	r5, r5, %[r]\n\t"
129797 #elif defined(__clang__)
129798         "adcs	r5, %[r]\n\t"
129799 #else
129800         "adc	r5, %[r]\n\t"
129801 #endif
129802         "#  A[7] * B[5]\n\t"
129803         "mov	%[a], r9\n\t"
129804         "mov	%[b], r10\n\t"
129805         "ldr	%[a], [%[a], #28]\n\t"
129806         "ldr	%[b], [%[b], #20]\n\t"
129807         "uxth	r6, %[a]\n\t"
129808         "uxth	r7, %[b]\n\t"
129809 #ifdef WOLFSSL_KEIL
129810         "muls	r7, r6, r7\n\t"
129811 #elif defined(__clang__)
129812         "muls	r7, r6\n\t"
129813 #else
129814         "mul	r7, r6\n\t"
129815 #endif
129816 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129817         "adds	r3, r3, r7\n\t"
129818 #else
129819         "add	r3, r3, r7\n\t"
129820 #endif
129821 #ifdef WOLFSSL_KEIL
129822         "adcs	r4, r4, %[r]\n\t"
129823 #elif defined(__clang__)
129824         "adcs	r4, %[r]\n\t"
129825 #else
129826         "adc	r4, %[r]\n\t"
129827 #endif
129828 #ifdef WOLFSSL_KEIL
129829         "adcs	r5, r5, %[r]\n\t"
129830 #elif defined(__clang__)
129831         "adcs	r5, %[r]\n\t"
129832 #else
129833         "adc	r5, %[r]\n\t"
129834 #endif
129835 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129836         "lsrs	r7, %[b], #16\n\t"
129837 #else
129838         "lsr	r7, %[b], #16\n\t"
129839 #endif
129840 #ifdef WOLFSSL_KEIL
129841         "muls	r6, r7, r6\n\t"
129842 #elif defined(__clang__)
129843         "muls	r6, r7\n\t"
129844 #else
129845         "mul	r6, r7\n\t"
129846 #endif
129847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129848         "lsrs	r7, r6, #16\n\t"
129849 #else
129850         "lsr	r7, r6, #16\n\t"
129851 #endif
129852 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129853         "lsls	r6, r6, #16\n\t"
129854 #else
129855         "lsl	r6, r6, #16\n\t"
129856 #endif
129857 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129858         "adds	r3, r3, r6\n\t"
129859 #else
129860         "add	r3, r3, r6\n\t"
129861 #endif
129862 #ifdef WOLFSSL_KEIL
129863         "adcs	r4, r4, r7\n\t"
129864 #elif defined(__clang__)
129865         "adcs	r4, r7\n\t"
129866 #else
129867         "adc	r4, r7\n\t"
129868 #endif
129869 #ifdef WOLFSSL_KEIL
129870         "adcs	r5, r5, %[r]\n\t"
129871 #elif defined(__clang__)
129872         "adcs	r5, %[r]\n\t"
129873 #else
129874         "adc	r5, %[r]\n\t"
129875 #endif
129876 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129877         "lsrs	r6, %[a], #16\n\t"
129878 #else
129879         "lsr	r6, %[a], #16\n\t"
129880 #endif
129881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129882         "lsrs	r7, %[b], #16\n\t"
129883 #else
129884         "lsr	r7, %[b], #16\n\t"
129885 #endif
129886 #ifdef WOLFSSL_KEIL
129887         "muls	r7, r6, r7\n\t"
129888 #elif defined(__clang__)
129889         "muls	r7, r6\n\t"
129890 #else
129891         "mul	r7, r6\n\t"
129892 #endif
129893 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129894         "adds	r4, r4, r7\n\t"
129895 #else
129896         "add	r4, r4, r7\n\t"
129897 #endif
129898 #ifdef WOLFSSL_KEIL
129899         "adcs	r5, r5, %[r]\n\t"
129900 #elif defined(__clang__)
129901         "adcs	r5, %[r]\n\t"
129902 #else
129903         "adc	r5, %[r]\n\t"
129904 #endif
129905         "uxth	r7, %[b]\n\t"
129906 #ifdef WOLFSSL_KEIL
129907         "muls	r6, r7, r6\n\t"
129908 #elif defined(__clang__)
129909         "muls	r6, r7\n\t"
129910 #else
129911         "mul	r6, r7\n\t"
129912 #endif
129913 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129914         "lsrs	r7, r6, #16\n\t"
129915 #else
129916         "lsr	r7, r6, #16\n\t"
129917 #endif
129918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129919         "lsls	r6, r6, #16\n\t"
129920 #else
129921         "lsl	r6, r6, #16\n\t"
129922 #endif
129923 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129924         "adds	r3, r3, r6\n\t"
129925 #else
129926         "add	r3, r3, r6\n\t"
129927 #endif
129928 #ifdef WOLFSSL_KEIL
129929         "adcs	r4, r4, r7\n\t"
129930 #elif defined(__clang__)
129931         "adcs	r4, r7\n\t"
129932 #else
129933         "adc	r4, r7\n\t"
129934 #endif
129935 #ifdef WOLFSSL_KEIL
129936         "adcs	r5, r5, %[r]\n\t"
129937 #elif defined(__clang__)
129938         "adcs	r5, %[r]\n\t"
129939 #else
129940         "adc	r5, %[r]\n\t"
129941 #endif
129942         "#  A[6] * B[6]\n\t"
129943         "mov	%[a], r9\n\t"
129944         "mov	%[b], r10\n\t"
129945         "ldr	%[a], [%[a], #24]\n\t"
129946         "ldr	%[b], [%[b], #24]\n\t"
129947         "uxth	r6, %[a]\n\t"
129948         "uxth	r7, %[b]\n\t"
129949 #ifdef WOLFSSL_KEIL
129950         "muls	r7, r6, r7\n\t"
129951 #elif defined(__clang__)
129952         "muls	r7, r6\n\t"
129953 #else
129954         "mul	r7, r6\n\t"
129955 #endif
129956 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129957         "adds	r3, r3, r7\n\t"
129958 #else
129959         "add	r3, r3, r7\n\t"
129960 #endif
129961 #ifdef WOLFSSL_KEIL
129962         "adcs	r4, r4, %[r]\n\t"
129963 #elif defined(__clang__)
129964         "adcs	r4, %[r]\n\t"
129965 #else
129966         "adc	r4, %[r]\n\t"
129967 #endif
129968 #ifdef WOLFSSL_KEIL
129969         "adcs	r5, r5, %[r]\n\t"
129970 #elif defined(__clang__)
129971         "adcs	r5, %[r]\n\t"
129972 #else
129973         "adc	r5, %[r]\n\t"
129974 #endif
129975 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129976         "lsrs	r7, %[b], #16\n\t"
129977 #else
129978         "lsr	r7, %[b], #16\n\t"
129979 #endif
129980 #ifdef WOLFSSL_KEIL
129981         "muls	r6, r7, r6\n\t"
129982 #elif defined(__clang__)
129983         "muls	r6, r7\n\t"
129984 #else
129985         "mul	r6, r7\n\t"
129986 #endif
129987 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129988         "lsrs	r7, r6, #16\n\t"
129989 #else
129990         "lsr	r7, r6, #16\n\t"
129991 #endif
129992 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129993         "lsls	r6, r6, #16\n\t"
129994 #else
129995         "lsl	r6, r6, #16\n\t"
129996 #endif
129997 #if defined(__clang__) || defined(WOLFSSL_KEIL)
129998         "adds	r3, r3, r6\n\t"
129999 #else
130000         "add	r3, r3, r6\n\t"
130001 #endif
130002 #ifdef WOLFSSL_KEIL
130003         "adcs	r4, r4, r7\n\t"
130004 #elif defined(__clang__)
130005         "adcs	r4, r7\n\t"
130006 #else
130007         "adc	r4, r7\n\t"
130008 #endif
130009 #ifdef WOLFSSL_KEIL
130010         "adcs	r5, r5, %[r]\n\t"
130011 #elif defined(__clang__)
130012         "adcs	r5, %[r]\n\t"
130013 #else
130014         "adc	r5, %[r]\n\t"
130015 #endif
130016 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130017         "lsrs	r6, %[a], #16\n\t"
130018 #else
130019         "lsr	r6, %[a], #16\n\t"
130020 #endif
130021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130022         "lsrs	r7, %[b], #16\n\t"
130023 #else
130024         "lsr	r7, %[b], #16\n\t"
130025 #endif
130026 #ifdef WOLFSSL_KEIL
130027         "muls	r7, r6, r7\n\t"
130028 #elif defined(__clang__)
130029         "muls	r7, r6\n\t"
130030 #else
130031         "mul	r7, r6\n\t"
130032 #endif
130033 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130034         "adds	r4, r4, r7\n\t"
130035 #else
130036         "add	r4, r4, r7\n\t"
130037 #endif
130038 #ifdef WOLFSSL_KEIL
130039         "adcs	r5, r5, %[r]\n\t"
130040 #elif defined(__clang__)
130041         "adcs	r5, %[r]\n\t"
130042 #else
130043         "adc	r5, %[r]\n\t"
130044 #endif
130045         "uxth	r7, %[b]\n\t"
130046 #ifdef WOLFSSL_KEIL
130047         "muls	r6, r7, r6\n\t"
130048 #elif defined(__clang__)
130049         "muls	r6, r7\n\t"
130050 #else
130051         "mul	r6, r7\n\t"
130052 #endif
130053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130054         "lsrs	r7, r6, #16\n\t"
130055 #else
130056         "lsr	r7, r6, #16\n\t"
130057 #endif
130058 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130059         "lsls	r6, r6, #16\n\t"
130060 #else
130061         "lsl	r6, r6, #16\n\t"
130062 #endif
130063 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130064         "adds	r3, r3, r6\n\t"
130065 #else
130066         "add	r3, r3, r6\n\t"
130067 #endif
130068 #ifdef WOLFSSL_KEIL
130069         "adcs	r4, r4, r7\n\t"
130070 #elif defined(__clang__)
130071         "adcs	r4, r7\n\t"
130072 #else
130073         "adc	r4, r7\n\t"
130074 #endif
130075 #ifdef WOLFSSL_KEIL
130076         "adcs	r5, r5, %[r]\n\t"
130077 #elif defined(__clang__)
130078         "adcs	r5, %[r]\n\t"
130079 #else
130080         "adc	r5, %[r]\n\t"
130081 #endif
130082         "#  A[5] * B[7]\n\t"
130083         "mov	%[a], r9\n\t"
130084         "mov	%[b], r10\n\t"
130085         "ldr	%[a], [%[a], #20]\n\t"
130086         "ldr	%[b], [%[b], #28]\n\t"
130087         "uxth	r6, %[a]\n\t"
130088         "uxth	r7, %[b]\n\t"
130089 #ifdef WOLFSSL_KEIL
130090         "muls	r7, r6, r7\n\t"
130091 #elif defined(__clang__)
130092         "muls	r7, r6\n\t"
130093 #else
130094         "mul	r7, r6\n\t"
130095 #endif
130096 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130097         "adds	r3, r3, r7\n\t"
130098 #else
130099         "add	r3, r3, r7\n\t"
130100 #endif
130101 #ifdef WOLFSSL_KEIL
130102         "adcs	r4, r4, %[r]\n\t"
130103 #elif defined(__clang__)
130104         "adcs	r4, %[r]\n\t"
130105 #else
130106         "adc	r4, %[r]\n\t"
130107 #endif
130108 #ifdef WOLFSSL_KEIL
130109         "adcs	r5, r5, %[r]\n\t"
130110 #elif defined(__clang__)
130111         "adcs	r5, %[r]\n\t"
130112 #else
130113         "adc	r5, %[r]\n\t"
130114 #endif
130115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130116         "lsrs	r7, %[b], #16\n\t"
130117 #else
130118         "lsr	r7, %[b], #16\n\t"
130119 #endif
130120 #ifdef WOLFSSL_KEIL
130121         "muls	r6, r7, r6\n\t"
130122 #elif defined(__clang__)
130123         "muls	r6, r7\n\t"
130124 #else
130125         "mul	r6, r7\n\t"
130126 #endif
130127 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130128         "lsrs	r7, r6, #16\n\t"
130129 #else
130130         "lsr	r7, r6, #16\n\t"
130131 #endif
130132 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130133         "lsls	r6, r6, #16\n\t"
130134 #else
130135         "lsl	r6, r6, #16\n\t"
130136 #endif
130137 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130138         "adds	r3, r3, r6\n\t"
130139 #else
130140         "add	r3, r3, r6\n\t"
130141 #endif
130142 #ifdef WOLFSSL_KEIL
130143         "adcs	r4, r4, r7\n\t"
130144 #elif defined(__clang__)
130145         "adcs	r4, r7\n\t"
130146 #else
130147         "adc	r4, r7\n\t"
130148 #endif
130149 #ifdef WOLFSSL_KEIL
130150         "adcs	r5, r5, %[r]\n\t"
130151 #elif defined(__clang__)
130152         "adcs	r5, %[r]\n\t"
130153 #else
130154         "adc	r5, %[r]\n\t"
130155 #endif
130156 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130157         "lsrs	r6, %[a], #16\n\t"
130158 #else
130159         "lsr	r6, %[a], #16\n\t"
130160 #endif
130161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130162         "lsrs	r7, %[b], #16\n\t"
130163 #else
130164         "lsr	r7, %[b], #16\n\t"
130165 #endif
130166 #ifdef WOLFSSL_KEIL
130167         "muls	r7, r6, r7\n\t"
130168 #elif defined(__clang__)
130169         "muls	r7, r6\n\t"
130170 #else
130171         "mul	r7, r6\n\t"
130172 #endif
130173 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130174         "adds	r4, r4, r7\n\t"
130175 #else
130176         "add	r4, r4, r7\n\t"
130177 #endif
130178 #ifdef WOLFSSL_KEIL
130179         "adcs	r5, r5, %[r]\n\t"
130180 #elif defined(__clang__)
130181         "adcs	r5, %[r]\n\t"
130182 #else
130183         "adc	r5, %[r]\n\t"
130184 #endif
130185         "uxth	r7, %[b]\n\t"
130186 #ifdef WOLFSSL_KEIL
130187         "muls	r6, r7, r6\n\t"
130188 #elif defined(__clang__)
130189         "muls	r6, r7\n\t"
130190 #else
130191         "mul	r6, r7\n\t"
130192 #endif
130193 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130194         "lsrs	r7, r6, #16\n\t"
130195 #else
130196         "lsr	r7, r6, #16\n\t"
130197 #endif
130198 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130199         "lsls	r6, r6, #16\n\t"
130200 #else
130201         "lsl	r6, r6, #16\n\t"
130202 #endif
130203 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130204         "adds	r3, r3, r6\n\t"
130205 #else
130206         "add	r3, r3, r6\n\t"
130207 #endif
130208 #ifdef WOLFSSL_KEIL
130209         "adcs	r4, r4, r7\n\t"
130210 #elif defined(__clang__)
130211         "adcs	r4, r7\n\t"
130212 #else
130213         "adc	r4, r7\n\t"
130214 #endif
130215 #ifdef WOLFSSL_KEIL
130216         "adcs	r5, r5, %[r]\n\t"
130217 #elif defined(__clang__)
130218         "adcs	r5, %[r]\n\t"
130219 #else
130220         "adc	r5, %[r]\n\t"
130221 #endif
130222         "#  A[4] * B[8]\n\t"
130223         "mov	%[a], r9\n\t"
130224         "mov	%[b], r10\n\t"
130225         "ldr	%[a], [%[a], #16]\n\t"
130226         "ldr	%[b], [%[b], #32]\n\t"
130227         "uxth	r6, %[a]\n\t"
130228         "uxth	r7, %[b]\n\t"
130229 #ifdef WOLFSSL_KEIL
130230         "muls	r7, r6, r7\n\t"
130231 #elif defined(__clang__)
130232         "muls	r7, r6\n\t"
130233 #else
130234         "mul	r7, r6\n\t"
130235 #endif
130236 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130237         "adds	r3, r3, r7\n\t"
130238 #else
130239         "add	r3, r3, r7\n\t"
130240 #endif
130241 #ifdef WOLFSSL_KEIL
130242         "adcs	r4, r4, %[r]\n\t"
130243 #elif defined(__clang__)
130244         "adcs	r4, %[r]\n\t"
130245 #else
130246         "adc	r4, %[r]\n\t"
130247 #endif
130248 #ifdef WOLFSSL_KEIL
130249         "adcs	r5, r5, %[r]\n\t"
130250 #elif defined(__clang__)
130251         "adcs	r5, %[r]\n\t"
130252 #else
130253         "adc	r5, %[r]\n\t"
130254 #endif
130255 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130256         "lsrs	r7, %[b], #16\n\t"
130257 #else
130258         "lsr	r7, %[b], #16\n\t"
130259 #endif
130260 #ifdef WOLFSSL_KEIL
130261         "muls	r6, r7, r6\n\t"
130262 #elif defined(__clang__)
130263         "muls	r6, r7\n\t"
130264 #else
130265         "mul	r6, r7\n\t"
130266 #endif
130267 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130268         "lsrs	r7, r6, #16\n\t"
130269 #else
130270         "lsr	r7, r6, #16\n\t"
130271 #endif
130272 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130273         "lsls	r6, r6, #16\n\t"
130274 #else
130275         "lsl	r6, r6, #16\n\t"
130276 #endif
130277 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130278         "adds	r3, r3, r6\n\t"
130279 #else
130280         "add	r3, r3, r6\n\t"
130281 #endif
130282 #ifdef WOLFSSL_KEIL
130283         "adcs	r4, r4, r7\n\t"
130284 #elif defined(__clang__)
130285         "adcs	r4, r7\n\t"
130286 #else
130287         "adc	r4, r7\n\t"
130288 #endif
130289 #ifdef WOLFSSL_KEIL
130290         "adcs	r5, r5, %[r]\n\t"
130291 #elif defined(__clang__)
130292         "adcs	r5, %[r]\n\t"
130293 #else
130294         "adc	r5, %[r]\n\t"
130295 #endif
130296 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130297         "lsrs	r6, %[a], #16\n\t"
130298 #else
130299         "lsr	r6, %[a], #16\n\t"
130300 #endif
130301 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130302         "lsrs	r7, %[b], #16\n\t"
130303 #else
130304         "lsr	r7, %[b], #16\n\t"
130305 #endif
130306 #ifdef WOLFSSL_KEIL
130307         "muls	r7, r6, r7\n\t"
130308 #elif defined(__clang__)
130309         "muls	r7, r6\n\t"
130310 #else
130311         "mul	r7, r6\n\t"
130312 #endif
130313 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130314         "adds	r4, r4, r7\n\t"
130315 #else
130316         "add	r4, r4, r7\n\t"
130317 #endif
130318 #ifdef WOLFSSL_KEIL
130319         "adcs	r5, r5, %[r]\n\t"
130320 #elif defined(__clang__)
130321         "adcs	r5, %[r]\n\t"
130322 #else
130323         "adc	r5, %[r]\n\t"
130324 #endif
130325         "uxth	r7, %[b]\n\t"
130326 #ifdef WOLFSSL_KEIL
130327         "muls	r6, r7, r6\n\t"
130328 #elif defined(__clang__)
130329         "muls	r6, r7\n\t"
130330 #else
130331         "mul	r6, r7\n\t"
130332 #endif
130333 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130334         "lsrs	r7, r6, #16\n\t"
130335 #else
130336         "lsr	r7, r6, #16\n\t"
130337 #endif
130338 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130339         "lsls	r6, r6, #16\n\t"
130340 #else
130341         "lsl	r6, r6, #16\n\t"
130342 #endif
130343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130344         "adds	r3, r3, r6\n\t"
130345 #else
130346         "add	r3, r3, r6\n\t"
130347 #endif
130348 #ifdef WOLFSSL_KEIL
130349         "adcs	r4, r4, r7\n\t"
130350 #elif defined(__clang__)
130351         "adcs	r4, r7\n\t"
130352 #else
130353         "adc	r4, r7\n\t"
130354 #endif
130355 #ifdef WOLFSSL_KEIL
130356         "adcs	r5, r5, %[r]\n\t"
130357 #elif defined(__clang__)
130358         "adcs	r5, %[r]\n\t"
130359 #else
130360         "adc	r5, %[r]\n\t"
130361 #endif
130362         "#  A[3] * B[9]\n\t"
130363         "mov	%[a], r9\n\t"
130364         "mov	%[b], r10\n\t"
130365         "ldr	%[a], [%[a], #12]\n\t"
130366         "ldr	%[b], [%[b], #36]\n\t"
130367         "uxth	r6, %[a]\n\t"
130368         "uxth	r7, %[b]\n\t"
130369 #ifdef WOLFSSL_KEIL
130370         "muls	r7, r6, r7\n\t"
130371 #elif defined(__clang__)
130372         "muls	r7, r6\n\t"
130373 #else
130374         "mul	r7, r6\n\t"
130375 #endif
130376 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130377         "adds	r3, r3, r7\n\t"
130378 #else
130379         "add	r3, r3, r7\n\t"
130380 #endif
130381 #ifdef WOLFSSL_KEIL
130382         "adcs	r4, r4, %[r]\n\t"
130383 #elif defined(__clang__)
130384         "adcs	r4, %[r]\n\t"
130385 #else
130386         "adc	r4, %[r]\n\t"
130387 #endif
130388 #ifdef WOLFSSL_KEIL
130389         "adcs	r5, r5, %[r]\n\t"
130390 #elif defined(__clang__)
130391         "adcs	r5, %[r]\n\t"
130392 #else
130393         "adc	r5, %[r]\n\t"
130394 #endif
130395 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130396         "lsrs	r7, %[b], #16\n\t"
130397 #else
130398         "lsr	r7, %[b], #16\n\t"
130399 #endif
130400 #ifdef WOLFSSL_KEIL
130401         "muls	r6, r7, r6\n\t"
130402 #elif defined(__clang__)
130403         "muls	r6, r7\n\t"
130404 #else
130405         "mul	r6, r7\n\t"
130406 #endif
130407 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130408         "lsrs	r7, r6, #16\n\t"
130409 #else
130410         "lsr	r7, r6, #16\n\t"
130411 #endif
130412 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130413         "lsls	r6, r6, #16\n\t"
130414 #else
130415         "lsl	r6, r6, #16\n\t"
130416 #endif
130417 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130418         "adds	r3, r3, r6\n\t"
130419 #else
130420         "add	r3, r3, r6\n\t"
130421 #endif
130422 #ifdef WOLFSSL_KEIL
130423         "adcs	r4, r4, r7\n\t"
130424 #elif defined(__clang__)
130425         "adcs	r4, r7\n\t"
130426 #else
130427         "adc	r4, r7\n\t"
130428 #endif
130429 #ifdef WOLFSSL_KEIL
130430         "adcs	r5, r5, %[r]\n\t"
130431 #elif defined(__clang__)
130432         "adcs	r5, %[r]\n\t"
130433 #else
130434         "adc	r5, %[r]\n\t"
130435 #endif
130436 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130437         "lsrs	r6, %[a], #16\n\t"
130438 #else
130439         "lsr	r6, %[a], #16\n\t"
130440 #endif
130441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130442         "lsrs	r7, %[b], #16\n\t"
130443 #else
130444         "lsr	r7, %[b], #16\n\t"
130445 #endif
130446 #ifdef WOLFSSL_KEIL
130447         "muls	r7, r6, r7\n\t"
130448 #elif defined(__clang__)
130449         "muls	r7, r6\n\t"
130450 #else
130451         "mul	r7, r6\n\t"
130452 #endif
130453 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130454         "adds	r4, r4, r7\n\t"
130455 #else
130456         "add	r4, r4, r7\n\t"
130457 #endif
130458 #ifdef WOLFSSL_KEIL
130459         "adcs	r5, r5, %[r]\n\t"
130460 #elif defined(__clang__)
130461         "adcs	r5, %[r]\n\t"
130462 #else
130463         "adc	r5, %[r]\n\t"
130464 #endif
130465         "uxth	r7, %[b]\n\t"
130466 #ifdef WOLFSSL_KEIL
130467         "muls	r6, r7, r6\n\t"
130468 #elif defined(__clang__)
130469         "muls	r6, r7\n\t"
130470 #else
130471         "mul	r6, r7\n\t"
130472 #endif
130473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130474         "lsrs	r7, r6, #16\n\t"
130475 #else
130476         "lsr	r7, r6, #16\n\t"
130477 #endif
130478 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130479         "lsls	r6, r6, #16\n\t"
130480 #else
130481         "lsl	r6, r6, #16\n\t"
130482 #endif
130483 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130484         "adds	r3, r3, r6\n\t"
130485 #else
130486         "add	r3, r3, r6\n\t"
130487 #endif
130488 #ifdef WOLFSSL_KEIL
130489         "adcs	r4, r4, r7\n\t"
130490 #elif defined(__clang__)
130491         "adcs	r4, r7\n\t"
130492 #else
130493         "adc	r4, r7\n\t"
130494 #endif
130495 #ifdef WOLFSSL_KEIL
130496         "adcs	r5, r5, %[r]\n\t"
130497 #elif defined(__clang__)
130498         "adcs	r5, %[r]\n\t"
130499 #else
130500         "adc	r5, %[r]\n\t"
130501 #endif
130502         "#  A[2] * B[10]\n\t"
130503         "mov	%[a], r9\n\t"
130504         "mov	%[b], r10\n\t"
130505         "ldr	%[a], [%[a], #8]\n\t"
130506         "ldr	%[b], [%[b], #40]\n\t"
130507         "uxth	r6, %[a]\n\t"
130508         "uxth	r7, %[b]\n\t"
130509 #ifdef WOLFSSL_KEIL
130510         "muls	r7, r6, r7\n\t"
130511 #elif defined(__clang__)
130512         "muls	r7, r6\n\t"
130513 #else
130514         "mul	r7, r6\n\t"
130515 #endif
130516 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130517         "adds	r3, r3, r7\n\t"
130518 #else
130519         "add	r3, r3, r7\n\t"
130520 #endif
130521 #ifdef WOLFSSL_KEIL
130522         "adcs	r4, r4, %[r]\n\t"
130523 #elif defined(__clang__)
130524         "adcs	r4, %[r]\n\t"
130525 #else
130526         "adc	r4, %[r]\n\t"
130527 #endif
130528 #ifdef WOLFSSL_KEIL
130529         "adcs	r5, r5, %[r]\n\t"
130530 #elif defined(__clang__)
130531         "adcs	r5, %[r]\n\t"
130532 #else
130533         "adc	r5, %[r]\n\t"
130534 #endif
130535 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130536         "lsrs	r7, %[b], #16\n\t"
130537 #else
130538         "lsr	r7, %[b], #16\n\t"
130539 #endif
130540 #ifdef WOLFSSL_KEIL
130541         "muls	r6, r7, r6\n\t"
130542 #elif defined(__clang__)
130543         "muls	r6, r7\n\t"
130544 #else
130545         "mul	r6, r7\n\t"
130546 #endif
130547 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130548         "lsrs	r7, r6, #16\n\t"
130549 #else
130550         "lsr	r7, r6, #16\n\t"
130551 #endif
130552 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130553         "lsls	r6, r6, #16\n\t"
130554 #else
130555         "lsl	r6, r6, #16\n\t"
130556 #endif
130557 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130558         "adds	r3, r3, r6\n\t"
130559 #else
130560         "add	r3, r3, r6\n\t"
130561 #endif
130562 #ifdef WOLFSSL_KEIL
130563         "adcs	r4, r4, r7\n\t"
130564 #elif defined(__clang__)
130565         "adcs	r4, r7\n\t"
130566 #else
130567         "adc	r4, r7\n\t"
130568 #endif
130569 #ifdef WOLFSSL_KEIL
130570         "adcs	r5, r5, %[r]\n\t"
130571 #elif defined(__clang__)
130572         "adcs	r5, %[r]\n\t"
130573 #else
130574         "adc	r5, %[r]\n\t"
130575 #endif
130576 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130577         "lsrs	r6, %[a], #16\n\t"
130578 #else
130579         "lsr	r6, %[a], #16\n\t"
130580 #endif
130581 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130582         "lsrs	r7, %[b], #16\n\t"
130583 #else
130584         "lsr	r7, %[b], #16\n\t"
130585 #endif
130586 #ifdef WOLFSSL_KEIL
130587         "muls	r7, r6, r7\n\t"
130588 #elif defined(__clang__)
130589         "muls	r7, r6\n\t"
130590 #else
130591         "mul	r7, r6\n\t"
130592 #endif
130593 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130594         "adds	r4, r4, r7\n\t"
130595 #else
130596         "add	r4, r4, r7\n\t"
130597 #endif
130598 #ifdef WOLFSSL_KEIL
130599         "adcs	r5, r5, %[r]\n\t"
130600 #elif defined(__clang__)
130601         "adcs	r5, %[r]\n\t"
130602 #else
130603         "adc	r5, %[r]\n\t"
130604 #endif
130605         "uxth	r7, %[b]\n\t"
130606 #ifdef WOLFSSL_KEIL
130607         "muls	r6, r7, r6\n\t"
130608 #elif defined(__clang__)
130609         "muls	r6, r7\n\t"
130610 #else
130611         "mul	r6, r7\n\t"
130612 #endif
130613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130614         "lsrs	r7, r6, #16\n\t"
130615 #else
130616         "lsr	r7, r6, #16\n\t"
130617 #endif
130618 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130619         "lsls	r6, r6, #16\n\t"
130620 #else
130621         "lsl	r6, r6, #16\n\t"
130622 #endif
130623 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130624         "adds	r3, r3, r6\n\t"
130625 #else
130626         "add	r3, r3, r6\n\t"
130627 #endif
130628 #ifdef WOLFSSL_KEIL
130629         "adcs	r4, r4, r7\n\t"
130630 #elif defined(__clang__)
130631         "adcs	r4, r7\n\t"
130632 #else
130633         "adc	r4, r7\n\t"
130634 #endif
130635 #ifdef WOLFSSL_KEIL
130636         "adcs	r5, r5, %[r]\n\t"
130637 #elif defined(__clang__)
130638         "adcs	r5, %[r]\n\t"
130639 #else
130640         "adc	r5, %[r]\n\t"
130641 #endif
130642         "#  A[1] * B[11]\n\t"
130643         "mov	%[a], r9\n\t"
130644         "mov	%[b], r10\n\t"
130645         "ldr	%[a], [%[a], #4]\n\t"
130646         "ldr	%[b], [%[b], #44]\n\t"
130647         "uxth	r6, %[a]\n\t"
130648         "uxth	r7, %[b]\n\t"
130649 #ifdef WOLFSSL_KEIL
130650         "muls	r7, r6, r7\n\t"
130651 #elif defined(__clang__)
130652         "muls	r7, r6\n\t"
130653 #else
130654         "mul	r7, r6\n\t"
130655 #endif
130656 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130657         "adds	r3, r3, r7\n\t"
130658 #else
130659         "add	r3, r3, r7\n\t"
130660 #endif
130661 #ifdef WOLFSSL_KEIL
130662         "adcs	r4, r4, %[r]\n\t"
130663 #elif defined(__clang__)
130664         "adcs	r4, %[r]\n\t"
130665 #else
130666         "adc	r4, %[r]\n\t"
130667 #endif
130668 #ifdef WOLFSSL_KEIL
130669         "adcs	r5, r5, %[r]\n\t"
130670 #elif defined(__clang__)
130671         "adcs	r5, %[r]\n\t"
130672 #else
130673         "adc	r5, %[r]\n\t"
130674 #endif
130675 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130676         "lsrs	r7, %[b], #16\n\t"
130677 #else
130678         "lsr	r7, %[b], #16\n\t"
130679 #endif
130680 #ifdef WOLFSSL_KEIL
130681         "muls	r6, r7, r6\n\t"
130682 #elif defined(__clang__)
130683         "muls	r6, r7\n\t"
130684 #else
130685         "mul	r6, r7\n\t"
130686 #endif
130687 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130688         "lsrs	r7, r6, #16\n\t"
130689 #else
130690         "lsr	r7, r6, #16\n\t"
130691 #endif
130692 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130693         "lsls	r6, r6, #16\n\t"
130694 #else
130695         "lsl	r6, r6, #16\n\t"
130696 #endif
130697 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130698         "adds	r3, r3, r6\n\t"
130699 #else
130700         "add	r3, r3, r6\n\t"
130701 #endif
130702 #ifdef WOLFSSL_KEIL
130703         "adcs	r4, r4, r7\n\t"
130704 #elif defined(__clang__)
130705         "adcs	r4, r7\n\t"
130706 #else
130707         "adc	r4, r7\n\t"
130708 #endif
130709 #ifdef WOLFSSL_KEIL
130710         "adcs	r5, r5, %[r]\n\t"
130711 #elif defined(__clang__)
130712         "adcs	r5, %[r]\n\t"
130713 #else
130714         "adc	r5, %[r]\n\t"
130715 #endif
130716 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130717         "lsrs	r6, %[a], #16\n\t"
130718 #else
130719         "lsr	r6, %[a], #16\n\t"
130720 #endif
130721 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130722         "lsrs	r7, %[b], #16\n\t"
130723 #else
130724         "lsr	r7, %[b], #16\n\t"
130725 #endif
130726 #ifdef WOLFSSL_KEIL
130727         "muls	r7, r6, r7\n\t"
130728 #elif defined(__clang__)
130729         "muls	r7, r6\n\t"
130730 #else
130731         "mul	r7, r6\n\t"
130732 #endif
130733 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130734         "adds	r4, r4, r7\n\t"
130735 #else
130736         "add	r4, r4, r7\n\t"
130737 #endif
130738 #ifdef WOLFSSL_KEIL
130739         "adcs	r5, r5, %[r]\n\t"
130740 #elif defined(__clang__)
130741         "adcs	r5, %[r]\n\t"
130742 #else
130743         "adc	r5, %[r]\n\t"
130744 #endif
130745         "uxth	r7, %[b]\n\t"
130746 #ifdef WOLFSSL_KEIL
130747         "muls	r6, r7, r6\n\t"
130748 #elif defined(__clang__)
130749         "muls	r6, r7\n\t"
130750 #else
130751         "mul	r6, r7\n\t"
130752 #endif
130753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130754         "lsrs	r7, r6, #16\n\t"
130755 #else
130756         "lsr	r7, r6, #16\n\t"
130757 #endif
130758 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130759         "lsls	r6, r6, #16\n\t"
130760 #else
130761         "lsl	r6, r6, #16\n\t"
130762 #endif
130763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130764         "adds	r3, r3, r6\n\t"
130765 #else
130766         "add	r3, r3, r6\n\t"
130767 #endif
130768 #ifdef WOLFSSL_KEIL
130769         "adcs	r4, r4, r7\n\t"
130770 #elif defined(__clang__)
130771         "adcs	r4, r7\n\t"
130772 #else
130773         "adc	r4, r7\n\t"
130774 #endif
130775 #ifdef WOLFSSL_KEIL
130776         "adcs	r5, r5, %[r]\n\t"
130777 #elif defined(__clang__)
130778         "adcs	r5, %[r]\n\t"
130779 #else
130780         "adc	r5, %[r]\n\t"
130781 #endif
130782         "#  A[0] * B[12]\n\t"
130783         "mov	%[a], r9\n\t"
130784         "mov	%[b], r10\n\t"
130785         "ldr	%[a], [%[a]]\n\t"
130786         "ldr	%[b], [%[b], #48]\n\t"
130787         "uxth	r6, %[a]\n\t"
130788         "uxth	r7, %[b]\n\t"
130789 #ifdef WOLFSSL_KEIL
130790         "muls	r7, r6, r7\n\t"
130791 #elif defined(__clang__)
130792         "muls	r7, r6\n\t"
130793 #else
130794         "mul	r7, r6\n\t"
130795 #endif
130796 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130797         "adds	r3, r3, r7\n\t"
130798 #else
130799         "add	r3, r3, r7\n\t"
130800 #endif
130801 #ifdef WOLFSSL_KEIL
130802         "adcs	r4, r4, %[r]\n\t"
130803 #elif defined(__clang__)
130804         "adcs	r4, %[r]\n\t"
130805 #else
130806         "adc	r4, %[r]\n\t"
130807 #endif
130808 #ifdef WOLFSSL_KEIL
130809         "adcs	r5, r5, %[r]\n\t"
130810 #elif defined(__clang__)
130811         "adcs	r5, %[r]\n\t"
130812 #else
130813         "adc	r5, %[r]\n\t"
130814 #endif
130815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130816         "lsrs	r7, %[b], #16\n\t"
130817 #else
130818         "lsr	r7, %[b], #16\n\t"
130819 #endif
130820 #ifdef WOLFSSL_KEIL
130821         "muls	r6, r7, r6\n\t"
130822 #elif defined(__clang__)
130823         "muls	r6, r7\n\t"
130824 #else
130825         "mul	r6, r7\n\t"
130826 #endif
130827 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130828         "lsrs	r7, r6, #16\n\t"
130829 #else
130830         "lsr	r7, r6, #16\n\t"
130831 #endif
130832 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130833         "lsls	r6, r6, #16\n\t"
130834 #else
130835         "lsl	r6, r6, #16\n\t"
130836 #endif
130837 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130838         "adds	r3, r3, r6\n\t"
130839 #else
130840         "add	r3, r3, r6\n\t"
130841 #endif
130842 #ifdef WOLFSSL_KEIL
130843         "adcs	r4, r4, r7\n\t"
130844 #elif defined(__clang__)
130845         "adcs	r4, r7\n\t"
130846 #else
130847         "adc	r4, r7\n\t"
130848 #endif
130849 #ifdef WOLFSSL_KEIL
130850         "adcs	r5, r5, %[r]\n\t"
130851 #elif defined(__clang__)
130852         "adcs	r5, %[r]\n\t"
130853 #else
130854         "adc	r5, %[r]\n\t"
130855 #endif
130856 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130857         "lsrs	r6, %[a], #16\n\t"
130858 #else
130859         "lsr	r6, %[a], #16\n\t"
130860 #endif
130861 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130862         "lsrs	r7, %[b], #16\n\t"
130863 #else
130864         "lsr	r7, %[b], #16\n\t"
130865 #endif
130866 #ifdef WOLFSSL_KEIL
130867         "muls	r7, r6, r7\n\t"
130868 #elif defined(__clang__)
130869         "muls	r7, r6\n\t"
130870 #else
130871         "mul	r7, r6\n\t"
130872 #endif
130873 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130874         "adds	r4, r4, r7\n\t"
130875 #else
130876         "add	r4, r4, r7\n\t"
130877 #endif
130878 #ifdef WOLFSSL_KEIL
130879         "adcs	r5, r5, %[r]\n\t"
130880 #elif defined(__clang__)
130881         "adcs	r5, %[r]\n\t"
130882 #else
130883         "adc	r5, %[r]\n\t"
130884 #endif
130885         "uxth	r7, %[b]\n\t"
130886 #ifdef WOLFSSL_KEIL
130887         "muls	r6, r7, r6\n\t"
130888 #elif defined(__clang__)
130889         "muls	r6, r7\n\t"
130890 #else
130891         "mul	r6, r7\n\t"
130892 #endif
130893 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130894         "lsrs	r7, r6, #16\n\t"
130895 #else
130896         "lsr	r7, r6, #16\n\t"
130897 #endif
130898 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130899         "lsls	r6, r6, #16\n\t"
130900 #else
130901         "lsl	r6, r6, #16\n\t"
130902 #endif
130903 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130904         "adds	r3, r3, r6\n\t"
130905 #else
130906         "add	r3, r3, r6\n\t"
130907 #endif
130908 #ifdef WOLFSSL_KEIL
130909         "adcs	r4, r4, r7\n\t"
130910 #elif defined(__clang__)
130911         "adcs	r4, r7\n\t"
130912 #else
130913         "adc	r4, r7\n\t"
130914 #endif
130915 #ifdef WOLFSSL_KEIL
130916         "adcs	r5, r5, %[r]\n\t"
130917 #elif defined(__clang__)
130918         "adcs	r5, %[r]\n\t"
130919 #else
130920         "adc	r5, %[r]\n\t"
130921 #endif
130922         "str	r3, [sp, #48]\n\t"
130923         "#  A[0] * B[13]\n\t"
130924         "movs	r3, #0\n\t"
130925         "mov	%[a], r9\n\t"
130926         "mov	%[b], r10\n\t"
130927         "ldr	%[a], [%[a]]\n\t"
130928         "ldr	%[b], [%[b], #52]\n\t"
130929         "uxth	r6, %[a]\n\t"
130930         "uxth	r7, %[b]\n\t"
130931 #ifdef WOLFSSL_KEIL
130932         "muls	r7, r6, r7\n\t"
130933 #elif defined(__clang__)
130934         "muls	r7, r6\n\t"
130935 #else
130936         "mul	r7, r6\n\t"
130937 #endif
130938 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130939         "adds	r4, r4, r7\n\t"
130940 #else
130941         "add	r4, r4, r7\n\t"
130942 #endif
130943 #ifdef WOLFSSL_KEIL
130944         "adcs	r5, r5, %[r]\n\t"
130945 #elif defined(__clang__)
130946         "adcs	r5, %[r]\n\t"
130947 #else
130948         "adc	r5, %[r]\n\t"
130949 #endif
130950 #ifdef WOLFSSL_KEIL
130951         "adcs	r3, r3, %[r]\n\t"
130952 #elif defined(__clang__)
130953         "adcs	r3, %[r]\n\t"
130954 #else
130955         "adc	r3, %[r]\n\t"
130956 #endif
130957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130958         "lsrs	r7, %[b], #16\n\t"
130959 #else
130960         "lsr	r7, %[b], #16\n\t"
130961 #endif
130962 #ifdef WOLFSSL_KEIL
130963         "muls	r6, r7, r6\n\t"
130964 #elif defined(__clang__)
130965         "muls	r6, r7\n\t"
130966 #else
130967         "mul	r6, r7\n\t"
130968 #endif
130969 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130970         "lsrs	r7, r6, #16\n\t"
130971 #else
130972         "lsr	r7, r6, #16\n\t"
130973 #endif
130974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130975         "lsls	r6, r6, #16\n\t"
130976 #else
130977         "lsl	r6, r6, #16\n\t"
130978 #endif
130979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130980         "adds	r4, r4, r6\n\t"
130981 #else
130982         "add	r4, r4, r6\n\t"
130983 #endif
130984 #ifdef WOLFSSL_KEIL
130985         "adcs	r5, r5, r7\n\t"
130986 #elif defined(__clang__)
130987         "adcs	r5, r7\n\t"
130988 #else
130989         "adc	r5, r7\n\t"
130990 #endif
130991 #ifdef WOLFSSL_KEIL
130992         "adcs	r3, r3, %[r]\n\t"
130993 #elif defined(__clang__)
130994         "adcs	r3, %[r]\n\t"
130995 #else
130996         "adc	r3, %[r]\n\t"
130997 #endif
130998 #if defined(__clang__) || defined(WOLFSSL_KEIL)
130999         "lsrs	r6, %[a], #16\n\t"
131000 #else
131001         "lsr	r6, %[a], #16\n\t"
131002 #endif
131003 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131004         "lsrs	r7, %[b], #16\n\t"
131005 #else
131006         "lsr	r7, %[b], #16\n\t"
131007 #endif
131008 #ifdef WOLFSSL_KEIL
131009         "muls	r7, r6, r7\n\t"
131010 #elif defined(__clang__)
131011         "muls	r7, r6\n\t"
131012 #else
131013         "mul	r7, r6\n\t"
131014 #endif
131015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131016         "adds	r5, r5, r7\n\t"
131017 #else
131018         "add	r5, r5, r7\n\t"
131019 #endif
131020 #ifdef WOLFSSL_KEIL
131021         "adcs	r3, r3, %[r]\n\t"
131022 #elif defined(__clang__)
131023         "adcs	r3, %[r]\n\t"
131024 #else
131025         "adc	r3, %[r]\n\t"
131026 #endif
131027         "uxth	r7, %[b]\n\t"
131028 #ifdef WOLFSSL_KEIL
131029         "muls	r6, r7, r6\n\t"
131030 #elif defined(__clang__)
131031         "muls	r6, r7\n\t"
131032 #else
131033         "mul	r6, r7\n\t"
131034 #endif
131035 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131036         "lsrs	r7, r6, #16\n\t"
131037 #else
131038         "lsr	r7, r6, #16\n\t"
131039 #endif
131040 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131041         "lsls	r6, r6, #16\n\t"
131042 #else
131043         "lsl	r6, r6, #16\n\t"
131044 #endif
131045 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131046         "adds	r4, r4, r6\n\t"
131047 #else
131048         "add	r4, r4, r6\n\t"
131049 #endif
131050 #ifdef WOLFSSL_KEIL
131051         "adcs	r5, r5, r7\n\t"
131052 #elif defined(__clang__)
131053         "adcs	r5, r7\n\t"
131054 #else
131055         "adc	r5, r7\n\t"
131056 #endif
131057 #ifdef WOLFSSL_KEIL
131058         "adcs	r3, r3, %[r]\n\t"
131059 #elif defined(__clang__)
131060         "adcs	r3, %[r]\n\t"
131061 #else
131062         "adc	r3, %[r]\n\t"
131063 #endif
131064         "#  A[1] * B[12]\n\t"
131065         "mov	%[a], r9\n\t"
131066         "mov	%[b], r10\n\t"
131067         "ldr	%[a], [%[a], #4]\n\t"
131068         "ldr	%[b], [%[b], #48]\n\t"
131069         "uxth	r6, %[a]\n\t"
131070         "uxth	r7, %[b]\n\t"
131071 #ifdef WOLFSSL_KEIL
131072         "muls	r7, r6, r7\n\t"
131073 #elif defined(__clang__)
131074         "muls	r7, r6\n\t"
131075 #else
131076         "mul	r7, r6\n\t"
131077 #endif
131078 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131079         "adds	r4, r4, r7\n\t"
131080 #else
131081         "add	r4, r4, r7\n\t"
131082 #endif
131083 #ifdef WOLFSSL_KEIL
131084         "adcs	r5, r5, %[r]\n\t"
131085 #elif defined(__clang__)
131086         "adcs	r5, %[r]\n\t"
131087 #else
131088         "adc	r5, %[r]\n\t"
131089 #endif
131090 #ifdef WOLFSSL_KEIL
131091         "adcs	r3, r3, %[r]\n\t"
131092 #elif defined(__clang__)
131093         "adcs	r3, %[r]\n\t"
131094 #else
131095         "adc	r3, %[r]\n\t"
131096 #endif
131097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131098         "lsrs	r7, %[b], #16\n\t"
131099 #else
131100         "lsr	r7, %[b], #16\n\t"
131101 #endif
131102 #ifdef WOLFSSL_KEIL
131103         "muls	r6, r7, r6\n\t"
131104 #elif defined(__clang__)
131105         "muls	r6, r7\n\t"
131106 #else
131107         "mul	r6, r7\n\t"
131108 #endif
131109 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131110         "lsrs	r7, r6, #16\n\t"
131111 #else
131112         "lsr	r7, r6, #16\n\t"
131113 #endif
131114 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131115         "lsls	r6, r6, #16\n\t"
131116 #else
131117         "lsl	r6, r6, #16\n\t"
131118 #endif
131119 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131120         "adds	r4, r4, r6\n\t"
131121 #else
131122         "add	r4, r4, r6\n\t"
131123 #endif
131124 #ifdef WOLFSSL_KEIL
131125         "adcs	r5, r5, r7\n\t"
131126 #elif defined(__clang__)
131127         "adcs	r5, r7\n\t"
131128 #else
131129         "adc	r5, r7\n\t"
131130 #endif
131131 #ifdef WOLFSSL_KEIL
131132         "adcs	r3, r3, %[r]\n\t"
131133 #elif defined(__clang__)
131134         "adcs	r3, %[r]\n\t"
131135 #else
131136         "adc	r3, %[r]\n\t"
131137 #endif
131138 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131139         "lsrs	r6, %[a], #16\n\t"
131140 #else
131141         "lsr	r6, %[a], #16\n\t"
131142 #endif
131143 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131144         "lsrs	r7, %[b], #16\n\t"
131145 #else
131146         "lsr	r7, %[b], #16\n\t"
131147 #endif
131148 #ifdef WOLFSSL_KEIL
131149         "muls	r7, r6, r7\n\t"
131150 #elif defined(__clang__)
131151         "muls	r7, r6\n\t"
131152 #else
131153         "mul	r7, r6\n\t"
131154 #endif
131155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131156         "adds	r5, r5, r7\n\t"
131157 #else
131158         "add	r5, r5, r7\n\t"
131159 #endif
131160 #ifdef WOLFSSL_KEIL
131161         "adcs	r3, r3, %[r]\n\t"
131162 #elif defined(__clang__)
131163         "adcs	r3, %[r]\n\t"
131164 #else
131165         "adc	r3, %[r]\n\t"
131166 #endif
131167         "uxth	r7, %[b]\n\t"
131168 #ifdef WOLFSSL_KEIL
131169         "muls	r6, r7, r6\n\t"
131170 #elif defined(__clang__)
131171         "muls	r6, r7\n\t"
131172 #else
131173         "mul	r6, r7\n\t"
131174 #endif
131175 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131176         "lsrs	r7, r6, #16\n\t"
131177 #else
131178         "lsr	r7, r6, #16\n\t"
131179 #endif
131180 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131181         "lsls	r6, r6, #16\n\t"
131182 #else
131183         "lsl	r6, r6, #16\n\t"
131184 #endif
131185 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131186         "adds	r4, r4, r6\n\t"
131187 #else
131188         "add	r4, r4, r6\n\t"
131189 #endif
131190 #ifdef WOLFSSL_KEIL
131191         "adcs	r5, r5, r7\n\t"
131192 #elif defined(__clang__)
131193         "adcs	r5, r7\n\t"
131194 #else
131195         "adc	r5, r7\n\t"
131196 #endif
131197 #ifdef WOLFSSL_KEIL
131198         "adcs	r3, r3, %[r]\n\t"
131199 #elif defined(__clang__)
131200         "adcs	r3, %[r]\n\t"
131201 #else
131202         "adc	r3, %[r]\n\t"
131203 #endif
131204         "#  A[2] * B[11]\n\t"
131205         "mov	%[a], r9\n\t"
131206         "mov	%[b], r10\n\t"
131207         "ldr	%[a], [%[a], #8]\n\t"
131208         "ldr	%[b], [%[b], #44]\n\t"
131209         "uxth	r6, %[a]\n\t"
131210         "uxth	r7, %[b]\n\t"
131211 #ifdef WOLFSSL_KEIL
131212         "muls	r7, r6, r7\n\t"
131213 #elif defined(__clang__)
131214         "muls	r7, r6\n\t"
131215 #else
131216         "mul	r7, r6\n\t"
131217 #endif
131218 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131219         "adds	r4, r4, r7\n\t"
131220 #else
131221         "add	r4, r4, r7\n\t"
131222 #endif
131223 #ifdef WOLFSSL_KEIL
131224         "adcs	r5, r5, %[r]\n\t"
131225 #elif defined(__clang__)
131226         "adcs	r5, %[r]\n\t"
131227 #else
131228         "adc	r5, %[r]\n\t"
131229 #endif
131230 #ifdef WOLFSSL_KEIL
131231         "adcs	r3, r3, %[r]\n\t"
131232 #elif defined(__clang__)
131233         "adcs	r3, %[r]\n\t"
131234 #else
131235         "adc	r3, %[r]\n\t"
131236 #endif
131237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131238         "lsrs	r7, %[b], #16\n\t"
131239 #else
131240         "lsr	r7, %[b], #16\n\t"
131241 #endif
131242 #ifdef WOLFSSL_KEIL
131243         "muls	r6, r7, r6\n\t"
131244 #elif defined(__clang__)
131245         "muls	r6, r7\n\t"
131246 #else
131247         "mul	r6, r7\n\t"
131248 #endif
131249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131250         "lsrs	r7, r6, #16\n\t"
131251 #else
131252         "lsr	r7, r6, #16\n\t"
131253 #endif
131254 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131255         "lsls	r6, r6, #16\n\t"
131256 #else
131257         "lsl	r6, r6, #16\n\t"
131258 #endif
131259 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131260         "adds	r4, r4, r6\n\t"
131261 #else
131262         "add	r4, r4, r6\n\t"
131263 #endif
131264 #ifdef WOLFSSL_KEIL
131265         "adcs	r5, r5, r7\n\t"
131266 #elif defined(__clang__)
131267         "adcs	r5, r7\n\t"
131268 #else
131269         "adc	r5, r7\n\t"
131270 #endif
131271 #ifdef WOLFSSL_KEIL
131272         "adcs	r3, r3, %[r]\n\t"
131273 #elif defined(__clang__)
131274         "adcs	r3, %[r]\n\t"
131275 #else
131276         "adc	r3, %[r]\n\t"
131277 #endif
131278 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131279         "lsrs	r6, %[a], #16\n\t"
131280 #else
131281         "lsr	r6, %[a], #16\n\t"
131282 #endif
131283 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131284         "lsrs	r7, %[b], #16\n\t"
131285 #else
131286         "lsr	r7, %[b], #16\n\t"
131287 #endif
131288 #ifdef WOLFSSL_KEIL
131289         "muls	r7, r6, r7\n\t"
131290 #elif defined(__clang__)
131291         "muls	r7, r6\n\t"
131292 #else
131293         "mul	r7, r6\n\t"
131294 #endif
131295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131296         "adds	r5, r5, r7\n\t"
131297 #else
131298         "add	r5, r5, r7\n\t"
131299 #endif
131300 #ifdef WOLFSSL_KEIL
131301         "adcs	r3, r3, %[r]\n\t"
131302 #elif defined(__clang__)
131303         "adcs	r3, %[r]\n\t"
131304 #else
131305         "adc	r3, %[r]\n\t"
131306 #endif
131307         "uxth	r7, %[b]\n\t"
131308 #ifdef WOLFSSL_KEIL
131309         "muls	r6, r7, r6\n\t"
131310 #elif defined(__clang__)
131311         "muls	r6, r7\n\t"
131312 #else
131313         "mul	r6, r7\n\t"
131314 #endif
131315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131316         "lsrs	r7, r6, #16\n\t"
131317 #else
131318         "lsr	r7, r6, #16\n\t"
131319 #endif
131320 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131321         "lsls	r6, r6, #16\n\t"
131322 #else
131323         "lsl	r6, r6, #16\n\t"
131324 #endif
131325 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131326         "adds	r4, r4, r6\n\t"
131327 #else
131328         "add	r4, r4, r6\n\t"
131329 #endif
131330 #ifdef WOLFSSL_KEIL
131331         "adcs	r5, r5, r7\n\t"
131332 #elif defined(__clang__)
131333         "adcs	r5, r7\n\t"
131334 #else
131335         "adc	r5, r7\n\t"
131336 #endif
131337 #ifdef WOLFSSL_KEIL
131338         "adcs	r3, r3, %[r]\n\t"
131339 #elif defined(__clang__)
131340         "adcs	r3, %[r]\n\t"
131341 #else
131342         "adc	r3, %[r]\n\t"
131343 #endif
131344         "#  A[3] * B[10]\n\t"
131345         "mov	%[a], r9\n\t"
131346         "mov	%[b], r10\n\t"
131347         "ldr	%[a], [%[a], #12]\n\t"
131348         "ldr	%[b], [%[b], #40]\n\t"
131349         "uxth	r6, %[a]\n\t"
131350         "uxth	r7, %[b]\n\t"
131351 #ifdef WOLFSSL_KEIL
131352         "muls	r7, r6, r7\n\t"
131353 #elif defined(__clang__)
131354         "muls	r7, r6\n\t"
131355 #else
131356         "mul	r7, r6\n\t"
131357 #endif
131358 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131359         "adds	r4, r4, r7\n\t"
131360 #else
131361         "add	r4, r4, r7\n\t"
131362 #endif
131363 #ifdef WOLFSSL_KEIL
131364         "adcs	r5, r5, %[r]\n\t"
131365 #elif defined(__clang__)
131366         "adcs	r5, %[r]\n\t"
131367 #else
131368         "adc	r5, %[r]\n\t"
131369 #endif
131370 #ifdef WOLFSSL_KEIL
131371         "adcs	r3, r3, %[r]\n\t"
131372 #elif defined(__clang__)
131373         "adcs	r3, %[r]\n\t"
131374 #else
131375         "adc	r3, %[r]\n\t"
131376 #endif
131377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131378         "lsrs	r7, %[b], #16\n\t"
131379 #else
131380         "lsr	r7, %[b], #16\n\t"
131381 #endif
131382 #ifdef WOLFSSL_KEIL
131383         "muls	r6, r7, r6\n\t"
131384 #elif defined(__clang__)
131385         "muls	r6, r7\n\t"
131386 #else
131387         "mul	r6, r7\n\t"
131388 #endif
131389 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131390         "lsrs	r7, r6, #16\n\t"
131391 #else
131392         "lsr	r7, r6, #16\n\t"
131393 #endif
131394 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131395         "lsls	r6, r6, #16\n\t"
131396 #else
131397         "lsl	r6, r6, #16\n\t"
131398 #endif
131399 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131400         "adds	r4, r4, r6\n\t"
131401 #else
131402         "add	r4, r4, r6\n\t"
131403 #endif
131404 #ifdef WOLFSSL_KEIL
131405         "adcs	r5, r5, r7\n\t"
131406 #elif defined(__clang__)
131407         "adcs	r5, r7\n\t"
131408 #else
131409         "adc	r5, r7\n\t"
131410 #endif
131411 #ifdef WOLFSSL_KEIL
131412         "adcs	r3, r3, %[r]\n\t"
131413 #elif defined(__clang__)
131414         "adcs	r3, %[r]\n\t"
131415 #else
131416         "adc	r3, %[r]\n\t"
131417 #endif
131418 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131419         "lsrs	r6, %[a], #16\n\t"
131420 #else
131421         "lsr	r6, %[a], #16\n\t"
131422 #endif
131423 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131424         "lsrs	r7, %[b], #16\n\t"
131425 #else
131426         "lsr	r7, %[b], #16\n\t"
131427 #endif
131428 #ifdef WOLFSSL_KEIL
131429         "muls	r7, r6, r7\n\t"
131430 #elif defined(__clang__)
131431         "muls	r7, r6\n\t"
131432 #else
131433         "mul	r7, r6\n\t"
131434 #endif
131435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131436         "adds	r5, r5, r7\n\t"
131437 #else
131438         "add	r5, r5, r7\n\t"
131439 #endif
131440 #ifdef WOLFSSL_KEIL
131441         "adcs	r3, r3, %[r]\n\t"
131442 #elif defined(__clang__)
131443         "adcs	r3, %[r]\n\t"
131444 #else
131445         "adc	r3, %[r]\n\t"
131446 #endif
131447         "uxth	r7, %[b]\n\t"
131448 #ifdef WOLFSSL_KEIL
131449         "muls	r6, r7, r6\n\t"
131450 #elif defined(__clang__)
131451         "muls	r6, r7\n\t"
131452 #else
131453         "mul	r6, r7\n\t"
131454 #endif
131455 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131456         "lsrs	r7, r6, #16\n\t"
131457 #else
131458         "lsr	r7, r6, #16\n\t"
131459 #endif
131460 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131461         "lsls	r6, r6, #16\n\t"
131462 #else
131463         "lsl	r6, r6, #16\n\t"
131464 #endif
131465 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131466         "adds	r4, r4, r6\n\t"
131467 #else
131468         "add	r4, r4, r6\n\t"
131469 #endif
131470 #ifdef WOLFSSL_KEIL
131471         "adcs	r5, r5, r7\n\t"
131472 #elif defined(__clang__)
131473         "adcs	r5, r7\n\t"
131474 #else
131475         "adc	r5, r7\n\t"
131476 #endif
131477 #ifdef WOLFSSL_KEIL
131478         "adcs	r3, r3, %[r]\n\t"
131479 #elif defined(__clang__)
131480         "adcs	r3, %[r]\n\t"
131481 #else
131482         "adc	r3, %[r]\n\t"
131483 #endif
131484         "#  A[4] * B[9]\n\t"
131485         "mov	%[a], r9\n\t"
131486         "mov	%[b], r10\n\t"
131487         "ldr	%[a], [%[a], #16]\n\t"
131488         "ldr	%[b], [%[b], #36]\n\t"
131489         "uxth	r6, %[a]\n\t"
131490         "uxth	r7, %[b]\n\t"
131491 #ifdef WOLFSSL_KEIL
131492         "muls	r7, r6, r7\n\t"
131493 #elif defined(__clang__)
131494         "muls	r7, r6\n\t"
131495 #else
131496         "mul	r7, r6\n\t"
131497 #endif
131498 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131499         "adds	r4, r4, r7\n\t"
131500 #else
131501         "add	r4, r4, r7\n\t"
131502 #endif
131503 #ifdef WOLFSSL_KEIL
131504         "adcs	r5, r5, %[r]\n\t"
131505 #elif defined(__clang__)
131506         "adcs	r5, %[r]\n\t"
131507 #else
131508         "adc	r5, %[r]\n\t"
131509 #endif
131510 #ifdef WOLFSSL_KEIL
131511         "adcs	r3, r3, %[r]\n\t"
131512 #elif defined(__clang__)
131513         "adcs	r3, %[r]\n\t"
131514 #else
131515         "adc	r3, %[r]\n\t"
131516 #endif
131517 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131518         "lsrs	r7, %[b], #16\n\t"
131519 #else
131520         "lsr	r7, %[b], #16\n\t"
131521 #endif
131522 #ifdef WOLFSSL_KEIL
131523         "muls	r6, r7, r6\n\t"
131524 #elif defined(__clang__)
131525         "muls	r6, r7\n\t"
131526 #else
131527         "mul	r6, r7\n\t"
131528 #endif
131529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131530         "lsrs	r7, r6, #16\n\t"
131531 #else
131532         "lsr	r7, r6, #16\n\t"
131533 #endif
131534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131535         "lsls	r6, r6, #16\n\t"
131536 #else
131537         "lsl	r6, r6, #16\n\t"
131538 #endif
131539 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131540         "adds	r4, r4, r6\n\t"
131541 #else
131542         "add	r4, r4, r6\n\t"
131543 #endif
131544 #ifdef WOLFSSL_KEIL
131545         "adcs	r5, r5, r7\n\t"
131546 #elif defined(__clang__)
131547         "adcs	r5, r7\n\t"
131548 #else
131549         "adc	r5, r7\n\t"
131550 #endif
131551 #ifdef WOLFSSL_KEIL
131552         "adcs	r3, r3, %[r]\n\t"
131553 #elif defined(__clang__)
131554         "adcs	r3, %[r]\n\t"
131555 #else
131556         "adc	r3, %[r]\n\t"
131557 #endif
131558 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131559         "lsrs	r6, %[a], #16\n\t"
131560 #else
131561         "lsr	r6, %[a], #16\n\t"
131562 #endif
131563 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131564         "lsrs	r7, %[b], #16\n\t"
131565 #else
131566         "lsr	r7, %[b], #16\n\t"
131567 #endif
131568 #ifdef WOLFSSL_KEIL
131569         "muls	r7, r6, r7\n\t"
131570 #elif defined(__clang__)
131571         "muls	r7, r6\n\t"
131572 #else
131573         "mul	r7, r6\n\t"
131574 #endif
131575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131576         "adds	r5, r5, r7\n\t"
131577 #else
131578         "add	r5, r5, r7\n\t"
131579 #endif
131580 #ifdef WOLFSSL_KEIL
131581         "adcs	r3, r3, %[r]\n\t"
131582 #elif defined(__clang__)
131583         "adcs	r3, %[r]\n\t"
131584 #else
131585         "adc	r3, %[r]\n\t"
131586 #endif
131587         "uxth	r7, %[b]\n\t"
131588 #ifdef WOLFSSL_KEIL
131589         "muls	r6, r7, r6\n\t"
131590 #elif defined(__clang__)
131591         "muls	r6, r7\n\t"
131592 #else
131593         "mul	r6, r7\n\t"
131594 #endif
131595 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131596         "lsrs	r7, r6, #16\n\t"
131597 #else
131598         "lsr	r7, r6, #16\n\t"
131599 #endif
131600 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131601         "lsls	r6, r6, #16\n\t"
131602 #else
131603         "lsl	r6, r6, #16\n\t"
131604 #endif
131605 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131606         "adds	r4, r4, r6\n\t"
131607 #else
131608         "add	r4, r4, r6\n\t"
131609 #endif
131610 #ifdef WOLFSSL_KEIL
131611         "adcs	r5, r5, r7\n\t"
131612 #elif defined(__clang__)
131613         "adcs	r5, r7\n\t"
131614 #else
131615         "adc	r5, r7\n\t"
131616 #endif
131617 #ifdef WOLFSSL_KEIL
131618         "adcs	r3, r3, %[r]\n\t"
131619 #elif defined(__clang__)
131620         "adcs	r3, %[r]\n\t"
131621 #else
131622         "adc	r3, %[r]\n\t"
131623 #endif
131624         "#  A[5] * B[8]\n\t"
131625         "mov	%[a], r9\n\t"
131626         "mov	%[b], r10\n\t"
131627         "ldr	%[a], [%[a], #20]\n\t"
131628         "ldr	%[b], [%[b], #32]\n\t"
131629         "uxth	r6, %[a]\n\t"
131630         "uxth	r7, %[b]\n\t"
131631 #ifdef WOLFSSL_KEIL
131632         "muls	r7, r6, r7\n\t"
131633 #elif defined(__clang__)
131634         "muls	r7, r6\n\t"
131635 #else
131636         "mul	r7, r6\n\t"
131637 #endif
131638 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131639         "adds	r4, r4, r7\n\t"
131640 #else
131641         "add	r4, r4, r7\n\t"
131642 #endif
131643 #ifdef WOLFSSL_KEIL
131644         "adcs	r5, r5, %[r]\n\t"
131645 #elif defined(__clang__)
131646         "adcs	r5, %[r]\n\t"
131647 #else
131648         "adc	r5, %[r]\n\t"
131649 #endif
131650 #ifdef WOLFSSL_KEIL
131651         "adcs	r3, r3, %[r]\n\t"
131652 #elif defined(__clang__)
131653         "adcs	r3, %[r]\n\t"
131654 #else
131655         "adc	r3, %[r]\n\t"
131656 #endif
131657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131658         "lsrs	r7, %[b], #16\n\t"
131659 #else
131660         "lsr	r7, %[b], #16\n\t"
131661 #endif
131662 #ifdef WOLFSSL_KEIL
131663         "muls	r6, r7, r6\n\t"
131664 #elif defined(__clang__)
131665         "muls	r6, r7\n\t"
131666 #else
131667         "mul	r6, r7\n\t"
131668 #endif
131669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131670         "lsrs	r7, r6, #16\n\t"
131671 #else
131672         "lsr	r7, r6, #16\n\t"
131673 #endif
131674 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131675         "lsls	r6, r6, #16\n\t"
131676 #else
131677         "lsl	r6, r6, #16\n\t"
131678 #endif
131679 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131680         "adds	r4, r4, r6\n\t"
131681 #else
131682         "add	r4, r4, r6\n\t"
131683 #endif
131684 #ifdef WOLFSSL_KEIL
131685         "adcs	r5, r5, r7\n\t"
131686 #elif defined(__clang__)
131687         "adcs	r5, r7\n\t"
131688 #else
131689         "adc	r5, r7\n\t"
131690 #endif
131691 #ifdef WOLFSSL_KEIL
131692         "adcs	r3, r3, %[r]\n\t"
131693 #elif defined(__clang__)
131694         "adcs	r3, %[r]\n\t"
131695 #else
131696         "adc	r3, %[r]\n\t"
131697 #endif
131698 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131699         "lsrs	r6, %[a], #16\n\t"
131700 #else
131701         "lsr	r6, %[a], #16\n\t"
131702 #endif
131703 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131704         "lsrs	r7, %[b], #16\n\t"
131705 #else
131706         "lsr	r7, %[b], #16\n\t"
131707 #endif
131708 #ifdef WOLFSSL_KEIL
131709         "muls	r7, r6, r7\n\t"
131710 #elif defined(__clang__)
131711         "muls	r7, r6\n\t"
131712 #else
131713         "mul	r7, r6\n\t"
131714 #endif
131715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131716         "adds	r5, r5, r7\n\t"
131717 #else
131718         "add	r5, r5, r7\n\t"
131719 #endif
131720 #ifdef WOLFSSL_KEIL
131721         "adcs	r3, r3, %[r]\n\t"
131722 #elif defined(__clang__)
131723         "adcs	r3, %[r]\n\t"
131724 #else
131725         "adc	r3, %[r]\n\t"
131726 #endif
131727         "uxth	r7, %[b]\n\t"
131728 #ifdef WOLFSSL_KEIL
131729         "muls	r6, r7, r6\n\t"
131730 #elif defined(__clang__)
131731         "muls	r6, r7\n\t"
131732 #else
131733         "mul	r6, r7\n\t"
131734 #endif
131735 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131736         "lsrs	r7, r6, #16\n\t"
131737 #else
131738         "lsr	r7, r6, #16\n\t"
131739 #endif
131740 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131741         "lsls	r6, r6, #16\n\t"
131742 #else
131743         "lsl	r6, r6, #16\n\t"
131744 #endif
131745 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131746         "adds	r4, r4, r6\n\t"
131747 #else
131748         "add	r4, r4, r6\n\t"
131749 #endif
131750 #ifdef WOLFSSL_KEIL
131751         "adcs	r5, r5, r7\n\t"
131752 #elif defined(__clang__)
131753         "adcs	r5, r7\n\t"
131754 #else
131755         "adc	r5, r7\n\t"
131756 #endif
131757 #ifdef WOLFSSL_KEIL
131758         "adcs	r3, r3, %[r]\n\t"
131759 #elif defined(__clang__)
131760         "adcs	r3, %[r]\n\t"
131761 #else
131762         "adc	r3, %[r]\n\t"
131763 #endif
131764         "#  A[6] * B[7]\n\t"
131765         "mov	%[a], r9\n\t"
131766         "mov	%[b], r10\n\t"
131767         "ldr	%[a], [%[a], #24]\n\t"
131768         "ldr	%[b], [%[b], #28]\n\t"
131769         "uxth	r6, %[a]\n\t"
131770         "uxth	r7, %[b]\n\t"
131771 #ifdef WOLFSSL_KEIL
131772         "muls	r7, r6, r7\n\t"
131773 #elif defined(__clang__)
131774         "muls	r7, r6\n\t"
131775 #else
131776         "mul	r7, r6\n\t"
131777 #endif
131778 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131779         "adds	r4, r4, r7\n\t"
131780 #else
131781         "add	r4, r4, r7\n\t"
131782 #endif
131783 #ifdef WOLFSSL_KEIL
131784         "adcs	r5, r5, %[r]\n\t"
131785 #elif defined(__clang__)
131786         "adcs	r5, %[r]\n\t"
131787 #else
131788         "adc	r5, %[r]\n\t"
131789 #endif
131790 #ifdef WOLFSSL_KEIL
131791         "adcs	r3, r3, %[r]\n\t"
131792 #elif defined(__clang__)
131793         "adcs	r3, %[r]\n\t"
131794 #else
131795         "adc	r3, %[r]\n\t"
131796 #endif
131797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131798         "lsrs	r7, %[b], #16\n\t"
131799 #else
131800         "lsr	r7, %[b], #16\n\t"
131801 #endif
131802 #ifdef WOLFSSL_KEIL
131803         "muls	r6, r7, r6\n\t"
131804 #elif defined(__clang__)
131805         "muls	r6, r7\n\t"
131806 #else
131807         "mul	r6, r7\n\t"
131808 #endif
131809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131810         "lsrs	r7, r6, #16\n\t"
131811 #else
131812         "lsr	r7, r6, #16\n\t"
131813 #endif
131814 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131815         "lsls	r6, r6, #16\n\t"
131816 #else
131817         "lsl	r6, r6, #16\n\t"
131818 #endif
131819 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131820         "adds	r4, r4, r6\n\t"
131821 #else
131822         "add	r4, r4, r6\n\t"
131823 #endif
131824 #ifdef WOLFSSL_KEIL
131825         "adcs	r5, r5, r7\n\t"
131826 #elif defined(__clang__)
131827         "adcs	r5, r7\n\t"
131828 #else
131829         "adc	r5, r7\n\t"
131830 #endif
131831 #ifdef WOLFSSL_KEIL
131832         "adcs	r3, r3, %[r]\n\t"
131833 #elif defined(__clang__)
131834         "adcs	r3, %[r]\n\t"
131835 #else
131836         "adc	r3, %[r]\n\t"
131837 #endif
131838 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131839         "lsrs	r6, %[a], #16\n\t"
131840 #else
131841         "lsr	r6, %[a], #16\n\t"
131842 #endif
131843 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131844         "lsrs	r7, %[b], #16\n\t"
131845 #else
131846         "lsr	r7, %[b], #16\n\t"
131847 #endif
131848 #ifdef WOLFSSL_KEIL
131849         "muls	r7, r6, r7\n\t"
131850 #elif defined(__clang__)
131851         "muls	r7, r6\n\t"
131852 #else
131853         "mul	r7, r6\n\t"
131854 #endif
131855 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131856         "adds	r5, r5, r7\n\t"
131857 #else
131858         "add	r5, r5, r7\n\t"
131859 #endif
131860 #ifdef WOLFSSL_KEIL
131861         "adcs	r3, r3, %[r]\n\t"
131862 #elif defined(__clang__)
131863         "adcs	r3, %[r]\n\t"
131864 #else
131865         "adc	r3, %[r]\n\t"
131866 #endif
131867         "uxth	r7, %[b]\n\t"
131868 #ifdef WOLFSSL_KEIL
131869         "muls	r6, r7, r6\n\t"
131870 #elif defined(__clang__)
131871         "muls	r6, r7\n\t"
131872 #else
131873         "mul	r6, r7\n\t"
131874 #endif
131875 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131876         "lsrs	r7, r6, #16\n\t"
131877 #else
131878         "lsr	r7, r6, #16\n\t"
131879 #endif
131880 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131881         "lsls	r6, r6, #16\n\t"
131882 #else
131883         "lsl	r6, r6, #16\n\t"
131884 #endif
131885 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131886         "adds	r4, r4, r6\n\t"
131887 #else
131888         "add	r4, r4, r6\n\t"
131889 #endif
131890 #ifdef WOLFSSL_KEIL
131891         "adcs	r5, r5, r7\n\t"
131892 #elif defined(__clang__)
131893         "adcs	r5, r7\n\t"
131894 #else
131895         "adc	r5, r7\n\t"
131896 #endif
131897 #ifdef WOLFSSL_KEIL
131898         "adcs	r3, r3, %[r]\n\t"
131899 #elif defined(__clang__)
131900         "adcs	r3, %[r]\n\t"
131901 #else
131902         "adc	r3, %[r]\n\t"
131903 #endif
131904         "#  A[7] * B[6]\n\t"
131905         "mov	%[a], r9\n\t"
131906         "mov	%[b], r10\n\t"
131907         "ldr	%[a], [%[a], #28]\n\t"
131908         "ldr	%[b], [%[b], #24]\n\t"
131909         "uxth	r6, %[a]\n\t"
131910         "uxth	r7, %[b]\n\t"
131911 #ifdef WOLFSSL_KEIL
131912         "muls	r7, r6, r7\n\t"
131913 #elif defined(__clang__)
131914         "muls	r7, r6\n\t"
131915 #else
131916         "mul	r7, r6\n\t"
131917 #endif
131918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131919         "adds	r4, r4, r7\n\t"
131920 #else
131921         "add	r4, r4, r7\n\t"
131922 #endif
131923 #ifdef WOLFSSL_KEIL
131924         "adcs	r5, r5, %[r]\n\t"
131925 #elif defined(__clang__)
131926         "adcs	r5, %[r]\n\t"
131927 #else
131928         "adc	r5, %[r]\n\t"
131929 #endif
131930 #ifdef WOLFSSL_KEIL
131931         "adcs	r3, r3, %[r]\n\t"
131932 #elif defined(__clang__)
131933         "adcs	r3, %[r]\n\t"
131934 #else
131935         "adc	r3, %[r]\n\t"
131936 #endif
131937 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131938         "lsrs	r7, %[b], #16\n\t"
131939 #else
131940         "lsr	r7, %[b], #16\n\t"
131941 #endif
131942 #ifdef WOLFSSL_KEIL
131943         "muls	r6, r7, r6\n\t"
131944 #elif defined(__clang__)
131945         "muls	r6, r7\n\t"
131946 #else
131947         "mul	r6, r7\n\t"
131948 #endif
131949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131950         "lsrs	r7, r6, #16\n\t"
131951 #else
131952         "lsr	r7, r6, #16\n\t"
131953 #endif
131954 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131955         "lsls	r6, r6, #16\n\t"
131956 #else
131957         "lsl	r6, r6, #16\n\t"
131958 #endif
131959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131960         "adds	r4, r4, r6\n\t"
131961 #else
131962         "add	r4, r4, r6\n\t"
131963 #endif
131964 #ifdef WOLFSSL_KEIL
131965         "adcs	r5, r5, r7\n\t"
131966 #elif defined(__clang__)
131967         "adcs	r5, r7\n\t"
131968 #else
131969         "adc	r5, r7\n\t"
131970 #endif
131971 #ifdef WOLFSSL_KEIL
131972         "adcs	r3, r3, %[r]\n\t"
131973 #elif defined(__clang__)
131974         "adcs	r3, %[r]\n\t"
131975 #else
131976         "adc	r3, %[r]\n\t"
131977 #endif
131978 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131979         "lsrs	r6, %[a], #16\n\t"
131980 #else
131981         "lsr	r6, %[a], #16\n\t"
131982 #endif
131983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131984         "lsrs	r7, %[b], #16\n\t"
131985 #else
131986         "lsr	r7, %[b], #16\n\t"
131987 #endif
131988 #ifdef WOLFSSL_KEIL
131989         "muls	r7, r6, r7\n\t"
131990 #elif defined(__clang__)
131991         "muls	r7, r6\n\t"
131992 #else
131993         "mul	r7, r6\n\t"
131994 #endif
131995 #if defined(__clang__) || defined(WOLFSSL_KEIL)
131996         "adds	r5, r5, r7\n\t"
131997 #else
131998         "add	r5, r5, r7\n\t"
131999 #endif
132000 #ifdef WOLFSSL_KEIL
132001         "adcs	r3, r3, %[r]\n\t"
132002 #elif defined(__clang__)
132003         "adcs	r3, %[r]\n\t"
132004 #else
132005         "adc	r3, %[r]\n\t"
132006 #endif
132007         "uxth	r7, %[b]\n\t"
132008 #ifdef WOLFSSL_KEIL
132009         "muls	r6, r7, r6\n\t"
132010 #elif defined(__clang__)
132011         "muls	r6, r7\n\t"
132012 #else
132013         "mul	r6, r7\n\t"
132014 #endif
132015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132016         "lsrs	r7, r6, #16\n\t"
132017 #else
132018         "lsr	r7, r6, #16\n\t"
132019 #endif
132020 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132021         "lsls	r6, r6, #16\n\t"
132022 #else
132023         "lsl	r6, r6, #16\n\t"
132024 #endif
132025 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132026         "adds	r4, r4, r6\n\t"
132027 #else
132028         "add	r4, r4, r6\n\t"
132029 #endif
132030 #ifdef WOLFSSL_KEIL
132031         "adcs	r5, r5, r7\n\t"
132032 #elif defined(__clang__)
132033         "adcs	r5, r7\n\t"
132034 #else
132035         "adc	r5, r7\n\t"
132036 #endif
132037 #ifdef WOLFSSL_KEIL
132038         "adcs	r3, r3, %[r]\n\t"
132039 #elif defined(__clang__)
132040         "adcs	r3, %[r]\n\t"
132041 #else
132042         "adc	r3, %[r]\n\t"
132043 #endif
132044         "#  A[8] * B[5]\n\t"
132045         "mov	%[a], r9\n\t"
132046         "mov	%[b], r10\n\t"
132047         "ldr	%[a], [%[a], #32]\n\t"
132048         "ldr	%[b], [%[b], #20]\n\t"
132049         "uxth	r6, %[a]\n\t"
132050         "uxth	r7, %[b]\n\t"
132051 #ifdef WOLFSSL_KEIL
132052         "muls	r7, r6, r7\n\t"
132053 #elif defined(__clang__)
132054         "muls	r7, r6\n\t"
132055 #else
132056         "mul	r7, r6\n\t"
132057 #endif
132058 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132059         "adds	r4, r4, r7\n\t"
132060 #else
132061         "add	r4, r4, r7\n\t"
132062 #endif
132063 #ifdef WOLFSSL_KEIL
132064         "adcs	r5, r5, %[r]\n\t"
132065 #elif defined(__clang__)
132066         "adcs	r5, %[r]\n\t"
132067 #else
132068         "adc	r5, %[r]\n\t"
132069 #endif
132070 #ifdef WOLFSSL_KEIL
132071         "adcs	r3, r3, %[r]\n\t"
132072 #elif defined(__clang__)
132073         "adcs	r3, %[r]\n\t"
132074 #else
132075         "adc	r3, %[r]\n\t"
132076 #endif
132077 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132078         "lsrs	r7, %[b], #16\n\t"
132079 #else
132080         "lsr	r7, %[b], #16\n\t"
132081 #endif
132082 #ifdef WOLFSSL_KEIL
132083         "muls	r6, r7, r6\n\t"
132084 #elif defined(__clang__)
132085         "muls	r6, r7\n\t"
132086 #else
132087         "mul	r6, r7\n\t"
132088 #endif
132089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132090         "lsrs	r7, r6, #16\n\t"
132091 #else
132092         "lsr	r7, r6, #16\n\t"
132093 #endif
132094 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132095         "lsls	r6, r6, #16\n\t"
132096 #else
132097         "lsl	r6, r6, #16\n\t"
132098 #endif
132099 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132100         "adds	r4, r4, r6\n\t"
132101 #else
132102         "add	r4, r4, r6\n\t"
132103 #endif
132104 #ifdef WOLFSSL_KEIL
132105         "adcs	r5, r5, r7\n\t"
132106 #elif defined(__clang__)
132107         "adcs	r5, r7\n\t"
132108 #else
132109         "adc	r5, r7\n\t"
132110 #endif
132111 #ifdef WOLFSSL_KEIL
132112         "adcs	r3, r3, %[r]\n\t"
132113 #elif defined(__clang__)
132114         "adcs	r3, %[r]\n\t"
132115 #else
132116         "adc	r3, %[r]\n\t"
132117 #endif
132118 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132119         "lsrs	r6, %[a], #16\n\t"
132120 #else
132121         "lsr	r6, %[a], #16\n\t"
132122 #endif
132123 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132124         "lsrs	r7, %[b], #16\n\t"
132125 #else
132126         "lsr	r7, %[b], #16\n\t"
132127 #endif
132128 #ifdef WOLFSSL_KEIL
132129         "muls	r7, r6, r7\n\t"
132130 #elif defined(__clang__)
132131         "muls	r7, r6\n\t"
132132 #else
132133         "mul	r7, r6\n\t"
132134 #endif
132135 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132136         "adds	r5, r5, r7\n\t"
132137 #else
132138         "add	r5, r5, r7\n\t"
132139 #endif
132140 #ifdef WOLFSSL_KEIL
132141         "adcs	r3, r3, %[r]\n\t"
132142 #elif defined(__clang__)
132143         "adcs	r3, %[r]\n\t"
132144 #else
132145         "adc	r3, %[r]\n\t"
132146 #endif
132147         "uxth	r7, %[b]\n\t"
132148 #ifdef WOLFSSL_KEIL
132149         "muls	r6, r7, r6\n\t"
132150 #elif defined(__clang__)
132151         "muls	r6, r7\n\t"
132152 #else
132153         "mul	r6, r7\n\t"
132154 #endif
132155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132156         "lsrs	r7, r6, #16\n\t"
132157 #else
132158         "lsr	r7, r6, #16\n\t"
132159 #endif
132160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132161         "lsls	r6, r6, #16\n\t"
132162 #else
132163         "lsl	r6, r6, #16\n\t"
132164 #endif
132165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132166         "adds	r4, r4, r6\n\t"
132167 #else
132168         "add	r4, r4, r6\n\t"
132169 #endif
132170 #ifdef WOLFSSL_KEIL
132171         "adcs	r5, r5, r7\n\t"
132172 #elif defined(__clang__)
132173         "adcs	r5, r7\n\t"
132174 #else
132175         "adc	r5, r7\n\t"
132176 #endif
132177 #ifdef WOLFSSL_KEIL
132178         "adcs	r3, r3, %[r]\n\t"
132179 #elif defined(__clang__)
132180         "adcs	r3, %[r]\n\t"
132181 #else
132182         "adc	r3, %[r]\n\t"
132183 #endif
132184         "#  A[9] * B[4]\n\t"
132185         "mov	%[a], r9\n\t"
132186         "mov	%[b], r10\n\t"
132187         "ldr	%[a], [%[a], #36]\n\t"
132188         "ldr	%[b], [%[b], #16]\n\t"
132189         "uxth	r6, %[a]\n\t"
132190         "uxth	r7, %[b]\n\t"
132191 #ifdef WOLFSSL_KEIL
132192         "muls	r7, r6, r7\n\t"
132193 #elif defined(__clang__)
132194         "muls	r7, r6\n\t"
132195 #else
132196         "mul	r7, r6\n\t"
132197 #endif
132198 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132199         "adds	r4, r4, r7\n\t"
132200 #else
132201         "add	r4, r4, r7\n\t"
132202 #endif
132203 #ifdef WOLFSSL_KEIL
132204         "adcs	r5, r5, %[r]\n\t"
132205 #elif defined(__clang__)
132206         "adcs	r5, %[r]\n\t"
132207 #else
132208         "adc	r5, %[r]\n\t"
132209 #endif
132210 #ifdef WOLFSSL_KEIL
132211         "adcs	r3, r3, %[r]\n\t"
132212 #elif defined(__clang__)
132213         "adcs	r3, %[r]\n\t"
132214 #else
132215         "adc	r3, %[r]\n\t"
132216 #endif
132217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132218         "lsrs	r7, %[b], #16\n\t"
132219 #else
132220         "lsr	r7, %[b], #16\n\t"
132221 #endif
132222 #ifdef WOLFSSL_KEIL
132223         "muls	r6, r7, r6\n\t"
132224 #elif defined(__clang__)
132225         "muls	r6, r7\n\t"
132226 #else
132227         "mul	r6, r7\n\t"
132228 #endif
132229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132230         "lsrs	r7, r6, #16\n\t"
132231 #else
132232         "lsr	r7, r6, #16\n\t"
132233 #endif
132234 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132235         "lsls	r6, r6, #16\n\t"
132236 #else
132237         "lsl	r6, r6, #16\n\t"
132238 #endif
132239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132240         "adds	r4, r4, r6\n\t"
132241 #else
132242         "add	r4, r4, r6\n\t"
132243 #endif
132244 #ifdef WOLFSSL_KEIL
132245         "adcs	r5, r5, r7\n\t"
132246 #elif defined(__clang__)
132247         "adcs	r5, r7\n\t"
132248 #else
132249         "adc	r5, r7\n\t"
132250 #endif
132251 #ifdef WOLFSSL_KEIL
132252         "adcs	r3, r3, %[r]\n\t"
132253 #elif defined(__clang__)
132254         "adcs	r3, %[r]\n\t"
132255 #else
132256         "adc	r3, %[r]\n\t"
132257 #endif
132258 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132259         "lsrs	r6, %[a], #16\n\t"
132260 #else
132261         "lsr	r6, %[a], #16\n\t"
132262 #endif
132263 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132264         "lsrs	r7, %[b], #16\n\t"
132265 #else
132266         "lsr	r7, %[b], #16\n\t"
132267 #endif
132268 #ifdef WOLFSSL_KEIL
132269         "muls	r7, r6, r7\n\t"
132270 #elif defined(__clang__)
132271         "muls	r7, r6\n\t"
132272 #else
132273         "mul	r7, r6\n\t"
132274 #endif
132275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132276         "adds	r5, r5, r7\n\t"
132277 #else
132278         "add	r5, r5, r7\n\t"
132279 #endif
132280 #ifdef WOLFSSL_KEIL
132281         "adcs	r3, r3, %[r]\n\t"
132282 #elif defined(__clang__)
132283         "adcs	r3, %[r]\n\t"
132284 #else
132285         "adc	r3, %[r]\n\t"
132286 #endif
132287         "uxth	r7, %[b]\n\t"
132288 #ifdef WOLFSSL_KEIL
132289         "muls	r6, r7, r6\n\t"
132290 #elif defined(__clang__)
132291         "muls	r6, r7\n\t"
132292 #else
132293         "mul	r6, r7\n\t"
132294 #endif
132295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132296         "lsrs	r7, r6, #16\n\t"
132297 #else
132298         "lsr	r7, r6, #16\n\t"
132299 #endif
132300 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132301         "lsls	r6, r6, #16\n\t"
132302 #else
132303         "lsl	r6, r6, #16\n\t"
132304 #endif
132305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132306         "adds	r4, r4, r6\n\t"
132307 #else
132308         "add	r4, r4, r6\n\t"
132309 #endif
132310 #ifdef WOLFSSL_KEIL
132311         "adcs	r5, r5, r7\n\t"
132312 #elif defined(__clang__)
132313         "adcs	r5, r7\n\t"
132314 #else
132315         "adc	r5, r7\n\t"
132316 #endif
132317 #ifdef WOLFSSL_KEIL
132318         "adcs	r3, r3, %[r]\n\t"
132319 #elif defined(__clang__)
132320         "adcs	r3, %[r]\n\t"
132321 #else
132322         "adc	r3, %[r]\n\t"
132323 #endif
132324         "#  A[10] * B[3]\n\t"
132325         "mov	%[a], r9\n\t"
132326         "mov	%[b], r10\n\t"
132327         "ldr	%[a], [%[a], #40]\n\t"
132328         "ldr	%[b], [%[b], #12]\n\t"
132329         "uxth	r6, %[a]\n\t"
132330         "uxth	r7, %[b]\n\t"
132331 #ifdef WOLFSSL_KEIL
132332         "muls	r7, r6, r7\n\t"
132333 #elif defined(__clang__)
132334         "muls	r7, r6\n\t"
132335 #else
132336         "mul	r7, r6\n\t"
132337 #endif
132338 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132339         "adds	r4, r4, r7\n\t"
132340 #else
132341         "add	r4, r4, r7\n\t"
132342 #endif
132343 #ifdef WOLFSSL_KEIL
132344         "adcs	r5, r5, %[r]\n\t"
132345 #elif defined(__clang__)
132346         "adcs	r5, %[r]\n\t"
132347 #else
132348         "adc	r5, %[r]\n\t"
132349 #endif
132350 #ifdef WOLFSSL_KEIL
132351         "adcs	r3, r3, %[r]\n\t"
132352 #elif defined(__clang__)
132353         "adcs	r3, %[r]\n\t"
132354 #else
132355         "adc	r3, %[r]\n\t"
132356 #endif
132357 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132358         "lsrs	r7, %[b], #16\n\t"
132359 #else
132360         "lsr	r7, %[b], #16\n\t"
132361 #endif
132362 #ifdef WOLFSSL_KEIL
132363         "muls	r6, r7, r6\n\t"
132364 #elif defined(__clang__)
132365         "muls	r6, r7\n\t"
132366 #else
132367         "mul	r6, r7\n\t"
132368 #endif
132369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132370         "lsrs	r7, r6, #16\n\t"
132371 #else
132372         "lsr	r7, r6, #16\n\t"
132373 #endif
132374 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132375         "lsls	r6, r6, #16\n\t"
132376 #else
132377         "lsl	r6, r6, #16\n\t"
132378 #endif
132379 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132380         "adds	r4, r4, r6\n\t"
132381 #else
132382         "add	r4, r4, r6\n\t"
132383 #endif
132384 #ifdef WOLFSSL_KEIL
132385         "adcs	r5, r5, r7\n\t"
132386 #elif defined(__clang__)
132387         "adcs	r5, r7\n\t"
132388 #else
132389         "adc	r5, r7\n\t"
132390 #endif
132391 #ifdef WOLFSSL_KEIL
132392         "adcs	r3, r3, %[r]\n\t"
132393 #elif defined(__clang__)
132394         "adcs	r3, %[r]\n\t"
132395 #else
132396         "adc	r3, %[r]\n\t"
132397 #endif
132398 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132399         "lsrs	r6, %[a], #16\n\t"
132400 #else
132401         "lsr	r6, %[a], #16\n\t"
132402 #endif
132403 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132404         "lsrs	r7, %[b], #16\n\t"
132405 #else
132406         "lsr	r7, %[b], #16\n\t"
132407 #endif
132408 #ifdef WOLFSSL_KEIL
132409         "muls	r7, r6, r7\n\t"
132410 #elif defined(__clang__)
132411         "muls	r7, r6\n\t"
132412 #else
132413         "mul	r7, r6\n\t"
132414 #endif
132415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132416         "adds	r5, r5, r7\n\t"
132417 #else
132418         "add	r5, r5, r7\n\t"
132419 #endif
132420 #ifdef WOLFSSL_KEIL
132421         "adcs	r3, r3, %[r]\n\t"
132422 #elif defined(__clang__)
132423         "adcs	r3, %[r]\n\t"
132424 #else
132425         "adc	r3, %[r]\n\t"
132426 #endif
132427         "uxth	r7, %[b]\n\t"
132428 #ifdef WOLFSSL_KEIL
132429         "muls	r6, r7, r6\n\t"
132430 #elif defined(__clang__)
132431         "muls	r6, r7\n\t"
132432 #else
132433         "mul	r6, r7\n\t"
132434 #endif
132435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132436         "lsrs	r7, r6, #16\n\t"
132437 #else
132438         "lsr	r7, r6, #16\n\t"
132439 #endif
132440 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132441         "lsls	r6, r6, #16\n\t"
132442 #else
132443         "lsl	r6, r6, #16\n\t"
132444 #endif
132445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132446         "adds	r4, r4, r6\n\t"
132447 #else
132448         "add	r4, r4, r6\n\t"
132449 #endif
132450 #ifdef WOLFSSL_KEIL
132451         "adcs	r5, r5, r7\n\t"
132452 #elif defined(__clang__)
132453         "adcs	r5, r7\n\t"
132454 #else
132455         "adc	r5, r7\n\t"
132456 #endif
132457 #ifdef WOLFSSL_KEIL
132458         "adcs	r3, r3, %[r]\n\t"
132459 #elif defined(__clang__)
132460         "adcs	r3, %[r]\n\t"
132461 #else
132462         "adc	r3, %[r]\n\t"
132463 #endif
132464         "#  A[11] * B[2]\n\t"
132465         "mov	%[a], r9\n\t"
132466         "mov	%[b], r10\n\t"
132467         "ldr	%[a], [%[a], #44]\n\t"
132468         "ldr	%[b], [%[b], #8]\n\t"
132469         "uxth	r6, %[a]\n\t"
132470         "uxth	r7, %[b]\n\t"
132471 #ifdef WOLFSSL_KEIL
132472         "muls	r7, r6, r7\n\t"
132473 #elif defined(__clang__)
132474         "muls	r7, r6\n\t"
132475 #else
132476         "mul	r7, r6\n\t"
132477 #endif
132478 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132479         "adds	r4, r4, r7\n\t"
132480 #else
132481         "add	r4, r4, r7\n\t"
132482 #endif
132483 #ifdef WOLFSSL_KEIL
132484         "adcs	r5, r5, %[r]\n\t"
132485 #elif defined(__clang__)
132486         "adcs	r5, %[r]\n\t"
132487 #else
132488         "adc	r5, %[r]\n\t"
132489 #endif
132490 #ifdef WOLFSSL_KEIL
132491         "adcs	r3, r3, %[r]\n\t"
132492 #elif defined(__clang__)
132493         "adcs	r3, %[r]\n\t"
132494 #else
132495         "adc	r3, %[r]\n\t"
132496 #endif
132497 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132498         "lsrs	r7, %[b], #16\n\t"
132499 #else
132500         "lsr	r7, %[b], #16\n\t"
132501 #endif
132502 #ifdef WOLFSSL_KEIL
132503         "muls	r6, r7, r6\n\t"
132504 #elif defined(__clang__)
132505         "muls	r6, r7\n\t"
132506 #else
132507         "mul	r6, r7\n\t"
132508 #endif
132509 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132510         "lsrs	r7, r6, #16\n\t"
132511 #else
132512         "lsr	r7, r6, #16\n\t"
132513 #endif
132514 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132515         "lsls	r6, r6, #16\n\t"
132516 #else
132517         "lsl	r6, r6, #16\n\t"
132518 #endif
132519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132520         "adds	r4, r4, r6\n\t"
132521 #else
132522         "add	r4, r4, r6\n\t"
132523 #endif
132524 #ifdef WOLFSSL_KEIL
132525         "adcs	r5, r5, r7\n\t"
132526 #elif defined(__clang__)
132527         "adcs	r5, r7\n\t"
132528 #else
132529         "adc	r5, r7\n\t"
132530 #endif
132531 #ifdef WOLFSSL_KEIL
132532         "adcs	r3, r3, %[r]\n\t"
132533 #elif defined(__clang__)
132534         "adcs	r3, %[r]\n\t"
132535 #else
132536         "adc	r3, %[r]\n\t"
132537 #endif
132538 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132539         "lsrs	r6, %[a], #16\n\t"
132540 #else
132541         "lsr	r6, %[a], #16\n\t"
132542 #endif
132543 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132544         "lsrs	r7, %[b], #16\n\t"
132545 #else
132546         "lsr	r7, %[b], #16\n\t"
132547 #endif
132548 #ifdef WOLFSSL_KEIL
132549         "muls	r7, r6, r7\n\t"
132550 #elif defined(__clang__)
132551         "muls	r7, r6\n\t"
132552 #else
132553         "mul	r7, r6\n\t"
132554 #endif
132555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132556         "adds	r5, r5, r7\n\t"
132557 #else
132558         "add	r5, r5, r7\n\t"
132559 #endif
132560 #ifdef WOLFSSL_KEIL
132561         "adcs	r3, r3, %[r]\n\t"
132562 #elif defined(__clang__)
132563         "adcs	r3, %[r]\n\t"
132564 #else
132565         "adc	r3, %[r]\n\t"
132566 #endif
132567         "uxth	r7, %[b]\n\t"
132568 #ifdef WOLFSSL_KEIL
132569         "muls	r6, r7, r6\n\t"
132570 #elif defined(__clang__)
132571         "muls	r6, r7\n\t"
132572 #else
132573         "mul	r6, r7\n\t"
132574 #endif
132575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132576         "lsrs	r7, r6, #16\n\t"
132577 #else
132578         "lsr	r7, r6, #16\n\t"
132579 #endif
132580 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132581         "lsls	r6, r6, #16\n\t"
132582 #else
132583         "lsl	r6, r6, #16\n\t"
132584 #endif
132585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132586         "adds	r4, r4, r6\n\t"
132587 #else
132588         "add	r4, r4, r6\n\t"
132589 #endif
132590 #ifdef WOLFSSL_KEIL
132591         "adcs	r5, r5, r7\n\t"
132592 #elif defined(__clang__)
132593         "adcs	r5, r7\n\t"
132594 #else
132595         "adc	r5, r7\n\t"
132596 #endif
132597 #ifdef WOLFSSL_KEIL
132598         "adcs	r3, r3, %[r]\n\t"
132599 #elif defined(__clang__)
132600         "adcs	r3, %[r]\n\t"
132601 #else
132602         "adc	r3, %[r]\n\t"
132603 #endif
132604         "#  A[12] * B[1]\n\t"
132605         "mov	%[a], r9\n\t"
132606         "mov	%[b], r10\n\t"
132607         "ldr	%[a], [%[a], #48]\n\t"
132608         "ldr	%[b], [%[b], #4]\n\t"
132609         "uxth	r6, %[a]\n\t"
132610         "uxth	r7, %[b]\n\t"
132611 #ifdef WOLFSSL_KEIL
132612         "muls	r7, r6, r7\n\t"
132613 #elif defined(__clang__)
132614         "muls	r7, r6\n\t"
132615 #else
132616         "mul	r7, r6\n\t"
132617 #endif
132618 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132619         "adds	r4, r4, r7\n\t"
132620 #else
132621         "add	r4, r4, r7\n\t"
132622 #endif
132623 #ifdef WOLFSSL_KEIL
132624         "adcs	r5, r5, %[r]\n\t"
132625 #elif defined(__clang__)
132626         "adcs	r5, %[r]\n\t"
132627 #else
132628         "adc	r5, %[r]\n\t"
132629 #endif
132630 #ifdef WOLFSSL_KEIL
132631         "adcs	r3, r3, %[r]\n\t"
132632 #elif defined(__clang__)
132633         "adcs	r3, %[r]\n\t"
132634 #else
132635         "adc	r3, %[r]\n\t"
132636 #endif
132637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132638         "lsrs	r7, %[b], #16\n\t"
132639 #else
132640         "lsr	r7, %[b], #16\n\t"
132641 #endif
132642 #ifdef WOLFSSL_KEIL
132643         "muls	r6, r7, r6\n\t"
132644 #elif defined(__clang__)
132645         "muls	r6, r7\n\t"
132646 #else
132647         "mul	r6, r7\n\t"
132648 #endif
132649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132650         "lsrs	r7, r6, #16\n\t"
132651 #else
132652         "lsr	r7, r6, #16\n\t"
132653 #endif
132654 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132655         "lsls	r6, r6, #16\n\t"
132656 #else
132657         "lsl	r6, r6, #16\n\t"
132658 #endif
132659 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132660         "adds	r4, r4, r6\n\t"
132661 #else
132662         "add	r4, r4, r6\n\t"
132663 #endif
132664 #ifdef WOLFSSL_KEIL
132665         "adcs	r5, r5, r7\n\t"
132666 #elif defined(__clang__)
132667         "adcs	r5, r7\n\t"
132668 #else
132669         "adc	r5, r7\n\t"
132670 #endif
132671 #ifdef WOLFSSL_KEIL
132672         "adcs	r3, r3, %[r]\n\t"
132673 #elif defined(__clang__)
132674         "adcs	r3, %[r]\n\t"
132675 #else
132676         "adc	r3, %[r]\n\t"
132677 #endif
132678 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132679         "lsrs	r6, %[a], #16\n\t"
132680 #else
132681         "lsr	r6, %[a], #16\n\t"
132682 #endif
132683 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132684         "lsrs	r7, %[b], #16\n\t"
132685 #else
132686         "lsr	r7, %[b], #16\n\t"
132687 #endif
132688 #ifdef WOLFSSL_KEIL
132689         "muls	r7, r6, r7\n\t"
132690 #elif defined(__clang__)
132691         "muls	r7, r6\n\t"
132692 #else
132693         "mul	r7, r6\n\t"
132694 #endif
132695 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132696         "adds	r5, r5, r7\n\t"
132697 #else
132698         "add	r5, r5, r7\n\t"
132699 #endif
132700 #ifdef WOLFSSL_KEIL
132701         "adcs	r3, r3, %[r]\n\t"
132702 #elif defined(__clang__)
132703         "adcs	r3, %[r]\n\t"
132704 #else
132705         "adc	r3, %[r]\n\t"
132706 #endif
132707         "uxth	r7, %[b]\n\t"
132708 #ifdef WOLFSSL_KEIL
132709         "muls	r6, r7, r6\n\t"
132710 #elif defined(__clang__)
132711         "muls	r6, r7\n\t"
132712 #else
132713         "mul	r6, r7\n\t"
132714 #endif
132715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132716         "lsrs	r7, r6, #16\n\t"
132717 #else
132718         "lsr	r7, r6, #16\n\t"
132719 #endif
132720 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132721         "lsls	r6, r6, #16\n\t"
132722 #else
132723         "lsl	r6, r6, #16\n\t"
132724 #endif
132725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132726         "adds	r4, r4, r6\n\t"
132727 #else
132728         "add	r4, r4, r6\n\t"
132729 #endif
132730 #ifdef WOLFSSL_KEIL
132731         "adcs	r5, r5, r7\n\t"
132732 #elif defined(__clang__)
132733         "adcs	r5, r7\n\t"
132734 #else
132735         "adc	r5, r7\n\t"
132736 #endif
132737 #ifdef WOLFSSL_KEIL
132738         "adcs	r3, r3, %[r]\n\t"
132739 #elif defined(__clang__)
132740         "adcs	r3, %[r]\n\t"
132741 #else
132742         "adc	r3, %[r]\n\t"
132743 #endif
132744         "#  A[13] * B[0]\n\t"
132745         "mov	%[a], r9\n\t"
132746         "mov	%[b], r10\n\t"
132747         "ldr	%[a], [%[a], #52]\n\t"
132748         "ldr	%[b], [%[b]]\n\t"
132749         "uxth	r6, %[a]\n\t"
132750         "uxth	r7, %[b]\n\t"
132751 #ifdef WOLFSSL_KEIL
132752         "muls	r7, r6, r7\n\t"
132753 #elif defined(__clang__)
132754         "muls	r7, r6\n\t"
132755 #else
132756         "mul	r7, r6\n\t"
132757 #endif
132758 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132759         "adds	r4, r4, r7\n\t"
132760 #else
132761         "add	r4, r4, r7\n\t"
132762 #endif
132763 #ifdef WOLFSSL_KEIL
132764         "adcs	r5, r5, %[r]\n\t"
132765 #elif defined(__clang__)
132766         "adcs	r5, %[r]\n\t"
132767 #else
132768         "adc	r5, %[r]\n\t"
132769 #endif
132770 #ifdef WOLFSSL_KEIL
132771         "adcs	r3, r3, %[r]\n\t"
132772 #elif defined(__clang__)
132773         "adcs	r3, %[r]\n\t"
132774 #else
132775         "adc	r3, %[r]\n\t"
132776 #endif
132777 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132778         "lsrs	r7, %[b], #16\n\t"
132779 #else
132780         "lsr	r7, %[b], #16\n\t"
132781 #endif
132782 #ifdef WOLFSSL_KEIL
132783         "muls	r6, r7, r6\n\t"
132784 #elif defined(__clang__)
132785         "muls	r6, r7\n\t"
132786 #else
132787         "mul	r6, r7\n\t"
132788 #endif
132789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132790         "lsrs	r7, r6, #16\n\t"
132791 #else
132792         "lsr	r7, r6, #16\n\t"
132793 #endif
132794 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132795         "lsls	r6, r6, #16\n\t"
132796 #else
132797         "lsl	r6, r6, #16\n\t"
132798 #endif
132799 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132800         "adds	r4, r4, r6\n\t"
132801 #else
132802         "add	r4, r4, r6\n\t"
132803 #endif
132804 #ifdef WOLFSSL_KEIL
132805         "adcs	r5, r5, r7\n\t"
132806 #elif defined(__clang__)
132807         "adcs	r5, r7\n\t"
132808 #else
132809         "adc	r5, r7\n\t"
132810 #endif
132811 #ifdef WOLFSSL_KEIL
132812         "adcs	r3, r3, %[r]\n\t"
132813 #elif defined(__clang__)
132814         "adcs	r3, %[r]\n\t"
132815 #else
132816         "adc	r3, %[r]\n\t"
132817 #endif
132818 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132819         "lsrs	r6, %[a], #16\n\t"
132820 #else
132821         "lsr	r6, %[a], #16\n\t"
132822 #endif
132823 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132824         "lsrs	r7, %[b], #16\n\t"
132825 #else
132826         "lsr	r7, %[b], #16\n\t"
132827 #endif
132828 #ifdef WOLFSSL_KEIL
132829         "muls	r7, r6, r7\n\t"
132830 #elif defined(__clang__)
132831         "muls	r7, r6\n\t"
132832 #else
132833         "mul	r7, r6\n\t"
132834 #endif
132835 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132836         "adds	r5, r5, r7\n\t"
132837 #else
132838         "add	r5, r5, r7\n\t"
132839 #endif
132840 #ifdef WOLFSSL_KEIL
132841         "adcs	r3, r3, %[r]\n\t"
132842 #elif defined(__clang__)
132843         "adcs	r3, %[r]\n\t"
132844 #else
132845         "adc	r3, %[r]\n\t"
132846 #endif
132847         "uxth	r7, %[b]\n\t"
132848 #ifdef WOLFSSL_KEIL
132849         "muls	r6, r7, r6\n\t"
132850 #elif defined(__clang__)
132851         "muls	r6, r7\n\t"
132852 #else
132853         "mul	r6, r7\n\t"
132854 #endif
132855 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132856         "lsrs	r7, r6, #16\n\t"
132857 #else
132858         "lsr	r7, r6, #16\n\t"
132859 #endif
132860 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132861         "lsls	r6, r6, #16\n\t"
132862 #else
132863         "lsl	r6, r6, #16\n\t"
132864 #endif
132865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132866         "adds	r4, r4, r6\n\t"
132867 #else
132868         "add	r4, r4, r6\n\t"
132869 #endif
132870 #ifdef WOLFSSL_KEIL
132871         "adcs	r5, r5, r7\n\t"
132872 #elif defined(__clang__)
132873         "adcs	r5, r7\n\t"
132874 #else
132875         "adc	r5, r7\n\t"
132876 #endif
132877 #ifdef WOLFSSL_KEIL
132878         "adcs	r3, r3, %[r]\n\t"
132879 #elif defined(__clang__)
132880         "adcs	r3, %[r]\n\t"
132881 #else
132882         "adc	r3, %[r]\n\t"
132883 #endif
132884         "str	r4, [sp, #52]\n\t"
132885         "#  A[14] * B[0]\n\t"
132886         "movs	r4, #0\n\t"
132887         "mov	%[a], r9\n\t"
132888         "mov	%[b], r10\n\t"
132889         "ldr	%[a], [%[a], #56]\n\t"
132890         "ldr	%[b], [%[b]]\n\t"
132891         "uxth	r6, %[a]\n\t"
132892         "uxth	r7, %[b]\n\t"
132893 #ifdef WOLFSSL_KEIL
132894         "muls	r7, r6, r7\n\t"
132895 #elif defined(__clang__)
132896         "muls	r7, r6\n\t"
132897 #else
132898         "mul	r7, r6\n\t"
132899 #endif
132900 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132901         "adds	r5, r5, r7\n\t"
132902 #else
132903         "add	r5, r5, r7\n\t"
132904 #endif
132905 #ifdef WOLFSSL_KEIL
132906         "adcs	r3, r3, %[r]\n\t"
132907 #elif defined(__clang__)
132908         "adcs	r3, %[r]\n\t"
132909 #else
132910         "adc	r3, %[r]\n\t"
132911 #endif
132912 #ifdef WOLFSSL_KEIL
132913         "adcs	r4, r4, %[r]\n\t"
132914 #elif defined(__clang__)
132915         "adcs	r4, %[r]\n\t"
132916 #else
132917         "adc	r4, %[r]\n\t"
132918 #endif
132919 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132920         "lsrs	r7, %[b], #16\n\t"
132921 #else
132922         "lsr	r7, %[b], #16\n\t"
132923 #endif
132924 #ifdef WOLFSSL_KEIL
132925         "muls	r6, r7, r6\n\t"
132926 #elif defined(__clang__)
132927         "muls	r6, r7\n\t"
132928 #else
132929         "mul	r6, r7\n\t"
132930 #endif
132931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132932         "lsrs	r7, r6, #16\n\t"
132933 #else
132934         "lsr	r7, r6, #16\n\t"
132935 #endif
132936 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132937         "lsls	r6, r6, #16\n\t"
132938 #else
132939         "lsl	r6, r6, #16\n\t"
132940 #endif
132941 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132942         "adds	r5, r5, r6\n\t"
132943 #else
132944         "add	r5, r5, r6\n\t"
132945 #endif
132946 #ifdef WOLFSSL_KEIL
132947         "adcs	r3, r3, r7\n\t"
132948 #elif defined(__clang__)
132949         "adcs	r3, r7\n\t"
132950 #else
132951         "adc	r3, r7\n\t"
132952 #endif
132953 #ifdef WOLFSSL_KEIL
132954         "adcs	r4, r4, %[r]\n\t"
132955 #elif defined(__clang__)
132956         "adcs	r4, %[r]\n\t"
132957 #else
132958         "adc	r4, %[r]\n\t"
132959 #endif
132960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132961         "lsrs	r6, %[a], #16\n\t"
132962 #else
132963         "lsr	r6, %[a], #16\n\t"
132964 #endif
132965 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132966         "lsrs	r7, %[b], #16\n\t"
132967 #else
132968         "lsr	r7, %[b], #16\n\t"
132969 #endif
132970 #ifdef WOLFSSL_KEIL
132971         "muls	r7, r6, r7\n\t"
132972 #elif defined(__clang__)
132973         "muls	r7, r6\n\t"
132974 #else
132975         "mul	r7, r6\n\t"
132976 #endif
132977 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132978         "adds	r3, r3, r7\n\t"
132979 #else
132980         "add	r3, r3, r7\n\t"
132981 #endif
132982 #ifdef WOLFSSL_KEIL
132983         "adcs	r4, r4, %[r]\n\t"
132984 #elif defined(__clang__)
132985         "adcs	r4, %[r]\n\t"
132986 #else
132987         "adc	r4, %[r]\n\t"
132988 #endif
132989         "uxth	r7, %[b]\n\t"
132990 #ifdef WOLFSSL_KEIL
132991         "muls	r6, r7, r6\n\t"
132992 #elif defined(__clang__)
132993         "muls	r6, r7\n\t"
132994 #else
132995         "mul	r6, r7\n\t"
132996 #endif
132997 #if defined(__clang__) || defined(WOLFSSL_KEIL)
132998         "lsrs	r7, r6, #16\n\t"
132999 #else
133000         "lsr	r7, r6, #16\n\t"
133001 #endif
133002 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133003         "lsls	r6, r6, #16\n\t"
133004 #else
133005         "lsl	r6, r6, #16\n\t"
133006 #endif
133007 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133008         "adds	r5, r5, r6\n\t"
133009 #else
133010         "add	r5, r5, r6\n\t"
133011 #endif
133012 #ifdef WOLFSSL_KEIL
133013         "adcs	r3, r3, r7\n\t"
133014 #elif defined(__clang__)
133015         "adcs	r3, r7\n\t"
133016 #else
133017         "adc	r3, r7\n\t"
133018 #endif
133019 #ifdef WOLFSSL_KEIL
133020         "adcs	r4, r4, %[r]\n\t"
133021 #elif defined(__clang__)
133022         "adcs	r4, %[r]\n\t"
133023 #else
133024         "adc	r4, %[r]\n\t"
133025 #endif
133026         "#  A[13] * B[1]\n\t"
133027         "mov	%[a], r9\n\t"
133028         "mov	%[b], r10\n\t"
133029         "ldr	%[a], [%[a], #52]\n\t"
133030         "ldr	%[b], [%[b], #4]\n\t"
133031         "uxth	r6, %[a]\n\t"
133032         "uxth	r7, %[b]\n\t"
133033 #ifdef WOLFSSL_KEIL
133034         "muls	r7, r6, r7\n\t"
133035 #elif defined(__clang__)
133036         "muls	r7, r6\n\t"
133037 #else
133038         "mul	r7, r6\n\t"
133039 #endif
133040 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133041         "adds	r5, r5, r7\n\t"
133042 #else
133043         "add	r5, r5, r7\n\t"
133044 #endif
133045 #ifdef WOLFSSL_KEIL
133046         "adcs	r3, r3, %[r]\n\t"
133047 #elif defined(__clang__)
133048         "adcs	r3, %[r]\n\t"
133049 #else
133050         "adc	r3, %[r]\n\t"
133051 #endif
133052 #ifdef WOLFSSL_KEIL
133053         "adcs	r4, r4, %[r]\n\t"
133054 #elif defined(__clang__)
133055         "adcs	r4, %[r]\n\t"
133056 #else
133057         "adc	r4, %[r]\n\t"
133058 #endif
133059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133060         "lsrs	r7, %[b], #16\n\t"
133061 #else
133062         "lsr	r7, %[b], #16\n\t"
133063 #endif
133064 #ifdef WOLFSSL_KEIL
133065         "muls	r6, r7, r6\n\t"
133066 #elif defined(__clang__)
133067         "muls	r6, r7\n\t"
133068 #else
133069         "mul	r6, r7\n\t"
133070 #endif
133071 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133072         "lsrs	r7, r6, #16\n\t"
133073 #else
133074         "lsr	r7, r6, #16\n\t"
133075 #endif
133076 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133077         "lsls	r6, r6, #16\n\t"
133078 #else
133079         "lsl	r6, r6, #16\n\t"
133080 #endif
133081 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133082         "adds	r5, r5, r6\n\t"
133083 #else
133084         "add	r5, r5, r6\n\t"
133085 #endif
133086 #ifdef WOLFSSL_KEIL
133087         "adcs	r3, r3, r7\n\t"
133088 #elif defined(__clang__)
133089         "adcs	r3, r7\n\t"
133090 #else
133091         "adc	r3, r7\n\t"
133092 #endif
133093 #ifdef WOLFSSL_KEIL
133094         "adcs	r4, r4, %[r]\n\t"
133095 #elif defined(__clang__)
133096         "adcs	r4, %[r]\n\t"
133097 #else
133098         "adc	r4, %[r]\n\t"
133099 #endif
133100 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133101         "lsrs	r6, %[a], #16\n\t"
133102 #else
133103         "lsr	r6, %[a], #16\n\t"
133104 #endif
133105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133106         "lsrs	r7, %[b], #16\n\t"
133107 #else
133108         "lsr	r7, %[b], #16\n\t"
133109 #endif
133110 #ifdef WOLFSSL_KEIL
133111         "muls	r7, r6, r7\n\t"
133112 #elif defined(__clang__)
133113         "muls	r7, r6\n\t"
133114 #else
133115         "mul	r7, r6\n\t"
133116 #endif
133117 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133118         "adds	r3, r3, r7\n\t"
133119 #else
133120         "add	r3, r3, r7\n\t"
133121 #endif
133122 #ifdef WOLFSSL_KEIL
133123         "adcs	r4, r4, %[r]\n\t"
133124 #elif defined(__clang__)
133125         "adcs	r4, %[r]\n\t"
133126 #else
133127         "adc	r4, %[r]\n\t"
133128 #endif
133129         "uxth	r7, %[b]\n\t"
133130 #ifdef WOLFSSL_KEIL
133131         "muls	r6, r7, r6\n\t"
133132 #elif defined(__clang__)
133133         "muls	r6, r7\n\t"
133134 #else
133135         "mul	r6, r7\n\t"
133136 #endif
133137 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133138         "lsrs	r7, r6, #16\n\t"
133139 #else
133140         "lsr	r7, r6, #16\n\t"
133141 #endif
133142 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133143         "lsls	r6, r6, #16\n\t"
133144 #else
133145         "lsl	r6, r6, #16\n\t"
133146 #endif
133147 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133148         "adds	r5, r5, r6\n\t"
133149 #else
133150         "add	r5, r5, r6\n\t"
133151 #endif
133152 #ifdef WOLFSSL_KEIL
133153         "adcs	r3, r3, r7\n\t"
133154 #elif defined(__clang__)
133155         "adcs	r3, r7\n\t"
133156 #else
133157         "adc	r3, r7\n\t"
133158 #endif
133159 #ifdef WOLFSSL_KEIL
133160         "adcs	r4, r4, %[r]\n\t"
133161 #elif defined(__clang__)
133162         "adcs	r4, %[r]\n\t"
133163 #else
133164         "adc	r4, %[r]\n\t"
133165 #endif
133166         "#  A[12] * B[2]\n\t"
133167         "mov	%[a], r9\n\t"
133168         "mov	%[b], r10\n\t"
133169         "ldr	%[a], [%[a], #48]\n\t"
133170         "ldr	%[b], [%[b], #8]\n\t"
133171         "uxth	r6, %[a]\n\t"
133172         "uxth	r7, %[b]\n\t"
133173 #ifdef WOLFSSL_KEIL
133174         "muls	r7, r6, r7\n\t"
133175 #elif defined(__clang__)
133176         "muls	r7, r6\n\t"
133177 #else
133178         "mul	r7, r6\n\t"
133179 #endif
133180 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133181         "adds	r5, r5, r7\n\t"
133182 #else
133183         "add	r5, r5, r7\n\t"
133184 #endif
133185 #ifdef WOLFSSL_KEIL
133186         "adcs	r3, r3, %[r]\n\t"
133187 #elif defined(__clang__)
133188         "adcs	r3, %[r]\n\t"
133189 #else
133190         "adc	r3, %[r]\n\t"
133191 #endif
133192 #ifdef WOLFSSL_KEIL
133193         "adcs	r4, r4, %[r]\n\t"
133194 #elif defined(__clang__)
133195         "adcs	r4, %[r]\n\t"
133196 #else
133197         "adc	r4, %[r]\n\t"
133198 #endif
133199 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133200         "lsrs	r7, %[b], #16\n\t"
133201 #else
133202         "lsr	r7, %[b], #16\n\t"
133203 #endif
133204 #ifdef WOLFSSL_KEIL
133205         "muls	r6, r7, r6\n\t"
133206 #elif defined(__clang__)
133207         "muls	r6, r7\n\t"
133208 #else
133209         "mul	r6, r7\n\t"
133210 #endif
133211 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133212         "lsrs	r7, r6, #16\n\t"
133213 #else
133214         "lsr	r7, r6, #16\n\t"
133215 #endif
133216 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133217         "lsls	r6, r6, #16\n\t"
133218 #else
133219         "lsl	r6, r6, #16\n\t"
133220 #endif
133221 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133222         "adds	r5, r5, r6\n\t"
133223 #else
133224         "add	r5, r5, r6\n\t"
133225 #endif
133226 #ifdef WOLFSSL_KEIL
133227         "adcs	r3, r3, r7\n\t"
133228 #elif defined(__clang__)
133229         "adcs	r3, r7\n\t"
133230 #else
133231         "adc	r3, r7\n\t"
133232 #endif
133233 #ifdef WOLFSSL_KEIL
133234         "adcs	r4, r4, %[r]\n\t"
133235 #elif defined(__clang__)
133236         "adcs	r4, %[r]\n\t"
133237 #else
133238         "adc	r4, %[r]\n\t"
133239 #endif
133240 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133241         "lsrs	r6, %[a], #16\n\t"
133242 #else
133243         "lsr	r6, %[a], #16\n\t"
133244 #endif
133245 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133246         "lsrs	r7, %[b], #16\n\t"
133247 #else
133248         "lsr	r7, %[b], #16\n\t"
133249 #endif
133250 #ifdef WOLFSSL_KEIL
133251         "muls	r7, r6, r7\n\t"
133252 #elif defined(__clang__)
133253         "muls	r7, r6\n\t"
133254 #else
133255         "mul	r7, r6\n\t"
133256 #endif
133257 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133258         "adds	r3, r3, r7\n\t"
133259 #else
133260         "add	r3, r3, r7\n\t"
133261 #endif
133262 #ifdef WOLFSSL_KEIL
133263         "adcs	r4, r4, %[r]\n\t"
133264 #elif defined(__clang__)
133265         "adcs	r4, %[r]\n\t"
133266 #else
133267         "adc	r4, %[r]\n\t"
133268 #endif
133269         "uxth	r7, %[b]\n\t"
133270 #ifdef WOLFSSL_KEIL
133271         "muls	r6, r7, r6\n\t"
133272 #elif defined(__clang__)
133273         "muls	r6, r7\n\t"
133274 #else
133275         "mul	r6, r7\n\t"
133276 #endif
133277 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133278         "lsrs	r7, r6, #16\n\t"
133279 #else
133280         "lsr	r7, r6, #16\n\t"
133281 #endif
133282 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133283         "lsls	r6, r6, #16\n\t"
133284 #else
133285         "lsl	r6, r6, #16\n\t"
133286 #endif
133287 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133288         "adds	r5, r5, r6\n\t"
133289 #else
133290         "add	r5, r5, r6\n\t"
133291 #endif
133292 #ifdef WOLFSSL_KEIL
133293         "adcs	r3, r3, r7\n\t"
133294 #elif defined(__clang__)
133295         "adcs	r3, r7\n\t"
133296 #else
133297         "adc	r3, r7\n\t"
133298 #endif
133299 #ifdef WOLFSSL_KEIL
133300         "adcs	r4, r4, %[r]\n\t"
133301 #elif defined(__clang__)
133302         "adcs	r4, %[r]\n\t"
133303 #else
133304         "adc	r4, %[r]\n\t"
133305 #endif
133306         "#  A[11] * B[3]\n\t"
133307         "mov	%[a], r9\n\t"
133308         "mov	%[b], r10\n\t"
133309         "ldr	%[a], [%[a], #44]\n\t"
133310         "ldr	%[b], [%[b], #12]\n\t"
133311         "uxth	r6, %[a]\n\t"
133312         "uxth	r7, %[b]\n\t"
133313 #ifdef WOLFSSL_KEIL
133314         "muls	r7, r6, r7\n\t"
133315 #elif defined(__clang__)
133316         "muls	r7, r6\n\t"
133317 #else
133318         "mul	r7, r6\n\t"
133319 #endif
133320 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133321         "adds	r5, r5, r7\n\t"
133322 #else
133323         "add	r5, r5, r7\n\t"
133324 #endif
133325 #ifdef WOLFSSL_KEIL
133326         "adcs	r3, r3, %[r]\n\t"
133327 #elif defined(__clang__)
133328         "adcs	r3, %[r]\n\t"
133329 #else
133330         "adc	r3, %[r]\n\t"
133331 #endif
133332 #ifdef WOLFSSL_KEIL
133333         "adcs	r4, r4, %[r]\n\t"
133334 #elif defined(__clang__)
133335         "adcs	r4, %[r]\n\t"
133336 #else
133337         "adc	r4, %[r]\n\t"
133338 #endif
133339 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133340         "lsrs	r7, %[b], #16\n\t"
133341 #else
133342         "lsr	r7, %[b], #16\n\t"
133343 #endif
133344 #ifdef WOLFSSL_KEIL
133345         "muls	r6, r7, r6\n\t"
133346 #elif defined(__clang__)
133347         "muls	r6, r7\n\t"
133348 #else
133349         "mul	r6, r7\n\t"
133350 #endif
133351 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133352         "lsrs	r7, r6, #16\n\t"
133353 #else
133354         "lsr	r7, r6, #16\n\t"
133355 #endif
133356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133357         "lsls	r6, r6, #16\n\t"
133358 #else
133359         "lsl	r6, r6, #16\n\t"
133360 #endif
133361 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133362         "adds	r5, r5, r6\n\t"
133363 #else
133364         "add	r5, r5, r6\n\t"
133365 #endif
133366 #ifdef WOLFSSL_KEIL
133367         "adcs	r3, r3, r7\n\t"
133368 #elif defined(__clang__)
133369         "adcs	r3, r7\n\t"
133370 #else
133371         "adc	r3, r7\n\t"
133372 #endif
133373 #ifdef WOLFSSL_KEIL
133374         "adcs	r4, r4, %[r]\n\t"
133375 #elif defined(__clang__)
133376         "adcs	r4, %[r]\n\t"
133377 #else
133378         "adc	r4, %[r]\n\t"
133379 #endif
133380 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133381         "lsrs	r6, %[a], #16\n\t"
133382 #else
133383         "lsr	r6, %[a], #16\n\t"
133384 #endif
133385 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133386         "lsrs	r7, %[b], #16\n\t"
133387 #else
133388         "lsr	r7, %[b], #16\n\t"
133389 #endif
133390 #ifdef WOLFSSL_KEIL
133391         "muls	r7, r6, r7\n\t"
133392 #elif defined(__clang__)
133393         "muls	r7, r6\n\t"
133394 #else
133395         "mul	r7, r6\n\t"
133396 #endif
133397 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133398         "adds	r3, r3, r7\n\t"
133399 #else
133400         "add	r3, r3, r7\n\t"
133401 #endif
133402 #ifdef WOLFSSL_KEIL
133403         "adcs	r4, r4, %[r]\n\t"
133404 #elif defined(__clang__)
133405         "adcs	r4, %[r]\n\t"
133406 #else
133407         "adc	r4, %[r]\n\t"
133408 #endif
133409         "uxth	r7, %[b]\n\t"
133410 #ifdef WOLFSSL_KEIL
133411         "muls	r6, r7, r6\n\t"
133412 #elif defined(__clang__)
133413         "muls	r6, r7\n\t"
133414 #else
133415         "mul	r6, r7\n\t"
133416 #endif
133417 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133418         "lsrs	r7, r6, #16\n\t"
133419 #else
133420         "lsr	r7, r6, #16\n\t"
133421 #endif
133422 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133423         "lsls	r6, r6, #16\n\t"
133424 #else
133425         "lsl	r6, r6, #16\n\t"
133426 #endif
133427 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133428         "adds	r5, r5, r6\n\t"
133429 #else
133430         "add	r5, r5, r6\n\t"
133431 #endif
133432 #ifdef WOLFSSL_KEIL
133433         "adcs	r3, r3, r7\n\t"
133434 #elif defined(__clang__)
133435         "adcs	r3, r7\n\t"
133436 #else
133437         "adc	r3, r7\n\t"
133438 #endif
133439 #ifdef WOLFSSL_KEIL
133440         "adcs	r4, r4, %[r]\n\t"
133441 #elif defined(__clang__)
133442         "adcs	r4, %[r]\n\t"
133443 #else
133444         "adc	r4, %[r]\n\t"
133445 #endif
133446         "#  A[10] * B[4]\n\t"
133447         "mov	%[a], r9\n\t"
133448         "mov	%[b], r10\n\t"
133449         "ldr	%[a], [%[a], #40]\n\t"
133450         "ldr	%[b], [%[b], #16]\n\t"
133451         "uxth	r6, %[a]\n\t"
133452         "uxth	r7, %[b]\n\t"
133453 #ifdef WOLFSSL_KEIL
133454         "muls	r7, r6, r7\n\t"
133455 #elif defined(__clang__)
133456         "muls	r7, r6\n\t"
133457 #else
133458         "mul	r7, r6\n\t"
133459 #endif
133460 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133461         "adds	r5, r5, r7\n\t"
133462 #else
133463         "add	r5, r5, r7\n\t"
133464 #endif
133465 #ifdef WOLFSSL_KEIL
133466         "adcs	r3, r3, %[r]\n\t"
133467 #elif defined(__clang__)
133468         "adcs	r3, %[r]\n\t"
133469 #else
133470         "adc	r3, %[r]\n\t"
133471 #endif
133472 #ifdef WOLFSSL_KEIL
133473         "adcs	r4, r4, %[r]\n\t"
133474 #elif defined(__clang__)
133475         "adcs	r4, %[r]\n\t"
133476 #else
133477         "adc	r4, %[r]\n\t"
133478 #endif
133479 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133480         "lsrs	r7, %[b], #16\n\t"
133481 #else
133482         "lsr	r7, %[b], #16\n\t"
133483 #endif
133484 #ifdef WOLFSSL_KEIL
133485         "muls	r6, r7, r6\n\t"
133486 #elif defined(__clang__)
133487         "muls	r6, r7\n\t"
133488 #else
133489         "mul	r6, r7\n\t"
133490 #endif
133491 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133492         "lsrs	r7, r6, #16\n\t"
133493 #else
133494         "lsr	r7, r6, #16\n\t"
133495 #endif
133496 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133497         "lsls	r6, r6, #16\n\t"
133498 #else
133499         "lsl	r6, r6, #16\n\t"
133500 #endif
133501 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133502         "adds	r5, r5, r6\n\t"
133503 #else
133504         "add	r5, r5, r6\n\t"
133505 #endif
133506 #ifdef WOLFSSL_KEIL
133507         "adcs	r3, r3, r7\n\t"
133508 #elif defined(__clang__)
133509         "adcs	r3, r7\n\t"
133510 #else
133511         "adc	r3, r7\n\t"
133512 #endif
133513 #ifdef WOLFSSL_KEIL
133514         "adcs	r4, r4, %[r]\n\t"
133515 #elif defined(__clang__)
133516         "adcs	r4, %[r]\n\t"
133517 #else
133518         "adc	r4, %[r]\n\t"
133519 #endif
133520 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133521         "lsrs	r6, %[a], #16\n\t"
133522 #else
133523         "lsr	r6, %[a], #16\n\t"
133524 #endif
133525 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133526         "lsrs	r7, %[b], #16\n\t"
133527 #else
133528         "lsr	r7, %[b], #16\n\t"
133529 #endif
133530 #ifdef WOLFSSL_KEIL
133531         "muls	r7, r6, r7\n\t"
133532 #elif defined(__clang__)
133533         "muls	r7, r6\n\t"
133534 #else
133535         "mul	r7, r6\n\t"
133536 #endif
133537 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133538         "adds	r3, r3, r7\n\t"
133539 #else
133540         "add	r3, r3, r7\n\t"
133541 #endif
133542 #ifdef WOLFSSL_KEIL
133543         "adcs	r4, r4, %[r]\n\t"
133544 #elif defined(__clang__)
133545         "adcs	r4, %[r]\n\t"
133546 #else
133547         "adc	r4, %[r]\n\t"
133548 #endif
133549         "uxth	r7, %[b]\n\t"
133550 #ifdef WOLFSSL_KEIL
133551         "muls	r6, r7, r6\n\t"
133552 #elif defined(__clang__)
133553         "muls	r6, r7\n\t"
133554 #else
133555         "mul	r6, r7\n\t"
133556 #endif
133557 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133558         "lsrs	r7, r6, #16\n\t"
133559 #else
133560         "lsr	r7, r6, #16\n\t"
133561 #endif
133562 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133563         "lsls	r6, r6, #16\n\t"
133564 #else
133565         "lsl	r6, r6, #16\n\t"
133566 #endif
133567 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133568         "adds	r5, r5, r6\n\t"
133569 #else
133570         "add	r5, r5, r6\n\t"
133571 #endif
133572 #ifdef WOLFSSL_KEIL
133573         "adcs	r3, r3, r7\n\t"
133574 #elif defined(__clang__)
133575         "adcs	r3, r7\n\t"
133576 #else
133577         "adc	r3, r7\n\t"
133578 #endif
133579 #ifdef WOLFSSL_KEIL
133580         "adcs	r4, r4, %[r]\n\t"
133581 #elif defined(__clang__)
133582         "adcs	r4, %[r]\n\t"
133583 #else
133584         "adc	r4, %[r]\n\t"
133585 #endif
133586         "#  A[9] * B[5]\n\t"
133587         "mov	%[a], r9\n\t"
133588         "mov	%[b], r10\n\t"
133589         "ldr	%[a], [%[a], #36]\n\t"
133590         "ldr	%[b], [%[b], #20]\n\t"
133591         "uxth	r6, %[a]\n\t"
133592         "uxth	r7, %[b]\n\t"
133593 #ifdef WOLFSSL_KEIL
133594         "muls	r7, r6, r7\n\t"
133595 #elif defined(__clang__)
133596         "muls	r7, r6\n\t"
133597 #else
133598         "mul	r7, r6\n\t"
133599 #endif
133600 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133601         "adds	r5, r5, r7\n\t"
133602 #else
133603         "add	r5, r5, r7\n\t"
133604 #endif
133605 #ifdef WOLFSSL_KEIL
133606         "adcs	r3, r3, %[r]\n\t"
133607 #elif defined(__clang__)
133608         "adcs	r3, %[r]\n\t"
133609 #else
133610         "adc	r3, %[r]\n\t"
133611 #endif
133612 #ifdef WOLFSSL_KEIL
133613         "adcs	r4, r4, %[r]\n\t"
133614 #elif defined(__clang__)
133615         "adcs	r4, %[r]\n\t"
133616 #else
133617         "adc	r4, %[r]\n\t"
133618 #endif
133619 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133620         "lsrs	r7, %[b], #16\n\t"
133621 #else
133622         "lsr	r7, %[b], #16\n\t"
133623 #endif
133624 #ifdef WOLFSSL_KEIL
133625         "muls	r6, r7, r6\n\t"
133626 #elif defined(__clang__)
133627         "muls	r6, r7\n\t"
133628 #else
133629         "mul	r6, r7\n\t"
133630 #endif
133631 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133632         "lsrs	r7, r6, #16\n\t"
133633 #else
133634         "lsr	r7, r6, #16\n\t"
133635 #endif
133636 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133637         "lsls	r6, r6, #16\n\t"
133638 #else
133639         "lsl	r6, r6, #16\n\t"
133640 #endif
133641 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133642         "adds	r5, r5, r6\n\t"
133643 #else
133644         "add	r5, r5, r6\n\t"
133645 #endif
133646 #ifdef WOLFSSL_KEIL
133647         "adcs	r3, r3, r7\n\t"
133648 #elif defined(__clang__)
133649         "adcs	r3, r7\n\t"
133650 #else
133651         "adc	r3, r7\n\t"
133652 #endif
133653 #ifdef WOLFSSL_KEIL
133654         "adcs	r4, r4, %[r]\n\t"
133655 #elif defined(__clang__)
133656         "adcs	r4, %[r]\n\t"
133657 #else
133658         "adc	r4, %[r]\n\t"
133659 #endif
133660 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133661         "lsrs	r6, %[a], #16\n\t"
133662 #else
133663         "lsr	r6, %[a], #16\n\t"
133664 #endif
133665 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133666         "lsrs	r7, %[b], #16\n\t"
133667 #else
133668         "lsr	r7, %[b], #16\n\t"
133669 #endif
133670 #ifdef WOLFSSL_KEIL
133671         "muls	r7, r6, r7\n\t"
133672 #elif defined(__clang__)
133673         "muls	r7, r6\n\t"
133674 #else
133675         "mul	r7, r6\n\t"
133676 #endif
133677 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133678         "adds	r3, r3, r7\n\t"
133679 #else
133680         "add	r3, r3, r7\n\t"
133681 #endif
133682 #ifdef WOLFSSL_KEIL
133683         "adcs	r4, r4, %[r]\n\t"
133684 #elif defined(__clang__)
133685         "adcs	r4, %[r]\n\t"
133686 #else
133687         "adc	r4, %[r]\n\t"
133688 #endif
133689         "uxth	r7, %[b]\n\t"
133690 #ifdef WOLFSSL_KEIL
133691         "muls	r6, r7, r6\n\t"
133692 #elif defined(__clang__)
133693         "muls	r6, r7\n\t"
133694 #else
133695         "mul	r6, r7\n\t"
133696 #endif
133697 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133698         "lsrs	r7, r6, #16\n\t"
133699 #else
133700         "lsr	r7, r6, #16\n\t"
133701 #endif
133702 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133703         "lsls	r6, r6, #16\n\t"
133704 #else
133705         "lsl	r6, r6, #16\n\t"
133706 #endif
133707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133708         "adds	r5, r5, r6\n\t"
133709 #else
133710         "add	r5, r5, r6\n\t"
133711 #endif
133712 #ifdef WOLFSSL_KEIL
133713         "adcs	r3, r3, r7\n\t"
133714 #elif defined(__clang__)
133715         "adcs	r3, r7\n\t"
133716 #else
133717         "adc	r3, r7\n\t"
133718 #endif
133719 #ifdef WOLFSSL_KEIL
133720         "adcs	r4, r4, %[r]\n\t"
133721 #elif defined(__clang__)
133722         "adcs	r4, %[r]\n\t"
133723 #else
133724         "adc	r4, %[r]\n\t"
133725 #endif
133726         "#  A[8] * B[6]\n\t"
133727         "mov	%[a], r9\n\t"
133728         "mov	%[b], r10\n\t"
133729         "ldr	%[a], [%[a], #32]\n\t"
133730         "ldr	%[b], [%[b], #24]\n\t"
133731         "uxth	r6, %[a]\n\t"
133732         "uxth	r7, %[b]\n\t"
133733 #ifdef WOLFSSL_KEIL
133734         "muls	r7, r6, r7\n\t"
133735 #elif defined(__clang__)
133736         "muls	r7, r6\n\t"
133737 #else
133738         "mul	r7, r6\n\t"
133739 #endif
133740 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133741         "adds	r5, r5, r7\n\t"
133742 #else
133743         "add	r5, r5, r7\n\t"
133744 #endif
133745 #ifdef WOLFSSL_KEIL
133746         "adcs	r3, r3, %[r]\n\t"
133747 #elif defined(__clang__)
133748         "adcs	r3, %[r]\n\t"
133749 #else
133750         "adc	r3, %[r]\n\t"
133751 #endif
133752 #ifdef WOLFSSL_KEIL
133753         "adcs	r4, r4, %[r]\n\t"
133754 #elif defined(__clang__)
133755         "adcs	r4, %[r]\n\t"
133756 #else
133757         "adc	r4, %[r]\n\t"
133758 #endif
133759 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133760         "lsrs	r7, %[b], #16\n\t"
133761 #else
133762         "lsr	r7, %[b], #16\n\t"
133763 #endif
133764 #ifdef WOLFSSL_KEIL
133765         "muls	r6, r7, r6\n\t"
133766 #elif defined(__clang__)
133767         "muls	r6, r7\n\t"
133768 #else
133769         "mul	r6, r7\n\t"
133770 #endif
133771 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133772         "lsrs	r7, r6, #16\n\t"
133773 #else
133774         "lsr	r7, r6, #16\n\t"
133775 #endif
133776 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133777         "lsls	r6, r6, #16\n\t"
133778 #else
133779         "lsl	r6, r6, #16\n\t"
133780 #endif
133781 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133782         "adds	r5, r5, r6\n\t"
133783 #else
133784         "add	r5, r5, r6\n\t"
133785 #endif
133786 #ifdef WOLFSSL_KEIL
133787         "adcs	r3, r3, r7\n\t"
133788 #elif defined(__clang__)
133789         "adcs	r3, r7\n\t"
133790 #else
133791         "adc	r3, r7\n\t"
133792 #endif
133793 #ifdef WOLFSSL_KEIL
133794         "adcs	r4, r4, %[r]\n\t"
133795 #elif defined(__clang__)
133796         "adcs	r4, %[r]\n\t"
133797 #else
133798         "adc	r4, %[r]\n\t"
133799 #endif
133800 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133801         "lsrs	r6, %[a], #16\n\t"
133802 #else
133803         "lsr	r6, %[a], #16\n\t"
133804 #endif
133805 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133806         "lsrs	r7, %[b], #16\n\t"
133807 #else
133808         "lsr	r7, %[b], #16\n\t"
133809 #endif
133810 #ifdef WOLFSSL_KEIL
133811         "muls	r7, r6, r7\n\t"
133812 #elif defined(__clang__)
133813         "muls	r7, r6\n\t"
133814 #else
133815         "mul	r7, r6\n\t"
133816 #endif
133817 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133818         "adds	r3, r3, r7\n\t"
133819 #else
133820         "add	r3, r3, r7\n\t"
133821 #endif
133822 #ifdef WOLFSSL_KEIL
133823         "adcs	r4, r4, %[r]\n\t"
133824 #elif defined(__clang__)
133825         "adcs	r4, %[r]\n\t"
133826 #else
133827         "adc	r4, %[r]\n\t"
133828 #endif
133829         "uxth	r7, %[b]\n\t"
133830 #ifdef WOLFSSL_KEIL
133831         "muls	r6, r7, r6\n\t"
133832 #elif defined(__clang__)
133833         "muls	r6, r7\n\t"
133834 #else
133835         "mul	r6, r7\n\t"
133836 #endif
133837 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133838         "lsrs	r7, r6, #16\n\t"
133839 #else
133840         "lsr	r7, r6, #16\n\t"
133841 #endif
133842 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133843         "lsls	r6, r6, #16\n\t"
133844 #else
133845         "lsl	r6, r6, #16\n\t"
133846 #endif
133847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133848         "adds	r5, r5, r6\n\t"
133849 #else
133850         "add	r5, r5, r6\n\t"
133851 #endif
133852 #ifdef WOLFSSL_KEIL
133853         "adcs	r3, r3, r7\n\t"
133854 #elif defined(__clang__)
133855         "adcs	r3, r7\n\t"
133856 #else
133857         "adc	r3, r7\n\t"
133858 #endif
133859 #ifdef WOLFSSL_KEIL
133860         "adcs	r4, r4, %[r]\n\t"
133861 #elif defined(__clang__)
133862         "adcs	r4, %[r]\n\t"
133863 #else
133864         "adc	r4, %[r]\n\t"
133865 #endif
133866         "#  A[7] * B[7]\n\t"
133867         "mov	%[a], r9\n\t"
133868         "mov	%[b], r10\n\t"
133869         "ldr	%[a], [%[a], #28]\n\t"
133870         "ldr	%[b], [%[b], #28]\n\t"
133871         "uxth	r6, %[a]\n\t"
133872         "uxth	r7, %[b]\n\t"
133873 #ifdef WOLFSSL_KEIL
133874         "muls	r7, r6, r7\n\t"
133875 #elif defined(__clang__)
133876         "muls	r7, r6\n\t"
133877 #else
133878         "mul	r7, r6\n\t"
133879 #endif
133880 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133881         "adds	r5, r5, r7\n\t"
133882 #else
133883         "add	r5, r5, r7\n\t"
133884 #endif
133885 #ifdef WOLFSSL_KEIL
133886         "adcs	r3, r3, %[r]\n\t"
133887 #elif defined(__clang__)
133888         "adcs	r3, %[r]\n\t"
133889 #else
133890         "adc	r3, %[r]\n\t"
133891 #endif
133892 #ifdef WOLFSSL_KEIL
133893         "adcs	r4, r4, %[r]\n\t"
133894 #elif defined(__clang__)
133895         "adcs	r4, %[r]\n\t"
133896 #else
133897         "adc	r4, %[r]\n\t"
133898 #endif
133899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133900         "lsrs	r7, %[b], #16\n\t"
133901 #else
133902         "lsr	r7, %[b], #16\n\t"
133903 #endif
133904 #ifdef WOLFSSL_KEIL
133905         "muls	r6, r7, r6\n\t"
133906 #elif defined(__clang__)
133907         "muls	r6, r7\n\t"
133908 #else
133909         "mul	r6, r7\n\t"
133910 #endif
133911 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133912         "lsrs	r7, r6, #16\n\t"
133913 #else
133914         "lsr	r7, r6, #16\n\t"
133915 #endif
133916 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133917         "lsls	r6, r6, #16\n\t"
133918 #else
133919         "lsl	r6, r6, #16\n\t"
133920 #endif
133921 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133922         "adds	r5, r5, r6\n\t"
133923 #else
133924         "add	r5, r5, r6\n\t"
133925 #endif
133926 #ifdef WOLFSSL_KEIL
133927         "adcs	r3, r3, r7\n\t"
133928 #elif defined(__clang__)
133929         "adcs	r3, r7\n\t"
133930 #else
133931         "adc	r3, r7\n\t"
133932 #endif
133933 #ifdef WOLFSSL_KEIL
133934         "adcs	r4, r4, %[r]\n\t"
133935 #elif defined(__clang__)
133936         "adcs	r4, %[r]\n\t"
133937 #else
133938         "adc	r4, %[r]\n\t"
133939 #endif
133940 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133941         "lsrs	r6, %[a], #16\n\t"
133942 #else
133943         "lsr	r6, %[a], #16\n\t"
133944 #endif
133945 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133946         "lsrs	r7, %[b], #16\n\t"
133947 #else
133948         "lsr	r7, %[b], #16\n\t"
133949 #endif
133950 #ifdef WOLFSSL_KEIL
133951         "muls	r7, r6, r7\n\t"
133952 #elif defined(__clang__)
133953         "muls	r7, r6\n\t"
133954 #else
133955         "mul	r7, r6\n\t"
133956 #endif
133957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133958         "adds	r3, r3, r7\n\t"
133959 #else
133960         "add	r3, r3, r7\n\t"
133961 #endif
133962 #ifdef WOLFSSL_KEIL
133963         "adcs	r4, r4, %[r]\n\t"
133964 #elif defined(__clang__)
133965         "adcs	r4, %[r]\n\t"
133966 #else
133967         "adc	r4, %[r]\n\t"
133968 #endif
133969         "uxth	r7, %[b]\n\t"
133970 #ifdef WOLFSSL_KEIL
133971         "muls	r6, r7, r6\n\t"
133972 #elif defined(__clang__)
133973         "muls	r6, r7\n\t"
133974 #else
133975         "mul	r6, r7\n\t"
133976 #endif
133977 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133978         "lsrs	r7, r6, #16\n\t"
133979 #else
133980         "lsr	r7, r6, #16\n\t"
133981 #endif
133982 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133983         "lsls	r6, r6, #16\n\t"
133984 #else
133985         "lsl	r6, r6, #16\n\t"
133986 #endif
133987 #if defined(__clang__) || defined(WOLFSSL_KEIL)
133988         "adds	r5, r5, r6\n\t"
133989 #else
133990         "add	r5, r5, r6\n\t"
133991 #endif
133992 #ifdef WOLFSSL_KEIL
133993         "adcs	r3, r3, r7\n\t"
133994 #elif defined(__clang__)
133995         "adcs	r3, r7\n\t"
133996 #else
133997         "adc	r3, r7\n\t"
133998 #endif
133999 #ifdef WOLFSSL_KEIL
134000         "adcs	r4, r4, %[r]\n\t"
134001 #elif defined(__clang__)
134002         "adcs	r4, %[r]\n\t"
134003 #else
134004         "adc	r4, %[r]\n\t"
134005 #endif
134006         "#  A[6] * B[8]\n\t"
134007         "mov	%[a], r9\n\t"
134008         "mov	%[b], r10\n\t"
134009         "ldr	%[a], [%[a], #24]\n\t"
134010         "ldr	%[b], [%[b], #32]\n\t"
134011         "uxth	r6, %[a]\n\t"
134012         "uxth	r7, %[b]\n\t"
134013 #ifdef WOLFSSL_KEIL
134014         "muls	r7, r6, r7\n\t"
134015 #elif defined(__clang__)
134016         "muls	r7, r6\n\t"
134017 #else
134018         "mul	r7, r6\n\t"
134019 #endif
134020 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134021         "adds	r5, r5, r7\n\t"
134022 #else
134023         "add	r5, r5, r7\n\t"
134024 #endif
134025 #ifdef WOLFSSL_KEIL
134026         "adcs	r3, r3, %[r]\n\t"
134027 #elif defined(__clang__)
134028         "adcs	r3, %[r]\n\t"
134029 #else
134030         "adc	r3, %[r]\n\t"
134031 #endif
134032 #ifdef WOLFSSL_KEIL
134033         "adcs	r4, r4, %[r]\n\t"
134034 #elif defined(__clang__)
134035         "adcs	r4, %[r]\n\t"
134036 #else
134037         "adc	r4, %[r]\n\t"
134038 #endif
134039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134040         "lsrs	r7, %[b], #16\n\t"
134041 #else
134042         "lsr	r7, %[b], #16\n\t"
134043 #endif
134044 #ifdef WOLFSSL_KEIL
134045         "muls	r6, r7, r6\n\t"
134046 #elif defined(__clang__)
134047         "muls	r6, r7\n\t"
134048 #else
134049         "mul	r6, r7\n\t"
134050 #endif
134051 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134052         "lsrs	r7, r6, #16\n\t"
134053 #else
134054         "lsr	r7, r6, #16\n\t"
134055 #endif
134056 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134057         "lsls	r6, r6, #16\n\t"
134058 #else
134059         "lsl	r6, r6, #16\n\t"
134060 #endif
134061 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134062         "adds	r5, r5, r6\n\t"
134063 #else
134064         "add	r5, r5, r6\n\t"
134065 #endif
134066 #ifdef WOLFSSL_KEIL
134067         "adcs	r3, r3, r7\n\t"
134068 #elif defined(__clang__)
134069         "adcs	r3, r7\n\t"
134070 #else
134071         "adc	r3, r7\n\t"
134072 #endif
134073 #ifdef WOLFSSL_KEIL
134074         "adcs	r4, r4, %[r]\n\t"
134075 #elif defined(__clang__)
134076         "adcs	r4, %[r]\n\t"
134077 #else
134078         "adc	r4, %[r]\n\t"
134079 #endif
134080 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134081         "lsrs	r6, %[a], #16\n\t"
134082 #else
134083         "lsr	r6, %[a], #16\n\t"
134084 #endif
134085 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134086         "lsrs	r7, %[b], #16\n\t"
134087 #else
134088         "lsr	r7, %[b], #16\n\t"
134089 #endif
134090 #ifdef WOLFSSL_KEIL
134091         "muls	r7, r6, r7\n\t"
134092 #elif defined(__clang__)
134093         "muls	r7, r6\n\t"
134094 #else
134095         "mul	r7, r6\n\t"
134096 #endif
134097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134098         "adds	r3, r3, r7\n\t"
134099 #else
134100         "add	r3, r3, r7\n\t"
134101 #endif
134102 #ifdef WOLFSSL_KEIL
134103         "adcs	r4, r4, %[r]\n\t"
134104 #elif defined(__clang__)
134105         "adcs	r4, %[r]\n\t"
134106 #else
134107         "adc	r4, %[r]\n\t"
134108 #endif
134109         "uxth	r7, %[b]\n\t"
134110 #ifdef WOLFSSL_KEIL
134111         "muls	r6, r7, r6\n\t"
134112 #elif defined(__clang__)
134113         "muls	r6, r7\n\t"
134114 #else
134115         "mul	r6, r7\n\t"
134116 #endif
134117 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134118         "lsrs	r7, r6, #16\n\t"
134119 #else
134120         "lsr	r7, r6, #16\n\t"
134121 #endif
134122 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134123         "lsls	r6, r6, #16\n\t"
134124 #else
134125         "lsl	r6, r6, #16\n\t"
134126 #endif
134127 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134128         "adds	r5, r5, r6\n\t"
134129 #else
134130         "add	r5, r5, r6\n\t"
134131 #endif
134132 #ifdef WOLFSSL_KEIL
134133         "adcs	r3, r3, r7\n\t"
134134 #elif defined(__clang__)
134135         "adcs	r3, r7\n\t"
134136 #else
134137         "adc	r3, r7\n\t"
134138 #endif
134139 #ifdef WOLFSSL_KEIL
134140         "adcs	r4, r4, %[r]\n\t"
134141 #elif defined(__clang__)
134142         "adcs	r4, %[r]\n\t"
134143 #else
134144         "adc	r4, %[r]\n\t"
134145 #endif
134146         "#  A[5] * B[9]\n\t"
134147         "mov	%[a], r9\n\t"
134148         "mov	%[b], r10\n\t"
134149         "ldr	%[a], [%[a], #20]\n\t"
134150         "ldr	%[b], [%[b], #36]\n\t"
134151         "uxth	r6, %[a]\n\t"
134152         "uxth	r7, %[b]\n\t"
134153 #ifdef WOLFSSL_KEIL
134154         "muls	r7, r6, r7\n\t"
134155 #elif defined(__clang__)
134156         "muls	r7, r6\n\t"
134157 #else
134158         "mul	r7, r6\n\t"
134159 #endif
134160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134161         "adds	r5, r5, r7\n\t"
134162 #else
134163         "add	r5, r5, r7\n\t"
134164 #endif
134165 #ifdef WOLFSSL_KEIL
134166         "adcs	r3, r3, %[r]\n\t"
134167 #elif defined(__clang__)
134168         "adcs	r3, %[r]\n\t"
134169 #else
134170         "adc	r3, %[r]\n\t"
134171 #endif
134172 #ifdef WOLFSSL_KEIL
134173         "adcs	r4, r4, %[r]\n\t"
134174 #elif defined(__clang__)
134175         "adcs	r4, %[r]\n\t"
134176 #else
134177         "adc	r4, %[r]\n\t"
134178 #endif
134179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134180         "lsrs	r7, %[b], #16\n\t"
134181 #else
134182         "lsr	r7, %[b], #16\n\t"
134183 #endif
134184 #ifdef WOLFSSL_KEIL
134185         "muls	r6, r7, r6\n\t"
134186 #elif defined(__clang__)
134187         "muls	r6, r7\n\t"
134188 #else
134189         "mul	r6, r7\n\t"
134190 #endif
134191 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134192         "lsrs	r7, r6, #16\n\t"
134193 #else
134194         "lsr	r7, r6, #16\n\t"
134195 #endif
134196 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134197         "lsls	r6, r6, #16\n\t"
134198 #else
134199         "lsl	r6, r6, #16\n\t"
134200 #endif
134201 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134202         "adds	r5, r5, r6\n\t"
134203 #else
134204         "add	r5, r5, r6\n\t"
134205 #endif
134206 #ifdef WOLFSSL_KEIL
134207         "adcs	r3, r3, r7\n\t"
134208 #elif defined(__clang__)
134209         "adcs	r3, r7\n\t"
134210 #else
134211         "adc	r3, r7\n\t"
134212 #endif
134213 #ifdef WOLFSSL_KEIL
134214         "adcs	r4, r4, %[r]\n\t"
134215 #elif defined(__clang__)
134216         "adcs	r4, %[r]\n\t"
134217 #else
134218         "adc	r4, %[r]\n\t"
134219 #endif
134220 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134221         "lsrs	r6, %[a], #16\n\t"
134222 #else
134223         "lsr	r6, %[a], #16\n\t"
134224 #endif
134225 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134226         "lsrs	r7, %[b], #16\n\t"
134227 #else
134228         "lsr	r7, %[b], #16\n\t"
134229 #endif
134230 #ifdef WOLFSSL_KEIL
134231         "muls	r7, r6, r7\n\t"
134232 #elif defined(__clang__)
134233         "muls	r7, r6\n\t"
134234 #else
134235         "mul	r7, r6\n\t"
134236 #endif
134237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134238         "adds	r3, r3, r7\n\t"
134239 #else
134240         "add	r3, r3, r7\n\t"
134241 #endif
134242 #ifdef WOLFSSL_KEIL
134243         "adcs	r4, r4, %[r]\n\t"
134244 #elif defined(__clang__)
134245         "adcs	r4, %[r]\n\t"
134246 #else
134247         "adc	r4, %[r]\n\t"
134248 #endif
134249         "uxth	r7, %[b]\n\t"
134250 #ifdef WOLFSSL_KEIL
134251         "muls	r6, r7, r6\n\t"
134252 #elif defined(__clang__)
134253         "muls	r6, r7\n\t"
134254 #else
134255         "mul	r6, r7\n\t"
134256 #endif
134257 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134258         "lsrs	r7, r6, #16\n\t"
134259 #else
134260         "lsr	r7, r6, #16\n\t"
134261 #endif
134262 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134263         "lsls	r6, r6, #16\n\t"
134264 #else
134265         "lsl	r6, r6, #16\n\t"
134266 #endif
134267 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134268         "adds	r5, r5, r6\n\t"
134269 #else
134270         "add	r5, r5, r6\n\t"
134271 #endif
134272 #ifdef WOLFSSL_KEIL
134273         "adcs	r3, r3, r7\n\t"
134274 #elif defined(__clang__)
134275         "adcs	r3, r7\n\t"
134276 #else
134277         "adc	r3, r7\n\t"
134278 #endif
134279 #ifdef WOLFSSL_KEIL
134280         "adcs	r4, r4, %[r]\n\t"
134281 #elif defined(__clang__)
134282         "adcs	r4, %[r]\n\t"
134283 #else
134284         "adc	r4, %[r]\n\t"
134285 #endif
134286         "#  A[4] * B[10]\n\t"
134287         "mov	%[a], r9\n\t"
134288         "mov	%[b], r10\n\t"
134289         "ldr	%[a], [%[a], #16]\n\t"
134290         "ldr	%[b], [%[b], #40]\n\t"
134291         "uxth	r6, %[a]\n\t"
134292         "uxth	r7, %[b]\n\t"
134293 #ifdef WOLFSSL_KEIL
134294         "muls	r7, r6, r7\n\t"
134295 #elif defined(__clang__)
134296         "muls	r7, r6\n\t"
134297 #else
134298         "mul	r7, r6\n\t"
134299 #endif
134300 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134301         "adds	r5, r5, r7\n\t"
134302 #else
134303         "add	r5, r5, r7\n\t"
134304 #endif
134305 #ifdef WOLFSSL_KEIL
134306         "adcs	r3, r3, %[r]\n\t"
134307 #elif defined(__clang__)
134308         "adcs	r3, %[r]\n\t"
134309 #else
134310         "adc	r3, %[r]\n\t"
134311 #endif
134312 #ifdef WOLFSSL_KEIL
134313         "adcs	r4, r4, %[r]\n\t"
134314 #elif defined(__clang__)
134315         "adcs	r4, %[r]\n\t"
134316 #else
134317         "adc	r4, %[r]\n\t"
134318 #endif
134319 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134320         "lsrs	r7, %[b], #16\n\t"
134321 #else
134322         "lsr	r7, %[b], #16\n\t"
134323 #endif
134324 #ifdef WOLFSSL_KEIL
134325         "muls	r6, r7, r6\n\t"
134326 #elif defined(__clang__)
134327         "muls	r6, r7\n\t"
134328 #else
134329         "mul	r6, r7\n\t"
134330 #endif
134331 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134332         "lsrs	r7, r6, #16\n\t"
134333 #else
134334         "lsr	r7, r6, #16\n\t"
134335 #endif
134336 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134337         "lsls	r6, r6, #16\n\t"
134338 #else
134339         "lsl	r6, r6, #16\n\t"
134340 #endif
134341 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134342         "adds	r5, r5, r6\n\t"
134343 #else
134344         "add	r5, r5, r6\n\t"
134345 #endif
134346 #ifdef WOLFSSL_KEIL
134347         "adcs	r3, r3, r7\n\t"
134348 #elif defined(__clang__)
134349         "adcs	r3, r7\n\t"
134350 #else
134351         "adc	r3, r7\n\t"
134352 #endif
134353 #ifdef WOLFSSL_KEIL
134354         "adcs	r4, r4, %[r]\n\t"
134355 #elif defined(__clang__)
134356         "adcs	r4, %[r]\n\t"
134357 #else
134358         "adc	r4, %[r]\n\t"
134359 #endif
134360 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134361         "lsrs	r6, %[a], #16\n\t"
134362 #else
134363         "lsr	r6, %[a], #16\n\t"
134364 #endif
134365 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134366         "lsrs	r7, %[b], #16\n\t"
134367 #else
134368         "lsr	r7, %[b], #16\n\t"
134369 #endif
134370 #ifdef WOLFSSL_KEIL
134371         "muls	r7, r6, r7\n\t"
134372 #elif defined(__clang__)
134373         "muls	r7, r6\n\t"
134374 #else
134375         "mul	r7, r6\n\t"
134376 #endif
134377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134378         "adds	r3, r3, r7\n\t"
134379 #else
134380         "add	r3, r3, r7\n\t"
134381 #endif
134382 #ifdef WOLFSSL_KEIL
134383         "adcs	r4, r4, %[r]\n\t"
134384 #elif defined(__clang__)
134385         "adcs	r4, %[r]\n\t"
134386 #else
134387         "adc	r4, %[r]\n\t"
134388 #endif
134389         "uxth	r7, %[b]\n\t"
134390 #ifdef WOLFSSL_KEIL
134391         "muls	r6, r7, r6\n\t"
134392 #elif defined(__clang__)
134393         "muls	r6, r7\n\t"
134394 #else
134395         "mul	r6, r7\n\t"
134396 #endif
134397 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134398         "lsrs	r7, r6, #16\n\t"
134399 #else
134400         "lsr	r7, r6, #16\n\t"
134401 #endif
134402 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134403         "lsls	r6, r6, #16\n\t"
134404 #else
134405         "lsl	r6, r6, #16\n\t"
134406 #endif
134407 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134408         "adds	r5, r5, r6\n\t"
134409 #else
134410         "add	r5, r5, r6\n\t"
134411 #endif
134412 #ifdef WOLFSSL_KEIL
134413         "adcs	r3, r3, r7\n\t"
134414 #elif defined(__clang__)
134415         "adcs	r3, r7\n\t"
134416 #else
134417         "adc	r3, r7\n\t"
134418 #endif
134419 #ifdef WOLFSSL_KEIL
134420         "adcs	r4, r4, %[r]\n\t"
134421 #elif defined(__clang__)
134422         "adcs	r4, %[r]\n\t"
134423 #else
134424         "adc	r4, %[r]\n\t"
134425 #endif
134426         "#  A[3] * B[11]\n\t"
134427         "mov	%[a], r9\n\t"
134428         "mov	%[b], r10\n\t"
134429         "ldr	%[a], [%[a], #12]\n\t"
134430         "ldr	%[b], [%[b], #44]\n\t"
134431         "uxth	r6, %[a]\n\t"
134432         "uxth	r7, %[b]\n\t"
134433 #ifdef WOLFSSL_KEIL
134434         "muls	r7, r6, r7\n\t"
134435 #elif defined(__clang__)
134436         "muls	r7, r6\n\t"
134437 #else
134438         "mul	r7, r6\n\t"
134439 #endif
134440 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134441         "adds	r5, r5, r7\n\t"
134442 #else
134443         "add	r5, r5, r7\n\t"
134444 #endif
134445 #ifdef WOLFSSL_KEIL
134446         "adcs	r3, r3, %[r]\n\t"
134447 #elif defined(__clang__)
134448         "adcs	r3, %[r]\n\t"
134449 #else
134450         "adc	r3, %[r]\n\t"
134451 #endif
134452 #ifdef WOLFSSL_KEIL
134453         "adcs	r4, r4, %[r]\n\t"
134454 #elif defined(__clang__)
134455         "adcs	r4, %[r]\n\t"
134456 #else
134457         "adc	r4, %[r]\n\t"
134458 #endif
134459 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134460         "lsrs	r7, %[b], #16\n\t"
134461 #else
134462         "lsr	r7, %[b], #16\n\t"
134463 #endif
134464 #ifdef WOLFSSL_KEIL
134465         "muls	r6, r7, r6\n\t"
134466 #elif defined(__clang__)
134467         "muls	r6, r7\n\t"
134468 #else
134469         "mul	r6, r7\n\t"
134470 #endif
134471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134472         "lsrs	r7, r6, #16\n\t"
134473 #else
134474         "lsr	r7, r6, #16\n\t"
134475 #endif
134476 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134477         "lsls	r6, r6, #16\n\t"
134478 #else
134479         "lsl	r6, r6, #16\n\t"
134480 #endif
134481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134482         "adds	r5, r5, r6\n\t"
134483 #else
134484         "add	r5, r5, r6\n\t"
134485 #endif
134486 #ifdef WOLFSSL_KEIL
134487         "adcs	r3, r3, r7\n\t"
134488 #elif defined(__clang__)
134489         "adcs	r3, r7\n\t"
134490 #else
134491         "adc	r3, r7\n\t"
134492 #endif
134493 #ifdef WOLFSSL_KEIL
134494         "adcs	r4, r4, %[r]\n\t"
134495 #elif defined(__clang__)
134496         "adcs	r4, %[r]\n\t"
134497 #else
134498         "adc	r4, %[r]\n\t"
134499 #endif
134500 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134501         "lsrs	r6, %[a], #16\n\t"
134502 #else
134503         "lsr	r6, %[a], #16\n\t"
134504 #endif
134505 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134506         "lsrs	r7, %[b], #16\n\t"
134507 #else
134508         "lsr	r7, %[b], #16\n\t"
134509 #endif
134510 #ifdef WOLFSSL_KEIL
134511         "muls	r7, r6, r7\n\t"
134512 #elif defined(__clang__)
134513         "muls	r7, r6\n\t"
134514 #else
134515         "mul	r7, r6\n\t"
134516 #endif
134517 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134518         "adds	r3, r3, r7\n\t"
134519 #else
134520         "add	r3, r3, r7\n\t"
134521 #endif
134522 #ifdef WOLFSSL_KEIL
134523         "adcs	r4, r4, %[r]\n\t"
134524 #elif defined(__clang__)
134525         "adcs	r4, %[r]\n\t"
134526 #else
134527         "adc	r4, %[r]\n\t"
134528 #endif
134529         "uxth	r7, %[b]\n\t"
134530 #ifdef WOLFSSL_KEIL
134531         "muls	r6, r7, r6\n\t"
134532 #elif defined(__clang__)
134533         "muls	r6, r7\n\t"
134534 #else
134535         "mul	r6, r7\n\t"
134536 #endif
134537 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134538         "lsrs	r7, r6, #16\n\t"
134539 #else
134540         "lsr	r7, r6, #16\n\t"
134541 #endif
134542 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134543         "lsls	r6, r6, #16\n\t"
134544 #else
134545         "lsl	r6, r6, #16\n\t"
134546 #endif
134547 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134548         "adds	r5, r5, r6\n\t"
134549 #else
134550         "add	r5, r5, r6\n\t"
134551 #endif
134552 #ifdef WOLFSSL_KEIL
134553         "adcs	r3, r3, r7\n\t"
134554 #elif defined(__clang__)
134555         "adcs	r3, r7\n\t"
134556 #else
134557         "adc	r3, r7\n\t"
134558 #endif
134559 #ifdef WOLFSSL_KEIL
134560         "adcs	r4, r4, %[r]\n\t"
134561 #elif defined(__clang__)
134562         "adcs	r4, %[r]\n\t"
134563 #else
134564         "adc	r4, %[r]\n\t"
134565 #endif
134566         "#  A[2] * B[12]\n\t"
134567         "mov	%[a], r9\n\t"
134568         "mov	%[b], r10\n\t"
134569         "ldr	%[a], [%[a], #8]\n\t"
134570         "ldr	%[b], [%[b], #48]\n\t"
134571         "uxth	r6, %[a]\n\t"
134572         "uxth	r7, %[b]\n\t"
134573 #ifdef WOLFSSL_KEIL
134574         "muls	r7, r6, r7\n\t"
134575 #elif defined(__clang__)
134576         "muls	r7, r6\n\t"
134577 #else
134578         "mul	r7, r6\n\t"
134579 #endif
134580 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134581         "adds	r5, r5, r7\n\t"
134582 #else
134583         "add	r5, r5, r7\n\t"
134584 #endif
134585 #ifdef WOLFSSL_KEIL
134586         "adcs	r3, r3, %[r]\n\t"
134587 #elif defined(__clang__)
134588         "adcs	r3, %[r]\n\t"
134589 #else
134590         "adc	r3, %[r]\n\t"
134591 #endif
134592 #ifdef WOLFSSL_KEIL
134593         "adcs	r4, r4, %[r]\n\t"
134594 #elif defined(__clang__)
134595         "adcs	r4, %[r]\n\t"
134596 #else
134597         "adc	r4, %[r]\n\t"
134598 #endif
134599 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134600         "lsrs	r7, %[b], #16\n\t"
134601 #else
134602         "lsr	r7, %[b], #16\n\t"
134603 #endif
134604 #ifdef WOLFSSL_KEIL
134605         "muls	r6, r7, r6\n\t"
134606 #elif defined(__clang__)
134607         "muls	r6, r7\n\t"
134608 #else
134609         "mul	r6, r7\n\t"
134610 #endif
134611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134612         "lsrs	r7, r6, #16\n\t"
134613 #else
134614         "lsr	r7, r6, #16\n\t"
134615 #endif
134616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134617         "lsls	r6, r6, #16\n\t"
134618 #else
134619         "lsl	r6, r6, #16\n\t"
134620 #endif
134621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134622         "adds	r5, r5, r6\n\t"
134623 #else
134624         "add	r5, r5, r6\n\t"
134625 #endif
134626 #ifdef WOLFSSL_KEIL
134627         "adcs	r3, r3, r7\n\t"
134628 #elif defined(__clang__)
134629         "adcs	r3, r7\n\t"
134630 #else
134631         "adc	r3, r7\n\t"
134632 #endif
134633 #ifdef WOLFSSL_KEIL
134634         "adcs	r4, r4, %[r]\n\t"
134635 #elif defined(__clang__)
134636         "adcs	r4, %[r]\n\t"
134637 #else
134638         "adc	r4, %[r]\n\t"
134639 #endif
134640 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134641         "lsrs	r6, %[a], #16\n\t"
134642 #else
134643         "lsr	r6, %[a], #16\n\t"
134644 #endif
134645 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134646         "lsrs	r7, %[b], #16\n\t"
134647 #else
134648         "lsr	r7, %[b], #16\n\t"
134649 #endif
134650 #ifdef WOLFSSL_KEIL
134651         "muls	r7, r6, r7\n\t"
134652 #elif defined(__clang__)
134653         "muls	r7, r6\n\t"
134654 #else
134655         "mul	r7, r6\n\t"
134656 #endif
134657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134658         "adds	r3, r3, r7\n\t"
134659 #else
134660         "add	r3, r3, r7\n\t"
134661 #endif
134662 #ifdef WOLFSSL_KEIL
134663         "adcs	r4, r4, %[r]\n\t"
134664 #elif defined(__clang__)
134665         "adcs	r4, %[r]\n\t"
134666 #else
134667         "adc	r4, %[r]\n\t"
134668 #endif
134669         "uxth	r7, %[b]\n\t"
134670 #ifdef WOLFSSL_KEIL
134671         "muls	r6, r7, r6\n\t"
134672 #elif defined(__clang__)
134673         "muls	r6, r7\n\t"
134674 #else
134675         "mul	r6, r7\n\t"
134676 #endif
134677 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134678         "lsrs	r7, r6, #16\n\t"
134679 #else
134680         "lsr	r7, r6, #16\n\t"
134681 #endif
134682 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134683         "lsls	r6, r6, #16\n\t"
134684 #else
134685         "lsl	r6, r6, #16\n\t"
134686 #endif
134687 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134688         "adds	r5, r5, r6\n\t"
134689 #else
134690         "add	r5, r5, r6\n\t"
134691 #endif
134692 #ifdef WOLFSSL_KEIL
134693         "adcs	r3, r3, r7\n\t"
134694 #elif defined(__clang__)
134695         "adcs	r3, r7\n\t"
134696 #else
134697         "adc	r3, r7\n\t"
134698 #endif
134699 #ifdef WOLFSSL_KEIL
134700         "adcs	r4, r4, %[r]\n\t"
134701 #elif defined(__clang__)
134702         "adcs	r4, %[r]\n\t"
134703 #else
134704         "adc	r4, %[r]\n\t"
134705 #endif
134706         "#  A[1] * B[13]\n\t"
134707         "mov	%[a], r9\n\t"
134708         "mov	%[b], r10\n\t"
134709         "ldr	%[a], [%[a], #4]\n\t"
134710         "ldr	%[b], [%[b], #52]\n\t"
134711         "uxth	r6, %[a]\n\t"
134712         "uxth	r7, %[b]\n\t"
134713 #ifdef WOLFSSL_KEIL
134714         "muls	r7, r6, r7\n\t"
134715 #elif defined(__clang__)
134716         "muls	r7, r6\n\t"
134717 #else
134718         "mul	r7, r6\n\t"
134719 #endif
134720 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134721         "adds	r5, r5, r7\n\t"
134722 #else
134723         "add	r5, r5, r7\n\t"
134724 #endif
134725 #ifdef WOLFSSL_KEIL
134726         "adcs	r3, r3, %[r]\n\t"
134727 #elif defined(__clang__)
134728         "adcs	r3, %[r]\n\t"
134729 #else
134730         "adc	r3, %[r]\n\t"
134731 #endif
134732 #ifdef WOLFSSL_KEIL
134733         "adcs	r4, r4, %[r]\n\t"
134734 #elif defined(__clang__)
134735         "adcs	r4, %[r]\n\t"
134736 #else
134737         "adc	r4, %[r]\n\t"
134738 #endif
134739 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134740         "lsrs	r7, %[b], #16\n\t"
134741 #else
134742         "lsr	r7, %[b], #16\n\t"
134743 #endif
134744 #ifdef WOLFSSL_KEIL
134745         "muls	r6, r7, r6\n\t"
134746 #elif defined(__clang__)
134747         "muls	r6, r7\n\t"
134748 #else
134749         "mul	r6, r7\n\t"
134750 #endif
134751 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134752         "lsrs	r7, r6, #16\n\t"
134753 #else
134754         "lsr	r7, r6, #16\n\t"
134755 #endif
134756 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134757         "lsls	r6, r6, #16\n\t"
134758 #else
134759         "lsl	r6, r6, #16\n\t"
134760 #endif
134761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134762         "adds	r5, r5, r6\n\t"
134763 #else
134764         "add	r5, r5, r6\n\t"
134765 #endif
134766 #ifdef WOLFSSL_KEIL
134767         "adcs	r3, r3, r7\n\t"
134768 #elif defined(__clang__)
134769         "adcs	r3, r7\n\t"
134770 #else
134771         "adc	r3, r7\n\t"
134772 #endif
134773 #ifdef WOLFSSL_KEIL
134774         "adcs	r4, r4, %[r]\n\t"
134775 #elif defined(__clang__)
134776         "adcs	r4, %[r]\n\t"
134777 #else
134778         "adc	r4, %[r]\n\t"
134779 #endif
134780 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134781         "lsrs	r6, %[a], #16\n\t"
134782 #else
134783         "lsr	r6, %[a], #16\n\t"
134784 #endif
134785 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134786         "lsrs	r7, %[b], #16\n\t"
134787 #else
134788         "lsr	r7, %[b], #16\n\t"
134789 #endif
134790 #ifdef WOLFSSL_KEIL
134791         "muls	r7, r6, r7\n\t"
134792 #elif defined(__clang__)
134793         "muls	r7, r6\n\t"
134794 #else
134795         "mul	r7, r6\n\t"
134796 #endif
134797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134798         "adds	r3, r3, r7\n\t"
134799 #else
134800         "add	r3, r3, r7\n\t"
134801 #endif
134802 #ifdef WOLFSSL_KEIL
134803         "adcs	r4, r4, %[r]\n\t"
134804 #elif defined(__clang__)
134805         "adcs	r4, %[r]\n\t"
134806 #else
134807         "adc	r4, %[r]\n\t"
134808 #endif
134809         "uxth	r7, %[b]\n\t"
134810 #ifdef WOLFSSL_KEIL
134811         "muls	r6, r7, r6\n\t"
134812 #elif defined(__clang__)
134813         "muls	r6, r7\n\t"
134814 #else
134815         "mul	r6, r7\n\t"
134816 #endif
134817 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134818         "lsrs	r7, r6, #16\n\t"
134819 #else
134820         "lsr	r7, r6, #16\n\t"
134821 #endif
134822 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134823         "lsls	r6, r6, #16\n\t"
134824 #else
134825         "lsl	r6, r6, #16\n\t"
134826 #endif
134827 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134828         "adds	r5, r5, r6\n\t"
134829 #else
134830         "add	r5, r5, r6\n\t"
134831 #endif
134832 #ifdef WOLFSSL_KEIL
134833         "adcs	r3, r3, r7\n\t"
134834 #elif defined(__clang__)
134835         "adcs	r3, r7\n\t"
134836 #else
134837         "adc	r3, r7\n\t"
134838 #endif
134839 #ifdef WOLFSSL_KEIL
134840         "adcs	r4, r4, %[r]\n\t"
134841 #elif defined(__clang__)
134842         "adcs	r4, %[r]\n\t"
134843 #else
134844         "adc	r4, %[r]\n\t"
134845 #endif
134846         "#  A[0] * B[14]\n\t"
134847         "mov	%[a], r9\n\t"
134848         "mov	%[b], r10\n\t"
134849         "ldr	%[a], [%[a]]\n\t"
134850         "ldr	%[b], [%[b], #56]\n\t"
134851         "uxth	r6, %[a]\n\t"
134852         "uxth	r7, %[b]\n\t"
134853 #ifdef WOLFSSL_KEIL
134854         "muls	r7, r6, r7\n\t"
134855 #elif defined(__clang__)
134856         "muls	r7, r6\n\t"
134857 #else
134858         "mul	r7, r6\n\t"
134859 #endif
134860 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134861         "adds	r5, r5, r7\n\t"
134862 #else
134863         "add	r5, r5, r7\n\t"
134864 #endif
134865 #ifdef WOLFSSL_KEIL
134866         "adcs	r3, r3, %[r]\n\t"
134867 #elif defined(__clang__)
134868         "adcs	r3, %[r]\n\t"
134869 #else
134870         "adc	r3, %[r]\n\t"
134871 #endif
134872 #ifdef WOLFSSL_KEIL
134873         "adcs	r4, r4, %[r]\n\t"
134874 #elif defined(__clang__)
134875         "adcs	r4, %[r]\n\t"
134876 #else
134877         "adc	r4, %[r]\n\t"
134878 #endif
134879 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134880         "lsrs	r7, %[b], #16\n\t"
134881 #else
134882         "lsr	r7, %[b], #16\n\t"
134883 #endif
134884 #ifdef WOLFSSL_KEIL
134885         "muls	r6, r7, r6\n\t"
134886 #elif defined(__clang__)
134887         "muls	r6, r7\n\t"
134888 #else
134889         "mul	r6, r7\n\t"
134890 #endif
134891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134892         "lsrs	r7, r6, #16\n\t"
134893 #else
134894         "lsr	r7, r6, #16\n\t"
134895 #endif
134896 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134897         "lsls	r6, r6, #16\n\t"
134898 #else
134899         "lsl	r6, r6, #16\n\t"
134900 #endif
134901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134902         "adds	r5, r5, r6\n\t"
134903 #else
134904         "add	r5, r5, r6\n\t"
134905 #endif
134906 #ifdef WOLFSSL_KEIL
134907         "adcs	r3, r3, r7\n\t"
134908 #elif defined(__clang__)
134909         "adcs	r3, r7\n\t"
134910 #else
134911         "adc	r3, r7\n\t"
134912 #endif
134913 #ifdef WOLFSSL_KEIL
134914         "adcs	r4, r4, %[r]\n\t"
134915 #elif defined(__clang__)
134916         "adcs	r4, %[r]\n\t"
134917 #else
134918         "adc	r4, %[r]\n\t"
134919 #endif
134920 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134921         "lsrs	r6, %[a], #16\n\t"
134922 #else
134923         "lsr	r6, %[a], #16\n\t"
134924 #endif
134925 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134926         "lsrs	r7, %[b], #16\n\t"
134927 #else
134928         "lsr	r7, %[b], #16\n\t"
134929 #endif
134930 #ifdef WOLFSSL_KEIL
134931         "muls	r7, r6, r7\n\t"
134932 #elif defined(__clang__)
134933         "muls	r7, r6\n\t"
134934 #else
134935         "mul	r7, r6\n\t"
134936 #endif
134937 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134938         "adds	r3, r3, r7\n\t"
134939 #else
134940         "add	r3, r3, r7\n\t"
134941 #endif
134942 #ifdef WOLFSSL_KEIL
134943         "adcs	r4, r4, %[r]\n\t"
134944 #elif defined(__clang__)
134945         "adcs	r4, %[r]\n\t"
134946 #else
134947         "adc	r4, %[r]\n\t"
134948 #endif
134949         "uxth	r7, %[b]\n\t"
134950 #ifdef WOLFSSL_KEIL
134951         "muls	r6, r7, r6\n\t"
134952 #elif defined(__clang__)
134953         "muls	r6, r7\n\t"
134954 #else
134955         "mul	r6, r7\n\t"
134956 #endif
134957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134958         "lsrs	r7, r6, #16\n\t"
134959 #else
134960         "lsr	r7, r6, #16\n\t"
134961 #endif
134962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134963         "lsls	r6, r6, #16\n\t"
134964 #else
134965         "lsl	r6, r6, #16\n\t"
134966 #endif
134967 #if defined(__clang__) || defined(WOLFSSL_KEIL)
134968         "adds	r5, r5, r6\n\t"
134969 #else
134970         "add	r5, r5, r6\n\t"
134971 #endif
134972 #ifdef WOLFSSL_KEIL
134973         "adcs	r3, r3, r7\n\t"
134974 #elif defined(__clang__)
134975         "adcs	r3, r7\n\t"
134976 #else
134977         "adc	r3, r7\n\t"
134978 #endif
134979 #ifdef WOLFSSL_KEIL
134980         "adcs	r4, r4, %[r]\n\t"
134981 #elif defined(__clang__)
134982         "adcs	r4, %[r]\n\t"
134983 #else
134984         "adc	r4, %[r]\n\t"
134985 #endif
134986         "str	r5, [sp, #56]\n\t"
134987         "#  A[0] * B[15]\n\t"
134988         "movs	r5, #0\n\t"
134989         "mov	%[a], r9\n\t"
134990         "mov	%[b], r10\n\t"
134991         "ldr	%[a], [%[a]]\n\t"
134992         "ldr	%[b], [%[b], #60]\n\t"
134993         "uxth	r6, %[a]\n\t"
134994         "uxth	r7, %[b]\n\t"
134995 #ifdef WOLFSSL_KEIL
134996         "muls	r7, r6, r7\n\t"
134997 #elif defined(__clang__)
134998         "muls	r7, r6\n\t"
134999 #else
135000         "mul	r7, r6\n\t"
135001 #endif
135002 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135003         "adds	r3, r3, r7\n\t"
135004 #else
135005         "add	r3, r3, r7\n\t"
135006 #endif
135007 #ifdef WOLFSSL_KEIL
135008         "adcs	r4, r4, %[r]\n\t"
135009 #elif defined(__clang__)
135010         "adcs	r4, %[r]\n\t"
135011 #else
135012         "adc	r4, %[r]\n\t"
135013 #endif
135014 #ifdef WOLFSSL_KEIL
135015         "adcs	r5, r5, %[r]\n\t"
135016 #elif defined(__clang__)
135017         "adcs	r5, %[r]\n\t"
135018 #else
135019         "adc	r5, %[r]\n\t"
135020 #endif
135021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135022         "lsrs	r7, %[b], #16\n\t"
135023 #else
135024         "lsr	r7, %[b], #16\n\t"
135025 #endif
135026 #ifdef WOLFSSL_KEIL
135027         "muls	r6, r7, r6\n\t"
135028 #elif defined(__clang__)
135029         "muls	r6, r7\n\t"
135030 #else
135031         "mul	r6, r7\n\t"
135032 #endif
135033 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135034         "lsrs	r7, r6, #16\n\t"
135035 #else
135036         "lsr	r7, r6, #16\n\t"
135037 #endif
135038 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135039         "lsls	r6, r6, #16\n\t"
135040 #else
135041         "lsl	r6, r6, #16\n\t"
135042 #endif
135043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135044         "adds	r3, r3, r6\n\t"
135045 #else
135046         "add	r3, r3, r6\n\t"
135047 #endif
135048 #ifdef WOLFSSL_KEIL
135049         "adcs	r4, r4, r7\n\t"
135050 #elif defined(__clang__)
135051         "adcs	r4, r7\n\t"
135052 #else
135053         "adc	r4, r7\n\t"
135054 #endif
135055 #ifdef WOLFSSL_KEIL
135056         "adcs	r5, r5, %[r]\n\t"
135057 #elif defined(__clang__)
135058         "adcs	r5, %[r]\n\t"
135059 #else
135060         "adc	r5, %[r]\n\t"
135061 #endif
135062 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135063         "lsrs	r6, %[a], #16\n\t"
135064 #else
135065         "lsr	r6, %[a], #16\n\t"
135066 #endif
135067 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135068         "lsrs	r7, %[b], #16\n\t"
135069 #else
135070         "lsr	r7, %[b], #16\n\t"
135071 #endif
135072 #ifdef WOLFSSL_KEIL
135073         "muls	r7, r6, r7\n\t"
135074 #elif defined(__clang__)
135075         "muls	r7, r6\n\t"
135076 #else
135077         "mul	r7, r6\n\t"
135078 #endif
135079 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135080         "adds	r4, r4, r7\n\t"
135081 #else
135082         "add	r4, r4, r7\n\t"
135083 #endif
135084 #ifdef WOLFSSL_KEIL
135085         "adcs	r5, r5, %[r]\n\t"
135086 #elif defined(__clang__)
135087         "adcs	r5, %[r]\n\t"
135088 #else
135089         "adc	r5, %[r]\n\t"
135090 #endif
135091         "uxth	r7, %[b]\n\t"
135092 #ifdef WOLFSSL_KEIL
135093         "muls	r6, r7, r6\n\t"
135094 #elif defined(__clang__)
135095         "muls	r6, r7\n\t"
135096 #else
135097         "mul	r6, r7\n\t"
135098 #endif
135099 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135100         "lsrs	r7, r6, #16\n\t"
135101 #else
135102         "lsr	r7, r6, #16\n\t"
135103 #endif
135104 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135105         "lsls	r6, r6, #16\n\t"
135106 #else
135107         "lsl	r6, r6, #16\n\t"
135108 #endif
135109 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135110         "adds	r3, r3, r6\n\t"
135111 #else
135112         "add	r3, r3, r6\n\t"
135113 #endif
135114 #ifdef WOLFSSL_KEIL
135115         "adcs	r4, r4, r7\n\t"
135116 #elif defined(__clang__)
135117         "adcs	r4, r7\n\t"
135118 #else
135119         "adc	r4, r7\n\t"
135120 #endif
135121 #ifdef WOLFSSL_KEIL
135122         "adcs	r5, r5, %[r]\n\t"
135123 #elif defined(__clang__)
135124         "adcs	r5, %[r]\n\t"
135125 #else
135126         "adc	r5, %[r]\n\t"
135127 #endif
135128         "#  A[1] * B[14]\n\t"
135129         "mov	%[a], r9\n\t"
135130         "mov	%[b], r10\n\t"
135131         "ldr	%[a], [%[a], #4]\n\t"
135132         "ldr	%[b], [%[b], #56]\n\t"
135133         "uxth	r6, %[a]\n\t"
135134         "uxth	r7, %[b]\n\t"
135135 #ifdef WOLFSSL_KEIL
135136         "muls	r7, r6, r7\n\t"
135137 #elif defined(__clang__)
135138         "muls	r7, r6\n\t"
135139 #else
135140         "mul	r7, r6\n\t"
135141 #endif
135142 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135143         "adds	r3, r3, r7\n\t"
135144 #else
135145         "add	r3, r3, r7\n\t"
135146 #endif
135147 #ifdef WOLFSSL_KEIL
135148         "adcs	r4, r4, %[r]\n\t"
135149 #elif defined(__clang__)
135150         "adcs	r4, %[r]\n\t"
135151 #else
135152         "adc	r4, %[r]\n\t"
135153 #endif
135154 #ifdef WOLFSSL_KEIL
135155         "adcs	r5, r5, %[r]\n\t"
135156 #elif defined(__clang__)
135157         "adcs	r5, %[r]\n\t"
135158 #else
135159         "adc	r5, %[r]\n\t"
135160 #endif
135161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135162         "lsrs	r7, %[b], #16\n\t"
135163 #else
135164         "lsr	r7, %[b], #16\n\t"
135165 #endif
135166 #ifdef WOLFSSL_KEIL
135167         "muls	r6, r7, r6\n\t"
135168 #elif defined(__clang__)
135169         "muls	r6, r7\n\t"
135170 #else
135171         "mul	r6, r7\n\t"
135172 #endif
135173 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135174         "lsrs	r7, r6, #16\n\t"
135175 #else
135176         "lsr	r7, r6, #16\n\t"
135177 #endif
135178 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135179         "lsls	r6, r6, #16\n\t"
135180 #else
135181         "lsl	r6, r6, #16\n\t"
135182 #endif
135183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135184         "adds	r3, r3, r6\n\t"
135185 #else
135186         "add	r3, r3, r6\n\t"
135187 #endif
135188 #ifdef WOLFSSL_KEIL
135189         "adcs	r4, r4, r7\n\t"
135190 #elif defined(__clang__)
135191         "adcs	r4, r7\n\t"
135192 #else
135193         "adc	r4, r7\n\t"
135194 #endif
135195 #ifdef WOLFSSL_KEIL
135196         "adcs	r5, r5, %[r]\n\t"
135197 #elif defined(__clang__)
135198         "adcs	r5, %[r]\n\t"
135199 #else
135200         "adc	r5, %[r]\n\t"
135201 #endif
135202 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135203         "lsrs	r6, %[a], #16\n\t"
135204 #else
135205         "lsr	r6, %[a], #16\n\t"
135206 #endif
135207 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135208         "lsrs	r7, %[b], #16\n\t"
135209 #else
135210         "lsr	r7, %[b], #16\n\t"
135211 #endif
135212 #ifdef WOLFSSL_KEIL
135213         "muls	r7, r6, r7\n\t"
135214 #elif defined(__clang__)
135215         "muls	r7, r6\n\t"
135216 #else
135217         "mul	r7, r6\n\t"
135218 #endif
135219 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135220         "adds	r4, r4, r7\n\t"
135221 #else
135222         "add	r4, r4, r7\n\t"
135223 #endif
135224 #ifdef WOLFSSL_KEIL
135225         "adcs	r5, r5, %[r]\n\t"
135226 #elif defined(__clang__)
135227         "adcs	r5, %[r]\n\t"
135228 #else
135229         "adc	r5, %[r]\n\t"
135230 #endif
135231         "uxth	r7, %[b]\n\t"
135232 #ifdef WOLFSSL_KEIL
135233         "muls	r6, r7, r6\n\t"
135234 #elif defined(__clang__)
135235         "muls	r6, r7\n\t"
135236 #else
135237         "mul	r6, r7\n\t"
135238 #endif
135239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135240         "lsrs	r7, r6, #16\n\t"
135241 #else
135242         "lsr	r7, r6, #16\n\t"
135243 #endif
135244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135245         "lsls	r6, r6, #16\n\t"
135246 #else
135247         "lsl	r6, r6, #16\n\t"
135248 #endif
135249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135250         "adds	r3, r3, r6\n\t"
135251 #else
135252         "add	r3, r3, r6\n\t"
135253 #endif
135254 #ifdef WOLFSSL_KEIL
135255         "adcs	r4, r4, r7\n\t"
135256 #elif defined(__clang__)
135257         "adcs	r4, r7\n\t"
135258 #else
135259         "adc	r4, r7\n\t"
135260 #endif
135261 #ifdef WOLFSSL_KEIL
135262         "adcs	r5, r5, %[r]\n\t"
135263 #elif defined(__clang__)
135264         "adcs	r5, %[r]\n\t"
135265 #else
135266         "adc	r5, %[r]\n\t"
135267 #endif
135268         "#  A[2] * B[13]\n\t"
135269         "mov	%[a], r9\n\t"
135270         "mov	%[b], r10\n\t"
135271         "ldr	%[a], [%[a], #8]\n\t"
135272         "ldr	%[b], [%[b], #52]\n\t"
135273         "uxth	r6, %[a]\n\t"
135274         "uxth	r7, %[b]\n\t"
135275 #ifdef WOLFSSL_KEIL
135276         "muls	r7, r6, r7\n\t"
135277 #elif defined(__clang__)
135278         "muls	r7, r6\n\t"
135279 #else
135280         "mul	r7, r6\n\t"
135281 #endif
135282 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135283         "adds	r3, r3, r7\n\t"
135284 #else
135285         "add	r3, r3, r7\n\t"
135286 #endif
135287 #ifdef WOLFSSL_KEIL
135288         "adcs	r4, r4, %[r]\n\t"
135289 #elif defined(__clang__)
135290         "adcs	r4, %[r]\n\t"
135291 #else
135292         "adc	r4, %[r]\n\t"
135293 #endif
135294 #ifdef WOLFSSL_KEIL
135295         "adcs	r5, r5, %[r]\n\t"
135296 #elif defined(__clang__)
135297         "adcs	r5, %[r]\n\t"
135298 #else
135299         "adc	r5, %[r]\n\t"
135300 #endif
135301 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135302         "lsrs	r7, %[b], #16\n\t"
135303 #else
135304         "lsr	r7, %[b], #16\n\t"
135305 #endif
135306 #ifdef WOLFSSL_KEIL
135307         "muls	r6, r7, r6\n\t"
135308 #elif defined(__clang__)
135309         "muls	r6, r7\n\t"
135310 #else
135311         "mul	r6, r7\n\t"
135312 #endif
135313 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135314         "lsrs	r7, r6, #16\n\t"
135315 #else
135316         "lsr	r7, r6, #16\n\t"
135317 #endif
135318 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135319         "lsls	r6, r6, #16\n\t"
135320 #else
135321         "lsl	r6, r6, #16\n\t"
135322 #endif
135323 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135324         "adds	r3, r3, r6\n\t"
135325 #else
135326         "add	r3, r3, r6\n\t"
135327 #endif
135328 #ifdef WOLFSSL_KEIL
135329         "adcs	r4, r4, r7\n\t"
135330 #elif defined(__clang__)
135331         "adcs	r4, r7\n\t"
135332 #else
135333         "adc	r4, r7\n\t"
135334 #endif
135335 #ifdef WOLFSSL_KEIL
135336         "adcs	r5, r5, %[r]\n\t"
135337 #elif defined(__clang__)
135338         "adcs	r5, %[r]\n\t"
135339 #else
135340         "adc	r5, %[r]\n\t"
135341 #endif
135342 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135343         "lsrs	r6, %[a], #16\n\t"
135344 #else
135345         "lsr	r6, %[a], #16\n\t"
135346 #endif
135347 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135348         "lsrs	r7, %[b], #16\n\t"
135349 #else
135350         "lsr	r7, %[b], #16\n\t"
135351 #endif
135352 #ifdef WOLFSSL_KEIL
135353         "muls	r7, r6, r7\n\t"
135354 #elif defined(__clang__)
135355         "muls	r7, r6\n\t"
135356 #else
135357         "mul	r7, r6\n\t"
135358 #endif
135359 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135360         "adds	r4, r4, r7\n\t"
135361 #else
135362         "add	r4, r4, r7\n\t"
135363 #endif
135364 #ifdef WOLFSSL_KEIL
135365         "adcs	r5, r5, %[r]\n\t"
135366 #elif defined(__clang__)
135367         "adcs	r5, %[r]\n\t"
135368 #else
135369         "adc	r5, %[r]\n\t"
135370 #endif
135371         "uxth	r7, %[b]\n\t"
135372 #ifdef WOLFSSL_KEIL
135373         "muls	r6, r7, r6\n\t"
135374 #elif defined(__clang__)
135375         "muls	r6, r7\n\t"
135376 #else
135377         "mul	r6, r7\n\t"
135378 #endif
135379 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135380         "lsrs	r7, r6, #16\n\t"
135381 #else
135382         "lsr	r7, r6, #16\n\t"
135383 #endif
135384 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135385         "lsls	r6, r6, #16\n\t"
135386 #else
135387         "lsl	r6, r6, #16\n\t"
135388 #endif
135389 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135390         "adds	r3, r3, r6\n\t"
135391 #else
135392         "add	r3, r3, r6\n\t"
135393 #endif
135394 #ifdef WOLFSSL_KEIL
135395         "adcs	r4, r4, r7\n\t"
135396 #elif defined(__clang__)
135397         "adcs	r4, r7\n\t"
135398 #else
135399         "adc	r4, r7\n\t"
135400 #endif
135401 #ifdef WOLFSSL_KEIL
135402         "adcs	r5, r5, %[r]\n\t"
135403 #elif defined(__clang__)
135404         "adcs	r5, %[r]\n\t"
135405 #else
135406         "adc	r5, %[r]\n\t"
135407 #endif
135408         "#  A[3] * B[12]\n\t"
135409         "mov	%[a], r9\n\t"
135410         "mov	%[b], r10\n\t"
135411         "ldr	%[a], [%[a], #12]\n\t"
135412         "ldr	%[b], [%[b], #48]\n\t"
135413         "uxth	r6, %[a]\n\t"
135414         "uxth	r7, %[b]\n\t"
135415 #ifdef WOLFSSL_KEIL
135416         "muls	r7, r6, r7\n\t"
135417 #elif defined(__clang__)
135418         "muls	r7, r6\n\t"
135419 #else
135420         "mul	r7, r6\n\t"
135421 #endif
135422 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135423         "adds	r3, r3, r7\n\t"
135424 #else
135425         "add	r3, r3, r7\n\t"
135426 #endif
135427 #ifdef WOLFSSL_KEIL
135428         "adcs	r4, r4, %[r]\n\t"
135429 #elif defined(__clang__)
135430         "adcs	r4, %[r]\n\t"
135431 #else
135432         "adc	r4, %[r]\n\t"
135433 #endif
135434 #ifdef WOLFSSL_KEIL
135435         "adcs	r5, r5, %[r]\n\t"
135436 #elif defined(__clang__)
135437         "adcs	r5, %[r]\n\t"
135438 #else
135439         "adc	r5, %[r]\n\t"
135440 #endif
135441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135442         "lsrs	r7, %[b], #16\n\t"
135443 #else
135444         "lsr	r7, %[b], #16\n\t"
135445 #endif
135446 #ifdef WOLFSSL_KEIL
135447         "muls	r6, r7, r6\n\t"
135448 #elif defined(__clang__)
135449         "muls	r6, r7\n\t"
135450 #else
135451         "mul	r6, r7\n\t"
135452 #endif
135453 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135454         "lsrs	r7, r6, #16\n\t"
135455 #else
135456         "lsr	r7, r6, #16\n\t"
135457 #endif
135458 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135459         "lsls	r6, r6, #16\n\t"
135460 #else
135461         "lsl	r6, r6, #16\n\t"
135462 #endif
135463 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135464         "adds	r3, r3, r6\n\t"
135465 #else
135466         "add	r3, r3, r6\n\t"
135467 #endif
135468 #ifdef WOLFSSL_KEIL
135469         "adcs	r4, r4, r7\n\t"
135470 #elif defined(__clang__)
135471         "adcs	r4, r7\n\t"
135472 #else
135473         "adc	r4, r7\n\t"
135474 #endif
135475 #ifdef WOLFSSL_KEIL
135476         "adcs	r5, r5, %[r]\n\t"
135477 #elif defined(__clang__)
135478         "adcs	r5, %[r]\n\t"
135479 #else
135480         "adc	r5, %[r]\n\t"
135481 #endif
135482 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135483         "lsrs	r6, %[a], #16\n\t"
135484 #else
135485         "lsr	r6, %[a], #16\n\t"
135486 #endif
135487 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135488         "lsrs	r7, %[b], #16\n\t"
135489 #else
135490         "lsr	r7, %[b], #16\n\t"
135491 #endif
135492 #ifdef WOLFSSL_KEIL
135493         "muls	r7, r6, r7\n\t"
135494 #elif defined(__clang__)
135495         "muls	r7, r6\n\t"
135496 #else
135497         "mul	r7, r6\n\t"
135498 #endif
135499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135500         "adds	r4, r4, r7\n\t"
135501 #else
135502         "add	r4, r4, r7\n\t"
135503 #endif
135504 #ifdef WOLFSSL_KEIL
135505         "adcs	r5, r5, %[r]\n\t"
135506 #elif defined(__clang__)
135507         "adcs	r5, %[r]\n\t"
135508 #else
135509         "adc	r5, %[r]\n\t"
135510 #endif
135511         "uxth	r7, %[b]\n\t"
135512 #ifdef WOLFSSL_KEIL
135513         "muls	r6, r7, r6\n\t"
135514 #elif defined(__clang__)
135515         "muls	r6, r7\n\t"
135516 #else
135517         "mul	r6, r7\n\t"
135518 #endif
135519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135520         "lsrs	r7, r6, #16\n\t"
135521 #else
135522         "lsr	r7, r6, #16\n\t"
135523 #endif
135524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135525         "lsls	r6, r6, #16\n\t"
135526 #else
135527         "lsl	r6, r6, #16\n\t"
135528 #endif
135529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135530         "adds	r3, r3, r6\n\t"
135531 #else
135532         "add	r3, r3, r6\n\t"
135533 #endif
135534 #ifdef WOLFSSL_KEIL
135535         "adcs	r4, r4, r7\n\t"
135536 #elif defined(__clang__)
135537         "adcs	r4, r7\n\t"
135538 #else
135539         "adc	r4, r7\n\t"
135540 #endif
135541 #ifdef WOLFSSL_KEIL
135542         "adcs	r5, r5, %[r]\n\t"
135543 #elif defined(__clang__)
135544         "adcs	r5, %[r]\n\t"
135545 #else
135546         "adc	r5, %[r]\n\t"
135547 #endif
135548         "#  A[4] * B[11]\n\t"
135549         "mov	%[a], r9\n\t"
135550         "mov	%[b], r10\n\t"
135551         "ldr	%[a], [%[a], #16]\n\t"
135552         "ldr	%[b], [%[b], #44]\n\t"
135553         "uxth	r6, %[a]\n\t"
135554         "uxth	r7, %[b]\n\t"
135555 #ifdef WOLFSSL_KEIL
135556         "muls	r7, r6, r7\n\t"
135557 #elif defined(__clang__)
135558         "muls	r7, r6\n\t"
135559 #else
135560         "mul	r7, r6\n\t"
135561 #endif
135562 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135563         "adds	r3, r3, r7\n\t"
135564 #else
135565         "add	r3, r3, r7\n\t"
135566 #endif
135567 #ifdef WOLFSSL_KEIL
135568         "adcs	r4, r4, %[r]\n\t"
135569 #elif defined(__clang__)
135570         "adcs	r4, %[r]\n\t"
135571 #else
135572         "adc	r4, %[r]\n\t"
135573 #endif
135574 #ifdef WOLFSSL_KEIL
135575         "adcs	r5, r5, %[r]\n\t"
135576 #elif defined(__clang__)
135577         "adcs	r5, %[r]\n\t"
135578 #else
135579         "adc	r5, %[r]\n\t"
135580 #endif
135581 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135582         "lsrs	r7, %[b], #16\n\t"
135583 #else
135584         "lsr	r7, %[b], #16\n\t"
135585 #endif
135586 #ifdef WOLFSSL_KEIL
135587         "muls	r6, r7, r6\n\t"
135588 #elif defined(__clang__)
135589         "muls	r6, r7\n\t"
135590 #else
135591         "mul	r6, r7\n\t"
135592 #endif
135593 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135594         "lsrs	r7, r6, #16\n\t"
135595 #else
135596         "lsr	r7, r6, #16\n\t"
135597 #endif
135598 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135599         "lsls	r6, r6, #16\n\t"
135600 #else
135601         "lsl	r6, r6, #16\n\t"
135602 #endif
135603 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135604         "adds	r3, r3, r6\n\t"
135605 #else
135606         "add	r3, r3, r6\n\t"
135607 #endif
135608 #ifdef WOLFSSL_KEIL
135609         "adcs	r4, r4, r7\n\t"
135610 #elif defined(__clang__)
135611         "adcs	r4, r7\n\t"
135612 #else
135613         "adc	r4, r7\n\t"
135614 #endif
135615 #ifdef WOLFSSL_KEIL
135616         "adcs	r5, r5, %[r]\n\t"
135617 #elif defined(__clang__)
135618         "adcs	r5, %[r]\n\t"
135619 #else
135620         "adc	r5, %[r]\n\t"
135621 #endif
135622 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135623         "lsrs	r6, %[a], #16\n\t"
135624 #else
135625         "lsr	r6, %[a], #16\n\t"
135626 #endif
135627 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135628         "lsrs	r7, %[b], #16\n\t"
135629 #else
135630         "lsr	r7, %[b], #16\n\t"
135631 #endif
135632 #ifdef WOLFSSL_KEIL
135633         "muls	r7, r6, r7\n\t"
135634 #elif defined(__clang__)
135635         "muls	r7, r6\n\t"
135636 #else
135637         "mul	r7, r6\n\t"
135638 #endif
135639 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135640         "adds	r4, r4, r7\n\t"
135641 #else
135642         "add	r4, r4, r7\n\t"
135643 #endif
135644 #ifdef WOLFSSL_KEIL
135645         "adcs	r5, r5, %[r]\n\t"
135646 #elif defined(__clang__)
135647         "adcs	r5, %[r]\n\t"
135648 #else
135649         "adc	r5, %[r]\n\t"
135650 #endif
135651         "uxth	r7, %[b]\n\t"
135652 #ifdef WOLFSSL_KEIL
135653         "muls	r6, r7, r6\n\t"
135654 #elif defined(__clang__)
135655         "muls	r6, r7\n\t"
135656 #else
135657         "mul	r6, r7\n\t"
135658 #endif
135659 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135660         "lsrs	r7, r6, #16\n\t"
135661 #else
135662         "lsr	r7, r6, #16\n\t"
135663 #endif
135664 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135665         "lsls	r6, r6, #16\n\t"
135666 #else
135667         "lsl	r6, r6, #16\n\t"
135668 #endif
135669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135670         "adds	r3, r3, r6\n\t"
135671 #else
135672         "add	r3, r3, r6\n\t"
135673 #endif
135674 #ifdef WOLFSSL_KEIL
135675         "adcs	r4, r4, r7\n\t"
135676 #elif defined(__clang__)
135677         "adcs	r4, r7\n\t"
135678 #else
135679         "adc	r4, r7\n\t"
135680 #endif
135681 #ifdef WOLFSSL_KEIL
135682         "adcs	r5, r5, %[r]\n\t"
135683 #elif defined(__clang__)
135684         "adcs	r5, %[r]\n\t"
135685 #else
135686         "adc	r5, %[r]\n\t"
135687 #endif
135688         "#  A[5] * B[10]\n\t"
135689         "mov	%[a], r9\n\t"
135690         "mov	%[b], r10\n\t"
135691         "ldr	%[a], [%[a], #20]\n\t"
135692         "ldr	%[b], [%[b], #40]\n\t"
135693         "uxth	r6, %[a]\n\t"
135694         "uxth	r7, %[b]\n\t"
135695 #ifdef WOLFSSL_KEIL
135696         "muls	r7, r6, r7\n\t"
135697 #elif defined(__clang__)
135698         "muls	r7, r6\n\t"
135699 #else
135700         "mul	r7, r6\n\t"
135701 #endif
135702 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135703         "adds	r3, r3, r7\n\t"
135704 #else
135705         "add	r3, r3, r7\n\t"
135706 #endif
135707 #ifdef WOLFSSL_KEIL
135708         "adcs	r4, r4, %[r]\n\t"
135709 #elif defined(__clang__)
135710         "adcs	r4, %[r]\n\t"
135711 #else
135712         "adc	r4, %[r]\n\t"
135713 #endif
135714 #ifdef WOLFSSL_KEIL
135715         "adcs	r5, r5, %[r]\n\t"
135716 #elif defined(__clang__)
135717         "adcs	r5, %[r]\n\t"
135718 #else
135719         "adc	r5, %[r]\n\t"
135720 #endif
135721 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135722         "lsrs	r7, %[b], #16\n\t"
135723 #else
135724         "lsr	r7, %[b], #16\n\t"
135725 #endif
135726 #ifdef WOLFSSL_KEIL
135727         "muls	r6, r7, r6\n\t"
135728 #elif defined(__clang__)
135729         "muls	r6, r7\n\t"
135730 #else
135731         "mul	r6, r7\n\t"
135732 #endif
135733 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135734         "lsrs	r7, r6, #16\n\t"
135735 #else
135736         "lsr	r7, r6, #16\n\t"
135737 #endif
135738 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135739         "lsls	r6, r6, #16\n\t"
135740 #else
135741         "lsl	r6, r6, #16\n\t"
135742 #endif
135743 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135744         "adds	r3, r3, r6\n\t"
135745 #else
135746         "add	r3, r3, r6\n\t"
135747 #endif
135748 #ifdef WOLFSSL_KEIL
135749         "adcs	r4, r4, r7\n\t"
135750 #elif defined(__clang__)
135751         "adcs	r4, r7\n\t"
135752 #else
135753         "adc	r4, r7\n\t"
135754 #endif
135755 #ifdef WOLFSSL_KEIL
135756         "adcs	r5, r5, %[r]\n\t"
135757 #elif defined(__clang__)
135758         "adcs	r5, %[r]\n\t"
135759 #else
135760         "adc	r5, %[r]\n\t"
135761 #endif
135762 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135763         "lsrs	r6, %[a], #16\n\t"
135764 #else
135765         "lsr	r6, %[a], #16\n\t"
135766 #endif
135767 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135768         "lsrs	r7, %[b], #16\n\t"
135769 #else
135770         "lsr	r7, %[b], #16\n\t"
135771 #endif
135772 #ifdef WOLFSSL_KEIL
135773         "muls	r7, r6, r7\n\t"
135774 #elif defined(__clang__)
135775         "muls	r7, r6\n\t"
135776 #else
135777         "mul	r7, r6\n\t"
135778 #endif
135779 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135780         "adds	r4, r4, r7\n\t"
135781 #else
135782         "add	r4, r4, r7\n\t"
135783 #endif
135784 #ifdef WOLFSSL_KEIL
135785         "adcs	r5, r5, %[r]\n\t"
135786 #elif defined(__clang__)
135787         "adcs	r5, %[r]\n\t"
135788 #else
135789         "adc	r5, %[r]\n\t"
135790 #endif
135791         "uxth	r7, %[b]\n\t"
135792 #ifdef WOLFSSL_KEIL
135793         "muls	r6, r7, r6\n\t"
135794 #elif defined(__clang__)
135795         "muls	r6, r7\n\t"
135796 #else
135797         "mul	r6, r7\n\t"
135798 #endif
135799 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135800         "lsrs	r7, r6, #16\n\t"
135801 #else
135802         "lsr	r7, r6, #16\n\t"
135803 #endif
135804 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135805         "lsls	r6, r6, #16\n\t"
135806 #else
135807         "lsl	r6, r6, #16\n\t"
135808 #endif
135809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135810         "adds	r3, r3, r6\n\t"
135811 #else
135812         "add	r3, r3, r6\n\t"
135813 #endif
135814 #ifdef WOLFSSL_KEIL
135815         "adcs	r4, r4, r7\n\t"
135816 #elif defined(__clang__)
135817         "adcs	r4, r7\n\t"
135818 #else
135819         "adc	r4, r7\n\t"
135820 #endif
135821 #ifdef WOLFSSL_KEIL
135822         "adcs	r5, r5, %[r]\n\t"
135823 #elif defined(__clang__)
135824         "adcs	r5, %[r]\n\t"
135825 #else
135826         "adc	r5, %[r]\n\t"
135827 #endif
135828         "#  A[6] * B[9]\n\t"
135829         "mov	%[a], r9\n\t"
135830         "mov	%[b], r10\n\t"
135831         "ldr	%[a], [%[a], #24]\n\t"
135832         "ldr	%[b], [%[b], #36]\n\t"
135833         "uxth	r6, %[a]\n\t"
135834         "uxth	r7, %[b]\n\t"
135835 #ifdef WOLFSSL_KEIL
135836         "muls	r7, r6, r7\n\t"
135837 #elif defined(__clang__)
135838         "muls	r7, r6\n\t"
135839 #else
135840         "mul	r7, r6\n\t"
135841 #endif
135842 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135843         "adds	r3, r3, r7\n\t"
135844 #else
135845         "add	r3, r3, r7\n\t"
135846 #endif
135847 #ifdef WOLFSSL_KEIL
135848         "adcs	r4, r4, %[r]\n\t"
135849 #elif defined(__clang__)
135850         "adcs	r4, %[r]\n\t"
135851 #else
135852         "adc	r4, %[r]\n\t"
135853 #endif
135854 #ifdef WOLFSSL_KEIL
135855         "adcs	r5, r5, %[r]\n\t"
135856 #elif defined(__clang__)
135857         "adcs	r5, %[r]\n\t"
135858 #else
135859         "adc	r5, %[r]\n\t"
135860 #endif
135861 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135862         "lsrs	r7, %[b], #16\n\t"
135863 #else
135864         "lsr	r7, %[b], #16\n\t"
135865 #endif
135866 #ifdef WOLFSSL_KEIL
135867         "muls	r6, r7, r6\n\t"
135868 #elif defined(__clang__)
135869         "muls	r6, r7\n\t"
135870 #else
135871         "mul	r6, r7\n\t"
135872 #endif
135873 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135874         "lsrs	r7, r6, #16\n\t"
135875 #else
135876         "lsr	r7, r6, #16\n\t"
135877 #endif
135878 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135879         "lsls	r6, r6, #16\n\t"
135880 #else
135881         "lsl	r6, r6, #16\n\t"
135882 #endif
135883 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135884         "adds	r3, r3, r6\n\t"
135885 #else
135886         "add	r3, r3, r6\n\t"
135887 #endif
135888 #ifdef WOLFSSL_KEIL
135889         "adcs	r4, r4, r7\n\t"
135890 #elif defined(__clang__)
135891         "adcs	r4, r7\n\t"
135892 #else
135893         "adc	r4, r7\n\t"
135894 #endif
135895 #ifdef WOLFSSL_KEIL
135896         "adcs	r5, r5, %[r]\n\t"
135897 #elif defined(__clang__)
135898         "adcs	r5, %[r]\n\t"
135899 #else
135900         "adc	r5, %[r]\n\t"
135901 #endif
135902 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135903         "lsrs	r6, %[a], #16\n\t"
135904 #else
135905         "lsr	r6, %[a], #16\n\t"
135906 #endif
135907 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135908         "lsrs	r7, %[b], #16\n\t"
135909 #else
135910         "lsr	r7, %[b], #16\n\t"
135911 #endif
135912 #ifdef WOLFSSL_KEIL
135913         "muls	r7, r6, r7\n\t"
135914 #elif defined(__clang__)
135915         "muls	r7, r6\n\t"
135916 #else
135917         "mul	r7, r6\n\t"
135918 #endif
135919 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135920         "adds	r4, r4, r7\n\t"
135921 #else
135922         "add	r4, r4, r7\n\t"
135923 #endif
135924 #ifdef WOLFSSL_KEIL
135925         "adcs	r5, r5, %[r]\n\t"
135926 #elif defined(__clang__)
135927         "adcs	r5, %[r]\n\t"
135928 #else
135929         "adc	r5, %[r]\n\t"
135930 #endif
135931         "uxth	r7, %[b]\n\t"
135932 #ifdef WOLFSSL_KEIL
135933         "muls	r6, r7, r6\n\t"
135934 #elif defined(__clang__)
135935         "muls	r6, r7\n\t"
135936 #else
135937         "mul	r6, r7\n\t"
135938 #endif
135939 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135940         "lsrs	r7, r6, #16\n\t"
135941 #else
135942         "lsr	r7, r6, #16\n\t"
135943 #endif
135944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135945         "lsls	r6, r6, #16\n\t"
135946 #else
135947         "lsl	r6, r6, #16\n\t"
135948 #endif
135949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135950         "adds	r3, r3, r6\n\t"
135951 #else
135952         "add	r3, r3, r6\n\t"
135953 #endif
135954 #ifdef WOLFSSL_KEIL
135955         "adcs	r4, r4, r7\n\t"
135956 #elif defined(__clang__)
135957         "adcs	r4, r7\n\t"
135958 #else
135959         "adc	r4, r7\n\t"
135960 #endif
135961 #ifdef WOLFSSL_KEIL
135962         "adcs	r5, r5, %[r]\n\t"
135963 #elif defined(__clang__)
135964         "adcs	r5, %[r]\n\t"
135965 #else
135966         "adc	r5, %[r]\n\t"
135967 #endif
135968         "#  A[7] * B[8]\n\t"
135969         "mov	%[a], r9\n\t"
135970         "mov	%[b], r10\n\t"
135971         "ldr	%[a], [%[a], #28]\n\t"
135972         "ldr	%[b], [%[b], #32]\n\t"
135973         "uxth	r6, %[a]\n\t"
135974         "uxth	r7, %[b]\n\t"
135975 #ifdef WOLFSSL_KEIL
135976         "muls	r7, r6, r7\n\t"
135977 #elif defined(__clang__)
135978         "muls	r7, r6\n\t"
135979 #else
135980         "mul	r7, r6\n\t"
135981 #endif
135982 #if defined(__clang__) || defined(WOLFSSL_KEIL)
135983         "adds	r3, r3, r7\n\t"
135984 #else
135985         "add	r3, r3, r7\n\t"
135986 #endif
135987 #ifdef WOLFSSL_KEIL
135988         "adcs	r4, r4, %[r]\n\t"
135989 #elif defined(__clang__)
135990         "adcs	r4, %[r]\n\t"
135991 #else
135992         "adc	r4, %[r]\n\t"
135993 #endif
135994 #ifdef WOLFSSL_KEIL
135995         "adcs	r5, r5, %[r]\n\t"
135996 #elif defined(__clang__)
135997         "adcs	r5, %[r]\n\t"
135998 #else
135999         "adc	r5, %[r]\n\t"
136000 #endif
136001 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136002         "lsrs	r7, %[b], #16\n\t"
136003 #else
136004         "lsr	r7, %[b], #16\n\t"
136005 #endif
136006 #ifdef WOLFSSL_KEIL
136007         "muls	r6, r7, r6\n\t"
136008 #elif defined(__clang__)
136009         "muls	r6, r7\n\t"
136010 #else
136011         "mul	r6, r7\n\t"
136012 #endif
136013 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136014         "lsrs	r7, r6, #16\n\t"
136015 #else
136016         "lsr	r7, r6, #16\n\t"
136017 #endif
136018 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136019         "lsls	r6, r6, #16\n\t"
136020 #else
136021         "lsl	r6, r6, #16\n\t"
136022 #endif
136023 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136024         "adds	r3, r3, r6\n\t"
136025 #else
136026         "add	r3, r3, r6\n\t"
136027 #endif
136028 #ifdef WOLFSSL_KEIL
136029         "adcs	r4, r4, r7\n\t"
136030 #elif defined(__clang__)
136031         "adcs	r4, r7\n\t"
136032 #else
136033         "adc	r4, r7\n\t"
136034 #endif
136035 #ifdef WOLFSSL_KEIL
136036         "adcs	r5, r5, %[r]\n\t"
136037 #elif defined(__clang__)
136038         "adcs	r5, %[r]\n\t"
136039 #else
136040         "adc	r5, %[r]\n\t"
136041 #endif
136042 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136043         "lsrs	r6, %[a], #16\n\t"
136044 #else
136045         "lsr	r6, %[a], #16\n\t"
136046 #endif
136047 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136048         "lsrs	r7, %[b], #16\n\t"
136049 #else
136050         "lsr	r7, %[b], #16\n\t"
136051 #endif
136052 #ifdef WOLFSSL_KEIL
136053         "muls	r7, r6, r7\n\t"
136054 #elif defined(__clang__)
136055         "muls	r7, r6\n\t"
136056 #else
136057         "mul	r7, r6\n\t"
136058 #endif
136059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136060         "adds	r4, r4, r7\n\t"
136061 #else
136062         "add	r4, r4, r7\n\t"
136063 #endif
136064 #ifdef WOLFSSL_KEIL
136065         "adcs	r5, r5, %[r]\n\t"
136066 #elif defined(__clang__)
136067         "adcs	r5, %[r]\n\t"
136068 #else
136069         "adc	r5, %[r]\n\t"
136070 #endif
136071         "uxth	r7, %[b]\n\t"
136072 #ifdef WOLFSSL_KEIL
136073         "muls	r6, r7, r6\n\t"
136074 #elif defined(__clang__)
136075         "muls	r6, r7\n\t"
136076 #else
136077         "mul	r6, r7\n\t"
136078 #endif
136079 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136080         "lsrs	r7, r6, #16\n\t"
136081 #else
136082         "lsr	r7, r6, #16\n\t"
136083 #endif
136084 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136085         "lsls	r6, r6, #16\n\t"
136086 #else
136087         "lsl	r6, r6, #16\n\t"
136088 #endif
136089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136090         "adds	r3, r3, r6\n\t"
136091 #else
136092         "add	r3, r3, r6\n\t"
136093 #endif
136094 #ifdef WOLFSSL_KEIL
136095         "adcs	r4, r4, r7\n\t"
136096 #elif defined(__clang__)
136097         "adcs	r4, r7\n\t"
136098 #else
136099         "adc	r4, r7\n\t"
136100 #endif
136101 #ifdef WOLFSSL_KEIL
136102         "adcs	r5, r5, %[r]\n\t"
136103 #elif defined(__clang__)
136104         "adcs	r5, %[r]\n\t"
136105 #else
136106         "adc	r5, %[r]\n\t"
136107 #endif
136108         "#  A[8] * B[7]\n\t"
136109         "mov	%[a], r9\n\t"
136110         "mov	%[b], r10\n\t"
136111         "ldr	%[a], [%[a], #32]\n\t"
136112         "ldr	%[b], [%[b], #28]\n\t"
136113         "uxth	r6, %[a]\n\t"
136114         "uxth	r7, %[b]\n\t"
136115 #ifdef WOLFSSL_KEIL
136116         "muls	r7, r6, r7\n\t"
136117 #elif defined(__clang__)
136118         "muls	r7, r6\n\t"
136119 #else
136120         "mul	r7, r6\n\t"
136121 #endif
136122 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136123         "adds	r3, r3, r7\n\t"
136124 #else
136125         "add	r3, r3, r7\n\t"
136126 #endif
136127 #ifdef WOLFSSL_KEIL
136128         "adcs	r4, r4, %[r]\n\t"
136129 #elif defined(__clang__)
136130         "adcs	r4, %[r]\n\t"
136131 #else
136132         "adc	r4, %[r]\n\t"
136133 #endif
136134 #ifdef WOLFSSL_KEIL
136135         "adcs	r5, r5, %[r]\n\t"
136136 #elif defined(__clang__)
136137         "adcs	r5, %[r]\n\t"
136138 #else
136139         "adc	r5, %[r]\n\t"
136140 #endif
136141 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136142         "lsrs	r7, %[b], #16\n\t"
136143 #else
136144         "lsr	r7, %[b], #16\n\t"
136145 #endif
136146 #ifdef WOLFSSL_KEIL
136147         "muls	r6, r7, r6\n\t"
136148 #elif defined(__clang__)
136149         "muls	r6, r7\n\t"
136150 #else
136151         "mul	r6, r7\n\t"
136152 #endif
136153 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136154         "lsrs	r7, r6, #16\n\t"
136155 #else
136156         "lsr	r7, r6, #16\n\t"
136157 #endif
136158 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136159         "lsls	r6, r6, #16\n\t"
136160 #else
136161         "lsl	r6, r6, #16\n\t"
136162 #endif
136163 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136164         "adds	r3, r3, r6\n\t"
136165 #else
136166         "add	r3, r3, r6\n\t"
136167 #endif
136168 #ifdef WOLFSSL_KEIL
136169         "adcs	r4, r4, r7\n\t"
136170 #elif defined(__clang__)
136171         "adcs	r4, r7\n\t"
136172 #else
136173         "adc	r4, r7\n\t"
136174 #endif
136175 #ifdef WOLFSSL_KEIL
136176         "adcs	r5, r5, %[r]\n\t"
136177 #elif defined(__clang__)
136178         "adcs	r5, %[r]\n\t"
136179 #else
136180         "adc	r5, %[r]\n\t"
136181 #endif
136182 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136183         "lsrs	r6, %[a], #16\n\t"
136184 #else
136185         "lsr	r6, %[a], #16\n\t"
136186 #endif
136187 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136188         "lsrs	r7, %[b], #16\n\t"
136189 #else
136190         "lsr	r7, %[b], #16\n\t"
136191 #endif
136192 #ifdef WOLFSSL_KEIL
136193         "muls	r7, r6, r7\n\t"
136194 #elif defined(__clang__)
136195         "muls	r7, r6\n\t"
136196 #else
136197         "mul	r7, r6\n\t"
136198 #endif
136199 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136200         "adds	r4, r4, r7\n\t"
136201 #else
136202         "add	r4, r4, r7\n\t"
136203 #endif
136204 #ifdef WOLFSSL_KEIL
136205         "adcs	r5, r5, %[r]\n\t"
136206 #elif defined(__clang__)
136207         "adcs	r5, %[r]\n\t"
136208 #else
136209         "adc	r5, %[r]\n\t"
136210 #endif
136211         "uxth	r7, %[b]\n\t"
136212 #ifdef WOLFSSL_KEIL
136213         "muls	r6, r7, r6\n\t"
136214 #elif defined(__clang__)
136215         "muls	r6, r7\n\t"
136216 #else
136217         "mul	r6, r7\n\t"
136218 #endif
136219 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136220         "lsrs	r7, r6, #16\n\t"
136221 #else
136222         "lsr	r7, r6, #16\n\t"
136223 #endif
136224 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136225         "lsls	r6, r6, #16\n\t"
136226 #else
136227         "lsl	r6, r6, #16\n\t"
136228 #endif
136229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136230         "adds	r3, r3, r6\n\t"
136231 #else
136232         "add	r3, r3, r6\n\t"
136233 #endif
136234 #ifdef WOLFSSL_KEIL
136235         "adcs	r4, r4, r7\n\t"
136236 #elif defined(__clang__)
136237         "adcs	r4, r7\n\t"
136238 #else
136239         "adc	r4, r7\n\t"
136240 #endif
136241 #ifdef WOLFSSL_KEIL
136242         "adcs	r5, r5, %[r]\n\t"
136243 #elif defined(__clang__)
136244         "adcs	r5, %[r]\n\t"
136245 #else
136246         "adc	r5, %[r]\n\t"
136247 #endif
136248         "#  A[9] * B[6]\n\t"
136249         "mov	%[a], r9\n\t"
136250         "mov	%[b], r10\n\t"
136251         "ldr	%[a], [%[a], #36]\n\t"
136252         "ldr	%[b], [%[b], #24]\n\t"
136253         "uxth	r6, %[a]\n\t"
136254         "uxth	r7, %[b]\n\t"
136255 #ifdef WOLFSSL_KEIL
136256         "muls	r7, r6, r7\n\t"
136257 #elif defined(__clang__)
136258         "muls	r7, r6\n\t"
136259 #else
136260         "mul	r7, r6\n\t"
136261 #endif
136262 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136263         "adds	r3, r3, r7\n\t"
136264 #else
136265         "add	r3, r3, r7\n\t"
136266 #endif
136267 #ifdef WOLFSSL_KEIL
136268         "adcs	r4, r4, %[r]\n\t"
136269 #elif defined(__clang__)
136270         "adcs	r4, %[r]\n\t"
136271 #else
136272         "adc	r4, %[r]\n\t"
136273 #endif
136274 #ifdef WOLFSSL_KEIL
136275         "adcs	r5, r5, %[r]\n\t"
136276 #elif defined(__clang__)
136277         "adcs	r5, %[r]\n\t"
136278 #else
136279         "adc	r5, %[r]\n\t"
136280 #endif
136281 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136282         "lsrs	r7, %[b], #16\n\t"
136283 #else
136284         "lsr	r7, %[b], #16\n\t"
136285 #endif
136286 #ifdef WOLFSSL_KEIL
136287         "muls	r6, r7, r6\n\t"
136288 #elif defined(__clang__)
136289         "muls	r6, r7\n\t"
136290 #else
136291         "mul	r6, r7\n\t"
136292 #endif
136293 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136294         "lsrs	r7, r6, #16\n\t"
136295 #else
136296         "lsr	r7, r6, #16\n\t"
136297 #endif
136298 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136299         "lsls	r6, r6, #16\n\t"
136300 #else
136301         "lsl	r6, r6, #16\n\t"
136302 #endif
136303 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136304         "adds	r3, r3, r6\n\t"
136305 #else
136306         "add	r3, r3, r6\n\t"
136307 #endif
136308 #ifdef WOLFSSL_KEIL
136309         "adcs	r4, r4, r7\n\t"
136310 #elif defined(__clang__)
136311         "adcs	r4, r7\n\t"
136312 #else
136313         "adc	r4, r7\n\t"
136314 #endif
136315 #ifdef WOLFSSL_KEIL
136316         "adcs	r5, r5, %[r]\n\t"
136317 #elif defined(__clang__)
136318         "adcs	r5, %[r]\n\t"
136319 #else
136320         "adc	r5, %[r]\n\t"
136321 #endif
136322 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136323         "lsrs	r6, %[a], #16\n\t"
136324 #else
136325         "lsr	r6, %[a], #16\n\t"
136326 #endif
136327 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136328         "lsrs	r7, %[b], #16\n\t"
136329 #else
136330         "lsr	r7, %[b], #16\n\t"
136331 #endif
136332 #ifdef WOLFSSL_KEIL
136333         "muls	r7, r6, r7\n\t"
136334 #elif defined(__clang__)
136335         "muls	r7, r6\n\t"
136336 #else
136337         "mul	r7, r6\n\t"
136338 #endif
136339 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136340         "adds	r4, r4, r7\n\t"
136341 #else
136342         "add	r4, r4, r7\n\t"
136343 #endif
136344 #ifdef WOLFSSL_KEIL
136345         "adcs	r5, r5, %[r]\n\t"
136346 #elif defined(__clang__)
136347         "adcs	r5, %[r]\n\t"
136348 #else
136349         "adc	r5, %[r]\n\t"
136350 #endif
136351         "uxth	r7, %[b]\n\t"
136352 #ifdef WOLFSSL_KEIL
136353         "muls	r6, r7, r6\n\t"
136354 #elif defined(__clang__)
136355         "muls	r6, r7\n\t"
136356 #else
136357         "mul	r6, r7\n\t"
136358 #endif
136359 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136360         "lsrs	r7, r6, #16\n\t"
136361 #else
136362         "lsr	r7, r6, #16\n\t"
136363 #endif
136364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136365         "lsls	r6, r6, #16\n\t"
136366 #else
136367         "lsl	r6, r6, #16\n\t"
136368 #endif
136369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136370         "adds	r3, r3, r6\n\t"
136371 #else
136372         "add	r3, r3, r6\n\t"
136373 #endif
136374 #ifdef WOLFSSL_KEIL
136375         "adcs	r4, r4, r7\n\t"
136376 #elif defined(__clang__)
136377         "adcs	r4, r7\n\t"
136378 #else
136379         "adc	r4, r7\n\t"
136380 #endif
136381 #ifdef WOLFSSL_KEIL
136382         "adcs	r5, r5, %[r]\n\t"
136383 #elif defined(__clang__)
136384         "adcs	r5, %[r]\n\t"
136385 #else
136386         "adc	r5, %[r]\n\t"
136387 #endif
136388         "#  A[10] * B[5]\n\t"
136389         "mov	%[a], r9\n\t"
136390         "mov	%[b], r10\n\t"
136391         "ldr	%[a], [%[a], #40]\n\t"
136392         "ldr	%[b], [%[b], #20]\n\t"
136393         "uxth	r6, %[a]\n\t"
136394         "uxth	r7, %[b]\n\t"
136395 #ifdef WOLFSSL_KEIL
136396         "muls	r7, r6, r7\n\t"
136397 #elif defined(__clang__)
136398         "muls	r7, r6\n\t"
136399 #else
136400         "mul	r7, r6\n\t"
136401 #endif
136402 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136403         "adds	r3, r3, r7\n\t"
136404 #else
136405         "add	r3, r3, r7\n\t"
136406 #endif
136407 #ifdef WOLFSSL_KEIL
136408         "adcs	r4, r4, %[r]\n\t"
136409 #elif defined(__clang__)
136410         "adcs	r4, %[r]\n\t"
136411 #else
136412         "adc	r4, %[r]\n\t"
136413 #endif
136414 #ifdef WOLFSSL_KEIL
136415         "adcs	r5, r5, %[r]\n\t"
136416 #elif defined(__clang__)
136417         "adcs	r5, %[r]\n\t"
136418 #else
136419         "adc	r5, %[r]\n\t"
136420 #endif
136421 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136422         "lsrs	r7, %[b], #16\n\t"
136423 #else
136424         "lsr	r7, %[b], #16\n\t"
136425 #endif
136426 #ifdef WOLFSSL_KEIL
136427         "muls	r6, r7, r6\n\t"
136428 #elif defined(__clang__)
136429         "muls	r6, r7\n\t"
136430 #else
136431         "mul	r6, r7\n\t"
136432 #endif
136433 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136434         "lsrs	r7, r6, #16\n\t"
136435 #else
136436         "lsr	r7, r6, #16\n\t"
136437 #endif
136438 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136439         "lsls	r6, r6, #16\n\t"
136440 #else
136441         "lsl	r6, r6, #16\n\t"
136442 #endif
136443 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136444         "adds	r3, r3, r6\n\t"
136445 #else
136446         "add	r3, r3, r6\n\t"
136447 #endif
136448 #ifdef WOLFSSL_KEIL
136449         "adcs	r4, r4, r7\n\t"
136450 #elif defined(__clang__)
136451         "adcs	r4, r7\n\t"
136452 #else
136453         "adc	r4, r7\n\t"
136454 #endif
136455 #ifdef WOLFSSL_KEIL
136456         "adcs	r5, r5, %[r]\n\t"
136457 #elif defined(__clang__)
136458         "adcs	r5, %[r]\n\t"
136459 #else
136460         "adc	r5, %[r]\n\t"
136461 #endif
136462 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136463         "lsrs	r6, %[a], #16\n\t"
136464 #else
136465         "lsr	r6, %[a], #16\n\t"
136466 #endif
136467 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136468         "lsrs	r7, %[b], #16\n\t"
136469 #else
136470         "lsr	r7, %[b], #16\n\t"
136471 #endif
136472 #ifdef WOLFSSL_KEIL
136473         "muls	r7, r6, r7\n\t"
136474 #elif defined(__clang__)
136475         "muls	r7, r6\n\t"
136476 #else
136477         "mul	r7, r6\n\t"
136478 #endif
136479 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136480         "adds	r4, r4, r7\n\t"
136481 #else
136482         "add	r4, r4, r7\n\t"
136483 #endif
136484 #ifdef WOLFSSL_KEIL
136485         "adcs	r5, r5, %[r]\n\t"
136486 #elif defined(__clang__)
136487         "adcs	r5, %[r]\n\t"
136488 #else
136489         "adc	r5, %[r]\n\t"
136490 #endif
136491         "uxth	r7, %[b]\n\t"
136492 #ifdef WOLFSSL_KEIL
136493         "muls	r6, r7, r6\n\t"
136494 #elif defined(__clang__)
136495         "muls	r6, r7\n\t"
136496 #else
136497         "mul	r6, r7\n\t"
136498 #endif
136499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136500         "lsrs	r7, r6, #16\n\t"
136501 #else
136502         "lsr	r7, r6, #16\n\t"
136503 #endif
136504 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136505         "lsls	r6, r6, #16\n\t"
136506 #else
136507         "lsl	r6, r6, #16\n\t"
136508 #endif
136509 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136510         "adds	r3, r3, r6\n\t"
136511 #else
136512         "add	r3, r3, r6\n\t"
136513 #endif
136514 #ifdef WOLFSSL_KEIL
136515         "adcs	r4, r4, r7\n\t"
136516 #elif defined(__clang__)
136517         "adcs	r4, r7\n\t"
136518 #else
136519         "adc	r4, r7\n\t"
136520 #endif
136521 #ifdef WOLFSSL_KEIL
136522         "adcs	r5, r5, %[r]\n\t"
136523 #elif defined(__clang__)
136524         "adcs	r5, %[r]\n\t"
136525 #else
136526         "adc	r5, %[r]\n\t"
136527 #endif
136528         "#  A[11] * B[4]\n\t"
136529         "mov	%[a], r9\n\t"
136530         "mov	%[b], r10\n\t"
136531         "ldr	%[a], [%[a], #44]\n\t"
136532         "ldr	%[b], [%[b], #16]\n\t"
136533         "uxth	r6, %[a]\n\t"
136534         "uxth	r7, %[b]\n\t"
136535 #ifdef WOLFSSL_KEIL
136536         "muls	r7, r6, r7\n\t"
136537 #elif defined(__clang__)
136538         "muls	r7, r6\n\t"
136539 #else
136540         "mul	r7, r6\n\t"
136541 #endif
136542 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136543         "adds	r3, r3, r7\n\t"
136544 #else
136545         "add	r3, r3, r7\n\t"
136546 #endif
136547 #ifdef WOLFSSL_KEIL
136548         "adcs	r4, r4, %[r]\n\t"
136549 #elif defined(__clang__)
136550         "adcs	r4, %[r]\n\t"
136551 #else
136552         "adc	r4, %[r]\n\t"
136553 #endif
136554 #ifdef WOLFSSL_KEIL
136555         "adcs	r5, r5, %[r]\n\t"
136556 #elif defined(__clang__)
136557         "adcs	r5, %[r]\n\t"
136558 #else
136559         "adc	r5, %[r]\n\t"
136560 #endif
136561 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136562         "lsrs	r7, %[b], #16\n\t"
136563 #else
136564         "lsr	r7, %[b], #16\n\t"
136565 #endif
136566 #ifdef WOLFSSL_KEIL
136567         "muls	r6, r7, r6\n\t"
136568 #elif defined(__clang__)
136569         "muls	r6, r7\n\t"
136570 #else
136571         "mul	r6, r7\n\t"
136572 #endif
136573 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136574         "lsrs	r7, r6, #16\n\t"
136575 #else
136576         "lsr	r7, r6, #16\n\t"
136577 #endif
136578 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136579         "lsls	r6, r6, #16\n\t"
136580 #else
136581         "lsl	r6, r6, #16\n\t"
136582 #endif
136583 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136584         "adds	r3, r3, r6\n\t"
136585 #else
136586         "add	r3, r3, r6\n\t"
136587 #endif
136588 #ifdef WOLFSSL_KEIL
136589         "adcs	r4, r4, r7\n\t"
136590 #elif defined(__clang__)
136591         "adcs	r4, r7\n\t"
136592 #else
136593         "adc	r4, r7\n\t"
136594 #endif
136595 #ifdef WOLFSSL_KEIL
136596         "adcs	r5, r5, %[r]\n\t"
136597 #elif defined(__clang__)
136598         "adcs	r5, %[r]\n\t"
136599 #else
136600         "adc	r5, %[r]\n\t"
136601 #endif
136602 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136603         "lsrs	r6, %[a], #16\n\t"
136604 #else
136605         "lsr	r6, %[a], #16\n\t"
136606 #endif
136607 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136608         "lsrs	r7, %[b], #16\n\t"
136609 #else
136610         "lsr	r7, %[b], #16\n\t"
136611 #endif
136612 #ifdef WOLFSSL_KEIL
136613         "muls	r7, r6, r7\n\t"
136614 #elif defined(__clang__)
136615         "muls	r7, r6\n\t"
136616 #else
136617         "mul	r7, r6\n\t"
136618 #endif
136619 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136620         "adds	r4, r4, r7\n\t"
136621 #else
136622         "add	r4, r4, r7\n\t"
136623 #endif
136624 #ifdef WOLFSSL_KEIL
136625         "adcs	r5, r5, %[r]\n\t"
136626 #elif defined(__clang__)
136627         "adcs	r5, %[r]\n\t"
136628 #else
136629         "adc	r5, %[r]\n\t"
136630 #endif
136631         "uxth	r7, %[b]\n\t"
136632 #ifdef WOLFSSL_KEIL
136633         "muls	r6, r7, r6\n\t"
136634 #elif defined(__clang__)
136635         "muls	r6, r7\n\t"
136636 #else
136637         "mul	r6, r7\n\t"
136638 #endif
136639 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136640         "lsrs	r7, r6, #16\n\t"
136641 #else
136642         "lsr	r7, r6, #16\n\t"
136643 #endif
136644 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136645         "lsls	r6, r6, #16\n\t"
136646 #else
136647         "lsl	r6, r6, #16\n\t"
136648 #endif
136649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136650         "adds	r3, r3, r6\n\t"
136651 #else
136652         "add	r3, r3, r6\n\t"
136653 #endif
136654 #ifdef WOLFSSL_KEIL
136655         "adcs	r4, r4, r7\n\t"
136656 #elif defined(__clang__)
136657         "adcs	r4, r7\n\t"
136658 #else
136659         "adc	r4, r7\n\t"
136660 #endif
136661 #ifdef WOLFSSL_KEIL
136662         "adcs	r5, r5, %[r]\n\t"
136663 #elif defined(__clang__)
136664         "adcs	r5, %[r]\n\t"
136665 #else
136666         "adc	r5, %[r]\n\t"
136667 #endif
136668         "#  A[12] * B[3]\n\t"
136669         "mov	%[a], r9\n\t"
136670         "mov	%[b], r10\n\t"
136671         "ldr	%[a], [%[a], #48]\n\t"
136672         "ldr	%[b], [%[b], #12]\n\t"
136673         "uxth	r6, %[a]\n\t"
136674         "uxth	r7, %[b]\n\t"
136675 #ifdef WOLFSSL_KEIL
136676         "muls	r7, r6, r7\n\t"
136677 #elif defined(__clang__)
136678         "muls	r7, r6\n\t"
136679 #else
136680         "mul	r7, r6\n\t"
136681 #endif
136682 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136683         "adds	r3, r3, r7\n\t"
136684 #else
136685         "add	r3, r3, r7\n\t"
136686 #endif
136687 #ifdef WOLFSSL_KEIL
136688         "adcs	r4, r4, %[r]\n\t"
136689 #elif defined(__clang__)
136690         "adcs	r4, %[r]\n\t"
136691 #else
136692         "adc	r4, %[r]\n\t"
136693 #endif
136694 #ifdef WOLFSSL_KEIL
136695         "adcs	r5, r5, %[r]\n\t"
136696 #elif defined(__clang__)
136697         "adcs	r5, %[r]\n\t"
136698 #else
136699         "adc	r5, %[r]\n\t"
136700 #endif
136701 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136702         "lsrs	r7, %[b], #16\n\t"
136703 #else
136704         "lsr	r7, %[b], #16\n\t"
136705 #endif
136706 #ifdef WOLFSSL_KEIL
136707         "muls	r6, r7, r6\n\t"
136708 #elif defined(__clang__)
136709         "muls	r6, r7\n\t"
136710 #else
136711         "mul	r6, r7\n\t"
136712 #endif
136713 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136714         "lsrs	r7, r6, #16\n\t"
136715 #else
136716         "lsr	r7, r6, #16\n\t"
136717 #endif
136718 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136719         "lsls	r6, r6, #16\n\t"
136720 #else
136721         "lsl	r6, r6, #16\n\t"
136722 #endif
136723 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136724         "adds	r3, r3, r6\n\t"
136725 #else
136726         "add	r3, r3, r6\n\t"
136727 #endif
136728 #ifdef WOLFSSL_KEIL
136729         "adcs	r4, r4, r7\n\t"
136730 #elif defined(__clang__)
136731         "adcs	r4, r7\n\t"
136732 #else
136733         "adc	r4, r7\n\t"
136734 #endif
136735 #ifdef WOLFSSL_KEIL
136736         "adcs	r5, r5, %[r]\n\t"
136737 #elif defined(__clang__)
136738         "adcs	r5, %[r]\n\t"
136739 #else
136740         "adc	r5, %[r]\n\t"
136741 #endif
136742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136743         "lsrs	r6, %[a], #16\n\t"
136744 #else
136745         "lsr	r6, %[a], #16\n\t"
136746 #endif
136747 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136748         "lsrs	r7, %[b], #16\n\t"
136749 #else
136750         "lsr	r7, %[b], #16\n\t"
136751 #endif
136752 #ifdef WOLFSSL_KEIL
136753         "muls	r7, r6, r7\n\t"
136754 #elif defined(__clang__)
136755         "muls	r7, r6\n\t"
136756 #else
136757         "mul	r7, r6\n\t"
136758 #endif
136759 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136760         "adds	r4, r4, r7\n\t"
136761 #else
136762         "add	r4, r4, r7\n\t"
136763 #endif
136764 #ifdef WOLFSSL_KEIL
136765         "adcs	r5, r5, %[r]\n\t"
136766 #elif defined(__clang__)
136767         "adcs	r5, %[r]\n\t"
136768 #else
136769         "adc	r5, %[r]\n\t"
136770 #endif
136771         "uxth	r7, %[b]\n\t"
136772 #ifdef WOLFSSL_KEIL
136773         "muls	r6, r7, r6\n\t"
136774 #elif defined(__clang__)
136775         "muls	r6, r7\n\t"
136776 #else
136777         "mul	r6, r7\n\t"
136778 #endif
136779 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136780         "lsrs	r7, r6, #16\n\t"
136781 #else
136782         "lsr	r7, r6, #16\n\t"
136783 #endif
136784 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136785         "lsls	r6, r6, #16\n\t"
136786 #else
136787         "lsl	r6, r6, #16\n\t"
136788 #endif
136789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136790         "adds	r3, r3, r6\n\t"
136791 #else
136792         "add	r3, r3, r6\n\t"
136793 #endif
136794 #ifdef WOLFSSL_KEIL
136795         "adcs	r4, r4, r7\n\t"
136796 #elif defined(__clang__)
136797         "adcs	r4, r7\n\t"
136798 #else
136799         "adc	r4, r7\n\t"
136800 #endif
136801 #ifdef WOLFSSL_KEIL
136802         "adcs	r5, r5, %[r]\n\t"
136803 #elif defined(__clang__)
136804         "adcs	r5, %[r]\n\t"
136805 #else
136806         "adc	r5, %[r]\n\t"
136807 #endif
136808         "#  A[13] * B[2]\n\t"
136809         "mov	%[a], r9\n\t"
136810         "mov	%[b], r10\n\t"
136811         "ldr	%[a], [%[a], #52]\n\t"
136812         "ldr	%[b], [%[b], #8]\n\t"
136813         "uxth	r6, %[a]\n\t"
136814         "uxth	r7, %[b]\n\t"
136815 #ifdef WOLFSSL_KEIL
136816         "muls	r7, r6, r7\n\t"
136817 #elif defined(__clang__)
136818         "muls	r7, r6\n\t"
136819 #else
136820         "mul	r7, r6\n\t"
136821 #endif
136822 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136823         "adds	r3, r3, r7\n\t"
136824 #else
136825         "add	r3, r3, r7\n\t"
136826 #endif
136827 #ifdef WOLFSSL_KEIL
136828         "adcs	r4, r4, %[r]\n\t"
136829 #elif defined(__clang__)
136830         "adcs	r4, %[r]\n\t"
136831 #else
136832         "adc	r4, %[r]\n\t"
136833 #endif
136834 #ifdef WOLFSSL_KEIL
136835         "adcs	r5, r5, %[r]\n\t"
136836 #elif defined(__clang__)
136837         "adcs	r5, %[r]\n\t"
136838 #else
136839         "adc	r5, %[r]\n\t"
136840 #endif
136841 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136842         "lsrs	r7, %[b], #16\n\t"
136843 #else
136844         "lsr	r7, %[b], #16\n\t"
136845 #endif
136846 #ifdef WOLFSSL_KEIL
136847         "muls	r6, r7, r6\n\t"
136848 #elif defined(__clang__)
136849         "muls	r6, r7\n\t"
136850 #else
136851         "mul	r6, r7\n\t"
136852 #endif
136853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136854         "lsrs	r7, r6, #16\n\t"
136855 #else
136856         "lsr	r7, r6, #16\n\t"
136857 #endif
136858 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136859         "lsls	r6, r6, #16\n\t"
136860 #else
136861         "lsl	r6, r6, #16\n\t"
136862 #endif
136863 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136864         "adds	r3, r3, r6\n\t"
136865 #else
136866         "add	r3, r3, r6\n\t"
136867 #endif
136868 #ifdef WOLFSSL_KEIL
136869         "adcs	r4, r4, r7\n\t"
136870 #elif defined(__clang__)
136871         "adcs	r4, r7\n\t"
136872 #else
136873         "adc	r4, r7\n\t"
136874 #endif
136875 #ifdef WOLFSSL_KEIL
136876         "adcs	r5, r5, %[r]\n\t"
136877 #elif defined(__clang__)
136878         "adcs	r5, %[r]\n\t"
136879 #else
136880         "adc	r5, %[r]\n\t"
136881 #endif
136882 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136883         "lsrs	r6, %[a], #16\n\t"
136884 #else
136885         "lsr	r6, %[a], #16\n\t"
136886 #endif
136887 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136888         "lsrs	r7, %[b], #16\n\t"
136889 #else
136890         "lsr	r7, %[b], #16\n\t"
136891 #endif
136892 #ifdef WOLFSSL_KEIL
136893         "muls	r7, r6, r7\n\t"
136894 #elif defined(__clang__)
136895         "muls	r7, r6\n\t"
136896 #else
136897         "mul	r7, r6\n\t"
136898 #endif
136899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136900         "adds	r4, r4, r7\n\t"
136901 #else
136902         "add	r4, r4, r7\n\t"
136903 #endif
136904 #ifdef WOLFSSL_KEIL
136905         "adcs	r5, r5, %[r]\n\t"
136906 #elif defined(__clang__)
136907         "adcs	r5, %[r]\n\t"
136908 #else
136909         "adc	r5, %[r]\n\t"
136910 #endif
136911         "uxth	r7, %[b]\n\t"
136912 #ifdef WOLFSSL_KEIL
136913         "muls	r6, r7, r6\n\t"
136914 #elif defined(__clang__)
136915         "muls	r6, r7\n\t"
136916 #else
136917         "mul	r6, r7\n\t"
136918 #endif
136919 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136920         "lsrs	r7, r6, #16\n\t"
136921 #else
136922         "lsr	r7, r6, #16\n\t"
136923 #endif
136924 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136925         "lsls	r6, r6, #16\n\t"
136926 #else
136927         "lsl	r6, r6, #16\n\t"
136928 #endif
136929 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136930         "adds	r3, r3, r6\n\t"
136931 #else
136932         "add	r3, r3, r6\n\t"
136933 #endif
136934 #ifdef WOLFSSL_KEIL
136935         "adcs	r4, r4, r7\n\t"
136936 #elif defined(__clang__)
136937         "adcs	r4, r7\n\t"
136938 #else
136939         "adc	r4, r7\n\t"
136940 #endif
136941 #ifdef WOLFSSL_KEIL
136942         "adcs	r5, r5, %[r]\n\t"
136943 #elif defined(__clang__)
136944         "adcs	r5, %[r]\n\t"
136945 #else
136946         "adc	r5, %[r]\n\t"
136947 #endif
136948         "#  A[14] * B[1]\n\t"
136949         "mov	%[a], r9\n\t"
136950         "mov	%[b], r10\n\t"
136951         "ldr	%[a], [%[a], #56]\n\t"
136952         "ldr	%[b], [%[b], #4]\n\t"
136953         "uxth	r6, %[a]\n\t"
136954         "uxth	r7, %[b]\n\t"
136955 #ifdef WOLFSSL_KEIL
136956         "muls	r7, r6, r7\n\t"
136957 #elif defined(__clang__)
136958         "muls	r7, r6\n\t"
136959 #else
136960         "mul	r7, r6\n\t"
136961 #endif
136962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136963         "adds	r3, r3, r7\n\t"
136964 #else
136965         "add	r3, r3, r7\n\t"
136966 #endif
136967 #ifdef WOLFSSL_KEIL
136968         "adcs	r4, r4, %[r]\n\t"
136969 #elif defined(__clang__)
136970         "adcs	r4, %[r]\n\t"
136971 #else
136972         "adc	r4, %[r]\n\t"
136973 #endif
136974 #ifdef WOLFSSL_KEIL
136975         "adcs	r5, r5, %[r]\n\t"
136976 #elif defined(__clang__)
136977         "adcs	r5, %[r]\n\t"
136978 #else
136979         "adc	r5, %[r]\n\t"
136980 #endif
136981 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136982         "lsrs	r7, %[b], #16\n\t"
136983 #else
136984         "lsr	r7, %[b], #16\n\t"
136985 #endif
136986 #ifdef WOLFSSL_KEIL
136987         "muls	r6, r7, r6\n\t"
136988 #elif defined(__clang__)
136989         "muls	r6, r7\n\t"
136990 #else
136991         "mul	r6, r7\n\t"
136992 #endif
136993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136994         "lsrs	r7, r6, #16\n\t"
136995 #else
136996         "lsr	r7, r6, #16\n\t"
136997 #endif
136998 #if defined(__clang__) || defined(WOLFSSL_KEIL)
136999         "lsls	r6, r6, #16\n\t"
137000 #else
137001         "lsl	r6, r6, #16\n\t"
137002 #endif
137003 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137004         "adds	r3, r3, r6\n\t"
137005 #else
137006         "add	r3, r3, r6\n\t"
137007 #endif
137008 #ifdef WOLFSSL_KEIL
137009         "adcs	r4, r4, r7\n\t"
137010 #elif defined(__clang__)
137011         "adcs	r4, r7\n\t"
137012 #else
137013         "adc	r4, r7\n\t"
137014 #endif
137015 #ifdef WOLFSSL_KEIL
137016         "adcs	r5, r5, %[r]\n\t"
137017 #elif defined(__clang__)
137018         "adcs	r5, %[r]\n\t"
137019 #else
137020         "adc	r5, %[r]\n\t"
137021 #endif
137022 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137023         "lsrs	r6, %[a], #16\n\t"
137024 #else
137025         "lsr	r6, %[a], #16\n\t"
137026 #endif
137027 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137028         "lsrs	r7, %[b], #16\n\t"
137029 #else
137030         "lsr	r7, %[b], #16\n\t"
137031 #endif
137032 #ifdef WOLFSSL_KEIL
137033         "muls	r7, r6, r7\n\t"
137034 #elif defined(__clang__)
137035         "muls	r7, r6\n\t"
137036 #else
137037         "mul	r7, r6\n\t"
137038 #endif
137039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137040         "adds	r4, r4, r7\n\t"
137041 #else
137042         "add	r4, r4, r7\n\t"
137043 #endif
137044 #ifdef WOLFSSL_KEIL
137045         "adcs	r5, r5, %[r]\n\t"
137046 #elif defined(__clang__)
137047         "adcs	r5, %[r]\n\t"
137048 #else
137049         "adc	r5, %[r]\n\t"
137050 #endif
137051         "uxth	r7, %[b]\n\t"
137052 #ifdef WOLFSSL_KEIL
137053         "muls	r6, r7, r6\n\t"
137054 #elif defined(__clang__)
137055         "muls	r6, r7\n\t"
137056 #else
137057         "mul	r6, r7\n\t"
137058 #endif
137059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137060         "lsrs	r7, r6, #16\n\t"
137061 #else
137062         "lsr	r7, r6, #16\n\t"
137063 #endif
137064 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137065         "lsls	r6, r6, #16\n\t"
137066 #else
137067         "lsl	r6, r6, #16\n\t"
137068 #endif
137069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137070         "adds	r3, r3, r6\n\t"
137071 #else
137072         "add	r3, r3, r6\n\t"
137073 #endif
137074 #ifdef WOLFSSL_KEIL
137075         "adcs	r4, r4, r7\n\t"
137076 #elif defined(__clang__)
137077         "adcs	r4, r7\n\t"
137078 #else
137079         "adc	r4, r7\n\t"
137080 #endif
137081 #ifdef WOLFSSL_KEIL
137082         "adcs	r5, r5, %[r]\n\t"
137083 #elif defined(__clang__)
137084         "adcs	r5, %[r]\n\t"
137085 #else
137086         "adc	r5, %[r]\n\t"
137087 #endif
137088         "#  A[15] * B[0]\n\t"
137089         "mov	%[a], r9\n\t"
137090         "mov	%[b], r10\n\t"
137091         "ldr	%[a], [%[a], #60]\n\t"
137092         "ldr	%[b], [%[b]]\n\t"
137093         "uxth	r6, %[a]\n\t"
137094         "uxth	r7, %[b]\n\t"
137095 #ifdef WOLFSSL_KEIL
137096         "muls	r7, r6, r7\n\t"
137097 #elif defined(__clang__)
137098         "muls	r7, r6\n\t"
137099 #else
137100         "mul	r7, r6\n\t"
137101 #endif
137102 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137103         "adds	r3, r3, r7\n\t"
137104 #else
137105         "add	r3, r3, r7\n\t"
137106 #endif
137107 #ifdef WOLFSSL_KEIL
137108         "adcs	r4, r4, %[r]\n\t"
137109 #elif defined(__clang__)
137110         "adcs	r4, %[r]\n\t"
137111 #else
137112         "adc	r4, %[r]\n\t"
137113 #endif
137114 #ifdef WOLFSSL_KEIL
137115         "adcs	r5, r5, %[r]\n\t"
137116 #elif defined(__clang__)
137117         "adcs	r5, %[r]\n\t"
137118 #else
137119         "adc	r5, %[r]\n\t"
137120 #endif
137121 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137122         "lsrs	r7, %[b], #16\n\t"
137123 #else
137124         "lsr	r7, %[b], #16\n\t"
137125 #endif
137126 #ifdef WOLFSSL_KEIL
137127         "muls	r6, r7, r6\n\t"
137128 #elif defined(__clang__)
137129         "muls	r6, r7\n\t"
137130 #else
137131         "mul	r6, r7\n\t"
137132 #endif
137133 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137134         "lsrs	r7, r6, #16\n\t"
137135 #else
137136         "lsr	r7, r6, #16\n\t"
137137 #endif
137138 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137139         "lsls	r6, r6, #16\n\t"
137140 #else
137141         "lsl	r6, r6, #16\n\t"
137142 #endif
137143 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137144         "adds	r3, r3, r6\n\t"
137145 #else
137146         "add	r3, r3, r6\n\t"
137147 #endif
137148 #ifdef WOLFSSL_KEIL
137149         "adcs	r4, r4, r7\n\t"
137150 #elif defined(__clang__)
137151         "adcs	r4, r7\n\t"
137152 #else
137153         "adc	r4, r7\n\t"
137154 #endif
137155 #ifdef WOLFSSL_KEIL
137156         "adcs	r5, r5, %[r]\n\t"
137157 #elif defined(__clang__)
137158         "adcs	r5, %[r]\n\t"
137159 #else
137160         "adc	r5, %[r]\n\t"
137161 #endif
137162 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137163         "lsrs	r6, %[a], #16\n\t"
137164 #else
137165         "lsr	r6, %[a], #16\n\t"
137166 #endif
137167 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137168         "lsrs	r7, %[b], #16\n\t"
137169 #else
137170         "lsr	r7, %[b], #16\n\t"
137171 #endif
137172 #ifdef WOLFSSL_KEIL
137173         "muls	r7, r6, r7\n\t"
137174 #elif defined(__clang__)
137175         "muls	r7, r6\n\t"
137176 #else
137177         "mul	r7, r6\n\t"
137178 #endif
137179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137180         "adds	r4, r4, r7\n\t"
137181 #else
137182         "add	r4, r4, r7\n\t"
137183 #endif
137184 #ifdef WOLFSSL_KEIL
137185         "adcs	r5, r5, %[r]\n\t"
137186 #elif defined(__clang__)
137187         "adcs	r5, %[r]\n\t"
137188 #else
137189         "adc	r5, %[r]\n\t"
137190 #endif
137191         "uxth	r7, %[b]\n\t"
137192 #ifdef WOLFSSL_KEIL
137193         "muls	r6, r7, r6\n\t"
137194 #elif defined(__clang__)
137195         "muls	r6, r7\n\t"
137196 #else
137197         "mul	r6, r7\n\t"
137198 #endif
137199 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137200         "lsrs	r7, r6, #16\n\t"
137201 #else
137202         "lsr	r7, r6, #16\n\t"
137203 #endif
137204 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137205         "lsls	r6, r6, #16\n\t"
137206 #else
137207         "lsl	r6, r6, #16\n\t"
137208 #endif
137209 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137210         "adds	r3, r3, r6\n\t"
137211 #else
137212         "add	r3, r3, r6\n\t"
137213 #endif
137214 #ifdef WOLFSSL_KEIL
137215         "adcs	r4, r4, r7\n\t"
137216 #elif defined(__clang__)
137217         "adcs	r4, r7\n\t"
137218 #else
137219         "adc	r4, r7\n\t"
137220 #endif
137221 #ifdef WOLFSSL_KEIL
137222         "adcs	r5, r5, %[r]\n\t"
137223 #elif defined(__clang__)
137224         "adcs	r5, %[r]\n\t"
137225 #else
137226         "adc	r5, %[r]\n\t"
137227 #endif
137228         "str	r3, [sp, #60]\n\t"
137229         "#  A[15] * B[1]\n\t"
137230         "movs	r3, #0\n\t"
137231         "mov	%[a], r9\n\t"
137232         "mov	%[b], r10\n\t"
137233         "ldr	%[a], [%[a], #60]\n\t"
137234         "ldr	%[b], [%[b], #4]\n\t"
137235         "uxth	r6, %[a]\n\t"
137236         "uxth	r7, %[b]\n\t"
137237 #ifdef WOLFSSL_KEIL
137238         "muls	r7, r6, r7\n\t"
137239 #elif defined(__clang__)
137240         "muls	r7, r6\n\t"
137241 #else
137242         "mul	r7, r6\n\t"
137243 #endif
137244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137245         "adds	r4, r4, r7\n\t"
137246 #else
137247         "add	r4, r4, r7\n\t"
137248 #endif
137249 #ifdef WOLFSSL_KEIL
137250         "adcs	r5, r5, %[r]\n\t"
137251 #elif defined(__clang__)
137252         "adcs	r5, %[r]\n\t"
137253 #else
137254         "adc	r5, %[r]\n\t"
137255 #endif
137256 #ifdef WOLFSSL_KEIL
137257         "adcs	r3, r3, %[r]\n\t"
137258 #elif defined(__clang__)
137259         "adcs	r3, %[r]\n\t"
137260 #else
137261         "adc	r3, %[r]\n\t"
137262 #endif
137263 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137264         "lsrs	r7, %[b], #16\n\t"
137265 #else
137266         "lsr	r7, %[b], #16\n\t"
137267 #endif
137268 #ifdef WOLFSSL_KEIL
137269         "muls	r6, r7, r6\n\t"
137270 #elif defined(__clang__)
137271         "muls	r6, r7\n\t"
137272 #else
137273         "mul	r6, r7\n\t"
137274 #endif
137275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137276         "lsrs	r7, r6, #16\n\t"
137277 #else
137278         "lsr	r7, r6, #16\n\t"
137279 #endif
137280 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137281         "lsls	r6, r6, #16\n\t"
137282 #else
137283         "lsl	r6, r6, #16\n\t"
137284 #endif
137285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137286         "adds	r4, r4, r6\n\t"
137287 #else
137288         "add	r4, r4, r6\n\t"
137289 #endif
137290 #ifdef WOLFSSL_KEIL
137291         "adcs	r5, r5, r7\n\t"
137292 #elif defined(__clang__)
137293         "adcs	r5, r7\n\t"
137294 #else
137295         "adc	r5, r7\n\t"
137296 #endif
137297 #ifdef WOLFSSL_KEIL
137298         "adcs	r3, r3, %[r]\n\t"
137299 #elif defined(__clang__)
137300         "adcs	r3, %[r]\n\t"
137301 #else
137302         "adc	r3, %[r]\n\t"
137303 #endif
137304 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137305         "lsrs	r6, %[a], #16\n\t"
137306 #else
137307         "lsr	r6, %[a], #16\n\t"
137308 #endif
137309 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137310         "lsrs	r7, %[b], #16\n\t"
137311 #else
137312         "lsr	r7, %[b], #16\n\t"
137313 #endif
137314 #ifdef WOLFSSL_KEIL
137315         "muls	r7, r6, r7\n\t"
137316 #elif defined(__clang__)
137317         "muls	r7, r6\n\t"
137318 #else
137319         "mul	r7, r6\n\t"
137320 #endif
137321 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137322         "adds	r5, r5, r7\n\t"
137323 #else
137324         "add	r5, r5, r7\n\t"
137325 #endif
137326 #ifdef WOLFSSL_KEIL
137327         "adcs	r3, r3, %[r]\n\t"
137328 #elif defined(__clang__)
137329         "adcs	r3, %[r]\n\t"
137330 #else
137331         "adc	r3, %[r]\n\t"
137332 #endif
137333         "uxth	r7, %[b]\n\t"
137334 #ifdef WOLFSSL_KEIL
137335         "muls	r6, r7, r6\n\t"
137336 #elif defined(__clang__)
137337         "muls	r6, r7\n\t"
137338 #else
137339         "mul	r6, r7\n\t"
137340 #endif
137341 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137342         "lsrs	r7, r6, #16\n\t"
137343 #else
137344         "lsr	r7, r6, #16\n\t"
137345 #endif
137346 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137347         "lsls	r6, r6, #16\n\t"
137348 #else
137349         "lsl	r6, r6, #16\n\t"
137350 #endif
137351 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137352         "adds	r4, r4, r6\n\t"
137353 #else
137354         "add	r4, r4, r6\n\t"
137355 #endif
137356 #ifdef WOLFSSL_KEIL
137357         "adcs	r5, r5, r7\n\t"
137358 #elif defined(__clang__)
137359         "adcs	r5, r7\n\t"
137360 #else
137361         "adc	r5, r7\n\t"
137362 #endif
137363 #ifdef WOLFSSL_KEIL
137364         "adcs	r3, r3, %[r]\n\t"
137365 #elif defined(__clang__)
137366         "adcs	r3, %[r]\n\t"
137367 #else
137368         "adc	r3, %[r]\n\t"
137369 #endif
137370         "#  A[14] * B[2]\n\t"
137371         "mov	%[a], r9\n\t"
137372         "mov	%[b], r10\n\t"
137373         "ldr	%[a], [%[a], #56]\n\t"
137374         "ldr	%[b], [%[b], #8]\n\t"
137375         "uxth	r6, %[a]\n\t"
137376         "uxth	r7, %[b]\n\t"
137377 #ifdef WOLFSSL_KEIL
137378         "muls	r7, r6, r7\n\t"
137379 #elif defined(__clang__)
137380         "muls	r7, r6\n\t"
137381 #else
137382         "mul	r7, r6\n\t"
137383 #endif
137384 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137385         "adds	r4, r4, r7\n\t"
137386 #else
137387         "add	r4, r4, r7\n\t"
137388 #endif
137389 #ifdef WOLFSSL_KEIL
137390         "adcs	r5, r5, %[r]\n\t"
137391 #elif defined(__clang__)
137392         "adcs	r5, %[r]\n\t"
137393 #else
137394         "adc	r5, %[r]\n\t"
137395 #endif
137396 #ifdef WOLFSSL_KEIL
137397         "adcs	r3, r3, %[r]\n\t"
137398 #elif defined(__clang__)
137399         "adcs	r3, %[r]\n\t"
137400 #else
137401         "adc	r3, %[r]\n\t"
137402 #endif
137403 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137404         "lsrs	r7, %[b], #16\n\t"
137405 #else
137406         "lsr	r7, %[b], #16\n\t"
137407 #endif
137408 #ifdef WOLFSSL_KEIL
137409         "muls	r6, r7, r6\n\t"
137410 #elif defined(__clang__)
137411         "muls	r6, r7\n\t"
137412 #else
137413         "mul	r6, r7\n\t"
137414 #endif
137415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137416         "lsrs	r7, r6, #16\n\t"
137417 #else
137418         "lsr	r7, r6, #16\n\t"
137419 #endif
137420 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137421         "lsls	r6, r6, #16\n\t"
137422 #else
137423         "lsl	r6, r6, #16\n\t"
137424 #endif
137425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137426         "adds	r4, r4, r6\n\t"
137427 #else
137428         "add	r4, r4, r6\n\t"
137429 #endif
137430 #ifdef WOLFSSL_KEIL
137431         "adcs	r5, r5, r7\n\t"
137432 #elif defined(__clang__)
137433         "adcs	r5, r7\n\t"
137434 #else
137435         "adc	r5, r7\n\t"
137436 #endif
137437 #ifdef WOLFSSL_KEIL
137438         "adcs	r3, r3, %[r]\n\t"
137439 #elif defined(__clang__)
137440         "adcs	r3, %[r]\n\t"
137441 #else
137442         "adc	r3, %[r]\n\t"
137443 #endif
137444 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137445         "lsrs	r6, %[a], #16\n\t"
137446 #else
137447         "lsr	r6, %[a], #16\n\t"
137448 #endif
137449 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137450         "lsrs	r7, %[b], #16\n\t"
137451 #else
137452         "lsr	r7, %[b], #16\n\t"
137453 #endif
137454 #ifdef WOLFSSL_KEIL
137455         "muls	r7, r6, r7\n\t"
137456 #elif defined(__clang__)
137457         "muls	r7, r6\n\t"
137458 #else
137459         "mul	r7, r6\n\t"
137460 #endif
137461 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137462         "adds	r5, r5, r7\n\t"
137463 #else
137464         "add	r5, r5, r7\n\t"
137465 #endif
137466 #ifdef WOLFSSL_KEIL
137467         "adcs	r3, r3, %[r]\n\t"
137468 #elif defined(__clang__)
137469         "adcs	r3, %[r]\n\t"
137470 #else
137471         "adc	r3, %[r]\n\t"
137472 #endif
137473         "uxth	r7, %[b]\n\t"
137474 #ifdef WOLFSSL_KEIL
137475         "muls	r6, r7, r6\n\t"
137476 #elif defined(__clang__)
137477         "muls	r6, r7\n\t"
137478 #else
137479         "mul	r6, r7\n\t"
137480 #endif
137481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137482         "lsrs	r7, r6, #16\n\t"
137483 #else
137484         "lsr	r7, r6, #16\n\t"
137485 #endif
137486 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137487         "lsls	r6, r6, #16\n\t"
137488 #else
137489         "lsl	r6, r6, #16\n\t"
137490 #endif
137491 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137492         "adds	r4, r4, r6\n\t"
137493 #else
137494         "add	r4, r4, r6\n\t"
137495 #endif
137496 #ifdef WOLFSSL_KEIL
137497         "adcs	r5, r5, r7\n\t"
137498 #elif defined(__clang__)
137499         "adcs	r5, r7\n\t"
137500 #else
137501         "adc	r5, r7\n\t"
137502 #endif
137503 #ifdef WOLFSSL_KEIL
137504         "adcs	r3, r3, %[r]\n\t"
137505 #elif defined(__clang__)
137506         "adcs	r3, %[r]\n\t"
137507 #else
137508         "adc	r3, %[r]\n\t"
137509 #endif
137510         "#  A[13] * B[3]\n\t"
137511         "mov	%[a], r9\n\t"
137512         "mov	%[b], r10\n\t"
137513         "ldr	%[a], [%[a], #52]\n\t"
137514         "ldr	%[b], [%[b], #12]\n\t"
137515         "uxth	r6, %[a]\n\t"
137516         "uxth	r7, %[b]\n\t"
137517 #ifdef WOLFSSL_KEIL
137518         "muls	r7, r6, r7\n\t"
137519 #elif defined(__clang__)
137520         "muls	r7, r6\n\t"
137521 #else
137522         "mul	r7, r6\n\t"
137523 #endif
137524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137525         "adds	r4, r4, r7\n\t"
137526 #else
137527         "add	r4, r4, r7\n\t"
137528 #endif
137529 #ifdef WOLFSSL_KEIL
137530         "adcs	r5, r5, %[r]\n\t"
137531 #elif defined(__clang__)
137532         "adcs	r5, %[r]\n\t"
137533 #else
137534         "adc	r5, %[r]\n\t"
137535 #endif
137536 #ifdef WOLFSSL_KEIL
137537         "adcs	r3, r3, %[r]\n\t"
137538 #elif defined(__clang__)
137539         "adcs	r3, %[r]\n\t"
137540 #else
137541         "adc	r3, %[r]\n\t"
137542 #endif
137543 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137544         "lsrs	r7, %[b], #16\n\t"
137545 #else
137546         "lsr	r7, %[b], #16\n\t"
137547 #endif
137548 #ifdef WOLFSSL_KEIL
137549         "muls	r6, r7, r6\n\t"
137550 #elif defined(__clang__)
137551         "muls	r6, r7\n\t"
137552 #else
137553         "mul	r6, r7\n\t"
137554 #endif
137555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137556         "lsrs	r7, r6, #16\n\t"
137557 #else
137558         "lsr	r7, r6, #16\n\t"
137559 #endif
137560 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137561         "lsls	r6, r6, #16\n\t"
137562 #else
137563         "lsl	r6, r6, #16\n\t"
137564 #endif
137565 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137566         "adds	r4, r4, r6\n\t"
137567 #else
137568         "add	r4, r4, r6\n\t"
137569 #endif
137570 #ifdef WOLFSSL_KEIL
137571         "adcs	r5, r5, r7\n\t"
137572 #elif defined(__clang__)
137573         "adcs	r5, r7\n\t"
137574 #else
137575         "adc	r5, r7\n\t"
137576 #endif
137577 #ifdef WOLFSSL_KEIL
137578         "adcs	r3, r3, %[r]\n\t"
137579 #elif defined(__clang__)
137580         "adcs	r3, %[r]\n\t"
137581 #else
137582         "adc	r3, %[r]\n\t"
137583 #endif
137584 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137585         "lsrs	r6, %[a], #16\n\t"
137586 #else
137587         "lsr	r6, %[a], #16\n\t"
137588 #endif
137589 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137590         "lsrs	r7, %[b], #16\n\t"
137591 #else
137592         "lsr	r7, %[b], #16\n\t"
137593 #endif
137594 #ifdef WOLFSSL_KEIL
137595         "muls	r7, r6, r7\n\t"
137596 #elif defined(__clang__)
137597         "muls	r7, r6\n\t"
137598 #else
137599         "mul	r7, r6\n\t"
137600 #endif
137601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137602         "adds	r5, r5, r7\n\t"
137603 #else
137604         "add	r5, r5, r7\n\t"
137605 #endif
137606 #ifdef WOLFSSL_KEIL
137607         "adcs	r3, r3, %[r]\n\t"
137608 #elif defined(__clang__)
137609         "adcs	r3, %[r]\n\t"
137610 #else
137611         "adc	r3, %[r]\n\t"
137612 #endif
137613         "uxth	r7, %[b]\n\t"
137614 #ifdef WOLFSSL_KEIL
137615         "muls	r6, r7, r6\n\t"
137616 #elif defined(__clang__)
137617         "muls	r6, r7\n\t"
137618 #else
137619         "mul	r6, r7\n\t"
137620 #endif
137621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137622         "lsrs	r7, r6, #16\n\t"
137623 #else
137624         "lsr	r7, r6, #16\n\t"
137625 #endif
137626 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137627         "lsls	r6, r6, #16\n\t"
137628 #else
137629         "lsl	r6, r6, #16\n\t"
137630 #endif
137631 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137632         "adds	r4, r4, r6\n\t"
137633 #else
137634         "add	r4, r4, r6\n\t"
137635 #endif
137636 #ifdef WOLFSSL_KEIL
137637         "adcs	r5, r5, r7\n\t"
137638 #elif defined(__clang__)
137639         "adcs	r5, r7\n\t"
137640 #else
137641         "adc	r5, r7\n\t"
137642 #endif
137643 #ifdef WOLFSSL_KEIL
137644         "adcs	r3, r3, %[r]\n\t"
137645 #elif defined(__clang__)
137646         "adcs	r3, %[r]\n\t"
137647 #else
137648         "adc	r3, %[r]\n\t"
137649 #endif
137650         "#  A[12] * B[4]\n\t"
137651         "mov	%[a], r9\n\t"
137652         "mov	%[b], r10\n\t"
137653         "ldr	%[a], [%[a], #48]\n\t"
137654         "ldr	%[b], [%[b], #16]\n\t"
137655         "uxth	r6, %[a]\n\t"
137656         "uxth	r7, %[b]\n\t"
137657 #ifdef WOLFSSL_KEIL
137658         "muls	r7, r6, r7\n\t"
137659 #elif defined(__clang__)
137660         "muls	r7, r6\n\t"
137661 #else
137662         "mul	r7, r6\n\t"
137663 #endif
137664 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137665         "adds	r4, r4, r7\n\t"
137666 #else
137667         "add	r4, r4, r7\n\t"
137668 #endif
137669 #ifdef WOLFSSL_KEIL
137670         "adcs	r5, r5, %[r]\n\t"
137671 #elif defined(__clang__)
137672         "adcs	r5, %[r]\n\t"
137673 #else
137674         "adc	r5, %[r]\n\t"
137675 #endif
137676 #ifdef WOLFSSL_KEIL
137677         "adcs	r3, r3, %[r]\n\t"
137678 #elif defined(__clang__)
137679         "adcs	r3, %[r]\n\t"
137680 #else
137681         "adc	r3, %[r]\n\t"
137682 #endif
137683 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137684         "lsrs	r7, %[b], #16\n\t"
137685 #else
137686         "lsr	r7, %[b], #16\n\t"
137687 #endif
137688 #ifdef WOLFSSL_KEIL
137689         "muls	r6, r7, r6\n\t"
137690 #elif defined(__clang__)
137691         "muls	r6, r7\n\t"
137692 #else
137693         "mul	r6, r7\n\t"
137694 #endif
137695 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137696         "lsrs	r7, r6, #16\n\t"
137697 #else
137698         "lsr	r7, r6, #16\n\t"
137699 #endif
137700 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137701         "lsls	r6, r6, #16\n\t"
137702 #else
137703         "lsl	r6, r6, #16\n\t"
137704 #endif
137705 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137706         "adds	r4, r4, r6\n\t"
137707 #else
137708         "add	r4, r4, r6\n\t"
137709 #endif
137710 #ifdef WOLFSSL_KEIL
137711         "adcs	r5, r5, r7\n\t"
137712 #elif defined(__clang__)
137713         "adcs	r5, r7\n\t"
137714 #else
137715         "adc	r5, r7\n\t"
137716 #endif
137717 #ifdef WOLFSSL_KEIL
137718         "adcs	r3, r3, %[r]\n\t"
137719 #elif defined(__clang__)
137720         "adcs	r3, %[r]\n\t"
137721 #else
137722         "adc	r3, %[r]\n\t"
137723 #endif
137724 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137725         "lsrs	r6, %[a], #16\n\t"
137726 #else
137727         "lsr	r6, %[a], #16\n\t"
137728 #endif
137729 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137730         "lsrs	r7, %[b], #16\n\t"
137731 #else
137732         "lsr	r7, %[b], #16\n\t"
137733 #endif
137734 #ifdef WOLFSSL_KEIL
137735         "muls	r7, r6, r7\n\t"
137736 #elif defined(__clang__)
137737         "muls	r7, r6\n\t"
137738 #else
137739         "mul	r7, r6\n\t"
137740 #endif
137741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137742         "adds	r5, r5, r7\n\t"
137743 #else
137744         "add	r5, r5, r7\n\t"
137745 #endif
137746 #ifdef WOLFSSL_KEIL
137747         "adcs	r3, r3, %[r]\n\t"
137748 #elif defined(__clang__)
137749         "adcs	r3, %[r]\n\t"
137750 #else
137751         "adc	r3, %[r]\n\t"
137752 #endif
137753         "uxth	r7, %[b]\n\t"
137754 #ifdef WOLFSSL_KEIL
137755         "muls	r6, r7, r6\n\t"
137756 #elif defined(__clang__)
137757         "muls	r6, r7\n\t"
137758 #else
137759         "mul	r6, r7\n\t"
137760 #endif
137761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137762         "lsrs	r7, r6, #16\n\t"
137763 #else
137764         "lsr	r7, r6, #16\n\t"
137765 #endif
137766 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137767         "lsls	r6, r6, #16\n\t"
137768 #else
137769         "lsl	r6, r6, #16\n\t"
137770 #endif
137771 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137772         "adds	r4, r4, r6\n\t"
137773 #else
137774         "add	r4, r4, r6\n\t"
137775 #endif
137776 #ifdef WOLFSSL_KEIL
137777         "adcs	r5, r5, r7\n\t"
137778 #elif defined(__clang__)
137779         "adcs	r5, r7\n\t"
137780 #else
137781         "adc	r5, r7\n\t"
137782 #endif
137783 #ifdef WOLFSSL_KEIL
137784         "adcs	r3, r3, %[r]\n\t"
137785 #elif defined(__clang__)
137786         "adcs	r3, %[r]\n\t"
137787 #else
137788         "adc	r3, %[r]\n\t"
137789 #endif
137790         "#  A[11] * B[5]\n\t"
137791         "mov	%[a], r9\n\t"
137792         "mov	%[b], r10\n\t"
137793         "ldr	%[a], [%[a], #44]\n\t"
137794         "ldr	%[b], [%[b], #20]\n\t"
137795         "uxth	r6, %[a]\n\t"
137796         "uxth	r7, %[b]\n\t"
137797 #ifdef WOLFSSL_KEIL
137798         "muls	r7, r6, r7\n\t"
137799 #elif defined(__clang__)
137800         "muls	r7, r6\n\t"
137801 #else
137802         "mul	r7, r6\n\t"
137803 #endif
137804 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137805         "adds	r4, r4, r7\n\t"
137806 #else
137807         "add	r4, r4, r7\n\t"
137808 #endif
137809 #ifdef WOLFSSL_KEIL
137810         "adcs	r5, r5, %[r]\n\t"
137811 #elif defined(__clang__)
137812         "adcs	r5, %[r]\n\t"
137813 #else
137814         "adc	r5, %[r]\n\t"
137815 #endif
137816 #ifdef WOLFSSL_KEIL
137817         "adcs	r3, r3, %[r]\n\t"
137818 #elif defined(__clang__)
137819         "adcs	r3, %[r]\n\t"
137820 #else
137821         "adc	r3, %[r]\n\t"
137822 #endif
137823 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137824         "lsrs	r7, %[b], #16\n\t"
137825 #else
137826         "lsr	r7, %[b], #16\n\t"
137827 #endif
137828 #ifdef WOLFSSL_KEIL
137829         "muls	r6, r7, r6\n\t"
137830 #elif defined(__clang__)
137831         "muls	r6, r7\n\t"
137832 #else
137833         "mul	r6, r7\n\t"
137834 #endif
137835 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137836         "lsrs	r7, r6, #16\n\t"
137837 #else
137838         "lsr	r7, r6, #16\n\t"
137839 #endif
137840 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137841         "lsls	r6, r6, #16\n\t"
137842 #else
137843         "lsl	r6, r6, #16\n\t"
137844 #endif
137845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137846         "adds	r4, r4, r6\n\t"
137847 #else
137848         "add	r4, r4, r6\n\t"
137849 #endif
137850 #ifdef WOLFSSL_KEIL
137851         "adcs	r5, r5, r7\n\t"
137852 #elif defined(__clang__)
137853         "adcs	r5, r7\n\t"
137854 #else
137855         "adc	r5, r7\n\t"
137856 #endif
137857 #ifdef WOLFSSL_KEIL
137858         "adcs	r3, r3, %[r]\n\t"
137859 #elif defined(__clang__)
137860         "adcs	r3, %[r]\n\t"
137861 #else
137862         "adc	r3, %[r]\n\t"
137863 #endif
137864 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137865         "lsrs	r6, %[a], #16\n\t"
137866 #else
137867         "lsr	r6, %[a], #16\n\t"
137868 #endif
137869 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137870         "lsrs	r7, %[b], #16\n\t"
137871 #else
137872         "lsr	r7, %[b], #16\n\t"
137873 #endif
137874 #ifdef WOLFSSL_KEIL
137875         "muls	r7, r6, r7\n\t"
137876 #elif defined(__clang__)
137877         "muls	r7, r6\n\t"
137878 #else
137879         "mul	r7, r6\n\t"
137880 #endif
137881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137882         "adds	r5, r5, r7\n\t"
137883 #else
137884         "add	r5, r5, r7\n\t"
137885 #endif
137886 #ifdef WOLFSSL_KEIL
137887         "adcs	r3, r3, %[r]\n\t"
137888 #elif defined(__clang__)
137889         "adcs	r3, %[r]\n\t"
137890 #else
137891         "adc	r3, %[r]\n\t"
137892 #endif
137893         "uxth	r7, %[b]\n\t"
137894 #ifdef WOLFSSL_KEIL
137895         "muls	r6, r7, r6\n\t"
137896 #elif defined(__clang__)
137897         "muls	r6, r7\n\t"
137898 #else
137899         "mul	r6, r7\n\t"
137900 #endif
137901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137902         "lsrs	r7, r6, #16\n\t"
137903 #else
137904         "lsr	r7, r6, #16\n\t"
137905 #endif
137906 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137907         "lsls	r6, r6, #16\n\t"
137908 #else
137909         "lsl	r6, r6, #16\n\t"
137910 #endif
137911 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137912         "adds	r4, r4, r6\n\t"
137913 #else
137914         "add	r4, r4, r6\n\t"
137915 #endif
137916 #ifdef WOLFSSL_KEIL
137917         "adcs	r5, r5, r7\n\t"
137918 #elif defined(__clang__)
137919         "adcs	r5, r7\n\t"
137920 #else
137921         "adc	r5, r7\n\t"
137922 #endif
137923 #ifdef WOLFSSL_KEIL
137924         "adcs	r3, r3, %[r]\n\t"
137925 #elif defined(__clang__)
137926         "adcs	r3, %[r]\n\t"
137927 #else
137928         "adc	r3, %[r]\n\t"
137929 #endif
137930         "#  A[10] * B[6]\n\t"
137931         "mov	%[a], r9\n\t"
137932         "mov	%[b], r10\n\t"
137933         "ldr	%[a], [%[a], #40]\n\t"
137934         "ldr	%[b], [%[b], #24]\n\t"
137935         "uxth	r6, %[a]\n\t"
137936         "uxth	r7, %[b]\n\t"
137937 #ifdef WOLFSSL_KEIL
137938         "muls	r7, r6, r7\n\t"
137939 #elif defined(__clang__)
137940         "muls	r7, r6\n\t"
137941 #else
137942         "mul	r7, r6\n\t"
137943 #endif
137944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137945         "adds	r4, r4, r7\n\t"
137946 #else
137947         "add	r4, r4, r7\n\t"
137948 #endif
137949 #ifdef WOLFSSL_KEIL
137950         "adcs	r5, r5, %[r]\n\t"
137951 #elif defined(__clang__)
137952         "adcs	r5, %[r]\n\t"
137953 #else
137954         "adc	r5, %[r]\n\t"
137955 #endif
137956 #ifdef WOLFSSL_KEIL
137957         "adcs	r3, r3, %[r]\n\t"
137958 #elif defined(__clang__)
137959         "adcs	r3, %[r]\n\t"
137960 #else
137961         "adc	r3, %[r]\n\t"
137962 #endif
137963 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137964         "lsrs	r7, %[b], #16\n\t"
137965 #else
137966         "lsr	r7, %[b], #16\n\t"
137967 #endif
137968 #ifdef WOLFSSL_KEIL
137969         "muls	r6, r7, r6\n\t"
137970 #elif defined(__clang__)
137971         "muls	r6, r7\n\t"
137972 #else
137973         "mul	r6, r7\n\t"
137974 #endif
137975 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137976         "lsrs	r7, r6, #16\n\t"
137977 #else
137978         "lsr	r7, r6, #16\n\t"
137979 #endif
137980 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137981         "lsls	r6, r6, #16\n\t"
137982 #else
137983         "lsl	r6, r6, #16\n\t"
137984 #endif
137985 #if defined(__clang__) || defined(WOLFSSL_KEIL)
137986         "adds	r4, r4, r6\n\t"
137987 #else
137988         "add	r4, r4, r6\n\t"
137989 #endif
137990 #ifdef WOLFSSL_KEIL
137991         "adcs	r5, r5, r7\n\t"
137992 #elif defined(__clang__)
137993         "adcs	r5, r7\n\t"
137994 #else
137995         "adc	r5, r7\n\t"
137996 #endif
137997 #ifdef WOLFSSL_KEIL
137998         "adcs	r3, r3, %[r]\n\t"
137999 #elif defined(__clang__)
138000         "adcs	r3, %[r]\n\t"
138001 #else
138002         "adc	r3, %[r]\n\t"
138003 #endif
138004 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138005         "lsrs	r6, %[a], #16\n\t"
138006 #else
138007         "lsr	r6, %[a], #16\n\t"
138008 #endif
138009 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138010         "lsrs	r7, %[b], #16\n\t"
138011 #else
138012         "lsr	r7, %[b], #16\n\t"
138013 #endif
138014 #ifdef WOLFSSL_KEIL
138015         "muls	r7, r6, r7\n\t"
138016 #elif defined(__clang__)
138017         "muls	r7, r6\n\t"
138018 #else
138019         "mul	r7, r6\n\t"
138020 #endif
138021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138022         "adds	r5, r5, r7\n\t"
138023 #else
138024         "add	r5, r5, r7\n\t"
138025 #endif
138026 #ifdef WOLFSSL_KEIL
138027         "adcs	r3, r3, %[r]\n\t"
138028 #elif defined(__clang__)
138029         "adcs	r3, %[r]\n\t"
138030 #else
138031         "adc	r3, %[r]\n\t"
138032 #endif
138033         "uxth	r7, %[b]\n\t"
138034 #ifdef WOLFSSL_KEIL
138035         "muls	r6, r7, r6\n\t"
138036 #elif defined(__clang__)
138037         "muls	r6, r7\n\t"
138038 #else
138039         "mul	r6, r7\n\t"
138040 #endif
138041 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138042         "lsrs	r7, r6, #16\n\t"
138043 #else
138044         "lsr	r7, r6, #16\n\t"
138045 #endif
138046 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138047         "lsls	r6, r6, #16\n\t"
138048 #else
138049         "lsl	r6, r6, #16\n\t"
138050 #endif
138051 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138052         "adds	r4, r4, r6\n\t"
138053 #else
138054         "add	r4, r4, r6\n\t"
138055 #endif
138056 #ifdef WOLFSSL_KEIL
138057         "adcs	r5, r5, r7\n\t"
138058 #elif defined(__clang__)
138059         "adcs	r5, r7\n\t"
138060 #else
138061         "adc	r5, r7\n\t"
138062 #endif
138063 #ifdef WOLFSSL_KEIL
138064         "adcs	r3, r3, %[r]\n\t"
138065 #elif defined(__clang__)
138066         "adcs	r3, %[r]\n\t"
138067 #else
138068         "adc	r3, %[r]\n\t"
138069 #endif
138070         "#  A[9] * B[7]\n\t"
138071         "mov	%[a], r9\n\t"
138072         "mov	%[b], r10\n\t"
138073         "ldr	%[a], [%[a], #36]\n\t"
138074         "ldr	%[b], [%[b], #28]\n\t"
138075         "uxth	r6, %[a]\n\t"
138076         "uxth	r7, %[b]\n\t"
138077 #ifdef WOLFSSL_KEIL
138078         "muls	r7, r6, r7\n\t"
138079 #elif defined(__clang__)
138080         "muls	r7, r6\n\t"
138081 #else
138082         "mul	r7, r6\n\t"
138083 #endif
138084 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138085         "adds	r4, r4, r7\n\t"
138086 #else
138087         "add	r4, r4, r7\n\t"
138088 #endif
138089 #ifdef WOLFSSL_KEIL
138090         "adcs	r5, r5, %[r]\n\t"
138091 #elif defined(__clang__)
138092         "adcs	r5, %[r]\n\t"
138093 #else
138094         "adc	r5, %[r]\n\t"
138095 #endif
138096 #ifdef WOLFSSL_KEIL
138097         "adcs	r3, r3, %[r]\n\t"
138098 #elif defined(__clang__)
138099         "adcs	r3, %[r]\n\t"
138100 #else
138101         "adc	r3, %[r]\n\t"
138102 #endif
138103 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138104         "lsrs	r7, %[b], #16\n\t"
138105 #else
138106         "lsr	r7, %[b], #16\n\t"
138107 #endif
138108 #ifdef WOLFSSL_KEIL
138109         "muls	r6, r7, r6\n\t"
138110 #elif defined(__clang__)
138111         "muls	r6, r7\n\t"
138112 #else
138113         "mul	r6, r7\n\t"
138114 #endif
138115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138116         "lsrs	r7, r6, #16\n\t"
138117 #else
138118         "lsr	r7, r6, #16\n\t"
138119 #endif
138120 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138121         "lsls	r6, r6, #16\n\t"
138122 #else
138123         "lsl	r6, r6, #16\n\t"
138124 #endif
138125 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138126         "adds	r4, r4, r6\n\t"
138127 #else
138128         "add	r4, r4, r6\n\t"
138129 #endif
138130 #ifdef WOLFSSL_KEIL
138131         "adcs	r5, r5, r7\n\t"
138132 #elif defined(__clang__)
138133         "adcs	r5, r7\n\t"
138134 #else
138135         "adc	r5, r7\n\t"
138136 #endif
138137 #ifdef WOLFSSL_KEIL
138138         "adcs	r3, r3, %[r]\n\t"
138139 #elif defined(__clang__)
138140         "adcs	r3, %[r]\n\t"
138141 #else
138142         "adc	r3, %[r]\n\t"
138143 #endif
138144 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138145         "lsrs	r6, %[a], #16\n\t"
138146 #else
138147         "lsr	r6, %[a], #16\n\t"
138148 #endif
138149 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138150         "lsrs	r7, %[b], #16\n\t"
138151 #else
138152         "lsr	r7, %[b], #16\n\t"
138153 #endif
138154 #ifdef WOLFSSL_KEIL
138155         "muls	r7, r6, r7\n\t"
138156 #elif defined(__clang__)
138157         "muls	r7, r6\n\t"
138158 #else
138159         "mul	r7, r6\n\t"
138160 #endif
138161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138162         "adds	r5, r5, r7\n\t"
138163 #else
138164         "add	r5, r5, r7\n\t"
138165 #endif
138166 #ifdef WOLFSSL_KEIL
138167         "adcs	r3, r3, %[r]\n\t"
138168 #elif defined(__clang__)
138169         "adcs	r3, %[r]\n\t"
138170 #else
138171         "adc	r3, %[r]\n\t"
138172 #endif
138173         "uxth	r7, %[b]\n\t"
138174 #ifdef WOLFSSL_KEIL
138175         "muls	r6, r7, r6\n\t"
138176 #elif defined(__clang__)
138177         "muls	r6, r7\n\t"
138178 #else
138179         "mul	r6, r7\n\t"
138180 #endif
138181 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138182         "lsrs	r7, r6, #16\n\t"
138183 #else
138184         "lsr	r7, r6, #16\n\t"
138185 #endif
138186 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138187         "lsls	r6, r6, #16\n\t"
138188 #else
138189         "lsl	r6, r6, #16\n\t"
138190 #endif
138191 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138192         "adds	r4, r4, r6\n\t"
138193 #else
138194         "add	r4, r4, r6\n\t"
138195 #endif
138196 #ifdef WOLFSSL_KEIL
138197         "adcs	r5, r5, r7\n\t"
138198 #elif defined(__clang__)
138199         "adcs	r5, r7\n\t"
138200 #else
138201         "adc	r5, r7\n\t"
138202 #endif
138203 #ifdef WOLFSSL_KEIL
138204         "adcs	r3, r3, %[r]\n\t"
138205 #elif defined(__clang__)
138206         "adcs	r3, %[r]\n\t"
138207 #else
138208         "adc	r3, %[r]\n\t"
138209 #endif
138210         "#  A[8] * B[8]\n\t"
138211         "mov	%[a], r9\n\t"
138212         "mov	%[b], r10\n\t"
138213         "ldr	%[a], [%[a], #32]\n\t"
138214         "ldr	%[b], [%[b], #32]\n\t"
138215         "uxth	r6, %[a]\n\t"
138216         "uxth	r7, %[b]\n\t"
138217 #ifdef WOLFSSL_KEIL
138218         "muls	r7, r6, r7\n\t"
138219 #elif defined(__clang__)
138220         "muls	r7, r6\n\t"
138221 #else
138222         "mul	r7, r6\n\t"
138223 #endif
138224 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138225         "adds	r4, r4, r7\n\t"
138226 #else
138227         "add	r4, r4, r7\n\t"
138228 #endif
138229 #ifdef WOLFSSL_KEIL
138230         "adcs	r5, r5, %[r]\n\t"
138231 #elif defined(__clang__)
138232         "adcs	r5, %[r]\n\t"
138233 #else
138234         "adc	r5, %[r]\n\t"
138235 #endif
138236 #ifdef WOLFSSL_KEIL
138237         "adcs	r3, r3, %[r]\n\t"
138238 #elif defined(__clang__)
138239         "adcs	r3, %[r]\n\t"
138240 #else
138241         "adc	r3, %[r]\n\t"
138242 #endif
138243 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138244         "lsrs	r7, %[b], #16\n\t"
138245 #else
138246         "lsr	r7, %[b], #16\n\t"
138247 #endif
138248 #ifdef WOLFSSL_KEIL
138249         "muls	r6, r7, r6\n\t"
138250 #elif defined(__clang__)
138251         "muls	r6, r7\n\t"
138252 #else
138253         "mul	r6, r7\n\t"
138254 #endif
138255 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138256         "lsrs	r7, r6, #16\n\t"
138257 #else
138258         "lsr	r7, r6, #16\n\t"
138259 #endif
138260 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138261         "lsls	r6, r6, #16\n\t"
138262 #else
138263         "lsl	r6, r6, #16\n\t"
138264 #endif
138265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138266         "adds	r4, r4, r6\n\t"
138267 #else
138268         "add	r4, r4, r6\n\t"
138269 #endif
138270 #ifdef WOLFSSL_KEIL
138271         "adcs	r5, r5, r7\n\t"
138272 #elif defined(__clang__)
138273         "adcs	r5, r7\n\t"
138274 #else
138275         "adc	r5, r7\n\t"
138276 #endif
138277 #ifdef WOLFSSL_KEIL
138278         "adcs	r3, r3, %[r]\n\t"
138279 #elif defined(__clang__)
138280         "adcs	r3, %[r]\n\t"
138281 #else
138282         "adc	r3, %[r]\n\t"
138283 #endif
138284 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138285         "lsrs	r6, %[a], #16\n\t"
138286 #else
138287         "lsr	r6, %[a], #16\n\t"
138288 #endif
138289 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138290         "lsrs	r7, %[b], #16\n\t"
138291 #else
138292         "lsr	r7, %[b], #16\n\t"
138293 #endif
138294 #ifdef WOLFSSL_KEIL
138295         "muls	r7, r6, r7\n\t"
138296 #elif defined(__clang__)
138297         "muls	r7, r6\n\t"
138298 #else
138299         "mul	r7, r6\n\t"
138300 #endif
138301 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138302         "adds	r5, r5, r7\n\t"
138303 #else
138304         "add	r5, r5, r7\n\t"
138305 #endif
138306 #ifdef WOLFSSL_KEIL
138307         "adcs	r3, r3, %[r]\n\t"
138308 #elif defined(__clang__)
138309         "adcs	r3, %[r]\n\t"
138310 #else
138311         "adc	r3, %[r]\n\t"
138312 #endif
138313         "uxth	r7, %[b]\n\t"
138314 #ifdef WOLFSSL_KEIL
138315         "muls	r6, r7, r6\n\t"
138316 #elif defined(__clang__)
138317         "muls	r6, r7\n\t"
138318 #else
138319         "mul	r6, r7\n\t"
138320 #endif
138321 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138322         "lsrs	r7, r6, #16\n\t"
138323 #else
138324         "lsr	r7, r6, #16\n\t"
138325 #endif
138326 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138327         "lsls	r6, r6, #16\n\t"
138328 #else
138329         "lsl	r6, r6, #16\n\t"
138330 #endif
138331 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138332         "adds	r4, r4, r6\n\t"
138333 #else
138334         "add	r4, r4, r6\n\t"
138335 #endif
138336 #ifdef WOLFSSL_KEIL
138337         "adcs	r5, r5, r7\n\t"
138338 #elif defined(__clang__)
138339         "adcs	r5, r7\n\t"
138340 #else
138341         "adc	r5, r7\n\t"
138342 #endif
138343 #ifdef WOLFSSL_KEIL
138344         "adcs	r3, r3, %[r]\n\t"
138345 #elif defined(__clang__)
138346         "adcs	r3, %[r]\n\t"
138347 #else
138348         "adc	r3, %[r]\n\t"
138349 #endif
138350         "#  A[7] * B[9]\n\t"
138351         "mov	%[a], r9\n\t"
138352         "mov	%[b], r10\n\t"
138353         "ldr	%[a], [%[a], #28]\n\t"
138354         "ldr	%[b], [%[b], #36]\n\t"
138355         "uxth	r6, %[a]\n\t"
138356         "uxth	r7, %[b]\n\t"
138357 #ifdef WOLFSSL_KEIL
138358         "muls	r7, r6, r7\n\t"
138359 #elif defined(__clang__)
138360         "muls	r7, r6\n\t"
138361 #else
138362         "mul	r7, r6\n\t"
138363 #endif
138364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138365         "adds	r4, r4, r7\n\t"
138366 #else
138367         "add	r4, r4, r7\n\t"
138368 #endif
138369 #ifdef WOLFSSL_KEIL
138370         "adcs	r5, r5, %[r]\n\t"
138371 #elif defined(__clang__)
138372         "adcs	r5, %[r]\n\t"
138373 #else
138374         "adc	r5, %[r]\n\t"
138375 #endif
138376 #ifdef WOLFSSL_KEIL
138377         "adcs	r3, r3, %[r]\n\t"
138378 #elif defined(__clang__)
138379         "adcs	r3, %[r]\n\t"
138380 #else
138381         "adc	r3, %[r]\n\t"
138382 #endif
138383 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138384         "lsrs	r7, %[b], #16\n\t"
138385 #else
138386         "lsr	r7, %[b], #16\n\t"
138387 #endif
138388 #ifdef WOLFSSL_KEIL
138389         "muls	r6, r7, r6\n\t"
138390 #elif defined(__clang__)
138391         "muls	r6, r7\n\t"
138392 #else
138393         "mul	r6, r7\n\t"
138394 #endif
138395 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138396         "lsrs	r7, r6, #16\n\t"
138397 #else
138398         "lsr	r7, r6, #16\n\t"
138399 #endif
138400 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138401         "lsls	r6, r6, #16\n\t"
138402 #else
138403         "lsl	r6, r6, #16\n\t"
138404 #endif
138405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138406         "adds	r4, r4, r6\n\t"
138407 #else
138408         "add	r4, r4, r6\n\t"
138409 #endif
138410 #ifdef WOLFSSL_KEIL
138411         "adcs	r5, r5, r7\n\t"
138412 #elif defined(__clang__)
138413         "adcs	r5, r7\n\t"
138414 #else
138415         "adc	r5, r7\n\t"
138416 #endif
138417 #ifdef WOLFSSL_KEIL
138418         "adcs	r3, r3, %[r]\n\t"
138419 #elif defined(__clang__)
138420         "adcs	r3, %[r]\n\t"
138421 #else
138422         "adc	r3, %[r]\n\t"
138423 #endif
138424 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138425         "lsrs	r6, %[a], #16\n\t"
138426 #else
138427         "lsr	r6, %[a], #16\n\t"
138428 #endif
138429 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138430         "lsrs	r7, %[b], #16\n\t"
138431 #else
138432         "lsr	r7, %[b], #16\n\t"
138433 #endif
138434 #ifdef WOLFSSL_KEIL
138435         "muls	r7, r6, r7\n\t"
138436 #elif defined(__clang__)
138437         "muls	r7, r6\n\t"
138438 #else
138439         "mul	r7, r6\n\t"
138440 #endif
138441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138442         "adds	r5, r5, r7\n\t"
138443 #else
138444         "add	r5, r5, r7\n\t"
138445 #endif
138446 #ifdef WOLFSSL_KEIL
138447         "adcs	r3, r3, %[r]\n\t"
138448 #elif defined(__clang__)
138449         "adcs	r3, %[r]\n\t"
138450 #else
138451         "adc	r3, %[r]\n\t"
138452 #endif
138453         "uxth	r7, %[b]\n\t"
138454 #ifdef WOLFSSL_KEIL
138455         "muls	r6, r7, r6\n\t"
138456 #elif defined(__clang__)
138457         "muls	r6, r7\n\t"
138458 #else
138459         "mul	r6, r7\n\t"
138460 #endif
138461 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138462         "lsrs	r7, r6, #16\n\t"
138463 #else
138464         "lsr	r7, r6, #16\n\t"
138465 #endif
138466 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138467         "lsls	r6, r6, #16\n\t"
138468 #else
138469         "lsl	r6, r6, #16\n\t"
138470 #endif
138471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138472         "adds	r4, r4, r6\n\t"
138473 #else
138474         "add	r4, r4, r6\n\t"
138475 #endif
138476 #ifdef WOLFSSL_KEIL
138477         "adcs	r5, r5, r7\n\t"
138478 #elif defined(__clang__)
138479         "adcs	r5, r7\n\t"
138480 #else
138481         "adc	r5, r7\n\t"
138482 #endif
138483 #ifdef WOLFSSL_KEIL
138484         "adcs	r3, r3, %[r]\n\t"
138485 #elif defined(__clang__)
138486         "adcs	r3, %[r]\n\t"
138487 #else
138488         "adc	r3, %[r]\n\t"
138489 #endif
138490         "#  A[6] * B[10]\n\t"
138491         "mov	%[a], r9\n\t"
138492         "mov	%[b], r10\n\t"
138493         "ldr	%[a], [%[a], #24]\n\t"
138494         "ldr	%[b], [%[b], #40]\n\t"
138495         "uxth	r6, %[a]\n\t"
138496         "uxth	r7, %[b]\n\t"
138497 #ifdef WOLFSSL_KEIL
138498         "muls	r7, r6, r7\n\t"
138499 #elif defined(__clang__)
138500         "muls	r7, r6\n\t"
138501 #else
138502         "mul	r7, r6\n\t"
138503 #endif
138504 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138505         "adds	r4, r4, r7\n\t"
138506 #else
138507         "add	r4, r4, r7\n\t"
138508 #endif
138509 #ifdef WOLFSSL_KEIL
138510         "adcs	r5, r5, %[r]\n\t"
138511 #elif defined(__clang__)
138512         "adcs	r5, %[r]\n\t"
138513 #else
138514         "adc	r5, %[r]\n\t"
138515 #endif
138516 #ifdef WOLFSSL_KEIL
138517         "adcs	r3, r3, %[r]\n\t"
138518 #elif defined(__clang__)
138519         "adcs	r3, %[r]\n\t"
138520 #else
138521         "adc	r3, %[r]\n\t"
138522 #endif
138523 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138524         "lsrs	r7, %[b], #16\n\t"
138525 #else
138526         "lsr	r7, %[b], #16\n\t"
138527 #endif
138528 #ifdef WOLFSSL_KEIL
138529         "muls	r6, r7, r6\n\t"
138530 #elif defined(__clang__)
138531         "muls	r6, r7\n\t"
138532 #else
138533         "mul	r6, r7\n\t"
138534 #endif
138535 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138536         "lsrs	r7, r6, #16\n\t"
138537 #else
138538         "lsr	r7, r6, #16\n\t"
138539 #endif
138540 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138541         "lsls	r6, r6, #16\n\t"
138542 #else
138543         "lsl	r6, r6, #16\n\t"
138544 #endif
138545 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138546         "adds	r4, r4, r6\n\t"
138547 #else
138548         "add	r4, r4, r6\n\t"
138549 #endif
138550 #ifdef WOLFSSL_KEIL
138551         "adcs	r5, r5, r7\n\t"
138552 #elif defined(__clang__)
138553         "adcs	r5, r7\n\t"
138554 #else
138555         "adc	r5, r7\n\t"
138556 #endif
138557 #ifdef WOLFSSL_KEIL
138558         "adcs	r3, r3, %[r]\n\t"
138559 #elif defined(__clang__)
138560         "adcs	r3, %[r]\n\t"
138561 #else
138562         "adc	r3, %[r]\n\t"
138563 #endif
138564 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138565         "lsrs	r6, %[a], #16\n\t"
138566 #else
138567         "lsr	r6, %[a], #16\n\t"
138568 #endif
138569 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138570         "lsrs	r7, %[b], #16\n\t"
138571 #else
138572         "lsr	r7, %[b], #16\n\t"
138573 #endif
138574 #ifdef WOLFSSL_KEIL
138575         "muls	r7, r6, r7\n\t"
138576 #elif defined(__clang__)
138577         "muls	r7, r6\n\t"
138578 #else
138579         "mul	r7, r6\n\t"
138580 #endif
138581 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138582         "adds	r5, r5, r7\n\t"
138583 #else
138584         "add	r5, r5, r7\n\t"
138585 #endif
138586 #ifdef WOLFSSL_KEIL
138587         "adcs	r3, r3, %[r]\n\t"
138588 #elif defined(__clang__)
138589         "adcs	r3, %[r]\n\t"
138590 #else
138591         "adc	r3, %[r]\n\t"
138592 #endif
138593         "uxth	r7, %[b]\n\t"
138594 #ifdef WOLFSSL_KEIL
138595         "muls	r6, r7, r6\n\t"
138596 #elif defined(__clang__)
138597         "muls	r6, r7\n\t"
138598 #else
138599         "mul	r6, r7\n\t"
138600 #endif
138601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138602         "lsrs	r7, r6, #16\n\t"
138603 #else
138604         "lsr	r7, r6, #16\n\t"
138605 #endif
138606 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138607         "lsls	r6, r6, #16\n\t"
138608 #else
138609         "lsl	r6, r6, #16\n\t"
138610 #endif
138611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138612         "adds	r4, r4, r6\n\t"
138613 #else
138614         "add	r4, r4, r6\n\t"
138615 #endif
138616 #ifdef WOLFSSL_KEIL
138617         "adcs	r5, r5, r7\n\t"
138618 #elif defined(__clang__)
138619         "adcs	r5, r7\n\t"
138620 #else
138621         "adc	r5, r7\n\t"
138622 #endif
138623 #ifdef WOLFSSL_KEIL
138624         "adcs	r3, r3, %[r]\n\t"
138625 #elif defined(__clang__)
138626         "adcs	r3, %[r]\n\t"
138627 #else
138628         "adc	r3, %[r]\n\t"
138629 #endif
138630         "#  A[5] * B[11]\n\t"
138631         "mov	%[a], r9\n\t"
138632         "mov	%[b], r10\n\t"
138633         "ldr	%[a], [%[a], #20]\n\t"
138634         "ldr	%[b], [%[b], #44]\n\t"
138635         "uxth	r6, %[a]\n\t"
138636         "uxth	r7, %[b]\n\t"
138637 #ifdef WOLFSSL_KEIL
138638         "muls	r7, r6, r7\n\t"
138639 #elif defined(__clang__)
138640         "muls	r7, r6\n\t"
138641 #else
138642         "mul	r7, r6\n\t"
138643 #endif
138644 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138645         "adds	r4, r4, r7\n\t"
138646 #else
138647         "add	r4, r4, r7\n\t"
138648 #endif
138649 #ifdef WOLFSSL_KEIL
138650         "adcs	r5, r5, %[r]\n\t"
138651 #elif defined(__clang__)
138652         "adcs	r5, %[r]\n\t"
138653 #else
138654         "adc	r5, %[r]\n\t"
138655 #endif
138656 #ifdef WOLFSSL_KEIL
138657         "adcs	r3, r3, %[r]\n\t"
138658 #elif defined(__clang__)
138659         "adcs	r3, %[r]\n\t"
138660 #else
138661         "adc	r3, %[r]\n\t"
138662 #endif
138663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138664         "lsrs	r7, %[b], #16\n\t"
138665 #else
138666         "lsr	r7, %[b], #16\n\t"
138667 #endif
138668 #ifdef WOLFSSL_KEIL
138669         "muls	r6, r7, r6\n\t"
138670 #elif defined(__clang__)
138671         "muls	r6, r7\n\t"
138672 #else
138673         "mul	r6, r7\n\t"
138674 #endif
138675 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138676         "lsrs	r7, r6, #16\n\t"
138677 #else
138678         "lsr	r7, r6, #16\n\t"
138679 #endif
138680 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138681         "lsls	r6, r6, #16\n\t"
138682 #else
138683         "lsl	r6, r6, #16\n\t"
138684 #endif
138685 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138686         "adds	r4, r4, r6\n\t"
138687 #else
138688         "add	r4, r4, r6\n\t"
138689 #endif
138690 #ifdef WOLFSSL_KEIL
138691         "adcs	r5, r5, r7\n\t"
138692 #elif defined(__clang__)
138693         "adcs	r5, r7\n\t"
138694 #else
138695         "adc	r5, r7\n\t"
138696 #endif
138697 #ifdef WOLFSSL_KEIL
138698         "adcs	r3, r3, %[r]\n\t"
138699 #elif defined(__clang__)
138700         "adcs	r3, %[r]\n\t"
138701 #else
138702         "adc	r3, %[r]\n\t"
138703 #endif
138704 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138705         "lsrs	r6, %[a], #16\n\t"
138706 #else
138707         "lsr	r6, %[a], #16\n\t"
138708 #endif
138709 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138710         "lsrs	r7, %[b], #16\n\t"
138711 #else
138712         "lsr	r7, %[b], #16\n\t"
138713 #endif
138714 #ifdef WOLFSSL_KEIL
138715         "muls	r7, r6, r7\n\t"
138716 #elif defined(__clang__)
138717         "muls	r7, r6\n\t"
138718 #else
138719         "mul	r7, r6\n\t"
138720 #endif
138721 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138722         "adds	r5, r5, r7\n\t"
138723 #else
138724         "add	r5, r5, r7\n\t"
138725 #endif
138726 #ifdef WOLFSSL_KEIL
138727         "adcs	r3, r3, %[r]\n\t"
138728 #elif defined(__clang__)
138729         "adcs	r3, %[r]\n\t"
138730 #else
138731         "adc	r3, %[r]\n\t"
138732 #endif
138733         "uxth	r7, %[b]\n\t"
138734 #ifdef WOLFSSL_KEIL
138735         "muls	r6, r7, r6\n\t"
138736 #elif defined(__clang__)
138737         "muls	r6, r7\n\t"
138738 #else
138739         "mul	r6, r7\n\t"
138740 #endif
138741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138742         "lsrs	r7, r6, #16\n\t"
138743 #else
138744         "lsr	r7, r6, #16\n\t"
138745 #endif
138746 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138747         "lsls	r6, r6, #16\n\t"
138748 #else
138749         "lsl	r6, r6, #16\n\t"
138750 #endif
138751 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138752         "adds	r4, r4, r6\n\t"
138753 #else
138754         "add	r4, r4, r6\n\t"
138755 #endif
138756 #ifdef WOLFSSL_KEIL
138757         "adcs	r5, r5, r7\n\t"
138758 #elif defined(__clang__)
138759         "adcs	r5, r7\n\t"
138760 #else
138761         "adc	r5, r7\n\t"
138762 #endif
138763 #ifdef WOLFSSL_KEIL
138764         "adcs	r3, r3, %[r]\n\t"
138765 #elif defined(__clang__)
138766         "adcs	r3, %[r]\n\t"
138767 #else
138768         "adc	r3, %[r]\n\t"
138769 #endif
138770         "#  A[4] * B[12]\n\t"
138771         "mov	%[a], r9\n\t"
138772         "mov	%[b], r10\n\t"
138773         "ldr	%[a], [%[a], #16]\n\t"
138774         "ldr	%[b], [%[b], #48]\n\t"
138775         "uxth	r6, %[a]\n\t"
138776         "uxth	r7, %[b]\n\t"
138777 #ifdef WOLFSSL_KEIL
138778         "muls	r7, r6, r7\n\t"
138779 #elif defined(__clang__)
138780         "muls	r7, r6\n\t"
138781 #else
138782         "mul	r7, r6\n\t"
138783 #endif
138784 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138785         "adds	r4, r4, r7\n\t"
138786 #else
138787         "add	r4, r4, r7\n\t"
138788 #endif
138789 #ifdef WOLFSSL_KEIL
138790         "adcs	r5, r5, %[r]\n\t"
138791 #elif defined(__clang__)
138792         "adcs	r5, %[r]\n\t"
138793 #else
138794         "adc	r5, %[r]\n\t"
138795 #endif
138796 #ifdef WOLFSSL_KEIL
138797         "adcs	r3, r3, %[r]\n\t"
138798 #elif defined(__clang__)
138799         "adcs	r3, %[r]\n\t"
138800 #else
138801         "adc	r3, %[r]\n\t"
138802 #endif
138803 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138804         "lsrs	r7, %[b], #16\n\t"
138805 #else
138806         "lsr	r7, %[b], #16\n\t"
138807 #endif
138808 #ifdef WOLFSSL_KEIL
138809         "muls	r6, r7, r6\n\t"
138810 #elif defined(__clang__)
138811         "muls	r6, r7\n\t"
138812 #else
138813         "mul	r6, r7\n\t"
138814 #endif
138815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138816         "lsrs	r7, r6, #16\n\t"
138817 #else
138818         "lsr	r7, r6, #16\n\t"
138819 #endif
138820 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138821         "lsls	r6, r6, #16\n\t"
138822 #else
138823         "lsl	r6, r6, #16\n\t"
138824 #endif
138825 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138826         "adds	r4, r4, r6\n\t"
138827 #else
138828         "add	r4, r4, r6\n\t"
138829 #endif
138830 #ifdef WOLFSSL_KEIL
138831         "adcs	r5, r5, r7\n\t"
138832 #elif defined(__clang__)
138833         "adcs	r5, r7\n\t"
138834 #else
138835         "adc	r5, r7\n\t"
138836 #endif
138837 #ifdef WOLFSSL_KEIL
138838         "adcs	r3, r3, %[r]\n\t"
138839 #elif defined(__clang__)
138840         "adcs	r3, %[r]\n\t"
138841 #else
138842         "adc	r3, %[r]\n\t"
138843 #endif
138844 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138845         "lsrs	r6, %[a], #16\n\t"
138846 #else
138847         "lsr	r6, %[a], #16\n\t"
138848 #endif
138849 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138850         "lsrs	r7, %[b], #16\n\t"
138851 #else
138852         "lsr	r7, %[b], #16\n\t"
138853 #endif
138854 #ifdef WOLFSSL_KEIL
138855         "muls	r7, r6, r7\n\t"
138856 #elif defined(__clang__)
138857         "muls	r7, r6\n\t"
138858 #else
138859         "mul	r7, r6\n\t"
138860 #endif
138861 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138862         "adds	r5, r5, r7\n\t"
138863 #else
138864         "add	r5, r5, r7\n\t"
138865 #endif
138866 #ifdef WOLFSSL_KEIL
138867         "adcs	r3, r3, %[r]\n\t"
138868 #elif defined(__clang__)
138869         "adcs	r3, %[r]\n\t"
138870 #else
138871         "adc	r3, %[r]\n\t"
138872 #endif
138873         "uxth	r7, %[b]\n\t"
138874 #ifdef WOLFSSL_KEIL
138875         "muls	r6, r7, r6\n\t"
138876 #elif defined(__clang__)
138877         "muls	r6, r7\n\t"
138878 #else
138879         "mul	r6, r7\n\t"
138880 #endif
138881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138882         "lsrs	r7, r6, #16\n\t"
138883 #else
138884         "lsr	r7, r6, #16\n\t"
138885 #endif
138886 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138887         "lsls	r6, r6, #16\n\t"
138888 #else
138889         "lsl	r6, r6, #16\n\t"
138890 #endif
138891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138892         "adds	r4, r4, r6\n\t"
138893 #else
138894         "add	r4, r4, r6\n\t"
138895 #endif
138896 #ifdef WOLFSSL_KEIL
138897         "adcs	r5, r5, r7\n\t"
138898 #elif defined(__clang__)
138899         "adcs	r5, r7\n\t"
138900 #else
138901         "adc	r5, r7\n\t"
138902 #endif
138903 #ifdef WOLFSSL_KEIL
138904         "adcs	r3, r3, %[r]\n\t"
138905 #elif defined(__clang__)
138906         "adcs	r3, %[r]\n\t"
138907 #else
138908         "adc	r3, %[r]\n\t"
138909 #endif
138910         "#  A[3] * B[13]\n\t"
138911         "mov	%[a], r9\n\t"
138912         "mov	%[b], r10\n\t"
138913         "ldr	%[a], [%[a], #12]\n\t"
138914         "ldr	%[b], [%[b], #52]\n\t"
138915         "uxth	r6, %[a]\n\t"
138916         "uxth	r7, %[b]\n\t"
138917 #ifdef WOLFSSL_KEIL
138918         "muls	r7, r6, r7\n\t"
138919 #elif defined(__clang__)
138920         "muls	r7, r6\n\t"
138921 #else
138922         "mul	r7, r6\n\t"
138923 #endif
138924 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138925         "adds	r4, r4, r7\n\t"
138926 #else
138927         "add	r4, r4, r7\n\t"
138928 #endif
138929 #ifdef WOLFSSL_KEIL
138930         "adcs	r5, r5, %[r]\n\t"
138931 #elif defined(__clang__)
138932         "adcs	r5, %[r]\n\t"
138933 #else
138934         "adc	r5, %[r]\n\t"
138935 #endif
138936 #ifdef WOLFSSL_KEIL
138937         "adcs	r3, r3, %[r]\n\t"
138938 #elif defined(__clang__)
138939         "adcs	r3, %[r]\n\t"
138940 #else
138941         "adc	r3, %[r]\n\t"
138942 #endif
138943 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138944         "lsrs	r7, %[b], #16\n\t"
138945 #else
138946         "lsr	r7, %[b], #16\n\t"
138947 #endif
138948 #ifdef WOLFSSL_KEIL
138949         "muls	r6, r7, r6\n\t"
138950 #elif defined(__clang__)
138951         "muls	r6, r7\n\t"
138952 #else
138953         "mul	r6, r7\n\t"
138954 #endif
138955 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138956         "lsrs	r7, r6, #16\n\t"
138957 #else
138958         "lsr	r7, r6, #16\n\t"
138959 #endif
138960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138961         "lsls	r6, r6, #16\n\t"
138962 #else
138963         "lsl	r6, r6, #16\n\t"
138964 #endif
138965 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138966         "adds	r4, r4, r6\n\t"
138967 #else
138968         "add	r4, r4, r6\n\t"
138969 #endif
138970 #ifdef WOLFSSL_KEIL
138971         "adcs	r5, r5, r7\n\t"
138972 #elif defined(__clang__)
138973         "adcs	r5, r7\n\t"
138974 #else
138975         "adc	r5, r7\n\t"
138976 #endif
138977 #ifdef WOLFSSL_KEIL
138978         "adcs	r3, r3, %[r]\n\t"
138979 #elif defined(__clang__)
138980         "adcs	r3, %[r]\n\t"
138981 #else
138982         "adc	r3, %[r]\n\t"
138983 #endif
138984 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138985         "lsrs	r6, %[a], #16\n\t"
138986 #else
138987         "lsr	r6, %[a], #16\n\t"
138988 #endif
138989 #if defined(__clang__) || defined(WOLFSSL_KEIL)
138990         "lsrs	r7, %[b], #16\n\t"
138991 #else
138992         "lsr	r7, %[b], #16\n\t"
138993 #endif
138994 #ifdef WOLFSSL_KEIL
138995         "muls	r7, r6, r7\n\t"
138996 #elif defined(__clang__)
138997         "muls	r7, r6\n\t"
138998 #else
138999         "mul	r7, r6\n\t"
139000 #endif
139001 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139002         "adds	r5, r5, r7\n\t"
139003 #else
139004         "add	r5, r5, r7\n\t"
139005 #endif
139006 #ifdef WOLFSSL_KEIL
139007         "adcs	r3, r3, %[r]\n\t"
139008 #elif defined(__clang__)
139009         "adcs	r3, %[r]\n\t"
139010 #else
139011         "adc	r3, %[r]\n\t"
139012 #endif
139013         "uxth	r7, %[b]\n\t"
139014 #ifdef WOLFSSL_KEIL
139015         "muls	r6, r7, r6\n\t"
139016 #elif defined(__clang__)
139017         "muls	r6, r7\n\t"
139018 #else
139019         "mul	r6, r7\n\t"
139020 #endif
139021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139022         "lsrs	r7, r6, #16\n\t"
139023 #else
139024         "lsr	r7, r6, #16\n\t"
139025 #endif
139026 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139027         "lsls	r6, r6, #16\n\t"
139028 #else
139029         "lsl	r6, r6, #16\n\t"
139030 #endif
139031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139032         "adds	r4, r4, r6\n\t"
139033 #else
139034         "add	r4, r4, r6\n\t"
139035 #endif
139036 #ifdef WOLFSSL_KEIL
139037         "adcs	r5, r5, r7\n\t"
139038 #elif defined(__clang__)
139039         "adcs	r5, r7\n\t"
139040 #else
139041         "adc	r5, r7\n\t"
139042 #endif
139043 #ifdef WOLFSSL_KEIL
139044         "adcs	r3, r3, %[r]\n\t"
139045 #elif defined(__clang__)
139046         "adcs	r3, %[r]\n\t"
139047 #else
139048         "adc	r3, %[r]\n\t"
139049 #endif
139050         "#  A[2] * B[14]\n\t"
139051         "mov	%[a], r9\n\t"
139052         "mov	%[b], r10\n\t"
139053         "ldr	%[a], [%[a], #8]\n\t"
139054         "ldr	%[b], [%[b], #56]\n\t"
139055         "uxth	r6, %[a]\n\t"
139056         "uxth	r7, %[b]\n\t"
139057 #ifdef WOLFSSL_KEIL
139058         "muls	r7, r6, r7\n\t"
139059 #elif defined(__clang__)
139060         "muls	r7, r6\n\t"
139061 #else
139062         "mul	r7, r6\n\t"
139063 #endif
139064 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139065         "adds	r4, r4, r7\n\t"
139066 #else
139067         "add	r4, r4, r7\n\t"
139068 #endif
139069 #ifdef WOLFSSL_KEIL
139070         "adcs	r5, r5, %[r]\n\t"
139071 #elif defined(__clang__)
139072         "adcs	r5, %[r]\n\t"
139073 #else
139074         "adc	r5, %[r]\n\t"
139075 #endif
139076 #ifdef WOLFSSL_KEIL
139077         "adcs	r3, r3, %[r]\n\t"
139078 #elif defined(__clang__)
139079         "adcs	r3, %[r]\n\t"
139080 #else
139081         "adc	r3, %[r]\n\t"
139082 #endif
139083 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139084         "lsrs	r7, %[b], #16\n\t"
139085 #else
139086         "lsr	r7, %[b], #16\n\t"
139087 #endif
139088 #ifdef WOLFSSL_KEIL
139089         "muls	r6, r7, r6\n\t"
139090 #elif defined(__clang__)
139091         "muls	r6, r7\n\t"
139092 #else
139093         "mul	r6, r7\n\t"
139094 #endif
139095 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139096         "lsrs	r7, r6, #16\n\t"
139097 #else
139098         "lsr	r7, r6, #16\n\t"
139099 #endif
139100 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139101         "lsls	r6, r6, #16\n\t"
139102 #else
139103         "lsl	r6, r6, #16\n\t"
139104 #endif
139105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139106         "adds	r4, r4, r6\n\t"
139107 #else
139108         "add	r4, r4, r6\n\t"
139109 #endif
139110 #ifdef WOLFSSL_KEIL
139111         "adcs	r5, r5, r7\n\t"
139112 #elif defined(__clang__)
139113         "adcs	r5, r7\n\t"
139114 #else
139115         "adc	r5, r7\n\t"
139116 #endif
139117 #ifdef WOLFSSL_KEIL
139118         "adcs	r3, r3, %[r]\n\t"
139119 #elif defined(__clang__)
139120         "adcs	r3, %[r]\n\t"
139121 #else
139122         "adc	r3, %[r]\n\t"
139123 #endif
139124 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139125         "lsrs	r6, %[a], #16\n\t"
139126 #else
139127         "lsr	r6, %[a], #16\n\t"
139128 #endif
139129 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139130         "lsrs	r7, %[b], #16\n\t"
139131 #else
139132         "lsr	r7, %[b], #16\n\t"
139133 #endif
139134 #ifdef WOLFSSL_KEIL
139135         "muls	r7, r6, r7\n\t"
139136 #elif defined(__clang__)
139137         "muls	r7, r6\n\t"
139138 #else
139139         "mul	r7, r6\n\t"
139140 #endif
139141 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139142         "adds	r5, r5, r7\n\t"
139143 #else
139144         "add	r5, r5, r7\n\t"
139145 #endif
139146 #ifdef WOLFSSL_KEIL
139147         "adcs	r3, r3, %[r]\n\t"
139148 #elif defined(__clang__)
139149         "adcs	r3, %[r]\n\t"
139150 #else
139151         "adc	r3, %[r]\n\t"
139152 #endif
139153         "uxth	r7, %[b]\n\t"
139154 #ifdef WOLFSSL_KEIL
139155         "muls	r6, r7, r6\n\t"
139156 #elif defined(__clang__)
139157         "muls	r6, r7\n\t"
139158 #else
139159         "mul	r6, r7\n\t"
139160 #endif
139161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139162         "lsrs	r7, r6, #16\n\t"
139163 #else
139164         "lsr	r7, r6, #16\n\t"
139165 #endif
139166 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139167         "lsls	r6, r6, #16\n\t"
139168 #else
139169         "lsl	r6, r6, #16\n\t"
139170 #endif
139171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139172         "adds	r4, r4, r6\n\t"
139173 #else
139174         "add	r4, r4, r6\n\t"
139175 #endif
139176 #ifdef WOLFSSL_KEIL
139177         "adcs	r5, r5, r7\n\t"
139178 #elif defined(__clang__)
139179         "adcs	r5, r7\n\t"
139180 #else
139181         "adc	r5, r7\n\t"
139182 #endif
139183 #ifdef WOLFSSL_KEIL
139184         "adcs	r3, r3, %[r]\n\t"
139185 #elif defined(__clang__)
139186         "adcs	r3, %[r]\n\t"
139187 #else
139188         "adc	r3, %[r]\n\t"
139189 #endif
139190         "#  A[1] * B[15]\n\t"
139191         "mov	%[a], r9\n\t"
139192         "mov	%[b], r10\n\t"
139193         "ldr	%[a], [%[a], #4]\n\t"
139194         "ldr	%[b], [%[b], #60]\n\t"
139195         "uxth	r6, %[a]\n\t"
139196         "uxth	r7, %[b]\n\t"
139197 #ifdef WOLFSSL_KEIL
139198         "muls	r7, r6, r7\n\t"
139199 #elif defined(__clang__)
139200         "muls	r7, r6\n\t"
139201 #else
139202         "mul	r7, r6\n\t"
139203 #endif
139204 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139205         "adds	r4, r4, r7\n\t"
139206 #else
139207         "add	r4, r4, r7\n\t"
139208 #endif
139209 #ifdef WOLFSSL_KEIL
139210         "adcs	r5, r5, %[r]\n\t"
139211 #elif defined(__clang__)
139212         "adcs	r5, %[r]\n\t"
139213 #else
139214         "adc	r5, %[r]\n\t"
139215 #endif
139216 #ifdef WOLFSSL_KEIL
139217         "adcs	r3, r3, %[r]\n\t"
139218 #elif defined(__clang__)
139219         "adcs	r3, %[r]\n\t"
139220 #else
139221         "adc	r3, %[r]\n\t"
139222 #endif
139223 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139224         "lsrs	r7, %[b], #16\n\t"
139225 #else
139226         "lsr	r7, %[b], #16\n\t"
139227 #endif
139228 #ifdef WOLFSSL_KEIL
139229         "muls	r6, r7, r6\n\t"
139230 #elif defined(__clang__)
139231         "muls	r6, r7\n\t"
139232 #else
139233         "mul	r6, r7\n\t"
139234 #endif
139235 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139236         "lsrs	r7, r6, #16\n\t"
139237 #else
139238         "lsr	r7, r6, #16\n\t"
139239 #endif
139240 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139241         "lsls	r6, r6, #16\n\t"
139242 #else
139243         "lsl	r6, r6, #16\n\t"
139244 #endif
139245 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139246         "adds	r4, r4, r6\n\t"
139247 #else
139248         "add	r4, r4, r6\n\t"
139249 #endif
139250 #ifdef WOLFSSL_KEIL
139251         "adcs	r5, r5, r7\n\t"
139252 #elif defined(__clang__)
139253         "adcs	r5, r7\n\t"
139254 #else
139255         "adc	r5, r7\n\t"
139256 #endif
139257 #ifdef WOLFSSL_KEIL
139258         "adcs	r3, r3, %[r]\n\t"
139259 #elif defined(__clang__)
139260         "adcs	r3, %[r]\n\t"
139261 #else
139262         "adc	r3, %[r]\n\t"
139263 #endif
139264 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139265         "lsrs	r6, %[a], #16\n\t"
139266 #else
139267         "lsr	r6, %[a], #16\n\t"
139268 #endif
139269 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139270         "lsrs	r7, %[b], #16\n\t"
139271 #else
139272         "lsr	r7, %[b], #16\n\t"
139273 #endif
139274 #ifdef WOLFSSL_KEIL
139275         "muls	r7, r6, r7\n\t"
139276 #elif defined(__clang__)
139277         "muls	r7, r6\n\t"
139278 #else
139279         "mul	r7, r6\n\t"
139280 #endif
139281 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139282         "adds	r5, r5, r7\n\t"
139283 #else
139284         "add	r5, r5, r7\n\t"
139285 #endif
139286 #ifdef WOLFSSL_KEIL
139287         "adcs	r3, r3, %[r]\n\t"
139288 #elif defined(__clang__)
139289         "adcs	r3, %[r]\n\t"
139290 #else
139291         "adc	r3, %[r]\n\t"
139292 #endif
139293         "uxth	r7, %[b]\n\t"
139294 #ifdef WOLFSSL_KEIL
139295         "muls	r6, r7, r6\n\t"
139296 #elif defined(__clang__)
139297         "muls	r6, r7\n\t"
139298 #else
139299         "mul	r6, r7\n\t"
139300 #endif
139301 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139302         "lsrs	r7, r6, #16\n\t"
139303 #else
139304         "lsr	r7, r6, #16\n\t"
139305 #endif
139306 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139307         "lsls	r6, r6, #16\n\t"
139308 #else
139309         "lsl	r6, r6, #16\n\t"
139310 #endif
139311 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139312         "adds	r4, r4, r6\n\t"
139313 #else
139314         "add	r4, r4, r6\n\t"
139315 #endif
139316 #ifdef WOLFSSL_KEIL
139317         "adcs	r5, r5, r7\n\t"
139318 #elif defined(__clang__)
139319         "adcs	r5, r7\n\t"
139320 #else
139321         "adc	r5, r7\n\t"
139322 #endif
139323 #ifdef WOLFSSL_KEIL
139324         "adcs	r3, r3, %[r]\n\t"
139325 #elif defined(__clang__)
139326         "adcs	r3, %[r]\n\t"
139327 #else
139328         "adc	r3, %[r]\n\t"
139329 #endif
139330         "mov	%[r], r8\n\t"
139331         "str	r4, [%[r], #64]\n\t"
139332         "movs	%[r], #0\n\t"
139333         "#  A[2] * B[15]\n\t"
139334         "movs	r4, #0\n\t"
139335         "mov	%[a], r9\n\t"
139336         "mov	%[b], r10\n\t"
139337         "ldr	%[a], [%[a], #8]\n\t"
139338         "ldr	%[b], [%[b], #60]\n\t"
139339         "uxth	r6, %[a]\n\t"
139340         "uxth	r7, %[b]\n\t"
139341 #ifdef WOLFSSL_KEIL
139342         "muls	r7, r6, r7\n\t"
139343 #elif defined(__clang__)
139344         "muls	r7, r6\n\t"
139345 #else
139346         "mul	r7, r6\n\t"
139347 #endif
139348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139349         "adds	r5, r5, r7\n\t"
139350 #else
139351         "add	r5, r5, r7\n\t"
139352 #endif
139353 #ifdef WOLFSSL_KEIL
139354         "adcs	r3, r3, %[r]\n\t"
139355 #elif defined(__clang__)
139356         "adcs	r3, %[r]\n\t"
139357 #else
139358         "adc	r3, %[r]\n\t"
139359 #endif
139360 #ifdef WOLFSSL_KEIL
139361         "adcs	r4, r4, %[r]\n\t"
139362 #elif defined(__clang__)
139363         "adcs	r4, %[r]\n\t"
139364 #else
139365         "adc	r4, %[r]\n\t"
139366 #endif
139367 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139368         "lsrs	r7, %[b], #16\n\t"
139369 #else
139370         "lsr	r7, %[b], #16\n\t"
139371 #endif
139372 #ifdef WOLFSSL_KEIL
139373         "muls	r6, r7, r6\n\t"
139374 #elif defined(__clang__)
139375         "muls	r6, r7\n\t"
139376 #else
139377         "mul	r6, r7\n\t"
139378 #endif
139379 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139380         "lsrs	r7, r6, #16\n\t"
139381 #else
139382         "lsr	r7, r6, #16\n\t"
139383 #endif
139384 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139385         "lsls	r6, r6, #16\n\t"
139386 #else
139387         "lsl	r6, r6, #16\n\t"
139388 #endif
139389 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139390         "adds	r5, r5, r6\n\t"
139391 #else
139392         "add	r5, r5, r6\n\t"
139393 #endif
139394 #ifdef WOLFSSL_KEIL
139395         "adcs	r3, r3, r7\n\t"
139396 #elif defined(__clang__)
139397         "adcs	r3, r7\n\t"
139398 #else
139399         "adc	r3, r7\n\t"
139400 #endif
139401 #ifdef WOLFSSL_KEIL
139402         "adcs	r4, r4, %[r]\n\t"
139403 #elif defined(__clang__)
139404         "adcs	r4, %[r]\n\t"
139405 #else
139406         "adc	r4, %[r]\n\t"
139407 #endif
139408 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139409         "lsrs	r6, %[a], #16\n\t"
139410 #else
139411         "lsr	r6, %[a], #16\n\t"
139412 #endif
139413 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139414         "lsrs	r7, %[b], #16\n\t"
139415 #else
139416         "lsr	r7, %[b], #16\n\t"
139417 #endif
139418 #ifdef WOLFSSL_KEIL
139419         "muls	r7, r6, r7\n\t"
139420 #elif defined(__clang__)
139421         "muls	r7, r6\n\t"
139422 #else
139423         "mul	r7, r6\n\t"
139424 #endif
139425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139426         "adds	r3, r3, r7\n\t"
139427 #else
139428         "add	r3, r3, r7\n\t"
139429 #endif
139430 #ifdef WOLFSSL_KEIL
139431         "adcs	r4, r4, %[r]\n\t"
139432 #elif defined(__clang__)
139433         "adcs	r4, %[r]\n\t"
139434 #else
139435         "adc	r4, %[r]\n\t"
139436 #endif
139437         "uxth	r7, %[b]\n\t"
139438 #ifdef WOLFSSL_KEIL
139439         "muls	r6, r7, r6\n\t"
139440 #elif defined(__clang__)
139441         "muls	r6, r7\n\t"
139442 #else
139443         "mul	r6, r7\n\t"
139444 #endif
139445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139446         "lsrs	r7, r6, #16\n\t"
139447 #else
139448         "lsr	r7, r6, #16\n\t"
139449 #endif
139450 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139451         "lsls	r6, r6, #16\n\t"
139452 #else
139453         "lsl	r6, r6, #16\n\t"
139454 #endif
139455 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139456         "adds	r5, r5, r6\n\t"
139457 #else
139458         "add	r5, r5, r6\n\t"
139459 #endif
139460 #ifdef WOLFSSL_KEIL
139461         "adcs	r3, r3, r7\n\t"
139462 #elif defined(__clang__)
139463         "adcs	r3, r7\n\t"
139464 #else
139465         "adc	r3, r7\n\t"
139466 #endif
139467 #ifdef WOLFSSL_KEIL
139468         "adcs	r4, r4, %[r]\n\t"
139469 #elif defined(__clang__)
139470         "adcs	r4, %[r]\n\t"
139471 #else
139472         "adc	r4, %[r]\n\t"
139473 #endif
139474         "#  A[3] * B[14]\n\t"
139475         "mov	%[a], r9\n\t"
139476         "mov	%[b], r10\n\t"
139477         "ldr	%[a], [%[a], #12]\n\t"
139478         "ldr	%[b], [%[b], #56]\n\t"
139479         "uxth	r6, %[a]\n\t"
139480         "uxth	r7, %[b]\n\t"
139481 #ifdef WOLFSSL_KEIL
139482         "muls	r7, r6, r7\n\t"
139483 #elif defined(__clang__)
139484         "muls	r7, r6\n\t"
139485 #else
139486         "mul	r7, r6\n\t"
139487 #endif
139488 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139489         "adds	r5, r5, r7\n\t"
139490 #else
139491         "add	r5, r5, r7\n\t"
139492 #endif
139493 #ifdef WOLFSSL_KEIL
139494         "adcs	r3, r3, %[r]\n\t"
139495 #elif defined(__clang__)
139496         "adcs	r3, %[r]\n\t"
139497 #else
139498         "adc	r3, %[r]\n\t"
139499 #endif
139500 #ifdef WOLFSSL_KEIL
139501         "adcs	r4, r4, %[r]\n\t"
139502 #elif defined(__clang__)
139503         "adcs	r4, %[r]\n\t"
139504 #else
139505         "adc	r4, %[r]\n\t"
139506 #endif
139507 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139508         "lsrs	r7, %[b], #16\n\t"
139509 #else
139510         "lsr	r7, %[b], #16\n\t"
139511 #endif
139512 #ifdef WOLFSSL_KEIL
139513         "muls	r6, r7, r6\n\t"
139514 #elif defined(__clang__)
139515         "muls	r6, r7\n\t"
139516 #else
139517         "mul	r6, r7\n\t"
139518 #endif
139519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139520         "lsrs	r7, r6, #16\n\t"
139521 #else
139522         "lsr	r7, r6, #16\n\t"
139523 #endif
139524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139525         "lsls	r6, r6, #16\n\t"
139526 #else
139527         "lsl	r6, r6, #16\n\t"
139528 #endif
139529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139530         "adds	r5, r5, r6\n\t"
139531 #else
139532         "add	r5, r5, r6\n\t"
139533 #endif
139534 #ifdef WOLFSSL_KEIL
139535         "adcs	r3, r3, r7\n\t"
139536 #elif defined(__clang__)
139537         "adcs	r3, r7\n\t"
139538 #else
139539         "adc	r3, r7\n\t"
139540 #endif
139541 #ifdef WOLFSSL_KEIL
139542         "adcs	r4, r4, %[r]\n\t"
139543 #elif defined(__clang__)
139544         "adcs	r4, %[r]\n\t"
139545 #else
139546         "adc	r4, %[r]\n\t"
139547 #endif
139548 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139549         "lsrs	r6, %[a], #16\n\t"
139550 #else
139551         "lsr	r6, %[a], #16\n\t"
139552 #endif
139553 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139554         "lsrs	r7, %[b], #16\n\t"
139555 #else
139556         "lsr	r7, %[b], #16\n\t"
139557 #endif
139558 #ifdef WOLFSSL_KEIL
139559         "muls	r7, r6, r7\n\t"
139560 #elif defined(__clang__)
139561         "muls	r7, r6\n\t"
139562 #else
139563         "mul	r7, r6\n\t"
139564 #endif
139565 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139566         "adds	r3, r3, r7\n\t"
139567 #else
139568         "add	r3, r3, r7\n\t"
139569 #endif
139570 #ifdef WOLFSSL_KEIL
139571         "adcs	r4, r4, %[r]\n\t"
139572 #elif defined(__clang__)
139573         "adcs	r4, %[r]\n\t"
139574 #else
139575         "adc	r4, %[r]\n\t"
139576 #endif
139577         "uxth	r7, %[b]\n\t"
139578 #ifdef WOLFSSL_KEIL
139579         "muls	r6, r7, r6\n\t"
139580 #elif defined(__clang__)
139581         "muls	r6, r7\n\t"
139582 #else
139583         "mul	r6, r7\n\t"
139584 #endif
139585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139586         "lsrs	r7, r6, #16\n\t"
139587 #else
139588         "lsr	r7, r6, #16\n\t"
139589 #endif
139590 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139591         "lsls	r6, r6, #16\n\t"
139592 #else
139593         "lsl	r6, r6, #16\n\t"
139594 #endif
139595 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139596         "adds	r5, r5, r6\n\t"
139597 #else
139598         "add	r5, r5, r6\n\t"
139599 #endif
139600 #ifdef WOLFSSL_KEIL
139601         "adcs	r3, r3, r7\n\t"
139602 #elif defined(__clang__)
139603         "adcs	r3, r7\n\t"
139604 #else
139605         "adc	r3, r7\n\t"
139606 #endif
139607 #ifdef WOLFSSL_KEIL
139608         "adcs	r4, r4, %[r]\n\t"
139609 #elif defined(__clang__)
139610         "adcs	r4, %[r]\n\t"
139611 #else
139612         "adc	r4, %[r]\n\t"
139613 #endif
139614         "#  A[4] * B[13]\n\t"
139615         "mov	%[a], r9\n\t"
139616         "mov	%[b], r10\n\t"
139617         "ldr	%[a], [%[a], #16]\n\t"
139618         "ldr	%[b], [%[b], #52]\n\t"
139619         "uxth	r6, %[a]\n\t"
139620         "uxth	r7, %[b]\n\t"
139621 #ifdef WOLFSSL_KEIL
139622         "muls	r7, r6, r7\n\t"
139623 #elif defined(__clang__)
139624         "muls	r7, r6\n\t"
139625 #else
139626         "mul	r7, r6\n\t"
139627 #endif
139628 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139629         "adds	r5, r5, r7\n\t"
139630 #else
139631         "add	r5, r5, r7\n\t"
139632 #endif
139633 #ifdef WOLFSSL_KEIL
139634         "adcs	r3, r3, %[r]\n\t"
139635 #elif defined(__clang__)
139636         "adcs	r3, %[r]\n\t"
139637 #else
139638         "adc	r3, %[r]\n\t"
139639 #endif
139640 #ifdef WOLFSSL_KEIL
139641         "adcs	r4, r4, %[r]\n\t"
139642 #elif defined(__clang__)
139643         "adcs	r4, %[r]\n\t"
139644 #else
139645         "adc	r4, %[r]\n\t"
139646 #endif
139647 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139648         "lsrs	r7, %[b], #16\n\t"
139649 #else
139650         "lsr	r7, %[b], #16\n\t"
139651 #endif
139652 #ifdef WOLFSSL_KEIL
139653         "muls	r6, r7, r6\n\t"
139654 #elif defined(__clang__)
139655         "muls	r6, r7\n\t"
139656 #else
139657         "mul	r6, r7\n\t"
139658 #endif
139659 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139660         "lsrs	r7, r6, #16\n\t"
139661 #else
139662         "lsr	r7, r6, #16\n\t"
139663 #endif
139664 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139665         "lsls	r6, r6, #16\n\t"
139666 #else
139667         "lsl	r6, r6, #16\n\t"
139668 #endif
139669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139670         "adds	r5, r5, r6\n\t"
139671 #else
139672         "add	r5, r5, r6\n\t"
139673 #endif
139674 #ifdef WOLFSSL_KEIL
139675         "adcs	r3, r3, r7\n\t"
139676 #elif defined(__clang__)
139677         "adcs	r3, r7\n\t"
139678 #else
139679         "adc	r3, r7\n\t"
139680 #endif
139681 #ifdef WOLFSSL_KEIL
139682         "adcs	r4, r4, %[r]\n\t"
139683 #elif defined(__clang__)
139684         "adcs	r4, %[r]\n\t"
139685 #else
139686         "adc	r4, %[r]\n\t"
139687 #endif
139688 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139689         "lsrs	r6, %[a], #16\n\t"
139690 #else
139691         "lsr	r6, %[a], #16\n\t"
139692 #endif
139693 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139694         "lsrs	r7, %[b], #16\n\t"
139695 #else
139696         "lsr	r7, %[b], #16\n\t"
139697 #endif
139698 #ifdef WOLFSSL_KEIL
139699         "muls	r7, r6, r7\n\t"
139700 #elif defined(__clang__)
139701         "muls	r7, r6\n\t"
139702 #else
139703         "mul	r7, r6\n\t"
139704 #endif
139705 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139706         "adds	r3, r3, r7\n\t"
139707 #else
139708         "add	r3, r3, r7\n\t"
139709 #endif
139710 #ifdef WOLFSSL_KEIL
139711         "adcs	r4, r4, %[r]\n\t"
139712 #elif defined(__clang__)
139713         "adcs	r4, %[r]\n\t"
139714 #else
139715         "adc	r4, %[r]\n\t"
139716 #endif
139717         "uxth	r7, %[b]\n\t"
139718 #ifdef WOLFSSL_KEIL
139719         "muls	r6, r7, r6\n\t"
139720 #elif defined(__clang__)
139721         "muls	r6, r7\n\t"
139722 #else
139723         "mul	r6, r7\n\t"
139724 #endif
139725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139726         "lsrs	r7, r6, #16\n\t"
139727 #else
139728         "lsr	r7, r6, #16\n\t"
139729 #endif
139730 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139731         "lsls	r6, r6, #16\n\t"
139732 #else
139733         "lsl	r6, r6, #16\n\t"
139734 #endif
139735 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139736         "adds	r5, r5, r6\n\t"
139737 #else
139738         "add	r5, r5, r6\n\t"
139739 #endif
139740 #ifdef WOLFSSL_KEIL
139741         "adcs	r3, r3, r7\n\t"
139742 #elif defined(__clang__)
139743         "adcs	r3, r7\n\t"
139744 #else
139745         "adc	r3, r7\n\t"
139746 #endif
139747 #ifdef WOLFSSL_KEIL
139748         "adcs	r4, r4, %[r]\n\t"
139749 #elif defined(__clang__)
139750         "adcs	r4, %[r]\n\t"
139751 #else
139752         "adc	r4, %[r]\n\t"
139753 #endif
139754         "#  A[5] * B[12]\n\t"
139755         "mov	%[a], r9\n\t"
139756         "mov	%[b], r10\n\t"
139757         "ldr	%[a], [%[a], #20]\n\t"
139758         "ldr	%[b], [%[b], #48]\n\t"
139759         "uxth	r6, %[a]\n\t"
139760         "uxth	r7, %[b]\n\t"
139761 #ifdef WOLFSSL_KEIL
139762         "muls	r7, r6, r7\n\t"
139763 #elif defined(__clang__)
139764         "muls	r7, r6\n\t"
139765 #else
139766         "mul	r7, r6\n\t"
139767 #endif
139768 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139769         "adds	r5, r5, r7\n\t"
139770 #else
139771         "add	r5, r5, r7\n\t"
139772 #endif
139773 #ifdef WOLFSSL_KEIL
139774         "adcs	r3, r3, %[r]\n\t"
139775 #elif defined(__clang__)
139776         "adcs	r3, %[r]\n\t"
139777 #else
139778         "adc	r3, %[r]\n\t"
139779 #endif
139780 #ifdef WOLFSSL_KEIL
139781         "adcs	r4, r4, %[r]\n\t"
139782 #elif defined(__clang__)
139783         "adcs	r4, %[r]\n\t"
139784 #else
139785         "adc	r4, %[r]\n\t"
139786 #endif
139787 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139788         "lsrs	r7, %[b], #16\n\t"
139789 #else
139790         "lsr	r7, %[b], #16\n\t"
139791 #endif
139792 #ifdef WOLFSSL_KEIL
139793         "muls	r6, r7, r6\n\t"
139794 #elif defined(__clang__)
139795         "muls	r6, r7\n\t"
139796 #else
139797         "mul	r6, r7\n\t"
139798 #endif
139799 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139800         "lsrs	r7, r6, #16\n\t"
139801 #else
139802         "lsr	r7, r6, #16\n\t"
139803 #endif
139804 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139805         "lsls	r6, r6, #16\n\t"
139806 #else
139807         "lsl	r6, r6, #16\n\t"
139808 #endif
139809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139810         "adds	r5, r5, r6\n\t"
139811 #else
139812         "add	r5, r5, r6\n\t"
139813 #endif
139814 #ifdef WOLFSSL_KEIL
139815         "adcs	r3, r3, r7\n\t"
139816 #elif defined(__clang__)
139817         "adcs	r3, r7\n\t"
139818 #else
139819         "adc	r3, r7\n\t"
139820 #endif
139821 #ifdef WOLFSSL_KEIL
139822         "adcs	r4, r4, %[r]\n\t"
139823 #elif defined(__clang__)
139824         "adcs	r4, %[r]\n\t"
139825 #else
139826         "adc	r4, %[r]\n\t"
139827 #endif
139828 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139829         "lsrs	r6, %[a], #16\n\t"
139830 #else
139831         "lsr	r6, %[a], #16\n\t"
139832 #endif
139833 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139834         "lsrs	r7, %[b], #16\n\t"
139835 #else
139836         "lsr	r7, %[b], #16\n\t"
139837 #endif
139838 #ifdef WOLFSSL_KEIL
139839         "muls	r7, r6, r7\n\t"
139840 #elif defined(__clang__)
139841         "muls	r7, r6\n\t"
139842 #else
139843         "mul	r7, r6\n\t"
139844 #endif
139845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139846         "adds	r3, r3, r7\n\t"
139847 #else
139848         "add	r3, r3, r7\n\t"
139849 #endif
139850 #ifdef WOLFSSL_KEIL
139851         "adcs	r4, r4, %[r]\n\t"
139852 #elif defined(__clang__)
139853         "adcs	r4, %[r]\n\t"
139854 #else
139855         "adc	r4, %[r]\n\t"
139856 #endif
139857         "uxth	r7, %[b]\n\t"
139858 #ifdef WOLFSSL_KEIL
139859         "muls	r6, r7, r6\n\t"
139860 #elif defined(__clang__)
139861         "muls	r6, r7\n\t"
139862 #else
139863         "mul	r6, r7\n\t"
139864 #endif
139865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139866         "lsrs	r7, r6, #16\n\t"
139867 #else
139868         "lsr	r7, r6, #16\n\t"
139869 #endif
139870 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139871         "lsls	r6, r6, #16\n\t"
139872 #else
139873         "lsl	r6, r6, #16\n\t"
139874 #endif
139875 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139876         "adds	r5, r5, r6\n\t"
139877 #else
139878         "add	r5, r5, r6\n\t"
139879 #endif
139880 #ifdef WOLFSSL_KEIL
139881         "adcs	r3, r3, r7\n\t"
139882 #elif defined(__clang__)
139883         "adcs	r3, r7\n\t"
139884 #else
139885         "adc	r3, r7\n\t"
139886 #endif
139887 #ifdef WOLFSSL_KEIL
139888         "adcs	r4, r4, %[r]\n\t"
139889 #elif defined(__clang__)
139890         "adcs	r4, %[r]\n\t"
139891 #else
139892         "adc	r4, %[r]\n\t"
139893 #endif
139894         "#  A[6] * B[11]\n\t"
139895         "mov	%[a], r9\n\t"
139896         "mov	%[b], r10\n\t"
139897         "ldr	%[a], [%[a], #24]\n\t"
139898         "ldr	%[b], [%[b], #44]\n\t"
139899         "uxth	r6, %[a]\n\t"
139900         "uxth	r7, %[b]\n\t"
139901 #ifdef WOLFSSL_KEIL
139902         "muls	r7, r6, r7\n\t"
139903 #elif defined(__clang__)
139904         "muls	r7, r6\n\t"
139905 #else
139906         "mul	r7, r6\n\t"
139907 #endif
139908 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139909         "adds	r5, r5, r7\n\t"
139910 #else
139911         "add	r5, r5, r7\n\t"
139912 #endif
139913 #ifdef WOLFSSL_KEIL
139914         "adcs	r3, r3, %[r]\n\t"
139915 #elif defined(__clang__)
139916         "adcs	r3, %[r]\n\t"
139917 #else
139918         "adc	r3, %[r]\n\t"
139919 #endif
139920 #ifdef WOLFSSL_KEIL
139921         "adcs	r4, r4, %[r]\n\t"
139922 #elif defined(__clang__)
139923         "adcs	r4, %[r]\n\t"
139924 #else
139925         "adc	r4, %[r]\n\t"
139926 #endif
139927 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139928         "lsrs	r7, %[b], #16\n\t"
139929 #else
139930         "lsr	r7, %[b], #16\n\t"
139931 #endif
139932 #ifdef WOLFSSL_KEIL
139933         "muls	r6, r7, r6\n\t"
139934 #elif defined(__clang__)
139935         "muls	r6, r7\n\t"
139936 #else
139937         "mul	r6, r7\n\t"
139938 #endif
139939 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139940         "lsrs	r7, r6, #16\n\t"
139941 #else
139942         "lsr	r7, r6, #16\n\t"
139943 #endif
139944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139945         "lsls	r6, r6, #16\n\t"
139946 #else
139947         "lsl	r6, r6, #16\n\t"
139948 #endif
139949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139950         "adds	r5, r5, r6\n\t"
139951 #else
139952         "add	r5, r5, r6\n\t"
139953 #endif
139954 #ifdef WOLFSSL_KEIL
139955         "adcs	r3, r3, r7\n\t"
139956 #elif defined(__clang__)
139957         "adcs	r3, r7\n\t"
139958 #else
139959         "adc	r3, r7\n\t"
139960 #endif
139961 #ifdef WOLFSSL_KEIL
139962         "adcs	r4, r4, %[r]\n\t"
139963 #elif defined(__clang__)
139964         "adcs	r4, %[r]\n\t"
139965 #else
139966         "adc	r4, %[r]\n\t"
139967 #endif
139968 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139969         "lsrs	r6, %[a], #16\n\t"
139970 #else
139971         "lsr	r6, %[a], #16\n\t"
139972 #endif
139973 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139974         "lsrs	r7, %[b], #16\n\t"
139975 #else
139976         "lsr	r7, %[b], #16\n\t"
139977 #endif
139978 #ifdef WOLFSSL_KEIL
139979         "muls	r7, r6, r7\n\t"
139980 #elif defined(__clang__)
139981         "muls	r7, r6\n\t"
139982 #else
139983         "mul	r7, r6\n\t"
139984 #endif
139985 #if defined(__clang__) || defined(WOLFSSL_KEIL)
139986         "adds	r3, r3, r7\n\t"
139987 #else
139988         "add	r3, r3, r7\n\t"
139989 #endif
139990 #ifdef WOLFSSL_KEIL
139991         "adcs	r4, r4, %[r]\n\t"
139992 #elif defined(__clang__)
139993         "adcs	r4, %[r]\n\t"
139994 #else
139995         "adc	r4, %[r]\n\t"
139996 #endif
139997         "uxth	r7, %[b]\n\t"
139998 #ifdef WOLFSSL_KEIL
139999         "muls	r6, r7, r6\n\t"
140000 #elif defined(__clang__)
140001         "muls	r6, r7\n\t"
140002 #else
140003         "mul	r6, r7\n\t"
140004 #endif
140005 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140006         "lsrs	r7, r6, #16\n\t"
140007 #else
140008         "lsr	r7, r6, #16\n\t"
140009 #endif
140010 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140011         "lsls	r6, r6, #16\n\t"
140012 #else
140013         "lsl	r6, r6, #16\n\t"
140014 #endif
140015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140016         "adds	r5, r5, r6\n\t"
140017 #else
140018         "add	r5, r5, r6\n\t"
140019 #endif
140020 #ifdef WOLFSSL_KEIL
140021         "adcs	r3, r3, r7\n\t"
140022 #elif defined(__clang__)
140023         "adcs	r3, r7\n\t"
140024 #else
140025         "adc	r3, r7\n\t"
140026 #endif
140027 #ifdef WOLFSSL_KEIL
140028         "adcs	r4, r4, %[r]\n\t"
140029 #elif defined(__clang__)
140030         "adcs	r4, %[r]\n\t"
140031 #else
140032         "adc	r4, %[r]\n\t"
140033 #endif
140034         "#  A[7] * B[10]\n\t"
140035         "mov	%[a], r9\n\t"
140036         "mov	%[b], r10\n\t"
140037         "ldr	%[a], [%[a], #28]\n\t"
140038         "ldr	%[b], [%[b], #40]\n\t"
140039         "uxth	r6, %[a]\n\t"
140040         "uxth	r7, %[b]\n\t"
140041 #ifdef WOLFSSL_KEIL
140042         "muls	r7, r6, r7\n\t"
140043 #elif defined(__clang__)
140044         "muls	r7, r6\n\t"
140045 #else
140046         "mul	r7, r6\n\t"
140047 #endif
140048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140049         "adds	r5, r5, r7\n\t"
140050 #else
140051         "add	r5, r5, r7\n\t"
140052 #endif
140053 #ifdef WOLFSSL_KEIL
140054         "adcs	r3, r3, %[r]\n\t"
140055 #elif defined(__clang__)
140056         "adcs	r3, %[r]\n\t"
140057 #else
140058         "adc	r3, %[r]\n\t"
140059 #endif
140060 #ifdef WOLFSSL_KEIL
140061         "adcs	r4, r4, %[r]\n\t"
140062 #elif defined(__clang__)
140063         "adcs	r4, %[r]\n\t"
140064 #else
140065         "adc	r4, %[r]\n\t"
140066 #endif
140067 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140068         "lsrs	r7, %[b], #16\n\t"
140069 #else
140070         "lsr	r7, %[b], #16\n\t"
140071 #endif
140072 #ifdef WOLFSSL_KEIL
140073         "muls	r6, r7, r6\n\t"
140074 #elif defined(__clang__)
140075         "muls	r6, r7\n\t"
140076 #else
140077         "mul	r6, r7\n\t"
140078 #endif
140079 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140080         "lsrs	r7, r6, #16\n\t"
140081 #else
140082         "lsr	r7, r6, #16\n\t"
140083 #endif
140084 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140085         "lsls	r6, r6, #16\n\t"
140086 #else
140087         "lsl	r6, r6, #16\n\t"
140088 #endif
140089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140090         "adds	r5, r5, r6\n\t"
140091 #else
140092         "add	r5, r5, r6\n\t"
140093 #endif
140094 #ifdef WOLFSSL_KEIL
140095         "adcs	r3, r3, r7\n\t"
140096 #elif defined(__clang__)
140097         "adcs	r3, r7\n\t"
140098 #else
140099         "adc	r3, r7\n\t"
140100 #endif
140101 #ifdef WOLFSSL_KEIL
140102         "adcs	r4, r4, %[r]\n\t"
140103 #elif defined(__clang__)
140104         "adcs	r4, %[r]\n\t"
140105 #else
140106         "adc	r4, %[r]\n\t"
140107 #endif
140108 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140109         "lsrs	r6, %[a], #16\n\t"
140110 #else
140111         "lsr	r6, %[a], #16\n\t"
140112 #endif
140113 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140114         "lsrs	r7, %[b], #16\n\t"
140115 #else
140116         "lsr	r7, %[b], #16\n\t"
140117 #endif
140118 #ifdef WOLFSSL_KEIL
140119         "muls	r7, r6, r7\n\t"
140120 #elif defined(__clang__)
140121         "muls	r7, r6\n\t"
140122 #else
140123         "mul	r7, r6\n\t"
140124 #endif
140125 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140126         "adds	r3, r3, r7\n\t"
140127 #else
140128         "add	r3, r3, r7\n\t"
140129 #endif
140130 #ifdef WOLFSSL_KEIL
140131         "adcs	r4, r4, %[r]\n\t"
140132 #elif defined(__clang__)
140133         "adcs	r4, %[r]\n\t"
140134 #else
140135         "adc	r4, %[r]\n\t"
140136 #endif
140137         "uxth	r7, %[b]\n\t"
140138 #ifdef WOLFSSL_KEIL
140139         "muls	r6, r7, r6\n\t"
140140 #elif defined(__clang__)
140141         "muls	r6, r7\n\t"
140142 #else
140143         "mul	r6, r7\n\t"
140144 #endif
140145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140146         "lsrs	r7, r6, #16\n\t"
140147 #else
140148         "lsr	r7, r6, #16\n\t"
140149 #endif
140150 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140151         "lsls	r6, r6, #16\n\t"
140152 #else
140153         "lsl	r6, r6, #16\n\t"
140154 #endif
140155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140156         "adds	r5, r5, r6\n\t"
140157 #else
140158         "add	r5, r5, r6\n\t"
140159 #endif
140160 #ifdef WOLFSSL_KEIL
140161         "adcs	r3, r3, r7\n\t"
140162 #elif defined(__clang__)
140163         "adcs	r3, r7\n\t"
140164 #else
140165         "adc	r3, r7\n\t"
140166 #endif
140167 #ifdef WOLFSSL_KEIL
140168         "adcs	r4, r4, %[r]\n\t"
140169 #elif defined(__clang__)
140170         "adcs	r4, %[r]\n\t"
140171 #else
140172         "adc	r4, %[r]\n\t"
140173 #endif
140174         "#  A[8] * B[9]\n\t"
140175         "mov	%[a], r9\n\t"
140176         "mov	%[b], r10\n\t"
140177         "ldr	%[a], [%[a], #32]\n\t"
140178         "ldr	%[b], [%[b], #36]\n\t"
140179         "uxth	r6, %[a]\n\t"
140180         "uxth	r7, %[b]\n\t"
140181 #ifdef WOLFSSL_KEIL
140182         "muls	r7, r6, r7\n\t"
140183 #elif defined(__clang__)
140184         "muls	r7, r6\n\t"
140185 #else
140186         "mul	r7, r6\n\t"
140187 #endif
140188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140189         "adds	r5, r5, r7\n\t"
140190 #else
140191         "add	r5, r5, r7\n\t"
140192 #endif
140193 #ifdef WOLFSSL_KEIL
140194         "adcs	r3, r3, %[r]\n\t"
140195 #elif defined(__clang__)
140196         "adcs	r3, %[r]\n\t"
140197 #else
140198         "adc	r3, %[r]\n\t"
140199 #endif
140200 #ifdef WOLFSSL_KEIL
140201         "adcs	r4, r4, %[r]\n\t"
140202 #elif defined(__clang__)
140203         "adcs	r4, %[r]\n\t"
140204 #else
140205         "adc	r4, %[r]\n\t"
140206 #endif
140207 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140208         "lsrs	r7, %[b], #16\n\t"
140209 #else
140210         "lsr	r7, %[b], #16\n\t"
140211 #endif
140212 #ifdef WOLFSSL_KEIL
140213         "muls	r6, r7, r6\n\t"
140214 #elif defined(__clang__)
140215         "muls	r6, r7\n\t"
140216 #else
140217         "mul	r6, r7\n\t"
140218 #endif
140219 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140220         "lsrs	r7, r6, #16\n\t"
140221 #else
140222         "lsr	r7, r6, #16\n\t"
140223 #endif
140224 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140225         "lsls	r6, r6, #16\n\t"
140226 #else
140227         "lsl	r6, r6, #16\n\t"
140228 #endif
140229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140230         "adds	r5, r5, r6\n\t"
140231 #else
140232         "add	r5, r5, r6\n\t"
140233 #endif
140234 #ifdef WOLFSSL_KEIL
140235         "adcs	r3, r3, r7\n\t"
140236 #elif defined(__clang__)
140237         "adcs	r3, r7\n\t"
140238 #else
140239         "adc	r3, r7\n\t"
140240 #endif
140241 #ifdef WOLFSSL_KEIL
140242         "adcs	r4, r4, %[r]\n\t"
140243 #elif defined(__clang__)
140244         "adcs	r4, %[r]\n\t"
140245 #else
140246         "adc	r4, %[r]\n\t"
140247 #endif
140248 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140249         "lsrs	r6, %[a], #16\n\t"
140250 #else
140251         "lsr	r6, %[a], #16\n\t"
140252 #endif
140253 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140254         "lsrs	r7, %[b], #16\n\t"
140255 #else
140256         "lsr	r7, %[b], #16\n\t"
140257 #endif
140258 #ifdef WOLFSSL_KEIL
140259         "muls	r7, r6, r7\n\t"
140260 #elif defined(__clang__)
140261         "muls	r7, r6\n\t"
140262 #else
140263         "mul	r7, r6\n\t"
140264 #endif
140265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140266         "adds	r3, r3, r7\n\t"
140267 #else
140268         "add	r3, r3, r7\n\t"
140269 #endif
140270 #ifdef WOLFSSL_KEIL
140271         "adcs	r4, r4, %[r]\n\t"
140272 #elif defined(__clang__)
140273         "adcs	r4, %[r]\n\t"
140274 #else
140275         "adc	r4, %[r]\n\t"
140276 #endif
140277         "uxth	r7, %[b]\n\t"
140278 #ifdef WOLFSSL_KEIL
140279         "muls	r6, r7, r6\n\t"
140280 #elif defined(__clang__)
140281         "muls	r6, r7\n\t"
140282 #else
140283         "mul	r6, r7\n\t"
140284 #endif
140285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140286         "lsrs	r7, r6, #16\n\t"
140287 #else
140288         "lsr	r7, r6, #16\n\t"
140289 #endif
140290 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140291         "lsls	r6, r6, #16\n\t"
140292 #else
140293         "lsl	r6, r6, #16\n\t"
140294 #endif
140295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140296         "adds	r5, r5, r6\n\t"
140297 #else
140298         "add	r5, r5, r6\n\t"
140299 #endif
140300 #ifdef WOLFSSL_KEIL
140301         "adcs	r3, r3, r7\n\t"
140302 #elif defined(__clang__)
140303         "adcs	r3, r7\n\t"
140304 #else
140305         "adc	r3, r7\n\t"
140306 #endif
140307 #ifdef WOLFSSL_KEIL
140308         "adcs	r4, r4, %[r]\n\t"
140309 #elif defined(__clang__)
140310         "adcs	r4, %[r]\n\t"
140311 #else
140312         "adc	r4, %[r]\n\t"
140313 #endif
140314         "#  A[9] * B[8]\n\t"
140315         "mov	%[a], r9\n\t"
140316         "mov	%[b], r10\n\t"
140317         "ldr	%[a], [%[a], #36]\n\t"
140318         "ldr	%[b], [%[b], #32]\n\t"
140319         "uxth	r6, %[a]\n\t"
140320         "uxth	r7, %[b]\n\t"
140321 #ifdef WOLFSSL_KEIL
140322         "muls	r7, r6, r7\n\t"
140323 #elif defined(__clang__)
140324         "muls	r7, r6\n\t"
140325 #else
140326         "mul	r7, r6\n\t"
140327 #endif
140328 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140329         "adds	r5, r5, r7\n\t"
140330 #else
140331         "add	r5, r5, r7\n\t"
140332 #endif
140333 #ifdef WOLFSSL_KEIL
140334         "adcs	r3, r3, %[r]\n\t"
140335 #elif defined(__clang__)
140336         "adcs	r3, %[r]\n\t"
140337 #else
140338         "adc	r3, %[r]\n\t"
140339 #endif
140340 #ifdef WOLFSSL_KEIL
140341         "adcs	r4, r4, %[r]\n\t"
140342 #elif defined(__clang__)
140343         "adcs	r4, %[r]\n\t"
140344 #else
140345         "adc	r4, %[r]\n\t"
140346 #endif
140347 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140348         "lsrs	r7, %[b], #16\n\t"
140349 #else
140350         "lsr	r7, %[b], #16\n\t"
140351 #endif
140352 #ifdef WOLFSSL_KEIL
140353         "muls	r6, r7, r6\n\t"
140354 #elif defined(__clang__)
140355         "muls	r6, r7\n\t"
140356 #else
140357         "mul	r6, r7\n\t"
140358 #endif
140359 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140360         "lsrs	r7, r6, #16\n\t"
140361 #else
140362         "lsr	r7, r6, #16\n\t"
140363 #endif
140364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140365         "lsls	r6, r6, #16\n\t"
140366 #else
140367         "lsl	r6, r6, #16\n\t"
140368 #endif
140369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140370         "adds	r5, r5, r6\n\t"
140371 #else
140372         "add	r5, r5, r6\n\t"
140373 #endif
140374 #ifdef WOLFSSL_KEIL
140375         "adcs	r3, r3, r7\n\t"
140376 #elif defined(__clang__)
140377         "adcs	r3, r7\n\t"
140378 #else
140379         "adc	r3, r7\n\t"
140380 #endif
140381 #ifdef WOLFSSL_KEIL
140382         "adcs	r4, r4, %[r]\n\t"
140383 #elif defined(__clang__)
140384         "adcs	r4, %[r]\n\t"
140385 #else
140386         "adc	r4, %[r]\n\t"
140387 #endif
140388 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140389         "lsrs	r6, %[a], #16\n\t"
140390 #else
140391         "lsr	r6, %[a], #16\n\t"
140392 #endif
140393 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140394         "lsrs	r7, %[b], #16\n\t"
140395 #else
140396         "lsr	r7, %[b], #16\n\t"
140397 #endif
140398 #ifdef WOLFSSL_KEIL
140399         "muls	r7, r6, r7\n\t"
140400 #elif defined(__clang__)
140401         "muls	r7, r6\n\t"
140402 #else
140403         "mul	r7, r6\n\t"
140404 #endif
140405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140406         "adds	r3, r3, r7\n\t"
140407 #else
140408         "add	r3, r3, r7\n\t"
140409 #endif
140410 #ifdef WOLFSSL_KEIL
140411         "adcs	r4, r4, %[r]\n\t"
140412 #elif defined(__clang__)
140413         "adcs	r4, %[r]\n\t"
140414 #else
140415         "adc	r4, %[r]\n\t"
140416 #endif
140417         "uxth	r7, %[b]\n\t"
140418 #ifdef WOLFSSL_KEIL
140419         "muls	r6, r7, r6\n\t"
140420 #elif defined(__clang__)
140421         "muls	r6, r7\n\t"
140422 #else
140423         "mul	r6, r7\n\t"
140424 #endif
140425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140426         "lsrs	r7, r6, #16\n\t"
140427 #else
140428         "lsr	r7, r6, #16\n\t"
140429 #endif
140430 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140431         "lsls	r6, r6, #16\n\t"
140432 #else
140433         "lsl	r6, r6, #16\n\t"
140434 #endif
140435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140436         "adds	r5, r5, r6\n\t"
140437 #else
140438         "add	r5, r5, r6\n\t"
140439 #endif
140440 #ifdef WOLFSSL_KEIL
140441         "adcs	r3, r3, r7\n\t"
140442 #elif defined(__clang__)
140443         "adcs	r3, r7\n\t"
140444 #else
140445         "adc	r3, r7\n\t"
140446 #endif
140447 #ifdef WOLFSSL_KEIL
140448         "adcs	r4, r4, %[r]\n\t"
140449 #elif defined(__clang__)
140450         "adcs	r4, %[r]\n\t"
140451 #else
140452         "adc	r4, %[r]\n\t"
140453 #endif
140454         "#  A[10] * B[7]\n\t"
140455         "mov	%[a], r9\n\t"
140456         "mov	%[b], r10\n\t"
140457         "ldr	%[a], [%[a], #40]\n\t"
140458         "ldr	%[b], [%[b], #28]\n\t"
140459         "uxth	r6, %[a]\n\t"
140460         "uxth	r7, %[b]\n\t"
140461 #ifdef WOLFSSL_KEIL
140462         "muls	r7, r6, r7\n\t"
140463 #elif defined(__clang__)
140464         "muls	r7, r6\n\t"
140465 #else
140466         "mul	r7, r6\n\t"
140467 #endif
140468 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140469         "adds	r5, r5, r7\n\t"
140470 #else
140471         "add	r5, r5, r7\n\t"
140472 #endif
140473 #ifdef WOLFSSL_KEIL
140474         "adcs	r3, r3, %[r]\n\t"
140475 #elif defined(__clang__)
140476         "adcs	r3, %[r]\n\t"
140477 #else
140478         "adc	r3, %[r]\n\t"
140479 #endif
140480 #ifdef WOLFSSL_KEIL
140481         "adcs	r4, r4, %[r]\n\t"
140482 #elif defined(__clang__)
140483         "adcs	r4, %[r]\n\t"
140484 #else
140485         "adc	r4, %[r]\n\t"
140486 #endif
140487 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140488         "lsrs	r7, %[b], #16\n\t"
140489 #else
140490         "lsr	r7, %[b], #16\n\t"
140491 #endif
140492 #ifdef WOLFSSL_KEIL
140493         "muls	r6, r7, r6\n\t"
140494 #elif defined(__clang__)
140495         "muls	r6, r7\n\t"
140496 #else
140497         "mul	r6, r7\n\t"
140498 #endif
140499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140500         "lsrs	r7, r6, #16\n\t"
140501 #else
140502         "lsr	r7, r6, #16\n\t"
140503 #endif
140504 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140505         "lsls	r6, r6, #16\n\t"
140506 #else
140507         "lsl	r6, r6, #16\n\t"
140508 #endif
140509 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140510         "adds	r5, r5, r6\n\t"
140511 #else
140512         "add	r5, r5, r6\n\t"
140513 #endif
140514 #ifdef WOLFSSL_KEIL
140515         "adcs	r3, r3, r7\n\t"
140516 #elif defined(__clang__)
140517         "adcs	r3, r7\n\t"
140518 #else
140519         "adc	r3, r7\n\t"
140520 #endif
140521 #ifdef WOLFSSL_KEIL
140522         "adcs	r4, r4, %[r]\n\t"
140523 #elif defined(__clang__)
140524         "adcs	r4, %[r]\n\t"
140525 #else
140526         "adc	r4, %[r]\n\t"
140527 #endif
140528 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140529         "lsrs	r6, %[a], #16\n\t"
140530 #else
140531         "lsr	r6, %[a], #16\n\t"
140532 #endif
140533 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140534         "lsrs	r7, %[b], #16\n\t"
140535 #else
140536         "lsr	r7, %[b], #16\n\t"
140537 #endif
140538 #ifdef WOLFSSL_KEIL
140539         "muls	r7, r6, r7\n\t"
140540 #elif defined(__clang__)
140541         "muls	r7, r6\n\t"
140542 #else
140543         "mul	r7, r6\n\t"
140544 #endif
140545 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140546         "adds	r3, r3, r7\n\t"
140547 #else
140548         "add	r3, r3, r7\n\t"
140549 #endif
140550 #ifdef WOLFSSL_KEIL
140551         "adcs	r4, r4, %[r]\n\t"
140552 #elif defined(__clang__)
140553         "adcs	r4, %[r]\n\t"
140554 #else
140555         "adc	r4, %[r]\n\t"
140556 #endif
140557         "uxth	r7, %[b]\n\t"
140558 #ifdef WOLFSSL_KEIL
140559         "muls	r6, r7, r6\n\t"
140560 #elif defined(__clang__)
140561         "muls	r6, r7\n\t"
140562 #else
140563         "mul	r6, r7\n\t"
140564 #endif
140565 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140566         "lsrs	r7, r6, #16\n\t"
140567 #else
140568         "lsr	r7, r6, #16\n\t"
140569 #endif
140570 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140571         "lsls	r6, r6, #16\n\t"
140572 #else
140573         "lsl	r6, r6, #16\n\t"
140574 #endif
140575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140576         "adds	r5, r5, r6\n\t"
140577 #else
140578         "add	r5, r5, r6\n\t"
140579 #endif
140580 #ifdef WOLFSSL_KEIL
140581         "adcs	r3, r3, r7\n\t"
140582 #elif defined(__clang__)
140583         "adcs	r3, r7\n\t"
140584 #else
140585         "adc	r3, r7\n\t"
140586 #endif
140587 #ifdef WOLFSSL_KEIL
140588         "adcs	r4, r4, %[r]\n\t"
140589 #elif defined(__clang__)
140590         "adcs	r4, %[r]\n\t"
140591 #else
140592         "adc	r4, %[r]\n\t"
140593 #endif
140594         "#  A[11] * B[6]\n\t"
140595         "mov	%[a], r9\n\t"
140596         "mov	%[b], r10\n\t"
140597         "ldr	%[a], [%[a], #44]\n\t"
140598         "ldr	%[b], [%[b], #24]\n\t"
140599         "uxth	r6, %[a]\n\t"
140600         "uxth	r7, %[b]\n\t"
140601 #ifdef WOLFSSL_KEIL
140602         "muls	r7, r6, r7\n\t"
140603 #elif defined(__clang__)
140604         "muls	r7, r6\n\t"
140605 #else
140606         "mul	r7, r6\n\t"
140607 #endif
140608 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140609         "adds	r5, r5, r7\n\t"
140610 #else
140611         "add	r5, r5, r7\n\t"
140612 #endif
140613 #ifdef WOLFSSL_KEIL
140614         "adcs	r3, r3, %[r]\n\t"
140615 #elif defined(__clang__)
140616         "adcs	r3, %[r]\n\t"
140617 #else
140618         "adc	r3, %[r]\n\t"
140619 #endif
140620 #ifdef WOLFSSL_KEIL
140621         "adcs	r4, r4, %[r]\n\t"
140622 #elif defined(__clang__)
140623         "adcs	r4, %[r]\n\t"
140624 #else
140625         "adc	r4, %[r]\n\t"
140626 #endif
140627 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140628         "lsrs	r7, %[b], #16\n\t"
140629 #else
140630         "lsr	r7, %[b], #16\n\t"
140631 #endif
140632 #ifdef WOLFSSL_KEIL
140633         "muls	r6, r7, r6\n\t"
140634 #elif defined(__clang__)
140635         "muls	r6, r7\n\t"
140636 #else
140637         "mul	r6, r7\n\t"
140638 #endif
140639 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140640         "lsrs	r7, r6, #16\n\t"
140641 #else
140642         "lsr	r7, r6, #16\n\t"
140643 #endif
140644 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140645         "lsls	r6, r6, #16\n\t"
140646 #else
140647         "lsl	r6, r6, #16\n\t"
140648 #endif
140649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140650         "adds	r5, r5, r6\n\t"
140651 #else
140652         "add	r5, r5, r6\n\t"
140653 #endif
140654 #ifdef WOLFSSL_KEIL
140655         "adcs	r3, r3, r7\n\t"
140656 #elif defined(__clang__)
140657         "adcs	r3, r7\n\t"
140658 #else
140659         "adc	r3, r7\n\t"
140660 #endif
140661 #ifdef WOLFSSL_KEIL
140662         "adcs	r4, r4, %[r]\n\t"
140663 #elif defined(__clang__)
140664         "adcs	r4, %[r]\n\t"
140665 #else
140666         "adc	r4, %[r]\n\t"
140667 #endif
140668 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140669         "lsrs	r6, %[a], #16\n\t"
140670 #else
140671         "lsr	r6, %[a], #16\n\t"
140672 #endif
140673 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140674         "lsrs	r7, %[b], #16\n\t"
140675 #else
140676         "lsr	r7, %[b], #16\n\t"
140677 #endif
140678 #ifdef WOLFSSL_KEIL
140679         "muls	r7, r6, r7\n\t"
140680 #elif defined(__clang__)
140681         "muls	r7, r6\n\t"
140682 #else
140683         "mul	r7, r6\n\t"
140684 #endif
140685 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140686         "adds	r3, r3, r7\n\t"
140687 #else
140688         "add	r3, r3, r7\n\t"
140689 #endif
140690 #ifdef WOLFSSL_KEIL
140691         "adcs	r4, r4, %[r]\n\t"
140692 #elif defined(__clang__)
140693         "adcs	r4, %[r]\n\t"
140694 #else
140695         "adc	r4, %[r]\n\t"
140696 #endif
140697         "uxth	r7, %[b]\n\t"
140698 #ifdef WOLFSSL_KEIL
140699         "muls	r6, r7, r6\n\t"
140700 #elif defined(__clang__)
140701         "muls	r6, r7\n\t"
140702 #else
140703         "mul	r6, r7\n\t"
140704 #endif
140705 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140706         "lsrs	r7, r6, #16\n\t"
140707 #else
140708         "lsr	r7, r6, #16\n\t"
140709 #endif
140710 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140711         "lsls	r6, r6, #16\n\t"
140712 #else
140713         "lsl	r6, r6, #16\n\t"
140714 #endif
140715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140716         "adds	r5, r5, r6\n\t"
140717 #else
140718         "add	r5, r5, r6\n\t"
140719 #endif
140720 #ifdef WOLFSSL_KEIL
140721         "adcs	r3, r3, r7\n\t"
140722 #elif defined(__clang__)
140723         "adcs	r3, r7\n\t"
140724 #else
140725         "adc	r3, r7\n\t"
140726 #endif
140727 #ifdef WOLFSSL_KEIL
140728         "adcs	r4, r4, %[r]\n\t"
140729 #elif defined(__clang__)
140730         "adcs	r4, %[r]\n\t"
140731 #else
140732         "adc	r4, %[r]\n\t"
140733 #endif
140734         "#  A[12] * B[5]\n\t"
140735         "mov	%[a], r9\n\t"
140736         "mov	%[b], r10\n\t"
140737         "ldr	%[a], [%[a], #48]\n\t"
140738         "ldr	%[b], [%[b], #20]\n\t"
140739         "uxth	r6, %[a]\n\t"
140740         "uxth	r7, %[b]\n\t"
140741 #ifdef WOLFSSL_KEIL
140742         "muls	r7, r6, r7\n\t"
140743 #elif defined(__clang__)
140744         "muls	r7, r6\n\t"
140745 #else
140746         "mul	r7, r6\n\t"
140747 #endif
140748 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140749         "adds	r5, r5, r7\n\t"
140750 #else
140751         "add	r5, r5, r7\n\t"
140752 #endif
140753 #ifdef WOLFSSL_KEIL
140754         "adcs	r3, r3, %[r]\n\t"
140755 #elif defined(__clang__)
140756         "adcs	r3, %[r]\n\t"
140757 #else
140758         "adc	r3, %[r]\n\t"
140759 #endif
140760 #ifdef WOLFSSL_KEIL
140761         "adcs	r4, r4, %[r]\n\t"
140762 #elif defined(__clang__)
140763         "adcs	r4, %[r]\n\t"
140764 #else
140765         "adc	r4, %[r]\n\t"
140766 #endif
140767 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140768         "lsrs	r7, %[b], #16\n\t"
140769 #else
140770         "lsr	r7, %[b], #16\n\t"
140771 #endif
140772 #ifdef WOLFSSL_KEIL
140773         "muls	r6, r7, r6\n\t"
140774 #elif defined(__clang__)
140775         "muls	r6, r7\n\t"
140776 #else
140777         "mul	r6, r7\n\t"
140778 #endif
140779 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140780         "lsrs	r7, r6, #16\n\t"
140781 #else
140782         "lsr	r7, r6, #16\n\t"
140783 #endif
140784 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140785         "lsls	r6, r6, #16\n\t"
140786 #else
140787         "lsl	r6, r6, #16\n\t"
140788 #endif
140789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140790         "adds	r5, r5, r6\n\t"
140791 #else
140792         "add	r5, r5, r6\n\t"
140793 #endif
140794 #ifdef WOLFSSL_KEIL
140795         "adcs	r3, r3, r7\n\t"
140796 #elif defined(__clang__)
140797         "adcs	r3, r7\n\t"
140798 #else
140799         "adc	r3, r7\n\t"
140800 #endif
140801 #ifdef WOLFSSL_KEIL
140802         "adcs	r4, r4, %[r]\n\t"
140803 #elif defined(__clang__)
140804         "adcs	r4, %[r]\n\t"
140805 #else
140806         "adc	r4, %[r]\n\t"
140807 #endif
140808 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140809         "lsrs	r6, %[a], #16\n\t"
140810 #else
140811         "lsr	r6, %[a], #16\n\t"
140812 #endif
140813 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140814         "lsrs	r7, %[b], #16\n\t"
140815 #else
140816         "lsr	r7, %[b], #16\n\t"
140817 #endif
140818 #ifdef WOLFSSL_KEIL
140819         "muls	r7, r6, r7\n\t"
140820 #elif defined(__clang__)
140821         "muls	r7, r6\n\t"
140822 #else
140823         "mul	r7, r6\n\t"
140824 #endif
140825 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140826         "adds	r3, r3, r7\n\t"
140827 #else
140828         "add	r3, r3, r7\n\t"
140829 #endif
140830 #ifdef WOLFSSL_KEIL
140831         "adcs	r4, r4, %[r]\n\t"
140832 #elif defined(__clang__)
140833         "adcs	r4, %[r]\n\t"
140834 #else
140835         "adc	r4, %[r]\n\t"
140836 #endif
140837         "uxth	r7, %[b]\n\t"
140838 #ifdef WOLFSSL_KEIL
140839         "muls	r6, r7, r6\n\t"
140840 #elif defined(__clang__)
140841         "muls	r6, r7\n\t"
140842 #else
140843         "mul	r6, r7\n\t"
140844 #endif
140845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140846         "lsrs	r7, r6, #16\n\t"
140847 #else
140848         "lsr	r7, r6, #16\n\t"
140849 #endif
140850 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140851         "lsls	r6, r6, #16\n\t"
140852 #else
140853         "lsl	r6, r6, #16\n\t"
140854 #endif
140855 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140856         "adds	r5, r5, r6\n\t"
140857 #else
140858         "add	r5, r5, r6\n\t"
140859 #endif
140860 #ifdef WOLFSSL_KEIL
140861         "adcs	r3, r3, r7\n\t"
140862 #elif defined(__clang__)
140863         "adcs	r3, r7\n\t"
140864 #else
140865         "adc	r3, r7\n\t"
140866 #endif
140867 #ifdef WOLFSSL_KEIL
140868         "adcs	r4, r4, %[r]\n\t"
140869 #elif defined(__clang__)
140870         "adcs	r4, %[r]\n\t"
140871 #else
140872         "adc	r4, %[r]\n\t"
140873 #endif
140874         "#  A[13] * B[4]\n\t"
140875         "mov	%[a], r9\n\t"
140876         "mov	%[b], r10\n\t"
140877         "ldr	%[a], [%[a], #52]\n\t"
140878         "ldr	%[b], [%[b], #16]\n\t"
140879         "uxth	r6, %[a]\n\t"
140880         "uxth	r7, %[b]\n\t"
140881 #ifdef WOLFSSL_KEIL
140882         "muls	r7, r6, r7\n\t"
140883 #elif defined(__clang__)
140884         "muls	r7, r6\n\t"
140885 #else
140886         "mul	r7, r6\n\t"
140887 #endif
140888 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140889         "adds	r5, r5, r7\n\t"
140890 #else
140891         "add	r5, r5, r7\n\t"
140892 #endif
140893 #ifdef WOLFSSL_KEIL
140894         "adcs	r3, r3, %[r]\n\t"
140895 #elif defined(__clang__)
140896         "adcs	r3, %[r]\n\t"
140897 #else
140898         "adc	r3, %[r]\n\t"
140899 #endif
140900 #ifdef WOLFSSL_KEIL
140901         "adcs	r4, r4, %[r]\n\t"
140902 #elif defined(__clang__)
140903         "adcs	r4, %[r]\n\t"
140904 #else
140905         "adc	r4, %[r]\n\t"
140906 #endif
140907 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140908         "lsrs	r7, %[b], #16\n\t"
140909 #else
140910         "lsr	r7, %[b], #16\n\t"
140911 #endif
140912 #ifdef WOLFSSL_KEIL
140913         "muls	r6, r7, r6\n\t"
140914 #elif defined(__clang__)
140915         "muls	r6, r7\n\t"
140916 #else
140917         "mul	r6, r7\n\t"
140918 #endif
140919 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140920         "lsrs	r7, r6, #16\n\t"
140921 #else
140922         "lsr	r7, r6, #16\n\t"
140923 #endif
140924 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140925         "lsls	r6, r6, #16\n\t"
140926 #else
140927         "lsl	r6, r6, #16\n\t"
140928 #endif
140929 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140930         "adds	r5, r5, r6\n\t"
140931 #else
140932         "add	r5, r5, r6\n\t"
140933 #endif
140934 #ifdef WOLFSSL_KEIL
140935         "adcs	r3, r3, r7\n\t"
140936 #elif defined(__clang__)
140937         "adcs	r3, r7\n\t"
140938 #else
140939         "adc	r3, r7\n\t"
140940 #endif
140941 #ifdef WOLFSSL_KEIL
140942         "adcs	r4, r4, %[r]\n\t"
140943 #elif defined(__clang__)
140944         "adcs	r4, %[r]\n\t"
140945 #else
140946         "adc	r4, %[r]\n\t"
140947 #endif
140948 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140949         "lsrs	r6, %[a], #16\n\t"
140950 #else
140951         "lsr	r6, %[a], #16\n\t"
140952 #endif
140953 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140954         "lsrs	r7, %[b], #16\n\t"
140955 #else
140956         "lsr	r7, %[b], #16\n\t"
140957 #endif
140958 #ifdef WOLFSSL_KEIL
140959         "muls	r7, r6, r7\n\t"
140960 #elif defined(__clang__)
140961         "muls	r7, r6\n\t"
140962 #else
140963         "mul	r7, r6\n\t"
140964 #endif
140965 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140966         "adds	r3, r3, r7\n\t"
140967 #else
140968         "add	r3, r3, r7\n\t"
140969 #endif
140970 #ifdef WOLFSSL_KEIL
140971         "adcs	r4, r4, %[r]\n\t"
140972 #elif defined(__clang__)
140973         "adcs	r4, %[r]\n\t"
140974 #else
140975         "adc	r4, %[r]\n\t"
140976 #endif
140977         "uxth	r7, %[b]\n\t"
140978 #ifdef WOLFSSL_KEIL
140979         "muls	r6, r7, r6\n\t"
140980 #elif defined(__clang__)
140981         "muls	r6, r7\n\t"
140982 #else
140983         "mul	r6, r7\n\t"
140984 #endif
140985 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140986         "lsrs	r7, r6, #16\n\t"
140987 #else
140988         "lsr	r7, r6, #16\n\t"
140989 #endif
140990 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140991         "lsls	r6, r6, #16\n\t"
140992 #else
140993         "lsl	r6, r6, #16\n\t"
140994 #endif
140995 #if defined(__clang__) || defined(WOLFSSL_KEIL)
140996         "adds	r5, r5, r6\n\t"
140997 #else
140998         "add	r5, r5, r6\n\t"
140999 #endif
141000 #ifdef WOLFSSL_KEIL
141001         "adcs	r3, r3, r7\n\t"
141002 #elif defined(__clang__)
141003         "adcs	r3, r7\n\t"
141004 #else
141005         "adc	r3, r7\n\t"
141006 #endif
141007 #ifdef WOLFSSL_KEIL
141008         "adcs	r4, r4, %[r]\n\t"
141009 #elif defined(__clang__)
141010         "adcs	r4, %[r]\n\t"
141011 #else
141012         "adc	r4, %[r]\n\t"
141013 #endif
141014         "#  A[14] * B[3]\n\t"
141015         "mov	%[a], r9\n\t"
141016         "mov	%[b], r10\n\t"
141017         "ldr	%[a], [%[a], #56]\n\t"
141018         "ldr	%[b], [%[b], #12]\n\t"
141019         "uxth	r6, %[a]\n\t"
141020         "uxth	r7, %[b]\n\t"
141021 #ifdef WOLFSSL_KEIL
141022         "muls	r7, r6, r7\n\t"
141023 #elif defined(__clang__)
141024         "muls	r7, r6\n\t"
141025 #else
141026         "mul	r7, r6\n\t"
141027 #endif
141028 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141029         "adds	r5, r5, r7\n\t"
141030 #else
141031         "add	r5, r5, r7\n\t"
141032 #endif
141033 #ifdef WOLFSSL_KEIL
141034         "adcs	r3, r3, %[r]\n\t"
141035 #elif defined(__clang__)
141036         "adcs	r3, %[r]\n\t"
141037 #else
141038         "adc	r3, %[r]\n\t"
141039 #endif
141040 #ifdef WOLFSSL_KEIL
141041         "adcs	r4, r4, %[r]\n\t"
141042 #elif defined(__clang__)
141043         "adcs	r4, %[r]\n\t"
141044 #else
141045         "adc	r4, %[r]\n\t"
141046 #endif
141047 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141048         "lsrs	r7, %[b], #16\n\t"
141049 #else
141050         "lsr	r7, %[b], #16\n\t"
141051 #endif
141052 #ifdef WOLFSSL_KEIL
141053         "muls	r6, r7, r6\n\t"
141054 #elif defined(__clang__)
141055         "muls	r6, r7\n\t"
141056 #else
141057         "mul	r6, r7\n\t"
141058 #endif
141059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141060         "lsrs	r7, r6, #16\n\t"
141061 #else
141062         "lsr	r7, r6, #16\n\t"
141063 #endif
141064 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141065         "lsls	r6, r6, #16\n\t"
141066 #else
141067         "lsl	r6, r6, #16\n\t"
141068 #endif
141069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141070         "adds	r5, r5, r6\n\t"
141071 #else
141072         "add	r5, r5, r6\n\t"
141073 #endif
141074 #ifdef WOLFSSL_KEIL
141075         "adcs	r3, r3, r7\n\t"
141076 #elif defined(__clang__)
141077         "adcs	r3, r7\n\t"
141078 #else
141079         "adc	r3, r7\n\t"
141080 #endif
141081 #ifdef WOLFSSL_KEIL
141082         "adcs	r4, r4, %[r]\n\t"
141083 #elif defined(__clang__)
141084         "adcs	r4, %[r]\n\t"
141085 #else
141086         "adc	r4, %[r]\n\t"
141087 #endif
141088 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141089         "lsrs	r6, %[a], #16\n\t"
141090 #else
141091         "lsr	r6, %[a], #16\n\t"
141092 #endif
141093 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141094         "lsrs	r7, %[b], #16\n\t"
141095 #else
141096         "lsr	r7, %[b], #16\n\t"
141097 #endif
141098 #ifdef WOLFSSL_KEIL
141099         "muls	r7, r6, r7\n\t"
141100 #elif defined(__clang__)
141101         "muls	r7, r6\n\t"
141102 #else
141103         "mul	r7, r6\n\t"
141104 #endif
141105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141106         "adds	r3, r3, r7\n\t"
141107 #else
141108         "add	r3, r3, r7\n\t"
141109 #endif
141110 #ifdef WOLFSSL_KEIL
141111         "adcs	r4, r4, %[r]\n\t"
141112 #elif defined(__clang__)
141113         "adcs	r4, %[r]\n\t"
141114 #else
141115         "adc	r4, %[r]\n\t"
141116 #endif
141117         "uxth	r7, %[b]\n\t"
141118 #ifdef WOLFSSL_KEIL
141119         "muls	r6, r7, r6\n\t"
141120 #elif defined(__clang__)
141121         "muls	r6, r7\n\t"
141122 #else
141123         "mul	r6, r7\n\t"
141124 #endif
141125 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141126         "lsrs	r7, r6, #16\n\t"
141127 #else
141128         "lsr	r7, r6, #16\n\t"
141129 #endif
141130 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141131         "lsls	r6, r6, #16\n\t"
141132 #else
141133         "lsl	r6, r6, #16\n\t"
141134 #endif
141135 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141136         "adds	r5, r5, r6\n\t"
141137 #else
141138         "add	r5, r5, r6\n\t"
141139 #endif
141140 #ifdef WOLFSSL_KEIL
141141         "adcs	r3, r3, r7\n\t"
141142 #elif defined(__clang__)
141143         "adcs	r3, r7\n\t"
141144 #else
141145         "adc	r3, r7\n\t"
141146 #endif
141147 #ifdef WOLFSSL_KEIL
141148         "adcs	r4, r4, %[r]\n\t"
141149 #elif defined(__clang__)
141150         "adcs	r4, %[r]\n\t"
141151 #else
141152         "adc	r4, %[r]\n\t"
141153 #endif
141154         "#  A[15] * B[2]\n\t"
141155         "mov	%[a], r9\n\t"
141156         "mov	%[b], r10\n\t"
141157         "ldr	%[a], [%[a], #60]\n\t"
141158         "ldr	%[b], [%[b], #8]\n\t"
141159         "uxth	r6, %[a]\n\t"
141160         "uxth	r7, %[b]\n\t"
141161 #ifdef WOLFSSL_KEIL
141162         "muls	r7, r6, r7\n\t"
141163 #elif defined(__clang__)
141164         "muls	r7, r6\n\t"
141165 #else
141166         "mul	r7, r6\n\t"
141167 #endif
141168 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141169         "adds	r5, r5, r7\n\t"
141170 #else
141171         "add	r5, r5, r7\n\t"
141172 #endif
141173 #ifdef WOLFSSL_KEIL
141174         "adcs	r3, r3, %[r]\n\t"
141175 #elif defined(__clang__)
141176         "adcs	r3, %[r]\n\t"
141177 #else
141178         "adc	r3, %[r]\n\t"
141179 #endif
141180 #ifdef WOLFSSL_KEIL
141181         "adcs	r4, r4, %[r]\n\t"
141182 #elif defined(__clang__)
141183         "adcs	r4, %[r]\n\t"
141184 #else
141185         "adc	r4, %[r]\n\t"
141186 #endif
141187 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141188         "lsrs	r7, %[b], #16\n\t"
141189 #else
141190         "lsr	r7, %[b], #16\n\t"
141191 #endif
141192 #ifdef WOLFSSL_KEIL
141193         "muls	r6, r7, r6\n\t"
141194 #elif defined(__clang__)
141195         "muls	r6, r7\n\t"
141196 #else
141197         "mul	r6, r7\n\t"
141198 #endif
141199 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141200         "lsrs	r7, r6, #16\n\t"
141201 #else
141202         "lsr	r7, r6, #16\n\t"
141203 #endif
141204 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141205         "lsls	r6, r6, #16\n\t"
141206 #else
141207         "lsl	r6, r6, #16\n\t"
141208 #endif
141209 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141210         "adds	r5, r5, r6\n\t"
141211 #else
141212         "add	r5, r5, r6\n\t"
141213 #endif
141214 #ifdef WOLFSSL_KEIL
141215         "adcs	r3, r3, r7\n\t"
141216 #elif defined(__clang__)
141217         "adcs	r3, r7\n\t"
141218 #else
141219         "adc	r3, r7\n\t"
141220 #endif
141221 #ifdef WOLFSSL_KEIL
141222         "adcs	r4, r4, %[r]\n\t"
141223 #elif defined(__clang__)
141224         "adcs	r4, %[r]\n\t"
141225 #else
141226         "adc	r4, %[r]\n\t"
141227 #endif
141228 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141229         "lsrs	r6, %[a], #16\n\t"
141230 #else
141231         "lsr	r6, %[a], #16\n\t"
141232 #endif
141233 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141234         "lsrs	r7, %[b], #16\n\t"
141235 #else
141236         "lsr	r7, %[b], #16\n\t"
141237 #endif
141238 #ifdef WOLFSSL_KEIL
141239         "muls	r7, r6, r7\n\t"
141240 #elif defined(__clang__)
141241         "muls	r7, r6\n\t"
141242 #else
141243         "mul	r7, r6\n\t"
141244 #endif
141245 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141246         "adds	r3, r3, r7\n\t"
141247 #else
141248         "add	r3, r3, r7\n\t"
141249 #endif
141250 #ifdef WOLFSSL_KEIL
141251         "adcs	r4, r4, %[r]\n\t"
141252 #elif defined(__clang__)
141253         "adcs	r4, %[r]\n\t"
141254 #else
141255         "adc	r4, %[r]\n\t"
141256 #endif
141257         "uxth	r7, %[b]\n\t"
141258 #ifdef WOLFSSL_KEIL
141259         "muls	r6, r7, r6\n\t"
141260 #elif defined(__clang__)
141261         "muls	r6, r7\n\t"
141262 #else
141263         "mul	r6, r7\n\t"
141264 #endif
141265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141266         "lsrs	r7, r6, #16\n\t"
141267 #else
141268         "lsr	r7, r6, #16\n\t"
141269 #endif
141270 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141271         "lsls	r6, r6, #16\n\t"
141272 #else
141273         "lsl	r6, r6, #16\n\t"
141274 #endif
141275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141276         "adds	r5, r5, r6\n\t"
141277 #else
141278         "add	r5, r5, r6\n\t"
141279 #endif
141280 #ifdef WOLFSSL_KEIL
141281         "adcs	r3, r3, r7\n\t"
141282 #elif defined(__clang__)
141283         "adcs	r3, r7\n\t"
141284 #else
141285         "adc	r3, r7\n\t"
141286 #endif
141287 #ifdef WOLFSSL_KEIL
141288         "adcs	r4, r4, %[r]\n\t"
141289 #elif defined(__clang__)
141290         "adcs	r4, %[r]\n\t"
141291 #else
141292         "adc	r4, %[r]\n\t"
141293 #endif
141294         "mov	%[r], r8\n\t"
141295         "str	r5, [%[r], #68]\n\t"
141296         "movs	%[r], #0\n\t"
141297         "#  A[15] * B[3]\n\t"
141298         "movs	r5, #0\n\t"
141299         "mov	%[a], r9\n\t"
141300         "mov	%[b], r10\n\t"
141301         "ldr	%[a], [%[a], #60]\n\t"
141302         "ldr	%[b], [%[b], #12]\n\t"
141303         "uxth	r6, %[a]\n\t"
141304         "uxth	r7, %[b]\n\t"
141305 #ifdef WOLFSSL_KEIL
141306         "muls	r7, r6, r7\n\t"
141307 #elif defined(__clang__)
141308         "muls	r7, r6\n\t"
141309 #else
141310         "mul	r7, r6\n\t"
141311 #endif
141312 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141313         "adds	r3, r3, r7\n\t"
141314 #else
141315         "add	r3, r3, r7\n\t"
141316 #endif
141317 #ifdef WOLFSSL_KEIL
141318         "adcs	r4, r4, %[r]\n\t"
141319 #elif defined(__clang__)
141320         "adcs	r4, %[r]\n\t"
141321 #else
141322         "adc	r4, %[r]\n\t"
141323 #endif
141324 #ifdef WOLFSSL_KEIL
141325         "adcs	r5, r5, %[r]\n\t"
141326 #elif defined(__clang__)
141327         "adcs	r5, %[r]\n\t"
141328 #else
141329         "adc	r5, %[r]\n\t"
141330 #endif
141331 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141332         "lsrs	r7, %[b], #16\n\t"
141333 #else
141334         "lsr	r7, %[b], #16\n\t"
141335 #endif
141336 #ifdef WOLFSSL_KEIL
141337         "muls	r6, r7, r6\n\t"
141338 #elif defined(__clang__)
141339         "muls	r6, r7\n\t"
141340 #else
141341         "mul	r6, r7\n\t"
141342 #endif
141343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141344         "lsrs	r7, r6, #16\n\t"
141345 #else
141346         "lsr	r7, r6, #16\n\t"
141347 #endif
141348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141349         "lsls	r6, r6, #16\n\t"
141350 #else
141351         "lsl	r6, r6, #16\n\t"
141352 #endif
141353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141354         "adds	r3, r3, r6\n\t"
141355 #else
141356         "add	r3, r3, r6\n\t"
141357 #endif
141358 #ifdef WOLFSSL_KEIL
141359         "adcs	r4, r4, r7\n\t"
141360 #elif defined(__clang__)
141361         "adcs	r4, r7\n\t"
141362 #else
141363         "adc	r4, r7\n\t"
141364 #endif
141365 #ifdef WOLFSSL_KEIL
141366         "adcs	r5, r5, %[r]\n\t"
141367 #elif defined(__clang__)
141368         "adcs	r5, %[r]\n\t"
141369 #else
141370         "adc	r5, %[r]\n\t"
141371 #endif
141372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141373         "lsrs	r6, %[a], #16\n\t"
141374 #else
141375         "lsr	r6, %[a], #16\n\t"
141376 #endif
141377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141378         "lsrs	r7, %[b], #16\n\t"
141379 #else
141380         "lsr	r7, %[b], #16\n\t"
141381 #endif
141382 #ifdef WOLFSSL_KEIL
141383         "muls	r7, r6, r7\n\t"
141384 #elif defined(__clang__)
141385         "muls	r7, r6\n\t"
141386 #else
141387         "mul	r7, r6\n\t"
141388 #endif
141389 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141390         "adds	r4, r4, r7\n\t"
141391 #else
141392         "add	r4, r4, r7\n\t"
141393 #endif
141394 #ifdef WOLFSSL_KEIL
141395         "adcs	r5, r5, %[r]\n\t"
141396 #elif defined(__clang__)
141397         "adcs	r5, %[r]\n\t"
141398 #else
141399         "adc	r5, %[r]\n\t"
141400 #endif
141401         "uxth	r7, %[b]\n\t"
141402 #ifdef WOLFSSL_KEIL
141403         "muls	r6, r7, r6\n\t"
141404 #elif defined(__clang__)
141405         "muls	r6, r7\n\t"
141406 #else
141407         "mul	r6, r7\n\t"
141408 #endif
141409 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141410         "lsrs	r7, r6, #16\n\t"
141411 #else
141412         "lsr	r7, r6, #16\n\t"
141413 #endif
141414 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141415         "lsls	r6, r6, #16\n\t"
141416 #else
141417         "lsl	r6, r6, #16\n\t"
141418 #endif
141419 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141420         "adds	r3, r3, r6\n\t"
141421 #else
141422         "add	r3, r3, r6\n\t"
141423 #endif
141424 #ifdef WOLFSSL_KEIL
141425         "adcs	r4, r4, r7\n\t"
141426 #elif defined(__clang__)
141427         "adcs	r4, r7\n\t"
141428 #else
141429         "adc	r4, r7\n\t"
141430 #endif
141431 #ifdef WOLFSSL_KEIL
141432         "adcs	r5, r5, %[r]\n\t"
141433 #elif defined(__clang__)
141434         "adcs	r5, %[r]\n\t"
141435 #else
141436         "adc	r5, %[r]\n\t"
141437 #endif
141438         "#  A[14] * B[4]\n\t"
141439         "mov	%[a], r9\n\t"
141440         "mov	%[b], r10\n\t"
141441         "ldr	%[a], [%[a], #56]\n\t"
141442         "ldr	%[b], [%[b], #16]\n\t"
141443         "uxth	r6, %[a]\n\t"
141444         "uxth	r7, %[b]\n\t"
141445 #ifdef WOLFSSL_KEIL
141446         "muls	r7, r6, r7\n\t"
141447 #elif defined(__clang__)
141448         "muls	r7, r6\n\t"
141449 #else
141450         "mul	r7, r6\n\t"
141451 #endif
141452 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141453         "adds	r3, r3, r7\n\t"
141454 #else
141455         "add	r3, r3, r7\n\t"
141456 #endif
141457 #ifdef WOLFSSL_KEIL
141458         "adcs	r4, r4, %[r]\n\t"
141459 #elif defined(__clang__)
141460         "adcs	r4, %[r]\n\t"
141461 #else
141462         "adc	r4, %[r]\n\t"
141463 #endif
141464 #ifdef WOLFSSL_KEIL
141465         "adcs	r5, r5, %[r]\n\t"
141466 #elif defined(__clang__)
141467         "adcs	r5, %[r]\n\t"
141468 #else
141469         "adc	r5, %[r]\n\t"
141470 #endif
141471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141472         "lsrs	r7, %[b], #16\n\t"
141473 #else
141474         "lsr	r7, %[b], #16\n\t"
141475 #endif
141476 #ifdef WOLFSSL_KEIL
141477         "muls	r6, r7, r6\n\t"
141478 #elif defined(__clang__)
141479         "muls	r6, r7\n\t"
141480 #else
141481         "mul	r6, r7\n\t"
141482 #endif
141483 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141484         "lsrs	r7, r6, #16\n\t"
141485 #else
141486         "lsr	r7, r6, #16\n\t"
141487 #endif
141488 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141489         "lsls	r6, r6, #16\n\t"
141490 #else
141491         "lsl	r6, r6, #16\n\t"
141492 #endif
141493 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141494         "adds	r3, r3, r6\n\t"
141495 #else
141496         "add	r3, r3, r6\n\t"
141497 #endif
141498 #ifdef WOLFSSL_KEIL
141499         "adcs	r4, r4, r7\n\t"
141500 #elif defined(__clang__)
141501         "adcs	r4, r7\n\t"
141502 #else
141503         "adc	r4, r7\n\t"
141504 #endif
141505 #ifdef WOLFSSL_KEIL
141506         "adcs	r5, r5, %[r]\n\t"
141507 #elif defined(__clang__)
141508         "adcs	r5, %[r]\n\t"
141509 #else
141510         "adc	r5, %[r]\n\t"
141511 #endif
141512 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141513         "lsrs	r6, %[a], #16\n\t"
141514 #else
141515         "lsr	r6, %[a], #16\n\t"
141516 #endif
141517 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141518         "lsrs	r7, %[b], #16\n\t"
141519 #else
141520         "lsr	r7, %[b], #16\n\t"
141521 #endif
141522 #ifdef WOLFSSL_KEIL
141523         "muls	r7, r6, r7\n\t"
141524 #elif defined(__clang__)
141525         "muls	r7, r6\n\t"
141526 #else
141527         "mul	r7, r6\n\t"
141528 #endif
141529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141530         "adds	r4, r4, r7\n\t"
141531 #else
141532         "add	r4, r4, r7\n\t"
141533 #endif
141534 #ifdef WOLFSSL_KEIL
141535         "adcs	r5, r5, %[r]\n\t"
141536 #elif defined(__clang__)
141537         "adcs	r5, %[r]\n\t"
141538 #else
141539         "adc	r5, %[r]\n\t"
141540 #endif
141541         "uxth	r7, %[b]\n\t"
141542 #ifdef WOLFSSL_KEIL
141543         "muls	r6, r7, r6\n\t"
141544 #elif defined(__clang__)
141545         "muls	r6, r7\n\t"
141546 #else
141547         "mul	r6, r7\n\t"
141548 #endif
141549 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141550         "lsrs	r7, r6, #16\n\t"
141551 #else
141552         "lsr	r7, r6, #16\n\t"
141553 #endif
141554 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141555         "lsls	r6, r6, #16\n\t"
141556 #else
141557         "lsl	r6, r6, #16\n\t"
141558 #endif
141559 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141560         "adds	r3, r3, r6\n\t"
141561 #else
141562         "add	r3, r3, r6\n\t"
141563 #endif
141564 #ifdef WOLFSSL_KEIL
141565         "adcs	r4, r4, r7\n\t"
141566 #elif defined(__clang__)
141567         "adcs	r4, r7\n\t"
141568 #else
141569         "adc	r4, r7\n\t"
141570 #endif
141571 #ifdef WOLFSSL_KEIL
141572         "adcs	r5, r5, %[r]\n\t"
141573 #elif defined(__clang__)
141574         "adcs	r5, %[r]\n\t"
141575 #else
141576         "adc	r5, %[r]\n\t"
141577 #endif
141578         "#  A[13] * B[5]\n\t"
141579         "mov	%[a], r9\n\t"
141580         "mov	%[b], r10\n\t"
141581         "ldr	%[a], [%[a], #52]\n\t"
141582         "ldr	%[b], [%[b], #20]\n\t"
141583         "uxth	r6, %[a]\n\t"
141584         "uxth	r7, %[b]\n\t"
141585 #ifdef WOLFSSL_KEIL
141586         "muls	r7, r6, r7\n\t"
141587 #elif defined(__clang__)
141588         "muls	r7, r6\n\t"
141589 #else
141590         "mul	r7, r6\n\t"
141591 #endif
141592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141593         "adds	r3, r3, r7\n\t"
141594 #else
141595         "add	r3, r3, r7\n\t"
141596 #endif
141597 #ifdef WOLFSSL_KEIL
141598         "adcs	r4, r4, %[r]\n\t"
141599 #elif defined(__clang__)
141600         "adcs	r4, %[r]\n\t"
141601 #else
141602         "adc	r4, %[r]\n\t"
141603 #endif
141604 #ifdef WOLFSSL_KEIL
141605         "adcs	r5, r5, %[r]\n\t"
141606 #elif defined(__clang__)
141607         "adcs	r5, %[r]\n\t"
141608 #else
141609         "adc	r5, %[r]\n\t"
141610 #endif
141611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141612         "lsrs	r7, %[b], #16\n\t"
141613 #else
141614         "lsr	r7, %[b], #16\n\t"
141615 #endif
141616 #ifdef WOLFSSL_KEIL
141617         "muls	r6, r7, r6\n\t"
141618 #elif defined(__clang__)
141619         "muls	r6, r7\n\t"
141620 #else
141621         "mul	r6, r7\n\t"
141622 #endif
141623 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141624         "lsrs	r7, r6, #16\n\t"
141625 #else
141626         "lsr	r7, r6, #16\n\t"
141627 #endif
141628 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141629         "lsls	r6, r6, #16\n\t"
141630 #else
141631         "lsl	r6, r6, #16\n\t"
141632 #endif
141633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141634         "adds	r3, r3, r6\n\t"
141635 #else
141636         "add	r3, r3, r6\n\t"
141637 #endif
141638 #ifdef WOLFSSL_KEIL
141639         "adcs	r4, r4, r7\n\t"
141640 #elif defined(__clang__)
141641         "adcs	r4, r7\n\t"
141642 #else
141643         "adc	r4, r7\n\t"
141644 #endif
141645 #ifdef WOLFSSL_KEIL
141646         "adcs	r5, r5, %[r]\n\t"
141647 #elif defined(__clang__)
141648         "adcs	r5, %[r]\n\t"
141649 #else
141650         "adc	r5, %[r]\n\t"
141651 #endif
141652 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141653         "lsrs	r6, %[a], #16\n\t"
141654 #else
141655         "lsr	r6, %[a], #16\n\t"
141656 #endif
141657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141658         "lsrs	r7, %[b], #16\n\t"
141659 #else
141660         "lsr	r7, %[b], #16\n\t"
141661 #endif
141662 #ifdef WOLFSSL_KEIL
141663         "muls	r7, r6, r7\n\t"
141664 #elif defined(__clang__)
141665         "muls	r7, r6\n\t"
141666 #else
141667         "mul	r7, r6\n\t"
141668 #endif
141669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141670         "adds	r4, r4, r7\n\t"
141671 #else
141672         "add	r4, r4, r7\n\t"
141673 #endif
141674 #ifdef WOLFSSL_KEIL
141675         "adcs	r5, r5, %[r]\n\t"
141676 #elif defined(__clang__)
141677         "adcs	r5, %[r]\n\t"
141678 #else
141679         "adc	r5, %[r]\n\t"
141680 #endif
141681         "uxth	r7, %[b]\n\t"
141682 #ifdef WOLFSSL_KEIL
141683         "muls	r6, r7, r6\n\t"
141684 #elif defined(__clang__)
141685         "muls	r6, r7\n\t"
141686 #else
141687         "mul	r6, r7\n\t"
141688 #endif
141689 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141690         "lsrs	r7, r6, #16\n\t"
141691 #else
141692         "lsr	r7, r6, #16\n\t"
141693 #endif
141694 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141695         "lsls	r6, r6, #16\n\t"
141696 #else
141697         "lsl	r6, r6, #16\n\t"
141698 #endif
141699 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141700         "adds	r3, r3, r6\n\t"
141701 #else
141702         "add	r3, r3, r6\n\t"
141703 #endif
141704 #ifdef WOLFSSL_KEIL
141705         "adcs	r4, r4, r7\n\t"
141706 #elif defined(__clang__)
141707         "adcs	r4, r7\n\t"
141708 #else
141709         "adc	r4, r7\n\t"
141710 #endif
141711 #ifdef WOLFSSL_KEIL
141712         "adcs	r5, r5, %[r]\n\t"
141713 #elif defined(__clang__)
141714         "adcs	r5, %[r]\n\t"
141715 #else
141716         "adc	r5, %[r]\n\t"
141717 #endif
141718         "#  A[12] * B[6]\n\t"
141719         "mov	%[a], r9\n\t"
141720         "mov	%[b], r10\n\t"
141721         "ldr	%[a], [%[a], #48]\n\t"
141722         "ldr	%[b], [%[b], #24]\n\t"
141723         "uxth	r6, %[a]\n\t"
141724         "uxth	r7, %[b]\n\t"
141725 #ifdef WOLFSSL_KEIL
141726         "muls	r7, r6, r7\n\t"
141727 #elif defined(__clang__)
141728         "muls	r7, r6\n\t"
141729 #else
141730         "mul	r7, r6\n\t"
141731 #endif
141732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141733         "adds	r3, r3, r7\n\t"
141734 #else
141735         "add	r3, r3, r7\n\t"
141736 #endif
141737 #ifdef WOLFSSL_KEIL
141738         "adcs	r4, r4, %[r]\n\t"
141739 #elif defined(__clang__)
141740         "adcs	r4, %[r]\n\t"
141741 #else
141742         "adc	r4, %[r]\n\t"
141743 #endif
141744 #ifdef WOLFSSL_KEIL
141745         "adcs	r5, r5, %[r]\n\t"
141746 #elif defined(__clang__)
141747         "adcs	r5, %[r]\n\t"
141748 #else
141749         "adc	r5, %[r]\n\t"
141750 #endif
141751 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141752         "lsrs	r7, %[b], #16\n\t"
141753 #else
141754         "lsr	r7, %[b], #16\n\t"
141755 #endif
141756 #ifdef WOLFSSL_KEIL
141757         "muls	r6, r7, r6\n\t"
141758 #elif defined(__clang__)
141759         "muls	r6, r7\n\t"
141760 #else
141761         "mul	r6, r7\n\t"
141762 #endif
141763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141764         "lsrs	r7, r6, #16\n\t"
141765 #else
141766         "lsr	r7, r6, #16\n\t"
141767 #endif
141768 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141769         "lsls	r6, r6, #16\n\t"
141770 #else
141771         "lsl	r6, r6, #16\n\t"
141772 #endif
141773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141774         "adds	r3, r3, r6\n\t"
141775 #else
141776         "add	r3, r3, r6\n\t"
141777 #endif
141778 #ifdef WOLFSSL_KEIL
141779         "adcs	r4, r4, r7\n\t"
141780 #elif defined(__clang__)
141781         "adcs	r4, r7\n\t"
141782 #else
141783         "adc	r4, r7\n\t"
141784 #endif
141785 #ifdef WOLFSSL_KEIL
141786         "adcs	r5, r5, %[r]\n\t"
141787 #elif defined(__clang__)
141788         "adcs	r5, %[r]\n\t"
141789 #else
141790         "adc	r5, %[r]\n\t"
141791 #endif
141792 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141793         "lsrs	r6, %[a], #16\n\t"
141794 #else
141795         "lsr	r6, %[a], #16\n\t"
141796 #endif
141797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141798         "lsrs	r7, %[b], #16\n\t"
141799 #else
141800         "lsr	r7, %[b], #16\n\t"
141801 #endif
141802 #ifdef WOLFSSL_KEIL
141803         "muls	r7, r6, r7\n\t"
141804 #elif defined(__clang__)
141805         "muls	r7, r6\n\t"
141806 #else
141807         "mul	r7, r6\n\t"
141808 #endif
141809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141810         "adds	r4, r4, r7\n\t"
141811 #else
141812         "add	r4, r4, r7\n\t"
141813 #endif
141814 #ifdef WOLFSSL_KEIL
141815         "adcs	r5, r5, %[r]\n\t"
141816 #elif defined(__clang__)
141817         "adcs	r5, %[r]\n\t"
141818 #else
141819         "adc	r5, %[r]\n\t"
141820 #endif
141821         "uxth	r7, %[b]\n\t"
141822 #ifdef WOLFSSL_KEIL
141823         "muls	r6, r7, r6\n\t"
141824 #elif defined(__clang__)
141825         "muls	r6, r7\n\t"
141826 #else
141827         "mul	r6, r7\n\t"
141828 #endif
141829 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141830         "lsrs	r7, r6, #16\n\t"
141831 #else
141832         "lsr	r7, r6, #16\n\t"
141833 #endif
141834 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141835         "lsls	r6, r6, #16\n\t"
141836 #else
141837         "lsl	r6, r6, #16\n\t"
141838 #endif
141839 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141840         "adds	r3, r3, r6\n\t"
141841 #else
141842         "add	r3, r3, r6\n\t"
141843 #endif
141844 #ifdef WOLFSSL_KEIL
141845         "adcs	r4, r4, r7\n\t"
141846 #elif defined(__clang__)
141847         "adcs	r4, r7\n\t"
141848 #else
141849         "adc	r4, r7\n\t"
141850 #endif
141851 #ifdef WOLFSSL_KEIL
141852         "adcs	r5, r5, %[r]\n\t"
141853 #elif defined(__clang__)
141854         "adcs	r5, %[r]\n\t"
141855 #else
141856         "adc	r5, %[r]\n\t"
141857 #endif
141858         "#  A[11] * B[7]\n\t"
141859         "mov	%[a], r9\n\t"
141860         "mov	%[b], r10\n\t"
141861         "ldr	%[a], [%[a], #44]\n\t"
141862         "ldr	%[b], [%[b], #28]\n\t"
141863         "uxth	r6, %[a]\n\t"
141864         "uxth	r7, %[b]\n\t"
141865 #ifdef WOLFSSL_KEIL
141866         "muls	r7, r6, r7\n\t"
141867 #elif defined(__clang__)
141868         "muls	r7, r6\n\t"
141869 #else
141870         "mul	r7, r6\n\t"
141871 #endif
141872 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141873         "adds	r3, r3, r7\n\t"
141874 #else
141875         "add	r3, r3, r7\n\t"
141876 #endif
141877 #ifdef WOLFSSL_KEIL
141878         "adcs	r4, r4, %[r]\n\t"
141879 #elif defined(__clang__)
141880         "adcs	r4, %[r]\n\t"
141881 #else
141882         "adc	r4, %[r]\n\t"
141883 #endif
141884 #ifdef WOLFSSL_KEIL
141885         "adcs	r5, r5, %[r]\n\t"
141886 #elif defined(__clang__)
141887         "adcs	r5, %[r]\n\t"
141888 #else
141889         "adc	r5, %[r]\n\t"
141890 #endif
141891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141892         "lsrs	r7, %[b], #16\n\t"
141893 #else
141894         "lsr	r7, %[b], #16\n\t"
141895 #endif
141896 #ifdef WOLFSSL_KEIL
141897         "muls	r6, r7, r6\n\t"
141898 #elif defined(__clang__)
141899         "muls	r6, r7\n\t"
141900 #else
141901         "mul	r6, r7\n\t"
141902 #endif
141903 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141904         "lsrs	r7, r6, #16\n\t"
141905 #else
141906         "lsr	r7, r6, #16\n\t"
141907 #endif
141908 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141909         "lsls	r6, r6, #16\n\t"
141910 #else
141911         "lsl	r6, r6, #16\n\t"
141912 #endif
141913 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141914         "adds	r3, r3, r6\n\t"
141915 #else
141916         "add	r3, r3, r6\n\t"
141917 #endif
141918 #ifdef WOLFSSL_KEIL
141919         "adcs	r4, r4, r7\n\t"
141920 #elif defined(__clang__)
141921         "adcs	r4, r7\n\t"
141922 #else
141923         "adc	r4, r7\n\t"
141924 #endif
141925 #ifdef WOLFSSL_KEIL
141926         "adcs	r5, r5, %[r]\n\t"
141927 #elif defined(__clang__)
141928         "adcs	r5, %[r]\n\t"
141929 #else
141930         "adc	r5, %[r]\n\t"
141931 #endif
141932 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141933         "lsrs	r6, %[a], #16\n\t"
141934 #else
141935         "lsr	r6, %[a], #16\n\t"
141936 #endif
141937 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141938         "lsrs	r7, %[b], #16\n\t"
141939 #else
141940         "lsr	r7, %[b], #16\n\t"
141941 #endif
141942 #ifdef WOLFSSL_KEIL
141943         "muls	r7, r6, r7\n\t"
141944 #elif defined(__clang__)
141945         "muls	r7, r6\n\t"
141946 #else
141947         "mul	r7, r6\n\t"
141948 #endif
141949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141950         "adds	r4, r4, r7\n\t"
141951 #else
141952         "add	r4, r4, r7\n\t"
141953 #endif
141954 #ifdef WOLFSSL_KEIL
141955         "adcs	r5, r5, %[r]\n\t"
141956 #elif defined(__clang__)
141957         "adcs	r5, %[r]\n\t"
141958 #else
141959         "adc	r5, %[r]\n\t"
141960 #endif
141961         "uxth	r7, %[b]\n\t"
141962 #ifdef WOLFSSL_KEIL
141963         "muls	r6, r7, r6\n\t"
141964 #elif defined(__clang__)
141965         "muls	r6, r7\n\t"
141966 #else
141967         "mul	r6, r7\n\t"
141968 #endif
141969 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141970         "lsrs	r7, r6, #16\n\t"
141971 #else
141972         "lsr	r7, r6, #16\n\t"
141973 #endif
141974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141975         "lsls	r6, r6, #16\n\t"
141976 #else
141977         "lsl	r6, r6, #16\n\t"
141978 #endif
141979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
141980         "adds	r3, r3, r6\n\t"
141981 #else
141982         "add	r3, r3, r6\n\t"
141983 #endif
141984 #ifdef WOLFSSL_KEIL
141985         "adcs	r4, r4, r7\n\t"
141986 #elif defined(__clang__)
141987         "adcs	r4, r7\n\t"
141988 #else
141989         "adc	r4, r7\n\t"
141990 #endif
141991 #ifdef WOLFSSL_KEIL
141992         "adcs	r5, r5, %[r]\n\t"
141993 #elif defined(__clang__)
141994         "adcs	r5, %[r]\n\t"
141995 #else
141996         "adc	r5, %[r]\n\t"
141997 #endif
141998         "#  A[10] * B[8]\n\t"
141999         "mov	%[a], r9\n\t"
142000         "mov	%[b], r10\n\t"
142001         "ldr	%[a], [%[a], #40]\n\t"
142002         "ldr	%[b], [%[b], #32]\n\t"
142003         "uxth	r6, %[a]\n\t"
142004         "uxth	r7, %[b]\n\t"
142005 #ifdef WOLFSSL_KEIL
142006         "muls	r7, r6, r7\n\t"
142007 #elif defined(__clang__)
142008         "muls	r7, r6\n\t"
142009 #else
142010         "mul	r7, r6\n\t"
142011 #endif
142012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142013         "adds	r3, r3, r7\n\t"
142014 #else
142015         "add	r3, r3, r7\n\t"
142016 #endif
142017 #ifdef WOLFSSL_KEIL
142018         "adcs	r4, r4, %[r]\n\t"
142019 #elif defined(__clang__)
142020         "adcs	r4, %[r]\n\t"
142021 #else
142022         "adc	r4, %[r]\n\t"
142023 #endif
142024 #ifdef WOLFSSL_KEIL
142025         "adcs	r5, r5, %[r]\n\t"
142026 #elif defined(__clang__)
142027         "adcs	r5, %[r]\n\t"
142028 #else
142029         "adc	r5, %[r]\n\t"
142030 #endif
142031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142032         "lsrs	r7, %[b], #16\n\t"
142033 #else
142034         "lsr	r7, %[b], #16\n\t"
142035 #endif
142036 #ifdef WOLFSSL_KEIL
142037         "muls	r6, r7, r6\n\t"
142038 #elif defined(__clang__)
142039         "muls	r6, r7\n\t"
142040 #else
142041         "mul	r6, r7\n\t"
142042 #endif
142043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142044         "lsrs	r7, r6, #16\n\t"
142045 #else
142046         "lsr	r7, r6, #16\n\t"
142047 #endif
142048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142049         "lsls	r6, r6, #16\n\t"
142050 #else
142051         "lsl	r6, r6, #16\n\t"
142052 #endif
142053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142054         "adds	r3, r3, r6\n\t"
142055 #else
142056         "add	r3, r3, r6\n\t"
142057 #endif
142058 #ifdef WOLFSSL_KEIL
142059         "adcs	r4, r4, r7\n\t"
142060 #elif defined(__clang__)
142061         "adcs	r4, r7\n\t"
142062 #else
142063         "adc	r4, r7\n\t"
142064 #endif
142065 #ifdef WOLFSSL_KEIL
142066         "adcs	r5, r5, %[r]\n\t"
142067 #elif defined(__clang__)
142068         "adcs	r5, %[r]\n\t"
142069 #else
142070         "adc	r5, %[r]\n\t"
142071 #endif
142072 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142073         "lsrs	r6, %[a], #16\n\t"
142074 #else
142075         "lsr	r6, %[a], #16\n\t"
142076 #endif
142077 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142078         "lsrs	r7, %[b], #16\n\t"
142079 #else
142080         "lsr	r7, %[b], #16\n\t"
142081 #endif
142082 #ifdef WOLFSSL_KEIL
142083         "muls	r7, r6, r7\n\t"
142084 #elif defined(__clang__)
142085         "muls	r7, r6\n\t"
142086 #else
142087         "mul	r7, r6\n\t"
142088 #endif
142089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142090         "adds	r4, r4, r7\n\t"
142091 #else
142092         "add	r4, r4, r7\n\t"
142093 #endif
142094 #ifdef WOLFSSL_KEIL
142095         "adcs	r5, r5, %[r]\n\t"
142096 #elif defined(__clang__)
142097         "adcs	r5, %[r]\n\t"
142098 #else
142099         "adc	r5, %[r]\n\t"
142100 #endif
142101         "uxth	r7, %[b]\n\t"
142102 #ifdef WOLFSSL_KEIL
142103         "muls	r6, r7, r6\n\t"
142104 #elif defined(__clang__)
142105         "muls	r6, r7\n\t"
142106 #else
142107         "mul	r6, r7\n\t"
142108 #endif
142109 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142110         "lsrs	r7, r6, #16\n\t"
142111 #else
142112         "lsr	r7, r6, #16\n\t"
142113 #endif
142114 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142115         "lsls	r6, r6, #16\n\t"
142116 #else
142117         "lsl	r6, r6, #16\n\t"
142118 #endif
142119 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142120         "adds	r3, r3, r6\n\t"
142121 #else
142122         "add	r3, r3, r6\n\t"
142123 #endif
142124 #ifdef WOLFSSL_KEIL
142125         "adcs	r4, r4, r7\n\t"
142126 #elif defined(__clang__)
142127         "adcs	r4, r7\n\t"
142128 #else
142129         "adc	r4, r7\n\t"
142130 #endif
142131 #ifdef WOLFSSL_KEIL
142132         "adcs	r5, r5, %[r]\n\t"
142133 #elif defined(__clang__)
142134         "adcs	r5, %[r]\n\t"
142135 #else
142136         "adc	r5, %[r]\n\t"
142137 #endif
142138         "#  A[9] * B[9]\n\t"
142139         "mov	%[a], r9\n\t"
142140         "mov	%[b], r10\n\t"
142141         "ldr	%[a], [%[a], #36]\n\t"
142142         "ldr	%[b], [%[b], #36]\n\t"
142143         "uxth	r6, %[a]\n\t"
142144         "uxth	r7, %[b]\n\t"
142145 #ifdef WOLFSSL_KEIL
142146         "muls	r7, r6, r7\n\t"
142147 #elif defined(__clang__)
142148         "muls	r7, r6\n\t"
142149 #else
142150         "mul	r7, r6\n\t"
142151 #endif
142152 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142153         "adds	r3, r3, r7\n\t"
142154 #else
142155         "add	r3, r3, r7\n\t"
142156 #endif
142157 #ifdef WOLFSSL_KEIL
142158         "adcs	r4, r4, %[r]\n\t"
142159 #elif defined(__clang__)
142160         "adcs	r4, %[r]\n\t"
142161 #else
142162         "adc	r4, %[r]\n\t"
142163 #endif
142164 #ifdef WOLFSSL_KEIL
142165         "adcs	r5, r5, %[r]\n\t"
142166 #elif defined(__clang__)
142167         "adcs	r5, %[r]\n\t"
142168 #else
142169         "adc	r5, %[r]\n\t"
142170 #endif
142171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142172         "lsrs	r7, %[b], #16\n\t"
142173 #else
142174         "lsr	r7, %[b], #16\n\t"
142175 #endif
142176 #ifdef WOLFSSL_KEIL
142177         "muls	r6, r7, r6\n\t"
142178 #elif defined(__clang__)
142179         "muls	r6, r7\n\t"
142180 #else
142181         "mul	r6, r7\n\t"
142182 #endif
142183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142184         "lsrs	r7, r6, #16\n\t"
142185 #else
142186         "lsr	r7, r6, #16\n\t"
142187 #endif
142188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142189         "lsls	r6, r6, #16\n\t"
142190 #else
142191         "lsl	r6, r6, #16\n\t"
142192 #endif
142193 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142194         "adds	r3, r3, r6\n\t"
142195 #else
142196         "add	r3, r3, r6\n\t"
142197 #endif
142198 #ifdef WOLFSSL_KEIL
142199         "adcs	r4, r4, r7\n\t"
142200 #elif defined(__clang__)
142201         "adcs	r4, r7\n\t"
142202 #else
142203         "adc	r4, r7\n\t"
142204 #endif
142205 #ifdef WOLFSSL_KEIL
142206         "adcs	r5, r5, %[r]\n\t"
142207 #elif defined(__clang__)
142208         "adcs	r5, %[r]\n\t"
142209 #else
142210         "adc	r5, %[r]\n\t"
142211 #endif
142212 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142213         "lsrs	r6, %[a], #16\n\t"
142214 #else
142215         "lsr	r6, %[a], #16\n\t"
142216 #endif
142217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142218         "lsrs	r7, %[b], #16\n\t"
142219 #else
142220         "lsr	r7, %[b], #16\n\t"
142221 #endif
142222 #ifdef WOLFSSL_KEIL
142223         "muls	r7, r6, r7\n\t"
142224 #elif defined(__clang__)
142225         "muls	r7, r6\n\t"
142226 #else
142227         "mul	r7, r6\n\t"
142228 #endif
142229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142230         "adds	r4, r4, r7\n\t"
142231 #else
142232         "add	r4, r4, r7\n\t"
142233 #endif
142234 #ifdef WOLFSSL_KEIL
142235         "adcs	r5, r5, %[r]\n\t"
142236 #elif defined(__clang__)
142237         "adcs	r5, %[r]\n\t"
142238 #else
142239         "adc	r5, %[r]\n\t"
142240 #endif
142241         "uxth	r7, %[b]\n\t"
142242 #ifdef WOLFSSL_KEIL
142243         "muls	r6, r7, r6\n\t"
142244 #elif defined(__clang__)
142245         "muls	r6, r7\n\t"
142246 #else
142247         "mul	r6, r7\n\t"
142248 #endif
142249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142250         "lsrs	r7, r6, #16\n\t"
142251 #else
142252         "lsr	r7, r6, #16\n\t"
142253 #endif
142254 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142255         "lsls	r6, r6, #16\n\t"
142256 #else
142257         "lsl	r6, r6, #16\n\t"
142258 #endif
142259 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142260         "adds	r3, r3, r6\n\t"
142261 #else
142262         "add	r3, r3, r6\n\t"
142263 #endif
142264 #ifdef WOLFSSL_KEIL
142265         "adcs	r4, r4, r7\n\t"
142266 #elif defined(__clang__)
142267         "adcs	r4, r7\n\t"
142268 #else
142269         "adc	r4, r7\n\t"
142270 #endif
142271 #ifdef WOLFSSL_KEIL
142272         "adcs	r5, r5, %[r]\n\t"
142273 #elif defined(__clang__)
142274         "adcs	r5, %[r]\n\t"
142275 #else
142276         "adc	r5, %[r]\n\t"
142277 #endif
142278         "#  A[8] * B[10]\n\t"
142279         "mov	%[a], r9\n\t"
142280         "mov	%[b], r10\n\t"
142281         "ldr	%[a], [%[a], #32]\n\t"
142282         "ldr	%[b], [%[b], #40]\n\t"
142283         "uxth	r6, %[a]\n\t"
142284         "uxth	r7, %[b]\n\t"
142285 #ifdef WOLFSSL_KEIL
142286         "muls	r7, r6, r7\n\t"
142287 #elif defined(__clang__)
142288         "muls	r7, r6\n\t"
142289 #else
142290         "mul	r7, r6\n\t"
142291 #endif
142292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142293         "adds	r3, r3, r7\n\t"
142294 #else
142295         "add	r3, r3, r7\n\t"
142296 #endif
142297 #ifdef WOLFSSL_KEIL
142298         "adcs	r4, r4, %[r]\n\t"
142299 #elif defined(__clang__)
142300         "adcs	r4, %[r]\n\t"
142301 #else
142302         "adc	r4, %[r]\n\t"
142303 #endif
142304 #ifdef WOLFSSL_KEIL
142305         "adcs	r5, r5, %[r]\n\t"
142306 #elif defined(__clang__)
142307         "adcs	r5, %[r]\n\t"
142308 #else
142309         "adc	r5, %[r]\n\t"
142310 #endif
142311 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142312         "lsrs	r7, %[b], #16\n\t"
142313 #else
142314         "lsr	r7, %[b], #16\n\t"
142315 #endif
142316 #ifdef WOLFSSL_KEIL
142317         "muls	r6, r7, r6\n\t"
142318 #elif defined(__clang__)
142319         "muls	r6, r7\n\t"
142320 #else
142321         "mul	r6, r7\n\t"
142322 #endif
142323 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142324         "lsrs	r7, r6, #16\n\t"
142325 #else
142326         "lsr	r7, r6, #16\n\t"
142327 #endif
142328 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142329         "lsls	r6, r6, #16\n\t"
142330 #else
142331         "lsl	r6, r6, #16\n\t"
142332 #endif
142333 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142334         "adds	r3, r3, r6\n\t"
142335 #else
142336         "add	r3, r3, r6\n\t"
142337 #endif
142338 #ifdef WOLFSSL_KEIL
142339         "adcs	r4, r4, r7\n\t"
142340 #elif defined(__clang__)
142341         "adcs	r4, r7\n\t"
142342 #else
142343         "adc	r4, r7\n\t"
142344 #endif
142345 #ifdef WOLFSSL_KEIL
142346         "adcs	r5, r5, %[r]\n\t"
142347 #elif defined(__clang__)
142348         "adcs	r5, %[r]\n\t"
142349 #else
142350         "adc	r5, %[r]\n\t"
142351 #endif
142352 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142353         "lsrs	r6, %[a], #16\n\t"
142354 #else
142355         "lsr	r6, %[a], #16\n\t"
142356 #endif
142357 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142358         "lsrs	r7, %[b], #16\n\t"
142359 #else
142360         "lsr	r7, %[b], #16\n\t"
142361 #endif
142362 #ifdef WOLFSSL_KEIL
142363         "muls	r7, r6, r7\n\t"
142364 #elif defined(__clang__)
142365         "muls	r7, r6\n\t"
142366 #else
142367         "mul	r7, r6\n\t"
142368 #endif
142369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142370         "adds	r4, r4, r7\n\t"
142371 #else
142372         "add	r4, r4, r7\n\t"
142373 #endif
142374 #ifdef WOLFSSL_KEIL
142375         "adcs	r5, r5, %[r]\n\t"
142376 #elif defined(__clang__)
142377         "adcs	r5, %[r]\n\t"
142378 #else
142379         "adc	r5, %[r]\n\t"
142380 #endif
142381         "uxth	r7, %[b]\n\t"
142382 #ifdef WOLFSSL_KEIL
142383         "muls	r6, r7, r6\n\t"
142384 #elif defined(__clang__)
142385         "muls	r6, r7\n\t"
142386 #else
142387         "mul	r6, r7\n\t"
142388 #endif
142389 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142390         "lsrs	r7, r6, #16\n\t"
142391 #else
142392         "lsr	r7, r6, #16\n\t"
142393 #endif
142394 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142395         "lsls	r6, r6, #16\n\t"
142396 #else
142397         "lsl	r6, r6, #16\n\t"
142398 #endif
142399 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142400         "adds	r3, r3, r6\n\t"
142401 #else
142402         "add	r3, r3, r6\n\t"
142403 #endif
142404 #ifdef WOLFSSL_KEIL
142405         "adcs	r4, r4, r7\n\t"
142406 #elif defined(__clang__)
142407         "adcs	r4, r7\n\t"
142408 #else
142409         "adc	r4, r7\n\t"
142410 #endif
142411 #ifdef WOLFSSL_KEIL
142412         "adcs	r5, r5, %[r]\n\t"
142413 #elif defined(__clang__)
142414         "adcs	r5, %[r]\n\t"
142415 #else
142416         "adc	r5, %[r]\n\t"
142417 #endif
142418         "#  A[7] * B[11]\n\t"
142419         "mov	%[a], r9\n\t"
142420         "mov	%[b], r10\n\t"
142421         "ldr	%[a], [%[a], #28]\n\t"
142422         "ldr	%[b], [%[b], #44]\n\t"
142423         "uxth	r6, %[a]\n\t"
142424         "uxth	r7, %[b]\n\t"
142425 #ifdef WOLFSSL_KEIL
142426         "muls	r7, r6, r7\n\t"
142427 #elif defined(__clang__)
142428         "muls	r7, r6\n\t"
142429 #else
142430         "mul	r7, r6\n\t"
142431 #endif
142432 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142433         "adds	r3, r3, r7\n\t"
142434 #else
142435         "add	r3, r3, r7\n\t"
142436 #endif
142437 #ifdef WOLFSSL_KEIL
142438         "adcs	r4, r4, %[r]\n\t"
142439 #elif defined(__clang__)
142440         "adcs	r4, %[r]\n\t"
142441 #else
142442         "adc	r4, %[r]\n\t"
142443 #endif
142444 #ifdef WOLFSSL_KEIL
142445         "adcs	r5, r5, %[r]\n\t"
142446 #elif defined(__clang__)
142447         "adcs	r5, %[r]\n\t"
142448 #else
142449         "adc	r5, %[r]\n\t"
142450 #endif
142451 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142452         "lsrs	r7, %[b], #16\n\t"
142453 #else
142454         "lsr	r7, %[b], #16\n\t"
142455 #endif
142456 #ifdef WOLFSSL_KEIL
142457         "muls	r6, r7, r6\n\t"
142458 #elif defined(__clang__)
142459         "muls	r6, r7\n\t"
142460 #else
142461         "mul	r6, r7\n\t"
142462 #endif
142463 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142464         "lsrs	r7, r6, #16\n\t"
142465 #else
142466         "lsr	r7, r6, #16\n\t"
142467 #endif
142468 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142469         "lsls	r6, r6, #16\n\t"
142470 #else
142471         "lsl	r6, r6, #16\n\t"
142472 #endif
142473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142474         "adds	r3, r3, r6\n\t"
142475 #else
142476         "add	r3, r3, r6\n\t"
142477 #endif
142478 #ifdef WOLFSSL_KEIL
142479         "adcs	r4, r4, r7\n\t"
142480 #elif defined(__clang__)
142481         "adcs	r4, r7\n\t"
142482 #else
142483         "adc	r4, r7\n\t"
142484 #endif
142485 #ifdef WOLFSSL_KEIL
142486         "adcs	r5, r5, %[r]\n\t"
142487 #elif defined(__clang__)
142488         "adcs	r5, %[r]\n\t"
142489 #else
142490         "adc	r5, %[r]\n\t"
142491 #endif
142492 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142493         "lsrs	r6, %[a], #16\n\t"
142494 #else
142495         "lsr	r6, %[a], #16\n\t"
142496 #endif
142497 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142498         "lsrs	r7, %[b], #16\n\t"
142499 #else
142500         "lsr	r7, %[b], #16\n\t"
142501 #endif
142502 #ifdef WOLFSSL_KEIL
142503         "muls	r7, r6, r7\n\t"
142504 #elif defined(__clang__)
142505         "muls	r7, r6\n\t"
142506 #else
142507         "mul	r7, r6\n\t"
142508 #endif
142509 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142510         "adds	r4, r4, r7\n\t"
142511 #else
142512         "add	r4, r4, r7\n\t"
142513 #endif
142514 #ifdef WOLFSSL_KEIL
142515         "adcs	r5, r5, %[r]\n\t"
142516 #elif defined(__clang__)
142517         "adcs	r5, %[r]\n\t"
142518 #else
142519         "adc	r5, %[r]\n\t"
142520 #endif
142521         "uxth	r7, %[b]\n\t"
142522 #ifdef WOLFSSL_KEIL
142523         "muls	r6, r7, r6\n\t"
142524 #elif defined(__clang__)
142525         "muls	r6, r7\n\t"
142526 #else
142527         "mul	r6, r7\n\t"
142528 #endif
142529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142530         "lsrs	r7, r6, #16\n\t"
142531 #else
142532         "lsr	r7, r6, #16\n\t"
142533 #endif
142534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142535         "lsls	r6, r6, #16\n\t"
142536 #else
142537         "lsl	r6, r6, #16\n\t"
142538 #endif
142539 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142540         "adds	r3, r3, r6\n\t"
142541 #else
142542         "add	r3, r3, r6\n\t"
142543 #endif
142544 #ifdef WOLFSSL_KEIL
142545         "adcs	r4, r4, r7\n\t"
142546 #elif defined(__clang__)
142547         "adcs	r4, r7\n\t"
142548 #else
142549         "adc	r4, r7\n\t"
142550 #endif
142551 #ifdef WOLFSSL_KEIL
142552         "adcs	r5, r5, %[r]\n\t"
142553 #elif defined(__clang__)
142554         "adcs	r5, %[r]\n\t"
142555 #else
142556         "adc	r5, %[r]\n\t"
142557 #endif
142558         "#  A[6] * B[12]\n\t"
142559         "mov	%[a], r9\n\t"
142560         "mov	%[b], r10\n\t"
142561         "ldr	%[a], [%[a], #24]\n\t"
142562         "ldr	%[b], [%[b], #48]\n\t"
142563         "uxth	r6, %[a]\n\t"
142564         "uxth	r7, %[b]\n\t"
142565 #ifdef WOLFSSL_KEIL
142566         "muls	r7, r6, r7\n\t"
142567 #elif defined(__clang__)
142568         "muls	r7, r6\n\t"
142569 #else
142570         "mul	r7, r6\n\t"
142571 #endif
142572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142573         "adds	r3, r3, r7\n\t"
142574 #else
142575         "add	r3, r3, r7\n\t"
142576 #endif
142577 #ifdef WOLFSSL_KEIL
142578         "adcs	r4, r4, %[r]\n\t"
142579 #elif defined(__clang__)
142580         "adcs	r4, %[r]\n\t"
142581 #else
142582         "adc	r4, %[r]\n\t"
142583 #endif
142584 #ifdef WOLFSSL_KEIL
142585         "adcs	r5, r5, %[r]\n\t"
142586 #elif defined(__clang__)
142587         "adcs	r5, %[r]\n\t"
142588 #else
142589         "adc	r5, %[r]\n\t"
142590 #endif
142591 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142592         "lsrs	r7, %[b], #16\n\t"
142593 #else
142594         "lsr	r7, %[b], #16\n\t"
142595 #endif
142596 #ifdef WOLFSSL_KEIL
142597         "muls	r6, r7, r6\n\t"
142598 #elif defined(__clang__)
142599         "muls	r6, r7\n\t"
142600 #else
142601         "mul	r6, r7\n\t"
142602 #endif
142603 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142604         "lsrs	r7, r6, #16\n\t"
142605 #else
142606         "lsr	r7, r6, #16\n\t"
142607 #endif
142608 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142609         "lsls	r6, r6, #16\n\t"
142610 #else
142611         "lsl	r6, r6, #16\n\t"
142612 #endif
142613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142614         "adds	r3, r3, r6\n\t"
142615 #else
142616         "add	r3, r3, r6\n\t"
142617 #endif
142618 #ifdef WOLFSSL_KEIL
142619         "adcs	r4, r4, r7\n\t"
142620 #elif defined(__clang__)
142621         "adcs	r4, r7\n\t"
142622 #else
142623         "adc	r4, r7\n\t"
142624 #endif
142625 #ifdef WOLFSSL_KEIL
142626         "adcs	r5, r5, %[r]\n\t"
142627 #elif defined(__clang__)
142628         "adcs	r5, %[r]\n\t"
142629 #else
142630         "adc	r5, %[r]\n\t"
142631 #endif
142632 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142633         "lsrs	r6, %[a], #16\n\t"
142634 #else
142635         "lsr	r6, %[a], #16\n\t"
142636 #endif
142637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142638         "lsrs	r7, %[b], #16\n\t"
142639 #else
142640         "lsr	r7, %[b], #16\n\t"
142641 #endif
142642 #ifdef WOLFSSL_KEIL
142643         "muls	r7, r6, r7\n\t"
142644 #elif defined(__clang__)
142645         "muls	r7, r6\n\t"
142646 #else
142647         "mul	r7, r6\n\t"
142648 #endif
142649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142650         "adds	r4, r4, r7\n\t"
142651 #else
142652         "add	r4, r4, r7\n\t"
142653 #endif
142654 #ifdef WOLFSSL_KEIL
142655         "adcs	r5, r5, %[r]\n\t"
142656 #elif defined(__clang__)
142657         "adcs	r5, %[r]\n\t"
142658 #else
142659         "adc	r5, %[r]\n\t"
142660 #endif
142661         "uxth	r7, %[b]\n\t"
142662 #ifdef WOLFSSL_KEIL
142663         "muls	r6, r7, r6\n\t"
142664 #elif defined(__clang__)
142665         "muls	r6, r7\n\t"
142666 #else
142667         "mul	r6, r7\n\t"
142668 #endif
142669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142670         "lsrs	r7, r6, #16\n\t"
142671 #else
142672         "lsr	r7, r6, #16\n\t"
142673 #endif
142674 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142675         "lsls	r6, r6, #16\n\t"
142676 #else
142677         "lsl	r6, r6, #16\n\t"
142678 #endif
142679 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142680         "adds	r3, r3, r6\n\t"
142681 #else
142682         "add	r3, r3, r6\n\t"
142683 #endif
142684 #ifdef WOLFSSL_KEIL
142685         "adcs	r4, r4, r7\n\t"
142686 #elif defined(__clang__)
142687         "adcs	r4, r7\n\t"
142688 #else
142689         "adc	r4, r7\n\t"
142690 #endif
142691 #ifdef WOLFSSL_KEIL
142692         "adcs	r5, r5, %[r]\n\t"
142693 #elif defined(__clang__)
142694         "adcs	r5, %[r]\n\t"
142695 #else
142696         "adc	r5, %[r]\n\t"
142697 #endif
142698         "#  A[5] * B[13]\n\t"
142699         "mov	%[a], r9\n\t"
142700         "mov	%[b], r10\n\t"
142701         "ldr	%[a], [%[a], #20]\n\t"
142702         "ldr	%[b], [%[b], #52]\n\t"
142703         "uxth	r6, %[a]\n\t"
142704         "uxth	r7, %[b]\n\t"
142705 #ifdef WOLFSSL_KEIL
142706         "muls	r7, r6, r7\n\t"
142707 #elif defined(__clang__)
142708         "muls	r7, r6\n\t"
142709 #else
142710         "mul	r7, r6\n\t"
142711 #endif
142712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142713         "adds	r3, r3, r7\n\t"
142714 #else
142715         "add	r3, r3, r7\n\t"
142716 #endif
142717 #ifdef WOLFSSL_KEIL
142718         "adcs	r4, r4, %[r]\n\t"
142719 #elif defined(__clang__)
142720         "adcs	r4, %[r]\n\t"
142721 #else
142722         "adc	r4, %[r]\n\t"
142723 #endif
142724 #ifdef WOLFSSL_KEIL
142725         "adcs	r5, r5, %[r]\n\t"
142726 #elif defined(__clang__)
142727         "adcs	r5, %[r]\n\t"
142728 #else
142729         "adc	r5, %[r]\n\t"
142730 #endif
142731 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142732         "lsrs	r7, %[b], #16\n\t"
142733 #else
142734         "lsr	r7, %[b], #16\n\t"
142735 #endif
142736 #ifdef WOLFSSL_KEIL
142737         "muls	r6, r7, r6\n\t"
142738 #elif defined(__clang__)
142739         "muls	r6, r7\n\t"
142740 #else
142741         "mul	r6, r7\n\t"
142742 #endif
142743 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142744         "lsrs	r7, r6, #16\n\t"
142745 #else
142746         "lsr	r7, r6, #16\n\t"
142747 #endif
142748 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142749         "lsls	r6, r6, #16\n\t"
142750 #else
142751         "lsl	r6, r6, #16\n\t"
142752 #endif
142753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142754         "adds	r3, r3, r6\n\t"
142755 #else
142756         "add	r3, r3, r6\n\t"
142757 #endif
142758 #ifdef WOLFSSL_KEIL
142759         "adcs	r4, r4, r7\n\t"
142760 #elif defined(__clang__)
142761         "adcs	r4, r7\n\t"
142762 #else
142763         "adc	r4, r7\n\t"
142764 #endif
142765 #ifdef WOLFSSL_KEIL
142766         "adcs	r5, r5, %[r]\n\t"
142767 #elif defined(__clang__)
142768         "adcs	r5, %[r]\n\t"
142769 #else
142770         "adc	r5, %[r]\n\t"
142771 #endif
142772 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142773         "lsrs	r6, %[a], #16\n\t"
142774 #else
142775         "lsr	r6, %[a], #16\n\t"
142776 #endif
142777 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142778         "lsrs	r7, %[b], #16\n\t"
142779 #else
142780         "lsr	r7, %[b], #16\n\t"
142781 #endif
142782 #ifdef WOLFSSL_KEIL
142783         "muls	r7, r6, r7\n\t"
142784 #elif defined(__clang__)
142785         "muls	r7, r6\n\t"
142786 #else
142787         "mul	r7, r6\n\t"
142788 #endif
142789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142790         "adds	r4, r4, r7\n\t"
142791 #else
142792         "add	r4, r4, r7\n\t"
142793 #endif
142794 #ifdef WOLFSSL_KEIL
142795         "adcs	r5, r5, %[r]\n\t"
142796 #elif defined(__clang__)
142797         "adcs	r5, %[r]\n\t"
142798 #else
142799         "adc	r5, %[r]\n\t"
142800 #endif
142801         "uxth	r7, %[b]\n\t"
142802 #ifdef WOLFSSL_KEIL
142803         "muls	r6, r7, r6\n\t"
142804 #elif defined(__clang__)
142805         "muls	r6, r7\n\t"
142806 #else
142807         "mul	r6, r7\n\t"
142808 #endif
142809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142810         "lsrs	r7, r6, #16\n\t"
142811 #else
142812         "lsr	r7, r6, #16\n\t"
142813 #endif
142814 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142815         "lsls	r6, r6, #16\n\t"
142816 #else
142817         "lsl	r6, r6, #16\n\t"
142818 #endif
142819 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142820         "adds	r3, r3, r6\n\t"
142821 #else
142822         "add	r3, r3, r6\n\t"
142823 #endif
142824 #ifdef WOLFSSL_KEIL
142825         "adcs	r4, r4, r7\n\t"
142826 #elif defined(__clang__)
142827         "adcs	r4, r7\n\t"
142828 #else
142829         "adc	r4, r7\n\t"
142830 #endif
142831 #ifdef WOLFSSL_KEIL
142832         "adcs	r5, r5, %[r]\n\t"
142833 #elif defined(__clang__)
142834         "adcs	r5, %[r]\n\t"
142835 #else
142836         "adc	r5, %[r]\n\t"
142837 #endif
142838         "#  A[4] * B[14]\n\t"
142839         "mov	%[a], r9\n\t"
142840         "mov	%[b], r10\n\t"
142841         "ldr	%[a], [%[a], #16]\n\t"
142842         "ldr	%[b], [%[b], #56]\n\t"
142843         "uxth	r6, %[a]\n\t"
142844         "uxth	r7, %[b]\n\t"
142845 #ifdef WOLFSSL_KEIL
142846         "muls	r7, r6, r7\n\t"
142847 #elif defined(__clang__)
142848         "muls	r7, r6\n\t"
142849 #else
142850         "mul	r7, r6\n\t"
142851 #endif
142852 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142853         "adds	r3, r3, r7\n\t"
142854 #else
142855         "add	r3, r3, r7\n\t"
142856 #endif
142857 #ifdef WOLFSSL_KEIL
142858         "adcs	r4, r4, %[r]\n\t"
142859 #elif defined(__clang__)
142860         "adcs	r4, %[r]\n\t"
142861 #else
142862         "adc	r4, %[r]\n\t"
142863 #endif
142864 #ifdef WOLFSSL_KEIL
142865         "adcs	r5, r5, %[r]\n\t"
142866 #elif defined(__clang__)
142867         "adcs	r5, %[r]\n\t"
142868 #else
142869         "adc	r5, %[r]\n\t"
142870 #endif
142871 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142872         "lsrs	r7, %[b], #16\n\t"
142873 #else
142874         "lsr	r7, %[b], #16\n\t"
142875 #endif
142876 #ifdef WOLFSSL_KEIL
142877         "muls	r6, r7, r6\n\t"
142878 #elif defined(__clang__)
142879         "muls	r6, r7\n\t"
142880 #else
142881         "mul	r6, r7\n\t"
142882 #endif
142883 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142884         "lsrs	r7, r6, #16\n\t"
142885 #else
142886         "lsr	r7, r6, #16\n\t"
142887 #endif
142888 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142889         "lsls	r6, r6, #16\n\t"
142890 #else
142891         "lsl	r6, r6, #16\n\t"
142892 #endif
142893 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142894         "adds	r3, r3, r6\n\t"
142895 #else
142896         "add	r3, r3, r6\n\t"
142897 #endif
142898 #ifdef WOLFSSL_KEIL
142899         "adcs	r4, r4, r7\n\t"
142900 #elif defined(__clang__)
142901         "adcs	r4, r7\n\t"
142902 #else
142903         "adc	r4, r7\n\t"
142904 #endif
142905 #ifdef WOLFSSL_KEIL
142906         "adcs	r5, r5, %[r]\n\t"
142907 #elif defined(__clang__)
142908         "adcs	r5, %[r]\n\t"
142909 #else
142910         "adc	r5, %[r]\n\t"
142911 #endif
142912 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142913         "lsrs	r6, %[a], #16\n\t"
142914 #else
142915         "lsr	r6, %[a], #16\n\t"
142916 #endif
142917 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142918         "lsrs	r7, %[b], #16\n\t"
142919 #else
142920         "lsr	r7, %[b], #16\n\t"
142921 #endif
142922 #ifdef WOLFSSL_KEIL
142923         "muls	r7, r6, r7\n\t"
142924 #elif defined(__clang__)
142925         "muls	r7, r6\n\t"
142926 #else
142927         "mul	r7, r6\n\t"
142928 #endif
142929 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142930         "adds	r4, r4, r7\n\t"
142931 #else
142932         "add	r4, r4, r7\n\t"
142933 #endif
142934 #ifdef WOLFSSL_KEIL
142935         "adcs	r5, r5, %[r]\n\t"
142936 #elif defined(__clang__)
142937         "adcs	r5, %[r]\n\t"
142938 #else
142939         "adc	r5, %[r]\n\t"
142940 #endif
142941         "uxth	r7, %[b]\n\t"
142942 #ifdef WOLFSSL_KEIL
142943         "muls	r6, r7, r6\n\t"
142944 #elif defined(__clang__)
142945         "muls	r6, r7\n\t"
142946 #else
142947         "mul	r6, r7\n\t"
142948 #endif
142949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142950         "lsrs	r7, r6, #16\n\t"
142951 #else
142952         "lsr	r7, r6, #16\n\t"
142953 #endif
142954 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142955         "lsls	r6, r6, #16\n\t"
142956 #else
142957         "lsl	r6, r6, #16\n\t"
142958 #endif
142959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142960         "adds	r3, r3, r6\n\t"
142961 #else
142962         "add	r3, r3, r6\n\t"
142963 #endif
142964 #ifdef WOLFSSL_KEIL
142965         "adcs	r4, r4, r7\n\t"
142966 #elif defined(__clang__)
142967         "adcs	r4, r7\n\t"
142968 #else
142969         "adc	r4, r7\n\t"
142970 #endif
142971 #ifdef WOLFSSL_KEIL
142972         "adcs	r5, r5, %[r]\n\t"
142973 #elif defined(__clang__)
142974         "adcs	r5, %[r]\n\t"
142975 #else
142976         "adc	r5, %[r]\n\t"
142977 #endif
142978         "#  A[3] * B[15]\n\t"
142979         "mov	%[a], r9\n\t"
142980         "mov	%[b], r10\n\t"
142981         "ldr	%[a], [%[a], #12]\n\t"
142982         "ldr	%[b], [%[b], #60]\n\t"
142983         "uxth	r6, %[a]\n\t"
142984         "uxth	r7, %[b]\n\t"
142985 #ifdef WOLFSSL_KEIL
142986         "muls	r7, r6, r7\n\t"
142987 #elif defined(__clang__)
142988         "muls	r7, r6\n\t"
142989 #else
142990         "mul	r7, r6\n\t"
142991 #endif
142992 #if defined(__clang__) || defined(WOLFSSL_KEIL)
142993         "adds	r3, r3, r7\n\t"
142994 #else
142995         "add	r3, r3, r7\n\t"
142996 #endif
142997 #ifdef WOLFSSL_KEIL
142998         "adcs	r4, r4, %[r]\n\t"
142999 #elif defined(__clang__)
143000         "adcs	r4, %[r]\n\t"
143001 #else
143002         "adc	r4, %[r]\n\t"
143003 #endif
143004 #ifdef WOLFSSL_KEIL
143005         "adcs	r5, r5, %[r]\n\t"
143006 #elif defined(__clang__)
143007         "adcs	r5, %[r]\n\t"
143008 #else
143009         "adc	r5, %[r]\n\t"
143010 #endif
143011 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143012         "lsrs	r7, %[b], #16\n\t"
143013 #else
143014         "lsr	r7, %[b], #16\n\t"
143015 #endif
143016 #ifdef WOLFSSL_KEIL
143017         "muls	r6, r7, r6\n\t"
143018 #elif defined(__clang__)
143019         "muls	r6, r7\n\t"
143020 #else
143021         "mul	r6, r7\n\t"
143022 #endif
143023 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143024         "lsrs	r7, r6, #16\n\t"
143025 #else
143026         "lsr	r7, r6, #16\n\t"
143027 #endif
143028 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143029         "lsls	r6, r6, #16\n\t"
143030 #else
143031         "lsl	r6, r6, #16\n\t"
143032 #endif
143033 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143034         "adds	r3, r3, r6\n\t"
143035 #else
143036         "add	r3, r3, r6\n\t"
143037 #endif
143038 #ifdef WOLFSSL_KEIL
143039         "adcs	r4, r4, r7\n\t"
143040 #elif defined(__clang__)
143041         "adcs	r4, r7\n\t"
143042 #else
143043         "adc	r4, r7\n\t"
143044 #endif
143045 #ifdef WOLFSSL_KEIL
143046         "adcs	r5, r5, %[r]\n\t"
143047 #elif defined(__clang__)
143048         "adcs	r5, %[r]\n\t"
143049 #else
143050         "adc	r5, %[r]\n\t"
143051 #endif
143052 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143053         "lsrs	r6, %[a], #16\n\t"
143054 #else
143055         "lsr	r6, %[a], #16\n\t"
143056 #endif
143057 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143058         "lsrs	r7, %[b], #16\n\t"
143059 #else
143060         "lsr	r7, %[b], #16\n\t"
143061 #endif
143062 #ifdef WOLFSSL_KEIL
143063         "muls	r7, r6, r7\n\t"
143064 #elif defined(__clang__)
143065         "muls	r7, r6\n\t"
143066 #else
143067         "mul	r7, r6\n\t"
143068 #endif
143069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143070         "adds	r4, r4, r7\n\t"
143071 #else
143072         "add	r4, r4, r7\n\t"
143073 #endif
143074 #ifdef WOLFSSL_KEIL
143075         "adcs	r5, r5, %[r]\n\t"
143076 #elif defined(__clang__)
143077         "adcs	r5, %[r]\n\t"
143078 #else
143079         "adc	r5, %[r]\n\t"
143080 #endif
143081         "uxth	r7, %[b]\n\t"
143082 #ifdef WOLFSSL_KEIL
143083         "muls	r6, r7, r6\n\t"
143084 #elif defined(__clang__)
143085         "muls	r6, r7\n\t"
143086 #else
143087         "mul	r6, r7\n\t"
143088 #endif
143089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143090         "lsrs	r7, r6, #16\n\t"
143091 #else
143092         "lsr	r7, r6, #16\n\t"
143093 #endif
143094 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143095         "lsls	r6, r6, #16\n\t"
143096 #else
143097         "lsl	r6, r6, #16\n\t"
143098 #endif
143099 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143100         "adds	r3, r3, r6\n\t"
143101 #else
143102         "add	r3, r3, r6\n\t"
143103 #endif
143104 #ifdef WOLFSSL_KEIL
143105         "adcs	r4, r4, r7\n\t"
143106 #elif defined(__clang__)
143107         "adcs	r4, r7\n\t"
143108 #else
143109         "adc	r4, r7\n\t"
143110 #endif
143111 #ifdef WOLFSSL_KEIL
143112         "adcs	r5, r5, %[r]\n\t"
143113 #elif defined(__clang__)
143114         "adcs	r5, %[r]\n\t"
143115 #else
143116         "adc	r5, %[r]\n\t"
143117 #endif
143118         "mov	%[r], r8\n\t"
143119         "str	r3, [%[r], #72]\n\t"
143120         "movs	%[r], #0\n\t"
143121         "#  A[4] * B[15]\n\t"
143122         "movs	r3, #0\n\t"
143123         "mov	%[a], r9\n\t"
143124         "mov	%[b], r10\n\t"
143125         "ldr	%[a], [%[a], #16]\n\t"
143126         "ldr	%[b], [%[b], #60]\n\t"
143127         "uxth	r6, %[a]\n\t"
143128         "uxth	r7, %[b]\n\t"
143129 #ifdef WOLFSSL_KEIL
143130         "muls	r7, r6, r7\n\t"
143131 #elif defined(__clang__)
143132         "muls	r7, r6\n\t"
143133 #else
143134         "mul	r7, r6\n\t"
143135 #endif
143136 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143137         "adds	r4, r4, r7\n\t"
143138 #else
143139         "add	r4, r4, r7\n\t"
143140 #endif
143141 #ifdef WOLFSSL_KEIL
143142         "adcs	r5, r5, %[r]\n\t"
143143 #elif defined(__clang__)
143144         "adcs	r5, %[r]\n\t"
143145 #else
143146         "adc	r5, %[r]\n\t"
143147 #endif
143148 #ifdef WOLFSSL_KEIL
143149         "adcs	r3, r3, %[r]\n\t"
143150 #elif defined(__clang__)
143151         "adcs	r3, %[r]\n\t"
143152 #else
143153         "adc	r3, %[r]\n\t"
143154 #endif
143155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143156         "lsrs	r7, %[b], #16\n\t"
143157 #else
143158         "lsr	r7, %[b], #16\n\t"
143159 #endif
143160 #ifdef WOLFSSL_KEIL
143161         "muls	r6, r7, r6\n\t"
143162 #elif defined(__clang__)
143163         "muls	r6, r7\n\t"
143164 #else
143165         "mul	r6, r7\n\t"
143166 #endif
143167 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143168         "lsrs	r7, r6, #16\n\t"
143169 #else
143170         "lsr	r7, r6, #16\n\t"
143171 #endif
143172 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143173         "lsls	r6, r6, #16\n\t"
143174 #else
143175         "lsl	r6, r6, #16\n\t"
143176 #endif
143177 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143178         "adds	r4, r4, r6\n\t"
143179 #else
143180         "add	r4, r4, r6\n\t"
143181 #endif
143182 #ifdef WOLFSSL_KEIL
143183         "adcs	r5, r5, r7\n\t"
143184 #elif defined(__clang__)
143185         "adcs	r5, r7\n\t"
143186 #else
143187         "adc	r5, r7\n\t"
143188 #endif
143189 #ifdef WOLFSSL_KEIL
143190         "adcs	r3, r3, %[r]\n\t"
143191 #elif defined(__clang__)
143192         "adcs	r3, %[r]\n\t"
143193 #else
143194         "adc	r3, %[r]\n\t"
143195 #endif
143196 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143197         "lsrs	r6, %[a], #16\n\t"
143198 #else
143199         "lsr	r6, %[a], #16\n\t"
143200 #endif
143201 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143202         "lsrs	r7, %[b], #16\n\t"
143203 #else
143204         "lsr	r7, %[b], #16\n\t"
143205 #endif
143206 #ifdef WOLFSSL_KEIL
143207         "muls	r7, r6, r7\n\t"
143208 #elif defined(__clang__)
143209         "muls	r7, r6\n\t"
143210 #else
143211         "mul	r7, r6\n\t"
143212 #endif
143213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143214         "adds	r5, r5, r7\n\t"
143215 #else
143216         "add	r5, r5, r7\n\t"
143217 #endif
143218 #ifdef WOLFSSL_KEIL
143219         "adcs	r3, r3, %[r]\n\t"
143220 #elif defined(__clang__)
143221         "adcs	r3, %[r]\n\t"
143222 #else
143223         "adc	r3, %[r]\n\t"
143224 #endif
143225         "uxth	r7, %[b]\n\t"
143226 #ifdef WOLFSSL_KEIL
143227         "muls	r6, r7, r6\n\t"
143228 #elif defined(__clang__)
143229         "muls	r6, r7\n\t"
143230 #else
143231         "mul	r6, r7\n\t"
143232 #endif
143233 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143234         "lsrs	r7, r6, #16\n\t"
143235 #else
143236         "lsr	r7, r6, #16\n\t"
143237 #endif
143238 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143239         "lsls	r6, r6, #16\n\t"
143240 #else
143241         "lsl	r6, r6, #16\n\t"
143242 #endif
143243 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143244         "adds	r4, r4, r6\n\t"
143245 #else
143246         "add	r4, r4, r6\n\t"
143247 #endif
143248 #ifdef WOLFSSL_KEIL
143249         "adcs	r5, r5, r7\n\t"
143250 #elif defined(__clang__)
143251         "adcs	r5, r7\n\t"
143252 #else
143253         "adc	r5, r7\n\t"
143254 #endif
143255 #ifdef WOLFSSL_KEIL
143256         "adcs	r3, r3, %[r]\n\t"
143257 #elif defined(__clang__)
143258         "adcs	r3, %[r]\n\t"
143259 #else
143260         "adc	r3, %[r]\n\t"
143261 #endif
143262         "#  A[5] * B[14]\n\t"
143263         "mov	%[a], r9\n\t"
143264         "mov	%[b], r10\n\t"
143265         "ldr	%[a], [%[a], #20]\n\t"
143266         "ldr	%[b], [%[b], #56]\n\t"
143267         "uxth	r6, %[a]\n\t"
143268         "uxth	r7, %[b]\n\t"
143269 #ifdef WOLFSSL_KEIL
143270         "muls	r7, r6, r7\n\t"
143271 #elif defined(__clang__)
143272         "muls	r7, r6\n\t"
143273 #else
143274         "mul	r7, r6\n\t"
143275 #endif
143276 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143277         "adds	r4, r4, r7\n\t"
143278 #else
143279         "add	r4, r4, r7\n\t"
143280 #endif
143281 #ifdef WOLFSSL_KEIL
143282         "adcs	r5, r5, %[r]\n\t"
143283 #elif defined(__clang__)
143284         "adcs	r5, %[r]\n\t"
143285 #else
143286         "adc	r5, %[r]\n\t"
143287 #endif
143288 #ifdef WOLFSSL_KEIL
143289         "adcs	r3, r3, %[r]\n\t"
143290 #elif defined(__clang__)
143291         "adcs	r3, %[r]\n\t"
143292 #else
143293         "adc	r3, %[r]\n\t"
143294 #endif
143295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143296         "lsrs	r7, %[b], #16\n\t"
143297 #else
143298         "lsr	r7, %[b], #16\n\t"
143299 #endif
143300 #ifdef WOLFSSL_KEIL
143301         "muls	r6, r7, r6\n\t"
143302 #elif defined(__clang__)
143303         "muls	r6, r7\n\t"
143304 #else
143305         "mul	r6, r7\n\t"
143306 #endif
143307 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143308         "lsrs	r7, r6, #16\n\t"
143309 #else
143310         "lsr	r7, r6, #16\n\t"
143311 #endif
143312 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143313         "lsls	r6, r6, #16\n\t"
143314 #else
143315         "lsl	r6, r6, #16\n\t"
143316 #endif
143317 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143318         "adds	r4, r4, r6\n\t"
143319 #else
143320         "add	r4, r4, r6\n\t"
143321 #endif
143322 #ifdef WOLFSSL_KEIL
143323         "adcs	r5, r5, r7\n\t"
143324 #elif defined(__clang__)
143325         "adcs	r5, r7\n\t"
143326 #else
143327         "adc	r5, r7\n\t"
143328 #endif
143329 #ifdef WOLFSSL_KEIL
143330         "adcs	r3, r3, %[r]\n\t"
143331 #elif defined(__clang__)
143332         "adcs	r3, %[r]\n\t"
143333 #else
143334         "adc	r3, %[r]\n\t"
143335 #endif
143336 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143337         "lsrs	r6, %[a], #16\n\t"
143338 #else
143339         "lsr	r6, %[a], #16\n\t"
143340 #endif
143341 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143342         "lsrs	r7, %[b], #16\n\t"
143343 #else
143344         "lsr	r7, %[b], #16\n\t"
143345 #endif
143346 #ifdef WOLFSSL_KEIL
143347         "muls	r7, r6, r7\n\t"
143348 #elif defined(__clang__)
143349         "muls	r7, r6\n\t"
143350 #else
143351         "mul	r7, r6\n\t"
143352 #endif
143353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143354         "adds	r5, r5, r7\n\t"
143355 #else
143356         "add	r5, r5, r7\n\t"
143357 #endif
143358 #ifdef WOLFSSL_KEIL
143359         "adcs	r3, r3, %[r]\n\t"
143360 #elif defined(__clang__)
143361         "adcs	r3, %[r]\n\t"
143362 #else
143363         "adc	r3, %[r]\n\t"
143364 #endif
143365         "uxth	r7, %[b]\n\t"
143366 #ifdef WOLFSSL_KEIL
143367         "muls	r6, r7, r6\n\t"
143368 #elif defined(__clang__)
143369         "muls	r6, r7\n\t"
143370 #else
143371         "mul	r6, r7\n\t"
143372 #endif
143373 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143374         "lsrs	r7, r6, #16\n\t"
143375 #else
143376         "lsr	r7, r6, #16\n\t"
143377 #endif
143378 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143379         "lsls	r6, r6, #16\n\t"
143380 #else
143381         "lsl	r6, r6, #16\n\t"
143382 #endif
143383 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143384         "adds	r4, r4, r6\n\t"
143385 #else
143386         "add	r4, r4, r6\n\t"
143387 #endif
143388 #ifdef WOLFSSL_KEIL
143389         "adcs	r5, r5, r7\n\t"
143390 #elif defined(__clang__)
143391         "adcs	r5, r7\n\t"
143392 #else
143393         "adc	r5, r7\n\t"
143394 #endif
143395 #ifdef WOLFSSL_KEIL
143396         "adcs	r3, r3, %[r]\n\t"
143397 #elif defined(__clang__)
143398         "adcs	r3, %[r]\n\t"
143399 #else
143400         "adc	r3, %[r]\n\t"
143401 #endif
143402         "#  A[6] * B[13]\n\t"
143403         "mov	%[a], r9\n\t"
143404         "mov	%[b], r10\n\t"
143405         "ldr	%[a], [%[a], #24]\n\t"
143406         "ldr	%[b], [%[b], #52]\n\t"
143407         "uxth	r6, %[a]\n\t"
143408         "uxth	r7, %[b]\n\t"
143409 #ifdef WOLFSSL_KEIL
143410         "muls	r7, r6, r7\n\t"
143411 #elif defined(__clang__)
143412         "muls	r7, r6\n\t"
143413 #else
143414         "mul	r7, r6\n\t"
143415 #endif
143416 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143417         "adds	r4, r4, r7\n\t"
143418 #else
143419         "add	r4, r4, r7\n\t"
143420 #endif
143421 #ifdef WOLFSSL_KEIL
143422         "adcs	r5, r5, %[r]\n\t"
143423 #elif defined(__clang__)
143424         "adcs	r5, %[r]\n\t"
143425 #else
143426         "adc	r5, %[r]\n\t"
143427 #endif
143428 #ifdef WOLFSSL_KEIL
143429         "adcs	r3, r3, %[r]\n\t"
143430 #elif defined(__clang__)
143431         "adcs	r3, %[r]\n\t"
143432 #else
143433         "adc	r3, %[r]\n\t"
143434 #endif
143435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143436         "lsrs	r7, %[b], #16\n\t"
143437 #else
143438         "lsr	r7, %[b], #16\n\t"
143439 #endif
143440 #ifdef WOLFSSL_KEIL
143441         "muls	r6, r7, r6\n\t"
143442 #elif defined(__clang__)
143443         "muls	r6, r7\n\t"
143444 #else
143445         "mul	r6, r7\n\t"
143446 #endif
143447 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143448         "lsrs	r7, r6, #16\n\t"
143449 #else
143450         "lsr	r7, r6, #16\n\t"
143451 #endif
143452 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143453         "lsls	r6, r6, #16\n\t"
143454 #else
143455         "lsl	r6, r6, #16\n\t"
143456 #endif
143457 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143458         "adds	r4, r4, r6\n\t"
143459 #else
143460         "add	r4, r4, r6\n\t"
143461 #endif
143462 #ifdef WOLFSSL_KEIL
143463         "adcs	r5, r5, r7\n\t"
143464 #elif defined(__clang__)
143465         "adcs	r5, r7\n\t"
143466 #else
143467         "adc	r5, r7\n\t"
143468 #endif
143469 #ifdef WOLFSSL_KEIL
143470         "adcs	r3, r3, %[r]\n\t"
143471 #elif defined(__clang__)
143472         "adcs	r3, %[r]\n\t"
143473 #else
143474         "adc	r3, %[r]\n\t"
143475 #endif
143476 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143477         "lsrs	r6, %[a], #16\n\t"
143478 #else
143479         "lsr	r6, %[a], #16\n\t"
143480 #endif
143481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143482         "lsrs	r7, %[b], #16\n\t"
143483 #else
143484         "lsr	r7, %[b], #16\n\t"
143485 #endif
143486 #ifdef WOLFSSL_KEIL
143487         "muls	r7, r6, r7\n\t"
143488 #elif defined(__clang__)
143489         "muls	r7, r6\n\t"
143490 #else
143491         "mul	r7, r6\n\t"
143492 #endif
143493 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143494         "adds	r5, r5, r7\n\t"
143495 #else
143496         "add	r5, r5, r7\n\t"
143497 #endif
143498 #ifdef WOLFSSL_KEIL
143499         "adcs	r3, r3, %[r]\n\t"
143500 #elif defined(__clang__)
143501         "adcs	r3, %[r]\n\t"
143502 #else
143503         "adc	r3, %[r]\n\t"
143504 #endif
143505         "uxth	r7, %[b]\n\t"
143506 #ifdef WOLFSSL_KEIL
143507         "muls	r6, r7, r6\n\t"
143508 #elif defined(__clang__)
143509         "muls	r6, r7\n\t"
143510 #else
143511         "mul	r6, r7\n\t"
143512 #endif
143513 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143514         "lsrs	r7, r6, #16\n\t"
143515 #else
143516         "lsr	r7, r6, #16\n\t"
143517 #endif
143518 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143519         "lsls	r6, r6, #16\n\t"
143520 #else
143521         "lsl	r6, r6, #16\n\t"
143522 #endif
143523 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143524         "adds	r4, r4, r6\n\t"
143525 #else
143526         "add	r4, r4, r6\n\t"
143527 #endif
143528 #ifdef WOLFSSL_KEIL
143529         "adcs	r5, r5, r7\n\t"
143530 #elif defined(__clang__)
143531         "adcs	r5, r7\n\t"
143532 #else
143533         "adc	r5, r7\n\t"
143534 #endif
143535 #ifdef WOLFSSL_KEIL
143536         "adcs	r3, r3, %[r]\n\t"
143537 #elif defined(__clang__)
143538         "adcs	r3, %[r]\n\t"
143539 #else
143540         "adc	r3, %[r]\n\t"
143541 #endif
143542         "#  A[7] * B[12]\n\t"
143543         "mov	%[a], r9\n\t"
143544         "mov	%[b], r10\n\t"
143545         "ldr	%[a], [%[a], #28]\n\t"
143546         "ldr	%[b], [%[b], #48]\n\t"
143547         "uxth	r6, %[a]\n\t"
143548         "uxth	r7, %[b]\n\t"
143549 #ifdef WOLFSSL_KEIL
143550         "muls	r7, r6, r7\n\t"
143551 #elif defined(__clang__)
143552         "muls	r7, r6\n\t"
143553 #else
143554         "mul	r7, r6\n\t"
143555 #endif
143556 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143557         "adds	r4, r4, r7\n\t"
143558 #else
143559         "add	r4, r4, r7\n\t"
143560 #endif
143561 #ifdef WOLFSSL_KEIL
143562         "adcs	r5, r5, %[r]\n\t"
143563 #elif defined(__clang__)
143564         "adcs	r5, %[r]\n\t"
143565 #else
143566         "adc	r5, %[r]\n\t"
143567 #endif
143568 #ifdef WOLFSSL_KEIL
143569         "adcs	r3, r3, %[r]\n\t"
143570 #elif defined(__clang__)
143571         "adcs	r3, %[r]\n\t"
143572 #else
143573         "adc	r3, %[r]\n\t"
143574 #endif
143575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143576         "lsrs	r7, %[b], #16\n\t"
143577 #else
143578         "lsr	r7, %[b], #16\n\t"
143579 #endif
143580 #ifdef WOLFSSL_KEIL
143581         "muls	r6, r7, r6\n\t"
143582 #elif defined(__clang__)
143583         "muls	r6, r7\n\t"
143584 #else
143585         "mul	r6, r7\n\t"
143586 #endif
143587 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143588         "lsrs	r7, r6, #16\n\t"
143589 #else
143590         "lsr	r7, r6, #16\n\t"
143591 #endif
143592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143593         "lsls	r6, r6, #16\n\t"
143594 #else
143595         "lsl	r6, r6, #16\n\t"
143596 #endif
143597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143598         "adds	r4, r4, r6\n\t"
143599 #else
143600         "add	r4, r4, r6\n\t"
143601 #endif
143602 #ifdef WOLFSSL_KEIL
143603         "adcs	r5, r5, r7\n\t"
143604 #elif defined(__clang__)
143605         "adcs	r5, r7\n\t"
143606 #else
143607         "adc	r5, r7\n\t"
143608 #endif
143609 #ifdef WOLFSSL_KEIL
143610         "adcs	r3, r3, %[r]\n\t"
143611 #elif defined(__clang__)
143612         "adcs	r3, %[r]\n\t"
143613 #else
143614         "adc	r3, %[r]\n\t"
143615 #endif
143616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143617         "lsrs	r6, %[a], #16\n\t"
143618 #else
143619         "lsr	r6, %[a], #16\n\t"
143620 #endif
143621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143622         "lsrs	r7, %[b], #16\n\t"
143623 #else
143624         "lsr	r7, %[b], #16\n\t"
143625 #endif
143626 #ifdef WOLFSSL_KEIL
143627         "muls	r7, r6, r7\n\t"
143628 #elif defined(__clang__)
143629         "muls	r7, r6\n\t"
143630 #else
143631         "mul	r7, r6\n\t"
143632 #endif
143633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143634         "adds	r5, r5, r7\n\t"
143635 #else
143636         "add	r5, r5, r7\n\t"
143637 #endif
143638 #ifdef WOLFSSL_KEIL
143639         "adcs	r3, r3, %[r]\n\t"
143640 #elif defined(__clang__)
143641         "adcs	r3, %[r]\n\t"
143642 #else
143643         "adc	r3, %[r]\n\t"
143644 #endif
143645         "uxth	r7, %[b]\n\t"
143646 #ifdef WOLFSSL_KEIL
143647         "muls	r6, r7, r6\n\t"
143648 #elif defined(__clang__)
143649         "muls	r6, r7\n\t"
143650 #else
143651         "mul	r6, r7\n\t"
143652 #endif
143653 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143654         "lsrs	r7, r6, #16\n\t"
143655 #else
143656         "lsr	r7, r6, #16\n\t"
143657 #endif
143658 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143659         "lsls	r6, r6, #16\n\t"
143660 #else
143661         "lsl	r6, r6, #16\n\t"
143662 #endif
143663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143664         "adds	r4, r4, r6\n\t"
143665 #else
143666         "add	r4, r4, r6\n\t"
143667 #endif
143668 #ifdef WOLFSSL_KEIL
143669         "adcs	r5, r5, r7\n\t"
143670 #elif defined(__clang__)
143671         "adcs	r5, r7\n\t"
143672 #else
143673         "adc	r5, r7\n\t"
143674 #endif
143675 #ifdef WOLFSSL_KEIL
143676         "adcs	r3, r3, %[r]\n\t"
143677 #elif defined(__clang__)
143678         "adcs	r3, %[r]\n\t"
143679 #else
143680         "adc	r3, %[r]\n\t"
143681 #endif
143682         "#  A[8] * B[11]\n\t"
143683         "mov	%[a], r9\n\t"
143684         "mov	%[b], r10\n\t"
143685         "ldr	%[a], [%[a], #32]\n\t"
143686         "ldr	%[b], [%[b], #44]\n\t"
143687         "uxth	r6, %[a]\n\t"
143688         "uxth	r7, %[b]\n\t"
143689 #ifdef WOLFSSL_KEIL
143690         "muls	r7, r6, r7\n\t"
143691 #elif defined(__clang__)
143692         "muls	r7, r6\n\t"
143693 #else
143694         "mul	r7, r6\n\t"
143695 #endif
143696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143697         "adds	r4, r4, r7\n\t"
143698 #else
143699         "add	r4, r4, r7\n\t"
143700 #endif
143701 #ifdef WOLFSSL_KEIL
143702         "adcs	r5, r5, %[r]\n\t"
143703 #elif defined(__clang__)
143704         "adcs	r5, %[r]\n\t"
143705 #else
143706         "adc	r5, %[r]\n\t"
143707 #endif
143708 #ifdef WOLFSSL_KEIL
143709         "adcs	r3, r3, %[r]\n\t"
143710 #elif defined(__clang__)
143711         "adcs	r3, %[r]\n\t"
143712 #else
143713         "adc	r3, %[r]\n\t"
143714 #endif
143715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143716         "lsrs	r7, %[b], #16\n\t"
143717 #else
143718         "lsr	r7, %[b], #16\n\t"
143719 #endif
143720 #ifdef WOLFSSL_KEIL
143721         "muls	r6, r7, r6\n\t"
143722 #elif defined(__clang__)
143723         "muls	r6, r7\n\t"
143724 #else
143725         "mul	r6, r7\n\t"
143726 #endif
143727 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143728         "lsrs	r7, r6, #16\n\t"
143729 #else
143730         "lsr	r7, r6, #16\n\t"
143731 #endif
143732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143733         "lsls	r6, r6, #16\n\t"
143734 #else
143735         "lsl	r6, r6, #16\n\t"
143736 #endif
143737 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143738         "adds	r4, r4, r6\n\t"
143739 #else
143740         "add	r4, r4, r6\n\t"
143741 #endif
143742 #ifdef WOLFSSL_KEIL
143743         "adcs	r5, r5, r7\n\t"
143744 #elif defined(__clang__)
143745         "adcs	r5, r7\n\t"
143746 #else
143747         "adc	r5, r7\n\t"
143748 #endif
143749 #ifdef WOLFSSL_KEIL
143750         "adcs	r3, r3, %[r]\n\t"
143751 #elif defined(__clang__)
143752         "adcs	r3, %[r]\n\t"
143753 #else
143754         "adc	r3, %[r]\n\t"
143755 #endif
143756 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143757         "lsrs	r6, %[a], #16\n\t"
143758 #else
143759         "lsr	r6, %[a], #16\n\t"
143760 #endif
143761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143762         "lsrs	r7, %[b], #16\n\t"
143763 #else
143764         "lsr	r7, %[b], #16\n\t"
143765 #endif
143766 #ifdef WOLFSSL_KEIL
143767         "muls	r7, r6, r7\n\t"
143768 #elif defined(__clang__)
143769         "muls	r7, r6\n\t"
143770 #else
143771         "mul	r7, r6\n\t"
143772 #endif
143773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143774         "adds	r5, r5, r7\n\t"
143775 #else
143776         "add	r5, r5, r7\n\t"
143777 #endif
143778 #ifdef WOLFSSL_KEIL
143779         "adcs	r3, r3, %[r]\n\t"
143780 #elif defined(__clang__)
143781         "adcs	r3, %[r]\n\t"
143782 #else
143783         "adc	r3, %[r]\n\t"
143784 #endif
143785         "uxth	r7, %[b]\n\t"
143786 #ifdef WOLFSSL_KEIL
143787         "muls	r6, r7, r6\n\t"
143788 #elif defined(__clang__)
143789         "muls	r6, r7\n\t"
143790 #else
143791         "mul	r6, r7\n\t"
143792 #endif
143793 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143794         "lsrs	r7, r6, #16\n\t"
143795 #else
143796         "lsr	r7, r6, #16\n\t"
143797 #endif
143798 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143799         "lsls	r6, r6, #16\n\t"
143800 #else
143801         "lsl	r6, r6, #16\n\t"
143802 #endif
143803 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143804         "adds	r4, r4, r6\n\t"
143805 #else
143806         "add	r4, r4, r6\n\t"
143807 #endif
143808 #ifdef WOLFSSL_KEIL
143809         "adcs	r5, r5, r7\n\t"
143810 #elif defined(__clang__)
143811         "adcs	r5, r7\n\t"
143812 #else
143813         "adc	r5, r7\n\t"
143814 #endif
143815 #ifdef WOLFSSL_KEIL
143816         "adcs	r3, r3, %[r]\n\t"
143817 #elif defined(__clang__)
143818         "adcs	r3, %[r]\n\t"
143819 #else
143820         "adc	r3, %[r]\n\t"
143821 #endif
143822         "#  A[9] * B[10]\n\t"
143823         "mov	%[a], r9\n\t"
143824         "mov	%[b], r10\n\t"
143825         "ldr	%[a], [%[a], #36]\n\t"
143826         "ldr	%[b], [%[b], #40]\n\t"
143827         "uxth	r6, %[a]\n\t"
143828         "uxth	r7, %[b]\n\t"
143829 #ifdef WOLFSSL_KEIL
143830         "muls	r7, r6, r7\n\t"
143831 #elif defined(__clang__)
143832         "muls	r7, r6\n\t"
143833 #else
143834         "mul	r7, r6\n\t"
143835 #endif
143836 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143837         "adds	r4, r4, r7\n\t"
143838 #else
143839         "add	r4, r4, r7\n\t"
143840 #endif
143841 #ifdef WOLFSSL_KEIL
143842         "adcs	r5, r5, %[r]\n\t"
143843 #elif defined(__clang__)
143844         "adcs	r5, %[r]\n\t"
143845 #else
143846         "adc	r5, %[r]\n\t"
143847 #endif
143848 #ifdef WOLFSSL_KEIL
143849         "adcs	r3, r3, %[r]\n\t"
143850 #elif defined(__clang__)
143851         "adcs	r3, %[r]\n\t"
143852 #else
143853         "adc	r3, %[r]\n\t"
143854 #endif
143855 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143856         "lsrs	r7, %[b], #16\n\t"
143857 #else
143858         "lsr	r7, %[b], #16\n\t"
143859 #endif
143860 #ifdef WOLFSSL_KEIL
143861         "muls	r6, r7, r6\n\t"
143862 #elif defined(__clang__)
143863         "muls	r6, r7\n\t"
143864 #else
143865         "mul	r6, r7\n\t"
143866 #endif
143867 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143868         "lsrs	r7, r6, #16\n\t"
143869 #else
143870         "lsr	r7, r6, #16\n\t"
143871 #endif
143872 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143873         "lsls	r6, r6, #16\n\t"
143874 #else
143875         "lsl	r6, r6, #16\n\t"
143876 #endif
143877 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143878         "adds	r4, r4, r6\n\t"
143879 #else
143880         "add	r4, r4, r6\n\t"
143881 #endif
143882 #ifdef WOLFSSL_KEIL
143883         "adcs	r5, r5, r7\n\t"
143884 #elif defined(__clang__)
143885         "adcs	r5, r7\n\t"
143886 #else
143887         "adc	r5, r7\n\t"
143888 #endif
143889 #ifdef WOLFSSL_KEIL
143890         "adcs	r3, r3, %[r]\n\t"
143891 #elif defined(__clang__)
143892         "adcs	r3, %[r]\n\t"
143893 #else
143894         "adc	r3, %[r]\n\t"
143895 #endif
143896 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143897         "lsrs	r6, %[a], #16\n\t"
143898 #else
143899         "lsr	r6, %[a], #16\n\t"
143900 #endif
143901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143902         "lsrs	r7, %[b], #16\n\t"
143903 #else
143904         "lsr	r7, %[b], #16\n\t"
143905 #endif
143906 #ifdef WOLFSSL_KEIL
143907         "muls	r7, r6, r7\n\t"
143908 #elif defined(__clang__)
143909         "muls	r7, r6\n\t"
143910 #else
143911         "mul	r7, r6\n\t"
143912 #endif
143913 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143914         "adds	r5, r5, r7\n\t"
143915 #else
143916         "add	r5, r5, r7\n\t"
143917 #endif
143918 #ifdef WOLFSSL_KEIL
143919         "adcs	r3, r3, %[r]\n\t"
143920 #elif defined(__clang__)
143921         "adcs	r3, %[r]\n\t"
143922 #else
143923         "adc	r3, %[r]\n\t"
143924 #endif
143925         "uxth	r7, %[b]\n\t"
143926 #ifdef WOLFSSL_KEIL
143927         "muls	r6, r7, r6\n\t"
143928 #elif defined(__clang__)
143929         "muls	r6, r7\n\t"
143930 #else
143931         "mul	r6, r7\n\t"
143932 #endif
143933 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143934         "lsrs	r7, r6, #16\n\t"
143935 #else
143936         "lsr	r7, r6, #16\n\t"
143937 #endif
143938 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143939         "lsls	r6, r6, #16\n\t"
143940 #else
143941         "lsl	r6, r6, #16\n\t"
143942 #endif
143943 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143944         "adds	r4, r4, r6\n\t"
143945 #else
143946         "add	r4, r4, r6\n\t"
143947 #endif
143948 #ifdef WOLFSSL_KEIL
143949         "adcs	r5, r5, r7\n\t"
143950 #elif defined(__clang__)
143951         "adcs	r5, r7\n\t"
143952 #else
143953         "adc	r5, r7\n\t"
143954 #endif
143955 #ifdef WOLFSSL_KEIL
143956         "adcs	r3, r3, %[r]\n\t"
143957 #elif defined(__clang__)
143958         "adcs	r3, %[r]\n\t"
143959 #else
143960         "adc	r3, %[r]\n\t"
143961 #endif
143962         "#  A[10] * B[9]\n\t"
143963         "mov	%[a], r9\n\t"
143964         "mov	%[b], r10\n\t"
143965         "ldr	%[a], [%[a], #40]\n\t"
143966         "ldr	%[b], [%[b], #36]\n\t"
143967         "uxth	r6, %[a]\n\t"
143968         "uxth	r7, %[b]\n\t"
143969 #ifdef WOLFSSL_KEIL
143970         "muls	r7, r6, r7\n\t"
143971 #elif defined(__clang__)
143972         "muls	r7, r6\n\t"
143973 #else
143974         "mul	r7, r6\n\t"
143975 #endif
143976 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143977         "adds	r4, r4, r7\n\t"
143978 #else
143979         "add	r4, r4, r7\n\t"
143980 #endif
143981 #ifdef WOLFSSL_KEIL
143982         "adcs	r5, r5, %[r]\n\t"
143983 #elif defined(__clang__)
143984         "adcs	r5, %[r]\n\t"
143985 #else
143986         "adc	r5, %[r]\n\t"
143987 #endif
143988 #ifdef WOLFSSL_KEIL
143989         "adcs	r3, r3, %[r]\n\t"
143990 #elif defined(__clang__)
143991         "adcs	r3, %[r]\n\t"
143992 #else
143993         "adc	r3, %[r]\n\t"
143994 #endif
143995 #if defined(__clang__) || defined(WOLFSSL_KEIL)
143996         "lsrs	r7, %[b], #16\n\t"
143997 #else
143998         "lsr	r7, %[b], #16\n\t"
143999 #endif
144000 #ifdef WOLFSSL_KEIL
144001         "muls	r6, r7, r6\n\t"
144002 #elif defined(__clang__)
144003         "muls	r6, r7\n\t"
144004 #else
144005         "mul	r6, r7\n\t"
144006 #endif
144007 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144008         "lsrs	r7, r6, #16\n\t"
144009 #else
144010         "lsr	r7, r6, #16\n\t"
144011 #endif
144012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144013         "lsls	r6, r6, #16\n\t"
144014 #else
144015         "lsl	r6, r6, #16\n\t"
144016 #endif
144017 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144018         "adds	r4, r4, r6\n\t"
144019 #else
144020         "add	r4, r4, r6\n\t"
144021 #endif
144022 #ifdef WOLFSSL_KEIL
144023         "adcs	r5, r5, r7\n\t"
144024 #elif defined(__clang__)
144025         "adcs	r5, r7\n\t"
144026 #else
144027         "adc	r5, r7\n\t"
144028 #endif
144029 #ifdef WOLFSSL_KEIL
144030         "adcs	r3, r3, %[r]\n\t"
144031 #elif defined(__clang__)
144032         "adcs	r3, %[r]\n\t"
144033 #else
144034         "adc	r3, %[r]\n\t"
144035 #endif
144036 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144037         "lsrs	r6, %[a], #16\n\t"
144038 #else
144039         "lsr	r6, %[a], #16\n\t"
144040 #endif
144041 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144042         "lsrs	r7, %[b], #16\n\t"
144043 #else
144044         "lsr	r7, %[b], #16\n\t"
144045 #endif
144046 #ifdef WOLFSSL_KEIL
144047         "muls	r7, r6, r7\n\t"
144048 #elif defined(__clang__)
144049         "muls	r7, r6\n\t"
144050 #else
144051         "mul	r7, r6\n\t"
144052 #endif
144053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144054         "adds	r5, r5, r7\n\t"
144055 #else
144056         "add	r5, r5, r7\n\t"
144057 #endif
144058 #ifdef WOLFSSL_KEIL
144059         "adcs	r3, r3, %[r]\n\t"
144060 #elif defined(__clang__)
144061         "adcs	r3, %[r]\n\t"
144062 #else
144063         "adc	r3, %[r]\n\t"
144064 #endif
144065         "uxth	r7, %[b]\n\t"
144066 #ifdef WOLFSSL_KEIL
144067         "muls	r6, r7, r6\n\t"
144068 #elif defined(__clang__)
144069         "muls	r6, r7\n\t"
144070 #else
144071         "mul	r6, r7\n\t"
144072 #endif
144073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144074         "lsrs	r7, r6, #16\n\t"
144075 #else
144076         "lsr	r7, r6, #16\n\t"
144077 #endif
144078 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144079         "lsls	r6, r6, #16\n\t"
144080 #else
144081         "lsl	r6, r6, #16\n\t"
144082 #endif
144083 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144084         "adds	r4, r4, r6\n\t"
144085 #else
144086         "add	r4, r4, r6\n\t"
144087 #endif
144088 #ifdef WOLFSSL_KEIL
144089         "adcs	r5, r5, r7\n\t"
144090 #elif defined(__clang__)
144091         "adcs	r5, r7\n\t"
144092 #else
144093         "adc	r5, r7\n\t"
144094 #endif
144095 #ifdef WOLFSSL_KEIL
144096         "adcs	r3, r3, %[r]\n\t"
144097 #elif defined(__clang__)
144098         "adcs	r3, %[r]\n\t"
144099 #else
144100         "adc	r3, %[r]\n\t"
144101 #endif
144102         "#  A[11] * B[8]\n\t"
144103         "mov	%[a], r9\n\t"
144104         "mov	%[b], r10\n\t"
144105         "ldr	%[a], [%[a], #44]\n\t"
144106         "ldr	%[b], [%[b], #32]\n\t"
144107         "uxth	r6, %[a]\n\t"
144108         "uxth	r7, %[b]\n\t"
144109 #ifdef WOLFSSL_KEIL
144110         "muls	r7, r6, r7\n\t"
144111 #elif defined(__clang__)
144112         "muls	r7, r6\n\t"
144113 #else
144114         "mul	r7, r6\n\t"
144115 #endif
144116 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144117         "adds	r4, r4, r7\n\t"
144118 #else
144119         "add	r4, r4, r7\n\t"
144120 #endif
144121 #ifdef WOLFSSL_KEIL
144122         "adcs	r5, r5, %[r]\n\t"
144123 #elif defined(__clang__)
144124         "adcs	r5, %[r]\n\t"
144125 #else
144126         "adc	r5, %[r]\n\t"
144127 #endif
144128 #ifdef WOLFSSL_KEIL
144129         "adcs	r3, r3, %[r]\n\t"
144130 #elif defined(__clang__)
144131         "adcs	r3, %[r]\n\t"
144132 #else
144133         "adc	r3, %[r]\n\t"
144134 #endif
144135 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144136         "lsrs	r7, %[b], #16\n\t"
144137 #else
144138         "lsr	r7, %[b], #16\n\t"
144139 #endif
144140 #ifdef WOLFSSL_KEIL
144141         "muls	r6, r7, r6\n\t"
144142 #elif defined(__clang__)
144143         "muls	r6, r7\n\t"
144144 #else
144145         "mul	r6, r7\n\t"
144146 #endif
144147 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144148         "lsrs	r7, r6, #16\n\t"
144149 #else
144150         "lsr	r7, r6, #16\n\t"
144151 #endif
144152 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144153         "lsls	r6, r6, #16\n\t"
144154 #else
144155         "lsl	r6, r6, #16\n\t"
144156 #endif
144157 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144158         "adds	r4, r4, r6\n\t"
144159 #else
144160         "add	r4, r4, r6\n\t"
144161 #endif
144162 #ifdef WOLFSSL_KEIL
144163         "adcs	r5, r5, r7\n\t"
144164 #elif defined(__clang__)
144165         "adcs	r5, r7\n\t"
144166 #else
144167         "adc	r5, r7\n\t"
144168 #endif
144169 #ifdef WOLFSSL_KEIL
144170         "adcs	r3, r3, %[r]\n\t"
144171 #elif defined(__clang__)
144172         "adcs	r3, %[r]\n\t"
144173 #else
144174         "adc	r3, %[r]\n\t"
144175 #endif
144176 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144177         "lsrs	r6, %[a], #16\n\t"
144178 #else
144179         "lsr	r6, %[a], #16\n\t"
144180 #endif
144181 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144182         "lsrs	r7, %[b], #16\n\t"
144183 #else
144184         "lsr	r7, %[b], #16\n\t"
144185 #endif
144186 #ifdef WOLFSSL_KEIL
144187         "muls	r7, r6, r7\n\t"
144188 #elif defined(__clang__)
144189         "muls	r7, r6\n\t"
144190 #else
144191         "mul	r7, r6\n\t"
144192 #endif
144193 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144194         "adds	r5, r5, r7\n\t"
144195 #else
144196         "add	r5, r5, r7\n\t"
144197 #endif
144198 #ifdef WOLFSSL_KEIL
144199         "adcs	r3, r3, %[r]\n\t"
144200 #elif defined(__clang__)
144201         "adcs	r3, %[r]\n\t"
144202 #else
144203         "adc	r3, %[r]\n\t"
144204 #endif
144205         "uxth	r7, %[b]\n\t"
144206 #ifdef WOLFSSL_KEIL
144207         "muls	r6, r7, r6\n\t"
144208 #elif defined(__clang__)
144209         "muls	r6, r7\n\t"
144210 #else
144211         "mul	r6, r7\n\t"
144212 #endif
144213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144214         "lsrs	r7, r6, #16\n\t"
144215 #else
144216         "lsr	r7, r6, #16\n\t"
144217 #endif
144218 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144219         "lsls	r6, r6, #16\n\t"
144220 #else
144221         "lsl	r6, r6, #16\n\t"
144222 #endif
144223 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144224         "adds	r4, r4, r6\n\t"
144225 #else
144226         "add	r4, r4, r6\n\t"
144227 #endif
144228 #ifdef WOLFSSL_KEIL
144229         "adcs	r5, r5, r7\n\t"
144230 #elif defined(__clang__)
144231         "adcs	r5, r7\n\t"
144232 #else
144233         "adc	r5, r7\n\t"
144234 #endif
144235 #ifdef WOLFSSL_KEIL
144236         "adcs	r3, r3, %[r]\n\t"
144237 #elif defined(__clang__)
144238         "adcs	r3, %[r]\n\t"
144239 #else
144240         "adc	r3, %[r]\n\t"
144241 #endif
144242         "#  A[12] * B[7]\n\t"
144243         "mov	%[a], r9\n\t"
144244         "mov	%[b], r10\n\t"
144245         "ldr	%[a], [%[a], #48]\n\t"
144246         "ldr	%[b], [%[b], #28]\n\t"
144247         "uxth	r6, %[a]\n\t"
144248         "uxth	r7, %[b]\n\t"
144249 #ifdef WOLFSSL_KEIL
144250         "muls	r7, r6, r7\n\t"
144251 #elif defined(__clang__)
144252         "muls	r7, r6\n\t"
144253 #else
144254         "mul	r7, r6\n\t"
144255 #endif
144256 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144257         "adds	r4, r4, r7\n\t"
144258 #else
144259         "add	r4, r4, r7\n\t"
144260 #endif
144261 #ifdef WOLFSSL_KEIL
144262         "adcs	r5, r5, %[r]\n\t"
144263 #elif defined(__clang__)
144264         "adcs	r5, %[r]\n\t"
144265 #else
144266         "adc	r5, %[r]\n\t"
144267 #endif
144268 #ifdef WOLFSSL_KEIL
144269         "adcs	r3, r3, %[r]\n\t"
144270 #elif defined(__clang__)
144271         "adcs	r3, %[r]\n\t"
144272 #else
144273         "adc	r3, %[r]\n\t"
144274 #endif
144275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144276         "lsrs	r7, %[b], #16\n\t"
144277 #else
144278         "lsr	r7, %[b], #16\n\t"
144279 #endif
144280 #ifdef WOLFSSL_KEIL
144281         "muls	r6, r7, r6\n\t"
144282 #elif defined(__clang__)
144283         "muls	r6, r7\n\t"
144284 #else
144285         "mul	r6, r7\n\t"
144286 #endif
144287 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144288         "lsrs	r7, r6, #16\n\t"
144289 #else
144290         "lsr	r7, r6, #16\n\t"
144291 #endif
144292 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144293         "lsls	r6, r6, #16\n\t"
144294 #else
144295         "lsl	r6, r6, #16\n\t"
144296 #endif
144297 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144298         "adds	r4, r4, r6\n\t"
144299 #else
144300         "add	r4, r4, r6\n\t"
144301 #endif
144302 #ifdef WOLFSSL_KEIL
144303         "adcs	r5, r5, r7\n\t"
144304 #elif defined(__clang__)
144305         "adcs	r5, r7\n\t"
144306 #else
144307         "adc	r5, r7\n\t"
144308 #endif
144309 #ifdef WOLFSSL_KEIL
144310         "adcs	r3, r3, %[r]\n\t"
144311 #elif defined(__clang__)
144312         "adcs	r3, %[r]\n\t"
144313 #else
144314         "adc	r3, %[r]\n\t"
144315 #endif
144316 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144317         "lsrs	r6, %[a], #16\n\t"
144318 #else
144319         "lsr	r6, %[a], #16\n\t"
144320 #endif
144321 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144322         "lsrs	r7, %[b], #16\n\t"
144323 #else
144324         "lsr	r7, %[b], #16\n\t"
144325 #endif
144326 #ifdef WOLFSSL_KEIL
144327         "muls	r7, r6, r7\n\t"
144328 #elif defined(__clang__)
144329         "muls	r7, r6\n\t"
144330 #else
144331         "mul	r7, r6\n\t"
144332 #endif
144333 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144334         "adds	r5, r5, r7\n\t"
144335 #else
144336         "add	r5, r5, r7\n\t"
144337 #endif
144338 #ifdef WOLFSSL_KEIL
144339         "adcs	r3, r3, %[r]\n\t"
144340 #elif defined(__clang__)
144341         "adcs	r3, %[r]\n\t"
144342 #else
144343         "adc	r3, %[r]\n\t"
144344 #endif
144345         "uxth	r7, %[b]\n\t"
144346 #ifdef WOLFSSL_KEIL
144347         "muls	r6, r7, r6\n\t"
144348 #elif defined(__clang__)
144349         "muls	r6, r7\n\t"
144350 #else
144351         "mul	r6, r7\n\t"
144352 #endif
144353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144354         "lsrs	r7, r6, #16\n\t"
144355 #else
144356         "lsr	r7, r6, #16\n\t"
144357 #endif
144358 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144359         "lsls	r6, r6, #16\n\t"
144360 #else
144361         "lsl	r6, r6, #16\n\t"
144362 #endif
144363 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144364         "adds	r4, r4, r6\n\t"
144365 #else
144366         "add	r4, r4, r6\n\t"
144367 #endif
144368 #ifdef WOLFSSL_KEIL
144369         "adcs	r5, r5, r7\n\t"
144370 #elif defined(__clang__)
144371         "adcs	r5, r7\n\t"
144372 #else
144373         "adc	r5, r7\n\t"
144374 #endif
144375 #ifdef WOLFSSL_KEIL
144376         "adcs	r3, r3, %[r]\n\t"
144377 #elif defined(__clang__)
144378         "adcs	r3, %[r]\n\t"
144379 #else
144380         "adc	r3, %[r]\n\t"
144381 #endif
144382         "#  A[13] * B[6]\n\t"
144383         "mov	%[a], r9\n\t"
144384         "mov	%[b], r10\n\t"
144385         "ldr	%[a], [%[a], #52]\n\t"
144386         "ldr	%[b], [%[b], #24]\n\t"
144387         "uxth	r6, %[a]\n\t"
144388         "uxth	r7, %[b]\n\t"
144389 #ifdef WOLFSSL_KEIL
144390         "muls	r7, r6, r7\n\t"
144391 #elif defined(__clang__)
144392         "muls	r7, r6\n\t"
144393 #else
144394         "mul	r7, r6\n\t"
144395 #endif
144396 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144397         "adds	r4, r4, r7\n\t"
144398 #else
144399         "add	r4, r4, r7\n\t"
144400 #endif
144401 #ifdef WOLFSSL_KEIL
144402         "adcs	r5, r5, %[r]\n\t"
144403 #elif defined(__clang__)
144404         "adcs	r5, %[r]\n\t"
144405 #else
144406         "adc	r5, %[r]\n\t"
144407 #endif
144408 #ifdef WOLFSSL_KEIL
144409         "adcs	r3, r3, %[r]\n\t"
144410 #elif defined(__clang__)
144411         "adcs	r3, %[r]\n\t"
144412 #else
144413         "adc	r3, %[r]\n\t"
144414 #endif
144415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144416         "lsrs	r7, %[b], #16\n\t"
144417 #else
144418         "lsr	r7, %[b], #16\n\t"
144419 #endif
144420 #ifdef WOLFSSL_KEIL
144421         "muls	r6, r7, r6\n\t"
144422 #elif defined(__clang__)
144423         "muls	r6, r7\n\t"
144424 #else
144425         "mul	r6, r7\n\t"
144426 #endif
144427 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144428         "lsrs	r7, r6, #16\n\t"
144429 #else
144430         "lsr	r7, r6, #16\n\t"
144431 #endif
144432 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144433         "lsls	r6, r6, #16\n\t"
144434 #else
144435         "lsl	r6, r6, #16\n\t"
144436 #endif
144437 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144438         "adds	r4, r4, r6\n\t"
144439 #else
144440         "add	r4, r4, r6\n\t"
144441 #endif
144442 #ifdef WOLFSSL_KEIL
144443         "adcs	r5, r5, r7\n\t"
144444 #elif defined(__clang__)
144445         "adcs	r5, r7\n\t"
144446 #else
144447         "adc	r5, r7\n\t"
144448 #endif
144449 #ifdef WOLFSSL_KEIL
144450         "adcs	r3, r3, %[r]\n\t"
144451 #elif defined(__clang__)
144452         "adcs	r3, %[r]\n\t"
144453 #else
144454         "adc	r3, %[r]\n\t"
144455 #endif
144456 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144457         "lsrs	r6, %[a], #16\n\t"
144458 #else
144459         "lsr	r6, %[a], #16\n\t"
144460 #endif
144461 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144462         "lsrs	r7, %[b], #16\n\t"
144463 #else
144464         "lsr	r7, %[b], #16\n\t"
144465 #endif
144466 #ifdef WOLFSSL_KEIL
144467         "muls	r7, r6, r7\n\t"
144468 #elif defined(__clang__)
144469         "muls	r7, r6\n\t"
144470 #else
144471         "mul	r7, r6\n\t"
144472 #endif
144473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144474         "adds	r5, r5, r7\n\t"
144475 #else
144476         "add	r5, r5, r7\n\t"
144477 #endif
144478 #ifdef WOLFSSL_KEIL
144479         "adcs	r3, r3, %[r]\n\t"
144480 #elif defined(__clang__)
144481         "adcs	r3, %[r]\n\t"
144482 #else
144483         "adc	r3, %[r]\n\t"
144484 #endif
144485         "uxth	r7, %[b]\n\t"
144486 #ifdef WOLFSSL_KEIL
144487         "muls	r6, r7, r6\n\t"
144488 #elif defined(__clang__)
144489         "muls	r6, r7\n\t"
144490 #else
144491         "mul	r6, r7\n\t"
144492 #endif
144493 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144494         "lsrs	r7, r6, #16\n\t"
144495 #else
144496         "lsr	r7, r6, #16\n\t"
144497 #endif
144498 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144499         "lsls	r6, r6, #16\n\t"
144500 #else
144501         "lsl	r6, r6, #16\n\t"
144502 #endif
144503 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144504         "adds	r4, r4, r6\n\t"
144505 #else
144506         "add	r4, r4, r6\n\t"
144507 #endif
144508 #ifdef WOLFSSL_KEIL
144509         "adcs	r5, r5, r7\n\t"
144510 #elif defined(__clang__)
144511         "adcs	r5, r7\n\t"
144512 #else
144513         "adc	r5, r7\n\t"
144514 #endif
144515 #ifdef WOLFSSL_KEIL
144516         "adcs	r3, r3, %[r]\n\t"
144517 #elif defined(__clang__)
144518         "adcs	r3, %[r]\n\t"
144519 #else
144520         "adc	r3, %[r]\n\t"
144521 #endif
144522         "#  A[14] * B[5]\n\t"
144523         "mov	%[a], r9\n\t"
144524         "mov	%[b], r10\n\t"
144525         "ldr	%[a], [%[a], #56]\n\t"
144526         "ldr	%[b], [%[b], #20]\n\t"
144527         "uxth	r6, %[a]\n\t"
144528         "uxth	r7, %[b]\n\t"
144529 #ifdef WOLFSSL_KEIL
144530         "muls	r7, r6, r7\n\t"
144531 #elif defined(__clang__)
144532         "muls	r7, r6\n\t"
144533 #else
144534         "mul	r7, r6\n\t"
144535 #endif
144536 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144537         "adds	r4, r4, r7\n\t"
144538 #else
144539         "add	r4, r4, r7\n\t"
144540 #endif
144541 #ifdef WOLFSSL_KEIL
144542         "adcs	r5, r5, %[r]\n\t"
144543 #elif defined(__clang__)
144544         "adcs	r5, %[r]\n\t"
144545 #else
144546         "adc	r5, %[r]\n\t"
144547 #endif
144548 #ifdef WOLFSSL_KEIL
144549         "adcs	r3, r3, %[r]\n\t"
144550 #elif defined(__clang__)
144551         "adcs	r3, %[r]\n\t"
144552 #else
144553         "adc	r3, %[r]\n\t"
144554 #endif
144555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144556         "lsrs	r7, %[b], #16\n\t"
144557 #else
144558         "lsr	r7, %[b], #16\n\t"
144559 #endif
144560 #ifdef WOLFSSL_KEIL
144561         "muls	r6, r7, r6\n\t"
144562 #elif defined(__clang__)
144563         "muls	r6, r7\n\t"
144564 #else
144565         "mul	r6, r7\n\t"
144566 #endif
144567 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144568         "lsrs	r7, r6, #16\n\t"
144569 #else
144570         "lsr	r7, r6, #16\n\t"
144571 #endif
144572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144573         "lsls	r6, r6, #16\n\t"
144574 #else
144575         "lsl	r6, r6, #16\n\t"
144576 #endif
144577 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144578         "adds	r4, r4, r6\n\t"
144579 #else
144580         "add	r4, r4, r6\n\t"
144581 #endif
144582 #ifdef WOLFSSL_KEIL
144583         "adcs	r5, r5, r7\n\t"
144584 #elif defined(__clang__)
144585         "adcs	r5, r7\n\t"
144586 #else
144587         "adc	r5, r7\n\t"
144588 #endif
144589 #ifdef WOLFSSL_KEIL
144590         "adcs	r3, r3, %[r]\n\t"
144591 #elif defined(__clang__)
144592         "adcs	r3, %[r]\n\t"
144593 #else
144594         "adc	r3, %[r]\n\t"
144595 #endif
144596 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144597         "lsrs	r6, %[a], #16\n\t"
144598 #else
144599         "lsr	r6, %[a], #16\n\t"
144600 #endif
144601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144602         "lsrs	r7, %[b], #16\n\t"
144603 #else
144604         "lsr	r7, %[b], #16\n\t"
144605 #endif
144606 #ifdef WOLFSSL_KEIL
144607         "muls	r7, r6, r7\n\t"
144608 #elif defined(__clang__)
144609         "muls	r7, r6\n\t"
144610 #else
144611         "mul	r7, r6\n\t"
144612 #endif
144613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144614         "adds	r5, r5, r7\n\t"
144615 #else
144616         "add	r5, r5, r7\n\t"
144617 #endif
144618 #ifdef WOLFSSL_KEIL
144619         "adcs	r3, r3, %[r]\n\t"
144620 #elif defined(__clang__)
144621         "adcs	r3, %[r]\n\t"
144622 #else
144623         "adc	r3, %[r]\n\t"
144624 #endif
144625         "uxth	r7, %[b]\n\t"
144626 #ifdef WOLFSSL_KEIL
144627         "muls	r6, r7, r6\n\t"
144628 #elif defined(__clang__)
144629         "muls	r6, r7\n\t"
144630 #else
144631         "mul	r6, r7\n\t"
144632 #endif
144633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144634         "lsrs	r7, r6, #16\n\t"
144635 #else
144636         "lsr	r7, r6, #16\n\t"
144637 #endif
144638 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144639         "lsls	r6, r6, #16\n\t"
144640 #else
144641         "lsl	r6, r6, #16\n\t"
144642 #endif
144643 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144644         "adds	r4, r4, r6\n\t"
144645 #else
144646         "add	r4, r4, r6\n\t"
144647 #endif
144648 #ifdef WOLFSSL_KEIL
144649         "adcs	r5, r5, r7\n\t"
144650 #elif defined(__clang__)
144651         "adcs	r5, r7\n\t"
144652 #else
144653         "adc	r5, r7\n\t"
144654 #endif
144655 #ifdef WOLFSSL_KEIL
144656         "adcs	r3, r3, %[r]\n\t"
144657 #elif defined(__clang__)
144658         "adcs	r3, %[r]\n\t"
144659 #else
144660         "adc	r3, %[r]\n\t"
144661 #endif
144662         "#  A[15] * B[4]\n\t"
144663         "mov	%[a], r9\n\t"
144664         "mov	%[b], r10\n\t"
144665         "ldr	%[a], [%[a], #60]\n\t"
144666         "ldr	%[b], [%[b], #16]\n\t"
144667         "uxth	r6, %[a]\n\t"
144668         "uxth	r7, %[b]\n\t"
144669 #ifdef WOLFSSL_KEIL
144670         "muls	r7, r6, r7\n\t"
144671 #elif defined(__clang__)
144672         "muls	r7, r6\n\t"
144673 #else
144674         "mul	r7, r6\n\t"
144675 #endif
144676 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144677         "adds	r4, r4, r7\n\t"
144678 #else
144679         "add	r4, r4, r7\n\t"
144680 #endif
144681 #ifdef WOLFSSL_KEIL
144682         "adcs	r5, r5, %[r]\n\t"
144683 #elif defined(__clang__)
144684         "adcs	r5, %[r]\n\t"
144685 #else
144686         "adc	r5, %[r]\n\t"
144687 #endif
144688 #ifdef WOLFSSL_KEIL
144689         "adcs	r3, r3, %[r]\n\t"
144690 #elif defined(__clang__)
144691         "adcs	r3, %[r]\n\t"
144692 #else
144693         "adc	r3, %[r]\n\t"
144694 #endif
144695 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144696         "lsrs	r7, %[b], #16\n\t"
144697 #else
144698         "lsr	r7, %[b], #16\n\t"
144699 #endif
144700 #ifdef WOLFSSL_KEIL
144701         "muls	r6, r7, r6\n\t"
144702 #elif defined(__clang__)
144703         "muls	r6, r7\n\t"
144704 #else
144705         "mul	r6, r7\n\t"
144706 #endif
144707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144708         "lsrs	r7, r6, #16\n\t"
144709 #else
144710         "lsr	r7, r6, #16\n\t"
144711 #endif
144712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144713         "lsls	r6, r6, #16\n\t"
144714 #else
144715         "lsl	r6, r6, #16\n\t"
144716 #endif
144717 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144718         "adds	r4, r4, r6\n\t"
144719 #else
144720         "add	r4, r4, r6\n\t"
144721 #endif
144722 #ifdef WOLFSSL_KEIL
144723         "adcs	r5, r5, r7\n\t"
144724 #elif defined(__clang__)
144725         "adcs	r5, r7\n\t"
144726 #else
144727         "adc	r5, r7\n\t"
144728 #endif
144729 #ifdef WOLFSSL_KEIL
144730         "adcs	r3, r3, %[r]\n\t"
144731 #elif defined(__clang__)
144732         "adcs	r3, %[r]\n\t"
144733 #else
144734         "adc	r3, %[r]\n\t"
144735 #endif
144736 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144737         "lsrs	r6, %[a], #16\n\t"
144738 #else
144739         "lsr	r6, %[a], #16\n\t"
144740 #endif
144741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144742         "lsrs	r7, %[b], #16\n\t"
144743 #else
144744         "lsr	r7, %[b], #16\n\t"
144745 #endif
144746 #ifdef WOLFSSL_KEIL
144747         "muls	r7, r6, r7\n\t"
144748 #elif defined(__clang__)
144749         "muls	r7, r6\n\t"
144750 #else
144751         "mul	r7, r6\n\t"
144752 #endif
144753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144754         "adds	r5, r5, r7\n\t"
144755 #else
144756         "add	r5, r5, r7\n\t"
144757 #endif
144758 #ifdef WOLFSSL_KEIL
144759         "adcs	r3, r3, %[r]\n\t"
144760 #elif defined(__clang__)
144761         "adcs	r3, %[r]\n\t"
144762 #else
144763         "adc	r3, %[r]\n\t"
144764 #endif
144765         "uxth	r7, %[b]\n\t"
144766 #ifdef WOLFSSL_KEIL
144767         "muls	r6, r7, r6\n\t"
144768 #elif defined(__clang__)
144769         "muls	r6, r7\n\t"
144770 #else
144771         "mul	r6, r7\n\t"
144772 #endif
144773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144774         "lsrs	r7, r6, #16\n\t"
144775 #else
144776         "lsr	r7, r6, #16\n\t"
144777 #endif
144778 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144779         "lsls	r6, r6, #16\n\t"
144780 #else
144781         "lsl	r6, r6, #16\n\t"
144782 #endif
144783 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144784         "adds	r4, r4, r6\n\t"
144785 #else
144786         "add	r4, r4, r6\n\t"
144787 #endif
144788 #ifdef WOLFSSL_KEIL
144789         "adcs	r5, r5, r7\n\t"
144790 #elif defined(__clang__)
144791         "adcs	r5, r7\n\t"
144792 #else
144793         "adc	r5, r7\n\t"
144794 #endif
144795 #ifdef WOLFSSL_KEIL
144796         "adcs	r3, r3, %[r]\n\t"
144797 #elif defined(__clang__)
144798         "adcs	r3, %[r]\n\t"
144799 #else
144800         "adc	r3, %[r]\n\t"
144801 #endif
144802         "mov	%[r], r8\n\t"
144803         "str	r4, [%[r], #76]\n\t"
144804         "movs	%[r], #0\n\t"
144805         "#  A[15] * B[5]\n\t"
144806         "movs	r4, #0\n\t"
144807         "mov	%[a], r9\n\t"
144808         "mov	%[b], r10\n\t"
144809         "ldr	%[a], [%[a], #60]\n\t"
144810         "ldr	%[b], [%[b], #20]\n\t"
144811         "uxth	r6, %[a]\n\t"
144812         "uxth	r7, %[b]\n\t"
144813 #ifdef WOLFSSL_KEIL
144814         "muls	r7, r6, r7\n\t"
144815 #elif defined(__clang__)
144816         "muls	r7, r6\n\t"
144817 #else
144818         "mul	r7, r6\n\t"
144819 #endif
144820 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144821         "adds	r5, r5, r7\n\t"
144822 #else
144823         "add	r5, r5, r7\n\t"
144824 #endif
144825 #ifdef WOLFSSL_KEIL
144826         "adcs	r3, r3, %[r]\n\t"
144827 #elif defined(__clang__)
144828         "adcs	r3, %[r]\n\t"
144829 #else
144830         "adc	r3, %[r]\n\t"
144831 #endif
144832 #ifdef WOLFSSL_KEIL
144833         "adcs	r4, r4, %[r]\n\t"
144834 #elif defined(__clang__)
144835         "adcs	r4, %[r]\n\t"
144836 #else
144837         "adc	r4, %[r]\n\t"
144838 #endif
144839 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144840         "lsrs	r7, %[b], #16\n\t"
144841 #else
144842         "lsr	r7, %[b], #16\n\t"
144843 #endif
144844 #ifdef WOLFSSL_KEIL
144845         "muls	r6, r7, r6\n\t"
144846 #elif defined(__clang__)
144847         "muls	r6, r7\n\t"
144848 #else
144849         "mul	r6, r7\n\t"
144850 #endif
144851 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144852         "lsrs	r7, r6, #16\n\t"
144853 #else
144854         "lsr	r7, r6, #16\n\t"
144855 #endif
144856 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144857         "lsls	r6, r6, #16\n\t"
144858 #else
144859         "lsl	r6, r6, #16\n\t"
144860 #endif
144861 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144862         "adds	r5, r5, r6\n\t"
144863 #else
144864         "add	r5, r5, r6\n\t"
144865 #endif
144866 #ifdef WOLFSSL_KEIL
144867         "adcs	r3, r3, r7\n\t"
144868 #elif defined(__clang__)
144869         "adcs	r3, r7\n\t"
144870 #else
144871         "adc	r3, r7\n\t"
144872 #endif
144873 #ifdef WOLFSSL_KEIL
144874         "adcs	r4, r4, %[r]\n\t"
144875 #elif defined(__clang__)
144876         "adcs	r4, %[r]\n\t"
144877 #else
144878         "adc	r4, %[r]\n\t"
144879 #endif
144880 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144881         "lsrs	r6, %[a], #16\n\t"
144882 #else
144883         "lsr	r6, %[a], #16\n\t"
144884 #endif
144885 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144886         "lsrs	r7, %[b], #16\n\t"
144887 #else
144888         "lsr	r7, %[b], #16\n\t"
144889 #endif
144890 #ifdef WOLFSSL_KEIL
144891         "muls	r7, r6, r7\n\t"
144892 #elif defined(__clang__)
144893         "muls	r7, r6\n\t"
144894 #else
144895         "mul	r7, r6\n\t"
144896 #endif
144897 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144898         "adds	r3, r3, r7\n\t"
144899 #else
144900         "add	r3, r3, r7\n\t"
144901 #endif
144902 #ifdef WOLFSSL_KEIL
144903         "adcs	r4, r4, %[r]\n\t"
144904 #elif defined(__clang__)
144905         "adcs	r4, %[r]\n\t"
144906 #else
144907         "adc	r4, %[r]\n\t"
144908 #endif
144909         "uxth	r7, %[b]\n\t"
144910 #ifdef WOLFSSL_KEIL
144911         "muls	r6, r7, r6\n\t"
144912 #elif defined(__clang__)
144913         "muls	r6, r7\n\t"
144914 #else
144915         "mul	r6, r7\n\t"
144916 #endif
144917 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144918         "lsrs	r7, r6, #16\n\t"
144919 #else
144920         "lsr	r7, r6, #16\n\t"
144921 #endif
144922 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144923         "lsls	r6, r6, #16\n\t"
144924 #else
144925         "lsl	r6, r6, #16\n\t"
144926 #endif
144927 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144928         "adds	r5, r5, r6\n\t"
144929 #else
144930         "add	r5, r5, r6\n\t"
144931 #endif
144932 #ifdef WOLFSSL_KEIL
144933         "adcs	r3, r3, r7\n\t"
144934 #elif defined(__clang__)
144935         "adcs	r3, r7\n\t"
144936 #else
144937         "adc	r3, r7\n\t"
144938 #endif
144939 #ifdef WOLFSSL_KEIL
144940         "adcs	r4, r4, %[r]\n\t"
144941 #elif defined(__clang__)
144942         "adcs	r4, %[r]\n\t"
144943 #else
144944         "adc	r4, %[r]\n\t"
144945 #endif
144946         "#  A[14] * B[6]\n\t"
144947         "mov	%[a], r9\n\t"
144948         "mov	%[b], r10\n\t"
144949         "ldr	%[a], [%[a], #56]\n\t"
144950         "ldr	%[b], [%[b], #24]\n\t"
144951         "uxth	r6, %[a]\n\t"
144952         "uxth	r7, %[b]\n\t"
144953 #ifdef WOLFSSL_KEIL
144954         "muls	r7, r6, r7\n\t"
144955 #elif defined(__clang__)
144956         "muls	r7, r6\n\t"
144957 #else
144958         "mul	r7, r6\n\t"
144959 #endif
144960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144961         "adds	r5, r5, r7\n\t"
144962 #else
144963         "add	r5, r5, r7\n\t"
144964 #endif
144965 #ifdef WOLFSSL_KEIL
144966         "adcs	r3, r3, %[r]\n\t"
144967 #elif defined(__clang__)
144968         "adcs	r3, %[r]\n\t"
144969 #else
144970         "adc	r3, %[r]\n\t"
144971 #endif
144972 #ifdef WOLFSSL_KEIL
144973         "adcs	r4, r4, %[r]\n\t"
144974 #elif defined(__clang__)
144975         "adcs	r4, %[r]\n\t"
144976 #else
144977         "adc	r4, %[r]\n\t"
144978 #endif
144979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144980         "lsrs	r7, %[b], #16\n\t"
144981 #else
144982         "lsr	r7, %[b], #16\n\t"
144983 #endif
144984 #ifdef WOLFSSL_KEIL
144985         "muls	r6, r7, r6\n\t"
144986 #elif defined(__clang__)
144987         "muls	r6, r7\n\t"
144988 #else
144989         "mul	r6, r7\n\t"
144990 #endif
144991 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144992         "lsrs	r7, r6, #16\n\t"
144993 #else
144994         "lsr	r7, r6, #16\n\t"
144995 #endif
144996 #if defined(__clang__) || defined(WOLFSSL_KEIL)
144997         "lsls	r6, r6, #16\n\t"
144998 #else
144999         "lsl	r6, r6, #16\n\t"
145000 #endif
145001 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145002         "adds	r5, r5, r6\n\t"
145003 #else
145004         "add	r5, r5, r6\n\t"
145005 #endif
145006 #ifdef WOLFSSL_KEIL
145007         "adcs	r3, r3, r7\n\t"
145008 #elif defined(__clang__)
145009         "adcs	r3, r7\n\t"
145010 #else
145011         "adc	r3, r7\n\t"
145012 #endif
145013 #ifdef WOLFSSL_KEIL
145014         "adcs	r4, r4, %[r]\n\t"
145015 #elif defined(__clang__)
145016         "adcs	r4, %[r]\n\t"
145017 #else
145018         "adc	r4, %[r]\n\t"
145019 #endif
145020 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145021         "lsrs	r6, %[a], #16\n\t"
145022 #else
145023         "lsr	r6, %[a], #16\n\t"
145024 #endif
145025 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145026         "lsrs	r7, %[b], #16\n\t"
145027 #else
145028         "lsr	r7, %[b], #16\n\t"
145029 #endif
145030 #ifdef WOLFSSL_KEIL
145031         "muls	r7, r6, r7\n\t"
145032 #elif defined(__clang__)
145033         "muls	r7, r6\n\t"
145034 #else
145035         "mul	r7, r6\n\t"
145036 #endif
145037 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145038         "adds	r3, r3, r7\n\t"
145039 #else
145040         "add	r3, r3, r7\n\t"
145041 #endif
145042 #ifdef WOLFSSL_KEIL
145043         "adcs	r4, r4, %[r]\n\t"
145044 #elif defined(__clang__)
145045         "adcs	r4, %[r]\n\t"
145046 #else
145047         "adc	r4, %[r]\n\t"
145048 #endif
145049         "uxth	r7, %[b]\n\t"
145050 #ifdef WOLFSSL_KEIL
145051         "muls	r6, r7, r6\n\t"
145052 #elif defined(__clang__)
145053         "muls	r6, r7\n\t"
145054 #else
145055         "mul	r6, r7\n\t"
145056 #endif
145057 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145058         "lsrs	r7, r6, #16\n\t"
145059 #else
145060         "lsr	r7, r6, #16\n\t"
145061 #endif
145062 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145063         "lsls	r6, r6, #16\n\t"
145064 #else
145065         "lsl	r6, r6, #16\n\t"
145066 #endif
145067 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145068         "adds	r5, r5, r6\n\t"
145069 #else
145070         "add	r5, r5, r6\n\t"
145071 #endif
145072 #ifdef WOLFSSL_KEIL
145073         "adcs	r3, r3, r7\n\t"
145074 #elif defined(__clang__)
145075         "adcs	r3, r7\n\t"
145076 #else
145077         "adc	r3, r7\n\t"
145078 #endif
145079 #ifdef WOLFSSL_KEIL
145080         "adcs	r4, r4, %[r]\n\t"
145081 #elif defined(__clang__)
145082         "adcs	r4, %[r]\n\t"
145083 #else
145084         "adc	r4, %[r]\n\t"
145085 #endif
145086         "#  A[13] * B[7]\n\t"
145087         "mov	%[a], r9\n\t"
145088         "mov	%[b], r10\n\t"
145089         "ldr	%[a], [%[a], #52]\n\t"
145090         "ldr	%[b], [%[b], #28]\n\t"
145091         "uxth	r6, %[a]\n\t"
145092         "uxth	r7, %[b]\n\t"
145093 #ifdef WOLFSSL_KEIL
145094         "muls	r7, r6, r7\n\t"
145095 #elif defined(__clang__)
145096         "muls	r7, r6\n\t"
145097 #else
145098         "mul	r7, r6\n\t"
145099 #endif
145100 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145101         "adds	r5, r5, r7\n\t"
145102 #else
145103         "add	r5, r5, r7\n\t"
145104 #endif
145105 #ifdef WOLFSSL_KEIL
145106         "adcs	r3, r3, %[r]\n\t"
145107 #elif defined(__clang__)
145108         "adcs	r3, %[r]\n\t"
145109 #else
145110         "adc	r3, %[r]\n\t"
145111 #endif
145112 #ifdef WOLFSSL_KEIL
145113         "adcs	r4, r4, %[r]\n\t"
145114 #elif defined(__clang__)
145115         "adcs	r4, %[r]\n\t"
145116 #else
145117         "adc	r4, %[r]\n\t"
145118 #endif
145119 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145120         "lsrs	r7, %[b], #16\n\t"
145121 #else
145122         "lsr	r7, %[b], #16\n\t"
145123 #endif
145124 #ifdef WOLFSSL_KEIL
145125         "muls	r6, r7, r6\n\t"
145126 #elif defined(__clang__)
145127         "muls	r6, r7\n\t"
145128 #else
145129         "mul	r6, r7\n\t"
145130 #endif
145131 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145132         "lsrs	r7, r6, #16\n\t"
145133 #else
145134         "lsr	r7, r6, #16\n\t"
145135 #endif
145136 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145137         "lsls	r6, r6, #16\n\t"
145138 #else
145139         "lsl	r6, r6, #16\n\t"
145140 #endif
145141 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145142         "adds	r5, r5, r6\n\t"
145143 #else
145144         "add	r5, r5, r6\n\t"
145145 #endif
145146 #ifdef WOLFSSL_KEIL
145147         "adcs	r3, r3, r7\n\t"
145148 #elif defined(__clang__)
145149         "adcs	r3, r7\n\t"
145150 #else
145151         "adc	r3, r7\n\t"
145152 #endif
145153 #ifdef WOLFSSL_KEIL
145154         "adcs	r4, r4, %[r]\n\t"
145155 #elif defined(__clang__)
145156         "adcs	r4, %[r]\n\t"
145157 #else
145158         "adc	r4, %[r]\n\t"
145159 #endif
145160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145161         "lsrs	r6, %[a], #16\n\t"
145162 #else
145163         "lsr	r6, %[a], #16\n\t"
145164 #endif
145165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145166         "lsrs	r7, %[b], #16\n\t"
145167 #else
145168         "lsr	r7, %[b], #16\n\t"
145169 #endif
145170 #ifdef WOLFSSL_KEIL
145171         "muls	r7, r6, r7\n\t"
145172 #elif defined(__clang__)
145173         "muls	r7, r6\n\t"
145174 #else
145175         "mul	r7, r6\n\t"
145176 #endif
145177 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145178         "adds	r3, r3, r7\n\t"
145179 #else
145180         "add	r3, r3, r7\n\t"
145181 #endif
145182 #ifdef WOLFSSL_KEIL
145183         "adcs	r4, r4, %[r]\n\t"
145184 #elif defined(__clang__)
145185         "adcs	r4, %[r]\n\t"
145186 #else
145187         "adc	r4, %[r]\n\t"
145188 #endif
145189         "uxth	r7, %[b]\n\t"
145190 #ifdef WOLFSSL_KEIL
145191         "muls	r6, r7, r6\n\t"
145192 #elif defined(__clang__)
145193         "muls	r6, r7\n\t"
145194 #else
145195         "mul	r6, r7\n\t"
145196 #endif
145197 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145198         "lsrs	r7, r6, #16\n\t"
145199 #else
145200         "lsr	r7, r6, #16\n\t"
145201 #endif
145202 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145203         "lsls	r6, r6, #16\n\t"
145204 #else
145205         "lsl	r6, r6, #16\n\t"
145206 #endif
145207 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145208         "adds	r5, r5, r6\n\t"
145209 #else
145210         "add	r5, r5, r6\n\t"
145211 #endif
145212 #ifdef WOLFSSL_KEIL
145213         "adcs	r3, r3, r7\n\t"
145214 #elif defined(__clang__)
145215         "adcs	r3, r7\n\t"
145216 #else
145217         "adc	r3, r7\n\t"
145218 #endif
145219 #ifdef WOLFSSL_KEIL
145220         "adcs	r4, r4, %[r]\n\t"
145221 #elif defined(__clang__)
145222         "adcs	r4, %[r]\n\t"
145223 #else
145224         "adc	r4, %[r]\n\t"
145225 #endif
145226         "#  A[12] * B[8]\n\t"
145227         "mov	%[a], r9\n\t"
145228         "mov	%[b], r10\n\t"
145229         "ldr	%[a], [%[a], #48]\n\t"
145230         "ldr	%[b], [%[b], #32]\n\t"
145231         "uxth	r6, %[a]\n\t"
145232         "uxth	r7, %[b]\n\t"
145233 #ifdef WOLFSSL_KEIL
145234         "muls	r7, r6, r7\n\t"
145235 #elif defined(__clang__)
145236         "muls	r7, r6\n\t"
145237 #else
145238         "mul	r7, r6\n\t"
145239 #endif
145240 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145241         "adds	r5, r5, r7\n\t"
145242 #else
145243         "add	r5, r5, r7\n\t"
145244 #endif
145245 #ifdef WOLFSSL_KEIL
145246         "adcs	r3, r3, %[r]\n\t"
145247 #elif defined(__clang__)
145248         "adcs	r3, %[r]\n\t"
145249 #else
145250         "adc	r3, %[r]\n\t"
145251 #endif
145252 #ifdef WOLFSSL_KEIL
145253         "adcs	r4, r4, %[r]\n\t"
145254 #elif defined(__clang__)
145255         "adcs	r4, %[r]\n\t"
145256 #else
145257         "adc	r4, %[r]\n\t"
145258 #endif
145259 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145260         "lsrs	r7, %[b], #16\n\t"
145261 #else
145262         "lsr	r7, %[b], #16\n\t"
145263 #endif
145264 #ifdef WOLFSSL_KEIL
145265         "muls	r6, r7, r6\n\t"
145266 #elif defined(__clang__)
145267         "muls	r6, r7\n\t"
145268 #else
145269         "mul	r6, r7\n\t"
145270 #endif
145271 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145272         "lsrs	r7, r6, #16\n\t"
145273 #else
145274         "lsr	r7, r6, #16\n\t"
145275 #endif
145276 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145277         "lsls	r6, r6, #16\n\t"
145278 #else
145279         "lsl	r6, r6, #16\n\t"
145280 #endif
145281 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145282         "adds	r5, r5, r6\n\t"
145283 #else
145284         "add	r5, r5, r6\n\t"
145285 #endif
145286 #ifdef WOLFSSL_KEIL
145287         "adcs	r3, r3, r7\n\t"
145288 #elif defined(__clang__)
145289         "adcs	r3, r7\n\t"
145290 #else
145291         "adc	r3, r7\n\t"
145292 #endif
145293 #ifdef WOLFSSL_KEIL
145294         "adcs	r4, r4, %[r]\n\t"
145295 #elif defined(__clang__)
145296         "adcs	r4, %[r]\n\t"
145297 #else
145298         "adc	r4, %[r]\n\t"
145299 #endif
145300 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145301         "lsrs	r6, %[a], #16\n\t"
145302 #else
145303         "lsr	r6, %[a], #16\n\t"
145304 #endif
145305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145306         "lsrs	r7, %[b], #16\n\t"
145307 #else
145308         "lsr	r7, %[b], #16\n\t"
145309 #endif
145310 #ifdef WOLFSSL_KEIL
145311         "muls	r7, r6, r7\n\t"
145312 #elif defined(__clang__)
145313         "muls	r7, r6\n\t"
145314 #else
145315         "mul	r7, r6\n\t"
145316 #endif
145317 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145318         "adds	r3, r3, r7\n\t"
145319 #else
145320         "add	r3, r3, r7\n\t"
145321 #endif
145322 #ifdef WOLFSSL_KEIL
145323         "adcs	r4, r4, %[r]\n\t"
145324 #elif defined(__clang__)
145325         "adcs	r4, %[r]\n\t"
145326 #else
145327         "adc	r4, %[r]\n\t"
145328 #endif
145329         "uxth	r7, %[b]\n\t"
145330 #ifdef WOLFSSL_KEIL
145331         "muls	r6, r7, r6\n\t"
145332 #elif defined(__clang__)
145333         "muls	r6, r7\n\t"
145334 #else
145335         "mul	r6, r7\n\t"
145336 #endif
145337 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145338         "lsrs	r7, r6, #16\n\t"
145339 #else
145340         "lsr	r7, r6, #16\n\t"
145341 #endif
145342 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145343         "lsls	r6, r6, #16\n\t"
145344 #else
145345         "lsl	r6, r6, #16\n\t"
145346 #endif
145347 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145348         "adds	r5, r5, r6\n\t"
145349 #else
145350         "add	r5, r5, r6\n\t"
145351 #endif
145352 #ifdef WOLFSSL_KEIL
145353         "adcs	r3, r3, r7\n\t"
145354 #elif defined(__clang__)
145355         "adcs	r3, r7\n\t"
145356 #else
145357         "adc	r3, r7\n\t"
145358 #endif
145359 #ifdef WOLFSSL_KEIL
145360         "adcs	r4, r4, %[r]\n\t"
145361 #elif defined(__clang__)
145362         "adcs	r4, %[r]\n\t"
145363 #else
145364         "adc	r4, %[r]\n\t"
145365 #endif
145366         "#  A[11] * B[9]\n\t"
145367         "mov	%[a], r9\n\t"
145368         "mov	%[b], r10\n\t"
145369         "ldr	%[a], [%[a], #44]\n\t"
145370         "ldr	%[b], [%[b], #36]\n\t"
145371         "uxth	r6, %[a]\n\t"
145372         "uxth	r7, %[b]\n\t"
145373 #ifdef WOLFSSL_KEIL
145374         "muls	r7, r6, r7\n\t"
145375 #elif defined(__clang__)
145376         "muls	r7, r6\n\t"
145377 #else
145378         "mul	r7, r6\n\t"
145379 #endif
145380 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145381         "adds	r5, r5, r7\n\t"
145382 #else
145383         "add	r5, r5, r7\n\t"
145384 #endif
145385 #ifdef WOLFSSL_KEIL
145386         "adcs	r3, r3, %[r]\n\t"
145387 #elif defined(__clang__)
145388         "adcs	r3, %[r]\n\t"
145389 #else
145390         "adc	r3, %[r]\n\t"
145391 #endif
145392 #ifdef WOLFSSL_KEIL
145393         "adcs	r4, r4, %[r]\n\t"
145394 #elif defined(__clang__)
145395         "adcs	r4, %[r]\n\t"
145396 #else
145397         "adc	r4, %[r]\n\t"
145398 #endif
145399 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145400         "lsrs	r7, %[b], #16\n\t"
145401 #else
145402         "lsr	r7, %[b], #16\n\t"
145403 #endif
145404 #ifdef WOLFSSL_KEIL
145405         "muls	r6, r7, r6\n\t"
145406 #elif defined(__clang__)
145407         "muls	r6, r7\n\t"
145408 #else
145409         "mul	r6, r7\n\t"
145410 #endif
145411 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145412         "lsrs	r7, r6, #16\n\t"
145413 #else
145414         "lsr	r7, r6, #16\n\t"
145415 #endif
145416 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145417         "lsls	r6, r6, #16\n\t"
145418 #else
145419         "lsl	r6, r6, #16\n\t"
145420 #endif
145421 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145422         "adds	r5, r5, r6\n\t"
145423 #else
145424         "add	r5, r5, r6\n\t"
145425 #endif
145426 #ifdef WOLFSSL_KEIL
145427         "adcs	r3, r3, r7\n\t"
145428 #elif defined(__clang__)
145429         "adcs	r3, r7\n\t"
145430 #else
145431         "adc	r3, r7\n\t"
145432 #endif
145433 #ifdef WOLFSSL_KEIL
145434         "adcs	r4, r4, %[r]\n\t"
145435 #elif defined(__clang__)
145436         "adcs	r4, %[r]\n\t"
145437 #else
145438         "adc	r4, %[r]\n\t"
145439 #endif
145440 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145441         "lsrs	r6, %[a], #16\n\t"
145442 #else
145443         "lsr	r6, %[a], #16\n\t"
145444 #endif
145445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145446         "lsrs	r7, %[b], #16\n\t"
145447 #else
145448         "lsr	r7, %[b], #16\n\t"
145449 #endif
145450 #ifdef WOLFSSL_KEIL
145451         "muls	r7, r6, r7\n\t"
145452 #elif defined(__clang__)
145453         "muls	r7, r6\n\t"
145454 #else
145455         "mul	r7, r6\n\t"
145456 #endif
145457 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145458         "adds	r3, r3, r7\n\t"
145459 #else
145460         "add	r3, r3, r7\n\t"
145461 #endif
145462 #ifdef WOLFSSL_KEIL
145463         "adcs	r4, r4, %[r]\n\t"
145464 #elif defined(__clang__)
145465         "adcs	r4, %[r]\n\t"
145466 #else
145467         "adc	r4, %[r]\n\t"
145468 #endif
145469         "uxth	r7, %[b]\n\t"
145470 #ifdef WOLFSSL_KEIL
145471         "muls	r6, r7, r6\n\t"
145472 #elif defined(__clang__)
145473         "muls	r6, r7\n\t"
145474 #else
145475         "mul	r6, r7\n\t"
145476 #endif
145477 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145478         "lsrs	r7, r6, #16\n\t"
145479 #else
145480         "lsr	r7, r6, #16\n\t"
145481 #endif
145482 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145483         "lsls	r6, r6, #16\n\t"
145484 #else
145485         "lsl	r6, r6, #16\n\t"
145486 #endif
145487 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145488         "adds	r5, r5, r6\n\t"
145489 #else
145490         "add	r5, r5, r6\n\t"
145491 #endif
145492 #ifdef WOLFSSL_KEIL
145493         "adcs	r3, r3, r7\n\t"
145494 #elif defined(__clang__)
145495         "adcs	r3, r7\n\t"
145496 #else
145497         "adc	r3, r7\n\t"
145498 #endif
145499 #ifdef WOLFSSL_KEIL
145500         "adcs	r4, r4, %[r]\n\t"
145501 #elif defined(__clang__)
145502         "adcs	r4, %[r]\n\t"
145503 #else
145504         "adc	r4, %[r]\n\t"
145505 #endif
145506         "#  A[10] * B[10]\n\t"
145507         "mov	%[a], r9\n\t"
145508         "mov	%[b], r10\n\t"
145509         "ldr	%[a], [%[a], #40]\n\t"
145510         "ldr	%[b], [%[b], #40]\n\t"
145511         "uxth	r6, %[a]\n\t"
145512         "uxth	r7, %[b]\n\t"
145513 #ifdef WOLFSSL_KEIL
145514         "muls	r7, r6, r7\n\t"
145515 #elif defined(__clang__)
145516         "muls	r7, r6\n\t"
145517 #else
145518         "mul	r7, r6\n\t"
145519 #endif
145520 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145521         "adds	r5, r5, r7\n\t"
145522 #else
145523         "add	r5, r5, r7\n\t"
145524 #endif
145525 #ifdef WOLFSSL_KEIL
145526         "adcs	r3, r3, %[r]\n\t"
145527 #elif defined(__clang__)
145528         "adcs	r3, %[r]\n\t"
145529 #else
145530         "adc	r3, %[r]\n\t"
145531 #endif
145532 #ifdef WOLFSSL_KEIL
145533         "adcs	r4, r4, %[r]\n\t"
145534 #elif defined(__clang__)
145535         "adcs	r4, %[r]\n\t"
145536 #else
145537         "adc	r4, %[r]\n\t"
145538 #endif
145539 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145540         "lsrs	r7, %[b], #16\n\t"
145541 #else
145542         "lsr	r7, %[b], #16\n\t"
145543 #endif
145544 #ifdef WOLFSSL_KEIL
145545         "muls	r6, r7, r6\n\t"
145546 #elif defined(__clang__)
145547         "muls	r6, r7\n\t"
145548 #else
145549         "mul	r6, r7\n\t"
145550 #endif
145551 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145552         "lsrs	r7, r6, #16\n\t"
145553 #else
145554         "lsr	r7, r6, #16\n\t"
145555 #endif
145556 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145557         "lsls	r6, r6, #16\n\t"
145558 #else
145559         "lsl	r6, r6, #16\n\t"
145560 #endif
145561 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145562         "adds	r5, r5, r6\n\t"
145563 #else
145564         "add	r5, r5, r6\n\t"
145565 #endif
145566 #ifdef WOLFSSL_KEIL
145567         "adcs	r3, r3, r7\n\t"
145568 #elif defined(__clang__)
145569         "adcs	r3, r7\n\t"
145570 #else
145571         "adc	r3, r7\n\t"
145572 #endif
145573 #ifdef WOLFSSL_KEIL
145574         "adcs	r4, r4, %[r]\n\t"
145575 #elif defined(__clang__)
145576         "adcs	r4, %[r]\n\t"
145577 #else
145578         "adc	r4, %[r]\n\t"
145579 #endif
145580 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145581         "lsrs	r6, %[a], #16\n\t"
145582 #else
145583         "lsr	r6, %[a], #16\n\t"
145584 #endif
145585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145586         "lsrs	r7, %[b], #16\n\t"
145587 #else
145588         "lsr	r7, %[b], #16\n\t"
145589 #endif
145590 #ifdef WOLFSSL_KEIL
145591         "muls	r7, r6, r7\n\t"
145592 #elif defined(__clang__)
145593         "muls	r7, r6\n\t"
145594 #else
145595         "mul	r7, r6\n\t"
145596 #endif
145597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145598         "adds	r3, r3, r7\n\t"
145599 #else
145600         "add	r3, r3, r7\n\t"
145601 #endif
145602 #ifdef WOLFSSL_KEIL
145603         "adcs	r4, r4, %[r]\n\t"
145604 #elif defined(__clang__)
145605         "adcs	r4, %[r]\n\t"
145606 #else
145607         "adc	r4, %[r]\n\t"
145608 #endif
145609         "uxth	r7, %[b]\n\t"
145610 #ifdef WOLFSSL_KEIL
145611         "muls	r6, r7, r6\n\t"
145612 #elif defined(__clang__)
145613         "muls	r6, r7\n\t"
145614 #else
145615         "mul	r6, r7\n\t"
145616 #endif
145617 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145618         "lsrs	r7, r6, #16\n\t"
145619 #else
145620         "lsr	r7, r6, #16\n\t"
145621 #endif
145622 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145623         "lsls	r6, r6, #16\n\t"
145624 #else
145625         "lsl	r6, r6, #16\n\t"
145626 #endif
145627 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145628         "adds	r5, r5, r6\n\t"
145629 #else
145630         "add	r5, r5, r6\n\t"
145631 #endif
145632 #ifdef WOLFSSL_KEIL
145633         "adcs	r3, r3, r7\n\t"
145634 #elif defined(__clang__)
145635         "adcs	r3, r7\n\t"
145636 #else
145637         "adc	r3, r7\n\t"
145638 #endif
145639 #ifdef WOLFSSL_KEIL
145640         "adcs	r4, r4, %[r]\n\t"
145641 #elif defined(__clang__)
145642         "adcs	r4, %[r]\n\t"
145643 #else
145644         "adc	r4, %[r]\n\t"
145645 #endif
145646         "#  A[9] * B[11]\n\t"
145647         "mov	%[a], r9\n\t"
145648         "mov	%[b], r10\n\t"
145649         "ldr	%[a], [%[a], #36]\n\t"
145650         "ldr	%[b], [%[b], #44]\n\t"
145651         "uxth	r6, %[a]\n\t"
145652         "uxth	r7, %[b]\n\t"
145653 #ifdef WOLFSSL_KEIL
145654         "muls	r7, r6, r7\n\t"
145655 #elif defined(__clang__)
145656         "muls	r7, r6\n\t"
145657 #else
145658         "mul	r7, r6\n\t"
145659 #endif
145660 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145661         "adds	r5, r5, r7\n\t"
145662 #else
145663         "add	r5, r5, r7\n\t"
145664 #endif
145665 #ifdef WOLFSSL_KEIL
145666         "adcs	r3, r3, %[r]\n\t"
145667 #elif defined(__clang__)
145668         "adcs	r3, %[r]\n\t"
145669 #else
145670         "adc	r3, %[r]\n\t"
145671 #endif
145672 #ifdef WOLFSSL_KEIL
145673         "adcs	r4, r4, %[r]\n\t"
145674 #elif defined(__clang__)
145675         "adcs	r4, %[r]\n\t"
145676 #else
145677         "adc	r4, %[r]\n\t"
145678 #endif
145679 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145680         "lsrs	r7, %[b], #16\n\t"
145681 #else
145682         "lsr	r7, %[b], #16\n\t"
145683 #endif
145684 #ifdef WOLFSSL_KEIL
145685         "muls	r6, r7, r6\n\t"
145686 #elif defined(__clang__)
145687         "muls	r6, r7\n\t"
145688 #else
145689         "mul	r6, r7\n\t"
145690 #endif
145691 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145692         "lsrs	r7, r6, #16\n\t"
145693 #else
145694         "lsr	r7, r6, #16\n\t"
145695 #endif
145696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145697         "lsls	r6, r6, #16\n\t"
145698 #else
145699         "lsl	r6, r6, #16\n\t"
145700 #endif
145701 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145702         "adds	r5, r5, r6\n\t"
145703 #else
145704         "add	r5, r5, r6\n\t"
145705 #endif
145706 #ifdef WOLFSSL_KEIL
145707         "adcs	r3, r3, r7\n\t"
145708 #elif defined(__clang__)
145709         "adcs	r3, r7\n\t"
145710 #else
145711         "adc	r3, r7\n\t"
145712 #endif
145713 #ifdef WOLFSSL_KEIL
145714         "adcs	r4, r4, %[r]\n\t"
145715 #elif defined(__clang__)
145716         "adcs	r4, %[r]\n\t"
145717 #else
145718         "adc	r4, %[r]\n\t"
145719 #endif
145720 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145721         "lsrs	r6, %[a], #16\n\t"
145722 #else
145723         "lsr	r6, %[a], #16\n\t"
145724 #endif
145725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145726         "lsrs	r7, %[b], #16\n\t"
145727 #else
145728         "lsr	r7, %[b], #16\n\t"
145729 #endif
145730 #ifdef WOLFSSL_KEIL
145731         "muls	r7, r6, r7\n\t"
145732 #elif defined(__clang__)
145733         "muls	r7, r6\n\t"
145734 #else
145735         "mul	r7, r6\n\t"
145736 #endif
145737 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145738         "adds	r3, r3, r7\n\t"
145739 #else
145740         "add	r3, r3, r7\n\t"
145741 #endif
145742 #ifdef WOLFSSL_KEIL
145743         "adcs	r4, r4, %[r]\n\t"
145744 #elif defined(__clang__)
145745         "adcs	r4, %[r]\n\t"
145746 #else
145747         "adc	r4, %[r]\n\t"
145748 #endif
145749         "uxth	r7, %[b]\n\t"
145750 #ifdef WOLFSSL_KEIL
145751         "muls	r6, r7, r6\n\t"
145752 #elif defined(__clang__)
145753         "muls	r6, r7\n\t"
145754 #else
145755         "mul	r6, r7\n\t"
145756 #endif
145757 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145758         "lsrs	r7, r6, #16\n\t"
145759 #else
145760         "lsr	r7, r6, #16\n\t"
145761 #endif
145762 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145763         "lsls	r6, r6, #16\n\t"
145764 #else
145765         "lsl	r6, r6, #16\n\t"
145766 #endif
145767 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145768         "adds	r5, r5, r6\n\t"
145769 #else
145770         "add	r5, r5, r6\n\t"
145771 #endif
145772 #ifdef WOLFSSL_KEIL
145773         "adcs	r3, r3, r7\n\t"
145774 #elif defined(__clang__)
145775         "adcs	r3, r7\n\t"
145776 #else
145777         "adc	r3, r7\n\t"
145778 #endif
145779 #ifdef WOLFSSL_KEIL
145780         "adcs	r4, r4, %[r]\n\t"
145781 #elif defined(__clang__)
145782         "adcs	r4, %[r]\n\t"
145783 #else
145784         "adc	r4, %[r]\n\t"
145785 #endif
145786         "#  A[8] * B[12]\n\t"
145787         "mov	%[a], r9\n\t"
145788         "mov	%[b], r10\n\t"
145789         "ldr	%[a], [%[a], #32]\n\t"
145790         "ldr	%[b], [%[b], #48]\n\t"
145791         "uxth	r6, %[a]\n\t"
145792         "uxth	r7, %[b]\n\t"
145793 #ifdef WOLFSSL_KEIL
145794         "muls	r7, r6, r7\n\t"
145795 #elif defined(__clang__)
145796         "muls	r7, r6\n\t"
145797 #else
145798         "mul	r7, r6\n\t"
145799 #endif
145800 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145801         "adds	r5, r5, r7\n\t"
145802 #else
145803         "add	r5, r5, r7\n\t"
145804 #endif
145805 #ifdef WOLFSSL_KEIL
145806         "adcs	r3, r3, %[r]\n\t"
145807 #elif defined(__clang__)
145808         "adcs	r3, %[r]\n\t"
145809 #else
145810         "adc	r3, %[r]\n\t"
145811 #endif
145812 #ifdef WOLFSSL_KEIL
145813         "adcs	r4, r4, %[r]\n\t"
145814 #elif defined(__clang__)
145815         "adcs	r4, %[r]\n\t"
145816 #else
145817         "adc	r4, %[r]\n\t"
145818 #endif
145819 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145820         "lsrs	r7, %[b], #16\n\t"
145821 #else
145822         "lsr	r7, %[b], #16\n\t"
145823 #endif
145824 #ifdef WOLFSSL_KEIL
145825         "muls	r6, r7, r6\n\t"
145826 #elif defined(__clang__)
145827         "muls	r6, r7\n\t"
145828 #else
145829         "mul	r6, r7\n\t"
145830 #endif
145831 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145832         "lsrs	r7, r6, #16\n\t"
145833 #else
145834         "lsr	r7, r6, #16\n\t"
145835 #endif
145836 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145837         "lsls	r6, r6, #16\n\t"
145838 #else
145839         "lsl	r6, r6, #16\n\t"
145840 #endif
145841 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145842         "adds	r5, r5, r6\n\t"
145843 #else
145844         "add	r5, r5, r6\n\t"
145845 #endif
145846 #ifdef WOLFSSL_KEIL
145847         "adcs	r3, r3, r7\n\t"
145848 #elif defined(__clang__)
145849         "adcs	r3, r7\n\t"
145850 #else
145851         "adc	r3, r7\n\t"
145852 #endif
145853 #ifdef WOLFSSL_KEIL
145854         "adcs	r4, r4, %[r]\n\t"
145855 #elif defined(__clang__)
145856         "adcs	r4, %[r]\n\t"
145857 #else
145858         "adc	r4, %[r]\n\t"
145859 #endif
145860 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145861         "lsrs	r6, %[a], #16\n\t"
145862 #else
145863         "lsr	r6, %[a], #16\n\t"
145864 #endif
145865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145866         "lsrs	r7, %[b], #16\n\t"
145867 #else
145868         "lsr	r7, %[b], #16\n\t"
145869 #endif
145870 #ifdef WOLFSSL_KEIL
145871         "muls	r7, r6, r7\n\t"
145872 #elif defined(__clang__)
145873         "muls	r7, r6\n\t"
145874 #else
145875         "mul	r7, r6\n\t"
145876 #endif
145877 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145878         "adds	r3, r3, r7\n\t"
145879 #else
145880         "add	r3, r3, r7\n\t"
145881 #endif
145882 #ifdef WOLFSSL_KEIL
145883         "adcs	r4, r4, %[r]\n\t"
145884 #elif defined(__clang__)
145885         "adcs	r4, %[r]\n\t"
145886 #else
145887         "adc	r4, %[r]\n\t"
145888 #endif
145889         "uxth	r7, %[b]\n\t"
145890 #ifdef WOLFSSL_KEIL
145891         "muls	r6, r7, r6\n\t"
145892 #elif defined(__clang__)
145893         "muls	r6, r7\n\t"
145894 #else
145895         "mul	r6, r7\n\t"
145896 #endif
145897 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145898         "lsrs	r7, r6, #16\n\t"
145899 #else
145900         "lsr	r7, r6, #16\n\t"
145901 #endif
145902 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145903         "lsls	r6, r6, #16\n\t"
145904 #else
145905         "lsl	r6, r6, #16\n\t"
145906 #endif
145907 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145908         "adds	r5, r5, r6\n\t"
145909 #else
145910         "add	r5, r5, r6\n\t"
145911 #endif
145912 #ifdef WOLFSSL_KEIL
145913         "adcs	r3, r3, r7\n\t"
145914 #elif defined(__clang__)
145915         "adcs	r3, r7\n\t"
145916 #else
145917         "adc	r3, r7\n\t"
145918 #endif
145919 #ifdef WOLFSSL_KEIL
145920         "adcs	r4, r4, %[r]\n\t"
145921 #elif defined(__clang__)
145922         "adcs	r4, %[r]\n\t"
145923 #else
145924         "adc	r4, %[r]\n\t"
145925 #endif
145926         "#  A[7] * B[13]\n\t"
145927         "mov	%[a], r9\n\t"
145928         "mov	%[b], r10\n\t"
145929         "ldr	%[a], [%[a], #28]\n\t"
145930         "ldr	%[b], [%[b], #52]\n\t"
145931         "uxth	r6, %[a]\n\t"
145932         "uxth	r7, %[b]\n\t"
145933 #ifdef WOLFSSL_KEIL
145934         "muls	r7, r6, r7\n\t"
145935 #elif defined(__clang__)
145936         "muls	r7, r6\n\t"
145937 #else
145938         "mul	r7, r6\n\t"
145939 #endif
145940 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145941         "adds	r5, r5, r7\n\t"
145942 #else
145943         "add	r5, r5, r7\n\t"
145944 #endif
145945 #ifdef WOLFSSL_KEIL
145946         "adcs	r3, r3, %[r]\n\t"
145947 #elif defined(__clang__)
145948         "adcs	r3, %[r]\n\t"
145949 #else
145950         "adc	r3, %[r]\n\t"
145951 #endif
145952 #ifdef WOLFSSL_KEIL
145953         "adcs	r4, r4, %[r]\n\t"
145954 #elif defined(__clang__)
145955         "adcs	r4, %[r]\n\t"
145956 #else
145957         "adc	r4, %[r]\n\t"
145958 #endif
145959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145960         "lsrs	r7, %[b], #16\n\t"
145961 #else
145962         "lsr	r7, %[b], #16\n\t"
145963 #endif
145964 #ifdef WOLFSSL_KEIL
145965         "muls	r6, r7, r6\n\t"
145966 #elif defined(__clang__)
145967         "muls	r6, r7\n\t"
145968 #else
145969         "mul	r6, r7\n\t"
145970 #endif
145971 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145972         "lsrs	r7, r6, #16\n\t"
145973 #else
145974         "lsr	r7, r6, #16\n\t"
145975 #endif
145976 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145977         "lsls	r6, r6, #16\n\t"
145978 #else
145979         "lsl	r6, r6, #16\n\t"
145980 #endif
145981 #if defined(__clang__) || defined(WOLFSSL_KEIL)
145982         "adds	r5, r5, r6\n\t"
145983 #else
145984         "add	r5, r5, r6\n\t"
145985 #endif
145986 #ifdef WOLFSSL_KEIL
145987         "adcs	r3, r3, r7\n\t"
145988 #elif defined(__clang__)
145989         "adcs	r3, r7\n\t"
145990 #else
145991         "adc	r3, r7\n\t"
145992 #endif
145993 #ifdef WOLFSSL_KEIL
145994         "adcs	r4, r4, %[r]\n\t"
145995 #elif defined(__clang__)
145996         "adcs	r4, %[r]\n\t"
145997 #else
145998         "adc	r4, %[r]\n\t"
145999 #endif
146000 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146001         "lsrs	r6, %[a], #16\n\t"
146002 #else
146003         "lsr	r6, %[a], #16\n\t"
146004 #endif
146005 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146006         "lsrs	r7, %[b], #16\n\t"
146007 #else
146008         "lsr	r7, %[b], #16\n\t"
146009 #endif
146010 #ifdef WOLFSSL_KEIL
146011         "muls	r7, r6, r7\n\t"
146012 #elif defined(__clang__)
146013         "muls	r7, r6\n\t"
146014 #else
146015         "mul	r7, r6\n\t"
146016 #endif
146017 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146018         "adds	r3, r3, r7\n\t"
146019 #else
146020         "add	r3, r3, r7\n\t"
146021 #endif
146022 #ifdef WOLFSSL_KEIL
146023         "adcs	r4, r4, %[r]\n\t"
146024 #elif defined(__clang__)
146025         "adcs	r4, %[r]\n\t"
146026 #else
146027         "adc	r4, %[r]\n\t"
146028 #endif
146029         "uxth	r7, %[b]\n\t"
146030 #ifdef WOLFSSL_KEIL
146031         "muls	r6, r7, r6\n\t"
146032 #elif defined(__clang__)
146033         "muls	r6, r7\n\t"
146034 #else
146035         "mul	r6, r7\n\t"
146036 #endif
146037 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146038         "lsrs	r7, r6, #16\n\t"
146039 #else
146040         "lsr	r7, r6, #16\n\t"
146041 #endif
146042 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146043         "lsls	r6, r6, #16\n\t"
146044 #else
146045         "lsl	r6, r6, #16\n\t"
146046 #endif
146047 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146048         "adds	r5, r5, r6\n\t"
146049 #else
146050         "add	r5, r5, r6\n\t"
146051 #endif
146052 #ifdef WOLFSSL_KEIL
146053         "adcs	r3, r3, r7\n\t"
146054 #elif defined(__clang__)
146055         "adcs	r3, r7\n\t"
146056 #else
146057         "adc	r3, r7\n\t"
146058 #endif
146059 #ifdef WOLFSSL_KEIL
146060         "adcs	r4, r4, %[r]\n\t"
146061 #elif defined(__clang__)
146062         "adcs	r4, %[r]\n\t"
146063 #else
146064         "adc	r4, %[r]\n\t"
146065 #endif
146066         "#  A[6] * B[14]\n\t"
146067         "mov	%[a], r9\n\t"
146068         "mov	%[b], r10\n\t"
146069         "ldr	%[a], [%[a], #24]\n\t"
146070         "ldr	%[b], [%[b], #56]\n\t"
146071         "uxth	r6, %[a]\n\t"
146072         "uxth	r7, %[b]\n\t"
146073 #ifdef WOLFSSL_KEIL
146074         "muls	r7, r6, r7\n\t"
146075 #elif defined(__clang__)
146076         "muls	r7, r6\n\t"
146077 #else
146078         "mul	r7, r6\n\t"
146079 #endif
146080 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146081         "adds	r5, r5, r7\n\t"
146082 #else
146083         "add	r5, r5, r7\n\t"
146084 #endif
146085 #ifdef WOLFSSL_KEIL
146086         "adcs	r3, r3, %[r]\n\t"
146087 #elif defined(__clang__)
146088         "adcs	r3, %[r]\n\t"
146089 #else
146090         "adc	r3, %[r]\n\t"
146091 #endif
146092 #ifdef WOLFSSL_KEIL
146093         "adcs	r4, r4, %[r]\n\t"
146094 #elif defined(__clang__)
146095         "adcs	r4, %[r]\n\t"
146096 #else
146097         "adc	r4, %[r]\n\t"
146098 #endif
146099 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146100         "lsrs	r7, %[b], #16\n\t"
146101 #else
146102         "lsr	r7, %[b], #16\n\t"
146103 #endif
146104 #ifdef WOLFSSL_KEIL
146105         "muls	r6, r7, r6\n\t"
146106 #elif defined(__clang__)
146107         "muls	r6, r7\n\t"
146108 #else
146109         "mul	r6, r7\n\t"
146110 #endif
146111 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146112         "lsrs	r7, r6, #16\n\t"
146113 #else
146114         "lsr	r7, r6, #16\n\t"
146115 #endif
146116 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146117         "lsls	r6, r6, #16\n\t"
146118 #else
146119         "lsl	r6, r6, #16\n\t"
146120 #endif
146121 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146122         "adds	r5, r5, r6\n\t"
146123 #else
146124         "add	r5, r5, r6\n\t"
146125 #endif
146126 #ifdef WOLFSSL_KEIL
146127         "adcs	r3, r3, r7\n\t"
146128 #elif defined(__clang__)
146129         "adcs	r3, r7\n\t"
146130 #else
146131         "adc	r3, r7\n\t"
146132 #endif
146133 #ifdef WOLFSSL_KEIL
146134         "adcs	r4, r4, %[r]\n\t"
146135 #elif defined(__clang__)
146136         "adcs	r4, %[r]\n\t"
146137 #else
146138         "adc	r4, %[r]\n\t"
146139 #endif
146140 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146141         "lsrs	r6, %[a], #16\n\t"
146142 #else
146143         "lsr	r6, %[a], #16\n\t"
146144 #endif
146145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146146         "lsrs	r7, %[b], #16\n\t"
146147 #else
146148         "lsr	r7, %[b], #16\n\t"
146149 #endif
146150 #ifdef WOLFSSL_KEIL
146151         "muls	r7, r6, r7\n\t"
146152 #elif defined(__clang__)
146153         "muls	r7, r6\n\t"
146154 #else
146155         "mul	r7, r6\n\t"
146156 #endif
146157 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146158         "adds	r3, r3, r7\n\t"
146159 #else
146160         "add	r3, r3, r7\n\t"
146161 #endif
146162 #ifdef WOLFSSL_KEIL
146163         "adcs	r4, r4, %[r]\n\t"
146164 #elif defined(__clang__)
146165         "adcs	r4, %[r]\n\t"
146166 #else
146167         "adc	r4, %[r]\n\t"
146168 #endif
146169         "uxth	r7, %[b]\n\t"
146170 #ifdef WOLFSSL_KEIL
146171         "muls	r6, r7, r6\n\t"
146172 #elif defined(__clang__)
146173         "muls	r6, r7\n\t"
146174 #else
146175         "mul	r6, r7\n\t"
146176 #endif
146177 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146178         "lsrs	r7, r6, #16\n\t"
146179 #else
146180         "lsr	r7, r6, #16\n\t"
146181 #endif
146182 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146183         "lsls	r6, r6, #16\n\t"
146184 #else
146185         "lsl	r6, r6, #16\n\t"
146186 #endif
146187 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146188         "adds	r5, r5, r6\n\t"
146189 #else
146190         "add	r5, r5, r6\n\t"
146191 #endif
146192 #ifdef WOLFSSL_KEIL
146193         "adcs	r3, r3, r7\n\t"
146194 #elif defined(__clang__)
146195         "adcs	r3, r7\n\t"
146196 #else
146197         "adc	r3, r7\n\t"
146198 #endif
146199 #ifdef WOLFSSL_KEIL
146200         "adcs	r4, r4, %[r]\n\t"
146201 #elif defined(__clang__)
146202         "adcs	r4, %[r]\n\t"
146203 #else
146204         "adc	r4, %[r]\n\t"
146205 #endif
146206         "#  A[5] * B[15]\n\t"
146207         "mov	%[a], r9\n\t"
146208         "mov	%[b], r10\n\t"
146209         "ldr	%[a], [%[a], #20]\n\t"
146210         "ldr	%[b], [%[b], #60]\n\t"
146211         "uxth	r6, %[a]\n\t"
146212         "uxth	r7, %[b]\n\t"
146213 #ifdef WOLFSSL_KEIL
146214         "muls	r7, r6, r7\n\t"
146215 #elif defined(__clang__)
146216         "muls	r7, r6\n\t"
146217 #else
146218         "mul	r7, r6\n\t"
146219 #endif
146220 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146221         "adds	r5, r5, r7\n\t"
146222 #else
146223         "add	r5, r5, r7\n\t"
146224 #endif
146225 #ifdef WOLFSSL_KEIL
146226         "adcs	r3, r3, %[r]\n\t"
146227 #elif defined(__clang__)
146228         "adcs	r3, %[r]\n\t"
146229 #else
146230         "adc	r3, %[r]\n\t"
146231 #endif
146232 #ifdef WOLFSSL_KEIL
146233         "adcs	r4, r4, %[r]\n\t"
146234 #elif defined(__clang__)
146235         "adcs	r4, %[r]\n\t"
146236 #else
146237         "adc	r4, %[r]\n\t"
146238 #endif
146239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146240         "lsrs	r7, %[b], #16\n\t"
146241 #else
146242         "lsr	r7, %[b], #16\n\t"
146243 #endif
146244 #ifdef WOLFSSL_KEIL
146245         "muls	r6, r7, r6\n\t"
146246 #elif defined(__clang__)
146247         "muls	r6, r7\n\t"
146248 #else
146249         "mul	r6, r7\n\t"
146250 #endif
146251 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146252         "lsrs	r7, r6, #16\n\t"
146253 #else
146254         "lsr	r7, r6, #16\n\t"
146255 #endif
146256 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146257         "lsls	r6, r6, #16\n\t"
146258 #else
146259         "lsl	r6, r6, #16\n\t"
146260 #endif
146261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146262         "adds	r5, r5, r6\n\t"
146263 #else
146264         "add	r5, r5, r6\n\t"
146265 #endif
146266 #ifdef WOLFSSL_KEIL
146267         "adcs	r3, r3, r7\n\t"
146268 #elif defined(__clang__)
146269         "adcs	r3, r7\n\t"
146270 #else
146271         "adc	r3, r7\n\t"
146272 #endif
146273 #ifdef WOLFSSL_KEIL
146274         "adcs	r4, r4, %[r]\n\t"
146275 #elif defined(__clang__)
146276         "adcs	r4, %[r]\n\t"
146277 #else
146278         "adc	r4, %[r]\n\t"
146279 #endif
146280 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146281         "lsrs	r6, %[a], #16\n\t"
146282 #else
146283         "lsr	r6, %[a], #16\n\t"
146284 #endif
146285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146286         "lsrs	r7, %[b], #16\n\t"
146287 #else
146288         "lsr	r7, %[b], #16\n\t"
146289 #endif
146290 #ifdef WOLFSSL_KEIL
146291         "muls	r7, r6, r7\n\t"
146292 #elif defined(__clang__)
146293         "muls	r7, r6\n\t"
146294 #else
146295         "mul	r7, r6\n\t"
146296 #endif
146297 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146298         "adds	r3, r3, r7\n\t"
146299 #else
146300         "add	r3, r3, r7\n\t"
146301 #endif
146302 #ifdef WOLFSSL_KEIL
146303         "adcs	r4, r4, %[r]\n\t"
146304 #elif defined(__clang__)
146305         "adcs	r4, %[r]\n\t"
146306 #else
146307         "adc	r4, %[r]\n\t"
146308 #endif
146309         "uxth	r7, %[b]\n\t"
146310 #ifdef WOLFSSL_KEIL
146311         "muls	r6, r7, r6\n\t"
146312 #elif defined(__clang__)
146313         "muls	r6, r7\n\t"
146314 #else
146315         "mul	r6, r7\n\t"
146316 #endif
146317 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146318         "lsrs	r7, r6, #16\n\t"
146319 #else
146320         "lsr	r7, r6, #16\n\t"
146321 #endif
146322 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146323         "lsls	r6, r6, #16\n\t"
146324 #else
146325         "lsl	r6, r6, #16\n\t"
146326 #endif
146327 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146328         "adds	r5, r5, r6\n\t"
146329 #else
146330         "add	r5, r5, r6\n\t"
146331 #endif
146332 #ifdef WOLFSSL_KEIL
146333         "adcs	r3, r3, r7\n\t"
146334 #elif defined(__clang__)
146335         "adcs	r3, r7\n\t"
146336 #else
146337         "adc	r3, r7\n\t"
146338 #endif
146339 #ifdef WOLFSSL_KEIL
146340         "adcs	r4, r4, %[r]\n\t"
146341 #elif defined(__clang__)
146342         "adcs	r4, %[r]\n\t"
146343 #else
146344         "adc	r4, %[r]\n\t"
146345 #endif
146346         "mov	%[r], r8\n\t"
146347         "str	r5, [%[r], #80]\n\t"
146348         "movs	%[r], #0\n\t"
146349         "#  A[6] * B[15]\n\t"
146350         "movs	r5, #0\n\t"
146351         "mov	%[a], r9\n\t"
146352         "mov	%[b], r10\n\t"
146353         "ldr	%[a], [%[a], #24]\n\t"
146354         "ldr	%[b], [%[b], #60]\n\t"
146355         "uxth	r6, %[a]\n\t"
146356         "uxth	r7, %[b]\n\t"
146357 #ifdef WOLFSSL_KEIL
146358         "muls	r7, r6, r7\n\t"
146359 #elif defined(__clang__)
146360         "muls	r7, r6\n\t"
146361 #else
146362         "mul	r7, r6\n\t"
146363 #endif
146364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146365         "adds	r3, r3, r7\n\t"
146366 #else
146367         "add	r3, r3, r7\n\t"
146368 #endif
146369 #ifdef WOLFSSL_KEIL
146370         "adcs	r4, r4, %[r]\n\t"
146371 #elif defined(__clang__)
146372         "adcs	r4, %[r]\n\t"
146373 #else
146374         "adc	r4, %[r]\n\t"
146375 #endif
146376 #ifdef WOLFSSL_KEIL
146377         "adcs	r5, r5, %[r]\n\t"
146378 #elif defined(__clang__)
146379         "adcs	r5, %[r]\n\t"
146380 #else
146381         "adc	r5, %[r]\n\t"
146382 #endif
146383 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146384         "lsrs	r7, %[b], #16\n\t"
146385 #else
146386         "lsr	r7, %[b], #16\n\t"
146387 #endif
146388 #ifdef WOLFSSL_KEIL
146389         "muls	r6, r7, r6\n\t"
146390 #elif defined(__clang__)
146391         "muls	r6, r7\n\t"
146392 #else
146393         "mul	r6, r7\n\t"
146394 #endif
146395 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146396         "lsrs	r7, r6, #16\n\t"
146397 #else
146398         "lsr	r7, r6, #16\n\t"
146399 #endif
146400 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146401         "lsls	r6, r6, #16\n\t"
146402 #else
146403         "lsl	r6, r6, #16\n\t"
146404 #endif
146405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146406         "adds	r3, r3, r6\n\t"
146407 #else
146408         "add	r3, r3, r6\n\t"
146409 #endif
146410 #ifdef WOLFSSL_KEIL
146411         "adcs	r4, r4, r7\n\t"
146412 #elif defined(__clang__)
146413         "adcs	r4, r7\n\t"
146414 #else
146415         "adc	r4, r7\n\t"
146416 #endif
146417 #ifdef WOLFSSL_KEIL
146418         "adcs	r5, r5, %[r]\n\t"
146419 #elif defined(__clang__)
146420         "adcs	r5, %[r]\n\t"
146421 #else
146422         "adc	r5, %[r]\n\t"
146423 #endif
146424 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146425         "lsrs	r6, %[a], #16\n\t"
146426 #else
146427         "lsr	r6, %[a], #16\n\t"
146428 #endif
146429 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146430         "lsrs	r7, %[b], #16\n\t"
146431 #else
146432         "lsr	r7, %[b], #16\n\t"
146433 #endif
146434 #ifdef WOLFSSL_KEIL
146435         "muls	r7, r6, r7\n\t"
146436 #elif defined(__clang__)
146437         "muls	r7, r6\n\t"
146438 #else
146439         "mul	r7, r6\n\t"
146440 #endif
146441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146442         "adds	r4, r4, r7\n\t"
146443 #else
146444         "add	r4, r4, r7\n\t"
146445 #endif
146446 #ifdef WOLFSSL_KEIL
146447         "adcs	r5, r5, %[r]\n\t"
146448 #elif defined(__clang__)
146449         "adcs	r5, %[r]\n\t"
146450 #else
146451         "adc	r5, %[r]\n\t"
146452 #endif
146453         "uxth	r7, %[b]\n\t"
146454 #ifdef WOLFSSL_KEIL
146455         "muls	r6, r7, r6\n\t"
146456 #elif defined(__clang__)
146457         "muls	r6, r7\n\t"
146458 #else
146459         "mul	r6, r7\n\t"
146460 #endif
146461 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146462         "lsrs	r7, r6, #16\n\t"
146463 #else
146464         "lsr	r7, r6, #16\n\t"
146465 #endif
146466 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146467         "lsls	r6, r6, #16\n\t"
146468 #else
146469         "lsl	r6, r6, #16\n\t"
146470 #endif
146471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146472         "adds	r3, r3, r6\n\t"
146473 #else
146474         "add	r3, r3, r6\n\t"
146475 #endif
146476 #ifdef WOLFSSL_KEIL
146477         "adcs	r4, r4, r7\n\t"
146478 #elif defined(__clang__)
146479         "adcs	r4, r7\n\t"
146480 #else
146481         "adc	r4, r7\n\t"
146482 #endif
146483 #ifdef WOLFSSL_KEIL
146484         "adcs	r5, r5, %[r]\n\t"
146485 #elif defined(__clang__)
146486         "adcs	r5, %[r]\n\t"
146487 #else
146488         "adc	r5, %[r]\n\t"
146489 #endif
146490         "#  A[7] * B[14]\n\t"
146491         "mov	%[a], r9\n\t"
146492         "mov	%[b], r10\n\t"
146493         "ldr	%[a], [%[a], #28]\n\t"
146494         "ldr	%[b], [%[b], #56]\n\t"
146495         "uxth	r6, %[a]\n\t"
146496         "uxth	r7, %[b]\n\t"
146497 #ifdef WOLFSSL_KEIL
146498         "muls	r7, r6, r7\n\t"
146499 #elif defined(__clang__)
146500         "muls	r7, r6\n\t"
146501 #else
146502         "mul	r7, r6\n\t"
146503 #endif
146504 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146505         "adds	r3, r3, r7\n\t"
146506 #else
146507         "add	r3, r3, r7\n\t"
146508 #endif
146509 #ifdef WOLFSSL_KEIL
146510         "adcs	r4, r4, %[r]\n\t"
146511 #elif defined(__clang__)
146512         "adcs	r4, %[r]\n\t"
146513 #else
146514         "adc	r4, %[r]\n\t"
146515 #endif
146516 #ifdef WOLFSSL_KEIL
146517         "adcs	r5, r5, %[r]\n\t"
146518 #elif defined(__clang__)
146519         "adcs	r5, %[r]\n\t"
146520 #else
146521         "adc	r5, %[r]\n\t"
146522 #endif
146523 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146524         "lsrs	r7, %[b], #16\n\t"
146525 #else
146526         "lsr	r7, %[b], #16\n\t"
146527 #endif
146528 #ifdef WOLFSSL_KEIL
146529         "muls	r6, r7, r6\n\t"
146530 #elif defined(__clang__)
146531         "muls	r6, r7\n\t"
146532 #else
146533         "mul	r6, r7\n\t"
146534 #endif
146535 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146536         "lsrs	r7, r6, #16\n\t"
146537 #else
146538         "lsr	r7, r6, #16\n\t"
146539 #endif
146540 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146541         "lsls	r6, r6, #16\n\t"
146542 #else
146543         "lsl	r6, r6, #16\n\t"
146544 #endif
146545 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146546         "adds	r3, r3, r6\n\t"
146547 #else
146548         "add	r3, r3, r6\n\t"
146549 #endif
146550 #ifdef WOLFSSL_KEIL
146551         "adcs	r4, r4, r7\n\t"
146552 #elif defined(__clang__)
146553         "adcs	r4, r7\n\t"
146554 #else
146555         "adc	r4, r7\n\t"
146556 #endif
146557 #ifdef WOLFSSL_KEIL
146558         "adcs	r5, r5, %[r]\n\t"
146559 #elif defined(__clang__)
146560         "adcs	r5, %[r]\n\t"
146561 #else
146562         "adc	r5, %[r]\n\t"
146563 #endif
146564 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146565         "lsrs	r6, %[a], #16\n\t"
146566 #else
146567         "lsr	r6, %[a], #16\n\t"
146568 #endif
146569 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146570         "lsrs	r7, %[b], #16\n\t"
146571 #else
146572         "lsr	r7, %[b], #16\n\t"
146573 #endif
146574 #ifdef WOLFSSL_KEIL
146575         "muls	r7, r6, r7\n\t"
146576 #elif defined(__clang__)
146577         "muls	r7, r6\n\t"
146578 #else
146579         "mul	r7, r6\n\t"
146580 #endif
146581 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146582         "adds	r4, r4, r7\n\t"
146583 #else
146584         "add	r4, r4, r7\n\t"
146585 #endif
146586 #ifdef WOLFSSL_KEIL
146587         "adcs	r5, r5, %[r]\n\t"
146588 #elif defined(__clang__)
146589         "adcs	r5, %[r]\n\t"
146590 #else
146591         "adc	r5, %[r]\n\t"
146592 #endif
146593         "uxth	r7, %[b]\n\t"
146594 #ifdef WOLFSSL_KEIL
146595         "muls	r6, r7, r6\n\t"
146596 #elif defined(__clang__)
146597         "muls	r6, r7\n\t"
146598 #else
146599         "mul	r6, r7\n\t"
146600 #endif
146601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146602         "lsrs	r7, r6, #16\n\t"
146603 #else
146604         "lsr	r7, r6, #16\n\t"
146605 #endif
146606 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146607         "lsls	r6, r6, #16\n\t"
146608 #else
146609         "lsl	r6, r6, #16\n\t"
146610 #endif
146611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146612         "adds	r3, r3, r6\n\t"
146613 #else
146614         "add	r3, r3, r6\n\t"
146615 #endif
146616 #ifdef WOLFSSL_KEIL
146617         "adcs	r4, r4, r7\n\t"
146618 #elif defined(__clang__)
146619         "adcs	r4, r7\n\t"
146620 #else
146621         "adc	r4, r7\n\t"
146622 #endif
146623 #ifdef WOLFSSL_KEIL
146624         "adcs	r5, r5, %[r]\n\t"
146625 #elif defined(__clang__)
146626         "adcs	r5, %[r]\n\t"
146627 #else
146628         "adc	r5, %[r]\n\t"
146629 #endif
146630         "#  A[8] * B[13]\n\t"
146631         "mov	%[a], r9\n\t"
146632         "mov	%[b], r10\n\t"
146633         "ldr	%[a], [%[a], #32]\n\t"
146634         "ldr	%[b], [%[b], #52]\n\t"
146635         "uxth	r6, %[a]\n\t"
146636         "uxth	r7, %[b]\n\t"
146637 #ifdef WOLFSSL_KEIL
146638         "muls	r7, r6, r7\n\t"
146639 #elif defined(__clang__)
146640         "muls	r7, r6\n\t"
146641 #else
146642         "mul	r7, r6\n\t"
146643 #endif
146644 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146645         "adds	r3, r3, r7\n\t"
146646 #else
146647         "add	r3, r3, r7\n\t"
146648 #endif
146649 #ifdef WOLFSSL_KEIL
146650         "adcs	r4, r4, %[r]\n\t"
146651 #elif defined(__clang__)
146652         "adcs	r4, %[r]\n\t"
146653 #else
146654         "adc	r4, %[r]\n\t"
146655 #endif
146656 #ifdef WOLFSSL_KEIL
146657         "adcs	r5, r5, %[r]\n\t"
146658 #elif defined(__clang__)
146659         "adcs	r5, %[r]\n\t"
146660 #else
146661         "adc	r5, %[r]\n\t"
146662 #endif
146663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146664         "lsrs	r7, %[b], #16\n\t"
146665 #else
146666         "lsr	r7, %[b], #16\n\t"
146667 #endif
146668 #ifdef WOLFSSL_KEIL
146669         "muls	r6, r7, r6\n\t"
146670 #elif defined(__clang__)
146671         "muls	r6, r7\n\t"
146672 #else
146673         "mul	r6, r7\n\t"
146674 #endif
146675 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146676         "lsrs	r7, r6, #16\n\t"
146677 #else
146678         "lsr	r7, r6, #16\n\t"
146679 #endif
146680 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146681         "lsls	r6, r6, #16\n\t"
146682 #else
146683         "lsl	r6, r6, #16\n\t"
146684 #endif
146685 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146686         "adds	r3, r3, r6\n\t"
146687 #else
146688         "add	r3, r3, r6\n\t"
146689 #endif
146690 #ifdef WOLFSSL_KEIL
146691         "adcs	r4, r4, r7\n\t"
146692 #elif defined(__clang__)
146693         "adcs	r4, r7\n\t"
146694 #else
146695         "adc	r4, r7\n\t"
146696 #endif
146697 #ifdef WOLFSSL_KEIL
146698         "adcs	r5, r5, %[r]\n\t"
146699 #elif defined(__clang__)
146700         "adcs	r5, %[r]\n\t"
146701 #else
146702         "adc	r5, %[r]\n\t"
146703 #endif
146704 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146705         "lsrs	r6, %[a], #16\n\t"
146706 #else
146707         "lsr	r6, %[a], #16\n\t"
146708 #endif
146709 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146710         "lsrs	r7, %[b], #16\n\t"
146711 #else
146712         "lsr	r7, %[b], #16\n\t"
146713 #endif
146714 #ifdef WOLFSSL_KEIL
146715         "muls	r7, r6, r7\n\t"
146716 #elif defined(__clang__)
146717         "muls	r7, r6\n\t"
146718 #else
146719         "mul	r7, r6\n\t"
146720 #endif
146721 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146722         "adds	r4, r4, r7\n\t"
146723 #else
146724         "add	r4, r4, r7\n\t"
146725 #endif
146726 #ifdef WOLFSSL_KEIL
146727         "adcs	r5, r5, %[r]\n\t"
146728 #elif defined(__clang__)
146729         "adcs	r5, %[r]\n\t"
146730 #else
146731         "adc	r5, %[r]\n\t"
146732 #endif
146733         "uxth	r7, %[b]\n\t"
146734 #ifdef WOLFSSL_KEIL
146735         "muls	r6, r7, r6\n\t"
146736 #elif defined(__clang__)
146737         "muls	r6, r7\n\t"
146738 #else
146739         "mul	r6, r7\n\t"
146740 #endif
146741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146742         "lsrs	r7, r6, #16\n\t"
146743 #else
146744         "lsr	r7, r6, #16\n\t"
146745 #endif
146746 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146747         "lsls	r6, r6, #16\n\t"
146748 #else
146749         "lsl	r6, r6, #16\n\t"
146750 #endif
146751 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146752         "adds	r3, r3, r6\n\t"
146753 #else
146754         "add	r3, r3, r6\n\t"
146755 #endif
146756 #ifdef WOLFSSL_KEIL
146757         "adcs	r4, r4, r7\n\t"
146758 #elif defined(__clang__)
146759         "adcs	r4, r7\n\t"
146760 #else
146761         "adc	r4, r7\n\t"
146762 #endif
146763 #ifdef WOLFSSL_KEIL
146764         "adcs	r5, r5, %[r]\n\t"
146765 #elif defined(__clang__)
146766         "adcs	r5, %[r]\n\t"
146767 #else
146768         "adc	r5, %[r]\n\t"
146769 #endif
146770         "#  A[9] * B[12]\n\t"
146771         "mov	%[a], r9\n\t"
146772         "mov	%[b], r10\n\t"
146773         "ldr	%[a], [%[a], #36]\n\t"
146774         "ldr	%[b], [%[b], #48]\n\t"
146775         "uxth	r6, %[a]\n\t"
146776         "uxth	r7, %[b]\n\t"
146777 #ifdef WOLFSSL_KEIL
146778         "muls	r7, r6, r7\n\t"
146779 #elif defined(__clang__)
146780         "muls	r7, r6\n\t"
146781 #else
146782         "mul	r7, r6\n\t"
146783 #endif
146784 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146785         "adds	r3, r3, r7\n\t"
146786 #else
146787         "add	r3, r3, r7\n\t"
146788 #endif
146789 #ifdef WOLFSSL_KEIL
146790         "adcs	r4, r4, %[r]\n\t"
146791 #elif defined(__clang__)
146792         "adcs	r4, %[r]\n\t"
146793 #else
146794         "adc	r4, %[r]\n\t"
146795 #endif
146796 #ifdef WOLFSSL_KEIL
146797         "adcs	r5, r5, %[r]\n\t"
146798 #elif defined(__clang__)
146799         "adcs	r5, %[r]\n\t"
146800 #else
146801         "adc	r5, %[r]\n\t"
146802 #endif
146803 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146804         "lsrs	r7, %[b], #16\n\t"
146805 #else
146806         "lsr	r7, %[b], #16\n\t"
146807 #endif
146808 #ifdef WOLFSSL_KEIL
146809         "muls	r6, r7, r6\n\t"
146810 #elif defined(__clang__)
146811         "muls	r6, r7\n\t"
146812 #else
146813         "mul	r6, r7\n\t"
146814 #endif
146815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146816         "lsrs	r7, r6, #16\n\t"
146817 #else
146818         "lsr	r7, r6, #16\n\t"
146819 #endif
146820 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146821         "lsls	r6, r6, #16\n\t"
146822 #else
146823         "lsl	r6, r6, #16\n\t"
146824 #endif
146825 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146826         "adds	r3, r3, r6\n\t"
146827 #else
146828         "add	r3, r3, r6\n\t"
146829 #endif
146830 #ifdef WOLFSSL_KEIL
146831         "adcs	r4, r4, r7\n\t"
146832 #elif defined(__clang__)
146833         "adcs	r4, r7\n\t"
146834 #else
146835         "adc	r4, r7\n\t"
146836 #endif
146837 #ifdef WOLFSSL_KEIL
146838         "adcs	r5, r5, %[r]\n\t"
146839 #elif defined(__clang__)
146840         "adcs	r5, %[r]\n\t"
146841 #else
146842         "adc	r5, %[r]\n\t"
146843 #endif
146844 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146845         "lsrs	r6, %[a], #16\n\t"
146846 #else
146847         "lsr	r6, %[a], #16\n\t"
146848 #endif
146849 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146850         "lsrs	r7, %[b], #16\n\t"
146851 #else
146852         "lsr	r7, %[b], #16\n\t"
146853 #endif
146854 #ifdef WOLFSSL_KEIL
146855         "muls	r7, r6, r7\n\t"
146856 #elif defined(__clang__)
146857         "muls	r7, r6\n\t"
146858 #else
146859         "mul	r7, r6\n\t"
146860 #endif
146861 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146862         "adds	r4, r4, r7\n\t"
146863 #else
146864         "add	r4, r4, r7\n\t"
146865 #endif
146866 #ifdef WOLFSSL_KEIL
146867         "adcs	r5, r5, %[r]\n\t"
146868 #elif defined(__clang__)
146869         "adcs	r5, %[r]\n\t"
146870 #else
146871         "adc	r5, %[r]\n\t"
146872 #endif
146873         "uxth	r7, %[b]\n\t"
146874 #ifdef WOLFSSL_KEIL
146875         "muls	r6, r7, r6\n\t"
146876 #elif defined(__clang__)
146877         "muls	r6, r7\n\t"
146878 #else
146879         "mul	r6, r7\n\t"
146880 #endif
146881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146882         "lsrs	r7, r6, #16\n\t"
146883 #else
146884         "lsr	r7, r6, #16\n\t"
146885 #endif
146886 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146887         "lsls	r6, r6, #16\n\t"
146888 #else
146889         "lsl	r6, r6, #16\n\t"
146890 #endif
146891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146892         "adds	r3, r3, r6\n\t"
146893 #else
146894         "add	r3, r3, r6\n\t"
146895 #endif
146896 #ifdef WOLFSSL_KEIL
146897         "adcs	r4, r4, r7\n\t"
146898 #elif defined(__clang__)
146899         "adcs	r4, r7\n\t"
146900 #else
146901         "adc	r4, r7\n\t"
146902 #endif
146903 #ifdef WOLFSSL_KEIL
146904         "adcs	r5, r5, %[r]\n\t"
146905 #elif defined(__clang__)
146906         "adcs	r5, %[r]\n\t"
146907 #else
146908         "adc	r5, %[r]\n\t"
146909 #endif
146910         "#  A[10] * B[11]\n\t"
146911         "mov	%[a], r9\n\t"
146912         "mov	%[b], r10\n\t"
146913         "ldr	%[a], [%[a], #40]\n\t"
146914         "ldr	%[b], [%[b], #44]\n\t"
146915         "uxth	r6, %[a]\n\t"
146916         "uxth	r7, %[b]\n\t"
146917 #ifdef WOLFSSL_KEIL
146918         "muls	r7, r6, r7\n\t"
146919 #elif defined(__clang__)
146920         "muls	r7, r6\n\t"
146921 #else
146922         "mul	r7, r6\n\t"
146923 #endif
146924 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146925         "adds	r3, r3, r7\n\t"
146926 #else
146927         "add	r3, r3, r7\n\t"
146928 #endif
146929 #ifdef WOLFSSL_KEIL
146930         "adcs	r4, r4, %[r]\n\t"
146931 #elif defined(__clang__)
146932         "adcs	r4, %[r]\n\t"
146933 #else
146934         "adc	r4, %[r]\n\t"
146935 #endif
146936 #ifdef WOLFSSL_KEIL
146937         "adcs	r5, r5, %[r]\n\t"
146938 #elif defined(__clang__)
146939         "adcs	r5, %[r]\n\t"
146940 #else
146941         "adc	r5, %[r]\n\t"
146942 #endif
146943 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146944         "lsrs	r7, %[b], #16\n\t"
146945 #else
146946         "lsr	r7, %[b], #16\n\t"
146947 #endif
146948 #ifdef WOLFSSL_KEIL
146949         "muls	r6, r7, r6\n\t"
146950 #elif defined(__clang__)
146951         "muls	r6, r7\n\t"
146952 #else
146953         "mul	r6, r7\n\t"
146954 #endif
146955 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146956         "lsrs	r7, r6, #16\n\t"
146957 #else
146958         "lsr	r7, r6, #16\n\t"
146959 #endif
146960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146961         "lsls	r6, r6, #16\n\t"
146962 #else
146963         "lsl	r6, r6, #16\n\t"
146964 #endif
146965 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146966         "adds	r3, r3, r6\n\t"
146967 #else
146968         "add	r3, r3, r6\n\t"
146969 #endif
146970 #ifdef WOLFSSL_KEIL
146971         "adcs	r4, r4, r7\n\t"
146972 #elif defined(__clang__)
146973         "adcs	r4, r7\n\t"
146974 #else
146975         "adc	r4, r7\n\t"
146976 #endif
146977 #ifdef WOLFSSL_KEIL
146978         "adcs	r5, r5, %[r]\n\t"
146979 #elif defined(__clang__)
146980         "adcs	r5, %[r]\n\t"
146981 #else
146982         "adc	r5, %[r]\n\t"
146983 #endif
146984 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146985         "lsrs	r6, %[a], #16\n\t"
146986 #else
146987         "lsr	r6, %[a], #16\n\t"
146988 #endif
146989 #if defined(__clang__) || defined(WOLFSSL_KEIL)
146990         "lsrs	r7, %[b], #16\n\t"
146991 #else
146992         "lsr	r7, %[b], #16\n\t"
146993 #endif
146994 #ifdef WOLFSSL_KEIL
146995         "muls	r7, r6, r7\n\t"
146996 #elif defined(__clang__)
146997         "muls	r7, r6\n\t"
146998 #else
146999         "mul	r7, r6\n\t"
147000 #endif
147001 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147002         "adds	r4, r4, r7\n\t"
147003 #else
147004         "add	r4, r4, r7\n\t"
147005 #endif
147006 #ifdef WOLFSSL_KEIL
147007         "adcs	r5, r5, %[r]\n\t"
147008 #elif defined(__clang__)
147009         "adcs	r5, %[r]\n\t"
147010 #else
147011         "adc	r5, %[r]\n\t"
147012 #endif
147013         "uxth	r7, %[b]\n\t"
147014 #ifdef WOLFSSL_KEIL
147015         "muls	r6, r7, r6\n\t"
147016 #elif defined(__clang__)
147017         "muls	r6, r7\n\t"
147018 #else
147019         "mul	r6, r7\n\t"
147020 #endif
147021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147022         "lsrs	r7, r6, #16\n\t"
147023 #else
147024         "lsr	r7, r6, #16\n\t"
147025 #endif
147026 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147027         "lsls	r6, r6, #16\n\t"
147028 #else
147029         "lsl	r6, r6, #16\n\t"
147030 #endif
147031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147032         "adds	r3, r3, r6\n\t"
147033 #else
147034         "add	r3, r3, r6\n\t"
147035 #endif
147036 #ifdef WOLFSSL_KEIL
147037         "adcs	r4, r4, r7\n\t"
147038 #elif defined(__clang__)
147039         "adcs	r4, r7\n\t"
147040 #else
147041         "adc	r4, r7\n\t"
147042 #endif
147043 #ifdef WOLFSSL_KEIL
147044         "adcs	r5, r5, %[r]\n\t"
147045 #elif defined(__clang__)
147046         "adcs	r5, %[r]\n\t"
147047 #else
147048         "adc	r5, %[r]\n\t"
147049 #endif
147050         "#  A[11] * B[10]\n\t"
147051         "mov	%[a], r9\n\t"
147052         "mov	%[b], r10\n\t"
147053         "ldr	%[a], [%[a], #44]\n\t"
147054         "ldr	%[b], [%[b], #40]\n\t"
147055         "uxth	r6, %[a]\n\t"
147056         "uxth	r7, %[b]\n\t"
147057 #ifdef WOLFSSL_KEIL
147058         "muls	r7, r6, r7\n\t"
147059 #elif defined(__clang__)
147060         "muls	r7, r6\n\t"
147061 #else
147062         "mul	r7, r6\n\t"
147063 #endif
147064 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147065         "adds	r3, r3, r7\n\t"
147066 #else
147067         "add	r3, r3, r7\n\t"
147068 #endif
147069 #ifdef WOLFSSL_KEIL
147070         "adcs	r4, r4, %[r]\n\t"
147071 #elif defined(__clang__)
147072         "adcs	r4, %[r]\n\t"
147073 #else
147074         "adc	r4, %[r]\n\t"
147075 #endif
147076 #ifdef WOLFSSL_KEIL
147077         "adcs	r5, r5, %[r]\n\t"
147078 #elif defined(__clang__)
147079         "adcs	r5, %[r]\n\t"
147080 #else
147081         "adc	r5, %[r]\n\t"
147082 #endif
147083 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147084         "lsrs	r7, %[b], #16\n\t"
147085 #else
147086         "lsr	r7, %[b], #16\n\t"
147087 #endif
147088 #ifdef WOLFSSL_KEIL
147089         "muls	r6, r7, r6\n\t"
147090 #elif defined(__clang__)
147091         "muls	r6, r7\n\t"
147092 #else
147093         "mul	r6, r7\n\t"
147094 #endif
147095 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147096         "lsrs	r7, r6, #16\n\t"
147097 #else
147098         "lsr	r7, r6, #16\n\t"
147099 #endif
147100 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147101         "lsls	r6, r6, #16\n\t"
147102 #else
147103         "lsl	r6, r6, #16\n\t"
147104 #endif
147105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147106         "adds	r3, r3, r6\n\t"
147107 #else
147108         "add	r3, r3, r6\n\t"
147109 #endif
147110 #ifdef WOLFSSL_KEIL
147111         "adcs	r4, r4, r7\n\t"
147112 #elif defined(__clang__)
147113         "adcs	r4, r7\n\t"
147114 #else
147115         "adc	r4, r7\n\t"
147116 #endif
147117 #ifdef WOLFSSL_KEIL
147118         "adcs	r5, r5, %[r]\n\t"
147119 #elif defined(__clang__)
147120         "adcs	r5, %[r]\n\t"
147121 #else
147122         "adc	r5, %[r]\n\t"
147123 #endif
147124 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147125         "lsrs	r6, %[a], #16\n\t"
147126 #else
147127         "lsr	r6, %[a], #16\n\t"
147128 #endif
147129 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147130         "lsrs	r7, %[b], #16\n\t"
147131 #else
147132         "lsr	r7, %[b], #16\n\t"
147133 #endif
147134 #ifdef WOLFSSL_KEIL
147135         "muls	r7, r6, r7\n\t"
147136 #elif defined(__clang__)
147137         "muls	r7, r6\n\t"
147138 #else
147139         "mul	r7, r6\n\t"
147140 #endif
147141 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147142         "adds	r4, r4, r7\n\t"
147143 #else
147144         "add	r4, r4, r7\n\t"
147145 #endif
147146 #ifdef WOLFSSL_KEIL
147147         "adcs	r5, r5, %[r]\n\t"
147148 #elif defined(__clang__)
147149         "adcs	r5, %[r]\n\t"
147150 #else
147151         "adc	r5, %[r]\n\t"
147152 #endif
147153         "uxth	r7, %[b]\n\t"
147154 #ifdef WOLFSSL_KEIL
147155         "muls	r6, r7, r6\n\t"
147156 #elif defined(__clang__)
147157         "muls	r6, r7\n\t"
147158 #else
147159         "mul	r6, r7\n\t"
147160 #endif
147161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147162         "lsrs	r7, r6, #16\n\t"
147163 #else
147164         "lsr	r7, r6, #16\n\t"
147165 #endif
147166 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147167         "lsls	r6, r6, #16\n\t"
147168 #else
147169         "lsl	r6, r6, #16\n\t"
147170 #endif
147171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147172         "adds	r3, r3, r6\n\t"
147173 #else
147174         "add	r3, r3, r6\n\t"
147175 #endif
147176 #ifdef WOLFSSL_KEIL
147177         "adcs	r4, r4, r7\n\t"
147178 #elif defined(__clang__)
147179         "adcs	r4, r7\n\t"
147180 #else
147181         "adc	r4, r7\n\t"
147182 #endif
147183 #ifdef WOLFSSL_KEIL
147184         "adcs	r5, r5, %[r]\n\t"
147185 #elif defined(__clang__)
147186         "adcs	r5, %[r]\n\t"
147187 #else
147188         "adc	r5, %[r]\n\t"
147189 #endif
147190         "#  A[12] * B[9]\n\t"
147191         "mov	%[a], r9\n\t"
147192         "mov	%[b], r10\n\t"
147193         "ldr	%[a], [%[a], #48]\n\t"
147194         "ldr	%[b], [%[b], #36]\n\t"
147195         "uxth	r6, %[a]\n\t"
147196         "uxth	r7, %[b]\n\t"
147197 #ifdef WOLFSSL_KEIL
147198         "muls	r7, r6, r7\n\t"
147199 #elif defined(__clang__)
147200         "muls	r7, r6\n\t"
147201 #else
147202         "mul	r7, r6\n\t"
147203 #endif
147204 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147205         "adds	r3, r3, r7\n\t"
147206 #else
147207         "add	r3, r3, r7\n\t"
147208 #endif
147209 #ifdef WOLFSSL_KEIL
147210         "adcs	r4, r4, %[r]\n\t"
147211 #elif defined(__clang__)
147212         "adcs	r4, %[r]\n\t"
147213 #else
147214         "adc	r4, %[r]\n\t"
147215 #endif
147216 #ifdef WOLFSSL_KEIL
147217         "adcs	r5, r5, %[r]\n\t"
147218 #elif defined(__clang__)
147219         "adcs	r5, %[r]\n\t"
147220 #else
147221         "adc	r5, %[r]\n\t"
147222 #endif
147223 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147224         "lsrs	r7, %[b], #16\n\t"
147225 #else
147226         "lsr	r7, %[b], #16\n\t"
147227 #endif
147228 #ifdef WOLFSSL_KEIL
147229         "muls	r6, r7, r6\n\t"
147230 #elif defined(__clang__)
147231         "muls	r6, r7\n\t"
147232 #else
147233         "mul	r6, r7\n\t"
147234 #endif
147235 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147236         "lsrs	r7, r6, #16\n\t"
147237 #else
147238         "lsr	r7, r6, #16\n\t"
147239 #endif
147240 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147241         "lsls	r6, r6, #16\n\t"
147242 #else
147243         "lsl	r6, r6, #16\n\t"
147244 #endif
147245 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147246         "adds	r3, r3, r6\n\t"
147247 #else
147248         "add	r3, r3, r6\n\t"
147249 #endif
147250 #ifdef WOLFSSL_KEIL
147251         "adcs	r4, r4, r7\n\t"
147252 #elif defined(__clang__)
147253         "adcs	r4, r7\n\t"
147254 #else
147255         "adc	r4, r7\n\t"
147256 #endif
147257 #ifdef WOLFSSL_KEIL
147258         "adcs	r5, r5, %[r]\n\t"
147259 #elif defined(__clang__)
147260         "adcs	r5, %[r]\n\t"
147261 #else
147262         "adc	r5, %[r]\n\t"
147263 #endif
147264 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147265         "lsrs	r6, %[a], #16\n\t"
147266 #else
147267         "lsr	r6, %[a], #16\n\t"
147268 #endif
147269 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147270         "lsrs	r7, %[b], #16\n\t"
147271 #else
147272         "lsr	r7, %[b], #16\n\t"
147273 #endif
147274 #ifdef WOLFSSL_KEIL
147275         "muls	r7, r6, r7\n\t"
147276 #elif defined(__clang__)
147277         "muls	r7, r6\n\t"
147278 #else
147279         "mul	r7, r6\n\t"
147280 #endif
147281 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147282         "adds	r4, r4, r7\n\t"
147283 #else
147284         "add	r4, r4, r7\n\t"
147285 #endif
147286 #ifdef WOLFSSL_KEIL
147287         "adcs	r5, r5, %[r]\n\t"
147288 #elif defined(__clang__)
147289         "adcs	r5, %[r]\n\t"
147290 #else
147291         "adc	r5, %[r]\n\t"
147292 #endif
147293         "uxth	r7, %[b]\n\t"
147294 #ifdef WOLFSSL_KEIL
147295         "muls	r6, r7, r6\n\t"
147296 #elif defined(__clang__)
147297         "muls	r6, r7\n\t"
147298 #else
147299         "mul	r6, r7\n\t"
147300 #endif
147301 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147302         "lsrs	r7, r6, #16\n\t"
147303 #else
147304         "lsr	r7, r6, #16\n\t"
147305 #endif
147306 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147307         "lsls	r6, r6, #16\n\t"
147308 #else
147309         "lsl	r6, r6, #16\n\t"
147310 #endif
147311 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147312         "adds	r3, r3, r6\n\t"
147313 #else
147314         "add	r3, r3, r6\n\t"
147315 #endif
147316 #ifdef WOLFSSL_KEIL
147317         "adcs	r4, r4, r7\n\t"
147318 #elif defined(__clang__)
147319         "adcs	r4, r7\n\t"
147320 #else
147321         "adc	r4, r7\n\t"
147322 #endif
147323 #ifdef WOLFSSL_KEIL
147324         "adcs	r5, r5, %[r]\n\t"
147325 #elif defined(__clang__)
147326         "adcs	r5, %[r]\n\t"
147327 #else
147328         "adc	r5, %[r]\n\t"
147329 #endif
147330         "#  A[13] * B[8]\n\t"
147331         "mov	%[a], r9\n\t"
147332         "mov	%[b], r10\n\t"
147333         "ldr	%[a], [%[a], #52]\n\t"
147334         "ldr	%[b], [%[b], #32]\n\t"
147335         "uxth	r6, %[a]\n\t"
147336         "uxth	r7, %[b]\n\t"
147337 #ifdef WOLFSSL_KEIL
147338         "muls	r7, r6, r7\n\t"
147339 #elif defined(__clang__)
147340         "muls	r7, r6\n\t"
147341 #else
147342         "mul	r7, r6\n\t"
147343 #endif
147344 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147345         "adds	r3, r3, r7\n\t"
147346 #else
147347         "add	r3, r3, r7\n\t"
147348 #endif
147349 #ifdef WOLFSSL_KEIL
147350         "adcs	r4, r4, %[r]\n\t"
147351 #elif defined(__clang__)
147352         "adcs	r4, %[r]\n\t"
147353 #else
147354         "adc	r4, %[r]\n\t"
147355 #endif
147356 #ifdef WOLFSSL_KEIL
147357         "adcs	r5, r5, %[r]\n\t"
147358 #elif defined(__clang__)
147359         "adcs	r5, %[r]\n\t"
147360 #else
147361         "adc	r5, %[r]\n\t"
147362 #endif
147363 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147364         "lsrs	r7, %[b], #16\n\t"
147365 #else
147366         "lsr	r7, %[b], #16\n\t"
147367 #endif
147368 #ifdef WOLFSSL_KEIL
147369         "muls	r6, r7, r6\n\t"
147370 #elif defined(__clang__)
147371         "muls	r6, r7\n\t"
147372 #else
147373         "mul	r6, r7\n\t"
147374 #endif
147375 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147376         "lsrs	r7, r6, #16\n\t"
147377 #else
147378         "lsr	r7, r6, #16\n\t"
147379 #endif
147380 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147381         "lsls	r6, r6, #16\n\t"
147382 #else
147383         "lsl	r6, r6, #16\n\t"
147384 #endif
147385 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147386         "adds	r3, r3, r6\n\t"
147387 #else
147388         "add	r3, r3, r6\n\t"
147389 #endif
147390 #ifdef WOLFSSL_KEIL
147391         "adcs	r4, r4, r7\n\t"
147392 #elif defined(__clang__)
147393         "adcs	r4, r7\n\t"
147394 #else
147395         "adc	r4, r7\n\t"
147396 #endif
147397 #ifdef WOLFSSL_KEIL
147398         "adcs	r5, r5, %[r]\n\t"
147399 #elif defined(__clang__)
147400         "adcs	r5, %[r]\n\t"
147401 #else
147402         "adc	r5, %[r]\n\t"
147403 #endif
147404 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147405         "lsrs	r6, %[a], #16\n\t"
147406 #else
147407         "lsr	r6, %[a], #16\n\t"
147408 #endif
147409 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147410         "lsrs	r7, %[b], #16\n\t"
147411 #else
147412         "lsr	r7, %[b], #16\n\t"
147413 #endif
147414 #ifdef WOLFSSL_KEIL
147415         "muls	r7, r6, r7\n\t"
147416 #elif defined(__clang__)
147417         "muls	r7, r6\n\t"
147418 #else
147419         "mul	r7, r6\n\t"
147420 #endif
147421 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147422         "adds	r4, r4, r7\n\t"
147423 #else
147424         "add	r4, r4, r7\n\t"
147425 #endif
147426 #ifdef WOLFSSL_KEIL
147427         "adcs	r5, r5, %[r]\n\t"
147428 #elif defined(__clang__)
147429         "adcs	r5, %[r]\n\t"
147430 #else
147431         "adc	r5, %[r]\n\t"
147432 #endif
147433         "uxth	r7, %[b]\n\t"
147434 #ifdef WOLFSSL_KEIL
147435         "muls	r6, r7, r6\n\t"
147436 #elif defined(__clang__)
147437         "muls	r6, r7\n\t"
147438 #else
147439         "mul	r6, r7\n\t"
147440 #endif
147441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147442         "lsrs	r7, r6, #16\n\t"
147443 #else
147444         "lsr	r7, r6, #16\n\t"
147445 #endif
147446 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147447         "lsls	r6, r6, #16\n\t"
147448 #else
147449         "lsl	r6, r6, #16\n\t"
147450 #endif
147451 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147452         "adds	r3, r3, r6\n\t"
147453 #else
147454         "add	r3, r3, r6\n\t"
147455 #endif
147456 #ifdef WOLFSSL_KEIL
147457         "adcs	r4, r4, r7\n\t"
147458 #elif defined(__clang__)
147459         "adcs	r4, r7\n\t"
147460 #else
147461         "adc	r4, r7\n\t"
147462 #endif
147463 #ifdef WOLFSSL_KEIL
147464         "adcs	r5, r5, %[r]\n\t"
147465 #elif defined(__clang__)
147466         "adcs	r5, %[r]\n\t"
147467 #else
147468         "adc	r5, %[r]\n\t"
147469 #endif
147470         "#  A[14] * B[7]\n\t"
147471         "mov	%[a], r9\n\t"
147472         "mov	%[b], r10\n\t"
147473         "ldr	%[a], [%[a], #56]\n\t"
147474         "ldr	%[b], [%[b], #28]\n\t"
147475         "uxth	r6, %[a]\n\t"
147476         "uxth	r7, %[b]\n\t"
147477 #ifdef WOLFSSL_KEIL
147478         "muls	r7, r6, r7\n\t"
147479 #elif defined(__clang__)
147480         "muls	r7, r6\n\t"
147481 #else
147482         "mul	r7, r6\n\t"
147483 #endif
147484 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147485         "adds	r3, r3, r7\n\t"
147486 #else
147487         "add	r3, r3, r7\n\t"
147488 #endif
147489 #ifdef WOLFSSL_KEIL
147490         "adcs	r4, r4, %[r]\n\t"
147491 #elif defined(__clang__)
147492         "adcs	r4, %[r]\n\t"
147493 #else
147494         "adc	r4, %[r]\n\t"
147495 #endif
147496 #ifdef WOLFSSL_KEIL
147497         "adcs	r5, r5, %[r]\n\t"
147498 #elif defined(__clang__)
147499         "adcs	r5, %[r]\n\t"
147500 #else
147501         "adc	r5, %[r]\n\t"
147502 #endif
147503 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147504         "lsrs	r7, %[b], #16\n\t"
147505 #else
147506         "lsr	r7, %[b], #16\n\t"
147507 #endif
147508 #ifdef WOLFSSL_KEIL
147509         "muls	r6, r7, r6\n\t"
147510 #elif defined(__clang__)
147511         "muls	r6, r7\n\t"
147512 #else
147513         "mul	r6, r7\n\t"
147514 #endif
147515 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147516         "lsrs	r7, r6, #16\n\t"
147517 #else
147518         "lsr	r7, r6, #16\n\t"
147519 #endif
147520 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147521         "lsls	r6, r6, #16\n\t"
147522 #else
147523         "lsl	r6, r6, #16\n\t"
147524 #endif
147525 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147526         "adds	r3, r3, r6\n\t"
147527 #else
147528         "add	r3, r3, r6\n\t"
147529 #endif
147530 #ifdef WOLFSSL_KEIL
147531         "adcs	r4, r4, r7\n\t"
147532 #elif defined(__clang__)
147533         "adcs	r4, r7\n\t"
147534 #else
147535         "adc	r4, r7\n\t"
147536 #endif
147537 #ifdef WOLFSSL_KEIL
147538         "adcs	r5, r5, %[r]\n\t"
147539 #elif defined(__clang__)
147540         "adcs	r5, %[r]\n\t"
147541 #else
147542         "adc	r5, %[r]\n\t"
147543 #endif
147544 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147545         "lsrs	r6, %[a], #16\n\t"
147546 #else
147547         "lsr	r6, %[a], #16\n\t"
147548 #endif
147549 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147550         "lsrs	r7, %[b], #16\n\t"
147551 #else
147552         "lsr	r7, %[b], #16\n\t"
147553 #endif
147554 #ifdef WOLFSSL_KEIL
147555         "muls	r7, r6, r7\n\t"
147556 #elif defined(__clang__)
147557         "muls	r7, r6\n\t"
147558 #else
147559         "mul	r7, r6\n\t"
147560 #endif
147561 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147562         "adds	r4, r4, r7\n\t"
147563 #else
147564         "add	r4, r4, r7\n\t"
147565 #endif
147566 #ifdef WOLFSSL_KEIL
147567         "adcs	r5, r5, %[r]\n\t"
147568 #elif defined(__clang__)
147569         "adcs	r5, %[r]\n\t"
147570 #else
147571         "adc	r5, %[r]\n\t"
147572 #endif
147573         "uxth	r7, %[b]\n\t"
147574 #ifdef WOLFSSL_KEIL
147575         "muls	r6, r7, r6\n\t"
147576 #elif defined(__clang__)
147577         "muls	r6, r7\n\t"
147578 #else
147579         "mul	r6, r7\n\t"
147580 #endif
147581 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147582         "lsrs	r7, r6, #16\n\t"
147583 #else
147584         "lsr	r7, r6, #16\n\t"
147585 #endif
147586 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147587         "lsls	r6, r6, #16\n\t"
147588 #else
147589         "lsl	r6, r6, #16\n\t"
147590 #endif
147591 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147592         "adds	r3, r3, r6\n\t"
147593 #else
147594         "add	r3, r3, r6\n\t"
147595 #endif
147596 #ifdef WOLFSSL_KEIL
147597         "adcs	r4, r4, r7\n\t"
147598 #elif defined(__clang__)
147599         "adcs	r4, r7\n\t"
147600 #else
147601         "adc	r4, r7\n\t"
147602 #endif
147603 #ifdef WOLFSSL_KEIL
147604         "adcs	r5, r5, %[r]\n\t"
147605 #elif defined(__clang__)
147606         "adcs	r5, %[r]\n\t"
147607 #else
147608         "adc	r5, %[r]\n\t"
147609 #endif
147610         "#  A[15] * B[6]\n\t"
147611         "mov	%[a], r9\n\t"
147612         "mov	%[b], r10\n\t"
147613         "ldr	%[a], [%[a], #60]\n\t"
147614         "ldr	%[b], [%[b], #24]\n\t"
147615         "uxth	r6, %[a]\n\t"
147616         "uxth	r7, %[b]\n\t"
147617 #ifdef WOLFSSL_KEIL
147618         "muls	r7, r6, r7\n\t"
147619 #elif defined(__clang__)
147620         "muls	r7, r6\n\t"
147621 #else
147622         "mul	r7, r6\n\t"
147623 #endif
147624 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147625         "adds	r3, r3, r7\n\t"
147626 #else
147627         "add	r3, r3, r7\n\t"
147628 #endif
147629 #ifdef WOLFSSL_KEIL
147630         "adcs	r4, r4, %[r]\n\t"
147631 #elif defined(__clang__)
147632         "adcs	r4, %[r]\n\t"
147633 #else
147634         "adc	r4, %[r]\n\t"
147635 #endif
147636 #ifdef WOLFSSL_KEIL
147637         "adcs	r5, r5, %[r]\n\t"
147638 #elif defined(__clang__)
147639         "adcs	r5, %[r]\n\t"
147640 #else
147641         "adc	r5, %[r]\n\t"
147642 #endif
147643 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147644         "lsrs	r7, %[b], #16\n\t"
147645 #else
147646         "lsr	r7, %[b], #16\n\t"
147647 #endif
147648 #ifdef WOLFSSL_KEIL
147649         "muls	r6, r7, r6\n\t"
147650 #elif defined(__clang__)
147651         "muls	r6, r7\n\t"
147652 #else
147653         "mul	r6, r7\n\t"
147654 #endif
147655 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147656         "lsrs	r7, r6, #16\n\t"
147657 #else
147658         "lsr	r7, r6, #16\n\t"
147659 #endif
147660 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147661         "lsls	r6, r6, #16\n\t"
147662 #else
147663         "lsl	r6, r6, #16\n\t"
147664 #endif
147665 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147666         "adds	r3, r3, r6\n\t"
147667 #else
147668         "add	r3, r3, r6\n\t"
147669 #endif
147670 #ifdef WOLFSSL_KEIL
147671         "adcs	r4, r4, r7\n\t"
147672 #elif defined(__clang__)
147673         "adcs	r4, r7\n\t"
147674 #else
147675         "adc	r4, r7\n\t"
147676 #endif
147677 #ifdef WOLFSSL_KEIL
147678         "adcs	r5, r5, %[r]\n\t"
147679 #elif defined(__clang__)
147680         "adcs	r5, %[r]\n\t"
147681 #else
147682         "adc	r5, %[r]\n\t"
147683 #endif
147684 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147685         "lsrs	r6, %[a], #16\n\t"
147686 #else
147687         "lsr	r6, %[a], #16\n\t"
147688 #endif
147689 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147690         "lsrs	r7, %[b], #16\n\t"
147691 #else
147692         "lsr	r7, %[b], #16\n\t"
147693 #endif
147694 #ifdef WOLFSSL_KEIL
147695         "muls	r7, r6, r7\n\t"
147696 #elif defined(__clang__)
147697         "muls	r7, r6\n\t"
147698 #else
147699         "mul	r7, r6\n\t"
147700 #endif
147701 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147702         "adds	r4, r4, r7\n\t"
147703 #else
147704         "add	r4, r4, r7\n\t"
147705 #endif
147706 #ifdef WOLFSSL_KEIL
147707         "adcs	r5, r5, %[r]\n\t"
147708 #elif defined(__clang__)
147709         "adcs	r5, %[r]\n\t"
147710 #else
147711         "adc	r5, %[r]\n\t"
147712 #endif
147713         "uxth	r7, %[b]\n\t"
147714 #ifdef WOLFSSL_KEIL
147715         "muls	r6, r7, r6\n\t"
147716 #elif defined(__clang__)
147717         "muls	r6, r7\n\t"
147718 #else
147719         "mul	r6, r7\n\t"
147720 #endif
147721 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147722         "lsrs	r7, r6, #16\n\t"
147723 #else
147724         "lsr	r7, r6, #16\n\t"
147725 #endif
147726 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147727         "lsls	r6, r6, #16\n\t"
147728 #else
147729         "lsl	r6, r6, #16\n\t"
147730 #endif
147731 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147732         "adds	r3, r3, r6\n\t"
147733 #else
147734         "add	r3, r3, r6\n\t"
147735 #endif
147736 #ifdef WOLFSSL_KEIL
147737         "adcs	r4, r4, r7\n\t"
147738 #elif defined(__clang__)
147739         "adcs	r4, r7\n\t"
147740 #else
147741         "adc	r4, r7\n\t"
147742 #endif
147743 #ifdef WOLFSSL_KEIL
147744         "adcs	r5, r5, %[r]\n\t"
147745 #elif defined(__clang__)
147746         "adcs	r5, %[r]\n\t"
147747 #else
147748         "adc	r5, %[r]\n\t"
147749 #endif
147750         "mov	%[r], r8\n\t"
147751         "str	r3, [%[r], #84]\n\t"
147752         "movs	%[r], #0\n\t"
147753         "#  A[15] * B[7]\n\t"
147754         "movs	r3, #0\n\t"
147755         "mov	%[a], r9\n\t"
147756         "mov	%[b], r10\n\t"
147757         "ldr	%[a], [%[a], #60]\n\t"
147758         "ldr	%[b], [%[b], #28]\n\t"
147759         "uxth	r6, %[a]\n\t"
147760         "uxth	r7, %[b]\n\t"
147761 #ifdef WOLFSSL_KEIL
147762         "muls	r7, r6, r7\n\t"
147763 #elif defined(__clang__)
147764         "muls	r7, r6\n\t"
147765 #else
147766         "mul	r7, r6\n\t"
147767 #endif
147768 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147769         "adds	r4, r4, r7\n\t"
147770 #else
147771         "add	r4, r4, r7\n\t"
147772 #endif
147773 #ifdef WOLFSSL_KEIL
147774         "adcs	r5, r5, %[r]\n\t"
147775 #elif defined(__clang__)
147776         "adcs	r5, %[r]\n\t"
147777 #else
147778         "adc	r5, %[r]\n\t"
147779 #endif
147780 #ifdef WOLFSSL_KEIL
147781         "adcs	r3, r3, %[r]\n\t"
147782 #elif defined(__clang__)
147783         "adcs	r3, %[r]\n\t"
147784 #else
147785         "adc	r3, %[r]\n\t"
147786 #endif
147787 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147788         "lsrs	r7, %[b], #16\n\t"
147789 #else
147790         "lsr	r7, %[b], #16\n\t"
147791 #endif
147792 #ifdef WOLFSSL_KEIL
147793         "muls	r6, r7, r6\n\t"
147794 #elif defined(__clang__)
147795         "muls	r6, r7\n\t"
147796 #else
147797         "mul	r6, r7\n\t"
147798 #endif
147799 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147800         "lsrs	r7, r6, #16\n\t"
147801 #else
147802         "lsr	r7, r6, #16\n\t"
147803 #endif
147804 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147805         "lsls	r6, r6, #16\n\t"
147806 #else
147807         "lsl	r6, r6, #16\n\t"
147808 #endif
147809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147810         "adds	r4, r4, r6\n\t"
147811 #else
147812         "add	r4, r4, r6\n\t"
147813 #endif
147814 #ifdef WOLFSSL_KEIL
147815         "adcs	r5, r5, r7\n\t"
147816 #elif defined(__clang__)
147817         "adcs	r5, r7\n\t"
147818 #else
147819         "adc	r5, r7\n\t"
147820 #endif
147821 #ifdef WOLFSSL_KEIL
147822         "adcs	r3, r3, %[r]\n\t"
147823 #elif defined(__clang__)
147824         "adcs	r3, %[r]\n\t"
147825 #else
147826         "adc	r3, %[r]\n\t"
147827 #endif
147828 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147829         "lsrs	r6, %[a], #16\n\t"
147830 #else
147831         "lsr	r6, %[a], #16\n\t"
147832 #endif
147833 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147834         "lsrs	r7, %[b], #16\n\t"
147835 #else
147836         "lsr	r7, %[b], #16\n\t"
147837 #endif
147838 #ifdef WOLFSSL_KEIL
147839         "muls	r7, r6, r7\n\t"
147840 #elif defined(__clang__)
147841         "muls	r7, r6\n\t"
147842 #else
147843         "mul	r7, r6\n\t"
147844 #endif
147845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147846         "adds	r5, r5, r7\n\t"
147847 #else
147848         "add	r5, r5, r7\n\t"
147849 #endif
147850 #ifdef WOLFSSL_KEIL
147851         "adcs	r3, r3, %[r]\n\t"
147852 #elif defined(__clang__)
147853         "adcs	r3, %[r]\n\t"
147854 #else
147855         "adc	r3, %[r]\n\t"
147856 #endif
147857         "uxth	r7, %[b]\n\t"
147858 #ifdef WOLFSSL_KEIL
147859         "muls	r6, r7, r6\n\t"
147860 #elif defined(__clang__)
147861         "muls	r6, r7\n\t"
147862 #else
147863         "mul	r6, r7\n\t"
147864 #endif
147865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147866         "lsrs	r7, r6, #16\n\t"
147867 #else
147868         "lsr	r7, r6, #16\n\t"
147869 #endif
147870 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147871         "lsls	r6, r6, #16\n\t"
147872 #else
147873         "lsl	r6, r6, #16\n\t"
147874 #endif
147875 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147876         "adds	r4, r4, r6\n\t"
147877 #else
147878         "add	r4, r4, r6\n\t"
147879 #endif
147880 #ifdef WOLFSSL_KEIL
147881         "adcs	r5, r5, r7\n\t"
147882 #elif defined(__clang__)
147883         "adcs	r5, r7\n\t"
147884 #else
147885         "adc	r5, r7\n\t"
147886 #endif
147887 #ifdef WOLFSSL_KEIL
147888         "adcs	r3, r3, %[r]\n\t"
147889 #elif defined(__clang__)
147890         "adcs	r3, %[r]\n\t"
147891 #else
147892         "adc	r3, %[r]\n\t"
147893 #endif
147894         "#  A[14] * B[8]\n\t"
147895         "mov	%[a], r9\n\t"
147896         "mov	%[b], r10\n\t"
147897         "ldr	%[a], [%[a], #56]\n\t"
147898         "ldr	%[b], [%[b], #32]\n\t"
147899         "uxth	r6, %[a]\n\t"
147900         "uxth	r7, %[b]\n\t"
147901 #ifdef WOLFSSL_KEIL
147902         "muls	r7, r6, r7\n\t"
147903 #elif defined(__clang__)
147904         "muls	r7, r6\n\t"
147905 #else
147906         "mul	r7, r6\n\t"
147907 #endif
147908 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147909         "adds	r4, r4, r7\n\t"
147910 #else
147911         "add	r4, r4, r7\n\t"
147912 #endif
147913 #ifdef WOLFSSL_KEIL
147914         "adcs	r5, r5, %[r]\n\t"
147915 #elif defined(__clang__)
147916         "adcs	r5, %[r]\n\t"
147917 #else
147918         "adc	r5, %[r]\n\t"
147919 #endif
147920 #ifdef WOLFSSL_KEIL
147921         "adcs	r3, r3, %[r]\n\t"
147922 #elif defined(__clang__)
147923         "adcs	r3, %[r]\n\t"
147924 #else
147925         "adc	r3, %[r]\n\t"
147926 #endif
147927 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147928         "lsrs	r7, %[b], #16\n\t"
147929 #else
147930         "lsr	r7, %[b], #16\n\t"
147931 #endif
147932 #ifdef WOLFSSL_KEIL
147933         "muls	r6, r7, r6\n\t"
147934 #elif defined(__clang__)
147935         "muls	r6, r7\n\t"
147936 #else
147937         "mul	r6, r7\n\t"
147938 #endif
147939 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147940         "lsrs	r7, r6, #16\n\t"
147941 #else
147942         "lsr	r7, r6, #16\n\t"
147943 #endif
147944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147945         "lsls	r6, r6, #16\n\t"
147946 #else
147947         "lsl	r6, r6, #16\n\t"
147948 #endif
147949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147950         "adds	r4, r4, r6\n\t"
147951 #else
147952         "add	r4, r4, r6\n\t"
147953 #endif
147954 #ifdef WOLFSSL_KEIL
147955         "adcs	r5, r5, r7\n\t"
147956 #elif defined(__clang__)
147957         "adcs	r5, r7\n\t"
147958 #else
147959         "adc	r5, r7\n\t"
147960 #endif
147961 #ifdef WOLFSSL_KEIL
147962         "adcs	r3, r3, %[r]\n\t"
147963 #elif defined(__clang__)
147964         "adcs	r3, %[r]\n\t"
147965 #else
147966         "adc	r3, %[r]\n\t"
147967 #endif
147968 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147969         "lsrs	r6, %[a], #16\n\t"
147970 #else
147971         "lsr	r6, %[a], #16\n\t"
147972 #endif
147973 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147974         "lsrs	r7, %[b], #16\n\t"
147975 #else
147976         "lsr	r7, %[b], #16\n\t"
147977 #endif
147978 #ifdef WOLFSSL_KEIL
147979         "muls	r7, r6, r7\n\t"
147980 #elif defined(__clang__)
147981         "muls	r7, r6\n\t"
147982 #else
147983         "mul	r7, r6\n\t"
147984 #endif
147985 #if defined(__clang__) || defined(WOLFSSL_KEIL)
147986         "adds	r5, r5, r7\n\t"
147987 #else
147988         "add	r5, r5, r7\n\t"
147989 #endif
147990 #ifdef WOLFSSL_KEIL
147991         "adcs	r3, r3, %[r]\n\t"
147992 #elif defined(__clang__)
147993         "adcs	r3, %[r]\n\t"
147994 #else
147995         "adc	r3, %[r]\n\t"
147996 #endif
147997         "uxth	r7, %[b]\n\t"
147998 #ifdef WOLFSSL_KEIL
147999         "muls	r6, r7, r6\n\t"
148000 #elif defined(__clang__)
148001         "muls	r6, r7\n\t"
148002 #else
148003         "mul	r6, r7\n\t"
148004 #endif
148005 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148006         "lsrs	r7, r6, #16\n\t"
148007 #else
148008         "lsr	r7, r6, #16\n\t"
148009 #endif
148010 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148011         "lsls	r6, r6, #16\n\t"
148012 #else
148013         "lsl	r6, r6, #16\n\t"
148014 #endif
148015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148016         "adds	r4, r4, r6\n\t"
148017 #else
148018         "add	r4, r4, r6\n\t"
148019 #endif
148020 #ifdef WOLFSSL_KEIL
148021         "adcs	r5, r5, r7\n\t"
148022 #elif defined(__clang__)
148023         "adcs	r5, r7\n\t"
148024 #else
148025         "adc	r5, r7\n\t"
148026 #endif
148027 #ifdef WOLFSSL_KEIL
148028         "adcs	r3, r3, %[r]\n\t"
148029 #elif defined(__clang__)
148030         "adcs	r3, %[r]\n\t"
148031 #else
148032         "adc	r3, %[r]\n\t"
148033 #endif
148034         "#  A[13] * B[9]\n\t"
148035         "mov	%[a], r9\n\t"
148036         "mov	%[b], r10\n\t"
148037         "ldr	%[a], [%[a], #52]\n\t"
148038         "ldr	%[b], [%[b], #36]\n\t"
148039         "uxth	r6, %[a]\n\t"
148040         "uxth	r7, %[b]\n\t"
148041 #ifdef WOLFSSL_KEIL
148042         "muls	r7, r6, r7\n\t"
148043 #elif defined(__clang__)
148044         "muls	r7, r6\n\t"
148045 #else
148046         "mul	r7, r6\n\t"
148047 #endif
148048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148049         "adds	r4, r4, r7\n\t"
148050 #else
148051         "add	r4, r4, r7\n\t"
148052 #endif
148053 #ifdef WOLFSSL_KEIL
148054         "adcs	r5, r5, %[r]\n\t"
148055 #elif defined(__clang__)
148056         "adcs	r5, %[r]\n\t"
148057 #else
148058         "adc	r5, %[r]\n\t"
148059 #endif
148060 #ifdef WOLFSSL_KEIL
148061         "adcs	r3, r3, %[r]\n\t"
148062 #elif defined(__clang__)
148063         "adcs	r3, %[r]\n\t"
148064 #else
148065         "adc	r3, %[r]\n\t"
148066 #endif
148067 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148068         "lsrs	r7, %[b], #16\n\t"
148069 #else
148070         "lsr	r7, %[b], #16\n\t"
148071 #endif
148072 #ifdef WOLFSSL_KEIL
148073         "muls	r6, r7, r6\n\t"
148074 #elif defined(__clang__)
148075         "muls	r6, r7\n\t"
148076 #else
148077         "mul	r6, r7\n\t"
148078 #endif
148079 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148080         "lsrs	r7, r6, #16\n\t"
148081 #else
148082         "lsr	r7, r6, #16\n\t"
148083 #endif
148084 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148085         "lsls	r6, r6, #16\n\t"
148086 #else
148087         "lsl	r6, r6, #16\n\t"
148088 #endif
148089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148090         "adds	r4, r4, r6\n\t"
148091 #else
148092         "add	r4, r4, r6\n\t"
148093 #endif
148094 #ifdef WOLFSSL_KEIL
148095         "adcs	r5, r5, r7\n\t"
148096 #elif defined(__clang__)
148097         "adcs	r5, r7\n\t"
148098 #else
148099         "adc	r5, r7\n\t"
148100 #endif
148101 #ifdef WOLFSSL_KEIL
148102         "adcs	r3, r3, %[r]\n\t"
148103 #elif defined(__clang__)
148104         "adcs	r3, %[r]\n\t"
148105 #else
148106         "adc	r3, %[r]\n\t"
148107 #endif
148108 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148109         "lsrs	r6, %[a], #16\n\t"
148110 #else
148111         "lsr	r6, %[a], #16\n\t"
148112 #endif
148113 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148114         "lsrs	r7, %[b], #16\n\t"
148115 #else
148116         "lsr	r7, %[b], #16\n\t"
148117 #endif
148118 #ifdef WOLFSSL_KEIL
148119         "muls	r7, r6, r7\n\t"
148120 #elif defined(__clang__)
148121         "muls	r7, r6\n\t"
148122 #else
148123         "mul	r7, r6\n\t"
148124 #endif
148125 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148126         "adds	r5, r5, r7\n\t"
148127 #else
148128         "add	r5, r5, r7\n\t"
148129 #endif
148130 #ifdef WOLFSSL_KEIL
148131         "adcs	r3, r3, %[r]\n\t"
148132 #elif defined(__clang__)
148133         "adcs	r3, %[r]\n\t"
148134 #else
148135         "adc	r3, %[r]\n\t"
148136 #endif
148137         "uxth	r7, %[b]\n\t"
148138 #ifdef WOLFSSL_KEIL
148139         "muls	r6, r7, r6\n\t"
148140 #elif defined(__clang__)
148141         "muls	r6, r7\n\t"
148142 #else
148143         "mul	r6, r7\n\t"
148144 #endif
148145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148146         "lsrs	r7, r6, #16\n\t"
148147 #else
148148         "lsr	r7, r6, #16\n\t"
148149 #endif
148150 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148151         "lsls	r6, r6, #16\n\t"
148152 #else
148153         "lsl	r6, r6, #16\n\t"
148154 #endif
148155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148156         "adds	r4, r4, r6\n\t"
148157 #else
148158         "add	r4, r4, r6\n\t"
148159 #endif
148160 #ifdef WOLFSSL_KEIL
148161         "adcs	r5, r5, r7\n\t"
148162 #elif defined(__clang__)
148163         "adcs	r5, r7\n\t"
148164 #else
148165         "adc	r5, r7\n\t"
148166 #endif
148167 #ifdef WOLFSSL_KEIL
148168         "adcs	r3, r3, %[r]\n\t"
148169 #elif defined(__clang__)
148170         "adcs	r3, %[r]\n\t"
148171 #else
148172         "adc	r3, %[r]\n\t"
148173 #endif
148174         "#  A[12] * B[10]\n\t"
148175         "mov	%[a], r9\n\t"
148176         "mov	%[b], r10\n\t"
148177         "ldr	%[a], [%[a], #48]\n\t"
148178         "ldr	%[b], [%[b], #40]\n\t"
148179         "uxth	r6, %[a]\n\t"
148180         "uxth	r7, %[b]\n\t"
148181 #ifdef WOLFSSL_KEIL
148182         "muls	r7, r6, r7\n\t"
148183 #elif defined(__clang__)
148184         "muls	r7, r6\n\t"
148185 #else
148186         "mul	r7, r6\n\t"
148187 #endif
148188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148189         "adds	r4, r4, r7\n\t"
148190 #else
148191         "add	r4, r4, r7\n\t"
148192 #endif
148193 #ifdef WOLFSSL_KEIL
148194         "adcs	r5, r5, %[r]\n\t"
148195 #elif defined(__clang__)
148196         "adcs	r5, %[r]\n\t"
148197 #else
148198         "adc	r5, %[r]\n\t"
148199 #endif
148200 #ifdef WOLFSSL_KEIL
148201         "adcs	r3, r3, %[r]\n\t"
148202 #elif defined(__clang__)
148203         "adcs	r3, %[r]\n\t"
148204 #else
148205         "adc	r3, %[r]\n\t"
148206 #endif
148207 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148208         "lsrs	r7, %[b], #16\n\t"
148209 #else
148210         "lsr	r7, %[b], #16\n\t"
148211 #endif
148212 #ifdef WOLFSSL_KEIL
148213         "muls	r6, r7, r6\n\t"
148214 #elif defined(__clang__)
148215         "muls	r6, r7\n\t"
148216 #else
148217         "mul	r6, r7\n\t"
148218 #endif
148219 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148220         "lsrs	r7, r6, #16\n\t"
148221 #else
148222         "lsr	r7, r6, #16\n\t"
148223 #endif
148224 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148225         "lsls	r6, r6, #16\n\t"
148226 #else
148227         "lsl	r6, r6, #16\n\t"
148228 #endif
148229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148230         "adds	r4, r4, r6\n\t"
148231 #else
148232         "add	r4, r4, r6\n\t"
148233 #endif
148234 #ifdef WOLFSSL_KEIL
148235         "adcs	r5, r5, r7\n\t"
148236 #elif defined(__clang__)
148237         "adcs	r5, r7\n\t"
148238 #else
148239         "adc	r5, r7\n\t"
148240 #endif
148241 #ifdef WOLFSSL_KEIL
148242         "adcs	r3, r3, %[r]\n\t"
148243 #elif defined(__clang__)
148244         "adcs	r3, %[r]\n\t"
148245 #else
148246         "adc	r3, %[r]\n\t"
148247 #endif
148248 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148249         "lsrs	r6, %[a], #16\n\t"
148250 #else
148251         "lsr	r6, %[a], #16\n\t"
148252 #endif
148253 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148254         "lsrs	r7, %[b], #16\n\t"
148255 #else
148256         "lsr	r7, %[b], #16\n\t"
148257 #endif
148258 #ifdef WOLFSSL_KEIL
148259         "muls	r7, r6, r7\n\t"
148260 #elif defined(__clang__)
148261         "muls	r7, r6\n\t"
148262 #else
148263         "mul	r7, r6\n\t"
148264 #endif
148265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148266         "adds	r5, r5, r7\n\t"
148267 #else
148268         "add	r5, r5, r7\n\t"
148269 #endif
148270 #ifdef WOLFSSL_KEIL
148271         "adcs	r3, r3, %[r]\n\t"
148272 #elif defined(__clang__)
148273         "adcs	r3, %[r]\n\t"
148274 #else
148275         "adc	r3, %[r]\n\t"
148276 #endif
148277         "uxth	r7, %[b]\n\t"
148278 #ifdef WOLFSSL_KEIL
148279         "muls	r6, r7, r6\n\t"
148280 #elif defined(__clang__)
148281         "muls	r6, r7\n\t"
148282 #else
148283         "mul	r6, r7\n\t"
148284 #endif
148285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148286         "lsrs	r7, r6, #16\n\t"
148287 #else
148288         "lsr	r7, r6, #16\n\t"
148289 #endif
148290 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148291         "lsls	r6, r6, #16\n\t"
148292 #else
148293         "lsl	r6, r6, #16\n\t"
148294 #endif
148295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148296         "adds	r4, r4, r6\n\t"
148297 #else
148298         "add	r4, r4, r6\n\t"
148299 #endif
148300 #ifdef WOLFSSL_KEIL
148301         "adcs	r5, r5, r7\n\t"
148302 #elif defined(__clang__)
148303         "adcs	r5, r7\n\t"
148304 #else
148305         "adc	r5, r7\n\t"
148306 #endif
148307 #ifdef WOLFSSL_KEIL
148308         "adcs	r3, r3, %[r]\n\t"
148309 #elif defined(__clang__)
148310         "adcs	r3, %[r]\n\t"
148311 #else
148312         "adc	r3, %[r]\n\t"
148313 #endif
148314         "#  A[11] * B[11]\n\t"
148315         "mov	%[a], r9\n\t"
148316         "mov	%[b], r10\n\t"
148317         "ldr	%[a], [%[a], #44]\n\t"
148318         "ldr	%[b], [%[b], #44]\n\t"
148319         "uxth	r6, %[a]\n\t"
148320         "uxth	r7, %[b]\n\t"
148321 #ifdef WOLFSSL_KEIL
148322         "muls	r7, r6, r7\n\t"
148323 #elif defined(__clang__)
148324         "muls	r7, r6\n\t"
148325 #else
148326         "mul	r7, r6\n\t"
148327 #endif
148328 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148329         "adds	r4, r4, r7\n\t"
148330 #else
148331         "add	r4, r4, r7\n\t"
148332 #endif
148333 #ifdef WOLFSSL_KEIL
148334         "adcs	r5, r5, %[r]\n\t"
148335 #elif defined(__clang__)
148336         "adcs	r5, %[r]\n\t"
148337 #else
148338         "adc	r5, %[r]\n\t"
148339 #endif
148340 #ifdef WOLFSSL_KEIL
148341         "adcs	r3, r3, %[r]\n\t"
148342 #elif defined(__clang__)
148343         "adcs	r3, %[r]\n\t"
148344 #else
148345         "adc	r3, %[r]\n\t"
148346 #endif
148347 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148348         "lsrs	r7, %[b], #16\n\t"
148349 #else
148350         "lsr	r7, %[b], #16\n\t"
148351 #endif
148352 #ifdef WOLFSSL_KEIL
148353         "muls	r6, r7, r6\n\t"
148354 #elif defined(__clang__)
148355         "muls	r6, r7\n\t"
148356 #else
148357         "mul	r6, r7\n\t"
148358 #endif
148359 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148360         "lsrs	r7, r6, #16\n\t"
148361 #else
148362         "lsr	r7, r6, #16\n\t"
148363 #endif
148364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148365         "lsls	r6, r6, #16\n\t"
148366 #else
148367         "lsl	r6, r6, #16\n\t"
148368 #endif
148369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148370         "adds	r4, r4, r6\n\t"
148371 #else
148372         "add	r4, r4, r6\n\t"
148373 #endif
148374 #ifdef WOLFSSL_KEIL
148375         "adcs	r5, r5, r7\n\t"
148376 #elif defined(__clang__)
148377         "adcs	r5, r7\n\t"
148378 #else
148379         "adc	r5, r7\n\t"
148380 #endif
148381 #ifdef WOLFSSL_KEIL
148382         "adcs	r3, r3, %[r]\n\t"
148383 #elif defined(__clang__)
148384         "adcs	r3, %[r]\n\t"
148385 #else
148386         "adc	r3, %[r]\n\t"
148387 #endif
148388 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148389         "lsrs	r6, %[a], #16\n\t"
148390 #else
148391         "lsr	r6, %[a], #16\n\t"
148392 #endif
148393 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148394         "lsrs	r7, %[b], #16\n\t"
148395 #else
148396         "lsr	r7, %[b], #16\n\t"
148397 #endif
148398 #ifdef WOLFSSL_KEIL
148399         "muls	r7, r6, r7\n\t"
148400 #elif defined(__clang__)
148401         "muls	r7, r6\n\t"
148402 #else
148403         "mul	r7, r6\n\t"
148404 #endif
148405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148406         "adds	r5, r5, r7\n\t"
148407 #else
148408         "add	r5, r5, r7\n\t"
148409 #endif
148410 #ifdef WOLFSSL_KEIL
148411         "adcs	r3, r3, %[r]\n\t"
148412 #elif defined(__clang__)
148413         "adcs	r3, %[r]\n\t"
148414 #else
148415         "adc	r3, %[r]\n\t"
148416 #endif
148417         "uxth	r7, %[b]\n\t"
148418 #ifdef WOLFSSL_KEIL
148419         "muls	r6, r7, r6\n\t"
148420 #elif defined(__clang__)
148421         "muls	r6, r7\n\t"
148422 #else
148423         "mul	r6, r7\n\t"
148424 #endif
148425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148426         "lsrs	r7, r6, #16\n\t"
148427 #else
148428         "lsr	r7, r6, #16\n\t"
148429 #endif
148430 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148431         "lsls	r6, r6, #16\n\t"
148432 #else
148433         "lsl	r6, r6, #16\n\t"
148434 #endif
148435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148436         "adds	r4, r4, r6\n\t"
148437 #else
148438         "add	r4, r4, r6\n\t"
148439 #endif
148440 #ifdef WOLFSSL_KEIL
148441         "adcs	r5, r5, r7\n\t"
148442 #elif defined(__clang__)
148443         "adcs	r5, r7\n\t"
148444 #else
148445         "adc	r5, r7\n\t"
148446 #endif
148447 #ifdef WOLFSSL_KEIL
148448         "adcs	r3, r3, %[r]\n\t"
148449 #elif defined(__clang__)
148450         "adcs	r3, %[r]\n\t"
148451 #else
148452         "adc	r3, %[r]\n\t"
148453 #endif
148454         "#  A[10] * B[12]\n\t"
148455         "mov	%[a], r9\n\t"
148456         "mov	%[b], r10\n\t"
148457         "ldr	%[a], [%[a], #40]\n\t"
148458         "ldr	%[b], [%[b], #48]\n\t"
148459         "uxth	r6, %[a]\n\t"
148460         "uxth	r7, %[b]\n\t"
148461 #ifdef WOLFSSL_KEIL
148462         "muls	r7, r6, r7\n\t"
148463 #elif defined(__clang__)
148464         "muls	r7, r6\n\t"
148465 #else
148466         "mul	r7, r6\n\t"
148467 #endif
148468 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148469         "adds	r4, r4, r7\n\t"
148470 #else
148471         "add	r4, r4, r7\n\t"
148472 #endif
148473 #ifdef WOLFSSL_KEIL
148474         "adcs	r5, r5, %[r]\n\t"
148475 #elif defined(__clang__)
148476         "adcs	r5, %[r]\n\t"
148477 #else
148478         "adc	r5, %[r]\n\t"
148479 #endif
148480 #ifdef WOLFSSL_KEIL
148481         "adcs	r3, r3, %[r]\n\t"
148482 #elif defined(__clang__)
148483         "adcs	r3, %[r]\n\t"
148484 #else
148485         "adc	r3, %[r]\n\t"
148486 #endif
148487 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148488         "lsrs	r7, %[b], #16\n\t"
148489 #else
148490         "lsr	r7, %[b], #16\n\t"
148491 #endif
148492 #ifdef WOLFSSL_KEIL
148493         "muls	r6, r7, r6\n\t"
148494 #elif defined(__clang__)
148495         "muls	r6, r7\n\t"
148496 #else
148497         "mul	r6, r7\n\t"
148498 #endif
148499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148500         "lsrs	r7, r6, #16\n\t"
148501 #else
148502         "lsr	r7, r6, #16\n\t"
148503 #endif
148504 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148505         "lsls	r6, r6, #16\n\t"
148506 #else
148507         "lsl	r6, r6, #16\n\t"
148508 #endif
148509 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148510         "adds	r4, r4, r6\n\t"
148511 #else
148512         "add	r4, r4, r6\n\t"
148513 #endif
148514 #ifdef WOLFSSL_KEIL
148515         "adcs	r5, r5, r7\n\t"
148516 #elif defined(__clang__)
148517         "adcs	r5, r7\n\t"
148518 #else
148519         "adc	r5, r7\n\t"
148520 #endif
148521 #ifdef WOLFSSL_KEIL
148522         "adcs	r3, r3, %[r]\n\t"
148523 #elif defined(__clang__)
148524         "adcs	r3, %[r]\n\t"
148525 #else
148526         "adc	r3, %[r]\n\t"
148527 #endif
148528 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148529         "lsrs	r6, %[a], #16\n\t"
148530 #else
148531         "lsr	r6, %[a], #16\n\t"
148532 #endif
148533 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148534         "lsrs	r7, %[b], #16\n\t"
148535 #else
148536         "lsr	r7, %[b], #16\n\t"
148537 #endif
148538 #ifdef WOLFSSL_KEIL
148539         "muls	r7, r6, r7\n\t"
148540 #elif defined(__clang__)
148541         "muls	r7, r6\n\t"
148542 #else
148543         "mul	r7, r6\n\t"
148544 #endif
148545 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148546         "adds	r5, r5, r7\n\t"
148547 #else
148548         "add	r5, r5, r7\n\t"
148549 #endif
148550 #ifdef WOLFSSL_KEIL
148551         "adcs	r3, r3, %[r]\n\t"
148552 #elif defined(__clang__)
148553         "adcs	r3, %[r]\n\t"
148554 #else
148555         "adc	r3, %[r]\n\t"
148556 #endif
148557         "uxth	r7, %[b]\n\t"
148558 #ifdef WOLFSSL_KEIL
148559         "muls	r6, r7, r6\n\t"
148560 #elif defined(__clang__)
148561         "muls	r6, r7\n\t"
148562 #else
148563         "mul	r6, r7\n\t"
148564 #endif
148565 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148566         "lsrs	r7, r6, #16\n\t"
148567 #else
148568         "lsr	r7, r6, #16\n\t"
148569 #endif
148570 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148571         "lsls	r6, r6, #16\n\t"
148572 #else
148573         "lsl	r6, r6, #16\n\t"
148574 #endif
148575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148576         "adds	r4, r4, r6\n\t"
148577 #else
148578         "add	r4, r4, r6\n\t"
148579 #endif
148580 #ifdef WOLFSSL_KEIL
148581         "adcs	r5, r5, r7\n\t"
148582 #elif defined(__clang__)
148583         "adcs	r5, r7\n\t"
148584 #else
148585         "adc	r5, r7\n\t"
148586 #endif
148587 #ifdef WOLFSSL_KEIL
148588         "adcs	r3, r3, %[r]\n\t"
148589 #elif defined(__clang__)
148590         "adcs	r3, %[r]\n\t"
148591 #else
148592         "adc	r3, %[r]\n\t"
148593 #endif
148594         "#  A[9] * B[13]\n\t"
148595         "mov	%[a], r9\n\t"
148596         "mov	%[b], r10\n\t"
148597         "ldr	%[a], [%[a], #36]\n\t"
148598         "ldr	%[b], [%[b], #52]\n\t"
148599         "uxth	r6, %[a]\n\t"
148600         "uxth	r7, %[b]\n\t"
148601 #ifdef WOLFSSL_KEIL
148602         "muls	r7, r6, r7\n\t"
148603 #elif defined(__clang__)
148604         "muls	r7, r6\n\t"
148605 #else
148606         "mul	r7, r6\n\t"
148607 #endif
148608 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148609         "adds	r4, r4, r7\n\t"
148610 #else
148611         "add	r4, r4, r7\n\t"
148612 #endif
148613 #ifdef WOLFSSL_KEIL
148614         "adcs	r5, r5, %[r]\n\t"
148615 #elif defined(__clang__)
148616         "adcs	r5, %[r]\n\t"
148617 #else
148618         "adc	r5, %[r]\n\t"
148619 #endif
148620 #ifdef WOLFSSL_KEIL
148621         "adcs	r3, r3, %[r]\n\t"
148622 #elif defined(__clang__)
148623         "adcs	r3, %[r]\n\t"
148624 #else
148625         "adc	r3, %[r]\n\t"
148626 #endif
148627 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148628         "lsrs	r7, %[b], #16\n\t"
148629 #else
148630         "lsr	r7, %[b], #16\n\t"
148631 #endif
148632 #ifdef WOLFSSL_KEIL
148633         "muls	r6, r7, r6\n\t"
148634 #elif defined(__clang__)
148635         "muls	r6, r7\n\t"
148636 #else
148637         "mul	r6, r7\n\t"
148638 #endif
148639 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148640         "lsrs	r7, r6, #16\n\t"
148641 #else
148642         "lsr	r7, r6, #16\n\t"
148643 #endif
148644 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148645         "lsls	r6, r6, #16\n\t"
148646 #else
148647         "lsl	r6, r6, #16\n\t"
148648 #endif
148649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148650         "adds	r4, r4, r6\n\t"
148651 #else
148652         "add	r4, r4, r6\n\t"
148653 #endif
148654 #ifdef WOLFSSL_KEIL
148655         "adcs	r5, r5, r7\n\t"
148656 #elif defined(__clang__)
148657         "adcs	r5, r7\n\t"
148658 #else
148659         "adc	r5, r7\n\t"
148660 #endif
148661 #ifdef WOLFSSL_KEIL
148662         "adcs	r3, r3, %[r]\n\t"
148663 #elif defined(__clang__)
148664         "adcs	r3, %[r]\n\t"
148665 #else
148666         "adc	r3, %[r]\n\t"
148667 #endif
148668 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148669         "lsrs	r6, %[a], #16\n\t"
148670 #else
148671         "lsr	r6, %[a], #16\n\t"
148672 #endif
148673 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148674         "lsrs	r7, %[b], #16\n\t"
148675 #else
148676         "lsr	r7, %[b], #16\n\t"
148677 #endif
148678 #ifdef WOLFSSL_KEIL
148679         "muls	r7, r6, r7\n\t"
148680 #elif defined(__clang__)
148681         "muls	r7, r6\n\t"
148682 #else
148683         "mul	r7, r6\n\t"
148684 #endif
148685 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148686         "adds	r5, r5, r7\n\t"
148687 #else
148688         "add	r5, r5, r7\n\t"
148689 #endif
148690 #ifdef WOLFSSL_KEIL
148691         "adcs	r3, r3, %[r]\n\t"
148692 #elif defined(__clang__)
148693         "adcs	r3, %[r]\n\t"
148694 #else
148695         "adc	r3, %[r]\n\t"
148696 #endif
148697         "uxth	r7, %[b]\n\t"
148698 #ifdef WOLFSSL_KEIL
148699         "muls	r6, r7, r6\n\t"
148700 #elif defined(__clang__)
148701         "muls	r6, r7\n\t"
148702 #else
148703         "mul	r6, r7\n\t"
148704 #endif
148705 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148706         "lsrs	r7, r6, #16\n\t"
148707 #else
148708         "lsr	r7, r6, #16\n\t"
148709 #endif
148710 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148711         "lsls	r6, r6, #16\n\t"
148712 #else
148713         "lsl	r6, r6, #16\n\t"
148714 #endif
148715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148716         "adds	r4, r4, r6\n\t"
148717 #else
148718         "add	r4, r4, r6\n\t"
148719 #endif
148720 #ifdef WOLFSSL_KEIL
148721         "adcs	r5, r5, r7\n\t"
148722 #elif defined(__clang__)
148723         "adcs	r5, r7\n\t"
148724 #else
148725         "adc	r5, r7\n\t"
148726 #endif
148727 #ifdef WOLFSSL_KEIL
148728         "adcs	r3, r3, %[r]\n\t"
148729 #elif defined(__clang__)
148730         "adcs	r3, %[r]\n\t"
148731 #else
148732         "adc	r3, %[r]\n\t"
148733 #endif
148734         "#  A[8] * B[14]\n\t"
148735         "mov	%[a], r9\n\t"
148736         "mov	%[b], r10\n\t"
148737         "ldr	%[a], [%[a], #32]\n\t"
148738         "ldr	%[b], [%[b], #56]\n\t"
148739         "uxth	r6, %[a]\n\t"
148740         "uxth	r7, %[b]\n\t"
148741 #ifdef WOLFSSL_KEIL
148742         "muls	r7, r6, r7\n\t"
148743 #elif defined(__clang__)
148744         "muls	r7, r6\n\t"
148745 #else
148746         "mul	r7, r6\n\t"
148747 #endif
148748 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148749         "adds	r4, r4, r7\n\t"
148750 #else
148751         "add	r4, r4, r7\n\t"
148752 #endif
148753 #ifdef WOLFSSL_KEIL
148754         "adcs	r5, r5, %[r]\n\t"
148755 #elif defined(__clang__)
148756         "adcs	r5, %[r]\n\t"
148757 #else
148758         "adc	r5, %[r]\n\t"
148759 #endif
148760 #ifdef WOLFSSL_KEIL
148761         "adcs	r3, r3, %[r]\n\t"
148762 #elif defined(__clang__)
148763         "adcs	r3, %[r]\n\t"
148764 #else
148765         "adc	r3, %[r]\n\t"
148766 #endif
148767 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148768         "lsrs	r7, %[b], #16\n\t"
148769 #else
148770         "lsr	r7, %[b], #16\n\t"
148771 #endif
148772 #ifdef WOLFSSL_KEIL
148773         "muls	r6, r7, r6\n\t"
148774 #elif defined(__clang__)
148775         "muls	r6, r7\n\t"
148776 #else
148777         "mul	r6, r7\n\t"
148778 #endif
148779 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148780         "lsrs	r7, r6, #16\n\t"
148781 #else
148782         "lsr	r7, r6, #16\n\t"
148783 #endif
148784 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148785         "lsls	r6, r6, #16\n\t"
148786 #else
148787         "lsl	r6, r6, #16\n\t"
148788 #endif
148789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148790         "adds	r4, r4, r6\n\t"
148791 #else
148792         "add	r4, r4, r6\n\t"
148793 #endif
148794 #ifdef WOLFSSL_KEIL
148795         "adcs	r5, r5, r7\n\t"
148796 #elif defined(__clang__)
148797         "adcs	r5, r7\n\t"
148798 #else
148799         "adc	r5, r7\n\t"
148800 #endif
148801 #ifdef WOLFSSL_KEIL
148802         "adcs	r3, r3, %[r]\n\t"
148803 #elif defined(__clang__)
148804         "adcs	r3, %[r]\n\t"
148805 #else
148806         "adc	r3, %[r]\n\t"
148807 #endif
148808 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148809         "lsrs	r6, %[a], #16\n\t"
148810 #else
148811         "lsr	r6, %[a], #16\n\t"
148812 #endif
148813 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148814         "lsrs	r7, %[b], #16\n\t"
148815 #else
148816         "lsr	r7, %[b], #16\n\t"
148817 #endif
148818 #ifdef WOLFSSL_KEIL
148819         "muls	r7, r6, r7\n\t"
148820 #elif defined(__clang__)
148821         "muls	r7, r6\n\t"
148822 #else
148823         "mul	r7, r6\n\t"
148824 #endif
148825 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148826         "adds	r5, r5, r7\n\t"
148827 #else
148828         "add	r5, r5, r7\n\t"
148829 #endif
148830 #ifdef WOLFSSL_KEIL
148831         "adcs	r3, r3, %[r]\n\t"
148832 #elif defined(__clang__)
148833         "adcs	r3, %[r]\n\t"
148834 #else
148835         "adc	r3, %[r]\n\t"
148836 #endif
148837         "uxth	r7, %[b]\n\t"
148838 #ifdef WOLFSSL_KEIL
148839         "muls	r6, r7, r6\n\t"
148840 #elif defined(__clang__)
148841         "muls	r6, r7\n\t"
148842 #else
148843         "mul	r6, r7\n\t"
148844 #endif
148845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148846         "lsrs	r7, r6, #16\n\t"
148847 #else
148848         "lsr	r7, r6, #16\n\t"
148849 #endif
148850 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148851         "lsls	r6, r6, #16\n\t"
148852 #else
148853         "lsl	r6, r6, #16\n\t"
148854 #endif
148855 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148856         "adds	r4, r4, r6\n\t"
148857 #else
148858         "add	r4, r4, r6\n\t"
148859 #endif
148860 #ifdef WOLFSSL_KEIL
148861         "adcs	r5, r5, r7\n\t"
148862 #elif defined(__clang__)
148863         "adcs	r5, r7\n\t"
148864 #else
148865         "adc	r5, r7\n\t"
148866 #endif
148867 #ifdef WOLFSSL_KEIL
148868         "adcs	r3, r3, %[r]\n\t"
148869 #elif defined(__clang__)
148870         "adcs	r3, %[r]\n\t"
148871 #else
148872         "adc	r3, %[r]\n\t"
148873 #endif
148874         "#  A[7] * B[15]\n\t"
148875         "mov	%[a], r9\n\t"
148876         "mov	%[b], r10\n\t"
148877         "ldr	%[a], [%[a], #28]\n\t"
148878         "ldr	%[b], [%[b], #60]\n\t"
148879         "uxth	r6, %[a]\n\t"
148880         "uxth	r7, %[b]\n\t"
148881 #ifdef WOLFSSL_KEIL
148882         "muls	r7, r6, r7\n\t"
148883 #elif defined(__clang__)
148884         "muls	r7, r6\n\t"
148885 #else
148886         "mul	r7, r6\n\t"
148887 #endif
148888 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148889         "adds	r4, r4, r7\n\t"
148890 #else
148891         "add	r4, r4, r7\n\t"
148892 #endif
148893 #ifdef WOLFSSL_KEIL
148894         "adcs	r5, r5, %[r]\n\t"
148895 #elif defined(__clang__)
148896         "adcs	r5, %[r]\n\t"
148897 #else
148898         "adc	r5, %[r]\n\t"
148899 #endif
148900 #ifdef WOLFSSL_KEIL
148901         "adcs	r3, r3, %[r]\n\t"
148902 #elif defined(__clang__)
148903         "adcs	r3, %[r]\n\t"
148904 #else
148905         "adc	r3, %[r]\n\t"
148906 #endif
148907 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148908         "lsrs	r7, %[b], #16\n\t"
148909 #else
148910         "lsr	r7, %[b], #16\n\t"
148911 #endif
148912 #ifdef WOLFSSL_KEIL
148913         "muls	r6, r7, r6\n\t"
148914 #elif defined(__clang__)
148915         "muls	r6, r7\n\t"
148916 #else
148917         "mul	r6, r7\n\t"
148918 #endif
148919 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148920         "lsrs	r7, r6, #16\n\t"
148921 #else
148922         "lsr	r7, r6, #16\n\t"
148923 #endif
148924 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148925         "lsls	r6, r6, #16\n\t"
148926 #else
148927         "lsl	r6, r6, #16\n\t"
148928 #endif
148929 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148930         "adds	r4, r4, r6\n\t"
148931 #else
148932         "add	r4, r4, r6\n\t"
148933 #endif
148934 #ifdef WOLFSSL_KEIL
148935         "adcs	r5, r5, r7\n\t"
148936 #elif defined(__clang__)
148937         "adcs	r5, r7\n\t"
148938 #else
148939         "adc	r5, r7\n\t"
148940 #endif
148941 #ifdef WOLFSSL_KEIL
148942         "adcs	r3, r3, %[r]\n\t"
148943 #elif defined(__clang__)
148944         "adcs	r3, %[r]\n\t"
148945 #else
148946         "adc	r3, %[r]\n\t"
148947 #endif
148948 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148949         "lsrs	r6, %[a], #16\n\t"
148950 #else
148951         "lsr	r6, %[a], #16\n\t"
148952 #endif
148953 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148954         "lsrs	r7, %[b], #16\n\t"
148955 #else
148956         "lsr	r7, %[b], #16\n\t"
148957 #endif
148958 #ifdef WOLFSSL_KEIL
148959         "muls	r7, r6, r7\n\t"
148960 #elif defined(__clang__)
148961         "muls	r7, r6\n\t"
148962 #else
148963         "mul	r7, r6\n\t"
148964 #endif
148965 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148966         "adds	r5, r5, r7\n\t"
148967 #else
148968         "add	r5, r5, r7\n\t"
148969 #endif
148970 #ifdef WOLFSSL_KEIL
148971         "adcs	r3, r3, %[r]\n\t"
148972 #elif defined(__clang__)
148973         "adcs	r3, %[r]\n\t"
148974 #else
148975         "adc	r3, %[r]\n\t"
148976 #endif
148977         "uxth	r7, %[b]\n\t"
148978 #ifdef WOLFSSL_KEIL
148979         "muls	r6, r7, r6\n\t"
148980 #elif defined(__clang__)
148981         "muls	r6, r7\n\t"
148982 #else
148983         "mul	r6, r7\n\t"
148984 #endif
148985 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148986         "lsrs	r7, r6, #16\n\t"
148987 #else
148988         "lsr	r7, r6, #16\n\t"
148989 #endif
148990 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148991         "lsls	r6, r6, #16\n\t"
148992 #else
148993         "lsl	r6, r6, #16\n\t"
148994 #endif
148995 #if defined(__clang__) || defined(WOLFSSL_KEIL)
148996         "adds	r4, r4, r6\n\t"
148997 #else
148998         "add	r4, r4, r6\n\t"
148999 #endif
149000 #ifdef WOLFSSL_KEIL
149001         "adcs	r5, r5, r7\n\t"
149002 #elif defined(__clang__)
149003         "adcs	r5, r7\n\t"
149004 #else
149005         "adc	r5, r7\n\t"
149006 #endif
149007 #ifdef WOLFSSL_KEIL
149008         "adcs	r3, r3, %[r]\n\t"
149009 #elif defined(__clang__)
149010         "adcs	r3, %[r]\n\t"
149011 #else
149012         "adc	r3, %[r]\n\t"
149013 #endif
149014         "mov	%[r], r8\n\t"
149015         "str	r4, [%[r], #88]\n\t"
149016         "movs	%[r], #0\n\t"
149017         "#  A[8] * B[15]\n\t"
149018         "movs	r4, #0\n\t"
149019         "mov	%[a], r9\n\t"
149020         "mov	%[b], r10\n\t"
149021         "ldr	%[a], [%[a], #32]\n\t"
149022         "ldr	%[b], [%[b], #60]\n\t"
149023         "uxth	r6, %[a]\n\t"
149024         "uxth	r7, %[b]\n\t"
149025 #ifdef WOLFSSL_KEIL
149026         "muls	r7, r6, r7\n\t"
149027 #elif defined(__clang__)
149028         "muls	r7, r6\n\t"
149029 #else
149030         "mul	r7, r6\n\t"
149031 #endif
149032 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149033         "adds	r5, r5, r7\n\t"
149034 #else
149035         "add	r5, r5, r7\n\t"
149036 #endif
149037 #ifdef WOLFSSL_KEIL
149038         "adcs	r3, r3, %[r]\n\t"
149039 #elif defined(__clang__)
149040         "adcs	r3, %[r]\n\t"
149041 #else
149042         "adc	r3, %[r]\n\t"
149043 #endif
149044 #ifdef WOLFSSL_KEIL
149045         "adcs	r4, r4, %[r]\n\t"
149046 #elif defined(__clang__)
149047         "adcs	r4, %[r]\n\t"
149048 #else
149049         "adc	r4, %[r]\n\t"
149050 #endif
149051 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149052         "lsrs	r7, %[b], #16\n\t"
149053 #else
149054         "lsr	r7, %[b], #16\n\t"
149055 #endif
149056 #ifdef WOLFSSL_KEIL
149057         "muls	r6, r7, r6\n\t"
149058 #elif defined(__clang__)
149059         "muls	r6, r7\n\t"
149060 #else
149061         "mul	r6, r7\n\t"
149062 #endif
149063 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149064         "lsrs	r7, r6, #16\n\t"
149065 #else
149066         "lsr	r7, r6, #16\n\t"
149067 #endif
149068 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149069         "lsls	r6, r6, #16\n\t"
149070 #else
149071         "lsl	r6, r6, #16\n\t"
149072 #endif
149073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149074         "adds	r5, r5, r6\n\t"
149075 #else
149076         "add	r5, r5, r6\n\t"
149077 #endif
149078 #ifdef WOLFSSL_KEIL
149079         "adcs	r3, r3, r7\n\t"
149080 #elif defined(__clang__)
149081         "adcs	r3, r7\n\t"
149082 #else
149083         "adc	r3, r7\n\t"
149084 #endif
149085 #ifdef WOLFSSL_KEIL
149086         "adcs	r4, r4, %[r]\n\t"
149087 #elif defined(__clang__)
149088         "adcs	r4, %[r]\n\t"
149089 #else
149090         "adc	r4, %[r]\n\t"
149091 #endif
149092 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149093         "lsrs	r6, %[a], #16\n\t"
149094 #else
149095         "lsr	r6, %[a], #16\n\t"
149096 #endif
149097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149098         "lsrs	r7, %[b], #16\n\t"
149099 #else
149100         "lsr	r7, %[b], #16\n\t"
149101 #endif
149102 #ifdef WOLFSSL_KEIL
149103         "muls	r7, r6, r7\n\t"
149104 #elif defined(__clang__)
149105         "muls	r7, r6\n\t"
149106 #else
149107         "mul	r7, r6\n\t"
149108 #endif
149109 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149110         "adds	r3, r3, r7\n\t"
149111 #else
149112         "add	r3, r3, r7\n\t"
149113 #endif
149114 #ifdef WOLFSSL_KEIL
149115         "adcs	r4, r4, %[r]\n\t"
149116 #elif defined(__clang__)
149117         "adcs	r4, %[r]\n\t"
149118 #else
149119         "adc	r4, %[r]\n\t"
149120 #endif
149121         "uxth	r7, %[b]\n\t"
149122 #ifdef WOLFSSL_KEIL
149123         "muls	r6, r7, r6\n\t"
149124 #elif defined(__clang__)
149125         "muls	r6, r7\n\t"
149126 #else
149127         "mul	r6, r7\n\t"
149128 #endif
149129 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149130         "lsrs	r7, r6, #16\n\t"
149131 #else
149132         "lsr	r7, r6, #16\n\t"
149133 #endif
149134 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149135         "lsls	r6, r6, #16\n\t"
149136 #else
149137         "lsl	r6, r6, #16\n\t"
149138 #endif
149139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149140         "adds	r5, r5, r6\n\t"
149141 #else
149142         "add	r5, r5, r6\n\t"
149143 #endif
149144 #ifdef WOLFSSL_KEIL
149145         "adcs	r3, r3, r7\n\t"
149146 #elif defined(__clang__)
149147         "adcs	r3, r7\n\t"
149148 #else
149149         "adc	r3, r7\n\t"
149150 #endif
149151 #ifdef WOLFSSL_KEIL
149152         "adcs	r4, r4, %[r]\n\t"
149153 #elif defined(__clang__)
149154         "adcs	r4, %[r]\n\t"
149155 #else
149156         "adc	r4, %[r]\n\t"
149157 #endif
149158         "#  A[9] * B[14]\n\t"
149159         "mov	%[a], r9\n\t"
149160         "mov	%[b], r10\n\t"
149161         "ldr	%[a], [%[a], #36]\n\t"
149162         "ldr	%[b], [%[b], #56]\n\t"
149163         "uxth	r6, %[a]\n\t"
149164         "uxth	r7, %[b]\n\t"
149165 #ifdef WOLFSSL_KEIL
149166         "muls	r7, r6, r7\n\t"
149167 #elif defined(__clang__)
149168         "muls	r7, r6\n\t"
149169 #else
149170         "mul	r7, r6\n\t"
149171 #endif
149172 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149173         "adds	r5, r5, r7\n\t"
149174 #else
149175         "add	r5, r5, r7\n\t"
149176 #endif
149177 #ifdef WOLFSSL_KEIL
149178         "adcs	r3, r3, %[r]\n\t"
149179 #elif defined(__clang__)
149180         "adcs	r3, %[r]\n\t"
149181 #else
149182         "adc	r3, %[r]\n\t"
149183 #endif
149184 #ifdef WOLFSSL_KEIL
149185         "adcs	r4, r4, %[r]\n\t"
149186 #elif defined(__clang__)
149187         "adcs	r4, %[r]\n\t"
149188 #else
149189         "adc	r4, %[r]\n\t"
149190 #endif
149191 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149192         "lsrs	r7, %[b], #16\n\t"
149193 #else
149194         "lsr	r7, %[b], #16\n\t"
149195 #endif
149196 #ifdef WOLFSSL_KEIL
149197         "muls	r6, r7, r6\n\t"
149198 #elif defined(__clang__)
149199         "muls	r6, r7\n\t"
149200 #else
149201         "mul	r6, r7\n\t"
149202 #endif
149203 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149204         "lsrs	r7, r6, #16\n\t"
149205 #else
149206         "lsr	r7, r6, #16\n\t"
149207 #endif
149208 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149209         "lsls	r6, r6, #16\n\t"
149210 #else
149211         "lsl	r6, r6, #16\n\t"
149212 #endif
149213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149214         "adds	r5, r5, r6\n\t"
149215 #else
149216         "add	r5, r5, r6\n\t"
149217 #endif
149218 #ifdef WOLFSSL_KEIL
149219         "adcs	r3, r3, r7\n\t"
149220 #elif defined(__clang__)
149221         "adcs	r3, r7\n\t"
149222 #else
149223         "adc	r3, r7\n\t"
149224 #endif
149225 #ifdef WOLFSSL_KEIL
149226         "adcs	r4, r4, %[r]\n\t"
149227 #elif defined(__clang__)
149228         "adcs	r4, %[r]\n\t"
149229 #else
149230         "adc	r4, %[r]\n\t"
149231 #endif
149232 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149233         "lsrs	r6, %[a], #16\n\t"
149234 #else
149235         "lsr	r6, %[a], #16\n\t"
149236 #endif
149237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149238         "lsrs	r7, %[b], #16\n\t"
149239 #else
149240         "lsr	r7, %[b], #16\n\t"
149241 #endif
149242 #ifdef WOLFSSL_KEIL
149243         "muls	r7, r6, r7\n\t"
149244 #elif defined(__clang__)
149245         "muls	r7, r6\n\t"
149246 #else
149247         "mul	r7, r6\n\t"
149248 #endif
149249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149250         "adds	r3, r3, r7\n\t"
149251 #else
149252         "add	r3, r3, r7\n\t"
149253 #endif
149254 #ifdef WOLFSSL_KEIL
149255         "adcs	r4, r4, %[r]\n\t"
149256 #elif defined(__clang__)
149257         "adcs	r4, %[r]\n\t"
149258 #else
149259         "adc	r4, %[r]\n\t"
149260 #endif
149261         "uxth	r7, %[b]\n\t"
149262 #ifdef WOLFSSL_KEIL
149263         "muls	r6, r7, r6\n\t"
149264 #elif defined(__clang__)
149265         "muls	r6, r7\n\t"
149266 #else
149267         "mul	r6, r7\n\t"
149268 #endif
149269 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149270         "lsrs	r7, r6, #16\n\t"
149271 #else
149272         "lsr	r7, r6, #16\n\t"
149273 #endif
149274 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149275         "lsls	r6, r6, #16\n\t"
149276 #else
149277         "lsl	r6, r6, #16\n\t"
149278 #endif
149279 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149280         "adds	r5, r5, r6\n\t"
149281 #else
149282         "add	r5, r5, r6\n\t"
149283 #endif
149284 #ifdef WOLFSSL_KEIL
149285         "adcs	r3, r3, r7\n\t"
149286 #elif defined(__clang__)
149287         "adcs	r3, r7\n\t"
149288 #else
149289         "adc	r3, r7\n\t"
149290 #endif
149291 #ifdef WOLFSSL_KEIL
149292         "adcs	r4, r4, %[r]\n\t"
149293 #elif defined(__clang__)
149294         "adcs	r4, %[r]\n\t"
149295 #else
149296         "adc	r4, %[r]\n\t"
149297 #endif
149298         "#  A[10] * B[13]\n\t"
149299         "mov	%[a], r9\n\t"
149300         "mov	%[b], r10\n\t"
149301         "ldr	%[a], [%[a], #40]\n\t"
149302         "ldr	%[b], [%[b], #52]\n\t"
149303         "uxth	r6, %[a]\n\t"
149304         "uxth	r7, %[b]\n\t"
149305 #ifdef WOLFSSL_KEIL
149306         "muls	r7, r6, r7\n\t"
149307 #elif defined(__clang__)
149308         "muls	r7, r6\n\t"
149309 #else
149310         "mul	r7, r6\n\t"
149311 #endif
149312 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149313         "adds	r5, r5, r7\n\t"
149314 #else
149315         "add	r5, r5, r7\n\t"
149316 #endif
149317 #ifdef WOLFSSL_KEIL
149318         "adcs	r3, r3, %[r]\n\t"
149319 #elif defined(__clang__)
149320         "adcs	r3, %[r]\n\t"
149321 #else
149322         "adc	r3, %[r]\n\t"
149323 #endif
149324 #ifdef WOLFSSL_KEIL
149325         "adcs	r4, r4, %[r]\n\t"
149326 #elif defined(__clang__)
149327         "adcs	r4, %[r]\n\t"
149328 #else
149329         "adc	r4, %[r]\n\t"
149330 #endif
149331 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149332         "lsrs	r7, %[b], #16\n\t"
149333 #else
149334         "lsr	r7, %[b], #16\n\t"
149335 #endif
149336 #ifdef WOLFSSL_KEIL
149337         "muls	r6, r7, r6\n\t"
149338 #elif defined(__clang__)
149339         "muls	r6, r7\n\t"
149340 #else
149341         "mul	r6, r7\n\t"
149342 #endif
149343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149344         "lsrs	r7, r6, #16\n\t"
149345 #else
149346         "lsr	r7, r6, #16\n\t"
149347 #endif
149348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149349         "lsls	r6, r6, #16\n\t"
149350 #else
149351         "lsl	r6, r6, #16\n\t"
149352 #endif
149353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149354         "adds	r5, r5, r6\n\t"
149355 #else
149356         "add	r5, r5, r6\n\t"
149357 #endif
149358 #ifdef WOLFSSL_KEIL
149359         "adcs	r3, r3, r7\n\t"
149360 #elif defined(__clang__)
149361         "adcs	r3, r7\n\t"
149362 #else
149363         "adc	r3, r7\n\t"
149364 #endif
149365 #ifdef WOLFSSL_KEIL
149366         "adcs	r4, r4, %[r]\n\t"
149367 #elif defined(__clang__)
149368         "adcs	r4, %[r]\n\t"
149369 #else
149370         "adc	r4, %[r]\n\t"
149371 #endif
149372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149373         "lsrs	r6, %[a], #16\n\t"
149374 #else
149375         "lsr	r6, %[a], #16\n\t"
149376 #endif
149377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149378         "lsrs	r7, %[b], #16\n\t"
149379 #else
149380         "lsr	r7, %[b], #16\n\t"
149381 #endif
149382 #ifdef WOLFSSL_KEIL
149383         "muls	r7, r6, r7\n\t"
149384 #elif defined(__clang__)
149385         "muls	r7, r6\n\t"
149386 #else
149387         "mul	r7, r6\n\t"
149388 #endif
149389 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149390         "adds	r3, r3, r7\n\t"
149391 #else
149392         "add	r3, r3, r7\n\t"
149393 #endif
149394 #ifdef WOLFSSL_KEIL
149395         "adcs	r4, r4, %[r]\n\t"
149396 #elif defined(__clang__)
149397         "adcs	r4, %[r]\n\t"
149398 #else
149399         "adc	r4, %[r]\n\t"
149400 #endif
149401         "uxth	r7, %[b]\n\t"
149402 #ifdef WOLFSSL_KEIL
149403         "muls	r6, r7, r6\n\t"
149404 #elif defined(__clang__)
149405         "muls	r6, r7\n\t"
149406 #else
149407         "mul	r6, r7\n\t"
149408 #endif
149409 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149410         "lsrs	r7, r6, #16\n\t"
149411 #else
149412         "lsr	r7, r6, #16\n\t"
149413 #endif
149414 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149415         "lsls	r6, r6, #16\n\t"
149416 #else
149417         "lsl	r6, r6, #16\n\t"
149418 #endif
149419 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149420         "adds	r5, r5, r6\n\t"
149421 #else
149422         "add	r5, r5, r6\n\t"
149423 #endif
149424 #ifdef WOLFSSL_KEIL
149425         "adcs	r3, r3, r7\n\t"
149426 #elif defined(__clang__)
149427         "adcs	r3, r7\n\t"
149428 #else
149429         "adc	r3, r7\n\t"
149430 #endif
149431 #ifdef WOLFSSL_KEIL
149432         "adcs	r4, r4, %[r]\n\t"
149433 #elif defined(__clang__)
149434         "adcs	r4, %[r]\n\t"
149435 #else
149436         "adc	r4, %[r]\n\t"
149437 #endif
149438         "#  A[11] * B[12]\n\t"
149439         "mov	%[a], r9\n\t"
149440         "mov	%[b], r10\n\t"
149441         "ldr	%[a], [%[a], #44]\n\t"
149442         "ldr	%[b], [%[b], #48]\n\t"
149443         "uxth	r6, %[a]\n\t"
149444         "uxth	r7, %[b]\n\t"
149445 #ifdef WOLFSSL_KEIL
149446         "muls	r7, r6, r7\n\t"
149447 #elif defined(__clang__)
149448         "muls	r7, r6\n\t"
149449 #else
149450         "mul	r7, r6\n\t"
149451 #endif
149452 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149453         "adds	r5, r5, r7\n\t"
149454 #else
149455         "add	r5, r5, r7\n\t"
149456 #endif
149457 #ifdef WOLFSSL_KEIL
149458         "adcs	r3, r3, %[r]\n\t"
149459 #elif defined(__clang__)
149460         "adcs	r3, %[r]\n\t"
149461 #else
149462         "adc	r3, %[r]\n\t"
149463 #endif
149464 #ifdef WOLFSSL_KEIL
149465         "adcs	r4, r4, %[r]\n\t"
149466 #elif defined(__clang__)
149467         "adcs	r4, %[r]\n\t"
149468 #else
149469         "adc	r4, %[r]\n\t"
149470 #endif
149471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149472         "lsrs	r7, %[b], #16\n\t"
149473 #else
149474         "lsr	r7, %[b], #16\n\t"
149475 #endif
149476 #ifdef WOLFSSL_KEIL
149477         "muls	r6, r7, r6\n\t"
149478 #elif defined(__clang__)
149479         "muls	r6, r7\n\t"
149480 #else
149481         "mul	r6, r7\n\t"
149482 #endif
149483 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149484         "lsrs	r7, r6, #16\n\t"
149485 #else
149486         "lsr	r7, r6, #16\n\t"
149487 #endif
149488 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149489         "lsls	r6, r6, #16\n\t"
149490 #else
149491         "lsl	r6, r6, #16\n\t"
149492 #endif
149493 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149494         "adds	r5, r5, r6\n\t"
149495 #else
149496         "add	r5, r5, r6\n\t"
149497 #endif
149498 #ifdef WOLFSSL_KEIL
149499         "adcs	r3, r3, r7\n\t"
149500 #elif defined(__clang__)
149501         "adcs	r3, r7\n\t"
149502 #else
149503         "adc	r3, r7\n\t"
149504 #endif
149505 #ifdef WOLFSSL_KEIL
149506         "adcs	r4, r4, %[r]\n\t"
149507 #elif defined(__clang__)
149508         "adcs	r4, %[r]\n\t"
149509 #else
149510         "adc	r4, %[r]\n\t"
149511 #endif
149512 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149513         "lsrs	r6, %[a], #16\n\t"
149514 #else
149515         "lsr	r6, %[a], #16\n\t"
149516 #endif
149517 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149518         "lsrs	r7, %[b], #16\n\t"
149519 #else
149520         "lsr	r7, %[b], #16\n\t"
149521 #endif
149522 #ifdef WOLFSSL_KEIL
149523         "muls	r7, r6, r7\n\t"
149524 #elif defined(__clang__)
149525         "muls	r7, r6\n\t"
149526 #else
149527         "mul	r7, r6\n\t"
149528 #endif
149529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149530         "adds	r3, r3, r7\n\t"
149531 #else
149532         "add	r3, r3, r7\n\t"
149533 #endif
149534 #ifdef WOLFSSL_KEIL
149535         "adcs	r4, r4, %[r]\n\t"
149536 #elif defined(__clang__)
149537         "adcs	r4, %[r]\n\t"
149538 #else
149539         "adc	r4, %[r]\n\t"
149540 #endif
149541         "uxth	r7, %[b]\n\t"
149542 #ifdef WOLFSSL_KEIL
149543         "muls	r6, r7, r6\n\t"
149544 #elif defined(__clang__)
149545         "muls	r6, r7\n\t"
149546 #else
149547         "mul	r6, r7\n\t"
149548 #endif
149549 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149550         "lsrs	r7, r6, #16\n\t"
149551 #else
149552         "lsr	r7, r6, #16\n\t"
149553 #endif
149554 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149555         "lsls	r6, r6, #16\n\t"
149556 #else
149557         "lsl	r6, r6, #16\n\t"
149558 #endif
149559 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149560         "adds	r5, r5, r6\n\t"
149561 #else
149562         "add	r5, r5, r6\n\t"
149563 #endif
149564 #ifdef WOLFSSL_KEIL
149565         "adcs	r3, r3, r7\n\t"
149566 #elif defined(__clang__)
149567         "adcs	r3, r7\n\t"
149568 #else
149569         "adc	r3, r7\n\t"
149570 #endif
149571 #ifdef WOLFSSL_KEIL
149572         "adcs	r4, r4, %[r]\n\t"
149573 #elif defined(__clang__)
149574         "adcs	r4, %[r]\n\t"
149575 #else
149576         "adc	r4, %[r]\n\t"
149577 #endif
149578         "#  A[12] * B[11]\n\t"
149579         "mov	%[a], r9\n\t"
149580         "mov	%[b], r10\n\t"
149581         "ldr	%[a], [%[a], #48]\n\t"
149582         "ldr	%[b], [%[b], #44]\n\t"
149583         "uxth	r6, %[a]\n\t"
149584         "uxth	r7, %[b]\n\t"
149585 #ifdef WOLFSSL_KEIL
149586         "muls	r7, r6, r7\n\t"
149587 #elif defined(__clang__)
149588         "muls	r7, r6\n\t"
149589 #else
149590         "mul	r7, r6\n\t"
149591 #endif
149592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149593         "adds	r5, r5, r7\n\t"
149594 #else
149595         "add	r5, r5, r7\n\t"
149596 #endif
149597 #ifdef WOLFSSL_KEIL
149598         "adcs	r3, r3, %[r]\n\t"
149599 #elif defined(__clang__)
149600         "adcs	r3, %[r]\n\t"
149601 #else
149602         "adc	r3, %[r]\n\t"
149603 #endif
149604 #ifdef WOLFSSL_KEIL
149605         "adcs	r4, r4, %[r]\n\t"
149606 #elif defined(__clang__)
149607         "adcs	r4, %[r]\n\t"
149608 #else
149609         "adc	r4, %[r]\n\t"
149610 #endif
149611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149612         "lsrs	r7, %[b], #16\n\t"
149613 #else
149614         "lsr	r7, %[b], #16\n\t"
149615 #endif
149616 #ifdef WOLFSSL_KEIL
149617         "muls	r6, r7, r6\n\t"
149618 #elif defined(__clang__)
149619         "muls	r6, r7\n\t"
149620 #else
149621         "mul	r6, r7\n\t"
149622 #endif
149623 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149624         "lsrs	r7, r6, #16\n\t"
149625 #else
149626         "lsr	r7, r6, #16\n\t"
149627 #endif
149628 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149629         "lsls	r6, r6, #16\n\t"
149630 #else
149631         "lsl	r6, r6, #16\n\t"
149632 #endif
149633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149634         "adds	r5, r5, r6\n\t"
149635 #else
149636         "add	r5, r5, r6\n\t"
149637 #endif
149638 #ifdef WOLFSSL_KEIL
149639         "adcs	r3, r3, r7\n\t"
149640 #elif defined(__clang__)
149641         "adcs	r3, r7\n\t"
149642 #else
149643         "adc	r3, r7\n\t"
149644 #endif
149645 #ifdef WOLFSSL_KEIL
149646         "adcs	r4, r4, %[r]\n\t"
149647 #elif defined(__clang__)
149648         "adcs	r4, %[r]\n\t"
149649 #else
149650         "adc	r4, %[r]\n\t"
149651 #endif
149652 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149653         "lsrs	r6, %[a], #16\n\t"
149654 #else
149655         "lsr	r6, %[a], #16\n\t"
149656 #endif
149657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149658         "lsrs	r7, %[b], #16\n\t"
149659 #else
149660         "lsr	r7, %[b], #16\n\t"
149661 #endif
149662 #ifdef WOLFSSL_KEIL
149663         "muls	r7, r6, r7\n\t"
149664 #elif defined(__clang__)
149665         "muls	r7, r6\n\t"
149666 #else
149667         "mul	r7, r6\n\t"
149668 #endif
149669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149670         "adds	r3, r3, r7\n\t"
149671 #else
149672         "add	r3, r3, r7\n\t"
149673 #endif
149674 #ifdef WOLFSSL_KEIL
149675         "adcs	r4, r4, %[r]\n\t"
149676 #elif defined(__clang__)
149677         "adcs	r4, %[r]\n\t"
149678 #else
149679         "adc	r4, %[r]\n\t"
149680 #endif
149681         "uxth	r7, %[b]\n\t"
149682 #ifdef WOLFSSL_KEIL
149683         "muls	r6, r7, r6\n\t"
149684 #elif defined(__clang__)
149685         "muls	r6, r7\n\t"
149686 #else
149687         "mul	r6, r7\n\t"
149688 #endif
149689 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149690         "lsrs	r7, r6, #16\n\t"
149691 #else
149692         "lsr	r7, r6, #16\n\t"
149693 #endif
149694 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149695         "lsls	r6, r6, #16\n\t"
149696 #else
149697         "lsl	r6, r6, #16\n\t"
149698 #endif
149699 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149700         "adds	r5, r5, r6\n\t"
149701 #else
149702         "add	r5, r5, r6\n\t"
149703 #endif
149704 #ifdef WOLFSSL_KEIL
149705         "adcs	r3, r3, r7\n\t"
149706 #elif defined(__clang__)
149707         "adcs	r3, r7\n\t"
149708 #else
149709         "adc	r3, r7\n\t"
149710 #endif
149711 #ifdef WOLFSSL_KEIL
149712         "adcs	r4, r4, %[r]\n\t"
149713 #elif defined(__clang__)
149714         "adcs	r4, %[r]\n\t"
149715 #else
149716         "adc	r4, %[r]\n\t"
149717 #endif
149718         "#  A[13] * B[10]\n\t"
149719         "mov	%[a], r9\n\t"
149720         "mov	%[b], r10\n\t"
149721         "ldr	%[a], [%[a], #52]\n\t"
149722         "ldr	%[b], [%[b], #40]\n\t"
149723         "uxth	r6, %[a]\n\t"
149724         "uxth	r7, %[b]\n\t"
149725 #ifdef WOLFSSL_KEIL
149726         "muls	r7, r6, r7\n\t"
149727 #elif defined(__clang__)
149728         "muls	r7, r6\n\t"
149729 #else
149730         "mul	r7, r6\n\t"
149731 #endif
149732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149733         "adds	r5, r5, r7\n\t"
149734 #else
149735         "add	r5, r5, r7\n\t"
149736 #endif
149737 #ifdef WOLFSSL_KEIL
149738         "adcs	r3, r3, %[r]\n\t"
149739 #elif defined(__clang__)
149740         "adcs	r3, %[r]\n\t"
149741 #else
149742         "adc	r3, %[r]\n\t"
149743 #endif
149744 #ifdef WOLFSSL_KEIL
149745         "adcs	r4, r4, %[r]\n\t"
149746 #elif defined(__clang__)
149747         "adcs	r4, %[r]\n\t"
149748 #else
149749         "adc	r4, %[r]\n\t"
149750 #endif
149751 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149752         "lsrs	r7, %[b], #16\n\t"
149753 #else
149754         "lsr	r7, %[b], #16\n\t"
149755 #endif
149756 #ifdef WOLFSSL_KEIL
149757         "muls	r6, r7, r6\n\t"
149758 #elif defined(__clang__)
149759         "muls	r6, r7\n\t"
149760 #else
149761         "mul	r6, r7\n\t"
149762 #endif
149763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149764         "lsrs	r7, r6, #16\n\t"
149765 #else
149766         "lsr	r7, r6, #16\n\t"
149767 #endif
149768 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149769         "lsls	r6, r6, #16\n\t"
149770 #else
149771         "lsl	r6, r6, #16\n\t"
149772 #endif
149773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149774         "adds	r5, r5, r6\n\t"
149775 #else
149776         "add	r5, r5, r6\n\t"
149777 #endif
149778 #ifdef WOLFSSL_KEIL
149779         "adcs	r3, r3, r7\n\t"
149780 #elif defined(__clang__)
149781         "adcs	r3, r7\n\t"
149782 #else
149783         "adc	r3, r7\n\t"
149784 #endif
149785 #ifdef WOLFSSL_KEIL
149786         "adcs	r4, r4, %[r]\n\t"
149787 #elif defined(__clang__)
149788         "adcs	r4, %[r]\n\t"
149789 #else
149790         "adc	r4, %[r]\n\t"
149791 #endif
149792 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149793         "lsrs	r6, %[a], #16\n\t"
149794 #else
149795         "lsr	r6, %[a], #16\n\t"
149796 #endif
149797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149798         "lsrs	r7, %[b], #16\n\t"
149799 #else
149800         "lsr	r7, %[b], #16\n\t"
149801 #endif
149802 #ifdef WOLFSSL_KEIL
149803         "muls	r7, r6, r7\n\t"
149804 #elif defined(__clang__)
149805         "muls	r7, r6\n\t"
149806 #else
149807         "mul	r7, r6\n\t"
149808 #endif
149809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149810         "adds	r3, r3, r7\n\t"
149811 #else
149812         "add	r3, r3, r7\n\t"
149813 #endif
149814 #ifdef WOLFSSL_KEIL
149815         "adcs	r4, r4, %[r]\n\t"
149816 #elif defined(__clang__)
149817         "adcs	r4, %[r]\n\t"
149818 #else
149819         "adc	r4, %[r]\n\t"
149820 #endif
149821         "uxth	r7, %[b]\n\t"
149822 #ifdef WOLFSSL_KEIL
149823         "muls	r6, r7, r6\n\t"
149824 #elif defined(__clang__)
149825         "muls	r6, r7\n\t"
149826 #else
149827         "mul	r6, r7\n\t"
149828 #endif
149829 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149830         "lsrs	r7, r6, #16\n\t"
149831 #else
149832         "lsr	r7, r6, #16\n\t"
149833 #endif
149834 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149835         "lsls	r6, r6, #16\n\t"
149836 #else
149837         "lsl	r6, r6, #16\n\t"
149838 #endif
149839 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149840         "adds	r5, r5, r6\n\t"
149841 #else
149842         "add	r5, r5, r6\n\t"
149843 #endif
149844 #ifdef WOLFSSL_KEIL
149845         "adcs	r3, r3, r7\n\t"
149846 #elif defined(__clang__)
149847         "adcs	r3, r7\n\t"
149848 #else
149849         "adc	r3, r7\n\t"
149850 #endif
149851 #ifdef WOLFSSL_KEIL
149852         "adcs	r4, r4, %[r]\n\t"
149853 #elif defined(__clang__)
149854         "adcs	r4, %[r]\n\t"
149855 #else
149856         "adc	r4, %[r]\n\t"
149857 #endif
149858         "#  A[14] * B[9]\n\t"
149859         "mov	%[a], r9\n\t"
149860         "mov	%[b], r10\n\t"
149861         "ldr	%[a], [%[a], #56]\n\t"
149862         "ldr	%[b], [%[b], #36]\n\t"
149863         "uxth	r6, %[a]\n\t"
149864         "uxth	r7, %[b]\n\t"
149865 #ifdef WOLFSSL_KEIL
149866         "muls	r7, r6, r7\n\t"
149867 #elif defined(__clang__)
149868         "muls	r7, r6\n\t"
149869 #else
149870         "mul	r7, r6\n\t"
149871 #endif
149872 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149873         "adds	r5, r5, r7\n\t"
149874 #else
149875         "add	r5, r5, r7\n\t"
149876 #endif
149877 #ifdef WOLFSSL_KEIL
149878         "adcs	r3, r3, %[r]\n\t"
149879 #elif defined(__clang__)
149880         "adcs	r3, %[r]\n\t"
149881 #else
149882         "adc	r3, %[r]\n\t"
149883 #endif
149884 #ifdef WOLFSSL_KEIL
149885         "adcs	r4, r4, %[r]\n\t"
149886 #elif defined(__clang__)
149887         "adcs	r4, %[r]\n\t"
149888 #else
149889         "adc	r4, %[r]\n\t"
149890 #endif
149891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149892         "lsrs	r7, %[b], #16\n\t"
149893 #else
149894         "lsr	r7, %[b], #16\n\t"
149895 #endif
149896 #ifdef WOLFSSL_KEIL
149897         "muls	r6, r7, r6\n\t"
149898 #elif defined(__clang__)
149899         "muls	r6, r7\n\t"
149900 #else
149901         "mul	r6, r7\n\t"
149902 #endif
149903 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149904         "lsrs	r7, r6, #16\n\t"
149905 #else
149906         "lsr	r7, r6, #16\n\t"
149907 #endif
149908 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149909         "lsls	r6, r6, #16\n\t"
149910 #else
149911         "lsl	r6, r6, #16\n\t"
149912 #endif
149913 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149914         "adds	r5, r5, r6\n\t"
149915 #else
149916         "add	r5, r5, r6\n\t"
149917 #endif
149918 #ifdef WOLFSSL_KEIL
149919         "adcs	r3, r3, r7\n\t"
149920 #elif defined(__clang__)
149921         "adcs	r3, r7\n\t"
149922 #else
149923         "adc	r3, r7\n\t"
149924 #endif
149925 #ifdef WOLFSSL_KEIL
149926         "adcs	r4, r4, %[r]\n\t"
149927 #elif defined(__clang__)
149928         "adcs	r4, %[r]\n\t"
149929 #else
149930         "adc	r4, %[r]\n\t"
149931 #endif
149932 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149933         "lsrs	r6, %[a], #16\n\t"
149934 #else
149935         "lsr	r6, %[a], #16\n\t"
149936 #endif
149937 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149938         "lsrs	r7, %[b], #16\n\t"
149939 #else
149940         "lsr	r7, %[b], #16\n\t"
149941 #endif
149942 #ifdef WOLFSSL_KEIL
149943         "muls	r7, r6, r7\n\t"
149944 #elif defined(__clang__)
149945         "muls	r7, r6\n\t"
149946 #else
149947         "mul	r7, r6\n\t"
149948 #endif
149949 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149950         "adds	r3, r3, r7\n\t"
149951 #else
149952         "add	r3, r3, r7\n\t"
149953 #endif
149954 #ifdef WOLFSSL_KEIL
149955         "adcs	r4, r4, %[r]\n\t"
149956 #elif defined(__clang__)
149957         "adcs	r4, %[r]\n\t"
149958 #else
149959         "adc	r4, %[r]\n\t"
149960 #endif
149961         "uxth	r7, %[b]\n\t"
149962 #ifdef WOLFSSL_KEIL
149963         "muls	r6, r7, r6\n\t"
149964 #elif defined(__clang__)
149965         "muls	r6, r7\n\t"
149966 #else
149967         "mul	r6, r7\n\t"
149968 #endif
149969 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149970         "lsrs	r7, r6, #16\n\t"
149971 #else
149972         "lsr	r7, r6, #16\n\t"
149973 #endif
149974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149975         "lsls	r6, r6, #16\n\t"
149976 #else
149977         "lsl	r6, r6, #16\n\t"
149978 #endif
149979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
149980         "adds	r5, r5, r6\n\t"
149981 #else
149982         "add	r5, r5, r6\n\t"
149983 #endif
149984 #ifdef WOLFSSL_KEIL
149985         "adcs	r3, r3, r7\n\t"
149986 #elif defined(__clang__)
149987         "adcs	r3, r7\n\t"
149988 #else
149989         "adc	r3, r7\n\t"
149990 #endif
149991 #ifdef WOLFSSL_KEIL
149992         "adcs	r4, r4, %[r]\n\t"
149993 #elif defined(__clang__)
149994         "adcs	r4, %[r]\n\t"
149995 #else
149996         "adc	r4, %[r]\n\t"
149997 #endif
149998         "#  A[15] * B[8]\n\t"
149999         "mov	%[a], r9\n\t"
150000         "mov	%[b], r10\n\t"
150001         "ldr	%[a], [%[a], #60]\n\t"
150002         "ldr	%[b], [%[b], #32]\n\t"
150003         "uxth	r6, %[a]\n\t"
150004         "uxth	r7, %[b]\n\t"
150005 #ifdef WOLFSSL_KEIL
150006         "muls	r7, r6, r7\n\t"
150007 #elif defined(__clang__)
150008         "muls	r7, r6\n\t"
150009 #else
150010         "mul	r7, r6\n\t"
150011 #endif
150012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150013         "adds	r5, r5, r7\n\t"
150014 #else
150015         "add	r5, r5, r7\n\t"
150016 #endif
150017 #ifdef WOLFSSL_KEIL
150018         "adcs	r3, r3, %[r]\n\t"
150019 #elif defined(__clang__)
150020         "adcs	r3, %[r]\n\t"
150021 #else
150022         "adc	r3, %[r]\n\t"
150023 #endif
150024 #ifdef WOLFSSL_KEIL
150025         "adcs	r4, r4, %[r]\n\t"
150026 #elif defined(__clang__)
150027         "adcs	r4, %[r]\n\t"
150028 #else
150029         "adc	r4, %[r]\n\t"
150030 #endif
150031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150032         "lsrs	r7, %[b], #16\n\t"
150033 #else
150034         "lsr	r7, %[b], #16\n\t"
150035 #endif
150036 #ifdef WOLFSSL_KEIL
150037         "muls	r6, r7, r6\n\t"
150038 #elif defined(__clang__)
150039         "muls	r6, r7\n\t"
150040 #else
150041         "mul	r6, r7\n\t"
150042 #endif
150043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150044         "lsrs	r7, r6, #16\n\t"
150045 #else
150046         "lsr	r7, r6, #16\n\t"
150047 #endif
150048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150049         "lsls	r6, r6, #16\n\t"
150050 #else
150051         "lsl	r6, r6, #16\n\t"
150052 #endif
150053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150054         "adds	r5, r5, r6\n\t"
150055 #else
150056         "add	r5, r5, r6\n\t"
150057 #endif
150058 #ifdef WOLFSSL_KEIL
150059         "adcs	r3, r3, r7\n\t"
150060 #elif defined(__clang__)
150061         "adcs	r3, r7\n\t"
150062 #else
150063         "adc	r3, r7\n\t"
150064 #endif
150065 #ifdef WOLFSSL_KEIL
150066         "adcs	r4, r4, %[r]\n\t"
150067 #elif defined(__clang__)
150068         "adcs	r4, %[r]\n\t"
150069 #else
150070         "adc	r4, %[r]\n\t"
150071 #endif
150072 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150073         "lsrs	r6, %[a], #16\n\t"
150074 #else
150075         "lsr	r6, %[a], #16\n\t"
150076 #endif
150077 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150078         "lsrs	r7, %[b], #16\n\t"
150079 #else
150080         "lsr	r7, %[b], #16\n\t"
150081 #endif
150082 #ifdef WOLFSSL_KEIL
150083         "muls	r7, r6, r7\n\t"
150084 #elif defined(__clang__)
150085         "muls	r7, r6\n\t"
150086 #else
150087         "mul	r7, r6\n\t"
150088 #endif
150089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150090         "adds	r3, r3, r7\n\t"
150091 #else
150092         "add	r3, r3, r7\n\t"
150093 #endif
150094 #ifdef WOLFSSL_KEIL
150095         "adcs	r4, r4, %[r]\n\t"
150096 #elif defined(__clang__)
150097         "adcs	r4, %[r]\n\t"
150098 #else
150099         "adc	r4, %[r]\n\t"
150100 #endif
150101         "uxth	r7, %[b]\n\t"
150102 #ifdef WOLFSSL_KEIL
150103         "muls	r6, r7, r6\n\t"
150104 #elif defined(__clang__)
150105         "muls	r6, r7\n\t"
150106 #else
150107         "mul	r6, r7\n\t"
150108 #endif
150109 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150110         "lsrs	r7, r6, #16\n\t"
150111 #else
150112         "lsr	r7, r6, #16\n\t"
150113 #endif
150114 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150115         "lsls	r6, r6, #16\n\t"
150116 #else
150117         "lsl	r6, r6, #16\n\t"
150118 #endif
150119 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150120         "adds	r5, r5, r6\n\t"
150121 #else
150122         "add	r5, r5, r6\n\t"
150123 #endif
150124 #ifdef WOLFSSL_KEIL
150125         "adcs	r3, r3, r7\n\t"
150126 #elif defined(__clang__)
150127         "adcs	r3, r7\n\t"
150128 #else
150129         "adc	r3, r7\n\t"
150130 #endif
150131 #ifdef WOLFSSL_KEIL
150132         "adcs	r4, r4, %[r]\n\t"
150133 #elif defined(__clang__)
150134         "adcs	r4, %[r]\n\t"
150135 #else
150136         "adc	r4, %[r]\n\t"
150137 #endif
150138         "mov	%[r], r8\n\t"
150139         "str	r5, [%[r], #92]\n\t"
150140         "movs	%[r], #0\n\t"
150141         "#  A[15] * B[9]\n\t"
150142         "movs	r5, #0\n\t"
150143         "mov	%[a], r9\n\t"
150144         "mov	%[b], r10\n\t"
150145         "ldr	%[a], [%[a], #60]\n\t"
150146         "ldr	%[b], [%[b], #36]\n\t"
150147         "uxth	r6, %[a]\n\t"
150148         "uxth	r7, %[b]\n\t"
150149 #ifdef WOLFSSL_KEIL
150150         "muls	r7, r6, r7\n\t"
150151 #elif defined(__clang__)
150152         "muls	r7, r6\n\t"
150153 #else
150154         "mul	r7, r6\n\t"
150155 #endif
150156 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150157         "adds	r3, r3, r7\n\t"
150158 #else
150159         "add	r3, r3, r7\n\t"
150160 #endif
150161 #ifdef WOLFSSL_KEIL
150162         "adcs	r4, r4, %[r]\n\t"
150163 #elif defined(__clang__)
150164         "adcs	r4, %[r]\n\t"
150165 #else
150166         "adc	r4, %[r]\n\t"
150167 #endif
150168 #ifdef WOLFSSL_KEIL
150169         "adcs	r5, r5, %[r]\n\t"
150170 #elif defined(__clang__)
150171         "adcs	r5, %[r]\n\t"
150172 #else
150173         "adc	r5, %[r]\n\t"
150174 #endif
150175 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150176         "lsrs	r7, %[b], #16\n\t"
150177 #else
150178         "lsr	r7, %[b], #16\n\t"
150179 #endif
150180 #ifdef WOLFSSL_KEIL
150181         "muls	r6, r7, r6\n\t"
150182 #elif defined(__clang__)
150183         "muls	r6, r7\n\t"
150184 #else
150185         "mul	r6, r7\n\t"
150186 #endif
150187 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150188         "lsrs	r7, r6, #16\n\t"
150189 #else
150190         "lsr	r7, r6, #16\n\t"
150191 #endif
150192 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150193         "lsls	r6, r6, #16\n\t"
150194 #else
150195         "lsl	r6, r6, #16\n\t"
150196 #endif
150197 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150198         "adds	r3, r3, r6\n\t"
150199 #else
150200         "add	r3, r3, r6\n\t"
150201 #endif
150202 #ifdef WOLFSSL_KEIL
150203         "adcs	r4, r4, r7\n\t"
150204 #elif defined(__clang__)
150205         "adcs	r4, r7\n\t"
150206 #else
150207         "adc	r4, r7\n\t"
150208 #endif
150209 #ifdef WOLFSSL_KEIL
150210         "adcs	r5, r5, %[r]\n\t"
150211 #elif defined(__clang__)
150212         "adcs	r5, %[r]\n\t"
150213 #else
150214         "adc	r5, %[r]\n\t"
150215 #endif
150216 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150217         "lsrs	r6, %[a], #16\n\t"
150218 #else
150219         "lsr	r6, %[a], #16\n\t"
150220 #endif
150221 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150222         "lsrs	r7, %[b], #16\n\t"
150223 #else
150224         "lsr	r7, %[b], #16\n\t"
150225 #endif
150226 #ifdef WOLFSSL_KEIL
150227         "muls	r7, r6, r7\n\t"
150228 #elif defined(__clang__)
150229         "muls	r7, r6\n\t"
150230 #else
150231         "mul	r7, r6\n\t"
150232 #endif
150233 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150234         "adds	r4, r4, r7\n\t"
150235 #else
150236         "add	r4, r4, r7\n\t"
150237 #endif
150238 #ifdef WOLFSSL_KEIL
150239         "adcs	r5, r5, %[r]\n\t"
150240 #elif defined(__clang__)
150241         "adcs	r5, %[r]\n\t"
150242 #else
150243         "adc	r5, %[r]\n\t"
150244 #endif
150245         "uxth	r7, %[b]\n\t"
150246 #ifdef WOLFSSL_KEIL
150247         "muls	r6, r7, r6\n\t"
150248 #elif defined(__clang__)
150249         "muls	r6, r7\n\t"
150250 #else
150251         "mul	r6, r7\n\t"
150252 #endif
150253 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150254         "lsrs	r7, r6, #16\n\t"
150255 #else
150256         "lsr	r7, r6, #16\n\t"
150257 #endif
150258 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150259         "lsls	r6, r6, #16\n\t"
150260 #else
150261         "lsl	r6, r6, #16\n\t"
150262 #endif
150263 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150264         "adds	r3, r3, r6\n\t"
150265 #else
150266         "add	r3, r3, r6\n\t"
150267 #endif
150268 #ifdef WOLFSSL_KEIL
150269         "adcs	r4, r4, r7\n\t"
150270 #elif defined(__clang__)
150271         "adcs	r4, r7\n\t"
150272 #else
150273         "adc	r4, r7\n\t"
150274 #endif
150275 #ifdef WOLFSSL_KEIL
150276         "adcs	r5, r5, %[r]\n\t"
150277 #elif defined(__clang__)
150278         "adcs	r5, %[r]\n\t"
150279 #else
150280         "adc	r5, %[r]\n\t"
150281 #endif
150282         "#  A[14] * B[10]\n\t"
150283         "mov	%[a], r9\n\t"
150284         "mov	%[b], r10\n\t"
150285         "ldr	%[a], [%[a], #56]\n\t"
150286         "ldr	%[b], [%[b], #40]\n\t"
150287         "uxth	r6, %[a]\n\t"
150288         "uxth	r7, %[b]\n\t"
150289 #ifdef WOLFSSL_KEIL
150290         "muls	r7, r6, r7\n\t"
150291 #elif defined(__clang__)
150292         "muls	r7, r6\n\t"
150293 #else
150294         "mul	r7, r6\n\t"
150295 #endif
150296 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150297         "adds	r3, r3, r7\n\t"
150298 #else
150299         "add	r3, r3, r7\n\t"
150300 #endif
150301 #ifdef WOLFSSL_KEIL
150302         "adcs	r4, r4, %[r]\n\t"
150303 #elif defined(__clang__)
150304         "adcs	r4, %[r]\n\t"
150305 #else
150306         "adc	r4, %[r]\n\t"
150307 #endif
150308 #ifdef WOLFSSL_KEIL
150309         "adcs	r5, r5, %[r]\n\t"
150310 #elif defined(__clang__)
150311         "adcs	r5, %[r]\n\t"
150312 #else
150313         "adc	r5, %[r]\n\t"
150314 #endif
150315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150316         "lsrs	r7, %[b], #16\n\t"
150317 #else
150318         "lsr	r7, %[b], #16\n\t"
150319 #endif
150320 #ifdef WOLFSSL_KEIL
150321         "muls	r6, r7, r6\n\t"
150322 #elif defined(__clang__)
150323         "muls	r6, r7\n\t"
150324 #else
150325         "mul	r6, r7\n\t"
150326 #endif
150327 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150328         "lsrs	r7, r6, #16\n\t"
150329 #else
150330         "lsr	r7, r6, #16\n\t"
150331 #endif
150332 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150333         "lsls	r6, r6, #16\n\t"
150334 #else
150335         "lsl	r6, r6, #16\n\t"
150336 #endif
150337 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150338         "adds	r3, r3, r6\n\t"
150339 #else
150340         "add	r3, r3, r6\n\t"
150341 #endif
150342 #ifdef WOLFSSL_KEIL
150343         "adcs	r4, r4, r7\n\t"
150344 #elif defined(__clang__)
150345         "adcs	r4, r7\n\t"
150346 #else
150347         "adc	r4, r7\n\t"
150348 #endif
150349 #ifdef WOLFSSL_KEIL
150350         "adcs	r5, r5, %[r]\n\t"
150351 #elif defined(__clang__)
150352         "adcs	r5, %[r]\n\t"
150353 #else
150354         "adc	r5, %[r]\n\t"
150355 #endif
150356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150357         "lsrs	r6, %[a], #16\n\t"
150358 #else
150359         "lsr	r6, %[a], #16\n\t"
150360 #endif
150361 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150362         "lsrs	r7, %[b], #16\n\t"
150363 #else
150364         "lsr	r7, %[b], #16\n\t"
150365 #endif
150366 #ifdef WOLFSSL_KEIL
150367         "muls	r7, r6, r7\n\t"
150368 #elif defined(__clang__)
150369         "muls	r7, r6\n\t"
150370 #else
150371         "mul	r7, r6\n\t"
150372 #endif
150373 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150374         "adds	r4, r4, r7\n\t"
150375 #else
150376         "add	r4, r4, r7\n\t"
150377 #endif
150378 #ifdef WOLFSSL_KEIL
150379         "adcs	r5, r5, %[r]\n\t"
150380 #elif defined(__clang__)
150381         "adcs	r5, %[r]\n\t"
150382 #else
150383         "adc	r5, %[r]\n\t"
150384 #endif
150385         "uxth	r7, %[b]\n\t"
150386 #ifdef WOLFSSL_KEIL
150387         "muls	r6, r7, r6\n\t"
150388 #elif defined(__clang__)
150389         "muls	r6, r7\n\t"
150390 #else
150391         "mul	r6, r7\n\t"
150392 #endif
150393 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150394         "lsrs	r7, r6, #16\n\t"
150395 #else
150396         "lsr	r7, r6, #16\n\t"
150397 #endif
150398 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150399         "lsls	r6, r6, #16\n\t"
150400 #else
150401         "lsl	r6, r6, #16\n\t"
150402 #endif
150403 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150404         "adds	r3, r3, r6\n\t"
150405 #else
150406         "add	r3, r3, r6\n\t"
150407 #endif
150408 #ifdef WOLFSSL_KEIL
150409         "adcs	r4, r4, r7\n\t"
150410 #elif defined(__clang__)
150411         "adcs	r4, r7\n\t"
150412 #else
150413         "adc	r4, r7\n\t"
150414 #endif
150415 #ifdef WOLFSSL_KEIL
150416         "adcs	r5, r5, %[r]\n\t"
150417 #elif defined(__clang__)
150418         "adcs	r5, %[r]\n\t"
150419 #else
150420         "adc	r5, %[r]\n\t"
150421 #endif
150422         "#  A[13] * B[11]\n\t"
150423         "mov	%[a], r9\n\t"
150424         "mov	%[b], r10\n\t"
150425         "ldr	%[a], [%[a], #52]\n\t"
150426         "ldr	%[b], [%[b], #44]\n\t"
150427         "uxth	r6, %[a]\n\t"
150428         "uxth	r7, %[b]\n\t"
150429 #ifdef WOLFSSL_KEIL
150430         "muls	r7, r6, r7\n\t"
150431 #elif defined(__clang__)
150432         "muls	r7, r6\n\t"
150433 #else
150434         "mul	r7, r6\n\t"
150435 #endif
150436 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150437         "adds	r3, r3, r7\n\t"
150438 #else
150439         "add	r3, r3, r7\n\t"
150440 #endif
150441 #ifdef WOLFSSL_KEIL
150442         "adcs	r4, r4, %[r]\n\t"
150443 #elif defined(__clang__)
150444         "adcs	r4, %[r]\n\t"
150445 #else
150446         "adc	r4, %[r]\n\t"
150447 #endif
150448 #ifdef WOLFSSL_KEIL
150449         "adcs	r5, r5, %[r]\n\t"
150450 #elif defined(__clang__)
150451         "adcs	r5, %[r]\n\t"
150452 #else
150453         "adc	r5, %[r]\n\t"
150454 #endif
150455 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150456         "lsrs	r7, %[b], #16\n\t"
150457 #else
150458         "lsr	r7, %[b], #16\n\t"
150459 #endif
150460 #ifdef WOLFSSL_KEIL
150461         "muls	r6, r7, r6\n\t"
150462 #elif defined(__clang__)
150463         "muls	r6, r7\n\t"
150464 #else
150465         "mul	r6, r7\n\t"
150466 #endif
150467 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150468         "lsrs	r7, r6, #16\n\t"
150469 #else
150470         "lsr	r7, r6, #16\n\t"
150471 #endif
150472 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150473         "lsls	r6, r6, #16\n\t"
150474 #else
150475         "lsl	r6, r6, #16\n\t"
150476 #endif
150477 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150478         "adds	r3, r3, r6\n\t"
150479 #else
150480         "add	r3, r3, r6\n\t"
150481 #endif
150482 #ifdef WOLFSSL_KEIL
150483         "adcs	r4, r4, r7\n\t"
150484 #elif defined(__clang__)
150485         "adcs	r4, r7\n\t"
150486 #else
150487         "adc	r4, r7\n\t"
150488 #endif
150489 #ifdef WOLFSSL_KEIL
150490         "adcs	r5, r5, %[r]\n\t"
150491 #elif defined(__clang__)
150492         "adcs	r5, %[r]\n\t"
150493 #else
150494         "adc	r5, %[r]\n\t"
150495 #endif
150496 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150497         "lsrs	r6, %[a], #16\n\t"
150498 #else
150499         "lsr	r6, %[a], #16\n\t"
150500 #endif
150501 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150502         "lsrs	r7, %[b], #16\n\t"
150503 #else
150504         "lsr	r7, %[b], #16\n\t"
150505 #endif
150506 #ifdef WOLFSSL_KEIL
150507         "muls	r7, r6, r7\n\t"
150508 #elif defined(__clang__)
150509         "muls	r7, r6\n\t"
150510 #else
150511         "mul	r7, r6\n\t"
150512 #endif
150513 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150514         "adds	r4, r4, r7\n\t"
150515 #else
150516         "add	r4, r4, r7\n\t"
150517 #endif
150518 #ifdef WOLFSSL_KEIL
150519         "adcs	r5, r5, %[r]\n\t"
150520 #elif defined(__clang__)
150521         "adcs	r5, %[r]\n\t"
150522 #else
150523         "adc	r5, %[r]\n\t"
150524 #endif
150525         "uxth	r7, %[b]\n\t"
150526 #ifdef WOLFSSL_KEIL
150527         "muls	r6, r7, r6\n\t"
150528 #elif defined(__clang__)
150529         "muls	r6, r7\n\t"
150530 #else
150531         "mul	r6, r7\n\t"
150532 #endif
150533 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150534         "lsrs	r7, r6, #16\n\t"
150535 #else
150536         "lsr	r7, r6, #16\n\t"
150537 #endif
150538 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150539         "lsls	r6, r6, #16\n\t"
150540 #else
150541         "lsl	r6, r6, #16\n\t"
150542 #endif
150543 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150544         "adds	r3, r3, r6\n\t"
150545 #else
150546         "add	r3, r3, r6\n\t"
150547 #endif
150548 #ifdef WOLFSSL_KEIL
150549         "adcs	r4, r4, r7\n\t"
150550 #elif defined(__clang__)
150551         "adcs	r4, r7\n\t"
150552 #else
150553         "adc	r4, r7\n\t"
150554 #endif
150555 #ifdef WOLFSSL_KEIL
150556         "adcs	r5, r5, %[r]\n\t"
150557 #elif defined(__clang__)
150558         "adcs	r5, %[r]\n\t"
150559 #else
150560         "adc	r5, %[r]\n\t"
150561 #endif
150562         "#  A[12] * B[12]\n\t"
150563         "mov	%[a], r9\n\t"
150564         "mov	%[b], r10\n\t"
150565         "ldr	%[a], [%[a], #48]\n\t"
150566         "ldr	%[b], [%[b], #48]\n\t"
150567         "uxth	r6, %[a]\n\t"
150568         "uxth	r7, %[b]\n\t"
150569 #ifdef WOLFSSL_KEIL
150570         "muls	r7, r6, r7\n\t"
150571 #elif defined(__clang__)
150572         "muls	r7, r6\n\t"
150573 #else
150574         "mul	r7, r6\n\t"
150575 #endif
150576 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150577         "adds	r3, r3, r7\n\t"
150578 #else
150579         "add	r3, r3, r7\n\t"
150580 #endif
150581 #ifdef WOLFSSL_KEIL
150582         "adcs	r4, r4, %[r]\n\t"
150583 #elif defined(__clang__)
150584         "adcs	r4, %[r]\n\t"
150585 #else
150586         "adc	r4, %[r]\n\t"
150587 #endif
150588 #ifdef WOLFSSL_KEIL
150589         "adcs	r5, r5, %[r]\n\t"
150590 #elif defined(__clang__)
150591         "adcs	r5, %[r]\n\t"
150592 #else
150593         "adc	r5, %[r]\n\t"
150594 #endif
150595 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150596         "lsrs	r7, %[b], #16\n\t"
150597 #else
150598         "lsr	r7, %[b], #16\n\t"
150599 #endif
150600 #ifdef WOLFSSL_KEIL
150601         "muls	r6, r7, r6\n\t"
150602 #elif defined(__clang__)
150603         "muls	r6, r7\n\t"
150604 #else
150605         "mul	r6, r7\n\t"
150606 #endif
150607 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150608         "lsrs	r7, r6, #16\n\t"
150609 #else
150610         "lsr	r7, r6, #16\n\t"
150611 #endif
150612 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150613         "lsls	r6, r6, #16\n\t"
150614 #else
150615         "lsl	r6, r6, #16\n\t"
150616 #endif
150617 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150618         "adds	r3, r3, r6\n\t"
150619 #else
150620         "add	r3, r3, r6\n\t"
150621 #endif
150622 #ifdef WOLFSSL_KEIL
150623         "adcs	r4, r4, r7\n\t"
150624 #elif defined(__clang__)
150625         "adcs	r4, r7\n\t"
150626 #else
150627         "adc	r4, r7\n\t"
150628 #endif
150629 #ifdef WOLFSSL_KEIL
150630         "adcs	r5, r5, %[r]\n\t"
150631 #elif defined(__clang__)
150632         "adcs	r5, %[r]\n\t"
150633 #else
150634         "adc	r5, %[r]\n\t"
150635 #endif
150636 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150637         "lsrs	r6, %[a], #16\n\t"
150638 #else
150639         "lsr	r6, %[a], #16\n\t"
150640 #endif
150641 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150642         "lsrs	r7, %[b], #16\n\t"
150643 #else
150644         "lsr	r7, %[b], #16\n\t"
150645 #endif
150646 #ifdef WOLFSSL_KEIL
150647         "muls	r7, r6, r7\n\t"
150648 #elif defined(__clang__)
150649         "muls	r7, r6\n\t"
150650 #else
150651         "mul	r7, r6\n\t"
150652 #endif
150653 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150654         "adds	r4, r4, r7\n\t"
150655 #else
150656         "add	r4, r4, r7\n\t"
150657 #endif
150658 #ifdef WOLFSSL_KEIL
150659         "adcs	r5, r5, %[r]\n\t"
150660 #elif defined(__clang__)
150661         "adcs	r5, %[r]\n\t"
150662 #else
150663         "adc	r5, %[r]\n\t"
150664 #endif
150665         "uxth	r7, %[b]\n\t"
150666 #ifdef WOLFSSL_KEIL
150667         "muls	r6, r7, r6\n\t"
150668 #elif defined(__clang__)
150669         "muls	r6, r7\n\t"
150670 #else
150671         "mul	r6, r7\n\t"
150672 #endif
150673 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150674         "lsrs	r7, r6, #16\n\t"
150675 #else
150676         "lsr	r7, r6, #16\n\t"
150677 #endif
150678 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150679         "lsls	r6, r6, #16\n\t"
150680 #else
150681         "lsl	r6, r6, #16\n\t"
150682 #endif
150683 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150684         "adds	r3, r3, r6\n\t"
150685 #else
150686         "add	r3, r3, r6\n\t"
150687 #endif
150688 #ifdef WOLFSSL_KEIL
150689         "adcs	r4, r4, r7\n\t"
150690 #elif defined(__clang__)
150691         "adcs	r4, r7\n\t"
150692 #else
150693         "adc	r4, r7\n\t"
150694 #endif
150695 #ifdef WOLFSSL_KEIL
150696         "adcs	r5, r5, %[r]\n\t"
150697 #elif defined(__clang__)
150698         "adcs	r5, %[r]\n\t"
150699 #else
150700         "adc	r5, %[r]\n\t"
150701 #endif
150702         "#  A[11] * B[13]\n\t"
150703         "mov	%[a], r9\n\t"
150704         "mov	%[b], r10\n\t"
150705         "ldr	%[a], [%[a], #44]\n\t"
150706         "ldr	%[b], [%[b], #52]\n\t"
150707         "uxth	r6, %[a]\n\t"
150708         "uxth	r7, %[b]\n\t"
150709 #ifdef WOLFSSL_KEIL
150710         "muls	r7, r6, r7\n\t"
150711 #elif defined(__clang__)
150712         "muls	r7, r6\n\t"
150713 #else
150714         "mul	r7, r6\n\t"
150715 #endif
150716 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150717         "adds	r3, r3, r7\n\t"
150718 #else
150719         "add	r3, r3, r7\n\t"
150720 #endif
150721 #ifdef WOLFSSL_KEIL
150722         "adcs	r4, r4, %[r]\n\t"
150723 #elif defined(__clang__)
150724         "adcs	r4, %[r]\n\t"
150725 #else
150726         "adc	r4, %[r]\n\t"
150727 #endif
150728 #ifdef WOLFSSL_KEIL
150729         "adcs	r5, r5, %[r]\n\t"
150730 #elif defined(__clang__)
150731         "adcs	r5, %[r]\n\t"
150732 #else
150733         "adc	r5, %[r]\n\t"
150734 #endif
150735 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150736         "lsrs	r7, %[b], #16\n\t"
150737 #else
150738         "lsr	r7, %[b], #16\n\t"
150739 #endif
150740 #ifdef WOLFSSL_KEIL
150741         "muls	r6, r7, r6\n\t"
150742 #elif defined(__clang__)
150743         "muls	r6, r7\n\t"
150744 #else
150745         "mul	r6, r7\n\t"
150746 #endif
150747 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150748         "lsrs	r7, r6, #16\n\t"
150749 #else
150750         "lsr	r7, r6, #16\n\t"
150751 #endif
150752 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150753         "lsls	r6, r6, #16\n\t"
150754 #else
150755         "lsl	r6, r6, #16\n\t"
150756 #endif
150757 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150758         "adds	r3, r3, r6\n\t"
150759 #else
150760         "add	r3, r3, r6\n\t"
150761 #endif
150762 #ifdef WOLFSSL_KEIL
150763         "adcs	r4, r4, r7\n\t"
150764 #elif defined(__clang__)
150765         "adcs	r4, r7\n\t"
150766 #else
150767         "adc	r4, r7\n\t"
150768 #endif
150769 #ifdef WOLFSSL_KEIL
150770         "adcs	r5, r5, %[r]\n\t"
150771 #elif defined(__clang__)
150772         "adcs	r5, %[r]\n\t"
150773 #else
150774         "adc	r5, %[r]\n\t"
150775 #endif
150776 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150777         "lsrs	r6, %[a], #16\n\t"
150778 #else
150779         "lsr	r6, %[a], #16\n\t"
150780 #endif
150781 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150782         "lsrs	r7, %[b], #16\n\t"
150783 #else
150784         "lsr	r7, %[b], #16\n\t"
150785 #endif
150786 #ifdef WOLFSSL_KEIL
150787         "muls	r7, r6, r7\n\t"
150788 #elif defined(__clang__)
150789         "muls	r7, r6\n\t"
150790 #else
150791         "mul	r7, r6\n\t"
150792 #endif
150793 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150794         "adds	r4, r4, r7\n\t"
150795 #else
150796         "add	r4, r4, r7\n\t"
150797 #endif
150798 #ifdef WOLFSSL_KEIL
150799         "adcs	r5, r5, %[r]\n\t"
150800 #elif defined(__clang__)
150801         "adcs	r5, %[r]\n\t"
150802 #else
150803         "adc	r5, %[r]\n\t"
150804 #endif
150805         "uxth	r7, %[b]\n\t"
150806 #ifdef WOLFSSL_KEIL
150807         "muls	r6, r7, r6\n\t"
150808 #elif defined(__clang__)
150809         "muls	r6, r7\n\t"
150810 #else
150811         "mul	r6, r7\n\t"
150812 #endif
150813 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150814         "lsrs	r7, r6, #16\n\t"
150815 #else
150816         "lsr	r7, r6, #16\n\t"
150817 #endif
150818 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150819         "lsls	r6, r6, #16\n\t"
150820 #else
150821         "lsl	r6, r6, #16\n\t"
150822 #endif
150823 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150824         "adds	r3, r3, r6\n\t"
150825 #else
150826         "add	r3, r3, r6\n\t"
150827 #endif
150828 #ifdef WOLFSSL_KEIL
150829         "adcs	r4, r4, r7\n\t"
150830 #elif defined(__clang__)
150831         "adcs	r4, r7\n\t"
150832 #else
150833         "adc	r4, r7\n\t"
150834 #endif
150835 #ifdef WOLFSSL_KEIL
150836         "adcs	r5, r5, %[r]\n\t"
150837 #elif defined(__clang__)
150838         "adcs	r5, %[r]\n\t"
150839 #else
150840         "adc	r5, %[r]\n\t"
150841 #endif
150842         "#  A[10] * B[14]\n\t"
150843         "mov	%[a], r9\n\t"
150844         "mov	%[b], r10\n\t"
150845         "ldr	%[a], [%[a], #40]\n\t"
150846         "ldr	%[b], [%[b], #56]\n\t"
150847         "uxth	r6, %[a]\n\t"
150848         "uxth	r7, %[b]\n\t"
150849 #ifdef WOLFSSL_KEIL
150850         "muls	r7, r6, r7\n\t"
150851 #elif defined(__clang__)
150852         "muls	r7, r6\n\t"
150853 #else
150854         "mul	r7, r6\n\t"
150855 #endif
150856 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150857         "adds	r3, r3, r7\n\t"
150858 #else
150859         "add	r3, r3, r7\n\t"
150860 #endif
150861 #ifdef WOLFSSL_KEIL
150862         "adcs	r4, r4, %[r]\n\t"
150863 #elif defined(__clang__)
150864         "adcs	r4, %[r]\n\t"
150865 #else
150866         "adc	r4, %[r]\n\t"
150867 #endif
150868 #ifdef WOLFSSL_KEIL
150869         "adcs	r5, r5, %[r]\n\t"
150870 #elif defined(__clang__)
150871         "adcs	r5, %[r]\n\t"
150872 #else
150873         "adc	r5, %[r]\n\t"
150874 #endif
150875 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150876         "lsrs	r7, %[b], #16\n\t"
150877 #else
150878         "lsr	r7, %[b], #16\n\t"
150879 #endif
150880 #ifdef WOLFSSL_KEIL
150881         "muls	r6, r7, r6\n\t"
150882 #elif defined(__clang__)
150883         "muls	r6, r7\n\t"
150884 #else
150885         "mul	r6, r7\n\t"
150886 #endif
150887 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150888         "lsrs	r7, r6, #16\n\t"
150889 #else
150890         "lsr	r7, r6, #16\n\t"
150891 #endif
150892 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150893         "lsls	r6, r6, #16\n\t"
150894 #else
150895         "lsl	r6, r6, #16\n\t"
150896 #endif
150897 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150898         "adds	r3, r3, r6\n\t"
150899 #else
150900         "add	r3, r3, r6\n\t"
150901 #endif
150902 #ifdef WOLFSSL_KEIL
150903         "adcs	r4, r4, r7\n\t"
150904 #elif defined(__clang__)
150905         "adcs	r4, r7\n\t"
150906 #else
150907         "adc	r4, r7\n\t"
150908 #endif
150909 #ifdef WOLFSSL_KEIL
150910         "adcs	r5, r5, %[r]\n\t"
150911 #elif defined(__clang__)
150912         "adcs	r5, %[r]\n\t"
150913 #else
150914         "adc	r5, %[r]\n\t"
150915 #endif
150916 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150917         "lsrs	r6, %[a], #16\n\t"
150918 #else
150919         "lsr	r6, %[a], #16\n\t"
150920 #endif
150921 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150922         "lsrs	r7, %[b], #16\n\t"
150923 #else
150924         "lsr	r7, %[b], #16\n\t"
150925 #endif
150926 #ifdef WOLFSSL_KEIL
150927         "muls	r7, r6, r7\n\t"
150928 #elif defined(__clang__)
150929         "muls	r7, r6\n\t"
150930 #else
150931         "mul	r7, r6\n\t"
150932 #endif
150933 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150934         "adds	r4, r4, r7\n\t"
150935 #else
150936         "add	r4, r4, r7\n\t"
150937 #endif
150938 #ifdef WOLFSSL_KEIL
150939         "adcs	r5, r5, %[r]\n\t"
150940 #elif defined(__clang__)
150941         "adcs	r5, %[r]\n\t"
150942 #else
150943         "adc	r5, %[r]\n\t"
150944 #endif
150945         "uxth	r7, %[b]\n\t"
150946 #ifdef WOLFSSL_KEIL
150947         "muls	r6, r7, r6\n\t"
150948 #elif defined(__clang__)
150949         "muls	r6, r7\n\t"
150950 #else
150951         "mul	r6, r7\n\t"
150952 #endif
150953 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150954         "lsrs	r7, r6, #16\n\t"
150955 #else
150956         "lsr	r7, r6, #16\n\t"
150957 #endif
150958 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150959         "lsls	r6, r6, #16\n\t"
150960 #else
150961         "lsl	r6, r6, #16\n\t"
150962 #endif
150963 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150964         "adds	r3, r3, r6\n\t"
150965 #else
150966         "add	r3, r3, r6\n\t"
150967 #endif
150968 #ifdef WOLFSSL_KEIL
150969         "adcs	r4, r4, r7\n\t"
150970 #elif defined(__clang__)
150971         "adcs	r4, r7\n\t"
150972 #else
150973         "adc	r4, r7\n\t"
150974 #endif
150975 #ifdef WOLFSSL_KEIL
150976         "adcs	r5, r5, %[r]\n\t"
150977 #elif defined(__clang__)
150978         "adcs	r5, %[r]\n\t"
150979 #else
150980         "adc	r5, %[r]\n\t"
150981 #endif
150982         "#  A[9] * B[15]\n\t"
150983         "mov	%[a], r9\n\t"
150984         "mov	%[b], r10\n\t"
150985         "ldr	%[a], [%[a], #36]\n\t"
150986         "ldr	%[b], [%[b], #60]\n\t"
150987         "uxth	r6, %[a]\n\t"
150988         "uxth	r7, %[b]\n\t"
150989 #ifdef WOLFSSL_KEIL
150990         "muls	r7, r6, r7\n\t"
150991 #elif defined(__clang__)
150992         "muls	r7, r6\n\t"
150993 #else
150994         "mul	r7, r6\n\t"
150995 #endif
150996 #if defined(__clang__) || defined(WOLFSSL_KEIL)
150997         "adds	r3, r3, r7\n\t"
150998 #else
150999         "add	r3, r3, r7\n\t"
151000 #endif
151001 #ifdef WOLFSSL_KEIL
151002         "adcs	r4, r4, %[r]\n\t"
151003 #elif defined(__clang__)
151004         "adcs	r4, %[r]\n\t"
151005 #else
151006         "adc	r4, %[r]\n\t"
151007 #endif
151008 #ifdef WOLFSSL_KEIL
151009         "adcs	r5, r5, %[r]\n\t"
151010 #elif defined(__clang__)
151011         "adcs	r5, %[r]\n\t"
151012 #else
151013         "adc	r5, %[r]\n\t"
151014 #endif
151015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151016         "lsrs	r7, %[b], #16\n\t"
151017 #else
151018         "lsr	r7, %[b], #16\n\t"
151019 #endif
151020 #ifdef WOLFSSL_KEIL
151021         "muls	r6, r7, r6\n\t"
151022 #elif defined(__clang__)
151023         "muls	r6, r7\n\t"
151024 #else
151025         "mul	r6, r7\n\t"
151026 #endif
151027 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151028         "lsrs	r7, r6, #16\n\t"
151029 #else
151030         "lsr	r7, r6, #16\n\t"
151031 #endif
151032 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151033         "lsls	r6, r6, #16\n\t"
151034 #else
151035         "lsl	r6, r6, #16\n\t"
151036 #endif
151037 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151038         "adds	r3, r3, r6\n\t"
151039 #else
151040         "add	r3, r3, r6\n\t"
151041 #endif
151042 #ifdef WOLFSSL_KEIL
151043         "adcs	r4, r4, r7\n\t"
151044 #elif defined(__clang__)
151045         "adcs	r4, r7\n\t"
151046 #else
151047         "adc	r4, r7\n\t"
151048 #endif
151049 #ifdef WOLFSSL_KEIL
151050         "adcs	r5, r5, %[r]\n\t"
151051 #elif defined(__clang__)
151052         "adcs	r5, %[r]\n\t"
151053 #else
151054         "adc	r5, %[r]\n\t"
151055 #endif
151056 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151057         "lsrs	r6, %[a], #16\n\t"
151058 #else
151059         "lsr	r6, %[a], #16\n\t"
151060 #endif
151061 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151062         "lsrs	r7, %[b], #16\n\t"
151063 #else
151064         "lsr	r7, %[b], #16\n\t"
151065 #endif
151066 #ifdef WOLFSSL_KEIL
151067         "muls	r7, r6, r7\n\t"
151068 #elif defined(__clang__)
151069         "muls	r7, r6\n\t"
151070 #else
151071         "mul	r7, r6\n\t"
151072 #endif
151073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151074         "adds	r4, r4, r7\n\t"
151075 #else
151076         "add	r4, r4, r7\n\t"
151077 #endif
151078 #ifdef WOLFSSL_KEIL
151079         "adcs	r5, r5, %[r]\n\t"
151080 #elif defined(__clang__)
151081         "adcs	r5, %[r]\n\t"
151082 #else
151083         "adc	r5, %[r]\n\t"
151084 #endif
151085         "uxth	r7, %[b]\n\t"
151086 #ifdef WOLFSSL_KEIL
151087         "muls	r6, r7, r6\n\t"
151088 #elif defined(__clang__)
151089         "muls	r6, r7\n\t"
151090 #else
151091         "mul	r6, r7\n\t"
151092 #endif
151093 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151094         "lsrs	r7, r6, #16\n\t"
151095 #else
151096         "lsr	r7, r6, #16\n\t"
151097 #endif
151098 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151099         "lsls	r6, r6, #16\n\t"
151100 #else
151101         "lsl	r6, r6, #16\n\t"
151102 #endif
151103 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151104         "adds	r3, r3, r6\n\t"
151105 #else
151106         "add	r3, r3, r6\n\t"
151107 #endif
151108 #ifdef WOLFSSL_KEIL
151109         "adcs	r4, r4, r7\n\t"
151110 #elif defined(__clang__)
151111         "adcs	r4, r7\n\t"
151112 #else
151113         "adc	r4, r7\n\t"
151114 #endif
151115 #ifdef WOLFSSL_KEIL
151116         "adcs	r5, r5, %[r]\n\t"
151117 #elif defined(__clang__)
151118         "adcs	r5, %[r]\n\t"
151119 #else
151120         "adc	r5, %[r]\n\t"
151121 #endif
151122         "mov	%[r], r8\n\t"
151123         "str	r3, [%[r], #96]\n\t"
151124         "movs	%[r], #0\n\t"
151125         "#  A[10] * B[15]\n\t"
151126         "movs	r3, #0\n\t"
151127         "mov	%[a], r9\n\t"
151128         "mov	%[b], r10\n\t"
151129         "ldr	%[a], [%[a], #40]\n\t"
151130         "ldr	%[b], [%[b], #60]\n\t"
151131         "uxth	r6, %[a]\n\t"
151132         "uxth	r7, %[b]\n\t"
151133 #ifdef WOLFSSL_KEIL
151134         "muls	r7, r6, r7\n\t"
151135 #elif defined(__clang__)
151136         "muls	r7, r6\n\t"
151137 #else
151138         "mul	r7, r6\n\t"
151139 #endif
151140 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151141         "adds	r4, r4, r7\n\t"
151142 #else
151143         "add	r4, r4, r7\n\t"
151144 #endif
151145 #ifdef WOLFSSL_KEIL
151146         "adcs	r5, r5, %[r]\n\t"
151147 #elif defined(__clang__)
151148         "adcs	r5, %[r]\n\t"
151149 #else
151150         "adc	r5, %[r]\n\t"
151151 #endif
151152 #ifdef WOLFSSL_KEIL
151153         "adcs	r3, r3, %[r]\n\t"
151154 #elif defined(__clang__)
151155         "adcs	r3, %[r]\n\t"
151156 #else
151157         "adc	r3, %[r]\n\t"
151158 #endif
151159 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151160         "lsrs	r7, %[b], #16\n\t"
151161 #else
151162         "lsr	r7, %[b], #16\n\t"
151163 #endif
151164 #ifdef WOLFSSL_KEIL
151165         "muls	r6, r7, r6\n\t"
151166 #elif defined(__clang__)
151167         "muls	r6, r7\n\t"
151168 #else
151169         "mul	r6, r7\n\t"
151170 #endif
151171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151172         "lsrs	r7, r6, #16\n\t"
151173 #else
151174         "lsr	r7, r6, #16\n\t"
151175 #endif
151176 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151177         "lsls	r6, r6, #16\n\t"
151178 #else
151179         "lsl	r6, r6, #16\n\t"
151180 #endif
151181 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151182         "adds	r4, r4, r6\n\t"
151183 #else
151184         "add	r4, r4, r6\n\t"
151185 #endif
151186 #ifdef WOLFSSL_KEIL
151187         "adcs	r5, r5, r7\n\t"
151188 #elif defined(__clang__)
151189         "adcs	r5, r7\n\t"
151190 #else
151191         "adc	r5, r7\n\t"
151192 #endif
151193 #ifdef WOLFSSL_KEIL
151194         "adcs	r3, r3, %[r]\n\t"
151195 #elif defined(__clang__)
151196         "adcs	r3, %[r]\n\t"
151197 #else
151198         "adc	r3, %[r]\n\t"
151199 #endif
151200 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151201         "lsrs	r6, %[a], #16\n\t"
151202 #else
151203         "lsr	r6, %[a], #16\n\t"
151204 #endif
151205 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151206         "lsrs	r7, %[b], #16\n\t"
151207 #else
151208         "lsr	r7, %[b], #16\n\t"
151209 #endif
151210 #ifdef WOLFSSL_KEIL
151211         "muls	r7, r6, r7\n\t"
151212 #elif defined(__clang__)
151213         "muls	r7, r6\n\t"
151214 #else
151215         "mul	r7, r6\n\t"
151216 #endif
151217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151218         "adds	r5, r5, r7\n\t"
151219 #else
151220         "add	r5, r5, r7\n\t"
151221 #endif
151222 #ifdef WOLFSSL_KEIL
151223         "adcs	r3, r3, %[r]\n\t"
151224 #elif defined(__clang__)
151225         "adcs	r3, %[r]\n\t"
151226 #else
151227         "adc	r3, %[r]\n\t"
151228 #endif
151229         "uxth	r7, %[b]\n\t"
151230 #ifdef WOLFSSL_KEIL
151231         "muls	r6, r7, r6\n\t"
151232 #elif defined(__clang__)
151233         "muls	r6, r7\n\t"
151234 #else
151235         "mul	r6, r7\n\t"
151236 #endif
151237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151238         "lsrs	r7, r6, #16\n\t"
151239 #else
151240         "lsr	r7, r6, #16\n\t"
151241 #endif
151242 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151243         "lsls	r6, r6, #16\n\t"
151244 #else
151245         "lsl	r6, r6, #16\n\t"
151246 #endif
151247 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151248         "adds	r4, r4, r6\n\t"
151249 #else
151250         "add	r4, r4, r6\n\t"
151251 #endif
151252 #ifdef WOLFSSL_KEIL
151253         "adcs	r5, r5, r7\n\t"
151254 #elif defined(__clang__)
151255         "adcs	r5, r7\n\t"
151256 #else
151257         "adc	r5, r7\n\t"
151258 #endif
151259 #ifdef WOLFSSL_KEIL
151260         "adcs	r3, r3, %[r]\n\t"
151261 #elif defined(__clang__)
151262         "adcs	r3, %[r]\n\t"
151263 #else
151264         "adc	r3, %[r]\n\t"
151265 #endif
151266         "#  A[11] * B[14]\n\t"
151267         "mov	%[a], r9\n\t"
151268         "mov	%[b], r10\n\t"
151269         "ldr	%[a], [%[a], #44]\n\t"
151270         "ldr	%[b], [%[b], #56]\n\t"
151271         "uxth	r6, %[a]\n\t"
151272         "uxth	r7, %[b]\n\t"
151273 #ifdef WOLFSSL_KEIL
151274         "muls	r7, r6, r7\n\t"
151275 #elif defined(__clang__)
151276         "muls	r7, r6\n\t"
151277 #else
151278         "mul	r7, r6\n\t"
151279 #endif
151280 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151281         "adds	r4, r4, r7\n\t"
151282 #else
151283         "add	r4, r4, r7\n\t"
151284 #endif
151285 #ifdef WOLFSSL_KEIL
151286         "adcs	r5, r5, %[r]\n\t"
151287 #elif defined(__clang__)
151288         "adcs	r5, %[r]\n\t"
151289 #else
151290         "adc	r5, %[r]\n\t"
151291 #endif
151292 #ifdef WOLFSSL_KEIL
151293         "adcs	r3, r3, %[r]\n\t"
151294 #elif defined(__clang__)
151295         "adcs	r3, %[r]\n\t"
151296 #else
151297         "adc	r3, %[r]\n\t"
151298 #endif
151299 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151300         "lsrs	r7, %[b], #16\n\t"
151301 #else
151302         "lsr	r7, %[b], #16\n\t"
151303 #endif
151304 #ifdef WOLFSSL_KEIL
151305         "muls	r6, r7, r6\n\t"
151306 #elif defined(__clang__)
151307         "muls	r6, r7\n\t"
151308 #else
151309         "mul	r6, r7\n\t"
151310 #endif
151311 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151312         "lsrs	r7, r6, #16\n\t"
151313 #else
151314         "lsr	r7, r6, #16\n\t"
151315 #endif
151316 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151317         "lsls	r6, r6, #16\n\t"
151318 #else
151319         "lsl	r6, r6, #16\n\t"
151320 #endif
151321 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151322         "adds	r4, r4, r6\n\t"
151323 #else
151324         "add	r4, r4, r6\n\t"
151325 #endif
151326 #ifdef WOLFSSL_KEIL
151327         "adcs	r5, r5, r7\n\t"
151328 #elif defined(__clang__)
151329         "adcs	r5, r7\n\t"
151330 #else
151331         "adc	r5, r7\n\t"
151332 #endif
151333 #ifdef WOLFSSL_KEIL
151334         "adcs	r3, r3, %[r]\n\t"
151335 #elif defined(__clang__)
151336         "adcs	r3, %[r]\n\t"
151337 #else
151338         "adc	r3, %[r]\n\t"
151339 #endif
151340 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151341         "lsrs	r6, %[a], #16\n\t"
151342 #else
151343         "lsr	r6, %[a], #16\n\t"
151344 #endif
151345 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151346         "lsrs	r7, %[b], #16\n\t"
151347 #else
151348         "lsr	r7, %[b], #16\n\t"
151349 #endif
151350 #ifdef WOLFSSL_KEIL
151351         "muls	r7, r6, r7\n\t"
151352 #elif defined(__clang__)
151353         "muls	r7, r6\n\t"
151354 #else
151355         "mul	r7, r6\n\t"
151356 #endif
151357 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151358         "adds	r5, r5, r7\n\t"
151359 #else
151360         "add	r5, r5, r7\n\t"
151361 #endif
151362 #ifdef WOLFSSL_KEIL
151363         "adcs	r3, r3, %[r]\n\t"
151364 #elif defined(__clang__)
151365         "adcs	r3, %[r]\n\t"
151366 #else
151367         "adc	r3, %[r]\n\t"
151368 #endif
151369         "uxth	r7, %[b]\n\t"
151370 #ifdef WOLFSSL_KEIL
151371         "muls	r6, r7, r6\n\t"
151372 #elif defined(__clang__)
151373         "muls	r6, r7\n\t"
151374 #else
151375         "mul	r6, r7\n\t"
151376 #endif
151377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151378         "lsrs	r7, r6, #16\n\t"
151379 #else
151380         "lsr	r7, r6, #16\n\t"
151381 #endif
151382 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151383         "lsls	r6, r6, #16\n\t"
151384 #else
151385         "lsl	r6, r6, #16\n\t"
151386 #endif
151387 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151388         "adds	r4, r4, r6\n\t"
151389 #else
151390         "add	r4, r4, r6\n\t"
151391 #endif
151392 #ifdef WOLFSSL_KEIL
151393         "adcs	r5, r5, r7\n\t"
151394 #elif defined(__clang__)
151395         "adcs	r5, r7\n\t"
151396 #else
151397         "adc	r5, r7\n\t"
151398 #endif
151399 #ifdef WOLFSSL_KEIL
151400         "adcs	r3, r3, %[r]\n\t"
151401 #elif defined(__clang__)
151402         "adcs	r3, %[r]\n\t"
151403 #else
151404         "adc	r3, %[r]\n\t"
151405 #endif
151406         "#  A[12] * B[13]\n\t"
151407         "mov	%[a], r9\n\t"
151408         "mov	%[b], r10\n\t"
151409         "ldr	%[a], [%[a], #48]\n\t"
151410         "ldr	%[b], [%[b], #52]\n\t"
151411         "uxth	r6, %[a]\n\t"
151412         "uxth	r7, %[b]\n\t"
151413 #ifdef WOLFSSL_KEIL
151414         "muls	r7, r6, r7\n\t"
151415 #elif defined(__clang__)
151416         "muls	r7, r6\n\t"
151417 #else
151418         "mul	r7, r6\n\t"
151419 #endif
151420 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151421         "adds	r4, r4, r7\n\t"
151422 #else
151423         "add	r4, r4, r7\n\t"
151424 #endif
151425 #ifdef WOLFSSL_KEIL
151426         "adcs	r5, r5, %[r]\n\t"
151427 #elif defined(__clang__)
151428         "adcs	r5, %[r]\n\t"
151429 #else
151430         "adc	r5, %[r]\n\t"
151431 #endif
151432 #ifdef WOLFSSL_KEIL
151433         "adcs	r3, r3, %[r]\n\t"
151434 #elif defined(__clang__)
151435         "adcs	r3, %[r]\n\t"
151436 #else
151437         "adc	r3, %[r]\n\t"
151438 #endif
151439 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151440         "lsrs	r7, %[b], #16\n\t"
151441 #else
151442         "lsr	r7, %[b], #16\n\t"
151443 #endif
151444 #ifdef WOLFSSL_KEIL
151445         "muls	r6, r7, r6\n\t"
151446 #elif defined(__clang__)
151447         "muls	r6, r7\n\t"
151448 #else
151449         "mul	r6, r7\n\t"
151450 #endif
151451 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151452         "lsrs	r7, r6, #16\n\t"
151453 #else
151454         "lsr	r7, r6, #16\n\t"
151455 #endif
151456 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151457         "lsls	r6, r6, #16\n\t"
151458 #else
151459         "lsl	r6, r6, #16\n\t"
151460 #endif
151461 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151462         "adds	r4, r4, r6\n\t"
151463 #else
151464         "add	r4, r4, r6\n\t"
151465 #endif
151466 #ifdef WOLFSSL_KEIL
151467         "adcs	r5, r5, r7\n\t"
151468 #elif defined(__clang__)
151469         "adcs	r5, r7\n\t"
151470 #else
151471         "adc	r5, r7\n\t"
151472 #endif
151473 #ifdef WOLFSSL_KEIL
151474         "adcs	r3, r3, %[r]\n\t"
151475 #elif defined(__clang__)
151476         "adcs	r3, %[r]\n\t"
151477 #else
151478         "adc	r3, %[r]\n\t"
151479 #endif
151480 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151481         "lsrs	r6, %[a], #16\n\t"
151482 #else
151483         "lsr	r6, %[a], #16\n\t"
151484 #endif
151485 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151486         "lsrs	r7, %[b], #16\n\t"
151487 #else
151488         "lsr	r7, %[b], #16\n\t"
151489 #endif
151490 #ifdef WOLFSSL_KEIL
151491         "muls	r7, r6, r7\n\t"
151492 #elif defined(__clang__)
151493         "muls	r7, r6\n\t"
151494 #else
151495         "mul	r7, r6\n\t"
151496 #endif
151497 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151498         "adds	r5, r5, r7\n\t"
151499 #else
151500         "add	r5, r5, r7\n\t"
151501 #endif
151502 #ifdef WOLFSSL_KEIL
151503         "adcs	r3, r3, %[r]\n\t"
151504 #elif defined(__clang__)
151505         "adcs	r3, %[r]\n\t"
151506 #else
151507         "adc	r3, %[r]\n\t"
151508 #endif
151509         "uxth	r7, %[b]\n\t"
151510 #ifdef WOLFSSL_KEIL
151511         "muls	r6, r7, r6\n\t"
151512 #elif defined(__clang__)
151513         "muls	r6, r7\n\t"
151514 #else
151515         "mul	r6, r7\n\t"
151516 #endif
151517 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151518         "lsrs	r7, r6, #16\n\t"
151519 #else
151520         "lsr	r7, r6, #16\n\t"
151521 #endif
151522 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151523         "lsls	r6, r6, #16\n\t"
151524 #else
151525         "lsl	r6, r6, #16\n\t"
151526 #endif
151527 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151528         "adds	r4, r4, r6\n\t"
151529 #else
151530         "add	r4, r4, r6\n\t"
151531 #endif
151532 #ifdef WOLFSSL_KEIL
151533         "adcs	r5, r5, r7\n\t"
151534 #elif defined(__clang__)
151535         "adcs	r5, r7\n\t"
151536 #else
151537         "adc	r5, r7\n\t"
151538 #endif
151539 #ifdef WOLFSSL_KEIL
151540         "adcs	r3, r3, %[r]\n\t"
151541 #elif defined(__clang__)
151542         "adcs	r3, %[r]\n\t"
151543 #else
151544         "adc	r3, %[r]\n\t"
151545 #endif
151546         "#  A[13] * B[12]\n\t"
151547         "mov	%[a], r9\n\t"
151548         "mov	%[b], r10\n\t"
151549         "ldr	%[a], [%[a], #52]\n\t"
151550         "ldr	%[b], [%[b], #48]\n\t"
151551         "uxth	r6, %[a]\n\t"
151552         "uxth	r7, %[b]\n\t"
151553 #ifdef WOLFSSL_KEIL
151554         "muls	r7, r6, r7\n\t"
151555 #elif defined(__clang__)
151556         "muls	r7, r6\n\t"
151557 #else
151558         "mul	r7, r6\n\t"
151559 #endif
151560 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151561         "adds	r4, r4, r7\n\t"
151562 #else
151563         "add	r4, r4, r7\n\t"
151564 #endif
151565 #ifdef WOLFSSL_KEIL
151566         "adcs	r5, r5, %[r]\n\t"
151567 #elif defined(__clang__)
151568         "adcs	r5, %[r]\n\t"
151569 #else
151570         "adc	r5, %[r]\n\t"
151571 #endif
151572 #ifdef WOLFSSL_KEIL
151573         "adcs	r3, r3, %[r]\n\t"
151574 #elif defined(__clang__)
151575         "adcs	r3, %[r]\n\t"
151576 #else
151577         "adc	r3, %[r]\n\t"
151578 #endif
151579 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151580         "lsrs	r7, %[b], #16\n\t"
151581 #else
151582         "lsr	r7, %[b], #16\n\t"
151583 #endif
151584 #ifdef WOLFSSL_KEIL
151585         "muls	r6, r7, r6\n\t"
151586 #elif defined(__clang__)
151587         "muls	r6, r7\n\t"
151588 #else
151589         "mul	r6, r7\n\t"
151590 #endif
151591 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151592         "lsrs	r7, r6, #16\n\t"
151593 #else
151594         "lsr	r7, r6, #16\n\t"
151595 #endif
151596 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151597         "lsls	r6, r6, #16\n\t"
151598 #else
151599         "lsl	r6, r6, #16\n\t"
151600 #endif
151601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151602         "adds	r4, r4, r6\n\t"
151603 #else
151604         "add	r4, r4, r6\n\t"
151605 #endif
151606 #ifdef WOLFSSL_KEIL
151607         "adcs	r5, r5, r7\n\t"
151608 #elif defined(__clang__)
151609         "adcs	r5, r7\n\t"
151610 #else
151611         "adc	r5, r7\n\t"
151612 #endif
151613 #ifdef WOLFSSL_KEIL
151614         "adcs	r3, r3, %[r]\n\t"
151615 #elif defined(__clang__)
151616         "adcs	r3, %[r]\n\t"
151617 #else
151618         "adc	r3, %[r]\n\t"
151619 #endif
151620 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151621         "lsrs	r6, %[a], #16\n\t"
151622 #else
151623         "lsr	r6, %[a], #16\n\t"
151624 #endif
151625 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151626         "lsrs	r7, %[b], #16\n\t"
151627 #else
151628         "lsr	r7, %[b], #16\n\t"
151629 #endif
151630 #ifdef WOLFSSL_KEIL
151631         "muls	r7, r6, r7\n\t"
151632 #elif defined(__clang__)
151633         "muls	r7, r6\n\t"
151634 #else
151635         "mul	r7, r6\n\t"
151636 #endif
151637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151638         "adds	r5, r5, r7\n\t"
151639 #else
151640         "add	r5, r5, r7\n\t"
151641 #endif
151642 #ifdef WOLFSSL_KEIL
151643         "adcs	r3, r3, %[r]\n\t"
151644 #elif defined(__clang__)
151645         "adcs	r3, %[r]\n\t"
151646 #else
151647         "adc	r3, %[r]\n\t"
151648 #endif
151649         "uxth	r7, %[b]\n\t"
151650 #ifdef WOLFSSL_KEIL
151651         "muls	r6, r7, r6\n\t"
151652 #elif defined(__clang__)
151653         "muls	r6, r7\n\t"
151654 #else
151655         "mul	r6, r7\n\t"
151656 #endif
151657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151658         "lsrs	r7, r6, #16\n\t"
151659 #else
151660         "lsr	r7, r6, #16\n\t"
151661 #endif
151662 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151663         "lsls	r6, r6, #16\n\t"
151664 #else
151665         "lsl	r6, r6, #16\n\t"
151666 #endif
151667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151668         "adds	r4, r4, r6\n\t"
151669 #else
151670         "add	r4, r4, r6\n\t"
151671 #endif
151672 #ifdef WOLFSSL_KEIL
151673         "adcs	r5, r5, r7\n\t"
151674 #elif defined(__clang__)
151675         "adcs	r5, r7\n\t"
151676 #else
151677         "adc	r5, r7\n\t"
151678 #endif
151679 #ifdef WOLFSSL_KEIL
151680         "adcs	r3, r3, %[r]\n\t"
151681 #elif defined(__clang__)
151682         "adcs	r3, %[r]\n\t"
151683 #else
151684         "adc	r3, %[r]\n\t"
151685 #endif
151686         "#  A[14] * B[11]\n\t"
151687         "mov	%[a], r9\n\t"
151688         "mov	%[b], r10\n\t"
151689         "ldr	%[a], [%[a], #56]\n\t"
151690         "ldr	%[b], [%[b], #44]\n\t"
151691         "uxth	r6, %[a]\n\t"
151692         "uxth	r7, %[b]\n\t"
151693 #ifdef WOLFSSL_KEIL
151694         "muls	r7, r6, r7\n\t"
151695 #elif defined(__clang__)
151696         "muls	r7, r6\n\t"
151697 #else
151698         "mul	r7, r6\n\t"
151699 #endif
151700 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151701         "adds	r4, r4, r7\n\t"
151702 #else
151703         "add	r4, r4, r7\n\t"
151704 #endif
151705 #ifdef WOLFSSL_KEIL
151706         "adcs	r5, r5, %[r]\n\t"
151707 #elif defined(__clang__)
151708         "adcs	r5, %[r]\n\t"
151709 #else
151710         "adc	r5, %[r]\n\t"
151711 #endif
151712 #ifdef WOLFSSL_KEIL
151713         "adcs	r3, r3, %[r]\n\t"
151714 #elif defined(__clang__)
151715         "adcs	r3, %[r]\n\t"
151716 #else
151717         "adc	r3, %[r]\n\t"
151718 #endif
151719 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151720         "lsrs	r7, %[b], #16\n\t"
151721 #else
151722         "lsr	r7, %[b], #16\n\t"
151723 #endif
151724 #ifdef WOLFSSL_KEIL
151725         "muls	r6, r7, r6\n\t"
151726 #elif defined(__clang__)
151727         "muls	r6, r7\n\t"
151728 #else
151729         "mul	r6, r7\n\t"
151730 #endif
151731 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151732         "lsrs	r7, r6, #16\n\t"
151733 #else
151734         "lsr	r7, r6, #16\n\t"
151735 #endif
151736 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151737         "lsls	r6, r6, #16\n\t"
151738 #else
151739         "lsl	r6, r6, #16\n\t"
151740 #endif
151741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151742         "adds	r4, r4, r6\n\t"
151743 #else
151744         "add	r4, r4, r6\n\t"
151745 #endif
151746 #ifdef WOLFSSL_KEIL
151747         "adcs	r5, r5, r7\n\t"
151748 #elif defined(__clang__)
151749         "adcs	r5, r7\n\t"
151750 #else
151751         "adc	r5, r7\n\t"
151752 #endif
151753 #ifdef WOLFSSL_KEIL
151754         "adcs	r3, r3, %[r]\n\t"
151755 #elif defined(__clang__)
151756         "adcs	r3, %[r]\n\t"
151757 #else
151758         "adc	r3, %[r]\n\t"
151759 #endif
151760 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151761         "lsrs	r6, %[a], #16\n\t"
151762 #else
151763         "lsr	r6, %[a], #16\n\t"
151764 #endif
151765 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151766         "lsrs	r7, %[b], #16\n\t"
151767 #else
151768         "lsr	r7, %[b], #16\n\t"
151769 #endif
151770 #ifdef WOLFSSL_KEIL
151771         "muls	r7, r6, r7\n\t"
151772 #elif defined(__clang__)
151773         "muls	r7, r6\n\t"
151774 #else
151775         "mul	r7, r6\n\t"
151776 #endif
151777 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151778         "adds	r5, r5, r7\n\t"
151779 #else
151780         "add	r5, r5, r7\n\t"
151781 #endif
151782 #ifdef WOLFSSL_KEIL
151783         "adcs	r3, r3, %[r]\n\t"
151784 #elif defined(__clang__)
151785         "adcs	r3, %[r]\n\t"
151786 #else
151787         "adc	r3, %[r]\n\t"
151788 #endif
151789         "uxth	r7, %[b]\n\t"
151790 #ifdef WOLFSSL_KEIL
151791         "muls	r6, r7, r6\n\t"
151792 #elif defined(__clang__)
151793         "muls	r6, r7\n\t"
151794 #else
151795         "mul	r6, r7\n\t"
151796 #endif
151797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151798         "lsrs	r7, r6, #16\n\t"
151799 #else
151800         "lsr	r7, r6, #16\n\t"
151801 #endif
151802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151803         "lsls	r6, r6, #16\n\t"
151804 #else
151805         "lsl	r6, r6, #16\n\t"
151806 #endif
151807 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151808         "adds	r4, r4, r6\n\t"
151809 #else
151810         "add	r4, r4, r6\n\t"
151811 #endif
151812 #ifdef WOLFSSL_KEIL
151813         "adcs	r5, r5, r7\n\t"
151814 #elif defined(__clang__)
151815         "adcs	r5, r7\n\t"
151816 #else
151817         "adc	r5, r7\n\t"
151818 #endif
151819 #ifdef WOLFSSL_KEIL
151820         "adcs	r3, r3, %[r]\n\t"
151821 #elif defined(__clang__)
151822         "adcs	r3, %[r]\n\t"
151823 #else
151824         "adc	r3, %[r]\n\t"
151825 #endif
151826         "#  A[15] * B[10]\n\t"
151827         "mov	%[a], r9\n\t"
151828         "mov	%[b], r10\n\t"
151829         "ldr	%[a], [%[a], #60]\n\t"
151830         "ldr	%[b], [%[b], #40]\n\t"
151831         "uxth	r6, %[a]\n\t"
151832         "uxth	r7, %[b]\n\t"
151833 #ifdef WOLFSSL_KEIL
151834         "muls	r7, r6, r7\n\t"
151835 #elif defined(__clang__)
151836         "muls	r7, r6\n\t"
151837 #else
151838         "mul	r7, r6\n\t"
151839 #endif
151840 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151841         "adds	r4, r4, r7\n\t"
151842 #else
151843         "add	r4, r4, r7\n\t"
151844 #endif
151845 #ifdef WOLFSSL_KEIL
151846         "adcs	r5, r5, %[r]\n\t"
151847 #elif defined(__clang__)
151848         "adcs	r5, %[r]\n\t"
151849 #else
151850         "adc	r5, %[r]\n\t"
151851 #endif
151852 #ifdef WOLFSSL_KEIL
151853         "adcs	r3, r3, %[r]\n\t"
151854 #elif defined(__clang__)
151855         "adcs	r3, %[r]\n\t"
151856 #else
151857         "adc	r3, %[r]\n\t"
151858 #endif
151859 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151860         "lsrs	r7, %[b], #16\n\t"
151861 #else
151862         "lsr	r7, %[b], #16\n\t"
151863 #endif
151864 #ifdef WOLFSSL_KEIL
151865         "muls	r6, r7, r6\n\t"
151866 #elif defined(__clang__)
151867         "muls	r6, r7\n\t"
151868 #else
151869         "mul	r6, r7\n\t"
151870 #endif
151871 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151872         "lsrs	r7, r6, #16\n\t"
151873 #else
151874         "lsr	r7, r6, #16\n\t"
151875 #endif
151876 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151877         "lsls	r6, r6, #16\n\t"
151878 #else
151879         "lsl	r6, r6, #16\n\t"
151880 #endif
151881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151882         "adds	r4, r4, r6\n\t"
151883 #else
151884         "add	r4, r4, r6\n\t"
151885 #endif
151886 #ifdef WOLFSSL_KEIL
151887         "adcs	r5, r5, r7\n\t"
151888 #elif defined(__clang__)
151889         "adcs	r5, r7\n\t"
151890 #else
151891         "adc	r5, r7\n\t"
151892 #endif
151893 #ifdef WOLFSSL_KEIL
151894         "adcs	r3, r3, %[r]\n\t"
151895 #elif defined(__clang__)
151896         "adcs	r3, %[r]\n\t"
151897 #else
151898         "adc	r3, %[r]\n\t"
151899 #endif
151900 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151901         "lsrs	r6, %[a], #16\n\t"
151902 #else
151903         "lsr	r6, %[a], #16\n\t"
151904 #endif
151905 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151906         "lsrs	r7, %[b], #16\n\t"
151907 #else
151908         "lsr	r7, %[b], #16\n\t"
151909 #endif
151910 #ifdef WOLFSSL_KEIL
151911         "muls	r7, r6, r7\n\t"
151912 #elif defined(__clang__)
151913         "muls	r7, r6\n\t"
151914 #else
151915         "mul	r7, r6\n\t"
151916 #endif
151917 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151918         "adds	r5, r5, r7\n\t"
151919 #else
151920         "add	r5, r5, r7\n\t"
151921 #endif
151922 #ifdef WOLFSSL_KEIL
151923         "adcs	r3, r3, %[r]\n\t"
151924 #elif defined(__clang__)
151925         "adcs	r3, %[r]\n\t"
151926 #else
151927         "adc	r3, %[r]\n\t"
151928 #endif
151929         "uxth	r7, %[b]\n\t"
151930 #ifdef WOLFSSL_KEIL
151931         "muls	r6, r7, r6\n\t"
151932 #elif defined(__clang__)
151933         "muls	r6, r7\n\t"
151934 #else
151935         "mul	r6, r7\n\t"
151936 #endif
151937 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151938         "lsrs	r7, r6, #16\n\t"
151939 #else
151940         "lsr	r7, r6, #16\n\t"
151941 #endif
151942 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151943         "lsls	r6, r6, #16\n\t"
151944 #else
151945         "lsl	r6, r6, #16\n\t"
151946 #endif
151947 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151948         "adds	r4, r4, r6\n\t"
151949 #else
151950         "add	r4, r4, r6\n\t"
151951 #endif
151952 #ifdef WOLFSSL_KEIL
151953         "adcs	r5, r5, r7\n\t"
151954 #elif defined(__clang__)
151955         "adcs	r5, r7\n\t"
151956 #else
151957         "adc	r5, r7\n\t"
151958 #endif
151959 #ifdef WOLFSSL_KEIL
151960         "adcs	r3, r3, %[r]\n\t"
151961 #elif defined(__clang__)
151962         "adcs	r3, %[r]\n\t"
151963 #else
151964         "adc	r3, %[r]\n\t"
151965 #endif
151966         "mov	%[r], r8\n\t"
151967         "str	r4, [%[r], #100]\n\t"
151968         "movs	%[r], #0\n\t"
151969         "#  A[15] * B[11]\n\t"
151970         "movs	r4, #0\n\t"
151971         "mov	%[a], r9\n\t"
151972         "mov	%[b], r10\n\t"
151973         "ldr	%[a], [%[a], #60]\n\t"
151974         "ldr	%[b], [%[b], #44]\n\t"
151975         "uxth	r6, %[a]\n\t"
151976         "uxth	r7, %[b]\n\t"
151977 #ifdef WOLFSSL_KEIL
151978         "muls	r7, r6, r7\n\t"
151979 #elif defined(__clang__)
151980         "muls	r7, r6\n\t"
151981 #else
151982         "mul	r7, r6\n\t"
151983 #endif
151984 #if defined(__clang__) || defined(WOLFSSL_KEIL)
151985         "adds	r5, r5, r7\n\t"
151986 #else
151987         "add	r5, r5, r7\n\t"
151988 #endif
151989 #ifdef WOLFSSL_KEIL
151990         "adcs	r3, r3, %[r]\n\t"
151991 #elif defined(__clang__)
151992         "adcs	r3, %[r]\n\t"
151993 #else
151994         "adc	r3, %[r]\n\t"
151995 #endif
151996 #ifdef WOLFSSL_KEIL
151997         "adcs	r4, r4, %[r]\n\t"
151998 #elif defined(__clang__)
151999         "adcs	r4, %[r]\n\t"
152000 #else
152001         "adc	r4, %[r]\n\t"
152002 #endif
152003 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152004         "lsrs	r7, %[b], #16\n\t"
152005 #else
152006         "lsr	r7, %[b], #16\n\t"
152007 #endif
152008 #ifdef WOLFSSL_KEIL
152009         "muls	r6, r7, r6\n\t"
152010 #elif defined(__clang__)
152011         "muls	r6, r7\n\t"
152012 #else
152013         "mul	r6, r7\n\t"
152014 #endif
152015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152016         "lsrs	r7, r6, #16\n\t"
152017 #else
152018         "lsr	r7, r6, #16\n\t"
152019 #endif
152020 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152021         "lsls	r6, r6, #16\n\t"
152022 #else
152023         "lsl	r6, r6, #16\n\t"
152024 #endif
152025 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152026         "adds	r5, r5, r6\n\t"
152027 #else
152028         "add	r5, r5, r6\n\t"
152029 #endif
152030 #ifdef WOLFSSL_KEIL
152031         "adcs	r3, r3, r7\n\t"
152032 #elif defined(__clang__)
152033         "adcs	r3, r7\n\t"
152034 #else
152035         "adc	r3, r7\n\t"
152036 #endif
152037 #ifdef WOLFSSL_KEIL
152038         "adcs	r4, r4, %[r]\n\t"
152039 #elif defined(__clang__)
152040         "adcs	r4, %[r]\n\t"
152041 #else
152042         "adc	r4, %[r]\n\t"
152043 #endif
152044 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152045         "lsrs	r6, %[a], #16\n\t"
152046 #else
152047         "lsr	r6, %[a], #16\n\t"
152048 #endif
152049 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152050         "lsrs	r7, %[b], #16\n\t"
152051 #else
152052         "lsr	r7, %[b], #16\n\t"
152053 #endif
152054 #ifdef WOLFSSL_KEIL
152055         "muls	r7, r6, r7\n\t"
152056 #elif defined(__clang__)
152057         "muls	r7, r6\n\t"
152058 #else
152059         "mul	r7, r6\n\t"
152060 #endif
152061 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152062         "adds	r3, r3, r7\n\t"
152063 #else
152064         "add	r3, r3, r7\n\t"
152065 #endif
152066 #ifdef WOLFSSL_KEIL
152067         "adcs	r4, r4, %[r]\n\t"
152068 #elif defined(__clang__)
152069         "adcs	r4, %[r]\n\t"
152070 #else
152071         "adc	r4, %[r]\n\t"
152072 #endif
152073         "uxth	r7, %[b]\n\t"
152074 #ifdef WOLFSSL_KEIL
152075         "muls	r6, r7, r6\n\t"
152076 #elif defined(__clang__)
152077         "muls	r6, r7\n\t"
152078 #else
152079         "mul	r6, r7\n\t"
152080 #endif
152081 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152082         "lsrs	r7, r6, #16\n\t"
152083 #else
152084         "lsr	r7, r6, #16\n\t"
152085 #endif
152086 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152087         "lsls	r6, r6, #16\n\t"
152088 #else
152089         "lsl	r6, r6, #16\n\t"
152090 #endif
152091 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152092         "adds	r5, r5, r6\n\t"
152093 #else
152094         "add	r5, r5, r6\n\t"
152095 #endif
152096 #ifdef WOLFSSL_KEIL
152097         "adcs	r3, r3, r7\n\t"
152098 #elif defined(__clang__)
152099         "adcs	r3, r7\n\t"
152100 #else
152101         "adc	r3, r7\n\t"
152102 #endif
152103 #ifdef WOLFSSL_KEIL
152104         "adcs	r4, r4, %[r]\n\t"
152105 #elif defined(__clang__)
152106         "adcs	r4, %[r]\n\t"
152107 #else
152108         "adc	r4, %[r]\n\t"
152109 #endif
152110         "#  A[14] * B[12]\n\t"
152111         "mov	%[a], r9\n\t"
152112         "mov	%[b], r10\n\t"
152113         "ldr	%[a], [%[a], #56]\n\t"
152114         "ldr	%[b], [%[b], #48]\n\t"
152115         "uxth	r6, %[a]\n\t"
152116         "uxth	r7, %[b]\n\t"
152117 #ifdef WOLFSSL_KEIL
152118         "muls	r7, r6, r7\n\t"
152119 #elif defined(__clang__)
152120         "muls	r7, r6\n\t"
152121 #else
152122         "mul	r7, r6\n\t"
152123 #endif
152124 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152125         "adds	r5, r5, r7\n\t"
152126 #else
152127         "add	r5, r5, r7\n\t"
152128 #endif
152129 #ifdef WOLFSSL_KEIL
152130         "adcs	r3, r3, %[r]\n\t"
152131 #elif defined(__clang__)
152132         "adcs	r3, %[r]\n\t"
152133 #else
152134         "adc	r3, %[r]\n\t"
152135 #endif
152136 #ifdef WOLFSSL_KEIL
152137         "adcs	r4, r4, %[r]\n\t"
152138 #elif defined(__clang__)
152139         "adcs	r4, %[r]\n\t"
152140 #else
152141         "adc	r4, %[r]\n\t"
152142 #endif
152143 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152144         "lsrs	r7, %[b], #16\n\t"
152145 #else
152146         "lsr	r7, %[b], #16\n\t"
152147 #endif
152148 #ifdef WOLFSSL_KEIL
152149         "muls	r6, r7, r6\n\t"
152150 #elif defined(__clang__)
152151         "muls	r6, r7\n\t"
152152 #else
152153         "mul	r6, r7\n\t"
152154 #endif
152155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152156         "lsrs	r7, r6, #16\n\t"
152157 #else
152158         "lsr	r7, r6, #16\n\t"
152159 #endif
152160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152161         "lsls	r6, r6, #16\n\t"
152162 #else
152163         "lsl	r6, r6, #16\n\t"
152164 #endif
152165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152166         "adds	r5, r5, r6\n\t"
152167 #else
152168         "add	r5, r5, r6\n\t"
152169 #endif
152170 #ifdef WOLFSSL_KEIL
152171         "adcs	r3, r3, r7\n\t"
152172 #elif defined(__clang__)
152173         "adcs	r3, r7\n\t"
152174 #else
152175         "adc	r3, r7\n\t"
152176 #endif
152177 #ifdef WOLFSSL_KEIL
152178         "adcs	r4, r4, %[r]\n\t"
152179 #elif defined(__clang__)
152180         "adcs	r4, %[r]\n\t"
152181 #else
152182         "adc	r4, %[r]\n\t"
152183 #endif
152184 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152185         "lsrs	r6, %[a], #16\n\t"
152186 #else
152187         "lsr	r6, %[a], #16\n\t"
152188 #endif
152189 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152190         "lsrs	r7, %[b], #16\n\t"
152191 #else
152192         "lsr	r7, %[b], #16\n\t"
152193 #endif
152194 #ifdef WOLFSSL_KEIL
152195         "muls	r7, r6, r7\n\t"
152196 #elif defined(__clang__)
152197         "muls	r7, r6\n\t"
152198 #else
152199         "mul	r7, r6\n\t"
152200 #endif
152201 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152202         "adds	r3, r3, r7\n\t"
152203 #else
152204         "add	r3, r3, r7\n\t"
152205 #endif
152206 #ifdef WOLFSSL_KEIL
152207         "adcs	r4, r4, %[r]\n\t"
152208 #elif defined(__clang__)
152209         "adcs	r4, %[r]\n\t"
152210 #else
152211         "adc	r4, %[r]\n\t"
152212 #endif
152213         "uxth	r7, %[b]\n\t"
152214 #ifdef WOLFSSL_KEIL
152215         "muls	r6, r7, r6\n\t"
152216 #elif defined(__clang__)
152217         "muls	r6, r7\n\t"
152218 #else
152219         "mul	r6, r7\n\t"
152220 #endif
152221 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152222         "lsrs	r7, r6, #16\n\t"
152223 #else
152224         "lsr	r7, r6, #16\n\t"
152225 #endif
152226 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152227         "lsls	r6, r6, #16\n\t"
152228 #else
152229         "lsl	r6, r6, #16\n\t"
152230 #endif
152231 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152232         "adds	r5, r5, r6\n\t"
152233 #else
152234         "add	r5, r5, r6\n\t"
152235 #endif
152236 #ifdef WOLFSSL_KEIL
152237         "adcs	r3, r3, r7\n\t"
152238 #elif defined(__clang__)
152239         "adcs	r3, r7\n\t"
152240 #else
152241         "adc	r3, r7\n\t"
152242 #endif
152243 #ifdef WOLFSSL_KEIL
152244         "adcs	r4, r4, %[r]\n\t"
152245 #elif defined(__clang__)
152246         "adcs	r4, %[r]\n\t"
152247 #else
152248         "adc	r4, %[r]\n\t"
152249 #endif
152250         "#  A[13] * B[13]\n\t"
152251         "mov	%[a], r9\n\t"
152252         "mov	%[b], r10\n\t"
152253         "ldr	%[a], [%[a], #52]\n\t"
152254         "ldr	%[b], [%[b], #52]\n\t"
152255         "uxth	r6, %[a]\n\t"
152256         "uxth	r7, %[b]\n\t"
152257 #ifdef WOLFSSL_KEIL
152258         "muls	r7, r6, r7\n\t"
152259 #elif defined(__clang__)
152260         "muls	r7, r6\n\t"
152261 #else
152262         "mul	r7, r6\n\t"
152263 #endif
152264 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152265         "adds	r5, r5, r7\n\t"
152266 #else
152267         "add	r5, r5, r7\n\t"
152268 #endif
152269 #ifdef WOLFSSL_KEIL
152270         "adcs	r3, r3, %[r]\n\t"
152271 #elif defined(__clang__)
152272         "adcs	r3, %[r]\n\t"
152273 #else
152274         "adc	r3, %[r]\n\t"
152275 #endif
152276 #ifdef WOLFSSL_KEIL
152277         "adcs	r4, r4, %[r]\n\t"
152278 #elif defined(__clang__)
152279         "adcs	r4, %[r]\n\t"
152280 #else
152281         "adc	r4, %[r]\n\t"
152282 #endif
152283 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152284         "lsrs	r7, %[b], #16\n\t"
152285 #else
152286         "lsr	r7, %[b], #16\n\t"
152287 #endif
152288 #ifdef WOLFSSL_KEIL
152289         "muls	r6, r7, r6\n\t"
152290 #elif defined(__clang__)
152291         "muls	r6, r7\n\t"
152292 #else
152293         "mul	r6, r7\n\t"
152294 #endif
152295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152296         "lsrs	r7, r6, #16\n\t"
152297 #else
152298         "lsr	r7, r6, #16\n\t"
152299 #endif
152300 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152301         "lsls	r6, r6, #16\n\t"
152302 #else
152303         "lsl	r6, r6, #16\n\t"
152304 #endif
152305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152306         "adds	r5, r5, r6\n\t"
152307 #else
152308         "add	r5, r5, r6\n\t"
152309 #endif
152310 #ifdef WOLFSSL_KEIL
152311         "adcs	r3, r3, r7\n\t"
152312 #elif defined(__clang__)
152313         "adcs	r3, r7\n\t"
152314 #else
152315         "adc	r3, r7\n\t"
152316 #endif
152317 #ifdef WOLFSSL_KEIL
152318         "adcs	r4, r4, %[r]\n\t"
152319 #elif defined(__clang__)
152320         "adcs	r4, %[r]\n\t"
152321 #else
152322         "adc	r4, %[r]\n\t"
152323 #endif
152324 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152325         "lsrs	r6, %[a], #16\n\t"
152326 #else
152327         "lsr	r6, %[a], #16\n\t"
152328 #endif
152329 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152330         "lsrs	r7, %[b], #16\n\t"
152331 #else
152332         "lsr	r7, %[b], #16\n\t"
152333 #endif
152334 #ifdef WOLFSSL_KEIL
152335         "muls	r7, r6, r7\n\t"
152336 #elif defined(__clang__)
152337         "muls	r7, r6\n\t"
152338 #else
152339         "mul	r7, r6\n\t"
152340 #endif
152341 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152342         "adds	r3, r3, r7\n\t"
152343 #else
152344         "add	r3, r3, r7\n\t"
152345 #endif
152346 #ifdef WOLFSSL_KEIL
152347         "adcs	r4, r4, %[r]\n\t"
152348 #elif defined(__clang__)
152349         "adcs	r4, %[r]\n\t"
152350 #else
152351         "adc	r4, %[r]\n\t"
152352 #endif
152353         "uxth	r7, %[b]\n\t"
152354 #ifdef WOLFSSL_KEIL
152355         "muls	r6, r7, r6\n\t"
152356 #elif defined(__clang__)
152357         "muls	r6, r7\n\t"
152358 #else
152359         "mul	r6, r7\n\t"
152360 #endif
152361 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152362         "lsrs	r7, r6, #16\n\t"
152363 #else
152364         "lsr	r7, r6, #16\n\t"
152365 #endif
152366 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152367         "lsls	r6, r6, #16\n\t"
152368 #else
152369         "lsl	r6, r6, #16\n\t"
152370 #endif
152371 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152372         "adds	r5, r5, r6\n\t"
152373 #else
152374         "add	r5, r5, r6\n\t"
152375 #endif
152376 #ifdef WOLFSSL_KEIL
152377         "adcs	r3, r3, r7\n\t"
152378 #elif defined(__clang__)
152379         "adcs	r3, r7\n\t"
152380 #else
152381         "adc	r3, r7\n\t"
152382 #endif
152383 #ifdef WOLFSSL_KEIL
152384         "adcs	r4, r4, %[r]\n\t"
152385 #elif defined(__clang__)
152386         "adcs	r4, %[r]\n\t"
152387 #else
152388         "adc	r4, %[r]\n\t"
152389 #endif
152390         "#  A[12] * B[14]\n\t"
152391         "mov	%[a], r9\n\t"
152392         "mov	%[b], r10\n\t"
152393         "ldr	%[a], [%[a], #48]\n\t"
152394         "ldr	%[b], [%[b], #56]\n\t"
152395         "uxth	r6, %[a]\n\t"
152396         "uxth	r7, %[b]\n\t"
152397 #ifdef WOLFSSL_KEIL
152398         "muls	r7, r6, r7\n\t"
152399 #elif defined(__clang__)
152400         "muls	r7, r6\n\t"
152401 #else
152402         "mul	r7, r6\n\t"
152403 #endif
152404 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152405         "adds	r5, r5, r7\n\t"
152406 #else
152407         "add	r5, r5, r7\n\t"
152408 #endif
152409 #ifdef WOLFSSL_KEIL
152410         "adcs	r3, r3, %[r]\n\t"
152411 #elif defined(__clang__)
152412         "adcs	r3, %[r]\n\t"
152413 #else
152414         "adc	r3, %[r]\n\t"
152415 #endif
152416 #ifdef WOLFSSL_KEIL
152417         "adcs	r4, r4, %[r]\n\t"
152418 #elif defined(__clang__)
152419         "adcs	r4, %[r]\n\t"
152420 #else
152421         "adc	r4, %[r]\n\t"
152422 #endif
152423 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152424         "lsrs	r7, %[b], #16\n\t"
152425 #else
152426         "lsr	r7, %[b], #16\n\t"
152427 #endif
152428 #ifdef WOLFSSL_KEIL
152429         "muls	r6, r7, r6\n\t"
152430 #elif defined(__clang__)
152431         "muls	r6, r7\n\t"
152432 #else
152433         "mul	r6, r7\n\t"
152434 #endif
152435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152436         "lsrs	r7, r6, #16\n\t"
152437 #else
152438         "lsr	r7, r6, #16\n\t"
152439 #endif
152440 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152441         "lsls	r6, r6, #16\n\t"
152442 #else
152443         "lsl	r6, r6, #16\n\t"
152444 #endif
152445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152446         "adds	r5, r5, r6\n\t"
152447 #else
152448         "add	r5, r5, r6\n\t"
152449 #endif
152450 #ifdef WOLFSSL_KEIL
152451         "adcs	r3, r3, r7\n\t"
152452 #elif defined(__clang__)
152453         "adcs	r3, r7\n\t"
152454 #else
152455         "adc	r3, r7\n\t"
152456 #endif
152457 #ifdef WOLFSSL_KEIL
152458         "adcs	r4, r4, %[r]\n\t"
152459 #elif defined(__clang__)
152460         "adcs	r4, %[r]\n\t"
152461 #else
152462         "adc	r4, %[r]\n\t"
152463 #endif
152464 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152465         "lsrs	r6, %[a], #16\n\t"
152466 #else
152467         "lsr	r6, %[a], #16\n\t"
152468 #endif
152469 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152470         "lsrs	r7, %[b], #16\n\t"
152471 #else
152472         "lsr	r7, %[b], #16\n\t"
152473 #endif
152474 #ifdef WOLFSSL_KEIL
152475         "muls	r7, r6, r7\n\t"
152476 #elif defined(__clang__)
152477         "muls	r7, r6\n\t"
152478 #else
152479         "mul	r7, r6\n\t"
152480 #endif
152481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152482         "adds	r3, r3, r7\n\t"
152483 #else
152484         "add	r3, r3, r7\n\t"
152485 #endif
152486 #ifdef WOLFSSL_KEIL
152487         "adcs	r4, r4, %[r]\n\t"
152488 #elif defined(__clang__)
152489         "adcs	r4, %[r]\n\t"
152490 #else
152491         "adc	r4, %[r]\n\t"
152492 #endif
152493         "uxth	r7, %[b]\n\t"
152494 #ifdef WOLFSSL_KEIL
152495         "muls	r6, r7, r6\n\t"
152496 #elif defined(__clang__)
152497         "muls	r6, r7\n\t"
152498 #else
152499         "mul	r6, r7\n\t"
152500 #endif
152501 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152502         "lsrs	r7, r6, #16\n\t"
152503 #else
152504         "lsr	r7, r6, #16\n\t"
152505 #endif
152506 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152507         "lsls	r6, r6, #16\n\t"
152508 #else
152509         "lsl	r6, r6, #16\n\t"
152510 #endif
152511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152512         "adds	r5, r5, r6\n\t"
152513 #else
152514         "add	r5, r5, r6\n\t"
152515 #endif
152516 #ifdef WOLFSSL_KEIL
152517         "adcs	r3, r3, r7\n\t"
152518 #elif defined(__clang__)
152519         "adcs	r3, r7\n\t"
152520 #else
152521         "adc	r3, r7\n\t"
152522 #endif
152523 #ifdef WOLFSSL_KEIL
152524         "adcs	r4, r4, %[r]\n\t"
152525 #elif defined(__clang__)
152526         "adcs	r4, %[r]\n\t"
152527 #else
152528         "adc	r4, %[r]\n\t"
152529 #endif
152530         "#  A[11] * B[15]\n\t"
152531         "mov	%[a], r9\n\t"
152532         "mov	%[b], r10\n\t"
152533         "ldr	%[a], [%[a], #44]\n\t"
152534         "ldr	%[b], [%[b], #60]\n\t"
152535         "uxth	r6, %[a]\n\t"
152536         "uxth	r7, %[b]\n\t"
152537 #ifdef WOLFSSL_KEIL
152538         "muls	r7, r6, r7\n\t"
152539 #elif defined(__clang__)
152540         "muls	r7, r6\n\t"
152541 #else
152542         "mul	r7, r6\n\t"
152543 #endif
152544 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152545         "adds	r5, r5, r7\n\t"
152546 #else
152547         "add	r5, r5, r7\n\t"
152548 #endif
152549 #ifdef WOLFSSL_KEIL
152550         "adcs	r3, r3, %[r]\n\t"
152551 #elif defined(__clang__)
152552         "adcs	r3, %[r]\n\t"
152553 #else
152554         "adc	r3, %[r]\n\t"
152555 #endif
152556 #ifdef WOLFSSL_KEIL
152557         "adcs	r4, r4, %[r]\n\t"
152558 #elif defined(__clang__)
152559         "adcs	r4, %[r]\n\t"
152560 #else
152561         "adc	r4, %[r]\n\t"
152562 #endif
152563 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152564         "lsrs	r7, %[b], #16\n\t"
152565 #else
152566         "lsr	r7, %[b], #16\n\t"
152567 #endif
152568 #ifdef WOLFSSL_KEIL
152569         "muls	r6, r7, r6\n\t"
152570 #elif defined(__clang__)
152571         "muls	r6, r7\n\t"
152572 #else
152573         "mul	r6, r7\n\t"
152574 #endif
152575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152576         "lsrs	r7, r6, #16\n\t"
152577 #else
152578         "lsr	r7, r6, #16\n\t"
152579 #endif
152580 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152581         "lsls	r6, r6, #16\n\t"
152582 #else
152583         "lsl	r6, r6, #16\n\t"
152584 #endif
152585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152586         "adds	r5, r5, r6\n\t"
152587 #else
152588         "add	r5, r5, r6\n\t"
152589 #endif
152590 #ifdef WOLFSSL_KEIL
152591         "adcs	r3, r3, r7\n\t"
152592 #elif defined(__clang__)
152593         "adcs	r3, r7\n\t"
152594 #else
152595         "adc	r3, r7\n\t"
152596 #endif
152597 #ifdef WOLFSSL_KEIL
152598         "adcs	r4, r4, %[r]\n\t"
152599 #elif defined(__clang__)
152600         "adcs	r4, %[r]\n\t"
152601 #else
152602         "adc	r4, %[r]\n\t"
152603 #endif
152604 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152605         "lsrs	r6, %[a], #16\n\t"
152606 #else
152607         "lsr	r6, %[a], #16\n\t"
152608 #endif
152609 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152610         "lsrs	r7, %[b], #16\n\t"
152611 #else
152612         "lsr	r7, %[b], #16\n\t"
152613 #endif
152614 #ifdef WOLFSSL_KEIL
152615         "muls	r7, r6, r7\n\t"
152616 #elif defined(__clang__)
152617         "muls	r7, r6\n\t"
152618 #else
152619         "mul	r7, r6\n\t"
152620 #endif
152621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152622         "adds	r3, r3, r7\n\t"
152623 #else
152624         "add	r3, r3, r7\n\t"
152625 #endif
152626 #ifdef WOLFSSL_KEIL
152627         "adcs	r4, r4, %[r]\n\t"
152628 #elif defined(__clang__)
152629         "adcs	r4, %[r]\n\t"
152630 #else
152631         "adc	r4, %[r]\n\t"
152632 #endif
152633         "uxth	r7, %[b]\n\t"
152634 #ifdef WOLFSSL_KEIL
152635         "muls	r6, r7, r6\n\t"
152636 #elif defined(__clang__)
152637         "muls	r6, r7\n\t"
152638 #else
152639         "mul	r6, r7\n\t"
152640 #endif
152641 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152642         "lsrs	r7, r6, #16\n\t"
152643 #else
152644         "lsr	r7, r6, #16\n\t"
152645 #endif
152646 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152647         "lsls	r6, r6, #16\n\t"
152648 #else
152649         "lsl	r6, r6, #16\n\t"
152650 #endif
152651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152652         "adds	r5, r5, r6\n\t"
152653 #else
152654         "add	r5, r5, r6\n\t"
152655 #endif
152656 #ifdef WOLFSSL_KEIL
152657         "adcs	r3, r3, r7\n\t"
152658 #elif defined(__clang__)
152659         "adcs	r3, r7\n\t"
152660 #else
152661         "adc	r3, r7\n\t"
152662 #endif
152663 #ifdef WOLFSSL_KEIL
152664         "adcs	r4, r4, %[r]\n\t"
152665 #elif defined(__clang__)
152666         "adcs	r4, %[r]\n\t"
152667 #else
152668         "adc	r4, %[r]\n\t"
152669 #endif
152670         "mov	%[r], r8\n\t"
152671         "str	r5, [%[r], #104]\n\t"
152672         "movs	%[r], #0\n\t"
152673         "#  A[12] * B[15]\n\t"
152674         "movs	r5, #0\n\t"
152675         "mov	%[a], r9\n\t"
152676         "mov	%[b], r10\n\t"
152677         "ldr	%[a], [%[a], #48]\n\t"
152678         "ldr	%[b], [%[b], #60]\n\t"
152679         "uxth	r6, %[a]\n\t"
152680         "uxth	r7, %[b]\n\t"
152681 #ifdef WOLFSSL_KEIL
152682         "muls	r7, r6, r7\n\t"
152683 #elif defined(__clang__)
152684         "muls	r7, r6\n\t"
152685 #else
152686         "mul	r7, r6\n\t"
152687 #endif
152688 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152689         "adds	r3, r3, r7\n\t"
152690 #else
152691         "add	r3, r3, r7\n\t"
152692 #endif
152693 #ifdef WOLFSSL_KEIL
152694         "adcs	r4, r4, %[r]\n\t"
152695 #elif defined(__clang__)
152696         "adcs	r4, %[r]\n\t"
152697 #else
152698         "adc	r4, %[r]\n\t"
152699 #endif
152700 #ifdef WOLFSSL_KEIL
152701         "adcs	r5, r5, %[r]\n\t"
152702 #elif defined(__clang__)
152703         "adcs	r5, %[r]\n\t"
152704 #else
152705         "adc	r5, %[r]\n\t"
152706 #endif
152707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152708         "lsrs	r7, %[b], #16\n\t"
152709 #else
152710         "lsr	r7, %[b], #16\n\t"
152711 #endif
152712 #ifdef WOLFSSL_KEIL
152713         "muls	r6, r7, r6\n\t"
152714 #elif defined(__clang__)
152715         "muls	r6, r7\n\t"
152716 #else
152717         "mul	r6, r7\n\t"
152718 #endif
152719 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152720         "lsrs	r7, r6, #16\n\t"
152721 #else
152722         "lsr	r7, r6, #16\n\t"
152723 #endif
152724 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152725         "lsls	r6, r6, #16\n\t"
152726 #else
152727         "lsl	r6, r6, #16\n\t"
152728 #endif
152729 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152730         "adds	r3, r3, r6\n\t"
152731 #else
152732         "add	r3, r3, r6\n\t"
152733 #endif
152734 #ifdef WOLFSSL_KEIL
152735         "adcs	r4, r4, r7\n\t"
152736 #elif defined(__clang__)
152737         "adcs	r4, r7\n\t"
152738 #else
152739         "adc	r4, r7\n\t"
152740 #endif
152741 #ifdef WOLFSSL_KEIL
152742         "adcs	r5, r5, %[r]\n\t"
152743 #elif defined(__clang__)
152744         "adcs	r5, %[r]\n\t"
152745 #else
152746         "adc	r5, %[r]\n\t"
152747 #endif
152748 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152749         "lsrs	r6, %[a], #16\n\t"
152750 #else
152751         "lsr	r6, %[a], #16\n\t"
152752 #endif
152753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152754         "lsrs	r7, %[b], #16\n\t"
152755 #else
152756         "lsr	r7, %[b], #16\n\t"
152757 #endif
152758 #ifdef WOLFSSL_KEIL
152759         "muls	r7, r6, r7\n\t"
152760 #elif defined(__clang__)
152761         "muls	r7, r6\n\t"
152762 #else
152763         "mul	r7, r6\n\t"
152764 #endif
152765 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152766         "adds	r4, r4, r7\n\t"
152767 #else
152768         "add	r4, r4, r7\n\t"
152769 #endif
152770 #ifdef WOLFSSL_KEIL
152771         "adcs	r5, r5, %[r]\n\t"
152772 #elif defined(__clang__)
152773         "adcs	r5, %[r]\n\t"
152774 #else
152775         "adc	r5, %[r]\n\t"
152776 #endif
152777         "uxth	r7, %[b]\n\t"
152778 #ifdef WOLFSSL_KEIL
152779         "muls	r6, r7, r6\n\t"
152780 #elif defined(__clang__)
152781         "muls	r6, r7\n\t"
152782 #else
152783         "mul	r6, r7\n\t"
152784 #endif
152785 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152786         "lsrs	r7, r6, #16\n\t"
152787 #else
152788         "lsr	r7, r6, #16\n\t"
152789 #endif
152790 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152791         "lsls	r6, r6, #16\n\t"
152792 #else
152793         "lsl	r6, r6, #16\n\t"
152794 #endif
152795 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152796         "adds	r3, r3, r6\n\t"
152797 #else
152798         "add	r3, r3, r6\n\t"
152799 #endif
152800 #ifdef WOLFSSL_KEIL
152801         "adcs	r4, r4, r7\n\t"
152802 #elif defined(__clang__)
152803         "adcs	r4, r7\n\t"
152804 #else
152805         "adc	r4, r7\n\t"
152806 #endif
152807 #ifdef WOLFSSL_KEIL
152808         "adcs	r5, r5, %[r]\n\t"
152809 #elif defined(__clang__)
152810         "adcs	r5, %[r]\n\t"
152811 #else
152812         "adc	r5, %[r]\n\t"
152813 #endif
152814         "#  A[13] * B[14]\n\t"
152815         "mov	%[a], r9\n\t"
152816         "mov	%[b], r10\n\t"
152817         "ldr	%[a], [%[a], #52]\n\t"
152818         "ldr	%[b], [%[b], #56]\n\t"
152819         "uxth	r6, %[a]\n\t"
152820         "uxth	r7, %[b]\n\t"
152821 #ifdef WOLFSSL_KEIL
152822         "muls	r7, r6, r7\n\t"
152823 #elif defined(__clang__)
152824         "muls	r7, r6\n\t"
152825 #else
152826         "mul	r7, r6\n\t"
152827 #endif
152828 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152829         "adds	r3, r3, r7\n\t"
152830 #else
152831         "add	r3, r3, r7\n\t"
152832 #endif
152833 #ifdef WOLFSSL_KEIL
152834         "adcs	r4, r4, %[r]\n\t"
152835 #elif defined(__clang__)
152836         "adcs	r4, %[r]\n\t"
152837 #else
152838         "adc	r4, %[r]\n\t"
152839 #endif
152840 #ifdef WOLFSSL_KEIL
152841         "adcs	r5, r5, %[r]\n\t"
152842 #elif defined(__clang__)
152843         "adcs	r5, %[r]\n\t"
152844 #else
152845         "adc	r5, %[r]\n\t"
152846 #endif
152847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152848         "lsrs	r7, %[b], #16\n\t"
152849 #else
152850         "lsr	r7, %[b], #16\n\t"
152851 #endif
152852 #ifdef WOLFSSL_KEIL
152853         "muls	r6, r7, r6\n\t"
152854 #elif defined(__clang__)
152855         "muls	r6, r7\n\t"
152856 #else
152857         "mul	r6, r7\n\t"
152858 #endif
152859 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152860         "lsrs	r7, r6, #16\n\t"
152861 #else
152862         "lsr	r7, r6, #16\n\t"
152863 #endif
152864 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152865         "lsls	r6, r6, #16\n\t"
152866 #else
152867         "lsl	r6, r6, #16\n\t"
152868 #endif
152869 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152870         "adds	r3, r3, r6\n\t"
152871 #else
152872         "add	r3, r3, r6\n\t"
152873 #endif
152874 #ifdef WOLFSSL_KEIL
152875         "adcs	r4, r4, r7\n\t"
152876 #elif defined(__clang__)
152877         "adcs	r4, r7\n\t"
152878 #else
152879         "adc	r4, r7\n\t"
152880 #endif
152881 #ifdef WOLFSSL_KEIL
152882         "adcs	r5, r5, %[r]\n\t"
152883 #elif defined(__clang__)
152884         "adcs	r5, %[r]\n\t"
152885 #else
152886         "adc	r5, %[r]\n\t"
152887 #endif
152888 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152889         "lsrs	r6, %[a], #16\n\t"
152890 #else
152891         "lsr	r6, %[a], #16\n\t"
152892 #endif
152893 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152894         "lsrs	r7, %[b], #16\n\t"
152895 #else
152896         "lsr	r7, %[b], #16\n\t"
152897 #endif
152898 #ifdef WOLFSSL_KEIL
152899         "muls	r7, r6, r7\n\t"
152900 #elif defined(__clang__)
152901         "muls	r7, r6\n\t"
152902 #else
152903         "mul	r7, r6\n\t"
152904 #endif
152905 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152906         "adds	r4, r4, r7\n\t"
152907 #else
152908         "add	r4, r4, r7\n\t"
152909 #endif
152910 #ifdef WOLFSSL_KEIL
152911         "adcs	r5, r5, %[r]\n\t"
152912 #elif defined(__clang__)
152913         "adcs	r5, %[r]\n\t"
152914 #else
152915         "adc	r5, %[r]\n\t"
152916 #endif
152917         "uxth	r7, %[b]\n\t"
152918 #ifdef WOLFSSL_KEIL
152919         "muls	r6, r7, r6\n\t"
152920 #elif defined(__clang__)
152921         "muls	r6, r7\n\t"
152922 #else
152923         "mul	r6, r7\n\t"
152924 #endif
152925 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152926         "lsrs	r7, r6, #16\n\t"
152927 #else
152928         "lsr	r7, r6, #16\n\t"
152929 #endif
152930 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152931         "lsls	r6, r6, #16\n\t"
152932 #else
152933         "lsl	r6, r6, #16\n\t"
152934 #endif
152935 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152936         "adds	r3, r3, r6\n\t"
152937 #else
152938         "add	r3, r3, r6\n\t"
152939 #endif
152940 #ifdef WOLFSSL_KEIL
152941         "adcs	r4, r4, r7\n\t"
152942 #elif defined(__clang__)
152943         "adcs	r4, r7\n\t"
152944 #else
152945         "adc	r4, r7\n\t"
152946 #endif
152947 #ifdef WOLFSSL_KEIL
152948         "adcs	r5, r5, %[r]\n\t"
152949 #elif defined(__clang__)
152950         "adcs	r5, %[r]\n\t"
152951 #else
152952         "adc	r5, %[r]\n\t"
152953 #endif
152954         "#  A[14] * B[13]\n\t"
152955         "mov	%[a], r9\n\t"
152956         "mov	%[b], r10\n\t"
152957         "ldr	%[a], [%[a], #56]\n\t"
152958         "ldr	%[b], [%[b], #52]\n\t"
152959         "uxth	r6, %[a]\n\t"
152960         "uxth	r7, %[b]\n\t"
152961 #ifdef WOLFSSL_KEIL
152962         "muls	r7, r6, r7\n\t"
152963 #elif defined(__clang__)
152964         "muls	r7, r6\n\t"
152965 #else
152966         "mul	r7, r6\n\t"
152967 #endif
152968 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152969         "adds	r3, r3, r7\n\t"
152970 #else
152971         "add	r3, r3, r7\n\t"
152972 #endif
152973 #ifdef WOLFSSL_KEIL
152974         "adcs	r4, r4, %[r]\n\t"
152975 #elif defined(__clang__)
152976         "adcs	r4, %[r]\n\t"
152977 #else
152978         "adc	r4, %[r]\n\t"
152979 #endif
152980 #ifdef WOLFSSL_KEIL
152981         "adcs	r5, r5, %[r]\n\t"
152982 #elif defined(__clang__)
152983         "adcs	r5, %[r]\n\t"
152984 #else
152985         "adc	r5, %[r]\n\t"
152986 #endif
152987 #if defined(__clang__) || defined(WOLFSSL_KEIL)
152988         "lsrs	r7, %[b], #16\n\t"
152989 #else
152990         "lsr	r7, %[b], #16\n\t"
152991 #endif
152992 #ifdef WOLFSSL_KEIL
152993         "muls	r6, r7, r6\n\t"
152994 #elif defined(__clang__)
152995         "muls	r6, r7\n\t"
152996 #else
152997         "mul	r6, r7\n\t"
152998 #endif
152999 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153000         "lsrs	r7, r6, #16\n\t"
153001 #else
153002         "lsr	r7, r6, #16\n\t"
153003 #endif
153004 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153005         "lsls	r6, r6, #16\n\t"
153006 #else
153007         "lsl	r6, r6, #16\n\t"
153008 #endif
153009 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153010         "adds	r3, r3, r6\n\t"
153011 #else
153012         "add	r3, r3, r6\n\t"
153013 #endif
153014 #ifdef WOLFSSL_KEIL
153015         "adcs	r4, r4, r7\n\t"
153016 #elif defined(__clang__)
153017         "adcs	r4, r7\n\t"
153018 #else
153019         "adc	r4, r7\n\t"
153020 #endif
153021 #ifdef WOLFSSL_KEIL
153022         "adcs	r5, r5, %[r]\n\t"
153023 #elif defined(__clang__)
153024         "adcs	r5, %[r]\n\t"
153025 #else
153026         "adc	r5, %[r]\n\t"
153027 #endif
153028 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153029         "lsrs	r6, %[a], #16\n\t"
153030 #else
153031         "lsr	r6, %[a], #16\n\t"
153032 #endif
153033 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153034         "lsrs	r7, %[b], #16\n\t"
153035 #else
153036         "lsr	r7, %[b], #16\n\t"
153037 #endif
153038 #ifdef WOLFSSL_KEIL
153039         "muls	r7, r6, r7\n\t"
153040 #elif defined(__clang__)
153041         "muls	r7, r6\n\t"
153042 #else
153043         "mul	r7, r6\n\t"
153044 #endif
153045 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153046         "adds	r4, r4, r7\n\t"
153047 #else
153048         "add	r4, r4, r7\n\t"
153049 #endif
153050 #ifdef WOLFSSL_KEIL
153051         "adcs	r5, r5, %[r]\n\t"
153052 #elif defined(__clang__)
153053         "adcs	r5, %[r]\n\t"
153054 #else
153055         "adc	r5, %[r]\n\t"
153056 #endif
153057         "uxth	r7, %[b]\n\t"
153058 #ifdef WOLFSSL_KEIL
153059         "muls	r6, r7, r6\n\t"
153060 #elif defined(__clang__)
153061         "muls	r6, r7\n\t"
153062 #else
153063         "mul	r6, r7\n\t"
153064 #endif
153065 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153066         "lsrs	r7, r6, #16\n\t"
153067 #else
153068         "lsr	r7, r6, #16\n\t"
153069 #endif
153070 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153071         "lsls	r6, r6, #16\n\t"
153072 #else
153073         "lsl	r6, r6, #16\n\t"
153074 #endif
153075 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153076         "adds	r3, r3, r6\n\t"
153077 #else
153078         "add	r3, r3, r6\n\t"
153079 #endif
153080 #ifdef WOLFSSL_KEIL
153081         "adcs	r4, r4, r7\n\t"
153082 #elif defined(__clang__)
153083         "adcs	r4, r7\n\t"
153084 #else
153085         "adc	r4, r7\n\t"
153086 #endif
153087 #ifdef WOLFSSL_KEIL
153088         "adcs	r5, r5, %[r]\n\t"
153089 #elif defined(__clang__)
153090         "adcs	r5, %[r]\n\t"
153091 #else
153092         "adc	r5, %[r]\n\t"
153093 #endif
153094         "#  A[15] * B[12]\n\t"
153095         "mov	%[a], r9\n\t"
153096         "mov	%[b], r10\n\t"
153097         "ldr	%[a], [%[a], #60]\n\t"
153098         "ldr	%[b], [%[b], #48]\n\t"
153099         "uxth	r6, %[a]\n\t"
153100         "uxth	r7, %[b]\n\t"
153101 #ifdef WOLFSSL_KEIL
153102         "muls	r7, r6, r7\n\t"
153103 #elif defined(__clang__)
153104         "muls	r7, r6\n\t"
153105 #else
153106         "mul	r7, r6\n\t"
153107 #endif
153108 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153109         "adds	r3, r3, r7\n\t"
153110 #else
153111         "add	r3, r3, r7\n\t"
153112 #endif
153113 #ifdef WOLFSSL_KEIL
153114         "adcs	r4, r4, %[r]\n\t"
153115 #elif defined(__clang__)
153116         "adcs	r4, %[r]\n\t"
153117 #else
153118         "adc	r4, %[r]\n\t"
153119 #endif
153120 #ifdef WOLFSSL_KEIL
153121         "adcs	r5, r5, %[r]\n\t"
153122 #elif defined(__clang__)
153123         "adcs	r5, %[r]\n\t"
153124 #else
153125         "adc	r5, %[r]\n\t"
153126 #endif
153127 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153128         "lsrs	r7, %[b], #16\n\t"
153129 #else
153130         "lsr	r7, %[b], #16\n\t"
153131 #endif
153132 #ifdef WOLFSSL_KEIL
153133         "muls	r6, r7, r6\n\t"
153134 #elif defined(__clang__)
153135         "muls	r6, r7\n\t"
153136 #else
153137         "mul	r6, r7\n\t"
153138 #endif
153139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153140         "lsrs	r7, r6, #16\n\t"
153141 #else
153142         "lsr	r7, r6, #16\n\t"
153143 #endif
153144 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153145         "lsls	r6, r6, #16\n\t"
153146 #else
153147         "lsl	r6, r6, #16\n\t"
153148 #endif
153149 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153150         "adds	r3, r3, r6\n\t"
153151 #else
153152         "add	r3, r3, r6\n\t"
153153 #endif
153154 #ifdef WOLFSSL_KEIL
153155         "adcs	r4, r4, r7\n\t"
153156 #elif defined(__clang__)
153157         "adcs	r4, r7\n\t"
153158 #else
153159         "adc	r4, r7\n\t"
153160 #endif
153161 #ifdef WOLFSSL_KEIL
153162         "adcs	r5, r5, %[r]\n\t"
153163 #elif defined(__clang__)
153164         "adcs	r5, %[r]\n\t"
153165 #else
153166         "adc	r5, %[r]\n\t"
153167 #endif
153168 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153169         "lsrs	r6, %[a], #16\n\t"
153170 #else
153171         "lsr	r6, %[a], #16\n\t"
153172 #endif
153173 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153174         "lsrs	r7, %[b], #16\n\t"
153175 #else
153176         "lsr	r7, %[b], #16\n\t"
153177 #endif
153178 #ifdef WOLFSSL_KEIL
153179         "muls	r7, r6, r7\n\t"
153180 #elif defined(__clang__)
153181         "muls	r7, r6\n\t"
153182 #else
153183         "mul	r7, r6\n\t"
153184 #endif
153185 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153186         "adds	r4, r4, r7\n\t"
153187 #else
153188         "add	r4, r4, r7\n\t"
153189 #endif
153190 #ifdef WOLFSSL_KEIL
153191         "adcs	r5, r5, %[r]\n\t"
153192 #elif defined(__clang__)
153193         "adcs	r5, %[r]\n\t"
153194 #else
153195         "adc	r5, %[r]\n\t"
153196 #endif
153197         "uxth	r7, %[b]\n\t"
153198 #ifdef WOLFSSL_KEIL
153199         "muls	r6, r7, r6\n\t"
153200 #elif defined(__clang__)
153201         "muls	r6, r7\n\t"
153202 #else
153203         "mul	r6, r7\n\t"
153204 #endif
153205 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153206         "lsrs	r7, r6, #16\n\t"
153207 #else
153208         "lsr	r7, r6, #16\n\t"
153209 #endif
153210 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153211         "lsls	r6, r6, #16\n\t"
153212 #else
153213         "lsl	r6, r6, #16\n\t"
153214 #endif
153215 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153216         "adds	r3, r3, r6\n\t"
153217 #else
153218         "add	r3, r3, r6\n\t"
153219 #endif
153220 #ifdef WOLFSSL_KEIL
153221         "adcs	r4, r4, r7\n\t"
153222 #elif defined(__clang__)
153223         "adcs	r4, r7\n\t"
153224 #else
153225         "adc	r4, r7\n\t"
153226 #endif
153227 #ifdef WOLFSSL_KEIL
153228         "adcs	r5, r5, %[r]\n\t"
153229 #elif defined(__clang__)
153230         "adcs	r5, %[r]\n\t"
153231 #else
153232         "adc	r5, %[r]\n\t"
153233 #endif
153234         "mov	%[r], r8\n\t"
153235         "str	r3, [%[r], #108]\n\t"
153236         "movs	%[r], #0\n\t"
153237         "#  A[15] * B[13]\n\t"
153238         "movs	r3, #0\n\t"
153239         "mov	%[a], r9\n\t"
153240         "mov	%[b], r10\n\t"
153241         "ldr	%[a], [%[a], #60]\n\t"
153242         "ldr	%[b], [%[b], #52]\n\t"
153243         "uxth	r6, %[a]\n\t"
153244         "uxth	r7, %[b]\n\t"
153245 #ifdef WOLFSSL_KEIL
153246         "muls	r7, r6, r7\n\t"
153247 #elif defined(__clang__)
153248         "muls	r7, r6\n\t"
153249 #else
153250         "mul	r7, r6\n\t"
153251 #endif
153252 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153253         "adds	r4, r4, r7\n\t"
153254 #else
153255         "add	r4, r4, r7\n\t"
153256 #endif
153257 #ifdef WOLFSSL_KEIL
153258         "adcs	r5, r5, %[r]\n\t"
153259 #elif defined(__clang__)
153260         "adcs	r5, %[r]\n\t"
153261 #else
153262         "adc	r5, %[r]\n\t"
153263 #endif
153264 #ifdef WOLFSSL_KEIL
153265         "adcs	r3, r3, %[r]\n\t"
153266 #elif defined(__clang__)
153267         "adcs	r3, %[r]\n\t"
153268 #else
153269         "adc	r3, %[r]\n\t"
153270 #endif
153271 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153272         "lsrs	r7, %[b], #16\n\t"
153273 #else
153274         "lsr	r7, %[b], #16\n\t"
153275 #endif
153276 #ifdef WOLFSSL_KEIL
153277         "muls	r6, r7, r6\n\t"
153278 #elif defined(__clang__)
153279         "muls	r6, r7\n\t"
153280 #else
153281         "mul	r6, r7\n\t"
153282 #endif
153283 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153284         "lsrs	r7, r6, #16\n\t"
153285 #else
153286         "lsr	r7, r6, #16\n\t"
153287 #endif
153288 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153289         "lsls	r6, r6, #16\n\t"
153290 #else
153291         "lsl	r6, r6, #16\n\t"
153292 #endif
153293 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153294         "adds	r4, r4, r6\n\t"
153295 #else
153296         "add	r4, r4, r6\n\t"
153297 #endif
153298 #ifdef WOLFSSL_KEIL
153299         "adcs	r5, r5, r7\n\t"
153300 #elif defined(__clang__)
153301         "adcs	r5, r7\n\t"
153302 #else
153303         "adc	r5, r7\n\t"
153304 #endif
153305 #ifdef WOLFSSL_KEIL
153306         "adcs	r3, r3, %[r]\n\t"
153307 #elif defined(__clang__)
153308         "adcs	r3, %[r]\n\t"
153309 #else
153310         "adc	r3, %[r]\n\t"
153311 #endif
153312 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153313         "lsrs	r6, %[a], #16\n\t"
153314 #else
153315         "lsr	r6, %[a], #16\n\t"
153316 #endif
153317 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153318         "lsrs	r7, %[b], #16\n\t"
153319 #else
153320         "lsr	r7, %[b], #16\n\t"
153321 #endif
153322 #ifdef WOLFSSL_KEIL
153323         "muls	r7, r6, r7\n\t"
153324 #elif defined(__clang__)
153325         "muls	r7, r6\n\t"
153326 #else
153327         "mul	r7, r6\n\t"
153328 #endif
153329 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153330         "adds	r5, r5, r7\n\t"
153331 #else
153332         "add	r5, r5, r7\n\t"
153333 #endif
153334 #ifdef WOLFSSL_KEIL
153335         "adcs	r3, r3, %[r]\n\t"
153336 #elif defined(__clang__)
153337         "adcs	r3, %[r]\n\t"
153338 #else
153339         "adc	r3, %[r]\n\t"
153340 #endif
153341         "uxth	r7, %[b]\n\t"
153342 #ifdef WOLFSSL_KEIL
153343         "muls	r6, r7, r6\n\t"
153344 #elif defined(__clang__)
153345         "muls	r6, r7\n\t"
153346 #else
153347         "mul	r6, r7\n\t"
153348 #endif
153349 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153350         "lsrs	r7, r6, #16\n\t"
153351 #else
153352         "lsr	r7, r6, #16\n\t"
153353 #endif
153354 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153355         "lsls	r6, r6, #16\n\t"
153356 #else
153357         "lsl	r6, r6, #16\n\t"
153358 #endif
153359 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153360         "adds	r4, r4, r6\n\t"
153361 #else
153362         "add	r4, r4, r6\n\t"
153363 #endif
153364 #ifdef WOLFSSL_KEIL
153365         "adcs	r5, r5, r7\n\t"
153366 #elif defined(__clang__)
153367         "adcs	r5, r7\n\t"
153368 #else
153369         "adc	r5, r7\n\t"
153370 #endif
153371 #ifdef WOLFSSL_KEIL
153372         "adcs	r3, r3, %[r]\n\t"
153373 #elif defined(__clang__)
153374         "adcs	r3, %[r]\n\t"
153375 #else
153376         "adc	r3, %[r]\n\t"
153377 #endif
153378         "#  A[14] * B[14]\n\t"
153379         "mov	%[a], r9\n\t"
153380         "mov	%[b], r10\n\t"
153381         "ldr	%[a], [%[a], #56]\n\t"
153382         "ldr	%[b], [%[b], #56]\n\t"
153383         "uxth	r6, %[a]\n\t"
153384         "uxth	r7, %[b]\n\t"
153385 #ifdef WOLFSSL_KEIL
153386         "muls	r7, r6, r7\n\t"
153387 #elif defined(__clang__)
153388         "muls	r7, r6\n\t"
153389 #else
153390         "mul	r7, r6\n\t"
153391 #endif
153392 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153393         "adds	r4, r4, r7\n\t"
153394 #else
153395         "add	r4, r4, r7\n\t"
153396 #endif
153397 #ifdef WOLFSSL_KEIL
153398         "adcs	r5, r5, %[r]\n\t"
153399 #elif defined(__clang__)
153400         "adcs	r5, %[r]\n\t"
153401 #else
153402         "adc	r5, %[r]\n\t"
153403 #endif
153404 #ifdef WOLFSSL_KEIL
153405         "adcs	r3, r3, %[r]\n\t"
153406 #elif defined(__clang__)
153407         "adcs	r3, %[r]\n\t"
153408 #else
153409         "adc	r3, %[r]\n\t"
153410 #endif
153411 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153412         "lsrs	r7, %[b], #16\n\t"
153413 #else
153414         "lsr	r7, %[b], #16\n\t"
153415 #endif
153416 #ifdef WOLFSSL_KEIL
153417         "muls	r6, r7, r6\n\t"
153418 #elif defined(__clang__)
153419         "muls	r6, r7\n\t"
153420 #else
153421         "mul	r6, r7\n\t"
153422 #endif
153423 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153424         "lsrs	r7, r6, #16\n\t"
153425 #else
153426         "lsr	r7, r6, #16\n\t"
153427 #endif
153428 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153429         "lsls	r6, r6, #16\n\t"
153430 #else
153431         "lsl	r6, r6, #16\n\t"
153432 #endif
153433 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153434         "adds	r4, r4, r6\n\t"
153435 #else
153436         "add	r4, r4, r6\n\t"
153437 #endif
153438 #ifdef WOLFSSL_KEIL
153439         "adcs	r5, r5, r7\n\t"
153440 #elif defined(__clang__)
153441         "adcs	r5, r7\n\t"
153442 #else
153443         "adc	r5, r7\n\t"
153444 #endif
153445 #ifdef WOLFSSL_KEIL
153446         "adcs	r3, r3, %[r]\n\t"
153447 #elif defined(__clang__)
153448         "adcs	r3, %[r]\n\t"
153449 #else
153450         "adc	r3, %[r]\n\t"
153451 #endif
153452 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153453         "lsrs	r6, %[a], #16\n\t"
153454 #else
153455         "lsr	r6, %[a], #16\n\t"
153456 #endif
153457 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153458         "lsrs	r7, %[b], #16\n\t"
153459 #else
153460         "lsr	r7, %[b], #16\n\t"
153461 #endif
153462 #ifdef WOLFSSL_KEIL
153463         "muls	r7, r6, r7\n\t"
153464 #elif defined(__clang__)
153465         "muls	r7, r6\n\t"
153466 #else
153467         "mul	r7, r6\n\t"
153468 #endif
153469 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153470         "adds	r5, r5, r7\n\t"
153471 #else
153472         "add	r5, r5, r7\n\t"
153473 #endif
153474 #ifdef WOLFSSL_KEIL
153475         "adcs	r3, r3, %[r]\n\t"
153476 #elif defined(__clang__)
153477         "adcs	r3, %[r]\n\t"
153478 #else
153479         "adc	r3, %[r]\n\t"
153480 #endif
153481         "uxth	r7, %[b]\n\t"
153482 #ifdef WOLFSSL_KEIL
153483         "muls	r6, r7, r6\n\t"
153484 #elif defined(__clang__)
153485         "muls	r6, r7\n\t"
153486 #else
153487         "mul	r6, r7\n\t"
153488 #endif
153489 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153490         "lsrs	r7, r6, #16\n\t"
153491 #else
153492         "lsr	r7, r6, #16\n\t"
153493 #endif
153494 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153495         "lsls	r6, r6, #16\n\t"
153496 #else
153497         "lsl	r6, r6, #16\n\t"
153498 #endif
153499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153500         "adds	r4, r4, r6\n\t"
153501 #else
153502         "add	r4, r4, r6\n\t"
153503 #endif
153504 #ifdef WOLFSSL_KEIL
153505         "adcs	r5, r5, r7\n\t"
153506 #elif defined(__clang__)
153507         "adcs	r5, r7\n\t"
153508 #else
153509         "adc	r5, r7\n\t"
153510 #endif
153511 #ifdef WOLFSSL_KEIL
153512         "adcs	r3, r3, %[r]\n\t"
153513 #elif defined(__clang__)
153514         "adcs	r3, %[r]\n\t"
153515 #else
153516         "adc	r3, %[r]\n\t"
153517 #endif
153518         "#  A[13] * B[15]\n\t"
153519         "mov	%[a], r9\n\t"
153520         "mov	%[b], r10\n\t"
153521         "ldr	%[a], [%[a], #52]\n\t"
153522         "ldr	%[b], [%[b], #60]\n\t"
153523         "uxth	r6, %[a]\n\t"
153524         "uxth	r7, %[b]\n\t"
153525 #ifdef WOLFSSL_KEIL
153526         "muls	r7, r6, r7\n\t"
153527 #elif defined(__clang__)
153528         "muls	r7, r6\n\t"
153529 #else
153530         "mul	r7, r6\n\t"
153531 #endif
153532 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153533         "adds	r4, r4, r7\n\t"
153534 #else
153535         "add	r4, r4, r7\n\t"
153536 #endif
153537 #ifdef WOLFSSL_KEIL
153538         "adcs	r5, r5, %[r]\n\t"
153539 #elif defined(__clang__)
153540         "adcs	r5, %[r]\n\t"
153541 #else
153542         "adc	r5, %[r]\n\t"
153543 #endif
153544 #ifdef WOLFSSL_KEIL
153545         "adcs	r3, r3, %[r]\n\t"
153546 #elif defined(__clang__)
153547         "adcs	r3, %[r]\n\t"
153548 #else
153549         "adc	r3, %[r]\n\t"
153550 #endif
153551 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153552         "lsrs	r7, %[b], #16\n\t"
153553 #else
153554         "lsr	r7, %[b], #16\n\t"
153555 #endif
153556 #ifdef WOLFSSL_KEIL
153557         "muls	r6, r7, r6\n\t"
153558 #elif defined(__clang__)
153559         "muls	r6, r7\n\t"
153560 #else
153561         "mul	r6, r7\n\t"
153562 #endif
153563 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153564         "lsrs	r7, r6, #16\n\t"
153565 #else
153566         "lsr	r7, r6, #16\n\t"
153567 #endif
153568 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153569         "lsls	r6, r6, #16\n\t"
153570 #else
153571         "lsl	r6, r6, #16\n\t"
153572 #endif
153573 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153574         "adds	r4, r4, r6\n\t"
153575 #else
153576         "add	r4, r4, r6\n\t"
153577 #endif
153578 #ifdef WOLFSSL_KEIL
153579         "adcs	r5, r5, r7\n\t"
153580 #elif defined(__clang__)
153581         "adcs	r5, r7\n\t"
153582 #else
153583         "adc	r5, r7\n\t"
153584 #endif
153585 #ifdef WOLFSSL_KEIL
153586         "adcs	r3, r3, %[r]\n\t"
153587 #elif defined(__clang__)
153588         "adcs	r3, %[r]\n\t"
153589 #else
153590         "adc	r3, %[r]\n\t"
153591 #endif
153592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153593         "lsrs	r6, %[a], #16\n\t"
153594 #else
153595         "lsr	r6, %[a], #16\n\t"
153596 #endif
153597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153598         "lsrs	r7, %[b], #16\n\t"
153599 #else
153600         "lsr	r7, %[b], #16\n\t"
153601 #endif
153602 #ifdef WOLFSSL_KEIL
153603         "muls	r7, r6, r7\n\t"
153604 #elif defined(__clang__)
153605         "muls	r7, r6\n\t"
153606 #else
153607         "mul	r7, r6\n\t"
153608 #endif
153609 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153610         "adds	r5, r5, r7\n\t"
153611 #else
153612         "add	r5, r5, r7\n\t"
153613 #endif
153614 #ifdef WOLFSSL_KEIL
153615         "adcs	r3, r3, %[r]\n\t"
153616 #elif defined(__clang__)
153617         "adcs	r3, %[r]\n\t"
153618 #else
153619         "adc	r3, %[r]\n\t"
153620 #endif
153621         "uxth	r7, %[b]\n\t"
153622 #ifdef WOLFSSL_KEIL
153623         "muls	r6, r7, r6\n\t"
153624 #elif defined(__clang__)
153625         "muls	r6, r7\n\t"
153626 #else
153627         "mul	r6, r7\n\t"
153628 #endif
153629 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153630         "lsrs	r7, r6, #16\n\t"
153631 #else
153632         "lsr	r7, r6, #16\n\t"
153633 #endif
153634 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153635         "lsls	r6, r6, #16\n\t"
153636 #else
153637         "lsl	r6, r6, #16\n\t"
153638 #endif
153639 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153640         "adds	r4, r4, r6\n\t"
153641 #else
153642         "add	r4, r4, r6\n\t"
153643 #endif
153644 #ifdef WOLFSSL_KEIL
153645         "adcs	r5, r5, r7\n\t"
153646 #elif defined(__clang__)
153647         "adcs	r5, r7\n\t"
153648 #else
153649         "adc	r5, r7\n\t"
153650 #endif
153651 #ifdef WOLFSSL_KEIL
153652         "adcs	r3, r3, %[r]\n\t"
153653 #elif defined(__clang__)
153654         "adcs	r3, %[r]\n\t"
153655 #else
153656         "adc	r3, %[r]\n\t"
153657 #endif
153658         "mov	%[r], r8\n\t"
153659         "str	r4, [%[r], #112]\n\t"
153660         "movs	%[r], #0\n\t"
153661         "#  A[14] * B[15]\n\t"
153662         "movs	r4, #0\n\t"
153663         "mov	%[a], r9\n\t"
153664         "mov	%[b], r10\n\t"
153665         "ldr	%[a], [%[a], #56]\n\t"
153666         "ldr	%[b], [%[b], #60]\n\t"
153667         "uxth	r6, %[a]\n\t"
153668         "uxth	r7, %[b]\n\t"
153669 #ifdef WOLFSSL_KEIL
153670         "muls	r7, r6, r7\n\t"
153671 #elif defined(__clang__)
153672         "muls	r7, r6\n\t"
153673 #else
153674         "mul	r7, r6\n\t"
153675 #endif
153676 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153677         "adds	r5, r5, r7\n\t"
153678 #else
153679         "add	r5, r5, r7\n\t"
153680 #endif
153681 #ifdef WOLFSSL_KEIL
153682         "adcs	r3, r3, %[r]\n\t"
153683 #elif defined(__clang__)
153684         "adcs	r3, %[r]\n\t"
153685 #else
153686         "adc	r3, %[r]\n\t"
153687 #endif
153688 #ifdef WOLFSSL_KEIL
153689         "adcs	r4, r4, %[r]\n\t"
153690 #elif defined(__clang__)
153691         "adcs	r4, %[r]\n\t"
153692 #else
153693         "adc	r4, %[r]\n\t"
153694 #endif
153695 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153696         "lsrs	r7, %[b], #16\n\t"
153697 #else
153698         "lsr	r7, %[b], #16\n\t"
153699 #endif
153700 #ifdef WOLFSSL_KEIL
153701         "muls	r6, r7, r6\n\t"
153702 #elif defined(__clang__)
153703         "muls	r6, r7\n\t"
153704 #else
153705         "mul	r6, r7\n\t"
153706 #endif
153707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153708         "lsrs	r7, r6, #16\n\t"
153709 #else
153710         "lsr	r7, r6, #16\n\t"
153711 #endif
153712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153713         "lsls	r6, r6, #16\n\t"
153714 #else
153715         "lsl	r6, r6, #16\n\t"
153716 #endif
153717 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153718         "adds	r5, r5, r6\n\t"
153719 #else
153720         "add	r5, r5, r6\n\t"
153721 #endif
153722 #ifdef WOLFSSL_KEIL
153723         "adcs	r3, r3, r7\n\t"
153724 #elif defined(__clang__)
153725         "adcs	r3, r7\n\t"
153726 #else
153727         "adc	r3, r7\n\t"
153728 #endif
153729 #ifdef WOLFSSL_KEIL
153730         "adcs	r4, r4, %[r]\n\t"
153731 #elif defined(__clang__)
153732         "adcs	r4, %[r]\n\t"
153733 #else
153734         "adc	r4, %[r]\n\t"
153735 #endif
153736 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153737         "lsrs	r6, %[a], #16\n\t"
153738 #else
153739         "lsr	r6, %[a], #16\n\t"
153740 #endif
153741 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153742         "lsrs	r7, %[b], #16\n\t"
153743 #else
153744         "lsr	r7, %[b], #16\n\t"
153745 #endif
153746 #ifdef WOLFSSL_KEIL
153747         "muls	r7, r6, r7\n\t"
153748 #elif defined(__clang__)
153749         "muls	r7, r6\n\t"
153750 #else
153751         "mul	r7, r6\n\t"
153752 #endif
153753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153754         "adds	r3, r3, r7\n\t"
153755 #else
153756         "add	r3, r3, r7\n\t"
153757 #endif
153758 #ifdef WOLFSSL_KEIL
153759         "adcs	r4, r4, %[r]\n\t"
153760 #elif defined(__clang__)
153761         "adcs	r4, %[r]\n\t"
153762 #else
153763         "adc	r4, %[r]\n\t"
153764 #endif
153765         "uxth	r7, %[b]\n\t"
153766 #ifdef WOLFSSL_KEIL
153767         "muls	r6, r7, r6\n\t"
153768 #elif defined(__clang__)
153769         "muls	r6, r7\n\t"
153770 #else
153771         "mul	r6, r7\n\t"
153772 #endif
153773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153774         "lsrs	r7, r6, #16\n\t"
153775 #else
153776         "lsr	r7, r6, #16\n\t"
153777 #endif
153778 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153779         "lsls	r6, r6, #16\n\t"
153780 #else
153781         "lsl	r6, r6, #16\n\t"
153782 #endif
153783 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153784         "adds	r5, r5, r6\n\t"
153785 #else
153786         "add	r5, r5, r6\n\t"
153787 #endif
153788 #ifdef WOLFSSL_KEIL
153789         "adcs	r3, r3, r7\n\t"
153790 #elif defined(__clang__)
153791         "adcs	r3, r7\n\t"
153792 #else
153793         "adc	r3, r7\n\t"
153794 #endif
153795 #ifdef WOLFSSL_KEIL
153796         "adcs	r4, r4, %[r]\n\t"
153797 #elif defined(__clang__)
153798         "adcs	r4, %[r]\n\t"
153799 #else
153800         "adc	r4, %[r]\n\t"
153801 #endif
153802         "#  A[15] * B[14]\n\t"
153803         "mov	%[a], r9\n\t"
153804         "mov	%[b], r10\n\t"
153805         "ldr	%[a], [%[a], #60]\n\t"
153806         "ldr	%[b], [%[b], #56]\n\t"
153807         "uxth	r6, %[a]\n\t"
153808         "uxth	r7, %[b]\n\t"
153809 #ifdef WOLFSSL_KEIL
153810         "muls	r7, r6, r7\n\t"
153811 #elif defined(__clang__)
153812         "muls	r7, r6\n\t"
153813 #else
153814         "mul	r7, r6\n\t"
153815 #endif
153816 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153817         "adds	r5, r5, r7\n\t"
153818 #else
153819         "add	r5, r5, r7\n\t"
153820 #endif
153821 #ifdef WOLFSSL_KEIL
153822         "adcs	r3, r3, %[r]\n\t"
153823 #elif defined(__clang__)
153824         "adcs	r3, %[r]\n\t"
153825 #else
153826         "adc	r3, %[r]\n\t"
153827 #endif
153828 #ifdef WOLFSSL_KEIL
153829         "adcs	r4, r4, %[r]\n\t"
153830 #elif defined(__clang__)
153831         "adcs	r4, %[r]\n\t"
153832 #else
153833         "adc	r4, %[r]\n\t"
153834 #endif
153835 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153836         "lsrs	r7, %[b], #16\n\t"
153837 #else
153838         "lsr	r7, %[b], #16\n\t"
153839 #endif
153840 #ifdef WOLFSSL_KEIL
153841         "muls	r6, r7, r6\n\t"
153842 #elif defined(__clang__)
153843         "muls	r6, r7\n\t"
153844 #else
153845         "mul	r6, r7\n\t"
153846 #endif
153847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153848         "lsrs	r7, r6, #16\n\t"
153849 #else
153850         "lsr	r7, r6, #16\n\t"
153851 #endif
153852 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153853         "lsls	r6, r6, #16\n\t"
153854 #else
153855         "lsl	r6, r6, #16\n\t"
153856 #endif
153857 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153858         "adds	r5, r5, r6\n\t"
153859 #else
153860         "add	r5, r5, r6\n\t"
153861 #endif
153862 #ifdef WOLFSSL_KEIL
153863         "adcs	r3, r3, r7\n\t"
153864 #elif defined(__clang__)
153865         "adcs	r3, r7\n\t"
153866 #else
153867         "adc	r3, r7\n\t"
153868 #endif
153869 #ifdef WOLFSSL_KEIL
153870         "adcs	r4, r4, %[r]\n\t"
153871 #elif defined(__clang__)
153872         "adcs	r4, %[r]\n\t"
153873 #else
153874         "adc	r4, %[r]\n\t"
153875 #endif
153876 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153877         "lsrs	r6, %[a], #16\n\t"
153878 #else
153879         "lsr	r6, %[a], #16\n\t"
153880 #endif
153881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153882         "lsrs	r7, %[b], #16\n\t"
153883 #else
153884         "lsr	r7, %[b], #16\n\t"
153885 #endif
153886 #ifdef WOLFSSL_KEIL
153887         "muls	r7, r6, r7\n\t"
153888 #elif defined(__clang__)
153889         "muls	r7, r6\n\t"
153890 #else
153891         "mul	r7, r6\n\t"
153892 #endif
153893 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153894         "adds	r3, r3, r7\n\t"
153895 #else
153896         "add	r3, r3, r7\n\t"
153897 #endif
153898 #ifdef WOLFSSL_KEIL
153899         "adcs	r4, r4, %[r]\n\t"
153900 #elif defined(__clang__)
153901         "adcs	r4, %[r]\n\t"
153902 #else
153903         "adc	r4, %[r]\n\t"
153904 #endif
153905         "uxth	r7, %[b]\n\t"
153906 #ifdef WOLFSSL_KEIL
153907         "muls	r6, r7, r6\n\t"
153908 #elif defined(__clang__)
153909         "muls	r6, r7\n\t"
153910 #else
153911         "mul	r6, r7\n\t"
153912 #endif
153913 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153914         "lsrs	r7, r6, #16\n\t"
153915 #else
153916         "lsr	r7, r6, #16\n\t"
153917 #endif
153918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153919         "lsls	r6, r6, #16\n\t"
153920 #else
153921         "lsl	r6, r6, #16\n\t"
153922 #endif
153923 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153924         "adds	r5, r5, r6\n\t"
153925 #else
153926         "add	r5, r5, r6\n\t"
153927 #endif
153928 #ifdef WOLFSSL_KEIL
153929         "adcs	r3, r3, r7\n\t"
153930 #elif defined(__clang__)
153931         "adcs	r3, r7\n\t"
153932 #else
153933         "adc	r3, r7\n\t"
153934 #endif
153935 #ifdef WOLFSSL_KEIL
153936         "adcs	r4, r4, %[r]\n\t"
153937 #elif defined(__clang__)
153938         "adcs	r4, %[r]\n\t"
153939 #else
153940         "adc	r4, %[r]\n\t"
153941 #endif
153942         "mov	%[r], r8\n\t"
153943         "str	r5, [%[r], #116]\n\t"
153944         "movs	%[r], #0\n\t"
153945         "#  A[15] * B[15]\n\t"
153946         "mov	%[a], r9\n\t"
153947         "mov	%[b], r10\n\t"
153948         "ldr	%[a], [%[a], #60]\n\t"
153949         "ldr	%[b], [%[b], #60]\n\t"
153950         "uxth	r6, %[a]\n\t"
153951         "uxth	r7, %[b]\n\t"
153952 #ifdef WOLFSSL_KEIL
153953         "muls	r7, r6, r7\n\t"
153954 #elif defined(__clang__)
153955         "muls	r7, r6\n\t"
153956 #else
153957         "mul	r7, r6\n\t"
153958 #endif
153959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153960         "adds	r3, r3, r7\n\t"
153961 #else
153962         "add	r3, r3, r7\n\t"
153963 #endif
153964 #ifdef WOLFSSL_KEIL
153965         "adcs	r4, r4, %[r]\n\t"
153966 #elif defined(__clang__)
153967         "adcs	r4, %[r]\n\t"
153968 #else
153969         "adc	r4, %[r]\n\t"
153970 #endif
153971 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153972         "lsrs	r7, %[b], #16\n\t"
153973 #else
153974         "lsr	r7, %[b], #16\n\t"
153975 #endif
153976 #ifdef WOLFSSL_KEIL
153977         "muls	r6, r7, r6\n\t"
153978 #elif defined(__clang__)
153979         "muls	r6, r7\n\t"
153980 #else
153981         "mul	r6, r7\n\t"
153982 #endif
153983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153984         "lsrs	r7, r6, #16\n\t"
153985 #else
153986         "lsr	r7, r6, #16\n\t"
153987 #endif
153988 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153989         "lsls	r6, r6, #16\n\t"
153990 #else
153991         "lsl	r6, r6, #16\n\t"
153992 #endif
153993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
153994         "adds	r3, r3, r6\n\t"
153995 #else
153996         "add	r3, r3, r6\n\t"
153997 #endif
153998 #ifdef WOLFSSL_KEIL
153999         "adcs	r4, r4, r7\n\t"
154000 #elif defined(__clang__)
154001         "adcs	r4, r7\n\t"
154002 #else
154003         "adc	r4, r7\n\t"
154004 #endif
154005 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154006         "lsrs	r6, %[a], #16\n\t"
154007 #else
154008         "lsr	r6, %[a], #16\n\t"
154009 #endif
154010 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154011         "lsrs	r7, %[b], #16\n\t"
154012 #else
154013         "lsr	r7, %[b], #16\n\t"
154014 #endif
154015 #ifdef WOLFSSL_KEIL
154016         "muls	r7, r6, r7\n\t"
154017 #elif defined(__clang__)
154018         "muls	r7, r6\n\t"
154019 #else
154020         "mul	r7, r6\n\t"
154021 #endif
154022 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154023         "adds	r4, r4, r7\n\t"
154024 #else
154025         "add	r4, r4, r7\n\t"
154026 #endif
154027         "uxth	r7, %[b]\n\t"
154028 #ifdef WOLFSSL_KEIL
154029         "muls	r6, r7, r6\n\t"
154030 #elif defined(__clang__)
154031         "muls	r6, r7\n\t"
154032 #else
154033         "mul	r6, r7\n\t"
154034 #endif
154035 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154036         "lsrs	r7, r6, #16\n\t"
154037 #else
154038         "lsr	r7, r6, #16\n\t"
154039 #endif
154040 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154041         "lsls	r6, r6, #16\n\t"
154042 #else
154043         "lsl	r6, r6, #16\n\t"
154044 #endif
154045 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154046         "adds	r3, r3, r6\n\t"
154047 #else
154048         "add	r3, r3, r6\n\t"
154049 #endif
154050 #ifdef WOLFSSL_KEIL
154051         "adcs	r4, r4, r7\n\t"
154052 #elif defined(__clang__)
154053         "adcs	r4, r7\n\t"
154054 #else
154055         "adc	r4, r7\n\t"
154056 #endif
154057         "mov	%[r], r8\n\t"
154058         "str	r3, [%[r], #120]\n\t"
154059         "str	r4, [%[r], #124]\n\t"
154060         "pop	{r3, r4, r5, r6}\n\t"
154061         "stm	%[r]!, {r3, r4, r5, r6}\n\t"
154062         "pop	{r3, r4, r5, r6}\n\t"
154063         "stm	%[r]!, {r3, r4, r5, r6}\n\t"
154064         "pop	{r3, r4, r5, r6}\n\t"
154065         "stm	%[r]!, {r3, r4, r5, r6}\n\t"
154066         "pop	{r3, r4, r5, r6}\n\t"
154067         "stm	%[r]!, {r3, r4, r5, r6}\n\t"
154068         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
154069         :
154070         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10"
154071     );
154072 }
154073 
154074 #endif /* !WOLFSSL_SP_LARGE_CODE */
154075 #ifndef WOLFSSL_SP_LARGE_CODE
154076 /* Square a and put result in r. (r = a * a)
154077  *
154078  * r  A single precision integer.
154079  * a  A single precision integer.
154080  */
sp_1024_sqr_16(sp_digit * r,const sp_digit * a)154081 SP_NOINLINE static void sp_1024_sqr_16(sp_digit* r, const sp_digit* a)
154082 {
154083     __asm__ __volatile__ (
154084         "movs	r3, #0\n\t"
154085         "movs	r4, #0\n\t"
154086         "movs	r5, #0\n\t"
154087         "mov	r8, r3\n\t"
154088         "mov	r11, %[r]\n\t"
154089         "movs	r6, #0x80\n\t"
154090 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154091         "negs	r6, r6\n\t"
154092 #else
154093         "neg	r6, r6\n\t"
154094 #endif
154095         "add	sp, sp, r6\n\t"
154096         "mov	r10, sp\n\t"
154097         "mov	r9, %[a]\n\t"
154098         "\n"
154099     "L_sp_1024_sqr_16_words_%=:\n\t"
154100         "movs	%[r], #0\n\t"
154101         "movs	r6, #60\n\t"
154102         "mov	%[a], r8\n\t"
154103 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154104         "subs	%[a], %[a], r6\n\t"
154105 #else
154106         "sub	%[a], %[a], r6\n\t"
154107 #endif
154108 #ifdef WOLFSSL_KEIL
154109         "sbcs	r6, r6, r6\n\t"
154110 #elif defined(__clang__)
154111         "sbcs	r6, r6\n\t"
154112 #else
154113         "sbc	r6, r6\n\t"
154114 #endif
154115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154116         "mvns	r6, r6\n\t"
154117 #else
154118         "mvn	r6, r6\n\t"
154119 #endif
154120 #ifdef WOLFSSL_KEIL
154121         "ands	%[a], %[a], r6\n\t"
154122 #elif defined(__clang__)
154123         "ands	%[a], r6\n\t"
154124 #else
154125         "and	%[a], r6\n\t"
154126 #endif
154127         "mov	r2, r8\n\t"
154128 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154129         "subs	r2, r2, %[a]\n\t"
154130 #else
154131         "sub	r2, r2, %[a]\n\t"
154132 #endif
154133         "add	%[a], %[a], r9\n\t"
154134         "add	r2, r2, r9\n\t"
154135         "\n"
154136     "L_sp_1024_sqr_16_mul_%=:\n\t"
154137         "cmp	r2, %[a]\n\t"
154138         "beq	L_sp_1024_sqr_16_sqr_%=\n\t"
154139         "# Multiply * 2: Start\n\t"
154140         "ldrh	r6, [%[a]]\n\t"
154141         "ldrh	r7, [r2]\n\t"
154142 #ifdef WOLFSSL_KEIL
154143         "muls	r7, r6, r7\n\t"
154144 #elif defined(__clang__)
154145         "muls	r7, r6\n\t"
154146 #else
154147         "mul	r7, r6\n\t"
154148 #endif
154149 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154150         "adds	r3, r3, r7\n\t"
154151 #else
154152         "add	r3, r3, r7\n\t"
154153 #endif
154154 #ifdef WOLFSSL_KEIL
154155         "adcs	r4, r4, %[r]\n\t"
154156 #elif defined(__clang__)
154157         "adcs	r4, %[r]\n\t"
154158 #else
154159         "adc	r4, %[r]\n\t"
154160 #endif
154161 #ifdef WOLFSSL_KEIL
154162         "adcs	r5, r5, %[r]\n\t"
154163 #elif defined(__clang__)
154164         "adcs	r5, %[r]\n\t"
154165 #else
154166         "adc	r5, %[r]\n\t"
154167 #endif
154168 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154169         "adds	r3, r3, r7\n\t"
154170 #else
154171         "add	r3, r3, r7\n\t"
154172 #endif
154173 #ifdef WOLFSSL_KEIL
154174         "adcs	r4, r4, %[r]\n\t"
154175 #elif defined(__clang__)
154176         "adcs	r4, %[r]\n\t"
154177 #else
154178         "adc	r4, %[r]\n\t"
154179 #endif
154180 #ifdef WOLFSSL_KEIL
154181         "adcs	r5, r5, %[r]\n\t"
154182 #elif defined(__clang__)
154183         "adcs	r5, %[r]\n\t"
154184 #else
154185         "adc	r5, %[r]\n\t"
154186 #endif
154187         "ldr	r7, [r2]\n\t"
154188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154189         "lsrs	r7, r7, #16\n\t"
154190 #else
154191         "lsr	r7, r7, #16\n\t"
154192 #endif
154193 #ifdef WOLFSSL_KEIL
154194         "muls	r6, r7, r6\n\t"
154195 #elif defined(__clang__)
154196         "muls	r6, r7\n\t"
154197 #else
154198         "mul	r6, r7\n\t"
154199 #endif
154200 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154201         "lsrs	r7, r6, #16\n\t"
154202 #else
154203         "lsr	r7, r6, #16\n\t"
154204 #endif
154205 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154206         "lsls	r6, r6, #16\n\t"
154207 #else
154208         "lsl	r6, r6, #16\n\t"
154209 #endif
154210 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154211         "adds	r3, r3, r6\n\t"
154212 #else
154213         "add	r3, r3, r6\n\t"
154214 #endif
154215 #ifdef WOLFSSL_KEIL
154216         "adcs	r4, r4, r7\n\t"
154217 #elif defined(__clang__)
154218         "adcs	r4, r7\n\t"
154219 #else
154220         "adc	r4, r7\n\t"
154221 #endif
154222 #ifdef WOLFSSL_KEIL
154223         "adcs	r5, r5, %[r]\n\t"
154224 #elif defined(__clang__)
154225         "adcs	r5, %[r]\n\t"
154226 #else
154227         "adc	r5, %[r]\n\t"
154228 #endif
154229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154230         "adds	r3, r3, r6\n\t"
154231 #else
154232         "add	r3, r3, r6\n\t"
154233 #endif
154234 #ifdef WOLFSSL_KEIL
154235         "adcs	r4, r4, r7\n\t"
154236 #elif defined(__clang__)
154237         "adcs	r4, r7\n\t"
154238 #else
154239         "adc	r4, r7\n\t"
154240 #endif
154241 #ifdef WOLFSSL_KEIL
154242         "adcs	r5, r5, %[r]\n\t"
154243 #elif defined(__clang__)
154244         "adcs	r5, %[r]\n\t"
154245 #else
154246         "adc	r5, %[r]\n\t"
154247 #endif
154248         "ldr	r6, [%[a]]\n\t"
154249         "ldr	r7, [r2]\n\t"
154250 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154251         "lsrs	r6, r6, #16\n\t"
154252 #else
154253         "lsr	r6, r6, #16\n\t"
154254 #endif
154255 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154256         "lsrs	r7, r7, #16\n\t"
154257 #else
154258         "lsr	r7, r7, #16\n\t"
154259 #endif
154260 #ifdef WOLFSSL_KEIL
154261         "muls	r7, r6, r7\n\t"
154262 #elif defined(__clang__)
154263         "muls	r7, r6\n\t"
154264 #else
154265         "mul	r7, r6\n\t"
154266 #endif
154267 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154268         "adds	r4, r4, r7\n\t"
154269 #else
154270         "add	r4, r4, r7\n\t"
154271 #endif
154272 #ifdef WOLFSSL_KEIL
154273         "adcs	r5, r5, %[r]\n\t"
154274 #elif defined(__clang__)
154275         "adcs	r5, %[r]\n\t"
154276 #else
154277         "adc	r5, %[r]\n\t"
154278 #endif
154279 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154280         "adds	r4, r4, r7\n\t"
154281 #else
154282         "add	r4, r4, r7\n\t"
154283 #endif
154284 #ifdef WOLFSSL_KEIL
154285         "adcs	r5, r5, %[r]\n\t"
154286 #elif defined(__clang__)
154287         "adcs	r5, %[r]\n\t"
154288 #else
154289         "adc	r5, %[r]\n\t"
154290 #endif
154291         "ldrh	r7, [r2]\n\t"
154292 #ifdef WOLFSSL_KEIL
154293         "muls	r6, r7, r6\n\t"
154294 #elif defined(__clang__)
154295         "muls	r6, r7\n\t"
154296 #else
154297         "mul	r6, r7\n\t"
154298 #endif
154299 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154300         "lsrs	r7, r6, #16\n\t"
154301 #else
154302         "lsr	r7, r6, #16\n\t"
154303 #endif
154304 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154305         "lsls	r6, r6, #16\n\t"
154306 #else
154307         "lsl	r6, r6, #16\n\t"
154308 #endif
154309 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154310         "adds	r3, r3, r6\n\t"
154311 #else
154312         "add	r3, r3, r6\n\t"
154313 #endif
154314 #ifdef WOLFSSL_KEIL
154315         "adcs	r4, r4, r7\n\t"
154316 #elif defined(__clang__)
154317         "adcs	r4, r7\n\t"
154318 #else
154319         "adc	r4, r7\n\t"
154320 #endif
154321 #ifdef WOLFSSL_KEIL
154322         "adcs	r5, r5, %[r]\n\t"
154323 #elif defined(__clang__)
154324         "adcs	r5, %[r]\n\t"
154325 #else
154326         "adc	r5, %[r]\n\t"
154327 #endif
154328 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154329         "adds	r3, r3, r6\n\t"
154330 #else
154331         "add	r3, r3, r6\n\t"
154332 #endif
154333 #ifdef WOLFSSL_KEIL
154334         "adcs	r4, r4, r7\n\t"
154335 #elif defined(__clang__)
154336         "adcs	r4, r7\n\t"
154337 #else
154338         "adc	r4, r7\n\t"
154339 #endif
154340 #ifdef WOLFSSL_KEIL
154341         "adcs	r5, r5, %[r]\n\t"
154342 #elif defined(__clang__)
154343         "adcs	r5, %[r]\n\t"
154344 #else
154345         "adc	r5, %[r]\n\t"
154346 #endif
154347         "# Multiply * 2: Done\n\t"
154348         "bal	L_sp_1024_sqr_16_done_sqr_%=\n\t"
154349         "\n"
154350     "L_sp_1024_sqr_16_sqr_%=:\n\t"
154351         "mov	r12, r2\n\t"
154352         "ldr	r2, [%[a]]\n\t"
154353         "# Square: Start\n\t"
154354 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154355         "lsrs	r7, r2, #16\n\t"
154356 #else
154357         "lsr	r7, r2, #16\n\t"
154358 #endif
154359         "uxth	r6, r2\n\t"
154360 #ifdef WOLFSSL_KEIL
154361         "muls	r6, r6, r6\n\t"
154362 #elif defined(__clang__)
154363         "muls	r6, r6\n\t"
154364 #else
154365         "mul	r6, r6\n\t"
154366 #endif
154367 #ifdef WOLFSSL_KEIL
154368         "muls	r7, r7, r7\n\t"
154369 #elif defined(__clang__)
154370         "muls	r7, r7\n\t"
154371 #else
154372         "mul	r7, r7\n\t"
154373 #endif
154374 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154375         "adds	r3, r3, r6\n\t"
154376 #else
154377         "add	r3, r3, r6\n\t"
154378 #endif
154379 #ifdef WOLFSSL_KEIL
154380         "adcs	r4, r4, r7\n\t"
154381 #elif defined(__clang__)
154382         "adcs	r4, r7\n\t"
154383 #else
154384         "adc	r4, r7\n\t"
154385 #endif
154386 #ifdef WOLFSSL_KEIL
154387         "adcs	r5, r5, %[r]\n\t"
154388 #elif defined(__clang__)
154389         "adcs	r5, %[r]\n\t"
154390 #else
154391         "adc	r5, %[r]\n\t"
154392 #endif
154393 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154394         "lsrs	r7, r2, #16\n\t"
154395 #else
154396         "lsr	r7, r2, #16\n\t"
154397 #endif
154398         "uxth	r6, r2\n\t"
154399 #ifdef WOLFSSL_KEIL
154400         "muls	r6, r7, r6\n\t"
154401 #elif defined(__clang__)
154402         "muls	r6, r7\n\t"
154403 #else
154404         "mul	r6, r7\n\t"
154405 #endif
154406 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154407         "lsrs	r7, r6, #15\n\t"
154408 #else
154409         "lsr	r7, r6, #15\n\t"
154410 #endif
154411 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154412         "lsls	r6, r6, #17\n\t"
154413 #else
154414         "lsl	r6, r6, #17\n\t"
154415 #endif
154416 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154417         "adds	r3, r3, r6\n\t"
154418 #else
154419         "add	r3, r3, r6\n\t"
154420 #endif
154421 #ifdef WOLFSSL_KEIL
154422         "adcs	r4, r4, r7\n\t"
154423 #elif defined(__clang__)
154424         "adcs	r4, r7\n\t"
154425 #else
154426         "adc	r4, r7\n\t"
154427 #endif
154428 #ifdef WOLFSSL_KEIL
154429         "adcs	r5, r5, %[r]\n\t"
154430 #elif defined(__clang__)
154431         "adcs	r5, %[r]\n\t"
154432 #else
154433         "adc	r5, %[r]\n\t"
154434 #endif
154435         "# Square: Done\n\t"
154436         "mov	r2, r12\n\t"
154437         "\n"
154438     "L_sp_1024_sqr_16_done_sqr_%=:\n\t"
154439 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154440         "adds	%[a], %[a], #4\n\t"
154441 #else
154442         "add	%[a], %[a], #4\n\t"
154443 #endif
154444 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154445         "subs	r2, r2, #4\n\t"
154446 #else
154447         "sub	r2, r2, #4\n\t"
154448 #endif
154449         "movs	r6, #0x40\n\t"
154450         "add	r6, r6, r9\n\t"
154451         "cmp	%[a], r6\n\t"
154452         "beq	L_sp_1024_sqr_16_done_mul_%=\n\t"
154453         "cmp	%[a], r2\n\t"
154454         "bgt	L_sp_1024_sqr_16_done_mul_%=\n\t"
154455         "mov	r7, r8\n\t"
154456         "add	r7, r7, r9\n\t"
154457         "cmp	%[a], r7\n\t"
154458         "ble	L_sp_1024_sqr_16_mul_%=\n\t"
154459         "\n"
154460     "L_sp_1024_sqr_16_done_mul_%=:\n\t"
154461         "mov	%[r], r10\n\t"
154462         "mov	r7, r8\n\t"
154463         "str	r3, [%[r], r7]\n\t"
154464         "movs	r3, r4\n\t"
154465         "movs	r4, r5\n\t"
154466         "movs	r5, #0\n\t"
154467 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154468         "adds	r7, r7, #4\n\t"
154469 #else
154470         "add	r7, r7, #4\n\t"
154471 #endif
154472         "mov	r8, r7\n\t"
154473         "movs	r6, #0x78\n\t"
154474         "cmp	r7, r6\n\t"
154475         "ble	L_sp_1024_sqr_16_words_%=\n\t"
154476         "mov	%[a], r9\n\t"
154477         "str	r3, [%[r], r7]\n\t"
154478         "mov	%[r], r11\n\t"
154479         "mov	%[a], r10\n\t"
154480         "movs	r3, #0x7c\n\t"
154481         "\n"
154482     "L_sp_1024_sqr_16_store_%=:\n\t"
154483         "ldr	r6, [%[a], r3]\n\t"
154484         "str	r6, [%[r], r3]\n\t"
154485 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154486         "subs	r3, r3, #4\n\t"
154487 #else
154488         "sub	r3, r3, #4\n\t"
154489 #endif
154490         "bge	L_sp_1024_sqr_16_store_%=\n\t"
154491         "movs	r6, #0x80\n\t"
154492         "add	sp, sp, r6\n\t"
154493         : [r] "+r" (r), [a] "+r" (a)
154494         :
154495         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
154496     );
154497 }
154498 
154499 #else
154500 /* Square a and put result in r. (r = a * a)
154501  *
154502  * r  A single precision integer.
154503  * a  A single precision integer.
154504  */
sp_1024_sqr_16(sp_digit * r,const sp_digit * a)154505 SP_NOINLINE static void sp_1024_sqr_16(sp_digit* r, const sp_digit* a)
154506 {
154507     __asm__ __volatile__ (
154508         "sub	sp, sp, #0x40\n\t"
154509         "mov	r8, %[r]\n\t"
154510         "mov	r9, %[a]\n\t"
154511         "movs	%[r], #0\n\t"
154512         "ldm	%[a]!, {r2, r3, r4, r5}\n\t"
154513         "mov	r10, r2\n\t"
154514         "mov	r11, r3\n\t"
154515         "mov	r12, r4\n\t"
154516         "mov	lr, r5\n\t"
154517         "mov	%[a], r9\n\t"
154518         "#  A[0] * A[0]\n\t"
154519         "movs	r4, #0\n\t"
154520         "mov	r7, r10\n\t"
154521 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154522         "lsrs	r6, r7, #16\n\t"
154523 #else
154524         "lsr	r6, r7, #16\n\t"
154525 #endif
154526         "uxth	r5, r7\n\t"
154527         "movs	r2, r5\n\t"
154528         "movs	r3, r6\n\t"
154529 #ifdef WOLFSSL_KEIL
154530         "muls	r2, r2, r2\n\t"
154531 #elif defined(__clang__)
154532         "muls	r2, r2\n\t"
154533 #else
154534         "mul	r2, r2\n\t"
154535 #endif
154536 #ifdef WOLFSSL_KEIL
154537         "muls	r3, r3, r3\n\t"
154538 #elif defined(__clang__)
154539         "muls	r3, r3\n\t"
154540 #else
154541         "mul	r3, r3\n\t"
154542 #endif
154543 #ifdef WOLFSSL_KEIL
154544         "muls	r5, r6, r5\n\t"
154545 #elif defined(__clang__)
154546         "muls	r5, r6\n\t"
154547 #else
154548         "mul	r5, r6\n\t"
154549 #endif
154550 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154551         "lsrs	r6, r5, #15\n\t"
154552 #else
154553         "lsr	r6, r5, #15\n\t"
154554 #endif
154555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154556         "lsls	r5, r5, #17\n\t"
154557 #else
154558         "lsl	r5, r5, #17\n\t"
154559 #endif
154560 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154561         "adds	r2, r2, r5\n\t"
154562 #else
154563         "add	r2, r2, r5\n\t"
154564 #endif
154565 #ifdef WOLFSSL_KEIL
154566         "adcs	r3, r3, r6\n\t"
154567 #elif defined(__clang__)
154568         "adcs	r3, r6\n\t"
154569 #else
154570         "adc	r3, r6\n\t"
154571 #endif
154572         "str	r2, [sp]\n\t"
154573         "#  A[1] * A[0]\n\t"
154574         "movs	r2, #0\n\t"
154575         "mov	%[a], r11\n\t"
154576         "uxth	r5, %[a]\n\t"
154577         "uxth	r6, r7\n\t"
154578 #ifdef WOLFSSL_KEIL
154579         "muls	r6, r5, r6\n\t"
154580 #elif defined(__clang__)
154581         "muls	r6, r5\n\t"
154582 #else
154583         "mul	r6, r5\n\t"
154584 #endif
154585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154586         "adds	r3, r3, r6\n\t"
154587 #else
154588         "add	r3, r3, r6\n\t"
154589 #endif
154590 #ifdef WOLFSSL_KEIL
154591         "adcs	r4, r4, %[r]\n\t"
154592 #elif defined(__clang__)
154593         "adcs	r4, %[r]\n\t"
154594 #else
154595         "adc	r4, %[r]\n\t"
154596 #endif
154597 #ifdef WOLFSSL_KEIL
154598         "adcs	r2, r2, %[r]\n\t"
154599 #elif defined(__clang__)
154600         "adcs	r2, %[r]\n\t"
154601 #else
154602         "adc	r2, %[r]\n\t"
154603 #endif
154604 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154605         "adds	r3, r3, r6\n\t"
154606 #else
154607         "add	r3, r3, r6\n\t"
154608 #endif
154609 #ifdef WOLFSSL_KEIL
154610         "adcs	r4, r4, %[r]\n\t"
154611 #elif defined(__clang__)
154612         "adcs	r4, %[r]\n\t"
154613 #else
154614         "adc	r4, %[r]\n\t"
154615 #endif
154616 #ifdef WOLFSSL_KEIL
154617         "adcs	r2, r2, %[r]\n\t"
154618 #elif defined(__clang__)
154619         "adcs	r2, %[r]\n\t"
154620 #else
154621         "adc	r2, %[r]\n\t"
154622 #endif
154623 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154624         "lsrs	r6, r7, #16\n\t"
154625 #else
154626         "lsr	r6, r7, #16\n\t"
154627 #endif
154628 #ifdef WOLFSSL_KEIL
154629         "muls	r5, r6, r5\n\t"
154630 #elif defined(__clang__)
154631         "muls	r5, r6\n\t"
154632 #else
154633         "mul	r5, r6\n\t"
154634 #endif
154635 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154636         "lsrs	r6, r5, #16\n\t"
154637 #else
154638         "lsr	r6, r5, #16\n\t"
154639 #endif
154640 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154641         "lsls	r5, r5, #16\n\t"
154642 #else
154643         "lsl	r5, r5, #16\n\t"
154644 #endif
154645 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154646         "adds	r3, r3, r5\n\t"
154647 #else
154648         "add	r3, r3, r5\n\t"
154649 #endif
154650 #ifdef WOLFSSL_KEIL
154651         "adcs	r4, r4, r6\n\t"
154652 #elif defined(__clang__)
154653         "adcs	r4, r6\n\t"
154654 #else
154655         "adc	r4, r6\n\t"
154656 #endif
154657 #ifdef WOLFSSL_KEIL
154658         "adcs	r2, r2, %[r]\n\t"
154659 #elif defined(__clang__)
154660         "adcs	r2, %[r]\n\t"
154661 #else
154662         "adc	r2, %[r]\n\t"
154663 #endif
154664 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154665         "adds	r3, r3, r5\n\t"
154666 #else
154667         "add	r3, r3, r5\n\t"
154668 #endif
154669 #ifdef WOLFSSL_KEIL
154670         "adcs	r4, r4, r6\n\t"
154671 #elif defined(__clang__)
154672         "adcs	r4, r6\n\t"
154673 #else
154674         "adc	r4, r6\n\t"
154675 #endif
154676 #ifdef WOLFSSL_KEIL
154677         "adcs	r2, r2, %[r]\n\t"
154678 #elif defined(__clang__)
154679         "adcs	r2, %[r]\n\t"
154680 #else
154681         "adc	r2, %[r]\n\t"
154682 #endif
154683 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154684         "lsrs	r5, %[a], #16\n\t"
154685 #else
154686         "lsr	r5, %[a], #16\n\t"
154687 #endif
154688 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154689         "lsrs	r6, r7, #16\n\t"
154690 #else
154691         "lsr	r6, r7, #16\n\t"
154692 #endif
154693 #ifdef WOLFSSL_KEIL
154694         "muls	r6, r5, r6\n\t"
154695 #elif defined(__clang__)
154696         "muls	r6, r5\n\t"
154697 #else
154698         "mul	r6, r5\n\t"
154699 #endif
154700 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154701         "adds	r4, r4, r6\n\t"
154702 #else
154703         "add	r4, r4, r6\n\t"
154704 #endif
154705 #ifdef WOLFSSL_KEIL
154706         "adcs	r2, r2, %[r]\n\t"
154707 #elif defined(__clang__)
154708         "adcs	r2, %[r]\n\t"
154709 #else
154710         "adc	r2, %[r]\n\t"
154711 #endif
154712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154713         "adds	r4, r4, r6\n\t"
154714 #else
154715         "add	r4, r4, r6\n\t"
154716 #endif
154717 #ifdef WOLFSSL_KEIL
154718         "adcs	r2, r2, %[r]\n\t"
154719 #elif defined(__clang__)
154720         "adcs	r2, %[r]\n\t"
154721 #else
154722         "adc	r2, %[r]\n\t"
154723 #endif
154724         "uxth	r6, r7\n\t"
154725 #ifdef WOLFSSL_KEIL
154726         "muls	r5, r6, r5\n\t"
154727 #elif defined(__clang__)
154728         "muls	r5, r6\n\t"
154729 #else
154730         "mul	r5, r6\n\t"
154731 #endif
154732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154733         "lsrs	r6, r5, #16\n\t"
154734 #else
154735         "lsr	r6, r5, #16\n\t"
154736 #endif
154737 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154738         "lsls	r5, r5, #16\n\t"
154739 #else
154740         "lsl	r5, r5, #16\n\t"
154741 #endif
154742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154743         "adds	r3, r3, r5\n\t"
154744 #else
154745         "add	r3, r3, r5\n\t"
154746 #endif
154747 #ifdef WOLFSSL_KEIL
154748         "adcs	r4, r4, r6\n\t"
154749 #elif defined(__clang__)
154750         "adcs	r4, r6\n\t"
154751 #else
154752         "adc	r4, r6\n\t"
154753 #endif
154754 #ifdef WOLFSSL_KEIL
154755         "adcs	r2, r2, %[r]\n\t"
154756 #elif defined(__clang__)
154757         "adcs	r2, %[r]\n\t"
154758 #else
154759         "adc	r2, %[r]\n\t"
154760 #endif
154761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154762         "adds	r3, r3, r5\n\t"
154763 #else
154764         "add	r3, r3, r5\n\t"
154765 #endif
154766 #ifdef WOLFSSL_KEIL
154767         "adcs	r4, r4, r6\n\t"
154768 #elif defined(__clang__)
154769         "adcs	r4, r6\n\t"
154770 #else
154771         "adc	r4, r6\n\t"
154772 #endif
154773 #ifdef WOLFSSL_KEIL
154774         "adcs	r2, r2, %[r]\n\t"
154775 #elif defined(__clang__)
154776         "adcs	r2, %[r]\n\t"
154777 #else
154778         "adc	r2, %[r]\n\t"
154779 #endif
154780         "str	r3, [sp, #4]\n\t"
154781         "#  A[2] * A[0]\n\t"
154782         "movs	r3, #0\n\t"
154783         "mov	%[a], r9\n\t"
154784         "mov	%[a], r12\n\t"
154785         "uxth	r5, %[a]\n\t"
154786         "uxth	r6, r7\n\t"
154787 #ifdef WOLFSSL_KEIL
154788         "muls	r6, r5, r6\n\t"
154789 #elif defined(__clang__)
154790         "muls	r6, r5\n\t"
154791 #else
154792         "mul	r6, r5\n\t"
154793 #endif
154794 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154795         "adds	r4, r4, r6\n\t"
154796 #else
154797         "add	r4, r4, r6\n\t"
154798 #endif
154799 #ifdef WOLFSSL_KEIL
154800         "adcs	r2, r2, %[r]\n\t"
154801 #elif defined(__clang__)
154802         "adcs	r2, %[r]\n\t"
154803 #else
154804         "adc	r2, %[r]\n\t"
154805 #endif
154806 #ifdef WOLFSSL_KEIL
154807         "adcs	r3, r3, %[r]\n\t"
154808 #elif defined(__clang__)
154809         "adcs	r3, %[r]\n\t"
154810 #else
154811         "adc	r3, %[r]\n\t"
154812 #endif
154813 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154814         "adds	r4, r4, r6\n\t"
154815 #else
154816         "add	r4, r4, r6\n\t"
154817 #endif
154818 #ifdef WOLFSSL_KEIL
154819         "adcs	r2, r2, %[r]\n\t"
154820 #elif defined(__clang__)
154821         "adcs	r2, %[r]\n\t"
154822 #else
154823         "adc	r2, %[r]\n\t"
154824 #endif
154825 #ifdef WOLFSSL_KEIL
154826         "adcs	r3, r3, %[r]\n\t"
154827 #elif defined(__clang__)
154828         "adcs	r3, %[r]\n\t"
154829 #else
154830         "adc	r3, %[r]\n\t"
154831 #endif
154832 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154833         "lsrs	r6, r7, #16\n\t"
154834 #else
154835         "lsr	r6, r7, #16\n\t"
154836 #endif
154837 #ifdef WOLFSSL_KEIL
154838         "muls	r5, r6, r5\n\t"
154839 #elif defined(__clang__)
154840         "muls	r5, r6\n\t"
154841 #else
154842         "mul	r5, r6\n\t"
154843 #endif
154844 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154845         "lsrs	r6, r5, #16\n\t"
154846 #else
154847         "lsr	r6, r5, #16\n\t"
154848 #endif
154849 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154850         "lsls	r5, r5, #16\n\t"
154851 #else
154852         "lsl	r5, r5, #16\n\t"
154853 #endif
154854 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154855         "adds	r4, r4, r5\n\t"
154856 #else
154857         "add	r4, r4, r5\n\t"
154858 #endif
154859 #ifdef WOLFSSL_KEIL
154860         "adcs	r2, r2, r6\n\t"
154861 #elif defined(__clang__)
154862         "adcs	r2, r6\n\t"
154863 #else
154864         "adc	r2, r6\n\t"
154865 #endif
154866 #ifdef WOLFSSL_KEIL
154867         "adcs	r3, r3, %[r]\n\t"
154868 #elif defined(__clang__)
154869         "adcs	r3, %[r]\n\t"
154870 #else
154871         "adc	r3, %[r]\n\t"
154872 #endif
154873 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154874         "adds	r4, r4, r5\n\t"
154875 #else
154876         "add	r4, r4, r5\n\t"
154877 #endif
154878 #ifdef WOLFSSL_KEIL
154879         "adcs	r2, r2, r6\n\t"
154880 #elif defined(__clang__)
154881         "adcs	r2, r6\n\t"
154882 #else
154883         "adc	r2, r6\n\t"
154884 #endif
154885 #ifdef WOLFSSL_KEIL
154886         "adcs	r3, r3, %[r]\n\t"
154887 #elif defined(__clang__)
154888         "adcs	r3, %[r]\n\t"
154889 #else
154890         "adc	r3, %[r]\n\t"
154891 #endif
154892 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154893         "lsrs	r5, %[a], #16\n\t"
154894 #else
154895         "lsr	r5, %[a], #16\n\t"
154896 #endif
154897 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154898         "lsrs	r6, r7, #16\n\t"
154899 #else
154900         "lsr	r6, r7, #16\n\t"
154901 #endif
154902 #ifdef WOLFSSL_KEIL
154903         "muls	r6, r5, r6\n\t"
154904 #elif defined(__clang__)
154905         "muls	r6, r5\n\t"
154906 #else
154907         "mul	r6, r5\n\t"
154908 #endif
154909 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154910         "adds	r2, r2, r6\n\t"
154911 #else
154912         "add	r2, r2, r6\n\t"
154913 #endif
154914 #ifdef WOLFSSL_KEIL
154915         "adcs	r3, r3, %[r]\n\t"
154916 #elif defined(__clang__)
154917         "adcs	r3, %[r]\n\t"
154918 #else
154919         "adc	r3, %[r]\n\t"
154920 #endif
154921 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154922         "adds	r2, r2, r6\n\t"
154923 #else
154924         "add	r2, r2, r6\n\t"
154925 #endif
154926 #ifdef WOLFSSL_KEIL
154927         "adcs	r3, r3, %[r]\n\t"
154928 #elif defined(__clang__)
154929         "adcs	r3, %[r]\n\t"
154930 #else
154931         "adc	r3, %[r]\n\t"
154932 #endif
154933         "uxth	r6, r7\n\t"
154934 #ifdef WOLFSSL_KEIL
154935         "muls	r5, r6, r5\n\t"
154936 #elif defined(__clang__)
154937         "muls	r5, r6\n\t"
154938 #else
154939         "mul	r5, r6\n\t"
154940 #endif
154941 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154942         "lsrs	r6, r5, #16\n\t"
154943 #else
154944         "lsr	r6, r5, #16\n\t"
154945 #endif
154946 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154947         "lsls	r5, r5, #16\n\t"
154948 #else
154949         "lsl	r5, r5, #16\n\t"
154950 #endif
154951 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154952         "adds	r4, r4, r5\n\t"
154953 #else
154954         "add	r4, r4, r5\n\t"
154955 #endif
154956 #ifdef WOLFSSL_KEIL
154957         "adcs	r2, r2, r6\n\t"
154958 #elif defined(__clang__)
154959         "adcs	r2, r6\n\t"
154960 #else
154961         "adc	r2, r6\n\t"
154962 #endif
154963 #ifdef WOLFSSL_KEIL
154964         "adcs	r3, r3, %[r]\n\t"
154965 #elif defined(__clang__)
154966         "adcs	r3, %[r]\n\t"
154967 #else
154968         "adc	r3, %[r]\n\t"
154969 #endif
154970 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154971         "adds	r4, r4, r5\n\t"
154972 #else
154973         "add	r4, r4, r5\n\t"
154974 #endif
154975 #ifdef WOLFSSL_KEIL
154976         "adcs	r2, r2, r6\n\t"
154977 #elif defined(__clang__)
154978         "adcs	r2, r6\n\t"
154979 #else
154980         "adc	r2, r6\n\t"
154981 #endif
154982 #ifdef WOLFSSL_KEIL
154983         "adcs	r3, r3, %[r]\n\t"
154984 #elif defined(__clang__)
154985         "adcs	r3, %[r]\n\t"
154986 #else
154987         "adc	r3, %[r]\n\t"
154988 #endif
154989         "#  A[1] * A[1]\n\t"
154990         "mov	r7, r11\n\t"
154991 #if defined(__clang__) || defined(WOLFSSL_KEIL)
154992         "lsrs	r6, r7, #16\n\t"
154993 #else
154994         "lsr	r6, r7, #16\n\t"
154995 #endif
154996         "uxth	r5, r7\n\t"
154997 #ifdef WOLFSSL_KEIL
154998         "muls	r5, r5, r5\n\t"
154999 #elif defined(__clang__)
155000         "muls	r5, r5\n\t"
155001 #else
155002         "mul	r5, r5\n\t"
155003 #endif
155004 #ifdef WOLFSSL_KEIL
155005         "muls	r6, r6, r6\n\t"
155006 #elif defined(__clang__)
155007         "muls	r6, r6\n\t"
155008 #else
155009         "mul	r6, r6\n\t"
155010 #endif
155011 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155012         "adds	r4, r4, r5\n\t"
155013 #else
155014         "add	r4, r4, r5\n\t"
155015 #endif
155016 #ifdef WOLFSSL_KEIL
155017         "adcs	r2, r2, r6\n\t"
155018 #elif defined(__clang__)
155019         "adcs	r2, r6\n\t"
155020 #else
155021         "adc	r2, r6\n\t"
155022 #endif
155023 #ifdef WOLFSSL_KEIL
155024         "adcs	r3, r3, %[r]\n\t"
155025 #elif defined(__clang__)
155026         "adcs	r3, %[r]\n\t"
155027 #else
155028         "adc	r3, %[r]\n\t"
155029 #endif
155030 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155031         "lsrs	r6, r7, #16\n\t"
155032 #else
155033         "lsr	r6, r7, #16\n\t"
155034 #endif
155035         "uxth	r5, r7\n\t"
155036 #ifdef WOLFSSL_KEIL
155037         "muls	r5, r6, r5\n\t"
155038 #elif defined(__clang__)
155039         "muls	r5, r6\n\t"
155040 #else
155041         "mul	r5, r6\n\t"
155042 #endif
155043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155044         "lsrs	r6, r5, #15\n\t"
155045 #else
155046         "lsr	r6, r5, #15\n\t"
155047 #endif
155048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155049         "lsls	r5, r5, #17\n\t"
155050 #else
155051         "lsl	r5, r5, #17\n\t"
155052 #endif
155053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155054         "adds	r4, r4, r5\n\t"
155055 #else
155056         "add	r4, r4, r5\n\t"
155057 #endif
155058 #ifdef WOLFSSL_KEIL
155059         "adcs	r2, r2, r6\n\t"
155060 #elif defined(__clang__)
155061         "adcs	r2, r6\n\t"
155062 #else
155063         "adc	r2, r6\n\t"
155064 #endif
155065 #ifdef WOLFSSL_KEIL
155066         "adcs	r3, r3, %[r]\n\t"
155067 #elif defined(__clang__)
155068         "adcs	r3, %[r]\n\t"
155069 #else
155070         "adc	r3, %[r]\n\t"
155071 #endif
155072         "str	r4, [sp, #8]\n\t"
155073         "#  A[2] * A[1]\n\t"
155074         "movs	r4, #0\n\t"
155075         "mov	%[a], r9\n\t"
155076         "mov	%[a], r12\n\t"
155077         "uxth	r5, %[a]\n\t"
155078         "uxth	r6, r7\n\t"
155079 #ifdef WOLFSSL_KEIL
155080         "muls	r6, r5, r6\n\t"
155081 #elif defined(__clang__)
155082         "muls	r6, r5\n\t"
155083 #else
155084         "mul	r6, r5\n\t"
155085 #endif
155086 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155087         "adds	r2, r2, r6\n\t"
155088 #else
155089         "add	r2, r2, r6\n\t"
155090 #endif
155091 #ifdef WOLFSSL_KEIL
155092         "adcs	r3, r3, %[r]\n\t"
155093 #elif defined(__clang__)
155094         "adcs	r3, %[r]\n\t"
155095 #else
155096         "adc	r3, %[r]\n\t"
155097 #endif
155098 #ifdef WOLFSSL_KEIL
155099         "adcs	r4, r4, %[r]\n\t"
155100 #elif defined(__clang__)
155101         "adcs	r4, %[r]\n\t"
155102 #else
155103         "adc	r4, %[r]\n\t"
155104 #endif
155105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155106         "adds	r2, r2, r6\n\t"
155107 #else
155108         "add	r2, r2, r6\n\t"
155109 #endif
155110 #ifdef WOLFSSL_KEIL
155111         "adcs	r3, r3, %[r]\n\t"
155112 #elif defined(__clang__)
155113         "adcs	r3, %[r]\n\t"
155114 #else
155115         "adc	r3, %[r]\n\t"
155116 #endif
155117 #ifdef WOLFSSL_KEIL
155118         "adcs	r4, r4, %[r]\n\t"
155119 #elif defined(__clang__)
155120         "adcs	r4, %[r]\n\t"
155121 #else
155122         "adc	r4, %[r]\n\t"
155123 #endif
155124 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155125         "lsrs	r6, r7, #16\n\t"
155126 #else
155127         "lsr	r6, r7, #16\n\t"
155128 #endif
155129 #ifdef WOLFSSL_KEIL
155130         "muls	r5, r6, r5\n\t"
155131 #elif defined(__clang__)
155132         "muls	r5, r6\n\t"
155133 #else
155134         "mul	r5, r6\n\t"
155135 #endif
155136 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155137         "lsrs	r6, r5, #16\n\t"
155138 #else
155139         "lsr	r6, r5, #16\n\t"
155140 #endif
155141 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155142         "lsls	r5, r5, #16\n\t"
155143 #else
155144         "lsl	r5, r5, #16\n\t"
155145 #endif
155146 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155147         "adds	r2, r2, r5\n\t"
155148 #else
155149         "add	r2, r2, r5\n\t"
155150 #endif
155151 #ifdef WOLFSSL_KEIL
155152         "adcs	r3, r3, r6\n\t"
155153 #elif defined(__clang__)
155154         "adcs	r3, r6\n\t"
155155 #else
155156         "adc	r3, r6\n\t"
155157 #endif
155158 #ifdef WOLFSSL_KEIL
155159         "adcs	r4, r4, %[r]\n\t"
155160 #elif defined(__clang__)
155161         "adcs	r4, %[r]\n\t"
155162 #else
155163         "adc	r4, %[r]\n\t"
155164 #endif
155165 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155166         "adds	r2, r2, r5\n\t"
155167 #else
155168         "add	r2, r2, r5\n\t"
155169 #endif
155170 #ifdef WOLFSSL_KEIL
155171         "adcs	r3, r3, r6\n\t"
155172 #elif defined(__clang__)
155173         "adcs	r3, r6\n\t"
155174 #else
155175         "adc	r3, r6\n\t"
155176 #endif
155177 #ifdef WOLFSSL_KEIL
155178         "adcs	r4, r4, %[r]\n\t"
155179 #elif defined(__clang__)
155180         "adcs	r4, %[r]\n\t"
155181 #else
155182         "adc	r4, %[r]\n\t"
155183 #endif
155184 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155185         "lsrs	r5, %[a], #16\n\t"
155186 #else
155187         "lsr	r5, %[a], #16\n\t"
155188 #endif
155189 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155190         "lsrs	r6, r7, #16\n\t"
155191 #else
155192         "lsr	r6, r7, #16\n\t"
155193 #endif
155194 #ifdef WOLFSSL_KEIL
155195         "muls	r6, r5, r6\n\t"
155196 #elif defined(__clang__)
155197         "muls	r6, r5\n\t"
155198 #else
155199         "mul	r6, r5\n\t"
155200 #endif
155201 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155202         "adds	r3, r3, r6\n\t"
155203 #else
155204         "add	r3, r3, r6\n\t"
155205 #endif
155206 #ifdef WOLFSSL_KEIL
155207         "adcs	r4, r4, %[r]\n\t"
155208 #elif defined(__clang__)
155209         "adcs	r4, %[r]\n\t"
155210 #else
155211         "adc	r4, %[r]\n\t"
155212 #endif
155213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155214         "adds	r3, r3, r6\n\t"
155215 #else
155216         "add	r3, r3, r6\n\t"
155217 #endif
155218 #ifdef WOLFSSL_KEIL
155219         "adcs	r4, r4, %[r]\n\t"
155220 #elif defined(__clang__)
155221         "adcs	r4, %[r]\n\t"
155222 #else
155223         "adc	r4, %[r]\n\t"
155224 #endif
155225         "uxth	r6, r7\n\t"
155226 #ifdef WOLFSSL_KEIL
155227         "muls	r5, r6, r5\n\t"
155228 #elif defined(__clang__)
155229         "muls	r5, r6\n\t"
155230 #else
155231         "mul	r5, r6\n\t"
155232 #endif
155233 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155234         "lsrs	r6, r5, #16\n\t"
155235 #else
155236         "lsr	r6, r5, #16\n\t"
155237 #endif
155238 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155239         "lsls	r5, r5, #16\n\t"
155240 #else
155241         "lsl	r5, r5, #16\n\t"
155242 #endif
155243 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155244         "adds	r2, r2, r5\n\t"
155245 #else
155246         "add	r2, r2, r5\n\t"
155247 #endif
155248 #ifdef WOLFSSL_KEIL
155249         "adcs	r3, r3, r6\n\t"
155250 #elif defined(__clang__)
155251         "adcs	r3, r6\n\t"
155252 #else
155253         "adc	r3, r6\n\t"
155254 #endif
155255 #ifdef WOLFSSL_KEIL
155256         "adcs	r4, r4, %[r]\n\t"
155257 #elif defined(__clang__)
155258         "adcs	r4, %[r]\n\t"
155259 #else
155260         "adc	r4, %[r]\n\t"
155261 #endif
155262 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155263         "adds	r2, r2, r5\n\t"
155264 #else
155265         "add	r2, r2, r5\n\t"
155266 #endif
155267 #ifdef WOLFSSL_KEIL
155268         "adcs	r3, r3, r6\n\t"
155269 #elif defined(__clang__)
155270         "adcs	r3, r6\n\t"
155271 #else
155272         "adc	r3, r6\n\t"
155273 #endif
155274 #ifdef WOLFSSL_KEIL
155275         "adcs	r4, r4, %[r]\n\t"
155276 #elif defined(__clang__)
155277         "adcs	r4, %[r]\n\t"
155278 #else
155279         "adc	r4, %[r]\n\t"
155280 #endif
155281         "#  A[3] * A[0]\n\t"
155282         "mov	%[a], r9\n\t"
155283         "mov	r7, r10\n\t"
155284         "mov	%[a], lr\n\t"
155285         "uxth	r5, %[a]\n\t"
155286         "uxth	r6, r7\n\t"
155287 #ifdef WOLFSSL_KEIL
155288         "muls	r6, r5, r6\n\t"
155289 #elif defined(__clang__)
155290         "muls	r6, r5\n\t"
155291 #else
155292         "mul	r6, r5\n\t"
155293 #endif
155294 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155295         "adds	r2, r2, r6\n\t"
155296 #else
155297         "add	r2, r2, r6\n\t"
155298 #endif
155299 #ifdef WOLFSSL_KEIL
155300         "adcs	r3, r3, %[r]\n\t"
155301 #elif defined(__clang__)
155302         "adcs	r3, %[r]\n\t"
155303 #else
155304         "adc	r3, %[r]\n\t"
155305 #endif
155306 #ifdef WOLFSSL_KEIL
155307         "adcs	r4, r4, %[r]\n\t"
155308 #elif defined(__clang__)
155309         "adcs	r4, %[r]\n\t"
155310 #else
155311         "adc	r4, %[r]\n\t"
155312 #endif
155313 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155314         "adds	r2, r2, r6\n\t"
155315 #else
155316         "add	r2, r2, r6\n\t"
155317 #endif
155318 #ifdef WOLFSSL_KEIL
155319         "adcs	r3, r3, %[r]\n\t"
155320 #elif defined(__clang__)
155321         "adcs	r3, %[r]\n\t"
155322 #else
155323         "adc	r3, %[r]\n\t"
155324 #endif
155325 #ifdef WOLFSSL_KEIL
155326         "adcs	r4, r4, %[r]\n\t"
155327 #elif defined(__clang__)
155328         "adcs	r4, %[r]\n\t"
155329 #else
155330         "adc	r4, %[r]\n\t"
155331 #endif
155332 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155333         "lsrs	r6, r7, #16\n\t"
155334 #else
155335         "lsr	r6, r7, #16\n\t"
155336 #endif
155337 #ifdef WOLFSSL_KEIL
155338         "muls	r5, r6, r5\n\t"
155339 #elif defined(__clang__)
155340         "muls	r5, r6\n\t"
155341 #else
155342         "mul	r5, r6\n\t"
155343 #endif
155344 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155345         "lsrs	r6, r5, #16\n\t"
155346 #else
155347         "lsr	r6, r5, #16\n\t"
155348 #endif
155349 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155350         "lsls	r5, r5, #16\n\t"
155351 #else
155352         "lsl	r5, r5, #16\n\t"
155353 #endif
155354 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155355         "adds	r2, r2, r5\n\t"
155356 #else
155357         "add	r2, r2, r5\n\t"
155358 #endif
155359 #ifdef WOLFSSL_KEIL
155360         "adcs	r3, r3, r6\n\t"
155361 #elif defined(__clang__)
155362         "adcs	r3, r6\n\t"
155363 #else
155364         "adc	r3, r6\n\t"
155365 #endif
155366 #ifdef WOLFSSL_KEIL
155367         "adcs	r4, r4, %[r]\n\t"
155368 #elif defined(__clang__)
155369         "adcs	r4, %[r]\n\t"
155370 #else
155371         "adc	r4, %[r]\n\t"
155372 #endif
155373 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155374         "adds	r2, r2, r5\n\t"
155375 #else
155376         "add	r2, r2, r5\n\t"
155377 #endif
155378 #ifdef WOLFSSL_KEIL
155379         "adcs	r3, r3, r6\n\t"
155380 #elif defined(__clang__)
155381         "adcs	r3, r6\n\t"
155382 #else
155383         "adc	r3, r6\n\t"
155384 #endif
155385 #ifdef WOLFSSL_KEIL
155386         "adcs	r4, r4, %[r]\n\t"
155387 #elif defined(__clang__)
155388         "adcs	r4, %[r]\n\t"
155389 #else
155390         "adc	r4, %[r]\n\t"
155391 #endif
155392 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155393         "lsrs	r5, %[a], #16\n\t"
155394 #else
155395         "lsr	r5, %[a], #16\n\t"
155396 #endif
155397 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155398         "lsrs	r6, r7, #16\n\t"
155399 #else
155400         "lsr	r6, r7, #16\n\t"
155401 #endif
155402 #ifdef WOLFSSL_KEIL
155403         "muls	r6, r5, r6\n\t"
155404 #elif defined(__clang__)
155405         "muls	r6, r5\n\t"
155406 #else
155407         "mul	r6, r5\n\t"
155408 #endif
155409 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155410         "adds	r3, r3, r6\n\t"
155411 #else
155412         "add	r3, r3, r6\n\t"
155413 #endif
155414 #ifdef WOLFSSL_KEIL
155415         "adcs	r4, r4, %[r]\n\t"
155416 #elif defined(__clang__)
155417         "adcs	r4, %[r]\n\t"
155418 #else
155419         "adc	r4, %[r]\n\t"
155420 #endif
155421 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155422         "adds	r3, r3, r6\n\t"
155423 #else
155424         "add	r3, r3, r6\n\t"
155425 #endif
155426 #ifdef WOLFSSL_KEIL
155427         "adcs	r4, r4, %[r]\n\t"
155428 #elif defined(__clang__)
155429         "adcs	r4, %[r]\n\t"
155430 #else
155431         "adc	r4, %[r]\n\t"
155432 #endif
155433         "uxth	r6, r7\n\t"
155434 #ifdef WOLFSSL_KEIL
155435         "muls	r5, r6, r5\n\t"
155436 #elif defined(__clang__)
155437         "muls	r5, r6\n\t"
155438 #else
155439         "mul	r5, r6\n\t"
155440 #endif
155441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155442         "lsrs	r6, r5, #16\n\t"
155443 #else
155444         "lsr	r6, r5, #16\n\t"
155445 #endif
155446 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155447         "lsls	r5, r5, #16\n\t"
155448 #else
155449         "lsl	r5, r5, #16\n\t"
155450 #endif
155451 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155452         "adds	r2, r2, r5\n\t"
155453 #else
155454         "add	r2, r2, r5\n\t"
155455 #endif
155456 #ifdef WOLFSSL_KEIL
155457         "adcs	r3, r3, r6\n\t"
155458 #elif defined(__clang__)
155459         "adcs	r3, r6\n\t"
155460 #else
155461         "adc	r3, r6\n\t"
155462 #endif
155463 #ifdef WOLFSSL_KEIL
155464         "adcs	r4, r4, %[r]\n\t"
155465 #elif defined(__clang__)
155466         "adcs	r4, %[r]\n\t"
155467 #else
155468         "adc	r4, %[r]\n\t"
155469 #endif
155470 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155471         "adds	r2, r2, r5\n\t"
155472 #else
155473         "add	r2, r2, r5\n\t"
155474 #endif
155475 #ifdef WOLFSSL_KEIL
155476         "adcs	r3, r3, r6\n\t"
155477 #elif defined(__clang__)
155478         "adcs	r3, r6\n\t"
155479 #else
155480         "adc	r3, r6\n\t"
155481 #endif
155482 #ifdef WOLFSSL_KEIL
155483         "adcs	r4, r4, %[r]\n\t"
155484 #elif defined(__clang__)
155485         "adcs	r4, %[r]\n\t"
155486 #else
155487         "adc	r4, %[r]\n\t"
155488 #endif
155489         "str	r2, [sp, #12]\n\t"
155490         "#  A[4] * A[0]\n\t"
155491         "movs	r2, #0\n\t"
155492         "mov	%[a], r9\n\t"
155493         "ldr	%[a], [%[a], #16]\n\t"
155494         "uxth	r5, %[a]\n\t"
155495         "uxth	r6, r7\n\t"
155496 #ifdef WOLFSSL_KEIL
155497         "muls	r6, r5, r6\n\t"
155498 #elif defined(__clang__)
155499         "muls	r6, r5\n\t"
155500 #else
155501         "mul	r6, r5\n\t"
155502 #endif
155503 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155504         "adds	r3, r3, r6\n\t"
155505 #else
155506         "add	r3, r3, r6\n\t"
155507 #endif
155508 #ifdef WOLFSSL_KEIL
155509         "adcs	r4, r4, %[r]\n\t"
155510 #elif defined(__clang__)
155511         "adcs	r4, %[r]\n\t"
155512 #else
155513         "adc	r4, %[r]\n\t"
155514 #endif
155515 #ifdef WOLFSSL_KEIL
155516         "adcs	r2, r2, %[r]\n\t"
155517 #elif defined(__clang__)
155518         "adcs	r2, %[r]\n\t"
155519 #else
155520         "adc	r2, %[r]\n\t"
155521 #endif
155522 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155523         "adds	r3, r3, r6\n\t"
155524 #else
155525         "add	r3, r3, r6\n\t"
155526 #endif
155527 #ifdef WOLFSSL_KEIL
155528         "adcs	r4, r4, %[r]\n\t"
155529 #elif defined(__clang__)
155530         "adcs	r4, %[r]\n\t"
155531 #else
155532         "adc	r4, %[r]\n\t"
155533 #endif
155534 #ifdef WOLFSSL_KEIL
155535         "adcs	r2, r2, %[r]\n\t"
155536 #elif defined(__clang__)
155537         "adcs	r2, %[r]\n\t"
155538 #else
155539         "adc	r2, %[r]\n\t"
155540 #endif
155541 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155542         "lsrs	r6, r7, #16\n\t"
155543 #else
155544         "lsr	r6, r7, #16\n\t"
155545 #endif
155546 #ifdef WOLFSSL_KEIL
155547         "muls	r5, r6, r5\n\t"
155548 #elif defined(__clang__)
155549         "muls	r5, r6\n\t"
155550 #else
155551         "mul	r5, r6\n\t"
155552 #endif
155553 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155554         "lsrs	r6, r5, #16\n\t"
155555 #else
155556         "lsr	r6, r5, #16\n\t"
155557 #endif
155558 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155559         "lsls	r5, r5, #16\n\t"
155560 #else
155561         "lsl	r5, r5, #16\n\t"
155562 #endif
155563 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155564         "adds	r3, r3, r5\n\t"
155565 #else
155566         "add	r3, r3, r5\n\t"
155567 #endif
155568 #ifdef WOLFSSL_KEIL
155569         "adcs	r4, r4, r6\n\t"
155570 #elif defined(__clang__)
155571         "adcs	r4, r6\n\t"
155572 #else
155573         "adc	r4, r6\n\t"
155574 #endif
155575 #ifdef WOLFSSL_KEIL
155576         "adcs	r2, r2, %[r]\n\t"
155577 #elif defined(__clang__)
155578         "adcs	r2, %[r]\n\t"
155579 #else
155580         "adc	r2, %[r]\n\t"
155581 #endif
155582 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155583         "adds	r3, r3, r5\n\t"
155584 #else
155585         "add	r3, r3, r5\n\t"
155586 #endif
155587 #ifdef WOLFSSL_KEIL
155588         "adcs	r4, r4, r6\n\t"
155589 #elif defined(__clang__)
155590         "adcs	r4, r6\n\t"
155591 #else
155592         "adc	r4, r6\n\t"
155593 #endif
155594 #ifdef WOLFSSL_KEIL
155595         "adcs	r2, r2, %[r]\n\t"
155596 #elif defined(__clang__)
155597         "adcs	r2, %[r]\n\t"
155598 #else
155599         "adc	r2, %[r]\n\t"
155600 #endif
155601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155602         "lsrs	r5, %[a], #16\n\t"
155603 #else
155604         "lsr	r5, %[a], #16\n\t"
155605 #endif
155606 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155607         "lsrs	r6, r7, #16\n\t"
155608 #else
155609         "lsr	r6, r7, #16\n\t"
155610 #endif
155611 #ifdef WOLFSSL_KEIL
155612         "muls	r6, r5, r6\n\t"
155613 #elif defined(__clang__)
155614         "muls	r6, r5\n\t"
155615 #else
155616         "mul	r6, r5\n\t"
155617 #endif
155618 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155619         "adds	r4, r4, r6\n\t"
155620 #else
155621         "add	r4, r4, r6\n\t"
155622 #endif
155623 #ifdef WOLFSSL_KEIL
155624         "adcs	r2, r2, %[r]\n\t"
155625 #elif defined(__clang__)
155626         "adcs	r2, %[r]\n\t"
155627 #else
155628         "adc	r2, %[r]\n\t"
155629 #endif
155630 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155631         "adds	r4, r4, r6\n\t"
155632 #else
155633         "add	r4, r4, r6\n\t"
155634 #endif
155635 #ifdef WOLFSSL_KEIL
155636         "adcs	r2, r2, %[r]\n\t"
155637 #elif defined(__clang__)
155638         "adcs	r2, %[r]\n\t"
155639 #else
155640         "adc	r2, %[r]\n\t"
155641 #endif
155642         "uxth	r6, r7\n\t"
155643 #ifdef WOLFSSL_KEIL
155644         "muls	r5, r6, r5\n\t"
155645 #elif defined(__clang__)
155646         "muls	r5, r6\n\t"
155647 #else
155648         "mul	r5, r6\n\t"
155649 #endif
155650 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155651         "lsrs	r6, r5, #16\n\t"
155652 #else
155653         "lsr	r6, r5, #16\n\t"
155654 #endif
155655 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155656         "lsls	r5, r5, #16\n\t"
155657 #else
155658         "lsl	r5, r5, #16\n\t"
155659 #endif
155660 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155661         "adds	r3, r3, r5\n\t"
155662 #else
155663         "add	r3, r3, r5\n\t"
155664 #endif
155665 #ifdef WOLFSSL_KEIL
155666         "adcs	r4, r4, r6\n\t"
155667 #elif defined(__clang__)
155668         "adcs	r4, r6\n\t"
155669 #else
155670         "adc	r4, r6\n\t"
155671 #endif
155672 #ifdef WOLFSSL_KEIL
155673         "adcs	r2, r2, %[r]\n\t"
155674 #elif defined(__clang__)
155675         "adcs	r2, %[r]\n\t"
155676 #else
155677         "adc	r2, %[r]\n\t"
155678 #endif
155679 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155680         "adds	r3, r3, r5\n\t"
155681 #else
155682         "add	r3, r3, r5\n\t"
155683 #endif
155684 #ifdef WOLFSSL_KEIL
155685         "adcs	r4, r4, r6\n\t"
155686 #elif defined(__clang__)
155687         "adcs	r4, r6\n\t"
155688 #else
155689         "adc	r4, r6\n\t"
155690 #endif
155691 #ifdef WOLFSSL_KEIL
155692         "adcs	r2, r2, %[r]\n\t"
155693 #elif defined(__clang__)
155694         "adcs	r2, %[r]\n\t"
155695 #else
155696         "adc	r2, %[r]\n\t"
155697 #endif
155698         "#  A[3] * A[1]\n\t"
155699         "mov	%[a], r9\n\t"
155700         "mov	r7, r11\n\t"
155701         "mov	%[a], lr\n\t"
155702         "uxth	r5, %[a]\n\t"
155703         "uxth	r6, r7\n\t"
155704 #ifdef WOLFSSL_KEIL
155705         "muls	r6, r5, r6\n\t"
155706 #elif defined(__clang__)
155707         "muls	r6, r5\n\t"
155708 #else
155709         "mul	r6, r5\n\t"
155710 #endif
155711 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155712         "adds	r3, r3, r6\n\t"
155713 #else
155714         "add	r3, r3, r6\n\t"
155715 #endif
155716 #ifdef WOLFSSL_KEIL
155717         "adcs	r4, r4, %[r]\n\t"
155718 #elif defined(__clang__)
155719         "adcs	r4, %[r]\n\t"
155720 #else
155721         "adc	r4, %[r]\n\t"
155722 #endif
155723 #ifdef WOLFSSL_KEIL
155724         "adcs	r2, r2, %[r]\n\t"
155725 #elif defined(__clang__)
155726         "adcs	r2, %[r]\n\t"
155727 #else
155728         "adc	r2, %[r]\n\t"
155729 #endif
155730 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155731         "adds	r3, r3, r6\n\t"
155732 #else
155733         "add	r3, r3, r6\n\t"
155734 #endif
155735 #ifdef WOLFSSL_KEIL
155736         "adcs	r4, r4, %[r]\n\t"
155737 #elif defined(__clang__)
155738         "adcs	r4, %[r]\n\t"
155739 #else
155740         "adc	r4, %[r]\n\t"
155741 #endif
155742 #ifdef WOLFSSL_KEIL
155743         "adcs	r2, r2, %[r]\n\t"
155744 #elif defined(__clang__)
155745         "adcs	r2, %[r]\n\t"
155746 #else
155747         "adc	r2, %[r]\n\t"
155748 #endif
155749 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155750         "lsrs	r6, r7, #16\n\t"
155751 #else
155752         "lsr	r6, r7, #16\n\t"
155753 #endif
155754 #ifdef WOLFSSL_KEIL
155755         "muls	r5, r6, r5\n\t"
155756 #elif defined(__clang__)
155757         "muls	r5, r6\n\t"
155758 #else
155759         "mul	r5, r6\n\t"
155760 #endif
155761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155762         "lsrs	r6, r5, #16\n\t"
155763 #else
155764         "lsr	r6, r5, #16\n\t"
155765 #endif
155766 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155767         "lsls	r5, r5, #16\n\t"
155768 #else
155769         "lsl	r5, r5, #16\n\t"
155770 #endif
155771 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155772         "adds	r3, r3, r5\n\t"
155773 #else
155774         "add	r3, r3, r5\n\t"
155775 #endif
155776 #ifdef WOLFSSL_KEIL
155777         "adcs	r4, r4, r6\n\t"
155778 #elif defined(__clang__)
155779         "adcs	r4, r6\n\t"
155780 #else
155781         "adc	r4, r6\n\t"
155782 #endif
155783 #ifdef WOLFSSL_KEIL
155784         "adcs	r2, r2, %[r]\n\t"
155785 #elif defined(__clang__)
155786         "adcs	r2, %[r]\n\t"
155787 #else
155788         "adc	r2, %[r]\n\t"
155789 #endif
155790 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155791         "adds	r3, r3, r5\n\t"
155792 #else
155793         "add	r3, r3, r5\n\t"
155794 #endif
155795 #ifdef WOLFSSL_KEIL
155796         "adcs	r4, r4, r6\n\t"
155797 #elif defined(__clang__)
155798         "adcs	r4, r6\n\t"
155799 #else
155800         "adc	r4, r6\n\t"
155801 #endif
155802 #ifdef WOLFSSL_KEIL
155803         "adcs	r2, r2, %[r]\n\t"
155804 #elif defined(__clang__)
155805         "adcs	r2, %[r]\n\t"
155806 #else
155807         "adc	r2, %[r]\n\t"
155808 #endif
155809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155810         "lsrs	r5, %[a], #16\n\t"
155811 #else
155812         "lsr	r5, %[a], #16\n\t"
155813 #endif
155814 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155815         "lsrs	r6, r7, #16\n\t"
155816 #else
155817         "lsr	r6, r7, #16\n\t"
155818 #endif
155819 #ifdef WOLFSSL_KEIL
155820         "muls	r6, r5, r6\n\t"
155821 #elif defined(__clang__)
155822         "muls	r6, r5\n\t"
155823 #else
155824         "mul	r6, r5\n\t"
155825 #endif
155826 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155827         "adds	r4, r4, r6\n\t"
155828 #else
155829         "add	r4, r4, r6\n\t"
155830 #endif
155831 #ifdef WOLFSSL_KEIL
155832         "adcs	r2, r2, %[r]\n\t"
155833 #elif defined(__clang__)
155834         "adcs	r2, %[r]\n\t"
155835 #else
155836         "adc	r2, %[r]\n\t"
155837 #endif
155838 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155839         "adds	r4, r4, r6\n\t"
155840 #else
155841         "add	r4, r4, r6\n\t"
155842 #endif
155843 #ifdef WOLFSSL_KEIL
155844         "adcs	r2, r2, %[r]\n\t"
155845 #elif defined(__clang__)
155846         "adcs	r2, %[r]\n\t"
155847 #else
155848         "adc	r2, %[r]\n\t"
155849 #endif
155850         "uxth	r6, r7\n\t"
155851 #ifdef WOLFSSL_KEIL
155852         "muls	r5, r6, r5\n\t"
155853 #elif defined(__clang__)
155854         "muls	r5, r6\n\t"
155855 #else
155856         "mul	r5, r6\n\t"
155857 #endif
155858 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155859         "lsrs	r6, r5, #16\n\t"
155860 #else
155861         "lsr	r6, r5, #16\n\t"
155862 #endif
155863 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155864         "lsls	r5, r5, #16\n\t"
155865 #else
155866         "lsl	r5, r5, #16\n\t"
155867 #endif
155868 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155869         "adds	r3, r3, r5\n\t"
155870 #else
155871         "add	r3, r3, r5\n\t"
155872 #endif
155873 #ifdef WOLFSSL_KEIL
155874         "adcs	r4, r4, r6\n\t"
155875 #elif defined(__clang__)
155876         "adcs	r4, r6\n\t"
155877 #else
155878         "adc	r4, r6\n\t"
155879 #endif
155880 #ifdef WOLFSSL_KEIL
155881         "adcs	r2, r2, %[r]\n\t"
155882 #elif defined(__clang__)
155883         "adcs	r2, %[r]\n\t"
155884 #else
155885         "adc	r2, %[r]\n\t"
155886 #endif
155887 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155888         "adds	r3, r3, r5\n\t"
155889 #else
155890         "add	r3, r3, r5\n\t"
155891 #endif
155892 #ifdef WOLFSSL_KEIL
155893         "adcs	r4, r4, r6\n\t"
155894 #elif defined(__clang__)
155895         "adcs	r4, r6\n\t"
155896 #else
155897         "adc	r4, r6\n\t"
155898 #endif
155899 #ifdef WOLFSSL_KEIL
155900         "adcs	r2, r2, %[r]\n\t"
155901 #elif defined(__clang__)
155902         "adcs	r2, %[r]\n\t"
155903 #else
155904         "adc	r2, %[r]\n\t"
155905 #endif
155906         "#  A[2] * A[2]\n\t"
155907         "mov	r7, r12\n\t"
155908 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155909         "lsrs	r6, r7, #16\n\t"
155910 #else
155911         "lsr	r6, r7, #16\n\t"
155912 #endif
155913         "uxth	r5, r7\n\t"
155914 #ifdef WOLFSSL_KEIL
155915         "muls	r5, r5, r5\n\t"
155916 #elif defined(__clang__)
155917         "muls	r5, r5\n\t"
155918 #else
155919         "mul	r5, r5\n\t"
155920 #endif
155921 #ifdef WOLFSSL_KEIL
155922         "muls	r6, r6, r6\n\t"
155923 #elif defined(__clang__)
155924         "muls	r6, r6\n\t"
155925 #else
155926         "mul	r6, r6\n\t"
155927 #endif
155928 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155929         "adds	r3, r3, r5\n\t"
155930 #else
155931         "add	r3, r3, r5\n\t"
155932 #endif
155933 #ifdef WOLFSSL_KEIL
155934         "adcs	r4, r4, r6\n\t"
155935 #elif defined(__clang__)
155936         "adcs	r4, r6\n\t"
155937 #else
155938         "adc	r4, r6\n\t"
155939 #endif
155940 #ifdef WOLFSSL_KEIL
155941         "adcs	r2, r2, %[r]\n\t"
155942 #elif defined(__clang__)
155943         "adcs	r2, %[r]\n\t"
155944 #else
155945         "adc	r2, %[r]\n\t"
155946 #endif
155947 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155948         "lsrs	r6, r7, #16\n\t"
155949 #else
155950         "lsr	r6, r7, #16\n\t"
155951 #endif
155952         "uxth	r5, r7\n\t"
155953 #ifdef WOLFSSL_KEIL
155954         "muls	r5, r6, r5\n\t"
155955 #elif defined(__clang__)
155956         "muls	r5, r6\n\t"
155957 #else
155958         "mul	r5, r6\n\t"
155959 #endif
155960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155961         "lsrs	r6, r5, #15\n\t"
155962 #else
155963         "lsr	r6, r5, #15\n\t"
155964 #endif
155965 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155966         "lsls	r5, r5, #17\n\t"
155967 #else
155968         "lsl	r5, r5, #17\n\t"
155969 #endif
155970 #if defined(__clang__) || defined(WOLFSSL_KEIL)
155971         "adds	r3, r3, r5\n\t"
155972 #else
155973         "add	r3, r3, r5\n\t"
155974 #endif
155975 #ifdef WOLFSSL_KEIL
155976         "adcs	r4, r4, r6\n\t"
155977 #elif defined(__clang__)
155978         "adcs	r4, r6\n\t"
155979 #else
155980         "adc	r4, r6\n\t"
155981 #endif
155982 #ifdef WOLFSSL_KEIL
155983         "adcs	r2, r2, %[r]\n\t"
155984 #elif defined(__clang__)
155985         "adcs	r2, %[r]\n\t"
155986 #else
155987         "adc	r2, %[r]\n\t"
155988 #endif
155989         "str	r3, [sp, #16]\n\t"
155990         "#  A[3] * A[2]\n\t"
155991         "movs	r3, #0\n\t"
155992         "mov	%[a], r9\n\t"
155993         "mov	%[a], lr\n\t"
155994         "uxth	r5, %[a]\n\t"
155995         "uxth	r6, r7\n\t"
155996 #ifdef WOLFSSL_KEIL
155997         "muls	r6, r5, r6\n\t"
155998 #elif defined(__clang__)
155999         "muls	r6, r5\n\t"
156000 #else
156001         "mul	r6, r5\n\t"
156002 #endif
156003 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156004         "adds	r4, r4, r6\n\t"
156005 #else
156006         "add	r4, r4, r6\n\t"
156007 #endif
156008 #ifdef WOLFSSL_KEIL
156009         "adcs	r2, r2, %[r]\n\t"
156010 #elif defined(__clang__)
156011         "adcs	r2, %[r]\n\t"
156012 #else
156013         "adc	r2, %[r]\n\t"
156014 #endif
156015 #ifdef WOLFSSL_KEIL
156016         "adcs	r3, r3, %[r]\n\t"
156017 #elif defined(__clang__)
156018         "adcs	r3, %[r]\n\t"
156019 #else
156020         "adc	r3, %[r]\n\t"
156021 #endif
156022 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156023         "adds	r4, r4, r6\n\t"
156024 #else
156025         "add	r4, r4, r6\n\t"
156026 #endif
156027 #ifdef WOLFSSL_KEIL
156028         "adcs	r2, r2, %[r]\n\t"
156029 #elif defined(__clang__)
156030         "adcs	r2, %[r]\n\t"
156031 #else
156032         "adc	r2, %[r]\n\t"
156033 #endif
156034 #ifdef WOLFSSL_KEIL
156035         "adcs	r3, r3, %[r]\n\t"
156036 #elif defined(__clang__)
156037         "adcs	r3, %[r]\n\t"
156038 #else
156039         "adc	r3, %[r]\n\t"
156040 #endif
156041 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156042         "lsrs	r6, r7, #16\n\t"
156043 #else
156044         "lsr	r6, r7, #16\n\t"
156045 #endif
156046 #ifdef WOLFSSL_KEIL
156047         "muls	r5, r6, r5\n\t"
156048 #elif defined(__clang__)
156049         "muls	r5, r6\n\t"
156050 #else
156051         "mul	r5, r6\n\t"
156052 #endif
156053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156054         "lsrs	r6, r5, #16\n\t"
156055 #else
156056         "lsr	r6, r5, #16\n\t"
156057 #endif
156058 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156059         "lsls	r5, r5, #16\n\t"
156060 #else
156061         "lsl	r5, r5, #16\n\t"
156062 #endif
156063 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156064         "adds	r4, r4, r5\n\t"
156065 #else
156066         "add	r4, r4, r5\n\t"
156067 #endif
156068 #ifdef WOLFSSL_KEIL
156069         "adcs	r2, r2, r6\n\t"
156070 #elif defined(__clang__)
156071         "adcs	r2, r6\n\t"
156072 #else
156073         "adc	r2, r6\n\t"
156074 #endif
156075 #ifdef WOLFSSL_KEIL
156076         "adcs	r3, r3, %[r]\n\t"
156077 #elif defined(__clang__)
156078         "adcs	r3, %[r]\n\t"
156079 #else
156080         "adc	r3, %[r]\n\t"
156081 #endif
156082 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156083         "adds	r4, r4, r5\n\t"
156084 #else
156085         "add	r4, r4, r5\n\t"
156086 #endif
156087 #ifdef WOLFSSL_KEIL
156088         "adcs	r2, r2, r6\n\t"
156089 #elif defined(__clang__)
156090         "adcs	r2, r6\n\t"
156091 #else
156092         "adc	r2, r6\n\t"
156093 #endif
156094 #ifdef WOLFSSL_KEIL
156095         "adcs	r3, r3, %[r]\n\t"
156096 #elif defined(__clang__)
156097         "adcs	r3, %[r]\n\t"
156098 #else
156099         "adc	r3, %[r]\n\t"
156100 #endif
156101 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156102         "lsrs	r5, %[a], #16\n\t"
156103 #else
156104         "lsr	r5, %[a], #16\n\t"
156105 #endif
156106 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156107         "lsrs	r6, r7, #16\n\t"
156108 #else
156109         "lsr	r6, r7, #16\n\t"
156110 #endif
156111 #ifdef WOLFSSL_KEIL
156112         "muls	r6, r5, r6\n\t"
156113 #elif defined(__clang__)
156114         "muls	r6, r5\n\t"
156115 #else
156116         "mul	r6, r5\n\t"
156117 #endif
156118 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156119         "adds	r2, r2, r6\n\t"
156120 #else
156121         "add	r2, r2, r6\n\t"
156122 #endif
156123 #ifdef WOLFSSL_KEIL
156124         "adcs	r3, r3, %[r]\n\t"
156125 #elif defined(__clang__)
156126         "adcs	r3, %[r]\n\t"
156127 #else
156128         "adc	r3, %[r]\n\t"
156129 #endif
156130 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156131         "adds	r2, r2, r6\n\t"
156132 #else
156133         "add	r2, r2, r6\n\t"
156134 #endif
156135 #ifdef WOLFSSL_KEIL
156136         "adcs	r3, r3, %[r]\n\t"
156137 #elif defined(__clang__)
156138         "adcs	r3, %[r]\n\t"
156139 #else
156140         "adc	r3, %[r]\n\t"
156141 #endif
156142         "uxth	r6, r7\n\t"
156143 #ifdef WOLFSSL_KEIL
156144         "muls	r5, r6, r5\n\t"
156145 #elif defined(__clang__)
156146         "muls	r5, r6\n\t"
156147 #else
156148         "mul	r5, r6\n\t"
156149 #endif
156150 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156151         "lsrs	r6, r5, #16\n\t"
156152 #else
156153         "lsr	r6, r5, #16\n\t"
156154 #endif
156155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156156         "lsls	r5, r5, #16\n\t"
156157 #else
156158         "lsl	r5, r5, #16\n\t"
156159 #endif
156160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156161         "adds	r4, r4, r5\n\t"
156162 #else
156163         "add	r4, r4, r5\n\t"
156164 #endif
156165 #ifdef WOLFSSL_KEIL
156166         "adcs	r2, r2, r6\n\t"
156167 #elif defined(__clang__)
156168         "adcs	r2, r6\n\t"
156169 #else
156170         "adc	r2, r6\n\t"
156171 #endif
156172 #ifdef WOLFSSL_KEIL
156173         "adcs	r3, r3, %[r]\n\t"
156174 #elif defined(__clang__)
156175         "adcs	r3, %[r]\n\t"
156176 #else
156177         "adc	r3, %[r]\n\t"
156178 #endif
156179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156180         "adds	r4, r4, r5\n\t"
156181 #else
156182         "add	r4, r4, r5\n\t"
156183 #endif
156184 #ifdef WOLFSSL_KEIL
156185         "adcs	r2, r2, r6\n\t"
156186 #elif defined(__clang__)
156187         "adcs	r2, r6\n\t"
156188 #else
156189         "adc	r2, r6\n\t"
156190 #endif
156191 #ifdef WOLFSSL_KEIL
156192         "adcs	r3, r3, %[r]\n\t"
156193 #elif defined(__clang__)
156194         "adcs	r3, %[r]\n\t"
156195 #else
156196         "adc	r3, %[r]\n\t"
156197 #endif
156198         "#  A[4] * A[1]\n\t"
156199         "mov	%[a], r9\n\t"
156200         "mov	r7, r11\n\t"
156201         "ldr	%[a], [%[a], #16]\n\t"
156202         "uxth	r5, %[a]\n\t"
156203         "uxth	r6, r7\n\t"
156204 #ifdef WOLFSSL_KEIL
156205         "muls	r6, r5, r6\n\t"
156206 #elif defined(__clang__)
156207         "muls	r6, r5\n\t"
156208 #else
156209         "mul	r6, r5\n\t"
156210 #endif
156211 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156212         "adds	r4, r4, r6\n\t"
156213 #else
156214         "add	r4, r4, r6\n\t"
156215 #endif
156216 #ifdef WOLFSSL_KEIL
156217         "adcs	r2, r2, %[r]\n\t"
156218 #elif defined(__clang__)
156219         "adcs	r2, %[r]\n\t"
156220 #else
156221         "adc	r2, %[r]\n\t"
156222 #endif
156223 #ifdef WOLFSSL_KEIL
156224         "adcs	r3, r3, %[r]\n\t"
156225 #elif defined(__clang__)
156226         "adcs	r3, %[r]\n\t"
156227 #else
156228         "adc	r3, %[r]\n\t"
156229 #endif
156230 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156231         "adds	r4, r4, r6\n\t"
156232 #else
156233         "add	r4, r4, r6\n\t"
156234 #endif
156235 #ifdef WOLFSSL_KEIL
156236         "adcs	r2, r2, %[r]\n\t"
156237 #elif defined(__clang__)
156238         "adcs	r2, %[r]\n\t"
156239 #else
156240         "adc	r2, %[r]\n\t"
156241 #endif
156242 #ifdef WOLFSSL_KEIL
156243         "adcs	r3, r3, %[r]\n\t"
156244 #elif defined(__clang__)
156245         "adcs	r3, %[r]\n\t"
156246 #else
156247         "adc	r3, %[r]\n\t"
156248 #endif
156249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156250         "lsrs	r6, r7, #16\n\t"
156251 #else
156252         "lsr	r6, r7, #16\n\t"
156253 #endif
156254 #ifdef WOLFSSL_KEIL
156255         "muls	r5, r6, r5\n\t"
156256 #elif defined(__clang__)
156257         "muls	r5, r6\n\t"
156258 #else
156259         "mul	r5, r6\n\t"
156260 #endif
156261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156262         "lsrs	r6, r5, #16\n\t"
156263 #else
156264         "lsr	r6, r5, #16\n\t"
156265 #endif
156266 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156267         "lsls	r5, r5, #16\n\t"
156268 #else
156269         "lsl	r5, r5, #16\n\t"
156270 #endif
156271 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156272         "adds	r4, r4, r5\n\t"
156273 #else
156274         "add	r4, r4, r5\n\t"
156275 #endif
156276 #ifdef WOLFSSL_KEIL
156277         "adcs	r2, r2, r6\n\t"
156278 #elif defined(__clang__)
156279         "adcs	r2, r6\n\t"
156280 #else
156281         "adc	r2, r6\n\t"
156282 #endif
156283 #ifdef WOLFSSL_KEIL
156284         "adcs	r3, r3, %[r]\n\t"
156285 #elif defined(__clang__)
156286         "adcs	r3, %[r]\n\t"
156287 #else
156288         "adc	r3, %[r]\n\t"
156289 #endif
156290 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156291         "adds	r4, r4, r5\n\t"
156292 #else
156293         "add	r4, r4, r5\n\t"
156294 #endif
156295 #ifdef WOLFSSL_KEIL
156296         "adcs	r2, r2, r6\n\t"
156297 #elif defined(__clang__)
156298         "adcs	r2, r6\n\t"
156299 #else
156300         "adc	r2, r6\n\t"
156301 #endif
156302 #ifdef WOLFSSL_KEIL
156303         "adcs	r3, r3, %[r]\n\t"
156304 #elif defined(__clang__)
156305         "adcs	r3, %[r]\n\t"
156306 #else
156307         "adc	r3, %[r]\n\t"
156308 #endif
156309 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156310         "lsrs	r5, %[a], #16\n\t"
156311 #else
156312         "lsr	r5, %[a], #16\n\t"
156313 #endif
156314 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156315         "lsrs	r6, r7, #16\n\t"
156316 #else
156317         "lsr	r6, r7, #16\n\t"
156318 #endif
156319 #ifdef WOLFSSL_KEIL
156320         "muls	r6, r5, r6\n\t"
156321 #elif defined(__clang__)
156322         "muls	r6, r5\n\t"
156323 #else
156324         "mul	r6, r5\n\t"
156325 #endif
156326 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156327         "adds	r2, r2, r6\n\t"
156328 #else
156329         "add	r2, r2, r6\n\t"
156330 #endif
156331 #ifdef WOLFSSL_KEIL
156332         "adcs	r3, r3, %[r]\n\t"
156333 #elif defined(__clang__)
156334         "adcs	r3, %[r]\n\t"
156335 #else
156336         "adc	r3, %[r]\n\t"
156337 #endif
156338 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156339         "adds	r2, r2, r6\n\t"
156340 #else
156341         "add	r2, r2, r6\n\t"
156342 #endif
156343 #ifdef WOLFSSL_KEIL
156344         "adcs	r3, r3, %[r]\n\t"
156345 #elif defined(__clang__)
156346         "adcs	r3, %[r]\n\t"
156347 #else
156348         "adc	r3, %[r]\n\t"
156349 #endif
156350         "uxth	r6, r7\n\t"
156351 #ifdef WOLFSSL_KEIL
156352         "muls	r5, r6, r5\n\t"
156353 #elif defined(__clang__)
156354         "muls	r5, r6\n\t"
156355 #else
156356         "mul	r5, r6\n\t"
156357 #endif
156358 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156359         "lsrs	r6, r5, #16\n\t"
156360 #else
156361         "lsr	r6, r5, #16\n\t"
156362 #endif
156363 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156364         "lsls	r5, r5, #16\n\t"
156365 #else
156366         "lsl	r5, r5, #16\n\t"
156367 #endif
156368 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156369         "adds	r4, r4, r5\n\t"
156370 #else
156371         "add	r4, r4, r5\n\t"
156372 #endif
156373 #ifdef WOLFSSL_KEIL
156374         "adcs	r2, r2, r6\n\t"
156375 #elif defined(__clang__)
156376         "adcs	r2, r6\n\t"
156377 #else
156378         "adc	r2, r6\n\t"
156379 #endif
156380 #ifdef WOLFSSL_KEIL
156381         "adcs	r3, r3, %[r]\n\t"
156382 #elif defined(__clang__)
156383         "adcs	r3, %[r]\n\t"
156384 #else
156385         "adc	r3, %[r]\n\t"
156386 #endif
156387 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156388         "adds	r4, r4, r5\n\t"
156389 #else
156390         "add	r4, r4, r5\n\t"
156391 #endif
156392 #ifdef WOLFSSL_KEIL
156393         "adcs	r2, r2, r6\n\t"
156394 #elif defined(__clang__)
156395         "adcs	r2, r6\n\t"
156396 #else
156397         "adc	r2, r6\n\t"
156398 #endif
156399 #ifdef WOLFSSL_KEIL
156400         "adcs	r3, r3, %[r]\n\t"
156401 #elif defined(__clang__)
156402         "adcs	r3, %[r]\n\t"
156403 #else
156404         "adc	r3, %[r]\n\t"
156405 #endif
156406         "#  A[5] * A[0]\n\t"
156407         "mov	%[a], r9\n\t"
156408         "mov	r7, r10\n\t"
156409         "ldr	%[a], [%[a], #20]\n\t"
156410         "uxth	r5, %[a]\n\t"
156411         "uxth	r6, r7\n\t"
156412 #ifdef WOLFSSL_KEIL
156413         "muls	r6, r5, r6\n\t"
156414 #elif defined(__clang__)
156415         "muls	r6, r5\n\t"
156416 #else
156417         "mul	r6, r5\n\t"
156418 #endif
156419 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156420         "adds	r4, r4, r6\n\t"
156421 #else
156422         "add	r4, r4, r6\n\t"
156423 #endif
156424 #ifdef WOLFSSL_KEIL
156425         "adcs	r2, r2, %[r]\n\t"
156426 #elif defined(__clang__)
156427         "adcs	r2, %[r]\n\t"
156428 #else
156429         "adc	r2, %[r]\n\t"
156430 #endif
156431 #ifdef WOLFSSL_KEIL
156432         "adcs	r3, r3, %[r]\n\t"
156433 #elif defined(__clang__)
156434         "adcs	r3, %[r]\n\t"
156435 #else
156436         "adc	r3, %[r]\n\t"
156437 #endif
156438 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156439         "adds	r4, r4, r6\n\t"
156440 #else
156441         "add	r4, r4, r6\n\t"
156442 #endif
156443 #ifdef WOLFSSL_KEIL
156444         "adcs	r2, r2, %[r]\n\t"
156445 #elif defined(__clang__)
156446         "adcs	r2, %[r]\n\t"
156447 #else
156448         "adc	r2, %[r]\n\t"
156449 #endif
156450 #ifdef WOLFSSL_KEIL
156451         "adcs	r3, r3, %[r]\n\t"
156452 #elif defined(__clang__)
156453         "adcs	r3, %[r]\n\t"
156454 #else
156455         "adc	r3, %[r]\n\t"
156456 #endif
156457 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156458         "lsrs	r6, r7, #16\n\t"
156459 #else
156460         "lsr	r6, r7, #16\n\t"
156461 #endif
156462 #ifdef WOLFSSL_KEIL
156463         "muls	r5, r6, r5\n\t"
156464 #elif defined(__clang__)
156465         "muls	r5, r6\n\t"
156466 #else
156467         "mul	r5, r6\n\t"
156468 #endif
156469 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156470         "lsrs	r6, r5, #16\n\t"
156471 #else
156472         "lsr	r6, r5, #16\n\t"
156473 #endif
156474 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156475         "lsls	r5, r5, #16\n\t"
156476 #else
156477         "lsl	r5, r5, #16\n\t"
156478 #endif
156479 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156480         "adds	r4, r4, r5\n\t"
156481 #else
156482         "add	r4, r4, r5\n\t"
156483 #endif
156484 #ifdef WOLFSSL_KEIL
156485         "adcs	r2, r2, r6\n\t"
156486 #elif defined(__clang__)
156487         "adcs	r2, r6\n\t"
156488 #else
156489         "adc	r2, r6\n\t"
156490 #endif
156491 #ifdef WOLFSSL_KEIL
156492         "adcs	r3, r3, %[r]\n\t"
156493 #elif defined(__clang__)
156494         "adcs	r3, %[r]\n\t"
156495 #else
156496         "adc	r3, %[r]\n\t"
156497 #endif
156498 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156499         "adds	r4, r4, r5\n\t"
156500 #else
156501         "add	r4, r4, r5\n\t"
156502 #endif
156503 #ifdef WOLFSSL_KEIL
156504         "adcs	r2, r2, r6\n\t"
156505 #elif defined(__clang__)
156506         "adcs	r2, r6\n\t"
156507 #else
156508         "adc	r2, r6\n\t"
156509 #endif
156510 #ifdef WOLFSSL_KEIL
156511         "adcs	r3, r3, %[r]\n\t"
156512 #elif defined(__clang__)
156513         "adcs	r3, %[r]\n\t"
156514 #else
156515         "adc	r3, %[r]\n\t"
156516 #endif
156517 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156518         "lsrs	r5, %[a], #16\n\t"
156519 #else
156520         "lsr	r5, %[a], #16\n\t"
156521 #endif
156522 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156523         "lsrs	r6, r7, #16\n\t"
156524 #else
156525         "lsr	r6, r7, #16\n\t"
156526 #endif
156527 #ifdef WOLFSSL_KEIL
156528         "muls	r6, r5, r6\n\t"
156529 #elif defined(__clang__)
156530         "muls	r6, r5\n\t"
156531 #else
156532         "mul	r6, r5\n\t"
156533 #endif
156534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156535         "adds	r2, r2, r6\n\t"
156536 #else
156537         "add	r2, r2, r6\n\t"
156538 #endif
156539 #ifdef WOLFSSL_KEIL
156540         "adcs	r3, r3, %[r]\n\t"
156541 #elif defined(__clang__)
156542         "adcs	r3, %[r]\n\t"
156543 #else
156544         "adc	r3, %[r]\n\t"
156545 #endif
156546 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156547         "adds	r2, r2, r6\n\t"
156548 #else
156549         "add	r2, r2, r6\n\t"
156550 #endif
156551 #ifdef WOLFSSL_KEIL
156552         "adcs	r3, r3, %[r]\n\t"
156553 #elif defined(__clang__)
156554         "adcs	r3, %[r]\n\t"
156555 #else
156556         "adc	r3, %[r]\n\t"
156557 #endif
156558         "uxth	r6, r7\n\t"
156559 #ifdef WOLFSSL_KEIL
156560         "muls	r5, r6, r5\n\t"
156561 #elif defined(__clang__)
156562         "muls	r5, r6\n\t"
156563 #else
156564         "mul	r5, r6\n\t"
156565 #endif
156566 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156567         "lsrs	r6, r5, #16\n\t"
156568 #else
156569         "lsr	r6, r5, #16\n\t"
156570 #endif
156571 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156572         "lsls	r5, r5, #16\n\t"
156573 #else
156574         "lsl	r5, r5, #16\n\t"
156575 #endif
156576 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156577         "adds	r4, r4, r5\n\t"
156578 #else
156579         "add	r4, r4, r5\n\t"
156580 #endif
156581 #ifdef WOLFSSL_KEIL
156582         "adcs	r2, r2, r6\n\t"
156583 #elif defined(__clang__)
156584         "adcs	r2, r6\n\t"
156585 #else
156586         "adc	r2, r6\n\t"
156587 #endif
156588 #ifdef WOLFSSL_KEIL
156589         "adcs	r3, r3, %[r]\n\t"
156590 #elif defined(__clang__)
156591         "adcs	r3, %[r]\n\t"
156592 #else
156593         "adc	r3, %[r]\n\t"
156594 #endif
156595 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156596         "adds	r4, r4, r5\n\t"
156597 #else
156598         "add	r4, r4, r5\n\t"
156599 #endif
156600 #ifdef WOLFSSL_KEIL
156601         "adcs	r2, r2, r6\n\t"
156602 #elif defined(__clang__)
156603         "adcs	r2, r6\n\t"
156604 #else
156605         "adc	r2, r6\n\t"
156606 #endif
156607 #ifdef WOLFSSL_KEIL
156608         "adcs	r3, r3, %[r]\n\t"
156609 #elif defined(__clang__)
156610         "adcs	r3, %[r]\n\t"
156611 #else
156612         "adc	r3, %[r]\n\t"
156613 #endif
156614         "str	r4, [sp, #20]\n\t"
156615         "#  A[6] * A[0]\n\t"
156616         "movs	r4, #0\n\t"
156617         "mov	%[a], r9\n\t"
156618         "ldr	%[a], [%[a], #24]\n\t"
156619         "uxth	r5, %[a]\n\t"
156620         "uxth	r6, r7\n\t"
156621 #ifdef WOLFSSL_KEIL
156622         "muls	r6, r5, r6\n\t"
156623 #elif defined(__clang__)
156624         "muls	r6, r5\n\t"
156625 #else
156626         "mul	r6, r5\n\t"
156627 #endif
156628 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156629         "adds	r2, r2, r6\n\t"
156630 #else
156631         "add	r2, r2, r6\n\t"
156632 #endif
156633 #ifdef WOLFSSL_KEIL
156634         "adcs	r3, r3, %[r]\n\t"
156635 #elif defined(__clang__)
156636         "adcs	r3, %[r]\n\t"
156637 #else
156638         "adc	r3, %[r]\n\t"
156639 #endif
156640 #ifdef WOLFSSL_KEIL
156641         "adcs	r4, r4, %[r]\n\t"
156642 #elif defined(__clang__)
156643         "adcs	r4, %[r]\n\t"
156644 #else
156645         "adc	r4, %[r]\n\t"
156646 #endif
156647 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156648         "adds	r2, r2, r6\n\t"
156649 #else
156650         "add	r2, r2, r6\n\t"
156651 #endif
156652 #ifdef WOLFSSL_KEIL
156653         "adcs	r3, r3, %[r]\n\t"
156654 #elif defined(__clang__)
156655         "adcs	r3, %[r]\n\t"
156656 #else
156657         "adc	r3, %[r]\n\t"
156658 #endif
156659 #ifdef WOLFSSL_KEIL
156660         "adcs	r4, r4, %[r]\n\t"
156661 #elif defined(__clang__)
156662         "adcs	r4, %[r]\n\t"
156663 #else
156664         "adc	r4, %[r]\n\t"
156665 #endif
156666 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156667         "lsrs	r6, r7, #16\n\t"
156668 #else
156669         "lsr	r6, r7, #16\n\t"
156670 #endif
156671 #ifdef WOLFSSL_KEIL
156672         "muls	r5, r6, r5\n\t"
156673 #elif defined(__clang__)
156674         "muls	r5, r6\n\t"
156675 #else
156676         "mul	r5, r6\n\t"
156677 #endif
156678 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156679         "lsrs	r6, r5, #16\n\t"
156680 #else
156681         "lsr	r6, r5, #16\n\t"
156682 #endif
156683 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156684         "lsls	r5, r5, #16\n\t"
156685 #else
156686         "lsl	r5, r5, #16\n\t"
156687 #endif
156688 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156689         "adds	r2, r2, r5\n\t"
156690 #else
156691         "add	r2, r2, r5\n\t"
156692 #endif
156693 #ifdef WOLFSSL_KEIL
156694         "adcs	r3, r3, r6\n\t"
156695 #elif defined(__clang__)
156696         "adcs	r3, r6\n\t"
156697 #else
156698         "adc	r3, r6\n\t"
156699 #endif
156700 #ifdef WOLFSSL_KEIL
156701         "adcs	r4, r4, %[r]\n\t"
156702 #elif defined(__clang__)
156703         "adcs	r4, %[r]\n\t"
156704 #else
156705         "adc	r4, %[r]\n\t"
156706 #endif
156707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156708         "adds	r2, r2, r5\n\t"
156709 #else
156710         "add	r2, r2, r5\n\t"
156711 #endif
156712 #ifdef WOLFSSL_KEIL
156713         "adcs	r3, r3, r6\n\t"
156714 #elif defined(__clang__)
156715         "adcs	r3, r6\n\t"
156716 #else
156717         "adc	r3, r6\n\t"
156718 #endif
156719 #ifdef WOLFSSL_KEIL
156720         "adcs	r4, r4, %[r]\n\t"
156721 #elif defined(__clang__)
156722         "adcs	r4, %[r]\n\t"
156723 #else
156724         "adc	r4, %[r]\n\t"
156725 #endif
156726 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156727         "lsrs	r5, %[a], #16\n\t"
156728 #else
156729         "lsr	r5, %[a], #16\n\t"
156730 #endif
156731 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156732         "lsrs	r6, r7, #16\n\t"
156733 #else
156734         "lsr	r6, r7, #16\n\t"
156735 #endif
156736 #ifdef WOLFSSL_KEIL
156737         "muls	r6, r5, r6\n\t"
156738 #elif defined(__clang__)
156739         "muls	r6, r5\n\t"
156740 #else
156741         "mul	r6, r5\n\t"
156742 #endif
156743 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156744         "adds	r3, r3, r6\n\t"
156745 #else
156746         "add	r3, r3, r6\n\t"
156747 #endif
156748 #ifdef WOLFSSL_KEIL
156749         "adcs	r4, r4, %[r]\n\t"
156750 #elif defined(__clang__)
156751         "adcs	r4, %[r]\n\t"
156752 #else
156753         "adc	r4, %[r]\n\t"
156754 #endif
156755 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156756         "adds	r3, r3, r6\n\t"
156757 #else
156758         "add	r3, r3, r6\n\t"
156759 #endif
156760 #ifdef WOLFSSL_KEIL
156761         "adcs	r4, r4, %[r]\n\t"
156762 #elif defined(__clang__)
156763         "adcs	r4, %[r]\n\t"
156764 #else
156765         "adc	r4, %[r]\n\t"
156766 #endif
156767         "uxth	r6, r7\n\t"
156768 #ifdef WOLFSSL_KEIL
156769         "muls	r5, r6, r5\n\t"
156770 #elif defined(__clang__)
156771         "muls	r5, r6\n\t"
156772 #else
156773         "mul	r5, r6\n\t"
156774 #endif
156775 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156776         "lsrs	r6, r5, #16\n\t"
156777 #else
156778         "lsr	r6, r5, #16\n\t"
156779 #endif
156780 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156781         "lsls	r5, r5, #16\n\t"
156782 #else
156783         "lsl	r5, r5, #16\n\t"
156784 #endif
156785 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156786         "adds	r2, r2, r5\n\t"
156787 #else
156788         "add	r2, r2, r5\n\t"
156789 #endif
156790 #ifdef WOLFSSL_KEIL
156791         "adcs	r3, r3, r6\n\t"
156792 #elif defined(__clang__)
156793         "adcs	r3, r6\n\t"
156794 #else
156795         "adc	r3, r6\n\t"
156796 #endif
156797 #ifdef WOLFSSL_KEIL
156798         "adcs	r4, r4, %[r]\n\t"
156799 #elif defined(__clang__)
156800         "adcs	r4, %[r]\n\t"
156801 #else
156802         "adc	r4, %[r]\n\t"
156803 #endif
156804 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156805         "adds	r2, r2, r5\n\t"
156806 #else
156807         "add	r2, r2, r5\n\t"
156808 #endif
156809 #ifdef WOLFSSL_KEIL
156810         "adcs	r3, r3, r6\n\t"
156811 #elif defined(__clang__)
156812         "adcs	r3, r6\n\t"
156813 #else
156814         "adc	r3, r6\n\t"
156815 #endif
156816 #ifdef WOLFSSL_KEIL
156817         "adcs	r4, r4, %[r]\n\t"
156818 #elif defined(__clang__)
156819         "adcs	r4, %[r]\n\t"
156820 #else
156821         "adc	r4, %[r]\n\t"
156822 #endif
156823         "#  A[5] * A[1]\n\t"
156824         "mov	%[a], r9\n\t"
156825         "mov	r7, r11\n\t"
156826         "ldr	%[a], [%[a], #20]\n\t"
156827         "uxth	r5, %[a]\n\t"
156828         "uxth	r6, r7\n\t"
156829 #ifdef WOLFSSL_KEIL
156830         "muls	r6, r5, r6\n\t"
156831 #elif defined(__clang__)
156832         "muls	r6, r5\n\t"
156833 #else
156834         "mul	r6, r5\n\t"
156835 #endif
156836 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156837         "adds	r2, r2, r6\n\t"
156838 #else
156839         "add	r2, r2, r6\n\t"
156840 #endif
156841 #ifdef WOLFSSL_KEIL
156842         "adcs	r3, r3, %[r]\n\t"
156843 #elif defined(__clang__)
156844         "adcs	r3, %[r]\n\t"
156845 #else
156846         "adc	r3, %[r]\n\t"
156847 #endif
156848 #ifdef WOLFSSL_KEIL
156849         "adcs	r4, r4, %[r]\n\t"
156850 #elif defined(__clang__)
156851         "adcs	r4, %[r]\n\t"
156852 #else
156853         "adc	r4, %[r]\n\t"
156854 #endif
156855 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156856         "adds	r2, r2, r6\n\t"
156857 #else
156858         "add	r2, r2, r6\n\t"
156859 #endif
156860 #ifdef WOLFSSL_KEIL
156861         "adcs	r3, r3, %[r]\n\t"
156862 #elif defined(__clang__)
156863         "adcs	r3, %[r]\n\t"
156864 #else
156865         "adc	r3, %[r]\n\t"
156866 #endif
156867 #ifdef WOLFSSL_KEIL
156868         "adcs	r4, r4, %[r]\n\t"
156869 #elif defined(__clang__)
156870         "adcs	r4, %[r]\n\t"
156871 #else
156872         "adc	r4, %[r]\n\t"
156873 #endif
156874 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156875         "lsrs	r6, r7, #16\n\t"
156876 #else
156877         "lsr	r6, r7, #16\n\t"
156878 #endif
156879 #ifdef WOLFSSL_KEIL
156880         "muls	r5, r6, r5\n\t"
156881 #elif defined(__clang__)
156882         "muls	r5, r6\n\t"
156883 #else
156884         "mul	r5, r6\n\t"
156885 #endif
156886 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156887         "lsrs	r6, r5, #16\n\t"
156888 #else
156889         "lsr	r6, r5, #16\n\t"
156890 #endif
156891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156892         "lsls	r5, r5, #16\n\t"
156893 #else
156894         "lsl	r5, r5, #16\n\t"
156895 #endif
156896 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156897         "adds	r2, r2, r5\n\t"
156898 #else
156899         "add	r2, r2, r5\n\t"
156900 #endif
156901 #ifdef WOLFSSL_KEIL
156902         "adcs	r3, r3, r6\n\t"
156903 #elif defined(__clang__)
156904         "adcs	r3, r6\n\t"
156905 #else
156906         "adc	r3, r6\n\t"
156907 #endif
156908 #ifdef WOLFSSL_KEIL
156909         "adcs	r4, r4, %[r]\n\t"
156910 #elif defined(__clang__)
156911         "adcs	r4, %[r]\n\t"
156912 #else
156913         "adc	r4, %[r]\n\t"
156914 #endif
156915 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156916         "adds	r2, r2, r5\n\t"
156917 #else
156918         "add	r2, r2, r5\n\t"
156919 #endif
156920 #ifdef WOLFSSL_KEIL
156921         "adcs	r3, r3, r6\n\t"
156922 #elif defined(__clang__)
156923         "adcs	r3, r6\n\t"
156924 #else
156925         "adc	r3, r6\n\t"
156926 #endif
156927 #ifdef WOLFSSL_KEIL
156928         "adcs	r4, r4, %[r]\n\t"
156929 #elif defined(__clang__)
156930         "adcs	r4, %[r]\n\t"
156931 #else
156932         "adc	r4, %[r]\n\t"
156933 #endif
156934 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156935         "lsrs	r5, %[a], #16\n\t"
156936 #else
156937         "lsr	r5, %[a], #16\n\t"
156938 #endif
156939 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156940         "lsrs	r6, r7, #16\n\t"
156941 #else
156942         "lsr	r6, r7, #16\n\t"
156943 #endif
156944 #ifdef WOLFSSL_KEIL
156945         "muls	r6, r5, r6\n\t"
156946 #elif defined(__clang__)
156947         "muls	r6, r5\n\t"
156948 #else
156949         "mul	r6, r5\n\t"
156950 #endif
156951 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156952         "adds	r3, r3, r6\n\t"
156953 #else
156954         "add	r3, r3, r6\n\t"
156955 #endif
156956 #ifdef WOLFSSL_KEIL
156957         "adcs	r4, r4, %[r]\n\t"
156958 #elif defined(__clang__)
156959         "adcs	r4, %[r]\n\t"
156960 #else
156961         "adc	r4, %[r]\n\t"
156962 #endif
156963 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156964         "adds	r3, r3, r6\n\t"
156965 #else
156966         "add	r3, r3, r6\n\t"
156967 #endif
156968 #ifdef WOLFSSL_KEIL
156969         "adcs	r4, r4, %[r]\n\t"
156970 #elif defined(__clang__)
156971         "adcs	r4, %[r]\n\t"
156972 #else
156973         "adc	r4, %[r]\n\t"
156974 #endif
156975         "uxth	r6, r7\n\t"
156976 #ifdef WOLFSSL_KEIL
156977         "muls	r5, r6, r5\n\t"
156978 #elif defined(__clang__)
156979         "muls	r5, r6\n\t"
156980 #else
156981         "mul	r5, r6\n\t"
156982 #endif
156983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156984         "lsrs	r6, r5, #16\n\t"
156985 #else
156986         "lsr	r6, r5, #16\n\t"
156987 #endif
156988 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156989         "lsls	r5, r5, #16\n\t"
156990 #else
156991         "lsl	r5, r5, #16\n\t"
156992 #endif
156993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
156994         "adds	r2, r2, r5\n\t"
156995 #else
156996         "add	r2, r2, r5\n\t"
156997 #endif
156998 #ifdef WOLFSSL_KEIL
156999         "adcs	r3, r3, r6\n\t"
157000 #elif defined(__clang__)
157001         "adcs	r3, r6\n\t"
157002 #else
157003         "adc	r3, r6\n\t"
157004 #endif
157005 #ifdef WOLFSSL_KEIL
157006         "adcs	r4, r4, %[r]\n\t"
157007 #elif defined(__clang__)
157008         "adcs	r4, %[r]\n\t"
157009 #else
157010         "adc	r4, %[r]\n\t"
157011 #endif
157012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157013         "adds	r2, r2, r5\n\t"
157014 #else
157015         "add	r2, r2, r5\n\t"
157016 #endif
157017 #ifdef WOLFSSL_KEIL
157018         "adcs	r3, r3, r6\n\t"
157019 #elif defined(__clang__)
157020         "adcs	r3, r6\n\t"
157021 #else
157022         "adc	r3, r6\n\t"
157023 #endif
157024 #ifdef WOLFSSL_KEIL
157025         "adcs	r4, r4, %[r]\n\t"
157026 #elif defined(__clang__)
157027         "adcs	r4, %[r]\n\t"
157028 #else
157029         "adc	r4, %[r]\n\t"
157030 #endif
157031         "#  A[4] * A[2]\n\t"
157032         "mov	%[a], r9\n\t"
157033         "mov	r7, r12\n\t"
157034         "ldr	%[a], [%[a], #16]\n\t"
157035         "uxth	r5, %[a]\n\t"
157036         "uxth	r6, r7\n\t"
157037 #ifdef WOLFSSL_KEIL
157038         "muls	r6, r5, r6\n\t"
157039 #elif defined(__clang__)
157040         "muls	r6, r5\n\t"
157041 #else
157042         "mul	r6, r5\n\t"
157043 #endif
157044 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157045         "adds	r2, r2, r6\n\t"
157046 #else
157047         "add	r2, r2, r6\n\t"
157048 #endif
157049 #ifdef WOLFSSL_KEIL
157050         "adcs	r3, r3, %[r]\n\t"
157051 #elif defined(__clang__)
157052         "adcs	r3, %[r]\n\t"
157053 #else
157054         "adc	r3, %[r]\n\t"
157055 #endif
157056 #ifdef WOLFSSL_KEIL
157057         "adcs	r4, r4, %[r]\n\t"
157058 #elif defined(__clang__)
157059         "adcs	r4, %[r]\n\t"
157060 #else
157061         "adc	r4, %[r]\n\t"
157062 #endif
157063 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157064         "adds	r2, r2, r6\n\t"
157065 #else
157066         "add	r2, r2, r6\n\t"
157067 #endif
157068 #ifdef WOLFSSL_KEIL
157069         "adcs	r3, r3, %[r]\n\t"
157070 #elif defined(__clang__)
157071         "adcs	r3, %[r]\n\t"
157072 #else
157073         "adc	r3, %[r]\n\t"
157074 #endif
157075 #ifdef WOLFSSL_KEIL
157076         "adcs	r4, r4, %[r]\n\t"
157077 #elif defined(__clang__)
157078         "adcs	r4, %[r]\n\t"
157079 #else
157080         "adc	r4, %[r]\n\t"
157081 #endif
157082 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157083         "lsrs	r6, r7, #16\n\t"
157084 #else
157085         "lsr	r6, r7, #16\n\t"
157086 #endif
157087 #ifdef WOLFSSL_KEIL
157088         "muls	r5, r6, r5\n\t"
157089 #elif defined(__clang__)
157090         "muls	r5, r6\n\t"
157091 #else
157092         "mul	r5, r6\n\t"
157093 #endif
157094 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157095         "lsrs	r6, r5, #16\n\t"
157096 #else
157097         "lsr	r6, r5, #16\n\t"
157098 #endif
157099 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157100         "lsls	r5, r5, #16\n\t"
157101 #else
157102         "lsl	r5, r5, #16\n\t"
157103 #endif
157104 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157105         "adds	r2, r2, r5\n\t"
157106 #else
157107         "add	r2, r2, r5\n\t"
157108 #endif
157109 #ifdef WOLFSSL_KEIL
157110         "adcs	r3, r3, r6\n\t"
157111 #elif defined(__clang__)
157112         "adcs	r3, r6\n\t"
157113 #else
157114         "adc	r3, r6\n\t"
157115 #endif
157116 #ifdef WOLFSSL_KEIL
157117         "adcs	r4, r4, %[r]\n\t"
157118 #elif defined(__clang__)
157119         "adcs	r4, %[r]\n\t"
157120 #else
157121         "adc	r4, %[r]\n\t"
157122 #endif
157123 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157124         "adds	r2, r2, r5\n\t"
157125 #else
157126         "add	r2, r2, r5\n\t"
157127 #endif
157128 #ifdef WOLFSSL_KEIL
157129         "adcs	r3, r3, r6\n\t"
157130 #elif defined(__clang__)
157131         "adcs	r3, r6\n\t"
157132 #else
157133         "adc	r3, r6\n\t"
157134 #endif
157135 #ifdef WOLFSSL_KEIL
157136         "adcs	r4, r4, %[r]\n\t"
157137 #elif defined(__clang__)
157138         "adcs	r4, %[r]\n\t"
157139 #else
157140         "adc	r4, %[r]\n\t"
157141 #endif
157142 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157143         "lsrs	r5, %[a], #16\n\t"
157144 #else
157145         "lsr	r5, %[a], #16\n\t"
157146 #endif
157147 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157148         "lsrs	r6, r7, #16\n\t"
157149 #else
157150         "lsr	r6, r7, #16\n\t"
157151 #endif
157152 #ifdef WOLFSSL_KEIL
157153         "muls	r6, r5, r6\n\t"
157154 #elif defined(__clang__)
157155         "muls	r6, r5\n\t"
157156 #else
157157         "mul	r6, r5\n\t"
157158 #endif
157159 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157160         "adds	r3, r3, r6\n\t"
157161 #else
157162         "add	r3, r3, r6\n\t"
157163 #endif
157164 #ifdef WOLFSSL_KEIL
157165         "adcs	r4, r4, %[r]\n\t"
157166 #elif defined(__clang__)
157167         "adcs	r4, %[r]\n\t"
157168 #else
157169         "adc	r4, %[r]\n\t"
157170 #endif
157171 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157172         "adds	r3, r3, r6\n\t"
157173 #else
157174         "add	r3, r3, r6\n\t"
157175 #endif
157176 #ifdef WOLFSSL_KEIL
157177         "adcs	r4, r4, %[r]\n\t"
157178 #elif defined(__clang__)
157179         "adcs	r4, %[r]\n\t"
157180 #else
157181         "adc	r4, %[r]\n\t"
157182 #endif
157183         "uxth	r6, r7\n\t"
157184 #ifdef WOLFSSL_KEIL
157185         "muls	r5, r6, r5\n\t"
157186 #elif defined(__clang__)
157187         "muls	r5, r6\n\t"
157188 #else
157189         "mul	r5, r6\n\t"
157190 #endif
157191 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157192         "lsrs	r6, r5, #16\n\t"
157193 #else
157194         "lsr	r6, r5, #16\n\t"
157195 #endif
157196 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157197         "lsls	r5, r5, #16\n\t"
157198 #else
157199         "lsl	r5, r5, #16\n\t"
157200 #endif
157201 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157202         "adds	r2, r2, r5\n\t"
157203 #else
157204         "add	r2, r2, r5\n\t"
157205 #endif
157206 #ifdef WOLFSSL_KEIL
157207         "adcs	r3, r3, r6\n\t"
157208 #elif defined(__clang__)
157209         "adcs	r3, r6\n\t"
157210 #else
157211         "adc	r3, r6\n\t"
157212 #endif
157213 #ifdef WOLFSSL_KEIL
157214         "adcs	r4, r4, %[r]\n\t"
157215 #elif defined(__clang__)
157216         "adcs	r4, %[r]\n\t"
157217 #else
157218         "adc	r4, %[r]\n\t"
157219 #endif
157220 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157221         "adds	r2, r2, r5\n\t"
157222 #else
157223         "add	r2, r2, r5\n\t"
157224 #endif
157225 #ifdef WOLFSSL_KEIL
157226         "adcs	r3, r3, r6\n\t"
157227 #elif defined(__clang__)
157228         "adcs	r3, r6\n\t"
157229 #else
157230         "adc	r3, r6\n\t"
157231 #endif
157232 #ifdef WOLFSSL_KEIL
157233         "adcs	r4, r4, %[r]\n\t"
157234 #elif defined(__clang__)
157235         "adcs	r4, %[r]\n\t"
157236 #else
157237         "adc	r4, %[r]\n\t"
157238 #endif
157239         "#  A[3] * A[3]\n\t"
157240         "mov	r7, lr\n\t"
157241 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157242         "lsrs	r6, r7, #16\n\t"
157243 #else
157244         "lsr	r6, r7, #16\n\t"
157245 #endif
157246         "uxth	r5, r7\n\t"
157247 #ifdef WOLFSSL_KEIL
157248         "muls	r5, r5, r5\n\t"
157249 #elif defined(__clang__)
157250         "muls	r5, r5\n\t"
157251 #else
157252         "mul	r5, r5\n\t"
157253 #endif
157254 #ifdef WOLFSSL_KEIL
157255         "muls	r6, r6, r6\n\t"
157256 #elif defined(__clang__)
157257         "muls	r6, r6\n\t"
157258 #else
157259         "mul	r6, r6\n\t"
157260 #endif
157261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157262         "adds	r2, r2, r5\n\t"
157263 #else
157264         "add	r2, r2, r5\n\t"
157265 #endif
157266 #ifdef WOLFSSL_KEIL
157267         "adcs	r3, r3, r6\n\t"
157268 #elif defined(__clang__)
157269         "adcs	r3, r6\n\t"
157270 #else
157271         "adc	r3, r6\n\t"
157272 #endif
157273 #ifdef WOLFSSL_KEIL
157274         "adcs	r4, r4, %[r]\n\t"
157275 #elif defined(__clang__)
157276         "adcs	r4, %[r]\n\t"
157277 #else
157278         "adc	r4, %[r]\n\t"
157279 #endif
157280 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157281         "lsrs	r6, r7, #16\n\t"
157282 #else
157283         "lsr	r6, r7, #16\n\t"
157284 #endif
157285         "uxth	r5, r7\n\t"
157286 #ifdef WOLFSSL_KEIL
157287         "muls	r5, r6, r5\n\t"
157288 #elif defined(__clang__)
157289         "muls	r5, r6\n\t"
157290 #else
157291         "mul	r5, r6\n\t"
157292 #endif
157293 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157294         "lsrs	r6, r5, #15\n\t"
157295 #else
157296         "lsr	r6, r5, #15\n\t"
157297 #endif
157298 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157299         "lsls	r5, r5, #17\n\t"
157300 #else
157301         "lsl	r5, r5, #17\n\t"
157302 #endif
157303 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157304         "adds	r2, r2, r5\n\t"
157305 #else
157306         "add	r2, r2, r5\n\t"
157307 #endif
157308 #ifdef WOLFSSL_KEIL
157309         "adcs	r3, r3, r6\n\t"
157310 #elif defined(__clang__)
157311         "adcs	r3, r6\n\t"
157312 #else
157313         "adc	r3, r6\n\t"
157314 #endif
157315 #ifdef WOLFSSL_KEIL
157316         "adcs	r4, r4, %[r]\n\t"
157317 #elif defined(__clang__)
157318         "adcs	r4, %[r]\n\t"
157319 #else
157320         "adc	r4, %[r]\n\t"
157321 #endif
157322         "str	r2, [sp, #24]\n\t"
157323         "#  A[4] * A[3]\n\t"
157324         "movs	r2, #0\n\t"
157325         "mov	%[a], r9\n\t"
157326         "ldr	%[a], [%[a], #16]\n\t"
157327         "uxth	r5, %[a]\n\t"
157328         "uxth	r6, r7\n\t"
157329 #ifdef WOLFSSL_KEIL
157330         "muls	r6, r5, r6\n\t"
157331 #elif defined(__clang__)
157332         "muls	r6, r5\n\t"
157333 #else
157334         "mul	r6, r5\n\t"
157335 #endif
157336 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157337         "adds	r3, r3, r6\n\t"
157338 #else
157339         "add	r3, r3, r6\n\t"
157340 #endif
157341 #ifdef WOLFSSL_KEIL
157342         "adcs	r4, r4, %[r]\n\t"
157343 #elif defined(__clang__)
157344         "adcs	r4, %[r]\n\t"
157345 #else
157346         "adc	r4, %[r]\n\t"
157347 #endif
157348 #ifdef WOLFSSL_KEIL
157349         "adcs	r2, r2, %[r]\n\t"
157350 #elif defined(__clang__)
157351         "adcs	r2, %[r]\n\t"
157352 #else
157353         "adc	r2, %[r]\n\t"
157354 #endif
157355 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157356         "adds	r3, r3, r6\n\t"
157357 #else
157358         "add	r3, r3, r6\n\t"
157359 #endif
157360 #ifdef WOLFSSL_KEIL
157361         "adcs	r4, r4, %[r]\n\t"
157362 #elif defined(__clang__)
157363         "adcs	r4, %[r]\n\t"
157364 #else
157365         "adc	r4, %[r]\n\t"
157366 #endif
157367 #ifdef WOLFSSL_KEIL
157368         "adcs	r2, r2, %[r]\n\t"
157369 #elif defined(__clang__)
157370         "adcs	r2, %[r]\n\t"
157371 #else
157372         "adc	r2, %[r]\n\t"
157373 #endif
157374 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157375         "lsrs	r6, r7, #16\n\t"
157376 #else
157377         "lsr	r6, r7, #16\n\t"
157378 #endif
157379 #ifdef WOLFSSL_KEIL
157380         "muls	r5, r6, r5\n\t"
157381 #elif defined(__clang__)
157382         "muls	r5, r6\n\t"
157383 #else
157384         "mul	r5, r6\n\t"
157385 #endif
157386 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157387         "lsrs	r6, r5, #16\n\t"
157388 #else
157389         "lsr	r6, r5, #16\n\t"
157390 #endif
157391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157392         "lsls	r5, r5, #16\n\t"
157393 #else
157394         "lsl	r5, r5, #16\n\t"
157395 #endif
157396 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157397         "adds	r3, r3, r5\n\t"
157398 #else
157399         "add	r3, r3, r5\n\t"
157400 #endif
157401 #ifdef WOLFSSL_KEIL
157402         "adcs	r4, r4, r6\n\t"
157403 #elif defined(__clang__)
157404         "adcs	r4, r6\n\t"
157405 #else
157406         "adc	r4, r6\n\t"
157407 #endif
157408 #ifdef WOLFSSL_KEIL
157409         "adcs	r2, r2, %[r]\n\t"
157410 #elif defined(__clang__)
157411         "adcs	r2, %[r]\n\t"
157412 #else
157413         "adc	r2, %[r]\n\t"
157414 #endif
157415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157416         "adds	r3, r3, r5\n\t"
157417 #else
157418         "add	r3, r3, r5\n\t"
157419 #endif
157420 #ifdef WOLFSSL_KEIL
157421         "adcs	r4, r4, r6\n\t"
157422 #elif defined(__clang__)
157423         "adcs	r4, r6\n\t"
157424 #else
157425         "adc	r4, r6\n\t"
157426 #endif
157427 #ifdef WOLFSSL_KEIL
157428         "adcs	r2, r2, %[r]\n\t"
157429 #elif defined(__clang__)
157430         "adcs	r2, %[r]\n\t"
157431 #else
157432         "adc	r2, %[r]\n\t"
157433 #endif
157434 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157435         "lsrs	r5, %[a], #16\n\t"
157436 #else
157437         "lsr	r5, %[a], #16\n\t"
157438 #endif
157439 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157440         "lsrs	r6, r7, #16\n\t"
157441 #else
157442         "lsr	r6, r7, #16\n\t"
157443 #endif
157444 #ifdef WOLFSSL_KEIL
157445         "muls	r6, r5, r6\n\t"
157446 #elif defined(__clang__)
157447         "muls	r6, r5\n\t"
157448 #else
157449         "mul	r6, r5\n\t"
157450 #endif
157451 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157452         "adds	r4, r4, r6\n\t"
157453 #else
157454         "add	r4, r4, r6\n\t"
157455 #endif
157456 #ifdef WOLFSSL_KEIL
157457         "adcs	r2, r2, %[r]\n\t"
157458 #elif defined(__clang__)
157459         "adcs	r2, %[r]\n\t"
157460 #else
157461         "adc	r2, %[r]\n\t"
157462 #endif
157463 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157464         "adds	r4, r4, r6\n\t"
157465 #else
157466         "add	r4, r4, r6\n\t"
157467 #endif
157468 #ifdef WOLFSSL_KEIL
157469         "adcs	r2, r2, %[r]\n\t"
157470 #elif defined(__clang__)
157471         "adcs	r2, %[r]\n\t"
157472 #else
157473         "adc	r2, %[r]\n\t"
157474 #endif
157475         "uxth	r6, r7\n\t"
157476 #ifdef WOLFSSL_KEIL
157477         "muls	r5, r6, r5\n\t"
157478 #elif defined(__clang__)
157479         "muls	r5, r6\n\t"
157480 #else
157481         "mul	r5, r6\n\t"
157482 #endif
157483 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157484         "lsrs	r6, r5, #16\n\t"
157485 #else
157486         "lsr	r6, r5, #16\n\t"
157487 #endif
157488 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157489         "lsls	r5, r5, #16\n\t"
157490 #else
157491         "lsl	r5, r5, #16\n\t"
157492 #endif
157493 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157494         "adds	r3, r3, r5\n\t"
157495 #else
157496         "add	r3, r3, r5\n\t"
157497 #endif
157498 #ifdef WOLFSSL_KEIL
157499         "adcs	r4, r4, r6\n\t"
157500 #elif defined(__clang__)
157501         "adcs	r4, r6\n\t"
157502 #else
157503         "adc	r4, r6\n\t"
157504 #endif
157505 #ifdef WOLFSSL_KEIL
157506         "adcs	r2, r2, %[r]\n\t"
157507 #elif defined(__clang__)
157508         "adcs	r2, %[r]\n\t"
157509 #else
157510         "adc	r2, %[r]\n\t"
157511 #endif
157512 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157513         "adds	r3, r3, r5\n\t"
157514 #else
157515         "add	r3, r3, r5\n\t"
157516 #endif
157517 #ifdef WOLFSSL_KEIL
157518         "adcs	r4, r4, r6\n\t"
157519 #elif defined(__clang__)
157520         "adcs	r4, r6\n\t"
157521 #else
157522         "adc	r4, r6\n\t"
157523 #endif
157524 #ifdef WOLFSSL_KEIL
157525         "adcs	r2, r2, %[r]\n\t"
157526 #elif defined(__clang__)
157527         "adcs	r2, %[r]\n\t"
157528 #else
157529         "adc	r2, %[r]\n\t"
157530 #endif
157531         "#  A[5] * A[2]\n\t"
157532         "mov	%[a], r9\n\t"
157533         "mov	r7, r12\n\t"
157534         "ldr	%[a], [%[a], #20]\n\t"
157535         "uxth	r5, %[a]\n\t"
157536         "uxth	r6, r7\n\t"
157537 #ifdef WOLFSSL_KEIL
157538         "muls	r6, r5, r6\n\t"
157539 #elif defined(__clang__)
157540         "muls	r6, r5\n\t"
157541 #else
157542         "mul	r6, r5\n\t"
157543 #endif
157544 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157545         "adds	r3, r3, r6\n\t"
157546 #else
157547         "add	r3, r3, r6\n\t"
157548 #endif
157549 #ifdef WOLFSSL_KEIL
157550         "adcs	r4, r4, %[r]\n\t"
157551 #elif defined(__clang__)
157552         "adcs	r4, %[r]\n\t"
157553 #else
157554         "adc	r4, %[r]\n\t"
157555 #endif
157556 #ifdef WOLFSSL_KEIL
157557         "adcs	r2, r2, %[r]\n\t"
157558 #elif defined(__clang__)
157559         "adcs	r2, %[r]\n\t"
157560 #else
157561         "adc	r2, %[r]\n\t"
157562 #endif
157563 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157564         "adds	r3, r3, r6\n\t"
157565 #else
157566         "add	r3, r3, r6\n\t"
157567 #endif
157568 #ifdef WOLFSSL_KEIL
157569         "adcs	r4, r4, %[r]\n\t"
157570 #elif defined(__clang__)
157571         "adcs	r4, %[r]\n\t"
157572 #else
157573         "adc	r4, %[r]\n\t"
157574 #endif
157575 #ifdef WOLFSSL_KEIL
157576         "adcs	r2, r2, %[r]\n\t"
157577 #elif defined(__clang__)
157578         "adcs	r2, %[r]\n\t"
157579 #else
157580         "adc	r2, %[r]\n\t"
157581 #endif
157582 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157583         "lsrs	r6, r7, #16\n\t"
157584 #else
157585         "lsr	r6, r7, #16\n\t"
157586 #endif
157587 #ifdef WOLFSSL_KEIL
157588         "muls	r5, r6, r5\n\t"
157589 #elif defined(__clang__)
157590         "muls	r5, r6\n\t"
157591 #else
157592         "mul	r5, r6\n\t"
157593 #endif
157594 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157595         "lsrs	r6, r5, #16\n\t"
157596 #else
157597         "lsr	r6, r5, #16\n\t"
157598 #endif
157599 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157600         "lsls	r5, r5, #16\n\t"
157601 #else
157602         "lsl	r5, r5, #16\n\t"
157603 #endif
157604 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157605         "adds	r3, r3, r5\n\t"
157606 #else
157607         "add	r3, r3, r5\n\t"
157608 #endif
157609 #ifdef WOLFSSL_KEIL
157610         "adcs	r4, r4, r6\n\t"
157611 #elif defined(__clang__)
157612         "adcs	r4, r6\n\t"
157613 #else
157614         "adc	r4, r6\n\t"
157615 #endif
157616 #ifdef WOLFSSL_KEIL
157617         "adcs	r2, r2, %[r]\n\t"
157618 #elif defined(__clang__)
157619         "adcs	r2, %[r]\n\t"
157620 #else
157621         "adc	r2, %[r]\n\t"
157622 #endif
157623 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157624         "adds	r3, r3, r5\n\t"
157625 #else
157626         "add	r3, r3, r5\n\t"
157627 #endif
157628 #ifdef WOLFSSL_KEIL
157629         "adcs	r4, r4, r6\n\t"
157630 #elif defined(__clang__)
157631         "adcs	r4, r6\n\t"
157632 #else
157633         "adc	r4, r6\n\t"
157634 #endif
157635 #ifdef WOLFSSL_KEIL
157636         "adcs	r2, r2, %[r]\n\t"
157637 #elif defined(__clang__)
157638         "adcs	r2, %[r]\n\t"
157639 #else
157640         "adc	r2, %[r]\n\t"
157641 #endif
157642 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157643         "lsrs	r5, %[a], #16\n\t"
157644 #else
157645         "lsr	r5, %[a], #16\n\t"
157646 #endif
157647 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157648         "lsrs	r6, r7, #16\n\t"
157649 #else
157650         "lsr	r6, r7, #16\n\t"
157651 #endif
157652 #ifdef WOLFSSL_KEIL
157653         "muls	r6, r5, r6\n\t"
157654 #elif defined(__clang__)
157655         "muls	r6, r5\n\t"
157656 #else
157657         "mul	r6, r5\n\t"
157658 #endif
157659 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157660         "adds	r4, r4, r6\n\t"
157661 #else
157662         "add	r4, r4, r6\n\t"
157663 #endif
157664 #ifdef WOLFSSL_KEIL
157665         "adcs	r2, r2, %[r]\n\t"
157666 #elif defined(__clang__)
157667         "adcs	r2, %[r]\n\t"
157668 #else
157669         "adc	r2, %[r]\n\t"
157670 #endif
157671 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157672         "adds	r4, r4, r6\n\t"
157673 #else
157674         "add	r4, r4, r6\n\t"
157675 #endif
157676 #ifdef WOLFSSL_KEIL
157677         "adcs	r2, r2, %[r]\n\t"
157678 #elif defined(__clang__)
157679         "adcs	r2, %[r]\n\t"
157680 #else
157681         "adc	r2, %[r]\n\t"
157682 #endif
157683         "uxth	r6, r7\n\t"
157684 #ifdef WOLFSSL_KEIL
157685         "muls	r5, r6, r5\n\t"
157686 #elif defined(__clang__)
157687         "muls	r5, r6\n\t"
157688 #else
157689         "mul	r5, r6\n\t"
157690 #endif
157691 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157692         "lsrs	r6, r5, #16\n\t"
157693 #else
157694         "lsr	r6, r5, #16\n\t"
157695 #endif
157696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157697         "lsls	r5, r5, #16\n\t"
157698 #else
157699         "lsl	r5, r5, #16\n\t"
157700 #endif
157701 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157702         "adds	r3, r3, r5\n\t"
157703 #else
157704         "add	r3, r3, r5\n\t"
157705 #endif
157706 #ifdef WOLFSSL_KEIL
157707         "adcs	r4, r4, r6\n\t"
157708 #elif defined(__clang__)
157709         "adcs	r4, r6\n\t"
157710 #else
157711         "adc	r4, r6\n\t"
157712 #endif
157713 #ifdef WOLFSSL_KEIL
157714         "adcs	r2, r2, %[r]\n\t"
157715 #elif defined(__clang__)
157716         "adcs	r2, %[r]\n\t"
157717 #else
157718         "adc	r2, %[r]\n\t"
157719 #endif
157720 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157721         "adds	r3, r3, r5\n\t"
157722 #else
157723         "add	r3, r3, r5\n\t"
157724 #endif
157725 #ifdef WOLFSSL_KEIL
157726         "adcs	r4, r4, r6\n\t"
157727 #elif defined(__clang__)
157728         "adcs	r4, r6\n\t"
157729 #else
157730         "adc	r4, r6\n\t"
157731 #endif
157732 #ifdef WOLFSSL_KEIL
157733         "adcs	r2, r2, %[r]\n\t"
157734 #elif defined(__clang__)
157735         "adcs	r2, %[r]\n\t"
157736 #else
157737         "adc	r2, %[r]\n\t"
157738 #endif
157739         "#  A[6] * A[1]\n\t"
157740         "mov	%[a], r9\n\t"
157741         "mov	r7, r11\n\t"
157742         "ldr	%[a], [%[a], #24]\n\t"
157743         "uxth	r5, %[a]\n\t"
157744         "uxth	r6, r7\n\t"
157745 #ifdef WOLFSSL_KEIL
157746         "muls	r6, r5, r6\n\t"
157747 #elif defined(__clang__)
157748         "muls	r6, r5\n\t"
157749 #else
157750         "mul	r6, r5\n\t"
157751 #endif
157752 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157753         "adds	r3, r3, r6\n\t"
157754 #else
157755         "add	r3, r3, r6\n\t"
157756 #endif
157757 #ifdef WOLFSSL_KEIL
157758         "adcs	r4, r4, %[r]\n\t"
157759 #elif defined(__clang__)
157760         "adcs	r4, %[r]\n\t"
157761 #else
157762         "adc	r4, %[r]\n\t"
157763 #endif
157764 #ifdef WOLFSSL_KEIL
157765         "adcs	r2, r2, %[r]\n\t"
157766 #elif defined(__clang__)
157767         "adcs	r2, %[r]\n\t"
157768 #else
157769         "adc	r2, %[r]\n\t"
157770 #endif
157771 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157772         "adds	r3, r3, r6\n\t"
157773 #else
157774         "add	r3, r3, r6\n\t"
157775 #endif
157776 #ifdef WOLFSSL_KEIL
157777         "adcs	r4, r4, %[r]\n\t"
157778 #elif defined(__clang__)
157779         "adcs	r4, %[r]\n\t"
157780 #else
157781         "adc	r4, %[r]\n\t"
157782 #endif
157783 #ifdef WOLFSSL_KEIL
157784         "adcs	r2, r2, %[r]\n\t"
157785 #elif defined(__clang__)
157786         "adcs	r2, %[r]\n\t"
157787 #else
157788         "adc	r2, %[r]\n\t"
157789 #endif
157790 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157791         "lsrs	r6, r7, #16\n\t"
157792 #else
157793         "lsr	r6, r7, #16\n\t"
157794 #endif
157795 #ifdef WOLFSSL_KEIL
157796         "muls	r5, r6, r5\n\t"
157797 #elif defined(__clang__)
157798         "muls	r5, r6\n\t"
157799 #else
157800         "mul	r5, r6\n\t"
157801 #endif
157802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157803         "lsrs	r6, r5, #16\n\t"
157804 #else
157805         "lsr	r6, r5, #16\n\t"
157806 #endif
157807 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157808         "lsls	r5, r5, #16\n\t"
157809 #else
157810         "lsl	r5, r5, #16\n\t"
157811 #endif
157812 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157813         "adds	r3, r3, r5\n\t"
157814 #else
157815         "add	r3, r3, r5\n\t"
157816 #endif
157817 #ifdef WOLFSSL_KEIL
157818         "adcs	r4, r4, r6\n\t"
157819 #elif defined(__clang__)
157820         "adcs	r4, r6\n\t"
157821 #else
157822         "adc	r4, r6\n\t"
157823 #endif
157824 #ifdef WOLFSSL_KEIL
157825         "adcs	r2, r2, %[r]\n\t"
157826 #elif defined(__clang__)
157827         "adcs	r2, %[r]\n\t"
157828 #else
157829         "adc	r2, %[r]\n\t"
157830 #endif
157831 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157832         "adds	r3, r3, r5\n\t"
157833 #else
157834         "add	r3, r3, r5\n\t"
157835 #endif
157836 #ifdef WOLFSSL_KEIL
157837         "adcs	r4, r4, r6\n\t"
157838 #elif defined(__clang__)
157839         "adcs	r4, r6\n\t"
157840 #else
157841         "adc	r4, r6\n\t"
157842 #endif
157843 #ifdef WOLFSSL_KEIL
157844         "adcs	r2, r2, %[r]\n\t"
157845 #elif defined(__clang__)
157846         "adcs	r2, %[r]\n\t"
157847 #else
157848         "adc	r2, %[r]\n\t"
157849 #endif
157850 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157851         "lsrs	r5, %[a], #16\n\t"
157852 #else
157853         "lsr	r5, %[a], #16\n\t"
157854 #endif
157855 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157856         "lsrs	r6, r7, #16\n\t"
157857 #else
157858         "lsr	r6, r7, #16\n\t"
157859 #endif
157860 #ifdef WOLFSSL_KEIL
157861         "muls	r6, r5, r6\n\t"
157862 #elif defined(__clang__)
157863         "muls	r6, r5\n\t"
157864 #else
157865         "mul	r6, r5\n\t"
157866 #endif
157867 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157868         "adds	r4, r4, r6\n\t"
157869 #else
157870         "add	r4, r4, r6\n\t"
157871 #endif
157872 #ifdef WOLFSSL_KEIL
157873         "adcs	r2, r2, %[r]\n\t"
157874 #elif defined(__clang__)
157875         "adcs	r2, %[r]\n\t"
157876 #else
157877         "adc	r2, %[r]\n\t"
157878 #endif
157879 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157880         "adds	r4, r4, r6\n\t"
157881 #else
157882         "add	r4, r4, r6\n\t"
157883 #endif
157884 #ifdef WOLFSSL_KEIL
157885         "adcs	r2, r2, %[r]\n\t"
157886 #elif defined(__clang__)
157887         "adcs	r2, %[r]\n\t"
157888 #else
157889         "adc	r2, %[r]\n\t"
157890 #endif
157891         "uxth	r6, r7\n\t"
157892 #ifdef WOLFSSL_KEIL
157893         "muls	r5, r6, r5\n\t"
157894 #elif defined(__clang__)
157895         "muls	r5, r6\n\t"
157896 #else
157897         "mul	r5, r6\n\t"
157898 #endif
157899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157900         "lsrs	r6, r5, #16\n\t"
157901 #else
157902         "lsr	r6, r5, #16\n\t"
157903 #endif
157904 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157905         "lsls	r5, r5, #16\n\t"
157906 #else
157907         "lsl	r5, r5, #16\n\t"
157908 #endif
157909 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157910         "adds	r3, r3, r5\n\t"
157911 #else
157912         "add	r3, r3, r5\n\t"
157913 #endif
157914 #ifdef WOLFSSL_KEIL
157915         "adcs	r4, r4, r6\n\t"
157916 #elif defined(__clang__)
157917         "adcs	r4, r6\n\t"
157918 #else
157919         "adc	r4, r6\n\t"
157920 #endif
157921 #ifdef WOLFSSL_KEIL
157922         "adcs	r2, r2, %[r]\n\t"
157923 #elif defined(__clang__)
157924         "adcs	r2, %[r]\n\t"
157925 #else
157926         "adc	r2, %[r]\n\t"
157927 #endif
157928 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157929         "adds	r3, r3, r5\n\t"
157930 #else
157931         "add	r3, r3, r5\n\t"
157932 #endif
157933 #ifdef WOLFSSL_KEIL
157934         "adcs	r4, r4, r6\n\t"
157935 #elif defined(__clang__)
157936         "adcs	r4, r6\n\t"
157937 #else
157938         "adc	r4, r6\n\t"
157939 #endif
157940 #ifdef WOLFSSL_KEIL
157941         "adcs	r2, r2, %[r]\n\t"
157942 #elif defined(__clang__)
157943         "adcs	r2, %[r]\n\t"
157944 #else
157945         "adc	r2, %[r]\n\t"
157946 #endif
157947         "#  A[7] * A[0]\n\t"
157948         "mov	%[a], r9\n\t"
157949         "mov	r7, r10\n\t"
157950         "ldr	%[a], [%[a], #28]\n\t"
157951         "uxth	r5, %[a]\n\t"
157952         "uxth	r6, r7\n\t"
157953 #ifdef WOLFSSL_KEIL
157954         "muls	r6, r5, r6\n\t"
157955 #elif defined(__clang__)
157956         "muls	r6, r5\n\t"
157957 #else
157958         "mul	r6, r5\n\t"
157959 #endif
157960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157961         "adds	r3, r3, r6\n\t"
157962 #else
157963         "add	r3, r3, r6\n\t"
157964 #endif
157965 #ifdef WOLFSSL_KEIL
157966         "adcs	r4, r4, %[r]\n\t"
157967 #elif defined(__clang__)
157968         "adcs	r4, %[r]\n\t"
157969 #else
157970         "adc	r4, %[r]\n\t"
157971 #endif
157972 #ifdef WOLFSSL_KEIL
157973         "adcs	r2, r2, %[r]\n\t"
157974 #elif defined(__clang__)
157975         "adcs	r2, %[r]\n\t"
157976 #else
157977         "adc	r2, %[r]\n\t"
157978 #endif
157979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157980         "adds	r3, r3, r6\n\t"
157981 #else
157982         "add	r3, r3, r6\n\t"
157983 #endif
157984 #ifdef WOLFSSL_KEIL
157985         "adcs	r4, r4, %[r]\n\t"
157986 #elif defined(__clang__)
157987         "adcs	r4, %[r]\n\t"
157988 #else
157989         "adc	r4, %[r]\n\t"
157990 #endif
157991 #ifdef WOLFSSL_KEIL
157992         "adcs	r2, r2, %[r]\n\t"
157993 #elif defined(__clang__)
157994         "adcs	r2, %[r]\n\t"
157995 #else
157996         "adc	r2, %[r]\n\t"
157997 #endif
157998 #if defined(__clang__) || defined(WOLFSSL_KEIL)
157999         "lsrs	r6, r7, #16\n\t"
158000 #else
158001         "lsr	r6, r7, #16\n\t"
158002 #endif
158003 #ifdef WOLFSSL_KEIL
158004         "muls	r5, r6, r5\n\t"
158005 #elif defined(__clang__)
158006         "muls	r5, r6\n\t"
158007 #else
158008         "mul	r5, r6\n\t"
158009 #endif
158010 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158011         "lsrs	r6, r5, #16\n\t"
158012 #else
158013         "lsr	r6, r5, #16\n\t"
158014 #endif
158015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158016         "lsls	r5, r5, #16\n\t"
158017 #else
158018         "lsl	r5, r5, #16\n\t"
158019 #endif
158020 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158021         "adds	r3, r3, r5\n\t"
158022 #else
158023         "add	r3, r3, r5\n\t"
158024 #endif
158025 #ifdef WOLFSSL_KEIL
158026         "adcs	r4, r4, r6\n\t"
158027 #elif defined(__clang__)
158028         "adcs	r4, r6\n\t"
158029 #else
158030         "adc	r4, r6\n\t"
158031 #endif
158032 #ifdef WOLFSSL_KEIL
158033         "adcs	r2, r2, %[r]\n\t"
158034 #elif defined(__clang__)
158035         "adcs	r2, %[r]\n\t"
158036 #else
158037         "adc	r2, %[r]\n\t"
158038 #endif
158039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158040         "adds	r3, r3, r5\n\t"
158041 #else
158042         "add	r3, r3, r5\n\t"
158043 #endif
158044 #ifdef WOLFSSL_KEIL
158045         "adcs	r4, r4, r6\n\t"
158046 #elif defined(__clang__)
158047         "adcs	r4, r6\n\t"
158048 #else
158049         "adc	r4, r6\n\t"
158050 #endif
158051 #ifdef WOLFSSL_KEIL
158052         "adcs	r2, r2, %[r]\n\t"
158053 #elif defined(__clang__)
158054         "adcs	r2, %[r]\n\t"
158055 #else
158056         "adc	r2, %[r]\n\t"
158057 #endif
158058 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158059         "lsrs	r5, %[a], #16\n\t"
158060 #else
158061         "lsr	r5, %[a], #16\n\t"
158062 #endif
158063 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158064         "lsrs	r6, r7, #16\n\t"
158065 #else
158066         "lsr	r6, r7, #16\n\t"
158067 #endif
158068 #ifdef WOLFSSL_KEIL
158069         "muls	r6, r5, r6\n\t"
158070 #elif defined(__clang__)
158071         "muls	r6, r5\n\t"
158072 #else
158073         "mul	r6, r5\n\t"
158074 #endif
158075 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158076         "adds	r4, r4, r6\n\t"
158077 #else
158078         "add	r4, r4, r6\n\t"
158079 #endif
158080 #ifdef WOLFSSL_KEIL
158081         "adcs	r2, r2, %[r]\n\t"
158082 #elif defined(__clang__)
158083         "adcs	r2, %[r]\n\t"
158084 #else
158085         "adc	r2, %[r]\n\t"
158086 #endif
158087 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158088         "adds	r4, r4, r6\n\t"
158089 #else
158090         "add	r4, r4, r6\n\t"
158091 #endif
158092 #ifdef WOLFSSL_KEIL
158093         "adcs	r2, r2, %[r]\n\t"
158094 #elif defined(__clang__)
158095         "adcs	r2, %[r]\n\t"
158096 #else
158097         "adc	r2, %[r]\n\t"
158098 #endif
158099         "uxth	r6, r7\n\t"
158100 #ifdef WOLFSSL_KEIL
158101         "muls	r5, r6, r5\n\t"
158102 #elif defined(__clang__)
158103         "muls	r5, r6\n\t"
158104 #else
158105         "mul	r5, r6\n\t"
158106 #endif
158107 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158108         "lsrs	r6, r5, #16\n\t"
158109 #else
158110         "lsr	r6, r5, #16\n\t"
158111 #endif
158112 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158113         "lsls	r5, r5, #16\n\t"
158114 #else
158115         "lsl	r5, r5, #16\n\t"
158116 #endif
158117 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158118         "adds	r3, r3, r5\n\t"
158119 #else
158120         "add	r3, r3, r5\n\t"
158121 #endif
158122 #ifdef WOLFSSL_KEIL
158123         "adcs	r4, r4, r6\n\t"
158124 #elif defined(__clang__)
158125         "adcs	r4, r6\n\t"
158126 #else
158127         "adc	r4, r6\n\t"
158128 #endif
158129 #ifdef WOLFSSL_KEIL
158130         "adcs	r2, r2, %[r]\n\t"
158131 #elif defined(__clang__)
158132         "adcs	r2, %[r]\n\t"
158133 #else
158134         "adc	r2, %[r]\n\t"
158135 #endif
158136 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158137         "adds	r3, r3, r5\n\t"
158138 #else
158139         "add	r3, r3, r5\n\t"
158140 #endif
158141 #ifdef WOLFSSL_KEIL
158142         "adcs	r4, r4, r6\n\t"
158143 #elif defined(__clang__)
158144         "adcs	r4, r6\n\t"
158145 #else
158146         "adc	r4, r6\n\t"
158147 #endif
158148 #ifdef WOLFSSL_KEIL
158149         "adcs	r2, r2, %[r]\n\t"
158150 #elif defined(__clang__)
158151         "adcs	r2, %[r]\n\t"
158152 #else
158153         "adc	r2, %[r]\n\t"
158154 #endif
158155         "str	r3, [sp, #28]\n\t"
158156         "#  A[8] * A[0]\n\t"
158157         "movs	r3, #0\n\t"
158158         "mov	%[a], r9\n\t"
158159         "ldr	%[a], [%[a], #32]\n\t"
158160         "uxth	r5, %[a]\n\t"
158161         "uxth	r6, r7\n\t"
158162 #ifdef WOLFSSL_KEIL
158163         "muls	r6, r5, r6\n\t"
158164 #elif defined(__clang__)
158165         "muls	r6, r5\n\t"
158166 #else
158167         "mul	r6, r5\n\t"
158168 #endif
158169 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158170         "adds	r4, r4, r6\n\t"
158171 #else
158172         "add	r4, r4, r6\n\t"
158173 #endif
158174 #ifdef WOLFSSL_KEIL
158175         "adcs	r2, r2, %[r]\n\t"
158176 #elif defined(__clang__)
158177         "adcs	r2, %[r]\n\t"
158178 #else
158179         "adc	r2, %[r]\n\t"
158180 #endif
158181 #ifdef WOLFSSL_KEIL
158182         "adcs	r3, r3, %[r]\n\t"
158183 #elif defined(__clang__)
158184         "adcs	r3, %[r]\n\t"
158185 #else
158186         "adc	r3, %[r]\n\t"
158187 #endif
158188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158189         "adds	r4, r4, r6\n\t"
158190 #else
158191         "add	r4, r4, r6\n\t"
158192 #endif
158193 #ifdef WOLFSSL_KEIL
158194         "adcs	r2, r2, %[r]\n\t"
158195 #elif defined(__clang__)
158196         "adcs	r2, %[r]\n\t"
158197 #else
158198         "adc	r2, %[r]\n\t"
158199 #endif
158200 #ifdef WOLFSSL_KEIL
158201         "adcs	r3, r3, %[r]\n\t"
158202 #elif defined(__clang__)
158203         "adcs	r3, %[r]\n\t"
158204 #else
158205         "adc	r3, %[r]\n\t"
158206 #endif
158207 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158208         "lsrs	r6, r7, #16\n\t"
158209 #else
158210         "lsr	r6, r7, #16\n\t"
158211 #endif
158212 #ifdef WOLFSSL_KEIL
158213         "muls	r5, r6, r5\n\t"
158214 #elif defined(__clang__)
158215         "muls	r5, r6\n\t"
158216 #else
158217         "mul	r5, r6\n\t"
158218 #endif
158219 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158220         "lsrs	r6, r5, #16\n\t"
158221 #else
158222         "lsr	r6, r5, #16\n\t"
158223 #endif
158224 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158225         "lsls	r5, r5, #16\n\t"
158226 #else
158227         "lsl	r5, r5, #16\n\t"
158228 #endif
158229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158230         "adds	r4, r4, r5\n\t"
158231 #else
158232         "add	r4, r4, r5\n\t"
158233 #endif
158234 #ifdef WOLFSSL_KEIL
158235         "adcs	r2, r2, r6\n\t"
158236 #elif defined(__clang__)
158237         "adcs	r2, r6\n\t"
158238 #else
158239         "adc	r2, r6\n\t"
158240 #endif
158241 #ifdef WOLFSSL_KEIL
158242         "adcs	r3, r3, %[r]\n\t"
158243 #elif defined(__clang__)
158244         "adcs	r3, %[r]\n\t"
158245 #else
158246         "adc	r3, %[r]\n\t"
158247 #endif
158248 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158249         "adds	r4, r4, r5\n\t"
158250 #else
158251         "add	r4, r4, r5\n\t"
158252 #endif
158253 #ifdef WOLFSSL_KEIL
158254         "adcs	r2, r2, r6\n\t"
158255 #elif defined(__clang__)
158256         "adcs	r2, r6\n\t"
158257 #else
158258         "adc	r2, r6\n\t"
158259 #endif
158260 #ifdef WOLFSSL_KEIL
158261         "adcs	r3, r3, %[r]\n\t"
158262 #elif defined(__clang__)
158263         "adcs	r3, %[r]\n\t"
158264 #else
158265         "adc	r3, %[r]\n\t"
158266 #endif
158267 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158268         "lsrs	r5, %[a], #16\n\t"
158269 #else
158270         "lsr	r5, %[a], #16\n\t"
158271 #endif
158272 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158273         "lsrs	r6, r7, #16\n\t"
158274 #else
158275         "lsr	r6, r7, #16\n\t"
158276 #endif
158277 #ifdef WOLFSSL_KEIL
158278         "muls	r6, r5, r6\n\t"
158279 #elif defined(__clang__)
158280         "muls	r6, r5\n\t"
158281 #else
158282         "mul	r6, r5\n\t"
158283 #endif
158284 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158285         "adds	r2, r2, r6\n\t"
158286 #else
158287         "add	r2, r2, r6\n\t"
158288 #endif
158289 #ifdef WOLFSSL_KEIL
158290         "adcs	r3, r3, %[r]\n\t"
158291 #elif defined(__clang__)
158292         "adcs	r3, %[r]\n\t"
158293 #else
158294         "adc	r3, %[r]\n\t"
158295 #endif
158296 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158297         "adds	r2, r2, r6\n\t"
158298 #else
158299         "add	r2, r2, r6\n\t"
158300 #endif
158301 #ifdef WOLFSSL_KEIL
158302         "adcs	r3, r3, %[r]\n\t"
158303 #elif defined(__clang__)
158304         "adcs	r3, %[r]\n\t"
158305 #else
158306         "adc	r3, %[r]\n\t"
158307 #endif
158308         "uxth	r6, r7\n\t"
158309 #ifdef WOLFSSL_KEIL
158310         "muls	r5, r6, r5\n\t"
158311 #elif defined(__clang__)
158312         "muls	r5, r6\n\t"
158313 #else
158314         "mul	r5, r6\n\t"
158315 #endif
158316 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158317         "lsrs	r6, r5, #16\n\t"
158318 #else
158319         "lsr	r6, r5, #16\n\t"
158320 #endif
158321 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158322         "lsls	r5, r5, #16\n\t"
158323 #else
158324         "lsl	r5, r5, #16\n\t"
158325 #endif
158326 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158327         "adds	r4, r4, r5\n\t"
158328 #else
158329         "add	r4, r4, r5\n\t"
158330 #endif
158331 #ifdef WOLFSSL_KEIL
158332         "adcs	r2, r2, r6\n\t"
158333 #elif defined(__clang__)
158334         "adcs	r2, r6\n\t"
158335 #else
158336         "adc	r2, r6\n\t"
158337 #endif
158338 #ifdef WOLFSSL_KEIL
158339         "adcs	r3, r3, %[r]\n\t"
158340 #elif defined(__clang__)
158341         "adcs	r3, %[r]\n\t"
158342 #else
158343         "adc	r3, %[r]\n\t"
158344 #endif
158345 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158346         "adds	r4, r4, r5\n\t"
158347 #else
158348         "add	r4, r4, r5\n\t"
158349 #endif
158350 #ifdef WOLFSSL_KEIL
158351         "adcs	r2, r2, r6\n\t"
158352 #elif defined(__clang__)
158353         "adcs	r2, r6\n\t"
158354 #else
158355         "adc	r2, r6\n\t"
158356 #endif
158357 #ifdef WOLFSSL_KEIL
158358         "adcs	r3, r3, %[r]\n\t"
158359 #elif defined(__clang__)
158360         "adcs	r3, %[r]\n\t"
158361 #else
158362         "adc	r3, %[r]\n\t"
158363 #endif
158364         "#  A[7] * A[1]\n\t"
158365         "mov	%[a], r9\n\t"
158366         "mov	r7, r11\n\t"
158367         "ldr	%[a], [%[a], #28]\n\t"
158368         "uxth	r5, %[a]\n\t"
158369         "uxth	r6, r7\n\t"
158370 #ifdef WOLFSSL_KEIL
158371         "muls	r6, r5, r6\n\t"
158372 #elif defined(__clang__)
158373         "muls	r6, r5\n\t"
158374 #else
158375         "mul	r6, r5\n\t"
158376 #endif
158377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158378         "adds	r4, r4, r6\n\t"
158379 #else
158380         "add	r4, r4, r6\n\t"
158381 #endif
158382 #ifdef WOLFSSL_KEIL
158383         "adcs	r2, r2, %[r]\n\t"
158384 #elif defined(__clang__)
158385         "adcs	r2, %[r]\n\t"
158386 #else
158387         "adc	r2, %[r]\n\t"
158388 #endif
158389 #ifdef WOLFSSL_KEIL
158390         "adcs	r3, r3, %[r]\n\t"
158391 #elif defined(__clang__)
158392         "adcs	r3, %[r]\n\t"
158393 #else
158394         "adc	r3, %[r]\n\t"
158395 #endif
158396 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158397         "adds	r4, r4, r6\n\t"
158398 #else
158399         "add	r4, r4, r6\n\t"
158400 #endif
158401 #ifdef WOLFSSL_KEIL
158402         "adcs	r2, r2, %[r]\n\t"
158403 #elif defined(__clang__)
158404         "adcs	r2, %[r]\n\t"
158405 #else
158406         "adc	r2, %[r]\n\t"
158407 #endif
158408 #ifdef WOLFSSL_KEIL
158409         "adcs	r3, r3, %[r]\n\t"
158410 #elif defined(__clang__)
158411         "adcs	r3, %[r]\n\t"
158412 #else
158413         "adc	r3, %[r]\n\t"
158414 #endif
158415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158416         "lsrs	r6, r7, #16\n\t"
158417 #else
158418         "lsr	r6, r7, #16\n\t"
158419 #endif
158420 #ifdef WOLFSSL_KEIL
158421         "muls	r5, r6, r5\n\t"
158422 #elif defined(__clang__)
158423         "muls	r5, r6\n\t"
158424 #else
158425         "mul	r5, r6\n\t"
158426 #endif
158427 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158428         "lsrs	r6, r5, #16\n\t"
158429 #else
158430         "lsr	r6, r5, #16\n\t"
158431 #endif
158432 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158433         "lsls	r5, r5, #16\n\t"
158434 #else
158435         "lsl	r5, r5, #16\n\t"
158436 #endif
158437 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158438         "adds	r4, r4, r5\n\t"
158439 #else
158440         "add	r4, r4, r5\n\t"
158441 #endif
158442 #ifdef WOLFSSL_KEIL
158443         "adcs	r2, r2, r6\n\t"
158444 #elif defined(__clang__)
158445         "adcs	r2, r6\n\t"
158446 #else
158447         "adc	r2, r6\n\t"
158448 #endif
158449 #ifdef WOLFSSL_KEIL
158450         "adcs	r3, r3, %[r]\n\t"
158451 #elif defined(__clang__)
158452         "adcs	r3, %[r]\n\t"
158453 #else
158454         "adc	r3, %[r]\n\t"
158455 #endif
158456 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158457         "adds	r4, r4, r5\n\t"
158458 #else
158459         "add	r4, r4, r5\n\t"
158460 #endif
158461 #ifdef WOLFSSL_KEIL
158462         "adcs	r2, r2, r6\n\t"
158463 #elif defined(__clang__)
158464         "adcs	r2, r6\n\t"
158465 #else
158466         "adc	r2, r6\n\t"
158467 #endif
158468 #ifdef WOLFSSL_KEIL
158469         "adcs	r3, r3, %[r]\n\t"
158470 #elif defined(__clang__)
158471         "adcs	r3, %[r]\n\t"
158472 #else
158473         "adc	r3, %[r]\n\t"
158474 #endif
158475 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158476         "lsrs	r5, %[a], #16\n\t"
158477 #else
158478         "lsr	r5, %[a], #16\n\t"
158479 #endif
158480 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158481         "lsrs	r6, r7, #16\n\t"
158482 #else
158483         "lsr	r6, r7, #16\n\t"
158484 #endif
158485 #ifdef WOLFSSL_KEIL
158486         "muls	r6, r5, r6\n\t"
158487 #elif defined(__clang__)
158488         "muls	r6, r5\n\t"
158489 #else
158490         "mul	r6, r5\n\t"
158491 #endif
158492 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158493         "adds	r2, r2, r6\n\t"
158494 #else
158495         "add	r2, r2, r6\n\t"
158496 #endif
158497 #ifdef WOLFSSL_KEIL
158498         "adcs	r3, r3, %[r]\n\t"
158499 #elif defined(__clang__)
158500         "adcs	r3, %[r]\n\t"
158501 #else
158502         "adc	r3, %[r]\n\t"
158503 #endif
158504 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158505         "adds	r2, r2, r6\n\t"
158506 #else
158507         "add	r2, r2, r6\n\t"
158508 #endif
158509 #ifdef WOLFSSL_KEIL
158510         "adcs	r3, r3, %[r]\n\t"
158511 #elif defined(__clang__)
158512         "adcs	r3, %[r]\n\t"
158513 #else
158514         "adc	r3, %[r]\n\t"
158515 #endif
158516         "uxth	r6, r7\n\t"
158517 #ifdef WOLFSSL_KEIL
158518         "muls	r5, r6, r5\n\t"
158519 #elif defined(__clang__)
158520         "muls	r5, r6\n\t"
158521 #else
158522         "mul	r5, r6\n\t"
158523 #endif
158524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158525         "lsrs	r6, r5, #16\n\t"
158526 #else
158527         "lsr	r6, r5, #16\n\t"
158528 #endif
158529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158530         "lsls	r5, r5, #16\n\t"
158531 #else
158532         "lsl	r5, r5, #16\n\t"
158533 #endif
158534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158535         "adds	r4, r4, r5\n\t"
158536 #else
158537         "add	r4, r4, r5\n\t"
158538 #endif
158539 #ifdef WOLFSSL_KEIL
158540         "adcs	r2, r2, r6\n\t"
158541 #elif defined(__clang__)
158542         "adcs	r2, r6\n\t"
158543 #else
158544         "adc	r2, r6\n\t"
158545 #endif
158546 #ifdef WOLFSSL_KEIL
158547         "adcs	r3, r3, %[r]\n\t"
158548 #elif defined(__clang__)
158549         "adcs	r3, %[r]\n\t"
158550 #else
158551         "adc	r3, %[r]\n\t"
158552 #endif
158553 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158554         "adds	r4, r4, r5\n\t"
158555 #else
158556         "add	r4, r4, r5\n\t"
158557 #endif
158558 #ifdef WOLFSSL_KEIL
158559         "adcs	r2, r2, r6\n\t"
158560 #elif defined(__clang__)
158561         "adcs	r2, r6\n\t"
158562 #else
158563         "adc	r2, r6\n\t"
158564 #endif
158565 #ifdef WOLFSSL_KEIL
158566         "adcs	r3, r3, %[r]\n\t"
158567 #elif defined(__clang__)
158568         "adcs	r3, %[r]\n\t"
158569 #else
158570         "adc	r3, %[r]\n\t"
158571 #endif
158572         "#  A[6] * A[2]\n\t"
158573         "mov	%[a], r9\n\t"
158574         "mov	r7, r12\n\t"
158575         "ldr	%[a], [%[a], #24]\n\t"
158576         "uxth	r5, %[a]\n\t"
158577         "uxth	r6, r7\n\t"
158578 #ifdef WOLFSSL_KEIL
158579         "muls	r6, r5, r6\n\t"
158580 #elif defined(__clang__)
158581         "muls	r6, r5\n\t"
158582 #else
158583         "mul	r6, r5\n\t"
158584 #endif
158585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158586         "adds	r4, r4, r6\n\t"
158587 #else
158588         "add	r4, r4, r6\n\t"
158589 #endif
158590 #ifdef WOLFSSL_KEIL
158591         "adcs	r2, r2, %[r]\n\t"
158592 #elif defined(__clang__)
158593         "adcs	r2, %[r]\n\t"
158594 #else
158595         "adc	r2, %[r]\n\t"
158596 #endif
158597 #ifdef WOLFSSL_KEIL
158598         "adcs	r3, r3, %[r]\n\t"
158599 #elif defined(__clang__)
158600         "adcs	r3, %[r]\n\t"
158601 #else
158602         "adc	r3, %[r]\n\t"
158603 #endif
158604 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158605         "adds	r4, r4, r6\n\t"
158606 #else
158607         "add	r4, r4, r6\n\t"
158608 #endif
158609 #ifdef WOLFSSL_KEIL
158610         "adcs	r2, r2, %[r]\n\t"
158611 #elif defined(__clang__)
158612         "adcs	r2, %[r]\n\t"
158613 #else
158614         "adc	r2, %[r]\n\t"
158615 #endif
158616 #ifdef WOLFSSL_KEIL
158617         "adcs	r3, r3, %[r]\n\t"
158618 #elif defined(__clang__)
158619         "adcs	r3, %[r]\n\t"
158620 #else
158621         "adc	r3, %[r]\n\t"
158622 #endif
158623 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158624         "lsrs	r6, r7, #16\n\t"
158625 #else
158626         "lsr	r6, r7, #16\n\t"
158627 #endif
158628 #ifdef WOLFSSL_KEIL
158629         "muls	r5, r6, r5\n\t"
158630 #elif defined(__clang__)
158631         "muls	r5, r6\n\t"
158632 #else
158633         "mul	r5, r6\n\t"
158634 #endif
158635 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158636         "lsrs	r6, r5, #16\n\t"
158637 #else
158638         "lsr	r6, r5, #16\n\t"
158639 #endif
158640 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158641         "lsls	r5, r5, #16\n\t"
158642 #else
158643         "lsl	r5, r5, #16\n\t"
158644 #endif
158645 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158646         "adds	r4, r4, r5\n\t"
158647 #else
158648         "add	r4, r4, r5\n\t"
158649 #endif
158650 #ifdef WOLFSSL_KEIL
158651         "adcs	r2, r2, r6\n\t"
158652 #elif defined(__clang__)
158653         "adcs	r2, r6\n\t"
158654 #else
158655         "adc	r2, r6\n\t"
158656 #endif
158657 #ifdef WOLFSSL_KEIL
158658         "adcs	r3, r3, %[r]\n\t"
158659 #elif defined(__clang__)
158660         "adcs	r3, %[r]\n\t"
158661 #else
158662         "adc	r3, %[r]\n\t"
158663 #endif
158664 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158665         "adds	r4, r4, r5\n\t"
158666 #else
158667         "add	r4, r4, r5\n\t"
158668 #endif
158669 #ifdef WOLFSSL_KEIL
158670         "adcs	r2, r2, r6\n\t"
158671 #elif defined(__clang__)
158672         "adcs	r2, r6\n\t"
158673 #else
158674         "adc	r2, r6\n\t"
158675 #endif
158676 #ifdef WOLFSSL_KEIL
158677         "adcs	r3, r3, %[r]\n\t"
158678 #elif defined(__clang__)
158679         "adcs	r3, %[r]\n\t"
158680 #else
158681         "adc	r3, %[r]\n\t"
158682 #endif
158683 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158684         "lsrs	r5, %[a], #16\n\t"
158685 #else
158686         "lsr	r5, %[a], #16\n\t"
158687 #endif
158688 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158689         "lsrs	r6, r7, #16\n\t"
158690 #else
158691         "lsr	r6, r7, #16\n\t"
158692 #endif
158693 #ifdef WOLFSSL_KEIL
158694         "muls	r6, r5, r6\n\t"
158695 #elif defined(__clang__)
158696         "muls	r6, r5\n\t"
158697 #else
158698         "mul	r6, r5\n\t"
158699 #endif
158700 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158701         "adds	r2, r2, r6\n\t"
158702 #else
158703         "add	r2, r2, r6\n\t"
158704 #endif
158705 #ifdef WOLFSSL_KEIL
158706         "adcs	r3, r3, %[r]\n\t"
158707 #elif defined(__clang__)
158708         "adcs	r3, %[r]\n\t"
158709 #else
158710         "adc	r3, %[r]\n\t"
158711 #endif
158712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158713         "adds	r2, r2, r6\n\t"
158714 #else
158715         "add	r2, r2, r6\n\t"
158716 #endif
158717 #ifdef WOLFSSL_KEIL
158718         "adcs	r3, r3, %[r]\n\t"
158719 #elif defined(__clang__)
158720         "adcs	r3, %[r]\n\t"
158721 #else
158722         "adc	r3, %[r]\n\t"
158723 #endif
158724         "uxth	r6, r7\n\t"
158725 #ifdef WOLFSSL_KEIL
158726         "muls	r5, r6, r5\n\t"
158727 #elif defined(__clang__)
158728         "muls	r5, r6\n\t"
158729 #else
158730         "mul	r5, r6\n\t"
158731 #endif
158732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158733         "lsrs	r6, r5, #16\n\t"
158734 #else
158735         "lsr	r6, r5, #16\n\t"
158736 #endif
158737 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158738         "lsls	r5, r5, #16\n\t"
158739 #else
158740         "lsl	r5, r5, #16\n\t"
158741 #endif
158742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158743         "adds	r4, r4, r5\n\t"
158744 #else
158745         "add	r4, r4, r5\n\t"
158746 #endif
158747 #ifdef WOLFSSL_KEIL
158748         "adcs	r2, r2, r6\n\t"
158749 #elif defined(__clang__)
158750         "adcs	r2, r6\n\t"
158751 #else
158752         "adc	r2, r6\n\t"
158753 #endif
158754 #ifdef WOLFSSL_KEIL
158755         "adcs	r3, r3, %[r]\n\t"
158756 #elif defined(__clang__)
158757         "adcs	r3, %[r]\n\t"
158758 #else
158759         "adc	r3, %[r]\n\t"
158760 #endif
158761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158762         "adds	r4, r4, r5\n\t"
158763 #else
158764         "add	r4, r4, r5\n\t"
158765 #endif
158766 #ifdef WOLFSSL_KEIL
158767         "adcs	r2, r2, r6\n\t"
158768 #elif defined(__clang__)
158769         "adcs	r2, r6\n\t"
158770 #else
158771         "adc	r2, r6\n\t"
158772 #endif
158773 #ifdef WOLFSSL_KEIL
158774         "adcs	r3, r3, %[r]\n\t"
158775 #elif defined(__clang__)
158776         "adcs	r3, %[r]\n\t"
158777 #else
158778         "adc	r3, %[r]\n\t"
158779 #endif
158780         "#  A[5] * A[3]\n\t"
158781         "mov	%[a], r9\n\t"
158782         "mov	r7, lr\n\t"
158783         "ldr	%[a], [%[a], #20]\n\t"
158784         "uxth	r5, %[a]\n\t"
158785         "uxth	r6, r7\n\t"
158786 #ifdef WOLFSSL_KEIL
158787         "muls	r6, r5, r6\n\t"
158788 #elif defined(__clang__)
158789         "muls	r6, r5\n\t"
158790 #else
158791         "mul	r6, r5\n\t"
158792 #endif
158793 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158794         "adds	r4, r4, r6\n\t"
158795 #else
158796         "add	r4, r4, r6\n\t"
158797 #endif
158798 #ifdef WOLFSSL_KEIL
158799         "adcs	r2, r2, %[r]\n\t"
158800 #elif defined(__clang__)
158801         "adcs	r2, %[r]\n\t"
158802 #else
158803         "adc	r2, %[r]\n\t"
158804 #endif
158805 #ifdef WOLFSSL_KEIL
158806         "adcs	r3, r3, %[r]\n\t"
158807 #elif defined(__clang__)
158808         "adcs	r3, %[r]\n\t"
158809 #else
158810         "adc	r3, %[r]\n\t"
158811 #endif
158812 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158813         "adds	r4, r4, r6\n\t"
158814 #else
158815         "add	r4, r4, r6\n\t"
158816 #endif
158817 #ifdef WOLFSSL_KEIL
158818         "adcs	r2, r2, %[r]\n\t"
158819 #elif defined(__clang__)
158820         "adcs	r2, %[r]\n\t"
158821 #else
158822         "adc	r2, %[r]\n\t"
158823 #endif
158824 #ifdef WOLFSSL_KEIL
158825         "adcs	r3, r3, %[r]\n\t"
158826 #elif defined(__clang__)
158827         "adcs	r3, %[r]\n\t"
158828 #else
158829         "adc	r3, %[r]\n\t"
158830 #endif
158831 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158832         "lsrs	r6, r7, #16\n\t"
158833 #else
158834         "lsr	r6, r7, #16\n\t"
158835 #endif
158836 #ifdef WOLFSSL_KEIL
158837         "muls	r5, r6, r5\n\t"
158838 #elif defined(__clang__)
158839         "muls	r5, r6\n\t"
158840 #else
158841         "mul	r5, r6\n\t"
158842 #endif
158843 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158844         "lsrs	r6, r5, #16\n\t"
158845 #else
158846         "lsr	r6, r5, #16\n\t"
158847 #endif
158848 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158849         "lsls	r5, r5, #16\n\t"
158850 #else
158851         "lsl	r5, r5, #16\n\t"
158852 #endif
158853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158854         "adds	r4, r4, r5\n\t"
158855 #else
158856         "add	r4, r4, r5\n\t"
158857 #endif
158858 #ifdef WOLFSSL_KEIL
158859         "adcs	r2, r2, r6\n\t"
158860 #elif defined(__clang__)
158861         "adcs	r2, r6\n\t"
158862 #else
158863         "adc	r2, r6\n\t"
158864 #endif
158865 #ifdef WOLFSSL_KEIL
158866         "adcs	r3, r3, %[r]\n\t"
158867 #elif defined(__clang__)
158868         "adcs	r3, %[r]\n\t"
158869 #else
158870         "adc	r3, %[r]\n\t"
158871 #endif
158872 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158873         "adds	r4, r4, r5\n\t"
158874 #else
158875         "add	r4, r4, r5\n\t"
158876 #endif
158877 #ifdef WOLFSSL_KEIL
158878         "adcs	r2, r2, r6\n\t"
158879 #elif defined(__clang__)
158880         "adcs	r2, r6\n\t"
158881 #else
158882         "adc	r2, r6\n\t"
158883 #endif
158884 #ifdef WOLFSSL_KEIL
158885         "adcs	r3, r3, %[r]\n\t"
158886 #elif defined(__clang__)
158887         "adcs	r3, %[r]\n\t"
158888 #else
158889         "adc	r3, %[r]\n\t"
158890 #endif
158891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158892         "lsrs	r5, %[a], #16\n\t"
158893 #else
158894         "lsr	r5, %[a], #16\n\t"
158895 #endif
158896 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158897         "lsrs	r6, r7, #16\n\t"
158898 #else
158899         "lsr	r6, r7, #16\n\t"
158900 #endif
158901 #ifdef WOLFSSL_KEIL
158902         "muls	r6, r5, r6\n\t"
158903 #elif defined(__clang__)
158904         "muls	r6, r5\n\t"
158905 #else
158906         "mul	r6, r5\n\t"
158907 #endif
158908 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158909         "adds	r2, r2, r6\n\t"
158910 #else
158911         "add	r2, r2, r6\n\t"
158912 #endif
158913 #ifdef WOLFSSL_KEIL
158914         "adcs	r3, r3, %[r]\n\t"
158915 #elif defined(__clang__)
158916         "adcs	r3, %[r]\n\t"
158917 #else
158918         "adc	r3, %[r]\n\t"
158919 #endif
158920 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158921         "adds	r2, r2, r6\n\t"
158922 #else
158923         "add	r2, r2, r6\n\t"
158924 #endif
158925 #ifdef WOLFSSL_KEIL
158926         "adcs	r3, r3, %[r]\n\t"
158927 #elif defined(__clang__)
158928         "adcs	r3, %[r]\n\t"
158929 #else
158930         "adc	r3, %[r]\n\t"
158931 #endif
158932         "uxth	r6, r7\n\t"
158933 #ifdef WOLFSSL_KEIL
158934         "muls	r5, r6, r5\n\t"
158935 #elif defined(__clang__)
158936         "muls	r5, r6\n\t"
158937 #else
158938         "mul	r5, r6\n\t"
158939 #endif
158940 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158941         "lsrs	r6, r5, #16\n\t"
158942 #else
158943         "lsr	r6, r5, #16\n\t"
158944 #endif
158945 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158946         "lsls	r5, r5, #16\n\t"
158947 #else
158948         "lsl	r5, r5, #16\n\t"
158949 #endif
158950 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158951         "adds	r4, r4, r5\n\t"
158952 #else
158953         "add	r4, r4, r5\n\t"
158954 #endif
158955 #ifdef WOLFSSL_KEIL
158956         "adcs	r2, r2, r6\n\t"
158957 #elif defined(__clang__)
158958         "adcs	r2, r6\n\t"
158959 #else
158960         "adc	r2, r6\n\t"
158961 #endif
158962 #ifdef WOLFSSL_KEIL
158963         "adcs	r3, r3, %[r]\n\t"
158964 #elif defined(__clang__)
158965         "adcs	r3, %[r]\n\t"
158966 #else
158967         "adc	r3, %[r]\n\t"
158968 #endif
158969 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158970         "adds	r4, r4, r5\n\t"
158971 #else
158972         "add	r4, r4, r5\n\t"
158973 #endif
158974 #ifdef WOLFSSL_KEIL
158975         "adcs	r2, r2, r6\n\t"
158976 #elif defined(__clang__)
158977         "adcs	r2, r6\n\t"
158978 #else
158979         "adc	r2, r6\n\t"
158980 #endif
158981 #ifdef WOLFSSL_KEIL
158982         "adcs	r3, r3, %[r]\n\t"
158983 #elif defined(__clang__)
158984         "adcs	r3, %[r]\n\t"
158985 #else
158986         "adc	r3, %[r]\n\t"
158987 #endif
158988         "#  A[4] * A[4]\n\t"
158989         "mov	%[a], r9\n\t"
158990         "ldr	r7, [%[a], #16]\n\t"
158991 #if defined(__clang__) || defined(WOLFSSL_KEIL)
158992         "lsrs	r6, r7, #16\n\t"
158993 #else
158994         "lsr	r6, r7, #16\n\t"
158995 #endif
158996         "uxth	r5, r7\n\t"
158997 #ifdef WOLFSSL_KEIL
158998         "muls	r5, r5, r5\n\t"
158999 #elif defined(__clang__)
159000         "muls	r5, r5\n\t"
159001 #else
159002         "mul	r5, r5\n\t"
159003 #endif
159004 #ifdef WOLFSSL_KEIL
159005         "muls	r6, r6, r6\n\t"
159006 #elif defined(__clang__)
159007         "muls	r6, r6\n\t"
159008 #else
159009         "mul	r6, r6\n\t"
159010 #endif
159011 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159012         "adds	r4, r4, r5\n\t"
159013 #else
159014         "add	r4, r4, r5\n\t"
159015 #endif
159016 #ifdef WOLFSSL_KEIL
159017         "adcs	r2, r2, r6\n\t"
159018 #elif defined(__clang__)
159019         "adcs	r2, r6\n\t"
159020 #else
159021         "adc	r2, r6\n\t"
159022 #endif
159023 #ifdef WOLFSSL_KEIL
159024         "adcs	r3, r3, %[r]\n\t"
159025 #elif defined(__clang__)
159026         "adcs	r3, %[r]\n\t"
159027 #else
159028         "adc	r3, %[r]\n\t"
159029 #endif
159030 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159031         "lsrs	r6, r7, #16\n\t"
159032 #else
159033         "lsr	r6, r7, #16\n\t"
159034 #endif
159035         "uxth	r5, r7\n\t"
159036 #ifdef WOLFSSL_KEIL
159037         "muls	r5, r6, r5\n\t"
159038 #elif defined(__clang__)
159039         "muls	r5, r6\n\t"
159040 #else
159041         "mul	r5, r6\n\t"
159042 #endif
159043 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159044         "lsrs	r6, r5, #15\n\t"
159045 #else
159046         "lsr	r6, r5, #15\n\t"
159047 #endif
159048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159049         "lsls	r5, r5, #17\n\t"
159050 #else
159051         "lsl	r5, r5, #17\n\t"
159052 #endif
159053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159054         "adds	r4, r4, r5\n\t"
159055 #else
159056         "add	r4, r4, r5\n\t"
159057 #endif
159058 #ifdef WOLFSSL_KEIL
159059         "adcs	r2, r2, r6\n\t"
159060 #elif defined(__clang__)
159061         "adcs	r2, r6\n\t"
159062 #else
159063         "adc	r2, r6\n\t"
159064 #endif
159065 #ifdef WOLFSSL_KEIL
159066         "adcs	r3, r3, %[r]\n\t"
159067 #elif defined(__clang__)
159068         "adcs	r3, %[r]\n\t"
159069 #else
159070         "adc	r3, %[r]\n\t"
159071 #endif
159072         "str	r4, [sp, #32]\n\t"
159073         "#  A[5] * A[4]\n\t"
159074         "movs	r4, #0\n\t"
159075         "ldr	%[a], [%[a], #20]\n\t"
159076         "uxth	r5, %[a]\n\t"
159077         "uxth	r6, r7\n\t"
159078 #ifdef WOLFSSL_KEIL
159079         "muls	r6, r5, r6\n\t"
159080 #elif defined(__clang__)
159081         "muls	r6, r5\n\t"
159082 #else
159083         "mul	r6, r5\n\t"
159084 #endif
159085 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159086         "adds	r2, r2, r6\n\t"
159087 #else
159088         "add	r2, r2, r6\n\t"
159089 #endif
159090 #ifdef WOLFSSL_KEIL
159091         "adcs	r3, r3, %[r]\n\t"
159092 #elif defined(__clang__)
159093         "adcs	r3, %[r]\n\t"
159094 #else
159095         "adc	r3, %[r]\n\t"
159096 #endif
159097 #ifdef WOLFSSL_KEIL
159098         "adcs	r4, r4, %[r]\n\t"
159099 #elif defined(__clang__)
159100         "adcs	r4, %[r]\n\t"
159101 #else
159102         "adc	r4, %[r]\n\t"
159103 #endif
159104 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159105         "adds	r2, r2, r6\n\t"
159106 #else
159107         "add	r2, r2, r6\n\t"
159108 #endif
159109 #ifdef WOLFSSL_KEIL
159110         "adcs	r3, r3, %[r]\n\t"
159111 #elif defined(__clang__)
159112         "adcs	r3, %[r]\n\t"
159113 #else
159114         "adc	r3, %[r]\n\t"
159115 #endif
159116 #ifdef WOLFSSL_KEIL
159117         "adcs	r4, r4, %[r]\n\t"
159118 #elif defined(__clang__)
159119         "adcs	r4, %[r]\n\t"
159120 #else
159121         "adc	r4, %[r]\n\t"
159122 #endif
159123 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159124         "lsrs	r6, r7, #16\n\t"
159125 #else
159126         "lsr	r6, r7, #16\n\t"
159127 #endif
159128 #ifdef WOLFSSL_KEIL
159129         "muls	r5, r6, r5\n\t"
159130 #elif defined(__clang__)
159131         "muls	r5, r6\n\t"
159132 #else
159133         "mul	r5, r6\n\t"
159134 #endif
159135 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159136         "lsrs	r6, r5, #16\n\t"
159137 #else
159138         "lsr	r6, r5, #16\n\t"
159139 #endif
159140 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159141         "lsls	r5, r5, #16\n\t"
159142 #else
159143         "lsl	r5, r5, #16\n\t"
159144 #endif
159145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159146         "adds	r2, r2, r5\n\t"
159147 #else
159148         "add	r2, r2, r5\n\t"
159149 #endif
159150 #ifdef WOLFSSL_KEIL
159151         "adcs	r3, r3, r6\n\t"
159152 #elif defined(__clang__)
159153         "adcs	r3, r6\n\t"
159154 #else
159155         "adc	r3, r6\n\t"
159156 #endif
159157 #ifdef WOLFSSL_KEIL
159158         "adcs	r4, r4, %[r]\n\t"
159159 #elif defined(__clang__)
159160         "adcs	r4, %[r]\n\t"
159161 #else
159162         "adc	r4, %[r]\n\t"
159163 #endif
159164 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159165         "adds	r2, r2, r5\n\t"
159166 #else
159167         "add	r2, r2, r5\n\t"
159168 #endif
159169 #ifdef WOLFSSL_KEIL
159170         "adcs	r3, r3, r6\n\t"
159171 #elif defined(__clang__)
159172         "adcs	r3, r6\n\t"
159173 #else
159174         "adc	r3, r6\n\t"
159175 #endif
159176 #ifdef WOLFSSL_KEIL
159177         "adcs	r4, r4, %[r]\n\t"
159178 #elif defined(__clang__)
159179         "adcs	r4, %[r]\n\t"
159180 #else
159181         "adc	r4, %[r]\n\t"
159182 #endif
159183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159184         "lsrs	r5, %[a], #16\n\t"
159185 #else
159186         "lsr	r5, %[a], #16\n\t"
159187 #endif
159188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159189         "lsrs	r6, r7, #16\n\t"
159190 #else
159191         "lsr	r6, r7, #16\n\t"
159192 #endif
159193 #ifdef WOLFSSL_KEIL
159194         "muls	r6, r5, r6\n\t"
159195 #elif defined(__clang__)
159196         "muls	r6, r5\n\t"
159197 #else
159198         "mul	r6, r5\n\t"
159199 #endif
159200 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159201         "adds	r3, r3, r6\n\t"
159202 #else
159203         "add	r3, r3, r6\n\t"
159204 #endif
159205 #ifdef WOLFSSL_KEIL
159206         "adcs	r4, r4, %[r]\n\t"
159207 #elif defined(__clang__)
159208         "adcs	r4, %[r]\n\t"
159209 #else
159210         "adc	r4, %[r]\n\t"
159211 #endif
159212 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159213         "adds	r3, r3, r6\n\t"
159214 #else
159215         "add	r3, r3, r6\n\t"
159216 #endif
159217 #ifdef WOLFSSL_KEIL
159218         "adcs	r4, r4, %[r]\n\t"
159219 #elif defined(__clang__)
159220         "adcs	r4, %[r]\n\t"
159221 #else
159222         "adc	r4, %[r]\n\t"
159223 #endif
159224         "uxth	r6, r7\n\t"
159225 #ifdef WOLFSSL_KEIL
159226         "muls	r5, r6, r5\n\t"
159227 #elif defined(__clang__)
159228         "muls	r5, r6\n\t"
159229 #else
159230         "mul	r5, r6\n\t"
159231 #endif
159232 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159233         "lsrs	r6, r5, #16\n\t"
159234 #else
159235         "lsr	r6, r5, #16\n\t"
159236 #endif
159237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159238         "lsls	r5, r5, #16\n\t"
159239 #else
159240         "lsl	r5, r5, #16\n\t"
159241 #endif
159242 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159243         "adds	r2, r2, r5\n\t"
159244 #else
159245         "add	r2, r2, r5\n\t"
159246 #endif
159247 #ifdef WOLFSSL_KEIL
159248         "adcs	r3, r3, r6\n\t"
159249 #elif defined(__clang__)
159250         "adcs	r3, r6\n\t"
159251 #else
159252         "adc	r3, r6\n\t"
159253 #endif
159254 #ifdef WOLFSSL_KEIL
159255         "adcs	r4, r4, %[r]\n\t"
159256 #elif defined(__clang__)
159257         "adcs	r4, %[r]\n\t"
159258 #else
159259         "adc	r4, %[r]\n\t"
159260 #endif
159261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159262         "adds	r2, r2, r5\n\t"
159263 #else
159264         "add	r2, r2, r5\n\t"
159265 #endif
159266 #ifdef WOLFSSL_KEIL
159267         "adcs	r3, r3, r6\n\t"
159268 #elif defined(__clang__)
159269         "adcs	r3, r6\n\t"
159270 #else
159271         "adc	r3, r6\n\t"
159272 #endif
159273 #ifdef WOLFSSL_KEIL
159274         "adcs	r4, r4, %[r]\n\t"
159275 #elif defined(__clang__)
159276         "adcs	r4, %[r]\n\t"
159277 #else
159278         "adc	r4, %[r]\n\t"
159279 #endif
159280         "#  A[6] * A[3]\n\t"
159281         "mov	%[a], r9\n\t"
159282         "mov	r7, lr\n\t"
159283         "ldr	%[a], [%[a], #24]\n\t"
159284         "uxth	r5, %[a]\n\t"
159285         "uxth	r6, r7\n\t"
159286 #ifdef WOLFSSL_KEIL
159287         "muls	r6, r5, r6\n\t"
159288 #elif defined(__clang__)
159289         "muls	r6, r5\n\t"
159290 #else
159291         "mul	r6, r5\n\t"
159292 #endif
159293 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159294         "adds	r2, r2, r6\n\t"
159295 #else
159296         "add	r2, r2, r6\n\t"
159297 #endif
159298 #ifdef WOLFSSL_KEIL
159299         "adcs	r3, r3, %[r]\n\t"
159300 #elif defined(__clang__)
159301         "adcs	r3, %[r]\n\t"
159302 #else
159303         "adc	r3, %[r]\n\t"
159304 #endif
159305 #ifdef WOLFSSL_KEIL
159306         "adcs	r4, r4, %[r]\n\t"
159307 #elif defined(__clang__)
159308         "adcs	r4, %[r]\n\t"
159309 #else
159310         "adc	r4, %[r]\n\t"
159311 #endif
159312 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159313         "adds	r2, r2, r6\n\t"
159314 #else
159315         "add	r2, r2, r6\n\t"
159316 #endif
159317 #ifdef WOLFSSL_KEIL
159318         "adcs	r3, r3, %[r]\n\t"
159319 #elif defined(__clang__)
159320         "adcs	r3, %[r]\n\t"
159321 #else
159322         "adc	r3, %[r]\n\t"
159323 #endif
159324 #ifdef WOLFSSL_KEIL
159325         "adcs	r4, r4, %[r]\n\t"
159326 #elif defined(__clang__)
159327         "adcs	r4, %[r]\n\t"
159328 #else
159329         "adc	r4, %[r]\n\t"
159330 #endif
159331 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159332         "lsrs	r6, r7, #16\n\t"
159333 #else
159334         "lsr	r6, r7, #16\n\t"
159335 #endif
159336 #ifdef WOLFSSL_KEIL
159337         "muls	r5, r6, r5\n\t"
159338 #elif defined(__clang__)
159339         "muls	r5, r6\n\t"
159340 #else
159341         "mul	r5, r6\n\t"
159342 #endif
159343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159344         "lsrs	r6, r5, #16\n\t"
159345 #else
159346         "lsr	r6, r5, #16\n\t"
159347 #endif
159348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159349         "lsls	r5, r5, #16\n\t"
159350 #else
159351         "lsl	r5, r5, #16\n\t"
159352 #endif
159353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159354         "adds	r2, r2, r5\n\t"
159355 #else
159356         "add	r2, r2, r5\n\t"
159357 #endif
159358 #ifdef WOLFSSL_KEIL
159359         "adcs	r3, r3, r6\n\t"
159360 #elif defined(__clang__)
159361         "adcs	r3, r6\n\t"
159362 #else
159363         "adc	r3, r6\n\t"
159364 #endif
159365 #ifdef WOLFSSL_KEIL
159366         "adcs	r4, r4, %[r]\n\t"
159367 #elif defined(__clang__)
159368         "adcs	r4, %[r]\n\t"
159369 #else
159370         "adc	r4, %[r]\n\t"
159371 #endif
159372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159373         "adds	r2, r2, r5\n\t"
159374 #else
159375         "add	r2, r2, r5\n\t"
159376 #endif
159377 #ifdef WOLFSSL_KEIL
159378         "adcs	r3, r3, r6\n\t"
159379 #elif defined(__clang__)
159380         "adcs	r3, r6\n\t"
159381 #else
159382         "adc	r3, r6\n\t"
159383 #endif
159384 #ifdef WOLFSSL_KEIL
159385         "adcs	r4, r4, %[r]\n\t"
159386 #elif defined(__clang__)
159387         "adcs	r4, %[r]\n\t"
159388 #else
159389         "adc	r4, %[r]\n\t"
159390 #endif
159391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159392         "lsrs	r5, %[a], #16\n\t"
159393 #else
159394         "lsr	r5, %[a], #16\n\t"
159395 #endif
159396 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159397         "lsrs	r6, r7, #16\n\t"
159398 #else
159399         "lsr	r6, r7, #16\n\t"
159400 #endif
159401 #ifdef WOLFSSL_KEIL
159402         "muls	r6, r5, r6\n\t"
159403 #elif defined(__clang__)
159404         "muls	r6, r5\n\t"
159405 #else
159406         "mul	r6, r5\n\t"
159407 #endif
159408 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159409         "adds	r3, r3, r6\n\t"
159410 #else
159411         "add	r3, r3, r6\n\t"
159412 #endif
159413 #ifdef WOLFSSL_KEIL
159414         "adcs	r4, r4, %[r]\n\t"
159415 #elif defined(__clang__)
159416         "adcs	r4, %[r]\n\t"
159417 #else
159418         "adc	r4, %[r]\n\t"
159419 #endif
159420 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159421         "adds	r3, r3, r6\n\t"
159422 #else
159423         "add	r3, r3, r6\n\t"
159424 #endif
159425 #ifdef WOLFSSL_KEIL
159426         "adcs	r4, r4, %[r]\n\t"
159427 #elif defined(__clang__)
159428         "adcs	r4, %[r]\n\t"
159429 #else
159430         "adc	r4, %[r]\n\t"
159431 #endif
159432         "uxth	r6, r7\n\t"
159433 #ifdef WOLFSSL_KEIL
159434         "muls	r5, r6, r5\n\t"
159435 #elif defined(__clang__)
159436         "muls	r5, r6\n\t"
159437 #else
159438         "mul	r5, r6\n\t"
159439 #endif
159440 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159441         "lsrs	r6, r5, #16\n\t"
159442 #else
159443         "lsr	r6, r5, #16\n\t"
159444 #endif
159445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159446         "lsls	r5, r5, #16\n\t"
159447 #else
159448         "lsl	r5, r5, #16\n\t"
159449 #endif
159450 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159451         "adds	r2, r2, r5\n\t"
159452 #else
159453         "add	r2, r2, r5\n\t"
159454 #endif
159455 #ifdef WOLFSSL_KEIL
159456         "adcs	r3, r3, r6\n\t"
159457 #elif defined(__clang__)
159458         "adcs	r3, r6\n\t"
159459 #else
159460         "adc	r3, r6\n\t"
159461 #endif
159462 #ifdef WOLFSSL_KEIL
159463         "adcs	r4, r4, %[r]\n\t"
159464 #elif defined(__clang__)
159465         "adcs	r4, %[r]\n\t"
159466 #else
159467         "adc	r4, %[r]\n\t"
159468 #endif
159469 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159470         "adds	r2, r2, r5\n\t"
159471 #else
159472         "add	r2, r2, r5\n\t"
159473 #endif
159474 #ifdef WOLFSSL_KEIL
159475         "adcs	r3, r3, r6\n\t"
159476 #elif defined(__clang__)
159477         "adcs	r3, r6\n\t"
159478 #else
159479         "adc	r3, r6\n\t"
159480 #endif
159481 #ifdef WOLFSSL_KEIL
159482         "adcs	r4, r4, %[r]\n\t"
159483 #elif defined(__clang__)
159484         "adcs	r4, %[r]\n\t"
159485 #else
159486         "adc	r4, %[r]\n\t"
159487 #endif
159488         "#  A[7] * A[2]\n\t"
159489         "mov	%[a], r9\n\t"
159490         "mov	r7, r12\n\t"
159491         "ldr	%[a], [%[a], #28]\n\t"
159492         "uxth	r5, %[a]\n\t"
159493         "uxth	r6, r7\n\t"
159494 #ifdef WOLFSSL_KEIL
159495         "muls	r6, r5, r6\n\t"
159496 #elif defined(__clang__)
159497         "muls	r6, r5\n\t"
159498 #else
159499         "mul	r6, r5\n\t"
159500 #endif
159501 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159502         "adds	r2, r2, r6\n\t"
159503 #else
159504         "add	r2, r2, r6\n\t"
159505 #endif
159506 #ifdef WOLFSSL_KEIL
159507         "adcs	r3, r3, %[r]\n\t"
159508 #elif defined(__clang__)
159509         "adcs	r3, %[r]\n\t"
159510 #else
159511         "adc	r3, %[r]\n\t"
159512 #endif
159513 #ifdef WOLFSSL_KEIL
159514         "adcs	r4, r4, %[r]\n\t"
159515 #elif defined(__clang__)
159516         "adcs	r4, %[r]\n\t"
159517 #else
159518         "adc	r4, %[r]\n\t"
159519 #endif
159520 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159521         "adds	r2, r2, r6\n\t"
159522 #else
159523         "add	r2, r2, r6\n\t"
159524 #endif
159525 #ifdef WOLFSSL_KEIL
159526         "adcs	r3, r3, %[r]\n\t"
159527 #elif defined(__clang__)
159528         "adcs	r3, %[r]\n\t"
159529 #else
159530         "adc	r3, %[r]\n\t"
159531 #endif
159532 #ifdef WOLFSSL_KEIL
159533         "adcs	r4, r4, %[r]\n\t"
159534 #elif defined(__clang__)
159535         "adcs	r4, %[r]\n\t"
159536 #else
159537         "adc	r4, %[r]\n\t"
159538 #endif
159539 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159540         "lsrs	r6, r7, #16\n\t"
159541 #else
159542         "lsr	r6, r7, #16\n\t"
159543 #endif
159544 #ifdef WOLFSSL_KEIL
159545         "muls	r5, r6, r5\n\t"
159546 #elif defined(__clang__)
159547         "muls	r5, r6\n\t"
159548 #else
159549         "mul	r5, r6\n\t"
159550 #endif
159551 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159552         "lsrs	r6, r5, #16\n\t"
159553 #else
159554         "lsr	r6, r5, #16\n\t"
159555 #endif
159556 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159557         "lsls	r5, r5, #16\n\t"
159558 #else
159559         "lsl	r5, r5, #16\n\t"
159560 #endif
159561 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159562         "adds	r2, r2, r5\n\t"
159563 #else
159564         "add	r2, r2, r5\n\t"
159565 #endif
159566 #ifdef WOLFSSL_KEIL
159567         "adcs	r3, r3, r6\n\t"
159568 #elif defined(__clang__)
159569         "adcs	r3, r6\n\t"
159570 #else
159571         "adc	r3, r6\n\t"
159572 #endif
159573 #ifdef WOLFSSL_KEIL
159574         "adcs	r4, r4, %[r]\n\t"
159575 #elif defined(__clang__)
159576         "adcs	r4, %[r]\n\t"
159577 #else
159578         "adc	r4, %[r]\n\t"
159579 #endif
159580 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159581         "adds	r2, r2, r5\n\t"
159582 #else
159583         "add	r2, r2, r5\n\t"
159584 #endif
159585 #ifdef WOLFSSL_KEIL
159586         "adcs	r3, r3, r6\n\t"
159587 #elif defined(__clang__)
159588         "adcs	r3, r6\n\t"
159589 #else
159590         "adc	r3, r6\n\t"
159591 #endif
159592 #ifdef WOLFSSL_KEIL
159593         "adcs	r4, r4, %[r]\n\t"
159594 #elif defined(__clang__)
159595         "adcs	r4, %[r]\n\t"
159596 #else
159597         "adc	r4, %[r]\n\t"
159598 #endif
159599 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159600         "lsrs	r5, %[a], #16\n\t"
159601 #else
159602         "lsr	r5, %[a], #16\n\t"
159603 #endif
159604 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159605         "lsrs	r6, r7, #16\n\t"
159606 #else
159607         "lsr	r6, r7, #16\n\t"
159608 #endif
159609 #ifdef WOLFSSL_KEIL
159610         "muls	r6, r5, r6\n\t"
159611 #elif defined(__clang__)
159612         "muls	r6, r5\n\t"
159613 #else
159614         "mul	r6, r5\n\t"
159615 #endif
159616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159617         "adds	r3, r3, r6\n\t"
159618 #else
159619         "add	r3, r3, r6\n\t"
159620 #endif
159621 #ifdef WOLFSSL_KEIL
159622         "adcs	r4, r4, %[r]\n\t"
159623 #elif defined(__clang__)
159624         "adcs	r4, %[r]\n\t"
159625 #else
159626         "adc	r4, %[r]\n\t"
159627 #endif
159628 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159629         "adds	r3, r3, r6\n\t"
159630 #else
159631         "add	r3, r3, r6\n\t"
159632 #endif
159633 #ifdef WOLFSSL_KEIL
159634         "adcs	r4, r4, %[r]\n\t"
159635 #elif defined(__clang__)
159636         "adcs	r4, %[r]\n\t"
159637 #else
159638         "adc	r4, %[r]\n\t"
159639 #endif
159640         "uxth	r6, r7\n\t"
159641 #ifdef WOLFSSL_KEIL
159642         "muls	r5, r6, r5\n\t"
159643 #elif defined(__clang__)
159644         "muls	r5, r6\n\t"
159645 #else
159646         "mul	r5, r6\n\t"
159647 #endif
159648 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159649         "lsrs	r6, r5, #16\n\t"
159650 #else
159651         "lsr	r6, r5, #16\n\t"
159652 #endif
159653 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159654         "lsls	r5, r5, #16\n\t"
159655 #else
159656         "lsl	r5, r5, #16\n\t"
159657 #endif
159658 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159659         "adds	r2, r2, r5\n\t"
159660 #else
159661         "add	r2, r2, r5\n\t"
159662 #endif
159663 #ifdef WOLFSSL_KEIL
159664         "adcs	r3, r3, r6\n\t"
159665 #elif defined(__clang__)
159666         "adcs	r3, r6\n\t"
159667 #else
159668         "adc	r3, r6\n\t"
159669 #endif
159670 #ifdef WOLFSSL_KEIL
159671         "adcs	r4, r4, %[r]\n\t"
159672 #elif defined(__clang__)
159673         "adcs	r4, %[r]\n\t"
159674 #else
159675         "adc	r4, %[r]\n\t"
159676 #endif
159677 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159678         "adds	r2, r2, r5\n\t"
159679 #else
159680         "add	r2, r2, r5\n\t"
159681 #endif
159682 #ifdef WOLFSSL_KEIL
159683         "adcs	r3, r3, r6\n\t"
159684 #elif defined(__clang__)
159685         "adcs	r3, r6\n\t"
159686 #else
159687         "adc	r3, r6\n\t"
159688 #endif
159689 #ifdef WOLFSSL_KEIL
159690         "adcs	r4, r4, %[r]\n\t"
159691 #elif defined(__clang__)
159692         "adcs	r4, %[r]\n\t"
159693 #else
159694         "adc	r4, %[r]\n\t"
159695 #endif
159696         "#  A[8] * A[1]\n\t"
159697         "mov	%[a], r9\n\t"
159698         "mov	r7, r11\n\t"
159699         "ldr	%[a], [%[a], #32]\n\t"
159700         "uxth	r5, %[a]\n\t"
159701         "uxth	r6, r7\n\t"
159702 #ifdef WOLFSSL_KEIL
159703         "muls	r6, r5, r6\n\t"
159704 #elif defined(__clang__)
159705         "muls	r6, r5\n\t"
159706 #else
159707         "mul	r6, r5\n\t"
159708 #endif
159709 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159710         "adds	r2, r2, r6\n\t"
159711 #else
159712         "add	r2, r2, r6\n\t"
159713 #endif
159714 #ifdef WOLFSSL_KEIL
159715         "adcs	r3, r3, %[r]\n\t"
159716 #elif defined(__clang__)
159717         "adcs	r3, %[r]\n\t"
159718 #else
159719         "adc	r3, %[r]\n\t"
159720 #endif
159721 #ifdef WOLFSSL_KEIL
159722         "adcs	r4, r4, %[r]\n\t"
159723 #elif defined(__clang__)
159724         "adcs	r4, %[r]\n\t"
159725 #else
159726         "adc	r4, %[r]\n\t"
159727 #endif
159728 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159729         "adds	r2, r2, r6\n\t"
159730 #else
159731         "add	r2, r2, r6\n\t"
159732 #endif
159733 #ifdef WOLFSSL_KEIL
159734         "adcs	r3, r3, %[r]\n\t"
159735 #elif defined(__clang__)
159736         "adcs	r3, %[r]\n\t"
159737 #else
159738         "adc	r3, %[r]\n\t"
159739 #endif
159740 #ifdef WOLFSSL_KEIL
159741         "adcs	r4, r4, %[r]\n\t"
159742 #elif defined(__clang__)
159743         "adcs	r4, %[r]\n\t"
159744 #else
159745         "adc	r4, %[r]\n\t"
159746 #endif
159747 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159748         "lsrs	r6, r7, #16\n\t"
159749 #else
159750         "lsr	r6, r7, #16\n\t"
159751 #endif
159752 #ifdef WOLFSSL_KEIL
159753         "muls	r5, r6, r5\n\t"
159754 #elif defined(__clang__)
159755         "muls	r5, r6\n\t"
159756 #else
159757         "mul	r5, r6\n\t"
159758 #endif
159759 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159760         "lsrs	r6, r5, #16\n\t"
159761 #else
159762         "lsr	r6, r5, #16\n\t"
159763 #endif
159764 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159765         "lsls	r5, r5, #16\n\t"
159766 #else
159767         "lsl	r5, r5, #16\n\t"
159768 #endif
159769 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159770         "adds	r2, r2, r5\n\t"
159771 #else
159772         "add	r2, r2, r5\n\t"
159773 #endif
159774 #ifdef WOLFSSL_KEIL
159775         "adcs	r3, r3, r6\n\t"
159776 #elif defined(__clang__)
159777         "adcs	r3, r6\n\t"
159778 #else
159779         "adc	r3, r6\n\t"
159780 #endif
159781 #ifdef WOLFSSL_KEIL
159782         "adcs	r4, r4, %[r]\n\t"
159783 #elif defined(__clang__)
159784         "adcs	r4, %[r]\n\t"
159785 #else
159786         "adc	r4, %[r]\n\t"
159787 #endif
159788 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159789         "adds	r2, r2, r5\n\t"
159790 #else
159791         "add	r2, r2, r5\n\t"
159792 #endif
159793 #ifdef WOLFSSL_KEIL
159794         "adcs	r3, r3, r6\n\t"
159795 #elif defined(__clang__)
159796         "adcs	r3, r6\n\t"
159797 #else
159798         "adc	r3, r6\n\t"
159799 #endif
159800 #ifdef WOLFSSL_KEIL
159801         "adcs	r4, r4, %[r]\n\t"
159802 #elif defined(__clang__)
159803         "adcs	r4, %[r]\n\t"
159804 #else
159805         "adc	r4, %[r]\n\t"
159806 #endif
159807 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159808         "lsrs	r5, %[a], #16\n\t"
159809 #else
159810         "lsr	r5, %[a], #16\n\t"
159811 #endif
159812 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159813         "lsrs	r6, r7, #16\n\t"
159814 #else
159815         "lsr	r6, r7, #16\n\t"
159816 #endif
159817 #ifdef WOLFSSL_KEIL
159818         "muls	r6, r5, r6\n\t"
159819 #elif defined(__clang__)
159820         "muls	r6, r5\n\t"
159821 #else
159822         "mul	r6, r5\n\t"
159823 #endif
159824 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159825         "adds	r3, r3, r6\n\t"
159826 #else
159827         "add	r3, r3, r6\n\t"
159828 #endif
159829 #ifdef WOLFSSL_KEIL
159830         "adcs	r4, r4, %[r]\n\t"
159831 #elif defined(__clang__)
159832         "adcs	r4, %[r]\n\t"
159833 #else
159834         "adc	r4, %[r]\n\t"
159835 #endif
159836 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159837         "adds	r3, r3, r6\n\t"
159838 #else
159839         "add	r3, r3, r6\n\t"
159840 #endif
159841 #ifdef WOLFSSL_KEIL
159842         "adcs	r4, r4, %[r]\n\t"
159843 #elif defined(__clang__)
159844         "adcs	r4, %[r]\n\t"
159845 #else
159846         "adc	r4, %[r]\n\t"
159847 #endif
159848         "uxth	r6, r7\n\t"
159849 #ifdef WOLFSSL_KEIL
159850         "muls	r5, r6, r5\n\t"
159851 #elif defined(__clang__)
159852         "muls	r5, r6\n\t"
159853 #else
159854         "mul	r5, r6\n\t"
159855 #endif
159856 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159857         "lsrs	r6, r5, #16\n\t"
159858 #else
159859         "lsr	r6, r5, #16\n\t"
159860 #endif
159861 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159862         "lsls	r5, r5, #16\n\t"
159863 #else
159864         "lsl	r5, r5, #16\n\t"
159865 #endif
159866 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159867         "adds	r2, r2, r5\n\t"
159868 #else
159869         "add	r2, r2, r5\n\t"
159870 #endif
159871 #ifdef WOLFSSL_KEIL
159872         "adcs	r3, r3, r6\n\t"
159873 #elif defined(__clang__)
159874         "adcs	r3, r6\n\t"
159875 #else
159876         "adc	r3, r6\n\t"
159877 #endif
159878 #ifdef WOLFSSL_KEIL
159879         "adcs	r4, r4, %[r]\n\t"
159880 #elif defined(__clang__)
159881         "adcs	r4, %[r]\n\t"
159882 #else
159883         "adc	r4, %[r]\n\t"
159884 #endif
159885 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159886         "adds	r2, r2, r5\n\t"
159887 #else
159888         "add	r2, r2, r5\n\t"
159889 #endif
159890 #ifdef WOLFSSL_KEIL
159891         "adcs	r3, r3, r6\n\t"
159892 #elif defined(__clang__)
159893         "adcs	r3, r6\n\t"
159894 #else
159895         "adc	r3, r6\n\t"
159896 #endif
159897 #ifdef WOLFSSL_KEIL
159898         "adcs	r4, r4, %[r]\n\t"
159899 #elif defined(__clang__)
159900         "adcs	r4, %[r]\n\t"
159901 #else
159902         "adc	r4, %[r]\n\t"
159903 #endif
159904         "#  A[9] * A[0]\n\t"
159905         "mov	%[a], r9\n\t"
159906         "mov	r7, r10\n\t"
159907         "ldr	%[a], [%[a], #36]\n\t"
159908         "uxth	r5, %[a]\n\t"
159909         "uxth	r6, r7\n\t"
159910 #ifdef WOLFSSL_KEIL
159911         "muls	r6, r5, r6\n\t"
159912 #elif defined(__clang__)
159913         "muls	r6, r5\n\t"
159914 #else
159915         "mul	r6, r5\n\t"
159916 #endif
159917 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159918         "adds	r2, r2, r6\n\t"
159919 #else
159920         "add	r2, r2, r6\n\t"
159921 #endif
159922 #ifdef WOLFSSL_KEIL
159923         "adcs	r3, r3, %[r]\n\t"
159924 #elif defined(__clang__)
159925         "adcs	r3, %[r]\n\t"
159926 #else
159927         "adc	r3, %[r]\n\t"
159928 #endif
159929 #ifdef WOLFSSL_KEIL
159930         "adcs	r4, r4, %[r]\n\t"
159931 #elif defined(__clang__)
159932         "adcs	r4, %[r]\n\t"
159933 #else
159934         "adc	r4, %[r]\n\t"
159935 #endif
159936 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159937         "adds	r2, r2, r6\n\t"
159938 #else
159939         "add	r2, r2, r6\n\t"
159940 #endif
159941 #ifdef WOLFSSL_KEIL
159942         "adcs	r3, r3, %[r]\n\t"
159943 #elif defined(__clang__)
159944         "adcs	r3, %[r]\n\t"
159945 #else
159946         "adc	r3, %[r]\n\t"
159947 #endif
159948 #ifdef WOLFSSL_KEIL
159949         "adcs	r4, r4, %[r]\n\t"
159950 #elif defined(__clang__)
159951         "adcs	r4, %[r]\n\t"
159952 #else
159953         "adc	r4, %[r]\n\t"
159954 #endif
159955 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159956         "lsrs	r6, r7, #16\n\t"
159957 #else
159958         "lsr	r6, r7, #16\n\t"
159959 #endif
159960 #ifdef WOLFSSL_KEIL
159961         "muls	r5, r6, r5\n\t"
159962 #elif defined(__clang__)
159963         "muls	r5, r6\n\t"
159964 #else
159965         "mul	r5, r6\n\t"
159966 #endif
159967 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159968         "lsrs	r6, r5, #16\n\t"
159969 #else
159970         "lsr	r6, r5, #16\n\t"
159971 #endif
159972 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159973         "lsls	r5, r5, #16\n\t"
159974 #else
159975         "lsl	r5, r5, #16\n\t"
159976 #endif
159977 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159978         "adds	r2, r2, r5\n\t"
159979 #else
159980         "add	r2, r2, r5\n\t"
159981 #endif
159982 #ifdef WOLFSSL_KEIL
159983         "adcs	r3, r3, r6\n\t"
159984 #elif defined(__clang__)
159985         "adcs	r3, r6\n\t"
159986 #else
159987         "adc	r3, r6\n\t"
159988 #endif
159989 #ifdef WOLFSSL_KEIL
159990         "adcs	r4, r4, %[r]\n\t"
159991 #elif defined(__clang__)
159992         "adcs	r4, %[r]\n\t"
159993 #else
159994         "adc	r4, %[r]\n\t"
159995 #endif
159996 #if defined(__clang__) || defined(WOLFSSL_KEIL)
159997         "adds	r2, r2, r5\n\t"
159998 #else
159999         "add	r2, r2, r5\n\t"
160000 #endif
160001 #ifdef WOLFSSL_KEIL
160002         "adcs	r3, r3, r6\n\t"
160003 #elif defined(__clang__)
160004         "adcs	r3, r6\n\t"
160005 #else
160006         "adc	r3, r6\n\t"
160007 #endif
160008 #ifdef WOLFSSL_KEIL
160009         "adcs	r4, r4, %[r]\n\t"
160010 #elif defined(__clang__)
160011         "adcs	r4, %[r]\n\t"
160012 #else
160013         "adc	r4, %[r]\n\t"
160014 #endif
160015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160016         "lsrs	r5, %[a], #16\n\t"
160017 #else
160018         "lsr	r5, %[a], #16\n\t"
160019 #endif
160020 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160021         "lsrs	r6, r7, #16\n\t"
160022 #else
160023         "lsr	r6, r7, #16\n\t"
160024 #endif
160025 #ifdef WOLFSSL_KEIL
160026         "muls	r6, r5, r6\n\t"
160027 #elif defined(__clang__)
160028         "muls	r6, r5\n\t"
160029 #else
160030         "mul	r6, r5\n\t"
160031 #endif
160032 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160033         "adds	r3, r3, r6\n\t"
160034 #else
160035         "add	r3, r3, r6\n\t"
160036 #endif
160037 #ifdef WOLFSSL_KEIL
160038         "adcs	r4, r4, %[r]\n\t"
160039 #elif defined(__clang__)
160040         "adcs	r4, %[r]\n\t"
160041 #else
160042         "adc	r4, %[r]\n\t"
160043 #endif
160044 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160045         "adds	r3, r3, r6\n\t"
160046 #else
160047         "add	r3, r3, r6\n\t"
160048 #endif
160049 #ifdef WOLFSSL_KEIL
160050         "adcs	r4, r4, %[r]\n\t"
160051 #elif defined(__clang__)
160052         "adcs	r4, %[r]\n\t"
160053 #else
160054         "adc	r4, %[r]\n\t"
160055 #endif
160056         "uxth	r6, r7\n\t"
160057 #ifdef WOLFSSL_KEIL
160058         "muls	r5, r6, r5\n\t"
160059 #elif defined(__clang__)
160060         "muls	r5, r6\n\t"
160061 #else
160062         "mul	r5, r6\n\t"
160063 #endif
160064 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160065         "lsrs	r6, r5, #16\n\t"
160066 #else
160067         "lsr	r6, r5, #16\n\t"
160068 #endif
160069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160070         "lsls	r5, r5, #16\n\t"
160071 #else
160072         "lsl	r5, r5, #16\n\t"
160073 #endif
160074 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160075         "adds	r2, r2, r5\n\t"
160076 #else
160077         "add	r2, r2, r5\n\t"
160078 #endif
160079 #ifdef WOLFSSL_KEIL
160080         "adcs	r3, r3, r6\n\t"
160081 #elif defined(__clang__)
160082         "adcs	r3, r6\n\t"
160083 #else
160084         "adc	r3, r6\n\t"
160085 #endif
160086 #ifdef WOLFSSL_KEIL
160087         "adcs	r4, r4, %[r]\n\t"
160088 #elif defined(__clang__)
160089         "adcs	r4, %[r]\n\t"
160090 #else
160091         "adc	r4, %[r]\n\t"
160092 #endif
160093 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160094         "adds	r2, r2, r5\n\t"
160095 #else
160096         "add	r2, r2, r5\n\t"
160097 #endif
160098 #ifdef WOLFSSL_KEIL
160099         "adcs	r3, r3, r6\n\t"
160100 #elif defined(__clang__)
160101         "adcs	r3, r6\n\t"
160102 #else
160103         "adc	r3, r6\n\t"
160104 #endif
160105 #ifdef WOLFSSL_KEIL
160106         "adcs	r4, r4, %[r]\n\t"
160107 #elif defined(__clang__)
160108         "adcs	r4, %[r]\n\t"
160109 #else
160110         "adc	r4, %[r]\n\t"
160111 #endif
160112         "str	r2, [sp, #36]\n\t"
160113         "#  A[10] * A[0]\n\t"
160114         "movs	r2, #0\n\t"
160115         "mov	%[a], r9\n\t"
160116         "ldr	%[a], [%[a], #40]\n\t"
160117         "uxth	r5, %[a]\n\t"
160118         "uxth	r6, r7\n\t"
160119 #ifdef WOLFSSL_KEIL
160120         "muls	r6, r5, r6\n\t"
160121 #elif defined(__clang__)
160122         "muls	r6, r5\n\t"
160123 #else
160124         "mul	r6, r5\n\t"
160125 #endif
160126 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160127         "adds	r3, r3, r6\n\t"
160128 #else
160129         "add	r3, r3, r6\n\t"
160130 #endif
160131 #ifdef WOLFSSL_KEIL
160132         "adcs	r4, r4, %[r]\n\t"
160133 #elif defined(__clang__)
160134         "adcs	r4, %[r]\n\t"
160135 #else
160136         "adc	r4, %[r]\n\t"
160137 #endif
160138 #ifdef WOLFSSL_KEIL
160139         "adcs	r2, r2, %[r]\n\t"
160140 #elif defined(__clang__)
160141         "adcs	r2, %[r]\n\t"
160142 #else
160143         "adc	r2, %[r]\n\t"
160144 #endif
160145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160146         "adds	r3, r3, r6\n\t"
160147 #else
160148         "add	r3, r3, r6\n\t"
160149 #endif
160150 #ifdef WOLFSSL_KEIL
160151         "adcs	r4, r4, %[r]\n\t"
160152 #elif defined(__clang__)
160153         "adcs	r4, %[r]\n\t"
160154 #else
160155         "adc	r4, %[r]\n\t"
160156 #endif
160157 #ifdef WOLFSSL_KEIL
160158         "adcs	r2, r2, %[r]\n\t"
160159 #elif defined(__clang__)
160160         "adcs	r2, %[r]\n\t"
160161 #else
160162         "adc	r2, %[r]\n\t"
160163 #endif
160164 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160165         "lsrs	r6, r7, #16\n\t"
160166 #else
160167         "lsr	r6, r7, #16\n\t"
160168 #endif
160169 #ifdef WOLFSSL_KEIL
160170         "muls	r5, r6, r5\n\t"
160171 #elif defined(__clang__)
160172         "muls	r5, r6\n\t"
160173 #else
160174         "mul	r5, r6\n\t"
160175 #endif
160176 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160177         "lsrs	r6, r5, #16\n\t"
160178 #else
160179         "lsr	r6, r5, #16\n\t"
160180 #endif
160181 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160182         "lsls	r5, r5, #16\n\t"
160183 #else
160184         "lsl	r5, r5, #16\n\t"
160185 #endif
160186 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160187         "adds	r3, r3, r5\n\t"
160188 #else
160189         "add	r3, r3, r5\n\t"
160190 #endif
160191 #ifdef WOLFSSL_KEIL
160192         "adcs	r4, r4, r6\n\t"
160193 #elif defined(__clang__)
160194         "adcs	r4, r6\n\t"
160195 #else
160196         "adc	r4, r6\n\t"
160197 #endif
160198 #ifdef WOLFSSL_KEIL
160199         "adcs	r2, r2, %[r]\n\t"
160200 #elif defined(__clang__)
160201         "adcs	r2, %[r]\n\t"
160202 #else
160203         "adc	r2, %[r]\n\t"
160204 #endif
160205 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160206         "adds	r3, r3, r5\n\t"
160207 #else
160208         "add	r3, r3, r5\n\t"
160209 #endif
160210 #ifdef WOLFSSL_KEIL
160211         "adcs	r4, r4, r6\n\t"
160212 #elif defined(__clang__)
160213         "adcs	r4, r6\n\t"
160214 #else
160215         "adc	r4, r6\n\t"
160216 #endif
160217 #ifdef WOLFSSL_KEIL
160218         "adcs	r2, r2, %[r]\n\t"
160219 #elif defined(__clang__)
160220         "adcs	r2, %[r]\n\t"
160221 #else
160222         "adc	r2, %[r]\n\t"
160223 #endif
160224 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160225         "lsrs	r5, %[a], #16\n\t"
160226 #else
160227         "lsr	r5, %[a], #16\n\t"
160228 #endif
160229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160230         "lsrs	r6, r7, #16\n\t"
160231 #else
160232         "lsr	r6, r7, #16\n\t"
160233 #endif
160234 #ifdef WOLFSSL_KEIL
160235         "muls	r6, r5, r6\n\t"
160236 #elif defined(__clang__)
160237         "muls	r6, r5\n\t"
160238 #else
160239         "mul	r6, r5\n\t"
160240 #endif
160241 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160242         "adds	r4, r4, r6\n\t"
160243 #else
160244         "add	r4, r4, r6\n\t"
160245 #endif
160246 #ifdef WOLFSSL_KEIL
160247         "adcs	r2, r2, %[r]\n\t"
160248 #elif defined(__clang__)
160249         "adcs	r2, %[r]\n\t"
160250 #else
160251         "adc	r2, %[r]\n\t"
160252 #endif
160253 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160254         "adds	r4, r4, r6\n\t"
160255 #else
160256         "add	r4, r4, r6\n\t"
160257 #endif
160258 #ifdef WOLFSSL_KEIL
160259         "adcs	r2, r2, %[r]\n\t"
160260 #elif defined(__clang__)
160261         "adcs	r2, %[r]\n\t"
160262 #else
160263         "adc	r2, %[r]\n\t"
160264 #endif
160265         "uxth	r6, r7\n\t"
160266 #ifdef WOLFSSL_KEIL
160267         "muls	r5, r6, r5\n\t"
160268 #elif defined(__clang__)
160269         "muls	r5, r6\n\t"
160270 #else
160271         "mul	r5, r6\n\t"
160272 #endif
160273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160274         "lsrs	r6, r5, #16\n\t"
160275 #else
160276         "lsr	r6, r5, #16\n\t"
160277 #endif
160278 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160279         "lsls	r5, r5, #16\n\t"
160280 #else
160281         "lsl	r5, r5, #16\n\t"
160282 #endif
160283 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160284         "adds	r3, r3, r5\n\t"
160285 #else
160286         "add	r3, r3, r5\n\t"
160287 #endif
160288 #ifdef WOLFSSL_KEIL
160289         "adcs	r4, r4, r6\n\t"
160290 #elif defined(__clang__)
160291         "adcs	r4, r6\n\t"
160292 #else
160293         "adc	r4, r6\n\t"
160294 #endif
160295 #ifdef WOLFSSL_KEIL
160296         "adcs	r2, r2, %[r]\n\t"
160297 #elif defined(__clang__)
160298         "adcs	r2, %[r]\n\t"
160299 #else
160300         "adc	r2, %[r]\n\t"
160301 #endif
160302 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160303         "adds	r3, r3, r5\n\t"
160304 #else
160305         "add	r3, r3, r5\n\t"
160306 #endif
160307 #ifdef WOLFSSL_KEIL
160308         "adcs	r4, r4, r6\n\t"
160309 #elif defined(__clang__)
160310         "adcs	r4, r6\n\t"
160311 #else
160312         "adc	r4, r6\n\t"
160313 #endif
160314 #ifdef WOLFSSL_KEIL
160315         "adcs	r2, r2, %[r]\n\t"
160316 #elif defined(__clang__)
160317         "adcs	r2, %[r]\n\t"
160318 #else
160319         "adc	r2, %[r]\n\t"
160320 #endif
160321         "#  A[9] * A[1]\n\t"
160322         "mov	%[a], r9\n\t"
160323         "mov	r7, r11\n\t"
160324         "ldr	%[a], [%[a], #36]\n\t"
160325         "uxth	r5, %[a]\n\t"
160326         "uxth	r6, r7\n\t"
160327 #ifdef WOLFSSL_KEIL
160328         "muls	r6, r5, r6\n\t"
160329 #elif defined(__clang__)
160330         "muls	r6, r5\n\t"
160331 #else
160332         "mul	r6, r5\n\t"
160333 #endif
160334 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160335         "adds	r3, r3, r6\n\t"
160336 #else
160337         "add	r3, r3, r6\n\t"
160338 #endif
160339 #ifdef WOLFSSL_KEIL
160340         "adcs	r4, r4, %[r]\n\t"
160341 #elif defined(__clang__)
160342         "adcs	r4, %[r]\n\t"
160343 #else
160344         "adc	r4, %[r]\n\t"
160345 #endif
160346 #ifdef WOLFSSL_KEIL
160347         "adcs	r2, r2, %[r]\n\t"
160348 #elif defined(__clang__)
160349         "adcs	r2, %[r]\n\t"
160350 #else
160351         "adc	r2, %[r]\n\t"
160352 #endif
160353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160354         "adds	r3, r3, r6\n\t"
160355 #else
160356         "add	r3, r3, r6\n\t"
160357 #endif
160358 #ifdef WOLFSSL_KEIL
160359         "adcs	r4, r4, %[r]\n\t"
160360 #elif defined(__clang__)
160361         "adcs	r4, %[r]\n\t"
160362 #else
160363         "adc	r4, %[r]\n\t"
160364 #endif
160365 #ifdef WOLFSSL_KEIL
160366         "adcs	r2, r2, %[r]\n\t"
160367 #elif defined(__clang__)
160368         "adcs	r2, %[r]\n\t"
160369 #else
160370         "adc	r2, %[r]\n\t"
160371 #endif
160372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160373         "lsrs	r6, r7, #16\n\t"
160374 #else
160375         "lsr	r6, r7, #16\n\t"
160376 #endif
160377 #ifdef WOLFSSL_KEIL
160378         "muls	r5, r6, r5\n\t"
160379 #elif defined(__clang__)
160380         "muls	r5, r6\n\t"
160381 #else
160382         "mul	r5, r6\n\t"
160383 #endif
160384 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160385         "lsrs	r6, r5, #16\n\t"
160386 #else
160387         "lsr	r6, r5, #16\n\t"
160388 #endif
160389 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160390         "lsls	r5, r5, #16\n\t"
160391 #else
160392         "lsl	r5, r5, #16\n\t"
160393 #endif
160394 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160395         "adds	r3, r3, r5\n\t"
160396 #else
160397         "add	r3, r3, r5\n\t"
160398 #endif
160399 #ifdef WOLFSSL_KEIL
160400         "adcs	r4, r4, r6\n\t"
160401 #elif defined(__clang__)
160402         "adcs	r4, r6\n\t"
160403 #else
160404         "adc	r4, r6\n\t"
160405 #endif
160406 #ifdef WOLFSSL_KEIL
160407         "adcs	r2, r2, %[r]\n\t"
160408 #elif defined(__clang__)
160409         "adcs	r2, %[r]\n\t"
160410 #else
160411         "adc	r2, %[r]\n\t"
160412 #endif
160413 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160414         "adds	r3, r3, r5\n\t"
160415 #else
160416         "add	r3, r3, r5\n\t"
160417 #endif
160418 #ifdef WOLFSSL_KEIL
160419         "adcs	r4, r4, r6\n\t"
160420 #elif defined(__clang__)
160421         "adcs	r4, r6\n\t"
160422 #else
160423         "adc	r4, r6\n\t"
160424 #endif
160425 #ifdef WOLFSSL_KEIL
160426         "adcs	r2, r2, %[r]\n\t"
160427 #elif defined(__clang__)
160428         "adcs	r2, %[r]\n\t"
160429 #else
160430         "adc	r2, %[r]\n\t"
160431 #endif
160432 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160433         "lsrs	r5, %[a], #16\n\t"
160434 #else
160435         "lsr	r5, %[a], #16\n\t"
160436 #endif
160437 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160438         "lsrs	r6, r7, #16\n\t"
160439 #else
160440         "lsr	r6, r7, #16\n\t"
160441 #endif
160442 #ifdef WOLFSSL_KEIL
160443         "muls	r6, r5, r6\n\t"
160444 #elif defined(__clang__)
160445         "muls	r6, r5\n\t"
160446 #else
160447         "mul	r6, r5\n\t"
160448 #endif
160449 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160450         "adds	r4, r4, r6\n\t"
160451 #else
160452         "add	r4, r4, r6\n\t"
160453 #endif
160454 #ifdef WOLFSSL_KEIL
160455         "adcs	r2, r2, %[r]\n\t"
160456 #elif defined(__clang__)
160457         "adcs	r2, %[r]\n\t"
160458 #else
160459         "adc	r2, %[r]\n\t"
160460 #endif
160461 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160462         "adds	r4, r4, r6\n\t"
160463 #else
160464         "add	r4, r4, r6\n\t"
160465 #endif
160466 #ifdef WOLFSSL_KEIL
160467         "adcs	r2, r2, %[r]\n\t"
160468 #elif defined(__clang__)
160469         "adcs	r2, %[r]\n\t"
160470 #else
160471         "adc	r2, %[r]\n\t"
160472 #endif
160473         "uxth	r6, r7\n\t"
160474 #ifdef WOLFSSL_KEIL
160475         "muls	r5, r6, r5\n\t"
160476 #elif defined(__clang__)
160477         "muls	r5, r6\n\t"
160478 #else
160479         "mul	r5, r6\n\t"
160480 #endif
160481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160482         "lsrs	r6, r5, #16\n\t"
160483 #else
160484         "lsr	r6, r5, #16\n\t"
160485 #endif
160486 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160487         "lsls	r5, r5, #16\n\t"
160488 #else
160489         "lsl	r5, r5, #16\n\t"
160490 #endif
160491 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160492         "adds	r3, r3, r5\n\t"
160493 #else
160494         "add	r3, r3, r5\n\t"
160495 #endif
160496 #ifdef WOLFSSL_KEIL
160497         "adcs	r4, r4, r6\n\t"
160498 #elif defined(__clang__)
160499         "adcs	r4, r6\n\t"
160500 #else
160501         "adc	r4, r6\n\t"
160502 #endif
160503 #ifdef WOLFSSL_KEIL
160504         "adcs	r2, r2, %[r]\n\t"
160505 #elif defined(__clang__)
160506         "adcs	r2, %[r]\n\t"
160507 #else
160508         "adc	r2, %[r]\n\t"
160509 #endif
160510 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160511         "adds	r3, r3, r5\n\t"
160512 #else
160513         "add	r3, r3, r5\n\t"
160514 #endif
160515 #ifdef WOLFSSL_KEIL
160516         "adcs	r4, r4, r6\n\t"
160517 #elif defined(__clang__)
160518         "adcs	r4, r6\n\t"
160519 #else
160520         "adc	r4, r6\n\t"
160521 #endif
160522 #ifdef WOLFSSL_KEIL
160523         "adcs	r2, r2, %[r]\n\t"
160524 #elif defined(__clang__)
160525         "adcs	r2, %[r]\n\t"
160526 #else
160527         "adc	r2, %[r]\n\t"
160528 #endif
160529         "#  A[8] * A[2]\n\t"
160530         "mov	%[a], r9\n\t"
160531         "mov	r7, r12\n\t"
160532         "ldr	%[a], [%[a], #32]\n\t"
160533         "uxth	r5, %[a]\n\t"
160534         "uxth	r6, r7\n\t"
160535 #ifdef WOLFSSL_KEIL
160536         "muls	r6, r5, r6\n\t"
160537 #elif defined(__clang__)
160538         "muls	r6, r5\n\t"
160539 #else
160540         "mul	r6, r5\n\t"
160541 #endif
160542 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160543         "adds	r3, r3, r6\n\t"
160544 #else
160545         "add	r3, r3, r6\n\t"
160546 #endif
160547 #ifdef WOLFSSL_KEIL
160548         "adcs	r4, r4, %[r]\n\t"
160549 #elif defined(__clang__)
160550         "adcs	r4, %[r]\n\t"
160551 #else
160552         "adc	r4, %[r]\n\t"
160553 #endif
160554 #ifdef WOLFSSL_KEIL
160555         "adcs	r2, r2, %[r]\n\t"
160556 #elif defined(__clang__)
160557         "adcs	r2, %[r]\n\t"
160558 #else
160559         "adc	r2, %[r]\n\t"
160560 #endif
160561 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160562         "adds	r3, r3, r6\n\t"
160563 #else
160564         "add	r3, r3, r6\n\t"
160565 #endif
160566 #ifdef WOLFSSL_KEIL
160567         "adcs	r4, r4, %[r]\n\t"
160568 #elif defined(__clang__)
160569         "adcs	r4, %[r]\n\t"
160570 #else
160571         "adc	r4, %[r]\n\t"
160572 #endif
160573 #ifdef WOLFSSL_KEIL
160574         "adcs	r2, r2, %[r]\n\t"
160575 #elif defined(__clang__)
160576         "adcs	r2, %[r]\n\t"
160577 #else
160578         "adc	r2, %[r]\n\t"
160579 #endif
160580 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160581         "lsrs	r6, r7, #16\n\t"
160582 #else
160583         "lsr	r6, r7, #16\n\t"
160584 #endif
160585 #ifdef WOLFSSL_KEIL
160586         "muls	r5, r6, r5\n\t"
160587 #elif defined(__clang__)
160588         "muls	r5, r6\n\t"
160589 #else
160590         "mul	r5, r6\n\t"
160591 #endif
160592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160593         "lsrs	r6, r5, #16\n\t"
160594 #else
160595         "lsr	r6, r5, #16\n\t"
160596 #endif
160597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160598         "lsls	r5, r5, #16\n\t"
160599 #else
160600         "lsl	r5, r5, #16\n\t"
160601 #endif
160602 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160603         "adds	r3, r3, r5\n\t"
160604 #else
160605         "add	r3, r3, r5\n\t"
160606 #endif
160607 #ifdef WOLFSSL_KEIL
160608         "adcs	r4, r4, r6\n\t"
160609 #elif defined(__clang__)
160610         "adcs	r4, r6\n\t"
160611 #else
160612         "adc	r4, r6\n\t"
160613 #endif
160614 #ifdef WOLFSSL_KEIL
160615         "adcs	r2, r2, %[r]\n\t"
160616 #elif defined(__clang__)
160617         "adcs	r2, %[r]\n\t"
160618 #else
160619         "adc	r2, %[r]\n\t"
160620 #endif
160621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160622         "adds	r3, r3, r5\n\t"
160623 #else
160624         "add	r3, r3, r5\n\t"
160625 #endif
160626 #ifdef WOLFSSL_KEIL
160627         "adcs	r4, r4, r6\n\t"
160628 #elif defined(__clang__)
160629         "adcs	r4, r6\n\t"
160630 #else
160631         "adc	r4, r6\n\t"
160632 #endif
160633 #ifdef WOLFSSL_KEIL
160634         "adcs	r2, r2, %[r]\n\t"
160635 #elif defined(__clang__)
160636         "adcs	r2, %[r]\n\t"
160637 #else
160638         "adc	r2, %[r]\n\t"
160639 #endif
160640 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160641         "lsrs	r5, %[a], #16\n\t"
160642 #else
160643         "lsr	r5, %[a], #16\n\t"
160644 #endif
160645 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160646         "lsrs	r6, r7, #16\n\t"
160647 #else
160648         "lsr	r6, r7, #16\n\t"
160649 #endif
160650 #ifdef WOLFSSL_KEIL
160651         "muls	r6, r5, r6\n\t"
160652 #elif defined(__clang__)
160653         "muls	r6, r5\n\t"
160654 #else
160655         "mul	r6, r5\n\t"
160656 #endif
160657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160658         "adds	r4, r4, r6\n\t"
160659 #else
160660         "add	r4, r4, r6\n\t"
160661 #endif
160662 #ifdef WOLFSSL_KEIL
160663         "adcs	r2, r2, %[r]\n\t"
160664 #elif defined(__clang__)
160665         "adcs	r2, %[r]\n\t"
160666 #else
160667         "adc	r2, %[r]\n\t"
160668 #endif
160669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160670         "adds	r4, r4, r6\n\t"
160671 #else
160672         "add	r4, r4, r6\n\t"
160673 #endif
160674 #ifdef WOLFSSL_KEIL
160675         "adcs	r2, r2, %[r]\n\t"
160676 #elif defined(__clang__)
160677         "adcs	r2, %[r]\n\t"
160678 #else
160679         "adc	r2, %[r]\n\t"
160680 #endif
160681         "uxth	r6, r7\n\t"
160682 #ifdef WOLFSSL_KEIL
160683         "muls	r5, r6, r5\n\t"
160684 #elif defined(__clang__)
160685         "muls	r5, r6\n\t"
160686 #else
160687         "mul	r5, r6\n\t"
160688 #endif
160689 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160690         "lsrs	r6, r5, #16\n\t"
160691 #else
160692         "lsr	r6, r5, #16\n\t"
160693 #endif
160694 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160695         "lsls	r5, r5, #16\n\t"
160696 #else
160697         "lsl	r5, r5, #16\n\t"
160698 #endif
160699 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160700         "adds	r3, r3, r5\n\t"
160701 #else
160702         "add	r3, r3, r5\n\t"
160703 #endif
160704 #ifdef WOLFSSL_KEIL
160705         "adcs	r4, r4, r6\n\t"
160706 #elif defined(__clang__)
160707         "adcs	r4, r6\n\t"
160708 #else
160709         "adc	r4, r6\n\t"
160710 #endif
160711 #ifdef WOLFSSL_KEIL
160712         "adcs	r2, r2, %[r]\n\t"
160713 #elif defined(__clang__)
160714         "adcs	r2, %[r]\n\t"
160715 #else
160716         "adc	r2, %[r]\n\t"
160717 #endif
160718 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160719         "adds	r3, r3, r5\n\t"
160720 #else
160721         "add	r3, r3, r5\n\t"
160722 #endif
160723 #ifdef WOLFSSL_KEIL
160724         "adcs	r4, r4, r6\n\t"
160725 #elif defined(__clang__)
160726         "adcs	r4, r6\n\t"
160727 #else
160728         "adc	r4, r6\n\t"
160729 #endif
160730 #ifdef WOLFSSL_KEIL
160731         "adcs	r2, r2, %[r]\n\t"
160732 #elif defined(__clang__)
160733         "adcs	r2, %[r]\n\t"
160734 #else
160735         "adc	r2, %[r]\n\t"
160736 #endif
160737         "#  A[7] * A[3]\n\t"
160738         "mov	%[a], r9\n\t"
160739         "mov	r7, lr\n\t"
160740         "ldr	%[a], [%[a], #28]\n\t"
160741         "uxth	r5, %[a]\n\t"
160742         "uxth	r6, r7\n\t"
160743 #ifdef WOLFSSL_KEIL
160744         "muls	r6, r5, r6\n\t"
160745 #elif defined(__clang__)
160746         "muls	r6, r5\n\t"
160747 #else
160748         "mul	r6, r5\n\t"
160749 #endif
160750 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160751         "adds	r3, r3, r6\n\t"
160752 #else
160753         "add	r3, r3, r6\n\t"
160754 #endif
160755 #ifdef WOLFSSL_KEIL
160756         "adcs	r4, r4, %[r]\n\t"
160757 #elif defined(__clang__)
160758         "adcs	r4, %[r]\n\t"
160759 #else
160760         "adc	r4, %[r]\n\t"
160761 #endif
160762 #ifdef WOLFSSL_KEIL
160763         "adcs	r2, r2, %[r]\n\t"
160764 #elif defined(__clang__)
160765         "adcs	r2, %[r]\n\t"
160766 #else
160767         "adc	r2, %[r]\n\t"
160768 #endif
160769 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160770         "adds	r3, r3, r6\n\t"
160771 #else
160772         "add	r3, r3, r6\n\t"
160773 #endif
160774 #ifdef WOLFSSL_KEIL
160775         "adcs	r4, r4, %[r]\n\t"
160776 #elif defined(__clang__)
160777         "adcs	r4, %[r]\n\t"
160778 #else
160779         "adc	r4, %[r]\n\t"
160780 #endif
160781 #ifdef WOLFSSL_KEIL
160782         "adcs	r2, r2, %[r]\n\t"
160783 #elif defined(__clang__)
160784         "adcs	r2, %[r]\n\t"
160785 #else
160786         "adc	r2, %[r]\n\t"
160787 #endif
160788 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160789         "lsrs	r6, r7, #16\n\t"
160790 #else
160791         "lsr	r6, r7, #16\n\t"
160792 #endif
160793 #ifdef WOLFSSL_KEIL
160794         "muls	r5, r6, r5\n\t"
160795 #elif defined(__clang__)
160796         "muls	r5, r6\n\t"
160797 #else
160798         "mul	r5, r6\n\t"
160799 #endif
160800 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160801         "lsrs	r6, r5, #16\n\t"
160802 #else
160803         "lsr	r6, r5, #16\n\t"
160804 #endif
160805 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160806         "lsls	r5, r5, #16\n\t"
160807 #else
160808         "lsl	r5, r5, #16\n\t"
160809 #endif
160810 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160811         "adds	r3, r3, r5\n\t"
160812 #else
160813         "add	r3, r3, r5\n\t"
160814 #endif
160815 #ifdef WOLFSSL_KEIL
160816         "adcs	r4, r4, r6\n\t"
160817 #elif defined(__clang__)
160818         "adcs	r4, r6\n\t"
160819 #else
160820         "adc	r4, r6\n\t"
160821 #endif
160822 #ifdef WOLFSSL_KEIL
160823         "adcs	r2, r2, %[r]\n\t"
160824 #elif defined(__clang__)
160825         "adcs	r2, %[r]\n\t"
160826 #else
160827         "adc	r2, %[r]\n\t"
160828 #endif
160829 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160830         "adds	r3, r3, r5\n\t"
160831 #else
160832         "add	r3, r3, r5\n\t"
160833 #endif
160834 #ifdef WOLFSSL_KEIL
160835         "adcs	r4, r4, r6\n\t"
160836 #elif defined(__clang__)
160837         "adcs	r4, r6\n\t"
160838 #else
160839         "adc	r4, r6\n\t"
160840 #endif
160841 #ifdef WOLFSSL_KEIL
160842         "adcs	r2, r2, %[r]\n\t"
160843 #elif defined(__clang__)
160844         "adcs	r2, %[r]\n\t"
160845 #else
160846         "adc	r2, %[r]\n\t"
160847 #endif
160848 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160849         "lsrs	r5, %[a], #16\n\t"
160850 #else
160851         "lsr	r5, %[a], #16\n\t"
160852 #endif
160853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160854         "lsrs	r6, r7, #16\n\t"
160855 #else
160856         "lsr	r6, r7, #16\n\t"
160857 #endif
160858 #ifdef WOLFSSL_KEIL
160859         "muls	r6, r5, r6\n\t"
160860 #elif defined(__clang__)
160861         "muls	r6, r5\n\t"
160862 #else
160863         "mul	r6, r5\n\t"
160864 #endif
160865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160866         "adds	r4, r4, r6\n\t"
160867 #else
160868         "add	r4, r4, r6\n\t"
160869 #endif
160870 #ifdef WOLFSSL_KEIL
160871         "adcs	r2, r2, %[r]\n\t"
160872 #elif defined(__clang__)
160873         "adcs	r2, %[r]\n\t"
160874 #else
160875         "adc	r2, %[r]\n\t"
160876 #endif
160877 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160878         "adds	r4, r4, r6\n\t"
160879 #else
160880         "add	r4, r4, r6\n\t"
160881 #endif
160882 #ifdef WOLFSSL_KEIL
160883         "adcs	r2, r2, %[r]\n\t"
160884 #elif defined(__clang__)
160885         "adcs	r2, %[r]\n\t"
160886 #else
160887         "adc	r2, %[r]\n\t"
160888 #endif
160889         "uxth	r6, r7\n\t"
160890 #ifdef WOLFSSL_KEIL
160891         "muls	r5, r6, r5\n\t"
160892 #elif defined(__clang__)
160893         "muls	r5, r6\n\t"
160894 #else
160895         "mul	r5, r6\n\t"
160896 #endif
160897 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160898         "lsrs	r6, r5, #16\n\t"
160899 #else
160900         "lsr	r6, r5, #16\n\t"
160901 #endif
160902 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160903         "lsls	r5, r5, #16\n\t"
160904 #else
160905         "lsl	r5, r5, #16\n\t"
160906 #endif
160907 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160908         "adds	r3, r3, r5\n\t"
160909 #else
160910         "add	r3, r3, r5\n\t"
160911 #endif
160912 #ifdef WOLFSSL_KEIL
160913         "adcs	r4, r4, r6\n\t"
160914 #elif defined(__clang__)
160915         "adcs	r4, r6\n\t"
160916 #else
160917         "adc	r4, r6\n\t"
160918 #endif
160919 #ifdef WOLFSSL_KEIL
160920         "adcs	r2, r2, %[r]\n\t"
160921 #elif defined(__clang__)
160922         "adcs	r2, %[r]\n\t"
160923 #else
160924         "adc	r2, %[r]\n\t"
160925 #endif
160926 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160927         "adds	r3, r3, r5\n\t"
160928 #else
160929         "add	r3, r3, r5\n\t"
160930 #endif
160931 #ifdef WOLFSSL_KEIL
160932         "adcs	r4, r4, r6\n\t"
160933 #elif defined(__clang__)
160934         "adcs	r4, r6\n\t"
160935 #else
160936         "adc	r4, r6\n\t"
160937 #endif
160938 #ifdef WOLFSSL_KEIL
160939         "adcs	r2, r2, %[r]\n\t"
160940 #elif defined(__clang__)
160941         "adcs	r2, %[r]\n\t"
160942 #else
160943         "adc	r2, %[r]\n\t"
160944 #endif
160945         "#  A[6] * A[4]\n\t"
160946         "mov	%[a], r9\n\t"
160947         "ldr	r7, [%[a], #16]\n\t"
160948         "ldr	%[a], [%[a], #24]\n\t"
160949         "uxth	r5, %[a]\n\t"
160950         "uxth	r6, r7\n\t"
160951 #ifdef WOLFSSL_KEIL
160952         "muls	r6, r5, r6\n\t"
160953 #elif defined(__clang__)
160954         "muls	r6, r5\n\t"
160955 #else
160956         "mul	r6, r5\n\t"
160957 #endif
160958 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160959         "adds	r3, r3, r6\n\t"
160960 #else
160961         "add	r3, r3, r6\n\t"
160962 #endif
160963 #ifdef WOLFSSL_KEIL
160964         "adcs	r4, r4, %[r]\n\t"
160965 #elif defined(__clang__)
160966         "adcs	r4, %[r]\n\t"
160967 #else
160968         "adc	r4, %[r]\n\t"
160969 #endif
160970 #ifdef WOLFSSL_KEIL
160971         "adcs	r2, r2, %[r]\n\t"
160972 #elif defined(__clang__)
160973         "adcs	r2, %[r]\n\t"
160974 #else
160975         "adc	r2, %[r]\n\t"
160976 #endif
160977 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160978         "adds	r3, r3, r6\n\t"
160979 #else
160980         "add	r3, r3, r6\n\t"
160981 #endif
160982 #ifdef WOLFSSL_KEIL
160983         "adcs	r4, r4, %[r]\n\t"
160984 #elif defined(__clang__)
160985         "adcs	r4, %[r]\n\t"
160986 #else
160987         "adc	r4, %[r]\n\t"
160988 #endif
160989 #ifdef WOLFSSL_KEIL
160990         "adcs	r2, r2, %[r]\n\t"
160991 #elif defined(__clang__)
160992         "adcs	r2, %[r]\n\t"
160993 #else
160994         "adc	r2, %[r]\n\t"
160995 #endif
160996 #if defined(__clang__) || defined(WOLFSSL_KEIL)
160997         "lsrs	r6, r7, #16\n\t"
160998 #else
160999         "lsr	r6, r7, #16\n\t"
161000 #endif
161001 #ifdef WOLFSSL_KEIL
161002         "muls	r5, r6, r5\n\t"
161003 #elif defined(__clang__)
161004         "muls	r5, r6\n\t"
161005 #else
161006         "mul	r5, r6\n\t"
161007 #endif
161008 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161009         "lsrs	r6, r5, #16\n\t"
161010 #else
161011         "lsr	r6, r5, #16\n\t"
161012 #endif
161013 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161014         "lsls	r5, r5, #16\n\t"
161015 #else
161016         "lsl	r5, r5, #16\n\t"
161017 #endif
161018 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161019         "adds	r3, r3, r5\n\t"
161020 #else
161021         "add	r3, r3, r5\n\t"
161022 #endif
161023 #ifdef WOLFSSL_KEIL
161024         "adcs	r4, r4, r6\n\t"
161025 #elif defined(__clang__)
161026         "adcs	r4, r6\n\t"
161027 #else
161028         "adc	r4, r6\n\t"
161029 #endif
161030 #ifdef WOLFSSL_KEIL
161031         "adcs	r2, r2, %[r]\n\t"
161032 #elif defined(__clang__)
161033         "adcs	r2, %[r]\n\t"
161034 #else
161035         "adc	r2, %[r]\n\t"
161036 #endif
161037 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161038         "adds	r3, r3, r5\n\t"
161039 #else
161040         "add	r3, r3, r5\n\t"
161041 #endif
161042 #ifdef WOLFSSL_KEIL
161043         "adcs	r4, r4, r6\n\t"
161044 #elif defined(__clang__)
161045         "adcs	r4, r6\n\t"
161046 #else
161047         "adc	r4, r6\n\t"
161048 #endif
161049 #ifdef WOLFSSL_KEIL
161050         "adcs	r2, r2, %[r]\n\t"
161051 #elif defined(__clang__)
161052         "adcs	r2, %[r]\n\t"
161053 #else
161054         "adc	r2, %[r]\n\t"
161055 #endif
161056 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161057         "lsrs	r5, %[a], #16\n\t"
161058 #else
161059         "lsr	r5, %[a], #16\n\t"
161060 #endif
161061 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161062         "lsrs	r6, r7, #16\n\t"
161063 #else
161064         "lsr	r6, r7, #16\n\t"
161065 #endif
161066 #ifdef WOLFSSL_KEIL
161067         "muls	r6, r5, r6\n\t"
161068 #elif defined(__clang__)
161069         "muls	r6, r5\n\t"
161070 #else
161071         "mul	r6, r5\n\t"
161072 #endif
161073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161074         "adds	r4, r4, r6\n\t"
161075 #else
161076         "add	r4, r4, r6\n\t"
161077 #endif
161078 #ifdef WOLFSSL_KEIL
161079         "adcs	r2, r2, %[r]\n\t"
161080 #elif defined(__clang__)
161081         "adcs	r2, %[r]\n\t"
161082 #else
161083         "adc	r2, %[r]\n\t"
161084 #endif
161085 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161086         "adds	r4, r4, r6\n\t"
161087 #else
161088         "add	r4, r4, r6\n\t"
161089 #endif
161090 #ifdef WOLFSSL_KEIL
161091         "adcs	r2, r2, %[r]\n\t"
161092 #elif defined(__clang__)
161093         "adcs	r2, %[r]\n\t"
161094 #else
161095         "adc	r2, %[r]\n\t"
161096 #endif
161097         "uxth	r6, r7\n\t"
161098 #ifdef WOLFSSL_KEIL
161099         "muls	r5, r6, r5\n\t"
161100 #elif defined(__clang__)
161101         "muls	r5, r6\n\t"
161102 #else
161103         "mul	r5, r6\n\t"
161104 #endif
161105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161106         "lsrs	r6, r5, #16\n\t"
161107 #else
161108         "lsr	r6, r5, #16\n\t"
161109 #endif
161110 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161111         "lsls	r5, r5, #16\n\t"
161112 #else
161113         "lsl	r5, r5, #16\n\t"
161114 #endif
161115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161116         "adds	r3, r3, r5\n\t"
161117 #else
161118         "add	r3, r3, r5\n\t"
161119 #endif
161120 #ifdef WOLFSSL_KEIL
161121         "adcs	r4, r4, r6\n\t"
161122 #elif defined(__clang__)
161123         "adcs	r4, r6\n\t"
161124 #else
161125         "adc	r4, r6\n\t"
161126 #endif
161127 #ifdef WOLFSSL_KEIL
161128         "adcs	r2, r2, %[r]\n\t"
161129 #elif defined(__clang__)
161130         "adcs	r2, %[r]\n\t"
161131 #else
161132         "adc	r2, %[r]\n\t"
161133 #endif
161134 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161135         "adds	r3, r3, r5\n\t"
161136 #else
161137         "add	r3, r3, r5\n\t"
161138 #endif
161139 #ifdef WOLFSSL_KEIL
161140         "adcs	r4, r4, r6\n\t"
161141 #elif defined(__clang__)
161142         "adcs	r4, r6\n\t"
161143 #else
161144         "adc	r4, r6\n\t"
161145 #endif
161146 #ifdef WOLFSSL_KEIL
161147         "adcs	r2, r2, %[r]\n\t"
161148 #elif defined(__clang__)
161149         "adcs	r2, %[r]\n\t"
161150 #else
161151         "adc	r2, %[r]\n\t"
161152 #endif
161153         "#  A[5] * A[5]\n\t"
161154         "mov	%[a], r9\n\t"
161155         "ldr	r7, [%[a], #20]\n\t"
161156 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161157         "lsrs	r6, r7, #16\n\t"
161158 #else
161159         "lsr	r6, r7, #16\n\t"
161160 #endif
161161         "uxth	r5, r7\n\t"
161162 #ifdef WOLFSSL_KEIL
161163         "muls	r5, r5, r5\n\t"
161164 #elif defined(__clang__)
161165         "muls	r5, r5\n\t"
161166 #else
161167         "mul	r5, r5\n\t"
161168 #endif
161169 #ifdef WOLFSSL_KEIL
161170         "muls	r6, r6, r6\n\t"
161171 #elif defined(__clang__)
161172         "muls	r6, r6\n\t"
161173 #else
161174         "mul	r6, r6\n\t"
161175 #endif
161176 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161177         "adds	r3, r3, r5\n\t"
161178 #else
161179         "add	r3, r3, r5\n\t"
161180 #endif
161181 #ifdef WOLFSSL_KEIL
161182         "adcs	r4, r4, r6\n\t"
161183 #elif defined(__clang__)
161184         "adcs	r4, r6\n\t"
161185 #else
161186         "adc	r4, r6\n\t"
161187 #endif
161188 #ifdef WOLFSSL_KEIL
161189         "adcs	r2, r2, %[r]\n\t"
161190 #elif defined(__clang__)
161191         "adcs	r2, %[r]\n\t"
161192 #else
161193         "adc	r2, %[r]\n\t"
161194 #endif
161195 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161196         "lsrs	r6, r7, #16\n\t"
161197 #else
161198         "lsr	r6, r7, #16\n\t"
161199 #endif
161200         "uxth	r5, r7\n\t"
161201 #ifdef WOLFSSL_KEIL
161202         "muls	r5, r6, r5\n\t"
161203 #elif defined(__clang__)
161204         "muls	r5, r6\n\t"
161205 #else
161206         "mul	r5, r6\n\t"
161207 #endif
161208 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161209         "lsrs	r6, r5, #15\n\t"
161210 #else
161211         "lsr	r6, r5, #15\n\t"
161212 #endif
161213 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161214         "lsls	r5, r5, #17\n\t"
161215 #else
161216         "lsl	r5, r5, #17\n\t"
161217 #endif
161218 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161219         "adds	r3, r3, r5\n\t"
161220 #else
161221         "add	r3, r3, r5\n\t"
161222 #endif
161223 #ifdef WOLFSSL_KEIL
161224         "adcs	r4, r4, r6\n\t"
161225 #elif defined(__clang__)
161226         "adcs	r4, r6\n\t"
161227 #else
161228         "adc	r4, r6\n\t"
161229 #endif
161230 #ifdef WOLFSSL_KEIL
161231         "adcs	r2, r2, %[r]\n\t"
161232 #elif defined(__clang__)
161233         "adcs	r2, %[r]\n\t"
161234 #else
161235         "adc	r2, %[r]\n\t"
161236 #endif
161237         "str	r3, [sp, #40]\n\t"
161238         "#  A[6] * A[5]\n\t"
161239         "movs	r3, #0\n\t"
161240         "ldr	%[a], [%[a], #24]\n\t"
161241         "uxth	r5, %[a]\n\t"
161242         "uxth	r6, r7\n\t"
161243 #ifdef WOLFSSL_KEIL
161244         "muls	r6, r5, r6\n\t"
161245 #elif defined(__clang__)
161246         "muls	r6, r5\n\t"
161247 #else
161248         "mul	r6, r5\n\t"
161249 #endif
161250 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161251         "adds	r4, r4, r6\n\t"
161252 #else
161253         "add	r4, r4, r6\n\t"
161254 #endif
161255 #ifdef WOLFSSL_KEIL
161256         "adcs	r2, r2, %[r]\n\t"
161257 #elif defined(__clang__)
161258         "adcs	r2, %[r]\n\t"
161259 #else
161260         "adc	r2, %[r]\n\t"
161261 #endif
161262 #ifdef WOLFSSL_KEIL
161263         "adcs	r3, r3, %[r]\n\t"
161264 #elif defined(__clang__)
161265         "adcs	r3, %[r]\n\t"
161266 #else
161267         "adc	r3, %[r]\n\t"
161268 #endif
161269 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161270         "adds	r4, r4, r6\n\t"
161271 #else
161272         "add	r4, r4, r6\n\t"
161273 #endif
161274 #ifdef WOLFSSL_KEIL
161275         "adcs	r2, r2, %[r]\n\t"
161276 #elif defined(__clang__)
161277         "adcs	r2, %[r]\n\t"
161278 #else
161279         "adc	r2, %[r]\n\t"
161280 #endif
161281 #ifdef WOLFSSL_KEIL
161282         "adcs	r3, r3, %[r]\n\t"
161283 #elif defined(__clang__)
161284         "adcs	r3, %[r]\n\t"
161285 #else
161286         "adc	r3, %[r]\n\t"
161287 #endif
161288 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161289         "lsrs	r6, r7, #16\n\t"
161290 #else
161291         "lsr	r6, r7, #16\n\t"
161292 #endif
161293 #ifdef WOLFSSL_KEIL
161294         "muls	r5, r6, r5\n\t"
161295 #elif defined(__clang__)
161296         "muls	r5, r6\n\t"
161297 #else
161298         "mul	r5, r6\n\t"
161299 #endif
161300 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161301         "lsrs	r6, r5, #16\n\t"
161302 #else
161303         "lsr	r6, r5, #16\n\t"
161304 #endif
161305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161306         "lsls	r5, r5, #16\n\t"
161307 #else
161308         "lsl	r5, r5, #16\n\t"
161309 #endif
161310 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161311         "adds	r4, r4, r5\n\t"
161312 #else
161313         "add	r4, r4, r5\n\t"
161314 #endif
161315 #ifdef WOLFSSL_KEIL
161316         "adcs	r2, r2, r6\n\t"
161317 #elif defined(__clang__)
161318         "adcs	r2, r6\n\t"
161319 #else
161320         "adc	r2, r6\n\t"
161321 #endif
161322 #ifdef WOLFSSL_KEIL
161323         "adcs	r3, r3, %[r]\n\t"
161324 #elif defined(__clang__)
161325         "adcs	r3, %[r]\n\t"
161326 #else
161327         "adc	r3, %[r]\n\t"
161328 #endif
161329 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161330         "adds	r4, r4, r5\n\t"
161331 #else
161332         "add	r4, r4, r5\n\t"
161333 #endif
161334 #ifdef WOLFSSL_KEIL
161335         "adcs	r2, r2, r6\n\t"
161336 #elif defined(__clang__)
161337         "adcs	r2, r6\n\t"
161338 #else
161339         "adc	r2, r6\n\t"
161340 #endif
161341 #ifdef WOLFSSL_KEIL
161342         "adcs	r3, r3, %[r]\n\t"
161343 #elif defined(__clang__)
161344         "adcs	r3, %[r]\n\t"
161345 #else
161346         "adc	r3, %[r]\n\t"
161347 #endif
161348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161349         "lsrs	r5, %[a], #16\n\t"
161350 #else
161351         "lsr	r5, %[a], #16\n\t"
161352 #endif
161353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161354         "lsrs	r6, r7, #16\n\t"
161355 #else
161356         "lsr	r6, r7, #16\n\t"
161357 #endif
161358 #ifdef WOLFSSL_KEIL
161359         "muls	r6, r5, r6\n\t"
161360 #elif defined(__clang__)
161361         "muls	r6, r5\n\t"
161362 #else
161363         "mul	r6, r5\n\t"
161364 #endif
161365 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161366         "adds	r2, r2, r6\n\t"
161367 #else
161368         "add	r2, r2, r6\n\t"
161369 #endif
161370 #ifdef WOLFSSL_KEIL
161371         "adcs	r3, r3, %[r]\n\t"
161372 #elif defined(__clang__)
161373         "adcs	r3, %[r]\n\t"
161374 #else
161375         "adc	r3, %[r]\n\t"
161376 #endif
161377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161378         "adds	r2, r2, r6\n\t"
161379 #else
161380         "add	r2, r2, r6\n\t"
161381 #endif
161382 #ifdef WOLFSSL_KEIL
161383         "adcs	r3, r3, %[r]\n\t"
161384 #elif defined(__clang__)
161385         "adcs	r3, %[r]\n\t"
161386 #else
161387         "adc	r3, %[r]\n\t"
161388 #endif
161389         "uxth	r6, r7\n\t"
161390 #ifdef WOLFSSL_KEIL
161391         "muls	r5, r6, r5\n\t"
161392 #elif defined(__clang__)
161393         "muls	r5, r6\n\t"
161394 #else
161395         "mul	r5, r6\n\t"
161396 #endif
161397 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161398         "lsrs	r6, r5, #16\n\t"
161399 #else
161400         "lsr	r6, r5, #16\n\t"
161401 #endif
161402 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161403         "lsls	r5, r5, #16\n\t"
161404 #else
161405         "lsl	r5, r5, #16\n\t"
161406 #endif
161407 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161408         "adds	r4, r4, r5\n\t"
161409 #else
161410         "add	r4, r4, r5\n\t"
161411 #endif
161412 #ifdef WOLFSSL_KEIL
161413         "adcs	r2, r2, r6\n\t"
161414 #elif defined(__clang__)
161415         "adcs	r2, r6\n\t"
161416 #else
161417         "adc	r2, r6\n\t"
161418 #endif
161419 #ifdef WOLFSSL_KEIL
161420         "adcs	r3, r3, %[r]\n\t"
161421 #elif defined(__clang__)
161422         "adcs	r3, %[r]\n\t"
161423 #else
161424         "adc	r3, %[r]\n\t"
161425 #endif
161426 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161427         "adds	r4, r4, r5\n\t"
161428 #else
161429         "add	r4, r4, r5\n\t"
161430 #endif
161431 #ifdef WOLFSSL_KEIL
161432         "adcs	r2, r2, r6\n\t"
161433 #elif defined(__clang__)
161434         "adcs	r2, r6\n\t"
161435 #else
161436         "adc	r2, r6\n\t"
161437 #endif
161438 #ifdef WOLFSSL_KEIL
161439         "adcs	r3, r3, %[r]\n\t"
161440 #elif defined(__clang__)
161441         "adcs	r3, %[r]\n\t"
161442 #else
161443         "adc	r3, %[r]\n\t"
161444 #endif
161445         "#  A[7] * A[4]\n\t"
161446         "mov	%[a], r9\n\t"
161447         "ldr	r7, [%[a], #16]\n\t"
161448         "ldr	%[a], [%[a], #28]\n\t"
161449         "uxth	r5, %[a]\n\t"
161450         "uxth	r6, r7\n\t"
161451 #ifdef WOLFSSL_KEIL
161452         "muls	r6, r5, r6\n\t"
161453 #elif defined(__clang__)
161454         "muls	r6, r5\n\t"
161455 #else
161456         "mul	r6, r5\n\t"
161457 #endif
161458 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161459         "adds	r4, r4, r6\n\t"
161460 #else
161461         "add	r4, r4, r6\n\t"
161462 #endif
161463 #ifdef WOLFSSL_KEIL
161464         "adcs	r2, r2, %[r]\n\t"
161465 #elif defined(__clang__)
161466         "adcs	r2, %[r]\n\t"
161467 #else
161468         "adc	r2, %[r]\n\t"
161469 #endif
161470 #ifdef WOLFSSL_KEIL
161471         "adcs	r3, r3, %[r]\n\t"
161472 #elif defined(__clang__)
161473         "adcs	r3, %[r]\n\t"
161474 #else
161475         "adc	r3, %[r]\n\t"
161476 #endif
161477 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161478         "adds	r4, r4, r6\n\t"
161479 #else
161480         "add	r4, r4, r6\n\t"
161481 #endif
161482 #ifdef WOLFSSL_KEIL
161483         "adcs	r2, r2, %[r]\n\t"
161484 #elif defined(__clang__)
161485         "adcs	r2, %[r]\n\t"
161486 #else
161487         "adc	r2, %[r]\n\t"
161488 #endif
161489 #ifdef WOLFSSL_KEIL
161490         "adcs	r3, r3, %[r]\n\t"
161491 #elif defined(__clang__)
161492         "adcs	r3, %[r]\n\t"
161493 #else
161494         "adc	r3, %[r]\n\t"
161495 #endif
161496 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161497         "lsrs	r6, r7, #16\n\t"
161498 #else
161499         "lsr	r6, r7, #16\n\t"
161500 #endif
161501 #ifdef WOLFSSL_KEIL
161502         "muls	r5, r6, r5\n\t"
161503 #elif defined(__clang__)
161504         "muls	r5, r6\n\t"
161505 #else
161506         "mul	r5, r6\n\t"
161507 #endif
161508 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161509         "lsrs	r6, r5, #16\n\t"
161510 #else
161511         "lsr	r6, r5, #16\n\t"
161512 #endif
161513 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161514         "lsls	r5, r5, #16\n\t"
161515 #else
161516         "lsl	r5, r5, #16\n\t"
161517 #endif
161518 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161519         "adds	r4, r4, r5\n\t"
161520 #else
161521         "add	r4, r4, r5\n\t"
161522 #endif
161523 #ifdef WOLFSSL_KEIL
161524         "adcs	r2, r2, r6\n\t"
161525 #elif defined(__clang__)
161526         "adcs	r2, r6\n\t"
161527 #else
161528         "adc	r2, r6\n\t"
161529 #endif
161530 #ifdef WOLFSSL_KEIL
161531         "adcs	r3, r3, %[r]\n\t"
161532 #elif defined(__clang__)
161533         "adcs	r3, %[r]\n\t"
161534 #else
161535         "adc	r3, %[r]\n\t"
161536 #endif
161537 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161538         "adds	r4, r4, r5\n\t"
161539 #else
161540         "add	r4, r4, r5\n\t"
161541 #endif
161542 #ifdef WOLFSSL_KEIL
161543         "adcs	r2, r2, r6\n\t"
161544 #elif defined(__clang__)
161545         "adcs	r2, r6\n\t"
161546 #else
161547         "adc	r2, r6\n\t"
161548 #endif
161549 #ifdef WOLFSSL_KEIL
161550         "adcs	r3, r3, %[r]\n\t"
161551 #elif defined(__clang__)
161552         "adcs	r3, %[r]\n\t"
161553 #else
161554         "adc	r3, %[r]\n\t"
161555 #endif
161556 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161557         "lsrs	r5, %[a], #16\n\t"
161558 #else
161559         "lsr	r5, %[a], #16\n\t"
161560 #endif
161561 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161562         "lsrs	r6, r7, #16\n\t"
161563 #else
161564         "lsr	r6, r7, #16\n\t"
161565 #endif
161566 #ifdef WOLFSSL_KEIL
161567         "muls	r6, r5, r6\n\t"
161568 #elif defined(__clang__)
161569         "muls	r6, r5\n\t"
161570 #else
161571         "mul	r6, r5\n\t"
161572 #endif
161573 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161574         "adds	r2, r2, r6\n\t"
161575 #else
161576         "add	r2, r2, r6\n\t"
161577 #endif
161578 #ifdef WOLFSSL_KEIL
161579         "adcs	r3, r3, %[r]\n\t"
161580 #elif defined(__clang__)
161581         "adcs	r3, %[r]\n\t"
161582 #else
161583         "adc	r3, %[r]\n\t"
161584 #endif
161585 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161586         "adds	r2, r2, r6\n\t"
161587 #else
161588         "add	r2, r2, r6\n\t"
161589 #endif
161590 #ifdef WOLFSSL_KEIL
161591         "adcs	r3, r3, %[r]\n\t"
161592 #elif defined(__clang__)
161593         "adcs	r3, %[r]\n\t"
161594 #else
161595         "adc	r3, %[r]\n\t"
161596 #endif
161597         "uxth	r6, r7\n\t"
161598 #ifdef WOLFSSL_KEIL
161599         "muls	r5, r6, r5\n\t"
161600 #elif defined(__clang__)
161601         "muls	r5, r6\n\t"
161602 #else
161603         "mul	r5, r6\n\t"
161604 #endif
161605 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161606         "lsrs	r6, r5, #16\n\t"
161607 #else
161608         "lsr	r6, r5, #16\n\t"
161609 #endif
161610 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161611         "lsls	r5, r5, #16\n\t"
161612 #else
161613         "lsl	r5, r5, #16\n\t"
161614 #endif
161615 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161616         "adds	r4, r4, r5\n\t"
161617 #else
161618         "add	r4, r4, r5\n\t"
161619 #endif
161620 #ifdef WOLFSSL_KEIL
161621         "adcs	r2, r2, r6\n\t"
161622 #elif defined(__clang__)
161623         "adcs	r2, r6\n\t"
161624 #else
161625         "adc	r2, r6\n\t"
161626 #endif
161627 #ifdef WOLFSSL_KEIL
161628         "adcs	r3, r3, %[r]\n\t"
161629 #elif defined(__clang__)
161630         "adcs	r3, %[r]\n\t"
161631 #else
161632         "adc	r3, %[r]\n\t"
161633 #endif
161634 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161635         "adds	r4, r4, r5\n\t"
161636 #else
161637         "add	r4, r4, r5\n\t"
161638 #endif
161639 #ifdef WOLFSSL_KEIL
161640         "adcs	r2, r2, r6\n\t"
161641 #elif defined(__clang__)
161642         "adcs	r2, r6\n\t"
161643 #else
161644         "adc	r2, r6\n\t"
161645 #endif
161646 #ifdef WOLFSSL_KEIL
161647         "adcs	r3, r3, %[r]\n\t"
161648 #elif defined(__clang__)
161649         "adcs	r3, %[r]\n\t"
161650 #else
161651         "adc	r3, %[r]\n\t"
161652 #endif
161653         "#  A[8] * A[3]\n\t"
161654         "mov	%[a], r9\n\t"
161655         "mov	r7, lr\n\t"
161656         "ldr	%[a], [%[a], #32]\n\t"
161657         "uxth	r5, %[a]\n\t"
161658         "uxth	r6, r7\n\t"
161659 #ifdef WOLFSSL_KEIL
161660         "muls	r6, r5, r6\n\t"
161661 #elif defined(__clang__)
161662         "muls	r6, r5\n\t"
161663 #else
161664         "mul	r6, r5\n\t"
161665 #endif
161666 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161667         "adds	r4, r4, r6\n\t"
161668 #else
161669         "add	r4, r4, r6\n\t"
161670 #endif
161671 #ifdef WOLFSSL_KEIL
161672         "adcs	r2, r2, %[r]\n\t"
161673 #elif defined(__clang__)
161674         "adcs	r2, %[r]\n\t"
161675 #else
161676         "adc	r2, %[r]\n\t"
161677 #endif
161678 #ifdef WOLFSSL_KEIL
161679         "adcs	r3, r3, %[r]\n\t"
161680 #elif defined(__clang__)
161681         "adcs	r3, %[r]\n\t"
161682 #else
161683         "adc	r3, %[r]\n\t"
161684 #endif
161685 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161686         "adds	r4, r4, r6\n\t"
161687 #else
161688         "add	r4, r4, r6\n\t"
161689 #endif
161690 #ifdef WOLFSSL_KEIL
161691         "adcs	r2, r2, %[r]\n\t"
161692 #elif defined(__clang__)
161693         "adcs	r2, %[r]\n\t"
161694 #else
161695         "adc	r2, %[r]\n\t"
161696 #endif
161697 #ifdef WOLFSSL_KEIL
161698         "adcs	r3, r3, %[r]\n\t"
161699 #elif defined(__clang__)
161700         "adcs	r3, %[r]\n\t"
161701 #else
161702         "adc	r3, %[r]\n\t"
161703 #endif
161704 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161705         "lsrs	r6, r7, #16\n\t"
161706 #else
161707         "lsr	r6, r7, #16\n\t"
161708 #endif
161709 #ifdef WOLFSSL_KEIL
161710         "muls	r5, r6, r5\n\t"
161711 #elif defined(__clang__)
161712         "muls	r5, r6\n\t"
161713 #else
161714         "mul	r5, r6\n\t"
161715 #endif
161716 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161717         "lsrs	r6, r5, #16\n\t"
161718 #else
161719         "lsr	r6, r5, #16\n\t"
161720 #endif
161721 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161722         "lsls	r5, r5, #16\n\t"
161723 #else
161724         "lsl	r5, r5, #16\n\t"
161725 #endif
161726 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161727         "adds	r4, r4, r5\n\t"
161728 #else
161729         "add	r4, r4, r5\n\t"
161730 #endif
161731 #ifdef WOLFSSL_KEIL
161732         "adcs	r2, r2, r6\n\t"
161733 #elif defined(__clang__)
161734         "adcs	r2, r6\n\t"
161735 #else
161736         "adc	r2, r6\n\t"
161737 #endif
161738 #ifdef WOLFSSL_KEIL
161739         "adcs	r3, r3, %[r]\n\t"
161740 #elif defined(__clang__)
161741         "adcs	r3, %[r]\n\t"
161742 #else
161743         "adc	r3, %[r]\n\t"
161744 #endif
161745 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161746         "adds	r4, r4, r5\n\t"
161747 #else
161748         "add	r4, r4, r5\n\t"
161749 #endif
161750 #ifdef WOLFSSL_KEIL
161751         "adcs	r2, r2, r6\n\t"
161752 #elif defined(__clang__)
161753         "adcs	r2, r6\n\t"
161754 #else
161755         "adc	r2, r6\n\t"
161756 #endif
161757 #ifdef WOLFSSL_KEIL
161758         "adcs	r3, r3, %[r]\n\t"
161759 #elif defined(__clang__)
161760         "adcs	r3, %[r]\n\t"
161761 #else
161762         "adc	r3, %[r]\n\t"
161763 #endif
161764 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161765         "lsrs	r5, %[a], #16\n\t"
161766 #else
161767         "lsr	r5, %[a], #16\n\t"
161768 #endif
161769 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161770         "lsrs	r6, r7, #16\n\t"
161771 #else
161772         "lsr	r6, r7, #16\n\t"
161773 #endif
161774 #ifdef WOLFSSL_KEIL
161775         "muls	r6, r5, r6\n\t"
161776 #elif defined(__clang__)
161777         "muls	r6, r5\n\t"
161778 #else
161779         "mul	r6, r5\n\t"
161780 #endif
161781 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161782         "adds	r2, r2, r6\n\t"
161783 #else
161784         "add	r2, r2, r6\n\t"
161785 #endif
161786 #ifdef WOLFSSL_KEIL
161787         "adcs	r3, r3, %[r]\n\t"
161788 #elif defined(__clang__)
161789         "adcs	r3, %[r]\n\t"
161790 #else
161791         "adc	r3, %[r]\n\t"
161792 #endif
161793 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161794         "adds	r2, r2, r6\n\t"
161795 #else
161796         "add	r2, r2, r6\n\t"
161797 #endif
161798 #ifdef WOLFSSL_KEIL
161799         "adcs	r3, r3, %[r]\n\t"
161800 #elif defined(__clang__)
161801         "adcs	r3, %[r]\n\t"
161802 #else
161803         "adc	r3, %[r]\n\t"
161804 #endif
161805         "uxth	r6, r7\n\t"
161806 #ifdef WOLFSSL_KEIL
161807         "muls	r5, r6, r5\n\t"
161808 #elif defined(__clang__)
161809         "muls	r5, r6\n\t"
161810 #else
161811         "mul	r5, r6\n\t"
161812 #endif
161813 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161814         "lsrs	r6, r5, #16\n\t"
161815 #else
161816         "lsr	r6, r5, #16\n\t"
161817 #endif
161818 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161819         "lsls	r5, r5, #16\n\t"
161820 #else
161821         "lsl	r5, r5, #16\n\t"
161822 #endif
161823 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161824         "adds	r4, r4, r5\n\t"
161825 #else
161826         "add	r4, r4, r5\n\t"
161827 #endif
161828 #ifdef WOLFSSL_KEIL
161829         "adcs	r2, r2, r6\n\t"
161830 #elif defined(__clang__)
161831         "adcs	r2, r6\n\t"
161832 #else
161833         "adc	r2, r6\n\t"
161834 #endif
161835 #ifdef WOLFSSL_KEIL
161836         "adcs	r3, r3, %[r]\n\t"
161837 #elif defined(__clang__)
161838         "adcs	r3, %[r]\n\t"
161839 #else
161840         "adc	r3, %[r]\n\t"
161841 #endif
161842 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161843         "adds	r4, r4, r5\n\t"
161844 #else
161845         "add	r4, r4, r5\n\t"
161846 #endif
161847 #ifdef WOLFSSL_KEIL
161848         "adcs	r2, r2, r6\n\t"
161849 #elif defined(__clang__)
161850         "adcs	r2, r6\n\t"
161851 #else
161852         "adc	r2, r6\n\t"
161853 #endif
161854 #ifdef WOLFSSL_KEIL
161855         "adcs	r3, r3, %[r]\n\t"
161856 #elif defined(__clang__)
161857         "adcs	r3, %[r]\n\t"
161858 #else
161859         "adc	r3, %[r]\n\t"
161860 #endif
161861         "#  A[9] * A[2]\n\t"
161862         "mov	%[a], r9\n\t"
161863         "mov	r7, r12\n\t"
161864         "ldr	%[a], [%[a], #36]\n\t"
161865         "uxth	r5, %[a]\n\t"
161866         "uxth	r6, r7\n\t"
161867 #ifdef WOLFSSL_KEIL
161868         "muls	r6, r5, r6\n\t"
161869 #elif defined(__clang__)
161870         "muls	r6, r5\n\t"
161871 #else
161872         "mul	r6, r5\n\t"
161873 #endif
161874 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161875         "adds	r4, r4, r6\n\t"
161876 #else
161877         "add	r4, r4, r6\n\t"
161878 #endif
161879 #ifdef WOLFSSL_KEIL
161880         "adcs	r2, r2, %[r]\n\t"
161881 #elif defined(__clang__)
161882         "adcs	r2, %[r]\n\t"
161883 #else
161884         "adc	r2, %[r]\n\t"
161885 #endif
161886 #ifdef WOLFSSL_KEIL
161887         "adcs	r3, r3, %[r]\n\t"
161888 #elif defined(__clang__)
161889         "adcs	r3, %[r]\n\t"
161890 #else
161891         "adc	r3, %[r]\n\t"
161892 #endif
161893 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161894         "adds	r4, r4, r6\n\t"
161895 #else
161896         "add	r4, r4, r6\n\t"
161897 #endif
161898 #ifdef WOLFSSL_KEIL
161899         "adcs	r2, r2, %[r]\n\t"
161900 #elif defined(__clang__)
161901         "adcs	r2, %[r]\n\t"
161902 #else
161903         "adc	r2, %[r]\n\t"
161904 #endif
161905 #ifdef WOLFSSL_KEIL
161906         "adcs	r3, r3, %[r]\n\t"
161907 #elif defined(__clang__)
161908         "adcs	r3, %[r]\n\t"
161909 #else
161910         "adc	r3, %[r]\n\t"
161911 #endif
161912 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161913         "lsrs	r6, r7, #16\n\t"
161914 #else
161915         "lsr	r6, r7, #16\n\t"
161916 #endif
161917 #ifdef WOLFSSL_KEIL
161918         "muls	r5, r6, r5\n\t"
161919 #elif defined(__clang__)
161920         "muls	r5, r6\n\t"
161921 #else
161922         "mul	r5, r6\n\t"
161923 #endif
161924 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161925         "lsrs	r6, r5, #16\n\t"
161926 #else
161927         "lsr	r6, r5, #16\n\t"
161928 #endif
161929 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161930         "lsls	r5, r5, #16\n\t"
161931 #else
161932         "lsl	r5, r5, #16\n\t"
161933 #endif
161934 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161935         "adds	r4, r4, r5\n\t"
161936 #else
161937         "add	r4, r4, r5\n\t"
161938 #endif
161939 #ifdef WOLFSSL_KEIL
161940         "adcs	r2, r2, r6\n\t"
161941 #elif defined(__clang__)
161942         "adcs	r2, r6\n\t"
161943 #else
161944         "adc	r2, r6\n\t"
161945 #endif
161946 #ifdef WOLFSSL_KEIL
161947         "adcs	r3, r3, %[r]\n\t"
161948 #elif defined(__clang__)
161949         "adcs	r3, %[r]\n\t"
161950 #else
161951         "adc	r3, %[r]\n\t"
161952 #endif
161953 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161954         "adds	r4, r4, r5\n\t"
161955 #else
161956         "add	r4, r4, r5\n\t"
161957 #endif
161958 #ifdef WOLFSSL_KEIL
161959         "adcs	r2, r2, r6\n\t"
161960 #elif defined(__clang__)
161961         "adcs	r2, r6\n\t"
161962 #else
161963         "adc	r2, r6\n\t"
161964 #endif
161965 #ifdef WOLFSSL_KEIL
161966         "adcs	r3, r3, %[r]\n\t"
161967 #elif defined(__clang__)
161968         "adcs	r3, %[r]\n\t"
161969 #else
161970         "adc	r3, %[r]\n\t"
161971 #endif
161972 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161973         "lsrs	r5, %[a], #16\n\t"
161974 #else
161975         "lsr	r5, %[a], #16\n\t"
161976 #endif
161977 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161978         "lsrs	r6, r7, #16\n\t"
161979 #else
161980         "lsr	r6, r7, #16\n\t"
161981 #endif
161982 #ifdef WOLFSSL_KEIL
161983         "muls	r6, r5, r6\n\t"
161984 #elif defined(__clang__)
161985         "muls	r6, r5\n\t"
161986 #else
161987         "mul	r6, r5\n\t"
161988 #endif
161989 #if defined(__clang__) || defined(WOLFSSL_KEIL)
161990         "adds	r2, r2, r6\n\t"
161991 #else
161992         "add	r2, r2, r6\n\t"
161993 #endif
161994 #ifdef WOLFSSL_KEIL
161995         "adcs	r3, r3, %[r]\n\t"
161996 #elif defined(__clang__)
161997         "adcs	r3, %[r]\n\t"
161998 #else
161999         "adc	r3, %[r]\n\t"
162000 #endif
162001 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162002         "adds	r2, r2, r6\n\t"
162003 #else
162004         "add	r2, r2, r6\n\t"
162005 #endif
162006 #ifdef WOLFSSL_KEIL
162007         "adcs	r3, r3, %[r]\n\t"
162008 #elif defined(__clang__)
162009         "adcs	r3, %[r]\n\t"
162010 #else
162011         "adc	r3, %[r]\n\t"
162012 #endif
162013         "uxth	r6, r7\n\t"
162014 #ifdef WOLFSSL_KEIL
162015         "muls	r5, r6, r5\n\t"
162016 #elif defined(__clang__)
162017         "muls	r5, r6\n\t"
162018 #else
162019         "mul	r5, r6\n\t"
162020 #endif
162021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162022         "lsrs	r6, r5, #16\n\t"
162023 #else
162024         "lsr	r6, r5, #16\n\t"
162025 #endif
162026 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162027         "lsls	r5, r5, #16\n\t"
162028 #else
162029         "lsl	r5, r5, #16\n\t"
162030 #endif
162031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162032         "adds	r4, r4, r5\n\t"
162033 #else
162034         "add	r4, r4, r5\n\t"
162035 #endif
162036 #ifdef WOLFSSL_KEIL
162037         "adcs	r2, r2, r6\n\t"
162038 #elif defined(__clang__)
162039         "adcs	r2, r6\n\t"
162040 #else
162041         "adc	r2, r6\n\t"
162042 #endif
162043 #ifdef WOLFSSL_KEIL
162044         "adcs	r3, r3, %[r]\n\t"
162045 #elif defined(__clang__)
162046         "adcs	r3, %[r]\n\t"
162047 #else
162048         "adc	r3, %[r]\n\t"
162049 #endif
162050 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162051         "adds	r4, r4, r5\n\t"
162052 #else
162053         "add	r4, r4, r5\n\t"
162054 #endif
162055 #ifdef WOLFSSL_KEIL
162056         "adcs	r2, r2, r6\n\t"
162057 #elif defined(__clang__)
162058         "adcs	r2, r6\n\t"
162059 #else
162060         "adc	r2, r6\n\t"
162061 #endif
162062 #ifdef WOLFSSL_KEIL
162063         "adcs	r3, r3, %[r]\n\t"
162064 #elif defined(__clang__)
162065         "adcs	r3, %[r]\n\t"
162066 #else
162067         "adc	r3, %[r]\n\t"
162068 #endif
162069         "#  A[10] * A[1]\n\t"
162070         "mov	%[a], r9\n\t"
162071         "mov	r7, r11\n\t"
162072         "ldr	%[a], [%[a], #40]\n\t"
162073         "uxth	r5, %[a]\n\t"
162074         "uxth	r6, r7\n\t"
162075 #ifdef WOLFSSL_KEIL
162076         "muls	r6, r5, r6\n\t"
162077 #elif defined(__clang__)
162078         "muls	r6, r5\n\t"
162079 #else
162080         "mul	r6, r5\n\t"
162081 #endif
162082 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162083         "adds	r4, r4, r6\n\t"
162084 #else
162085         "add	r4, r4, r6\n\t"
162086 #endif
162087 #ifdef WOLFSSL_KEIL
162088         "adcs	r2, r2, %[r]\n\t"
162089 #elif defined(__clang__)
162090         "adcs	r2, %[r]\n\t"
162091 #else
162092         "adc	r2, %[r]\n\t"
162093 #endif
162094 #ifdef WOLFSSL_KEIL
162095         "adcs	r3, r3, %[r]\n\t"
162096 #elif defined(__clang__)
162097         "adcs	r3, %[r]\n\t"
162098 #else
162099         "adc	r3, %[r]\n\t"
162100 #endif
162101 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162102         "adds	r4, r4, r6\n\t"
162103 #else
162104         "add	r4, r4, r6\n\t"
162105 #endif
162106 #ifdef WOLFSSL_KEIL
162107         "adcs	r2, r2, %[r]\n\t"
162108 #elif defined(__clang__)
162109         "adcs	r2, %[r]\n\t"
162110 #else
162111         "adc	r2, %[r]\n\t"
162112 #endif
162113 #ifdef WOLFSSL_KEIL
162114         "adcs	r3, r3, %[r]\n\t"
162115 #elif defined(__clang__)
162116         "adcs	r3, %[r]\n\t"
162117 #else
162118         "adc	r3, %[r]\n\t"
162119 #endif
162120 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162121         "lsrs	r6, r7, #16\n\t"
162122 #else
162123         "lsr	r6, r7, #16\n\t"
162124 #endif
162125 #ifdef WOLFSSL_KEIL
162126         "muls	r5, r6, r5\n\t"
162127 #elif defined(__clang__)
162128         "muls	r5, r6\n\t"
162129 #else
162130         "mul	r5, r6\n\t"
162131 #endif
162132 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162133         "lsrs	r6, r5, #16\n\t"
162134 #else
162135         "lsr	r6, r5, #16\n\t"
162136 #endif
162137 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162138         "lsls	r5, r5, #16\n\t"
162139 #else
162140         "lsl	r5, r5, #16\n\t"
162141 #endif
162142 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162143         "adds	r4, r4, r5\n\t"
162144 #else
162145         "add	r4, r4, r5\n\t"
162146 #endif
162147 #ifdef WOLFSSL_KEIL
162148         "adcs	r2, r2, r6\n\t"
162149 #elif defined(__clang__)
162150         "adcs	r2, r6\n\t"
162151 #else
162152         "adc	r2, r6\n\t"
162153 #endif
162154 #ifdef WOLFSSL_KEIL
162155         "adcs	r3, r3, %[r]\n\t"
162156 #elif defined(__clang__)
162157         "adcs	r3, %[r]\n\t"
162158 #else
162159         "adc	r3, %[r]\n\t"
162160 #endif
162161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162162         "adds	r4, r4, r5\n\t"
162163 #else
162164         "add	r4, r4, r5\n\t"
162165 #endif
162166 #ifdef WOLFSSL_KEIL
162167         "adcs	r2, r2, r6\n\t"
162168 #elif defined(__clang__)
162169         "adcs	r2, r6\n\t"
162170 #else
162171         "adc	r2, r6\n\t"
162172 #endif
162173 #ifdef WOLFSSL_KEIL
162174         "adcs	r3, r3, %[r]\n\t"
162175 #elif defined(__clang__)
162176         "adcs	r3, %[r]\n\t"
162177 #else
162178         "adc	r3, %[r]\n\t"
162179 #endif
162180 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162181         "lsrs	r5, %[a], #16\n\t"
162182 #else
162183         "lsr	r5, %[a], #16\n\t"
162184 #endif
162185 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162186         "lsrs	r6, r7, #16\n\t"
162187 #else
162188         "lsr	r6, r7, #16\n\t"
162189 #endif
162190 #ifdef WOLFSSL_KEIL
162191         "muls	r6, r5, r6\n\t"
162192 #elif defined(__clang__)
162193         "muls	r6, r5\n\t"
162194 #else
162195         "mul	r6, r5\n\t"
162196 #endif
162197 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162198         "adds	r2, r2, r6\n\t"
162199 #else
162200         "add	r2, r2, r6\n\t"
162201 #endif
162202 #ifdef WOLFSSL_KEIL
162203         "adcs	r3, r3, %[r]\n\t"
162204 #elif defined(__clang__)
162205         "adcs	r3, %[r]\n\t"
162206 #else
162207         "adc	r3, %[r]\n\t"
162208 #endif
162209 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162210         "adds	r2, r2, r6\n\t"
162211 #else
162212         "add	r2, r2, r6\n\t"
162213 #endif
162214 #ifdef WOLFSSL_KEIL
162215         "adcs	r3, r3, %[r]\n\t"
162216 #elif defined(__clang__)
162217         "adcs	r3, %[r]\n\t"
162218 #else
162219         "adc	r3, %[r]\n\t"
162220 #endif
162221         "uxth	r6, r7\n\t"
162222 #ifdef WOLFSSL_KEIL
162223         "muls	r5, r6, r5\n\t"
162224 #elif defined(__clang__)
162225         "muls	r5, r6\n\t"
162226 #else
162227         "mul	r5, r6\n\t"
162228 #endif
162229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162230         "lsrs	r6, r5, #16\n\t"
162231 #else
162232         "lsr	r6, r5, #16\n\t"
162233 #endif
162234 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162235         "lsls	r5, r5, #16\n\t"
162236 #else
162237         "lsl	r5, r5, #16\n\t"
162238 #endif
162239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162240         "adds	r4, r4, r5\n\t"
162241 #else
162242         "add	r4, r4, r5\n\t"
162243 #endif
162244 #ifdef WOLFSSL_KEIL
162245         "adcs	r2, r2, r6\n\t"
162246 #elif defined(__clang__)
162247         "adcs	r2, r6\n\t"
162248 #else
162249         "adc	r2, r6\n\t"
162250 #endif
162251 #ifdef WOLFSSL_KEIL
162252         "adcs	r3, r3, %[r]\n\t"
162253 #elif defined(__clang__)
162254         "adcs	r3, %[r]\n\t"
162255 #else
162256         "adc	r3, %[r]\n\t"
162257 #endif
162258 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162259         "adds	r4, r4, r5\n\t"
162260 #else
162261         "add	r4, r4, r5\n\t"
162262 #endif
162263 #ifdef WOLFSSL_KEIL
162264         "adcs	r2, r2, r6\n\t"
162265 #elif defined(__clang__)
162266         "adcs	r2, r6\n\t"
162267 #else
162268         "adc	r2, r6\n\t"
162269 #endif
162270 #ifdef WOLFSSL_KEIL
162271         "adcs	r3, r3, %[r]\n\t"
162272 #elif defined(__clang__)
162273         "adcs	r3, %[r]\n\t"
162274 #else
162275         "adc	r3, %[r]\n\t"
162276 #endif
162277         "#  A[11] * A[0]\n\t"
162278         "mov	%[a], r9\n\t"
162279         "mov	r7, r10\n\t"
162280         "ldr	%[a], [%[a], #44]\n\t"
162281         "uxth	r5, %[a]\n\t"
162282         "uxth	r6, r7\n\t"
162283 #ifdef WOLFSSL_KEIL
162284         "muls	r6, r5, r6\n\t"
162285 #elif defined(__clang__)
162286         "muls	r6, r5\n\t"
162287 #else
162288         "mul	r6, r5\n\t"
162289 #endif
162290 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162291         "adds	r4, r4, r6\n\t"
162292 #else
162293         "add	r4, r4, r6\n\t"
162294 #endif
162295 #ifdef WOLFSSL_KEIL
162296         "adcs	r2, r2, %[r]\n\t"
162297 #elif defined(__clang__)
162298         "adcs	r2, %[r]\n\t"
162299 #else
162300         "adc	r2, %[r]\n\t"
162301 #endif
162302 #ifdef WOLFSSL_KEIL
162303         "adcs	r3, r3, %[r]\n\t"
162304 #elif defined(__clang__)
162305         "adcs	r3, %[r]\n\t"
162306 #else
162307         "adc	r3, %[r]\n\t"
162308 #endif
162309 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162310         "adds	r4, r4, r6\n\t"
162311 #else
162312         "add	r4, r4, r6\n\t"
162313 #endif
162314 #ifdef WOLFSSL_KEIL
162315         "adcs	r2, r2, %[r]\n\t"
162316 #elif defined(__clang__)
162317         "adcs	r2, %[r]\n\t"
162318 #else
162319         "adc	r2, %[r]\n\t"
162320 #endif
162321 #ifdef WOLFSSL_KEIL
162322         "adcs	r3, r3, %[r]\n\t"
162323 #elif defined(__clang__)
162324         "adcs	r3, %[r]\n\t"
162325 #else
162326         "adc	r3, %[r]\n\t"
162327 #endif
162328 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162329         "lsrs	r6, r7, #16\n\t"
162330 #else
162331         "lsr	r6, r7, #16\n\t"
162332 #endif
162333 #ifdef WOLFSSL_KEIL
162334         "muls	r5, r6, r5\n\t"
162335 #elif defined(__clang__)
162336         "muls	r5, r6\n\t"
162337 #else
162338         "mul	r5, r6\n\t"
162339 #endif
162340 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162341         "lsrs	r6, r5, #16\n\t"
162342 #else
162343         "lsr	r6, r5, #16\n\t"
162344 #endif
162345 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162346         "lsls	r5, r5, #16\n\t"
162347 #else
162348         "lsl	r5, r5, #16\n\t"
162349 #endif
162350 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162351         "adds	r4, r4, r5\n\t"
162352 #else
162353         "add	r4, r4, r5\n\t"
162354 #endif
162355 #ifdef WOLFSSL_KEIL
162356         "adcs	r2, r2, r6\n\t"
162357 #elif defined(__clang__)
162358         "adcs	r2, r6\n\t"
162359 #else
162360         "adc	r2, r6\n\t"
162361 #endif
162362 #ifdef WOLFSSL_KEIL
162363         "adcs	r3, r3, %[r]\n\t"
162364 #elif defined(__clang__)
162365         "adcs	r3, %[r]\n\t"
162366 #else
162367         "adc	r3, %[r]\n\t"
162368 #endif
162369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162370         "adds	r4, r4, r5\n\t"
162371 #else
162372         "add	r4, r4, r5\n\t"
162373 #endif
162374 #ifdef WOLFSSL_KEIL
162375         "adcs	r2, r2, r6\n\t"
162376 #elif defined(__clang__)
162377         "adcs	r2, r6\n\t"
162378 #else
162379         "adc	r2, r6\n\t"
162380 #endif
162381 #ifdef WOLFSSL_KEIL
162382         "adcs	r3, r3, %[r]\n\t"
162383 #elif defined(__clang__)
162384         "adcs	r3, %[r]\n\t"
162385 #else
162386         "adc	r3, %[r]\n\t"
162387 #endif
162388 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162389         "lsrs	r5, %[a], #16\n\t"
162390 #else
162391         "lsr	r5, %[a], #16\n\t"
162392 #endif
162393 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162394         "lsrs	r6, r7, #16\n\t"
162395 #else
162396         "lsr	r6, r7, #16\n\t"
162397 #endif
162398 #ifdef WOLFSSL_KEIL
162399         "muls	r6, r5, r6\n\t"
162400 #elif defined(__clang__)
162401         "muls	r6, r5\n\t"
162402 #else
162403         "mul	r6, r5\n\t"
162404 #endif
162405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162406         "adds	r2, r2, r6\n\t"
162407 #else
162408         "add	r2, r2, r6\n\t"
162409 #endif
162410 #ifdef WOLFSSL_KEIL
162411         "adcs	r3, r3, %[r]\n\t"
162412 #elif defined(__clang__)
162413         "adcs	r3, %[r]\n\t"
162414 #else
162415         "adc	r3, %[r]\n\t"
162416 #endif
162417 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162418         "adds	r2, r2, r6\n\t"
162419 #else
162420         "add	r2, r2, r6\n\t"
162421 #endif
162422 #ifdef WOLFSSL_KEIL
162423         "adcs	r3, r3, %[r]\n\t"
162424 #elif defined(__clang__)
162425         "adcs	r3, %[r]\n\t"
162426 #else
162427         "adc	r3, %[r]\n\t"
162428 #endif
162429         "uxth	r6, r7\n\t"
162430 #ifdef WOLFSSL_KEIL
162431         "muls	r5, r6, r5\n\t"
162432 #elif defined(__clang__)
162433         "muls	r5, r6\n\t"
162434 #else
162435         "mul	r5, r6\n\t"
162436 #endif
162437 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162438         "lsrs	r6, r5, #16\n\t"
162439 #else
162440         "lsr	r6, r5, #16\n\t"
162441 #endif
162442 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162443         "lsls	r5, r5, #16\n\t"
162444 #else
162445         "lsl	r5, r5, #16\n\t"
162446 #endif
162447 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162448         "adds	r4, r4, r5\n\t"
162449 #else
162450         "add	r4, r4, r5\n\t"
162451 #endif
162452 #ifdef WOLFSSL_KEIL
162453         "adcs	r2, r2, r6\n\t"
162454 #elif defined(__clang__)
162455         "adcs	r2, r6\n\t"
162456 #else
162457         "adc	r2, r6\n\t"
162458 #endif
162459 #ifdef WOLFSSL_KEIL
162460         "adcs	r3, r3, %[r]\n\t"
162461 #elif defined(__clang__)
162462         "adcs	r3, %[r]\n\t"
162463 #else
162464         "adc	r3, %[r]\n\t"
162465 #endif
162466 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162467         "adds	r4, r4, r5\n\t"
162468 #else
162469         "add	r4, r4, r5\n\t"
162470 #endif
162471 #ifdef WOLFSSL_KEIL
162472         "adcs	r2, r2, r6\n\t"
162473 #elif defined(__clang__)
162474         "adcs	r2, r6\n\t"
162475 #else
162476         "adc	r2, r6\n\t"
162477 #endif
162478 #ifdef WOLFSSL_KEIL
162479         "adcs	r3, r3, %[r]\n\t"
162480 #elif defined(__clang__)
162481         "adcs	r3, %[r]\n\t"
162482 #else
162483         "adc	r3, %[r]\n\t"
162484 #endif
162485         "str	r4, [sp, #44]\n\t"
162486         "#  A[12] * A[0]\n\t"
162487         "movs	r4, #0\n\t"
162488         "mov	%[a], r9\n\t"
162489         "ldr	%[a], [%[a], #48]\n\t"
162490         "uxth	r5, %[a]\n\t"
162491         "uxth	r6, r7\n\t"
162492 #ifdef WOLFSSL_KEIL
162493         "muls	r6, r5, r6\n\t"
162494 #elif defined(__clang__)
162495         "muls	r6, r5\n\t"
162496 #else
162497         "mul	r6, r5\n\t"
162498 #endif
162499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162500         "adds	r2, r2, r6\n\t"
162501 #else
162502         "add	r2, r2, r6\n\t"
162503 #endif
162504 #ifdef WOLFSSL_KEIL
162505         "adcs	r3, r3, %[r]\n\t"
162506 #elif defined(__clang__)
162507         "adcs	r3, %[r]\n\t"
162508 #else
162509         "adc	r3, %[r]\n\t"
162510 #endif
162511 #ifdef WOLFSSL_KEIL
162512         "adcs	r4, r4, %[r]\n\t"
162513 #elif defined(__clang__)
162514         "adcs	r4, %[r]\n\t"
162515 #else
162516         "adc	r4, %[r]\n\t"
162517 #endif
162518 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162519         "adds	r2, r2, r6\n\t"
162520 #else
162521         "add	r2, r2, r6\n\t"
162522 #endif
162523 #ifdef WOLFSSL_KEIL
162524         "adcs	r3, r3, %[r]\n\t"
162525 #elif defined(__clang__)
162526         "adcs	r3, %[r]\n\t"
162527 #else
162528         "adc	r3, %[r]\n\t"
162529 #endif
162530 #ifdef WOLFSSL_KEIL
162531         "adcs	r4, r4, %[r]\n\t"
162532 #elif defined(__clang__)
162533         "adcs	r4, %[r]\n\t"
162534 #else
162535         "adc	r4, %[r]\n\t"
162536 #endif
162537 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162538         "lsrs	r6, r7, #16\n\t"
162539 #else
162540         "lsr	r6, r7, #16\n\t"
162541 #endif
162542 #ifdef WOLFSSL_KEIL
162543         "muls	r5, r6, r5\n\t"
162544 #elif defined(__clang__)
162545         "muls	r5, r6\n\t"
162546 #else
162547         "mul	r5, r6\n\t"
162548 #endif
162549 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162550         "lsrs	r6, r5, #16\n\t"
162551 #else
162552         "lsr	r6, r5, #16\n\t"
162553 #endif
162554 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162555         "lsls	r5, r5, #16\n\t"
162556 #else
162557         "lsl	r5, r5, #16\n\t"
162558 #endif
162559 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162560         "adds	r2, r2, r5\n\t"
162561 #else
162562         "add	r2, r2, r5\n\t"
162563 #endif
162564 #ifdef WOLFSSL_KEIL
162565         "adcs	r3, r3, r6\n\t"
162566 #elif defined(__clang__)
162567         "adcs	r3, r6\n\t"
162568 #else
162569         "adc	r3, r6\n\t"
162570 #endif
162571 #ifdef WOLFSSL_KEIL
162572         "adcs	r4, r4, %[r]\n\t"
162573 #elif defined(__clang__)
162574         "adcs	r4, %[r]\n\t"
162575 #else
162576         "adc	r4, %[r]\n\t"
162577 #endif
162578 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162579         "adds	r2, r2, r5\n\t"
162580 #else
162581         "add	r2, r2, r5\n\t"
162582 #endif
162583 #ifdef WOLFSSL_KEIL
162584         "adcs	r3, r3, r6\n\t"
162585 #elif defined(__clang__)
162586         "adcs	r3, r6\n\t"
162587 #else
162588         "adc	r3, r6\n\t"
162589 #endif
162590 #ifdef WOLFSSL_KEIL
162591         "adcs	r4, r4, %[r]\n\t"
162592 #elif defined(__clang__)
162593         "adcs	r4, %[r]\n\t"
162594 #else
162595         "adc	r4, %[r]\n\t"
162596 #endif
162597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162598         "lsrs	r5, %[a], #16\n\t"
162599 #else
162600         "lsr	r5, %[a], #16\n\t"
162601 #endif
162602 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162603         "lsrs	r6, r7, #16\n\t"
162604 #else
162605         "lsr	r6, r7, #16\n\t"
162606 #endif
162607 #ifdef WOLFSSL_KEIL
162608         "muls	r6, r5, r6\n\t"
162609 #elif defined(__clang__)
162610         "muls	r6, r5\n\t"
162611 #else
162612         "mul	r6, r5\n\t"
162613 #endif
162614 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162615         "adds	r3, r3, r6\n\t"
162616 #else
162617         "add	r3, r3, r6\n\t"
162618 #endif
162619 #ifdef WOLFSSL_KEIL
162620         "adcs	r4, r4, %[r]\n\t"
162621 #elif defined(__clang__)
162622         "adcs	r4, %[r]\n\t"
162623 #else
162624         "adc	r4, %[r]\n\t"
162625 #endif
162626 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162627         "adds	r3, r3, r6\n\t"
162628 #else
162629         "add	r3, r3, r6\n\t"
162630 #endif
162631 #ifdef WOLFSSL_KEIL
162632         "adcs	r4, r4, %[r]\n\t"
162633 #elif defined(__clang__)
162634         "adcs	r4, %[r]\n\t"
162635 #else
162636         "adc	r4, %[r]\n\t"
162637 #endif
162638         "uxth	r6, r7\n\t"
162639 #ifdef WOLFSSL_KEIL
162640         "muls	r5, r6, r5\n\t"
162641 #elif defined(__clang__)
162642         "muls	r5, r6\n\t"
162643 #else
162644         "mul	r5, r6\n\t"
162645 #endif
162646 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162647         "lsrs	r6, r5, #16\n\t"
162648 #else
162649         "lsr	r6, r5, #16\n\t"
162650 #endif
162651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162652         "lsls	r5, r5, #16\n\t"
162653 #else
162654         "lsl	r5, r5, #16\n\t"
162655 #endif
162656 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162657         "adds	r2, r2, r5\n\t"
162658 #else
162659         "add	r2, r2, r5\n\t"
162660 #endif
162661 #ifdef WOLFSSL_KEIL
162662         "adcs	r3, r3, r6\n\t"
162663 #elif defined(__clang__)
162664         "adcs	r3, r6\n\t"
162665 #else
162666         "adc	r3, r6\n\t"
162667 #endif
162668 #ifdef WOLFSSL_KEIL
162669         "adcs	r4, r4, %[r]\n\t"
162670 #elif defined(__clang__)
162671         "adcs	r4, %[r]\n\t"
162672 #else
162673         "adc	r4, %[r]\n\t"
162674 #endif
162675 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162676         "adds	r2, r2, r5\n\t"
162677 #else
162678         "add	r2, r2, r5\n\t"
162679 #endif
162680 #ifdef WOLFSSL_KEIL
162681         "adcs	r3, r3, r6\n\t"
162682 #elif defined(__clang__)
162683         "adcs	r3, r6\n\t"
162684 #else
162685         "adc	r3, r6\n\t"
162686 #endif
162687 #ifdef WOLFSSL_KEIL
162688         "adcs	r4, r4, %[r]\n\t"
162689 #elif defined(__clang__)
162690         "adcs	r4, %[r]\n\t"
162691 #else
162692         "adc	r4, %[r]\n\t"
162693 #endif
162694         "#  A[11] * A[1]\n\t"
162695         "mov	%[a], r9\n\t"
162696         "mov	r7, r11\n\t"
162697         "ldr	%[a], [%[a], #44]\n\t"
162698         "uxth	r5, %[a]\n\t"
162699         "uxth	r6, r7\n\t"
162700 #ifdef WOLFSSL_KEIL
162701         "muls	r6, r5, r6\n\t"
162702 #elif defined(__clang__)
162703         "muls	r6, r5\n\t"
162704 #else
162705         "mul	r6, r5\n\t"
162706 #endif
162707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162708         "adds	r2, r2, r6\n\t"
162709 #else
162710         "add	r2, r2, r6\n\t"
162711 #endif
162712 #ifdef WOLFSSL_KEIL
162713         "adcs	r3, r3, %[r]\n\t"
162714 #elif defined(__clang__)
162715         "adcs	r3, %[r]\n\t"
162716 #else
162717         "adc	r3, %[r]\n\t"
162718 #endif
162719 #ifdef WOLFSSL_KEIL
162720         "adcs	r4, r4, %[r]\n\t"
162721 #elif defined(__clang__)
162722         "adcs	r4, %[r]\n\t"
162723 #else
162724         "adc	r4, %[r]\n\t"
162725 #endif
162726 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162727         "adds	r2, r2, r6\n\t"
162728 #else
162729         "add	r2, r2, r6\n\t"
162730 #endif
162731 #ifdef WOLFSSL_KEIL
162732         "adcs	r3, r3, %[r]\n\t"
162733 #elif defined(__clang__)
162734         "adcs	r3, %[r]\n\t"
162735 #else
162736         "adc	r3, %[r]\n\t"
162737 #endif
162738 #ifdef WOLFSSL_KEIL
162739         "adcs	r4, r4, %[r]\n\t"
162740 #elif defined(__clang__)
162741         "adcs	r4, %[r]\n\t"
162742 #else
162743         "adc	r4, %[r]\n\t"
162744 #endif
162745 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162746         "lsrs	r6, r7, #16\n\t"
162747 #else
162748         "lsr	r6, r7, #16\n\t"
162749 #endif
162750 #ifdef WOLFSSL_KEIL
162751         "muls	r5, r6, r5\n\t"
162752 #elif defined(__clang__)
162753         "muls	r5, r6\n\t"
162754 #else
162755         "mul	r5, r6\n\t"
162756 #endif
162757 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162758         "lsrs	r6, r5, #16\n\t"
162759 #else
162760         "lsr	r6, r5, #16\n\t"
162761 #endif
162762 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162763         "lsls	r5, r5, #16\n\t"
162764 #else
162765         "lsl	r5, r5, #16\n\t"
162766 #endif
162767 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162768         "adds	r2, r2, r5\n\t"
162769 #else
162770         "add	r2, r2, r5\n\t"
162771 #endif
162772 #ifdef WOLFSSL_KEIL
162773         "adcs	r3, r3, r6\n\t"
162774 #elif defined(__clang__)
162775         "adcs	r3, r6\n\t"
162776 #else
162777         "adc	r3, r6\n\t"
162778 #endif
162779 #ifdef WOLFSSL_KEIL
162780         "adcs	r4, r4, %[r]\n\t"
162781 #elif defined(__clang__)
162782         "adcs	r4, %[r]\n\t"
162783 #else
162784         "adc	r4, %[r]\n\t"
162785 #endif
162786 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162787         "adds	r2, r2, r5\n\t"
162788 #else
162789         "add	r2, r2, r5\n\t"
162790 #endif
162791 #ifdef WOLFSSL_KEIL
162792         "adcs	r3, r3, r6\n\t"
162793 #elif defined(__clang__)
162794         "adcs	r3, r6\n\t"
162795 #else
162796         "adc	r3, r6\n\t"
162797 #endif
162798 #ifdef WOLFSSL_KEIL
162799         "adcs	r4, r4, %[r]\n\t"
162800 #elif defined(__clang__)
162801         "adcs	r4, %[r]\n\t"
162802 #else
162803         "adc	r4, %[r]\n\t"
162804 #endif
162805 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162806         "lsrs	r5, %[a], #16\n\t"
162807 #else
162808         "lsr	r5, %[a], #16\n\t"
162809 #endif
162810 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162811         "lsrs	r6, r7, #16\n\t"
162812 #else
162813         "lsr	r6, r7, #16\n\t"
162814 #endif
162815 #ifdef WOLFSSL_KEIL
162816         "muls	r6, r5, r6\n\t"
162817 #elif defined(__clang__)
162818         "muls	r6, r5\n\t"
162819 #else
162820         "mul	r6, r5\n\t"
162821 #endif
162822 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162823         "adds	r3, r3, r6\n\t"
162824 #else
162825         "add	r3, r3, r6\n\t"
162826 #endif
162827 #ifdef WOLFSSL_KEIL
162828         "adcs	r4, r4, %[r]\n\t"
162829 #elif defined(__clang__)
162830         "adcs	r4, %[r]\n\t"
162831 #else
162832         "adc	r4, %[r]\n\t"
162833 #endif
162834 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162835         "adds	r3, r3, r6\n\t"
162836 #else
162837         "add	r3, r3, r6\n\t"
162838 #endif
162839 #ifdef WOLFSSL_KEIL
162840         "adcs	r4, r4, %[r]\n\t"
162841 #elif defined(__clang__)
162842         "adcs	r4, %[r]\n\t"
162843 #else
162844         "adc	r4, %[r]\n\t"
162845 #endif
162846         "uxth	r6, r7\n\t"
162847 #ifdef WOLFSSL_KEIL
162848         "muls	r5, r6, r5\n\t"
162849 #elif defined(__clang__)
162850         "muls	r5, r6\n\t"
162851 #else
162852         "mul	r5, r6\n\t"
162853 #endif
162854 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162855         "lsrs	r6, r5, #16\n\t"
162856 #else
162857         "lsr	r6, r5, #16\n\t"
162858 #endif
162859 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162860         "lsls	r5, r5, #16\n\t"
162861 #else
162862         "lsl	r5, r5, #16\n\t"
162863 #endif
162864 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162865         "adds	r2, r2, r5\n\t"
162866 #else
162867         "add	r2, r2, r5\n\t"
162868 #endif
162869 #ifdef WOLFSSL_KEIL
162870         "adcs	r3, r3, r6\n\t"
162871 #elif defined(__clang__)
162872         "adcs	r3, r6\n\t"
162873 #else
162874         "adc	r3, r6\n\t"
162875 #endif
162876 #ifdef WOLFSSL_KEIL
162877         "adcs	r4, r4, %[r]\n\t"
162878 #elif defined(__clang__)
162879         "adcs	r4, %[r]\n\t"
162880 #else
162881         "adc	r4, %[r]\n\t"
162882 #endif
162883 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162884         "adds	r2, r2, r5\n\t"
162885 #else
162886         "add	r2, r2, r5\n\t"
162887 #endif
162888 #ifdef WOLFSSL_KEIL
162889         "adcs	r3, r3, r6\n\t"
162890 #elif defined(__clang__)
162891         "adcs	r3, r6\n\t"
162892 #else
162893         "adc	r3, r6\n\t"
162894 #endif
162895 #ifdef WOLFSSL_KEIL
162896         "adcs	r4, r4, %[r]\n\t"
162897 #elif defined(__clang__)
162898         "adcs	r4, %[r]\n\t"
162899 #else
162900         "adc	r4, %[r]\n\t"
162901 #endif
162902         "#  A[10] * A[2]\n\t"
162903         "mov	%[a], r9\n\t"
162904         "mov	r7, r12\n\t"
162905         "ldr	%[a], [%[a], #40]\n\t"
162906         "uxth	r5, %[a]\n\t"
162907         "uxth	r6, r7\n\t"
162908 #ifdef WOLFSSL_KEIL
162909         "muls	r6, r5, r6\n\t"
162910 #elif defined(__clang__)
162911         "muls	r6, r5\n\t"
162912 #else
162913         "mul	r6, r5\n\t"
162914 #endif
162915 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162916         "adds	r2, r2, r6\n\t"
162917 #else
162918         "add	r2, r2, r6\n\t"
162919 #endif
162920 #ifdef WOLFSSL_KEIL
162921         "adcs	r3, r3, %[r]\n\t"
162922 #elif defined(__clang__)
162923         "adcs	r3, %[r]\n\t"
162924 #else
162925         "adc	r3, %[r]\n\t"
162926 #endif
162927 #ifdef WOLFSSL_KEIL
162928         "adcs	r4, r4, %[r]\n\t"
162929 #elif defined(__clang__)
162930         "adcs	r4, %[r]\n\t"
162931 #else
162932         "adc	r4, %[r]\n\t"
162933 #endif
162934 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162935         "adds	r2, r2, r6\n\t"
162936 #else
162937         "add	r2, r2, r6\n\t"
162938 #endif
162939 #ifdef WOLFSSL_KEIL
162940         "adcs	r3, r3, %[r]\n\t"
162941 #elif defined(__clang__)
162942         "adcs	r3, %[r]\n\t"
162943 #else
162944         "adc	r3, %[r]\n\t"
162945 #endif
162946 #ifdef WOLFSSL_KEIL
162947         "adcs	r4, r4, %[r]\n\t"
162948 #elif defined(__clang__)
162949         "adcs	r4, %[r]\n\t"
162950 #else
162951         "adc	r4, %[r]\n\t"
162952 #endif
162953 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162954         "lsrs	r6, r7, #16\n\t"
162955 #else
162956         "lsr	r6, r7, #16\n\t"
162957 #endif
162958 #ifdef WOLFSSL_KEIL
162959         "muls	r5, r6, r5\n\t"
162960 #elif defined(__clang__)
162961         "muls	r5, r6\n\t"
162962 #else
162963         "mul	r5, r6\n\t"
162964 #endif
162965 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162966         "lsrs	r6, r5, #16\n\t"
162967 #else
162968         "lsr	r6, r5, #16\n\t"
162969 #endif
162970 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162971         "lsls	r5, r5, #16\n\t"
162972 #else
162973         "lsl	r5, r5, #16\n\t"
162974 #endif
162975 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162976         "adds	r2, r2, r5\n\t"
162977 #else
162978         "add	r2, r2, r5\n\t"
162979 #endif
162980 #ifdef WOLFSSL_KEIL
162981         "adcs	r3, r3, r6\n\t"
162982 #elif defined(__clang__)
162983         "adcs	r3, r6\n\t"
162984 #else
162985         "adc	r3, r6\n\t"
162986 #endif
162987 #ifdef WOLFSSL_KEIL
162988         "adcs	r4, r4, %[r]\n\t"
162989 #elif defined(__clang__)
162990         "adcs	r4, %[r]\n\t"
162991 #else
162992         "adc	r4, %[r]\n\t"
162993 #endif
162994 #if defined(__clang__) || defined(WOLFSSL_KEIL)
162995         "adds	r2, r2, r5\n\t"
162996 #else
162997         "add	r2, r2, r5\n\t"
162998 #endif
162999 #ifdef WOLFSSL_KEIL
163000         "adcs	r3, r3, r6\n\t"
163001 #elif defined(__clang__)
163002         "adcs	r3, r6\n\t"
163003 #else
163004         "adc	r3, r6\n\t"
163005 #endif
163006 #ifdef WOLFSSL_KEIL
163007         "adcs	r4, r4, %[r]\n\t"
163008 #elif defined(__clang__)
163009         "adcs	r4, %[r]\n\t"
163010 #else
163011         "adc	r4, %[r]\n\t"
163012 #endif
163013 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163014         "lsrs	r5, %[a], #16\n\t"
163015 #else
163016         "lsr	r5, %[a], #16\n\t"
163017 #endif
163018 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163019         "lsrs	r6, r7, #16\n\t"
163020 #else
163021         "lsr	r6, r7, #16\n\t"
163022 #endif
163023 #ifdef WOLFSSL_KEIL
163024         "muls	r6, r5, r6\n\t"
163025 #elif defined(__clang__)
163026         "muls	r6, r5\n\t"
163027 #else
163028         "mul	r6, r5\n\t"
163029 #endif
163030 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163031         "adds	r3, r3, r6\n\t"
163032 #else
163033         "add	r3, r3, r6\n\t"
163034 #endif
163035 #ifdef WOLFSSL_KEIL
163036         "adcs	r4, r4, %[r]\n\t"
163037 #elif defined(__clang__)
163038         "adcs	r4, %[r]\n\t"
163039 #else
163040         "adc	r4, %[r]\n\t"
163041 #endif
163042 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163043         "adds	r3, r3, r6\n\t"
163044 #else
163045         "add	r3, r3, r6\n\t"
163046 #endif
163047 #ifdef WOLFSSL_KEIL
163048         "adcs	r4, r4, %[r]\n\t"
163049 #elif defined(__clang__)
163050         "adcs	r4, %[r]\n\t"
163051 #else
163052         "adc	r4, %[r]\n\t"
163053 #endif
163054         "uxth	r6, r7\n\t"
163055 #ifdef WOLFSSL_KEIL
163056         "muls	r5, r6, r5\n\t"
163057 #elif defined(__clang__)
163058         "muls	r5, r6\n\t"
163059 #else
163060         "mul	r5, r6\n\t"
163061 #endif
163062 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163063         "lsrs	r6, r5, #16\n\t"
163064 #else
163065         "lsr	r6, r5, #16\n\t"
163066 #endif
163067 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163068         "lsls	r5, r5, #16\n\t"
163069 #else
163070         "lsl	r5, r5, #16\n\t"
163071 #endif
163072 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163073         "adds	r2, r2, r5\n\t"
163074 #else
163075         "add	r2, r2, r5\n\t"
163076 #endif
163077 #ifdef WOLFSSL_KEIL
163078         "adcs	r3, r3, r6\n\t"
163079 #elif defined(__clang__)
163080         "adcs	r3, r6\n\t"
163081 #else
163082         "adc	r3, r6\n\t"
163083 #endif
163084 #ifdef WOLFSSL_KEIL
163085         "adcs	r4, r4, %[r]\n\t"
163086 #elif defined(__clang__)
163087         "adcs	r4, %[r]\n\t"
163088 #else
163089         "adc	r4, %[r]\n\t"
163090 #endif
163091 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163092         "adds	r2, r2, r5\n\t"
163093 #else
163094         "add	r2, r2, r5\n\t"
163095 #endif
163096 #ifdef WOLFSSL_KEIL
163097         "adcs	r3, r3, r6\n\t"
163098 #elif defined(__clang__)
163099         "adcs	r3, r6\n\t"
163100 #else
163101         "adc	r3, r6\n\t"
163102 #endif
163103 #ifdef WOLFSSL_KEIL
163104         "adcs	r4, r4, %[r]\n\t"
163105 #elif defined(__clang__)
163106         "adcs	r4, %[r]\n\t"
163107 #else
163108         "adc	r4, %[r]\n\t"
163109 #endif
163110         "#  A[9] * A[3]\n\t"
163111         "mov	%[a], r9\n\t"
163112         "mov	r7, lr\n\t"
163113         "ldr	%[a], [%[a], #36]\n\t"
163114         "uxth	r5, %[a]\n\t"
163115         "uxth	r6, r7\n\t"
163116 #ifdef WOLFSSL_KEIL
163117         "muls	r6, r5, r6\n\t"
163118 #elif defined(__clang__)
163119         "muls	r6, r5\n\t"
163120 #else
163121         "mul	r6, r5\n\t"
163122 #endif
163123 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163124         "adds	r2, r2, r6\n\t"
163125 #else
163126         "add	r2, r2, r6\n\t"
163127 #endif
163128 #ifdef WOLFSSL_KEIL
163129         "adcs	r3, r3, %[r]\n\t"
163130 #elif defined(__clang__)
163131         "adcs	r3, %[r]\n\t"
163132 #else
163133         "adc	r3, %[r]\n\t"
163134 #endif
163135 #ifdef WOLFSSL_KEIL
163136         "adcs	r4, r4, %[r]\n\t"
163137 #elif defined(__clang__)
163138         "adcs	r4, %[r]\n\t"
163139 #else
163140         "adc	r4, %[r]\n\t"
163141 #endif
163142 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163143         "adds	r2, r2, r6\n\t"
163144 #else
163145         "add	r2, r2, r6\n\t"
163146 #endif
163147 #ifdef WOLFSSL_KEIL
163148         "adcs	r3, r3, %[r]\n\t"
163149 #elif defined(__clang__)
163150         "adcs	r3, %[r]\n\t"
163151 #else
163152         "adc	r3, %[r]\n\t"
163153 #endif
163154 #ifdef WOLFSSL_KEIL
163155         "adcs	r4, r4, %[r]\n\t"
163156 #elif defined(__clang__)
163157         "adcs	r4, %[r]\n\t"
163158 #else
163159         "adc	r4, %[r]\n\t"
163160 #endif
163161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163162         "lsrs	r6, r7, #16\n\t"
163163 #else
163164         "lsr	r6, r7, #16\n\t"
163165 #endif
163166 #ifdef WOLFSSL_KEIL
163167         "muls	r5, r6, r5\n\t"
163168 #elif defined(__clang__)
163169         "muls	r5, r6\n\t"
163170 #else
163171         "mul	r5, r6\n\t"
163172 #endif
163173 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163174         "lsrs	r6, r5, #16\n\t"
163175 #else
163176         "lsr	r6, r5, #16\n\t"
163177 #endif
163178 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163179         "lsls	r5, r5, #16\n\t"
163180 #else
163181         "lsl	r5, r5, #16\n\t"
163182 #endif
163183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163184         "adds	r2, r2, r5\n\t"
163185 #else
163186         "add	r2, r2, r5\n\t"
163187 #endif
163188 #ifdef WOLFSSL_KEIL
163189         "adcs	r3, r3, r6\n\t"
163190 #elif defined(__clang__)
163191         "adcs	r3, r6\n\t"
163192 #else
163193         "adc	r3, r6\n\t"
163194 #endif
163195 #ifdef WOLFSSL_KEIL
163196         "adcs	r4, r4, %[r]\n\t"
163197 #elif defined(__clang__)
163198         "adcs	r4, %[r]\n\t"
163199 #else
163200         "adc	r4, %[r]\n\t"
163201 #endif
163202 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163203         "adds	r2, r2, r5\n\t"
163204 #else
163205         "add	r2, r2, r5\n\t"
163206 #endif
163207 #ifdef WOLFSSL_KEIL
163208         "adcs	r3, r3, r6\n\t"
163209 #elif defined(__clang__)
163210         "adcs	r3, r6\n\t"
163211 #else
163212         "adc	r3, r6\n\t"
163213 #endif
163214 #ifdef WOLFSSL_KEIL
163215         "adcs	r4, r4, %[r]\n\t"
163216 #elif defined(__clang__)
163217         "adcs	r4, %[r]\n\t"
163218 #else
163219         "adc	r4, %[r]\n\t"
163220 #endif
163221 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163222         "lsrs	r5, %[a], #16\n\t"
163223 #else
163224         "lsr	r5, %[a], #16\n\t"
163225 #endif
163226 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163227         "lsrs	r6, r7, #16\n\t"
163228 #else
163229         "lsr	r6, r7, #16\n\t"
163230 #endif
163231 #ifdef WOLFSSL_KEIL
163232         "muls	r6, r5, r6\n\t"
163233 #elif defined(__clang__)
163234         "muls	r6, r5\n\t"
163235 #else
163236         "mul	r6, r5\n\t"
163237 #endif
163238 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163239         "adds	r3, r3, r6\n\t"
163240 #else
163241         "add	r3, r3, r6\n\t"
163242 #endif
163243 #ifdef WOLFSSL_KEIL
163244         "adcs	r4, r4, %[r]\n\t"
163245 #elif defined(__clang__)
163246         "adcs	r4, %[r]\n\t"
163247 #else
163248         "adc	r4, %[r]\n\t"
163249 #endif
163250 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163251         "adds	r3, r3, r6\n\t"
163252 #else
163253         "add	r3, r3, r6\n\t"
163254 #endif
163255 #ifdef WOLFSSL_KEIL
163256         "adcs	r4, r4, %[r]\n\t"
163257 #elif defined(__clang__)
163258         "adcs	r4, %[r]\n\t"
163259 #else
163260         "adc	r4, %[r]\n\t"
163261 #endif
163262         "uxth	r6, r7\n\t"
163263 #ifdef WOLFSSL_KEIL
163264         "muls	r5, r6, r5\n\t"
163265 #elif defined(__clang__)
163266         "muls	r5, r6\n\t"
163267 #else
163268         "mul	r5, r6\n\t"
163269 #endif
163270 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163271         "lsrs	r6, r5, #16\n\t"
163272 #else
163273         "lsr	r6, r5, #16\n\t"
163274 #endif
163275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163276         "lsls	r5, r5, #16\n\t"
163277 #else
163278         "lsl	r5, r5, #16\n\t"
163279 #endif
163280 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163281         "adds	r2, r2, r5\n\t"
163282 #else
163283         "add	r2, r2, r5\n\t"
163284 #endif
163285 #ifdef WOLFSSL_KEIL
163286         "adcs	r3, r3, r6\n\t"
163287 #elif defined(__clang__)
163288         "adcs	r3, r6\n\t"
163289 #else
163290         "adc	r3, r6\n\t"
163291 #endif
163292 #ifdef WOLFSSL_KEIL
163293         "adcs	r4, r4, %[r]\n\t"
163294 #elif defined(__clang__)
163295         "adcs	r4, %[r]\n\t"
163296 #else
163297         "adc	r4, %[r]\n\t"
163298 #endif
163299 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163300         "adds	r2, r2, r5\n\t"
163301 #else
163302         "add	r2, r2, r5\n\t"
163303 #endif
163304 #ifdef WOLFSSL_KEIL
163305         "adcs	r3, r3, r6\n\t"
163306 #elif defined(__clang__)
163307         "adcs	r3, r6\n\t"
163308 #else
163309         "adc	r3, r6\n\t"
163310 #endif
163311 #ifdef WOLFSSL_KEIL
163312         "adcs	r4, r4, %[r]\n\t"
163313 #elif defined(__clang__)
163314         "adcs	r4, %[r]\n\t"
163315 #else
163316         "adc	r4, %[r]\n\t"
163317 #endif
163318         "#  A[8] * A[4]\n\t"
163319         "mov	%[a], r9\n\t"
163320         "ldr	r7, [%[a], #16]\n\t"
163321         "ldr	%[a], [%[a], #32]\n\t"
163322         "uxth	r5, %[a]\n\t"
163323         "uxth	r6, r7\n\t"
163324 #ifdef WOLFSSL_KEIL
163325         "muls	r6, r5, r6\n\t"
163326 #elif defined(__clang__)
163327         "muls	r6, r5\n\t"
163328 #else
163329         "mul	r6, r5\n\t"
163330 #endif
163331 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163332         "adds	r2, r2, r6\n\t"
163333 #else
163334         "add	r2, r2, r6\n\t"
163335 #endif
163336 #ifdef WOLFSSL_KEIL
163337         "adcs	r3, r3, %[r]\n\t"
163338 #elif defined(__clang__)
163339         "adcs	r3, %[r]\n\t"
163340 #else
163341         "adc	r3, %[r]\n\t"
163342 #endif
163343 #ifdef WOLFSSL_KEIL
163344         "adcs	r4, r4, %[r]\n\t"
163345 #elif defined(__clang__)
163346         "adcs	r4, %[r]\n\t"
163347 #else
163348         "adc	r4, %[r]\n\t"
163349 #endif
163350 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163351         "adds	r2, r2, r6\n\t"
163352 #else
163353         "add	r2, r2, r6\n\t"
163354 #endif
163355 #ifdef WOLFSSL_KEIL
163356         "adcs	r3, r3, %[r]\n\t"
163357 #elif defined(__clang__)
163358         "adcs	r3, %[r]\n\t"
163359 #else
163360         "adc	r3, %[r]\n\t"
163361 #endif
163362 #ifdef WOLFSSL_KEIL
163363         "adcs	r4, r4, %[r]\n\t"
163364 #elif defined(__clang__)
163365         "adcs	r4, %[r]\n\t"
163366 #else
163367         "adc	r4, %[r]\n\t"
163368 #endif
163369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163370         "lsrs	r6, r7, #16\n\t"
163371 #else
163372         "lsr	r6, r7, #16\n\t"
163373 #endif
163374 #ifdef WOLFSSL_KEIL
163375         "muls	r5, r6, r5\n\t"
163376 #elif defined(__clang__)
163377         "muls	r5, r6\n\t"
163378 #else
163379         "mul	r5, r6\n\t"
163380 #endif
163381 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163382         "lsrs	r6, r5, #16\n\t"
163383 #else
163384         "lsr	r6, r5, #16\n\t"
163385 #endif
163386 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163387         "lsls	r5, r5, #16\n\t"
163388 #else
163389         "lsl	r5, r5, #16\n\t"
163390 #endif
163391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163392         "adds	r2, r2, r5\n\t"
163393 #else
163394         "add	r2, r2, r5\n\t"
163395 #endif
163396 #ifdef WOLFSSL_KEIL
163397         "adcs	r3, r3, r6\n\t"
163398 #elif defined(__clang__)
163399         "adcs	r3, r6\n\t"
163400 #else
163401         "adc	r3, r6\n\t"
163402 #endif
163403 #ifdef WOLFSSL_KEIL
163404         "adcs	r4, r4, %[r]\n\t"
163405 #elif defined(__clang__)
163406         "adcs	r4, %[r]\n\t"
163407 #else
163408         "adc	r4, %[r]\n\t"
163409 #endif
163410 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163411         "adds	r2, r2, r5\n\t"
163412 #else
163413         "add	r2, r2, r5\n\t"
163414 #endif
163415 #ifdef WOLFSSL_KEIL
163416         "adcs	r3, r3, r6\n\t"
163417 #elif defined(__clang__)
163418         "adcs	r3, r6\n\t"
163419 #else
163420         "adc	r3, r6\n\t"
163421 #endif
163422 #ifdef WOLFSSL_KEIL
163423         "adcs	r4, r4, %[r]\n\t"
163424 #elif defined(__clang__)
163425         "adcs	r4, %[r]\n\t"
163426 #else
163427         "adc	r4, %[r]\n\t"
163428 #endif
163429 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163430         "lsrs	r5, %[a], #16\n\t"
163431 #else
163432         "lsr	r5, %[a], #16\n\t"
163433 #endif
163434 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163435         "lsrs	r6, r7, #16\n\t"
163436 #else
163437         "lsr	r6, r7, #16\n\t"
163438 #endif
163439 #ifdef WOLFSSL_KEIL
163440         "muls	r6, r5, r6\n\t"
163441 #elif defined(__clang__)
163442         "muls	r6, r5\n\t"
163443 #else
163444         "mul	r6, r5\n\t"
163445 #endif
163446 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163447         "adds	r3, r3, r6\n\t"
163448 #else
163449         "add	r3, r3, r6\n\t"
163450 #endif
163451 #ifdef WOLFSSL_KEIL
163452         "adcs	r4, r4, %[r]\n\t"
163453 #elif defined(__clang__)
163454         "adcs	r4, %[r]\n\t"
163455 #else
163456         "adc	r4, %[r]\n\t"
163457 #endif
163458 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163459         "adds	r3, r3, r6\n\t"
163460 #else
163461         "add	r3, r3, r6\n\t"
163462 #endif
163463 #ifdef WOLFSSL_KEIL
163464         "adcs	r4, r4, %[r]\n\t"
163465 #elif defined(__clang__)
163466         "adcs	r4, %[r]\n\t"
163467 #else
163468         "adc	r4, %[r]\n\t"
163469 #endif
163470         "uxth	r6, r7\n\t"
163471 #ifdef WOLFSSL_KEIL
163472         "muls	r5, r6, r5\n\t"
163473 #elif defined(__clang__)
163474         "muls	r5, r6\n\t"
163475 #else
163476         "mul	r5, r6\n\t"
163477 #endif
163478 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163479         "lsrs	r6, r5, #16\n\t"
163480 #else
163481         "lsr	r6, r5, #16\n\t"
163482 #endif
163483 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163484         "lsls	r5, r5, #16\n\t"
163485 #else
163486         "lsl	r5, r5, #16\n\t"
163487 #endif
163488 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163489         "adds	r2, r2, r5\n\t"
163490 #else
163491         "add	r2, r2, r5\n\t"
163492 #endif
163493 #ifdef WOLFSSL_KEIL
163494         "adcs	r3, r3, r6\n\t"
163495 #elif defined(__clang__)
163496         "adcs	r3, r6\n\t"
163497 #else
163498         "adc	r3, r6\n\t"
163499 #endif
163500 #ifdef WOLFSSL_KEIL
163501         "adcs	r4, r4, %[r]\n\t"
163502 #elif defined(__clang__)
163503         "adcs	r4, %[r]\n\t"
163504 #else
163505         "adc	r4, %[r]\n\t"
163506 #endif
163507 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163508         "adds	r2, r2, r5\n\t"
163509 #else
163510         "add	r2, r2, r5\n\t"
163511 #endif
163512 #ifdef WOLFSSL_KEIL
163513         "adcs	r3, r3, r6\n\t"
163514 #elif defined(__clang__)
163515         "adcs	r3, r6\n\t"
163516 #else
163517         "adc	r3, r6\n\t"
163518 #endif
163519 #ifdef WOLFSSL_KEIL
163520         "adcs	r4, r4, %[r]\n\t"
163521 #elif defined(__clang__)
163522         "adcs	r4, %[r]\n\t"
163523 #else
163524         "adc	r4, %[r]\n\t"
163525 #endif
163526         "#  A[7] * A[5]\n\t"
163527         "mov	%[a], r9\n\t"
163528         "ldr	r7, [%[a], #20]\n\t"
163529         "ldr	%[a], [%[a], #28]\n\t"
163530         "uxth	r5, %[a]\n\t"
163531         "uxth	r6, r7\n\t"
163532 #ifdef WOLFSSL_KEIL
163533         "muls	r6, r5, r6\n\t"
163534 #elif defined(__clang__)
163535         "muls	r6, r5\n\t"
163536 #else
163537         "mul	r6, r5\n\t"
163538 #endif
163539 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163540         "adds	r2, r2, r6\n\t"
163541 #else
163542         "add	r2, r2, r6\n\t"
163543 #endif
163544 #ifdef WOLFSSL_KEIL
163545         "adcs	r3, r3, %[r]\n\t"
163546 #elif defined(__clang__)
163547         "adcs	r3, %[r]\n\t"
163548 #else
163549         "adc	r3, %[r]\n\t"
163550 #endif
163551 #ifdef WOLFSSL_KEIL
163552         "adcs	r4, r4, %[r]\n\t"
163553 #elif defined(__clang__)
163554         "adcs	r4, %[r]\n\t"
163555 #else
163556         "adc	r4, %[r]\n\t"
163557 #endif
163558 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163559         "adds	r2, r2, r6\n\t"
163560 #else
163561         "add	r2, r2, r6\n\t"
163562 #endif
163563 #ifdef WOLFSSL_KEIL
163564         "adcs	r3, r3, %[r]\n\t"
163565 #elif defined(__clang__)
163566         "adcs	r3, %[r]\n\t"
163567 #else
163568         "adc	r3, %[r]\n\t"
163569 #endif
163570 #ifdef WOLFSSL_KEIL
163571         "adcs	r4, r4, %[r]\n\t"
163572 #elif defined(__clang__)
163573         "adcs	r4, %[r]\n\t"
163574 #else
163575         "adc	r4, %[r]\n\t"
163576 #endif
163577 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163578         "lsrs	r6, r7, #16\n\t"
163579 #else
163580         "lsr	r6, r7, #16\n\t"
163581 #endif
163582 #ifdef WOLFSSL_KEIL
163583         "muls	r5, r6, r5\n\t"
163584 #elif defined(__clang__)
163585         "muls	r5, r6\n\t"
163586 #else
163587         "mul	r5, r6\n\t"
163588 #endif
163589 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163590         "lsrs	r6, r5, #16\n\t"
163591 #else
163592         "lsr	r6, r5, #16\n\t"
163593 #endif
163594 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163595         "lsls	r5, r5, #16\n\t"
163596 #else
163597         "lsl	r5, r5, #16\n\t"
163598 #endif
163599 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163600         "adds	r2, r2, r5\n\t"
163601 #else
163602         "add	r2, r2, r5\n\t"
163603 #endif
163604 #ifdef WOLFSSL_KEIL
163605         "adcs	r3, r3, r6\n\t"
163606 #elif defined(__clang__)
163607         "adcs	r3, r6\n\t"
163608 #else
163609         "adc	r3, r6\n\t"
163610 #endif
163611 #ifdef WOLFSSL_KEIL
163612         "adcs	r4, r4, %[r]\n\t"
163613 #elif defined(__clang__)
163614         "adcs	r4, %[r]\n\t"
163615 #else
163616         "adc	r4, %[r]\n\t"
163617 #endif
163618 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163619         "adds	r2, r2, r5\n\t"
163620 #else
163621         "add	r2, r2, r5\n\t"
163622 #endif
163623 #ifdef WOLFSSL_KEIL
163624         "adcs	r3, r3, r6\n\t"
163625 #elif defined(__clang__)
163626         "adcs	r3, r6\n\t"
163627 #else
163628         "adc	r3, r6\n\t"
163629 #endif
163630 #ifdef WOLFSSL_KEIL
163631         "adcs	r4, r4, %[r]\n\t"
163632 #elif defined(__clang__)
163633         "adcs	r4, %[r]\n\t"
163634 #else
163635         "adc	r4, %[r]\n\t"
163636 #endif
163637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163638         "lsrs	r5, %[a], #16\n\t"
163639 #else
163640         "lsr	r5, %[a], #16\n\t"
163641 #endif
163642 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163643         "lsrs	r6, r7, #16\n\t"
163644 #else
163645         "lsr	r6, r7, #16\n\t"
163646 #endif
163647 #ifdef WOLFSSL_KEIL
163648         "muls	r6, r5, r6\n\t"
163649 #elif defined(__clang__)
163650         "muls	r6, r5\n\t"
163651 #else
163652         "mul	r6, r5\n\t"
163653 #endif
163654 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163655         "adds	r3, r3, r6\n\t"
163656 #else
163657         "add	r3, r3, r6\n\t"
163658 #endif
163659 #ifdef WOLFSSL_KEIL
163660         "adcs	r4, r4, %[r]\n\t"
163661 #elif defined(__clang__)
163662         "adcs	r4, %[r]\n\t"
163663 #else
163664         "adc	r4, %[r]\n\t"
163665 #endif
163666 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163667         "adds	r3, r3, r6\n\t"
163668 #else
163669         "add	r3, r3, r6\n\t"
163670 #endif
163671 #ifdef WOLFSSL_KEIL
163672         "adcs	r4, r4, %[r]\n\t"
163673 #elif defined(__clang__)
163674         "adcs	r4, %[r]\n\t"
163675 #else
163676         "adc	r4, %[r]\n\t"
163677 #endif
163678         "uxth	r6, r7\n\t"
163679 #ifdef WOLFSSL_KEIL
163680         "muls	r5, r6, r5\n\t"
163681 #elif defined(__clang__)
163682         "muls	r5, r6\n\t"
163683 #else
163684         "mul	r5, r6\n\t"
163685 #endif
163686 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163687         "lsrs	r6, r5, #16\n\t"
163688 #else
163689         "lsr	r6, r5, #16\n\t"
163690 #endif
163691 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163692         "lsls	r5, r5, #16\n\t"
163693 #else
163694         "lsl	r5, r5, #16\n\t"
163695 #endif
163696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163697         "adds	r2, r2, r5\n\t"
163698 #else
163699         "add	r2, r2, r5\n\t"
163700 #endif
163701 #ifdef WOLFSSL_KEIL
163702         "adcs	r3, r3, r6\n\t"
163703 #elif defined(__clang__)
163704         "adcs	r3, r6\n\t"
163705 #else
163706         "adc	r3, r6\n\t"
163707 #endif
163708 #ifdef WOLFSSL_KEIL
163709         "adcs	r4, r4, %[r]\n\t"
163710 #elif defined(__clang__)
163711         "adcs	r4, %[r]\n\t"
163712 #else
163713         "adc	r4, %[r]\n\t"
163714 #endif
163715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163716         "adds	r2, r2, r5\n\t"
163717 #else
163718         "add	r2, r2, r5\n\t"
163719 #endif
163720 #ifdef WOLFSSL_KEIL
163721         "adcs	r3, r3, r6\n\t"
163722 #elif defined(__clang__)
163723         "adcs	r3, r6\n\t"
163724 #else
163725         "adc	r3, r6\n\t"
163726 #endif
163727 #ifdef WOLFSSL_KEIL
163728         "adcs	r4, r4, %[r]\n\t"
163729 #elif defined(__clang__)
163730         "adcs	r4, %[r]\n\t"
163731 #else
163732         "adc	r4, %[r]\n\t"
163733 #endif
163734         "#  A[6] * A[6]\n\t"
163735         "mov	%[a], r9\n\t"
163736         "ldr	r7, [%[a], #24]\n\t"
163737 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163738         "lsrs	r6, r7, #16\n\t"
163739 #else
163740         "lsr	r6, r7, #16\n\t"
163741 #endif
163742         "uxth	r5, r7\n\t"
163743 #ifdef WOLFSSL_KEIL
163744         "muls	r5, r5, r5\n\t"
163745 #elif defined(__clang__)
163746         "muls	r5, r5\n\t"
163747 #else
163748         "mul	r5, r5\n\t"
163749 #endif
163750 #ifdef WOLFSSL_KEIL
163751         "muls	r6, r6, r6\n\t"
163752 #elif defined(__clang__)
163753         "muls	r6, r6\n\t"
163754 #else
163755         "mul	r6, r6\n\t"
163756 #endif
163757 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163758         "adds	r2, r2, r5\n\t"
163759 #else
163760         "add	r2, r2, r5\n\t"
163761 #endif
163762 #ifdef WOLFSSL_KEIL
163763         "adcs	r3, r3, r6\n\t"
163764 #elif defined(__clang__)
163765         "adcs	r3, r6\n\t"
163766 #else
163767         "adc	r3, r6\n\t"
163768 #endif
163769 #ifdef WOLFSSL_KEIL
163770         "adcs	r4, r4, %[r]\n\t"
163771 #elif defined(__clang__)
163772         "adcs	r4, %[r]\n\t"
163773 #else
163774         "adc	r4, %[r]\n\t"
163775 #endif
163776 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163777         "lsrs	r6, r7, #16\n\t"
163778 #else
163779         "lsr	r6, r7, #16\n\t"
163780 #endif
163781         "uxth	r5, r7\n\t"
163782 #ifdef WOLFSSL_KEIL
163783         "muls	r5, r6, r5\n\t"
163784 #elif defined(__clang__)
163785         "muls	r5, r6\n\t"
163786 #else
163787         "mul	r5, r6\n\t"
163788 #endif
163789 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163790         "lsrs	r6, r5, #15\n\t"
163791 #else
163792         "lsr	r6, r5, #15\n\t"
163793 #endif
163794 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163795         "lsls	r5, r5, #17\n\t"
163796 #else
163797         "lsl	r5, r5, #17\n\t"
163798 #endif
163799 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163800         "adds	r2, r2, r5\n\t"
163801 #else
163802         "add	r2, r2, r5\n\t"
163803 #endif
163804 #ifdef WOLFSSL_KEIL
163805         "adcs	r3, r3, r6\n\t"
163806 #elif defined(__clang__)
163807         "adcs	r3, r6\n\t"
163808 #else
163809         "adc	r3, r6\n\t"
163810 #endif
163811 #ifdef WOLFSSL_KEIL
163812         "adcs	r4, r4, %[r]\n\t"
163813 #elif defined(__clang__)
163814         "adcs	r4, %[r]\n\t"
163815 #else
163816         "adc	r4, %[r]\n\t"
163817 #endif
163818         "str	r2, [sp, #48]\n\t"
163819         "#  A[7] * A[6]\n\t"
163820         "movs	r2, #0\n\t"
163821         "ldr	%[a], [%[a], #28]\n\t"
163822         "uxth	r5, %[a]\n\t"
163823         "uxth	r6, r7\n\t"
163824 #ifdef WOLFSSL_KEIL
163825         "muls	r6, r5, r6\n\t"
163826 #elif defined(__clang__)
163827         "muls	r6, r5\n\t"
163828 #else
163829         "mul	r6, r5\n\t"
163830 #endif
163831 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163832         "adds	r3, r3, r6\n\t"
163833 #else
163834         "add	r3, r3, r6\n\t"
163835 #endif
163836 #ifdef WOLFSSL_KEIL
163837         "adcs	r4, r4, %[r]\n\t"
163838 #elif defined(__clang__)
163839         "adcs	r4, %[r]\n\t"
163840 #else
163841         "adc	r4, %[r]\n\t"
163842 #endif
163843 #ifdef WOLFSSL_KEIL
163844         "adcs	r2, r2, %[r]\n\t"
163845 #elif defined(__clang__)
163846         "adcs	r2, %[r]\n\t"
163847 #else
163848         "adc	r2, %[r]\n\t"
163849 #endif
163850 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163851         "adds	r3, r3, r6\n\t"
163852 #else
163853         "add	r3, r3, r6\n\t"
163854 #endif
163855 #ifdef WOLFSSL_KEIL
163856         "adcs	r4, r4, %[r]\n\t"
163857 #elif defined(__clang__)
163858         "adcs	r4, %[r]\n\t"
163859 #else
163860         "adc	r4, %[r]\n\t"
163861 #endif
163862 #ifdef WOLFSSL_KEIL
163863         "adcs	r2, r2, %[r]\n\t"
163864 #elif defined(__clang__)
163865         "adcs	r2, %[r]\n\t"
163866 #else
163867         "adc	r2, %[r]\n\t"
163868 #endif
163869 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163870         "lsrs	r6, r7, #16\n\t"
163871 #else
163872         "lsr	r6, r7, #16\n\t"
163873 #endif
163874 #ifdef WOLFSSL_KEIL
163875         "muls	r5, r6, r5\n\t"
163876 #elif defined(__clang__)
163877         "muls	r5, r6\n\t"
163878 #else
163879         "mul	r5, r6\n\t"
163880 #endif
163881 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163882         "lsrs	r6, r5, #16\n\t"
163883 #else
163884         "lsr	r6, r5, #16\n\t"
163885 #endif
163886 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163887         "lsls	r5, r5, #16\n\t"
163888 #else
163889         "lsl	r5, r5, #16\n\t"
163890 #endif
163891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163892         "adds	r3, r3, r5\n\t"
163893 #else
163894         "add	r3, r3, r5\n\t"
163895 #endif
163896 #ifdef WOLFSSL_KEIL
163897         "adcs	r4, r4, r6\n\t"
163898 #elif defined(__clang__)
163899         "adcs	r4, r6\n\t"
163900 #else
163901         "adc	r4, r6\n\t"
163902 #endif
163903 #ifdef WOLFSSL_KEIL
163904         "adcs	r2, r2, %[r]\n\t"
163905 #elif defined(__clang__)
163906         "adcs	r2, %[r]\n\t"
163907 #else
163908         "adc	r2, %[r]\n\t"
163909 #endif
163910 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163911         "adds	r3, r3, r5\n\t"
163912 #else
163913         "add	r3, r3, r5\n\t"
163914 #endif
163915 #ifdef WOLFSSL_KEIL
163916         "adcs	r4, r4, r6\n\t"
163917 #elif defined(__clang__)
163918         "adcs	r4, r6\n\t"
163919 #else
163920         "adc	r4, r6\n\t"
163921 #endif
163922 #ifdef WOLFSSL_KEIL
163923         "adcs	r2, r2, %[r]\n\t"
163924 #elif defined(__clang__)
163925         "adcs	r2, %[r]\n\t"
163926 #else
163927         "adc	r2, %[r]\n\t"
163928 #endif
163929 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163930         "lsrs	r5, %[a], #16\n\t"
163931 #else
163932         "lsr	r5, %[a], #16\n\t"
163933 #endif
163934 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163935         "lsrs	r6, r7, #16\n\t"
163936 #else
163937         "lsr	r6, r7, #16\n\t"
163938 #endif
163939 #ifdef WOLFSSL_KEIL
163940         "muls	r6, r5, r6\n\t"
163941 #elif defined(__clang__)
163942         "muls	r6, r5\n\t"
163943 #else
163944         "mul	r6, r5\n\t"
163945 #endif
163946 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163947         "adds	r4, r4, r6\n\t"
163948 #else
163949         "add	r4, r4, r6\n\t"
163950 #endif
163951 #ifdef WOLFSSL_KEIL
163952         "adcs	r2, r2, %[r]\n\t"
163953 #elif defined(__clang__)
163954         "adcs	r2, %[r]\n\t"
163955 #else
163956         "adc	r2, %[r]\n\t"
163957 #endif
163958 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163959         "adds	r4, r4, r6\n\t"
163960 #else
163961         "add	r4, r4, r6\n\t"
163962 #endif
163963 #ifdef WOLFSSL_KEIL
163964         "adcs	r2, r2, %[r]\n\t"
163965 #elif defined(__clang__)
163966         "adcs	r2, %[r]\n\t"
163967 #else
163968         "adc	r2, %[r]\n\t"
163969 #endif
163970         "uxth	r6, r7\n\t"
163971 #ifdef WOLFSSL_KEIL
163972         "muls	r5, r6, r5\n\t"
163973 #elif defined(__clang__)
163974         "muls	r5, r6\n\t"
163975 #else
163976         "mul	r5, r6\n\t"
163977 #endif
163978 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163979         "lsrs	r6, r5, #16\n\t"
163980 #else
163981         "lsr	r6, r5, #16\n\t"
163982 #endif
163983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163984         "lsls	r5, r5, #16\n\t"
163985 #else
163986         "lsl	r5, r5, #16\n\t"
163987 #endif
163988 #if defined(__clang__) || defined(WOLFSSL_KEIL)
163989         "adds	r3, r3, r5\n\t"
163990 #else
163991         "add	r3, r3, r5\n\t"
163992 #endif
163993 #ifdef WOLFSSL_KEIL
163994         "adcs	r4, r4, r6\n\t"
163995 #elif defined(__clang__)
163996         "adcs	r4, r6\n\t"
163997 #else
163998         "adc	r4, r6\n\t"
163999 #endif
164000 #ifdef WOLFSSL_KEIL
164001         "adcs	r2, r2, %[r]\n\t"
164002 #elif defined(__clang__)
164003         "adcs	r2, %[r]\n\t"
164004 #else
164005         "adc	r2, %[r]\n\t"
164006 #endif
164007 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164008         "adds	r3, r3, r5\n\t"
164009 #else
164010         "add	r3, r3, r5\n\t"
164011 #endif
164012 #ifdef WOLFSSL_KEIL
164013         "adcs	r4, r4, r6\n\t"
164014 #elif defined(__clang__)
164015         "adcs	r4, r6\n\t"
164016 #else
164017         "adc	r4, r6\n\t"
164018 #endif
164019 #ifdef WOLFSSL_KEIL
164020         "adcs	r2, r2, %[r]\n\t"
164021 #elif defined(__clang__)
164022         "adcs	r2, %[r]\n\t"
164023 #else
164024         "adc	r2, %[r]\n\t"
164025 #endif
164026         "#  A[8] * A[5]\n\t"
164027         "mov	%[a], r9\n\t"
164028         "ldr	r7, [%[a], #20]\n\t"
164029         "ldr	%[a], [%[a], #32]\n\t"
164030         "uxth	r5, %[a]\n\t"
164031         "uxth	r6, r7\n\t"
164032 #ifdef WOLFSSL_KEIL
164033         "muls	r6, r5, r6\n\t"
164034 #elif defined(__clang__)
164035         "muls	r6, r5\n\t"
164036 #else
164037         "mul	r6, r5\n\t"
164038 #endif
164039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164040         "adds	r3, r3, r6\n\t"
164041 #else
164042         "add	r3, r3, r6\n\t"
164043 #endif
164044 #ifdef WOLFSSL_KEIL
164045         "adcs	r4, r4, %[r]\n\t"
164046 #elif defined(__clang__)
164047         "adcs	r4, %[r]\n\t"
164048 #else
164049         "adc	r4, %[r]\n\t"
164050 #endif
164051 #ifdef WOLFSSL_KEIL
164052         "adcs	r2, r2, %[r]\n\t"
164053 #elif defined(__clang__)
164054         "adcs	r2, %[r]\n\t"
164055 #else
164056         "adc	r2, %[r]\n\t"
164057 #endif
164058 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164059         "adds	r3, r3, r6\n\t"
164060 #else
164061         "add	r3, r3, r6\n\t"
164062 #endif
164063 #ifdef WOLFSSL_KEIL
164064         "adcs	r4, r4, %[r]\n\t"
164065 #elif defined(__clang__)
164066         "adcs	r4, %[r]\n\t"
164067 #else
164068         "adc	r4, %[r]\n\t"
164069 #endif
164070 #ifdef WOLFSSL_KEIL
164071         "adcs	r2, r2, %[r]\n\t"
164072 #elif defined(__clang__)
164073         "adcs	r2, %[r]\n\t"
164074 #else
164075         "adc	r2, %[r]\n\t"
164076 #endif
164077 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164078         "lsrs	r6, r7, #16\n\t"
164079 #else
164080         "lsr	r6, r7, #16\n\t"
164081 #endif
164082 #ifdef WOLFSSL_KEIL
164083         "muls	r5, r6, r5\n\t"
164084 #elif defined(__clang__)
164085         "muls	r5, r6\n\t"
164086 #else
164087         "mul	r5, r6\n\t"
164088 #endif
164089 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164090         "lsrs	r6, r5, #16\n\t"
164091 #else
164092         "lsr	r6, r5, #16\n\t"
164093 #endif
164094 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164095         "lsls	r5, r5, #16\n\t"
164096 #else
164097         "lsl	r5, r5, #16\n\t"
164098 #endif
164099 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164100         "adds	r3, r3, r5\n\t"
164101 #else
164102         "add	r3, r3, r5\n\t"
164103 #endif
164104 #ifdef WOLFSSL_KEIL
164105         "adcs	r4, r4, r6\n\t"
164106 #elif defined(__clang__)
164107         "adcs	r4, r6\n\t"
164108 #else
164109         "adc	r4, r6\n\t"
164110 #endif
164111 #ifdef WOLFSSL_KEIL
164112         "adcs	r2, r2, %[r]\n\t"
164113 #elif defined(__clang__)
164114         "adcs	r2, %[r]\n\t"
164115 #else
164116         "adc	r2, %[r]\n\t"
164117 #endif
164118 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164119         "adds	r3, r3, r5\n\t"
164120 #else
164121         "add	r3, r3, r5\n\t"
164122 #endif
164123 #ifdef WOLFSSL_KEIL
164124         "adcs	r4, r4, r6\n\t"
164125 #elif defined(__clang__)
164126         "adcs	r4, r6\n\t"
164127 #else
164128         "adc	r4, r6\n\t"
164129 #endif
164130 #ifdef WOLFSSL_KEIL
164131         "adcs	r2, r2, %[r]\n\t"
164132 #elif defined(__clang__)
164133         "adcs	r2, %[r]\n\t"
164134 #else
164135         "adc	r2, %[r]\n\t"
164136 #endif
164137 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164138         "lsrs	r5, %[a], #16\n\t"
164139 #else
164140         "lsr	r5, %[a], #16\n\t"
164141 #endif
164142 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164143         "lsrs	r6, r7, #16\n\t"
164144 #else
164145         "lsr	r6, r7, #16\n\t"
164146 #endif
164147 #ifdef WOLFSSL_KEIL
164148         "muls	r6, r5, r6\n\t"
164149 #elif defined(__clang__)
164150         "muls	r6, r5\n\t"
164151 #else
164152         "mul	r6, r5\n\t"
164153 #endif
164154 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164155         "adds	r4, r4, r6\n\t"
164156 #else
164157         "add	r4, r4, r6\n\t"
164158 #endif
164159 #ifdef WOLFSSL_KEIL
164160         "adcs	r2, r2, %[r]\n\t"
164161 #elif defined(__clang__)
164162         "adcs	r2, %[r]\n\t"
164163 #else
164164         "adc	r2, %[r]\n\t"
164165 #endif
164166 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164167         "adds	r4, r4, r6\n\t"
164168 #else
164169         "add	r4, r4, r6\n\t"
164170 #endif
164171 #ifdef WOLFSSL_KEIL
164172         "adcs	r2, r2, %[r]\n\t"
164173 #elif defined(__clang__)
164174         "adcs	r2, %[r]\n\t"
164175 #else
164176         "adc	r2, %[r]\n\t"
164177 #endif
164178         "uxth	r6, r7\n\t"
164179 #ifdef WOLFSSL_KEIL
164180         "muls	r5, r6, r5\n\t"
164181 #elif defined(__clang__)
164182         "muls	r5, r6\n\t"
164183 #else
164184         "mul	r5, r6\n\t"
164185 #endif
164186 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164187         "lsrs	r6, r5, #16\n\t"
164188 #else
164189         "lsr	r6, r5, #16\n\t"
164190 #endif
164191 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164192         "lsls	r5, r5, #16\n\t"
164193 #else
164194         "lsl	r5, r5, #16\n\t"
164195 #endif
164196 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164197         "adds	r3, r3, r5\n\t"
164198 #else
164199         "add	r3, r3, r5\n\t"
164200 #endif
164201 #ifdef WOLFSSL_KEIL
164202         "adcs	r4, r4, r6\n\t"
164203 #elif defined(__clang__)
164204         "adcs	r4, r6\n\t"
164205 #else
164206         "adc	r4, r6\n\t"
164207 #endif
164208 #ifdef WOLFSSL_KEIL
164209         "adcs	r2, r2, %[r]\n\t"
164210 #elif defined(__clang__)
164211         "adcs	r2, %[r]\n\t"
164212 #else
164213         "adc	r2, %[r]\n\t"
164214 #endif
164215 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164216         "adds	r3, r3, r5\n\t"
164217 #else
164218         "add	r3, r3, r5\n\t"
164219 #endif
164220 #ifdef WOLFSSL_KEIL
164221         "adcs	r4, r4, r6\n\t"
164222 #elif defined(__clang__)
164223         "adcs	r4, r6\n\t"
164224 #else
164225         "adc	r4, r6\n\t"
164226 #endif
164227 #ifdef WOLFSSL_KEIL
164228         "adcs	r2, r2, %[r]\n\t"
164229 #elif defined(__clang__)
164230         "adcs	r2, %[r]\n\t"
164231 #else
164232         "adc	r2, %[r]\n\t"
164233 #endif
164234         "#  A[9] * A[4]\n\t"
164235         "mov	%[a], r9\n\t"
164236         "ldr	r7, [%[a], #16]\n\t"
164237         "ldr	%[a], [%[a], #36]\n\t"
164238         "uxth	r5, %[a]\n\t"
164239         "uxth	r6, r7\n\t"
164240 #ifdef WOLFSSL_KEIL
164241         "muls	r6, r5, r6\n\t"
164242 #elif defined(__clang__)
164243         "muls	r6, r5\n\t"
164244 #else
164245         "mul	r6, r5\n\t"
164246 #endif
164247 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164248         "adds	r3, r3, r6\n\t"
164249 #else
164250         "add	r3, r3, r6\n\t"
164251 #endif
164252 #ifdef WOLFSSL_KEIL
164253         "adcs	r4, r4, %[r]\n\t"
164254 #elif defined(__clang__)
164255         "adcs	r4, %[r]\n\t"
164256 #else
164257         "adc	r4, %[r]\n\t"
164258 #endif
164259 #ifdef WOLFSSL_KEIL
164260         "adcs	r2, r2, %[r]\n\t"
164261 #elif defined(__clang__)
164262         "adcs	r2, %[r]\n\t"
164263 #else
164264         "adc	r2, %[r]\n\t"
164265 #endif
164266 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164267         "adds	r3, r3, r6\n\t"
164268 #else
164269         "add	r3, r3, r6\n\t"
164270 #endif
164271 #ifdef WOLFSSL_KEIL
164272         "adcs	r4, r4, %[r]\n\t"
164273 #elif defined(__clang__)
164274         "adcs	r4, %[r]\n\t"
164275 #else
164276         "adc	r4, %[r]\n\t"
164277 #endif
164278 #ifdef WOLFSSL_KEIL
164279         "adcs	r2, r2, %[r]\n\t"
164280 #elif defined(__clang__)
164281         "adcs	r2, %[r]\n\t"
164282 #else
164283         "adc	r2, %[r]\n\t"
164284 #endif
164285 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164286         "lsrs	r6, r7, #16\n\t"
164287 #else
164288         "lsr	r6, r7, #16\n\t"
164289 #endif
164290 #ifdef WOLFSSL_KEIL
164291         "muls	r5, r6, r5\n\t"
164292 #elif defined(__clang__)
164293         "muls	r5, r6\n\t"
164294 #else
164295         "mul	r5, r6\n\t"
164296 #endif
164297 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164298         "lsrs	r6, r5, #16\n\t"
164299 #else
164300         "lsr	r6, r5, #16\n\t"
164301 #endif
164302 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164303         "lsls	r5, r5, #16\n\t"
164304 #else
164305         "lsl	r5, r5, #16\n\t"
164306 #endif
164307 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164308         "adds	r3, r3, r5\n\t"
164309 #else
164310         "add	r3, r3, r5\n\t"
164311 #endif
164312 #ifdef WOLFSSL_KEIL
164313         "adcs	r4, r4, r6\n\t"
164314 #elif defined(__clang__)
164315         "adcs	r4, r6\n\t"
164316 #else
164317         "adc	r4, r6\n\t"
164318 #endif
164319 #ifdef WOLFSSL_KEIL
164320         "adcs	r2, r2, %[r]\n\t"
164321 #elif defined(__clang__)
164322         "adcs	r2, %[r]\n\t"
164323 #else
164324         "adc	r2, %[r]\n\t"
164325 #endif
164326 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164327         "adds	r3, r3, r5\n\t"
164328 #else
164329         "add	r3, r3, r5\n\t"
164330 #endif
164331 #ifdef WOLFSSL_KEIL
164332         "adcs	r4, r4, r6\n\t"
164333 #elif defined(__clang__)
164334         "adcs	r4, r6\n\t"
164335 #else
164336         "adc	r4, r6\n\t"
164337 #endif
164338 #ifdef WOLFSSL_KEIL
164339         "adcs	r2, r2, %[r]\n\t"
164340 #elif defined(__clang__)
164341         "adcs	r2, %[r]\n\t"
164342 #else
164343         "adc	r2, %[r]\n\t"
164344 #endif
164345 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164346         "lsrs	r5, %[a], #16\n\t"
164347 #else
164348         "lsr	r5, %[a], #16\n\t"
164349 #endif
164350 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164351         "lsrs	r6, r7, #16\n\t"
164352 #else
164353         "lsr	r6, r7, #16\n\t"
164354 #endif
164355 #ifdef WOLFSSL_KEIL
164356         "muls	r6, r5, r6\n\t"
164357 #elif defined(__clang__)
164358         "muls	r6, r5\n\t"
164359 #else
164360         "mul	r6, r5\n\t"
164361 #endif
164362 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164363         "adds	r4, r4, r6\n\t"
164364 #else
164365         "add	r4, r4, r6\n\t"
164366 #endif
164367 #ifdef WOLFSSL_KEIL
164368         "adcs	r2, r2, %[r]\n\t"
164369 #elif defined(__clang__)
164370         "adcs	r2, %[r]\n\t"
164371 #else
164372         "adc	r2, %[r]\n\t"
164373 #endif
164374 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164375         "adds	r4, r4, r6\n\t"
164376 #else
164377         "add	r4, r4, r6\n\t"
164378 #endif
164379 #ifdef WOLFSSL_KEIL
164380         "adcs	r2, r2, %[r]\n\t"
164381 #elif defined(__clang__)
164382         "adcs	r2, %[r]\n\t"
164383 #else
164384         "adc	r2, %[r]\n\t"
164385 #endif
164386         "uxth	r6, r7\n\t"
164387 #ifdef WOLFSSL_KEIL
164388         "muls	r5, r6, r5\n\t"
164389 #elif defined(__clang__)
164390         "muls	r5, r6\n\t"
164391 #else
164392         "mul	r5, r6\n\t"
164393 #endif
164394 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164395         "lsrs	r6, r5, #16\n\t"
164396 #else
164397         "lsr	r6, r5, #16\n\t"
164398 #endif
164399 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164400         "lsls	r5, r5, #16\n\t"
164401 #else
164402         "lsl	r5, r5, #16\n\t"
164403 #endif
164404 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164405         "adds	r3, r3, r5\n\t"
164406 #else
164407         "add	r3, r3, r5\n\t"
164408 #endif
164409 #ifdef WOLFSSL_KEIL
164410         "adcs	r4, r4, r6\n\t"
164411 #elif defined(__clang__)
164412         "adcs	r4, r6\n\t"
164413 #else
164414         "adc	r4, r6\n\t"
164415 #endif
164416 #ifdef WOLFSSL_KEIL
164417         "adcs	r2, r2, %[r]\n\t"
164418 #elif defined(__clang__)
164419         "adcs	r2, %[r]\n\t"
164420 #else
164421         "adc	r2, %[r]\n\t"
164422 #endif
164423 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164424         "adds	r3, r3, r5\n\t"
164425 #else
164426         "add	r3, r3, r5\n\t"
164427 #endif
164428 #ifdef WOLFSSL_KEIL
164429         "adcs	r4, r4, r6\n\t"
164430 #elif defined(__clang__)
164431         "adcs	r4, r6\n\t"
164432 #else
164433         "adc	r4, r6\n\t"
164434 #endif
164435 #ifdef WOLFSSL_KEIL
164436         "adcs	r2, r2, %[r]\n\t"
164437 #elif defined(__clang__)
164438         "adcs	r2, %[r]\n\t"
164439 #else
164440         "adc	r2, %[r]\n\t"
164441 #endif
164442         "#  A[10] * A[3]\n\t"
164443         "mov	%[a], r9\n\t"
164444         "mov	r7, lr\n\t"
164445         "ldr	%[a], [%[a], #40]\n\t"
164446         "uxth	r5, %[a]\n\t"
164447         "uxth	r6, r7\n\t"
164448 #ifdef WOLFSSL_KEIL
164449         "muls	r6, r5, r6\n\t"
164450 #elif defined(__clang__)
164451         "muls	r6, r5\n\t"
164452 #else
164453         "mul	r6, r5\n\t"
164454 #endif
164455 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164456         "adds	r3, r3, r6\n\t"
164457 #else
164458         "add	r3, r3, r6\n\t"
164459 #endif
164460 #ifdef WOLFSSL_KEIL
164461         "adcs	r4, r4, %[r]\n\t"
164462 #elif defined(__clang__)
164463         "adcs	r4, %[r]\n\t"
164464 #else
164465         "adc	r4, %[r]\n\t"
164466 #endif
164467 #ifdef WOLFSSL_KEIL
164468         "adcs	r2, r2, %[r]\n\t"
164469 #elif defined(__clang__)
164470         "adcs	r2, %[r]\n\t"
164471 #else
164472         "adc	r2, %[r]\n\t"
164473 #endif
164474 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164475         "adds	r3, r3, r6\n\t"
164476 #else
164477         "add	r3, r3, r6\n\t"
164478 #endif
164479 #ifdef WOLFSSL_KEIL
164480         "adcs	r4, r4, %[r]\n\t"
164481 #elif defined(__clang__)
164482         "adcs	r4, %[r]\n\t"
164483 #else
164484         "adc	r4, %[r]\n\t"
164485 #endif
164486 #ifdef WOLFSSL_KEIL
164487         "adcs	r2, r2, %[r]\n\t"
164488 #elif defined(__clang__)
164489         "adcs	r2, %[r]\n\t"
164490 #else
164491         "adc	r2, %[r]\n\t"
164492 #endif
164493 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164494         "lsrs	r6, r7, #16\n\t"
164495 #else
164496         "lsr	r6, r7, #16\n\t"
164497 #endif
164498 #ifdef WOLFSSL_KEIL
164499         "muls	r5, r6, r5\n\t"
164500 #elif defined(__clang__)
164501         "muls	r5, r6\n\t"
164502 #else
164503         "mul	r5, r6\n\t"
164504 #endif
164505 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164506         "lsrs	r6, r5, #16\n\t"
164507 #else
164508         "lsr	r6, r5, #16\n\t"
164509 #endif
164510 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164511         "lsls	r5, r5, #16\n\t"
164512 #else
164513         "lsl	r5, r5, #16\n\t"
164514 #endif
164515 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164516         "adds	r3, r3, r5\n\t"
164517 #else
164518         "add	r3, r3, r5\n\t"
164519 #endif
164520 #ifdef WOLFSSL_KEIL
164521         "adcs	r4, r4, r6\n\t"
164522 #elif defined(__clang__)
164523         "adcs	r4, r6\n\t"
164524 #else
164525         "adc	r4, r6\n\t"
164526 #endif
164527 #ifdef WOLFSSL_KEIL
164528         "adcs	r2, r2, %[r]\n\t"
164529 #elif defined(__clang__)
164530         "adcs	r2, %[r]\n\t"
164531 #else
164532         "adc	r2, %[r]\n\t"
164533 #endif
164534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164535         "adds	r3, r3, r5\n\t"
164536 #else
164537         "add	r3, r3, r5\n\t"
164538 #endif
164539 #ifdef WOLFSSL_KEIL
164540         "adcs	r4, r4, r6\n\t"
164541 #elif defined(__clang__)
164542         "adcs	r4, r6\n\t"
164543 #else
164544         "adc	r4, r6\n\t"
164545 #endif
164546 #ifdef WOLFSSL_KEIL
164547         "adcs	r2, r2, %[r]\n\t"
164548 #elif defined(__clang__)
164549         "adcs	r2, %[r]\n\t"
164550 #else
164551         "adc	r2, %[r]\n\t"
164552 #endif
164553 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164554         "lsrs	r5, %[a], #16\n\t"
164555 #else
164556         "lsr	r5, %[a], #16\n\t"
164557 #endif
164558 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164559         "lsrs	r6, r7, #16\n\t"
164560 #else
164561         "lsr	r6, r7, #16\n\t"
164562 #endif
164563 #ifdef WOLFSSL_KEIL
164564         "muls	r6, r5, r6\n\t"
164565 #elif defined(__clang__)
164566         "muls	r6, r5\n\t"
164567 #else
164568         "mul	r6, r5\n\t"
164569 #endif
164570 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164571         "adds	r4, r4, r6\n\t"
164572 #else
164573         "add	r4, r4, r6\n\t"
164574 #endif
164575 #ifdef WOLFSSL_KEIL
164576         "adcs	r2, r2, %[r]\n\t"
164577 #elif defined(__clang__)
164578         "adcs	r2, %[r]\n\t"
164579 #else
164580         "adc	r2, %[r]\n\t"
164581 #endif
164582 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164583         "adds	r4, r4, r6\n\t"
164584 #else
164585         "add	r4, r4, r6\n\t"
164586 #endif
164587 #ifdef WOLFSSL_KEIL
164588         "adcs	r2, r2, %[r]\n\t"
164589 #elif defined(__clang__)
164590         "adcs	r2, %[r]\n\t"
164591 #else
164592         "adc	r2, %[r]\n\t"
164593 #endif
164594         "uxth	r6, r7\n\t"
164595 #ifdef WOLFSSL_KEIL
164596         "muls	r5, r6, r5\n\t"
164597 #elif defined(__clang__)
164598         "muls	r5, r6\n\t"
164599 #else
164600         "mul	r5, r6\n\t"
164601 #endif
164602 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164603         "lsrs	r6, r5, #16\n\t"
164604 #else
164605         "lsr	r6, r5, #16\n\t"
164606 #endif
164607 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164608         "lsls	r5, r5, #16\n\t"
164609 #else
164610         "lsl	r5, r5, #16\n\t"
164611 #endif
164612 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164613         "adds	r3, r3, r5\n\t"
164614 #else
164615         "add	r3, r3, r5\n\t"
164616 #endif
164617 #ifdef WOLFSSL_KEIL
164618         "adcs	r4, r4, r6\n\t"
164619 #elif defined(__clang__)
164620         "adcs	r4, r6\n\t"
164621 #else
164622         "adc	r4, r6\n\t"
164623 #endif
164624 #ifdef WOLFSSL_KEIL
164625         "adcs	r2, r2, %[r]\n\t"
164626 #elif defined(__clang__)
164627         "adcs	r2, %[r]\n\t"
164628 #else
164629         "adc	r2, %[r]\n\t"
164630 #endif
164631 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164632         "adds	r3, r3, r5\n\t"
164633 #else
164634         "add	r3, r3, r5\n\t"
164635 #endif
164636 #ifdef WOLFSSL_KEIL
164637         "adcs	r4, r4, r6\n\t"
164638 #elif defined(__clang__)
164639         "adcs	r4, r6\n\t"
164640 #else
164641         "adc	r4, r6\n\t"
164642 #endif
164643 #ifdef WOLFSSL_KEIL
164644         "adcs	r2, r2, %[r]\n\t"
164645 #elif defined(__clang__)
164646         "adcs	r2, %[r]\n\t"
164647 #else
164648         "adc	r2, %[r]\n\t"
164649 #endif
164650         "#  A[11] * A[2]\n\t"
164651         "mov	%[a], r9\n\t"
164652         "mov	r7, r12\n\t"
164653         "ldr	%[a], [%[a], #44]\n\t"
164654         "uxth	r5, %[a]\n\t"
164655         "uxth	r6, r7\n\t"
164656 #ifdef WOLFSSL_KEIL
164657         "muls	r6, r5, r6\n\t"
164658 #elif defined(__clang__)
164659         "muls	r6, r5\n\t"
164660 #else
164661         "mul	r6, r5\n\t"
164662 #endif
164663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164664         "adds	r3, r3, r6\n\t"
164665 #else
164666         "add	r3, r3, r6\n\t"
164667 #endif
164668 #ifdef WOLFSSL_KEIL
164669         "adcs	r4, r4, %[r]\n\t"
164670 #elif defined(__clang__)
164671         "adcs	r4, %[r]\n\t"
164672 #else
164673         "adc	r4, %[r]\n\t"
164674 #endif
164675 #ifdef WOLFSSL_KEIL
164676         "adcs	r2, r2, %[r]\n\t"
164677 #elif defined(__clang__)
164678         "adcs	r2, %[r]\n\t"
164679 #else
164680         "adc	r2, %[r]\n\t"
164681 #endif
164682 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164683         "adds	r3, r3, r6\n\t"
164684 #else
164685         "add	r3, r3, r6\n\t"
164686 #endif
164687 #ifdef WOLFSSL_KEIL
164688         "adcs	r4, r4, %[r]\n\t"
164689 #elif defined(__clang__)
164690         "adcs	r4, %[r]\n\t"
164691 #else
164692         "adc	r4, %[r]\n\t"
164693 #endif
164694 #ifdef WOLFSSL_KEIL
164695         "adcs	r2, r2, %[r]\n\t"
164696 #elif defined(__clang__)
164697         "adcs	r2, %[r]\n\t"
164698 #else
164699         "adc	r2, %[r]\n\t"
164700 #endif
164701 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164702         "lsrs	r6, r7, #16\n\t"
164703 #else
164704         "lsr	r6, r7, #16\n\t"
164705 #endif
164706 #ifdef WOLFSSL_KEIL
164707         "muls	r5, r6, r5\n\t"
164708 #elif defined(__clang__)
164709         "muls	r5, r6\n\t"
164710 #else
164711         "mul	r5, r6\n\t"
164712 #endif
164713 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164714         "lsrs	r6, r5, #16\n\t"
164715 #else
164716         "lsr	r6, r5, #16\n\t"
164717 #endif
164718 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164719         "lsls	r5, r5, #16\n\t"
164720 #else
164721         "lsl	r5, r5, #16\n\t"
164722 #endif
164723 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164724         "adds	r3, r3, r5\n\t"
164725 #else
164726         "add	r3, r3, r5\n\t"
164727 #endif
164728 #ifdef WOLFSSL_KEIL
164729         "adcs	r4, r4, r6\n\t"
164730 #elif defined(__clang__)
164731         "adcs	r4, r6\n\t"
164732 #else
164733         "adc	r4, r6\n\t"
164734 #endif
164735 #ifdef WOLFSSL_KEIL
164736         "adcs	r2, r2, %[r]\n\t"
164737 #elif defined(__clang__)
164738         "adcs	r2, %[r]\n\t"
164739 #else
164740         "adc	r2, %[r]\n\t"
164741 #endif
164742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164743         "adds	r3, r3, r5\n\t"
164744 #else
164745         "add	r3, r3, r5\n\t"
164746 #endif
164747 #ifdef WOLFSSL_KEIL
164748         "adcs	r4, r4, r6\n\t"
164749 #elif defined(__clang__)
164750         "adcs	r4, r6\n\t"
164751 #else
164752         "adc	r4, r6\n\t"
164753 #endif
164754 #ifdef WOLFSSL_KEIL
164755         "adcs	r2, r2, %[r]\n\t"
164756 #elif defined(__clang__)
164757         "adcs	r2, %[r]\n\t"
164758 #else
164759         "adc	r2, %[r]\n\t"
164760 #endif
164761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164762         "lsrs	r5, %[a], #16\n\t"
164763 #else
164764         "lsr	r5, %[a], #16\n\t"
164765 #endif
164766 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164767         "lsrs	r6, r7, #16\n\t"
164768 #else
164769         "lsr	r6, r7, #16\n\t"
164770 #endif
164771 #ifdef WOLFSSL_KEIL
164772         "muls	r6, r5, r6\n\t"
164773 #elif defined(__clang__)
164774         "muls	r6, r5\n\t"
164775 #else
164776         "mul	r6, r5\n\t"
164777 #endif
164778 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164779         "adds	r4, r4, r6\n\t"
164780 #else
164781         "add	r4, r4, r6\n\t"
164782 #endif
164783 #ifdef WOLFSSL_KEIL
164784         "adcs	r2, r2, %[r]\n\t"
164785 #elif defined(__clang__)
164786         "adcs	r2, %[r]\n\t"
164787 #else
164788         "adc	r2, %[r]\n\t"
164789 #endif
164790 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164791         "adds	r4, r4, r6\n\t"
164792 #else
164793         "add	r4, r4, r6\n\t"
164794 #endif
164795 #ifdef WOLFSSL_KEIL
164796         "adcs	r2, r2, %[r]\n\t"
164797 #elif defined(__clang__)
164798         "adcs	r2, %[r]\n\t"
164799 #else
164800         "adc	r2, %[r]\n\t"
164801 #endif
164802         "uxth	r6, r7\n\t"
164803 #ifdef WOLFSSL_KEIL
164804         "muls	r5, r6, r5\n\t"
164805 #elif defined(__clang__)
164806         "muls	r5, r6\n\t"
164807 #else
164808         "mul	r5, r6\n\t"
164809 #endif
164810 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164811         "lsrs	r6, r5, #16\n\t"
164812 #else
164813         "lsr	r6, r5, #16\n\t"
164814 #endif
164815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164816         "lsls	r5, r5, #16\n\t"
164817 #else
164818         "lsl	r5, r5, #16\n\t"
164819 #endif
164820 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164821         "adds	r3, r3, r5\n\t"
164822 #else
164823         "add	r3, r3, r5\n\t"
164824 #endif
164825 #ifdef WOLFSSL_KEIL
164826         "adcs	r4, r4, r6\n\t"
164827 #elif defined(__clang__)
164828         "adcs	r4, r6\n\t"
164829 #else
164830         "adc	r4, r6\n\t"
164831 #endif
164832 #ifdef WOLFSSL_KEIL
164833         "adcs	r2, r2, %[r]\n\t"
164834 #elif defined(__clang__)
164835         "adcs	r2, %[r]\n\t"
164836 #else
164837         "adc	r2, %[r]\n\t"
164838 #endif
164839 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164840         "adds	r3, r3, r5\n\t"
164841 #else
164842         "add	r3, r3, r5\n\t"
164843 #endif
164844 #ifdef WOLFSSL_KEIL
164845         "adcs	r4, r4, r6\n\t"
164846 #elif defined(__clang__)
164847         "adcs	r4, r6\n\t"
164848 #else
164849         "adc	r4, r6\n\t"
164850 #endif
164851 #ifdef WOLFSSL_KEIL
164852         "adcs	r2, r2, %[r]\n\t"
164853 #elif defined(__clang__)
164854         "adcs	r2, %[r]\n\t"
164855 #else
164856         "adc	r2, %[r]\n\t"
164857 #endif
164858         "#  A[12] * A[1]\n\t"
164859         "mov	%[a], r9\n\t"
164860         "mov	r7, r11\n\t"
164861         "ldr	%[a], [%[a], #48]\n\t"
164862         "uxth	r5, %[a]\n\t"
164863         "uxth	r6, r7\n\t"
164864 #ifdef WOLFSSL_KEIL
164865         "muls	r6, r5, r6\n\t"
164866 #elif defined(__clang__)
164867         "muls	r6, r5\n\t"
164868 #else
164869         "mul	r6, r5\n\t"
164870 #endif
164871 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164872         "adds	r3, r3, r6\n\t"
164873 #else
164874         "add	r3, r3, r6\n\t"
164875 #endif
164876 #ifdef WOLFSSL_KEIL
164877         "adcs	r4, r4, %[r]\n\t"
164878 #elif defined(__clang__)
164879         "adcs	r4, %[r]\n\t"
164880 #else
164881         "adc	r4, %[r]\n\t"
164882 #endif
164883 #ifdef WOLFSSL_KEIL
164884         "adcs	r2, r2, %[r]\n\t"
164885 #elif defined(__clang__)
164886         "adcs	r2, %[r]\n\t"
164887 #else
164888         "adc	r2, %[r]\n\t"
164889 #endif
164890 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164891         "adds	r3, r3, r6\n\t"
164892 #else
164893         "add	r3, r3, r6\n\t"
164894 #endif
164895 #ifdef WOLFSSL_KEIL
164896         "adcs	r4, r4, %[r]\n\t"
164897 #elif defined(__clang__)
164898         "adcs	r4, %[r]\n\t"
164899 #else
164900         "adc	r4, %[r]\n\t"
164901 #endif
164902 #ifdef WOLFSSL_KEIL
164903         "adcs	r2, r2, %[r]\n\t"
164904 #elif defined(__clang__)
164905         "adcs	r2, %[r]\n\t"
164906 #else
164907         "adc	r2, %[r]\n\t"
164908 #endif
164909 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164910         "lsrs	r6, r7, #16\n\t"
164911 #else
164912         "lsr	r6, r7, #16\n\t"
164913 #endif
164914 #ifdef WOLFSSL_KEIL
164915         "muls	r5, r6, r5\n\t"
164916 #elif defined(__clang__)
164917         "muls	r5, r6\n\t"
164918 #else
164919         "mul	r5, r6\n\t"
164920 #endif
164921 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164922         "lsrs	r6, r5, #16\n\t"
164923 #else
164924         "lsr	r6, r5, #16\n\t"
164925 #endif
164926 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164927         "lsls	r5, r5, #16\n\t"
164928 #else
164929         "lsl	r5, r5, #16\n\t"
164930 #endif
164931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164932         "adds	r3, r3, r5\n\t"
164933 #else
164934         "add	r3, r3, r5\n\t"
164935 #endif
164936 #ifdef WOLFSSL_KEIL
164937         "adcs	r4, r4, r6\n\t"
164938 #elif defined(__clang__)
164939         "adcs	r4, r6\n\t"
164940 #else
164941         "adc	r4, r6\n\t"
164942 #endif
164943 #ifdef WOLFSSL_KEIL
164944         "adcs	r2, r2, %[r]\n\t"
164945 #elif defined(__clang__)
164946         "adcs	r2, %[r]\n\t"
164947 #else
164948         "adc	r2, %[r]\n\t"
164949 #endif
164950 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164951         "adds	r3, r3, r5\n\t"
164952 #else
164953         "add	r3, r3, r5\n\t"
164954 #endif
164955 #ifdef WOLFSSL_KEIL
164956         "adcs	r4, r4, r6\n\t"
164957 #elif defined(__clang__)
164958         "adcs	r4, r6\n\t"
164959 #else
164960         "adc	r4, r6\n\t"
164961 #endif
164962 #ifdef WOLFSSL_KEIL
164963         "adcs	r2, r2, %[r]\n\t"
164964 #elif defined(__clang__)
164965         "adcs	r2, %[r]\n\t"
164966 #else
164967         "adc	r2, %[r]\n\t"
164968 #endif
164969 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164970         "lsrs	r5, %[a], #16\n\t"
164971 #else
164972         "lsr	r5, %[a], #16\n\t"
164973 #endif
164974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164975         "lsrs	r6, r7, #16\n\t"
164976 #else
164977         "lsr	r6, r7, #16\n\t"
164978 #endif
164979 #ifdef WOLFSSL_KEIL
164980         "muls	r6, r5, r6\n\t"
164981 #elif defined(__clang__)
164982         "muls	r6, r5\n\t"
164983 #else
164984         "mul	r6, r5\n\t"
164985 #endif
164986 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164987         "adds	r4, r4, r6\n\t"
164988 #else
164989         "add	r4, r4, r6\n\t"
164990 #endif
164991 #ifdef WOLFSSL_KEIL
164992         "adcs	r2, r2, %[r]\n\t"
164993 #elif defined(__clang__)
164994         "adcs	r2, %[r]\n\t"
164995 #else
164996         "adc	r2, %[r]\n\t"
164997 #endif
164998 #if defined(__clang__) || defined(WOLFSSL_KEIL)
164999         "adds	r4, r4, r6\n\t"
165000 #else
165001         "add	r4, r4, r6\n\t"
165002 #endif
165003 #ifdef WOLFSSL_KEIL
165004         "adcs	r2, r2, %[r]\n\t"
165005 #elif defined(__clang__)
165006         "adcs	r2, %[r]\n\t"
165007 #else
165008         "adc	r2, %[r]\n\t"
165009 #endif
165010         "uxth	r6, r7\n\t"
165011 #ifdef WOLFSSL_KEIL
165012         "muls	r5, r6, r5\n\t"
165013 #elif defined(__clang__)
165014         "muls	r5, r6\n\t"
165015 #else
165016         "mul	r5, r6\n\t"
165017 #endif
165018 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165019         "lsrs	r6, r5, #16\n\t"
165020 #else
165021         "lsr	r6, r5, #16\n\t"
165022 #endif
165023 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165024         "lsls	r5, r5, #16\n\t"
165025 #else
165026         "lsl	r5, r5, #16\n\t"
165027 #endif
165028 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165029         "adds	r3, r3, r5\n\t"
165030 #else
165031         "add	r3, r3, r5\n\t"
165032 #endif
165033 #ifdef WOLFSSL_KEIL
165034         "adcs	r4, r4, r6\n\t"
165035 #elif defined(__clang__)
165036         "adcs	r4, r6\n\t"
165037 #else
165038         "adc	r4, r6\n\t"
165039 #endif
165040 #ifdef WOLFSSL_KEIL
165041         "adcs	r2, r2, %[r]\n\t"
165042 #elif defined(__clang__)
165043         "adcs	r2, %[r]\n\t"
165044 #else
165045         "adc	r2, %[r]\n\t"
165046 #endif
165047 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165048         "adds	r3, r3, r5\n\t"
165049 #else
165050         "add	r3, r3, r5\n\t"
165051 #endif
165052 #ifdef WOLFSSL_KEIL
165053         "adcs	r4, r4, r6\n\t"
165054 #elif defined(__clang__)
165055         "adcs	r4, r6\n\t"
165056 #else
165057         "adc	r4, r6\n\t"
165058 #endif
165059 #ifdef WOLFSSL_KEIL
165060         "adcs	r2, r2, %[r]\n\t"
165061 #elif defined(__clang__)
165062         "adcs	r2, %[r]\n\t"
165063 #else
165064         "adc	r2, %[r]\n\t"
165065 #endif
165066         "#  A[13] * A[0]\n\t"
165067         "mov	%[a], r9\n\t"
165068         "mov	r7, r10\n\t"
165069         "ldr	%[a], [%[a], #52]\n\t"
165070         "uxth	r5, %[a]\n\t"
165071         "uxth	r6, r7\n\t"
165072 #ifdef WOLFSSL_KEIL
165073         "muls	r6, r5, r6\n\t"
165074 #elif defined(__clang__)
165075         "muls	r6, r5\n\t"
165076 #else
165077         "mul	r6, r5\n\t"
165078 #endif
165079 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165080         "adds	r3, r3, r6\n\t"
165081 #else
165082         "add	r3, r3, r6\n\t"
165083 #endif
165084 #ifdef WOLFSSL_KEIL
165085         "adcs	r4, r4, %[r]\n\t"
165086 #elif defined(__clang__)
165087         "adcs	r4, %[r]\n\t"
165088 #else
165089         "adc	r4, %[r]\n\t"
165090 #endif
165091 #ifdef WOLFSSL_KEIL
165092         "adcs	r2, r2, %[r]\n\t"
165093 #elif defined(__clang__)
165094         "adcs	r2, %[r]\n\t"
165095 #else
165096         "adc	r2, %[r]\n\t"
165097 #endif
165098 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165099         "adds	r3, r3, r6\n\t"
165100 #else
165101         "add	r3, r3, r6\n\t"
165102 #endif
165103 #ifdef WOLFSSL_KEIL
165104         "adcs	r4, r4, %[r]\n\t"
165105 #elif defined(__clang__)
165106         "adcs	r4, %[r]\n\t"
165107 #else
165108         "adc	r4, %[r]\n\t"
165109 #endif
165110 #ifdef WOLFSSL_KEIL
165111         "adcs	r2, r2, %[r]\n\t"
165112 #elif defined(__clang__)
165113         "adcs	r2, %[r]\n\t"
165114 #else
165115         "adc	r2, %[r]\n\t"
165116 #endif
165117 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165118         "lsrs	r6, r7, #16\n\t"
165119 #else
165120         "lsr	r6, r7, #16\n\t"
165121 #endif
165122 #ifdef WOLFSSL_KEIL
165123         "muls	r5, r6, r5\n\t"
165124 #elif defined(__clang__)
165125         "muls	r5, r6\n\t"
165126 #else
165127         "mul	r5, r6\n\t"
165128 #endif
165129 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165130         "lsrs	r6, r5, #16\n\t"
165131 #else
165132         "lsr	r6, r5, #16\n\t"
165133 #endif
165134 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165135         "lsls	r5, r5, #16\n\t"
165136 #else
165137         "lsl	r5, r5, #16\n\t"
165138 #endif
165139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165140         "adds	r3, r3, r5\n\t"
165141 #else
165142         "add	r3, r3, r5\n\t"
165143 #endif
165144 #ifdef WOLFSSL_KEIL
165145         "adcs	r4, r4, r6\n\t"
165146 #elif defined(__clang__)
165147         "adcs	r4, r6\n\t"
165148 #else
165149         "adc	r4, r6\n\t"
165150 #endif
165151 #ifdef WOLFSSL_KEIL
165152         "adcs	r2, r2, %[r]\n\t"
165153 #elif defined(__clang__)
165154         "adcs	r2, %[r]\n\t"
165155 #else
165156         "adc	r2, %[r]\n\t"
165157 #endif
165158 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165159         "adds	r3, r3, r5\n\t"
165160 #else
165161         "add	r3, r3, r5\n\t"
165162 #endif
165163 #ifdef WOLFSSL_KEIL
165164         "adcs	r4, r4, r6\n\t"
165165 #elif defined(__clang__)
165166         "adcs	r4, r6\n\t"
165167 #else
165168         "adc	r4, r6\n\t"
165169 #endif
165170 #ifdef WOLFSSL_KEIL
165171         "adcs	r2, r2, %[r]\n\t"
165172 #elif defined(__clang__)
165173         "adcs	r2, %[r]\n\t"
165174 #else
165175         "adc	r2, %[r]\n\t"
165176 #endif
165177 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165178         "lsrs	r5, %[a], #16\n\t"
165179 #else
165180         "lsr	r5, %[a], #16\n\t"
165181 #endif
165182 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165183         "lsrs	r6, r7, #16\n\t"
165184 #else
165185         "lsr	r6, r7, #16\n\t"
165186 #endif
165187 #ifdef WOLFSSL_KEIL
165188         "muls	r6, r5, r6\n\t"
165189 #elif defined(__clang__)
165190         "muls	r6, r5\n\t"
165191 #else
165192         "mul	r6, r5\n\t"
165193 #endif
165194 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165195         "adds	r4, r4, r6\n\t"
165196 #else
165197         "add	r4, r4, r6\n\t"
165198 #endif
165199 #ifdef WOLFSSL_KEIL
165200         "adcs	r2, r2, %[r]\n\t"
165201 #elif defined(__clang__)
165202         "adcs	r2, %[r]\n\t"
165203 #else
165204         "adc	r2, %[r]\n\t"
165205 #endif
165206 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165207         "adds	r4, r4, r6\n\t"
165208 #else
165209         "add	r4, r4, r6\n\t"
165210 #endif
165211 #ifdef WOLFSSL_KEIL
165212         "adcs	r2, r2, %[r]\n\t"
165213 #elif defined(__clang__)
165214         "adcs	r2, %[r]\n\t"
165215 #else
165216         "adc	r2, %[r]\n\t"
165217 #endif
165218         "uxth	r6, r7\n\t"
165219 #ifdef WOLFSSL_KEIL
165220         "muls	r5, r6, r5\n\t"
165221 #elif defined(__clang__)
165222         "muls	r5, r6\n\t"
165223 #else
165224         "mul	r5, r6\n\t"
165225 #endif
165226 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165227         "lsrs	r6, r5, #16\n\t"
165228 #else
165229         "lsr	r6, r5, #16\n\t"
165230 #endif
165231 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165232         "lsls	r5, r5, #16\n\t"
165233 #else
165234         "lsl	r5, r5, #16\n\t"
165235 #endif
165236 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165237         "adds	r3, r3, r5\n\t"
165238 #else
165239         "add	r3, r3, r5\n\t"
165240 #endif
165241 #ifdef WOLFSSL_KEIL
165242         "adcs	r4, r4, r6\n\t"
165243 #elif defined(__clang__)
165244         "adcs	r4, r6\n\t"
165245 #else
165246         "adc	r4, r6\n\t"
165247 #endif
165248 #ifdef WOLFSSL_KEIL
165249         "adcs	r2, r2, %[r]\n\t"
165250 #elif defined(__clang__)
165251         "adcs	r2, %[r]\n\t"
165252 #else
165253         "adc	r2, %[r]\n\t"
165254 #endif
165255 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165256         "adds	r3, r3, r5\n\t"
165257 #else
165258         "add	r3, r3, r5\n\t"
165259 #endif
165260 #ifdef WOLFSSL_KEIL
165261         "adcs	r4, r4, r6\n\t"
165262 #elif defined(__clang__)
165263         "adcs	r4, r6\n\t"
165264 #else
165265         "adc	r4, r6\n\t"
165266 #endif
165267 #ifdef WOLFSSL_KEIL
165268         "adcs	r2, r2, %[r]\n\t"
165269 #elif defined(__clang__)
165270         "adcs	r2, %[r]\n\t"
165271 #else
165272         "adc	r2, %[r]\n\t"
165273 #endif
165274         "str	r3, [sp, #52]\n\t"
165275         "#  A[14] * A[0]\n\t"
165276         "movs	r3, #0\n\t"
165277         "mov	%[a], r9\n\t"
165278         "ldr	%[a], [%[a], #56]\n\t"
165279         "uxth	r5, %[a]\n\t"
165280         "uxth	r6, r7\n\t"
165281 #ifdef WOLFSSL_KEIL
165282         "muls	r6, r5, r6\n\t"
165283 #elif defined(__clang__)
165284         "muls	r6, r5\n\t"
165285 #else
165286         "mul	r6, r5\n\t"
165287 #endif
165288 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165289         "adds	r4, r4, r6\n\t"
165290 #else
165291         "add	r4, r4, r6\n\t"
165292 #endif
165293 #ifdef WOLFSSL_KEIL
165294         "adcs	r2, r2, %[r]\n\t"
165295 #elif defined(__clang__)
165296         "adcs	r2, %[r]\n\t"
165297 #else
165298         "adc	r2, %[r]\n\t"
165299 #endif
165300 #ifdef WOLFSSL_KEIL
165301         "adcs	r3, r3, %[r]\n\t"
165302 #elif defined(__clang__)
165303         "adcs	r3, %[r]\n\t"
165304 #else
165305         "adc	r3, %[r]\n\t"
165306 #endif
165307 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165308         "adds	r4, r4, r6\n\t"
165309 #else
165310         "add	r4, r4, r6\n\t"
165311 #endif
165312 #ifdef WOLFSSL_KEIL
165313         "adcs	r2, r2, %[r]\n\t"
165314 #elif defined(__clang__)
165315         "adcs	r2, %[r]\n\t"
165316 #else
165317         "adc	r2, %[r]\n\t"
165318 #endif
165319 #ifdef WOLFSSL_KEIL
165320         "adcs	r3, r3, %[r]\n\t"
165321 #elif defined(__clang__)
165322         "adcs	r3, %[r]\n\t"
165323 #else
165324         "adc	r3, %[r]\n\t"
165325 #endif
165326 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165327         "lsrs	r6, r7, #16\n\t"
165328 #else
165329         "lsr	r6, r7, #16\n\t"
165330 #endif
165331 #ifdef WOLFSSL_KEIL
165332         "muls	r5, r6, r5\n\t"
165333 #elif defined(__clang__)
165334         "muls	r5, r6\n\t"
165335 #else
165336         "mul	r5, r6\n\t"
165337 #endif
165338 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165339         "lsrs	r6, r5, #16\n\t"
165340 #else
165341         "lsr	r6, r5, #16\n\t"
165342 #endif
165343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165344         "lsls	r5, r5, #16\n\t"
165345 #else
165346         "lsl	r5, r5, #16\n\t"
165347 #endif
165348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165349         "adds	r4, r4, r5\n\t"
165350 #else
165351         "add	r4, r4, r5\n\t"
165352 #endif
165353 #ifdef WOLFSSL_KEIL
165354         "adcs	r2, r2, r6\n\t"
165355 #elif defined(__clang__)
165356         "adcs	r2, r6\n\t"
165357 #else
165358         "adc	r2, r6\n\t"
165359 #endif
165360 #ifdef WOLFSSL_KEIL
165361         "adcs	r3, r3, %[r]\n\t"
165362 #elif defined(__clang__)
165363         "adcs	r3, %[r]\n\t"
165364 #else
165365         "adc	r3, %[r]\n\t"
165366 #endif
165367 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165368         "adds	r4, r4, r5\n\t"
165369 #else
165370         "add	r4, r4, r5\n\t"
165371 #endif
165372 #ifdef WOLFSSL_KEIL
165373         "adcs	r2, r2, r6\n\t"
165374 #elif defined(__clang__)
165375         "adcs	r2, r6\n\t"
165376 #else
165377         "adc	r2, r6\n\t"
165378 #endif
165379 #ifdef WOLFSSL_KEIL
165380         "adcs	r3, r3, %[r]\n\t"
165381 #elif defined(__clang__)
165382         "adcs	r3, %[r]\n\t"
165383 #else
165384         "adc	r3, %[r]\n\t"
165385 #endif
165386 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165387         "lsrs	r5, %[a], #16\n\t"
165388 #else
165389         "lsr	r5, %[a], #16\n\t"
165390 #endif
165391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165392         "lsrs	r6, r7, #16\n\t"
165393 #else
165394         "lsr	r6, r7, #16\n\t"
165395 #endif
165396 #ifdef WOLFSSL_KEIL
165397         "muls	r6, r5, r6\n\t"
165398 #elif defined(__clang__)
165399         "muls	r6, r5\n\t"
165400 #else
165401         "mul	r6, r5\n\t"
165402 #endif
165403 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165404         "adds	r2, r2, r6\n\t"
165405 #else
165406         "add	r2, r2, r6\n\t"
165407 #endif
165408 #ifdef WOLFSSL_KEIL
165409         "adcs	r3, r3, %[r]\n\t"
165410 #elif defined(__clang__)
165411         "adcs	r3, %[r]\n\t"
165412 #else
165413         "adc	r3, %[r]\n\t"
165414 #endif
165415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165416         "adds	r2, r2, r6\n\t"
165417 #else
165418         "add	r2, r2, r6\n\t"
165419 #endif
165420 #ifdef WOLFSSL_KEIL
165421         "adcs	r3, r3, %[r]\n\t"
165422 #elif defined(__clang__)
165423         "adcs	r3, %[r]\n\t"
165424 #else
165425         "adc	r3, %[r]\n\t"
165426 #endif
165427         "uxth	r6, r7\n\t"
165428 #ifdef WOLFSSL_KEIL
165429         "muls	r5, r6, r5\n\t"
165430 #elif defined(__clang__)
165431         "muls	r5, r6\n\t"
165432 #else
165433         "mul	r5, r6\n\t"
165434 #endif
165435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165436         "lsrs	r6, r5, #16\n\t"
165437 #else
165438         "lsr	r6, r5, #16\n\t"
165439 #endif
165440 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165441         "lsls	r5, r5, #16\n\t"
165442 #else
165443         "lsl	r5, r5, #16\n\t"
165444 #endif
165445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165446         "adds	r4, r4, r5\n\t"
165447 #else
165448         "add	r4, r4, r5\n\t"
165449 #endif
165450 #ifdef WOLFSSL_KEIL
165451         "adcs	r2, r2, r6\n\t"
165452 #elif defined(__clang__)
165453         "adcs	r2, r6\n\t"
165454 #else
165455         "adc	r2, r6\n\t"
165456 #endif
165457 #ifdef WOLFSSL_KEIL
165458         "adcs	r3, r3, %[r]\n\t"
165459 #elif defined(__clang__)
165460         "adcs	r3, %[r]\n\t"
165461 #else
165462         "adc	r3, %[r]\n\t"
165463 #endif
165464 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165465         "adds	r4, r4, r5\n\t"
165466 #else
165467         "add	r4, r4, r5\n\t"
165468 #endif
165469 #ifdef WOLFSSL_KEIL
165470         "adcs	r2, r2, r6\n\t"
165471 #elif defined(__clang__)
165472         "adcs	r2, r6\n\t"
165473 #else
165474         "adc	r2, r6\n\t"
165475 #endif
165476 #ifdef WOLFSSL_KEIL
165477         "adcs	r3, r3, %[r]\n\t"
165478 #elif defined(__clang__)
165479         "adcs	r3, %[r]\n\t"
165480 #else
165481         "adc	r3, %[r]\n\t"
165482 #endif
165483         "#  A[13] * A[1]\n\t"
165484         "mov	%[a], r9\n\t"
165485         "mov	r7, r11\n\t"
165486         "ldr	%[a], [%[a], #52]\n\t"
165487         "uxth	r5, %[a]\n\t"
165488         "uxth	r6, r7\n\t"
165489 #ifdef WOLFSSL_KEIL
165490         "muls	r6, r5, r6\n\t"
165491 #elif defined(__clang__)
165492         "muls	r6, r5\n\t"
165493 #else
165494         "mul	r6, r5\n\t"
165495 #endif
165496 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165497         "adds	r4, r4, r6\n\t"
165498 #else
165499         "add	r4, r4, r6\n\t"
165500 #endif
165501 #ifdef WOLFSSL_KEIL
165502         "adcs	r2, r2, %[r]\n\t"
165503 #elif defined(__clang__)
165504         "adcs	r2, %[r]\n\t"
165505 #else
165506         "adc	r2, %[r]\n\t"
165507 #endif
165508 #ifdef WOLFSSL_KEIL
165509         "adcs	r3, r3, %[r]\n\t"
165510 #elif defined(__clang__)
165511         "adcs	r3, %[r]\n\t"
165512 #else
165513         "adc	r3, %[r]\n\t"
165514 #endif
165515 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165516         "adds	r4, r4, r6\n\t"
165517 #else
165518         "add	r4, r4, r6\n\t"
165519 #endif
165520 #ifdef WOLFSSL_KEIL
165521         "adcs	r2, r2, %[r]\n\t"
165522 #elif defined(__clang__)
165523         "adcs	r2, %[r]\n\t"
165524 #else
165525         "adc	r2, %[r]\n\t"
165526 #endif
165527 #ifdef WOLFSSL_KEIL
165528         "adcs	r3, r3, %[r]\n\t"
165529 #elif defined(__clang__)
165530         "adcs	r3, %[r]\n\t"
165531 #else
165532         "adc	r3, %[r]\n\t"
165533 #endif
165534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165535         "lsrs	r6, r7, #16\n\t"
165536 #else
165537         "lsr	r6, r7, #16\n\t"
165538 #endif
165539 #ifdef WOLFSSL_KEIL
165540         "muls	r5, r6, r5\n\t"
165541 #elif defined(__clang__)
165542         "muls	r5, r6\n\t"
165543 #else
165544         "mul	r5, r6\n\t"
165545 #endif
165546 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165547         "lsrs	r6, r5, #16\n\t"
165548 #else
165549         "lsr	r6, r5, #16\n\t"
165550 #endif
165551 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165552         "lsls	r5, r5, #16\n\t"
165553 #else
165554         "lsl	r5, r5, #16\n\t"
165555 #endif
165556 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165557         "adds	r4, r4, r5\n\t"
165558 #else
165559         "add	r4, r4, r5\n\t"
165560 #endif
165561 #ifdef WOLFSSL_KEIL
165562         "adcs	r2, r2, r6\n\t"
165563 #elif defined(__clang__)
165564         "adcs	r2, r6\n\t"
165565 #else
165566         "adc	r2, r6\n\t"
165567 #endif
165568 #ifdef WOLFSSL_KEIL
165569         "adcs	r3, r3, %[r]\n\t"
165570 #elif defined(__clang__)
165571         "adcs	r3, %[r]\n\t"
165572 #else
165573         "adc	r3, %[r]\n\t"
165574 #endif
165575 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165576         "adds	r4, r4, r5\n\t"
165577 #else
165578         "add	r4, r4, r5\n\t"
165579 #endif
165580 #ifdef WOLFSSL_KEIL
165581         "adcs	r2, r2, r6\n\t"
165582 #elif defined(__clang__)
165583         "adcs	r2, r6\n\t"
165584 #else
165585         "adc	r2, r6\n\t"
165586 #endif
165587 #ifdef WOLFSSL_KEIL
165588         "adcs	r3, r3, %[r]\n\t"
165589 #elif defined(__clang__)
165590         "adcs	r3, %[r]\n\t"
165591 #else
165592         "adc	r3, %[r]\n\t"
165593 #endif
165594 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165595         "lsrs	r5, %[a], #16\n\t"
165596 #else
165597         "lsr	r5, %[a], #16\n\t"
165598 #endif
165599 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165600         "lsrs	r6, r7, #16\n\t"
165601 #else
165602         "lsr	r6, r7, #16\n\t"
165603 #endif
165604 #ifdef WOLFSSL_KEIL
165605         "muls	r6, r5, r6\n\t"
165606 #elif defined(__clang__)
165607         "muls	r6, r5\n\t"
165608 #else
165609         "mul	r6, r5\n\t"
165610 #endif
165611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165612         "adds	r2, r2, r6\n\t"
165613 #else
165614         "add	r2, r2, r6\n\t"
165615 #endif
165616 #ifdef WOLFSSL_KEIL
165617         "adcs	r3, r3, %[r]\n\t"
165618 #elif defined(__clang__)
165619         "adcs	r3, %[r]\n\t"
165620 #else
165621         "adc	r3, %[r]\n\t"
165622 #endif
165623 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165624         "adds	r2, r2, r6\n\t"
165625 #else
165626         "add	r2, r2, r6\n\t"
165627 #endif
165628 #ifdef WOLFSSL_KEIL
165629         "adcs	r3, r3, %[r]\n\t"
165630 #elif defined(__clang__)
165631         "adcs	r3, %[r]\n\t"
165632 #else
165633         "adc	r3, %[r]\n\t"
165634 #endif
165635         "uxth	r6, r7\n\t"
165636 #ifdef WOLFSSL_KEIL
165637         "muls	r5, r6, r5\n\t"
165638 #elif defined(__clang__)
165639         "muls	r5, r6\n\t"
165640 #else
165641         "mul	r5, r6\n\t"
165642 #endif
165643 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165644         "lsrs	r6, r5, #16\n\t"
165645 #else
165646         "lsr	r6, r5, #16\n\t"
165647 #endif
165648 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165649         "lsls	r5, r5, #16\n\t"
165650 #else
165651         "lsl	r5, r5, #16\n\t"
165652 #endif
165653 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165654         "adds	r4, r4, r5\n\t"
165655 #else
165656         "add	r4, r4, r5\n\t"
165657 #endif
165658 #ifdef WOLFSSL_KEIL
165659         "adcs	r2, r2, r6\n\t"
165660 #elif defined(__clang__)
165661         "adcs	r2, r6\n\t"
165662 #else
165663         "adc	r2, r6\n\t"
165664 #endif
165665 #ifdef WOLFSSL_KEIL
165666         "adcs	r3, r3, %[r]\n\t"
165667 #elif defined(__clang__)
165668         "adcs	r3, %[r]\n\t"
165669 #else
165670         "adc	r3, %[r]\n\t"
165671 #endif
165672 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165673         "adds	r4, r4, r5\n\t"
165674 #else
165675         "add	r4, r4, r5\n\t"
165676 #endif
165677 #ifdef WOLFSSL_KEIL
165678         "adcs	r2, r2, r6\n\t"
165679 #elif defined(__clang__)
165680         "adcs	r2, r6\n\t"
165681 #else
165682         "adc	r2, r6\n\t"
165683 #endif
165684 #ifdef WOLFSSL_KEIL
165685         "adcs	r3, r3, %[r]\n\t"
165686 #elif defined(__clang__)
165687         "adcs	r3, %[r]\n\t"
165688 #else
165689         "adc	r3, %[r]\n\t"
165690 #endif
165691         "#  A[12] * A[2]\n\t"
165692         "mov	%[a], r9\n\t"
165693         "mov	r7, r12\n\t"
165694         "ldr	%[a], [%[a], #48]\n\t"
165695         "uxth	r5, %[a]\n\t"
165696         "uxth	r6, r7\n\t"
165697 #ifdef WOLFSSL_KEIL
165698         "muls	r6, r5, r6\n\t"
165699 #elif defined(__clang__)
165700         "muls	r6, r5\n\t"
165701 #else
165702         "mul	r6, r5\n\t"
165703 #endif
165704 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165705         "adds	r4, r4, r6\n\t"
165706 #else
165707         "add	r4, r4, r6\n\t"
165708 #endif
165709 #ifdef WOLFSSL_KEIL
165710         "adcs	r2, r2, %[r]\n\t"
165711 #elif defined(__clang__)
165712         "adcs	r2, %[r]\n\t"
165713 #else
165714         "adc	r2, %[r]\n\t"
165715 #endif
165716 #ifdef WOLFSSL_KEIL
165717         "adcs	r3, r3, %[r]\n\t"
165718 #elif defined(__clang__)
165719         "adcs	r3, %[r]\n\t"
165720 #else
165721         "adc	r3, %[r]\n\t"
165722 #endif
165723 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165724         "adds	r4, r4, r6\n\t"
165725 #else
165726         "add	r4, r4, r6\n\t"
165727 #endif
165728 #ifdef WOLFSSL_KEIL
165729         "adcs	r2, r2, %[r]\n\t"
165730 #elif defined(__clang__)
165731         "adcs	r2, %[r]\n\t"
165732 #else
165733         "adc	r2, %[r]\n\t"
165734 #endif
165735 #ifdef WOLFSSL_KEIL
165736         "adcs	r3, r3, %[r]\n\t"
165737 #elif defined(__clang__)
165738         "adcs	r3, %[r]\n\t"
165739 #else
165740         "adc	r3, %[r]\n\t"
165741 #endif
165742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165743         "lsrs	r6, r7, #16\n\t"
165744 #else
165745         "lsr	r6, r7, #16\n\t"
165746 #endif
165747 #ifdef WOLFSSL_KEIL
165748         "muls	r5, r6, r5\n\t"
165749 #elif defined(__clang__)
165750         "muls	r5, r6\n\t"
165751 #else
165752         "mul	r5, r6\n\t"
165753 #endif
165754 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165755         "lsrs	r6, r5, #16\n\t"
165756 #else
165757         "lsr	r6, r5, #16\n\t"
165758 #endif
165759 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165760         "lsls	r5, r5, #16\n\t"
165761 #else
165762         "lsl	r5, r5, #16\n\t"
165763 #endif
165764 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165765         "adds	r4, r4, r5\n\t"
165766 #else
165767         "add	r4, r4, r5\n\t"
165768 #endif
165769 #ifdef WOLFSSL_KEIL
165770         "adcs	r2, r2, r6\n\t"
165771 #elif defined(__clang__)
165772         "adcs	r2, r6\n\t"
165773 #else
165774         "adc	r2, r6\n\t"
165775 #endif
165776 #ifdef WOLFSSL_KEIL
165777         "adcs	r3, r3, %[r]\n\t"
165778 #elif defined(__clang__)
165779         "adcs	r3, %[r]\n\t"
165780 #else
165781         "adc	r3, %[r]\n\t"
165782 #endif
165783 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165784         "adds	r4, r4, r5\n\t"
165785 #else
165786         "add	r4, r4, r5\n\t"
165787 #endif
165788 #ifdef WOLFSSL_KEIL
165789         "adcs	r2, r2, r6\n\t"
165790 #elif defined(__clang__)
165791         "adcs	r2, r6\n\t"
165792 #else
165793         "adc	r2, r6\n\t"
165794 #endif
165795 #ifdef WOLFSSL_KEIL
165796         "adcs	r3, r3, %[r]\n\t"
165797 #elif defined(__clang__)
165798         "adcs	r3, %[r]\n\t"
165799 #else
165800         "adc	r3, %[r]\n\t"
165801 #endif
165802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165803         "lsrs	r5, %[a], #16\n\t"
165804 #else
165805         "lsr	r5, %[a], #16\n\t"
165806 #endif
165807 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165808         "lsrs	r6, r7, #16\n\t"
165809 #else
165810         "lsr	r6, r7, #16\n\t"
165811 #endif
165812 #ifdef WOLFSSL_KEIL
165813         "muls	r6, r5, r6\n\t"
165814 #elif defined(__clang__)
165815         "muls	r6, r5\n\t"
165816 #else
165817         "mul	r6, r5\n\t"
165818 #endif
165819 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165820         "adds	r2, r2, r6\n\t"
165821 #else
165822         "add	r2, r2, r6\n\t"
165823 #endif
165824 #ifdef WOLFSSL_KEIL
165825         "adcs	r3, r3, %[r]\n\t"
165826 #elif defined(__clang__)
165827         "adcs	r3, %[r]\n\t"
165828 #else
165829         "adc	r3, %[r]\n\t"
165830 #endif
165831 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165832         "adds	r2, r2, r6\n\t"
165833 #else
165834         "add	r2, r2, r6\n\t"
165835 #endif
165836 #ifdef WOLFSSL_KEIL
165837         "adcs	r3, r3, %[r]\n\t"
165838 #elif defined(__clang__)
165839         "adcs	r3, %[r]\n\t"
165840 #else
165841         "adc	r3, %[r]\n\t"
165842 #endif
165843         "uxth	r6, r7\n\t"
165844 #ifdef WOLFSSL_KEIL
165845         "muls	r5, r6, r5\n\t"
165846 #elif defined(__clang__)
165847         "muls	r5, r6\n\t"
165848 #else
165849         "mul	r5, r6\n\t"
165850 #endif
165851 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165852         "lsrs	r6, r5, #16\n\t"
165853 #else
165854         "lsr	r6, r5, #16\n\t"
165855 #endif
165856 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165857         "lsls	r5, r5, #16\n\t"
165858 #else
165859         "lsl	r5, r5, #16\n\t"
165860 #endif
165861 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165862         "adds	r4, r4, r5\n\t"
165863 #else
165864         "add	r4, r4, r5\n\t"
165865 #endif
165866 #ifdef WOLFSSL_KEIL
165867         "adcs	r2, r2, r6\n\t"
165868 #elif defined(__clang__)
165869         "adcs	r2, r6\n\t"
165870 #else
165871         "adc	r2, r6\n\t"
165872 #endif
165873 #ifdef WOLFSSL_KEIL
165874         "adcs	r3, r3, %[r]\n\t"
165875 #elif defined(__clang__)
165876         "adcs	r3, %[r]\n\t"
165877 #else
165878         "adc	r3, %[r]\n\t"
165879 #endif
165880 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165881         "adds	r4, r4, r5\n\t"
165882 #else
165883         "add	r4, r4, r5\n\t"
165884 #endif
165885 #ifdef WOLFSSL_KEIL
165886         "adcs	r2, r2, r6\n\t"
165887 #elif defined(__clang__)
165888         "adcs	r2, r6\n\t"
165889 #else
165890         "adc	r2, r6\n\t"
165891 #endif
165892 #ifdef WOLFSSL_KEIL
165893         "adcs	r3, r3, %[r]\n\t"
165894 #elif defined(__clang__)
165895         "adcs	r3, %[r]\n\t"
165896 #else
165897         "adc	r3, %[r]\n\t"
165898 #endif
165899         "#  A[11] * A[3]\n\t"
165900         "mov	%[a], r9\n\t"
165901         "mov	r7, lr\n\t"
165902         "ldr	%[a], [%[a], #44]\n\t"
165903         "uxth	r5, %[a]\n\t"
165904         "uxth	r6, r7\n\t"
165905 #ifdef WOLFSSL_KEIL
165906         "muls	r6, r5, r6\n\t"
165907 #elif defined(__clang__)
165908         "muls	r6, r5\n\t"
165909 #else
165910         "mul	r6, r5\n\t"
165911 #endif
165912 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165913         "adds	r4, r4, r6\n\t"
165914 #else
165915         "add	r4, r4, r6\n\t"
165916 #endif
165917 #ifdef WOLFSSL_KEIL
165918         "adcs	r2, r2, %[r]\n\t"
165919 #elif defined(__clang__)
165920         "adcs	r2, %[r]\n\t"
165921 #else
165922         "adc	r2, %[r]\n\t"
165923 #endif
165924 #ifdef WOLFSSL_KEIL
165925         "adcs	r3, r3, %[r]\n\t"
165926 #elif defined(__clang__)
165927         "adcs	r3, %[r]\n\t"
165928 #else
165929         "adc	r3, %[r]\n\t"
165930 #endif
165931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165932         "adds	r4, r4, r6\n\t"
165933 #else
165934         "add	r4, r4, r6\n\t"
165935 #endif
165936 #ifdef WOLFSSL_KEIL
165937         "adcs	r2, r2, %[r]\n\t"
165938 #elif defined(__clang__)
165939         "adcs	r2, %[r]\n\t"
165940 #else
165941         "adc	r2, %[r]\n\t"
165942 #endif
165943 #ifdef WOLFSSL_KEIL
165944         "adcs	r3, r3, %[r]\n\t"
165945 #elif defined(__clang__)
165946         "adcs	r3, %[r]\n\t"
165947 #else
165948         "adc	r3, %[r]\n\t"
165949 #endif
165950 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165951         "lsrs	r6, r7, #16\n\t"
165952 #else
165953         "lsr	r6, r7, #16\n\t"
165954 #endif
165955 #ifdef WOLFSSL_KEIL
165956         "muls	r5, r6, r5\n\t"
165957 #elif defined(__clang__)
165958         "muls	r5, r6\n\t"
165959 #else
165960         "mul	r5, r6\n\t"
165961 #endif
165962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165963         "lsrs	r6, r5, #16\n\t"
165964 #else
165965         "lsr	r6, r5, #16\n\t"
165966 #endif
165967 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165968         "lsls	r5, r5, #16\n\t"
165969 #else
165970         "lsl	r5, r5, #16\n\t"
165971 #endif
165972 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165973         "adds	r4, r4, r5\n\t"
165974 #else
165975         "add	r4, r4, r5\n\t"
165976 #endif
165977 #ifdef WOLFSSL_KEIL
165978         "adcs	r2, r2, r6\n\t"
165979 #elif defined(__clang__)
165980         "adcs	r2, r6\n\t"
165981 #else
165982         "adc	r2, r6\n\t"
165983 #endif
165984 #ifdef WOLFSSL_KEIL
165985         "adcs	r3, r3, %[r]\n\t"
165986 #elif defined(__clang__)
165987         "adcs	r3, %[r]\n\t"
165988 #else
165989         "adc	r3, %[r]\n\t"
165990 #endif
165991 #if defined(__clang__) || defined(WOLFSSL_KEIL)
165992         "adds	r4, r4, r5\n\t"
165993 #else
165994         "add	r4, r4, r5\n\t"
165995 #endif
165996 #ifdef WOLFSSL_KEIL
165997         "adcs	r2, r2, r6\n\t"
165998 #elif defined(__clang__)
165999         "adcs	r2, r6\n\t"
166000 #else
166001         "adc	r2, r6\n\t"
166002 #endif
166003 #ifdef WOLFSSL_KEIL
166004         "adcs	r3, r3, %[r]\n\t"
166005 #elif defined(__clang__)
166006         "adcs	r3, %[r]\n\t"
166007 #else
166008         "adc	r3, %[r]\n\t"
166009 #endif
166010 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166011         "lsrs	r5, %[a], #16\n\t"
166012 #else
166013         "lsr	r5, %[a], #16\n\t"
166014 #endif
166015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166016         "lsrs	r6, r7, #16\n\t"
166017 #else
166018         "lsr	r6, r7, #16\n\t"
166019 #endif
166020 #ifdef WOLFSSL_KEIL
166021         "muls	r6, r5, r6\n\t"
166022 #elif defined(__clang__)
166023         "muls	r6, r5\n\t"
166024 #else
166025         "mul	r6, r5\n\t"
166026 #endif
166027 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166028         "adds	r2, r2, r6\n\t"
166029 #else
166030         "add	r2, r2, r6\n\t"
166031 #endif
166032 #ifdef WOLFSSL_KEIL
166033         "adcs	r3, r3, %[r]\n\t"
166034 #elif defined(__clang__)
166035         "adcs	r3, %[r]\n\t"
166036 #else
166037         "adc	r3, %[r]\n\t"
166038 #endif
166039 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166040         "adds	r2, r2, r6\n\t"
166041 #else
166042         "add	r2, r2, r6\n\t"
166043 #endif
166044 #ifdef WOLFSSL_KEIL
166045         "adcs	r3, r3, %[r]\n\t"
166046 #elif defined(__clang__)
166047         "adcs	r3, %[r]\n\t"
166048 #else
166049         "adc	r3, %[r]\n\t"
166050 #endif
166051         "uxth	r6, r7\n\t"
166052 #ifdef WOLFSSL_KEIL
166053         "muls	r5, r6, r5\n\t"
166054 #elif defined(__clang__)
166055         "muls	r5, r6\n\t"
166056 #else
166057         "mul	r5, r6\n\t"
166058 #endif
166059 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166060         "lsrs	r6, r5, #16\n\t"
166061 #else
166062         "lsr	r6, r5, #16\n\t"
166063 #endif
166064 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166065         "lsls	r5, r5, #16\n\t"
166066 #else
166067         "lsl	r5, r5, #16\n\t"
166068 #endif
166069 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166070         "adds	r4, r4, r5\n\t"
166071 #else
166072         "add	r4, r4, r5\n\t"
166073 #endif
166074 #ifdef WOLFSSL_KEIL
166075         "adcs	r2, r2, r6\n\t"
166076 #elif defined(__clang__)
166077         "adcs	r2, r6\n\t"
166078 #else
166079         "adc	r2, r6\n\t"
166080 #endif
166081 #ifdef WOLFSSL_KEIL
166082         "adcs	r3, r3, %[r]\n\t"
166083 #elif defined(__clang__)
166084         "adcs	r3, %[r]\n\t"
166085 #else
166086         "adc	r3, %[r]\n\t"
166087 #endif
166088 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166089         "adds	r4, r4, r5\n\t"
166090 #else
166091         "add	r4, r4, r5\n\t"
166092 #endif
166093 #ifdef WOLFSSL_KEIL
166094         "adcs	r2, r2, r6\n\t"
166095 #elif defined(__clang__)
166096         "adcs	r2, r6\n\t"
166097 #else
166098         "adc	r2, r6\n\t"
166099 #endif
166100 #ifdef WOLFSSL_KEIL
166101         "adcs	r3, r3, %[r]\n\t"
166102 #elif defined(__clang__)
166103         "adcs	r3, %[r]\n\t"
166104 #else
166105         "adc	r3, %[r]\n\t"
166106 #endif
166107         "#  A[10] * A[4]\n\t"
166108         "mov	%[a], r9\n\t"
166109         "ldr	r7, [%[a], #16]\n\t"
166110         "ldr	%[a], [%[a], #40]\n\t"
166111         "uxth	r5, %[a]\n\t"
166112         "uxth	r6, r7\n\t"
166113 #ifdef WOLFSSL_KEIL
166114         "muls	r6, r5, r6\n\t"
166115 #elif defined(__clang__)
166116         "muls	r6, r5\n\t"
166117 #else
166118         "mul	r6, r5\n\t"
166119 #endif
166120 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166121         "adds	r4, r4, r6\n\t"
166122 #else
166123         "add	r4, r4, r6\n\t"
166124 #endif
166125 #ifdef WOLFSSL_KEIL
166126         "adcs	r2, r2, %[r]\n\t"
166127 #elif defined(__clang__)
166128         "adcs	r2, %[r]\n\t"
166129 #else
166130         "adc	r2, %[r]\n\t"
166131 #endif
166132 #ifdef WOLFSSL_KEIL
166133         "adcs	r3, r3, %[r]\n\t"
166134 #elif defined(__clang__)
166135         "adcs	r3, %[r]\n\t"
166136 #else
166137         "adc	r3, %[r]\n\t"
166138 #endif
166139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166140         "adds	r4, r4, r6\n\t"
166141 #else
166142         "add	r4, r4, r6\n\t"
166143 #endif
166144 #ifdef WOLFSSL_KEIL
166145         "adcs	r2, r2, %[r]\n\t"
166146 #elif defined(__clang__)
166147         "adcs	r2, %[r]\n\t"
166148 #else
166149         "adc	r2, %[r]\n\t"
166150 #endif
166151 #ifdef WOLFSSL_KEIL
166152         "adcs	r3, r3, %[r]\n\t"
166153 #elif defined(__clang__)
166154         "adcs	r3, %[r]\n\t"
166155 #else
166156         "adc	r3, %[r]\n\t"
166157 #endif
166158 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166159         "lsrs	r6, r7, #16\n\t"
166160 #else
166161         "lsr	r6, r7, #16\n\t"
166162 #endif
166163 #ifdef WOLFSSL_KEIL
166164         "muls	r5, r6, r5\n\t"
166165 #elif defined(__clang__)
166166         "muls	r5, r6\n\t"
166167 #else
166168         "mul	r5, r6\n\t"
166169 #endif
166170 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166171         "lsrs	r6, r5, #16\n\t"
166172 #else
166173         "lsr	r6, r5, #16\n\t"
166174 #endif
166175 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166176         "lsls	r5, r5, #16\n\t"
166177 #else
166178         "lsl	r5, r5, #16\n\t"
166179 #endif
166180 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166181         "adds	r4, r4, r5\n\t"
166182 #else
166183         "add	r4, r4, r5\n\t"
166184 #endif
166185 #ifdef WOLFSSL_KEIL
166186         "adcs	r2, r2, r6\n\t"
166187 #elif defined(__clang__)
166188         "adcs	r2, r6\n\t"
166189 #else
166190         "adc	r2, r6\n\t"
166191 #endif
166192 #ifdef WOLFSSL_KEIL
166193         "adcs	r3, r3, %[r]\n\t"
166194 #elif defined(__clang__)
166195         "adcs	r3, %[r]\n\t"
166196 #else
166197         "adc	r3, %[r]\n\t"
166198 #endif
166199 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166200         "adds	r4, r4, r5\n\t"
166201 #else
166202         "add	r4, r4, r5\n\t"
166203 #endif
166204 #ifdef WOLFSSL_KEIL
166205         "adcs	r2, r2, r6\n\t"
166206 #elif defined(__clang__)
166207         "adcs	r2, r6\n\t"
166208 #else
166209         "adc	r2, r6\n\t"
166210 #endif
166211 #ifdef WOLFSSL_KEIL
166212         "adcs	r3, r3, %[r]\n\t"
166213 #elif defined(__clang__)
166214         "adcs	r3, %[r]\n\t"
166215 #else
166216         "adc	r3, %[r]\n\t"
166217 #endif
166218 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166219         "lsrs	r5, %[a], #16\n\t"
166220 #else
166221         "lsr	r5, %[a], #16\n\t"
166222 #endif
166223 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166224         "lsrs	r6, r7, #16\n\t"
166225 #else
166226         "lsr	r6, r7, #16\n\t"
166227 #endif
166228 #ifdef WOLFSSL_KEIL
166229         "muls	r6, r5, r6\n\t"
166230 #elif defined(__clang__)
166231         "muls	r6, r5\n\t"
166232 #else
166233         "mul	r6, r5\n\t"
166234 #endif
166235 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166236         "adds	r2, r2, r6\n\t"
166237 #else
166238         "add	r2, r2, r6\n\t"
166239 #endif
166240 #ifdef WOLFSSL_KEIL
166241         "adcs	r3, r3, %[r]\n\t"
166242 #elif defined(__clang__)
166243         "adcs	r3, %[r]\n\t"
166244 #else
166245         "adc	r3, %[r]\n\t"
166246 #endif
166247 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166248         "adds	r2, r2, r6\n\t"
166249 #else
166250         "add	r2, r2, r6\n\t"
166251 #endif
166252 #ifdef WOLFSSL_KEIL
166253         "adcs	r3, r3, %[r]\n\t"
166254 #elif defined(__clang__)
166255         "adcs	r3, %[r]\n\t"
166256 #else
166257         "adc	r3, %[r]\n\t"
166258 #endif
166259         "uxth	r6, r7\n\t"
166260 #ifdef WOLFSSL_KEIL
166261         "muls	r5, r6, r5\n\t"
166262 #elif defined(__clang__)
166263         "muls	r5, r6\n\t"
166264 #else
166265         "mul	r5, r6\n\t"
166266 #endif
166267 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166268         "lsrs	r6, r5, #16\n\t"
166269 #else
166270         "lsr	r6, r5, #16\n\t"
166271 #endif
166272 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166273         "lsls	r5, r5, #16\n\t"
166274 #else
166275         "lsl	r5, r5, #16\n\t"
166276 #endif
166277 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166278         "adds	r4, r4, r5\n\t"
166279 #else
166280         "add	r4, r4, r5\n\t"
166281 #endif
166282 #ifdef WOLFSSL_KEIL
166283         "adcs	r2, r2, r6\n\t"
166284 #elif defined(__clang__)
166285         "adcs	r2, r6\n\t"
166286 #else
166287         "adc	r2, r6\n\t"
166288 #endif
166289 #ifdef WOLFSSL_KEIL
166290         "adcs	r3, r3, %[r]\n\t"
166291 #elif defined(__clang__)
166292         "adcs	r3, %[r]\n\t"
166293 #else
166294         "adc	r3, %[r]\n\t"
166295 #endif
166296 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166297         "adds	r4, r4, r5\n\t"
166298 #else
166299         "add	r4, r4, r5\n\t"
166300 #endif
166301 #ifdef WOLFSSL_KEIL
166302         "adcs	r2, r2, r6\n\t"
166303 #elif defined(__clang__)
166304         "adcs	r2, r6\n\t"
166305 #else
166306         "adc	r2, r6\n\t"
166307 #endif
166308 #ifdef WOLFSSL_KEIL
166309         "adcs	r3, r3, %[r]\n\t"
166310 #elif defined(__clang__)
166311         "adcs	r3, %[r]\n\t"
166312 #else
166313         "adc	r3, %[r]\n\t"
166314 #endif
166315         "#  A[9] * A[5]\n\t"
166316         "mov	%[a], r9\n\t"
166317         "ldr	r7, [%[a], #20]\n\t"
166318         "ldr	%[a], [%[a], #36]\n\t"
166319         "uxth	r5, %[a]\n\t"
166320         "uxth	r6, r7\n\t"
166321 #ifdef WOLFSSL_KEIL
166322         "muls	r6, r5, r6\n\t"
166323 #elif defined(__clang__)
166324         "muls	r6, r5\n\t"
166325 #else
166326         "mul	r6, r5\n\t"
166327 #endif
166328 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166329         "adds	r4, r4, r6\n\t"
166330 #else
166331         "add	r4, r4, r6\n\t"
166332 #endif
166333 #ifdef WOLFSSL_KEIL
166334         "adcs	r2, r2, %[r]\n\t"
166335 #elif defined(__clang__)
166336         "adcs	r2, %[r]\n\t"
166337 #else
166338         "adc	r2, %[r]\n\t"
166339 #endif
166340 #ifdef WOLFSSL_KEIL
166341         "adcs	r3, r3, %[r]\n\t"
166342 #elif defined(__clang__)
166343         "adcs	r3, %[r]\n\t"
166344 #else
166345         "adc	r3, %[r]\n\t"
166346 #endif
166347 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166348         "adds	r4, r4, r6\n\t"
166349 #else
166350         "add	r4, r4, r6\n\t"
166351 #endif
166352 #ifdef WOLFSSL_KEIL
166353         "adcs	r2, r2, %[r]\n\t"
166354 #elif defined(__clang__)
166355         "adcs	r2, %[r]\n\t"
166356 #else
166357         "adc	r2, %[r]\n\t"
166358 #endif
166359 #ifdef WOLFSSL_KEIL
166360         "adcs	r3, r3, %[r]\n\t"
166361 #elif defined(__clang__)
166362         "adcs	r3, %[r]\n\t"
166363 #else
166364         "adc	r3, %[r]\n\t"
166365 #endif
166366 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166367         "lsrs	r6, r7, #16\n\t"
166368 #else
166369         "lsr	r6, r7, #16\n\t"
166370 #endif
166371 #ifdef WOLFSSL_KEIL
166372         "muls	r5, r6, r5\n\t"
166373 #elif defined(__clang__)
166374         "muls	r5, r6\n\t"
166375 #else
166376         "mul	r5, r6\n\t"
166377 #endif
166378 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166379         "lsrs	r6, r5, #16\n\t"
166380 #else
166381         "lsr	r6, r5, #16\n\t"
166382 #endif
166383 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166384         "lsls	r5, r5, #16\n\t"
166385 #else
166386         "lsl	r5, r5, #16\n\t"
166387 #endif
166388 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166389         "adds	r4, r4, r5\n\t"
166390 #else
166391         "add	r4, r4, r5\n\t"
166392 #endif
166393 #ifdef WOLFSSL_KEIL
166394         "adcs	r2, r2, r6\n\t"
166395 #elif defined(__clang__)
166396         "adcs	r2, r6\n\t"
166397 #else
166398         "adc	r2, r6\n\t"
166399 #endif
166400 #ifdef WOLFSSL_KEIL
166401         "adcs	r3, r3, %[r]\n\t"
166402 #elif defined(__clang__)
166403         "adcs	r3, %[r]\n\t"
166404 #else
166405         "adc	r3, %[r]\n\t"
166406 #endif
166407 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166408         "adds	r4, r4, r5\n\t"
166409 #else
166410         "add	r4, r4, r5\n\t"
166411 #endif
166412 #ifdef WOLFSSL_KEIL
166413         "adcs	r2, r2, r6\n\t"
166414 #elif defined(__clang__)
166415         "adcs	r2, r6\n\t"
166416 #else
166417         "adc	r2, r6\n\t"
166418 #endif
166419 #ifdef WOLFSSL_KEIL
166420         "adcs	r3, r3, %[r]\n\t"
166421 #elif defined(__clang__)
166422         "adcs	r3, %[r]\n\t"
166423 #else
166424         "adc	r3, %[r]\n\t"
166425 #endif
166426 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166427         "lsrs	r5, %[a], #16\n\t"
166428 #else
166429         "lsr	r5, %[a], #16\n\t"
166430 #endif
166431 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166432         "lsrs	r6, r7, #16\n\t"
166433 #else
166434         "lsr	r6, r7, #16\n\t"
166435 #endif
166436 #ifdef WOLFSSL_KEIL
166437         "muls	r6, r5, r6\n\t"
166438 #elif defined(__clang__)
166439         "muls	r6, r5\n\t"
166440 #else
166441         "mul	r6, r5\n\t"
166442 #endif
166443 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166444         "adds	r2, r2, r6\n\t"
166445 #else
166446         "add	r2, r2, r6\n\t"
166447 #endif
166448 #ifdef WOLFSSL_KEIL
166449         "adcs	r3, r3, %[r]\n\t"
166450 #elif defined(__clang__)
166451         "adcs	r3, %[r]\n\t"
166452 #else
166453         "adc	r3, %[r]\n\t"
166454 #endif
166455 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166456         "adds	r2, r2, r6\n\t"
166457 #else
166458         "add	r2, r2, r6\n\t"
166459 #endif
166460 #ifdef WOLFSSL_KEIL
166461         "adcs	r3, r3, %[r]\n\t"
166462 #elif defined(__clang__)
166463         "adcs	r3, %[r]\n\t"
166464 #else
166465         "adc	r3, %[r]\n\t"
166466 #endif
166467         "uxth	r6, r7\n\t"
166468 #ifdef WOLFSSL_KEIL
166469         "muls	r5, r6, r5\n\t"
166470 #elif defined(__clang__)
166471         "muls	r5, r6\n\t"
166472 #else
166473         "mul	r5, r6\n\t"
166474 #endif
166475 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166476         "lsrs	r6, r5, #16\n\t"
166477 #else
166478         "lsr	r6, r5, #16\n\t"
166479 #endif
166480 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166481         "lsls	r5, r5, #16\n\t"
166482 #else
166483         "lsl	r5, r5, #16\n\t"
166484 #endif
166485 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166486         "adds	r4, r4, r5\n\t"
166487 #else
166488         "add	r4, r4, r5\n\t"
166489 #endif
166490 #ifdef WOLFSSL_KEIL
166491         "adcs	r2, r2, r6\n\t"
166492 #elif defined(__clang__)
166493         "adcs	r2, r6\n\t"
166494 #else
166495         "adc	r2, r6\n\t"
166496 #endif
166497 #ifdef WOLFSSL_KEIL
166498         "adcs	r3, r3, %[r]\n\t"
166499 #elif defined(__clang__)
166500         "adcs	r3, %[r]\n\t"
166501 #else
166502         "adc	r3, %[r]\n\t"
166503 #endif
166504 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166505         "adds	r4, r4, r5\n\t"
166506 #else
166507         "add	r4, r4, r5\n\t"
166508 #endif
166509 #ifdef WOLFSSL_KEIL
166510         "adcs	r2, r2, r6\n\t"
166511 #elif defined(__clang__)
166512         "adcs	r2, r6\n\t"
166513 #else
166514         "adc	r2, r6\n\t"
166515 #endif
166516 #ifdef WOLFSSL_KEIL
166517         "adcs	r3, r3, %[r]\n\t"
166518 #elif defined(__clang__)
166519         "adcs	r3, %[r]\n\t"
166520 #else
166521         "adc	r3, %[r]\n\t"
166522 #endif
166523         "#  A[8] * A[6]\n\t"
166524         "mov	%[a], r9\n\t"
166525         "ldr	r7, [%[a], #24]\n\t"
166526         "ldr	%[a], [%[a], #32]\n\t"
166527         "uxth	r5, %[a]\n\t"
166528         "uxth	r6, r7\n\t"
166529 #ifdef WOLFSSL_KEIL
166530         "muls	r6, r5, r6\n\t"
166531 #elif defined(__clang__)
166532         "muls	r6, r5\n\t"
166533 #else
166534         "mul	r6, r5\n\t"
166535 #endif
166536 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166537         "adds	r4, r4, r6\n\t"
166538 #else
166539         "add	r4, r4, r6\n\t"
166540 #endif
166541 #ifdef WOLFSSL_KEIL
166542         "adcs	r2, r2, %[r]\n\t"
166543 #elif defined(__clang__)
166544         "adcs	r2, %[r]\n\t"
166545 #else
166546         "adc	r2, %[r]\n\t"
166547 #endif
166548 #ifdef WOLFSSL_KEIL
166549         "adcs	r3, r3, %[r]\n\t"
166550 #elif defined(__clang__)
166551         "adcs	r3, %[r]\n\t"
166552 #else
166553         "adc	r3, %[r]\n\t"
166554 #endif
166555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166556         "adds	r4, r4, r6\n\t"
166557 #else
166558         "add	r4, r4, r6\n\t"
166559 #endif
166560 #ifdef WOLFSSL_KEIL
166561         "adcs	r2, r2, %[r]\n\t"
166562 #elif defined(__clang__)
166563         "adcs	r2, %[r]\n\t"
166564 #else
166565         "adc	r2, %[r]\n\t"
166566 #endif
166567 #ifdef WOLFSSL_KEIL
166568         "adcs	r3, r3, %[r]\n\t"
166569 #elif defined(__clang__)
166570         "adcs	r3, %[r]\n\t"
166571 #else
166572         "adc	r3, %[r]\n\t"
166573 #endif
166574 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166575         "lsrs	r6, r7, #16\n\t"
166576 #else
166577         "lsr	r6, r7, #16\n\t"
166578 #endif
166579 #ifdef WOLFSSL_KEIL
166580         "muls	r5, r6, r5\n\t"
166581 #elif defined(__clang__)
166582         "muls	r5, r6\n\t"
166583 #else
166584         "mul	r5, r6\n\t"
166585 #endif
166586 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166587         "lsrs	r6, r5, #16\n\t"
166588 #else
166589         "lsr	r6, r5, #16\n\t"
166590 #endif
166591 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166592         "lsls	r5, r5, #16\n\t"
166593 #else
166594         "lsl	r5, r5, #16\n\t"
166595 #endif
166596 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166597         "adds	r4, r4, r5\n\t"
166598 #else
166599         "add	r4, r4, r5\n\t"
166600 #endif
166601 #ifdef WOLFSSL_KEIL
166602         "adcs	r2, r2, r6\n\t"
166603 #elif defined(__clang__)
166604         "adcs	r2, r6\n\t"
166605 #else
166606         "adc	r2, r6\n\t"
166607 #endif
166608 #ifdef WOLFSSL_KEIL
166609         "adcs	r3, r3, %[r]\n\t"
166610 #elif defined(__clang__)
166611         "adcs	r3, %[r]\n\t"
166612 #else
166613         "adc	r3, %[r]\n\t"
166614 #endif
166615 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166616         "adds	r4, r4, r5\n\t"
166617 #else
166618         "add	r4, r4, r5\n\t"
166619 #endif
166620 #ifdef WOLFSSL_KEIL
166621         "adcs	r2, r2, r6\n\t"
166622 #elif defined(__clang__)
166623         "adcs	r2, r6\n\t"
166624 #else
166625         "adc	r2, r6\n\t"
166626 #endif
166627 #ifdef WOLFSSL_KEIL
166628         "adcs	r3, r3, %[r]\n\t"
166629 #elif defined(__clang__)
166630         "adcs	r3, %[r]\n\t"
166631 #else
166632         "adc	r3, %[r]\n\t"
166633 #endif
166634 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166635         "lsrs	r5, %[a], #16\n\t"
166636 #else
166637         "lsr	r5, %[a], #16\n\t"
166638 #endif
166639 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166640         "lsrs	r6, r7, #16\n\t"
166641 #else
166642         "lsr	r6, r7, #16\n\t"
166643 #endif
166644 #ifdef WOLFSSL_KEIL
166645         "muls	r6, r5, r6\n\t"
166646 #elif defined(__clang__)
166647         "muls	r6, r5\n\t"
166648 #else
166649         "mul	r6, r5\n\t"
166650 #endif
166651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166652         "adds	r2, r2, r6\n\t"
166653 #else
166654         "add	r2, r2, r6\n\t"
166655 #endif
166656 #ifdef WOLFSSL_KEIL
166657         "adcs	r3, r3, %[r]\n\t"
166658 #elif defined(__clang__)
166659         "adcs	r3, %[r]\n\t"
166660 #else
166661         "adc	r3, %[r]\n\t"
166662 #endif
166663 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166664         "adds	r2, r2, r6\n\t"
166665 #else
166666         "add	r2, r2, r6\n\t"
166667 #endif
166668 #ifdef WOLFSSL_KEIL
166669         "adcs	r3, r3, %[r]\n\t"
166670 #elif defined(__clang__)
166671         "adcs	r3, %[r]\n\t"
166672 #else
166673         "adc	r3, %[r]\n\t"
166674 #endif
166675         "uxth	r6, r7\n\t"
166676 #ifdef WOLFSSL_KEIL
166677         "muls	r5, r6, r5\n\t"
166678 #elif defined(__clang__)
166679         "muls	r5, r6\n\t"
166680 #else
166681         "mul	r5, r6\n\t"
166682 #endif
166683 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166684         "lsrs	r6, r5, #16\n\t"
166685 #else
166686         "lsr	r6, r5, #16\n\t"
166687 #endif
166688 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166689         "lsls	r5, r5, #16\n\t"
166690 #else
166691         "lsl	r5, r5, #16\n\t"
166692 #endif
166693 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166694         "adds	r4, r4, r5\n\t"
166695 #else
166696         "add	r4, r4, r5\n\t"
166697 #endif
166698 #ifdef WOLFSSL_KEIL
166699         "adcs	r2, r2, r6\n\t"
166700 #elif defined(__clang__)
166701         "adcs	r2, r6\n\t"
166702 #else
166703         "adc	r2, r6\n\t"
166704 #endif
166705 #ifdef WOLFSSL_KEIL
166706         "adcs	r3, r3, %[r]\n\t"
166707 #elif defined(__clang__)
166708         "adcs	r3, %[r]\n\t"
166709 #else
166710         "adc	r3, %[r]\n\t"
166711 #endif
166712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166713         "adds	r4, r4, r5\n\t"
166714 #else
166715         "add	r4, r4, r5\n\t"
166716 #endif
166717 #ifdef WOLFSSL_KEIL
166718         "adcs	r2, r2, r6\n\t"
166719 #elif defined(__clang__)
166720         "adcs	r2, r6\n\t"
166721 #else
166722         "adc	r2, r6\n\t"
166723 #endif
166724 #ifdef WOLFSSL_KEIL
166725         "adcs	r3, r3, %[r]\n\t"
166726 #elif defined(__clang__)
166727         "adcs	r3, %[r]\n\t"
166728 #else
166729         "adc	r3, %[r]\n\t"
166730 #endif
166731         "#  A[7] * A[7]\n\t"
166732         "mov	%[a], r9\n\t"
166733         "ldr	r7, [%[a], #28]\n\t"
166734 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166735         "lsrs	r6, r7, #16\n\t"
166736 #else
166737         "lsr	r6, r7, #16\n\t"
166738 #endif
166739         "uxth	r5, r7\n\t"
166740 #ifdef WOLFSSL_KEIL
166741         "muls	r5, r5, r5\n\t"
166742 #elif defined(__clang__)
166743         "muls	r5, r5\n\t"
166744 #else
166745         "mul	r5, r5\n\t"
166746 #endif
166747 #ifdef WOLFSSL_KEIL
166748         "muls	r6, r6, r6\n\t"
166749 #elif defined(__clang__)
166750         "muls	r6, r6\n\t"
166751 #else
166752         "mul	r6, r6\n\t"
166753 #endif
166754 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166755         "adds	r4, r4, r5\n\t"
166756 #else
166757         "add	r4, r4, r5\n\t"
166758 #endif
166759 #ifdef WOLFSSL_KEIL
166760         "adcs	r2, r2, r6\n\t"
166761 #elif defined(__clang__)
166762         "adcs	r2, r6\n\t"
166763 #else
166764         "adc	r2, r6\n\t"
166765 #endif
166766 #ifdef WOLFSSL_KEIL
166767         "adcs	r3, r3, %[r]\n\t"
166768 #elif defined(__clang__)
166769         "adcs	r3, %[r]\n\t"
166770 #else
166771         "adc	r3, %[r]\n\t"
166772 #endif
166773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166774         "lsrs	r6, r7, #16\n\t"
166775 #else
166776         "lsr	r6, r7, #16\n\t"
166777 #endif
166778         "uxth	r5, r7\n\t"
166779 #ifdef WOLFSSL_KEIL
166780         "muls	r5, r6, r5\n\t"
166781 #elif defined(__clang__)
166782         "muls	r5, r6\n\t"
166783 #else
166784         "mul	r5, r6\n\t"
166785 #endif
166786 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166787         "lsrs	r6, r5, #15\n\t"
166788 #else
166789         "lsr	r6, r5, #15\n\t"
166790 #endif
166791 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166792         "lsls	r5, r5, #17\n\t"
166793 #else
166794         "lsl	r5, r5, #17\n\t"
166795 #endif
166796 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166797         "adds	r4, r4, r5\n\t"
166798 #else
166799         "add	r4, r4, r5\n\t"
166800 #endif
166801 #ifdef WOLFSSL_KEIL
166802         "adcs	r2, r2, r6\n\t"
166803 #elif defined(__clang__)
166804         "adcs	r2, r6\n\t"
166805 #else
166806         "adc	r2, r6\n\t"
166807 #endif
166808 #ifdef WOLFSSL_KEIL
166809         "adcs	r3, r3, %[r]\n\t"
166810 #elif defined(__clang__)
166811         "adcs	r3, %[r]\n\t"
166812 #else
166813         "adc	r3, %[r]\n\t"
166814 #endif
166815         "str	r4, [sp, #56]\n\t"
166816         "#  A[8] * A[7]\n\t"
166817         "movs	r4, #0\n\t"
166818         "ldr	%[a], [%[a], #32]\n\t"
166819         "uxth	r5, %[a]\n\t"
166820         "uxth	r6, r7\n\t"
166821 #ifdef WOLFSSL_KEIL
166822         "muls	r6, r5, r6\n\t"
166823 #elif defined(__clang__)
166824         "muls	r6, r5\n\t"
166825 #else
166826         "mul	r6, r5\n\t"
166827 #endif
166828 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166829         "adds	r2, r2, r6\n\t"
166830 #else
166831         "add	r2, r2, r6\n\t"
166832 #endif
166833 #ifdef WOLFSSL_KEIL
166834         "adcs	r3, r3, %[r]\n\t"
166835 #elif defined(__clang__)
166836         "adcs	r3, %[r]\n\t"
166837 #else
166838         "adc	r3, %[r]\n\t"
166839 #endif
166840 #ifdef WOLFSSL_KEIL
166841         "adcs	r4, r4, %[r]\n\t"
166842 #elif defined(__clang__)
166843         "adcs	r4, %[r]\n\t"
166844 #else
166845         "adc	r4, %[r]\n\t"
166846 #endif
166847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166848         "adds	r2, r2, r6\n\t"
166849 #else
166850         "add	r2, r2, r6\n\t"
166851 #endif
166852 #ifdef WOLFSSL_KEIL
166853         "adcs	r3, r3, %[r]\n\t"
166854 #elif defined(__clang__)
166855         "adcs	r3, %[r]\n\t"
166856 #else
166857         "adc	r3, %[r]\n\t"
166858 #endif
166859 #ifdef WOLFSSL_KEIL
166860         "adcs	r4, r4, %[r]\n\t"
166861 #elif defined(__clang__)
166862         "adcs	r4, %[r]\n\t"
166863 #else
166864         "adc	r4, %[r]\n\t"
166865 #endif
166866 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166867         "lsrs	r6, r7, #16\n\t"
166868 #else
166869         "lsr	r6, r7, #16\n\t"
166870 #endif
166871 #ifdef WOLFSSL_KEIL
166872         "muls	r5, r6, r5\n\t"
166873 #elif defined(__clang__)
166874         "muls	r5, r6\n\t"
166875 #else
166876         "mul	r5, r6\n\t"
166877 #endif
166878 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166879         "lsrs	r6, r5, #16\n\t"
166880 #else
166881         "lsr	r6, r5, #16\n\t"
166882 #endif
166883 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166884         "lsls	r5, r5, #16\n\t"
166885 #else
166886         "lsl	r5, r5, #16\n\t"
166887 #endif
166888 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166889         "adds	r2, r2, r5\n\t"
166890 #else
166891         "add	r2, r2, r5\n\t"
166892 #endif
166893 #ifdef WOLFSSL_KEIL
166894         "adcs	r3, r3, r6\n\t"
166895 #elif defined(__clang__)
166896         "adcs	r3, r6\n\t"
166897 #else
166898         "adc	r3, r6\n\t"
166899 #endif
166900 #ifdef WOLFSSL_KEIL
166901         "adcs	r4, r4, %[r]\n\t"
166902 #elif defined(__clang__)
166903         "adcs	r4, %[r]\n\t"
166904 #else
166905         "adc	r4, %[r]\n\t"
166906 #endif
166907 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166908         "adds	r2, r2, r5\n\t"
166909 #else
166910         "add	r2, r2, r5\n\t"
166911 #endif
166912 #ifdef WOLFSSL_KEIL
166913         "adcs	r3, r3, r6\n\t"
166914 #elif defined(__clang__)
166915         "adcs	r3, r6\n\t"
166916 #else
166917         "adc	r3, r6\n\t"
166918 #endif
166919 #ifdef WOLFSSL_KEIL
166920         "adcs	r4, r4, %[r]\n\t"
166921 #elif defined(__clang__)
166922         "adcs	r4, %[r]\n\t"
166923 #else
166924         "adc	r4, %[r]\n\t"
166925 #endif
166926 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166927         "lsrs	r5, %[a], #16\n\t"
166928 #else
166929         "lsr	r5, %[a], #16\n\t"
166930 #endif
166931 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166932         "lsrs	r6, r7, #16\n\t"
166933 #else
166934         "lsr	r6, r7, #16\n\t"
166935 #endif
166936 #ifdef WOLFSSL_KEIL
166937         "muls	r6, r5, r6\n\t"
166938 #elif defined(__clang__)
166939         "muls	r6, r5\n\t"
166940 #else
166941         "mul	r6, r5\n\t"
166942 #endif
166943 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166944         "adds	r3, r3, r6\n\t"
166945 #else
166946         "add	r3, r3, r6\n\t"
166947 #endif
166948 #ifdef WOLFSSL_KEIL
166949         "adcs	r4, r4, %[r]\n\t"
166950 #elif defined(__clang__)
166951         "adcs	r4, %[r]\n\t"
166952 #else
166953         "adc	r4, %[r]\n\t"
166954 #endif
166955 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166956         "adds	r3, r3, r6\n\t"
166957 #else
166958         "add	r3, r3, r6\n\t"
166959 #endif
166960 #ifdef WOLFSSL_KEIL
166961         "adcs	r4, r4, %[r]\n\t"
166962 #elif defined(__clang__)
166963         "adcs	r4, %[r]\n\t"
166964 #else
166965         "adc	r4, %[r]\n\t"
166966 #endif
166967         "uxth	r6, r7\n\t"
166968 #ifdef WOLFSSL_KEIL
166969         "muls	r5, r6, r5\n\t"
166970 #elif defined(__clang__)
166971         "muls	r5, r6\n\t"
166972 #else
166973         "mul	r5, r6\n\t"
166974 #endif
166975 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166976         "lsrs	r6, r5, #16\n\t"
166977 #else
166978         "lsr	r6, r5, #16\n\t"
166979 #endif
166980 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166981         "lsls	r5, r5, #16\n\t"
166982 #else
166983         "lsl	r5, r5, #16\n\t"
166984 #endif
166985 #if defined(__clang__) || defined(WOLFSSL_KEIL)
166986         "adds	r2, r2, r5\n\t"
166987 #else
166988         "add	r2, r2, r5\n\t"
166989 #endif
166990 #ifdef WOLFSSL_KEIL
166991         "adcs	r3, r3, r6\n\t"
166992 #elif defined(__clang__)
166993         "adcs	r3, r6\n\t"
166994 #else
166995         "adc	r3, r6\n\t"
166996 #endif
166997 #ifdef WOLFSSL_KEIL
166998         "adcs	r4, r4, %[r]\n\t"
166999 #elif defined(__clang__)
167000         "adcs	r4, %[r]\n\t"
167001 #else
167002         "adc	r4, %[r]\n\t"
167003 #endif
167004 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167005         "adds	r2, r2, r5\n\t"
167006 #else
167007         "add	r2, r2, r5\n\t"
167008 #endif
167009 #ifdef WOLFSSL_KEIL
167010         "adcs	r3, r3, r6\n\t"
167011 #elif defined(__clang__)
167012         "adcs	r3, r6\n\t"
167013 #else
167014         "adc	r3, r6\n\t"
167015 #endif
167016 #ifdef WOLFSSL_KEIL
167017         "adcs	r4, r4, %[r]\n\t"
167018 #elif defined(__clang__)
167019         "adcs	r4, %[r]\n\t"
167020 #else
167021         "adc	r4, %[r]\n\t"
167022 #endif
167023         "#  A[9] * A[6]\n\t"
167024         "mov	%[a], r9\n\t"
167025         "ldr	r7, [%[a], #24]\n\t"
167026         "ldr	%[a], [%[a], #36]\n\t"
167027         "uxth	r5, %[a]\n\t"
167028         "uxth	r6, r7\n\t"
167029 #ifdef WOLFSSL_KEIL
167030         "muls	r6, r5, r6\n\t"
167031 #elif defined(__clang__)
167032         "muls	r6, r5\n\t"
167033 #else
167034         "mul	r6, r5\n\t"
167035 #endif
167036 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167037         "adds	r2, r2, r6\n\t"
167038 #else
167039         "add	r2, r2, r6\n\t"
167040 #endif
167041 #ifdef WOLFSSL_KEIL
167042         "adcs	r3, r3, %[r]\n\t"
167043 #elif defined(__clang__)
167044         "adcs	r3, %[r]\n\t"
167045 #else
167046         "adc	r3, %[r]\n\t"
167047 #endif
167048 #ifdef WOLFSSL_KEIL
167049         "adcs	r4, r4, %[r]\n\t"
167050 #elif defined(__clang__)
167051         "adcs	r4, %[r]\n\t"
167052 #else
167053         "adc	r4, %[r]\n\t"
167054 #endif
167055 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167056         "adds	r2, r2, r6\n\t"
167057 #else
167058         "add	r2, r2, r6\n\t"
167059 #endif
167060 #ifdef WOLFSSL_KEIL
167061         "adcs	r3, r3, %[r]\n\t"
167062 #elif defined(__clang__)
167063         "adcs	r3, %[r]\n\t"
167064 #else
167065         "adc	r3, %[r]\n\t"
167066 #endif
167067 #ifdef WOLFSSL_KEIL
167068         "adcs	r4, r4, %[r]\n\t"
167069 #elif defined(__clang__)
167070         "adcs	r4, %[r]\n\t"
167071 #else
167072         "adc	r4, %[r]\n\t"
167073 #endif
167074 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167075         "lsrs	r6, r7, #16\n\t"
167076 #else
167077         "lsr	r6, r7, #16\n\t"
167078 #endif
167079 #ifdef WOLFSSL_KEIL
167080         "muls	r5, r6, r5\n\t"
167081 #elif defined(__clang__)
167082         "muls	r5, r6\n\t"
167083 #else
167084         "mul	r5, r6\n\t"
167085 #endif
167086 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167087         "lsrs	r6, r5, #16\n\t"
167088 #else
167089         "lsr	r6, r5, #16\n\t"
167090 #endif
167091 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167092         "lsls	r5, r5, #16\n\t"
167093 #else
167094         "lsl	r5, r5, #16\n\t"
167095 #endif
167096 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167097         "adds	r2, r2, r5\n\t"
167098 #else
167099         "add	r2, r2, r5\n\t"
167100 #endif
167101 #ifdef WOLFSSL_KEIL
167102         "adcs	r3, r3, r6\n\t"
167103 #elif defined(__clang__)
167104         "adcs	r3, r6\n\t"
167105 #else
167106         "adc	r3, r6\n\t"
167107 #endif
167108 #ifdef WOLFSSL_KEIL
167109         "adcs	r4, r4, %[r]\n\t"
167110 #elif defined(__clang__)
167111         "adcs	r4, %[r]\n\t"
167112 #else
167113         "adc	r4, %[r]\n\t"
167114 #endif
167115 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167116         "adds	r2, r2, r5\n\t"
167117 #else
167118         "add	r2, r2, r5\n\t"
167119 #endif
167120 #ifdef WOLFSSL_KEIL
167121         "adcs	r3, r3, r6\n\t"
167122 #elif defined(__clang__)
167123         "adcs	r3, r6\n\t"
167124 #else
167125         "adc	r3, r6\n\t"
167126 #endif
167127 #ifdef WOLFSSL_KEIL
167128         "adcs	r4, r4, %[r]\n\t"
167129 #elif defined(__clang__)
167130         "adcs	r4, %[r]\n\t"
167131 #else
167132         "adc	r4, %[r]\n\t"
167133 #endif
167134 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167135         "lsrs	r5, %[a], #16\n\t"
167136 #else
167137         "lsr	r5, %[a], #16\n\t"
167138 #endif
167139 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167140         "lsrs	r6, r7, #16\n\t"
167141 #else
167142         "lsr	r6, r7, #16\n\t"
167143 #endif
167144 #ifdef WOLFSSL_KEIL
167145         "muls	r6, r5, r6\n\t"
167146 #elif defined(__clang__)
167147         "muls	r6, r5\n\t"
167148 #else
167149         "mul	r6, r5\n\t"
167150 #endif
167151 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167152         "adds	r3, r3, r6\n\t"
167153 #else
167154         "add	r3, r3, r6\n\t"
167155 #endif
167156 #ifdef WOLFSSL_KEIL
167157         "adcs	r4, r4, %[r]\n\t"
167158 #elif defined(__clang__)
167159         "adcs	r4, %[r]\n\t"
167160 #else
167161         "adc	r4, %[r]\n\t"
167162 #endif
167163 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167164         "adds	r3, r3, r6\n\t"
167165 #else
167166         "add	r3, r3, r6\n\t"
167167 #endif
167168 #ifdef WOLFSSL_KEIL
167169         "adcs	r4, r4, %[r]\n\t"
167170 #elif defined(__clang__)
167171         "adcs	r4, %[r]\n\t"
167172 #else
167173         "adc	r4, %[r]\n\t"
167174 #endif
167175         "uxth	r6, r7\n\t"
167176 #ifdef WOLFSSL_KEIL
167177         "muls	r5, r6, r5\n\t"
167178 #elif defined(__clang__)
167179         "muls	r5, r6\n\t"
167180 #else
167181         "mul	r5, r6\n\t"
167182 #endif
167183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167184         "lsrs	r6, r5, #16\n\t"
167185 #else
167186         "lsr	r6, r5, #16\n\t"
167187 #endif
167188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167189         "lsls	r5, r5, #16\n\t"
167190 #else
167191         "lsl	r5, r5, #16\n\t"
167192 #endif
167193 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167194         "adds	r2, r2, r5\n\t"
167195 #else
167196         "add	r2, r2, r5\n\t"
167197 #endif
167198 #ifdef WOLFSSL_KEIL
167199         "adcs	r3, r3, r6\n\t"
167200 #elif defined(__clang__)
167201         "adcs	r3, r6\n\t"
167202 #else
167203         "adc	r3, r6\n\t"
167204 #endif
167205 #ifdef WOLFSSL_KEIL
167206         "adcs	r4, r4, %[r]\n\t"
167207 #elif defined(__clang__)
167208         "adcs	r4, %[r]\n\t"
167209 #else
167210         "adc	r4, %[r]\n\t"
167211 #endif
167212 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167213         "adds	r2, r2, r5\n\t"
167214 #else
167215         "add	r2, r2, r5\n\t"
167216 #endif
167217 #ifdef WOLFSSL_KEIL
167218         "adcs	r3, r3, r6\n\t"
167219 #elif defined(__clang__)
167220         "adcs	r3, r6\n\t"
167221 #else
167222         "adc	r3, r6\n\t"
167223 #endif
167224 #ifdef WOLFSSL_KEIL
167225         "adcs	r4, r4, %[r]\n\t"
167226 #elif defined(__clang__)
167227         "adcs	r4, %[r]\n\t"
167228 #else
167229         "adc	r4, %[r]\n\t"
167230 #endif
167231         "#  A[10] * A[5]\n\t"
167232         "mov	%[a], r9\n\t"
167233         "ldr	r7, [%[a], #20]\n\t"
167234         "ldr	%[a], [%[a], #40]\n\t"
167235         "uxth	r5, %[a]\n\t"
167236         "uxth	r6, r7\n\t"
167237 #ifdef WOLFSSL_KEIL
167238         "muls	r6, r5, r6\n\t"
167239 #elif defined(__clang__)
167240         "muls	r6, r5\n\t"
167241 #else
167242         "mul	r6, r5\n\t"
167243 #endif
167244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167245         "adds	r2, r2, r6\n\t"
167246 #else
167247         "add	r2, r2, r6\n\t"
167248 #endif
167249 #ifdef WOLFSSL_KEIL
167250         "adcs	r3, r3, %[r]\n\t"
167251 #elif defined(__clang__)
167252         "adcs	r3, %[r]\n\t"
167253 #else
167254         "adc	r3, %[r]\n\t"
167255 #endif
167256 #ifdef WOLFSSL_KEIL
167257         "adcs	r4, r4, %[r]\n\t"
167258 #elif defined(__clang__)
167259         "adcs	r4, %[r]\n\t"
167260 #else
167261         "adc	r4, %[r]\n\t"
167262 #endif
167263 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167264         "adds	r2, r2, r6\n\t"
167265 #else
167266         "add	r2, r2, r6\n\t"
167267 #endif
167268 #ifdef WOLFSSL_KEIL
167269         "adcs	r3, r3, %[r]\n\t"
167270 #elif defined(__clang__)
167271         "adcs	r3, %[r]\n\t"
167272 #else
167273         "adc	r3, %[r]\n\t"
167274 #endif
167275 #ifdef WOLFSSL_KEIL
167276         "adcs	r4, r4, %[r]\n\t"
167277 #elif defined(__clang__)
167278         "adcs	r4, %[r]\n\t"
167279 #else
167280         "adc	r4, %[r]\n\t"
167281 #endif
167282 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167283         "lsrs	r6, r7, #16\n\t"
167284 #else
167285         "lsr	r6, r7, #16\n\t"
167286 #endif
167287 #ifdef WOLFSSL_KEIL
167288         "muls	r5, r6, r5\n\t"
167289 #elif defined(__clang__)
167290         "muls	r5, r6\n\t"
167291 #else
167292         "mul	r5, r6\n\t"
167293 #endif
167294 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167295         "lsrs	r6, r5, #16\n\t"
167296 #else
167297         "lsr	r6, r5, #16\n\t"
167298 #endif
167299 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167300         "lsls	r5, r5, #16\n\t"
167301 #else
167302         "lsl	r5, r5, #16\n\t"
167303 #endif
167304 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167305         "adds	r2, r2, r5\n\t"
167306 #else
167307         "add	r2, r2, r5\n\t"
167308 #endif
167309 #ifdef WOLFSSL_KEIL
167310         "adcs	r3, r3, r6\n\t"
167311 #elif defined(__clang__)
167312         "adcs	r3, r6\n\t"
167313 #else
167314         "adc	r3, r6\n\t"
167315 #endif
167316 #ifdef WOLFSSL_KEIL
167317         "adcs	r4, r4, %[r]\n\t"
167318 #elif defined(__clang__)
167319         "adcs	r4, %[r]\n\t"
167320 #else
167321         "adc	r4, %[r]\n\t"
167322 #endif
167323 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167324         "adds	r2, r2, r5\n\t"
167325 #else
167326         "add	r2, r2, r5\n\t"
167327 #endif
167328 #ifdef WOLFSSL_KEIL
167329         "adcs	r3, r3, r6\n\t"
167330 #elif defined(__clang__)
167331         "adcs	r3, r6\n\t"
167332 #else
167333         "adc	r3, r6\n\t"
167334 #endif
167335 #ifdef WOLFSSL_KEIL
167336         "adcs	r4, r4, %[r]\n\t"
167337 #elif defined(__clang__)
167338         "adcs	r4, %[r]\n\t"
167339 #else
167340         "adc	r4, %[r]\n\t"
167341 #endif
167342 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167343         "lsrs	r5, %[a], #16\n\t"
167344 #else
167345         "lsr	r5, %[a], #16\n\t"
167346 #endif
167347 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167348         "lsrs	r6, r7, #16\n\t"
167349 #else
167350         "lsr	r6, r7, #16\n\t"
167351 #endif
167352 #ifdef WOLFSSL_KEIL
167353         "muls	r6, r5, r6\n\t"
167354 #elif defined(__clang__)
167355         "muls	r6, r5\n\t"
167356 #else
167357         "mul	r6, r5\n\t"
167358 #endif
167359 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167360         "adds	r3, r3, r6\n\t"
167361 #else
167362         "add	r3, r3, r6\n\t"
167363 #endif
167364 #ifdef WOLFSSL_KEIL
167365         "adcs	r4, r4, %[r]\n\t"
167366 #elif defined(__clang__)
167367         "adcs	r4, %[r]\n\t"
167368 #else
167369         "adc	r4, %[r]\n\t"
167370 #endif
167371 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167372         "adds	r3, r3, r6\n\t"
167373 #else
167374         "add	r3, r3, r6\n\t"
167375 #endif
167376 #ifdef WOLFSSL_KEIL
167377         "adcs	r4, r4, %[r]\n\t"
167378 #elif defined(__clang__)
167379         "adcs	r4, %[r]\n\t"
167380 #else
167381         "adc	r4, %[r]\n\t"
167382 #endif
167383         "uxth	r6, r7\n\t"
167384 #ifdef WOLFSSL_KEIL
167385         "muls	r5, r6, r5\n\t"
167386 #elif defined(__clang__)
167387         "muls	r5, r6\n\t"
167388 #else
167389         "mul	r5, r6\n\t"
167390 #endif
167391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167392         "lsrs	r6, r5, #16\n\t"
167393 #else
167394         "lsr	r6, r5, #16\n\t"
167395 #endif
167396 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167397         "lsls	r5, r5, #16\n\t"
167398 #else
167399         "lsl	r5, r5, #16\n\t"
167400 #endif
167401 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167402         "adds	r2, r2, r5\n\t"
167403 #else
167404         "add	r2, r2, r5\n\t"
167405 #endif
167406 #ifdef WOLFSSL_KEIL
167407         "adcs	r3, r3, r6\n\t"
167408 #elif defined(__clang__)
167409         "adcs	r3, r6\n\t"
167410 #else
167411         "adc	r3, r6\n\t"
167412 #endif
167413 #ifdef WOLFSSL_KEIL
167414         "adcs	r4, r4, %[r]\n\t"
167415 #elif defined(__clang__)
167416         "adcs	r4, %[r]\n\t"
167417 #else
167418         "adc	r4, %[r]\n\t"
167419 #endif
167420 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167421         "adds	r2, r2, r5\n\t"
167422 #else
167423         "add	r2, r2, r5\n\t"
167424 #endif
167425 #ifdef WOLFSSL_KEIL
167426         "adcs	r3, r3, r6\n\t"
167427 #elif defined(__clang__)
167428         "adcs	r3, r6\n\t"
167429 #else
167430         "adc	r3, r6\n\t"
167431 #endif
167432 #ifdef WOLFSSL_KEIL
167433         "adcs	r4, r4, %[r]\n\t"
167434 #elif defined(__clang__)
167435         "adcs	r4, %[r]\n\t"
167436 #else
167437         "adc	r4, %[r]\n\t"
167438 #endif
167439         "#  A[11] * A[4]\n\t"
167440         "mov	%[a], r9\n\t"
167441         "ldr	r7, [%[a], #16]\n\t"
167442         "ldr	%[a], [%[a], #44]\n\t"
167443         "uxth	r5, %[a]\n\t"
167444         "uxth	r6, r7\n\t"
167445 #ifdef WOLFSSL_KEIL
167446         "muls	r6, r5, r6\n\t"
167447 #elif defined(__clang__)
167448         "muls	r6, r5\n\t"
167449 #else
167450         "mul	r6, r5\n\t"
167451 #endif
167452 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167453         "adds	r2, r2, r6\n\t"
167454 #else
167455         "add	r2, r2, r6\n\t"
167456 #endif
167457 #ifdef WOLFSSL_KEIL
167458         "adcs	r3, r3, %[r]\n\t"
167459 #elif defined(__clang__)
167460         "adcs	r3, %[r]\n\t"
167461 #else
167462         "adc	r3, %[r]\n\t"
167463 #endif
167464 #ifdef WOLFSSL_KEIL
167465         "adcs	r4, r4, %[r]\n\t"
167466 #elif defined(__clang__)
167467         "adcs	r4, %[r]\n\t"
167468 #else
167469         "adc	r4, %[r]\n\t"
167470 #endif
167471 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167472         "adds	r2, r2, r6\n\t"
167473 #else
167474         "add	r2, r2, r6\n\t"
167475 #endif
167476 #ifdef WOLFSSL_KEIL
167477         "adcs	r3, r3, %[r]\n\t"
167478 #elif defined(__clang__)
167479         "adcs	r3, %[r]\n\t"
167480 #else
167481         "adc	r3, %[r]\n\t"
167482 #endif
167483 #ifdef WOLFSSL_KEIL
167484         "adcs	r4, r4, %[r]\n\t"
167485 #elif defined(__clang__)
167486         "adcs	r4, %[r]\n\t"
167487 #else
167488         "adc	r4, %[r]\n\t"
167489 #endif
167490 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167491         "lsrs	r6, r7, #16\n\t"
167492 #else
167493         "lsr	r6, r7, #16\n\t"
167494 #endif
167495 #ifdef WOLFSSL_KEIL
167496         "muls	r5, r6, r5\n\t"
167497 #elif defined(__clang__)
167498         "muls	r5, r6\n\t"
167499 #else
167500         "mul	r5, r6\n\t"
167501 #endif
167502 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167503         "lsrs	r6, r5, #16\n\t"
167504 #else
167505         "lsr	r6, r5, #16\n\t"
167506 #endif
167507 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167508         "lsls	r5, r5, #16\n\t"
167509 #else
167510         "lsl	r5, r5, #16\n\t"
167511 #endif
167512 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167513         "adds	r2, r2, r5\n\t"
167514 #else
167515         "add	r2, r2, r5\n\t"
167516 #endif
167517 #ifdef WOLFSSL_KEIL
167518         "adcs	r3, r3, r6\n\t"
167519 #elif defined(__clang__)
167520         "adcs	r3, r6\n\t"
167521 #else
167522         "adc	r3, r6\n\t"
167523 #endif
167524 #ifdef WOLFSSL_KEIL
167525         "adcs	r4, r4, %[r]\n\t"
167526 #elif defined(__clang__)
167527         "adcs	r4, %[r]\n\t"
167528 #else
167529         "adc	r4, %[r]\n\t"
167530 #endif
167531 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167532         "adds	r2, r2, r5\n\t"
167533 #else
167534         "add	r2, r2, r5\n\t"
167535 #endif
167536 #ifdef WOLFSSL_KEIL
167537         "adcs	r3, r3, r6\n\t"
167538 #elif defined(__clang__)
167539         "adcs	r3, r6\n\t"
167540 #else
167541         "adc	r3, r6\n\t"
167542 #endif
167543 #ifdef WOLFSSL_KEIL
167544         "adcs	r4, r4, %[r]\n\t"
167545 #elif defined(__clang__)
167546         "adcs	r4, %[r]\n\t"
167547 #else
167548         "adc	r4, %[r]\n\t"
167549 #endif
167550 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167551         "lsrs	r5, %[a], #16\n\t"
167552 #else
167553         "lsr	r5, %[a], #16\n\t"
167554 #endif
167555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167556         "lsrs	r6, r7, #16\n\t"
167557 #else
167558         "lsr	r6, r7, #16\n\t"
167559 #endif
167560 #ifdef WOLFSSL_KEIL
167561         "muls	r6, r5, r6\n\t"
167562 #elif defined(__clang__)
167563         "muls	r6, r5\n\t"
167564 #else
167565         "mul	r6, r5\n\t"
167566 #endif
167567 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167568         "adds	r3, r3, r6\n\t"
167569 #else
167570         "add	r3, r3, r6\n\t"
167571 #endif
167572 #ifdef WOLFSSL_KEIL
167573         "adcs	r4, r4, %[r]\n\t"
167574 #elif defined(__clang__)
167575         "adcs	r4, %[r]\n\t"
167576 #else
167577         "adc	r4, %[r]\n\t"
167578 #endif
167579 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167580         "adds	r3, r3, r6\n\t"
167581 #else
167582         "add	r3, r3, r6\n\t"
167583 #endif
167584 #ifdef WOLFSSL_KEIL
167585         "adcs	r4, r4, %[r]\n\t"
167586 #elif defined(__clang__)
167587         "adcs	r4, %[r]\n\t"
167588 #else
167589         "adc	r4, %[r]\n\t"
167590 #endif
167591         "uxth	r6, r7\n\t"
167592 #ifdef WOLFSSL_KEIL
167593         "muls	r5, r6, r5\n\t"
167594 #elif defined(__clang__)
167595         "muls	r5, r6\n\t"
167596 #else
167597         "mul	r5, r6\n\t"
167598 #endif
167599 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167600         "lsrs	r6, r5, #16\n\t"
167601 #else
167602         "lsr	r6, r5, #16\n\t"
167603 #endif
167604 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167605         "lsls	r5, r5, #16\n\t"
167606 #else
167607         "lsl	r5, r5, #16\n\t"
167608 #endif
167609 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167610         "adds	r2, r2, r5\n\t"
167611 #else
167612         "add	r2, r2, r5\n\t"
167613 #endif
167614 #ifdef WOLFSSL_KEIL
167615         "adcs	r3, r3, r6\n\t"
167616 #elif defined(__clang__)
167617         "adcs	r3, r6\n\t"
167618 #else
167619         "adc	r3, r6\n\t"
167620 #endif
167621 #ifdef WOLFSSL_KEIL
167622         "adcs	r4, r4, %[r]\n\t"
167623 #elif defined(__clang__)
167624         "adcs	r4, %[r]\n\t"
167625 #else
167626         "adc	r4, %[r]\n\t"
167627 #endif
167628 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167629         "adds	r2, r2, r5\n\t"
167630 #else
167631         "add	r2, r2, r5\n\t"
167632 #endif
167633 #ifdef WOLFSSL_KEIL
167634         "adcs	r3, r3, r6\n\t"
167635 #elif defined(__clang__)
167636         "adcs	r3, r6\n\t"
167637 #else
167638         "adc	r3, r6\n\t"
167639 #endif
167640 #ifdef WOLFSSL_KEIL
167641         "adcs	r4, r4, %[r]\n\t"
167642 #elif defined(__clang__)
167643         "adcs	r4, %[r]\n\t"
167644 #else
167645         "adc	r4, %[r]\n\t"
167646 #endif
167647         "#  A[12] * A[3]\n\t"
167648         "mov	%[a], r9\n\t"
167649         "mov	r7, lr\n\t"
167650         "ldr	%[a], [%[a], #48]\n\t"
167651         "uxth	r5, %[a]\n\t"
167652         "uxth	r6, r7\n\t"
167653 #ifdef WOLFSSL_KEIL
167654         "muls	r6, r5, r6\n\t"
167655 #elif defined(__clang__)
167656         "muls	r6, r5\n\t"
167657 #else
167658         "mul	r6, r5\n\t"
167659 #endif
167660 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167661         "adds	r2, r2, r6\n\t"
167662 #else
167663         "add	r2, r2, r6\n\t"
167664 #endif
167665 #ifdef WOLFSSL_KEIL
167666         "adcs	r3, r3, %[r]\n\t"
167667 #elif defined(__clang__)
167668         "adcs	r3, %[r]\n\t"
167669 #else
167670         "adc	r3, %[r]\n\t"
167671 #endif
167672 #ifdef WOLFSSL_KEIL
167673         "adcs	r4, r4, %[r]\n\t"
167674 #elif defined(__clang__)
167675         "adcs	r4, %[r]\n\t"
167676 #else
167677         "adc	r4, %[r]\n\t"
167678 #endif
167679 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167680         "adds	r2, r2, r6\n\t"
167681 #else
167682         "add	r2, r2, r6\n\t"
167683 #endif
167684 #ifdef WOLFSSL_KEIL
167685         "adcs	r3, r3, %[r]\n\t"
167686 #elif defined(__clang__)
167687         "adcs	r3, %[r]\n\t"
167688 #else
167689         "adc	r3, %[r]\n\t"
167690 #endif
167691 #ifdef WOLFSSL_KEIL
167692         "adcs	r4, r4, %[r]\n\t"
167693 #elif defined(__clang__)
167694         "adcs	r4, %[r]\n\t"
167695 #else
167696         "adc	r4, %[r]\n\t"
167697 #endif
167698 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167699         "lsrs	r6, r7, #16\n\t"
167700 #else
167701         "lsr	r6, r7, #16\n\t"
167702 #endif
167703 #ifdef WOLFSSL_KEIL
167704         "muls	r5, r6, r5\n\t"
167705 #elif defined(__clang__)
167706         "muls	r5, r6\n\t"
167707 #else
167708         "mul	r5, r6\n\t"
167709 #endif
167710 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167711         "lsrs	r6, r5, #16\n\t"
167712 #else
167713         "lsr	r6, r5, #16\n\t"
167714 #endif
167715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167716         "lsls	r5, r5, #16\n\t"
167717 #else
167718         "lsl	r5, r5, #16\n\t"
167719 #endif
167720 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167721         "adds	r2, r2, r5\n\t"
167722 #else
167723         "add	r2, r2, r5\n\t"
167724 #endif
167725 #ifdef WOLFSSL_KEIL
167726         "adcs	r3, r3, r6\n\t"
167727 #elif defined(__clang__)
167728         "adcs	r3, r6\n\t"
167729 #else
167730         "adc	r3, r6\n\t"
167731 #endif
167732 #ifdef WOLFSSL_KEIL
167733         "adcs	r4, r4, %[r]\n\t"
167734 #elif defined(__clang__)
167735         "adcs	r4, %[r]\n\t"
167736 #else
167737         "adc	r4, %[r]\n\t"
167738 #endif
167739 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167740         "adds	r2, r2, r5\n\t"
167741 #else
167742         "add	r2, r2, r5\n\t"
167743 #endif
167744 #ifdef WOLFSSL_KEIL
167745         "adcs	r3, r3, r6\n\t"
167746 #elif defined(__clang__)
167747         "adcs	r3, r6\n\t"
167748 #else
167749         "adc	r3, r6\n\t"
167750 #endif
167751 #ifdef WOLFSSL_KEIL
167752         "adcs	r4, r4, %[r]\n\t"
167753 #elif defined(__clang__)
167754         "adcs	r4, %[r]\n\t"
167755 #else
167756         "adc	r4, %[r]\n\t"
167757 #endif
167758 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167759         "lsrs	r5, %[a], #16\n\t"
167760 #else
167761         "lsr	r5, %[a], #16\n\t"
167762 #endif
167763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167764         "lsrs	r6, r7, #16\n\t"
167765 #else
167766         "lsr	r6, r7, #16\n\t"
167767 #endif
167768 #ifdef WOLFSSL_KEIL
167769         "muls	r6, r5, r6\n\t"
167770 #elif defined(__clang__)
167771         "muls	r6, r5\n\t"
167772 #else
167773         "mul	r6, r5\n\t"
167774 #endif
167775 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167776         "adds	r3, r3, r6\n\t"
167777 #else
167778         "add	r3, r3, r6\n\t"
167779 #endif
167780 #ifdef WOLFSSL_KEIL
167781         "adcs	r4, r4, %[r]\n\t"
167782 #elif defined(__clang__)
167783         "adcs	r4, %[r]\n\t"
167784 #else
167785         "adc	r4, %[r]\n\t"
167786 #endif
167787 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167788         "adds	r3, r3, r6\n\t"
167789 #else
167790         "add	r3, r3, r6\n\t"
167791 #endif
167792 #ifdef WOLFSSL_KEIL
167793         "adcs	r4, r4, %[r]\n\t"
167794 #elif defined(__clang__)
167795         "adcs	r4, %[r]\n\t"
167796 #else
167797         "adc	r4, %[r]\n\t"
167798 #endif
167799         "uxth	r6, r7\n\t"
167800 #ifdef WOLFSSL_KEIL
167801         "muls	r5, r6, r5\n\t"
167802 #elif defined(__clang__)
167803         "muls	r5, r6\n\t"
167804 #else
167805         "mul	r5, r6\n\t"
167806 #endif
167807 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167808         "lsrs	r6, r5, #16\n\t"
167809 #else
167810         "lsr	r6, r5, #16\n\t"
167811 #endif
167812 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167813         "lsls	r5, r5, #16\n\t"
167814 #else
167815         "lsl	r5, r5, #16\n\t"
167816 #endif
167817 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167818         "adds	r2, r2, r5\n\t"
167819 #else
167820         "add	r2, r2, r5\n\t"
167821 #endif
167822 #ifdef WOLFSSL_KEIL
167823         "adcs	r3, r3, r6\n\t"
167824 #elif defined(__clang__)
167825         "adcs	r3, r6\n\t"
167826 #else
167827         "adc	r3, r6\n\t"
167828 #endif
167829 #ifdef WOLFSSL_KEIL
167830         "adcs	r4, r4, %[r]\n\t"
167831 #elif defined(__clang__)
167832         "adcs	r4, %[r]\n\t"
167833 #else
167834         "adc	r4, %[r]\n\t"
167835 #endif
167836 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167837         "adds	r2, r2, r5\n\t"
167838 #else
167839         "add	r2, r2, r5\n\t"
167840 #endif
167841 #ifdef WOLFSSL_KEIL
167842         "adcs	r3, r3, r6\n\t"
167843 #elif defined(__clang__)
167844         "adcs	r3, r6\n\t"
167845 #else
167846         "adc	r3, r6\n\t"
167847 #endif
167848 #ifdef WOLFSSL_KEIL
167849         "adcs	r4, r4, %[r]\n\t"
167850 #elif defined(__clang__)
167851         "adcs	r4, %[r]\n\t"
167852 #else
167853         "adc	r4, %[r]\n\t"
167854 #endif
167855         "#  A[13] * A[2]\n\t"
167856         "mov	%[a], r9\n\t"
167857         "mov	r7, r12\n\t"
167858         "ldr	%[a], [%[a], #52]\n\t"
167859         "uxth	r5, %[a]\n\t"
167860         "uxth	r6, r7\n\t"
167861 #ifdef WOLFSSL_KEIL
167862         "muls	r6, r5, r6\n\t"
167863 #elif defined(__clang__)
167864         "muls	r6, r5\n\t"
167865 #else
167866         "mul	r6, r5\n\t"
167867 #endif
167868 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167869         "adds	r2, r2, r6\n\t"
167870 #else
167871         "add	r2, r2, r6\n\t"
167872 #endif
167873 #ifdef WOLFSSL_KEIL
167874         "adcs	r3, r3, %[r]\n\t"
167875 #elif defined(__clang__)
167876         "adcs	r3, %[r]\n\t"
167877 #else
167878         "adc	r3, %[r]\n\t"
167879 #endif
167880 #ifdef WOLFSSL_KEIL
167881         "adcs	r4, r4, %[r]\n\t"
167882 #elif defined(__clang__)
167883         "adcs	r4, %[r]\n\t"
167884 #else
167885         "adc	r4, %[r]\n\t"
167886 #endif
167887 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167888         "adds	r2, r2, r6\n\t"
167889 #else
167890         "add	r2, r2, r6\n\t"
167891 #endif
167892 #ifdef WOLFSSL_KEIL
167893         "adcs	r3, r3, %[r]\n\t"
167894 #elif defined(__clang__)
167895         "adcs	r3, %[r]\n\t"
167896 #else
167897         "adc	r3, %[r]\n\t"
167898 #endif
167899 #ifdef WOLFSSL_KEIL
167900         "adcs	r4, r4, %[r]\n\t"
167901 #elif defined(__clang__)
167902         "adcs	r4, %[r]\n\t"
167903 #else
167904         "adc	r4, %[r]\n\t"
167905 #endif
167906 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167907         "lsrs	r6, r7, #16\n\t"
167908 #else
167909         "lsr	r6, r7, #16\n\t"
167910 #endif
167911 #ifdef WOLFSSL_KEIL
167912         "muls	r5, r6, r5\n\t"
167913 #elif defined(__clang__)
167914         "muls	r5, r6\n\t"
167915 #else
167916         "mul	r5, r6\n\t"
167917 #endif
167918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167919         "lsrs	r6, r5, #16\n\t"
167920 #else
167921         "lsr	r6, r5, #16\n\t"
167922 #endif
167923 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167924         "lsls	r5, r5, #16\n\t"
167925 #else
167926         "lsl	r5, r5, #16\n\t"
167927 #endif
167928 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167929         "adds	r2, r2, r5\n\t"
167930 #else
167931         "add	r2, r2, r5\n\t"
167932 #endif
167933 #ifdef WOLFSSL_KEIL
167934         "adcs	r3, r3, r6\n\t"
167935 #elif defined(__clang__)
167936         "adcs	r3, r6\n\t"
167937 #else
167938         "adc	r3, r6\n\t"
167939 #endif
167940 #ifdef WOLFSSL_KEIL
167941         "adcs	r4, r4, %[r]\n\t"
167942 #elif defined(__clang__)
167943         "adcs	r4, %[r]\n\t"
167944 #else
167945         "adc	r4, %[r]\n\t"
167946 #endif
167947 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167948         "adds	r2, r2, r5\n\t"
167949 #else
167950         "add	r2, r2, r5\n\t"
167951 #endif
167952 #ifdef WOLFSSL_KEIL
167953         "adcs	r3, r3, r6\n\t"
167954 #elif defined(__clang__)
167955         "adcs	r3, r6\n\t"
167956 #else
167957         "adc	r3, r6\n\t"
167958 #endif
167959 #ifdef WOLFSSL_KEIL
167960         "adcs	r4, r4, %[r]\n\t"
167961 #elif defined(__clang__)
167962         "adcs	r4, %[r]\n\t"
167963 #else
167964         "adc	r4, %[r]\n\t"
167965 #endif
167966 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167967         "lsrs	r5, %[a], #16\n\t"
167968 #else
167969         "lsr	r5, %[a], #16\n\t"
167970 #endif
167971 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167972         "lsrs	r6, r7, #16\n\t"
167973 #else
167974         "lsr	r6, r7, #16\n\t"
167975 #endif
167976 #ifdef WOLFSSL_KEIL
167977         "muls	r6, r5, r6\n\t"
167978 #elif defined(__clang__)
167979         "muls	r6, r5\n\t"
167980 #else
167981         "mul	r6, r5\n\t"
167982 #endif
167983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167984         "adds	r3, r3, r6\n\t"
167985 #else
167986         "add	r3, r3, r6\n\t"
167987 #endif
167988 #ifdef WOLFSSL_KEIL
167989         "adcs	r4, r4, %[r]\n\t"
167990 #elif defined(__clang__)
167991         "adcs	r4, %[r]\n\t"
167992 #else
167993         "adc	r4, %[r]\n\t"
167994 #endif
167995 #if defined(__clang__) || defined(WOLFSSL_KEIL)
167996         "adds	r3, r3, r6\n\t"
167997 #else
167998         "add	r3, r3, r6\n\t"
167999 #endif
168000 #ifdef WOLFSSL_KEIL
168001         "adcs	r4, r4, %[r]\n\t"
168002 #elif defined(__clang__)
168003         "adcs	r4, %[r]\n\t"
168004 #else
168005         "adc	r4, %[r]\n\t"
168006 #endif
168007         "uxth	r6, r7\n\t"
168008 #ifdef WOLFSSL_KEIL
168009         "muls	r5, r6, r5\n\t"
168010 #elif defined(__clang__)
168011         "muls	r5, r6\n\t"
168012 #else
168013         "mul	r5, r6\n\t"
168014 #endif
168015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168016         "lsrs	r6, r5, #16\n\t"
168017 #else
168018         "lsr	r6, r5, #16\n\t"
168019 #endif
168020 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168021         "lsls	r5, r5, #16\n\t"
168022 #else
168023         "lsl	r5, r5, #16\n\t"
168024 #endif
168025 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168026         "adds	r2, r2, r5\n\t"
168027 #else
168028         "add	r2, r2, r5\n\t"
168029 #endif
168030 #ifdef WOLFSSL_KEIL
168031         "adcs	r3, r3, r6\n\t"
168032 #elif defined(__clang__)
168033         "adcs	r3, r6\n\t"
168034 #else
168035         "adc	r3, r6\n\t"
168036 #endif
168037 #ifdef WOLFSSL_KEIL
168038         "adcs	r4, r4, %[r]\n\t"
168039 #elif defined(__clang__)
168040         "adcs	r4, %[r]\n\t"
168041 #else
168042         "adc	r4, %[r]\n\t"
168043 #endif
168044 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168045         "adds	r2, r2, r5\n\t"
168046 #else
168047         "add	r2, r2, r5\n\t"
168048 #endif
168049 #ifdef WOLFSSL_KEIL
168050         "adcs	r3, r3, r6\n\t"
168051 #elif defined(__clang__)
168052         "adcs	r3, r6\n\t"
168053 #else
168054         "adc	r3, r6\n\t"
168055 #endif
168056 #ifdef WOLFSSL_KEIL
168057         "adcs	r4, r4, %[r]\n\t"
168058 #elif defined(__clang__)
168059         "adcs	r4, %[r]\n\t"
168060 #else
168061         "adc	r4, %[r]\n\t"
168062 #endif
168063         "#  A[14] * A[1]\n\t"
168064         "mov	%[a], r9\n\t"
168065         "mov	r7, r11\n\t"
168066         "ldr	%[a], [%[a], #56]\n\t"
168067         "uxth	r5, %[a]\n\t"
168068         "uxth	r6, r7\n\t"
168069 #ifdef WOLFSSL_KEIL
168070         "muls	r6, r5, r6\n\t"
168071 #elif defined(__clang__)
168072         "muls	r6, r5\n\t"
168073 #else
168074         "mul	r6, r5\n\t"
168075 #endif
168076 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168077         "adds	r2, r2, r6\n\t"
168078 #else
168079         "add	r2, r2, r6\n\t"
168080 #endif
168081 #ifdef WOLFSSL_KEIL
168082         "adcs	r3, r3, %[r]\n\t"
168083 #elif defined(__clang__)
168084         "adcs	r3, %[r]\n\t"
168085 #else
168086         "adc	r3, %[r]\n\t"
168087 #endif
168088 #ifdef WOLFSSL_KEIL
168089         "adcs	r4, r4, %[r]\n\t"
168090 #elif defined(__clang__)
168091         "adcs	r4, %[r]\n\t"
168092 #else
168093         "adc	r4, %[r]\n\t"
168094 #endif
168095 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168096         "adds	r2, r2, r6\n\t"
168097 #else
168098         "add	r2, r2, r6\n\t"
168099 #endif
168100 #ifdef WOLFSSL_KEIL
168101         "adcs	r3, r3, %[r]\n\t"
168102 #elif defined(__clang__)
168103         "adcs	r3, %[r]\n\t"
168104 #else
168105         "adc	r3, %[r]\n\t"
168106 #endif
168107 #ifdef WOLFSSL_KEIL
168108         "adcs	r4, r4, %[r]\n\t"
168109 #elif defined(__clang__)
168110         "adcs	r4, %[r]\n\t"
168111 #else
168112         "adc	r4, %[r]\n\t"
168113 #endif
168114 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168115         "lsrs	r6, r7, #16\n\t"
168116 #else
168117         "lsr	r6, r7, #16\n\t"
168118 #endif
168119 #ifdef WOLFSSL_KEIL
168120         "muls	r5, r6, r5\n\t"
168121 #elif defined(__clang__)
168122         "muls	r5, r6\n\t"
168123 #else
168124         "mul	r5, r6\n\t"
168125 #endif
168126 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168127         "lsrs	r6, r5, #16\n\t"
168128 #else
168129         "lsr	r6, r5, #16\n\t"
168130 #endif
168131 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168132         "lsls	r5, r5, #16\n\t"
168133 #else
168134         "lsl	r5, r5, #16\n\t"
168135 #endif
168136 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168137         "adds	r2, r2, r5\n\t"
168138 #else
168139         "add	r2, r2, r5\n\t"
168140 #endif
168141 #ifdef WOLFSSL_KEIL
168142         "adcs	r3, r3, r6\n\t"
168143 #elif defined(__clang__)
168144         "adcs	r3, r6\n\t"
168145 #else
168146         "adc	r3, r6\n\t"
168147 #endif
168148 #ifdef WOLFSSL_KEIL
168149         "adcs	r4, r4, %[r]\n\t"
168150 #elif defined(__clang__)
168151         "adcs	r4, %[r]\n\t"
168152 #else
168153         "adc	r4, %[r]\n\t"
168154 #endif
168155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168156         "adds	r2, r2, r5\n\t"
168157 #else
168158         "add	r2, r2, r5\n\t"
168159 #endif
168160 #ifdef WOLFSSL_KEIL
168161         "adcs	r3, r3, r6\n\t"
168162 #elif defined(__clang__)
168163         "adcs	r3, r6\n\t"
168164 #else
168165         "adc	r3, r6\n\t"
168166 #endif
168167 #ifdef WOLFSSL_KEIL
168168         "adcs	r4, r4, %[r]\n\t"
168169 #elif defined(__clang__)
168170         "adcs	r4, %[r]\n\t"
168171 #else
168172         "adc	r4, %[r]\n\t"
168173 #endif
168174 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168175         "lsrs	r5, %[a], #16\n\t"
168176 #else
168177         "lsr	r5, %[a], #16\n\t"
168178 #endif
168179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168180         "lsrs	r6, r7, #16\n\t"
168181 #else
168182         "lsr	r6, r7, #16\n\t"
168183 #endif
168184 #ifdef WOLFSSL_KEIL
168185         "muls	r6, r5, r6\n\t"
168186 #elif defined(__clang__)
168187         "muls	r6, r5\n\t"
168188 #else
168189         "mul	r6, r5\n\t"
168190 #endif
168191 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168192         "adds	r3, r3, r6\n\t"
168193 #else
168194         "add	r3, r3, r6\n\t"
168195 #endif
168196 #ifdef WOLFSSL_KEIL
168197         "adcs	r4, r4, %[r]\n\t"
168198 #elif defined(__clang__)
168199         "adcs	r4, %[r]\n\t"
168200 #else
168201         "adc	r4, %[r]\n\t"
168202 #endif
168203 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168204         "adds	r3, r3, r6\n\t"
168205 #else
168206         "add	r3, r3, r6\n\t"
168207 #endif
168208 #ifdef WOLFSSL_KEIL
168209         "adcs	r4, r4, %[r]\n\t"
168210 #elif defined(__clang__)
168211         "adcs	r4, %[r]\n\t"
168212 #else
168213         "adc	r4, %[r]\n\t"
168214 #endif
168215         "uxth	r6, r7\n\t"
168216 #ifdef WOLFSSL_KEIL
168217         "muls	r5, r6, r5\n\t"
168218 #elif defined(__clang__)
168219         "muls	r5, r6\n\t"
168220 #else
168221         "mul	r5, r6\n\t"
168222 #endif
168223 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168224         "lsrs	r6, r5, #16\n\t"
168225 #else
168226         "lsr	r6, r5, #16\n\t"
168227 #endif
168228 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168229         "lsls	r5, r5, #16\n\t"
168230 #else
168231         "lsl	r5, r5, #16\n\t"
168232 #endif
168233 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168234         "adds	r2, r2, r5\n\t"
168235 #else
168236         "add	r2, r2, r5\n\t"
168237 #endif
168238 #ifdef WOLFSSL_KEIL
168239         "adcs	r3, r3, r6\n\t"
168240 #elif defined(__clang__)
168241         "adcs	r3, r6\n\t"
168242 #else
168243         "adc	r3, r6\n\t"
168244 #endif
168245 #ifdef WOLFSSL_KEIL
168246         "adcs	r4, r4, %[r]\n\t"
168247 #elif defined(__clang__)
168248         "adcs	r4, %[r]\n\t"
168249 #else
168250         "adc	r4, %[r]\n\t"
168251 #endif
168252 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168253         "adds	r2, r2, r5\n\t"
168254 #else
168255         "add	r2, r2, r5\n\t"
168256 #endif
168257 #ifdef WOLFSSL_KEIL
168258         "adcs	r3, r3, r6\n\t"
168259 #elif defined(__clang__)
168260         "adcs	r3, r6\n\t"
168261 #else
168262         "adc	r3, r6\n\t"
168263 #endif
168264 #ifdef WOLFSSL_KEIL
168265         "adcs	r4, r4, %[r]\n\t"
168266 #elif defined(__clang__)
168267         "adcs	r4, %[r]\n\t"
168268 #else
168269         "adc	r4, %[r]\n\t"
168270 #endif
168271         "#  A[15] * A[0]\n\t"
168272         "mov	%[a], r9\n\t"
168273         "mov	r7, r10\n\t"
168274         "ldr	%[a], [%[a], #60]\n\t"
168275         "uxth	r5, %[a]\n\t"
168276         "uxth	r6, r7\n\t"
168277 #ifdef WOLFSSL_KEIL
168278         "muls	r6, r5, r6\n\t"
168279 #elif defined(__clang__)
168280         "muls	r6, r5\n\t"
168281 #else
168282         "mul	r6, r5\n\t"
168283 #endif
168284 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168285         "adds	r2, r2, r6\n\t"
168286 #else
168287         "add	r2, r2, r6\n\t"
168288 #endif
168289 #ifdef WOLFSSL_KEIL
168290         "adcs	r3, r3, %[r]\n\t"
168291 #elif defined(__clang__)
168292         "adcs	r3, %[r]\n\t"
168293 #else
168294         "adc	r3, %[r]\n\t"
168295 #endif
168296 #ifdef WOLFSSL_KEIL
168297         "adcs	r4, r4, %[r]\n\t"
168298 #elif defined(__clang__)
168299         "adcs	r4, %[r]\n\t"
168300 #else
168301         "adc	r4, %[r]\n\t"
168302 #endif
168303 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168304         "adds	r2, r2, r6\n\t"
168305 #else
168306         "add	r2, r2, r6\n\t"
168307 #endif
168308 #ifdef WOLFSSL_KEIL
168309         "adcs	r3, r3, %[r]\n\t"
168310 #elif defined(__clang__)
168311         "adcs	r3, %[r]\n\t"
168312 #else
168313         "adc	r3, %[r]\n\t"
168314 #endif
168315 #ifdef WOLFSSL_KEIL
168316         "adcs	r4, r4, %[r]\n\t"
168317 #elif defined(__clang__)
168318         "adcs	r4, %[r]\n\t"
168319 #else
168320         "adc	r4, %[r]\n\t"
168321 #endif
168322 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168323         "lsrs	r6, r7, #16\n\t"
168324 #else
168325         "lsr	r6, r7, #16\n\t"
168326 #endif
168327 #ifdef WOLFSSL_KEIL
168328         "muls	r5, r6, r5\n\t"
168329 #elif defined(__clang__)
168330         "muls	r5, r6\n\t"
168331 #else
168332         "mul	r5, r6\n\t"
168333 #endif
168334 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168335         "lsrs	r6, r5, #16\n\t"
168336 #else
168337         "lsr	r6, r5, #16\n\t"
168338 #endif
168339 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168340         "lsls	r5, r5, #16\n\t"
168341 #else
168342         "lsl	r5, r5, #16\n\t"
168343 #endif
168344 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168345         "adds	r2, r2, r5\n\t"
168346 #else
168347         "add	r2, r2, r5\n\t"
168348 #endif
168349 #ifdef WOLFSSL_KEIL
168350         "adcs	r3, r3, r6\n\t"
168351 #elif defined(__clang__)
168352         "adcs	r3, r6\n\t"
168353 #else
168354         "adc	r3, r6\n\t"
168355 #endif
168356 #ifdef WOLFSSL_KEIL
168357         "adcs	r4, r4, %[r]\n\t"
168358 #elif defined(__clang__)
168359         "adcs	r4, %[r]\n\t"
168360 #else
168361         "adc	r4, %[r]\n\t"
168362 #endif
168363 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168364         "adds	r2, r2, r5\n\t"
168365 #else
168366         "add	r2, r2, r5\n\t"
168367 #endif
168368 #ifdef WOLFSSL_KEIL
168369         "adcs	r3, r3, r6\n\t"
168370 #elif defined(__clang__)
168371         "adcs	r3, r6\n\t"
168372 #else
168373         "adc	r3, r6\n\t"
168374 #endif
168375 #ifdef WOLFSSL_KEIL
168376         "adcs	r4, r4, %[r]\n\t"
168377 #elif defined(__clang__)
168378         "adcs	r4, %[r]\n\t"
168379 #else
168380         "adc	r4, %[r]\n\t"
168381 #endif
168382 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168383         "lsrs	r5, %[a], #16\n\t"
168384 #else
168385         "lsr	r5, %[a], #16\n\t"
168386 #endif
168387 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168388         "lsrs	r6, r7, #16\n\t"
168389 #else
168390         "lsr	r6, r7, #16\n\t"
168391 #endif
168392 #ifdef WOLFSSL_KEIL
168393         "muls	r6, r5, r6\n\t"
168394 #elif defined(__clang__)
168395         "muls	r6, r5\n\t"
168396 #else
168397         "mul	r6, r5\n\t"
168398 #endif
168399 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168400         "adds	r3, r3, r6\n\t"
168401 #else
168402         "add	r3, r3, r6\n\t"
168403 #endif
168404 #ifdef WOLFSSL_KEIL
168405         "adcs	r4, r4, %[r]\n\t"
168406 #elif defined(__clang__)
168407         "adcs	r4, %[r]\n\t"
168408 #else
168409         "adc	r4, %[r]\n\t"
168410 #endif
168411 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168412         "adds	r3, r3, r6\n\t"
168413 #else
168414         "add	r3, r3, r6\n\t"
168415 #endif
168416 #ifdef WOLFSSL_KEIL
168417         "adcs	r4, r4, %[r]\n\t"
168418 #elif defined(__clang__)
168419         "adcs	r4, %[r]\n\t"
168420 #else
168421         "adc	r4, %[r]\n\t"
168422 #endif
168423         "uxth	r6, r7\n\t"
168424 #ifdef WOLFSSL_KEIL
168425         "muls	r5, r6, r5\n\t"
168426 #elif defined(__clang__)
168427         "muls	r5, r6\n\t"
168428 #else
168429         "mul	r5, r6\n\t"
168430 #endif
168431 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168432         "lsrs	r6, r5, #16\n\t"
168433 #else
168434         "lsr	r6, r5, #16\n\t"
168435 #endif
168436 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168437         "lsls	r5, r5, #16\n\t"
168438 #else
168439         "lsl	r5, r5, #16\n\t"
168440 #endif
168441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168442         "adds	r2, r2, r5\n\t"
168443 #else
168444         "add	r2, r2, r5\n\t"
168445 #endif
168446 #ifdef WOLFSSL_KEIL
168447         "adcs	r3, r3, r6\n\t"
168448 #elif defined(__clang__)
168449         "adcs	r3, r6\n\t"
168450 #else
168451         "adc	r3, r6\n\t"
168452 #endif
168453 #ifdef WOLFSSL_KEIL
168454         "adcs	r4, r4, %[r]\n\t"
168455 #elif defined(__clang__)
168456         "adcs	r4, %[r]\n\t"
168457 #else
168458         "adc	r4, %[r]\n\t"
168459 #endif
168460 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168461         "adds	r2, r2, r5\n\t"
168462 #else
168463         "add	r2, r2, r5\n\t"
168464 #endif
168465 #ifdef WOLFSSL_KEIL
168466         "adcs	r3, r3, r6\n\t"
168467 #elif defined(__clang__)
168468         "adcs	r3, r6\n\t"
168469 #else
168470         "adc	r3, r6\n\t"
168471 #endif
168472 #ifdef WOLFSSL_KEIL
168473         "adcs	r4, r4, %[r]\n\t"
168474 #elif defined(__clang__)
168475         "adcs	r4, %[r]\n\t"
168476 #else
168477         "adc	r4, %[r]\n\t"
168478 #endif
168479         "str	r2, [sp, #60]\n\t"
168480         "#  A[15] * A[1]\n\t"
168481         "movs	r2, #0\n\t"
168482         "mov	%[a], r9\n\t"
168483         "mov	r7, r11\n\t"
168484         "ldr	%[a], [%[a], #60]\n\t"
168485         "uxth	r5, %[a]\n\t"
168486         "uxth	r6, r7\n\t"
168487 #ifdef WOLFSSL_KEIL
168488         "muls	r6, r5, r6\n\t"
168489 #elif defined(__clang__)
168490         "muls	r6, r5\n\t"
168491 #else
168492         "mul	r6, r5\n\t"
168493 #endif
168494 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168495         "adds	r3, r3, r6\n\t"
168496 #else
168497         "add	r3, r3, r6\n\t"
168498 #endif
168499 #ifdef WOLFSSL_KEIL
168500         "adcs	r4, r4, %[r]\n\t"
168501 #elif defined(__clang__)
168502         "adcs	r4, %[r]\n\t"
168503 #else
168504         "adc	r4, %[r]\n\t"
168505 #endif
168506 #ifdef WOLFSSL_KEIL
168507         "adcs	r2, r2, %[r]\n\t"
168508 #elif defined(__clang__)
168509         "adcs	r2, %[r]\n\t"
168510 #else
168511         "adc	r2, %[r]\n\t"
168512 #endif
168513 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168514         "adds	r3, r3, r6\n\t"
168515 #else
168516         "add	r3, r3, r6\n\t"
168517 #endif
168518 #ifdef WOLFSSL_KEIL
168519         "adcs	r4, r4, %[r]\n\t"
168520 #elif defined(__clang__)
168521         "adcs	r4, %[r]\n\t"
168522 #else
168523         "adc	r4, %[r]\n\t"
168524 #endif
168525 #ifdef WOLFSSL_KEIL
168526         "adcs	r2, r2, %[r]\n\t"
168527 #elif defined(__clang__)
168528         "adcs	r2, %[r]\n\t"
168529 #else
168530         "adc	r2, %[r]\n\t"
168531 #endif
168532 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168533         "lsrs	r6, r7, #16\n\t"
168534 #else
168535         "lsr	r6, r7, #16\n\t"
168536 #endif
168537 #ifdef WOLFSSL_KEIL
168538         "muls	r5, r6, r5\n\t"
168539 #elif defined(__clang__)
168540         "muls	r5, r6\n\t"
168541 #else
168542         "mul	r5, r6\n\t"
168543 #endif
168544 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168545         "lsrs	r6, r5, #16\n\t"
168546 #else
168547         "lsr	r6, r5, #16\n\t"
168548 #endif
168549 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168550         "lsls	r5, r5, #16\n\t"
168551 #else
168552         "lsl	r5, r5, #16\n\t"
168553 #endif
168554 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168555         "adds	r3, r3, r5\n\t"
168556 #else
168557         "add	r3, r3, r5\n\t"
168558 #endif
168559 #ifdef WOLFSSL_KEIL
168560         "adcs	r4, r4, r6\n\t"
168561 #elif defined(__clang__)
168562         "adcs	r4, r6\n\t"
168563 #else
168564         "adc	r4, r6\n\t"
168565 #endif
168566 #ifdef WOLFSSL_KEIL
168567         "adcs	r2, r2, %[r]\n\t"
168568 #elif defined(__clang__)
168569         "adcs	r2, %[r]\n\t"
168570 #else
168571         "adc	r2, %[r]\n\t"
168572 #endif
168573 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168574         "adds	r3, r3, r5\n\t"
168575 #else
168576         "add	r3, r3, r5\n\t"
168577 #endif
168578 #ifdef WOLFSSL_KEIL
168579         "adcs	r4, r4, r6\n\t"
168580 #elif defined(__clang__)
168581         "adcs	r4, r6\n\t"
168582 #else
168583         "adc	r4, r6\n\t"
168584 #endif
168585 #ifdef WOLFSSL_KEIL
168586         "adcs	r2, r2, %[r]\n\t"
168587 #elif defined(__clang__)
168588         "adcs	r2, %[r]\n\t"
168589 #else
168590         "adc	r2, %[r]\n\t"
168591 #endif
168592 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168593         "lsrs	r5, %[a], #16\n\t"
168594 #else
168595         "lsr	r5, %[a], #16\n\t"
168596 #endif
168597 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168598         "lsrs	r6, r7, #16\n\t"
168599 #else
168600         "lsr	r6, r7, #16\n\t"
168601 #endif
168602 #ifdef WOLFSSL_KEIL
168603         "muls	r6, r5, r6\n\t"
168604 #elif defined(__clang__)
168605         "muls	r6, r5\n\t"
168606 #else
168607         "mul	r6, r5\n\t"
168608 #endif
168609 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168610         "adds	r4, r4, r6\n\t"
168611 #else
168612         "add	r4, r4, r6\n\t"
168613 #endif
168614 #ifdef WOLFSSL_KEIL
168615         "adcs	r2, r2, %[r]\n\t"
168616 #elif defined(__clang__)
168617         "adcs	r2, %[r]\n\t"
168618 #else
168619         "adc	r2, %[r]\n\t"
168620 #endif
168621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168622         "adds	r4, r4, r6\n\t"
168623 #else
168624         "add	r4, r4, r6\n\t"
168625 #endif
168626 #ifdef WOLFSSL_KEIL
168627         "adcs	r2, r2, %[r]\n\t"
168628 #elif defined(__clang__)
168629         "adcs	r2, %[r]\n\t"
168630 #else
168631         "adc	r2, %[r]\n\t"
168632 #endif
168633         "uxth	r6, r7\n\t"
168634 #ifdef WOLFSSL_KEIL
168635         "muls	r5, r6, r5\n\t"
168636 #elif defined(__clang__)
168637         "muls	r5, r6\n\t"
168638 #else
168639         "mul	r5, r6\n\t"
168640 #endif
168641 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168642         "lsrs	r6, r5, #16\n\t"
168643 #else
168644         "lsr	r6, r5, #16\n\t"
168645 #endif
168646 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168647         "lsls	r5, r5, #16\n\t"
168648 #else
168649         "lsl	r5, r5, #16\n\t"
168650 #endif
168651 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168652         "adds	r3, r3, r5\n\t"
168653 #else
168654         "add	r3, r3, r5\n\t"
168655 #endif
168656 #ifdef WOLFSSL_KEIL
168657         "adcs	r4, r4, r6\n\t"
168658 #elif defined(__clang__)
168659         "adcs	r4, r6\n\t"
168660 #else
168661         "adc	r4, r6\n\t"
168662 #endif
168663 #ifdef WOLFSSL_KEIL
168664         "adcs	r2, r2, %[r]\n\t"
168665 #elif defined(__clang__)
168666         "adcs	r2, %[r]\n\t"
168667 #else
168668         "adc	r2, %[r]\n\t"
168669 #endif
168670 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168671         "adds	r3, r3, r5\n\t"
168672 #else
168673         "add	r3, r3, r5\n\t"
168674 #endif
168675 #ifdef WOLFSSL_KEIL
168676         "adcs	r4, r4, r6\n\t"
168677 #elif defined(__clang__)
168678         "adcs	r4, r6\n\t"
168679 #else
168680         "adc	r4, r6\n\t"
168681 #endif
168682 #ifdef WOLFSSL_KEIL
168683         "adcs	r2, r2, %[r]\n\t"
168684 #elif defined(__clang__)
168685         "adcs	r2, %[r]\n\t"
168686 #else
168687         "adc	r2, %[r]\n\t"
168688 #endif
168689         "#  A[14] * A[2]\n\t"
168690         "mov	%[a], r9\n\t"
168691         "mov	r7, r12\n\t"
168692         "ldr	%[a], [%[a], #56]\n\t"
168693         "uxth	r5, %[a]\n\t"
168694         "uxth	r6, r7\n\t"
168695 #ifdef WOLFSSL_KEIL
168696         "muls	r6, r5, r6\n\t"
168697 #elif defined(__clang__)
168698         "muls	r6, r5\n\t"
168699 #else
168700         "mul	r6, r5\n\t"
168701 #endif
168702 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168703         "adds	r3, r3, r6\n\t"
168704 #else
168705         "add	r3, r3, r6\n\t"
168706 #endif
168707 #ifdef WOLFSSL_KEIL
168708         "adcs	r4, r4, %[r]\n\t"
168709 #elif defined(__clang__)
168710         "adcs	r4, %[r]\n\t"
168711 #else
168712         "adc	r4, %[r]\n\t"
168713 #endif
168714 #ifdef WOLFSSL_KEIL
168715         "adcs	r2, r2, %[r]\n\t"
168716 #elif defined(__clang__)
168717         "adcs	r2, %[r]\n\t"
168718 #else
168719         "adc	r2, %[r]\n\t"
168720 #endif
168721 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168722         "adds	r3, r3, r6\n\t"
168723 #else
168724         "add	r3, r3, r6\n\t"
168725 #endif
168726 #ifdef WOLFSSL_KEIL
168727         "adcs	r4, r4, %[r]\n\t"
168728 #elif defined(__clang__)
168729         "adcs	r4, %[r]\n\t"
168730 #else
168731         "adc	r4, %[r]\n\t"
168732 #endif
168733 #ifdef WOLFSSL_KEIL
168734         "adcs	r2, r2, %[r]\n\t"
168735 #elif defined(__clang__)
168736         "adcs	r2, %[r]\n\t"
168737 #else
168738         "adc	r2, %[r]\n\t"
168739 #endif
168740 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168741         "lsrs	r6, r7, #16\n\t"
168742 #else
168743         "lsr	r6, r7, #16\n\t"
168744 #endif
168745 #ifdef WOLFSSL_KEIL
168746         "muls	r5, r6, r5\n\t"
168747 #elif defined(__clang__)
168748         "muls	r5, r6\n\t"
168749 #else
168750         "mul	r5, r6\n\t"
168751 #endif
168752 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168753         "lsrs	r6, r5, #16\n\t"
168754 #else
168755         "lsr	r6, r5, #16\n\t"
168756 #endif
168757 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168758         "lsls	r5, r5, #16\n\t"
168759 #else
168760         "lsl	r5, r5, #16\n\t"
168761 #endif
168762 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168763         "adds	r3, r3, r5\n\t"
168764 #else
168765         "add	r3, r3, r5\n\t"
168766 #endif
168767 #ifdef WOLFSSL_KEIL
168768         "adcs	r4, r4, r6\n\t"
168769 #elif defined(__clang__)
168770         "adcs	r4, r6\n\t"
168771 #else
168772         "adc	r4, r6\n\t"
168773 #endif
168774 #ifdef WOLFSSL_KEIL
168775         "adcs	r2, r2, %[r]\n\t"
168776 #elif defined(__clang__)
168777         "adcs	r2, %[r]\n\t"
168778 #else
168779         "adc	r2, %[r]\n\t"
168780 #endif
168781 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168782         "adds	r3, r3, r5\n\t"
168783 #else
168784         "add	r3, r3, r5\n\t"
168785 #endif
168786 #ifdef WOLFSSL_KEIL
168787         "adcs	r4, r4, r6\n\t"
168788 #elif defined(__clang__)
168789         "adcs	r4, r6\n\t"
168790 #else
168791         "adc	r4, r6\n\t"
168792 #endif
168793 #ifdef WOLFSSL_KEIL
168794         "adcs	r2, r2, %[r]\n\t"
168795 #elif defined(__clang__)
168796         "adcs	r2, %[r]\n\t"
168797 #else
168798         "adc	r2, %[r]\n\t"
168799 #endif
168800 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168801         "lsrs	r5, %[a], #16\n\t"
168802 #else
168803         "lsr	r5, %[a], #16\n\t"
168804 #endif
168805 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168806         "lsrs	r6, r7, #16\n\t"
168807 #else
168808         "lsr	r6, r7, #16\n\t"
168809 #endif
168810 #ifdef WOLFSSL_KEIL
168811         "muls	r6, r5, r6\n\t"
168812 #elif defined(__clang__)
168813         "muls	r6, r5\n\t"
168814 #else
168815         "mul	r6, r5\n\t"
168816 #endif
168817 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168818         "adds	r4, r4, r6\n\t"
168819 #else
168820         "add	r4, r4, r6\n\t"
168821 #endif
168822 #ifdef WOLFSSL_KEIL
168823         "adcs	r2, r2, %[r]\n\t"
168824 #elif defined(__clang__)
168825         "adcs	r2, %[r]\n\t"
168826 #else
168827         "adc	r2, %[r]\n\t"
168828 #endif
168829 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168830         "adds	r4, r4, r6\n\t"
168831 #else
168832         "add	r4, r4, r6\n\t"
168833 #endif
168834 #ifdef WOLFSSL_KEIL
168835         "adcs	r2, r2, %[r]\n\t"
168836 #elif defined(__clang__)
168837         "adcs	r2, %[r]\n\t"
168838 #else
168839         "adc	r2, %[r]\n\t"
168840 #endif
168841         "uxth	r6, r7\n\t"
168842 #ifdef WOLFSSL_KEIL
168843         "muls	r5, r6, r5\n\t"
168844 #elif defined(__clang__)
168845         "muls	r5, r6\n\t"
168846 #else
168847         "mul	r5, r6\n\t"
168848 #endif
168849 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168850         "lsrs	r6, r5, #16\n\t"
168851 #else
168852         "lsr	r6, r5, #16\n\t"
168853 #endif
168854 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168855         "lsls	r5, r5, #16\n\t"
168856 #else
168857         "lsl	r5, r5, #16\n\t"
168858 #endif
168859 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168860         "adds	r3, r3, r5\n\t"
168861 #else
168862         "add	r3, r3, r5\n\t"
168863 #endif
168864 #ifdef WOLFSSL_KEIL
168865         "adcs	r4, r4, r6\n\t"
168866 #elif defined(__clang__)
168867         "adcs	r4, r6\n\t"
168868 #else
168869         "adc	r4, r6\n\t"
168870 #endif
168871 #ifdef WOLFSSL_KEIL
168872         "adcs	r2, r2, %[r]\n\t"
168873 #elif defined(__clang__)
168874         "adcs	r2, %[r]\n\t"
168875 #else
168876         "adc	r2, %[r]\n\t"
168877 #endif
168878 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168879         "adds	r3, r3, r5\n\t"
168880 #else
168881         "add	r3, r3, r5\n\t"
168882 #endif
168883 #ifdef WOLFSSL_KEIL
168884         "adcs	r4, r4, r6\n\t"
168885 #elif defined(__clang__)
168886         "adcs	r4, r6\n\t"
168887 #else
168888         "adc	r4, r6\n\t"
168889 #endif
168890 #ifdef WOLFSSL_KEIL
168891         "adcs	r2, r2, %[r]\n\t"
168892 #elif defined(__clang__)
168893         "adcs	r2, %[r]\n\t"
168894 #else
168895         "adc	r2, %[r]\n\t"
168896 #endif
168897         "#  A[13] * A[3]\n\t"
168898         "mov	%[a], r9\n\t"
168899         "mov	r7, lr\n\t"
168900         "ldr	%[a], [%[a], #52]\n\t"
168901         "uxth	r5, %[a]\n\t"
168902         "uxth	r6, r7\n\t"
168903 #ifdef WOLFSSL_KEIL
168904         "muls	r6, r5, r6\n\t"
168905 #elif defined(__clang__)
168906         "muls	r6, r5\n\t"
168907 #else
168908         "mul	r6, r5\n\t"
168909 #endif
168910 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168911         "adds	r3, r3, r6\n\t"
168912 #else
168913         "add	r3, r3, r6\n\t"
168914 #endif
168915 #ifdef WOLFSSL_KEIL
168916         "adcs	r4, r4, %[r]\n\t"
168917 #elif defined(__clang__)
168918         "adcs	r4, %[r]\n\t"
168919 #else
168920         "adc	r4, %[r]\n\t"
168921 #endif
168922 #ifdef WOLFSSL_KEIL
168923         "adcs	r2, r2, %[r]\n\t"
168924 #elif defined(__clang__)
168925         "adcs	r2, %[r]\n\t"
168926 #else
168927         "adc	r2, %[r]\n\t"
168928 #endif
168929 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168930         "adds	r3, r3, r6\n\t"
168931 #else
168932         "add	r3, r3, r6\n\t"
168933 #endif
168934 #ifdef WOLFSSL_KEIL
168935         "adcs	r4, r4, %[r]\n\t"
168936 #elif defined(__clang__)
168937         "adcs	r4, %[r]\n\t"
168938 #else
168939         "adc	r4, %[r]\n\t"
168940 #endif
168941 #ifdef WOLFSSL_KEIL
168942         "adcs	r2, r2, %[r]\n\t"
168943 #elif defined(__clang__)
168944         "adcs	r2, %[r]\n\t"
168945 #else
168946         "adc	r2, %[r]\n\t"
168947 #endif
168948 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168949         "lsrs	r6, r7, #16\n\t"
168950 #else
168951         "lsr	r6, r7, #16\n\t"
168952 #endif
168953 #ifdef WOLFSSL_KEIL
168954         "muls	r5, r6, r5\n\t"
168955 #elif defined(__clang__)
168956         "muls	r5, r6\n\t"
168957 #else
168958         "mul	r5, r6\n\t"
168959 #endif
168960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168961         "lsrs	r6, r5, #16\n\t"
168962 #else
168963         "lsr	r6, r5, #16\n\t"
168964 #endif
168965 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168966         "lsls	r5, r5, #16\n\t"
168967 #else
168968         "lsl	r5, r5, #16\n\t"
168969 #endif
168970 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168971         "adds	r3, r3, r5\n\t"
168972 #else
168973         "add	r3, r3, r5\n\t"
168974 #endif
168975 #ifdef WOLFSSL_KEIL
168976         "adcs	r4, r4, r6\n\t"
168977 #elif defined(__clang__)
168978         "adcs	r4, r6\n\t"
168979 #else
168980         "adc	r4, r6\n\t"
168981 #endif
168982 #ifdef WOLFSSL_KEIL
168983         "adcs	r2, r2, %[r]\n\t"
168984 #elif defined(__clang__)
168985         "adcs	r2, %[r]\n\t"
168986 #else
168987         "adc	r2, %[r]\n\t"
168988 #endif
168989 #if defined(__clang__) || defined(WOLFSSL_KEIL)
168990         "adds	r3, r3, r5\n\t"
168991 #else
168992         "add	r3, r3, r5\n\t"
168993 #endif
168994 #ifdef WOLFSSL_KEIL
168995         "adcs	r4, r4, r6\n\t"
168996 #elif defined(__clang__)
168997         "adcs	r4, r6\n\t"
168998 #else
168999         "adc	r4, r6\n\t"
169000 #endif
169001 #ifdef WOLFSSL_KEIL
169002         "adcs	r2, r2, %[r]\n\t"
169003 #elif defined(__clang__)
169004         "adcs	r2, %[r]\n\t"
169005 #else
169006         "adc	r2, %[r]\n\t"
169007 #endif
169008 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169009         "lsrs	r5, %[a], #16\n\t"
169010 #else
169011         "lsr	r5, %[a], #16\n\t"
169012 #endif
169013 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169014         "lsrs	r6, r7, #16\n\t"
169015 #else
169016         "lsr	r6, r7, #16\n\t"
169017 #endif
169018 #ifdef WOLFSSL_KEIL
169019         "muls	r6, r5, r6\n\t"
169020 #elif defined(__clang__)
169021         "muls	r6, r5\n\t"
169022 #else
169023         "mul	r6, r5\n\t"
169024 #endif
169025 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169026         "adds	r4, r4, r6\n\t"
169027 #else
169028         "add	r4, r4, r6\n\t"
169029 #endif
169030 #ifdef WOLFSSL_KEIL
169031         "adcs	r2, r2, %[r]\n\t"
169032 #elif defined(__clang__)
169033         "adcs	r2, %[r]\n\t"
169034 #else
169035         "adc	r2, %[r]\n\t"
169036 #endif
169037 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169038         "adds	r4, r4, r6\n\t"
169039 #else
169040         "add	r4, r4, r6\n\t"
169041 #endif
169042 #ifdef WOLFSSL_KEIL
169043         "adcs	r2, r2, %[r]\n\t"
169044 #elif defined(__clang__)
169045         "adcs	r2, %[r]\n\t"
169046 #else
169047         "adc	r2, %[r]\n\t"
169048 #endif
169049         "uxth	r6, r7\n\t"
169050 #ifdef WOLFSSL_KEIL
169051         "muls	r5, r6, r5\n\t"
169052 #elif defined(__clang__)
169053         "muls	r5, r6\n\t"
169054 #else
169055         "mul	r5, r6\n\t"
169056 #endif
169057 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169058         "lsrs	r6, r5, #16\n\t"
169059 #else
169060         "lsr	r6, r5, #16\n\t"
169061 #endif
169062 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169063         "lsls	r5, r5, #16\n\t"
169064 #else
169065         "lsl	r5, r5, #16\n\t"
169066 #endif
169067 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169068         "adds	r3, r3, r5\n\t"
169069 #else
169070         "add	r3, r3, r5\n\t"
169071 #endif
169072 #ifdef WOLFSSL_KEIL
169073         "adcs	r4, r4, r6\n\t"
169074 #elif defined(__clang__)
169075         "adcs	r4, r6\n\t"
169076 #else
169077         "adc	r4, r6\n\t"
169078 #endif
169079 #ifdef WOLFSSL_KEIL
169080         "adcs	r2, r2, %[r]\n\t"
169081 #elif defined(__clang__)
169082         "adcs	r2, %[r]\n\t"
169083 #else
169084         "adc	r2, %[r]\n\t"
169085 #endif
169086 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169087         "adds	r3, r3, r5\n\t"
169088 #else
169089         "add	r3, r3, r5\n\t"
169090 #endif
169091 #ifdef WOLFSSL_KEIL
169092         "adcs	r4, r4, r6\n\t"
169093 #elif defined(__clang__)
169094         "adcs	r4, r6\n\t"
169095 #else
169096         "adc	r4, r6\n\t"
169097 #endif
169098 #ifdef WOLFSSL_KEIL
169099         "adcs	r2, r2, %[r]\n\t"
169100 #elif defined(__clang__)
169101         "adcs	r2, %[r]\n\t"
169102 #else
169103         "adc	r2, %[r]\n\t"
169104 #endif
169105         "#  A[12] * A[4]\n\t"
169106         "mov	%[a], r9\n\t"
169107         "ldr	r7, [%[a], #16]\n\t"
169108         "ldr	%[a], [%[a], #48]\n\t"
169109         "uxth	r5, %[a]\n\t"
169110         "uxth	r6, r7\n\t"
169111 #ifdef WOLFSSL_KEIL
169112         "muls	r6, r5, r6\n\t"
169113 #elif defined(__clang__)
169114         "muls	r6, r5\n\t"
169115 #else
169116         "mul	r6, r5\n\t"
169117 #endif
169118 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169119         "adds	r3, r3, r6\n\t"
169120 #else
169121         "add	r3, r3, r6\n\t"
169122 #endif
169123 #ifdef WOLFSSL_KEIL
169124         "adcs	r4, r4, %[r]\n\t"
169125 #elif defined(__clang__)
169126         "adcs	r4, %[r]\n\t"
169127 #else
169128         "adc	r4, %[r]\n\t"
169129 #endif
169130 #ifdef WOLFSSL_KEIL
169131         "adcs	r2, r2, %[r]\n\t"
169132 #elif defined(__clang__)
169133         "adcs	r2, %[r]\n\t"
169134 #else
169135         "adc	r2, %[r]\n\t"
169136 #endif
169137 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169138         "adds	r3, r3, r6\n\t"
169139 #else
169140         "add	r3, r3, r6\n\t"
169141 #endif
169142 #ifdef WOLFSSL_KEIL
169143         "adcs	r4, r4, %[r]\n\t"
169144 #elif defined(__clang__)
169145         "adcs	r4, %[r]\n\t"
169146 #else
169147         "adc	r4, %[r]\n\t"
169148 #endif
169149 #ifdef WOLFSSL_KEIL
169150         "adcs	r2, r2, %[r]\n\t"
169151 #elif defined(__clang__)
169152         "adcs	r2, %[r]\n\t"
169153 #else
169154         "adc	r2, %[r]\n\t"
169155 #endif
169156 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169157         "lsrs	r6, r7, #16\n\t"
169158 #else
169159         "lsr	r6, r7, #16\n\t"
169160 #endif
169161 #ifdef WOLFSSL_KEIL
169162         "muls	r5, r6, r5\n\t"
169163 #elif defined(__clang__)
169164         "muls	r5, r6\n\t"
169165 #else
169166         "mul	r5, r6\n\t"
169167 #endif
169168 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169169         "lsrs	r6, r5, #16\n\t"
169170 #else
169171         "lsr	r6, r5, #16\n\t"
169172 #endif
169173 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169174         "lsls	r5, r5, #16\n\t"
169175 #else
169176         "lsl	r5, r5, #16\n\t"
169177 #endif
169178 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169179         "adds	r3, r3, r5\n\t"
169180 #else
169181         "add	r3, r3, r5\n\t"
169182 #endif
169183 #ifdef WOLFSSL_KEIL
169184         "adcs	r4, r4, r6\n\t"
169185 #elif defined(__clang__)
169186         "adcs	r4, r6\n\t"
169187 #else
169188         "adc	r4, r6\n\t"
169189 #endif
169190 #ifdef WOLFSSL_KEIL
169191         "adcs	r2, r2, %[r]\n\t"
169192 #elif defined(__clang__)
169193         "adcs	r2, %[r]\n\t"
169194 #else
169195         "adc	r2, %[r]\n\t"
169196 #endif
169197 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169198         "adds	r3, r3, r5\n\t"
169199 #else
169200         "add	r3, r3, r5\n\t"
169201 #endif
169202 #ifdef WOLFSSL_KEIL
169203         "adcs	r4, r4, r6\n\t"
169204 #elif defined(__clang__)
169205         "adcs	r4, r6\n\t"
169206 #else
169207         "adc	r4, r6\n\t"
169208 #endif
169209 #ifdef WOLFSSL_KEIL
169210         "adcs	r2, r2, %[r]\n\t"
169211 #elif defined(__clang__)
169212         "adcs	r2, %[r]\n\t"
169213 #else
169214         "adc	r2, %[r]\n\t"
169215 #endif
169216 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169217         "lsrs	r5, %[a], #16\n\t"
169218 #else
169219         "lsr	r5, %[a], #16\n\t"
169220 #endif
169221 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169222         "lsrs	r6, r7, #16\n\t"
169223 #else
169224         "lsr	r6, r7, #16\n\t"
169225 #endif
169226 #ifdef WOLFSSL_KEIL
169227         "muls	r6, r5, r6\n\t"
169228 #elif defined(__clang__)
169229         "muls	r6, r5\n\t"
169230 #else
169231         "mul	r6, r5\n\t"
169232 #endif
169233 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169234         "adds	r4, r4, r6\n\t"
169235 #else
169236         "add	r4, r4, r6\n\t"
169237 #endif
169238 #ifdef WOLFSSL_KEIL
169239         "adcs	r2, r2, %[r]\n\t"
169240 #elif defined(__clang__)
169241         "adcs	r2, %[r]\n\t"
169242 #else
169243         "adc	r2, %[r]\n\t"
169244 #endif
169245 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169246         "adds	r4, r4, r6\n\t"
169247 #else
169248         "add	r4, r4, r6\n\t"
169249 #endif
169250 #ifdef WOLFSSL_KEIL
169251         "adcs	r2, r2, %[r]\n\t"
169252 #elif defined(__clang__)
169253         "adcs	r2, %[r]\n\t"
169254 #else
169255         "adc	r2, %[r]\n\t"
169256 #endif
169257         "uxth	r6, r7\n\t"
169258 #ifdef WOLFSSL_KEIL
169259         "muls	r5, r6, r5\n\t"
169260 #elif defined(__clang__)
169261         "muls	r5, r6\n\t"
169262 #else
169263         "mul	r5, r6\n\t"
169264 #endif
169265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169266         "lsrs	r6, r5, #16\n\t"
169267 #else
169268         "lsr	r6, r5, #16\n\t"
169269 #endif
169270 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169271         "lsls	r5, r5, #16\n\t"
169272 #else
169273         "lsl	r5, r5, #16\n\t"
169274 #endif
169275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169276         "adds	r3, r3, r5\n\t"
169277 #else
169278         "add	r3, r3, r5\n\t"
169279 #endif
169280 #ifdef WOLFSSL_KEIL
169281         "adcs	r4, r4, r6\n\t"
169282 #elif defined(__clang__)
169283         "adcs	r4, r6\n\t"
169284 #else
169285         "adc	r4, r6\n\t"
169286 #endif
169287 #ifdef WOLFSSL_KEIL
169288         "adcs	r2, r2, %[r]\n\t"
169289 #elif defined(__clang__)
169290         "adcs	r2, %[r]\n\t"
169291 #else
169292         "adc	r2, %[r]\n\t"
169293 #endif
169294 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169295         "adds	r3, r3, r5\n\t"
169296 #else
169297         "add	r3, r3, r5\n\t"
169298 #endif
169299 #ifdef WOLFSSL_KEIL
169300         "adcs	r4, r4, r6\n\t"
169301 #elif defined(__clang__)
169302         "adcs	r4, r6\n\t"
169303 #else
169304         "adc	r4, r6\n\t"
169305 #endif
169306 #ifdef WOLFSSL_KEIL
169307         "adcs	r2, r2, %[r]\n\t"
169308 #elif defined(__clang__)
169309         "adcs	r2, %[r]\n\t"
169310 #else
169311         "adc	r2, %[r]\n\t"
169312 #endif
169313         "#  A[11] * A[5]\n\t"
169314         "mov	%[a], r9\n\t"
169315         "ldr	r7, [%[a], #20]\n\t"
169316         "ldr	%[a], [%[a], #44]\n\t"
169317         "uxth	r5, %[a]\n\t"
169318         "uxth	r6, r7\n\t"
169319 #ifdef WOLFSSL_KEIL
169320         "muls	r6, r5, r6\n\t"
169321 #elif defined(__clang__)
169322         "muls	r6, r5\n\t"
169323 #else
169324         "mul	r6, r5\n\t"
169325 #endif
169326 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169327         "adds	r3, r3, r6\n\t"
169328 #else
169329         "add	r3, r3, r6\n\t"
169330 #endif
169331 #ifdef WOLFSSL_KEIL
169332         "adcs	r4, r4, %[r]\n\t"
169333 #elif defined(__clang__)
169334         "adcs	r4, %[r]\n\t"
169335 #else
169336         "adc	r4, %[r]\n\t"
169337 #endif
169338 #ifdef WOLFSSL_KEIL
169339         "adcs	r2, r2, %[r]\n\t"
169340 #elif defined(__clang__)
169341         "adcs	r2, %[r]\n\t"
169342 #else
169343         "adc	r2, %[r]\n\t"
169344 #endif
169345 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169346         "adds	r3, r3, r6\n\t"
169347 #else
169348         "add	r3, r3, r6\n\t"
169349 #endif
169350 #ifdef WOLFSSL_KEIL
169351         "adcs	r4, r4, %[r]\n\t"
169352 #elif defined(__clang__)
169353         "adcs	r4, %[r]\n\t"
169354 #else
169355         "adc	r4, %[r]\n\t"
169356 #endif
169357 #ifdef WOLFSSL_KEIL
169358         "adcs	r2, r2, %[r]\n\t"
169359 #elif defined(__clang__)
169360         "adcs	r2, %[r]\n\t"
169361 #else
169362         "adc	r2, %[r]\n\t"
169363 #endif
169364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169365         "lsrs	r6, r7, #16\n\t"
169366 #else
169367         "lsr	r6, r7, #16\n\t"
169368 #endif
169369 #ifdef WOLFSSL_KEIL
169370         "muls	r5, r6, r5\n\t"
169371 #elif defined(__clang__)
169372         "muls	r5, r6\n\t"
169373 #else
169374         "mul	r5, r6\n\t"
169375 #endif
169376 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169377         "lsrs	r6, r5, #16\n\t"
169378 #else
169379         "lsr	r6, r5, #16\n\t"
169380 #endif
169381 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169382         "lsls	r5, r5, #16\n\t"
169383 #else
169384         "lsl	r5, r5, #16\n\t"
169385 #endif
169386 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169387         "adds	r3, r3, r5\n\t"
169388 #else
169389         "add	r3, r3, r5\n\t"
169390 #endif
169391 #ifdef WOLFSSL_KEIL
169392         "adcs	r4, r4, r6\n\t"
169393 #elif defined(__clang__)
169394         "adcs	r4, r6\n\t"
169395 #else
169396         "adc	r4, r6\n\t"
169397 #endif
169398 #ifdef WOLFSSL_KEIL
169399         "adcs	r2, r2, %[r]\n\t"
169400 #elif defined(__clang__)
169401         "adcs	r2, %[r]\n\t"
169402 #else
169403         "adc	r2, %[r]\n\t"
169404 #endif
169405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169406         "adds	r3, r3, r5\n\t"
169407 #else
169408         "add	r3, r3, r5\n\t"
169409 #endif
169410 #ifdef WOLFSSL_KEIL
169411         "adcs	r4, r4, r6\n\t"
169412 #elif defined(__clang__)
169413         "adcs	r4, r6\n\t"
169414 #else
169415         "adc	r4, r6\n\t"
169416 #endif
169417 #ifdef WOLFSSL_KEIL
169418         "adcs	r2, r2, %[r]\n\t"
169419 #elif defined(__clang__)
169420         "adcs	r2, %[r]\n\t"
169421 #else
169422         "adc	r2, %[r]\n\t"
169423 #endif
169424 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169425         "lsrs	r5, %[a], #16\n\t"
169426 #else
169427         "lsr	r5, %[a], #16\n\t"
169428 #endif
169429 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169430         "lsrs	r6, r7, #16\n\t"
169431 #else
169432         "lsr	r6, r7, #16\n\t"
169433 #endif
169434 #ifdef WOLFSSL_KEIL
169435         "muls	r6, r5, r6\n\t"
169436 #elif defined(__clang__)
169437         "muls	r6, r5\n\t"
169438 #else
169439         "mul	r6, r5\n\t"
169440 #endif
169441 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169442         "adds	r4, r4, r6\n\t"
169443 #else
169444         "add	r4, r4, r6\n\t"
169445 #endif
169446 #ifdef WOLFSSL_KEIL
169447         "adcs	r2, r2, %[r]\n\t"
169448 #elif defined(__clang__)
169449         "adcs	r2, %[r]\n\t"
169450 #else
169451         "adc	r2, %[r]\n\t"
169452 #endif
169453 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169454         "adds	r4, r4, r6\n\t"
169455 #else
169456         "add	r4, r4, r6\n\t"
169457 #endif
169458 #ifdef WOLFSSL_KEIL
169459         "adcs	r2, r2, %[r]\n\t"
169460 #elif defined(__clang__)
169461         "adcs	r2, %[r]\n\t"
169462 #else
169463         "adc	r2, %[r]\n\t"
169464 #endif
169465         "uxth	r6, r7\n\t"
169466 #ifdef WOLFSSL_KEIL
169467         "muls	r5, r6, r5\n\t"
169468 #elif defined(__clang__)
169469         "muls	r5, r6\n\t"
169470 #else
169471         "mul	r5, r6\n\t"
169472 #endif
169473 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169474         "lsrs	r6, r5, #16\n\t"
169475 #else
169476         "lsr	r6, r5, #16\n\t"
169477 #endif
169478 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169479         "lsls	r5, r5, #16\n\t"
169480 #else
169481         "lsl	r5, r5, #16\n\t"
169482 #endif
169483 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169484         "adds	r3, r3, r5\n\t"
169485 #else
169486         "add	r3, r3, r5\n\t"
169487 #endif
169488 #ifdef WOLFSSL_KEIL
169489         "adcs	r4, r4, r6\n\t"
169490 #elif defined(__clang__)
169491         "adcs	r4, r6\n\t"
169492 #else
169493         "adc	r4, r6\n\t"
169494 #endif
169495 #ifdef WOLFSSL_KEIL
169496         "adcs	r2, r2, %[r]\n\t"
169497 #elif defined(__clang__)
169498         "adcs	r2, %[r]\n\t"
169499 #else
169500         "adc	r2, %[r]\n\t"
169501 #endif
169502 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169503         "adds	r3, r3, r5\n\t"
169504 #else
169505         "add	r3, r3, r5\n\t"
169506 #endif
169507 #ifdef WOLFSSL_KEIL
169508         "adcs	r4, r4, r6\n\t"
169509 #elif defined(__clang__)
169510         "adcs	r4, r6\n\t"
169511 #else
169512         "adc	r4, r6\n\t"
169513 #endif
169514 #ifdef WOLFSSL_KEIL
169515         "adcs	r2, r2, %[r]\n\t"
169516 #elif defined(__clang__)
169517         "adcs	r2, %[r]\n\t"
169518 #else
169519         "adc	r2, %[r]\n\t"
169520 #endif
169521         "#  A[10] * A[6]\n\t"
169522         "mov	%[a], r9\n\t"
169523         "ldr	r7, [%[a], #24]\n\t"
169524         "ldr	%[a], [%[a], #40]\n\t"
169525         "uxth	r5, %[a]\n\t"
169526         "uxth	r6, r7\n\t"
169527 #ifdef WOLFSSL_KEIL
169528         "muls	r6, r5, r6\n\t"
169529 #elif defined(__clang__)
169530         "muls	r6, r5\n\t"
169531 #else
169532         "mul	r6, r5\n\t"
169533 #endif
169534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169535         "adds	r3, r3, r6\n\t"
169536 #else
169537         "add	r3, r3, r6\n\t"
169538 #endif
169539 #ifdef WOLFSSL_KEIL
169540         "adcs	r4, r4, %[r]\n\t"
169541 #elif defined(__clang__)
169542         "adcs	r4, %[r]\n\t"
169543 #else
169544         "adc	r4, %[r]\n\t"
169545 #endif
169546 #ifdef WOLFSSL_KEIL
169547         "adcs	r2, r2, %[r]\n\t"
169548 #elif defined(__clang__)
169549         "adcs	r2, %[r]\n\t"
169550 #else
169551         "adc	r2, %[r]\n\t"
169552 #endif
169553 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169554         "adds	r3, r3, r6\n\t"
169555 #else
169556         "add	r3, r3, r6\n\t"
169557 #endif
169558 #ifdef WOLFSSL_KEIL
169559         "adcs	r4, r4, %[r]\n\t"
169560 #elif defined(__clang__)
169561         "adcs	r4, %[r]\n\t"
169562 #else
169563         "adc	r4, %[r]\n\t"
169564 #endif
169565 #ifdef WOLFSSL_KEIL
169566         "adcs	r2, r2, %[r]\n\t"
169567 #elif defined(__clang__)
169568         "adcs	r2, %[r]\n\t"
169569 #else
169570         "adc	r2, %[r]\n\t"
169571 #endif
169572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169573         "lsrs	r6, r7, #16\n\t"
169574 #else
169575         "lsr	r6, r7, #16\n\t"
169576 #endif
169577 #ifdef WOLFSSL_KEIL
169578         "muls	r5, r6, r5\n\t"
169579 #elif defined(__clang__)
169580         "muls	r5, r6\n\t"
169581 #else
169582         "mul	r5, r6\n\t"
169583 #endif
169584 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169585         "lsrs	r6, r5, #16\n\t"
169586 #else
169587         "lsr	r6, r5, #16\n\t"
169588 #endif
169589 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169590         "lsls	r5, r5, #16\n\t"
169591 #else
169592         "lsl	r5, r5, #16\n\t"
169593 #endif
169594 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169595         "adds	r3, r3, r5\n\t"
169596 #else
169597         "add	r3, r3, r5\n\t"
169598 #endif
169599 #ifdef WOLFSSL_KEIL
169600         "adcs	r4, r4, r6\n\t"
169601 #elif defined(__clang__)
169602         "adcs	r4, r6\n\t"
169603 #else
169604         "adc	r4, r6\n\t"
169605 #endif
169606 #ifdef WOLFSSL_KEIL
169607         "adcs	r2, r2, %[r]\n\t"
169608 #elif defined(__clang__)
169609         "adcs	r2, %[r]\n\t"
169610 #else
169611         "adc	r2, %[r]\n\t"
169612 #endif
169613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169614         "adds	r3, r3, r5\n\t"
169615 #else
169616         "add	r3, r3, r5\n\t"
169617 #endif
169618 #ifdef WOLFSSL_KEIL
169619         "adcs	r4, r4, r6\n\t"
169620 #elif defined(__clang__)
169621         "adcs	r4, r6\n\t"
169622 #else
169623         "adc	r4, r6\n\t"
169624 #endif
169625 #ifdef WOLFSSL_KEIL
169626         "adcs	r2, r2, %[r]\n\t"
169627 #elif defined(__clang__)
169628         "adcs	r2, %[r]\n\t"
169629 #else
169630         "adc	r2, %[r]\n\t"
169631 #endif
169632 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169633         "lsrs	r5, %[a], #16\n\t"
169634 #else
169635         "lsr	r5, %[a], #16\n\t"
169636 #endif
169637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169638         "lsrs	r6, r7, #16\n\t"
169639 #else
169640         "lsr	r6, r7, #16\n\t"
169641 #endif
169642 #ifdef WOLFSSL_KEIL
169643         "muls	r6, r5, r6\n\t"
169644 #elif defined(__clang__)
169645         "muls	r6, r5\n\t"
169646 #else
169647         "mul	r6, r5\n\t"
169648 #endif
169649 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169650         "adds	r4, r4, r6\n\t"
169651 #else
169652         "add	r4, r4, r6\n\t"
169653 #endif
169654 #ifdef WOLFSSL_KEIL
169655         "adcs	r2, r2, %[r]\n\t"
169656 #elif defined(__clang__)
169657         "adcs	r2, %[r]\n\t"
169658 #else
169659         "adc	r2, %[r]\n\t"
169660 #endif
169661 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169662         "adds	r4, r4, r6\n\t"
169663 #else
169664         "add	r4, r4, r6\n\t"
169665 #endif
169666 #ifdef WOLFSSL_KEIL
169667         "adcs	r2, r2, %[r]\n\t"
169668 #elif defined(__clang__)
169669         "adcs	r2, %[r]\n\t"
169670 #else
169671         "adc	r2, %[r]\n\t"
169672 #endif
169673         "uxth	r6, r7\n\t"
169674 #ifdef WOLFSSL_KEIL
169675         "muls	r5, r6, r5\n\t"
169676 #elif defined(__clang__)
169677         "muls	r5, r6\n\t"
169678 #else
169679         "mul	r5, r6\n\t"
169680 #endif
169681 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169682         "lsrs	r6, r5, #16\n\t"
169683 #else
169684         "lsr	r6, r5, #16\n\t"
169685 #endif
169686 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169687         "lsls	r5, r5, #16\n\t"
169688 #else
169689         "lsl	r5, r5, #16\n\t"
169690 #endif
169691 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169692         "adds	r3, r3, r5\n\t"
169693 #else
169694         "add	r3, r3, r5\n\t"
169695 #endif
169696 #ifdef WOLFSSL_KEIL
169697         "adcs	r4, r4, r6\n\t"
169698 #elif defined(__clang__)
169699         "adcs	r4, r6\n\t"
169700 #else
169701         "adc	r4, r6\n\t"
169702 #endif
169703 #ifdef WOLFSSL_KEIL
169704         "adcs	r2, r2, %[r]\n\t"
169705 #elif defined(__clang__)
169706         "adcs	r2, %[r]\n\t"
169707 #else
169708         "adc	r2, %[r]\n\t"
169709 #endif
169710 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169711         "adds	r3, r3, r5\n\t"
169712 #else
169713         "add	r3, r3, r5\n\t"
169714 #endif
169715 #ifdef WOLFSSL_KEIL
169716         "adcs	r4, r4, r6\n\t"
169717 #elif defined(__clang__)
169718         "adcs	r4, r6\n\t"
169719 #else
169720         "adc	r4, r6\n\t"
169721 #endif
169722 #ifdef WOLFSSL_KEIL
169723         "adcs	r2, r2, %[r]\n\t"
169724 #elif defined(__clang__)
169725         "adcs	r2, %[r]\n\t"
169726 #else
169727         "adc	r2, %[r]\n\t"
169728 #endif
169729         "#  A[9] * A[7]\n\t"
169730         "mov	%[a], r9\n\t"
169731         "ldr	r7, [%[a], #28]\n\t"
169732         "ldr	%[a], [%[a], #36]\n\t"
169733         "uxth	r5, %[a]\n\t"
169734         "uxth	r6, r7\n\t"
169735 #ifdef WOLFSSL_KEIL
169736         "muls	r6, r5, r6\n\t"
169737 #elif defined(__clang__)
169738         "muls	r6, r5\n\t"
169739 #else
169740         "mul	r6, r5\n\t"
169741 #endif
169742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169743         "adds	r3, r3, r6\n\t"
169744 #else
169745         "add	r3, r3, r6\n\t"
169746 #endif
169747 #ifdef WOLFSSL_KEIL
169748         "adcs	r4, r4, %[r]\n\t"
169749 #elif defined(__clang__)
169750         "adcs	r4, %[r]\n\t"
169751 #else
169752         "adc	r4, %[r]\n\t"
169753 #endif
169754 #ifdef WOLFSSL_KEIL
169755         "adcs	r2, r2, %[r]\n\t"
169756 #elif defined(__clang__)
169757         "adcs	r2, %[r]\n\t"
169758 #else
169759         "adc	r2, %[r]\n\t"
169760 #endif
169761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169762         "adds	r3, r3, r6\n\t"
169763 #else
169764         "add	r3, r3, r6\n\t"
169765 #endif
169766 #ifdef WOLFSSL_KEIL
169767         "adcs	r4, r4, %[r]\n\t"
169768 #elif defined(__clang__)
169769         "adcs	r4, %[r]\n\t"
169770 #else
169771         "adc	r4, %[r]\n\t"
169772 #endif
169773 #ifdef WOLFSSL_KEIL
169774         "adcs	r2, r2, %[r]\n\t"
169775 #elif defined(__clang__)
169776         "adcs	r2, %[r]\n\t"
169777 #else
169778         "adc	r2, %[r]\n\t"
169779 #endif
169780 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169781         "lsrs	r6, r7, #16\n\t"
169782 #else
169783         "lsr	r6, r7, #16\n\t"
169784 #endif
169785 #ifdef WOLFSSL_KEIL
169786         "muls	r5, r6, r5\n\t"
169787 #elif defined(__clang__)
169788         "muls	r5, r6\n\t"
169789 #else
169790         "mul	r5, r6\n\t"
169791 #endif
169792 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169793         "lsrs	r6, r5, #16\n\t"
169794 #else
169795         "lsr	r6, r5, #16\n\t"
169796 #endif
169797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169798         "lsls	r5, r5, #16\n\t"
169799 #else
169800         "lsl	r5, r5, #16\n\t"
169801 #endif
169802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169803         "adds	r3, r3, r5\n\t"
169804 #else
169805         "add	r3, r3, r5\n\t"
169806 #endif
169807 #ifdef WOLFSSL_KEIL
169808         "adcs	r4, r4, r6\n\t"
169809 #elif defined(__clang__)
169810         "adcs	r4, r6\n\t"
169811 #else
169812         "adc	r4, r6\n\t"
169813 #endif
169814 #ifdef WOLFSSL_KEIL
169815         "adcs	r2, r2, %[r]\n\t"
169816 #elif defined(__clang__)
169817         "adcs	r2, %[r]\n\t"
169818 #else
169819         "adc	r2, %[r]\n\t"
169820 #endif
169821 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169822         "adds	r3, r3, r5\n\t"
169823 #else
169824         "add	r3, r3, r5\n\t"
169825 #endif
169826 #ifdef WOLFSSL_KEIL
169827         "adcs	r4, r4, r6\n\t"
169828 #elif defined(__clang__)
169829         "adcs	r4, r6\n\t"
169830 #else
169831         "adc	r4, r6\n\t"
169832 #endif
169833 #ifdef WOLFSSL_KEIL
169834         "adcs	r2, r2, %[r]\n\t"
169835 #elif defined(__clang__)
169836         "adcs	r2, %[r]\n\t"
169837 #else
169838         "adc	r2, %[r]\n\t"
169839 #endif
169840 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169841         "lsrs	r5, %[a], #16\n\t"
169842 #else
169843         "lsr	r5, %[a], #16\n\t"
169844 #endif
169845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169846         "lsrs	r6, r7, #16\n\t"
169847 #else
169848         "lsr	r6, r7, #16\n\t"
169849 #endif
169850 #ifdef WOLFSSL_KEIL
169851         "muls	r6, r5, r6\n\t"
169852 #elif defined(__clang__)
169853         "muls	r6, r5\n\t"
169854 #else
169855         "mul	r6, r5\n\t"
169856 #endif
169857 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169858         "adds	r4, r4, r6\n\t"
169859 #else
169860         "add	r4, r4, r6\n\t"
169861 #endif
169862 #ifdef WOLFSSL_KEIL
169863         "adcs	r2, r2, %[r]\n\t"
169864 #elif defined(__clang__)
169865         "adcs	r2, %[r]\n\t"
169866 #else
169867         "adc	r2, %[r]\n\t"
169868 #endif
169869 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169870         "adds	r4, r4, r6\n\t"
169871 #else
169872         "add	r4, r4, r6\n\t"
169873 #endif
169874 #ifdef WOLFSSL_KEIL
169875         "adcs	r2, r2, %[r]\n\t"
169876 #elif defined(__clang__)
169877         "adcs	r2, %[r]\n\t"
169878 #else
169879         "adc	r2, %[r]\n\t"
169880 #endif
169881         "uxth	r6, r7\n\t"
169882 #ifdef WOLFSSL_KEIL
169883         "muls	r5, r6, r5\n\t"
169884 #elif defined(__clang__)
169885         "muls	r5, r6\n\t"
169886 #else
169887         "mul	r5, r6\n\t"
169888 #endif
169889 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169890         "lsrs	r6, r5, #16\n\t"
169891 #else
169892         "lsr	r6, r5, #16\n\t"
169893 #endif
169894 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169895         "lsls	r5, r5, #16\n\t"
169896 #else
169897         "lsl	r5, r5, #16\n\t"
169898 #endif
169899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169900         "adds	r3, r3, r5\n\t"
169901 #else
169902         "add	r3, r3, r5\n\t"
169903 #endif
169904 #ifdef WOLFSSL_KEIL
169905         "adcs	r4, r4, r6\n\t"
169906 #elif defined(__clang__)
169907         "adcs	r4, r6\n\t"
169908 #else
169909         "adc	r4, r6\n\t"
169910 #endif
169911 #ifdef WOLFSSL_KEIL
169912         "adcs	r2, r2, %[r]\n\t"
169913 #elif defined(__clang__)
169914         "adcs	r2, %[r]\n\t"
169915 #else
169916         "adc	r2, %[r]\n\t"
169917 #endif
169918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169919         "adds	r3, r3, r5\n\t"
169920 #else
169921         "add	r3, r3, r5\n\t"
169922 #endif
169923 #ifdef WOLFSSL_KEIL
169924         "adcs	r4, r4, r6\n\t"
169925 #elif defined(__clang__)
169926         "adcs	r4, r6\n\t"
169927 #else
169928         "adc	r4, r6\n\t"
169929 #endif
169930 #ifdef WOLFSSL_KEIL
169931         "adcs	r2, r2, %[r]\n\t"
169932 #elif defined(__clang__)
169933         "adcs	r2, %[r]\n\t"
169934 #else
169935         "adc	r2, %[r]\n\t"
169936 #endif
169937         "#  A[8] * A[8]\n\t"
169938         "mov	%[a], r9\n\t"
169939         "ldr	r7, [%[a], #32]\n\t"
169940 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169941         "lsrs	r6, r7, #16\n\t"
169942 #else
169943         "lsr	r6, r7, #16\n\t"
169944 #endif
169945         "uxth	r5, r7\n\t"
169946 #ifdef WOLFSSL_KEIL
169947         "muls	r5, r5, r5\n\t"
169948 #elif defined(__clang__)
169949         "muls	r5, r5\n\t"
169950 #else
169951         "mul	r5, r5\n\t"
169952 #endif
169953 #ifdef WOLFSSL_KEIL
169954         "muls	r6, r6, r6\n\t"
169955 #elif defined(__clang__)
169956         "muls	r6, r6\n\t"
169957 #else
169958         "mul	r6, r6\n\t"
169959 #endif
169960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169961         "adds	r3, r3, r5\n\t"
169962 #else
169963         "add	r3, r3, r5\n\t"
169964 #endif
169965 #ifdef WOLFSSL_KEIL
169966         "adcs	r4, r4, r6\n\t"
169967 #elif defined(__clang__)
169968         "adcs	r4, r6\n\t"
169969 #else
169970         "adc	r4, r6\n\t"
169971 #endif
169972 #ifdef WOLFSSL_KEIL
169973         "adcs	r2, r2, %[r]\n\t"
169974 #elif defined(__clang__)
169975         "adcs	r2, %[r]\n\t"
169976 #else
169977         "adc	r2, %[r]\n\t"
169978 #endif
169979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169980         "lsrs	r6, r7, #16\n\t"
169981 #else
169982         "lsr	r6, r7, #16\n\t"
169983 #endif
169984         "uxth	r5, r7\n\t"
169985 #ifdef WOLFSSL_KEIL
169986         "muls	r5, r6, r5\n\t"
169987 #elif defined(__clang__)
169988         "muls	r5, r6\n\t"
169989 #else
169990         "mul	r5, r6\n\t"
169991 #endif
169992 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169993         "lsrs	r6, r5, #15\n\t"
169994 #else
169995         "lsr	r6, r5, #15\n\t"
169996 #endif
169997 #if defined(__clang__) || defined(WOLFSSL_KEIL)
169998         "lsls	r5, r5, #17\n\t"
169999 #else
170000         "lsl	r5, r5, #17\n\t"
170001 #endif
170002 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170003         "adds	r3, r3, r5\n\t"
170004 #else
170005         "add	r3, r3, r5\n\t"
170006 #endif
170007 #ifdef WOLFSSL_KEIL
170008         "adcs	r4, r4, r6\n\t"
170009 #elif defined(__clang__)
170010         "adcs	r4, r6\n\t"
170011 #else
170012         "adc	r4, r6\n\t"
170013 #endif
170014 #ifdef WOLFSSL_KEIL
170015         "adcs	r2, r2, %[r]\n\t"
170016 #elif defined(__clang__)
170017         "adcs	r2, %[r]\n\t"
170018 #else
170019         "adc	r2, %[r]\n\t"
170020 #endif
170021         "mov	%[r], r8\n\t"
170022         "str	r3, [%[r], #64]\n\t"
170023         "movs	%[r], #0\n\t"
170024         "movs	%[a], #48\n\t"
170025         "add	%[a], %[a], r9\n\t"
170026         "ldm	%[a]!, {r5, r6}\n\t"
170027         "mov	r10, r5\n\t"
170028         "mov	r11, r6\n\t"
170029         "ldm	%[a]!, {r5, r6}\n\t"
170030         "mov	r12, r5\n\t"
170031         "mov	lr, r6\n\t"
170032         "mov	%[a], r9\n\t"
170033         "#  A[9] * A[8]\n\t"
170034         "movs	r3, #0\n\t"
170035         "ldr	%[a], [%[a], #36]\n\t"
170036         "uxth	r5, %[a]\n\t"
170037         "uxth	r6, r7\n\t"
170038 #ifdef WOLFSSL_KEIL
170039         "muls	r6, r5, r6\n\t"
170040 #elif defined(__clang__)
170041         "muls	r6, r5\n\t"
170042 #else
170043         "mul	r6, r5\n\t"
170044 #endif
170045 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170046         "adds	r4, r4, r6\n\t"
170047 #else
170048         "add	r4, r4, r6\n\t"
170049 #endif
170050 #ifdef WOLFSSL_KEIL
170051         "adcs	r2, r2, %[r]\n\t"
170052 #elif defined(__clang__)
170053         "adcs	r2, %[r]\n\t"
170054 #else
170055         "adc	r2, %[r]\n\t"
170056 #endif
170057 #ifdef WOLFSSL_KEIL
170058         "adcs	r3, r3, %[r]\n\t"
170059 #elif defined(__clang__)
170060         "adcs	r3, %[r]\n\t"
170061 #else
170062         "adc	r3, %[r]\n\t"
170063 #endif
170064 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170065         "adds	r4, r4, r6\n\t"
170066 #else
170067         "add	r4, r4, r6\n\t"
170068 #endif
170069 #ifdef WOLFSSL_KEIL
170070         "adcs	r2, r2, %[r]\n\t"
170071 #elif defined(__clang__)
170072         "adcs	r2, %[r]\n\t"
170073 #else
170074         "adc	r2, %[r]\n\t"
170075 #endif
170076 #ifdef WOLFSSL_KEIL
170077         "adcs	r3, r3, %[r]\n\t"
170078 #elif defined(__clang__)
170079         "adcs	r3, %[r]\n\t"
170080 #else
170081         "adc	r3, %[r]\n\t"
170082 #endif
170083 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170084         "lsrs	r6, r7, #16\n\t"
170085 #else
170086         "lsr	r6, r7, #16\n\t"
170087 #endif
170088 #ifdef WOLFSSL_KEIL
170089         "muls	r5, r6, r5\n\t"
170090 #elif defined(__clang__)
170091         "muls	r5, r6\n\t"
170092 #else
170093         "mul	r5, r6\n\t"
170094 #endif
170095 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170096         "lsrs	r6, r5, #16\n\t"
170097 #else
170098         "lsr	r6, r5, #16\n\t"
170099 #endif
170100 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170101         "lsls	r5, r5, #16\n\t"
170102 #else
170103         "lsl	r5, r5, #16\n\t"
170104 #endif
170105 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170106         "adds	r4, r4, r5\n\t"
170107 #else
170108         "add	r4, r4, r5\n\t"
170109 #endif
170110 #ifdef WOLFSSL_KEIL
170111         "adcs	r2, r2, r6\n\t"
170112 #elif defined(__clang__)
170113         "adcs	r2, r6\n\t"
170114 #else
170115         "adc	r2, r6\n\t"
170116 #endif
170117 #ifdef WOLFSSL_KEIL
170118         "adcs	r3, r3, %[r]\n\t"
170119 #elif defined(__clang__)
170120         "adcs	r3, %[r]\n\t"
170121 #else
170122         "adc	r3, %[r]\n\t"
170123 #endif
170124 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170125         "adds	r4, r4, r5\n\t"
170126 #else
170127         "add	r4, r4, r5\n\t"
170128 #endif
170129 #ifdef WOLFSSL_KEIL
170130         "adcs	r2, r2, r6\n\t"
170131 #elif defined(__clang__)
170132         "adcs	r2, r6\n\t"
170133 #else
170134         "adc	r2, r6\n\t"
170135 #endif
170136 #ifdef WOLFSSL_KEIL
170137         "adcs	r3, r3, %[r]\n\t"
170138 #elif defined(__clang__)
170139         "adcs	r3, %[r]\n\t"
170140 #else
170141         "adc	r3, %[r]\n\t"
170142 #endif
170143 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170144         "lsrs	r5, %[a], #16\n\t"
170145 #else
170146         "lsr	r5, %[a], #16\n\t"
170147 #endif
170148 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170149         "lsrs	r6, r7, #16\n\t"
170150 #else
170151         "lsr	r6, r7, #16\n\t"
170152 #endif
170153 #ifdef WOLFSSL_KEIL
170154         "muls	r6, r5, r6\n\t"
170155 #elif defined(__clang__)
170156         "muls	r6, r5\n\t"
170157 #else
170158         "mul	r6, r5\n\t"
170159 #endif
170160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170161         "adds	r2, r2, r6\n\t"
170162 #else
170163         "add	r2, r2, r6\n\t"
170164 #endif
170165 #ifdef WOLFSSL_KEIL
170166         "adcs	r3, r3, %[r]\n\t"
170167 #elif defined(__clang__)
170168         "adcs	r3, %[r]\n\t"
170169 #else
170170         "adc	r3, %[r]\n\t"
170171 #endif
170172 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170173         "adds	r2, r2, r6\n\t"
170174 #else
170175         "add	r2, r2, r6\n\t"
170176 #endif
170177 #ifdef WOLFSSL_KEIL
170178         "adcs	r3, r3, %[r]\n\t"
170179 #elif defined(__clang__)
170180         "adcs	r3, %[r]\n\t"
170181 #else
170182         "adc	r3, %[r]\n\t"
170183 #endif
170184         "uxth	r6, r7\n\t"
170185 #ifdef WOLFSSL_KEIL
170186         "muls	r5, r6, r5\n\t"
170187 #elif defined(__clang__)
170188         "muls	r5, r6\n\t"
170189 #else
170190         "mul	r5, r6\n\t"
170191 #endif
170192 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170193         "lsrs	r6, r5, #16\n\t"
170194 #else
170195         "lsr	r6, r5, #16\n\t"
170196 #endif
170197 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170198         "lsls	r5, r5, #16\n\t"
170199 #else
170200         "lsl	r5, r5, #16\n\t"
170201 #endif
170202 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170203         "adds	r4, r4, r5\n\t"
170204 #else
170205         "add	r4, r4, r5\n\t"
170206 #endif
170207 #ifdef WOLFSSL_KEIL
170208         "adcs	r2, r2, r6\n\t"
170209 #elif defined(__clang__)
170210         "adcs	r2, r6\n\t"
170211 #else
170212         "adc	r2, r6\n\t"
170213 #endif
170214 #ifdef WOLFSSL_KEIL
170215         "adcs	r3, r3, %[r]\n\t"
170216 #elif defined(__clang__)
170217         "adcs	r3, %[r]\n\t"
170218 #else
170219         "adc	r3, %[r]\n\t"
170220 #endif
170221 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170222         "adds	r4, r4, r5\n\t"
170223 #else
170224         "add	r4, r4, r5\n\t"
170225 #endif
170226 #ifdef WOLFSSL_KEIL
170227         "adcs	r2, r2, r6\n\t"
170228 #elif defined(__clang__)
170229         "adcs	r2, r6\n\t"
170230 #else
170231         "adc	r2, r6\n\t"
170232 #endif
170233 #ifdef WOLFSSL_KEIL
170234         "adcs	r3, r3, %[r]\n\t"
170235 #elif defined(__clang__)
170236         "adcs	r3, %[r]\n\t"
170237 #else
170238         "adc	r3, %[r]\n\t"
170239 #endif
170240         "#  A[10] * A[7]\n\t"
170241         "mov	%[a], r9\n\t"
170242         "ldr	r7, [%[a], #28]\n\t"
170243         "ldr	%[a], [%[a], #40]\n\t"
170244         "uxth	r5, %[a]\n\t"
170245         "uxth	r6, r7\n\t"
170246 #ifdef WOLFSSL_KEIL
170247         "muls	r6, r5, r6\n\t"
170248 #elif defined(__clang__)
170249         "muls	r6, r5\n\t"
170250 #else
170251         "mul	r6, r5\n\t"
170252 #endif
170253 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170254         "adds	r4, r4, r6\n\t"
170255 #else
170256         "add	r4, r4, r6\n\t"
170257 #endif
170258 #ifdef WOLFSSL_KEIL
170259         "adcs	r2, r2, %[r]\n\t"
170260 #elif defined(__clang__)
170261         "adcs	r2, %[r]\n\t"
170262 #else
170263         "adc	r2, %[r]\n\t"
170264 #endif
170265 #ifdef WOLFSSL_KEIL
170266         "adcs	r3, r3, %[r]\n\t"
170267 #elif defined(__clang__)
170268         "adcs	r3, %[r]\n\t"
170269 #else
170270         "adc	r3, %[r]\n\t"
170271 #endif
170272 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170273         "adds	r4, r4, r6\n\t"
170274 #else
170275         "add	r4, r4, r6\n\t"
170276 #endif
170277 #ifdef WOLFSSL_KEIL
170278         "adcs	r2, r2, %[r]\n\t"
170279 #elif defined(__clang__)
170280         "adcs	r2, %[r]\n\t"
170281 #else
170282         "adc	r2, %[r]\n\t"
170283 #endif
170284 #ifdef WOLFSSL_KEIL
170285         "adcs	r3, r3, %[r]\n\t"
170286 #elif defined(__clang__)
170287         "adcs	r3, %[r]\n\t"
170288 #else
170289         "adc	r3, %[r]\n\t"
170290 #endif
170291 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170292         "lsrs	r6, r7, #16\n\t"
170293 #else
170294         "lsr	r6, r7, #16\n\t"
170295 #endif
170296 #ifdef WOLFSSL_KEIL
170297         "muls	r5, r6, r5\n\t"
170298 #elif defined(__clang__)
170299         "muls	r5, r6\n\t"
170300 #else
170301         "mul	r5, r6\n\t"
170302 #endif
170303 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170304         "lsrs	r6, r5, #16\n\t"
170305 #else
170306         "lsr	r6, r5, #16\n\t"
170307 #endif
170308 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170309         "lsls	r5, r5, #16\n\t"
170310 #else
170311         "lsl	r5, r5, #16\n\t"
170312 #endif
170313 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170314         "adds	r4, r4, r5\n\t"
170315 #else
170316         "add	r4, r4, r5\n\t"
170317 #endif
170318 #ifdef WOLFSSL_KEIL
170319         "adcs	r2, r2, r6\n\t"
170320 #elif defined(__clang__)
170321         "adcs	r2, r6\n\t"
170322 #else
170323         "adc	r2, r6\n\t"
170324 #endif
170325 #ifdef WOLFSSL_KEIL
170326         "adcs	r3, r3, %[r]\n\t"
170327 #elif defined(__clang__)
170328         "adcs	r3, %[r]\n\t"
170329 #else
170330         "adc	r3, %[r]\n\t"
170331 #endif
170332 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170333         "adds	r4, r4, r5\n\t"
170334 #else
170335         "add	r4, r4, r5\n\t"
170336 #endif
170337 #ifdef WOLFSSL_KEIL
170338         "adcs	r2, r2, r6\n\t"
170339 #elif defined(__clang__)
170340         "adcs	r2, r6\n\t"
170341 #else
170342         "adc	r2, r6\n\t"
170343 #endif
170344 #ifdef WOLFSSL_KEIL
170345         "adcs	r3, r3, %[r]\n\t"
170346 #elif defined(__clang__)
170347         "adcs	r3, %[r]\n\t"
170348 #else
170349         "adc	r3, %[r]\n\t"
170350 #endif
170351 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170352         "lsrs	r5, %[a], #16\n\t"
170353 #else
170354         "lsr	r5, %[a], #16\n\t"
170355 #endif
170356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170357         "lsrs	r6, r7, #16\n\t"
170358 #else
170359         "lsr	r6, r7, #16\n\t"
170360 #endif
170361 #ifdef WOLFSSL_KEIL
170362         "muls	r6, r5, r6\n\t"
170363 #elif defined(__clang__)
170364         "muls	r6, r5\n\t"
170365 #else
170366         "mul	r6, r5\n\t"
170367 #endif
170368 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170369         "adds	r2, r2, r6\n\t"
170370 #else
170371         "add	r2, r2, r6\n\t"
170372 #endif
170373 #ifdef WOLFSSL_KEIL
170374         "adcs	r3, r3, %[r]\n\t"
170375 #elif defined(__clang__)
170376         "adcs	r3, %[r]\n\t"
170377 #else
170378         "adc	r3, %[r]\n\t"
170379 #endif
170380 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170381         "adds	r2, r2, r6\n\t"
170382 #else
170383         "add	r2, r2, r6\n\t"
170384 #endif
170385 #ifdef WOLFSSL_KEIL
170386         "adcs	r3, r3, %[r]\n\t"
170387 #elif defined(__clang__)
170388         "adcs	r3, %[r]\n\t"
170389 #else
170390         "adc	r3, %[r]\n\t"
170391 #endif
170392         "uxth	r6, r7\n\t"
170393 #ifdef WOLFSSL_KEIL
170394         "muls	r5, r6, r5\n\t"
170395 #elif defined(__clang__)
170396         "muls	r5, r6\n\t"
170397 #else
170398         "mul	r5, r6\n\t"
170399 #endif
170400 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170401         "lsrs	r6, r5, #16\n\t"
170402 #else
170403         "lsr	r6, r5, #16\n\t"
170404 #endif
170405 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170406         "lsls	r5, r5, #16\n\t"
170407 #else
170408         "lsl	r5, r5, #16\n\t"
170409 #endif
170410 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170411         "adds	r4, r4, r5\n\t"
170412 #else
170413         "add	r4, r4, r5\n\t"
170414 #endif
170415 #ifdef WOLFSSL_KEIL
170416         "adcs	r2, r2, r6\n\t"
170417 #elif defined(__clang__)
170418         "adcs	r2, r6\n\t"
170419 #else
170420         "adc	r2, r6\n\t"
170421 #endif
170422 #ifdef WOLFSSL_KEIL
170423         "adcs	r3, r3, %[r]\n\t"
170424 #elif defined(__clang__)
170425         "adcs	r3, %[r]\n\t"
170426 #else
170427         "adc	r3, %[r]\n\t"
170428 #endif
170429 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170430         "adds	r4, r4, r5\n\t"
170431 #else
170432         "add	r4, r4, r5\n\t"
170433 #endif
170434 #ifdef WOLFSSL_KEIL
170435         "adcs	r2, r2, r6\n\t"
170436 #elif defined(__clang__)
170437         "adcs	r2, r6\n\t"
170438 #else
170439         "adc	r2, r6\n\t"
170440 #endif
170441 #ifdef WOLFSSL_KEIL
170442         "adcs	r3, r3, %[r]\n\t"
170443 #elif defined(__clang__)
170444         "adcs	r3, %[r]\n\t"
170445 #else
170446         "adc	r3, %[r]\n\t"
170447 #endif
170448         "#  A[11] * A[6]\n\t"
170449         "mov	%[a], r9\n\t"
170450         "ldr	r7, [%[a], #24]\n\t"
170451         "ldr	%[a], [%[a], #44]\n\t"
170452         "uxth	r5, %[a]\n\t"
170453         "uxth	r6, r7\n\t"
170454 #ifdef WOLFSSL_KEIL
170455         "muls	r6, r5, r6\n\t"
170456 #elif defined(__clang__)
170457         "muls	r6, r5\n\t"
170458 #else
170459         "mul	r6, r5\n\t"
170460 #endif
170461 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170462         "adds	r4, r4, r6\n\t"
170463 #else
170464         "add	r4, r4, r6\n\t"
170465 #endif
170466 #ifdef WOLFSSL_KEIL
170467         "adcs	r2, r2, %[r]\n\t"
170468 #elif defined(__clang__)
170469         "adcs	r2, %[r]\n\t"
170470 #else
170471         "adc	r2, %[r]\n\t"
170472 #endif
170473 #ifdef WOLFSSL_KEIL
170474         "adcs	r3, r3, %[r]\n\t"
170475 #elif defined(__clang__)
170476         "adcs	r3, %[r]\n\t"
170477 #else
170478         "adc	r3, %[r]\n\t"
170479 #endif
170480 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170481         "adds	r4, r4, r6\n\t"
170482 #else
170483         "add	r4, r4, r6\n\t"
170484 #endif
170485 #ifdef WOLFSSL_KEIL
170486         "adcs	r2, r2, %[r]\n\t"
170487 #elif defined(__clang__)
170488         "adcs	r2, %[r]\n\t"
170489 #else
170490         "adc	r2, %[r]\n\t"
170491 #endif
170492 #ifdef WOLFSSL_KEIL
170493         "adcs	r3, r3, %[r]\n\t"
170494 #elif defined(__clang__)
170495         "adcs	r3, %[r]\n\t"
170496 #else
170497         "adc	r3, %[r]\n\t"
170498 #endif
170499 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170500         "lsrs	r6, r7, #16\n\t"
170501 #else
170502         "lsr	r6, r7, #16\n\t"
170503 #endif
170504 #ifdef WOLFSSL_KEIL
170505         "muls	r5, r6, r5\n\t"
170506 #elif defined(__clang__)
170507         "muls	r5, r6\n\t"
170508 #else
170509         "mul	r5, r6\n\t"
170510 #endif
170511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170512         "lsrs	r6, r5, #16\n\t"
170513 #else
170514         "lsr	r6, r5, #16\n\t"
170515 #endif
170516 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170517         "lsls	r5, r5, #16\n\t"
170518 #else
170519         "lsl	r5, r5, #16\n\t"
170520 #endif
170521 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170522         "adds	r4, r4, r5\n\t"
170523 #else
170524         "add	r4, r4, r5\n\t"
170525 #endif
170526 #ifdef WOLFSSL_KEIL
170527         "adcs	r2, r2, r6\n\t"
170528 #elif defined(__clang__)
170529         "adcs	r2, r6\n\t"
170530 #else
170531         "adc	r2, r6\n\t"
170532 #endif
170533 #ifdef WOLFSSL_KEIL
170534         "adcs	r3, r3, %[r]\n\t"
170535 #elif defined(__clang__)
170536         "adcs	r3, %[r]\n\t"
170537 #else
170538         "adc	r3, %[r]\n\t"
170539 #endif
170540 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170541         "adds	r4, r4, r5\n\t"
170542 #else
170543         "add	r4, r4, r5\n\t"
170544 #endif
170545 #ifdef WOLFSSL_KEIL
170546         "adcs	r2, r2, r6\n\t"
170547 #elif defined(__clang__)
170548         "adcs	r2, r6\n\t"
170549 #else
170550         "adc	r2, r6\n\t"
170551 #endif
170552 #ifdef WOLFSSL_KEIL
170553         "adcs	r3, r3, %[r]\n\t"
170554 #elif defined(__clang__)
170555         "adcs	r3, %[r]\n\t"
170556 #else
170557         "adc	r3, %[r]\n\t"
170558 #endif
170559 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170560         "lsrs	r5, %[a], #16\n\t"
170561 #else
170562         "lsr	r5, %[a], #16\n\t"
170563 #endif
170564 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170565         "lsrs	r6, r7, #16\n\t"
170566 #else
170567         "lsr	r6, r7, #16\n\t"
170568 #endif
170569 #ifdef WOLFSSL_KEIL
170570         "muls	r6, r5, r6\n\t"
170571 #elif defined(__clang__)
170572         "muls	r6, r5\n\t"
170573 #else
170574         "mul	r6, r5\n\t"
170575 #endif
170576 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170577         "adds	r2, r2, r6\n\t"
170578 #else
170579         "add	r2, r2, r6\n\t"
170580 #endif
170581 #ifdef WOLFSSL_KEIL
170582         "adcs	r3, r3, %[r]\n\t"
170583 #elif defined(__clang__)
170584         "adcs	r3, %[r]\n\t"
170585 #else
170586         "adc	r3, %[r]\n\t"
170587 #endif
170588 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170589         "adds	r2, r2, r6\n\t"
170590 #else
170591         "add	r2, r2, r6\n\t"
170592 #endif
170593 #ifdef WOLFSSL_KEIL
170594         "adcs	r3, r3, %[r]\n\t"
170595 #elif defined(__clang__)
170596         "adcs	r3, %[r]\n\t"
170597 #else
170598         "adc	r3, %[r]\n\t"
170599 #endif
170600         "uxth	r6, r7\n\t"
170601 #ifdef WOLFSSL_KEIL
170602         "muls	r5, r6, r5\n\t"
170603 #elif defined(__clang__)
170604         "muls	r5, r6\n\t"
170605 #else
170606         "mul	r5, r6\n\t"
170607 #endif
170608 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170609         "lsrs	r6, r5, #16\n\t"
170610 #else
170611         "lsr	r6, r5, #16\n\t"
170612 #endif
170613 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170614         "lsls	r5, r5, #16\n\t"
170615 #else
170616         "lsl	r5, r5, #16\n\t"
170617 #endif
170618 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170619         "adds	r4, r4, r5\n\t"
170620 #else
170621         "add	r4, r4, r5\n\t"
170622 #endif
170623 #ifdef WOLFSSL_KEIL
170624         "adcs	r2, r2, r6\n\t"
170625 #elif defined(__clang__)
170626         "adcs	r2, r6\n\t"
170627 #else
170628         "adc	r2, r6\n\t"
170629 #endif
170630 #ifdef WOLFSSL_KEIL
170631         "adcs	r3, r3, %[r]\n\t"
170632 #elif defined(__clang__)
170633         "adcs	r3, %[r]\n\t"
170634 #else
170635         "adc	r3, %[r]\n\t"
170636 #endif
170637 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170638         "adds	r4, r4, r5\n\t"
170639 #else
170640         "add	r4, r4, r5\n\t"
170641 #endif
170642 #ifdef WOLFSSL_KEIL
170643         "adcs	r2, r2, r6\n\t"
170644 #elif defined(__clang__)
170645         "adcs	r2, r6\n\t"
170646 #else
170647         "adc	r2, r6\n\t"
170648 #endif
170649 #ifdef WOLFSSL_KEIL
170650         "adcs	r3, r3, %[r]\n\t"
170651 #elif defined(__clang__)
170652         "adcs	r3, %[r]\n\t"
170653 #else
170654         "adc	r3, %[r]\n\t"
170655 #endif
170656         "#  A[12] * A[5]\n\t"
170657         "mov	%[a], r9\n\t"
170658         "ldr	r7, [%[a], #20]\n\t"
170659         "mov	%[a], r10\n\t"
170660         "uxth	r5, %[a]\n\t"
170661         "uxth	r6, r7\n\t"
170662 #ifdef WOLFSSL_KEIL
170663         "muls	r6, r5, r6\n\t"
170664 #elif defined(__clang__)
170665         "muls	r6, r5\n\t"
170666 #else
170667         "mul	r6, r5\n\t"
170668 #endif
170669 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170670         "adds	r4, r4, r6\n\t"
170671 #else
170672         "add	r4, r4, r6\n\t"
170673 #endif
170674 #ifdef WOLFSSL_KEIL
170675         "adcs	r2, r2, %[r]\n\t"
170676 #elif defined(__clang__)
170677         "adcs	r2, %[r]\n\t"
170678 #else
170679         "adc	r2, %[r]\n\t"
170680 #endif
170681 #ifdef WOLFSSL_KEIL
170682         "adcs	r3, r3, %[r]\n\t"
170683 #elif defined(__clang__)
170684         "adcs	r3, %[r]\n\t"
170685 #else
170686         "adc	r3, %[r]\n\t"
170687 #endif
170688 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170689         "adds	r4, r4, r6\n\t"
170690 #else
170691         "add	r4, r4, r6\n\t"
170692 #endif
170693 #ifdef WOLFSSL_KEIL
170694         "adcs	r2, r2, %[r]\n\t"
170695 #elif defined(__clang__)
170696         "adcs	r2, %[r]\n\t"
170697 #else
170698         "adc	r2, %[r]\n\t"
170699 #endif
170700 #ifdef WOLFSSL_KEIL
170701         "adcs	r3, r3, %[r]\n\t"
170702 #elif defined(__clang__)
170703         "adcs	r3, %[r]\n\t"
170704 #else
170705         "adc	r3, %[r]\n\t"
170706 #endif
170707 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170708         "lsrs	r6, r7, #16\n\t"
170709 #else
170710         "lsr	r6, r7, #16\n\t"
170711 #endif
170712 #ifdef WOLFSSL_KEIL
170713         "muls	r5, r6, r5\n\t"
170714 #elif defined(__clang__)
170715         "muls	r5, r6\n\t"
170716 #else
170717         "mul	r5, r6\n\t"
170718 #endif
170719 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170720         "lsrs	r6, r5, #16\n\t"
170721 #else
170722         "lsr	r6, r5, #16\n\t"
170723 #endif
170724 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170725         "lsls	r5, r5, #16\n\t"
170726 #else
170727         "lsl	r5, r5, #16\n\t"
170728 #endif
170729 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170730         "adds	r4, r4, r5\n\t"
170731 #else
170732         "add	r4, r4, r5\n\t"
170733 #endif
170734 #ifdef WOLFSSL_KEIL
170735         "adcs	r2, r2, r6\n\t"
170736 #elif defined(__clang__)
170737         "adcs	r2, r6\n\t"
170738 #else
170739         "adc	r2, r6\n\t"
170740 #endif
170741 #ifdef WOLFSSL_KEIL
170742         "adcs	r3, r3, %[r]\n\t"
170743 #elif defined(__clang__)
170744         "adcs	r3, %[r]\n\t"
170745 #else
170746         "adc	r3, %[r]\n\t"
170747 #endif
170748 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170749         "adds	r4, r4, r5\n\t"
170750 #else
170751         "add	r4, r4, r5\n\t"
170752 #endif
170753 #ifdef WOLFSSL_KEIL
170754         "adcs	r2, r2, r6\n\t"
170755 #elif defined(__clang__)
170756         "adcs	r2, r6\n\t"
170757 #else
170758         "adc	r2, r6\n\t"
170759 #endif
170760 #ifdef WOLFSSL_KEIL
170761         "adcs	r3, r3, %[r]\n\t"
170762 #elif defined(__clang__)
170763         "adcs	r3, %[r]\n\t"
170764 #else
170765         "adc	r3, %[r]\n\t"
170766 #endif
170767 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170768         "lsrs	r5, %[a], #16\n\t"
170769 #else
170770         "lsr	r5, %[a], #16\n\t"
170771 #endif
170772 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170773         "lsrs	r6, r7, #16\n\t"
170774 #else
170775         "lsr	r6, r7, #16\n\t"
170776 #endif
170777 #ifdef WOLFSSL_KEIL
170778         "muls	r6, r5, r6\n\t"
170779 #elif defined(__clang__)
170780         "muls	r6, r5\n\t"
170781 #else
170782         "mul	r6, r5\n\t"
170783 #endif
170784 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170785         "adds	r2, r2, r6\n\t"
170786 #else
170787         "add	r2, r2, r6\n\t"
170788 #endif
170789 #ifdef WOLFSSL_KEIL
170790         "adcs	r3, r3, %[r]\n\t"
170791 #elif defined(__clang__)
170792         "adcs	r3, %[r]\n\t"
170793 #else
170794         "adc	r3, %[r]\n\t"
170795 #endif
170796 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170797         "adds	r2, r2, r6\n\t"
170798 #else
170799         "add	r2, r2, r6\n\t"
170800 #endif
170801 #ifdef WOLFSSL_KEIL
170802         "adcs	r3, r3, %[r]\n\t"
170803 #elif defined(__clang__)
170804         "adcs	r3, %[r]\n\t"
170805 #else
170806         "adc	r3, %[r]\n\t"
170807 #endif
170808         "uxth	r6, r7\n\t"
170809 #ifdef WOLFSSL_KEIL
170810         "muls	r5, r6, r5\n\t"
170811 #elif defined(__clang__)
170812         "muls	r5, r6\n\t"
170813 #else
170814         "mul	r5, r6\n\t"
170815 #endif
170816 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170817         "lsrs	r6, r5, #16\n\t"
170818 #else
170819         "lsr	r6, r5, #16\n\t"
170820 #endif
170821 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170822         "lsls	r5, r5, #16\n\t"
170823 #else
170824         "lsl	r5, r5, #16\n\t"
170825 #endif
170826 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170827         "adds	r4, r4, r5\n\t"
170828 #else
170829         "add	r4, r4, r5\n\t"
170830 #endif
170831 #ifdef WOLFSSL_KEIL
170832         "adcs	r2, r2, r6\n\t"
170833 #elif defined(__clang__)
170834         "adcs	r2, r6\n\t"
170835 #else
170836         "adc	r2, r6\n\t"
170837 #endif
170838 #ifdef WOLFSSL_KEIL
170839         "adcs	r3, r3, %[r]\n\t"
170840 #elif defined(__clang__)
170841         "adcs	r3, %[r]\n\t"
170842 #else
170843         "adc	r3, %[r]\n\t"
170844 #endif
170845 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170846         "adds	r4, r4, r5\n\t"
170847 #else
170848         "add	r4, r4, r5\n\t"
170849 #endif
170850 #ifdef WOLFSSL_KEIL
170851         "adcs	r2, r2, r6\n\t"
170852 #elif defined(__clang__)
170853         "adcs	r2, r6\n\t"
170854 #else
170855         "adc	r2, r6\n\t"
170856 #endif
170857 #ifdef WOLFSSL_KEIL
170858         "adcs	r3, r3, %[r]\n\t"
170859 #elif defined(__clang__)
170860         "adcs	r3, %[r]\n\t"
170861 #else
170862         "adc	r3, %[r]\n\t"
170863 #endif
170864         "#  A[13] * A[4]\n\t"
170865         "mov	%[a], r9\n\t"
170866         "ldr	r7, [%[a], #16]\n\t"
170867         "mov	%[a], r11\n\t"
170868         "uxth	r5, %[a]\n\t"
170869         "uxth	r6, r7\n\t"
170870 #ifdef WOLFSSL_KEIL
170871         "muls	r6, r5, r6\n\t"
170872 #elif defined(__clang__)
170873         "muls	r6, r5\n\t"
170874 #else
170875         "mul	r6, r5\n\t"
170876 #endif
170877 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170878         "adds	r4, r4, r6\n\t"
170879 #else
170880         "add	r4, r4, r6\n\t"
170881 #endif
170882 #ifdef WOLFSSL_KEIL
170883         "adcs	r2, r2, %[r]\n\t"
170884 #elif defined(__clang__)
170885         "adcs	r2, %[r]\n\t"
170886 #else
170887         "adc	r2, %[r]\n\t"
170888 #endif
170889 #ifdef WOLFSSL_KEIL
170890         "adcs	r3, r3, %[r]\n\t"
170891 #elif defined(__clang__)
170892         "adcs	r3, %[r]\n\t"
170893 #else
170894         "adc	r3, %[r]\n\t"
170895 #endif
170896 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170897         "adds	r4, r4, r6\n\t"
170898 #else
170899         "add	r4, r4, r6\n\t"
170900 #endif
170901 #ifdef WOLFSSL_KEIL
170902         "adcs	r2, r2, %[r]\n\t"
170903 #elif defined(__clang__)
170904         "adcs	r2, %[r]\n\t"
170905 #else
170906         "adc	r2, %[r]\n\t"
170907 #endif
170908 #ifdef WOLFSSL_KEIL
170909         "adcs	r3, r3, %[r]\n\t"
170910 #elif defined(__clang__)
170911         "adcs	r3, %[r]\n\t"
170912 #else
170913         "adc	r3, %[r]\n\t"
170914 #endif
170915 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170916         "lsrs	r6, r7, #16\n\t"
170917 #else
170918         "lsr	r6, r7, #16\n\t"
170919 #endif
170920 #ifdef WOLFSSL_KEIL
170921         "muls	r5, r6, r5\n\t"
170922 #elif defined(__clang__)
170923         "muls	r5, r6\n\t"
170924 #else
170925         "mul	r5, r6\n\t"
170926 #endif
170927 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170928         "lsrs	r6, r5, #16\n\t"
170929 #else
170930         "lsr	r6, r5, #16\n\t"
170931 #endif
170932 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170933         "lsls	r5, r5, #16\n\t"
170934 #else
170935         "lsl	r5, r5, #16\n\t"
170936 #endif
170937 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170938         "adds	r4, r4, r5\n\t"
170939 #else
170940         "add	r4, r4, r5\n\t"
170941 #endif
170942 #ifdef WOLFSSL_KEIL
170943         "adcs	r2, r2, r6\n\t"
170944 #elif defined(__clang__)
170945         "adcs	r2, r6\n\t"
170946 #else
170947         "adc	r2, r6\n\t"
170948 #endif
170949 #ifdef WOLFSSL_KEIL
170950         "adcs	r3, r3, %[r]\n\t"
170951 #elif defined(__clang__)
170952         "adcs	r3, %[r]\n\t"
170953 #else
170954         "adc	r3, %[r]\n\t"
170955 #endif
170956 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170957         "adds	r4, r4, r5\n\t"
170958 #else
170959         "add	r4, r4, r5\n\t"
170960 #endif
170961 #ifdef WOLFSSL_KEIL
170962         "adcs	r2, r2, r6\n\t"
170963 #elif defined(__clang__)
170964         "adcs	r2, r6\n\t"
170965 #else
170966         "adc	r2, r6\n\t"
170967 #endif
170968 #ifdef WOLFSSL_KEIL
170969         "adcs	r3, r3, %[r]\n\t"
170970 #elif defined(__clang__)
170971         "adcs	r3, %[r]\n\t"
170972 #else
170973         "adc	r3, %[r]\n\t"
170974 #endif
170975 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170976         "lsrs	r5, %[a], #16\n\t"
170977 #else
170978         "lsr	r5, %[a], #16\n\t"
170979 #endif
170980 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170981         "lsrs	r6, r7, #16\n\t"
170982 #else
170983         "lsr	r6, r7, #16\n\t"
170984 #endif
170985 #ifdef WOLFSSL_KEIL
170986         "muls	r6, r5, r6\n\t"
170987 #elif defined(__clang__)
170988         "muls	r6, r5\n\t"
170989 #else
170990         "mul	r6, r5\n\t"
170991 #endif
170992 #if defined(__clang__) || defined(WOLFSSL_KEIL)
170993         "adds	r2, r2, r6\n\t"
170994 #else
170995         "add	r2, r2, r6\n\t"
170996 #endif
170997 #ifdef WOLFSSL_KEIL
170998         "adcs	r3, r3, %[r]\n\t"
170999 #elif defined(__clang__)
171000         "adcs	r3, %[r]\n\t"
171001 #else
171002         "adc	r3, %[r]\n\t"
171003 #endif
171004 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171005         "adds	r2, r2, r6\n\t"
171006 #else
171007         "add	r2, r2, r6\n\t"
171008 #endif
171009 #ifdef WOLFSSL_KEIL
171010         "adcs	r3, r3, %[r]\n\t"
171011 #elif defined(__clang__)
171012         "adcs	r3, %[r]\n\t"
171013 #else
171014         "adc	r3, %[r]\n\t"
171015 #endif
171016         "uxth	r6, r7\n\t"
171017 #ifdef WOLFSSL_KEIL
171018         "muls	r5, r6, r5\n\t"
171019 #elif defined(__clang__)
171020         "muls	r5, r6\n\t"
171021 #else
171022         "mul	r5, r6\n\t"
171023 #endif
171024 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171025         "lsrs	r6, r5, #16\n\t"
171026 #else
171027         "lsr	r6, r5, #16\n\t"
171028 #endif
171029 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171030         "lsls	r5, r5, #16\n\t"
171031 #else
171032         "lsl	r5, r5, #16\n\t"
171033 #endif
171034 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171035         "adds	r4, r4, r5\n\t"
171036 #else
171037         "add	r4, r4, r5\n\t"
171038 #endif
171039 #ifdef WOLFSSL_KEIL
171040         "adcs	r2, r2, r6\n\t"
171041 #elif defined(__clang__)
171042         "adcs	r2, r6\n\t"
171043 #else
171044         "adc	r2, r6\n\t"
171045 #endif
171046 #ifdef WOLFSSL_KEIL
171047         "adcs	r3, r3, %[r]\n\t"
171048 #elif defined(__clang__)
171049         "adcs	r3, %[r]\n\t"
171050 #else
171051         "adc	r3, %[r]\n\t"
171052 #endif
171053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171054         "adds	r4, r4, r5\n\t"
171055 #else
171056         "add	r4, r4, r5\n\t"
171057 #endif
171058 #ifdef WOLFSSL_KEIL
171059         "adcs	r2, r2, r6\n\t"
171060 #elif defined(__clang__)
171061         "adcs	r2, r6\n\t"
171062 #else
171063         "adc	r2, r6\n\t"
171064 #endif
171065 #ifdef WOLFSSL_KEIL
171066         "adcs	r3, r3, %[r]\n\t"
171067 #elif defined(__clang__)
171068         "adcs	r3, %[r]\n\t"
171069 #else
171070         "adc	r3, %[r]\n\t"
171071 #endif
171072         "#  A[14] * A[3]\n\t"
171073         "mov	%[a], r9\n\t"
171074         "ldr	r7, [%[a], #12]\n\t"
171075         "mov	%[a], r12\n\t"
171076         "uxth	r5, %[a]\n\t"
171077         "uxth	r6, r7\n\t"
171078 #ifdef WOLFSSL_KEIL
171079         "muls	r6, r5, r6\n\t"
171080 #elif defined(__clang__)
171081         "muls	r6, r5\n\t"
171082 #else
171083         "mul	r6, r5\n\t"
171084 #endif
171085 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171086         "adds	r4, r4, r6\n\t"
171087 #else
171088         "add	r4, r4, r6\n\t"
171089 #endif
171090 #ifdef WOLFSSL_KEIL
171091         "adcs	r2, r2, %[r]\n\t"
171092 #elif defined(__clang__)
171093         "adcs	r2, %[r]\n\t"
171094 #else
171095         "adc	r2, %[r]\n\t"
171096 #endif
171097 #ifdef WOLFSSL_KEIL
171098         "adcs	r3, r3, %[r]\n\t"
171099 #elif defined(__clang__)
171100         "adcs	r3, %[r]\n\t"
171101 #else
171102         "adc	r3, %[r]\n\t"
171103 #endif
171104 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171105         "adds	r4, r4, r6\n\t"
171106 #else
171107         "add	r4, r4, r6\n\t"
171108 #endif
171109 #ifdef WOLFSSL_KEIL
171110         "adcs	r2, r2, %[r]\n\t"
171111 #elif defined(__clang__)
171112         "adcs	r2, %[r]\n\t"
171113 #else
171114         "adc	r2, %[r]\n\t"
171115 #endif
171116 #ifdef WOLFSSL_KEIL
171117         "adcs	r3, r3, %[r]\n\t"
171118 #elif defined(__clang__)
171119         "adcs	r3, %[r]\n\t"
171120 #else
171121         "adc	r3, %[r]\n\t"
171122 #endif
171123 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171124         "lsrs	r6, r7, #16\n\t"
171125 #else
171126         "lsr	r6, r7, #16\n\t"
171127 #endif
171128 #ifdef WOLFSSL_KEIL
171129         "muls	r5, r6, r5\n\t"
171130 #elif defined(__clang__)
171131         "muls	r5, r6\n\t"
171132 #else
171133         "mul	r5, r6\n\t"
171134 #endif
171135 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171136         "lsrs	r6, r5, #16\n\t"
171137 #else
171138         "lsr	r6, r5, #16\n\t"
171139 #endif
171140 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171141         "lsls	r5, r5, #16\n\t"
171142 #else
171143         "lsl	r5, r5, #16\n\t"
171144 #endif
171145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171146         "adds	r4, r4, r5\n\t"
171147 #else
171148         "add	r4, r4, r5\n\t"
171149 #endif
171150 #ifdef WOLFSSL_KEIL
171151         "adcs	r2, r2, r6\n\t"
171152 #elif defined(__clang__)
171153         "adcs	r2, r6\n\t"
171154 #else
171155         "adc	r2, r6\n\t"
171156 #endif
171157 #ifdef WOLFSSL_KEIL
171158         "adcs	r3, r3, %[r]\n\t"
171159 #elif defined(__clang__)
171160         "adcs	r3, %[r]\n\t"
171161 #else
171162         "adc	r3, %[r]\n\t"
171163 #endif
171164 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171165         "adds	r4, r4, r5\n\t"
171166 #else
171167         "add	r4, r4, r5\n\t"
171168 #endif
171169 #ifdef WOLFSSL_KEIL
171170         "adcs	r2, r2, r6\n\t"
171171 #elif defined(__clang__)
171172         "adcs	r2, r6\n\t"
171173 #else
171174         "adc	r2, r6\n\t"
171175 #endif
171176 #ifdef WOLFSSL_KEIL
171177         "adcs	r3, r3, %[r]\n\t"
171178 #elif defined(__clang__)
171179         "adcs	r3, %[r]\n\t"
171180 #else
171181         "adc	r3, %[r]\n\t"
171182 #endif
171183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171184         "lsrs	r5, %[a], #16\n\t"
171185 #else
171186         "lsr	r5, %[a], #16\n\t"
171187 #endif
171188 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171189         "lsrs	r6, r7, #16\n\t"
171190 #else
171191         "lsr	r6, r7, #16\n\t"
171192 #endif
171193 #ifdef WOLFSSL_KEIL
171194         "muls	r6, r5, r6\n\t"
171195 #elif defined(__clang__)
171196         "muls	r6, r5\n\t"
171197 #else
171198         "mul	r6, r5\n\t"
171199 #endif
171200 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171201         "adds	r2, r2, r6\n\t"
171202 #else
171203         "add	r2, r2, r6\n\t"
171204 #endif
171205 #ifdef WOLFSSL_KEIL
171206         "adcs	r3, r3, %[r]\n\t"
171207 #elif defined(__clang__)
171208         "adcs	r3, %[r]\n\t"
171209 #else
171210         "adc	r3, %[r]\n\t"
171211 #endif
171212 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171213         "adds	r2, r2, r6\n\t"
171214 #else
171215         "add	r2, r2, r6\n\t"
171216 #endif
171217 #ifdef WOLFSSL_KEIL
171218         "adcs	r3, r3, %[r]\n\t"
171219 #elif defined(__clang__)
171220         "adcs	r3, %[r]\n\t"
171221 #else
171222         "adc	r3, %[r]\n\t"
171223 #endif
171224         "uxth	r6, r7\n\t"
171225 #ifdef WOLFSSL_KEIL
171226         "muls	r5, r6, r5\n\t"
171227 #elif defined(__clang__)
171228         "muls	r5, r6\n\t"
171229 #else
171230         "mul	r5, r6\n\t"
171231 #endif
171232 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171233         "lsrs	r6, r5, #16\n\t"
171234 #else
171235         "lsr	r6, r5, #16\n\t"
171236 #endif
171237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171238         "lsls	r5, r5, #16\n\t"
171239 #else
171240         "lsl	r5, r5, #16\n\t"
171241 #endif
171242 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171243         "adds	r4, r4, r5\n\t"
171244 #else
171245         "add	r4, r4, r5\n\t"
171246 #endif
171247 #ifdef WOLFSSL_KEIL
171248         "adcs	r2, r2, r6\n\t"
171249 #elif defined(__clang__)
171250         "adcs	r2, r6\n\t"
171251 #else
171252         "adc	r2, r6\n\t"
171253 #endif
171254 #ifdef WOLFSSL_KEIL
171255         "adcs	r3, r3, %[r]\n\t"
171256 #elif defined(__clang__)
171257         "adcs	r3, %[r]\n\t"
171258 #else
171259         "adc	r3, %[r]\n\t"
171260 #endif
171261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171262         "adds	r4, r4, r5\n\t"
171263 #else
171264         "add	r4, r4, r5\n\t"
171265 #endif
171266 #ifdef WOLFSSL_KEIL
171267         "adcs	r2, r2, r6\n\t"
171268 #elif defined(__clang__)
171269         "adcs	r2, r6\n\t"
171270 #else
171271         "adc	r2, r6\n\t"
171272 #endif
171273 #ifdef WOLFSSL_KEIL
171274         "adcs	r3, r3, %[r]\n\t"
171275 #elif defined(__clang__)
171276         "adcs	r3, %[r]\n\t"
171277 #else
171278         "adc	r3, %[r]\n\t"
171279 #endif
171280         "#  A[15] * A[2]\n\t"
171281         "mov	%[a], r9\n\t"
171282         "ldr	r7, [%[a], #8]\n\t"
171283         "mov	%[a], lr\n\t"
171284         "uxth	r5, %[a]\n\t"
171285         "uxth	r6, r7\n\t"
171286 #ifdef WOLFSSL_KEIL
171287         "muls	r6, r5, r6\n\t"
171288 #elif defined(__clang__)
171289         "muls	r6, r5\n\t"
171290 #else
171291         "mul	r6, r5\n\t"
171292 #endif
171293 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171294         "adds	r4, r4, r6\n\t"
171295 #else
171296         "add	r4, r4, r6\n\t"
171297 #endif
171298 #ifdef WOLFSSL_KEIL
171299         "adcs	r2, r2, %[r]\n\t"
171300 #elif defined(__clang__)
171301         "adcs	r2, %[r]\n\t"
171302 #else
171303         "adc	r2, %[r]\n\t"
171304 #endif
171305 #ifdef WOLFSSL_KEIL
171306         "adcs	r3, r3, %[r]\n\t"
171307 #elif defined(__clang__)
171308         "adcs	r3, %[r]\n\t"
171309 #else
171310         "adc	r3, %[r]\n\t"
171311 #endif
171312 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171313         "adds	r4, r4, r6\n\t"
171314 #else
171315         "add	r4, r4, r6\n\t"
171316 #endif
171317 #ifdef WOLFSSL_KEIL
171318         "adcs	r2, r2, %[r]\n\t"
171319 #elif defined(__clang__)
171320         "adcs	r2, %[r]\n\t"
171321 #else
171322         "adc	r2, %[r]\n\t"
171323 #endif
171324 #ifdef WOLFSSL_KEIL
171325         "adcs	r3, r3, %[r]\n\t"
171326 #elif defined(__clang__)
171327         "adcs	r3, %[r]\n\t"
171328 #else
171329         "adc	r3, %[r]\n\t"
171330 #endif
171331 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171332         "lsrs	r6, r7, #16\n\t"
171333 #else
171334         "lsr	r6, r7, #16\n\t"
171335 #endif
171336 #ifdef WOLFSSL_KEIL
171337         "muls	r5, r6, r5\n\t"
171338 #elif defined(__clang__)
171339         "muls	r5, r6\n\t"
171340 #else
171341         "mul	r5, r6\n\t"
171342 #endif
171343 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171344         "lsrs	r6, r5, #16\n\t"
171345 #else
171346         "lsr	r6, r5, #16\n\t"
171347 #endif
171348 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171349         "lsls	r5, r5, #16\n\t"
171350 #else
171351         "lsl	r5, r5, #16\n\t"
171352 #endif
171353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171354         "adds	r4, r4, r5\n\t"
171355 #else
171356         "add	r4, r4, r5\n\t"
171357 #endif
171358 #ifdef WOLFSSL_KEIL
171359         "adcs	r2, r2, r6\n\t"
171360 #elif defined(__clang__)
171361         "adcs	r2, r6\n\t"
171362 #else
171363         "adc	r2, r6\n\t"
171364 #endif
171365 #ifdef WOLFSSL_KEIL
171366         "adcs	r3, r3, %[r]\n\t"
171367 #elif defined(__clang__)
171368         "adcs	r3, %[r]\n\t"
171369 #else
171370         "adc	r3, %[r]\n\t"
171371 #endif
171372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171373         "adds	r4, r4, r5\n\t"
171374 #else
171375         "add	r4, r4, r5\n\t"
171376 #endif
171377 #ifdef WOLFSSL_KEIL
171378         "adcs	r2, r2, r6\n\t"
171379 #elif defined(__clang__)
171380         "adcs	r2, r6\n\t"
171381 #else
171382         "adc	r2, r6\n\t"
171383 #endif
171384 #ifdef WOLFSSL_KEIL
171385         "adcs	r3, r3, %[r]\n\t"
171386 #elif defined(__clang__)
171387         "adcs	r3, %[r]\n\t"
171388 #else
171389         "adc	r3, %[r]\n\t"
171390 #endif
171391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171392         "lsrs	r5, %[a], #16\n\t"
171393 #else
171394         "lsr	r5, %[a], #16\n\t"
171395 #endif
171396 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171397         "lsrs	r6, r7, #16\n\t"
171398 #else
171399         "lsr	r6, r7, #16\n\t"
171400 #endif
171401 #ifdef WOLFSSL_KEIL
171402         "muls	r6, r5, r6\n\t"
171403 #elif defined(__clang__)
171404         "muls	r6, r5\n\t"
171405 #else
171406         "mul	r6, r5\n\t"
171407 #endif
171408 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171409         "adds	r2, r2, r6\n\t"
171410 #else
171411         "add	r2, r2, r6\n\t"
171412 #endif
171413 #ifdef WOLFSSL_KEIL
171414         "adcs	r3, r3, %[r]\n\t"
171415 #elif defined(__clang__)
171416         "adcs	r3, %[r]\n\t"
171417 #else
171418         "adc	r3, %[r]\n\t"
171419 #endif
171420 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171421         "adds	r2, r2, r6\n\t"
171422 #else
171423         "add	r2, r2, r6\n\t"
171424 #endif
171425 #ifdef WOLFSSL_KEIL
171426         "adcs	r3, r3, %[r]\n\t"
171427 #elif defined(__clang__)
171428         "adcs	r3, %[r]\n\t"
171429 #else
171430         "adc	r3, %[r]\n\t"
171431 #endif
171432         "uxth	r6, r7\n\t"
171433 #ifdef WOLFSSL_KEIL
171434         "muls	r5, r6, r5\n\t"
171435 #elif defined(__clang__)
171436         "muls	r5, r6\n\t"
171437 #else
171438         "mul	r5, r6\n\t"
171439 #endif
171440 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171441         "lsrs	r6, r5, #16\n\t"
171442 #else
171443         "lsr	r6, r5, #16\n\t"
171444 #endif
171445 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171446         "lsls	r5, r5, #16\n\t"
171447 #else
171448         "lsl	r5, r5, #16\n\t"
171449 #endif
171450 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171451         "adds	r4, r4, r5\n\t"
171452 #else
171453         "add	r4, r4, r5\n\t"
171454 #endif
171455 #ifdef WOLFSSL_KEIL
171456         "adcs	r2, r2, r6\n\t"
171457 #elif defined(__clang__)
171458         "adcs	r2, r6\n\t"
171459 #else
171460         "adc	r2, r6\n\t"
171461 #endif
171462 #ifdef WOLFSSL_KEIL
171463         "adcs	r3, r3, %[r]\n\t"
171464 #elif defined(__clang__)
171465         "adcs	r3, %[r]\n\t"
171466 #else
171467         "adc	r3, %[r]\n\t"
171468 #endif
171469 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171470         "adds	r4, r4, r5\n\t"
171471 #else
171472         "add	r4, r4, r5\n\t"
171473 #endif
171474 #ifdef WOLFSSL_KEIL
171475         "adcs	r2, r2, r6\n\t"
171476 #elif defined(__clang__)
171477         "adcs	r2, r6\n\t"
171478 #else
171479         "adc	r2, r6\n\t"
171480 #endif
171481 #ifdef WOLFSSL_KEIL
171482         "adcs	r3, r3, %[r]\n\t"
171483 #elif defined(__clang__)
171484         "adcs	r3, %[r]\n\t"
171485 #else
171486         "adc	r3, %[r]\n\t"
171487 #endif
171488         "mov	%[r], r8\n\t"
171489         "str	r4, [%[r], #68]\n\t"
171490         "movs	%[r], #0\n\t"
171491         "#  A[15] * A[3]\n\t"
171492         "movs	r4, #0\n\t"
171493         "mov	%[a], r9\n\t"
171494         "ldr	r7, [%[a], #12]\n\t"
171495         "mov	%[a], lr\n\t"
171496         "uxth	r5, %[a]\n\t"
171497         "uxth	r6, r7\n\t"
171498 #ifdef WOLFSSL_KEIL
171499         "muls	r6, r5, r6\n\t"
171500 #elif defined(__clang__)
171501         "muls	r6, r5\n\t"
171502 #else
171503         "mul	r6, r5\n\t"
171504 #endif
171505 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171506         "adds	r2, r2, r6\n\t"
171507 #else
171508         "add	r2, r2, r6\n\t"
171509 #endif
171510 #ifdef WOLFSSL_KEIL
171511         "adcs	r3, r3, %[r]\n\t"
171512 #elif defined(__clang__)
171513         "adcs	r3, %[r]\n\t"
171514 #else
171515         "adc	r3, %[r]\n\t"
171516 #endif
171517 #ifdef WOLFSSL_KEIL
171518         "adcs	r4, r4, %[r]\n\t"
171519 #elif defined(__clang__)
171520         "adcs	r4, %[r]\n\t"
171521 #else
171522         "adc	r4, %[r]\n\t"
171523 #endif
171524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171525         "adds	r2, r2, r6\n\t"
171526 #else
171527         "add	r2, r2, r6\n\t"
171528 #endif
171529 #ifdef WOLFSSL_KEIL
171530         "adcs	r3, r3, %[r]\n\t"
171531 #elif defined(__clang__)
171532         "adcs	r3, %[r]\n\t"
171533 #else
171534         "adc	r3, %[r]\n\t"
171535 #endif
171536 #ifdef WOLFSSL_KEIL
171537         "adcs	r4, r4, %[r]\n\t"
171538 #elif defined(__clang__)
171539         "adcs	r4, %[r]\n\t"
171540 #else
171541         "adc	r4, %[r]\n\t"
171542 #endif
171543 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171544         "lsrs	r6, r7, #16\n\t"
171545 #else
171546         "lsr	r6, r7, #16\n\t"
171547 #endif
171548 #ifdef WOLFSSL_KEIL
171549         "muls	r5, r6, r5\n\t"
171550 #elif defined(__clang__)
171551         "muls	r5, r6\n\t"
171552 #else
171553         "mul	r5, r6\n\t"
171554 #endif
171555 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171556         "lsrs	r6, r5, #16\n\t"
171557 #else
171558         "lsr	r6, r5, #16\n\t"
171559 #endif
171560 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171561         "lsls	r5, r5, #16\n\t"
171562 #else
171563         "lsl	r5, r5, #16\n\t"
171564 #endif
171565 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171566         "adds	r2, r2, r5\n\t"
171567 #else
171568         "add	r2, r2, r5\n\t"
171569 #endif
171570 #ifdef WOLFSSL_KEIL
171571         "adcs	r3, r3, r6\n\t"
171572 #elif defined(__clang__)
171573         "adcs	r3, r6\n\t"
171574 #else
171575         "adc	r3, r6\n\t"
171576 #endif
171577 #ifdef WOLFSSL_KEIL
171578         "adcs	r4, r4, %[r]\n\t"
171579 #elif defined(__clang__)
171580         "adcs	r4, %[r]\n\t"
171581 #else
171582         "adc	r4, %[r]\n\t"
171583 #endif
171584 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171585         "adds	r2, r2, r5\n\t"
171586 #else
171587         "add	r2, r2, r5\n\t"
171588 #endif
171589 #ifdef WOLFSSL_KEIL
171590         "adcs	r3, r3, r6\n\t"
171591 #elif defined(__clang__)
171592         "adcs	r3, r6\n\t"
171593 #else
171594         "adc	r3, r6\n\t"
171595 #endif
171596 #ifdef WOLFSSL_KEIL
171597         "adcs	r4, r4, %[r]\n\t"
171598 #elif defined(__clang__)
171599         "adcs	r4, %[r]\n\t"
171600 #else
171601         "adc	r4, %[r]\n\t"
171602 #endif
171603 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171604         "lsrs	r5, %[a], #16\n\t"
171605 #else
171606         "lsr	r5, %[a], #16\n\t"
171607 #endif
171608 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171609         "lsrs	r6, r7, #16\n\t"
171610 #else
171611         "lsr	r6, r7, #16\n\t"
171612 #endif
171613 #ifdef WOLFSSL_KEIL
171614         "muls	r6, r5, r6\n\t"
171615 #elif defined(__clang__)
171616         "muls	r6, r5\n\t"
171617 #else
171618         "mul	r6, r5\n\t"
171619 #endif
171620 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171621         "adds	r3, r3, r6\n\t"
171622 #else
171623         "add	r3, r3, r6\n\t"
171624 #endif
171625 #ifdef WOLFSSL_KEIL
171626         "adcs	r4, r4, %[r]\n\t"
171627 #elif defined(__clang__)
171628         "adcs	r4, %[r]\n\t"
171629 #else
171630         "adc	r4, %[r]\n\t"
171631 #endif
171632 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171633         "adds	r3, r3, r6\n\t"
171634 #else
171635         "add	r3, r3, r6\n\t"
171636 #endif
171637 #ifdef WOLFSSL_KEIL
171638         "adcs	r4, r4, %[r]\n\t"
171639 #elif defined(__clang__)
171640         "adcs	r4, %[r]\n\t"
171641 #else
171642         "adc	r4, %[r]\n\t"
171643 #endif
171644         "uxth	r6, r7\n\t"
171645 #ifdef WOLFSSL_KEIL
171646         "muls	r5, r6, r5\n\t"
171647 #elif defined(__clang__)
171648         "muls	r5, r6\n\t"
171649 #else
171650         "mul	r5, r6\n\t"
171651 #endif
171652 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171653         "lsrs	r6, r5, #16\n\t"
171654 #else
171655         "lsr	r6, r5, #16\n\t"
171656 #endif
171657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171658         "lsls	r5, r5, #16\n\t"
171659 #else
171660         "lsl	r5, r5, #16\n\t"
171661 #endif
171662 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171663         "adds	r2, r2, r5\n\t"
171664 #else
171665         "add	r2, r2, r5\n\t"
171666 #endif
171667 #ifdef WOLFSSL_KEIL
171668         "adcs	r3, r3, r6\n\t"
171669 #elif defined(__clang__)
171670         "adcs	r3, r6\n\t"
171671 #else
171672         "adc	r3, r6\n\t"
171673 #endif
171674 #ifdef WOLFSSL_KEIL
171675         "adcs	r4, r4, %[r]\n\t"
171676 #elif defined(__clang__)
171677         "adcs	r4, %[r]\n\t"
171678 #else
171679         "adc	r4, %[r]\n\t"
171680 #endif
171681 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171682         "adds	r2, r2, r5\n\t"
171683 #else
171684         "add	r2, r2, r5\n\t"
171685 #endif
171686 #ifdef WOLFSSL_KEIL
171687         "adcs	r3, r3, r6\n\t"
171688 #elif defined(__clang__)
171689         "adcs	r3, r6\n\t"
171690 #else
171691         "adc	r3, r6\n\t"
171692 #endif
171693 #ifdef WOLFSSL_KEIL
171694         "adcs	r4, r4, %[r]\n\t"
171695 #elif defined(__clang__)
171696         "adcs	r4, %[r]\n\t"
171697 #else
171698         "adc	r4, %[r]\n\t"
171699 #endif
171700         "#  A[14] * A[4]\n\t"
171701         "mov	%[a], r9\n\t"
171702         "ldr	r7, [%[a], #16]\n\t"
171703         "mov	%[a], r12\n\t"
171704         "uxth	r5, %[a]\n\t"
171705         "uxth	r6, r7\n\t"
171706 #ifdef WOLFSSL_KEIL
171707         "muls	r6, r5, r6\n\t"
171708 #elif defined(__clang__)
171709         "muls	r6, r5\n\t"
171710 #else
171711         "mul	r6, r5\n\t"
171712 #endif
171713 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171714         "adds	r2, r2, r6\n\t"
171715 #else
171716         "add	r2, r2, r6\n\t"
171717 #endif
171718 #ifdef WOLFSSL_KEIL
171719         "adcs	r3, r3, %[r]\n\t"
171720 #elif defined(__clang__)
171721         "adcs	r3, %[r]\n\t"
171722 #else
171723         "adc	r3, %[r]\n\t"
171724 #endif
171725 #ifdef WOLFSSL_KEIL
171726         "adcs	r4, r4, %[r]\n\t"
171727 #elif defined(__clang__)
171728         "adcs	r4, %[r]\n\t"
171729 #else
171730         "adc	r4, %[r]\n\t"
171731 #endif
171732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171733         "adds	r2, r2, r6\n\t"
171734 #else
171735         "add	r2, r2, r6\n\t"
171736 #endif
171737 #ifdef WOLFSSL_KEIL
171738         "adcs	r3, r3, %[r]\n\t"
171739 #elif defined(__clang__)
171740         "adcs	r3, %[r]\n\t"
171741 #else
171742         "adc	r3, %[r]\n\t"
171743 #endif
171744 #ifdef WOLFSSL_KEIL
171745         "adcs	r4, r4, %[r]\n\t"
171746 #elif defined(__clang__)
171747         "adcs	r4, %[r]\n\t"
171748 #else
171749         "adc	r4, %[r]\n\t"
171750 #endif
171751 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171752         "lsrs	r6, r7, #16\n\t"
171753 #else
171754         "lsr	r6, r7, #16\n\t"
171755 #endif
171756 #ifdef WOLFSSL_KEIL
171757         "muls	r5, r6, r5\n\t"
171758 #elif defined(__clang__)
171759         "muls	r5, r6\n\t"
171760 #else
171761         "mul	r5, r6\n\t"
171762 #endif
171763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171764         "lsrs	r6, r5, #16\n\t"
171765 #else
171766         "lsr	r6, r5, #16\n\t"
171767 #endif
171768 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171769         "lsls	r5, r5, #16\n\t"
171770 #else
171771         "lsl	r5, r5, #16\n\t"
171772 #endif
171773 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171774         "adds	r2, r2, r5\n\t"
171775 #else
171776         "add	r2, r2, r5\n\t"
171777 #endif
171778 #ifdef WOLFSSL_KEIL
171779         "adcs	r3, r3, r6\n\t"
171780 #elif defined(__clang__)
171781         "adcs	r3, r6\n\t"
171782 #else
171783         "adc	r3, r6\n\t"
171784 #endif
171785 #ifdef WOLFSSL_KEIL
171786         "adcs	r4, r4, %[r]\n\t"
171787 #elif defined(__clang__)
171788         "adcs	r4, %[r]\n\t"
171789 #else
171790         "adc	r4, %[r]\n\t"
171791 #endif
171792 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171793         "adds	r2, r2, r5\n\t"
171794 #else
171795         "add	r2, r2, r5\n\t"
171796 #endif
171797 #ifdef WOLFSSL_KEIL
171798         "adcs	r3, r3, r6\n\t"
171799 #elif defined(__clang__)
171800         "adcs	r3, r6\n\t"
171801 #else
171802         "adc	r3, r6\n\t"
171803 #endif
171804 #ifdef WOLFSSL_KEIL
171805         "adcs	r4, r4, %[r]\n\t"
171806 #elif defined(__clang__)
171807         "adcs	r4, %[r]\n\t"
171808 #else
171809         "adc	r4, %[r]\n\t"
171810 #endif
171811 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171812         "lsrs	r5, %[a], #16\n\t"
171813 #else
171814         "lsr	r5, %[a], #16\n\t"
171815 #endif
171816 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171817         "lsrs	r6, r7, #16\n\t"
171818 #else
171819         "lsr	r6, r7, #16\n\t"
171820 #endif
171821 #ifdef WOLFSSL_KEIL
171822         "muls	r6, r5, r6\n\t"
171823 #elif defined(__clang__)
171824         "muls	r6, r5\n\t"
171825 #else
171826         "mul	r6, r5\n\t"
171827 #endif
171828 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171829         "adds	r3, r3, r6\n\t"
171830 #else
171831         "add	r3, r3, r6\n\t"
171832 #endif
171833 #ifdef WOLFSSL_KEIL
171834         "adcs	r4, r4, %[r]\n\t"
171835 #elif defined(__clang__)
171836         "adcs	r4, %[r]\n\t"
171837 #else
171838         "adc	r4, %[r]\n\t"
171839 #endif
171840 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171841         "adds	r3, r3, r6\n\t"
171842 #else
171843         "add	r3, r3, r6\n\t"
171844 #endif
171845 #ifdef WOLFSSL_KEIL
171846         "adcs	r4, r4, %[r]\n\t"
171847 #elif defined(__clang__)
171848         "adcs	r4, %[r]\n\t"
171849 #else
171850         "adc	r4, %[r]\n\t"
171851 #endif
171852         "uxth	r6, r7\n\t"
171853 #ifdef WOLFSSL_KEIL
171854         "muls	r5, r6, r5\n\t"
171855 #elif defined(__clang__)
171856         "muls	r5, r6\n\t"
171857 #else
171858         "mul	r5, r6\n\t"
171859 #endif
171860 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171861         "lsrs	r6, r5, #16\n\t"
171862 #else
171863         "lsr	r6, r5, #16\n\t"
171864 #endif
171865 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171866         "lsls	r5, r5, #16\n\t"
171867 #else
171868         "lsl	r5, r5, #16\n\t"
171869 #endif
171870 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171871         "adds	r2, r2, r5\n\t"
171872 #else
171873         "add	r2, r2, r5\n\t"
171874 #endif
171875 #ifdef WOLFSSL_KEIL
171876         "adcs	r3, r3, r6\n\t"
171877 #elif defined(__clang__)
171878         "adcs	r3, r6\n\t"
171879 #else
171880         "adc	r3, r6\n\t"
171881 #endif
171882 #ifdef WOLFSSL_KEIL
171883         "adcs	r4, r4, %[r]\n\t"
171884 #elif defined(__clang__)
171885         "adcs	r4, %[r]\n\t"
171886 #else
171887         "adc	r4, %[r]\n\t"
171888 #endif
171889 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171890         "adds	r2, r2, r5\n\t"
171891 #else
171892         "add	r2, r2, r5\n\t"
171893 #endif
171894 #ifdef WOLFSSL_KEIL
171895         "adcs	r3, r3, r6\n\t"
171896 #elif defined(__clang__)
171897         "adcs	r3, r6\n\t"
171898 #else
171899         "adc	r3, r6\n\t"
171900 #endif
171901 #ifdef WOLFSSL_KEIL
171902         "adcs	r4, r4, %[r]\n\t"
171903 #elif defined(__clang__)
171904         "adcs	r4, %[r]\n\t"
171905 #else
171906         "adc	r4, %[r]\n\t"
171907 #endif
171908         "#  A[13] * A[5]\n\t"
171909         "mov	%[a], r9\n\t"
171910         "ldr	r7, [%[a], #20]\n\t"
171911         "mov	%[a], r11\n\t"
171912         "uxth	r5, %[a]\n\t"
171913         "uxth	r6, r7\n\t"
171914 #ifdef WOLFSSL_KEIL
171915         "muls	r6, r5, r6\n\t"
171916 #elif defined(__clang__)
171917         "muls	r6, r5\n\t"
171918 #else
171919         "mul	r6, r5\n\t"
171920 #endif
171921 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171922         "adds	r2, r2, r6\n\t"
171923 #else
171924         "add	r2, r2, r6\n\t"
171925 #endif
171926 #ifdef WOLFSSL_KEIL
171927         "adcs	r3, r3, %[r]\n\t"
171928 #elif defined(__clang__)
171929         "adcs	r3, %[r]\n\t"
171930 #else
171931         "adc	r3, %[r]\n\t"
171932 #endif
171933 #ifdef WOLFSSL_KEIL
171934         "adcs	r4, r4, %[r]\n\t"
171935 #elif defined(__clang__)
171936         "adcs	r4, %[r]\n\t"
171937 #else
171938         "adc	r4, %[r]\n\t"
171939 #endif
171940 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171941         "adds	r2, r2, r6\n\t"
171942 #else
171943         "add	r2, r2, r6\n\t"
171944 #endif
171945 #ifdef WOLFSSL_KEIL
171946         "adcs	r3, r3, %[r]\n\t"
171947 #elif defined(__clang__)
171948         "adcs	r3, %[r]\n\t"
171949 #else
171950         "adc	r3, %[r]\n\t"
171951 #endif
171952 #ifdef WOLFSSL_KEIL
171953         "adcs	r4, r4, %[r]\n\t"
171954 #elif defined(__clang__)
171955         "adcs	r4, %[r]\n\t"
171956 #else
171957         "adc	r4, %[r]\n\t"
171958 #endif
171959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171960         "lsrs	r6, r7, #16\n\t"
171961 #else
171962         "lsr	r6, r7, #16\n\t"
171963 #endif
171964 #ifdef WOLFSSL_KEIL
171965         "muls	r5, r6, r5\n\t"
171966 #elif defined(__clang__)
171967         "muls	r5, r6\n\t"
171968 #else
171969         "mul	r5, r6\n\t"
171970 #endif
171971 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171972         "lsrs	r6, r5, #16\n\t"
171973 #else
171974         "lsr	r6, r5, #16\n\t"
171975 #endif
171976 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171977         "lsls	r5, r5, #16\n\t"
171978 #else
171979         "lsl	r5, r5, #16\n\t"
171980 #endif
171981 #if defined(__clang__) || defined(WOLFSSL_KEIL)
171982         "adds	r2, r2, r5\n\t"
171983 #else
171984         "add	r2, r2, r5\n\t"
171985 #endif
171986 #ifdef WOLFSSL_KEIL
171987         "adcs	r3, r3, r6\n\t"
171988 #elif defined(__clang__)
171989         "adcs	r3, r6\n\t"
171990 #else
171991         "adc	r3, r6\n\t"
171992 #endif
171993 #ifdef WOLFSSL_KEIL
171994         "adcs	r4, r4, %[r]\n\t"
171995 #elif defined(__clang__)
171996         "adcs	r4, %[r]\n\t"
171997 #else
171998         "adc	r4, %[r]\n\t"
171999 #endif
172000 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172001         "adds	r2, r2, r5\n\t"
172002 #else
172003         "add	r2, r2, r5\n\t"
172004 #endif
172005 #ifdef WOLFSSL_KEIL
172006         "adcs	r3, r3, r6\n\t"
172007 #elif defined(__clang__)
172008         "adcs	r3, r6\n\t"
172009 #else
172010         "adc	r3, r6\n\t"
172011 #endif
172012 #ifdef WOLFSSL_KEIL
172013         "adcs	r4, r4, %[r]\n\t"
172014 #elif defined(__clang__)
172015         "adcs	r4, %[r]\n\t"
172016 #else
172017         "adc	r4, %[r]\n\t"
172018 #endif
172019 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172020         "lsrs	r5, %[a], #16\n\t"
172021 #else
172022         "lsr	r5, %[a], #16\n\t"
172023 #endif
172024 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172025         "lsrs	r6, r7, #16\n\t"
172026 #else
172027         "lsr	r6, r7, #16\n\t"
172028 #endif
172029 #ifdef WOLFSSL_KEIL
172030         "muls	r6, r5, r6\n\t"
172031 #elif defined(__clang__)
172032         "muls	r6, r5\n\t"
172033 #else
172034         "mul	r6, r5\n\t"
172035 #endif
172036 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172037         "adds	r3, r3, r6\n\t"
172038 #else
172039         "add	r3, r3, r6\n\t"
172040 #endif
172041 #ifdef WOLFSSL_KEIL
172042         "adcs	r4, r4, %[r]\n\t"
172043 #elif defined(__clang__)
172044         "adcs	r4, %[r]\n\t"
172045 #else
172046         "adc	r4, %[r]\n\t"
172047 #endif
172048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172049         "adds	r3, r3, r6\n\t"
172050 #else
172051         "add	r3, r3, r6\n\t"
172052 #endif
172053 #ifdef WOLFSSL_KEIL
172054         "adcs	r4, r4, %[r]\n\t"
172055 #elif defined(__clang__)
172056         "adcs	r4, %[r]\n\t"
172057 #else
172058         "adc	r4, %[r]\n\t"
172059 #endif
172060         "uxth	r6, r7\n\t"
172061 #ifdef WOLFSSL_KEIL
172062         "muls	r5, r6, r5\n\t"
172063 #elif defined(__clang__)
172064         "muls	r5, r6\n\t"
172065 #else
172066         "mul	r5, r6\n\t"
172067 #endif
172068 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172069         "lsrs	r6, r5, #16\n\t"
172070 #else
172071         "lsr	r6, r5, #16\n\t"
172072 #endif
172073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172074         "lsls	r5, r5, #16\n\t"
172075 #else
172076         "lsl	r5, r5, #16\n\t"
172077 #endif
172078 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172079         "adds	r2, r2, r5\n\t"
172080 #else
172081         "add	r2, r2, r5\n\t"
172082 #endif
172083 #ifdef WOLFSSL_KEIL
172084         "adcs	r3, r3, r6\n\t"
172085 #elif defined(__clang__)
172086         "adcs	r3, r6\n\t"
172087 #else
172088         "adc	r3, r6\n\t"
172089 #endif
172090 #ifdef WOLFSSL_KEIL
172091         "adcs	r4, r4, %[r]\n\t"
172092 #elif defined(__clang__)
172093         "adcs	r4, %[r]\n\t"
172094 #else
172095         "adc	r4, %[r]\n\t"
172096 #endif
172097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172098         "adds	r2, r2, r5\n\t"
172099 #else
172100         "add	r2, r2, r5\n\t"
172101 #endif
172102 #ifdef WOLFSSL_KEIL
172103         "adcs	r3, r3, r6\n\t"
172104 #elif defined(__clang__)
172105         "adcs	r3, r6\n\t"
172106 #else
172107         "adc	r3, r6\n\t"
172108 #endif
172109 #ifdef WOLFSSL_KEIL
172110         "adcs	r4, r4, %[r]\n\t"
172111 #elif defined(__clang__)
172112         "adcs	r4, %[r]\n\t"
172113 #else
172114         "adc	r4, %[r]\n\t"
172115 #endif
172116         "#  A[12] * A[6]\n\t"
172117         "mov	%[a], r9\n\t"
172118         "ldr	r7, [%[a], #24]\n\t"
172119         "mov	%[a], r10\n\t"
172120         "uxth	r5, %[a]\n\t"
172121         "uxth	r6, r7\n\t"
172122 #ifdef WOLFSSL_KEIL
172123         "muls	r6, r5, r6\n\t"
172124 #elif defined(__clang__)
172125         "muls	r6, r5\n\t"
172126 #else
172127         "mul	r6, r5\n\t"
172128 #endif
172129 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172130         "adds	r2, r2, r6\n\t"
172131 #else
172132         "add	r2, r2, r6\n\t"
172133 #endif
172134 #ifdef WOLFSSL_KEIL
172135         "adcs	r3, r3, %[r]\n\t"
172136 #elif defined(__clang__)
172137         "adcs	r3, %[r]\n\t"
172138 #else
172139         "adc	r3, %[r]\n\t"
172140 #endif
172141 #ifdef WOLFSSL_KEIL
172142         "adcs	r4, r4, %[r]\n\t"
172143 #elif defined(__clang__)
172144         "adcs	r4, %[r]\n\t"
172145 #else
172146         "adc	r4, %[r]\n\t"
172147 #endif
172148 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172149         "adds	r2, r2, r6\n\t"
172150 #else
172151         "add	r2, r2, r6\n\t"
172152 #endif
172153 #ifdef WOLFSSL_KEIL
172154         "adcs	r3, r3, %[r]\n\t"
172155 #elif defined(__clang__)
172156         "adcs	r3, %[r]\n\t"
172157 #else
172158         "adc	r3, %[r]\n\t"
172159 #endif
172160 #ifdef WOLFSSL_KEIL
172161         "adcs	r4, r4, %[r]\n\t"
172162 #elif defined(__clang__)
172163         "adcs	r4, %[r]\n\t"
172164 #else
172165         "adc	r4, %[r]\n\t"
172166 #endif
172167 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172168         "lsrs	r6, r7, #16\n\t"
172169 #else
172170         "lsr	r6, r7, #16\n\t"
172171 #endif
172172 #ifdef WOLFSSL_KEIL
172173         "muls	r5, r6, r5\n\t"
172174 #elif defined(__clang__)
172175         "muls	r5, r6\n\t"
172176 #else
172177         "mul	r5, r6\n\t"
172178 #endif
172179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172180         "lsrs	r6, r5, #16\n\t"
172181 #else
172182         "lsr	r6, r5, #16\n\t"
172183 #endif
172184 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172185         "lsls	r5, r5, #16\n\t"
172186 #else
172187         "lsl	r5, r5, #16\n\t"
172188 #endif
172189 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172190         "adds	r2, r2, r5\n\t"
172191 #else
172192         "add	r2, r2, r5\n\t"
172193 #endif
172194 #ifdef WOLFSSL_KEIL
172195         "adcs	r3, r3, r6\n\t"
172196 #elif defined(__clang__)
172197         "adcs	r3, r6\n\t"
172198 #else
172199         "adc	r3, r6\n\t"
172200 #endif
172201 #ifdef WOLFSSL_KEIL
172202         "adcs	r4, r4, %[r]\n\t"
172203 #elif defined(__clang__)
172204         "adcs	r4, %[r]\n\t"
172205 #else
172206         "adc	r4, %[r]\n\t"
172207 #endif
172208 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172209         "adds	r2, r2, r5\n\t"
172210 #else
172211         "add	r2, r2, r5\n\t"
172212 #endif
172213 #ifdef WOLFSSL_KEIL
172214         "adcs	r3, r3, r6\n\t"
172215 #elif defined(__clang__)
172216         "adcs	r3, r6\n\t"
172217 #else
172218         "adc	r3, r6\n\t"
172219 #endif
172220 #ifdef WOLFSSL_KEIL
172221         "adcs	r4, r4, %[r]\n\t"
172222 #elif defined(__clang__)
172223         "adcs	r4, %[r]\n\t"
172224 #else
172225         "adc	r4, %[r]\n\t"
172226 #endif
172227 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172228         "lsrs	r5, %[a], #16\n\t"
172229 #else
172230         "lsr	r5, %[a], #16\n\t"
172231 #endif
172232 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172233         "lsrs	r6, r7, #16\n\t"
172234 #else
172235         "lsr	r6, r7, #16\n\t"
172236 #endif
172237 #ifdef WOLFSSL_KEIL
172238         "muls	r6, r5, r6\n\t"
172239 #elif defined(__clang__)
172240         "muls	r6, r5\n\t"
172241 #else
172242         "mul	r6, r5\n\t"
172243 #endif
172244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172245         "adds	r3, r3, r6\n\t"
172246 #else
172247         "add	r3, r3, r6\n\t"
172248 #endif
172249 #ifdef WOLFSSL_KEIL
172250         "adcs	r4, r4, %[r]\n\t"
172251 #elif defined(__clang__)
172252         "adcs	r4, %[r]\n\t"
172253 #else
172254         "adc	r4, %[r]\n\t"
172255 #endif
172256 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172257         "adds	r3, r3, r6\n\t"
172258 #else
172259         "add	r3, r3, r6\n\t"
172260 #endif
172261 #ifdef WOLFSSL_KEIL
172262         "adcs	r4, r4, %[r]\n\t"
172263 #elif defined(__clang__)
172264         "adcs	r4, %[r]\n\t"
172265 #else
172266         "adc	r4, %[r]\n\t"
172267 #endif
172268         "uxth	r6, r7\n\t"
172269 #ifdef WOLFSSL_KEIL
172270         "muls	r5, r6, r5\n\t"
172271 #elif defined(__clang__)
172272         "muls	r5, r6\n\t"
172273 #else
172274         "mul	r5, r6\n\t"
172275 #endif
172276 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172277         "lsrs	r6, r5, #16\n\t"
172278 #else
172279         "lsr	r6, r5, #16\n\t"
172280 #endif
172281 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172282         "lsls	r5, r5, #16\n\t"
172283 #else
172284         "lsl	r5, r5, #16\n\t"
172285 #endif
172286 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172287         "adds	r2, r2, r5\n\t"
172288 #else
172289         "add	r2, r2, r5\n\t"
172290 #endif
172291 #ifdef WOLFSSL_KEIL
172292         "adcs	r3, r3, r6\n\t"
172293 #elif defined(__clang__)
172294         "adcs	r3, r6\n\t"
172295 #else
172296         "adc	r3, r6\n\t"
172297 #endif
172298 #ifdef WOLFSSL_KEIL
172299         "adcs	r4, r4, %[r]\n\t"
172300 #elif defined(__clang__)
172301         "adcs	r4, %[r]\n\t"
172302 #else
172303         "adc	r4, %[r]\n\t"
172304 #endif
172305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172306         "adds	r2, r2, r5\n\t"
172307 #else
172308         "add	r2, r2, r5\n\t"
172309 #endif
172310 #ifdef WOLFSSL_KEIL
172311         "adcs	r3, r3, r6\n\t"
172312 #elif defined(__clang__)
172313         "adcs	r3, r6\n\t"
172314 #else
172315         "adc	r3, r6\n\t"
172316 #endif
172317 #ifdef WOLFSSL_KEIL
172318         "adcs	r4, r4, %[r]\n\t"
172319 #elif defined(__clang__)
172320         "adcs	r4, %[r]\n\t"
172321 #else
172322         "adc	r4, %[r]\n\t"
172323 #endif
172324         "#  A[11] * A[7]\n\t"
172325         "mov	%[a], r9\n\t"
172326         "ldr	r7, [%[a], #28]\n\t"
172327         "ldr	%[a], [%[a], #44]\n\t"
172328         "uxth	r5, %[a]\n\t"
172329         "uxth	r6, r7\n\t"
172330 #ifdef WOLFSSL_KEIL
172331         "muls	r6, r5, r6\n\t"
172332 #elif defined(__clang__)
172333         "muls	r6, r5\n\t"
172334 #else
172335         "mul	r6, r5\n\t"
172336 #endif
172337 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172338         "adds	r2, r2, r6\n\t"
172339 #else
172340         "add	r2, r2, r6\n\t"
172341 #endif
172342 #ifdef WOLFSSL_KEIL
172343         "adcs	r3, r3, %[r]\n\t"
172344 #elif defined(__clang__)
172345         "adcs	r3, %[r]\n\t"
172346 #else
172347         "adc	r3, %[r]\n\t"
172348 #endif
172349 #ifdef WOLFSSL_KEIL
172350         "adcs	r4, r4, %[r]\n\t"
172351 #elif defined(__clang__)
172352         "adcs	r4, %[r]\n\t"
172353 #else
172354         "adc	r4, %[r]\n\t"
172355 #endif
172356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172357         "adds	r2, r2, r6\n\t"
172358 #else
172359         "add	r2, r2, r6\n\t"
172360 #endif
172361 #ifdef WOLFSSL_KEIL
172362         "adcs	r3, r3, %[r]\n\t"
172363 #elif defined(__clang__)
172364         "adcs	r3, %[r]\n\t"
172365 #else
172366         "adc	r3, %[r]\n\t"
172367 #endif
172368 #ifdef WOLFSSL_KEIL
172369         "adcs	r4, r4, %[r]\n\t"
172370 #elif defined(__clang__)
172371         "adcs	r4, %[r]\n\t"
172372 #else
172373         "adc	r4, %[r]\n\t"
172374 #endif
172375 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172376         "lsrs	r6, r7, #16\n\t"
172377 #else
172378         "lsr	r6, r7, #16\n\t"
172379 #endif
172380 #ifdef WOLFSSL_KEIL
172381         "muls	r5, r6, r5\n\t"
172382 #elif defined(__clang__)
172383         "muls	r5, r6\n\t"
172384 #else
172385         "mul	r5, r6\n\t"
172386 #endif
172387 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172388         "lsrs	r6, r5, #16\n\t"
172389 #else
172390         "lsr	r6, r5, #16\n\t"
172391 #endif
172392 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172393         "lsls	r5, r5, #16\n\t"
172394 #else
172395         "lsl	r5, r5, #16\n\t"
172396 #endif
172397 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172398         "adds	r2, r2, r5\n\t"
172399 #else
172400         "add	r2, r2, r5\n\t"
172401 #endif
172402 #ifdef WOLFSSL_KEIL
172403         "adcs	r3, r3, r6\n\t"
172404 #elif defined(__clang__)
172405         "adcs	r3, r6\n\t"
172406 #else
172407         "adc	r3, r6\n\t"
172408 #endif
172409 #ifdef WOLFSSL_KEIL
172410         "adcs	r4, r4, %[r]\n\t"
172411 #elif defined(__clang__)
172412         "adcs	r4, %[r]\n\t"
172413 #else
172414         "adc	r4, %[r]\n\t"
172415 #endif
172416 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172417         "adds	r2, r2, r5\n\t"
172418 #else
172419         "add	r2, r2, r5\n\t"
172420 #endif
172421 #ifdef WOLFSSL_KEIL
172422         "adcs	r3, r3, r6\n\t"
172423 #elif defined(__clang__)
172424         "adcs	r3, r6\n\t"
172425 #else
172426         "adc	r3, r6\n\t"
172427 #endif
172428 #ifdef WOLFSSL_KEIL
172429         "adcs	r4, r4, %[r]\n\t"
172430 #elif defined(__clang__)
172431         "adcs	r4, %[r]\n\t"
172432 #else
172433         "adc	r4, %[r]\n\t"
172434 #endif
172435 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172436         "lsrs	r5, %[a], #16\n\t"
172437 #else
172438         "lsr	r5, %[a], #16\n\t"
172439 #endif
172440 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172441         "lsrs	r6, r7, #16\n\t"
172442 #else
172443         "lsr	r6, r7, #16\n\t"
172444 #endif
172445 #ifdef WOLFSSL_KEIL
172446         "muls	r6, r5, r6\n\t"
172447 #elif defined(__clang__)
172448         "muls	r6, r5\n\t"
172449 #else
172450         "mul	r6, r5\n\t"
172451 #endif
172452 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172453         "adds	r3, r3, r6\n\t"
172454 #else
172455         "add	r3, r3, r6\n\t"
172456 #endif
172457 #ifdef WOLFSSL_KEIL
172458         "adcs	r4, r4, %[r]\n\t"
172459 #elif defined(__clang__)
172460         "adcs	r4, %[r]\n\t"
172461 #else
172462         "adc	r4, %[r]\n\t"
172463 #endif
172464 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172465         "adds	r3, r3, r6\n\t"
172466 #else
172467         "add	r3, r3, r6\n\t"
172468 #endif
172469 #ifdef WOLFSSL_KEIL
172470         "adcs	r4, r4, %[r]\n\t"
172471 #elif defined(__clang__)
172472         "adcs	r4, %[r]\n\t"
172473 #else
172474         "adc	r4, %[r]\n\t"
172475 #endif
172476         "uxth	r6, r7\n\t"
172477 #ifdef WOLFSSL_KEIL
172478         "muls	r5, r6, r5\n\t"
172479 #elif defined(__clang__)
172480         "muls	r5, r6\n\t"
172481 #else
172482         "mul	r5, r6\n\t"
172483 #endif
172484 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172485         "lsrs	r6, r5, #16\n\t"
172486 #else
172487         "lsr	r6, r5, #16\n\t"
172488 #endif
172489 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172490         "lsls	r5, r5, #16\n\t"
172491 #else
172492         "lsl	r5, r5, #16\n\t"
172493 #endif
172494 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172495         "adds	r2, r2, r5\n\t"
172496 #else
172497         "add	r2, r2, r5\n\t"
172498 #endif
172499 #ifdef WOLFSSL_KEIL
172500         "adcs	r3, r3, r6\n\t"
172501 #elif defined(__clang__)
172502         "adcs	r3, r6\n\t"
172503 #else
172504         "adc	r3, r6\n\t"
172505 #endif
172506 #ifdef WOLFSSL_KEIL
172507         "adcs	r4, r4, %[r]\n\t"
172508 #elif defined(__clang__)
172509         "adcs	r4, %[r]\n\t"
172510 #else
172511         "adc	r4, %[r]\n\t"
172512 #endif
172513 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172514         "adds	r2, r2, r5\n\t"
172515 #else
172516         "add	r2, r2, r5\n\t"
172517 #endif
172518 #ifdef WOLFSSL_KEIL
172519         "adcs	r3, r3, r6\n\t"
172520 #elif defined(__clang__)
172521         "adcs	r3, r6\n\t"
172522 #else
172523         "adc	r3, r6\n\t"
172524 #endif
172525 #ifdef WOLFSSL_KEIL
172526         "adcs	r4, r4, %[r]\n\t"
172527 #elif defined(__clang__)
172528         "adcs	r4, %[r]\n\t"
172529 #else
172530         "adc	r4, %[r]\n\t"
172531 #endif
172532         "#  A[10] * A[8]\n\t"
172533         "mov	%[a], r9\n\t"
172534         "ldr	r7, [%[a], #32]\n\t"
172535         "ldr	%[a], [%[a], #40]\n\t"
172536         "uxth	r5, %[a]\n\t"
172537         "uxth	r6, r7\n\t"
172538 #ifdef WOLFSSL_KEIL
172539         "muls	r6, r5, r6\n\t"
172540 #elif defined(__clang__)
172541         "muls	r6, r5\n\t"
172542 #else
172543         "mul	r6, r5\n\t"
172544 #endif
172545 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172546         "adds	r2, r2, r6\n\t"
172547 #else
172548         "add	r2, r2, r6\n\t"
172549 #endif
172550 #ifdef WOLFSSL_KEIL
172551         "adcs	r3, r3, %[r]\n\t"
172552 #elif defined(__clang__)
172553         "adcs	r3, %[r]\n\t"
172554 #else
172555         "adc	r3, %[r]\n\t"
172556 #endif
172557 #ifdef WOLFSSL_KEIL
172558         "adcs	r4, r4, %[r]\n\t"
172559 #elif defined(__clang__)
172560         "adcs	r4, %[r]\n\t"
172561 #else
172562         "adc	r4, %[r]\n\t"
172563 #endif
172564 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172565         "adds	r2, r2, r6\n\t"
172566 #else
172567         "add	r2, r2, r6\n\t"
172568 #endif
172569 #ifdef WOLFSSL_KEIL
172570         "adcs	r3, r3, %[r]\n\t"
172571 #elif defined(__clang__)
172572         "adcs	r3, %[r]\n\t"
172573 #else
172574         "adc	r3, %[r]\n\t"
172575 #endif
172576 #ifdef WOLFSSL_KEIL
172577         "adcs	r4, r4, %[r]\n\t"
172578 #elif defined(__clang__)
172579         "adcs	r4, %[r]\n\t"
172580 #else
172581         "adc	r4, %[r]\n\t"
172582 #endif
172583 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172584         "lsrs	r6, r7, #16\n\t"
172585 #else
172586         "lsr	r6, r7, #16\n\t"
172587 #endif
172588 #ifdef WOLFSSL_KEIL
172589         "muls	r5, r6, r5\n\t"
172590 #elif defined(__clang__)
172591         "muls	r5, r6\n\t"
172592 #else
172593         "mul	r5, r6\n\t"
172594 #endif
172595 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172596         "lsrs	r6, r5, #16\n\t"
172597 #else
172598         "lsr	r6, r5, #16\n\t"
172599 #endif
172600 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172601         "lsls	r5, r5, #16\n\t"
172602 #else
172603         "lsl	r5, r5, #16\n\t"
172604 #endif
172605 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172606         "adds	r2, r2, r5\n\t"
172607 #else
172608         "add	r2, r2, r5\n\t"
172609 #endif
172610 #ifdef WOLFSSL_KEIL
172611         "adcs	r3, r3, r6\n\t"
172612 #elif defined(__clang__)
172613         "adcs	r3, r6\n\t"
172614 #else
172615         "adc	r3, r6\n\t"
172616 #endif
172617 #ifdef WOLFSSL_KEIL
172618         "adcs	r4, r4, %[r]\n\t"
172619 #elif defined(__clang__)
172620         "adcs	r4, %[r]\n\t"
172621 #else
172622         "adc	r4, %[r]\n\t"
172623 #endif
172624 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172625         "adds	r2, r2, r5\n\t"
172626 #else
172627         "add	r2, r2, r5\n\t"
172628 #endif
172629 #ifdef WOLFSSL_KEIL
172630         "adcs	r3, r3, r6\n\t"
172631 #elif defined(__clang__)
172632         "adcs	r3, r6\n\t"
172633 #else
172634         "adc	r3, r6\n\t"
172635 #endif
172636 #ifdef WOLFSSL_KEIL
172637         "adcs	r4, r4, %[r]\n\t"
172638 #elif defined(__clang__)
172639         "adcs	r4, %[r]\n\t"
172640 #else
172641         "adc	r4, %[r]\n\t"
172642 #endif
172643 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172644         "lsrs	r5, %[a], #16\n\t"
172645 #else
172646         "lsr	r5, %[a], #16\n\t"
172647 #endif
172648 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172649         "lsrs	r6, r7, #16\n\t"
172650 #else
172651         "lsr	r6, r7, #16\n\t"
172652 #endif
172653 #ifdef WOLFSSL_KEIL
172654         "muls	r6, r5, r6\n\t"
172655 #elif defined(__clang__)
172656         "muls	r6, r5\n\t"
172657 #else
172658         "mul	r6, r5\n\t"
172659 #endif
172660 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172661         "adds	r3, r3, r6\n\t"
172662 #else
172663         "add	r3, r3, r6\n\t"
172664 #endif
172665 #ifdef WOLFSSL_KEIL
172666         "adcs	r4, r4, %[r]\n\t"
172667 #elif defined(__clang__)
172668         "adcs	r4, %[r]\n\t"
172669 #else
172670         "adc	r4, %[r]\n\t"
172671 #endif
172672 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172673         "adds	r3, r3, r6\n\t"
172674 #else
172675         "add	r3, r3, r6\n\t"
172676 #endif
172677 #ifdef WOLFSSL_KEIL
172678         "adcs	r4, r4, %[r]\n\t"
172679 #elif defined(__clang__)
172680         "adcs	r4, %[r]\n\t"
172681 #else
172682         "adc	r4, %[r]\n\t"
172683 #endif
172684         "uxth	r6, r7\n\t"
172685 #ifdef WOLFSSL_KEIL
172686         "muls	r5, r6, r5\n\t"
172687 #elif defined(__clang__)
172688         "muls	r5, r6\n\t"
172689 #else
172690         "mul	r5, r6\n\t"
172691 #endif
172692 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172693         "lsrs	r6, r5, #16\n\t"
172694 #else
172695         "lsr	r6, r5, #16\n\t"
172696 #endif
172697 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172698         "lsls	r5, r5, #16\n\t"
172699 #else
172700         "lsl	r5, r5, #16\n\t"
172701 #endif
172702 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172703         "adds	r2, r2, r5\n\t"
172704 #else
172705         "add	r2, r2, r5\n\t"
172706 #endif
172707 #ifdef WOLFSSL_KEIL
172708         "adcs	r3, r3, r6\n\t"
172709 #elif defined(__clang__)
172710         "adcs	r3, r6\n\t"
172711 #else
172712         "adc	r3, r6\n\t"
172713 #endif
172714 #ifdef WOLFSSL_KEIL
172715         "adcs	r4, r4, %[r]\n\t"
172716 #elif defined(__clang__)
172717         "adcs	r4, %[r]\n\t"
172718 #else
172719         "adc	r4, %[r]\n\t"
172720 #endif
172721 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172722         "adds	r2, r2, r5\n\t"
172723 #else
172724         "add	r2, r2, r5\n\t"
172725 #endif
172726 #ifdef WOLFSSL_KEIL
172727         "adcs	r3, r3, r6\n\t"
172728 #elif defined(__clang__)
172729         "adcs	r3, r6\n\t"
172730 #else
172731         "adc	r3, r6\n\t"
172732 #endif
172733 #ifdef WOLFSSL_KEIL
172734         "adcs	r4, r4, %[r]\n\t"
172735 #elif defined(__clang__)
172736         "adcs	r4, %[r]\n\t"
172737 #else
172738         "adc	r4, %[r]\n\t"
172739 #endif
172740         "#  A[9] * A[9]\n\t"
172741         "mov	%[a], r9\n\t"
172742         "ldr	r7, [%[a], #36]\n\t"
172743 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172744         "lsrs	r6, r7, #16\n\t"
172745 #else
172746         "lsr	r6, r7, #16\n\t"
172747 #endif
172748         "uxth	r5, r7\n\t"
172749 #ifdef WOLFSSL_KEIL
172750         "muls	r5, r5, r5\n\t"
172751 #elif defined(__clang__)
172752         "muls	r5, r5\n\t"
172753 #else
172754         "mul	r5, r5\n\t"
172755 #endif
172756 #ifdef WOLFSSL_KEIL
172757         "muls	r6, r6, r6\n\t"
172758 #elif defined(__clang__)
172759         "muls	r6, r6\n\t"
172760 #else
172761         "mul	r6, r6\n\t"
172762 #endif
172763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172764         "adds	r2, r2, r5\n\t"
172765 #else
172766         "add	r2, r2, r5\n\t"
172767 #endif
172768 #ifdef WOLFSSL_KEIL
172769         "adcs	r3, r3, r6\n\t"
172770 #elif defined(__clang__)
172771         "adcs	r3, r6\n\t"
172772 #else
172773         "adc	r3, r6\n\t"
172774 #endif
172775 #ifdef WOLFSSL_KEIL
172776         "adcs	r4, r4, %[r]\n\t"
172777 #elif defined(__clang__)
172778         "adcs	r4, %[r]\n\t"
172779 #else
172780         "adc	r4, %[r]\n\t"
172781 #endif
172782 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172783         "lsrs	r6, r7, #16\n\t"
172784 #else
172785         "lsr	r6, r7, #16\n\t"
172786 #endif
172787         "uxth	r5, r7\n\t"
172788 #ifdef WOLFSSL_KEIL
172789         "muls	r5, r6, r5\n\t"
172790 #elif defined(__clang__)
172791         "muls	r5, r6\n\t"
172792 #else
172793         "mul	r5, r6\n\t"
172794 #endif
172795 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172796         "lsrs	r6, r5, #15\n\t"
172797 #else
172798         "lsr	r6, r5, #15\n\t"
172799 #endif
172800 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172801         "lsls	r5, r5, #17\n\t"
172802 #else
172803         "lsl	r5, r5, #17\n\t"
172804 #endif
172805 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172806         "adds	r2, r2, r5\n\t"
172807 #else
172808         "add	r2, r2, r5\n\t"
172809 #endif
172810 #ifdef WOLFSSL_KEIL
172811         "adcs	r3, r3, r6\n\t"
172812 #elif defined(__clang__)
172813         "adcs	r3, r6\n\t"
172814 #else
172815         "adc	r3, r6\n\t"
172816 #endif
172817 #ifdef WOLFSSL_KEIL
172818         "adcs	r4, r4, %[r]\n\t"
172819 #elif defined(__clang__)
172820         "adcs	r4, %[r]\n\t"
172821 #else
172822         "adc	r4, %[r]\n\t"
172823 #endif
172824         "mov	%[r], r8\n\t"
172825         "str	r2, [%[r], #72]\n\t"
172826         "movs	%[r], #0\n\t"
172827         "#  A[10] * A[9]\n\t"
172828         "movs	r2, #0\n\t"
172829         "ldr	%[a], [%[a], #40]\n\t"
172830         "uxth	r5, %[a]\n\t"
172831         "uxth	r6, r7\n\t"
172832 #ifdef WOLFSSL_KEIL
172833         "muls	r6, r5, r6\n\t"
172834 #elif defined(__clang__)
172835         "muls	r6, r5\n\t"
172836 #else
172837         "mul	r6, r5\n\t"
172838 #endif
172839 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172840         "adds	r3, r3, r6\n\t"
172841 #else
172842         "add	r3, r3, r6\n\t"
172843 #endif
172844 #ifdef WOLFSSL_KEIL
172845         "adcs	r4, r4, %[r]\n\t"
172846 #elif defined(__clang__)
172847         "adcs	r4, %[r]\n\t"
172848 #else
172849         "adc	r4, %[r]\n\t"
172850 #endif
172851 #ifdef WOLFSSL_KEIL
172852         "adcs	r2, r2, %[r]\n\t"
172853 #elif defined(__clang__)
172854         "adcs	r2, %[r]\n\t"
172855 #else
172856         "adc	r2, %[r]\n\t"
172857 #endif
172858 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172859         "adds	r3, r3, r6\n\t"
172860 #else
172861         "add	r3, r3, r6\n\t"
172862 #endif
172863 #ifdef WOLFSSL_KEIL
172864         "adcs	r4, r4, %[r]\n\t"
172865 #elif defined(__clang__)
172866         "adcs	r4, %[r]\n\t"
172867 #else
172868         "adc	r4, %[r]\n\t"
172869 #endif
172870 #ifdef WOLFSSL_KEIL
172871         "adcs	r2, r2, %[r]\n\t"
172872 #elif defined(__clang__)
172873         "adcs	r2, %[r]\n\t"
172874 #else
172875         "adc	r2, %[r]\n\t"
172876 #endif
172877 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172878         "lsrs	r6, r7, #16\n\t"
172879 #else
172880         "lsr	r6, r7, #16\n\t"
172881 #endif
172882 #ifdef WOLFSSL_KEIL
172883         "muls	r5, r6, r5\n\t"
172884 #elif defined(__clang__)
172885         "muls	r5, r6\n\t"
172886 #else
172887         "mul	r5, r6\n\t"
172888 #endif
172889 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172890         "lsrs	r6, r5, #16\n\t"
172891 #else
172892         "lsr	r6, r5, #16\n\t"
172893 #endif
172894 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172895         "lsls	r5, r5, #16\n\t"
172896 #else
172897         "lsl	r5, r5, #16\n\t"
172898 #endif
172899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172900         "adds	r3, r3, r5\n\t"
172901 #else
172902         "add	r3, r3, r5\n\t"
172903 #endif
172904 #ifdef WOLFSSL_KEIL
172905         "adcs	r4, r4, r6\n\t"
172906 #elif defined(__clang__)
172907         "adcs	r4, r6\n\t"
172908 #else
172909         "adc	r4, r6\n\t"
172910 #endif
172911 #ifdef WOLFSSL_KEIL
172912         "adcs	r2, r2, %[r]\n\t"
172913 #elif defined(__clang__)
172914         "adcs	r2, %[r]\n\t"
172915 #else
172916         "adc	r2, %[r]\n\t"
172917 #endif
172918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172919         "adds	r3, r3, r5\n\t"
172920 #else
172921         "add	r3, r3, r5\n\t"
172922 #endif
172923 #ifdef WOLFSSL_KEIL
172924         "adcs	r4, r4, r6\n\t"
172925 #elif defined(__clang__)
172926         "adcs	r4, r6\n\t"
172927 #else
172928         "adc	r4, r6\n\t"
172929 #endif
172930 #ifdef WOLFSSL_KEIL
172931         "adcs	r2, r2, %[r]\n\t"
172932 #elif defined(__clang__)
172933         "adcs	r2, %[r]\n\t"
172934 #else
172935         "adc	r2, %[r]\n\t"
172936 #endif
172937 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172938         "lsrs	r5, %[a], #16\n\t"
172939 #else
172940         "lsr	r5, %[a], #16\n\t"
172941 #endif
172942 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172943         "lsrs	r6, r7, #16\n\t"
172944 #else
172945         "lsr	r6, r7, #16\n\t"
172946 #endif
172947 #ifdef WOLFSSL_KEIL
172948         "muls	r6, r5, r6\n\t"
172949 #elif defined(__clang__)
172950         "muls	r6, r5\n\t"
172951 #else
172952         "mul	r6, r5\n\t"
172953 #endif
172954 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172955         "adds	r4, r4, r6\n\t"
172956 #else
172957         "add	r4, r4, r6\n\t"
172958 #endif
172959 #ifdef WOLFSSL_KEIL
172960         "adcs	r2, r2, %[r]\n\t"
172961 #elif defined(__clang__)
172962         "adcs	r2, %[r]\n\t"
172963 #else
172964         "adc	r2, %[r]\n\t"
172965 #endif
172966 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172967         "adds	r4, r4, r6\n\t"
172968 #else
172969         "add	r4, r4, r6\n\t"
172970 #endif
172971 #ifdef WOLFSSL_KEIL
172972         "adcs	r2, r2, %[r]\n\t"
172973 #elif defined(__clang__)
172974         "adcs	r2, %[r]\n\t"
172975 #else
172976         "adc	r2, %[r]\n\t"
172977 #endif
172978         "uxth	r6, r7\n\t"
172979 #ifdef WOLFSSL_KEIL
172980         "muls	r5, r6, r5\n\t"
172981 #elif defined(__clang__)
172982         "muls	r5, r6\n\t"
172983 #else
172984         "mul	r5, r6\n\t"
172985 #endif
172986 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172987         "lsrs	r6, r5, #16\n\t"
172988 #else
172989         "lsr	r6, r5, #16\n\t"
172990 #endif
172991 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172992         "lsls	r5, r5, #16\n\t"
172993 #else
172994         "lsl	r5, r5, #16\n\t"
172995 #endif
172996 #if defined(__clang__) || defined(WOLFSSL_KEIL)
172997         "adds	r3, r3, r5\n\t"
172998 #else
172999         "add	r3, r3, r5\n\t"
173000 #endif
173001 #ifdef WOLFSSL_KEIL
173002         "adcs	r4, r4, r6\n\t"
173003 #elif defined(__clang__)
173004         "adcs	r4, r6\n\t"
173005 #else
173006         "adc	r4, r6\n\t"
173007 #endif
173008 #ifdef WOLFSSL_KEIL
173009         "adcs	r2, r2, %[r]\n\t"
173010 #elif defined(__clang__)
173011         "adcs	r2, %[r]\n\t"
173012 #else
173013         "adc	r2, %[r]\n\t"
173014 #endif
173015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173016         "adds	r3, r3, r5\n\t"
173017 #else
173018         "add	r3, r3, r5\n\t"
173019 #endif
173020 #ifdef WOLFSSL_KEIL
173021         "adcs	r4, r4, r6\n\t"
173022 #elif defined(__clang__)
173023         "adcs	r4, r6\n\t"
173024 #else
173025         "adc	r4, r6\n\t"
173026 #endif
173027 #ifdef WOLFSSL_KEIL
173028         "adcs	r2, r2, %[r]\n\t"
173029 #elif defined(__clang__)
173030         "adcs	r2, %[r]\n\t"
173031 #else
173032         "adc	r2, %[r]\n\t"
173033 #endif
173034         "#  A[11] * A[8]\n\t"
173035         "mov	%[a], r9\n\t"
173036         "ldr	r7, [%[a], #32]\n\t"
173037         "ldr	%[a], [%[a], #44]\n\t"
173038         "uxth	r5, %[a]\n\t"
173039         "uxth	r6, r7\n\t"
173040 #ifdef WOLFSSL_KEIL
173041         "muls	r6, r5, r6\n\t"
173042 #elif defined(__clang__)
173043         "muls	r6, r5\n\t"
173044 #else
173045         "mul	r6, r5\n\t"
173046 #endif
173047 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173048         "adds	r3, r3, r6\n\t"
173049 #else
173050         "add	r3, r3, r6\n\t"
173051 #endif
173052 #ifdef WOLFSSL_KEIL
173053         "adcs	r4, r4, %[r]\n\t"
173054 #elif defined(__clang__)
173055         "adcs	r4, %[r]\n\t"
173056 #else
173057         "adc	r4, %[r]\n\t"
173058 #endif
173059 #ifdef WOLFSSL_KEIL
173060         "adcs	r2, r2, %[r]\n\t"
173061 #elif defined(__clang__)
173062         "adcs	r2, %[r]\n\t"
173063 #else
173064         "adc	r2, %[r]\n\t"
173065 #endif
173066 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173067         "adds	r3, r3, r6\n\t"
173068 #else
173069         "add	r3, r3, r6\n\t"
173070 #endif
173071 #ifdef WOLFSSL_KEIL
173072         "adcs	r4, r4, %[r]\n\t"
173073 #elif defined(__clang__)
173074         "adcs	r4, %[r]\n\t"
173075 #else
173076         "adc	r4, %[r]\n\t"
173077 #endif
173078 #ifdef WOLFSSL_KEIL
173079         "adcs	r2, r2, %[r]\n\t"
173080 #elif defined(__clang__)
173081         "adcs	r2, %[r]\n\t"
173082 #else
173083         "adc	r2, %[r]\n\t"
173084 #endif
173085 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173086         "lsrs	r6, r7, #16\n\t"
173087 #else
173088         "lsr	r6, r7, #16\n\t"
173089 #endif
173090 #ifdef WOLFSSL_KEIL
173091         "muls	r5, r6, r5\n\t"
173092 #elif defined(__clang__)
173093         "muls	r5, r6\n\t"
173094 #else
173095         "mul	r5, r6\n\t"
173096 #endif
173097 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173098         "lsrs	r6, r5, #16\n\t"
173099 #else
173100         "lsr	r6, r5, #16\n\t"
173101 #endif
173102 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173103         "lsls	r5, r5, #16\n\t"
173104 #else
173105         "lsl	r5, r5, #16\n\t"
173106 #endif
173107 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173108         "adds	r3, r3, r5\n\t"
173109 #else
173110         "add	r3, r3, r5\n\t"
173111 #endif
173112 #ifdef WOLFSSL_KEIL
173113         "adcs	r4, r4, r6\n\t"
173114 #elif defined(__clang__)
173115         "adcs	r4, r6\n\t"
173116 #else
173117         "adc	r4, r6\n\t"
173118 #endif
173119 #ifdef WOLFSSL_KEIL
173120         "adcs	r2, r2, %[r]\n\t"
173121 #elif defined(__clang__)
173122         "adcs	r2, %[r]\n\t"
173123 #else
173124         "adc	r2, %[r]\n\t"
173125 #endif
173126 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173127         "adds	r3, r3, r5\n\t"
173128 #else
173129         "add	r3, r3, r5\n\t"
173130 #endif
173131 #ifdef WOLFSSL_KEIL
173132         "adcs	r4, r4, r6\n\t"
173133 #elif defined(__clang__)
173134         "adcs	r4, r6\n\t"
173135 #else
173136         "adc	r4, r6\n\t"
173137 #endif
173138 #ifdef WOLFSSL_KEIL
173139         "adcs	r2, r2, %[r]\n\t"
173140 #elif defined(__clang__)
173141         "adcs	r2, %[r]\n\t"
173142 #else
173143         "adc	r2, %[r]\n\t"
173144 #endif
173145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173146         "lsrs	r5, %[a], #16\n\t"
173147 #else
173148         "lsr	r5, %[a], #16\n\t"
173149 #endif
173150 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173151         "lsrs	r6, r7, #16\n\t"
173152 #else
173153         "lsr	r6, r7, #16\n\t"
173154 #endif
173155 #ifdef WOLFSSL_KEIL
173156         "muls	r6, r5, r6\n\t"
173157 #elif defined(__clang__)
173158         "muls	r6, r5\n\t"
173159 #else
173160         "mul	r6, r5\n\t"
173161 #endif
173162 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173163         "adds	r4, r4, r6\n\t"
173164 #else
173165         "add	r4, r4, r6\n\t"
173166 #endif
173167 #ifdef WOLFSSL_KEIL
173168         "adcs	r2, r2, %[r]\n\t"
173169 #elif defined(__clang__)
173170         "adcs	r2, %[r]\n\t"
173171 #else
173172         "adc	r2, %[r]\n\t"
173173 #endif
173174 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173175         "adds	r4, r4, r6\n\t"
173176 #else
173177         "add	r4, r4, r6\n\t"
173178 #endif
173179 #ifdef WOLFSSL_KEIL
173180         "adcs	r2, r2, %[r]\n\t"
173181 #elif defined(__clang__)
173182         "adcs	r2, %[r]\n\t"
173183 #else
173184         "adc	r2, %[r]\n\t"
173185 #endif
173186         "uxth	r6, r7\n\t"
173187 #ifdef WOLFSSL_KEIL
173188         "muls	r5, r6, r5\n\t"
173189 #elif defined(__clang__)
173190         "muls	r5, r6\n\t"
173191 #else
173192         "mul	r5, r6\n\t"
173193 #endif
173194 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173195         "lsrs	r6, r5, #16\n\t"
173196 #else
173197         "lsr	r6, r5, #16\n\t"
173198 #endif
173199 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173200         "lsls	r5, r5, #16\n\t"
173201 #else
173202         "lsl	r5, r5, #16\n\t"
173203 #endif
173204 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173205         "adds	r3, r3, r5\n\t"
173206 #else
173207         "add	r3, r3, r5\n\t"
173208 #endif
173209 #ifdef WOLFSSL_KEIL
173210         "adcs	r4, r4, r6\n\t"
173211 #elif defined(__clang__)
173212         "adcs	r4, r6\n\t"
173213 #else
173214         "adc	r4, r6\n\t"
173215 #endif
173216 #ifdef WOLFSSL_KEIL
173217         "adcs	r2, r2, %[r]\n\t"
173218 #elif defined(__clang__)
173219         "adcs	r2, %[r]\n\t"
173220 #else
173221         "adc	r2, %[r]\n\t"
173222 #endif
173223 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173224         "adds	r3, r3, r5\n\t"
173225 #else
173226         "add	r3, r3, r5\n\t"
173227 #endif
173228 #ifdef WOLFSSL_KEIL
173229         "adcs	r4, r4, r6\n\t"
173230 #elif defined(__clang__)
173231         "adcs	r4, r6\n\t"
173232 #else
173233         "adc	r4, r6\n\t"
173234 #endif
173235 #ifdef WOLFSSL_KEIL
173236         "adcs	r2, r2, %[r]\n\t"
173237 #elif defined(__clang__)
173238         "adcs	r2, %[r]\n\t"
173239 #else
173240         "adc	r2, %[r]\n\t"
173241 #endif
173242         "#  A[12] * A[7]\n\t"
173243         "mov	%[a], r9\n\t"
173244         "ldr	r7, [%[a], #28]\n\t"
173245         "mov	%[a], r10\n\t"
173246         "uxth	r5, %[a]\n\t"
173247         "uxth	r6, r7\n\t"
173248 #ifdef WOLFSSL_KEIL
173249         "muls	r6, r5, r6\n\t"
173250 #elif defined(__clang__)
173251         "muls	r6, r5\n\t"
173252 #else
173253         "mul	r6, r5\n\t"
173254 #endif
173255 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173256         "adds	r3, r3, r6\n\t"
173257 #else
173258         "add	r3, r3, r6\n\t"
173259 #endif
173260 #ifdef WOLFSSL_KEIL
173261         "adcs	r4, r4, %[r]\n\t"
173262 #elif defined(__clang__)
173263         "adcs	r4, %[r]\n\t"
173264 #else
173265         "adc	r4, %[r]\n\t"
173266 #endif
173267 #ifdef WOLFSSL_KEIL
173268         "adcs	r2, r2, %[r]\n\t"
173269 #elif defined(__clang__)
173270         "adcs	r2, %[r]\n\t"
173271 #else
173272         "adc	r2, %[r]\n\t"
173273 #endif
173274 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173275         "adds	r3, r3, r6\n\t"
173276 #else
173277         "add	r3, r3, r6\n\t"
173278 #endif
173279 #ifdef WOLFSSL_KEIL
173280         "adcs	r4, r4, %[r]\n\t"
173281 #elif defined(__clang__)
173282         "adcs	r4, %[r]\n\t"
173283 #else
173284         "adc	r4, %[r]\n\t"
173285 #endif
173286 #ifdef WOLFSSL_KEIL
173287         "adcs	r2, r2, %[r]\n\t"
173288 #elif defined(__clang__)
173289         "adcs	r2, %[r]\n\t"
173290 #else
173291         "adc	r2, %[r]\n\t"
173292 #endif
173293 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173294         "lsrs	r6, r7, #16\n\t"
173295 #else
173296         "lsr	r6, r7, #16\n\t"
173297 #endif
173298 #ifdef WOLFSSL_KEIL
173299         "muls	r5, r6, r5\n\t"
173300 #elif defined(__clang__)
173301         "muls	r5, r6\n\t"
173302 #else
173303         "mul	r5, r6\n\t"
173304 #endif
173305 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173306         "lsrs	r6, r5, #16\n\t"
173307 #else
173308         "lsr	r6, r5, #16\n\t"
173309 #endif
173310 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173311         "lsls	r5, r5, #16\n\t"
173312 #else
173313         "lsl	r5, r5, #16\n\t"
173314 #endif
173315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173316         "adds	r3, r3, r5\n\t"
173317 #else
173318         "add	r3, r3, r5\n\t"
173319 #endif
173320 #ifdef WOLFSSL_KEIL
173321         "adcs	r4, r4, r6\n\t"
173322 #elif defined(__clang__)
173323         "adcs	r4, r6\n\t"
173324 #else
173325         "adc	r4, r6\n\t"
173326 #endif
173327 #ifdef WOLFSSL_KEIL
173328         "adcs	r2, r2, %[r]\n\t"
173329 #elif defined(__clang__)
173330         "adcs	r2, %[r]\n\t"
173331 #else
173332         "adc	r2, %[r]\n\t"
173333 #endif
173334 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173335         "adds	r3, r3, r5\n\t"
173336 #else
173337         "add	r3, r3, r5\n\t"
173338 #endif
173339 #ifdef WOLFSSL_KEIL
173340         "adcs	r4, r4, r6\n\t"
173341 #elif defined(__clang__)
173342         "adcs	r4, r6\n\t"
173343 #else
173344         "adc	r4, r6\n\t"
173345 #endif
173346 #ifdef WOLFSSL_KEIL
173347         "adcs	r2, r2, %[r]\n\t"
173348 #elif defined(__clang__)
173349         "adcs	r2, %[r]\n\t"
173350 #else
173351         "adc	r2, %[r]\n\t"
173352 #endif
173353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173354         "lsrs	r5, %[a], #16\n\t"
173355 #else
173356         "lsr	r5, %[a], #16\n\t"
173357 #endif
173358 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173359         "lsrs	r6, r7, #16\n\t"
173360 #else
173361         "lsr	r6, r7, #16\n\t"
173362 #endif
173363 #ifdef WOLFSSL_KEIL
173364         "muls	r6, r5, r6\n\t"
173365 #elif defined(__clang__)
173366         "muls	r6, r5\n\t"
173367 #else
173368         "mul	r6, r5\n\t"
173369 #endif
173370 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173371         "adds	r4, r4, r6\n\t"
173372 #else
173373         "add	r4, r4, r6\n\t"
173374 #endif
173375 #ifdef WOLFSSL_KEIL
173376         "adcs	r2, r2, %[r]\n\t"
173377 #elif defined(__clang__)
173378         "adcs	r2, %[r]\n\t"
173379 #else
173380         "adc	r2, %[r]\n\t"
173381 #endif
173382 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173383         "adds	r4, r4, r6\n\t"
173384 #else
173385         "add	r4, r4, r6\n\t"
173386 #endif
173387 #ifdef WOLFSSL_KEIL
173388         "adcs	r2, r2, %[r]\n\t"
173389 #elif defined(__clang__)
173390         "adcs	r2, %[r]\n\t"
173391 #else
173392         "adc	r2, %[r]\n\t"
173393 #endif
173394         "uxth	r6, r7\n\t"
173395 #ifdef WOLFSSL_KEIL
173396         "muls	r5, r6, r5\n\t"
173397 #elif defined(__clang__)
173398         "muls	r5, r6\n\t"
173399 #else
173400         "mul	r5, r6\n\t"
173401 #endif
173402 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173403         "lsrs	r6, r5, #16\n\t"
173404 #else
173405         "lsr	r6, r5, #16\n\t"
173406 #endif
173407 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173408         "lsls	r5, r5, #16\n\t"
173409 #else
173410         "lsl	r5, r5, #16\n\t"
173411 #endif
173412 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173413         "adds	r3, r3, r5\n\t"
173414 #else
173415         "add	r3, r3, r5\n\t"
173416 #endif
173417 #ifdef WOLFSSL_KEIL
173418         "adcs	r4, r4, r6\n\t"
173419 #elif defined(__clang__)
173420         "adcs	r4, r6\n\t"
173421 #else
173422         "adc	r4, r6\n\t"
173423 #endif
173424 #ifdef WOLFSSL_KEIL
173425         "adcs	r2, r2, %[r]\n\t"
173426 #elif defined(__clang__)
173427         "adcs	r2, %[r]\n\t"
173428 #else
173429         "adc	r2, %[r]\n\t"
173430 #endif
173431 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173432         "adds	r3, r3, r5\n\t"
173433 #else
173434         "add	r3, r3, r5\n\t"
173435 #endif
173436 #ifdef WOLFSSL_KEIL
173437         "adcs	r4, r4, r6\n\t"
173438 #elif defined(__clang__)
173439         "adcs	r4, r6\n\t"
173440 #else
173441         "adc	r4, r6\n\t"
173442 #endif
173443 #ifdef WOLFSSL_KEIL
173444         "adcs	r2, r2, %[r]\n\t"
173445 #elif defined(__clang__)
173446         "adcs	r2, %[r]\n\t"
173447 #else
173448         "adc	r2, %[r]\n\t"
173449 #endif
173450         "#  A[13] * A[6]\n\t"
173451         "mov	%[a], r9\n\t"
173452         "ldr	r7, [%[a], #24]\n\t"
173453         "mov	%[a], r11\n\t"
173454         "uxth	r5, %[a]\n\t"
173455         "uxth	r6, r7\n\t"
173456 #ifdef WOLFSSL_KEIL
173457         "muls	r6, r5, r6\n\t"
173458 #elif defined(__clang__)
173459         "muls	r6, r5\n\t"
173460 #else
173461         "mul	r6, r5\n\t"
173462 #endif
173463 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173464         "adds	r3, r3, r6\n\t"
173465 #else
173466         "add	r3, r3, r6\n\t"
173467 #endif
173468 #ifdef WOLFSSL_KEIL
173469         "adcs	r4, r4, %[r]\n\t"
173470 #elif defined(__clang__)
173471         "adcs	r4, %[r]\n\t"
173472 #else
173473         "adc	r4, %[r]\n\t"
173474 #endif
173475 #ifdef WOLFSSL_KEIL
173476         "adcs	r2, r2, %[r]\n\t"
173477 #elif defined(__clang__)
173478         "adcs	r2, %[r]\n\t"
173479 #else
173480         "adc	r2, %[r]\n\t"
173481 #endif
173482 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173483         "adds	r3, r3, r6\n\t"
173484 #else
173485         "add	r3, r3, r6\n\t"
173486 #endif
173487 #ifdef WOLFSSL_KEIL
173488         "adcs	r4, r4, %[r]\n\t"
173489 #elif defined(__clang__)
173490         "adcs	r4, %[r]\n\t"
173491 #else
173492         "adc	r4, %[r]\n\t"
173493 #endif
173494 #ifdef WOLFSSL_KEIL
173495         "adcs	r2, r2, %[r]\n\t"
173496 #elif defined(__clang__)
173497         "adcs	r2, %[r]\n\t"
173498 #else
173499         "adc	r2, %[r]\n\t"
173500 #endif
173501 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173502         "lsrs	r6, r7, #16\n\t"
173503 #else
173504         "lsr	r6, r7, #16\n\t"
173505 #endif
173506 #ifdef WOLFSSL_KEIL
173507         "muls	r5, r6, r5\n\t"
173508 #elif defined(__clang__)
173509         "muls	r5, r6\n\t"
173510 #else
173511         "mul	r5, r6\n\t"
173512 #endif
173513 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173514         "lsrs	r6, r5, #16\n\t"
173515 #else
173516         "lsr	r6, r5, #16\n\t"
173517 #endif
173518 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173519         "lsls	r5, r5, #16\n\t"
173520 #else
173521         "lsl	r5, r5, #16\n\t"
173522 #endif
173523 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173524         "adds	r3, r3, r5\n\t"
173525 #else
173526         "add	r3, r3, r5\n\t"
173527 #endif
173528 #ifdef WOLFSSL_KEIL
173529         "adcs	r4, r4, r6\n\t"
173530 #elif defined(__clang__)
173531         "adcs	r4, r6\n\t"
173532 #else
173533         "adc	r4, r6\n\t"
173534 #endif
173535 #ifdef WOLFSSL_KEIL
173536         "adcs	r2, r2, %[r]\n\t"
173537 #elif defined(__clang__)
173538         "adcs	r2, %[r]\n\t"
173539 #else
173540         "adc	r2, %[r]\n\t"
173541 #endif
173542 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173543         "adds	r3, r3, r5\n\t"
173544 #else
173545         "add	r3, r3, r5\n\t"
173546 #endif
173547 #ifdef WOLFSSL_KEIL
173548         "adcs	r4, r4, r6\n\t"
173549 #elif defined(__clang__)
173550         "adcs	r4, r6\n\t"
173551 #else
173552         "adc	r4, r6\n\t"
173553 #endif
173554 #ifdef WOLFSSL_KEIL
173555         "adcs	r2, r2, %[r]\n\t"
173556 #elif defined(__clang__)
173557         "adcs	r2, %[r]\n\t"
173558 #else
173559         "adc	r2, %[r]\n\t"
173560 #endif
173561 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173562         "lsrs	r5, %[a], #16\n\t"
173563 #else
173564         "lsr	r5, %[a], #16\n\t"
173565 #endif
173566 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173567         "lsrs	r6, r7, #16\n\t"
173568 #else
173569         "lsr	r6, r7, #16\n\t"
173570 #endif
173571 #ifdef WOLFSSL_KEIL
173572         "muls	r6, r5, r6\n\t"
173573 #elif defined(__clang__)
173574         "muls	r6, r5\n\t"
173575 #else
173576         "mul	r6, r5\n\t"
173577 #endif
173578 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173579         "adds	r4, r4, r6\n\t"
173580 #else
173581         "add	r4, r4, r6\n\t"
173582 #endif
173583 #ifdef WOLFSSL_KEIL
173584         "adcs	r2, r2, %[r]\n\t"
173585 #elif defined(__clang__)
173586         "adcs	r2, %[r]\n\t"
173587 #else
173588         "adc	r2, %[r]\n\t"
173589 #endif
173590 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173591         "adds	r4, r4, r6\n\t"
173592 #else
173593         "add	r4, r4, r6\n\t"
173594 #endif
173595 #ifdef WOLFSSL_KEIL
173596         "adcs	r2, r2, %[r]\n\t"
173597 #elif defined(__clang__)
173598         "adcs	r2, %[r]\n\t"
173599 #else
173600         "adc	r2, %[r]\n\t"
173601 #endif
173602         "uxth	r6, r7\n\t"
173603 #ifdef WOLFSSL_KEIL
173604         "muls	r5, r6, r5\n\t"
173605 #elif defined(__clang__)
173606         "muls	r5, r6\n\t"
173607 #else
173608         "mul	r5, r6\n\t"
173609 #endif
173610 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173611         "lsrs	r6, r5, #16\n\t"
173612 #else
173613         "lsr	r6, r5, #16\n\t"
173614 #endif
173615 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173616         "lsls	r5, r5, #16\n\t"
173617 #else
173618         "lsl	r5, r5, #16\n\t"
173619 #endif
173620 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173621         "adds	r3, r3, r5\n\t"
173622 #else
173623         "add	r3, r3, r5\n\t"
173624 #endif
173625 #ifdef WOLFSSL_KEIL
173626         "adcs	r4, r4, r6\n\t"
173627 #elif defined(__clang__)
173628         "adcs	r4, r6\n\t"
173629 #else
173630         "adc	r4, r6\n\t"
173631 #endif
173632 #ifdef WOLFSSL_KEIL
173633         "adcs	r2, r2, %[r]\n\t"
173634 #elif defined(__clang__)
173635         "adcs	r2, %[r]\n\t"
173636 #else
173637         "adc	r2, %[r]\n\t"
173638 #endif
173639 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173640         "adds	r3, r3, r5\n\t"
173641 #else
173642         "add	r3, r3, r5\n\t"
173643 #endif
173644 #ifdef WOLFSSL_KEIL
173645         "adcs	r4, r4, r6\n\t"
173646 #elif defined(__clang__)
173647         "adcs	r4, r6\n\t"
173648 #else
173649         "adc	r4, r6\n\t"
173650 #endif
173651 #ifdef WOLFSSL_KEIL
173652         "adcs	r2, r2, %[r]\n\t"
173653 #elif defined(__clang__)
173654         "adcs	r2, %[r]\n\t"
173655 #else
173656         "adc	r2, %[r]\n\t"
173657 #endif
173658         "#  A[14] * A[5]\n\t"
173659         "mov	%[a], r9\n\t"
173660         "ldr	r7, [%[a], #20]\n\t"
173661         "mov	%[a], r12\n\t"
173662         "uxth	r5, %[a]\n\t"
173663         "uxth	r6, r7\n\t"
173664 #ifdef WOLFSSL_KEIL
173665         "muls	r6, r5, r6\n\t"
173666 #elif defined(__clang__)
173667         "muls	r6, r5\n\t"
173668 #else
173669         "mul	r6, r5\n\t"
173670 #endif
173671 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173672         "adds	r3, r3, r6\n\t"
173673 #else
173674         "add	r3, r3, r6\n\t"
173675 #endif
173676 #ifdef WOLFSSL_KEIL
173677         "adcs	r4, r4, %[r]\n\t"
173678 #elif defined(__clang__)
173679         "adcs	r4, %[r]\n\t"
173680 #else
173681         "adc	r4, %[r]\n\t"
173682 #endif
173683 #ifdef WOLFSSL_KEIL
173684         "adcs	r2, r2, %[r]\n\t"
173685 #elif defined(__clang__)
173686         "adcs	r2, %[r]\n\t"
173687 #else
173688         "adc	r2, %[r]\n\t"
173689 #endif
173690 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173691         "adds	r3, r3, r6\n\t"
173692 #else
173693         "add	r3, r3, r6\n\t"
173694 #endif
173695 #ifdef WOLFSSL_KEIL
173696         "adcs	r4, r4, %[r]\n\t"
173697 #elif defined(__clang__)
173698         "adcs	r4, %[r]\n\t"
173699 #else
173700         "adc	r4, %[r]\n\t"
173701 #endif
173702 #ifdef WOLFSSL_KEIL
173703         "adcs	r2, r2, %[r]\n\t"
173704 #elif defined(__clang__)
173705         "adcs	r2, %[r]\n\t"
173706 #else
173707         "adc	r2, %[r]\n\t"
173708 #endif
173709 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173710         "lsrs	r6, r7, #16\n\t"
173711 #else
173712         "lsr	r6, r7, #16\n\t"
173713 #endif
173714 #ifdef WOLFSSL_KEIL
173715         "muls	r5, r6, r5\n\t"
173716 #elif defined(__clang__)
173717         "muls	r5, r6\n\t"
173718 #else
173719         "mul	r5, r6\n\t"
173720 #endif
173721 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173722         "lsrs	r6, r5, #16\n\t"
173723 #else
173724         "lsr	r6, r5, #16\n\t"
173725 #endif
173726 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173727         "lsls	r5, r5, #16\n\t"
173728 #else
173729         "lsl	r5, r5, #16\n\t"
173730 #endif
173731 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173732         "adds	r3, r3, r5\n\t"
173733 #else
173734         "add	r3, r3, r5\n\t"
173735 #endif
173736 #ifdef WOLFSSL_KEIL
173737         "adcs	r4, r4, r6\n\t"
173738 #elif defined(__clang__)
173739         "adcs	r4, r6\n\t"
173740 #else
173741         "adc	r4, r6\n\t"
173742 #endif
173743 #ifdef WOLFSSL_KEIL
173744         "adcs	r2, r2, %[r]\n\t"
173745 #elif defined(__clang__)
173746         "adcs	r2, %[r]\n\t"
173747 #else
173748         "adc	r2, %[r]\n\t"
173749 #endif
173750 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173751         "adds	r3, r3, r5\n\t"
173752 #else
173753         "add	r3, r3, r5\n\t"
173754 #endif
173755 #ifdef WOLFSSL_KEIL
173756         "adcs	r4, r4, r6\n\t"
173757 #elif defined(__clang__)
173758         "adcs	r4, r6\n\t"
173759 #else
173760         "adc	r4, r6\n\t"
173761 #endif
173762 #ifdef WOLFSSL_KEIL
173763         "adcs	r2, r2, %[r]\n\t"
173764 #elif defined(__clang__)
173765         "adcs	r2, %[r]\n\t"
173766 #else
173767         "adc	r2, %[r]\n\t"
173768 #endif
173769 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173770         "lsrs	r5, %[a], #16\n\t"
173771 #else
173772         "lsr	r5, %[a], #16\n\t"
173773 #endif
173774 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173775         "lsrs	r6, r7, #16\n\t"
173776 #else
173777         "lsr	r6, r7, #16\n\t"
173778 #endif
173779 #ifdef WOLFSSL_KEIL
173780         "muls	r6, r5, r6\n\t"
173781 #elif defined(__clang__)
173782         "muls	r6, r5\n\t"
173783 #else
173784         "mul	r6, r5\n\t"
173785 #endif
173786 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173787         "adds	r4, r4, r6\n\t"
173788 #else
173789         "add	r4, r4, r6\n\t"
173790 #endif
173791 #ifdef WOLFSSL_KEIL
173792         "adcs	r2, r2, %[r]\n\t"
173793 #elif defined(__clang__)
173794         "adcs	r2, %[r]\n\t"
173795 #else
173796         "adc	r2, %[r]\n\t"
173797 #endif
173798 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173799         "adds	r4, r4, r6\n\t"
173800 #else
173801         "add	r4, r4, r6\n\t"
173802 #endif
173803 #ifdef WOLFSSL_KEIL
173804         "adcs	r2, r2, %[r]\n\t"
173805 #elif defined(__clang__)
173806         "adcs	r2, %[r]\n\t"
173807 #else
173808         "adc	r2, %[r]\n\t"
173809 #endif
173810         "uxth	r6, r7\n\t"
173811 #ifdef WOLFSSL_KEIL
173812         "muls	r5, r6, r5\n\t"
173813 #elif defined(__clang__)
173814         "muls	r5, r6\n\t"
173815 #else
173816         "mul	r5, r6\n\t"
173817 #endif
173818 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173819         "lsrs	r6, r5, #16\n\t"
173820 #else
173821         "lsr	r6, r5, #16\n\t"
173822 #endif
173823 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173824         "lsls	r5, r5, #16\n\t"
173825 #else
173826         "lsl	r5, r5, #16\n\t"
173827 #endif
173828 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173829         "adds	r3, r3, r5\n\t"
173830 #else
173831         "add	r3, r3, r5\n\t"
173832 #endif
173833 #ifdef WOLFSSL_KEIL
173834         "adcs	r4, r4, r6\n\t"
173835 #elif defined(__clang__)
173836         "adcs	r4, r6\n\t"
173837 #else
173838         "adc	r4, r6\n\t"
173839 #endif
173840 #ifdef WOLFSSL_KEIL
173841         "adcs	r2, r2, %[r]\n\t"
173842 #elif defined(__clang__)
173843         "adcs	r2, %[r]\n\t"
173844 #else
173845         "adc	r2, %[r]\n\t"
173846 #endif
173847 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173848         "adds	r3, r3, r5\n\t"
173849 #else
173850         "add	r3, r3, r5\n\t"
173851 #endif
173852 #ifdef WOLFSSL_KEIL
173853         "adcs	r4, r4, r6\n\t"
173854 #elif defined(__clang__)
173855         "adcs	r4, r6\n\t"
173856 #else
173857         "adc	r4, r6\n\t"
173858 #endif
173859 #ifdef WOLFSSL_KEIL
173860         "adcs	r2, r2, %[r]\n\t"
173861 #elif defined(__clang__)
173862         "adcs	r2, %[r]\n\t"
173863 #else
173864         "adc	r2, %[r]\n\t"
173865 #endif
173866         "#  A[15] * A[4]\n\t"
173867         "mov	%[a], r9\n\t"
173868         "ldr	r7, [%[a], #16]\n\t"
173869         "mov	%[a], lr\n\t"
173870         "uxth	r5, %[a]\n\t"
173871         "uxth	r6, r7\n\t"
173872 #ifdef WOLFSSL_KEIL
173873         "muls	r6, r5, r6\n\t"
173874 #elif defined(__clang__)
173875         "muls	r6, r5\n\t"
173876 #else
173877         "mul	r6, r5\n\t"
173878 #endif
173879 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173880         "adds	r3, r3, r6\n\t"
173881 #else
173882         "add	r3, r3, r6\n\t"
173883 #endif
173884 #ifdef WOLFSSL_KEIL
173885         "adcs	r4, r4, %[r]\n\t"
173886 #elif defined(__clang__)
173887         "adcs	r4, %[r]\n\t"
173888 #else
173889         "adc	r4, %[r]\n\t"
173890 #endif
173891 #ifdef WOLFSSL_KEIL
173892         "adcs	r2, r2, %[r]\n\t"
173893 #elif defined(__clang__)
173894         "adcs	r2, %[r]\n\t"
173895 #else
173896         "adc	r2, %[r]\n\t"
173897 #endif
173898 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173899         "adds	r3, r3, r6\n\t"
173900 #else
173901         "add	r3, r3, r6\n\t"
173902 #endif
173903 #ifdef WOLFSSL_KEIL
173904         "adcs	r4, r4, %[r]\n\t"
173905 #elif defined(__clang__)
173906         "adcs	r4, %[r]\n\t"
173907 #else
173908         "adc	r4, %[r]\n\t"
173909 #endif
173910 #ifdef WOLFSSL_KEIL
173911         "adcs	r2, r2, %[r]\n\t"
173912 #elif defined(__clang__)
173913         "adcs	r2, %[r]\n\t"
173914 #else
173915         "adc	r2, %[r]\n\t"
173916 #endif
173917 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173918         "lsrs	r6, r7, #16\n\t"
173919 #else
173920         "lsr	r6, r7, #16\n\t"
173921 #endif
173922 #ifdef WOLFSSL_KEIL
173923         "muls	r5, r6, r5\n\t"
173924 #elif defined(__clang__)
173925         "muls	r5, r6\n\t"
173926 #else
173927         "mul	r5, r6\n\t"
173928 #endif
173929 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173930         "lsrs	r6, r5, #16\n\t"
173931 #else
173932         "lsr	r6, r5, #16\n\t"
173933 #endif
173934 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173935         "lsls	r5, r5, #16\n\t"
173936 #else
173937         "lsl	r5, r5, #16\n\t"
173938 #endif
173939 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173940         "adds	r3, r3, r5\n\t"
173941 #else
173942         "add	r3, r3, r5\n\t"
173943 #endif
173944 #ifdef WOLFSSL_KEIL
173945         "adcs	r4, r4, r6\n\t"
173946 #elif defined(__clang__)
173947         "adcs	r4, r6\n\t"
173948 #else
173949         "adc	r4, r6\n\t"
173950 #endif
173951 #ifdef WOLFSSL_KEIL
173952         "adcs	r2, r2, %[r]\n\t"
173953 #elif defined(__clang__)
173954         "adcs	r2, %[r]\n\t"
173955 #else
173956         "adc	r2, %[r]\n\t"
173957 #endif
173958 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173959         "adds	r3, r3, r5\n\t"
173960 #else
173961         "add	r3, r3, r5\n\t"
173962 #endif
173963 #ifdef WOLFSSL_KEIL
173964         "adcs	r4, r4, r6\n\t"
173965 #elif defined(__clang__)
173966         "adcs	r4, r6\n\t"
173967 #else
173968         "adc	r4, r6\n\t"
173969 #endif
173970 #ifdef WOLFSSL_KEIL
173971         "adcs	r2, r2, %[r]\n\t"
173972 #elif defined(__clang__)
173973         "adcs	r2, %[r]\n\t"
173974 #else
173975         "adc	r2, %[r]\n\t"
173976 #endif
173977 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173978         "lsrs	r5, %[a], #16\n\t"
173979 #else
173980         "lsr	r5, %[a], #16\n\t"
173981 #endif
173982 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173983         "lsrs	r6, r7, #16\n\t"
173984 #else
173985         "lsr	r6, r7, #16\n\t"
173986 #endif
173987 #ifdef WOLFSSL_KEIL
173988         "muls	r6, r5, r6\n\t"
173989 #elif defined(__clang__)
173990         "muls	r6, r5\n\t"
173991 #else
173992         "mul	r6, r5\n\t"
173993 #endif
173994 #if defined(__clang__) || defined(WOLFSSL_KEIL)
173995         "adds	r4, r4, r6\n\t"
173996 #else
173997         "add	r4, r4, r6\n\t"
173998 #endif
173999 #ifdef WOLFSSL_KEIL
174000         "adcs	r2, r2, %[r]\n\t"
174001 #elif defined(__clang__)
174002         "adcs	r2, %[r]\n\t"
174003 #else
174004         "adc	r2, %[r]\n\t"
174005 #endif
174006 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174007         "adds	r4, r4, r6\n\t"
174008 #else
174009         "add	r4, r4, r6\n\t"
174010 #endif
174011 #ifdef WOLFSSL_KEIL
174012         "adcs	r2, r2, %[r]\n\t"
174013 #elif defined(__clang__)
174014         "adcs	r2, %[r]\n\t"
174015 #else
174016         "adc	r2, %[r]\n\t"
174017 #endif
174018         "uxth	r6, r7\n\t"
174019 #ifdef WOLFSSL_KEIL
174020         "muls	r5, r6, r5\n\t"
174021 #elif defined(__clang__)
174022         "muls	r5, r6\n\t"
174023 #else
174024         "mul	r5, r6\n\t"
174025 #endif
174026 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174027         "lsrs	r6, r5, #16\n\t"
174028 #else
174029         "lsr	r6, r5, #16\n\t"
174030 #endif
174031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174032         "lsls	r5, r5, #16\n\t"
174033 #else
174034         "lsl	r5, r5, #16\n\t"
174035 #endif
174036 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174037         "adds	r3, r3, r5\n\t"
174038 #else
174039         "add	r3, r3, r5\n\t"
174040 #endif
174041 #ifdef WOLFSSL_KEIL
174042         "adcs	r4, r4, r6\n\t"
174043 #elif defined(__clang__)
174044         "adcs	r4, r6\n\t"
174045 #else
174046         "adc	r4, r6\n\t"
174047 #endif
174048 #ifdef WOLFSSL_KEIL
174049         "adcs	r2, r2, %[r]\n\t"
174050 #elif defined(__clang__)
174051         "adcs	r2, %[r]\n\t"
174052 #else
174053         "adc	r2, %[r]\n\t"
174054 #endif
174055 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174056         "adds	r3, r3, r5\n\t"
174057 #else
174058         "add	r3, r3, r5\n\t"
174059 #endif
174060 #ifdef WOLFSSL_KEIL
174061         "adcs	r4, r4, r6\n\t"
174062 #elif defined(__clang__)
174063         "adcs	r4, r6\n\t"
174064 #else
174065         "adc	r4, r6\n\t"
174066 #endif
174067 #ifdef WOLFSSL_KEIL
174068         "adcs	r2, r2, %[r]\n\t"
174069 #elif defined(__clang__)
174070         "adcs	r2, %[r]\n\t"
174071 #else
174072         "adc	r2, %[r]\n\t"
174073 #endif
174074         "mov	%[r], r8\n\t"
174075         "str	r3, [%[r], #76]\n\t"
174076         "movs	%[r], #0\n\t"
174077         "#  A[15] * A[5]\n\t"
174078         "movs	r3, #0\n\t"
174079         "mov	%[a], r9\n\t"
174080         "ldr	r7, [%[a], #20]\n\t"
174081         "mov	%[a], lr\n\t"
174082         "uxth	r5, %[a]\n\t"
174083         "uxth	r6, r7\n\t"
174084 #ifdef WOLFSSL_KEIL
174085         "muls	r6, r5, r6\n\t"
174086 #elif defined(__clang__)
174087         "muls	r6, r5\n\t"
174088 #else
174089         "mul	r6, r5\n\t"
174090 #endif
174091 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174092         "adds	r4, r4, r6\n\t"
174093 #else
174094         "add	r4, r4, r6\n\t"
174095 #endif
174096 #ifdef WOLFSSL_KEIL
174097         "adcs	r2, r2, %[r]\n\t"
174098 #elif defined(__clang__)
174099         "adcs	r2, %[r]\n\t"
174100 #else
174101         "adc	r2, %[r]\n\t"
174102 #endif
174103 #ifdef WOLFSSL_KEIL
174104         "adcs	r3, r3, %[r]\n\t"
174105 #elif defined(__clang__)
174106         "adcs	r3, %[r]\n\t"
174107 #else
174108         "adc	r3, %[r]\n\t"
174109 #endif
174110 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174111         "adds	r4, r4, r6\n\t"
174112 #else
174113         "add	r4, r4, r6\n\t"
174114 #endif
174115 #ifdef WOLFSSL_KEIL
174116         "adcs	r2, r2, %[r]\n\t"
174117 #elif defined(__clang__)
174118         "adcs	r2, %[r]\n\t"
174119 #else
174120         "adc	r2, %[r]\n\t"
174121 #endif
174122 #ifdef WOLFSSL_KEIL
174123         "adcs	r3, r3, %[r]\n\t"
174124 #elif defined(__clang__)
174125         "adcs	r3, %[r]\n\t"
174126 #else
174127         "adc	r3, %[r]\n\t"
174128 #endif
174129 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174130         "lsrs	r6, r7, #16\n\t"
174131 #else
174132         "lsr	r6, r7, #16\n\t"
174133 #endif
174134 #ifdef WOLFSSL_KEIL
174135         "muls	r5, r6, r5\n\t"
174136 #elif defined(__clang__)
174137         "muls	r5, r6\n\t"
174138 #else
174139         "mul	r5, r6\n\t"
174140 #endif
174141 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174142         "lsrs	r6, r5, #16\n\t"
174143 #else
174144         "lsr	r6, r5, #16\n\t"
174145 #endif
174146 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174147         "lsls	r5, r5, #16\n\t"
174148 #else
174149         "lsl	r5, r5, #16\n\t"
174150 #endif
174151 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174152         "adds	r4, r4, r5\n\t"
174153 #else
174154         "add	r4, r4, r5\n\t"
174155 #endif
174156 #ifdef WOLFSSL_KEIL
174157         "adcs	r2, r2, r6\n\t"
174158 #elif defined(__clang__)
174159         "adcs	r2, r6\n\t"
174160 #else
174161         "adc	r2, r6\n\t"
174162 #endif
174163 #ifdef WOLFSSL_KEIL
174164         "adcs	r3, r3, %[r]\n\t"
174165 #elif defined(__clang__)
174166         "adcs	r3, %[r]\n\t"
174167 #else
174168         "adc	r3, %[r]\n\t"
174169 #endif
174170 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174171         "adds	r4, r4, r5\n\t"
174172 #else
174173         "add	r4, r4, r5\n\t"
174174 #endif
174175 #ifdef WOLFSSL_KEIL
174176         "adcs	r2, r2, r6\n\t"
174177 #elif defined(__clang__)
174178         "adcs	r2, r6\n\t"
174179 #else
174180         "adc	r2, r6\n\t"
174181 #endif
174182 #ifdef WOLFSSL_KEIL
174183         "adcs	r3, r3, %[r]\n\t"
174184 #elif defined(__clang__)
174185         "adcs	r3, %[r]\n\t"
174186 #else
174187         "adc	r3, %[r]\n\t"
174188 #endif
174189 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174190         "lsrs	r5, %[a], #16\n\t"
174191 #else
174192         "lsr	r5, %[a], #16\n\t"
174193 #endif
174194 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174195         "lsrs	r6, r7, #16\n\t"
174196 #else
174197         "lsr	r6, r7, #16\n\t"
174198 #endif
174199 #ifdef WOLFSSL_KEIL
174200         "muls	r6, r5, r6\n\t"
174201 #elif defined(__clang__)
174202         "muls	r6, r5\n\t"
174203 #else
174204         "mul	r6, r5\n\t"
174205 #endif
174206 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174207         "adds	r2, r2, r6\n\t"
174208 #else
174209         "add	r2, r2, r6\n\t"
174210 #endif
174211 #ifdef WOLFSSL_KEIL
174212         "adcs	r3, r3, %[r]\n\t"
174213 #elif defined(__clang__)
174214         "adcs	r3, %[r]\n\t"
174215 #else
174216         "adc	r3, %[r]\n\t"
174217 #endif
174218 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174219         "adds	r2, r2, r6\n\t"
174220 #else
174221         "add	r2, r2, r6\n\t"
174222 #endif
174223 #ifdef WOLFSSL_KEIL
174224         "adcs	r3, r3, %[r]\n\t"
174225 #elif defined(__clang__)
174226         "adcs	r3, %[r]\n\t"
174227 #else
174228         "adc	r3, %[r]\n\t"
174229 #endif
174230         "uxth	r6, r7\n\t"
174231 #ifdef WOLFSSL_KEIL
174232         "muls	r5, r6, r5\n\t"
174233 #elif defined(__clang__)
174234         "muls	r5, r6\n\t"
174235 #else
174236         "mul	r5, r6\n\t"
174237 #endif
174238 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174239         "lsrs	r6, r5, #16\n\t"
174240 #else
174241         "lsr	r6, r5, #16\n\t"
174242 #endif
174243 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174244         "lsls	r5, r5, #16\n\t"
174245 #else
174246         "lsl	r5, r5, #16\n\t"
174247 #endif
174248 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174249         "adds	r4, r4, r5\n\t"
174250 #else
174251         "add	r4, r4, r5\n\t"
174252 #endif
174253 #ifdef WOLFSSL_KEIL
174254         "adcs	r2, r2, r6\n\t"
174255 #elif defined(__clang__)
174256         "adcs	r2, r6\n\t"
174257 #else
174258         "adc	r2, r6\n\t"
174259 #endif
174260 #ifdef WOLFSSL_KEIL
174261         "adcs	r3, r3, %[r]\n\t"
174262 #elif defined(__clang__)
174263         "adcs	r3, %[r]\n\t"
174264 #else
174265         "adc	r3, %[r]\n\t"
174266 #endif
174267 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174268         "adds	r4, r4, r5\n\t"
174269 #else
174270         "add	r4, r4, r5\n\t"
174271 #endif
174272 #ifdef WOLFSSL_KEIL
174273         "adcs	r2, r2, r6\n\t"
174274 #elif defined(__clang__)
174275         "adcs	r2, r6\n\t"
174276 #else
174277         "adc	r2, r6\n\t"
174278 #endif
174279 #ifdef WOLFSSL_KEIL
174280         "adcs	r3, r3, %[r]\n\t"
174281 #elif defined(__clang__)
174282         "adcs	r3, %[r]\n\t"
174283 #else
174284         "adc	r3, %[r]\n\t"
174285 #endif
174286         "#  A[14] * A[6]\n\t"
174287         "mov	%[a], r9\n\t"
174288         "ldr	r7, [%[a], #24]\n\t"
174289         "mov	%[a], r12\n\t"
174290         "uxth	r5, %[a]\n\t"
174291         "uxth	r6, r7\n\t"
174292 #ifdef WOLFSSL_KEIL
174293         "muls	r6, r5, r6\n\t"
174294 #elif defined(__clang__)
174295         "muls	r6, r5\n\t"
174296 #else
174297         "mul	r6, r5\n\t"
174298 #endif
174299 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174300         "adds	r4, r4, r6\n\t"
174301 #else
174302         "add	r4, r4, r6\n\t"
174303 #endif
174304 #ifdef WOLFSSL_KEIL
174305         "adcs	r2, r2, %[r]\n\t"
174306 #elif defined(__clang__)
174307         "adcs	r2, %[r]\n\t"
174308 #else
174309         "adc	r2, %[r]\n\t"
174310 #endif
174311 #ifdef WOLFSSL_KEIL
174312         "adcs	r3, r3, %[r]\n\t"
174313 #elif defined(__clang__)
174314         "adcs	r3, %[r]\n\t"
174315 #else
174316         "adc	r3, %[r]\n\t"
174317 #endif
174318 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174319         "adds	r4, r4, r6\n\t"
174320 #else
174321         "add	r4, r4, r6\n\t"
174322 #endif
174323 #ifdef WOLFSSL_KEIL
174324         "adcs	r2, r2, %[r]\n\t"
174325 #elif defined(__clang__)
174326         "adcs	r2, %[r]\n\t"
174327 #else
174328         "adc	r2, %[r]\n\t"
174329 #endif
174330 #ifdef WOLFSSL_KEIL
174331         "adcs	r3, r3, %[r]\n\t"
174332 #elif defined(__clang__)
174333         "adcs	r3, %[r]\n\t"
174334 #else
174335         "adc	r3, %[r]\n\t"
174336 #endif
174337 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174338         "lsrs	r6, r7, #16\n\t"
174339 #else
174340         "lsr	r6, r7, #16\n\t"
174341 #endif
174342 #ifdef WOLFSSL_KEIL
174343         "muls	r5, r6, r5\n\t"
174344 #elif defined(__clang__)
174345         "muls	r5, r6\n\t"
174346 #else
174347         "mul	r5, r6\n\t"
174348 #endif
174349 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174350         "lsrs	r6, r5, #16\n\t"
174351 #else
174352         "lsr	r6, r5, #16\n\t"
174353 #endif
174354 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174355         "lsls	r5, r5, #16\n\t"
174356 #else
174357         "lsl	r5, r5, #16\n\t"
174358 #endif
174359 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174360         "adds	r4, r4, r5\n\t"
174361 #else
174362         "add	r4, r4, r5\n\t"
174363 #endif
174364 #ifdef WOLFSSL_KEIL
174365         "adcs	r2, r2, r6\n\t"
174366 #elif defined(__clang__)
174367         "adcs	r2, r6\n\t"
174368 #else
174369         "adc	r2, r6\n\t"
174370 #endif
174371 #ifdef WOLFSSL_KEIL
174372         "adcs	r3, r3, %[r]\n\t"
174373 #elif defined(__clang__)
174374         "adcs	r3, %[r]\n\t"
174375 #else
174376         "adc	r3, %[r]\n\t"
174377 #endif
174378 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174379         "adds	r4, r4, r5\n\t"
174380 #else
174381         "add	r4, r4, r5\n\t"
174382 #endif
174383 #ifdef WOLFSSL_KEIL
174384         "adcs	r2, r2, r6\n\t"
174385 #elif defined(__clang__)
174386         "adcs	r2, r6\n\t"
174387 #else
174388         "adc	r2, r6\n\t"
174389 #endif
174390 #ifdef WOLFSSL_KEIL
174391         "adcs	r3, r3, %[r]\n\t"
174392 #elif defined(__clang__)
174393         "adcs	r3, %[r]\n\t"
174394 #else
174395         "adc	r3, %[r]\n\t"
174396 #endif
174397 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174398         "lsrs	r5, %[a], #16\n\t"
174399 #else
174400         "lsr	r5, %[a], #16\n\t"
174401 #endif
174402 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174403         "lsrs	r6, r7, #16\n\t"
174404 #else
174405         "lsr	r6, r7, #16\n\t"
174406 #endif
174407 #ifdef WOLFSSL_KEIL
174408         "muls	r6, r5, r6\n\t"
174409 #elif defined(__clang__)
174410         "muls	r6, r5\n\t"
174411 #else
174412         "mul	r6, r5\n\t"
174413 #endif
174414 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174415         "adds	r2, r2, r6\n\t"
174416 #else
174417         "add	r2, r2, r6\n\t"
174418 #endif
174419 #ifdef WOLFSSL_KEIL
174420         "adcs	r3, r3, %[r]\n\t"
174421 #elif defined(__clang__)
174422         "adcs	r3, %[r]\n\t"
174423 #else
174424         "adc	r3, %[r]\n\t"
174425 #endif
174426 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174427         "adds	r2, r2, r6\n\t"
174428 #else
174429         "add	r2, r2, r6\n\t"
174430 #endif
174431 #ifdef WOLFSSL_KEIL
174432         "adcs	r3, r3, %[r]\n\t"
174433 #elif defined(__clang__)
174434         "adcs	r3, %[r]\n\t"
174435 #else
174436         "adc	r3, %[r]\n\t"
174437 #endif
174438         "uxth	r6, r7\n\t"
174439 #ifdef WOLFSSL_KEIL
174440         "muls	r5, r6, r5\n\t"
174441 #elif defined(__clang__)
174442         "muls	r5, r6\n\t"
174443 #else
174444         "mul	r5, r6\n\t"
174445 #endif
174446 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174447         "lsrs	r6, r5, #16\n\t"
174448 #else
174449         "lsr	r6, r5, #16\n\t"
174450 #endif
174451 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174452         "lsls	r5, r5, #16\n\t"
174453 #else
174454         "lsl	r5, r5, #16\n\t"
174455 #endif
174456 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174457         "adds	r4, r4, r5\n\t"
174458 #else
174459         "add	r4, r4, r5\n\t"
174460 #endif
174461 #ifdef WOLFSSL_KEIL
174462         "adcs	r2, r2, r6\n\t"
174463 #elif defined(__clang__)
174464         "adcs	r2, r6\n\t"
174465 #else
174466         "adc	r2, r6\n\t"
174467 #endif
174468 #ifdef WOLFSSL_KEIL
174469         "adcs	r3, r3, %[r]\n\t"
174470 #elif defined(__clang__)
174471         "adcs	r3, %[r]\n\t"
174472 #else
174473         "adc	r3, %[r]\n\t"
174474 #endif
174475 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174476         "adds	r4, r4, r5\n\t"
174477 #else
174478         "add	r4, r4, r5\n\t"
174479 #endif
174480 #ifdef WOLFSSL_KEIL
174481         "adcs	r2, r2, r6\n\t"
174482 #elif defined(__clang__)
174483         "adcs	r2, r6\n\t"
174484 #else
174485         "adc	r2, r6\n\t"
174486 #endif
174487 #ifdef WOLFSSL_KEIL
174488         "adcs	r3, r3, %[r]\n\t"
174489 #elif defined(__clang__)
174490         "adcs	r3, %[r]\n\t"
174491 #else
174492         "adc	r3, %[r]\n\t"
174493 #endif
174494         "#  A[13] * A[7]\n\t"
174495         "mov	%[a], r9\n\t"
174496         "ldr	r7, [%[a], #28]\n\t"
174497         "mov	%[a], r11\n\t"
174498         "uxth	r5, %[a]\n\t"
174499         "uxth	r6, r7\n\t"
174500 #ifdef WOLFSSL_KEIL
174501         "muls	r6, r5, r6\n\t"
174502 #elif defined(__clang__)
174503         "muls	r6, r5\n\t"
174504 #else
174505         "mul	r6, r5\n\t"
174506 #endif
174507 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174508         "adds	r4, r4, r6\n\t"
174509 #else
174510         "add	r4, r4, r6\n\t"
174511 #endif
174512 #ifdef WOLFSSL_KEIL
174513         "adcs	r2, r2, %[r]\n\t"
174514 #elif defined(__clang__)
174515         "adcs	r2, %[r]\n\t"
174516 #else
174517         "adc	r2, %[r]\n\t"
174518 #endif
174519 #ifdef WOLFSSL_KEIL
174520         "adcs	r3, r3, %[r]\n\t"
174521 #elif defined(__clang__)
174522         "adcs	r3, %[r]\n\t"
174523 #else
174524         "adc	r3, %[r]\n\t"
174525 #endif
174526 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174527         "adds	r4, r4, r6\n\t"
174528 #else
174529         "add	r4, r4, r6\n\t"
174530 #endif
174531 #ifdef WOLFSSL_KEIL
174532         "adcs	r2, r2, %[r]\n\t"
174533 #elif defined(__clang__)
174534         "adcs	r2, %[r]\n\t"
174535 #else
174536         "adc	r2, %[r]\n\t"
174537 #endif
174538 #ifdef WOLFSSL_KEIL
174539         "adcs	r3, r3, %[r]\n\t"
174540 #elif defined(__clang__)
174541         "adcs	r3, %[r]\n\t"
174542 #else
174543         "adc	r3, %[r]\n\t"
174544 #endif
174545 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174546         "lsrs	r6, r7, #16\n\t"
174547 #else
174548         "lsr	r6, r7, #16\n\t"
174549 #endif
174550 #ifdef WOLFSSL_KEIL
174551         "muls	r5, r6, r5\n\t"
174552 #elif defined(__clang__)
174553         "muls	r5, r6\n\t"
174554 #else
174555         "mul	r5, r6\n\t"
174556 #endif
174557 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174558         "lsrs	r6, r5, #16\n\t"
174559 #else
174560         "lsr	r6, r5, #16\n\t"
174561 #endif
174562 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174563         "lsls	r5, r5, #16\n\t"
174564 #else
174565         "lsl	r5, r5, #16\n\t"
174566 #endif
174567 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174568         "adds	r4, r4, r5\n\t"
174569 #else
174570         "add	r4, r4, r5\n\t"
174571 #endif
174572 #ifdef WOLFSSL_KEIL
174573         "adcs	r2, r2, r6\n\t"
174574 #elif defined(__clang__)
174575         "adcs	r2, r6\n\t"
174576 #else
174577         "adc	r2, r6\n\t"
174578 #endif
174579 #ifdef WOLFSSL_KEIL
174580         "adcs	r3, r3, %[r]\n\t"
174581 #elif defined(__clang__)
174582         "adcs	r3, %[r]\n\t"
174583 #else
174584         "adc	r3, %[r]\n\t"
174585 #endif
174586 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174587         "adds	r4, r4, r5\n\t"
174588 #else
174589         "add	r4, r4, r5\n\t"
174590 #endif
174591 #ifdef WOLFSSL_KEIL
174592         "adcs	r2, r2, r6\n\t"
174593 #elif defined(__clang__)
174594         "adcs	r2, r6\n\t"
174595 #else
174596         "adc	r2, r6\n\t"
174597 #endif
174598 #ifdef WOLFSSL_KEIL
174599         "adcs	r3, r3, %[r]\n\t"
174600 #elif defined(__clang__)
174601         "adcs	r3, %[r]\n\t"
174602 #else
174603         "adc	r3, %[r]\n\t"
174604 #endif
174605 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174606         "lsrs	r5, %[a], #16\n\t"
174607 #else
174608         "lsr	r5, %[a], #16\n\t"
174609 #endif
174610 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174611         "lsrs	r6, r7, #16\n\t"
174612 #else
174613         "lsr	r6, r7, #16\n\t"
174614 #endif
174615 #ifdef WOLFSSL_KEIL
174616         "muls	r6, r5, r6\n\t"
174617 #elif defined(__clang__)
174618         "muls	r6, r5\n\t"
174619 #else
174620         "mul	r6, r5\n\t"
174621 #endif
174622 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174623         "adds	r2, r2, r6\n\t"
174624 #else
174625         "add	r2, r2, r6\n\t"
174626 #endif
174627 #ifdef WOLFSSL_KEIL
174628         "adcs	r3, r3, %[r]\n\t"
174629 #elif defined(__clang__)
174630         "adcs	r3, %[r]\n\t"
174631 #else
174632         "adc	r3, %[r]\n\t"
174633 #endif
174634 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174635         "adds	r2, r2, r6\n\t"
174636 #else
174637         "add	r2, r2, r6\n\t"
174638 #endif
174639 #ifdef WOLFSSL_KEIL
174640         "adcs	r3, r3, %[r]\n\t"
174641 #elif defined(__clang__)
174642         "adcs	r3, %[r]\n\t"
174643 #else
174644         "adc	r3, %[r]\n\t"
174645 #endif
174646         "uxth	r6, r7\n\t"
174647 #ifdef WOLFSSL_KEIL
174648         "muls	r5, r6, r5\n\t"
174649 #elif defined(__clang__)
174650         "muls	r5, r6\n\t"
174651 #else
174652         "mul	r5, r6\n\t"
174653 #endif
174654 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174655         "lsrs	r6, r5, #16\n\t"
174656 #else
174657         "lsr	r6, r5, #16\n\t"
174658 #endif
174659 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174660         "lsls	r5, r5, #16\n\t"
174661 #else
174662         "lsl	r5, r5, #16\n\t"
174663 #endif
174664 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174665         "adds	r4, r4, r5\n\t"
174666 #else
174667         "add	r4, r4, r5\n\t"
174668 #endif
174669 #ifdef WOLFSSL_KEIL
174670         "adcs	r2, r2, r6\n\t"
174671 #elif defined(__clang__)
174672         "adcs	r2, r6\n\t"
174673 #else
174674         "adc	r2, r6\n\t"
174675 #endif
174676 #ifdef WOLFSSL_KEIL
174677         "adcs	r3, r3, %[r]\n\t"
174678 #elif defined(__clang__)
174679         "adcs	r3, %[r]\n\t"
174680 #else
174681         "adc	r3, %[r]\n\t"
174682 #endif
174683 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174684         "adds	r4, r4, r5\n\t"
174685 #else
174686         "add	r4, r4, r5\n\t"
174687 #endif
174688 #ifdef WOLFSSL_KEIL
174689         "adcs	r2, r2, r6\n\t"
174690 #elif defined(__clang__)
174691         "adcs	r2, r6\n\t"
174692 #else
174693         "adc	r2, r6\n\t"
174694 #endif
174695 #ifdef WOLFSSL_KEIL
174696         "adcs	r3, r3, %[r]\n\t"
174697 #elif defined(__clang__)
174698         "adcs	r3, %[r]\n\t"
174699 #else
174700         "adc	r3, %[r]\n\t"
174701 #endif
174702         "#  A[12] * A[8]\n\t"
174703         "mov	%[a], r9\n\t"
174704         "ldr	r7, [%[a], #32]\n\t"
174705         "mov	%[a], r10\n\t"
174706         "uxth	r5, %[a]\n\t"
174707         "uxth	r6, r7\n\t"
174708 #ifdef WOLFSSL_KEIL
174709         "muls	r6, r5, r6\n\t"
174710 #elif defined(__clang__)
174711         "muls	r6, r5\n\t"
174712 #else
174713         "mul	r6, r5\n\t"
174714 #endif
174715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174716         "adds	r4, r4, r6\n\t"
174717 #else
174718         "add	r4, r4, r6\n\t"
174719 #endif
174720 #ifdef WOLFSSL_KEIL
174721         "adcs	r2, r2, %[r]\n\t"
174722 #elif defined(__clang__)
174723         "adcs	r2, %[r]\n\t"
174724 #else
174725         "adc	r2, %[r]\n\t"
174726 #endif
174727 #ifdef WOLFSSL_KEIL
174728         "adcs	r3, r3, %[r]\n\t"
174729 #elif defined(__clang__)
174730         "adcs	r3, %[r]\n\t"
174731 #else
174732         "adc	r3, %[r]\n\t"
174733 #endif
174734 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174735         "adds	r4, r4, r6\n\t"
174736 #else
174737         "add	r4, r4, r6\n\t"
174738 #endif
174739 #ifdef WOLFSSL_KEIL
174740         "adcs	r2, r2, %[r]\n\t"
174741 #elif defined(__clang__)
174742         "adcs	r2, %[r]\n\t"
174743 #else
174744         "adc	r2, %[r]\n\t"
174745 #endif
174746 #ifdef WOLFSSL_KEIL
174747         "adcs	r3, r3, %[r]\n\t"
174748 #elif defined(__clang__)
174749         "adcs	r3, %[r]\n\t"
174750 #else
174751         "adc	r3, %[r]\n\t"
174752 #endif
174753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174754         "lsrs	r6, r7, #16\n\t"
174755 #else
174756         "lsr	r6, r7, #16\n\t"
174757 #endif
174758 #ifdef WOLFSSL_KEIL
174759         "muls	r5, r6, r5\n\t"
174760 #elif defined(__clang__)
174761         "muls	r5, r6\n\t"
174762 #else
174763         "mul	r5, r6\n\t"
174764 #endif
174765 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174766         "lsrs	r6, r5, #16\n\t"
174767 #else
174768         "lsr	r6, r5, #16\n\t"
174769 #endif
174770 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174771         "lsls	r5, r5, #16\n\t"
174772 #else
174773         "lsl	r5, r5, #16\n\t"
174774 #endif
174775 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174776         "adds	r4, r4, r5\n\t"
174777 #else
174778         "add	r4, r4, r5\n\t"
174779 #endif
174780 #ifdef WOLFSSL_KEIL
174781         "adcs	r2, r2, r6\n\t"
174782 #elif defined(__clang__)
174783         "adcs	r2, r6\n\t"
174784 #else
174785         "adc	r2, r6\n\t"
174786 #endif
174787 #ifdef WOLFSSL_KEIL
174788         "adcs	r3, r3, %[r]\n\t"
174789 #elif defined(__clang__)
174790         "adcs	r3, %[r]\n\t"
174791 #else
174792         "adc	r3, %[r]\n\t"
174793 #endif
174794 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174795         "adds	r4, r4, r5\n\t"
174796 #else
174797         "add	r4, r4, r5\n\t"
174798 #endif
174799 #ifdef WOLFSSL_KEIL
174800         "adcs	r2, r2, r6\n\t"
174801 #elif defined(__clang__)
174802         "adcs	r2, r6\n\t"
174803 #else
174804         "adc	r2, r6\n\t"
174805 #endif
174806 #ifdef WOLFSSL_KEIL
174807         "adcs	r3, r3, %[r]\n\t"
174808 #elif defined(__clang__)
174809         "adcs	r3, %[r]\n\t"
174810 #else
174811         "adc	r3, %[r]\n\t"
174812 #endif
174813 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174814         "lsrs	r5, %[a], #16\n\t"
174815 #else
174816         "lsr	r5, %[a], #16\n\t"
174817 #endif
174818 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174819         "lsrs	r6, r7, #16\n\t"
174820 #else
174821         "lsr	r6, r7, #16\n\t"
174822 #endif
174823 #ifdef WOLFSSL_KEIL
174824         "muls	r6, r5, r6\n\t"
174825 #elif defined(__clang__)
174826         "muls	r6, r5\n\t"
174827 #else
174828         "mul	r6, r5\n\t"
174829 #endif
174830 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174831         "adds	r2, r2, r6\n\t"
174832 #else
174833         "add	r2, r2, r6\n\t"
174834 #endif
174835 #ifdef WOLFSSL_KEIL
174836         "adcs	r3, r3, %[r]\n\t"
174837 #elif defined(__clang__)
174838         "adcs	r3, %[r]\n\t"
174839 #else
174840         "adc	r3, %[r]\n\t"
174841 #endif
174842 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174843         "adds	r2, r2, r6\n\t"
174844 #else
174845         "add	r2, r2, r6\n\t"
174846 #endif
174847 #ifdef WOLFSSL_KEIL
174848         "adcs	r3, r3, %[r]\n\t"
174849 #elif defined(__clang__)
174850         "adcs	r3, %[r]\n\t"
174851 #else
174852         "adc	r3, %[r]\n\t"
174853 #endif
174854         "uxth	r6, r7\n\t"
174855 #ifdef WOLFSSL_KEIL
174856         "muls	r5, r6, r5\n\t"
174857 #elif defined(__clang__)
174858         "muls	r5, r6\n\t"
174859 #else
174860         "mul	r5, r6\n\t"
174861 #endif
174862 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174863         "lsrs	r6, r5, #16\n\t"
174864 #else
174865         "lsr	r6, r5, #16\n\t"
174866 #endif
174867 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174868         "lsls	r5, r5, #16\n\t"
174869 #else
174870         "lsl	r5, r5, #16\n\t"
174871 #endif
174872 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174873         "adds	r4, r4, r5\n\t"
174874 #else
174875         "add	r4, r4, r5\n\t"
174876 #endif
174877 #ifdef WOLFSSL_KEIL
174878         "adcs	r2, r2, r6\n\t"
174879 #elif defined(__clang__)
174880         "adcs	r2, r6\n\t"
174881 #else
174882         "adc	r2, r6\n\t"
174883 #endif
174884 #ifdef WOLFSSL_KEIL
174885         "adcs	r3, r3, %[r]\n\t"
174886 #elif defined(__clang__)
174887         "adcs	r3, %[r]\n\t"
174888 #else
174889         "adc	r3, %[r]\n\t"
174890 #endif
174891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174892         "adds	r4, r4, r5\n\t"
174893 #else
174894         "add	r4, r4, r5\n\t"
174895 #endif
174896 #ifdef WOLFSSL_KEIL
174897         "adcs	r2, r2, r6\n\t"
174898 #elif defined(__clang__)
174899         "adcs	r2, r6\n\t"
174900 #else
174901         "adc	r2, r6\n\t"
174902 #endif
174903 #ifdef WOLFSSL_KEIL
174904         "adcs	r3, r3, %[r]\n\t"
174905 #elif defined(__clang__)
174906         "adcs	r3, %[r]\n\t"
174907 #else
174908         "adc	r3, %[r]\n\t"
174909 #endif
174910         "#  A[11] * A[9]\n\t"
174911         "mov	%[a], r9\n\t"
174912         "ldr	r7, [%[a], #36]\n\t"
174913         "ldr	%[a], [%[a], #44]\n\t"
174914         "uxth	r5, %[a]\n\t"
174915         "uxth	r6, r7\n\t"
174916 #ifdef WOLFSSL_KEIL
174917         "muls	r6, r5, r6\n\t"
174918 #elif defined(__clang__)
174919         "muls	r6, r5\n\t"
174920 #else
174921         "mul	r6, r5\n\t"
174922 #endif
174923 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174924         "adds	r4, r4, r6\n\t"
174925 #else
174926         "add	r4, r4, r6\n\t"
174927 #endif
174928 #ifdef WOLFSSL_KEIL
174929         "adcs	r2, r2, %[r]\n\t"
174930 #elif defined(__clang__)
174931         "adcs	r2, %[r]\n\t"
174932 #else
174933         "adc	r2, %[r]\n\t"
174934 #endif
174935 #ifdef WOLFSSL_KEIL
174936         "adcs	r3, r3, %[r]\n\t"
174937 #elif defined(__clang__)
174938         "adcs	r3, %[r]\n\t"
174939 #else
174940         "adc	r3, %[r]\n\t"
174941 #endif
174942 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174943         "adds	r4, r4, r6\n\t"
174944 #else
174945         "add	r4, r4, r6\n\t"
174946 #endif
174947 #ifdef WOLFSSL_KEIL
174948         "adcs	r2, r2, %[r]\n\t"
174949 #elif defined(__clang__)
174950         "adcs	r2, %[r]\n\t"
174951 #else
174952         "adc	r2, %[r]\n\t"
174953 #endif
174954 #ifdef WOLFSSL_KEIL
174955         "adcs	r3, r3, %[r]\n\t"
174956 #elif defined(__clang__)
174957         "adcs	r3, %[r]\n\t"
174958 #else
174959         "adc	r3, %[r]\n\t"
174960 #endif
174961 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174962         "lsrs	r6, r7, #16\n\t"
174963 #else
174964         "lsr	r6, r7, #16\n\t"
174965 #endif
174966 #ifdef WOLFSSL_KEIL
174967         "muls	r5, r6, r5\n\t"
174968 #elif defined(__clang__)
174969         "muls	r5, r6\n\t"
174970 #else
174971         "mul	r5, r6\n\t"
174972 #endif
174973 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174974         "lsrs	r6, r5, #16\n\t"
174975 #else
174976         "lsr	r6, r5, #16\n\t"
174977 #endif
174978 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174979         "lsls	r5, r5, #16\n\t"
174980 #else
174981         "lsl	r5, r5, #16\n\t"
174982 #endif
174983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
174984         "adds	r4, r4, r5\n\t"
174985 #else
174986         "add	r4, r4, r5\n\t"
174987 #endif
174988 #ifdef WOLFSSL_KEIL
174989         "adcs	r2, r2, r6\n\t"
174990 #elif defined(__clang__)
174991         "adcs	r2, r6\n\t"
174992 #else
174993         "adc	r2, r6\n\t"
174994 #endif
174995 #ifdef WOLFSSL_KEIL
174996         "adcs	r3, r3, %[r]\n\t"
174997 #elif defined(__clang__)
174998         "adcs	r3, %[r]\n\t"
174999 #else
175000         "adc	r3, %[r]\n\t"
175001 #endif
175002 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175003         "adds	r4, r4, r5\n\t"
175004 #else
175005         "add	r4, r4, r5\n\t"
175006 #endif
175007 #ifdef WOLFSSL_KEIL
175008         "adcs	r2, r2, r6\n\t"
175009 #elif defined(__clang__)
175010         "adcs	r2, r6\n\t"
175011 #else
175012         "adc	r2, r6\n\t"
175013 #endif
175014 #ifdef WOLFSSL_KEIL
175015         "adcs	r3, r3, %[r]\n\t"
175016 #elif defined(__clang__)
175017         "adcs	r3, %[r]\n\t"
175018 #else
175019         "adc	r3, %[r]\n\t"
175020 #endif
175021 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175022         "lsrs	r5, %[a], #16\n\t"
175023 #else
175024         "lsr	r5, %[a], #16\n\t"
175025 #endif
175026 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175027         "lsrs	r6, r7, #16\n\t"
175028 #else
175029         "lsr	r6, r7, #16\n\t"
175030 #endif
175031 #ifdef WOLFSSL_KEIL
175032         "muls	r6, r5, r6\n\t"
175033 #elif defined(__clang__)
175034         "muls	r6, r5\n\t"
175035 #else
175036         "mul	r6, r5\n\t"
175037 #endif
175038 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175039         "adds	r2, r2, r6\n\t"
175040 #else
175041         "add	r2, r2, r6\n\t"
175042 #endif
175043 #ifdef WOLFSSL_KEIL
175044         "adcs	r3, r3, %[r]\n\t"
175045 #elif defined(__clang__)
175046         "adcs	r3, %[r]\n\t"
175047 #else
175048         "adc	r3, %[r]\n\t"
175049 #endif
175050 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175051         "adds	r2, r2, r6\n\t"
175052 #else
175053         "add	r2, r2, r6\n\t"
175054 #endif
175055 #ifdef WOLFSSL_KEIL
175056         "adcs	r3, r3, %[r]\n\t"
175057 #elif defined(__clang__)
175058         "adcs	r3, %[r]\n\t"
175059 #else
175060         "adc	r3, %[r]\n\t"
175061 #endif
175062         "uxth	r6, r7\n\t"
175063 #ifdef WOLFSSL_KEIL
175064         "muls	r5, r6, r5\n\t"
175065 #elif defined(__clang__)
175066         "muls	r5, r6\n\t"
175067 #else
175068         "mul	r5, r6\n\t"
175069 #endif
175070 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175071         "lsrs	r6, r5, #16\n\t"
175072 #else
175073         "lsr	r6, r5, #16\n\t"
175074 #endif
175075 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175076         "lsls	r5, r5, #16\n\t"
175077 #else
175078         "lsl	r5, r5, #16\n\t"
175079 #endif
175080 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175081         "adds	r4, r4, r5\n\t"
175082 #else
175083         "add	r4, r4, r5\n\t"
175084 #endif
175085 #ifdef WOLFSSL_KEIL
175086         "adcs	r2, r2, r6\n\t"
175087 #elif defined(__clang__)
175088         "adcs	r2, r6\n\t"
175089 #else
175090         "adc	r2, r6\n\t"
175091 #endif
175092 #ifdef WOLFSSL_KEIL
175093         "adcs	r3, r3, %[r]\n\t"
175094 #elif defined(__clang__)
175095         "adcs	r3, %[r]\n\t"
175096 #else
175097         "adc	r3, %[r]\n\t"
175098 #endif
175099 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175100         "adds	r4, r4, r5\n\t"
175101 #else
175102         "add	r4, r4, r5\n\t"
175103 #endif
175104 #ifdef WOLFSSL_KEIL
175105         "adcs	r2, r2, r6\n\t"
175106 #elif defined(__clang__)
175107         "adcs	r2, r6\n\t"
175108 #else
175109         "adc	r2, r6\n\t"
175110 #endif
175111 #ifdef WOLFSSL_KEIL
175112         "adcs	r3, r3, %[r]\n\t"
175113 #elif defined(__clang__)
175114         "adcs	r3, %[r]\n\t"
175115 #else
175116         "adc	r3, %[r]\n\t"
175117 #endif
175118         "#  A[10] * A[10]\n\t"
175119         "mov	%[a], r9\n\t"
175120         "ldr	r7, [%[a], #40]\n\t"
175121 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175122         "lsrs	r6, r7, #16\n\t"
175123 #else
175124         "lsr	r6, r7, #16\n\t"
175125 #endif
175126         "uxth	r5, r7\n\t"
175127 #ifdef WOLFSSL_KEIL
175128         "muls	r5, r5, r5\n\t"
175129 #elif defined(__clang__)
175130         "muls	r5, r5\n\t"
175131 #else
175132         "mul	r5, r5\n\t"
175133 #endif
175134 #ifdef WOLFSSL_KEIL
175135         "muls	r6, r6, r6\n\t"
175136 #elif defined(__clang__)
175137         "muls	r6, r6\n\t"
175138 #else
175139         "mul	r6, r6\n\t"
175140 #endif
175141 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175142         "adds	r4, r4, r5\n\t"
175143 #else
175144         "add	r4, r4, r5\n\t"
175145 #endif
175146 #ifdef WOLFSSL_KEIL
175147         "adcs	r2, r2, r6\n\t"
175148 #elif defined(__clang__)
175149         "adcs	r2, r6\n\t"
175150 #else
175151         "adc	r2, r6\n\t"
175152 #endif
175153 #ifdef WOLFSSL_KEIL
175154         "adcs	r3, r3, %[r]\n\t"
175155 #elif defined(__clang__)
175156         "adcs	r3, %[r]\n\t"
175157 #else
175158         "adc	r3, %[r]\n\t"
175159 #endif
175160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175161         "lsrs	r6, r7, #16\n\t"
175162 #else
175163         "lsr	r6, r7, #16\n\t"
175164 #endif
175165         "uxth	r5, r7\n\t"
175166 #ifdef WOLFSSL_KEIL
175167         "muls	r5, r6, r5\n\t"
175168 #elif defined(__clang__)
175169         "muls	r5, r6\n\t"
175170 #else
175171         "mul	r5, r6\n\t"
175172 #endif
175173 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175174         "lsrs	r6, r5, #15\n\t"
175175 #else
175176         "lsr	r6, r5, #15\n\t"
175177 #endif
175178 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175179         "lsls	r5, r5, #17\n\t"
175180 #else
175181         "lsl	r5, r5, #17\n\t"
175182 #endif
175183 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175184         "adds	r4, r4, r5\n\t"
175185 #else
175186         "add	r4, r4, r5\n\t"
175187 #endif
175188 #ifdef WOLFSSL_KEIL
175189         "adcs	r2, r2, r6\n\t"
175190 #elif defined(__clang__)
175191         "adcs	r2, r6\n\t"
175192 #else
175193         "adc	r2, r6\n\t"
175194 #endif
175195 #ifdef WOLFSSL_KEIL
175196         "adcs	r3, r3, %[r]\n\t"
175197 #elif defined(__clang__)
175198         "adcs	r3, %[r]\n\t"
175199 #else
175200         "adc	r3, %[r]\n\t"
175201 #endif
175202         "mov	%[r], r8\n\t"
175203         "str	r4, [%[r], #80]\n\t"
175204         "movs	%[r], #0\n\t"
175205         "#  A[11] * A[10]\n\t"
175206         "movs	r4, #0\n\t"
175207         "ldr	%[a], [%[a], #44]\n\t"
175208         "uxth	r5, %[a]\n\t"
175209         "uxth	r6, r7\n\t"
175210 #ifdef WOLFSSL_KEIL
175211         "muls	r6, r5, r6\n\t"
175212 #elif defined(__clang__)
175213         "muls	r6, r5\n\t"
175214 #else
175215         "mul	r6, r5\n\t"
175216 #endif
175217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175218         "adds	r2, r2, r6\n\t"
175219 #else
175220         "add	r2, r2, r6\n\t"
175221 #endif
175222 #ifdef WOLFSSL_KEIL
175223         "adcs	r3, r3, %[r]\n\t"
175224 #elif defined(__clang__)
175225         "adcs	r3, %[r]\n\t"
175226 #else
175227         "adc	r3, %[r]\n\t"
175228 #endif
175229 #ifdef WOLFSSL_KEIL
175230         "adcs	r4, r4, %[r]\n\t"
175231 #elif defined(__clang__)
175232         "adcs	r4, %[r]\n\t"
175233 #else
175234         "adc	r4, %[r]\n\t"
175235 #endif
175236 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175237         "adds	r2, r2, r6\n\t"
175238 #else
175239         "add	r2, r2, r6\n\t"
175240 #endif
175241 #ifdef WOLFSSL_KEIL
175242         "adcs	r3, r3, %[r]\n\t"
175243 #elif defined(__clang__)
175244         "adcs	r3, %[r]\n\t"
175245 #else
175246         "adc	r3, %[r]\n\t"
175247 #endif
175248 #ifdef WOLFSSL_KEIL
175249         "adcs	r4, r4, %[r]\n\t"
175250 #elif defined(__clang__)
175251         "adcs	r4, %[r]\n\t"
175252 #else
175253         "adc	r4, %[r]\n\t"
175254 #endif
175255 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175256         "lsrs	r6, r7, #16\n\t"
175257 #else
175258         "lsr	r6, r7, #16\n\t"
175259 #endif
175260 #ifdef WOLFSSL_KEIL
175261         "muls	r5, r6, r5\n\t"
175262 #elif defined(__clang__)
175263         "muls	r5, r6\n\t"
175264 #else
175265         "mul	r5, r6\n\t"
175266 #endif
175267 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175268         "lsrs	r6, r5, #16\n\t"
175269 #else
175270         "lsr	r6, r5, #16\n\t"
175271 #endif
175272 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175273         "lsls	r5, r5, #16\n\t"
175274 #else
175275         "lsl	r5, r5, #16\n\t"
175276 #endif
175277 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175278         "adds	r2, r2, r5\n\t"
175279 #else
175280         "add	r2, r2, r5\n\t"
175281 #endif
175282 #ifdef WOLFSSL_KEIL
175283         "adcs	r3, r3, r6\n\t"
175284 #elif defined(__clang__)
175285         "adcs	r3, r6\n\t"
175286 #else
175287         "adc	r3, r6\n\t"
175288 #endif
175289 #ifdef WOLFSSL_KEIL
175290         "adcs	r4, r4, %[r]\n\t"
175291 #elif defined(__clang__)
175292         "adcs	r4, %[r]\n\t"
175293 #else
175294         "adc	r4, %[r]\n\t"
175295 #endif
175296 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175297         "adds	r2, r2, r5\n\t"
175298 #else
175299         "add	r2, r2, r5\n\t"
175300 #endif
175301 #ifdef WOLFSSL_KEIL
175302         "adcs	r3, r3, r6\n\t"
175303 #elif defined(__clang__)
175304         "adcs	r3, r6\n\t"
175305 #else
175306         "adc	r3, r6\n\t"
175307 #endif
175308 #ifdef WOLFSSL_KEIL
175309         "adcs	r4, r4, %[r]\n\t"
175310 #elif defined(__clang__)
175311         "adcs	r4, %[r]\n\t"
175312 #else
175313         "adc	r4, %[r]\n\t"
175314 #endif
175315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175316         "lsrs	r5, %[a], #16\n\t"
175317 #else
175318         "lsr	r5, %[a], #16\n\t"
175319 #endif
175320 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175321         "lsrs	r6, r7, #16\n\t"
175322 #else
175323         "lsr	r6, r7, #16\n\t"
175324 #endif
175325 #ifdef WOLFSSL_KEIL
175326         "muls	r6, r5, r6\n\t"
175327 #elif defined(__clang__)
175328         "muls	r6, r5\n\t"
175329 #else
175330         "mul	r6, r5\n\t"
175331 #endif
175332 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175333         "adds	r3, r3, r6\n\t"
175334 #else
175335         "add	r3, r3, r6\n\t"
175336 #endif
175337 #ifdef WOLFSSL_KEIL
175338         "adcs	r4, r4, %[r]\n\t"
175339 #elif defined(__clang__)
175340         "adcs	r4, %[r]\n\t"
175341 #else
175342         "adc	r4, %[r]\n\t"
175343 #endif
175344 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175345         "adds	r3, r3, r6\n\t"
175346 #else
175347         "add	r3, r3, r6\n\t"
175348 #endif
175349 #ifdef WOLFSSL_KEIL
175350         "adcs	r4, r4, %[r]\n\t"
175351 #elif defined(__clang__)
175352         "adcs	r4, %[r]\n\t"
175353 #else
175354         "adc	r4, %[r]\n\t"
175355 #endif
175356         "uxth	r6, r7\n\t"
175357 #ifdef WOLFSSL_KEIL
175358         "muls	r5, r6, r5\n\t"
175359 #elif defined(__clang__)
175360         "muls	r5, r6\n\t"
175361 #else
175362         "mul	r5, r6\n\t"
175363 #endif
175364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175365         "lsrs	r6, r5, #16\n\t"
175366 #else
175367         "lsr	r6, r5, #16\n\t"
175368 #endif
175369 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175370         "lsls	r5, r5, #16\n\t"
175371 #else
175372         "lsl	r5, r5, #16\n\t"
175373 #endif
175374 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175375         "adds	r2, r2, r5\n\t"
175376 #else
175377         "add	r2, r2, r5\n\t"
175378 #endif
175379 #ifdef WOLFSSL_KEIL
175380         "adcs	r3, r3, r6\n\t"
175381 #elif defined(__clang__)
175382         "adcs	r3, r6\n\t"
175383 #else
175384         "adc	r3, r6\n\t"
175385 #endif
175386 #ifdef WOLFSSL_KEIL
175387         "adcs	r4, r4, %[r]\n\t"
175388 #elif defined(__clang__)
175389         "adcs	r4, %[r]\n\t"
175390 #else
175391         "adc	r4, %[r]\n\t"
175392 #endif
175393 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175394         "adds	r2, r2, r5\n\t"
175395 #else
175396         "add	r2, r2, r5\n\t"
175397 #endif
175398 #ifdef WOLFSSL_KEIL
175399         "adcs	r3, r3, r6\n\t"
175400 #elif defined(__clang__)
175401         "adcs	r3, r6\n\t"
175402 #else
175403         "adc	r3, r6\n\t"
175404 #endif
175405 #ifdef WOLFSSL_KEIL
175406         "adcs	r4, r4, %[r]\n\t"
175407 #elif defined(__clang__)
175408         "adcs	r4, %[r]\n\t"
175409 #else
175410         "adc	r4, %[r]\n\t"
175411 #endif
175412         "#  A[12] * A[9]\n\t"
175413         "mov	%[a], r9\n\t"
175414         "ldr	r7, [%[a], #36]\n\t"
175415         "mov	%[a], r10\n\t"
175416         "uxth	r5, %[a]\n\t"
175417         "uxth	r6, r7\n\t"
175418 #ifdef WOLFSSL_KEIL
175419         "muls	r6, r5, r6\n\t"
175420 #elif defined(__clang__)
175421         "muls	r6, r5\n\t"
175422 #else
175423         "mul	r6, r5\n\t"
175424 #endif
175425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175426         "adds	r2, r2, r6\n\t"
175427 #else
175428         "add	r2, r2, r6\n\t"
175429 #endif
175430 #ifdef WOLFSSL_KEIL
175431         "adcs	r3, r3, %[r]\n\t"
175432 #elif defined(__clang__)
175433         "adcs	r3, %[r]\n\t"
175434 #else
175435         "adc	r3, %[r]\n\t"
175436 #endif
175437 #ifdef WOLFSSL_KEIL
175438         "adcs	r4, r4, %[r]\n\t"
175439 #elif defined(__clang__)
175440         "adcs	r4, %[r]\n\t"
175441 #else
175442         "adc	r4, %[r]\n\t"
175443 #endif
175444 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175445         "adds	r2, r2, r6\n\t"
175446 #else
175447         "add	r2, r2, r6\n\t"
175448 #endif
175449 #ifdef WOLFSSL_KEIL
175450         "adcs	r3, r3, %[r]\n\t"
175451 #elif defined(__clang__)
175452         "adcs	r3, %[r]\n\t"
175453 #else
175454         "adc	r3, %[r]\n\t"
175455 #endif
175456 #ifdef WOLFSSL_KEIL
175457         "adcs	r4, r4, %[r]\n\t"
175458 #elif defined(__clang__)
175459         "adcs	r4, %[r]\n\t"
175460 #else
175461         "adc	r4, %[r]\n\t"
175462 #endif
175463 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175464         "lsrs	r6, r7, #16\n\t"
175465 #else
175466         "lsr	r6, r7, #16\n\t"
175467 #endif
175468 #ifdef WOLFSSL_KEIL
175469         "muls	r5, r6, r5\n\t"
175470 #elif defined(__clang__)
175471         "muls	r5, r6\n\t"
175472 #else
175473         "mul	r5, r6\n\t"
175474 #endif
175475 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175476         "lsrs	r6, r5, #16\n\t"
175477 #else
175478         "lsr	r6, r5, #16\n\t"
175479 #endif
175480 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175481         "lsls	r5, r5, #16\n\t"
175482 #else
175483         "lsl	r5, r5, #16\n\t"
175484 #endif
175485 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175486         "adds	r2, r2, r5\n\t"
175487 #else
175488         "add	r2, r2, r5\n\t"
175489 #endif
175490 #ifdef WOLFSSL_KEIL
175491         "adcs	r3, r3, r6\n\t"
175492 #elif defined(__clang__)
175493         "adcs	r3, r6\n\t"
175494 #else
175495         "adc	r3, r6\n\t"
175496 #endif
175497 #ifdef WOLFSSL_KEIL
175498         "adcs	r4, r4, %[r]\n\t"
175499 #elif defined(__clang__)
175500         "adcs	r4, %[r]\n\t"
175501 #else
175502         "adc	r4, %[r]\n\t"
175503 #endif
175504 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175505         "adds	r2, r2, r5\n\t"
175506 #else
175507         "add	r2, r2, r5\n\t"
175508 #endif
175509 #ifdef WOLFSSL_KEIL
175510         "adcs	r3, r3, r6\n\t"
175511 #elif defined(__clang__)
175512         "adcs	r3, r6\n\t"
175513 #else
175514         "adc	r3, r6\n\t"
175515 #endif
175516 #ifdef WOLFSSL_KEIL
175517         "adcs	r4, r4, %[r]\n\t"
175518 #elif defined(__clang__)
175519         "adcs	r4, %[r]\n\t"
175520 #else
175521         "adc	r4, %[r]\n\t"
175522 #endif
175523 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175524         "lsrs	r5, %[a], #16\n\t"
175525 #else
175526         "lsr	r5, %[a], #16\n\t"
175527 #endif
175528 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175529         "lsrs	r6, r7, #16\n\t"
175530 #else
175531         "lsr	r6, r7, #16\n\t"
175532 #endif
175533 #ifdef WOLFSSL_KEIL
175534         "muls	r6, r5, r6\n\t"
175535 #elif defined(__clang__)
175536         "muls	r6, r5\n\t"
175537 #else
175538         "mul	r6, r5\n\t"
175539 #endif
175540 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175541         "adds	r3, r3, r6\n\t"
175542 #else
175543         "add	r3, r3, r6\n\t"
175544 #endif
175545 #ifdef WOLFSSL_KEIL
175546         "adcs	r4, r4, %[r]\n\t"
175547 #elif defined(__clang__)
175548         "adcs	r4, %[r]\n\t"
175549 #else
175550         "adc	r4, %[r]\n\t"
175551 #endif
175552 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175553         "adds	r3, r3, r6\n\t"
175554 #else
175555         "add	r3, r3, r6\n\t"
175556 #endif
175557 #ifdef WOLFSSL_KEIL
175558         "adcs	r4, r4, %[r]\n\t"
175559 #elif defined(__clang__)
175560         "adcs	r4, %[r]\n\t"
175561 #else
175562         "adc	r4, %[r]\n\t"
175563 #endif
175564         "uxth	r6, r7\n\t"
175565 #ifdef WOLFSSL_KEIL
175566         "muls	r5, r6, r5\n\t"
175567 #elif defined(__clang__)
175568         "muls	r5, r6\n\t"
175569 #else
175570         "mul	r5, r6\n\t"
175571 #endif
175572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175573         "lsrs	r6, r5, #16\n\t"
175574 #else
175575         "lsr	r6, r5, #16\n\t"
175576 #endif
175577 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175578         "lsls	r5, r5, #16\n\t"
175579 #else
175580         "lsl	r5, r5, #16\n\t"
175581 #endif
175582 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175583         "adds	r2, r2, r5\n\t"
175584 #else
175585         "add	r2, r2, r5\n\t"
175586 #endif
175587 #ifdef WOLFSSL_KEIL
175588         "adcs	r3, r3, r6\n\t"
175589 #elif defined(__clang__)
175590         "adcs	r3, r6\n\t"
175591 #else
175592         "adc	r3, r6\n\t"
175593 #endif
175594 #ifdef WOLFSSL_KEIL
175595         "adcs	r4, r4, %[r]\n\t"
175596 #elif defined(__clang__)
175597         "adcs	r4, %[r]\n\t"
175598 #else
175599         "adc	r4, %[r]\n\t"
175600 #endif
175601 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175602         "adds	r2, r2, r5\n\t"
175603 #else
175604         "add	r2, r2, r5\n\t"
175605 #endif
175606 #ifdef WOLFSSL_KEIL
175607         "adcs	r3, r3, r6\n\t"
175608 #elif defined(__clang__)
175609         "adcs	r3, r6\n\t"
175610 #else
175611         "adc	r3, r6\n\t"
175612 #endif
175613 #ifdef WOLFSSL_KEIL
175614         "adcs	r4, r4, %[r]\n\t"
175615 #elif defined(__clang__)
175616         "adcs	r4, %[r]\n\t"
175617 #else
175618         "adc	r4, %[r]\n\t"
175619 #endif
175620         "#  A[13] * A[8]\n\t"
175621         "mov	%[a], r9\n\t"
175622         "ldr	r7, [%[a], #32]\n\t"
175623         "mov	%[a], r11\n\t"
175624         "uxth	r5, %[a]\n\t"
175625         "uxth	r6, r7\n\t"
175626 #ifdef WOLFSSL_KEIL
175627         "muls	r6, r5, r6\n\t"
175628 #elif defined(__clang__)
175629         "muls	r6, r5\n\t"
175630 #else
175631         "mul	r6, r5\n\t"
175632 #endif
175633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175634         "adds	r2, r2, r6\n\t"
175635 #else
175636         "add	r2, r2, r6\n\t"
175637 #endif
175638 #ifdef WOLFSSL_KEIL
175639         "adcs	r3, r3, %[r]\n\t"
175640 #elif defined(__clang__)
175641         "adcs	r3, %[r]\n\t"
175642 #else
175643         "adc	r3, %[r]\n\t"
175644 #endif
175645 #ifdef WOLFSSL_KEIL
175646         "adcs	r4, r4, %[r]\n\t"
175647 #elif defined(__clang__)
175648         "adcs	r4, %[r]\n\t"
175649 #else
175650         "adc	r4, %[r]\n\t"
175651 #endif
175652 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175653         "adds	r2, r2, r6\n\t"
175654 #else
175655         "add	r2, r2, r6\n\t"
175656 #endif
175657 #ifdef WOLFSSL_KEIL
175658         "adcs	r3, r3, %[r]\n\t"
175659 #elif defined(__clang__)
175660         "adcs	r3, %[r]\n\t"
175661 #else
175662         "adc	r3, %[r]\n\t"
175663 #endif
175664 #ifdef WOLFSSL_KEIL
175665         "adcs	r4, r4, %[r]\n\t"
175666 #elif defined(__clang__)
175667         "adcs	r4, %[r]\n\t"
175668 #else
175669         "adc	r4, %[r]\n\t"
175670 #endif
175671 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175672         "lsrs	r6, r7, #16\n\t"
175673 #else
175674         "lsr	r6, r7, #16\n\t"
175675 #endif
175676 #ifdef WOLFSSL_KEIL
175677         "muls	r5, r6, r5\n\t"
175678 #elif defined(__clang__)
175679         "muls	r5, r6\n\t"
175680 #else
175681         "mul	r5, r6\n\t"
175682 #endif
175683 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175684         "lsrs	r6, r5, #16\n\t"
175685 #else
175686         "lsr	r6, r5, #16\n\t"
175687 #endif
175688 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175689         "lsls	r5, r5, #16\n\t"
175690 #else
175691         "lsl	r5, r5, #16\n\t"
175692 #endif
175693 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175694         "adds	r2, r2, r5\n\t"
175695 #else
175696         "add	r2, r2, r5\n\t"
175697 #endif
175698 #ifdef WOLFSSL_KEIL
175699         "adcs	r3, r3, r6\n\t"
175700 #elif defined(__clang__)
175701         "adcs	r3, r6\n\t"
175702 #else
175703         "adc	r3, r6\n\t"
175704 #endif
175705 #ifdef WOLFSSL_KEIL
175706         "adcs	r4, r4, %[r]\n\t"
175707 #elif defined(__clang__)
175708         "adcs	r4, %[r]\n\t"
175709 #else
175710         "adc	r4, %[r]\n\t"
175711 #endif
175712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175713         "adds	r2, r2, r5\n\t"
175714 #else
175715         "add	r2, r2, r5\n\t"
175716 #endif
175717 #ifdef WOLFSSL_KEIL
175718         "adcs	r3, r3, r6\n\t"
175719 #elif defined(__clang__)
175720         "adcs	r3, r6\n\t"
175721 #else
175722         "adc	r3, r6\n\t"
175723 #endif
175724 #ifdef WOLFSSL_KEIL
175725         "adcs	r4, r4, %[r]\n\t"
175726 #elif defined(__clang__)
175727         "adcs	r4, %[r]\n\t"
175728 #else
175729         "adc	r4, %[r]\n\t"
175730 #endif
175731 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175732         "lsrs	r5, %[a], #16\n\t"
175733 #else
175734         "lsr	r5, %[a], #16\n\t"
175735 #endif
175736 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175737         "lsrs	r6, r7, #16\n\t"
175738 #else
175739         "lsr	r6, r7, #16\n\t"
175740 #endif
175741 #ifdef WOLFSSL_KEIL
175742         "muls	r6, r5, r6\n\t"
175743 #elif defined(__clang__)
175744         "muls	r6, r5\n\t"
175745 #else
175746         "mul	r6, r5\n\t"
175747 #endif
175748 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175749         "adds	r3, r3, r6\n\t"
175750 #else
175751         "add	r3, r3, r6\n\t"
175752 #endif
175753 #ifdef WOLFSSL_KEIL
175754         "adcs	r4, r4, %[r]\n\t"
175755 #elif defined(__clang__)
175756         "adcs	r4, %[r]\n\t"
175757 #else
175758         "adc	r4, %[r]\n\t"
175759 #endif
175760 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175761         "adds	r3, r3, r6\n\t"
175762 #else
175763         "add	r3, r3, r6\n\t"
175764 #endif
175765 #ifdef WOLFSSL_KEIL
175766         "adcs	r4, r4, %[r]\n\t"
175767 #elif defined(__clang__)
175768         "adcs	r4, %[r]\n\t"
175769 #else
175770         "adc	r4, %[r]\n\t"
175771 #endif
175772         "uxth	r6, r7\n\t"
175773 #ifdef WOLFSSL_KEIL
175774         "muls	r5, r6, r5\n\t"
175775 #elif defined(__clang__)
175776         "muls	r5, r6\n\t"
175777 #else
175778         "mul	r5, r6\n\t"
175779 #endif
175780 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175781         "lsrs	r6, r5, #16\n\t"
175782 #else
175783         "lsr	r6, r5, #16\n\t"
175784 #endif
175785 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175786         "lsls	r5, r5, #16\n\t"
175787 #else
175788         "lsl	r5, r5, #16\n\t"
175789 #endif
175790 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175791         "adds	r2, r2, r5\n\t"
175792 #else
175793         "add	r2, r2, r5\n\t"
175794 #endif
175795 #ifdef WOLFSSL_KEIL
175796         "adcs	r3, r3, r6\n\t"
175797 #elif defined(__clang__)
175798         "adcs	r3, r6\n\t"
175799 #else
175800         "adc	r3, r6\n\t"
175801 #endif
175802 #ifdef WOLFSSL_KEIL
175803         "adcs	r4, r4, %[r]\n\t"
175804 #elif defined(__clang__)
175805         "adcs	r4, %[r]\n\t"
175806 #else
175807         "adc	r4, %[r]\n\t"
175808 #endif
175809 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175810         "adds	r2, r2, r5\n\t"
175811 #else
175812         "add	r2, r2, r5\n\t"
175813 #endif
175814 #ifdef WOLFSSL_KEIL
175815         "adcs	r3, r3, r6\n\t"
175816 #elif defined(__clang__)
175817         "adcs	r3, r6\n\t"
175818 #else
175819         "adc	r3, r6\n\t"
175820 #endif
175821 #ifdef WOLFSSL_KEIL
175822         "adcs	r4, r4, %[r]\n\t"
175823 #elif defined(__clang__)
175824         "adcs	r4, %[r]\n\t"
175825 #else
175826         "adc	r4, %[r]\n\t"
175827 #endif
175828         "#  A[14] * A[7]\n\t"
175829         "mov	%[a], r9\n\t"
175830         "ldr	r7, [%[a], #28]\n\t"
175831         "mov	%[a], r12\n\t"
175832         "uxth	r5, %[a]\n\t"
175833         "uxth	r6, r7\n\t"
175834 #ifdef WOLFSSL_KEIL
175835         "muls	r6, r5, r6\n\t"
175836 #elif defined(__clang__)
175837         "muls	r6, r5\n\t"
175838 #else
175839         "mul	r6, r5\n\t"
175840 #endif
175841 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175842         "adds	r2, r2, r6\n\t"
175843 #else
175844         "add	r2, r2, r6\n\t"
175845 #endif
175846 #ifdef WOLFSSL_KEIL
175847         "adcs	r3, r3, %[r]\n\t"
175848 #elif defined(__clang__)
175849         "adcs	r3, %[r]\n\t"
175850 #else
175851         "adc	r3, %[r]\n\t"
175852 #endif
175853 #ifdef WOLFSSL_KEIL
175854         "adcs	r4, r4, %[r]\n\t"
175855 #elif defined(__clang__)
175856         "adcs	r4, %[r]\n\t"
175857 #else
175858         "adc	r4, %[r]\n\t"
175859 #endif
175860 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175861         "adds	r2, r2, r6\n\t"
175862 #else
175863         "add	r2, r2, r6\n\t"
175864 #endif
175865 #ifdef WOLFSSL_KEIL
175866         "adcs	r3, r3, %[r]\n\t"
175867 #elif defined(__clang__)
175868         "adcs	r3, %[r]\n\t"
175869 #else
175870         "adc	r3, %[r]\n\t"
175871 #endif
175872 #ifdef WOLFSSL_KEIL
175873         "adcs	r4, r4, %[r]\n\t"
175874 #elif defined(__clang__)
175875         "adcs	r4, %[r]\n\t"
175876 #else
175877         "adc	r4, %[r]\n\t"
175878 #endif
175879 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175880         "lsrs	r6, r7, #16\n\t"
175881 #else
175882         "lsr	r6, r7, #16\n\t"
175883 #endif
175884 #ifdef WOLFSSL_KEIL
175885         "muls	r5, r6, r5\n\t"
175886 #elif defined(__clang__)
175887         "muls	r5, r6\n\t"
175888 #else
175889         "mul	r5, r6\n\t"
175890 #endif
175891 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175892         "lsrs	r6, r5, #16\n\t"
175893 #else
175894         "lsr	r6, r5, #16\n\t"
175895 #endif
175896 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175897         "lsls	r5, r5, #16\n\t"
175898 #else
175899         "lsl	r5, r5, #16\n\t"
175900 #endif
175901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175902         "adds	r2, r2, r5\n\t"
175903 #else
175904         "add	r2, r2, r5\n\t"
175905 #endif
175906 #ifdef WOLFSSL_KEIL
175907         "adcs	r3, r3, r6\n\t"
175908 #elif defined(__clang__)
175909         "adcs	r3, r6\n\t"
175910 #else
175911         "adc	r3, r6\n\t"
175912 #endif
175913 #ifdef WOLFSSL_KEIL
175914         "adcs	r4, r4, %[r]\n\t"
175915 #elif defined(__clang__)
175916         "adcs	r4, %[r]\n\t"
175917 #else
175918         "adc	r4, %[r]\n\t"
175919 #endif
175920 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175921         "adds	r2, r2, r5\n\t"
175922 #else
175923         "add	r2, r2, r5\n\t"
175924 #endif
175925 #ifdef WOLFSSL_KEIL
175926         "adcs	r3, r3, r6\n\t"
175927 #elif defined(__clang__)
175928         "adcs	r3, r6\n\t"
175929 #else
175930         "adc	r3, r6\n\t"
175931 #endif
175932 #ifdef WOLFSSL_KEIL
175933         "adcs	r4, r4, %[r]\n\t"
175934 #elif defined(__clang__)
175935         "adcs	r4, %[r]\n\t"
175936 #else
175937         "adc	r4, %[r]\n\t"
175938 #endif
175939 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175940         "lsrs	r5, %[a], #16\n\t"
175941 #else
175942         "lsr	r5, %[a], #16\n\t"
175943 #endif
175944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175945         "lsrs	r6, r7, #16\n\t"
175946 #else
175947         "lsr	r6, r7, #16\n\t"
175948 #endif
175949 #ifdef WOLFSSL_KEIL
175950         "muls	r6, r5, r6\n\t"
175951 #elif defined(__clang__)
175952         "muls	r6, r5\n\t"
175953 #else
175954         "mul	r6, r5\n\t"
175955 #endif
175956 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175957         "adds	r3, r3, r6\n\t"
175958 #else
175959         "add	r3, r3, r6\n\t"
175960 #endif
175961 #ifdef WOLFSSL_KEIL
175962         "adcs	r4, r4, %[r]\n\t"
175963 #elif defined(__clang__)
175964         "adcs	r4, %[r]\n\t"
175965 #else
175966         "adc	r4, %[r]\n\t"
175967 #endif
175968 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175969         "adds	r3, r3, r6\n\t"
175970 #else
175971         "add	r3, r3, r6\n\t"
175972 #endif
175973 #ifdef WOLFSSL_KEIL
175974         "adcs	r4, r4, %[r]\n\t"
175975 #elif defined(__clang__)
175976         "adcs	r4, %[r]\n\t"
175977 #else
175978         "adc	r4, %[r]\n\t"
175979 #endif
175980         "uxth	r6, r7\n\t"
175981 #ifdef WOLFSSL_KEIL
175982         "muls	r5, r6, r5\n\t"
175983 #elif defined(__clang__)
175984         "muls	r5, r6\n\t"
175985 #else
175986         "mul	r5, r6\n\t"
175987 #endif
175988 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175989         "lsrs	r6, r5, #16\n\t"
175990 #else
175991         "lsr	r6, r5, #16\n\t"
175992 #endif
175993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175994         "lsls	r5, r5, #16\n\t"
175995 #else
175996         "lsl	r5, r5, #16\n\t"
175997 #endif
175998 #if defined(__clang__) || defined(WOLFSSL_KEIL)
175999         "adds	r2, r2, r5\n\t"
176000 #else
176001         "add	r2, r2, r5\n\t"
176002 #endif
176003 #ifdef WOLFSSL_KEIL
176004         "adcs	r3, r3, r6\n\t"
176005 #elif defined(__clang__)
176006         "adcs	r3, r6\n\t"
176007 #else
176008         "adc	r3, r6\n\t"
176009 #endif
176010 #ifdef WOLFSSL_KEIL
176011         "adcs	r4, r4, %[r]\n\t"
176012 #elif defined(__clang__)
176013         "adcs	r4, %[r]\n\t"
176014 #else
176015         "adc	r4, %[r]\n\t"
176016 #endif
176017 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176018         "adds	r2, r2, r5\n\t"
176019 #else
176020         "add	r2, r2, r5\n\t"
176021 #endif
176022 #ifdef WOLFSSL_KEIL
176023         "adcs	r3, r3, r6\n\t"
176024 #elif defined(__clang__)
176025         "adcs	r3, r6\n\t"
176026 #else
176027         "adc	r3, r6\n\t"
176028 #endif
176029 #ifdef WOLFSSL_KEIL
176030         "adcs	r4, r4, %[r]\n\t"
176031 #elif defined(__clang__)
176032         "adcs	r4, %[r]\n\t"
176033 #else
176034         "adc	r4, %[r]\n\t"
176035 #endif
176036         "#  A[15] * A[6]\n\t"
176037         "mov	%[a], r9\n\t"
176038         "ldr	r7, [%[a], #24]\n\t"
176039         "mov	%[a], lr\n\t"
176040         "uxth	r5, %[a]\n\t"
176041         "uxth	r6, r7\n\t"
176042 #ifdef WOLFSSL_KEIL
176043         "muls	r6, r5, r6\n\t"
176044 #elif defined(__clang__)
176045         "muls	r6, r5\n\t"
176046 #else
176047         "mul	r6, r5\n\t"
176048 #endif
176049 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176050         "adds	r2, r2, r6\n\t"
176051 #else
176052         "add	r2, r2, r6\n\t"
176053 #endif
176054 #ifdef WOLFSSL_KEIL
176055         "adcs	r3, r3, %[r]\n\t"
176056 #elif defined(__clang__)
176057         "adcs	r3, %[r]\n\t"
176058 #else
176059         "adc	r3, %[r]\n\t"
176060 #endif
176061 #ifdef WOLFSSL_KEIL
176062         "adcs	r4, r4, %[r]\n\t"
176063 #elif defined(__clang__)
176064         "adcs	r4, %[r]\n\t"
176065 #else
176066         "adc	r4, %[r]\n\t"
176067 #endif
176068 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176069         "adds	r2, r2, r6\n\t"
176070 #else
176071         "add	r2, r2, r6\n\t"
176072 #endif
176073 #ifdef WOLFSSL_KEIL
176074         "adcs	r3, r3, %[r]\n\t"
176075 #elif defined(__clang__)
176076         "adcs	r3, %[r]\n\t"
176077 #else
176078         "adc	r3, %[r]\n\t"
176079 #endif
176080 #ifdef WOLFSSL_KEIL
176081         "adcs	r4, r4, %[r]\n\t"
176082 #elif defined(__clang__)
176083         "adcs	r4, %[r]\n\t"
176084 #else
176085         "adc	r4, %[r]\n\t"
176086 #endif
176087 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176088         "lsrs	r6, r7, #16\n\t"
176089 #else
176090         "lsr	r6, r7, #16\n\t"
176091 #endif
176092 #ifdef WOLFSSL_KEIL
176093         "muls	r5, r6, r5\n\t"
176094 #elif defined(__clang__)
176095         "muls	r5, r6\n\t"
176096 #else
176097         "mul	r5, r6\n\t"
176098 #endif
176099 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176100         "lsrs	r6, r5, #16\n\t"
176101 #else
176102         "lsr	r6, r5, #16\n\t"
176103 #endif
176104 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176105         "lsls	r5, r5, #16\n\t"
176106 #else
176107         "lsl	r5, r5, #16\n\t"
176108 #endif
176109 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176110         "adds	r2, r2, r5\n\t"
176111 #else
176112         "add	r2, r2, r5\n\t"
176113 #endif
176114 #ifdef WOLFSSL_KEIL
176115         "adcs	r3, r3, r6\n\t"
176116 #elif defined(__clang__)
176117         "adcs	r3, r6\n\t"
176118 #else
176119         "adc	r3, r6\n\t"
176120 #endif
176121 #ifdef WOLFSSL_KEIL
176122         "adcs	r4, r4, %[r]\n\t"
176123 #elif defined(__clang__)
176124         "adcs	r4, %[r]\n\t"
176125 #else
176126         "adc	r4, %[r]\n\t"
176127 #endif
176128 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176129         "adds	r2, r2, r5\n\t"
176130 #else
176131         "add	r2, r2, r5\n\t"
176132 #endif
176133 #ifdef WOLFSSL_KEIL
176134         "adcs	r3, r3, r6\n\t"
176135 #elif defined(__clang__)
176136         "adcs	r3, r6\n\t"
176137 #else
176138         "adc	r3, r6\n\t"
176139 #endif
176140 #ifdef WOLFSSL_KEIL
176141         "adcs	r4, r4, %[r]\n\t"
176142 #elif defined(__clang__)
176143         "adcs	r4, %[r]\n\t"
176144 #else
176145         "adc	r4, %[r]\n\t"
176146 #endif
176147 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176148         "lsrs	r5, %[a], #16\n\t"
176149 #else
176150         "lsr	r5, %[a], #16\n\t"
176151 #endif
176152 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176153         "lsrs	r6, r7, #16\n\t"
176154 #else
176155         "lsr	r6, r7, #16\n\t"
176156 #endif
176157 #ifdef WOLFSSL_KEIL
176158         "muls	r6, r5, r6\n\t"
176159 #elif defined(__clang__)
176160         "muls	r6, r5\n\t"
176161 #else
176162         "mul	r6, r5\n\t"
176163 #endif
176164 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176165         "adds	r3, r3, r6\n\t"
176166 #else
176167         "add	r3, r3, r6\n\t"
176168 #endif
176169 #ifdef WOLFSSL_KEIL
176170         "adcs	r4, r4, %[r]\n\t"
176171 #elif defined(__clang__)
176172         "adcs	r4, %[r]\n\t"
176173 #else
176174         "adc	r4, %[r]\n\t"
176175 #endif
176176 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176177         "adds	r3, r3, r6\n\t"
176178 #else
176179         "add	r3, r3, r6\n\t"
176180 #endif
176181 #ifdef WOLFSSL_KEIL
176182         "adcs	r4, r4, %[r]\n\t"
176183 #elif defined(__clang__)
176184         "adcs	r4, %[r]\n\t"
176185 #else
176186         "adc	r4, %[r]\n\t"
176187 #endif
176188         "uxth	r6, r7\n\t"
176189 #ifdef WOLFSSL_KEIL
176190         "muls	r5, r6, r5\n\t"
176191 #elif defined(__clang__)
176192         "muls	r5, r6\n\t"
176193 #else
176194         "mul	r5, r6\n\t"
176195 #endif
176196 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176197         "lsrs	r6, r5, #16\n\t"
176198 #else
176199         "lsr	r6, r5, #16\n\t"
176200 #endif
176201 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176202         "lsls	r5, r5, #16\n\t"
176203 #else
176204         "lsl	r5, r5, #16\n\t"
176205 #endif
176206 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176207         "adds	r2, r2, r5\n\t"
176208 #else
176209         "add	r2, r2, r5\n\t"
176210 #endif
176211 #ifdef WOLFSSL_KEIL
176212         "adcs	r3, r3, r6\n\t"
176213 #elif defined(__clang__)
176214         "adcs	r3, r6\n\t"
176215 #else
176216         "adc	r3, r6\n\t"
176217 #endif
176218 #ifdef WOLFSSL_KEIL
176219         "adcs	r4, r4, %[r]\n\t"
176220 #elif defined(__clang__)
176221         "adcs	r4, %[r]\n\t"
176222 #else
176223         "adc	r4, %[r]\n\t"
176224 #endif
176225 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176226         "adds	r2, r2, r5\n\t"
176227 #else
176228         "add	r2, r2, r5\n\t"
176229 #endif
176230 #ifdef WOLFSSL_KEIL
176231         "adcs	r3, r3, r6\n\t"
176232 #elif defined(__clang__)
176233         "adcs	r3, r6\n\t"
176234 #else
176235         "adc	r3, r6\n\t"
176236 #endif
176237 #ifdef WOLFSSL_KEIL
176238         "adcs	r4, r4, %[r]\n\t"
176239 #elif defined(__clang__)
176240         "adcs	r4, %[r]\n\t"
176241 #else
176242         "adc	r4, %[r]\n\t"
176243 #endif
176244         "mov	%[r], r8\n\t"
176245         "str	r2, [%[r], #84]\n\t"
176246         "movs	%[r], #0\n\t"
176247         "#  A[15] * A[7]\n\t"
176248         "movs	r2, #0\n\t"
176249         "mov	%[a], r9\n\t"
176250         "ldr	r7, [%[a], #28]\n\t"
176251         "mov	%[a], lr\n\t"
176252         "uxth	r5, %[a]\n\t"
176253         "uxth	r6, r7\n\t"
176254 #ifdef WOLFSSL_KEIL
176255         "muls	r6, r5, r6\n\t"
176256 #elif defined(__clang__)
176257         "muls	r6, r5\n\t"
176258 #else
176259         "mul	r6, r5\n\t"
176260 #endif
176261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176262         "adds	r3, r3, r6\n\t"
176263 #else
176264         "add	r3, r3, r6\n\t"
176265 #endif
176266 #ifdef WOLFSSL_KEIL
176267         "adcs	r4, r4, %[r]\n\t"
176268 #elif defined(__clang__)
176269         "adcs	r4, %[r]\n\t"
176270 #else
176271         "adc	r4, %[r]\n\t"
176272 #endif
176273 #ifdef WOLFSSL_KEIL
176274         "adcs	r2, r2, %[r]\n\t"
176275 #elif defined(__clang__)
176276         "adcs	r2, %[r]\n\t"
176277 #else
176278         "adc	r2, %[r]\n\t"
176279 #endif
176280 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176281         "adds	r3, r3, r6\n\t"
176282 #else
176283         "add	r3, r3, r6\n\t"
176284 #endif
176285 #ifdef WOLFSSL_KEIL
176286         "adcs	r4, r4, %[r]\n\t"
176287 #elif defined(__clang__)
176288         "adcs	r4, %[r]\n\t"
176289 #else
176290         "adc	r4, %[r]\n\t"
176291 #endif
176292 #ifdef WOLFSSL_KEIL
176293         "adcs	r2, r2, %[r]\n\t"
176294 #elif defined(__clang__)
176295         "adcs	r2, %[r]\n\t"
176296 #else
176297         "adc	r2, %[r]\n\t"
176298 #endif
176299 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176300         "lsrs	r6, r7, #16\n\t"
176301 #else
176302         "lsr	r6, r7, #16\n\t"
176303 #endif
176304 #ifdef WOLFSSL_KEIL
176305         "muls	r5, r6, r5\n\t"
176306 #elif defined(__clang__)
176307         "muls	r5, r6\n\t"
176308 #else
176309         "mul	r5, r6\n\t"
176310 #endif
176311 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176312         "lsrs	r6, r5, #16\n\t"
176313 #else
176314         "lsr	r6, r5, #16\n\t"
176315 #endif
176316 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176317         "lsls	r5, r5, #16\n\t"
176318 #else
176319         "lsl	r5, r5, #16\n\t"
176320 #endif
176321 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176322         "adds	r3, r3, r5\n\t"
176323 #else
176324         "add	r3, r3, r5\n\t"
176325 #endif
176326 #ifdef WOLFSSL_KEIL
176327         "adcs	r4, r4, r6\n\t"
176328 #elif defined(__clang__)
176329         "adcs	r4, r6\n\t"
176330 #else
176331         "adc	r4, r6\n\t"
176332 #endif
176333 #ifdef WOLFSSL_KEIL
176334         "adcs	r2, r2, %[r]\n\t"
176335 #elif defined(__clang__)
176336         "adcs	r2, %[r]\n\t"
176337 #else
176338         "adc	r2, %[r]\n\t"
176339 #endif
176340 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176341         "adds	r3, r3, r5\n\t"
176342 #else
176343         "add	r3, r3, r5\n\t"
176344 #endif
176345 #ifdef WOLFSSL_KEIL
176346         "adcs	r4, r4, r6\n\t"
176347 #elif defined(__clang__)
176348         "adcs	r4, r6\n\t"
176349 #else
176350         "adc	r4, r6\n\t"
176351 #endif
176352 #ifdef WOLFSSL_KEIL
176353         "adcs	r2, r2, %[r]\n\t"
176354 #elif defined(__clang__)
176355         "adcs	r2, %[r]\n\t"
176356 #else
176357         "adc	r2, %[r]\n\t"
176358 #endif
176359 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176360         "lsrs	r5, %[a], #16\n\t"
176361 #else
176362         "lsr	r5, %[a], #16\n\t"
176363 #endif
176364 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176365         "lsrs	r6, r7, #16\n\t"
176366 #else
176367         "lsr	r6, r7, #16\n\t"
176368 #endif
176369 #ifdef WOLFSSL_KEIL
176370         "muls	r6, r5, r6\n\t"
176371 #elif defined(__clang__)
176372         "muls	r6, r5\n\t"
176373 #else
176374         "mul	r6, r5\n\t"
176375 #endif
176376 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176377         "adds	r4, r4, r6\n\t"
176378 #else
176379         "add	r4, r4, r6\n\t"
176380 #endif
176381 #ifdef WOLFSSL_KEIL
176382         "adcs	r2, r2, %[r]\n\t"
176383 #elif defined(__clang__)
176384         "adcs	r2, %[r]\n\t"
176385 #else
176386         "adc	r2, %[r]\n\t"
176387 #endif
176388 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176389         "adds	r4, r4, r6\n\t"
176390 #else
176391         "add	r4, r4, r6\n\t"
176392 #endif
176393 #ifdef WOLFSSL_KEIL
176394         "adcs	r2, r2, %[r]\n\t"
176395 #elif defined(__clang__)
176396         "adcs	r2, %[r]\n\t"
176397 #else
176398         "adc	r2, %[r]\n\t"
176399 #endif
176400         "uxth	r6, r7\n\t"
176401 #ifdef WOLFSSL_KEIL
176402         "muls	r5, r6, r5\n\t"
176403 #elif defined(__clang__)
176404         "muls	r5, r6\n\t"
176405 #else
176406         "mul	r5, r6\n\t"
176407 #endif
176408 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176409         "lsrs	r6, r5, #16\n\t"
176410 #else
176411         "lsr	r6, r5, #16\n\t"
176412 #endif
176413 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176414         "lsls	r5, r5, #16\n\t"
176415 #else
176416         "lsl	r5, r5, #16\n\t"
176417 #endif
176418 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176419         "adds	r3, r3, r5\n\t"
176420 #else
176421         "add	r3, r3, r5\n\t"
176422 #endif
176423 #ifdef WOLFSSL_KEIL
176424         "adcs	r4, r4, r6\n\t"
176425 #elif defined(__clang__)
176426         "adcs	r4, r6\n\t"
176427 #else
176428         "adc	r4, r6\n\t"
176429 #endif
176430 #ifdef WOLFSSL_KEIL
176431         "adcs	r2, r2, %[r]\n\t"
176432 #elif defined(__clang__)
176433         "adcs	r2, %[r]\n\t"
176434 #else
176435         "adc	r2, %[r]\n\t"
176436 #endif
176437 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176438         "adds	r3, r3, r5\n\t"
176439 #else
176440         "add	r3, r3, r5\n\t"
176441 #endif
176442 #ifdef WOLFSSL_KEIL
176443         "adcs	r4, r4, r6\n\t"
176444 #elif defined(__clang__)
176445         "adcs	r4, r6\n\t"
176446 #else
176447         "adc	r4, r6\n\t"
176448 #endif
176449 #ifdef WOLFSSL_KEIL
176450         "adcs	r2, r2, %[r]\n\t"
176451 #elif defined(__clang__)
176452         "adcs	r2, %[r]\n\t"
176453 #else
176454         "adc	r2, %[r]\n\t"
176455 #endif
176456         "#  A[14] * A[8]\n\t"
176457         "mov	%[a], r9\n\t"
176458         "ldr	r7, [%[a], #32]\n\t"
176459         "mov	%[a], r12\n\t"
176460         "uxth	r5, %[a]\n\t"
176461         "uxth	r6, r7\n\t"
176462 #ifdef WOLFSSL_KEIL
176463         "muls	r6, r5, r6\n\t"
176464 #elif defined(__clang__)
176465         "muls	r6, r5\n\t"
176466 #else
176467         "mul	r6, r5\n\t"
176468 #endif
176469 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176470         "adds	r3, r3, r6\n\t"
176471 #else
176472         "add	r3, r3, r6\n\t"
176473 #endif
176474 #ifdef WOLFSSL_KEIL
176475         "adcs	r4, r4, %[r]\n\t"
176476 #elif defined(__clang__)
176477         "adcs	r4, %[r]\n\t"
176478 #else
176479         "adc	r4, %[r]\n\t"
176480 #endif
176481 #ifdef WOLFSSL_KEIL
176482         "adcs	r2, r2, %[r]\n\t"
176483 #elif defined(__clang__)
176484         "adcs	r2, %[r]\n\t"
176485 #else
176486         "adc	r2, %[r]\n\t"
176487 #endif
176488 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176489         "adds	r3, r3, r6\n\t"
176490 #else
176491         "add	r3, r3, r6\n\t"
176492 #endif
176493 #ifdef WOLFSSL_KEIL
176494         "adcs	r4, r4, %[r]\n\t"
176495 #elif defined(__clang__)
176496         "adcs	r4, %[r]\n\t"
176497 #else
176498         "adc	r4, %[r]\n\t"
176499 #endif
176500 #ifdef WOLFSSL_KEIL
176501         "adcs	r2, r2, %[r]\n\t"
176502 #elif defined(__clang__)
176503         "adcs	r2, %[r]\n\t"
176504 #else
176505         "adc	r2, %[r]\n\t"
176506 #endif
176507 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176508         "lsrs	r6, r7, #16\n\t"
176509 #else
176510         "lsr	r6, r7, #16\n\t"
176511 #endif
176512 #ifdef WOLFSSL_KEIL
176513         "muls	r5, r6, r5\n\t"
176514 #elif defined(__clang__)
176515         "muls	r5, r6\n\t"
176516 #else
176517         "mul	r5, r6\n\t"
176518 #endif
176519 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176520         "lsrs	r6, r5, #16\n\t"
176521 #else
176522         "lsr	r6, r5, #16\n\t"
176523 #endif
176524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176525         "lsls	r5, r5, #16\n\t"
176526 #else
176527         "lsl	r5, r5, #16\n\t"
176528 #endif
176529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176530         "adds	r3, r3, r5\n\t"
176531 #else
176532         "add	r3, r3, r5\n\t"
176533 #endif
176534 #ifdef WOLFSSL_KEIL
176535         "adcs	r4, r4, r6\n\t"
176536 #elif defined(__clang__)
176537         "adcs	r4, r6\n\t"
176538 #else
176539         "adc	r4, r6\n\t"
176540 #endif
176541 #ifdef WOLFSSL_KEIL
176542         "adcs	r2, r2, %[r]\n\t"
176543 #elif defined(__clang__)
176544         "adcs	r2, %[r]\n\t"
176545 #else
176546         "adc	r2, %[r]\n\t"
176547 #endif
176548 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176549         "adds	r3, r3, r5\n\t"
176550 #else
176551         "add	r3, r3, r5\n\t"
176552 #endif
176553 #ifdef WOLFSSL_KEIL
176554         "adcs	r4, r4, r6\n\t"
176555 #elif defined(__clang__)
176556         "adcs	r4, r6\n\t"
176557 #else
176558         "adc	r4, r6\n\t"
176559 #endif
176560 #ifdef WOLFSSL_KEIL
176561         "adcs	r2, r2, %[r]\n\t"
176562 #elif defined(__clang__)
176563         "adcs	r2, %[r]\n\t"
176564 #else
176565         "adc	r2, %[r]\n\t"
176566 #endif
176567 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176568         "lsrs	r5, %[a], #16\n\t"
176569 #else
176570         "lsr	r5, %[a], #16\n\t"
176571 #endif
176572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176573         "lsrs	r6, r7, #16\n\t"
176574 #else
176575         "lsr	r6, r7, #16\n\t"
176576 #endif
176577 #ifdef WOLFSSL_KEIL
176578         "muls	r6, r5, r6\n\t"
176579 #elif defined(__clang__)
176580         "muls	r6, r5\n\t"
176581 #else
176582         "mul	r6, r5\n\t"
176583 #endif
176584 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176585         "adds	r4, r4, r6\n\t"
176586 #else
176587         "add	r4, r4, r6\n\t"
176588 #endif
176589 #ifdef WOLFSSL_KEIL
176590         "adcs	r2, r2, %[r]\n\t"
176591 #elif defined(__clang__)
176592         "adcs	r2, %[r]\n\t"
176593 #else
176594         "adc	r2, %[r]\n\t"
176595 #endif
176596 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176597         "adds	r4, r4, r6\n\t"
176598 #else
176599         "add	r4, r4, r6\n\t"
176600 #endif
176601 #ifdef WOLFSSL_KEIL
176602         "adcs	r2, r2, %[r]\n\t"
176603 #elif defined(__clang__)
176604         "adcs	r2, %[r]\n\t"
176605 #else
176606         "adc	r2, %[r]\n\t"
176607 #endif
176608         "uxth	r6, r7\n\t"
176609 #ifdef WOLFSSL_KEIL
176610         "muls	r5, r6, r5\n\t"
176611 #elif defined(__clang__)
176612         "muls	r5, r6\n\t"
176613 #else
176614         "mul	r5, r6\n\t"
176615 #endif
176616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176617         "lsrs	r6, r5, #16\n\t"
176618 #else
176619         "lsr	r6, r5, #16\n\t"
176620 #endif
176621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176622         "lsls	r5, r5, #16\n\t"
176623 #else
176624         "lsl	r5, r5, #16\n\t"
176625 #endif
176626 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176627         "adds	r3, r3, r5\n\t"
176628 #else
176629         "add	r3, r3, r5\n\t"
176630 #endif
176631 #ifdef WOLFSSL_KEIL
176632         "adcs	r4, r4, r6\n\t"
176633 #elif defined(__clang__)
176634         "adcs	r4, r6\n\t"
176635 #else
176636         "adc	r4, r6\n\t"
176637 #endif
176638 #ifdef WOLFSSL_KEIL
176639         "adcs	r2, r2, %[r]\n\t"
176640 #elif defined(__clang__)
176641         "adcs	r2, %[r]\n\t"
176642 #else
176643         "adc	r2, %[r]\n\t"
176644 #endif
176645 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176646         "adds	r3, r3, r5\n\t"
176647 #else
176648         "add	r3, r3, r5\n\t"
176649 #endif
176650 #ifdef WOLFSSL_KEIL
176651         "adcs	r4, r4, r6\n\t"
176652 #elif defined(__clang__)
176653         "adcs	r4, r6\n\t"
176654 #else
176655         "adc	r4, r6\n\t"
176656 #endif
176657 #ifdef WOLFSSL_KEIL
176658         "adcs	r2, r2, %[r]\n\t"
176659 #elif defined(__clang__)
176660         "adcs	r2, %[r]\n\t"
176661 #else
176662         "adc	r2, %[r]\n\t"
176663 #endif
176664         "#  A[13] * A[9]\n\t"
176665         "mov	%[a], r9\n\t"
176666         "ldr	r7, [%[a], #36]\n\t"
176667         "mov	%[a], r11\n\t"
176668         "uxth	r5, %[a]\n\t"
176669         "uxth	r6, r7\n\t"
176670 #ifdef WOLFSSL_KEIL
176671         "muls	r6, r5, r6\n\t"
176672 #elif defined(__clang__)
176673         "muls	r6, r5\n\t"
176674 #else
176675         "mul	r6, r5\n\t"
176676 #endif
176677 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176678         "adds	r3, r3, r6\n\t"
176679 #else
176680         "add	r3, r3, r6\n\t"
176681 #endif
176682 #ifdef WOLFSSL_KEIL
176683         "adcs	r4, r4, %[r]\n\t"
176684 #elif defined(__clang__)
176685         "adcs	r4, %[r]\n\t"
176686 #else
176687         "adc	r4, %[r]\n\t"
176688 #endif
176689 #ifdef WOLFSSL_KEIL
176690         "adcs	r2, r2, %[r]\n\t"
176691 #elif defined(__clang__)
176692         "adcs	r2, %[r]\n\t"
176693 #else
176694         "adc	r2, %[r]\n\t"
176695 #endif
176696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176697         "adds	r3, r3, r6\n\t"
176698 #else
176699         "add	r3, r3, r6\n\t"
176700 #endif
176701 #ifdef WOLFSSL_KEIL
176702         "adcs	r4, r4, %[r]\n\t"
176703 #elif defined(__clang__)
176704         "adcs	r4, %[r]\n\t"
176705 #else
176706         "adc	r4, %[r]\n\t"
176707 #endif
176708 #ifdef WOLFSSL_KEIL
176709         "adcs	r2, r2, %[r]\n\t"
176710 #elif defined(__clang__)
176711         "adcs	r2, %[r]\n\t"
176712 #else
176713         "adc	r2, %[r]\n\t"
176714 #endif
176715 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176716         "lsrs	r6, r7, #16\n\t"
176717 #else
176718         "lsr	r6, r7, #16\n\t"
176719 #endif
176720 #ifdef WOLFSSL_KEIL
176721         "muls	r5, r6, r5\n\t"
176722 #elif defined(__clang__)
176723         "muls	r5, r6\n\t"
176724 #else
176725         "mul	r5, r6\n\t"
176726 #endif
176727 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176728         "lsrs	r6, r5, #16\n\t"
176729 #else
176730         "lsr	r6, r5, #16\n\t"
176731 #endif
176732 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176733         "lsls	r5, r5, #16\n\t"
176734 #else
176735         "lsl	r5, r5, #16\n\t"
176736 #endif
176737 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176738         "adds	r3, r3, r5\n\t"
176739 #else
176740         "add	r3, r3, r5\n\t"
176741 #endif
176742 #ifdef WOLFSSL_KEIL
176743         "adcs	r4, r4, r6\n\t"
176744 #elif defined(__clang__)
176745         "adcs	r4, r6\n\t"
176746 #else
176747         "adc	r4, r6\n\t"
176748 #endif
176749 #ifdef WOLFSSL_KEIL
176750         "adcs	r2, r2, %[r]\n\t"
176751 #elif defined(__clang__)
176752         "adcs	r2, %[r]\n\t"
176753 #else
176754         "adc	r2, %[r]\n\t"
176755 #endif
176756 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176757         "adds	r3, r3, r5\n\t"
176758 #else
176759         "add	r3, r3, r5\n\t"
176760 #endif
176761 #ifdef WOLFSSL_KEIL
176762         "adcs	r4, r4, r6\n\t"
176763 #elif defined(__clang__)
176764         "adcs	r4, r6\n\t"
176765 #else
176766         "adc	r4, r6\n\t"
176767 #endif
176768 #ifdef WOLFSSL_KEIL
176769         "adcs	r2, r2, %[r]\n\t"
176770 #elif defined(__clang__)
176771         "adcs	r2, %[r]\n\t"
176772 #else
176773         "adc	r2, %[r]\n\t"
176774 #endif
176775 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176776         "lsrs	r5, %[a], #16\n\t"
176777 #else
176778         "lsr	r5, %[a], #16\n\t"
176779 #endif
176780 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176781         "lsrs	r6, r7, #16\n\t"
176782 #else
176783         "lsr	r6, r7, #16\n\t"
176784 #endif
176785 #ifdef WOLFSSL_KEIL
176786         "muls	r6, r5, r6\n\t"
176787 #elif defined(__clang__)
176788         "muls	r6, r5\n\t"
176789 #else
176790         "mul	r6, r5\n\t"
176791 #endif
176792 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176793         "adds	r4, r4, r6\n\t"
176794 #else
176795         "add	r4, r4, r6\n\t"
176796 #endif
176797 #ifdef WOLFSSL_KEIL
176798         "adcs	r2, r2, %[r]\n\t"
176799 #elif defined(__clang__)
176800         "adcs	r2, %[r]\n\t"
176801 #else
176802         "adc	r2, %[r]\n\t"
176803 #endif
176804 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176805         "adds	r4, r4, r6\n\t"
176806 #else
176807         "add	r4, r4, r6\n\t"
176808 #endif
176809 #ifdef WOLFSSL_KEIL
176810         "adcs	r2, r2, %[r]\n\t"
176811 #elif defined(__clang__)
176812         "adcs	r2, %[r]\n\t"
176813 #else
176814         "adc	r2, %[r]\n\t"
176815 #endif
176816         "uxth	r6, r7\n\t"
176817 #ifdef WOLFSSL_KEIL
176818         "muls	r5, r6, r5\n\t"
176819 #elif defined(__clang__)
176820         "muls	r5, r6\n\t"
176821 #else
176822         "mul	r5, r6\n\t"
176823 #endif
176824 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176825         "lsrs	r6, r5, #16\n\t"
176826 #else
176827         "lsr	r6, r5, #16\n\t"
176828 #endif
176829 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176830         "lsls	r5, r5, #16\n\t"
176831 #else
176832         "lsl	r5, r5, #16\n\t"
176833 #endif
176834 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176835         "adds	r3, r3, r5\n\t"
176836 #else
176837         "add	r3, r3, r5\n\t"
176838 #endif
176839 #ifdef WOLFSSL_KEIL
176840         "adcs	r4, r4, r6\n\t"
176841 #elif defined(__clang__)
176842         "adcs	r4, r6\n\t"
176843 #else
176844         "adc	r4, r6\n\t"
176845 #endif
176846 #ifdef WOLFSSL_KEIL
176847         "adcs	r2, r2, %[r]\n\t"
176848 #elif defined(__clang__)
176849         "adcs	r2, %[r]\n\t"
176850 #else
176851         "adc	r2, %[r]\n\t"
176852 #endif
176853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176854         "adds	r3, r3, r5\n\t"
176855 #else
176856         "add	r3, r3, r5\n\t"
176857 #endif
176858 #ifdef WOLFSSL_KEIL
176859         "adcs	r4, r4, r6\n\t"
176860 #elif defined(__clang__)
176861         "adcs	r4, r6\n\t"
176862 #else
176863         "adc	r4, r6\n\t"
176864 #endif
176865 #ifdef WOLFSSL_KEIL
176866         "adcs	r2, r2, %[r]\n\t"
176867 #elif defined(__clang__)
176868         "adcs	r2, %[r]\n\t"
176869 #else
176870         "adc	r2, %[r]\n\t"
176871 #endif
176872         "#  A[12] * A[10]\n\t"
176873         "mov	%[a], r9\n\t"
176874         "ldr	r7, [%[a], #40]\n\t"
176875         "mov	%[a], r10\n\t"
176876         "uxth	r5, %[a]\n\t"
176877         "uxth	r6, r7\n\t"
176878 #ifdef WOLFSSL_KEIL
176879         "muls	r6, r5, r6\n\t"
176880 #elif defined(__clang__)
176881         "muls	r6, r5\n\t"
176882 #else
176883         "mul	r6, r5\n\t"
176884 #endif
176885 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176886         "adds	r3, r3, r6\n\t"
176887 #else
176888         "add	r3, r3, r6\n\t"
176889 #endif
176890 #ifdef WOLFSSL_KEIL
176891         "adcs	r4, r4, %[r]\n\t"
176892 #elif defined(__clang__)
176893         "adcs	r4, %[r]\n\t"
176894 #else
176895         "adc	r4, %[r]\n\t"
176896 #endif
176897 #ifdef WOLFSSL_KEIL
176898         "adcs	r2, r2, %[r]\n\t"
176899 #elif defined(__clang__)
176900         "adcs	r2, %[r]\n\t"
176901 #else
176902         "adc	r2, %[r]\n\t"
176903 #endif
176904 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176905         "adds	r3, r3, r6\n\t"
176906 #else
176907         "add	r3, r3, r6\n\t"
176908 #endif
176909 #ifdef WOLFSSL_KEIL
176910         "adcs	r4, r4, %[r]\n\t"
176911 #elif defined(__clang__)
176912         "adcs	r4, %[r]\n\t"
176913 #else
176914         "adc	r4, %[r]\n\t"
176915 #endif
176916 #ifdef WOLFSSL_KEIL
176917         "adcs	r2, r2, %[r]\n\t"
176918 #elif defined(__clang__)
176919         "adcs	r2, %[r]\n\t"
176920 #else
176921         "adc	r2, %[r]\n\t"
176922 #endif
176923 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176924         "lsrs	r6, r7, #16\n\t"
176925 #else
176926         "lsr	r6, r7, #16\n\t"
176927 #endif
176928 #ifdef WOLFSSL_KEIL
176929         "muls	r5, r6, r5\n\t"
176930 #elif defined(__clang__)
176931         "muls	r5, r6\n\t"
176932 #else
176933         "mul	r5, r6\n\t"
176934 #endif
176935 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176936         "lsrs	r6, r5, #16\n\t"
176937 #else
176938         "lsr	r6, r5, #16\n\t"
176939 #endif
176940 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176941         "lsls	r5, r5, #16\n\t"
176942 #else
176943         "lsl	r5, r5, #16\n\t"
176944 #endif
176945 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176946         "adds	r3, r3, r5\n\t"
176947 #else
176948         "add	r3, r3, r5\n\t"
176949 #endif
176950 #ifdef WOLFSSL_KEIL
176951         "adcs	r4, r4, r6\n\t"
176952 #elif defined(__clang__)
176953         "adcs	r4, r6\n\t"
176954 #else
176955         "adc	r4, r6\n\t"
176956 #endif
176957 #ifdef WOLFSSL_KEIL
176958         "adcs	r2, r2, %[r]\n\t"
176959 #elif defined(__clang__)
176960         "adcs	r2, %[r]\n\t"
176961 #else
176962         "adc	r2, %[r]\n\t"
176963 #endif
176964 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176965         "adds	r3, r3, r5\n\t"
176966 #else
176967         "add	r3, r3, r5\n\t"
176968 #endif
176969 #ifdef WOLFSSL_KEIL
176970         "adcs	r4, r4, r6\n\t"
176971 #elif defined(__clang__)
176972         "adcs	r4, r6\n\t"
176973 #else
176974         "adc	r4, r6\n\t"
176975 #endif
176976 #ifdef WOLFSSL_KEIL
176977         "adcs	r2, r2, %[r]\n\t"
176978 #elif defined(__clang__)
176979         "adcs	r2, %[r]\n\t"
176980 #else
176981         "adc	r2, %[r]\n\t"
176982 #endif
176983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176984         "lsrs	r5, %[a], #16\n\t"
176985 #else
176986         "lsr	r5, %[a], #16\n\t"
176987 #endif
176988 #if defined(__clang__) || defined(WOLFSSL_KEIL)
176989         "lsrs	r6, r7, #16\n\t"
176990 #else
176991         "lsr	r6, r7, #16\n\t"
176992 #endif
176993 #ifdef WOLFSSL_KEIL
176994         "muls	r6, r5, r6\n\t"
176995 #elif defined(__clang__)
176996         "muls	r6, r5\n\t"
176997 #else
176998         "mul	r6, r5\n\t"
176999 #endif
177000 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177001         "adds	r4, r4, r6\n\t"
177002 #else
177003         "add	r4, r4, r6\n\t"
177004 #endif
177005 #ifdef WOLFSSL_KEIL
177006         "adcs	r2, r2, %[r]\n\t"
177007 #elif defined(__clang__)
177008         "adcs	r2, %[r]\n\t"
177009 #else
177010         "adc	r2, %[r]\n\t"
177011 #endif
177012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177013         "adds	r4, r4, r6\n\t"
177014 #else
177015         "add	r4, r4, r6\n\t"
177016 #endif
177017 #ifdef WOLFSSL_KEIL
177018         "adcs	r2, r2, %[r]\n\t"
177019 #elif defined(__clang__)
177020         "adcs	r2, %[r]\n\t"
177021 #else
177022         "adc	r2, %[r]\n\t"
177023 #endif
177024         "uxth	r6, r7\n\t"
177025 #ifdef WOLFSSL_KEIL
177026         "muls	r5, r6, r5\n\t"
177027 #elif defined(__clang__)
177028         "muls	r5, r6\n\t"
177029 #else
177030         "mul	r5, r6\n\t"
177031 #endif
177032 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177033         "lsrs	r6, r5, #16\n\t"
177034 #else
177035         "lsr	r6, r5, #16\n\t"
177036 #endif
177037 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177038         "lsls	r5, r5, #16\n\t"
177039 #else
177040         "lsl	r5, r5, #16\n\t"
177041 #endif
177042 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177043         "adds	r3, r3, r5\n\t"
177044 #else
177045         "add	r3, r3, r5\n\t"
177046 #endif
177047 #ifdef WOLFSSL_KEIL
177048         "adcs	r4, r4, r6\n\t"
177049 #elif defined(__clang__)
177050         "adcs	r4, r6\n\t"
177051 #else
177052         "adc	r4, r6\n\t"
177053 #endif
177054 #ifdef WOLFSSL_KEIL
177055         "adcs	r2, r2, %[r]\n\t"
177056 #elif defined(__clang__)
177057         "adcs	r2, %[r]\n\t"
177058 #else
177059         "adc	r2, %[r]\n\t"
177060 #endif
177061 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177062         "adds	r3, r3, r5\n\t"
177063 #else
177064         "add	r3, r3, r5\n\t"
177065 #endif
177066 #ifdef WOLFSSL_KEIL
177067         "adcs	r4, r4, r6\n\t"
177068 #elif defined(__clang__)
177069         "adcs	r4, r6\n\t"
177070 #else
177071         "adc	r4, r6\n\t"
177072 #endif
177073 #ifdef WOLFSSL_KEIL
177074         "adcs	r2, r2, %[r]\n\t"
177075 #elif defined(__clang__)
177076         "adcs	r2, %[r]\n\t"
177077 #else
177078         "adc	r2, %[r]\n\t"
177079 #endif
177080         "#  A[11] * A[11]\n\t"
177081         "mov	%[a], r9\n\t"
177082         "ldr	r7, [%[a], #44]\n\t"
177083 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177084         "lsrs	r6, r7, #16\n\t"
177085 #else
177086         "lsr	r6, r7, #16\n\t"
177087 #endif
177088         "uxth	r5, r7\n\t"
177089 #ifdef WOLFSSL_KEIL
177090         "muls	r5, r5, r5\n\t"
177091 #elif defined(__clang__)
177092         "muls	r5, r5\n\t"
177093 #else
177094         "mul	r5, r5\n\t"
177095 #endif
177096 #ifdef WOLFSSL_KEIL
177097         "muls	r6, r6, r6\n\t"
177098 #elif defined(__clang__)
177099         "muls	r6, r6\n\t"
177100 #else
177101         "mul	r6, r6\n\t"
177102 #endif
177103 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177104         "adds	r3, r3, r5\n\t"
177105 #else
177106         "add	r3, r3, r5\n\t"
177107 #endif
177108 #ifdef WOLFSSL_KEIL
177109         "adcs	r4, r4, r6\n\t"
177110 #elif defined(__clang__)
177111         "adcs	r4, r6\n\t"
177112 #else
177113         "adc	r4, r6\n\t"
177114 #endif
177115 #ifdef WOLFSSL_KEIL
177116         "adcs	r2, r2, %[r]\n\t"
177117 #elif defined(__clang__)
177118         "adcs	r2, %[r]\n\t"
177119 #else
177120         "adc	r2, %[r]\n\t"
177121 #endif
177122 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177123         "lsrs	r6, r7, #16\n\t"
177124 #else
177125         "lsr	r6, r7, #16\n\t"
177126 #endif
177127         "uxth	r5, r7\n\t"
177128 #ifdef WOLFSSL_KEIL
177129         "muls	r5, r6, r5\n\t"
177130 #elif defined(__clang__)
177131         "muls	r5, r6\n\t"
177132 #else
177133         "mul	r5, r6\n\t"
177134 #endif
177135 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177136         "lsrs	r6, r5, #15\n\t"
177137 #else
177138         "lsr	r6, r5, #15\n\t"
177139 #endif
177140 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177141         "lsls	r5, r5, #17\n\t"
177142 #else
177143         "lsl	r5, r5, #17\n\t"
177144 #endif
177145 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177146         "adds	r3, r3, r5\n\t"
177147 #else
177148         "add	r3, r3, r5\n\t"
177149 #endif
177150 #ifdef WOLFSSL_KEIL
177151         "adcs	r4, r4, r6\n\t"
177152 #elif defined(__clang__)
177153         "adcs	r4, r6\n\t"
177154 #else
177155         "adc	r4, r6\n\t"
177156 #endif
177157 #ifdef WOLFSSL_KEIL
177158         "adcs	r2, r2, %[r]\n\t"
177159 #elif defined(__clang__)
177160         "adcs	r2, %[r]\n\t"
177161 #else
177162         "adc	r2, %[r]\n\t"
177163 #endif
177164         "mov	%[r], r8\n\t"
177165         "str	r3, [%[r], #88]\n\t"
177166         "movs	%[r], #0\n\t"
177167         "#  A[12] * A[11]\n\t"
177168         "movs	r3, #0\n\t"
177169         "mov	%[a], r10\n\t"
177170         "uxth	r5, %[a]\n\t"
177171         "uxth	r6, r7\n\t"
177172 #ifdef WOLFSSL_KEIL
177173         "muls	r6, r5, r6\n\t"
177174 #elif defined(__clang__)
177175         "muls	r6, r5\n\t"
177176 #else
177177         "mul	r6, r5\n\t"
177178 #endif
177179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177180         "adds	r4, r4, r6\n\t"
177181 #else
177182         "add	r4, r4, r6\n\t"
177183 #endif
177184 #ifdef WOLFSSL_KEIL
177185         "adcs	r2, r2, %[r]\n\t"
177186 #elif defined(__clang__)
177187         "adcs	r2, %[r]\n\t"
177188 #else
177189         "adc	r2, %[r]\n\t"
177190 #endif
177191 #ifdef WOLFSSL_KEIL
177192         "adcs	r3, r3, %[r]\n\t"
177193 #elif defined(__clang__)
177194         "adcs	r3, %[r]\n\t"
177195 #else
177196         "adc	r3, %[r]\n\t"
177197 #endif
177198 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177199         "adds	r4, r4, r6\n\t"
177200 #else
177201         "add	r4, r4, r6\n\t"
177202 #endif
177203 #ifdef WOLFSSL_KEIL
177204         "adcs	r2, r2, %[r]\n\t"
177205 #elif defined(__clang__)
177206         "adcs	r2, %[r]\n\t"
177207 #else
177208         "adc	r2, %[r]\n\t"
177209 #endif
177210 #ifdef WOLFSSL_KEIL
177211         "adcs	r3, r3, %[r]\n\t"
177212 #elif defined(__clang__)
177213         "adcs	r3, %[r]\n\t"
177214 #else
177215         "adc	r3, %[r]\n\t"
177216 #endif
177217 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177218         "lsrs	r6, r7, #16\n\t"
177219 #else
177220         "lsr	r6, r7, #16\n\t"
177221 #endif
177222 #ifdef WOLFSSL_KEIL
177223         "muls	r5, r6, r5\n\t"
177224 #elif defined(__clang__)
177225         "muls	r5, r6\n\t"
177226 #else
177227         "mul	r5, r6\n\t"
177228 #endif
177229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177230         "lsrs	r6, r5, #16\n\t"
177231 #else
177232         "lsr	r6, r5, #16\n\t"
177233 #endif
177234 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177235         "lsls	r5, r5, #16\n\t"
177236 #else
177237         "lsl	r5, r5, #16\n\t"
177238 #endif
177239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177240         "adds	r4, r4, r5\n\t"
177241 #else
177242         "add	r4, r4, r5\n\t"
177243 #endif
177244 #ifdef WOLFSSL_KEIL
177245         "adcs	r2, r2, r6\n\t"
177246 #elif defined(__clang__)
177247         "adcs	r2, r6\n\t"
177248 #else
177249         "adc	r2, r6\n\t"
177250 #endif
177251 #ifdef WOLFSSL_KEIL
177252         "adcs	r3, r3, %[r]\n\t"
177253 #elif defined(__clang__)
177254         "adcs	r3, %[r]\n\t"
177255 #else
177256         "adc	r3, %[r]\n\t"
177257 #endif
177258 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177259         "adds	r4, r4, r5\n\t"
177260 #else
177261         "add	r4, r4, r5\n\t"
177262 #endif
177263 #ifdef WOLFSSL_KEIL
177264         "adcs	r2, r2, r6\n\t"
177265 #elif defined(__clang__)
177266         "adcs	r2, r6\n\t"
177267 #else
177268         "adc	r2, r6\n\t"
177269 #endif
177270 #ifdef WOLFSSL_KEIL
177271         "adcs	r3, r3, %[r]\n\t"
177272 #elif defined(__clang__)
177273         "adcs	r3, %[r]\n\t"
177274 #else
177275         "adc	r3, %[r]\n\t"
177276 #endif
177277 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177278         "lsrs	r5, %[a], #16\n\t"
177279 #else
177280         "lsr	r5, %[a], #16\n\t"
177281 #endif
177282 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177283         "lsrs	r6, r7, #16\n\t"
177284 #else
177285         "lsr	r6, r7, #16\n\t"
177286 #endif
177287 #ifdef WOLFSSL_KEIL
177288         "muls	r6, r5, r6\n\t"
177289 #elif defined(__clang__)
177290         "muls	r6, r5\n\t"
177291 #else
177292         "mul	r6, r5\n\t"
177293 #endif
177294 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177295         "adds	r2, r2, r6\n\t"
177296 #else
177297         "add	r2, r2, r6\n\t"
177298 #endif
177299 #ifdef WOLFSSL_KEIL
177300         "adcs	r3, r3, %[r]\n\t"
177301 #elif defined(__clang__)
177302         "adcs	r3, %[r]\n\t"
177303 #else
177304         "adc	r3, %[r]\n\t"
177305 #endif
177306 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177307         "adds	r2, r2, r6\n\t"
177308 #else
177309         "add	r2, r2, r6\n\t"
177310 #endif
177311 #ifdef WOLFSSL_KEIL
177312         "adcs	r3, r3, %[r]\n\t"
177313 #elif defined(__clang__)
177314         "adcs	r3, %[r]\n\t"
177315 #else
177316         "adc	r3, %[r]\n\t"
177317 #endif
177318         "uxth	r6, r7\n\t"
177319 #ifdef WOLFSSL_KEIL
177320         "muls	r5, r6, r5\n\t"
177321 #elif defined(__clang__)
177322         "muls	r5, r6\n\t"
177323 #else
177324         "mul	r5, r6\n\t"
177325 #endif
177326 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177327         "lsrs	r6, r5, #16\n\t"
177328 #else
177329         "lsr	r6, r5, #16\n\t"
177330 #endif
177331 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177332         "lsls	r5, r5, #16\n\t"
177333 #else
177334         "lsl	r5, r5, #16\n\t"
177335 #endif
177336 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177337         "adds	r4, r4, r5\n\t"
177338 #else
177339         "add	r4, r4, r5\n\t"
177340 #endif
177341 #ifdef WOLFSSL_KEIL
177342         "adcs	r2, r2, r6\n\t"
177343 #elif defined(__clang__)
177344         "adcs	r2, r6\n\t"
177345 #else
177346         "adc	r2, r6\n\t"
177347 #endif
177348 #ifdef WOLFSSL_KEIL
177349         "adcs	r3, r3, %[r]\n\t"
177350 #elif defined(__clang__)
177351         "adcs	r3, %[r]\n\t"
177352 #else
177353         "adc	r3, %[r]\n\t"
177354 #endif
177355 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177356         "adds	r4, r4, r5\n\t"
177357 #else
177358         "add	r4, r4, r5\n\t"
177359 #endif
177360 #ifdef WOLFSSL_KEIL
177361         "adcs	r2, r2, r6\n\t"
177362 #elif defined(__clang__)
177363         "adcs	r2, r6\n\t"
177364 #else
177365         "adc	r2, r6\n\t"
177366 #endif
177367 #ifdef WOLFSSL_KEIL
177368         "adcs	r3, r3, %[r]\n\t"
177369 #elif defined(__clang__)
177370         "adcs	r3, %[r]\n\t"
177371 #else
177372         "adc	r3, %[r]\n\t"
177373 #endif
177374         "#  A[13] * A[10]\n\t"
177375         "mov	%[a], r9\n\t"
177376         "ldr	r7, [%[a], #40]\n\t"
177377         "mov	%[a], r11\n\t"
177378         "uxth	r5, %[a]\n\t"
177379         "uxth	r6, r7\n\t"
177380 #ifdef WOLFSSL_KEIL
177381         "muls	r6, r5, r6\n\t"
177382 #elif defined(__clang__)
177383         "muls	r6, r5\n\t"
177384 #else
177385         "mul	r6, r5\n\t"
177386 #endif
177387 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177388         "adds	r4, r4, r6\n\t"
177389 #else
177390         "add	r4, r4, r6\n\t"
177391 #endif
177392 #ifdef WOLFSSL_KEIL
177393         "adcs	r2, r2, %[r]\n\t"
177394 #elif defined(__clang__)
177395         "adcs	r2, %[r]\n\t"
177396 #else
177397         "adc	r2, %[r]\n\t"
177398 #endif
177399 #ifdef WOLFSSL_KEIL
177400         "adcs	r3, r3, %[r]\n\t"
177401 #elif defined(__clang__)
177402         "adcs	r3, %[r]\n\t"
177403 #else
177404         "adc	r3, %[r]\n\t"
177405 #endif
177406 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177407         "adds	r4, r4, r6\n\t"
177408 #else
177409         "add	r4, r4, r6\n\t"
177410 #endif
177411 #ifdef WOLFSSL_KEIL
177412         "adcs	r2, r2, %[r]\n\t"
177413 #elif defined(__clang__)
177414         "adcs	r2, %[r]\n\t"
177415 #else
177416         "adc	r2, %[r]\n\t"
177417 #endif
177418 #ifdef WOLFSSL_KEIL
177419         "adcs	r3, r3, %[r]\n\t"
177420 #elif defined(__clang__)
177421         "adcs	r3, %[r]\n\t"
177422 #else
177423         "adc	r3, %[r]\n\t"
177424 #endif
177425 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177426         "lsrs	r6, r7, #16\n\t"
177427 #else
177428         "lsr	r6, r7, #16\n\t"
177429 #endif
177430 #ifdef WOLFSSL_KEIL
177431         "muls	r5, r6, r5\n\t"
177432 #elif defined(__clang__)
177433         "muls	r5, r6\n\t"
177434 #else
177435         "mul	r5, r6\n\t"
177436 #endif
177437 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177438         "lsrs	r6, r5, #16\n\t"
177439 #else
177440         "lsr	r6, r5, #16\n\t"
177441 #endif
177442 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177443         "lsls	r5, r5, #16\n\t"
177444 #else
177445         "lsl	r5, r5, #16\n\t"
177446 #endif
177447 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177448         "adds	r4, r4, r5\n\t"
177449 #else
177450         "add	r4, r4, r5\n\t"
177451 #endif
177452 #ifdef WOLFSSL_KEIL
177453         "adcs	r2, r2, r6\n\t"
177454 #elif defined(__clang__)
177455         "adcs	r2, r6\n\t"
177456 #else
177457         "adc	r2, r6\n\t"
177458 #endif
177459 #ifdef WOLFSSL_KEIL
177460         "adcs	r3, r3, %[r]\n\t"
177461 #elif defined(__clang__)
177462         "adcs	r3, %[r]\n\t"
177463 #else
177464         "adc	r3, %[r]\n\t"
177465 #endif
177466 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177467         "adds	r4, r4, r5\n\t"
177468 #else
177469         "add	r4, r4, r5\n\t"
177470 #endif
177471 #ifdef WOLFSSL_KEIL
177472         "adcs	r2, r2, r6\n\t"
177473 #elif defined(__clang__)
177474         "adcs	r2, r6\n\t"
177475 #else
177476         "adc	r2, r6\n\t"
177477 #endif
177478 #ifdef WOLFSSL_KEIL
177479         "adcs	r3, r3, %[r]\n\t"
177480 #elif defined(__clang__)
177481         "adcs	r3, %[r]\n\t"
177482 #else
177483         "adc	r3, %[r]\n\t"
177484 #endif
177485 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177486         "lsrs	r5, %[a], #16\n\t"
177487 #else
177488         "lsr	r5, %[a], #16\n\t"
177489 #endif
177490 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177491         "lsrs	r6, r7, #16\n\t"
177492 #else
177493         "lsr	r6, r7, #16\n\t"
177494 #endif
177495 #ifdef WOLFSSL_KEIL
177496         "muls	r6, r5, r6\n\t"
177497 #elif defined(__clang__)
177498         "muls	r6, r5\n\t"
177499 #else
177500         "mul	r6, r5\n\t"
177501 #endif
177502 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177503         "adds	r2, r2, r6\n\t"
177504 #else
177505         "add	r2, r2, r6\n\t"
177506 #endif
177507 #ifdef WOLFSSL_KEIL
177508         "adcs	r3, r3, %[r]\n\t"
177509 #elif defined(__clang__)
177510         "adcs	r3, %[r]\n\t"
177511 #else
177512         "adc	r3, %[r]\n\t"
177513 #endif
177514 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177515         "adds	r2, r2, r6\n\t"
177516 #else
177517         "add	r2, r2, r6\n\t"
177518 #endif
177519 #ifdef WOLFSSL_KEIL
177520         "adcs	r3, r3, %[r]\n\t"
177521 #elif defined(__clang__)
177522         "adcs	r3, %[r]\n\t"
177523 #else
177524         "adc	r3, %[r]\n\t"
177525 #endif
177526         "uxth	r6, r7\n\t"
177527 #ifdef WOLFSSL_KEIL
177528         "muls	r5, r6, r5\n\t"
177529 #elif defined(__clang__)
177530         "muls	r5, r6\n\t"
177531 #else
177532         "mul	r5, r6\n\t"
177533 #endif
177534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177535         "lsrs	r6, r5, #16\n\t"
177536 #else
177537         "lsr	r6, r5, #16\n\t"
177538 #endif
177539 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177540         "lsls	r5, r5, #16\n\t"
177541 #else
177542         "lsl	r5, r5, #16\n\t"
177543 #endif
177544 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177545         "adds	r4, r4, r5\n\t"
177546 #else
177547         "add	r4, r4, r5\n\t"
177548 #endif
177549 #ifdef WOLFSSL_KEIL
177550         "adcs	r2, r2, r6\n\t"
177551 #elif defined(__clang__)
177552         "adcs	r2, r6\n\t"
177553 #else
177554         "adc	r2, r6\n\t"
177555 #endif
177556 #ifdef WOLFSSL_KEIL
177557         "adcs	r3, r3, %[r]\n\t"
177558 #elif defined(__clang__)
177559         "adcs	r3, %[r]\n\t"
177560 #else
177561         "adc	r3, %[r]\n\t"
177562 #endif
177563 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177564         "adds	r4, r4, r5\n\t"
177565 #else
177566         "add	r4, r4, r5\n\t"
177567 #endif
177568 #ifdef WOLFSSL_KEIL
177569         "adcs	r2, r2, r6\n\t"
177570 #elif defined(__clang__)
177571         "adcs	r2, r6\n\t"
177572 #else
177573         "adc	r2, r6\n\t"
177574 #endif
177575 #ifdef WOLFSSL_KEIL
177576         "adcs	r3, r3, %[r]\n\t"
177577 #elif defined(__clang__)
177578         "adcs	r3, %[r]\n\t"
177579 #else
177580         "adc	r3, %[r]\n\t"
177581 #endif
177582         "#  A[14] * A[9]\n\t"
177583         "mov	%[a], r9\n\t"
177584         "ldr	r7, [%[a], #36]\n\t"
177585         "mov	%[a], r12\n\t"
177586         "uxth	r5, %[a]\n\t"
177587         "uxth	r6, r7\n\t"
177588 #ifdef WOLFSSL_KEIL
177589         "muls	r6, r5, r6\n\t"
177590 #elif defined(__clang__)
177591         "muls	r6, r5\n\t"
177592 #else
177593         "mul	r6, r5\n\t"
177594 #endif
177595 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177596         "adds	r4, r4, r6\n\t"
177597 #else
177598         "add	r4, r4, r6\n\t"
177599 #endif
177600 #ifdef WOLFSSL_KEIL
177601         "adcs	r2, r2, %[r]\n\t"
177602 #elif defined(__clang__)
177603         "adcs	r2, %[r]\n\t"
177604 #else
177605         "adc	r2, %[r]\n\t"
177606 #endif
177607 #ifdef WOLFSSL_KEIL
177608         "adcs	r3, r3, %[r]\n\t"
177609 #elif defined(__clang__)
177610         "adcs	r3, %[r]\n\t"
177611 #else
177612         "adc	r3, %[r]\n\t"
177613 #endif
177614 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177615         "adds	r4, r4, r6\n\t"
177616 #else
177617         "add	r4, r4, r6\n\t"
177618 #endif
177619 #ifdef WOLFSSL_KEIL
177620         "adcs	r2, r2, %[r]\n\t"
177621 #elif defined(__clang__)
177622         "adcs	r2, %[r]\n\t"
177623 #else
177624         "adc	r2, %[r]\n\t"
177625 #endif
177626 #ifdef WOLFSSL_KEIL
177627         "adcs	r3, r3, %[r]\n\t"
177628 #elif defined(__clang__)
177629         "adcs	r3, %[r]\n\t"
177630 #else
177631         "adc	r3, %[r]\n\t"
177632 #endif
177633 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177634         "lsrs	r6, r7, #16\n\t"
177635 #else
177636         "lsr	r6, r7, #16\n\t"
177637 #endif
177638 #ifdef WOLFSSL_KEIL
177639         "muls	r5, r6, r5\n\t"
177640 #elif defined(__clang__)
177641         "muls	r5, r6\n\t"
177642 #else
177643         "mul	r5, r6\n\t"
177644 #endif
177645 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177646         "lsrs	r6, r5, #16\n\t"
177647 #else
177648         "lsr	r6, r5, #16\n\t"
177649 #endif
177650 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177651         "lsls	r5, r5, #16\n\t"
177652 #else
177653         "lsl	r5, r5, #16\n\t"
177654 #endif
177655 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177656         "adds	r4, r4, r5\n\t"
177657 #else
177658         "add	r4, r4, r5\n\t"
177659 #endif
177660 #ifdef WOLFSSL_KEIL
177661         "adcs	r2, r2, r6\n\t"
177662 #elif defined(__clang__)
177663         "adcs	r2, r6\n\t"
177664 #else
177665         "adc	r2, r6\n\t"
177666 #endif
177667 #ifdef WOLFSSL_KEIL
177668         "adcs	r3, r3, %[r]\n\t"
177669 #elif defined(__clang__)
177670         "adcs	r3, %[r]\n\t"
177671 #else
177672         "adc	r3, %[r]\n\t"
177673 #endif
177674 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177675         "adds	r4, r4, r5\n\t"
177676 #else
177677         "add	r4, r4, r5\n\t"
177678 #endif
177679 #ifdef WOLFSSL_KEIL
177680         "adcs	r2, r2, r6\n\t"
177681 #elif defined(__clang__)
177682         "adcs	r2, r6\n\t"
177683 #else
177684         "adc	r2, r6\n\t"
177685 #endif
177686 #ifdef WOLFSSL_KEIL
177687         "adcs	r3, r3, %[r]\n\t"
177688 #elif defined(__clang__)
177689         "adcs	r3, %[r]\n\t"
177690 #else
177691         "adc	r3, %[r]\n\t"
177692 #endif
177693 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177694         "lsrs	r5, %[a], #16\n\t"
177695 #else
177696         "lsr	r5, %[a], #16\n\t"
177697 #endif
177698 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177699         "lsrs	r6, r7, #16\n\t"
177700 #else
177701         "lsr	r6, r7, #16\n\t"
177702 #endif
177703 #ifdef WOLFSSL_KEIL
177704         "muls	r6, r5, r6\n\t"
177705 #elif defined(__clang__)
177706         "muls	r6, r5\n\t"
177707 #else
177708         "mul	r6, r5\n\t"
177709 #endif
177710 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177711         "adds	r2, r2, r6\n\t"
177712 #else
177713         "add	r2, r2, r6\n\t"
177714 #endif
177715 #ifdef WOLFSSL_KEIL
177716         "adcs	r3, r3, %[r]\n\t"
177717 #elif defined(__clang__)
177718         "adcs	r3, %[r]\n\t"
177719 #else
177720         "adc	r3, %[r]\n\t"
177721 #endif
177722 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177723         "adds	r2, r2, r6\n\t"
177724 #else
177725         "add	r2, r2, r6\n\t"
177726 #endif
177727 #ifdef WOLFSSL_KEIL
177728         "adcs	r3, r3, %[r]\n\t"
177729 #elif defined(__clang__)
177730         "adcs	r3, %[r]\n\t"
177731 #else
177732         "adc	r3, %[r]\n\t"
177733 #endif
177734         "uxth	r6, r7\n\t"
177735 #ifdef WOLFSSL_KEIL
177736         "muls	r5, r6, r5\n\t"
177737 #elif defined(__clang__)
177738         "muls	r5, r6\n\t"
177739 #else
177740         "mul	r5, r6\n\t"
177741 #endif
177742 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177743         "lsrs	r6, r5, #16\n\t"
177744 #else
177745         "lsr	r6, r5, #16\n\t"
177746 #endif
177747 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177748         "lsls	r5, r5, #16\n\t"
177749 #else
177750         "lsl	r5, r5, #16\n\t"
177751 #endif
177752 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177753         "adds	r4, r4, r5\n\t"
177754 #else
177755         "add	r4, r4, r5\n\t"
177756 #endif
177757 #ifdef WOLFSSL_KEIL
177758         "adcs	r2, r2, r6\n\t"
177759 #elif defined(__clang__)
177760         "adcs	r2, r6\n\t"
177761 #else
177762         "adc	r2, r6\n\t"
177763 #endif
177764 #ifdef WOLFSSL_KEIL
177765         "adcs	r3, r3, %[r]\n\t"
177766 #elif defined(__clang__)
177767         "adcs	r3, %[r]\n\t"
177768 #else
177769         "adc	r3, %[r]\n\t"
177770 #endif
177771 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177772         "adds	r4, r4, r5\n\t"
177773 #else
177774         "add	r4, r4, r5\n\t"
177775 #endif
177776 #ifdef WOLFSSL_KEIL
177777         "adcs	r2, r2, r6\n\t"
177778 #elif defined(__clang__)
177779         "adcs	r2, r6\n\t"
177780 #else
177781         "adc	r2, r6\n\t"
177782 #endif
177783 #ifdef WOLFSSL_KEIL
177784         "adcs	r3, r3, %[r]\n\t"
177785 #elif defined(__clang__)
177786         "adcs	r3, %[r]\n\t"
177787 #else
177788         "adc	r3, %[r]\n\t"
177789 #endif
177790         "#  A[15] * A[8]\n\t"
177791         "mov	%[a], r9\n\t"
177792         "ldr	r7, [%[a], #32]\n\t"
177793         "mov	%[a], lr\n\t"
177794         "uxth	r5, %[a]\n\t"
177795         "uxth	r6, r7\n\t"
177796 #ifdef WOLFSSL_KEIL
177797         "muls	r6, r5, r6\n\t"
177798 #elif defined(__clang__)
177799         "muls	r6, r5\n\t"
177800 #else
177801         "mul	r6, r5\n\t"
177802 #endif
177803 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177804         "adds	r4, r4, r6\n\t"
177805 #else
177806         "add	r4, r4, r6\n\t"
177807 #endif
177808 #ifdef WOLFSSL_KEIL
177809         "adcs	r2, r2, %[r]\n\t"
177810 #elif defined(__clang__)
177811         "adcs	r2, %[r]\n\t"
177812 #else
177813         "adc	r2, %[r]\n\t"
177814 #endif
177815 #ifdef WOLFSSL_KEIL
177816         "adcs	r3, r3, %[r]\n\t"
177817 #elif defined(__clang__)
177818         "adcs	r3, %[r]\n\t"
177819 #else
177820         "adc	r3, %[r]\n\t"
177821 #endif
177822 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177823         "adds	r4, r4, r6\n\t"
177824 #else
177825         "add	r4, r4, r6\n\t"
177826 #endif
177827 #ifdef WOLFSSL_KEIL
177828         "adcs	r2, r2, %[r]\n\t"
177829 #elif defined(__clang__)
177830         "adcs	r2, %[r]\n\t"
177831 #else
177832         "adc	r2, %[r]\n\t"
177833 #endif
177834 #ifdef WOLFSSL_KEIL
177835         "adcs	r3, r3, %[r]\n\t"
177836 #elif defined(__clang__)
177837         "adcs	r3, %[r]\n\t"
177838 #else
177839         "adc	r3, %[r]\n\t"
177840 #endif
177841 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177842         "lsrs	r6, r7, #16\n\t"
177843 #else
177844         "lsr	r6, r7, #16\n\t"
177845 #endif
177846 #ifdef WOLFSSL_KEIL
177847         "muls	r5, r6, r5\n\t"
177848 #elif defined(__clang__)
177849         "muls	r5, r6\n\t"
177850 #else
177851         "mul	r5, r6\n\t"
177852 #endif
177853 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177854         "lsrs	r6, r5, #16\n\t"
177855 #else
177856         "lsr	r6, r5, #16\n\t"
177857 #endif
177858 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177859         "lsls	r5, r5, #16\n\t"
177860 #else
177861         "lsl	r5, r5, #16\n\t"
177862 #endif
177863 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177864         "adds	r4, r4, r5\n\t"
177865 #else
177866         "add	r4, r4, r5\n\t"
177867 #endif
177868 #ifdef WOLFSSL_KEIL
177869         "adcs	r2, r2, r6\n\t"
177870 #elif defined(__clang__)
177871         "adcs	r2, r6\n\t"
177872 #else
177873         "adc	r2, r6\n\t"
177874 #endif
177875 #ifdef WOLFSSL_KEIL
177876         "adcs	r3, r3, %[r]\n\t"
177877 #elif defined(__clang__)
177878         "adcs	r3, %[r]\n\t"
177879 #else
177880         "adc	r3, %[r]\n\t"
177881 #endif
177882 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177883         "adds	r4, r4, r5\n\t"
177884 #else
177885         "add	r4, r4, r5\n\t"
177886 #endif
177887 #ifdef WOLFSSL_KEIL
177888         "adcs	r2, r2, r6\n\t"
177889 #elif defined(__clang__)
177890         "adcs	r2, r6\n\t"
177891 #else
177892         "adc	r2, r6\n\t"
177893 #endif
177894 #ifdef WOLFSSL_KEIL
177895         "adcs	r3, r3, %[r]\n\t"
177896 #elif defined(__clang__)
177897         "adcs	r3, %[r]\n\t"
177898 #else
177899         "adc	r3, %[r]\n\t"
177900 #endif
177901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177902         "lsrs	r5, %[a], #16\n\t"
177903 #else
177904         "lsr	r5, %[a], #16\n\t"
177905 #endif
177906 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177907         "lsrs	r6, r7, #16\n\t"
177908 #else
177909         "lsr	r6, r7, #16\n\t"
177910 #endif
177911 #ifdef WOLFSSL_KEIL
177912         "muls	r6, r5, r6\n\t"
177913 #elif defined(__clang__)
177914         "muls	r6, r5\n\t"
177915 #else
177916         "mul	r6, r5\n\t"
177917 #endif
177918 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177919         "adds	r2, r2, r6\n\t"
177920 #else
177921         "add	r2, r2, r6\n\t"
177922 #endif
177923 #ifdef WOLFSSL_KEIL
177924         "adcs	r3, r3, %[r]\n\t"
177925 #elif defined(__clang__)
177926         "adcs	r3, %[r]\n\t"
177927 #else
177928         "adc	r3, %[r]\n\t"
177929 #endif
177930 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177931         "adds	r2, r2, r6\n\t"
177932 #else
177933         "add	r2, r2, r6\n\t"
177934 #endif
177935 #ifdef WOLFSSL_KEIL
177936         "adcs	r3, r3, %[r]\n\t"
177937 #elif defined(__clang__)
177938         "adcs	r3, %[r]\n\t"
177939 #else
177940         "adc	r3, %[r]\n\t"
177941 #endif
177942         "uxth	r6, r7\n\t"
177943 #ifdef WOLFSSL_KEIL
177944         "muls	r5, r6, r5\n\t"
177945 #elif defined(__clang__)
177946         "muls	r5, r6\n\t"
177947 #else
177948         "mul	r5, r6\n\t"
177949 #endif
177950 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177951         "lsrs	r6, r5, #16\n\t"
177952 #else
177953         "lsr	r6, r5, #16\n\t"
177954 #endif
177955 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177956         "lsls	r5, r5, #16\n\t"
177957 #else
177958         "lsl	r5, r5, #16\n\t"
177959 #endif
177960 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177961         "adds	r4, r4, r5\n\t"
177962 #else
177963         "add	r4, r4, r5\n\t"
177964 #endif
177965 #ifdef WOLFSSL_KEIL
177966         "adcs	r2, r2, r6\n\t"
177967 #elif defined(__clang__)
177968         "adcs	r2, r6\n\t"
177969 #else
177970         "adc	r2, r6\n\t"
177971 #endif
177972 #ifdef WOLFSSL_KEIL
177973         "adcs	r3, r3, %[r]\n\t"
177974 #elif defined(__clang__)
177975         "adcs	r3, %[r]\n\t"
177976 #else
177977         "adc	r3, %[r]\n\t"
177978 #endif
177979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
177980         "adds	r4, r4, r5\n\t"
177981 #else
177982         "add	r4, r4, r5\n\t"
177983 #endif
177984 #ifdef WOLFSSL_KEIL
177985         "adcs	r2, r2, r6\n\t"
177986 #elif defined(__clang__)
177987         "adcs	r2, r6\n\t"
177988 #else
177989         "adc	r2, r6\n\t"
177990 #endif
177991 #ifdef WOLFSSL_KEIL
177992         "adcs	r3, r3, %[r]\n\t"
177993 #elif defined(__clang__)
177994         "adcs	r3, %[r]\n\t"
177995 #else
177996         "adc	r3, %[r]\n\t"
177997 #endif
177998         "mov	%[r], r8\n\t"
177999         "str	r4, [%[r], #92]\n\t"
178000         "movs	%[r], #0\n\t"
178001         "#  A[15] * A[9]\n\t"
178002         "movs	r4, #0\n\t"
178003         "mov	%[a], r9\n\t"
178004         "ldr	r7, [%[a], #36]\n\t"
178005         "mov	%[a], lr\n\t"
178006         "uxth	r5, %[a]\n\t"
178007         "uxth	r6, r7\n\t"
178008 #ifdef WOLFSSL_KEIL
178009         "muls	r6, r5, r6\n\t"
178010 #elif defined(__clang__)
178011         "muls	r6, r5\n\t"
178012 #else
178013         "mul	r6, r5\n\t"
178014 #endif
178015 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178016         "adds	r2, r2, r6\n\t"
178017 #else
178018         "add	r2, r2, r6\n\t"
178019 #endif
178020 #ifdef WOLFSSL_KEIL
178021         "adcs	r3, r3, %[r]\n\t"
178022 #elif defined(__clang__)
178023         "adcs	r3, %[r]\n\t"
178024 #else
178025         "adc	r3, %[r]\n\t"
178026 #endif
178027 #ifdef WOLFSSL_KEIL
178028         "adcs	r4, r4, %[r]\n\t"
178029 #elif defined(__clang__)
178030         "adcs	r4, %[r]\n\t"
178031 #else
178032         "adc	r4, %[r]\n\t"
178033 #endif
178034 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178035         "adds	r2, r2, r6\n\t"
178036 #else
178037         "add	r2, r2, r6\n\t"
178038 #endif
178039 #ifdef WOLFSSL_KEIL
178040         "adcs	r3, r3, %[r]\n\t"
178041 #elif defined(__clang__)
178042         "adcs	r3, %[r]\n\t"
178043 #else
178044         "adc	r3, %[r]\n\t"
178045 #endif
178046 #ifdef WOLFSSL_KEIL
178047         "adcs	r4, r4, %[r]\n\t"
178048 #elif defined(__clang__)
178049         "adcs	r4, %[r]\n\t"
178050 #else
178051         "adc	r4, %[r]\n\t"
178052 #endif
178053 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178054         "lsrs	r6, r7, #16\n\t"
178055 #else
178056         "lsr	r6, r7, #16\n\t"
178057 #endif
178058 #ifdef WOLFSSL_KEIL
178059         "muls	r5, r6, r5\n\t"
178060 #elif defined(__clang__)
178061         "muls	r5, r6\n\t"
178062 #else
178063         "mul	r5, r6\n\t"
178064 #endif
178065 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178066         "lsrs	r6, r5, #16\n\t"
178067 #else
178068         "lsr	r6, r5, #16\n\t"
178069 #endif
178070 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178071         "lsls	r5, r5, #16\n\t"
178072 #else
178073         "lsl	r5, r5, #16\n\t"
178074 #endif
178075 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178076         "adds	r2, r2, r5\n\t"
178077 #else
178078         "add	r2, r2, r5\n\t"
178079 #endif
178080 #ifdef WOLFSSL_KEIL
178081         "adcs	r3, r3, r6\n\t"
178082 #elif defined(__clang__)
178083         "adcs	r3, r6\n\t"
178084 #else
178085         "adc	r3, r6\n\t"
178086 #endif
178087 #ifdef WOLFSSL_KEIL
178088         "adcs	r4, r4, %[r]\n\t"
178089 #elif defined(__clang__)
178090         "adcs	r4, %[r]\n\t"
178091 #else
178092         "adc	r4, %[r]\n\t"
178093 #endif
178094 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178095         "adds	r2, r2, r5\n\t"
178096 #else
178097         "add	r2, r2, r5\n\t"
178098 #endif
178099 #ifdef WOLFSSL_KEIL
178100         "adcs	r3, r3, r6\n\t"
178101 #elif defined(__clang__)
178102         "adcs	r3, r6\n\t"
178103 #else
178104         "adc	r3, r6\n\t"
178105 #endif
178106 #ifdef WOLFSSL_KEIL
178107         "adcs	r4, r4, %[r]\n\t"
178108 #elif defined(__clang__)
178109         "adcs	r4, %[r]\n\t"
178110 #else
178111         "adc	r4, %[r]\n\t"
178112 #endif
178113 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178114         "lsrs	r5, %[a], #16\n\t"
178115 #else
178116         "lsr	r5, %[a], #16\n\t"
178117 #endif
178118 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178119         "lsrs	r6, r7, #16\n\t"
178120 #else
178121         "lsr	r6, r7, #16\n\t"
178122 #endif
178123 #ifdef WOLFSSL_KEIL
178124         "muls	r6, r5, r6\n\t"
178125 #elif defined(__clang__)
178126         "muls	r6, r5\n\t"
178127 #else
178128         "mul	r6, r5\n\t"
178129 #endif
178130 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178131         "adds	r3, r3, r6\n\t"
178132 #else
178133         "add	r3, r3, r6\n\t"
178134 #endif
178135 #ifdef WOLFSSL_KEIL
178136         "adcs	r4, r4, %[r]\n\t"
178137 #elif defined(__clang__)
178138         "adcs	r4, %[r]\n\t"
178139 #else
178140         "adc	r4, %[r]\n\t"
178141 #endif
178142 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178143         "adds	r3, r3, r6\n\t"
178144 #else
178145         "add	r3, r3, r6\n\t"
178146 #endif
178147 #ifdef WOLFSSL_KEIL
178148         "adcs	r4, r4, %[r]\n\t"
178149 #elif defined(__clang__)
178150         "adcs	r4, %[r]\n\t"
178151 #else
178152         "adc	r4, %[r]\n\t"
178153 #endif
178154         "uxth	r6, r7\n\t"
178155 #ifdef WOLFSSL_KEIL
178156         "muls	r5, r6, r5\n\t"
178157 #elif defined(__clang__)
178158         "muls	r5, r6\n\t"
178159 #else
178160         "mul	r5, r6\n\t"
178161 #endif
178162 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178163         "lsrs	r6, r5, #16\n\t"
178164 #else
178165         "lsr	r6, r5, #16\n\t"
178166 #endif
178167 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178168         "lsls	r5, r5, #16\n\t"
178169 #else
178170         "lsl	r5, r5, #16\n\t"
178171 #endif
178172 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178173         "adds	r2, r2, r5\n\t"
178174 #else
178175         "add	r2, r2, r5\n\t"
178176 #endif
178177 #ifdef WOLFSSL_KEIL
178178         "adcs	r3, r3, r6\n\t"
178179 #elif defined(__clang__)
178180         "adcs	r3, r6\n\t"
178181 #else
178182         "adc	r3, r6\n\t"
178183 #endif
178184 #ifdef WOLFSSL_KEIL
178185         "adcs	r4, r4, %[r]\n\t"
178186 #elif defined(__clang__)
178187         "adcs	r4, %[r]\n\t"
178188 #else
178189         "adc	r4, %[r]\n\t"
178190 #endif
178191 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178192         "adds	r2, r2, r5\n\t"
178193 #else
178194         "add	r2, r2, r5\n\t"
178195 #endif
178196 #ifdef WOLFSSL_KEIL
178197         "adcs	r3, r3, r6\n\t"
178198 #elif defined(__clang__)
178199         "adcs	r3, r6\n\t"
178200 #else
178201         "adc	r3, r6\n\t"
178202 #endif
178203 #ifdef WOLFSSL_KEIL
178204         "adcs	r4, r4, %[r]\n\t"
178205 #elif defined(__clang__)
178206         "adcs	r4, %[r]\n\t"
178207 #else
178208         "adc	r4, %[r]\n\t"
178209 #endif
178210         "#  A[14] * A[10]\n\t"
178211         "mov	%[a], r9\n\t"
178212         "ldr	r7, [%[a], #40]\n\t"
178213         "mov	%[a], r12\n\t"
178214         "uxth	r5, %[a]\n\t"
178215         "uxth	r6, r7\n\t"
178216 #ifdef WOLFSSL_KEIL
178217         "muls	r6, r5, r6\n\t"
178218 #elif defined(__clang__)
178219         "muls	r6, r5\n\t"
178220 #else
178221         "mul	r6, r5\n\t"
178222 #endif
178223 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178224         "adds	r2, r2, r6\n\t"
178225 #else
178226         "add	r2, r2, r6\n\t"
178227 #endif
178228 #ifdef WOLFSSL_KEIL
178229         "adcs	r3, r3, %[r]\n\t"
178230 #elif defined(__clang__)
178231         "adcs	r3, %[r]\n\t"
178232 #else
178233         "adc	r3, %[r]\n\t"
178234 #endif
178235 #ifdef WOLFSSL_KEIL
178236         "adcs	r4, r4, %[r]\n\t"
178237 #elif defined(__clang__)
178238         "adcs	r4, %[r]\n\t"
178239 #else
178240         "adc	r4, %[r]\n\t"
178241 #endif
178242 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178243         "adds	r2, r2, r6\n\t"
178244 #else
178245         "add	r2, r2, r6\n\t"
178246 #endif
178247 #ifdef WOLFSSL_KEIL
178248         "adcs	r3, r3, %[r]\n\t"
178249 #elif defined(__clang__)
178250         "adcs	r3, %[r]\n\t"
178251 #else
178252         "adc	r3, %[r]\n\t"
178253 #endif
178254 #ifdef WOLFSSL_KEIL
178255         "adcs	r4, r4, %[r]\n\t"
178256 #elif defined(__clang__)
178257         "adcs	r4, %[r]\n\t"
178258 #else
178259         "adc	r4, %[r]\n\t"
178260 #endif
178261 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178262         "lsrs	r6, r7, #16\n\t"
178263 #else
178264         "lsr	r6, r7, #16\n\t"
178265 #endif
178266 #ifdef WOLFSSL_KEIL
178267         "muls	r5, r6, r5\n\t"
178268 #elif defined(__clang__)
178269         "muls	r5, r6\n\t"
178270 #else
178271         "mul	r5, r6\n\t"
178272 #endif
178273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178274         "lsrs	r6, r5, #16\n\t"
178275 #else
178276         "lsr	r6, r5, #16\n\t"
178277 #endif
178278 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178279         "lsls	r5, r5, #16\n\t"
178280 #else
178281         "lsl	r5, r5, #16\n\t"
178282 #endif
178283 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178284         "adds	r2, r2, r5\n\t"
178285 #else
178286         "add	r2, r2, r5\n\t"
178287 #endif
178288 #ifdef WOLFSSL_KEIL
178289         "adcs	r3, r3, r6\n\t"
178290 #elif defined(__clang__)
178291         "adcs	r3, r6\n\t"
178292 #else
178293         "adc	r3, r6\n\t"
178294 #endif
178295 #ifdef WOLFSSL_KEIL
178296         "adcs	r4, r4, %[r]\n\t"
178297 #elif defined(__clang__)
178298         "adcs	r4, %[r]\n\t"
178299 #else
178300         "adc	r4, %[r]\n\t"
178301 #endif
178302 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178303         "adds	r2, r2, r5\n\t"
178304 #else
178305         "add	r2, r2, r5\n\t"
178306 #endif
178307 #ifdef WOLFSSL_KEIL
178308         "adcs	r3, r3, r6\n\t"
178309 #elif defined(__clang__)
178310         "adcs	r3, r6\n\t"
178311 #else
178312         "adc	r3, r6\n\t"
178313 #endif
178314 #ifdef WOLFSSL_KEIL
178315         "adcs	r4, r4, %[r]\n\t"
178316 #elif defined(__clang__)
178317         "adcs	r4, %[r]\n\t"
178318 #else
178319         "adc	r4, %[r]\n\t"
178320 #endif
178321 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178322         "lsrs	r5, %[a], #16\n\t"
178323 #else
178324         "lsr	r5, %[a], #16\n\t"
178325 #endif
178326 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178327         "lsrs	r6, r7, #16\n\t"
178328 #else
178329         "lsr	r6, r7, #16\n\t"
178330 #endif
178331 #ifdef WOLFSSL_KEIL
178332         "muls	r6, r5, r6\n\t"
178333 #elif defined(__clang__)
178334         "muls	r6, r5\n\t"
178335 #else
178336         "mul	r6, r5\n\t"
178337 #endif
178338 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178339         "adds	r3, r3, r6\n\t"
178340 #else
178341         "add	r3, r3, r6\n\t"
178342 #endif
178343 #ifdef WOLFSSL_KEIL
178344         "adcs	r4, r4, %[r]\n\t"
178345 #elif defined(__clang__)
178346         "adcs	r4, %[r]\n\t"
178347 #else
178348         "adc	r4, %[r]\n\t"
178349 #endif
178350 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178351         "adds	r3, r3, r6\n\t"
178352 #else
178353         "add	r3, r3, r6\n\t"
178354 #endif
178355 #ifdef WOLFSSL_KEIL
178356         "adcs	r4, r4, %[r]\n\t"
178357 #elif defined(__clang__)
178358         "adcs	r4, %[r]\n\t"
178359 #else
178360         "adc	r4, %[r]\n\t"
178361 #endif
178362         "uxth	r6, r7\n\t"
178363 #ifdef WOLFSSL_KEIL
178364         "muls	r5, r6, r5\n\t"
178365 #elif defined(__clang__)
178366         "muls	r5, r6\n\t"
178367 #else
178368         "mul	r5, r6\n\t"
178369 #endif
178370 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178371         "lsrs	r6, r5, #16\n\t"
178372 #else
178373         "lsr	r6, r5, #16\n\t"
178374 #endif
178375 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178376         "lsls	r5, r5, #16\n\t"
178377 #else
178378         "lsl	r5, r5, #16\n\t"
178379 #endif
178380 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178381         "adds	r2, r2, r5\n\t"
178382 #else
178383         "add	r2, r2, r5\n\t"
178384 #endif
178385 #ifdef WOLFSSL_KEIL
178386         "adcs	r3, r3, r6\n\t"
178387 #elif defined(__clang__)
178388         "adcs	r3, r6\n\t"
178389 #else
178390         "adc	r3, r6\n\t"
178391 #endif
178392 #ifdef WOLFSSL_KEIL
178393         "adcs	r4, r4, %[r]\n\t"
178394 #elif defined(__clang__)
178395         "adcs	r4, %[r]\n\t"
178396 #else
178397         "adc	r4, %[r]\n\t"
178398 #endif
178399 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178400         "adds	r2, r2, r5\n\t"
178401 #else
178402         "add	r2, r2, r5\n\t"
178403 #endif
178404 #ifdef WOLFSSL_KEIL
178405         "adcs	r3, r3, r6\n\t"
178406 #elif defined(__clang__)
178407         "adcs	r3, r6\n\t"
178408 #else
178409         "adc	r3, r6\n\t"
178410 #endif
178411 #ifdef WOLFSSL_KEIL
178412         "adcs	r4, r4, %[r]\n\t"
178413 #elif defined(__clang__)
178414         "adcs	r4, %[r]\n\t"
178415 #else
178416         "adc	r4, %[r]\n\t"
178417 #endif
178418         "#  A[13] * A[11]\n\t"
178419         "mov	%[a], r9\n\t"
178420         "ldr	r7, [%[a], #44]\n\t"
178421         "mov	%[a], r11\n\t"
178422         "uxth	r5, %[a]\n\t"
178423         "uxth	r6, r7\n\t"
178424 #ifdef WOLFSSL_KEIL
178425         "muls	r6, r5, r6\n\t"
178426 #elif defined(__clang__)
178427         "muls	r6, r5\n\t"
178428 #else
178429         "mul	r6, r5\n\t"
178430 #endif
178431 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178432         "adds	r2, r2, r6\n\t"
178433 #else
178434         "add	r2, r2, r6\n\t"
178435 #endif
178436 #ifdef WOLFSSL_KEIL
178437         "adcs	r3, r3, %[r]\n\t"
178438 #elif defined(__clang__)
178439         "adcs	r3, %[r]\n\t"
178440 #else
178441         "adc	r3, %[r]\n\t"
178442 #endif
178443 #ifdef WOLFSSL_KEIL
178444         "adcs	r4, r4, %[r]\n\t"
178445 #elif defined(__clang__)
178446         "adcs	r4, %[r]\n\t"
178447 #else
178448         "adc	r4, %[r]\n\t"
178449 #endif
178450 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178451         "adds	r2, r2, r6\n\t"
178452 #else
178453         "add	r2, r2, r6\n\t"
178454 #endif
178455 #ifdef WOLFSSL_KEIL
178456         "adcs	r3, r3, %[r]\n\t"
178457 #elif defined(__clang__)
178458         "adcs	r3, %[r]\n\t"
178459 #else
178460         "adc	r3, %[r]\n\t"
178461 #endif
178462 #ifdef WOLFSSL_KEIL
178463         "adcs	r4, r4, %[r]\n\t"
178464 #elif defined(__clang__)
178465         "adcs	r4, %[r]\n\t"
178466 #else
178467         "adc	r4, %[r]\n\t"
178468 #endif
178469 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178470         "lsrs	r6, r7, #16\n\t"
178471 #else
178472         "lsr	r6, r7, #16\n\t"
178473 #endif
178474 #ifdef WOLFSSL_KEIL
178475         "muls	r5, r6, r5\n\t"
178476 #elif defined(__clang__)
178477         "muls	r5, r6\n\t"
178478 #else
178479         "mul	r5, r6\n\t"
178480 #endif
178481 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178482         "lsrs	r6, r5, #16\n\t"
178483 #else
178484         "lsr	r6, r5, #16\n\t"
178485 #endif
178486 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178487         "lsls	r5, r5, #16\n\t"
178488 #else
178489         "lsl	r5, r5, #16\n\t"
178490 #endif
178491 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178492         "adds	r2, r2, r5\n\t"
178493 #else
178494         "add	r2, r2, r5\n\t"
178495 #endif
178496 #ifdef WOLFSSL_KEIL
178497         "adcs	r3, r3, r6\n\t"
178498 #elif defined(__clang__)
178499         "adcs	r3, r6\n\t"
178500 #else
178501         "adc	r3, r6\n\t"
178502 #endif
178503 #ifdef WOLFSSL_KEIL
178504         "adcs	r4, r4, %[r]\n\t"
178505 #elif defined(__clang__)
178506         "adcs	r4, %[r]\n\t"
178507 #else
178508         "adc	r4, %[r]\n\t"
178509 #endif
178510 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178511         "adds	r2, r2, r5\n\t"
178512 #else
178513         "add	r2, r2, r5\n\t"
178514 #endif
178515 #ifdef WOLFSSL_KEIL
178516         "adcs	r3, r3, r6\n\t"
178517 #elif defined(__clang__)
178518         "adcs	r3, r6\n\t"
178519 #else
178520         "adc	r3, r6\n\t"
178521 #endif
178522 #ifdef WOLFSSL_KEIL
178523         "adcs	r4, r4, %[r]\n\t"
178524 #elif defined(__clang__)
178525         "adcs	r4, %[r]\n\t"
178526 #else
178527         "adc	r4, %[r]\n\t"
178528 #endif
178529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178530         "lsrs	r5, %[a], #16\n\t"
178531 #else
178532         "lsr	r5, %[a], #16\n\t"
178533 #endif
178534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178535         "lsrs	r6, r7, #16\n\t"
178536 #else
178537         "lsr	r6, r7, #16\n\t"
178538 #endif
178539 #ifdef WOLFSSL_KEIL
178540         "muls	r6, r5, r6\n\t"
178541 #elif defined(__clang__)
178542         "muls	r6, r5\n\t"
178543 #else
178544         "mul	r6, r5\n\t"
178545 #endif
178546 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178547         "adds	r3, r3, r6\n\t"
178548 #else
178549         "add	r3, r3, r6\n\t"
178550 #endif
178551 #ifdef WOLFSSL_KEIL
178552         "adcs	r4, r4, %[r]\n\t"
178553 #elif defined(__clang__)
178554         "adcs	r4, %[r]\n\t"
178555 #else
178556         "adc	r4, %[r]\n\t"
178557 #endif
178558 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178559         "adds	r3, r3, r6\n\t"
178560 #else
178561         "add	r3, r3, r6\n\t"
178562 #endif
178563 #ifdef WOLFSSL_KEIL
178564         "adcs	r4, r4, %[r]\n\t"
178565 #elif defined(__clang__)
178566         "adcs	r4, %[r]\n\t"
178567 #else
178568         "adc	r4, %[r]\n\t"
178569 #endif
178570         "uxth	r6, r7\n\t"
178571 #ifdef WOLFSSL_KEIL
178572         "muls	r5, r6, r5\n\t"
178573 #elif defined(__clang__)
178574         "muls	r5, r6\n\t"
178575 #else
178576         "mul	r5, r6\n\t"
178577 #endif
178578 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178579         "lsrs	r6, r5, #16\n\t"
178580 #else
178581         "lsr	r6, r5, #16\n\t"
178582 #endif
178583 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178584         "lsls	r5, r5, #16\n\t"
178585 #else
178586         "lsl	r5, r5, #16\n\t"
178587 #endif
178588 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178589         "adds	r2, r2, r5\n\t"
178590 #else
178591         "add	r2, r2, r5\n\t"
178592 #endif
178593 #ifdef WOLFSSL_KEIL
178594         "adcs	r3, r3, r6\n\t"
178595 #elif defined(__clang__)
178596         "adcs	r3, r6\n\t"
178597 #else
178598         "adc	r3, r6\n\t"
178599 #endif
178600 #ifdef WOLFSSL_KEIL
178601         "adcs	r4, r4, %[r]\n\t"
178602 #elif defined(__clang__)
178603         "adcs	r4, %[r]\n\t"
178604 #else
178605         "adc	r4, %[r]\n\t"
178606 #endif
178607 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178608         "adds	r2, r2, r5\n\t"
178609 #else
178610         "add	r2, r2, r5\n\t"
178611 #endif
178612 #ifdef WOLFSSL_KEIL
178613         "adcs	r3, r3, r6\n\t"
178614 #elif defined(__clang__)
178615         "adcs	r3, r6\n\t"
178616 #else
178617         "adc	r3, r6\n\t"
178618 #endif
178619 #ifdef WOLFSSL_KEIL
178620         "adcs	r4, r4, %[r]\n\t"
178621 #elif defined(__clang__)
178622         "adcs	r4, %[r]\n\t"
178623 #else
178624         "adc	r4, %[r]\n\t"
178625 #endif
178626         "#  A[12] * A[12]\n\t"
178627         "mov	r7, r10\n\t"
178628 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178629         "lsrs	r6, r7, #16\n\t"
178630 #else
178631         "lsr	r6, r7, #16\n\t"
178632 #endif
178633         "uxth	r5, r7\n\t"
178634 #ifdef WOLFSSL_KEIL
178635         "muls	r5, r5, r5\n\t"
178636 #elif defined(__clang__)
178637         "muls	r5, r5\n\t"
178638 #else
178639         "mul	r5, r5\n\t"
178640 #endif
178641 #ifdef WOLFSSL_KEIL
178642         "muls	r6, r6, r6\n\t"
178643 #elif defined(__clang__)
178644         "muls	r6, r6\n\t"
178645 #else
178646         "mul	r6, r6\n\t"
178647 #endif
178648 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178649         "adds	r2, r2, r5\n\t"
178650 #else
178651         "add	r2, r2, r5\n\t"
178652 #endif
178653 #ifdef WOLFSSL_KEIL
178654         "adcs	r3, r3, r6\n\t"
178655 #elif defined(__clang__)
178656         "adcs	r3, r6\n\t"
178657 #else
178658         "adc	r3, r6\n\t"
178659 #endif
178660 #ifdef WOLFSSL_KEIL
178661         "adcs	r4, r4, %[r]\n\t"
178662 #elif defined(__clang__)
178663         "adcs	r4, %[r]\n\t"
178664 #else
178665         "adc	r4, %[r]\n\t"
178666 #endif
178667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178668         "lsrs	r6, r7, #16\n\t"
178669 #else
178670         "lsr	r6, r7, #16\n\t"
178671 #endif
178672         "uxth	r5, r7\n\t"
178673 #ifdef WOLFSSL_KEIL
178674         "muls	r5, r6, r5\n\t"
178675 #elif defined(__clang__)
178676         "muls	r5, r6\n\t"
178677 #else
178678         "mul	r5, r6\n\t"
178679 #endif
178680 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178681         "lsrs	r6, r5, #15\n\t"
178682 #else
178683         "lsr	r6, r5, #15\n\t"
178684 #endif
178685 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178686         "lsls	r5, r5, #17\n\t"
178687 #else
178688         "lsl	r5, r5, #17\n\t"
178689 #endif
178690 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178691         "adds	r2, r2, r5\n\t"
178692 #else
178693         "add	r2, r2, r5\n\t"
178694 #endif
178695 #ifdef WOLFSSL_KEIL
178696         "adcs	r3, r3, r6\n\t"
178697 #elif defined(__clang__)
178698         "adcs	r3, r6\n\t"
178699 #else
178700         "adc	r3, r6\n\t"
178701 #endif
178702 #ifdef WOLFSSL_KEIL
178703         "adcs	r4, r4, %[r]\n\t"
178704 #elif defined(__clang__)
178705         "adcs	r4, %[r]\n\t"
178706 #else
178707         "adc	r4, %[r]\n\t"
178708 #endif
178709         "mov	%[r], r8\n\t"
178710         "str	r2, [%[r], #96]\n\t"
178711         "movs	%[r], #0\n\t"
178712         "#  A[13] * A[12]\n\t"
178713         "movs	r2, #0\n\t"
178714         "mov	%[a], r9\n\t"
178715         "mov	%[a], r11\n\t"
178716         "uxth	r5, %[a]\n\t"
178717         "uxth	r6, r7\n\t"
178718 #ifdef WOLFSSL_KEIL
178719         "muls	r6, r5, r6\n\t"
178720 #elif defined(__clang__)
178721         "muls	r6, r5\n\t"
178722 #else
178723         "mul	r6, r5\n\t"
178724 #endif
178725 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178726         "adds	r3, r3, r6\n\t"
178727 #else
178728         "add	r3, r3, r6\n\t"
178729 #endif
178730 #ifdef WOLFSSL_KEIL
178731         "adcs	r4, r4, %[r]\n\t"
178732 #elif defined(__clang__)
178733         "adcs	r4, %[r]\n\t"
178734 #else
178735         "adc	r4, %[r]\n\t"
178736 #endif
178737 #ifdef WOLFSSL_KEIL
178738         "adcs	r2, r2, %[r]\n\t"
178739 #elif defined(__clang__)
178740         "adcs	r2, %[r]\n\t"
178741 #else
178742         "adc	r2, %[r]\n\t"
178743 #endif
178744 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178745         "adds	r3, r3, r6\n\t"
178746 #else
178747         "add	r3, r3, r6\n\t"
178748 #endif
178749 #ifdef WOLFSSL_KEIL
178750         "adcs	r4, r4, %[r]\n\t"
178751 #elif defined(__clang__)
178752         "adcs	r4, %[r]\n\t"
178753 #else
178754         "adc	r4, %[r]\n\t"
178755 #endif
178756 #ifdef WOLFSSL_KEIL
178757         "adcs	r2, r2, %[r]\n\t"
178758 #elif defined(__clang__)
178759         "adcs	r2, %[r]\n\t"
178760 #else
178761         "adc	r2, %[r]\n\t"
178762 #endif
178763 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178764         "lsrs	r6, r7, #16\n\t"
178765 #else
178766         "lsr	r6, r7, #16\n\t"
178767 #endif
178768 #ifdef WOLFSSL_KEIL
178769         "muls	r5, r6, r5\n\t"
178770 #elif defined(__clang__)
178771         "muls	r5, r6\n\t"
178772 #else
178773         "mul	r5, r6\n\t"
178774 #endif
178775 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178776         "lsrs	r6, r5, #16\n\t"
178777 #else
178778         "lsr	r6, r5, #16\n\t"
178779 #endif
178780 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178781         "lsls	r5, r5, #16\n\t"
178782 #else
178783         "lsl	r5, r5, #16\n\t"
178784 #endif
178785 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178786         "adds	r3, r3, r5\n\t"
178787 #else
178788         "add	r3, r3, r5\n\t"
178789 #endif
178790 #ifdef WOLFSSL_KEIL
178791         "adcs	r4, r4, r6\n\t"
178792 #elif defined(__clang__)
178793         "adcs	r4, r6\n\t"
178794 #else
178795         "adc	r4, r6\n\t"
178796 #endif
178797 #ifdef WOLFSSL_KEIL
178798         "adcs	r2, r2, %[r]\n\t"
178799 #elif defined(__clang__)
178800         "adcs	r2, %[r]\n\t"
178801 #else
178802         "adc	r2, %[r]\n\t"
178803 #endif
178804 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178805         "adds	r3, r3, r5\n\t"
178806 #else
178807         "add	r3, r3, r5\n\t"
178808 #endif
178809 #ifdef WOLFSSL_KEIL
178810         "adcs	r4, r4, r6\n\t"
178811 #elif defined(__clang__)
178812         "adcs	r4, r6\n\t"
178813 #else
178814         "adc	r4, r6\n\t"
178815 #endif
178816 #ifdef WOLFSSL_KEIL
178817         "adcs	r2, r2, %[r]\n\t"
178818 #elif defined(__clang__)
178819         "adcs	r2, %[r]\n\t"
178820 #else
178821         "adc	r2, %[r]\n\t"
178822 #endif
178823 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178824         "lsrs	r5, %[a], #16\n\t"
178825 #else
178826         "lsr	r5, %[a], #16\n\t"
178827 #endif
178828 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178829         "lsrs	r6, r7, #16\n\t"
178830 #else
178831         "lsr	r6, r7, #16\n\t"
178832 #endif
178833 #ifdef WOLFSSL_KEIL
178834         "muls	r6, r5, r6\n\t"
178835 #elif defined(__clang__)
178836         "muls	r6, r5\n\t"
178837 #else
178838         "mul	r6, r5\n\t"
178839 #endif
178840 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178841         "adds	r4, r4, r6\n\t"
178842 #else
178843         "add	r4, r4, r6\n\t"
178844 #endif
178845 #ifdef WOLFSSL_KEIL
178846         "adcs	r2, r2, %[r]\n\t"
178847 #elif defined(__clang__)
178848         "adcs	r2, %[r]\n\t"
178849 #else
178850         "adc	r2, %[r]\n\t"
178851 #endif
178852 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178853         "adds	r4, r4, r6\n\t"
178854 #else
178855         "add	r4, r4, r6\n\t"
178856 #endif
178857 #ifdef WOLFSSL_KEIL
178858         "adcs	r2, r2, %[r]\n\t"
178859 #elif defined(__clang__)
178860         "adcs	r2, %[r]\n\t"
178861 #else
178862         "adc	r2, %[r]\n\t"
178863 #endif
178864         "uxth	r6, r7\n\t"
178865 #ifdef WOLFSSL_KEIL
178866         "muls	r5, r6, r5\n\t"
178867 #elif defined(__clang__)
178868         "muls	r5, r6\n\t"
178869 #else
178870         "mul	r5, r6\n\t"
178871 #endif
178872 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178873         "lsrs	r6, r5, #16\n\t"
178874 #else
178875         "lsr	r6, r5, #16\n\t"
178876 #endif
178877 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178878         "lsls	r5, r5, #16\n\t"
178879 #else
178880         "lsl	r5, r5, #16\n\t"
178881 #endif
178882 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178883         "adds	r3, r3, r5\n\t"
178884 #else
178885         "add	r3, r3, r5\n\t"
178886 #endif
178887 #ifdef WOLFSSL_KEIL
178888         "adcs	r4, r4, r6\n\t"
178889 #elif defined(__clang__)
178890         "adcs	r4, r6\n\t"
178891 #else
178892         "adc	r4, r6\n\t"
178893 #endif
178894 #ifdef WOLFSSL_KEIL
178895         "adcs	r2, r2, %[r]\n\t"
178896 #elif defined(__clang__)
178897         "adcs	r2, %[r]\n\t"
178898 #else
178899         "adc	r2, %[r]\n\t"
178900 #endif
178901 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178902         "adds	r3, r3, r5\n\t"
178903 #else
178904         "add	r3, r3, r5\n\t"
178905 #endif
178906 #ifdef WOLFSSL_KEIL
178907         "adcs	r4, r4, r6\n\t"
178908 #elif defined(__clang__)
178909         "adcs	r4, r6\n\t"
178910 #else
178911         "adc	r4, r6\n\t"
178912 #endif
178913 #ifdef WOLFSSL_KEIL
178914         "adcs	r2, r2, %[r]\n\t"
178915 #elif defined(__clang__)
178916         "adcs	r2, %[r]\n\t"
178917 #else
178918         "adc	r2, %[r]\n\t"
178919 #endif
178920         "#  A[14] * A[11]\n\t"
178921         "mov	%[a], r9\n\t"
178922         "ldr	r7, [%[a], #44]\n\t"
178923         "mov	%[a], r12\n\t"
178924         "uxth	r5, %[a]\n\t"
178925         "uxth	r6, r7\n\t"
178926 #ifdef WOLFSSL_KEIL
178927         "muls	r6, r5, r6\n\t"
178928 #elif defined(__clang__)
178929         "muls	r6, r5\n\t"
178930 #else
178931         "mul	r6, r5\n\t"
178932 #endif
178933 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178934         "adds	r3, r3, r6\n\t"
178935 #else
178936         "add	r3, r3, r6\n\t"
178937 #endif
178938 #ifdef WOLFSSL_KEIL
178939         "adcs	r4, r4, %[r]\n\t"
178940 #elif defined(__clang__)
178941         "adcs	r4, %[r]\n\t"
178942 #else
178943         "adc	r4, %[r]\n\t"
178944 #endif
178945 #ifdef WOLFSSL_KEIL
178946         "adcs	r2, r2, %[r]\n\t"
178947 #elif defined(__clang__)
178948         "adcs	r2, %[r]\n\t"
178949 #else
178950         "adc	r2, %[r]\n\t"
178951 #endif
178952 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178953         "adds	r3, r3, r6\n\t"
178954 #else
178955         "add	r3, r3, r6\n\t"
178956 #endif
178957 #ifdef WOLFSSL_KEIL
178958         "adcs	r4, r4, %[r]\n\t"
178959 #elif defined(__clang__)
178960         "adcs	r4, %[r]\n\t"
178961 #else
178962         "adc	r4, %[r]\n\t"
178963 #endif
178964 #ifdef WOLFSSL_KEIL
178965         "adcs	r2, r2, %[r]\n\t"
178966 #elif defined(__clang__)
178967         "adcs	r2, %[r]\n\t"
178968 #else
178969         "adc	r2, %[r]\n\t"
178970 #endif
178971 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178972         "lsrs	r6, r7, #16\n\t"
178973 #else
178974         "lsr	r6, r7, #16\n\t"
178975 #endif
178976 #ifdef WOLFSSL_KEIL
178977         "muls	r5, r6, r5\n\t"
178978 #elif defined(__clang__)
178979         "muls	r5, r6\n\t"
178980 #else
178981         "mul	r5, r6\n\t"
178982 #endif
178983 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178984         "lsrs	r6, r5, #16\n\t"
178985 #else
178986         "lsr	r6, r5, #16\n\t"
178987 #endif
178988 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178989         "lsls	r5, r5, #16\n\t"
178990 #else
178991         "lsl	r5, r5, #16\n\t"
178992 #endif
178993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
178994         "adds	r3, r3, r5\n\t"
178995 #else
178996         "add	r3, r3, r5\n\t"
178997 #endif
178998 #ifdef WOLFSSL_KEIL
178999         "adcs	r4, r4, r6\n\t"
179000 #elif defined(__clang__)
179001         "adcs	r4, r6\n\t"
179002 #else
179003         "adc	r4, r6\n\t"
179004 #endif
179005 #ifdef WOLFSSL_KEIL
179006         "adcs	r2, r2, %[r]\n\t"
179007 #elif defined(__clang__)
179008         "adcs	r2, %[r]\n\t"
179009 #else
179010         "adc	r2, %[r]\n\t"
179011 #endif
179012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179013         "adds	r3, r3, r5\n\t"
179014 #else
179015         "add	r3, r3, r5\n\t"
179016 #endif
179017 #ifdef WOLFSSL_KEIL
179018         "adcs	r4, r4, r6\n\t"
179019 #elif defined(__clang__)
179020         "adcs	r4, r6\n\t"
179021 #else
179022         "adc	r4, r6\n\t"
179023 #endif
179024 #ifdef WOLFSSL_KEIL
179025         "adcs	r2, r2, %[r]\n\t"
179026 #elif defined(__clang__)
179027         "adcs	r2, %[r]\n\t"
179028 #else
179029         "adc	r2, %[r]\n\t"
179030 #endif
179031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179032         "lsrs	r5, %[a], #16\n\t"
179033 #else
179034         "lsr	r5, %[a], #16\n\t"
179035 #endif
179036 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179037         "lsrs	r6, r7, #16\n\t"
179038 #else
179039         "lsr	r6, r7, #16\n\t"
179040 #endif
179041 #ifdef WOLFSSL_KEIL
179042         "muls	r6, r5, r6\n\t"
179043 #elif defined(__clang__)
179044         "muls	r6, r5\n\t"
179045 #else
179046         "mul	r6, r5\n\t"
179047 #endif
179048 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179049         "adds	r4, r4, r6\n\t"
179050 #else
179051         "add	r4, r4, r6\n\t"
179052 #endif
179053 #ifdef WOLFSSL_KEIL
179054         "adcs	r2, r2, %[r]\n\t"
179055 #elif defined(__clang__)
179056         "adcs	r2, %[r]\n\t"
179057 #else
179058         "adc	r2, %[r]\n\t"
179059 #endif
179060 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179061         "adds	r4, r4, r6\n\t"
179062 #else
179063         "add	r4, r4, r6\n\t"
179064 #endif
179065 #ifdef WOLFSSL_KEIL
179066         "adcs	r2, r2, %[r]\n\t"
179067 #elif defined(__clang__)
179068         "adcs	r2, %[r]\n\t"
179069 #else
179070         "adc	r2, %[r]\n\t"
179071 #endif
179072         "uxth	r6, r7\n\t"
179073 #ifdef WOLFSSL_KEIL
179074         "muls	r5, r6, r5\n\t"
179075 #elif defined(__clang__)
179076         "muls	r5, r6\n\t"
179077 #else
179078         "mul	r5, r6\n\t"
179079 #endif
179080 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179081         "lsrs	r6, r5, #16\n\t"
179082 #else
179083         "lsr	r6, r5, #16\n\t"
179084 #endif
179085 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179086         "lsls	r5, r5, #16\n\t"
179087 #else
179088         "lsl	r5, r5, #16\n\t"
179089 #endif
179090 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179091         "adds	r3, r3, r5\n\t"
179092 #else
179093         "add	r3, r3, r5\n\t"
179094 #endif
179095 #ifdef WOLFSSL_KEIL
179096         "adcs	r4, r4, r6\n\t"
179097 #elif defined(__clang__)
179098         "adcs	r4, r6\n\t"
179099 #else
179100         "adc	r4, r6\n\t"
179101 #endif
179102 #ifdef WOLFSSL_KEIL
179103         "adcs	r2, r2, %[r]\n\t"
179104 #elif defined(__clang__)
179105         "adcs	r2, %[r]\n\t"
179106 #else
179107         "adc	r2, %[r]\n\t"
179108 #endif
179109 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179110         "adds	r3, r3, r5\n\t"
179111 #else
179112         "add	r3, r3, r5\n\t"
179113 #endif
179114 #ifdef WOLFSSL_KEIL
179115         "adcs	r4, r4, r6\n\t"
179116 #elif defined(__clang__)
179117         "adcs	r4, r6\n\t"
179118 #else
179119         "adc	r4, r6\n\t"
179120 #endif
179121 #ifdef WOLFSSL_KEIL
179122         "adcs	r2, r2, %[r]\n\t"
179123 #elif defined(__clang__)
179124         "adcs	r2, %[r]\n\t"
179125 #else
179126         "adc	r2, %[r]\n\t"
179127 #endif
179128         "#  A[15] * A[10]\n\t"
179129         "mov	%[a], r9\n\t"
179130         "ldr	r7, [%[a], #40]\n\t"
179131         "mov	%[a], lr\n\t"
179132         "uxth	r5, %[a]\n\t"
179133         "uxth	r6, r7\n\t"
179134 #ifdef WOLFSSL_KEIL
179135         "muls	r6, r5, r6\n\t"
179136 #elif defined(__clang__)
179137         "muls	r6, r5\n\t"
179138 #else
179139         "mul	r6, r5\n\t"
179140 #endif
179141 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179142         "adds	r3, r3, r6\n\t"
179143 #else
179144         "add	r3, r3, r6\n\t"
179145 #endif
179146 #ifdef WOLFSSL_KEIL
179147         "adcs	r4, r4, %[r]\n\t"
179148 #elif defined(__clang__)
179149         "adcs	r4, %[r]\n\t"
179150 #else
179151         "adc	r4, %[r]\n\t"
179152 #endif
179153 #ifdef WOLFSSL_KEIL
179154         "adcs	r2, r2, %[r]\n\t"
179155 #elif defined(__clang__)
179156         "adcs	r2, %[r]\n\t"
179157 #else
179158         "adc	r2, %[r]\n\t"
179159 #endif
179160 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179161         "adds	r3, r3, r6\n\t"
179162 #else
179163         "add	r3, r3, r6\n\t"
179164 #endif
179165 #ifdef WOLFSSL_KEIL
179166         "adcs	r4, r4, %[r]\n\t"
179167 #elif defined(__clang__)
179168         "adcs	r4, %[r]\n\t"
179169 #else
179170         "adc	r4, %[r]\n\t"
179171 #endif
179172 #ifdef WOLFSSL_KEIL
179173         "adcs	r2, r2, %[r]\n\t"
179174 #elif defined(__clang__)
179175         "adcs	r2, %[r]\n\t"
179176 #else
179177         "adc	r2, %[r]\n\t"
179178 #endif
179179 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179180         "lsrs	r6, r7, #16\n\t"
179181 #else
179182         "lsr	r6, r7, #16\n\t"
179183 #endif
179184 #ifdef WOLFSSL_KEIL
179185         "muls	r5, r6, r5\n\t"
179186 #elif defined(__clang__)
179187         "muls	r5, r6\n\t"
179188 #else
179189         "mul	r5, r6\n\t"
179190 #endif
179191 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179192         "lsrs	r6, r5, #16\n\t"
179193 #else
179194         "lsr	r6, r5, #16\n\t"
179195 #endif
179196 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179197         "lsls	r5, r5, #16\n\t"
179198 #else
179199         "lsl	r5, r5, #16\n\t"
179200 #endif
179201 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179202         "adds	r3, r3, r5\n\t"
179203 #else
179204         "add	r3, r3, r5\n\t"
179205 #endif
179206 #ifdef WOLFSSL_KEIL
179207         "adcs	r4, r4, r6\n\t"
179208 #elif defined(__clang__)
179209         "adcs	r4, r6\n\t"
179210 #else
179211         "adc	r4, r6\n\t"
179212 #endif
179213 #ifdef WOLFSSL_KEIL
179214         "adcs	r2, r2, %[r]\n\t"
179215 #elif defined(__clang__)
179216         "adcs	r2, %[r]\n\t"
179217 #else
179218         "adc	r2, %[r]\n\t"
179219 #endif
179220 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179221         "adds	r3, r3, r5\n\t"
179222 #else
179223         "add	r3, r3, r5\n\t"
179224 #endif
179225 #ifdef WOLFSSL_KEIL
179226         "adcs	r4, r4, r6\n\t"
179227 #elif defined(__clang__)
179228         "adcs	r4, r6\n\t"
179229 #else
179230         "adc	r4, r6\n\t"
179231 #endif
179232 #ifdef WOLFSSL_KEIL
179233         "adcs	r2, r2, %[r]\n\t"
179234 #elif defined(__clang__)
179235         "adcs	r2, %[r]\n\t"
179236 #else
179237         "adc	r2, %[r]\n\t"
179238 #endif
179239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179240         "lsrs	r5, %[a], #16\n\t"
179241 #else
179242         "lsr	r5, %[a], #16\n\t"
179243 #endif
179244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179245         "lsrs	r6, r7, #16\n\t"
179246 #else
179247         "lsr	r6, r7, #16\n\t"
179248 #endif
179249 #ifdef WOLFSSL_KEIL
179250         "muls	r6, r5, r6\n\t"
179251 #elif defined(__clang__)
179252         "muls	r6, r5\n\t"
179253 #else
179254         "mul	r6, r5\n\t"
179255 #endif
179256 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179257         "adds	r4, r4, r6\n\t"
179258 #else
179259         "add	r4, r4, r6\n\t"
179260 #endif
179261 #ifdef WOLFSSL_KEIL
179262         "adcs	r2, r2, %[r]\n\t"
179263 #elif defined(__clang__)
179264         "adcs	r2, %[r]\n\t"
179265 #else
179266         "adc	r2, %[r]\n\t"
179267 #endif
179268 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179269         "adds	r4, r4, r6\n\t"
179270 #else
179271         "add	r4, r4, r6\n\t"
179272 #endif
179273 #ifdef WOLFSSL_KEIL
179274         "adcs	r2, r2, %[r]\n\t"
179275 #elif defined(__clang__)
179276         "adcs	r2, %[r]\n\t"
179277 #else
179278         "adc	r2, %[r]\n\t"
179279 #endif
179280         "uxth	r6, r7\n\t"
179281 #ifdef WOLFSSL_KEIL
179282         "muls	r5, r6, r5\n\t"
179283 #elif defined(__clang__)
179284         "muls	r5, r6\n\t"
179285 #else
179286         "mul	r5, r6\n\t"
179287 #endif
179288 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179289         "lsrs	r6, r5, #16\n\t"
179290 #else
179291         "lsr	r6, r5, #16\n\t"
179292 #endif
179293 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179294         "lsls	r5, r5, #16\n\t"
179295 #else
179296         "lsl	r5, r5, #16\n\t"
179297 #endif
179298 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179299         "adds	r3, r3, r5\n\t"
179300 #else
179301         "add	r3, r3, r5\n\t"
179302 #endif
179303 #ifdef WOLFSSL_KEIL
179304         "adcs	r4, r4, r6\n\t"
179305 #elif defined(__clang__)
179306         "adcs	r4, r6\n\t"
179307 #else
179308         "adc	r4, r6\n\t"
179309 #endif
179310 #ifdef WOLFSSL_KEIL
179311         "adcs	r2, r2, %[r]\n\t"
179312 #elif defined(__clang__)
179313         "adcs	r2, %[r]\n\t"
179314 #else
179315         "adc	r2, %[r]\n\t"
179316 #endif
179317 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179318         "adds	r3, r3, r5\n\t"
179319 #else
179320         "add	r3, r3, r5\n\t"
179321 #endif
179322 #ifdef WOLFSSL_KEIL
179323         "adcs	r4, r4, r6\n\t"
179324 #elif defined(__clang__)
179325         "adcs	r4, r6\n\t"
179326 #else
179327         "adc	r4, r6\n\t"
179328 #endif
179329 #ifdef WOLFSSL_KEIL
179330         "adcs	r2, r2, %[r]\n\t"
179331 #elif defined(__clang__)
179332         "adcs	r2, %[r]\n\t"
179333 #else
179334         "adc	r2, %[r]\n\t"
179335 #endif
179336         "mov	%[r], r8\n\t"
179337         "str	r3, [%[r], #100]\n\t"
179338         "movs	%[r], #0\n\t"
179339         "#  A[15] * A[11]\n\t"
179340         "movs	r3, #0\n\t"
179341         "mov	%[a], r9\n\t"
179342         "ldr	r7, [%[a], #44]\n\t"
179343         "mov	%[a], lr\n\t"
179344         "uxth	r5, %[a]\n\t"
179345         "uxth	r6, r7\n\t"
179346 #ifdef WOLFSSL_KEIL
179347         "muls	r6, r5, r6\n\t"
179348 #elif defined(__clang__)
179349         "muls	r6, r5\n\t"
179350 #else
179351         "mul	r6, r5\n\t"
179352 #endif
179353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179354         "adds	r4, r4, r6\n\t"
179355 #else
179356         "add	r4, r4, r6\n\t"
179357 #endif
179358 #ifdef WOLFSSL_KEIL
179359         "adcs	r2, r2, %[r]\n\t"
179360 #elif defined(__clang__)
179361         "adcs	r2, %[r]\n\t"
179362 #else
179363         "adc	r2, %[r]\n\t"
179364 #endif
179365 #ifdef WOLFSSL_KEIL
179366         "adcs	r3, r3, %[r]\n\t"
179367 #elif defined(__clang__)
179368         "adcs	r3, %[r]\n\t"
179369 #else
179370         "adc	r3, %[r]\n\t"
179371 #endif
179372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179373         "adds	r4, r4, r6\n\t"
179374 #else
179375         "add	r4, r4, r6\n\t"
179376 #endif
179377 #ifdef WOLFSSL_KEIL
179378         "adcs	r2, r2, %[r]\n\t"
179379 #elif defined(__clang__)
179380         "adcs	r2, %[r]\n\t"
179381 #else
179382         "adc	r2, %[r]\n\t"
179383 #endif
179384 #ifdef WOLFSSL_KEIL
179385         "adcs	r3, r3, %[r]\n\t"
179386 #elif defined(__clang__)
179387         "adcs	r3, %[r]\n\t"
179388 #else
179389         "adc	r3, %[r]\n\t"
179390 #endif
179391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179392         "lsrs	r6, r7, #16\n\t"
179393 #else
179394         "lsr	r6, r7, #16\n\t"
179395 #endif
179396 #ifdef WOLFSSL_KEIL
179397         "muls	r5, r6, r5\n\t"
179398 #elif defined(__clang__)
179399         "muls	r5, r6\n\t"
179400 #else
179401         "mul	r5, r6\n\t"
179402 #endif
179403 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179404         "lsrs	r6, r5, #16\n\t"
179405 #else
179406         "lsr	r6, r5, #16\n\t"
179407 #endif
179408 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179409         "lsls	r5, r5, #16\n\t"
179410 #else
179411         "lsl	r5, r5, #16\n\t"
179412 #endif
179413 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179414         "adds	r4, r4, r5\n\t"
179415 #else
179416         "add	r4, r4, r5\n\t"
179417 #endif
179418 #ifdef WOLFSSL_KEIL
179419         "adcs	r2, r2, r6\n\t"
179420 #elif defined(__clang__)
179421         "adcs	r2, r6\n\t"
179422 #else
179423         "adc	r2, r6\n\t"
179424 #endif
179425 #ifdef WOLFSSL_KEIL
179426         "adcs	r3, r3, %[r]\n\t"
179427 #elif defined(__clang__)
179428         "adcs	r3, %[r]\n\t"
179429 #else
179430         "adc	r3, %[r]\n\t"
179431 #endif
179432 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179433         "adds	r4, r4, r5\n\t"
179434 #else
179435         "add	r4, r4, r5\n\t"
179436 #endif
179437 #ifdef WOLFSSL_KEIL
179438         "adcs	r2, r2, r6\n\t"
179439 #elif defined(__clang__)
179440         "adcs	r2, r6\n\t"
179441 #else
179442         "adc	r2, r6\n\t"
179443 #endif
179444 #ifdef WOLFSSL_KEIL
179445         "adcs	r3, r3, %[r]\n\t"
179446 #elif defined(__clang__)
179447         "adcs	r3, %[r]\n\t"
179448 #else
179449         "adc	r3, %[r]\n\t"
179450 #endif
179451 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179452         "lsrs	r5, %[a], #16\n\t"
179453 #else
179454         "lsr	r5, %[a], #16\n\t"
179455 #endif
179456 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179457         "lsrs	r6, r7, #16\n\t"
179458 #else
179459         "lsr	r6, r7, #16\n\t"
179460 #endif
179461 #ifdef WOLFSSL_KEIL
179462         "muls	r6, r5, r6\n\t"
179463 #elif defined(__clang__)
179464         "muls	r6, r5\n\t"
179465 #else
179466         "mul	r6, r5\n\t"
179467 #endif
179468 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179469         "adds	r2, r2, r6\n\t"
179470 #else
179471         "add	r2, r2, r6\n\t"
179472 #endif
179473 #ifdef WOLFSSL_KEIL
179474         "adcs	r3, r3, %[r]\n\t"
179475 #elif defined(__clang__)
179476         "adcs	r3, %[r]\n\t"
179477 #else
179478         "adc	r3, %[r]\n\t"
179479 #endif
179480 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179481         "adds	r2, r2, r6\n\t"
179482 #else
179483         "add	r2, r2, r6\n\t"
179484 #endif
179485 #ifdef WOLFSSL_KEIL
179486         "adcs	r3, r3, %[r]\n\t"
179487 #elif defined(__clang__)
179488         "adcs	r3, %[r]\n\t"
179489 #else
179490         "adc	r3, %[r]\n\t"
179491 #endif
179492         "uxth	r6, r7\n\t"
179493 #ifdef WOLFSSL_KEIL
179494         "muls	r5, r6, r5\n\t"
179495 #elif defined(__clang__)
179496         "muls	r5, r6\n\t"
179497 #else
179498         "mul	r5, r6\n\t"
179499 #endif
179500 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179501         "lsrs	r6, r5, #16\n\t"
179502 #else
179503         "lsr	r6, r5, #16\n\t"
179504 #endif
179505 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179506         "lsls	r5, r5, #16\n\t"
179507 #else
179508         "lsl	r5, r5, #16\n\t"
179509 #endif
179510 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179511         "adds	r4, r4, r5\n\t"
179512 #else
179513         "add	r4, r4, r5\n\t"
179514 #endif
179515 #ifdef WOLFSSL_KEIL
179516         "adcs	r2, r2, r6\n\t"
179517 #elif defined(__clang__)
179518         "adcs	r2, r6\n\t"
179519 #else
179520         "adc	r2, r6\n\t"
179521 #endif
179522 #ifdef WOLFSSL_KEIL
179523         "adcs	r3, r3, %[r]\n\t"
179524 #elif defined(__clang__)
179525         "adcs	r3, %[r]\n\t"
179526 #else
179527         "adc	r3, %[r]\n\t"
179528 #endif
179529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179530         "adds	r4, r4, r5\n\t"
179531 #else
179532         "add	r4, r4, r5\n\t"
179533 #endif
179534 #ifdef WOLFSSL_KEIL
179535         "adcs	r2, r2, r6\n\t"
179536 #elif defined(__clang__)
179537         "adcs	r2, r6\n\t"
179538 #else
179539         "adc	r2, r6\n\t"
179540 #endif
179541 #ifdef WOLFSSL_KEIL
179542         "adcs	r3, r3, %[r]\n\t"
179543 #elif defined(__clang__)
179544         "adcs	r3, %[r]\n\t"
179545 #else
179546         "adc	r3, %[r]\n\t"
179547 #endif
179548         "#  A[14] * A[12]\n\t"
179549         "mov	%[a], r9\n\t"
179550         "mov	r7, r10\n\t"
179551         "mov	%[a], r12\n\t"
179552         "uxth	r5, %[a]\n\t"
179553         "uxth	r6, r7\n\t"
179554 #ifdef WOLFSSL_KEIL
179555         "muls	r6, r5, r6\n\t"
179556 #elif defined(__clang__)
179557         "muls	r6, r5\n\t"
179558 #else
179559         "mul	r6, r5\n\t"
179560 #endif
179561 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179562         "adds	r4, r4, r6\n\t"
179563 #else
179564         "add	r4, r4, r6\n\t"
179565 #endif
179566 #ifdef WOLFSSL_KEIL
179567         "adcs	r2, r2, %[r]\n\t"
179568 #elif defined(__clang__)
179569         "adcs	r2, %[r]\n\t"
179570 #else
179571         "adc	r2, %[r]\n\t"
179572 #endif
179573 #ifdef WOLFSSL_KEIL
179574         "adcs	r3, r3, %[r]\n\t"
179575 #elif defined(__clang__)
179576         "adcs	r3, %[r]\n\t"
179577 #else
179578         "adc	r3, %[r]\n\t"
179579 #endif
179580 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179581         "adds	r4, r4, r6\n\t"
179582 #else
179583         "add	r4, r4, r6\n\t"
179584 #endif
179585 #ifdef WOLFSSL_KEIL
179586         "adcs	r2, r2, %[r]\n\t"
179587 #elif defined(__clang__)
179588         "adcs	r2, %[r]\n\t"
179589 #else
179590         "adc	r2, %[r]\n\t"
179591 #endif
179592 #ifdef WOLFSSL_KEIL
179593         "adcs	r3, r3, %[r]\n\t"
179594 #elif defined(__clang__)
179595         "adcs	r3, %[r]\n\t"
179596 #else
179597         "adc	r3, %[r]\n\t"
179598 #endif
179599 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179600         "lsrs	r6, r7, #16\n\t"
179601 #else
179602         "lsr	r6, r7, #16\n\t"
179603 #endif
179604 #ifdef WOLFSSL_KEIL
179605         "muls	r5, r6, r5\n\t"
179606 #elif defined(__clang__)
179607         "muls	r5, r6\n\t"
179608 #else
179609         "mul	r5, r6\n\t"
179610 #endif
179611 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179612         "lsrs	r6, r5, #16\n\t"
179613 #else
179614         "lsr	r6, r5, #16\n\t"
179615 #endif
179616 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179617         "lsls	r5, r5, #16\n\t"
179618 #else
179619         "lsl	r5, r5, #16\n\t"
179620 #endif
179621 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179622         "adds	r4, r4, r5\n\t"
179623 #else
179624         "add	r4, r4, r5\n\t"
179625 #endif
179626 #ifdef WOLFSSL_KEIL
179627         "adcs	r2, r2, r6\n\t"
179628 #elif defined(__clang__)
179629         "adcs	r2, r6\n\t"
179630 #else
179631         "adc	r2, r6\n\t"
179632 #endif
179633 #ifdef WOLFSSL_KEIL
179634         "adcs	r3, r3, %[r]\n\t"
179635 #elif defined(__clang__)
179636         "adcs	r3, %[r]\n\t"
179637 #else
179638         "adc	r3, %[r]\n\t"
179639 #endif
179640 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179641         "adds	r4, r4, r5\n\t"
179642 #else
179643         "add	r4, r4, r5\n\t"
179644 #endif
179645 #ifdef WOLFSSL_KEIL
179646         "adcs	r2, r2, r6\n\t"
179647 #elif defined(__clang__)
179648         "adcs	r2, r6\n\t"
179649 #else
179650         "adc	r2, r6\n\t"
179651 #endif
179652 #ifdef WOLFSSL_KEIL
179653         "adcs	r3, r3, %[r]\n\t"
179654 #elif defined(__clang__)
179655         "adcs	r3, %[r]\n\t"
179656 #else
179657         "adc	r3, %[r]\n\t"
179658 #endif
179659 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179660         "lsrs	r5, %[a], #16\n\t"
179661 #else
179662         "lsr	r5, %[a], #16\n\t"
179663 #endif
179664 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179665         "lsrs	r6, r7, #16\n\t"
179666 #else
179667         "lsr	r6, r7, #16\n\t"
179668 #endif
179669 #ifdef WOLFSSL_KEIL
179670         "muls	r6, r5, r6\n\t"
179671 #elif defined(__clang__)
179672         "muls	r6, r5\n\t"
179673 #else
179674         "mul	r6, r5\n\t"
179675 #endif
179676 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179677         "adds	r2, r2, r6\n\t"
179678 #else
179679         "add	r2, r2, r6\n\t"
179680 #endif
179681 #ifdef WOLFSSL_KEIL
179682         "adcs	r3, r3, %[r]\n\t"
179683 #elif defined(__clang__)
179684         "adcs	r3, %[r]\n\t"
179685 #else
179686         "adc	r3, %[r]\n\t"
179687 #endif
179688 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179689         "adds	r2, r2, r6\n\t"
179690 #else
179691         "add	r2, r2, r6\n\t"
179692 #endif
179693 #ifdef WOLFSSL_KEIL
179694         "adcs	r3, r3, %[r]\n\t"
179695 #elif defined(__clang__)
179696         "adcs	r3, %[r]\n\t"
179697 #else
179698         "adc	r3, %[r]\n\t"
179699 #endif
179700         "uxth	r6, r7\n\t"
179701 #ifdef WOLFSSL_KEIL
179702         "muls	r5, r6, r5\n\t"
179703 #elif defined(__clang__)
179704         "muls	r5, r6\n\t"
179705 #else
179706         "mul	r5, r6\n\t"
179707 #endif
179708 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179709         "lsrs	r6, r5, #16\n\t"
179710 #else
179711         "lsr	r6, r5, #16\n\t"
179712 #endif
179713 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179714         "lsls	r5, r5, #16\n\t"
179715 #else
179716         "lsl	r5, r5, #16\n\t"
179717 #endif
179718 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179719         "adds	r4, r4, r5\n\t"
179720 #else
179721         "add	r4, r4, r5\n\t"
179722 #endif
179723 #ifdef WOLFSSL_KEIL
179724         "adcs	r2, r2, r6\n\t"
179725 #elif defined(__clang__)
179726         "adcs	r2, r6\n\t"
179727 #else
179728         "adc	r2, r6\n\t"
179729 #endif
179730 #ifdef WOLFSSL_KEIL
179731         "adcs	r3, r3, %[r]\n\t"
179732 #elif defined(__clang__)
179733         "adcs	r3, %[r]\n\t"
179734 #else
179735         "adc	r3, %[r]\n\t"
179736 #endif
179737 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179738         "adds	r4, r4, r5\n\t"
179739 #else
179740         "add	r4, r4, r5\n\t"
179741 #endif
179742 #ifdef WOLFSSL_KEIL
179743         "adcs	r2, r2, r6\n\t"
179744 #elif defined(__clang__)
179745         "adcs	r2, r6\n\t"
179746 #else
179747         "adc	r2, r6\n\t"
179748 #endif
179749 #ifdef WOLFSSL_KEIL
179750         "adcs	r3, r3, %[r]\n\t"
179751 #elif defined(__clang__)
179752         "adcs	r3, %[r]\n\t"
179753 #else
179754         "adc	r3, %[r]\n\t"
179755 #endif
179756         "#  A[13] * A[13]\n\t"
179757         "mov	r7, r11\n\t"
179758 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179759         "lsrs	r6, r7, #16\n\t"
179760 #else
179761         "lsr	r6, r7, #16\n\t"
179762 #endif
179763         "uxth	r5, r7\n\t"
179764 #ifdef WOLFSSL_KEIL
179765         "muls	r5, r5, r5\n\t"
179766 #elif defined(__clang__)
179767         "muls	r5, r5\n\t"
179768 #else
179769         "mul	r5, r5\n\t"
179770 #endif
179771 #ifdef WOLFSSL_KEIL
179772         "muls	r6, r6, r6\n\t"
179773 #elif defined(__clang__)
179774         "muls	r6, r6\n\t"
179775 #else
179776         "mul	r6, r6\n\t"
179777 #endif
179778 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179779         "adds	r4, r4, r5\n\t"
179780 #else
179781         "add	r4, r4, r5\n\t"
179782 #endif
179783 #ifdef WOLFSSL_KEIL
179784         "adcs	r2, r2, r6\n\t"
179785 #elif defined(__clang__)
179786         "adcs	r2, r6\n\t"
179787 #else
179788         "adc	r2, r6\n\t"
179789 #endif
179790 #ifdef WOLFSSL_KEIL
179791         "adcs	r3, r3, %[r]\n\t"
179792 #elif defined(__clang__)
179793         "adcs	r3, %[r]\n\t"
179794 #else
179795         "adc	r3, %[r]\n\t"
179796 #endif
179797 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179798         "lsrs	r6, r7, #16\n\t"
179799 #else
179800         "lsr	r6, r7, #16\n\t"
179801 #endif
179802         "uxth	r5, r7\n\t"
179803 #ifdef WOLFSSL_KEIL
179804         "muls	r5, r6, r5\n\t"
179805 #elif defined(__clang__)
179806         "muls	r5, r6\n\t"
179807 #else
179808         "mul	r5, r6\n\t"
179809 #endif
179810 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179811         "lsrs	r6, r5, #15\n\t"
179812 #else
179813         "lsr	r6, r5, #15\n\t"
179814 #endif
179815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179816         "lsls	r5, r5, #17\n\t"
179817 #else
179818         "lsl	r5, r5, #17\n\t"
179819 #endif
179820 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179821         "adds	r4, r4, r5\n\t"
179822 #else
179823         "add	r4, r4, r5\n\t"
179824 #endif
179825 #ifdef WOLFSSL_KEIL
179826         "adcs	r2, r2, r6\n\t"
179827 #elif defined(__clang__)
179828         "adcs	r2, r6\n\t"
179829 #else
179830         "adc	r2, r6\n\t"
179831 #endif
179832 #ifdef WOLFSSL_KEIL
179833         "adcs	r3, r3, %[r]\n\t"
179834 #elif defined(__clang__)
179835         "adcs	r3, %[r]\n\t"
179836 #else
179837         "adc	r3, %[r]\n\t"
179838 #endif
179839         "mov	%[r], r8\n\t"
179840         "str	r4, [%[r], #104]\n\t"
179841         "movs	%[r], #0\n\t"
179842         "#  A[14] * A[13]\n\t"
179843         "movs	r4, #0\n\t"
179844         "mov	%[a], r9\n\t"
179845         "mov	%[a], r12\n\t"
179846         "uxth	r5, %[a]\n\t"
179847         "uxth	r6, r7\n\t"
179848 #ifdef WOLFSSL_KEIL
179849         "muls	r6, r5, r6\n\t"
179850 #elif defined(__clang__)
179851         "muls	r6, r5\n\t"
179852 #else
179853         "mul	r6, r5\n\t"
179854 #endif
179855 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179856         "adds	r2, r2, r6\n\t"
179857 #else
179858         "add	r2, r2, r6\n\t"
179859 #endif
179860 #ifdef WOLFSSL_KEIL
179861         "adcs	r3, r3, %[r]\n\t"
179862 #elif defined(__clang__)
179863         "adcs	r3, %[r]\n\t"
179864 #else
179865         "adc	r3, %[r]\n\t"
179866 #endif
179867 #ifdef WOLFSSL_KEIL
179868         "adcs	r4, r4, %[r]\n\t"
179869 #elif defined(__clang__)
179870         "adcs	r4, %[r]\n\t"
179871 #else
179872         "adc	r4, %[r]\n\t"
179873 #endif
179874 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179875         "adds	r2, r2, r6\n\t"
179876 #else
179877         "add	r2, r2, r6\n\t"
179878 #endif
179879 #ifdef WOLFSSL_KEIL
179880         "adcs	r3, r3, %[r]\n\t"
179881 #elif defined(__clang__)
179882         "adcs	r3, %[r]\n\t"
179883 #else
179884         "adc	r3, %[r]\n\t"
179885 #endif
179886 #ifdef WOLFSSL_KEIL
179887         "adcs	r4, r4, %[r]\n\t"
179888 #elif defined(__clang__)
179889         "adcs	r4, %[r]\n\t"
179890 #else
179891         "adc	r4, %[r]\n\t"
179892 #endif
179893 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179894         "lsrs	r6, r7, #16\n\t"
179895 #else
179896         "lsr	r6, r7, #16\n\t"
179897 #endif
179898 #ifdef WOLFSSL_KEIL
179899         "muls	r5, r6, r5\n\t"
179900 #elif defined(__clang__)
179901         "muls	r5, r6\n\t"
179902 #else
179903         "mul	r5, r6\n\t"
179904 #endif
179905 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179906         "lsrs	r6, r5, #16\n\t"
179907 #else
179908         "lsr	r6, r5, #16\n\t"
179909 #endif
179910 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179911         "lsls	r5, r5, #16\n\t"
179912 #else
179913         "lsl	r5, r5, #16\n\t"
179914 #endif
179915 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179916         "adds	r2, r2, r5\n\t"
179917 #else
179918         "add	r2, r2, r5\n\t"
179919 #endif
179920 #ifdef WOLFSSL_KEIL
179921         "adcs	r3, r3, r6\n\t"
179922 #elif defined(__clang__)
179923         "adcs	r3, r6\n\t"
179924 #else
179925         "adc	r3, r6\n\t"
179926 #endif
179927 #ifdef WOLFSSL_KEIL
179928         "adcs	r4, r4, %[r]\n\t"
179929 #elif defined(__clang__)
179930         "adcs	r4, %[r]\n\t"
179931 #else
179932         "adc	r4, %[r]\n\t"
179933 #endif
179934 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179935         "adds	r2, r2, r5\n\t"
179936 #else
179937         "add	r2, r2, r5\n\t"
179938 #endif
179939 #ifdef WOLFSSL_KEIL
179940         "adcs	r3, r3, r6\n\t"
179941 #elif defined(__clang__)
179942         "adcs	r3, r6\n\t"
179943 #else
179944         "adc	r3, r6\n\t"
179945 #endif
179946 #ifdef WOLFSSL_KEIL
179947         "adcs	r4, r4, %[r]\n\t"
179948 #elif defined(__clang__)
179949         "adcs	r4, %[r]\n\t"
179950 #else
179951         "adc	r4, %[r]\n\t"
179952 #endif
179953 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179954         "lsrs	r5, %[a], #16\n\t"
179955 #else
179956         "lsr	r5, %[a], #16\n\t"
179957 #endif
179958 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179959         "lsrs	r6, r7, #16\n\t"
179960 #else
179961         "lsr	r6, r7, #16\n\t"
179962 #endif
179963 #ifdef WOLFSSL_KEIL
179964         "muls	r6, r5, r6\n\t"
179965 #elif defined(__clang__)
179966         "muls	r6, r5\n\t"
179967 #else
179968         "mul	r6, r5\n\t"
179969 #endif
179970 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179971         "adds	r3, r3, r6\n\t"
179972 #else
179973         "add	r3, r3, r6\n\t"
179974 #endif
179975 #ifdef WOLFSSL_KEIL
179976         "adcs	r4, r4, %[r]\n\t"
179977 #elif defined(__clang__)
179978         "adcs	r4, %[r]\n\t"
179979 #else
179980         "adc	r4, %[r]\n\t"
179981 #endif
179982 #if defined(__clang__) || defined(WOLFSSL_KEIL)
179983         "adds	r3, r3, r6\n\t"
179984 #else
179985         "add	r3, r3, r6\n\t"
179986 #endif
179987 #ifdef WOLFSSL_KEIL
179988         "adcs	r4, r4, %[r]\n\t"
179989 #elif defined(__clang__)
179990         "adcs	r4, %[r]\n\t"
179991 #else
179992         "adc	r4, %[r]\n\t"
179993 #endif
179994         "uxth	r6, r7\n\t"
179995 #ifdef WOLFSSL_KEIL
179996         "muls	r5, r6, r5\n\t"
179997 #elif defined(__clang__)
179998         "muls	r5, r6\n\t"
179999 #else
180000         "mul	r5, r6\n\t"
180001 #endif
180002 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180003         "lsrs	r6, r5, #16\n\t"
180004 #else
180005         "lsr	r6, r5, #16\n\t"
180006 #endif
180007 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180008         "lsls	r5, r5, #16\n\t"
180009 #else
180010         "lsl	r5, r5, #16\n\t"
180011 #endif
180012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180013         "adds	r2, r2, r5\n\t"
180014 #else
180015         "add	r2, r2, r5\n\t"
180016 #endif
180017 #ifdef WOLFSSL_KEIL
180018         "adcs	r3, r3, r6\n\t"
180019 #elif defined(__clang__)
180020         "adcs	r3, r6\n\t"
180021 #else
180022         "adc	r3, r6\n\t"
180023 #endif
180024 #ifdef WOLFSSL_KEIL
180025         "adcs	r4, r4, %[r]\n\t"
180026 #elif defined(__clang__)
180027         "adcs	r4, %[r]\n\t"
180028 #else
180029         "adc	r4, %[r]\n\t"
180030 #endif
180031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180032         "adds	r2, r2, r5\n\t"
180033 #else
180034         "add	r2, r2, r5\n\t"
180035 #endif
180036 #ifdef WOLFSSL_KEIL
180037         "adcs	r3, r3, r6\n\t"
180038 #elif defined(__clang__)
180039         "adcs	r3, r6\n\t"
180040 #else
180041         "adc	r3, r6\n\t"
180042 #endif
180043 #ifdef WOLFSSL_KEIL
180044         "adcs	r4, r4, %[r]\n\t"
180045 #elif defined(__clang__)
180046         "adcs	r4, %[r]\n\t"
180047 #else
180048         "adc	r4, %[r]\n\t"
180049 #endif
180050         "#  A[15] * A[12]\n\t"
180051         "mov	%[a], r9\n\t"
180052         "mov	r7, r10\n\t"
180053         "mov	%[a], lr\n\t"
180054         "uxth	r5, %[a]\n\t"
180055         "uxth	r6, r7\n\t"
180056 #ifdef WOLFSSL_KEIL
180057         "muls	r6, r5, r6\n\t"
180058 #elif defined(__clang__)
180059         "muls	r6, r5\n\t"
180060 #else
180061         "mul	r6, r5\n\t"
180062 #endif
180063 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180064         "adds	r2, r2, r6\n\t"
180065 #else
180066         "add	r2, r2, r6\n\t"
180067 #endif
180068 #ifdef WOLFSSL_KEIL
180069         "adcs	r3, r3, %[r]\n\t"
180070 #elif defined(__clang__)
180071         "adcs	r3, %[r]\n\t"
180072 #else
180073         "adc	r3, %[r]\n\t"
180074 #endif
180075 #ifdef WOLFSSL_KEIL
180076         "adcs	r4, r4, %[r]\n\t"
180077 #elif defined(__clang__)
180078         "adcs	r4, %[r]\n\t"
180079 #else
180080         "adc	r4, %[r]\n\t"
180081 #endif
180082 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180083         "adds	r2, r2, r6\n\t"
180084 #else
180085         "add	r2, r2, r6\n\t"
180086 #endif
180087 #ifdef WOLFSSL_KEIL
180088         "adcs	r3, r3, %[r]\n\t"
180089 #elif defined(__clang__)
180090         "adcs	r3, %[r]\n\t"
180091 #else
180092         "adc	r3, %[r]\n\t"
180093 #endif
180094 #ifdef WOLFSSL_KEIL
180095         "adcs	r4, r4, %[r]\n\t"
180096 #elif defined(__clang__)
180097         "adcs	r4, %[r]\n\t"
180098 #else
180099         "adc	r4, %[r]\n\t"
180100 #endif
180101 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180102         "lsrs	r6, r7, #16\n\t"
180103 #else
180104         "lsr	r6, r7, #16\n\t"
180105 #endif
180106 #ifdef WOLFSSL_KEIL
180107         "muls	r5, r6, r5\n\t"
180108 #elif defined(__clang__)
180109         "muls	r5, r6\n\t"
180110 #else
180111         "mul	r5, r6\n\t"
180112 #endif
180113 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180114         "lsrs	r6, r5, #16\n\t"
180115 #else
180116         "lsr	r6, r5, #16\n\t"
180117 #endif
180118 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180119         "lsls	r5, r5, #16\n\t"
180120 #else
180121         "lsl	r5, r5, #16\n\t"
180122 #endif
180123 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180124         "adds	r2, r2, r5\n\t"
180125 #else
180126         "add	r2, r2, r5\n\t"
180127 #endif
180128 #ifdef WOLFSSL_KEIL
180129         "adcs	r3, r3, r6\n\t"
180130 #elif defined(__clang__)
180131         "adcs	r3, r6\n\t"
180132 #else
180133         "adc	r3, r6\n\t"
180134 #endif
180135 #ifdef WOLFSSL_KEIL
180136         "adcs	r4, r4, %[r]\n\t"
180137 #elif defined(__clang__)
180138         "adcs	r4, %[r]\n\t"
180139 #else
180140         "adc	r4, %[r]\n\t"
180141 #endif
180142 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180143         "adds	r2, r2, r5\n\t"
180144 #else
180145         "add	r2, r2, r5\n\t"
180146 #endif
180147 #ifdef WOLFSSL_KEIL
180148         "adcs	r3, r3, r6\n\t"
180149 #elif defined(__clang__)
180150         "adcs	r3, r6\n\t"
180151 #else
180152         "adc	r3, r6\n\t"
180153 #endif
180154 #ifdef WOLFSSL_KEIL
180155         "adcs	r4, r4, %[r]\n\t"
180156 #elif defined(__clang__)
180157         "adcs	r4, %[r]\n\t"
180158 #else
180159         "adc	r4, %[r]\n\t"
180160 #endif
180161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180162         "lsrs	r5, %[a], #16\n\t"
180163 #else
180164         "lsr	r5, %[a], #16\n\t"
180165 #endif
180166 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180167         "lsrs	r6, r7, #16\n\t"
180168 #else
180169         "lsr	r6, r7, #16\n\t"
180170 #endif
180171 #ifdef WOLFSSL_KEIL
180172         "muls	r6, r5, r6\n\t"
180173 #elif defined(__clang__)
180174         "muls	r6, r5\n\t"
180175 #else
180176         "mul	r6, r5\n\t"
180177 #endif
180178 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180179         "adds	r3, r3, r6\n\t"
180180 #else
180181         "add	r3, r3, r6\n\t"
180182 #endif
180183 #ifdef WOLFSSL_KEIL
180184         "adcs	r4, r4, %[r]\n\t"
180185 #elif defined(__clang__)
180186         "adcs	r4, %[r]\n\t"
180187 #else
180188         "adc	r4, %[r]\n\t"
180189 #endif
180190 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180191         "adds	r3, r3, r6\n\t"
180192 #else
180193         "add	r3, r3, r6\n\t"
180194 #endif
180195 #ifdef WOLFSSL_KEIL
180196         "adcs	r4, r4, %[r]\n\t"
180197 #elif defined(__clang__)
180198         "adcs	r4, %[r]\n\t"
180199 #else
180200         "adc	r4, %[r]\n\t"
180201 #endif
180202         "uxth	r6, r7\n\t"
180203 #ifdef WOLFSSL_KEIL
180204         "muls	r5, r6, r5\n\t"
180205 #elif defined(__clang__)
180206         "muls	r5, r6\n\t"
180207 #else
180208         "mul	r5, r6\n\t"
180209 #endif
180210 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180211         "lsrs	r6, r5, #16\n\t"
180212 #else
180213         "lsr	r6, r5, #16\n\t"
180214 #endif
180215 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180216         "lsls	r5, r5, #16\n\t"
180217 #else
180218         "lsl	r5, r5, #16\n\t"
180219 #endif
180220 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180221         "adds	r2, r2, r5\n\t"
180222 #else
180223         "add	r2, r2, r5\n\t"
180224 #endif
180225 #ifdef WOLFSSL_KEIL
180226         "adcs	r3, r3, r6\n\t"
180227 #elif defined(__clang__)
180228         "adcs	r3, r6\n\t"
180229 #else
180230         "adc	r3, r6\n\t"
180231 #endif
180232 #ifdef WOLFSSL_KEIL
180233         "adcs	r4, r4, %[r]\n\t"
180234 #elif defined(__clang__)
180235         "adcs	r4, %[r]\n\t"
180236 #else
180237         "adc	r4, %[r]\n\t"
180238 #endif
180239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180240         "adds	r2, r2, r5\n\t"
180241 #else
180242         "add	r2, r2, r5\n\t"
180243 #endif
180244 #ifdef WOLFSSL_KEIL
180245         "adcs	r3, r3, r6\n\t"
180246 #elif defined(__clang__)
180247         "adcs	r3, r6\n\t"
180248 #else
180249         "adc	r3, r6\n\t"
180250 #endif
180251 #ifdef WOLFSSL_KEIL
180252         "adcs	r4, r4, %[r]\n\t"
180253 #elif defined(__clang__)
180254         "adcs	r4, %[r]\n\t"
180255 #else
180256         "adc	r4, %[r]\n\t"
180257 #endif
180258         "mov	%[r], r8\n\t"
180259         "str	r2, [%[r], #108]\n\t"
180260         "movs	%[r], #0\n\t"
180261         "#  A[15] * A[13]\n\t"
180262         "movs	r2, #0\n\t"
180263         "mov	%[a], r9\n\t"
180264         "mov	r7, r11\n\t"
180265         "mov	%[a], lr\n\t"
180266         "uxth	r5, %[a]\n\t"
180267         "uxth	r6, r7\n\t"
180268 #ifdef WOLFSSL_KEIL
180269         "muls	r6, r5, r6\n\t"
180270 #elif defined(__clang__)
180271         "muls	r6, r5\n\t"
180272 #else
180273         "mul	r6, r5\n\t"
180274 #endif
180275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180276         "adds	r3, r3, r6\n\t"
180277 #else
180278         "add	r3, r3, r6\n\t"
180279 #endif
180280 #ifdef WOLFSSL_KEIL
180281         "adcs	r4, r4, %[r]\n\t"
180282 #elif defined(__clang__)
180283         "adcs	r4, %[r]\n\t"
180284 #else
180285         "adc	r4, %[r]\n\t"
180286 #endif
180287 #ifdef WOLFSSL_KEIL
180288         "adcs	r2, r2, %[r]\n\t"
180289 #elif defined(__clang__)
180290         "adcs	r2, %[r]\n\t"
180291 #else
180292         "adc	r2, %[r]\n\t"
180293 #endif
180294 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180295         "adds	r3, r3, r6\n\t"
180296 #else
180297         "add	r3, r3, r6\n\t"
180298 #endif
180299 #ifdef WOLFSSL_KEIL
180300         "adcs	r4, r4, %[r]\n\t"
180301 #elif defined(__clang__)
180302         "adcs	r4, %[r]\n\t"
180303 #else
180304         "adc	r4, %[r]\n\t"
180305 #endif
180306 #ifdef WOLFSSL_KEIL
180307         "adcs	r2, r2, %[r]\n\t"
180308 #elif defined(__clang__)
180309         "adcs	r2, %[r]\n\t"
180310 #else
180311         "adc	r2, %[r]\n\t"
180312 #endif
180313 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180314         "lsrs	r6, r7, #16\n\t"
180315 #else
180316         "lsr	r6, r7, #16\n\t"
180317 #endif
180318 #ifdef WOLFSSL_KEIL
180319         "muls	r5, r6, r5\n\t"
180320 #elif defined(__clang__)
180321         "muls	r5, r6\n\t"
180322 #else
180323         "mul	r5, r6\n\t"
180324 #endif
180325 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180326         "lsrs	r6, r5, #16\n\t"
180327 #else
180328         "lsr	r6, r5, #16\n\t"
180329 #endif
180330 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180331         "lsls	r5, r5, #16\n\t"
180332 #else
180333         "lsl	r5, r5, #16\n\t"
180334 #endif
180335 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180336         "adds	r3, r3, r5\n\t"
180337 #else
180338         "add	r3, r3, r5\n\t"
180339 #endif
180340 #ifdef WOLFSSL_KEIL
180341         "adcs	r4, r4, r6\n\t"
180342 #elif defined(__clang__)
180343         "adcs	r4, r6\n\t"
180344 #else
180345         "adc	r4, r6\n\t"
180346 #endif
180347 #ifdef WOLFSSL_KEIL
180348         "adcs	r2, r2, %[r]\n\t"
180349 #elif defined(__clang__)
180350         "adcs	r2, %[r]\n\t"
180351 #else
180352         "adc	r2, %[r]\n\t"
180353 #endif
180354 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180355         "adds	r3, r3, r5\n\t"
180356 #else
180357         "add	r3, r3, r5\n\t"
180358 #endif
180359 #ifdef WOLFSSL_KEIL
180360         "adcs	r4, r4, r6\n\t"
180361 #elif defined(__clang__)
180362         "adcs	r4, r6\n\t"
180363 #else
180364         "adc	r4, r6\n\t"
180365 #endif
180366 #ifdef WOLFSSL_KEIL
180367         "adcs	r2, r2, %[r]\n\t"
180368 #elif defined(__clang__)
180369         "adcs	r2, %[r]\n\t"
180370 #else
180371         "adc	r2, %[r]\n\t"
180372 #endif
180373 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180374         "lsrs	r5, %[a], #16\n\t"
180375 #else
180376         "lsr	r5, %[a], #16\n\t"
180377 #endif
180378 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180379         "lsrs	r6, r7, #16\n\t"
180380 #else
180381         "lsr	r6, r7, #16\n\t"
180382 #endif
180383 #ifdef WOLFSSL_KEIL
180384         "muls	r6, r5, r6\n\t"
180385 #elif defined(__clang__)
180386         "muls	r6, r5\n\t"
180387 #else
180388         "mul	r6, r5\n\t"
180389 #endif
180390 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180391         "adds	r4, r4, r6\n\t"
180392 #else
180393         "add	r4, r4, r6\n\t"
180394 #endif
180395 #ifdef WOLFSSL_KEIL
180396         "adcs	r2, r2, %[r]\n\t"
180397 #elif defined(__clang__)
180398         "adcs	r2, %[r]\n\t"
180399 #else
180400         "adc	r2, %[r]\n\t"
180401 #endif
180402 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180403         "adds	r4, r4, r6\n\t"
180404 #else
180405         "add	r4, r4, r6\n\t"
180406 #endif
180407 #ifdef WOLFSSL_KEIL
180408         "adcs	r2, r2, %[r]\n\t"
180409 #elif defined(__clang__)
180410         "adcs	r2, %[r]\n\t"
180411 #else
180412         "adc	r2, %[r]\n\t"
180413 #endif
180414         "uxth	r6, r7\n\t"
180415 #ifdef WOLFSSL_KEIL
180416         "muls	r5, r6, r5\n\t"
180417 #elif defined(__clang__)
180418         "muls	r5, r6\n\t"
180419 #else
180420         "mul	r5, r6\n\t"
180421 #endif
180422 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180423         "lsrs	r6, r5, #16\n\t"
180424 #else
180425         "lsr	r6, r5, #16\n\t"
180426 #endif
180427 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180428         "lsls	r5, r5, #16\n\t"
180429 #else
180430         "lsl	r5, r5, #16\n\t"
180431 #endif
180432 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180433         "adds	r3, r3, r5\n\t"
180434 #else
180435         "add	r3, r3, r5\n\t"
180436 #endif
180437 #ifdef WOLFSSL_KEIL
180438         "adcs	r4, r4, r6\n\t"
180439 #elif defined(__clang__)
180440         "adcs	r4, r6\n\t"
180441 #else
180442         "adc	r4, r6\n\t"
180443 #endif
180444 #ifdef WOLFSSL_KEIL
180445         "adcs	r2, r2, %[r]\n\t"
180446 #elif defined(__clang__)
180447         "adcs	r2, %[r]\n\t"
180448 #else
180449         "adc	r2, %[r]\n\t"
180450 #endif
180451 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180452         "adds	r3, r3, r5\n\t"
180453 #else
180454         "add	r3, r3, r5\n\t"
180455 #endif
180456 #ifdef WOLFSSL_KEIL
180457         "adcs	r4, r4, r6\n\t"
180458 #elif defined(__clang__)
180459         "adcs	r4, r6\n\t"
180460 #else
180461         "adc	r4, r6\n\t"
180462 #endif
180463 #ifdef WOLFSSL_KEIL
180464         "adcs	r2, r2, %[r]\n\t"
180465 #elif defined(__clang__)
180466         "adcs	r2, %[r]\n\t"
180467 #else
180468         "adc	r2, %[r]\n\t"
180469 #endif
180470         "#  A[14] * A[14]\n\t"
180471         "mov	r7, r12\n\t"
180472 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180473         "lsrs	r6, r7, #16\n\t"
180474 #else
180475         "lsr	r6, r7, #16\n\t"
180476 #endif
180477         "uxth	r5, r7\n\t"
180478 #ifdef WOLFSSL_KEIL
180479         "muls	r5, r5, r5\n\t"
180480 #elif defined(__clang__)
180481         "muls	r5, r5\n\t"
180482 #else
180483         "mul	r5, r5\n\t"
180484 #endif
180485 #ifdef WOLFSSL_KEIL
180486         "muls	r6, r6, r6\n\t"
180487 #elif defined(__clang__)
180488         "muls	r6, r6\n\t"
180489 #else
180490         "mul	r6, r6\n\t"
180491 #endif
180492 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180493         "adds	r3, r3, r5\n\t"
180494 #else
180495         "add	r3, r3, r5\n\t"
180496 #endif
180497 #ifdef WOLFSSL_KEIL
180498         "adcs	r4, r4, r6\n\t"
180499 #elif defined(__clang__)
180500         "adcs	r4, r6\n\t"
180501 #else
180502         "adc	r4, r6\n\t"
180503 #endif
180504 #ifdef WOLFSSL_KEIL
180505         "adcs	r2, r2, %[r]\n\t"
180506 #elif defined(__clang__)
180507         "adcs	r2, %[r]\n\t"
180508 #else
180509         "adc	r2, %[r]\n\t"
180510 #endif
180511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180512         "lsrs	r6, r7, #16\n\t"
180513 #else
180514         "lsr	r6, r7, #16\n\t"
180515 #endif
180516         "uxth	r5, r7\n\t"
180517 #ifdef WOLFSSL_KEIL
180518         "muls	r5, r6, r5\n\t"
180519 #elif defined(__clang__)
180520         "muls	r5, r6\n\t"
180521 #else
180522         "mul	r5, r6\n\t"
180523 #endif
180524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180525         "lsrs	r6, r5, #15\n\t"
180526 #else
180527         "lsr	r6, r5, #15\n\t"
180528 #endif
180529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180530         "lsls	r5, r5, #17\n\t"
180531 #else
180532         "lsl	r5, r5, #17\n\t"
180533 #endif
180534 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180535         "adds	r3, r3, r5\n\t"
180536 #else
180537         "add	r3, r3, r5\n\t"
180538 #endif
180539 #ifdef WOLFSSL_KEIL
180540         "adcs	r4, r4, r6\n\t"
180541 #elif defined(__clang__)
180542         "adcs	r4, r6\n\t"
180543 #else
180544         "adc	r4, r6\n\t"
180545 #endif
180546 #ifdef WOLFSSL_KEIL
180547         "adcs	r2, r2, %[r]\n\t"
180548 #elif defined(__clang__)
180549         "adcs	r2, %[r]\n\t"
180550 #else
180551         "adc	r2, %[r]\n\t"
180552 #endif
180553         "mov	%[r], r8\n\t"
180554         "str	r3, [%[r], #112]\n\t"
180555         "movs	%[r], #0\n\t"
180556         "#  A[15] * A[14]\n\t"
180557         "movs	r3, #0\n\t"
180558         "mov	%[a], r9\n\t"
180559         "mov	%[a], lr\n\t"
180560         "uxth	r5, %[a]\n\t"
180561         "uxth	r6, r7\n\t"
180562 #ifdef WOLFSSL_KEIL
180563         "muls	r6, r5, r6\n\t"
180564 #elif defined(__clang__)
180565         "muls	r6, r5\n\t"
180566 #else
180567         "mul	r6, r5\n\t"
180568 #endif
180569 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180570         "adds	r4, r4, r6\n\t"
180571 #else
180572         "add	r4, r4, r6\n\t"
180573 #endif
180574 #ifdef WOLFSSL_KEIL
180575         "adcs	r2, r2, %[r]\n\t"
180576 #elif defined(__clang__)
180577         "adcs	r2, %[r]\n\t"
180578 #else
180579         "adc	r2, %[r]\n\t"
180580 #endif
180581 #ifdef WOLFSSL_KEIL
180582         "adcs	r3, r3, %[r]\n\t"
180583 #elif defined(__clang__)
180584         "adcs	r3, %[r]\n\t"
180585 #else
180586         "adc	r3, %[r]\n\t"
180587 #endif
180588 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180589         "adds	r4, r4, r6\n\t"
180590 #else
180591         "add	r4, r4, r6\n\t"
180592 #endif
180593 #ifdef WOLFSSL_KEIL
180594         "adcs	r2, r2, %[r]\n\t"
180595 #elif defined(__clang__)
180596         "adcs	r2, %[r]\n\t"
180597 #else
180598         "adc	r2, %[r]\n\t"
180599 #endif
180600 #ifdef WOLFSSL_KEIL
180601         "adcs	r3, r3, %[r]\n\t"
180602 #elif defined(__clang__)
180603         "adcs	r3, %[r]\n\t"
180604 #else
180605         "adc	r3, %[r]\n\t"
180606 #endif
180607 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180608         "lsrs	r6, r7, #16\n\t"
180609 #else
180610         "lsr	r6, r7, #16\n\t"
180611 #endif
180612 #ifdef WOLFSSL_KEIL
180613         "muls	r5, r6, r5\n\t"
180614 #elif defined(__clang__)
180615         "muls	r5, r6\n\t"
180616 #else
180617         "mul	r5, r6\n\t"
180618 #endif
180619 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180620         "lsrs	r6, r5, #16\n\t"
180621 #else
180622         "lsr	r6, r5, #16\n\t"
180623 #endif
180624 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180625         "lsls	r5, r5, #16\n\t"
180626 #else
180627         "lsl	r5, r5, #16\n\t"
180628 #endif
180629 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180630         "adds	r4, r4, r5\n\t"
180631 #else
180632         "add	r4, r4, r5\n\t"
180633 #endif
180634 #ifdef WOLFSSL_KEIL
180635         "adcs	r2, r2, r6\n\t"
180636 #elif defined(__clang__)
180637         "adcs	r2, r6\n\t"
180638 #else
180639         "adc	r2, r6\n\t"
180640 #endif
180641 #ifdef WOLFSSL_KEIL
180642         "adcs	r3, r3, %[r]\n\t"
180643 #elif defined(__clang__)
180644         "adcs	r3, %[r]\n\t"
180645 #else
180646         "adc	r3, %[r]\n\t"
180647 #endif
180648 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180649         "adds	r4, r4, r5\n\t"
180650 #else
180651         "add	r4, r4, r5\n\t"
180652 #endif
180653 #ifdef WOLFSSL_KEIL
180654         "adcs	r2, r2, r6\n\t"
180655 #elif defined(__clang__)
180656         "adcs	r2, r6\n\t"
180657 #else
180658         "adc	r2, r6\n\t"
180659 #endif
180660 #ifdef WOLFSSL_KEIL
180661         "adcs	r3, r3, %[r]\n\t"
180662 #elif defined(__clang__)
180663         "adcs	r3, %[r]\n\t"
180664 #else
180665         "adc	r3, %[r]\n\t"
180666 #endif
180667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180668         "lsrs	r5, %[a], #16\n\t"
180669 #else
180670         "lsr	r5, %[a], #16\n\t"
180671 #endif
180672 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180673         "lsrs	r6, r7, #16\n\t"
180674 #else
180675         "lsr	r6, r7, #16\n\t"
180676 #endif
180677 #ifdef WOLFSSL_KEIL
180678         "muls	r6, r5, r6\n\t"
180679 #elif defined(__clang__)
180680         "muls	r6, r5\n\t"
180681 #else
180682         "mul	r6, r5\n\t"
180683 #endif
180684 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180685         "adds	r2, r2, r6\n\t"
180686 #else
180687         "add	r2, r2, r6\n\t"
180688 #endif
180689 #ifdef WOLFSSL_KEIL
180690         "adcs	r3, r3, %[r]\n\t"
180691 #elif defined(__clang__)
180692         "adcs	r3, %[r]\n\t"
180693 #else
180694         "adc	r3, %[r]\n\t"
180695 #endif
180696 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180697         "adds	r2, r2, r6\n\t"
180698 #else
180699         "add	r2, r2, r6\n\t"
180700 #endif
180701 #ifdef WOLFSSL_KEIL
180702         "adcs	r3, r3, %[r]\n\t"
180703 #elif defined(__clang__)
180704         "adcs	r3, %[r]\n\t"
180705 #else
180706         "adc	r3, %[r]\n\t"
180707 #endif
180708         "uxth	r6, r7\n\t"
180709 #ifdef WOLFSSL_KEIL
180710         "muls	r5, r6, r5\n\t"
180711 #elif defined(__clang__)
180712         "muls	r5, r6\n\t"
180713 #else
180714         "mul	r5, r6\n\t"
180715 #endif
180716 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180717         "lsrs	r6, r5, #16\n\t"
180718 #else
180719         "lsr	r6, r5, #16\n\t"
180720 #endif
180721 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180722         "lsls	r5, r5, #16\n\t"
180723 #else
180724         "lsl	r5, r5, #16\n\t"
180725 #endif
180726 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180727         "adds	r4, r4, r5\n\t"
180728 #else
180729         "add	r4, r4, r5\n\t"
180730 #endif
180731 #ifdef WOLFSSL_KEIL
180732         "adcs	r2, r2, r6\n\t"
180733 #elif defined(__clang__)
180734         "adcs	r2, r6\n\t"
180735 #else
180736         "adc	r2, r6\n\t"
180737 #endif
180738 #ifdef WOLFSSL_KEIL
180739         "adcs	r3, r3, %[r]\n\t"
180740 #elif defined(__clang__)
180741         "adcs	r3, %[r]\n\t"
180742 #else
180743         "adc	r3, %[r]\n\t"
180744 #endif
180745 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180746         "adds	r4, r4, r5\n\t"
180747 #else
180748         "add	r4, r4, r5\n\t"
180749 #endif
180750 #ifdef WOLFSSL_KEIL
180751         "adcs	r2, r2, r6\n\t"
180752 #elif defined(__clang__)
180753         "adcs	r2, r6\n\t"
180754 #else
180755         "adc	r2, r6\n\t"
180756 #endif
180757 #ifdef WOLFSSL_KEIL
180758         "adcs	r3, r3, %[r]\n\t"
180759 #elif defined(__clang__)
180760         "adcs	r3, %[r]\n\t"
180761 #else
180762         "adc	r3, %[r]\n\t"
180763 #endif
180764         "mov	%[r], r8\n\t"
180765         "str	r4, [%[r], #116]\n\t"
180766         "movs	%[r], #0\n\t"
180767         "#  A[15] * A[15]\n\t"
180768         "mov	%[a], r9\n\t"
180769         "mov	r7, lr\n\t"
180770 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180771         "lsrs	r6, r7, #16\n\t"
180772 #else
180773         "lsr	r6, r7, #16\n\t"
180774 #endif
180775         "uxth	r5, r7\n\t"
180776 #ifdef WOLFSSL_KEIL
180777         "muls	r5, r5, r5\n\t"
180778 #elif defined(__clang__)
180779         "muls	r5, r5\n\t"
180780 #else
180781         "mul	r5, r5\n\t"
180782 #endif
180783 #ifdef WOLFSSL_KEIL
180784         "muls	r6, r6, r6\n\t"
180785 #elif defined(__clang__)
180786         "muls	r6, r6\n\t"
180787 #else
180788         "mul	r6, r6\n\t"
180789 #endif
180790 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180791         "adds	r2, r2, r5\n\t"
180792 #else
180793         "add	r2, r2, r5\n\t"
180794 #endif
180795 #ifdef WOLFSSL_KEIL
180796         "adcs	r3, r3, r6\n\t"
180797 #elif defined(__clang__)
180798         "adcs	r3, r6\n\t"
180799 #else
180800         "adc	r3, r6\n\t"
180801 #endif
180802 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180803         "lsrs	r6, r7, #16\n\t"
180804 #else
180805         "lsr	r6, r7, #16\n\t"
180806 #endif
180807         "uxth	r5, r7\n\t"
180808 #ifdef WOLFSSL_KEIL
180809         "muls	r5, r6, r5\n\t"
180810 #elif defined(__clang__)
180811         "muls	r5, r6\n\t"
180812 #else
180813         "mul	r5, r6\n\t"
180814 #endif
180815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180816         "lsrs	r6, r5, #15\n\t"
180817 #else
180818         "lsr	r6, r5, #15\n\t"
180819 #endif
180820 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180821         "lsls	r5, r5, #17\n\t"
180822 #else
180823         "lsl	r5, r5, #17\n\t"
180824 #endif
180825 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180826         "adds	r2, r2, r5\n\t"
180827 #else
180828         "add	r2, r2, r5\n\t"
180829 #endif
180830 #ifdef WOLFSSL_KEIL
180831         "adcs	r3, r3, r6\n\t"
180832 #elif defined(__clang__)
180833         "adcs	r3, r6\n\t"
180834 #else
180835         "adc	r3, r6\n\t"
180836 #endif
180837         "mov	%[r], r8\n\t"
180838         "str	r2, [%[r], #120]\n\t"
180839         "str	r3, [%[r], #124]\n\t"
180840         "pop	{r2, r3, r4, r5}\n\t"
180841         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
180842         "pop	{r2, r3, r4, r5}\n\t"
180843         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
180844         "pop	{r2, r3, r4, r5}\n\t"
180845         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
180846         "pop	{r2, r3, r4, r5}\n\t"
180847         "stm	%[r]!, {r2, r3, r4, r5}\n\t"
180848         : [r] "+r" (r), [a] "+r" (a)
180849         :
180850         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "lr"
180851     );
180852 }
180853 
180854 #endif /* !WOLFSSL_SP_LARGE_CODE */
180855 /* Add b to a into r. (r = a + b)
180856  *
180857  * r  A single precision integer.
180858  * a  A single precision integer.
180859  * b  A single precision integer.
180860  */
sp_1024_add_16(sp_digit * r,const sp_digit * a,const sp_digit * b)180861 SP_NOINLINE static sp_digit sp_1024_add_16(sp_digit* r, const sp_digit* a,
180862         const sp_digit* b)
180863 {
180864     __asm__ __volatile__ (
180865         "ldm	%[b]!, {r5, r6}\n\t"
180866         "ldm	%[a]!, {r3, r4}\n\t"
180867 #if defined(__clang__) || defined(WOLFSSL_KEIL)
180868         "adds	r3, r3, r5\n\t"
180869 #else
180870         "add	r3, r3, r5\n\t"
180871 #endif
180872 #ifdef WOLFSSL_KEIL
180873         "adcs	r4, r4, r6\n\t"
180874 #elif defined(__clang__)
180875         "adcs	r4, r6\n\t"
180876 #else
180877         "adc	r4, r6\n\t"
180878 #endif
180879         "stm	%[r]!, {r3, r4}\n\t"
180880         "ldm	%[b]!, {r5, r6}\n\t"
180881         "ldm	%[a]!, {r3, r4}\n\t"
180882 #ifdef WOLFSSL_KEIL
180883         "adcs	r3, r3, r5\n\t"
180884 #elif defined(__clang__)
180885         "adcs	r3, r5\n\t"
180886 #else
180887         "adc	r3, r5\n\t"
180888 #endif
180889 #ifdef WOLFSSL_KEIL
180890         "adcs	r4, r4, r6\n\t"
180891 #elif defined(__clang__)
180892         "adcs	r4, r6\n\t"
180893 #else
180894         "adc	r4, r6\n\t"
180895 #endif
180896         "stm	%[r]!, {r3, r4}\n\t"
180897         "ldm	%[b]!, {r5, r6}\n\t"
180898         "ldm	%[a]!, {r3, r4}\n\t"
180899 #ifdef WOLFSSL_KEIL
180900         "adcs	r3, r3, r5\n\t"
180901 #elif defined(__clang__)
180902         "adcs	r3, r5\n\t"
180903 #else
180904         "adc	r3, r5\n\t"
180905 #endif
180906 #ifdef WOLFSSL_KEIL
180907         "adcs	r4, r4, r6\n\t"
180908 #elif defined(__clang__)
180909         "adcs	r4, r6\n\t"
180910 #else
180911         "adc	r4, r6\n\t"
180912 #endif
180913         "stm	%[r]!, {r3, r4}\n\t"
180914         "ldm	%[b]!, {r5, r6}\n\t"
180915         "ldm	%[a]!, {r3, r4}\n\t"
180916 #ifdef WOLFSSL_KEIL
180917         "adcs	r3, r3, r5\n\t"
180918 #elif defined(__clang__)
180919         "adcs	r3, r5\n\t"
180920 #else
180921         "adc	r3, r5\n\t"
180922 #endif
180923 #ifdef WOLFSSL_KEIL
180924         "adcs	r4, r4, r6\n\t"
180925 #elif defined(__clang__)
180926         "adcs	r4, r6\n\t"
180927 #else
180928         "adc	r4, r6\n\t"
180929 #endif
180930         "stm	%[r]!, {r3, r4}\n\t"
180931         "ldm	%[b]!, {r5, r6}\n\t"
180932         "ldm	%[a]!, {r3, r4}\n\t"
180933 #ifdef WOLFSSL_KEIL
180934         "adcs	r3, r3, r5\n\t"
180935 #elif defined(__clang__)
180936         "adcs	r3, r5\n\t"
180937 #else
180938         "adc	r3, r5\n\t"
180939 #endif
180940 #ifdef WOLFSSL_KEIL
180941         "adcs	r4, r4, r6\n\t"
180942 #elif defined(__clang__)
180943         "adcs	r4, r6\n\t"
180944 #else
180945         "adc	r4, r6\n\t"
180946 #endif
180947         "stm	%[r]!, {r3, r4}\n\t"
180948         "ldm	%[b]!, {r5, r6}\n\t"
180949         "ldm	%[a]!, {r3, r4}\n\t"
180950 #ifdef WOLFSSL_KEIL
180951         "adcs	r3, r3, r5\n\t"
180952 #elif defined(__clang__)
180953         "adcs	r3, r5\n\t"
180954 #else
180955         "adc	r3, r5\n\t"
180956 #endif
180957 #ifdef WOLFSSL_KEIL
180958         "adcs	r4, r4, r6\n\t"
180959 #elif defined(__clang__)
180960         "adcs	r4, r6\n\t"
180961 #else
180962         "adc	r4, r6\n\t"
180963 #endif
180964         "stm	%[r]!, {r3, r4}\n\t"
180965         "ldm	%[b]!, {r5, r6}\n\t"
180966         "ldm	%[a]!, {r3, r4}\n\t"
180967 #ifdef WOLFSSL_KEIL
180968         "adcs	r3, r3, r5\n\t"
180969 #elif defined(__clang__)
180970         "adcs	r3, r5\n\t"
180971 #else
180972         "adc	r3, r5\n\t"
180973 #endif
180974 #ifdef WOLFSSL_KEIL
180975         "adcs	r4, r4, r6\n\t"
180976 #elif defined(__clang__)
180977         "adcs	r4, r6\n\t"
180978 #else
180979         "adc	r4, r6\n\t"
180980 #endif
180981         "stm	%[r]!, {r3, r4}\n\t"
180982         "ldm	%[b]!, {r5, r6}\n\t"
180983         "ldm	%[a]!, {r3, r4}\n\t"
180984 #ifdef WOLFSSL_KEIL
180985         "adcs	r3, r3, r5\n\t"
180986 #elif defined(__clang__)
180987         "adcs	r3, r5\n\t"
180988 #else
180989         "adc	r3, r5\n\t"
180990 #endif
180991 #ifdef WOLFSSL_KEIL
180992         "adcs	r4, r4, r6\n\t"
180993 #elif defined(__clang__)
180994         "adcs	r4, r6\n\t"
180995 #else
180996         "adc	r4, r6\n\t"
180997 #endif
180998         "stm	%[r]!, {r3, r4}\n\t"
180999         "movs	%[r], #0\n\t"
181000 #ifdef WOLFSSL_KEIL
181001         "adcs	%[r], %[r], %[r]\n\t"
181002 #elif defined(__clang__)
181003         "adcs	%[r], %[r]\n\t"
181004 #else
181005         "adc	%[r], %[r]\n\t"
181006 #endif
181007         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
181008         :
181009         : "memory", "r3", "r4", "r5", "r6"
181010     );
181011     return (uint32_t)(size_t)r;
181012 }
181013 
181014 /* Sub b from a into a. (a -= b)
181015  *
181016  * a  A single precision integer.
181017  * b  A single precision integer.
181018  */
sp_1024_sub_in_place_32(sp_digit * a,const sp_digit * b)181019 SP_NOINLINE static sp_digit sp_1024_sub_in_place_32(sp_digit* a,
181020         const sp_digit* b)
181021 {
181022     __asm__ __volatile__ (
181023         "ldm	%[b]!, {r4, r5}\n\t"
181024         "ldr	r2, [%[a]]\n\t"
181025         "ldr	r3, [%[a], #4]\n\t"
181026 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181027         "subs	r2, r2, r4\n\t"
181028 #else
181029         "sub	r2, r2, r4\n\t"
181030 #endif
181031 #ifdef WOLFSSL_KEIL
181032         "sbcs	r3, r3, r5\n\t"
181033 #elif defined(__clang__)
181034         "sbcs	r3, r5\n\t"
181035 #else
181036         "sbc	r3, r5\n\t"
181037 #endif
181038         "stm	%[a]!, {r2, r3}\n\t"
181039         "ldm	%[b]!, {r4, r5}\n\t"
181040         "ldr	r2, [%[a]]\n\t"
181041         "ldr	r3, [%[a], #4]\n\t"
181042 #ifdef WOLFSSL_KEIL
181043         "sbcs	r2, r2, r4\n\t"
181044 #elif defined(__clang__)
181045         "sbcs	r2, r4\n\t"
181046 #else
181047         "sbc	r2, r4\n\t"
181048 #endif
181049 #ifdef WOLFSSL_KEIL
181050         "sbcs	r3, r3, r5\n\t"
181051 #elif defined(__clang__)
181052         "sbcs	r3, r5\n\t"
181053 #else
181054         "sbc	r3, r5\n\t"
181055 #endif
181056         "stm	%[a]!, {r2, r3}\n\t"
181057         "ldm	%[b]!, {r4, r5}\n\t"
181058         "ldr	r2, [%[a]]\n\t"
181059         "ldr	r3, [%[a], #4]\n\t"
181060 #ifdef WOLFSSL_KEIL
181061         "sbcs	r2, r2, r4\n\t"
181062 #elif defined(__clang__)
181063         "sbcs	r2, r4\n\t"
181064 #else
181065         "sbc	r2, r4\n\t"
181066 #endif
181067 #ifdef WOLFSSL_KEIL
181068         "sbcs	r3, r3, r5\n\t"
181069 #elif defined(__clang__)
181070         "sbcs	r3, r5\n\t"
181071 #else
181072         "sbc	r3, r5\n\t"
181073 #endif
181074         "stm	%[a]!, {r2, r3}\n\t"
181075         "ldm	%[b]!, {r4, r5}\n\t"
181076         "ldr	r2, [%[a]]\n\t"
181077         "ldr	r3, [%[a], #4]\n\t"
181078 #ifdef WOLFSSL_KEIL
181079         "sbcs	r2, r2, r4\n\t"
181080 #elif defined(__clang__)
181081         "sbcs	r2, r4\n\t"
181082 #else
181083         "sbc	r2, r4\n\t"
181084 #endif
181085 #ifdef WOLFSSL_KEIL
181086         "sbcs	r3, r3, r5\n\t"
181087 #elif defined(__clang__)
181088         "sbcs	r3, r5\n\t"
181089 #else
181090         "sbc	r3, r5\n\t"
181091 #endif
181092         "stm	%[a]!, {r2, r3}\n\t"
181093         "ldm	%[b]!, {r4, r5}\n\t"
181094         "ldr	r2, [%[a]]\n\t"
181095         "ldr	r3, [%[a], #4]\n\t"
181096 #ifdef WOLFSSL_KEIL
181097         "sbcs	r2, r2, r4\n\t"
181098 #elif defined(__clang__)
181099         "sbcs	r2, r4\n\t"
181100 #else
181101         "sbc	r2, r4\n\t"
181102 #endif
181103 #ifdef WOLFSSL_KEIL
181104         "sbcs	r3, r3, r5\n\t"
181105 #elif defined(__clang__)
181106         "sbcs	r3, r5\n\t"
181107 #else
181108         "sbc	r3, r5\n\t"
181109 #endif
181110         "stm	%[a]!, {r2, r3}\n\t"
181111         "ldm	%[b]!, {r4, r5}\n\t"
181112         "ldr	r2, [%[a]]\n\t"
181113         "ldr	r3, [%[a], #4]\n\t"
181114 #ifdef WOLFSSL_KEIL
181115         "sbcs	r2, r2, r4\n\t"
181116 #elif defined(__clang__)
181117         "sbcs	r2, r4\n\t"
181118 #else
181119         "sbc	r2, r4\n\t"
181120 #endif
181121 #ifdef WOLFSSL_KEIL
181122         "sbcs	r3, r3, r5\n\t"
181123 #elif defined(__clang__)
181124         "sbcs	r3, r5\n\t"
181125 #else
181126         "sbc	r3, r5\n\t"
181127 #endif
181128         "stm	%[a]!, {r2, r3}\n\t"
181129         "ldm	%[b]!, {r4, r5}\n\t"
181130         "ldr	r2, [%[a]]\n\t"
181131         "ldr	r3, [%[a], #4]\n\t"
181132 #ifdef WOLFSSL_KEIL
181133         "sbcs	r2, r2, r4\n\t"
181134 #elif defined(__clang__)
181135         "sbcs	r2, r4\n\t"
181136 #else
181137         "sbc	r2, r4\n\t"
181138 #endif
181139 #ifdef WOLFSSL_KEIL
181140         "sbcs	r3, r3, r5\n\t"
181141 #elif defined(__clang__)
181142         "sbcs	r3, r5\n\t"
181143 #else
181144         "sbc	r3, r5\n\t"
181145 #endif
181146         "stm	%[a]!, {r2, r3}\n\t"
181147         "ldm	%[b]!, {r4, r5}\n\t"
181148         "ldr	r2, [%[a]]\n\t"
181149         "ldr	r3, [%[a], #4]\n\t"
181150 #ifdef WOLFSSL_KEIL
181151         "sbcs	r2, r2, r4\n\t"
181152 #elif defined(__clang__)
181153         "sbcs	r2, r4\n\t"
181154 #else
181155         "sbc	r2, r4\n\t"
181156 #endif
181157 #ifdef WOLFSSL_KEIL
181158         "sbcs	r3, r3, r5\n\t"
181159 #elif defined(__clang__)
181160         "sbcs	r3, r5\n\t"
181161 #else
181162         "sbc	r3, r5\n\t"
181163 #endif
181164         "stm	%[a]!, {r2, r3}\n\t"
181165         "ldm	%[b]!, {r4, r5}\n\t"
181166         "ldr	r2, [%[a]]\n\t"
181167         "ldr	r3, [%[a], #4]\n\t"
181168 #ifdef WOLFSSL_KEIL
181169         "sbcs	r2, r2, r4\n\t"
181170 #elif defined(__clang__)
181171         "sbcs	r2, r4\n\t"
181172 #else
181173         "sbc	r2, r4\n\t"
181174 #endif
181175 #ifdef WOLFSSL_KEIL
181176         "sbcs	r3, r3, r5\n\t"
181177 #elif defined(__clang__)
181178         "sbcs	r3, r5\n\t"
181179 #else
181180         "sbc	r3, r5\n\t"
181181 #endif
181182         "stm	%[a]!, {r2, r3}\n\t"
181183         "ldm	%[b]!, {r4, r5}\n\t"
181184         "ldr	r2, [%[a]]\n\t"
181185         "ldr	r3, [%[a], #4]\n\t"
181186 #ifdef WOLFSSL_KEIL
181187         "sbcs	r2, r2, r4\n\t"
181188 #elif defined(__clang__)
181189         "sbcs	r2, r4\n\t"
181190 #else
181191         "sbc	r2, r4\n\t"
181192 #endif
181193 #ifdef WOLFSSL_KEIL
181194         "sbcs	r3, r3, r5\n\t"
181195 #elif defined(__clang__)
181196         "sbcs	r3, r5\n\t"
181197 #else
181198         "sbc	r3, r5\n\t"
181199 #endif
181200         "stm	%[a]!, {r2, r3}\n\t"
181201         "ldm	%[b]!, {r4, r5}\n\t"
181202         "ldr	r2, [%[a]]\n\t"
181203         "ldr	r3, [%[a], #4]\n\t"
181204 #ifdef WOLFSSL_KEIL
181205         "sbcs	r2, r2, r4\n\t"
181206 #elif defined(__clang__)
181207         "sbcs	r2, r4\n\t"
181208 #else
181209         "sbc	r2, r4\n\t"
181210 #endif
181211 #ifdef WOLFSSL_KEIL
181212         "sbcs	r3, r3, r5\n\t"
181213 #elif defined(__clang__)
181214         "sbcs	r3, r5\n\t"
181215 #else
181216         "sbc	r3, r5\n\t"
181217 #endif
181218         "stm	%[a]!, {r2, r3}\n\t"
181219         "ldm	%[b]!, {r4, r5}\n\t"
181220         "ldr	r2, [%[a]]\n\t"
181221         "ldr	r3, [%[a], #4]\n\t"
181222 #ifdef WOLFSSL_KEIL
181223         "sbcs	r2, r2, r4\n\t"
181224 #elif defined(__clang__)
181225         "sbcs	r2, r4\n\t"
181226 #else
181227         "sbc	r2, r4\n\t"
181228 #endif
181229 #ifdef WOLFSSL_KEIL
181230         "sbcs	r3, r3, r5\n\t"
181231 #elif defined(__clang__)
181232         "sbcs	r3, r5\n\t"
181233 #else
181234         "sbc	r3, r5\n\t"
181235 #endif
181236         "stm	%[a]!, {r2, r3}\n\t"
181237         "ldm	%[b]!, {r4, r5}\n\t"
181238         "ldr	r2, [%[a]]\n\t"
181239         "ldr	r3, [%[a], #4]\n\t"
181240 #ifdef WOLFSSL_KEIL
181241         "sbcs	r2, r2, r4\n\t"
181242 #elif defined(__clang__)
181243         "sbcs	r2, r4\n\t"
181244 #else
181245         "sbc	r2, r4\n\t"
181246 #endif
181247 #ifdef WOLFSSL_KEIL
181248         "sbcs	r3, r3, r5\n\t"
181249 #elif defined(__clang__)
181250         "sbcs	r3, r5\n\t"
181251 #else
181252         "sbc	r3, r5\n\t"
181253 #endif
181254         "stm	%[a]!, {r2, r3}\n\t"
181255         "ldm	%[b]!, {r4, r5}\n\t"
181256         "ldr	r2, [%[a]]\n\t"
181257         "ldr	r3, [%[a], #4]\n\t"
181258 #ifdef WOLFSSL_KEIL
181259         "sbcs	r2, r2, r4\n\t"
181260 #elif defined(__clang__)
181261         "sbcs	r2, r4\n\t"
181262 #else
181263         "sbc	r2, r4\n\t"
181264 #endif
181265 #ifdef WOLFSSL_KEIL
181266         "sbcs	r3, r3, r5\n\t"
181267 #elif defined(__clang__)
181268         "sbcs	r3, r5\n\t"
181269 #else
181270         "sbc	r3, r5\n\t"
181271 #endif
181272         "stm	%[a]!, {r2, r3}\n\t"
181273         "ldm	%[b]!, {r4, r5}\n\t"
181274         "ldr	r2, [%[a]]\n\t"
181275         "ldr	r3, [%[a], #4]\n\t"
181276 #ifdef WOLFSSL_KEIL
181277         "sbcs	r2, r2, r4\n\t"
181278 #elif defined(__clang__)
181279         "sbcs	r2, r4\n\t"
181280 #else
181281         "sbc	r2, r4\n\t"
181282 #endif
181283 #ifdef WOLFSSL_KEIL
181284         "sbcs	r3, r3, r5\n\t"
181285 #elif defined(__clang__)
181286         "sbcs	r3, r5\n\t"
181287 #else
181288         "sbc	r3, r5\n\t"
181289 #endif
181290         "stm	%[a]!, {r2, r3}\n\t"
181291         "ldm	%[b]!, {r4, r5}\n\t"
181292         "ldr	r2, [%[a]]\n\t"
181293         "ldr	r3, [%[a], #4]\n\t"
181294 #ifdef WOLFSSL_KEIL
181295         "sbcs	r2, r2, r4\n\t"
181296 #elif defined(__clang__)
181297         "sbcs	r2, r4\n\t"
181298 #else
181299         "sbc	r2, r4\n\t"
181300 #endif
181301 #ifdef WOLFSSL_KEIL
181302         "sbcs	r3, r3, r5\n\t"
181303 #elif defined(__clang__)
181304         "sbcs	r3, r5\n\t"
181305 #else
181306         "sbc	r3, r5\n\t"
181307 #endif
181308         "stm	%[a]!, {r2, r3}\n\t"
181309 #ifdef WOLFSSL_KEIL
181310         "sbcs	%[a], %[a], %[a]\n\t"
181311 #elif defined(__clang__)
181312         "sbcs	%[a], %[a]\n\t"
181313 #else
181314         "sbc	%[a], %[a]\n\t"
181315 #endif
181316         : [a] "+r" (a), [b] "+r" (b)
181317         :
181318         : "memory", "r2", "r3", "r4", "r5"
181319     );
181320     return (uint32_t)(size_t)a;
181321 }
181322 
181323 /* Add b to a into r. (r = a + b)
181324  *
181325  * r  A single precision integer.
181326  * a  A single precision integer.
181327  * b  A single precision integer.
181328  */
sp_1024_add_32(sp_digit * r,const sp_digit * a,const sp_digit * b)181329 SP_NOINLINE static sp_digit sp_1024_add_32(sp_digit* r, const sp_digit* a,
181330         const sp_digit* b)
181331 {
181332     __asm__ __volatile__ (
181333         "ldm	%[b]!, {r5, r6}\n\t"
181334         "ldm	%[a]!, {r3, r4}\n\t"
181335 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181336         "adds	r3, r3, r5\n\t"
181337 #else
181338         "add	r3, r3, r5\n\t"
181339 #endif
181340 #ifdef WOLFSSL_KEIL
181341         "adcs	r4, r4, r6\n\t"
181342 #elif defined(__clang__)
181343         "adcs	r4, r6\n\t"
181344 #else
181345         "adc	r4, r6\n\t"
181346 #endif
181347         "stm	%[r]!, {r3, r4}\n\t"
181348         "ldm	%[b]!, {r5, r6}\n\t"
181349         "ldm	%[a]!, {r3, r4}\n\t"
181350 #ifdef WOLFSSL_KEIL
181351         "adcs	r3, r3, r5\n\t"
181352 #elif defined(__clang__)
181353         "adcs	r3, r5\n\t"
181354 #else
181355         "adc	r3, r5\n\t"
181356 #endif
181357 #ifdef WOLFSSL_KEIL
181358         "adcs	r4, r4, r6\n\t"
181359 #elif defined(__clang__)
181360         "adcs	r4, r6\n\t"
181361 #else
181362         "adc	r4, r6\n\t"
181363 #endif
181364         "stm	%[r]!, {r3, r4}\n\t"
181365         "ldm	%[b]!, {r5, r6}\n\t"
181366         "ldm	%[a]!, {r3, r4}\n\t"
181367 #ifdef WOLFSSL_KEIL
181368         "adcs	r3, r3, r5\n\t"
181369 #elif defined(__clang__)
181370         "adcs	r3, r5\n\t"
181371 #else
181372         "adc	r3, r5\n\t"
181373 #endif
181374 #ifdef WOLFSSL_KEIL
181375         "adcs	r4, r4, r6\n\t"
181376 #elif defined(__clang__)
181377         "adcs	r4, r6\n\t"
181378 #else
181379         "adc	r4, r6\n\t"
181380 #endif
181381         "stm	%[r]!, {r3, r4}\n\t"
181382         "ldm	%[b]!, {r5, r6}\n\t"
181383         "ldm	%[a]!, {r3, r4}\n\t"
181384 #ifdef WOLFSSL_KEIL
181385         "adcs	r3, r3, r5\n\t"
181386 #elif defined(__clang__)
181387         "adcs	r3, r5\n\t"
181388 #else
181389         "adc	r3, r5\n\t"
181390 #endif
181391 #ifdef WOLFSSL_KEIL
181392         "adcs	r4, r4, r6\n\t"
181393 #elif defined(__clang__)
181394         "adcs	r4, r6\n\t"
181395 #else
181396         "adc	r4, r6\n\t"
181397 #endif
181398         "stm	%[r]!, {r3, r4}\n\t"
181399         "ldm	%[b]!, {r5, r6}\n\t"
181400         "ldm	%[a]!, {r3, r4}\n\t"
181401 #ifdef WOLFSSL_KEIL
181402         "adcs	r3, r3, r5\n\t"
181403 #elif defined(__clang__)
181404         "adcs	r3, r5\n\t"
181405 #else
181406         "adc	r3, r5\n\t"
181407 #endif
181408 #ifdef WOLFSSL_KEIL
181409         "adcs	r4, r4, r6\n\t"
181410 #elif defined(__clang__)
181411         "adcs	r4, r6\n\t"
181412 #else
181413         "adc	r4, r6\n\t"
181414 #endif
181415         "stm	%[r]!, {r3, r4}\n\t"
181416         "ldm	%[b]!, {r5, r6}\n\t"
181417         "ldm	%[a]!, {r3, r4}\n\t"
181418 #ifdef WOLFSSL_KEIL
181419         "adcs	r3, r3, r5\n\t"
181420 #elif defined(__clang__)
181421         "adcs	r3, r5\n\t"
181422 #else
181423         "adc	r3, r5\n\t"
181424 #endif
181425 #ifdef WOLFSSL_KEIL
181426         "adcs	r4, r4, r6\n\t"
181427 #elif defined(__clang__)
181428         "adcs	r4, r6\n\t"
181429 #else
181430         "adc	r4, r6\n\t"
181431 #endif
181432         "stm	%[r]!, {r3, r4}\n\t"
181433         "ldm	%[b]!, {r5, r6}\n\t"
181434         "ldm	%[a]!, {r3, r4}\n\t"
181435 #ifdef WOLFSSL_KEIL
181436         "adcs	r3, r3, r5\n\t"
181437 #elif defined(__clang__)
181438         "adcs	r3, r5\n\t"
181439 #else
181440         "adc	r3, r5\n\t"
181441 #endif
181442 #ifdef WOLFSSL_KEIL
181443         "adcs	r4, r4, r6\n\t"
181444 #elif defined(__clang__)
181445         "adcs	r4, r6\n\t"
181446 #else
181447         "adc	r4, r6\n\t"
181448 #endif
181449         "stm	%[r]!, {r3, r4}\n\t"
181450         "ldm	%[b]!, {r5, r6}\n\t"
181451         "ldm	%[a]!, {r3, r4}\n\t"
181452 #ifdef WOLFSSL_KEIL
181453         "adcs	r3, r3, r5\n\t"
181454 #elif defined(__clang__)
181455         "adcs	r3, r5\n\t"
181456 #else
181457         "adc	r3, r5\n\t"
181458 #endif
181459 #ifdef WOLFSSL_KEIL
181460         "adcs	r4, r4, r6\n\t"
181461 #elif defined(__clang__)
181462         "adcs	r4, r6\n\t"
181463 #else
181464         "adc	r4, r6\n\t"
181465 #endif
181466         "stm	%[r]!, {r3, r4}\n\t"
181467         "ldm	%[b]!, {r5, r6}\n\t"
181468         "ldm	%[a]!, {r3, r4}\n\t"
181469 #ifdef WOLFSSL_KEIL
181470         "adcs	r3, r3, r5\n\t"
181471 #elif defined(__clang__)
181472         "adcs	r3, r5\n\t"
181473 #else
181474         "adc	r3, r5\n\t"
181475 #endif
181476 #ifdef WOLFSSL_KEIL
181477         "adcs	r4, r4, r6\n\t"
181478 #elif defined(__clang__)
181479         "adcs	r4, r6\n\t"
181480 #else
181481         "adc	r4, r6\n\t"
181482 #endif
181483         "stm	%[r]!, {r3, r4}\n\t"
181484         "ldm	%[b]!, {r5, r6}\n\t"
181485         "ldm	%[a]!, {r3, r4}\n\t"
181486 #ifdef WOLFSSL_KEIL
181487         "adcs	r3, r3, r5\n\t"
181488 #elif defined(__clang__)
181489         "adcs	r3, r5\n\t"
181490 #else
181491         "adc	r3, r5\n\t"
181492 #endif
181493 #ifdef WOLFSSL_KEIL
181494         "adcs	r4, r4, r6\n\t"
181495 #elif defined(__clang__)
181496         "adcs	r4, r6\n\t"
181497 #else
181498         "adc	r4, r6\n\t"
181499 #endif
181500         "stm	%[r]!, {r3, r4}\n\t"
181501         "ldm	%[b]!, {r5, r6}\n\t"
181502         "ldm	%[a]!, {r3, r4}\n\t"
181503 #ifdef WOLFSSL_KEIL
181504         "adcs	r3, r3, r5\n\t"
181505 #elif defined(__clang__)
181506         "adcs	r3, r5\n\t"
181507 #else
181508         "adc	r3, r5\n\t"
181509 #endif
181510 #ifdef WOLFSSL_KEIL
181511         "adcs	r4, r4, r6\n\t"
181512 #elif defined(__clang__)
181513         "adcs	r4, r6\n\t"
181514 #else
181515         "adc	r4, r6\n\t"
181516 #endif
181517         "stm	%[r]!, {r3, r4}\n\t"
181518         "ldm	%[b]!, {r5, r6}\n\t"
181519         "ldm	%[a]!, {r3, r4}\n\t"
181520 #ifdef WOLFSSL_KEIL
181521         "adcs	r3, r3, r5\n\t"
181522 #elif defined(__clang__)
181523         "adcs	r3, r5\n\t"
181524 #else
181525         "adc	r3, r5\n\t"
181526 #endif
181527 #ifdef WOLFSSL_KEIL
181528         "adcs	r4, r4, r6\n\t"
181529 #elif defined(__clang__)
181530         "adcs	r4, r6\n\t"
181531 #else
181532         "adc	r4, r6\n\t"
181533 #endif
181534         "stm	%[r]!, {r3, r4}\n\t"
181535         "ldm	%[b]!, {r5, r6}\n\t"
181536         "ldm	%[a]!, {r3, r4}\n\t"
181537 #ifdef WOLFSSL_KEIL
181538         "adcs	r3, r3, r5\n\t"
181539 #elif defined(__clang__)
181540         "adcs	r3, r5\n\t"
181541 #else
181542         "adc	r3, r5\n\t"
181543 #endif
181544 #ifdef WOLFSSL_KEIL
181545         "adcs	r4, r4, r6\n\t"
181546 #elif defined(__clang__)
181547         "adcs	r4, r6\n\t"
181548 #else
181549         "adc	r4, r6\n\t"
181550 #endif
181551         "stm	%[r]!, {r3, r4}\n\t"
181552         "ldm	%[b]!, {r5, r6}\n\t"
181553         "ldm	%[a]!, {r3, r4}\n\t"
181554 #ifdef WOLFSSL_KEIL
181555         "adcs	r3, r3, r5\n\t"
181556 #elif defined(__clang__)
181557         "adcs	r3, r5\n\t"
181558 #else
181559         "adc	r3, r5\n\t"
181560 #endif
181561 #ifdef WOLFSSL_KEIL
181562         "adcs	r4, r4, r6\n\t"
181563 #elif defined(__clang__)
181564         "adcs	r4, r6\n\t"
181565 #else
181566         "adc	r4, r6\n\t"
181567 #endif
181568         "stm	%[r]!, {r3, r4}\n\t"
181569         "ldm	%[b]!, {r5, r6}\n\t"
181570         "ldm	%[a]!, {r3, r4}\n\t"
181571 #ifdef WOLFSSL_KEIL
181572         "adcs	r3, r3, r5\n\t"
181573 #elif defined(__clang__)
181574         "adcs	r3, r5\n\t"
181575 #else
181576         "adc	r3, r5\n\t"
181577 #endif
181578 #ifdef WOLFSSL_KEIL
181579         "adcs	r4, r4, r6\n\t"
181580 #elif defined(__clang__)
181581         "adcs	r4, r6\n\t"
181582 #else
181583         "adc	r4, r6\n\t"
181584 #endif
181585         "stm	%[r]!, {r3, r4}\n\t"
181586         "ldm	%[b]!, {r5, r6}\n\t"
181587         "ldm	%[a]!, {r3, r4}\n\t"
181588 #ifdef WOLFSSL_KEIL
181589         "adcs	r3, r3, r5\n\t"
181590 #elif defined(__clang__)
181591         "adcs	r3, r5\n\t"
181592 #else
181593         "adc	r3, r5\n\t"
181594 #endif
181595 #ifdef WOLFSSL_KEIL
181596         "adcs	r4, r4, r6\n\t"
181597 #elif defined(__clang__)
181598         "adcs	r4, r6\n\t"
181599 #else
181600         "adc	r4, r6\n\t"
181601 #endif
181602         "stm	%[r]!, {r3, r4}\n\t"
181603         "movs	%[r], #0\n\t"
181604 #ifdef WOLFSSL_KEIL
181605         "adcs	%[r], %[r], %[r]\n\t"
181606 #elif defined(__clang__)
181607         "adcs	%[r], %[r]\n\t"
181608 #else
181609         "adc	%[r], %[r]\n\t"
181610 #endif
181611         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
181612         :
181613         : "memory", "r3", "r4", "r5", "r6"
181614     );
181615     return (uint32_t)(size_t)r;
181616 }
181617 
181618 /* AND m into each word of a and store in r.
181619  *
181620  * r  A single precision integer.
181621  * a  A single precision integer.
181622  * m  Mask to AND against each digit.
181623  */
sp_1024_mask_16(sp_digit * r,const sp_digit * a,sp_digit m)181624 static void sp_1024_mask_16(sp_digit* r, const sp_digit* a, sp_digit m)
181625 {
181626 #ifdef WOLFSSL_SP_SMALL
181627     int i;
181628 
181629     for (i=0; i<16; i++) {
181630         r[i] = a[i] & m;
181631     }
181632 #else
181633     int i;
181634 
181635     for (i = 0; i < 16; i += 8) {
181636         r[i+0] = a[i+0] & m;
181637         r[i+1] = a[i+1] & m;
181638         r[i+2] = a[i+2] & m;
181639         r[i+3] = a[i+3] & m;
181640         r[i+4] = a[i+4] & m;
181641         r[i+5] = a[i+5] & m;
181642         r[i+6] = a[i+6] & m;
181643         r[i+7] = a[i+7] & m;
181644     }
181645 #endif
181646 }
181647 
181648 /* Multiply a and b into r. (r = a * b)
181649  *
181650  * r  A single precision integer.
181651  * a  A single precision integer.
181652  * b  A single precision integer.
181653  */
sp_1024_mul_32(sp_digit * r,const sp_digit * a,const sp_digit * b)181654 SP_NOINLINE static void sp_1024_mul_32(sp_digit* r, const sp_digit* a,
181655         const sp_digit* b)
181656 {
181657     sp_digit* z0 = r;
181658     sp_digit z1[32];
181659     sp_digit a1[16];
181660     sp_digit b1[16];
181661     sp_digit z2[32];
181662     sp_digit u;
181663     sp_digit ca;
181664     sp_digit cb;
181665 
181666     ca = sp_1024_add_16(a1, a, &a[16]);
181667     cb = sp_1024_add_16(b1, b, &b[16]);
181668     u  = ca & cb;
181669     sp_1024_mul_16(z1, a1, b1);
181670     sp_1024_mul_16(z2, &a[16], &b[16]);
181671     sp_1024_mul_16(z0, a, b);
181672     sp_1024_mask_16(r + 32, a1, 0 - cb);
181673     sp_1024_mask_16(b1, b1, 0 - ca);
181674     u += sp_1024_add_16(r + 32, r + 32, b1);
181675     u += sp_1024_sub_in_place_32(z1, z2);
181676     u += sp_1024_sub_in_place_32(z1, z0);
181677     u += sp_1024_add_32(r + 16, r + 16, z1);
181678     u += sp_1024_add_16(r + 32, r + 32, z2);
181679     (void)sp_1024_add_to_word_16(r + 48, u, z2 + 16);
181680 }
181681 
181682 /* Square a and put result in r. (r = a * a)
181683  *
181684  * r  A single precision integer.
181685  * a  A single precision integer.
181686  */
sp_1024_sqr_32(sp_digit * r,const sp_digit * a)181687 SP_NOINLINE static void sp_1024_sqr_32(sp_digit* r, const sp_digit* a)
181688 {
181689     sp_digit* z0 = r;
181690     sp_digit z2[32];
181691     sp_digit z1[32];
181692     sp_digit a1[16];
181693     sp_digit u;
181694 
181695     u = sp_1024_add_16(a1, a, &a[16]);
181696     sp_1024_sqr_16(z1, a1);
181697     sp_1024_sqr_16(z2, &a[16]);
181698     sp_1024_sqr_16(z0, a);
181699     sp_1024_mask_16(r + 32, a1, 0 - u);
181700     u += sp_1024_dbl_16(r + 32, r + 32);
181701     u += sp_1024_sub_in_place_32(z1, z2);
181702     u += sp_1024_sub_in_place_32(z1, z0);
181703     u += sp_1024_add_32(r + 16, r + 16, z1);
181704     u += sp_1024_add_16(r + 32, r + 32, z2);
181705     (void)sp_1024_add_to_word_16(r + 48, u, z2 + 16);
181706 }
181707 
181708 #else
181709 /* Multiply a and b into r. (r = a * b)
181710  *
181711  * r  A single precision integer.
181712  * a  A single precision integer.
181713  * b  A single precision integer.
181714  */
sp_1024_mul_32(sp_digit * r,const sp_digit * a,const sp_digit * b)181715 SP_NOINLINE static void sp_1024_mul_32(sp_digit* r, const sp_digit* a,
181716         const sp_digit* b)
181717 {
181718     sp_digit t[32 * 2];
181719     sp_digit* tmp = t;
181720     __asm__ __volatile__ (
181721         "movs	r3, #0\n\t"
181722         "movs	r4, #0\n\t"
181723         "mov	r8, r3\n\t"
181724         "mov	r11, %[tmp]\n\t"
181725         "mov	r9, %[a]\n\t"
181726         "mov	r10, %[b]\n\t"
181727         "movs	r6, #0x80\n\t"
181728         "add	r6, r6, r9\n\t"
181729         "mov	r12, r6\n\t"
181730         "\n"
181731     "L_sp_1024_mul_32_words_%=:\n\t"
181732         "movs	%[tmp], #0\n\t"
181733         "movs	r5, #0\n\t"
181734         "movs	r6, #0x7c\n\t"
181735         "mov	%[a], r8\n\t"
181736 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181737         "subs	%[a], %[a], r6\n\t"
181738 #else
181739         "sub	%[a], %[a], r6\n\t"
181740 #endif
181741 #ifdef WOLFSSL_KEIL
181742         "sbcs	r6, r6, r6\n\t"
181743 #elif defined(__clang__)
181744         "sbcs	r6, r6\n\t"
181745 #else
181746         "sbc	r6, r6\n\t"
181747 #endif
181748 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181749         "mvns	r6, r6\n\t"
181750 #else
181751         "mvn	r6, r6\n\t"
181752 #endif
181753 #ifdef WOLFSSL_KEIL
181754         "ands	%[a], %[a], r6\n\t"
181755 #elif defined(__clang__)
181756         "ands	%[a], r6\n\t"
181757 #else
181758         "and	%[a], r6\n\t"
181759 #endif
181760         "mov	%[b], r8\n\t"
181761 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181762         "subs	%[b], %[b], %[a]\n\t"
181763 #else
181764         "sub	%[b], %[b], %[a]\n\t"
181765 #endif
181766         "add	%[a], %[a], r9\n\t"
181767         "add	%[b], %[b], r10\n\t"
181768         "\n"
181769     "L_sp_1024_mul_32_mul_%=:\n\t"
181770         "# Multiply Start\n\t"
181771         "ldrh	r6, [%[a]]\n\t"
181772         "ldrh	r7, [%[b]]\n\t"
181773 #ifdef WOLFSSL_KEIL
181774         "muls	r7, r6, r7\n\t"
181775 #elif defined(__clang__)
181776         "muls	r7, r6\n\t"
181777 #else
181778         "mul	r7, r6\n\t"
181779 #endif
181780 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181781         "adds	r3, r3, r7\n\t"
181782 #else
181783         "add	r3, r3, r7\n\t"
181784 #endif
181785 #ifdef WOLFSSL_KEIL
181786         "adcs	r4, r4, %[tmp]\n\t"
181787 #elif defined(__clang__)
181788         "adcs	r4, %[tmp]\n\t"
181789 #else
181790         "adc	r4, %[tmp]\n\t"
181791 #endif
181792 #ifdef WOLFSSL_KEIL
181793         "adcs	r5, r5, %[tmp]\n\t"
181794 #elif defined(__clang__)
181795         "adcs	r5, %[tmp]\n\t"
181796 #else
181797         "adc	r5, %[tmp]\n\t"
181798 #endif
181799         "ldr	r7, [%[b]]\n\t"
181800 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181801         "lsrs	r7, r7, #16\n\t"
181802 #else
181803         "lsr	r7, r7, #16\n\t"
181804 #endif
181805 #ifdef WOLFSSL_KEIL
181806         "muls	r6, r7, r6\n\t"
181807 #elif defined(__clang__)
181808         "muls	r6, r7\n\t"
181809 #else
181810         "mul	r6, r7\n\t"
181811 #endif
181812 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181813         "lsrs	r7, r6, #16\n\t"
181814 #else
181815         "lsr	r7, r6, #16\n\t"
181816 #endif
181817 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181818         "lsls	r6, r6, #16\n\t"
181819 #else
181820         "lsl	r6, r6, #16\n\t"
181821 #endif
181822 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181823         "adds	r3, r3, r6\n\t"
181824 #else
181825         "add	r3, r3, r6\n\t"
181826 #endif
181827 #ifdef WOLFSSL_KEIL
181828         "adcs	r4, r4, r7\n\t"
181829 #elif defined(__clang__)
181830         "adcs	r4, r7\n\t"
181831 #else
181832         "adc	r4, r7\n\t"
181833 #endif
181834 #ifdef WOLFSSL_KEIL
181835         "adcs	r5, r5, %[tmp]\n\t"
181836 #elif defined(__clang__)
181837         "adcs	r5, %[tmp]\n\t"
181838 #else
181839         "adc	r5, %[tmp]\n\t"
181840 #endif
181841         "ldr	r6, [%[a]]\n\t"
181842         "ldr	r7, [%[b]]\n\t"
181843 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181844         "lsrs	r6, r6, #16\n\t"
181845 #else
181846         "lsr	r6, r6, #16\n\t"
181847 #endif
181848 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181849         "lsrs	r7, r7, #16\n\t"
181850 #else
181851         "lsr	r7, r7, #16\n\t"
181852 #endif
181853 #ifdef WOLFSSL_KEIL
181854         "muls	r7, r6, r7\n\t"
181855 #elif defined(__clang__)
181856         "muls	r7, r6\n\t"
181857 #else
181858         "mul	r7, r6\n\t"
181859 #endif
181860 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181861         "adds	r4, r4, r7\n\t"
181862 #else
181863         "add	r4, r4, r7\n\t"
181864 #endif
181865 #ifdef WOLFSSL_KEIL
181866         "adcs	r5, r5, %[tmp]\n\t"
181867 #elif defined(__clang__)
181868         "adcs	r5, %[tmp]\n\t"
181869 #else
181870         "adc	r5, %[tmp]\n\t"
181871 #endif
181872         "ldrh	r7, [%[b]]\n\t"
181873 #ifdef WOLFSSL_KEIL
181874         "muls	r6, r7, r6\n\t"
181875 #elif defined(__clang__)
181876         "muls	r6, r7\n\t"
181877 #else
181878         "mul	r6, r7\n\t"
181879 #endif
181880 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181881         "lsrs	r7, r6, #16\n\t"
181882 #else
181883         "lsr	r7, r6, #16\n\t"
181884 #endif
181885 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181886         "lsls	r6, r6, #16\n\t"
181887 #else
181888         "lsl	r6, r6, #16\n\t"
181889 #endif
181890 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181891         "adds	r3, r3, r6\n\t"
181892 #else
181893         "add	r3, r3, r6\n\t"
181894 #endif
181895 #ifdef WOLFSSL_KEIL
181896         "adcs	r4, r4, r7\n\t"
181897 #elif defined(__clang__)
181898         "adcs	r4, r7\n\t"
181899 #else
181900         "adc	r4, r7\n\t"
181901 #endif
181902 #ifdef WOLFSSL_KEIL
181903         "adcs	r5, r5, %[tmp]\n\t"
181904 #elif defined(__clang__)
181905         "adcs	r5, %[tmp]\n\t"
181906 #else
181907         "adc	r5, %[tmp]\n\t"
181908 #endif
181909         "# Multiply Done\n\t"
181910 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181911         "adds	%[a], %[a], #4\n\t"
181912 #else
181913         "add	%[a], %[a], #4\n\t"
181914 #endif
181915 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181916         "subs	%[b], %[b], #4\n\t"
181917 #else
181918         "sub	%[b], %[b], #4\n\t"
181919 #endif
181920         "cmp	%[a], r12\n\t"
181921         "beq	L_sp_1024_mul_32_done_mul_%=\n\t"
181922         "mov	r6, r8\n\t"
181923         "add	r6, r6, r9\n\t"
181924         "cmp	%[a], r6\n\t"
181925         "ble	L_sp_1024_mul_32_mul_%=\n\t"
181926         "\n"
181927     "L_sp_1024_mul_32_done_mul_%=:\n\t"
181928         "mov	%[tmp], r11\n\t"
181929         "mov	r7, r8\n\t"
181930         "str	r3, [%[tmp], r7]\n\t"
181931         "movs	r3, r4\n\t"
181932         "movs	r4, r5\n\t"
181933 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181934         "adds	r7, r7, #4\n\t"
181935 #else
181936         "add	r7, r7, #4\n\t"
181937 #endif
181938         "mov	r8, r7\n\t"
181939         "movs	r6, #0xf8\n\t"
181940         "cmp	r7, r6\n\t"
181941         "ble	L_sp_1024_mul_32_words_%=\n\t"
181942         "str	r3, [%[tmp], r7]\n\t"
181943         "mov	%[a], r9\n\t"
181944         "mov	%[b], r10\n\t"
181945         : [a] "+r" (a), [b] "+r" (b), [tmp] "+r" (tmp)
181946         :
181947         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
181948     );
181949 
181950     XMEMCPY(r, t, sizeof(t));
181951 }
181952 
181953 /* Square a and put result in r. (r = a * a)
181954  *
181955  * r  A single precision integer.
181956  * a  A single precision integer.
181957  */
sp_1024_sqr_32(sp_digit * r,const sp_digit * a)181958 SP_NOINLINE static void sp_1024_sqr_32(sp_digit* r, const sp_digit* a)
181959 {
181960     __asm__ __volatile__ (
181961         "movs	r3, #0\n\t"
181962         "movs	r4, #0\n\t"
181963         "movs	r5, #0\n\t"
181964         "mov	r8, r3\n\t"
181965         "mov	r11, %[r]\n\t"
181966         "movs	r6, #0xff\n\t"
181967 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181968         "adds	r6, r6, #1\n\t"
181969 #else
181970         "add	r6, r6, #1\n\t"
181971 #endif
181972 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181973         "negs	r6, r6\n\t"
181974 #else
181975         "neg	r6, r6\n\t"
181976 #endif
181977         "add	sp, sp, r6\n\t"
181978         "mov	r10, sp\n\t"
181979         "mov	r9, %[a]\n\t"
181980         "\n"
181981     "L_sp_1024_sqr_32_words_%=:\n\t"
181982         "movs	%[r], #0\n\t"
181983         "movs	r6, #0x7c\n\t"
181984         "mov	%[a], r8\n\t"
181985 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181986         "subs	%[a], %[a], r6\n\t"
181987 #else
181988         "sub	%[a], %[a], r6\n\t"
181989 #endif
181990 #ifdef WOLFSSL_KEIL
181991         "sbcs	r6, r6, r6\n\t"
181992 #elif defined(__clang__)
181993         "sbcs	r6, r6\n\t"
181994 #else
181995         "sbc	r6, r6\n\t"
181996 #endif
181997 #if defined(__clang__) || defined(WOLFSSL_KEIL)
181998         "mvns	r6, r6\n\t"
181999 #else
182000         "mvn	r6, r6\n\t"
182001 #endif
182002 #ifdef WOLFSSL_KEIL
182003         "ands	%[a], %[a], r6\n\t"
182004 #elif defined(__clang__)
182005         "ands	%[a], r6\n\t"
182006 #else
182007         "and	%[a], r6\n\t"
182008 #endif
182009         "mov	r2, r8\n\t"
182010 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182011         "subs	r2, r2, %[a]\n\t"
182012 #else
182013         "sub	r2, r2, %[a]\n\t"
182014 #endif
182015         "add	%[a], %[a], r9\n\t"
182016         "add	r2, r2, r9\n\t"
182017         "\n"
182018     "L_sp_1024_sqr_32_mul_%=:\n\t"
182019         "cmp	r2, %[a]\n\t"
182020         "beq	L_sp_1024_sqr_32_sqr_%=\n\t"
182021         "# Multiply * 2: Start\n\t"
182022         "ldrh	r6, [%[a]]\n\t"
182023         "ldrh	r7, [r2]\n\t"
182024 #ifdef WOLFSSL_KEIL
182025         "muls	r7, r6, r7\n\t"
182026 #elif defined(__clang__)
182027         "muls	r7, r6\n\t"
182028 #else
182029         "mul	r7, r6\n\t"
182030 #endif
182031 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182032         "adds	r3, r3, r7\n\t"
182033 #else
182034         "add	r3, r3, r7\n\t"
182035 #endif
182036 #ifdef WOLFSSL_KEIL
182037         "adcs	r4, r4, %[r]\n\t"
182038 #elif defined(__clang__)
182039         "adcs	r4, %[r]\n\t"
182040 #else
182041         "adc	r4, %[r]\n\t"
182042 #endif
182043 #ifdef WOLFSSL_KEIL
182044         "adcs	r5, r5, %[r]\n\t"
182045 #elif defined(__clang__)
182046         "adcs	r5, %[r]\n\t"
182047 #else
182048         "adc	r5, %[r]\n\t"
182049 #endif
182050 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182051         "adds	r3, r3, r7\n\t"
182052 #else
182053         "add	r3, r3, r7\n\t"
182054 #endif
182055 #ifdef WOLFSSL_KEIL
182056         "adcs	r4, r4, %[r]\n\t"
182057 #elif defined(__clang__)
182058         "adcs	r4, %[r]\n\t"
182059 #else
182060         "adc	r4, %[r]\n\t"
182061 #endif
182062 #ifdef WOLFSSL_KEIL
182063         "adcs	r5, r5, %[r]\n\t"
182064 #elif defined(__clang__)
182065         "adcs	r5, %[r]\n\t"
182066 #else
182067         "adc	r5, %[r]\n\t"
182068 #endif
182069         "ldr	r7, [r2]\n\t"
182070 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182071         "lsrs	r7, r7, #16\n\t"
182072 #else
182073         "lsr	r7, r7, #16\n\t"
182074 #endif
182075 #ifdef WOLFSSL_KEIL
182076         "muls	r6, r7, r6\n\t"
182077 #elif defined(__clang__)
182078         "muls	r6, r7\n\t"
182079 #else
182080         "mul	r6, r7\n\t"
182081 #endif
182082 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182083         "lsrs	r7, r6, #16\n\t"
182084 #else
182085         "lsr	r7, r6, #16\n\t"
182086 #endif
182087 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182088         "lsls	r6, r6, #16\n\t"
182089 #else
182090         "lsl	r6, r6, #16\n\t"
182091 #endif
182092 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182093         "adds	r3, r3, r6\n\t"
182094 #else
182095         "add	r3, r3, r6\n\t"
182096 #endif
182097 #ifdef WOLFSSL_KEIL
182098         "adcs	r4, r4, r7\n\t"
182099 #elif defined(__clang__)
182100         "adcs	r4, r7\n\t"
182101 #else
182102         "adc	r4, r7\n\t"
182103 #endif
182104 #ifdef WOLFSSL_KEIL
182105         "adcs	r5, r5, %[r]\n\t"
182106 #elif defined(__clang__)
182107         "adcs	r5, %[r]\n\t"
182108 #else
182109         "adc	r5, %[r]\n\t"
182110 #endif
182111 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182112         "adds	r3, r3, r6\n\t"
182113 #else
182114         "add	r3, r3, r6\n\t"
182115 #endif
182116 #ifdef WOLFSSL_KEIL
182117         "adcs	r4, r4, r7\n\t"
182118 #elif defined(__clang__)
182119         "adcs	r4, r7\n\t"
182120 #else
182121         "adc	r4, r7\n\t"
182122 #endif
182123 #ifdef WOLFSSL_KEIL
182124         "adcs	r5, r5, %[r]\n\t"
182125 #elif defined(__clang__)
182126         "adcs	r5, %[r]\n\t"
182127 #else
182128         "adc	r5, %[r]\n\t"
182129 #endif
182130         "ldr	r6, [%[a]]\n\t"
182131         "ldr	r7, [r2]\n\t"
182132 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182133         "lsrs	r6, r6, #16\n\t"
182134 #else
182135         "lsr	r6, r6, #16\n\t"
182136 #endif
182137 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182138         "lsrs	r7, r7, #16\n\t"
182139 #else
182140         "lsr	r7, r7, #16\n\t"
182141 #endif
182142 #ifdef WOLFSSL_KEIL
182143         "muls	r7, r6, r7\n\t"
182144 #elif defined(__clang__)
182145         "muls	r7, r6\n\t"
182146 #else
182147         "mul	r7, r6\n\t"
182148 #endif
182149 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182150         "adds	r4, r4, r7\n\t"
182151 #else
182152         "add	r4, r4, r7\n\t"
182153 #endif
182154 #ifdef WOLFSSL_KEIL
182155         "adcs	r5, r5, %[r]\n\t"
182156 #elif defined(__clang__)
182157         "adcs	r5, %[r]\n\t"
182158 #else
182159         "adc	r5, %[r]\n\t"
182160 #endif
182161 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182162         "adds	r4, r4, r7\n\t"
182163 #else
182164         "add	r4, r4, r7\n\t"
182165 #endif
182166 #ifdef WOLFSSL_KEIL
182167         "adcs	r5, r5, %[r]\n\t"
182168 #elif defined(__clang__)
182169         "adcs	r5, %[r]\n\t"
182170 #else
182171         "adc	r5, %[r]\n\t"
182172 #endif
182173         "ldrh	r7, [r2]\n\t"
182174 #ifdef WOLFSSL_KEIL
182175         "muls	r6, r7, r6\n\t"
182176 #elif defined(__clang__)
182177         "muls	r6, r7\n\t"
182178 #else
182179         "mul	r6, r7\n\t"
182180 #endif
182181 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182182         "lsrs	r7, r6, #16\n\t"
182183 #else
182184         "lsr	r7, r6, #16\n\t"
182185 #endif
182186 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182187         "lsls	r6, r6, #16\n\t"
182188 #else
182189         "lsl	r6, r6, #16\n\t"
182190 #endif
182191 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182192         "adds	r3, r3, r6\n\t"
182193 #else
182194         "add	r3, r3, r6\n\t"
182195 #endif
182196 #ifdef WOLFSSL_KEIL
182197         "adcs	r4, r4, r7\n\t"
182198 #elif defined(__clang__)
182199         "adcs	r4, r7\n\t"
182200 #else
182201         "adc	r4, r7\n\t"
182202 #endif
182203 #ifdef WOLFSSL_KEIL
182204         "adcs	r5, r5, %[r]\n\t"
182205 #elif defined(__clang__)
182206         "adcs	r5, %[r]\n\t"
182207 #else
182208         "adc	r5, %[r]\n\t"
182209 #endif
182210 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182211         "adds	r3, r3, r6\n\t"
182212 #else
182213         "add	r3, r3, r6\n\t"
182214 #endif
182215 #ifdef WOLFSSL_KEIL
182216         "adcs	r4, r4, r7\n\t"
182217 #elif defined(__clang__)
182218         "adcs	r4, r7\n\t"
182219 #else
182220         "adc	r4, r7\n\t"
182221 #endif
182222 #ifdef WOLFSSL_KEIL
182223         "adcs	r5, r5, %[r]\n\t"
182224 #elif defined(__clang__)
182225         "adcs	r5, %[r]\n\t"
182226 #else
182227         "adc	r5, %[r]\n\t"
182228 #endif
182229         "# Multiply * 2: Done\n\t"
182230         "bal	L_sp_1024_sqr_32_done_sqr_%=\n\t"
182231         "\n"
182232     "L_sp_1024_sqr_32_sqr_%=:\n\t"
182233         "mov	r12, r2\n\t"
182234         "ldr	r2, [%[a]]\n\t"
182235         "# Square: Start\n\t"
182236 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182237         "lsrs	r7, r2, #16\n\t"
182238 #else
182239         "lsr	r7, r2, #16\n\t"
182240 #endif
182241         "uxth	r6, r2\n\t"
182242 #ifdef WOLFSSL_KEIL
182243         "muls	r6, r6, r6\n\t"
182244 #elif defined(__clang__)
182245         "muls	r6, r6\n\t"
182246 #else
182247         "mul	r6, r6\n\t"
182248 #endif
182249 #ifdef WOLFSSL_KEIL
182250         "muls	r7, r7, r7\n\t"
182251 #elif defined(__clang__)
182252         "muls	r7, r7\n\t"
182253 #else
182254         "mul	r7, r7\n\t"
182255 #endif
182256 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182257         "adds	r3, r3, r6\n\t"
182258 #else
182259         "add	r3, r3, r6\n\t"
182260 #endif
182261 #ifdef WOLFSSL_KEIL
182262         "adcs	r4, r4, r7\n\t"
182263 #elif defined(__clang__)
182264         "adcs	r4, r7\n\t"
182265 #else
182266         "adc	r4, r7\n\t"
182267 #endif
182268 #ifdef WOLFSSL_KEIL
182269         "adcs	r5, r5, %[r]\n\t"
182270 #elif defined(__clang__)
182271         "adcs	r5, %[r]\n\t"
182272 #else
182273         "adc	r5, %[r]\n\t"
182274 #endif
182275 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182276         "lsrs	r7, r2, #16\n\t"
182277 #else
182278         "lsr	r7, r2, #16\n\t"
182279 #endif
182280         "uxth	r6, r2\n\t"
182281 #ifdef WOLFSSL_KEIL
182282         "muls	r6, r7, r6\n\t"
182283 #elif defined(__clang__)
182284         "muls	r6, r7\n\t"
182285 #else
182286         "mul	r6, r7\n\t"
182287 #endif
182288 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182289         "lsrs	r7, r6, #15\n\t"
182290 #else
182291         "lsr	r7, r6, #15\n\t"
182292 #endif
182293 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182294         "lsls	r6, r6, #17\n\t"
182295 #else
182296         "lsl	r6, r6, #17\n\t"
182297 #endif
182298 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182299         "adds	r3, r3, r6\n\t"
182300 #else
182301         "add	r3, r3, r6\n\t"
182302 #endif
182303 #ifdef WOLFSSL_KEIL
182304         "adcs	r4, r4, r7\n\t"
182305 #elif defined(__clang__)
182306         "adcs	r4, r7\n\t"
182307 #else
182308         "adc	r4, r7\n\t"
182309 #endif
182310 #ifdef WOLFSSL_KEIL
182311         "adcs	r5, r5, %[r]\n\t"
182312 #elif defined(__clang__)
182313         "adcs	r5, %[r]\n\t"
182314 #else
182315         "adc	r5, %[r]\n\t"
182316 #endif
182317         "# Square: Done\n\t"
182318         "mov	r2, r12\n\t"
182319         "\n"
182320     "L_sp_1024_sqr_32_done_sqr_%=:\n\t"
182321 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182322         "adds	%[a], %[a], #4\n\t"
182323 #else
182324         "add	%[a], %[a], #4\n\t"
182325 #endif
182326 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182327         "subs	r2, r2, #4\n\t"
182328 #else
182329         "sub	r2, r2, #4\n\t"
182330 #endif
182331         "movs	r6, #0x80\n\t"
182332         "add	r6, r6, r9\n\t"
182333         "cmp	%[a], r6\n\t"
182334         "beq	L_sp_1024_sqr_32_done_mul_%=\n\t"
182335         "cmp	%[a], r2\n\t"
182336         "bgt	L_sp_1024_sqr_32_done_mul_%=\n\t"
182337         "mov	r7, r8\n\t"
182338         "add	r7, r7, r9\n\t"
182339         "cmp	%[a], r7\n\t"
182340         "ble	L_sp_1024_sqr_32_mul_%=\n\t"
182341         "\n"
182342     "L_sp_1024_sqr_32_done_mul_%=:\n\t"
182343         "mov	%[r], r10\n\t"
182344         "mov	r7, r8\n\t"
182345         "str	r3, [%[r], r7]\n\t"
182346         "movs	r3, r4\n\t"
182347         "movs	r4, r5\n\t"
182348         "movs	r5, #0\n\t"
182349 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182350         "adds	r7, r7, #4\n\t"
182351 #else
182352         "add	r7, r7, #4\n\t"
182353 #endif
182354         "mov	r8, r7\n\t"
182355         "movs	r6, #0xf8\n\t"
182356         "cmp	r7, r6\n\t"
182357         "ble	L_sp_1024_sqr_32_words_%=\n\t"
182358         "mov	%[a], r9\n\t"
182359         "str	r3, [%[r], r7]\n\t"
182360         "mov	%[r], r11\n\t"
182361         "mov	%[a], r10\n\t"
182362         "movs	r3, #0xfc\n\t"
182363         "\n"
182364     "L_sp_1024_sqr_32_store_%=:\n\t"
182365         "ldr	r6, [%[a], r3]\n\t"
182366         "str	r6, [%[r], r3]\n\t"
182367 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182368         "subs	r3, r3, #4\n\t"
182369 #else
182370         "sub	r3, r3, #4\n\t"
182371 #endif
182372         "bge	L_sp_1024_sqr_32_store_%=\n\t"
182373         "movs	r6, #0xff\n\t"
182374 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182375         "adds	r6, r6, #1\n\t"
182376 #else
182377         "add	r6, r6, #1\n\t"
182378 #endif
182379         "add	sp, sp, r6\n\t"
182380         : [r] "+r" (r), [a] "+r" (a)
182381         :
182382         : "memory", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
182383     );
182384 }
182385 
182386 #endif /* !WOLFSSL_SP_SMALL */
182387 /* The modulus (prime) of the curve P1024. */
182388 static const sp_digit p1024_mod[32] = {
182389     0xfea85feb,0x666d807a,0xac7ace87,0x80c5df10,0x89857db0,0xfce3e823,
182390     0x56971f1f,0x9f94d6af,0x1c3c09aa,0xa7cf3c52,0x31852a82,0xb6aff4a8,
182391     0x65681ce1,0x512ac5cd,0x326b4cd4,0xe26c6487,0xa666a6d0,0x356d27f4,
182392     0xf7c88a19,0xe791b39f,0x31a59cb0,0x228730d5,0xe2fc0f1b,0xf40aab27,
182393     0xb3e01a2e,0xbe9ae358,0x9cb48261,0x416c0ce1,0xdad0657a,0x65c61198,
182394     0x0a563fda,0x997abb1f
182395 };
182396 /* The Montgomery normalizer for modulus of the curve P1024. */
182397 static const sp_digit p1024_norm_mod[32] = {
182398     0x0157a015,0x99927f85,0x53853178,0x7f3a20ef,0x767a824f,0x031c17dc,
182399     0xa968e0e0,0x606b2950,0xe3c3f655,0x5830c3ad,0xce7ad57d,0x49500b57,
182400     0x9a97e31e,0xaed53a32,0xcd94b32b,0x1d939b78,0x5999592f,0xca92d80b,
182401     0x083775e6,0x186e4c60,0xce5a634f,0xdd78cf2a,0x1d03f0e4,0x0bf554d8,
182402     0x4c1fe5d1,0x41651ca7,0x634b7d9e,0xbe93f31e,0x252f9a85,0x9a39ee67,
182403     0xf5a9c025,0x668544e0
182404 };
182405 /* The Montgomery multiplier for modulus of the curve P1024. */
182406 static sp_digit p1024_mp_mod = 0x7c8f2f3d;
182407 #if defined(WOLFSSL_SP_SMALL) || defined(HAVE_ECC_CHECK_KEY)
182408 /* The order of the curve P1024. */
182409 static const sp_digit p1024_order[32] = {
182410     0xbfaa17fb,0xd99b601e,0x2b1eb3a1,0x203177c4,0xe2615f6c,0xff38fa08,
182411     0xd5a5c7c7,0xa7e535ab,0x870f026a,0xa9f3cf14,0x0c614aa0,0x6dabfd2a,
182412     0x595a0738,0x144ab173,0xcc9ad335,0x389b1921,0x2999a9b4,0x4d5b49fd,
182413     0xfdf22286,0x39e46ce7,0x4c69672c,0xc8a1cc35,0xf8bf03c6,0xbd02aac9,
182414     0x2cf8068b,0x6fa6b8d6,0x672d2098,0x905b0338,0x36b4195e,0x99718466,
182415     0xc2958ff6,0x265eaec7
182416 };
182417 #endif
182418 /* The base point of curve P1024. */
182419 static const sp_point_1024 p1024_base = {
182420     /* X ordinate */
182421     {
182422         0xeae63895,0x880dc8ab,0x967e0979,0x80ec46c4,0xb63f73ec,0xee9163a5,
182423         0x80728d87,0xd5cfb4cc,0xba66910d,0xa7c1514d,0x7a60de74,0xa702c339,
182424         0x8b72f2e1,0x337c8654,0x5dd5bccb,0x9760af76,0x406ce890,0x718bd9e7,
182425         0xdb9dfa55,0x43d5f22c,0x30b09e10,0xab10db90,0xf6ce2308,0xb5edb6c0,
182426         0xb6ff7cbf,0x98b2f204,0x0aec69c6,0x2b1a2fd6,0x3ed9b52a,0x0a799005,
182427         0x332c29ad,0x53fc09ee,
182428         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182429         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182430         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182431         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182432         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182433         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182434         (sp_digit)0, (sp_digit)0
182435     },
182436     /* Y ordinate */
182437     {
182438         0x1bef16d7,0x75573fd7,0x6a67dcde,0xadb9b570,0xd5bb4636,0x80bdad5a,
182439         0xe9cb99a9,0x13515ad7,0xc5a4d5f2,0x492d979f,0x164aa989,0xac6f1e80,
182440         0xb7652fe0,0xcad696b5,0xad547c6c,0x70dae117,0xa9e032b9,0x416cff0c,
182441         0x9a140b2e,0x6b598ccf,0xf0de55f6,0xe7f7f5e5,0x654ec2b9,0xf5ea69f4,
182442         0x1e141178,0x3d778d82,0x02990696,0xd3e82016,0x3634a135,0xf9f1f053,
182443         0x3f6009f1,0x0a824906,
182444         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182445         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182446         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182447         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182448         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182449         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182450         (sp_digit)0, (sp_digit)0
182451     },
182452     /* Z ordinate */
182453     {
182454         0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
182455         0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
182456         0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
182457         0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
182458         0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
182459         0x00000000,0x00000000,
182460         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182461         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182462         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182463         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182464         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182465         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
182466         (sp_digit)0, (sp_digit)0
182467     },
182468     /* infinity */
182469     0
182470 };
182471 
182472 #ifdef WOLFSSL_SP_SMALL
182473 /* Sub b from a into a. (a -= b)
182474  *
182475  * a  A single precision integer.
182476  * b  A single precision integer.
182477  */
sp_1024_sub_in_place_32(sp_digit * a,const sp_digit * b)182478 SP_NOINLINE static sp_digit sp_1024_sub_in_place_32(sp_digit* a,
182479         const sp_digit* b)
182480 {
182481     __asm__ __volatile__ (
182482         "movs	r7, %[a]\n\t"
182483         "movs	r2, #0\n\t"
182484 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182485         "adds	r7, r7, #0x80\n\t"
182486 #else
182487         "add	r7, r7, #0x80\n\t"
182488 #endif
182489         "\n"
182490     "L_sp_1024_sub_in_place_32_words_%=:\n\t"
182491         "movs	r5, #0\n\t"
182492 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182493         "subs	r5, r5, r2\n\t"
182494 #else
182495         "sub	r5, r5, r2\n\t"
182496 #endif
182497         "ldr	r3, [%[a]]\n\t"
182498         "ldr	r4, [%[a], #4]\n\t"
182499         "ldr	r5, [%[b]]\n\t"
182500         "ldr	r6, [%[b], #4]\n\t"
182501 #ifdef WOLFSSL_KEIL
182502         "sbcs	r3, r3, r5\n\t"
182503 #elif defined(__clang__)
182504         "sbcs	r3, r5\n\t"
182505 #else
182506         "sbc	r3, r5\n\t"
182507 #endif
182508 #ifdef WOLFSSL_KEIL
182509         "sbcs	r4, r4, r6\n\t"
182510 #elif defined(__clang__)
182511         "sbcs	r4, r6\n\t"
182512 #else
182513         "sbc	r4, r6\n\t"
182514 #endif
182515         "str	r3, [%[a]]\n\t"
182516         "str	r4, [%[a], #4]\n\t"
182517 #ifdef WOLFSSL_KEIL
182518         "sbcs	r2, r2, r2\n\t"
182519 #elif defined(__clang__)
182520         "sbcs	r2, r2\n\t"
182521 #else
182522         "sbc	r2, r2\n\t"
182523 #endif
182524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182525         "adds	%[a], %[a], #8\n\t"
182526 #else
182527         "add	%[a], %[a], #8\n\t"
182528 #endif
182529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182530         "adds	%[b], %[b], #8\n\t"
182531 #else
182532         "add	%[b], %[b], #8\n\t"
182533 #endif
182534         "cmp	%[a], r7\n\t"
182535         "bne	L_sp_1024_sub_in_place_32_words_%=\n\t"
182536         "movs	%[a], r2\n\t"
182537         : [a] "+r" (a), [b] "+r" (b)
182538         :
182539         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
182540     );
182541     return (uint32_t)(size_t)a;
182542 }
182543 
182544 #endif /* WOLFSSL_SP_SMALL */
182545 /* Conditionally subtract b from a using the mask m.
182546  * m is -1 to subtract and 0 when not copying.
182547  *
182548  * r  A single precision number representing condition subtract result.
182549  * a  A single precision number to subtract from.
182550  * b  A single precision number to subtract.
182551  * m  Mask value to apply.
182552  */
sp_1024_cond_sub_32(sp_digit * r,const sp_digit * a,const sp_digit * b,sp_digit m)182553 SP_NOINLINE static sp_digit sp_1024_cond_sub_32(sp_digit* r, const sp_digit* a,
182554         const sp_digit* b, sp_digit m)
182555 {
182556     __asm__ __volatile__ (
182557         "movs	r4, #0\n\t"
182558         "movs	r5, #0x80\n\t"
182559         "mov	r8, r5\n\t"
182560         "movs	r7, #0\n\t"
182561         "\n"
182562     "L_sp_1024_cond_sub_32_words_%=:\n\t"
182563         "ldr	r6, [%[b], r7]\n\t"
182564 #ifdef WOLFSSL_KEIL
182565         "ands	r6, r6, %[m]\n\t"
182566 #elif defined(__clang__)
182567         "ands	r6, %[m]\n\t"
182568 #else
182569         "and	r6, %[m]\n\t"
182570 #endif
182571         "movs	r5, #0\n\t"
182572 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182573         "subs	r5, r5, r4\n\t"
182574 #else
182575         "sub	r5, r5, r4\n\t"
182576 #endif
182577         "ldr	r5, [%[a], r7]\n\t"
182578 #ifdef WOLFSSL_KEIL
182579         "sbcs	r5, r5, r6\n\t"
182580 #elif defined(__clang__)
182581         "sbcs	r5, r6\n\t"
182582 #else
182583         "sbc	r5, r6\n\t"
182584 #endif
182585 #ifdef WOLFSSL_KEIL
182586         "sbcs	r4, r4, r4\n\t"
182587 #elif defined(__clang__)
182588         "sbcs	r4, r4\n\t"
182589 #else
182590         "sbc	r4, r4\n\t"
182591 #endif
182592         "str	r5, [%[r], r7]\n\t"
182593 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182594         "adds	r7, r7, #4\n\t"
182595 #else
182596         "add	r7, r7, #4\n\t"
182597 #endif
182598         "cmp	r7, r8\n\t"
182599         "blt	L_sp_1024_cond_sub_32_words_%=\n\t"
182600         "movs	%[r], r4\n\t"
182601         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
182602         :
182603         : "memory", "r4", "r5", "r6", "r7", "r8"
182604     );
182605     return (uint32_t)(size_t)r;
182606 }
182607 
182608 #ifdef WOLFSSL_SP_SMALL
182609 /* Add b to a into r. (r = a + b)
182610  *
182611  * r  A single precision integer.
182612  * a  A single precision integer.
182613  * b  A single precision integer.
182614  */
sp_1024_add_32(sp_digit * r,const sp_digit * a,const sp_digit * b)182615 SP_NOINLINE static sp_digit sp_1024_add_32(sp_digit* r, const sp_digit* a,
182616         const sp_digit* b)
182617 {
182618     __asm__ __volatile__ (
182619         "movs	r6, %[a]\n\t"
182620         "movs	r7, #0\n\t"
182621         "movs	r3, #0\n\t"
182622 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182623         "adds	r6, r6, #0x80\n\t"
182624 #else
182625         "add	r6, r6, #0x80\n\t"
182626 #endif
182627 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182628         "subs	r7, r7, #1\n\t"
182629 #else
182630         "sub	r7, r7, #1\n\t"
182631 #endif
182632         "\n"
182633     "L_sp_1024_add_32_word_%=:\n\t"
182634 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182635         "adds	r3, r3, r7\n\t"
182636 #else
182637         "add	r3, r3, r7\n\t"
182638 #endif
182639         "ldr	r4, [%[a]]\n\t"
182640         "ldr	r5, [%[b]]\n\t"
182641 #ifdef WOLFSSL_KEIL
182642         "adcs	r4, r4, r5\n\t"
182643 #elif defined(__clang__)
182644         "adcs	r4, r5\n\t"
182645 #else
182646         "adc	r4, r5\n\t"
182647 #endif
182648         "str	r4, [%[r]]\n\t"
182649         "movs	r3, #0\n\t"
182650 #ifdef WOLFSSL_KEIL
182651         "adcs	r3, r3, r3\n\t"
182652 #elif defined(__clang__)
182653         "adcs	r3, r3\n\t"
182654 #else
182655         "adc	r3, r3\n\t"
182656 #endif
182657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182658         "adds	%[a], %[a], #4\n\t"
182659 #else
182660         "add	%[a], %[a], #4\n\t"
182661 #endif
182662 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182663         "adds	%[b], %[b], #4\n\t"
182664 #else
182665         "add	%[b], %[b], #4\n\t"
182666 #endif
182667 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182668         "adds	%[r], %[r], #4\n\t"
182669 #else
182670         "add	%[r], %[r], #4\n\t"
182671 #endif
182672         "cmp	%[a], r6\n\t"
182673         "bne	L_sp_1024_add_32_word_%=\n\t"
182674         "movs	%[r], r3\n\t"
182675         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
182676         :
182677         : "memory", "r3", "r4", "r5", "r6", "r7"
182678     );
182679     return (uint32_t)(size_t)r;
182680 }
182681 
182682 #endif /* WOLFSSL_SP_SMALL */
182683 /* Mul a by digit b into r. (r = a * b)
182684  *
182685  * r  A single precision integer.
182686  * a  A single precision integer.
182687  * b  A single precision digit.
182688  */
sp_1024_mul_d_32(sp_digit * r,const sp_digit * a,sp_digit b)182689 SP_NOINLINE static void sp_1024_mul_d_32(sp_digit* r, const sp_digit* a,
182690         sp_digit b)
182691 {
182692     __asm__ __volatile__ (
182693         "movs	r6, #0x80\n\t"
182694 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182695         "adds	r6, r6, %[a]\n\t"
182696 #else
182697         "add	r6, r6, %[a]\n\t"
182698 #endif
182699         "mov	r8, %[r]\n\t"
182700         "mov	r9, r6\n\t"
182701         "movs	r3, #0\n\t"
182702         "movs	r4, #0\n\t"
182703         "\n"
182704     "L_sp_1024_mul_d_32_%=:\n\t"
182705         "movs	%[r], #0\n\t"
182706         "movs	r5, #0\n\t"
182707         "# A[] * B\n\t"
182708         "ldrh	r6, [%[a]]\n\t"
182709         "uxth	r7, %[b]\n\t"
182710 #ifdef WOLFSSL_KEIL
182711         "muls	r7, r6, r7\n\t"
182712 #elif defined(__clang__)
182713         "muls	r7, r6\n\t"
182714 #else
182715         "mul	r7, r6\n\t"
182716 #endif
182717 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182718         "adds	r3, r3, r7\n\t"
182719 #else
182720         "add	r3, r3, r7\n\t"
182721 #endif
182722 #ifdef WOLFSSL_KEIL
182723         "adcs	r4, r4, %[r]\n\t"
182724 #elif defined(__clang__)
182725         "adcs	r4, %[r]\n\t"
182726 #else
182727         "adc	r4, %[r]\n\t"
182728 #endif
182729 #ifdef WOLFSSL_KEIL
182730         "adcs	r5, r5, %[r]\n\t"
182731 #elif defined(__clang__)
182732         "adcs	r5, %[r]\n\t"
182733 #else
182734         "adc	r5, %[r]\n\t"
182735 #endif
182736 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182737         "lsrs	r7, %[b], #16\n\t"
182738 #else
182739         "lsr	r7, %[b], #16\n\t"
182740 #endif
182741 #ifdef WOLFSSL_KEIL
182742         "muls	r6, r7, r6\n\t"
182743 #elif defined(__clang__)
182744         "muls	r6, r7\n\t"
182745 #else
182746         "mul	r6, r7\n\t"
182747 #endif
182748 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182749         "lsrs	r7, r6, #16\n\t"
182750 #else
182751         "lsr	r7, r6, #16\n\t"
182752 #endif
182753 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182754         "lsls	r6, r6, #16\n\t"
182755 #else
182756         "lsl	r6, r6, #16\n\t"
182757 #endif
182758 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182759         "adds	r3, r3, r6\n\t"
182760 #else
182761         "add	r3, r3, r6\n\t"
182762 #endif
182763 #ifdef WOLFSSL_KEIL
182764         "adcs	r4, r4, r7\n\t"
182765 #elif defined(__clang__)
182766         "adcs	r4, r7\n\t"
182767 #else
182768         "adc	r4, r7\n\t"
182769 #endif
182770 #ifdef WOLFSSL_KEIL
182771         "adcs	r5, r5, %[r]\n\t"
182772 #elif defined(__clang__)
182773         "adcs	r5, %[r]\n\t"
182774 #else
182775         "adc	r5, %[r]\n\t"
182776 #endif
182777         "ldr	r6, [%[a]]\n\t"
182778 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182779         "lsrs	r6, r6, #16\n\t"
182780 #else
182781         "lsr	r6, r6, #16\n\t"
182782 #endif
182783 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182784         "lsrs	r7, %[b], #16\n\t"
182785 #else
182786         "lsr	r7, %[b], #16\n\t"
182787 #endif
182788 #ifdef WOLFSSL_KEIL
182789         "muls	r7, r6, r7\n\t"
182790 #elif defined(__clang__)
182791         "muls	r7, r6\n\t"
182792 #else
182793         "mul	r7, r6\n\t"
182794 #endif
182795 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182796         "adds	r4, r4, r7\n\t"
182797 #else
182798         "add	r4, r4, r7\n\t"
182799 #endif
182800 #ifdef WOLFSSL_KEIL
182801         "adcs	r5, r5, %[r]\n\t"
182802 #elif defined(__clang__)
182803         "adcs	r5, %[r]\n\t"
182804 #else
182805         "adc	r5, %[r]\n\t"
182806 #endif
182807         "uxth	r7, %[b]\n\t"
182808 #ifdef WOLFSSL_KEIL
182809         "muls	r6, r7, r6\n\t"
182810 #elif defined(__clang__)
182811         "muls	r6, r7\n\t"
182812 #else
182813         "mul	r6, r7\n\t"
182814 #endif
182815 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182816         "lsrs	r7, r6, #16\n\t"
182817 #else
182818         "lsr	r7, r6, #16\n\t"
182819 #endif
182820 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182821         "lsls	r6, r6, #16\n\t"
182822 #else
182823         "lsl	r6, r6, #16\n\t"
182824 #endif
182825 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182826         "adds	r3, r3, r6\n\t"
182827 #else
182828         "add	r3, r3, r6\n\t"
182829 #endif
182830 #ifdef WOLFSSL_KEIL
182831         "adcs	r4, r4, r7\n\t"
182832 #elif defined(__clang__)
182833         "adcs	r4, r7\n\t"
182834 #else
182835         "adc	r4, r7\n\t"
182836 #endif
182837 #ifdef WOLFSSL_KEIL
182838         "adcs	r5, r5, %[r]\n\t"
182839 #elif defined(__clang__)
182840         "adcs	r5, %[r]\n\t"
182841 #else
182842         "adc	r5, %[r]\n\t"
182843 #endif
182844         "# A[] * B - Done\n\t"
182845         "mov	%[r], r8\n\t"
182846         "str	r3, [%[r]]\n\t"
182847         "movs	r3, r4\n\t"
182848         "movs	r4, r5\n\t"
182849 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182850         "adds	%[r], %[r], #4\n\t"
182851 #else
182852         "add	%[r], %[r], #4\n\t"
182853 #endif
182854 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182855         "adds	%[a], %[a], #4\n\t"
182856 #else
182857         "add	%[a], %[a], #4\n\t"
182858 #endif
182859         "mov	r8, %[r]\n\t"
182860         "cmp	%[a], r9\n\t"
182861         "blt	L_sp_1024_mul_d_32_%=\n\t"
182862         "str	r3, [%[r]]\n\t"
182863         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
182864         :
182865         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
182866     );
182867 }
182868 
182869 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
182870  *
182871  * d1   The high order half of the number to divide.
182872  * d0   The low order half of the number to divide.
182873  * div  The dividend.
182874  * returns the result of the division.
182875  *
182876  * Note that this is an approximate div. It may give an answer 1 larger.
182877  */
div_1024_word_32(sp_digit d1,sp_digit d0,sp_digit div)182878 SP_NOINLINE static sp_digit div_1024_word_32(sp_digit d1, sp_digit d0,
182879         sp_digit div)
182880 {
182881     __asm__ __volatile__ (
182882         "movs	r3, #0\n\t"
182883 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182884         "lsrs	r5, %[div], #1\n\t"
182885 #else
182886         "lsr	r5, %[div], #1\n\t"
182887 #endif
182888 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182889         "adds	r5, r5, #1\n\t"
182890 #else
182891         "add	r5, r5, #1\n\t"
182892 #endif
182893         "mov	r8, %[d0]\n\t"
182894         "mov	r9, %[d1]\n\t"
182895         "# Do top 32\n\t"
182896         "movs	r6, r5\n\t"
182897 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182898         "subs	r6, r6, %[d1]\n\t"
182899 #else
182900         "sub	r6, r6, %[d1]\n\t"
182901 #endif
182902 #ifdef WOLFSSL_KEIL
182903         "sbcs	r6, r6, r6\n\t"
182904 #elif defined(__clang__)
182905         "sbcs	r6, r6\n\t"
182906 #else
182907         "sbc	r6, r6\n\t"
182908 #endif
182909 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182910         "adds	r3, r3, r3\n\t"
182911 #else
182912         "add	r3, r3, r3\n\t"
182913 #endif
182914 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182915         "subs	r3, r3, r6\n\t"
182916 #else
182917         "sub	r3, r3, r6\n\t"
182918 #endif
182919 #ifdef WOLFSSL_KEIL
182920         "ands	r6, r6, r5\n\t"
182921 #elif defined(__clang__)
182922         "ands	r6, r5\n\t"
182923 #else
182924         "and	r6, r5\n\t"
182925 #endif
182926 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182927         "subs	%[d1], %[d1], r6\n\t"
182928 #else
182929         "sub	%[d1], %[d1], r6\n\t"
182930 #endif
182931         "movs	r4, #29\n\t"
182932         "\n"
182933     "L_div_1024_word_32_loop_%=:\n\t"
182934 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182935         "lsls	%[d0], %[d0], #1\n\t"
182936 #else
182937         "lsl	%[d0], %[d0], #1\n\t"
182938 #endif
182939 #ifdef WOLFSSL_KEIL
182940         "adcs	%[d1], %[d1], %[d1]\n\t"
182941 #elif defined(__clang__)
182942         "adcs	%[d1], %[d1]\n\t"
182943 #else
182944         "adc	%[d1], %[d1]\n\t"
182945 #endif
182946         "movs	r6, r5\n\t"
182947 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182948         "subs	r6, r6, %[d1]\n\t"
182949 #else
182950         "sub	r6, r6, %[d1]\n\t"
182951 #endif
182952 #ifdef WOLFSSL_KEIL
182953         "sbcs	r6, r6, r6\n\t"
182954 #elif defined(__clang__)
182955         "sbcs	r6, r6\n\t"
182956 #else
182957         "sbc	r6, r6\n\t"
182958 #endif
182959 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182960         "adds	r3, r3, r3\n\t"
182961 #else
182962         "add	r3, r3, r3\n\t"
182963 #endif
182964 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182965         "subs	r3, r3, r6\n\t"
182966 #else
182967         "sub	r3, r3, r6\n\t"
182968 #endif
182969 #ifdef WOLFSSL_KEIL
182970         "ands	r6, r6, r5\n\t"
182971 #elif defined(__clang__)
182972         "ands	r6, r5\n\t"
182973 #else
182974         "and	r6, r5\n\t"
182975 #endif
182976 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182977         "subs	%[d1], %[d1], r6\n\t"
182978 #else
182979         "sub	%[d1], %[d1], r6\n\t"
182980 #endif
182981 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182982         "subs	r4, r4, #1\n\t"
182983 #else
182984         "sub	r4, r4, #1\n\t"
182985 #endif
182986         "bpl	L_div_1024_word_32_loop_%=\n\t"
182987         "movs	r7, #0\n\t"
182988 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182989         "adds	r3, r3, r3\n\t"
182990 #else
182991         "add	r3, r3, r3\n\t"
182992 #endif
182993 #if defined(__clang__) || defined(WOLFSSL_KEIL)
182994         "adds	r3, r3, #1\n\t"
182995 #else
182996         "add	r3, r3, #1\n\t"
182997 #endif
182998         "# r * div - Start\n\t"
182999         "uxth	%[d1], r3\n\t"
183000         "uxth	r4, %[div]\n\t"
183001 #ifdef WOLFSSL_KEIL
183002         "muls	r4, %[d1], r4\n\t"
183003 #elif defined(__clang__)
183004         "muls	r4, %[d1]\n\t"
183005 #else
183006         "mul	r4, %[d1]\n\t"
183007 #endif
183008 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183009         "lsrs	r6, %[div], #16\n\t"
183010 #else
183011         "lsr	r6, %[div], #16\n\t"
183012 #endif
183013 #ifdef WOLFSSL_KEIL
183014         "muls	%[d1], r6, %[d1]\n\t"
183015 #elif defined(__clang__)
183016         "muls	%[d1], r6\n\t"
183017 #else
183018         "mul	%[d1], r6\n\t"
183019 #endif
183020 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183021         "lsrs	r5, %[d1], #16\n\t"
183022 #else
183023         "lsr	r5, %[d1], #16\n\t"
183024 #endif
183025 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183026         "lsls	%[d1], %[d1], #16\n\t"
183027 #else
183028         "lsl	%[d1], %[d1], #16\n\t"
183029 #endif
183030 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183031         "adds	r4, r4, %[d1]\n\t"
183032 #else
183033         "add	r4, r4, %[d1]\n\t"
183034 #endif
183035 #ifdef WOLFSSL_KEIL
183036         "adcs	r5, r5, r7\n\t"
183037 #elif defined(__clang__)
183038         "adcs	r5, r7\n\t"
183039 #else
183040         "adc	r5, r7\n\t"
183041 #endif
183042 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183043         "lsrs	%[d1], r3, #16\n\t"
183044 #else
183045         "lsr	%[d1], r3, #16\n\t"
183046 #endif
183047 #ifdef WOLFSSL_KEIL
183048         "muls	r6, %[d1], r6\n\t"
183049 #elif defined(__clang__)
183050         "muls	r6, %[d1]\n\t"
183051 #else
183052         "mul	r6, %[d1]\n\t"
183053 #endif
183054 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183055         "adds	r5, r5, r6\n\t"
183056 #else
183057         "add	r5, r5, r6\n\t"
183058 #endif
183059         "uxth	r6, %[div]\n\t"
183060 #ifdef WOLFSSL_KEIL
183061         "muls	%[d1], r6, %[d1]\n\t"
183062 #elif defined(__clang__)
183063         "muls	%[d1], r6\n\t"
183064 #else
183065         "mul	%[d1], r6\n\t"
183066 #endif
183067 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183068         "lsrs	r6, %[d1], #16\n\t"
183069 #else
183070         "lsr	r6, %[d1], #16\n\t"
183071 #endif
183072 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183073         "lsls	%[d1], %[d1], #16\n\t"
183074 #else
183075         "lsl	%[d1], %[d1], #16\n\t"
183076 #endif
183077 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183078         "adds	r4, r4, %[d1]\n\t"
183079 #else
183080         "add	r4, r4, %[d1]\n\t"
183081 #endif
183082 #ifdef WOLFSSL_KEIL
183083         "adcs	r5, r5, r6\n\t"
183084 #elif defined(__clang__)
183085         "adcs	r5, r6\n\t"
183086 #else
183087         "adc	r5, r6\n\t"
183088 #endif
183089         "# r * div - Done\n\t"
183090         "mov	%[d1], r8\n\t"
183091 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183092         "subs	%[d1], %[d1], r4\n\t"
183093 #else
183094         "sub	%[d1], %[d1], r4\n\t"
183095 #endif
183096         "movs	r4, %[d1]\n\t"
183097         "mov	%[d1], r9\n\t"
183098 #ifdef WOLFSSL_KEIL
183099         "sbcs	%[d1], %[d1], r5\n\t"
183100 #elif defined(__clang__)
183101         "sbcs	%[d1], r5\n\t"
183102 #else
183103         "sbc	%[d1], r5\n\t"
183104 #endif
183105         "movs	r5, %[d1]\n\t"
183106 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183107         "adds	r3, r3, r5\n\t"
183108 #else
183109         "add	r3, r3, r5\n\t"
183110 #endif
183111         "# r * div - Start\n\t"
183112         "uxth	%[d1], r3\n\t"
183113         "uxth	r4, %[div]\n\t"
183114 #ifdef WOLFSSL_KEIL
183115         "muls	r4, %[d1], r4\n\t"
183116 #elif defined(__clang__)
183117         "muls	r4, %[d1]\n\t"
183118 #else
183119         "mul	r4, %[d1]\n\t"
183120 #endif
183121 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183122         "lsrs	r6, %[div], #16\n\t"
183123 #else
183124         "lsr	r6, %[div], #16\n\t"
183125 #endif
183126 #ifdef WOLFSSL_KEIL
183127         "muls	%[d1], r6, %[d1]\n\t"
183128 #elif defined(__clang__)
183129         "muls	%[d1], r6\n\t"
183130 #else
183131         "mul	%[d1], r6\n\t"
183132 #endif
183133 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183134         "lsrs	r5, %[d1], #16\n\t"
183135 #else
183136         "lsr	r5, %[d1], #16\n\t"
183137 #endif
183138 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183139         "lsls	%[d1], %[d1], #16\n\t"
183140 #else
183141         "lsl	%[d1], %[d1], #16\n\t"
183142 #endif
183143 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183144         "adds	r4, r4, %[d1]\n\t"
183145 #else
183146         "add	r4, r4, %[d1]\n\t"
183147 #endif
183148 #ifdef WOLFSSL_KEIL
183149         "adcs	r5, r5, r7\n\t"
183150 #elif defined(__clang__)
183151         "adcs	r5, r7\n\t"
183152 #else
183153         "adc	r5, r7\n\t"
183154 #endif
183155 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183156         "lsrs	%[d1], r3, #16\n\t"
183157 #else
183158         "lsr	%[d1], r3, #16\n\t"
183159 #endif
183160 #ifdef WOLFSSL_KEIL
183161         "muls	r6, %[d1], r6\n\t"
183162 #elif defined(__clang__)
183163         "muls	r6, %[d1]\n\t"
183164 #else
183165         "mul	r6, %[d1]\n\t"
183166 #endif
183167 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183168         "adds	r5, r5, r6\n\t"
183169 #else
183170         "add	r5, r5, r6\n\t"
183171 #endif
183172         "uxth	r6, %[div]\n\t"
183173 #ifdef WOLFSSL_KEIL
183174         "muls	%[d1], r6, %[d1]\n\t"
183175 #elif defined(__clang__)
183176         "muls	%[d1], r6\n\t"
183177 #else
183178         "mul	%[d1], r6\n\t"
183179 #endif
183180 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183181         "lsrs	r6, %[d1], #16\n\t"
183182 #else
183183         "lsr	r6, %[d1], #16\n\t"
183184 #endif
183185 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183186         "lsls	%[d1], %[d1], #16\n\t"
183187 #else
183188         "lsl	%[d1], %[d1], #16\n\t"
183189 #endif
183190 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183191         "adds	r4, r4, %[d1]\n\t"
183192 #else
183193         "add	r4, r4, %[d1]\n\t"
183194 #endif
183195 #ifdef WOLFSSL_KEIL
183196         "adcs	r5, r5, r6\n\t"
183197 #elif defined(__clang__)
183198         "adcs	r5, r6\n\t"
183199 #else
183200         "adc	r5, r6\n\t"
183201 #endif
183202         "# r * div - Done\n\t"
183203         "mov	%[d1], r8\n\t"
183204         "mov	r6, r9\n\t"
183205 #ifdef WOLFSSL_KEIL
183206         "subs	r4, %[d1], r4\n\t"
183207 #else
183208 #ifdef __clang__
183209         "subs	r4, %[d1], r4\n\t"
183210 #else
183211         "sub	r4, %[d1], r4\n\t"
183212 #endif
183213 #endif
183214 #ifdef WOLFSSL_KEIL
183215         "sbcs	r6, r6, r5\n\t"
183216 #elif defined(__clang__)
183217         "sbcs	r6, r5\n\t"
183218 #else
183219         "sbc	r6, r5\n\t"
183220 #endif
183221         "movs	r5, r6\n\t"
183222 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183223         "adds	r3, r3, r5\n\t"
183224 #else
183225         "add	r3, r3, r5\n\t"
183226 #endif
183227         "# r * div - Start\n\t"
183228         "uxth	%[d1], r3\n\t"
183229         "uxth	r4, %[div]\n\t"
183230 #ifdef WOLFSSL_KEIL
183231         "muls	r4, %[d1], r4\n\t"
183232 #elif defined(__clang__)
183233         "muls	r4, %[d1]\n\t"
183234 #else
183235         "mul	r4, %[d1]\n\t"
183236 #endif
183237 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183238         "lsrs	r6, %[div], #16\n\t"
183239 #else
183240         "lsr	r6, %[div], #16\n\t"
183241 #endif
183242 #ifdef WOLFSSL_KEIL
183243         "muls	%[d1], r6, %[d1]\n\t"
183244 #elif defined(__clang__)
183245         "muls	%[d1], r6\n\t"
183246 #else
183247         "mul	%[d1], r6\n\t"
183248 #endif
183249 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183250         "lsrs	r5, %[d1], #16\n\t"
183251 #else
183252         "lsr	r5, %[d1], #16\n\t"
183253 #endif
183254 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183255         "lsls	%[d1], %[d1], #16\n\t"
183256 #else
183257         "lsl	%[d1], %[d1], #16\n\t"
183258 #endif
183259 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183260         "adds	r4, r4, %[d1]\n\t"
183261 #else
183262         "add	r4, r4, %[d1]\n\t"
183263 #endif
183264 #ifdef WOLFSSL_KEIL
183265         "adcs	r5, r5, r7\n\t"
183266 #elif defined(__clang__)
183267         "adcs	r5, r7\n\t"
183268 #else
183269         "adc	r5, r7\n\t"
183270 #endif
183271 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183272         "lsrs	%[d1], r3, #16\n\t"
183273 #else
183274         "lsr	%[d1], r3, #16\n\t"
183275 #endif
183276 #ifdef WOLFSSL_KEIL
183277         "muls	r6, %[d1], r6\n\t"
183278 #elif defined(__clang__)
183279         "muls	r6, %[d1]\n\t"
183280 #else
183281         "mul	r6, %[d1]\n\t"
183282 #endif
183283 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183284         "adds	r5, r5, r6\n\t"
183285 #else
183286         "add	r5, r5, r6\n\t"
183287 #endif
183288         "uxth	r6, %[div]\n\t"
183289 #ifdef WOLFSSL_KEIL
183290         "muls	%[d1], r6, %[d1]\n\t"
183291 #elif defined(__clang__)
183292         "muls	%[d1], r6\n\t"
183293 #else
183294         "mul	%[d1], r6\n\t"
183295 #endif
183296 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183297         "lsrs	r6, %[d1], #16\n\t"
183298 #else
183299         "lsr	r6, %[d1], #16\n\t"
183300 #endif
183301 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183302         "lsls	%[d1], %[d1], #16\n\t"
183303 #else
183304         "lsl	%[d1], %[d1], #16\n\t"
183305 #endif
183306 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183307         "adds	r4, r4, %[d1]\n\t"
183308 #else
183309         "add	r4, r4, %[d1]\n\t"
183310 #endif
183311 #ifdef WOLFSSL_KEIL
183312         "adcs	r5, r5, r6\n\t"
183313 #elif defined(__clang__)
183314         "adcs	r5, r6\n\t"
183315 #else
183316         "adc	r5, r6\n\t"
183317 #endif
183318         "# r * div - Done\n\t"
183319         "mov	%[d1], r8\n\t"
183320         "mov	r6, r9\n\t"
183321 #ifdef WOLFSSL_KEIL
183322         "subs	r4, %[d1], r4\n\t"
183323 #else
183324 #ifdef __clang__
183325         "subs	r4, %[d1], r4\n\t"
183326 #else
183327         "sub	r4, %[d1], r4\n\t"
183328 #endif
183329 #endif
183330 #ifdef WOLFSSL_KEIL
183331         "sbcs	r6, r6, r5\n\t"
183332 #elif defined(__clang__)
183333         "sbcs	r6, r5\n\t"
183334 #else
183335         "sbc	r6, r5\n\t"
183336 #endif
183337         "movs	r5, r6\n\t"
183338 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183339         "adds	r3, r3, r5\n\t"
183340 #else
183341         "add	r3, r3, r5\n\t"
183342 #endif
183343         "movs	r6, %[div]\n\t"
183344 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183345         "subs	r6, r6, r4\n\t"
183346 #else
183347         "sub	r6, r6, r4\n\t"
183348 #endif
183349 #ifdef WOLFSSL_KEIL
183350         "sbcs	r6, r6, r6\n\t"
183351 #elif defined(__clang__)
183352         "sbcs	r6, r6\n\t"
183353 #else
183354         "sbc	r6, r6\n\t"
183355 #endif
183356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183357         "subs	r3, r3, r6\n\t"
183358 #else
183359         "sub	r3, r3, r6\n\t"
183360 #endif
183361         "movs	%[d1], r3\n\t"
183362         : [d1] "+r" (d1), [d0] "+r" (d0), [div] "+r" (div)
183363         :
183364         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
183365     );
183366     return (uint32_t)(size_t)d1;
183367 }
183368 
183369 /* AND m into each word of a and store in r.
183370  *
183371  * r  A single precision integer.
183372  * a  A single precision integer.
183373  * m  Mask to AND against each digit.
183374  */
sp_1024_mask_32(sp_digit * r,const sp_digit * a,sp_digit m)183375 static void sp_1024_mask_32(sp_digit* r, const sp_digit* a, sp_digit m)
183376 {
183377 #ifdef WOLFSSL_SP_SMALL
183378     int i;
183379 
183380     for (i=0; i<32; i++) {
183381         r[i] = a[i] & m;
183382     }
183383 #else
183384     int i;
183385 
183386     for (i = 0; i < 32; i += 8) {
183387         r[i+0] = a[i+0] & m;
183388         r[i+1] = a[i+1] & m;
183389         r[i+2] = a[i+2] & m;
183390         r[i+3] = a[i+3] & m;
183391         r[i+4] = a[i+4] & m;
183392         r[i+5] = a[i+5] & m;
183393         r[i+6] = a[i+6] & m;
183394         r[i+7] = a[i+7] & m;
183395     }
183396 #endif
183397 }
183398 
183399 /* Compare a with b in constant time.
183400  *
183401  * a  A single precision integer.
183402  * b  A single precision integer.
183403  * return -ve, 0 or +ve if a is less than, equal to or greater than b
183404  * respectively.
183405  */
sp_1024_cmp_32(const sp_digit * a,const sp_digit * b)183406 SP_NOINLINE static sp_int32 sp_1024_cmp_32(const sp_digit* a, const sp_digit* b)
183407 {
183408     __asm__ __volatile__ (
183409         "movs	r2, #0\n\t"
183410         "movs	r3, #0\n\t"
183411 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183412         "mvns	r3, r3\n\t"
183413 #else
183414         "mvn	r3, r3\n\t"
183415 #endif
183416         "movs	r6, #0x7c\n\t"
183417         "\n"
183418     "L_sp_1024_cmp_32_words_%=:\n\t"
183419         "ldr	r7, [%[a], r6]\n\t"
183420         "ldr	r5, [%[b], r6]\n\t"
183421 #ifdef WOLFSSL_KEIL
183422         "ands	r7, r7, r3\n\t"
183423 #elif defined(__clang__)
183424         "ands	r7, r3\n\t"
183425 #else
183426         "and	r7, r3\n\t"
183427 #endif
183428 #ifdef WOLFSSL_KEIL
183429         "ands	r5, r5, r3\n\t"
183430 #elif defined(__clang__)
183431         "ands	r5, r3\n\t"
183432 #else
183433         "and	r5, r3\n\t"
183434 #endif
183435         "movs	r4, r7\n\t"
183436 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183437         "subs	r7, r7, r5\n\t"
183438 #else
183439         "sub	r7, r7, r5\n\t"
183440 #endif
183441 #ifdef WOLFSSL_KEIL
183442         "sbcs	r7, r7, r7\n\t"
183443 #elif defined(__clang__)
183444         "sbcs	r7, r7\n\t"
183445 #else
183446         "sbc	r7, r7\n\t"
183447 #endif
183448 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183449         "adds	r2, r2, r7\n\t"
183450 #else
183451         "add	r2, r2, r7\n\t"
183452 #endif
183453 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183454         "mvns	r7, r7\n\t"
183455 #else
183456         "mvn	r7, r7\n\t"
183457 #endif
183458 #ifdef WOLFSSL_KEIL
183459         "ands	r3, r3, r7\n\t"
183460 #elif defined(__clang__)
183461         "ands	r3, r7\n\t"
183462 #else
183463         "and	r3, r7\n\t"
183464 #endif
183465 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183466         "subs	r5, r5, r4\n\t"
183467 #else
183468         "sub	r5, r5, r4\n\t"
183469 #endif
183470 #ifdef WOLFSSL_KEIL
183471         "sbcs	r7, r7, r7\n\t"
183472 #elif defined(__clang__)
183473         "sbcs	r7, r7\n\t"
183474 #else
183475         "sbc	r7, r7\n\t"
183476 #endif
183477 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183478         "subs	r2, r2, r7\n\t"
183479 #else
183480         "sub	r2, r2, r7\n\t"
183481 #endif
183482 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183483         "mvns	r7, r7\n\t"
183484 #else
183485         "mvn	r7, r7\n\t"
183486 #endif
183487 #ifdef WOLFSSL_KEIL
183488         "ands	r3, r3, r7\n\t"
183489 #elif defined(__clang__)
183490         "ands	r3, r7\n\t"
183491 #else
183492         "and	r3, r7\n\t"
183493 #endif
183494 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183495         "subs	r6, r6, #4\n\t"
183496 #else
183497         "sub	r6, r6, #4\n\t"
183498 #endif
183499         "cmp	r6, #0\n\t"
183500         "bge	L_sp_1024_cmp_32_words_%=\n\t"
183501         "movs	%[a], r2\n\t"
183502         : [a] "+r" (a), [b] "+r" (b)
183503         :
183504         : "memory", "r2", "r3", "r4", "r5", "r6", "r7"
183505     );
183506     return (uint32_t)(size_t)a;
183507 }
183508 
183509 /* Divide d in a and put remainder into r (m*d + r = a)
183510  * m is not calculated as it is not needed at this time.
183511  *
183512  * a  Number to be divided.
183513  * d  Number to divide with.
183514  * m  Multiplier result.
183515  * r  Remainder from the division.
183516  * returns MP_OKAY indicating success.
183517  */
sp_1024_div_32(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)183518 static WC_INLINE int sp_1024_div_32(const sp_digit* a, const sp_digit* d, sp_digit* m,
183519         sp_digit* r)
183520 {
183521     sp_digit t1[64], t2[33];
183522     sp_digit div, r1;
183523     int i;
183524 
183525     (void)m;
183526 
183527     div = d[31];
183528     XMEMCPY(t1, a, sizeof(*t1) * 2 * 32);
183529     for (i=31; i>=0; i--) {
183530         sp_digit hi = t1[32 + i] - (t1[32 + i] == div);
183531         r1 = div_1024_word_32(hi, t1[32 + i - 1], div);
183532 
183533         sp_1024_mul_d_32(t2, d, r1);
183534         t1[32 + i] += sp_1024_sub_in_place_32(&t1[i], t2);
183535         t1[32 + i] -= t2[32];
183536         sp_1024_mask_32(t2, d, t1[32 + i]);
183537         t1[32 + i] += sp_1024_add_32(&t1[i], &t1[i], t2);
183538         sp_1024_mask_32(t2, d, t1[32 + i]);
183539         t1[32 + i] += sp_1024_add_32(&t1[i], &t1[i], t2);
183540     }
183541 
183542     r1 = sp_1024_cmp_32(t1, d) >= 0;
183543     sp_1024_cond_sub_32(r, t1, d, (sp_digit)0 - r1);
183544 
183545     return MP_OKAY;
183546 }
183547 
183548 /* Reduce a modulo m into r. (r = a mod m)
183549  *
183550  * r  A single precision number that is the reduced result.
183551  * a  A single precision number that is to be reduced.
183552  * m  A single precision number that is the modulus to reduce with.
183553  * returns MP_OKAY indicating success.
183554  */
sp_1024_mod_32(sp_digit * r,const sp_digit * a,const sp_digit * m)183555 static WC_INLINE int sp_1024_mod_32(sp_digit* r, const sp_digit* a, const sp_digit* m)
183556 {
183557     return sp_1024_div_32(a, m, NULL, r);
183558 }
183559 
183560 /* Multiply a number by Montgomery normalizer mod modulus (prime).
183561  *
183562  * r  The resulting Montgomery form number.
183563  * a  The number to convert.
183564  * m  The modulus (prime).
183565  * returns MEMORY_E when memory allocation fails and MP_OKAY otherwise.
183566  */
sp_1024_mod_mul_norm_32(sp_digit * r,const sp_digit * a,const sp_digit * m)183567 static int sp_1024_mod_mul_norm_32(sp_digit* r, const sp_digit* a,
183568         const sp_digit* m)
183569 {
183570     sp_1024_mul_32(r, a, p1024_norm_mod);
183571     return sp_1024_mod_32(r, r, m);
183572 }
183573 
183574 
183575 #ifdef WOLFCRYPT_HAVE_SAKKE
183576 /* Create a new point.
183577  *
183578  * heap  [in]   Buffer to allocate dynamic memory from.
183579  * sp    [in]   Data for point - only if not allocating.
183580  * p     [out]  New point.
183581  * returns MEMORY_E when dynamic memory allocation fails and 0 otherwise.
183582  */
sp_1024_point_new_ex_32(void * heap,sp_point_1024 * sp,sp_point_1024 ** p)183583 static int sp_1024_point_new_ex_32(void* heap, sp_point_1024* sp,
183584     sp_point_1024** p)
183585 {
183586     int ret = MP_OKAY;
183587     (void)heap;
183588 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
183589     (void)sp;
183590     *p = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024), heap, DYNAMIC_TYPE_ECC);
183591 #else
183592     *p = sp;
183593 #endif
183594     if (*p == NULL) {
183595         ret = MEMORY_E;
183596     }
183597     return ret;
183598 }
183599 
183600 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
183601 /* Allocate memory for point and return error. */
183602 #define sp_1024_point_new_32(heap, sp, p) sp_1024_point_new_ex_32((heap), NULL, &(p))
183603 #else
183604 /* Set pointer to data and return no error. */
183605 #define sp_1024_point_new_32(heap, sp, p) sp_1024_point_new_ex_32((heap), &(sp), &(p))
183606 #endif
183607 #endif /* WOLFCRYPT_HAVE_SAKKE */
183608 #ifdef WOLFCRYPT_HAVE_SAKKE
183609 /* Free the point.
183610  *
183611  * p      [in,out]  Point to free.
183612  * clear  [in]      Indicates whether to zeroize point.
183613  * heap   [in]      Buffer from which dynamic memory was allocate from.
183614  */
sp_1024_point_free_32(sp_point_1024 * p,int clear,void * heap)183615 static void sp_1024_point_free_32(sp_point_1024* p, int clear, void* heap)
183616 {
183617 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
183618 /* If valid pointer then clear point data if requested and free data. */
183619     if (p != NULL) {
183620         if (clear != 0) {
183621             XMEMSET(p, 0, sizeof(*p));
183622         }
183623         XFREE(p, heap, DYNAMIC_TYPE_ECC);
183624     }
183625 #else
183626 /* Clear point data if requested. */
183627     if ((p != NULL) && (clear != 0)) {
183628         XMEMSET(p, 0, sizeof(*p));
183629     }
183630 #endif
183631     (void)heap;
183632 }
183633 #endif /* WOLFCRYPT_HAVE_SAKKE */
183634 
183635 /* Convert an mp_int to an array of sp_digit.
183636  *
183637  * r  A single precision integer.
183638  * size  Maximum number of bytes to convert
183639  * a  A multi-precision integer.
183640  */
sp_1024_from_mp(sp_digit * r,int size,const mp_int * a)183641 static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a)
183642 {
183643 #if DIGIT_BIT == 32
183644     int j;
183645 
183646     XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
183647 
183648     for (j = a->used; j < size; j++) {
183649         r[j] = 0;
183650     }
183651 #elif DIGIT_BIT > 32
183652     int i;
183653     int j = 0;
183654     word32 s = 0;
183655 
183656     r[0] = 0;
183657     for (i = 0; i < a->used && j < size; i++) {
183658         r[j] |= ((sp_digit)a->dp[i] << s);
183659         r[j] &= 0xffffffff;
183660         s = 32U - s;
183661         if (j + 1 >= size) {
183662             break;
183663         }
183664         /* lint allow cast of mismatch word32 and mp_digit */
183665         r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
183666         while ((s + 32U) <= (word32)DIGIT_BIT) {
183667             s += 32U;
183668             r[j] &= 0xffffffff;
183669             if (j + 1 >= size) {
183670                 break;
183671             }
183672             if (s < (word32)DIGIT_BIT) {
183673                 /* lint allow cast of mismatch word32 and mp_digit */
183674                 r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
183675             }
183676             else {
183677                 r[++j] = (sp_digit)0;
183678             }
183679         }
183680         s = (word32)DIGIT_BIT - s;
183681     }
183682 
183683     for (j++; j < size; j++) {
183684         r[j] = 0;
183685     }
183686 #else
183687     int i;
183688     int j = 0;
183689     int s = 0;
183690 
183691     r[0] = 0;
183692     for (i = 0; i < a->used && j < size; i++) {
183693         r[j] |= ((sp_digit)a->dp[i]) << s;
183694         if (s + DIGIT_BIT >= 32) {
183695             r[j] &= 0xffffffff;
183696             if (j + 1 >= size) {
183697                 break;
183698             }
183699             s = 32 - s;
183700             if (s == DIGIT_BIT) {
183701                 r[++j] = 0;
183702                 s = 0;
183703             }
183704             else {
183705                 r[++j] = a->dp[i] >> s;
183706                 s = DIGIT_BIT - s;
183707             }
183708         }
183709         else {
183710             s += DIGIT_BIT;
183711         }
183712     }
183713 
183714     for (j++; j < size; j++) {
183715         r[j] = 0;
183716     }
183717 #endif
183718 }
183719 
183720 /* Convert a point of type ecc_point to type sp_point_1024.
183721  *
183722  * p   Point of type sp_point_1024 (result).
183723  * pm  Point of type ecc_point.
183724  */
sp_1024_point_from_ecc_point_32(sp_point_1024 * p,const ecc_point * pm)183725 static void sp_1024_point_from_ecc_point_32(sp_point_1024* p,
183726         const ecc_point* pm)
183727 {
183728     XMEMSET(p->x, 0, sizeof(p->x));
183729     XMEMSET(p->y, 0, sizeof(p->y));
183730     XMEMSET(p->z, 0, sizeof(p->z));
183731     sp_1024_from_mp(p->x, 32, pm->x);
183732     sp_1024_from_mp(p->y, 32, pm->y);
183733     sp_1024_from_mp(p->z, 32, pm->z);
183734     p->infinity = 0;
183735 }
183736 
183737 /* Convert an array of sp_digit to an mp_int.
183738  *
183739  * a  A single precision integer.
183740  * r  A multi-precision integer.
183741  */
sp_1024_to_mp(const sp_digit * a,mp_int * r)183742 static int sp_1024_to_mp(const sp_digit* a, mp_int* r)
183743 {
183744     int err;
183745 
183746     err = mp_grow(r, (1024 + DIGIT_BIT - 1) / DIGIT_BIT);
183747     if (err == MP_OKAY) { /*lint !e774 case where err is always MP_OKAY*/
183748 #if DIGIT_BIT == 32
183749         XMEMCPY(r->dp, a, sizeof(sp_digit) * 32);
183750         r->used = 32;
183751         mp_clamp(r);
183752 #elif DIGIT_BIT < 32
183753         int i;
183754         int j = 0;
183755         int s = 0;
183756 
183757         r->dp[0] = 0;
183758         for (i = 0; i < 32; i++) {
183759             r->dp[j] |= (mp_digit)(a[i] << s);
183760             r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
183761             s = DIGIT_BIT - s;
183762             r->dp[++j] = (mp_digit)(a[i] >> s);
183763             while (s + DIGIT_BIT <= 32) {
183764                 s += DIGIT_BIT;
183765                 r->dp[j++] &= ((sp_digit)1 << DIGIT_BIT) - 1;
183766                 if (s == SP_WORD_SIZE) {
183767                     r->dp[j] = 0;
183768                 }
183769                 else {
183770                     r->dp[j] = (mp_digit)(a[i] >> s);
183771                 }
183772             }
183773             s = 32 - s;
183774         }
183775         r->used = (1024 + DIGIT_BIT - 1) / DIGIT_BIT;
183776         mp_clamp(r);
183777 #else
183778         int i;
183779         int j = 0;
183780         int s = 0;
183781 
183782         r->dp[0] = 0;
183783         for (i = 0; i < 32; i++) {
183784             r->dp[j] |= ((mp_digit)a[i]) << s;
183785             if (s + 32 >= DIGIT_BIT) {
183786     #if DIGIT_BIT != 32 && DIGIT_BIT != 64
183787                 r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
183788     #endif
183789                 s = DIGIT_BIT - s;
183790                 r->dp[++j] = a[i] >> s;
183791                 s = 32 - s;
183792             }
183793             else {
183794                 s += 32;
183795             }
183796         }
183797         r->used = (1024 + DIGIT_BIT - 1) / DIGIT_BIT;
183798         mp_clamp(r);
183799 #endif
183800     }
183801 
183802     return err;
183803 }
183804 
183805 /* Convert a point of type sp_point_1024 to type ecc_point.
183806  *
183807  * p   Point of type sp_point_1024.
183808  * pm  Point of type ecc_point (result).
183809  * returns MEMORY_E when allocation of memory in ecc_point fails otherwise
183810  * MP_OKAY.
183811  */
sp_1024_point_to_ecc_point_32(const sp_point_1024 * p,ecc_point * pm)183812 static int sp_1024_point_to_ecc_point_32(const sp_point_1024* p, ecc_point* pm)
183813 {
183814     int err;
183815 
183816     err = sp_1024_to_mp(p->x, pm->x);
183817     if (err == MP_OKAY) {
183818         err = sp_1024_to_mp(p->y, pm->y);
183819     }
183820     if (err == MP_OKAY) {
183821         err = sp_1024_to_mp(p->z, pm->z);
183822     }
183823 
183824     return err;
183825 }
183826 
183827 /* Reduce the number back to 1024 bits using Montgomery reduction.
183828  *
183829  * a   A single precision number to reduce in place.
183830  * m   The single precision number representing the modulus.
183831  * mp  The digit representing the negative inverse of m mod 2^n.
183832  */
sp_1024_mont_reduce_32(sp_digit * a,const sp_digit * m,sp_digit mp)183833 SP_NOINLINE static void sp_1024_mont_reduce_32(sp_digit* a, const sp_digit* m,
183834         sp_digit mp)
183835 {
183836     __asm__ __volatile__ (
183837         "movs	r7, #0\n\t"
183838         "mov	r8, %[mp]\n\t"
183839         "mov	r12, r7\n\t"
183840         "mov	lr, %[m]\n\t"
183841         "mov	r9, %[a]\n\t"
183842         "mov	r11, %[a]\n\t"
183843         "movs	r5, #0x7c\n\t"
183844         "movs	r6, #0x80\n\t"
183845         "add	r9, r9, r5\n\t"
183846         "add	r11, r11, r6\n\t"
183847         "\n"
183848     "L_sp_1024_mont_reduce_32_mod_%=:\n\t"
183849         "movs	r7, #0\n\t"
183850         "movs	r4, #0\n\t"
183851         "# a[i] += m[0] * mu\n\t"
183852         "ldm	%[m]!, {%[mp]}\n\t"
183853         "ldm	%[a]!, {r3}\n\t"
183854         "# mu = a[i] * mp\n\t"
183855         "mov	r5, r8\n\t"
183856 #ifdef WOLFSSL_KEIL
183857         "muls	r5, r3, r5\n\t"
183858 #elif defined(__clang__)
183859         "muls	r5, r3\n\t"
183860 #else
183861         "mul	r5, r3\n\t"
183862 #endif
183863         "mov	r10, r5\n\t"
183864         "# Multiply m[0] and mu - Start\n\t"
183865         "mov	r5, r10\n\t"
183866         "uxth	r6, %[mp]\n\t"
183867         "uxth	r5, r5\n\t"
183868 #ifdef WOLFSSL_KEIL
183869         "muls	r6, r5, r6\n\t"
183870 #elif defined(__clang__)
183871         "muls	r6, r5\n\t"
183872 #else
183873         "mul	r6, r5\n\t"
183874 #endif
183875 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183876         "adds	r3, r3, r6\n\t"
183877 #else
183878         "add	r3, r3, r6\n\t"
183879 #endif
183880 #ifdef WOLFSSL_KEIL
183881         "adcs	r4, r4, r7\n\t"
183882 #elif defined(__clang__)
183883         "adcs	r4, r7\n\t"
183884 #else
183885         "adc	r4, r7\n\t"
183886 #endif
183887 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183888         "lsrs	r6, %[mp], #16\n\t"
183889 #else
183890         "lsr	r6, %[mp], #16\n\t"
183891 #endif
183892 #ifdef WOLFSSL_KEIL
183893         "muls	r5, r6, r5\n\t"
183894 #elif defined(__clang__)
183895         "muls	r5, r6\n\t"
183896 #else
183897         "mul	r5, r6\n\t"
183898 #endif
183899 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183900         "lsrs	r6, r5, #16\n\t"
183901 #else
183902         "lsr	r6, r5, #16\n\t"
183903 #endif
183904 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183905         "lsls	r5, r5, #16\n\t"
183906 #else
183907         "lsl	r5, r5, #16\n\t"
183908 #endif
183909 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183910         "adds	r3, r3, r5\n\t"
183911 #else
183912         "add	r3, r3, r5\n\t"
183913 #endif
183914 #ifdef WOLFSSL_KEIL
183915         "adcs	r4, r4, r6\n\t"
183916 #elif defined(__clang__)
183917         "adcs	r4, r6\n\t"
183918 #else
183919         "adc	r4, r6\n\t"
183920 #endif
183921         "mov	r5, r10\n\t"
183922 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183923         "lsrs	r6, %[mp], #16\n\t"
183924 #else
183925         "lsr	r6, %[mp], #16\n\t"
183926 #endif
183927 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183928         "lsrs	r5, r5, #16\n\t"
183929 #else
183930         "lsr	r5, r5, #16\n\t"
183931 #endif
183932 #ifdef WOLFSSL_KEIL
183933         "muls	r6, r5, r6\n\t"
183934 #elif defined(__clang__)
183935         "muls	r6, r5\n\t"
183936 #else
183937         "mul	r6, r5\n\t"
183938 #endif
183939 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183940         "adds	r4, r4, r6\n\t"
183941 #else
183942         "add	r4, r4, r6\n\t"
183943 #endif
183944         "uxth	r6, %[mp]\n\t"
183945 #ifdef WOLFSSL_KEIL
183946         "muls	r5, r6, r5\n\t"
183947 #elif defined(__clang__)
183948         "muls	r5, r6\n\t"
183949 #else
183950         "mul	r5, r6\n\t"
183951 #endif
183952 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183953         "lsrs	r6, r5, #16\n\t"
183954 #else
183955         "lsr	r6, r5, #16\n\t"
183956 #endif
183957 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183958         "lsls	r5, r5, #16\n\t"
183959 #else
183960         "lsl	r5, r5, #16\n\t"
183961 #endif
183962 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183963         "adds	r3, r3, r5\n\t"
183964 #else
183965         "add	r3, r3, r5\n\t"
183966 #endif
183967 #ifdef WOLFSSL_KEIL
183968         "adcs	r4, r4, r6\n\t"
183969 #elif defined(__clang__)
183970         "adcs	r4, r6\n\t"
183971 #else
183972         "adc	r4, r6\n\t"
183973 #endif
183974         "# Multiply m[0] and mu - Done\n\t"
183975         "\n"
183976     "L_sp_1024_mont_reduce_32_word_%=:\n\t"
183977         "# a[i+j] += m[j] * mu\n\t"
183978         "ldr	r3, [%[a]]\n\t"
183979         "ldm	%[m]!, {%[mp]}\n\t"
183980 #if defined(__clang__) || defined(WOLFSSL_KEIL)
183981         "adds	r3, r3, r4\n\t"
183982 #else
183983         "add	r3, r3, r4\n\t"
183984 #endif
183985         "movs	r4, #0\n\t"
183986 #ifdef WOLFSSL_KEIL
183987         "adcs	r4, r4, r7\n\t"
183988 #elif defined(__clang__)
183989         "adcs	r4, r7\n\t"
183990 #else
183991         "adc	r4, r7\n\t"
183992 #endif
183993         "# Multiply m[j] and mu - Start\n\t"
183994         "mov	r5, r10\n\t"
183995         "uxth	r6, %[mp]\n\t"
183996         "uxth	r5, r5\n\t"
183997 #ifdef WOLFSSL_KEIL
183998         "muls	r6, r5, r6\n\t"
183999 #elif defined(__clang__)
184000         "muls	r6, r5\n\t"
184001 #else
184002         "mul	r6, r5\n\t"
184003 #endif
184004 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184005         "adds	r3, r3, r6\n\t"
184006 #else
184007         "add	r3, r3, r6\n\t"
184008 #endif
184009 #ifdef WOLFSSL_KEIL
184010         "adcs	r4, r4, r7\n\t"
184011 #elif defined(__clang__)
184012         "adcs	r4, r7\n\t"
184013 #else
184014         "adc	r4, r7\n\t"
184015 #endif
184016 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184017         "lsrs	r6, %[mp], #16\n\t"
184018 #else
184019         "lsr	r6, %[mp], #16\n\t"
184020 #endif
184021 #ifdef WOLFSSL_KEIL
184022         "muls	r5, r6, r5\n\t"
184023 #elif defined(__clang__)
184024         "muls	r5, r6\n\t"
184025 #else
184026         "mul	r5, r6\n\t"
184027 #endif
184028 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184029         "lsrs	r6, r5, #16\n\t"
184030 #else
184031         "lsr	r6, r5, #16\n\t"
184032 #endif
184033 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184034         "lsls	r5, r5, #16\n\t"
184035 #else
184036         "lsl	r5, r5, #16\n\t"
184037 #endif
184038 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184039         "adds	r3, r3, r5\n\t"
184040 #else
184041         "add	r3, r3, r5\n\t"
184042 #endif
184043 #ifdef WOLFSSL_KEIL
184044         "adcs	r4, r4, r6\n\t"
184045 #elif defined(__clang__)
184046         "adcs	r4, r6\n\t"
184047 #else
184048         "adc	r4, r6\n\t"
184049 #endif
184050         "mov	r5, r10\n\t"
184051 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184052         "lsrs	r6, %[mp], #16\n\t"
184053 #else
184054         "lsr	r6, %[mp], #16\n\t"
184055 #endif
184056 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184057         "lsrs	r5, r5, #16\n\t"
184058 #else
184059         "lsr	r5, r5, #16\n\t"
184060 #endif
184061 #ifdef WOLFSSL_KEIL
184062         "muls	r6, r5, r6\n\t"
184063 #elif defined(__clang__)
184064         "muls	r6, r5\n\t"
184065 #else
184066         "mul	r6, r5\n\t"
184067 #endif
184068 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184069         "adds	r4, r4, r6\n\t"
184070 #else
184071         "add	r4, r4, r6\n\t"
184072 #endif
184073         "uxth	r6, %[mp]\n\t"
184074 #ifdef WOLFSSL_KEIL
184075         "muls	r5, r6, r5\n\t"
184076 #elif defined(__clang__)
184077         "muls	r5, r6\n\t"
184078 #else
184079         "mul	r5, r6\n\t"
184080 #endif
184081 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184082         "lsrs	r6, r5, #16\n\t"
184083 #else
184084         "lsr	r6, r5, #16\n\t"
184085 #endif
184086 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184087         "lsls	r5, r5, #16\n\t"
184088 #else
184089         "lsl	r5, r5, #16\n\t"
184090 #endif
184091 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184092         "adds	r3, r3, r5\n\t"
184093 #else
184094         "add	r3, r3, r5\n\t"
184095 #endif
184096 #ifdef WOLFSSL_KEIL
184097         "adcs	r4, r4, r6\n\t"
184098 #elif defined(__clang__)
184099         "adcs	r4, r6\n\t"
184100 #else
184101         "adc	r4, r6\n\t"
184102 #endif
184103         "# Multiply m[j] and mu - Done\n\t"
184104         "stm	%[a]!, {r3}\n\t"
184105         "cmp	%[a], r9\n\t"
184106         "blt	L_sp_1024_mont_reduce_32_word_%=\n\t"
184107         "# a[i+31] += m[31] * mu\n\t"
184108         "ldr	%[mp], [%[m]]\n\t"
184109         "mov	r3, r12\n\t"
184110         "# Multiply m[31] and mu - Start\n\t"
184111         "mov	r5, r10\n\t"
184112         "uxth	r6, %[mp]\n\t"
184113         "uxth	r5, r5\n\t"
184114 #ifdef WOLFSSL_KEIL
184115         "muls	r6, r5, r6\n\t"
184116 #elif defined(__clang__)
184117         "muls	r6, r5\n\t"
184118 #else
184119         "mul	r6, r5\n\t"
184120 #endif
184121 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184122         "adds	r4, r4, r6\n\t"
184123 #else
184124         "add	r4, r4, r6\n\t"
184125 #endif
184126 #ifdef WOLFSSL_KEIL
184127         "adcs	r3, r3, r7\n\t"
184128 #elif defined(__clang__)
184129         "adcs	r3, r7\n\t"
184130 #else
184131         "adc	r3, r7\n\t"
184132 #endif
184133 #ifdef WOLFSSL_KEIL
184134         "adcs	r7, r7, r7\n\t"
184135 #elif defined(__clang__)
184136         "adcs	r7, r7\n\t"
184137 #else
184138         "adc	r7, r7\n\t"
184139 #endif
184140 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184141         "lsrs	r6, %[mp], #16\n\t"
184142 #else
184143         "lsr	r6, %[mp], #16\n\t"
184144 #endif
184145 #ifdef WOLFSSL_KEIL
184146         "muls	r5, r6, r5\n\t"
184147 #elif defined(__clang__)
184148         "muls	r5, r6\n\t"
184149 #else
184150         "mul	r5, r6\n\t"
184151 #endif
184152 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184153         "lsrs	r6, r5, #16\n\t"
184154 #else
184155         "lsr	r6, r5, #16\n\t"
184156 #endif
184157 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184158         "lsls	r5, r5, #16\n\t"
184159 #else
184160         "lsl	r5, r5, #16\n\t"
184161 #endif
184162 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184163         "adds	r4, r4, r5\n\t"
184164 #else
184165         "add	r4, r4, r5\n\t"
184166 #endif
184167 #ifdef WOLFSSL_KEIL
184168         "adcs	r3, r3, r6\n\t"
184169 #elif defined(__clang__)
184170         "adcs	r3, r6\n\t"
184171 #else
184172         "adc	r3, r6\n\t"
184173 #endif
184174 #ifdef WOLFSSL_KEIL
184175         "adcs	r7, r7, r7\n\t"
184176 #elif defined(__clang__)
184177         "adcs	r7, r7\n\t"
184178 #else
184179         "adc	r7, r7\n\t"
184180 #endif
184181         "mov	r5, r10\n\t"
184182 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184183         "lsrs	r6, %[mp], #16\n\t"
184184 #else
184185         "lsr	r6, %[mp], #16\n\t"
184186 #endif
184187 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184188         "lsrs	r5, r5, #16\n\t"
184189 #else
184190         "lsr	r5, r5, #16\n\t"
184191 #endif
184192 #ifdef WOLFSSL_KEIL
184193         "muls	r6, r5, r6\n\t"
184194 #elif defined(__clang__)
184195         "muls	r6, r5\n\t"
184196 #else
184197         "mul	r6, r5\n\t"
184198 #endif
184199 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184200         "adds	r3, r3, r6\n\t"
184201 #else
184202         "add	r3, r3, r6\n\t"
184203 #endif
184204 #ifdef WOLFSSL_KEIL
184205         "adcs	r7, r7, r7\n\t"
184206 #elif defined(__clang__)
184207         "adcs	r7, r7\n\t"
184208 #else
184209         "adc	r7, r7\n\t"
184210 #endif
184211         "uxth	r6, %[mp]\n\t"
184212 #ifdef WOLFSSL_KEIL
184213         "muls	r5, r6, r5\n\t"
184214 #elif defined(__clang__)
184215         "muls	r5, r6\n\t"
184216 #else
184217         "mul	r5, r6\n\t"
184218 #endif
184219 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184220         "lsrs	r6, r5, #16\n\t"
184221 #else
184222         "lsr	r6, r5, #16\n\t"
184223 #endif
184224 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184225         "lsls	r5, r5, #16\n\t"
184226 #else
184227         "lsl	r5, r5, #16\n\t"
184228 #endif
184229 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184230         "adds	r4, r4, r5\n\t"
184231 #else
184232         "add	r4, r4, r5\n\t"
184233 #endif
184234 #ifdef WOLFSSL_KEIL
184235         "adcs	r3, r3, r6\n\t"
184236 #elif defined(__clang__)
184237         "adcs	r3, r6\n\t"
184238 #else
184239         "adc	r3, r6\n\t"
184240 #endif
184241 #ifdef WOLFSSL_KEIL
184242         "adcs	r7, r7, r7\n\t"
184243 #elif defined(__clang__)
184244         "adcs	r7, r7\n\t"
184245 #else
184246         "adc	r7, r7\n\t"
184247 #endif
184248         "# Multiply m[31] and mu - Done\n\t"
184249         "ldr	r5, [%[a]]\n\t"
184250         "ldr	r6, [%[a], #4]\n\t"
184251         "movs	%[mp], #0\n\t"
184252 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184253         "adds	r5, r5, r4\n\t"
184254 #else
184255         "add	r5, r5, r4\n\t"
184256 #endif
184257 #ifdef WOLFSSL_KEIL
184258         "adcs	r6, r6, r3\n\t"
184259 #elif defined(__clang__)
184260         "adcs	r6, r3\n\t"
184261 #else
184262         "adc	r6, r3\n\t"
184263 #endif
184264 #ifdef WOLFSSL_KEIL
184265         "adcs	r7, r7, %[mp]\n\t"
184266 #elif defined(__clang__)
184267         "adcs	r7, %[mp]\n\t"
184268 #else
184269         "adc	r7, %[mp]\n\t"
184270 #endif
184271         "stm	%[a]!, {r5, r6}\n\t"
184272         "# i += 1\n\t"
184273 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184274         "subs	%[a], %[a], #4\n\t"
184275 #else
184276         "sub	%[a], %[a], #4\n\t"
184277 #endif
184278         "movs	r3, #0x7c\n\t"
184279         "mov	r9, %[a]\n\t"
184280 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184281         "subs	%[a], %[a], r3\n\t"
184282 #else
184283         "sub	%[a], %[a], r3\n\t"
184284 #endif
184285         "mov	r12, r7\n\t"
184286         "mov	%[m], lr\n\t"
184287         "cmp	r11, %[a]\n\t"
184288         "bgt	L_sp_1024_mont_reduce_32_mod_%=\n\t"
184289         "ldr	r5, [%[m], #124]\n\t"
184290 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184291         "negs	r7, r7\n\t"
184292 #else
184293         "neg	r7, r7\n\t"
184294 #endif
184295 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184296         "subs	r5, r5, r6\n\t"
184297 #else
184298         "sub	r5, r5, r6\n\t"
184299 #endif
184300 #ifdef WOLFSSL_KEIL
184301         "sbcs	r5, r5, r5\n\t"
184302 #elif defined(__clang__)
184303         "sbcs	r5, r5\n\t"
184304 #else
184305         "sbc	r5, r5\n\t"
184306 #endif
184307 #ifdef WOLFSSL_KEIL
184308         "orrs	r7, r7, r5\n\t"
184309 #elif defined(__clang__)
184310         "orrs	r7, r5\n\t"
184311 #else
184312         "orr	r7, r5\n\t"
184313 #endif
184314         "# Subtract masked modulus\n\t"
184315         "movs	r4, #0x80\n\t"
184316         "movs	%[mp], #0\n\t"
184317         "movs	r3, #0\n\t"
184318 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184319         "subs	%[a], %[a], r4\n\t"
184320 #else
184321         "sub	%[a], %[a], r4\n\t"
184322 #endif
184323 #ifndef WOLFSSL_SP_LARGE_CODE
184324         "\n"
184325     "L_sp_1024_mont_reduce_32_sub_mask_%=:\n\t"
184326         "ldm	%[m]!, {r6}\n\t"
184327         "movs	r5, #0\n\t"
184328 #ifdef WOLFSSL_KEIL
184329         "ands	r6, r6, r7\n\t"
184330 #elif defined(__clang__)
184331         "ands	r6, r7\n\t"
184332 #else
184333         "and	r6, r7\n\t"
184334 #endif
184335 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184336         "subs	r5, r5, %[mp]\n\t"
184337 #else
184338         "sub	r5, r5, %[mp]\n\t"
184339 #endif
184340         "ldr	r5, [%[a], r4]\n\t"
184341 #ifdef WOLFSSL_KEIL
184342         "sbcs	r5, r5, r6\n\t"
184343 #elif defined(__clang__)
184344         "sbcs	r5, r6\n\t"
184345 #else
184346         "sbc	r5, r6\n\t"
184347 #endif
184348 #ifdef WOLFSSL_KEIL
184349         "sbcs	%[mp], %[mp], %[mp]\n\t"
184350 #elif defined(__clang__)
184351         "sbcs	%[mp], %[mp]\n\t"
184352 #else
184353         "sbc	%[mp], %[mp]\n\t"
184354 #endif
184355         "stm	%[a]!, {r5}\n\t"
184356 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184357         "adds	r3, r3, #4\n\t"
184358 #else
184359         "add	r3, r3, #4\n\t"
184360 #endif
184361         "cmp	r3, r4\n\t"
184362         "blt	L_sp_1024_mont_reduce_32_sub_mask_%=\n\t"
184363 #else /* WOLFSSL_SP_LARGE_CODE */
184364         "ldm	%[m]!, {r6}\n\t"
184365 #ifdef WOLFSSL_KEIL
184366         "ands	r6, r6, r7\n\t"
184367 #elif defined(__clang__)
184368         "ands	r6, r7\n\t"
184369 #else
184370         "and	r6, r7\n\t"
184371 #endif
184372         "ldr	r5, [%[a], r4]\n\t"
184373 #if defined(__clang__) || defined(WOLFSSL_KEIL)
184374         "subs	r5, r5, r6\n\t"
184375 #else
184376         "sub	r5, r5, r6\n\t"
184377 #endif
184378         "stm	%[a]!, {r5}\n\t"
184379         "ldm	%[m]!, {r6}\n\t"
184380 #ifdef WOLFSSL_KEIL
184381         "ands	r6, r6, r7\n\t"
184382 #elif defined(__clang__)
184383         "ands	r6, r7\n\t"
184384 #else
184385         "and	r6, r7\n\t"
184386 #endif
184387         "ldr	r5, [%[a], r4]\n\t"
184388 #ifdef WOLFSSL_KEIL
184389         "sbcs	r5, r5, r6\n\t"
184390 #elif defined(__clang__)
184391         "sbcs	r5, r6\n\t"
184392 #else
184393         "sbc	r5, r6\n\t"
184394 #endif
184395         "stm	%[a]!, {r5}\n\t"
184396         "ldm	%[m]!, {r6}\n\t"
184397 #ifdef WOLFSSL_KEIL
184398         "ands	r6, r6, r7\n\t"
184399 #elif defined(__clang__)
184400         "ands	r6, r7\n\t"
184401 #else
184402         "and	r6, r7\n\t"
184403 #endif
184404         "ldr	r5, [%[a], r4]\n\t"
184405 #ifdef WOLFSSL_KEIL
184406         "sbcs	r5, r5, r6\n\t"
184407 #elif defined(__clang__)
184408         "sbcs	r5, r6\n\t"
184409 #else
184410         "sbc	r5, r6\n\t"
184411 #endif
184412         "stm	%[a]!, {r5}\n\t"
184413         "ldm	%[m]!, {r6}\n\t"
184414 #ifdef WOLFSSL_KEIL
184415         "ands	r6, r6, r7\n\t"
184416 #elif defined(__clang__)
184417         "ands	r6, r7\n\t"
184418 #else
184419         "and	r6, r7\n\t"
184420 #endif
184421         "ldr	r5, [%[a], r4]\n\t"
184422 #ifdef WOLFSSL_KEIL
184423         "sbcs	r5, r5, r6\n\t"
184424 #elif defined(__clang__)
184425         "sbcs	r5, r6\n\t"
184426 #else
184427         "sbc	r5, r6\n\t"
184428 #endif
184429         "stm	%[a]!, {r5}\n\t"
184430         "ldm	%[m]!, {r6}\n\t"
184431 #ifdef WOLFSSL_KEIL
184432         "ands	r6, r6, r7\n\t"
184433 #elif defined(__clang__)
184434         "ands	r6, r7\n\t"
184435 #else
184436         "and	r6, r7\n\t"
184437 #endif
184438         "ldr	r5, [%[a], r4]\n\t"
184439 #ifdef WOLFSSL_KEIL
184440         "sbcs	r5, r5, r6\n\t"
184441 #elif defined(__clang__)
184442         "sbcs	r5, r6\n\t"
184443 #else
184444         "sbc	r5, r6\n\t"
184445 #endif
184446         "stm	%[a]!, {r5}\n\t"
184447         "ldm	%[m]!, {r6}\n\t"
184448 #ifdef WOLFSSL_KEIL
184449         "ands	r6, r6, r7\n\t"
184450 #elif defined(__clang__)
184451         "ands	r6, r7\n\t"
184452 #else
184453         "and	r6, r7\n\t"
184454 #endif
184455         "ldr	r5, [%[a], r4]\n\t"
184456 #ifdef WOLFSSL_KEIL
184457         "sbcs	r5, r5, r6\n\t"
184458 #elif defined(__clang__)
184459         "sbcs	r5, r6\n\t"
184460 #else
184461         "sbc	r5, r6\n\t"
184462 #endif
184463         "stm	%[a]!, {r5}\n\t"
184464         "ldm	%[m]!, {r6}\n\t"
184465 #ifdef WOLFSSL_KEIL
184466         "ands	r6, r6, r7\n\t"
184467 #elif defined(__clang__)
184468         "ands	r6, r7\n\t"
184469 #else
184470         "and	r6, r7\n\t"
184471 #endif
184472         "ldr	r5, [%[a], r4]\n\t"
184473 #ifdef WOLFSSL_KEIL
184474         "sbcs	r5, r5, r6\n\t"
184475 #elif defined(__clang__)
184476         "sbcs	r5, r6\n\t"
184477 #else
184478         "sbc	r5, r6\n\t"
184479 #endif
184480         "stm	%[a]!, {r5}\n\t"
184481         "ldm	%[m]!, {r6}\n\t"
184482 #ifdef WOLFSSL_KEIL
184483         "ands	r6, r6, r7\n\t"
184484 #elif defined(__clang__)
184485         "ands	r6, r7\n\t"
184486 #else
184487         "and	r6, r7\n\t"
184488 #endif
184489         "ldr	r5, [%[a], r4]\n\t"
184490 #ifdef WOLFSSL_KEIL
184491         "sbcs	r5, r5, r6\n\t"
184492 #elif defined(__clang__)
184493         "sbcs	r5, r6\n\t"
184494 #else
184495         "sbc	r5, r6\n\t"
184496 #endif
184497         "stm	%[a]!, {r5}\n\t"
184498         "ldm	%[m]!, {r6}\n\t"
184499 #ifdef WOLFSSL_KEIL
184500         "ands	r6, r6, r7\n\t"
184501 #elif defined(__clang__)
184502         "ands	r6, r7\n\t"
184503 #else
184504         "and	r6, r7\n\t"
184505 #endif
184506         "ldr	r5, [%[a], r4]\n\t"
184507 #ifdef WOLFSSL_KEIL
184508         "sbcs	r5, r5, r6\n\t"
184509 #elif defined(__clang__)
184510         "sbcs	r5, r6\n\t"
184511 #else
184512         "sbc	r5, r6\n\t"
184513 #endif
184514         "stm	%[a]!, {r5}\n\t"
184515         "ldm	%[m]!, {r6}\n\t"
184516 #ifdef WOLFSSL_KEIL
184517         "ands	r6, r6, r7\n\t"
184518 #elif defined(__clang__)
184519         "ands	r6, r7\n\t"
184520 #else
184521         "and	r6, r7\n\t"
184522 #endif
184523         "ldr	r5, [%[a], r4]\n\t"
184524 #ifdef WOLFSSL_KEIL
184525         "sbcs	r5, r5, r6\n\t"
184526 #elif defined(__clang__)
184527         "sbcs	r5, r6\n\t"
184528 #else
184529         "sbc	r5, r6\n\t"
184530 #endif
184531         "stm	%[a]!, {r5}\n\t"
184532         "ldm	%[m]!, {r6}\n\t"
184533 #ifdef WOLFSSL_KEIL
184534         "ands	r6, r6, r7\n\t"
184535 #elif defined(__clang__)
184536         "ands	r6, r7\n\t"
184537 #else
184538         "and	r6, r7\n\t"
184539 #endif
184540         "ldr	r5, [%[a], r4]\n\t"
184541 #ifdef WOLFSSL_KEIL
184542         "sbcs	r5, r5, r6\n\t"
184543 #elif defined(__clang__)
184544         "sbcs	r5, r6\n\t"
184545 #else
184546         "sbc	r5, r6\n\t"
184547 #endif
184548         "stm	%[a]!, {r5}\n\t"
184549         "ldm	%[m]!, {r6}\n\t"
184550 #ifdef WOLFSSL_KEIL
184551         "ands	r6, r6, r7\n\t"
184552 #elif defined(__clang__)
184553         "ands	r6, r7\n\t"
184554 #else
184555         "and	r6, r7\n\t"
184556 #endif
184557         "ldr	r5, [%[a], r4]\n\t"
184558 #ifdef WOLFSSL_KEIL
184559         "sbcs	r5, r5, r6\n\t"
184560 #elif defined(__clang__)
184561         "sbcs	r5, r6\n\t"
184562 #else
184563         "sbc	r5, r6\n\t"
184564 #endif
184565         "stm	%[a]!, {r5}\n\t"
184566         "ldm	%[m]!, {r6}\n\t"
184567 #ifdef WOLFSSL_KEIL
184568         "ands	r6, r6, r7\n\t"
184569 #elif defined(__clang__)
184570         "ands	r6, r7\n\t"
184571 #else
184572         "and	r6, r7\n\t"
184573 #endif
184574         "ldr	r5, [%[a], r4]\n\t"
184575 #ifdef WOLFSSL_KEIL
184576         "sbcs	r5, r5, r6\n\t"
184577 #elif defined(__clang__)
184578         "sbcs	r5, r6\n\t"
184579 #else
184580         "sbc	r5, r6\n\t"
184581 #endif
184582         "stm	%[a]!, {r5}\n\t"
184583         "ldm	%[m]!, {r6}\n\t"
184584 #ifdef WOLFSSL_KEIL
184585         "ands	r6, r6, r7\n\t"
184586 #elif defined(__clang__)
184587         "ands	r6, r7\n\t"
184588 #else
184589         "and	r6, r7\n\t"
184590 #endif
184591         "ldr	r5, [%[a], r4]\n\t"
184592 #ifdef WOLFSSL_KEIL
184593         "sbcs	r5, r5, r6\n\t"
184594 #elif defined(__clang__)
184595         "sbcs	r5, r6\n\t"
184596 #else
184597         "sbc	r5, r6\n\t"
184598 #endif
184599         "stm	%[a]!, {r5}\n\t"
184600         "ldm	%[m]!, {r6}\n\t"
184601 #ifdef WOLFSSL_KEIL
184602         "ands	r6, r6, r7\n\t"
184603 #elif defined(__clang__)
184604         "ands	r6, r7\n\t"
184605 #else
184606         "and	r6, r7\n\t"
184607 #endif
184608         "ldr	r5, [%[a], r4]\n\t"
184609 #ifdef WOLFSSL_KEIL
184610         "sbcs	r5, r5, r6\n\t"
184611 #elif defined(__clang__)
184612         "sbcs	r5, r6\n\t"
184613 #else
184614         "sbc	r5, r6\n\t"
184615 #endif
184616         "stm	%[a]!, {r5}\n\t"
184617         "ldm	%[m]!, {r6}\n\t"
184618 #ifdef WOLFSSL_KEIL
184619         "ands	r6, r6, r7\n\t"
184620 #elif defined(__clang__)
184621         "ands	r6, r7\n\t"
184622 #else
184623         "and	r6, r7\n\t"
184624 #endif
184625         "ldr	r5, [%[a], r4]\n\t"
184626 #ifdef WOLFSSL_KEIL
184627         "sbcs	r5, r5, r6\n\t"
184628 #elif defined(__clang__)
184629         "sbcs	r5, r6\n\t"
184630 #else
184631         "sbc	r5, r6\n\t"
184632 #endif
184633         "stm	%[a]!, {r5}\n\t"
184634         "ldm	%[m]!, {r6}\n\t"
184635 #ifdef WOLFSSL_KEIL
184636         "ands	r6, r6, r7\n\t"
184637 #elif defined(__clang__)
184638         "ands	r6, r7\n\t"
184639 #else
184640         "and	r6, r7\n\t"
184641 #endif
184642         "ldr	r5, [%[a], r4]\n\t"
184643 #ifdef WOLFSSL_KEIL
184644         "sbcs	r5, r5, r6\n\t"
184645 #elif defined(__clang__)
184646         "sbcs	r5, r6\n\t"
184647 #else
184648         "sbc	r5, r6\n\t"
184649 #endif
184650         "stm	%[a]!, {r5}\n\t"
184651         "ldm	%[m]!, {r6}\n\t"
184652 #ifdef WOLFSSL_KEIL
184653         "ands	r6, r6, r7\n\t"
184654 #elif defined(__clang__)
184655         "ands	r6, r7\n\t"
184656 #else
184657         "and	r6, r7\n\t"
184658 #endif
184659         "ldr	r5, [%[a], r4]\n\t"
184660 #ifdef WOLFSSL_KEIL
184661         "sbcs	r5, r5, r6\n\t"
184662 #elif defined(__clang__)
184663         "sbcs	r5, r6\n\t"
184664 #else
184665         "sbc	r5, r6\n\t"
184666 #endif
184667         "stm	%[a]!, {r5}\n\t"
184668         "ldm	%[m]!, {r6}\n\t"
184669 #ifdef WOLFSSL_KEIL
184670         "ands	r6, r6, r7\n\t"
184671 #elif defined(__clang__)
184672         "ands	r6, r7\n\t"
184673 #else
184674         "and	r6, r7\n\t"
184675 #endif
184676         "ldr	r5, [%[a], r4]\n\t"
184677 #ifdef WOLFSSL_KEIL
184678         "sbcs	r5, r5, r6\n\t"
184679 #elif defined(__clang__)
184680         "sbcs	r5, r6\n\t"
184681 #else
184682         "sbc	r5, r6\n\t"
184683 #endif
184684         "stm	%[a]!, {r5}\n\t"
184685         "ldm	%[m]!, {r6}\n\t"
184686 #ifdef WOLFSSL_KEIL
184687         "ands	r6, r6, r7\n\t"
184688 #elif defined(__clang__)
184689         "ands	r6, r7\n\t"
184690 #else
184691         "and	r6, r7\n\t"
184692 #endif
184693         "ldr	r5, [%[a], r4]\n\t"
184694 #ifdef WOLFSSL_KEIL
184695         "sbcs	r5, r5, r6\n\t"
184696 #elif defined(__clang__)
184697         "sbcs	r5, r6\n\t"
184698 #else
184699         "sbc	r5, r6\n\t"
184700 #endif
184701         "stm	%[a]!, {r5}\n\t"
184702         "ldm	%[m]!, {r6}\n\t"
184703 #ifdef WOLFSSL_KEIL
184704         "ands	r6, r6, r7\n\t"
184705 #elif defined(__clang__)
184706         "ands	r6, r7\n\t"
184707 #else
184708         "and	r6, r7\n\t"
184709 #endif
184710         "ldr	r5, [%[a], r4]\n\t"
184711 #ifdef WOLFSSL_KEIL
184712         "sbcs	r5, r5, r6\n\t"
184713 #elif defined(__clang__)
184714         "sbcs	r5, r6\n\t"
184715 #else
184716         "sbc	r5, r6\n\t"
184717 #endif
184718         "stm	%[a]!, {r5}\n\t"
184719         "ldm	%[m]!, {r6}\n\t"
184720 #ifdef WOLFSSL_KEIL
184721         "ands	r6, r6, r7\n\t"
184722 #elif defined(__clang__)
184723         "ands	r6, r7\n\t"
184724 #else
184725         "and	r6, r7\n\t"
184726 #endif
184727         "ldr	r5, [%[a], r4]\n\t"
184728 #ifdef WOLFSSL_KEIL
184729         "sbcs	r5, r5, r6\n\t"
184730 #elif defined(__clang__)
184731         "sbcs	r5, r6\n\t"
184732 #else
184733         "sbc	r5, r6\n\t"
184734 #endif
184735         "stm	%[a]!, {r5}\n\t"
184736         "ldm	%[m]!, {r6}\n\t"
184737 #ifdef WOLFSSL_KEIL
184738         "ands	r6, r6, r7\n\t"
184739 #elif defined(__clang__)
184740         "ands	r6, r7\n\t"
184741 #else
184742         "and	r6, r7\n\t"
184743 #endif
184744         "ldr	r5, [%[a], r4]\n\t"
184745 #ifdef WOLFSSL_KEIL
184746         "sbcs	r5, r5, r6\n\t"
184747 #elif defined(__clang__)
184748         "sbcs	r5, r6\n\t"
184749 #else
184750         "sbc	r5, r6\n\t"
184751 #endif
184752         "stm	%[a]!, {r5}\n\t"
184753         "ldm	%[m]!, {r6}\n\t"
184754 #ifdef WOLFSSL_KEIL
184755         "ands	r6, r6, r7\n\t"
184756 #elif defined(__clang__)
184757         "ands	r6, r7\n\t"
184758 #else
184759         "and	r6, r7\n\t"
184760 #endif
184761         "ldr	r5, [%[a], r4]\n\t"
184762 #ifdef WOLFSSL_KEIL
184763         "sbcs	r5, r5, r6\n\t"
184764 #elif defined(__clang__)
184765         "sbcs	r5, r6\n\t"
184766 #else
184767         "sbc	r5, r6\n\t"
184768 #endif
184769         "stm	%[a]!, {r5}\n\t"
184770         "ldm	%[m]!, {r6}\n\t"
184771 #ifdef WOLFSSL_KEIL
184772         "ands	r6, r6, r7\n\t"
184773 #elif defined(__clang__)
184774         "ands	r6, r7\n\t"
184775 #else
184776         "and	r6, r7\n\t"
184777 #endif
184778         "ldr	r5, [%[a], r4]\n\t"
184779 #ifdef WOLFSSL_KEIL
184780         "sbcs	r5, r5, r6\n\t"
184781 #elif defined(__clang__)
184782         "sbcs	r5, r6\n\t"
184783 #else
184784         "sbc	r5, r6\n\t"
184785 #endif
184786         "stm	%[a]!, {r5}\n\t"
184787         "ldm	%[m]!, {r6}\n\t"
184788 #ifdef WOLFSSL_KEIL
184789         "ands	r6, r6, r7\n\t"
184790 #elif defined(__clang__)
184791         "ands	r6, r7\n\t"
184792 #else
184793         "and	r6, r7\n\t"
184794 #endif
184795         "ldr	r5, [%[a], r4]\n\t"
184796 #ifdef WOLFSSL_KEIL
184797         "sbcs	r5, r5, r6\n\t"
184798 #elif defined(__clang__)
184799         "sbcs	r5, r6\n\t"
184800 #else
184801         "sbc	r5, r6\n\t"
184802 #endif
184803         "stm	%[a]!, {r5}\n\t"
184804         "ldm	%[m]!, {r6}\n\t"
184805 #ifdef WOLFSSL_KEIL
184806         "ands	r6, r6, r7\n\t"
184807 #elif defined(__clang__)
184808         "ands	r6, r7\n\t"
184809 #else
184810         "and	r6, r7\n\t"
184811 #endif
184812         "ldr	r5, [%[a], r4]\n\t"
184813 #ifdef WOLFSSL_KEIL
184814         "sbcs	r5, r5, r6\n\t"
184815 #elif defined(__clang__)
184816         "sbcs	r5, r6\n\t"
184817 #else
184818         "sbc	r5, r6\n\t"
184819 #endif
184820         "stm	%[a]!, {r5}\n\t"
184821         "ldm	%[m]!, {r6}\n\t"
184822 #ifdef WOLFSSL_KEIL
184823         "ands	r6, r6, r7\n\t"
184824 #elif defined(__clang__)
184825         "ands	r6, r7\n\t"
184826 #else
184827         "and	r6, r7\n\t"
184828 #endif
184829         "ldr	r5, [%[a], r4]\n\t"
184830 #ifdef WOLFSSL_KEIL
184831         "sbcs	r5, r5, r6\n\t"
184832 #elif defined(__clang__)
184833         "sbcs	r5, r6\n\t"
184834 #else
184835         "sbc	r5, r6\n\t"
184836 #endif
184837         "stm	%[a]!, {r5}\n\t"
184838         "ldm	%[m]!, {r6}\n\t"
184839 #ifdef WOLFSSL_KEIL
184840         "ands	r6, r6, r7\n\t"
184841 #elif defined(__clang__)
184842         "ands	r6, r7\n\t"
184843 #else
184844         "and	r6, r7\n\t"
184845 #endif
184846         "ldr	r5, [%[a], r4]\n\t"
184847 #ifdef WOLFSSL_KEIL
184848         "sbcs	r5, r5, r6\n\t"
184849 #elif defined(__clang__)
184850         "sbcs	r5, r6\n\t"
184851 #else
184852         "sbc	r5, r6\n\t"
184853 #endif
184854         "stm	%[a]!, {r5}\n\t"
184855         "ldm	%[m]!, {r6}\n\t"
184856 #ifdef WOLFSSL_KEIL
184857         "ands	r6, r6, r7\n\t"
184858 #elif defined(__clang__)
184859         "ands	r6, r7\n\t"
184860 #else
184861         "and	r6, r7\n\t"
184862 #endif
184863         "ldr	r5, [%[a], r4]\n\t"
184864 #ifdef WOLFSSL_KEIL
184865         "sbcs	r5, r5, r6\n\t"
184866 #elif defined(__clang__)
184867         "sbcs	r5, r6\n\t"
184868 #else
184869         "sbc	r5, r6\n\t"
184870 #endif
184871         "stm	%[a]!, {r5}\n\t"
184872         "ldm	%[m]!, {r6}\n\t"
184873 #ifdef WOLFSSL_KEIL
184874         "ands	r6, r6, r7\n\t"
184875 #elif defined(__clang__)
184876         "ands	r6, r7\n\t"
184877 #else
184878         "and	r6, r7\n\t"
184879 #endif
184880         "ldr	r5, [%[a], r4]\n\t"
184881 #ifdef WOLFSSL_KEIL
184882         "sbcs	r5, r5, r6\n\t"
184883 #elif defined(__clang__)
184884         "sbcs	r5, r6\n\t"
184885 #else
184886         "sbc	r5, r6\n\t"
184887 #endif
184888         "stm	%[a]!, {r5}\n\t"
184889         "ldm	%[m]!, {r6}\n\t"
184890 #ifdef WOLFSSL_KEIL
184891         "ands	r6, r6, r7\n\t"
184892 #elif defined(__clang__)
184893         "ands	r6, r7\n\t"
184894 #else
184895         "and	r6, r7\n\t"
184896 #endif
184897         "ldr	r5, [%[a], r4]\n\t"
184898 #ifdef WOLFSSL_KEIL
184899         "sbcs	r5, r5, r6\n\t"
184900 #elif defined(__clang__)
184901         "sbcs	r5, r6\n\t"
184902 #else
184903         "sbc	r5, r6\n\t"
184904 #endif
184905         "stm	%[a]!, {r5}\n\t"
184906 #endif /* WOLFSSL_SP_LARGE_CODE */
184907         : [a] "+r" (a), [m] "+r" (m), [mp] "+r" (mp)
184908         :
184909         : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "lr"
184910     );
184911 }
184912 
184913 /* Multiply two Montgomery form numbers mod the modulus (prime).
184914  * (r = a * b mod m)
184915  *
184916  * r   Result of multiplication.
184917  * a   First number to multiply in Montgomery form.
184918  * b   Second number to multiply in Montgomery form.
184919  * m   Modulus (prime).
184920  * mp  Montgomery mulitplier.
184921  */
sp_1024_mont_mul_32(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)184922 static void sp_1024_mont_mul_32(sp_digit* r, const sp_digit* a,
184923         const sp_digit* b, const sp_digit* m, sp_digit mp)
184924 {
184925     sp_1024_mul_32(r, a, b);
184926     sp_1024_mont_reduce_32(r, m, mp);
184927 }
184928 
184929 /* Square the Montgomery form number. (r = a * a mod m)
184930  *
184931  * r   Result of squaring.
184932  * a   Number to square in Montgomery form.
184933  * m   Modulus (prime).
184934  * mp  Montgomery mulitplier.
184935  */
sp_1024_mont_sqr_32(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)184936 static void sp_1024_mont_sqr_32(sp_digit* r, const sp_digit* a,
184937         const sp_digit* m, sp_digit mp)
184938 {
184939     sp_1024_sqr_32(r, a);
184940     sp_1024_mont_reduce_32(r, m, mp);
184941 }
184942 
184943 /* Mod-2 for the P1024 curve. */
184944 static const uint8_t p1024_mod_minus_2[] = {
184945      6,0x06,  7,0x0f,  7,0x0b,  6,0x0c,  7,0x1e,  9,0x09,  7,0x0c,  7,0x1f,
184946      6,0x16,  6,0x06,  7,0x0e,  8,0x10,  6,0x03,  8,0x11,  6,0x0d,  7,0x14,
184947      9,0x12,  6,0x0f,  7,0x04,  9,0x0d,  6,0x00,  7,0x13,  6,0x01,  6,0x07,
184948      8,0x0d,  8,0x00,  6,0x06,  9,0x17,  6,0x14,  6,0x15,  6,0x11,  6,0x0b,
184949      9,0x0c,  6,0x1e, 13,0x14,  7,0x0e,  6,0x1d, 12,0x0a,  6,0x0b,  8,0x07,
184950      6,0x18,  6,0x0f,  6,0x10,  8,0x1c,  7,0x16,  7,0x02,  6,0x01,  6,0x13,
184951     10,0x15,  7,0x06,  8,0x14,  6,0x0c,  6,0x19,  7,0x10,  6,0x19,  6,0x19,
184952      9,0x16,  7,0x19,  6,0x1f,  6,0x17,  6,0x12,  8,0x02,  6,0x01,  6,0x04,
184953      6,0x15,  7,0x16,  6,0x04,  6,0x1f,  6,0x09,  7,0x06,  7,0x13,  7,0x09,
184954      6,0x0d, 10,0x18,  6,0x06,  6,0x11,  6,0x04,  6,0x01,  6,0x13,  8,0x06,
184955      6,0x0d,  8,0x13,  7,0x08,  6,0x08,  6,0x05,  7,0x0c,  7,0x0e,  7,0x15,
184956      6,0x05,  7,0x14, 10,0x19,  6,0x10,  6,0x16,  6,0x15,  7,0x1f,  6,0x14,
184957      6,0x0a, 10,0x11,  6,0x01,  7,0x05,  7,0x08,  8,0x0a,  7,0x1e,  7,0x1c,
184958      6,0x1c,  7,0x09, 10,0x18,  7,0x1c, 10,0x06,  6,0x0a,  6,0x07,  6,0x19,
184959      7,0x06,  6,0x0d,  7,0x0f,  7,0x0b,  7,0x05,  6,0x11,  6,0x1c,  7,0x1f,
184960      6,0x1e,  7,0x18,  6,0x1e,  6,0x00,  6,0x03,  6,0x02,  7,0x10,  6,0x0b,
184961      6,0x1b,  7,0x10,  6,0x00,  8,0x11,  7,0x1b,  6,0x18,  6,0x01,  7,0x0c,
184962      7,0x1d,  7,0x13,  6,0x08,  7,0x1b,  8,0x13,  7,0x16, 13,0x1d,  7,0x1f,
184963      6,0x0a,  6,0x01,  7,0x1f,  6,0x14,  1,0x01
184964 };
184965 
184966 /* Invert the number, in Montgomery form, modulo the modulus (prime) of the
184967  * P1024 curve. (r = 1 / a mod m)
184968  *
184969  * r   Inverse result.
184970  * a   Number to invert.
184971  * td  Temporary data.
184972  */
sp_1024_mont_inv_32(sp_digit * r,const sp_digit * a,sp_digit * td)184973 static void sp_1024_mont_inv_32(sp_digit* r, const sp_digit* a,
184974         sp_digit* td)
184975 {
184976     sp_digit* t = td;
184977     int i;
184978     int j;
184979     sp_digit table[32][2 * 32];
184980 
184981     XMEMCPY(table[0], a, sizeof(sp_digit) * 32);
184982     for (i = 1; i < 6; i++) {
184983         sp_1024_mont_sqr_32(table[0], table[0], p1024_mod, p1024_mp_mod);
184984     }
184985     for (i = 1; i < 32; i++) {
184986         sp_1024_mont_mul_32(table[i], table[i-1], a, p1024_mod, p1024_mp_mod);
184987     }
184988 
184989     XMEMCPY(t, table[p1024_mod_minus_2[1]], sizeof(sp_digit) * 32);
184990     for (i = 2; i < (int)sizeof(p1024_mod_minus_2) - 2; i += 2) {
184991         for (j = 0; j < p1024_mod_minus_2[i]; j++) {
184992             sp_1024_mont_sqr_32(t, t, p1024_mod, p1024_mp_mod);
184993         }
184994         sp_1024_mont_mul_32(t, t, table[p1024_mod_minus_2[i+1]], p1024_mod,
184995             p1024_mp_mod);
184996     }
184997     sp_1024_mont_sqr_32(t, t, p1024_mod, p1024_mp_mod);
184998     sp_1024_mont_mul_32(r, t, a, p1024_mod, p1024_mp_mod);
184999 }
185000 
185001 /* Normalize the values in each word to 32.
185002  *
185003  * a  Array of sp_digit to normalize.
185004  */
185005 #define sp_1024_norm_32(a)
185006 
185007 /* Map the Montgomery form projective coordinate point to an affine point.
185008  *
185009  * r  Resulting affine coordinate point.
185010  * p  Montgomery form projective coordinate point.
185011  * t  Temporary ordinate data.
185012  */
sp_1024_map_32(sp_point_1024 * r,const sp_point_1024 * p,sp_digit * t)185013 static void sp_1024_map_32(sp_point_1024* r, const sp_point_1024* p,
185014     sp_digit* t)
185015 {
185016     sp_digit* t1 = t;
185017     sp_digit* t2 = t + 2*32;
185018     sp_int32 n;
185019 
185020     sp_1024_mont_inv_32(t1, p->z, t + 2*32);
185021 
185022     sp_1024_mont_sqr_32(t2, t1, p1024_mod, p1024_mp_mod);
185023     sp_1024_mont_mul_32(t1, t2, t1, p1024_mod, p1024_mp_mod);
185024 
185025     /* x /= z^2 */
185026     sp_1024_mont_mul_32(r->x, p->x, t2, p1024_mod, p1024_mp_mod);
185027     XMEMSET(r->x + 32, 0, sizeof(r->x) / 2U);
185028     sp_1024_mont_reduce_32(r->x, p1024_mod, p1024_mp_mod);
185029     /* Reduce x to less than modulus */
185030     n = sp_1024_cmp_32(r->x, p1024_mod);
185031     sp_1024_cond_sub_32(r->x, r->x, p1024_mod, 0 - ((n >= 0) ?
185032                 (sp_digit)1 : (sp_digit)0));
185033     sp_1024_norm_32(r->x);
185034 
185035     /* y /= z^3 */
185036     sp_1024_mont_mul_32(r->y, p->y, t1, p1024_mod, p1024_mp_mod);
185037     XMEMSET(r->y + 32, 0, sizeof(r->y) / 2U);
185038     sp_1024_mont_reduce_32(r->y, p1024_mod, p1024_mp_mod);
185039     /* Reduce y to less than modulus */
185040     n = sp_1024_cmp_32(r->y, p1024_mod);
185041     sp_1024_cond_sub_32(r->y, r->y, p1024_mod, 0 - ((n >= 0) ?
185042                 (sp_digit)1 : (sp_digit)0));
185043     sp_1024_norm_32(r->y);
185044 
185045     XMEMSET(r->z, 0, sizeof(r->z));
185046     r->z[0] = 1;
185047 
185048 }
185049 
185050 /* Add two Montgomery form numbers (r = a + b % m).
185051  *
185052  * r   Result of addition.
185053  * a   First number to add in Montgomery form.
185054  * b   Second number to add in Montgomery form.
185055  * m   Modulus (prime).
185056  */
sp_1024_mont_add_32(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m)185057 SP_NOINLINE static void sp_1024_mont_add_32(sp_digit* r, const sp_digit* a,
185058         const sp_digit* b, const sp_digit* m)
185059 {
185060     __asm__ __volatile__ (
185061         "ldr	r4, [%[a]]\n\t"
185062         "ldr	r5, [%[a], #4]\n\t"
185063         "ldr	r6, [%[b]]\n\t"
185064         "ldr	r7, [%[b], #4]\n\t"
185065 #if defined(__clang__) || defined(WOLFSSL_KEIL)
185066         "adds	r4, r4, r6\n\t"
185067 #else
185068         "add	r4, r4, r6\n\t"
185069 #endif
185070 #ifdef WOLFSSL_KEIL
185071         "adcs	r5, r5, r7\n\t"
185072 #elif defined(__clang__)
185073         "adcs	r5, r7\n\t"
185074 #else
185075         "adc	r5, r7\n\t"
185076 #endif
185077         "str	r4, [%[r]]\n\t"
185078         "str	r5, [%[r], #4]\n\t"
185079         "ldr	r4, [%[a], #8]\n\t"
185080         "ldr	r5, [%[a], #12]\n\t"
185081         "ldr	r6, [%[b], #8]\n\t"
185082         "ldr	r7, [%[b], #12]\n\t"
185083 #ifdef WOLFSSL_KEIL
185084         "adcs	r4, r4, r6\n\t"
185085 #elif defined(__clang__)
185086         "adcs	r4, r6\n\t"
185087 #else
185088         "adc	r4, r6\n\t"
185089 #endif
185090 #ifdef WOLFSSL_KEIL
185091         "adcs	r5, r5, r7\n\t"
185092 #elif defined(__clang__)
185093         "adcs	r5, r7\n\t"
185094 #else
185095         "adc	r5, r7\n\t"
185096 #endif
185097         "str	r4, [%[r], #8]\n\t"
185098         "str	r5, [%[r], #12]\n\t"
185099         "ldr	r4, [%[a], #16]\n\t"
185100         "ldr	r5, [%[a], #20]\n\t"
185101         "ldr	r6, [%[b], #16]\n\t"
185102         "ldr	r7, [%[b], #20]\n\t"
185103 #ifdef WOLFSSL_KEIL
185104         "adcs	r4, r4, r6\n\t"
185105 #elif defined(__clang__)
185106         "adcs	r4, r6\n\t"
185107 #else
185108         "adc	r4, r6\n\t"
185109 #endif
185110 #ifdef WOLFSSL_KEIL
185111         "adcs	r5, r5, r7\n\t"
185112 #elif defined(__clang__)
185113         "adcs	r5, r7\n\t"
185114 #else
185115         "adc	r5, r7\n\t"
185116 #endif
185117         "str	r4, [%[r], #16]\n\t"
185118         "str	r5, [%[r], #20]\n\t"
185119         "ldr	r4, [%[a], #24]\n\t"
185120         "ldr	r5, [%[a], #28]\n\t"
185121         "ldr	r6, [%[b], #24]\n\t"
185122         "ldr	r7, [%[b], #28]\n\t"
185123 #ifdef WOLFSSL_KEIL
185124         "adcs	r4, r4, r6\n\t"
185125 #elif defined(__clang__)
185126         "adcs	r4, r6\n\t"
185127 #else
185128         "adc	r4, r6\n\t"
185129 #endif
185130 #ifdef WOLFSSL_KEIL
185131         "adcs	r5, r5, r7\n\t"
185132 #elif defined(__clang__)
185133         "adcs	r5, r7\n\t"
185134 #else
185135         "adc	r5, r7\n\t"
185136 #endif
185137         "str	r4, [%[r], #24]\n\t"
185138         "str	r5, [%[r], #28]\n\t"
185139         "ldr	r4, [%[a], #32]\n\t"
185140         "ldr	r5, [%[a], #36]\n\t"
185141         "ldr	r6, [%[b], #32]\n\t"
185142         "ldr	r7, [%[b], #36]\n\t"
185143 #ifdef WOLFSSL_KEIL
185144         "adcs	r4, r4, r6\n\t"
185145 #elif defined(__clang__)
185146         "adcs	r4, r6\n\t"
185147 #else
185148         "adc	r4, r6\n\t"
185149 #endif
185150 #ifdef WOLFSSL_KEIL
185151         "adcs	r5, r5, r7\n\t"
185152 #elif defined(__clang__)
185153         "adcs	r5, r7\n\t"
185154 #else
185155         "adc	r5, r7\n\t"
185156 #endif
185157         "str	r4, [%[r], #32]\n\t"
185158         "str	r5, [%[r], #36]\n\t"
185159         "ldr	r4, [%[a], #40]\n\t"
185160         "ldr	r5, [%[a], #44]\n\t"
185161         "ldr	r6, [%[b], #40]\n\t"
185162         "ldr	r7, [%[b], #44]\n\t"
185163 #ifdef WOLFSSL_KEIL
185164         "adcs	r4, r4, r6\n\t"
185165 #elif defined(__clang__)
185166         "adcs	r4, r6\n\t"
185167 #else
185168         "adc	r4, r6\n\t"
185169 #endif
185170 #ifdef WOLFSSL_KEIL
185171         "adcs	r5, r5, r7\n\t"
185172 #elif defined(__clang__)
185173         "adcs	r5, r7\n\t"
185174 #else
185175         "adc	r5, r7\n\t"
185176 #endif
185177         "str	r4, [%[r], #40]\n\t"
185178         "str	r5, [%[r], #44]\n\t"
185179         "ldr	r4, [%[a], #48]\n\t"
185180         "ldr	r5, [%[a], #52]\n\t"
185181         "ldr	r6, [%[b], #48]\n\t"
185182         "ldr	r7, [%[b], #52]\n\t"
185183 #ifdef WOLFSSL_KEIL
185184         "adcs	r4, r4, r6\n\t"
185185 #elif defined(__clang__)
185186         "adcs	r4, r6\n\t"
185187 #else
185188         "adc	r4, r6\n\t"
185189 #endif
185190 #ifdef WOLFSSL_KEIL
185191         "adcs	r5, r5, r7\n\t"
185192 #elif defined(__clang__)
185193         "adcs	r5, r7\n\t"
185194 #else
185195         "adc	r5, r7\n\t"
185196 #endif
185197         "str	r4, [%[r], #48]\n\t"
185198         "str	r5, [%[r], #52]\n\t"
185199         "ldr	r4, [%[a], #56]\n\t"
185200         "ldr	r5, [%[a], #60]\n\t"
185201         "ldr	r6, [%[b], #56]\n\t"
185202         "ldr	r7, [%[b], #60]\n\t"
185203 #ifdef WOLFSSL_KEIL
185204         "adcs	r4, r4, r6\n\t"
185205 #elif defined(__clang__)
185206         "adcs	r4, r6\n\t"
185207 #else
185208         "adc	r4, r6\n\t"
185209 #endif
185210 #ifdef WOLFSSL_KEIL
185211         "adcs	r5, r5, r7\n\t"
185212 #elif defined(__clang__)
185213         "adcs	r5, r7\n\t"
185214 #else
185215         "adc	r5, r7\n\t"
185216 #endif
185217         "str	r4, [%[r], #56]\n\t"
185218         "str	r5, [%[r], #60]\n\t"
185219         "ldr	r4, [%[a], #64]\n\t"
185220         "ldr	r5, [%[a], #68]\n\t"
185221         "ldr	r6, [%[b], #64]\n\t"
185222         "ldr	r7, [%[b], #68]\n\t"
185223 #ifdef WOLFSSL_KEIL
185224         "adcs	r4, r4, r6\n\t"
185225 #elif defined(__clang__)
185226         "adcs	r4, r6\n\t"
185227 #else
185228         "adc	r4, r6\n\t"
185229 #endif
185230 #ifdef WOLFSSL_KEIL
185231         "adcs	r5, r5, r7\n\t"
185232 #elif defined(__clang__)
185233         "adcs	r5, r7\n\t"
185234 #else
185235         "adc	r5, r7\n\t"
185236 #endif
185237         "str	r4, [%[r], #64]\n\t"
185238         "str	r5, [%[r], #68]\n\t"
185239         "ldr	r4, [%[a], #72]\n\t"
185240         "ldr	r5, [%[a], #76]\n\t"
185241         "ldr	r6, [%[b], #72]\n\t"
185242         "ldr	r7, [%[b], #76]\n\t"
185243 #ifdef WOLFSSL_KEIL
185244         "adcs	r4, r4, r6\n\t"
185245 #elif defined(__clang__)
185246         "adcs	r4, r6\n\t"
185247 #else
185248         "adc	r4, r6\n\t"
185249 #endif
185250 #ifdef WOLFSSL_KEIL
185251         "adcs	r5, r5, r7\n\t"
185252 #elif defined(__clang__)
185253         "adcs	r5, r7\n\t"
185254 #else
185255         "adc	r5, r7\n\t"
185256 #endif
185257         "str	r4, [%[r], #72]\n\t"
185258         "str	r5, [%[r], #76]\n\t"
185259         "ldr	r4, [%[a], #80]\n\t"
185260         "ldr	r5, [%[a], #84]\n\t"
185261         "ldr	r6, [%[b], #80]\n\t"
185262         "ldr	r7, [%[b], #84]\n\t"
185263 #ifdef WOLFSSL_KEIL
185264         "adcs	r4, r4, r6\n\t"
185265 #elif defined(__clang__)
185266         "adcs	r4, r6\n\t"
185267 #else
185268         "adc	r4, r6\n\t"
185269 #endif
185270 #ifdef WOLFSSL_KEIL
185271         "adcs	r5, r5, r7\n\t"
185272 #elif defined(__clang__)
185273         "adcs	r5, r7\n\t"
185274 #else
185275         "adc	r5, r7\n\t"
185276 #endif
185277         "str	r4, [%[r], #80]\n\t"
185278         "str	r5, [%[r], #84]\n\t"
185279         "ldr	r4, [%[a], #88]\n\t"
185280         "ldr	r5, [%[a], #92]\n\t"
185281         "ldr	r6, [%[b], #88]\n\t"
185282         "ldr	r7, [%[b], #92]\n\t"
185283 #ifdef WOLFSSL_KEIL
185284         "adcs	r4, r4, r6\n\t"
185285 #elif defined(__clang__)
185286         "adcs	r4, r6\n\t"
185287 #else
185288         "adc	r4, r6\n\t"
185289 #endif
185290 #ifdef WOLFSSL_KEIL
185291         "adcs	r5, r5, r7\n\t"
185292 #elif defined(__clang__)
185293         "adcs	r5, r7\n\t"
185294 #else
185295         "adc	r5, r7\n\t"
185296 #endif
185297         "str	r4, [%[r], #88]\n\t"
185298         "str	r5, [%[r], #92]\n\t"
185299         "ldr	r4, [%[a], #96]\n\t"
185300         "ldr	r5, [%[a], #100]\n\t"
185301         "ldr	r6, [%[b], #96]\n\t"
185302         "ldr	r7, [%[b], #100]\n\t"
185303 #ifdef WOLFSSL_KEIL
185304         "adcs	r4, r4, r6\n\t"
185305 #elif defined(__clang__)
185306         "adcs	r4, r6\n\t"
185307 #else
185308         "adc	r4, r6\n\t"
185309 #endif
185310 #ifdef WOLFSSL_KEIL
185311         "adcs	r5, r5, r7\n\t"
185312 #elif defined(__clang__)
185313         "adcs	r5, r7\n\t"
185314 #else
185315         "adc	r5, r7\n\t"
185316 #endif
185317         "str	r4, [%[r], #96]\n\t"
185318         "str	r5, [%[r], #100]\n\t"
185319         "ldr	r4, [%[a], #104]\n\t"
185320         "ldr	r5, [%[a], #108]\n\t"
185321         "ldr	r6, [%[b], #104]\n\t"
185322         "ldr	r7, [%[b], #108]\n\t"
185323 #ifdef WOLFSSL_KEIL
185324         "adcs	r4, r4, r6\n\t"
185325 #elif defined(__clang__)
185326         "adcs	r4, r6\n\t"
185327 #else
185328         "adc	r4, r6\n\t"
185329 #endif
185330 #ifdef WOLFSSL_KEIL
185331         "adcs	r5, r5, r7\n\t"
185332 #elif defined(__clang__)
185333         "adcs	r5, r7\n\t"
185334 #else
185335         "adc	r5, r7\n\t"
185336 #endif
185337         "str	r4, [%[r], #104]\n\t"
185338         "str	r5, [%[r], #108]\n\t"
185339         "ldr	r4, [%[a], #112]\n\t"
185340         "ldr	r5, [%[a], #116]\n\t"
185341         "ldr	r6, [%[b], #112]\n\t"
185342         "ldr	r7, [%[b], #116]\n\t"
185343 #ifdef WOLFSSL_KEIL
185344         "adcs	r4, r4, r6\n\t"
185345 #elif defined(__clang__)
185346         "adcs	r4, r6\n\t"
185347 #else
185348         "adc	r4, r6\n\t"
185349 #endif
185350 #ifdef WOLFSSL_KEIL
185351         "adcs	r5, r5, r7\n\t"
185352 #elif defined(__clang__)
185353         "adcs	r5, r7\n\t"
185354 #else
185355         "adc	r5, r7\n\t"
185356 #endif
185357         "str	r4, [%[r], #112]\n\t"
185358         "str	r5, [%[r], #116]\n\t"
185359         "ldr	r4, [%[a], #120]\n\t"
185360         "ldr	r5, [%[a], #124]\n\t"
185361         "ldr	r6, [%[b], #120]\n\t"
185362         "ldr	r7, [%[b], #124]\n\t"
185363 #ifdef WOLFSSL_KEIL
185364         "adcs	r4, r4, r6\n\t"
185365 #elif defined(__clang__)
185366         "adcs	r4, r6\n\t"
185367 #else
185368         "adc	r4, r6\n\t"
185369 #endif
185370 #ifdef WOLFSSL_KEIL
185371         "adcs	r5, r5, r7\n\t"
185372 #elif defined(__clang__)
185373         "adcs	r5, r7\n\t"
185374 #else
185375         "adc	r5, r7\n\t"
185376 #endif
185377         "str	r4, [%[r], #120]\n\t"
185378         "str	r5, [%[r], #124]\n\t"
185379         "movs	%[b], #0\n\t"
185380         "ldr	r7, [%[m], #124]\n\t"
185381 #ifdef WOLFSSL_KEIL
185382         "adcs	%[b], %[b], %[b]\n\t"
185383 #elif defined(__clang__)
185384         "adcs	%[b], %[b]\n\t"
185385 #else
185386         "adc	%[b], %[b]\n\t"
185387 #endif
185388 #if defined(__clang__) || defined(WOLFSSL_KEIL)
185389         "subs	r7, r7, r5\n\t"
185390 #else
185391         "sub	r7, r7, r5\n\t"
185392 #endif
185393 #if defined(__clang__) || defined(WOLFSSL_KEIL)
185394         "negs	%[b], %[b]\n\t"
185395 #else
185396         "neg	%[b], %[b]\n\t"
185397 #endif
185398 #ifdef WOLFSSL_KEIL
185399         "sbcs	r7, r7, r7\n\t"
185400 #elif defined(__clang__)
185401         "sbcs	r7, r7\n\t"
185402 #else
185403         "sbc	r7, r7\n\t"
185404 #endif
185405 #ifdef WOLFSSL_KEIL
185406         "orrs	%[b], %[b], r7\n\t"
185407 #elif defined(__clang__)
185408         "orrs	%[b], r7\n\t"
185409 #else
185410         "orr	%[b], r7\n\t"
185411 #endif
185412         "ldr	r4, [%[r]]\n\t"
185413         "ldr	r5, [%[r], #4]\n\t"
185414         "ldr	r6, [%[m]]\n\t"
185415         "ldr	r7, [%[m], #4]\n\t"
185416 #ifdef WOLFSSL_KEIL
185417         "ands	r6, r6, %[b]\n\t"
185418 #elif defined(__clang__)
185419         "ands	r6, %[b]\n\t"
185420 #else
185421         "and	r6, %[b]\n\t"
185422 #endif
185423 #ifdef WOLFSSL_KEIL
185424         "ands	r7, r7, %[b]\n\t"
185425 #elif defined(__clang__)
185426         "ands	r7, %[b]\n\t"
185427 #else
185428         "and	r7, %[b]\n\t"
185429 #endif
185430 #if defined(__clang__) || defined(WOLFSSL_KEIL)
185431         "subs	r4, r4, r6\n\t"
185432 #else
185433         "sub	r4, r4, r6\n\t"
185434 #endif
185435 #ifdef WOLFSSL_KEIL
185436         "sbcs	r5, r5, r7\n\t"
185437 #elif defined(__clang__)
185438         "sbcs	r5, r7\n\t"
185439 #else
185440         "sbc	r5, r7\n\t"
185441 #endif
185442         "str	r4, [%[r]]\n\t"
185443         "str	r5, [%[r], #4]\n\t"
185444         "ldr	r4, [%[r], #8]\n\t"
185445         "ldr	r5, [%[r], #12]\n\t"
185446         "ldr	r6, [%[m], #8]\n\t"
185447         "ldr	r7, [%[m], #12]\n\t"
185448 #ifdef WOLFSSL_KEIL
185449         "ands	r6, r6, %[b]\n\t"
185450 #elif defined(__clang__)
185451         "ands	r6, %[b]\n\t"
185452 #else
185453         "and	r6, %[b]\n\t"
185454 #endif
185455 #ifdef WOLFSSL_KEIL
185456         "ands	r7, r7, %[b]\n\t"
185457 #elif defined(__clang__)
185458         "ands	r7, %[b]\n\t"
185459 #else
185460         "and	r7, %[b]\n\t"
185461 #endif
185462 #ifdef WOLFSSL_KEIL
185463         "sbcs	r4, r4, r6\n\t"
185464 #elif defined(__clang__)
185465         "sbcs	r4, r6\n\t"
185466 #else
185467         "sbc	r4, r6\n\t"
185468 #endif
185469 #ifdef WOLFSSL_KEIL
185470         "sbcs	r5, r5, r7\n\t"
185471 #elif defined(__clang__)
185472         "sbcs	r5, r7\n\t"
185473 #else
185474         "sbc	r5, r7\n\t"
185475 #endif
185476         "str	r4, [%[r], #8]\n\t"
185477         "str	r5, [%[r], #12]\n\t"
185478         "ldr	r4, [%[r], #16]\n\t"
185479         "ldr	r5, [%[r], #20]\n\t"
185480         "ldr	r6, [%[m], #16]\n\t"
185481         "ldr	r7, [%[m], #20]\n\t"
185482 #ifdef WOLFSSL_KEIL
185483         "ands	r6, r6, %[b]\n\t"
185484 #elif defined(__clang__)
185485         "ands	r6, %[b]\n\t"
185486 #else
185487         "and	r6, %[b]\n\t"
185488 #endif
185489 #ifdef WOLFSSL_KEIL
185490         "ands	r7, r7, %[b]\n\t"
185491 #elif defined(__clang__)
185492         "ands	r7, %[b]\n\t"
185493 #else
185494         "and	r7, %[b]\n\t"
185495 #endif
185496 #ifdef WOLFSSL_KEIL
185497         "sbcs	r4, r4, r6\n\t"
185498 #elif defined(__clang__)
185499         "sbcs	r4, r6\n\t"
185500 #else
185501         "sbc	r4, r6\n\t"
185502 #endif
185503 #ifdef WOLFSSL_KEIL
185504         "sbcs	r5, r5, r7\n\t"
185505 #elif defined(__clang__)
185506         "sbcs	r5, r7\n\t"
185507 #else
185508         "sbc	r5, r7\n\t"
185509 #endif
185510         "str	r4, [%[r], #16]\n\t"
185511         "str	r5, [%[r], #20]\n\t"
185512         "ldr	r4, [%[r], #24]\n\t"
185513         "ldr	r5, [%[r], #28]\n\t"
185514         "ldr	r6, [%[m], #24]\n\t"
185515         "ldr	r7, [%[m], #28]\n\t"
185516 #ifdef WOLFSSL_KEIL
185517         "ands	r6, r6, %[b]\n\t"
185518 #elif defined(__clang__)
185519         "ands	r6, %[b]\n\t"
185520 #else
185521         "and	r6, %[b]\n\t"
185522 #endif
185523 #ifdef WOLFSSL_KEIL
185524         "ands	r7, r7, %[b]\n\t"
185525 #elif defined(__clang__)
185526         "ands	r7, %[b]\n\t"
185527 #else
185528         "and	r7, %[b]\n\t"
185529 #endif
185530 #ifdef WOLFSSL_KEIL
185531         "sbcs	r4, r4, r6\n\t"
185532 #elif defined(__clang__)
185533         "sbcs	r4, r6\n\t"
185534 #else
185535         "sbc	r4, r6\n\t"
185536 #endif
185537 #ifdef WOLFSSL_KEIL
185538         "sbcs	r5, r5, r7\n\t"
185539 #elif defined(__clang__)
185540         "sbcs	r5, r7\n\t"
185541 #else
185542         "sbc	r5, r7\n\t"
185543 #endif
185544         "str	r4, [%[r], #24]\n\t"
185545         "str	r5, [%[r], #28]\n\t"
185546         "ldr	r4, [%[r], #32]\n\t"
185547         "ldr	r5, [%[r], #36]\n\t"
185548         "ldr	r6, [%[m], #32]\n\t"
185549         "ldr	r7, [%[m], #36]\n\t"
185550 #ifdef WOLFSSL_KEIL
185551         "ands	r6, r6, %[b]\n\t"
185552 #elif defined(__clang__)
185553         "ands	r6, %[b]\n\t"
185554 #else
185555         "and	r6, %[b]\n\t"
185556 #endif
185557 #ifdef WOLFSSL_KEIL
185558         "ands	r7, r7, %[b]\n\t"
185559 #elif defined(__clang__)
185560         "ands	r7, %[b]\n\t"
185561 #else
185562         "and	r7, %[b]\n\t"
185563 #endif
185564 #ifdef WOLFSSL_KEIL
185565         "sbcs	r4, r4, r6\n\t"
185566 #elif defined(__clang__)
185567         "sbcs	r4, r6\n\t"
185568 #else
185569         "sbc	r4, r6\n\t"
185570 #endif
185571 #ifdef WOLFSSL_KEIL
185572         "sbcs	r5, r5, r7\n\t"
185573 #elif defined(__clang__)
185574         "sbcs	r5, r7\n\t"
185575 #else
185576         "sbc	r5, r7\n\t"
185577 #endif
185578         "str	r4, [%[r], #32]\n\t"
185579         "str	r5, [%[r], #36]\n\t"
185580         "ldr	r4, [%[r], #40]\n\t"
185581         "ldr	r5, [%[r], #44]\n\t"
185582         "ldr	r6, [%[m], #40]\n\t"
185583         "ldr	r7, [%[m], #44]\n\t"
185584 #ifdef WOLFSSL_KEIL
185585         "ands	r6, r6, %[b]\n\t"
185586 #elif defined(__clang__)
185587         "ands	r6, %[b]\n\t"
185588 #else
185589         "and	r6, %[b]\n\t"
185590 #endif
185591 #ifdef WOLFSSL_KEIL
185592         "ands	r7, r7, %[b]\n\t"
185593 #elif defined(__clang__)
185594         "ands	r7, %[b]\n\t"
185595 #else
185596         "and	r7, %[b]\n\t"
185597 #endif
185598 #ifdef WOLFSSL_KEIL
185599         "sbcs	r4, r4, r6\n\t"
185600 #elif defined(__clang__)
185601         "sbcs	r4, r6\n\t"
185602 #else
185603         "sbc	r4, r6\n\t"
185604 #endif
185605 #ifdef WOLFSSL_KEIL
185606         "sbcs	r5, r5, r7\n\t"
185607 #elif defined(__clang__)
185608         "sbcs	r5, r7\n\t"
185609 #else
185610         "sbc	r5, r7\n\t"
185611 #endif
185612         "str	r4, [%[r], #40]\n\t"
185613         "str	r5, [%[r], #44]\n\t"
185614         "ldr	r4, [%[r], #48]\n\t"
185615         "ldr	r5, [%[r], #52]\n\t"
185616         "ldr	r6, [%[m], #48]\n\t"
185617         "ldr	r7, [%[m], #52]\n\t"
185618 #ifdef WOLFSSL_KEIL
185619         "ands	r6, r6, %[b]\n\t"
185620 #elif defined(__clang__)
185621         "ands	r6, %[b]\n\t"
185622 #else
185623         "and	r6, %[b]\n\t"
185624 #endif
185625 #ifdef WOLFSSL_KEIL
185626         "ands	r7, r7, %[b]\n\t"
185627 #elif defined(__clang__)
185628         "ands	r7, %[b]\n\t"
185629 #else
185630         "and	r7, %[b]\n\t"
185631 #endif
185632 #ifdef WOLFSSL_KEIL
185633         "sbcs	r4, r4, r6\n\t"
185634 #elif defined(__clang__)
185635         "sbcs	r4, r6\n\t"
185636 #else
185637         "sbc	r4, r6\n\t"
185638 #endif
185639 #ifdef WOLFSSL_KEIL
185640         "sbcs	r5, r5, r7\n\t"
185641 #elif defined(__clang__)
185642         "sbcs	r5, r7\n\t"
185643 #else
185644         "sbc	r5, r7\n\t"
185645 #endif
185646         "str	r4, [%[r], #48]\n\t"
185647         "str	r5, [%[r], #52]\n\t"
185648         "ldr	r4, [%[r], #56]\n\t"
185649         "ldr	r5, [%[r], #60]\n\t"
185650         "ldr	r6, [%[m], #56]\n\t"
185651         "ldr	r7, [%[m], #60]\n\t"
185652 #ifdef WOLFSSL_KEIL
185653         "ands	r6, r6, %[b]\n\t"
185654 #elif defined(__clang__)
185655         "ands	r6, %[b]\n\t"
185656 #else
185657         "and	r6, %[b]\n\t"
185658 #endif
185659 #ifdef WOLFSSL_KEIL
185660         "ands	r7, r7, %[b]\n\t"
185661 #elif defined(__clang__)
185662         "ands	r7, %[b]\n\t"
185663 #else
185664         "and	r7, %[b]\n\t"
185665 #endif
185666 #ifdef WOLFSSL_KEIL
185667         "sbcs	r4, r4, r6\n\t"
185668 #elif defined(__clang__)
185669         "sbcs	r4, r6\n\t"
185670 #else
185671         "sbc	r4, r6\n\t"
185672 #endif
185673 #ifdef WOLFSSL_KEIL
185674         "sbcs	r5, r5, r7\n\t"
185675 #elif defined(__clang__)
185676         "sbcs	r5, r7\n\t"
185677 #else
185678         "sbc	r5, r7\n\t"
185679 #endif
185680         "str	r4, [%[r], #56]\n\t"
185681         "str	r5, [%[r], #60]\n\t"
185682         "ldr	r4, [%[r], #64]\n\t"
185683         "ldr	r5, [%[r], #68]\n\t"
185684         "ldr	r6, [%[m], #64]\n\t"
185685         "ldr	r7, [%[m], #68]\n\t"
185686 #ifdef WOLFSSL_KEIL
185687         "ands	r6, r6, %[b]\n\t"
185688 #elif defined(__clang__)
185689         "ands	r6, %[b]\n\t"
185690 #else
185691         "and	r6, %[b]\n\t"
185692 #endif
185693 #ifdef WOLFSSL_KEIL
185694         "ands	r7, r7, %[b]\n\t"
185695 #elif defined(__clang__)
185696         "ands	r7, %[b]\n\t"
185697 #else
185698         "and	r7, %[b]\n\t"
185699 #endif
185700 #ifdef WOLFSSL_KEIL
185701         "sbcs	r4, r4, r6\n\t"
185702 #elif defined(__clang__)
185703         "sbcs	r4, r6\n\t"
185704 #else
185705         "sbc	r4, r6\n\t"
185706 #endif
185707 #ifdef WOLFSSL_KEIL
185708         "sbcs	r5, r5, r7\n\t"
185709 #elif defined(__clang__)
185710         "sbcs	r5, r7\n\t"
185711 #else
185712         "sbc	r5, r7\n\t"
185713 #endif
185714         "str	r4, [%[r], #64]\n\t"
185715         "str	r5, [%[r], #68]\n\t"
185716         "ldr	r4, [%[r], #72]\n\t"
185717         "ldr	r5, [%[r], #76]\n\t"
185718         "ldr	r6, [%[m], #72]\n\t"
185719         "ldr	r7, [%[m], #76]\n\t"
185720 #ifdef WOLFSSL_KEIL
185721         "ands	r6, r6, %[b]\n\t"
185722 #elif defined(__clang__)
185723         "ands	r6, %[b]\n\t"
185724 #else
185725         "and	r6, %[b]\n\t"
185726 #endif
185727 #ifdef WOLFSSL_KEIL
185728         "ands	r7, r7, %[b]\n\t"
185729 #elif defined(__clang__)
185730         "ands	r7, %[b]\n\t"
185731 #else
185732         "and	r7, %[b]\n\t"
185733 #endif
185734 #ifdef WOLFSSL_KEIL
185735         "sbcs	r4, r4, r6\n\t"
185736 #elif defined(__clang__)
185737         "sbcs	r4, r6\n\t"
185738 #else
185739         "sbc	r4, r6\n\t"
185740 #endif
185741 #ifdef WOLFSSL_KEIL
185742         "sbcs	r5, r5, r7\n\t"
185743 #elif defined(__clang__)
185744         "sbcs	r5, r7\n\t"
185745 #else
185746         "sbc	r5, r7\n\t"
185747 #endif
185748         "str	r4, [%[r], #72]\n\t"
185749         "str	r5, [%[r], #76]\n\t"
185750         "ldr	r4, [%[r], #80]\n\t"
185751         "ldr	r5, [%[r], #84]\n\t"
185752         "ldr	r6, [%[m], #80]\n\t"
185753         "ldr	r7, [%[m], #84]\n\t"
185754 #ifdef WOLFSSL_KEIL
185755         "ands	r6, r6, %[b]\n\t"
185756 #elif defined(__clang__)
185757         "ands	r6, %[b]\n\t"
185758 #else
185759         "and	r6, %[b]\n\t"
185760 #endif
185761 #ifdef WOLFSSL_KEIL
185762         "ands	r7, r7, %[b]\n\t"
185763 #elif defined(__clang__)
185764         "ands	r7, %[b]\n\t"
185765 #else
185766         "and	r7, %[b]\n\t"
185767 #endif
185768 #ifdef WOLFSSL_KEIL
185769         "sbcs	r4, r4, r6\n\t"
185770 #elif defined(__clang__)
185771         "sbcs	r4, r6\n\t"
185772 #else
185773         "sbc	r4, r6\n\t"
185774 #endif
185775 #ifdef WOLFSSL_KEIL
185776         "sbcs	r5, r5, r7\n\t"
185777 #elif defined(__clang__)
185778         "sbcs	r5, r7\n\t"
185779 #else
185780         "sbc	r5, r7\n\t"
185781 #endif
185782         "str	r4, [%[r], #80]\n\t"
185783         "str	r5, [%[r], #84]\n\t"
185784         "ldr	r4, [%[r], #88]\n\t"
185785         "ldr	r5, [%[r], #92]\n\t"
185786         "ldr	r6, [%[m], #88]\n\t"
185787         "ldr	r7, [%[m], #92]\n\t"
185788 #ifdef WOLFSSL_KEIL
185789         "ands	r6, r6, %[b]\n\t"
185790 #elif defined(__clang__)
185791         "ands	r6, %[b]\n\t"
185792 #else
185793         "and	r6, %[b]\n\t"
185794 #endif
185795 #ifdef WOLFSSL_KEIL
185796         "ands	r7, r7, %[b]\n\t"
185797 #elif defined(__clang__)
185798         "ands	r7, %[b]\n\t"
185799 #else
185800         "and	r7, %[b]\n\t"
185801 #endif
185802 #ifdef WOLFSSL_KEIL
185803         "sbcs	r4, r4, r6\n\t"
185804 #elif defined(__clang__)
185805         "sbcs	r4, r6\n\t"
185806 #else
185807         "sbc	r4, r6\n\t"
185808 #endif
185809 #ifdef WOLFSSL_KEIL
185810         "sbcs	r5, r5, r7\n\t"
185811 #elif defined(__clang__)
185812         "sbcs	r5, r7\n\t"
185813 #else
185814         "sbc	r5, r7\n\t"
185815 #endif
185816         "str	r4, [%[r], #88]\n\t"
185817         "str	r5, [%[r], #92]\n\t"
185818         "ldr	r4, [%[r], #96]\n\t"
185819         "ldr	r5, [%[r], #100]\n\t"
185820         "ldr	r6, [%[m], #96]\n\t"
185821         "ldr	r7, [%[m], #100]\n\t"
185822 #ifdef WOLFSSL_KEIL
185823         "ands	r6, r6, %[b]\n\t"
185824 #elif defined(__clang__)
185825         "ands	r6, %[b]\n\t"
185826 #else
185827         "and	r6, %[b]\n\t"
185828 #endif
185829 #ifdef WOLFSSL_KEIL
185830         "ands	r7, r7, %[b]\n\t"
185831 #elif defined(__clang__)
185832         "ands	r7, %[b]\n\t"
185833 #else
185834         "and	r7, %[b]\n\t"
185835 #endif
185836 #ifdef WOLFSSL_KEIL
185837         "sbcs	r4, r4, r6\n\t"
185838 #elif defined(__clang__)
185839         "sbcs	r4, r6\n\t"
185840 #else
185841         "sbc	r4, r6\n\t"
185842 #endif
185843 #ifdef WOLFSSL_KEIL
185844         "sbcs	r5, r5, r7\n\t"
185845 #elif defined(__clang__)
185846         "sbcs	r5, r7\n\t"
185847 #else
185848         "sbc	r5, r7\n\t"
185849 #endif
185850         "str	r4, [%[r], #96]\n\t"
185851         "str	r5, [%[r], #100]\n\t"
185852         "ldr	r4, [%[r], #104]\n\t"
185853         "ldr	r5, [%[r], #108]\n\t"
185854         "ldr	r6, [%[m], #104]\n\t"
185855         "ldr	r7, [%[m], #108]\n\t"
185856 #ifdef WOLFSSL_KEIL
185857         "ands	r6, r6, %[b]\n\t"
185858 #elif defined(__clang__)
185859         "ands	r6, %[b]\n\t"
185860 #else
185861         "and	r6, %[b]\n\t"
185862 #endif
185863 #ifdef WOLFSSL_KEIL
185864         "ands	r7, r7, %[b]\n\t"
185865 #elif defined(__clang__)
185866         "ands	r7, %[b]\n\t"
185867 #else
185868         "and	r7, %[b]\n\t"
185869 #endif
185870 #ifdef WOLFSSL_KEIL
185871         "sbcs	r4, r4, r6\n\t"
185872 #elif defined(__clang__)
185873         "sbcs	r4, r6\n\t"
185874 #else
185875         "sbc	r4, r6\n\t"
185876 #endif
185877 #ifdef WOLFSSL_KEIL
185878         "sbcs	r5, r5, r7\n\t"
185879 #elif defined(__clang__)
185880         "sbcs	r5, r7\n\t"
185881 #else
185882         "sbc	r5, r7\n\t"
185883 #endif
185884         "str	r4, [%[r], #104]\n\t"
185885         "str	r5, [%[r], #108]\n\t"
185886         "ldr	r4, [%[r], #112]\n\t"
185887         "ldr	r5, [%[r], #116]\n\t"
185888         "ldr	r6, [%[m], #112]\n\t"
185889         "ldr	r7, [%[m], #116]\n\t"
185890 #ifdef WOLFSSL_KEIL
185891         "ands	r6, r6, %[b]\n\t"
185892 #elif defined(__clang__)
185893         "ands	r6, %[b]\n\t"
185894 #else
185895         "and	r6, %[b]\n\t"
185896 #endif
185897 #ifdef WOLFSSL_KEIL
185898         "ands	r7, r7, %[b]\n\t"
185899 #elif defined(__clang__)
185900         "ands	r7, %[b]\n\t"
185901 #else
185902         "and	r7, %[b]\n\t"
185903 #endif
185904 #ifdef WOLFSSL_KEIL
185905         "sbcs	r4, r4, r6\n\t"
185906 #elif defined(__clang__)
185907         "sbcs	r4, r6\n\t"
185908 #else
185909         "sbc	r4, r6\n\t"
185910 #endif
185911 #ifdef WOLFSSL_KEIL
185912         "sbcs	r5, r5, r7\n\t"
185913 #elif defined(__clang__)
185914         "sbcs	r5, r7\n\t"
185915 #else
185916         "sbc	r5, r7\n\t"
185917 #endif
185918         "str	r4, [%[r], #112]\n\t"
185919         "str	r5, [%[r], #116]\n\t"
185920         "ldr	r4, [%[r], #120]\n\t"
185921         "ldr	r5, [%[r], #124]\n\t"
185922         "ldr	r6, [%[m], #120]\n\t"
185923         "ldr	r7, [%[m], #124]\n\t"
185924 #ifdef WOLFSSL_KEIL
185925         "ands	r6, r6, %[b]\n\t"
185926 #elif defined(__clang__)
185927         "ands	r6, %[b]\n\t"
185928 #else
185929         "and	r6, %[b]\n\t"
185930 #endif
185931 #ifdef WOLFSSL_KEIL
185932         "ands	r7, r7, %[b]\n\t"
185933 #elif defined(__clang__)
185934         "ands	r7, %[b]\n\t"
185935 #else
185936         "and	r7, %[b]\n\t"
185937 #endif
185938 #ifdef WOLFSSL_KEIL
185939         "sbcs	r4, r4, r6\n\t"
185940 #elif defined(__clang__)
185941         "sbcs	r4, r6\n\t"
185942 #else
185943         "sbc	r4, r6\n\t"
185944 #endif
185945 #ifdef WOLFSSL_KEIL
185946         "sbcs	r5, r5, r7\n\t"
185947 #elif defined(__clang__)
185948         "sbcs	r5, r7\n\t"
185949 #else
185950         "sbc	r5, r7\n\t"
185951 #endif
185952         "str	r4, [%[r], #120]\n\t"
185953         "str	r5, [%[r], #124]\n\t"
185954         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
185955         :
185956         : "memory", "r4", "r5", "r6", "r7"
185957     );
185958 }
185959 
185960 /* Double a Montgomery form number (r = a + a % m).
185961  *
185962  * r   Result of doubling.
185963  * a   Number to double in Montgomery form.
185964  * m   Modulus (prime).
185965  */
sp_1024_mont_dbl_32(sp_digit * r,const sp_digit * a,const sp_digit * m)185966 SP_NOINLINE static void sp_1024_mont_dbl_32(sp_digit* r, const sp_digit* a,
185967         const sp_digit* m)
185968 {
185969     __asm__ __volatile__ (
185970         "ldr	r4, [%[a]]\n\t"
185971         "ldr	r5, [%[a], #4]\n\t"
185972         "ldr	r6, [%[a], #8]\n\t"
185973         "ldr	r7, [%[a], #12]\n\t"
185974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
185975         "adds	r4, r4, r4\n\t"
185976 #else
185977         "add	r4, r4, r4\n\t"
185978 #endif
185979 #ifdef WOLFSSL_KEIL
185980         "adcs	r5, r5, r5\n\t"
185981 #elif defined(__clang__)
185982         "adcs	r5, r5\n\t"
185983 #else
185984         "adc	r5, r5\n\t"
185985 #endif
185986 #ifdef WOLFSSL_KEIL
185987         "adcs	r6, r6, r6\n\t"
185988 #elif defined(__clang__)
185989         "adcs	r6, r6\n\t"
185990 #else
185991         "adc	r6, r6\n\t"
185992 #endif
185993 #ifdef WOLFSSL_KEIL
185994         "adcs	r7, r7, r7\n\t"
185995 #elif defined(__clang__)
185996         "adcs	r7, r7\n\t"
185997 #else
185998         "adc	r7, r7\n\t"
185999 #endif
186000         "str	r4, [%[r]]\n\t"
186001         "str	r5, [%[r], #4]\n\t"
186002         "str	r6, [%[r], #8]\n\t"
186003         "str	r7, [%[r], #12]\n\t"
186004         "ldr	r4, [%[a], #16]\n\t"
186005         "ldr	r5, [%[a], #20]\n\t"
186006         "ldr	r6, [%[a], #24]\n\t"
186007         "ldr	r7, [%[a], #28]\n\t"
186008 #ifdef WOLFSSL_KEIL
186009         "adcs	r4, r4, r4\n\t"
186010 #elif defined(__clang__)
186011         "adcs	r4, r4\n\t"
186012 #else
186013         "adc	r4, r4\n\t"
186014 #endif
186015 #ifdef WOLFSSL_KEIL
186016         "adcs	r5, r5, r5\n\t"
186017 #elif defined(__clang__)
186018         "adcs	r5, r5\n\t"
186019 #else
186020         "adc	r5, r5\n\t"
186021 #endif
186022 #ifdef WOLFSSL_KEIL
186023         "adcs	r6, r6, r6\n\t"
186024 #elif defined(__clang__)
186025         "adcs	r6, r6\n\t"
186026 #else
186027         "adc	r6, r6\n\t"
186028 #endif
186029 #ifdef WOLFSSL_KEIL
186030         "adcs	r7, r7, r7\n\t"
186031 #elif defined(__clang__)
186032         "adcs	r7, r7\n\t"
186033 #else
186034         "adc	r7, r7\n\t"
186035 #endif
186036         "str	r4, [%[r], #16]\n\t"
186037         "str	r5, [%[r], #20]\n\t"
186038         "str	r6, [%[r], #24]\n\t"
186039         "str	r7, [%[r], #28]\n\t"
186040         "ldr	r4, [%[a], #32]\n\t"
186041         "ldr	r5, [%[a], #36]\n\t"
186042         "ldr	r6, [%[a], #40]\n\t"
186043         "ldr	r7, [%[a], #44]\n\t"
186044 #ifdef WOLFSSL_KEIL
186045         "adcs	r4, r4, r4\n\t"
186046 #elif defined(__clang__)
186047         "adcs	r4, r4\n\t"
186048 #else
186049         "adc	r4, r4\n\t"
186050 #endif
186051 #ifdef WOLFSSL_KEIL
186052         "adcs	r5, r5, r5\n\t"
186053 #elif defined(__clang__)
186054         "adcs	r5, r5\n\t"
186055 #else
186056         "adc	r5, r5\n\t"
186057 #endif
186058 #ifdef WOLFSSL_KEIL
186059         "adcs	r6, r6, r6\n\t"
186060 #elif defined(__clang__)
186061         "adcs	r6, r6\n\t"
186062 #else
186063         "adc	r6, r6\n\t"
186064 #endif
186065 #ifdef WOLFSSL_KEIL
186066         "adcs	r7, r7, r7\n\t"
186067 #elif defined(__clang__)
186068         "adcs	r7, r7\n\t"
186069 #else
186070         "adc	r7, r7\n\t"
186071 #endif
186072         "str	r4, [%[r], #32]\n\t"
186073         "str	r5, [%[r], #36]\n\t"
186074         "str	r6, [%[r], #40]\n\t"
186075         "str	r7, [%[r], #44]\n\t"
186076         "ldr	r4, [%[a], #48]\n\t"
186077         "ldr	r5, [%[a], #52]\n\t"
186078         "ldr	r6, [%[a], #56]\n\t"
186079         "ldr	r7, [%[a], #60]\n\t"
186080 #ifdef WOLFSSL_KEIL
186081         "adcs	r4, r4, r4\n\t"
186082 #elif defined(__clang__)
186083         "adcs	r4, r4\n\t"
186084 #else
186085         "adc	r4, r4\n\t"
186086 #endif
186087 #ifdef WOLFSSL_KEIL
186088         "adcs	r5, r5, r5\n\t"
186089 #elif defined(__clang__)
186090         "adcs	r5, r5\n\t"
186091 #else
186092         "adc	r5, r5\n\t"
186093 #endif
186094 #ifdef WOLFSSL_KEIL
186095         "adcs	r6, r6, r6\n\t"
186096 #elif defined(__clang__)
186097         "adcs	r6, r6\n\t"
186098 #else
186099         "adc	r6, r6\n\t"
186100 #endif
186101 #ifdef WOLFSSL_KEIL
186102         "adcs	r7, r7, r7\n\t"
186103 #elif defined(__clang__)
186104         "adcs	r7, r7\n\t"
186105 #else
186106         "adc	r7, r7\n\t"
186107 #endif
186108         "str	r4, [%[r], #48]\n\t"
186109         "str	r5, [%[r], #52]\n\t"
186110         "str	r6, [%[r], #56]\n\t"
186111         "str	r7, [%[r], #60]\n\t"
186112         "ldr	r4, [%[a], #64]\n\t"
186113         "ldr	r5, [%[a], #68]\n\t"
186114         "ldr	r6, [%[a], #72]\n\t"
186115         "ldr	r7, [%[a], #76]\n\t"
186116 #ifdef WOLFSSL_KEIL
186117         "adcs	r4, r4, r4\n\t"
186118 #elif defined(__clang__)
186119         "adcs	r4, r4\n\t"
186120 #else
186121         "adc	r4, r4\n\t"
186122 #endif
186123 #ifdef WOLFSSL_KEIL
186124         "adcs	r5, r5, r5\n\t"
186125 #elif defined(__clang__)
186126         "adcs	r5, r5\n\t"
186127 #else
186128         "adc	r5, r5\n\t"
186129 #endif
186130 #ifdef WOLFSSL_KEIL
186131         "adcs	r6, r6, r6\n\t"
186132 #elif defined(__clang__)
186133         "adcs	r6, r6\n\t"
186134 #else
186135         "adc	r6, r6\n\t"
186136 #endif
186137 #ifdef WOLFSSL_KEIL
186138         "adcs	r7, r7, r7\n\t"
186139 #elif defined(__clang__)
186140         "adcs	r7, r7\n\t"
186141 #else
186142         "adc	r7, r7\n\t"
186143 #endif
186144         "str	r4, [%[r], #64]\n\t"
186145         "str	r5, [%[r], #68]\n\t"
186146         "str	r6, [%[r], #72]\n\t"
186147         "str	r7, [%[r], #76]\n\t"
186148         "ldr	r4, [%[a], #80]\n\t"
186149         "ldr	r5, [%[a], #84]\n\t"
186150         "ldr	r6, [%[a], #88]\n\t"
186151         "ldr	r7, [%[a], #92]\n\t"
186152 #ifdef WOLFSSL_KEIL
186153         "adcs	r4, r4, r4\n\t"
186154 #elif defined(__clang__)
186155         "adcs	r4, r4\n\t"
186156 #else
186157         "adc	r4, r4\n\t"
186158 #endif
186159 #ifdef WOLFSSL_KEIL
186160         "adcs	r5, r5, r5\n\t"
186161 #elif defined(__clang__)
186162         "adcs	r5, r5\n\t"
186163 #else
186164         "adc	r5, r5\n\t"
186165 #endif
186166 #ifdef WOLFSSL_KEIL
186167         "adcs	r6, r6, r6\n\t"
186168 #elif defined(__clang__)
186169         "adcs	r6, r6\n\t"
186170 #else
186171         "adc	r6, r6\n\t"
186172 #endif
186173 #ifdef WOLFSSL_KEIL
186174         "adcs	r7, r7, r7\n\t"
186175 #elif defined(__clang__)
186176         "adcs	r7, r7\n\t"
186177 #else
186178         "adc	r7, r7\n\t"
186179 #endif
186180         "str	r4, [%[r], #80]\n\t"
186181         "str	r5, [%[r], #84]\n\t"
186182         "str	r6, [%[r], #88]\n\t"
186183         "str	r7, [%[r], #92]\n\t"
186184         "ldr	r4, [%[a], #96]\n\t"
186185         "ldr	r5, [%[a], #100]\n\t"
186186         "ldr	r6, [%[a], #104]\n\t"
186187         "ldr	r7, [%[a], #108]\n\t"
186188 #ifdef WOLFSSL_KEIL
186189         "adcs	r4, r4, r4\n\t"
186190 #elif defined(__clang__)
186191         "adcs	r4, r4\n\t"
186192 #else
186193         "adc	r4, r4\n\t"
186194 #endif
186195 #ifdef WOLFSSL_KEIL
186196         "adcs	r5, r5, r5\n\t"
186197 #elif defined(__clang__)
186198         "adcs	r5, r5\n\t"
186199 #else
186200         "adc	r5, r5\n\t"
186201 #endif
186202 #ifdef WOLFSSL_KEIL
186203         "adcs	r6, r6, r6\n\t"
186204 #elif defined(__clang__)
186205         "adcs	r6, r6\n\t"
186206 #else
186207         "adc	r6, r6\n\t"
186208 #endif
186209 #ifdef WOLFSSL_KEIL
186210         "adcs	r7, r7, r7\n\t"
186211 #elif defined(__clang__)
186212         "adcs	r7, r7\n\t"
186213 #else
186214         "adc	r7, r7\n\t"
186215 #endif
186216         "str	r4, [%[r], #96]\n\t"
186217         "str	r5, [%[r], #100]\n\t"
186218         "str	r6, [%[r], #104]\n\t"
186219         "str	r7, [%[r], #108]\n\t"
186220         "ldr	r4, [%[a], #112]\n\t"
186221         "ldr	r5, [%[a], #116]\n\t"
186222         "ldr	r6, [%[a], #120]\n\t"
186223         "ldr	r7, [%[a], #124]\n\t"
186224 #ifdef WOLFSSL_KEIL
186225         "adcs	r4, r4, r4\n\t"
186226 #elif defined(__clang__)
186227         "adcs	r4, r4\n\t"
186228 #else
186229         "adc	r4, r4\n\t"
186230 #endif
186231 #ifdef WOLFSSL_KEIL
186232         "adcs	r5, r5, r5\n\t"
186233 #elif defined(__clang__)
186234         "adcs	r5, r5\n\t"
186235 #else
186236         "adc	r5, r5\n\t"
186237 #endif
186238 #ifdef WOLFSSL_KEIL
186239         "adcs	r6, r6, r6\n\t"
186240 #elif defined(__clang__)
186241         "adcs	r6, r6\n\t"
186242 #else
186243         "adc	r6, r6\n\t"
186244 #endif
186245 #ifdef WOLFSSL_KEIL
186246         "adcs	r7, r7, r7\n\t"
186247 #elif defined(__clang__)
186248         "adcs	r7, r7\n\t"
186249 #else
186250         "adc	r7, r7\n\t"
186251 #endif
186252         "str	r4, [%[r], #112]\n\t"
186253         "str	r5, [%[r], #116]\n\t"
186254         "str	r6, [%[r], #120]\n\t"
186255         "str	r7, [%[r], #124]\n\t"
186256         "movs	r3, #0\n\t"
186257         "ldr	r4, [%[m], #124]\n\t"
186258 #ifdef WOLFSSL_KEIL
186259         "adcs	r3, r3, r3\n\t"
186260 #elif defined(__clang__)
186261         "adcs	r3, r3\n\t"
186262 #else
186263         "adc	r3, r3\n\t"
186264 #endif
186265 #if defined(__clang__) || defined(WOLFSSL_KEIL)
186266         "subs	r4, r4, r7\n\t"
186267 #else
186268         "sub	r4, r4, r7\n\t"
186269 #endif
186270 #if defined(__clang__) || defined(WOLFSSL_KEIL)
186271         "negs	r3, r3\n\t"
186272 #else
186273         "neg	r3, r3\n\t"
186274 #endif
186275 #ifdef WOLFSSL_KEIL
186276         "sbcs	r4, r4, r4\n\t"
186277 #elif defined(__clang__)
186278         "sbcs	r4, r4\n\t"
186279 #else
186280         "sbc	r4, r4\n\t"
186281 #endif
186282 #ifdef WOLFSSL_KEIL
186283         "orrs	r3, r3, r4\n\t"
186284 #elif defined(__clang__)
186285         "orrs	r3, r4\n\t"
186286 #else
186287         "orr	r3, r4\n\t"
186288 #endif
186289         "ldr	r4, [%[r]]\n\t"
186290         "ldr	r5, [%[r], #4]\n\t"
186291         "ldr	r6, [%[m]]\n\t"
186292         "ldr	r7, [%[m], #4]\n\t"
186293 #ifdef WOLFSSL_KEIL
186294         "ands	r6, r6, r3\n\t"
186295 #elif defined(__clang__)
186296         "ands	r6, r3\n\t"
186297 #else
186298         "and	r6, r3\n\t"
186299 #endif
186300 #ifdef WOLFSSL_KEIL
186301         "ands	r7, r7, r3\n\t"
186302 #elif defined(__clang__)
186303         "ands	r7, r3\n\t"
186304 #else
186305         "and	r7, r3\n\t"
186306 #endif
186307 #if defined(__clang__) || defined(WOLFSSL_KEIL)
186308         "subs	r4, r4, r6\n\t"
186309 #else
186310         "sub	r4, r4, r6\n\t"
186311 #endif
186312 #ifdef WOLFSSL_KEIL
186313         "sbcs	r5, r5, r7\n\t"
186314 #elif defined(__clang__)
186315         "sbcs	r5, r7\n\t"
186316 #else
186317         "sbc	r5, r7\n\t"
186318 #endif
186319         "str	r4, [%[r]]\n\t"
186320         "str	r5, [%[r], #4]\n\t"
186321         "ldr	r4, [%[r], #8]\n\t"
186322         "ldr	r5, [%[r], #12]\n\t"
186323         "ldr	r6, [%[m], #8]\n\t"
186324         "ldr	r7, [%[m], #12]\n\t"
186325 #ifdef WOLFSSL_KEIL
186326         "ands	r6, r6, r3\n\t"
186327 #elif defined(__clang__)
186328         "ands	r6, r3\n\t"
186329 #else
186330         "and	r6, r3\n\t"
186331 #endif
186332 #ifdef WOLFSSL_KEIL
186333         "ands	r7, r7, r3\n\t"
186334 #elif defined(__clang__)
186335         "ands	r7, r3\n\t"
186336 #else
186337         "and	r7, r3\n\t"
186338 #endif
186339 #ifdef WOLFSSL_KEIL
186340         "sbcs	r4, r4, r6\n\t"
186341 #elif defined(__clang__)
186342         "sbcs	r4, r6\n\t"
186343 #else
186344         "sbc	r4, r6\n\t"
186345 #endif
186346 #ifdef WOLFSSL_KEIL
186347         "sbcs	r5, r5, r7\n\t"
186348 #elif defined(__clang__)
186349         "sbcs	r5, r7\n\t"
186350 #else
186351         "sbc	r5, r7\n\t"
186352 #endif
186353         "str	r4, [%[r], #8]\n\t"
186354         "str	r5, [%[r], #12]\n\t"
186355         "ldr	r4, [%[r], #16]\n\t"
186356         "ldr	r5, [%[r], #20]\n\t"
186357         "ldr	r6, [%[m], #16]\n\t"
186358         "ldr	r7, [%[m], #20]\n\t"
186359 #ifdef WOLFSSL_KEIL
186360         "ands	r6, r6, r3\n\t"
186361 #elif defined(__clang__)
186362         "ands	r6, r3\n\t"
186363 #else
186364         "and	r6, r3\n\t"
186365 #endif
186366 #ifdef WOLFSSL_KEIL
186367         "ands	r7, r7, r3\n\t"
186368 #elif defined(__clang__)
186369         "ands	r7, r3\n\t"
186370 #else
186371         "and	r7, r3\n\t"
186372 #endif
186373 #ifdef WOLFSSL_KEIL
186374         "sbcs	r4, r4, r6\n\t"
186375 #elif defined(__clang__)
186376         "sbcs	r4, r6\n\t"
186377 #else
186378         "sbc	r4, r6\n\t"
186379 #endif
186380 #ifdef WOLFSSL_KEIL
186381         "sbcs	r5, r5, r7\n\t"
186382 #elif defined(__clang__)
186383         "sbcs	r5, r7\n\t"
186384 #else
186385         "sbc	r5, r7\n\t"
186386 #endif
186387         "str	r4, [%[r], #16]\n\t"
186388         "str	r5, [%[r], #20]\n\t"
186389         "ldr	r4, [%[r], #24]\n\t"
186390         "ldr	r5, [%[r], #28]\n\t"
186391         "ldr	r6, [%[m], #24]\n\t"
186392         "ldr	r7, [%[m], #28]\n\t"
186393 #ifdef WOLFSSL_KEIL
186394         "ands	r6, r6, r3\n\t"
186395 #elif defined(__clang__)
186396         "ands	r6, r3\n\t"
186397 #else
186398         "and	r6, r3\n\t"
186399 #endif
186400 #ifdef WOLFSSL_KEIL
186401         "ands	r7, r7, r3\n\t"
186402 #elif defined(__clang__)
186403         "ands	r7, r3\n\t"
186404 #else
186405         "and	r7, r3\n\t"
186406 #endif
186407 #ifdef WOLFSSL_KEIL
186408         "sbcs	r4, r4, r6\n\t"
186409 #elif defined(__clang__)
186410         "sbcs	r4, r6\n\t"
186411 #else
186412         "sbc	r4, r6\n\t"
186413 #endif
186414 #ifdef WOLFSSL_KEIL
186415         "sbcs	r5, r5, r7\n\t"
186416 #elif defined(__clang__)
186417         "sbcs	r5, r7\n\t"
186418 #else
186419         "sbc	r5, r7\n\t"
186420 #endif
186421         "str	r4, [%[r], #24]\n\t"
186422         "str	r5, [%[r], #28]\n\t"
186423         "ldr	r4, [%[r], #32]\n\t"
186424         "ldr	r5, [%[r], #36]\n\t"
186425         "ldr	r6, [%[m], #32]\n\t"
186426         "ldr	r7, [%[m], #36]\n\t"
186427 #ifdef WOLFSSL_KEIL
186428         "ands	r6, r6, r3\n\t"
186429 #elif defined(__clang__)
186430         "ands	r6, r3\n\t"
186431 #else
186432         "and	r6, r3\n\t"
186433 #endif
186434 #ifdef WOLFSSL_KEIL
186435         "ands	r7, r7, r3\n\t"
186436 #elif defined(__clang__)
186437         "ands	r7, r3\n\t"
186438 #else
186439         "and	r7, r3\n\t"
186440 #endif
186441 #ifdef WOLFSSL_KEIL
186442         "sbcs	r4, r4, r6\n\t"
186443 #elif defined(__clang__)
186444         "sbcs	r4, r6\n\t"
186445 #else
186446         "sbc	r4, r6\n\t"
186447 #endif
186448 #ifdef WOLFSSL_KEIL
186449         "sbcs	r5, r5, r7\n\t"
186450 #elif defined(__clang__)
186451         "sbcs	r5, r7\n\t"
186452 #else
186453         "sbc	r5, r7\n\t"
186454 #endif
186455         "str	r4, [%[r], #32]\n\t"
186456         "str	r5, [%[r], #36]\n\t"
186457         "ldr	r4, [%[r], #40]\n\t"
186458         "ldr	r5, [%[r], #44]\n\t"
186459         "ldr	r6, [%[m], #40]\n\t"
186460         "ldr	r7, [%[m], #44]\n\t"
186461 #ifdef WOLFSSL_KEIL
186462         "ands	r6, r6, r3\n\t"
186463 #elif defined(__clang__)
186464         "ands	r6, r3\n\t"
186465 #else
186466         "and	r6, r3\n\t"
186467 #endif
186468 #ifdef WOLFSSL_KEIL
186469         "ands	r7, r7, r3\n\t"
186470 #elif defined(__clang__)
186471         "ands	r7, r3\n\t"
186472 #else
186473         "and	r7, r3\n\t"
186474 #endif
186475 #ifdef WOLFSSL_KEIL
186476         "sbcs	r4, r4, r6\n\t"
186477 #elif defined(__clang__)
186478         "sbcs	r4, r6\n\t"
186479 #else
186480         "sbc	r4, r6\n\t"
186481 #endif
186482 #ifdef WOLFSSL_KEIL
186483         "sbcs	r5, r5, r7\n\t"
186484 #elif defined(__clang__)
186485         "sbcs	r5, r7\n\t"
186486 #else
186487         "sbc	r5, r7\n\t"
186488 #endif
186489         "str	r4, [%[r], #40]\n\t"
186490         "str	r5, [%[r], #44]\n\t"
186491         "ldr	r4, [%[r], #48]\n\t"
186492         "ldr	r5, [%[r], #52]\n\t"
186493         "ldr	r6, [%[m], #48]\n\t"
186494         "ldr	r7, [%[m], #52]\n\t"
186495 #ifdef WOLFSSL_KEIL
186496         "ands	r6, r6, r3\n\t"
186497 #elif defined(__clang__)
186498         "ands	r6, r3\n\t"
186499 #else
186500         "and	r6, r3\n\t"
186501 #endif
186502 #ifdef WOLFSSL_KEIL
186503         "ands	r7, r7, r3\n\t"
186504 #elif defined(__clang__)
186505         "ands	r7, r3\n\t"
186506 #else
186507         "and	r7, r3\n\t"
186508 #endif
186509 #ifdef WOLFSSL_KEIL
186510         "sbcs	r4, r4, r6\n\t"
186511 #elif defined(__clang__)
186512         "sbcs	r4, r6\n\t"
186513 #else
186514         "sbc	r4, r6\n\t"
186515 #endif
186516 #ifdef WOLFSSL_KEIL
186517         "sbcs	r5, r5, r7\n\t"
186518 #elif defined(__clang__)
186519         "sbcs	r5, r7\n\t"
186520 #else
186521         "sbc	r5, r7\n\t"
186522 #endif
186523         "str	r4, [%[r], #48]\n\t"
186524         "str	r5, [%[r], #52]\n\t"
186525         "ldr	r4, [%[r], #56]\n\t"
186526         "ldr	r5, [%[r], #60]\n\t"
186527         "ldr	r6, [%[m], #56]\n\t"
186528         "ldr	r7, [%[m], #60]\n\t"
186529 #ifdef WOLFSSL_KEIL
186530         "ands	r6, r6, r3\n\t"
186531 #elif defined(__clang__)
186532         "ands	r6, r3\n\t"
186533 #else
186534         "and	r6, r3\n\t"
186535 #endif
186536 #ifdef WOLFSSL_KEIL
186537         "ands	r7, r7, r3\n\t"
186538 #elif defined(__clang__)
186539         "ands	r7, r3\n\t"
186540 #else
186541         "and	r7, r3\n\t"
186542 #endif
186543 #ifdef WOLFSSL_KEIL
186544         "sbcs	r4, r4, r6\n\t"
186545 #elif defined(__clang__)
186546         "sbcs	r4, r6\n\t"
186547 #else
186548         "sbc	r4, r6\n\t"
186549 #endif
186550 #ifdef WOLFSSL_KEIL
186551         "sbcs	r5, r5, r7\n\t"
186552 #elif defined(__clang__)
186553         "sbcs	r5, r7\n\t"
186554 #else
186555         "sbc	r5, r7\n\t"
186556 #endif
186557         "str	r4, [%[r], #56]\n\t"
186558         "str	r5, [%[r], #60]\n\t"
186559         "ldr	r4, [%[r], #64]\n\t"
186560         "ldr	r5, [%[r], #68]\n\t"
186561         "ldr	r6, [%[m], #64]\n\t"
186562         "ldr	r7, [%[m], #68]\n\t"
186563 #ifdef WOLFSSL_KEIL
186564         "ands	r6, r6, r3\n\t"
186565 #elif defined(__clang__)
186566         "ands	r6, r3\n\t"
186567 #else
186568         "and	r6, r3\n\t"
186569 #endif
186570 #ifdef WOLFSSL_KEIL
186571         "ands	r7, r7, r3\n\t"
186572 #elif defined(__clang__)
186573         "ands	r7, r3\n\t"
186574 #else
186575         "and	r7, r3\n\t"
186576 #endif
186577 #ifdef WOLFSSL_KEIL
186578         "sbcs	r4, r4, r6\n\t"
186579 #elif defined(__clang__)
186580         "sbcs	r4, r6\n\t"
186581 #else
186582         "sbc	r4, r6\n\t"
186583 #endif
186584 #ifdef WOLFSSL_KEIL
186585         "sbcs	r5, r5, r7\n\t"
186586 #elif defined(__clang__)
186587         "sbcs	r5, r7\n\t"
186588 #else
186589         "sbc	r5, r7\n\t"
186590 #endif
186591         "str	r4, [%[r], #64]\n\t"
186592         "str	r5, [%[r], #68]\n\t"
186593         "ldr	r4, [%[r], #72]\n\t"
186594         "ldr	r5, [%[r], #76]\n\t"
186595         "ldr	r6, [%[m], #72]\n\t"
186596         "ldr	r7, [%[m], #76]\n\t"
186597 #ifdef WOLFSSL_KEIL
186598         "ands	r6, r6, r3\n\t"
186599 #elif defined(__clang__)
186600         "ands	r6, r3\n\t"
186601 #else
186602         "and	r6, r3\n\t"
186603 #endif
186604 #ifdef WOLFSSL_KEIL
186605         "ands	r7, r7, r3\n\t"
186606 #elif defined(__clang__)
186607         "ands	r7, r3\n\t"
186608 #else
186609         "and	r7, r3\n\t"
186610 #endif
186611 #ifdef WOLFSSL_KEIL
186612         "sbcs	r4, r4, r6\n\t"
186613 #elif defined(__clang__)
186614         "sbcs	r4, r6\n\t"
186615 #else
186616         "sbc	r4, r6\n\t"
186617 #endif
186618 #ifdef WOLFSSL_KEIL
186619         "sbcs	r5, r5, r7\n\t"
186620 #elif defined(__clang__)
186621         "sbcs	r5, r7\n\t"
186622 #else
186623         "sbc	r5, r7\n\t"
186624 #endif
186625         "str	r4, [%[r], #72]\n\t"
186626         "str	r5, [%[r], #76]\n\t"
186627         "ldr	r4, [%[r], #80]\n\t"
186628         "ldr	r5, [%[r], #84]\n\t"
186629         "ldr	r6, [%[m], #80]\n\t"
186630         "ldr	r7, [%[m], #84]\n\t"
186631 #ifdef WOLFSSL_KEIL
186632         "ands	r6, r6, r3\n\t"
186633 #elif defined(__clang__)
186634         "ands	r6, r3\n\t"
186635 #else
186636         "and	r6, r3\n\t"
186637 #endif
186638 #ifdef WOLFSSL_KEIL
186639         "ands	r7, r7, r3\n\t"
186640 #elif defined(__clang__)
186641         "ands	r7, r3\n\t"
186642 #else
186643         "and	r7, r3\n\t"
186644 #endif
186645 #ifdef WOLFSSL_KEIL
186646         "sbcs	r4, r4, r6\n\t"
186647 #elif defined(__clang__)
186648         "sbcs	r4, r6\n\t"
186649 #else
186650         "sbc	r4, r6\n\t"
186651 #endif
186652 #ifdef WOLFSSL_KEIL
186653         "sbcs	r5, r5, r7\n\t"
186654 #elif defined(__clang__)
186655         "sbcs	r5, r7\n\t"
186656 #else
186657         "sbc	r5, r7\n\t"
186658 #endif
186659         "str	r4, [%[r], #80]\n\t"
186660         "str	r5, [%[r], #84]\n\t"
186661         "ldr	r4, [%[r], #88]\n\t"
186662         "ldr	r5, [%[r], #92]\n\t"
186663         "ldr	r6, [%[m], #88]\n\t"
186664         "ldr	r7, [%[m], #92]\n\t"
186665 #ifdef WOLFSSL_KEIL
186666         "ands	r6, r6, r3\n\t"
186667 #elif defined(__clang__)
186668         "ands	r6, r3\n\t"
186669 #else
186670         "and	r6, r3\n\t"
186671 #endif
186672 #ifdef WOLFSSL_KEIL
186673         "ands	r7, r7, r3\n\t"
186674 #elif defined(__clang__)
186675         "ands	r7, r3\n\t"
186676 #else
186677         "and	r7, r3\n\t"
186678 #endif
186679 #ifdef WOLFSSL_KEIL
186680         "sbcs	r4, r4, r6\n\t"
186681 #elif defined(__clang__)
186682         "sbcs	r4, r6\n\t"
186683 #else
186684         "sbc	r4, r6\n\t"
186685 #endif
186686 #ifdef WOLFSSL_KEIL
186687         "sbcs	r5, r5, r7\n\t"
186688 #elif defined(__clang__)
186689         "sbcs	r5, r7\n\t"
186690 #else
186691         "sbc	r5, r7\n\t"
186692 #endif
186693         "str	r4, [%[r], #88]\n\t"
186694         "str	r5, [%[r], #92]\n\t"
186695         "ldr	r4, [%[r], #96]\n\t"
186696         "ldr	r5, [%[r], #100]\n\t"
186697         "ldr	r6, [%[m], #96]\n\t"
186698         "ldr	r7, [%[m], #100]\n\t"
186699 #ifdef WOLFSSL_KEIL
186700         "ands	r6, r6, r3\n\t"
186701 #elif defined(__clang__)
186702         "ands	r6, r3\n\t"
186703 #else
186704         "and	r6, r3\n\t"
186705 #endif
186706 #ifdef WOLFSSL_KEIL
186707         "ands	r7, r7, r3\n\t"
186708 #elif defined(__clang__)
186709         "ands	r7, r3\n\t"
186710 #else
186711         "and	r7, r3\n\t"
186712 #endif
186713 #ifdef WOLFSSL_KEIL
186714         "sbcs	r4, r4, r6\n\t"
186715 #elif defined(__clang__)
186716         "sbcs	r4, r6\n\t"
186717 #else
186718         "sbc	r4, r6\n\t"
186719 #endif
186720 #ifdef WOLFSSL_KEIL
186721         "sbcs	r5, r5, r7\n\t"
186722 #elif defined(__clang__)
186723         "sbcs	r5, r7\n\t"
186724 #else
186725         "sbc	r5, r7\n\t"
186726 #endif
186727         "str	r4, [%[r], #96]\n\t"
186728         "str	r5, [%[r], #100]\n\t"
186729         "ldr	r4, [%[r], #104]\n\t"
186730         "ldr	r5, [%[r], #108]\n\t"
186731         "ldr	r6, [%[m], #104]\n\t"
186732         "ldr	r7, [%[m], #108]\n\t"
186733 #ifdef WOLFSSL_KEIL
186734         "ands	r6, r6, r3\n\t"
186735 #elif defined(__clang__)
186736         "ands	r6, r3\n\t"
186737 #else
186738         "and	r6, r3\n\t"
186739 #endif
186740 #ifdef WOLFSSL_KEIL
186741         "ands	r7, r7, r3\n\t"
186742 #elif defined(__clang__)
186743         "ands	r7, r3\n\t"
186744 #else
186745         "and	r7, r3\n\t"
186746 #endif
186747 #ifdef WOLFSSL_KEIL
186748         "sbcs	r4, r4, r6\n\t"
186749 #elif defined(__clang__)
186750         "sbcs	r4, r6\n\t"
186751 #else
186752         "sbc	r4, r6\n\t"
186753 #endif
186754 #ifdef WOLFSSL_KEIL
186755         "sbcs	r5, r5, r7\n\t"
186756 #elif defined(__clang__)
186757         "sbcs	r5, r7\n\t"
186758 #else
186759         "sbc	r5, r7\n\t"
186760 #endif
186761         "str	r4, [%[r], #104]\n\t"
186762         "str	r5, [%[r], #108]\n\t"
186763         "ldr	r4, [%[r], #112]\n\t"
186764         "ldr	r5, [%[r], #116]\n\t"
186765         "ldr	r6, [%[m], #112]\n\t"
186766         "ldr	r7, [%[m], #116]\n\t"
186767 #ifdef WOLFSSL_KEIL
186768         "ands	r6, r6, r3\n\t"
186769 #elif defined(__clang__)
186770         "ands	r6, r3\n\t"
186771 #else
186772         "and	r6, r3\n\t"
186773 #endif
186774 #ifdef WOLFSSL_KEIL
186775         "ands	r7, r7, r3\n\t"
186776 #elif defined(__clang__)
186777         "ands	r7, r3\n\t"
186778 #else
186779         "and	r7, r3\n\t"
186780 #endif
186781 #ifdef WOLFSSL_KEIL
186782         "sbcs	r4, r4, r6\n\t"
186783 #elif defined(__clang__)
186784         "sbcs	r4, r6\n\t"
186785 #else
186786         "sbc	r4, r6\n\t"
186787 #endif
186788 #ifdef WOLFSSL_KEIL
186789         "sbcs	r5, r5, r7\n\t"
186790 #elif defined(__clang__)
186791         "sbcs	r5, r7\n\t"
186792 #else
186793         "sbc	r5, r7\n\t"
186794 #endif
186795         "str	r4, [%[r], #112]\n\t"
186796         "str	r5, [%[r], #116]\n\t"
186797         "ldr	r4, [%[r], #120]\n\t"
186798         "ldr	r5, [%[r], #124]\n\t"
186799         "ldr	r6, [%[m], #120]\n\t"
186800         "ldr	r7, [%[m], #124]\n\t"
186801 #ifdef WOLFSSL_KEIL
186802         "ands	r6, r6, r3\n\t"
186803 #elif defined(__clang__)
186804         "ands	r6, r3\n\t"
186805 #else
186806         "and	r6, r3\n\t"
186807 #endif
186808 #ifdef WOLFSSL_KEIL
186809         "ands	r7, r7, r3\n\t"
186810 #elif defined(__clang__)
186811         "ands	r7, r3\n\t"
186812 #else
186813         "and	r7, r3\n\t"
186814 #endif
186815 #ifdef WOLFSSL_KEIL
186816         "sbcs	r4, r4, r6\n\t"
186817 #elif defined(__clang__)
186818         "sbcs	r4, r6\n\t"
186819 #else
186820         "sbc	r4, r6\n\t"
186821 #endif
186822 #ifdef WOLFSSL_KEIL
186823         "sbcs	r5, r5, r7\n\t"
186824 #elif defined(__clang__)
186825         "sbcs	r5, r7\n\t"
186826 #else
186827         "sbc	r5, r7\n\t"
186828 #endif
186829         "str	r4, [%[r], #120]\n\t"
186830         "str	r5, [%[r], #124]\n\t"
186831         : [r] "+r" (r), [a] "+r" (a), [m] "+r" (m)
186832         :
186833         : "memory", "r3", "r4", "r5", "r6", "r7"
186834     );
186835 }
186836 
186837 /* Triple a Montgomery form number (r = a + a + a % m).
186838  *
186839  * r   Result of Tripling.
186840  * a   Number to triple in Montgomery form.
186841  * m   Modulus (prime).
186842  */
sp_1024_mont_tpl_32(sp_digit * r,const sp_digit * a,const sp_digit * m)186843 SP_NOINLINE static void sp_1024_mont_tpl_32(sp_digit* r, const sp_digit* a,
186844         const sp_digit* m)
186845 {
186846     __asm__ __volatile__ (
186847         "ldr	r4, [%[a]]\n\t"
186848         "ldr	r5, [%[a], #4]\n\t"
186849         "ldr	r6, [%[a], #8]\n\t"
186850         "ldr	r7, [%[a], #12]\n\t"
186851 #if defined(__clang__) || defined(WOLFSSL_KEIL)
186852         "adds	r4, r4, r4\n\t"
186853 #else
186854         "add	r4, r4, r4\n\t"
186855 #endif
186856 #ifdef WOLFSSL_KEIL
186857         "adcs	r5, r5, r5\n\t"
186858 #elif defined(__clang__)
186859         "adcs	r5, r5\n\t"
186860 #else
186861         "adc	r5, r5\n\t"
186862 #endif
186863 #ifdef WOLFSSL_KEIL
186864         "adcs	r6, r6, r6\n\t"
186865 #elif defined(__clang__)
186866         "adcs	r6, r6\n\t"
186867 #else
186868         "adc	r6, r6\n\t"
186869 #endif
186870 #ifdef WOLFSSL_KEIL
186871         "adcs	r7, r7, r7\n\t"
186872 #elif defined(__clang__)
186873         "adcs	r7, r7\n\t"
186874 #else
186875         "adc	r7, r7\n\t"
186876 #endif
186877         "str	r4, [%[r]]\n\t"
186878         "str	r5, [%[r], #4]\n\t"
186879         "str	r6, [%[r], #8]\n\t"
186880         "str	r7, [%[r], #12]\n\t"
186881         "ldr	r4, [%[a], #16]\n\t"
186882         "ldr	r5, [%[a], #20]\n\t"
186883         "ldr	r6, [%[a], #24]\n\t"
186884         "ldr	r7, [%[a], #28]\n\t"
186885 #ifdef WOLFSSL_KEIL
186886         "adcs	r4, r4, r4\n\t"
186887 #elif defined(__clang__)
186888         "adcs	r4, r4\n\t"
186889 #else
186890         "adc	r4, r4\n\t"
186891 #endif
186892 #ifdef WOLFSSL_KEIL
186893         "adcs	r5, r5, r5\n\t"
186894 #elif defined(__clang__)
186895         "adcs	r5, r5\n\t"
186896 #else
186897         "adc	r5, r5\n\t"
186898 #endif
186899 #ifdef WOLFSSL_KEIL
186900         "adcs	r6, r6, r6\n\t"
186901 #elif defined(__clang__)
186902         "adcs	r6, r6\n\t"
186903 #else
186904         "adc	r6, r6\n\t"
186905 #endif
186906 #ifdef WOLFSSL_KEIL
186907         "adcs	r7, r7, r7\n\t"
186908 #elif defined(__clang__)
186909         "adcs	r7, r7\n\t"
186910 #else
186911         "adc	r7, r7\n\t"
186912 #endif
186913         "str	r4, [%[r], #16]\n\t"
186914         "str	r5, [%[r], #20]\n\t"
186915         "str	r6, [%[r], #24]\n\t"
186916         "str	r7, [%[r], #28]\n\t"
186917         "ldr	r4, [%[a], #32]\n\t"
186918         "ldr	r5, [%[a], #36]\n\t"
186919         "ldr	r6, [%[a], #40]\n\t"
186920         "ldr	r7, [%[a], #44]\n\t"
186921 #ifdef WOLFSSL_KEIL
186922         "adcs	r4, r4, r4\n\t"
186923 #elif defined(__clang__)
186924         "adcs	r4, r4\n\t"
186925 #else
186926         "adc	r4, r4\n\t"
186927 #endif
186928 #ifdef WOLFSSL_KEIL
186929         "adcs	r5, r5, r5\n\t"
186930 #elif defined(__clang__)
186931         "adcs	r5, r5\n\t"
186932 #else
186933         "adc	r5, r5\n\t"
186934 #endif
186935 #ifdef WOLFSSL_KEIL
186936         "adcs	r6, r6, r6\n\t"
186937 #elif defined(__clang__)
186938         "adcs	r6, r6\n\t"
186939 #else
186940         "adc	r6, r6\n\t"
186941 #endif
186942 #ifdef WOLFSSL_KEIL
186943         "adcs	r7, r7, r7\n\t"
186944 #elif defined(__clang__)
186945         "adcs	r7, r7\n\t"
186946 #else
186947         "adc	r7, r7\n\t"
186948 #endif
186949         "str	r4, [%[r], #32]\n\t"
186950         "str	r5, [%[r], #36]\n\t"
186951         "str	r6, [%[r], #40]\n\t"
186952         "str	r7, [%[r], #44]\n\t"
186953         "ldr	r4, [%[a], #48]\n\t"
186954         "ldr	r5, [%[a], #52]\n\t"
186955         "ldr	r6, [%[a], #56]\n\t"
186956         "ldr	r7, [%[a], #60]\n\t"
186957 #ifdef WOLFSSL_KEIL
186958         "adcs	r4, r4, r4\n\t"
186959 #elif defined(__clang__)
186960         "adcs	r4, r4\n\t"
186961 #else
186962         "adc	r4, r4\n\t"
186963 #endif
186964 #ifdef WOLFSSL_KEIL
186965         "adcs	r5, r5, r5\n\t"
186966 #elif defined(__clang__)
186967         "adcs	r5, r5\n\t"
186968 #else
186969         "adc	r5, r5\n\t"
186970 #endif
186971 #ifdef WOLFSSL_KEIL
186972         "adcs	r6, r6, r6\n\t"
186973 #elif defined(__clang__)
186974         "adcs	r6, r6\n\t"
186975 #else
186976         "adc	r6, r6\n\t"
186977 #endif
186978 #ifdef WOLFSSL_KEIL
186979         "adcs	r7, r7, r7\n\t"
186980 #elif defined(__clang__)
186981         "adcs	r7, r7\n\t"
186982 #else
186983         "adc	r7, r7\n\t"
186984 #endif
186985         "str	r4, [%[r], #48]\n\t"
186986         "str	r5, [%[r], #52]\n\t"
186987         "str	r6, [%[r], #56]\n\t"
186988         "str	r7, [%[r], #60]\n\t"
186989         "ldr	r4, [%[a], #64]\n\t"
186990         "ldr	r5, [%[a], #68]\n\t"
186991         "ldr	r6, [%[a], #72]\n\t"
186992         "ldr	r7, [%[a], #76]\n\t"
186993 #ifdef WOLFSSL_KEIL
186994         "adcs	r4, r4, r4\n\t"
186995 #elif defined(__clang__)
186996         "adcs	r4, r4\n\t"
186997 #else
186998         "adc	r4, r4\n\t"
186999 #endif
187000 #ifdef WOLFSSL_KEIL
187001         "adcs	r5, r5, r5\n\t"
187002 #elif defined(__clang__)
187003         "adcs	r5, r5\n\t"
187004 #else
187005         "adc	r5, r5\n\t"
187006 #endif
187007 #ifdef WOLFSSL_KEIL
187008         "adcs	r6, r6, r6\n\t"
187009 #elif defined(__clang__)
187010         "adcs	r6, r6\n\t"
187011 #else
187012         "adc	r6, r6\n\t"
187013 #endif
187014 #ifdef WOLFSSL_KEIL
187015         "adcs	r7, r7, r7\n\t"
187016 #elif defined(__clang__)
187017         "adcs	r7, r7\n\t"
187018 #else
187019         "adc	r7, r7\n\t"
187020 #endif
187021         "str	r4, [%[r], #64]\n\t"
187022         "str	r5, [%[r], #68]\n\t"
187023         "str	r6, [%[r], #72]\n\t"
187024         "str	r7, [%[r], #76]\n\t"
187025         "ldr	r4, [%[a], #80]\n\t"
187026         "ldr	r5, [%[a], #84]\n\t"
187027         "ldr	r6, [%[a], #88]\n\t"
187028         "ldr	r7, [%[a], #92]\n\t"
187029 #ifdef WOLFSSL_KEIL
187030         "adcs	r4, r4, r4\n\t"
187031 #elif defined(__clang__)
187032         "adcs	r4, r4\n\t"
187033 #else
187034         "adc	r4, r4\n\t"
187035 #endif
187036 #ifdef WOLFSSL_KEIL
187037         "adcs	r5, r5, r5\n\t"
187038 #elif defined(__clang__)
187039         "adcs	r5, r5\n\t"
187040 #else
187041         "adc	r5, r5\n\t"
187042 #endif
187043 #ifdef WOLFSSL_KEIL
187044         "adcs	r6, r6, r6\n\t"
187045 #elif defined(__clang__)
187046         "adcs	r6, r6\n\t"
187047 #else
187048         "adc	r6, r6\n\t"
187049 #endif
187050 #ifdef WOLFSSL_KEIL
187051         "adcs	r7, r7, r7\n\t"
187052 #elif defined(__clang__)
187053         "adcs	r7, r7\n\t"
187054 #else
187055         "adc	r7, r7\n\t"
187056 #endif
187057         "str	r4, [%[r], #80]\n\t"
187058         "str	r5, [%[r], #84]\n\t"
187059         "str	r6, [%[r], #88]\n\t"
187060         "str	r7, [%[r], #92]\n\t"
187061         "ldr	r4, [%[a], #96]\n\t"
187062         "ldr	r5, [%[a], #100]\n\t"
187063         "ldr	r6, [%[a], #104]\n\t"
187064         "ldr	r7, [%[a], #108]\n\t"
187065 #ifdef WOLFSSL_KEIL
187066         "adcs	r4, r4, r4\n\t"
187067 #elif defined(__clang__)
187068         "adcs	r4, r4\n\t"
187069 #else
187070         "adc	r4, r4\n\t"
187071 #endif
187072 #ifdef WOLFSSL_KEIL
187073         "adcs	r5, r5, r5\n\t"
187074 #elif defined(__clang__)
187075         "adcs	r5, r5\n\t"
187076 #else
187077         "adc	r5, r5\n\t"
187078 #endif
187079 #ifdef WOLFSSL_KEIL
187080         "adcs	r6, r6, r6\n\t"
187081 #elif defined(__clang__)
187082         "adcs	r6, r6\n\t"
187083 #else
187084         "adc	r6, r6\n\t"
187085 #endif
187086 #ifdef WOLFSSL_KEIL
187087         "adcs	r7, r7, r7\n\t"
187088 #elif defined(__clang__)
187089         "adcs	r7, r7\n\t"
187090 #else
187091         "adc	r7, r7\n\t"
187092 #endif
187093         "str	r4, [%[r], #96]\n\t"
187094         "str	r5, [%[r], #100]\n\t"
187095         "str	r6, [%[r], #104]\n\t"
187096         "str	r7, [%[r], #108]\n\t"
187097         "ldr	r4, [%[a], #112]\n\t"
187098         "ldr	r5, [%[a], #116]\n\t"
187099         "ldr	r6, [%[a], #120]\n\t"
187100         "ldr	r7, [%[a], #124]\n\t"
187101 #ifdef WOLFSSL_KEIL
187102         "adcs	r4, r4, r4\n\t"
187103 #elif defined(__clang__)
187104         "adcs	r4, r4\n\t"
187105 #else
187106         "adc	r4, r4\n\t"
187107 #endif
187108 #ifdef WOLFSSL_KEIL
187109         "adcs	r5, r5, r5\n\t"
187110 #elif defined(__clang__)
187111         "adcs	r5, r5\n\t"
187112 #else
187113         "adc	r5, r5\n\t"
187114 #endif
187115 #ifdef WOLFSSL_KEIL
187116         "adcs	r6, r6, r6\n\t"
187117 #elif defined(__clang__)
187118         "adcs	r6, r6\n\t"
187119 #else
187120         "adc	r6, r6\n\t"
187121 #endif
187122 #ifdef WOLFSSL_KEIL
187123         "adcs	r7, r7, r7\n\t"
187124 #elif defined(__clang__)
187125         "adcs	r7, r7\n\t"
187126 #else
187127         "adc	r7, r7\n\t"
187128 #endif
187129         "str	r4, [%[r], #112]\n\t"
187130         "str	r5, [%[r], #116]\n\t"
187131         "str	r6, [%[r], #120]\n\t"
187132         "str	r7, [%[r], #124]\n\t"
187133         "movs	r3, #0\n\t"
187134         "ldr	r4, [%[m], #124]\n\t"
187135 #ifdef WOLFSSL_KEIL
187136         "adcs	r3, r3, r3\n\t"
187137 #elif defined(__clang__)
187138         "adcs	r3, r3\n\t"
187139 #else
187140         "adc	r3, r3\n\t"
187141 #endif
187142 #if defined(__clang__) || defined(WOLFSSL_KEIL)
187143         "subs	r4, r4, r7\n\t"
187144 #else
187145         "sub	r4, r4, r7\n\t"
187146 #endif
187147 #if defined(__clang__) || defined(WOLFSSL_KEIL)
187148         "negs	r3, r3\n\t"
187149 #else
187150         "neg	r3, r3\n\t"
187151 #endif
187152 #ifdef WOLFSSL_KEIL
187153         "sbcs	r4, r4, r4\n\t"
187154 #elif defined(__clang__)
187155         "sbcs	r4, r4\n\t"
187156 #else
187157         "sbc	r4, r4\n\t"
187158 #endif
187159 #ifdef WOLFSSL_KEIL
187160         "orrs	r3, r3, r4\n\t"
187161 #elif defined(__clang__)
187162         "orrs	r3, r4\n\t"
187163 #else
187164         "orr	r3, r4\n\t"
187165 #endif
187166         "ldr	r4, [%[r]]\n\t"
187167         "ldr	r5, [%[r], #4]\n\t"
187168         "ldr	r6, [%[m]]\n\t"
187169         "ldr	r7, [%[m], #4]\n\t"
187170 #ifdef WOLFSSL_KEIL
187171         "ands	r6, r6, r3\n\t"
187172 #elif defined(__clang__)
187173         "ands	r6, r3\n\t"
187174 #else
187175         "and	r6, r3\n\t"
187176 #endif
187177 #ifdef WOLFSSL_KEIL
187178         "ands	r7, r7, r3\n\t"
187179 #elif defined(__clang__)
187180         "ands	r7, r3\n\t"
187181 #else
187182         "and	r7, r3\n\t"
187183 #endif
187184 #if defined(__clang__) || defined(WOLFSSL_KEIL)
187185         "subs	r4, r4, r6\n\t"
187186 #else
187187         "sub	r4, r4, r6\n\t"
187188 #endif
187189 #ifdef WOLFSSL_KEIL
187190         "sbcs	r5, r5, r7\n\t"
187191 #elif defined(__clang__)
187192         "sbcs	r5, r7\n\t"
187193 #else
187194         "sbc	r5, r7\n\t"
187195 #endif
187196         "str	r4, [%[r]]\n\t"
187197         "str	r5, [%[r], #4]\n\t"
187198         "ldr	r4, [%[r], #8]\n\t"
187199         "ldr	r5, [%[r], #12]\n\t"
187200         "ldr	r6, [%[m], #8]\n\t"
187201         "ldr	r7, [%[m], #12]\n\t"
187202 #ifdef WOLFSSL_KEIL
187203         "ands	r6, r6, r3\n\t"
187204 #elif defined(__clang__)
187205         "ands	r6, r3\n\t"
187206 #else
187207         "and	r6, r3\n\t"
187208 #endif
187209 #ifdef WOLFSSL_KEIL
187210         "ands	r7, r7, r3\n\t"
187211 #elif defined(__clang__)
187212         "ands	r7, r3\n\t"
187213 #else
187214         "and	r7, r3\n\t"
187215 #endif
187216 #ifdef WOLFSSL_KEIL
187217         "sbcs	r4, r4, r6\n\t"
187218 #elif defined(__clang__)
187219         "sbcs	r4, r6\n\t"
187220 #else
187221         "sbc	r4, r6\n\t"
187222 #endif
187223 #ifdef WOLFSSL_KEIL
187224         "sbcs	r5, r5, r7\n\t"
187225 #elif defined(__clang__)
187226         "sbcs	r5, r7\n\t"
187227 #else
187228         "sbc	r5, r7\n\t"
187229 #endif
187230         "str	r4, [%[r], #8]\n\t"
187231         "str	r5, [%[r], #12]\n\t"
187232         "ldr	r4, [%[r], #16]\n\t"
187233         "ldr	r5, [%[r], #20]\n\t"
187234         "ldr	r6, [%[m], #16]\n\t"
187235         "ldr	r7, [%[m], #20]\n\t"
187236 #ifdef WOLFSSL_KEIL
187237         "ands	r6, r6, r3\n\t"
187238 #elif defined(__clang__)
187239         "ands	r6, r3\n\t"
187240 #else
187241         "and	r6, r3\n\t"
187242 #endif
187243 #ifdef WOLFSSL_KEIL
187244         "ands	r7, r7, r3\n\t"
187245 #elif defined(__clang__)
187246         "ands	r7, r3\n\t"
187247 #else
187248         "and	r7, r3\n\t"
187249 #endif
187250 #ifdef WOLFSSL_KEIL
187251         "sbcs	r4, r4, r6\n\t"
187252 #elif defined(__clang__)
187253         "sbcs	r4, r6\n\t"
187254 #else
187255         "sbc	r4, r6\n\t"
187256 #endif
187257 #ifdef WOLFSSL_KEIL
187258         "sbcs	r5, r5, r7\n\t"
187259 #elif defined(__clang__)
187260         "sbcs	r5, r7\n\t"
187261 #else
187262         "sbc	r5, r7\n\t"
187263 #endif
187264         "str	r4, [%[r], #16]\n\t"
187265         "str	r5, [%[r], #20]\n\t"
187266         "ldr	r4, [%[r], #24]\n\t"
187267         "ldr	r5, [%[r], #28]\n\t"
187268         "ldr	r6, [%[m], #24]\n\t"
187269         "ldr	r7, [%[m], #28]\n\t"
187270 #ifdef WOLFSSL_KEIL
187271         "ands	r6, r6, r3\n\t"
187272 #elif defined(__clang__)
187273         "ands	r6, r3\n\t"
187274 #else
187275         "and	r6, r3\n\t"
187276 #endif
187277 #ifdef WOLFSSL_KEIL
187278         "ands	r7, r7, r3\n\t"
187279 #elif defined(__clang__)
187280         "ands	r7, r3\n\t"
187281 #else
187282         "and	r7, r3\n\t"
187283 #endif
187284 #ifdef WOLFSSL_KEIL
187285         "sbcs	r4, r4, r6\n\t"
187286 #elif defined(__clang__)
187287         "sbcs	r4, r6\n\t"
187288 #else
187289         "sbc	r4, r6\n\t"
187290 #endif
187291 #ifdef WOLFSSL_KEIL
187292         "sbcs	r5, r5, r7\n\t"
187293 #elif defined(__clang__)
187294         "sbcs	r5, r7\n\t"
187295 #else
187296         "sbc	r5, r7\n\t"
187297 #endif
187298         "str	r4, [%[r], #24]\n\t"
187299         "str	r5, [%[r], #28]\n\t"
187300         "ldr	r4, [%[r], #32]\n\t"
187301         "ldr	r5, [%[r], #36]\n\t"
187302         "ldr	r6, [%[m], #32]\n\t"
187303         "ldr	r7, [%[m], #36]\n\t"
187304 #ifdef WOLFSSL_KEIL
187305         "ands	r6, r6, r3\n\t"
187306 #elif defined(__clang__)
187307         "ands	r6, r3\n\t"
187308 #else
187309         "and	r6, r3\n\t"
187310 #endif
187311 #ifdef WOLFSSL_KEIL
187312         "ands	r7, r7, r3\n\t"
187313 #elif defined(__clang__)
187314         "ands	r7, r3\n\t"
187315 #else
187316         "and	r7, r3\n\t"
187317 #endif
187318 #ifdef WOLFSSL_KEIL
187319         "sbcs	r4, r4, r6\n\t"
187320 #elif defined(__clang__)
187321         "sbcs	r4, r6\n\t"
187322 #else
187323         "sbc	r4, r6\n\t"
187324 #endif
187325 #ifdef WOLFSSL_KEIL
187326         "sbcs	r5, r5, r7\n\t"
187327 #elif defined(__clang__)
187328         "sbcs	r5, r7\n\t"
187329 #else
187330         "sbc	r5, r7\n\t"
187331 #endif
187332         "str	r4, [%[r], #32]\n\t"
187333         "str	r5, [%[r], #36]\n\t"
187334         "ldr	r4, [%[r], #40]\n\t"
187335         "ldr	r5, [%[r], #44]\n\t"
187336         "ldr	r6, [%[m], #40]\n\t"
187337         "ldr	r7, [%[m], #44]\n\t"
187338 #ifdef WOLFSSL_KEIL
187339         "ands	r6, r6, r3\n\t"
187340 #elif defined(__clang__)
187341         "ands	r6, r3\n\t"
187342 #else
187343         "and	r6, r3\n\t"
187344 #endif
187345 #ifdef WOLFSSL_KEIL
187346         "ands	r7, r7, r3\n\t"
187347 #elif defined(__clang__)
187348         "ands	r7, r3\n\t"
187349 #else
187350         "and	r7, r3\n\t"
187351 #endif
187352 #ifdef WOLFSSL_KEIL
187353         "sbcs	r4, r4, r6\n\t"
187354 #elif defined(__clang__)
187355         "sbcs	r4, r6\n\t"
187356 #else
187357         "sbc	r4, r6\n\t"
187358 #endif
187359 #ifdef WOLFSSL_KEIL
187360         "sbcs	r5, r5, r7\n\t"
187361 #elif defined(__clang__)
187362         "sbcs	r5, r7\n\t"
187363 #else
187364         "sbc	r5, r7\n\t"
187365 #endif
187366         "str	r4, [%[r], #40]\n\t"
187367         "str	r5, [%[r], #44]\n\t"
187368         "ldr	r4, [%[r], #48]\n\t"
187369         "ldr	r5, [%[r], #52]\n\t"
187370         "ldr	r6, [%[m], #48]\n\t"
187371         "ldr	r7, [%[m], #52]\n\t"
187372 #ifdef WOLFSSL_KEIL
187373         "ands	r6, r6, r3\n\t"
187374 #elif defined(__clang__)
187375         "ands	r6, r3\n\t"
187376 #else
187377         "and	r6, r3\n\t"
187378 #endif
187379 #ifdef WOLFSSL_KEIL
187380         "ands	r7, r7, r3\n\t"
187381 #elif defined(__clang__)
187382         "ands	r7, r3\n\t"
187383 #else
187384         "and	r7, r3\n\t"
187385 #endif
187386 #ifdef WOLFSSL_KEIL
187387         "sbcs	r4, r4, r6\n\t"
187388 #elif defined(__clang__)
187389         "sbcs	r4, r6\n\t"
187390 #else
187391         "sbc	r4, r6\n\t"
187392 #endif
187393 #ifdef WOLFSSL_KEIL
187394         "sbcs	r5, r5, r7\n\t"
187395 #elif defined(__clang__)
187396         "sbcs	r5, r7\n\t"
187397 #else
187398         "sbc	r5, r7\n\t"
187399 #endif
187400         "str	r4, [%[r], #48]\n\t"
187401         "str	r5, [%[r], #52]\n\t"
187402         "ldr	r4, [%[r], #56]\n\t"
187403         "ldr	r5, [%[r], #60]\n\t"
187404         "ldr	r6, [%[m], #56]\n\t"
187405         "ldr	r7, [%[m], #60]\n\t"
187406 #ifdef WOLFSSL_KEIL
187407         "ands	r6, r6, r3\n\t"
187408 #elif defined(__clang__)
187409         "ands	r6, r3\n\t"
187410 #else
187411         "and	r6, r3\n\t"
187412 #endif
187413 #ifdef WOLFSSL_KEIL
187414         "ands	r7, r7, r3\n\t"
187415 #elif defined(__clang__)
187416         "ands	r7, r3\n\t"
187417 #else
187418         "and	r7, r3\n\t"
187419 #endif
187420 #ifdef WOLFSSL_KEIL
187421         "sbcs	r4, r4, r6\n\t"
187422 #elif defined(__clang__)
187423         "sbcs	r4, r6\n\t"
187424 #else
187425         "sbc	r4, r6\n\t"
187426 #endif
187427 #ifdef WOLFSSL_KEIL
187428         "sbcs	r5, r5, r7\n\t"
187429 #elif defined(__clang__)
187430         "sbcs	r5, r7\n\t"
187431 #else
187432         "sbc	r5, r7\n\t"
187433 #endif
187434         "str	r4, [%[r], #56]\n\t"
187435         "str	r5, [%[r], #60]\n\t"
187436         "ldr	r4, [%[r], #64]\n\t"
187437         "ldr	r5, [%[r], #68]\n\t"
187438         "ldr	r6, [%[m], #64]\n\t"
187439         "ldr	r7, [%[m], #68]\n\t"
187440 #ifdef WOLFSSL_KEIL
187441         "ands	r6, r6, r3\n\t"
187442 #elif defined(__clang__)
187443         "ands	r6, r3\n\t"
187444 #else
187445         "and	r6, r3\n\t"
187446 #endif
187447 #ifdef WOLFSSL_KEIL
187448         "ands	r7, r7, r3\n\t"
187449 #elif defined(__clang__)
187450         "ands	r7, r3\n\t"
187451 #else
187452         "and	r7, r3\n\t"
187453 #endif
187454 #ifdef WOLFSSL_KEIL
187455         "sbcs	r4, r4, r6\n\t"
187456 #elif defined(__clang__)
187457         "sbcs	r4, r6\n\t"
187458 #else
187459         "sbc	r4, r6\n\t"
187460 #endif
187461 #ifdef WOLFSSL_KEIL
187462         "sbcs	r5, r5, r7\n\t"
187463 #elif defined(__clang__)
187464         "sbcs	r5, r7\n\t"
187465 #else
187466         "sbc	r5, r7\n\t"
187467 #endif
187468         "str	r4, [%[r], #64]\n\t"
187469         "str	r5, [%[r], #68]\n\t"
187470         "ldr	r4, [%[r], #72]\n\t"
187471         "ldr	r5, [%[r], #76]\n\t"
187472         "ldr	r6, [%[m], #72]\n\t"
187473         "ldr	r7, [%[m], #76]\n\t"
187474 #ifdef WOLFSSL_KEIL
187475         "ands	r6, r6, r3\n\t"
187476 #elif defined(__clang__)
187477         "ands	r6, r3\n\t"
187478 #else
187479         "and	r6, r3\n\t"
187480 #endif
187481 #ifdef WOLFSSL_KEIL
187482         "ands	r7, r7, r3\n\t"
187483 #elif defined(__clang__)
187484         "ands	r7, r3\n\t"
187485 #else
187486         "and	r7, r3\n\t"
187487 #endif
187488 #ifdef WOLFSSL_KEIL
187489         "sbcs	r4, r4, r6\n\t"
187490 #elif defined(__clang__)
187491         "sbcs	r4, r6\n\t"
187492 #else
187493         "sbc	r4, r6\n\t"
187494 #endif
187495 #ifdef WOLFSSL_KEIL
187496         "sbcs	r5, r5, r7\n\t"
187497 #elif defined(__clang__)
187498         "sbcs	r5, r7\n\t"
187499 #else
187500         "sbc	r5, r7\n\t"
187501 #endif
187502         "str	r4, [%[r], #72]\n\t"
187503         "str	r5, [%[r], #76]\n\t"
187504         "ldr	r4, [%[r], #80]\n\t"
187505         "ldr	r5, [%[r], #84]\n\t"
187506         "ldr	r6, [%[m], #80]\n\t"
187507         "ldr	r7, [%[m], #84]\n\t"
187508 #ifdef WOLFSSL_KEIL
187509         "ands	r6, r6, r3\n\t"
187510 #elif defined(__clang__)
187511         "ands	r6, r3\n\t"
187512 #else
187513         "and	r6, r3\n\t"
187514 #endif
187515 #ifdef WOLFSSL_KEIL
187516         "ands	r7, r7, r3\n\t"
187517 #elif defined(__clang__)
187518         "ands	r7, r3\n\t"
187519 #else
187520         "and	r7, r3\n\t"
187521 #endif
187522 #ifdef WOLFSSL_KEIL
187523         "sbcs	r4, r4, r6\n\t"
187524 #elif defined(__clang__)
187525         "sbcs	r4, r6\n\t"
187526 #else
187527         "sbc	r4, r6\n\t"
187528 #endif
187529 #ifdef WOLFSSL_KEIL
187530         "sbcs	r5, r5, r7\n\t"
187531 #elif defined(__clang__)
187532         "sbcs	r5, r7\n\t"
187533 #else
187534         "sbc	r5, r7\n\t"
187535 #endif
187536         "str	r4, [%[r], #80]\n\t"
187537         "str	r5, [%[r], #84]\n\t"
187538         "ldr	r4, [%[r], #88]\n\t"
187539         "ldr	r5, [%[r], #92]\n\t"
187540         "ldr	r6, [%[m], #88]\n\t"
187541         "ldr	r7, [%[m], #92]\n\t"
187542 #ifdef WOLFSSL_KEIL
187543         "ands	r6, r6, r3\n\t"
187544 #elif defined(__clang__)
187545         "ands	r6, r3\n\t"
187546 #else
187547         "and	r6, r3\n\t"
187548 #endif
187549 #ifdef WOLFSSL_KEIL
187550         "ands	r7, r7, r3\n\t"
187551 #elif defined(__clang__)
187552         "ands	r7, r3\n\t"
187553 #else
187554         "and	r7, r3\n\t"
187555 #endif
187556 #ifdef WOLFSSL_KEIL
187557         "sbcs	r4, r4, r6\n\t"
187558 #elif defined(__clang__)
187559         "sbcs	r4, r6\n\t"
187560 #else
187561         "sbc	r4, r6\n\t"
187562 #endif
187563 #ifdef WOLFSSL_KEIL
187564         "sbcs	r5, r5, r7\n\t"
187565 #elif defined(__clang__)
187566         "sbcs	r5, r7\n\t"
187567 #else
187568         "sbc	r5, r7\n\t"
187569 #endif
187570         "str	r4, [%[r], #88]\n\t"
187571         "str	r5, [%[r], #92]\n\t"
187572         "ldr	r4, [%[r], #96]\n\t"
187573         "ldr	r5, [%[r], #100]\n\t"
187574         "ldr	r6, [%[m], #96]\n\t"
187575         "ldr	r7, [%[m], #100]\n\t"
187576 #ifdef WOLFSSL_KEIL
187577         "ands	r6, r6, r3\n\t"
187578 #elif defined(__clang__)
187579         "ands	r6, r3\n\t"
187580 #else
187581         "and	r6, r3\n\t"
187582 #endif
187583 #ifdef WOLFSSL_KEIL
187584         "ands	r7, r7, r3\n\t"
187585 #elif defined(__clang__)
187586         "ands	r7, r3\n\t"
187587 #else
187588         "and	r7, r3\n\t"
187589 #endif
187590 #ifdef WOLFSSL_KEIL
187591         "sbcs	r4, r4, r6\n\t"
187592 #elif defined(__clang__)
187593         "sbcs	r4, r6\n\t"
187594 #else
187595         "sbc	r4, r6\n\t"
187596 #endif
187597 #ifdef WOLFSSL_KEIL
187598         "sbcs	r5, r5, r7\n\t"
187599 #elif defined(__clang__)
187600         "sbcs	r5, r7\n\t"
187601 #else
187602         "sbc	r5, r7\n\t"
187603 #endif
187604         "str	r4, [%[r], #96]\n\t"
187605         "str	r5, [%[r], #100]\n\t"
187606         "ldr	r4, [%[r], #104]\n\t"
187607         "ldr	r5, [%[r], #108]\n\t"
187608         "ldr	r6, [%[m], #104]\n\t"
187609         "ldr	r7, [%[m], #108]\n\t"
187610 #ifdef WOLFSSL_KEIL
187611         "ands	r6, r6, r3\n\t"
187612 #elif defined(__clang__)
187613         "ands	r6, r3\n\t"
187614 #else
187615         "and	r6, r3\n\t"
187616 #endif
187617 #ifdef WOLFSSL_KEIL
187618         "ands	r7, r7, r3\n\t"
187619 #elif defined(__clang__)
187620         "ands	r7, r3\n\t"
187621 #else
187622         "and	r7, r3\n\t"
187623 #endif
187624 #ifdef WOLFSSL_KEIL
187625         "sbcs	r4, r4, r6\n\t"
187626 #elif defined(__clang__)
187627         "sbcs	r4, r6\n\t"
187628 #else
187629         "sbc	r4, r6\n\t"
187630 #endif
187631 #ifdef WOLFSSL_KEIL
187632         "sbcs	r5, r5, r7\n\t"
187633 #elif defined(__clang__)
187634         "sbcs	r5, r7\n\t"
187635 #else
187636         "sbc	r5, r7\n\t"
187637 #endif
187638         "str	r4, [%[r], #104]\n\t"
187639         "str	r5, [%[r], #108]\n\t"
187640         "ldr	r4, [%[r], #112]\n\t"
187641         "ldr	r5, [%[r], #116]\n\t"
187642         "ldr	r6, [%[m], #112]\n\t"
187643         "ldr	r7, [%[m], #116]\n\t"
187644 #ifdef WOLFSSL_KEIL
187645         "ands	r6, r6, r3\n\t"
187646 #elif defined(__clang__)
187647         "ands	r6, r3\n\t"
187648 #else
187649         "and	r6, r3\n\t"
187650 #endif
187651 #ifdef WOLFSSL_KEIL
187652         "ands	r7, r7, r3\n\t"
187653 #elif defined(__clang__)
187654         "ands	r7, r3\n\t"
187655 #else
187656         "and	r7, r3\n\t"
187657 #endif
187658 #ifdef WOLFSSL_KEIL
187659         "sbcs	r4, r4, r6\n\t"
187660 #elif defined(__clang__)
187661         "sbcs	r4, r6\n\t"
187662 #else
187663         "sbc	r4, r6\n\t"
187664 #endif
187665 #ifdef WOLFSSL_KEIL
187666         "sbcs	r5, r5, r7\n\t"
187667 #elif defined(__clang__)
187668         "sbcs	r5, r7\n\t"
187669 #else
187670         "sbc	r5, r7\n\t"
187671 #endif
187672         "str	r4, [%[r], #112]\n\t"
187673         "str	r5, [%[r], #116]\n\t"
187674         "ldr	r4, [%[r], #120]\n\t"
187675         "ldr	r5, [%[r], #124]\n\t"
187676         "ldr	r6, [%[m], #120]\n\t"
187677         "ldr	r7, [%[m], #124]\n\t"
187678 #ifdef WOLFSSL_KEIL
187679         "ands	r6, r6, r3\n\t"
187680 #elif defined(__clang__)
187681         "ands	r6, r3\n\t"
187682 #else
187683         "and	r6, r3\n\t"
187684 #endif
187685 #ifdef WOLFSSL_KEIL
187686         "ands	r7, r7, r3\n\t"
187687 #elif defined(__clang__)
187688         "ands	r7, r3\n\t"
187689 #else
187690         "and	r7, r3\n\t"
187691 #endif
187692 #ifdef WOLFSSL_KEIL
187693         "sbcs	r4, r4, r6\n\t"
187694 #elif defined(__clang__)
187695         "sbcs	r4, r6\n\t"
187696 #else
187697         "sbc	r4, r6\n\t"
187698 #endif
187699 #ifdef WOLFSSL_KEIL
187700         "sbcs	r5, r5, r7\n\t"
187701 #elif defined(__clang__)
187702         "sbcs	r5, r7\n\t"
187703 #else
187704         "sbc	r5, r7\n\t"
187705 #endif
187706         "str	r4, [%[r], #120]\n\t"
187707         "str	r5, [%[r], #124]\n\t"
187708         "ldr	r4, [%[a]]\n\t"
187709         "ldr	r5, [%[a], #4]\n\t"
187710         "ldr	r6, [%[r]]\n\t"
187711         "ldr	r7, [%[r], #4]\n\t"
187712 #if defined(__clang__) || defined(WOLFSSL_KEIL)
187713         "adds	r6, r6, r4\n\t"
187714 #else
187715         "add	r6, r6, r4\n\t"
187716 #endif
187717 #ifdef WOLFSSL_KEIL
187718         "adcs	r7, r7, r5\n\t"
187719 #elif defined(__clang__)
187720         "adcs	r7, r5\n\t"
187721 #else
187722         "adc	r7, r5\n\t"
187723 #endif
187724         "str	r6, [%[r]]\n\t"
187725         "str	r7, [%[r], #4]\n\t"
187726         "ldr	r4, [%[a], #8]\n\t"
187727         "ldr	r5, [%[a], #12]\n\t"
187728         "ldr	r6, [%[r], #8]\n\t"
187729         "ldr	r7, [%[r], #12]\n\t"
187730 #ifdef WOLFSSL_KEIL
187731         "adcs	r6, r6, r4\n\t"
187732 #elif defined(__clang__)
187733         "adcs	r6, r4\n\t"
187734 #else
187735         "adc	r6, r4\n\t"
187736 #endif
187737 #ifdef WOLFSSL_KEIL
187738         "adcs	r7, r7, r5\n\t"
187739 #elif defined(__clang__)
187740         "adcs	r7, r5\n\t"
187741 #else
187742         "adc	r7, r5\n\t"
187743 #endif
187744         "str	r6, [%[r], #8]\n\t"
187745         "str	r7, [%[r], #12]\n\t"
187746         "ldr	r4, [%[a], #16]\n\t"
187747         "ldr	r5, [%[a], #20]\n\t"
187748         "ldr	r6, [%[r], #16]\n\t"
187749         "ldr	r7, [%[r], #20]\n\t"
187750 #ifdef WOLFSSL_KEIL
187751         "adcs	r6, r6, r4\n\t"
187752 #elif defined(__clang__)
187753         "adcs	r6, r4\n\t"
187754 #else
187755         "adc	r6, r4\n\t"
187756 #endif
187757 #ifdef WOLFSSL_KEIL
187758         "adcs	r7, r7, r5\n\t"
187759 #elif defined(__clang__)
187760         "adcs	r7, r5\n\t"
187761 #else
187762         "adc	r7, r5\n\t"
187763 #endif
187764         "str	r6, [%[r], #16]\n\t"
187765         "str	r7, [%[r], #20]\n\t"
187766         "ldr	r4, [%[a], #24]\n\t"
187767         "ldr	r5, [%[a], #28]\n\t"
187768         "ldr	r6, [%[r], #24]\n\t"
187769         "ldr	r7, [%[r], #28]\n\t"
187770 #ifdef WOLFSSL_KEIL
187771         "adcs	r6, r6, r4\n\t"
187772 #elif defined(__clang__)
187773         "adcs	r6, r4\n\t"
187774 #else
187775         "adc	r6, r4\n\t"
187776 #endif
187777 #ifdef WOLFSSL_KEIL
187778         "adcs	r7, r7, r5\n\t"
187779 #elif defined(__clang__)
187780         "adcs	r7, r5\n\t"
187781 #else
187782         "adc	r7, r5\n\t"
187783 #endif
187784         "str	r6, [%[r], #24]\n\t"
187785         "str	r7, [%[r], #28]\n\t"
187786         "ldr	r4, [%[a], #32]\n\t"
187787         "ldr	r5, [%[a], #36]\n\t"
187788         "ldr	r6, [%[r], #32]\n\t"
187789         "ldr	r7, [%[r], #36]\n\t"
187790 #ifdef WOLFSSL_KEIL
187791         "adcs	r6, r6, r4\n\t"
187792 #elif defined(__clang__)
187793         "adcs	r6, r4\n\t"
187794 #else
187795         "adc	r6, r4\n\t"
187796 #endif
187797 #ifdef WOLFSSL_KEIL
187798         "adcs	r7, r7, r5\n\t"
187799 #elif defined(__clang__)
187800         "adcs	r7, r5\n\t"
187801 #else
187802         "adc	r7, r5\n\t"
187803 #endif
187804         "str	r6, [%[r], #32]\n\t"
187805         "str	r7, [%[r], #36]\n\t"
187806         "ldr	r4, [%[a], #40]\n\t"
187807         "ldr	r5, [%[a], #44]\n\t"
187808         "ldr	r6, [%[r], #40]\n\t"
187809         "ldr	r7, [%[r], #44]\n\t"
187810 #ifdef WOLFSSL_KEIL
187811         "adcs	r6, r6, r4\n\t"
187812 #elif defined(__clang__)
187813         "adcs	r6, r4\n\t"
187814 #else
187815         "adc	r6, r4\n\t"
187816 #endif
187817 #ifdef WOLFSSL_KEIL
187818         "adcs	r7, r7, r5\n\t"
187819 #elif defined(__clang__)
187820         "adcs	r7, r5\n\t"
187821 #else
187822         "adc	r7, r5\n\t"
187823 #endif
187824         "str	r6, [%[r], #40]\n\t"
187825         "str	r7, [%[r], #44]\n\t"
187826         "ldr	r4, [%[a], #48]\n\t"
187827         "ldr	r5, [%[a], #52]\n\t"
187828         "ldr	r6, [%[r], #48]\n\t"
187829         "ldr	r7, [%[r], #52]\n\t"
187830 #ifdef WOLFSSL_KEIL
187831         "adcs	r6, r6, r4\n\t"
187832 #elif defined(__clang__)
187833         "adcs	r6, r4\n\t"
187834 #else
187835         "adc	r6, r4\n\t"
187836 #endif
187837 #ifdef WOLFSSL_KEIL
187838         "adcs	r7, r7, r5\n\t"
187839 #elif defined(__clang__)
187840         "adcs	r7, r5\n\t"
187841 #else
187842         "adc	r7, r5\n\t"
187843 #endif
187844         "str	r6, [%[r], #48]\n\t"
187845         "str	r7, [%[r], #52]\n\t"
187846         "ldr	r4, [%[a], #56]\n\t"
187847         "ldr	r5, [%[a], #60]\n\t"
187848         "ldr	r6, [%[r], #56]\n\t"
187849         "ldr	r7, [%[r], #60]\n\t"
187850 #ifdef WOLFSSL_KEIL
187851         "adcs	r6, r6, r4\n\t"
187852 #elif defined(__clang__)
187853         "adcs	r6, r4\n\t"
187854 #else
187855         "adc	r6, r4\n\t"
187856 #endif
187857 #ifdef WOLFSSL_KEIL
187858         "adcs	r7, r7, r5\n\t"
187859 #elif defined(__clang__)
187860         "adcs	r7, r5\n\t"
187861 #else
187862         "adc	r7, r5\n\t"
187863 #endif
187864         "str	r6, [%[r], #56]\n\t"
187865         "str	r7, [%[r], #60]\n\t"
187866         "ldr	r4, [%[a], #64]\n\t"
187867         "ldr	r5, [%[a], #68]\n\t"
187868         "ldr	r6, [%[r], #64]\n\t"
187869         "ldr	r7, [%[r], #68]\n\t"
187870 #ifdef WOLFSSL_KEIL
187871         "adcs	r6, r6, r4\n\t"
187872 #elif defined(__clang__)
187873         "adcs	r6, r4\n\t"
187874 #else
187875         "adc	r6, r4\n\t"
187876 #endif
187877 #ifdef WOLFSSL_KEIL
187878         "adcs	r7, r7, r5\n\t"
187879 #elif defined(__clang__)
187880         "adcs	r7, r5\n\t"
187881 #else
187882         "adc	r7, r5\n\t"
187883 #endif
187884         "str	r6, [%[r], #64]\n\t"
187885         "str	r7, [%[r], #68]\n\t"
187886         "ldr	r4, [%[a], #72]\n\t"
187887         "ldr	r5, [%[a], #76]\n\t"
187888         "ldr	r6, [%[r], #72]\n\t"
187889         "ldr	r7, [%[r], #76]\n\t"
187890 #ifdef WOLFSSL_KEIL
187891         "adcs	r6, r6, r4\n\t"
187892 #elif defined(__clang__)
187893         "adcs	r6, r4\n\t"
187894 #else
187895         "adc	r6, r4\n\t"
187896 #endif
187897 #ifdef WOLFSSL_KEIL
187898         "adcs	r7, r7, r5\n\t"
187899 #elif defined(__clang__)
187900         "adcs	r7, r5\n\t"
187901 #else
187902         "adc	r7, r5\n\t"
187903 #endif
187904         "str	r6, [%[r], #72]\n\t"
187905         "str	r7, [%[r], #76]\n\t"
187906         "ldr	r4, [%[a], #80]\n\t"
187907         "ldr	r5, [%[a], #84]\n\t"
187908         "ldr	r6, [%[r], #80]\n\t"
187909         "ldr	r7, [%[r], #84]\n\t"
187910 #ifdef WOLFSSL_KEIL
187911         "adcs	r6, r6, r4\n\t"
187912 #elif defined(__clang__)
187913         "adcs	r6, r4\n\t"
187914 #else
187915         "adc	r6, r4\n\t"
187916 #endif
187917 #ifdef WOLFSSL_KEIL
187918         "adcs	r7, r7, r5\n\t"
187919 #elif defined(__clang__)
187920         "adcs	r7, r5\n\t"
187921 #else
187922         "adc	r7, r5\n\t"
187923 #endif
187924         "str	r6, [%[r], #80]\n\t"
187925         "str	r7, [%[r], #84]\n\t"
187926         "ldr	r4, [%[a], #88]\n\t"
187927         "ldr	r5, [%[a], #92]\n\t"
187928         "ldr	r6, [%[r], #88]\n\t"
187929         "ldr	r7, [%[r], #92]\n\t"
187930 #ifdef WOLFSSL_KEIL
187931         "adcs	r6, r6, r4\n\t"
187932 #elif defined(__clang__)
187933         "adcs	r6, r4\n\t"
187934 #else
187935         "adc	r6, r4\n\t"
187936 #endif
187937 #ifdef WOLFSSL_KEIL
187938         "adcs	r7, r7, r5\n\t"
187939 #elif defined(__clang__)
187940         "adcs	r7, r5\n\t"
187941 #else
187942         "adc	r7, r5\n\t"
187943 #endif
187944         "str	r6, [%[r], #88]\n\t"
187945         "str	r7, [%[r], #92]\n\t"
187946         "ldr	r4, [%[a], #96]\n\t"
187947         "ldr	r5, [%[a], #100]\n\t"
187948         "ldr	r6, [%[r], #96]\n\t"
187949         "ldr	r7, [%[r], #100]\n\t"
187950 #ifdef WOLFSSL_KEIL
187951         "adcs	r6, r6, r4\n\t"
187952 #elif defined(__clang__)
187953         "adcs	r6, r4\n\t"
187954 #else
187955         "adc	r6, r4\n\t"
187956 #endif
187957 #ifdef WOLFSSL_KEIL
187958         "adcs	r7, r7, r5\n\t"
187959 #elif defined(__clang__)
187960         "adcs	r7, r5\n\t"
187961 #else
187962         "adc	r7, r5\n\t"
187963 #endif
187964         "str	r6, [%[r], #96]\n\t"
187965         "str	r7, [%[r], #100]\n\t"
187966         "ldr	r4, [%[a], #104]\n\t"
187967         "ldr	r5, [%[a], #108]\n\t"
187968         "ldr	r6, [%[r], #104]\n\t"
187969         "ldr	r7, [%[r], #108]\n\t"
187970 #ifdef WOLFSSL_KEIL
187971         "adcs	r6, r6, r4\n\t"
187972 #elif defined(__clang__)
187973         "adcs	r6, r4\n\t"
187974 #else
187975         "adc	r6, r4\n\t"
187976 #endif
187977 #ifdef WOLFSSL_KEIL
187978         "adcs	r7, r7, r5\n\t"
187979 #elif defined(__clang__)
187980         "adcs	r7, r5\n\t"
187981 #else
187982         "adc	r7, r5\n\t"
187983 #endif
187984         "str	r6, [%[r], #104]\n\t"
187985         "str	r7, [%[r], #108]\n\t"
187986         "ldr	r4, [%[a], #112]\n\t"
187987         "ldr	r5, [%[a], #116]\n\t"
187988         "ldr	r6, [%[r], #112]\n\t"
187989         "ldr	r7, [%[r], #116]\n\t"
187990 #ifdef WOLFSSL_KEIL
187991         "adcs	r6, r6, r4\n\t"
187992 #elif defined(__clang__)
187993         "adcs	r6, r4\n\t"
187994 #else
187995         "adc	r6, r4\n\t"
187996 #endif
187997 #ifdef WOLFSSL_KEIL
187998         "adcs	r7, r7, r5\n\t"
187999 #elif defined(__clang__)
188000         "adcs	r7, r5\n\t"
188001 #else
188002         "adc	r7, r5\n\t"
188003 #endif
188004         "str	r6, [%[r], #112]\n\t"
188005         "str	r7, [%[r], #116]\n\t"
188006         "ldr	r4, [%[a], #120]\n\t"
188007         "ldr	r5, [%[a], #124]\n\t"
188008         "ldr	r6, [%[r], #120]\n\t"
188009         "ldr	r7, [%[r], #124]\n\t"
188010 #ifdef WOLFSSL_KEIL
188011         "adcs	r6, r6, r4\n\t"
188012 #elif defined(__clang__)
188013         "adcs	r6, r4\n\t"
188014 #else
188015         "adc	r6, r4\n\t"
188016 #endif
188017 #ifdef WOLFSSL_KEIL
188018         "adcs	r7, r7, r5\n\t"
188019 #elif defined(__clang__)
188020         "adcs	r7, r5\n\t"
188021 #else
188022         "adc	r7, r5\n\t"
188023 #endif
188024         "str	r6, [%[r], #120]\n\t"
188025         "str	r7, [%[r], #124]\n\t"
188026         "movs	r3, #0\n\t"
188027         "ldr	r5, [%[m], #124]\n\t"
188028 #ifdef WOLFSSL_KEIL
188029         "adcs	r3, r3, r3\n\t"
188030 #elif defined(__clang__)
188031         "adcs	r3, r3\n\t"
188032 #else
188033         "adc	r3, r3\n\t"
188034 #endif
188035 #if defined(__clang__) || defined(WOLFSSL_KEIL)
188036         "subs	r5, r5, r7\n\t"
188037 #else
188038         "sub	r5, r5, r7\n\t"
188039 #endif
188040 #if defined(__clang__) || defined(WOLFSSL_KEIL)
188041         "negs	r3, r3\n\t"
188042 #else
188043         "neg	r3, r3\n\t"
188044 #endif
188045 #ifdef WOLFSSL_KEIL
188046         "sbcs	r5, r5, r5\n\t"
188047 #elif defined(__clang__)
188048         "sbcs	r5, r5\n\t"
188049 #else
188050         "sbc	r5, r5\n\t"
188051 #endif
188052 #ifdef WOLFSSL_KEIL
188053         "orrs	r3, r3, r5\n\t"
188054 #elif defined(__clang__)
188055         "orrs	r3, r5\n\t"
188056 #else
188057         "orr	r3, r5\n\t"
188058 #endif
188059         "ldr	r6, [%[r]]\n\t"
188060         "ldr	r7, [%[r], #4]\n\t"
188061         "ldr	r4, [%[m]]\n\t"
188062         "ldr	r5, [%[m], #4]\n\t"
188063 #ifdef WOLFSSL_KEIL
188064         "ands	r4, r4, r3\n\t"
188065 #elif defined(__clang__)
188066         "ands	r4, r3\n\t"
188067 #else
188068         "and	r4, r3\n\t"
188069 #endif
188070 #ifdef WOLFSSL_KEIL
188071         "ands	r5, r5, r3\n\t"
188072 #elif defined(__clang__)
188073         "ands	r5, r3\n\t"
188074 #else
188075         "and	r5, r3\n\t"
188076 #endif
188077 #if defined(__clang__) || defined(WOLFSSL_KEIL)
188078         "subs	r6, r6, r4\n\t"
188079 #else
188080         "sub	r6, r6, r4\n\t"
188081 #endif
188082 #ifdef WOLFSSL_KEIL
188083         "sbcs	r7, r7, r5\n\t"
188084 #elif defined(__clang__)
188085         "sbcs	r7, r5\n\t"
188086 #else
188087         "sbc	r7, r5\n\t"
188088 #endif
188089         "str	r6, [%[r]]\n\t"
188090         "str	r7, [%[r], #4]\n\t"
188091         "ldr	r6, [%[r], #8]\n\t"
188092         "ldr	r7, [%[r], #12]\n\t"
188093         "ldr	r4, [%[m], #8]\n\t"
188094         "ldr	r5, [%[m], #12]\n\t"
188095 #ifdef WOLFSSL_KEIL
188096         "ands	r4, r4, r3\n\t"
188097 #elif defined(__clang__)
188098         "ands	r4, r3\n\t"
188099 #else
188100         "and	r4, r3\n\t"
188101 #endif
188102 #ifdef WOLFSSL_KEIL
188103         "ands	r5, r5, r3\n\t"
188104 #elif defined(__clang__)
188105         "ands	r5, r3\n\t"
188106 #else
188107         "and	r5, r3\n\t"
188108 #endif
188109 #ifdef WOLFSSL_KEIL
188110         "sbcs	r6, r6, r4\n\t"
188111 #elif defined(__clang__)
188112         "sbcs	r6, r4\n\t"
188113 #else
188114         "sbc	r6, r4\n\t"
188115 #endif
188116 #ifdef WOLFSSL_KEIL
188117         "sbcs	r7, r7, r5\n\t"
188118 #elif defined(__clang__)
188119         "sbcs	r7, r5\n\t"
188120 #else
188121         "sbc	r7, r5\n\t"
188122 #endif
188123         "str	r6, [%[r], #8]\n\t"
188124         "str	r7, [%[r], #12]\n\t"
188125         "ldr	r6, [%[r], #16]\n\t"
188126         "ldr	r7, [%[r], #20]\n\t"
188127         "ldr	r4, [%[m], #16]\n\t"
188128         "ldr	r5, [%[m], #20]\n\t"
188129 #ifdef WOLFSSL_KEIL
188130         "ands	r4, r4, r3\n\t"
188131 #elif defined(__clang__)
188132         "ands	r4, r3\n\t"
188133 #else
188134         "and	r4, r3\n\t"
188135 #endif
188136 #ifdef WOLFSSL_KEIL
188137         "ands	r5, r5, r3\n\t"
188138 #elif defined(__clang__)
188139         "ands	r5, r3\n\t"
188140 #else
188141         "and	r5, r3\n\t"
188142 #endif
188143 #ifdef WOLFSSL_KEIL
188144         "sbcs	r6, r6, r4\n\t"
188145 #elif defined(__clang__)
188146         "sbcs	r6, r4\n\t"
188147 #else
188148         "sbc	r6, r4\n\t"
188149 #endif
188150 #ifdef WOLFSSL_KEIL
188151         "sbcs	r7, r7, r5\n\t"
188152 #elif defined(__clang__)
188153         "sbcs	r7, r5\n\t"
188154 #else
188155         "sbc	r7, r5\n\t"
188156 #endif
188157         "str	r6, [%[r], #16]\n\t"
188158         "str	r7, [%[r], #20]\n\t"
188159         "ldr	r6, [%[r], #24]\n\t"
188160         "ldr	r7, [%[r], #28]\n\t"
188161         "ldr	r4, [%[m], #24]\n\t"
188162         "ldr	r5, [%[m], #28]\n\t"
188163 #ifdef WOLFSSL_KEIL
188164         "ands	r4, r4, r3\n\t"
188165 #elif defined(__clang__)
188166         "ands	r4, r3\n\t"
188167 #else
188168         "and	r4, r3\n\t"
188169 #endif
188170 #ifdef WOLFSSL_KEIL
188171         "ands	r5, r5, r3\n\t"
188172 #elif defined(__clang__)
188173         "ands	r5, r3\n\t"
188174 #else
188175         "and	r5, r3\n\t"
188176 #endif
188177 #ifdef WOLFSSL_KEIL
188178         "sbcs	r6, r6, r4\n\t"
188179 #elif defined(__clang__)
188180         "sbcs	r6, r4\n\t"
188181 #else
188182         "sbc	r6, r4\n\t"
188183 #endif
188184 #ifdef WOLFSSL_KEIL
188185         "sbcs	r7, r7, r5\n\t"
188186 #elif defined(__clang__)
188187         "sbcs	r7, r5\n\t"
188188 #else
188189         "sbc	r7, r5\n\t"
188190 #endif
188191         "str	r6, [%[r], #24]\n\t"
188192         "str	r7, [%[r], #28]\n\t"
188193         "ldr	r6, [%[r], #32]\n\t"
188194         "ldr	r7, [%[r], #36]\n\t"
188195         "ldr	r4, [%[m], #32]\n\t"
188196         "ldr	r5, [%[m], #36]\n\t"
188197 #ifdef WOLFSSL_KEIL
188198         "ands	r4, r4, r3\n\t"
188199 #elif defined(__clang__)
188200         "ands	r4, r3\n\t"
188201 #else
188202         "and	r4, r3\n\t"
188203 #endif
188204 #ifdef WOLFSSL_KEIL
188205         "ands	r5, r5, r3\n\t"
188206 #elif defined(__clang__)
188207         "ands	r5, r3\n\t"
188208 #else
188209         "and	r5, r3\n\t"
188210 #endif
188211 #ifdef WOLFSSL_KEIL
188212         "sbcs	r6, r6, r4\n\t"
188213 #elif defined(__clang__)
188214         "sbcs	r6, r4\n\t"
188215 #else
188216         "sbc	r6, r4\n\t"
188217 #endif
188218 #ifdef WOLFSSL_KEIL
188219         "sbcs	r7, r7, r5\n\t"
188220 #elif defined(__clang__)
188221         "sbcs	r7, r5\n\t"
188222 #else
188223         "sbc	r7, r5\n\t"
188224 #endif
188225         "str	r6, [%[r], #32]\n\t"
188226         "str	r7, [%[r], #36]\n\t"
188227         "ldr	r6, [%[r], #40]\n\t"
188228         "ldr	r7, [%[r], #44]\n\t"
188229         "ldr	r4, [%[m], #40]\n\t"
188230         "ldr	r5, [%[m], #44]\n\t"
188231 #ifdef WOLFSSL_KEIL
188232         "ands	r4, r4, r3\n\t"
188233 #elif defined(__clang__)
188234         "ands	r4, r3\n\t"
188235 #else
188236         "and	r4, r3\n\t"
188237 #endif
188238 #ifdef WOLFSSL_KEIL
188239         "ands	r5, r5, r3\n\t"
188240 #elif defined(__clang__)
188241         "ands	r5, r3\n\t"
188242 #else
188243         "and	r5, r3\n\t"
188244 #endif
188245 #ifdef WOLFSSL_KEIL
188246         "sbcs	r6, r6, r4\n\t"
188247 #elif defined(__clang__)
188248         "sbcs	r6, r4\n\t"
188249 #else
188250         "sbc	r6, r4\n\t"
188251 #endif
188252 #ifdef WOLFSSL_KEIL
188253         "sbcs	r7, r7, r5\n\t"
188254 #elif defined(__clang__)
188255         "sbcs	r7, r5\n\t"
188256 #else
188257         "sbc	r7, r5\n\t"
188258 #endif
188259         "str	r6, [%[r], #40]\n\t"
188260         "str	r7, [%[r], #44]\n\t"
188261         "ldr	r6, [%[r], #48]\n\t"
188262         "ldr	r7, [%[r], #52]\n\t"
188263         "ldr	r4, [%[m], #48]\n\t"
188264         "ldr	r5, [%[m], #52]\n\t"
188265 #ifdef WOLFSSL_KEIL
188266         "ands	r4, r4, r3\n\t"
188267 #elif defined(__clang__)
188268         "ands	r4, r3\n\t"
188269 #else
188270         "and	r4, r3\n\t"
188271 #endif
188272 #ifdef WOLFSSL_KEIL
188273         "ands	r5, r5, r3\n\t"
188274 #elif defined(__clang__)
188275         "ands	r5, r3\n\t"
188276 #else
188277         "and	r5, r3\n\t"
188278 #endif
188279 #ifdef WOLFSSL_KEIL
188280         "sbcs	r6, r6, r4\n\t"
188281 #elif defined(__clang__)
188282         "sbcs	r6, r4\n\t"
188283 #else
188284         "sbc	r6, r4\n\t"
188285 #endif
188286 #ifdef WOLFSSL_KEIL
188287         "sbcs	r7, r7, r5\n\t"
188288 #elif defined(__clang__)
188289         "sbcs	r7, r5\n\t"
188290 #else
188291         "sbc	r7, r5\n\t"
188292 #endif
188293         "str	r6, [%[r], #48]\n\t"
188294         "str	r7, [%[r], #52]\n\t"
188295         "ldr	r6, [%[r], #56]\n\t"
188296         "ldr	r7, [%[r], #60]\n\t"
188297         "ldr	r4, [%[m], #56]\n\t"
188298         "ldr	r5, [%[m], #60]\n\t"
188299 #ifdef WOLFSSL_KEIL
188300         "ands	r4, r4, r3\n\t"
188301 #elif defined(__clang__)
188302         "ands	r4, r3\n\t"
188303 #else
188304         "and	r4, r3\n\t"
188305 #endif
188306 #ifdef WOLFSSL_KEIL
188307         "ands	r5, r5, r3\n\t"
188308 #elif defined(__clang__)
188309         "ands	r5, r3\n\t"
188310 #else
188311         "and	r5, r3\n\t"
188312 #endif
188313 #ifdef WOLFSSL_KEIL
188314         "sbcs	r6, r6, r4\n\t"
188315 #elif defined(__clang__)
188316         "sbcs	r6, r4\n\t"
188317 #else
188318         "sbc	r6, r4\n\t"
188319 #endif
188320 #ifdef WOLFSSL_KEIL
188321         "sbcs	r7, r7, r5\n\t"
188322 #elif defined(__clang__)
188323         "sbcs	r7, r5\n\t"
188324 #else
188325         "sbc	r7, r5\n\t"
188326 #endif
188327         "str	r6, [%[r], #56]\n\t"
188328         "str	r7, [%[r], #60]\n\t"
188329         "ldr	r6, [%[r], #64]\n\t"
188330         "ldr	r7, [%[r], #68]\n\t"
188331         "ldr	r4, [%[m], #64]\n\t"
188332         "ldr	r5, [%[m], #68]\n\t"
188333 #ifdef WOLFSSL_KEIL
188334         "ands	r4, r4, r3\n\t"
188335 #elif defined(__clang__)
188336         "ands	r4, r3\n\t"
188337 #else
188338         "and	r4, r3\n\t"
188339 #endif
188340 #ifdef WOLFSSL_KEIL
188341         "ands	r5, r5, r3\n\t"
188342 #elif defined(__clang__)
188343         "ands	r5, r3\n\t"
188344 #else
188345         "and	r5, r3\n\t"
188346 #endif
188347 #ifdef WOLFSSL_KEIL
188348         "sbcs	r6, r6, r4\n\t"
188349 #elif defined(__clang__)
188350         "sbcs	r6, r4\n\t"
188351 #else
188352         "sbc	r6, r4\n\t"
188353 #endif
188354 #ifdef WOLFSSL_KEIL
188355         "sbcs	r7, r7, r5\n\t"
188356 #elif defined(__clang__)
188357         "sbcs	r7, r5\n\t"
188358 #else
188359         "sbc	r7, r5\n\t"
188360 #endif
188361         "str	r6, [%[r], #64]\n\t"
188362         "str	r7, [%[r], #68]\n\t"
188363         "ldr	r6, [%[r], #72]\n\t"
188364         "ldr	r7, [%[r], #76]\n\t"
188365         "ldr	r4, [%[m], #72]\n\t"
188366         "ldr	r5, [%[m], #76]\n\t"
188367 #ifdef WOLFSSL_KEIL
188368         "ands	r4, r4, r3\n\t"
188369 #elif defined(__clang__)
188370         "ands	r4, r3\n\t"
188371 #else
188372         "and	r4, r3\n\t"
188373 #endif
188374 #ifdef WOLFSSL_KEIL
188375         "ands	r5, r5, r3\n\t"
188376 #elif defined(__clang__)
188377         "ands	r5, r3\n\t"
188378 #else
188379         "and	r5, r3\n\t"
188380 #endif
188381 #ifdef WOLFSSL_KEIL
188382         "sbcs	r6, r6, r4\n\t"
188383 #elif defined(__clang__)
188384         "sbcs	r6, r4\n\t"
188385 #else
188386         "sbc	r6, r4\n\t"
188387 #endif
188388 #ifdef WOLFSSL_KEIL
188389         "sbcs	r7, r7, r5\n\t"
188390 #elif defined(__clang__)
188391         "sbcs	r7, r5\n\t"
188392 #else
188393         "sbc	r7, r5\n\t"
188394 #endif
188395         "str	r6, [%[r], #72]\n\t"
188396         "str	r7, [%[r], #76]\n\t"
188397         "ldr	r6, [%[r], #80]\n\t"
188398         "ldr	r7, [%[r], #84]\n\t"
188399         "ldr	r4, [%[m], #80]\n\t"
188400         "ldr	r5, [%[m], #84]\n\t"
188401 #ifdef WOLFSSL_KEIL
188402         "ands	r4, r4, r3\n\t"
188403 #elif defined(__clang__)
188404         "ands	r4, r3\n\t"
188405 #else
188406         "and	r4, r3\n\t"
188407 #endif
188408 #ifdef WOLFSSL_KEIL
188409         "ands	r5, r5, r3\n\t"
188410 #elif defined(__clang__)
188411         "ands	r5, r3\n\t"
188412 #else
188413         "and	r5, r3\n\t"
188414 #endif
188415 #ifdef WOLFSSL_KEIL
188416         "sbcs	r6, r6, r4\n\t"
188417 #elif defined(__clang__)
188418         "sbcs	r6, r4\n\t"
188419 #else
188420         "sbc	r6, r4\n\t"
188421 #endif
188422 #ifdef WOLFSSL_KEIL
188423         "sbcs	r7, r7, r5\n\t"
188424 #elif defined(__clang__)
188425         "sbcs	r7, r5\n\t"
188426 #else
188427         "sbc	r7, r5\n\t"
188428 #endif
188429         "str	r6, [%[r], #80]\n\t"
188430         "str	r7, [%[r], #84]\n\t"
188431         "ldr	r6, [%[r], #88]\n\t"
188432         "ldr	r7, [%[r], #92]\n\t"
188433         "ldr	r4, [%[m], #88]\n\t"
188434         "ldr	r5, [%[m], #92]\n\t"
188435 #ifdef WOLFSSL_KEIL
188436         "ands	r4, r4, r3\n\t"
188437 #elif defined(__clang__)
188438         "ands	r4, r3\n\t"
188439 #else
188440         "and	r4, r3\n\t"
188441 #endif
188442 #ifdef WOLFSSL_KEIL
188443         "ands	r5, r5, r3\n\t"
188444 #elif defined(__clang__)
188445         "ands	r5, r3\n\t"
188446 #else
188447         "and	r5, r3\n\t"
188448 #endif
188449 #ifdef WOLFSSL_KEIL
188450         "sbcs	r6, r6, r4\n\t"
188451 #elif defined(__clang__)
188452         "sbcs	r6, r4\n\t"
188453 #else
188454         "sbc	r6, r4\n\t"
188455 #endif
188456 #ifdef WOLFSSL_KEIL
188457         "sbcs	r7, r7, r5\n\t"
188458 #elif defined(__clang__)
188459         "sbcs	r7, r5\n\t"
188460 #else
188461         "sbc	r7, r5\n\t"
188462 #endif
188463         "str	r6, [%[r], #88]\n\t"
188464         "str	r7, [%[r], #92]\n\t"
188465         "ldr	r6, [%[r], #96]\n\t"
188466         "ldr	r7, [%[r], #100]\n\t"
188467         "ldr	r4, [%[m], #96]\n\t"
188468         "ldr	r5, [%[m], #100]\n\t"
188469 #ifdef WOLFSSL_KEIL
188470         "ands	r4, r4, r3\n\t"
188471 #elif defined(__clang__)
188472         "ands	r4, r3\n\t"
188473 #else
188474         "and	r4, r3\n\t"
188475 #endif
188476 #ifdef WOLFSSL_KEIL
188477         "ands	r5, r5, r3\n\t"
188478 #elif defined(__clang__)
188479         "ands	r5, r3\n\t"
188480 #else
188481         "and	r5, r3\n\t"
188482 #endif
188483 #ifdef WOLFSSL_KEIL
188484         "sbcs	r6, r6, r4\n\t"
188485 #elif defined(__clang__)
188486         "sbcs	r6, r4\n\t"
188487 #else
188488         "sbc	r6, r4\n\t"
188489 #endif
188490 #ifdef WOLFSSL_KEIL
188491         "sbcs	r7, r7, r5\n\t"
188492 #elif defined(__clang__)
188493         "sbcs	r7, r5\n\t"
188494 #else
188495         "sbc	r7, r5\n\t"
188496 #endif
188497         "str	r6, [%[r], #96]\n\t"
188498         "str	r7, [%[r], #100]\n\t"
188499         "ldr	r6, [%[r], #104]\n\t"
188500         "ldr	r7, [%[r], #108]\n\t"
188501         "ldr	r4, [%[m], #104]\n\t"
188502         "ldr	r5, [%[m], #108]\n\t"
188503 #ifdef WOLFSSL_KEIL
188504         "ands	r4, r4, r3\n\t"
188505 #elif defined(__clang__)
188506         "ands	r4, r3\n\t"
188507 #else
188508         "and	r4, r3\n\t"
188509 #endif
188510 #ifdef WOLFSSL_KEIL
188511         "ands	r5, r5, r3\n\t"
188512 #elif defined(__clang__)
188513         "ands	r5, r3\n\t"
188514 #else
188515         "and	r5, r3\n\t"
188516 #endif
188517 #ifdef WOLFSSL_KEIL
188518         "sbcs	r6, r6, r4\n\t"
188519 #elif defined(__clang__)
188520         "sbcs	r6, r4\n\t"
188521 #else
188522         "sbc	r6, r4\n\t"
188523 #endif
188524 #ifdef WOLFSSL_KEIL
188525         "sbcs	r7, r7, r5\n\t"
188526 #elif defined(__clang__)
188527         "sbcs	r7, r5\n\t"
188528 #else
188529         "sbc	r7, r5\n\t"
188530 #endif
188531         "str	r6, [%[r], #104]\n\t"
188532         "str	r7, [%[r], #108]\n\t"
188533         "ldr	r6, [%[r], #112]\n\t"
188534         "ldr	r7, [%[r], #116]\n\t"
188535         "ldr	r4, [%[m], #112]\n\t"
188536         "ldr	r5, [%[m], #116]\n\t"
188537 #ifdef WOLFSSL_KEIL
188538         "ands	r4, r4, r3\n\t"
188539 #elif defined(__clang__)
188540         "ands	r4, r3\n\t"
188541 #else
188542         "and	r4, r3\n\t"
188543 #endif
188544 #ifdef WOLFSSL_KEIL
188545         "ands	r5, r5, r3\n\t"
188546 #elif defined(__clang__)
188547         "ands	r5, r3\n\t"
188548 #else
188549         "and	r5, r3\n\t"
188550 #endif
188551 #ifdef WOLFSSL_KEIL
188552         "sbcs	r6, r6, r4\n\t"
188553 #elif defined(__clang__)
188554         "sbcs	r6, r4\n\t"
188555 #else
188556         "sbc	r6, r4\n\t"
188557 #endif
188558 #ifdef WOLFSSL_KEIL
188559         "sbcs	r7, r7, r5\n\t"
188560 #elif defined(__clang__)
188561         "sbcs	r7, r5\n\t"
188562 #else
188563         "sbc	r7, r5\n\t"
188564 #endif
188565         "str	r6, [%[r], #112]\n\t"
188566         "str	r7, [%[r], #116]\n\t"
188567         "ldr	r6, [%[r], #120]\n\t"
188568         "ldr	r7, [%[r], #124]\n\t"
188569         "ldr	r4, [%[m], #120]\n\t"
188570         "ldr	r5, [%[m], #124]\n\t"
188571 #ifdef WOLFSSL_KEIL
188572         "ands	r4, r4, r3\n\t"
188573 #elif defined(__clang__)
188574         "ands	r4, r3\n\t"
188575 #else
188576         "and	r4, r3\n\t"
188577 #endif
188578 #ifdef WOLFSSL_KEIL
188579         "ands	r5, r5, r3\n\t"
188580 #elif defined(__clang__)
188581         "ands	r5, r3\n\t"
188582 #else
188583         "and	r5, r3\n\t"
188584 #endif
188585 #ifdef WOLFSSL_KEIL
188586         "sbcs	r6, r6, r4\n\t"
188587 #elif defined(__clang__)
188588         "sbcs	r6, r4\n\t"
188589 #else
188590         "sbc	r6, r4\n\t"
188591 #endif
188592 #ifdef WOLFSSL_KEIL
188593         "sbcs	r7, r7, r5\n\t"
188594 #elif defined(__clang__)
188595         "sbcs	r7, r5\n\t"
188596 #else
188597         "sbc	r7, r5\n\t"
188598 #endif
188599         "str	r6, [%[r], #120]\n\t"
188600         "str	r7, [%[r], #124]\n\t"
188601         : [r] "+r" (r), [a] "+r" (a), [m] "+r" (m)
188602         :
188603         : "memory", "r3", "r4", "r5", "r6", "r7"
188604     );
188605 }
188606 
188607 /* Subtract two Montgomery form numbers (r = a - b % m).
188608  *
188609  * r   Result of subtration.
188610  * a   Number to subtract from in Montgomery form.
188611  * b   Number to subtract with in Montgomery form.
188612  * m   Modulus (prime).
188613  */
sp_1024_mont_sub_32(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m)188614 SP_NOINLINE static void sp_1024_mont_sub_32(sp_digit* r, const sp_digit* a,
188615         const sp_digit* b, const sp_digit* m)
188616 {
188617     __asm__ __volatile__ (
188618         "ldr	r4, [%[a]]\n\t"
188619         "ldr	r5, [%[a], #4]\n\t"
188620         "ldr	r6, [%[b]]\n\t"
188621         "ldr	r7, [%[b], #4]\n\t"
188622 #if defined(__clang__) || defined(WOLFSSL_KEIL)
188623         "subs	r4, r4, r6\n\t"
188624 #else
188625         "sub	r4, r4, r6\n\t"
188626 #endif
188627 #ifdef WOLFSSL_KEIL
188628         "sbcs	r5, r5, r7\n\t"
188629 #elif defined(__clang__)
188630         "sbcs	r5, r7\n\t"
188631 #else
188632         "sbc	r5, r7\n\t"
188633 #endif
188634         "str	r4, [%[r]]\n\t"
188635         "str	r5, [%[r], #4]\n\t"
188636         "ldr	r4, [%[a], #8]\n\t"
188637         "ldr	r5, [%[a], #12]\n\t"
188638         "ldr	r6, [%[b], #8]\n\t"
188639         "ldr	r7, [%[b], #12]\n\t"
188640 #ifdef WOLFSSL_KEIL
188641         "sbcs	r4, r4, r6\n\t"
188642 #elif defined(__clang__)
188643         "sbcs	r4, r6\n\t"
188644 #else
188645         "sbc	r4, r6\n\t"
188646 #endif
188647 #ifdef WOLFSSL_KEIL
188648         "sbcs	r5, r5, r7\n\t"
188649 #elif defined(__clang__)
188650         "sbcs	r5, r7\n\t"
188651 #else
188652         "sbc	r5, r7\n\t"
188653 #endif
188654         "str	r4, [%[r], #8]\n\t"
188655         "str	r5, [%[r], #12]\n\t"
188656         "ldr	r4, [%[a], #16]\n\t"
188657         "ldr	r5, [%[a], #20]\n\t"
188658         "ldr	r6, [%[b], #16]\n\t"
188659         "ldr	r7, [%[b], #20]\n\t"
188660 #ifdef WOLFSSL_KEIL
188661         "sbcs	r4, r4, r6\n\t"
188662 #elif defined(__clang__)
188663         "sbcs	r4, r6\n\t"
188664 #else
188665         "sbc	r4, r6\n\t"
188666 #endif
188667 #ifdef WOLFSSL_KEIL
188668         "sbcs	r5, r5, r7\n\t"
188669 #elif defined(__clang__)
188670         "sbcs	r5, r7\n\t"
188671 #else
188672         "sbc	r5, r7\n\t"
188673 #endif
188674         "str	r4, [%[r], #16]\n\t"
188675         "str	r5, [%[r], #20]\n\t"
188676         "ldr	r4, [%[a], #24]\n\t"
188677         "ldr	r5, [%[a], #28]\n\t"
188678         "ldr	r6, [%[b], #24]\n\t"
188679         "ldr	r7, [%[b], #28]\n\t"
188680 #ifdef WOLFSSL_KEIL
188681         "sbcs	r4, r4, r6\n\t"
188682 #elif defined(__clang__)
188683         "sbcs	r4, r6\n\t"
188684 #else
188685         "sbc	r4, r6\n\t"
188686 #endif
188687 #ifdef WOLFSSL_KEIL
188688         "sbcs	r5, r5, r7\n\t"
188689 #elif defined(__clang__)
188690         "sbcs	r5, r7\n\t"
188691 #else
188692         "sbc	r5, r7\n\t"
188693 #endif
188694         "str	r4, [%[r], #24]\n\t"
188695         "str	r5, [%[r], #28]\n\t"
188696         "ldr	r4, [%[a], #32]\n\t"
188697         "ldr	r5, [%[a], #36]\n\t"
188698         "ldr	r6, [%[b], #32]\n\t"
188699         "ldr	r7, [%[b], #36]\n\t"
188700 #ifdef WOLFSSL_KEIL
188701         "sbcs	r4, r4, r6\n\t"
188702 #elif defined(__clang__)
188703         "sbcs	r4, r6\n\t"
188704 #else
188705         "sbc	r4, r6\n\t"
188706 #endif
188707 #ifdef WOLFSSL_KEIL
188708         "sbcs	r5, r5, r7\n\t"
188709 #elif defined(__clang__)
188710         "sbcs	r5, r7\n\t"
188711 #else
188712         "sbc	r5, r7\n\t"
188713 #endif
188714         "str	r4, [%[r], #32]\n\t"
188715         "str	r5, [%[r], #36]\n\t"
188716         "ldr	r4, [%[a], #40]\n\t"
188717         "ldr	r5, [%[a], #44]\n\t"
188718         "ldr	r6, [%[b], #40]\n\t"
188719         "ldr	r7, [%[b], #44]\n\t"
188720 #ifdef WOLFSSL_KEIL
188721         "sbcs	r4, r4, r6\n\t"
188722 #elif defined(__clang__)
188723         "sbcs	r4, r6\n\t"
188724 #else
188725         "sbc	r4, r6\n\t"
188726 #endif
188727 #ifdef WOLFSSL_KEIL
188728         "sbcs	r5, r5, r7\n\t"
188729 #elif defined(__clang__)
188730         "sbcs	r5, r7\n\t"
188731 #else
188732         "sbc	r5, r7\n\t"
188733 #endif
188734         "str	r4, [%[r], #40]\n\t"
188735         "str	r5, [%[r], #44]\n\t"
188736         "ldr	r4, [%[a], #48]\n\t"
188737         "ldr	r5, [%[a], #52]\n\t"
188738         "ldr	r6, [%[b], #48]\n\t"
188739         "ldr	r7, [%[b], #52]\n\t"
188740 #ifdef WOLFSSL_KEIL
188741         "sbcs	r4, r4, r6\n\t"
188742 #elif defined(__clang__)
188743         "sbcs	r4, r6\n\t"
188744 #else
188745         "sbc	r4, r6\n\t"
188746 #endif
188747 #ifdef WOLFSSL_KEIL
188748         "sbcs	r5, r5, r7\n\t"
188749 #elif defined(__clang__)
188750         "sbcs	r5, r7\n\t"
188751 #else
188752         "sbc	r5, r7\n\t"
188753 #endif
188754         "str	r4, [%[r], #48]\n\t"
188755         "str	r5, [%[r], #52]\n\t"
188756         "ldr	r4, [%[a], #56]\n\t"
188757         "ldr	r5, [%[a], #60]\n\t"
188758         "ldr	r6, [%[b], #56]\n\t"
188759         "ldr	r7, [%[b], #60]\n\t"
188760 #ifdef WOLFSSL_KEIL
188761         "sbcs	r4, r4, r6\n\t"
188762 #elif defined(__clang__)
188763         "sbcs	r4, r6\n\t"
188764 #else
188765         "sbc	r4, r6\n\t"
188766 #endif
188767 #ifdef WOLFSSL_KEIL
188768         "sbcs	r5, r5, r7\n\t"
188769 #elif defined(__clang__)
188770         "sbcs	r5, r7\n\t"
188771 #else
188772         "sbc	r5, r7\n\t"
188773 #endif
188774         "str	r4, [%[r], #56]\n\t"
188775         "str	r5, [%[r], #60]\n\t"
188776         "ldr	r4, [%[a], #64]\n\t"
188777         "ldr	r5, [%[a], #68]\n\t"
188778         "ldr	r6, [%[b], #64]\n\t"
188779         "ldr	r7, [%[b], #68]\n\t"
188780 #ifdef WOLFSSL_KEIL
188781         "sbcs	r4, r4, r6\n\t"
188782 #elif defined(__clang__)
188783         "sbcs	r4, r6\n\t"
188784 #else
188785         "sbc	r4, r6\n\t"
188786 #endif
188787 #ifdef WOLFSSL_KEIL
188788         "sbcs	r5, r5, r7\n\t"
188789 #elif defined(__clang__)
188790         "sbcs	r5, r7\n\t"
188791 #else
188792         "sbc	r5, r7\n\t"
188793 #endif
188794         "str	r4, [%[r], #64]\n\t"
188795         "str	r5, [%[r], #68]\n\t"
188796         "ldr	r4, [%[a], #72]\n\t"
188797         "ldr	r5, [%[a], #76]\n\t"
188798         "ldr	r6, [%[b], #72]\n\t"
188799         "ldr	r7, [%[b], #76]\n\t"
188800 #ifdef WOLFSSL_KEIL
188801         "sbcs	r4, r4, r6\n\t"
188802 #elif defined(__clang__)
188803         "sbcs	r4, r6\n\t"
188804 #else
188805         "sbc	r4, r6\n\t"
188806 #endif
188807 #ifdef WOLFSSL_KEIL
188808         "sbcs	r5, r5, r7\n\t"
188809 #elif defined(__clang__)
188810         "sbcs	r5, r7\n\t"
188811 #else
188812         "sbc	r5, r7\n\t"
188813 #endif
188814         "str	r4, [%[r], #72]\n\t"
188815         "str	r5, [%[r], #76]\n\t"
188816         "ldr	r4, [%[a], #80]\n\t"
188817         "ldr	r5, [%[a], #84]\n\t"
188818         "ldr	r6, [%[b], #80]\n\t"
188819         "ldr	r7, [%[b], #84]\n\t"
188820 #ifdef WOLFSSL_KEIL
188821         "sbcs	r4, r4, r6\n\t"
188822 #elif defined(__clang__)
188823         "sbcs	r4, r6\n\t"
188824 #else
188825         "sbc	r4, r6\n\t"
188826 #endif
188827 #ifdef WOLFSSL_KEIL
188828         "sbcs	r5, r5, r7\n\t"
188829 #elif defined(__clang__)
188830         "sbcs	r5, r7\n\t"
188831 #else
188832         "sbc	r5, r7\n\t"
188833 #endif
188834         "str	r4, [%[r], #80]\n\t"
188835         "str	r5, [%[r], #84]\n\t"
188836         "ldr	r4, [%[a], #88]\n\t"
188837         "ldr	r5, [%[a], #92]\n\t"
188838         "ldr	r6, [%[b], #88]\n\t"
188839         "ldr	r7, [%[b], #92]\n\t"
188840 #ifdef WOLFSSL_KEIL
188841         "sbcs	r4, r4, r6\n\t"
188842 #elif defined(__clang__)
188843         "sbcs	r4, r6\n\t"
188844 #else
188845         "sbc	r4, r6\n\t"
188846 #endif
188847 #ifdef WOLFSSL_KEIL
188848         "sbcs	r5, r5, r7\n\t"
188849 #elif defined(__clang__)
188850         "sbcs	r5, r7\n\t"
188851 #else
188852         "sbc	r5, r7\n\t"
188853 #endif
188854         "str	r4, [%[r], #88]\n\t"
188855         "str	r5, [%[r], #92]\n\t"
188856         "ldr	r4, [%[a], #96]\n\t"
188857         "ldr	r5, [%[a], #100]\n\t"
188858         "ldr	r6, [%[b], #96]\n\t"
188859         "ldr	r7, [%[b], #100]\n\t"
188860 #ifdef WOLFSSL_KEIL
188861         "sbcs	r4, r4, r6\n\t"
188862 #elif defined(__clang__)
188863         "sbcs	r4, r6\n\t"
188864 #else
188865         "sbc	r4, r6\n\t"
188866 #endif
188867 #ifdef WOLFSSL_KEIL
188868         "sbcs	r5, r5, r7\n\t"
188869 #elif defined(__clang__)
188870         "sbcs	r5, r7\n\t"
188871 #else
188872         "sbc	r5, r7\n\t"
188873 #endif
188874         "str	r4, [%[r], #96]\n\t"
188875         "str	r5, [%[r], #100]\n\t"
188876         "ldr	r4, [%[a], #104]\n\t"
188877         "ldr	r5, [%[a], #108]\n\t"
188878         "ldr	r6, [%[b], #104]\n\t"
188879         "ldr	r7, [%[b], #108]\n\t"
188880 #ifdef WOLFSSL_KEIL
188881         "sbcs	r4, r4, r6\n\t"
188882 #elif defined(__clang__)
188883         "sbcs	r4, r6\n\t"
188884 #else
188885         "sbc	r4, r6\n\t"
188886 #endif
188887 #ifdef WOLFSSL_KEIL
188888         "sbcs	r5, r5, r7\n\t"
188889 #elif defined(__clang__)
188890         "sbcs	r5, r7\n\t"
188891 #else
188892         "sbc	r5, r7\n\t"
188893 #endif
188894         "str	r4, [%[r], #104]\n\t"
188895         "str	r5, [%[r], #108]\n\t"
188896         "ldr	r4, [%[a], #112]\n\t"
188897         "ldr	r5, [%[a], #116]\n\t"
188898         "ldr	r6, [%[b], #112]\n\t"
188899         "ldr	r7, [%[b], #116]\n\t"
188900 #ifdef WOLFSSL_KEIL
188901         "sbcs	r4, r4, r6\n\t"
188902 #elif defined(__clang__)
188903         "sbcs	r4, r6\n\t"
188904 #else
188905         "sbc	r4, r6\n\t"
188906 #endif
188907 #ifdef WOLFSSL_KEIL
188908         "sbcs	r5, r5, r7\n\t"
188909 #elif defined(__clang__)
188910         "sbcs	r5, r7\n\t"
188911 #else
188912         "sbc	r5, r7\n\t"
188913 #endif
188914         "str	r4, [%[r], #112]\n\t"
188915         "str	r5, [%[r], #116]\n\t"
188916         "ldr	r4, [%[a], #120]\n\t"
188917         "ldr	r5, [%[a], #124]\n\t"
188918         "ldr	r6, [%[b], #120]\n\t"
188919         "ldr	r7, [%[b], #124]\n\t"
188920 #ifdef WOLFSSL_KEIL
188921         "sbcs	r4, r4, r6\n\t"
188922 #elif defined(__clang__)
188923         "sbcs	r4, r6\n\t"
188924 #else
188925         "sbc	r4, r6\n\t"
188926 #endif
188927 #ifdef WOLFSSL_KEIL
188928         "sbcs	r5, r5, r7\n\t"
188929 #elif defined(__clang__)
188930         "sbcs	r5, r7\n\t"
188931 #else
188932         "sbc	r5, r7\n\t"
188933 #endif
188934         "str	r4, [%[r], #120]\n\t"
188935         "str	r5, [%[r], #124]\n\t"
188936 #ifdef WOLFSSL_KEIL
188937         "sbcs	%[b], %[b], %[b]\n\t"
188938 #elif defined(__clang__)
188939         "sbcs	%[b], %[b]\n\t"
188940 #else
188941         "sbc	%[b], %[b]\n\t"
188942 #endif
188943         "ldr	r4, [%[r]]\n\t"
188944         "ldr	r5, [%[r], #4]\n\t"
188945         "ldr	r6, [%[m]]\n\t"
188946         "ldr	r7, [%[m], #4]\n\t"
188947 #ifdef WOLFSSL_KEIL
188948         "ands	r6, r6, %[b]\n\t"
188949 #elif defined(__clang__)
188950         "ands	r6, %[b]\n\t"
188951 #else
188952         "and	r6, %[b]\n\t"
188953 #endif
188954 #ifdef WOLFSSL_KEIL
188955         "ands	r7, r7, %[b]\n\t"
188956 #elif defined(__clang__)
188957         "ands	r7, %[b]\n\t"
188958 #else
188959         "and	r7, %[b]\n\t"
188960 #endif
188961 #if defined(__clang__) || defined(WOLFSSL_KEIL)
188962         "adds	r4, r4, r6\n\t"
188963 #else
188964         "add	r4, r4, r6\n\t"
188965 #endif
188966 #ifdef WOLFSSL_KEIL
188967         "adcs	r5, r5, r7\n\t"
188968 #elif defined(__clang__)
188969         "adcs	r5, r7\n\t"
188970 #else
188971         "adc	r5, r7\n\t"
188972 #endif
188973         "str	r4, [%[r]]\n\t"
188974         "str	r5, [%[r], #4]\n\t"
188975         "ldr	r4, [%[r], #8]\n\t"
188976         "ldr	r5, [%[r], #12]\n\t"
188977         "ldr	r6, [%[m], #8]\n\t"
188978         "ldr	r7, [%[m], #12]\n\t"
188979 #ifdef WOLFSSL_KEIL
188980         "ands	r6, r6, %[b]\n\t"
188981 #elif defined(__clang__)
188982         "ands	r6, %[b]\n\t"
188983 #else
188984         "and	r6, %[b]\n\t"
188985 #endif
188986 #ifdef WOLFSSL_KEIL
188987         "ands	r7, r7, %[b]\n\t"
188988 #elif defined(__clang__)
188989         "ands	r7, %[b]\n\t"
188990 #else
188991         "and	r7, %[b]\n\t"
188992 #endif
188993 #ifdef WOLFSSL_KEIL
188994         "adcs	r4, r4, r6\n\t"
188995 #elif defined(__clang__)
188996         "adcs	r4, r6\n\t"
188997 #else
188998         "adc	r4, r6\n\t"
188999 #endif
189000 #ifdef WOLFSSL_KEIL
189001         "adcs	r5, r5, r7\n\t"
189002 #elif defined(__clang__)
189003         "adcs	r5, r7\n\t"
189004 #else
189005         "adc	r5, r7\n\t"
189006 #endif
189007         "str	r4, [%[r], #8]\n\t"
189008         "str	r5, [%[r], #12]\n\t"
189009         "ldr	r4, [%[r], #16]\n\t"
189010         "ldr	r5, [%[r], #20]\n\t"
189011         "ldr	r6, [%[m], #16]\n\t"
189012         "ldr	r7, [%[m], #20]\n\t"
189013 #ifdef WOLFSSL_KEIL
189014         "ands	r6, r6, %[b]\n\t"
189015 #elif defined(__clang__)
189016         "ands	r6, %[b]\n\t"
189017 #else
189018         "and	r6, %[b]\n\t"
189019 #endif
189020 #ifdef WOLFSSL_KEIL
189021         "ands	r7, r7, %[b]\n\t"
189022 #elif defined(__clang__)
189023         "ands	r7, %[b]\n\t"
189024 #else
189025         "and	r7, %[b]\n\t"
189026 #endif
189027 #ifdef WOLFSSL_KEIL
189028         "adcs	r4, r4, r6\n\t"
189029 #elif defined(__clang__)
189030         "adcs	r4, r6\n\t"
189031 #else
189032         "adc	r4, r6\n\t"
189033 #endif
189034 #ifdef WOLFSSL_KEIL
189035         "adcs	r5, r5, r7\n\t"
189036 #elif defined(__clang__)
189037         "adcs	r5, r7\n\t"
189038 #else
189039         "adc	r5, r7\n\t"
189040 #endif
189041         "str	r4, [%[r], #16]\n\t"
189042         "str	r5, [%[r], #20]\n\t"
189043         "ldr	r4, [%[r], #24]\n\t"
189044         "ldr	r5, [%[r], #28]\n\t"
189045         "ldr	r6, [%[m], #24]\n\t"
189046         "ldr	r7, [%[m], #28]\n\t"
189047 #ifdef WOLFSSL_KEIL
189048         "ands	r6, r6, %[b]\n\t"
189049 #elif defined(__clang__)
189050         "ands	r6, %[b]\n\t"
189051 #else
189052         "and	r6, %[b]\n\t"
189053 #endif
189054 #ifdef WOLFSSL_KEIL
189055         "ands	r7, r7, %[b]\n\t"
189056 #elif defined(__clang__)
189057         "ands	r7, %[b]\n\t"
189058 #else
189059         "and	r7, %[b]\n\t"
189060 #endif
189061 #ifdef WOLFSSL_KEIL
189062         "adcs	r4, r4, r6\n\t"
189063 #elif defined(__clang__)
189064         "adcs	r4, r6\n\t"
189065 #else
189066         "adc	r4, r6\n\t"
189067 #endif
189068 #ifdef WOLFSSL_KEIL
189069         "adcs	r5, r5, r7\n\t"
189070 #elif defined(__clang__)
189071         "adcs	r5, r7\n\t"
189072 #else
189073         "adc	r5, r7\n\t"
189074 #endif
189075         "str	r4, [%[r], #24]\n\t"
189076         "str	r5, [%[r], #28]\n\t"
189077         "ldr	r4, [%[r], #32]\n\t"
189078         "ldr	r5, [%[r], #36]\n\t"
189079         "ldr	r6, [%[m], #32]\n\t"
189080         "ldr	r7, [%[m], #36]\n\t"
189081 #ifdef WOLFSSL_KEIL
189082         "ands	r6, r6, %[b]\n\t"
189083 #elif defined(__clang__)
189084         "ands	r6, %[b]\n\t"
189085 #else
189086         "and	r6, %[b]\n\t"
189087 #endif
189088 #ifdef WOLFSSL_KEIL
189089         "ands	r7, r7, %[b]\n\t"
189090 #elif defined(__clang__)
189091         "ands	r7, %[b]\n\t"
189092 #else
189093         "and	r7, %[b]\n\t"
189094 #endif
189095 #ifdef WOLFSSL_KEIL
189096         "adcs	r4, r4, r6\n\t"
189097 #elif defined(__clang__)
189098         "adcs	r4, r6\n\t"
189099 #else
189100         "adc	r4, r6\n\t"
189101 #endif
189102 #ifdef WOLFSSL_KEIL
189103         "adcs	r5, r5, r7\n\t"
189104 #elif defined(__clang__)
189105         "adcs	r5, r7\n\t"
189106 #else
189107         "adc	r5, r7\n\t"
189108 #endif
189109         "str	r4, [%[r], #32]\n\t"
189110         "str	r5, [%[r], #36]\n\t"
189111         "ldr	r4, [%[r], #40]\n\t"
189112         "ldr	r5, [%[r], #44]\n\t"
189113         "ldr	r6, [%[m], #40]\n\t"
189114         "ldr	r7, [%[m], #44]\n\t"
189115 #ifdef WOLFSSL_KEIL
189116         "ands	r6, r6, %[b]\n\t"
189117 #elif defined(__clang__)
189118         "ands	r6, %[b]\n\t"
189119 #else
189120         "and	r6, %[b]\n\t"
189121 #endif
189122 #ifdef WOLFSSL_KEIL
189123         "ands	r7, r7, %[b]\n\t"
189124 #elif defined(__clang__)
189125         "ands	r7, %[b]\n\t"
189126 #else
189127         "and	r7, %[b]\n\t"
189128 #endif
189129 #ifdef WOLFSSL_KEIL
189130         "adcs	r4, r4, r6\n\t"
189131 #elif defined(__clang__)
189132         "adcs	r4, r6\n\t"
189133 #else
189134         "adc	r4, r6\n\t"
189135 #endif
189136 #ifdef WOLFSSL_KEIL
189137         "adcs	r5, r5, r7\n\t"
189138 #elif defined(__clang__)
189139         "adcs	r5, r7\n\t"
189140 #else
189141         "adc	r5, r7\n\t"
189142 #endif
189143         "str	r4, [%[r], #40]\n\t"
189144         "str	r5, [%[r], #44]\n\t"
189145         "ldr	r4, [%[r], #48]\n\t"
189146         "ldr	r5, [%[r], #52]\n\t"
189147         "ldr	r6, [%[m], #48]\n\t"
189148         "ldr	r7, [%[m], #52]\n\t"
189149 #ifdef WOLFSSL_KEIL
189150         "ands	r6, r6, %[b]\n\t"
189151 #elif defined(__clang__)
189152         "ands	r6, %[b]\n\t"
189153 #else
189154         "and	r6, %[b]\n\t"
189155 #endif
189156 #ifdef WOLFSSL_KEIL
189157         "ands	r7, r7, %[b]\n\t"
189158 #elif defined(__clang__)
189159         "ands	r7, %[b]\n\t"
189160 #else
189161         "and	r7, %[b]\n\t"
189162 #endif
189163 #ifdef WOLFSSL_KEIL
189164         "adcs	r4, r4, r6\n\t"
189165 #elif defined(__clang__)
189166         "adcs	r4, r6\n\t"
189167 #else
189168         "adc	r4, r6\n\t"
189169 #endif
189170 #ifdef WOLFSSL_KEIL
189171         "adcs	r5, r5, r7\n\t"
189172 #elif defined(__clang__)
189173         "adcs	r5, r7\n\t"
189174 #else
189175         "adc	r5, r7\n\t"
189176 #endif
189177         "str	r4, [%[r], #48]\n\t"
189178         "str	r5, [%[r], #52]\n\t"
189179         "ldr	r4, [%[r], #56]\n\t"
189180         "ldr	r5, [%[r], #60]\n\t"
189181         "ldr	r6, [%[m], #56]\n\t"
189182         "ldr	r7, [%[m], #60]\n\t"
189183 #ifdef WOLFSSL_KEIL
189184         "ands	r6, r6, %[b]\n\t"
189185 #elif defined(__clang__)
189186         "ands	r6, %[b]\n\t"
189187 #else
189188         "and	r6, %[b]\n\t"
189189 #endif
189190 #ifdef WOLFSSL_KEIL
189191         "ands	r7, r7, %[b]\n\t"
189192 #elif defined(__clang__)
189193         "ands	r7, %[b]\n\t"
189194 #else
189195         "and	r7, %[b]\n\t"
189196 #endif
189197 #ifdef WOLFSSL_KEIL
189198         "adcs	r4, r4, r6\n\t"
189199 #elif defined(__clang__)
189200         "adcs	r4, r6\n\t"
189201 #else
189202         "adc	r4, r6\n\t"
189203 #endif
189204 #ifdef WOLFSSL_KEIL
189205         "adcs	r5, r5, r7\n\t"
189206 #elif defined(__clang__)
189207         "adcs	r5, r7\n\t"
189208 #else
189209         "adc	r5, r7\n\t"
189210 #endif
189211         "str	r4, [%[r], #56]\n\t"
189212         "str	r5, [%[r], #60]\n\t"
189213         "ldr	r4, [%[r], #64]\n\t"
189214         "ldr	r5, [%[r], #68]\n\t"
189215         "ldr	r6, [%[m], #64]\n\t"
189216         "ldr	r7, [%[m], #68]\n\t"
189217 #ifdef WOLFSSL_KEIL
189218         "ands	r6, r6, %[b]\n\t"
189219 #elif defined(__clang__)
189220         "ands	r6, %[b]\n\t"
189221 #else
189222         "and	r6, %[b]\n\t"
189223 #endif
189224 #ifdef WOLFSSL_KEIL
189225         "ands	r7, r7, %[b]\n\t"
189226 #elif defined(__clang__)
189227         "ands	r7, %[b]\n\t"
189228 #else
189229         "and	r7, %[b]\n\t"
189230 #endif
189231 #ifdef WOLFSSL_KEIL
189232         "adcs	r4, r4, r6\n\t"
189233 #elif defined(__clang__)
189234         "adcs	r4, r6\n\t"
189235 #else
189236         "adc	r4, r6\n\t"
189237 #endif
189238 #ifdef WOLFSSL_KEIL
189239         "adcs	r5, r5, r7\n\t"
189240 #elif defined(__clang__)
189241         "adcs	r5, r7\n\t"
189242 #else
189243         "adc	r5, r7\n\t"
189244 #endif
189245         "str	r4, [%[r], #64]\n\t"
189246         "str	r5, [%[r], #68]\n\t"
189247         "ldr	r4, [%[r], #72]\n\t"
189248         "ldr	r5, [%[r], #76]\n\t"
189249         "ldr	r6, [%[m], #72]\n\t"
189250         "ldr	r7, [%[m], #76]\n\t"
189251 #ifdef WOLFSSL_KEIL
189252         "ands	r6, r6, %[b]\n\t"
189253 #elif defined(__clang__)
189254         "ands	r6, %[b]\n\t"
189255 #else
189256         "and	r6, %[b]\n\t"
189257 #endif
189258 #ifdef WOLFSSL_KEIL
189259         "ands	r7, r7, %[b]\n\t"
189260 #elif defined(__clang__)
189261         "ands	r7, %[b]\n\t"
189262 #else
189263         "and	r7, %[b]\n\t"
189264 #endif
189265 #ifdef WOLFSSL_KEIL
189266         "adcs	r4, r4, r6\n\t"
189267 #elif defined(__clang__)
189268         "adcs	r4, r6\n\t"
189269 #else
189270         "adc	r4, r6\n\t"
189271 #endif
189272 #ifdef WOLFSSL_KEIL
189273         "adcs	r5, r5, r7\n\t"
189274 #elif defined(__clang__)
189275         "adcs	r5, r7\n\t"
189276 #else
189277         "adc	r5, r7\n\t"
189278 #endif
189279         "str	r4, [%[r], #72]\n\t"
189280         "str	r5, [%[r], #76]\n\t"
189281         "ldr	r4, [%[r], #80]\n\t"
189282         "ldr	r5, [%[r], #84]\n\t"
189283         "ldr	r6, [%[m], #80]\n\t"
189284         "ldr	r7, [%[m], #84]\n\t"
189285 #ifdef WOLFSSL_KEIL
189286         "ands	r6, r6, %[b]\n\t"
189287 #elif defined(__clang__)
189288         "ands	r6, %[b]\n\t"
189289 #else
189290         "and	r6, %[b]\n\t"
189291 #endif
189292 #ifdef WOLFSSL_KEIL
189293         "ands	r7, r7, %[b]\n\t"
189294 #elif defined(__clang__)
189295         "ands	r7, %[b]\n\t"
189296 #else
189297         "and	r7, %[b]\n\t"
189298 #endif
189299 #ifdef WOLFSSL_KEIL
189300         "adcs	r4, r4, r6\n\t"
189301 #elif defined(__clang__)
189302         "adcs	r4, r6\n\t"
189303 #else
189304         "adc	r4, r6\n\t"
189305 #endif
189306 #ifdef WOLFSSL_KEIL
189307         "adcs	r5, r5, r7\n\t"
189308 #elif defined(__clang__)
189309         "adcs	r5, r7\n\t"
189310 #else
189311         "adc	r5, r7\n\t"
189312 #endif
189313         "str	r4, [%[r], #80]\n\t"
189314         "str	r5, [%[r], #84]\n\t"
189315         "ldr	r4, [%[r], #88]\n\t"
189316         "ldr	r5, [%[r], #92]\n\t"
189317         "ldr	r6, [%[m], #88]\n\t"
189318         "ldr	r7, [%[m], #92]\n\t"
189319 #ifdef WOLFSSL_KEIL
189320         "ands	r6, r6, %[b]\n\t"
189321 #elif defined(__clang__)
189322         "ands	r6, %[b]\n\t"
189323 #else
189324         "and	r6, %[b]\n\t"
189325 #endif
189326 #ifdef WOLFSSL_KEIL
189327         "ands	r7, r7, %[b]\n\t"
189328 #elif defined(__clang__)
189329         "ands	r7, %[b]\n\t"
189330 #else
189331         "and	r7, %[b]\n\t"
189332 #endif
189333 #ifdef WOLFSSL_KEIL
189334         "adcs	r4, r4, r6\n\t"
189335 #elif defined(__clang__)
189336         "adcs	r4, r6\n\t"
189337 #else
189338         "adc	r4, r6\n\t"
189339 #endif
189340 #ifdef WOLFSSL_KEIL
189341         "adcs	r5, r5, r7\n\t"
189342 #elif defined(__clang__)
189343         "adcs	r5, r7\n\t"
189344 #else
189345         "adc	r5, r7\n\t"
189346 #endif
189347         "str	r4, [%[r], #88]\n\t"
189348         "str	r5, [%[r], #92]\n\t"
189349         "ldr	r4, [%[r], #96]\n\t"
189350         "ldr	r5, [%[r], #100]\n\t"
189351         "ldr	r6, [%[m], #96]\n\t"
189352         "ldr	r7, [%[m], #100]\n\t"
189353 #ifdef WOLFSSL_KEIL
189354         "ands	r6, r6, %[b]\n\t"
189355 #elif defined(__clang__)
189356         "ands	r6, %[b]\n\t"
189357 #else
189358         "and	r6, %[b]\n\t"
189359 #endif
189360 #ifdef WOLFSSL_KEIL
189361         "ands	r7, r7, %[b]\n\t"
189362 #elif defined(__clang__)
189363         "ands	r7, %[b]\n\t"
189364 #else
189365         "and	r7, %[b]\n\t"
189366 #endif
189367 #ifdef WOLFSSL_KEIL
189368         "adcs	r4, r4, r6\n\t"
189369 #elif defined(__clang__)
189370         "adcs	r4, r6\n\t"
189371 #else
189372         "adc	r4, r6\n\t"
189373 #endif
189374 #ifdef WOLFSSL_KEIL
189375         "adcs	r5, r5, r7\n\t"
189376 #elif defined(__clang__)
189377         "adcs	r5, r7\n\t"
189378 #else
189379         "adc	r5, r7\n\t"
189380 #endif
189381         "str	r4, [%[r], #96]\n\t"
189382         "str	r5, [%[r], #100]\n\t"
189383         "ldr	r4, [%[r], #104]\n\t"
189384         "ldr	r5, [%[r], #108]\n\t"
189385         "ldr	r6, [%[m], #104]\n\t"
189386         "ldr	r7, [%[m], #108]\n\t"
189387 #ifdef WOLFSSL_KEIL
189388         "ands	r6, r6, %[b]\n\t"
189389 #elif defined(__clang__)
189390         "ands	r6, %[b]\n\t"
189391 #else
189392         "and	r6, %[b]\n\t"
189393 #endif
189394 #ifdef WOLFSSL_KEIL
189395         "ands	r7, r7, %[b]\n\t"
189396 #elif defined(__clang__)
189397         "ands	r7, %[b]\n\t"
189398 #else
189399         "and	r7, %[b]\n\t"
189400 #endif
189401 #ifdef WOLFSSL_KEIL
189402         "adcs	r4, r4, r6\n\t"
189403 #elif defined(__clang__)
189404         "adcs	r4, r6\n\t"
189405 #else
189406         "adc	r4, r6\n\t"
189407 #endif
189408 #ifdef WOLFSSL_KEIL
189409         "adcs	r5, r5, r7\n\t"
189410 #elif defined(__clang__)
189411         "adcs	r5, r7\n\t"
189412 #else
189413         "adc	r5, r7\n\t"
189414 #endif
189415         "str	r4, [%[r], #104]\n\t"
189416         "str	r5, [%[r], #108]\n\t"
189417         "ldr	r4, [%[r], #112]\n\t"
189418         "ldr	r5, [%[r], #116]\n\t"
189419         "ldr	r6, [%[m], #112]\n\t"
189420         "ldr	r7, [%[m], #116]\n\t"
189421 #ifdef WOLFSSL_KEIL
189422         "ands	r6, r6, %[b]\n\t"
189423 #elif defined(__clang__)
189424         "ands	r6, %[b]\n\t"
189425 #else
189426         "and	r6, %[b]\n\t"
189427 #endif
189428 #ifdef WOLFSSL_KEIL
189429         "ands	r7, r7, %[b]\n\t"
189430 #elif defined(__clang__)
189431         "ands	r7, %[b]\n\t"
189432 #else
189433         "and	r7, %[b]\n\t"
189434 #endif
189435 #ifdef WOLFSSL_KEIL
189436         "adcs	r4, r4, r6\n\t"
189437 #elif defined(__clang__)
189438         "adcs	r4, r6\n\t"
189439 #else
189440         "adc	r4, r6\n\t"
189441 #endif
189442 #ifdef WOLFSSL_KEIL
189443         "adcs	r5, r5, r7\n\t"
189444 #elif defined(__clang__)
189445         "adcs	r5, r7\n\t"
189446 #else
189447         "adc	r5, r7\n\t"
189448 #endif
189449         "str	r4, [%[r], #112]\n\t"
189450         "str	r5, [%[r], #116]\n\t"
189451         "ldr	r4, [%[r], #120]\n\t"
189452         "ldr	r5, [%[r], #124]\n\t"
189453         "ldr	r6, [%[m], #120]\n\t"
189454         "ldr	r7, [%[m], #124]\n\t"
189455 #ifdef WOLFSSL_KEIL
189456         "ands	r6, r6, %[b]\n\t"
189457 #elif defined(__clang__)
189458         "ands	r6, %[b]\n\t"
189459 #else
189460         "and	r6, %[b]\n\t"
189461 #endif
189462 #ifdef WOLFSSL_KEIL
189463         "ands	r7, r7, %[b]\n\t"
189464 #elif defined(__clang__)
189465         "ands	r7, %[b]\n\t"
189466 #else
189467         "and	r7, %[b]\n\t"
189468 #endif
189469 #ifdef WOLFSSL_KEIL
189470         "adcs	r4, r4, r6\n\t"
189471 #elif defined(__clang__)
189472         "adcs	r4, r6\n\t"
189473 #else
189474         "adc	r4, r6\n\t"
189475 #endif
189476 #ifdef WOLFSSL_KEIL
189477         "adcs	r5, r5, r7\n\t"
189478 #elif defined(__clang__)
189479         "adcs	r5, r7\n\t"
189480 #else
189481         "adc	r5, r7\n\t"
189482 #endif
189483         "str	r4, [%[r], #120]\n\t"
189484         "str	r5, [%[r], #124]\n\t"
189485         "movs	r6, #0\n\t"
189486 #ifdef WOLFSSL_KEIL
189487         "adcs	%[b], %[b], r6\n\t"
189488 #elif defined(__clang__)
189489         "adcs	%[b], r6\n\t"
189490 #else
189491         "adc	%[b], r6\n\t"
189492 #endif
189493         "ldr	r4, [%[r]]\n\t"
189494         "ldr	r5, [%[r], #4]\n\t"
189495         "ldr	r6, [%[m]]\n\t"
189496         "ldr	r7, [%[m], #4]\n\t"
189497 #ifdef WOLFSSL_KEIL
189498         "ands	r6, r6, %[b]\n\t"
189499 #elif defined(__clang__)
189500         "ands	r6, %[b]\n\t"
189501 #else
189502         "and	r6, %[b]\n\t"
189503 #endif
189504 #ifdef WOLFSSL_KEIL
189505         "ands	r7, r7, %[b]\n\t"
189506 #elif defined(__clang__)
189507         "ands	r7, %[b]\n\t"
189508 #else
189509         "and	r7, %[b]\n\t"
189510 #endif
189511 #if defined(__clang__) || defined(WOLFSSL_KEIL)
189512         "adds	r4, r4, r6\n\t"
189513 #else
189514         "add	r4, r4, r6\n\t"
189515 #endif
189516 #ifdef WOLFSSL_KEIL
189517         "adcs	r5, r5, r7\n\t"
189518 #elif defined(__clang__)
189519         "adcs	r5, r7\n\t"
189520 #else
189521         "adc	r5, r7\n\t"
189522 #endif
189523         "str	r4, [%[r]]\n\t"
189524         "str	r5, [%[r], #4]\n\t"
189525         "ldr	r4, [%[r], #8]\n\t"
189526         "ldr	r5, [%[r], #12]\n\t"
189527         "ldr	r6, [%[m], #8]\n\t"
189528         "ldr	r7, [%[m], #12]\n\t"
189529 #ifdef WOLFSSL_KEIL
189530         "ands	r6, r6, %[b]\n\t"
189531 #elif defined(__clang__)
189532         "ands	r6, %[b]\n\t"
189533 #else
189534         "and	r6, %[b]\n\t"
189535 #endif
189536 #ifdef WOLFSSL_KEIL
189537         "ands	r7, r7, %[b]\n\t"
189538 #elif defined(__clang__)
189539         "ands	r7, %[b]\n\t"
189540 #else
189541         "and	r7, %[b]\n\t"
189542 #endif
189543 #ifdef WOLFSSL_KEIL
189544         "adcs	r4, r4, r6\n\t"
189545 #elif defined(__clang__)
189546         "adcs	r4, r6\n\t"
189547 #else
189548         "adc	r4, r6\n\t"
189549 #endif
189550 #ifdef WOLFSSL_KEIL
189551         "adcs	r5, r5, r7\n\t"
189552 #elif defined(__clang__)
189553         "adcs	r5, r7\n\t"
189554 #else
189555         "adc	r5, r7\n\t"
189556 #endif
189557         "str	r4, [%[r], #8]\n\t"
189558         "str	r5, [%[r], #12]\n\t"
189559         "ldr	r4, [%[r], #16]\n\t"
189560         "ldr	r5, [%[r], #20]\n\t"
189561         "ldr	r6, [%[m], #16]\n\t"
189562         "ldr	r7, [%[m], #20]\n\t"
189563 #ifdef WOLFSSL_KEIL
189564         "ands	r6, r6, %[b]\n\t"
189565 #elif defined(__clang__)
189566         "ands	r6, %[b]\n\t"
189567 #else
189568         "and	r6, %[b]\n\t"
189569 #endif
189570 #ifdef WOLFSSL_KEIL
189571         "ands	r7, r7, %[b]\n\t"
189572 #elif defined(__clang__)
189573         "ands	r7, %[b]\n\t"
189574 #else
189575         "and	r7, %[b]\n\t"
189576 #endif
189577 #ifdef WOLFSSL_KEIL
189578         "adcs	r4, r4, r6\n\t"
189579 #elif defined(__clang__)
189580         "adcs	r4, r6\n\t"
189581 #else
189582         "adc	r4, r6\n\t"
189583 #endif
189584 #ifdef WOLFSSL_KEIL
189585         "adcs	r5, r5, r7\n\t"
189586 #elif defined(__clang__)
189587         "adcs	r5, r7\n\t"
189588 #else
189589         "adc	r5, r7\n\t"
189590 #endif
189591         "str	r4, [%[r], #16]\n\t"
189592         "str	r5, [%[r], #20]\n\t"
189593         "ldr	r4, [%[r], #24]\n\t"
189594         "ldr	r5, [%[r], #28]\n\t"
189595         "ldr	r6, [%[m], #24]\n\t"
189596         "ldr	r7, [%[m], #28]\n\t"
189597 #ifdef WOLFSSL_KEIL
189598         "ands	r6, r6, %[b]\n\t"
189599 #elif defined(__clang__)
189600         "ands	r6, %[b]\n\t"
189601 #else
189602         "and	r6, %[b]\n\t"
189603 #endif
189604 #ifdef WOLFSSL_KEIL
189605         "ands	r7, r7, %[b]\n\t"
189606 #elif defined(__clang__)
189607         "ands	r7, %[b]\n\t"
189608 #else
189609         "and	r7, %[b]\n\t"
189610 #endif
189611 #ifdef WOLFSSL_KEIL
189612         "adcs	r4, r4, r6\n\t"
189613 #elif defined(__clang__)
189614         "adcs	r4, r6\n\t"
189615 #else
189616         "adc	r4, r6\n\t"
189617 #endif
189618 #ifdef WOLFSSL_KEIL
189619         "adcs	r5, r5, r7\n\t"
189620 #elif defined(__clang__)
189621         "adcs	r5, r7\n\t"
189622 #else
189623         "adc	r5, r7\n\t"
189624 #endif
189625         "str	r4, [%[r], #24]\n\t"
189626         "str	r5, [%[r], #28]\n\t"
189627         "ldr	r4, [%[r], #32]\n\t"
189628         "ldr	r5, [%[r], #36]\n\t"
189629         "ldr	r6, [%[m], #32]\n\t"
189630         "ldr	r7, [%[m], #36]\n\t"
189631 #ifdef WOLFSSL_KEIL
189632         "ands	r6, r6, %[b]\n\t"
189633 #elif defined(__clang__)
189634         "ands	r6, %[b]\n\t"
189635 #else
189636         "and	r6, %[b]\n\t"
189637 #endif
189638 #ifdef WOLFSSL_KEIL
189639         "ands	r7, r7, %[b]\n\t"
189640 #elif defined(__clang__)
189641         "ands	r7, %[b]\n\t"
189642 #else
189643         "and	r7, %[b]\n\t"
189644 #endif
189645 #ifdef WOLFSSL_KEIL
189646         "adcs	r4, r4, r6\n\t"
189647 #elif defined(__clang__)
189648         "adcs	r4, r6\n\t"
189649 #else
189650         "adc	r4, r6\n\t"
189651 #endif
189652 #ifdef WOLFSSL_KEIL
189653         "adcs	r5, r5, r7\n\t"
189654 #elif defined(__clang__)
189655         "adcs	r5, r7\n\t"
189656 #else
189657         "adc	r5, r7\n\t"
189658 #endif
189659         "str	r4, [%[r], #32]\n\t"
189660         "str	r5, [%[r], #36]\n\t"
189661         "ldr	r4, [%[r], #40]\n\t"
189662         "ldr	r5, [%[r], #44]\n\t"
189663         "ldr	r6, [%[m], #40]\n\t"
189664         "ldr	r7, [%[m], #44]\n\t"
189665 #ifdef WOLFSSL_KEIL
189666         "ands	r6, r6, %[b]\n\t"
189667 #elif defined(__clang__)
189668         "ands	r6, %[b]\n\t"
189669 #else
189670         "and	r6, %[b]\n\t"
189671 #endif
189672 #ifdef WOLFSSL_KEIL
189673         "ands	r7, r7, %[b]\n\t"
189674 #elif defined(__clang__)
189675         "ands	r7, %[b]\n\t"
189676 #else
189677         "and	r7, %[b]\n\t"
189678 #endif
189679 #ifdef WOLFSSL_KEIL
189680         "adcs	r4, r4, r6\n\t"
189681 #elif defined(__clang__)
189682         "adcs	r4, r6\n\t"
189683 #else
189684         "adc	r4, r6\n\t"
189685 #endif
189686 #ifdef WOLFSSL_KEIL
189687         "adcs	r5, r5, r7\n\t"
189688 #elif defined(__clang__)
189689         "adcs	r5, r7\n\t"
189690 #else
189691         "adc	r5, r7\n\t"
189692 #endif
189693         "str	r4, [%[r], #40]\n\t"
189694         "str	r5, [%[r], #44]\n\t"
189695         "ldr	r4, [%[r], #48]\n\t"
189696         "ldr	r5, [%[r], #52]\n\t"
189697         "ldr	r6, [%[m], #48]\n\t"
189698         "ldr	r7, [%[m], #52]\n\t"
189699 #ifdef WOLFSSL_KEIL
189700         "ands	r6, r6, %[b]\n\t"
189701 #elif defined(__clang__)
189702         "ands	r6, %[b]\n\t"
189703 #else
189704         "and	r6, %[b]\n\t"
189705 #endif
189706 #ifdef WOLFSSL_KEIL
189707         "ands	r7, r7, %[b]\n\t"
189708 #elif defined(__clang__)
189709         "ands	r7, %[b]\n\t"
189710 #else
189711         "and	r7, %[b]\n\t"
189712 #endif
189713 #ifdef WOLFSSL_KEIL
189714         "adcs	r4, r4, r6\n\t"
189715 #elif defined(__clang__)
189716         "adcs	r4, r6\n\t"
189717 #else
189718         "adc	r4, r6\n\t"
189719 #endif
189720 #ifdef WOLFSSL_KEIL
189721         "adcs	r5, r5, r7\n\t"
189722 #elif defined(__clang__)
189723         "adcs	r5, r7\n\t"
189724 #else
189725         "adc	r5, r7\n\t"
189726 #endif
189727         "str	r4, [%[r], #48]\n\t"
189728         "str	r5, [%[r], #52]\n\t"
189729         "ldr	r4, [%[r], #56]\n\t"
189730         "ldr	r5, [%[r], #60]\n\t"
189731         "ldr	r6, [%[m], #56]\n\t"
189732         "ldr	r7, [%[m], #60]\n\t"
189733 #ifdef WOLFSSL_KEIL
189734         "ands	r6, r6, %[b]\n\t"
189735 #elif defined(__clang__)
189736         "ands	r6, %[b]\n\t"
189737 #else
189738         "and	r6, %[b]\n\t"
189739 #endif
189740 #ifdef WOLFSSL_KEIL
189741         "ands	r7, r7, %[b]\n\t"
189742 #elif defined(__clang__)
189743         "ands	r7, %[b]\n\t"
189744 #else
189745         "and	r7, %[b]\n\t"
189746 #endif
189747 #ifdef WOLFSSL_KEIL
189748         "adcs	r4, r4, r6\n\t"
189749 #elif defined(__clang__)
189750         "adcs	r4, r6\n\t"
189751 #else
189752         "adc	r4, r6\n\t"
189753 #endif
189754 #ifdef WOLFSSL_KEIL
189755         "adcs	r5, r5, r7\n\t"
189756 #elif defined(__clang__)
189757         "adcs	r5, r7\n\t"
189758 #else
189759         "adc	r5, r7\n\t"
189760 #endif
189761         "str	r4, [%[r], #56]\n\t"
189762         "str	r5, [%[r], #60]\n\t"
189763         "ldr	r4, [%[r], #64]\n\t"
189764         "ldr	r5, [%[r], #68]\n\t"
189765         "ldr	r6, [%[m], #64]\n\t"
189766         "ldr	r7, [%[m], #68]\n\t"
189767 #ifdef WOLFSSL_KEIL
189768         "ands	r6, r6, %[b]\n\t"
189769 #elif defined(__clang__)
189770         "ands	r6, %[b]\n\t"
189771 #else
189772         "and	r6, %[b]\n\t"
189773 #endif
189774 #ifdef WOLFSSL_KEIL
189775         "ands	r7, r7, %[b]\n\t"
189776 #elif defined(__clang__)
189777         "ands	r7, %[b]\n\t"
189778 #else
189779         "and	r7, %[b]\n\t"
189780 #endif
189781 #ifdef WOLFSSL_KEIL
189782         "adcs	r4, r4, r6\n\t"
189783 #elif defined(__clang__)
189784         "adcs	r4, r6\n\t"
189785 #else
189786         "adc	r4, r6\n\t"
189787 #endif
189788 #ifdef WOLFSSL_KEIL
189789         "adcs	r5, r5, r7\n\t"
189790 #elif defined(__clang__)
189791         "adcs	r5, r7\n\t"
189792 #else
189793         "adc	r5, r7\n\t"
189794 #endif
189795         "str	r4, [%[r], #64]\n\t"
189796         "str	r5, [%[r], #68]\n\t"
189797         "ldr	r4, [%[r], #72]\n\t"
189798         "ldr	r5, [%[r], #76]\n\t"
189799         "ldr	r6, [%[m], #72]\n\t"
189800         "ldr	r7, [%[m], #76]\n\t"
189801 #ifdef WOLFSSL_KEIL
189802         "ands	r6, r6, %[b]\n\t"
189803 #elif defined(__clang__)
189804         "ands	r6, %[b]\n\t"
189805 #else
189806         "and	r6, %[b]\n\t"
189807 #endif
189808 #ifdef WOLFSSL_KEIL
189809         "ands	r7, r7, %[b]\n\t"
189810 #elif defined(__clang__)
189811         "ands	r7, %[b]\n\t"
189812 #else
189813         "and	r7, %[b]\n\t"
189814 #endif
189815 #ifdef WOLFSSL_KEIL
189816         "adcs	r4, r4, r6\n\t"
189817 #elif defined(__clang__)
189818         "adcs	r4, r6\n\t"
189819 #else
189820         "adc	r4, r6\n\t"
189821 #endif
189822 #ifdef WOLFSSL_KEIL
189823         "adcs	r5, r5, r7\n\t"
189824 #elif defined(__clang__)
189825         "adcs	r5, r7\n\t"
189826 #else
189827         "adc	r5, r7\n\t"
189828 #endif
189829         "str	r4, [%[r], #72]\n\t"
189830         "str	r5, [%[r], #76]\n\t"
189831         "ldr	r4, [%[r], #80]\n\t"
189832         "ldr	r5, [%[r], #84]\n\t"
189833         "ldr	r6, [%[m], #80]\n\t"
189834         "ldr	r7, [%[m], #84]\n\t"
189835 #ifdef WOLFSSL_KEIL
189836         "ands	r6, r6, %[b]\n\t"
189837 #elif defined(__clang__)
189838         "ands	r6, %[b]\n\t"
189839 #else
189840         "and	r6, %[b]\n\t"
189841 #endif
189842 #ifdef WOLFSSL_KEIL
189843         "ands	r7, r7, %[b]\n\t"
189844 #elif defined(__clang__)
189845         "ands	r7, %[b]\n\t"
189846 #else
189847         "and	r7, %[b]\n\t"
189848 #endif
189849 #ifdef WOLFSSL_KEIL
189850         "adcs	r4, r4, r6\n\t"
189851 #elif defined(__clang__)
189852         "adcs	r4, r6\n\t"
189853 #else
189854         "adc	r4, r6\n\t"
189855 #endif
189856 #ifdef WOLFSSL_KEIL
189857         "adcs	r5, r5, r7\n\t"
189858 #elif defined(__clang__)
189859         "adcs	r5, r7\n\t"
189860 #else
189861         "adc	r5, r7\n\t"
189862 #endif
189863         "str	r4, [%[r], #80]\n\t"
189864         "str	r5, [%[r], #84]\n\t"
189865         "ldr	r4, [%[r], #88]\n\t"
189866         "ldr	r5, [%[r], #92]\n\t"
189867         "ldr	r6, [%[m], #88]\n\t"
189868         "ldr	r7, [%[m], #92]\n\t"
189869 #ifdef WOLFSSL_KEIL
189870         "ands	r6, r6, %[b]\n\t"
189871 #elif defined(__clang__)
189872         "ands	r6, %[b]\n\t"
189873 #else
189874         "and	r6, %[b]\n\t"
189875 #endif
189876 #ifdef WOLFSSL_KEIL
189877         "ands	r7, r7, %[b]\n\t"
189878 #elif defined(__clang__)
189879         "ands	r7, %[b]\n\t"
189880 #else
189881         "and	r7, %[b]\n\t"
189882 #endif
189883 #ifdef WOLFSSL_KEIL
189884         "adcs	r4, r4, r6\n\t"
189885 #elif defined(__clang__)
189886         "adcs	r4, r6\n\t"
189887 #else
189888         "adc	r4, r6\n\t"
189889 #endif
189890 #ifdef WOLFSSL_KEIL
189891         "adcs	r5, r5, r7\n\t"
189892 #elif defined(__clang__)
189893         "adcs	r5, r7\n\t"
189894 #else
189895         "adc	r5, r7\n\t"
189896 #endif
189897         "str	r4, [%[r], #88]\n\t"
189898         "str	r5, [%[r], #92]\n\t"
189899         "ldr	r4, [%[r], #96]\n\t"
189900         "ldr	r5, [%[r], #100]\n\t"
189901         "ldr	r6, [%[m], #96]\n\t"
189902         "ldr	r7, [%[m], #100]\n\t"
189903 #ifdef WOLFSSL_KEIL
189904         "ands	r6, r6, %[b]\n\t"
189905 #elif defined(__clang__)
189906         "ands	r6, %[b]\n\t"
189907 #else
189908         "and	r6, %[b]\n\t"
189909 #endif
189910 #ifdef WOLFSSL_KEIL
189911         "ands	r7, r7, %[b]\n\t"
189912 #elif defined(__clang__)
189913         "ands	r7, %[b]\n\t"
189914 #else
189915         "and	r7, %[b]\n\t"
189916 #endif
189917 #ifdef WOLFSSL_KEIL
189918         "adcs	r4, r4, r6\n\t"
189919 #elif defined(__clang__)
189920         "adcs	r4, r6\n\t"
189921 #else
189922         "adc	r4, r6\n\t"
189923 #endif
189924 #ifdef WOLFSSL_KEIL
189925         "adcs	r5, r5, r7\n\t"
189926 #elif defined(__clang__)
189927         "adcs	r5, r7\n\t"
189928 #else
189929         "adc	r5, r7\n\t"
189930 #endif
189931         "str	r4, [%[r], #96]\n\t"
189932         "str	r5, [%[r], #100]\n\t"
189933         "ldr	r4, [%[r], #104]\n\t"
189934         "ldr	r5, [%[r], #108]\n\t"
189935         "ldr	r6, [%[m], #104]\n\t"
189936         "ldr	r7, [%[m], #108]\n\t"
189937 #ifdef WOLFSSL_KEIL
189938         "ands	r6, r6, %[b]\n\t"
189939 #elif defined(__clang__)
189940         "ands	r6, %[b]\n\t"
189941 #else
189942         "and	r6, %[b]\n\t"
189943 #endif
189944 #ifdef WOLFSSL_KEIL
189945         "ands	r7, r7, %[b]\n\t"
189946 #elif defined(__clang__)
189947         "ands	r7, %[b]\n\t"
189948 #else
189949         "and	r7, %[b]\n\t"
189950 #endif
189951 #ifdef WOLFSSL_KEIL
189952         "adcs	r4, r4, r6\n\t"
189953 #elif defined(__clang__)
189954         "adcs	r4, r6\n\t"
189955 #else
189956         "adc	r4, r6\n\t"
189957 #endif
189958 #ifdef WOLFSSL_KEIL
189959         "adcs	r5, r5, r7\n\t"
189960 #elif defined(__clang__)
189961         "adcs	r5, r7\n\t"
189962 #else
189963         "adc	r5, r7\n\t"
189964 #endif
189965         "str	r4, [%[r], #104]\n\t"
189966         "str	r5, [%[r], #108]\n\t"
189967         "ldr	r4, [%[r], #112]\n\t"
189968         "ldr	r5, [%[r], #116]\n\t"
189969         "ldr	r6, [%[m], #112]\n\t"
189970         "ldr	r7, [%[m], #116]\n\t"
189971 #ifdef WOLFSSL_KEIL
189972         "ands	r6, r6, %[b]\n\t"
189973 #elif defined(__clang__)
189974         "ands	r6, %[b]\n\t"
189975 #else
189976         "and	r6, %[b]\n\t"
189977 #endif
189978 #ifdef WOLFSSL_KEIL
189979         "ands	r7, r7, %[b]\n\t"
189980 #elif defined(__clang__)
189981         "ands	r7, %[b]\n\t"
189982 #else
189983         "and	r7, %[b]\n\t"
189984 #endif
189985 #ifdef WOLFSSL_KEIL
189986         "adcs	r4, r4, r6\n\t"
189987 #elif defined(__clang__)
189988         "adcs	r4, r6\n\t"
189989 #else
189990         "adc	r4, r6\n\t"
189991 #endif
189992 #ifdef WOLFSSL_KEIL
189993         "adcs	r5, r5, r7\n\t"
189994 #elif defined(__clang__)
189995         "adcs	r5, r7\n\t"
189996 #else
189997         "adc	r5, r7\n\t"
189998 #endif
189999         "str	r4, [%[r], #112]\n\t"
190000         "str	r5, [%[r], #116]\n\t"
190001         "ldr	r4, [%[r], #120]\n\t"
190002         "ldr	r5, [%[r], #124]\n\t"
190003         "ldr	r6, [%[m], #120]\n\t"
190004         "ldr	r7, [%[m], #124]\n\t"
190005 #ifdef WOLFSSL_KEIL
190006         "ands	r6, r6, %[b]\n\t"
190007 #elif defined(__clang__)
190008         "ands	r6, %[b]\n\t"
190009 #else
190010         "and	r6, %[b]\n\t"
190011 #endif
190012 #ifdef WOLFSSL_KEIL
190013         "ands	r7, r7, %[b]\n\t"
190014 #elif defined(__clang__)
190015         "ands	r7, %[b]\n\t"
190016 #else
190017         "and	r7, %[b]\n\t"
190018 #endif
190019 #ifdef WOLFSSL_KEIL
190020         "adcs	r4, r4, r6\n\t"
190021 #elif defined(__clang__)
190022         "adcs	r4, r6\n\t"
190023 #else
190024         "adc	r4, r6\n\t"
190025 #endif
190026 #ifdef WOLFSSL_KEIL
190027         "adcs	r5, r5, r7\n\t"
190028 #elif defined(__clang__)
190029         "adcs	r5, r7\n\t"
190030 #else
190031         "adc	r5, r7\n\t"
190032 #endif
190033         "str	r4, [%[r], #120]\n\t"
190034         "str	r5, [%[r], #124]\n\t"
190035         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
190036         :
190037         : "memory", "r4", "r5", "r6", "r7"
190038     );
190039 }
190040 
190041 /* Conditionally add a and b using the mask m.
190042  * m is -1 to add and 0 when not.
190043  *
190044  * r  A single precision number representing conditional add result.
190045  * a  A single precision number to add with.
190046  * b  A single precision number to add.
190047  * m  Mask value to apply.
190048  */
sp_1024_cond_add_32(sp_digit * r,const sp_digit * a,const sp_digit * b,sp_digit m)190049 SP_NOINLINE static sp_digit sp_1024_cond_add_32(sp_digit* r, const sp_digit* a,
190050         const sp_digit* b, sp_digit m)
190051 {
190052     __asm__ __volatile__ (
190053         "movs	r4, #0\n\t"
190054         "movs	r5, #0x80\n\t"
190055         "mov	r8, r5\n\t"
190056         "movs	r7, #0\n\t"
190057         "\n"
190058     "L_sp_1024_cond_add_32_words_%=:\n\t"
190059         "ldr	r6, [%[b], r7]\n\t"
190060 #ifdef WOLFSSL_KEIL
190061         "ands	r6, r6, %[m]\n\t"
190062 #elif defined(__clang__)
190063         "ands	r6, %[m]\n\t"
190064 #else
190065         "and	r6, %[m]\n\t"
190066 #endif
190067         "movs	r5, #0\n\t"
190068 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190069         "subs	r5, r5, #1\n\t"
190070 #else
190071         "sub	r5, r5, #1\n\t"
190072 #endif
190073 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190074         "adds	r5, r5, r4\n\t"
190075 #else
190076         "add	r5, r5, r4\n\t"
190077 #endif
190078         "ldr	r5, [%[a], r7]\n\t"
190079 #ifdef WOLFSSL_KEIL
190080         "adcs	r5, r5, r6\n\t"
190081 #elif defined(__clang__)
190082         "adcs	r5, r6\n\t"
190083 #else
190084         "adc	r5, r6\n\t"
190085 #endif
190086         "movs	r4, #0\n\t"
190087 #ifdef WOLFSSL_KEIL
190088         "adcs	r4, r4, r4\n\t"
190089 #elif defined(__clang__)
190090         "adcs	r4, r4\n\t"
190091 #else
190092         "adc	r4, r4\n\t"
190093 #endif
190094         "str	r5, [%[r], r7]\n\t"
190095 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190096         "adds	r7, r7, #4\n\t"
190097 #else
190098         "add	r7, r7, #4\n\t"
190099 #endif
190100         "cmp	r7, r8\n\t"
190101         "blt	L_sp_1024_cond_add_32_words_%=\n\t"
190102         "movs	%[r], r4\n\t"
190103         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
190104         :
190105         : "memory", "r4", "r5", "r6", "r7", "r8"
190106     );
190107     return (uint32_t)(size_t)r;
190108 }
190109 
190110 /* Right shift a by 1 bit into r. (r = a >> 1)
190111  *
190112  * r  A single precision integer.
190113  * a  A single precision integer.
190114  */
sp_1024_rshift1_32(sp_digit * r,const sp_digit * a)190115 static void sp_1024_rshift1_32(sp_digit* r, const sp_digit* a)
190116 {
190117     __asm__ __volatile__ (
190118         "ldr	r2, [%[a]]\n\t"
190119         "ldr	r3, [%[a], #4]\n\t"
190120 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190121         "lsrs	r2, r2, #1\n\t"
190122 #else
190123         "lsr	r2, r2, #1\n\t"
190124 #endif
190125 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190126         "lsls	r5, r3, #31\n\t"
190127 #else
190128         "lsl	r5, r3, #31\n\t"
190129 #endif
190130 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190131         "lsrs	r3, r3, #1\n\t"
190132 #else
190133         "lsr	r3, r3, #1\n\t"
190134 #endif
190135 #ifdef WOLFSSL_KEIL
190136         "orrs	r2, r2, r5\n\t"
190137 #elif defined(__clang__)
190138         "orrs	r2, r5\n\t"
190139 #else
190140         "orr	r2, r5\n\t"
190141 #endif
190142         "ldr	r4, [%[a], #8]\n\t"
190143         "str	r2, [%[r]]\n\t"
190144 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190145         "lsls	r5, r4, #31\n\t"
190146 #else
190147         "lsl	r5, r4, #31\n\t"
190148 #endif
190149 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190150         "lsrs	r4, r4, #1\n\t"
190151 #else
190152         "lsr	r4, r4, #1\n\t"
190153 #endif
190154 #ifdef WOLFSSL_KEIL
190155         "orrs	r3, r3, r5\n\t"
190156 #elif defined(__clang__)
190157         "orrs	r3, r5\n\t"
190158 #else
190159         "orr	r3, r5\n\t"
190160 #endif
190161         "ldr	r2, [%[a], #12]\n\t"
190162         "str	r3, [%[r], #4]\n\t"
190163 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190164         "lsls	r5, r2, #31\n\t"
190165 #else
190166         "lsl	r5, r2, #31\n\t"
190167 #endif
190168 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190169         "lsrs	r2, r2, #1\n\t"
190170 #else
190171         "lsr	r2, r2, #1\n\t"
190172 #endif
190173 #ifdef WOLFSSL_KEIL
190174         "orrs	r4, r4, r5\n\t"
190175 #elif defined(__clang__)
190176         "orrs	r4, r5\n\t"
190177 #else
190178         "orr	r4, r5\n\t"
190179 #endif
190180         "ldr	r3, [%[a], #16]\n\t"
190181         "str	r4, [%[r], #8]\n\t"
190182 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190183         "lsls	r5, r3, #31\n\t"
190184 #else
190185         "lsl	r5, r3, #31\n\t"
190186 #endif
190187 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190188         "lsrs	r3, r3, #1\n\t"
190189 #else
190190         "lsr	r3, r3, #1\n\t"
190191 #endif
190192 #ifdef WOLFSSL_KEIL
190193         "orrs	r2, r2, r5\n\t"
190194 #elif defined(__clang__)
190195         "orrs	r2, r5\n\t"
190196 #else
190197         "orr	r2, r5\n\t"
190198 #endif
190199         "ldr	r4, [%[a], #20]\n\t"
190200         "str	r2, [%[r], #12]\n\t"
190201 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190202         "lsls	r5, r4, #31\n\t"
190203 #else
190204         "lsl	r5, r4, #31\n\t"
190205 #endif
190206 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190207         "lsrs	r4, r4, #1\n\t"
190208 #else
190209         "lsr	r4, r4, #1\n\t"
190210 #endif
190211 #ifdef WOLFSSL_KEIL
190212         "orrs	r3, r3, r5\n\t"
190213 #elif defined(__clang__)
190214         "orrs	r3, r5\n\t"
190215 #else
190216         "orr	r3, r5\n\t"
190217 #endif
190218         "ldr	r2, [%[a], #24]\n\t"
190219         "str	r3, [%[r], #16]\n\t"
190220 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190221         "lsls	r5, r2, #31\n\t"
190222 #else
190223         "lsl	r5, r2, #31\n\t"
190224 #endif
190225 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190226         "lsrs	r2, r2, #1\n\t"
190227 #else
190228         "lsr	r2, r2, #1\n\t"
190229 #endif
190230 #ifdef WOLFSSL_KEIL
190231         "orrs	r4, r4, r5\n\t"
190232 #elif defined(__clang__)
190233         "orrs	r4, r5\n\t"
190234 #else
190235         "orr	r4, r5\n\t"
190236 #endif
190237         "ldr	r3, [%[a], #28]\n\t"
190238         "str	r4, [%[r], #20]\n\t"
190239 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190240         "lsls	r5, r3, #31\n\t"
190241 #else
190242         "lsl	r5, r3, #31\n\t"
190243 #endif
190244 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190245         "lsrs	r3, r3, #1\n\t"
190246 #else
190247         "lsr	r3, r3, #1\n\t"
190248 #endif
190249 #ifdef WOLFSSL_KEIL
190250         "orrs	r2, r2, r5\n\t"
190251 #elif defined(__clang__)
190252         "orrs	r2, r5\n\t"
190253 #else
190254         "orr	r2, r5\n\t"
190255 #endif
190256         "ldr	r4, [%[a], #32]\n\t"
190257         "str	r2, [%[r], #24]\n\t"
190258 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190259         "lsls	r5, r4, #31\n\t"
190260 #else
190261         "lsl	r5, r4, #31\n\t"
190262 #endif
190263 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190264         "lsrs	r4, r4, #1\n\t"
190265 #else
190266         "lsr	r4, r4, #1\n\t"
190267 #endif
190268 #ifdef WOLFSSL_KEIL
190269         "orrs	r3, r3, r5\n\t"
190270 #elif defined(__clang__)
190271         "orrs	r3, r5\n\t"
190272 #else
190273         "orr	r3, r5\n\t"
190274 #endif
190275         "ldr	r2, [%[a], #36]\n\t"
190276         "str	r3, [%[r], #28]\n\t"
190277 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190278         "lsls	r5, r2, #31\n\t"
190279 #else
190280         "lsl	r5, r2, #31\n\t"
190281 #endif
190282 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190283         "lsrs	r2, r2, #1\n\t"
190284 #else
190285         "lsr	r2, r2, #1\n\t"
190286 #endif
190287 #ifdef WOLFSSL_KEIL
190288         "orrs	r4, r4, r5\n\t"
190289 #elif defined(__clang__)
190290         "orrs	r4, r5\n\t"
190291 #else
190292         "orr	r4, r5\n\t"
190293 #endif
190294         "ldr	r3, [%[a], #40]\n\t"
190295         "str	r4, [%[r], #32]\n\t"
190296 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190297         "lsls	r5, r3, #31\n\t"
190298 #else
190299         "lsl	r5, r3, #31\n\t"
190300 #endif
190301 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190302         "lsrs	r3, r3, #1\n\t"
190303 #else
190304         "lsr	r3, r3, #1\n\t"
190305 #endif
190306 #ifdef WOLFSSL_KEIL
190307         "orrs	r2, r2, r5\n\t"
190308 #elif defined(__clang__)
190309         "orrs	r2, r5\n\t"
190310 #else
190311         "orr	r2, r5\n\t"
190312 #endif
190313         "ldr	r4, [%[a], #44]\n\t"
190314         "str	r2, [%[r], #36]\n\t"
190315 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190316         "lsls	r5, r4, #31\n\t"
190317 #else
190318         "lsl	r5, r4, #31\n\t"
190319 #endif
190320 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190321         "lsrs	r4, r4, #1\n\t"
190322 #else
190323         "lsr	r4, r4, #1\n\t"
190324 #endif
190325 #ifdef WOLFSSL_KEIL
190326         "orrs	r3, r3, r5\n\t"
190327 #elif defined(__clang__)
190328         "orrs	r3, r5\n\t"
190329 #else
190330         "orr	r3, r5\n\t"
190331 #endif
190332         "ldr	r2, [%[a], #48]\n\t"
190333         "str	r3, [%[r], #40]\n\t"
190334 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190335         "lsls	r5, r2, #31\n\t"
190336 #else
190337         "lsl	r5, r2, #31\n\t"
190338 #endif
190339 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190340         "lsrs	r2, r2, #1\n\t"
190341 #else
190342         "lsr	r2, r2, #1\n\t"
190343 #endif
190344 #ifdef WOLFSSL_KEIL
190345         "orrs	r4, r4, r5\n\t"
190346 #elif defined(__clang__)
190347         "orrs	r4, r5\n\t"
190348 #else
190349         "orr	r4, r5\n\t"
190350 #endif
190351         "ldr	r3, [%[a], #52]\n\t"
190352         "str	r4, [%[r], #44]\n\t"
190353 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190354         "lsls	r5, r3, #31\n\t"
190355 #else
190356         "lsl	r5, r3, #31\n\t"
190357 #endif
190358 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190359         "lsrs	r3, r3, #1\n\t"
190360 #else
190361         "lsr	r3, r3, #1\n\t"
190362 #endif
190363 #ifdef WOLFSSL_KEIL
190364         "orrs	r2, r2, r5\n\t"
190365 #elif defined(__clang__)
190366         "orrs	r2, r5\n\t"
190367 #else
190368         "orr	r2, r5\n\t"
190369 #endif
190370         "ldr	r4, [%[a], #56]\n\t"
190371         "str	r2, [%[r], #48]\n\t"
190372 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190373         "lsls	r5, r4, #31\n\t"
190374 #else
190375         "lsl	r5, r4, #31\n\t"
190376 #endif
190377 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190378         "lsrs	r4, r4, #1\n\t"
190379 #else
190380         "lsr	r4, r4, #1\n\t"
190381 #endif
190382 #ifdef WOLFSSL_KEIL
190383         "orrs	r3, r3, r5\n\t"
190384 #elif defined(__clang__)
190385         "orrs	r3, r5\n\t"
190386 #else
190387         "orr	r3, r5\n\t"
190388 #endif
190389         "ldr	r2, [%[a], #60]\n\t"
190390         "str	r3, [%[r], #52]\n\t"
190391 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190392         "lsls	r5, r2, #31\n\t"
190393 #else
190394         "lsl	r5, r2, #31\n\t"
190395 #endif
190396 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190397         "lsrs	r2, r2, #1\n\t"
190398 #else
190399         "lsr	r2, r2, #1\n\t"
190400 #endif
190401 #ifdef WOLFSSL_KEIL
190402         "orrs	r4, r4, r5\n\t"
190403 #elif defined(__clang__)
190404         "orrs	r4, r5\n\t"
190405 #else
190406         "orr	r4, r5\n\t"
190407 #endif
190408         "ldr	r3, [%[a], #64]\n\t"
190409         "str	r4, [%[r], #56]\n\t"
190410 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190411         "lsls	r5, r3, #31\n\t"
190412 #else
190413         "lsl	r5, r3, #31\n\t"
190414 #endif
190415 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190416         "lsrs	r3, r3, #1\n\t"
190417 #else
190418         "lsr	r3, r3, #1\n\t"
190419 #endif
190420 #ifdef WOLFSSL_KEIL
190421         "orrs	r2, r2, r5\n\t"
190422 #elif defined(__clang__)
190423         "orrs	r2, r5\n\t"
190424 #else
190425         "orr	r2, r5\n\t"
190426 #endif
190427         "ldr	r4, [%[a], #68]\n\t"
190428         "str	r2, [%[r], #60]\n\t"
190429 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190430         "lsls	r5, r4, #31\n\t"
190431 #else
190432         "lsl	r5, r4, #31\n\t"
190433 #endif
190434 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190435         "lsrs	r4, r4, #1\n\t"
190436 #else
190437         "lsr	r4, r4, #1\n\t"
190438 #endif
190439 #ifdef WOLFSSL_KEIL
190440         "orrs	r3, r3, r5\n\t"
190441 #elif defined(__clang__)
190442         "orrs	r3, r5\n\t"
190443 #else
190444         "orr	r3, r5\n\t"
190445 #endif
190446         "ldr	r2, [%[a], #72]\n\t"
190447         "str	r3, [%[r], #64]\n\t"
190448 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190449         "lsls	r5, r2, #31\n\t"
190450 #else
190451         "lsl	r5, r2, #31\n\t"
190452 #endif
190453 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190454         "lsrs	r2, r2, #1\n\t"
190455 #else
190456         "lsr	r2, r2, #1\n\t"
190457 #endif
190458 #ifdef WOLFSSL_KEIL
190459         "orrs	r4, r4, r5\n\t"
190460 #elif defined(__clang__)
190461         "orrs	r4, r5\n\t"
190462 #else
190463         "orr	r4, r5\n\t"
190464 #endif
190465         "ldr	r3, [%[a], #76]\n\t"
190466         "str	r4, [%[r], #68]\n\t"
190467 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190468         "lsls	r5, r3, #31\n\t"
190469 #else
190470         "lsl	r5, r3, #31\n\t"
190471 #endif
190472 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190473         "lsrs	r3, r3, #1\n\t"
190474 #else
190475         "lsr	r3, r3, #1\n\t"
190476 #endif
190477 #ifdef WOLFSSL_KEIL
190478         "orrs	r2, r2, r5\n\t"
190479 #elif defined(__clang__)
190480         "orrs	r2, r5\n\t"
190481 #else
190482         "orr	r2, r5\n\t"
190483 #endif
190484         "ldr	r4, [%[a], #80]\n\t"
190485         "str	r2, [%[r], #72]\n\t"
190486 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190487         "lsls	r5, r4, #31\n\t"
190488 #else
190489         "lsl	r5, r4, #31\n\t"
190490 #endif
190491 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190492         "lsrs	r4, r4, #1\n\t"
190493 #else
190494         "lsr	r4, r4, #1\n\t"
190495 #endif
190496 #ifdef WOLFSSL_KEIL
190497         "orrs	r3, r3, r5\n\t"
190498 #elif defined(__clang__)
190499         "orrs	r3, r5\n\t"
190500 #else
190501         "orr	r3, r5\n\t"
190502 #endif
190503         "ldr	r2, [%[a], #84]\n\t"
190504         "str	r3, [%[r], #76]\n\t"
190505 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190506         "lsls	r5, r2, #31\n\t"
190507 #else
190508         "lsl	r5, r2, #31\n\t"
190509 #endif
190510 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190511         "lsrs	r2, r2, #1\n\t"
190512 #else
190513         "lsr	r2, r2, #1\n\t"
190514 #endif
190515 #ifdef WOLFSSL_KEIL
190516         "orrs	r4, r4, r5\n\t"
190517 #elif defined(__clang__)
190518         "orrs	r4, r5\n\t"
190519 #else
190520         "orr	r4, r5\n\t"
190521 #endif
190522         "ldr	r3, [%[a], #88]\n\t"
190523         "str	r4, [%[r], #80]\n\t"
190524 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190525         "lsls	r5, r3, #31\n\t"
190526 #else
190527         "lsl	r5, r3, #31\n\t"
190528 #endif
190529 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190530         "lsrs	r3, r3, #1\n\t"
190531 #else
190532         "lsr	r3, r3, #1\n\t"
190533 #endif
190534 #ifdef WOLFSSL_KEIL
190535         "orrs	r2, r2, r5\n\t"
190536 #elif defined(__clang__)
190537         "orrs	r2, r5\n\t"
190538 #else
190539         "orr	r2, r5\n\t"
190540 #endif
190541         "ldr	r4, [%[a], #92]\n\t"
190542         "str	r2, [%[r], #84]\n\t"
190543 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190544         "lsls	r5, r4, #31\n\t"
190545 #else
190546         "lsl	r5, r4, #31\n\t"
190547 #endif
190548 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190549         "lsrs	r4, r4, #1\n\t"
190550 #else
190551         "lsr	r4, r4, #1\n\t"
190552 #endif
190553 #ifdef WOLFSSL_KEIL
190554         "orrs	r3, r3, r5\n\t"
190555 #elif defined(__clang__)
190556         "orrs	r3, r5\n\t"
190557 #else
190558         "orr	r3, r5\n\t"
190559 #endif
190560         "ldr	r2, [%[a], #96]\n\t"
190561         "str	r3, [%[r], #88]\n\t"
190562 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190563         "lsls	r5, r2, #31\n\t"
190564 #else
190565         "lsl	r5, r2, #31\n\t"
190566 #endif
190567 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190568         "lsrs	r2, r2, #1\n\t"
190569 #else
190570         "lsr	r2, r2, #1\n\t"
190571 #endif
190572 #ifdef WOLFSSL_KEIL
190573         "orrs	r4, r4, r5\n\t"
190574 #elif defined(__clang__)
190575         "orrs	r4, r5\n\t"
190576 #else
190577         "orr	r4, r5\n\t"
190578 #endif
190579         "ldr	r3, [%[a], #100]\n\t"
190580         "str	r4, [%[r], #92]\n\t"
190581 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190582         "lsls	r5, r3, #31\n\t"
190583 #else
190584         "lsl	r5, r3, #31\n\t"
190585 #endif
190586 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190587         "lsrs	r3, r3, #1\n\t"
190588 #else
190589         "lsr	r3, r3, #1\n\t"
190590 #endif
190591 #ifdef WOLFSSL_KEIL
190592         "orrs	r2, r2, r5\n\t"
190593 #elif defined(__clang__)
190594         "orrs	r2, r5\n\t"
190595 #else
190596         "orr	r2, r5\n\t"
190597 #endif
190598         "ldr	r4, [%[a], #104]\n\t"
190599         "str	r2, [%[r], #96]\n\t"
190600 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190601         "lsls	r5, r4, #31\n\t"
190602 #else
190603         "lsl	r5, r4, #31\n\t"
190604 #endif
190605 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190606         "lsrs	r4, r4, #1\n\t"
190607 #else
190608         "lsr	r4, r4, #1\n\t"
190609 #endif
190610 #ifdef WOLFSSL_KEIL
190611         "orrs	r3, r3, r5\n\t"
190612 #elif defined(__clang__)
190613         "orrs	r3, r5\n\t"
190614 #else
190615         "orr	r3, r5\n\t"
190616 #endif
190617         "ldr	r2, [%[a], #108]\n\t"
190618         "str	r3, [%[r], #100]\n\t"
190619 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190620         "lsls	r5, r2, #31\n\t"
190621 #else
190622         "lsl	r5, r2, #31\n\t"
190623 #endif
190624 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190625         "lsrs	r2, r2, #1\n\t"
190626 #else
190627         "lsr	r2, r2, #1\n\t"
190628 #endif
190629 #ifdef WOLFSSL_KEIL
190630         "orrs	r4, r4, r5\n\t"
190631 #elif defined(__clang__)
190632         "orrs	r4, r5\n\t"
190633 #else
190634         "orr	r4, r5\n\t"
190635 #endif
190636         "ldr	r3, [%[a], #112]\n\t"
190637         "str	r4, [%[r], #104]\n\t"
190638 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190639         "lsls	r5, r3, #31\n\t"
190640 #else
190641         "lsl	r5, r3, #31\n\t"
190642 #endif
190643 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190644         "lsrs	r3, r3, #1\n\t"
190645 #else
190646         "lsr	r3, r3, #1\n\t"
190647 #endif
190648 #ifdef WOLFSSL_KEIL
190649         "orrs	r2, r2, r5\n\t"
190650 #elif defined(__clang__)
190651         "orrs	r2, r5\n\t"
190652 #else
190653         "orr	r2, r5\n\t"
190654 #endif
190655         "ldr	r4, [%[a], #116]\n\t"
190656         "str	r2, [%[r], #108]\n\t"
190657 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190658         "lsls	r5, r4, #31\n\t"
190659 #else
190660         "lsl	r5, r4, #31\n\t"
190661 #endif
190662 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190663         "lsrs	r4, r4, #1\n\t"
190664 #else
190665         "lsr	r4, r4, #1\n\t"
190666 #endif
190667 #ifdef WOLFSSL_KEIL
190668         "orrs	r3, r3, r5\n\t"
190669 #elif defined(__clang__)
190670         "orrs	r3, r5\n\t"
190671 #else
190672         "orr	r3, r5\n\t"
190673 #endif
190674         "ldr	r2, [%[a], #120]\n\t"
190675         "str	r3, [%[r], #112]\n\t"
190676 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190677         "lsls	r5, r2, #31\n\t"
190678 #else
190679         "lsl	r5, r2, #31\n\t"
190680 #endif
190681 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190682         "lsrs	r2, r2, #1\n\t"
190683 #else
190684         "lsr	r2, r2, #1\n\t"
190685 #endif
190686 #ifdef WOLFSSL_KEIL
190687         "orrs	r4, r4, r5\n\t"
190688 #elif defined(__clang__)
190689         "orrs	r4, r5\n\t"
190690 #else
190691         "orr	r4, r5\n\t"
190692 #endif
190693         "ldr	r3, [%[a], #124]\n\t"
190694         "str	r4, [%[r], #116]\n\t"
190695 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190696         "lsls	r5, r3, #31\n\t"
190697 #else
190698         "lsl	r5, r3, #31\n\t"
190699 #endif
190700 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190701         "lsrs	r3, r3, #1\n\t"
190702 #else
190703         "lsr	r3, r3, #1\n\t"
190704 #endif
190705 #ifdef WOLFSSL_KEIL
190706         "orrs	r2, r2, r5\n\t"
190707 #elif defined(__clang__)
190708         "orrs	r2, r5\n\t"
190709 #else
190710         "orr	r2, r5\n\t"
190711 #endif
190712         "str	r2, [%[r], #120]\n\t"
190713         "str	r3, [%[r], #124]\n\t"
190714         : [r] "+r" (r), [a] "+r" (a)
190715         :
190716         : "memory", "r2", "r3", "r4", "r5"
190717     );
190718 }
190719 
190720 /* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m)
190721  *
190722  * r  Result of division by 2.
190723  * a  Number to divide.
190724  * m  Modulus (prime).
190725  */
sp_1024_div2_32(sp_digit * r,const sp_digit * a,const sp_digit * m)190726 SP_NOINLINE static void sp_1024_div2_32(sp_digit* r, const sp_digit* a,
190727         const sp_digit* m)
190728 {
190729     sp_digit o;
190730 
190731     o = sp_1024_cond_add_32(r, a, m, 0 - (a[0] & 1));
190732     sp_1024_rshift1_32(r, r);
190733     r[31] |= o << 31;
190734 }
190735 
190736 /* Double the Montgomery form projective point p.
190737  *
190738  * r  Result of doubling point.
190739  * p  Point to double.
190740  * t  Temporary ordinate data.
190741  */
190742 #ifdef WOLFSSL_SP_NONBLOCK
190743 typedef struct sp_1024_proj_point_dbl_32_ctx {
190744     int state;
190745     sp_digit* t1;
190746     sp_digit* t2;
190747     sp_digit* x;
190748     sp_digit* y;
190749     sp_digit* z;
190750 } sp_1024_proj_point_dbl_32_ctx;
190751 
sp_1024_proj_point_dbl_32_nb(sp_ecc_ctx_t * sp_ctx,sp_point_1024 * r,const sp_point_1024 * p,sp_digit * t)190752 static int sp_1024_proj_point_dbl_32_nb(sp_ecc_ctx_t* sp_ctx, sp_point_1024* r, const sp_point_1024* p, sp_digit* t)
190753 {
190754     int err = FP_WOULDBLOCK;
190755     sp_1024_proj_point_dbl_32_ctx* ctx = (sp_1024_proj_point_dbl_32_ctx*)sp_ctx->data;
190756 
190757     typedef char ctx_size_test[sizeof(sp_1024_proj_point_dbl_32_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
190758     (void)sizeof(ctx_size_test);
190759 
190760     switch (ctx->state) {
190761     case 0:
190762         ctx->t1 = t;
190763         ctx->t2 = t + 2*32;
190764         ctx->x = r->x;
190765         ctx->y = r->y;
190766         ctx->z = r->z;
190767 
190768         /* Put infinity into result. */
190769         if (r != p) {
190770             r->infinity = p->infinity;
190771         }
190772         ctx->state = 1;
190773         break;
190774     case 1:
190775         /* T1 = Z * Z */
190776         sp_1024_mont_sqr_32(ctx->t1, p->z, p1024_mod, p1024_mp_mod);
190777         ctx->state = 2;
190778         break;
190779     case 2:
190780         /* Z = Y * Z */
190781         sp_1024_mont_mul_32(ctx->z, p->y, p->z, p1024_mod, p1024_mp_mod);
190782         ctx->state = 3;
190783         break;
190784     case 3:
190785         /* Z = 2Z */
190786         sp_1024_mont_dbl_32(ctx->z, ctx->z, p1024_mod);
190787         ctx->state = 4;
190788         break;
190789     case 4:
190790         /* T2 = X - T1 */
190791         sp_1024_mont_sub_32(ctx->t2, p->x, ctx->t1, p1024_mod);
190792         ctx->state = 5;
190793         break;
190794     case 5:
190795         /* T1 = X + T1 */
190796         sp_1024_mont_add_32(ctx->t1, p->x, ctx->t1, p1024_mod);
190797         ctx->state = 6;
190798         break;
190799     case 6:
190800         /* T2 = T1 * T2 */
190801         sp_1024_mont_mul_32(ctx->t2, ctx->t1, ctx->t2, p1024_mod, p1024_mp_mod);
190802         ctx->state = 7;
190803         break;
190804     case 7:
190805         /* T1 = 3T2 */
190806         sp_1024_mont_tpl_32(ctx->t1, ctx->t2, p1024_mod);
190807         ctx->state = 8;
190808         break;
190809     case 8:
190810         /* Y = 2Y */
190811         sp_1024_mont_dbl_32(ctx->y, p->y, p1024_mod);
190812         ctx->state = 9;
190813         break;
190814     case 9:
190815         /* Y = Y * Y */
190816         sp_1024_mont_sqr_32(ctx->y, ctx->y, p1024_mod, p1024_mp_mod);
190817         ctx->state = 10;
190818         break;
190819     case 10:
190820         /* T2 = Y * Y */
190821         sp_1024_mont_sqr_32(ctx->t2, ctx->y, p1024_mod, p1024_mp_mod);
190822         ctx->state = 11;
190823         break;
190824     case 11:
190825         /* T2 = T2/2 */
190826         sp_1024_div2_32(ctx->t2, ctx->t2, p1024_mod);
190827         ctx->state = 12;
190828         break;
190829     case 12:
190830         /* Y = Y * X */
190831         sp_1024_mont_mul_32(ctx->y, ctx->y, p->x, p1024_mod, p1024_mp_mod);
190832         ctx->state = 13;
190833         break;
190834     case 13:
190835         /* X = T1 * T1 */
190836         sp_1024_mont_sqr_32(ctx->x, ctx->t1, p1024_mod, p1024_mp_mod);
190837         ctx->state = 14;
190838         break;
190839     case 14:
190840         /* X = X - Y */
190841         sp_1024_mont_sub_32(ctx->x, ctx->x, ctx->y, p1024_mod);
190842         ctx->state = 15;
190843         break;
190844     case 15:
190845         /* X = X - Y */
190846         sp_1024_mont_sub_32(ctx->x, ctx->x, ctx->y, p1024_mod);
190847         ctx->state = 16;
190848         break;
190849     case 16:
190850         /* Y = Y - X */
190851         sp_1024_mont_sub_32(ctx->y, ctx->y, ctx->x, p1024_mod);
190852         ctx->state = 17;
190853         break;
190854     case 17:
190855         /* Y = Y * T1 */
190856         sp_1024_mont_mul_32(ctx->y, ctx->y, ctx->t1, p1024_mod, p1024_mp_mod);
190857         ctx->state = 18;
190858         break;
190859     case 18:
190860         /* Y = Y - T2 */
190861         sp_1024_mont_sub_32(ctx->y, ctx->y, ctx->t2, p1024_mod);
190862         ctx->state = 19;
190863         /* fall-through */
190864     case 19:
190865         err = MP_OKAY;
190866         break;
190867     }
190868 
190869     if (err == MP_OKAY && ctx->state != 19) {
190870         err = FP_WOULDBLOCK;
190871     }
190872 
190873     return err;
190874 }
190875 #endif /* WOLFSSL_SP_NONBLOCK */
190876 
sp_1024_proj_point_dbl_32(sp_point_1024 * r,const sp_point_1024 * p,sp_digit * t)190877 static void sp_1024_proj_point_dbl_32(sp_point_1024* r, const sp_point_1024* p, sp_digit* t)
190878 {
190879     sp_digit* t1 = t;
190880     sp_digit* t2 = t + 2*32;
190881     sp_digit* x;
190882     sp_digit* y;
190883     sp_digit* z;
190884 
190885     x = r->x;
190886     y = r->y;
190887     z = r->z;
190888     /* Put infinity into result. */
190889     if (r != p) {
190890         r->infinity = p->infinity;
190891     }
190892 
190893     /* T1 = Z * Z */
190894     sp_1024_mont_sqr_32(t1, p->z, p1024_mod, p1024_mp_mod);
190895     /* Z = Y * Z */
190896     sp_1024_mont_mul_32(z, p->y, p->z, p1024_mod, p1024_mp_mod);
190897     /* Z = 2Z */
190898     sp_1024_mont_dbl_32(z, z, p1024_mod);
190899     /* T2 = X - T1 */
190900     sp_1024_mont_sub_32(t2, p->x, t1, p1024_mod);
190901     /* T1 = X + T1 */
190902     sp_1024_mont_add_32(t1, p->x, t1, p1024_mod);
190903     /* T2 = T1 * T2 */
190904     sp_1024_mont_mul_32(t2, t1, t2, p1024_mod, p1024_mp_mod);
190905     /* T1 = 3T2 */
190906     sp_1024_mont_tpl_32(t1, t2, p1024_mod);
190907     /* Y = 2Y */
190908     sp_1024_mont_dbl_32(y, p->y, p1024_mod);
190909     /* Y = Y * Y */
190910     sp_1024_mont_sqr_32(y, y, p1024_mod, p1024_mp_mod);
190911     /* T2 = Y * Y */
190912     sp_1024_mont_sqr_32(t2, y, p1024_mod, p1024_mp_mod);
190913     /* T2 = T2/2 */
190914     sp_1024_div2_32(t2, t2, p1024_mod);
190915     /* Y = Y * X */
190916     sp_1024_mont_mul_32(y, y, p->x, p1024_mod, p1024_mp_mod);
190917     /* X = T1 * T1 */
190918     sp_1024_mont_sqr_32(x, t1, p1024_mod, p1024_mp_mod);
190919     /* X = X - Y */
190920     sp_1024_mont_sub_32(x, x, y, p1024_mod);
190921     /* X = X - Y */
190922     sp_1024_mont_sub_32(x, x, y, p1024_mod);
190923     /* Y = Y - X */
190924     sp_1024_mont_sub_32(y, y, x, p1024_mod);
190925     /* Y = Y * T1 */
190926     sp_1024_mont_mul_32(y, y, t1, p1024_mod, p1024_mp_mod);
190927     /* Y = Y - T2 */
190928     sp_1024_mont_sub_32(y, y, t2, p1024_mod);
190929 }
190930 
190931 #ifdef WOLFSSL_SP_SMALL
190932 /* Sub b from a into r. (r = a - b)
190933  *
190934  * r  A single precision integer.
190935  * a  A single precision integer.
190936  * b  A single precision integer.
190937  */
sp_1024_sub_32(sp_digit * r,const sp_digit * a,const sp_digit * b)190938 SP_NOINLINE static sp_digit sp_1024_sub_32(sp_digit* r, const sp_digit* a,
190939         const sp_digit* b)
190940 {
190941     __asm__ __volatile__ (
190942         "movs	r6, %[a]\n\t"
190943         "movs	r3, #0\n\t"
190944 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190945         "adds	r6, r6, #0x80\n\t"
190946 #else
190947         "add	r6, r6, #0x80\n\t"
190948 #endif
190949         "\n"
190950     "L_sp_1024_sub_32_word_%=:\n\t"
190951         "movs	r5, #0\n\t"
190952 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190953         "subs	r5, r5, r3\n\t"
190954 #else
190955         "sub	r5, r5, r3\n\t"
190956 #endif
190957         "ldr	r4, [%[a]]\n\t"
190958         "ldr	r5, [%[b]]\n\t"
190959 #ifdef WOLFSSL_KEIL
190960         "sbcs	r4, r4, r5\n\t"
190961 #elif defined(__clang__)
190962         "sbcs	r4, r5\n\t"
190963 #else
190964         "sbc	r4, r5\n\t"
190965 #endif
190966         "str	r4, [%[r]]\n\t"
190967 #ifdef WOLFSSL_KEIL
190968         "sbcs	r3, r3, r3\n\t"
190969 #elif defined(__clang__)
190970         "sbcs	r3, r3\n\t"
190971 #else
190972         "sbc	r3, r3\n\t"
190973 #endif
190974 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190975         "adds	%[a], %[a], #4\n\t"
190976 #else
190977         "add	%[a], %[a], #4\n\t"
190978 #endif
190979 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190980         "adds	%[b], %[b], #4\n\t"
190981 #else
190982         "add	%[b], %[b], #4\n\t"
190983 #endif
190984 #if defined(__clang__) || defined(WOLFSSL_KEIL)
190985         "adds	%[r], %[r], #4\n\t"
190986 #else
190987         "add	%[r], %[r], #4\n\t"
190988 #endif
190989         "cmp	%[a], r6\n\t"
190990         "bne	L_sp_1024_sub_32_word_%=\n\t"
190991         "movs	%[r], r3\n\t"
190992         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
190993         :
190994         : "memory", "r3", "r4", "r5", "r6"
190995     );
190996     return (uint32_t)(size_t)r;
190997 }
190998 
190999 #else
191000 /* Sub b from a into r. (r = a - b)
191001  *
191002  * r  A single precision integer.
191003  * a  A single precision integer.
191004  * b  A single precision integer.
191005  */
sp_1024_sub_32(sp_digit * r,const sp_digit * a,const sp_digit * b)191006 SP_NOINLINE static sp_digit sp_1024_sub_32(sp_digit* r, const sp_digit* a,
191007         const sp_digit* b)
191008 {
191009     __asm__ __volatile__ (
191010         "ldm	%[b]!, {r5, r6}\n\t"
191011         "ldm	%[a]!, {r3, r4}\n\t"
191012 #if defined(__clang__) || defined(WOLFSSL_KEIL)
191013         "subs	r3, r3, r5\n\t"
191014 #else
191015         "sub	r3, r3, r5\n\t"
191016 #endif
191017 #ifdef WOLFSSL_KEIL
191018         "sbcs	r4, r4, r6\n\t"
191019 #elif defined(__clang__)
191020         "sbcs	r4, r6\n\t"
191021 #else
191022         "sbc	r4, r6\n\t"
191023 #endif
191024         "stm	%[r]!, {r3, r4}\n\t"
191025         "ldm	%[b]!, {r5, r6}\n\t"
191026         "ldm	%[a]!, {r3, r4}\n\t"
191027 #ifdef WOLFSSL_KEIL
191028         "sbcs	r3, r3, r5\n\t"
191029 #elif defined(__clang__)
191030         "sbcs	r3, r5\n\t"
191031 #else
191032         "sbc	r3, r5\n\t"
191033 #endif
191034 #ifdef WOLFSSL_KEIL
191035         "sbcs	r4, r4, r6\n\t"
191036 #elif defined(__clang__)
191037         "sbcs	r4, r6\n\t"
191038 #else
191039         "sbc	r4, r6\n\t"
191040 #endif
191041         "stm	%[r]!, {r3, r4}\n\t"
191042         "ldm	%[b]!, {r5, r6}\n\t"
191043         "ldm	%[a]!, {r3, r4}\n\t"
191044 #ifdef WOLFSSL_KEIL
191045         "sbcs	r3, r3, r5\n\t"
191046 #elif defined(__clang__)
191047         "sbcs	r3, r5\n\t"
191048 #else
191049         "sbc	r3, r5\n\t"
191050 #endif
191051 #ifdef WOLFSSL_KEIL
191052         "sbcs	r4, r4, r6\n\t"
191053 #elif defined(__clang__)
191054         "sbcs	r4, r6\n\t"
191055 #else
191056         "sbc	r4, r6\n\t"
191057 #endif
191058         "stm	%[r]!, {r3, r4}\n\t"
191059         "ldm	%[b]!, {r5, r6}\n\t"
191060         "ldm	%[a]!, {r3, r4}\n\t"
191061 #ifdef WOLFSSL_KEIL
191062         "sbcs	r3, r3, r5\n\t"
191063 #elif defined(__clang__)
191064         "sbcs	r3, r5\n\t"
191065 #else
191066         "sbc	r3, r5\n\t"
191067 #endif
191068 #ifdef WOLFSSL_KEIL
191069         "sbcs	r4, r4, r6\n\t"
191070 #elif defined(__clang__)
191071         "sbcs	r4, r6\n\t"
191072 #else
191073         "sbc	r4, r6\n\t"
191074 #endif
191075         "stm	%[r]!, {r3, r4}\n\t"
191076         "ldm	%[b]!, {r5, r6}\n\t"
191077         "ldm	%[a]!, {r3, r4}\n\t"
191078 #ifdef WOLFSSL_KEIL
191079         "sbcs	r3, r3, r5\n\t"
191080 #elif defined(__clang__)
191081         "sbcs	r3, r5\n\t"
191082 #else
191083         "sbc	r3, r5\n\t"
191084 #endif
191085 #ifdef WOLFSSL_KEIL
191086         "sbcs	r4, r4, r6\n\t"
191087 #elif defined(__clang__)
191088         "sbcs	r4, r6\n\t"
191089 #else
191090         "sbc	r4, r6\n\t"
191091 #endif
191092         "stm	%[r]!, {r3, r4}\n\t"
191093         "ldm	%[b]!, {r5, r6}\n\t"
191094         "ldm	%[a]!, {r3, r4}\n\t"
191095 #ifdef WOLFSSL_KEIL
191096         "sbcs	r3, r3, r5\n\t"
191097 #elif defined(__clang__)
191098         "sbcs	r3, r5\n\t"
191099 #else
191100         "sbc	r3, r5\n\t"
191101 #endif
191102 #ifdef WOLFSSL_KEIL
191103         "sbcs	r4, r4, r6\n\t"
191104 #elif defined(__clang__)
191105         "sbcs	r4, r6\n\t"
191106 #else
191107         "sbc	r4, r6\n\t"
191108 #endif
191109         "stm	%[r]!, {r3, r4}\n\t"
191110         "ldm	%[b]!, {r5, r6}\n\t"
191111         "ldm	%[a]!, {r3, r4}\n\t"
191112 #ifdef WOLFSSL_KEIL
191113         "sbcs	r3, r3, r5\n\t"
191114 #elif defined(__clang__)
191115         "sbcs	r3, r5\n\t"
191116 #else
191117         "sbc	r3, r5\n\t"
191118 #endif
191119 #ifdef WOLFSSL_KEIL
191120         "sbcs	r4, r4, r6\n\t"
191121 #elif defined(__clang__)
191122         "sbcs	r4, r6\n\t"
191123 #else
191124         "sbc	r4, r6\n\t"
191125 #endif
191126         "stm	%[r]!, {r3, r4}\n\t"
191127         "ldm	%[b]!, {r5, r6}\n\t"
191128         "ldm	%[a]!, {r3, r4}\n\t"
191129 #ifdef WOLFSSL_KEIL
191130         "sbcs	r3, r3, r5\n\t"
191131 #elif defined(__clang__)
191132         "sbcs	r3, r5\n\t"
191133 #else
191134         "sbc	r3, r5\n\t"
191135 #endif
191136 #ifdef WOLFSSL_KEIL
191137         "sbcs	r4, r4, r6\n\t"
191138 #elif defined(__clang__)
191139         "sbcs	r4, r6\n\t"
191140 #else
191141         "sbc	r4, r6\n\t"
191142 #endif
191143         "stm	%[r]!, {r3, r4}\n\t"
191144         "ldm	%[b]!, {r5, r6}\n\t"
191145         "ldm	%[a]!, {r3, r4}\n\t"
191146 #ifdef WOLFSSL_KEIL
191147         "sbcs	r3, r3, r5\n\t"
191148 #elif defined(__clang__)
191149         "sbcs	r3, r5\n\t"
191150 #else
191151         "sbc	r3, r5\n\t"
191152 #endif
191153 #ifdef WOLFSSL_KEIL
191154         "sbcs	r4, r4, r6\n\t"
191155 #elif defined(__clang__)
191156         "sbcs	r4, r6\n\t"
191157 #else
191158         "sbc	r4, r6\n\t"
191159 #endif
191160         "stm	%[r]!, {r3, r4}\n\t"
191161         "ldm	%[b]!, {r5, r6}\n\t"
191162         "ldm	%[a]!, {r3, r4}\n\t"
191163 #ifdef WOLFSSL_KEIL
191164         "sbcs	r3, r3, r5\n\t"
191165 #elif defined(__clang__)
191166         "sbcs	r3, r5\n\t"
191167 #else
191168         "sbc	r3, r5\n\t"
191169 #endif
191170 #ifdef WOLFSSL_KEIL
191171         "sbcs	r4, r4, r6\n\t"
191172 #elif defined(__clang__)
191173         "sbcs	r4, r6\n\t"
191174 #else
191175         "sbc	r4, r6\n\t"
191176 #endif
191177         "stm	%[r]!, {r3, r4}\n\t"
191178         "ldm	%[b]!, {r5, r6}\n\t"
191179         "ldm	%[a]!, {r3, r4}\n\t"
191180 #ifdef WOLFSSL_KEIL
191181         "sbcs	r3, r3, r5\n\t"
191182 #elif defined(__clang__)
191183         "sbcs	r3, r5\n\t"
191184 #else
191185         "sbc	r3, r5\n\t"
191186 #endif
191187 #ifdef WOLFSSL_KEIL
191188         "sbcs	r4, r4, r6\n\t"
191189 #elif defined(__clang__)
191190         "sbcs	r4, r6\n\t"
191191 #else
191192         "sbc	r4, r6\n\t"
191193 #endif
191194         "stm	%[r]!, {r3, r4}\n\t"
191195         "ldm	%[b]!, {r5, r6}\n\t"
191196         "ldm	%[a]!, {r3, r4}\n\t"
191197 #ifdef WOLFSSL_KEIL
191198         "sbcs	r3, r3, r5\n\t"
191199 #elif defined(__clang__)
191200         "sbcs	r3, r5\n\t"
191201 #else
191202         "sbc	r3, r5\n\t"
191203 #endif
191204 #ifdef WOLFSSL_KEIL
191205         "sbcs	r4, r4, r6\n\t"
191206 #elif defined(__clang__)
191207         "sbcs	r4, r6\n\t"
191208 #else
191209         "sbc	r4, r6\n\t"
191210 #endif
191211         "stm	%[r]!, {r3, r4}\n\t"
191212         "ldm	%[b]!, {r5, r6}\n\t"
191213         "ldm	%[a]!, {r3, r4}\n\t"
191214 #ifdef WOLFSSL_KEIL
191215         "sbcs	r3, r3, r5\n\t"
191216 #elif defined(__clang__)
191217         "sbcs	r3, r5\n\t"
191218 #else
191219         "sbc	r3, r5\n\t"
191220 #endif
191221 #ifdef WOLFSSL_KEIL
191222         "sbcs	r4, r4, r6\n\t"
191223 #elif defined(__clang__)
191224         "sbcs	r4, r6\n\t"
191225 #else
191226         "sbc	r4, r6\n\t"
191227 #endif
191228         "stm	%[r]!, {r3, r4}\n\t"
191229         "ldm	%[b]!, {r5, r6}\n\t"
191230         "ldm	%[a]!, {r3, r4}\n\t"
191231 #ifdef WOLFSSL_KEIL
191232         "sbcs	r3, r3, r5\n\t"
191233 #elif defined(__clang__)
191234         "sbcs	r3, r5\n\t"
191235 #else
191236         "sbc	r3, r5\n\t"
191237 #endif
191238 #ifdef WOLFSSL_KEIL
191239         "sbcs	r4, r4, r6\n\t"
191240 #elif defined(__clang__)
191241         "sbcs	r4, r6\n\t"
191242 #else
191243         "sbc	r4, r6\n\t"
191244 #endif
191245         "stm	%[r]!, {r3, r4}\n\t"
191246         "ldm	%[b]!, {r5, r6}\n\t"
191247         "ldm	%[a]!, {r3, r4}\n\t"
191248 #ifdef WOLFSSL_KEIL
191249         "sbcs	r3, r3, r5\n\t"
191250 #elif defined(__clang__)
191251         "sbcs	r3, r5\n\t"
191252 #else
191253         "sbc	r3, r5\n\t"
191254 #endif
191255 #ifdef WOLFSSL_KEIL
191256         "sbcs	r4, r4, r6\n\t"
191257 #elif defined(__clang__)
191258         "sbcs	r4, r6\n\t"
191259 #else
191260         "sbc	r4, r6\n\t"
191261 #endif
191262         "stm	%[r]!, {r3, r4}\n\t"
191263         "ldm	%[b]!, {r5, r6}\n\t"
191264         "ldm	%[a]!, {r3, r4}\n\t"
191265 #ifdef WOLFSSL_KEIL
191266         "sbcs	r3, r3, r5\n\t"
191267 #elif defined(__clang__)
191268         "sbcs	r3, r5\n\t"
191269 #else
191270         "sbc	r3, r5\n\t"
191271 #endif
191272 #ifdef WOLFSSL_KEIL
191273         "sbcs	r4, r4, r6\n\t"
191274 #elif defined(__clang__)
191275         "sbcs	r4, r6\n\t"
191276 #else
191277         "sbc	r4, r6\n\t"
191278 #endif
191279         "stm	%[r]!, {r3, r4}\n\t"
191280 #ifdef WOLFSSL_KEIL
191281         "sbcs	%[r], %[r], %[r]\n\t"
191282 #elif defined(__clang__)
191283         "sbcs	%[r], %[r]\n\t"
191284 #else
191285         "sbc	%[r], %[r]\n\t"
191286 #endif
191287         : [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
191288         :
191289         : "memory", "r3", "r4", "r5", "r6"
191290     );
191291     return (uint32_t)(size_t)r;
191292 }
191293 
191294 #endif /* WOLFSSL_SP_SMALL */
191295 /* Compare two numbers to determine if they are equal.
191296  * Constant time implementation.
191297  *
191298  * a  First number to compare.
191299  * b  Second number to compare.
191300  * returns 1 when equal and 0 otherwise.
191301  */
sp_1024_cmp_equal_32(const sp_digit * a,const sp_digit * b)191302 static int sp_1024_cmp_equal_32(const sp_digit* a, const sp_digit* b)
191303 {
191304     return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2]) |
191305             (a[3] ^ b[3]) | (a[4] ^ b[4]) | (a[5] ^ b[5]) |
191306             (a[6] ^ b[6]) | (a[7] ^ b[7]) | (a[8] ^ b[8]) |
191307             (a[9] ^ b[9]) | (a[10] ^ b[10]) | (a[11] ^ b[11]) |
191308             (a[12] ^ b[12]) | (a[13] ^ b[13]) | (a[14] ^ b[14]) |
191309             (a[15] ^ b[15]) | (a[16] ^ b[16]) | (a[17] ^ b[17]) |
191310             (a[18] ^ b[18]) | (a[19] ^ b[19]) | (a[20] ^ b[20]) |
191311             (a[21] ^ b[21]) | (a[22] ^ b[22]) | (a[23] ^ b[23]) |
191312             (a[24] ^ b[24]) | (a[25] ^ b[25]) | (a[26] ^ b[26]) |
191313             (a[27] ^ b[27]) | (a[28] ^ b[28]) | (a[29] ^ b[29]) |
191314             (a[30] ^ b[30]) | (a[31] ^ b[31])) == 0;
191315 }
191316 
191317 /* Add two Montgomery form projective points.
191318  *
191319  * r  Result of addition.
191320  * p  First point to add.
191321  * q  Second point to add.
191322  * t  Temporary ordinate data.
191323  */
191324 
191325 #ifdef WOLFSSL_SP_NONBLOCK
191326 typedef struct sp_1024_proj_point_add_32_ctx {
191327     int state;
191328     sp_1024_proj_point_dbl_32_ctx dbl_ctx;
191329     const sp_point_1024* ap[2];
191330     sp_point_1024* rp[2];
191331     sp_digit* t1;
191332     sp_digit* t2;
191333     sp_digit* t3;
191334     sp_digit* t4;
191335     sp_digit* t5;
191336     sp_digit* x;
191337     sp_digit* y;
191338     sp_digit* z;
191339 } sp_1024_proj_point_add_32_ctx;
191340 
sp_1024_proj_point_add_32_nb(sp_ecc_ctx_t * sp_ctx,sp_point_1024 * r,const sp_point_1024 * p,const sp_point_1024 * q,sp_digit * t)191341 static int sp_1024_proj_point_add_32_nb(sp_ecc_ctx_t* sp_ctx, sp_point_1024* r,
191342     const sp_point_1024* p, const sp_point_1024* q, sp_digit* t)
191343 {
191344     int err = FP_WOULDBLOCK;
191345     sp_1024_proj_point_add_32_ctx* ctx = (sp_1024_proj_point_add_32_ctx*)sp_ctx->data;
191346 
191347     /* Ensure only the first point is the same as the result. */
191348     if (q == r) {
191349         const sp_point_1024* a = p;
191350         p = q;
191351         q = a;
191352     }
191353 
191354     typedef char ctx_size_test[sizeof(sp_1024_proj_point_add_32_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
191355     (void)sizeof(ctx_size_test);
191356 
191357     switch (ctx->state) {
191358     case 0: /* INIT */
191359         ctx->t1 = t;
191360         ctx->t2 = t + 2*32;
191361         ctx->t3 = t + 4*32;
191362         ctx->t4 = t + 6*32;
191363         ctx->t5 = t + 8*32;
191364 
191365         ctx->state = 1;
191366         break;
191367     case 1:
191368         /* Check double */
191369         (void)sp_1024_sub_32(ctx->t1, p1024_mod, q->y);
191370         sp_1024_norm_32(ctx->t1);
191371         if ((sp_1024_cmp_equal_32(p->x, q->x) & sp_1024_cmp_equal_32(p->z, q->z) &
191372             (sp_1024_cmp_equal_32(p->y, q->y) | sp_1024_cmp_equal_32(p->y, ctx->t1))) != 0)
191373         {
191374             XMEMSET(&ctx->dbl_ctx, 0, sizeof(ctx->dbl_ctx));
191375             ctx->state = 2;
191376         }
191377         else {
191378             ctx->state = 3;
191379         }
191380         break;
191381     case 2:
191382         err = sp_1024_proj_point_dbl_32_nb((sp_ecc_ctx_t*)&ctx->dbl_ctx, r, p, t);
191383         if (err == MP_OKAY)
191384             ctx->state = 27; /* done */
191385         break;
191386     case 3:
191387     {
191388         int i;
191389         ctx->rp[0] = r;
191390 
191391         /*lint allow cast to different type of pointer*/
191392         ctx->rp[1] = (sp_point_1024*)t; /*lint !e9087 !e740*/
191393         XMEMSET(ctx->rp[1], 0, sizeof(sp_point_1024));
191394         ctx->x = ctx->rp[p->infinity | q->infinity]->x;
191395         ctx->y = ctx->rp[p->infinity | q->infinity]->y;
191396         ctx->z = ctx->rp[p->infinity | q->infinity]->z;
191397 
191398         ctx->ap[0] = p;
191399         ctx->ap[1] = q;
191400         for (i=0; i<32; i++) {
191401             r->x[i] = ctx->ap[p->infinity]->x[i];
191402         }
191403         for (i=0; i<32; i++) {
191404             r->y[i] = ctx->ap[p->infinity]->y[i];
191405         }
191406         for (i=0; i<32; i++) {
191407             r->z[i] = ctx->ap[p->infinity]->z[i];
191408         }
191409         r->infinity = ctx->ap[p->infinity]->infinity;
191410 
191411         ctx->state = 4;
191412         break;
191413     }
191414     case 4:
191415         /* U1 = X1*Z2^2 */
191416         sp_1024_mont_sqr_32(ctx->t1, q->z, p1024_mod, p1024_mp_mod);
191417         ctx->state = 5;
191418         break;
191419     case 5:
191420         sp_1024_mont_mul_32(ctx->t3, ctx->t1, q->z, p1024_mod, p1024_mp_mod);
191421         ctx->state = 6;
191422         break;
191423     case 6:
191424         sp_1024_mont_mul_32(ctx->t1, ctx->t1, ctx->x, p1024_mod, p1024_mp_mod);
191425         ctx->state = 7;
191426         break;
191427     case 7:
191428         /* U2 = X2*Z1^2 */
191429         sp_1024_mont_sqr_32(ctx->t2, ctx->z, p1024_mod, p1024_mp_mod);
191430         ctx->state = 8;
191431         break;
191432     case 8:
191433         sp_1024_mont_mul_32(ctx->t4, ctx->t2, ctx->z, p1024_mod, p1024_mp_mod);
191434         ctx->state = 9;
191435         break;
191436     case 9:
191437         sp_1024_mont_mul_32(ctx->t2, ctx->t2, q->x, p1024_mod, p1024_mp_mod);
191438         ctx->state = 10;
191439         break;
191440     case 10:
191441         /* S1 = Y1*Z2^3 */
191442         sp_1024_mont_mul_32(ctx->t3, ctx->t3, ctx->y, p1024_mod, p1024_mp_mod);
191443         ctx->state = 11;
191444         break;
191445     case 11:
191446         /* S2 = Y2*Z1^3 */
191447         sp_1024_mont_mul_32(ctx->t4, ctx->t4, q->y, p1024_mod, p1024_mp_mod);
191448         ctx->state = 12;
191449         break;
191450     case 12:
191451         /* H = U2 - U1 */
191452         sp_1024_mont_sub_32(ctx->t2, ctx->t2, ctx->t1, p1024_mod);
191453         ctx->state = 13;
191454         break;
191455     case 13:
191456         /* R = S2 - S1 */
191457         sp_1024_mont_sub_32(ctx->t4, ctx->t4, ctx->t3, p1024_mod);
191458         ctx->state = 14;
191459         break;
191460     case 14:
191461         /* Z3 = H*Z1*Z2 */
191462         sp_1024_mont_mul_32(ctx->z, ctx->z, q->z, p1024_mod, p1024_mp_mod);
191463         ctx->state = 15;
191464         break;
191465     case 15:
191466         sp_1024_mont_mul_32(ctx->z, ctx->z, ctx->t2, p1024_mod, p1024_mp_mod);
191467         ctx->state = 16;
191468         break;
191469     case 16:
191470         /* X3 = R^2 - H^3 - 2*U1*H^2 */
191471         sp_1024_mont_sqr_32(ctx->x, ctx->t4, p1024_mod, p1024_mp_mod);
191472         ctx->state = 17;
191473         break;
191474     case 17:
191475         sp_1024_mont_sqr_32(ctx->t5, ctx->t2, p1024_mod, p1024_mp_mod);
191476         ctx->state = 18;
191477         break;
191478     case 18:
191479         sp_1024_mont_mul_32(ctx->y, ctx->t1, ctx->t5, p1024_mod, p1024_mp_mod);
191480         ctx->state = 19;
191481         break;
191482     case 19:
191483         sp_1024_mont_mul_32(ctx->t5, ctx->t5, ctx->t2, p1024_mod, p1024_mp_mod);
191484         ctx->state = 20;
191485         break;
191486     case 20:
191487         sp_1024_mont_sub_32(ctx->x, ctx->x, ctx->t5, p1024_mod);
191488         ctx->state = 21;
191489         break;
191490     case 21:
191491         sp_1024_mont_dbl_32(ctx->t1, ctx->y, p1024_mod);
191492         ctx->state = 22;
191493         break;
191494     case 22:
191495         sp_1024_mont_sub_32(ctx->x, ctx->x, ctx->t1, p1024_mod);
191496         ctx->state = 23;
191497         break;
191498     case 23:
191499         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
191500         sp_1024_mont_sub_32(ctx->y, ctx->y, ctx->x, p1024_mod);
191501         ctx->state = 24;
191502         break;
191503     case 24:
191504         sp_1024_mont_mul_32(ctx->y, ctx->y, ctx->t4, p1024_mod, p1024_mp_mod);
191505         ctx->state = 25;
191506         break;
191507     case 25:
191508         sp_1024_mont_mul_32(ctx->t5, ctx->t5, ctx->t3, p1024_mod, p1024_mp_mod);
191509         ctx->state = 26;
191510         break;
191511     case 26:
191512         sp_1024_mont_sub_32(ctx->y, ctx->y, ctx->t5, p1024_mod);
191513         ctx->state = 27;
191514         /* fall-through */
191515     case 27:
191516         err = MP_OKAY;
191517         break;
191518     }
191519 
191520     if (err == MP_OKAY && ctx->state != 27) {
191521         err = FP_WOULDBLOCK;
191522     }
191523     return err;
191524 }
191525 #endif /* WOLFSSL_SP_NONBLOCK */
191526 
sp_1024_proj_point_add_32(sp_point_1024 * r,const sp_point_1024 * p,const sp_point_1024 * q,sp_digit * t)191527 static void sp_1024_proj_point_add_32(sp_point_1024* r,
191528         const sp_point_1024* p, const sp_point_1024* q, sp_digit* t)
191529 {
191530     const sp_point_1024* ap[2];
191531     sp_point_1024* rp[2];
191532     sp_digit* t1 = t;
191533     sp_digit* t2 = t + 2*32;
191534     sp_digit* t3 = t + 4*32;
191535     sp_digit* t4 = t + 6*32;
191536     sp_digit* t5 = t + 8*32;
191537     sp_digit* x;
191538     sp_digit* y;
191539     sp_digit* z;
191540     int i;
191541 
191542     /* Ensure only the first point is the same as the result. */
191543     if (q == r) {
191544         const sp_point_1024* a = p;
191545         p = q;
191546         q = a;
191547     }
191548 
191549     /* Check double */
191550     (void)sp_1024_mont_sub_32(t1, p1024_mod, q->y, p1024_mod);
191551     sp_1024_norm_32(t1);
191552     if ((sp_1024_cmp_equal_32(p->x, q->x) & sp_1024_cmp_equal_32(p->z, q->z) &
191553         (sp_1024_cmp_equal_32(p->y, q->y) | sp_1024_cmp_equal_32(p->y, t1))) != 0) {
191554         sp_1024_proj_point_dbl_32(r, p, t);
191555     }
191556     else {
191557         rp[0] = r;
191558 
191559         /*lint allow cast to different type of pointer*/
191560         rp[1] = (sp_point_1024*)t; /*lint !e9087 !e740*/
191561         XMEMSET(rp[1], 0, sizeof(sp_point_1024));
191562         x = rp[p->infinity | q->infinity]->x;
191563         y = rp[p->infinity | q->infinity]->y;
191564         z = rp[p->infinity | q->infinity]->z;
191565 
191566         ap[0] = p;
191567         ap[1] = q;
191568         for (i=0; i<32; i++) {
191569             r->x[i] = ap[p->infinity]->x[i];
191570         }
191571         for (i=0; i<32; i++) {
191572             r->y[i] = ap[p->infinity]->y[i];
191573         }
191574         for (i=0; i<32; i++) {
191575             r->z[i] = ap[p->infinity]->z[i];
191576         }
191577         r->infinity = ap[p->infinity]->infinity;
191578 
191579         /* U1 = X1*Z2^2 */
191580         sp_1024_mont_sqr_32(t1, q->z, p1024_mod, p1024_mp_mod);
191581         sp_1024_mont_mul_32(t3, t1, q->z, p1024_mod, p1024_mp_mod);
191582         sp_1024_mont_mul_32(t1, t1, x, p1024_mod, p1024_mp_mod);
191583         /* U2 = X2*Z1^2 */
191584         sp_1024_mont_sqr_32(t2, z, p1024_mod, p1024_mp_mod);
191585         sp_1024_mont_mul_32(t4, t2, z, p1024_mod, p1024_mp_mod);
191586         sp_1024_mont_mul_32(t2, t2, q->x, p1024_mod, p1024_mp_mod);
191587         /* S1 = Y1*Z2^3 */
191588         sp_1024_mont_mul_32(t3, t3, y, p1024_mod, p1024_mp_mod);
191589         /* S2 = Y2*Z1^3 */
191590         sp_1024_mont_mul_32(t4, t4, q->y, p1024_mod, p1024_mp_mod);
191591         /* H = U2 - U1 */
191592         sp_1024_mont_sub_32(t2, t2, t1, p1024_mod);
191593         /* R = S2 - S1 */
191594         sp_1024_mont_sub_32(t4, t4, t3, p1024_mod);
191595         /* Z3 = H*Z1*Z2 */
191596         sp_1024_mont_mul_32(z, z, q->z, p1024_mod, p1024_mp_mod);
191597         sp_1024_mont_mul_32(z, z, t2, p1024_mod, p1024_mp_mod);
191598         /* X3 = R^2 - H^3 - 2*U1*H^2 */
191599         sp_1024_mont_sqr_32(x, t4, p1024_mod, p1024_mp_mod);
191600         sp_1024_mont_sqr_32(t5, t2, p1024_mod, p1024_mp_mod);
191601         sp_1024_mont_mul_32(y, t1, t5, p1024_mod, p1024_mp_mod);
191602         sp_1024_mont_mul_32(t5, t5, t2, p1024_mod, p1024_mp_mod);
191603         sp_1024_mont_sub_32(x, x, t5, p1024_mod);
191604         sp_1024_mont_dbl_32(t1, y, p1024_mod);
191605         sp_1024_mont_sub_32(x, x, t1, p1024_mod);
191606         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
191607         sp_1024_mont_sub_32(y, y, x, p1024_mod);
191608         sp_1024_mont_mul_32(y, y, t4, p1024_mod, p1024_mp_mod);
191609         sp_1024_mont_mul_32(t5, t5, t3, p1024_mod, p1024_mp_mod);
191610         sp_1024_mont_sub_32(y, y, t5, p1024_mod);
191611     }
191612 }
191613 
191614 /* Multiply the point by the scalar and return the result.
191615  * If map is true then convert result to affine coordinates.
191616  *
191617  * Fast implementation that generates a pre-computation table.
191618  * 4 bits of window (no sliding!).
191619  * Uses add and double for calculating table.
191620  * 1024 doubles.
191621  * 268 adds.
191622  *
191623  * r     Resulting point.
191624  * g     Point to multiply.
191625  * k     Scalar to multiply by.
191626  * map   Indicates whether to convert result to affine.
191627  * ct    Constant time required.
191628  * heap  Heap to use for allocation.
191629  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
191630  */
sp_1024_ecc_mulmod_fast_32(sp_point_1024 * r,const sp_point_1024 * g,const sp_digit * k,int map,int ct,void * heap)191631 static int sp_1024_ecc_mulmod_fast_32(sp_point_1024* r, const sp_point_1024* g, const sp_digit* k,
191632         int map, int ct, void* heap)
191633 {
191634 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
191635     sp_point_1024* t = NULL;
191636     sp_digit* tmp = NULL;
191637 #else
191638     sp_point_1024 t[16 + 1];
191639     sp_digit tmp[2 * 32 * 5];
191640 #endif
191641     sp_point_1024* rt = NULL;
191642     sp_digit n;
191643     int i;
191644     int c;
191645     int y;
191646     int err = MP_OKAY;
191647 
191648     /* Constant time used for cache attack resistance implementation. */
191649     (void)ct;
191650     (void)heap;
191651 
191652 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
191653     t = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024) * (16 + 1),
191654         heap, DYNAMIC_TYPE_ECC);
191655     if (t == NULL)
191656         err = MEMORY_E;
191657     if (err == MP_OKAY) {
191658         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 32 * 5, heap,
191659                                 DYNAMIC_TYPE_ECC);
191660         if (tmp == NULL)
191661             err = MEMORY_E;
191662     }
191663 #endif
191664 
191665     if (err == MP_OKAY) {
191666         rt = t + 16;
191667 
191668         /* t[0] = {0, 0, 1} * norm */
191669         XMEMSET(&t[0], 0, sizeof(t[0]));
191670         t[0].infinity = 1;
191671         /* t[1] = {g->x, g->y, g->z} * norm */
191672         (void)sp_1024_mod_mul_norm_32(t[1].x, g->x, p1024_mod);
191673         (void)sp_1024_mod_mul_norm_32(t[1].y, g->y, p1024_mod);
191674         (void)sp_1024_mod_mul_norm_32(t[1].z, g->z, p1024_mod);
191675         t[1].infinity = 0;
191676         sp_1024_proj_point_dbl_32(&t[ 2], &t[ 1], tmp);
191677         t[ 2].infinity = 0;
191678         sp_1024_proj_point_add_32(&t[ 3], &t[ 2], &t[ 1], tmp);
191679         t[ 3].infinity = 0;
191680         sp_1024_proj_point_dbl_32(&t[ 4], &t[ 2], tmp);
191681         t[ 4].infinity = 0;
191682         sp_1024_proj_point_add_32(&t[ 5], &t[ 3], &t[ 2], tmp);
191683         t[ 5].infinity = 0;
191684         sp_1024_proj_point_dbl_32(&t[ 6], &t[ 3], tmp);
191685         t[ 6].infinity = 0;
191686         sp_1024_proj_point_add_32(&t[ 7], &t[ 4], &t[ 3], tmp);
191687         t[ 7].infinity = 0;
191688         sp_1024_proj_point_dbl_32(&t[ 8], &t[ 4], tmp);
191689         t[ 8].infinity = 0;
191690         sp_1024_proj_point_add_32(&t[ 9], &t[ 5], &t[ 4], tmp);
191691         t[ 9].infinity = 0;
191692         sp_1024_proj_point_dbl_32(&t[10], &t[ 5], tmp);
191693         t[10].infinity = 0;
191694         sp_1024_proj_point_add_32(&t[11], &t[ 6], &t[ 5], tmp);
191695         t[11].infinity = 0;
191696         sp_1024_proj_point_dbl_32(&t[12], &t[ 6], tmp);
191697         t[12].infinity = 0;
191698         sp_1024_proj_point_add_32(&t[13], &t[ 7], &t[ 6], tmp);
191699         t[13].infinity = 0;
191700         sp_1024_proj_point_dbl_32(&t[14], &t[ 7], tmp);
191701         t[14].infinity = 0;
191702         sp_1024_proj_point_add_32(&t[15], &t[ 8], &t[ 7], tmp);
191703         t[15].infinity = 0;
191704 
191705         i = 30;
191706         n = k[i+1] << 0;
191707         c = 28;
191708         y = (int)(n >> 28);
191709         XMEMCPY(rt, &t[y], sizeof(sp_point_1024));
191710         n <<= 4;
191711         for (; i>=0 || c>=4; ) {
191712             if (c < 4) {
191713                 n |= k[i--];
191714                 c += 32;
191715             }
191716             y = (n >> 28) & 0xf;
191717             n <<= 4;
191718             c -= 4;
191719 
191720             sp_1024_proj_point_dbl_32(rt, rt, tmp);
191721             sp_1024_proj_point_dbl_32(rt, rt, tmp);
191722             sp_1024_proj_point_dbl_32(rt, rt, tmp);
191723             sp_1024_proj_point_dbl_32(rt, rt, tmp);
191724             sp_1024_proj_point_add_32(rt, rt, &t[y], tmp);
191725         }
191726 
191727         if (map != 0) {
191728             sp_1024_map_32(r, rt, tmp);
191729         }
191730         else {
191731             XMEMCPY(r, rt, sizeof(sp_point_1024));
191732         }
191733     }
191734 
191735 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
191736     if (tmp != NULL)
191737 #endif
191738     {
191739         ForceZero(tmp, sizeof(sp_digit) * 2 * 32 * 5);
191740     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
191741         XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
191742     #endif
191743     }
191744 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
191745     if (t != NULL)
191746 #endif
191747     {
191748         ForceZero(t, sizeof(sp_point_1024) * 17);
191749     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
191750         XFREE(t, heap, DYNAMIC_TYPE_ECC);
191751     #endif
191752     }
191753 
191754     return err;
191755 }
191756 
191757 #if defined(FP_ECC) || !defined(WOLFSSL_SP_SMALL)
191758 /* Double the Montgomery form projective point p a number of times.
191759  *
191760  * r  Result of repeated doubling of point.
191761  * p  Point to double.
191762  * n  Number of times to double
191763  * t  Temporary ordinate data.
191764  */
sp_1024_proj_point_dbl_n_32(sp_point_1024 * p,int n,sp_digit * t)191765 static void sp_1024_proj_point_dbl_n_32(sp_point_1024* p, int n,
191766     sp_digit* t)
191767 {
191768     sp_digit* w = t;
191769     sp_digit* a = t + 2*32;
191770     sp_digit* b = t + 4*32;
191771     sp_digit* t1 = t + 6*32;
191772     sp_digit* t2 = t + 8*32;
191773     sp_digit* x;
191774     sp_digit* y;
191775     sp_digit* z;
191776 
191777     x = p->x;
191778     y = p->y;
191779     z = p->z;
191780 
191781     /* Y = 2*Y */
191782     sp_1024_mont_dbl_32(y, y, p1024_mod);
191783     /* W = Z^4 */
191784     sp_1024_mont_sqr_32(w, z, p1024_mod, p1024_mp_mod);
191785     sp_1024_mont_sqr_32(w, w, p1024_mod, p1024_mp_mod);
191786 
191787 #ifndef WOLFSSL_SP_SMALL
191788     while (--n > 0)
191789 #else
191790     while (--n >= 0)
191791 #endif
191792     {
191793         /* A = 3*(X^2 - W) */
191794         sp_1024_mont_sqr_32(t1, x, p1024_mod, p1024_mp_mod);
191795         sp_1024_mont_sub_32(t1, t1, w, p1024_mod);
191796         sp_1024_mont_tpl_32(a, t1, p1024_mod);
191797         /* B = X*Y^2 */
191798         sp_1024_mont_sqr_32(t1, y, p1024_mod, p1024_mp_mod);
191799         sp_1024_mont_mul_32(b, t1, x, p1024_mod, p1024_mp_mod);
191800         /* X = A^2 - 2B */
191801         sp_1024_mont_sqr_32(x, a, p1024_mod, p1024_mp_mod);
191802         sp_1024_mont_dbl_32(t2, b, p1024_mod);
191803         sp_1024_mont_sub_32(x, x, t2, p1024_mod);
191804         /* Z = Z*Y */
191805         sp_1024_mont_mul_32(z, z, y, p1024_mod, p1024_mp_mod);
191806         /* t2 = Y^4 */
191807         sp_1024_mont_sqr_32(t1, t1, p1024_mod, p1024_mp_mod);
191808 #ifdef WOLFSSL_SP_SMALL
191809         if (n != 0)
191810 #endif
191811         {
191812             /* W = W*Y^4 */
191813             sp_1024_mont_mul_32(w, w, t1, p1024_mod, p1024_mp_mod);
191814         }
191815         /* y = 2*A*(B - X) - Y^4 */
191816         sp_1024_mont_sub_32(y, b, x, p1024_mod);
191817         sp_1024_mont_mul_32(y, y, a, p1024_mod, p1024_mp_mod);
191818         sp_1024_mont_dbl_32(y, y, p1024_mod);
191819         sp_1024_mont_sub_32(y, y, t1, p1024_mod);
191820     }
191821 #ifndef WOLFSSL_SP_SMALL
191822     /* A = 3*(X^2 - W) */
191823     sp_1024_mont_sqr_32(t1, x, p1024_mod, p1024_mp_mod);
191824     sp_1024_mont_sub_32(t1, t1, w, p1024_mod);
191825     sp_1024_mont_tpl_32(a, t1, p1024_mod);
191826     /* B = X*Y^2 */
191827     sp_1024_mont_sqr_32(t1, y, p1024_mod, p1024_mp_mod);
191828     sp_1024_mont_mul_32(b, t1, x, p1024_mod, p1024_mp_mod);
191829     /* X = A^2 - 2B */
191830     sp_1024_mont_sqr_32(x, a, p1024_mod, p1024_mp_mod);
191831     sp_1024_mont_dbl_32(t2, b, p1024_mod);
191832     sp_1024_mont_sub_32(x, x, t2, p1024_mod);
191833     /* Z = Z*Y */
191834     sp_1024_mont_mul_32(z, z, y, p1024_mod, p1024_mp_mod);
191835     /* t2 = Y^4 */
191836     sp_1024_mont_sqr_32(t1, t1, p1024_mod, p1024_mp_mod);
191837     /* y = 2*A*(B - X) - Y^4 */
191838     sp_1024_mont_sub_32(y, b, x, p1024_mod);
191839     sp_1024_mont_mul_32(y, y, a, p1024_mod, p1024_mp_mod);
191840     sp_1024_mont_dbl_32(y, y, p1024_mod);
191841     sp_1024_mont_sub_32(y, y, t1, p1024_mod);
191842 #endif
191843     /* Y = Y/2 */
191844     sp_1024_div2_32(y, y, p1024_mod);
191845 }
191846 
191847 /* Convert the projective point to affine.
191848  * Ordinates are in Montgomery form.
191849  *
191850  * a  Point to convert.
191851  * t  Temporary data.
191852  */
sp_1024_proj_to_affine_32(sp_point_1024 * a,sp_digit * t)191853 static void sp_1024_proj_to_affine_32(sp_point_1024* a, sp_digit* t)
191854 {
191855     sp_digit* t1 = t;
191856     sp_digit* t2 = t + 2 * 32;
191857     sp_digit* tmp = t + 4 * 32;
191858 
191859     sp_1024_mont_inv_32(t1, a->z, tmp);
191860 
191861     sp_1024_mont_sqr_32(t2, t1, p1024_mod, p1024_mp_mod);
191862     sp_1024_mont_mul_32(t1, t2, t1, p1024_mod, p1024_mp_mod);
191863 
191864     sp_1024_mont_mul_32(a->x, a->x, t2, p1024_mod, p1024_mp_mod);
191865     sp_1024_mont_mul_32(a->y, a->y, t1, p1024_mod, p1024_mp_mod);
191866     XMEMCPY(a->z, p1024_norm_mod, sizeof(p1024_norm_mod));
191867 }
191868 
191869 #endif /* FP_ECC || !WOLFSSL_SP_SMALL */
191870 /* A table entry for pre-computed points. */
191871 typedef struct sp_table_entry_1024 {
191872     sp_digit x[32];
191873     sp_digit y[32];
191874 } sp_table_entry_1024;
191875 
191876 #ifdef FP_ECC
191877 #endif /* FP_ECC */
191878 /* Add two Montgomery form projective points. The second point has a q value of
191879  * one.
191880  * Only the first point can be the same pointer as the result point.
191881  *
191882  * r  Result of addition.
191883  * p  First point to add.
191884  * q  Second point to add.
191885  * t  Temporary ordinate data.
191886  */
sp_1024_proj_point_add_qz1_32(sp_point_1024 * r,const sp_point_1024 * p,const sp_point_1024 * q,sp_digit * t)191887 static void sp_1024_proj_point_add_qz1_32(sp_point_1024* r, const sp_point_1024* p,
191888         const sp_point_1024* q, sp_digit* t)
191889 {
191890     const sp_point_1024* ap[2];
191891     sp_point_1024* rp[2];
191892     sp_digit* t1 = t;
191893     sp_digit* t2 = t + 2*32;
191894     sp_digit* t3 = t + 4*32;
191895     sp_digit* t4 = t + 6*32;
191896     sp_digit* t5 = t + 8*32;
191897     sp_digit* x;
191898     sp_digit* y;
191899     sp_digit* z;
191900     int i;
191901 
191902     /* Check double */
191903     (void)sp_1024_mont_sub_32(t1, p1024_mod, q->y, p1024_mod);
191904     sp_1024_norm_32(t1);
191905     if ((sp_1024_cmp_equal_32(p->x, q->x) & sp_1024_cmp_equal_32(p->z, q->z) &
191906         (sp_1024_cmp_equal_32(p->y, q->y) | sp_1024_cmp_equal_32(p->y, t1))) != 0) {
191907         sp_1024_proj_point_dbl_32(r, p, t);
191908     }
191909     else {
191910         rp[0] = r;
191911 
191912         /*lint allow cast to different type of pointer*/
191913         rp[1] = (sp_point_1024*)t; /*lint !e9087 !e740*/
191914         XMEMSET(rp[1], 0, sizeof(sp_point_1024));
191915         x = rp[p->infinity | q->infinity]->x;
191916         y = rp[p->infinity | q->infinity]->y;
191917         z = rp[p->infinity | q->infinity]->z;
191918 
191919         ap[0] = p;
191920         ap[1] = q;
191921         for (i=0; i<32; i++) {
191922             r->x[i] = ap[p->infinity]->x[i];
191923         }
191924         for (i=0; i<32; i++) {
191925             r->y[i] = ap[p->infinity]->y[i];
191926         }
191927         for (i=0; i<32; i++) {
191928             r->z[i] = ap[p->infinity]->z[i];
191929         }
191930         r->infinity = ap[p->infinity]->infinity;
191931 
191932         /* U2 = X2*Z1^2 */
191933         sp_1024_mont_sqr_32(t2, z, p1024_mod, p1024_mp_mod);
191934         sp_1024_mont_mul_32(t4, t2, z, p1024_mod, p1024_mp_mod);
191935         sp_1024_mont_mul_32(t2, t2, q->x, p1024_mod, p1024_mp_mod);
191936         /* S2 = Y2*Z1^3 */
191937         sp_1024_mont_mul_32(t4, t4, q->y, p1024_mod, p1024_mp_mod);
191938         /* H = U2 - X1 */
191939         sp_1024_mont_sub_32(t2, t2, x, p1024_mod);
191940         /* R = S2 - Y1 */
191941         sp_1024_mont_sub_32(t4, t4, y, p1024_mod);
191942         /* Z3 = H*Z1 */
191943         sp_1024_mont_mul_32(z, z, t2, p1024_mod, p1024_mp_mod);
191944         /* X3 = R^2 - H^3 - 2*X1*H^2 */
191945         sp_1024_mont_sqr_32(t1, t4, p1024_mod, p1024_mp_mod);
191946         sp_1024_mont_sqr_32(t5, t2, p1024_mod, p1024_mp_mod);
191947         sp_1024_mont_mul_32(t3, x, t5, p1024_mod, p1024_mp_mod);
191948         sp_1024_mont_mul_32(t5, t5, t2, p1024_mod, p1024_mp_mod);
191949         sp_1024_mont_sub_32(x, t1, t5, p1024_mod);
191950         sp_1024_mont_dbl_32(t1, t3, p1024_mod);
191951         sp_1024_mont_sub_32(x, x, t1, p1024_mod);
191952         /* Y3 = R*(X1*H^2 - X3) - Y1*H^3 */
191953         sp_1024_mont_sub_32(t3, t3, x, p1024_mod);
191954         sp_1024_mont_mul_32(t3, t3, t4, p1024_mod, p1024_mp_mod);
191955         sp_1024_mont_mul_32(t5, t5, y, p1024_mod, p1024_mp_mod);
191956         sp_1024_mont_sub_32(y, t3, t5, p1024_mod);
191957     }
191958 }
191959 
191960 #ifdef WOLFSSL_SP_SMALL
191961 #if defined(FP_ECC) || !defined(WOLFSSL_SP_SMALL)
191962 /* Generate the pre-computed table of points for the base point.
191963  *
191964  * width = 4
191965  * 16 entries
191966  * 256 bits between
191967  *
191968  * a      The base point.
191969  * table  Place to store generated point data.
191970  * tmp    Temporary data.
191971  * heap  Heap to use for allocation.
191972  */
sp_1024_gen_stripe_table_32(const sp_point_1024 * a,sp_table_entry_1024 * table,sp_digit * tmp,void * heap)191973 static int sp_1024_gen_stripe_table_32(const sp_point_1024* a,
191974         sp_table_entry_1024* table, sp_digit* tmp, void* heap)
191975 {
191976 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
191977     sp_point_1024* t = NULL;
191978 #else
191979     sp_point_1024 t[3];
191980 #endif
191981     sp_point_1024* s1 = NULL;
191982     sp_point_1024* s2 = NULL;
191983     int i;
191984     int j;
191985     int err = MP_OKAY;
191986 
191987     (void)heap;
191988 
191989 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
191990     t = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024) * 3, heap,
191991                                      DYNAMIC_TYPE_ECC);
191992     if (t == NULL)
191993         err = MEMORY_E;
191994 #endif
191995 
191996     if (err == MP_OKAY) {
191997         s1 = t + 1;
191998         s2 = t + 2;
191999 
192000         err = sp_1024_mod_mul_norm_32(t->x, a->x, p1024_mod);
192001     }
192002     if (err == MP_OKAY) {
192003         err = sp_1024_mod_mul_norm_32(t->y, a->y, p1024_mod);
192004     }
192005     if (err == MP_OKAY) {
192006         err = sp_1024_mod_mul_norm_32(t->z, a->z, p1024_mod);
192007     }
192008     if (err == MP_OKAY) {
192009         t->infinity = 0;
192010         sp_1024_proj_to_affine_32(t, tmp);
192011 
192012         XMEMCPY(s1->z, p1024_norm_mod, sizeof(p1024_norm_mod));
192013         s1->infinity = 0;
192014         XMEMCPY(s2->z, p1024_norm_mod, sizeof(p1024_norm_mod));
192015         s2->infinity = 0;
192016 
192017         /* table[0] = {0, 0, infinity} */
192018         XMEMSET(&table[0], 0, sizeof(sp_table_entry_1024));
192019         /* table[1] = Affine version of 'a' in Montgomery form */
192020         XMEMCPY(table[1].x, t->x, sizeof(table->x));
192021         XMEMCPY(table[1].y, t->y, sizeof(table->y));
192022 
192023         for (i=1; i<4; i++) {
192024             sp_1024_proj_point_dbl_n_32(t, 256, tmp);
192025             sp_1024_proj_to_affine_32(t, tmp);
192026             XMEMCPY(table[1<<i].x, t->x, sizeof(table->x));
192027             XMEMCPY(table[1<<i].y, t->y, sizeof(table->y));
192028         }
192029 
192030         for (i=1; i<4; i++) {
192031             XMEMCPY(s1->x, table[1<<i].x, sizeof(table->x));
192032             XMEMCPY(s1->y, table[1<<i].y, sizeof(table->y));
192033             for (j=(1<<i)+1; j<(1<<(i+1)); j++) {
192034                 XMEMCPY(s2->x, table[j-(1<<i)].x, sizeof(table->x));
192035                 XMEMCPY(s2->y, table[j-(1<<i)].y, sizeof(table->y));
192036                 sp_1024_proj_point_add_qz1_32(t, s1, s2, tmp);
192037                 sp_1024_proj_to_affine_32(t, tmp);
192038                 XMEMCPY(table[j].x, t->x, sizeof(table->x));
192039                 XMEMCPY(table[j].y, t->y, sizeof(table->y));
192040             }
192041         }
192042     }
192043 
192044 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
192045     if (t != NULL)
192046         XFREE(t, heap, DYNAMIC_TYPE_ECC);
192047 #endif
192048 
192049     return err;
192050 }
192051 
192052 #endif /* FP_ECC || !WOLFSSL_SP_SMALL */
192053 /* Multiply the point by the scalar and return the result.
192054  * If map is true then convert result to affine coordinates.
192055  *
192056  * Stripe implementation.
192057  * Pre-generated: 2^0, 2^256, ...
192058  * Pre-generated: products of all combinations of above.
192059  * 4 doubles and adds (with qz=1)
192060  *
192061  * r      Resulting point.
192062  * k      Scalar to multiply by.
192063  * table  Pre-computed table.
192064  * map    Indicates whether to convert result to affine.
192065  * ct     Constant time required.
192066  * heap   Heap to use for allocation.
192067  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
192068  */
sp_1024_ecc_mulmod_stripe_32(sp_point_1024 * r,const sp_point_1024 * g,const sp_table_entry_1024 * table,const sp_digit * k,int map,int ct,void * heap)192069 static int sp_1024_ecc_mulmod_stripe_32(sp_point_1024* r, const sp_point_1024* g,
192070         const sp_table_entry_1024* table, const sp_digit* k, int map,
192071         int ct, void* heap)
192072 {
192073 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
192074     sp_point_1024* rt = NULL;
192075     sp_digit* t = NULL;
192076 #else
192077     sp_point_1024 rt[2];
192078     sp_digit t[2 * 32 * 5];
192079 #endif
192080     sp_point_1024* p = NULL;
192081     int i;
192082     int j;
192083     int y;
192084     int x;
192085     int err = MP_OKAY;
192086 
192087     (void)g;
192088     /* Constant time used for cache attack resistance implementation. */
192089     (void)ct;
192090     (void)heap;
192091 
192092 
192093 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
192094     rt = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024) * 2, heap,
192095                                       DYNAMIC_TYPE_ECC);
192096     if (rt == NULL)
192097         err = MEMORY_E;
192098     if (err == MP_OKAY) {
192099         t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 32 * 5, heap,
192100                                DYNAMIC_TYPE_ECC);
192101         if (t == NULL)
192102             err = MEMORY_E;
192103     }
192104 #endif
192105 
192106     if (err == MP_OKAY) {
192107         p = rt + 1;
192108 
192109         XMEMCPY(p->z, p1024_norm_mod, sizeof(p1024_norm_mod));
192110         XMEMCPY(rt->z, p1024_norm_mod, sizeof(p1024_norm_mod));
192111 
192112         y = 0;
192113         x = 255;
192114         for (j=0; j<4; j++) {
192115             y |= (int)(((k[x / 32] >> (x % 32)) & 1) << j);
192116             x += 256;
192117         }
192118         XMEMCPY(rt->x, table[y].x, sizeof(table[y].x));
192119         XMEMCPY(rt->y, table[y].y, sizeof(table[y].y));
192120         rt->infinity = !y;
192121         for (i=254; i>=0; i--) {
192122             y = 0;
192123             x = i;
192124             for (j=0; j<4; j++) {
192125                 y |= (int)(((k[x / 32] >> (x % 32)) & 1) << j);
192126                 x += 256;
192127             }
192128 
192129             sp_1024_proj_point_dbl_32(rt, rt, t);
192130             XMEMCPY(p->x, table[y].x, sizeof(table[y].x));
192131             XMEMCPY(p->y, table[y].y, sizeof(table[y].y));
192132             p->infinity = !y;
192133             sp_1024_proj_point_add_qz1_32(rt, rt, p, t);
192134         }
192135 
192136         if (map != 0) {
192137             sp_1024_map_32(r, rt, t);
192138         }
192139         else {
192140             XMEMCPY(r, rt, sizeof(sp_point_1024));
192141         }
192142     }
192143 
192144 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
192145     if (t != NULL)
192146         XFREE(t, heap, DYNAMIC_TYPE_ECC);
192147     if (rt != NULL)
192148         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
192149 #endif
192150 
192151     return err;
192152 }
192153 
192154 #ifdef FP_ECC
192155 #ifndef FP_ENTRIES
192156     #define FP_ENTRIES 16
192157 #endif
192158 
192159 /* Cache entry - holds precomputation tables for a point. */
192160 typedef struct sp_cache_1024_t {
192161     /* X ordinate of point that table was generated from. */
192162     sp_digit x[32];
192163     /* Y ordinate of point that table was generated from. */
192164     sp_digit y[32];
192165     /* Precomputation table for point. */
192166     sp_table_entry_1024 table[16];
192167     /* Count of entries in table. */
192168     uint32_t cnt;
192169     /* Point and table set in entry. */
192170     int set;
192171 } sp_cache_1024_t;
192172 
192173 /* Cache of tables. */
192174 static THREAD_LS_T sp_cache_1024_t sp_cache_1024[FP_ENTRIES];
192175 /* Index of last entry in cache. */
192176 static THREAD_LS_T int sp_cache_1024_last = -1;
192177 /* Cache has been initialized. */
192178 static THREAD_LS_T int sp_cache_1024_inited = 0;
192179 
192180 #ifndef HAVE_THREAD_LS
192181     static volatile int initCacheMutex_1024 = 0;
192182     static wolfSSL_Mutex sp_cache_1024_lock;
192183 #endif
192184 
192185 /* Get the cache entry for the point.
192186  *
192187  * g      [in]   Point scalar multipling.
192188  * cache  [out]  Cache table to use.
192189  */
sp_ecc_get_cache_1024(const sp_point_1024 * g,sp_cache_1024_t ** cache)192190 static void sp_ecc_get_cache_1024(const sp_point_1024* g, sp_cache_1024_t** cache)
192191 {
192192     int i;
192193     int j;
192194     uint32_t least;
192195 
192196     if (sp_cache_1024_inited == 0) {
192197         for (i=0; i<FP_ENTRIES; i++) {
192198             sp_cache_1024[i].set = 0;
192199         }
192200         sp_cache_1024_inited = 1;
192201     }
192202 
192203     /* Compare point with those in cache. */
192204     for (i=0; i<FP_ENTRIES; i++) {
192205         if (!sp_cache_1024[i].set)
192206             continue;
192207 
192208         if (sp_1024_cmp_equal_32(g->x, sp_cache_1024[i].x) &
192209                            sp_1024_cmp_equal_32(g->y, sp_cache_1024[i].y)) {
192210             sp_cache_1024[i].cnt++;
192211             break;
192212         }
192213     }
192214 
192215     /* No match. */
192216     if (i == FP_ENTRIES) {
192217         /* Find empty entry. */
192218         i = (sp_cache_1024_last + 1) % FP_ENTRIES;
192219         for (; i != sp_cache_1024_last; i=(i+1)%FP_ENTRIES) {
192220             if (!sp_cache_1024[i].set) {
192221                 break;
192222             }
192223         }
192224 
192225         /* Evict least used. */
192226         if (i == sp_cache_1024_last) {
192227             least = sp_cache_1024[0].cnt;
192228             for (j=1; j<FP_ENTRIES; j++) {
192229                 if (sp_cache_1024[j].cnt < least) {
192230                     i = j;
192231                     least = sp_cache_1024[i].cnt;
192232                 }
192233             }
192234         }
192235 
192236         XMEMCPY(sp_cache_1024[i].x, g->x, sizeof(sp_cache_1024[i].x));
192237         XMEMCPY(sp_cache_1024[i].y, g->y, sizeof(sp_cache_1024[i].y));
192238         sp_cache_1024[i].set = 1;
192239         sp_cache_1024[i].cnt = 1;
192240     }
192241 
192242     *cache = &sp_cache_1024[i];
192243     sp_cache_1024_last = i;
192244 }
192245 #endif /* FP_ECC */
192246 
192247 /* Multiply the base point of P1024 by the scalar and return the result.
192248  * If map is true then convert result to affine coordinates.
192249  *
192250  * r     Resulting point.
192251  * g     Point to multiply.
192252  * k     Scalar to multiply by.
192253  * map   Indicates whether to convert result to affine.
192254  * ct    Constant time required.
192255  * heap  Heap to use for allocation.
192256  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
192257  */
sp_1024_ecc_mulmod_32(sp_point_1024 * r,const sp_point_1024 * g,const sp_digit * k,int map,int ct,void * heap)192258 static int sp_1024_ecc_mulmod_32(sp_point_1024* r, const sp_point_1024* g, const sp_digit* k,
192259         int map, int ct, void* heap)
192260 {
192261 #ifndef FP_ECC
192262     return sp_1024_ecc_mulmod_fast_32(r, g, k, map, ct, heap);
192263 #else
192264     sp_digit tmp[2 * 32 * 5];
192265     sp_cache_1024_t* cache;
192266     int err = MP_OKAY;
192267 
192268 #ifndef HAVE_THREAD_LS
192269     if (initCacheMutex_1024 == 0) {
192270          wc_InitMutex(&sp_cache_1024_lock);
192271          initCacheMutex_1024 = 1;
192272     }
192273     if (wc_LockMutex(&sp_cache_1024_lock) != 0)
192274        err = BAD_MUTEX_E;
192275 #endif /* HAVE_THREAD_LS */
192276 
192277     if (err == MP_OKAY) {
192278         sp_ecc_get_cache_1024(g, &cache);
192279         if (cache->cnt == 2)
192280             sp_1024_gen_stripe_table_32(g, cache->table, tmp, heap);
192281 
192282 #ifndef HAVE_THREAD_LS
192283         wc_UnLockMutex(&sp_cache_1024_lock);
192284 #endif /* HAVE_THREAD_LS */
192285 
192286         if (cache->cnt < 2) {
192287             err = sp_1024_ecc_mulmod_fast_32(r, g, k, map, ct, heap);
192288         }
192289         else {
192290             err = sp_1024_ecc_mulmod_stripe_32(r, g, cache->table, k,
192291                     map, ct, heap);
192292         }
192293     }
192294 
192295     return err;
192296 #endif
192297 }
192298 
192299 #else
192300 #if defined(FP_ECC) || !defined(WOLFSSL_SP_SMALL)
192301 /* Generate the pre-computed table of points for the base point.
192302  *
192303  * width = 8
192304  * 256 entries
192305  * 128 bits between
192306  *
192307  * a      The base point.
192308  * table  Place to store generated point data.
192309  * tmp    Temporary data.
192310  * heap  Heap to use for allocation.
192311  */
sp_1024_gen_stripe_table_32(const sp_point_1024 * a,sp_table_entry_1024 * table,sp_digit * tmp,void * heap)192312 static int sp_1024_gen_stripe_table_32(const sp_point_1024* a,
192313         sp_table_entry_1024* table, sp_digit* tmp, void* heap)
192314 {
192315 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
192316     sp_point_1024* t = NULL;
192317 #else
192318     sp_point_1024 t[3];
192319 #endif
192320     sp_point_1024* s1 = NULL;
192321     sp_point_1024* s2 = NULL;
192322     int i;
192323     int j;
192324     int err = MP_OKAY;
192325 
192326     (void)heap;
192327 
192328 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
192329     t = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024) * 3, heap,
192330                                      DYNAMIC_TYPE_ECC);
192331     if (t == NULL)
192332         err = MEMORY_E;
192333 #endif
192334 
192335     if (err == MP_OKAY) {
192336         s1 = t + 1;
192337         s2 = t + 2;
192338 
192339         err = sp_1024_mod_mul_norm_32(t->x, a->x, p1024_mod);
192340     }
192341     if (err == MP_OKAY) {
192342         err = sp_1024_mod_mul_norm_32(t->y, a->y, p1024_mod);
192343     }
192344     if (err == MP_OKAY) {
192345         err = sp_1024_mod_mul_norm_32(t->z, a->z, p1024_mod);
192346     }
192347     if (err == MP_OKAY) {
192348         t->infinity = 0;
192349         sp_1024_proj_to_affine_32(t, tmp);
192350 
192351         XMEMCPY(s1->z, p1024_norm_mod, sizeof(p1024_norm_mod));
192352         s1->infinity = 0;
192353         XMEMCPY(s2->z, p1024_norm_mod, sizeof(p1024_norm_mod));
192354         s2->infinity = 0;
192355 
192356         /* table[0] = {0, 0, infinity} */
192357         XMEMSET(&table[0], 0, sizeof(sp_table_entry_1024));
192358         /* table[1] = Affine version of 'a' in Montgomery form */
192359         XMEMCPY(table[1].x, t->x, sizeof(table->x));
192360         XMEMCPY(table[1].y, t->y, sizeof(table->y));
192361 
192362         for (i=1; i<8; i++) {
192363             sp_1024_proj_point_dbl_n_32(t, 128, tmp);
192364             sp_1024_proj_to_affine_32(t, tmp);
192365             XMEMCPY(table[1<<i].x, t->x, sizeof(table->x));
192366             XMEMCPY(table[1<<i].y, t->y, sizeof(table->y));
192367         }
192368 
192369         for (i=1; i<8; i++) {
192370             XMEMCPY(s1->x, table[1<<i].x, sizeof(table->x));
192371             XMEMCPY(s1->y, table[1<<i].y, sizeof(table->y));
192372             for (j=(1<<i)+1; j<(1<<(i+1)); j++) {
192373                 XMEMCPY(s2->x, table[j-(1<<i)].x, sizeof(table->x));
192374                 XMEMCPY(s2->y, table[j-(1<<i)].y, sizeof(table->y));
192375                 sp_1024_proj_point_add_qz1_32(t, s1, s2, tmp);
192376                 sp_1024_proj_to_affine_32(t, tmp);
192377                 XMEMCPY(table[j].x, t->x, sizeof(table->x));
192378                 XMEMCPY(table[j].y, t->y, sizeof(table->y));
192379             }
192380         }
192381     }
192382 
192383 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
192384     if (t != NULL)
192385         XFREE(t, heap, DYNAMIC_TYPE_ECC);
192386 #endif
192387 
192388     return err;
192389 }
192390 
192391 #endif /* FP_ECC || !WOLFSSL_SP_SMALL */
192392 /* Multiply the point by the scalar and return the result.
192393  * If map is true then convert result to affine coordinates.
192394  *
192395  * Stripe implementation.
192396  * Pre-generated: 2^0, 2^128, ...
192397  * Pre-generated: products of all combinations of above.
192398  * 8 doubles and adds (with qz=1)
192399  *
192400  * r      Resulting point.
192401  * k      Scalar to multiply by.
192402  * table  Pre-computed table.
192403  * map    Indicates whether to convert result to affine.
192404  * ct     Constant time required.
192405  * heap   Heap to use for allocation.
192406  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
192407  */
sp_1024_ecc_mulmod_stripe_32(sp_point_1024 * r,const sp_point_1024 * g,const sp_table_entry_1024 * table,const sp_digit * k,int map,int ct,void * heap)192408 static int sp_1024_ecc_mulmod_stripe_32(sp_point_1024* r, const sp_point_1024* g,
192409         const sp_table_entry_1024* table, const sp_digit* k, int map,
192410         int ct, void* heap)
192411 {
192412 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
192413     sp_point_1024* rt = NULL;
192414     sp_digit* t = NULL;
192415 #else
192416     sp_point_1024 rt[2];
192417     sp_digit t[2 * 32 * 5];
192418 #endif
192419     sp_point_1024* p = NULL;
192420     int i;
192421     int j;
192422     int y;
192423     int x;
192424     int err = MP_OKAY;
192425 
192426     (void)g;
192427     /* Constant time used for cache attack resistance implementation. */
192428     (void)ct;
192429     (void)heap;
192430 
192431 
192432 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
192433     rt = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024) * 2, heap,
192434                                       DYNAMIC_TYPE_ECC);
192435     if (rt == NULL)
192436         err = MEMORY_E;
192437     if (err == MP_OKAY) {
192438         t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 32 * 5, heap,
192439                                DYNAMIC_TYPE_ECC);
192440         if (t == NULL)
192441             err = MEMORY_E;
192442     }
192443 #endif
192444 
192445     if (err == MP_OKAY) {
192446         p = rt + 1;
192447 
192448         XMEMCPY(p->z, p1024_norm_mod, sizeof(p1024_norm_mod));
192449         XMEMCPY(rt->z, p1024_norm_mod, sizeof(p1024_norm_mod));
192450 
192451         y = 0;
192452         x = 127;
192453         for (j=0; j<8; j++) {
192454             y |= (int)(((k[x / 32] >> (x % 32)) & 1) << j);
192455             x += 128;
192456         }
192457         XMEMCPY(rt->x, table[y].x, sizeof(table[y].x));
192458         XMEMCPY(rt->y, table[y].y, sizeof(table[y].y));
192459         rt->infinity = !y;
192460         for (i=126; i>=0; i--) {
192461             y = 0;
192462             x = i;
192463             for (j=0; j<8; j++) {
192464                 y |= (int)(((k[x / 32] >> (x % 32)) & 1) << j);
192465                 x += 128;
192466             }
192467 
192468             sp_1024_proj_point_dbl_32(rt, rt, t);
192469             XMEMCPY(p->x, table[y].x, sizeof(table[y].x));
192470             XMEMCPY(p->y, table[y].y, sizeof(table[y].y));
192471             p->infinity = !y;
192472             sp_1024_proj_point_add_qz1_32(rt, rt, p, t);
192473         }
192474 
192475         if (map != 0) {
192476             sp_1024_map_32(r, rt, t);
192477         }
192478         else {
192479             XMEMCPY(r, rt, sizeof(sp_point_1024));
192480         }
192481     }
192482 
192483 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
192484     if (t != NULL)
192485         XFREE(t, heap, DYNAMIC_TYPE_ECC);
192486     if (rt != NULL)
192487         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
192488 #endif
192489 
192490     return err;
192491 }
192492 
192493 #ifdef FP_ECC
192494 #ifndef FP_ENTRIES
192495     #define FP_ENTRIES 16
192496 #endif
192497 
192498 /* Cache entry - holds precomputation tables for a point. */
192499 typedef struct sp_cache_1024_t {
192500     /* X ordinate of point that table was generated from. */
192501     sp_digit x[32];
192502     /* Y ordinate of point that table was generated from. */
192503     sp_digit y[32];
192504     /* Precomputation table for point. */
192505     sp_table_entry_1024 table[256];
192506     /* Count of entries in table. */
192507     uint32_t cnt;
192508     /* Point and table set in entry. */
192509     int set;
192510 } sp_cache_1024_t;
192511 
192512 /* Cache of tables. */
192513 static THREAD_LS_T sp_cache_1024_t sp_cache_1024[FP_ENTRIES];
192514 /* Index of last entry in cache. */
192515 static THREAD_LS_T int sp_cache_1024_last = -1;
192516 /* Cache has been initialized. */
192517 static THREAD_LS_T int sp_cache_1024_inited = 0;
192518 
192519 #ifndef HAVE_THREAD_LS
192520     static volatile int initCacheMutex_1024 = 0;
192521     static wolfSSL_Mutex sp_cache_1024_lock;
192522 #endif
192523 
192524 /* Get the cache entry for the point.
192525  *
192526  * g      [in]   Point scalar multipling.
192527  * cache  [out]  Cache table to use.
192528  */
sp_ecc_get_cache_1024(const sp_point_1024 * g,sp_cache_1024_t ** cache)192529 static void sp_ecc_get_cache_1024(const sp_point_1024* g, sp_cache_1024_t** cache)
192530 {
192531     int i;
192532     int j;
192533     uint32_t least;
192534 
192535     if (sp_cache_1024_inited == 0) {
192536         for (i=0; i<FP_ENTRIES; i++) {
192537             sp_cache_1024[i].set = 0;
192538         }
192539         sp_cache_1024_inited = 1;
192540     }
192541 
192542     /* Compare point with those in cache. */
192543     for (i=0; i<FP_ENTRIES; i++) {
192544         if (!sp_cache_1024[i].set)
192545             continue;
192546 
192547         if (sp_1024_cmp_equal_32(g->x, sp_cache_1024[i].x) &
192548                            sp_1024_cmp_equal_32(g->y, sp_cache_1024[i].y)) {
192549             sp_cache_1024[i].cnt++;
192550             break;
192551         }
192552     }
192553 
192554     /* No match. */
192555     if (i == FP_ENTRIES) {
192556         /* Find empty entry. */
192557         i = (sp_cache_1024_last + 1) % FP_ENTRIES;
192558         for (; i != sp_cache_1024_last; i=(i+1)%FP_ENTRIES) {
192559             if (!sp_cache_1024[i].set) {
192560                 break;
192561             }
192562         }
192563 
192564         /* Evict least used. */
192565         if (i == sp_cache_1024_last) {
192566             least = sp_cache_1024[0].cnt;
192567             for (j=1; j<FP_ENTRIES; j++) {
192568                 if (sp_cache_1024[j].cnt < least) {
192569                     i = j;
192570                     least = sp_cache_1024[i].cnt;
192571                 }
192572             }
192573         }
192574 
192575         XMEMCPY(sp_cache_1024[i].x, g->x, sizeof(sp_cache_1024[i].x));
192576         XMEMCPY(sp_cache_1024[i].y, g->y, sizeof(sp_cache_1024[i].y));
192577         sp_cache_1024[i].set = 1;
192578         sp_cache_1024[i].cnt = 1;
192579     }
192580 
192581     *cache = &sp_cache_1024[i];
192582     sp_cache_1024_last = i;
192583 }
192584 #endif /* FP_ECC */
192585 
192586 /* Multiply the base point of P1024 by the scalar and return the result.
192587  * If map is true then convert result to affine coordinates.
192588  *
192589  * r     Resulting point.
192590  * g     Point to multiply.
192591  * k     Scalar to multiply by.
192592  * map   Indicates whether to convert result to affine.
192593  * ct    Constant time required.
192594  * heap  Heap to use for allocation.
192595  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
192596  */
sp_1024_ecc_mulmod_32(sp_point_1024 * r,const sp_point_1024 * g,const sp_digit * k,int map,int ct,void * heap)192597 static int sp_1024_ecc_mulmod_32(sp_point_1024* r, const sp_point_1024* g, const sp_digit* k,
192598         int map, int ct, void* heap)
192599 {
192600 #ifndef FP_ECC
192601     return sp_1024_ecc_mulmod_fast_32(r, g, k, map, ct, heap);
192602 #else
192603     sp_digit tmp[2 * 32 * 5];
192604     sp_cache_1024_t* cache;
192605     int err = MP_OKAY;
192606 
192607 #ifndef HAVE_THREAD_LS
192608     if (initCacheMutex_1024 == 0) {
192609          wc_InitMutex(&sp_cache_1024_lock);
192610          initCacheMutex_1024 = 1;
192611     }
192612     if (wc_LockMutex(&sp_cache_1024_lock) != 0)
192613        err = BAD_MUTEX_E;
192614 #endif /* HAVE_THREAD_LS */
192615 
192616     if (err == MP_OKAY) {
192617         sp_ecc_get_cache_1024(g, &cache);
192618         if (cache->cnt == 2)
192619             sp_1024_gen_stripe_table_32(g, cache->table, tmp, heap);
192620 
192621 #ifndef HAVE_THREAD_LS
192622         wc_UnLockMutex(&sp_cache_1024_lock);
192623 #endif /* HAVE_THREAD_LS */
192624 
192625         if (cache->cnt < 2) {
192626             err = sp_1024_ecc_mulmod_fast_32(r, g, k, map, ct, heap);
192627         }
192628         else {
192629             err = sp_1024_ecc_mulmod_stripe_32(r, g, cache->table, k,
192630                     map, ct, heap);
192631         }
192632     }
192633 
192634     return err;
192635 #endif
192636 }
192637 
192638 #endif /* WOLFSSL_SP_SMALL */
192639 /* Multiply the point by the scalar and return the result.
192640  * If map is true then convert result to affine coordinates.
192641  *
192642  * km    Scalar to multiply by.
192643  * p     Point to multiply.
192644  * r     Resulting point.
192645  * map   Indicates whether to convert result to affine.
192646  * heap  Heap to use for allocation.
192647  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
192648  */
sp_ecc_mulmod_1024(const mp_int * km,const ecc_point * gm,ecc_point * r,int map,void * heap)192649 int sp_ecc_mulmod_1024(const mp_int* km, const ecc_point* gm, ecc_point* r,
192650         int map, void* heap)
192651 {
192652 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
192653     sp_point_1024* point = NULL;
192654     sp_digit* k = NULL;
192655 #else
192656     sp_point_1024 point[1];
192657     sp_digit k[32];
192658 #endif
192659     int err = MP_OKAY;
192660 
192661 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
192662     point = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024), heap,
192663                                          DYNAMIC_TYPE_ECC);
192664     if (point == NULL)
192665         err = MEMORY_E;
192666     if (err == MP_OKAY) {
192667         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32, heap,
192668                                DYNAMIC_TYPE_ECC);
192669         if (k == NULL)
192670             err = MEMORY_E;
192671     }
192672 #endif
192673 
192674     if (err == MP_OKAY) {
192675         sp_1024_from_mp(k, 32, km);
192676         sp_1024_point_from_ecc_point_32(point, gm);
192677 
192678             err = sp_1024_ecc_mulmod_32(point, point, k, map, 1, heap);
192679     }
192680     if (err == MP_OKAY) {
192681         err = sp_1024_point_to_ecc_point_32(point, r);
192682     }
192683 
192684 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
192685     if (k != NULL)
192686         XFREE(k, heap, DYNAMIC_TYPE_ECC);
192687     if (point != NULL)
192688         XFREE(point, heap, DYNAMIC_TYPE_ECC);
192689 #endif
192690 
192691     return err;
192692 }
192693 
192694 #ifdef WOLFSSL_SP_SMALL
192695 /* Striping precomputation table.
192696  * 4 points combined into a table of 16 points.
192697  * Distance of 256 between points.
192698  */
192699 static const sp_table_entry_1024 p1024_table[16] = {
192700     /* 0 */
192701     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
192702         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
192703         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
192704       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
192705         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
192706         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
192707     /* 1 */
192708     { { 0xe0162bc2,0xbf9c7ec6,0x10a89289,0xddecc6e3,0x9e499d81,0x5d599df0,
192709         0x6d358218,0x9a96ea28,0x70c5f8db,0x01aec7d3,0x8cf5d066,0xe72e4995,
192710         0x3e91d7f8,0xc2e7297d,0xda9f2f5a,0x8621db92,0x5a5679ed,0x4b26c867,
192711         0x2c56aac1,0x233385df,0xc6a13f99,0xb88e74d4,0xffa8ec11,0x1214b173,
192712         0x1f3f9fef,0xa0386a27,0xc0e7b44e,0xbd9b1b4e,0xeecd3496,0xafe528dc,
192713         0x1c49f80b,0x8dfff96a },
192714       { 0xc03c0c83,0xb4a4753a,0xabcdcd75,0x68e69d18,0xf775b649,0xe3839b88,
192715         0xbf58f352,0x803f949a,0xbd0bc15c,0x5f702679,0x8ff298c2,0x85bf5d16,
192716         0xc6c7976e,0x3f6ebd98,0x45e3e1b4,0x20618af4,0x54e64093,0x67d5598e,
192717         0x504fed9e,0xb047283b,0x70d87517,0x450cabfd,0x3f5addbe,0x47d628bf,
192718         0x78cb4cca,0x0037ef30,0x6b1c4908,0x4e148d3c,0x4fcfd837,0xe256d329,
192719         0xde3c01f3,0x2aa1207b } },
192720     /* 2 */
192721     { { 0x755c2a27,0xcf3e0bb2,0x59585c44,0xd38e42f9,0x19285e60,0x46b13e0f,
192722         0x76273d0f,0xc3ecd0c0,0x193c569a,0x7800f085,0x4351818a,0xf04e74ab,
192723         0x8496363b,0x9258aa38,0xb8c894fe,0x8456617c,0x2af969a0,0x8bc62aaa,
192724         0x5a4668d9,0x66c2280b,0xa992f4fa,0xbc9df58e,0x3f401e99,0x5db0b7d9,
192725         0xc4c38c0e,0xe0614fe1,0x2ccdf6b3,0xd531151c,0xe143b618,0x1c7575ec,
192726         0xdf9398a4,0x40247985 },
192727       { 0x8f055746,0xfba25178,0x0ab1e6e0,0xc5ba0040,0xac292697,0xe1b194fb,
192728         0x5b4f4740,0x77152119,0x9bb7ba54,0x250091d0,0xb9a139a4,0x7a674861,
192729         0xf353aa7e,0xba8413b3,0x2443ceee,0xafe77192,0x3847bbd0,0x14468d36,
192730         0x3da4942d,0x61f79ff6,0xd425b456,0x1563a1c1,0x75ff4630,0x3c270fcd,
192731         0xeb2802c9,0x42072090,0xc85c7004,0x68f0cdcb,0xfa032e74,0xca4372fb,
192732         0xc8b79d80,0x1a6fd1e6 } },
192733     /* 3 */
192734     { { 0x8d5116a3,0x967a901a,0xb2f5f47f,0x0b844394,0x60ebaf3b,0xe39ad452,
192735         0x60ccfc0c,0x1e1be617,0xcc3f53f2,0xac07e3d2,0x1ed11bb6,0xdd838e0e,
192736         0x1c15b0c2,0x45475307,0x920fe5b8,0x70dd4748,0xe471896d,0x1a20be2d,
192737         0x59276c7c,0x3c3fad8a,0xc886ee07,0x026a1cc3,0x6e831ac4,0x9fdb6f37,
192738         0xac501d65,0x26a35d1a,0x40da8574,0x0ae98905,0xabd734e5,0x65dde0a4,
192739         0x15614750,0x29b7d4dc },
192740       { 0xcbf4e20b,0x44b3c2cb,0x58cc44c5,0x1c3f548f,0x5b0cac1f,0x39809b54,
192741         0x00f80621,0x0c0f02b5,0x066905e0,0xe612b890,0x8350188c,0x8f158ed7,
192742         0x3f5576b2,0xc01dc458,0xa45492e0,0x29803272,0x0ff92443,0x77a5623a,
192743         0x29d0dc41,0xd12a2b00,0x2780e87a,0xb4125459,0x0d53f272,0x1ebcf903,
192744         0x24301e8d,0xbae6ea40,0xa37d0798,0x1e5f3f2f,0x22b4126c,0x9342c310,
192745         0x5382497e,0x5d092802 } },
192746     /* 4 */
192747     { { 0x4b59213a,0xf5b495d0,0x8d70200e,0xca672039,0x2b6771c1,0x4bcb09a6,
192748         0x2b9eb0cb,0x26adeed4,0x8cdba212,0xeb544754,0xf08890d1,0x0e1abfcd,
192749         0x698e46b4,0x52509963,0x82e9c138,0xe1bff0b0,0x51099a71,0xa189e4cd,
192750         0xc9b91cc7,0x2360c9bc,0x137ec4be,0x9bd4d7dc,0xd1519f6e,0xd0356521,
192751         0xcf832503,0xbf5f6d78,0x8deea2b4,0xe4301031,0xef4c319c,0xc3132494,
192752         0x0f1fa7d7,0x2ab3bd47 },
192753       { 0x922c9fbb,0x5753b680,0x0f16c6d1,0x869e7dc8,0xbac16efc,0x83445135,
192754         0x846d1d9b,0x4326a3b4,0xb2d62c21,0xb517fee3,0x0b292ad5,0x6905afa2,
192755         0x2cadac13,0x2a57131a,0xebdbca8d,0xcd904d8f,0x3f365fb2,0xdfeda86f,
192756         0xdc7eaa1c,0x7097b208,0xa45e77c0,0x89a35a84,0xcf5d118e,0x417a062c,
192757         0x1f6e99e8,0x3c0c04a8,0xba7a087d,0xc44704b0,0x3ea22ad2,0x6f8a27d1,
192758         0x4c27d229,0x93a4b416 } },
192759     /* 5 */
192760     { { 0x1f1efb7a,0xd4271bc1,0x33fccc0d,0xae4e68e6,0xb11f50a8,0x9d9bc8f1,
192761         0xaf076089,0x5430398f,0x443d0e03,0x45e242fb,0xf6e3d4c1,0x73ec2519,
192762         0xba9bad09,0xab70f790,0xf9add10f,0xde612ad5,0x14e942b4,0xb837e54e,
192763         0xddb8b68a,0x175a56d3,0x1ac2a408,0xe85b233c,0xf0c80f94,0xf8ff6c30,
192764         0x898db4f9,0x4b7f3fb7,0x45a7dcdd,0xa2c6044f,0xfe3d3895,0xf3abb2f6,
192765         0x32ee7763,0x342ce0d7 },
192766       { 0xcf491b1f,0xeb261394,0x1909e395,0xdcaaeed7,0x9fe4dbea,0xdcc4055a,
192767         0x493d604d,0x17a6611d,0x1ce5ebef,0xba445a3a,0xe3989cb5,0xe82e2858,
192768         0x83f58406,0xb96f4282,0xa156cf55,0x99877b99,0x4e166a0e,0xaf906a66,
192769         0xb2976d13,0xcea1d353,0x36c61a01,0xefc16f27,0xb0f55d86,0xdb04c433,
192770         0x8eb34c01,0x3cb4b269,0x2ae60280,0x38d07f78,0x43be3ec5,0x43ac3bcb,
192771         0xe156fd20,0x455f4af3 } },
192772     /* 6 */
192773     { { 0x95532833,0x2e6fe0a6,0xd626d067,0xabca228e,0x649e73bd,0x22aef3d9,
192774         0xf03c4c0c,0x2083a87a,0x35169b45,0xe954e75d,0x74506a89,0x577509ee,
192775         0x2aeacf90,0x49cb276e,0xfa409f91,0x08275d77,0xf0bbd6b9,0x61eb6f3d,
192776         0xe4132704,0x948202cb,0xb1c498b1,0x35f3fc21,0x361fee59,0x76c68ba8,
192777         0x50e051f3,0xa18cbbd9,0x318e7042,0x2384a879,0x80dd1e8b,0x292abead,
192778         0x5c37c334,0x65713c29 },
192779       { 0xceb77b9a,0xdccca8e9,0x23b69469,0x2f97e727,0xa01d6b28,0xc76abee6,
192780         0x5abecdfe,0x3925203d,0x29290d70,0x89448082,0xb0314438,0xf9931424,
192781         0x7cd447c3,0x04209df1,0xc855c827,0x7c6f2059,0x56c0e069,0xd97d7862,
192782         0x412d94c4,0x5a9db6fe,0x994c41dd,0x19a64591,0xc89e21a3,0x12348aa1,
192783         0xc6a03f0e,0xd6904b50,0xa616feac,0x55c15156,0x7cc7693b,0x4e36d1b5,
192784         0x3bae3c38,0x6b0e996c } },
192785     /* 7 */
192786     { { 0xcceced00,0x32789fab,0xe5b7aa66,0x3237e71a,0x2ddebcdf,0x87b2e269,
192787         0xb61dad8f,0xb7245120,0xd35f803c,0xe11e5e48,0x98e50f0d,0xfb4df5d7,
192788         0xbcd2ab92,0x60ee68b4,0x1ce3363d,0x98ab2f5c,0x7cd42647,0x15ba39da,
192789         0x83f4fb3f,0x1a6572eb,0xe56f08db,0x0f77de88,0x172562c2,0x1743761e,
192790         0x8a58f0f4,0xbe349ff8,0x84d1d6e2,0xe04da71b,0x9e9ff3b4,0x368f0342,
192791         0x678223f8,0x4022a205 },
192792       { 0x83847375,0x527bbd05,0x3f451af0,0x3ae56b62,0x4b2c7f18,0x6198f24d,
192793         0x4525b98d,0xee323f5b,0x0e0884b5,0xa9d8d39a,0xfb12c776,0xd005d7f6,
192794         0x708bc154,0xd71c483e,0x742541bc,0x8ca6fd28,0xf8397ddb,0x0af3dccd,
192795         0x3eccf243,0xb80d3125,0x58d81b8d,0xc743a108,0x71391f68,0x3f48eb21,
192796         0x33bb657f,0x493aff88,0x07e47e31,0x1d15ed66,0xe08279f6,0x10159b11,
192797         0x24a6a956,0x312179cb } },
192798     /* 8 */
192799     { { 0xfb99cfe6,0x950323d3,0xc9334178,0x7b09bc26,0x7cbdfb6f,0x64111e41,
192800         0x89a75760,0x91141744,0x10919cb0,0x4c633df9,0x396bfd2f,0x715fc7c7,
192801         0x8cab62db,0x8ca19512,0x4db81aac,0x30672473,0xb4c4c54a,0xe67a246b,
192802         0xbf229646,0xd77ea0fa,0xfa5b5d70,0x5bed15f1,0xc2f192f3,0xa5686da5,
192803         0x7f6690ad,0xdecac72a,0xcaa50b7d,0x0c4af2a2,0x6049ad2f,0xf44631c1,
192804         0x04ecf056,0x325d2796 },
192805       { 0x4848c144,0xee11fb55,0xb6a7af32,0x4e062925,0x369e0f9a,0x125b68e1,
192806         0xca53b21e,0xad9bdae6,0x2e98ea1b,0xf50d605c,0x9f2fa395,0xbdb9e153,
192807         0xe91532f5,0x4570e32d,0x46a250d7,0x810698ae,0xad9d9145,0x7fd9546c,
192808         0x11e97a5e,0xabf67721,0x249f82e9,0xca29f7d5,0x9851df63,0xa9c539a9,
192809         0x71d0e3e5,0xfd84d54b,0x041d2b56,0xd1e0459c,0xfd80096a,0xceb3eb6e,
192810         0xe32a79d3,0x19d48546 } },
192811     /* 9 */
192812     { { 0xb540f5e5,0xfe19ee8f,0x04e68d17,0x86d2a52f,0xadbdc871,0xd2320db0,
192813         0xd03a7fc8,0xa83ad5a8,0x08bcb916,0x54bf83c7,0x2e51e840,0x092133ea,
192814         0xcb52dddf,0xbce38424,0x31063583,0xd5c7be40,0x458e3176,0xc1ebb9df,
192815         0xbc4dabbf,0xafb19639,0xc05725a8,0x36350fe4,0x84e1cd24,0xac4a0634,
192816         0xc145b8de,0xadf73154,0xb3483237,0x0aa6dd9e,0xcbff2720,0xa3345c3d,
192817         0xb4e453b0,0x1b3ace6c },
192818       { 0x90a8bdc5,0x0343e5e9,0x6306a089,0xa203bf9d,0x8e48520e,0x98489a35,
192819         0xde7d1d06,0xbd17debe,0x5f795d3f,0x8fafa6d7,0x387b0a3f,0xa4ceb630,
192820         0xffddeafa,0xe0166b32,0x7e764e02,0xa2fe2054,0xe871f304,0x55ab9824,
192821         0x952ec45e,0xa2bd36bb,0xa90d20ca,0x7b4c1484,0x75bcfb53,0x5319f387,
192822         0x6982c4e5,0x34238a4a,0xa102921d,0xa2bb61c7,0xdb3ab17e,0x1e061b64,
192823         0x192f0a14,0x538ec33e } },
192824     /* 10 */
192825     { { 0x576374c2,0xe53c7785,0x84727040,0xe60526d1,0x228ca044,0x8a066dc8,
192826         0xf1ce1313,0x1fe1c1b2,0xcdeb0c5d,0x2aeec832,0x9cbf826f,0xa7596699,
192827         0xde77a589,0xcd188e81,0x118d1254,0xe5ce0fe0,0x0790b86a,0xa142a984,
192828         0x39ac28ce,0xe28f043f,0x87de5804,0x4eef8290,0xf639a8c5,0x83c31b32,
192829         0x5887794f,0xd70454a7,0x18b1b391,0xca635d50,0x31d9c795,0xcefea076,
192830         0xb6f8aa25,0x13cbee76 },
192831       { 0x8d3f34f3,0x79cabe0f,0xa3617fe3,0xbda9c31c,0xdd9426a1,0xb26dee23,
192832         0xf29c9104,0xe9dd9627,0xe2c6cd3b,0x033eb169,0xfcba2196,0x8a73f492,
192833         0xb858c83c,0x92e37e0b,0x23b3fbb7,0xe4f2aca6,0x64be00a2,0x8101fb1e,
192834         0x948f6448,0x91a7826a,0x907260e7,0x414067b4,0xe30bb835,0xf774aa50,
192835         0xc999c06e,0xf922ca80,0x0ba08511,0x6b8635b9,0x25fa04f0,0xbf936b5c,
192836         0xe02e8967,0x4e0a1ada } },
192837     /* 11 */
192838     { { 0x8ba29c4d,0x00ca6670,0x22988094,0xc08240ce,0x16dda752,0x21c5ca67,
192839         0xabbbfa34,0x689c0e45,0x3ed28b72,0x1d7545fd,0xd7c56ab4,0x5f221198,
192840         0x38759d65,0x4b3d8f74,0x8fe50b89,0x93490dfb,0xe80eba16,0xb641f5d7,
192841         0x79acb537,0x7b0da5eb,0x0c1d5e5e,0xab6b1497,0xa5da429a,0x2338e68d,
192842         0x2f6d2f25,0xe010c437,0x6530f3a7,0x226f16d2,0xcbef08bc,0xefb0f7b6,
192843         0x9f99c999,0x733e30d9 },
192844       { 0xa42a38f9,0xecfe1582,0x4730b500,0xaec2d58e,0xde976b2c,0x2ee2f2a7,
192845         0xa969c1bb,0xf0539db5,0xfcecdb4a,0x31954168,0xe7a8e902,0xf2f7348a,
192846         0x3121541f,0x1d58d7cc,0x2202ae52,0x5d25b75c,0xf40835a7,0xdea9965a,
192847         0x529b4e46,0x3feb6a41,0xbd27ad9b,0x5c97fb6f,0x261f900b,0xd87554c0,
192848         0x04d5b19e,0xb43031d9,0xcb219b9c,0x33d5e9b8,0x3ee00bcf,0x7a43d492,
192849         0xb79a5c0c,0x56facb39 } },
192850     /* 12 */
192851     { { 0x7c834915,0x667eaed6,0xbc5eb64d,0x9f77aa6a,0x25d62011,0x729ebcb6,
192852         0x699fd9c2,0x0aee24f2,0x2b8d4f6c,0xe1eb5874,0x14c976d6,0x7f12710c,
192853         0xf6d9ea65,0x91390335,0x06b50064,0x668b7049,0x0876ee4f,0x65969a0e,
192854         0x2f9d9360,0xf901bf3f,0xb499e3ce,0xfb1a8651,0xf2dbcaaa,0x80b953fb,
192855         0x973b06b6,0x312cc566,0x3af36c64,0x3534d9c3,0x10ffd815,0xe4463a52,
192856         0xf18c2b91,0x57ea2b4b },
192857       { 0x8aa0f2f2,0x00f5e162,0x0e46bcaa,0x8c7e75c5,0xa4a2c42d,0x97ab479a,
192858         0x14baa202,0xb4f308ea,0x6943cc2e,0xa901bd14,0xeed58804,0xbb125fee,
192859         0x9d180f7c,0x6502c8f9,0x1580c61c,0xe5353919,0x27101ee3,0x7e278069,
192860         0xfaa72717,0x7a0a40a1,0x4c75b153,0x32edce02,0x538f1c22,0xda23660b,
192861         0xbe307d2e,0x4d511e98,0x9baee0b4,0x24276e40,0x7ff1f307,0xa78c3927,
192862         0xea7935c9,0x60480b46 } },
192863     /* 13 */
192864     { { 0x3872ece3,0x31087d66,0x955b70f8,0x5f29be7d,0x9cf95bb8,0xb50b4fc7,
192865         0xdbffa621,0xbae3b58d,0xe022ba5d,0x0e61d280,0x4181449c,0x78ae5117,
192866         0xcf555485,0x0b132840,0xb8ce0b0e,0x800ed1b6,0x78d5de3d,0x35dffdd5,
192867         0x69a56b47,0xf7e42374,0x8d910ae7,0xd5e32369,0x6313c7c7,0xb6ff52a0,
192868         0xa92de9e5,0x5a2fe20d,0xd12110bb,0x41b347d3,0x40c16f23,0xc5905edb,
192869         0x9a8f88cc,0x0774a0d3 },
192870       { 0xe3b6c106,0x3ae181ab,0x8de150b7,0x4ebe163f,0x6f354836,0xcf75b82f,
192871         0x3ac7ac16,0xaa0d2063,0x291722af,0x5c680668,0x11545553,0x73941e61,
192872         0xbf5de3f7,0x17127e38,0x1afb41da,0x32cfdf03,0x87bc8663,0xc6893c91,
192873         0xa62c9c99,0x75046744,0x962c1947,0x96866e2d,0x378cdf4c,0x489ec8df,
192874         0x3407fa32,0x3a60709b,0x551290d1,0xd37d2159,0xbab92273,0x9623d303,
192875         0x2432014b,0x08151954 } },
192876     /* 14 */
192877     { { 0xb05f2b26,0x569044f3,0x80b9f76c,0xb35a294a,0x4290f6ae,0x8839fe28,
192878         0x026a5877,0x761cfb23,0x2e5ff9c3,0x768926b6,0x0b11c576,0xbae6cd20,
192879         0x72a03efe,0xdc857756,0xe1bad63a,0x0cae074a,0xd709d99c,0x3fe491a1,
192880         0x6501d9c1,0x76c5ded6,0xc32aeff7,0x1da6eca1,0xc57683e8,0x50849d55,
192881         0xdf98d847,0x9e392e9c,0x64d9a564,0xfad7982f,0xa37b98b2,0xf7c3bdb7,
192882         0xf0860497,0x1fe09f94 },
192883       { 0x7648cc63,0x49a7eaae,0x67cfa714,0x13ea2511,0x653f4559,0xfc8b923c,
192884         0x81a16e86,0xd957619b,0x3c864674,0x0c7e804b,0x1616599a,0xfc88134a,
192885         0x0a652328,0x366ea969,0x4bc9029e,0x41532960,0xae2aad2b,0xef9e1994,
192886         0x7f10bef5,0x9e2a8c52,0xc67bf860,0x73dcb586,0x844cc25d,0xf61a43fa,
192887         0x74eb3653,0xd74e7eea,0xdd240f02,0xf3356706,0xfd83bcb4,0xeec7694c,
192888         0xdb62526a,0x4de95786 } },
192889     /* 15 */
192890     { { 0x3deac2f7,0x4867d315,0xb61d9a8e,0xa084778a,0x0ab7b2d5,0xf3b76f96,
192891         0xcfdf4f79,0x00b30056,0x31ab8f4b,0xd0701e15,0x9c779d01,0x07f948d5,
192892         0x82675371,0x7c994ebc,0x48bad4c0,0x1104d4ee,0xbfc9d058,0x798ce0b5,
192893         0x309fa80b,0xc7ca898d,0xacb33eaf,0x0244f225,0x5b2f3175,0xd51e8dfc,
192894         0xa4d7be34,0x3e49ba6b,0xbda02b43,0x1760f4c7,0x4435275a,0x37e36a7e,
192895         0xe636980c,0x1c94418b },
192896       { 0x09dc1414,0x43a21313,0x43c93537,0x060765fc,0xdf5f79ce,0x6ff3207a,
192897         0x85d4cfca,0x6f18b1fa,0x63e995ab,0xf5c4272e,0xa82b3002,0x121a09e4,
192898         0x97147f16,0x82b65d1b,0x20a7fe26,0x4993c20c,0xe6716726,0x99c9cb98,
192899         0xfeb440a0,0x5a02d673,0x251b4bc5,0x3f3fa9e1,0xa05338ea,0x75dbc474,
192900         0x7b09f6cb,0x3cb4044b,0x80434609,0x6767da18,0x098ceac2,0x97851422,
192901         0xb55235ba,0x611bfbb2 } },
192902 };
192903 
192904 /* Multiply the base point of P1024 by the scalar and return the result.
192905  * If map is true then convert result to affine coordinates.
192906  *
192907  * Stripe implementation.
192908  * Pre-generated: 2^0, 2^256, ...
192909  * Pre-generated: products of all combinations of above.
192910  * 4 doubles and adds (with qz=1)
192911  *
192912  * r     Resulting point.
192913  * k     Scalar to multiply by.
192914  * map   Indicates whether to convert result to affine.
192915  * ct    Constant time required.
192916  * heap  Heap to use for allocation.
192917  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
192918  */
sp_1024_ecc_mulmod_base_32(sp_point_1024 * r,const sp_digit * k,int map,int ct,void * heap)192919 static int sp_1024_ecc_mulmod_base_32(sp_point_1024* r, const sp_digit* k,
192920         int map, int ct, void* heap)
192921 {
192922     return sp_1024_ecc_mulmod_stripe_32(r, &p1024_base, p1024_table,
192923                                       k, map, ct, heap);
192924 }
192925 
192926 #else
192927 /* Striping precomputation table.
192928  * 8 points combined into a table of 256 points.
192929  * Distance of 128 between points.
192930  */
192931 static const sp_table_entry_1024 p1024_table[256] = {
192932     /* 0 */
192933     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
192934         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
192935         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
192936       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
192937         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
192938         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
192939     /* 1 */
192940     { { 0xe0162bc2,0xbf9c7ec6,0x10a89289,0xddecc6e3,0x9e499d81,0x5d599df0,
192941         0x6d358218,0x9a96ea28,0x70c5f8db,0x01aec7d3,0x8cf5d066,0xe72e4995,
192942         0x3e91d7f8,0xc2e7297d,0xda9f2f5a,0x8621db92,0x5a5679ed,0x4b26c867,
192943         0x2c56aac1,0x233385df,0xc6a13f99,0xb88e74d4,0xffa8ec11,0x1214b173,
192944         0x1f3f9fef,0xa0386a27,0xc0e7b44e,0xbd9b1b4e,0xeecd3496,0xafe528dc,
192945         0x1c49f80b,0x8dfff96a },
192946       { 0xc03c0c83,0xb4a4753a,0xabcdcd75,0x68e69d18,0xf775b649,0xe3839b88,
192947         0xbf58f352,0x803f949a,0xbd0bc15c,0x5f702679,0x8ff298c2,0x85bf5d16,
192948         0xc6c7976e,0x3f6ebd98,0x45e3e1b4,0x20618af4,0x54e64093,0x67d5598e,
192949         0x504fed9e,0xb047283b,0x70d87517,0x450cabfd,0x3f5addbe,0x47d628bf,
192950         0x78cb4cca,0x0037ef30,0x6b1c4908,0x4e148d3c,0x4fcfd837,0xe256d329,
192951         0xde3c01f3,0x2aa1207b } },
192952     /* 2 */
192953     { { 0x01900955,0xa95b6dae,0xceb4656d,0xa5dc9cc1,0xe72fe95b,0x50c78907,
192954         0xa040c334,0xa1ae5447,0x7952ea6e,0x91191370,0x6d097305,0x54ff7343,
192955         0xbda4d10f,0xa4db0074,0x91644070,0xfd5306f1,0x8b24522c,0x14b9fe73,
192956         0x7849f762,0x1468dad6,0xb0dcd2e4,0x87b29a18,0x5e1ad492,0xadd7f1a1,
192957         0xdbba2a1a,0x9ac63a81,0x81223379,0x01379c5b,0xb0e53bc8,0xf402b2f0,
192958         0x0bf13b61,0x8c3eb27f },
192959       { 0xe513696f,0x9a4ad3e1,0x18c81ffa,0x0350ba5c,0x3c033d13,0x1e2fc136,
192960         0x17a531bc,0x53da6e71,0x1aed610d,0x42ec6490,0xe99ff567,0xd33e8df7,
192961         0x3deed12a,0xe4aad73e,0x180f4deb,0xd983b465,0x502f30b4,0x99365269,
192962         0xa8918d7f,0x7e2799ab,0x700fc79a,0x0ffe84b6,0x40bfd8c2,0x7b4400d6,
192963         0x5d2641bd,0xc3a21d21,0xc32621cb,0x79839442,0xb1401e83,0xace6500b,
192964         0x251c4310,0x7bf4163e } },
192965     /* 3 */
192966     { { 0xe3fd589e,0x1c174f88,0xdf974a03,0xdb501790,0x3e70549f,0xd09623e3,
192967         0x15924f34,0x8d091eff,0xf9b65ac5,0xeef79cad,0x3f69c2cf,0xd2cc4262,
192968         0x52cd82bc,0x817d9032,0xa5f1dddd,0xacf4f4d9,0x5011b6bd,0xd0612635,
192969         0x2ed140c9,0x9f74490d,0x4db686d2,0x64092e8c,0x776b0fcc,0x225eef16,
192970         0xdf16aeb6,0x0e8c01e9,0x84bbd82a,0x62836741,0x8956e337,0x757574e2,
192971         0x705a7f07,0x9871edc6 },
192972       { 0x776535f7,0xbd0b76d5,0x2635b3b8,0x5214d602,0x9d216f64,0xc0c25ad9,
192973         0x5515bf75,0xfd4df3a7,0x5e9f1675,0x24a625bc,0x406873e7,0x3c35efb7,
192974         0xbb2e5c4a,0xef5c9a33,0x806b198a,0xa971b35e,0xa3c690ed,0x9f5c0ca5,
192975         0x8e1e2341,0xa8d5dd89,0x955ad9e4,0x4cecbcce,0x248d3416,0x2ecf4407,
192976         0x45c0af6e,0x1abb3811,0x1c780fff,0x3f4bee82,0xc272ed57,0xd14df768,
192977         0x371637ad,0x397ed10a } },
192978     /* 4 */
192979     { { 0x755c2a27,0xcf3e0bb2,0x59585c44,0xd38e42f9,0x19285e60,0x46b13e0f,
192980         0x76273d0f,0xc3ecd0c0,0x193c569a,0x7800f085,0x4351818a,0xf04e74ab,
192981         0x8496363b,0x9258aa38,0xb8c894fe,0x8456617c,0x2af969a0,0x8bc62aaa,
192982         0x5a4668d9,0x66c2280b,0xa992f4fa,0xbc9df58e,0x3f401e99,0x5db0b7d9,
192983         0xc4c38c0e,0xe0614fe1,0x2ccdf6b3,0xd531151c,0xe143b618,0x1c7575ec,
192984         0xdf9398a4,0x40247985 },
192985       { 0x8f055746,0xfba25178,0x0ab1e6e0,0xc5ba0040,0xac292697,0xe1b194fb,
192986         0x5b4f4740,0x77152119,0x9bb7ba54,0x250091d0,0xb9a139a4,0x7a674861,
192987         0xf353aa7e,0xba8413b3,0x2443ceee,0xafe77192,0x3847bbd0,0x14468d36,
192988         0x3da4942d,0x61f79ff6,0xd425b456,0x1563a1c1,0x75ff4630,0x3c270fcd,
192989         0xeb2802c9,0x42072090,0xc85c7004,0x68f0cdcb,0xfa032e74,0xca4372fb,
192990         0xc8b79d80,0x1a6fd1e6 } },
192991     /* 5 */
192992     { { 0x8d5116a3,0x967a901a,0xb2f5f47f,0x0b844394,0x60ebaf3b,0xe39ad452,
192993         0x60ccfc0c,0x1e1be617,0xcc3f53f2,0xac07e3d2,0x1ed11bb6,0xdd838e0e,
192994         0x1c15b0c2,0x45475307,0x920fe5b8,0x70dd4748,0xe471896d,0x1a20be2d,
192995         0x59276c7c,0x3c3fad8a,0xc886ee07,0x026a1cc3,0x6e831ac4,0x9fdb6f37,
192996         0xac501d65,0x26a35d1a,0x40da8574,0x0ae98905,0xabd734e5,0x65dde0a4,
192997         0x15614750,0x29b7d4dc },
192998       { 0xcbf4e20b,0x44b3c2cb,0x58cc44c5,0x1c3f548f,0x5b0cac1f,0x39809b54,
192999         0x00f80621,0x0c0f02b5,0x066905e0,0xe612b890,0x8350188c,0x8f158ed7,
193000         0x3f5576b2,0xc01dc458,0xa45492e0,0x29803272,0x0ff92443,0x77a5623a,
193001         0x29d0dc41,0xd12a2b00,0x2780e87a,0xb4125459,0x0d53f272,0x1ebcf903,
193002         0x24301e8d,0xbae6ea40,0xa37d0798,0x1e5f3f2f,0x22b4126c,0x9342c310,
193003         0x5382497e,0x5d092802 } },
193004     /* 6 */
193005     { { 0xff2f780d,0x583a2b7e,0xd7d76b1d,0x34d26820,0x86f74aec,0xe3c32847,
193006         0x10823feb,0x0fd42212,0xfb5e7bf4,0x227e417e,0xa568f8cd,0x510d49b6,
193007         0x1781bbec,0x53bce7d6,0x2f3718b7,0x9cfe3f22,0xd9de6c1f,0x7f44e89f,
193008         0x3fac9b55,0xf1cc553f,0xe6f300bc,0x9d2d0846,0x9f0ae6b1,0x976c82a2,
193009         0x24b8bbe0,0xe63dbf5e,0x973a5aa7,0x4cac7f45,0x84dd33c7,0xc6eb6237,
193010         0x142fee5d,0x0a26e434 },
193011       { 0xacaa9a08,0x8081339f,0x5246ece1,0x40f31105,0x61393747,0x892c8170,
193012         0x242f02e1,0x8d8d4103,0x3b5de98a,0x482bfd20,0x5abbe952,0x89ef946b,
193013         0x37698249,0xb8d218b9,0x66617c7a,0xd5268e89,0x8b7d2b91,0x962e7551,
193014         0xfe8d67c3,0x2c5c7973,0x2b017c51,0x42e3150a,0xc1a29469,0x6f4e5ebc,
193015         0x531c7083,0xa39910ce,0xb77b9e50,0xaf4f6eb4,0xda120ad0,0x68cbb175,
193016         0xb92636ec,0x19497c61 } },
193017     /* 7 */
193018     { { 0x417659a8,0x6920b0c6,0x92cb28ff,0xc77ab9c7,0xb687797f,0x55b67180,
193019         0xe7759363,0x4caf58c1,0x5561b186,0x5155bdb6,0x780f4946,0x2e64e355,
193020         0x229a8b20,0xeb0ac9b7,0x2571bd60,0x88594d78,0xe3fa78f9,0x5dcc0939,
193021         0x2ac2d379,0x7b8b4830,0xb90f1444,0x505fbf60,0x3ce4b3c1,0xac610e81,
193022         0xd59b5c18,0x39a4f27a,0x7cea0222,0x5fa33973,0x8dff1c7b,0xe578730b,
193023         0x517bf7a6,0x96b91b8b },
193024       { 0x9aac087c,0xc1a991f4,0x6cfdb28d,0xce62f74e,0x5f7600d6,0x08d6ff9a,
193025         0xf917f9c9,0xd781cd04,0x3de52dbf,0x7796f5f6,0x2ed72180,0xe7db64e0,
193026         0x6fa4137d,0x0f0876f6,0x3ca1f716,0x3271ee64,0x7c4ab8a3,0xcb9b2058,
193027         0x39481047,0xcba17107,0x598c5c37,0xdf9a190d,0x6f20e125,0x0cb6e72a,
193028         0xf4f2902d,0xa3142204,0x7ce2dcfb,0x42d28cb9,0xa3d3c351,0xdf261b8a,
193029         0xcffc249d,0x73f3d315 } },
193030     /* 8 */
193031     { { 0xe6fd3673,0x5d86855b,0x9d214b7b,0x309b70af,0xdcc46cd3,0x8d332f90,
193032         0x595510de,0xe553c015,0x38c1251c,0x5746a096,0x85cc1bc9,0xcd7cea5b,
193033         0x002eba8f,0x4ffa1468,0x22fcd77c,0x10a3cb70,0xc4ea05e3,0xb6999dfb,
193034         0x4efa756e,0x3375a0d0,0xdced5fd8,0x4d90279e,0x251fd56e,0x48192403,
193035         0x82a4c5f1,0xe87633a4,0x1b34105b,0x3170d130,0x7247e578,0x93998b0f,
193036         0x436ba1fa,0x88934f64 },
193037       { 0x4713eabc,0xf09f43b0,0xaccdc517,0x4ca7dd91,0xef13ca7c,0x27daa63b,
193038         0x2588184b,0x8b2e5a7a,0xd95dc269,0x0a8cb612,0xe1f2f14c,0x346975a2,
193039         0xe172935c,0x1f29b8ed,0xd40bc1e3,0xc3cbfd6e,0x132623da,0xd3f46b3f,
193040         0xfb0b7681,0xc115be6d,0x56da4344,0x5e31c345,0xa8e43d98,0xa7c63f18,
193041         0x4bddb4ea,0x55cb2083,0x4a54f58c,0xb16a0c38,0x46fd69d9,0x74eacca2,
193042         0x153548e1,0x0d1898bb } },
193043     /* 9 */
193044     { { 0xe35ef043,0x4ea73461,0x3496b564,0x107b67d9,0xd0f83a3c,0xd62c173b,
193045         0x51d29c35,0xfad4b038,0x71b1c1a4,0x3f42882a,0x54b43b9e,0x5d2bcf66,
193046         0x2abdf543,0xc77b15aa,0xdabe3dc1,0x5cb38a80,0xa481673b,0x15fda0ae,
193047         0xe7b90ebe,0x86996b4d,0x2bc8f3d8,0x84f87e25,0x37c4e424,0xaded03d6,
193048         0xd7a7afd8,0xe5ede666,0xa1ccb93a,0x80dd95a2,0x46fba391,0xa55cfd25,
193049         0x46f82e60,0x2bdab1dc },
193050       { 0xfa6fed61,0x7a4de22b,0xcc8dd94e,0xca458aa5,0x071222f5,0x3e372df1,
193051         0xe5aff377,0x06a4b44f,0x4a738e6d,0xbc2d0ba7,0x5f31f136,0x1a470e1d,
193052         0xe102a911,0x77ff933a,0x310c7885,0x8b380a50,0x783fc5ac,0x9f3c0228,
193053         0x44725d06,0xec668925,0x5ac84221,0x878f0e16,0xcfda6e8a,0x9a3af1af,
193054         0x78cd2aba,0x0183ed37,0x826d0eae,0x32cdbd60,0xcbee6415,0xb3234661,
193055         0xb9c10120,0x353eb892 } },
193056     /* 10 */
193057     { { 0x10b5521e,0xc8fdcad6,0x52e702f0,0x1a11b440,0x8ffda49c,0x6302680d,
193058         0xcbf36bad,0xcdb9654a,0x4c10a2d7,0x7b58ce11,0xe630e7e0,0x1e5d1f7d,
193059         0x6760a813,0x8cbe3d7d,0x6480d77f,0xeb35866b,0x7f036219,0x58728cf3,
193060         0x42a8a757,0xdd5865ed,0x906a2870,0x283f1f1d,0xa51f906b,0x79e23fa4,
193061         0x543b20a8,0xf2ac6e83,0xb81e7754,0x4f0b6379,0x840016ee,0x57fbc0d4,
193062         0xe621b67d,0x8da20771 },
193063       { 0xecce65ec,0x3c855004,0xb748185e,0x76d10d1f,0x78797ad2,0x64be7bca,
193064         0x77e54aad,0x43444db0,0xbe0df0ff,0x17b6b0c9,0x055086a4,0x8fc4256c,
193065         0xfd74d5a3,0xf952c43b,0x01c4edb8,0x501e005a,0x4a57e328,0xd5172dfc,
193066         0x535d6ee3,0xdb40ce4e,0x0c650918,0xbaef1e5c,0x857561fc,0xe85145e7,
193067         0x34a224c6,0xe468536a,0x0ec0e0a2,0x69a8e227,0x242b03fc,0xb3f52247,
193068         0xc3bebd5f,0x862f55e2 } },
193069     /* 11 */
193070     { { 0x226049fe,0x2d6a390f,0xdcbbc9fb,0xcc92a578,0x97634fb7,0xa52feca4,
193071         0x3dea5893,0x2b340cb6,0x2a49e916,0xa39f338a,0x949e41f3,0x26b2df3d,
193072         0x065a7e40,0xc71c7cdb,0x468281a2,0x4a9b84a0,0x731eeeca,0x63eeb503,
193073         0x76cbb725,0xe6d09134,0xb94a678c,0x0cf979a9,0x808fd9f1,0xb44d8c3b,
193074         0xe0afc5b9,0xe60da613,0x3ea5be69,0x52dce7de,0xdc1ee74f,0x3a5d6864,
193075         0x3bc80790,0x71ab2891 },
193076       { 0x3b5b60ad,0xcf618fc4,0x4a0c3184,0x0afb5e30,0xbc403302,0xd22381cc,
193077         0xdb1c0c66,0x33cf8953,0xa6112a8d,0x9c994e4d,0xd1967a86,0xd7aae2c3,
193078         0x5b7acd29,0xc28d5493,0x6c9a57fb,0x8075bd13,0x9c8427f9,0xc9c0373e,
193079         0x193225f5,0x2cbca18d,0x442c018c,0x73777d13,0xfbb3a727,0xebe5ed47,
193080         0x1962dc18,0x70437d49,0x2dc08806,0xf39c1e09,0x15fff35c,0x03e9c6f7,
193081         0x5e360a65,0x8d087bb6 } },
193082     /* 12 */
193083     { { 0x3fdc1844,0xbe212302,0x105eac56,0x6eca27ef,0xf168a348,0x2183a606,
193084         0xe1d7a4cb,0x295f807d,0x7ef5d43e,0x7246a632,0xc77025c7,0xae143205,
193085         0xf3484e3e,0x4bdfc7ca,0xdf52c075,0xec939895,0xd7a9cac0,0x82e655f6,
193086         0x8baeddb0,0x985dfe20,0x527de731,0x79c817e4,0x313de1ea,0x30ce0fbc,
193087         0xcc4f6cbb,0x9df95b89,0xf5bb20cd,0xf2aedf1e,0x1a8cfb01,0xfc1e0a89,
193088         0x63edb7ec,0x225ed34a },
193089       { 0xbabb1a85,0x3e13154d,0x1e6a565a,0xd3d8dae7,0xab4b100f,0xd3217d56,
193090         0xebc78e1a,0xd44d934e,0x48e73d37,0x0215321b,0x201e43cb,0xbbc90bfa,
193091         0x27500905,0x3c23f1d0,0xc86691a1,0x2a2e5000,0x6065841c,0x08b2bad2,
193092         0x30026b60,0x15d41caf,0x5276ce61,0x1712c2f4,0x15932ffb,0x01c4c3e7,
193093         0x6a74caf2,0x7894e13d,0x0c0537a4,0x02d6f5df,0xc2b1c97e,0xa8fb7602,
193094         0xd0887c7b,0x612b60e5 } },
193095     /* 13 */
193096     { { 0xba245d6b,0xefd495cf,0xa2ce3ff6,0x5cf0cbb7,0xdff5feee,0x24da2ac0,
193097         0xcf28c6a3,0x90c914f8,0x4308a56b,0x72fdb50d,0x13d72034,0x03dbf779,
193098         0x822ac9e9,0xcfa5ec91,0x3aea3e81,0x0dde73c8,0x66289139,0x545ba962,
193099         0xca6acbd3,0xa52f648b,0x98a0683a,0xff6f276e,0xa378ed52,0x2536d3ac,
193100         0x885ac1d9,0x353c2c54,0x00bc84a7,0xcaff52da,0x37684167,0x3971f81c,
193101         0xd2d7986e,0x0f7334e1 },
193102       { 0x6596067e,0xafbb5c83,0x38c19806,0x33e54e19,0x39cb0dcc,0x8285d967,
193103         0x424035f9,0x2b53f43d,0xdfef9095,0x38c531f8,0xdb0f571a,0x90fbe8e4,
193104         0xa39ca787,0x9a0c1ed2,0x606f2620,0x2fecc1d6,0x72b7cb4a,0x9dc890b1,
193105         0xccbb7868,0xc33ca6fb,0xfe73ee49,0xd1b11082,0xfcb66c48,0x590b7d17,
193106         0x86e14573,0x9356b0a6,0x053ead85,0x75d682c4,0xc54d30fb,0xb2ae55fa,
193107         0xf8aee949,0x67636a72 } },
193108     /* 14 */
193109     { { 0xb91d6bea,0x638063bc,0x923ecb96,0xae263a2e,0xc627aca6,0x9d7b0992,
193110         0x77af9e7e,0xc6ed001a,0x24aafebb,0x9214accf,0x78055a90,0xa3564b96,
193111         0xe027499d,0x00999b1c,0xe46a06a5,0xe413a4e1,0x2e51efe7,0xa05d13f6,
193112         0x9ba843be,0x35e87d34,0x3183159e,0x0a633825,0x54601923,0x6023e8ba,
193113         0xb7fd1cf2,0x9b107721,0xfdf2fd53,0x46b5542b,0x1c18af38,0xb314f4f8,
193114         0x60ac8965,0x086f9876 },
193115       { 0x8cbb9850,0x76701954,0xa20d2c8c,0x6210b730,0x5335670c,0x4084d057,
193116         0x0324baea,0x3ecdc595,0xc76ee9b4,0x607fc5f2,0x440ffa64,0xf393d00f,
193117         0x2dc1463c,0xe0111796,0x9c7725e7,0xf00b8251,0x5bd1d186,0x35e60736,
193118         0x2cf72aac,0xf3d8554c,0xefa3497d,0xb4dd0fde,0xf646ad11,0xd712268c,
193119         0x9f7b8ead,0x07c20afb,0xfc06dfe5,0x630969d4,0x7245549a,0x76b7df1c,
193120         0xe61ae810,0x681f9403 } },
193121     /* 15 */
193122     { { 0xc9a0623b,0x7cad5163,0x67fab8d4,0xdbf82957,0x81af7c7c,0x2ccab0ec,
193123         0xe966d5c2,0x469e38c8,0xf0d4e41c,0x34430d52,0xa52b359c,0x426075a2,
193124         0x33bd0127,0x242dd3e3,0x9fed2341,0xcda3f635,0xd7d52ffa,0x4df33730,
193125         0x7640c3ef,0x5fff56f0,0x1bbde57c,0x4783c21c,0xeb8bb336,0xd8784a2a,
193126         0xead08405,0x1ec7c533,0xf9b62bd4,0x4b7f1423,0x7075d4af,0x5543145c,
193127         0xba60590a,0x0c9de94a },
193128       { 0x95d5682b,0x8ed72735,0x2ec276ed,0x711c4283,0x8b36a0d2,0xd1f4aed5,
193129         0x8498a88f,0x62ab40c4,0x4480f451,0x58c8fc62,0xb79cffe2,0x8bc8ca4b,
193130         0x701a359d,0x90ab583c,0x3fd5d15d,0xaee31a73,0xc912333c,0x02a5597b,
193131         0xb6c3e3c2,0x1019cae4,0x29938088,0xe513042c,0xf47c8199,0x0e00283d,
193132         0xf2a00e92,0x90d68e58,0xa775ae3b,0x69e2df41,0x871c30b2,0xb8d2eca5,
193133         0xbb1de396,0x733dca0e } },
193134     /* 16 */
193135     { { 0x4b59213a,0xf5b495d0,0x8d70200e,0xca672039,0x2b6771c1,0x4bcb09a6,
193136         0x2b9eb0cb,0x26adeed4,0x8cdba212,0xeb544754,0xf08890d1,0x0e1abfcd,
193137         0x698e46b4,0x52509963,0x82e9c138,0xe1bff0b0,0x51099a71,0xa189e4cd,
193138         0xc9b91cc7,0x2360c9bc,0x137ec4be,0x9bd4d7dc,0xd1519f6e,0xd0356521,
193139         0xcf832503,0xbf5f6d78,0x8deea2b4,0xe4301031,0xef4c319c,0xc3132494,
193140         0x0f1fa7d7,0x2ab3bd47 },
193141       { 0x922c9fbb,0x5753b680,0x0f16c6d1,0x869e7dc8,0xbac16efc,0x83445135,
193142         0x846d1d9b,0x4326a3b4,0xb2d62c21,0xb517fee3,0x0b292ad5,0x6905afa2,
193143         0x2cadac13,0x2a57131a,0xebdbca8d,0xcd904d8f,0x3f365fb2,0xdfeda86f,
193144         0xdc7eaa1c,0x7097b208,0xa45e77c0,0x89a35a84,0xcf5d118e,0x417a062c,
193145         0x1f6e99e8,0x3c0c04a8,0xba7a087d,0xc44704b0,0x3ea22ad2,0x6f8a27d1,
193146         0x4c27d229,0x93a4b416 } },
193147     /* 17 */
193148     { { 0x1f1efb7a,0xd4271bc1,0x33fccc0d,0xae4e68e6,0xb11f50a8,0x9d9bc8f1,
193149         0xaf076089,0x5430398f,0x443d0e03,0x45e242fb,0xf6e3d4c1,0x73ec2519,
193150         0xba9bad09,0xab70f790,0xf9add10f,0xde612ad5,0x14e942b4,0xb837e54e,
193151         0xddb8b68a,0x175a56d3,0x1ac2a408,0xe85b233c,0xf0c80f94,0xf8ff6c30,
193152         0x898db4f9,0x4b7f3fb7,0x45a7dcdd,0xa2c6044f,0xfe3d3895,0xf3abb2f6,
193153         0x32ee7763,0x342ce0d7 },
193154       { 0xcf491b1f,0xeb261394,0x1909e395,0xdcaaeed7,0x9fe4dbea,0xdcc4055a,
193155         0x493d604d,0x17a6611d,0x1ce5ebef,0xba445a3a,0xe3989cb5,0xe82e2858,
193156         0x83f58406,0xb96f4282,0xa156cf55,0x99877b99,0x4e166a0e,0xaf906a66,
193157         0xb2976d13,0xcea1d353,0x36c61a01,0xefc16f27,0xb0f55d86,0xdb04c433,
193158         0x8eb34c01,0x3cb4b269,0x2ae60280,0x38d07f78,0x43be3ec5,0x43ac3bcb,
193159         0xe156fd20,0x455f4af3 } },
193160     /* 18 */
193161     { { 0x754ec21c,0xc057f262,0xe3a1ba38,0x3eacd4c9,0x116c1fe9,0x3a0210d1,
193162         0xeacc8ab6,0xe4ea4e94,0xea6f32ca,0x31c00c9a,0x86b975ce,0x5cb6239d,
193163         0xa14ea1e9,0x654d5d8c,0x5067fc8b,0x230d31f4,0x6355fecb,0x48bb90cb,
193164         0xdc172e8e,0x78f81ece,0xcb006737,0x288380a8,0xe162d012,0x19b02e01,
193165         0xc5af145c,0x0e087a06,0xb72dc354,0xf04dc8b7,0x8de3c066,0xf70ef214,
193166         0x13009fb7,0x4f148243 },
193167       { 0x6e2055e2,0x5e004fce,0x86c32067,0x89e247ea,0x5f9daaa2,0x4ebcbd95,
193168         0xceb7f63b,0xd15f212f,0x863784a0,0x5ecc5c1f,0x75760251,0x53b3800b,
193169         0x8a6a2954,0xeb9301c3,0xa13cdd19,0x0f16ba18,0x887c2d24,0x8313d251,
193170         0x9a9413f6,0xf9923585,0xfe3fd7c5,0x423405e6,0x16e0ee05,0x678aeb34,
193171         0x3fadaab0,0x1f3be7bb,0x82884471,0x7901fa2c,0x4d662ff6,0xc950db30,
193172         0x3c01170b,0x74d5d2d4 } },
193173     /* 19 */
193174     { { 0x2b5bfe11,0xa3002dc0,0x52d321e7,0x0733410d,0x9679ba89,0x15920f65,
193175         0x685b236e,0x0e248c14,0x346f6040,0x8cfab594,0x40c717f0,0x9f57afb7,
193176         0x66044576,0x0dbab28c,0x9cdc3247,0x0fa09968,0xc230ed05,0x41e02ae2,
193177         0xe45bef74,0x0d961554,0xce4d7b6f,0x9688a982,0x5e62d22e,0xfadefac7,
193178         0xbd2cba28,0xaf1512a6,0xbe7c749f,0x78868e62,0xae9f5a6b,0x88048d81,
193179         0xc5857a29,0x6b1a5442 },
193180       { 0x43242066,0x9f5ab9ad,0x2ccca2ae,0x0afef1b5,0x988edc4e,0xb1b43ec7,
193181         0x0341b0d5,0x0d0c00f1,0xb50aab37,0x4d68b8f7,0xf3a64a99,0x9a8e4e6f,
193182         0x7f1a684e,0x198338fb,0x351a0f5c,0x8bc0e748,0xdac44515,0x2cacf2cd,
193183         0x5e9ff76b,0xc14d3999,0x16393055,0x54a01b3f,0x888d8376,0x6ac3eea5,
193184         0x723277b1,0xb84d9a9a,0xe11dbbbf,0x99132691,0xabb67178,0x597717ae,
193185         0x8bb14ac8,0x4c213526 } },
193186     /* 20 */
193187     { { 0x95532833,0x2e6fe0a6,0xd626d067,0xabca228e,0x649e73bd,0x22aef3d9,
193188         0xf03c4c0c,0x2083a87a,0x35169b45,0xe954e75d,0x74506a89,0x577509ee,
193189         0x2aeacf90,0x49cb276e,0xfa409f91,0x08275d77,0xf0bbd6b9,0x61eb6f3d,
193190         0xe4132704,0x948202cb,0xb1c498b1,0x35f3fc21,0x361fee59,0x76c68ba8,
193191         0x50e051f3,0xa18cbbd9,0x318e7042,0x2384a879,0x80dd1e8b,0x292abead,
193192         0x5c37c334,0x65713c29 },
193193       { 0xceb77b9a,0xdccca8e9,0x23b69469,0x2f97e727,0xa01d6b28,0xc76abee6,
193194         0x5abecdfe,0x3925203d,0x29290d70,0x89448082,0xb0314438,0xf9931424,
193195         0x7cd447c3,0x04209df1,0xc855c827,0x7c6f2059,0x56c0e069,0xd97d7862,
193196         0x412d94c4,0x5a9db6fe,0x994c41dd,0x19a64591,0xc89e21a3,0x12348aa1,
193197         0xc6a03f0e,0xd6904b50,0xa616feac,0x55c15156,0x7cc7693b,0x4e36d1b5,
193198         0x3bae3c38,0x6b0e996c } },
193199     /* 21 */
193200     { { 0xcceced00,0x32789fab,0xe5b7aa66,0x3237e71a,0x2ddebcdf,0x87b2e269,
193201         0xb61dad8f,0xb7245120,0xd35f803c,0xe11e5e48,0x98e50f0d,0xfb4df5d7,
193202         0xbcd2ab92,0x60ee68b4,0x1ce3363d,0x98ab2f5c,0x7cd42647,0x15ba39da,
193203         0x83f4fb3f,0x1a6572eb,0xe56f08db,0x0f77de88,0x172562c2,0x1743761e,
193204         0x8a58f0f4,0xbe349ff8,0x84d1d6e2,0xe04da71b,0x9e9ff3b4,0x368f0342,
193205         0x678223f8,0x4022a205 },
193206       { 0x83847375,0x527bbd05,0x3f451af0,0x3ae56b62,0x4b2c7f18,0x6198f24d,
193207         0x4525b98d,0xee323f5b,0x0e0884b5,0xa9d8d39a,0xfb12c776,0xd005d7f6,
193208         0x708bc154,0xd71c483e,0x742541bc,0x8ca6fd28,0xf8397ddb,0x0af3dccd,
193209         0x3eccf243,0xb80d3125,0x58d81b8d,0xc743a108,0x71391f68,0x3f48eb21,
193210         0x33bb657f,0x493aff88,0x07e47e31,0x1d15ed66,0xe08279f6,0x10159b11,
193211         0x24a6a956,0x312179cb } },
193212     /* 22 */
193213     { { 0x07615ac2,0xa94cc3ca,0x121ad581,0x85865e64,0xa7986b79,0xae47616f,
193214         0x9d5e0f1d,0x395a40eb,0x3d9457ea,0xa9143264,0xfa2865d9,0x8de6d6a3,
193215         0x1014ae8c,0x0771db96,0x976a87cb,0x77a7cce6,0x143a0f60,0xa7de42e1,
193216         0xd993d934,0xe203cc09,0x98ec4c3d,0x92018693,0x3a25df4b,0xd77546d8,
193217         0x62b02d6b,0x0ad9eb47,0xd05a7189,0xfaaaf208,0x431221bb,0x5238181f,
193218         0x733511ea,0x417d6c78 },
193219       { 0x0e91e9a8,0x3cbd81b7,0xc370d6b3,0x73340418,0x8eaa2373,0x825db10a,
193220         0x6c7d6756,0x8f2b09e4,0x94c33ded,0xe288ee9b,0x1695e3fb,0xcd8426bb,
193221         0xdce9e888,0xa6176c86,0x6165e362,0x3f4c8922,0x6063fb09,0x514e411f,
193222         0xc8f9e04c,0x6907ac20,0xdfd2ad61,0xcef7469c,0x8452199a,0xba30bae4,
193223         0x12ac3462,0x30681293,0xc92d482d,0x011be873,0xe8330995,0xff4cbf89,
193224         0xd1470a0a,0x02189d52 } },
193225     /* 23 */
193226     { { 0x92599c69,0x73e419dd,0x7fec32ca,0x5b94221b,0x09bbfbfd,0xb2bf9bd2,
193227         0x63ed895b,0x61ea97a4,0x3f486f79,0x6609146b,0xfd141a39,0xbd1c7a05,
193228         0x83d64135,0xc79ec8cf,0x9883507b,0x7f8fd42f,0x17b3d027,0xafcb53b7,
193229         0x67ca5a21,0x86658dcd,0xcd149786,0xa6a6c0ac,0x34b95067,0x16f3d70e,
193230         0xdf44958c,0x371208e3,0xec280212,0xd2dd64e6,0x30782c71,0x33b2c4ab,
193231         0x521176fa,0x7bbf8abd },
193232       { 0xa78b981a,0xbe9e4aaf,0x304ec828,0x788b4e36,0x3959dea3,0x0c45cf39,
193233         0x240b39c7,0x70a9bdd3,0x28383b7d,0x499cd7dd,0x307a1026,0x30690b2e,
193234         0xee92f1b3,0x2262d598,0xb4725a48,0xc62d77de,0x7bc3aa0e,0xa16f25bc,
193235         0xd15ef7fa,0x62dd8b65,0x0b96d68f,0xd979221d,0xa00f1906,0xb92885c3,
193236         0xeb74c740,0xfa476b9b,0xc7576222,0x217ddbb5,0x5788504f,0xc2782c30,
193237         0xf812716b,0x860d096c } },
193238     /* 24 */
193239     { { 0x4d79bbf9,0xfebc337d,0x69f74f80,0x5d53eab8,0x33104d53,0xff36a095,
193240         0x196f8b97,0x2ab820da,0x75ce6909,0x961d3d1f,0x04683754,0xb197ec04,
193241         0x93a6cb9b,0xa68ce1bf,0xc5f021a3,0x503456ff,0x8940ffdb,0xb50a2db1,
193242         0xef004209,0x77c50f8f,0x04965875,0xd635d177,0x8bb8770a,0x725766d9,
193243         0xa078e53e,0x8e19b028,0xf9fc8378,0x364d4cca,0xf0dd39a0,0x1a3df411,
193244         0x03adf920,0x7e80e442 },
193245       { 0x539a1ddf,0x4b5f8a57,0xee486562,0xd248e7ae,0x816021e1,0x1c7b491d,
193246         0xfd36d2c4,0x2e7b871b,0x0aec00d9,0xda38b504,0x6193f1b3,0xf2827612,
193247         0xfb1f78d6,0x69c3fe86,0xe827ac33,0x56c8b786,0x3487c8f7,0x1687f6c7,
193248         0x19dee5bc,0xab8f2217,0xff399418,0x04e8473f,0xa9027c80,0xf384c014,
193249         0xaa1d2e28,0x9967be9a,0xe065eef1,0x869686d3,0xc7bd837c,0x737c6b08,
193250         0x9e8bd863,0x5dcab5d1 } },
193251     /* 25 */
193252     { { 0x9a7d772b,0x0784283a,0xe540959b,0x6b49e525,0x86414ab5,0x546bb008,
193253         0x9d74b2a9,0xd4448162,0x203b0b1b,0x267890ad,0xc8d3f86b,0x1e7a82bc,
193254         0xd85a83c7,0x1352bfb5,0xfad07ccf,0xf29f16e3,0x41e0c43f,0xc02a63b8,
193255         0x6b379fef,0x904f22c5,0xb1244f26,0x19d8a653,0x3a28bdea,0x6635b6df,
193256         0xf6d455ce,0x18b68851,0x9cff3735,0x74ac2818,0x8b2cbdab,0xad40f9df,
193257         0xadc9d498,0x08cc2d9e },
193258       { 0xc170c84b,0x2e6a6866,0x5a49a484,0xbb989e8b,0xd04c8992,0x7b0e00e0,
193259         0x61b3a423,0x55ad3478,0xb0d01899,0x3c952450,0xe3100cb3,0xe3922155,
193260         0xf03276d0,0x19265b6e,0x76d42b53,0x0fe8595a,0xfc6353b6,0x0a96dee0,
193261         0x246f893e,0x761e0dc8,0xf0a74cba,0x4ec902be,0x3fdfad9b,0x61008684,
193262         0x4fdb6975,0x5d6a60e4,0x7ef7590a,0x3f53aac8,0x12870a37,0xd29e6be0,
193263         0x55aa55b0,0x991fadc1 } },
193264     /* 26 */
193265     { { 0xb4844ffe,0x82bc4b0f,0x60f8b871,0x73922714,0x4ce3f1f3,0x8ac000e2,
193266         0x163519ec,0xf0d548b4,0x88288b5f,0x7aaf842b,0x2bdc9a70,0x9e8b0c4c,
193267         0x4ba5fd67,0xa06d5152,0xf93cdec3,0xd0b1afa0,0xdf89f8f0,0x280955ba,
193268         0xeea32c92,0x86cbe92d,0x3fe05be4,0x0cae3f99,0xfa6919aa,0xf2607095,
193269         0x6e0f1b8b,0x0f54741e,0x30ecf988,0x2aed1f74,0x734991d7,0x9296f76b,
193270         0x259f0fe9,0x66cf8d28 },
193271       { 0x226f5868,0x9b01905b,0x16909e9e,0xc102e88c,0x4a37eb54,0x2bd08916,
193272         0xc9816323,0xf72253e8,0x86bac53c,0x37f84e9d,0xafeaaaf7,0x2e352454,
193273         0x2ca0046e,0x67c86f77,0x6663372e,0x86bce50e,0xb6950a04,0xf6a3a960,
193274         0xfc1aba93,0x61f994d7,0xc1326e6e,0x1957c12b,0x2e56b005,0x9b658fe4,
193275         0x8592740c,0x9cd297fc,0x177f26a5,0x7654ce9b,0xa79d2ebb,0xaaa699db,
193276         0x0ecb6448,0x5fca0c5a } },
193277     /* 27 */
193278     { { 0x569a6663,0xe26e25f3,0xe6aa4ca7,0x09597ee7,0x8d18b80c,0x25a4cda6,
193279         0x22926730,0x450602b5,0x07387209,0x9af5f650,0x26733a53,0xfeeedb34,
193280         0x86572951,0x0f5ce768,0x8398ae9a,0x872a360b,0x2b30f6c3,0x60347a80,
193281         0x1a162158,0xd2113b23,0xee6c6dec,0x6fd9cf92,0x5cbcf9e6,0x85f0a5a8,
193282         0x2ba3fe84,0xd7a5a6e4,0x51ecd727,0xaafe6720,0xa2081a10,0xe09c6bb2,
193283         0xb973b0b4,0x657acbf0 },
193284       { 0xc274c8d4,0x3130466f,0x30a994d1,0x42765176,0x7079435f,0x217258ca,
193285         0xeb897a06,0x44850406,0x561ee130,0xf38dfeee,0xaa1778bb,0x11f4facf,
193286         0xb9abb9e9,0x765c6617,0xd8f10932,0xb135499b,0xa73b9159,0xc0eb6337,
193287         0x6f7e8b6a,0xf2c1ccf1,0x187def53,0x5b32c03a,0x830b9c62,0x89ad1d49,
193288         0x2f10e538,0x1735eae3,0x9d5f55bc,0xb1cbd9c2,0xe539db0d,0x42428c47,
193289         0xc852b3bb,0x3d2da412 } },
193290     /* 28 */
193291     { { 0x871f2865,0x97702b6e,0x142920d6,0x56cb639f,0x45b58611,0x328522a0,
193292         0xf3b13812,0xf3943ad1,0x712206e8,0xe6c2200a,0xa34d59ea,0xc2890e5a,
193293         0xf6b7f759,0xab52fd40,0x180bf567,0xf522c8de,0xaccee396,0x181e97b2,
193294         0xc4ea5cbb,0xe0375819,0xab51d3ef,0x0d9985e8,0xbcb50fd8,0xe26c96ca,
193295         0x97e1c80d,0xfb9d6b13,0xf796357d,0x582b1814,0x07f4c7fb,0x89a78221,
193296         0xc0357e61,0x02aeef2d },
193297       { 0x2c7ec9be,0x2ba7926f,0x7258b201,0x292f307e,0xc6fa6b4a,0x74e62a10,
193298         0xe2bcc5ab,0x80c08549,0x7bb8c073,0xb4160db8,0x329f194d,0xd5ef0529,
193299         0x6dda4a9c,0x0eb8da14,0x15ea23d1,0x0b5d43d2,0xfc34bfae,0x6cebef02,
193300         0x848757a7,0xacd364d0,0x2d34cca3,0xc1401368,0x1d2d95e2,0x09ca6742,
193301         0x786eaa28,0xc3fd1d6e,0xa2965fec,0x9eb1136d,0xc0779203,0x48871baa,
193302         0x4b15aeb0,0x6b446c01 } },
193303     /* 29 */
193304     { { 0x25e8fe80,0xc819eb2e,0x98238a17,0x2b5f7906,0x81e41849,0xd6f1e996,
193305         0x98ea6d45,0x58ad8ad6,0xbfd02e40,0x5bae5ad4,0xa812416d,0x016dc327,
193306         0xa3347ca1,0x8b31a985,0x82a65391,0x0b4da610,0xb48c35fb,0x1cb91b2d,
193307         0xd2aaf8c4,0x9e96817c,0xcdfdcdc0,0x1a630483,0x12b69254,0x70559361,
193308         0xf8a2a097,0x5fdcd712,0x35cc5281,0x59ab623a,0x932b6095,0x30c8ebe0,
193309         0xb08e052f,0x8613424b },
193310       { 0xb2231d8a,0x28902063,0xd9a61667,0xb0f62329,0x071a9f27,0xaafa0fe7,
193311         0x603f047e,0x6bcd8960,0xfd92a1c3,0x118cca76,0x71d483b6,0x3414e62b,
193312         0xba705262,0xa123ccdd,0xfd9b5c5a,0x1a576437,0x4c8d0fa3,0xa5301bc2,
193313         0x102427cd,0x96f0ad44,0xd3aa6c02,0x0e6fb5e0,0x072a3996,0xcd8c4880,
193314         0x840d3fad,0x4dafca12,0xde91d541,0x29f4ca3d,0x8441734d,0x0037c598,
193315         0x9ccfe57c,0x86333a99 } },
193316     /* 30 */
193317     { { 0xecf53b40,0xd213a751,0x2f78a542,0xcff2c6f2,0xf13ae56d,0x0f59f0e2,
193318         0x0e61748e,0x91f8ccbf,0xd72c4145,0x0aadecb9,0x4c9cdcb7,0x6b2ed852,
193319         0x1eaffc70,0x8e00b72c,0xaa728102,0x89b24285,0xb679cafa,0xaa7ea7e0,
193320         0x4f0a6f6f,0x5d2b8c26,0x0e804397,0x7ed7b173,0xc8573049,0x5a93eb45,
193321         0x0986e93e,0xc92bf5d4,0x6a20c0af,0x526b5a9c,0xb99dc3af,0x0adf47c9,
193322         0xba202cc9,0x12b25fe2 },
193323       { 0x33eea395,0x09b8d78a,0xf633fc5c,0xc7a93618,0x270eceef,0x7e821629,
193324         0xc628ed0c,0x524779b8,0xa1d68939,0x91db5ca1,0x586edc90,0x8626e18e,
193325         0xfeb3f3bf,0xfe023e8b,0x0250171c,0x6279fde1,0x55e172de,0xe52ec7dc,
193326         0xc6d4ca45,0x445e8695,0xbdbc10f1,0x42de3878,0x6fc3835e,0x2b114de8,
193327         0x7e10b652,0x9faba456,0x390e78fe,0x4111d82a,0xaedf0aca,0x576b61c2,
193328         0x74accb74,0x216279a9 } },
193329     /* 31 */
193330     { { 0x4047f747,0xc14cdabf,0xc1315a1e,0x03ca233d,0x40e5d0a7,0x59e7cbd3,
193331         0xbb413869,0x1fd0c4e9,0x0f01fbd8,0x189d08b1,0xa76b823d,0x50449c42,
193332         0x398b00a1,0x81c224a1,0x8e8179e4,0x08084e4f,0x698e41e9,0xfd8af994,
193333         0x5610bf2e,0x1e30e37c,0xa7d2790f,0x4e6a043f,0xb3195388,0x9d96e60c,
193334         0x03799dfd,0xe75f986d,0xf8ff902f,0x3b4a8f11,0x7588416e,0xfa945378,
193335         0x9827535e,0x20683e3f },
193336       { 0xd0378878,0xcb582e26,0xa7945787,0x9e214c23,0x8f6688b3,0x13d000bf,
193337         0x40515270,0x7548d4f5,0x40111f5d,0x7113c15d,0xa8bff902,0x3bf5a526,
193338         0x9b4945cc,0xbda6b010,0xbc2f3a05,0x83dcc74e,0x43efdfa1,0x2aef6284,
193339         0x565c5bf4,0xd2e60ee9,0x592f243a,0x4f0fa10d,0x1bc3bf51,0x6ae58b32,
193340         0x60576a74,0x813b0868,0x4d73081a,0x0bc023f8,0x32dcee59,0x9fd03aa0,
193341         0x27d6c795,0x5e416bf5 } },
193342     /* 32 */
193343     { { 0x026cc23c,0x24313760,0xb5b29058,0xf819aaee,0xc5d2ee17,0xa92272f8,
193344         0xee5cc402,0x8048e7cb,0x77def07d,0xdbc7d6ee,0xf6af821e,0x61d69244,
193345         0x996cbb89,0x5f7966ed,0x96a155a4,0xf81b17ea,0x03f3ed56,0xb2d9ef70,
193346         0xe882a5b2,0x5e6e5906,0xae947180,0x86fa1072,0x658c76f4,0x34d9fc51,
193347         0xcb035aa0,0x9f603dc0,0x75be6481,0xb7b39feb,0xcf04a9ef,0xca87554a,
193348         0x87b4fde3,0x4ff682ec },
193349       { 0xd0a10ad5,0x3125627f,0x968e6f45,0x7fd45c72,0x806a1163,0x2981bd6b,
193350         0xde5033e3,0xb92de1cd,0xbf4f8988,0x3b44b45e,0xdae7e1dc,0xca1b9896,
193351         0x0778d878,0x52166e5a,0xa5116847,0x82d472be,0xf2895445,0xfbdd382a,
193352         0x5d6ec4c9,0x22ed1602,0xb6552b02,0x3614eb1c,0xa1e6210f,0x63c5df73,
193353         0x021a74a7,0xe9160285,0xc65cbd4d,0xa44ca400,0x0f15e299,0x48cb187e,
193354         0x3402507c,0x51eb818e } },
193355     /* 33 */
193356     { { 0xb92100ab,0x1fc1d178,0x9605b839,0xdf2e3d60,0xb71e59d0,0x12a7c255,
193357         0x14fcbe04,0x3f8b6675,0x59fd06af,0x0e8a3935,0x12020d07,0x56326502,
193358         0x528e7be5,0x6696fcd1,0x0c7b7654,0x6588514b,0x5912a5b5,0x0cd80f8c,
193359         0xf324cb7f,0x8bafef04,0xc6da3d75,0x6b53eecf,0x31d1df2f,0xedef48d8,
193360         0x73812b6d,0xf336b965,0xee626031,0xc82eae4a,0xd244f09b,0x300abd32,
193361         0x31d9647f,0x8b0af955 },
193362       { 0x2e603544,0xb770180a,0x221acd9e,0x2b573ac3,0x62407032,0x3a17f665,
193363         0xb89abc3d,0xad3e74ad,0xd793225a,0x8a3d2e3a,0xef02564b,0x457bba04,
193364         0xfc2dd2b5,0x8875652f,0xe67143e8,0xd2905d15,0x02e48d70,0x6d884b42,
193365         0xc7636a57,0x06f99219,0x35e378df,0xa8dc3421,0x10c64a02,0x95c1d73d,
193366         0xcc157a66,0xcd6a4ece,0x8e24a354,0xbadcc1c8,0x9839329d,0x8024f1b2,
193367         0x4da48ad0,0x5363e549 } },
193368     /* 34 */
193369     { { 0xe23fc641,0x1f5523b7,0x86667063,0xfe54e72f,0x8e009d2f,0x294a15f5,
193370         0x8c57f5e1,0xf203997f,0xb16d64dc,0xa229724c,0x4baa2ffb,0x697be4fd,
193371         0x0a6e8ed6,0x3f507e46,0x78508536,0x0afe3a5d,0x95408208,0xeeef6cdd,
193372         0xf2c4237c,0x701fd889,0x5c385253,0x496d883a,0x72a212f1,0xe25c67ed,
193373         0x1ff78fcd,0x4b416783,0xc16f4146,0xe9967004,0xc45b0697,0xfa45c3a1,
193374         0x3fbd30c3,0x63334018 },
193375       { 0xa2fbbbce,0x39c9a0cc,0xaa0cb744,0x876f6e5c,0x3438ece3,0x9ce6010e,
193376         0x13802d82,0x0aad148e,0x9cd45a1b,0x9c3e5c60,0x7bcfc1e0,0x875cb859,
193377         0xd8584dd0,0xb19ff790,0xd81c2a2b,0x2598b81e,0x02be07e3,0x118bdf2f,
193378         0xb9765ce9,0x074fc8ee,0xb24f95ae,0x125e9d88,0x0c98f09d,0x3bb12cdc,
193379         0xa0b74b27,0x4a6aee07,0xc08077ce,0x4723d2f9,0xbea8026f,0x959447d6,
193380         0x16280b73,0x93a7075c } },
193381     /* 35 */
193382     { { 0x715b27f9,0x26bbefe2,0x2a280923,0xa935a5e2,0xfd58a26a,0x5ddf23af,
193383         0x7c138694,0x54c83e16,0x892a2153,0x44799bc9,0x9b8d09f5,0x4e6e4710,
193384         0xd588ea68,0xc63af616,0x883ab1b6,0x5e896706,0x3d209336,0x3c1393a0,
193385         0x92c23dda,0xd02f2921,0xdcf6ea43,0xab70cb7a,0x791559e1,0x12434ea8,
193386         0x6d70ff0b,0x040680db,0x2832ba45,0x1a10fe52,0xe5f0cb8f,0xd69f9c08,
193387         0x44b141fd,0x1a7422ac },
193388       { 0x9f40b675,0xc3a9dd2e,0xfcc71f39,0x2a7c6603,0x1948e342,0x18939a61,
193389         0xed0ab484,0x8f3b6158,0xee31ca6b,0xa3aa7d97,0xf7a8db63,0xbc1e865e,
193390         0x2c7c62e4,0x315f8c09,0x9f5c6d0f,0xa260788f,0x4b6f3ec5,0xb1833129,
193391         0x36b4d849,0x73adbcd6,0xbc699a9b,0x66e14890,0x2a1175e7,0xbf3790d8,
193392         0xfc53ca4f,0x7f43605a,0x87ff6091,0x577f6c47,0x600c82b6,0x827c7552,
193393         0x9d25599c,0x0944d630 } },
193394     /* 36 */
193395     { { 0xe6ab9620,0xcfdeb63e,0x786cd808,0xdff4fa6d,0x456320b3,0x145edd82,
193396         0xc4943915,0x2ae5f862,0xb73b3f87,0x9508e813,0xe52f97a9,0x3bd805f3,
193397         0xc9829b62,0xf71b5c28,0x86e0cefc,0xb394c70e,0x23bdb36e,0x534fb1a9,
193398         0xdbe27e5a,0xd64f5862,0x83ab6169,0xbae23df3,0x27c828cb,0xdd6df1b1,
193399         0x3a307a8a,0x1901899f,0x811ddf66,0x36cc8659,0x79943b77,0xa3cb7774,
193400         0x6fd86576,0x7d89f383 },
193401       { 0xc9f92b2b,0xf8564242,0xc46e32bd,0x700c6a75,0x7f99a5c5,0x93e768b7,
193402         0x03149568,0xb6efe858,0xc2ce6709,0xbbfe8a19,0xee6ec493,0x721a3b1b,
193403         0xc371c28d,0x26eeeea9,0x15177e1d,0xd798115e,0xb068a5a5,0xd7bf3bce,
193404         0x46d2b4b2,0xdf8da220,0x59be9dfc,0x3df0995b,0x77640b79,0xc96897bc,
193405         0x5a2bd3c5,0xce0cf4c2,0x89afe744,0x16f45d6e,0x3a8509bb,0xb53f3acb,
193406         0x63f2a6e6,0x449af81f } },
193407     /* 37 */
193408     { { 0xa16d9377,0xc2fcf132,0x7e1a2f9e,0x9ab377b3,0x86d19ae5,0x72e1a12e,
193409         0xd013bbb1,0xd2b12e66,0xcb5f66ba,0x0972e055,0x399eab50,0xd11de1c0,
193410         0xc65f5ec2,0xc1f314fd,0x8a9ff593,0xfc311841,0xe05246e6,0xdf73c1ec,
193411         0x1625056d,0xc28d1363,0x6fb25e19,0x30a9dbd7,0x845cd2d7,0x049ed244,
193412         0xd36e852d,0xc779b83f,0xf68c8a83,0x85a35fc7,0xc95e8033,0x299bf1e1,
193413         0x20891af5,0x0e8617c3 },
193414       { 0x67c81b5c,0x53720602,0xe737873c,0x2fa89dcd,0xa8144fd0,0x2a7430b0,
193415         0x26208c83,0x3006c5a7,0xd8ea40f5,0x4e066660,0x896413a4,0x9dd025f9,
193416         0x46b9149f,0xbdf380cc,0x0a125cc2,0x80156619,0x52793c37,0x04d6a3b7,
193417         0x6b7a62f2,0xb6001374,0x585d5978,0xa9cfe268,0x8395fe66,0xdcad0cb8,
193418         0x46b261f6,0xbab468fc,0x9d9d9218,0xca0ef5ef,0x5e452402,0xc507d4a8,
193419         0x326cf687,0x6f4404f1 } },
193420     /* 38 */
193421     { { 0x4febd3ff,0xa3e1920b,0xfdfd2bba,0xca6234d8,0xe19a9829,0xb7d1af2a,
193422         0xc6f5bc20,0x23de1610,0xdaa39ca9,0xe204dbf3,0x6d8c70ab,0x2a2de9b8,
193423         0x7c9d370b,0x272e0c37,0xe565510e,0x80914c06,0x57cbb6b0,0xb611e7a8,
193424         0xd8266a6e,0x076fc6ef,0x3095801c,0xdfac34ee,0xb9e24063,0x69ff40a2,
193425         0x787aa5c5,0xa7ba31a9,0x33c70cd2,0x0e4d1fdf,0x6895f074,0x903e3132,
193426         0x7fb671e2,0x905771f8 },
193427       { 0xa4062bee,0x5199ba0d,0x94d7d9f9,0x18e7238c,0x1e0922c0,0xf53f29bc,
193428         0xb12d855f,0xde9b2a81,0x6d68ca29,0x649f3eed,0xc50c097f,0x64adfc34,
193429         0x9db398a0,0x81964ab9,0x7a587224,0x00d59c47,0x74c5903a,0x09fea396,
193430         0x15043dd0,0x6aafd8ee,0x5f1ecc20,0xc5721a6e,0x0db9b7b4,0xb6d6a483,
193431         0x66c8d52a,0x06ffc617,0xacc82a27,0x3de241d6,0x27f2f7a8,0x0605f052,
193432         0x6404decc,0x6a22953b } },
193433     /* 39 */
193434     { { 0x74fce389,0x92452d8f,0x2afa5564,0x059634c0,0xf0ed7825,0x9377ccbb,
193435         0x37718e0d,0x89f4045b,0x9fa69a4d,0x11074e7d,0x7295b0ba,0x5d70bb07,
193436         0xf107ede6,0xb22d54ad,0xa1a29c7b,0x5c39a3d8,0xd795e3ab,0x37236c02,
193437         0x2b589951,0xf7282d00,0x5790bee2,0x5e2265be,0xa8e65ea2,0x91e0ea11,
193438         0x6001cebd,0x0e71a708,0x2c1c5402,0x16900f5a,0x357f6981,0xc3b2d5c0,
193439         0x619e3427,0x528c9ea0 },
193440       { 0x5f26c577,0x1edc86b4,0x9438bd45,0xf8074708,0x792582a7,0x2dfe1013,
193441         0xde1e569f,0xe08eaca0,0x9a55a356,0x5f952efa,0xe4976216,0xa4d80b53,
193442         0xcd5d71f2,0xd2b65855,0x66cea3f0,0x246704bf,0x492323ca,0x193f641f,
193443         0x9adb1325,0xa681855c,0x2d19d652,0x86d522ce,0x5b82ed7b,0x53609f10,
193444         0x8e150d29,0x3b0f0094,0x0b13e891,0x23ad8bfb,0xf794b449,0xcbb1556c,
193445         0x738bcf57,0x200f9093 } },
193446     /* 40 */
193447     { { 0x8388387f,0xf9b22fc5,0x28e883c5,0xcf26f170,0xd1b7973c,0x447cab90,
193448         0xf6ec9171,0x8d5d4ea2,0xc30cdbc0,0x2e16f498,0x48623c2b,0xdc92910c,
193449         0x30dbc545,0xeb1491b0,0x14de21b0,0x631deb2e,0x2fe830f4,0x04a21066,
193450         0x379c1f3f,0xa4c6979c,0xfb06a795,0x8a732b68,0x1619dfa9,0x3a44327a,
193451         0x8dbe2c9b,0x91a307d3,0x03989fea,0x939bc8d2,0x0f4a331f,0x3daabaf2,
193452         0xdd0f55dc,0x5c307e98 },
193453       { 0x35b233da,0xbbc4e0c4,0x22f6f985,0xe3d29085,0xa8b02468,0x99dd2d21,
193454         0xa96916e7,0x978f40e9,0x614bcced,0x0327d86c,0xb290762c,0x95e95502,
193455         0xa879f2ed,0x0ffd2197,0x50e0bd33,0xc4365137,0x0827c4c4,0x26c3148a,
193456         0x3fcfc0b2,0xc79812a8,0x31928589,0xc3d8d17e,0x8830f42d,0x8b572cfe,
193457         0x4b07f83f,0x7cd9ff92,0x0a51148f,0x331ca950,0x4c59f9ac,0xd0c53968,
193458         0xc1434785,0x1df16dfa } },
193459     /* 41 */
193460     { { 0x68bcacc3,0xcc7bb4ac,0x430f58cf,0x06ded34f,0xd461855a,0xc59f9f4f,
193461         0x45c9f0bc,0xf5491994,0x4375c892,0xdc5f7ec6,0x3c85983a,0x1b8708f1,
193462         0x82fcd087,0xb32a5cc4,0x2d6b4c0f,0xefdcdc35,0x8ac6fb2d,0x4bb24f04,
193463         0x33906471,0x5982d4f5,0xb83a3ac4,0x162eb52f,0x2337a223,0x7130df28,
193464         0xcbc3dbd3,0xdce7b802,0x2467ac0e,0x8b395959,0x1b56717e,0x21d3d2e8,
193465         0x46512617,0x729a7f50 },
193466       { 0x8420f90a,0x874ed1aa,0x0fe4c855,0x6368e19e,0xb0be74af,0xb62d4aaa,
193467         0x8ca60ca9,0x76fcc480,0x7645a867,0xf310b5a5,0xddb1b24c,0x131bac9b,
193468         0x2dea5b44,0xef77d71d,0x72fcc64e,0x4706d210,0x673d77f0,0x29b92691,
193469         0xe89e0663,0x22e00bf3,0x74077d40,0x472d0cd3,0x829232e2,0x3e21040d,
193470         0x38dc8533,0x2f916dfb,0x14b8f667,0x48bbb59b,0xd44be19d,0x19de9f4a,
193471         0x232d9d5c,0x7f6d3649 } },
193472     /* 42 */
193473     { { 0x6e794819,0x3bd064de,0xf82ebda1,0x5a6b694e,0xb91e2804,0x1f017fe0,
193474         0x07a43cd2,0x190d31f3,0x630433e9,0x6c26f226,0x0abfdcb4,0xba488aa7,
193475         0xa46411c0,0x418d9085,0xbffb5880,0x1b934fe6,0xe200f849,0x75d1e237,
193476         0xa55413db,0xdf04d63f,0xe23b3f77,0xe216ed75,0x0f91bd30,0xa05866cb,
193477         0x7729c509,0x84c395d9,0x452ab2d7,0xec97e188,0x0093d686,0x8cb7c1f9,
193478         0x628f086c,0x2d032395 },
193479       { 0x4a44b4c5,0xa81c9407,0xcc702c98,0xb9846879,0xceb0dc97,0xcb502287,
193480         0x6e3aa321,0x30301126,0xe4c256c2,0xc0ac8763,0xe55b4845,0x65034d20,
193481         0xf240f35b,0xaa96a040,0x7cf7eedc,0x046d26d3,0x3b810656,0x62a5a8e1,
193482         0x83d70c2b,0x86044b97,0x59e4da8f,0x2fbaff88,0x5457f5d1,0x929d901a,
193483         0xb531b757,0xd29e1eb2,0x9e4e9739,0x214dabdc,0x4eaa9bd9,0x5bd724fc,
193484         0x1ef9bb9b,0x734c12b3 } },
193485     /* 43 */
193486     { { 0x92f9b086,0x98fe3c2e,0xb3fd4544,0x4641b93e,0x5c02c65c,0x47ce208b,
193487         0xc4f03242,0x8a52dca1,0x679d29f6,0xb5ec17d9,0x9406f5f4,0x11d2fed0,
193488         0x0d9ba811,0x260f63dc,0x15472a3f,0xde2b056f,0x007290e6,0x1b170d9f,
193489         0xb6b5c8f9,0xa2e23e8d,0xcf34c3ee,0x345a2839,0x1b973ee2,0x9bdc5461,
193490         0xbb24d1c5,0x65bda6c2,0x3c6141a1,0x97d52ba3,0x9d2eb201,0x47bb1612,
193491         0x21fbe49f,0x7c558a87 },
193492       { 0x3f350fec,0xb9485a52,0x6a38d4c0,0x016678c5,0x0d5aa64d,0x8ef346a2,
193493         0xd96da2e4,0xb85daa02,0x4f647b3c,0x845ec4ea,0x0d5e946c,0xc0d1a6ca,
193494         0x4fa9f4ab,0x41d8d1c1,0x9c8b1303,0x43972cc5,0x434ffbfb,0x67e1f48d,
193495         0x819d2318,0x350ce93a,0x6ddef23f,0x49f53090,0x200cf12c,0x3c2e6cf9,
193496         0x640432fc,0x42691cc1,0x72496b52,0xbfff74b4,0x020a97be,0x44527c9f,
193497         0x7b3c4348,0x34cd7dca } },
193498     /* 44 */
193499     { { 0x59e7fe87,0xf031761a,0x0047cd72,0xb1eae31a,0xfae30f62,0x27902e68,
193500         0xb71db143,0xa666f48d,0x0e0038f4,0x75ee6678,0x02bdd76d,0x3b45ac67,
193501         0xa0d6cd5c,0x0d2fb828,0x9d8c5b11,0x27ce7f1d,0x120b5e96,0x141fe0e4,
193502         0xb9267c37,0x95a1b984,0xd60312cd,0x5206e589,0xda549356,0x1867342e,
193503         0x070c74ac,0x374520b9,0x9557b0b3,0x2703cbb5,0xa6ed8c14,0xf621f59c,
193504         0xabf7b887,0x7ceb1cc2 },
193505       { 0xdb7fd65b,0x0647a5bb,0x36c9457c,0xd8d45cc0,0x9e12718a,0xc6da99db,
193506         0xe93a7fb1,0xed1dbbf4,0xbd1566a1,0x4512c95c,0xdbc0c919,0x4861ba00,
193507         0x9e7f5269,0x3c6cc298,0x0941aaae,0x67196150,0xc8c538e3,0xbfcf5d0f,
193508         0xa25a551f,0xad6e9929,0x17ca0f26,0x90710985,0xfa89ef7e,0x743b78ea,
193509         0x71ab4549,0x39d5ea31,0xe6d1c36d,0x7442f3f3,0x059d568d,0x25a683e0,
193510         0x227ced5c,0x1f629a99 } },
193511     /* 45 */
193512     { { 0xe45a1c3e,0x8925ddac,0x41f7545f,0x72d29365,0x37e7f828,0x45622fcb,
193513         0x3e4c79d2,0x88234513,0x9c2645d6,0x5dffaf84,0x994802b9,0x3078f4dd,
193514         0x9d339fa0,0x566927f0,0x9fd91dcc,0x9a500a1e,0x0ab0abd7,0xce008180,
193515         0x8194e5df,0xd97135a3,0x98adf088,0x9e876307,0x9a45a2a7,0x3baf01b8,
193516         0x788b4399,0x6fed6154,0xe77a997d,0x980e5722,0x2a378eed,0xaac90ffa,
193517         0x8bd805a2,0x4a75fda2 },
193518       { 0x55e74cbc,0xd09a8fbb,0xfab18f25,0x737738ce,0x9764ec3a,0x0fc23ad6,
193519         0xe7e0ad31,0xc5a7d35b,0xe481cc9b,0xe75e068e,0x3d4aec34,0xf0c2ea99,
193520         0x0d4a63c4,0xf1324fe8,0x99b0592c,0x5dbb7c16,0xa7e0f46b,0x442d674d,
193521         0xa300faea,0x5a5d66c7,0x3333ac83,0xe83dc821,0x8c408496,0x70ef812e,
193522         0x99ef5fc1,0x96e1dcb6,0x1734e862,0x6e2b771b,0x583507d8,0x04629cdc,
193523         0x23d8179a,0x5819f9ae } },
193524     /* 46 */
193525     { { 0x6aa78811,0xd9969121,0x2103e7c3,0xf64ee8f4,0x22b9e698,0xddf01070,
193526         0x4f582cde,0xe6001f9e,0x2ecfac1a,0x24a608af,0x06393009,0x6ef4c784,
193527         0xebf72911,0x5262eae6,0x8c4ee5a0,0xddbd0af5,0xecd87bc7,0x875aff90,
193528         0x6f24f114,0x2fddb34c,0xe865f172,0x48104281,0x886c1b9a,0x95692426,
193529         0x9ef4231f,0x6f5f3208,0xd0a7e82e,0xaf587acf,0x9ac395c8,0xd6571917,
193530         0x1364a750,0x7459603c },
193531       { 0xf41ae519,0x1c2475bf,0x4af8f251,0x34401fb1,0xaefb2c3d,0x70ddfcd2,
193532         0x51cdaf08,0x9b2d385b,0x8208bb19,0x8531c256,0x4c33f3f6,0x16c89df6,
193533         0x24571769,0xc23cfa99,0x86d010ba,0x2339b51e,0x22638313,0x08db0e8d,
193534         0x00fedeb7,0xf769e179,0xa3687ef1,0x3fd96dcb,0x91476475,0xcd046b23,
193535         0x0c45c8dd,0xf3ff2064,0xb8343d78,0xefd167bd,0x4b77ee90,0x493ccb6d,
193536         0xb3cf7b45,0x33025513 } },
193537     /* 47 */
193538     { { 0x35eaaca1,0x36f00469,0x89119102,0x0c384b75,0xe6d2954c,0xcb375665,
193539         0xb1e9d6d7,0xcb9199b9,0xc29c2757,0x75852349,0xb8e738d0,0x89cbd1ba,
193540         0x5923a427,0x9b8dbe90,0x18fe1889,0xa237793e,0xa742e083,0xa4271757,
193541         0x4eebd613,0x8c4979d2,0xd4f2cf77,0x40325054,0x958705de,0xa3b8a091,
193542         0x33d999ba,0x1b191bd9,0x3b0fee1e,0xbafefba4,0x3facdf14,0xb3bad184,
193543         0x4387561c,0x9328adb0 },
193544       { 0xf906b872,0xabe84e80,0x78262665,0x705523a0,0x3398ccf7,0xd89c6a7e,
193545         0xf55b5323,0x2fab551d,0x0554dea8,0xa0578eca,0x375589cd,0xef26523d,
193546         0x864ad750,0xd8fd6242,0x178fe1fe,0x93f27fc5,0x9df87422,0x7b3e6f30,
193547         0x3750d054,0x2862e49e,0x5dc038a1,0x7d90c6b2,0x84db682b,0xc1a1ae22,
193548         0x9881930a,0x47f3dab7,0xbaf3e0a4,0x30e6bd52,0xf62d25c5,0x0680025b,
193549         0xadd0d5e7,0x0aa1f3cf } },
193550     /* 48 */
193551     { { 0x22a10453,0xa9822190,0x2a03a10b,0xdd1eb91c,0x96646f3b,0xafbb5d95,
193552         0xf38b6fc6,0xa58de344,0xb8cfca1d,0xce47c3e5,0x0f70da04,0xfcd8e16d,
193553         0xda262ed6,0xac44349b,0xc56e2f8e,0x9320d87b,0x19138e58,0x9ce3ea08,
193554         0xa2b236c0,0xa5862dff,0x8e7efb0d,0x6b0f9a5c,0x16ac78eb,0x4b53432b,
193555         0x709b51af,0x6ff43105,0x8f519628,0x08e236f8,0xeed403ad,0x1f93f176,
193556         0x9636545e,0x559337e0 },
193557       { 0xd8fd807a,0x30ddf738,0xab131222,0xf4e0ec9d,0x625afbc3,0x14a2f4db,
193558         0x9f12f895,0xd5b70604,0xac3044fd,0xb46f3c23,0xf540148f,0x1b232d1f,
193559         0x39b4e554,0x61b458f5,0x0dd70b75,0xf694b24a,0x289581d9,0x0fc64299,
193560         0xee5fe22d,0xc05d49be,0x6a18bf63,0x7af3447f,0x7f1929d6,0xe96a1dc2,
193561         0xc1551e8c,0x6afe6028,0x2b5d4fa2,0x27dacaf3,0x545c2cb4,0x4a1631bc,
193562         0xb0c914d3,0x930070f9 } },
193563     /* 49 */
193564     { { 0x69a9bc05,0xd2f32c5e,0x589c4b73,0x0a5c19c6,0x94665f9c,0x095c9e5e,
193565         0xbcfb4c39,0x8ab0f293,0x1ddb7c31,0xb9070877,0x66b38048,0x894e9658,
193566         0x606bd9bd,0xf19a90cf,0xb6fd2d69,0xcc1d58df,0x461d8a69,0x886dcc4e,
193567         0xf9ce4831,0xc455c277,0x765f8a82,0x749a5996,0xc3badc8d,0x2ffc668c,
193568         0x9112cdab,0x38018396,0xb243c7cb,0xa98795c3,0x010a2224,0x8775f310,
193569         0x587b5e14,0x043a2141 },
193570       { 0x3a873752,0x7bbe9dbc,0x2f442fee,0xee1493f4,0xc18c2181,0x981ca2c8,
193571         0xe29769e7,0x00ce3090,0xde768c5f,0xb4626ac8,0x34d7677e,0x33e9ce46,
193572         0xe0fa94e6,0xf89c2cad,0x41f5b5bf,0x04f5cc11,0x2228c12c,0x2565f736,
193573         0x0c05cce5,0xf1bf706a,0xbe487c4f,0x5d07ffff,0xa499f1a4,0x3ec43c09,
193574         0x98d94800,0x4f4e79bb,0x073f12f8,0x8a335a16,0x0f970d6d,0x4bb5eaf7,
193575         0xf24d0ae8,0x18d0747b } },
193576     /* 50 */
193577     { { 0x84601faf,0x58d3c77c,0xaf1c1f72,0xc9465be2,0xd116d806,0xff626798,
193578         0xd5b0d93c,0x3996c0c6,0x5ec6723a,0x2fa1ad75,0x03ba5349,0x966a8144,
193579         0x2ac34d8a,0xdc4c9422,0xed675865,0xddf471de,0x953d528f,0xd8aca597,
193580         0x24ebf67d,0xb2e463b5,0x7e25b4d3,0x25824871,0x43159daa,0x23c5adba,
193581         0x83357540,0x5458f9c6,0xf938b1a6,0xcf685da7,0xcefed231,0x981a4fda,
193582         0x08bb5e59,0x711093ed },
193583       { 0x401f161a,0x12aa3fc6,0x974c5e87,0xf7358560,0x17b5df82,0x4aa252fb,
193584         0xa48e6299,0xb0b82b07,0x29dd847d,0x00234157,0x4529c5a6,0xf1e54d00,
193585         0x6d98f538,0xcc1c539e,0x28d3abcb,0x36162b53,0x2a84f0cd,0x75a37938,
193586         0x4dee7484,0xf717a81b,0x4c23bf1b,0x16cf35fb,0x787e8b3e,0x7fd1c29f,
193587         0x59b79ab0,0xb7da7e68,0x85f6c60b,0x072100a0,0xe7ed48b5,0x31840159,
193588         0x4d9c97d4,0x17898bda } },
193589     /* 51 */
193590     { { 0xae1b8cf8,0xcd8483d8,0xe9a28856,0x323d4b42,0x204a4bc2,0x7633584f,
193591         0xca7a69fa,0x4e0b2228,0xf757bab2,0x8afbda8b,0x6cc5f9ca,0x85b24088,
193592         0xd41a95c3,0x47fb4813,0xc2aabe6b,0x3f1bc53c,0x1ad1599d,0xf22cda3f,
193593         0xc31ea9b1,0x1b2ec081,0x01614ac1,0x048f304b,0xc6afa7ab,0xce31cee9,
193594         0x4140dc3d,0x55af7633,0xdce8abba,0x84b7ab37,0xc7cf3efe,0x50de7648,
193595         0x15356ab2,0x73a88dcf },
193596       { 0x06e83b39,0x3f868288,0x9f44037d,0x477a4413,0x17dbc841,0xf9058b0f,
193597         0x54d17549,0x2db64f4f,0xf2307ffe,0xa23cea6a,0x4f126261,0x393efd55,
193598         0x10f37f26,0x2f4e658a,0xf4ee1e35,0xa4437ce3,0xa93cde8b,0x64ef42a7,
193599         0x939aa901,0x1debc9f4,0x3d7b5cd4,0x44223d6a,0xf88a3acc,0x789a6a11,
193600         0x2c608a2d,0x56fb9df8,0xbbf56c06,0xe79db8e3,0x668fa300,0x73c56af2,
193601         0xae396a1e,0x52f32b17 } },
193602     /* 52 */
193603     { { 0xe714f71a,0x56f524c1,0x9add8519,0xc1be1262,0x65cadbe3,0xad9189d8,
193604         0x5a0fb649,0xd88bf5c8,0x21d192d9,0x9efa6a92,0x6f724b6f,0xe3fe8389,
193605         0xb250119c,0xec3fae24,0x2ae0d3c0,0x4b6af9f6,0xd619624d,0x8fceba0b,
193606         0x2fdb6e3a,0x7dc3092b,0x3263cd29,0xc91da376,0xf95c43bd,0x30c0761e,
193607         0xcdeb44d9,0x89136400,0x43c0d31d,0xfd7dce84,0x9871899f,0x78fec3b1,
193608         0xefdf58c1,0x79e14d28 },
193609       { 0x9bb40c55,0xe3822235,0x0ed07a42,0x0a27202d,0x4838c1f4,0x48e6c1a9,
193610         0xd864a78e,0x2b5f24a7,0x0c6c55c9,0x7e7f140a,0xce12d508,0xe62c104a,
193611         0xc11b1e10,0x9b0a1a7e,0xafbb3dd5,0xfd8a275f,0x9a3b6b30,0xdff354fe,
193612         0x46602a01,0x5a105d9e,0x93bb65f7,0x3d371b4d,0x0f82fdeb,0xda5cbf0b,
193613         0xde468545,0x4601229b,0xc73d517e,0x505e10b9,0x672ff492,0x77cfa541,
193614         0x99566ce2,0x0d8ec28a } },
193615     /* 53 */
193616     { { 0xcbeee995,0x014cf73e,0xd491e80c,0xb2eb88bc,0xd9aba5d4,0x615a6cad,
193617         0x9304c84d,0x2f7d4633,0x8ab03c9a,0xba0501d2,0x91babb94,0xc8f723de,
193618         0x50405772,0xc885f977,0xc7fcb094,0xb5e1d2b3,0xdf96c71a,0x61ee7995,
193619         0x3464499e,0xb8c8daab,0x5f607932,0xdb425ddd,0xb1243587,0x70251ca1,
193620         0x9fc74340,0x26d7d3be,0xc902ac89,0x8c179310,0x4559a74f,0x72522c15,
193621         0xc3734afc,0x86001e27 },
193622       { 0xe7693947,0x13b00ba5,0x012c062b,0x6478641e,0xe85490a8,0xe1a438e0,
193623         0xd9574d5e,0x5173dbbf,0x9bd3ba61,0x9532eb8c,0x5f3ea075,0x1f41bcb8,
193624         0x8cbb92b9,0xac1cc247,0x1ef901b4,0x0f34648e,0xd2b3b2ee,0xdd929d1e,
193625         0xc3d75bfc,0x470f1eab,0x139cf4d2,0x5cdbc6f7,0xf0424953,0xcd86454d,
193626         0x47fcb383,0x1e079812,0x17df930c,0xb9f209b4,0x114ebc00,0x4225fc31,
193627         0x347946c1,0x020591cb } },
193628     /* 54 */
193629     { { 0x275e0af4,0xe3003721,0xe78a4a4b,0x721141ef,0xd1757485,0x666cfcf6,
193630         0x168e659e,0x5fa1d737,0x0e2842ee,0x263e3e54,0x948bd5f6,0xadecc3d4,
193631         0x246b104a,0x019de03d,0xf343d818,0xf8a9e903,0x5b0c0d31,0xcb57ba4a,
193632         0x51e2765f,0x8246c506,0x6519bf67,0x80c5751f,0xf2119a01,0x5f05c200,
193633         0x7821d4f4,0x7e6487b8,0x261c3a06,0x262f94aa,0x72146052,0x56cfe489,
193634         0xa1df05ef,0x5119985f },
193635       { 0xb18586c0,0x5819497d,0xc6eeaa62,0x004415d6,0x97cda28b,0x7c6a46b6,
193636         0x7c194594,0x9a149b28,0x4ed3a506,0xb56369fa,0x43c94cb4,0x7092aa66,
193637         0xa9e9eee2,0x55bce73a,0x77893509,0x34bb2870,0x06eb5326,0x8af95fb0,
193638         0x9638f485,0x87cd0323,0x5ba75bf8,0x29376268,0x9d42d581,0xf32d6f3d,
193639         0x65c6d64d,0xa4cad574,0xb2cded41,0x985f50fb,0x9006a067,0xcf34ce0e,
193640         0x58a57f9a,0x59eaf265 } },
193641     /* 55 */
193642     { { 0x6ec3876f,0x7b407efb,0xf0f48648,0x780c6123,0xbf893039,0x2abb56ff,
193643         0x45a91ab0,0x9592eaa0,0x78811b82,0xce5b84d7,0x1f9f3fc9,0x86a71a34,
193644         0xf0e7e13b,0xc17fdd86,0x655a0880,0x88ed8297,0x81d5e666,0x75d6dc74,
193645         0x1d171797,0xeffc9df6,0xe3f79e1f,0x36ad4c8d,0x2046192e,0xdb15317d,
193646         0x274fda62,0x78c9fa7a,0x82dd9914,0x04ec924f,0x3a64971c,0x059d1e38,
193647         0x2620bbfb,0x3b4450ea },
193648       { 0xc776dcdb,0x3db7a955,0x81c8ba47,0x35c4a57c,0x505760fb,0xae285003,
193649         0xb3aec353,0xe3e80691,0x47117be5,0x380335be,0x056ccf61,0xe1c47e3a,
193650         0x33977916,0x253cfdeb,0xf5cb7ee1,0x3decdfba,0x7cf4b704,0xf3c9794f,
193651         0x9ff81462,0x2401680c,0xbe3daa9f,0x4e440e11,0x69f91d8a,0xc5d04377,
193652         0xcb5e9c5d,0x4106c7a8,0x33b7d24d,0x191909a1,0x3764b4a2,0xe893c838,
193653         0xc429b614,0x4a7fe30c } },
193654     /* 56 */
193655     { { 0x2455c7c5,0xe78f3a70,0x70157754,0x5b7636e8,0x7623262c,0xf32c4524,
193656         0x1bc780c7,0x2c98b11e,0x915ed877,0xd48eaeac,0x199265f4,0xbb04d3c0,
193657         0xcfa5200f,0x6b52b19b,0x93ea3fe8,0xc46a0981,0xba758059,0xd82c733d,
193658         0x1896aacc,0xd324bbd6,0xce8ecd51,0xac09a2fc,0x02fc44b3,0x529918fd,
193659         0xaaa1784b,0xf0c45e4a,0xfe22085c,0x35626340,0xc50c7d61,0x53cbb676,
193660         0x65126b23,0x83fa1ea3 },
193661       { 0x10ccc646,0x60ac86da,0x7b0451e9,0x2ce0637f,0x8a088610,0xbbbcf630,
193662         0x20349982,0x23c19019,0xfc0bcda0,0x707fc39c,0x1bd4fd7d,0x7f4d1f15,
193663         0x44713bbb,0xd6a64e74,0xc5ac9e60,0x57bdc676,0x37b61169,0x456c5303,
193664         0xdcf40a1d,0xd3451396,0x4997d2c7,0xf3edec25,0xc2c4a739,0x534ae9a4,
193665         0x6a6ad2e2,0x1401397e,0x23e95f81,0x20769d4d,0xde98fabf,0xcee007c6,
193666         0x931c51e0,0x61409779 } },
193667     /* 57 */
193668     { { 0x15156623,0x3ddb32db,0xab7a67c2,0x68137fbc,0x6f19e3c2,0x26011f50,
193669         0x89924c61,0x34218b02,0xc6804c1c,0x492a0b0f,0xafaae6a7,0xd65be706,
193670         0x0d01be61,0x3b13d23e,0xf87f4c69,0x44545b47,0x04dc1aa3,0xd42236e2,
193671         0x3c5161ec,0x6135261d,0xbd88bc07,0x1eb46a63,0x1599d720,0x78c6d836,
193672         0x69baf0f3,0xf6955fe1,0x17072820,0x467eebd6,0x3e3a340a,0x2f1b8a2a,
193673         0x2d0b5f88,0x636dac76 },
193674       { 0xb4c80af3,0x94280db9,0x4e3892ab,0x9a189cd1,0xd1477ddc,0x26e702e0,
193675         0x68f9f14f,0xe91aee38,0x80baa0b2,0x2864f63a,0x8b714a29,0xacd81f73,
193676         0xc5fe7cb6,0x30e1b870,0xb10837fd,0x883ea1c3,0x6b20489f,0x2da27953,
193677         0x58a2da5f,0x3aeb2a68,0x03a8fa14,0xe2330bf2,0xdc70b1c4,0xb5c488b5,
193678         0x299678f4,0x0a78c4d9,0x25df675c,0x233bd098,0x7b67d368,0x37b5c076,
193679         0x4d0bef3f,0x2f6dbdfe } },
193680     /* 58 */
193681     { { 0x2e4da7c7,0x2f8472fd,0xae677932,0x708cfc91,0x3dc268e2,0x364af08a,
193682         0x799a2424,0x0f10dfe0,0x71d58bff,0xef912d58,0x988962e6,0x6bf35dfc,
193683         0x5f47ea0a,0x28b96fa9,0xaad308c1,0x734a79ea,0x9f437bba,0x95730337,
193684         0x6cf54f75,0x002cbd8e,0xe7632eec,0x47606dcf,0x53193104,0x404b5ecb,
193685         0x0acf729d,0x0ae0897c,0x3bddf1de,0x89628b86,0xf87d7448,0xeced154e,
193686         0x458d5d4e,0x5cb6e197 },
193687       { 0x008c75ed,0x98cef197,0xf6eeaaf8,0x7cf49d3e,0x1875e96d,0x1d6f9e02,
193688         0xdd9b0d8a,0xfcec2cfe,0xb9576daa,0x38a61cfe,0x36a7dbb8,0x10003f39,
193689         0x23b814f4,0xb37c3868,0xb80e3153,0x9fb66dcb,0x059847a8,0x9e7e2eba,
193690         0x35a72770,0xa4ec63fd,0xfc9e0ed0,0x311f3d91,0xd515baa4,0x3c1dc094,
193691         0xa08cd4e3,0x75a06ebc,0x2ed5eeaa,0xab617238,0xe1f52c1f,0x2e82bbb0,
193692         0x5175d6e5,0x2149d630 } },
193693     /* 59 */
193694     { { 0x5f9311f6,0xee1a8e6f,0xbabc1f85,0xc97e3c9f,0xb494209a,0x4fa7c52e,
193695         0x19774fe1,0x04c2f51c,0x8555844f,0x5cefd122,0xb5873ab3,0xb53862a3,
193696         0xcbed19fc,0x768efdd6,0xee58469a,0xcdc12479,0x3d80c09c,0x11237e31,
193697         0xc044c28c,0xdd74a290,0xbd47e287,0x9ee6517a,0xad0ffeef,0xc2421228,
193698         0x818d281f,0x4273088f,0x43ec0de1,0xebc744bc,0xb415bd73,0x5b26eccf,
193699         0xcb07c26c,0x14e2f350 },
193700       { 0x4216946b,0x548d2a10,0x7a4bd92d,0x6e801f07,0x43695160,0x5996d0a3,
193701         0x63a197c9,0x0f1b5c2f,0x061f77c9,0x79da3c4f,0x93ff7b22,0x1c1cd634,
193702         0xa234123f,0x5e61b650,0xf284033c,0x826b34c5,0xc2f34214,0x718b90e8,
193703         0xae806ec5,0xa5f35620,0xe324a9b4,0xa2fae345,0x8b53cb51,0x8c0bb95e,
193704         0xf9965778,0xc94f6ac2,0x6b9def32,0x07ec607d,0xd0ed8f27,0x63bf1dba,
193705         0xdcb61e4f,0x58537e02 } },
193706     /* 60 */
193707     { { 0x64f80ba2,0x1f64b064,0x0559a45b,0xe8e055e7,0xf1f4b634,0xc3262b34,
193708         0xde8c8482,0xef4f7d5f,0xc30c780a,0x9d55dea0,0xcfa1e693,0x1740afb9,
193709         0x7460c34b,0x2cfe6a66,0x1187c1ee,0xf6695941,0x5f974d94,0x1382f277,
193710         0x004549eb,0x1ca0ace4,0xbabded02,0xf8244b3f,0x4e3653ea,0xc36f4d06,
193711         0xc55c5f83,0xeab9f0dc,0xacebce90,0xd93b9cef,0x19061425,0x16658e72,
193712         0x82d7970d,0x4857835f },
193713       { 0xd2576210,0xdcd525bc,0xd51b5443,0x9f378aa7,0x1bd83994,0xfe97bf17,
193714         0xf38ac621,0x930d0f63,0x818408cc,0xaf8f2c17,0x260f53f6,0x2692c87e,
193715         0xdb0a75e4,0x0ee45407,0xffdb1b37,0x0ec47ae5,0x7aa6a44b,0x769129dc,
193716         0x2e40b75d,0xb6f932b2,0x95ef3b77,0xe06764d0,0x68bc63e8,0x28fd47f5,
193717         0x9c0014c0,0xd1810494,0xd7995d8e,0x90e2d3fd,0x6c2a85af,0xeb39a05d,
193718         0xa21f3128,0x6c0277bd } },
193719     /* 61 */
193720     { { 0xb509e7ef,0xe41b7086,0x3d7f9f91,0x8842ec7b,0x5526b88b,0xcd285f94,
193721         0x051dd0ab,0x6e44e064,0x774f1ceb,0x90198c10,0x123e661b,0x6ecabe98,
193722         0x32f647d9,0x44811136,0x26c52aee,0x1dd82b45,0x939dc9d5,0xd650907f,
193723         0xfcd455bf,0xbd5eeef2,0x8d2e5d7c,0x7815a4dd,0x88bc9f2a,0x5ad4ec92,
193724         0x57a3b322,0xc6f10d0b,0x20b9cbdb,0xe8d0c1e7,0x9b774ee8,0x5a0b071a,
193725         0xf22fcf8f,0x3067bc9a },
193726       { 0xb7ca9326,0xe0e589f2,0xb1224f63,0x17a106fd,0x747a57bd,0xb2354521,
193727         0x62b0882e,0x2614982d,0x4391ffcf,0x7f3af544,0xa84e440d,0x1aaa337b,
193728         0x941bb071,0x28ea37b0,0x2e4a7f54,0xa957dcb4,0x1a6ad5fb,0xe7ab662c,
193729         0xf7c36a20,0xd135e381,0x9baa0b6b,0x42e7980c,0x94e4671f,0x4237030c,
193730         0x8b0922e3,0x24cc63ff,0x445a589f,0xd10d5279,0xa870ff6c,0xbb99d316,
193731         0xa996c195,0x390c83ca } },
193732     /* 62 */
193733     { { 0xffc4a73f,0x50d3fa82,0x3bd53303,0x2665d635,0x264bb77d,0x80a06f8a,
193734         0x22d73d84,0x81c04a6e,0x0323b8aa,0x2409cff5,0x8c4c4d5a,0x31dce217,
193735         0x0c0f9c19,0x374aa80e,0x00186bb8,0x0b25a387,0xaaf1487f,0xd0b77a10,
193736         0xab498de1,0x15f39ad5,0x1aa0c116,0x92e32da6,0x96e25ce8,0x228e3dbd,
193737         0x5e8646d1,0xb57c88dc,0x267b1c68,0x672b1164,0x600bdec5,0x5d0d807f,
193738         0x223e573a,0x3ea4007d },
193739       { 0xa595d0a3,0xd76debd0,0xaff0b3b4,0xa6bd76cb,0x9b1bdb97,0xbf2c154f,
193740         0x4c714c71,0x62b19ab4,0x221af663,0xc9bf33b9,0x8c941ef6,0x23d87c49,
193741         0xd79f0f6d,0x255804c3,0x2a7acbc1,0x6f1a1005,0x550528af,0x5dab79d9,
193742         0xc8d16213,0xfd77a6f0,0xde5e1029,0x40508b6d,0xf95da12b,0xd95ac0f2,
193743         0x758a8ba1,0x8860af71,0x7160c8fb,0x0b194c83,0xce004d34,0xa40e6c80,
193744         0x6b14aaa0,0x09f82a17 } },
193745     /* 63 */
193746     { { 0xc21366dc,0x60abe588,0xaf75daf9,0x729c0a4f,0xacb93ed4,0x70501fd9,
193747         0x87a16d70,0xb97e744e,0x98e7361b,0xa42e0a7a,0x28b54cf3,0x1acdaff2,
193748         0xb7bd9078,0xf087ccbb,0x663250e7,0xda6f3983,0xbaf07c09,0x66d693ee,
193749         0x8cbaf157,0x79baf4c3,0xdfca99d0,0x5a984e07,0xf26d8dab,0xab4d3247,
193750         0x7eba36f9,0x4d0be701,0x0e8dd216,0x37bb9e65,0x531c4f03,0x72aa4e24,
193751         0xb753d85a,0x77d1e984 },
193752       { 0xd8e62367,0xd9373239,0xb9820cf1,0x3361848b,0x5a9c97c4,0x00c7e344,
193753         0x14f960fc,0x9a0ec9ae,0x740474b5,0xcf41f0cf,0xece065d5,0xa5eede8f,
193754         0x9e808610,0xb1de5a4e,0xae0cf75d,0x17c44ae4,0x6b148d0b,0x2fa56323,
193755         0xd29ff2dc,0x64fa740f,0x88cb212e,0xc605eb8a,0x6a863016,0xf2c771ad,
193756         0x607b4c17,0x6d6112e7,0x40d49785,0xfe90ec07,0xe256e0e5,0x599be18b,
193757         0xca54adb0,0x4e6eabec } },
193758     /* 64 */
193759     { { 0xfb99cfe6,0x950323d3,0xc9334178,0x7b09bc26,0x7cbdfb6f,0x64111e41,
193760         0x89a75760,0x91141744,0x10919cb0,0x4c633df9,0x396bfd2f,0x715fc7c7,
193761         0x8cab62db,0x8ca19512,0x4db81aac,0x30672473,0xb4c4c54a,0xe67a246b,
193762         0xbf229646,0xd77ea0fa,0xfa5b5d70,0x5bed15f1,0xc2f192f3,0xa5686da5,
193763         0x7f6690ad,0xdecac72a,0xcaa50b7d,0x0c4af2a2,0x6049ad2f,0xf44631c1,
193764         0x04ecf056,0x325d2796 },
193765       { 0x4848c144,0xee11fb55,0xb6a7af32,0x4e062925,0x369e0f9a,0x125b68e1,
193766         0xca53b21e,0xad9bdae6,0x2e98ea1b,0xf50d605c,0x9f2fa395,0xbdb9e153,
193767         0xe91532f5,0x4570e32d,0x46a250d7,0x810698ae,0xad9d9145,0x7fd9546c,
193768         0x11e97a5e,0xabf67721,0x249f82e9,0xca29f7d5,0x9851df63,0xa9c539a9,
193769         0x71d0e3e5,0xfd84d54b,0x041d2b56,0xd1e0459c,0xfd80096a,0xceb3eb6e,
193770         0xe32a79d3,0x19d48546 } },
193771     /* 65 */
193772     { { 0xb540f5e5,0xfe19ee8f,0x04e68d17,0x86d2a52f,0xadbdc871,0xd2320db0,
193773         0xd03a7fc8,0xa83ad5a8,0x08bcb916,0x54bf83c7,0x2e51e840,0x092133ea,
193774         0xcb52dddf,0xbce38424,0x31063583,0xd5c7be40,0x458e3176,0xc1ebb9df,
193775         0xbc4dabbf,0xafb19639,0xc05725a8,0x36350fe4,0x84e1cd24,0xac4a0634,
193776         0xc145b8de,0xadf73154,0xb3483237,0x0aa6dd9e,0xcbff2720,0xa3345c3d,
193777         0xb4e453b0,0x1b3ace6c },
193778       { 0x90a8bdc5,0x0343e5e9,0x6306a089,0xa203bf9d,0x8e48520e,0x98489a35,
193779         0xde7d1d06,0xbd17debe,0x5f795d3f,0x8fafa6d7,0x387b0a3f,0xa4ceb630,
193780         0xffddeafa,0xe0166b32,0x7e764e02,0xa2fe2054,0xe871f304,0x55ab9824,
193781         0x952ec45e,0xa2bd36bb,0xa90d20ca,0x7b4c1484,0x75bcfb53,0x5319f387,
193782         0x6982c4e5,0x34238a4a,0xa102921d,0xa2bb61c7,0xdb3ab17e,0x1e061b64,
193783         0x192f0a14,0x538ec33e } },
193784     /* 66 */
193785     { { 0xa19b56cf,0x193496fe,0x7bb99acd,0x663d77f4,0x57d0a881,0x8f04afa8,
193786         0x082835fd,0xcced3da2,0x5d82cec7,0x7e21faed,0xf8009c85,0x6e175b99,
193787         0x2d05a307,0xd9c6e31b,0x81487d82,0x96948d4a,0xd46f6655,0x86ebd3f2,
193788         0x773ccc49,0x86851aa8,0x8b1640a6,0x3e220f22,0x41a20b75,0x9f06e3a8,
193789         0x90ac0a6f,0x2cfffe5e,0x8ebeb3fb,0xf5a9b1da,0x6e08e2c9,0x2587d997,
193790         0x03e9f401,0x6fd60298 },
193791       { 0x8eb7516a,0x54709f8d,0xbdc598ab,0x83058a74,0x87e801ce,0xd234dd98,
193792         0xd17b8a96,0xfd0f9d90,0x6e90f6ab,0xaa1e549f,0x5a7ed55b,0x2496ff80,
193793         0x6c254c19,0x0d9f657a,0xb8962575,0x3cdea49c,0x2dff27de,0xb685a3f0,
193794         0xdb8bc04b,0x3c50e7fd,0x987236b0,0x904ff0ff,0xbb0d5055,0x494298fd,
193795         0xe14be8d0,0x34b3386d,0x7c3d30d6,0x7ad34e9c,0xe159fdd9,0x1f2b32bd,
193796         0xc761e5c0,0x84cfa23c } },
193797     /* 67 */
193798     { { 0x8b99b964,0x13bc11eb,0x58e2fc47,0x8e280c0a,0xd4c9a54b,0x870fbc49,
193799         0xbf6e20fa,0x37a334a2,0xd7c88cfa,0xee583d0d,0xef4af1da,0x05e029a8,
193800         0x0c2ef8a6,0x6d55e234,0x209e9b62,0x61b6fdfe,0xbb8e080f,0x3b1dad26,
193801         0x9392fc1a,0x5adbc162,0x0aae3f4e,0x02ac0fe6,0xc2bf4d5b,0x8d99801a,
193802         0xc282fed2,0x2333f93f,0xb52db33f,0x16dcb10c,0xc55752e7,0x09f90f84,
193803         0xc84a0d8e,0x287d4c51 },
193804       { 0x0e9867da,0x5fa58201,0x1a874cda,0x614589b3,0xfbdee22e,0x005e27c5,
193805         0xe612bda8,0xe357fef5,0x2d3635f9,0x4e0dbedf,0x6f125a86,0x62be70e4,
193806         0x0d94a2e5,0xa09b9884,0x28b5e5d1,0x7eb99a15,0x751028b5,0x21b9416e,
193807         0xe06d2cc4,0x1b137fd7,0xfea09845,0x6fa1f517,0xffcecbd7,0x3ba1e966,
193808         0x832f453e,0xd4c89a4a,0xeca68fa1,0x07b1e2af,0x4bd395a3,0xd0fb4453,
193809         0xd8ef9e13,0x0132a3dc } },
193810     /* 68 */
193811     { { 0x576374c2,0xe53c7785,0x84727040,0xe60526d1,0x228ca044,0x8a066dc8,
193812         0xf1ce1313,0x1fe1c1b2,0xcdeb0c5d,0x2aeec832,0x9cbf826f,0xa7596699,
193813         0xde77a589,0xcd188e81,0x118d1254,0xe5ce0fe0,0x0790b86a,0xa142a984,
193814         0x39ac28ce,0xe28f043f,0x87de5804,0x4eef8290,0xf639a8c5,0x83c31b32,
193815         0x5887794f,0xd70454a7,0x18b1b391,0xca635d50,0x31d9c795,0xcefea076,
193816         0xb6f8aa25,0x13cbee76 },
193817       { 0x8d3f34f3,0x79cabe0f,0xa3617fe3,0xbda9c31c,0xdd9426a1,0xb26dee23,
193818         0xf29c9104,0xe9dd9627,0xe2c6cd3b,0x033eb169,0xfcba2196,0x8a73f492,
193819         0xb858c83c,0x92e37e0b,0x23b3fbb7,0xe4f2aca6,0x64be00a2,0x8101fb1e,
193820         0x948f6448,0x91a7826a,0x907260e7,0x414067b4,0xe30bb835,0xf774aa50,
193821         0xc999c06e,0xf922ca80,0x0ba08511,0x6b8635b9,0x25fa04f0,0xbf936b5c,
193822         0xe02e8967,0x4e0a1ada } },
193823     /* 69 */
193824     { { 0x8ba29c4d,0x00ca6670,0x22988094,0xc08240ce,0x16dda752,0x21c5ca67,
193825         0xabbbfa34,0x689c0e45,0x3ed28b72,0x1d7545fd,0xd7c56ab4,0x5f221198,
193826         0x38759d65,0x4b3d8f74,0x8fe50b89,0x93490dfb,0xe80eba16,0xb641f5d7,
193827         0x79acb537,0x7b0da5eb,0x0c1d5e5e,0xab6b1497,0xa5da429a,0x2338e68d,
193828         0x2f6d2f25,0xe010c437,0x6530f3a7,0x226f16d2,0xcbef08bc,0xefb0f7b6,
193829         0x9f99c999,0x733e30d9 },
193830       { 0xa42a38f9,0xecfe1582,0x4730b500,0xaec2d58e,0xde976b2c,0x2ee2f2a7,
193831         0xa969c1bb,0xf0539db5,0xfcecdb4a,0x31954168,0xe7a8e902,0xf2f7348a,
193832         0x3121541f,0x1d58d7cc,0x2202ae52,0x5d25b75c,0xf40835a7,0xdea9965a,
193833         0x529b4e46,0x3feb6a41,0xbd27ad9b,0x5c97fb6f,0x261f900b,0xd87554c0,
193834         0x04d5b19e,0xb43031d9,0xcb219b9c,0x33d5e9b8,0x3ee00bcf,0x7a43d492,
193835         0xb79a5c0c,0x56facb39 } },
193836     /* 70 */
193837     { { 0xa3018bfa,0x019165a2,0x9ffad984,0x100c6b24,0x55341a9b,0xbbf1b1f6,
193838         0x25dc4cc9,0xe6bd1d97,0x2bfffe60,0x52850ed5,0x7e5509ab,0x24e992cc,
193839         0x4ceb59f1,0xff6c502e,0x1aa7d148,0x2f0b3573,0xe7e3aa46,0xe90c1ddd,
193840         0xd1142880,0xbaec9f45,0x65be5dd5,0x475cfd26,0x1febce13,0x83abb14e,
193841         0x80942d30,0x6aba4829,0x297e82c8,0x1e1b235d,0x50d8218d,0xb771cdbe,
193842         0xd94d6cbb,0x88599266 },
193843       { 0x155ccaf2,0x08847290,0x7c5b773e,0x8679ebc7,0xb2dd08ed,0xa88b2dd1,
193844         0x87d475db,0x960a180e,0x6694d02a,0x80fdb6b7,0x3f3f9e96,0x3e8758c9,
193845         0x4ad836c4,0xbda3f6fa,0x32fb387d,0x9400c581,0x2550200f,0x25a78542,
193846         0x776ecf18,0x2a97c351,0x566db59a,0x03ebf46e,0x26545eda,0x4743a280,
193847         0xcf74ab44,0xed169d84,0x88cb3f69,0xbaab931d,0xd8257196,0x70ae932c,
193848         0xa0c09719,0x797224a6 } },
193849     /* 71 */
193850     { { 0x441f3567,0x632923f8,0x2e24bf1d,0xc11c3168,0xb7671fff,0x4b97726b,
193851         0x7a5e1a22,0x601746a7,0x3addb417,0x53dddea0,0x7f59b846,0x57867a3c,
193852         0x56cd7ff7,0xb012a987,0xf19ba9a8,0x1bd5fec9,0xf8306748,0x750379a2,
193853         0xab8c05d1,0x7763445d,0x7903f42a,0x5d7f441b,0xa903e46d,0xc011674d,
193854         0xadd126c1,0x1b1d3c4d,0x61455b40,0xa2752aac,0x555c356e,0x4da42a68,
193855         0xd820852c,0x3ff09c15 },
193856       { 0xf9cb7784,0x4c0a1bce,0x2422f305,0xaec539bc,0x0c414aa7,0x5f40f9fd,
193857         0xffd42bc4,0xd3aa316c,0x2f358e15,0x42f5a4c3,0xd6e27682,0x00bdcd9e,
193858         0xf8a5ecee,0x069f789f,0x05e14f5d,0x8078018e,0x8b40c741,0x2bb3e493,
193859         0x7917f72d,0x5dbc8c1d,0xcc57150c,0xe0eea664,0xc3fa8920,0xa25ecc5a,
193860         0x1c797164,0x3c21b0f5,0x634ad16b,0x8f09a2f2,0x58391d9a,0x8e730fc5,
193861         0x4fdfae4c,0x47ef1805 } },
193862     /* 72 */
193863     { { 0x3da285e4,0x9965f3d1,0x3a01e3f4,0xba7d4dba,0x61214ad0,0x4738413a,
193864         0x22397549,0xd3b7d535,0x5a730b92,0xa53dbdcf,0x332d165d,0x3130d92b,
193865         0x82f97ef4,0x44a28541,0x44dce1b6,0xbf62221c,0x7e2a0ec9,0xbba13858,
193866         0xcbfad998,0x33f32c8d,0xb5fed44b,0x409e5f3f,0xc66217bb,0x5c328c65,
193867         0xfcdf71a9,0xb00db69f,0xb8920788,0xa23c2a21,0x3ae6464b,0xf8ab28e6,
193868         0xb8de0861,0x1a6b6e9c },
193869       { 0x06af77aa,0xaf6ec2b6,0xa887f065,0x2e60f5cd,0x9f498c56,0x87d21400,
193870         0xfcbaaf4b,0xdb595b59,0x271ab855,0x0fb592a1,0xd4349b0c,0xa0ce10e5,
193871         0x887d8c9c,0x9d6187d8,0x154bd6db,0x03ee95f9,0x5d06c999,0x8fe53213,
193872         0xfb6a64d0,0xf4a7bc30,0x66a4cb60,0x3d22af0d,0x5d37367c,0x16952cef,
193873         0x997d8e55,0x6f0ea734,0x731732d0,0xb447c70f,0xa9cb3942,0x00ab3034,
193874         0x28510fd0,0x79dd0180 } },
193875     /* 73 */
193876     { { 0x3ac7424e,0x04e0033a,0x60fda4d0,0xdb06b688,0xbcb772fb,0x236a9766,
193877         0xf297cda4,0x294a8e2b,0xdb013c6e,0x4b0aab85,0x8723a3ad,0x3d2aec98,
193878         0x13c84a6b,0x0cae32cd,0x70ec169e,0x21888f5e,0x42a88262,0x739633bd,
193879         0x7b60d9b8,0x68ac792e,0x10769fe1,0x89f2b722,0xd24bed34,0x8f3fcfe6,
193880         0xa3eb24aa,0xd35efb88,0x484c706b,0xddecfa3f,0x929ece0d,0x7cc119a9,
193881         0x8d405436,0x87e5ad45 },
193882       { 0x7d1000a7,0xba99aa9d,0xae823833,0x8b94affc,0xdfb83dc5,0xc8229628,
193883         0x845a418d,0x2f59fe11,0x5d417054,0xa8b970f8,0x72b71581,0x8918c265,
193884         0xc0d1dd17,0xe4ef477d,0x3afad7c0,0xb50b4cf3,0x01870a5b,0x21baea79,
193885         0xbb3a2868,0xc77087f9,0x124a59cd,0x7857531e,0x57f43239,0xed74c26f,
193886         0x0164c94a,0xd5f5ae25,0xf094bf74,0x6608b7e2,0xfdceea32,0xf4cdb5ba,
193887         0x990cc045,0x0b712519 } },
193888     /* 74 */
193889     { { 0x88d5c64d,0x5a290ca1,0xa7492534,0x0596d749,0x2a00e925,0xa04b0d3d,
193890         0xcaf7b66b,0x082cd02c,0xecdded83,0x912b50c2,0xff31646e,0x813ce9de,
193891         0xc75fff95,0x62ae70c7,0x7e2a4615,0x6f6852e0,0x03804fd1,0x320fd7d0,
193892         0x8218e8d9,0xb1a2a4dd,0xafc645d7,0x4918a6fb,0xe8d9fdbe,0xfb080fa1,
193893         0x4470b6ee,0x33d4d08a,0x6d974ef7,0xd2ba2077,0x69dae5d2,0x8ecb95a7,
193894         0x7d69596d,0x7a3f423a },
193895       { 0x9a929387,0x362d2ca6,0xcb1c1fff,0xabdb7581,0x7e51b6cb,0xd892ec9f,
193896         0x3a4e131f,0xee8d8632,0x5bd87561,0x4680e3f1,0xd4e7e732,0xe3a597e1,
193897         0x5581fefe,0x3cc72b7c,0xca8cae0b,0xf3e77f8a,0x5e2fd4af,0xfcc7d7dc,
193898         0x21355b79,0xdd3a4552,0xa2c07177,0x546b24f2,0x0689621f,0x415b532d,
193899         0x3f78163e,0x2be9af51,0x33d7ed21,0x27d63b9b,0x96802943,0xab019ef2,
193900         0x1623faf4,0x2da5fc55 } },
193901     /* 75 */
193902     { { 0xc8a5c600,0x62429cf3,0x3fe33e7c,0xa7a80c22,0x0a57ddcb,0x9ffda740,
193903         0x925b0c74,0xd1ae156d,0x6b100eb0,0x097a43f9,0xef943c81,0x169e945c,
193904         0x1128cf24,0xa1f734e5,0x419f0133,0x04387c4a,0x01044024,0xc007868b,
193905         0x90359cf2,0xe5416abf,0x478d54e3,0xf9c76fee,0x42a2173e,0x66219da6,
193906         0x9fe30141,0x61e03156,0x93ef247e,0xa0ff5ce3,0x072b6592,0x811792ba,
193907         0x70c854d3,0x855f0219 },
193908       { 0x847314c4,0x61fbfb6c,0xeb45b96a,0x97906155,0x6ba2afac,0x7102e146,
193909         0xab949781,0xed51f975,0xc110c4fe,0x9d2f5b17,0xaff57667,0x7ac8ce70,
193910         0x6eb244e7,0xe7366a21,0x551c65c7,0xdd1bbcec,0xe1a859de,0xb525060a,
193911         0x8ba7d2e7,0x7a048174,0xab8ea8c4,0xe1a2c541,0x6fdff078,0x6e7824c3,
193912         0x14874b04,0x79b49fc7,0x06b1f733,0x22ae337f,0x6f8fe6cf,0x1c352192,
193913         0x525d0797,0x292236cf } },
193914     /* 76 */
193915     { { 0x7d8b29dc,0xcdb8d80a,0x08ea648a,0xd17a2024,0xae92be91,0x7db12c5e,
193916         0xfda72fbc,0x1f347d18,0x9e760c6f,0x11374b40,0xd8e38d91,0x7361e8f1,
193917         0x739ac1f4,0x7714be9d,0xb4df5c4e,0xc1f9701c,0x6f72cae1,0xd9138ed8,
193918         0x6ad180c4,0x1c7fe1f7,0x9e2dbf9c,0xf8c185be,0x7c70c44d,0x835db269,
193919         0xb0d15b5f,0xf997cfea,0x61e6545e,0x5101445a,0x25184e5e,0x16b06884,
193920         0x7521e7aa,0x7cfac359 },
193921       { 0x3c0bc53a,0x81182167,0x7e751367,0x84b5ede3,0xa3657a18,0x3ca255fd,
193922         0xba1fdd98,0x096abbf4,0xc5da77d8,0x9ce8369f,0xaab342c5,0xf27b9ae7,
193923         0x972059f1,0x06c91bd6,0x914ecfe9,0xee0dab30,0x93f53f12,0xbb647fbb,
193924         0xffa57e0e,0x30c38a7a,0x9f2ad607,0x517d06ef,0xbb99dcc9,0x49728d87,
193925         0x446080a1,0xb0034af1,0x12b9c17d,0xcc810c3f,0x772a22a0,0x7225f14f,
193926         0x1ddf82bd,0x6ce3dc7f } },
193927     /* 77 */
193928     { { 0xa4397830,0xc07cd835,0xf4733306,0x4dd9290c,0x29989e8c,0xdd35d3a8,
193929         0x563d8152,0x79902559,0xe87de61b,0xf278d911,0x1024e35c,0x9c7340c7,
193930         0x4a0d0e59,0x2d444461,0xf32626a1,0x63e7608f,0xc4c9baa9,0x627a37e9,
193931         0x76fffd25,0x0c56dc51,0xcef2a1cd,0xcb6defc8,0xefc559d9,0xcbcc0d56,
193932         0x041cb692,0xe45f3fc5,0xe5161e09,0xcd05c239,0x5c3b559c,0x2a731ee9,
193933         0xa3d0a16d,0x85151122 },
193934       { 0x86ff19e2,0x782d0335,0x1da28603,0xc2c60daa,0x557c7eed,0xb2e78cfe,
193935         0x1bc4e8b0,0xa8f6f984,0x3df35c67,0xcc1f9b4b,0x4764462a,0x96e13603,
193936         0x7c7ae0b0,0xbf910b97,0x51435956,0x27c7f305,0xf631eae5,0xc14db15c,
193937         0x7e69b34c,0xa51d6142,0x5fc12ff2,0xdec82851,0xfb887162,0xfcceae13,
193938         0xde1488bd,0xda332ac1,0x2ee3e74c,0xa20374e2,0xf0ae069c,0x597ea1a1,
193939         0x77bdec04,0x8b1159f2 } },
193940     /* 78 */
193941     { { 0x2f961d30,0x4af71a44,0x7ac7248f,0xbdf968a8,0xb1a906cd,0xd32df87c,
193942         0x04abf925,0x00c10e26,0xb9f04d4c,0xb8711759,0x939705da,0x00d54e60,
193943         0xc9f80849,0xf7587433,0x6a7a2375,0x2e9abade,0x94ac17ac,0x5676d478,
193944         0xc202d99c,0x4ca0525b,0xabfae73d,0x95b8bcad,0x3405991b,0x2371ed38,
193945         0x458a99c3,0x2b69e47a,0x2b78c866,0x7cac0b18,0xe0232c7c,0x6ceaa79b,
193946         0x588f7459,0x0bd86433 },
193947       { 0x7e734189,0xdea1a8b4,0xcfe5fa17,0x52c5ac88,0x11437664,0x444a4d4e,
193948         0xaf9e9750,0xc2522308,0xd30c6b3b,0x78b1d0c3,0x4c6df477,0x2edae5f0,
193949         0x2ee88dd7,0x53131d9a,0xacc93e34,0xc4e380ee,0xa8db0e8e,0xd499b1ac,
193950         0x7f5d49d7,0x77348c16,0x1556ccd7,0xc9663257,0x2611d13d,0x65ce0e8c,
193951         0xb5a2fdcc,0x2c95fe66,0x8658faa1,0x26698832,0x31c32c98,0xda87d1f4,
193952         0xfcd91907,0x46650598 } },
193953     /* 79 */
193954     { { 0x6b4a5efa,0x4c6c13cc,0x1d07b265,0xc481989b,0x8bdc69c0,0x10b966ce,
193955         0x2c2531d4,0xf54cfaa2,0xcad0a100,0xcb5f1808,0xee5da449,0xbeb52538,
193956         0xbedd83cc,0xa6240085,0xd6255c78,0xe792dacf,0x2062058f,0x88371906,
193957         0xed1658c1,0x96615e83,0x7d28d542,0x4b549b27,0x83b75df3,0xeaf127db,
193958         0x17fbb942,0x4f60df6d,0xf6f7c930,0xd08631db,0x6018789f,0x17c38f98,
193959         0xb9a9280c,0x0c43574a },
193960       { 0x1d20cad0,0x76eb324c,0x8c61108a,0x90decb09,0x6f06d36d,0xa6e9d39c,
193961         0xbc0da197,0x6cd978ba,0x507ac5ce,0x5948b1c0,0xc5497eb5,0x2bd47164,
193962         0x4d5914e3,0x2a9c4c0f,0xa759f03c,0x772c5046,0x69ac847e,0xe7d7328a,
193963         0x3048b330,0xa8d57d0c,0x40f7bace,0xe60034e0,0xa85f1790,0x823d9193,
193964         0x5c859736,0xa6e9b66c,0x679e1022,0x22ca2c7a,0x09023fa4,0x00e7a19c,
193965         0x2726d5b9,0x324999f1 } },
193966     /* 80 */
193967     { { 0x7c834915,0x667eaed6,0xbc5eb64d,0x9f77aa6a,0x25d62011,0x729ebcb6,
193968         0x699fd9c2,0x0aee24f2,0x2b8d4f6c,0xe1eb5874,0x14c976d6,0x7f12710c,
193969         0xf6d9ea65,0x91390335,0x06b50064,0x668b7049,0x0876ee4f,0x65969a0e,
193970         0x2f9d9360,0xf901bf3f,0xb499e3ce,0xfb1a8651,0xf2dbcaaa,0x80b953fb,
193971         0x973b06b6,0x312cc566,0x3af36c64,0x3534d9c3,0x10ffd815,0xe4463a52,
193972         0xf18c2b91,0x57ea2b4b },
193973       { 0x8aa0f2f2,0x00f5e162,0x0e46bcaa,0x8c7e75c5,0xa4a2c42d,0x97ab479a,
193974         0x14baa202,0xb4f308ea,0x6943cc2e,0xa901bd14,0xeed58804,0xbb125fee,
193975         0x9d180f7c,0x6502c8f9,0x1580c61c,0xe5353919,0x27101ee3,0x7e278069,
193976         0xfaa72717,0x7a0a40a1,0x4c75b153,0x32edce02,0x538f1c22,0xda23660b,
193977         0xbe307d2e,0x4d511e98,0x9baee0b4,0x24276e40,0x7ff1f307,0xa78c3927,
193978         0xea7935c9,0x60480b46 } },
193979     /* 81 */
193980     { { 0x3872ece3,0x31087d66,0x955b70f8,0x5f29be7d,0x9cf95bb8,0xb50b4fc7,
193981         0xdbffa621,0xbae3b58d,0xe022ba5d,0x0e61d280,0x4181449c,0x78ae5117,
193982         0xcf555485,0x0b132840,0xb8ce0b0e,0x800ed1b6,0x78d5de3d,0x35dffdd5,
193983         0x69a56b47,0xf7e42374,0x8d910ae7,0xd5e32369,0x6313c7c7,0xb6ff52a0,
193984         0xa92de9e5,0x5a2fe20d,0xd12110bb,0x41b347d3,0x40c16f23,0xc5905edb,
193985         0x9a8f88cc,0x0774a0d3 },
193986       { 0xe3b6c106,0x3ae181ab,0x8de150b7,0x4ebe163f,0x6f354836,0xcf75b82f,
193987         0x3ac7ac16,0xaa0d2063,0x291722af,0x5c680668,0x11545553,0x73941e61,
193988         0xbf5de3f7,0x17127e38,0x1afb41da,0x32cfdf03,0x87bc8663,0xc6893c91,
193989         0xa62c9c99,0x75046744,0x962c1947,0x96866e2d,0x378cdf4c,0x489ec8df,
193990         0x3407fa32,0x3a60709b,0x551290d1,0xd37d2159,0xbab92273,0x9623d303,
193991         0x2432014b,0x08151954 } },
193992     /* 82 */
193993     { { 0xfb7b2108,0xf9236d89,0xad75f9aa,0x3ecc83cc,0xb4e1da11,0xf7c72b15,
193994         0x0315c362,0x552aeaef,0xf272fe3f,0x11e140ed,0x87843ee8,0x99d79bf6,
193995         0x1d9bb25b,0xce6b54fd,0x5b1bad74,0xb20b0e21,0x5b84c90d,0x54a0214f,
193996         0xfca6cec9,0x459bbf52,0x9e4df76f,0xe363c48d,0xd64cf17e,0x3045f84e,
193997         0xf62ada48,0x8402a167,0x6a74ca01,0x2c9e1bf3,0xf691c42d,0xe8cf9d41,
193998         0xc2c4b874,0x5abf2178 },
193999       { 0xf3b3bccd,0x4777966b,0xbe3e0caa,0x0047e0f0,0x8c7d5043,0xcb8383b3,
194000         0x946fd5fc,0xe77e3baf,0xe9ec0e87,0x79baa785,0xc8a18d25,0xd83c557c,
194001         0x25befcfe,0x9b96e5af,0x98c71b61,0x4f05d15e,0x77e62da1,0x081f991a,
194002         0xcbaa3821,0x1c6ec781,0xe54d9bfb,0x7522f65d,0x44ed1430,0xf5d05573,
194003         0x95cafdda,0x3035b31f,0x6378f5bf,0x47e67f43,0x5270b9d9,0x029f7cad,
194004         0x4d916a48,0x15ad1587 } },
194005     /* 83 */
194006     { { 0xaa588ae4,0x00de2ece,0xa371a232,0x552ebc58,0x71230444,0xd00ea934,
194007         0xe4b1832d,0xafbfa67d,0xb689e843,0x29216341,0x61f4e2e8,0x1f96bbbd,
194008         0x04c29dc5,0x95420684,0x42317fd1,0xc7fe3827,0x63483162,0xe0a0aec6,
194009         0x0700184f,0xfc2b94d1,0xfe1fbd85,0x07219973,0xfb074352,0x648b6ab1,
194010         0xc46e5392,0x23bbdaad,0x00fa56ff,0x0db8dd1f,0x866725f6,0x104815eb,
194011         0x52e81963,0x3f9c4cca },
194012       { 0x32ce637e,0xff36b297,0xf5d25cdd,0x81a15f2d,0x8b02ad97,0x1a1d052d,
194013         0xcfbab3e9,0x2e5f3bbc,0x614eeb75,0x60d2cbd7,0xcd5a793a,0xd4491843,
194014         0xcdba2144,0x2242cf75,0x88b99766,0xa20705e7,0xec77e132,0x64e12cc0,
194015         0xb61a9b05,0xb1c14df6,0x74825b5a,0x8fd97f04,0x3da31223,0x95604821,
194016         0x4d30c70d,0xde486727,0x1c12ee69,0xbcab8f15,0x668d893d,0x5dc638b4,
194017         0x223f574b,0x6479dad6 } },
194018     /* 84 */
194019     { { 0xb05f2b26,0x569044f3,0x80b9f76c,0xb35a294a,0x4290f6ae,0x8839fe28,
194020         0x026a5877,0x761cfb23,0x2e5ff9c3,0x768926b6,0x0b11c576,0xbae6cd20,
194021         0x72a03efe,0xdc857756,0xe1bad63a,0x0cae074a,0xd709d99c,0x3fe491a1,
194022         0x6501d9c1,0x76c5ded6,0xc32aeff7,0x1da6eca1,0xc57683e8,0x50849d55,
194023         0xdf98d847,0x9e392e9c,0x64d9a564,0xfad7982f,0xa37b98b2,0xf7c3bdb7,
194024         0xf0860497,0x1fe09f94 },
194025       { 0x7648cc63,0x49a7eaae,0x67cfa714,0x13ea2511,0x653f4559,0xfc8b923c,
194026         0x81a16e86,0xd957619b,0x3c864674,0x0c7e804b,0x1616599a,0xfc88134a,
194027         0x0a652328,0x366ea969,0x4bc9029e,0x41532960,0xae2aad2b,0xef9e1994,
194028         0x7f10bef5,0x9e2a8c52,0xc67bf860,0x73dcb586,0x844cc25d,0xf61a43fa,
194029         0x74eb3653,0xd74e7eea,0xdd240f02,0xf3356706,0xfd83bcb4,0xeec7694c,
194030         0xdb62526a,0x4de95786 } },
194031     /* 85 */
194032     { { 0x3deac2f7,0x4867d315,0xb61d9a8e,0xa084778a,0x0ab7b2d5,0xf3b76f96,
194033         0xcfdf4f79,0x00b30056,0x31ab8f4b,0xd0701e15,0x9c779d01,0x07f948d5,
194034         0x82675371,0x7c994ebc,0x48bad4c0,0x1104d4ee,0xbfc9d058,0x798ce0b5,
194035         0x309fa80b,0xc7ca898d,0xacb33eaf,0x0244f225,0x5b2f3175,0xd51e8dfc,
194036         0xa4d7be34,0x3e49ba6b,0xbda02b43,0x1760f4c7,0x4435275a,0x37e36a7e,
194037         0xe636980c,0x1c94418b },
194038       { 0x09dc1414,0x43a21313,0x43c93537,0x060765fc,0xdf5f79ce,0x6ff3207a,
194039         0x85d4cfca,0x6f18b1fa,0x63e995ab,0xf5c4272e,0xa82b3002,0x121a09e4,
194040         0x97147f16,0x82b65d1b,0x20a7fe26,0x4993c20c,0xe6716726,0x99c9cb98,
194041         0xfeb440a0,0x5a02d673,0x251b4bc5,0x3f3fa9e1,0xa05338ea,0x75dbc474,
194042         0x7b09f6cb,0x3cb4044b,0x80434609,0x6767da18,0x098ceac2,0x97851422,
194043         0xb55235ba,0x611bfbb2 } },
194044     /* 86 */
194045     { { 0xf00ad2a1,0xbdbaa55e,0x14a290d7,0x29efa85e,0xe92b1694,0x3b4a4768,
194046         0x11ec8130,0x67111bcd,0x88bd27b2,0x0e425702,0xd9a03c06,0xf28cf2a3,
194047         0xf318884a,0xbb7c8d2d,0xe3aaeb20,0xe2ea1462,0x43b85d77,0x33535804,
194048         0x554ee9bd,0x81ee4482,0xe6aa198f,0xeb2eee9e,0xc26c5944,0x7a5aa804,
194049         0x82ab167c,0xa0ef2da5,0x02fe21a5,0x5a2ab476,0x3370298e,0x169cb3b8,
194050         0x0eb3aa8d,0x86e6c544 },
194051       { 0x0b793d9b,0xede03321,0x1ddb5ece,0xf79fade1,0x68930b64,0xf73fda92,
194052         0xfe4fd1b2,0x06aad97d,0x92a4dc88,0x073a5b1d,0xbc976d75,0x8af8cbd8,
194053         0x63ce26c0,0x60b4abb1,0xdcb1fb06,0x9c8300a9,0xda95b3d3,0x335a594c,
194054         0xb37eac87,0x1f97d7d4,0x20eefaab,0xa3d2eba2,0xf3e828c8,0x3258c906,
194055         0x85ab7781,0xc832616f,0x8c28b617,0x72597192,0x3233b82d,0xcd7196bc,
194056         0x19fa126d,0x83867eb9 } },
194057     /* 87 */
194058     { { 0x22474edb,0x774fe73e,0x1a84e1ae,0x2a766394,0x9c6dd6e3,0x270329ad,
194059         0x14f8bf5d,0x00c4a415,0xd2267b90,0x3ce2ea37,0x11d24fae,0x12753015,
194060         0x263a1b78,0x7c14d854,0x1ae0b206,0x20c8401b,0x081f49fc,0xf32a011b,
194061         0x959c6df8,0x1e8123fb,0x800e1d06,0xa328dc7c,0x24259a9a,0x5876a378,
194062         0xb7ef6c37,0x23ada8b5,0xa93d4c9f,0x023f6b6e,0xffb6389f,0x89f5414d,
194063         0xe628b39e,0x4b26bba2 },
194064       { 0x5d318454,0xd30b1cb4,0xd7436cb6,0x123b749f,0x568a7461,0x3110c726,
194065         0x1c84fd1e,0xc85de123,0x08403d55,0xa5f8d6e6,0x9b1fabf8,0x395b6e13,
194066         0x3cfedce0,0xfe6d68c3,0x94b91110,0x1d90381f,0x2dcc6eb7,0xf0a8ea81,
194067         0x7e90ca2b,0x59e80413,0xc8a25c5a,0xbeb5fc07,0x5d84663c,0x009c253a,
194068         0x910b6a7c,0x00b15073,0x4108f8d5,0x8607da4c,0xcb901e65,0x02c3d9c3,
194069         0x2c9615c6,0x4d697bc5 } },
194070     /* 88 */
194071     { { 0xefa8fb40,0xe0db1ef0,0x5ba3989c,0x29021c5b,0x809d19df,0xa8d6fb15,
194072         0x4c1219e1,0x6b787b73,0x14ef05e2,0x6417e168,0x8f9796e2,0x449342db,
194073         0xbf84421b,0x2f878a5e,0xe94a4536,0xe71916d7,0xae119693,0x9818bba3,
194074         0x5768804e,0xec674be9,0xf8424f8a,0x0a26074c,0x466ce6ab,0xdbc93b9d,
194075         0xc920078b,0xb3f15a98,0x3870f1a3,0x9d10fd0d,0xe4e785a7,0xa61241d9,
194076         0xe6c8cd80,0x76ca87a1 },
194077       { 0xe02e48b7,0x4357fb56,0xcc09e9c6,0xfbd14b13,0x24069cf0,0xdb5f2435,
194078         0x2c3b01a9,0xf878165c,0xe6956dad,0xe549e7c4,0xbbd60b68,0xf2fe9538,
194079         0x059dc653,0x952f856b,0xb377fe9b,0xd3f60225,0xbfe908c4,0x6a0c7328,
194080         0xbc8f5f2d,0xce6aa2d3,0x24425050,0xf7213443,0x3d3b3ce5,0x17e1266a,
194081         0xc1677512,0x75b5e43f,0x37fb894a,0x15927062,0x2be3e375,0x15260753,
194082         0x6da3b7be,0x27e7f2c6 } },
194083     /* 89 */
194084     { { 0xe6a15883,0x638f65ad,0x66afdb33,0xd4a7e68c,0xd3f12de5,0x6207b6ab,
194085         0x37b87810,0x1c6ff950,0x64acf6d3,0xc0d44cb2,0xf2be78c2,0x163ac601,
194086         0x1636980e,0x1c63cc5a,0x95c9349b,0x3e92cfe8,0x41ec7220,0x7738e0d8,
194087         0x2d5fa961,0x6169d764,0xc3e028e9,0x2aa776c1,0xb16d5409,0x93dc5646,
194088         0x706df4d9,0xa0b27fb5,0xce9c6b97,0x9e991170,0x53c85f40,0xea8e42be,
194089         0x83246528,0x02e96437 },
194090       { 0xae78ea1f,0x91540add,0x7b670e96,0x51a1b74d,0xf7006826,0xf9936441,
194091         0x7d7520c7,0x8f97d6ea,0x69ce12e1,0x0faa6a02,0x79208342,0x2590aca8,
194092         0x75614436,0x7a483863,0xf381408f,0x07c6149e,0xd7853406,0x733bf584,
194093         0x9abbb6f7,0x8761b010,0xf528a09a,0xe4eb249f,0x2e00ae3c,0x08781ed8,
194094         0x2178effa,0x864c1b25,0x9d513a7e,0xcc1e62a2,0x1919062f,0xedb8b94e,
194095         0x4f16527d,0x739f53da } },
194096     /* 90 */
194097     { { 0x924adc5f,0x7a5f4a88,0xa818f56d,0x95646c16,0x7795f954,0x0ec49129,
194098         0xd19c5400,0x2b48753d,0x205912b4,0x16fa236b,0xe87a4946,0x6b3d65f3,
194099         0x045fd066,0xa7174a01,0x12a5e140,0xb6350313,0xa96b8623,0xa79c4b44,
194100         0x9ab003d5,0x7a339d65,0x3826f31a,0xc72f30c6,0x6f7090cd,0xb4e7390c,
194101         0x906ebe24,0x59ac6c36,0xbba4505a,0x39a7f06d,0xc58c413a,0x839991e1,
194102         0xa20e0e84,0x020c23ff },
194103       { 0xafc74661,0x120e4ada,0x277fc065,0x37bbcf63,0xb6dce799,0x41049cf6,
194104         0x7b161ba1,0x5b8d6b53,0xa9610fb2,0x22218431,0xdfdde769,0xde9ec9d1,
194105         0x42d80630,0xd32bfa4d,0x6244df4b,0x3885702a,0x45592dfb,0xcdedd1ed,
194106         0xfb4e01b8,0x0e1df45b,0x86e215b0,0x8f4bded2,0x6a937e6a,0x80935487,
194107         0x8130f723,0x415278ba,0x38a821f8,0xc6dc4692,0xfd8b4f8a,0x2207b119,
194108         0xf9269cef,0x76e7bf53 } },
194109     /* 91 */
194110     { { 0x27ebd187,0x5f128428,0xb65aadbb,0x8d3320ab,0x72258695,0xb042765a,
194111         0x8f0986ab,0xda3f33f9,0xaebff503,0x411807a7,0x825f71a5,0x25c776ca,
194112         0xff7df24b,0xc0de7bed,0x165f1fb4,0xda8b0f42,0x731f3ae3,0x5f3ff737,
194113         0x193e0a52,0x4cd1d7e7,0xb6b3ba46,0x8df84aa3,0xaa1f3782,0xba84b897,
194114         0xe7733ac7,0x6e7960cc,0x50981a21,0x4d46d6ab,0x7cbb80ed,0x1ec12c25,
194115         0x2b96ef09,0x79e7ad27 },
194116       { 0x8f30caae,0x3cd970dc,0x0a6ebef4,0x85cabcf1,0xc714616d,0x63c1863e,
194117         0x519e3a98,0x1c50db0b,0x64cb13d6,0xf39b8963,0x22547b69,0xdf67d81f,
194118         0xd67db0cc,0x7157abb9,0x889491b7,0xccca25ba,0x7a27e0dc,0xf689207c,
194119         0x0fd43281,0x34ae8fbe,0x5720ec09,0xa5d91f73,0xcdfd7bed,0xb2f61909,
194120         0x4a039e32,0x1ec10232,0xdb0d8fdc,0xd3c3d65e,0x4fe5005d,0x32c916c8,
194121         0x4c0bea94,0x7f8c37ac } },
194122     /* 92 */
194123     { { 0x43ac05e5,0x33ec1e54,0xcd8d3825,0xda4a4da4,0x88bf9e2b,0x86d88c0b,
194124         0xb53811dc,0x34d71dd0,0xa3c3aba4,0x655040d2,0xb61611be,0x2bc40949,
194125         0x279a4fa0,0x1c2d426e,0x3b065ac3,0x535a5aa2,0xc52ea890,0xdaa8a32f,
194126         0x9fddad22,0x5a5deca7,0x2ab3b26f,0x911f05fd,0xf37cd81e,0x5dace7db,
194127         0x90d16b8c,0x0e0e44e7,0xe4f5894e,0x15e68aed,0xfc92a74f,0xafe04999,
194128         0x970e7c2f,0x1d7703aa },
194129       { 0x3f0062a9,0xa8a4c81d,0xd96a20ba,0xe31eb2b8,0x864bd101,0x66dd98df,
194130         0x4413b614,0xba05f592,0xe9a555f8,0x51a67a0d,0x2e4b52d1,0xacc2f097,
194131         0x7184ab23,0xab5daaec,0x7c7f691b,0xce08b43e,0x76c427f4,0x520e530b,
194132         0xe423ebdc,0x7d352069,0x34df14ce,0x6b5e39e8,0x446305ac,0x3dcbf295,
194133         0xfe34cdc1,0x682cb2e1,0x111f5afb,0xd4ac45d1,0x47f296f9,0xc5ef63cd,
194134         0x93c20871,0x0a2c40ec } },
194135     /* 93 */
194136     { { 0xaf5747db,0x09bc384f,0xc06ab86b,0x3bad6086,0x9e7c1547,0xa406882e,
194137         0x55977abf,0x2d5326d1,0xda81deb0,0x063a9a05,0x524b6111,0x9a86e4a7,
194138         0x4ab2eb90,0x1402f87a,0xd5c600ba,0x7d0721d4,0xf289fdbf,0x1a2fd9a9,
194139         0xecde6f07,0xf5dce66d,0xdab9fa73,0x62171277,0x6c474bab,0x6d2dc49f,
194140         0x76eed033,0xdc017e1f,0x4da825d3,0xb97175c0,0x54b05e43,0x6c297e3d,
194141         0x56c9c87e,0x2efb4546 },
194142       { 0x8b21c064,0xa4712b00,0x4a70629e,0xd186fe42,0x9b74f0af,0x6435b340,
194143         0x7ec9e629,0x6965aa43,0xc4c60d08,0xdda14673,0xbf3057aa,0x0b656670,
194144         0x3ce86f60,0x7f05e840,0x04401a16,0xc05073a9,0x294e607e,0x16b1e638,
194145         0x69cf7046,0x20783252,0xe8ce7d3a,0x2941141b,0x7577053d,0xd38ad8d3,
194146         0xcaa6630d,0xdba68fb3,0xe9504350,0xecbeaff1,0x1d2d760b,0x9f5166d5,
194147         0x462891e4,0x337532ce } },
194148     /* 94 */
194149     { { 0x3a00bb9b,0x3f111853,0x45f66685,0x2d2ffbae,0xd4aee24d,0x9ae11a85,
194150         0x0341856e,0x18ba1e1b,0x2731349f,0xa9ac8178,0x545715b5,0xc13dfd4a,
194151         0x5daad2ea,0xa5f7423c,0x535b76a7,0x30a483b9,0xff873e9b,0x92e9ada4,
194152         0x723a1055,0x15662d84,0x8edac4e0,0xb935497b,0x39d8fa70,0x61b6441a,
194153         0x40d1589f,0x1541d756,0xf0a05f0a,0x62994237,0x6bb28908,0xfd8b0034,
194154         0xd4cd32bf,0x192a2b5d },
194155       { 0x365ced07,0x63576628,0x05de1d1f,0x029f32fb,0xbf40a7aa,0x6d17b9bc,
194156         0x9bb50a47,0x1b1b2a08,0x795a6278,0x9389abbb,0xb34fc19b,0x52cff60f,
194157         0x387d8739,0xf3ab9492,0x6920ccd6,0xa8f053e6,0x63a9b4f0,0x3ef2dd4b,
194158         0x51e82129,0x9ab0ede1,0x0838bfa1,0xafba0c0b,0x9ffc11be,0x2bd5a7ac,
194159         0x95cc0878,0x058bfd95,0xf8c2f0c6,0x686d48a3,0x1d9b31ba,0xc33abaaf,
194160         0x3bc0c268,0x632e2289 } },
194161     /* 95 */
194162     { { 0x15a1ccca,0x1c851d20,0x7e522bc3,0x4efe290c,0x18eab053,0x0b741d55,
194163         0xbc85e217,0xae656197,0x01cf8b29,0xae13141e,0x66948478,0x2e2cb593,
194164         0xc31bd8ae,0xeb57bb0f,0xc264e788,0xdecef5d6,0x9cb96d86,0x6fa856cc,
194165         0x279183da,0x2db16813,0x383d796a,0xf03f3820,0x1d0c6fed,0x58a456ff,
194166         0x8a6abd9b,0x25589805,0x83f96f19,0x339f52c5,0xda7e9ea7,0xcf6ded8f,
194167         0x5d1ccd45,0x68c3d9c1 },
194168       { 0xe6b392b7,0x67e26265,0x775d9509,0xcec1d9bf,0xd76514f7,0xe16abcd4,
194169         0x0de72e1c,0xd86f59b2,0x1adfb033,0xa66e43cd,0x05e457cc,0xdb344340,
194170         0x5681daa2,0xb67a7916,0xf0114731,0xc32e7bab,0xd3b1e961,0x066fe16e,
194171         0xf63d26e6,0x924e298e,0x541add6d,0x9bea0dd8,0x9982f971,0xef9500df,
194172         0xc5f076ac,0x5c876e63,0xb23d396b,0x55e12ae5,0x2ec6747a,0x09efbb36,
194173         0x233286a5,0x8f2055ee } },
194174     /* 96 */
194175     { { 0xb82c1af0,0x4a4ab9e3,0xf2cae264,0xfc65e9e7,0x60187d46,0x4feaac0a,
194176         0xe393b363,0x27d3f335,0x819bacce,0x9c9f7c00,0xb8aa6611,0x3f7418b5,
194177         0x372aae95,0xffa94557,0x8db38589,0x937d7804,0x6f1fbc1c,0xd10c86df,
194178         0xa2f0a0ce,0x48aebd89,0x367439eb,0xae5d5fa2,0x3f17d2d8,0x103a6a0b,
194179         0x411d9894,0xf233f68a,0x218b67a2,0x7fece8b3,0x2319bf06,0x0422540f,
194180         0x340d322e,0x1292c8c9 },
194181       { 0x0386463d,0xf5eb5587,0x0371d97f,0xd4bbc2b2,0x0b819c5a,0x1b364571,
194182         0xcf04ad41,0x0cbb42d6,0x66939ec1,0x5d819c76,0xa01847e7,0x8745ac13,
194183         0x1c7232e4,0x4f704b02,0xacb05780,0x2c9e58a0,0xb561e295,0x9523b8b3,
194184         0x79f9ba35,0x3384df00,0x1eaa9628,0x78231fc2,0x8aea2b90,0xa2eac54f,
194185         0x30d1c263,0x8075ed77,0xfb339000,0xacb44ed5,0xf011293a,0x92546ac2,
194186         0xeb821764,0x7c78762b } },
194187     /* 97 */
194188     { { 0x067902b6,0xb8f7d6fb,0xd1735980,0xb2823a43,0x59741ddd,0x062cfb12,
194189         0x4033f95c,0x6e391b07,0x68589b8c,0x3831d0a3,0x522290f2,0xe3474d49,
194190         0x222e1f3a,0x4dab14d6,0x53f08d39,0x8f00fcde,0x707f28f5,0x559917ae,
194191         0x068e607c,0x166aa0ba,0xd7e1f824,0x602713e7,0x4d6a328f,0x7c255540,
194192         0x9890cd2a,0x0d2e3264,0xeca0b20a,0xf2207944,0x52f4e09c,0x5c98dc07,
194193         0xd84de81d,0x69403504 },
194194       { 0xe5407206,0xf8b7b366,0x0d88fa8c,0x1ecf54cf,0xf7272e6f,0x6fefe548,
194195         0x81ab4468,0xd6531372,0x4e474408,0x52cb5f0e,0x6490737f,0x9e426b3a,
194196         0x4980d071,0x2576c19b,0x0f272caf,0x91f34628,0x468f31c9,0x78e60a4f,
194197         0x90844d89,0x8776a329,0xb951582b,0x8a55700c,0x14b1adbf,0xab1af365,
194198         0xfbd343ef,0x22ebff92,0xb7d81f34,0x32f9fb01,0xba6b30e1,0xad850e06,
194199         0xbc5f9546,0x6da9e027 } },
194200     /* 98 */
194201     { { 0x5c9490ce,0x21eee4c2,0x0df68381,0xa96ec4a3,0xa4a9368e,0xe6c607e0,
194202         0x4bc262f3,0xd8b0492a,0x460c34ff,0x0846a210,0x28df33cd,0xf7ff7a64,
194203         0x21827612,0x10c55044,0x149bcd01,0x9d25fce9,0xcfc613dc,0x725611cd,
194204         0x97f51ce5,0x159f7e88,0x4e8c08b5,0x3fa3bf31,0x75e7538f,0xea156115,
194205         0x91c84020,0xd1e0a951,0xcf02ad0a,0x0d2268ba,0x058b8e5f,0xa04c6ac4,
194206         0xb3515912,0x773b40b9 },
194207       { 0x3631cfd2,0x00ff2cdc,0x807737bc,0x14c4c2d3,0x338a5270,0xd600616a,
194208         0xb32cabde,0xd0e3306d,0xa70b17ca,0x336738ea,0x79f353ee,0xf2f4aa8d,
194209         0x576f3ad3,0x712f6ad9,0x89b2bce0,0xe4279852,0xda92ca30,0x05d8f94d,
194210         0xd8492dd9,0x9891d475,0x4d15e4bd,0x3e06a5ca,0x254eabbd,0x4725d4eb,
194211         0xc0ed513c,0x31394ace,0xbbfaae6c,0x7e0f9859,0x833fd137,0xdc125546,
194212         0xc56c4f75,0x12b46385 } },
194213     /* 99 */
194214     { { 0x932951de,0x810dbebd,0x5aa69c94,0x96959d42,0xecb2f08d,0x5fc49c04,
194215         0x2250b82c,0xac74f0cc,0x3aec4e1d,0x96a439a5,0x90499acd,0xc33cab9a,
194216         0x54d9b3af,0x2fccde66,0x3863ae8b,0xf4af285c,0x46febf88,0x2373373e,
194217         0x3c9ab7ed,0x751d672c,0xfe12020c,0xc1c51130,0x52f3e56e,0xad82402f,
194218         0xa4a64a81,0x3489ab7a,0xd9f163f2,0x0a1fb661,0x0e553317,0x17c69be1,
194219         0x7d88d417,0x61c1935e },
194220       { 0x3492ae43,0x2e722d9b,0x0538f05a,0x1ef89d95,0x200aab63,0xae77e588,
194221         0xeba4b117,0x2872c120,0x3a461cb8,0x5c2432c8,0xcb938f26,0x315b3434,
194222         0x8c4c7dc0,0x05bf2ac5,0x596b378d,0xd2e501dd,0xcb890c30,0xa8506c9f,
194223         0x7c361f0c,0x3d0af461,0x5a35cbae,0x21f7b718,0xf3fc0138,0xbd1035f1,
194224         0x8b248edf,0x74628af5,0x48c9cae0,0x8d6421d0,0x2ca18773,0x75e3da39,
194225         0x71d3db94,0x27ad0df2 } },
194226     /* 100 */
194227     { { 0x305b5aed,0x9e3bda79,0x5998d6a7,0x2c67d4a4,0x0f7eb700,0xc855e1d3,
194228         0x147d1c44,0xc18a7e9e,0xc89540ed,0x3ea99618,0x7e6bfd20,0xa53be20a,
194229         0xecc14437,0xc9487e64,0x34ef85c6,0x72979207,0xd5e1ebd5,0xfa0d4e71,
194230         0x4d48d6b6,0xfda2b1e6,0x66e200d4,0x782a1e05,0x5a5366a1,0x2a3c70da,
194231         0x1a473738,0xfe3fbd2b,0x7fe020e8,0xd7ef8c06,0xeacfb665,0xec686fde,
194232         0x6dd1542f,0x5d9b5e27 },
194233       { 0xcb3e472e,0x3637c5a5,0x30a1405e,0x2153d927,0xb4498558,0x009992e5,
194234         0xf39a0851,0x18f00ccd,0xb5c6c560,0x26237c11,0x1343540e,0x418ed408,
194235         0x7e7f3184,0xfef7cbf0,0xbf48576b,0xecd92366,0xbc94c91a,0x1b75be1a,
194236         0x4a162276,0x8e1778de,0xc5c6bcb8,0xc52e57d3,0x5ab71858,0x5cc382c7,
194237         0x3f6e39f9,0xe12c2c28,0xd62735fc,0x4c7e0ef2,0x835a5996,0xe071deb1,
194238         0xcbb8c766,0x24f891cd } },
194239     /* 101 */
194240     { { 0x6778c1e2,0x24ef60bf,0x00d5be5c,0xff49c03d,0x2f01a09f,0xec11986e,
194241         0xae096e58,0x59a728a4,0x7077984c,0xaabbcedb,0x870ca5a5,0xfb473bd2,
194242         0x4de30e3d,0x8c928c61,0x4f67abca,0x3fae7f9a,0xec21a9cf,0x83c2b2eb,
194243         0x9cd9b5de,0xafa70d62,0xc60b18df,0xadeaea59,0x4049b54c,0xd5fef7be,
194244         0x6dd310e3,0xfceebc76,0x8f6321cc,0x7748efe3,0x18ee8af5,0xfe9c32b1,
194245         0xd42df612,0x863ac3cf },
194246       { 0xb85a2fe2,0x0a36fca7,0xee429dc6,0xf3e70d08,0x141c3944,0x8c9ba209,
194247         0x67272a0a,0x306a8106,0xf968bd06,0xe69a1555,0x153c603d,0xb86f7e47,
194248         0xef56e4fa,0x9706614a,0x98780b4c,0xc0dc36b8,0x3a1d3263,0x43657fe2,
194249         0x435522c9,0x01f97a86,0xedfef679,0xd91897f6,0x6daa17a0,0xebbe31d4,
194250         0x85accfbd,0x6f179100,0x8f9fc1de,0xe0da6e32,0xe1e7142c,0x1c9d53db,
194251         0x8b86725a,0x3e3f1b1e } },
194252     /* 102 */
194253     { { 0x7b7fbf05,0xb7ea15c0,0x1f1a3882,0x992f11b6,0xd1dcd1bc,0xc9ddd95a,
194254         0xad0f7e8b,0x31f5b7fa,0xfca7ab79,0x2936e5eb,0x19a55be6,0x30f417dc,
194255         0x43cde554,0x1f6f4e43,0x82f044bf,0x971f5e65,0x4288c408,0x73c3b8e4,
194256         0xb807f575,0x61aac59f,0x818b58f0,0xa64ee2dd,0x97a3b0d3,0x6f7a0a60,
194257         0x0394b058,0x8b85ecc8,0xbfb3517d,0x9a059474,0xa79c3f06,0x89ad5977,
194258         0x700a8025,0x81208ed8 },
194259       { 0x14c4ce37,0x10935099,0xa1aa48a6,0xf34bb843,0x580d58e8,0x86007024,
194260         0xb375b8ba,0x6db42c49,0xed3bde83,0xac365524,0x649233b6,0x5521e1b4,
194261         0x64dd946f,0xbc7cc5d5,0xbfb5b6ae,0x9c14b035,0x0146c1a3,0x7f22ba18,
194262         0x872214f5,0x0b62fbbc,0xb4921764,0x3acfd7f7,0xcb4d6df1,0x5ff10da1,
194263         0x62600a91,0x660e2620,0x81d9167f,0x7ac7da9d,0xb6e7a199,0x6e8e260c,
194264         0x80deb3c2,0x44383fb8 } },
194265     /* 103 */
194266     { { 0xe44f9af6,0xe107f01d,0x8cb1fa1c,0x36381a4d,0xfb7dd493,0xe65be3ec,
194267         0x26a8839f,0xd0b8435a,0x3ec789d8,0xee60f915,0x2bcc5e1f,0xe25fea50,
194268         0x7e44a81c,0x0477c0c5,0x230ba5b8,0x349e9f83,0xde180dd9,0xdd42f32f,
194269         0x64a3d11c,0x8b039eaf,0xbeb7083a,0x80ef884e,0xf12742cb,0x288e60c4,
194270         0x720a0262,0x44156cc5,0x7253b77f,0xcd547de6,0xa6013a59,0x9829a6ec,
194271         0x0d548445,0x8aee708f },
194272       { 0x32c54409,0x18f22d9c,0x75ebaac4,0xa9ebfa46,0x86284981,0x90e2e928,
194273         0x6b3a8e0c,0xd0201f6f,0xbd77641e,0xc973016c,0x70170575,0xf926f2f0,
194274         0xfec0ce01,0x4984048f,0xf319d304,0xbf696211,0xc91a88c4,0x74b5c844,
194275         0xe0030a82,0x4c40fbce,0xe4f6d521,0xbed67525,0x29d67d1e,0xaf7e47cc,
194276         0xc21d3536,0xfa307db8,0xbbb29405,0x56b6c46a,0x033e805f,0xf059a7e3,
194277         0x6096a5a0,0x970f61fe } },
194278     /* 104 */
194279     { { 0x1bec8e4a,0x1bc53d23,0x35a6034c,0x8809ac14,0x509e464d,0x4ee081da,
194280         0x8a488235,0x496ae1fd,0x325864b6,0xa1ae9863,0x74cd069f,0xbaca13e9,
194281         0xb1d8a6b4,0x3738cc58,0xe76b9da4,0x5fa71f58,0xc7eb16fb,0xc919be88,
194282         0xad4e429d,0xf5c8f13f,0x2499f9ed,0x4583b671,0xa10d8bd7,0xbce20115,
194283         0x5790bb7e,0xf66d7605,0x482b78dd,0x9316aede,0x75f855fa,0xe0d8fb2d,
194284         0x5a7dcca7,0x404b5b94 },
194285       { 0x517a15c7,0xf9ee682a,0xef880202,0xaae4cfbc,0x5106a354,0xcee2c139,
194286         0x170febe7,0x5de60192,0x73d0c54b,0x589e39fd,0x8c9092b7,0x195c7135,
194287         0x0a7bfe5f,0xcb7ed53f,0xf61cc979,0x2bd9242a,0x5395f7d9,0x8d2ef16c,
194288         0x70b32f09,0x0d4ac1ca,0x52d185c1,0xa587526d,0x942d6195,0x2932b04a,
194289         0xa500b0ac,0xfe25a979,0x562fd230,0x5fa1f4ae,0x20da253c,0x60f55af2,
194290         0x83146002,0x7faa11b5 } },
194291     /* 105 */
194292     { { 0x6e402149,0xb0ba4f0c,0x963cc119,0x3584cc1d,0xa6527476,0x7740dc1a,
194293         0xc95715f2,0x3f77ff75,0x3f89fb0e,0xb2f234ad,0xef9be3ff,0x55159032,
194294         0x04237e82,0xfc9fb21d,0xa153ed93,0xeb2eff38,0x10041d13,0x89d53ae0,
194295         0x7f1bd828,0xcf2e545b,0x43953ea5,0xdd4a27ce,0xd85e75c8,0x00d2e5d4,
194296         0x241be1c3,0xeb93ed62,0x0242032d,0x1e53f25f,0xc3a4e701,0xb9957636,
194297         0xed98febf,0x14b63a52 },
194298       { 0x71c43336,0x7610b553,0x23a4824b,0x19dfd4a6,0x0286051b,0x7b97a2e0,
194299         0x8f5f1edb,0x86abbb9c,0x9b67daad,0x67a57d77,0xcd5ffafb,0x8ace506d,
194300         0x89ac3c63,0x85da9f95,0x75a3d150,0x081cbaa8,0xe9346ed2,0x03353d8f,
194301         0xa1f9a02d,0xb2ab61f1,0x3a659c71,0xb0cb0937,0x4f5df8a1,0xb7e0e30b,
194302         0xeb7d5a1d,0x77c4c741,0x728e5cf0,0x8f046c9c,0xf7c171ac,0x32dd0bc7,
194303         0x836d2655,0x02485873 } },
194304     /* 106 */
194305     { { 0x75a4cd8d,0xcd40dd23,0x97bcba78,0x132ca433,0x258d61f5,0x30c5cd84,
194306         0xda1e8e68,0x0a7ec059,0x1d65d40a,0x07a8f171,0xf4350d76,0x869e655e,
194307         0x5983ae42,0xb98ce6f0,0x9d8bebd0,0x7b61391d,0xb1ba5d49,0x3a529e25,
194308         0x1f6b2cf6,0x46f732e9,0x3fa3b629,0xbd66ec6a,0xc3ef0ed2,0x397950ec,
194309         0x5f08b476,0xee9008cb,0x965a0e2e,0xfd6be425,0x1177bc87,0x78ed513c,
194310         0xfe512dae,0x6798cedf },
194311       { 0x1b97c5c6,0x49e3f8fd,0x78c3b33f,0x39fbab3e,0x40f595ba,0x44274412,
194312         0x5d7d4376,0x174225b9,0x79c44777,0x880b3fcc,0x3296b245,0xdc3aca83,
194313         0x1734e184,0x55913df7,0x9c934472,0xa4db23d3,0xd1420a11,0xcebb3733,
194314         0xf3608bdc,0xb9d20cf9,0x30cfe13f,0xa618acf6,0x5f30874c,0x75f06b31,
194315         0x9f0005a5,0x506efe7f,0x01bfc9db,0x8aaea78c,0xf78e7c41,0xf9179255,
194316         0x52e96395,0x3ea7aed2 } },
194317     /* 107 */
194318     { { 0x5b06ae25,0x98617e04,0xcb5750ef,0xbcac148d,0x604c2ba2,0x91ea2f0e,
194319         0x76b78975,0x00c19f6b,0x651da181,0x79b9b6d0,0xc945705b,0xf3225beb,
194320         0x5c005bf1,0x30b435f3,0xbc24d86d,0x440b4482,0xd6373777,0x2b8f0996,
194321         0x1c44b4dc,0x65fd6c56,0x30906999,0xe9405ee6,0x08aa1ec1,0x19ff0924,
194322         0x3d2f2895,0xeef3246a,0xbc746797,0x016c3765,0xd0705f7e,0x62d2569f,
194323         0x05250044,0x6a8ad39c },
194324       { 0x46be7282,0xe45f020d,0x21380f12,0x9405afed,0xd5da6ad0,0x4cdca5bd,
194325         0x7f8be61e,0xc2d6f184,0x596b8178,0x20132953,0x7a8df954,0x8d3b1e7b,
194326         0x39572b4d,0x757c61bb,0x80cc3b56,0xd749b57b,0x37b3ffec,0x9590ff93,
194327         0x145dc94d,0x39bbb653,0x2335e573,0x70c1c606,0xf763feba,0x9c2e72d7,
194328         0xcc61b732,0x4768e424,0xaa73f2ca,0x777d2fa6,0xc5cb58cd,0xdee4dbaa,
194329         0x9cfae1aa,0x1a181179 } },
194330     /* 108 */
194331     { { 0x77575ed0,0x6f6ff62f,0x7d1da99b,0x18f14fa9,0x69efd7f6,0x2e72aefb,
194332         0xddc28633,0xc45ab4cb,0x586c5834,0xb0e20d48,0x39775dd8,0xd397011a,
194333         0xf4134498,0x0130c808,0xf5115ed8,0x2d408eba,0x0260ded9,0xc506a05c,
194334         0x19cab911,0x9e5b7362,0xe8693a86,0x4cf508c6,0xcc773617,0x4e71245f,
194335         0x95d89ca3,0x2f71aa1f,0x607bbc98,0x4bba7c6a,0x212b7fd2,0xf3a515e7,
194336         0x9230f5a8,0x7d2ddc75 },
194337       { 0x4ed2cae8,0x3d05816d,0xb9c00377,0x4cf6bc7d,0x646b08d4,0xc23e98e6,
194338         0x4b9c0180,0xf9ee6c61,0xef9179c1,0xe11c9a13,0x8ed9688a,0xa5b6147e,
194339         0xd06670a7,0x7afeb648,0x17685275,0xd670333c,0x75f9e8f2,0xa89dd969,
194340         0x37a68ade,0xbb57228d,0x454cb186,0x21a05d5e,0x063dd550,0x4810158f,
194341         0x4cb6caf3,0x92dd4f08,0x7854abe7,0x70c4d852,0x6e729d76,0x845969dc,
194342         0xb1bf40ba,0x5a52f87a } },
194343     /* 109 */
194344     { { 0x09ecacbd,0xed019e91,0x7b89bdea,0x6544023d,0x5707371e,0x7cc51f0b,
194345         0x16c8e217,0x14832b04,0x81259ab5,0xb1aa6682,0x23e361d4,0x6e100f92,
194346         0xe3a95c2a,0xe593eee9,0x16c10e26,0x699b6bbd,0x9473a13f,0xad487873,
194347         0xb274987c,0xf1c14dc5,0x2559e2e9,0x57dc0075,0xc3d47ad2,0x8449849d,
194348         0xdd527793,0x83df278a,0xeefd5b99,0x770e3ec8,0x76bd02a0,0x2ae58446,
194349         0x3e705ffe,0x17f02764 },
194350       { 0x29abea1f,0xdda4010d,0x2407ac4c,0x636b9695,0x0433218b,0x96a60129,
194351         0x163d534a,0xf221fc3b,0xccc20565,0x05ba15be,0x96285577,0x1238e54d,
194352         0x878804d3,0x1b144257,0xa89a9fe4,0x96fbf304,0x4be642b1,0xc8a7f06c,
194353         0x6e2b085e,0xdd1a20e8,0xff4a591d,0x8f7f27c2,0xa4a343b8,0xc17b0753,
194354         0xbb173d4d,0x684b1e88,0x3dc07bbe,0x3accea44,0x4c441d77,0xdb15c88d,
194355         0x53e5957e,0x0ef0309a } },
194356     /* 110 */
194357     { { 0xfa8e5b60,0x4fc25721,0x691c0bb2,0x646938ad,0x0b0a2248,0xe46d4b76,
194358         0x7de16877,0x863f9ac2,0x2721c630,0x503bb6ef,0x0b67fb02,0xf8c199df,
194359         0xe07abd39,0x78c1ed72,0xb32f0dda,0xcf9deb7b,0x6c3c89f3,0xaff726f0,
194360         0x1972225a,0xb7008b2d,0x4f145f5c,0x8f5a6117,0x457c4f37,0x4e0e6f8c,
194361         0x1c453c64,0x8bbdaa44,0xa6e92c80,0x57be326d,0x5d773561,0xa9bc3fd9,
194362         0xbb37b72a,0x3d3b6cc6 },
194363       { 0x9722c880,0x6e6f12cc,0x286b6889,0x3a1b6ae7,0xad2fafec,0xba1cc09b,
194364         0x43bb8bef,0xad64ad7a,0x97c3f4c3,0xa5af6a00,0xc353a91b,0x2afcb0d9,
194365         0x69ccbf6b,0xca13fcab,0xf2abc190,0x699a1391,0x23a247e5,0x2dbd5542,
194366         0x95488d9a,0xe206180f,0x1244cc3c,0xba9e7bff,0x87d3a365,0x29297abe,
194367         0xfa4ca5e2,0x4054fa38,0x67be1b6c,0xb390623d,0x78f41a44,0x1fa67c57,
194368         0xc7b544e7,0x2e946e43 } },
194369     /* 111 */
194370     { { 0xc60934ae,0x2980fddf,0x164206d1,0x2c3e7eff,0x416ed75a,0xf75e7f96,
194371         0x5cd0b2dc,0xfac60cf3,0x1faad87b,0xddc4bece,0x9849e5dd,0x753fa87c,
194372         0x2c1bf1ae,0xc5d516a3,0x14732b4b,0x565dbea8,0xce48696b,0x007ebe3a,
194373         0xcdb97694,0x40ca74d6,0x65e4e7be,0x3f5cd270,0x3aac4ebc,0x74847c01,
194374         0x43d6c3a1,0x6762e034,0x467a076a,0x690d8c95,0x1eda677d,0x768d78d6,
194375         0x0181d8c2,0x0997ce55 },
194376       { 0x965a0b81,0x9297746c,0xe5e12dfa,0x48b58be6,0x715f437f,0x5573b3c4,
194377         0xb565c459,0xe425e907,0x1582797c,0x4f43f512,0x8ea5474f,0xe5dafa6f,
194378         0x13de04ac,0x2aeb8fbe,0xe8a07c83,0xed7f95f0,0x662c09fe,0x3e012a6e,
194379         0xc742cf17,0xbf96e9b8,0xe28a1c45,0x8ea5759a,0x5cf4e2f3,0x475941b4,
194380         0xf901a019,0x7dd3c02d,0x70916b2e,0xe7a4deea,0x2fa9b988,0x50b272b5,
194381         0xd0917fe6,0x96f9f09f } },
194382     /* 112 */
194383     { { 0x2c310a96,0x78e8aac4,0xf7a2a734,0x32a98303,0x23962207,0xc46ca83d,
194384         0xd9541280,0xad131e6e,0x2cabe911,0x5791fc5e,0x841b6c68,0x50cb77eb,
194385         0x3d3c8878,0xaff93dea,0xf1007bce,0x06541f1d,0x55cdf1fd,0x4ee729c2,
194386         0x323e3972,0xe0f71317,0xad4d08c1,0xa2de7a41,0xa35e22bf,0xa9912abf,
194387         0x89b03325,0xa050122b,0x06514d4e,0x8b9e51f4,0x79d3e0ab,0x423c7aad,
194388         0x40b8fea5,0x71998e26 },
194389       { 0xceb6ed78,0x40140fcd,0x18534516,0x653cf377,0xe8d60dcc,0x0450b65a,
194390         0x9dac55f8,0xce6c1a76,0xae05686c,0x8a96a92d,0x12712562,0x2fe44762,
194391         0xa4f39425,0x747bcb50,0xfc531fc2,0xf0ec6ff2,0x10fe9ff0,0xc97c3447,
194392         0x9c792cff,0xfb488783,0x026fb019,0x552c5248,0xd804c290,0x4001a29c,
194393         0x35c8ca73,0x742b5ad8,0x6ee5dfa0,0xc3781f17,0x3dfa4ab1,0xca6b85f0,
194394         0x0b0d32ac,0x8389941a } },
194395     /* 113 */
194396     { { 0xde067dff,0xc0f062a2,0xbcb80162,0xd4f32690,0x0707a2bd,0x98cd990d,
194397         0xfae4a391,0x5afc63b8,0xb32ad814,0x684f1b7b,0xf199dfb1,0xb0a2dce2,
194398         0x48f25848,0x2260e17f,0xc2d5e862,0x7393db00,0x338cf171,0x9e88f854,
194399         0x02acf522,0x00679429,0x6835af3d,0x19157cb8,0xb8a2614c,0x2faa6f92,
194400         0x134ec46c,0x04ff95f5,0xfb7a8135,0xcf00626e,0xb37a4704,0x454b3d05,
194401         0x2694ec25,0x1fbfda31 },
194402       { 0xc8f69c77,0xfdebb657,0xa3df88fa,0x92a8278b,0xc1fb78b4,0x463b5571,
194403         0x11c71a33,0xd2066a1a,0x089958b0,0x10c88143,0xcf9d67a6,0xb975c7e0,
194404         0x73037b8f,0xdaa5d208,0x40bf5861,0x5ee5005d,0x7dba69a9,0x300e6ce7,
194405         0xc962cc74,0x893c3cb3,0x4cf84055,0x0ac98629,0x225c9d70,0x0a7ef63a,
194406         0xb91e47e8,0xfe184869,0x8c2f84be,0x1b9d7deb,0xc0e278bf,0x67788915,
194407         0xc426f19e,0x4f9488ca } },
194408     /* 114 */
194409     { { 0xdd51b8ce,0x610dfcd4,0x36230e80,0x08579278,0x36599562,0xedc7ff1c,
194410         0xe2cae877,0x905ead4b,0xe7967608,0xa1c325d9,0xbd38926c,0x3e39eddd,
194411         0x5f6f0a4e,0xda92c868,0xf47a0fa4,0xe16f800a,0xe5f60aab,0x50b4db5b,
194412         0x983853d3,0x3665412f,0x9b79789c,0x64b62250,0x4e0e72b2,0xea560058,
194413         0xe555c2bb,0xabbd4901,0x17292e11,0x378419a7,0xe174218f,0x6e0b5aaa,
194414         0x8f796b92,0x688e0684 },
194415       { 0x313b8f64,0xcdfef641,0x942c7462,0xaef11b7b,0x5c0d8abd,0x067cfb77,
194416         0xaf4041a9,0x608ea5f0,0x6935210f,0x23d5bd82,0x27917a08,0x5ab904fc,
194417         0x45d22d21,0x85dbb1fe,0x4d36159f,0xc3d5e509,0x1d39b8f2,0xaebb528e,
194418         0xf44acef0,0xdd5ca828,0x20c57a54,0x24209adf,0x78f95f44,0x5742b433,
194419         0xa9337d37,0xd11fa7d9,0xc64cfdb7,0xd66a0c09,0x9bb817ec,0x56e55b8f,
194420         0xe4c41265,0x1723c7e3 } },
194421     /* 115 */
194422     { { 0xdc8b43f3,0x9a6486d8,0x26409e68,0xfc3e0e61,0xd9b46003,0x1889c437,
194423         0x6284ec7b,0x3a850335,0x6a9dbaea,0x5a3665c4,0xe978933c,0x7bf6941d,
194424         0x69341490,0x1ed5a510,0x8cb8002d,0x664a7b7a,0x60ed0a59,0x603f76e4,
194425         0x1f4ebf27,0xc3e06ba3,0xf2c38a7f,0x296ced41,0xcf1db08a,0x2ac18f79,
194426         0xcde7a3b6,0xc919e882,0xdbf68b06,0x15e77d29,0x4e947cb5,0x21978baa,
194427         0x7630993a,0x84bf542b },
194428       { 0xe364f21e,0xc1decda9,0x012e557e,0x0d6cf345,0x588f90e1,0xba246848,
194429         0xe3b104b8,0x9f6dda4b,0xe3aef57a,0x6bf7a346,0xe8327ea9,0x210299fe,
194430         0xda95e6c7,0xaa99f487,0xd2cdf645,0x24ff813e,0x8bd414b8,0xd1dbb2d2,
194431         0xcafa1a61,0x065101af,0x9cdebda4,0x7d9f4b9a,0xe41039e4,0xaf41b395,
194432         0xc50adf42,0xe3e9e6ba,0x341e9e49,0x4f2133ae,0xcb157f23,0x4968c0f3,
194433         0xda068153,0x383f827b } },
194434     /* 116 */
194435     { { 0x6583ff4c,0x2ec46a21,0x4ad709e7,0x4e645a29,0xc04ca12a,0xdc66e9cf,
194436         0x9160a7e5,0x82f128f4,0x569c762e,0xbfb227b1,0xc2edb8e7,0xf80c7963,
194437         0x49a0f688,0xa7dafe06,0x2d14b8cc,0xb7e41754,0x86de40be,0x3a0c5c53,
194438         0x1db79331,0xf0d05286,0xfbfe071b,0xb902ce69,0x210e9903,0x61e46956,
194439         0xf703ebb8,0xfaef874e,0xdd5f78b6,0xf668947e,0x5af5ea3a,0x6fe86547,
194440         0x43f94625,0x3b121f15 },
194441       { 0x659275e9,0x5b26e847,0x6d0fce50,0x47581cfd,0x8aa3f1ef,0x55f5cbfd,
194442         0xe484e60e,0x1e7be315,0xfe9698e4,0xd8f1a20f,0x7ab04784,0x25d46da9,
194443         0x834cdb3e,0xa526db75,0x8d08a009,0x1fd408d9,0x5b5ca816,0xfc004b20,
194444         0x65e4bbe8,0x5b3e3bb3,0x759bb6ef,0xf50cc125,0xc2fac737,0xf05fa817,
194445         0xd273951a,0x9ee102d2,0xfecb3367,0x2a8e540b,0x2a6a515f,0x673446fb,
194446         0x37290c83,0x5505e1d1 } },
194447     /* 117 */
194448     { { 0xd15e68a6,0x0c3014a1,0x64dd35e5,0x6f9f0b26,0x03ad67f9,0x18c3742d,
194449         0xd2c14484,0x74818c0e,0x0d41a3cb,0xc5181169,0xc49f3e9e,0x65c8c83f,
194450         0x2c279386,0x9b260c61,0xced04e9c,0xf6086fae,0xfd7c4758,0xa7b2cceb,
194451         0x90297fd8,0x4b3c3133,0x09701ac8,0xca8264e8,0x508b3762,0x9f976a87,
194452         0x983a8dfe,0x5d582714,0xd9d598e9,0x350d2669,0x0f6fd348,0x85cb89cb,
194453         0xa574317c,0x617d80d4 },
194454       { 0x70022b67,0x4cef267e,0x3768b94a,0x80536bb5,0xd2784462,0x3153a566,
194455         0x38243919,0x49054d44,0x5df78c4a,0x8d11e172,0xd5a1e35a,0x9b252a71,
194456         0x8171e31d,0x07866c80,0x1b38a00e,0x0a8501db,0xce770236,0x2ed932b8,
194457         0x8edaf7d0,0xa2d77609,0xb93006e9,0x3aee5dab,0xbbfeb036,0xfaffc8c4,
194458         0x4e21b38b,0x077b9678,0xdca8e069,0x491fc59f,0x0e938471,0x3f624f55,
194459         0x7cd1780b,0x5156f508 } },
194460     /* 118 */
194461     { { 0x0206e8d0,0x58234e22,0x7f15af32,0xf5f6f5d4,0xd638950f,0xafab7289,
194462         0x7d4495f4,0x66ec4d09,0x68da80a9,0xad890c5d,0x64f8a36b,0xe4aa0920,
194463         0x0f4d5c5f,0x799e257e,0x24495e31,0x44c677ae,0xa5b8e352,0x720387b3,
194464         0x75a287b9,0x703790f4,0xc3c1f2f7,0x54895cc5,0x41a7fa41,0xb8680f9b,
194465         0xb00b008b,0xfcd47458,0xba6473cb,0x149cc838,0xac9be19a,0x78ed5f7a,
194466         0xb33765ba,0x5254599c },
194467       { 0xa21b54c4,0x08739679,0xb6497d9d,0x029ece2a,0xc8488640,0xf14f1a92,
194468         0xe9fa79d9,0xae48dcff,0x46c208db,0x14b911c2,0xdae3f69e,0x5ab0fbf2,
194469         0xd1edb838,0x180ac87e,0x188586bb,0x146fd718,0x5467cbd0,0x210eb654,
194470         0x1667cfee,0xaa239408,0xb73d1a60,0xdb125c1a,0x881c1cbe,0xde685300,
194471         0x37c30232,0xfe34c713,0x6f3c8d18,0xc6c6070e,0xb4af4e83,0x07e365ba,
194472         0xdcf82b45,0x22f0a7ed } },
194473     /* 119 */
194474     { { 0xea7f1b7f,0xe262791f,0xdcff09d4,0x9c3d8c5d,0x39c7dc58,0x86c2a9c3,
194475         0x4276e8c0,0x4dad4017,0xe9fe1d56,0x0a918f59,0x2aa810c9,0xb8d79670,
194476         0x4aa5cdc4,0xeb7a8836,0xe7afa72e,0xfc4c23bb,0x4ac86908,0x4dbb5c9e,
194477         0x6a0c7e6f,0x37e39013,0x49c218d2,0x855d7001,0x94b324a2,0xe475bc67,
194478         0x6287a071,0xc98a8dc6,0x5fb4323c,0x395a299b,0x0c0389e9,0xe186c3ee,
194479         0x16734c46,0x79f81e6f },
194480       { 0x364f3c4e,0x83f2c1f3,0x1367e14b,0x536b2ac5,0x5933e43d,0x44a6dcfc,
194481         0x10d961fe,0x34e59475,0x7e3f2aae,0x08234ece,0xbdea7f25,0xcb92e00a,
194482         0xa791a124,0x1efba4f0,0x1192d53a,0xc2086fd2,0xb51c8af6,0xfec0d0fc,
194483         0xdc0f1b5f,0x48d1b2ca,0x812dbe19,0xb07a388f,0xdedbdd45,0x40873a6a,
194484         0xd702589a,0xbc2a1268,0x17e27b64,0xbbf6e3a8,0x6d386e85,0x73ee5663,
194485         0x9de7c000,0x442ecd37 } },
194486     /* 120 */
194487     { { 0x8a2f90a6,0xb4cd1ae6,0x6f5ad0cc,0xf277d41d,0x401d4b8e,0x6a3828c4,
194488         0xd8376631,0xe817a134,0xf5e1124b,0x142b758d,0xfd6b95e4,0x25fbc69d,
194489         0xd74a9e3e,0xa30c9f5f,0xd89663ce,0x5ac0f163,0x0ce6386d,0x32a9eef7,
194490         0xd8ed5544,0x7a690ea5,0x9889427a,0x5de23ff0,0xeaaced58,0x75ad36a5,
194491         0xd3e18465,0x3514a6c1,0x7f093910,0x3d9162c3,0xe33d56e8,0x5c10add9,
194492         0x06aa691e,0x85176b73 },
194493       { 0x28a21e38,0xa32110fa,0x5773d538,0x97b6379d,0x2d020dc4,0xd3697bbf,
194494         0x961833cd,0x59177593,0xe5fa8516,0x6d7045fa,0x786ab5d2,0x3390f29a,
194495         0xdc4f5b70,0xac0bda30,0xdcc615c6,0xcca0240a,0xc5146d91,0x8e1f1702,
194496         0xa72cef87,0xceb472d0,0x0b669ba1,0x84840708,0x7e61aa0a,0x79b08f9d,
194497         0x4669560b,0x388160be,0x948eb71e,0x23935c2d,0x9431590c,0xd7fd83c0,
194498         0x6e5768b3,0x8ab154bb } },
194499     /* 121 */
194500     { { 0x353c4a96,0x28686003,0x905cd835,0x4e5c60e8,0x8f66f8cc,0xbd591364,
194501         0x9faccf9e,0xb6b80b98,0xe32639e5,0xbc1c1fae,0x278aadeb,0x2f6396d2,
194502         0x1898202d,0x00a796d0,0x3a474835,0x18ab548f,0xb31b0e3e,0xacd056c3,
194503         0x0164512d,0x15ba68dd,0x4b03f3bc,0x203836d9,0xd8f206c5,0xd64eca6b,
194504         0x9f1779b6,0x931a361e,0x52ab34a8,0xd82690fc,0x92922e22,0x342bb8e0,
194505         0xe00b02a9,0x1bfcdd84 },
194506       { 0x75a365d9,0x310b9a43,0x08d8fb03,0xd4ade15e,0xd742df83,0x9c9753d7,
194507         0xde318742,0xcf7309d4,0x3360ace0,0x1228e212,0xf7669643,0x1043d238,
194508         0xf90f5a53,0xfc2adbed,0x7b5f9397,0x41d64cb7,0xc446d010,0x5200b30a,
194509         0x231720fe,0xc3c8642d,0xb9aa2075,0xfcc0122d,0x041eae47,0x856e3b12,
194510         0x68c876a4,0x45864455,0x233606b1,0x1a1c7842,0x227757bf,0x9b766d1f,
194511         0xf7b9d4f1,0x25b78a3b } },
194512     /* 122 */
194513     { { 0x156707ce,0x90835718,0x4314f90a,0x9bdc2398,0x8be57dbd,0x017c885a,
194514         0xad63a4b8,0xd4bba225,0x15aacffd,0x5ce71b86,0x72954722,0x5f266475,
194515         0x4f0ad3dd,0x0a80f1f7,0xfc352ed7,0x010538a3,0x4203c6ca,0xf8a64045,
194516         0x330c73b4,0x2b2c7a88,0x02dcac1b,0xb3433ee6,0xed2b17c7,0x2e0499cf,
194517         0xbd6329c7,0x9f8681a4,0x36fadc37,0x38979946,0x92b7895b,0xdc5650c8,
194518         0x65a51cf0,0x70ab9570 },
194519       { 0x7b585d93,0x46778ec4,0xa633fe4e,0xca6d3610,0x4ea0311a,0x21da154e,
194520         0xbd64002f,0xaf22190b,0xd91cb7a9,0x9e633ac7,0xee6837d7,0xed13c31f,
194521         0x1616ee8a,0xda4a07d7,0x3afcd616,0xd78a2732,0xba14d694,0xc06696e5,
194522         0x4df58420,0x733754d7,0x2778e3c9,0xe85e504e,0x55b5a5c2,0x3055aa0c,
194523         0x8a3acb5c,0x313df538,0x2a088eda,0x5896acb5,0x84c85dde,0xfc8842a0,
194524         0x51dde6be,0x5fec9f79 } },
194525     /* 123 */
194526     { { 0xfe519f99,0x5ebc2c7c,0xe5410353,0xe396bd80,0x8a3988f3,0xaded9402,
194527         0xd601bda1,0x1c03b735,0x14ce64ac,0xfd302036,0x01240290,0x5837ebe9,
194528         0xa554097d,0xcaaea1a3,0xb0b88139,0xdce73d25,0xecb090b9,0x35ed412b,
194529         0xd63dab3c,0x99029ff7,0x062db071,0x555437d9,0x42a4c11d,0x277d2f56,
194530         0x24fc9109,0x477fa645,0x2799254d,0x7b12e9b7,0xd84c618c,0x7ad2ae22,
194531         0xce8ed195,0x0a8d5663 },
194532       { 0x0a21fde1,0x43ac5163,0x6903d849,0xcfcf5dd6,0x5fdd6281,0x6d2499ee,
194533         0x77a49a34,0x4dedc6f0,0x2875c06f,0x46bda2c0,0x347b8046,0xd0e0e0f6,
194534         0x5e67836f,0x1058169b,0xde8a8042,0xc961912a,0xa93b3d32,0xdf3fea0a,
194535         0x0c576bc5,0x9f138edb,0xd8d37e47,0x7971ad6e,0xcce5e7cb,0xeab85739,
194536         0x1d202b40,0x88a4b434,0xe3a1fd26,0x5d842557,0xb3a86f91,0x872fabd5,
194537         0x6aa4629f,0x95b93493 } },
194538     /* 124 */
194539     { { 0x99f951de,0x9998a701,0xf058db45,0x8fade596,0xf3d03dd3,0x4d479c1e,
194540         0x33b141d3,0x6e928d5d,0xacfe8a40,0x9a465800,0xc1cefa3d,0xd108ad2f,
194541         0xe013726e,0x64b96921,0x8e83bb9f,0xb9b6a6b6,0x1242e544,0x29f1e6dc,
194542         0x2f65966b,0xd3f8f676,0x5e105b41,0xa34dd096,0x16011e1c,0xd4e9139a,
194543         0x2515541b,0xeea4dc68,0xc822166d,0x6f8030ac,0x31d16124,0xbdc7ae1d,
194544         0x621afa7d,0x2e25ef51 },
194545       { 0xdd8e7357,0x2533cf8f,0xeaceddb8,0x333ba218,0x0784d2ac,0x68e3e31d,
194546         0xf2804ae2,0x1c927f36,0x77e7ad7e,0x01433d22,0x587f78a0,0x0b401cf0,
194547         0xaa0027ae,0x9dfcf036,0x1d9a46b5,0xc9e46c8b,0x1f288d32,0xaa6de486,
194548         0x1b8a043d,0xdd56da2f,0xf2d0bb56,0x346230e5,0x19defb56,0x19f0b6e4,
194549         0x21d2c874,0x55ec37cd,0xb70e45b3,0x3dbf0397,0xac7ce852,0xf0862a8d,
194550         0xe141f3d6,0x87979ea7 } },
194551     /* 125 */
194552     { { 0x7f1c747f,0x9b7e7b3f,0xc6e63369,0x151a4c1d,0xb372dba0,0x4273ff70,
194553         0xd3ee54fe,0xca6d2234,0xd33cae0f,0x12fc8e0c,0x5dd6f10c,0x27328538,
194554         0xf01a9cf9,0xc86f3fbd,0xe36cae91,0x5322677f,0x2fefea44,0x39a70033,
194555         0xce8af217,0x2c9ca328,0xf6a731f4,0xc0256776,0x66a96813,0xc687b3df,
194556         0x8db2eda8,0x194aab12,0xeec4febd,0xde30dc5a,0x979241b2,0xc052236a,
194557         0xc23d4c16,0x3ec98802 },
194558       { 0x4072f74d,0x0f9e760c,0xab594059,0xe78eb0de,0xc9b009c2,0xdb3dea40,
194559         0x38b59ae5,0x47e875f0,0x2b4daa06,0xf40eb436,0x090f3788,0x9a6a4f92,
194560         0xedbfaf8b,0xefebe9af,0x9867e256,0xf87f96a5,0x75ab6aeb,0x1e6fed23,
194561         0x3fdb13cb,0x17f2782a,0x70fa2621,0x5102c71e,0xfd4c0dbe,0x5d2b06ec,
194562         0x30347297,0x537cc268,0x2b67e780,0x8dbf5e2b,0xba25da32,0x2f633f3a,
194563         0xefaec914,0x3e9315e8 } },
194564     /* 126 */
194565     { { 0x239a9ea9,0x9255cfa5,0x0be33a62,0x20f3c690,0x9cb642bd,0x759eeb4b,
194566         0x00bae718,0x3316c546,0xf3410f84,0x874a76d5,0x90f129b6,0x123b502e,
194567         0x12851f1c,0xadc8f9a8,0x1b62408c,0xf57b764a,0x1a80777b,0x116ec01f,
194568         0x1f0ddc5c,0x746ecef2,0xe5a6a5a7,0x3c49d47c,0x06e955ba,0x1e15dbe7,
194569         0xb45d79b0,0x629c0c79,0x778d1087,0x11278308,0x8c6a22d7,0x22585dc7,
194570         0x0a682791,0x2ed02a0d },
194571       { 0x4daa2682,0x53043416,0x01359625,0x0e26d32b,0xbd867097,0x449c834a,
194572         0xee77ae2e,0x11a19d2b,0x3af6c169,0x39bd529a,0x5cd61054,0x36cca5c0,
194573         0xdc6c0fe1,0x6370a59b,0xb93d5135,0xca420d27,0x554c451a,0xd8730d45,
194574         0x96cdebf2,0xebd258c9,0xa50f9a05,0x0cb1b990,0x7b0f0151,0x69a8c97a,
194575         0x11d217e1,0x2cc36d34,0x752f75e8,0xf117688a,0xa09b2a61,0x1db01394,
194576         0xa9efd7dd,0x14627844 } },
194577     /* 127 */
194578     { { 0x232803cf,0x6bca3aed,0x9a96ff34,0xc1e4398b,0x74ab788b,0xcaf6757f,
194579         0x7e68c04d,0xc3a53e00,0x5cb7cd20,0x5f969c19,0xdc068bca,0xf28b65a6,
194580         0x1d863032,0xe3ca01d3,0x87808e14,0x9b733b81,0xefe618be,0xb5d704d9,
194581         0xb01b946d,0x276f3542,0xfbedddbf,0xe057e19e,0x903275ce,0x7d182f2b,
194582         0x880f7bc6,0x3cdc5f77,0x78476c14,0xd6f03d3f,0xa9ba5072,0x035f5557,
194583         0xb4029628,0x7acb57b6 },
194584       { 0x44e6b07c,0xd2413569,0xe1c7345d,0x451c4cc9,0xe273b9fb,0x407444d8,
194585         0xb88e34fc,0xfe496079,0xf152776d,0x77d184cf,0xc742299c,0x6d1033b9,
194586         0x77bf2897,0x29a0a684,0xee8f0420,0x59ffdf10,0x44bb56d6,0x4e17146c,
194587         0xfb9ae855,0x831d06c2,0xd93e7cd5,0xb2cb82db,0x3c96b607,0x83381c46,
194588         0x7549e2a8,0x06aed251,0x774a21d4,0xef97891c,0x8675fbdd,0xae9807c7,
194589         0x6363516c,0x6a5a05b9 } },
194590     /* 128 */
194591     { { 0x6a8f4f33,0x92e71ea6,0x4dea8f4a,0xf2fc6fc6,0xfee88461,0xd356252c,
194592         0x08954d08,0x59b0a83e,0x468ab766,0x5bd68c23,0x900f8d04,0x40281357,
194593         0x52b867ae,0x181c19c0,0x18764c41,0x986a5169,0x13575d24,0xcb01dfae,
194594         0x593677b7,0x17269ae5,0x46dc9b19,0xf6d17025,0xc40097c8,0x8de68499,
194595         0x259c407b,0x76df0032,0x17d29d8b,0x4091aad9,0x4a7ab5f6,0xa7f46d21,
194596         0x70ece48c,0x688054b4 },
194597       { 0x51a5b86c,0xf0d168aa,0x95777247,0x2437e4d8,0xf1720329,0xae844076,
194598         0x9647a54e,0x0a7ac87d,0x0405622c,0x1e597a4b,0xf0a79f2f,0xedefe5c6,
194599         0x4d55156d,0xaf3ef0c2,0xef047cf6,0x917fb04e,0x54b62137,0x3792799f,
194600         0x314be0b8,0x875ea32f,0x0c466b0c,0xe157c65b,0x7e218978,0xd28c90ce,
194601         0xcde587af,0xb90fc3ba,0x8b877bed,0xdd32d71c,0xca8e10cd,0x3b432200,
194602         0xd94f6e53,0x0021f419 } },
194603     /* 129 */
194604     { { 0x43519d26,0x2191122c,0x40a51845,0xbdafac1d,0x548bb89f,0xcc6f71e9,
194605         0x16844bf9,0x9ef3375c,0x178e8d55,0xe7789f79,0x1f8be1c5,0x04f599b6,
194606         0x2cbbde40,0x8088c99a,0x893206c9,0x8939a260,0xfcd30851,0xa1ae4bff,
194607         0xe08feafe,0x664cb3fe,0xff14aabc,0x61f38099,0x2a841ef9,0x0d8394cc,
194608         0x17f01db6,0x75fad8ad,0x6debb773,0x6fc34576,0xa4252512,0x1e716b05,
194609         0x29e1ed9f,0x79855880 },
194610       { 0x95106473,0xa2cb3aaa,0x5a61da04,0x95fafa41,0x539563c0,0xfd3c9362,
194611         0x95312b87,0xbaa48091,0xbf885c76,0x6c7e7582,0x230c78d5,0x70f6dab6,
194612         0x7747440d,0x8ce3051c,0xffdb6186,0x6dbebd14,0x190e4096,0xb0e041fa,
194613         0x6ee62e2a,0xba10c466,0x74f333d6,0x93d57e2a,0xfe7b9b66,0x006aadc4,
194614         0x06d2837d,0xfaf72f6c,0x910741ea,0x318cc5e6,0x65692477,0x9c502609,
194615         0x1d0fb08d,0x95d823c3 } },
194616     /* 130 */
194617     { { 0x140528a5,0x6aeebd86,0x53979bc8,0xf268c2ba,0x4ec144ab,0xb1bc9b8a,
194618         0x82a7d7ed,0x1efabb0d,0x4e0118d8,0xf12c70d1,0xa1c1558e,0x31607168,
194619         0xe4b7e73e,0x33e428b7,0x83aec9dd,0x63176637,0xe12ac35c,0x5172ffbe,
194620         0xbc17b2a4,0x37df0bfb,0x741f812a,0x4212f870,0xe2888f9c,0x3dcecbdb,
194621         0x756ca55d,0xa9dc15aa,0xb9028e41,0xf31918ec,0x6aeadb03,0x7ede0285,
194622         0x78654f54,0x0e2708d5 },
194623       { 0xcde20f88,0x2270cc53,0x5f5b1039,0x9338272c,0x5dcb1dbf,0x5042e19e,
194624         0xb72d74c1,0x4b3de219,0x2aaaaa55,0x16c49a8b,0xbba86ba6,0x008443e5,
194625         0x20cf1695,0xee6bcd72,0xa89abd11,0x59ffac6b,0xf115639d,0x2831217b,
194626         0xf34cba52,0xe4d28af2,0x0727a906,0xf27f03e7,0x69017766,0x6842c79f,
194627         0x7a81123e,0xcb3469bd,0xa42973b8,0x48c0f346,0x23990dbd,0xfc5784a6,
194628         0xfb299678,0x0d3dab3b } },
194629     /* 131 */
194630     { { 0xce29c3cc,0x8f8376e6,0xf016cbc6,0xcb0507ec,0x5e394ce1,0xdebff996,
194631         0x73c50d41,0x24fc526f,0x2d16ce3d,0x4edd5a54,0x91c13141,0xbb37bdd9,
194632         0xe33a8606,0xe3442ef2,0xc0629da8,0x2ae90337,0x592ab331,0x57faec64,
194633         0xd82b857b,0x1a938997,0xa3373176,0xad6c8cb9,0x9086751f,0x82595de2,
194634         0x18c17196,0xa81e97fb,0xbf697357,0xe4f48a13,0x5cb89f69,0xa1387c2e,
194635         0x5874b426,0x530b4eeb },
194636       { 0xbab7b5ae,0xe9f275a1,0x03a57bf4,0xbb69dc4d,0xa45c505b,0xc974dc4a,
194637         0x416ac402,0x726369f3,0xaed985dc,0x735e4e78,0xcdd446a1,0x0548d879,
194638         0x9e16b02a,0x84ceb069,0x789b11a6,0xf73f6fa4,0xb2a4e784,0x6aa0c41f,
194639         0x93a9b697,0xb1f76902,0xf03a8ab2,0x814cce00,0x844d66c1,0x64cb255b,
194640         0x30952201,0xb794e7d6,0x3da32271,0xe052d4e4,0x08b6a4d9,0x5278b2e7,
194641         0x80c6577f,0x90942552 } },
194642     /* 132 */
194643     { { 0x0d5b4c2f,0xd269a14d,0x5c8a649c,0x2b8fc59b,0xb0e37d4a,0x95becb3a,
194644         0x9111037e,0xfda1a768,0x94e35322,0x5810e05a,0xa178fafc,0xa24dcc12,
194645         0x8e3dce62,0x5c2c63b2,0x9452c444,0x995c3f17,0x42d45161,0x35330ec3,
194646         0xb4ef8129,0xa025a60a,0x8bae9c13,0x85493252,0xe2e3caf8,0x25d1a606,
194647         0x3649bf47,0xd44091ab,0x704ec5f1,0xc7d0afbf,0xbd8b3333,0x27bd1d62,
194648         0xcfe616f5,0x50570111 },
194649       { 0xf534356b,0xd0084ace,0x4b4b0fbc,0x9df1de05,0xcee04dc1,0x021afe05,
194650         0x361b78e1,0x64bde688,0xef78d38b,0xa324fcc7,0xeb0a5e4e,0xfeb372ce,
194651         0x65811996,0xef04fcb3,0x5eb0ab4e,0x7dce5d50,0x238c586e,0x1e29b588,
194652         0xbcd80037,0xde5e3197,0x4806b9cf,0x8bf5e451,0xd18e67ab,0x4330968b,
194653         0xf9f63fad,0x26a7d04e,0xb5c18bb4,0xa1c7f123,0x25dce22c,0x485b8482,
194654         0xd540e79f,0x8ff0b36f } },
194655     /* 133 */
194656     { { 0x3ff42cff,0x99f2e2f4,0x1c35317c,0xa3c19f9d,0xaba1b545,0xdb749392,
194657         0x4afa9a32,0x84232b05,0xd7dcd436,0x0b855d46,0x45cf9915,0x8ac35e20,
194658         0xf001a218,0xd7cf22c7,0xed408305,0x057d35ae,0x553ccfcd,0x25a4a519,
194659         0x93e2b939,0x5e565793,0x3422ec27,0xa20332b0,0x3ac53958,0x9b09005e,
194660         0x79e9b163,0x628051a3,0xfc6618d6,0xb4a0dc09,0x6748e7af,0x9e0e857f,
194661         0xc577d63e,0x71b28eee },
194662       { 0x99726bf8,0x4942b0cd,0x1c208f3c,0x1290a3b9,0xb0598eaa,0xfd7290e7,
194663         0xa25a9128,0xc6a7791f,0xc037d7da,0x2d33db24,0x70e2837b,0xc21efeb0,
194664         0xe3dae2a0,0xbf70d96e,0x85076027,0x43ed8191,0x4d4ad7e3,0x4aeb0aa8,
194665         0xe8c5b74c,0xbc75101f,0xad26ebdd,0xdbfb2a6e,0x6b78aa4e,0xba812068,
194666         0xe1159848,0xc94aa8f2,0x3eba5c4e,0x0d10d9db,0x6318295a,0xce7fec47,
194667         0x330d925a,0x7294711a } },
194668     /* 134 */
194669     { { 0x32bbd495,0xfce45904,0xbe54973f,0x330f4dd1,0x5d9c3f4e,0x006bee1d,
194670         0x59ba7204,0x40ee6078,0x42c2c768,0xc194fd3f,0xe9fe88be,0xa0e76b12,
194671         0xec2b0210,0x17cddddb,0x00811ec7,0x689d436b,0x284be9e4,0xa6a6ba37,
194672         0x007d4114,0xabc395b2,0x0f11e744,0xf8cdf9f3,0xe9396402,0xc5febec8,
194673         0xeeb46285,0x8a751743,0xc6e0d137,0x99bf8782,0xbeb292e3,0x3965e170,
194674         0x5801fd5f,0x001c39d8 },
194675       { 0xda4a0912,0xf4805cb9,0x4410bca4,0xd27cb76a,0xec71d65b,0xef3dcb8e,
194676         0x4816849a,0x780fbb2b,0xa8b24635,0xef6a7026,0x12c44e68,0x15625c88,
194677         0x4d7a74a8,0x624c232c,0x4b1631e4,0x81a77037,0xdb917c2e,0x04e4f7f1,
194678         0x1f61ed95,0x1d0465fd,0xcbde6e3d,0xb1048049,0xd7131fcf,0x637ce0c1,
194679         0x8ada4715,0x22e4dbc2,0xace99726,0xf7530c5c,0xee287450,0xa0160dcc,
194680         0xbb91af13,0x9132e670 } },
194681     /* 135 */
194682     { { 0x7996099d,0x8057efe2,0xa06e608c,0xb72344db,0xd0958588,0xeb4a8740,
194683         0x79e5aee9,0xe53daf06,0x908a2fad,0xc9560a9a,0x107e706a,0x7f4be131,
194684         0x2830246a,0x6d5f3d9b,0x27cca3e6,0xa5f8e8da,0x4c28f292,0xeb51dca6,
194685         0xf31dfd78,0x4cfa310e,0x2ca073e5,0x92e0c7c2,0xa40da683,0x102f1694,
194686         0x750d38fc,0x16bb07cc,0xbadae035,0x703e83e2,0xb4d3c9dd,0xea93c066,
194687         0x79940ed1,0x7d0b03e5 },
194688       { 0x4dd94c63,0x5fe7ea30,0x738b0b3a,0x57ef01c5,0xa14e6b4b,0x9534a78c,
194689         0xa5353276,0x07622cde,0x7c22d006,0xaf696a07,0x7d46b209,0x733c1886,
194690         0x626c2b4a,0x9654ccbb,0xa84f3c4c,0xa098d3a1,0x2d734b74,0x3596f9ed,
194691         0x5d551c90,0xdfd3021a,0x1ec5123f,0xe2ba7d2f,0xb2c1aa39,0xf9726925,
194692         0xf8eb2927,0xd2e75d0e,0x19192a6f,0xfaba712e,0x9b83e50e,0xa606b43a,
194693         0xdab5de60,0x31b1782f } },
194694     /* 136 */
194695     { { 0x4034db92,0x878dba45,0x8f34dc4d,0xa3977901,0xdf754c33,0x8d004f2e,
194696         0xcd563a88,0xeaa5954a,0xbb5ffad1,0xa29d6c89,0xb0d8bdb8,0xa8adf655,
194697         0x8cdbdb47,0xf7fb842d,0x80d3205b,0xb72e3a03,0x7cac7ca9,0xc335b0b2,
194698         0xd8a5475d,0xffc60bcb,0xeba4d25f,0x736f7719,0x0c50fca6,0x3d901c38,
194699         0x80c01900,0x1fdacf7b,0x5681f84d,0x75cf658f,0x5cefbbc1,0x57a7e634,
194700         0x3e07ed1f,0x6fc0fbe5 },
194701       { 0xb81b0e5f,0x496d116b,0x2ac853b8,0xd82dd2a5,0x327387f0,0x357e22d4,
194702         0xba912c59,0x3e332a84,0x49d5dcc1,0x8b71c643,0x438d85d3,0x0c982ee9,
194703         0xbf7fcd4e,0x90b9553c,0x38fed5e3,0x2cb39bbc,0x5ac42903,0xa2c67c9c,
194704         0xbf07da55,0xebf21217,0xa0b9e4ee,0x55ac05ad,0x8ee9e0c6,0x10bb12c2,
194705         0x48bb6e3f,0x5cf3aee5,0x8b046e91,0x4ae7269c,0xaa0e553f,0xcb266012,
194706         0xa94c8fc8,0x701935a1 } },
194707     /* 137 */
194708     { { 0xa4626dea,0xde58d41d,0x15b9039f,0x25ef66ca,0x3164e65b,0x99a810a4,
194709         0x748cfccf,0x9fe6daad,0x2f142fa9,0x7ab9a6bd,0x5d471796,0xa4cba168,
194710         0x6bc3a39b,0x12d30b36,0x8bf45076,0x1f46a5dc,0x1421ac0e,0xb868e529,
194711         0x59bba1c4,0x7a686206,0xda698b90,0x2b4b552e,0xe5453707,0x5039dcd4,
194712         0x9e90165f,0x42a07a9e,0xd7d45dfc,0xa838fff3,0x3b5ceb30,0x41991e5a,
194713         0x969ca600,0x6c961ec8 },
194714       { 0xc4e7eb46,0x703bdc1b,0x596c7b48,0xd6bac557,0x66afd74d,0x4f9917cd,
194715         0x656ce6f3,0x56355105,0x32497175,0x3d1fb50c,0x63effb2d,0xfda6783e,
194716         0xeefaa2bd,0xbd79f1f3,0x17af9ef7,0xa4efbe54,0x5a55b7a4,0x6cef6462,
194717         0x1a713304,0x116f3238,0xb95625a3,0xdb2a2a7f,0x0b027e96,0x6a0aa43a,
194718         0x4832b3bc,0x458fe5d2,0x5adfaac0,0x523418df,0xc49e7f9a,0xc05a89cb,
194719         0x69e24b53,0x830883d8 } },
194720     /* 138 */
194721     { { 0x02557389,0x959b1c62,0xadefc0bc,0x5fe5ce97,0x8330f383,0x893bbe7f,
194722         0x16cfb81e,0x27e0c6af,0xd04428fd,0x6f64e65b,0xb79e6182,0x53de9245,
194723         0x487e11ca,0x08a313c1,0x445bce93,0x65cec3b9,0xd67ed49e,0x33bc0314,
194724         0x30782352,0x69f36b24,0x93ad31d2,0xd78e5daf,0xc780890c,0xf2682b70,
194725         0x9e45efe9,0x7015c34f,0xe6cbafea,0x135d4ba4,0x7e3fcc6c,0x43a378a4,
194726         0x96638f8c,0x2376f97f },
194727       { 0xae575b99,0x0a6e1ec0,0x81b970dc,0x7e14cb4f,0xd3a73947,0xf00a3824,
194728         0xfb235a9d,0x0b4b9c81,0x5bf62944,0x8d15115f,0x1e165d7a,0xcfd35b43,
194729         0xb2ee3e3b,0x5d12fea2,0xf5182e7b,0x629984a6,0xc365d08e,0x4e43e2f3,
194730         0x30f36e72,0x99327091,0xfd345401,0x698b4a00,0xbaf96dce,0x23c4fd0e,
194731         0x23675554,0xa60ba0ae,0xb0325784,0x51bdac2d,0x215464a1,0x8ab4190a,
194732         0x6bf10296,0x8c461661 } },
194733     /* 139 */
194734     { { 0x2d1f36a5,0xeffca258,0x894c5f2d,0x0eded2b2,0x43ced84f,0x35a5cdb8,
194735         0xdb0e3b9b,0x290f8982,0x0719a112,0xcce0eaf0,0x39a362d6,0xd0e657e4,
194736         0x62697e47,0x5516a55d,0x8e636514,0x269e1f77,0xd50269bc,0x5e3dedcb,
194737         0x441c57c5,0xecec2300,0xc705578d,0xdb83f31c,0x1e489eab,0x1bdefb73,
194738         0x395fcdb4,0x20b678cf,0xff9db001,0x908cf91c,0x55f52cc8,0xcbebc6f4,
194739         0xb4c61162,0x155ea622 },
194740       { 0x876fa42e,0x94be2f1f,0x7fadeee7,0xab5e8749,0x38c865af,0x692e70f5,
194741         0xdf8059b0,0x16e99b84,0x8b5a7ac9,0x0ceb606e,0x2d463d2b,0xced23357,
194742         0x2a9a09a0,0x2d0f2623,0x3861fbdf,0x2529998c,0xc1be310b,0x711888a7,
194743         0x0d8aade3,0x9b1229c5,0x3b13533d,0xdbcf9b78,0xff029708,0x3ca746f8,
194744         0xda83ef88,0xa5a013a1,0x4ab28444,0x8e904d18,0xbcbd4aba,0x2fe84b3d,
194745         0x259058c3,0x8f570f24 } },
194746     /* 140 */
194747     { { 0x2ca9c508,0xdeb66c8a,0x69d6b780,0x2dc5bec2,0x88ead600,0x16d61266,
194748         0x49d72614,0x61841b97,0xce472e6f,0x41e40e6c,0x1fa7a876,0xada24264,
194749         0xcc3997a0,0x45b9fd33,0x7c15dcf4,0xb25e8fa9,0x12e9629d,0x0124ceb2,
194750         0x7db3d956,0x3a8c72c6,0x7c1a7844,0x8e2ded2b,0x6dd027ff,0x94ab09c6,
194751         0x7e7a2bc6,0xf89a057d,0xcf70c763,0xad8bf226,0xc8a26212,0x4cb268e7,
194752         0xb2c44c1d,0x3d171e87 },
194753       { 0x8ce49820,0x382ac16e,0xc0c44dc9,0x24ee45e2,0x73e858c4,0x0ec67912,
194754         0x46327cf9,0x918cb25c,0xc6159c1f,0x43e3876b,0x37545cb3,0xb6b6e0e0,
194755         0x5d12347e,0x64b839ab,0xa300d541,0x72e09274,0x881c1169,0x26ab28e6,
194756         0xeb75a843,0x4a580fff,0x359120df,0x0a5802ca,0x3209f4a3,0x7fee82d0,
194757         0x8e6a9380,0xb518016b,0xc2ee11ca,0xb99c6c70,0xab9d4ec7,0x16105af1,
194758         0x34cd9004,0x234e98f8 } },
194759     /* 141 */
194760     { { 0x14db9cda,0xff435208,0x96adec90,0x99cfdc47,0xaf458b6d,0x843aaa6f,
194761         0x743eaa31,0x3f1f7415,0x61735d81,0x915e192e,0x0ac595d5,0x3441a22d,
194762         0xc044bc8d,0x704bbf67,0xbe23a236,0x2f960471,0x15d1d557,0xcc326388,
194763         0x76b1dd94,0x9410230b,0x0c1c8a67,0xf2e5439f,0x833c910d,0x56b141ac,
194764         0x865b84df,0x467c999f,0x21f02b7b,0x1b0251fa,0x96216950,0xde5b5260,
194765         0xce3a1e93,0x6a2130e3 },
194766       { 0x4b3ca1a7,0xd21b67a0,0x00c0ce80,0xaf42ed53,0x932cf07a,0x22ccd368,
194767         0x5c25c35a,0x36523a81,0x8dd04d06,0xecdd3958,0xb2f93a3b,0x73da3502,
194768         0xd5e5b530,0x4c5e0c3c,0x13268777,0xef9f5486,0x1e742292,0xed87fefc,
194769         0xa24e5ede,0x6d9ac29e,0x33849f1a,0x08abc9f0,0x40f23905,0xb09b2292,
194770         0x7f934353,0x6791072c,0xe6aeb550,0x102a6381,0x96feb870,0x3ee07409,
194771         0x9c4d2830,0x34f06faa } },
194772     /* 142 */
194773     { { 0x2348f005,0x869dc79f,0xdf4920b1,0x9b5c5d71,0x6dee64a4,0xfd1b57ca,
194774         0xe82a4fb4,0x21b7f734,0xb9578366,0x637cb834,0x7d287d96,0xc934101b,
194775         0x0392ecab,0x1590f8ac,0x7f75f4e3,0x280dc373,0x6a61ac62,0x8b36f50f,
194776         0xa65568da,0x74f58304,0xd930870a,0x80d792a9,0xfc8895cc,0x6d17b192,
194777         0x4914939f,0x498392fa,0xd41d5b9e,0xaf36027d,0x5caa82b5,0x452d79e2,
194778         0xf4115d1a,0x764d47b1 },
194779       { 0xa2ee8b9c,0x5df22303,0x85dfcd48,0x1b9f72d3,0x10813a37,0x6b42b983,
194780         0x3de741f5,0xe28c523b,0xf303bb5b,0x0857625a,0xac9bf9af,0x926f299a,
194781         0x0d445b34,0x21beac08,0xd6ba2c0e,0x6a523a02,0x7fce2864,0xe302a1b1,
194782         0xe300c1ea,0x4516a235,0x7b4a9311,0x4543736a,0xc0cc89f7,0xd3c0b9e8,
194783         0x40ed88de,0x0481904f,0x3cb7fc70,0x4f269b56,0x321b9738,0x09a1d53a,
194784         0x230a3810,0x1c0dd9c3 } },
194785     /* 143 */
194786     { { 0xc46a7d9a,0xffaa1f67,0xbedf91cc,0x64743334,0x47a42f2e,0x45833a74,
194787         0x241ffaa9,0x67980051,0x335efe6b,0x70979a84,0xf08b2403,0x5f0613f5,
194788         0x64f211dc,0x6bb22fcd,0xa0572cfc,0xe1b8b2a3,0x7950a14a,0x19e0eb41,
194789         0x3eb6cd4c,0xe634bb29,0x470a25ff,0x31a04b25,0xa3d15a0a,0xa41f7ac9,
194790         0xbf2fede9,0xefed85ec,0x81b94a00,0x1f581f5f,0x9ef4a15c,0xaa3996b0,
194791         0xb06041bc,0x52d8be39 },
194792       { 0xfd631a2f,0xbd1536f6,0xb351a8dc,0x91fae7f0,0x9b126212,0xd1a590c7,
194793         0x2bd0f435,0x52d4875f,0x92b0ea70,0x9aedb6d3,0xb83ab89e,0x0bd0abdc,
194794         0x89fe192c,0x827a1062,0x102a0bda,0x6566a960,0xce036814,0xda083037,
194795         0x58639405,0x30bed79f,0xdbca8df9,0x972019b6,0xefdaa3f5,0x89201286,
194796         0x5236b892,0xb337b996,0x28fc2e73,0x11d3e38e,0x880e8da3,0x70787f41,
194797         0xdae4a45d,0x6cff6367 } },
194798     /* 144 */
194799     { { 0xf89a8bb4,0xbd3d0433,0x93b98f71,0x42144c33,0x03470a2d,0x82b616c8,
194800         0xe5da089e,0x98fcc757,0x7bf5fda6,0x542354ef,0x9ebd34cc,0x1885c253,
194801         0xbec5dd0d,0x2e20b285,0x782a1bca,0xe71bbbe1,0x9b854ef0,0x959ded30,
194802         0x8997fa6a,0x17249979,0xd81f3c45,0x50cf8fa8,0x60c11152,0xa9a3b517,
194803         0xecf845ea,0xc9b0ef7d,0xb9fed11b,0xc9339e23,0x28256080,0xc93e9c5c,
194804         0x613ec1e7,0x1d2c8217 },
194805       { 0x987cfc93,0x7381347d,0xf187f810,0x047603bb,0x1250ca31,0x3fa6bc9d,
194806         0xbb055bf3,0x480091e0,0x3a3af87c,0xbdf95f1a,0x140540ab,0xe2687770,
194807         0xd7fe045b,0x998df730,0xb723bc2d,0xb398135f,0x15ebec46,0xac230f8c,
194808         0x5f5561c0,0xe08e1830,0xda60a47f,0x7c0fbf4c,0xe16d4bfc,0x06e95c24,
194809         0x74617e92,0x74163495,0x4ae0c20e,0x39719869,0x2131e2b6,0xfe269312,
194810         0x0a537722,0x25486e36 } },
194811     /* 145 */
194812     { { 0x53572806,0x618795ca,0x656968e1,0xb2c89449,0x3fb323ae,0x149c2c97,
194813         0x409bc7d6,0xfb15de26,0xc79121b3,0xa90cda72,0x204cabbb,0x6d2fa14e,
194814         0x91604125,0xcbcda6f7,0xb435f947,0x25086261,0xc282eb10,0xdb686c38,
194815         0xf1a791cb,0x51016d62,0x61a2266c,0x6b1c7ed1,0x271d74a6,0x26780666,
194816         0x824287a4,0xb5ffeda1,0xbbe4f0f3,0xcbe503ff,0xb9482a74,0xd7f7f0be,
194817         0x088493f1,0x751b2358 },
194818       { 0xe9c9be68,0xd597b9d6,0x67d10c6c,0x1794b5c4,0x7762b2f4,0xa88cdc3d,
194819         0xa1b44e11,0x6d94a63a,0xaaa8eca8,0xfb0bbbb9,0xc963d87f,0xf4b0f2d0,
194820         0x5dc7075d,0xb753062c,0x49933989,0xfed726ac,0x57f9ccde,0x5da60638,
194821         0x75f8c766,0x221c392a,0x5dc672ca,0xcd264d95,0xb66ecc8d,0x7004ff22,
194822         0x18a458ba,0xfb1aa9ae,0x8babd653,0xea9644df,0x2ba0de7c,0xa9378e80,
194823         0xca2c6c75,0x144cc12d } },
194824     /* 146 */
194825     { { 0x2989aa3a,0x593a0a1d,0x59e6e64d,0xd83f2283,0xd32e732e,0xe938b0cb,
194826         0x3c3cb249,0xf4c464c5,0xf89ea6ac,0x9750a5f8,0x346cfc32,0x467e5bbf,
194827         0x37b2b809,0xc9bfab9d,0x3b339c6d,0xf8eb7453,0x3b766dee,0x3fe01fbe,
194828         0xef6aea27,0xb3154254,0x7be61b10,0x555c3df2,0xdd818488,0x70fb6d81,
194829         0xbbe714f9,0xda1af3a4,0x9d18f693,0x575f2017,0x2465b839,0xdc08fc6b,
194830         0x6b84a951,0x874ecf33 },
194831       { 0xbbb3f6be,0x624af83e,0x08bb423d,0xf578fbb9,0xd7873527,0x5623b0ba,
194832         0xa62e0442,0xc3659bd8,0xfe236f79,0x2903b167,0xe53f26a6,0x55a430c6,
194833         0x3ad712cf,0x222547ae,0x76eb272b,0xb73890d7,0x3d628df9,0x95b4f70b,
194834         0x53eae4ac,0x9f0e13b0,0xe7f2174e,0x5b4f5138,0x98dbae17,0x75482cf9,
194835         0x44518480,0x2b69bbde,0xcafef15c,0x4f279652,0xb6bcaf19,0xa0a3ef2b,
194836         0xce4c634f,0x31fb8581 } },
194837     /* 147 */
194838     { { 0x615cd607,0x398306d1,0xaa32c3a6,0x680c9faa,0x7779131d,0xe87a705b,
194839         0x36708b00,0x1031013a,0x9445297f,0x814fa0e1,0xa6a79b56,0x70c5583a,
194840         0x4b16bed4,0x03039cbf,0xaaaaf8d3,0x18a7ca8d,0x5cdb68a5,0xf33159e7,
194841         0xd23814fa,0xdea0e738,0x8d0f4f9f,0xeb352718,0xdcdff032,0xb0b76609,
194842         0x3d48338b,0x65ba8ea9,0x55dd507a,0x18044d82,0x4a4a50b4,0x844a223e,
194843         0x18e19e54,0x98323000 },
194844       { 0x57f3d5a6,0x28a21027,0x6e8cadcd,0xffce5648,0x02551f3b,0x9590381b,
194845         0x935ebdf1,0xb26cc64f,0xc083aa6e,0x60611291,0x88e4cf41,0xcd988a66,
194846         0xdd53b1b5,0x581c3f73,0x77fc621d,0x78c804a9,0xfadca2fa,0x31874330,
194847         0xc83ccf02,0xf7008da4,0xa79a4707,0xc4122a1d,0x4a915eb5,0x9a8e0d3f,
194848         0xd0123660,0xa2de157d,0x65ead2a0,0x45ef43b2,0x188db285,0xd0a22ade,
194849         0x922e0caa,0x8abbe39e } },
194850     /* 148 */
194851     { { 0x3a2d2f01,0xb4446905,0x5dc6685c,0xd27c3193,0x1d74a027,0x6a908bbf,
194852         0x5b50ec1d,0x01da350f,0x3f3c2e26,0x1d3dd45e,0xb836ee92,0xf66e11d0,
194853         0x474b979c,0x7e03908f,0x98b87834,0x19e7c5b9,0xbd3d1de9,0xa741d3fe,
194854         0x1ef6059b,0x63c68e8d,0x3674e247,0x9b9ff939,0x3e7e67f6,0x1d7d53e7,
194855         0xaee9e248,0x698dc326,0xb3bd984c,0x52f23eda,0x6f8fe8a7,0xf95e31b0,
194856         0xc3d0ba95,0x0f15b4d0 },
194857       { 0x790a8d85,0x8f2f6635,0xe2595af1,0x51bffbae,0x24b51287,0xd15b7ec6,
194858         0x3234715d,0x7639b6ab,0x2bc5441d,0x0cdd5299,0xf6d05833,0x54800ea4,
194859         0xf6d6e360,0x21efd752,0x19290613,0xc0b7ffe5,0xeea898cd,0xb68a5825,
194860         0x22982266,0xecedba92,0xbbd06bb2,0x678a91b0,0x4bb6b0cb,0xb2436dc0,
194861         0xcaf8ea98,0xcf7a99e7,0x71aa05bb,0xb92d0e6e,0xf5993eb1,0xbf8d0471,
194862         0x20385ddb,0x515db378 } },
194863     /* 149 */
194864     { { 0x6f5bef22,0xee43eaaa,0x20348712,0x952d2698,0x7a3af6c6,0x1e4c484e,
194865         0x9a8c9403,0x18d434c6,0x5001899a,0x63e5d741,0xfe8ea40c,0x5238dbbc,
194866         0x96798721,0xca6cc8d2,0x04acbde8,0x73db6aee,0xb7f993ce,0xbf69328d,
194867         0xad45e334,0xa3f79bbf,0x7c1f1630,0x8c51ec93,0x9b00a6de,0x4907325f,
194868         0x12d82bc3,0x49e6acb4,0x0ec59fc9,0x5901b36d,0x9cf34e3b,0xcb09b710,
194869         0x1abf4c02,0x2de0487e },
194870       { 0x8dd9d484,0x18b722f3,0x7c77bacc,0x83349393,0x93d92b8a,0x58dbb8f1,
194871         0x8e3fac25,0x80d78d50,0x745f4a7d,0xf0500981,0x877cc29d,0xd072bfed,
194872         0xc30a89f8,0x67abf8f2,0x9a0820d7,0x92c567ea,0x8a3a5738,0x425ab12e,
194873         0xf055521b,0xc162faeb,0xb94ea5e9,0xee1c4f26,0x3d71e546,0x1e414994,
194874         0x43e8be1d,0x258183b8,0xef9eae0b,0x44917c82,0x73874a30,0x6813a457,
194875         0xcc42f86e,0x6f6ac071 } },
194876     /* 150 */
194877     { { 0x4dd6e3b1,0xd38822ad,0xad620869,0xfc78e1cc,0x2cacde80,0xe7843845,
194878         0xa8469fe3,0x121cc14a,0xe67e8ef2,0x8e8f3da7,0x4d347448,0xdb83d16e,
194879         0x798631f4,0x3ba1dd98,0x0a4c4c17,0xdfab5977,0x3edc701f,0x1f0a1306,
194880         0x6cd8ff28,0x4649d601,0xbcc55bc9,0x2267230b,0x5760412a,0x02a19c60,
194881         0x328faef6,0xc719d5f1,0xf67eaad9,0x27cb969e,0x719bafb5,0xf342530e,
194882         0xff5a82cb,0x6e2c24cc },
194883       { 0xadaf8793,0x6313024b,0x035c948e,0x944bccf1,0x953500bf,0xe9a066b7,
194884         0x1d116765,0x7991a946,0x9fd93c78,0x95addb2e,0xe92e5495,0x05d2c037,
194885         0x9f03e5cf,0xcb145b18,0x95aa1f72,0x81ae48ca,0x135a6e4f,0x203f2702,
194886         0x49b2a7d5,0x2bcef5a2,0x02d7f2a3,0x0687a900,0x6c6745b0,0x2f7d3228,
194887         0x86507305,0x3da8a875,0x2e8dc58f,0xbe38b884,0xdbf11185,0x6b48bf34,
194888         0x97c08f91,0x5af7fd0d } },
194889     /* 151 */
194890     { { 0xf4a224a5,0x55f9b950,0xcc50273a,0x41904574,0x643f1fd5,0x34f81330,
194891         0x0e50f783,0x996801bb,0x89581712,0x866d7403,0xa4091d36,0xdb9a405d,
194892         0x16a46fe7,0xf1e379df,0x83bf9168,0x8d04a93f,0x32b20bca,0xae4c8335,
194893         0xf72a1c10,0x99d334b1,0xd8195db4,0x8fbc9977,0xfba14b5d,0xcaeb3dff,
194894         0x76daf476,0x60fef022,0xdb5b72f4,0x4b948dfe,0xb6dfb062,0x5185c925,
194895         0x9609d4ae,0x27a9c381 },
194896       { 0xf12a93af,0x73c37346,0x5536634d,0x028b707c,0x498193d1,0x8efa58d5,
194897         0xef21b69d,0x4f83a5cc,0xa788a0e2,0x05cbb0a3,0x65b13c98,0x01031781,
194898         0x2b73784c,0xfea20e58,0xe50361f2,0xdf9713a0,0xd0cc22d9,0x31449a0f,
194899         0x7c5e2e1b,0x183752e7,0xb67044cf,0x6e44d6bd,0x733e177a,0x012dde95,
194900         0x08ee2c23,0x68b49669,0x1f5f1949,0xd9bb0541,0x6acd886f,0x95182c71,
194901         0xfbde9244,0x1c690694 } },
194902     /* 152 */
194903     { { 0x3a880026,0x5db67d17,0x125d95f2,0x89c4f0a0,0x3f6cb7a4,0x29050551,
194904         0x5cbbdca5,0x3eb231d1,0x972bcbd3,0xf8cffc99,0xad55a03a,0xcb4ef4d4,
194905         0x22867c2f,0x944d47ca,0x0ead1aa5,0x96d88548,0xcbc8b045,0x76a57cf8,
194906         0x005e55a0,0xdfe5844b,0x1d18a097,0x5e9e7e19,0x52923c74,0x957a26e8,
194907         0x7f5db339,0xd0867b79,0x63bed0c8,0x2553408e,0x689ad23c,0x1596e5d5,
194908         0xa504c339,0x7b8c13d6 },
194909       { 0x52fb6901,0x2fc43aad,0x16ca253b,0x1c0313f9,0x515aadc6,0x1475830a,
194910         0x7f577dc2,0xc93d1926,0xf723c0dd,0x26e52e8e,0x3eb9f6da,0x2f1e0eb8,
194911         0xf180376d,0x9979de82,0xb0834939,0x43e28ecb,0xa39c38e7,0x9a2d51dc,
194912         0xa8e3f6b5,0x6e6063a9,0x4b9b3270,0x4cf1da3a,0xd2f8915d,0x6e5348a2,
194913         0x50507912,0x5e75e3e0,0x20d383fa,0xaeffce57,0x8fd2fb29,0x1d6d53cc,
194914         0x696f4cd0,0x0e3c3ef6 } },
194915     /* 153 */
194916     { { 0x21ee1d83,0x3bc337c1,0x787b7788,0x97e08f6d,0x138fa4ce,0xbf709fcc,
194917         0xa0348e58,0xbaf77647,0xa55e672d,0x04f8babc,0x7d5ec5dd,0x0ed2919d,
194918         0x33e99218,0x8ce64bff,0x24b059af,0xac09fc57,0xdc5e32ba,0x506831f9,
194919         0x465af6a9,0x26a22677,0xc97f1ff8,0x3c5efe66,0xbc6087fd,0x1515e0d6,
194920         0xaa8edc6b,0xb1a39c5e,0x0e79ed29,0x3dd816bb,0xbc3788b8,0x6cc13769,
194921         0xc092a51c,0x463098e3 },
194922       { 0xc8bd0fa7,0x3a6408c7,0xce6bde49,0xd1764311,0x283ef7be,0xe315e108,
194923         0x99b5d938,0x8213cc77,0x45a49a6b,0xaf7f1581,0xe529e4d1,0xd00fdb0f,
194924         0xce66c9d6,0x55d38f77,0x1bd4b952,0xb4f7ccc0,0xaf71f986,0x8d975b49,
194925         0xcd64d00a,0x12b59fcb,0xa5a3bad7,0x1860e504,0x2b5c89f1,0x6d976044,
194926         0x7a3e231f,0xfed0c659,0x178cba92,0x58114c33,0x6698e11e,0xe2e74c06,
194927         0xa348b85a,0x7f8fd093 } },
194928     /* 154 */
194929     { { 0xc19428af,0xf24592ca,0x3a308665,0x192a1c81,0xe30bbd7f,0x42589812,
194930         0x836c6bb9,0x10db0723,0x598e4987,0x9c7a41e9,0x6ead6f4b,0x8aff179e,
194931         0x75862c44,0x70f8f9b9,0x6f21983e,0x6b3b0237,0x98e65152,0x25d83e9b,
194932         0xd751218a,0x3b2d26a8,0x9d6f1da6,0x9508281a,0xa5a81f74,0x8df78d05,
194933         0xe4687471,0xd79ee559,0x6787d8cc,0x2060ca57,0xa8476c95,0x427a84ff,
194934         0xe6435131,0x87b64c51 },
194935       { 0x4b30d3c4,0x87f46f65,0x23b4ef14,0xcdec4c5c,0x63ca4d68,0xb3b74766,
194936         0xcf3fb56d,0x1df34269,0x0fd7d46a,0xd4f139c4,0x6a69a8bd,0xa3b7c7c7,
194937         0xcbadd7d2,0xee56b4c9,0xac942334,0xb28ff342,0x786f1da3,0x0046fdfa,
194938         0xb700c82e,0xce5d149c,0x50966597,0xca30ef81,0xfcff4bdd,0x44a20609,
194939         0x44925268,0x0f2f65e7,0xd4021f38,0xe5b6552c,0x042dbbd0,0x77ea9c2a,
194940         0xd9c062f5,0x8c95267c } },
194941     /* 155 */
194942     { { 0x5fc1abb1,0x6655032e,0x12fe4743,0x2215af54,0x29f05ef5,0xfd657560,
194943         0xdc191be9,0xb0e73325,0xc08639b0,0x7ab3c65e,0x1c3e6673,0x67507f51,
194944         0xc8615555,0x638befc3,0x42f0c4ad,0x5d0188cf,0xd896186d,0x843a301c,
194945         0xb2c6741e,0x045603f7,0xfa3cd1d0,0xf7545c0c,0x4a40672e,0xf612affd,
194946         0x45b9e8dd,0x56197c9f,0x87922d74,0xb453237d,0x4b2d59bf,0xbf132e3a,
194947         0xb84a6a16,0x8afa1b73 },
194948       { 0xe793ac70,0x6b3596ea,0xeef6dd10,0x4c94ef8e,0x70422e40,0x926b4fa2,
194949         0xe9e5d763,0xc8c71dce,0xf512aadf,0x352fcb70,0xa883975f,0x1b7ba138,
194950         0x058c3b13,0x57991390,0x97740fd1,0x9692092a,0x160b0697,0x19ad945b,
194951         0x10837ab2,0xbc634388,0xf174bb71,0x76ee11c4,0xab1b80eb,0x6111bfc1,
194952         0x70ec458a,0xbc82bac8,0x312d3325,0xeee60127,0xb240adc8,0xb4118b1a,
194953         0x2b5a093c,0x67211191 } },
194954     /* 156 */
194955     { { 0xf55cf9bf,0x91e99306,0xa46b96d9,0x9b045308,0x9e7a65df,0xae3c1e1d,
194956         0xc731bcbb,0x453cb151,0xa4d58a61,0x14be5227,0x97c74cc2,0x39dac922,
194957         0x822e00d6,0x4d0f7a45,0xc62b03df,0xafeb1d51,0xbaa18b2d,0xbb1dc3a4,
194958         0xdf2b74f0,0x7f3c7178,0x896b6a33,0xfcd328a6,0x1dce055f,0xe95ed454,
194959         0x6a4e2b87,0x97fbc76b,0xfa59dce9,0xe5ec67f1,0xcc0367c1,0x052368ac,
194960         0x54e4a3fe,0x7c863916 },
194961       { 0xca7388cf,0x55e94b5e,0xc0335d38,0x17cc0a60,0x616f85ba,0x9b69b78b,
194962         0x10122980,0x705d02ef,0x1cfd0a79,0x565a6e80,0x7d1ee352,0xeb74a96d,
194963         0x427b9dad,0x5c8832ed,0xe6d5330f,0x96ea8528,0x18d24ee8,0x30d8862b,
194964         0x9ff939f7,0x9cd38ed5,0x01060252,0x690fc9a2,0x2303b3ff,0xc62d88b8,
194965         0xdd52b469,0xfc42d7a4,0x8cad2d93,0x06f8dfa2,0x60920438,0x50236090,
194966         0xfce855ad,0x32582758 } },
194967     /* 157 */
194968     { { 0x359e8c60,0xeb20e45f,0x364ca186,0xc71bb8a5,0xdff8e110,0x02b15071,
194969         0x4c93e578,0x074e91d3,0xb829d0d8,0xc0326e00,0x626a83fa,0x3c192258,
194970         0xfb29a09e,0x387a64d5,0xe5ac5c82,0xcaaa3d34,0xada2da29,0x8ed685e5,
194971         0xeb29650e,0x92720267,0x763802f3,0xf7184b19,0xdf6b1aea,0x23f5dd0e,
194972         0x25e6125d,0xbe1fa347,0x0c872a1a,0xd6287f9d,0xac57c3af,0x49aa93d2,
194973         0x5bda7656,0x1a4e6a71 },
194974       { 0x554d1267,0x1a126ede,0x1cd02b48,0x37f94533,0xce31fb1d,0xd70af04c,
194975         0x097dc012,0xcf410b0b,0x36c7b6c5,0x930e1d17,0xc6891085,0x902fee41,
194976         0x79fb638f,0x349ba4a7,0xacd6f8df,0xa16c5821,0x2e076ace,0xfb3b83c1,
194977         0xe501d14d,0x6b8d033b,0x20f2d2da,0x0593d452,0x99df1880,0x3752526d,
194978         0x9feb33a6,0xca32351c,0x1f6ef456,0xd91343bc,0x35b9dc8a,0xc74857db,
194979         0x85b4e832,0x856a7c93 } },
194980     /* 158 */
194981     { { 0x0d0a5583,0xa007d002,0xeda4658a,0x2f1301dd,0x34d939be,0x91c07964,
194982         0xa70c0836,0xa0cb6780,0xbe81e540,0xc0b4df95,0x5d4ac8b8,0x6cbbcd34,
194983         0x54756239,0x57c52ed0,0x1805ceb6,0xcac2dca4,0x79344255,0x915ee6ab,
194984         0x24c9a2a6,0x366def31,0x8c12c674,0xbd3b962f,0x7dbb7c3b,0xaab64f1b,
194985         0xe22bb95b,0x3c0e4553,0xc4c63b74,0x2408feba,0x2a4da631,0x3ca77312,
194986         0xc636da40,0x62889084 },
194987       { 0x8cb8d208,0xa457fd53,0x543f06d4,0x7a8f8009,0xf2eff2ab,0xb66de154,
194988         0xf72517e7,0xfddb28eb,0xf9389d2c,0x0149fe66,0xd85b88ce,0x79e8773f,
194989         0x0ba543f7,0x452e090b,0xb0b03fc0,0xdeb9b5cf,0x6c5ed77b,0x3113448a,
194990         0x8ffc0372,0x3609f3cf,0x5c1b4c4a,0x2bc9c46d,0x8fa59be9,0xe66f3bf3,
194991         0xcdb02691,0x1396bf5f,0x009f88f9,0xf1ec59d4,0x2ad9dfe3,0xc2903456,
194992         0x5ada4d58,0x79d8122c } },
194993     /* 159 */
194994     { { 0xaa529507,0x14d4e4ce,0x74655d00,0x056a0814,0x4f0fc474,0xc0d30a38,
194995         0x3443cb8e,0x8a8203ea,0x97f1728d,0x33c62fb0,0xb520ef52,0x8a38dcfd,
194996         0x7cac9d3e,0xa0f90d5d,0x873cea50,0x28a7b0bf,0x6c6c41cb,0xd115ae3a,
194997         0xa13812c1,0xa35171da,0x624d507e,0x25d4bba5,0x7e98f42f,0x91dad289,
194998         0x96a41371,0xffd6b1e9,0xb69e5b77,0xd46c2125,0x20c4f707,0xc7d2b424,
194999         0x8142557a,0x2ab3af95 },
195000       { 0x6a5372a6,0x86ca074c,0x56292ba7,0x728fb83e,0x77741cf5,0x745596dc,
195001         0x520ef49d,0x70b4cea1,0x61e46472,0x1472fe34,0x3fb8ac5d,0xf4d6bd66,
195002         0xc10bc071,0x46e52cc9,0x371a3461,0x28794efe,0x276fe877,0xa4850718,
195003         0x9bef5ab4,0xedad5773,0x3f15c815,0x24c2d9ff,0x8f8395c3,0x188950e5,
195004         0x80b6a855,0xbae40996,0x8a8803e1,0x4f53e22c,0x039d25ee,0xaf233f61,
195005         0x250409ca,0x07db2c35 } },
195006     /* 160 */
195007     { { 0x037d4703,0xc7f3b8db,0xc5f488b9,0xe83708df,0x8471d402,0x1fba830f,
195008         0x5a2faae9,0xa55ee8d2,0x5404fc1e,0xc2e5bf10,0xaa2d5651,0x647d5027,
195009         0x7ebaf5f9,0x37a53c0c,0x95b30abf,0x7adf0bb2,0xd64c93ba,0x5a62e1fe,
195010         0xe2ef4a78,0x7ffc18c0,0x4d2cd04f,0x139dd9d9,0x5ea0af02,0x253fbab7,
195011         0x0fef9acf,0x7c8100ea,0xc8615aa7,0x74c5384d,0x9fe52069,0xcb28682d,
195012         0xcf7dd759,0x08b6ca8f },
195013       { 0x036c3b5a,0xe04e5bea,0x7f9f2b4b,0x38726102,0x29797c0f,0xa9fca570,
195014         0x82879ea3,0x1656180b,0x607f0ddf,0x153389bb,0x67b0e087,0x99a1223c,
195015         0x9d897fc7,0x0d1808ec,0x916edf19,0x9470711a,0x07217118,0xf8f52f2b,
195016         0xd18888b6,0x5d8b29ff,0x4cc6f900,0xef1e22c5,0xeb24877f,0xc4036165,
195017         0x35479525,0xfda95233,0x6861468a,0xd622a421,0x74faba08,0x5d043b07,
195018         0x0d31a7d2,0x2c337b02 } },
195019     /* 161 */
195020     { { 0xea22fa65,0x7b2305bc,0xd159f63a,0xbe183ef4,0x3f35923f,0x3473d87d,
195021         0xc11d7753,0xb27fb306,0x2a054cff,0x702e7e6b,0xaf185619,0x3ce9f97c,
195022         0x4e7d51c5,0x83550243,0xf356ac5b,0xa63e3d82,0xd7645131,0x867b7caa,
195023         0xa671fc9d,0xee85e6af,0x2b07cd77,0x3b985ede,0xffda5193,0x07d598b0,
195024         0xa942dc36,0xb10eca39,0x506218a9,0x17f3dcee,0x06b7d5ca,0x3d94e8d1,
195025         0xed8831c9,0x509b2634 },
195026       { 0x48caed54,0xb1b9414e,0xcbf51e97,0x77a78c6c,0x4de9b258,0xa4688c8d,
195027         0x91ee3d78,0x0024137c,0xe30ee64c,0xa68f9234,0x88190d78,0x573255bc,
195028         0xba80690b,0x41e8e05f,0xec354f4c,0x50038d84,0xdfa52816,0xb18f02d6,
195029         0xccb63fda,0xc47f9007,0xe98ae455,0x29d480fb,0x5d0e319d,0x4ac45d22,
195030         0x026db719,0xd06f3575,0x2c3587b9,0x733b9e20,0x2c317727,0x22483992,
195031         0x54bb8752,0x1592d5a7 } },
195032     /* 162 */
195033     { { 0xcf7453f0,0x5778d9a2,0xed83c1f0,0xaffb899a,0xe0a82ba7,0xae6506d3,
195034         0xea3d5081,0x32c84e1a,0x810aa38b,0x9ad528c0,0xbd37d041,0xb1fdb020,
195035         0xd06ce41f,0x78d6cbe1,0x2e74b7f6,0xd287f0f0,0xc43bb022,0xf5cd2575,
195036         0xf81a71b3,0x6d28f2f3,0xc633e7f4,0xe65bb1f5,0xc4fc580e,0x32e5fc1c,
195037         0xbb7b07a5,0xcd55539f,0xc3caaf3a,0xb5a94471,0x4cc22d2d,0xb958bdf4,
195038         0x77a2777c,0x1614bdbd },
195039       { 0xed0ab04d,0x4c1f0230,0x6e2082ea,0xae347b00,0xc42c5b5f,0x9f10bc63,
195040         0xde019935,0xb0539e6f,0x65dd0825,0xd89bd4e7,0xbbceda16,0x92260fef,
195041         0xe62aca32,0x8aaa755c,0x5ec82c5f,0xed762fa9,0x18650768,0x99e64c01,
195042         0xc92e348c,0x57dd6245,0x31ea6d68,0x0db88a77,0x07b44736,0xef0012ab,
195043         0x171d70fe,0xb9356b94,0x03f891b0,0xe68b0628,0xb79c20a2,0x3a54a53a,
195044         0xb00b0728,0x489656c7 } },
195045     /* 163 */
195046     { { 0x71353c25,0xe43649ba,0x13f67e24,0x517f27a1,0x1c1eb9e3,0x10bd333a,
195047         0x78e29bf9,0x94e1c05c,0x4743f15d,0x84fe7d97,0x90da2df0,0x9c874908,
195048         0x53673be1,0x82403fa7,0x1baea1b1,0x7ebf5db4,0x24180ead,0xcfe0ae35,
195049         0xc2f50c3f,0x1d15873f,0x70661cd9,0x16851ad6,0xa51e8c2c,0x802968d9,
195050         0xe0161099,0xe7d1a9cd,0xa8a7ea56,0x2b153c89,0x06e3c498,0x6d41b789,
195051         0xd6769dcb,0x082bb2e9 },
195052       { 0xc4d6615f,0x6180ef46,0x01b9829c,0xfc629dc1,0x0fb264ca,0xde222ec0,
195053         0x10ecc2c4,0xc5457e06,0x1eea2c4d,0x95ce599f,0x8f9c5b2c,0x0433fa72,
195054         0xcd6310f9,0xee035462,0xce2e2253,0x84c57c3b,0x96d87e44,0x6c8ec31a,
195055         0xa452c5a7,0x30bfe393,0xa047b235,0xc592b140,0xc018545e,0x7bd8be18,
195056         0x5c178c46,0x794e0107,0x2e23005b,0x48471946,0x622a54f3,0x2665e237,
195057         0x901c9042,0x36451a46 } },
195058     /* 164 */
195059     { { 0x19893e71,0x17802d18,0x539a2082,0xa1765d8b,0x2302ecfc,0xfc6aea01,
195060         0x365bf59d,0x8d4cf51b,0x0d232a80,0x87741d72,0x18e80427,0xac343eb3,
195061         0xe74739ec,0x553ecb2f,0x1a8b07ca,0xaeca79a8,0x56f4ab3a,0x089ff322,
195062         0x3fa1d1f7,0x5e95d729,0xf62a9a16,0x260569ae,0xaa08ddc2,0x5e776232,
195063         0x1b7bb54a,0x93fabec3,0x743d56e7,0x48a20956,0xeb0ebeff,0x749cdb12,
195064         0x69b8fcf1,0x705307a4 },
195065       { 0xe488310b,0x7a8e4c04,0x5325cd7b,0x12726e32,0x4983efac,0x5d0fd8b0,
195066         0x02ddb913,0x796e552c,0x77b9685c,0x0eeca3f7,0xb15f24a3,0x9b766e89,
195067         0x48efc979,0x7c2736d6,0xa8021c6c,0x3d619685,0xa0b2f1ea,0xfe33e278,
195068         0xb676d6b0,0x95c69879,0x1af4e0be,0xa0747319,0x36c4ee55,0xa2fab5f1,
195069         0x59e5f3b9,0x6938b8ff,0x39cafe6e,0x1e114da4,0x6a6ad120,0xc9595ec3,
195070         0x57e62aec,0x80f79bd0 } },
195071     /* 165 */
195072     { { 0x60af09b3,0x3cef42a7,0x933dfe14,0x3c016ebd,0xed85eaa8,0x720cf1e0,
195073         0xceaa3bc9,0xd4f5e99f,0xb7106f97,0x7216b9d2,0xc9668ad2,0x65f34c36,
195074         0x5b0c651f,0xa8fb82bc,0xf2fda4de,0x20f42f1c,0xd21f659e,0xeb31ab2c,
195075         0xa13d1618,0xb7a776c7,0x38662be5,0xec441022,0xcad08e0b,0xc825da70,
195076         0x022c0180,0x99299079,0x2aef9ffd,0x7623bda0,0xf5c58b50,0xde84f4f3,
195077         0xd824ff19,0x5f5a5da4 },
195078       { 0x7e8311dc,0x5737257e,0x466cf136,0xdef94f51,0xb05ca21a,0xa73e1645,
195079         0x02e4ab37,0x38ea9b3c,0x8579165b,0x7760eac9,0xc24b01a4,0xdffdd047,
195080         0x3fb95584,0x188d4fd1,0x25548bda,0xfaac38b8,0x59e9dcac,0x1a79a6f0,
195081         0x09a2700f,0x983f720f,0xfb8a7e48,0x8cbba554,0x47a1fad5,0x38a19968,
195082         0x5abd6b5e,0x11856547,0xf3716ec2,0x75113d31,0x4212907b,0x1391e781,
195083         0x0dc15889,0x5319c801 } },
195084     /* 166 */
195085     { { 0x6b61c3af,0x2320136e,0x07b4bb68,0x1d40f2de,0x380c97f0,0x651dee7f,
195086         0x6a8c313a,0xa978ba70,0x2011ca10,0x22c587d6,0xab1f445b,0x48bba218,
195087         0xe50444e6,0x8c5eaf07,0x442fccf9,0x5549f02a,0x3d80493d,0x2564746f,
195088         0x79c04591,0x42d24f61,0xabdc8887,0x1600fa18,0xded38f8f,0x5cb8600a,
195089         0x923aeb46,0xa4bf9b90,0x1e1c578a,0xd63fee35,0xebb9ea14,0xf3c9c5ac,
195090         0xf11a4ff0,0x3d13314d },
195091       { 0xb4513d1e,0xe5cc662d,0xd55952bd,0xde78a8c5,0xe7f86d0a,0xe8a37a3f,
195092         0x7a04f0c5,0xca2d12a4,0x2e25d06c,0x4c6696e4,0xb2136071,0x52614698,
195093         0x89f6e1cb,0xf4d2701b,0x80efd95e,0xaafd6177,0xc5bb6907,0xe6d73ac4,
195094         0x420db35a,0x49e874ac,0xf2751fa0,0x11631de4,0xa1fa2edd,0xb29f7336,
195095         0xb7fd794d,0x4c406864,0xe22f92a6,0x73cb21d3,0x2043cc76,0xeae904e6,
195096         0xb322c6ad,0x67f28a9f } },
195097     /* 167 */
195098     { { 0xca148ab5,0x7c17b258,0xb3c60051,0xb9a1976f,0xc8f28df9,0xea260698,
195099         0xe8d45017,0x87b2cc74,0x0578a422,0x37257329,0x17bec732,0x81d5ee25,
195100         0x1d48bbc4,0xd7411fcf,0x487f5cfe,0x46217e6b,0x41eb8e1b,0xcb007ac5,
195101         0xe05a00c8,0xc41c57a6,0xd2f9fa99,0x1f954d2b,0x40941cad,0x370bd5db,
195102         0x3829509d,0xe487879c,0x5ceca5ee,0x4c137552,0xfd3efb9e,0xe8ef7fa4,
195103         0x1bd1bdb2,0x5ff09174 },
195104       { 0x579c6632,0x791912a4,0xb8a20815,0xbb19a44f,0x535639d3,0xf4f97b84,
195105         0xbc3c9bce,0xe57e2bcb,0xf19e6410,0x122b3f2b,0x1357d9ad,0x1f0189da,
195106         0x79e5ff66,0x675573bb,0xef2f3c4c,0x444e5c98,0x04d10731,0xd6f61e20,
195107         0xac75d635,0x0dfa366f,0x2c854f23,0x9fc47c86,0x0ad0850b,0xc04ae43e,
195108         0x2f720c32,0x5ce94f64,0xa753bc9d,0x67efae65,0xb0373a63,0xc27d30d3,
195109         0x29721646,0x6681013a } },
195110     /* 168 */
195111     { { 0xe84509df,0x1385d913,0xcf339376,0xe978bedd,0x3423a148,0x2df425d3,
195112         0xee8cb579,0x43fa0ae3,0x31c4553c,0xf015369d,0xdfbf1d48,0x05cf08bb,
195113         0x9444244a,0xadff4be6,0xa35dda33,0x01635f81,0xe76fab7c,0x085c8949,
195114         0x16737783,0x4bd7fcde,0xa254f8d2,0xfd8cb52c,0x413ec985,0x62168a66,
195115         0x7a9026cc,0xf2db9741,0x50e1e1b7,0x3962ee56,0xd3beffde,0xbee0a346,
195116         0x0bdfab1f,0x3b35b72f },
195117       { 0x535c3749,0xbff8de9f,0x8add9c48,0x23c1f20f,0xc8f8f663,0xa975b37b,
195118         0xe8f3ae49,0x2529e475,0x1d5e2628,0xc32f10d5,0x67862f1d,0x5ac0d297,
195119         0x854cbe36,0x13c79338,0x4b67e462,0x48f004ef,0xe5d10ee1,0xfa37a150,
195120         0xd28288a0,0x4974778d,0xcfb73f4d,0x96830a66,0x07804952,0x9f444013,
195121         0x9760b694,0x8233c709,0x25b75c99,0x8340cca5,0xc771f99c,0x3f62e40b,
195122         0xcd95c685,0x47d0a1eb } },
195123     /* 169 */
195124     { { 0x652811f1,0x266f4fff,0x62ef3002,0xeaacaa93,0x50cba0ca,0x6c387a55,
195125         0x007f5467,0xa350142a,0x202f2673,0xc7fd102a,0x33dc6e65,0x5daee570,
195126         0x064a63d9,0x60682ec3,0x462b251e,0x46cf0bb0,0x5da936e7,0x0e030ca5,
195127         0x434265b5,0xc87a60f2,0x69b4e8f5,0x9637b2bb,0x7ad7770a,0x601fb58c,
195128         0xed3a15a6,0x1f2147f6,0x2995e961,0x05b47d5e,0x83213a16,0xcb0ca9b3,
195129         0x4995a85c,0x8f4b614a },
195130       { 0x4b4eb3c1,0x5aa8ec19,0x20323a70,0x8c549ac4,0x4f6cc6aa,0x00d49322,
195131         0x45f9a5a3,0x0e53b9bb,0x0897abbb,0xe46ef110,0xd7acd7d0,0xfe873e57,
195132         0x0f7cb588,0x7cfccfe5,0xc85557d1,0x0ea53d65,0x7288f2e2,0xfdd9eb44,
195133         0xc0eb68a8,0xab2dedfa,0x08603a0c,0x58221470,0x00feb06c,0x69464689,
195134         0x25e5caac,0x804cf5bf,0x9fc91ae9,0xd8559858,0x73c45eae,0xed9378b1,
195135         0x524c9801,0x8f942d02 } },
195136     /* 170 */
195137     { { 0x8e845808,0x1f1ec302,0xb77abfc5,0xc302bffa,0xf8d97dc7,0x26afd4b9,
195138         0x3aac594b,0x3d3a83c4,0x674d94dc,0xe3b74bd1,0xcaa5911c,0x4464b737,
195139         0x871c2cd2,0x62925773,0x3b4440fe,0x419f2485,0xe052ad7d,0xdda6a0f3,
195140         0x846c86c0,0x645280d6,0xf8324f42,0xa25689fa,0x07cf117a,0xc74ad1e8,
195141         0x8ddc9db7,0x5626dea0,0x966fc85d,0x52620373,0xf3b1eb53,0xe0ad57c3,
195142         0x949c1acb,0x38300252 },
195143       { 0x5e744723,0xa0ef5a40,0x1ae08481,0xdb5bcf75,0xfec1f76f,0xabfad8cc,
195144         0xfab37fc6,0xfba5d831,0xc8fedb78,0xbe39e248,0xad93f310,0xa5cfad5f,
195145         0x913d5c24,0x747fdb1e,0x4518b7f5,0x052a47c9,0x7cfb4327,0x9e208d6c,
195146         0x70e538be,0xb135cb9c,0x5bb17916,0x36352759,0x5b3106c7,0xa2c07880,
195147         0xc209bb06,0xd2d42a06,0xd3c504ad,0xb525b471,0x822ce034,0xc9f4b368,
195148         0xeb4185a5,0x15f18796 } },
195149     /* 171 */
195150     { { 0x0aee4684,0x094dea06,0x7cdbdbc8,0x42b21f06,0xb1931319,0xa439e149,
195151         0x81a7dba6,0xea4bdd41,0x3c2ae80f,0xc6213706,0x12823dc2,0xb58b0967,
195152         0x832611b1,0x7443d515,0x13c20384,0x2e16f831,0x2bd992d2,0x0ce204d6,
195153         0xf419388b,0x499dbcd6,0x1d3778c7,0x492ded1d,0xc5ddae73,0x9d5bd74f,
195154         0x994b6259,0xd4813d52,0x0e86ca68,0x191d9cf6,0xf3e9c2ac,0x562179ea,
195155         0x9fee1238,0x6146f1f3 },
195156       { 0x078e2aa6,0xbd06d33e,0x9dee9265,0x693af7f7,0xdaa40e84,0xd56e0f81,
195157         0x9b9a407e,0x05fbbb88,0xede99519,0xdcf44adc,0x092dba39,0x7f71f8d3,
195158         0x4231774b,0x675b5da5,0xa5f605eb,0x7456a251,0x87a39a9e,0x9031d4af,
195159         0x05b474bd,0xdb430006,0xb665aa91,0xbda5dbf2,0x6631eeb4,0x5d1a3df5,
195160         0x62377c58,0x028149ef,0x685d0bff,0x2e1af4e9,0x82a465de,0xe0ea0875,
195161         0x06bd0050,0x95543f9e } },
195162     /* 172 */
195163     { { 0x85d7c6ef,0xf7cbc6f4,0x63b1bc24,0xcad8084d,0xbf8cba62,0xdf90ce88,
195164         0xb455c192,0x98e4b686,0x774fc6ed,0x6146b8d5,0x7ae20077,0x70e2389e,
195165         0x61c22529,0x5241c479,0x3884e5f5,0x7d221510,0x17e28273,0xd6d20ce2,
195166         0x4f2674f8,0xe3119f51,0x70c011db,0x85459055,0xfcfb760e,0xdfab75d9,
195167         0x9e8c2a19,0x9546362a,0x4a7d4b27,0x4b6d3f8a,0xee5d698c,0xa5c87104,
195168         0x2ba296ff,0x6db43478 },
195169       { 0x5c3f0d95,0x06486493,0x4e748895,0x8917db82,0x6b2f3e44,0xf73fdf62,
195170         0x2b7f574b,0xc60edc54,0xaf732723,0xbe1c09a2,0x7cad114c,0x7d34669d,
195171         0x321aaff9,0x9646600a,0xed0cd61c,0xb94e2bba,0xdec4750e,0x866e1a41,
195172         0xb1a89f58,0xa1be990d,0xf2759693,0xc39e4d6c,0xc0e0dddf,0x11cfb780,
195173         0xd99c8a41,0xf0afcd7f,0x6e1c3050,0xcebffadb,0x96d2c6e4,0x4f3981b0,
195174         0x2ae27a94,0x07a791e7 } },
195175     /* 173 */
195176     { { 0x1e9f0300,0xe70e9047,0xbccdf904,0xe0253ad9,0xff053078,0x51c0289d,
195177         0xae893462,0xf1ef092e,0xa4846845,0x2c90a91a,0xf1dad4b4,0x1946eda0,
195178         0x33df67b2,0xf07650f3,0x0b15a014,0xc6e988db,0xb542f0f9,0x72e0c66e,
195179         0xe0c0378f,0x5d4b6311,0xae86950d,0x548badaa,0xb35f1c8f,0x6801638d,
195180         0x944d1ad4,0x129e3216,0x40471d32,0x9951bac8,0x85e94dde,0x03cc29f3,
195181         0x4543ecac,0x6d6acc2e },
195182       { 0x57b2d299,0xeb999e95,0xe3d721cd,0x3a2bcd9b,0xbb4cb444,0x2e60384f,
195183         0xdc060faa,0xae177709,0x8c987cde,0x74f0e6d3,0x1076fbed,0x9a237cf8,
195184         0x7983fbff,0x69af1513,0x323f9584,0x6c3f7a1d,0x6db64398,0x3e21cacf,
195185         0x96703d92,0x7cd8134f,0xb8393f76,0x0755898f,0x2e825222,0x1b5b28bc,
195186         0x7924aa7c,0xb78799c1,0x81427a8a,0x1db378f2,0xff289492,0xd5a451b1,
195187         0x3d3c46ee,0x79d18212 } },
195188     /* 174 */
195189     { { 0x109d5589,0x1a3edff9,0x029b4499,0xded52eb4,0xb4b54adf,0x13eb9d30,
195190         0xa27bff67,0x4f9214c1,0x67f0f460,0x4c817ee7,0xc3a50e28,0xbadf8d83,
195191         0x94026237,0xc5dc03c9,0x966647c1,0x5f29581b,0x8a0687f3,0x10b6a089,
195192         0x31634517,0xae787cec,0x62e75188,0x2001dba5,0x45e2c3fb,0x55d4e1a7,
195193         0xb67d3395,0xbfcacdeb,0xbc6842ee,0xa1a0af9c,0x3e88580b,0x50590a2b,
195194         0xa784cdc8,0x73104491 },
195195       { 0x2648d676,0x44ca2cdf,0x4f1b12b1,0x9a85eca5,0x2980e1eb,0x1b9dac94,
195196         0x1ac8aa89,0xf30d3709,0xc719e195,0x73072ab7,0x2f703797,0xba518c82,
195197         0xac0067f6,0xac090e14,0x8dcd2927,0x0e6cfc70,0x21e7da63,0x4f5889e2,
195198         0x8371c7c6,0xb4aaa40b,0x8f7878c9,0x1f9dabe2,0xd84caf3f,0xf78aed6b,
195199         0x9e0e1d92,0x3c39dd07,0x122424dc,0x680be5fb,0x0bdc0099,0xf41b214d,
195200         0x5180c54f,0x6a8f8fc9 } },
195201     /* 175 */
195202     { { 0x53235132,0x62a1ed63,0x59dba88b,0x1db233f1,0x291efdd8,0x85625452,
195203         0xb25111ae,0xc7505297,0x1d701bd8,0xb5921af9,0x9774f45d,0xb4d05d72,
195204         0xf18e73ff,0x6e3d4c5e,0x899b3038,0x897d985f,0xc89b1558,0x8a9c30fb,
195205         0x4d13181c,0x3c92d1a3,0x2223320e,0x292e86ba,0x01ceed02,0xcf2454c2,
195206         0x583f309f,0x27a45f74,0xad0fd1a3,0x75a6102c,0xcb9c7538,0xdb4f45d2,
195207         0xdb283fd7,0x4752d8c1 },
195208       { 0xd5dff4d5,0x514d6cea,0x45a827f4,0x74cd5fdb,0x4fc7135e,0x1070a60c,
195209         0x1be5778e,0xdec0bb78,0x58dc6b08,0x271e12cd,0x54bc2496,0xb765089b,
195210         0x619098ac,0x6ddf2c63,0x67528832,0xfd6ebac6,0xc2508af1,0xeaa2d025,
195211         0x4dcfc1f0,0x13c2cda8,0x45510be0,0x1c7836a8,0x1a886801,0x3904688d,
195212         0xafaf2545,0x643132aa,0x2830a88d,0x49685577,0x8744b470,0x569491ca,
195213         0x75fb8552,0x3a6518f3 } },
195214     /* 176 */
195215     { { 0x224042a0,0xaaa8ed50,0x2452f1e6,0x6cb4e3b0,0x768211d8,0xedca5f4c,
195216         0xef4d5d3f,0x4e0fe3f9,0x522d46e5,0x33a8e2a4,0xf1446775,0x5998e21f,
195217         0xf592d01b,0x1496c50e,0x83a67739,0x69104c2f,0x472bbf00,0x28670bcb,
195218         0x503177bd,0x8ea883b2,0x7d2712a2,0xc5d8bc05,0xb439c994,0x41ef9317,
195219         0xdcda1aff,0x9801d3a8,0x7038f6fb,0xd686eeb5,0xfbfbf820,0xe80c5cd0,
195220         0xedc25817,0x540ac363 },
195221       { 0xfe7f43df,0xa71969a9,0x2c1b9e4c,0xe6653808,0x859c2917,0xad9677d8,
195222         0x96aa4404,0xbaca9545,0xff1297da,0x0e9d855f,0x22aea7de,0x1f61897b,
195223         0x36f13f8e,0x96edccfd,0x16e200df,0x627d3070,0xc98988a4,0x729f0736,
195224         0x97f231d2,0x95e25e60,0xf6048752,0xaf7f221b,0x4019b299,0xd6682609,
195225         0x26b4b1d9,0x1d99de09,0x1acdd7a3,0xec47cf66,0x6ebe15e9,0x4de9f2b3,
195226         0xfa16974f,0x17db32ec } },
195227     /* 177 */
195228     { { 0x6cf40599,0x75ef6919,0x00c020ea,0x7ea10dfb,0xfcaaf679,0x3da5ae7b,
195229         0x88ddd678,0x0d663ca3,0x255bcfcd,0x5a21f8fe,0xe344bc7e,0xe9c3f538,
195230         0x548e0632,0x35f62b1d,0x43c6e64d,0x654f2425,0x26993627,0xc755a7a6,
195231         0xb0f41324,0xa3b7c5f7,0x3a2180f3,0x05697f79,0x1e81675b,0x6cf85fb1,
195232         0xe53428f5,0x6d3cdb35,0x52d28b02,0xe3aa1591,0xf7a3fb78,0xa8470255,
195233         0xa194445d,0x460bd01b },
195234       { 0xc24d8077,0xbc34dc23,0x4c720d2c,0x82f4b580,0x6f5d1ffe,0xa29da911,
195235         0x92783ce2,0x578af520,0xb5904af3,0xe29f51ab,0xf7aa1190,0x46c570d7,
195236         0x571bddf0,0x4a522fba,0xae89bb51,0xbf4e2a06,0x59f3444d,0x799b35cc,
195237         0x26cc2557,0xc3028367,0xafcec177,0x94a4e985,0x7c36cbd0,0xadaf7dcb,
195238         0x75d39077,0xed31b787,0x2d3e24bc,0x52d6904f,0x1f95421b,0xc5ca2669,
195239         0x1734878d,0x7d342c3c } },
195240     /* 178 */
195241     { { 0x11fd127f,0xe5cf2c0a,0x119e4c5e,0x66d36bb8,0x6ef56ac3,0x621ab252,
195242         0xe5430675,0x30cfeaee,0xac3e9619,0x2ede27d2,0xf8fce671,0x6413513a,
195243         0x075f4c3d,0x6159c61b,0x59069d98,0xd447efe9,0xea76aea9,0xaf8d6f68,
195244         0x0f5bd164,0xac5dc61b,0x1e88bb98,0xdbab446e,0x1ba92320,0x618b8b16,
195245         0x78989865,0xa0eafb3c,0xc08b7e82,0x0c7abcc2,0x20d160bb,0x10f09b6e,
195246         0x8e4c63a7,0x5be0afa6 },
195247       { 0x1bbbf49c,0x82ab6d38,0x8c0703fe,0x3e09ce49,0xe10f4263,0xeca58b5d,
195248         0xda5a4532,0xd9cc6581,0xf618f7b7,0x07e18876,0x250f7fe7,0x0419a5e3,
195249         0xde6b86be,0xbb1a9e90,0x37359169,0x584a7deb,0x5149db2c,0x38eb3489,
195250         0xb0ebabb8,0x14546a33,0xc2f88a92,0x0067f0b0,0x0a2db019,0xbde0dfe7,
195251         0xc63e6f3e,0xba51b06c,0xe9206fad,0xa19127b9,0xfe80dc0a,0xe4eb5e87,
195252         0xd4de30ae,0x1e6fccf5 } },
195253     /* 179 */
195254     { { 0xaa8ac924,0xb57dff66,0xc298b3e8,0x06e9ad31,0x65fb080c,0xd140e329,
195255         0x1d95c93f,0x7dab211d,0x8a180caa,0x6d68d842,0xa20ded69,0x1a929408,
195256         0x38df461f,0xa8151753,0x60eae932,0xff5604ae,0x7dae4c0b,0x901b9e49,
195257         0xde262e89,0x4573a97f,0xf1084983,0xed69d9a4,0x64724f1d,0x8ffa022f,
195258         0xea85a15f,0xd5f1c2e4,0x01453794,0x4c626ce9,0xbf0907dd,0x80440cd6,
195259         0x5ddaa837,0x4522d461 },
195260       { 0xebfbe7c5,0x8895f079,0x84ef3446,0x30ea1ded,0xd4a1ab96,0x716a9eb6,
195261         0x50a30c68,0x1a4a5d22,0x0043bbaa,0x5a16631c,0x5010e5f5,0xbd107502,
195262         0x3d8c0556,0xbffe3e9d,0x07772419,0x31b30b18,0x84b82297,0x90ff7ef0,
195263         0xf21a18c3,0x00c37d75,0x565bb8f8,0x18d0a635,0x45e3bceb,0xbac1da2a,
195264         0x23f0b08d,0x1c38e90c,0x5fbc5ac5,0xf1ba1aa2,0xdda71fc6,0x09d5256b,
195265         0x6d7e40ba,0x346501a9 } },
195266     /* 180 */
195267     { { 0xcc2b0f1d,0x86be448c,0xac4c3703,0xe3eb45c9,0x9fc96bbf,0x5387f65d,
195268         0x5ae27fda,0xcef3c4e9,0x1bc18089,0xa008f776,0x22ca18a1,0xf374a084,
195269         0x53b73371,0xee882842,0x7cc09354,0xcb6fc6d8,0x61496d6b,0x8489ec1b,
195270         0x49e325c4,0xa92c29b9,0x7bdec166,0x15c6ca52,0xdcea2813,0x95444eee,
195271         0x3a21154f,0x34683eb3,0xd39061cf,0x8fb26f98,0x06c940bb,0xc3b08aa8,
195272         0xe554c96d,0x7c1d42cf },
195273       { 0xdc110aa7,0x766e703f,0xf362e378,0xab7b79d7,0x5aadca3c,0xd259c75d,
195274         0x60be3373,0x2a6eca79,0x06c4e8ff,0xf4744a4b,0xf3b705bf,0xb2842cce,
195275         0xae304b53,0x1a3af5aa,0x1b2d31b8,0x7bbfa201,0x4bee88d9,0xc4ba6eba,
195276         0x565cb839,0x2d3565ce,0xdaf7ece8,0x24808696,0xe6959745,0x2c7ccce7,
195277         0xe94f9837,0xefd6eb3c,0x3811a326,0x0a33b4cf,0xfffa93a6,0x14203f43,
195278         0x73c31d90,0x031e9828 } },
195279     /* 181 */
195280     { { 0x765a17ff,0x4fefecfc,0xd1290a65,0xa09f3888,0x938da038,0xbf265c46,
195281         0xa169ad46,0x4bb6145d,0x23a62fe8,0x33cf8214,0xabc860a5,0x562df571,
195282         0x815c38c4,0xbf2a90fa,0x17eda875,0x45ba1d6e,0x946fa5e1,0x799d881a,
195283         0xb90f5a3b,0x6c1be784,0xb10ff52a,0x0910a37c,0xa4f4fd36,0xc38c1fe4,
195284         0x8e2d3ba0,0xc3180fc5,0xb17a6187,0x3e2ff050,0x943a35c2,0x3a00059b,
195285         0xa28cc51c,0x494d3645 },
195286       { 0x4ba021f8,0x398426b6,0x796deb6c,0xd14c9083,0x7e36c762,0x6d2e5395,
195287         0x751cf216,0x8f556eca,0x19b24a19,0xdaca1e00,0x4b20c2ae,0x47887da4,
195288         0xff41a733,0x93ed4ccd,0x5c7c0cd7,0x8d717c44,0x91bf7009,0xcc48634a,
195289         0x3b59bbaf,0xa1f146f9,0xe5624f15,0xdd38bb39,0x303f8443,0x96d41aad,
195290         0x4bf104fc,0x6b670f03,0x29706582,0x0503f9ed,0xb34200f5,0x768e1f47,
195291         0xbbd4c6f3,0x3cfdcc5e } },
195292     /* 182 */
195293     { { 0xb523e13d,0x536c2a86,0x2920d0a0,0x1014a458,0xe7571296,0x3d52b478,
195294         0x7eb51bea,0x05746066,0x87b0e919,0x709f7861,0x686888e8,0x028aed88,
195295         0xd94afcd4,0x79a809d7,0xe2129af3,0x50c6032f,0x983c4082,0x75e4be72,
195296         0x7ab3be8e,0x98331bbb,0xb618c728,0xd31a032c,0x3f59c4a4,0x36dd85a1,
195297         0xed4f61e2,0xdbece345,0x1e571715,0xba7aaccd,0x64a1ebd7,0x138c58da,
195298         0x3d1aeea1,0x89296d0f },
195299       { 0xcca82c97,0xb165288f,0x1427e8dc,0x26c6c12d,0x4c3edda9,0x66a94f07,
195300         0xeaa01ebe,0x94600e1e,0x30f5e86d,0x14abce7c,0xcb456a31,0x741d7020,
195301         0x279f42c2,0xab05aa13,0xd4238468,0x70b60faf,0x318d39e6,0xa18efec1,
195302         0x8920b318,0xeb07f1ac,0xd8399e03,0x01e3cba8,0x3c81a301,0x65f8932e,
195303         0xccc667d8,0xae8bca7d,0xa268607c,0xcee1ae79,0xcac0a12c,0x3182e64c,
195304         0x2b1a4c54,0x9233a2f7 } },
195305     /* 183 */
195306     { { 0x0acbee17,0x717e8df6,0x5c24fcdc,0x0f0959c2,0xe54ffcb0,0x46f09887,
195307         0xd285116b,0xb993deca,0xbba1fa51,0x0bfaa4f8,0xd0f2183e,0x9c9249ef,
195308         0x96847779,0xf93cb358,0x2322d421,0x284bfb7f,0xd42af009,0x40cc709a,
195309         0x9bb1d615,0xc69f2274,0x717c3c6a,0x76f50b3a,0xbb9c5eeb,0x8b21e985,
195310         0xa4783b5f,0x58fb19ae,0x52e1c3e7,0x04c86b9b,0xf2971ac8,0xaca59092,
195311         0x21ed8291,0x2bb26a69 },
195312       { 0x15f81416,0x98a34435,0xaaff5bb4,0x086e72e7,0x0317261c,0x3d1f64de,
195313         0x5c0a1cfe,0x31c0786c,0xb3683401,0x542ea4d8,0x1a39b4cd,0x2f77273a,
195314         0xcbef27f1,0x14fe7ee1,0x16bb27dc,0xee7fc09e,0x410e5dc7,0xc0dccc17,
195315         0x1943b3dd,0xa3466742,0x3f31c1b7,0x92934b60,0xc22c1070,0x0186ded9,
195316         0x799f966b,0xa37ee8ba,0x249b0893,0x0f3bfcb4,0x2e92d4de,0xbae61447,
195317         0xe196eb08,0x937cb3f8 } },
195318     /* 184 */
195319     { { 0x16fbfdce,0x57c0e77c,0xc98d4cc0,0xea034cc9,0x42572d20,0xe7606d72,
195320         0x0019a83c,0x9861b55c,0xf1597162,0x80ba2803,0x05a0fd7b,0x0f4141dd,
195321         0x4b0daaa2,0x8865913b,0xaa3848ec,0xe6685746,0x3e0485d2,0x16d15a5a,
195322         0x3b6905dd,0x81c0c774,0x818af2ba,0xcec31b7d,0xd2b74b78,0x80d8f194,
195323         0x543e2f28,0xca659db2,0x9fb07c1c,0x31b83a7d,0x1f1048c0,0x86537fdc,
195324         0x78586a11,0x4d57bb07 },
195325       { 0x53b396b6,0xbc4b768a,0x93b51dac,0xbc8b24c4,0xa30ae1b3,0x33e511eb,
195326         0x945147c5,0x893bbd95,0x179fe3ce,0x6cc86031,0x3f920bd4,0x34b0a167,
195327         0x6b256160,0xb32912eb,0x9d168d83,0xbc69a2a4,0xef0dd128,0xb4949e7a,
195328         0x872699e1,0x2613419a,0xbf21376b,0x06c58477,0xa4f97147,0xe55b1909,
195329         0x7b9b745f,0x63d6eb75,0x08df3c85,0xb5365b29,0x55fcfae3,0x0e257e43,
195330         0x979f2aa8,0x1067c118 } },
195331     /* 185 */
195332     { { 0x32bf8883,0xc8455084,0x6fd06667,0x4755286a,0x77c2335d,0xd70b0f8f,
195333         0x2f4a2c94,0x678e60da,0xd118acf5,0xa468d8ac,0xbf5b90d9,0xce93830b,
195334         0xed4e9104,0xea4b1c74,0x27776ea4,0xac67316d,0x361bab12,0xb98ad75c,
195335         0x99122451,0xc323d482,0x530a43ae,0x26440220,0x3292d5a5,0x3a44532e,
195336         0x5fecf1bc,0xdb48694b,0xc667b8b8,0xe4e0516e,0xa4306ade,0xb3aa595f,
195337         0xf34e9725,0x7e4f7091 },
195338       { 0xb7f70919,0x3f3816e9,0x16b003f5,0x765216ed,0x778c99e5,0x46c6cff4,
195339         0x30a51810,0xe6a5abe8,0x45e728db,0xef6f49e6,0xcaccefd6,0x6fdd73ea,
195340         0x8c37f3f7,0xec394e6f,0xb6407fc3,0x73320802,0x96625cbd,0x988e8f7a,
195341         0x7cabfb00,0x83292363,0x407f359a,0x258ba9df,0xccbfae50,0xff01aee5,
195342         0xfe251813,0xfbeaeace,0x83f1cba1,0x9c69f161,0x9eadcdb5,0x512c58ad,
195343         0x6ccce8bd,0x2ae49cd4 } },
195344     /* 186 */
195345     { { 0xc40849f2,0x1239b0e3,0xa441098c,0x5136a4cd,0xe547f649,0x61535a99,
195346         0x7a9bbac6,0x92e4bdc4,0x53547af6,0x195a1646,0x8b47a74a,0x85ecb319,
195347         0x9de6a2b2,0x278553fc,0x0e2ba52d,0x471c038a,0x35bcba93,0x12ba1b88,
195348         0x6f31eca2,0xd4bf50da,0x802b32c6,0xd146e3f6,0x3c64c8c4,0x0c9c0131,
195349         0xeed21297,0xad30f12d,0x9c68530f,0x9b75bffb,0x8918de51,0x23c0ad3e,
195350         0xa73771b7,0x180e9d52 },
195351       { 0x29ab77b0,0xc316542f,0xf7aee628,0xdd411d9c,0x353c2f40,0x044c0685,
195352         0x4b0ae4cf,0x638dc7e4,0x95fc266f,0xa0924185,0xfd2feb7d,0x639da671,
195353         0x5ea39798,0x56858ed5,0x58f3832a,0x7a694f31,0xd316d831,0xa94233c6,
195354         0x30a35a7b,0x2fcacb26,0xf1ff713b,0xfef8f7dd,0x59eee2f3,0x8b9b4525,
195355         0x156d064a,0xd1b4f91b,0x2f5cfcfc,0x177866c2,0x3777eb41,0x12bc2566,
195356         0xd8ab85b4,0x21ca6f3c } },
195357     /* 187 */
195358     { { 0xa3e66635,0x0e162b13,0x2a9f76af,0x1ef20a2b,0x46db3356,0xab473a30,
195359         0x7802bb8d,0x0840bd77,0xa699b44c,0x5b6baf5e,0x1b2207f1,0xc6e11900,
195360         0x790b0105,0xe5de16a9,0xdb67f004,0x22b12f15,0x8a025d25,0x185fad45,
195361         0xdf0a1142,0xbccf6953,0xf45034c0,0x4c42129b,0x1c277bff,0x0f740400,
195362         0x280a9e18,0x6e440b4c,0x842aa2b4,0x767de8f5,0x05e8d94f,0x3de20ab8,
195363         0x20227635,0x5aff5859 },
195364       { 0xa8458e40,0x805acd20,0x149732bd,0x5a5557d8,0x5f1ca72d,0xc7074131,
195365         0x952b5323,0x7f2e269c,0x6494fadf,0x5c592556,0x1a7d2666,0x153b7acd,
195366         0x86fe2865,0xa6df063d,0x57d53b6b,0x1e91db13,0xe93ead01,0x9195bb89,
195367         0x2963bfe6,0x3d71e1af,0x88278886,0xfab2b9c2,0x3b859b6f,0x77836692,
195368         0xf7029dd1,0x6e695174,0x7b984561,0xc7987876,0x5907d849,0x64fb4f1d,
195369         0x88d8a977,0x3eab7e1c } },
195370     /* 188 */
195371     { { 0x52e5718b,0xc73a94b6,0xf4cee1e9,0xe3aefa54,0x553eedea,0x654e9e63,
195372         0x5f3aca1a,0xf2541e1b,0x0d083316,0xd7129489,0xfb7f950e,0x7965af63,
195373         0xc74e3e4a,0xd8fc9e0d,0xeaf79ebc,0xb4ee48d2,0x8b7787e6,0xa458a86a,
195374         0xf7cceaf0,0xd8c7621f,0xdf67980d,0x8228eeff,0xf9106727,0x210d4742,
195375         0xb07e3629,0x91f63501,0x7971e29d,0x441761c6,0x03a3b8a5,0xc0ccc65f,
195376         0x38e09544,0x3491da4f },
195377       { 0xcb062eae,0x6706d046,0x5d08776d,0xee7db735,0x292315d2,0x80de8052,
195378         0xc402bbdb,0x40785662,0x26ed3337,0x5f93525c,0x7d568ed3,0x6cea14d6,
195379         0x66888b1e,0x916a1189,0x5dc71675,0x0fbd5205,0xe4575df2,0x833d1077,
195380         0xec092335,0x4e93100a,0x6cd85389,0x2f9e1d01,0x43226368,0xeebd3725,
195381         0x1ba4cfd7,0x401d172b,0x574c5838,0x377dab9d,0x80d517de,0xaeaa6958,
195382         0x6ad15a18,0x0c843dfd } },
195383     /* 189 */
195384     { { 0xc9373300,0x455811ff,0x99fdc300,0x1c39332a,0x353cb655,0xe19bb81c,
195385         0x96a83d27,0x774b924a,0xb2ee3f1a,0xcbfc8fcb,0x010d56c7,0xaf278ec4,
195386         0xe0abaf79,0x6fde682f,0x7339aebf,0x7566d072,0x71205db6,0xbd35ad5d,
195387         0x7051c9d0,0xb5bbe694,0xd3a3067c,0x577db480,0x572d7530,0x2c70ff54,
195388         0xe06d853d,0xe8615aec,0x05abfb5d,0x71999ccb,0xea0a8ed7,0xeeefc96b,
195389         0x35f6df69,0x2dcc469d },
195390       { 0xc65f0e77,0xcca6cd06,0xbd71b14a,0xddcc7980,0x3c93cc00,0xb6221f8b,
195391         0xae8cbf57,0xddfcd5b3,0x76f8e63f,0xbc92973f,0x06e132b7,0xe9848a34,
195392         0xd51ec9e2,0x4cc59a03,0x3a33081a,0x9c9d32bb,0x80e8466b,0x00121052,
195393         0x1bbe7295,0xc2b0032a,0x24938448,0xdbfc6572,0xb6bba0ff,0xe972a0ce,
195394         0xc0a94802,0xf60c0a4f,0x599d8bc7,0xf62c41cc,0x312da0b8,0x820c96ee,
195395         0xcdbdf9fc,0x5a1a65db } },
195396     /* 190 */
195397     { { 0x42485684,0xbfba691a,0x29c470c9,0x613116b9,0xe62a0519,0xb4b01971,
195398         0x5ff499da,0xf3245aa6,0xa5238eff,0xc2ef87f4,0xcc9d5515,0xc16dc6ba,
195399         0x2dbdacac,0x5a7f227e,0xa9bbaecb,0x8dedaac4,0x2e7c9885,0xff308a6d,
195400         0xe6895593,0x4c6f2fc2,0x177e0611,0x3655f285,0x300b1bee,0xa63e8d06,
195401         0x13c17b54,0xbed0ce79,0xc4974262,0xca4abe35,0xbc4e4037,0xf4b44a17,
195402         0xefe5fbd9,0x5ae95099 },
195403       { 0x804f7455,0x122e5ee7,0x22066682,0x341a4997,0x7795e333,0x97d24c31,
195404         0xe48efced,0x12f4123c,0x19fbc21c,0xe8738d92,0x0663a3ae,0xbb3bdc61,
195405         0x8593a6db,0x3603d8c2,0xe3c1ac75,0x926227f2,0x5eaae519,0xfea92ac0,
195406         0xfd6812ac,0x5b596f0b,0xfc2a82dc,0x3ce7e844,0x63522b27,0x3840481a,
195407         0x52867895,0x836088b1,0x26588688,0x21ffb7cc,0x2f4a7cac,0x0ca33161,
195408         0xa3edd298,0x4110667e } },
195409     /* 191 */
195410     { { 0xc2d04b63,0x81830357,0xf4929a18,0x3fc5a34d,0x22d195df,0xc73bf6da,
195411         0xcb432473,0x14df2f89,0xe997f138,0x345afe5c,0x8b9604f4,0xd8e3f5f9,
195412         0x50c10ae5,0xad7942e9,0xeed25ff3,0xcefd5447,0x0e73c0cc,0xbf68e51e,
195413         0xab54fa4c,0x5b1ad591,0x12b61c8c,0x8bbc1105,0xb5abf760,0xbb932913,
195414         0x01e79649,0xdb1231be,0x040ccbe7,0xd0a83e91,0x90a96db9,0x3dde426f,
195415         0x34df11ea,0x1cceb645 },
195416       { 0x0c6d0f55,0x2d210c4f,0x9c673c9d,0x6cadf61b,0xa9ce3fbb,0xdd7f9919,
195417         0x93b063e4,0x135f494c,0x145a93be,0x580bdb3c,0x0f52ef7c,0x4d872332,
195418         0x8814bb6a,0x74d876e8,0xc7a97dee,0x4f6f723a,0x3e3cd833,0x7de2b8f0,
195419         0xae720270,0x6162f082,0xddfa486e,0xe88ec2d4,0x8d3a17c6,0xd965c859,
195420         0x3980171a,0x62e59e54,0xbbef6b22,0x0ab6285d,0x4d48b203,0x3cf45195,
195421         0x4ea25ea3,0x1f175233 } },
195422     /* 192 */
195423     { { 0x3467ea91,0x808a765b,0xfd2d9c45,0x3f4632ee,0x9cf2bc6f,0x7b75dc6d,
195424         0x359813ae,0xefc8d240,0xe44cbd8d,0x23ecb209,0x21525622,0x59ba10e3,
195425         0x3f1ee19a,0xfa14d934,0xfb0c48f7,0xdf97c21b,0xea30d437,0xc4e62890,
195426         0x651475c2,0xb286e2a4,0x126672a5,0x291f01e4,0x31aab3b8,0x9c6fda5c,
195427         0xe17d22ec,0xb7277a5a,0x914f0bad,0xbd88ed83,0x6a2392e1,0xd0b05d1b,
195428         0x65893c2b,0x4cb8af90 },
195429       { 0xbb4b1953,0xa2b02057,0xf597f6ee,0x4ce08b44,0x5e6412c8,0x854f5d9b,
195430         0xb3cd4919,0x1913262d,0x6e42bb5d,0x902762e4,0xd78e7f60,0x8355c8e6,
195431         0x38b6c16c,0x8efaa824,0xe550f618,0xd0173790,0xe57d778e,0x118af462,
195432         0x715b4714,0xa16ad5e8,0x41dea4f9,0x900596c3,0x280ca610,0x2a957c32,
195433         0x374c65a1,0x2faee800,0x50080414,0xdb105127,0xff080fa1,0x8c1db931,
195434         0xd79878fc,0x486a5c25 } },
195435     /* 193 */
195436     { { 0x941b4f36,0x0521e213,0xf803b4f9,0xbaacfb14,0x52a54ba8,0xfdf1e22e,
195437         0x8fe4796c,0xacfabbba,0x58dbacb6,0xae0788db,0xc19dfa51,0xdf98d736,
195438         0x35a716ee,0x155c286a,0x9c86461b,0xbe7d4676,0x63a64a5e,0x50b6380f,
195439         0x9f609262,0x14b41914,0xa2dfc5b3,0x0919a7d0,0xcef466ac,0xc454da55,
195440         0x6986aaec,0x93fa4a24,0x71a49ced,0x5090b171,0xc1fa75ad,0x602f1d6c,
195441         0x78e4c054,0x5d269f89 },
195442       { 0x14920419,0x3a74030c,0x90968739,0x0845d868,0xeeb70fa6,0x81b994c4,
195443         0xd9fc5bcb,0xabcaa06d,0xf58f8f2d,0x06539427,0xb1dc52aa,0x35c85f67,
195444         0x2c911baa,0x5a7d8d72,0xaec2d834,0x4041005c,0x7a8e5347,0xb5868a44,
195445         0x8de512c3,0x04ee180b,0x211168eb,0x4daa66e5,0x2317cd8a,0xc0bd5dab,
195446         0x61164df6,0xa1d4185d,0x1dbad7c9,0xacedca26,0x09b02683,0x0fe4b5ac,
195447         0x26d9550f,0x8ac9995a } },
195448     /* 194 */
195449     { { 0x2640a39d,0xb2c8dc9b,0xede0c9f9,0x21ff0b38,0xa1ecba0a,0x74f469bd,
195450         0x080d0417,0x8a902ccd,0xf4994604,0xe956fa32,0x9776ab15,0x348f85cf,
195451         0x0066f492,0xc21fc6ee,0xfeeef367,0x35b1ebfe,0x4613e5ed,0x7804581c,
195452         0xea6ba071,0xcbdfe8e6,0x950d73ed,0xddfcaa32,0x1da48889,0xc9747936,
195453         0xdbaffbd1,0xce867c8c,0x1cbaeae7,0xd267431f,0x897912c8,0x68255045,
195454         0xd7ea1e4d,0x0c7c1ddc },
195455       { 0x1ce963a7,0x53aa30cc,0xc4c5fade,0x7352f64c,0x2828afbf,0x2b9aa2f8,
195456         0xca212107,0x64273c56,0x85a576dc,0xaadd7654,0x90b5c77c,0x6196ac3e,
195457         0xd1aaf39b,0x20d43e9f,0xcd05cbc4,0xfc392062,0x4c0ff2fd,0x14163872,
195458         0x2ae821e6,0xcf32b8d8,0x3fa7a3f0,0x5f58f943,0xf644ca92,0xaebf1d2d,
195459         0x1918a75f,0x0c061563,0x6b876118,0x7989b5ed,0xad412441,0xbf342445,
195460         0x1df633ab,0x24ffc9ae } },
195461     /* 195 */
195462     { { 0x93c7cb2b,0x89fcdc05,0x590053fb,0xc1243b95,0x6182343c,0x601debcf,
195463         0x66c18a63,0x364546ef,0xec913287,0xa5290701,0xf9788c31,0xc35b8026,
195464         0x92d1f7d7,0x852b862a,0x0aa79728,0x1809cb05,0xa3cb2005,0x897d467c,
195465         0x9ef5b946,0xf20c77c0,0xf2241984,0xc3372c42,0xf35bb206,0xda053e0d,
195466         0xa9c140b5,0xbc26c6d0,0xcb56fb33,0x61cfcc0c,0x299b3968,0x1c3cf9ef,
195467         0x40621ba4,0x89e4d3d1 },
195468       { 0xa45a9be3,0xd35e80e7,0x07356fbd,0xc4daa578,0xb967bc2f,0x0186d62e,
195469         0x47cd16e3,0xa702679e,0x5f30ce9b,0xca2f1c02,0x1f864f50,0xf1205b46,
195470         0x85061d66,0x7fd6d797,0x8a08809e,0x47edc4f6,0x9a4d3ae2,0x5dac0449,
195471         0x6d1f9da8,0xf844664a,0xd7a83a71,0x9f30ce84,0xeaac33f1,0xe9382bac,
195472         0x948622ab,0x1f033831,0xf7681eb2,0xb037a4ba,0x99a1b5c7,0xd156a908,
195473         0xe6f1d0fb,0x675d3e6f } },
195474     /* 196 */
195475     { { 0x707193e5,0xd9767ffd,0x810358e5,0xe478aa91,0x328d8ef7,0x5634f9ff,
195476         0x6dbbd9a7,0x913a0ee8,0x7e215686,0x379b2968,0x89d9da38,0x903f410a,
195477         0x1b1334d2,0xd9f8d7b9,0xbd82efb5,0x9fe74229,0x3803c778,0xdb568b62,
195478         0xd3d25344,0x93e9a350,0x724497e8,0x559c35b0,0xa169e23b,0xc472d436,
195479         0xcc5b4c69,0x09864632,0x83c7f531,0x9f6d759d,0x1e497888,0xa91cf1db,
195480         0x60af1a4b,0x5f7f92fe },
195481       { 0x0545167e,0xf18a1cc6,0xaffa88e0,0x55ee2e02,0x432a7bcf,0x24cdff51,
195482         0xa7510866,0x7382da42,0x40511af7,0xe894c11f,0x2aaf1423,0xaa4e4e31,
195483         0xf63dd2ae,0x8c3d36f0,0xd7660635,0xfc5c9550,0x37ea7eab,0x01253731,
195484         0x39b950f6,0x2a5cd598,0x40e63442,0x95a0f601,0xf2ac7045,0x905e238e,
195485         0x446b0f73,0x44bacc0e,0xc448578a,0x4cd4206e,0xa5bd7803,0x367b1aaa,
195486         0x0a2b458d,0x25beced9 } },
195487     /* 197 */
195488     { { 0x0c33a8fb,0x079a7382,0x0f25dc1d,0xcfbf6cd1,0xc6d482b6,0x4ffc73f8,
195489         0x07bf844a,0x3e51f18c,0x599162f0,0xa7651236,0x14013811,0xac59a74e,
195490         0xe55018a0,0x957a6865,0xe3ca09b1,0xe1ec51bd,0xa960253f,0xbc0c7eb3,
195491         0x7de03f84,0xe83bfd14,0x52fbdb09,0xc0540ed1,0xcea15ec1,0x6ba52edd,
195492         0x4b261307,0xf3d30ed5,0xe8397206,0x9bd7bae8,0x096373aa,0xf20d8692,
195493         0xc3b0bf63,0x0a616a4b },
195494       { 0x6e1339c9,0x2075f3ed,0xbf8b00a6,0x7afaa072,0xbccd9b47,0xdfafec82,
195495         0x00ca54c7,0x4713158f,0x38bc31ae,0x449102f1,0x310dfc8a,0xaf98f158,
195496         0x59e954d4,0xc9ef2075,0xc527a0c4,0xe8021af9,0x7a192023,0x6e801277,
195497         0x7fb02377,0x635f538c,0xe8c9e951,0x5df1974f,0x15cc9097,0x0287faed,
195498         0xf7a5115c,0xfa0728f0,0x0fac623d,0x90dbfbe6,0x0311ba09,0xa8d40fd4,
195499         0x07c6464c,0x876d154e } },
195500     /* 198 */
195501     { { 0xc2d3ea8a,0xd3a4d6d2,0xa842600e,0x36be681b,0xe4070672,0xc53f100d,
195502         0x6a7d7a7b,0xe3e5b6fe,0x5d5e1a83,0x6e6994f9,0x76097c2a,0x07cacd22,
195503         0xa6791011,0x12d98dba,0x102e0e24,0xddfc4461,0xd493272a,0x4815dbc2,
195504         0xa9436696,0x7e38e64b,0x32b2bf90,0x4960eb1a,0xd928e28b,0xda457525,
195505         0x2a077c9e,0x72f75b39,0x7fd61d00,0x27760cbb,0x0f4b1456,0xaf235d1b,
195506         0xe76d1700,0x3040c23b },
195507       { 0x4efa9a70,0xb10dc55b,0x53e86610,0xd4de414f,0x09f8a27f,0x3d95c113,
195508         0x06661d3c,0x505109a5,0x60eb513e,0xcaa2994a,0x1e7d338b,0x3ee41537,
195509         0x4651e71f,0x4fd145fc,0xcbc313b4,0x51bbf838,0x1eb92150,0xb039e078,
195510         0x14bf5ac7,0xe8696b44,0x8be0d48c,0x2d667188,0xdd8f2b6f,0xbe93b2f5,
195511         0xeb8a7f8a,0xc1dfd1e7,0x90f751c5,0x862b3dd9,0xa32a74be,0x1eb1ad58,
195512         0x1ebbc9a2,0x5486d79a } },
195513     /* 199 */
195514     { { 0xa1359e13,0xcb2e34ff,0x28196051,0x202d8dbf,0x23564b5e,0xe95e023d,
195515         0x42f6ac12,0xfb1340b6,0xb653725d,0x543ba852,0x8d2466ad,0x81aedcd6,
195516         0x547c728b,0xbf780224,0x9569fb65,0x559f8a11,0xdfb22ec9,0x505b7a62,
195517         0x9eed5e52,0x07107540,0x299f6f11,0x9c899288,0x3db6f8c7,0xa7d69261,
195518         0xb3ca79a9,0x30eb7fb3,0xfb2160b0,0xcab99bb8,0xd28b409a,0xd2012568,
195519         0x5ac45f8b,0x380f1b0f },
195520       { 0xe6a0068f,0xc0b99e6b,0xc8a73753,0x4b67cf2a,0xb2faeb7c,0xa6c9a548,
195521         0x340260c3,0x7f417f99,0xcc0f739e,0x8ee56855,0x780949da,0xf08b510f,
195522         0x8d5c6eff,0xb1770fc2,0xfd96a7bb,0xb4f5abee,0xf2665a2a,0xa07b1136,
195523         0xb601dcf9,0x2fb380a4,0x162becc6,0xcc803614,0xee6b83b3,0x3498fb96,
195524         0xa8c17eeb,0xea9b0fd6,0xa177efc2,0x5834b5ba,0x5b110b3e,0x929044f5,
195525         0xebd7285e,0x4abedded } },
195526     /* 200 */
195527     { { 0x700ef376,0x3355e1b9,0x66cdabff,0xd56e5d9a,0x47e87646,0xb3dc2575,
195528         0x00f79369,0x28f44b8a,0xa0c52e29,0x08c32b1e,0x3729b392,0x5a78de12,
195529         0xb26d239d,0x4184519a,0xe0ce4a6b,0x23f6b4b7,0xacb2a9f9,0x235f6f8a,
195530         0xe2064a59,0xbb8bc454,0x1bf3062e,0x37efd034,0x94dff6f9,0x6bac683b,
195531         0x8aa7fa06,0xc3364b1e,0xce0b3745,0x0616772a,0xd1e3fb0f,0x46f08d08,
195532         0x18e132d3,0x6a20abb3 },
195533       { 0x6a85cbc7,0xea831016,0x934f9aa7,0xd0990946,0xe778f1b3,0xc2211088,
195534         0x2247b799,0x7ea4ff8f,0x454484ce,0xb3171d71,0x4f98c364,0x29403949,
195535         0x97df1458,0x5da911f3,0x09439116,0xa6b58093,0x174238bc,0x75f9509a,
195536         0x8209758d,0xfeb51821,0xa47925d0,0xae0c6021,0xaf8a315e,0x0e946694,
195537         0x6bad04b7,0xae7af8a3,0xf072447d,0x44c15e7f,0xa5456ffe,0x5184668a,
195538         0xbf36b977,0x45e353a7 } },
195539     /* 201 */
195540     { { 0x93092f71,0x76056764,0xf5b92d71,0xeb66b6c2,0xe2c8b6c5,0x9db3149b,
195541         0x20c0363e,0xf62f583a,0x03cd7097,0x688acd33,0xebb916ac,0x85d0c0f8,
195542         0x84c19b0e,0x1bf7462c,0x7c4a6ad1,0xc76ed5f9,0xd119f369,0xec8b88ba,
195543         0xebe50b83,0x59b8371b,0x866706a6,0x0cc69508,0xf8373d2c,0x531c75a3,
195544         0x2a5a02fb,0x4e1cd3a3,0xda39a1d0,0xe8274778,0x75da333e,0xedfc5bbb,
195545         0xca79bd36,0x15941f24 },
195546       { 0xa77dd512,0x42e8c0f8,0x1dc365f6,0xa91b59a7,0x08753862,0xe80d14cd,
195547         0xd272faca,0x1624230d,0x4027cb5a,0xeea3ec16,0xc1ef9f03,0xc1700b59,
195548         0x0da3148d,0xd411c127,0xc4181af1,0x801ee448,0x9e3a900b,0xedf28559,
195549         0x0d09affd,0x5d67b0bd,0x8b370024,0xd839df96,0xe6f836b8,0x3b6307e0,
195550         0xbd3201c9,0x5382e588,0x7a1d02bb,0x636d8a6b,0x968641e9,0x70b7db76,
195551         0x118fad03,0x6d17c34a } },
195552     /* 202 */
195553     { { 0xc181c99b,0xcf608841,0xc87bdcaf,0xb65dc901,0x3720dabe,0xb460b447,
195554         0x5377515b,0x4c79c396,0x0a96c277,0xd447f22e,0x2ac0f440,0x0d952130,
195555         0xc90583ad,0x8330b26b,0x928904a0,0xe25e977a,0x85c50b18,0x1deaffd9,
195556         0xa5ad5f6a,0xcf4dbcb7,0xc8a37ed5,0xcbcd0019,0x1e9850b6,0x7846dd90,
195557         0xb0b8e605,0x1ac8194a,0x34132f90,0xb9728571,0xf56ee28b,0x4ce9f149,
195558         0x3e9e1d4e,0x1ab9b5a4 },
195559       { 0x314fa7a3,0x206dab92,0x478ff963,0xcc4af0f0,0x904d9fdb,0x4cce1713,
195560         0x12c045fe,0xac20a2eb,0xfd8f6d7d,0x44fc5478,0xca7b6ffa,0x886e72c5,
195561         0x6fd6f758,0x7fa4529b,0x92a820d5,0x4df1d1b1,0x2789f149,0x3d812f9f,
195562         0xaabb53d2,0x9842f083,0x2a03ab32,0x2648539b,0xb1512502,0x631ce090,
195563         0x731f6bd5,0xe1294d15,0x9436e634,0xb229361d,0x3ca966af,0x8c4281c4,
195564         0xc21ab3ed,0x24b34956 } },
195565     /* 203 */
195566     { { 0x659824e2,0x49bdcb86,0x4e13e74c,0x6dc4ce48,0x6bbe1eea,0xa4c01a26,
195567         0x1e3ec457,0x47b2b8e7,0x2f5a8e4b,0x7e8b15e0,0xe333530d,0xe81eb6e6,
195568         0x17a45202,0xacba369e,0xd70e4c9f,0x81241431,0x3e12beb8,0xc190af4b,
195569         0x11f486fd,0x53270523,0x29fb2bce,0x9f6c41e1,0xb70f6c08,0xbe6287eb,
195570         0x3feb4477,0x1479850a,0x9bcf18bb,0xfcfdfb11,0xda80d040,0x925c292f,
195571         0x7e3c5bf9,0x212d65e5 },
195572       { 0xca15cf08,0x23adb386,0x81e172eb,0x4dfa4ac4,0x4d42d0c0,0x9d1dbf93,
195573         0x74404dc7,0xd9cf6073,0xe932bfcd,0x60508441,0x1c682a98,0x9ae910ca,
195574         0x41ac1cc0,0x9528fc18,0xdbbed630,0xe6a120ae,0x30ccf250,0x94e0e1ec,
195575         0xe58bbf2f,0xfe84ba54,0x9faa4415,0xc66d0b4f,0xecee7ce5,0x0c58f1e7,
195576         0x6fa6873a,0x7a1d43eb,0x399f1348,0x96c6c5a0,0xe6727ab7,0xe6ef9aaa,
195577         0x9a5c2447,0x66afa554 } },
195578     /* 204 */
195579     { { 0xc980e91d,0xda5aaba8,0x6ac98efa,0xa93cf509,0x8da32662,0xb0990e0a,
195580         0x0081453e,0x01d21530,0x3d71de84,0x2bb0d33e,0x3e19a012,0x465f6d80,
195581         0x78a838e7,0x5902ff4c,0x1931348c,0x74e2afb7,0x9cfb057b,0xa4932757,
195582         0x3ad03f8f,0x761ea642,0x58ffa40a,0xb7d4c245,0x77a87e30,0xb5e9c0d9,
195583         0xc9c84d26,0xd1c5edba,0x3d1963a0,0xeca8839a,0xebf6bf0d,0xbc6f2f35,
195584         0x0d58abdf,0x01ef0631 },
195585       { 0x3ecdcbb0,0x2bf90316,0x27c1c955,0x19e2d728,0x9575c930,0x9e527030,
195586         0x96983930,0x0dc1c5a9,0x7cd082df,0xef9f80ff,0xdf97e051,0xcd915075,
195587         0x9cc61b55,0xf286fffe,0x80f24cc4,0x352db38f,0x36523ae3,0xed9b99ec,
195588         0x10b104a9,0x109a8ca8,0x305203ad,0xc2700fe7,0x769400f5,0x2a2ee24e,
195589         0xee0c452c,0xd595d399,0xf7f02a41,0x0ab75d6a,0x0db730b7,0x34108099,
195590         0x5e8d1202,0x0e4f5ffd } },
195591     /* 205 */
195592     { { 0x0ff14c38,0xbd1c6444,0xaece11f2,0x9a5b59fa,0x22af6330,0xaa4605a7,
195593         0x82af24ee,0xddc9f65a,0xeb9a1159,0xf4ee4bfe,0x74e84eaf,0x2463d076,
195594         0x0e0baace,0x88cbe1e0,0xd5fabdcb,0x7ca568ea,0xc57eb99d,0xbd80d524,
195595         0xe9be9873,0x9c46572c,0x7300b85e,0x918a1dcd,0x40f54176,0x49221312,
195596         0xb5b14236,0xf7e324ff,0x2434f16a,0x40dda501,0xa133d97c,0x08833421,
195597         0x0876f020,0x33d41161 },
195598       { 0x9878e5ec,0x7531a36b,0x46918232,0x5de3e321,0xd0a30464,0xd15f9a33,
195599         0xaa173659,0x734c1b87,0xf925d4fe,0xac2094a2,0xc262b0f4,0x43c965a1,
195600         0x447d5cbc,0x759c903e,0x05239300,0x92af215e,0x1f593f34,0xfffb6d5f,
195601         0xc3cddb5f,0x65943b4b,0xbfdd5408,0x9d03a29c,0x198d76c0,0x8f7cda6b,
195602         0xc0f27b59,0xc0790a22,0x8cb58ccf,0xba557a84,0x76c54fdc,0x5922052d,
195603         0x47b6b466,0x2d3de7aa } },
195604     /* 206 */
195605     { { 0x65add3b7,0xaade7462,0xabf24c2a,0xe5888f35,0xe1a57d93,0xd41549ca,
195606         0x2c76f7bf,0x0e22e18e,0xbe3202b3,0x67f288ea,0x1d1d0f0a,0xb79a66ba,
195607         0x2881ad18,0x0e0ab749,0xc7adb0e9,0x7d424086,0x2842132f,0x870c32c5,
195608         0x58f9a09e,0x858477f1,0xec025589,0x422a9372,0xa5098777,0xbe428c5c,
195609         0x57660058,0x45b79564,0x957f37cf,0x6c7fc631,0xd6316289,0x8b7023dd,
195610         0x5b1c12a6,0x47003bb6 },
195611       { 0xc91c1c96,0xd99401c1,0x27a12970,0xaa5dcdf9,0xc3c29107,0x3ab92e17,
195612         0xa3fe4710,0x26fce8f7,0x4ee998ee,0xb0d09d5e,0x8e3a41f8,0xafa62204,
195613         0xa26ca506,0xb1c012a5,0x99b57252,0x2c6f734c,0x512f7fe1,0x1093d79f,
195614         0xacee19a6,0x2f30906e,0x056d1ea6,0x6bff8381,0xeff35f21,0x61c75856,
195615         0xc1ad2224,0x6e07e978,0x6b20fde8,0x2cca6ca1,0x633fe81b,0xab4d6d2d,
195616         0xb06a2ce6,0x73dff504 } },
195617     /* 207 */
195618     { { 0xd8e20fb8,0x8b615805,0x82b533f0,0x7c6873e4,0x56a854ca,0x5205f001,
195619         0xcb369211,0x87fec6ac,0xc7f092b7,0x1fa3c0ec,0xe845fe4c,0x5b36647e,
195620         0xf8b1f112,0xd4781e85,0x8b0f1a6f,0xc6526839,0xdcb8eb92,0xceeb8c6c,
195621         0x8e5f6d52,0x133f0ead,0xc8d934dc,0x31883e23,0x428ac45a,0x214ed5bd,
195622         0xdbbfca85,0xf77ca492,0x07e5ae13,0xdf4113fe,0x72ab05fb,0x63e4a0d2,
195623         0x7148f535,0x7544d0b7 },
195624       { 0x80797ace,0x4fe8d134,0xaf86d97e,0x216d6aa0,0xef5a68fc,0xdbf0a688,
195625         0x9f9b2684,0x18b26f45,0x8999d2fc,0x52fefcfa,0x62423955,0xd5af8d82,
195626         0xf63a3780,0x8f123469,0xdcd4feaf,0x2933454f,0xa73b5d09,0xba8018b7,
195627         0xe5552c18,0x9af1f276,0xff26bb1c,0xc5d4773d,0x06dd4f44,0x9ef49410,
195628         0x5f39ba49,0xad8f12f9,0xf66ca4f2,0x5767f6dc,0x7922f59a,0xba8773f1,
195629         0xc1e42d49,0x220081ea } },
195630     /* 208 */
195631     { { 0xba37a0ba,0x3043d573,0xdd176df6,0x05a431bc,0xc42070f7,0x03322cfc,
195632         0x67c2d109,0x5cabd30e,0xcbf8bcfa,0x362c95de,0x7787b10b,0xd767d277,
195633         0x6ec05e64,0x612c915e,0xce69c30e,0x9e669631,0x682e2635,0x27c9dd8f,
195634         0x95ffcc38,0x79021f12,0x8a2adca2,0x06a8ee79,0x4b5d500a,0x8e00e784,
195635         0x8d80d6c5,0x87746fc7,0x915f10cc,0x246053be,0x219f6fd8,0x844e328b,
195636         0x11bd3733,0x620541ac },
195637       { 0x509e5a29,0x0f7fd382,0xb432531e,0x8748d7d0,0xcd3883b9,0x8f749354,
195638         0x8bfbb17a,0xc6b8ac74,0x05f2d2c5,0xa4616a66,0x1bcb1b83,0xb3d96625,
195639         0x2fee265a,0xcf753104,0xdb225058,0xc70d73fb,0xf0c2d556,0x1211d434,
195640         0x54b259b3,0x862061d8,0xc42b3f7d,0xffe4606d,0xe86a4949,0x4c5c8585,
195641         0x160eedac,0x04ddcc8b,0x568e2420,0x1804ce67,0x42141656,0x91f3855a,
195642         0xf932be97,0x7f378198 } },
195643     /* 209 */
195644     { { 0xdfa6639a,0x9a374bda,0x02ab7391,0x0cbd48d4,0x47031e2d,0x5c5ef236,
195645         0xd0599d1f,0xb49ee2bc,0xe0d38443,0xd285eb60,0x269392e8,0xdbbea92f,
195646         0xb8bc538f,0x91455fbf,0xe469b768,0xae259ff1,0x41de5682,0xc1cecb1f,
195647         0x9952d1ae,0xc876f071,0xe7bf7446,0x1ce25181,0x282ad2f1,0xcb93ad86,
195648         0x6ba4ef67,0x8fa3cd31,0xe507aa3e,0xfce68a04,0xa61bb608,0xced74170,
195649         0xf6ac10d0,0x6de716b3 },
195650       { 0x172d6dc5,0xd4e58d04,0x6397c65c,0xbed2cde6,0x0c9eb4e8,0x7ae77e18,
195651         0x75fa2edb,0x56275468,0xa91e6738,0x4b30324e,0x235c8b2e,0x6023a856,
195652         0xa8f92887,0x9df6d6c2,0xf6f5e8b5,0xec2c185f,0x3ad5748a,0x7892e12b,
195653         0xd54aefbc,0x7aebb4f2,0xee868821,0x14915448,0xb1d9bd5b,0xa26c5f71,
195654         0x2ff00df7,0xe5ccd166,0xb95b1dee,0xebc99f17,0x3fe1f774,0x90983616,
195655         0xbb3d25b0,0x51f90830 } },
195656     /* 210 */
195657     { { 0xf2922461,0x49376fa1,0x1650d0d1,0xdbb1b1c3,0x0dd8608d,0x92b91c33,
195658         0x36b89906,0x3e612c4b,0xdf560052,0xe1977b0b,0x636a2545,0xf8afff70,
195659         0x11723d8e,0xcda7d278,0x81bde7ba,0x0b0bc4bb,0xed2a578e,0x3cb080b2,
195660         0x171b2e02,0x5bda0d0d,0x941bb9ae,0xf6df38cf,0xc14a65c5,0x85dd81db,
195661         0xc19dd98e,0x7f98c82d,0x52206f93,0xc613747f,0x5f5bbe78,0x9e13a2c2,
195662         0x0aa34be7,0x5eed218e },
195663       { 0x01d4dc0b,0xe1565754,0xf566bb07,0xa1ae5f27,0xb82225d5,0xe985ebeb,
195664         0x1189ec6b,0x5f3ad21c,0xecce4d9d,0x17da518c,0xd6b65b59,0xc84a2d3e,
195665         0x8ffa771c,0x7f988175,0x2ac69a7a,0x50d6ae12,0xc6e6846d,0xcb7f30b1,
195666         0x5bd0bb13,0x8c023a60,0xd73f2407,0x9a10fecd,0xe5f0a996,0x8c5158cc,
195667         0xbd8f5806,0xd26bf615,0x915a46e1,0xaf32ea87,0x0287d308,0xeaf74e81,
195668         0xa6264254,0x8c14ba06 } },
195669     /* 211 */
195670     { { 0xb17ee201,0x0c877895,0x88e57a77,0xc05aa471,0x97822456,0x19c3e763,
195671         0xc9c3ba1d,0x0be6f8c0,0xb4389ebe,0xfe85f4ff,0x0ce7fbb6,0x538bccce,
195672         0x65266c64,0x876eab2a,0xcf9a3842,0x5c9ac690,0xccc8f981,0x9f5cf3b1,
195673         0x9cf687de,0xfa17be6a,0x83835c15,0xfcfc10fc,0x150ef2eb,0x086b0fdb,
195674         0x884a52e6,0x9f97ecd9,0xb0cd1eb8,0x416e6fa2,0x3ecc03ba,0xe2bd1599,
195675         0xeabb165e,0x645c0a5d },
195676       { 0x50aa7e31,0xd94c4205,0x2f851da5,0xaec8df0c,0x3c726e6a,0x99646909,
195677         0x2619bf9a,0x72dbdc36,0xe253fbd5,0x1b4260e0,0x8c709e06,0x97c259fb,
195678         0xcddaec5b,0xfabf7cbb,0xe4b703e9,0xb4d5e8b1,0x0734efdd,0x1b06e56e,
195679         0x1f55f8a5,0x02d4a4f9,0x3f565c8d,0x7f8608ba,0x816d1d94,0x822f47d2,
195680         0x5ce7b136,0x0cc36156,0x31d04242,0xe46ee5ef,0x683567f6,0xb2a65f70,
195681         0xd2fa6c91,0x27e9ff40 } },
195682     /* 212 */
195683     { { 0xd7e952e7,0x75251893,0xc735bf18,0x15b30583,0x96fe0491,0x732b5992,
195684         0x806d2fca,0x27451858,0x1b885ed9,0x71ab76a0,0x6d9f55ec,0xbdce9d97,
195685         0x48f2ba9c,0x3da60b20,0x592b132b,0x6977c086,0x099051d7,0xb6dca9cb,
195686         0xd188ae25,0xd9c2ab23,0xe20aaf3d,0x9f469f3f,0x5aad74d0,0xdbd1f7cf,
195687         0x22a9eb3b,0x3d5efe5c,0x137010c4,0x8c5edfa2,0x57870260,0xada2217b,
195688         0x3dac9776,0x4feee567 },
195689       { 0xb5d3d780,0x30e18d52,0x07166744,0x4dadb5d3,0x5a742156,0x320d386e,
195690         0x8d6bbb86,0x5d8c290e,0x2d263dd1,0x981a4323,0x98984636,0x33d0e7ca,
195691         0xa519acb1,0x5138784d,0xdddc81ff,0x832e3fab,0x3199a43a,0xfc278594,
195692         0x32743163,0x5b4cabcf,0x74f94fa7,0x9fa010bd,0x5694a627,0xc28a743d,
195693         0xcb657a24,0xc1d2a888,0xe86a25ea,0x7eef2503,0x04c561ff,0xed11a5d3,
195694         0x9c9ede0e,0x4fe818e7 } },
195695     /* 213 */
195696     { { 0x7fc1c7ff,0x00252c9d,0x9fa89ad1,0xa9bd419d,0x4064e9cc,0xc93a124a,
195697         0x43942ecc,0x384cbcb8,0x8749695b,0x004c21fd,0x421165bf,0x69c81d9f,
195698         0xdde01102,0xe2325628,0x5a9b004d,0xec937457,0xf6dcfc21,0xfb3346bf,
195699         0x4d372c7d,0xac4da64b,0xf20494e2,0xcecb7ad3,0xe867c150,0x562c41b5,
195700         0xc2b723d8,0x299395ce,0x7ee53231,0xc91adfc5,0xf10b6597,0xe06f1161,
195701         0xb74d3ffc,0x81915529 },
195702       { 0x6ed9d4ee,0x8ec12431,0x689aff01,0x3dffa154,0x2a89a3f4,0x4aba349f,
195703         0xd467efb2,0x2db1e8e2,0x039102e2,0x18dea354,0xe52f082b,0x422ab853,
195704         0xed36dd47,0x7130a2c1,0x0295d1ee,0xca60e86d,0x7c7f5ad3,0xe6ac6808,
195705         0xde864658,0x0f83cecf,0x461d1265,0x72e66c21,0xbd385099,0xfeef4150,
195706         0xa6632289,0x0f183f3a,0x792dc795,0x275454be,0x11367702,0x2744c11b,
195707         0xe8ea6ef3,0x7d06bcc7 } },
195708     /* 214 */
195709     { { 0x7090212f,0x89285942,0x5521e844,0x691b7d4c,0xbe2dbb92,0x4c038422,
195710         0xbd81f880,0x317721ed,0xac89bc36,0xc136cbee,0x7b8f004d,0x4f71b60b,
195711         0x4e218ab8,0x269132d0,0xe6cc814d,0xb0e2496e,0x75fadc15,0x0b2ce317,
195712         0x66d223c5,0x82e3c084,0x4c612f8b,0x9721caa6,0xa4b65355,0x59a751eb,
195713         0xc7d3d9d1,0x3433aad5,0xe80d4246,0x1e61b9d2,0xfc673caa,0x149f655f,
195714         0xd0f9cb92,0x48b52b99 },
195715       { 0xefdc05be,0xa3915399,0x13e095e9,0xde70db18,0xcddb3fda,0x447862e9,
195716         0x1a009451,0xa2b03162,0x23920ea3,0x4b27980c,0xa23b8feb,0xac5394f1,
195717         0x3e5616d4,0x163f7256,0xb714219a,0xaa0ff93f,0x93d62474,0xd26f96d2,
195718         0x7dcfe276,0xdd212ea8,0x47038d15,0xab27bf2f,0xf418168e,0xe58c8325,
195719         0xb32a989a,0xe3704222,0xbfc9f13b,0xa3694390,0x0d0684ad,0xf16e2606,
195720         0x9d8c76ec,0x17c0de87 } },
195721     /* 215 */
195722     { { 0xdcc01958,0xbca5f453,0x1ce88393,0x7d945954,0x561f5b6d,0x5e6350a1,
195723         0x7e2d36bc,0x291c3c86,0xa5ac3a6c,0xf6c7ed84,0xd98006cd,0x7913c40b,
195724         0x5671ec3b,0xf78bb087,0xb43e89a9,0x1c928f6e,0xae1ea1ed,0xfdf28df3,
195725         0xb924b2b5,0x62bba5b1,0x1a116e05,0x491d2705,0x167ed3e3,0x08ec02b7,
195726         0x5bc0b046,0xe291cf7b,0x8c5d7f59,0x30e50169,0xf5c799b7,0x0c7c350d,
195727         0x0ac6e1d7,0x6862b9e2 },
195728       { 0x9ffa1f64,0x56c6f4e7,0xa1e24349,0xfed6a91a,0xcdb75232,0xe9a0ee0c,
195729         0x0322d607,0xbfc90b37,0x462fef87,0x29480ad2,0xc2bfcf34,0xfc214969,
195730         0xa539e38f,0x6e5211e0,0x12a5149c,0x2a59ec26,0xd706b532,0x195fe212,
195731         0xe99c8429,0xf77fb108,0x5dc80482,0x74ceaea3,0xbd92d298,0xa5a6030b,
195732         0xaaea15ee,0xad42dca5,0x4987109c,0xd6ac3bc7,0x290af649,0xc64e1c40,
195733         0x51f8de6c,0x5093fa2d } },
195734     /* 216 */
195735     { { 0x4c2d553b,0xc4cf3280,0x3b966c29,0xdc1abe22,0x2296914a,0x556a549c,
195736         0x999976c9,0xd8c9f8b5,0x776e83f3,0xc22c57bd,0x7c85ec57,0x4f2942ab,
195737         0x6e2c61f5,0xef3407e5,0xf213db48,0xf005e8ca,0xf32698c7,0x470c853d,
195738         0xcac0a54b,0xe6f488d7,0x60b7501e,0xb6bd6bed,0x714a4bd9,0xf0103106,
195739         0x6e098894,0x5285bc3b,0xf5f92a00,0xec06741a,0xef7ef24a,0x32f16426,
195740         0x6c77a438,0x12f9c44d },
195741       { 0x83313a1c,0x1951e964,0x33c58b37,0x98edd3da,0xc7ac4044,0x4edbbf52,
195742         0x0dcb5ee8,0x866ca6f7,0x6dd422f8,0xec0ae8f5,0x0661ec2e,0x1077bc54,
195743         0xd422523c,0x6d39913a,0x58e7cb3e,0xd105e1e8,0xc979bb45,0x47c9397f,
195744         0x0997b592,0x3221d4a9,0xe8952fe7,0x0ef628a3,0x4e946241,0xd08d5827,
195745         0x59780f40,0x64cbed0f,0x08e110ec,0x13d7c227,0x7679b1a3,0xd186d866,
195746         0x26ae1d18,0x02f75e4e } },
195747     /* 217 */
195748     { { 0x47f307d7,0x1b637ebf,0xd0141477,0x6b644a6a,0x2e05a80c,0x82a33d65,
195749         0xfed07b31,0xc8f1a0f3,0x3696e597,0xc09ee7f9,0xc7ffc01e,0xcdaa7ec3,
195750         0xf8f373b9,0x549f88fe,0xc3bb8989,0xc88d1961,0xdfcaa7b7,0xd92a4fe9,
195751         0x3ae4ab20,0x12ff9ee2,0xf5ecb1a5,0xf5aea641,0xe32fb47d,0xe769237f,
195752         0x25d085c0,0x96a5c420,0x26c755a2,0xdc912558,0x9bce9723,0x580b985f,
195753         0x63961941,0x72b1b566 },
195754       { 0x790e5558,0x9d708a08,0x0689af80,0x98536041,0x42313b5f,0xe85e7b8a,
195755         0x55a49d1a,0xe6ba1292,0xac371b0b,0x5e76c4b0,0x938e6e19,0x58504f39,
195756         0x60ae9a21,0x8dd41422,0x968485ce,0xd8b04e9b,0x887efe43,0xf94c4ba5,
195757         0xf11c5e73,0x11268e67,0xcf6b99c4,0x92623e28,0x7a0a9662,0xf2d0aaa8,
195758         0x4ca02ed3,0xb266772a,0x2d63b551,0x68ee8e4e,0x2e78b5b5,0xcdebb299,
195759         0xe17225ad,0x5df19216 } },
195760     /* 218 */
195761     { { 0x8df2e7e3,0x20027e1e,0xd8da07de,0xb183cc68,0x4b4ae694,0xce35ba69,
195762         0x3ca62e88,0x896d97df,0x52efed2c,0x3de4713b,0x26bd084f,0xd006c40e,
195763         0xfc81923b,0x1e9b71bb,0x1aacc6b0,0x9991c7b6,0x8f656840,0x650c9364,
195764         0x87f47524,0x138561d1,0xbffd3ca2,0x610f2b11,0xfa191418,0x96915faf,
195765         0x955e5309,0x8f1236de,0xa1872d79,0x613cbeea,0x66a2a48b,0x7f7b44ea,
195766         0xe0a89c32,0x452265c2 },
195767       { 0x25430010,0x4ad5ec79,0xebd090c0,0xcac786ff,0x20a9d3f5,0xa5f9f4ff,
195768         0xa3edc65f,0xfcbf4112,0x0cf3eb11,0x8824839c,0x8aa5b700,0xb8dd6d4e,
195769         0xb7568ab8,0xe2271dfd,0xb744560e,0xe43ec373,0x1cf75296,0x78eaf926,
195770         0x3fa96d9b,0x1809ae0e,0xdc25dfd5,0x0b312d2d,0x6bab7711,0x6b8f78b4,
195771         0xb5ecf1e4,0x069efc8d,0x609fecaa,0xc1952bae,0x5f4dbde1,0x43e302ed,
195772         0x1e078555,0x14b02bf9 } },
195773     /* 219 */
195774     { { 0xb87e5b57,0x2c71c768,0xf531a557,0x0bcc78f7,0xf7597dc8,0x4ff93f8b,
195775         0x139e175f,0xb28e026d,0xcb94ca6c,0x6b83b727,0x0079f7fc,0x2eafe3b2,
195776         0xcf3bd170,0x2aca54de,0x6af0dc6c,0x17c4133c,0xccf5e35e,0xbea1e665,
195777         0x345505c6,0xa6691a48,0xe6100b89,0x2633abd0,0xc17d0388,0x966c6706,
195778         0x1a0cf90c,0x7aefffbe,0xd0add64c,0x4d847be7,0xaea2aa46,0xd49bcdfb,
195779         0x2cc7d0a5,0x85e07e74 },
195780       { 0x0bc25bca,0x23aae0a6,0xe44f64ec,0x6e8e55f1,0xb607b773,0xe1e696d8,
195781         0xd3005909,0xaa90a746,0x2cbc4990,0x072b1ccd,0xc68e2f5d,0x0d0fe6c6,
195782         0x53e28ec9,0x920ec5f0,0xf0040cc1,0x79b21fb4,0xfcc4a2c7,0xa7375bd3,
195783         0xe1bac7dd,0xf5f5def9,0x35c0f8d3,0xdc315d79,0x2cacd318,0x7117c170,
195784         0xe926f71c,0x6f2823c4,0xed02f39a,0x38db58bb,0x7db69323,0xe5b49231,
195785         0x8d49f430,0x0964039f } },
195786     /* 220 */
195787     { { 0x56999eba,0x21774f16,0xb1de6305,0x3d8ee287,0xde0b2669,0xd81af726,
195788         0x3f8942a1,0x37446939,0xea03e13c,0xbcf6b615,0x94e273cf,0xd30c0c35,
195789         0xc6725c56,0x4fd33a56,0xa8be97a2,0xa57534ad,0x7c22a251,0x799242a6,
195790         0x9d0c5c49,0x4e51bdb5,0xc6a42768,0xd7cd76cc,0xd426bf59,0x914097ac,
195791         0x66e9beb2,0x59404a2c,0x5c96e3e9,0x4738fe98,0xaad666d0,0xbcbb3e0e,
195792         0x63bc5e56,0x626b0fd2 },
195793       { 0xe1a1ec42,0x47217dba,0xab5acc50,0xaa6ae7db,0x865331d1,0xb7e1ab1e,
195794         0x3d30126f,0xb8453070,0xdee61851,0x280649e0,0xea689544,0x8806f4a3,
195795         0xcb56f632,0x4bbe43ad,0xbcaff94f,0x036b9bda,0xbd0637be,0x0d941e65,
195796         0x686f3abb,0x82179d44,0xaad6afd6,0x1486912c,0xff7e1534,0x9a3b891e,
195797         0xeb86fd96,0x88c426ce,0x117928c3,0xb56e6a81,0x96399e00,0x933e7135,
195798         0xa17b6ac1,0x09bbddd9 } },
195799     /* 221 */
195800     { { 0xe4fd3673,0x75e39c1d,0xa65c8e07,0xf880d9d1,0x7289c7fe,0x4725c1dc,
195801         0x3529d200,0x5b6735ee,0x3c747af3,0xc1f8f2ed,0x912efdf5,0x5cf3998f,
195802         0x49859c39,0xed722618,0x0e69795d,0x23793a2f,0x86b1d2a7,0x8a6ab8d6,
195803         0x22a882e4,0x00c815de,0xf9db8d7e,0xbe77d6fc,0x02267547,0x0886fb32,
195804         0x49c10edc,0xb62687d4,0x7c83ed4c,0x9f1c3e17,0x5af366ea,0xe6d5d7f0,
195805         0xd1efad24,0x2eaa01b8 },
195806       { 0x1f357c74,0x5e47fb70,0xa9e3b794,0x93085c4a,0x6e85a905,0x4f098733,
195807         0xbe0244c9,0xf53808ff,0xa3b5660d,0x91dddf93,0xf3b95ed6,0x8b76377b,
195808         0xbb3920d4,0x91b911b7,0x86a13cf3,0x7ccf08bf,0xea018e58,0x53ed8f97,
195809         0x78c55194,0xb1ea4343,0xe0d2d5a6,0x8e6adde9,0x9b96259a,0xfc2b248f,
195810         0xeef17ddd,0x96ebceae,0x557f9c85,0xf694b443,0x07d5bba8,0x48cd150f,
195811         0xb4c1986b,0x02d31de9 } },
195812     /* 222 */
195813     { { 0xde79499d,0xa6bb9e1e,0xfd0fc2ad,0xf6ca8ff8,0x1a7d9356,0xbec0f8e8,
195814         0xe8f06327,0xbc3d1c9f,0x3b300beb,0x805c7217,0x413c181b,0x00420a08,
195815         0xf0ca9d01,0x9e9a167e,0x1aeeddd6,0x076c909d,0x8e3a8a72,0x64a1997f,
195816         0xa77b429e,0x3ce7f7a7,0x5c94d3e9,0xaac0fbf4,0xe6d48407,0xf37694a7,
195817         0xa91921e7,0xf56679e2,0xee1dbbd6,0xf23fe0f3,0xcbf9fa99,0xc7917566,
195818         0xe0f4d765,0x965860f2 },
195819       { 0x7fa5f79c,0xe734702b,0x5af2d26d,0x930bd426,0x6c73e0ce,0x45bd8b98,
195820         0x4ee44a2d,0x7dbe7bed,0x956c8a1a,0xc129e024,0x77cdf80e,0x6fdc05ac,
195821         0x589ca59b,0x70a6ba2b,0x999825af,0xfc484021,0x7a23f0b6,0x1d284b54,
195822         0x28a0a8af,0xb1da10a4,0x2b2af6d8,0xb1eb1b31,0x33935ee3,0xf051443a,
195823         0x8effa6ec,0x7a07eb26,0xd662654c,0x16ee4086,0x4549ee4c,0x7a7bc501,
195824         0x1fa98a52,0x65081032 } },
195825     /* 223 */
195826     { { 0xb67ed9b2,0x49f0e460,0xc36d93d2,0x0cda0fd0,0x88c75e1c,0xbb5963e9,
195827         0x614bc0c9,0x757bbe93,0x9a768605,0x9a9b8801,0x48edc544,0xa8b7e2af,
195828         0xb51a5985,0x9e77ed9e,0xebbf024c,0xdd025274,0x1545c636,0x598b6288,
195829         0x4800dba0,0x39bdaed0,0x81e2a23a,0x7fc20139,0x550cb4f2,0xdc66fd5c,
195830         0xb52068c7,0xad27032f,0x8169fa15,0xc9a0bcae,0x3a7ca8a2,0x60606f21,
195831         0x9862652f,0x98295046 },
195832       { 0x2e11c128,0x3e374600,0x0e6dca7e,0x80dfae5d,0xd9552264,0xe44016e2,
195833         0x880b7143,0xf65f88f2,0x526b881c,0xca3d28d4,0xdfb86afe,0xf9c59dd1,
195834         0x4c74f958,0x548860c2,0x9cb69f4f,0xd06ea43c,0x7334ecec,0x5343c9ae,
195835         0x35329713,0x5cc2ccd6,0x5f3a6c0c,0xa95ff403,0xb372653b,0x2e01a1cc,
195836         0xa250523d,0x31510fdf,0xa6227eb2,0xeee538e2,0xca23cd10,0xeadfc8a0,
195837         0x3e78f54b,0x4b7e6e1b } },
195838     /* 224 */
195839     { { 0xdb5f928b,0x79c9076f,0xb7347cec,0xe6250bb6,0xac00ec41,0x54b67798,
195840         0x9d9619c7,0x900d20ba,0x59e4343f,0xed42c0d0,0x451935d7,0x3df39e85,
195841         0x64f701ce,0x26391182,0xe1f87aac,0xce8f2554,0x65f91aaa,0xfddd6789,
195842         0xa324539f,0x96cd163f,0x4bace995,0x5c815f2c,0xa94f9ea5,0xd78c8c2a,
195843         0xef24e455,0x7ab2aff4,0x1cddc26a,0xf0ed6409,0x00ca2822,0x954a420b,
195844         0xd3297658,0x0611c4c5 },
195845       { 0xa9e81829,0xf192001c,0x08a282cc,0xded33320,0x8f9ded9b,0x0bfd7de1,
195846         0xb7889003,0x6793ac0d,0x3577a5dd,0xbb00d91d,0x802d3c2b,0xe17a23a7,
195847         0xfb549014,0xff95f88c,0xc71b6e07,0x7cd1bf4b,0x23588c8b,0x2e3b24a0,
195848         0xa4112076,0x9b5335b8,0xc4056d30,0x2481c05e,0xe916a1b5,0x55c7410c,
195849         0x850179f4,0xbbe03271,0xb3cd1208,0x15e6c177,0x90cbfe50,0x509a24c0,
195850         0x1c108566,0x82079529 } },
195851     /* 225 */
195852     { { 0x1c7d353e,0x5d2d3cff,0x7de0ce3b,0xd5e7eccd,0x6ca87635,0xb4b1075f,
195853         0x25f9ad3e,0xda8404e0,0x205cb5ae,0x6b963e89,0x09f221a1,0x9e5ee0d8,
195854         0xea41aca4,0xd64c85d9,0x34442a34,0x6a46c4e9,0x3cf655a4,0xac6ff97e,
195855         0xe5417d7c,0x76565c1e,0xeebf9c4c,0x681009a9,0x88da6388,0x95b61d39,
195856         0xf6b472c6,0x6402b46a,0x0b7f1171,0x1fde5165,0xbe0c05e3,0x94f8f273,
195857         0xa88344a7,0x7487b036 },
195858       { 0x9c3e2370,0xa860e575,0xf8048719,0x19d58193,0xa6e2f9aa,0x3a0dbf3c,
195859         0x6144719b,0xb6c7e959,0xdeffec21,0xa9049c74,0x3f50cebf,0x8ba064b2,
195860         0x49a1de15,0xb12822c0,0xb1d527f2,0xb654b7d9,0x0ffd0430,0xc470859d,
195861         0x4f05446b,0x37c74a67,0xa3add995,0xe553251b,0xe33533b5,0x4a3ed6cb,
195862         0x27e419ce,0x2f2f44d0,0xa5d1b979,0x2d84ee82,0xdb6fa69f,0xcc76b123,
195863         0x21fa3bdd,0x834f85c5 } },
195864     /* 226 */
195865     { { 0x2ce9b31a,0x329347c1,0xfe3fb3b7,0x1d88522a,0x52ff90fd,0x4bcefb4d,
195866         0x2b1a081d,0x53b17386,0x2a411f08,0x538c11ba,0x141b603a,0x7895b93c,
195867         0xb10bd741,0x2993b9aa,0x09912986,0xccbbd046,0xeea0aba5,0x669fafb0,
195868         0x35661897,0xd4844622,0x367ffa54,0x4a63b89c,0x1c3478da,0xcbad5d1d,
195869         0xaa6034f7,0xc5339227,0xe61b1391,0x0e6d705f,0xf74ff515,0xdd14b660,
195870         0x5332b54c,0x639d8b0a },
195871       { 0x162217cd,0xfa423162,0x811c28e6,0x2e0e4a2a,0x21766dc0,0x68d9ce18,
195872         0x046a06ef,0x51263739,0xdde92101,0x44eea231,0x114298d3,0x0607c8f2,
195873         0x63d957e9,0x27f272ba,0xa5e8cae1,0xe7ce80cc,0x24f7a63f,0x5816ebe2,
195874         0x89673e34,0x4dece5a7,0x536babd4,0x13756a22,0xe3bf77af,0x644d61ae,
195875         0x2bcf98bc,0x60b2bf6e,0x29fa962c,0x3b0b59f3,0xabb50023,0xb0769a1a,
195876         0x0c75402c,0x40903136 } },
195877     /* 227 */
195878     { { 0x1670433f,0x84d2873a,0x25493dfc,0xc9394df6,0x80fcf89e,0xeb05a19a,
195879         0xdb297616,0xe39e4310,0xd9e63046,0x50742dc9,0x1de9ca9e,0xf31ad8c8,
195880         0xfb7b1d0d,0x86aabf94,0x1b3c82d1,0x36cda27a,0x39702d84,0xfb1a2ef4,
195881         0x46081299,0x280bfddc,0xd2396238,0xe4b2b48d,0x7b3c9353,0x2db2c2f3,
195882         0x12fb8a69,0xd5b5b317,0x08180474,0xf9b87a3b,0x1e952578,0xd8590986,
195883         0xf37a2bc8,0x80668eed },
195884       { 0xb39a0249,0xe2edcd35,0xb2f8aeae,0xaf230cd4,0x7223df05,0x295b15e4,
195885         0xe0e937f4,0xbb66982a,0x8cbc9162,0x019d2b72,0xcf49dca1,0x5c512ae9,
195886         0x630f07b4,0x11b491a7,0xa03874e9,0x48d4f34c,0x44cb7433,0xc1fd0ea6,
195887         0xf95b30c3,0x13f79ae1,0xed8b60ac,0x40362d4d,0x61ead81c,0x9e8314ff,
195888         0x498c3d28,0xed600dd4,0xc2521702,0x5fcb1c19,0x3a9c1f33,0x592329fc,
195889         0x1bde6ce9,0x04677548 } },
195890     /* 228 */
195891     { { 0x39233c96,0xee3de56e,0x80737eaf,0x868c409c,0x201abc68,0xacae11bd,
195892         0x2b486205,0x0f2cea9b,0x6f19056c,0xe32387e1,0xa5dc2a41,0xea75365a,
195893         0x12b4be86,0x76c29acc,0x8d63294d,0xa01fcab7,0x0cab9f24,0x81dbe88b,
195894         0xf414c054,0x76646e5b,0xcb96b7aa,0xfe111893,0x7664e097,0xb649f5b1,
195895         0x53fcf5a9,0xa196422e,0x0b7ff634,0x5978c9bd,0x3c229895,0xb5feb38e,
195896         0x0833c456,0x038a49fb },
195897       { 0x13e93257,0x35e3818c,0xa612741b,0x14cebc9d,0x7caac06b,0x4f6e9249,
195898         0x3daa1116,0x82278e33,0x4de2034a,0xe7cc565e,0x0a1ba630,0xbb7dc95f,
195899         0x66956fbd,0x81dd9f23,0xbb132dd6,0xc63e6319,0xfc241337,0x6e22b022,
195900         0x7e8beb1c,0x23848193,0xd8c938ac,0x83b1994d,0xa6bb5644,0xb54cfaca,
195901         0x06f91807,0x1a7cd44e,0xa8f8d9f3,0x1dd439bb,0x7f74a8e6,0x660c2a78,
195902         0x121b5660,0x4bb76e22 } },
195903     /* 229 */
195904     { { 0xe6354817,0x7a151e8a,0xf038b438,0x33d494ea,0x85958986,0x4c86c688,
195905         0x1dcbac12,0x72153827,0xc0edad06,0xf487af8c,0xe500e5d6,0xad33051f,
195906         0xd6e47f55,0x0a711b1b,0x8c746ad5,0xa68709a7,0x6402f35e,0x27f17262,
195907         0xfb30c130,0xc6d08efa,0xc06c7497,0x9ef1c041,0xdcc3e2da,0xd0c74ece,
195908         0x092e1073,0x30c5f96e,0x2aa12b74,0x0f1393cf,0x2107eb02,0x24584016,
195909         0x7b76f98b,0x8843d25f },
195910       { 0xedb2a83e,0x4e1501dc,0x2bb8d724,0xbcfe8fb0,0xd925df62,0x09020659,
195911         0x42ab6fc3,0x3c715dcf,0xa0f09dfd,0x73c05055,0xe3590aea,0x126745d8,
195912         0x76ff749e,0x5382f4d8,0xa920c663,0xfc69feef,0x9fd711ca,0xde160211,
195913         0x9075c4d5,0x4219c3bd,0x3ded6bf2,0x3800cbd1,0x6263a116,0x8c7ea0eb,
195914         0x7d264c37,0x35bd7958,0x7159c98c,0x56e22e45,0xfa7373b5,0x71bf2a2d,
195915         0x8935c949,0x0503f939 } },
195916     /* 230 */
195917     { { 0x71dad4f6,0x65addc66,0x024bea1b,0x238e4889,0xf605d3dd,0xfb76c8e2,
195918         0xb0d96b89,0x13d5f5de,0x6601b2cb,0xe0b5ba35,0x83e3d254,0xe37d491d,
195919         0x240c8ea7,0xe8860423,0xe91c99ba,0x374182f3,0xa87ad919,0x26c2caf9,
195920         0xf574f295,0x4b13040a,0x944000a3,0x5b9bced1,0x06df42e7,0x4ccc57be,
195921         0x4bd1089d,0x22e8ec50,0xdddbb500,0x0c53177a,0x9ecfeadb,0x690d31d2,
195922         0x176668f9,0x735778fe },
195923       { 0x843c1137,0x0f86ee3e,0x3f0b73cd,0x3c1c42fa,0x8ab20e3a,0x0e75679d,
195924         0x16242fae,0x6f95f1f4,0x39b092e4,0x7b88e11c,0x4c236ac0,0x1629403e,
195925         0x2dac02e6,0x66105f41,0x862e0632,0x74dc28a7,0xf3b23c8d,0x2118ffb2,
195926         0x0745ffbf,0x1182417c,0x4c05711e,0x49b55a04,0xcefbe4de,0x2c665b74,
195927         0x97bf7107,0x1cc4c01d,0xc54f0676,0xb2ca06da,0x7450d0f8,0xfc599daa,
195928         0x1a3182a1,0x52e637a6 } },
195929     /* 231 */
195930     { { 0x6bebc6db,0x481700f1,0xf9503d92,0x4a6b45db,0x5d153919,0xc715cd3c,
195931         0xe5ad2abc,0x942a1c05,0xab7b466f,0x36a82433,0xba13918b,0xba413bed,
195932         0x90f4e6ce,0x698a5624,0xf3f1f3ca,0xbb720da6,0x63471ab3,0x2116d41d,
195933         0x303d3609,0xe00d2227,0x463ba69e,0x7fd4cc00,0x62845fd1,0xac609e4d,
195934         0x80adc9c7,0x63603b2c,0x45fafbca,0xbf16fc9a,0xc4bc94ab,0x41007f7f,
195935         0xa74b1698,0x7c916b4f },
195936       { 0x78bac2d4,0xc1026f91,0x2601a875,0x8a2e8098,0x0073d640,0xad2f276e,
195937         0xfcc1fb88,0x443610c4,0xca6b291f,0x5727b822,0x88ec60fc,0x0645532c,
195938         0xed9ad48b,0x51e48899,0xf543f103,0x841b48b5,0xd591ceeb,0xa6ccb1be,
195939         0x9dcf5a8b,0xfc4adf0f,0xb347ddb4,0x3a7ca020,0xcb44c521,0xaa1accc2,
195940         0x0527c0c4,0x773b6828,0x7023cf50,0xaa374c10,0x6b74c926,0x733d1000,
195941         0x77a8d07c,0x1ff3916f } },
195942     /* 232 */
195943     { { 0xf997939d,0xaa218fe4,0x791583b3,0x3d4dfbbb,0x87f7560b,0xb3a7b5da,
195944         0x5da92c98,0xa9c02801,0x46666f4a,0xe1eb4aad,0x14ce9dd7,0x2eb17a51,
195945         0xef8f3076,0xf46a66a4,0x810e546e,0x900b45c6,0x4baf04dd,0xf7af2258,
195946         0x5c84d42f,0x3cc1c872,0x8e4c83de,0x3093f225,0x170d88b2,0x62fade41,
195947         0xac076e44,0xe19612e4,0x32dd141b,0xf48d7346,0x925e34da,0xc1b1f759,
195948         0x072b90c9,0x19ed1a56 },
195949       { 0x6c735473,0x9cf7fcde,0x6003bc3e,0xaab88e67,0xfb199bb8,0x12187cbc,
195950         0x9accccbd,0xbb730441,0xb0f65459,0x214aff3c,0x6f926282,0x6aec81a3,
195951         0x9f9d20b8,0xaa82cb32,0x5773cc90,0x82f3f90f,0xf62257e1,0x4af60e6b,
195952         0xbd4762df,0xf18b44bf,0xdb970753,0x3948b129,0x7c22c18e,0xc6e920e9,
195953         0x57be97ad,0x393d6208,0x46b637f9,0xe8d7382c,0xf1fed1d5,0xf6625ccb,
195954         0x68681599,0x6f31e0f9 } },
195955     /* 233 */
195956     { { 0x82b8f204,0xc45afe55,0xd358b54a,0xac0441b6,0xacd5f5ed,0x7213e7bf,
195957         0x139bcd93,0x1914c70b,0x96dbcbb0,0x714b4581,0x1ed35d21,0xe9297d35,
195958         0x6a3e1f20,0x8f640837,0x2f3cd705,0x150a8a9d,0xdcdd9f6d,0xfb36e801,
195959         0x5cf56d82,0x5a54eb65,0x92aa5a21,0x7610500c,0x3b089f03,0xd10d0ae2,
195960         0xc42b66e8,0x491b2079,0x0eee8d48,0x4af1ae3d,0x41556f45,0x137e4c28,
195961         0x63d8a7e6,0x875e3308 },
195962       { 0xaf6c0acc,0xdc80fddc,0xbb1e7c08,0xd5ad1e66,0x828585ad,0xdc717ae1,
195963         0x275c7da6,0xbdc54340,0xd26b9e15,0xf4b4c852,0x6a05fa50,0x5f0a1fbf,
195964         0x817bcb32,0xc6f81e47,0x70ff2e1d,0x2cbd4328,0x67c7f7fc,0x8a249016,
195965         0xb585a6c4,0xd045acb7,0x4666c057,0x2e972ad4,0xe6d7d63d,0xc74d87cf,
195966         0x0e274144,0xf7067d87,0x8b2584ae,0xb2ca157a,0x75f0fdeb,0x495c5bfb,
195967         0xf386e009,0x5abb0581 } },
195968     /* 234 */
195969     { { 0xf0c97f57,0x8be62d2b,0x962f28c7,0x0fe04871,0x47b50abb,0xc548a467,
195970         0x44fa09ed,0xf6b26e03,0xab05a96e,0xfd44c6e3,0x70e6ae82,0xedb0032c,
195971         0xd7e4899d,0x28bd402b,0x9b7c11c2,0x43f2e963,0xce913716,0x0ec3fc0e,
195972         0x02fd0f8c,0x769b8bc9,0x7cabc3ac,0x9d9cb3aa,0x06924cc9,0xe88a8892,
195973         0x42609014,0xa51461aa,0x962e79e0,0xc7f4aa8b,0x8b1b3e80,0x4ef0210a,
195974         0x1bfee4bc,0x70544680 },
195975       { 0x121901c1,0xfab3d713,0xfead54aa,0xe90a2627,0xbc08ba23,0x64f6d285,
195976         0x36ec227e,0x8d993015,0x06c191ab,0x99a16ab9,0xf649ce2c,0x86b1cf5b,
195977         0x66be3a80,0x59206759,0xccba2cf0,0x18836279,0xeff53486,0x2c157b87,
195978         0x4b223af2,0xbfac9896,0x0aae7a57,0xcd0fd4f0,0x63218a80,0xdaddb940,
195979         0xdf88f14e,0x3844bb79,0xb71ed9fd,0xc1b3e3d4,0xd6205036,0x6c634a13,
195980         0xb8680a6b,0x6f56aecf } },
195981     /* 235 */
195982     { { 0xd9205c5d,0xb01dc803,0x67123929,0x68955f7d,0x9d9b6565,0x3debbffd,
195983         0xd3b1acfe,0xb844395e,0x6094eeff,0x04328b21,0x22991feb,0x6631ffa8,
195984         0x190dd075,0x0dde66e6,0xe8577c05,0x75b03c55,0x91722407,0x6c91ce5f,
195985         0x8ebb3a3f,0x9a288a40,0x058a1396,0x1d376f8a,0x9a6e0676,0xf3a59457,
195986         0x7b71d288,0x103029c5,0xb44c30c0,0x0843f428,0x730e0b9c,0xd8e6aff8,
195987         0x4ed644ad,0x7b6be811 },
195988       { 0x3d3aa54e,0x3ec38e4a,0xd83d509a,0x10233943,0x243955e2,0xf84aa621,
195989         0xf51d3d44,0x29104717,0x7eca4e37,0x62d2442c,0x85fa55de,0x8c5a523d,
195990         0x851da1b5,0xc6f5ccda,0x20001468,0x044bcaa8,0xe01702e0,0xf7501e68,
195991         0xe6a0acec,0xf0819359,0xac0ef0b2,0x33dda6ad,0xfd964f01,0x97aeedc8,
195992         0x530b90d8,0x48dacd0e,0xb84122eb,0x4c5fad6f,0xd700a1de,0x2284ec1e,
195993         0xdbca5474,0x86f9a835 } },
195994     /* 236 */
195995     { { 0x450cc69f,0x0e1d9055,0xc9edf98f,0x50eb14bc,0xee7eba01,0x1bb94e77,
195996         0x998f8e53,0x5f7a6737,0x1b16eef0,0x588384e3,0xd85c5e15,0xbb928723,
195997         0xcbd952aa,0xfe51e345,0x7e241674,0xc5d0ee28,0x100182f0,0xfdc146ef,
195998         0xe7f5be2c,0x0f739e92,0xb656bd3e,0x501ab3af,0x5168e289,0xb1552dde,
195999         0xb8ee104a,0x940dfe31,0xc4304475,0x42923603,0xc460a913,0x9306f114,
196000         0x03b51f86,0x5bfa9faf },
196001       { 0x107b258e,0x2a23f52c,0xd66341dc,0x989e82bb,0x823cff1a,0x54a3ced8,
196002         0x719b491f,0xf45b7794,0x2433dfb8,0x898c2218,0xc49250ee,0x0f9dd91c,
196003         0x4fa17655,0x50c2a2ae,0x2c327f45,0xf7aa1ce4,0x583b1e41,0x13a15ad6,
196004         0xa1bfad9e,0x9aa0d5a5,0x8e1fbdcd,0x9b1caa28,0x915f7f87,0xaf9283b6,
196005         0x87e81a1e,0xc10e4e0c,0x1080d296,0x04fdca56,0x12755bd8,0x6acc9616,
196006         0x828feeda,0x1b1266aa } },
196007     /* 237 */
196008     { { 0x774ee49c,0x4ebc0a00,0xcb6237d7,0x776f6852,0x5df938a3,0xfc0544ac,
196009         0xb6fbfbbd,0xc3388ec8,0x745f2eae,0x84ac8bcd,0xb1ece937,0xa9c56609,
196010         0x7de8fa13,0x656fb6ac,0xa532b871,0x5f8ded74,0xaa889f09,0xab0d428b,
196011         0x10b7aec2,0x43b27f28,0xfeecb34c,0x26426e1e,0x9e89c2db,0x44431b6b,
196012         0x39211090,0xaac4bc5d,0x4fd81058,0x926f7368,0x471ef60e,0x452fa691,
196013         0x218d7a23,0x33517fdb },
196014       { 0x593c4a36,0xa9c33f46,0x36b1a9ee,0xac69d718,0x4277beec,0x55a20c1d,
196015         0x7e4f179c,0x3e8ca24e,0xd46d88a2,0x57373369,0x730702f8,0x71ceb1cc,
196016         0x35eed574,0x8b184d97,0x0704cec2,0x7f4517a2,0xd7062a53,0x7f129d18,
196017         0xb1d77e1c,0x07a4571b,0x8350d8b2,0x774ac309,0x61fab8ef,0x27b2919f,
196018         0xb5dd801b,0xa7c4cc13,0x1434591f,0xe7e6255b,0x5a3592b3,0x349937b8,
196019         0x30c77549,0x31fac63d } },
196020     /* 238 */
196021     { { 0x04913fb6,0x2ee8cf1b,0x1769a6b3,0x7e401350,0x783e61f0,0x790ebb71,
196022         0xe27f2ffe,0x1e5107f9,0xedaf89bf,0x124ba67f,0xe58de68d,0x189200e1,
196023         0x6df5abee,0x962732a3,0xacbeb4aa,0x72cc37cf,0xe93c5a76,0xb0c5fa96,
196024         0xde63393b,0x4c2a317c,0x830b2d6c,0x97f65e67,0x1be5b96a,0x4afc3504,
196025         0x730ce66d,0x0bf40a60,0x9340d84f,0x96a1ba79,0x07626b08,0x3ee18254,
196026         0x7ab0cbf5,0x01db35db },
196027       { 0xac0efee2,0x6e0fbc2d,0xd71dbb45,0x8406ebcd,0x19b69abe,0xe72bde3e,
196028         0x37e01822,0x49cb7e61,0x11458b4c,0xcbb8c01c,0x687c5d63,0x420b4847,
196029         0x454c6776,0x1847dfa1,0xd1839d18,0xbede911d,0x278df046,0x1b9dc9c9,
196030         0x881a336c,0x294bd62b,0x93e77adc,0x7f096879,0x43ce3ba7,0x7ac90665,
196031         0x7764eefc,0x148695fd,0x9ac465cf,0xe0c20f0b,0xa6e2cdb1,0x636e8d28,
196032         0xd755341d,0x7b6ba98c } },
196033     /* 239 */
196034     { { 0xc1881ab4,0xcb1d9e03,0xb3168c88,0x19c25d55,0x282364ce,0xa82d3d47,
196035         0xf161aa24,0x95994390,0xe1ebb2c9,0x7838bc00,0xbdec7a75,0x8fd5dfcc,
196036         0x4ff7220a,0x4dd203c2,0x0efeff48,0x5ec173b3,0x16428b35,0x99f1d2b3,
196037         0x056e813f,0xc06bd9e5,0xc0b319f1,0x929172ba,0xfd223b15,0x6ae0e384,
196038         0x98d091ed,0xbd01059e,0xa654648e,0x6b3168e4,0x3375e798,0x2211447f,
196039         0x71eb4508,0x47e81019 },
196040       { 0xbc8c290d,0x7045d45a,0x810fb33a,0xa33d1355,0x46fbbf2f,0x2baf0092,
196041         0x385c7cd9,0xacff3f1b,0xe161985c,0xc5b150ec,0x2a888748,0xc6ee0a7f,
196042         0x5e88dcc8,0x9d888c8e,0xccb86443,0x4dd735f2,0x3c40f6f2,0xcc1e13b7,
196043         0xf3fed691,0xfc3a25ff,0x257ee5c7,0x4cb43b17,0xf32db135,0xaa654f93,
196044         0x02dff2d3,0x44f58d0a,0xa8ca6394,0x78e3f188,0xf3e86697,0x39646cce,
196045         0xe0dce87b,0x785b1902 } },
196046     /* 240 */
196047     { { 0xa92f9a20,0xfcce2361,0x9d64540e,0xb7bdca87,0x1d00d7c5,0xd4739a85,
196048         0x2e97c926,0x067ac8dc,0x78da6a8b,0x2aea3ffe,0x63c51b69,0x6828bf54,
196049         0x7155141a,0x76f1c479,0x3977d810,0xf4bcbef6,0x541bce7a,0x75bc4949,
196050         0xd17041a5,0xe01f4066,0x87755eaf,0xd282d5bd,0x59e7ae80,0x6e2107dd,
196051         0x382ab36f,0xaa56e166,0xb9d1d634,0x65ee8ef6,0xce4ed844,0x99a2160a,
196052         0xb7712c27,0x6557c367 },
196053       { 0xd75b6e52,0x561b0268,0x118d0e89,0xb0813640,0x6a2eb1ae,0xcff53330,
196054         0x6d090894,0x4e462226,0xb5fc1d48,0xbb351227,0x57a3062d,0x9365ea07,
196055         0xd66e2dc5,0x4caca37b,0xb9095887,0x220d7d23,0x8c4473bf,0x9c0fd393,
196056         0x6787da4f,0xadff370a,0xd057f4b8,0xef0aebcc,0x1173f33a,0x205e744c,
196057         0x925a26b4,0xb8d1f0a5,0x722fbbfd,0xa9364f49,0x8227d284,0xc891ae77,
196058         0xa0e08ab4,0x15c40d04 } },
196059     /* 241 */
196060     { { 0x2a0e18d1,0x9baf169a,0x4c0327c2,0x9971c017,0x7bc262ce,0xd81a323f,
196061         0x818ff379,0x2099db8d,0x4cd3c330,0x663f663d,0x011a0553,0xef5325c3,
196062         0xf980a470,0x9cd70bdc,0x1c9ed070,0xe64452d1,0xac676e13,0xafbf43f4,
196063         0xae85c2a5,0x97bec0a6,0x470490c4,0x2faae550,0x491e6ba9,0x0ab97a87,
196064         0xaafa9914,0x4055f537,0x36726557,0xfc95adbb,0xd119d6bf,0x646343b9,
196065         0x9d341e37,0x788e94a0 },
196066       { 0x9c53461a,0x053a6fe5,0x08e3b6ed,0x75ec897e,0x0768d939,0xa8f5d2f3,
196067         0xcc213d4f,0x9bd6bff6,0x05b0147c,0x590c7b41,0x7c7b8169,0x20a3628b,
196068         0x5bce78e9,0xc66a086e,0x4dec1d8f,0x3dd4d282,0xc19dcce9,0x890acf44,
196069         0xd8435a7e,0x6632d875,0xea6381b2,0x590167c1,0xf0dcc128,0xb2259797,
196070         0x46f8d463,0x91a612b4,0xc15efa39,0x42185d78,0x119f6788,0xdf55ec37,
196071         0x780dea93,0x91b19cc6 } },
196072     /* 242 */
196073     { { 0xcb5d8b80,0xebf2709d,0xfc35660e,0x03b96182,0x055ef969,0xb873d991,
196074         0xe47c4342,0xd1ea4b4d,0xd54f8867,0xcc4b9244,0xfd8d77ef,0x93b1a2ca,
196075         0xe8c1f563,0x068d24e7,0x49973056,0x5f5fabb6,0x0542374f,0x83248c50,
196076         0x3f38e913,0xc36de2b5,0x7bb680be,0xed07e8eb,0xd8f313b5,0x964813d7,
196077         0xafd2d392,0x7bb6a069,0x0848a31a,0xc06d848e,0xe4f0c325,0x6867fb2f,
196078         0x067343af,0x3c2ba834 },
196079       { 0x9d3ad63b,0xab62d775,0x59e0eb1f,0x3f9cab97,0x3885e117,0x70332a63,
196080         0xe20b2f9e,0xf22cafce,0x49eca947,0xb529ba7e,0x6228d88d,0x24954216,
196081         0x39239561,0x80ea23ec,0xd4370644,0x1b8907e7,0x563e4e44,0x4b7fa455,
196082         0xb2a4b0fa,0xcca9829e,0x48060792,0xd0a720a4,0x246991ce,0x8ccdda0c,
196083         0x348d086b,0x37a2325b,0xf60aee13,0x566ed509,0x147f253f,0x3d30e091,
196084         0xc1073bd8,0x1fa627a5 } },
196085     /* 243 */
196086     { { 0x42478fd4,0xa11222a2,0x670b2000,0xacf4c6f1,0x8359c6de,0xf71bb04f,
196087         0x7b93cdbc,0x618e2829,0x230db60b,0x96e1bae3,0x965b3b29,0xf17fd3b4,
196088         0xbc7055dd,0xa58639c6,0x4b817d7f,0xc3ea92ed,0xd23b08a4,0x9082b2a6,
196089         0xdc17010e,0x8471228a,0x20e89d97,0x753b9e46,0x03ff77c9,0xcf7e4f97,
196090         0x2bbe60e5,0x6c3f8245,0xb80e017d,0x9e432cbc,0xc0a45edb,0x150a5acd,
196091         0x4798743e,0x67b8bd05 },
196092       { 0xf4797cf7,0xe66079b4,0xd03fde02,0xe31c998a,0x54caaef1,0x5aa3763a,
196093         0xf7649711,0x64d9a1fe,0xaf29b1a7,0x7ce0dc73,0xfb66ca93,0x6661b083,
196094         0x32fb6a78,0xbf4d74fe,0xdf00a561,0x25f6ef09,0x831d1159,0x2bc4383f,
196095         0x536bde37,0x6d5cc10c,0x882cc65b,0xd4945f9f,0x451a99b8,0x81f48f13,
196096         0x6bac11a4,0x140161cd,0xf18a4a0a,0x9d94d4ed,0xa467a824,0x65363165,
196097         0xa4c9aedf,0x74297aa9 } },
196098     /* 244 */
196099     { { 0xe21124ba,0xc49758a4,0xa87ffbd2,0x99bd8198,0x3d6638a8,0x45fbcdd1,
196100         0x15f7bf76,0x94645ff8,0xc4e6d57e,0x5fa6736f,0x92e61db9,0x1eae6475,
196101         0xcbdf944a,0x79575c0c,0x25b31d74,0xa3d13047,0x4cab5ae6,0x7881df22,
196102         0x1a2887f2,0x8dbfd299,0xa26ac459,0x23d07590,0xd8661d4a,0x2e589852,
196103         0x8a0140f7,0x37b5c13b,0x3fb3782a,0x0f94199e,0x1bc14e90,0x722aa059,
196104         0xd55bbb12,0x89aab7ba },
196105       { 0xd656bdc7,0x8b345a96,0xe176cd3b,0x43bdc8af,0x32d64c43,0xd69518b6,
196106         0x79b82b41,0xfcf364a7,0xffb0cf82,0x907b344e,0x5101287b,0xf3d0c83c,
196107         0x34cd90ef,0xe9f26a59,0x07082b5c,0xe5f5aaf2,0xece7c165,0x4eb72c75,
196108         0xbe986cd6,0xe9590a81,0xff1536aa,0xfeef498f,0xa8263d5e,0x04560243,
196109         0x54ae872b,0x940be14f,0xe3207686,0xbee7bcc9,0xc1bc4d7a,0xd496a27d,
196110         0x5940ab46,0x002dc297 } },
196111     /* 245 */
196112     { { 0xb69d60c3,0xee533937,0xfe972755,0x260be552,0xc0c725a6,0xb11fb78d,
196113         0xcab2e7c2,0x6982c27e,0xee2322cb,0x4bceedd9,0x122704f7,0x952b19ed,
196114         0x854a6165,0x2df4c285,0x7b192485,0xba40b5bf,0x0119f52a,0xfcbca950,
196115         0xe5add86f,0x7467d1cb,0xd9d0f2c1,0x9bf536fb,0xb8d4ebc9,0x3c296e34,
196116         0x05a81317,0x0495f8f4,0x73335f76,0x8c59e8d6,0xe0542122,0x0b53d324,
196117         0x3c3bda73,0x4d564535 },
196118       { 0x7e5c0877,0x7322f800,0x0ca9a764,0x481b43e6,0xa2c12716,0x231f4f4b,
196119         0xed3136c2,0x09596857,0x38db30de,0xae826322,0x99908ebc,0x652fad40,
196120         0xaf0d231e,0x0b8d1814,0x09cbc349,0x2680c54b,0x4bf3bf8e,0xfd4562f3,
196121         0x092b595f,0x2985090b,0x5e15fc34,0xe6f39ca4,0xbc378168,0x70175191,
196122         0x845a4a87,0x906944b3,0x82a1541a,0xacc6d74a,0xb155c8b4,0xadc9bab3,
196123         0x77306c62,0x1f2f89ce } },
196124     /* 246 */
196125     { { 0x9affefdf,0x8253ef41,0x4cf9256b,0x05d7ece5,0xb444e483,0x377002f2,
196126         0xcba5471f,0xb189755f,0xd5cbe015,0xc88483cb,0x6a0b8429,0x254f7c69,
196127         0x61f3f61d,0x18850bd4,0x0a247157,0x7ba21089,0xd92eeb0d,0x35abbc2e,
196128         0x965dec89,0xfb56cabe,0xbc55684a,0x9da23724,0x6a7a7492,0xd8ba396f,
196129         0x2ef4ba46,0xfcb90db7,0x9909b27a,0xdd234fe0,0x76f4366e,0xbdf3c164,
196130         0x17e50d47,0x09c8097f },
196131       { 0x60050c07,0x6a04b140,0x43a8e37e,0xc29e8318,0xbb55e41f,0xcb9429b2,
196132         0x2ce60e3a,0xed2fea5a,0xdb9d82f4,0xdc7b1ff3,0x687d37fa,0x48ebecc3,
196133         0xecb07539,0x79153e32,0x57075692,0x6a60054f,0x800759ba,0x3871cd0c,
196134         0x30922df1,0x17a7386f,0x83357b7c,0x4e9fc59e,0x39415186,0x1d26b3a9,
196135         0xd34db889,0x912a0222,0x59fcdb71,0x6672fcf4,0x44ff3036,0x5a3f268d,
196136         0x6911e16c,0x6f113ed3 } },
196137     /* 247 */
196138     { { 0x1836f1c9,0x52a9df59,0x4232307d,0xfa6519f5,0x5ded285a,0x8406c701,
196139         0xaf627f75,0x0a1545ca,0xace0417d,0xae1111ee,0xa6113443,0xfb28bdf6,
196140         0x52dbcbcb,0xde9ef0ab,0x7813e658,0xe9dc181b,0x99127225,0x0b1dabdb,
196141         0x22814c59,0x5f0598e3,0xd934ee7e,0x5c3b966e,0xb99ba4bf,0x4eb84eda,
196142         0x3c1b55e7,0xb2919a34,0x94aa860f,0xa9addb49,0xf6811ff6,0x1b7220df,
196143         0xd1a183e2,0x6636a23b },
196144       { 0x20587283,0xdf5d5a2d,0xef07fc5d,0x0b3822c9,0x0ef6de38,0x1786bd55,
196145         0x25d1671d,0x163cf907,0x1cdb1def,0x74bf971f,0x0842fc4a,0x5749e830,
196146         0x27f854f7,0x0e2edbc7,0xbce24acb,0xbb27bbda,0x05bed08d,0xc1b19cec,
196147         0xf7c904bc,0xaada123e,0xd89982db,0x02429f1b,0x65f6e632,0x49d3616e,
196148         0xee59fd32,0xa3789fa8,0xfe9f29f5,0x160ba3ba,0xaf5378a0,0x0f2d3b61,
196149         0x73c2a6f8,0x7aeecc76 } },
196150     /* 248 */
196151     { { 0xdc43b0db,0xf3a4757c,0x98119cad,0x3d8a4e85,0x4616c156,0xf8095bf6,
196152         0x4f533e97,0x3e2a07bc,0x39cfc5ad,0xa9824367,0xcd68052c,0x18a6ba3a,
196153         0x8a1cec66,0xbd60e590,0x02b1b695,0xae3841a5,0x190a195b,0x986dff12,
196154         0xad31fd9b,0x2df2beac,0xcc728f7b,0x7d893224,0x0cf0a992,0xc38ea738,
196155         0x586a44ea,0xa8439a80,0x1615f03c,0xede7f7f0,0x27a1f885,0x48249908,
196156         0xb78a7645,0x28ec4006 },
196157       { 0xa2fe0009,0xe1820c2e,0xf13874e9,0xe11ba5d2,0xc524db52,0x97522454,
196158         0x7fede529,0x4d477426,0x9b2500d4,0x01d3419a,0x1869244b,0xce08a492,
196159         0xdd1be1b9,0xba169023,0x32a301e0,0x242c3e54,0x70906788,0x9b56f7ba,
196160         0xc74a8cc4,0xf0ad2a09,0xd76f9439,0x99cd1841,0x621fb60e,0xeddafe0b,
196161         0xbc397634,0x056bee54,0xff7f0a84,0x4653f860,0x2011c0af,0x6bd4876f,
196162         0x0c9525c3,0x134f4cc7 } },
196163     /* 249 */
196164     { { 0xe938dff4,0x9621a3ec,0x486a79a3,0x7d101a7b,0xde950537,0xf2c4ef97,
196165         0xe65d87db,0xf3184099,0x373b8cfa,0xb89c7ffb,0xe842916e,0x68baa505,
196166         0x4ebea764,0xa790fd09,0xe592892b,0x679df6d4,0xfcfed741,0x2023331c,
196167         0x9880ff21,0x0bf4efd2,0xd0344501,0x7ca78ddd,0x342858c8,0x2cb09ecb,
196168         0x2575487a,0x9e5eb6dc,0xebcb0491,0x50675a15,0x7381d471,0x09d2e74f,
196169         0x83d3d6f4,0x6ea37829 },
196170       { 0x4e5cc40a,0xc65c094b,0x1af37dfb,0x7a2e3f6a,0xf9026e44,0xef677e9d,
196171         0x93880f53,0xb7878c95,0x7f644aa9,0x4aa30b07,0x2f208c3c,0xa0c51683,
196172         0x658d663b,0x7c0277ae,0xae1d9130,0xef0b3c38,0x695c3ea4,0x302f37a7,
196173         0x6a0c5e0d,0xe004c1c5,0x20cbcf9f,0x9fd495c4,0x568a0e7c,0x706d5b9d,
196174         0x59286454,0x8b225dff,0x8d9a709c,0x527d4465,0x87c08d68,0x47c558da,
196175         0xbb4ef07d,0x606ee6e6 } },
196176     /* 250 */
196177     { { 0x57c621f6,0x02d99fc7,0x7fe83d48,0x292e40c1,0x9ef199b0,0x1bdfc7a1,
196178         0xe62c7666,0x78a04102,0xe6738753,0x16cda370,0x1e3a65af,0xbc81974d,
196179         0xf78fe209,0x19742048,0xbf5981c6,0xc83a058a,0x9c89702d,0xf26b2434,
196180         0x9d1a678a,0x988b2f1e,0xff29ae29,0x472bf9b0,0x1d7cf5ec,0xa143e398,
196181         0xb268ddd8,0x9c9d7e45,0x5fc4ff76,0x166cda55,0xa4aa7673,0x6044cdf0,
196182         0xe9148707,0x49dba6f7 },
196183       { 0xa758e37a,0x20e47fb2,0x2d8eaf66,0xaf6b31d7,0x6f9c2210,0x352ad5f9,
196184         0x90efc32b,0x0093f727,0x41e4b264,0x435c99dc,0x05b15795,0xbfa878e0,
196185         0x0e673575,0x99c520a4,0x87eea759,0xca682594,0xf12a348b,0x029f7b81,
196186         0x2aa2ce35,0xa547cc18,0xead5e2c5,0xa11d874b,0x55682cdf,0x9af0349b,
196187         0x8bbe8e66,0xf86ebfea,0xf55394ab,0x3dab8782,0xebc8eb8f,0x458bf797,
196188         0x9b7de78c,0x4890a7a4 } },
196189     /* 251 */
196190     { { 0x8da995f6,0xd7299689,0xec6156ef,0xd39eaae7,0x356a82d5,0x6959040c,
196191         0xc135bcfe,0xb2046b21,0x0f595c78,0xea720b64,0xe7c5fb40,0x02824efa,
196192         0x0edb3bfc,0x97d8fd4c,0x79f24ebe,0x12f02905,0x187ea6b9,0x16fc47cf,
196193         0x789d5c23,0xc219fd27,0x89263ecc,0x233a6b6c,0x8b6d30a6,0x823634b2,
196194         0xc9b33680,0xca352e25,0x40c77456,0x9388d6ca,0x3c92065b,0xf8e55b0b,
196195         0x02439a76,0x5c17474b },
196196       { 0x8aaccab5,0xd888e7c2,0xaaced05b,0x18027836,0xccec0f65,0x185b877d,
196197         0x125c2882,0x93cadc1c,0x67fdc54c,0x45df540a,0xc2788a33,0x4f3c86e2,
196198         0xe3a0fa2c,0x3e874469,0x273983cf,0xc59daa47,0x4a96d8a5,0x3063c48b,
196199         0xc2e58915,0xc38d2bcf,0x84e428c3,0x90e78b87,0xf0c4fd53,0x900a292c,
196200         0x941e6005,0xb7f92db7,0x6ca53a1c,0x95679241,0xb1ab0fa7,0x35f6f31d,
196201         0x7b58408c,0x5d675eb4 } },
196202     /* 252 */
196203     { { 0x870c6025,0xaeee1a77,0x91a2dfca,0xfc4a23b7,0x386b64c4,0x7b0e60c4,
196204         0xe5ae72b1,0xd5d5b17d,0x9eefa212,0x6dfc88ac,0xd4038b96,0x4feaefbe,
196205         0x8e2d2ecc,0x099ac356,0x012af207,0x548ea612,0x89c31218,0x4ffed9db,
196206         0xe0e67331,0x1c1e91c4,0xaf8300e0,0x009bb64f,0x6773c3be,0x8780501c,
196207         0xc08219fa,0xe0cd6ede,0xf81b06ff,0x7c055e07,0xe080b36f,0x82b63f9c,
196208         0x0a9feca3,0x02fccbaf },
196209       { 0xb47cac61,0x9991d4d1,0xab86e12c,0x2e9d1687,0x2b94f042,0x8c6855ec,
196210         0x48e648e5,0xca400519,0xef89ac57,0x9ba91fb2,0x1be792cd,0x4f419206,
196211         0xbd0f1e15,0x82d221cb,0xfc444019,0x062eb13b,0x99790fdc,0xf3a97c32,
196212         0x6067a64b,0x4e796d94,0x6d23775a,0xc46dd300,0xed7f0f23,0x8672c4d5,
196213         0x3b4f63d7,0x821851dc,0xd26273f2,0x50a3ae0c,0xeac60f6f,0x800e58fc,
196214         0x13845545,0x56f1e456 } },
196215     /* 253 */
196216     { { 0x32c24f3b,0x01ccb3f6,0x06d817e6,0x99eb1c7f,0x6aa26776,0x8dc640bb,
196217         0x0845d5e0,0x7838affe,0xf81a79a8,0xf34fecb1,0x3e6819b0,0x6a2e282d,
196218         0x8237a4b8,0xc4b977ce,0x87636439,0x0f46b3db,0x97970497,0xa465f540,
196219         0x8791be43,0xd7e08762,0x34198ec6,0x00220b6c,0x093d94bb,0x57b38637,
196220         0x29d690b2,0x84012e16,0x20aad1a4,0x02ec9db5,0x85dc34e3,0xafee2fc6,
196221         0x25500cf8,0x911d1936 },
196222       { 0xf5e5af5b,0x13b1bd58,0x7b6a22a7,0xa7ca263b,0xf3af2adc,0xab6bec4d,
196223         0xa04420bd,0x16651e59,0x4ba36c11,0x3b448b3b,0xff424310,0x3c62bfcd,
196224         0xf1a96cbb,0xde15c4a5,0xe4d1f980,0xbe0ad8a1,0x36673a3a,0x812bd14e,
196225         0x9212acdd,0x40303af6,0x576095ce,0x8f6dab9c,0x107f5ca5,0x7df1882a,
196226         0x8896a3b0,0xb903e63c,0xd863b3f0,0xf5048544,0xc09887de,0x5e5019b9,
196227         0xa0f53865,0x2be744fe } },
196228     /* 254 */
196229     { { 0x5b50f324,0x054cd05f,0x1ea3c7a2,0xb9b1eb24,0x7ff8e6b7,0x4a858a5c,
196230         0xec040882,0xd83902fe,0xd0cba9bd,0x72b26494,0xb29c9e1e,0xd0176f90,
196231         0xcebadb81,0x05d4eb02,0x372b8bfc,0x874405b1,0x79ead190,0x5c412881,
196232         0xec2b48cd,0xd44a3dd3,0x3f4d5033,0x84499a77,0x564c3a09,0xb37b38cd,
196233         0xf42e803b,0x80e99497,0xb8f518b2,0xc07b47a0,0x3568fde4,0xc710e3c5,
196234         0xcead0e7a,0x735f542f },
196235       { 0x38380039,0xcaa9a171,0xf74d19c8,0xadfafe17,0xccbc1a8b,0x92d4393e,
196236         0xfe029705,0x3c5dbf39,0x930e9b36,0x4552b5ab,0x2afd494a,0x7ee63032,
196237         0x3f02ac43,0x826a9ad7,0x99356298,0x98c53562,0x7342bb39,0x0c869f87,
196238         0xe4f9b79a,0xd7510020,0xd34789a9,0x6361d1a4,0xcfa85637,0xf0ded5ba,
196239         0x88ac07e4,0x407ee73f,0x09ef1cbd,0xfac7d03f,0x4d475bad,0x25d697cb,
196240         0x14bd399e,0x1e984c9d } },
196241     /* 255 */
196242     { { 0x4850c817,0xc76d0561,0x3489812d,0xb08a5b19,0x5e58cbbe,0x7273d154,
196243         0x4be61e5a,0x8900b5fa,0xd7aeb8e1,0xaa088691,0xd35a3d4b,0xe66666af,
196244         0x57ec7d3d,0x38a2c199,0x668d6f5c,0xa0648e8f,0x7adc1746,0x1f9fc92c,
196245         0x843065c3,0x23a116c0,0x61e6ae69,0x36370a20,0x2aa47e73,0x626c3736,
196246         0xdeff6d84,0x540c25f2,0xcdbed2d4,0x9804824c,0x039a9492,0x4b5bfce0,
196247         0x76942e01,0x6c474a56 },
196248       { 0x7d88e3a1,0x3aeb9a41,0xc484742a,0x105d3c88,0x3fe61131,0xe59de8d1,
196249         0x1a869e8b,0x148f5b6b,0xaa75d90a,0x7a8abc59,0x62146013,0x2f0c9bc7,
196250         0xc3824cd9,0x43faa747,0x6a5d0b92,0x81763a18,0x9bcbaebc,0xbbc341bc,
196251         0xf745d1dd,0xe1813160,0xb75ce5f4,0xa53ce52d,0xd50de4c2,0x15eae66c,
196252         0x75d7656d,0x5ed8996c,0xc4ca552a,0xe4ff5711,0x3c5305b4,0x215e985a,
196253         0xfa1ba2ce,0x6b258954 } },
196254 };
196255 
196256 /* Multiply the base point of P1024 by the scalar and return the result.
196257  * If map is true then convert result to affine coordinates.
196258  *
196259  * Stripe implementation.
196260  * Pre-generated: 2^0, 2^128, ...
196261  * Pre-generated: products of all combinations of above.
196262  * 8 doubles and adds (with qz=1)
196263  *
196264  * r     Resulting point.
196265  * k     Scalar to multiply by.
196266  * map   Indicates whether to convert result to affine.
196267  * ct    Constant time required.
196268  * heap  Heap to use for allocation.
196269  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
196270  */
sp_1024_ecc_mulmod_base_32(sp_point_1024 * r,const sp_digit * k,int map,int ct,void * heap)196271 static int sp_1024_ecc_mulmod_base_32(sp_point_1024* r, const sp_digit* k,
196272         int map, int ct, void* heap)
196273 {
196274     return sp_1024_ecc_mulmod_stripe_32(r, &p1024_base, p1024_table,
196275                                       k, map, ct, heap);
196276 }
196277 
196278 #endif
196279 
196280 /* Multiply the base point of P1024 by the scalar and return the result.
196281  * If map is true then convert result to affine coordinates.
196282  *
196283  * km    Scalar to multiply by.
196284  * r     Resulting point.
196285  * map   Indicates whether to convert result to affine.
196286  * heap  Heap to use for allocation.
196287  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
196288  */
sp_ecc_mulmod_base_1024(const mp_int * km,ecc_point * r,int map,void * heap)196289 int sp_ecc_mulmod_base_1024(const mp_int* km, ecc_point* r, int map, void* heap)
196290 {
196291 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
196292     sp_point_1024* point = NULL;
196293     sp_digit* k = NULL;
196294 #else
196295     sp_point_1024  point[1];
196296     sp_digit k[32];
196297 #endif
196298     int err = MP_OKAY;
196299 
196300 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
196301     point = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024), heap,
196302                                          DYNAMIC_TYPE_ECC);
196303     if (point == NULL)
196304         err = MEMORY_E;
196305     if (err == MP_OKAY) {
196306         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32, heap,
196307                                DYNAMIC_TYPE_ECC);
196308         if (k == NULL)
196309             err = MEMORY_E;
196310     }
196311 #endif
196312 
196313     if (err == MP_OKAY) {
196314         sp_1024_from_mp(k, 32, km);
196315 
196316             err = sp_1024_ecc_mulmod_base_32(point, k, map, 1, heap);
196317     }
196318     if (err == MP_OKAY) {
196319         err = sp_1024_point_to_ecc_point_32(point, r);
196320     }
196321 
196322 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
196323     if (k != NULL)
196324         XFREE(k, heap, DYNAMIC_TYPE_ECC);
196325     if (point != NULL)
196326         XFREE(point, heap, DYNAMIC_TYPE_ECC);
196327 #endif
196328 
196329     return err;
196330 }
196331 
196332 /* Multiply the base point of P1024 by the scalar, add point a and return
196333  * the result. If map is true then convert result to affine coordinates.
196334  *
196335  * km      Scalar to multiply by.
196336  * am      Point to add to scalar mulitply result.
196337  * inMont  Point to add is in montgomery form.
196338  * r       Resulting point.
196339  * map     Indicates whether to convert result to affine.
196340  * heap    Heap to use for allocation.
196341  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
196342  */
sp_ecc_mulmod_base_add_1024(const mp_int * km,const ecc_point * am,int inMont,ecc_point * r,int map,void * heap)196343 int sp_ecc_mulmod_base_add_1024(const mp_int* km, const ecc_point* am,
196344         int inMont, ecc_point* r, int map, void* heap)
196345 {
196346 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
196347     sp_point_1024* point = NULL;
196348     sp_digit* k = NULL;
196349 #else
196350     sp_point_1024 point[2];
196351     sp_digit k[32 + 32 * 2 * 5];
196352 #endif
196353     sp_point_1024* addP = NULL;
196354     sp_digit* tmp = NULL;
196355     int err = MP_OKAY;
196356 
196357 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
196358     point = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024) * 2, heap,
196359                                          DYNAMIC_TYPE_ECC);
196360     if (point == NULL)
196361         err = MEMORY_E;
196362     if (err == MP_OKAY) {
196363         k = (sp_digit*)XMALLOC(
196364             sizeof(sp_digit) * (32 + 32 * 2 * 5),
196365             heap, DYNAMIC_TYPE_ECC);
196366         if (k == NULL)
196367             err = MEMORY_E;
196368     }
196369 #endif
196370 
196371     if (err == MP_OKAY) {
196372         addP = point + 1;
196373         tmp = k + 32;
196374 
196375         sp_1024_from_mp(k, 32, km);
196376         sp_1024_point_from_ecc_point_32(addP, am);
196377     }
196378     if ((err == MP_OKAY) && (!inMont)) {
196379         err = sp_1024_mod_mul_norm_32(addP->x, addP->x, p1024_mod);
196380     }
196381     if ((err == MP_OKAY) && (!inMont)) {
196382         err = sp_1024_mod_mul_norm_32(addP->y, addP->y, p1024_mod);
196383     }
196384     if ((err == MP_OKAY) && (!inMont)) {
196385         err = sp_1024_mod_mul_norm_32(addP->z, addP->z, p1024_mod);
196386     }
196387     if (err == MP_OKAY) {
196388             err = sp_1024_ecc_mulmod_base_32(point, k, 0, 0, heap);
196389     }
196390     if (err == MP_OKAY) {
196391             sp_1024_proj_point_add_32(point, point, addP, tmp);
196392 
196393         if (map) {
196394                 sp_1024_map_32(point, point, tmp);
196395         }
196396 
196397         err = sp_1024_point_to_ecc_point_32(point, r);
196398     }
196399 
196400 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
196401     if (k != NULL)
196402         XFREE(k, heap, DYNAMIC_TYPE_ECC);
196403     if (point)
196404         XFREE(point, heap, DYNAMIC_TYPE_ECC);
196405 #endif
196406 
196407     return err;
196408 }
196409 
196410 #ifndef WOLFSSL_SP_SMALL
196411 /* Generate a pre-computation table for the point.
196412  *
196413  * gm     Point to generate table for.
196414  * table  Buffer to hold pre-computed points table.
196415  * len    Length of table.
196416  * heap   Heap to use for allocation.
196417  * returns BAD_FUNC_ARG when gm or len is NULL, LENGTH_ONLY_E when table is
196418  * NULL and length is returned, BUFFER_E if length is too small and 0 otherwise.
196419  */
sp_ecc_gen_table_1024(const ecc_point * gm,byte * table,word32 * len,void * heap)196420 int sp_ecc_gen_table_1024(const ecc_point* gm, byte* table, word32* len,
196421     void* heap)
196422 {
196423 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
196424     sp_point_1024* point = NULL;
196425     sp_digit* t = NULL;
196426 #else
196427     sp_point_1024 point[1];
196428     sp_digit t[5 * 2 * 32];
196429 #endif
196430     int err = MP_OKAY;
196431 
196432     if ((gm == NULL) || (len == NULL)) {
196433         err = BAD_FUNC_ARG;
196434     }
196435 
196436     if ((err == MP_OKAY) && (table == NULL)) {
196437         *len = sizeof(sp_table_entry_1024) * 256;
196438         err = LENGTH_ONLY_E;
196439     }
196440     if ((err == MP_OKAY) && (*len < (int)(sizeof(sp_table_entry_1024) * 256))) {
196441         err = BUFFER_E;
196442     }
196443 
196444 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
196445     if (err == MP_OKAY) {
196446         point = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024), heap,
196447             DYNAMIC_TYPE_ECC);
196448         if (point == NULL)
196449             err = MEMORY_E;
196450     }
196451     if (err == MP_OKAY) {
196452         t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 5 * 2 * 32, heap,
196453             DYNAMIC_TYPE_ECC);
196454         if (t == NULL)
196455             err = MEMORY_E;
196456     }
196457 #endif
196458 
196459     if (err == MP_OKAY) {
196460         sp_1024_point_from_ecc_point_32(point, gm);
196461             err = sp_1024_gen_stripe_table_32(point,
196462                 (sp_table_entry_1024*)table, t, heap);
196463     }
196464     if (err == 0) {
196465         *len = sizeof(sp_table_entry_1024) * 256;
196466     }
196467 
196468 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
196469     if (t != NULL)
196470         XFREE(t, heap, DYNAMIC_TYPE_ECC);
196471     if (point != NULL)
196472         XFREE(point, heap, DYNAMIC_TYPE_ECC);
196473 #endif
196474 
196475     return err;
196476 }
196477 #else
196478 /* Generate a pre-computation table for the point.
196479  *
196480  * gm     Point to generate table for.
196481  * table  Buffer to hold pre-computed points table.
196482  * len    Length of table.
196483  * heap   Heap to use for allocation.
196484  * returns BAD_FUNC_ARG when gm or len is NULL, LENGTH_ONLY_E when table is
196485  * NULL and length is returned, BUFFER_E if length is too small and 0 otherwise.
196486  */
sp_ecc_gen_table_1024(const ecc_point * gm,byte * table,word32 * len,void * heap)196487 int sp_ecc_gen_table_1024(const ecc_point* gm, byte* table, word32* len,
196488     void* heap)
196489 {
196490     int err = 0;
196491 
196492     if ((gm == NULL) || (len == NULL)) {
196493         err = BAD_FUNC_ARG;
196494     }
196495 
196496     if ((err == 0) && (table == NULL)) {
196497         *len = 0;
196498         err = LENGTH_ONLY_E;
196499     }
196500     if ((err == 0) && (*len != 0)) {
196501         err = BUFFER_E;
196502     }
196503     if (err == 0) {
196504         *len = 0;
196505     }
196506 
196507     (void)heap;
196508 
196509     return err;
196510 }
196511 #endif
196512 /* Multiply the point by the scalar and return the result.
196513  * If map is true then convert result to affine coordinates.
196514  *
196515  * km     Scalar to multiply by.
196516  * gm     Point to multiply.
196517  * table  Pre-computed points.
196518  * r      Resulting point.
196519  * map    Indicates whether to convert result to affine.
196520  * heap   Heap to use for allocation.
196521  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
196522  */
sp_ecc_mulmod_table_1024(const mp_int * km,const ecc_point * gm,byte * table,ecc_point * r,int map,void * heap)196523 int sp_ecc_mulmod_table_1024(const mp_int* km, const ecc_point* gm, byte* table,
196524         ecc_point* r, int map, void* heap)
196525 {
196526 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
196527     sp_point_1024* point = NULL;
196528     sp_digit* k = NULL;
196529 #else
196530     sp_point_1024 point[1];
196531     sp_digit k[32];
196532 #endif
196533     int err = MP_OKAY;
196534 
196535 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
196536     point = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024), heap,
196537         DYNAMIC_TYPE_ECC);
196538     if (point == NULL) {
196539         err = MEMORY_E;
196540     }
196541     if (err == MP_OKAY) {
196542         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32, heap, DYNAMIC_TYPE_ECC);
196543         if (k == NULL)
196544             err = MEMORY_E;
196545     }
196546 #endif
196547 
196548     if (err == MP_OKAY) {
196549         sp_1024_from_mp(k, 32, km);
196550         sp_1024_point_from_ecc_point_32(point, gm);
196551 
196552 #ifndef WOLFSSL_SP_SMALL
196553             err = sp_1024_ecc_mulmod_stripe_32(point, point,
196554                 (const sp_table_entry_1024*)table, k, map, 0, heap);
196555 #else
196556         (void)table;
196557         err = sp_1024_ecc_mulmod_32(point, point, k, map, 0, heap);
196558 #endif
196559     }
196560     if (err == MP_OKAY) {
196561         err = sp_1024_point_to_ecc_point_32(point, r);
196562     }
196563 
196564 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
196565     if (k != NULL)
196566         XFREE(k, heap, DYNAMIC_TYPE_ECC);
196567     if (point != NULL)
196568         XFREE(point, heap, DYNAMIC_TYPE_ECC);
196569 #endif
196570 
196571     return err;
196572 }
196573 
196574 /* Multiply p* in projective co-ordinates by q*.
196575  *
196576  * r.x = p.x - (p.y * q.y)
196577  * r.y = (p.x * q.y) + p.y
196578  *
196579  * px  [in,out]  A single precision integer - X ordinate of number to multiply.
196580  * py  [in,out]  A single precision integer - Y ordinate of number to multiply.
196581  * q   [in]      A single precision integer - multiplier.
196582  * t   [in]      Two single precision integers - temps.
196583  */
sp_1024_proj_mul_qx1_32(sp_digit * px,sp_digit * py,const sp_digit * q,sp_digit * t)196584 static void sp_1024_proj_mul_qx1_32(sp_digit* px, sp_digit* py,
196585         const sp_digit* q, sp_digit* t)
196586 {
196587     sp_digit* t1 = t;
196588     sp_digit* t2 = t + 2 * 32;
196589 
196590     /* t1 = p.x * q.y */
196591     sp_1024_mont_mul_32(t1, px, q, p1024_mod, p1024_mp_mod);
196592     /* t2 = p.y * q.y */
196593     sp_1024_mont_mul_32(t2, py, q, p1024_mod, p1024_mp_mod);
196594     /* r.x = p.x - (p.y * q.y) */
196595     sp_1024_mont_sub_32(px, px, t2, p1024_mod);
196596     /* r.y = (p.x * q.y) + p.y */
196597     sp_1024_mont_add_32(py, t1, py, p1024_mod);
196598 }
196599 
196600 /* Square p* in projective co-ordinates.
196601  *
196602  *   px' = (p.x + p.y) * (p.x - p.y) = p.x^2 - p.y^2
196603  *   py' = 2 * p.x * p.y
196604  *
196605  * px  [in,out]  A single precision integer - X ordinate of number to square.
196606  * py  [in,out]  A single precision integer - Y ordinate of number to square.
196607  * t   [in]      Two single precision integers - temps.
196608  */
sp_1024_proj_sqr_32(sp_digit * px,sp_digit * py,sp_digit * t)196609 static void sp_1024_proj_sqr_32(sp_digit* px, sp_digit* py, sp_digit* t)
196610 {
196611     sp_digit* t1 = t;
196612     sp_digit* t2 = t + 2 * 32;
196613 
196614     /* t1 = p.x + p.y */
196615     sp_1024_mont_add_32(t1, px, py, p1024_mod);
196616     /* t2 = p.x - p.y */
196617     sp_1024_mont_sub_32(t2, px, py, p1024_mod);
196618     /* r.y = p.x * p.y */
196619     sp_1024_mont_mul_32(py, px, py, p1024_mod, p1024_mp_mod);
196620     /* r.x = (p.x + p.y) * (p.x - p.y) */
196621     sp_1024_mont_mul_32(px, t1, t2, p1024_mod, p1024_mp_mod);
196622     /* r.y = (p.x * p.y) * 2 */
196623     sp_1024_mont_dbl_32(py, py, p1024_mod);
196624 }
196625 
196626 #ifdef WOLFSSL_SP_SMALL
196627 /* Perform the modular exponentiation in Fp* for SAKKE.
196628  *
196629  * Simple square and multiply when expontent bit is one algorithm.
196630  * Square and multiply performed in Fp*.
196631  *
196632  * base  [in]   Base. MP integer.
196633  * exp   [in]   Exponent. MP integer.
196634  * res   [out]  Result. MP integer.
196635  * returns 0 on success and MEMORY_E if memory allocation fails.
196636  */
sp_ModExp_Fp_star_1024(const mp_int * base,mp_int * exp,mp_int * res)196637 int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res)
196638 {
196639 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
196640     !defined(WOLFSSL_SP_NO_MALLOC)
196641     sp_digit* td;
196642     sp_digit* t;
196643     sp_digit* tx;
196644     sp_digit* ty;
196645     sp_digit* b;
196646     sp_digit* e;
196647 #else
196648     sp_digit t[4 * 2 * 32];
196649     sp_digit tx[2 * 32];
196650     sp_digit ty[2 * 32];
196651     sp_digit b[2 * 32];
196652     sp_digit e[2 * 32];
196653 #endif
196654     sp_digit* r;
196655     int err = MP_OKAY;
196656     int bits;
196657     int i;
196658 
196659 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
196660     !defined(WOLFSSL_SP_NO_MALLOC)
196661     td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 8 * 32 * 2, NULL,
196662                             DYNAMIC_TYPE_TMP_BUFFER);
196663     if (td == NULL) {
196664         err = MEMORY_E;
196665     }
196666 #endif
196667 
196668     if (err == MP_OKAY) {
196669 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
196670     !defined(WOLFSSL_SP_NO_MALLOC)
196671         t  = td;
196672         tx = td + 4 * 32 * 2;
196673         ty = td + 5 * 32 * 2;
196674         b  = td + 6 * 32 * 2;
196675         e  = td + 7 * 32 * 2;
196676 #endif
196677         r = ty;
196678 
196679         bits = mp_count_bits(exp);
196680         sp_1024_from_mp(b, 32, base);
196681         sp_1024_from_mp(e, 32, exp);
196682 
196683         XMEMCPY(tx, p1024_norm_mod, sizeof(sp_digit) * 32);
196684         sp_1024_mul_32(b, b, p1024_norm_mod);
196685         err = sp_1024_mod_32(b, b, p1024_mod);
196686     }
196687     if (err == MP_OKAY) {
196688         XMEMCPY(ty, b, sizeof(sp_digit) * 32);
196689 
196690         for (i = bits - 2; i >= 0; i--) {
196691             sp_1024_proj_sqr_32(tx, ty, t);
196692             if ((e[i / 32] >> (i % 32)) & 1) {
196693                 sp_1024_proj_mul_qx1_32(tx, ty, b, t);
196694             }
196695         }
196696     }
196697 
196698     if (err == MP_OKAY) {
196699         sp_1024_mont_inv_32(tx, tx, t);
196700 
196701         XMEMSET(tx + 32, 0, sizeof(sp_digit) * 32);
196702         sp_1024_mont_reduce_32(tx, p1024_mod, p1024_mp_mod);
196703         XMEMSET(ty + 32, 0, sizeof(sp_digit) * 32);
196704         sp_1024_mont_reduce_32(ty, p1024_mod, p1024_mp_mod);
196705 
196706         sp_1024_mul_32(r, tx, ty);
196707         err = sp_1024_mod_32(r, r, p1024_mod);
196708     }
196709     if (err == MP_OKAY) {
196710         err = sp_1024_to_mp(r, res);
196711     }
196712 
196713 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
196714     !defined(WOLFSSL_SP_NO_MALLOC)
196715     if (td != NULL) {
196716         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
196717     }
196718 #endif
196719     return err;
196720 }
196721 
196722 #else
196723 /* Pre-computed table for exponentiating g.
196724  * Striping: 8 points at a distance of (128 combined for
196725  * a total of 256 points.
196726  */
196727 static const sp_digit sp_1024_g_table[256][32] = {
196728     { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
196729       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
196730       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
196731       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
196732       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
196733       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
196734       0x00000000, 0x00000000 },
196735     { 0x335c1685, 0x170a46d2, 0xe1007a58, 0xeac9e971, 0x43ca4a73,
196736       0x40e8f3df, 0x82642475, 0x2646f815, 0xb36576d1, 0x3af49bb4,
196737       0x72bf1afb, 0xd89e2d14, 0x2fd151e6, 0x27be882c, 0x8f88717c,
196738       0xaddedc85, 0x16ac6c6f, 0xd6d859bf, 0x2d8eae58, 0x0e741a1b,
196739       0x61c1f30d, 0x6faf7a00, 0x9b67e096, 0x66dbd09a, 0x7d3b4f7d,
196740       0x21f11c06, 0xc727c98e, 0x6152ba02, 0xe86cb221, 0xafd58891,
196741       0x6bd3baf4, 0x59e93c6a },
196742     { 0x71dd4594, 0xe54dd36f, 0x00aef1e6, 0xbbc9cc9f, 0xa19f6530,
196743       0x9ea5a44e, 0x3f520928, 0x8588aa99, 0x8f5c1418, 0x9753794c,
196744       0xc11399fa, 0x118bd792, 0xf5cb6ab5, 0xb9bd3afd, 0x2ecb9652,
196745       0x813d1cb2, 0x40389813, 0xfd456267, 0x4ac8431c, 0x51f7119b,
196746       0x0a180eb6, 0xdd9f6a91, 0x9f7bfa2e, 0x13946d17, 0x50a9d0d9,
196747       0x16f18631, 0x6f8373d3, 0x5f19c20d, 0x9b6a52b9, 0xbe85ac6a,
196748       0x74f62e03, 0x63ef187b },
196749     { 0x016f45e7, 0x7c376b7f, 0x2bec82f8, 0x1c1bdb57, 0xce429b60,
196750       0x7392f741, 0xc7afd81d, 0x6fdbf0a2, 0x7241098b, 0xbda41b1f,
196751       0xbb60f8cf, 0x5b407474, 0xb330bc4d, 0x933e0d41, 0x733fa3be,
196752       0xae182830, 0x0f5c6cd1, 0xa0ed299b, 0x3f9860c8, 0x7ff3354e,
196753       0x15559c41, 0xb1360986, 0x129f85cb, 0xab0cb63c, 0x47685fbe,
196754       0x682ecc49, 0xeb199633, 0x505e8ec2, 0xddac2cda, 0x90dcc794,
196755       0xf192da23, 0x4fe6791c },
196756     { 0x05e8733c, 0x94a423d5, 0x1d5717c1, 0xcc845e65, 0xe961b322,
196757       0x237c7e88, 0xdb4181cc, 0x0c4471c6, 0x713bd721, 0x00c875e2,
196758       0xb2c17b09, 0x9dfde9ed, 0xe88ceaf6, 0x430a6de5, 0x7b81cea6,
196759       0xaaa7a61a, 0x233f98d5, 0xea52d026, 0x60689a9a, 0xb55efdd0,
196760       0x5cac4aab, 0x30cfa7ce, 0x8e950761, 0xfa4db114, 0x4e9a1e52,
196761       0x309570c4, 0x1a040170, 0x18c21f61, 0xbe78d9d2, 0x555d1ffe,
196762       0x561db297, 0x04482a18 },
196763     { 0x73d486d8, 0xe7758ac2, 0x61cdc1e7, 0x8169f946, 0x2188ab4f,
196764       0x723c99fc, 0xf3373630, 0xa0e54f02, 0xbd8c2260, 0x560bee25,
196765       0x4531bc60, 0x28fc307c, 0x7e44feb5, 0xd6f21f1a, 0x57128d37,
196766       0xc8e4499c, 0xd7b2ea45, 0x963b053e, 0x32a3d222, 0x40c27a04,
196767       0x35459668, 0x5b51854d, 0xd73557e9, 0x66e1a49f, 0x8692077a,
196768       0x0d267fd9, 0xe7342702, 0xfa1350d3, 0x68ccdb44, 0x1a9c3f25,
196769       0xdedbf89f, 0x833a0ff8 },
196770     { 0xab376b76, 0xa8c419c7, 0x27d0f0cc, 0x3b7294f3, 0xa90c514d,
196771       0xe56bb9e2, 0xa62575a6, 0x931ba51e, 0x098c0a88, 0x56fee07b,
196772       0xb4c16a2a, 0x04be5aee, 0xe6eb260b, 0xe513350b, 0xa1d5c270,
196773       0x339edad6, 0xe9dbadd1, 0xf366ed59, 0x2dd06ec0, 0x4213be88,
196774       0xcb1187db, 0x22d639c8, 0xd8a1058a, 0x1fec95e1, 0xa2b744f1,
196775       0x03f73ea6, 0xf4f05c0c, 0x741fd51a, 0x85f811a0, 0x2e2df95a,
196776       0xeb24965f, 0x692b3ce3 },
196777     { 0xd2a127b4, 0x0ce6cb72, 0x8f92816f, 0x66a46ea5, 0x47a37616,
196778       0x43ecf463, 0xe0ab96ee, 0x163d9a01, 0xb2edbe8c, 0xc8145c6d,
196779       0x4de4e665, 0x2f426cae, 0x74e252f9, 0x174d0b40, 0x7d2af831,
196780       0x54c240d7, 0x3d652936, 0x581fa397, 0xa09d4695, 0x05b9491c,
196781       0x5452643c, 0x8c4e8533, 0xd4128327, 0x32d64331, 0x70361f25,
196782       0x64479038, 0x89ef09f2, 0x774191b1, 0x81de5fe0, 0xc0cf0aaf,
196783       0xf40042d6, 0x333e430a },
196784     { 0xcf26d3b7, 0x5df04de4, 0xb53f79be, 0x57a77306, 0x1808b664,
196785       0xa4013c5f, 0x85037360, 0xef291ea4, 0x0b061037, 0x1ffc9d7d,
196786       0x65c913bb, 0xd9d04dd9, 0xf13b8587, 0x948a37af, 0xfe3ee755,
196787       0xb5443483, 0x04631386, 0x3fc21e74, 0xcddeb58c, 0xb3a104e5,
196788       0x6572cd52, 0x94fe1862, 0x15aaa408, 0xeb9a71a1, 0x459ea462,
196789       0x8adc6fe5, 0x4aeb02a3, 0xbb18d175, 0x2f7791d1, 0xae127636,
196790       0xd6bbd708, 0x10e8b31d },
196791     { 0x3ed9f1af, 0xb87f03e5, 0x56676166, 0x03ad2477, 0x74ce15b8,
196792       0x38dcd630, 0x26b1e85b, 0x1877e2b0, 0x1af99c15, 0xb1654d17,
196793       0x9382547a, 0x9782e9e4, 0x26d55ef5, 0x6dc7fc7c, 0x2fbeb54c,
196794       0x9038f95d, 0x036c0357, 0xfe590dfe, 0x4fdc3f7f, 0xcfcb6eae,
196795       0xf35e1a88, 0xcb1fbc54, 0xda0a5568, 0x3c8e1db2, 0x5b6f5557,
196796       0x9a87393f, 0xe7ac0a06, 0x38646b32, 0x2a8495ab, 0xfd261c83,
196797       0x0cdcc4bc, 0x6485524c },
196798     { 0xc4a6ff2a, 0x1abfb3e2, 0x35a6428a, 0x2aa03fba, 0x89aff742,
196799       0x884227f0, 0xba5dbd93, 0x2337883a, 0xd2a182cb, 0x38186ae9,
196800       0x49a01f05, 0xb9f0764d, 0x917b1e7a, 0x92411feb, 0x570cbb5b,
196801       0x700b1903, 0xb914be7c, 0x5d5181d5, 0x1981182d, 0x135c4437,
196802       0x574b9997, 0x32758d24, 0x632d28b2, 0xa650a8f5, 0xfa383f09,
196803       0x24078bac, 0x00a33d80, 0x6546a60c, 0x2df8b449, 0xa4061c7a,
196804       0xf234563c, 0x1f76f3f2 },
196805     { 0x44c436b0, 0x9aa2c143, 0x1f69c87a, 0x79070556, 0x5f6db2df,
196806       0x35f3117b, 0xed56ba82, 0x85761f41, 0x7d0afa48, 0xf831464f,
196807       0x3adce71e, 0xa99f2915, 0x116b7488, 0xb27bf693, 0x9bb9443a,
196808       0xa98a5a8c, 0x2ee5fde8, 0x7f878026, 0x1812acb7, 0x3a6f93dd,
196809       0xdc84bc92, 0xaf92a4cc, 0xf1d4995a, 0x3c2562af, 0x04ed899d,
196810       0xfd9fc33c, 0x4ed2a538, 0xc028ca94, 0x049ea726, 0xd0f367bb,
196811       0x3d108e05, 0x04924ffb },
196812     { 0xc673562f, 0x06548e3d, 0xe2eae48c, 0xd3b33025, 0x5e1c6977,
196813       0xe61fd32b, 0x6ebe557b, 0x424e2064, 0x41d6e18e, 0x767391c0,
196814       0x14d7e95b, 0x4b8ebb8e, 0x20991b8c, 0x4ae8b7d4, 0xe01290d3,
196815       0xf8a0df66, 0x925e5f4e, 0xc97e24a3, 0x1508272a, 0x79a7b2cb,
196816       0x25072661, 0xb40b072e, 0x9062fa49, 0xdad9e182, 0xf3c53bce,
196817       0x8780a784, 0x9f142799, 0x58a82b76, 0xc1468426, 0x08cd849c,
196818       0xc380ae35, 0x4dfce809 },
196819     { 0xd527b780, 0x45069cb2, 0x977930dd, 0xd52da015, 0xe27d0263,
196820       0x10cc600b, 0xbb2d1b2b, 0x34102c26, 0x554adf3c, 0x4c652623,
196821       0x45f0ff47, 0xd6891382, 0xca916e7c, 0x83fa8cc5, 0xd15c8d8a,
196822       0x1e10f139, 0x81dc56b3, 0xf173dc2e, 0x5c4ed9ba, 0x7fcecb04,
196823       0x47d01228, 0x307fd7d8, 0x9f3a532f, 0x24a57153, 0xe2153c22,
196824       0x59e9e81d, 0xe428a408, 0xc562595d, 0x9339bd23, 0xdc7daff8,
196825       0xb8a06802, 0x0d075908 },
196826     { 0xde085f2a, 0x870af2a7, 0xbe99b2e5, 0x88fcd24f, 0x59ca413b,
196827       0x88c0d261, 0x8559f851, 0x1f02a2e4, 0xf622da0d, 0x83b96021,
196828       0x6dca3615, 0x5c05c2f5, 0x7910c682, 0x0148cf1c, 0x272695be,
196829       0x392f2896, 0xa8d64ef6, 0x883d0bb5, 0x1cfcbc52, 0xef0d2244,
196830       0x526117e5, 0xf5dafcec, 0xf04928e9, 0xb68612b9, 0x393f2e2a,
196831       0x283f744d, 0x700c1151, 0xfbeed7ed, 0xa4360dfe, 0xf2cde215,
196832       0x2f08535a, 0x24fa961c },
196833     { 0x616df7f6, 0x0767db3f, 0xfbd90326, 0x643057d8, 0x6e82d544,
196834       0x174daa90, 0x689643db, 0x2284f345, 0xcc89a060, 0x18b191df,
196835       0xd6c27d12, 0xbab46af4, 0xc9895145, 0x5a57f486, 0xcc942f9e,
196836       0xc03214e9, 0x41950158, 0x273e1c8f, 0x39ad43ab, 0x8ceb759f,
196837       0xe50ee173, 0x5e1b8b7f, 0x8f4d7d4e, 0xf635b1fc, 0x755603f3,
196838       0x8eff77e3, 0x7752fa60, 0x201f61d1, 0x4a6fb6e1, 0x94d7a03d,
196839       0xfc4f0114, 0x371cc23d },
196840     { 0xda90c351, 0x289b115d, 0x364d9c06, 0x6d196ebf, 0xf650b31b,
196841       0x77a89202, 0x6f57642f, 0xcc28c164, 0x08100127, 0xdc4f7e36,
196842       0xdc4c807b, 0x8836cd08, 0xe00240f2, 0x1280f156, 0x99cb3953,
196843       0x3f9a6d78, 0x3a802038, 0x40a494d3, 0xe87d3474, 0x45697e91,
196844       0x26dde24a, 0x70d97d07, 0x7640c30e, 0x06f6a58d, 0x5ba6e6c6,
196845       0x03c2c0e8, 0xf1bc13e8, 0x330f6a7a, 0xc9f4d78f, 0x3e602e4f,
196846       0x0c80fb7f, 0x92b6bca0 },
196847     { 0x5f00822e, 0x2e3d5c83, 0xb8b16f12, 0x0e825712, 0x92b0a330,
196848       0x81c329c4, 0xa7cc1954, 0x6b4e32ad, 0x1bb1413f, 0x0bee9cee,
196849       0x4a92ca27, 0xedfb7baa, 0xea3b9153, 0xcd472afa, 0x00f0c0f9,
196850       0xe8f09e7e, 0x5cdebb70, 0xa4e1d872, 0x4a9b63b6, 0xfe2bae08,
196851       0x3fd58f65, 0xf40141b8, 0xa3b62759, 0xd7ec5eda, 0x790e3088,
196852       0x9aaf6e67, 0x1f277e31, 0x215ad830, 0xcf33871c, 0xe7db4b98,
196853       0x4f02f89d, 0x71ff62c9 },
196854     { 0x2a4a84d9, 0xaa4c7102, 0x5ebc71e6, 0xe2ee4acd, 0xf1cd6578,
196855       0x3b11a8a5, 0xfff120a5, 0x83f5ef9f, 0x09e65033, 0xa4c598e1,
196856       0xca044180, 0xe1e9f990, 0xf59828c1, 0x8b832d46, 0x33af536b,
196857       0x753f28a0, 0xb6d4f68a, 0x92edc4b1, 0x72ccd1f0, 0xedde692a,
196858       0xd2226432, 0xd3aa0f7d, 0xa3d2661c, 0x38dbb63e, 0xfdc37dda,
196859       0xf1e19fc6, 0x84ef6b4c, 0x6c18b350, 0xdf1bba69, 0xe6a83fe9,
196860       0x5f958273, 0x40fd47e7 },
196861     { 0x267140a4, 0x5b88b746, 0xeab6f2fb, 0x6dbbfc1e, 0x69862548,
196862       0xdd9ec88e, 0x2eb6efc2, 0x69beeba1, 0x8ac8ff88, 0xcfc2214a,
196863       0xb5a21950, 0x95d5c96e, 0x4171fb69, 0x93389c05, 0x1b468337,
196864       0x2d85d452, 0x4113425c, 0x14d68a08, 0xec6c2174, 0xe52c0139,
196865       0xf730084d, 0x20cf0b97, 0x1f578aa3, 0x1ac16a26, 0xf9b6ae43,
196866       0x18b9fab3, 0xd854a695, 0x68d82111, 0xdffbe286, 0x0b334d98,
196867       0xe639338c, 0x5b1c1157 },
196868     { 0x72b6bb8f, 0x90edaab1, 0x02fc92c2, 0x8dc64ed2, 0xfe694c73,
196869       0xf42ba3c5, 0xcb54dce4, 0x316dc65f, 0x632420dc, 0xcb2d66a3,
196870       0x056dcf94, 0x16e706e7, 0xa4f32c9d, 0x2809c764, 0xea6edca8,
196871       0xab18d830, 0x81c65f57, 0x4fd1ace6, 0x7da12c10, 0x1f91651c,
196872       0xc7791a48, 0x0ac3bd66, 0x785e67a3, 0xb6ad1cf4, 0xda0fd591,
196873       0xe4d3fc44, 0x6e1c6344, 0xce164801, 0x33e50ab3, 0x84de9cb8,
196874       0xa756eef4, 0x963ab83a },
196875     { 0xdf4ea5a3, 0x944b47d8, 0x5cfe45fe, 0x96568815, 0x8a3c3564,
196876       0xd16e7d58, 0xe7c99e15, 0x84e55b3e, 0xf55071bc, 0x3fee204d,
196877       0x04057dce, 0x71006f29, 0xbba75570, 0xfe8c390d, 0x3319adac,
196878       0x3645bcb6, 0x7c20bfd8, 0x8189e8b0, 0x7d7d9578, 0x8e550969,
196879       0xb99f4e3b, 0x037d1321, 0xa60cfb6a, 0x011b2521, 0x837382da,
196880       0x66594aaa, 0x83c1dc07, 0xc89b91fd, 0x076b9884, 0x6b82b899,
196881       0xbe45c558, 0x443480fc },
196882     { 0x9114221a, 0xf8ffffb4, 0x3e857a7a, 0x4aec4f2e, 0x0fa54787,
196883       0x42e2d0e4, 0xd6f96152, 0xef3e6b31, 0xfbfe9b77, 0xb2296537,
196884       0xfb43a86a, 0xc2a9d0f2, 0x24572ac6, 0x241284ed, 0xe721ba7b,
196885       0xa3868917, 0xc117a78d, 0xdbef7c00, 0xd31605ac, 0x38149071,
196886       0x065a8ee9, 0xc2dada9e, 0xc442be82, 0xd5b138d8, 0xf6d72b58,
196887       0x9b6c224b, 0x8eb03e6d, 0xb9d355cf, 0xa1700371, 0xab6d1eb0,
196888       0xcffaa7eb, 0x97118a88 },
196889     { 0xcdecb5d8, 0xbf9c59a2, 0xa93a6866, 0x8083c81b, 0x04774fbf,
196890       0x24e0dd81, 0xa02070b4, 0xe779a3ca, 0x0fbfb781, 0x9d352fbb,
196891       0x3ef2a1c4, 0xa8b0d820, 0x14b3e501, 0xb858637b, 0x8a882ff2,
196892       0x5ba70a49, 0x3b06efa5, 0xa2730083, 0x102fee2a, 0xa42c02f4,
196893       0x8a0223a5, 0xe4e76299, 0x85c3fc72, 0xdba2ba26, 0xfe52eae7,
196894       0x554fe763, 0x270f45f6, 0x30b5405a, 0xa573387c, 0xd56a177a,
196895       0x4b71fa82, 0x17c0778d },
196896     { 0x2735e37b, 0x0e6dff1d, 0x656ec572, 0xc9884e56, 0x9ebba978,
196897       0xa2f5ac9d, 0xba09f3c4, 0x40fa4518, 0xf5b04377, 0x8c3fa177,
196898       0x967a2eca, 0xa1a1decd, 0x0528bd40, 0x768bca70, 0x18691c4a,
196899       0xf224952b, 0xe86d5fd5, 0x16e12c45, 0x37859a6a, 0x7a0d9157,
196900       0xa0ffce0e, 0x723f4309, 0xa96cc9a3, 0x5a8db79b, 0x1ad23a38,
196901       0x6dd12ae0, 0xe2bf5d84, 0x9ffec3a1, 0xa452ed66, 0xd6ce84e1,
196902       0x571fe4c6, 0x1219d5c8 },
196903     { 0x262969eb, 0x43eaa67f, 0x2f03e773, 0x3a3ab39d, 0x57bb0909,
196904       0xe6127e51, 0x8d150274, 0x0f82b0ed, 0xe580bdbd, 0xffffcad8,
196905       0xa9743e6b, 0x51d3d075, 0x8bac11d6, 0x1484bdb1, 0xeb24c388,
196906       0x95cd9990, 0x7fac67c6, 0x216a61d0, 0xa04e6b87, 0x4308f762,
196907       0xcba57cc8, 0x2865dd61, 0xd234a07a, 0x3c296b0d, 0x3a0793f9,
196908       0x76f92839, 0x0be29ece, 0x70b57e1f, 0x7e626f42, 0x1314a82f,
196909       0xd657f230, 0x2c8d7ab2 },
196910     { 0x0825e4d6, 0x67cf5892, 0x6ef83b44, 0xdf51eaa5, 0x1310108d,
196911       0x63e665d8, 0x8dd0963f, 0x229f89f5, 0x9df6436a, 0x8c4b14dd,
196912       0xd45ebba7, 0x99dae469, 0x5a4df381, 0x118aab77, 0x29e37feb,
196913       0xda8978bd, 0xaca2d7ef, 0x69ced5aa, 0xc67d6a8a, 0x6c98d05d,
196914       0x77f84a34, 0x7474bf0d, 0xed8cd59a, 0xd4428b2e, 0xd1d398fb,
196915       0xb0fd1cd5, 0x94a20b11, 0x596013db, 0x1b404c44, 0x96eb705a,
196916       0x4b09d958, 0x2299d277 },
196917     { 0xc64397e6, 0x5b9cd58d, 0xbf6dd31e, 0xac198f1e, 0x3e9f1db2,
196918       0x5866d8e1, 0x8fcdc68c, 0x405ae287, 0xe53c01fd, 0xa4b280cd,
196919       0x411db5f6, 0xdc963f2d, 0xbec4f8a0, 0xed5d5189, 0x916ee98b,
196920       0x336fd13d, 0x042df48e, 0x6925b1b3, 0xace0074e, 0x0cf56291,
196921       0x25317e95, 0xe8d38b48, 0x821c446b, 0xc7ad1d2b, 0xf0b65934,
196922       0x71c44135, 0x52ca0d50, 0x971b736f, 0x27b46c26, 0xaf9ffa57,
196923       0x1936618e, 0x21ac6779 },
196924     { 0x2d7fbcd2, 0xab420e3f, 0x97bdfc18, 0x12722473, 0x4df5d4b4,
196925       0x492033f8, 0x3807b7d3, 0x6fcd4236, 0xb33c3625, 0xdfc19b09,
196926       0xa0f22814, 0x13d6f375, 0x037c19b8, 0x70978a59, 0x0ff27b9c,
196927       0x4f398997, 0x615a4389, 0xfc0e1a45, 0x3e602f74, 0xffa3496a,
196928       0xb261ca1c, 0xc3f1c431, 0xee0164cd, 0x612211db, 0xe7f7be9f,
196929       0x30463ee4, 0x92c2e1bb, 0x015f7e78, 0x24483a56, 0x663d88d6,
196930       0x0e62d9d8, 0x0e8ec1e7 },
196931     { 0x8a0878dd, 0xa88ccc29, 0x6640071a, 0x99ac175d, 0xa5173617,
196932       0x90344820, 0xdd58a315, 0x316d023e, 0x88d221a1, 0x30785bd4,
196933       0x959c48e3, 0xb74b3de7, 0x4c67a771, 0x42ee0382, 0xe0b91453,
196934       0x59ef6cdd, 0x9b237e91, 0x7830ae28, 0x495d8325, 0xe1847a4c,
196935       0xd0773666, 0x67b1217e, 0xa294a325, 0x58192c86, 0x864d8326,
196936       0x76aa0f56, 0xf4b13e5b, 0xe2a2bd12, 0x1b6b73fd, 0xd850c1c0,
196937       0x5d103635, 0x653a795f },
196938     { 0x50dcb199, 0xcfe28985, 0x7fa02b60, 0xb35b8e5e, 0xc97603d0,
196939       0xbca7d7c3, 0x27f131b5, 0xb0e5288d, 0xe2b12d52, 0x3aa704de,
196940       0x1db725c7, 0xe206b1d8, 0xc5d1b113, 0x0b12839a, 0xdb45d763,
196941       0x14f970cb, 0xb2125e8e, 0xc997f93e, 0xee7daa26, 0xbd75739c,
196942       0x1fef20e9, 0x46ecbd3f, 0x7c6a42b1, 0xf994a114, 0x27fb0fd1,
196943       0xd289eb4f, 0x9a40da4b, 0x11186d31, 0xfb9d7976, 0x083f65a5,
196944       0xd444675e, 0x30dfc47b },
196945     { 0x9eaadfe8, 0xbcfc5ae2, 0xb4d4e812, 0x25027e54, 0x8b533561,
196946       0xab0702df, 0x56a6a214, 0xa2b9c204, 0x3059068e, 0xb1a3df7a,
196947       0x9883110f, 0xa3514b21, 0xc4b78e1c, 0xb7be2336, 0x3e2f6984,
196948       0x17073ce6, 0x2ddf7ac6, 0x86e114a6, 0x07d7c3c8, 0x276192bf,
196949       0xeb1ae289, 0x5da69e0b, 0x25184939, 0x983af175, 0x407a3aa0,
196950       0x9ac52a4d, 0xae0fe218, 0x1535c7da, 0x397f2501, 0xe16fe872,
196951       0x54c212cf, 0x572a591f },
196952     { 0x09a5553a, 0x49668419, 0x327733bc, 0x3f054318, 0x3eefd690,
196953       0xf9ceb4b2, 0xf22126d4, 0xbd3cbf9b, 0x2fed9578, 0x6d9671c0,
196954       0xca0306d8, 0xbba597ce, 0x3d674fe5, 0xb705ed61, 0x67f33f76,
196955       0xf1d3622b, 0x11cb8c31, 0x15bcf3c6, 0xe53d1aa9, 0xa38467dc,
196956       0xf908ab43, 0x902fe929, 0x8d15767a, 0x6e3e499d, 0x90afd07b,
196957       0x8142db5c, 0x6c8b190e, 0x120c6fbc, 0x24919a4e, 0x80c86553,
196958       0xd8c82c3c, 0x65c2cbe1 },
196959     { 0xa660bb63, 0x684cda20, 0x86e86245, 0x27dc3b0a, 0x6ba0eed7,
196960       0x76472cf6, 0x679dd158, 0x79c162e5, 0x08452d44, 0xb6884277,
196961       0x413f579e, 0x829bc6b3, 0x95011770, 0x92ea15ec, 0x47738183,
196962       0x5e34e300, 0x73e1d2f1, 0x8c3ca349, 0x229bd3de, 0xa5c4f1dc,
196963       0x94ef7ed3, 0x783eff1b, 0xdfae7a1a, 0x46db738d, 0x1a099852,
196964       0x4353d72e, 0xa0dcf4ab, 0x2533ad58, 0x0e7888b9, 0xd8055016,
196965       0x3ba77f66, 0x831440d5 },
196966     { 0xf611b2da, 0xf43e2e32, 0xd0fa46ac, 0x5d066e29, 0x820b3c0d,
196967       0xe897f3e8, 0x1d3e44f0, 0xc45c28e6, 0xdfd27a66, 0x929d7f66,
196968       0x101e8517, 0x735b860a, 0x3de078dd, 0xea3fce98, 0x638ce11a,
196969       0xc9977db5, 0x48536b3b, 0x0488382f, 0x64cadfc6, 0x7e0c7a3c,
196970       0x82147b71, 0x3cd17f7f, 0x1b411e3e, 0xe95663cc, 0x985fb46d,
196971       0x5739ac8f, 0xbcf119ca, 0x385399cd, 0xe15a2815, 0x4a985a70,
196972       0x6d5f4566, 0x504c3a8a },
196973     { 0xb8fa53c7, 0x00b55283, 0x509474e3, 0x985cff38, 0x437ce25f,
196974       0x234d241c, 0xe5a129ed, 0x29832430, 0xaabcc674, 0x6ad38956,
196975       0x7ee81ee1, 0xa2dc001d, 0x670b2702, 0x4c23c6b6, 0xa6e8a3bb,
196976       0xb35e567e, 0xa69673ea, 0xbc70b3ce, 0xe6e28eac, 0x85a7a9c3,
196977       0x5537b7da, 0x2ae684de, 0x6de937dc, 0x5ecac3e5, 0xf8430422,
196978       0xbf2ea6c9, 0x77fdc520, 0x38caf7d0, 0x69f56add, 0xc27af0b1,
196979       0xc71d21d2, 0x496e4699 },
196980     { 0x9fa93467, 0xba14fc82, 0x0eb2a614, 0xc2e37684, 0x4833e09b,
196981       0x659bcfaf, 0x3686bdcc, 0xbc859752, 0x81f3216a, 0x40bfd080,
196982       0x17c081b8, 0xc463bda6, 0xbb04793b, 0xbd01fa86, 0x2cd640c5,
196983       0x5a21ece6, 0x2203d5c4, 0x97bf6a54, 0x951167b7, 0xceb40edc,
196984       0x765ba268, 0xd67aacaf, 0xaeab51f9, 0x8ba0d9e9, 0xb0d6863a,
196985       0xc14b215e, 0xe5f06952, 0x354cdcdb, 0xcb3744b5, 0x4f2b5ccf,
196986       0x13037fe8, 0x13389173 },
196987     { 0x45003cd1, 0xee680640, 0x44ae2ac6, 0xfdac17bc, 0xde8e5314,
196988       0x4bcd419f, 0xc7cea95c, 0x81e34eb9, 0x38f37e01, 0xbb57762d,
196989       0x260990c8, 0xecc4cfb0, 0x50a34a7b, 0x0bc493f9, 0x543304ef,
196990       0x68074172, 0x6bc8aa2a, 0xaec0fcb2, 0x3b45fea5, 0x9e7a9b46,
196991       0x55fbdbac, 0x4bb2952e, 0x0485dff4, 0x50f0c0a6, 0x4dea4796,
196992       0x02c5104d, 0x695e3a02, 0xd2cefa09, 0x6da1f345, 0x4c8102b4,
196993       0xf3833fbd, 0x422eb573 },
196994     { 0xa6ad3f47, 0xac592eb6, 0x9714ba0e, 0xb0861f6d, 0x07281459,
196995       0x57c1e919, 0x64ea5803, 0xcf7c94e2, 0x54b12723, 0x725376ac,
196996       0xdafb736a, 0xf2a6ba41, 0xcba03cdc, 0xc89e8920, 0x5b0fd3ad,
196997       0xf2e20cb4, 0xd66059fe, 0x26ea5a54, 0x889df8bc, 0xee63fa8b,
196998       0x66a3f2bf, 0x40f1c7e1, 0x747312e1, 0x09febc9c, 0x727999ff,
196999       0x7d19b9c2, 0xb7fd2b05, 0xa9fbbb4c, 0xa0da2dc6, 0xcfba27d7,
197000       0x2c252582, 0x368541cf },
197001     { 0x22799d37, 0x510d3c9e, 0xacfa333a, 0x1b677de5, 0x080f795b,
197002       0x4e6ae18f, 0xafc8dfc2, 0x69b53c2a, 0x0e842dc2, 0x797541b6,
197003       0xac067fe8, 0xd5a6f2af, 0xbd07d877, 0xd0208a03, 0x654be2f2,
197004       0x34b473f0, 0xf515e23e, 0xe67c102a, 0x2ac1af48, 0xb00dbf9d,
197005       0xb6a13d00, 0xe264fa41, 0x97e94c11, 0x1669786a, 0x86a586f4,
197006       0x09d8cf2d, 0xc7f927e9, 0x073bf869, 0x2241a566, 0xb8977880,
197007       0x22261334, 0x59a5bf59 },
197008     { 0x81347191, 0xe9d1c91e, 0xeb969972, 0x186c1abc, 0xa9d46a7f,
197009       0x07888767, 0xdaa7d397, 0xda93cfcc, 0xd91b9aa0, 0x08bee9f1,
197010       0xf8dd3c6c, 0x8267fd78, 0x94228100, 0xf93860d0, 0xdadb47fb,
197011       0x6a6a71aa, 0xa6156f8a, 0x9caa06b7, 0x39848bc9, 0xaa1b05e0,
197012       0x2aaa9135, 0x36ddc237, 0xb13f3bd1, 0x77e7e079, 0x4acc5f4d,
197013       0x8d0b5cbe, 0x984cfd36, 0x04da45f8, 0xd3d3e0f8, 0xf14ef618,
197014       0x43eb799c, 0x467564c1 },
197015     { 0xb6fff5d7, 0x8d725904, 0x92dc4752, 0x037f33af, 0x6d20b8aa,
197016       0x9095d575, 0x43baec39, 0x32235fc1, 0x68a2b9b0, 0xa2feb4af,
197017       0x94d35c61, 0x61c50318, 0xea877486, 0xac92b6a2, 0x011bc6f3,
197018       0x8eb48b15, 0xc79edcb2, 0xa28fe128, 0xa5d2a006, 0x9f71bc0c,
197019       0x2f15b850, 0xf3167732, 0x7a036218, 0xfe8d728c, 0x4f81e09e,
197020       0x068f39cb, 0x7b7c50d9, 0x1773f016, 0xed6a1e03, 0x0d0f7adb,
197021       0x4ee984d5, 0x8a0dee16 },
197022     { 0x47366e6f, 0x504991bf, 0xe86c3005, 0xb8084d9f, 0xa40cce36,
197023       0x14c4c751, 0x3f1961e2, 0xbbb46aa6, 0x40445e43, 0x56a785f9,
197024       0xc91e215f, 0xdb8d1b57, 0xc7ee808d, 0x6a8e453e, 0xbbaa1e8c,
197025       0xc0367ef8, 0xe3e18109, 0x310d91f1, 0x7e20a2c3, 0xf97cfd0e,
197026       0x554cc277, 0xf1e80c84, 0x7b628403, 0xe89bbc1d, 0x3fe0a17c,
197027       0x7778a966, 0xc1f00073, 0x9e9db19f, 0xb6f6bed2, 0x2ce7fe7d,
197028       0xee97ce23, 0x7b04b5d2 },
197029     { 0x82c5faf8, 0x5b546bc7, 0x8eb81097, 0x1a734c5e, 0xe77851e0,
197030       0x3d566861, 0xe956d51f, 0x833a1013, 0xc3c3c37c, 0xc7351731,
197031       0xe0c148ec, 0x607738fb, 0xe1bbef41, 0x2ec6f0bb, 0xcfa51857,
197032       0x0aa2ac6e, 0x66e3adf0, 0x072902d7, 0xc622d6e3, 0xcd4d5089,
197033       0xa6dd802f, 0x3ae21b23, 0x33886372, 0xe5465a55, 0xa8d81822,
197034       0xd85119a0, 0x3786977a, 0x4f14d032, 0x9c7b272c, 0x515b081c,
197035       0xc99be31c, 0x1c6a95a4 },
197036     { 0xc2821363, 0xa6b14ad5, 0x4d17de1c, 0x829c1823, 0xccade848,
197037       0xaef5d2c4, 0x82489e27, 0xf412ab39, 0xf081d927, 0x92c9c098,
197038       0x75cbad1f, 0x6f87bdf4, 0x1a1d9fb1, 0xf4aadab8, 0xb75f3b76,
197039       0x475a7923, 0xdbbba8fe, 0x99dd0ad6, 0x4b70ab45, 0x836f6164,
197040       0x34bd9af1, 0x2a464881, 0xba9abda3, 0x5c91226e, 0xe65625fb,
197041       0x4cec8709, 0x0818e4be, 0xd4b3919e, 0x14f6879c, 0xa5c09c84,
197042       0x30a864c9, 0x72708a02 },
197043     { 0xf34a466c, 0x4f33c0b1, 0x7f9d45ba, 0xa1bae09c, 0x0e28785c,
197044       0xd70f0fee, 0x90880881, 0x824c7146, 0xbb043da3, 0xe2416c2a,
197045       0xcec6f432, 0x733da713, 0xc9793e1c, 0x2b590649, 0xb35c9365,
197046       0xdb62d5b0, 0x3e5c1b2a, 0x355eb6e2, 0xbb16b515, 0xcfe8b5ce,
197047       0xf709691c, 0x9e081869, 0x61a85bd5, 0xc865f9fb, 0xfae103f7,
197048       0xf169d3cc, 0x73467e9d, 0x9525c473, 0x43695113, 0x7db55c0b,
197049       0x73265d21, 0x7491c74c },
197050     { 0x80d2b94d, 0x312ed5bf, 0xba4b260b, 0x1b8ac633, 0xd62219a1,
197051       0xac86c58c, 0xaeb82c8e, 0x317ccf6b, 0x59ef9ced, 0x2dfb29ee,
197052       0xe42bcd5a, 0xdaa7d898, 0x5974b201, 0x93e295c8, 0xd9fc5adc,
197053       0x69e75784, 0x012aa3ba, 0xd6c4709f, 0xc85d3cb9, 0x1fda9f37,
197054       0xd3dd4abd, 0xe5487e25, 0x0b3ba22e, 0x00fd4b01, 0xc6e8dcbb,
197055       0xcb591493, 0xbce68664, 0xb7329fab, 0x68906b76, 0x6829d1c2,
197056       0x74176841, 0x8bcfd3e5 },
197057     { 0xd3c8c314, 0x06882734, 0x11870833, 0x95f0b2f1, 0xc068ba16,
197058       0xb937f7c3, 0x77924787, 0x5365e0d8, 0x1f992227, 0x15527e5e,
197059       0x27dffd4f, 0x0a069648, 0x2f586389, 0xd58b3df2, 0x6af20ead,
197060       0x83446b89, 0x50746257, 0x09d7970b, 0x4022a691, 0xd9e8d206,
197061       0x671ec379, 0xd1e5f8af, 0x057fe91e, 0x6f542509, 0x52890418,
197062       0xf14dda81, 0x1db932ad, 0xbd78010e, 0x905a9378, 0x3e18d1e4,
197063       0xbd37ab49, 0x53cadcf7 },
197064     { 0x5e53d0ff, 0x1bb5edf7, 0x888abf67, 0xd886606c, 0x12206d15,
197065       0x6491b0f8, 0xe22b6a33, 0xb3018345, 0xb173b317, 0xaba6794b,
197066       0x7dc9e595, 0x8c1e5867, 0x239624d1, 0x4e106482, 0xda55dd53,
197067       0x61752e59, 0x9e42879c, 0x018b4eab, 0x491f2bed, 0xcaf6784b,
197068       0x1e79429e, 0x3dcdb9d2, 0x10f26224, 0x36941485, 0xa650ec5c,
197069       0x106f190a, 0xb69a9760, 0x7542a5ae, 0xc32d1046, 0x69bd75e9,
197070       0xbf8c62b1, 0x90849964 },
197071     { 0x5a93c661, 0xb1390cf6, 0x9db5f056, 0x18486264, 0xa51a1788,
197072       0x92a93a9d, 0x6772de9a, 0x1b0cbb8f, 0x7c71487c, 0x6e67febd,
197073       0x4e62423e, 0xf9b4382d, 0xbb5a42f8, 0x96fda50e, 0x6089a4f2,
197074       0xc921b337, 0x875ec516, 0x49d32d7b, 0xc410124b, 0xbd86d2ca,
197075       0xc421fb7a, 0xf6862209, 0xf6b7de33, 0x3e1949ab, 0xe93c9268,
197076       0xcdee18f0, 0x08dc4cc0, 0xd4edbd5e, 0x73580d22, 0xc2b75be4,
197077       0x468cd7e8, 0x3d7f6ffa },
197078     { 0xdffbd5d1, 0xea7b290c, 0x970338df, 0x9d759da6, 0x90feedc9,
197079       0x56680b08, 0x42dce68e, 0xbc690af5, 0xb2ae4d82, 0x8519df2b,
197080       0x7f195b60, 0x5612467f, 0xd83c21f4, 0x659a342c, 0x55651633,
197081       0x55771bf5, 0x548ba562, 0x5fc68935, 0x9492f23a, 0xb5419203,
197082       0x9c9c6017, 0x567528e3, 0x511e6019, 0x3f064ed4, 0x1d16a555,
197083       0x303f9eb9, 0x2254abee, 0x3e18c4fd, 0xfd434e7c, 0x40994d6f,
197084       0x6dde74e6, 0x8fb12d3f },
197085     { 0x293cb7a4, 0x6c6381a2, 0xb87b7e4d, 0x453e09f0, 0x078ac3ef,
197086       0x4f212823, 0x578cae91, 0xe89ffad0, 0x716ba4dd, 0x4a2b696a,
197087       0xf6f580a0, 0x14681a14, 0x4c2f1307, 0x1358f97b, 0x2932fb89,
197088       0x87896996, 0x268a5af7, 0x29dd850a, 0xfe239f83, 0xaf771f6d,
197089       0x4f47499d, 0x5f20fd2e, 0x867ca0e9, 0x9b643e77, 0x375981ec,
197090       0xe7858ecd, 0x19ab1c97, 0xbe946a59, 0x06ff3453, 0x4f9303a2,
197091       0x75d237b1, 0x3fcc6731 },
197092     { 0xdf21f920, 0x509debd5, 0xc1401b90, 0xfaf70e1f, 0x95a64aaf,
197093       0x2429cbfd, 0x2c37a122, 0xf2120855, 0x7deb926b, 0x1d4c93f4,
197094       0x9fb3f1dc, 0x12f3e4c0, 0x5b51bc46, 0x56085a59, 0xf10fdbd2,
197095       0x2a2f5d62, 0xdf0cb3c2, 0x60dd62cf, 0x6b0f254b, 0x154424a3,
197096       0x564612b7, 0xc3a5a05d, 0xa1f5249c, 0xbebe30cf, 0x7e62a188,
197097       0x24ec6903, 0xaf429939, 0x75f0fbac, 0xb3fa8685, 0xd41345dc,
197098       0xc7151c34, 0x645146fd },
197099     { 0xba1924f9, 0xecec633a, 0x006326e1, 0xbba6f136, 0x7e50fc17,
197100       0x203757ac, 0xef3d8e00, 0xca531919, 0x51dc5a74, 0x9545a6aa,
197101       0xd31412b8, 0x6e21d58f, 0x7bb1d000, 0x01bc3005, 0x6ed1a9c3,
197102       0xf1789c69, 0x9858fa48, 0x7af2d35f, 0x8197be85, 0x434d09b9,
197103       0x29aa265d, 0x1dc07755, 0xc058fa80, 0xcad03be7, 0x54ba14ce,
197104       0x92d70a9f, 0x6c050a74, 0x6dc78505, 0x4d005dda, 0x2a7ca4a9,
197105       0xabfb9f2e, 0x448d3d72 },
197106     { 0x29b33989, 0xdc56f145, 0xa9ae815a, 0x868351bc, 0x4b074414,
197107       0xb3f45613, 0x3cd9f33b, 0x955ce42a, 0x5ff6e4a3, 0x13ade4ec,
197108       0xa50eaa91, 0xd3aac715, 0x5666efdf, 0x0c61ec99, 0xf6a4470a,
197109       0x108a28b8, 0xe54844c9, 0x402ef584, 0xd0e2f337, 0xb825b162,
197110       0xb46f7cbc, 0x3dcd131f, 0x96f2fd89, 0x208178ec, 0x25928c78,
197111       0x4d8c5d67, 0x9963c459, 0x285a33df, 0xd92a309f, 0x72497175,
197112       0xcb7019a5, 0x76881479 },
197113     { 0x91767eed, 0xba43a114, 0x92bf65db, 0x5e11b9ad, 0x03a5e21a,
197114       0xe8a22ce0, 0x2a335415, 0x63604421, 0x4a9ead62, 0xc2c563b4,
197115       0xa0b2aee5, 0x4bc06264, 0x8bf2e1d7, 0x75b8d575, 0xd08a265d,
197116       0x1cff0ee7, 0xb0b712a7, 0x17914e1d, 0x4b18692d, 0xc35925d0,
197117       0x56cce815, 0xde253f4c, 0x9fff0e3a, 0xa479241c, 0xddabed19,
197118       0x50b9d06e, 0x59fae506, 0x67135260, 0x532ce180, 0xf37600fb,
197119       0x5e5a8626, 0x670eb01c },
197120     { 0x73cdbb43, 0xdf73c0af, 0x7f2431ad, 0xcf08ecc5, 0x2a1a3845,
197121       0x91780541, 0x9224ddf1, 0x69a104f2, 0xbeac7eff, 0x4352f38d,
197122       0x7c2d1322, 0xfc3b3b4e, 0xb5e4b476, 0xa69e9430, 0x975a46f0,
197123       0x7d932340, 0x5d64eece, 0x8093899e, 0xdb2345e9, 0x7b821250,
197124       0x7f4b796b, 0x23552932, 0x4bb90b1f, 0x2ee9cc15, 0x9112f7d6,
197125       0x1fa9c8f5, 0x1cbaae32, 0x2d0f2f98, 0x0075166a, 0xb77f0366,
197126       0x635dff27, 0x504852e7 },
197127     { 0xa2f392fa, 0x2f0f3ce5, 0xec6c9078, 0x326c076a, 0x84baaaf6,
197128       0xad01de92, 0xcbe8e993, 0xb01b16d3, 0x2d950908, 0x71305c24,
197129       0x3853af38, 0xc66fd617, 0xd3c429a0, 0x7735140e, 0x1fabf027,
197130       0x8a31b12a, 0x058b3177, 0xa0530002, 0xa9c7deb9, 0xabffd9fc,
197131       0xe8667d30, 0xd05ef69b, 0xe9a9e13f, 0x2f3a7308, 0xb91eae9c,
197132       0x3f4c9a19, 0x618ce6c4, 0x50d0cee7, 0x5240f8b0, 0xfb24dc40,
197133       0xf7e90cc4, 0x992fe151 },
197134     { 0x38f197aa, 0x4454db31, 0x87872f98, 0xa4ded69d, 0x44f0a828,
197135       0x97b427b0, 0xa31e48c6, 0x9821e1ae, 0xdd98efec, 0xe38cb09f,
197136       0x480cb3ae, 0x20b84fa8, 0x47475573, 0xba5bb4a8, 0xcd50e96b,
197137       0xa9be080a, 0xef103550, 0xc4451e9c, 0xc441325c, 0x626ee75f,
197138       0x38a5e33d, 0x6eea5e98, 0xa2b0abd2, 0x7321beb9, 0x9b6082a9,
197139       0xca92e484, 0x992bcc2a, 0x1dc8168a, 0x9c8eb9fb, 0x134ecf4b,
197140       0x4c5b71e0, 0x5a68bfa8 },
197141     { 0xff0a2bfb, 0xb4ff3b45, 0x5502f8b0, 0xd105fff9, 0x5b1c0c26,
197142       0x14de5885, 0x0d3b9d04, 0xed16865b, 0x026d3917, 0x2f5a2453,
197143       0xf4db3c0e, 0x6a22f493, 0xe2418f2e, 0x4871548a, 0x509bef61,
197144       0x6ab363a8, 0xb8cbbbec, 0x91ca1e3a, 0x4011a396, 0x71e0dc98,
197145       0x0d5ca577, 0xff982e0a, 0x81897bc1, 0xeb40b045, 0x085ad5e7,
197146       0x4bc24a46, 0xa6337b7c, 0xd15c8fa0, 0xbef1628f, 0x56ce6ef7,
197147       0x9f5ef439, 0x78acfdf9 },
197148     { 0xf8520189, 0x45bf7f15, 0xc77f61c4, 0x954202a0, 0xdfa22e1b,
197149       0x39edc6b9, 0x1f4a3487, 0xd2d60267, 0x4814cc52, 0xcd933929,
197150       0x05e9f123, 0xde76a124, 0xae36b6f7, 0xe2306ea0, 0xb83a58e0,
197151       0x53815218, 0xa041231a, 0x9862bb76, 0xbf31be71, 0xe8da253c,
197152       0x37de861f, 0x2dfc5332, 0x90ae4890, 0xf25c93f6, 0x8baa6ed2,
197153       0x66bcb8f0, 0x908b4a29, 0x6f10ae0f, 0xb061c949, 0x8cb4b48c,
197154       0xd075a366, 0x0ad92d73 },
197155     { 0xc2ca548a, 0xbfb95fed, 0x80cd89ab, 0x4778c620, 0x3466c280,
197156       0xbe99154b, 0xd4be8902, 0xea3be093, 0x13e681ed, 0x847b7995,
197157       0x02f40161, 0xf22a8f4b, 0x4aeb7fe8, 0x3ef2cb4d, 0xb3aed5f6,
197158       0x9adc5151, 0x98c31163, 0xec1ccfd1, 0xa3d7d88f, 0xdc2ac17b,
197159       0x46421097, 0x08fa64d3, 0x94b90bcf, 0x5ebf80b7, 0x0b50a9eb,
197160       0x1b78b4ba, 0x279aa66b, 0x1a4fe934, 0x075b3ced, 0x8ef4dcaf,
197161       0x70a6e9ae, 0x95bbd8a0 },
197162     { 0xe614bbd0, 0x59f92495, 0xb823e363, 0x7567a887, 0xfc1bd6a7,
197163       0xe247c9ec, 0x8e835c42, 0x2bfaaf47, 0xaade066a, 0x314ef4e0,
197164       0x5c16d336, 0x072baa63, 0xe2f0e389, 0xfa429c71, 0xbd07d90f,
197165       0xcac1e5d0, 0x514f5c04, 0x69ff35ea, 0xc0554ec1, 0x893053fc,
197166       0x2a35947f, 0xab1d86b7, 0x2aebe487, 0xe29fb060, 0xdfb9cf21,
197167       0xa0a10d6d, 0xf20dfcf5, 0xad147059, 0xb8867a2a, 0x480dc66f,
197168       0xc125a919, 0x375a884f },
197169     { 0x1217f7ea, 0x178cbe2e, 0x875c6dab, 0x1a161e2a, 0x1bdb1a54,
197170       0xf7707ec0, 0xe4fd73ca, 0x678864a0, 0xd13a0d86, 0xbaebc664,
197171       0xc8d30668, 0x40325f99, 0x2f1c5950, 0xb93ed9c9, 0x541e0667,
197172       0xfdf36763, 0xb91a6763, 0xfd97fbb0, 0x6079c9a0, 0x26aa69ea,
197173       0x1eaa8c47, 0xc7303c80, 0xafa63c55, 0xdec75c81, 0x4fd12adb,
197174       0x01cdcde2, 0x1968838a, 0x9fe0dda7, 0x38415379, 0x66bb093b,
197175       0x08cb84ec, 0x268d818b },
197176     { 0x41580555, 0x73dae358, 0x473d103b, 0x4fc32e67, 0xbeccc1ab,
197177       0x240c1013, 0xb24ee9de, 0xda4099f2, 0x9fa8e066, 0x37b0cb5b,
197178       0x6438d7ee, 0xb5ae04e4, 0x2b720140, 0x7f7d3164, 0x339e4a78,
197179       0x86ef4edb, 0x3a7d8375, 0xa5e77eed, 0xbd707c2e, 0x883fad37,
197180       0x0f979189, 0x816b633a, 0x2e7a208e, 0xe24c028a, 0x4435516a,
197181       0x1171fe3c, 0x4f5f2bf5, 0x3eb93b33, 0x01b53a56, 0x8419ed4b,
197182       0x056ca44b, 0x8b02735c },
197183     { 0xe1019195, 0xb89bb464, 0xf3fc28c1, 0x1de4c026, 0x2bfc3b21,
197184       0xac120e6e, 0x91bdf92f, 0xec71bc5a, 0x0d995bc9, 0x485d7ab4,
197185       0xe6491ffe, 0x97c6768e, 0xafbce265, 0xd9552d19, 0x8e1b76c2,
197186       0xbae6c7fe, 0xd7e3ad1b, 0x167d8281, 0x5e989734, 0x3e149af9,
197187       0x8a0c8182, 0xd1f0024c, 0xc3006c0d, 0xf571ffdb, 0x58773d4c,
197188       0xb32ecf7e, 0xfd3540d8, 0x5822a782, 0x04365042, 0x5ab45c3f,
197189       0x4b4d85fe, 0x400e3aa0 },
197190     { 0x5e46e4a2, 0x47321649, 0x24136074, 0x37a2ed64, 0xc60ec77d,
197191       0x659223b1, 0xe5e0ac2e, 0x5e13aac3, 0xc5107ab7, 0xda17c41b,
197192       0x73c253db, 0x65b22ec9, 0xa5012296, 0xff3867b8, 0x0621a99b,
197193       0xfed660d5, 0xc89fc3f5, 0xa3c28506, 0xf16451a7, 0x3ed350b9,
197194       0x67cb586f, 0x27c3e032, 0x967185b1, 0xc807c779, 0x4a13009b,
197195       0x09c157d4, 0xadaf1f4d, 0x362f7647, 0xf3a6a198, 0x4a42b9ac,
197196       0x8da6e039, 0x131c3da2 },
197197     { 0xa7da83ba, 0x4a785ff1, 0xd04f4436, 0xf415b425, 0xec03f812,
197198       0x7c0899bd, 0x80f5f4a2, 0xc58d411a, 0xfda251b9, 0x3d32d610,
197199       0xcd3b2f32, 0x99bb4504, 0xf4c2083c, 0x198c444b, 0x730e83fd,
197200       0x60c261af, 0xcb02db90, 0x060ca4df, 0x9df1e7c8, 0x0ff7838b,
197201       0xc4c690c9, 0x6b79cf97, 0x5d75f154, 0x131514d7, 0x1cb0e8ff,
197202       0xa7c074f1, 0xb2c17615, 0xb920aac1, 0x44aa0ff0, 0xde8098ad,
197203       0x34545ce9, 0x71d1a46a },
197204     { 0xfa1b382e, 0x76178f76, 0x772dda0d, 0xa0d8ecc3, 0xc5d4d130,
197205       0xaa5aab2a, 0x8d72622c, 0x27d38ba4, 0xca3bed06, 0xc5410db6,
197206       0x793ceccf, 0xf637a588, 0x6e65e3d7, 0x1f65dafd, 0x60a45641,
197207       0xc3b44a85, 0x4f78540b, 0x0f47b3a8, 0x5e4d60f6, 0x824fdadd,
197208       0x17d3b6d5, 0xd8ccf90c, 0x325fc13a, 0x008eabdf, 0x3648fab9,
197209       0x3e90d716, 0x24c52d4b, 0x3964ff3a, 0x533d0acb, 0xb95cc416,
197210       0x1167f521, 0x6cd2699f },
197211     { 0x12f4f3ac, 0x2d8c0b3b, 0x99d1bdfb, 0xb03dcfe2, 0x30f37326,
197212       0x540034f8, 0x7c5a8c82, 0x22dd6893, 0xcd8f1442, 0xeb7093d0,
197213       0x585742f2, 0x892795a7, 0x087adadd, 0xe15f282c, 0x16ab7b5e,
197214       0x7bbdc749, 0xa58acbb4, 0xd30fe40b, 0xe2bac39b, 0x0de417eb,
197215       0xc61a04bc, 0x4b4b19a6, 0xf2735569, 0x9338c34d, 0x30ab196f,
197216       0xe8f03742, 0x6c88c965, 0xfa2efcb8, 0xc7eeb826, 0x19eee274,
197217       0xda345dc2, 0x327c063f },
197218     { 0x5b47cd53, 0xab399eff, 0x1943aefe, 0xbbe9869d, 0x1402a866,
197219       0xe64ecc7b, 0xb1c25a16, 0xc3e7c2aa, 0x022de271, 0xc4216b79,
197220       0x366d6a5f, 0xe58dfcc8, 0xda813336, 0xd159509e, 0x130bfb7c,
197221       0x370400f2, 0x93b48780, 0x1be4e059, 0x39f3cd22, 0x0623a1fe,
197222       0xeecb4f87, 0x72aa22b2, 0x6c27b83b, 0x1af4c496, 0xda5fa5bf,
197223       0x7a42a94b, 0x48b01af2, 0x9afba822, 0x3670112c, 0xeb6b9d2a,
197224       0xc0df6856, 0x020f19d1 },
197225     { 0xa4dbba20, 0x37051a86, 0xdb1de5c5, 0xb618ebc6, 0xe6525840,
197226       0x9a780a19, 0xd2bccc4d, 0x9440302d, 0x10285a24, 0xe9ff023d,
197227       0x3a486268, 0x3b937ee3, 0x4cd61147, 0xe37ee2f2, 0xa3d057cf,
197228       0x79fbbfd3, 0xccddefce, 0x5fba16d3, 0x5b231727, 0x916058ec,
197229       0x720c3adb, 0x47699ebe, 0x8b4f6bba, 0x26274386, 0xf18a0770,
197230       0x54b0092a, 0xacca1160, 0x99d090eb, 0x0c888f60, 0xf757e1ff,
197231       0xb0050544, 0x79e72720 },
197232     { 0x2820a239, 0x632acf25, 0xaae6b310, 0xb1a3974e, 0x48c0a1df,
197233       0xd61fd6ba, 0x5a3ee7aa, 0xd2453c39, 0xb980446d, 0x548455a0,
197234       0xde16676f, 0x9f29d97b, 0x789375a1, 0xf252ca0c, 0x7743a985,
197235       0xe961af3e, 0x66cdbd8d, 0x70c79c56, 0xcbc538f9, 0x14a3854e,
197236       0xa126851c, 0x58daa73a, 0x2a9f558c, 0xe9b5bb45, 0xfbd15e05,
197237       0x37af7f83, 0x38a1939d, 0xa4487927, 0x9511a056, 0xe428b2b5,
197238       0x7015846d, 0x001d3ce3 },
197239     { 0xe145b1d7, 0xd6be36b9, 0x009c5664, 0xf3e3938a, 0xe7c0f6db,
197240       0x2e562e7d, 0xc343f539, 0x951044e6, 0xd90897b1, 0xa5ab62b8,
197241       0x512f797c, 0xb1a1f70b, 0x750f28e4, 0x91cdd754, 0xffb8165d,
197242       0xb4c80e2f, 0x594d02b3, 0x65ed39c7, 0x56833edc, 0xcc12a49d,
197243       0xf3693a18, 0xe73694bc, 0xfcd2c404, 0x34cc134a, 0x11d40194,
197244       0x071bd5fc, 0xfc585e46, 0x05759047, 0x790b7a04, 0xb3280360,
197245       0x40afc684, 0x4bb8c6fc },
197246     { 0xfd0f8796, 0x3120e2dd, 0xb133c9de, 0x6968a40d, 0xa9369c6e,
197247       0xfea366c0, 0x6007273b, 0x37e5b6d6, 0x8cb81439, 0x39e4ecf0,
197248       0x9febc005, 0x487fe9cd, 0x0199b53c, 0xeb8af444, 0x293519eb,
197249       0x2f124e3b, 0xc82c9c16, 0x860c218a, 0x709dc590, 0xacd1d6f2,
197250       0x36d50529, 0x5696d545, 0x59120bfc, 0xc03f5df9, 0x10ffa690,
197251       0x99a3e88d, 0x6c432827, 0xd4f9cfa5, 0x9a135d89, 0x2e8fea9e,
197252       0xb6a77e78, 0x3699a881 },
197253     { 0x1eb1c64d, 0x5bca3372, 0xf1d28154, 0xe9cf3a2d, 0x6537106f,
197254       0xb7e2e9b3, 0x4f7cbf4d, 0x06c17151, 0x2058b37f, 0xcbde416e,
197255       0x8834e9c5, 0x82c53a7e, 0xe9ac3a75, 0x94dbdfe2, 0xc5e67c02,
197256       0x795ec6cb, 0x1426a80d, 0x8c23c25f, 0x6a8d4f9f, 0xee2cd20d,
197257       0xd3b7c235, 0x838daa54, 0x3d7a4d52, 0xb9e08ec0, 0x781cb473,
197258       0xca9475e9, 0x5ec31caa, 0x7271f39e, 0x82535187, 0x1df08e9f,
197259       0x208aff8b, 0x4f3a4b03 },
197260     { 0x1ed095f8, 0x0f7b8107, 0xda226d4e, 0x23e37fa6, 0xafb36d1d,
197261       0x8b0f9852, 0x07d8e311, 0xb114634e, 0xe3e0f16e, 0xb9634a97,
197262       0x421eec37, 0x2454bb9c, 0xd72b21c1, 0xb4ecd5db, 0x6df20d7c,
197263       0xf9603868, 0xdf86e0a2, 0x9f5359fd, 0x5ac488aa, 0xc43d54fa,
197264       0xd1049df4, 0x56d714ab, 0xb020607a, 0x13152b3e, 0x7a02325e,
197265       0x49be1c18, 0x52ae84db, 0x44f24f4a, 0x0b5a7b80, 0x9e525c03,
197266       0xa6d179fd, 0x6d874446 },
197267     { 0xbe9a42f5, 0xd29d07aa, 0x3781ccc8, 0x1fd5316c, 0x9dc69ea1,
197268       0x71a75a6d, 0x88fee91a, 0x4e19e0df, 0xf8d44f12, 0x99c2b4dc,
197269       0x31ae94e4, 0x05f6df92, 0xcf28ccc2, 0x27fba876, 0xf57f7ceb,
197270       0x6e1a0f01, 0xf3fd3b74, 0xe03f1f34, 0x42c1d213, 0xa0edc4a7,
197271       0x7deb8580, 0x5caac270, 0xaf0848bc, 0x0f5d791f, 0x07ac759d,
197272       0x17f514ad, 0x904fc531, 0x95a39734, 0x7bb70f3d, 0x95a4aca9,
197273       0xff9c5609, 0x3cf384c9 },
197274     { 0xce1fc9e3, 0x700506ba, 0x676b0399, 0x49721742, 0xe72bf7b3,
197275       0x2b4a1b8d, 0x79b209f7, 0xca8602a8, 0xce26a8e1, 0x90580b90,
197276       0xfe24f39a, 0x1ef339b7, 0x629362e1, 0xb6c5d991, 0x577b24f4,
197277       0x51174e1a, 0x05e451e9, 0xf380fcb5, 0x148321bd, 0xf4d97afb,
197278       0x747e5d2a, 0x099806bb, 0xbe99a608, 0x85525d65, 0xd455e820,
197279       0x264828d9, 0xd8560a65, 0x8c8c5405, 0x71030770, 0x3c67e73c,
197280       0xee73df26, 0x2b248850 },
197281     { 0x8541159f, 0x2173cde6, 0x4fb410b2, 0x78224c18, 0x1f2ca1c7,
197282       0x07a28619, 0xa8b23e40, 0x52c207d6, 0xa6b2344a, 0x071a0210,
197283       0xb5ed2945, 0xdb0e587c, 0x810fcc6c, 0x6c56b8ef, 0x62d843b9,
197284       0x1248c58f, 0x74c66975, 0x4b90363d, 0xe66c66f6, 0x6348f7f2,
197285       0xc126bcbe, 0xb2f9d441, 0x73ce49e8, 0xac07f2a3, 0xe81b0df0,
197286       0x52486758, 0x1d4621d1, 0xa108b54d, 0x74414a1c, 0x17261ece,
197287       0x6a3ac215, 0x938b3bcc },
197288     { 0xe4ded340, 0xa9e4a16b, 0x80e88036, 0x8e65fb2a, 0xdcd73acb,
197289       0x97089606, 0xaaa657a9, 0x1c3a0434, 0x49101b06, 0xf304fc58,
197290       0xda0bb64c, 0xe60fb61a, 0xf5542df5, 0x818c2aec, 0x56f76d5f,
197291       0x74020576, 0x92533d97, 0xb566b790, 0x74d6eb5f, 0xae4655e5,
197292       0xa55b44b7, 0x60f7a1b5, 0x93747ea5, 0x7970179b, 0xf2dace56,
197293       0x8ae7e0e8, 0x84e83c06, 0x98474607, 0x15307341, 0x24e8c9ed,
197294       0xd9e89d6b, 0x6cff58a5 },
197295     { 0x03e51f68, 0x508c01b0, 0x1d2fe7d6, 0xe1d1f225, 0x09bd8805,
197296       0xf7998d0b, 0x03e415b7, 0x255e907a, 0x607d9798, 0xd148467d,
197297       0x9b453896, 0x055c3b1e, 0x809f50f4, 0x35001013, 0xd0233fdc,
197298       0xfbbb2fa6, 0xff1820b8, 0x0b680b0a, 0x38d317e0, 0xb1d404dc,
197299       0xccc8c7df, 0x133d5444, 0x6ec13f84, 0x7fa847e6, 0x046e2e48,
197300       0xc33f83d8, 0x4863b3ac, 0x3c627fc5, 0xeb936af7, 0x5f67f8aa,
197301       0x31b79327, 0x5fe4ac8f },
197302     { 0x8b6f401e, 0x581aa4bf, 0xad5c7ed4, 0x05db12a3, 0x6fb07b4a,
197303       0x7b018726, 0x9c22bcd4, 0xfdd11f04, 0x69371c95, 0x5454a7d4,
197304       0x99a46eaf, 0x066c55fb, 0x7fef96d0, 0x18637c7c, 0x6b83e95c,
197305       0xbafc1d34, 0x00bb42dc, 0x55c38593, 0x34e7e712, 0xdd8dec2b,
197306       0xb184cee8, 0x69c9cfb0, 0x49a27864, 0x8dcc0c42, 0x2010f2e7,
197307       0x290d95f2, 0x6977a420, 0x86e254c9, 0xeb2abdad, 0x20931c89,
197308       0x121c0548, 0x81377164 },
197309     { 0x9c5a8edf, 0x6266b25e, 0x1078a7ad, 0x6e1388c2, 0x4876eedf,
197310       0x5f02737d, 0x62744617, 0x242fa7f9, 0xb385382a, 0x3e2cfbd9,
197311       0x02f71bef, 0xbadad7b1, 0x677d0a92, 0x562abcfa, 0x51fdff34,
197312       0x573ebd17, 0x7c250c78, 0xd7f65852, 0xc47ca896, 0xe0cf16ee,
197313       0x67622c9e, 0x8ccd79b0, 0xf8f2c075, 0x31fc5882, 0xa6008515,
197314       0x9232b37e, 0x82e8c5ba, 0x4d7bb361, 0xd2f146fe, 0xbf24735c,
197315       0x9cd2db98, 0x79c280ee },
197316     { 0xf2b48122, 0xbdcc8203, 0xb04ac48e, 0xa8c04916, 0x9fc4885e,
197317       0xacf064dc, 0x82c1001c, 0xab838997, 0x676de250, 0x7339e721,
197318       0x8e1ab820, 0x17aa5aea, 0x6bc14b2e, 0x24d28ca0, 0x816b6230,
197319       0x570c5bb7, 0xcee6b606, 0x6c51235c, 0x183eae42, 0x1b2bf89f,
197320       0x9c66274b, 0x3e3af3c6, 0xb51e38bc, 0xe0b04426, 0x73e40e3b,
197321       0x26dbc58e, 0xb5be5be4, 0x3f9dd578, 0x52c8f408, 0x9fd9f791,
197322       0xa9e3ff4f, 0x758073a4 },
197323     { 0x8691ca22, 0x7d27b057, 0x13a2a1b6, 0xf206bfd6, 0xac795413,
197324       0xe84bd385, 0x75536607, 0xc5d18a2a, 0xc8a0e24c, 0x2e166de7,
197325       0x3c474dbd, 0x56d5750c, 0x1366843a, 0xdef444c1, 0xcf4b8432,
197326       0x14646e53, 0xa9fd9783, 0x4bc0d030, 0x297ee203, 0xbda4c824,
197327       0xfd7be6c7, 0x3d0b10bf, 0x08c7f3ff, 0x2d216476, 0xb4fd4c45,
197328       0x06e52599, 0x49e9e104, 0xfbab9fa1, 0x8661d32d, 0x9342a7fa,
197329       0xfaf66aa8, 0x3f3e3458 },
197330     { 0x951597aa, 0x51ec35af, 0x49df64eb, 0xb677d4ac, 0x9bf4eff5,
197331       0x0276cd9c, 0x515a2935, 0x423eca49, 0xfd9bb9c3, 0x8a696553,
197332       0xede1f09c, 0xf99ee9df, 0x199e5f98, 0xb8fa2956, 0x35292c32,
197333       0xb7638758, 0xfc40e81b, 0x8734eddc, 0x65457d95, 0xd82d5e9f,
197334       0x30c78d2b, 0xc8ee323e, 0xc1433d67, 0xe77b2e4c, 0x3c8314ae,
197335       0x56d9f807, 0x2a0e2f63, 0x441eede2, 0x6c48295e, 0x1e9e17ed,
197336       0x34c294ef, 0x640d20c4 },
197337     { 0x3284d513, 0x4e9a0b8e, 0xf315053a, 0x074c3545, 0x45acd52a,
197338       0xb36e7407, 0x1de50db7, 0xd80bdcfc, 0x2549fc46, 0x8d9d47dc,
197339       0x303f07a8, 0x29b6ef13, 0x6d4ad4c2, 0x4e461aca, 0xfc9f1b73,
197340       0xca8e351d, 0x57460e65, 0x8bc4094d, 0x0f32d367, 0xb6302b33,
197341       0x285742e8, 0x69a074b6, 0x876c29c3, 0xdfe52b11, 0x912bd17a,
197342       0xf39e4609, 0x349aa639, 0x8ee40d66, 0xc72e05c1, 0xb968902a,
197343       0xc0d92816, 0x0f9c1ca8 },
197344     { 0x67433df3, 0x1ebbaab3, 0x15d3628c, 0xb6aa5347, 0x97f0c5cc,
197345       0x13a320d8, 0x65e408f9, 0x72c918cb, 0xd5373451, 0x4b638854,
197346       0x0b4dca09, 0x731399a3, 0x0a3b1326, 0xcf256730, 0x6608b388,
197347       0x5ea60dfa, 0x7b290dfd, 0x58ad74b0, 0xd7694f9b, 0x83202789,
197348       0xb6630fb1, 0x48593db8, 0xc65e3eaf, 0x3db47f70, 0x3e7263f8,
197349       0x63949c91, 0xe6e6ff33, 0x9b9acec6, 0x098a8240, 0x34bd9ba7,
197350       0x45d36ec5, 0x7e31c12f },
197351     { 0x0dfd2dd7, 0xbe281d68, 0x24ab61d8, 0x1efacb00, 0x94431f97,
197352       0xb9c3005f, 0x959cb3bc, 0x660c8dfa, 0xcffbb406, 0xfdd5fc30,
197353       0x7969a10d, 0x7a4631be, 0xde13fd1b, 0x336e309e, 0xfc947076,
197354       0x76b3bfad, 0xdcc72223, 0xfa91925d, 0x156c4ee1, 0x741f0d73,
197355       0x0e2b3747, 0x4f64ee41, 0xefc4d93c, 0x86be92d3, 0xfc4fbb2e,
197356       0xc53b7e03, 0x337ca1bb, 0xac196cf5, 0x7e23ba60, 0x4de41a30,
197357       0x326d5357, 0x1a219c45 },
197358     { 0xaa4db0bc, 0xfdcf7ef8, 0x7b6c9963, 0x2e231806, 0x3d8a192f,
197359       0xc2639067, 0xffdc7771, 0xc0cec2e2, 0xa2fc0edb, 0x997c8e35,
197360       0x82cc6043, 0x78e10ec1, 0x2b0c8120, 0xfd0de2cb, 0x69e57f8e,
197361       0x4d6c457f, 0x5b53f1c3, 0x953e69b2, 0xc4f89cb8, 0x422a330a,
197362       0x95566be6, 0x92ff2329, 0x437442d1, 0x73cd502d, 0xbea69403,
197363       0xf04ce590, 0xf8030662, 0x6ac1537e, 0xb6d0bf93, 0xe02bcf77,
197364       0xbc90192f, 0x17aaa999 },
197365     { 0x8e55db2e, 0x0d3d5643, 0x3b946851, 0x835dee43, 0x5b88462f,
197366       0x1a1440e5, 0xea17e27c, 0xa6ff3b35, 0xdd95f7a9, 0x23f99c36,
197367       0xbdd672cf, 0x7217fdd9, 0xdd2045c0, 0xf400ac1e, 0x4ff06b25,
197368       0x94b55c87, 0x0e4a49be, 0x0a44a0e5, 0xb43b6813, 0xe8925e91,
197369       0x214f96c5, 0x78bedde1, 0x0f97fa97, 0x0f456a4c, 0xa5bfd267,
197370       0xa28fd86b, 0xbe7608ef, 0x3b4b2d8f, 0x226474bc, 0xfbd5ff8c,
197371       0xa5f3b24a, 0x6b282af0 },
197372     { 0x6341a595, 0x78fc025f, 0xa445e28c, 0x591c38d6, 0xeb446842,
197373       0x72bd6e3d, 0x75547833, 0x3f9466d3, 0x083e16c4, 0x911414d3,
197374       0x95a7acb4, 0x145d9466, 0x8fd2fb64, 0x102ddf09, 0x0bfd87b1,
197375       0x2a2b2d2d, 0x59455088, 0x69e9be5c, 0xa80245de, 0xee378bf4,
197376       0xb2306b0e, 0x80b0bd68, 0xc2be9f3d, 0x76a545c6, 0x4802c245,
197377       0x429d167b, 0x2b412dfb, 0x13e64427, 0xee8d9762, 0xb664f529,
197378       0x54706ebf, 0x6d4f5d23 },
197379     { 0x00ba9f88, 0x35c8f2b6, 0x7bb6d0bf, 0xfdc807e0, 0xb3b81e5b,
197380       0x0a126d42, 0xa7ac781e, 0x335ce6ce, 0xf37dcba6, 0x3e308e6f,
197381       0x63c96487, 0x028dca62, 0x8818434d, 0x72eba57e, 0x79b78a26,
197382       0xa9e3d59f, 0x2f07aea3, 0xd2f0a7dd, 0x24d05f74, 0xe0fe4678,
197383       0x0116deb6, 0xb2085170, 0x58f37580, 0x9c2a5e92, 0x74070bb3,
197384       0xe78bd7a5, 0xb9977d90, 0x551fc872, 0x40db81b4, 0x6eda93c4,
197385       0xd65d34ad, 0x4aaf0b4f },
197386     { 0x3514c7af, 0x9bef2506, 0xbc181ead, 0xb09e7dad, 0x8fa3ec58,
197387       0xef3cae87, 0x173b8685, 0xd8dbfab5, 0x921d32dd, 0xb2490fc0,
197388       0x8bd9c466, 0x4eef386b, 0xa061dbdb, 0xc1cdd52f, 0x25bc04db,
197389       0x64de989a, 0x85728636, 0x06f9836b, 0x8be44aa0, 0x11a5a804,
197390       0x097018c7, 0x16dede4e, 0xb2c11fb1, 0x72aec577, 0xa721ecd9,
197391       0x144dade1, 0xd6ebf3a9, 0xf99c526b, 0x1c2e14d7, 0xa1d4165b,
197392       0x82bc6337, 0x8b2cbd39 },
197393     { 0x8a52e991, 0x28ec1bf2, 0xcf9d42ec, 0x0ba202f6, 0xc634ea45,
197394       0x8307d130, 0xc5762b9c, 0x3fc257b3, 0x487c2a2d, 0xbd3298d1,
197395       0xa319488a, 0xca14f1a7, 0x06ba06d2, 0xc70ca93b, 0xee405e89,
197396       0x9aa3f4b3, 0x35deeae7, 0xcc64eeb3, 0x03bf1d4c, 0xd155f578,
197397       0x45616bfd, 0x041ec0b5, 0x086e33f6, 0x23df80e6, 0xf0243cf5,
197398       0x399a79c8, 0x874ccd58, 0x86c2824e, 0x8fc5c831, 0x220eeaec,
197399       0x7dbe3670, 0x57e28304 },
197400     { 0xfbcdf666, 0x6e60b698, 0x8bebb1d2, 0xbdd06a99, 0x80498436,
197401       0x4044adba, 0x522bc88d, 0xd76bf75e, 0x28423b20, 0x655c4b9b,
197402       0x53398a72, 0x65c0f492, 0x0ca37601, 0x76d4f2b7, 0x2030fa5a,
197403       0x46989925, 0xb6054705, 0x96b37e87, 0x53de1b2f, 0xef96f731,
197404       0xad54ef05, 0x5ecbbc8c, 0xa93617b0, 0xeb289d0a, 0x7cba217d,
197405       0x3ac0fbd5, 0x19d4a2d7, 0xd0d3cb56, 0xc91d6063, 0xe8bee9d4,
197406       0x696ffda6, 0x4f12e037 },
197407     { 0x15f1a610, 0x4ccfa422, 0x3786519a, 0x804a5c55, 0x73838134,
197408       0x1246a454, 0x4b284e2a, 0xfa15b484, 0x146d1320, 0x36464c65,
197409       0x70a8a0fa, 0xfb6ba88c, 0x93c4804e, 0x74e7cee7, 0xb95ae16a,
197410       0x8c34d22c, 0xf9c1d4dd, 0x9d9ed89f, 0x32025371, 0x61a0866d,
197411       0x9bd6444a, 0x45b232b2, 0xf277bab1, 0xf888e92c, 0xa9448b02,
197412       0x73e69c6e, 0x5b521ecb, 0x1a496ea9, 0x5858afb2, 0xa8f78ea7,
197413       0xb1266f91, 0x83d2333e },
197414     { 0x67b478d7, 0x1c633288, 0x50a2fc9c, 0xa1ee1ae1, 0x18d2241b,
197415       0x05b6ab30, 0x893cd696, 0x69f1f288, 0xa8117a87, 0x159d6660,
197416       0x70e73d77, 0xe8120119, 0x93f55f0a, 0x528fef00, 0xd854dfb2,
197417       0xb3978db8, 0xf45d9fbb, 0xd6b43ef6, 0xd5bee397, 0x17de4bfe,
197418       0x6bf76dad, 0xa01e0f59, 0x3d40754c, 0x28b2280e, 0xf8e86ef3,
197419       0x8edb6122, 0xb7d1e586, 0x8226b6af, 0x2f40a55b, 0x46353215,
197420       0xc5a31621, 0x7362f13e },
197421     { 0x73c0c430, 0x792eb27c, 0xa51c3657, 0x8cc0a65f, 0xd2194f1b,
197422       0x50a5cece, 0x814b4947, 0x18945688, 0x4b6fbbf4, 0xbbf0a81a,
197423       0xf0aa8608, 0x376f4f58, 0x3987795e, 0xd9361d68, 0xe3a8d0d5,
197424       0xb6510cd8, 0xb6c1a455, 0x63e2fdbf, 0xaec891f9, 0x2c91154e,
197425       0xff568f64, 0x0eb1e715, 0x2f2b399e, 0xe7af9cd7, 0x89f0bf0b,
197426       0x1fc39bac, 0x90983695, 0xf0861d92, 0xda0a20a8, 0xd9b16f02,
197427       0xa38c0ead, 0x2f10693f },
197428     { 0x0c06ded2, 0x07a6ce91, 0x2fd9087b, 0xf974842f, 0xa9f635a6,
197429       0xe468bfd6, 0x1ed60626, 0x04b61891, 0x369ee548, 0x1fb2f89f,
197430       0xdc96a201, 0x9cbd1113, 0x10d633ac, 0x6759acfe, 0x8faa629e,
197431       0x64ba66fc, 0x47f38283, 0xa686ae49, 0xd59cda99, 0x828c3a05,
197432       0x08ea2f6e, 0x7c7afb14, 0xaf3953c8, 0x2551c8e4, 0x9daa9e4f,
197433       0x5b53d279, 0xad6f1940, 0x1eff68d4, 0x96437cdb, 0x2775dbdd,
197434       0x4fe7a043, 0x985f83e4 },
197435     { 0xeaf45294, 0x89603c16, 0xc24b5751, 0x70131160, 0x39d6b52d,
197436       0x4c112018, 0xed943340, 0x7079cf02, 0x74f41b68, 0x0c5b028b,
197437       0x9c8ac1e1, 0x3dc3f076, 0xf8b24f0e, 0x5ac5eea3, 0xe34c5c22,
197438       0xee6684ba, 0x9abc452a, 0xa5259e63, 0xe9df45cc, 0xb07d2cd1,
197439       0x1a443cfa, 0x07019c93, 0x92c003b3, 0x68fddaa9, 0x0d8cbc2e,
197440       0x2d9f179c, 0x1e781ca7, 0xbbf15a6f, 0x50dcc799, 0x54d779d5,
197441       0x0fe962f1, 0x0c88e540 },
197442     { 0xe8f44357, 0x84f71a6a, 0x3a3cab6a, 0xf75b4bf6, 0x5aebc680,
197443       0x334c9d9e, 0x8a753ef2, 0xcecaf084, 0x075e3c8e, 0xe28014c1,
197444       0xf74f8d3a, 0xbb9d5a38, 0xb80e32ae, 0x75988464, 0xf2bc3792,
197445       0x7b328e6f, 0xeed0e197, 0xebbb1faf, 0x5a33065a, 0x674eac95,
197446       0x922dbce8, 0x8c19fd8f, 0x987b907a, 0x8c17ae85, 0x3b3a2cd7,
197447       0x89f33627, 0xfa87772f, 0xebaea019, 0x3a25ced6, 0x4e5de499,
197448       0xaf110715, 0x8e2560b8 },
197449     { 0x3141aba6, 0x56d3746c, 0xbab2cf9e, 0x45a1079f, 0x9cdd27c7,
197450       0xb6382831, 0x9dfd950e, 0x22237632, 0x3a9408ff, 0x1e0b15cd,
197451       0xb1160118, 0x49a80200, 0xa383bba7, 0x2719db5d, 0x651046d5,
197452       0x6078340a, 0x97523b1f, 0x8929d4de, 0x8e0a28ab, 0x4040345c,
197453       0x0adf09c7, 0x61275ac2, 0x2331d611, 0xb41ab265, 0x5391ca50,
197454       0x230cc77c, 0x8f922315, 0x88be0c92, 0x92fd9a29, 0xfef3d92b,
197455       0x8324f2e5, 0x59005f22 },
197456     { 0x3c4c1c74, 0x6bb1750c, 0xe966fb79, 0xbe73aac0, 0x66c5973f,
197457       0x85a75d92, 0x3a8656b6, 0x8c97f932, 0x50446cde, 0x2b7043b1,
197458       0x3ff3897f, 0x548916f7, 0xb18b72b2, 0x913dd01c, 0x488c0de6,
197459       0xd0a751f1, 0x8558ca58, 0x19175714, 0x44a663da, 0x97714301,
197460       0xb0e08618, 0x2df190ac, 0xf39ead9c, 0x0080fc0c, 0x17382da1,
197461       0x0085ac6e, 0x3262a338, 0xe9791851, 0xb43bae8d, 0xe4495936,
197462       0xd783df6e, 0x57a78e26 },
197463     { 0x40dbddd8, 0x161b346f, 0x9410c3ac, 0x2b49a927, 0x1886cf3b,
197464       0x8c542783, 0x33b93deb, 0x72df3232, 0x40df579d, 0x9c8d59f5,
197465       0xc20ef500, 0xe5d7a67d, 0x67f08643, 0xc46b3918, 0xad96adc3,
197466       0xecfa2445, 0x0c4544d0, 0x658f589b, 0xe08417d7, 0xe6ec9301,
197467       0xc454e288, 0x6ca5ef6a, 0xac0f462d, 0x4191048f, 0x08d8a036,
197468       0x852407d8, 0xf6d35b7e, 0xb4c533a7, 0x8f6ada87, 0x3251e412,
197469       0x81c472e8, 0x1ca370c5 },
197470     { 0xa801b68a, 0x94bd5171, 0xfd1998b3, 0x7312879c, 0x41163202,
197471       0x4905aabf, 0xf5b01fdb, 0xb5fe87f4, 0x9cda128b, 0x78de523a,
197472       0xc7bd31f7, 0x0bf161a1, 0x23904c35, 0xb5decfd0, 0xe188f12d,
197473       0x224b2882, 0xf99dae74, 0x0dd2801d, 0x08cd1cd2, 0xcad467b5,
197474       0xc0867e39, 0x6c311c3d, 0x2b425072, 0x71a11720, 0x2efd9003,
197475       0x83bf464e, 0x1dbd3b03, 0x53d0448a, 0xe6265baa, 0x32db52f4,
197476       0x4c33ac79, 0x2584b34c },
197477     { 0x2aeec688, 0x3cb86389, 0x45fbe523, 0xa5e740ba, 0xfd60b5f8,
197478       0x422e71f7, 0x4874913d, 0x455d185c, 0xfa17d80d, 0x04c2bb36,
197479       0xac054524, 0x3f271854, 0xa8b9a657, 0x76dd3045, 0x62ee7cc8,
197480       0x2e42c3e1, 0x4df6c7d0, 0x00266706, 0xdc7cb488, 0x5927dd51,
197481       0x187897e0, 0x6b3faabe, 0xf2d5737c, 0xfe6ad22e, 0xff51a9ff,
197482       0xafb60269, 0x69807baa, 0xe1c83545, 0x951ca49a, 0xacddb6ff,
197483       0x3f9ab085, 0x7e811374 },
197484     { 0x830a88b1, 0xad722a8b, 0xce1117e1, 0x91918ea8, 0x0409b47d,
197485       0x3e02d0b8, 0x6c46d1d3, 0xb53812d3, 0xe589669c, 0x2fd09db0,
197486       0x15b0cd5e, 0x9845cd06, 0x2386c453, 0x0c1c155a, 0xf5ff43cb,
197487       0xda774de5, 0xe391c0cd, 0xbb076b98, 0x5004f286, 0x97d71eff,
197488       0xaeec0bfe, 0x23e0b46c, 0x32a1ad94, 0xe4538667, 0x396da422,
197489       0xfe0c9f81, 0x63db2bfe, 0x6376c1a2, 0xba56fa91, 0x001c7918,
197490       0xdf8485a6, 0x436b8c64 },
197491     { 0x8ab764bc, 0x88117e9d, 0xa077df84, 0xdfa61e94, 0x0c18eebd,
197492       0x5a7765d3, 0xfc9451dc, 0x548916af, 0x071a347a, 0x01a52e33,
197493       0xb23b41df, 0x633b95de, 0x43c8c286, 0xdd7d68c9, 0x18d97068,
197494       0xe4f9d41e, 0x8c92799d, 0x79908b90, 0xd47394a3, 0xe614148e,
197495       0xcd51e53f, 0xe5018517, 0x0243dcb6, 0x5060075e, 0x17954405,
197496       0xe5dcde62, 0x537da5ff, 0x6f7c90e1, 0x0768cb66, 0x1df7aae4,
197497       0x6dbe95e1, 0x5266ca9e },
197498     { 0x1386b3db, 0x84ddee6d, 0x7c38e540, 0xf9e4af5a, 0xeb04f49d,
197499       0xb3418440, 0xfde5a4fd, 0x2138a1e8, 0x30257cfc, 0x3e6e6924,
197500       0x19fd70c1, 0x3519c6e3, 0x86c31ff0, 0x8f34e174, 0x940ce1e8,
197501       0xf1e298fd, 0x14960d7c, 0x6fb8cb1d, 0x2b2f3bff, 0x207c1347,
197502       0x146ef8ff, 0x899a20b4, 0x7bd3e220, 0x7dec362b, 0x626bea27,
197503       0xa975044e, 0x4fb4cb67, 0x0f32b449, 0x1fc6703a, 0xc17a0920,
197504       0x9cd84a2b, 0x41f325b9 },
197505     { 0xce2843a4, 0x312ed513, 0x00728afc, 0xe748498e, 0x4d864ce5,
197506       0xa8ef2822, 0xa620083b, 0x34064704, 0x4bed338d, 0x5905e1d9,
197507       0x063e7b38, 0x2a578cb5, 0x289e7bb9, 0x98276d96, 0xf17b7341,
197508       0xdfe2dc47, 0x1dac8944, 0x5923521f, 0x23400aa7, 0x3db6d28d,
197509       0xa761ba43, 0xc647705e, 0x9bfd07dd, 0x8947ba6d, 0x242ca8fd,
197510       0x00f2e3ac, 0xeb8c3468, 0x49ef4670, 0xd9aa18fd, 0x7db3d37b,
197511       0xe58cea9e, 0x56b30fb6 },
197512     { 0xcd80a428, 0x07ecdcaa, 0x8732c891, 0x7af922dc, 0x3ada441f,
197513       0x20d88798, 0x924b008a, 0x3bed9a44, 0xb2e81c3a, 0x2123533c,
197514       0x65f807d3, 0xc34e4075, 0x1f2faecb, 0x0bfaefa5, 0xade8a88d,
197515       0x78b634a5, 0x94392a91, 0xc4e0b7f8, 0x90bb1cd8, 0x30922377,
197516       0xf87204ae, 0xdea9b4fa, 0x85d3cd83, 0x3edf81f5, 0xc6523a79,
197517       0x58f88c51, 0x17c0d969, 0xe472fb8b, 0xdccf7f07, 0x899081e5,
197518       0x58bdd146, 0x1353cc57 },
197519     { 0x39bf6e18, 0x28a56497, 0x649b89c7, 0x59e8b5a2, 0xdce8b8e7,
197520       0x8d9434a0, 0x2047040c, 0xd935bf51, 0x6a7b8e82, 0x2ab3a164,
197521       0x27f81294, 0xf1583ed6, 0x72d67297, 0x8416a7e0, 0xcd39e42b,
197522       0x49685d86, 0x958ddbad, 0x8a797fc7, 0x155ce6de, 0xa558f928,
197523       0xf8a36235, 0x75f4e570, 0x52877ae5, 0xbc69cfc0, 0xa6b16ebd,
197524       0x8f4193a9, 0xbb1cc1f1, 0x8d1df43c, 0x5a21e789, 0x723a830e,
197525       0xf451df58, 0x3ec2185d },
197526     { 0x1f0bc2d7, 0xb9d4c7d7, 0x6e51d412, 0x6982c6cc, 0xa09f80f6,
197527       0x92e02d93, 0x047ae09c, 0xb7dd2d25, 0x37f351f9, 0x3503149f,
197528       0xc77850be, 0x69d49ce1, 0x12f0d2c8, 0x60242acb, 0x7bc28b9d,
197529       0xba188c56, 0x06bc0550, 0x8e406121, 0x8d7d4329, 0xb0d84b1f,
197530       0xd38951e0, 0xb4a67ae7, 0x8bc97607, 0xb527c57b, 0x5497aa72,
197531       0xbc93c5f3, 0x39bdd666, 0x5f1de8cc, 0xe9d447a3, 0x3087dc5c,
197532       0xa211abe5, 0x89b356b6 },
197533     { 0xdfdcc837, 0xed6db0af, 0xa871b7a9, 0x0fb80baa, 0x1c1d4b72,
197534       0x413abfc9, 0xadac9e5c, 0xf5b56bf7, 0x8b8657a3, 0x5664a2da,
197535       0x0e41d94e, 0x11b04f72, 0x37433658, 0x63e11d26, 0xf426daea,
197536       0xee628ece, 0xcb162dc2, 0x011619c9, 0x87648643, 0x9cf5817f,
197537       0x5584bc86, 0xe1bb9702, 0x00bf7928, 0x2cc27cef, 0xdc60eee5,
197538       0x4ef3a80e, 0x87adc2f9, 0x7e1202be, 0x8a0d4f52, 0x656f18e0,
197539       0x57c5d126, 0x39c4f10d },
197540     { 0xe88aecd3, 0xb3a9b68c, 0xa518aa9d, 0x555b0918, 0x4bd4ee54,
197541       0xedc1cdad, 0x02068d84, 0x79b68b67, 0x811ac72d, 0x7dac80d0,
197542       0xa81a0a78, 0x6d1e6d35, 0x3bd16283, 0xc841e9ea, 0x894c4444,
197543       0xa7bc1775, 0xf1aa1202, 0xf2b63725, 0xc7d4c556, 0xbec7767e,
197544       0xd46ff51b, 0x2817ebb3, 0x73f7e339, 0xfde5be8d, 0x5aed24c4,
197545       0x44c6c977, 0xb6e579cf, 0x0b9a1707, 0x9069fbcc, 0xcff16478,
197546       0x49152b00, 0x414b542d },
197547     { 0x606e173b, 0x33c31e58, 0x90e6713a, 0x5b7f4e1b, 0xdebb20af,
197548       0x425fb512, 0x05120e70, 0xc788c617, 0x9013e4ec, 0x3ef05602,
197549       0x81c6e6d7, 0x9f9d35ac, 0x9450690a, 0xe131e88f, 0x44af082e,
197550       0x708f9b32, 0x1ba2aea9, 0xb2e4d66c, 0x740db29c, 0xaf1f4a6e,
197551       0xd1843007, 0x74ab9248, 0xed556a6c, 0x13338ef8, 0x270d17a6,
197552       0xf48e623e, 0x9608f5bf, 0x3c7362fa, 0x444e8515, 0x43977874,
197553       0xe00b8b2a, 0x52678d6a },
197554     { 0xdf36aeb4, 0x5dff1c59, 0xa92bc0ab, 0x52d6653c, 0x927a5f81,
197555       0x0e03f496, 0x2dfd491f, 0x8509d414, 0xa571f89b, 0x258c2c52,
197556       0x93334485, 0x2bd61804, 0x3f7d9e09, 0x1a33e94f, 0x2c1bf906,
197557       0xfab418d3, 0x5aa5695c, 0xf39c490e, 0xf6d2d7ff, 0x0e41196e,
197558       0x0f7948a9, 0x3ecd4075, 0xd3053b4f, 0x4b58f9b2, 0x5d9974c9,
197559       0xb8ee842a, 0xbf22f682, 0x23a59c1d, 0xc8efcea6, 0x045ac614,
197560       0xc10ceedd, 0x7040ba5b },
197561     { 0x515a1a96, 0x2c364f81, 0x184327e0, 0x31a63503, 0x1ad93d4f,
197562       0x0a096650, 0x273b6173, 0x9d7694f1, 0xd2cda9d2, 0x8886d876,
197563       0x2814c177, 0x1e01a742, 0x8667696b, 0x3492276b, 0x5b25f006,
197564       0x2fd4f0c6, 0xfb294c4a, 0x6527349f, 0xde1d336f, 0xc1fe0d8a,
197565       0xe7e3860e, 0xaf9a23e8, 0xb774c31e, 0x97d2b721, 0x4365784a,
197566       0xfac3e582, 0x70f4eaa3, 0xff2dff4e, 0xfe873248, 0x3d281e1a,
197567       0x0bd1c9c1, 0x9043a6d6 },
197568     { 0x766c7937, 0x1511a0fe, 0xabbc3be3, 0x1b2ded5c, 0xe00888ac,
197569       0x2ac160cc, 0x616200f3, 0x928754bd, 0x34a2ea06, 0xb801c83d,
197570       0x9cbe106f, 0x8ad7a03a, 0xcedfcd94, 0x996b0822, 0xe4069880,
197571       0xc3c3463a, 0xf597f663, 0xfb12ea4d, 0x40c92af9, 0x2c8d3834,
197572       0x4e8da154, 0x79bc85c6, 0xdb4e801a, 0x95771fa2, 0x1e3579b2,
197573       0x7bd2c138, 0xffaad078, 0xe45c75df, 0xb73eac46, 0xb0760a3c,
197574       0x3a125f35, 0x26362b48 },
197575     { 0xeefc3e89, 0x25c68d28, 0x69e9ee71, 0x2d0ee877, 0xaf5e4b75,
197576       0x8b07bb86, 0xcb86b333, 0xdb709072, 0xff552bac, 0xfd3d20ea,
197577       0x4c0da1e9, 0xa5eeb2b1, 0x44f97145, 0x391f688a, 0x1e06d485,
197578       0x21fbd310, 0xbea9cd49, 0x45e4f2a5, 0xa7bf21da, 0x7b60d464,
197579       0x054d5471, 0x193f88c8, 0xbee0f2e9, 0x5ace53d1, 0xc1439273,
197580       0x92c26563, 0x96c6b5ee, 0x9c86e0b2, 0x09ff59ba, 0x452fe231,
197581       0x555c935e, 0x2e952b20 },
197582     { 0xd75f886e, 0x2a846bca, 0xd43dfc58, 0xe68a5dbe, 0x007b1b86,
197583       0x103e45b6, 0x355ff2b5, 0x580e2ec9, 0xa263ecc9, 0xbc702f26,
197584       0x181e5e33, 0x2835b386, 0x6c122076, 0x025113ec, 0x7fbd856d,
197585       0xa5c26e3a, 0x9d6ebcb1, 0x8ef83fb3, 0xa44d2fa8, 0x7aaa53f2,
197586       0x53b1fa97, 0x7c14ef33, 0x17559a30, 0xff604a11, 0xb09377e0,
197587       0x2bcd96b0, 0xdb2f0273, 0xa5c14896, 0xeb53ef06, 0x1c0a84c9,
197588       0x30378e4b, 0x1236d017 },
197589     { 0xc084373b, 0xd7481c8f, 0x646097ae, 0x29ae4768, 0x613bc34b,
197590       0x1300dfa0, 0x934bc2b0, 0x3712714c, 0x0e2be7e2, 0x86524629,
197591       0xed010800, 0x554fbb9f, 0x42314576, 0xf0ec0b38, 0x330a3282,
197592       0x65baf594, 0x706ef817, 0x3bdde1a8, 0xba7530e9, 0x7d2c727d,
197593       0x74cc95cb, 0xbb0c5d66, 0x2438906d, 0xb3fcd365, 0xd14658f3,
197594       0x19881941, 0x6c97f0e9, 0xe616f555, 0x4b9ec7ea, 0x353c2d85,
197595       0x620cb56e, 0x02a48014 },
197596     { 0x506ccd38, 0x11d6d23d, 0x9059baa6, 0x229a1c54, 0x69d011c5,
197597       0x717c9c27, 0xd828937d, 0xe87e1b46, 0x83835083, 0xf5d63bbb,
197598       0xaadac258, 0xf0a7b427, 0x9f154d1f, 0x99ab26bd, 0x8ec955fd,
197599       0xdec0ffbf, 0x49fcb880, 0xee957c67, 0x1e0114de, 0x32395dee,
197600       0x369f46c7, 0x192a64b7, 0x91eb2599, 0x43044660, 0xa2e8c3da,
197601       0xbe2da887, 0xc3556d18, 0xa44e2c25, 0xb55f75f3, 0x31390414,
197602       0x8f217fe0, 0x1d8bde6f },
197603     { 0xa2028924, 0x03cd39f8, 0xb06ecb9f, 0x6e54f19c, 0xd6f05846,
197604       0x862bbcb7, 0x5a060776, 0xdbe06716, 0xb10fec10, 0x9397c97a,
197605       0x6f1bb65c, 0xf4213826, 0xa672ba38, 0x414deccb, 0xf88b05e6,
197606       0x594d4d43, 0xac94d4d1, 0x7993f57a, 0xbfb17638, 0x74fc2a6a,
197607       0xb6fc655a, 0xd8196b5b, 0xee8d2139, 0xdc375c84, 0x360d3a26,
197608       0xb9b00a02, 0xdeb93b87, 0xb36ed35c, 0xcc83209e, 0xf565b28b,
197609       0xc61013c1, 0x349c6943 },
197610     { 0x4de6c88a, 0xd1b39444, 0x4700207e, 0xd5c2c471, 0x21c2b780,
197611       0xb6f458a2, 0x0850993e, 0x749f7564, 0xbaef0c18, 0x400ba579,
197612       0x737c70f0, 0x2d742938, 0x21467ebf, 0xc5a8e2ec, 0x5337f453,
197613       0x243a666e, 0xed0bd50a, 0xc991f1c7, 0xf4bd1f91, 0x3a7f3e90,
197614       0x5f0e129b, 0x96089e8a, 0x07389635, 0xd0d3a177, 0x27182ac9,
197615       0x9cf842d5, 0x0817c5c2, 0x21195299, 0x87255769, 0xa32f327e,
197616       0x89c2d8fa, 0x056587ab },
197617     { 0x1ce4733d, 0x008562ed, 0x98e51444, 0x5faff7cb, 0xa9ab46b9,
197618       0x5f03021f, 0xb61a8c13, 0x89494c5e, 0x36b35976, 0x57c95036,
197619       0x2ac2d2f6, 0x6be84c8f, 0x9bd2703e, 0x0e5b34d8, 0x7e872abb,
197620       0xc4ad918f, 0xc4052ee1, 0xc2a89e9f, 0x3190b51e, 0xc2caee3f,
197621       0x6fff254f, 0x58fd1437, 0x883e0972, 0x6f3c0d68, 0x0fb15438,
197622       0x63d0a0e9, 0xf6caae00, 0xc438764b, 0x3f1d0f6c, 0x815f1565,
197623       0xb86cdbde, 0x1b87f2ed },
197624     { 0x2b0b15b1, 0x35792bbb, 0xce6ba779, 0xa3e4b5a7, 0xdd8f3779,
197625       0xfbacffd9, 0xc298d1ef, 0x005450bd, 0xc47031c6, 0x0e3f5556,
197626       0x95d68066, 0x0770f07a, 0x2d1052c2, 0xce3e84e0, 0x7aa8cc54,
197627       0xb050791e, 0xba3223a3, 0x4d621e73, 0x39632990, 0x87b9b94d,
197628       0x7eb8056d, 0x8df9cb47, 0xedfca0cc, 0xe2430de8, 0x9712a0ca,
197629       0x374bf416, 0x88848a99, 0xbe3f3c77, 0xc4a3e59e, 0xb22b87b1,
197630       0x3e95bc23, 0x8e0227c4 },
197631     { 0x3210964d, 0x000e22a8, 0xff056eeb, 0xdccd5df5, 0xdaf1ead7,
197632       0x02173a1f, 0x67cdcae3, 0xd02833e0, 0x8bdcc90c, 0x1cc574cb,
197633       0x3224b4f5, 0x86eca714, 0xbb3f8298, 0xd00e603a, 0x0c1a8deb,
197634       0xb98ece1b, 0x378c261d, 0x228a46e4, 0xa6165e5d, 0xc6f9dd0d,
197635       0x4b7ef0e2, 0xb3ae3899, 0xbda9f306, 0x3a3c16b3, 0x38a084db,
197636       0x5e9a26d3, 0x5394e950, 0x528e5993, 0x4ea206bc, 0x848ecb11,
197637       0x40545d6e, 0x14b15ab5 },
197638     { 0x664c59a2, 0x0f6d86c9, 0x60fd7aa5, 0x3dfe2be1, 0x9072cb8e,
197639       0x33f9b569, 0x8176a7e0, 0x5f2325d9, 0x4587080b, 0x79a0d4e7,
197640       0x0d5d4e05, 0xa4ee0def, 0xc87b28e1, 0xc0ad9ffa, 0x3f09b4ee,
197641       0xd6f18d2f, 0x292e9d87, 0xcc896ae7, 0x6094763c, 0xca88953d,
197642       0x18fbf9fa, 0xdbee97a8, 0x4b63d701, 0xdf20e0e9, 0x47ea722f,
197643       0xcbba6e30, 0x612b571f, 0xce57e1ca, 0x009a55f5, 0x1e16ac76,
197644       0xc4389e2e, 0x742bbed8 },
197645     { 0xc1dc2c73, 0x23ea86dc, 0xc1643abf, 0x4bbbfd5b, 0x24d8ca1f,
197646       0x07f8fa1f, 0x8cb5cac7, 0xde68a6e0, 0x54e66a7d, 0x7d54c64b,
197647       0xa9b7ad78, 0x789dba22, 0xe364ab94, 0x4d88d540, 0x1f72e011,
197648       0xc8c2e02d, 0x46e2a278, 0x4c826057, 0x4b187c7d, 0xe6c35bb3,
197649       0xeb8fe0c9, 0xed8b3dfe, 0x7d11e415, 0xb6bc34e8, 0xb865c7f9,
197650       0xb3908bbf, 0xe1ecc17c, 0x717d1ce6, 0xf7cdd69b, 0x151e3308,
197651       0xb5c94124, 0x97bd5a14 },
197652     { 0x81e82861, 0xe01c62fe, 0xdd42c40e, 0x703d4b6d, 0xe65e91e5,
197653       0x7e52e55b, 0x5abbbfdd, 0xb8b49374, 0xc72a45f4, 0xb4f15f52,
197654       0x550f29d8, 0xce8435a8, 0x582de75f, 0x9df76b9b, 0xa20c8b96,
197655       0x52e84c5f, 0x0a8a0af4, 0xaf77d2d1, 0xca6013c3, 0x0389bbd8,
197656       0x26f8305f, 0xb0d9b9ba, 0x0cec8b9a, 0xf053e848, 0xffabda18,
197657       0x4d63367a, 0xa6424c2a, 0x50f53be4, 0x864fba2e, 0xf892c58c,
197658       0x48cc5469, 0x317c6d31 },
197659     { 0x2cb7d42b, 0x0c3525b0, 0x310facae, 0x55240bc9, 0xff20408f,
197660       0x8d5d2022, 0xe0c10ea0, 0x6b01402f, 0x718eb23d, 0x7fbef68a,
197661       0x41252a19, 0xa0146b5a, 0x110e0d6e, 0x59afce48, 0x022de181,
197662       0xe9a1d27f, 0xdc3f49da, 0x6db96d16, 0xefbe4008, 0xfc1ae3f5,
197663       0xeccbc11c, 0xf9d70641, 0x525f8636, 0x49022279, 0xc2763c30,
197664       0x3769796a, 0x1d90630b, 0x9cc3483c, 0xee3d3f17, 0x451651f0,
197665       0x9da0b8fd, 0x6ae59739 },
197666     { 0xbff4d2ee, 0x57b13bc7, 0x30b173d8, 0x20754229, 0x0794936c,
197667       0xb6254bd5, 0x5efd55be, 0x1d5f232a, 0x4e0c3389, 0xc06f4a85,
197668       0x8e61f944, 0xcf2c5b59, 0xfd5f87b7, 0xc564861f, 0x5a2afa4c,
197669       0xee261fb1, 0x2d97a774, 0xb0ff7226, 0xd6cf007a, 0x1a89ae22,
197670       0xd346f214, 0x28880534, 0x97b6497e, 0x8fe73bff, 0xfa2afffc,
197671       0x8a8595b2, 0xf151a726, 0x9ef9cf3e, 0xe744b82b, 0xa84ee5f1,
197672       0xbc63fe72, 0x6649048d },
197673     { 0x1e8b760d, 0x91b7bb78, 0x25aadaa0, 0xd47b0bd8, 0xfab5226f,
197674       0x81493d9f, 0xbffc148e, 0x4a6dd226, 0xa29be3db, 0x5a032f8a,
197675       0x34b0ab0b, 0x318dbc70, 0x7d654868, 0xdcccbfb5, 0x9c581e46,
197676       0x8506ab37, 0x2830ece2, 0x09136a6e, 0xcf6c80c7, 0x48b79356,
197677       0xef6b1e86, 0xfa176377, 0x83f0f1c9, 0x2c9c1cc1, 0x16abeddd,
197678       0x96f0526d, 0xa93b0de4, 0x3e0e98e2, 0x0f13873a, 0x6f2d7ada,
197679       0xf3fa49ec, 0x4eb93b5c },
197680     { 0xe11fae32, 0xbd89f7e5, 0xc4023f51, 0xd13d74f5, 0x491c3f6f,
197681       0x1b0014df, 0x555279b7, 0x1d849a57, 0x05ba0068, 0xbb9e8897,
197682       0xc13ca2ca, 0x82222419, 0xfd33676f, 0xafbbb685, 0x75878a2a,
197683       0x931c3f52, 0xef3d5173, 0x12aeefef, 0xbd8a6878, 0x189a5cc8,
197684       0xd99f0c16, 0x82cffdb3, 0xa19d48b6, 0xbf565406, 0xe9c6c4e0,
197685       0x5605e223, 0x86804172, 0x53e781de, 0xc7001cc8, 0xcdf5c90b,
197686       0x7c043f68, 0x2b582d93 },
197687     { 0x81abc2ae, 0xa1165c82, 0xe2b69eca, 0xa73380f5, 0x07fff66f,
197688       0xc097b3d2, 0x54776506, 0x5d603826, 0xb57fa21c, 0xdcbac9f3,
197689       0xc98dbdd5, 0x78750db4, 0xd9eff32a, 0x85e21103, 0x2f11c41c,
197690       0xceed172c, 0x9e348c09, 0xa8e39264, 0x831eddfb, 0x71cb936b,
197691       0xf50864a3, 0x915c3d06, 0xe93acfcd, 0xfe8e33cd, 0xb3f2f7aa,
197692       0x4bee10d7, 0xeb7cee9a, 0xc1d8eb48, 0xfa574afd, 0x4fa49ce3,
197693       0x862db4c0, 0x78615109 },
197694     { 0x7ae72c21, 0x3fe3f480, 0xfd0f0da5, 0x631aa144, 0xf8c3a454,
197695       0xc76ee1e8, 0x51b4f1ab, 0x379ae094, 0xd7cdbb24, 0x2a3a4397,
197696       0x82bd5fcd, 0x7a14cffe, 0xf427ef5a, 0xbbe4ed12, 0x284d3ccf,
197697       0x9b0a43ee, 0x8eec6e1e, 0x57b78b93, 0x67b8e87b, 0x18d404e4,
197698       0x34374c20, 0x0c8adc05, 0x5428deb5, 0x64373605, 0xc3afa2cf,
197699       0xb4d80ec0, 0x3aa956f9, 0x6d51f93c, 0x84161c68, 0x9f9a28ab,
197700       0x6bc9c025, 0x540b6bb7 },
197701     { 0x321d315d, 0x04e1734c, 0xd86e05d0, 0x4ef56612, 0xbba8cd81,
197702       0xeafae145, 0xacdc789a, 0x1fb07a49, 0x5877570f, 0x6a21e9ad,
197703       0xb9bc53de, 0x2e4a837e, 0x1d6298eb, 0x436db293, 0xea362f45,
197704       0x43afbc78, 0xaabf6585, 0x2a973d97, 0x0c924d60, 0xdce7dabe,
197705       0x7cadf0e9, 0xf69d98f0, 0x75020538, 0xe0b505a1, 0x4461cd29,
197706       0x3db7d1a3, 0x5e20e818, 0xe1c28776, 0x52dd50f6, 0x2ca25867,
197707       0x92e0388c, 0x897cab14 },
197708     { 0x0d8bab8a, 0x59ed3813, 0xa438200a, 0xc11d364c, 0x40581415,
197709       0x0687bf2c, 0x7ac89674, 0x86ad0d3a, 0xb97411a0, 0x44928105,
197710       0xf383371c, 0x74984b11, 0x0d1a831e, 0x70d2ed84, 0x6c912fe0,
197711       0xd883628b, 0x14fa88d2, 0x44f8f7fb, 0xcf0ac93e, 0x564f2a4d,
197712       0xa6c24fa6, 0x82f629aa, 0xbf6cd949, 0xab906ba3, 0x20a5182d,
197713       0x2c822e67, 0x30eb93a5, 0x2ff47dac, 0xfff673aa, 0xdc62c4a4,
197714       0x476b0ec5, 0x64b00763 },
197715     { 0xb3c9a404, 0x1e3f533e, 0xb7ef9952, 0xb1db7f73, 0x6c253693,
197716       0xc7f13e29, 0x0738eed4, 0x7ce7f4c4, 0xce26cad0, 0xccfd3b33,
197717       0x01ec5cf1, 0xd8784935, 0xdc084e01, 0x3f8fc09d, 0xc39b5acf,
197718       0x217cab32, 0x9ef5551c, 0x42daf0bb, 0xe1217a95, 0xfbc76f56,
197719       0xc237002a, 0x80178b12, 0xb070a293, 0x0b52c39f, 0x576ca964,
197720       0xe3925153, 0x19d68e36, 0x25559424, 0x09e50e84, 0x291fb82c,
197721       0x6618ed8c, 0x7dd22ea6 },
197722     { 0x49cbb3bf, 0x7ffe844b, 0x5562fb25, 0xde0cc704, 0x9f5a845a,
197723       0x1e6ee537, 0xe51277fc, 0x956d7f26, 0x30635718, 0x2c75d4b9,
197724       0x96957f34, 0x39a14892, 0x82e5742b, 0x8cf4eb32, 0x83247b72,
197725       0x6b0d3ddd, 0x201a4237, 0x67a9f633, 0x1414a485, 0x416403c1,
197726       0xb6f6a916, 0x60afd447, 0xdac6f790, 0x95f94930, 0xbd3b9d82,
197727       0x685ff94b, 0x51cadf0f, 0x5c8f98fc, 0xb13b7489, 0x9559c88a,
197728       0x5f18fcc8, 0x31377c66 },
197729     { 0x7dcfb35f, 0x35c5de09, 0x01cc36f8, 0x2dccca9f, 0x7576cb63,
197730       0x7e93e85d, 0xf7b4b375, 0x0c2dd48a, 0xb09a19b5, 0x9d95cd4f,
197731       0x71bfe607, 0x752ed159, 0x2596dad2, 0x439880cf, 0x69e90a6f,
197732       0xe52efb53, 0x03d3e60a, 0x44097663, 0xa95070e0, 0xfcf364fa,
197733       0x05624dd2, 0xd8f993b6, 0x00d5e467, 0xb35a9824, 0x0c8f4524,
197734       0xe289d024, 0x648a0179, 0xef45423c, 0x587edabd, 0x3a5fd695,
197735       0xa11e5271, 0x3dacc50c },
197736     { 0x6499ae4c, 0xcb3e4f94, 0x7053c527, 0xa46dcbe1, 0xbe782e8a,
197737       0x807f5ce9, 0xd8481e45, 0xb6c64d28, 0xaa286fd0, 0xf35e4518,
197738       0xdf1cdb49, 0xf7b7b9ba, 0xaec23eaf, 0xf3fb6210, 0xb9bfd2fb,
197739       0x0a9ba385, 0x8807f3a0, 0xe51a0d53, 0xb17b2842, 0x7ab24404,
197740       0xf9dd9f0a, 0x6fd57687, 0xf3e9df64, 0xcd1efdb4, 0x60df194d,
197741       0x5dd2df7a, 0xe069df05, 0xbed3f2c3, 0x23248a31, 0x469b7561,
197742       0x694744f7, 0x866949e1 },
197743     { 0x3f4ab07a, 0x3a9a0da5, 0xf54a6fbf, 0x2cd6f333, 0xb23cf290,
197744       0x0c92e921, 0x848e3d58, 0xc9581c3e, 0xd3b218ab, 0x93af1fbd,
197745       0x066cb4d7, 0x38598ea1, 0x990c03a0, 0x5001394e, 0x7d0877b5,
197746       0x3b664b1e, 0xd74c7091, 0xd79db1bb, 0x4e2d5dd0, 0x852d4435,
197747       0x3329db82, 0x0d2b841b, 0x7b96d480, 0xfa844eb0, 0xc295dc46,
197748       0x37a50569, 0x94f7ec4e, 0xc2d38373, 0x5b083177, 0xdc3884ff,
197749       0x8b1fa598, 0x574352b8 },
197750     { 0x0d5d7ce9, 0xed2193f7, 0x0b487eaf, 0x3c19fd26, 0x7be65fd0,
197751       0x7c44ab59, 0x78270d56, 0xdd9da860, 0xbaa70198, 0x8a84ec00,
197752       0x285985df, 0x2ec27e49, 0xde2028d8, 0x996ccaf0, 0x61c2201d,
197753       0x4e7648c7, 0x091c19eb, 0xa96335bc, 0xf0d6782b, 0x253a3a69,
197754       0xd2946493, 0x3f204340, 0x099f6873, 0x444521a1, 0x6996011a,
197755       0x5fcbcc09, 0xf853a94e, 0x3884d5d8, 0xd3b6a3a1, 0x2418c624,
197756       0x06ae3c4f, 0x3e431af2 },
197757     { 0x83d381f1, 0xf967d939, 0xd0c033c3, 0x36501aae, 0x54410768,
197758       0xbf3af4d0, 0x5093a6d3, 0xa86d1598, 0xd92f2900, 0x43ae0741,
197759       0x36f0b755, 0xfeb2afa6, 0xaa456d6f, 0xd090a6a3, 0xaefdb646,
197760       0x336a4fda, 0x1a942f7d, 0xfd1bfe44, 0x851ee41e, 0x7fc2a3ed,
197761       0x11e935c5, 0x4f1c9686, 0x53bbb343, 0xcd577666, 0xad896c2a,
197762       0xf26931ba, 0x86bbfa41, 0x8a0fbbd1, 0xa203cef1, 0x1c3d7d82,
197763       0xe2664d35, 0x6dad3f15 },
197764     { 0x12ec35a1, 0xd1940b7d, 0xe7dfb128, 0x6219c5b6, 0xf13321d5,
197765       0x2cc278c6, 0x33c58eb6, 0x5e76904a, 0xd9903c43, 0x15090f55,
197766       0xc3d96a19, 0x061bc926, 0x8c0acba7, 0x974a9f03, 0x7198b21b,
197767       0x7a414021, 0xf8958c6f, 0xb069599d, 0xbebd0129, 0x517f2f1d,
197768       0xdf3a8dc3, 0x1109a613, 0x672375c5, 0x08e58448, 0x9383d2d3,
197769       0x56590ba4, 0x0bff837c, 0xfc3ee7c6, 0x27d2d55f, 0xc87a5390,
197770       0x5f517a3f, 0x2438e9d4 },
197771     { 0x8815af3c, 0xc4a45308, 0xf3c9bed5, 0xe55f1a32, 0x97b65ddf,
197772       0xaef1cdc9, 0x12e51eb5, 0x61c61d94, 0xe63f2490, 0xbd0dac54,
197773       0xd0b3e231, 0x6f14429c, 0xf1da6010, 0xf737c3c2, 0x6bbc4fb1,
197774       0x7150e04b, 0x1be281cb, 0x205b4c89, 0xd7701f5b, 0xf1b4633c,
197775       0x2a513490, 0x8b33ef46, 0x68f1f7f2, 0xddb47c73, 0xbd416b67,
197776       0xf4ada511, 0xff795bb3, 0x9d2a97cd, 0x96200e67, 0x00a8b7b2,
197777       0xafe30e01, 0x13f39011 },
197778     { 0x7bd0c827, 0x3dd296ef, 0x4a29ff46, 0x506110f3, 0x1c9a515a,
197779       0xf8793068, 0x268bca77, 0xde8d8045, 0x998045df, 0xcbb83024,
197780       0x68c0e584, 0x3f90d710, 0x263b6062, 0x2a838ca8, 0x535c5d0b,
197781       0x293bb5e7, 0x56415110, 0xceea99d5, 0x1bbda005, 0xfe311ad0,
197782       0xa4d8d018, 0x2497e0bf, 0x1cf2b866, 0x33dd77a0, 0xd8c4ba8b,
197783       0xbc075b73, 0x722b7bc9, 0x298466d4, 0xcbda1b0b, 0x17a7ce24,
197784       0x680703b6, 0x458d4b6b },
197785     { 0x4d54d8b2, 0x8a26a20e, 0x4d320a0d, 0x05a5696e, 0xf994f700,
197786       0x698b5858, 0x2f6549a8, 0x7a4adc3c, 0x3694d00d, 0x1812e819,
197787       0x730402bd, 0x46b9b000, 0xa1b36410, 0xe10a1449, 0x99230220,
197788       0xeae95ea5, 0x1b4820c3, 0x3efc2e9b, 0x85c9eb8a, 0xfe5b5cb5,
197789       0x97847064, 0x21ae0319, 0x8f27d49f, 0x68ef0b70, 0x2f72556b,
197790       0x3259ef18, 0x624db01a, 0x00ae0457, 0x5668f95c, 0x628e3b06,
197791       0xb6fbbf91, 0x5f13f5fa },
197792     { 0x3a9b0dc6, 0x7c6ed9ae, 0x6f883ec8, 0xaea1bde9, 0xea8b3677,
197793       0xea66bf88, 0x9a66e3ab, 0xdefa6abc, 0x68217ffd, 0xc4d3317b,
197794       0x290df05c, 0xf741c8f2, 0x7d11674e, 0x1f0fdf17, 0xc35989ca,
197795       0xfdf0ece7, 0x6b9c482d, 0x0eed92df, 0x55bf1ca7, 0x73713e66,
197796       0x25cec99c, 0x90acb290, 0xe803e69c, 0x37c9e3a2, 0x17713a1a,
197797       0x7c0a3c53, 0x6f5a174d, 0x350dc565, 0x05f802f6, 0x11625a44,
197798       0xa37ba4a2, 0x2196495d },
197799     { 0x13142680, 0x00cb2fd3, 0x65d14cf4, 0xab9e91d7, 0xdfe2669e,
197800       0xc6a0ceab, 0x0ae22bc5, 0xbeefce58, 0xcb6ec250, 0x3c2b7986,
197801       0xd738f1ff, 0x84adb1a2, 0x516ec8ec, 0x9709bc28, 0x8e8f7db5,
197802       0xf3693129, 0x95b197f9, 0xc48efc6b, 0x9aaaa404, 0x9ff10952,
197803       0x144154b0, 0x2c3c8cbd, 0x427f3435, 0x33ef7bc3, 0xd21897c1,
197804       0x04a17940, 0x6ce548a0, 0x5aa0c47d, 0x3d56fa62, 0x2971cea7,
197805       0x04475f08, 0x93ad0eb0 },
197806     { 0x988a9963, 0x7a0b6967, 0x6515e8dd, 0x61e477f7, 0x3b6b50f2,
197807       0x6274e386, 0xd33922de, 0x63a9b8d5, 0x687a5b3d, 0x3c38d3fb,
197808       0x1302e323, 0x18f6f09c, 0xe02fcccf, 0x254c05c3, 0x26e662f7,
197809       0xc04ed0b7, 0x143fe079, 0x1d5646b8, 0xc9016c8c, 0xef8a9448,
197810       0xf823d797, 0xe5674c4b, 0xbccde451, 0x0586f72f, 0x4417eade,
197811       0xc5fc88d5, 0x576e588d, 0x2b952209, 0x5844d1f9, 0x4408dd42,
197812       0xea41c034, 0x73f8c3f0 },
197813     { 0x5df763dd, 0x89534fc8, 0x3ac71836, 0x3b1427f3, 0x6e8f15a0,
197814       0x0db5be17, 0xcb20888e, 0x1d390944, 0x857caea6, 0x7804c9ad,
197815       0x519f7bf3, 0xaa584428, 0x293aa8cf, 0x626eecf1, 0xea36a015,
197816       0x749e0d98, 0x3321edcd, 0xefff6dae, 0x28b791cc, 0x963deea6,
197817       0x2d16e361, 0xa14e0552, 0xb15ae206, 0xa2e058fc, 0xfca325e4,
197818       0x0f268745, 0x21341a8a, 0x7cf9d407, 0x7caa51b8, 0xdfed25d9,
197819       0xadbedd75, 0x0108ae39 },
197820     { 0xa9e88f63, 0x54d178f3, 0xab0c7325, 0xaa05b11e, 0xe261d8a6,
197821       0x773a53e6, 0x8d0b91c8, 0x24db7dae, 0xe9bb004d, 0xde10b073,
197822       0x54e3090b, 0xfc8befe7, 0x0cc69c89, 0x16af0599, 0x9d59511a,
197823       0xddc83803, 0x46c5dafc, 0xc3f65b99, 0x1ee0a599, 0xfbbe4be8,
197824       0xfb3a9b17, 0x88891e36, 0x445dad00, 0x0c9aad75, 0xd5097e1f,
197825       0xdffc46ab, 0xac85a4e1, 0x8848089b, 0xa0c45233, 0x348bb42f,
197826       0xeb13c1df, 0x807c06d8 },
197827     { 0x98ee0ef6, 0x00a969ec, 0x8bb7b7af, 0xba9d5483, 0xa02f8fdb,
197828       0x24484c92, 0x8b70557c, 0x7bdb201a, 0x60ad1af2, 0xe59343e4,
197829       0x998c95fb, 0x53a9a942, 0xda861d3b, 0x974db3de, 0xed399c0e,
197830       0xce1525c9, 0xf72109bd, 0x89b56881, 0x998211a4, 0x08ff7d15,
197831       0xef0f275a, 0x5df76b3a, 0xfa2f358b, 0x93f180f7, 0xc39b0634,
197832       0xaac4ffcf, 0x17583b53, 0x2692c626, 0xb55399fc, 0xb2fdfa36,
197833       0x99607a61, 0x16424c6c },
197834     { 0xdd2744a9, 0x5dd65c55, 0xfe3af418, 0x2544c1c2, 0xefe8b089,
197835       0x32c82e99, 0xa9df691a, 0x30b7ab25, 0x9be99674, 0x98384550,
197836       0xcaf2d122, 0xbcecd258, 0xbcc77272, 0x88ae4098, 0x4b8efa0c,
197837       0xd4396141, 0xed64d12c, 0x44ff67b9, 0x2e7f3404, 0xa9e655e4,
197838       0x45b0e9eb, 0x3d16fc45, 0xf03ded28, 0x474a3e14, 0xacccb85c,
197839       0xa3c9adff, 0x7253a51b, 0x3dfe6bc1, 0xfb5831b1, 0xdddaf4b9,
197840       0xa4f4478a, 0x5544e602 },
197841     { 0xbaa80b4f, 0x897c5313, 0x63bdc8ef, 0x0122716f, 0x7b42c5a8,
197842       0xae2742db, 0x0883308c, 0xe9d9e1e9, 0x2d341ab1, 0x352c8c3f,
197843       0xed945870, 0x163d0500, 0xc290d9d8, 0x8349dd73, 0x1f6c7d29,
197844       0x2053c5e0, 0xcb42033c, 0x83107446, 0x09d09af1, 0x76c88bd2,
197845       0xb2794681, 0xd0f70e6e, 0x19b1b540, 0x720b59de, 0x22994b43,
197846       0x80b7ecdc, 0x2dec53cf, 0xc1a4cdce, 0x1ed60f42, 0xdd7d3edd,
197847       0xe241d261, 0x5735995c },
197848     { 0xa0237056, 0xdc4ba3fb, 0x33ab3388, 0x6856c164, 0x271ec612,
197849       0xc01eebbd, 0xe3031bec, 0xabdeb033, 0x6118a1f5, 0x4eee4419,
197850       0x5b600f33, 0xec497421, 0x08868773, 0x1b7185cf, 0x7c1b7dfd,
197851       0x7b0c46cd, 0x4a4c5e89, 0xd143b2da, 0xbb1ff94d, 0xdb9a5984,
197852       0xc9cf3465, 0xac3904e4, 0xeace64c9, 0xf8729bc0, 0x768ad99a,
197853       0x5cc22821, 0x8a9540c2, 0xbbd3b081, 0x049a6917, 0xe468ed5f,
197854       0x3ec45ef0, 0x885486df },
197855     { 0x4bdff464, 0x6a942c93, 0x25a7b451, 0x3db2719f, 0x325be324,
197856       0xccb0070b, 0x19fe3339, 0x2055a31b, 0x241ee8ff, 0xaca69ae8,
197857       0x55ef8def, 0x7607dd08, 0x1a1b73c6, 0x9e24960f, 0x71d36810,
197858       0xbcb0e8a2, 0x6885e6b9, 0x29e11aa2, 0x185eae19, 0x98b5d0ab,
197859       0x0f81f91c, 0x1a0b96e4, 0x994fc503, 0x4d0e8bcf, 0xf119d6e0,
197860       0x33d81697, 0xaaa4ce0c, 0x29083287, 0xc91ff9d7, 0xc5dd4d3e,
197861       0xd4ab962d, 0x31cecfe8 },
197862     { 0xfc8b21e8, 0x437bfd9a, 0xb19436df, 0xe5dd32b3, 0x921c36a0,
197863       0xfe5902d4, 0xa3d0fa90, 0x8e9de84d, 0x5bb523bd, 0x9663e6ad,
197864       0xaecd6975, 0x9800a23f, 0xb4fbb59c, 0x1009c0d9, 0xc9d20ff1,
197865       0x839aa7bd, 0xecd6fa3d, 0xf502f66d, 0xc5516ca9, 0x480ed4fb,
197866       0x6c742ac4, 0x65ffa5f6, 0xff3252f8, 0x2b7c7945, 0x75d9cb3d,
197867       0x72fefc05, 0xd6d6f1d2, 0x11b0863b, 0x9a6a4ec3, 0x5d8f3cf0,
197868       0xda2547b3, 0x6961b46a },
197869     { 0xcb35e2ac, 0xd07b587e, 0x57af14d9, 0x1ed5546b, 0xdb28a04c,
197870       0xeca17a5b, 0x709d54f0, 0xa1f91d44, 0x9c6f400e, 0xa6e719fd,
197871       0xfb8ce190, 0x4e4b88ed, 0x246e3fd2, 0xf9781edd, 0xb655af5d,
197872       0xd67120e6, 0x93413ca7, 0xda782d1d, 0x9707fa21, 0x697e20a2,
197873       0x54e84123, 0x1eb51f32, 0x36051f9f, 0x2e254d9e, 0x73ce5be9,
197874       0xddaec42b, 0xcd3f794f, 0x89a9a32e, 0x0781aad9, 0x1964e22f,
197875       0x53755212, 0x6a63a90c },
197876     { 0x3d7acbbb, 0x76554e00, 0xb74f6108, 0x2c01668a, 0x388c519b,
197877       0xe4a29672, 0x3eb94d4f, 0x01667714, 0x0cd6d2f6, 0x086a3cdf,
197878       0x7b370f7f, 0xf8658021, 0x5a4d3e7c, 0x658880c1, 0x5ba3f4a1,
197879       0xd6ed5816, 0x5ca471dd, 0xabcc7813, 0xe844a576, 0x809bf074,
197880       0x6ea502ea, 0xa53a81b3, 0x0e021ed3, 0xc20b9307, 0x8617f165,
197881       0x8c27f892, 0x8235cd0b, 0xa5476446, 0x82552961, 0xffc89ffd,
197882       0xd151d90e, 0x51ed4a22 },
197883     { 0x449701b4, 0x37d6963a, 0xbb27caf2, 0xea8d91a3, 0xb572965f,
197884       0x3ef9be15, 0xdb50bf7d, 0x75a7a055, 0xce643b9b, 0xfd67480e,
197885       0x6ceb5d5e, 0xf2a60d2d, 0x5ed7c897, 0x68fc320c, 0x28ce685f,
197886       0x41c53cf6, 0x7106615e, 0x0e29711f, 0x23500ecc, 0x7a872138,
197887       0x6c29fe48, 0xaf0a9260, 0xe1ef9712, 0x93df3f2a, 0xd2d169bf,
197888       0x0d5f6fb1, 0x74a9793c, 0xeb7afe26, 0xe9f49256, 0x4173d94a,
197889       0x2b8b5ce5, 0x2d6951bc },
197890     { 0x904e222e, 0xdd007d9f, 0x86f4e109, 0x333f248f, 0x8f429eee,
197891       0xd4994e8b, 0xcfc77518, 0x29573415, 0x0b0f42f1, 0x6e7fea3a,
197892       0xc2743519, 0xc795cb7d, 0x711e71a0, 0x820a8f66, 0x2b874f55,
197893       0x83d95d9c, 0xe70e1627, 0xd4b64d78, 0x8b92a742, 0x924353f5,
197894       0x447b5e6d, 0x322048b1, 0xbcf931a0, 0x0bad730c, 0xa7af2268,
197895       0x75c4d089, 0xb83b93f9, 0x464904c1, 0x165b3aee, 0xa24eba02,
197896       0xe08cc5f0, 0x65c48e78 },
197897     { 0xde222c22, 0x1a1c73ce, 0xfcea23b4, 0x5683d8cd, 0xb2143b06,
197898       0x0301cb14, 0x59fcec77, 0x284adf8f, 0x31204cef, 0xfb1c581c,
197899       0x94735107, 0xf54d3eee, 0x4d3188c0, 0xdbf67f0b, 0x10f18d12,
197900       0x76a3f2d1, 0x07d3e013, 0x3809fa28, 0x25e7ece0, 0xf06f0a46,
197901       0xb2895d2e, 0xd82867ed, 0x08b0553a, 0xe106f489, 0xef245445,
197902       0xe2280fa6, 0xa8d9a3cb, 0x402d5785, 0xd438ba2d, 0xf63dd9ff,
197903       0x7a6b226f, 0x36b5cd2c },
197904     { 0x545679a7, 0x87ff4e20, 0x4520c750, 0x64d80b41, 0x9b459cd8,
197905       0x90a357fa, 0xc85af1a3, 0xa19eaf39, 0x8d935a5e, 0x0d475d79,
197906       0x781a678a, 0x74501983, 0x0cc2e810, 0x74839779, 0x2f412244,
197907       0xc6a21d11, 0x36a51a37, 0x8d0e85f9, 0xeaa74df8, 0xff50151e,
197908       0x93cf99c4, 0x14e182a7, 0x376a9ab6, 0x45593df1, 0x522389ff,
197909       0x18f73caf, 0xf7445e8a, 0xd27cc960, 0x39a51dc8, 0x0692f4c5,
197910       0xdb39bfd8, 0x08d7c144 },
197911     { 0x3ecca773, 0x809c0d96, 0xd48c2156, 0x87ea9192, 0xdb6bd641,
197912       0xf0eccd74, 0x2a678cdf, 0x77312374, 0xd1587b7e, 0x7a966d8b,
197913       0x6130a4c6, 0xf3c1a101, 0x5fce17bd, 0x7cc6e838, 0xa8de7aa4,
197914       0x95e95bb8, 0x898308e3, 0x3fe1e8b5, 0xe347694a, 0x0197243e,
197915       0xbb0cd2bf, 0xf3fe9c42, 0x0f9b2b49, 0xb5905264, 0xc7367d1f,
197916       0x4c385e8b, 0xb5ee147b, 0x1d3050ae, 0x04004ad9, 0x8e2c3879,
197917       0xbab70202, 0x5f2aa8ee },
197918     { 0x1266524b, 0xe208d464, 0xd0a19f66, 0xb7bf3880, 0xda106ebf,
197919       0xa5aa685e, 0xe642dd46, 0x0a69e8d3, 0xc682e4d6, 0xef349c61,
197920       0x0fcb534c, 0x26f6ee3b, 0x05eb67b8, 0x7daba127, 0x18be05f6,
197921       0x2babb27e, 0x8e2d85d1, 0x959afcba, 0xe2d9d386, 0xedcf2d1a,
197922       0x1ea6f06e, 0x59dc52e6, 0x866e5ae8, 0xc28278b4, 0x02bcd3c7,
197923       0xd9ff0340, 0x784be82f, 0xe884ac76, 0x83c9f224, 0xa3164980,
197924       0xb46ff949, 0x62501a98 },
197925     { 0xad264086, 0x563f7d9a, 0xa5e0e4bd, 0xca6a33db, 0x8c8d3d67,
197926       0xe8253002, 0x46e64b19, 0xa288dac8, 0x20aa4536, 0xfa3c9197,
197927       0xed553eac, 0x8130c9b0, 0x2ea8abd3, 0x622806e0, 0xceccfe77,
197928       0x52fbf54d, 0x4f0d1b70, 0xbd9a8e31, 0xd59b1741, 0x519d2133,
197929       0x9a6fea8a, 0xfd74101c, 0xb5c4eb10, 0xd1acf7a0, 0x91f9da5e,
197930       0x78499b73, 0xc0dea586, 0xabaa4c49, 0xa1f3531a, 0xcc9c5f73,
197931       0xfd3fc665, 0x497b15fe },
197932     { 0xf45568e9, 0x8a56cbaa, 0xc7192a6f, 0xf491a0fe, 0x9ab2539a,
197933       0xdbb03dd3, 0x4ac37da9, 0xc86522f8, 0x02a0f5b4, 0x8c8cdba2,
197934       0xa29c539f, 0x8109fc75, 0xca90f02e, 0x9cd06d31, 0x3e216dbf,
197935       0x8f31f044, 0xba3ebd91, 0x99aa68ac, 0x42c007f4, 0x2a80d0d2,
197936       0x86a9b7ce, 0xdd8dffbf, 0xd6308edc, 0x405d3e84, 0x068012ca,
197937       0xdafa33fe, 0xedea1071, 0xc2eebd13, 0x2ff637e6, 0xb7ae7e5c,
197938       0x9e514cb7, 0x18d46a6c },
197939     { 0xa78b7802, 0x868cbb22, 0x497cbaf4, 0x0745ddb2, 0x42ae8add,
197940       0xc4eb2f3e, 0xb4ceb4e4, 0xac0abcda, 0xa325fd40, 0x2e0d8325,
197941       0x13ac7345, 0x6cfe0571, 0xb14171b9, 0x7407a788, 0x6da7a52b,
197942       0x70eb0603, 0xd85176ac, 0xab0b36f9, 0x7c2954f3, 0x14109d29,
197943       0xdcd705ad, 0x370de9c8, 0x7bb5e751, 0x3f0db5cd, 0xa06e708c,
197944       0x45f93d41, 0x7e93050d, 0x10d54f8a, 0x5a38fef9, 0x69e6f8e4,
197945       0xd3f62e40, 0x55044601 },
197946     { 0x06cb9cc9, 0xd1c5c910, 0x41d00014, 0x542074d7, 0x11236fb8,
197947       0x7cd8663e, 0x29ad5f82, 0x39721ffe, 0x2951fc83, 0x1d21fbfa,
197948       0x400d144f, 0x1cde06e7, 0x91792e6b, 0x9042596b, 0x29ad5166,
197949       0x3365c8e5, 0x9aeefe98, 0xe2220e85, 0x70c2aee3, 0xbcb53189,
197950       0x9ff100bc, 0x477ca3db, 0xf532973f, 0x27074176, 0x9a2bd01b,
197951       0xa12118ac, 0x3dd79f93, 0xf3425209, 0xc6f5d7db, 0x563a8ff7,
197952       0xd7b0ec4f, 0x0da313fc },
197953     { 0x15aa2557, 0x37125a8c, 0x00893e9c, 0xca21d70c, 0x67b8a823,
197954       0x48713994, 0x7cb0042a, 0x0d3e9a74, 0xc9e2ce18, 0x2d2bf4ff,
197955       0x049aeac2, 0xd5531a0d, 0xf03d0660, 0x4d29a616, 0x1f1b7f00,
197956       0x473d50d6, 0xca3de50c, 0x3af0ecbb, 0x09c28f27, 0xe2959bea,
197957       0xf8704664, 0x6d7c2ea0, 0x731083ef, 0xadfae4e1, 0x941c2554,
197958       0x50940c26, 0xa1162d03, 0x44167410, 0x1e82290e, 0x620230d8,
197959       0xdb414acc, 0x63630be8 },
197960     { 0x8a7d2e41, 0xbf8d5222, 0xeb62f879, 0x49e75823, 0x6c402d89,
197961       0x1b4d33dd, 0xde2c59ad, 0x883e04d6, 0x49b9dc38, 0xbf3f38f4,
197962       0xb4b70c4c, 0x9d997d18, 0x13cea045, 0x1f69b20c, 0x58e2606d,
197963       0xca3d7025, 0x261d1b79, 0x3d4fd977, 0x5a1436fa, 0x56aeafa8,
197964       0xbb443c07, 0x369b3e98, 0xe558f6be, 0xfce5186c, 0xf8ac8f89,
197965       0xeb0cd478, 0xd5e5aa72, 0x68074f37, 0x68544eb0, 0x295845c0,
197966       0xf16688ed, 0x306a9871 },
197967     { 0x634ec136, 0xbc451e9d, 0x0e6f658f, 0x1edf27ca, 0xc0db4120,
197968       0xa9be0152, 0xc5bfee67, 0x87b6ef20, 0x9a2d6023, 0x35283238,
197969       0xc7afb899, 0x60e564d8, 0x0ac9c2de, 0x4af22bc0, 0x82a9d22b,
197970       0x28e6f631, 0xf532701b, 0xc075c701, 0x82075f91, 0xf6d418f8,
197971       0x1beaa511, 0xf9fa628d, 0x6e72a13d, 0x551e7a17, 0x77f4c01c,
197972       0x9306215b, 0x93c9d588, 0x71aba731, 0x58e57cd4, 0x6443ebe0,
197973       0xe8103e37, 0x2833ac41 },
197974     { 0x8da5ec5c, 0x7e564b86, 0x1c08db24, 0xac3d9da8, 0x8c57a728,
197975       0x9d7c1f0b, 0x9d343dc2, 0x3512afe7, 0xfdc60339, 0xb438e4cf,
197976       0xdcfa1941, 0x7d5a2700, 0x27320449, 0xd5f323f8, 0x1393c6e6,
197977       0x1b87a58e, 0x04baa431, 0xecb68bd1, 0x4722b4d7, 0xc09c1c5a,
197978       0x206b5faa, 0xf42faa97, 0x9976327e, 0xe1dcbcd6, 0x087787d9,
197979       0x655ba9e4, 0xde5c0191, 0xbd59c757, 0x0bcf3538, 0x673020ed,
197980       0xa49d6303, 0x120cd454 },
197981     { 0xcab0f9ee, 0xebfdb8f4, 0x2cce58ee, 0xbc003ef0, 0x5a8d0665,
197982       0x9b6a6841, 0x9b957774, 0x642ed3a6, 0x4721ab5c, 0x3de487f0,
197983       0x21a4f0d3, 0xef2ff380, 0x29dbddcd, 0xbd16f558, 0x0e93dff2,
197984       0x2ef05b4b, 0x0bc9aec1, 0xde1faa12, 0xd467fa92, 0x66dae2c2,
197985       0x5eb33e34, 0x758daf64, 0x8f0103cb, 0xa67ad9f6, 0x9be02430,
197986       0x151f693a, 0xeb4054bc, 0xd5698496, 0x7019336e, 0x8ef1677e,
197987       0x7fdeea3e, 0x021cfd16 },
197988     { 0xdf5c36f3, 0x5c73715f, 0xd64ad254, 0x703bde37, 0xf2cf7713,
197989       0x55368d10, 0x0f3993c8, 0x1e5ec7b7, 0x304ae4ca, 0xfdb16776,
197990       0x3d3bb18b, 0x0d8f717e, 0x66343d5a, 0x5267073f, 0x156008b5,
197991       0xfaeb52ef, 0x224a470f, 0xb97ad5f9, 0xed2ab51a, 0xaf86e391,
197992       0x9974302c, 0xdc0c7e57, 0xfd0ae28a, 0xc88fa817, 0xbf8ed59c,
197993       0x807c22df, 0xeb128bb6, 0x5dedc231, 0xa20595a3, 0x71edcd9c,
197994       0xc73cf78e, 0x07265b46 },
197995     { 0xbd66232f, 0x73dd99f0, 0xc4027716, 0xc59aaf89, 0x5b860fc4,
197996       0xaf826dfa, 0x7a943f3b, 0x239ea8aa, 0x523c428d, 0x0e0e1b1a,
197997       0x6973b95a, 0x55ea0e3a, 0x2557753b, 0xea399caa, 0x06957b1f,
197998       0xf8adf72f, 0x3bd34302, 0x0389f341, 0xf8a43a97, 0x333f27d0,
197999       0xadaf796f, 0xcd9c0c08, 0x49c12aa2, 0x6dcca49b, 0x7a0ac6e9,
198000       0xdd88deee, 0x0644080e, 0x8f47575d, 0x0cc2f4bd, 0x6e9d667d,
198001       0x31d1496c, 0x36c5754b },
198002     { 0xf323d84b, 0x9120046e, 0x7e789c4f, 0xa6991122, 0x921b8055,
198003       0x4b0eaf4e, 0x8079974e, 0x6339844a, 0x740f8c79, 0xc905466a,
198004       0xcd6def49, 0x1c18d0f7, 0x4b23e4ba, 0x5297da6b, 0xc41800c5,
198005       0x1c09dff3, 0x37ef6777, 0x6c49075b, 0x50513ded, 0xa94c3a40,
198006       0x6b0b1705, 0x3d6742e9, 0xc48af5ae, 0xc0784494, 0xc95822de,
198007       0x40c01532, 0xc164d94f, 0xa2ddade5, 0xa2975eb5, 0xfc8a8ac9,
198008       0x1946944e, 0x06fbf861 },
198009     { 0x3f45aa97, 0x2d65338e, 0x1d040feb, 0xd83b58c8, 0x0fdef8b9,
198010       0x05fef59b, 0xe4d7417c, 0x7beb071a, 0xb30a1a23, 0x982b61f5,
198011       0xfb65bd03, 0x4c5f2a2a, 0x5cbf6bf3, 0xe40abc9d, 0xf06612a5,
198012       0x422c326d, 0x9571ae28, 0xc921e69d, 0x23d3434e, 0x7c88b10b,
198013       0x9da07933, 0x96d2e957, 0x3619cf4d, 0x833d46a1, 0xd95eefa1,
198014       0xd9d19653, 0xa03e8f0e, 0x2a7d8411, 0x04bb5ab1, 0x5e642953,
198015       0x1f0fa9ea, 0x5e9ca0fd },
198016     { 0x197c5dc4, 0x5bd54571, 0xe78a95a2, 0xe2da40bf, 0xffdb0eb2,
198017       0x65fb9efc, 0x0d17467c, 0xe952dc2c, 0xc758c6a3, 0xc1fc9c7b,
198018       0xd4034a9a, 0xfc79562c, 0x61f64b56, 0x26e36fbe, 0x1e84728b,
198019       0x6adc4b9e, 0xa8f9ac8a, 0x7f165fd3, 0x03e3e013, 0x7bc93a45,
198020       0x656478e3, 0xeacc5513, 0x064ddc77, 0xd3391717, 0x76936914,
198021       0x75b318dc, 0x362424a6, 0x69b1f1c7, 0x49955f34, 0x8cc2045b,
198022       0xc6836af8, 0x940622b3 },
198023     { 0x0d997973, 0x4710ccb7, 0xd3f8f115, 0x3b29625d, 0x5b97abd5,
198024       0x8cf0c4d5, 0x673e14a5, 0xc6321e0a, 0x3d262246, 0x0541af9d,
198025       0x6fc83b11, 0xde6d8754, 0xf01652a4, 0x47e97da8, 0xad9802b6,
198026       0x0f82b3a6, 0xae9c44b2, 0x69aa4075, 0xced2bf77, 0xaf3f5de2,
198027       0x497a40da, 0x1ef1ea8a, 0x3c23ba9c, 0x2e0f8608, 0xf190a2c8,
198028       0xd8a998a4, 0xcfde3368, 0xe2b49c8c, 0xbde6bd71, 0xb9f49824,
198029       0x785bedb6, 0x80bb1664 },
198030     { 0xfd145cb5, 0x05e575fe, 0xac5e6883, 0x155ee561, 0x8793b273,
198031       0x461e70cf, 0x133b2338, 0x9f1553de, 0xa2a7ba07, 0x2fb9e0c3,
198032       0x3e7086fa, 0xc3bfd6a8, 0x8bb4cb93, 0xb6ba8500, 0x76f82dbd,
198033       0x0b66d789, 0x54eb49ff, 0x7d5a6ff6, 0x1f20b322, 0xcd65d237,
198034       0x54e29cdc, 0x79ea49c2, 0xcb118ff9, 0x64975963, 0xcc58000b,
198035       0x969598dd, 0x110c779c, 0x95107918, 0x63b85a35, 0xedfc1548,
198036       0x41212350, 0x077ba5ea },
198037     { 0xcdd86f61, 0x0b3a38d3, 0x0502a0ab, 0x43121445, 0x806d0272,
198038       0x1912edc5, 0x8a32f10f, 0x01dc1f98, 0x0e80c760, 0xbb1d31d1,
198039       0xf464e8b3, 0xd46ec7e5, 0x9abf49ee, 0xd569af36, 0x2cdade77,
198040       0x9d286ea7, 0x45ad5920, 0x2be7020d, 0x6299ae7f, 0xabe5236e,
198041       0xd3f55c07, 0xc93179bd, 0x52350e80, 0x8138995a, 0xaff07586,
198042       0x0901265c, 0xf4739653, 0x5b3c81b2, 0x9bc77d21, 0xbaf7581d,
198043       0x4591a2e2, 0x6b2006df },
198044     { 0x965b1bc1, 0xb2fe50a8, 0x962bb4fd, 0x931f536a, 0x000e7f99,
198045       0xd5718d33, 0x53d5125e, 0x84728f25, 0xd2125caf, 0x4f8a6184,
198046       0x357f679e, 0x54f1a701, 0x1531c05a, 0x70a9f40c, 0x6fa8b775,
198047       0x10d0cb97, 0x9dc12ce9, 0xb476f41e, 0x2755f894, 0x5c8d7a75,
198048       0x625741a4, 0xd6c12e10, 0xc917b16c, 0x262a6fb8, 0x38d6b0a0,
198049       0x24d116e6, 0x32c38e83, 0x849540c0, 0x66868afc, 0x855b911c,
198050       0xbd26b550, 0x53217ea6 },
198051     { 0x259f52b4, 0xfc840473, 0xe621146c, 0x968da9cb, 0xcacbd26e,
198052       0x964eb85e, 0xe4a54344, 0xab7daa2d, 0x381a4ff7, 0x6dc3b848,
198053       0x41c815ef, 0xa07a96b3, 0xc3d4b1e1, 0xc4fae9e8, 0x42ce9ea8,
198054       0x0f938d1e, 0x35cc052f, 0xa727dacc, 0xe9a06f07, 0xc81e01c9,
198055       0x4a6d65a1, 0xa9e08dcb, 0x6044a9a6, 0xf8e2d173, 0xf2bd295b,
198056       0x99893dd0, 0xf9781b12, 0xa08d3379, 0x61830ac2, 0x64bd6001,
198057       0xd9adbeef, 0x0386931e },
198058     { 0xd09885a5, 0xd0d7abb3, 0xe355bb07, 0xed9d2b67, 0x536ebaed,
198059       0x3bc238cf, 0x699ce4d6, 0x61ca2e78, 0x111594cd, 0x354ff447,
198060       0x03316ad2, 0x55cbe709, 0x49fff5c4, 0x418679fd, 0x0f9c6c40,
198061       0x75bacd75, 0x2972721a, 0x677edc88, 0xe5ef502f, 0x82596887,
198062       0xbf320e0e, 0x459e9367, 0x8bbdccb2, 0x81ce36ef, 0xb766863d,
198063       0x1ba097fc, 0xd58c6db8, 0xcd3a21d6, 0xb4a8748b, 0x0e4967cd,
198064       0x15041c20, 0x2caaf749 },
198065     { 0x6ed20424, 0x44f98006, 0x22471545, 0xb3e4ea23, 0x781a8c86,
198066       0x268ed1a5, 0x7ae5b70b, 0x48d0ab75, 0x356d3982, 0x6ca8b320,
198067       0x2df31fa4, 0x9ce8e681, 0xd925dcf2, 0xb909d232, 0xf56723de,
198068       0x302c8f78, 0xabac96f9, 0x11725d69, 0x57d1a170, 0x656a47ca,
198069       0xc18a2be7, 0x6bb5d511, 0xad50d9d9, 0xb56e45f1, 0x70b05518,
198070       0x36e886e2, 0x09d8ff91, 0xc7c71f3d, 0x9350361e, 0x65a1bbe2,
198071       0x45fe3bd8, 0x86d7f532 },
198072     { 0xb0bf719a, 0x99f16eb6, 0x8bc3d913, 0xb6975098, 0x26cd01b4,
198073       0xfae50e52, 0x90898d1c, 0xd3e3ac54, 0x887ec666, 0x4da3b9db,
198074       0xfbea45b8, 0x58300644, 0x8355b058, 0x369f3bd9, 0x579bcc13,
198075       0x0fb239a8, 0x6e2bd811, 0x4f5b4539, 0x24198fd2, 0x007f3baf,
198076       0x8837d51d, 0x68a676db, 0xeae75b16, 0x68eeea62, 0x3db6083c,
198077       0x5ffe5f94, 0x7d836c5a, 0x52c94d0f, 0xcbc1ff85, 0x5a4c3c6f,
198078       0x86c0b4dd, 0x682a55e3 },
198079     { 0x587495aa, 0xc8f235a4, 0x34c7245d, 0x2276026c, 0xb75a46e3,
198080       0xd6ae0cc5, 0xecc3e5e7, 0x890d3965, 0x14296629, 0x1b13342f,
198081       0x8a877227, 0xc89927e6, 0x2324a68b, 0x1543f27e, 0x49cdc21a,
198082       0x6c447684, 0x1452d0ac, 0x9bc7fd4f, 0xff4b045c, 0x2cc30a31,
198083       0x852f7611, 0x415d46a0, 0xc6fdd7a6, 0xad737052, 0x7b4c7c91,
198084       0xdcecc3ab, 0x7688d70c, 0xd2cdf01b, 0xe40d3905, 0x054f2542,
198085       0xfefe4dcd, 0x02227fa6 },
198086     { 0xb751948b, 0x1805efd9, 0xfdfd225d, 0x8efeed46, 0x4f2c8b22,
198087       0xcb128e09, 0x96f7c5e5, 0x9d1090bf, 0xb4cbeca0, 0x0959d044,
198088       0x8e08cb04, 0x21c955f9, 0x68fa4fce, 0xbc1f279d, 0x0710ae9a,
198089       0xb021e14e, 0x881167f4, 0x64d16e9f, 0xbbc9f1a5, 0xf5a5c22e,
198090       0xe3420eea, 0x5f3716df, 0xd5c4e843, 0x971eb915, 0x28ffba81,
198091       0x64fc55fc, 0x7dd37578, 0x3427e54d, 0x15ebc7d0, 0x446e6a62,
198092       0x29269778, 0x547e249a },
198093     { 0xa1ffda27, 0x4706868a, 0x7955cf50, 0xb4e6cdcc, 0x0a63f3d8,
198094       0xf65151e1, 0x9de5e70a, 0x5b4127ea, 0xf9342823, 0x3d2c09ba,
198095       0xaa2f7d51, 0x18c99d83, 0xddeec025, 0xa0c5bb1d, 0x03dcf1ce,
198096       0x7ffddf84, 0x616fdeda, 0xe57e4d29, 0x7932a1f0, 0xd2456569,
198097       0x3191d4e3, 0x7475e0e8, 0xc220218b, 0x3479bea1, 0x8bcb2505,
198098       0xfceb5c90, 0x3c6132e6, 0x1c685cea, 0xbfe6c1eb, 0xc42dc745,
198099       0xd2b08eea, 0x45a41cc0 },
198100     { 0x4dbbf0e1, 0x3ea9b2c7, 0xa17cf70e, 0x41ff962f, 0x5eeb4c66,
198101       0xdc1ea758, 0xa9beb17e, 0x4f5412d2, 0xa285741a, 0x2c9e4f52,
198102       0x984fd11f, 0x93df7da4, 0x0df3184e, 0xb2afbddc, 0x2421e375,
198103       0x96323d25, 0x49df781e, 0xc87be1e4, 0x3d589bea, 0x145601ed,
198104       0x28fff6dd, 0x0f0bd9bd, 0x8a0f298c, 0x2d3259d4, 0xd88e6944,
198105       0x362d7a77, 0xb6ac2af6, 0xa84c06b6, 0xd087da02, 0xba850ac9,
198106       0x42ee40c8, 0x128763c9 },
198107     { 0xacbac178, 0x29a80f07, 0x34b08f6e, 0x7cc20044, 0x70feded2,
198108       0xe9631d14, 0x86615767, 0xb2115da3, 0xcb088548, 0x7c75f5c4,
198109       0x9a2e8e03, 0x5b29d213, 0x8b881752, 0xfe9fda66, 0xc1de7ebc,
198110       0x3f1d8d88, 0x03218123, 0xb476565e, 0xb1c995f3, 0x07365561,
198111       0xb13eb71b, 0x2160cb18, 0x99b3a0eb, 0x7e8da513, 0xb20fcd74,
198112       0x5e8ca1f9, 0xb4126d72, 0x6a7e0067, 0x68bb637f, 0x1e8204b7,
198113       0xfc4f74d2, 0x75e96bcc },
198114     { 0x0d19716e, 0x189d1fdc, 0x7c384525, 0xdf585058, 0xea987d2a,
198115       0x64a846d1, 0x6c07150f, 0x12b6bf83, 0x4d6fd5b7, 0x91d85d46,
198116       0x4f53f55f, 0xa9788836, 0x81509129, 0x60083bd8, 0xea876f48,
198117       0xa7672683, 0xc15b2489, 0xe80b2e7a, 0x42d1d992, 0x985ef8d2,
198118       0xcf3de492, 0x9c57b029, 0xb1487627, 0xfe02f83c, 0x8ae5b687,
198119       0xaeba4fe4, 0x5d6b8196, 0x8a86f09b, 0xa16e523d, 0xd88f566b,
198120       0xba268949, 0x309a6e9a },
198121     { 0xbdfbe97a, 0xef27ee50, 0xb8c50c4d, 0x1a5fe70f, 0x7fe09f5c,
198122       0xcc7beb01, 0xbed36cc5, 0x8fa15a85, 0x7550ed3a, 0xc0c3acdb,
198123       0xeb908681, 0xc581ef87, 0xc49d5ccb, 0xa15b3362, 0x1fa264e8,
198124       0x0fbb1714, 0x8e1eee88, 0x267f8d8f, 0x21c2b63d, 0xd31ccfd6,
198125       0x53be7efd, 0x924dbe7d, 0xdb2a358a, 0xd42e877f, 0x75d68ac1,
198126       0xcf9673c7, 0x714fea55, 0xe35978fd, 0x5769b202, 0xeeb36653,
198127       0xd7593789, 0x0458258a },
198128     { 0xa042dbdf, 0x5df71a74, 0x5779dfa2, 0x2d405857, 0x0d2e6657,
198129       0x0e66cba7, 0xca2e892e, 0x285d6745, 0x0f0e6b5f, 0xf56a8def,
198130       0xa30767c3, 0xe0ee851d, 0x43346b9c, 0x98c05658, 0xd6b3c742,
198131       0xb35fce26, 0x39777e00, 0xc0895bff, 0xe7b6d886, 0x83c8f6a6,
198132       0x4f02904b, 0xbee14843, 0x2e84ec34, 0x7f74915b, 0x96d10991,
198133       0xbaaf663c, 0xe41facc0, 0x004b8757, 0x6f86c029, 0xa2b880e5,
198134       0x95b77358, 0x53f4a3e0 },
198135     { 0x89fc48e7, 0x11bb08ce, 0xafab5aeb, 0xba60c577, 0xa0c1cb5a,
198136       0xf06bcbf8, 0x79757cb6, 0x7d2efaea, 0x76319160, 0xe26d90b1,
198137       0x2b77b7a9, 0x42aa1ab6, 0x285df2bf, 0x38eec0cd, 0xf3a8f7f0,
198138       0xd35947f5, 0xfc1cb5b5, 0x97c8dc0e, 0xc45845cf, 0xfeb8cca0,
198139       0x249e26f2, 0x16e8d989, 0x483ed89a, 0x7c264e6d, 0x51d91073,
198140       0x13a3f145, 0x305e99f0, 0x8501562e, 0x6908d563, 0xaaf98d74,
198141       0xd723d236, 0x0a99e653 },
198142     { 0xabbc0559, 0x23536f46, 0x9aa1a160, 0xc163067b, 0x0c1681b5,
198143       0x229fd229, 0x1378e907, 0x61254be1, 0xab793a2d, 0xc60ff57a,
198144       0x466552db, 0xa6f2df8b, 0x8c170a36, 0x9ad31893, 0x29b74d9a,
198145       0xc5cd9abe, 0xf7848523, 0xcf747273, 0x0d0e3063, 0xc126a93a,
198146       0x4248e3d8, 0xfe2021e3, 0x8323ddfa, 0xd97343ee, 0x332639e7,
198147       0x9f768775, 0x75325548, 0x9650fc31, 0x3eebf7ea, 0xb595dbd1,
198148       0x010fcbc0, 0x3a95cb45 },
198149     { 0x39d7ff2e, 0x954e68cb, 0xc1d5c48f, 0x8dd1cb4b, 0x7169438a,
198150       0x02a92c77, 0x91cad8ce, 0x7965c0b0, 0x32cd08d2, 0x0c5798ab,
198151       0xa6902bda, 0x1a5bc3c3, 0x5186d218, 0x545d0925, 0xd27e64db,
198152       0xf0077cdb, 0x8cd092da, 0x0157caa4, 0x24532ab3, 0x2a2fa3a0,
198153       0x41ccaba3, 0xa5fb639b, 0x4744aee6, 0x01702dc1, 0xcdba93da,
198154       0x485bb436, 0x329784f1, 0x93597f66, 0xdad672c3, 0x5d713c1d,
198155       0x030b7245, 0x366d222e },
198156     { 0x573ea5b2, 0xd50b4875, 0xa90da44d, 0x0fce401b, 0x7a1a0310,
198157       0x7b53fa65, 0xcf114460, 0x722a80a5, 0xa538bf49, 0x0b8ebf05,
198158       0xd32acd21, 0xae141147, 0x7b5ad07d, 0x6692712c, 0x3f48ca07,
198159       0x6dc5fee7, 0x2b8a78d8, 0x98ed1499, 0xdd2f1759, 0x4e8b3145,
198160       0x5f971b8e, 0x43408de1, 0xadf1b368, 0x055ea6dd, 0xe5932b7e,
198161       0x4bb76e73, 0xd30893fd, 0x44287153, 0x0661bfda, 0x173dccd2,
198162       0x79defd25, 0x9072ba99 },
198163     { 0x9620ea39, 0x474de4dd, 0xc831cee8, 0xfbf1649f, 0xcd3a9c43,
198164       0x0b0e8bb1, 0x3f3df1d5, 0x6a38286f, 0x8f0ec9b3, 0x4ed072b3,
198165       0x729c09e3, 0xa6e4c987, 0x8ad12242, 0xea3e8ac6, 0xfbdfa5ba,
198166       0x6ae0e22b, 0xb0a0f592, 0x56171ecf, 0x6b871f8d, 0x33b2886d,
198167       0x35e11bda, 0x6b19bea9, 0x7f0f153f, 0x4d815a40, 0x7d6c02ee,
198168       0x7e608d97, 0xb6a88f46, 0x7e8f23d9, 0x439d1654, 0x26ac9652,
198169       0x35546c29, 0x8d92c6bd },
198170     { 0xabeb0ff7, 0xb3e0d7ce, 0x3e0e42f8, 0xfbe35254, 0xde808499,
198171       0x57d1b226, 0x1cd44bc3, 0x9ece2e1f, 0x435cfee1, 0x1245adbc,
198172       0xf93f581c, 0x874ee840, 0xbda0b947, 0x916a779c, 0xfa57ae0a,
198173       0xabcc815a, 0xf0a621b0, 0x97adec2d, 0x81f90bdc, 0xbe6a502b,
198174       0x53bde63d, 0x54bf9de1, 0x78884c25, 0xa88fdabf, 0xcbbb5470,
198175       0x30aa52b1, 0x29053ef5, 0xf805396c, 0x8dd827ea, 0x8d43d898,
198176       0x5c1ae5c0, 0x4e4bec17 },
198177     { 0xfcc09676, 0xbf8483a2, 0x19ea9a94, 0x457c4a3f, 0xd702a5dd,
198178       0xa6852ef3, 0x843fe7d8, 0xe7915fd2, 0x16e35158, 0x644bba98,
198179       0x9ed746f0, 0x8d1b95d0, 0xb90af0b5, 0x47704581, 0xd4fd135e,
198180       0x0bd4bc6b, 0xb4e833a5, 0xa6dce067, 0xff56a9a1, 0x2c0e8f30,
198181       0xec2c63fe, 0xa9c80800, 0x98f508a8, 0x449c20a5, 0x3292813a,
198182       0x02b94cb3, 0xec7e81a2, 0x647e3d28, 0xb4877677, 0x72e67d1a,
198183       0x6f9ded24, 0x7a4aa3f5 },
198184     { 0xe27a0045, 0x559ef1ba, 0xb242cb50, 0xdc812d4f, 0x39cf8d24,
198185       0x23a478e4, 0x9b3f9c54, 0x97544fc5, 0xaffa1fcf, 0x5ac68132,
198186       0x34a2c83b, 0x74f8fee0, 0xcd3f4bb7, 0x96cc640f, 0xb0512ea6,
198187       0x775dce9d, 0xcdce381e, 0x67dca19d, 0xa9d3fe55, 0xc1eeb3f3,
198188       0x1a19274f, 0x38e0bf42, 0x28d69b12, 0x15992fb4, 0x9fd09df8,
198189       0x48fcebde, 0xb41ab5df, 0xdc9dfa4f, 0xc0a269c5, 0x0cbd7dc8,
198190       0xf7f0ade1, 0x60282a7b },
198191     { 0xdceea2e7, 0x7c07e538, 0x3c42061d, 0x38a322c8, 0x4f1f6516,
198192       0x676828f9, 0xc7776a10, 0xf21b69fb, 0xb5e6b405, 0xc63a3417,
198193       0x91a7b642, 0x4c99f258, 0x2cad1440, 0x38692ca8, 0x00869bcd,
198194       0xf1e82ffe, 0x16fe466a, 0xc30b714e, 0x19019138, 0x5fb742f9,
198195       0x0fa516ae, 0xe90166d0, 0xd8c73a43, 0x5550f7ac, 0xfbc5c372,
198196       0x2d6a407d, 0x68cc39ed, 0xe47a7539, 0x4a5fbe70, 0x3fd286d9,
198197       0x23c6b942, 0x5f4ae9c7 },
198198     { 0x53f4d561, 0xd96a2dda, 0x16da1992, 0x286d45d0, 0xfdd4b051,
198199       0x449a01fb, 0x9f2195ea, 0x25488a0d, 0xa37661b3, 0xc4151b0a,
198200       0xf9e5ee02, 0xb98c471e, 0xa8658817, 0xa4bca86e, 0x7a68fc0a,
198201       0xbbcadb87, 0x6b7366a9, 0x88b34649, 0x15661c2d, 0x32ee98d4,
198202       0xc901420c, 0xf5b3b4c6, 0x2f2752af, 0xa2352735, 0x510e4d9c,
198203       0x2f64ce73, 0xaca4aa80, 0x939a7f26, 0x401aa503, 0x9cd3e291,
198204       0xdc46afd2, 0x92a01423 },
198205     { 0x1c2f7dbd, 0xe9f24be1, 0xb7d527fa, 0xda8c900f, 0x8648f128,
198206       0x963e25bb, 0x48141941, 0x9ab713e2, 0x7a6756fb, 0xe87f7d01,
198207       0x058d90bd, 0x274dd85e, 0x82566abd, 0x823fee7a, 0x74240195,
198208       0x9f6230d7, 0xacb5e46e, 0x04579f2c, 0x16a4c87e, 0x2a226263,
198209       0xd99b0857, 0x9ca19a43, 0xe488789e, 0x86dc2ba3, 0x9406c3bd,
198210       0xf960b5b9, 0x8960957e, 0x6f2c428b, 0x161c515b, 0x90748706,
198211       0xaa88cb9b, 0x0fc8fe1e },
198212     { 0xfeb90f2d, 0x68ae1bed, 0xa48b1559, 0xf393bb3c, 0xf64e9635,
198213       0x2be62f9c, 0xf8be75c2, 0x354c2410, 0x5e6f7529, 0xbd7ea703,
198214       0x162cab31, 0xc264868e, 0xc860f3ff, 0xb1391e70, 0x1d89837e,
198215       0xdf367c75, 0x2bf32941, 0xe150b6b4, 0x78c1318f, 0x95e8f46e,
198216       0xa2c4b160, 0x2b3f1dab, 0x701afbf3, 0xc6ccf5ce, 0x5e8874c5,
198217       0x3ad27530, 0x5dc6dcbe, 0x39285e51, 0xd99892dd, 0x3c954d86,
198218       0xdfd3789f, 0x2d0ba862 },
198219     { 0xb472e1af, 0xeacd8ee8, 0xb76abbcc, 0xeb354eae, 0xd0d93fbd,
198220       0x9b520bf8, 0xfe6fc706, 0xfccd60d7, 0xa4ee2f39, 0xa9353dde,
198221       0x9a81e51e, 0x5eb0925e, 0xd1366777, 0xee334da1, 0xd5354d69,
198222       0xc1d28c9f, 0x92a5ed54, 0xb9771755, 0xb7f70d81, 0x5d3e367f,
198223       0xa933ae7a, 0x7be7eeca, 0xe23cfbb7, 0x264cf1f9, 0x89497681,
198224       0x0d129f4a, 0x09b6235b, 0x705375a4, 0x48a376da, 0xccf64c75,
198225       0x4d41dbfc, 0x963c8712 },
198226     { 0xde36a814, 0xbae290cb, 0x733b12b5, 0x9bdb0195, 0xf77fe0e1,
198227       0x0ebad867, 0x29720cea, 0x0a7d19fd, 0x9029ec72, 0x434d7651,
198228       0xbb51911e, 0x856aff17, 0xd80a7f60, 0xd0a25d9a, 0xf848c106,
198229       0xffca86af, 0x43ad749c, 0x53e8bdf9, 0xe3e696bb, 0xfb9e0284,
198230       0xeeee4215, 0x3eb6630a, 0x2ecf3c63, 0x9d8fbb9e, 0x4e00c0c0,
198231       0x71da4ffa, 0x5d57beac, 0xb296be59, 0xa8cec7ef, 0x1751fbad,
198232       0xff55d7bd, 0x2d03eb3c },
198233     { 0x04f2ec1d, 0xeb16925f, 0x0d147ee2, 0xa878f276, 0xaad9d9e0,
198234       0x442df604, 0x3f71035b, 0x891df44b, 0x8cb95d5b, 0xc28272b3,
198235       0x5ee8ed23, 0x6f14efb5, 0x13b0f3e3, 0xf3c4460f, 0x6bd7335e,
198236       0x889f9bd7, 0xf755ba6e, 0x889ee771, 0xed219b6c, 0x626984fe,
198237       0xec2ee411, 0x2d44c737, 0x63efcd37, 0xb94385a2, 0x6637826b,
198238       0xd909321b, 0x3ee6b7a7, 0xc24f8a79, 0xa7cf61b7, 0xa3ca8d24,
198239       0xc54bacd9, 0x842e40c1 },
198240     { 0xa661d843, 0x5a268ed6, 0x4f5b30cd, 0x02328cca, 0x1311e177,
198241       0x16e6fed1, 0xc6695967, 0x690decb4, 0x57b2e280, 0xbdac5bf6,
198242       0x1efe42d0, 0x827f82ca, 0xca5fca2f, 0xc554ec0a, 0xdde45506,
198243       0xac5276c1, 0xe3077513, 0xb7f4cb08, 0xcc8797cc, 0x8caf6d9a,
198244       0x0d9332d2, 0xd5964814, 0x285a409f, 0xcc6ae297, 0x6223d093,
198245       0x7773c2a5, 0x5128fc09, 0x2d5266ac, 0xbc31fe6c, 0xa596b7cb,
198246       0xcac91328, 0x0e63319a },
198247     { 0xf0360ac2, 0xb5cd2fad, 0x285e605a, 0x86b660de, 0xe25b9b14,
198248       0x82c6cf10, 0xaa9ac554, 0x9d5fa38d, 0x526c070e, 0x3dfcf1b8,
198249       0x3fccc52d, 0x0379a96b, 0x0bfcc7f5, 0xe3659c29, 0x69d3e6a1,
198250       0x5b1a3db5, 0x9b7b42d5, 0xb41528b5, 0x9c22a006, 0x934defa4,
198251       0x9b4ce3b6, 0x90f38018, 0xb3abaf32, 0xb073bc04, 0xff8389e2,
198252       0x27a5a222, 0xffa5a35b, 0x0b7a9d51, 0x28e1a7c2, 0x4939ecef,
198253       0x1872705a, 0x88839da2 },
198254     { 0x701ce29a, 0x56b66c30, 0x58981d50, 0x3acaf126, 0x105f9f21,
198255       0xd4dafc0c, 0x373e3d13, 0xfee571e6, 0xfa2ee3ca, 0xe7269c86,
198256       0xdd20385a, 0xf5cca64a, 0x3000e9ac, 0x217f2757, 0x0e7273ef,
198257       0xc934db47, 0x355b6776, 0x4294f4f7, 0x6fc05180, 0x1faa36b9,
198258       0xb052190b, 0x8f88b1db, 0xe9eaef52, 0x35791b90, 0xdb681b90,
198259       0xf37fb2eb, 0x4415c369, 0x39d0a51d, 0x1d2e21c9, 0xfc59cca7,
198260       0xa1f50c26, 0x64128cfe },
198261     { 0xe8f5b0b5, 0xf03678a2, 0xd340f059, 0x5c7e249c, 0x93ca7cec,
198262       0x41440441, 0xbc83af98, 0x075ca346, 0xfaa8bbb0, 0xf39f0033,
198263       0xf38230f7, 0x3d18f0ed, 0xd448f345, 0x78dff00c, 0xd51aa475,
198264       0x849228c0, 0x30c928d1, 0xdd4e2708, 0x8f12cfd3, 0xc66ba686,
198265       0x88b3a206, 0x091049db, 0x016dae01, 0xd865d059, 0xe253e37d,
198266       0x4599e905, 0x7ce9871b, 0x322cf0c2, 0x174a132e, 0x014f54da,
198267       0xbdabcbda, 0x93634a09 },
198268     { 0xa9a2e304, 0x62826b27, 0xc1a4c124, 0xc57e1866, 0x22381710,
198269       0x913ab832, 0xa9847cfe, 0x7e9b6b85, 0x2b5f46fd, 0x29655cf1,
198270       0x8038e66d, 0x7295572b, 0x6fa95eab, 0xe4cba601, 0xb9deda81,
198271       0xbbc11071, 0x3f1cf61e, 0x97f0009a, 0x373e0cfb, 0x5372777b,
198272       0xd139d63b, 0x302f909c, 0x4f87d78e, 0x1ed672da, 0xb4048763,
198273       0x362077a3, 0x9dcc22b2, 0xc408c32d, 0x26deeee7, 0x4b4c5bf2,
198274       0xbc06357e, 0x266cb467 },
198275     { 0xb56363e8, 0x6faa4154, 0x3c1aa4db, 0x4b4fd078, 0x2b9e6597,
198276       0x14358dde, 0xfa004b84, 0x5b34ae3e, 0xf19911a6, 0xcf44b2ec,
198277       0xa536bf78, 0x55caa833, 0x8870dc95, 0x606e1eb9, 0x09f3511d,
198278       0xe3c3287d, 0x9d5cf364, 0x68b2f4eb, 0x63ab8c9e, 0xc154e892,
198279       0xc36ab611, 0x1548828e, 0xa1b7d120, 0x0932bfcb, 0x5315b8d7,
198280       0x7ee7b5bc, 0xf7473ac1, 0x782fd0d1, 0x3c8f2af3, 0xbcb029a8,
198281       0x52454ee1, 0x4b1d5a1b },
198282     { 0x63d52c0c, 0x12fe5174, 0x188c099d, 0x3735525e, 0x360e3956,
198283       0x5c621563, 0xacfa5a43, 0x88b3f1ca, 0x797e8107, 0x90123a0a,
198284       0xb15e080a, 0xba31f6b5, 0xfca3dada, 0xd7de5e12, 0x0df511c8,
198285       0x3287361b, 0x65757d4e, 0x7cc800d4, 0x5207ec91, 0x10810f3d,
198286       0x30eea0e3, 0x0d4e56f1, 0x3ea5a2ec, 0xbbf7ee13, 0xbe6abbd0,
198287       0x6fc07762, 0x120bf619, 0xc831fdce, 0xb622d42a, 0xe07439fa,
198288       0x508e4b27, 0x8186b93f },
198289     { 0x09312867, 0xc619d154, 0xbfaf7db4, 0x7e042c05, 0x1f5f5dda,
198290       0xc1cf1668, 0xa4fc3d82, 0x50aa5057, 0xce68b8fe, 0xed30ed65,
198291       0xbeb4d644, 0xecb01c0b, 0x831c0497, 0x7b5dc444, 0x9b7d9b1c,
198292       0x351e6a00, 0xd9477c91, 0x4bb863b9, 0x05d4110a, 0xaba65891,
198293       0x43580b7a, 0x30086cf4, 0x90be357e, 0xb139c076, 0x27b5214e,
198294       0x12bfff1a, 0x22c3ab57, 0x79cfc6d7, 0xf34a9bfa, 0x4743de57,
198295       0xc9ee2b2a, 0x0bf97e97 },
198296     { 0xdda19e96, 0x96ec4ec8, 0x6c306e8b, 0x54ce18ea, 0x65f6918a,
198297       0x7e83612b, 0x0d9a0d99, 0x1ac6f68b, 0x62fdcc09, 0x98a697a4,
198298       0x95bc3e13, 0x65ce25f1, 0xb3939730, 0x1896ecda, 0x32f12806,
198299       0x9eb81a0f, 0x1d2dc7df, 0xd3d7416e, 0xad473599, 0xe22c7976,
198300       0x9f5ef439, 0x3de37a9a, 0x9e69d94e, 0x6b7ac0ab, 0x0a9d0bc8,
198301       0xe6bfa9e0, 0x5676f120, 0x576a870d, 0xfeaac23f, 0x3bd91bb4,
198302       0x3e40aabb, 0x8fe5482c },
198303     { 0xce9a4d1e, 0x85ae67c2, 0x4f1d2038, 0x4c3eb803, 0x25d06192,
198304       0x5c6c8f3a, 0x308fb41c, 0x803de0ad, 0xe71c294e, 0x9961f5bc,
198305       0xf02eb0da, 0xdc62078d, 0xb64ae8b6, 0xc87ef515, 0x50b4d18f,
198306       0x69679f1e, 0x52199f43, 0xc5c009a1, 0x0f640a5f, 0xa7d484be,
198307       0x23dab566, 0x4c918bb1, 0x64275d2c, 0xa67c114c, 0xcad2ded6,
198308       0x95a913b9, 0x6b4b5c8d, 0x189ed18b, 0xb42d3bf6, 0x4aeb6206,
198309       0xbbc8bc3f, 0x3928c669 },
198310     { 0xdacb4b64, 0xde4bea4a, 0xf26179a1, 0x03f62a44, 0x7a9112a4,
198311       0xf3aac94e, 0xd36f331e, 0x90448fbd, 0x407b85c4, 0x426042bc,
198312       0x2121b77b, 0x5ad8a596, 0x67cee984, 0x31674a4f, 0x4e3b2f0d,
198313       0x7fae8bbe, 0xa7c930eb, 0x681df6dd, 0xc259d0d4, 0xadeefa98,
198314       0xbea1c1fd, 0x1b14d9e6, 0x21d405d1, 0x3baadc8b, 0x73892754,
198315       0xf01dff93, 0xf071cde4, 0x81c35b3e, 0x9150d0d9, 0x1704d2e1,
198316       0x355134f6, 0x6ccc888f },
198317     { 0x7ad7504c, 0xf8d36f0e, 0xf7959ddd, 0xbca3265f, 0xfede67aa,
198318       0x0dcd1ede, 0xbaebf32f, 0x1276f4ce, 0x014edcfc, 0x6825a6e6,
198319       0x99ad8eb7, 0x0b8c1a82, 0x09b8ce1e, 0x312024a9, 0x9cbd351a,
198320       0xcb8fd98b, 0xfab1e8be, 0xa4841378, 0x3973cacf, 0x17ed0f5d,
198321       0x259d5254, 0xa17e1484, 0x74b91393, 0x53d5b843, 0x1aca3ce9,
198322       0x8f792b21, 0xc8c0f815, 0x035ff110, 0xad4ed7bd, 0x6afa6357,
198323       0xb26faef9, 0x2f151980 },
198324     { 0x29d2d439, 0x0c8631da, 0xbc039955, 0x121fbbc2, 0x6c05b75b,
198325       0x3e5a9792, 0xb6ce47ec, 0x6d6cf4c0, 0x9d88c658, 0xbaaa1767,
198326       0xf3355a17, 0x031db9e7, 0x0aef5a85, 0x8381e3d8, 0x15a31bdf,
198327       0xc71db290, 0x9498fd7d, 0x638f6b74, 0x13beeef6, 0x44edf3f9,
198328       0xf4ab67b3, 0xe6173271, 0xfd22df11, 0x3a202c70, 0x205c4e92,
198329       0xf7be0389, 0xa8eb9920, 0x1c219085, 0xbeb54aaa, 0x6c805ce8,
198330       0x0ac58d65, 0x354b05b7 },
198331     { 0x7a9170e9, 0x7171e236, 0x4cad50cd, 0x01eec42d, 0x3cddccfb,
198332       0xffbe824f, 0xa66cae1a, 0xa73e8ce3, 0x965c7d01, 0xb7138a7f,
198333       0x5c3d971e, 0x00058e3f, 0x2ff0a72b, 0x52591ac3, 0xbbbce76f,
198334       0xa32fb5bc, 0xa9f81a18, 0xf3241ab8, 0xeca68630, 0xf31d3332,
198335       0x4482f13b, 0x847af9fc, 0xa4681be2, 0x6196e217, 0xe55efcf9,
198336       0x9938f932, 0x70acc705, 0x3e7dacb8, 0xcf09fac2, 0xd41be893,
198337       0xae3523a1, 0x48dc55c4 },
198338     { 0xa5092193, 0x8e623826, 0x6898970c, 0xe46ec362, 0x25c9eb41,
198339       0x2f1356af, 0x83c7d245, 0x41780640, 0x97d00e38, 0x982def67,
198340       0xa512151c, 0x382eb6e7, 0x8af58869, 0x154e1077, 0x8a51cf02,
198341       0x18707075, 0x71313c58, 0xcdeba9f7, 0xba155904, 0x5d67b973,
198342       0x1d0d7b3a, 0x851c9f4b, 0x8b8af2cd, 0x19f29d71, 0x986b8d62,
198343       0xcb94ccff, 0xb93b9c33, 0x8725e24b, 0x66e38c68, 0x405ce4c5,
198344       0x0b6dc021, 0x5f6a8edd },
198345     { 0x8f9a8690, 0x83704ca5, 0x2f76a407, 0x3f369766, 0x69201028,
198346       0xfbc12d8c, 0xbce3a4cf, 0x4cd58f16, 0x04aab26d, 0x7804664a,
198347       0x4ea457a8, 0x005cfbba, 0xb8a59794, 0x537951b3, 0x4fe1f739,
198348       0x4ca2b9e4, 0xdf325797, 0xe4428acd, 0x0ea243db, 0x648da342,
198349       0xf43ce01e, 0xcce6562b, 0xf27db490, 0x840f0421, 0x8bfb7cf0,
198350       0x156ccb70, 0x5a8797d3, 0x9b33480d, 0x9eb814bb, 0x2e12e07a,
198351       0xca7f87ac, 0x1ca65072 },
198352     { 0x2b9d25a0, 0xfbb321cf, 0x40a746db, 0x66affdca, 0x59e368b5,
198353       0xc1c1530e, 0x7d80068f, 0x56ed1ea4, 0x5647dd68, 0x9b74d8fe,
198354       0x89b78da8, 0x1d96b507, 0x8bbe3391, 0x39b75243, 0x0d858c5f,
198355       0xef8d443e, 0x9646aa34, 0x4dd2db49, 0xe667543c, 0x7fad3bd1,
198356       0x68980985, 0xd0d710c0, 0x49facaba, 0x9f7aff32, 0x14f9a192,
198357       0x055dec1c, 0x1fb307a1, 0xaca66399, 0x35ffff64, 0xac44fd91,
198358       0xcbad3cee, 0x462cafb6 },
198359     { 0xde3237dd, 0x1660a647, 0x82b87404, 0x95f735cc, 0xddfa55f8,
198360       0xf7879f59, 0x726b914a, 0x15ef043e, 0x1c93e298, 0x1875393d,
198361       0x6ef18331, 0xa1a2be74, 0x25a9a12b, 0x4e7e8dfc, 0xa9c3917f,
198362       0xdfefc97d, 0x0a2ebe41, 0xbc875d03, 0xa732d1cc, 0x0f75d235,
198363       0xd9baa6d3, 0x06fee7fe, 0x65f48576, 0xaa784fab, 0x513f83c0,
198364       0x23155e22, 0x3e8f9d13, 0xd2fb7718, 0xb546eafd, 0x2a291503,
198365       0x6cd93608, 0x1293c98c },
198366     { 0x49d53b77, 0x72781251, 0x96eafac7, 0xa6ab403d, 0x4a36b711,
198367       0xb7d7c7db, 0x87e771c1, 0x8238c708, 0x33b37522, 0x495f6abf,
198368       0x8c87530d, 0xb0b0289c, 0xe77b111a, 0xca83cb86, 0xa1bd189e,
198369       0xbe1c0fb8, 0x1ae9d7c7, 0x58cfb2fb, 0x4940c3e8, 0xd05c23c5,
198370       0x74ad9107, 0x16e79e41, 0x064e7142, 0xa0a47f05, 0xfdfd614f,
198371       0xc6929cd4, 0x3946988b, 0xedb2584c, 0xe46f8fb1, 0x73e4b5f3,
198372       0x68ea94ba, 0x53b79aa1 },
198373     { 0x44bbb6a1, 0x216fafce, 0x67821728, 0xd3a5bba0, 0xa9dd939a,
198374       0xef1e4b30, 0xf19efafe, 0x022eaf3d, 0x7b4ec014, 0xfed5abce,
198375       0x512c6738, 0x64968ee6, 0x29fe89a2, 0x23119869, 0x47397c05,
198376       0x0d539d8d, 0x234596c4, 0x6400bc54, 0x5346611d, 0xb9287f58,
198377       0xc9d5da0f, 0x04099903, 0xc83af2a8, 0xe5ef4997, 0x328151e1,
198378       0xc89dc01b, 0x58401104, 0x150fb4a9, 0xf3872c9d, 0x40a6f7d5,
198379       0x56c2e833, 0x8290d6d1 },
198380     { 0xd8546946, 0xf84637c6, 0x69ec57fa, 0xda134a39, 0xd789007e,
198381       0xd42359a4, 0x0dc7b809, 0xb42557fe, 0x2d6784a9, 0xe62ae52d,
198382       0x0bcadb5f, 0xa2714ca6, 0x33aafca5, 0xcc208de6, 0xed967811,
198383       0x2380ed5c, 0xdb321660, 0x6e6b55e9, 0xa675235a, 0x1bead02c,
198384       0xb33fa0e1, 0x51cc6ef9, 0xf06a2a08, 0xfd223e26, 0xec47b3cf,
198385       0x00f332e1, 0xa0aa984e, 0x459f297b, 0xee952e14, 0x6fa1d969,
198386       0x304fabb0, 0x506ef1ab },
198387     { 0x35bff163, 0x11b4eb27, 0xea9fa984, 0x7130b96f, 0x9deb27ce,
198388       0x66aceb3f, 0x9dd1c3d5, 0xa2daf1a5, 0xa73075aa, 0xf5090a7e,
198389       0xe3071b58, 0x36a6af39, 0xdf73ad9c, 0xa28d633d, 0xbdc89a16,
198390       0xdd354cac, 0xd4dcbc3c, 0xdfea3423, 0x379d92d1, 0x6eec74d2,
198391       0x8eed6765, 0xe14a456f, 0xfa8feb1f, 0xfabe7743, 0xb98fcbc7,
198392       0x1404ccf8, 0xf71a706e, 0x6ccd2fbf, 0x4d85c678, 0xdaaf3fdb,
198393       0x15200344, 0x415b7dbf },
198394     { 0x7d8377a7, 0x97010586, 0xcb803272, 0x068a3d68, 0xf03a4c32,
198395       0xfd67d289, 0x93c8f290, 0x4bc7095d, 0xe9e5a2b8, 0x712fa13c,
198396       0x0feb9f3b, 0xfc6ac6c6, 0x6e0e54c2, 0x0cda36d9, 0x86320a01,
198397       0x45499751, 0x97f00f11, 0xf9318c91, 0xe6936508, 0x01dc4c3f,
198398       0x85f068aa, 0x769a2ef9, 0xa2b5511c, 0x3522cef0, 0xb4122e05,
198399       0x006965ed, 0xc175d43f, 0xfce0fafc, 0xec831d59, 0x525dc9bd,
198400       0xaf58879d, 0x1ec314f1 },
198401     { 0x2c8310c2, 0x0663feef, 0x457e3f74, 0xaa7e14da, 0xe5346887,
198402       0x392b10fc, 0x637ec2c5, 0xcde4a38f, 0xb542f8df, 0x50773320,
198403       0xf7de1711, 0x341302f9, 0xae4b9bc6, 0x018b1c63, 0xdd2f9e6f,
198404       0xf001c46e, 0x26eccfa0, 0xd3bb0a97, 0x7746e0c7, 0xa931b99d,
198405       0xf5875aec, 0xe0c8b6f7, 0x96939c82, 0xbb32f17c, 0x3de5a664,
198406       0x765135d2, 0x52abfa6b, 0x71936cb4, 0x2dc105de, 0xad5cc08f,
198407       0x7fff5788, 0x17e91d12 },
198408     { 0xb7e051ca, 0xbe92ced3, 0x19c776d4, 0xc644d4fd, 0x0086784b,
198409       0xc8ab4b52, 0xce9d6b31, 0x3ea66227, 0xd289e9c7, 0x395249a3,
198410       0xd12a19ee, 0x54509e65, 0x8c365aec, 0xa7bd4692, 0x77963e0e,
198411       0x354997e4, 0xb599732d, 0x0d765957, 0x91d4a3b6, 0x99584aeb,
198412       0x1deb3e28, 0x6e653ea4, 0x572571df, 0xca7c98ed, 0xb18ae1f9,
198413       0xf301a38f, 0x63f7b97e, 0x1629f7c2, 0xafc4a0d5, 0xdf242282,
198414       0x3ddd0c01, 0x118f3b4b },
198415     { 0x7ad4762b, 0x74a0a0a8, 0x8c58d175, 0x1aef84da, 0x4cf76d86,
198416       0x16ff4960, 0x7e60d98b, 0xc0be8786, 0x3ecc1dba, 0x83637ffb,
198417       0x5dd6147a, 0xc244a609, 0x5b0846e5, 0xa3e17834, 0xe77a4c05,
198418       0x735eb686, 0xdf758695, 0x5bc18b4f, 0x1bdfe52f, 0x15618d0b,
198419       0x00715ba1, 0x878ecc0d, 0xc2dd617f, 0x1dbdbd1a, 0x21b61710,
198420       0x21d2b631, 0x44f593c2, 0x22ce8a79, 0x44f17024, 0x3b9b536a,
198421       0x8d03e727, 0x01d0a67c },
198422     { 0x1e46533c, 0x7b964236, 0xfb88c2ae, 0xe9477990, 0xa42c4a18,
198423       0x019b5d16, 0xd83c7a45, 0x7135e81d, 0x4cb663e3, 0x74a69bdd,
198424       0xe76c0d63, 0x7b67ecdb, 0x11e68da6, 0x03d54521, 0xd2e8650a,
198425       0x596cceb5, 0x2af03b37, 0xcd572dfd, 0xfabd5952, 0x52364ba1,
198426       0xb4ed8569, 0x7f47d456, 0xc950d5d4, 0x5ad8b572, 0x486e2f84,
198427       0xcadd2dfa, 0xc56bb044, 0xdd527b43, 0x997c08e6, 0xc9adba24,
198428       0x7da6320f, 0x1b625b06 },
198429     { 0x4fd8446d, 0x44dfaa7b, 0xaf6febeb, 0xc01b2f01, 0xfe8838b5,
198430       0xbf444388, 0xbba9758b, 0xf33c434f, 0x87156bc9, 0x2b971cba,
198431       0x1f49098b, 0x6b245e5c, 0x2b41c5dd, 0x87dcb534, 0x34d852d7,
198432       0xdb1f80c6, 0x2433da34, 0x6d6e3258, 0x3f7df0c2, 0xf6682065,
198433       0x360cb365, 0xc4ca567c, 0x9826656a, 0x321faac2, 0xbf069768,
198434       0x13f5ca6f, 0xa7076639, 0x15397921, 0x8400736e, 0xbdf14328,
198435       0x19fc948d, 0x333eca96 },
198436     { 0xac775d81, 0x23337948, 0xd41dbbca, 0x38c2518f, 0xbcfce948,
198437       0x623c7a4f, 0x54703fe7, 0xaad36236, 0x13fb3b5b, 0x2b3a13a4,
198438       0x7f5c01f0, 0x5db3565a, 0x52359661, 0xd72408dc, 0x1d616e91,
198439       0x5a17f8e5, 0xcb25b999, 0x90c16eeb, 0x3393743e, 0xf35e8cf1,
198440       0xe54b64a7, 0x987da74a, 0x65cd449d, 0x557b322a, 0x37e7b15d,
198441       0x765082a5, 0xf2cd134f, 0x4d25c742, 0x4ccf0746, 0xae9d9c07,
198442       0x8728d135, 0x72fc2110 },
198443     { 0xf96004c8, 0xa906b203, 0x458055ff, 0xd83f95cf, 0x55f35909,
198444       0xd77d5867, 0xe550c8ee, 0x4a9ea6fb, 0x55a06081, 0x91c8cca9,
198445       0xbce82062, 0x4a1fee78, 0x9a3df85e, 0xeb9ade06, 0x7d3de666,
198446       0xfbbdcf0c, 0x5d336d51, 0x228a391b, 0x5c2ffc3c, 0x760f8d28,
198447       0x2f7b165b, 0x1ee48de3, 0x56177040, 0x03803d84, 0x9deff9a0,
198448       0xe573f648, 0xa17e35a4, 0xe1a2738e, 0x8840a6c6, 0x238ef17c,
198449       0xb11ed92d, 0x480946f8 },
198450     { 0xfd71f119, 0x84c747a8, 0x53eb3695, 0x19e65c5e, 0x6298587a,
198451       0x0e2f6786, 0xab18d6f4, 0x48a48899, 0xc630b8c0, 0xa1a99024,
198452       0x2caaf892, 0x84975096, 0xe20fd624, 0xc8869aba, 0x6c2b7dd4,
198453       0x3b72b04d, 0x0992f7d0, 0xe2775eb6, 0x7d06e684, 0x0089c06e,
198454       0xe4bbd007, 0xcb3b4361, 0x4ba846e4, 0xa1ae666b, 0x46464d9e,
198455       0xc01c2eb2, 0xc1f8539f, 0xf86f2be6, 0xcf68afc7, 0x16e8e8ae,
198456       0xc7386902, 0x8dab61fd },
198457     { 0xd54d1d45, 0x42a5c903, 0xff4f9ba2, 0xacd4297e, 0x34d478b4,
198458       0x2d88b520, 0x08c4621a, 0x35b2ba2b, 0x34865402, 0xd3d239bb,
198459       0x911f32e6, 0x1de76aed, 0x3f06fdc2, 0x877f8bcf, 0x9ec51502,
198460       0x802714c1, 0xa590700d, 0xa10444eb, 0x31dcc957, 0x8694229f,
198461       0xb8169fed, 0x5ece77ab, 0x2caf080e, 0x55be8a15, 0xcbd7cef1,
198462       0x3eb21b14, 0x67b97ee1, 0x9def7ad1, 0x118f690c, 0xe03ca879,
198463       0xf99b29e7, 0x6f77e62d },
198464     { 0xe40bbf59, 0xa271bded, 0x6401aad6, 0x177ba453, 0x73541cd1,
198465       0x1755e035, 0x4b71b02f, 0x3465b466, 0xa813359f, 0x22eb7113,
198466       0x6f38eac7, 0x9792a8fd, 0xff3bf3b5, 0x11aa012f, 0xf85c3fbf,
198467       0x99aafabf, 0x06c0cc42, 0x91e0a2ef, 0x773b7b3a, 0x314d5d57,
198468       0xd669840a, 0xae5e2e76, 0x2e5a8be6, 0x86136073, 0xc1cf5580,
198469       0xee6d7578, 0x68bed102, 0x2344e00f, 0x8184f0eb, 0x799d7886,
198470       0xc3d2cf80, 0x63819c91 },
198471     { 0x7884b073, 0xca5392e1, 0xeb1267ea, 0x9ec3a1fc, 0x907038a7,
198472       0x3d07f5f0, 0xe4c47b70, 0xcb2ac07c, 0x1bf96b91, 0xf96664ee,
198473       0x2aea4fbf, 0xebf57589, 0xfade6500, 0x5aabf391, 0x171d1204,
198474       0xc5b3376f, 0xa0d3d81a, 0x1ff60c51, 0x976a844b, 0x10b2cfe7,
198475       0xbda6125a, 0xe131cc9a, 0x4ebd453e, 0xe0fc16d3, 0x504b6bc1,
198476       0xc0d0319a, 0x0a2f8cab, 0xe43a0be7, 0x55e49b47, 0xc80afeec,
198477       0x8265d7ee, 0x67d48d12 },
198478     { 0xea2d56d6, 0x068d59a7, 0x27480a63, 0xd71abd0e, 0xae7366cd,
198479       0x6bd11db0, 0x07204ebc, 0xfbb639ca, 0xf77e6293, 0x89a242e7,
198480       0x75ba8c3d, 0xdee7ca2b, 0x64a2f9a8, 0x472ddc3d, 0x7561a010,
198481       0x84229df4, 0xc5b649d4, 0x95f62c85, 0x4dc927cd, 0xfdd56b1b,
198482       0x5ee60596, 0xfe8bb120, 0xabf29401, 0x3efcaa50, 0x10d1c184,
198483       0xd4900d0f, 0x28b01df5, 0x2cf113a9, 0x1f0e43f5, 0xa3d7ebc3,
198484       0xe8384dc7, 0x27950e38 },
198485     { 0xe1d0fa79, 0xeab21ff0, 0x048b5de9, 0x4b9fd033, 0x2fe374cb,
198486       0x4c934689, 0x4eb21f6b, 0xbb4827fa, 0xa925e7e7, 0x46716f79,
198487       0x7dd4c531, 0x1442bf36, 0xd2e96ddf, 0x2073954c, 0x8502aa89,
198488       0x4e0141ae, 0x8eef6cc9, 0x8ee00e1a, 0x5880cdaf, 0x55ce8491,
198489       0x69628046, 0xff3aba5c, 0x5d15dfbf, 0x335cc4f8, 0x9f684f25,
198490       0xa7f0440c, 0xbb1e5bd8, 0xae80453f, 0xff2225ab, 0xa1c99813,
198491       0x79b25d71, 0x54ff7884 },
198492     { 0xde40b068, 0x27c6ee30, 0xe6f3a51e, 0x9226465b, 0xfa3b21f6,
198493       0xe24a4604, 0xc0418115, 0x50a5a5ad, 0x8df90d2b, 0xe3285441,
198494       0xdcb0c00f, 0xbb74e58f, 0x4a2c08e3, 0xc68f1b3b, 0x0ccd9ec9,
198495       0x339df081, 0xb786ea9f, 0x915362dc, 0xc955aead, 0x28945e31,
198496       0x8b6a6c6b, 0xd6a2c01d, 0x3678a427, 0x069e82dc, 0x28c9302c,
198497       0x17875500, 0x9fa101e6, 0x8acda965, 0xee30b286, 0x4e4e4573,
198498       0x3f1830fe, 0x8adbad85 },
198499     { 0x0969d524, 0x060ae11f, 0xf39bcc79, 0xf42fdaf7, 0x7cc1fcc2,
198500       0x3cec6766, 0xe2336d4f, 0x456b9cf2, 0x8e1c0f7f, 0x6aa1f5de,
198501       0x0984fb0e, 0xcdbc2ad2, 0x1b464b28, 0x4090cfa6, 0x1243f3ef,
198502       0x40d86f30, 0xcd5e87e7, 0x95b16ccc, 0x3026cd41, 0x403f168c,
198503       0x816c0730, 0xdbe386cb, 0x58407a1d, 0x14eb86f3, 0x1717e1af,
198504       0xf588b4f8, 0x66cbc96c, 0xb75c41a6, 0x027e71c1, 0xf342c1aa,
198505       0xc0945e5f, 0x73930036 },
198506     { 0x22cdaf42, 0x954f757d, 0xf4181aab, 0x788b591d, 0xf5514f25,
198507       0x8b986819, 0xf18fd5bc, 0x69642e08, 0x022ceb91, 0x92b305d1,
198508       0x6a4f6985, 0x1715903e, 0x61179cae, 0x4bd7d69d, 0xd29c01aa,
198509       0xdacdfd5d, 0xd91108cc, 0x705ddd5a, 0x64ac8f15, 0x434ac7b1,
198510       0xb524632f, 0x61a514e1, 0x731fc447, 0x45b9e61b, 0xe0961b31,
198511       0xcf561348, 0x73eaf223, 0x9c28a967, 0xaa7c99d3, 0x5bd10182,
198512       0xe42965e2, 0x8bc6ec4a },
198513     { 0xe7f2a32b, 0xd096e5c0, 0x09388a30, 0xff54800c, 0x401e360c,
198514       0x06fe437c, 0xbb6054a6, 0x6655fc9c, 0x8457aa6e, 0x510e1860,
198515       0x2b29b2b7, 0xa0acfca2, 0x51b7da61, 0x732483e3, 0x6be6c8ca,
198516       0xe31471ee, 0x8b65c9a1, 0xe565431c, 0x48d65cbb, 0xfc9ac3b9,
198517       0xae9b2aa8, 0xd308fc21, 0xaa60aa6a, 0xd6a7df0d, 0x982fc0d4,
198518       0x2844d96a, 0x5847a4d7, 0xab012c2c, 0xdceb8955, 0x2b3c8f71,
198519       0xbe9c7e15, 0x8e85437d },
198520 };
198521 
198522 /* Perform the modular exponentiation in Fp* for SAKKE.
198523  *
198524  * Base is fixed to be the g parameter - a precomputed table is used.
198525  *
198526  * Striping: 128 points at a distance of 8 combined.
198527  * Total of 256 points in table.
198528  * Square and multiply performed in Fp*.
198529  *
198530  * base  [in]   Base. MP integer.
198531  * exp   [in]   Exponent. MP integer.
198532  * res   [out]  Result. MP integer.
198533  * returns 0 on success, MP_READ_E if there are too many bytes in an array
198534  * and MEMORY_E if memory allocation fails.
198535  */
sp_ModExp_Fp_star_1024(const mp_int * base,mp_int * exp,mp_int * res)198536 int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res)
198537 {
198538 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
198539     !defined(WOLFSSL_SP_NO_MALLOC)
198540     sp_digit* td;
198541     sp_digit* t;
198542     sp_digit* tx;
198543     sp_digit* ty;
198544 #else
198545     sp_digit t[4 * 2 * 32];
198546     sp_digit tx[2 * 32];
198547     sp_digit ty[2 * 32];
198548 #endif
198549     sp_digit* r = NULL;
198550     unsigned char e[128];
198551     int err = MP_OKAY;
198552     int i;
198553     int y;
198554 
198555     (void)base;
198556 
198557 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
198558     !defined(WOLFSSL_SP_NO_MALLOC)
198559     td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 6 * 32 * 2, NULL,
198560                             DYNAMIC_TYPE_TMP_BUFFER);
198561     if (td == NULL) {
198562         err = MEMORY_E;
198563     }
198564 #endif
198565 
198566     if (err == MP_OKAY) {
198567 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
198568     !defined(WOLFSSL_SP_NO_MALLOC)
198569         t  = td;
198570         tx = td + 4 * 32 * 2;
198571         ty = td + 5 * 32 * 2;
198572 #endif
198573         r = ty;
198574 
198575         (void)mp_to_unsigned_bin_len(exp, e, 128);
198576 
198577         XMEMCPY(tx, p1024_norm_mod, sizeof(sp_digit) * 32);
198578         y  =  e[112] >> 7;
198579         y |= (e[96] >> 7) << 1;
198580         y |= (e[80] >> 7) << 2;
198581         y |= (e[64] >> 7) << 3;
198582         y |= (e[48] >> 7) << 4;
198583         y |= (e[32] >> 7) << 5;
198584         y |= (e[16] >> 7) << 6;
198585         y |= (e[0] >> 7) << 7;
198586         XMEMCPY(ty, sp_1024_g_table[y], sizeof(sp_digit) * 32);
198587         for (i = 126; i >= 0; i--) {
198588             y  =  (e[127 - (i / 8)] >> (i & 0x7)) & 1;
198589             y |= ((e[111 - (i / 8)] >> (i & 0x7)) & 1) << 1;
198590             y |= ((e[95 - (i / 8)] >> (i & 0x7)) & 1) << 2;
198591             y |= ((e[79 - (i / 8)] >> (i & 0x7)) & 1) << 3;
198592             y |= ((e[63 - (i / 8)] >> (i & 0x7)) & 1) << 4;
198593             y |= ((e[47 - (i / 8)] >> (i & 0x7)) & 1) << 5;
198594             y |= ((e[31 - (i / 8)] >> (i & 0x7)) & 1) << 6;
198595             y |= ((e[15 - (i / 8)] >> (i & 0x7)) & 1) << 7;
198596 
198597             sp_1024_proj_sqr_32(tx, ty, t);
198598             sp_1024_proj_mul_qx1_32(tx, ty, sp_1024_g_table[y], t);
198599         }
198600     }
198601 
198602     if (err == MP_OKAY) {
198603         sp_1024_mont_inv_32(tx, tx, t);
198604         sp_1024_mont_mul_32(r, tx, ty, p1024_mod, p1024_mp_mod);
198605         XMEMSET(r + 32, 0, sizeof(sp_digit) * 32);
198606         sp_1024_mont_reduce_32(r, p1024_mod, p1024_mp_mod);
198607 
198608         err = sp_1024_to_mp(r, res);
198609     }
198610 
198611 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
198612     !defined(WOLFSSL_SP_NO_MALLOC)
198613     if (td != NULL) {
198614         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
198615     }
198616 #endif
198617     return err;
198618 }
198619 
198620 #endif /* WOLFSSL_SP_SMALL */
198621 /* Multiply p* by q* in projective co-ordinates.
198622  *
198623  *   p.x' = (p.x * q.x) - (p.y * q.y)
198624  *   p.y' = (p.x * q.y) + (p.y * q.x)
198625  * But applying Karatsuba:
198626  *   v0 = p.x * q.x
198627  *   v1 = p.y * q.y
198628  *   p.x' = v0 - v1
198629  *   p.y' = (px + py) * (qx + qy) - v0 - v1
198630  *
198631  * px  [in,out]  A single precision integer - X ordinate of number to multiply.
198632  * py  [in,out]  A single precision integer - Y ordinate of number to multiply.
198633  * qx  [in]      A single precision integer - X ordinate of number of
198634  *               multiplier.
198635  * qy  [in]      A single precision integer - Y ordinate of number of
198636  *               multiplier.
198637  * t   [in]      Two single precision integers - temps.
198638  */
sp_1024_proj_mul_32(sp_digit * px,sp_digit * py,const sp_digit * qx,const sp_digit * qy,sp_digit * t)198639 static void sp_1024_proj_mul_32(sp_digit* px, sp_digit* py,
198640         const sp_digit* qx, const sp_digit* qy, sp_digit* t)
198641 {
198642     sp_digit* t1 = t;
198643     sp_digit* t2 = t + 2 * 32;
198644 
198645     /* t1 = px + py */
198646     sp_1024_mont_add_32(t1, px, py, p1024_mod);
198647     /* t2 = qx + qy */
198648     sp_1024_mont_add_32(t2, qx, qy, p1024_mod);
198649     /* t2 = (px + py) * (qx + qy) */
198650     sp_1024_mont_mul_32(t2, t1, t2, p1024_mod, p1024_mp_mod);
198651     /* t1 = py * qy */
198652     sp_1024_mont_mul_32(t1, py, qy, p1024_mod, p1024_mp_mod);
198653     /* t2 = (px + py) * (qx + qy) - (py * qy) */
198654     sp_1024_mont_sub_32(t2, t2, t1, p1024_mod);
198655     /* px = px * qx */
198656     sp_1024_mont_mul_32(px, px, qx, p1024_mod, p1024_mp_mod);
198657     /* py = (px + py) * (qx + qy) - (py * qy) - (px * qx) */
198658     sp_1024_mont_sub_32(py, t2, px, p1024_mod);
198659     /* px = (px * qx) - (py * qy)*/
198660     sp_1024_mont_sub_32(px, px, t1, p1024_mod);
198661 }
198662 
198663 #ifndef WOLFSSL_SP_SMALL
198664 /*
198665  * Convert point from projective to affine but keep in Montgomery form.
198666  *
198667  * p  [in,out]  Point to convert.
198668  * t  [in]      Temporary numbers: 2.
198669  */
sp_1024_mont_map_32(sp_point_1024 * p,sp_digit * t)198670 static void sp_1024_mont_map_32(sp_point_1024* p, sp_digit* t)
198671 {
198672     sp_digit* t1 = t;
198673     sp_digit* t2 = t + 2 * 32;
198674 
198675     sp_1024_mont_inv_32(t1, p->z, t2);
198676     sp_1024_mont_sqr_32(t2, t1, p1024_mod, p1024_mp_mod);
198677     sp_1024_mont_mul_32(t1, t2, t1, p1024_mod, p1024_mp_mod);
198678     sp_1024_mont_mul_32(p->x, p->x, t2, p1024_mod, p1024_mp_mod);
198679     sp_1024_mont_mul_32(p->y, p->y, t1, p1024_mod, p1024_mp_mod);
198680     XMEMCPY(p->z, p1024_norm_mod, sizeof(sp_digit) * 32);
198681 }
198682 
198683 #endif /* WOLFSSL_SP_SMALL */
198684 /*
198685  * Calculate gradient of line through P, P and [-2]P, accumulate line and
198686  * double P.
198687  *
198688  * Calculations:
198689  *   l = 3 * (p.x^2 - p.z^4) = 3 * (p.x - p.z^2) * (p.x + p.z^2)
198690  *   r.x = l * (p.x + q.x * p.z^2) - 2 * p.y^2
198691  *   r.y = 2 * p.y * p.z^3 * q.y (= p'.z * p.z^2 * q.y)
198692  *   v* = v*^2 * r*
198693  *   p'.x = l^2 - 8 * p.y^2 * p.x
198694  *   p'.y = (4 * p.y^2 * p.x - p'.x) * l - 8 * p.y^4
198695  *   p'.z = 2 * p.y * p.z
198696  *
198697  * @param  [in,out]  vx  X-ordinate of projective value in F*.
198698  * @param  [in,out]  vy  Y-ordinate of projective value in F*.
198699  * @param  [in,out]  p   ECC point - point on E(F_p^2) to double.
198700  * @param  [in]      q   ECC point - second point on E(F_P^2).
198701  * @param  [in]      t   SP temporaries (6 used).
198702  */
sp_1024_accumulate_line_dbl_32(sp_digit * vx,sp_digit * vy,sp_point_1024 * p,const sp_point_1024 * q,sp_digit * t)198703 static void sp_1024_accumulate_line_dbl_32(sp_digit* vx, sp_digit* vy,
198704         sp_point_1024* p, const sp_point_1024* q, sp_digit* t)
198705 {
198706     sp_digit* t1  = t +  0 * 32;
198707     sp_digit* pz2 = t +  2 * 32;
198708     sp_digit* rx  = t +  4 * 32;
198709     sp_digit* ry  = t +  6 * 32;
198710     sp_digit* l   = t +  8 * 32;
198711     sp_digit* ty  = t + 10 * 32;
198712 
198713     /* v = v^2 */
198714     sp_1024_proj_sqr_32(vx, vy, t);
198715     /* pz2 = p.z^2 */
198716     sp_1024_mont_sqr_32(pz2, p->z, p1024_mod, p1024_mp_mod);
198717     /* t1 = p.x + p.z^2 */
198718     sp_1024_mont_add_32(ty, p->x, pz2, p1024_mod);
198719     /* l = p.x - p.z^2 */
198720     sp_1024_mont_sub_32(l, p->x, pz2, p1024_mod);
198721     /* t1 = (p.x + p.z^2) * (p.x - p.z^2) = p.x^2 - p.z^4 */
198722     sp_1024_mont_mul_32(t1, l, ty, p1024_mod, p1024_mp_mod);
198723     /* l = 3 * (p.x^2 - p.z^4) */
198724     sp_1024_mont_tpl_32(l, t1, p1024_mod);
198725     /* t1 = q.x * p.z^2 */
198726     sp_1024_mont_mul_32(t1, q->x, pz2, p1024_mod, p1024_mp_mod);
198727     /* t1 = p.x + q.x * p.z^2 */
198728     sp_1024_mont_add_32(t1, p->x, t1, p1024_mod);
198729     /* r.x = l * (p.x + q.x * p.z^2) */
198730     sp_1024_mont_mul_32(rx, l, t1, p1024_mod, p1024_mp_mod);
198731     /* r.y = 2 * p.y */
198732     sp_1024_mont_dbl_32(ry, p->y, p1024_mod);
198733     /* ty = 4 * p.y ^ 2 */
198734     sp_1024_mont_sqr_32(ty, ry, p1024_mod, p1024_mp_mod);
198735     /* t1 = 2 * p.y ^ 2 */
198736     sp_1024_div2_32(t1, ty, p1024_mod);
198737     /* r.x -= 2 * (p.y ^ 2) */
198738     sp_1024_mont_sub_32(rx, rx, t1, p1024_mod);
198739     /* p'.z = p.y * 2 * p.z */
198740     sp_1024_mont_mul_32(p->z, p->z, ry, p1024_mod, p1024_mp_mod);
198741     /* r.y = p'.z * p.z^2 */
198742     sp_1024_mont_mul_32(t1, p->z, pz2, p1024_mod, p1024_mp_mod);
198743     /* r.y = p'.z * p.z^2 * q.y */
198744     sp_1024_mont_mul_32(ry, t1, q->y, p1024_mod, p1024_mp_mod);
198745     /* v = v^2 * r */
198746     sp_1024_proj_mul_32(vx, vy, rx, ry, t);
198747 
198748     /* Double point using previously calculated values
198749      *   l = 3 * (p.x - p.z^2).(p.x + p.z^2)
198750      *   ty = 4 * p.y^2
198751      *   p'.z = 2 * p.y * p.z
198752      */
198753     /* t1 = (4 * p.y^2) ^ 2 = 16 * p.y^4 */
198754     sp_1024_mont_sqr_32(t1, ty, p1024_mod, p1024_mp_mod);
198755     /* t1 = 16 * p.y^4 / 2 = 8 * p.y^4 */
198756     sp_1024_div2_32(t1, t1, p1024_mod);
198757     /* p'.y = 4 * p.y^2 * p.x */
198758     sp_1024_mont_mul_32(p->y, ty, p->x, p1024_mod, p1024_mp_mod);
198759     /* p'.x = l^2 */
198760     sp_1024_mont_sqr_32(p->x, l, p1024_mod, p1024_mp_mod);
198761     /* p'.x = l^2 - 4 * p.y^2 * p.x */
198762     sp_1024_mont_sub_32(p->x, p->x, p->y, p1024_mod);
198763     /* p'.x = l^2 - 8 * p.y^2 * p.x */
198764     sp_1024_mont_sub_32(p->x, p->x, p->y, p1024_mod);
198765     /* p'.y = 4 * p.y^2 * p.x - p.x' */
198766     sp_1024_mont_sub_32(ty, p->y, p->x, p1024_mod);
198767     /* p'.y = (4 * p.y^2 * p.x - p'.x) * l */
198768     sp_1024_mont_mul_32(p->y, ty, l, p1024_mod, p1024_mp_mod);
198769     /* p'.y = (4 * p.y^2 * p.x - p'.x) * l - 8 * p.y^4 */
198770     sp_1024_mont_sub_32(p->y, p->y, t1, p1024_mod);
198771 }
198772 
198773 #ifdef WOLFSSL_SP_SMALL
198774 /*
198775  * Calculate gradient of line through C, P and -C-P, accumulate line and
198776  * add P to C.
198777  *
198778  * Calculations:
198779  *   r.x = (q.x + p.x) * c.y - (q.x * c.z^2 + c.x) * p.y * c.z
198780  *   r.y = (c.x - p.x * c.z^2) * q.y * c.z
198781  *   v* = v* * r*
198782  *   r = p.y * c.z^3 - c.y
198783  *   c'.x = r^2 + h^3 - 2 * c.x * h^2
198784  *   c'.y = r * (c'.x - c.x * h^2) - c.y * h^3
198785  *   c'.z = (c.x - p.x * c.z^2) * c.z
198786  *
198787  * @param  [in,out]  vx     X-ordinate of projective value in F*.
198788  * @param  [in,out]  vy     Y-ordinate of projective value in F*.
198789  * @param  [in,out]  c      ECC point - current point on E(F_p^2) to be added
198790  *                          to.
198791  * @param  [in]      p      ECC point - point on E(F_p^2) to add.
198792  * @param  [in]      q      ECC point - second point on E(F_P^2).
198793  * @param  [in]      qx_px  SP that is a constant value across adds.
198794  * @param  [in]      t      SP temporaries (6 used).
198795  */
sp_1024_accumulate_line_add_one_32(sp_digit * vx,sp_digit * vy,sp_point_1024 * c,sp_point_1024 * p,sp_point_1024 * q,sp_digit * qx_px,sp_digit * t)198796 static void sp_1024_accumulate_line_add_one_32(sp_digit* vx, sp_digit* vy,
198797         sp_point_1024* c, sp_point_1024* p, sp_point_1024* q, sp_digit* qx_px,
198798         sp_digit* t)
198799 {
198800     sp_digit* t1  = t;
198801     sp_digit* t2  = t +  2 * 32;
198802     sp_digit* rx  = t +  4 * 32;
198803     sp_digit* ry  = t +  6 * 32;
198804     sp_digit* h   = t +  8 * 32;
198805     sp_digit* r   = t + 10 * 32;
198806 
198807     /* r.x = (q.x + p.x) * c.y */
198808     sp_1024_mont_mul_32(rx, qx_px, c->y, p1024_mod, p1024_mp_mod);
198809     /* t2 = c.z^2 */
198810     sp_1024_mont_sqr_32(t2, c->z, p1024_mod, p1024_mp_mod);
198811     /* t1 = q.x * c.z^2 */
198812     sp_1024_mont_mul_32(t1, q->x, t2, p1024_mod, p1024_mp_mod);
198813     /* t1 = q.x * c.z^2 + c.x */
198814     sp_1024_mont_add_32(h, t1, c->x, p1024_mod);
198815     /* r = p.y * c.z */
198816     sp_1024_mont_mul_32(ry, p->y, c->z, p1024_mod, p1024_mp_mod);
198817     /* t1 = (q.x * c.z^2 + c.x) * p.y * c.z */
198818     sp_1024_mont_mul_32(t1, h, ry, p1024_mod, p1024_mp_mod);
198819     /* r = p.y * c.z * c.z^2 = p.y * c.z^3  */
198820     sp_1024_mont_mul_32(r, ry, t2, p1024_mod, p1024_mp_mod);
198821     /* r.x -= (q.x * c.z^2 + c.x) * p.y * c.z */
198822     sp_1024_mont_sub_32(rx, rx, t1, p1024_mod);
198823     /* t1 = p.x * c.z^2 */
198824     sp_1024_mont_mul_32(t1, p->x, t2, p1024_mod, p1024_mp_mod);
198825     /* h = c.x - p.x * c.z^2 */
198826     sp_1024_mont_sub_32(h, c->x, t1, p1024_mod);
198827     /* c'.z = (c.x - p.x * c.z^2) * c.z */
198828     sp_1024_mont_mul_32(c->z, h, c->z, p1024_mod, p1024_mp_mod);
198829     /* r.y = (c.x - p.x * c.z^2) * c.z * q.y */
198830     sp_1024_mont_mul_32(ry, c->z, q->y, p1024_mod, p1024_mp_mod);
198831     /* v = v * r */
198832     sp_1024_proj_mul_32(vx, vy, rx, ry, t);
198833 
198834     /* Add p to c using previously calculated values.
198835      *   h = c.x - p.x * c.z^2
198836      *   r = p.y * c.z^3
198837      *   c'.z = (c.x - p.x * c.z^2) * c.z
198838      */
198839 
198840     /* r = p.y * c.z^3 - c.y */
198841     sp_1024_mont_sub_32(r, r, c->y, p1024_mod);
198842     /* t1 = r^2 */
198843     sp_1024_mont_sqr_32(t1, r, p1024_mod, p1024_mp_mod);
198844     /* t2 = h^2 */
198845     sp_1024_mont_sqr_32(rx, h, p1024_mod, p1024_mp_mod);
198846     /* ry = c.x * h^2 */
198847     sp_1024_mont_mul_32(ry, c->x, rx, p1024_mod, p1024_mp_mod);
198848     /* t2 = h^3 */
198849     sp_1024_mont_mul_32(t2, rx, h, p1024_mod, p1024_mp_mod);
198850     /* c->x = r^2 + h^3 */
198851     sp_1024_mont_add_32(c->x, t1, t2, p1024_mod);
198852     /* t1 = 2 * c.x * h^2 */
198853     sp_1024_mont_dbl_32(t1, ry, p1024_mod);
198854     /* c'.x = r^2 + h^3 - 2 * c.x * h^2 */
198855     sp_1024_mont_sub_32(c->x, c->x, t1, p1024_mod);
198856     /* ry = c'.x - c.x * h^2 */
198857     sp_1024_mont_sub_32(t1, c->x, ry, p1024_mod);
198858     /* ry = r * (c'.x - c.x * h^2) */
198859     sp_1024_mont_mul_32(ry, t1, r, p1024_mod, p1024_mp_mod);
198860     /* t2 = c.y * h^3 */
198861     sp_1024_mont_mul_32(t1, t2, c->y, p1024_mod, p1024_mp_mod);
198862     /* c'.y = r * (c'.x - c.x * h^2) - c.y * h^3 */
198863     sp_1024_mont_sub_32(c->y, ry, t1, p1024_mod);
198864 }
198865 
198866 /*
198867  * Calculate r = pairing <P, Q>.
198868  *
198869  * That is, multiply base in PF_p[q] by the scalar s, such that s.P = Q.
198870  *
198871  * @param  [in]  key  SAKKE key.
198872  * @param  [in]  p    First point on E(F_p)[q].
198873  * @param  [in]  q    Second point on E(F_p)[q].
198874  * @param  [in]  r    Result of calculation.
198875  * @return  0 on success.
198876  * @return  MEMORY_E when dynamic memory allocation fails.
198877  * @return  Other -ve value on internal failure.
198878  */
sp_Pairing_1024(const ecc_point * pm,const ecc_point * qm,mp_int * res)198879 int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res)
198880 {
198881     int err = MP_OKAY;
198882 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
198883     !defined(WOLFSSL_SP_NO_MALLOC)
198884     sp_digit* td = NULL;
198885     sp_digit* t;
198886     sp_digit* vx;
198887     sp_digit* vy;
198888     sp_digit* qx_px;
198889 #else
198890     sp_digit t[6 * 2 * 32];
198891     sp_digit vx[2 * 32];
198892     sp_digit vy[2 * 32];
198893     sp_digit qx_px[2 * 32];
198894     sp_point_1024 pd;
198895     sp_point_1024 qd;
198896     sp_point_1024 cd;
198897 #endif
198898     sp_point_1024* p = NULL;
198899     sp_point_1024* q = NULL;
198900     sp_point_1024* c = NULL;
198901     sp_digit* r = NULL;
198902     int i;
198903 
198904     err = sp_1024_point_new_32(NULL, pd, p);
198905     if (err == MP_OKAY) {
198906         err = sp_1024_point_new_32(NULL, qd, q);
198907     }
198908     if (err == MP_OKAY) {
198909         err = sp_1024_point_new_32(NULL, cd, c);
198910     }
198911 
198912 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
198913     !defined(WOLFSSL_SP_NO_MALLOC)
198914     if (err == MP_OKAY) {
198915         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 9 * 32 * 2, NULL,
198916                                 DYNAMIC_TYPE_TMP_BUFFER);
198917         if (td == NULL) {
198918             err = MEMORY_E;
198919         }
198920     }
198921 #endif
198922 
198923     if (err == MP_OKAY) {
198924 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
198925     !defined(WOLFSSL_SP_NO_MALLOC)
198926         t     = td;
198927         vx    = td + 6 * 32 * 2;
198928         vy    = td + 7 * 32 * 2;
198929         qx_px = td + 8 * 32 * 2;
198930 #endif
198931         r = vy;
198932 
198933         sp_1024_point_from_ecc_point_32(p, pm);
198934         sp_1024_point_from_ecc_point_32(q, qm);
198935 
198936         err = sp_1024_mod_mul_norm_32(p->x, p->x, p1024_mod);
198937     }
198938     if (err == MP_OKAY) {
198939         err = sp_1024_mod_mul_norm_32(p->y, p->y, p1024_mod);
198940     }
198941     if (err == MP_OKAY) {
198942         err = sp_1024_mod_mul_norm_32(p->z, p->z, p1024_mod);
198943     }
198944     if (err == MP_OKAY) {
198945         err = sp_1024_mod_mul_norm_32(q->x, q->x, p1024_mod);
198946     }
198947     if (err == MP_OKAY) {
198948         err = sp_1024_mod_mul_norm_32(q->y, q->y, p1024_mod);
198949     }
198950     if (err == MP_OKAY) {
198951         XMEMCPY(c, p, sizeof(sp_point_1024));
198952         XMEMSET(vx, 0, sizeof(sp_digit) * 2 * 32);
198953         vx[0] = 1;
198954         XMEMSET(vy, 0, sizeof(sp_digit) * 2 * 32);
198955 
198956         sp_1024_mont_add_32(qx_px, q->x, p->x, p1024_mod);
198957 
198958         for (i = 1020; i >= 0; i--) {
198959             /* Accumulate line into v and double point. */
198960             sp_1024_accumulate_line_dbl_32(vx, vy, c, q, t);
198961 
198962             if ((i > 0) && ((p1024_order[i / 32] >> (i % 32)) & 1)) {
198963                 /* Accumulate line into v and add P into C. */
198964                 sp_1024_accumulate_line_add_one_32(vx, vy, c, p, q, qx_px, t);
198965             }
198966         }
198967 
198968         /* Final exponentiation */
198969         sp_1024_proj_sqr_32(vx, vy, t);
198970         sp_1024_proj_sqr_32(vx, vy, t);
198971 
198972         /* Convert from PF_p[q] to F_p */
198973         sp_1024_mont_inv_32(vx, vx, t);
198974         sp_1024_mont_mul_32(r, vx, vy, p1024_mod, p1024_mp_mod);
198975         XMEMSET(r + 32, 0, sizeof(sp_digit) * 32);
198976         sp_1024_mont_reduce_32(r, p1024_mod, p1024_mp_mod);
198977 
198978         err = sp_1024_to_mp(r, res);
198979     }
198980 
198981 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
198982     !defined(WOLFSSL_SP_NO_MALLOC)
198983     if (td != NULL) {
198984         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
198985     }
198986 #endif
198987     sp_1024_point_free_32(c, 1, NULL);
198988     sp_1024_point_free_32(q, 1, NULL);
198989     sp_1024_point_free_32(p, 1, NULL);
198990     return err;
198991 }
198992 
198993 #else
198994 /*
198995  * Calculate gradient of line through C, P and -C-P, accumulate line and
198996  * add P to C.
198997  *
198998  * Both C and P have z ordinates to use in the calculation.
198999  *
199000  * Calculations:
199001  *   r.x  = (q.x * c.z^2 + c.x) * p.y * c.z - (q.x * p.z^2 + p.x) * c.y * p.z
199002  *   r.y  = (p.x * c.z^2 - c.x * p.z^2) * q.y * p.z * c.z
199003  *   v*   = v* * r*
199004  *   h    = p.x * c.z^2 - c.x * p.z^2
199005  *   r    = p.y * c.z^3 - c.y * p.z^3
199006  *   c'.x = r^2 - h^3 - 2 * c.x * p.z^2 * h^2
199007  *   c'.y = r * (c.x * p.z^2 * h^2 - c'.x) - c.y * p.z^3 * h^3
199008  *   c'.z = (p.x * c.z^2 - c.x * p.z^2) * c.z
199009  *
199010  * @param  [in,out]  vx     X-ordinate of projective value in F*.
199011  * @param  [in,out]  vy     Y-ordinate of projective value in F*.
199012  * @param  [in,out]  c      ECC point - current point on E(F_p^2) to be added
199013  *                          to.
199014  * @param  [in,out]  p      ECC point - point on E(F_p^2) to add.
199015  * @param  [in,out]  q      ECC point - second point on E(F_P^2).
199016  * @param  [in,out]  t      SP temporaries (6 used).
199017  * @param  [in,out]  neg    Indicates to use negative P.
199018  * @return  0 on success.
199019  * @return  MEMORY_E when dynamic memory allocation fails.
199020  * @return  Other -ve value on internal failure.
199021  */
sp_1024_accumulate_line_add_n_32(sp_digit * vx,sp_digit * vy,const sp_point_1024 * p,const sp_point_1024 * q,sp_point_1024 * c,sp_digit * t,int neg)199022 static void sp_1024_accumulate_line_add_n_32(sp_digit* vx, sp_digit* vy,
199023         const sp_point_1024* p, const sp_point_1024* q,
199024         sp_point_1024* c, sp_digit* t, int neg)
199025 {
199026     sp_digit* t1 = t;
199027     sp_digit* t2 = t +  2 * 32;
199028     sp_digit* rx = t +  4 * 32;
199029     sp_digit* ry = t +  6 * 32;
199030     sp_digit* h  = t +  8 * 32;
199031     sp_digit* r  = t + 10 * 32;
199032 
199033     /* h = p.z^2 */
199034     sp_1024_mont_sqr_32(h, p->z, p1024_mod, p1024_mp_mod);
199035     /* rx = q.x * p.z^2 */
199036     sp_1024_mont_mul_32(rx, q->x, h, p1024_mod, p1024_mp_mod);
199037     /* rx = q.x * p.z^2 + p.x */
199038     sp_1024_mont_add_32(t2, rx, p->x, p1024_mod);
199039     /* c.y = c.y * p.z */
199040     sp_1024_mont_mul_32(t1, c->y, p->z, p1024_mod, p1024_mp_mod);
199041     /* r.x = (q.x * p.z^2 + p.x) * c.y * p.z */
199042     sp_1024_mont_mul_32(rx, t2, t1, p1024_mod, p1024_mp_mod);
199043     /* c.y = c.y * p.z^3 */
199044     sp_1024_mont_mul_32(c->y, t1, h, p1024_mod, p1024_mp_mod);
199045     /* t2 = c.z^2 */
199046     sp_1024_mont_sqr_32(t2, c->z, p1024_mod, p1024_mp_mod);
199047     /* t1 = q.x * c.z^2 */
199048     sp_1024_mont_mul_32(t1, q->x, t2, p1024_mod, p1024_mp_mod);
199049     /* t1 = q.x * c.z^2 + c.x */
199050     sp_1024_mont_add_32(t1, t1, c->x, p1024_mod);
199051     /* c.x = c.x * p.z^2 */
199052     sp_1024_mont_mul_32(c->x, c->x, h, p1024_mod, p1024_mp_mod);
199053     /* r = p.y * c.z */
199054     sp_1024_mont_mul_32(r, p->y, c->z, p1024_mod, p1024_mp_mod);
199055     if (neg) {
199056         /* r = -p.y * c.z */
199057         sp_1024_mont_sub_32(r, p1024_mod, r, p1024_mod);
199058     }
199059     /* t1 = (q.x * c.z^2 + c.x) * p.y * c.z */
199060     sp_1024_mont_mul_32(ry, t1, r, p1024_mod, p1024_mp_mod);
199061     /* r.x -= (q.x * c.z^2 + c.x) * p.y * c.z */
199062     sp_1024_mont_sub_32(rx, ry, rx, p1024_mod);
199063     /* t1 = p.x * c.z^2 */
199064     sp_1024_mont_mul_32(t1, p->x, t2, p1024_mod, p1024_mp_mod);
199065     /* h = p.x * c.z^2 - c.x * p.z^2 */
199066     sp_1024_mont_sub_32(h, t1, c->x, p1024_mod);
199067     /* c'.z = (p.x * c.z^2 - c.x * p.z^2) * c.z */
199068     sp_1024_mont_mul_32(t1, h, c->z, p1024_mod, p1024_mp_mod);
199069     /* c'.z = (p.x * c.z^2 - c.x * p.z^2) * c.z * p.z */
199070     sp_1024_mont_mul_32(c->z, t1, p->z, p1024_mod, p1024_mp_mod);
199071     /* r.y = (p.x * c.z^2 - c.x * p.z^2) * c.z * p.z * q.y */
199072     sp_1024_mont_mul_32(ry, c->z, q->y, p1024_mod, p1024_mp_mod);
199073     /* r = p.y * c.z^3 */
199074     sp_1024_mont_mul_32(t1, r, t2, p1024_mod, p1024_mp_mod);
199075     /* r = p.y * c.z^3 - c.y * p.z^3 */
199076     sp_1024_mont_sub_32(r, t1, c->y, p1024_mod);
199077     /* v = v * r */
199078     sp_1024_proj_mul_32(vx, vy, rx, ry, t);
199079 
199080     /* Add p to c using previously calculated values.
199081      *   h = p.x * c.z^2 - c.x * p.z^2
199082      *   r = p.y * c.z^3 - c.y * p.z^3
199083      *   c'.z = (p.x * c.z^2 - c.x * p.z^2) * c.z
199084      */
199085 
199086     /* t1 = r^2 */
199087     sp_1024_mont_sqr_32(t1, r, p1024_mod, p1024_mp_mod);
199088     /* t2 = h^2 */
199089     sp_1024_mont_sqr_32(rx, h, p1024_mod, p1024_mp_mod);
199090     /* ry = c.x * p.z^2 * h^2 */
199091     sp_1024_mont_mul_32(ry, rx, c->x, p1024_mod, p1024_mp_mod);
199092     /* t2 = h^3 */
199093     sp_1024_mont_mul_32(t2, rx, h, p1024_mod, p1024_mp_mod);
199094     /* c'.x = r^2 - h^3 */
199095     sp_1024_mont_sub_32(c->x, t1, t2, p1024_mod);
199096     /* t1 = 2 * c.x * p.z^2 * h^2 */
199097     sp_1024_mont_dbl_32(t1, ry, p1024_mod);
199098     /* c'.x = r^2 - h^3 - 2 * c.x * p.z^2 * h^2 */
199099     sp_1024_mont_sub_32(c->x, c->x, t1, p1024_mod);
199100     /* ry = c.x * p.z^2 * h^2 - c'.x */
199101     sp_1024_mont_sub_32(t1, ry, c->x, p1024_mod);
199102     /* ry = r * (c.x * p.z^2 * h^2 - c'.x) */
199103     sp_1024_mont_mul_32(ry, t1, r, p1024_mod, p1024_mp_mod);
199104     /* t2 = c.y * p.z^3 * h^3 */
199105     sp_1024_mont_mul_32(t1, t2, c->y, p1024_mod, p1024_mp_mod);
199106     /* c'.y = r * (c.x * p.z^2 * h^2 - c'.x) - c.y * p.z^3 * h^3 */
199107     sp_1024_mont_sub_32(c->y, ry, t1, p1024_mod);
199108 }
199109 
199110 /*
199111  * Perform n accumulate doubles and doubles of P.
199112  *
199113  * py = 2 * p.y
199114  *
199115  * For each double:
199116  * Calculate gradient of line through P, P and [-2]P, accumulate line and
199117  * double P.
199118  *
199119  * Calculations:
199120  *   l = 3 * (p.x^2 - p.z^4) = 3 * (p.x - p.z^2) * (p.x + p.z^2)
199121  *   r.x = l * (p.x + q.x * p.z^2) - py^2 / 2
199122  *   r.y = py * p.z^3 * q.y (= p'.z * p.z^2 * q.y)
199123  *   v* = v*^2 * r*
199124  *   p'.x = l^2 - 2 * py^2 * p.x
199125  *   py' = (py^2 * p.x - p'.x) * l - py^4 (= 2 * p'.y)
199126  *   p'.z = py * p.z
199127  *
199128  * Finally:
199129  *   p'.y = py' / 2
199130  *
199131  * @param  [in,out]  vx  X-ordinate of projective value in F*.
199132  * @param  [in,out]  vy  Y-ordinate of projective value in F*.
199133  * @param  [in,out]  p   ECC point - point on E(F_p^2) to double.
199134  * @param  [in]      q   ECC point - second point on E(F_P^2).
199135  * @param  [in]      n   Number of times to double.
199136  * @param  [in]      t   SP temporaries (6 used).
199137  */
sp_1024_accumulate_line_dbl_n_32(sp_digit * vx,sp_digit * vy,sp_point_1024 * p,const sp_point_1024 * q,int n,sp_digit * t)199138 static void sp_1024_accumulate_line_dbl_n_32(sp_digit* vx, sp_digit* vy,
199139         sp_point_1024* p, const sp_point_1024* q, int n, sp_digit* t)
199140 {
199141     sp_digit* t1  = t +  0 * 32;
199142     sp_digit* pz2 = t +  2 * 32;
199143     sp_digit* rx  = t +  4 * 32;
199144     sp_digit* ry  = t +  6 * 32;
199145     sp_digit* l   = t +  8 * 32;
199146     sp_digit* ty  = t + 10 * 32;
199147     int i;
199148 
199149     /* py = 2 * p.y */
199150     sp_1024_mont_dbl_32(p->y, p->y, p1024_mod);
199151 
199152     for (i = 0; i < n; i++) {
199153         /* v = v^2 */
199154         sp_1024_proj_sqr_32(vx, vy, t);
199155         /* pz2 = p.z^2 */
199156         sp_1024_mont_sqr_32(pz2, p->z, p1024_mod, p1024_mp_mod);
199157         /* t1 = p.x + p.z^2 */
199158         sp_1024_mont_add_32(t1, p->x, pz2, p1024_mod);
199159         /* l = p.x - p.z^2 */
199160         sp_1024_mont_sub_32(l, p->x, pz2, p1024_mod);
199161         /* t1 = (p.x + p.z^2) * (p.x - p.z^2) = p.x^2 - p.z^4 */
199162         sp_1024_mont_mul_32(ty, l, t1, p1024_mod, p1024_mp_mod);
199163         /* l = 3 * (p.x^2 - p.z^4) */
199164         sp_1024_mont_tpl_32(l, ty, p1024_mod);
199165         /* t1 = q.x * p.z^2 */
199166         sp_1024_mont_mul_32(t1, q->x, pz2, p1024_mod, p1024_mp_mod);
199167         /* t1 = p.x + q.x * p.z^2 */
199168         sp_1024_mont_add_32(t1, p->x, t1, p1024_mod);
199169         /* r.x = l * (p.x + q.x * p.z^2) */
199170         sp_1024_mont_mul_32(rx, l, t1, p1024_mod, p1024_mp_mod);
199171         /* ty = py ^ 2 */
199172         sp_1024_mont_sqr_32(ty, p->y, p1024_mod, p1024_mp_mod);
199173         /* t1 = py ^ 2 / 2 */
199174         sp_1024_div2_32(t1, ty, p1024_mod);
199175         /* r.x -= py ^ 2 / 2 */
199176         sp_1024_mont_sub_32(rx, rx, t1, p1024_mod);
199177         /* p'.z = py * pz */
199178         sp_1024_mont_mul_32(p->z, p->z, p->y, p1024_mod, p1024_mp_mod);
199179         /* r.y = p'.z * p.z^2 */
199180         sp_1024_mont_mul_32(t1, p->z, pz2, p1024_mod, p1024_mp_mod);
199181         /* r.y = p'.z * p.z^2 * q.y */
199182         sp_1024_mont_mul_32(ry, t1, q->y, p1024_mod, p1024_mp_mod);
199183         /* v = v^2 * r */
199184         sp_1024_proj_mul_32(vx, vy, rx, ry, t);
199185 
199186         /* Double point using previously calculated values
199187          *   l = 3 * (p.x - p.z^2).(p.x + p.z^2)
199188          *   ty = py^2
199189          *   p'.z = py * p.z
199190          */
199191         /* t1 = py^2 ^ 2 = py^4 */
199192         sp_1024_mont_sqr_32(t1, ty, p1024_mod, p1024_mp_mod);
199193         /* py' = py^2 * p. x */
199194         sp_1024_mont_mul_32(p->y, ty, p->x, p1024_mod, p1024_mp_mod);
199195         /* p'.x = l^2 */
199196         sp_1024_mont_sqr_32(p->x, l, p1024_mod, p1024_mp_mod);
199197         /* p'.x = l^2 - py^2 * p.x */
199198         sp_1024_mont_sub_32(p->x, p->x, p->y, p1024_mod);
199199         /* p'.x = l^2 - 2 * p.y^2 * p.x */
199200         sp_1024_mont_sub_32(p->x, p->x, p->y, p1024_mod);
199201         /* py' = py^2 * p.x - p.x' */
199202         sp_1024_mont_sub_32(ty, p->y, p->x, p1024_mod);
199203         /* py' = (p.y^2 * p.x - p'.x) * l */
199204         sp_1024_mont_mul_32(p->y, ty, l, p1024_mod, p1024_mp_mod);
199205         /* py' = (p.y^2 * p.x - p'.x) * l * 2 */
199206         sp_1024_mont_dbl_32(p->y, p->y, p1024_mod);
199207         /* py' = (p.y^2 * p.x - p'.x) * l * 2 - p.y^4 */
199208         sp_1024_mont_sub_32(p->y, p->y, t1, p1024_mod);
199209     }
199210 
199211     /* p'.y = py' / 2 */
199212     sp_1024_div2_32(p->y, p->y, p1024_mod);
199213 }
199214 
199215 /* Operations to perform based on order - 1.
199216  * Sliding window. Start at bottom and stop when bottom bit is one.
199217  * Subtract if top bit in window is one.
199218  * Width of 6 bits.
199219  * Pairs: #dbls, add/subtract window value
199220  */
199221 static const signed char sp_1024_order_op[] = {
199222    5,   6, -13,   9, -21,   6,  -5,   8,  31,   6,   3,   6, -27,   6,  25,   9,
199223   -1,   6, -11,   6, -13,   6,  -7,   6, -15,   6, -29,   7,  25,   6,  -9,   6,
199224  -19,   7,   3,   6,  11,   9, -23,   6,   1,   6,  27,   6,   1,   7, -25,   8,
199225   13,   7, -13,   7, -23,  10,  19,   7,   7,   7,  -3,   7,  27,   6,  -7,   7,
199226  -21,   7,  11,   7,  31,   8,   1,   7, -23,   6, -17,   6,  -3,  10,  11,   6,
199227  -21,   7, -27,  11, -29,   6,  -1,  10,  15,   8,  27,   7,  17,   6,  17,   7,
199228  -13,   8,  13,   6,  21,   7, -29,   6,  19,   7, -25,   6,  11,   9,  29,   7,
199229   -7,   8,  27,   7,  29,  10,  -1,   8,  -7,   8,  17,   6,  17,   7, -27,   7,
199230  -21,   6,  -9,   6, -27,  12, -23,   6,  19,   6,  13,   6, -11,   7,  27,   6,
199231   17,   6,  -7,   6, -25,   7, -29,   6,   9,   7,   7,   6,  13,   6, -25,   6,
199232  -19,   6,  13,   6, -11,   6,   5,   8,  19,   6, -21,   8,  23,   7,  27,   6,
199233  -13,   6, -19,  11,  29,   7, -15,   6,  -9,   7, -21,  10,  -3,   7,  21,  10,
199234   25,   6, -15,   6, -23,   6,  21,   6,   1,   6,  21,   7,  -3,   6,  -3,   7,
199235   -7,   6, -23,   7,   7,   8,  15,   9,   5,   6, -11,   6,  21,  11, -27,   7,
199236   27,   6, -11,   6,  31,   6, -21,   6,  19,   6,  -7,   8,  -7,  13,  -3,   6,
199237   -7,   7,  -3,   6,   1,   6,   7,   8,  19,   8,  11,   9,  -9,   7, -31,  12,
199238   25,   6, -17,   9, -15,   7,   5,   6,  25,   7,  -5,   7, -25,   6,  17,   8,
199239  -19,   6, -13,   6,  27,   8,   1,   7,  -5,   7,  -1,   6,  21,   6,   3,  10,
199240   -3,   1,
199241 };
199242 /*
199243  * Calculate r = pairing <P, Q>.
199244  *
199245  * That is, multiply base in PF_p[q] by the scalar s, such that s.P = Q.
199246  *
199247  * Sliding window. Start at bottom and stop when bottom bit is one.
199248  * Subtract if top bit in window is one.
199249  * Width of 6 bits.
199250  *
199251  * @param  [in]  pm   First point on E(F_p)[q].
199252  * @param  [in]  qm   Second point on E(F_p)[q].
199253  * @param  [in]  res  Result of calculation.
199254  * @return  0 on success.
199255  * @return  MEMORY_E when dynamic memory allocation fails.
199256  */
sp_Pairing_1024(const ecc_point * pm,const ecc_point * qm,mp_int * res)199257 int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res)
199258 {
199259     int err;
199260 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
199261     !defined(WOLFSSL_SP_NO_MALLOC)
199262     sp_digit* td = NULL;
199263     sp_digit* t;
199264     sp_digit* vx;
199265     sp_digit* vy;
199266     sp_digit (*pre_vx)[64];
199267     sp_digit (*pre_vy)[64];
199268     sp_digit (*pre_nvy)[64];
199269     sp_point_1024* pre_p;
199270 #else
199271     sp_digit t[6 * 2 * 32];
199272     sp_digit vx[2 * 32];
199273     sp_digit vy[2 * 32];
199274     sp_digit pre_vx[16][64];
199275     sp_digit pre_vy[16][64];
199276     sp_digit pre_nvy[16][64];
199277     sp_point_1024 pre_p[16];
199278     sp_point_1024 pd;
199279     sp_point_1024 qd;
199280     sp_point_1024 cd;
199281 #endif
199282     sp_point_1024* p = NULL;
199283     sp_point_1024* q = NULL;
199284     sp_point_1024* c = NULL;
199285     sp_digit* r = NULL;
199286     int i;
199287     int j;
199288 
199289     err = sp_1024_point_new_32(NULL, pd, p);
199290     if (err == MP_OKAY) {
199291         err = sp_1024_point_new_32(NULL, qd, q);
199292     }
199293     if (err == MP_OKAY) {
199294         err = sp_1024_point_new_32(NULL, cd, c);
199295     }
199296 
199297 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
199298     !defined(WOLFSSL_SP_NO_MALLOC)
199299     if (err == MP_OKAY) {
199300         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 56 * 32 * 2 + 16 * sizeof(sp_point_1024), NULL,
199301                                 DYNAMIC_TYPE_TMP_BUFFER);
199302         if (td == NULL) {
199303             err = MEMORY_E;
199304         }
199305     }
199306 #endif
199307 
199308     if (err == MP_OKAY) {
199309 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
199310     !defined(WOLFSSL_SP_NO_MALLOC)
199311         t       = td;
199312         vx      = td + 6 * 32 * 2;
199313         vy      = td + 7 * 32 * 2;
199314         pre_vx  = (sp_digit(*)[64])(td + 8 * 32 * 2);
199315         pre_vy  = (sp_digit(*)[64])(td + 24 * 32 * 2);
199316         pre_nvy = (sp_digit(*)[64])(td + 40 * 32 * 2);
199317         pre_p   = (sp_point_1024*)(td + 56 * 32 * 2);
199318 #endif
199319         r = vy;
199320 
199321         sp_1024_point_from_ecc_point_32(p, pm);
199322         sp_1024_point_from_ecc_point_32(q, qm);
199323 
199324         err = sp_1024_mod_mul_norm_32(p->x, p->x, p1024_mod);
199325     }
199326     if (err == MP_OKAY) {
199327         err = sp_1024_mod_mul_norm_32(p->y, p->y, p1024_mod);
199328     }
199329     if (err == MP_OKAY) {
199330         err = sp_1024_mod_mul_norm_32(p->z, p->z, p1024_mod);
199331     }
199332     if (err == MP_OKAY) {
199333         err = sp_1024_mod_mul_norm_32(q->x, q->x, p1024_mod);
199334     }
199335     if (err == MP_OKAY) {
199336         err = sp_1024_mod_mul_norm_32(q->y, q->y, p1024_mod);
199337     }
199338     if (err == MP_OKAY) {
199339         /* Generate pre-computation table: 1, 3, ... , 31 */
199340         XMEMCPY(&pre_p[0], p, sizeof(sp_point_1024));
199341         XMEMSET(pre_vx[0], 0, sizeof(sp_digit) * 2 * 32);
199342         pre_vx[0][0] = 1;
199343         XMEMSET(pre_vy[0], 0, sizeof(sp_digit) * 2 * 32);
199344         sp_1024_mont_sub_32(pre_nvy[0], p1024_mod, pre_vy[0], p1024_mod);
199345 
199346         /* [2]P for adding */
199347         XMEMCPY(c, p, sizeof(sp_point_1024));
199348         XMEMSET(vx, 0, sizeof(sp_digit) * 2 * 32);
199349         vx[0] = 1;
199350         XMEMSET(vy, 0, sizeof(sp_digit) * 2 * 32);
199351         sp_1024_accumulate_line_dbl_32(vx, vy, c, q, t);
199352 
199353         /* 3, 5, ... */
199354         for (i = 1; i < 16; i++) {
199355             XMEMCPY(&pre_p[i], &pre_p[i-1], sizeof(sp_point_1024));
199356             XMEMCPY(pre_vx[i], pre_vx[i-1], sizeof(sp_digit) * 2 * 32);
199357             XMEMCPY(pre_vy[i], pre_vy[i-1], sizeof(sp_digit) * 2 * 32);
199358             sp_1024_proj_mul_32(pre_vx[i], pre_vy[i], vx, vy, t);
199359             sp_1024_accumulate_line_add_n_32(pre_vx[i], pre_vy[i], c,
199360                     q, &pre_p[i], t, 0);
199361             sp_1024_mont_sub_32(pre_nvy[i], p1024_mod, pre_vy[i], p1024_mod);
199362         }
199363 
199364         j = sp_1024_order_op[0] / 2;
199365         XMEMCPY(c, &pre_p[j], sizeof(sp_point_1024));
199366         XMEMCPY(vx, pre_vx[j], sizeof(sp_digit) * 2 * 32);
199367         XMEMCPY(vy, pre_vy[j], sizeof(sp_digit) * 2 * 32);
199368 
199369         /* Accumulate line into v and double point n times. */
199370         sp_1024_accumulate_line_dbl_n_32(vx, vy, c, q,
199371                 sp_1024_order_op[1], t);
199372 
199373         for (i = 2; i < 290; i += 2) {
199374             j = sp_1024_order_op[i];
199375             if (j > 0) {
199376                 j /= 2;
199377                 /* Accumulate line into v and add P into C. */
199378                 sp_1024_proj_mul_32(vx, vy, pre_vx[j], pre_vy[j], t);
199379                 sp_1024_accumulate_line_add_n_32(vx, vy, &pre_p[j], q, c,
199380                     t, 0);
199381             }
199382             else {
199383                 j = -j / 2;
199384                 /* Accumulate line into v and add P into C. */
199385                 sp_1024_proj_mul_32(vx, vy, pre_vx[j], pre_nvy[j], t);
199386                 sp_1024_accumulate_line_add_n_32(vx, vy, &pre_p[j], q, c,
199387                     t, 1);
199388             }
199389 
199390             /* Accumulate line into v and double point n times. */
199391             sp_1024_accumulate_line_dbl_n_32(vx, vy, c, q,
199392                     sp_1024_order_op[i + 1], t);
199393         }
199394 
199395         /* Final exponentiation */
199396         sp_1024_proj_sqr_32(vx, vy, t);
199397         sp_1024_proj_sqr_32(vx, vy, t);
199398 
199399         /* Convert from PF_p[q] to F_p */
199400         sp_1024_mont_inv_32(vx, vx, t);
199401         sp_1024_mont_mul_32(r, vx, vy, p1024_mod, p1024_mp_mod);
199402         XMEMSET(r + 32, 0, sizeof(sp_digit) * 32);
199403         sp_1024_mont_reduce_32(r, p1024_mod, p1024_mp_mod);
199404 
199405         err = sp_1024_to_mp(r, res);
199406     }
199407 
199408 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
199409     !defined(WOLFSSL_SP_NO_MALLOC)
199410     if (td != NULL) {
199411         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
199412     }
199413 #endif
199414     sp_1024_point_free_32(c, 1, NULL);
199415     sp_1024_point_free_32(q, 1, NULL);
199416     sp_1024_point_free_32(p, 1, NULL);
199417     return err;
199418 }
199419 
199420 #endif /* WOLFSSL_SP_SMALL */
199421 #ifdef WOLFSSL_SP_SMALL
199422 /*
199423  * Generate table for pairing.
199424  *
199425  * Small implementation does not use a table - returns 0 length.
199426  *
199427  * pm     [in]      Point to generate table for.
199428  * table  [in]      Generated table.
199429  * len    [in,out]  On in, the size of the buffer.
199430  *                  On out, length of table generated.
199431  * @return  0 on success.
199432  *          LENGTH_ONLY_E when table is NULL and only length returned.
199433  *          BUFFER_E when len is too small.
199434  */
sp_Pairing_gen_precomp_1024(const ecc_point * pm,byte * table,word32 * len)199435 int sp_Pairing_gen_precomp_1024(const ecc_point* pm, byte* table,
199436         word32* len)
199437 {
199438     int err = 0;
199439 
199440     if (table == NULL) {
199441         *len = 0;
199442         err = LENGTH_ONLY_E;
199443     }
199444     else if (*len != 0) {
199445         err = BUFFER_E;
199446     }
199447 
199448     (void)*pm;
199449 
199450     return err;
199451 }
199452 
199453 /*
199454  * Calculate r = pairing <P, Q>.
199455  *
199456  * That is, multiply base in PF_p[q] by the scalar s, such that s.P = Q.
199457  *
199458  * Small implementation does not use a table - use the normal implementation.
199459  *
199460  * @param  [in]  pm     First point on E(F_p)[q].
199461  * @param  [in]  qm     Second point on E(F_p)[q].
199462  * @param  [in]  res    Result of calculation.
199463  * @param  [in]  table  Precomputed table of values.
199464  * @param  [in]  len    Length of precomputed table of values in bytes.
199465  * @return  0 on success.
199466  * @return  MEMORY_E when dynamic memory allocation fails.
199467  */
sp_Pairing_precomp_1024(const ecc_point * pm,const ecc_point * qm,mp_int * res,const byte * table,word32 len)199468 int sp_Pairing_precomp_1024(const ecc_point* pm, const ecc_point* qm,
199469     mp_int* res, const byte* table, word32 len)
199470 {
199471     (void)table;
199472     (void)len;
199473     return sp_Pairing_1024(pm, qm, res);
199474 }
199475 
199476 #else
199477 /*
199478  * Calc l and c for the point when doubling p.
199479  *
199480  * l = 3 * (p.x^2 - 1) / (2 * p.y)
199481  * c = l * p.x - p.y
199482  *
199483  * @param  [out]  lr  Gradient result - table entry.
199484  * @param  [out]  cr  Constant result - table entry.
199485  * @param  [in]   px  X-ordinate of point to double.
199486  * @param  [in]   py  Y-ordinate of point to double.
199487  * @param  [in]   t   SP temporaries (3 used).
199488  */
sp_1024_accum_dbl_calc_lc_32(sp_digit * lr,sp_digit * cr,const sp_digit * px,const sp_digit * py,sp_digit * t)199489 static void sp_1024_accum_dbl_calc_lc_32(sp_digit* lr, sp_digit* cr,
199490         const sp_digit* px, const sp_digit* py, sp_digit* t)
199491 {
199492     sp_digit* t1 = t + 0 * 2 * 32;
199493     sp_digit* t2 = t + 2 * 2 * 32;
199494     sp_digit* l  = t + 4 * 2 * 32;
199495 
199496 
199497     /* l = 1 / 2 * p.y */
199498     sp_1024_mont_dbl_32(l, py, p1024_mod);
199499     sp_1024_mont_inv_32(l, l, t);
199500 
199501     /* t1 = p.x^2 */
199502     sp_1024_mont_sqr_32(t1, px, p1024_mod, p1024_mp_mod);
199503     /* t1 = p.x - 1 */
199504     sp_1024_mont_sub_32(t1, t1, p1024_norm_mod, p1024_mod);
199505     /* t1 = 3 * (p.x^2 - 1) */
199506     sp_1024_mont_dbl_32(t2, t1, p1024_mod);
199507     sp_1024_mont_add_32(t1, t1, t2, p1024_mod);
199508     /* t1 = 3 * (p.x^2 - 1) / (2 * p.y) */
199509     sp_1024_mont_mul_32(l, l, t1, p1024_mod, p1024_mp_mod);
199510     /* t2 = l * p.x */
199511     sp_1024_mont_mul_32(t2, l, px, p1024_mod, p1024_mp_mod);
199512     /* c = t2 = l * p.x - p.y */
199513     sp_1024_mont_sub_32(t2, t2, py, p1024_mod);
199514 
199515     XMEMCPY(lr, l, sizeof(sp_digit) * 32);
199516     XMEMCPY(cr, t2, sizeof(sp_digit) * 32);
199517 }
199518 
199519 /*
199520  * Calc l and c when adding p and c.
199521  *
199522  * l = (c.y - p.y) / (c.x - p.x)
199523  * c = (p.x * c.y - cx * p.y) / (cx - p.x)
199524  *
199525  * @param  [out]  lr  Gradient result - table entry.
199526  * @param  [out]  cr  Constant result - table entry.
199527  * @param  [in]   px  X-ordinate of point to add.
199528  * @param  [in]   py  Y-ordinate of point to add.
199529  * @param  [in]   cx  X-ordinate of current point.
199530  * @param  [in]   cy  Y-ordinate of current point.
199531  * @param  [in]   t   SP temporaries (3 used).
199532  */
sp_1024_accum_add_calc_lc_32(sp_digit * lr,sp_digit * cr,const sp_digit * px,const sp_digit * py,const sp_digit * cx,const sp_digit * cy,sp_digit * t)199533 static void sp_1024_accum_add_calc_lc_32(sp_digit* lr, sp_digit* cr,
199534         const sp_digit* px, const sp_digit* py, const sp_digit* cx,
199535         const sp_digit* cy, sp_digit* t)
199536 {
199537     sp_digit* t1 = t + 0 * 2 * 32;
199538     sp_digit* c  = t + 2 * 2 * 32;
199539     sp_digit* l  = t + 4 * 2 * 32;
199540 
199541 
199542     /* l = 1 / (c.x - p.x) */
199543     sp_1024_mont_sub_32(l, cx, px, p1024_mod);
199544     sp_1024_mont_inv_32(l, l, t);
199545 
199546     /* c = p.x * c.y */
199547     sp_1024_mont_mul_32(c, px, cy, p1024_mod, p1024_mp_mod);
199548     /* t1 = c.x * p.y */
199549     sp_1024_mont_mul_32(t1, cx, py, p1024_mod, p1024_mp_mod);
199550     /* c = (p.x * c.y) - (c.x * p.y) */
199551     sp_1024_mont_sub_32(c, c, t1, p1024_mod);
199552     /* c = ((p.x * c.y) - (c.x * p.y)) / (c.x - p.x) */
199553     sp_1024_mont_mul_32(c, c, l, p1024_mod, p1024_mp_mod);
199554     /* t1 = c.y - p.y */
199555     sp_1024_mont_sub_32(t1, cy, py, p1024_mod);
199556     /* l = (c.y - p.y) / (c.x - p.x) */
199557     sp_1024_mont_mul_32(l, t1, l, p1024_mod, p1024_mp_mod);
199558 
199559     XMEMCPY(lr, l, sizeof(sp_digit) * 32);
199560     XMEMCPY(cr, c, sizeof(sp_digit) * 32);
199561 }
199562 
199563 /*
199564  * Calculate vx and vy given gradient l and constant c and point q.
199565  *
199566  * l is a the gradient and is multiplied by q->x.
199567  * c is a the constant that is added to the multiplicative result.
199568  * q->y is the y-ordinate in result to multiply.
199569  *
199570  * if dbl
199571  *   v*  = v*^2
199572  * r.x = l * q.x + c
199573  * r.y = q->y
199574  * v*  = v* * r*
199575  *
199576  * @param  [in,out]  vx     X-ordinate of projective value in F*.
199577  * @param  [in,out]  vy     Y-ordinate of projective value in F*.
199578  * @param  [in]      l      Gradient to multiply with.
199579  * @param  [in]      c      Constant to add with.
199580  * @param  [in]      q      ECC point - second point on E(F_P^2).
199581  * @param  [in]      t      SP temporaries (3 used).
199582  * @param  [in]      dbl    Indicates whether this is for doubling. Otherwise
199583  *                          adding.
199584  */
sp_1024_accumulate_line_lc_32(sp_digit * vx,sp_digit * vy,const sp_digit * l,const sp_digit * c,const sp_point_1024 * q,sp_digit * t,int dbl)199585 static void sp_1024_accumulate_line_lc_32(sp_digit* vx, sp_digit* vy,
199586         const sp_digit* l, const sp_digit* c, const sp_point_1024* q,
199587         sp_digit* t, int dbl)
199588 {
199589     sp_digit* rx = t + 4 * 2 * 32;
199590 
199591     /* v = v^2 */
199592     if (dbl) {
199593         sp_1024_proj_sqr_32(vx, vy, t);
199594     }
199595     /* rx = l * q.x + c */
199596     sp_1024_mont_mul_32(rx, l, q->x, p1024_mod, p1024_mp_mod);
199597     sp_1024_mont_add_32(rx, rx, c, p1024_mod);
199598     /* v = v^2 * r */
199599     sp_1024_proj_mul_32(vx, vy, rx, q->y, t);
199600 }
199601 
199602 /* Operations to perform based on order - 1.
199603  * Sliding window. Start at bottom and stop when bottom bit is one.
199604  * Subtract if top bit in window is one.
199605  * Width of 6 bits.
199606  * Pairs: #dbls, add/subtract window value
199607  */
199608 static const signed char sp_1024_order_op_pre[] = {
199609    5,   6, -13,   9, -21,   6,  -5,   8,  31,   6,   3,   6, -27,   6,  25,   9,
199610   -1,   6, -11,   6, -13,   6,  -7,   6, -15,   6, -29,   7,  25,   6,  -9,   6,
199611  -19,   7,   3,   6,  11,   9, -23,   6,   1,   6,  27,   6,   1,   7, -25,   8,
199612   13,   7, -13,   7, -23,  10,  19,   7,   7,   7,  -3,   7,  27,   6,  -7,   7,
199613  -21,   7,  11,   7,  31,   8,   1,   7, -23,   6, -17,   6,  -3,  10,  11,   6,
199614  -21,   7, -27,  11, -29,   6,  -1,  10,  15,   8,  27,   7,  17,   6,  17,   7,
199615  -13,   8,  13,   6,  21,   7, -29,   6,  19,   7, -25,   6,  11,   9,  29,   7,
199616   -7,   8,  27,   7,  29,  10,  -1,   8,  -7,   8,  17,   6,  17,   7, -27,   7,
199617  -21,   6,  -9,   6, -27,  12, -23,   6,  19,   6,  13,   6, -11,   7,  27,   6,
199618   17,   6,  -7,   6, -25,   7, -29,   6,   9,   7,   7,   6,  13,   6, -25,   6,
199619  -19,   6,  13,   6, -11,   6,   5,   8,  19,   6, -21,   8,  23,   7,  27,   6,
199620  -13,   6, -19,  11,  29,   7, -15,   6,  -9,   7, -21,  10,  -3,   7,  21,  10,
199621   25,   6, -15,   6, -23,   6,  21,   6,   1,   6,  21,   7,  -3,   6,  -3,   7,
199622   -7,   6, -23,   7,   7,   8,  15,   9,   5,   6, -11,   6,  21,  11, -27,   7,
199623   27,   6, -11,   6,  31,   6, -21,   6,  19,   6,  -7,   8,  -7,  13,  -3,   6,
199624   -7,   7,  -3,   6,   1,   6,   7,   8,  19,   8,  11,   9,  -9,   7, -31,  12,
199625   25,   6, -17,   9, -15,   7,   5,   6,  25,   7,  -5,   7, -25,   6,  17,   8,
199626  -19,   6, -13,   6,  27,   8,   1,   7,  -5,   7,  -1,   6,  21,   6,   3,  10,
199627   -3,   1,
199628 };
199629 
199630 /*
199631  * Generate table for pairing.
199632  *
199633  * Calculate the graident (l) and constant (c) at each step of the way.
199634  * Sliding window. Start at bottom and stop when bottom bit is one.
199635  * Subtract if top bit in window is one.
199636  * Width of 6 bits.
199637  *
199638  * pm     [in]      Point to generate table for.
199639  * table  [in]      Generated table.
199640  * len    [in,out]  On in, the size of the buffer.
199641  *                  On out, length of table generated.
199642  * @return  0 on success.
199643  *          LENGTH_ONLY_E when table is NULL and only length returned.
199644  *          BUFFER_E when len is too small.
199645  *          MEMORY_E when dynamic memory allocation fauls.
199646  */
sp_Pairing_gen_precomp_1024(const ecc_point * pm,byte * table,word32 * len)199647 int sp_Pairing_gen_precomp_1024(const ecc_point* pm, byte* table,
199648         word32* len)
199649 {
199650     int err = 0;
199651 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
199652     !defined(WOLFSSL_SP_NO_MALLOC)
199653     sp_digit* td = NULL;
199654     sp_digit* t;
199655     sp_point_1024* pre_p;
199656 #else
199657     sp_digit t[6 * 2 * 32];
199658     sp_point_1024 pre_p[16];
199659     sp_point_1024 pd;
199660     sp_point_1024 cd;
199661     sp_point_1024 negd;
199662 #endif
199663     sp_point_1024* p = NULL;
199664     sp_point_1024* c = NULL;
199665     sp_point_1024* neg = NULL;
199666     int i;
199667     int j;
199668     int k;
199669     sp_table_entry_1024* precomp = (sp_table_entry_1024*)table;
199670 
199671     if (table == NULL) {
199672         *len = sizeof(sp_table_entry_1024) * 1167;
199673         err = LENGTH_ONLY_E;
199674     }
199675 
199676     if ((err == MP_OKAY) &&
199677             (*len < (int)(sizeof(sp_table_entry_1024) * 1167))) {
199678         err = BUFFER_E;
199679     }
199680 
199681     if (err == MP_OKAY) {
199682         err = sp_1024_point_new_32(NULL, pd, p);
199683     }
199684     if (err == MP_OKAY) {
199685         err = sp_1024_point_new_32(NULL, cd, c);
199686     }
199687     if (err == MP_OKAY) {
199688         err = sp_1024_point_new_32(NULL, negd, neg);
199689     }
199690 
199691 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
199692     !defined(WOLFSSL_SP_NO_MALLOC)
199693     if (err == MP_OKAY) {
199694         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 6 * 32 * 2 + 16 * sizeof(sp_point_1024), NULL,
199695                                 DYNAMIC_TYPE_TMP_BUFFER);
199696         if (td == NULL) {
199697             err = MEMORY_E;
199698         }
199699     }
199700 #endif
199701 
199702     if (err == MP_OKAY) {
199703 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
199704     !defined(WOLFSSL_SP_NO_MALLOC)
199705         t     = td;
199706         pre_p = (sp_point_1024*)(td + 6 * 32 * 2);
199707 #endif
199708 
199709         sp_1024_point_from_ecc_point_32(p, pm);
199710 
199711         err = sp_1024_mod_mul_norm_32(p->x, p->x, p1024_mod);
199712     }
199713     if (err == MP_OKAY) {
199714         err = sp_1024_mod_mul_norm_32(p->y, p->y, p1024_mod);
199715     }
199716     if (err == MP_OKAY) {
199717         XMEMCPY(p->z, p1024_norm_mod, sizeof(p1024_norm_mod));
199718         neg->infinity = 0;
199719         c->infinity = 0;
199720 
199721         /* Generate pre-computation table: 1, 3, ... , 31 */
199722         XMEMCPY(&pre_p[0], p, sizeof(sp_point_1024));
199723         /* [2]P for adding */
199724         sp_1024_proj_point_dbl_32(c, p, t);
199725 
199726         /* 1, 3, ... */
199727         for (i = 1; i < 16; i++) {
199728             sp_1024_proj_point_add_32(&pre_p[i], &pre_p[i-1], c, t);
199729             sp_1024_mont_map_32(&pre_p[i], t);
199730         }
199731 
199732         k = 0;
199733         j = sp_1024_order_op_pre[0] / 2;
199734         XMEMCPY(c, &pre_p[j], sizeof(sp_point_1024));
199735 
199736         for (j = 0; j < sp_1024_order_op_pre[1]; j++) {
199737             sp_1024_accum_dbl_calc_lc_32(precomp[k].x, precomp[k].y, c->x, c->y, t);
199738             k++;
199739             sp_1024_proj_point_dbl_32(c, c, t);
199740             sp_1024_mont_map_32(c, t);
199741         }
199742 
199743         for (i = 2; i < 290; i += 2) {
199744             j = sp_1024_order_op_pre[i];
199745             if (j > 0) {
199746                 sp_1024_accum_add_calc_lc_32(precomp[k].x, precomp[k].y,
199747                     pre_p[j/2].x, pre_p[j/2].y, c->x, c->y, t);
199748                 k++;
199749                 sp_1024_proj_point_add_32(c, c, &pre_p[j/2], t);
199750                 sp_1024_mont_map_32(c, t);
199751             }
199752             else {
199753                 XMEMCPY(neg->x, pre_p[-j / 2].x, sizeof(pre_p->x));
199754                 sp_1024_mont_sub_32(neg->y, p1024_mod, pre_p[-j / 2].y,
199755                         p1024_mod);
199756                 XMEMCPY(neg->z, pre_p[-j / 2].z, sizeof(pre_p->z));
199757 
199758                 sp_1024_accum_add_calc_lc_32(precomp[k].x, precomp[k].y,
199759                     neg->x, neg->y, c->x, c->y, t);
199760                 k++;
199761                 sp_1024_proj_point_add_32(c, c, neg, t);
199762                 sp_1024_mont_map_32(c, t);
199763             }
199764 
199765             for (j = 0; j < sp_1024_order_op_pre[i + 1]; j++) {
199766                 sp_1024_accum_dbl_calc_lc_32(precomp[k].x, precomp[k].y, c->x, c->y, t);
199767                 k++;
199768                 sp_1024_proj_point_dbl_32(c, c, t);
199769                 sp_1024_mont_map_32(c, t);
199770             }
199771         }
199772 
199773         *len = sizeof(sp_table_entry_1024) * 1167;
199774     }
199775 
199776 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
199777     !defined(WOLFSSL_SP_NO_MALLOC)
199778     if (td != NULL) {
199779         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
199780     }
199781 #endif
199782     sp_1024_point_free_32(neg, 1, NULL);
199783     sp_1024_point_free_32(c, 1, NULL);
199784     sp_1024_point_free_32(p, 1, NULL);
199785     return err;
199786 }
199787 
199788 /*
199789  * Calculate r = pairing <P, Q>.
199790  *
199791  * That is, multiply base in PF_p[q] by the scalar s, such that s.P = Q.
199792  *
199793  * Sliding window. Start at bottom and stop when bottom bit is one.
199794  * Subtract if top bit in window is one.
199795  * Width of 6 bits.
199796  * Pre-generate values in window (1, 3, ...) - only V.
199797  * Table contains all gradient l and a constant for each point on the path.
199798  *
199799  * @param  [in]  pm     First point on E(F_p)[q].
199800  * @param  [in]  qm     Second point on E(F_p)[q].
199801  * @param  [in]  res    Result of calculation.
199802  * @param  [in]  table  Precomputed table of values.
199803  * @param  [in]  len    Length of precomputed table of values in bytes.
199804  * @return  0 on success.
199805  * @return  MEMORY_E when dynamic memory allocation fails.
199806  */
sp_Pairing_precomp_1024(const ecc_point * pm,const ecc_point * qm,mp_int * res,const byte * table,word32 len)199807 int sp_Pairing_precomp_1024(const ecc_point* pm, const ecc_point* qm,
199808     mp_int* res, const byte* table, word32 len)
199809 {
199810     int err = 0;
199811 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
199812     !defined(WOLFSSL_SP_NO_MALLOC)
199813     sp_digit* td = NULL;
199814     sp_digit* t;
199815     sp_digit* vx;
199816     sp_digit* vy;
199817     sp_digit (*pre_vx)[64];
199818     sp_digit (*pre_vy)[64];
199819     sp_digit (*pre_nvy)[64];
199820 #else
199821     sp_digit t[6 * 2 * 32];
199822     sp_digit vx[2 * 32];
199823     sp_digit vy[2 * 32];
199824     sp_digit pre_vx[16][64];
199825     sp_digit pre_vy[16][64];
199826     sp_digit pre_nvy[16][64];
199827     sp_point_1024 pd;
199828     sp_point_1024 qd;
199829     sp_point_1024 cd;
199830 #endif
199831     sp_point_1024* p = NULL;
199832     sp_point_1024* q = NULL;
199833     sp_point_1024* c = NULL;
199834     sp_digit* r = NULL;
199835     int i;
199836     int j;
199837     int k;
199838     const sp_table_entry_1024* precomp = (const sp_table_entry_1024*)table;
199839 
199840     if (len < (int)(sizeof(sp_table_entry_1024) * 1167)) {
199841         err = BUFFER_E;
199842     }
199843 
199844     if (err == MP_OKAY) {
199845         err = sp_1024_point_new_32(NULL, pd, p);
199846     }
199847     if (err == MP_OKAY) {
199848         err = sp_1024_point_new_32(NULL, qd, q);
199849     }
199850     if (err == MP_OKAY) {
199851         err = sp_1024_point_new_32(NULL, cd, c);
199852     }
199853 
199854 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
199855     !defined(WOLFSSL_SP_NO_MALLOC)
199856     if (err == MP_OKAY) {
199857         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 56 * 32 * 2, NULL,
199858                                 DYNAMIC_TYPE_TMP_BUFFER);
199859         if (td == NULL) {
199860             err = MEMORY_E;
199861         }
199862     }
199863 #endif
199864 
199865     if (err == MP_OKAY) {
199866 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
199867     !defined(WOLFSSL_SP_NO_MALLOC)
199868         t       = td;
199869         vx      = td + 6 * 32 * 2;
199870         vy      = td + 7 * 32 * 2;
199871         pre_vx  = (sp_digit(*)[64])(td + 8 * 32 * 2);
199872         pre_vy  = (sp_digit(*)[64])(td + 24 * 32 * 2);
199873         pre_nvy = (sp_digit(*)[64])(td + 40 * 32 * 2);
199874 #endif
199875         r = vy;
199876 
199877         sp_1024_point_from_ecc_point_32(p, pm);
199878         sp_1024_point_from_ecc_point_32(q, qm);
199879 
199880         err = sp_1024_mod_mul_norm_32(p->x, p->x, p1024_mod);
199881     }
199882     if (err == MP_OKAY) {
199883         err = sp_1024_mod_mul_norm_32(p->y, p->y, p1024_mod);
199884     }
199885     if (err == MP_OKAY) {
199886         err = sp_1024_mod_mul_norm_32(p->z, p->z, p1024_mod);
199887     }
199888     if (err == MP_OKAY) {
199889         err = sp_1024_mod_mul_norm_32(q->x, q->x, p1024_mod);
199890     }
199891     if (err == MP_OKAY) {
199892         err = sp_1024_mod_mul_norm_32(q->y, q->y, p1024_mod);
199893     }
199894     if (err == MP_OKAY) {
199895         /* Generate pre-computation table: 1, 3, ... , 31 */
199896         XMEMSET(pre_vx[0], 0, sizeof(sp_digit) * 2 * 32);
199897         pre_vx[0][0] = 1;
199898         XMEMSET(pre_vy[0], 0, sizeof(sp_digit) * 2 * 32);
199899         sp_1024_mont_sub_32(pre_nvy[0], p1024_mod, pre_vy[0], p1024_mod);
199900 
199901         /* [2]P for adding */
199902         XMEMCPY(c, p, sizeof(sp_point_1024));
199903         XMEMSET(vx, 0, sizeof(sp_digit) * 2 * 32);
199904         vx[0] = 1;
199905         XMEMSET(vy, 0, sizeof(sp_digit) * 2 * 32);
199906         sp_1024_accumulate_line_dbl_32(vx, vy, c, q, t);
199907 
199908         /* 3, 5, ... */
199909         for (i = 1; i < 16; i++) {
199910             XMEMCPY(pre_vx[i], pre_vx[i-1], sizeof(sp_digit) * 2 * 32);
199911             XMEMCPY(pre_vy[i], pre_vy[i-1], sizeof(sp_digit) * 2 * 32);
199912             sp_1024_proj_mul_32(pre_vx[i], pre_vy[i], vx, vy, t);
199913             sp_1024_accumulate_line_add_n_32(pre_vx[i], pre_vy[i], c,
199914                 q, p, t, 0);
199915             sp_1024_mont_sub_32(pre_nvy[i], p1024_mod, pre_vy[i],
199916                 p1024_mod);
199917         }
199918 
199919         XMEMCPY(c->z, p1024_norm_mod, sizeof(sp_digit) * 32);
199920         c->infinity = 0;
199921         j = sp_1024_order_op_pre[0] / 2;
199922         XMEMCPY(vx, pre_vx[j], sizeof(sp_digit) * 2 * 32);
199923         XMEMCPY(vy, pre_vy[j], sizeof(sp_digit) * 2 * 32);
199924 
199925         k = 0;
199926         for (j = 0; j < sp_1024_order_op_pre[1]; j++) {
199927             /* Accumulate line into v and double point. */
199928             sp_1024_accumulate_line_lc_32(vx, vy, precomp[k].x,
199929                 precomp[k].y, q, t, 1);
199930             k++;
199931         }
199932 
199933         for (i = 2; i < 290; i += 2) {
199934             sp_1024_accumulate_line_lc_32(vx, vy, precomp[k].x,
199935                 precomp[k].y, q, t, 0);
199936             k++;
199937 
199938             j = sp_1024_order_op_pre[i];
199939             if (j > 0) {
199940                 j /= 2;
199941                 /* Accumulate line into v. */
199942                 sp_1024_proj_mul_32(vx, vy, pre_vx[j], pre_vy[j], t);
199943             }
199944             else {
199945                 j = -j / 2;
199946                 /* Accumulate line into v. */
199947                 sp_1024_proj_mul_32(vx, vy, pre_vx[j], pre_nvy[j], t);
199948             }
199949 
199950             for (j = 0; j < sp_1024_order_op_pre[i + 1]; j++) {
199951                 /* Accumulate line into v and double point. */
199952                 sp_1024_accumulate_line_lc_32(vx, vy, precomp[k].x,
199953                     precomp[k].y, q, t, 1);
199954                 k++;
199955             }
199956         }
199957 
199958         /* Final exponentiation */
199959         sp_1024_proj_sqr_32(vx, vy, t);
199960         sp_1024_proj_sqr_32(vx, vy, t);
199961 
199962         /* Convert from PF_p[q] to F_p */
199963         sp_1024_mont_inv_32(vx, vx, t);
199964         sp_1024_mont_mul_32(r, vx, vy, p1024_mod, p1024_mp_mod);
199965         XMEMSET(r + 32, 0, sizeof(sp_digit) * 32);
199966         sp_1024_mont_reduce_32(r, p1024_mod, p1024_mp_mod);
199967 
199968         err = sp_1024_to_mp(r, res);
199969     }
199970 
199971 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
199972     !defined(WOLFSSL_SP_NO_MALLOC)
199973     if (td != NULL) {
199974         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
199975     }
199976 #endif
199977     sp_1024_point_free_32(c, 1, NULL);
199978     sp_1024_point_free_32(q, 1, NULL);
199979     sp_1024_point_free_32(p, 1, NULL);
199980     return err;
199981 }
199982 
199983 #endif /* WOLFSSL_SP_SMALL */
199984 /* Returns 1 if the number of zero.
199985  * Implementation is constant time.
199986  *
199987  * a  Number to check.
199988  * returns 1 if the number is zero and 0 otherwise.
199989  */
sp_1024_iszero_32(const sp_digit * a)199990 static int sp_1024_iszero_32(const sp_digit* a)
199991 {
199992     return (a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] |
199993             a[8] | a[9] | a[10] | a[11] | a[12] | a[13] | a[14] | a[15] |
199994             a[16] | a[17] | a[18] | a[19] | a[20] | a[21] | a[22] | a[23] |
199995             a[24] | a[25] | a[26] | a[27] | a[28] | a[29] | a[30] | a[31]) == 0;
199996 }
199997 
199998 #ifdef HAVE_ECC_CHECK_KEY
199999 /* Read big endian unsigned byte array into r.
200000  *
200001  * r  A single precision integer.
200002  * size  Maximum number of bytes to convert
200003  * a  Byte array.
200004  * n  Number of bytes in array to read.
200005  */
sp_1024_from_bin(sp_digit * r,int size,const byte * a,int n)200006 static void sp_1024_from_bin(sp_digit* r, int size, const byte* a, int n)
200007 {
200008     int i;
200009     int j = 0;
200010     word32 s = 0;
200011 
200012     r[0] = 0;
200013     for (i = n-1; i >= 0; i--) {
200014         r[j] |= (((sp_digit)a[i]) << s);
200015         if (s >= 24U) {
200016             r[j] &= 0xffffffff;
200017             s = 32U - s;
200018             if (j + 1 >= size) {
200019                 break;
200020             }
200021             r[++j] = (sp_digit)a[i] >> s;
200022             s = 8U - s;
200023         }
200024         else {
200025             s += 8U;
200026         }
200027     }
200028 
200029     for (j++; j < size; j++) {
200030         r[j] = 0;
200031     }
200032 }
200033 
200034 /* Check that the x and y oridinates are a valid point on the curve.
200035  *
200036  * point  EC point.
200037  * heap   Heap to use if dynamically allocating.
200038  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
200039  * not on the curve and MP_OKAY otherwise.
200040  */
sp_1024_ecc_is_point_32(const sp_point_1024 * point,void * heap)200041 static int sp_1024_ecc_is_point_32(const sp_point_1024* point,
200042     void* heap)
200043 {
200044 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
200045     sp_digit* t1 = NULL;
200046 #else
200047     sp_digit t1[32 * 4];
200048 #endif
200049     sp_digit* t2 = NULL;
200050     sp_int32 n;
200051     int err = MP_OKAY;
200052 
200053 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
200054     t1 = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 4, heap, DYNAMIC_TYPE_ECC);
200055     if (t1 == NULL)
200056         err = MEMORY_E;
200057 #endif
200058     (void)heap;
200059 
200060     if (err == MP_OKAY) {
200061         t2 = t1 + 2 * 32;
200062 
200063         sp_1024_sqr_32(t1, point->y);
200064         (void)sp_1024_mod_32(t1, t1, p1024_mod);
200065         sp_1024_sqr_32(t2, point->x);
200066         (void)sp_1024_mod_32(t2, t2, p1024_mod);
200067         sp_1024_mul_32(t2, t2, point->x);
200068         (void)sp_1024_mod_32(t2, t2, p1024_mod);
200069         (void)sp_1024_sub_32(t2, p1024_mod, t2);
200070         sp_1024_mont_add_32(t1, t1, t2, p1024_mod);
200071 
200072         sp_1024_mont_add_32(t1, t1, point->x, p1024_mod);
200073         sp_1024_mont_add_32(t1, t1, point->x, p1024_mod);
200074         sp_1024_mont_add_32(t1, t1, point->x, p1024_mod);
200075 
200076         n = sp_1024_cmp_32(t1, p1024_mod);
200077         sp_1024_cond_sub_32(t1, t1, p1024_mod, 0 - ((n >= 0) ?
200078             (sp_digit)1 : (sp_digit)0));
200079         sp_1024_norm_32(t1);
200080         if (!sp_1024_iszero_32(t1)) {
200081             err = MP_VAL;
200082         }
200083     }
200084 
200085 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
200086     if (t1 != NULL)
200087         XFREE(t1, heap, DYNAMIC_TYPE_ECC);
200088 #endif
200089 
200090     return err;
200091 }
200092 
200093 /* Check that the x and y oridinates are a valid point on the curve.
200094  *
200095  * pX  X ordinate of EC point.
200096  * pY  Y ordinate of EC point.
200097  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
200098  * not on the curve and MP_OKAY otherwise.
200099  */
sp_ecc_is_point_1024(const mp_int * pX,const mp_int * pY)200100 int sp_ecc_is_point_1024(const mp_int* pX, const mp_int* pY)
200101 {
200102 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
200103     sp_point_1024* pub = NULL;
200104 #else
200105     sp_point_1024 pub[1];
200106 #endif
200107     const byte one[1] = { 1 };
200108     int err = MP_OKAY;
200109 
200110 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
200111     pub = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024), NULL,
200112                                        DYNAMIC_TYPE_ECC);
200113     if (pub == NULL)
200114         err = MEMORY_E;
200115 #endif
200116 
200117     if (err == MP_OKAY) {
200118         sp_1024_from_mp(pub->x, 32, pX);
200119         sp_1024_from_mp(pub->y, 32, pY);
200120         sp_1024_from_bin(pub->z, 32, one, (int)sizeof(one));
200121 
200122         err = sp_1024_ecc_is_point_32(pub, NULL);
200123     }
200124 
200125 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
200126     if (pub != NULL)
200127         XFREE(pub, NULL, DYNAMIC_TYPE_ECC);
200128 #endif
200129 
200130     return err;
200131 }
200132 
200133 /* Check that the private scalar generates the EC point (px, py), the point is
200134  * on the curve and the point has the correct order.
200135  *
200136  * pX     X ordinate of EC point.
200137  * pY     Y ordinate of EC point.
200138  * privm  Private scalar that generates EC point.
200139  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
200140  * not on the curve, ECC_INF_E if the point does not have the correct order,
200141  * ECC_PRIV_KEY_E when the private scalar doesn't generate the EC point and
200142  * MP_OKAY otherwise.
200143  */
sp_ecc_check_key_1024(const mp_int * pX,const mp_int * pY,const mp_int * privm,void * heap)200144 int sp_ecc_check_key_1024(const mp_int* pX, const mp_int* pY,
200145     const mp_int* privm, void* heap)
200146 {
200147 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
200148     sp_digit* priv = NULL;
200149     sp_point_1024* pub = NULL;
200150 #else
200151     sp_digit priv[32];
200152     sp_point_1024 pub[2];
200153 #endif
200154     sp_point_1024* p = NULL;
200155     const byte one[1] = { 1 };
200156     int err = MP_OKAY;
200157 
200158 
200159     /* Quick check the lengs of public key ordinates and private key are in
200160      * range. Proper check later.
200161      */
200162     if (((mp_count_bits(pX) > 1024) ||
200163         (mp_count_bits(pY) > 1024) ||
200164         ((privm != NULL) && (mp_count_bits(privm) > 1024)))) {
200165         err = ECC_OUT_OF_RANGE_E;
200166     }
200167 
200168 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
200169     if (err == MP_OKAY) {
200170         pub = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024) * 2, heap,
200171                                            DYNAMIC_TYPE_ECC);
200172         if (pub == NULL)
200173             err = MEMORY_E;
200174     }
200175     if (err == MP_OKAY && privm) {
200176         priv = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32, heap,
200177                                   DYNAMIC_TYPE_ECC);
200178         if (priv == NULL)
200179             err = MEMORY_E;
200180     }
200181 #endif
200182 
200183     if (err == MP_OKAY) {
200184         p = pub + 1;
200185 
200186         sp_1024_from_mp(pub->x, 32, pX);
200187         sp_1024_from_mp(pub->y, 32, pY);
200188         sp_1024_from_bin(pub->z, 32, one, (int)sizeof(one));
200189         if (privm)
200190             sp_1024_from_mp(priv, 32, privm);
200191 
200192         /* Check point at infinitiy. */
200193         if ((sp_1024_iszero_32(pub->x) != 0) &&
200194             (sp_1024_iszero_32(pub->y) != 0)) {
200195             err = ECC_INF_E;
200196         }
200197     }
200198 
200199     /* Check range of X and Y */
200200     if ((err == MP_OKAY) &&
200201             ((sp_1024_cmp_32(pub->x, p1024_mod) >= 0) ||
200202              (sp_1024_cmp_32(pub->y, p1024_mod) >= 0))) {
200203         err = ECC_OUT_OF_RANGE_E;
200204     }
200205 
200206     if (err == MP_OKAY) {
200207         /* Check point is on curve */
200208         err = sp_1024_ecc_is_point_32(pub, heap);
200209     }
200210 
200211     if (err == MP_OKAY) {
200212         /* Point * order = infinity */
200213             err = sp_1024_ecc_mulmod_32(p, pub, p1024_order, 1, 1, heap);
200214     }
200215     /* Check result is infinity */
200216     if ((err == MP_OKAY) && ((sp_1024_iszero_32(p->x) == 0) ||
200217                              (sp_1024_iszero_32(p->y) == 0))) {
200218         err = ECC_INF_E;
200219     }
200220 
200221     if (privm) {
200222         if (err == MP_OKAY) {
200223             /* Base * private = point */
200224                 err = sp_1024_ecc_mulmod_base_32(p, priv, 1, 1, heap);
200225         }
200226         /* Check result is public key */
200227         if ((err == MP_OKAY) &&
200228                 ((sp_1024_cmp_32(p->x, pub->x) != 0) ||
200229                  (sp_1024_cmp_32(p->y, pub->y) != 0))) {
200230             err = ECC_PRIV_KEY_E;
200231         }
200232     }
200233 
200234 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
200235     if (pub != NULL)
200236         XFREE(pub, heap, DYNAMIC_TYPE_ECC);
200237     if (priv != NULL)
200238         XFREE(priv, heap, DYNAMIC_TYPE_ECC);
200239 #endif
200240 
200241     return err;
200242 }
200243 #endif
200244 #endif /* WOLFSSL_SP_1024 */
200245 #endif /* WOLFSSL_HAVE_SP_ECC */
200246 #endif /* WOLFSSL_SP_ARM_THUMB_ASM */
200247 #endif /* WOLFSSL_HAVE_SP_RSA | WOLFSSL_HAVE_SP_DH | WOLFSSL_HAVE_SP_ECC */
200248