a945e522416edb9b2824dabddabbecd0df7e28a4
[platform/upstream/iotivity.git] / extlibs / tinydtls / ecc / asm_avr.inc
1 #define DEC_20 19
2 #define DEC_24 23
3 #define DEC_32 31
4
5 #define DEC(N) uECC_CONCAT(DEC_, N)
6
7 #define REPEAT_1(stuff) stuff
8 #define REPEAT_2(stuff) REPEAT_1(stuff) stuff
9 #define REPEAT_3(stuff) REPEAT_2(stuff) stuff
10 #define REPEAT_4(stuff) REPEAT_3(stuff) stuff
11 #define REPEAT_5(stuff) REPEAT_4(stuff) stuff
12 #define REPEAT_6(stuff) REPEAT_5(stuff) stuff
13 #define REPEAT_7(stuff) REPEAT_6(stuff) stuff
14 #define REPEAT_8(stuff) REPEAT_7(stuff) stuff
15 #define REPEAT_9(stuff) REPEAT_8(stuff) stuff
16 #define REPEAT_10(stuff) REPEAT_9(stuff) stuff
17 #define REPEAT_11(stuff) REPEAT_10(stuff) stuff
18 #define REPEAT_12(stuff) REPEAT_11(stuff) stuff
19 #define REPEAT_13(stuff) REPEAT_12(stuff) stuff
20 #define REPEAT_14(stuff) REPEAT_13(stuff) stuff
21 #define REPEAT_15(stuff) REPEAT_14(stuff) stuff
22 #define REPEAT_16(stuff) REPEAT_15(stuff) stuff
23 #define REPEAT_17(stuff) REPEAT_16(stuff) stuff
24 #define REPEAT_18(stuff) REPEAT_17(stuff) stuff
25 #define REPEAT_19(stuff) REPEAT_18(stuff) stuff
26 #define REPEAT_20(stuff) REPEAT_19(stuff) stuff
27 #define REPEAT_21(stuff) REPEAT_20(stuff) stuff
28 #define REPEAT_22(stuff) REPEAT_21(stuff) stuff
29 #define REPEAT_23(stuff) REPEAT_22(stuff) stuff
30 #define REPEAT_24(stuff) REPEAT_23(stuff) stuff
31 #define REPEAT_25(stuff) REPEAT_24(stuff) stuff
32 #define REPEAT_26(stuff) REPEAT_25(stuff) stuff
33 #define REPEAT_27(stuff) REPEAT_26(stuff) stuff
34 #define REPEAT_28(stuff) REPEAT_27(stuff) stuff
35 #define REPEAT_29(stuff) REPEAT_28(stuff) stuff
36 #define REPEAT_30(stuff) REPEAT_29(stuff) stuff
37 #define REPEAT_31(stuff) REPEAT_30(stuff) stuff
38 #define REPEAT_32(stuff) REPEAT_31(stuff) stuff
39
40 #define REPEAT(N, stuff) uECC_CONCAT(REPEAT_, N)(stuff)
41
42 #define STR2(thing) #thing
43 #define STR(thing) STR2(thing)
44
45 #if (uECC_ASM == uECC_asm_fast)
46
47 static void vli_clear(uint8_t *p_vli)
48 {
49     __asm__ volatile (
50         REPEAT(uECC_BYTES, "st %a[ptr]+, r1 \n\t")
51
52         : [ptr] "+e" (p_vli)
53         :
54         : "r0", "cc", "memory"
55     );
56 }
57 #define asm_clear 1
58
59 static void vli_set(uint8_t *p_dest, const uint8_t *p_src)
60 {
61     __asm__ volatile (
62         REPEAT(uECC_BYTES, "ld r0, %a[sptr]+ \n\t"
63             "st %a[dptr]+, r0 \n\t")
64         : [dptr] "+e" (p_dest), [sptr] "+e" (p_src)
65         :
66         : "r0", "cc", "memory"
67     );
68 }
69 #define asm_set 1
70
71 static void vli_rshift1(uint8_t *p_vli)
72 {
73     __asm__ volatile (
74         "adiw r30, " STR(uECC_BYTES) " \n\t"
75         "ld r0, -z \n\t"  /* Load byte. */
76         "lsr r0 \n\t" /* Shift. */
77         "st z, r0 \n\t"  /* Store the first result byte. */
78
79         /* Now we just do the remaining bytes with the carry bit (using ROR) */
80         REPEAT(DEC(uECC_BYTES), "ld r0, -z \n\t"
81             "ror r0 \n\t"
82             "st z, r0 \n\t")
83
84         : "+z" (p_vli)
85         :
86         : "r0", "cc", "memory"
87     );
88 }
89 #define asm_rshift1 1
90
91 /* Computes p_result = p_left + p_right, returning carry. Can modify in place. */
92 static uint8_t vli_add(uint8_t *p_result, uint8_t *p_left, uint8_t *p_right)
93 {
94     uint8_t l_carry = 0;
95     uint8_t l_left;
96     uint8_t l_right;
97
98     __asm__ volatile (
99         "ld %[left], x+ \n\t"  /* Load left byte. */
100         "ld %[right], y+ \n\t" /* Load right byte. */
101         "add %[left], %[right] \n\t" /* Add the first byte. */
102         "st z+, %[left] \n\t"  /* Store the first result byte. */
103         
104         /* Now we just do the remaining bytes with the carry bit (using ADC) */
105         REPEAT(DEC(uECC_BYTES), "ld %[left], x+ \n\t"
106             "ld %[right], y+ \n\t"
107             "adc %[left], %[right] \n\t"
108             "st z+, %[left] \n\t")
109         
110         "adc %[carry], %[carry] \n\t"    /* Store carry bit in l_carry. */
111         
112         "sbiw r28, " STR(uECC_BYTES) " \n\t" /* Restore Y */
113
114         : "+z" (p_result), "+x" (p_left),
115             [carry] "+r" (l_carry), [left] "=&r" (l_left), [right] "=&r" (l_right)
116         : "y" (p_right)
117         : "cc", "memory"
118     );
119     return l_carry;
120 }
121 #define asm_add 1
122
123 /* Computes p_result = p_left - p_right, returning borrow. Can modify in place. */
124 static uint8_t vli_sub(uint8_t *p_result, uint8_t *p_left, uint8_t *p_right)
125 {
126     uint8_t l_borrow = 0;
127     uint8_t l_left;
128     uint8_t l_right;
129
130     __asm__ volatile (
131         "ld %[left], x+ \n\t"  /* Load left byte. */
132         "ld %[right], y+ \n\t" /* Load right byte. */
133         "sub %[left], %[right] \n\t" /* Subtract the first byte. */
134         "st z+, %[left] \n\t"  /* Store the first result byte. */
135         
136         /* Now we just do the remaining bytes with the carry bit (using SBC) */
137         REPEAT(DEC(uECC_BYTES), "ld %[left], x+ \n\t"
138             "ld %[right], y+ \n\t"
139             "sbc %[left], %[right] \n\t"
140             "st z+, %[left] \n\t")
141         
142         "adc %[borrow], %[borrow] \n\t"    /* Store carry bit in l_borrow. */
143         
144         "sbiw r28, " STR(uECC_BYTES) " \n\t" /* Restore Y */
145
146         : "+z" (p_result), "+x" (p_left),
147             [borrow] "+r" (l_borrow), [left] "=&r" (l_left), [right] "=&r" (l_right)
148         : "y" (p_right)
149         : "cc", "memory"
150     );
151     return l_borrow;
152 }
153 #define asm_sub 1
154
155 #if (uECC_BYTES == 20)
156 __attribute((noinline))
157 static void vli_mult(uint8_t *p_result, uint8_t *p_left, uint8_t *p_right)
158 {
159     __asm__ volatile (
160         "adiw r30, 10 \n\t"
161         "adiw r28, 10 \n\t"
162         "ld r2, x+ \n\t"
163         "ld r3, x+ \n\t"
164         "ld r4, x+ \n\t"
165         "ld r5, x+ \n\t"
166         "ld r6, x+ \n\t"
167         "ld r7, x+ \n\t"
168         "ld r8, x+ \n\t"
169         "ld r9, x+ \n\t"
170         "ld r10, x+ \n\t"
171         "ld r11, x+ \n\t"
172         "ld r12, y+ \n\t"
173         "ld r13, y+ \n\t"
174         "ld r14, y+ \n\t"
175         "ld r15, y+ \n\t"
176         "ld r16, y+ \n\t"
177         "ld r17, y+ \n\t"
178         "ld r18, y+ \n\t"
179         "ld r19, y+ \n\t"
180         "ld r20, y+ \n\t"
181         "ld r21, y+ \n\t"
182         "ldi r25, 0 \n\t"
183
184         "ldi r23, 0 \n\t"
185         "mul r2, r12 \n\t"
186         "st z+, r0 \n\t"
187         "mov r22, r1 \n\t"
188
189         "ldi r24, 0 \n\t"
190         "mul r2, r13 \n\t"
191         "add r22, r0 \n\t"
192         "adc r23, r1 \n\t"
193         "mul r3, r12 \n\t"
194         "add r22, r0 \n\t"
195         "adc r23, r1 \n\t"
196         "adc r24, r25 \n\t"
197         "st z+, r22 \n\t"
198
199         "ldi r22, 0 \n\t"
200         "mul r2, r14 \n\t"
201         "add r23, r0 \n\t"
202         "adc r24, r1 \n\t"
203         "adc r22, r25 \n\t"
204         "mul r3, r13 \n\t"
205         "add r23, r0 \n\t"
206         "adc r24, r1 \n\t"
207         "adc r22, r25 \n\t"
208         "mul r4, r12 \n\t"
209         "add r23, r0 \n\t"
210         "adc r24, r1 \n\t"
211         "adc r22, r25 \n\t"
212         "st z+, r23 \n\t"
213
214         "ldi r23, 0 \n\t"
215         "mul r2, r15 \n\t"
216         "add r24, r0 \n\t"
217         "adc r22, r1 \n\t"
218         "adc r23, r25 \n\t"
219         "mul r3, r14 \n\t"
220         "add r24, r0 \n\t"
221         "adc r22, r1 \n\t"
222         "adc r23, r25 \n\t"
223         "mul r4, r13 \n\t"
224         "add r24, r0 \n\t"
225         "adc r22, r1 \n\t"
226         "adc r23, r25 \n\t"
227         "mul r5, r12 \n\t"
228         "add r24, r0 \n\t"
229         "adc r22, r1 \n\t"
230         "adc r23, r25 \n\t"
231         "st z+, r24 \n\t"
232
233         "ldi r24, 0 \n\t"
234         "mul r2, r16 \n\t"
235         "add r22, r0 \n\t"
236         "adc r23, r1 \n\t"
237         "adc r24, r25 \n\t"
238         "mul r3, r15 \n\t"
239         "add r22, r0 \n\t"
240         "adc r23, r1 \n\t"
241         "adc r24, r25 \n\t"
242         "mul r4, r14 \n\t"
243         "add r22, r0 \n\t"
244         "adc r23, r1 \n\t"
245         "adc r24, r25 \n\t"
246         "mul r5, r13 \n\t"
247         "add r22, r0 \n\t"
248         "adc r23, r1 \n\t"
249         "adc r24, r25 \n\t"
250         "mul r6, r12 \n\t"
251         "add r22, r0 \n\t"
252         "adc r23, r1 \n\t"
253         "adc r24, r25 \n\t"
254         "st z+, r22 \n\t"
255
256         "ldi r22, 0 \n\t"
257         "mul r2, r17 \n\t"
258         "add r23, r0 \n\t"
259         "adc r24, r1 \n\t"
260         "adc r22, r25 \n\t"
261         "mul r3, r16 \n\t"
262         "add r23, r0 \n\t"
263         "adc r24, r1 \n\t"
264         "adc r22, r25 \n\t"
265         "mul r4, r15 \n\t"
266         "add r23, r0 \n\t"
267         "adc r24, r1 \n\t"
268         "adc r22, r25 \n\t"
269         "mul r5, r14 \n\t"
270         "add r23, r0 \n\t"
271         "adc r24, r1 \n\t"
272         "adc r22, r25 \n\t"
273         "mul r6, r13 \n\t"
274         "add r23, r0 \n\t"
275         "adc r24, r1 \n\t"
276         "adc r22, r25 \n\t"
277         "mul r7, r12 \n\t"
278         "add r23, r0 \n\t"
279         "adc r24, r1 \n\t"
280         "adc r22, r25 \n\t"
281         "st z+, r23 \n\t"
282
283         "ldi r23, 0 \n\t"
284         "mul r2, r18 \n\t"
285         "add r24, r0 \n\t"
286         "adc r22, r1 \n\t"
287         "adc r23, r25 \n\t"
288         "mul r3, r17 \n\t"
289         "add r24, r0 \n\t"
290         "adc r22, r1 \n\t"
291         "adc r23, r25 \n\t"
292         "mul r4, r16 \n\t"
293         "add r24, r0 \n\t"
294         "adc r22, r1 \n\t"
295         "adc r23, r25 \n\t"
296         "mul r5, r15 \n\t"
297         "add r24, r0 \n\t"
298         "adc r22, r1 \n\t"
299         "adc r23, r25 \n\t"
300         "mul r6, r14 \n\t"
301         "add r24, r0 \n\t"
302         "adc r22, r1 \n\t"
303         "adc r23, r25 \n\t"
304         "mul r7, r13 \n\t"
305         "add r24, r0 \n\t"
306         "adc r22, r1 \n\t"
307         "adc r23, r25 \n\t"
308         "mul r8, r12 \n\t"
309         "add r24, r0 \n\t"
310         "adc r22, r1 \n\t"
311         "adc r23, r25 \n\t"
312         "st z+, r24 \n\t"
313
314         "ldi r24, 0 \n\t"
315         "mul r2, r19 \n\t"
316         "add r22, r0 \n\t"
317         "adc r23, r1 \n\t"
318         "adc r24, r25 \n\t"
319         "mul r3, r18 \n\t"
320         "add r22, r0 \n\t"
321         "adc r23, r1 \n\t"
322         "adc r24, r25 \n\t"
323         "mul r4, r17 \n\t"
324         "add r22, r0 \n\t"
325         "adc r23, r1 \n\t"
326         "adc r24, r25 \n\t"
327         "mul r5, r16 \n\t"
328         "add r22, r0 \n\t"
329         "adc r23, r1 \n\t"
330         "adc r24, r25 \n\t"
331         "mul r6, r15 \n\t"
332         "add r22, r0 \n\t"
333         "adc r23, r1 \n\t"
334         "adc r24, r25 \n\t"
335         "mul r7, r14 \n\t"
336         "add r22, r0 \n\t"
337         "adc r23, r1 \n\t"
338         "adc r24, r25 \n\t"
339         "mul r8, r13 \n\t"
340         "add r22, r0 \n\t"
341         "adc r23, r1 \n\t"
342         "adc r24, r25 \n\t"
343         "mul r9, r12 \n\t"
344         "add r22, r0 \n\t"
345         "adc r23, r1 \n\t"
346         "adc r24, r25 \n\t"
347         "st z+, r22 \n\t"
348
349         "ldi r22, 0 \n\t"
350         "mul r2, r20 \n\t"
351         "add r23, r0 \n\t"
352         "adc r24, r1 \n\t"
353         "adc r22, r25 \n\t"
354         "mul r3, r19 \n\t"
355         "add r23, r0 \n\t"
356         "adc r24, r1 \n\t"
357         "adc r22, r25 \n\t"
358         "mul r4, r18 \n\t"
359         "add r23, r0 \n\t"
360         "adc r24, r1 \n\t"
361         "adc r22, r25 \n\t"
362         "mul r5, r17 \n\t"
363         "add r23, r0 \n\t"
364         "adc r24, r1 \n\t"
365         "adc r22, r25 \n\t"
366         "mul r6, r16 \n\t"
367         "add r23, r0 \n\t"
368         "adc r24, r1 \n\t"
369         "adc r22, r25 \n\t"
370         "mul r7, r15 \n\t"
371         "add r23, r0 \n\t"
372         "adc r24, r1 \n\t"
373         "adc r22, r25 \n\t"
374         "mul r8, r14 \n\t"
375         "add r23, r0 \n\t"
376         "adc r24, r1 \n\t"
377         "adc r22, r25 \n\t"
378         "mul r9, r13 \n\t"
379         "add r23, r0 \n\t"
380         "adc r24, r1 \n\t"
381         "adc r22, r25 \n\t"
382         "mul r10, r12 \n\t"
383         "add r23, r0 \n\t"
384         "adc r24, r1 \n\t"
385         "adc r22, r25 \n\t"
386         "st z+, r23 \n\t"
387
388         "ldi r23, 0 \n\t"
389         "mul r2, r21 \n\t"
390         "add r24, r0 \n\t"
391         "adc r22, r1 \n\t"
392         "adc r23, r25 \n\t"
393         "mul r3, r20 \n\t"
394         "add r24, r0 \n\t"
395         "adc r22, r1 \n\t"
396         "adc r23, r25 \n\t"
397         "mul r4, r19 \n\t"
398         "add r24, r0 \n\t"
399         "adc r22, r1 \n\t"
400         "adc r23, r25 \n\t"
401         "mul r5, r18 \n\t"
402         "add r24, r0 \n\t"
403         "adc r22, r1 \n\t"
404         "adc r23, r25 \n\t"
405         "mul r6, r17 \n\t"
406         "add r24, r0 \n\t"
407         "adc r22, r1 \n\t"
408         "adc r23, r25 \n\t"
409         "mul r7, r16 \n\t"
410         "add r24, r0 \n\t"
411         "adc r22, r1 \n\t"
412         "adc r23, r25 \n\t"
413         "mul r8, r15 \n\t"
414         "add r24, r0 \n\t"
415         "adc r22, r1 \n\t"
416         "adc r23, r25 \n\t"
417         "mul r9, r14 \n\t"
418         "add r24, r0 \n\t"
419         "adc r22, r1 \n\t"
420         "adc r23, r25 \n\t"
421         "mul r10, r13 \n\t"
422         "add r24, r0 \n\t"
423         "adc r22, r1 \n\t"
424         "adc r23, r25 \n\t"
425         "mul r11, r12 \n\t"
426         "add r24, r0 \n\t"
427         "adc r22, r1 \n\t"
428         "adc r23, r25 \n\t"
429         "st z+, r24 \n\t"
430
431         "ldi r24, 0 \n\t"
432         "mul r3, r21 \n\t"
433         "add r22, r0 \n\t"
434         "adc r23, r1 \n\t"
435         "adc r24, r25 \n\t"
436         "mul r4, r20 \n\t"
437         "add r22, r0 \n\t"
438         "adc r23, r1 \n\t"
439         "adc r24, r25 \n\t"
440         "mul r5, r19 \n\t"
441         "add r22, r0 \n\t"
442         "adc r23, r1 \n\t"
443         "adc r24, r25 \n\t"
444         "mul r6, r18 \n\t"
445         "add r22, r0 \n\t"
446         "adc r23, r1 \n\t"
447         "adc r24, r25 \n\t"
448         "mul r7, r17 \n\t"
449         "add r22, r0 \n\t"
450         "adc r23, r1 \n\t"
451         "adc r24, r25 \n\t"
452         "mul r8, r16 \n\t"
453         "add r22, r0 \n\t"
454         "adc r23, r1 \n\t"
455         "adc r24, r25 \n\t"
456         "mul r9, r15 \n\t"
457         "add r22, r0 \n\t"
458         "adc r23, r1 \n\t"
459         "adc r24, r25 \n\t"
460         "mul r10, r14 \n\t"
461         "add r22, r0 \n\t"
462         "adc r23, r1 \n\t"
463         "adc r24, r25 \n\t"
464         "mul r11, r13 \n\t"
465         "add r22, r0 \n\t"
466         "adc r23, r1 \n\t"
467         "adc r24, r25 \n\t"
468         "st z+, r22 \n\t"
469
470         "ldi r22, 0 \n\t"
471         "mul r4, r21 \n\t"
472         "add r23, r0 \n\t"
473         "adc r24, r1 \n\t"
474         "adc r22, r25 \n\t"
475         "mul r5, r20 \n\t"
476         "add r23, r0 \n\t"
477         "adc r24, r1 \n\t"
478         "adc r22, r25 \n\t"
479         "mul r6, r19 \n\t"
480         "add r23, r0 \n\t"
481         "adc r24, r1 \n\t"
482         "adc r22, r25 \n\t"
483         "mul r7, r18 \n\t"
484         "add r23, r0 \n\t"
485         "adc r24, r1 \n\t"
486         "adc r22, r25 \n\t"
487         "mul r8, r17 \n\t"
488         "add r23, r0 \n\t"
489         "adc r24, r1 \n\t"
490         "adc r22, r25 \n\t"
491         "mul r9, r16 \n\t"
492         "add r23, r0 \n\t"
493         "adc r24, r1 \n\t"
494         "adc r22, r25 \n\t"
495         "mul r10, r15 \n\t"
496         "add r23, r0 \n\t"
497         "adc r24, r1 \n\t"
498         "adc r22, r25 \n\t"
499         "mul r11, r14 \n\t"
500         "add r23, r0 \n\t"
501         "adc r24, r1 \n\t"
502         "adc r22, r25 \n\t"
503         "st z+, r23 \n\t"
504
505         "ldi r23, 0 \n\t"
506         "mul r5, r21 \n\t"
507         "add r24, r0 \n\t"
508         "adc r22, r1 \n\t"
509         "adc r23, r25 \n\t"
510         "mul r6, r20 \n\t"
511         "add r24, r0 \n\t"
512         "adc r22, r1 \n\t"
513         "adc r23, r25 \n\t"
514         "mul r7, r19 \n\t"
515         "add r24, r0 \n\t"
516         "adc r22, r1 \n\t"
517         "adc r23, r25 \n\t"
518         "mul r8, r18 \n\t"
519         "add r24, r0 \n\t"
520         "adc r22, r1 \n\t"
521         "adc r23, r25 \n\t"
522         "mul r9, r17 \n\t"
523         "add r24, r0 \n\t"
524         "adc r22, r1 \n\t"
525         "adc r23, r25 \n\t"
526         "mul r10, r16 \n\t"
527         "add r24, r0 \n\t"
528         "adc r22, r1 \n\t"
529         "adc r23, r25 \n\t"
530         "mul r11, r15 \n\t"
531         "add r24, r0 \n\t"
532         "adc r22, r1 \n\t"
533         "adc r23, r25 \n\t"
534         "st z+, r24 \n\t"
535
536         "ldi r24, 0 \n\t"
537         "mul r6, r21 \n\t"
538         "add r22, r0 \n\t"
539         "adc r23, r1 \n\t"
540         "adc r24, r25 \n\t"
541         "mul r7, r20 \n\t"
542         "add r22, r0 \n\t"
543         "adc r23, r1 \n\t"
544         "adc r24, r25 \n\t"
545         "mul r8, r19 \n\t"
546         "add r22, r0 \n\t"
547         "adc r23, r1 \n\t"
548         "adc r24, r25 \n\t"
549         "mul r9, r18 \n\t"
550         "add r22, r0 \n\t"
551         "adc r23, r1 \n\t"
552         "adc r24, r25 \n\t"
553         "mul r10, r17 \n\t"
554         "add r22, r0 \n\t"
555         "adc r23, r1 \n\t"
556         "adc r24, r25 \n\t"
557         "mul r11, r16 \n\t"
558         "add r22, r0 \n\t"
559         "adc r23, r1 \n\t"
560         "adc r24, r25 \n\t"
561         "st z+, r22 \n\t"
562
563         "ldi r22, 0 \n\t"
564         "mul r7, r21 \n\t"
565         "add r23, r0 \n\t"
566         "adc r24, r1 \n\t"
567         "adc r22, r25 \n\t"
568         "mul r8, r20 \n\t"
569         "add r23, r0 \n\t"
570         "adc r24, r1 \n\t"
571         "adc r22, r25 \n\t"
572         "mul r9, r19 \n\t"
573         "add r23, r0 \n\t"
574         "adc r24, r1 \n\t"
575         "adc r22, r25 \n\t"
576         "mul r10, r18 \n\t"
577         "add r23, r0 \n\t"
578         "adc r24, r1 \n\t"
579         "adc r22, r25 \n\t"
580         "mul r11, r17 \n\t"
581         "add r23, r0 \n\t"
582         "adc r24, r1 \n\t"
583         "adc r22, r25 \n\t"
584         "st z+, r23 \n\t"
585
586         "ldi r23, 0 \n\t"
587         "mul r8, r21 \n\t"
588         "add r24, r0 \n\t"
589         "adc r22, r1 \n\t"
590         "adc r23, r25 \n\t"
591         "mul r9, r20 \n\t"
592         "add r24, r0 \n\t"
593         "adc r22, r1 \n\t"
594         "adc r23, r25 \n\t"
595         "mul r10, r19 \n\t"
596         "add r24, r0 \n\t"
597         "adc r22, r1 \n\t"
598         "adc r23, r25 \n\t"
599         "mul r11, r18 \n\t"
600         "add r24, r0 \n\t"
601         "adc r22, r1 \n\t"
602         "adc r23, r25 \n\t"
603         "st z+, r24 \n\t"
604
605         "ldi r24, 0 \n\t"
606         "mul r9, r21 \n\t"
607         "add r22, r0 \n\t"
608         "adc r23, r1 \n\t"
609         "adc r24, r25 \n\t"
610         "mul r10, r20 \n\t"
611         "add r22, r0 \n\t"
612         "adc r23, r1 \n\t"
613         "adc r24, r25 \n\t"
614         "mul r11, r19 \n\t"
615         "add r22, r0 \n\t"
616         "adc r23, r1 \n\t"
617         "adc r24, r25 \n\t"
618         "st z+, r22 \n\t"
619
620         "ldi r22, 0 \n\t"
621         "mul r10, r21 \n\t"
622         "add r23, r0 \n\t"
623         "adc r24, r1 \n\t"
624         "adc r22, r25 \n\t"
625         "mul r11, r20 \n\t"
626         "add r23, r0 \n\t"
627         "adc r24, r1 \n\t"
628         "adc r22, r25 \n\t"
629         "st z+, r23 \n\t"
630
631         "mul r11, r21 \n\t"
632         "add r24, r0 \n\t"
633         "adc r22, r1 \n\t"
634         "st z+, r24 \n\t"
635         "st z+, r22 \n\t"
636
637         "sbiw r30, 30 \n\t"
638         "sbiw r28, 20 \n\t"
639         "ld r12, y+ \n\t"
640         "ld r13, y+ \n\t"
641         "ld r14, y+ \n\t"
642         "ld r15, y+ \n\t"
643         "ld r16, y+ \n\t"
644         "ld r17, y+ \n\t"
645         "ld r18, y+ \n\t"
646         "ld r19, y+ \n\t"
647         "ld r20, y+ \n\t"
648         "ld r21, y+ \n\t"
649
650         "ldi r23, 0 \n\t"
651         "mul r2, r12 \n\t"
652         "st z+, r0 \n\t"
653         "mov r22, r1 \n\t"
654
655         "ldi r24, 0 \n\t"
656         "mul r2, r13 \n\t"
657         "add r22, r0 \n\t"
658         "adc r23, r1 \n\t"
659         "mul r3, r12 \n\t"
660         "add r22, r0 \n\t"
661         "adc r23, r1 \n\t"
662         "adc r24, r25 \n\t"
663         "st z+, r22 \n\t"
664
665         "ldi r22, 0 \n\t"
666         "mul r2, r14 \n\t"
667         "add r23, r0 \n\t"
668         "adc r24, r1 \n\t"
669         "adc r22, r25 \n\t"
670         "mul r3, r13 \n\t"
671         "add r23, r0 \n\t"
672         "adc r24, r1 \n\t"
673         "adc r22, r25 \n\t"
674         "mul r4, r12 \n\t"
675         "add r23, r0 \n\t"
676         "adc r24, r1 \n\t"
677         "adc r22, r25 \n\t"
678         "st z+, r23 \n\t"
679
680         "ldi r23, 0 \n\t"
681         "mul r2, r15 \n\t"
682         "add r24, r0 \n\t"
683         "adc r22, r1 \n\t"
684         "adc r23, r25 \n\t"
685         "mul r3, r14 \n\t"
686         "add r24, r0 \n\t"
687         "adc r22, r1 \n\t"
688         "adc r23, r25 \n\t"
689         "mul r4, r13 \n\t"
690         "add r24, r0 \n\t"
691         "adc r22, r1 \n\t"
692         "adc r23, r25 \n\t"
693         "mul r5, r12 \n\t"
694         "add r24, r0 \n\t"
695         "adc r22, r1 \n\t"
696         "adc r23, r25 \n\t"
697         "st z+, r24 \n\t"
698
699         "ldi r24, 0 \n\t"
700         "mul r2, r16 \n\t"
701         "add r22, r0 \n\t"
702         "adc r23, r1 \n\t"
703         "adc r24, r25 \n\t"
704         "mul r3, r15 \n\t"
705         "add r22, r0 \n\t"
706         "adc r23, r1 \n\t"
707         "adc r24, r25 \n\t"
708         "mul r4, r14 \n\t"
709         "add r22, r0 \n\t"
710         "adc r23, r1 \n\t"
711         "adc r24, r25 \n\t"
712         "mul r5, r13 \n\t"
713         "add r22, r0 \n\t"
714         "adc r23, r1 \n\t"
715         "adc r24, r25 \n\t"
716         "mul r6, r12 \n\t"
717         "add r22, r0 \n\t"
718         "adc r23, r1 \n\t"
719         "adc r24, r25 \n\t"
720         "st z+, r22 \n\t"
721
722         "ldi r22, 0 \n\t"
723         "mul r2, r17 \n\t"
724         "add r23, r0 \n\t"
725         "adc r24, r1 \n\t"
726         "adc r22, r25 \n\t"
727         "mul r3, r16 \n\t"
728         "add r23, r0 \n\t"
729         "adc r24, r1 \n\t"
730         "adc r22, r25 \n\t"
731         "mul r4, r15 \n\t"
732         "add r23, r0 \n\t"
733         "adc r24, r1 \n\t"
734         "adc r22, r25 \n\t"
735         "mul r5, r14 \n\t"
736         "add r23, r0 \n\t"
737         "adc r24, r1 \n\t"
738         "adc r22, r25 \n\t"
739         "mul r6, r13 \n\t"
740         "add r23, r0 \n\t"
741         "adc r24, r1 \n\t"
742         "adc r22, r25 \n\t"
743         "mul r7, r12 \n\t"
744         "add r23, r0 \n\t"
745         "adc r24, r1 \n\t"
746         "adc r22, r25 \n\t"
747         "st z+, r23 \n\t"
748
749         "ldi r23, 0 \n\t"
750         "mul r2, r18 \n\t"
751         "add r24, r0 \n\t"
752         "adc r22, r1 \n\t"
753         "adc r23, r25 \n\t"
754         "mul r3, r17 \n\t"
755         "add r24, r0 \n\t"
756         "adc r22, r1 \n\t"
757         "adc r23, r25 \n\t"
758         "mul r4, r16 \n\t"
759         "add r24, r0 \n\t"
760         "adc r22, r1 \n\t"
761         "adc r23, r25 \n\t"
762         "mul r5, r15 \n\t"
763         "add r24, r0 \n\t"
764         "adc r22, r1 \n\t"
765         "adc r23, r25 \n\t"
766         "mul r6, r14 \n\t"
767         "add r24, r0 \n\t"
768         "adc r22, r1 \n\t"
769         "adc r23, r25 \n\t"
770         "mul r7, r13 \n\t"
771         "add r24, r0 \n\t"
772         "adc r22, r1 \n\t"
773         "adc r23, r25 \n\t"
774         "mul r8, r12 \n\t"
775         "add r24, r0 \n\t"
776         "adc r22, r1 \n\t"
777         "adc r23, r25 \n\t"
778         "st z+, r24 \n\t"
779
780         "ldi r24, 0 \n\t"
781         "mul r2, r19 \n\t"
782         "add r22, r0 \n\t"
783         "adc r23, r1 \n\t"
784         "adc r24, r25 \n\t"
785         "mul r3, r18 \n\t"
786         "add r22, r0 \n\t"
787         "adc r23, r1 \n\t"
788         "adc r24, r25 \n\t"
789         "mul r4, r17 \n\t"
790         "add r22, r0 \n\t"
791         "adc r23, r1 \n\t"
792         "adc r24, r25 \n\t"
793         "mul r5, r16 \n\t"
794         "add r22, r0 \n\t"
795         "adc r23, r1 \n\t"
796         "adc r24, r25 \n\t"
797         "mul r6, r15 \n\t"
798         "add r22, r0 \n\t"
799         "adc r23, r1 \n\t"
800         "adc r24, r25 \n\t"
801         "mul r7, r14 \n\t"
802         "add r22, r0 \n\t"
803         "adc r23, r1 \n\t"
804         "adc r24, r25 \n\t"
805         "mul r8, r13 \n\t"
806         "add r22, r0 \n\t"
807         "adc r23, r1 \n\t"
808         "adc r24, r25 \n\t"
809         "mul r9, r12 \n\t"
810         "add r22, r0 \n\t"
811         "adc r23, r1 \n\t"
812         "adc r24, r25 \n\t"
813         "st z+, r22 \n\t"
814
815         "ldi r22, 0 \n\t"
816         "mul r2, r20 \n\t"
817         "add r23, r0 \n\t"
818         "adc r24, r1 \n\t"
819         "adc r22, r25 \n\t"
820         "mul r3, r19 \n\t"
821         "add r23, r0 \n\t"
822         "adc r24, r1 \n\t"
823         "adc r22, r25 \n\t"
824         "mul r4, r18 \n\t"
825         "add r23, r0 \n\t"
826         "adc r24, r1 \n\t"
827         "adc r22, r25 \n\t"
828         "mul r5, r17 \n\t"
829         "add r23, r0 \n\t"
830         "adc r24, r1 \n\t"
831         "adc r22, r25 \n\t"
832         "mul r6, r16 \n\t"
833         "add r23, r0 \n\t"
834         "adc r24, r1 \n\t"
835         "adc r22, r25 \n\t"
836         "mul r7, r15 \n\t"
837         "add r23, r0 \n\t"
838         "adc r24, r1 \n\t"
839         "adc r22, r25 \n\t"
840         "mul r8, r14 \n\t"
841         "add r23, r0 \n\t"
842         "adc r24, r1 \n\t"
843         "adc r22, r25 \n\t"
844         "mul r9, r13 \n\t"
845         "add r23, r0 \n\t"
846         "adc r24, r1 \n\t"
847         "adc r22, r25 \n\t"
848         "mul r10, r12 \n\t"
849         "add r23, r0 \n\t"
850         "adc r24, r1 \n\t"
851         "adc r22, r25 \n\t"
852         "st z+, r23 \n\t"
853
854         "ldi r23, 0 \n\t"
855         "mul r2, r21 \n\t"
856         "add r24, r0 \n\t"
857         "adc r22, r1 \n\t"
858         "adc r23, r25 \n\t"
859         "mul r3, r20 \n\t"
860         "add r24, r0 \n\t"
861         "adc r22, r1 \n\t"
862         "adc r23, r25 \n\t"
863         "mul r4, r19 \n\t"
864         "add r24, r0 \n\t"
865         "adc r22, r1 \n\t"
866         "adc r23, r25 \n\t"
867         "mul r5, r18 \n\t"
868         "add r24, r0 \n\t"
869         "adc r22, r1 \n\t"
870         "adc r23, r25 \n\t"
871         "mul r6, r17 \n\t"
872         "add r24, r0 \n\t"
873         "adc r22, r1 \n\t"
874         "adc r23, r25 \n\t"
875         "mul r7, r16 \n\t"
876         "add r24, r0 \n\t"
877         "adc r22, r1 \n\t"
878         "adc r23, r25 \n\t"
879         "mul r8, r15 \n\t"
880         "add r24, r0 \n\t"
881         "adc r22, r1 \n\t"
882         "adc r23, r25 \n\t"
883         "mul r9, r14 \n\t"
884         "add r24, r0 \n\t"
885         "adc r22, r1 \n\t"
886         "adc r23, r25 \n\t"
887         "mul r10, r13 \n\t"
888         "add r24, r0 \n\t"
889         "adc r22, r1 \n\t"
890         "adc r23, r25 \n\t"
891         "mul r11, r12 \n\t"
892         "add r24, r0 \n\t"
893         "adc r22, r1 \n\t"
894         "adc r23, r25 \n\t"
895         "st z+, r24 \n\t"
896
897         "ld r2, x+ \n\t"
898         "ldi r24, 0 \n\t"
899         "mul r3, r21 \n\t"
900         "add r22, r0 \n\t"
901         "adc r23, r1 \n\t"
902         "adc r24, r25 \n\t"
903         "mul r4, r20 \n\t"
904         "add r22, r0 \n\t"
905         "adc r23, r1 \n\t"
906         "adc r24, r25 \n\t"
907         "mul r5, r19 \n\t"
908         "add r22, r0 \n\t"
909         "adc r23, r1 \n\t"
910         "adc r24, r25 \n\t"
911         "mul r6, r18 \n\t"
912         "add r22, r0 \n\t"
913         "adc r23, r1 \n\t"
914         "adc r24, r25 \n\t"
915         "mul r7, r17 \n\t"
916         "add r22, r0 \n\t"
917         "adc r23, r1 \n\t"
918         "adc r24, r25 \n\t"
919         "mul r8, r16 \n\t"
920         "add r22, r0 \n\t"
921         "adc r23, r1 \n\t"
922         "adc r24, r25 \n\t"
923         "mul r9, r15 \n\t"
924         "add r22, r0 \n\t"
925         "adc r23, r1 \n\t"
926         "adc r24, r25 \n\t"
927         "mul r10, r14 \n\t"
928         "add r22, r0 \n\t"
929         "adc r23, r1 \n\t"
930         "adc r24, r25 \n\t"
931         "mul r11, r13 \n\t"
932         "add r22, r0 \n\t"
933         "adc r23, r1 \n\t"
934         "adc r24, r25 \n\t"
935         "mul r2, r12 \n\t"
936         "add r22, r0 \n\t"
937         "adc r23, r1 \n\t"
938         "adc r24, r25 \n\t"
939         "ld r0, z \n\t"
940         "add r22, r0 \n\t"
941         "adc r23, r25 \n\t"
942         "adc r24, r25 \n\t"
943         "st z+, r22 \n\t"
944
945         "ld r3, x+ \n\t"
946         "ldi r22, 0 \n\t"
947         "mul r4, r21 \n\t"
948         "add r23, r0 \n\t"
949         "adc r24, r1 \n\t"
950         "adc r22, r25 \n\t"
951         "mul r5, r20 \n\t"
952         "add r23, r0 \n\t"
953         "adc r24, r1 \n\t"
954         "adc r22, r25 \n\t"
955         "mul r6, r19 \n\t"
956         "add r23, r0 \n\t"
957         "adc r24, r1 \n\t"
958         "adc r22, r25 \n\t"
959         "mul r7, r18 \n\t"
960         "add r23, r0 \n\t"
961         "adc r24, r1 \n\t"
962         "adc r22, r25 \n\t"
963         "mul r8, r17 \n\t"
964         "add r23, r0 \n\t"
965         "adc r24, r1 \n\t"
966         "adc r22, r25 \n\t"
967         "mul r9, r16 \n\t"
968         "add r23, r0 \n\t"
969         "adc r24, r1 \n\t"
970         "adc r22, r25 \n\t"
971         "mul r10, r15 \n\t"
972         "add r23, r0 \n\t"
973         "adc r24, r1 \n\t"
974         "adc r22, r25 \n\t"
975         "mul r11, r14 \n\t"
976         "add r23, r0 \n\t"
977         "adc r24, r1 \n\t"
978         "adc r22, r25 \n\t"
979         "mul r2, r13 \n\t"
980         "add r23, r0 \n\t"
981         "adc r24, r1 \n\t"
982         "adc r22, r25 \n\t"
983         "mul r3, r12 \n\t"
984         "add r23, r0 \n\t"
985         "adc r24, r1 \n\t"
986         "adc r22, r25 \n\t"
987         "ld r0, z \n\t"
988         "add r23, r0 \n\t"
989         "adc r24, r25 \n\t"
990         "adc r22, r25 \n\t"
991         "st z+, r23 \n\t"
992
993         "ld r4, x+ \n\t"
994         "ldi r23, 0 \n\t"
995         "mul r5, r21 \n\t"
996         "add r24, r0 \n\t"
997         "adc r22, r1 \n\t"
998         "adc r23, r25 \n\t"
999         "mul r6, r20 \n\t"
1000         "add r24, r0 \n\t"
1001         "adc r22, r1 \n\t"
1002         "adc r23, r25 \n\t"
1003         "mul r7, r19 \n\t"
1004         "add r24, r0 \n\t"
1005         "adc r22, r1 \n\t"
1006         "adc r23, r25 \n\t"
1007         "mul r8, r18 \n\t"
1008         "add r24, r0 \n\t"
1009         "adc r22, r1 \n\t"
1010         "adc r23, r25 \n\t"
1011         "mul r9, r17 \n\t"
1012         "add r24, r0 \n\t"
1013         "adc r22, r1 \n\t"
1014         "adc r23, r25 \n\t"
1015         "mul r10, r16 \n\t"
1016         "add r24, r0 \n\t"
1017         "adc r22, r1 \n\t"
1018         "adc r23, r25 \n\t"
1019         "mul r11, r15 \n\t"
1020         "add r24, r0 \n\t"
1021         "adc r22, r1 \n\t"
1022         "adc r23, r25 \n\t"
1023         "mul r2, r14 \n\t"
1024         "add r24, r0 \n\t"
1025         "adc r22, r1 \n\t"
1026         "adc r23, r25 \n\t"
1027         "mul r3, r13 \n\t"
1028         "add r24, r0 \n\t"
1029         "adc r22, r1 \n\t"
1030         "adc r23, r25 \n\t"
1031         "mul r4, r12 \n\t"
1032         "add r24, r0 \n\t"
1033         "adc r22, r1 \n\t"
1034         "adc r23, r25 \n\t"
1035         "ld r0, z \n\t"
1036         "add r24, r0 \n\t"
1037         "adc r22, r25 \n\t"
1038         "adc r23, r25 \n\t"
1039         "st z+, r24 \n\t"
1040
1041         "ld r5, x+ \n\t"
1042         "ldi r24, 0 \n\t"
1043         "mul r6, r21 \n\t"
1044         "add r22, r0 \n\t"
1045         "adc r23, r1 \n\t"
1046         "adc r24, r25 \n\t"
1047         "mul r7, r20 \n\t"
1048         "add r22, r0 \n\t"
1049         "adc r23, r1 \n\t"
1050         "adc r24, r25 \n\t"
1051         "mul r8, r19 \n\t"
1052         "add r22, r0 \n\t"
1053         "adc r23, r1 \n\t"
1054         "adc r24, r25 \n\t"
1055         "mul r9, r18 \n\t"
1056         "add r22, r0 \n\t"
1057         "adc r23, r1 \n\t"
1058         "adc r24, r25 \n\t"
1059         "mul r10, r17 \n\t"
1060         "add r22, r0 \n\t"
1061         "adc r23, r1 \n\t"
1062         "adc r24, r25 \n\t"
1063         "mul r11, r16 \n\t"
1064         "add r22, r0 \n\t"
1065         "adc r23, r1 \n\t"
1066         "adc r24, r25 \n\t"
1067         "mul r2, r15 \n\t"
1068         "add r22, r0 \n\t"
1069         "adc r23, r1 \n\t"
1070         "adc r24, r25 \n\t"
1071         "mul r3, r14 \n\t"
1072         "add r22, r0 \n\t"
1073         "adc r23, r1 \n\t"
1074         "adc r24, r25 \n\t"
1075         "mul r4, r13 \n\t"
1076         "add r22, r0 \n\t"
1077         "adc r23, r1 \n\t"
1078         "adc r24, r25 \n\t"
1079         "mul r5, r12 \n\t"
1080         "add r22, r0 \n\t"
1081         "adc r23, r1 \n\t"
1082         "adc r24, r25 \n\t"
1083         "ld r0, z \n\t"
1084         "add r22, r0 \n\t"
1085         "adc r23, r25 \n\t"
1086         "adc r24, r25 \n\t"
1087         "st z+, r22 \n\t"
1088
1089         "ld r6, x+ \n\t"
1090         "ldi r22, 0 \n\t"
1091         "mul r7, r21 \n\t"
1092         "add r23, r0 \n\t"
1093         "adc r24, r1 \n\t"
1094         "adc r22, r25 \n\t"
1095         "mul r8, r20 \n\t"
1096         "add r23, r0 \n\t"
1097         "adc r24, r1 \n\t"
1098         "adc r22, r25 \n\t"
1099         "mul r9, r19 \n\t"
1100         "add r23, r0 \n\t"
1101         "adc r24, r1 \n\t"
1102         "adc r22, r25 \n\t"
1103         "mul r10, r18 \n\t"
1104         "add r23, r0 \n\t"
1105         "adc r24, r1 \n\t"
1106         "adc r22, r25 \n\t"
1107         "mul r11, r17 \n\t"
1108         "add r23, r0 \n\t"
1109         "adc r24, r1 \n\t"
1110         "adc r22, r25 \n\t"
1111         "mul r2, r16 \n\t"
1112         "add r23, r0 \n\t"
1113         "adc r24, r1 \n\t"
1114         "adc r22, r25 \n\t"
1115         "mul r3, r15 \n\t"
1116         "add r23, r0 \n\t"
1117         "adc r24, r1 \n\t"
1118         "adc r22, r25 \n\t"
1119         "mul r4, r14 \n\t"
1120         "add r23, r0 \n\t"
1121         "adc r24, r1 \n\t"
1122         "adc r22, r25 \n\t"
1123         "mul r5, r13 \n\t"
1124         "add r23, r0 \n\t"
1125         "adc r24, r1 \n\t"
1126         "adc r22, r25 \n\t"
1127         "mul r6, r12 \n\t"
1128         "add r23, r0 \n\t"
1129         "adc r24, r1 \n\t"
1130         "adc r22, r25 \n\t"
1131         "ld r0, z \n\t"
1132         "add r23, r0 \n\t"
1133         "adc r24, r25 \n\t"
1134         "adc r22, r25 \n\t"
1135         "st z+, r23 \n\t"
1136
1137         "ld r7, x+ \n\t"
1138         "ldi r23, 0 \n\t"
1139         "mul r8, r21 \n\t"
1140         "add r24, r0 \n\t"
1141         "adc r22, r1 \n\t"
1142         "adc r23, r25 \n\t"
1143         "mul r9, r20 \n\t"
1144         "add r24, r0 \n\t"
1145         "adc r22, r1 \n\t"
1146         "adc r23, r25 \n\t"
1147         "mul r10, r19 \n\t"
1148         "add r24, r0 \n\t"
1149         "adc r22, r1 \n\t"
1150         "adc r23, r25 \n\t"
1151         "mul r11, r18 \n\t"
1152         "add r24, r0 \n\t"
1153         "adc r22, r1 \n\t"
1154         "adc r23, r25 \n\t"
1155         "mul r2, r17 \n\t"
1156         "add r24, r0 \n\t"
1157         "adc r22, r1 \n\t"
1158         "adc r23, r25 \n\t"
1159         "mul r3, r16 \n\t"
1160         "add r24, r0 \n\t"
1161         "adc r22, r1 \n\t"
1162         "adc r23, r25 \n\t"
1163         "mul r4, r15 \n\t"
1164         "add r24, r0 \n\t"
1165         "adc r22, r1 \n\t"
1166         "adc r23, r25 \n\t"
1167         "mul r5, r14 \n\t"
1168         "add r24, r0 \n\t"
1169         "adc r22, r1 \n\t"
1170         "adc r23, r25 \n\t"
1171         "mul r6, r13 \n\t"
1172         "add r24, r0 \n\t"
1173         "adc r22, r1 \n\t"
1174         "adc r23, r25 \n\t"
1175         "mul r7, r12 \n\t"
1176         "add r24, r0 \n\t"
1177         "adc r22, r1 \n\t"
1178         "adc r23, r25 \n\t"
1179         "ld r0, z \n\t"
1180         "add r24, r0 \n\t"
1181         "adc r22, r25 \n\t"
1182         "adc r23, r25 \n\t"
1183         "st z+, r24 \n\t"
1184
1185         "ld r8, x+ \n\t"
1186         "ldi r24, 0 \n\t"
1187         "mul r9, r21 \n\t"
1188         "add r22, r0 \n\t"
1189         "adc r23, r1 \n\t"
1190         "adc r24, r25 \n\t"
1191         "mul r10, r20 \n\t"
1192         "add r22, r0 \n\t"
1193         "adc r23, r1 \n\t"
1194         "adc r24, r25 \n\t"
1195         "mul r11, r19 \n\t"
1196         "add r22, r0 \n\t"
1197         "adc r23, r1 \n\t"
1198         "adc r24, r25 \n\t"
1199         "mul r2, r18 \n\t"
1200         "add r22, r0 \n\t"
1201         "adc r23, r1 \n\t"
1202         "adc r24, r25 \n\t"
1203         "mul r3, r17 \n\t"
1204         "add r22, r0 \n\t"
1205         "adc r23, r1 \n\t"
1206         "adc r24, r25 \n\t"
1207         "mul r4, r16 \n\t"
1208         "add r22, r0 \n\t"
1209         "adc r23, r1 \n\t"
1210         "adc r24, r25 \n\t"
1211         "mul r5, r15 \n\t"
1212         "add r22, r0 \n\t"
1213         "adc r23, r1 \n\t"
1214         "adc r24, r25 \n\t"
1215         "mul r6, r14 \n\t"
1216         "add r22, r0 \n\t"
1217         "adc r23, r1 \n\t"
1218         "adc r24, r25 \n\t"
1219         "mul r7, r13 \n\t"
1220         "add r22, r0 \n\t"
1221         "adc r23, r1 \n\t"
1222         "adc r24, r25 \n\t"
1223         "mul r8, r12 \n\t"
1224         "add r22, r0 \n\t"
1225         "adc r23, r1 \n\t"
1226         "adc r24, r25 \n\t"
1227         "ld r0, z \n\t"
1228         "add r22, r0 \n\t"
1229         "adc r23, r25 \n\t"
1230         "adc r24, r25 \n\t"
1231         "st z+, r22 \n\t"
1232
1233         "ld r9, x+ \n\t"
1234         "ldi r22, 0 \n\t"
1235         "mul r10, r21 \n\t"
1236         "add r23, r0 \n\t"
1237         "adc r24, r1 \n\t"
1238         "adc r22, r25 \n\t"
1239         "mul r11, r20 \n\t"
1240         "add r23, r0 \n\t"
1241         "adc r24, r1 \n\t"
1242         "adc r22, r25 \n\t"
1243         "mul r2, r19 \n\t"
1244         "add r23, r0 \n\t"
1245         "adc r24, r1 \n\t"
1246         "adc r22, r25 \n\t"
1247         "mul r3, r18 \n\t"
1248         "add r23, r0 \n\t"
1249         "adc r24, r1 \n\t"
1250         "adc r22, r25 \n\t"
1251         "mul r4, r17 \n\t"
1252         "add r23, r0 \n\t"
1253         "adc r24, r1 \n\t"
1254         "adc r22, r25 \n\t"
1255         "mul r5, r16 \n\t"
1256         "add r23, r0 \n\t"
1257         "adc r24, r1 \n\t"
1258         "adc r22, r25 \n\t"
1259         "mul r6, r15 \n\t"
1260         "add r23, r0 \n\t"
1261         "adc r24, r1 \n\t"
1262         "adc r22, r25 \n\t"
1263         "mul r7, r14 \n\t"
1264         "add r23, r0 \n\t"
1265         "adc r24, r1 \n\t"
1266         "adc r22, r25 \n\t"
1267         "mul r8, r13 \n\t"
1268         "add r23, r0 \n\t"
1269         "adc r24, r1 \n\t"
1270         "adc r22, r25 \n\t"
1271         "mul r9, r12 \n\t"
1272         "add r23, r0 \n\t"
1273         "adc r24, r1 \n\t"
1274         "adc r22, r25 \n\t"
1275         "ld r0, z \n\t"
1276         "add r23, r0 \n\t"
1277         "adc r24, r25 \n\t"
1278         "adc r22, r25 \n\t"
1279         "st z+, r23 \n\t"
1280
1281         "ld r10, x+ \n\t"
1282         "ldi r23, 0 \n\t"
1283         "mul r11, r21 \n\t"
1284         "add r24, r0 \n\t"
1285         "adc r22, r1 \n\t"
1286         "adc r23, r25 \n\t"
1287         "mul r2, r20 \n\t"
1288         "add r24, r0 \n\t"
1289         "adc r22, r1 \n\t"
1290         "adc r23, r25 \n\t"
1291         "mul r3, r19 \n\t"
1292         "add r24, r0 \n\t"
1293         "adc r22, r1 \n\t"
1294         "adc r23, r25 \n\t"
1295         "mul r4, r18 \n\t"
1296         "add r24, r0 \n\t"
1297         "adc r22, r1 \n\t"
1298         "adc r23, r25 \n\t"
1299         "mul r5, r17 \n\t"
1300         "add r24, r0 \n\t"
1301         "adc r22, r1 \n\t"
1302         "adc r23, r25 \n\t"
1303         "mul r6, r16 \n\t"
1304         "add r24, r0 \n\t"
1305         "adc r22, r1 \n\t"
1306         "adc r23, r25 \n\t"
1307         "mul r7, r15 \n\t"
1308         "add r24, r0 \n\t"
1309         "adc r22, r1 \n\t"
1310         "adc r23, r25 \n\t"
1311         "mul r8, r14 \n\t"
1312         "add r24, r0 \n\t"
1313         "adc r22, r1 \n\t"
1314         "adc r23, r25 \n\t"
1315         "mul r9, r13 \n\t"
1316         "add r24, r0 \n\t"
1317         "adc r22, r1 \n\t"
1318         "adc r23, r25 \n\t"
1319         "mul r10, r12 \n\t"
1320         "add r24, r0 \n\t"
1321         "adc r22, r1 \n\t"
1322         "adc r23, r25 \n\t"
1323         "ld r0, z \n\t"
1324         "add r24, r0 \n\t"
1325         "adc r22, r25 \n\t"
1326         "adc r23, r25 \n\t"
1327         "st z+, r24 \n\t"
1328
1329         "ld r11, x+ \n\t"
1330         "ldi r24, 0 \n\t"
1331         "mul r2, r21 \n\t"
1332         "add r22, r0 \n\t"
1333         "adc r23, r1 \n\t"
1334         "adc r24, r25 \n\t"
1335         "mul r3, r20 \n\t"
1336         "add r22, r0 \n\t"
1337         "adc r23, r1 \n\t"
1338         "adc r24, r25 \n\t"
1339         "mul r4, r19 \n\t"
1340         "add r22, r0 \n\t"
1341         "adc r23, r1 \n\t"
1342         "adc r24, r25 \n\t"
1343         "mul r5, r18 \n\t"
1344         "add r22, r0 \n\t"
1345         "adc r23, r1 \n\t"
1346         "adc r24, r25 \n\t"
1347         "mul r6, r17 \n\t"
1348         "add r22, r0 \n\t"
1349         "adc r23, r1 \n\t"
1350         "adc r24, r25 \n\t"
1351         "mul r7, r16 \n\t"
1352         "add r22, r0 \n\t"
1353         "adc r23, r1 \n\t"
1354         "adc r24, r25 \n\t"
1355         "mul r8, r15 \n\t"
1356         "add r22, r0 \n\t"
1357         "adc r23, r1 \n\t"
1358         "adc r24, r25 \n\t"
1359         "mul r9, r14 \n\t"
1360         "add r22, r0 \n\t"
1361         "adc r23, r1 \n\t"
1362         "adc r24, r25 \n\t"
1363         "mul r10, r13 \n\t"
1364         "add r22, r0 \n\t"
1365         "adc r23, r1 \n\t"
1366         "adc r24, r25 \n\t"
1367         "mul r11, r12 \n\t"
1368         "add r22, r0 \n\t"
1369         "adc r23, r1 \n\t"
1370         "adc r24, r25 \n\t"
1371         "ld r0, z \n\t"
1372         "add r22, r0 \n\t"
1373         "adc r23, r25 \n\t"
1374         "adc r24, r25 \n\t"
1375         "st z+, r22 \n\t"
1376
1377         "ld r12, y+ \n\t"
1378         "ldi r22, 0 \n\t"
1379         "mul r2, r12 \n\t"
1380         "add r23, r0 \n\t"
1381         "adc r24, r1 \n\t"
1382         "adc r22, r25 \n\t"
1383         "mul r3, r21 \n\t"
1384         "add r23, r0 \n\t"
1385         "adc r24, r1 \n\t"
1386         "adc r22, r25 \n\t"
1387         "mul r4, r20 \n\t"
1388         "add r23, r0 \n\t"
1389         "adc r24, r1 \n\t"
1390         "adc r22, r25 \n\t"
1391         "mul r5, r19 \n\t"
1392         "add r23, r0 \n\t"
1393         "adc r24, r1 \n\t"
1394         "adc r22, r25 \n\t"
1395         "mul r6, r18 \n\t"
1396         "add r23, r0 \n\t"
1397         "adc r24, r1 \n\t"
1398         "adc r22, r25 \n\t"
1399         "mul r7, r17 \n\t"
1400         "add r23, r0 \n\t"
1401         "adc r24, r1 \n\t"
1402         "adc r22, r25 \n\t"
1403         "mul r8, r16 \n\t"
1404         "add r23, r0 \n\t"
1405         "adc r24, r1 \n\t"
1406         "adc r22, r25 \n\t"
1407         "mul r9, r15 \n\t"
1408         "add r23, r0 \n\t"
1409         "adc r24, r1 \n\t"
1410         "adc r22, r25 \n\t"
1411         "mul r10, r14 \n\t"
1412         "add r23, r0 \n\t"
1413         "adc r24, r1 \n\t"
1414         "adc r22, r25 \n\t"
1415         "mul r11, r13 \n\t"
1416         "add r23, r0 \n\t"
1417         "adc r24, r1 \n\t"
1418         "adc r22, r25 \n\t"
1419         "ld r0, z \n\t"
1420         "add r23, r0 \n\t"
1421         "adc r24, r25 \n\t"
1422         "adc r22, r25 \n\t"
1423         "st z+, r23 \n\t"
1424
1425         "ld r13, y+ \n\t"
1426         "ldi r23, 0 \n\t"
1427         "mul r2, r13 \n\t"
1428         "add r24, r0 \n\t"
1429         "adc r22, r1 \n\t"
1430         "adc r23, r25 \n\t"
1431         "mul r3, r12 \n\t"
1432         "add r24, r0 \n\t"
1433         "adc r22, r1 \n\t"
1434         "adc r23, r25 \n\t"
1435         "mul r4, r21 \n\t"
1436         "add r24, r0 \n\t"
1437         "adc r22, r1 \n\t"
1438         "adc r23, r25 \n\t"
1439         "mul r5, r20 \n\t"
1440         "add r24, r0 \n\t"
1441         "adc r22, r1 \n\t"
1442         "adc r23, r25 \n\t"
1443         "mul r6, r19 \n\t"
1444         "add r24, r0 \n\t"
1445         "adc r22, r1 \n\t"
1446         "adc r23, r25 \n\t"
1447         "mul r7, r18 \n\t"
1448         "add r24, r0 \n\t"
1449         "adc r22, r1 \n\t"
1450         "adc r23, r25 \n\t"
1451         "mul r8, r17 \n\t"
1452         "add r24, r0 \n\t"
1453         "adc r22, r1 \n\t"
1454         "adc r23, r25 \n\t"
1455         "mul r9, r16 \n\t"
1456         "add r24, r0 \n\t"
1457         "adc r22, r1 \n\t"
1458         "adc r23, r25 \n\t"
1459         "mul r10, r15 \n\t"
1460         "add r24, r0 \n\t"
1461         "adc r22, r1 \n\t"
1462         "adc r23, r25 \n\t"
1463         "mul r11, r14 \n\t"
1464         "add r24, r0 \n\t"
1465         "adc r22, r1 \n\t"
1466         "adc r23, r25 \n\t"
1467         "ld r0, z \n\t"
1468         "add r24, r0 \n\t"
1469         "adc r22, r25 \n\t"
1470         "adc r23, r25 \n\t"
1471         "st z+, r24 \n\t"
1472
1473         "ld r14, y+ \n\t"
1474         "ldi r24, 0 \n\t"
1475         "mul r2, r14 \n\t"
1476         "add r22, r0 \n\t"
1477         "adc r23, r1 \n\t"
1478         "adc r24, r25 \n\t"
1479         "mul r3, r13 \n\t"
1480         "add r22, r0 \n\t"
1481         "adc r23, r1 \n\t"
1482         "adc r24, r25 \n\t"
1483         "mul r4, r12 \n\t"
1484         "add r22, r0 \n\t"
1485         "adc r23, r1 \n\t"
1486         "adc r24, r25 \n\t"
1487         "mul r5, r21 \n\t"
1488         "add r22, r0 \n\t"
1489         "adc r23, r1 \n\t"
1490         "adc r24, r25 \n\t"
1491         "mul r6, r20 \n\t"
1492         "add r22, r0 \n\t"
1493         "adc r23, r1 \n\t"
1494         "adc r24, r25 \n\t"
1495         "mul r7, r19 \n\t"
1496         "add r22, r0 \n\t"
1497         "adc r23, r1 \n\t"
1498         "adc r24, r25 \n\t"
1499         "mul r8, r18 \n\t"
1500         "add r22, r0 \n\t"
1501         "adc r23, r1 \n\t"
1502         "adc r24, r25 \n\t"
1503         "mul r9, r17 \n\t"
1504         "add r22, r0 \n\t"
1505         "adc r23, r1 \n\t"
1506         "adc r24, r25 \n\t"
1507         "mul r10, r16 \n\t"
1508         "add r22, r0 \n\t"
1509         "adc r23, r1 \n\t"
1510         "adc r24, r25 \n\t"
1511         "mul r11, r15 \n\t"
1512         "add r22, r0 \n\t"
1513         "adc r23, r1 \n\t"
1514         "adc r24, r25 \n\t"
1515         "ld r0, z \n\t"
1516         "add r22, r0 \n\t"
1517         "adc r23, r25 \n\t"
1518         "adc r24, r25 \n\t"
1519         "st z+, r22 \n\t"
1520
1521         "ld r15, y+ \n\t"
1522         "ldi r22, 0 \n\t"
1523         "mul r2, r15 \n\t"
1524         "add r23, r0 \n\t"
1525         "adc r24, r1 \n\t"
1526         "adc r22, r25 \n\t"
1527         "mul r3, r14 \n\t"
1528         "add r23, r0 \n\t"
1529         "adc r24, r1 \n\t"
1530         "adc r22, r25 \n\t"
1531         "mul r4, r13 \n\t"
1532         "add r23, r0 \n\t"
1533         "adc r24, r1 \n\t"
1534         "adc r22, r25 \n\t"
1535         "mul r5, r12 \n\t"
1536         "add r23, r0 \n\t"
1537         "adc r24, r1 \n\t"
1538         "adc r22, r25 \n\t"
1539         "mul r6, r21 \n\t"
1540         "add r23, r0 \n\t"
1541         "adc r24, r1 \n\t"
1542         "adc r22, r25 \n\t"
1543         "mul r7, r20 \n\t"
1544         "add r23, r0 \n\t"
1545         "adc r24, r1 \n\t"
1546         "adc r22, r25 \n\t"
1547         "mul r8, r19 \n\t"
1548         "add r23, r0 \n\t"
1549         "adc r24, r1 \n\t"
1550         "adc r22, r25 \n\t"
1551         "mul r9, r18 \n\t"
1552         "add r23, r0 \n\t"
1553         "adc r24, r1 \n\t"
1554         "adc r22, r25 \n\t"
1555         "mul r10, r17 \n\t"
1556         "add r23, r0 \n\t"
1557         "adc r24, r1 \n\t"
1558         "adc r22, r25 \n\t"
1559         "mul r11, r16 \n\t"
1560         "add r23, r0 \n\t"
1561         "adc r24, r1 \n\t"
1562         "adc r22, r25 \n\t"
1563         "ld r0, z \n\t"
1564         "add r23, r0 \n\t"
1565         "adc r24, r25 \n\t"
1566         "adc r22, r25 \n\t"
1567         "st z+, r23 \n\t"
1568
1569         "ld r16, y+ \n\t"
1570         "ldi r23, 0 \n\t"
1571         "mul r2, r16 \n\t"
1572         "add r24, r0 \n\t"
1573         "adc r22, r1 \n\t"
1574         "adc r23, r25 \n\t"
1575         "mul r3, r15 \n\t"
1576         "add r24, r0 \n\t"
1577         "adc r22, r1 \n\t"
1578         "adc r23, r25 \n\t"
1579         "mul r4, r14 \n\t"
1580         "add r24, r0 \n\t"
1581         "adc r22, r1 \n\t"
1582         "adc r23, r25 \n\t"
1583         "mul r5, r13 \n\t"
1584         "add r24, r0 \n\t"
1585         "adc r22, r1 \n\t"
1586         "adc r23, r25 \n\t"
1587         "mul r6, r12 \n\t"
1588         "add r24, r0 \n\t"
1589         "adc r22, r1 \n\t"
1590         "adc r23, r25 \n\t"
1591         "mul r7, r21 \n\t"
1592         "add r24, r0 \n\t"
1593         "adc r22, r1 \n\t"
1594         "adc r23, r25 \n\t"
1595         "mul r8, r20 \n\t"
1596         "add r24, r0 \n\t"
1597         "adc r22, r1 \n\t"
1598         "adc r23, r25 \n\t"
1599         "mul r9, r19 \n\t"
1600         "add r24, r0 \n\t"
1601         "adc r22, r1 \n\t"
1602         "adc r23, r25 \n\t"
1603         "mul r10, r18 \n\t"
1604         "add r24, r0 \n\t"
1605         "adc r22, r1 \n\t"
1606         "adc r23, r25 \n\t"
1607         "mul r11, r17 \n\t"
1608         "add r24, r0 \n\t"
1609         "adc r22, r1 \n\t"
1610         "adc r23, r25 \n\t"
1611         "ld r0, z \n\t"
1612         "add r24, r0 \n\t"
1613         "adc r22, r25 \n\t"
1614         "adc r23, r25 \n\t"
1615         "st z+, r24 \n\t"
1616
1617         "ld r17, y+ \n\t"
1618         "ldi r24, 0 \n\t"
1619         "mul r2, r17 \n\t"
1620         "add r22, r0 \n\t"
1621         "adc r23, r1 \n\t"
1622         "adc r24, r25 \n\t"
1623         "mul r3, r16 \n\t"
1624         "add r22, r0 \n\t"
1625         "adc r23, r1 \n\t"
1626         "adc r24, r25 \n\t"
1627         "mul r4, r15 \n\t"
1628         "add r22, r0 \n\t"
1629         "adc r23, r1 \n\t"
1630         "adc r24, r25 \n\t"
1631         "mul r5, r14 \n\t"
1632         "add r22, r0 \n\t"
1633         "adc r23, r1 \n\t"
1634         "adc r24, r25 \n\t"
1635         "mul r6, r13 \n\t"
1636         "add r22, r0 \n\t"
1637         "adc r23, r1 \n\t"
1638         "adc r24, r25 \n\t"
1639         "mul r7, r12 \n\t"
1640         "add r22, r0 \n\t"
1641         "adc r23, r1 \n\t"
1642         "adc r24, r25 \n\t"
1643         "mul r8, r21 \n\t"
1644         "add r22, r0 \n\t"
1645         "adc r23, r1 \n\t"
1646         "adc r24, r25 \n\t"
1647         "mul r9, r20 \n\t"
1648         "add r22, r0 \n\t"
1649         "adc r23, r1 \n\t"
1650         "adc r24, r25 \n\t"
1651         "mul r10, r19 \n\t"
1652         "add r22, r0 \n\t"
1653         "adc r23, r1 \n\t"
1654         "adc r24, r25 \n\t"
1655         "mul r11, r18 \n\t"
1656         "add r22, r0 \n\t"
1657         "adc r23, r1 \n\t"
1658         "adc r24, r25 \n\t"
1659         "ld r0, z \n\t"
1660         "add r22, r0 \n\t"
1661         "adc r23, r25 \n\t"
1662         "adc r24, r25 \n\t"
1663         "st z+, r22 \n\t"
1664
1665         "ld r18, y+ \n\t"
1666         "ldi r22, 0 \n\t"
1667         "mul r2, r18 \n\t"
1668         "add r23, r0 \n\t"
1669         "adc r24, r1 \n\t"
1670         "adc r22, r25 \n\t"
1671         "mul r3, r17 \n\t"
1672         "add r23, r0 \n\t"
1673         "adc r24, r1 \n\t"
1674         "adc r22, r25 \n\t"
1675         "mul r4, r16 \n\t"
1676         "add r23, r0 \n\t"
1677         "adc r24, r1 \n\t"
1678         "adc r22, r25 \n\t"
1679         "mul r5, r15 \n\t"
1680         "add r23, r0 \n\t"
1681         "adc r24, r1 \n\t"
1682         "adc r22, r25 \n\t"
1683         "mul r6, r14 \n\t"
1684         "add r23, r0 \n\t"
1685         "adc r24, r1 \n\t"
1686         "adc r22, r25 \n\t"
1687         "mul r7, r13 \n\t"
1688         "add r23, r0 \n\t"
1689         "adc r24, r1 \n\t"
1690         "adc r22, r25 \n\t"
1691         "mul r8, r12 \n\t"
1692         "add r23, r0 \n\t"
1693         "adc r24, r1 \n\t"
1694         "adc r22, r25 \n\t"
1695         "mul r9, r21 \n\t"
1696         "add r23, r0 \n\t"
1697         "adc r24, r1 \n\t"
1698         "adc r22, r25 \n\t"
1699         "mul r10, r20 \n\t"
1700         "add r23, r0 \n\t"
1701         "adc r24, r1 \n\t"
1702         "adc r22, r25 \n\t"
1703         "mul r11, r19 \n\t"
1704         "add r23, r0 \n\t"
1705         "adc r24, r1 \n\t"
1706         "adc r22, r25 \n\t"
1707         "ld r0, z \n\t"
1708         "add r23, r0 \n\t"
1709         "adc r24, r25 \n\t"
1710         "adc r22, r25 \n\t"
1711         "st z+, r23 \n\t"
1712
1713         "ld r19, y+ \n\t"
1714         "ldi r23, 0 \n\t"
1715         "mul r2, r19 \n\t"
1716         "add r24, r0 \n\t"
1717         "adc r22, r1 \n\t"
1718         "adc r23, r25 \n\t"
1719         "mul r3, r18 \n\t"
1720         "add r24, r0 \n\t"
1721         "adc r22, r1 \n\t"
1722         "adc r23, r25 \n\t"
1723         "mul r4, r17 \n\t"
1724         "add r24, r0 \n\t"
1725         "adc r22, r1 \n\t"
1726         "adc r23, r25 \n\t"
1727         "mul r5, r16 \n\t"
1728         "add r24, r0 \n\t"
1729         "adc r22, r1 \n\t"
1730         "adc r23, r25 \n\t"
1731         "mul r6, r15 \n\t"
1732         "add r24, r0 \n\t"
1733         "adc r22, r1 \n\t"
1734         "adc r23, r25 \n\t"
1735         "mul r7, r14 \n\t"
1736         "add r24, r0 \n\t"
1737         "adc r22, r1 \n\t"
1738         "adc r23, r25 \n\t"
1739         "mul r8, r13 \n\t"
1740         "add r24, r0 \n\t"
1741         "adc r22, r1 \n\t"
1742         "adc r23, r25 \n\t"
1743         "mul r9, r12 \n\t"
1744         "add r24, r0 \n\t"
1745         "adc r22, r1 \n\t"
1746         "adc r23, r25 \n\t"
1747         "mul r10, r21 \n\t"
1748         "add r24, r0 \n\t"
1749         "adc r22, r1 \n\t"
1750         "adc r23, r25 \n\t"
1751         "mul r11, r20 \n\t"
1752         "add r24, r0 \n\t"
1753         "adc r22, r1 \n\t"
1754         "adc r23, r25 \n\t"
1755         "ld r0, z \n\t"
1756         "add r24, r0 \n\t"
1757         "adc r22, r25 \n\t"
1758         "adc r23, r25 \n\t"
1759         "st z+, r24 \n\t"
1760
1761         "ld r20, y+ \n\t"
1762         "ldi r24, 0 \n\t"
1763         "mul r2, r20 \n\t"
1764         "add r22, r0 \n\t"
1765         "adc r23, r1 \n\t"
1766         "adc r24, r25 \n\t"
1767         "mul r3, r19 \n\t"
1768         "add r22, r0 \n\t"
1769         "adc r23, r1 \n\t"
1770         "adc r24, r25 \n\t"
1771         "mul r4, r18 \n\t"
1772         "add r22, r0 \n\t"
1773         "adc r23, r1 \n\t"
1774         "adc r24, r25 \n\t"
1775         "mul r5, r17 \n\t"
1776         "add r22, r0 \n\t"
1777         "adc r23, r1 \n\t"
1778         "adc r24, r25 \n\t"
1779         "mul r6, r16 \n\t"
1780         "add r22, r0 \n\t"
1781         "adc r23, r1 \n\t"
1782         "adc r24, r25 \n\t"
1783         "mul r7, r15 \n\t"
1784         "add r22, r0 \n\t"
1785         "adc r23, r1 \n\t"
1786         "adc r24, r25 \n\t"
1787         "mul r8, r14 \n\t"
1788         "add r22, r0 \n\t"
1789         "adc r23, r1 \n\t"
1790         "adc r24, r25 \n\t"
1791         "mul r9, r13 \n\t"
1792         "add r22, r0 \n\t"
1793         "adc r23, r1 \n\t"
1794         "adc r24, r25 \n\t"
1795         "mul r10, r12 \n\t"
1796         "add r22, r0 \n\t"
1797         "adc r23, r1 \n\t"
1798         "adc r24, r25 \n\t"
1799         "mul r11, r21 \n\t"
1800         "add r22, r0 \n\t"
1801         "adc r23, r1 \n\t"
1802         "adc r24, r25 \n\t"
1803         "ld r0, z \n\t"
1804         "add r22, r0 \n\t"
1805         "adc r23, r25 \n\t"
1806         "adc r24, r25 \n\t"
1807         "st z+, r22 \n\t"
1808
1809         "ld r21, y+ \n\t"
1810         "ldi r22, 0 \n\t"
1811         "mul r2, r21 \n\t"
1812         "add r23, r0 \n\t"
1813         "adc r24, r1 \n\t"
1814         "adc r22, r25 \n\t"
1815         "mul r3, r20 \n\t"
1816         "add r23, r0 \n\t"
1817         "adc r24, r1 \n\t"
1818         "adc r22, r25 \n\t"
1819         "mul r4, r19 \n\t"
1820         "add r23, r0 \n\t"
1821         "adc r24, r1 \n\t"
1822         "adc r22, r25 \n\t"
1823         "mul r5, r18 \n\t"
1824         "add r23, r0 \n\t"
1825         "adc r24, r1 \n\t"
1826         "adc r22, r25 \n\t"
1827         "mul r6, r17 \n\t"
1828         "add r23, r0 \n\t"
1829         "adc r24, r1 \n\t"
1830         "adc r22, r25 \n\t"
1831         "mul r7, r16 \n\t"
1832         "add r23, r0 \n\t"
1833         "adc r24, r1 \n\t"
1834         "adc r22, r25 \n\t"
1835         "mul r8, r15 \n\t"
1836         "add r23, r0 \n\t"
1837         "adc r24, r1 \n\t"
1838         "adc r22, r25 \n\t"
1839         "mul r9, r14 \n\t"
1840         "add r23, r0 \n\t"
1841         "adc r24, r1 \n\t"
1842         "adc r22, r25 \n\t"
1843         "mul r10, r13 \n\t"
1844         "add r23, r0 \n\t"
1845         "adc r24, r1 \n\t"
1846         "adc r22, r25 \n\t"
1847         "mul r11, r12 \n\t"
1848         "add r23, r0 \n\t"
1849         "adc r24, r1 \n\t"
1850         "adc r22, r25 \n\t"
1851         "ld r0, z \n\t"
1852         "add r23, r0 \n\t"
1853         "adc r24, r25 \n\t"
1854         "adc r22, r25 \n\t"
1855         "st z+, r23 \n\t"
1856
1857         "ldi r23, 0 \n\t"
1858         "mul r3, r21 \n\t"
1859         "add r24, r0 \n\t"
1860         "adc r22, r1 \n\t"
1861         "adc r23, r25 \n\t"
1862         "mul r4, r20 \n\t"
1863         "add r24, r0 \n\t"
1864         "adc r22, r1 \n\t"
1865         "adc r23, r25 \n\t"
1866         "mul r5, r19 \n\t"
1867         "add r24, r0 \n\t"
1868         "adc r22, r1 \n\t"
1869         "adc r23, r25 \n\t"
1870         "mul r6, r18 \n\t"
1871         "add r24, r0 \n\t"
1872         "adc r22, r1 \n\t"
1873         "adc r23, r25 \n\t"
1874         "mul r7, r17 \n\t"
1875         "add r24, r0 \n\t"
1876         "adc r22, r1 \n\t"
1877         "adc r23, r25 \n\t"
1878         "mul r8, r16 \n\t"
1879         "add r24, r0 \n\t"
1880         "adc r22, r1 \n\t"
1881         "adc r23, r25 \n\t"
1882         "mul r9, r15 \n\t"
1883         "add r24, r0 \n\t"
1884         "adc r22, r1 \n\t"
1885         "adc r23, r25 \n\t"
1886         "mul r10, r14 \n\t"
1887         "add r24, r0 \n\t"
1888         "adc r22, r1 \n\t"
1889         "adc r23, r25 \n\t"
1890         "mul r11, r13 \n\t"
1891         "add r24, r0 \n\t"
1892         "adc r22, r1 \n\t"
1893         "adc r23, r25 \n\t"
1894         "st z+, r24 \n\t"
1895
1896         "ldi r24, 0 \n\t"
1897         "mul r4, r21 \n\t"
1898         "add r22, r0 \n\t"
1899         "adc r23, r1 \n\t"
1900         "adc r24, r25 \n\t"
1901         "mul r5, r20 \n\t"
1902         "add r22, r0 \n\t"
1903         "adc r23, r1 \n\t"
1904         "adc r24, r25 \n\t"
1905         "mul r6, r19 \n\t"
1906         "add r22, r0 \n\t"
1907         "adc r23, r1 \n\t"
1908         "adc r24, r25 \n\t"
1909         "mul r7, r18 \n\t"
1910         "add r22, r0 \n\t"
1911         "adc r23, r1 \n\t"
1912         "adc r24, r25 \n\t"
1913         "mul r8, r17 \n\t"
1914         "add r22, r0 \n\t"
1915         "adc r23, r1 \n\t"
1916         "adc r24, r25 \n\t"
1917         "mul r9, r16 \n\t"
1918         "add r22, r0 \n\t"
1919         "adc r23, r1 \n\t"
1920         "adc r24, r25 \n\t"
1921         "mul r10, r15 \n\t"
1922         "add r22, r0 \n\t"
1923         "adc r23, r1 \n\t"
1924         "adc r24, r25 \n\t"
1925         "mul r11, r14 \n\t"
1926         "add r22, r0 \n\t"
1927         "adc r23, r1 \n\t"
1928         "adc r24, r25 \n\t"
1929         "st z+, r22 \n\t"
1930
1931         "ldi r22, 0 \n\t"
1932         "mul r5, r21 \n\t"
1933         "add r23, r0 \n\t"
1934         "adc r24, r1 \n\t"
1935         "adc r22, r25 \n\t"
1936         "mul r6, r20 \n\t"
1937         "add r23, r0 \n\t"
1938         "adc r24, r1 \n\t"
1939         "adc r22, r25 \n\t"
1940         "mul r7, r19 \n\t"
1941         "add r23, r0 \n\t"
1942         "adc r24, r1 \n\t"
1943         "adc r22, r25 \n\t"
1944         "mul r8, r18 \n\t"
1945         "add r23, r0 \n\t"
1946         "adc r24, r1 \n\t"
1947         "adc r22, r25 \n\t"
1948         "mul r9, r17 \n\t"
1949         "add r23, r0 \n\t"
1950         "adc r24, r1 \n\t"
1951         "adc r22, r25 \n\t"
1952         "mul r10, r16 \n\t"
1953         "add r23, r0 \n\t"
1954         "adc r24, r1 \n\t"
1955         "adc r22, r25 \n\t"
1956         "mul r11, r15 \n\t"
1957         "add r23, r0 \n\t"
1958         "adc r24, r1 \n\t"
1959         "adc r22, r25 \n\t"
1960         "st z+, r23 \n\t"
1961
1962         "ldi r23, 0 \n\t"
1963         "mul r6, r21 \n\t"
1964         "add r24, r0 \n\t"
1965         "adc r22, r1 \n\t"
1966         "adc r23, r25 \n\t"
1967         "mul r7, r20 \n\t"
1968         "add r24, r0 \n\t"
1969         "adc r22, r1 \n\t"
1970         "adc r23, r25 \n\t"
1971         "mul r8, r19 \n\t"
1972         "add r24, r0 \n\t"
1973         "adc r22, r1 \n\t"
1974         "adc r23, r25 \n\t"
1975         "mul r9, r18 \n\t"
1976         "add r24, r0 \n\t"
1977         "adc r22, r1 \n\t"
1978         "adc r23, r25 \n\t"
1979         "mul r10, r17 \n\t"
1980         "add r24, r0 \n\t"
1981         "adc r22, r1 \n\t"
1982         "adc r23, r25 \n\t"
1983         "mul r11, r16 \n\t"
1984         "add r24, r0 \n\t"
1985         "adc r22, r1 \n\t"
1986         "adc r23, r25 \n\t"
1987         "st z+, r24 \n\t"
1988
1989         "ldi r24, 0 \n\t"
1990         "mul r7, r21 \n\t"
1991         "add r22, r0 \n\t"
1992         "adc r23, r1 \n\t"
1993         "adc r24, r25 \n\t"
1994         "mul r8, r20 \n\t"
1995         "add r22, r0 \n\t"
1996         "adc r23, r1 \n\t"
1997         "adc r24, r25 \n\t"
1998         "mul r9, r19 \n\t"
1999         "add r22, r0 \n\t"
2000         "adc r23, r1 \n\t"
2001         "adc r24, r25 \n\t"
2002         "mul r10, r18 \n\t"
2003         "add r22, r0 \n\t"
2004         "adc r23, r1 \n\t"
2005         "adc r24, r25 \n\t"
2006         "mul r11, r17 \n\t"
2007         "add r22, r0 \n\t"
2008         "adc r23, r1 \n\t"
2009         "adc r24, r25 \n\t"
2010         "st z+, r22 \n\t"
2011
2012         "ldi r22, 0 \n\t"
2013         "mul r8, r21 \n\t"
2014         "add r23, r0 \n\t"
2015         "adc r24, r1 \n\t"
2016         "adc r22, r25 \n\t"
2017         "mul r9, r20 \n\t"
2018         "add r23, r0 \n\t"
2019         "adc r24, r1 \n\t"
2020         "adc r22, r25 \n\t"
2021         "mul r10, r19 \n\t"
2022         "add r23, r0 \n\t"
2023         "adc r24, r1 \n\t"
2024         "adc r22, r25 \n\t"
2025         "mul r11, r18 \n\t"
2026         "add r23, r0 \n\t"
2027         "adc r24, r1 \n\t"
2028         "adc r22, r25 \n\t"
2029         "st z+, r23 \n\t"
2030
2031         "ldi r23, 0 \n\t"
2032         "mul r9, r21 \n\t"
2033         "add r24, r0 \n\t"
2034         "adc r22, r1 \n\t"
2035         "adc r23, r25 \n\t"
2036         "mul r10, r20 \n\t"
2037         "add r24, r0 \n\t"
2038         "adc r22, r1 \n\t"
2039         "adc r23, r25 \n\t"
2040         "mul r11, r19 \n\t"
2041         "add r24, r0 \n\t"
2042         "adc r22, r1 \n\t"
2043         "adc r23, r25 \n\t"
2044         "st z+, r24 \n\t"
2045
2046         "ldi r24, 0 \n\t"
2047         "mul r10, r21 \n\t"
2048         "add r22, r0 \n\t"
2049         "adc r23, r1 \n\t"
2050         "adc r24, r25 \n\t"
2051         "mul r11, r20 \n\t"
2052         "add r22, r0 \n\t"
2053         "adc r23, r1 \n\t"
2054         "adc r24, r25 \n\t"
2055         "st z+, r22 \n\t"
2056
2057         "mul r11, r21 \n\t"
2058         "add r23, r0 \n\t"
2059         "adc r24, r1 \n\t"
2060         "st z+, r23 \n\t"
2061         "st z+, r24 \n\t"
2062         "eor r1, r1 \n\t"
2063         : "+x" (p_left), "+y" (p_right), "+z" (p_result)
2064         :
2065         : "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12",
2066           "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "cc", "memory"
2067     );
2068 }
2069 #define asm_mult 1
2070 #elif (uECC_BYTES == 24)
2071 __attribute((noinline))
2072 static void vli_mult(uint8_t *p_result, uint8_t *p_left, uint8_t *p_right)
2073 {
2074     __asm__ volatile (
2075         "adiw r30, 20 \n\t"
2076         "adiw r28, 20 \n\t"
2077         "ld r2, x+ \n\t"
2078         "ld r3, x+ \n\t"
2079         "ld r4, x+ \n\t"
2080         "ld r5, x+ \n\t"
2081         "ld r12, y+ \n\t"
2082         "ld r13, y+ \n\t"
2083         "ld r14, y+ \n\t"
2084         "ld r15, y+ \n\t"
2085         "ldi r25, 0 \n\t"
2086
2087         "ldi r23, 0 \n\t"
2088         "mul r2, r12 \n\t"
2089         "st z+, r0 \n\t"
2090         "mov r22, r1 \n\t"
2091
2092         "ldi r24, 0 \n\t"
2093         "mul r2, r13 \n\t"
2094         "add r22, r0 \n\t"
2095         "adc r23, r1 \n\t"
2096         "mul r3, r12 \n\t"
2097         "add r22, r0 \n\t"
2098         "adc r23, r1 \n\t"
2099         "adc r24, r25 \n\t"
2100         "st z+, r22 \n\t"
2101
2102         "ldi r22, 0 \n\t"
2103         "mul r2, r14 \n\t"
2104         "add r23, r0 \n\t"
2105         "adc r24, r1 \n\t"
2106         "adc r22, r25 \n\t"
2107         "mul r3, r13 \n\t"
2108         "add r23, r0 \n\t"
2109         "adc r24, r1 \n\t"
2110         "adc r22, r25 \n\t"
2111         "mul r4, r12 \n\t"
2112         "add r23, r0 \n\t"
2113         "adc r24, r1 \n\t"
2114         "adc r22, r25 \n\t"
2115         "st z+, r23 \n\t"
2116
2117         "ldi r23, 0 \n\t"
2118         "mul r2, r15 \n\t"
2119         "add r24, r0 \n\t"
2120         "adc r22, r1 \n\t"
2121         "adc r23, r25 \n\t"
2122         "mul r3, r14 \n\t"
2123         "add r24, r0 \n\t"
2124         "adc r22, r1 \n\t"
2125         "adc r23, r25 \n\t"
2126         "mul r4, r13 \n\t"
2127         "add r24, r0 \n\t"
2128         "adc r22, r1 \n\t"
2129         "adc r23, r25 \n\t"
2130         "mul r5, r12 \n\t"
2131         "add r24, r0 \n\t"
2132         "adc r22, r1 \n\t"
2133         "adc r23, r25 \n\t"
2134         "st z+, r24 \n\t"
2135
2136         "ldi r24, 0 \n\t"
2137         "mul r3, r15 \n\t"
2138         "add r22, r0 \n\t"
2139         "adc r23, r1 \n\t"
2140         "adc r24, r25 \n\t"
2141         "mul r4, r14 \n\t"
2142         "add r22, r0 \n\t"
2143         "adc r23, r1 \n\t"
2144         "adc r24, r25 \n\t"
2145         "mul r5, r13 \n\t"
2146         "add r22, r0 \n\t"
2147         "adc r23, r1 \n\t"
2148         "adc r24, r25 \n\t"
2149         "st z+, r22 \n\t"
2150
2151         "ldi r22, 0 \n\t"
2152         "mul r4, r15 \n\t"
2153         "add r23, r0 \n\t"
2154         "adc r24, r1 \n\t"
2155         "adc r22, r25 \n\t"
2156         "mul r5, r14 \n\t"
2157         "add r23, r0 \n\t"
2158         "adc r24, r1 \n\t"
2159         "adc r22, r25 \n\t"
2160         "st z+, r23 \n\t"
2161
2162         "mul r5, r15 \n\t"
2163         "add r24, r0 \n\t"
2164         "adc r22, r1 \n\t"
2165         "st z+, r24 \n\t"
2166         "st z+, r22 \n\t"
2167
2168         "sbiw r30, 18 \n\t"
2169         "sbiw r28, 14 \n\t"
2170         "ld r12, y+ \n\t"
2171         "ld r13, y+ \n\t"
2172         "ld r14, y+ \n\t"
2173         "ld r15, y+ \n\t"
2174         "ld r16, y+ \n\t"
2175         "ld r17, y+ \n\t"
2176         "ld r18, y+ \n\t"
2177         "ld r19, y+ \n\t"
2178         "ld r20, y+ \n\t"
2179         "ld r21, y+ \n\t"
2180         "ld r6, x+ \n\t"
2181         "ld r7, x+ \n\t"
2182         "ld r8, x+ \n\t"
2183         "ld r9, x+ \n\t"
2184         "ld r10, x+ \n\t"
2185         "ld r11, x+ \n\t"
2186
2187         "ldi r23, 0 \n\t"
2188         "mul r2, r12 \n\t"
2189         "st z+, r0 \n\t"
2190         "mov r22, r1 \n\t"
2191
2192         "ldi r24, 0 \n\t"
2193         "mul r2, r13 \n\t"
2194         "add r22, r0 \n\t"
2195         "adc r23, r1 \n\t"
2196         "mul r3, r12 \n\t"
2197         "add r22, r0 \n\t"
2198         "adc r23, r1 \n\t"
2199         "adc r24, r25 \n\t"
2200         "st z+, r22 \n\t"
2201
2202         "ldi r22, 0 \n\t"
2203         "mul r2, r14 \n\t"
2204         "add r23, r0 \n\t"
2205         "adc r24, r1 \n\t"
2206         "adc r22, r25 \n\t"
2207         "mul r3, r13 \n\t"
2208         "add r23, r0 \n\t"
2209         "adc r24, r1 \n\t"
2210         "adc r22, r25 \n\t"
2211         "mul r4, r12 \n\t"
2212         "add r23, r0 \n\t"
2213         "adc r24, r1 \n\t"
2214         "adc r22, r25 \n\t"
2215         "st z+, r23 \n\t"
2216
2217         "ldi r23, 0 \n\t"
2218         "mul r2, r15 \n\t"
2219         "add r24, r0 \n\t"
2220         "adc r22, r1 \n\t"
2221         "adc r23, r25 \n\t"
2222         "mul r3, r14 \n\t"
2223         "add r24, r0 \n\t"
2224         "adc r22, r1 \n\t"
2225         "adc r23, r25 \n\t"
2226         "mul r4, r13 \n\t"
2227         "add r24, r0 \n\t"
2228         "adc r22, r1 \n\t"
2229         "adc r23, r25 \n\t"
2230         "mul r5, r12 \n\t"
2231         "add r24, r0 \n\t"
2232         "adc r22, r1 \n\t"
2233         "adc r23, r25 \n\t"
2234         "st z+, r24 \n\t"
2235
2236         "ldi r24, 0 \n\t"
2237         "mul r2, r16 \n\t"
2238         "add r22, r0 \n\t"
2239         "adc r23, r1 \n\t"
2240         "adc r24, r25 \n\t"
2241         "mul r3, r15 \n\t"
2242         "add r22, r0 \n\t"
2243         "adc r23, r1 \n\t"
2244         "adc r24, r25 \n\t"
2245         "mul r4, r14 \n\t"
2246         "add r22, r0 \n\t"
2247         "adc r23, r1 \n\t"
2248         "adc r24, r25 \n\t"
2249         "mul r5, r13 \n\t"
2250         "add r22, r0 \n\t"
2251         "adc r23, r1 \n\t"
2252         "adc r24, r25 \n\t"
2253         "mul r6, r12 \n\t"
2254         "add r22, r0 \n\t"
2255         "adc r23, r1 \n\t"
2256         "adc r24, r25 \n\t"
2257         "st z+, r22 \n\t"
2258
2259         "ldi r22, 0 \n\t"
2260         "mul r2, r17 \n\t"
2261         "add r23, r0 \n\t"
2262         "adc r24, r1 \n\t"
2263         "adc r22, r25 \n\t"
2264         "mul r3, r16 \n\t"
2265         "add r23, r0 \n\t"
2266         "adc r24, r1 \n\t"
2267         "adc r22, r25 \n\t"
2268         "mul r4, r15 \n\t"
2269         "add r23, r0 \n\t"
2270         "adc r24, r1 \n\t"
2271         "adc r22, r25 \n\t"
2272         "mul r5, r14 \n\t"
2273         "add r23, r0 \n\t"
2274         "adc r24, r1 \n\t"
2275         "adc r22, r25 \n\t"
2276         "mul r6, r13 \n\t"
2277         "add r23, r0 \n\t"
2278         "adc r24, r1 \n\t"
2279         "adc r22, r25 \n\t"
2280         "mul r7, r12 \n\t"
2281         "add r23, r0 \n\t"
2282         "adc r24, r1 \n\t"
2283         "adc r22, r25 \n\t"
2284         "st z+, r23 \n\t"
2285
2286         "ldi r23, 0 \n\t"
2287         "mul r2, r18 \n\t"
2288         "add r24, r0 \n\t"
2289         "adc r22, r1 \n\t"
2290         "adc r23, r25 \n\t"
2291         "mul r3, r17 \n\t"
2292         "add r24, r0 \n\t"
2293         "adc r22, r1 \n\t"
2294         "adc r23, r25 \n\t"
2295         "mul r4, r16 \n\t"
2296         "add r24, r0 \n\t"
2297         "adc r22, r1 \n\t"
2298         "adc r23, r25 \n\t"
2299         "mul r5, r15 \n\t"
2300         "add r24, r0 \n\t"
2301         "adc r22, r1 \n\t"
2302         "adc r23, r25 \n\t"
2303         "mul r6, r14 \n\t"
2304         "add r24, r0 \n\t"
2305         "adc r22, r1 \n\t"
2306         "adc r23, r25 \n\t"
2307         "mul r7, r13 \n\t"
2308         "add r24, r0 \n\t"
2309         "adc r22, r1 \n\t"
2310         "adc r23, r25 \n\t"
2311         "mul r8, r12 \n\t"
2312         "add r24, r0 \n\t"
2313         "adc r22, r1 \n\t"
2314         "adc r23, r25 \n\t"
2315         "st z+, r24 \n\t"
2316
2317         "ldi r24, 0 \n\t"
2318         "mul r2, r19 \n\t"
2319         "add r22, r0 \n\t"
2320         "adc r23, r1 \n\t"
2321         "adc r24, r25 \n\t"
2322         "mul r3, r18 \n\t"
2323         "add r22, r0 \n\t"
2324         "adc r23, r1 \n\t"
2325         "adc r24, r25 \n\t"
2326         "mul r4, r17 \n\t"
2327         "add r22, r0 \n\t"
2328         "adc r23, r1 \n\t"
2329         "adc r24, r25 \n\t"
2330         "mul r5, r16 \n\t"
2331         "add r22, r0 \n\t"
2332         "adc r23, r1 \n\t"
2333         "adc r24, r25 \n\t"
2334         "mul r6, r15 \n\t"
2335         "add r22, r0 \n\t"
2336         "adc r23, r1 \n\t"
2337         "adc r24, r25 \n\t"
2338         "mul r7, r14 \n\t"
2339         "add r22, r0 \n\t"
2340         "adc r23, r1 \n\t"
2341         "adc r24, r25 \n\t"
2342         "mul r8, r13 \n\t"
2343         "add r22, r0 \n\t"
2344         "adc r23, r1 \n\t"
2345         "adc r24, r25 \n\t"
2346         "mul r9, r12 \n\t"
2347         "add r22, r0 \n\t"
2348         "adc r23, r1 \n\t"
2349         "adc r24, r25 \n\t"
2350         "st z+, r22 \n\t"
2351
2352         "ldi r22, 0 \n\t"
2353         "mul r2, r20 \n\t"
2354         "add r23, r0 \n\t"
2355         "adc r24, r1 \n\t"
2356         "adc r22, r25 \n\t"
2357         "mul r3, r19 \n\t"
2358         "add r23, r0 \n\t"
2359         "adc r24, r1 \n\t"
2360         "adc r22, r25 \n\t"
2361         "mul r4, r18 \n\t"
2362         "add r23, r0 \n\t"
2363         "adc r24, r1 \n\t"
2364         "adc r22, r25 \n\t"
2365         "mul r5, r17 \n\t"
2366         "add r23, r0 \n\t"
2367         "adc r24, r1 \n\t"
2368         "adc r22, r25 \n\t"
2369         "mul r6, r16 \n\t"
2370         "add r23, r0 \n\t"
2371         "adc r24, r1 \n\t"
2372         "adc r22, r25 \n\t"
2373         "mul r7, r15 \n\t"
2374         "add r23, r0 \n\t"
2375         "adc r24, r1 \n\t"
2376         "adc r22, r25 \n\t"
2377         "mul r8, r14 \n\t"
2378         "add r23, r0 \n\t"
2379         "adc r24, r1 \n\t"
2380         "adc r22, r25 \n\t"
2381         "mul r9, r13 \n\t"
2382         "add r23, r0 \n\t"
2383         "adc r24, r1 \n\t"
2384         "adc r22, r25 \n\t"
2385         "mul r10, r12 \n\t"
2386         "add r23, r0 \n\t"
2387         "adc r24, r1 \n\t"
2388         "adc r22, r25 \n\t"
2389         "st z+, r23 \n\t"
2390
2391         "ldi r23, 0 \n\t"
2392         "mul r2, r21 \n\t"
2393         "add r24, r0 \n\t"
2394         "adc r22, r1 \n\t"
2395         "adc r23, r25 \n\t"
2396         "mul r3, r20 \n\t"
2397         "add r24, r0 \n\t"
2398         "adc r22, r1 \n\t"
2399         "adc r23, r25 \n\t"
2400         "mul r4, r19 \n\t"
2401         "add r24, r0 \n\t"
2402         "adc r22, r1 \n\t"
2403         "adc r23, r25 \n\t"
2404         "mul r5, r18 \n\t"
2405         "add r24, r0 \n\t"
2406         "adc r22, r1 \n\t"
2407         "adc r23, r25 \n\t"
2408         "mul r6, r17 \n\t"
2409         "add r24, r0 \n\t"
2410         "adc r22, r1 \n\t"
2411         "adc r23, r25 \n\t"
2412         "mul r7, r16 \n\t"
2413         "add r24, r0 \n\t"
2414         "adc r22, r1 \n\t"
2415         "adc r23, r25 \n\t"
2416         "mul r8, r15 \n\t"
2417         "add r24, r0 \n\t"
2418         "adc r22, r1 \n\t"
2419         "adc r23, r25 \n\t"
2420         "mul r9, r14 \n\t"
2421         "add r24, r0 \n\t"
2422         "adc r22, r1 \n\t"
2423         "adc r23, r25 \n\t"
2424         "mul r10, r13 \n\t"
2425         "add r24, r0 \n\t"
2426         "adc r22, r1 \n\t"
2427         "adc r23, r25 \n\t"
2428         "mul r11, r12 \n\t"
2429         "add r24, r0 \n\t"
2430         "adc r22, r1 \n\t"
2431         "adc r23, r25 \n\t"
2432         "st z+, r24 \n\t"
2433
2434         "ld r2, x+ \n\t"
2435         "ldi r24, 0 \n\t"
2436         "mul r3, r21 \n\t"
2437         "add r22, r0 \n\t"
2438         "adc r23, r1 \n\t"
2439         "adc r24, r25 \n\t"
2440         "mul r4, r20 \n\t"
2441         "add r22, r0 \n\t"
2442         "adc r23, r1 \n\t"
2443         "adc r24, r25 \n\t"
2444         "mul r5, r19 \n\t"
2445         "add r22, r0 \n\t"
2446         "adc r23, r1 \n\t"
2447         "adc r24, r25 \n\t"
2448         "mul r6, r18 \n\t"
2449         "add r22, r0 \n\t"
2450         "adc r23, r1 \n\t"
2451         "adc r24, r25 \n\t"
2452         "mul r7, r17 \n\t"
2453         "add r22, r0 \n\t"
2454         "adc r23, r1 \n\t"
2455         "adc r24, r25 \n\t"
2456         "mul r8, r16 \n\t"
2457         "add r22, r0 \n\t"
2458         "adc r23, r1 \n\t"
2459         "adc r24, r25 \n\t"
2460         "mul r9, r15 \n\t"
2461         "add r22, r0 \n\t"
2462         "adc r23, r1 \n\t"
2463         "adc r24, r25 \n\t"
2464         "mul r10, r14 \n\t"
2465         "add r22, r0 \n\t"
2466         "adc r23, r1 \n\t"
2467         "adc r24, r25 \n\t"
2468         "mul r11, r13 \n\t"
2469         "add r22, r0 \n\t"
2470         "adc r23, r1 \n\t"
2471         "adc r24, r25 \n\t"
2472         "mul r2, r12 \n\t"
2473         "add r22, r0 \n\t"
2474         "adc r23, r1 \n\t"
2475         "adc r24, r25 \n\t"
2476         "ld r0, z \n\t"
2477         "add r22, r0 \n\t"
2478         "adc r23, r25 \n\t"
2479         "adc r24, r25 \n\t"
2480         "st z+, r22 \n\t"
2481
2482         "ld r3, x+ \n\t"
2483         "ldi r22, 0 \n\t"
2484         "mul r4, r21 \n\t"
2485         "add r23, r0 \n\t"
2486         "adc r24, r1 \n\t"
2487         "adc r22, r25 \n\t"
2488         "mul r5, r20 \n\t"
2489         "add r23, r0 \n\t"
2490         "adc r24, r1 \n\t"
2491         "adc r22, r25 \n\t"
2492         "mul r6, r19 \n\t"
2493         "add r23, r0 \n\t"
2494         "adc r24, r1 \n\t"
2495         "adc r22, r25 \n\t"
2496         "mul r7, r18 \n\t"
2497         "add r23, r0 \n\t"
2498         "adc r24, r1 \n\t"
2499         "adc r22, r25 \n\t"
2500         "mul r8, r17 \n\t"
2501         "add r23, r0 \n\t"
2502         "adc r24, r1 \n\t"
2503         "adc r22, r25 \n\t"
2504         "mul r9, r16 \n\t"
2505         "add r23, r0 \n\t"
2506         "adc r24, r1 \n\t"
2507         "adc r22, r25 \n\t"
2508         "mul r10, r15 \n\t"
2509         "add r23, r0 \n\t"
2510         "adc r24, r1 \n\t"
2511         "adc r22, r25 \n\t"
2512         "mul r11, r14 \n\t"
2513         "add r23, r0 \n\t"
2514         "adc r24, r1 \n\t"
2515         "adc r22, r25 \n\t"
2516         "mul r2, r13 \n\t"
2517         "add r23, r0 \n\t"
2518         "adc r24, r1 \n\t"
2519         "adc r22, r25 \n\t"
2520         "mul r3, r12 \n\t"
2521         "add r23, r0 \n\t"
2522         "adc r24, r1 \n\t"
2523         "adc r22, r25 \n\t"
2524         "ld r0, z \n\t"
2525         "add r23, r0 \n\t"
2526         "adc r24, r25 \n\t"
2527         "adc r22, r25 \n\t"
2528         "st z+, r23 \n\t"
2529
2530         "ld r4, x+ \n\t"
2531         "ldi r23, 0 \n\t"
2532         "mul r5, r21 \n\t"
2533         "add r24, r0 \n\t"
2534         "adc r22, r1 \n\t"
2535         "adc r23, r25 \n\t"
2536         "mul r6, r20 \n\t"
2537         "add r24, r0 \n\t"
2538         "adc r22, r1 \n\t"
2539         "adc r23, r25 \n\t"
2540         "mul r7, r19 \n\t"
2541         "add r24, r0 \n\t"
2542         "adc r22, r1 \n\t"
2543         "adc r23, r25 \n\t"
2544         "mul r8, r18 \n\t"
2545         "add r24, r0 \n\t"
2546         "adc r22, r1 \n\t"
2547         "adc r23, r25 \n\t"
2548         "mul r9, r17 \n\t"
2549         "add r24, r0 \n\t"
2550         "adc r22, r1 \n\t"
2551         "adc r23, r25 \n\t"
2552         "mul r10, r16 \n\t"
2553         "add r24, r0 \n\t"
2554         "adc r22, r1 \n\t"
2555         "adc r23, r25 \n\t"
2556         "mul r11, r15 \n\t"
2557         "add r24, r0 \n\t"
2558         "adc r22, r1 \n\t"
2559         "adc r23, r25 \n\t"
2560         "mul r2, r14 \n\t"
2561         "add r24, r0 \n\t"
2562         "adc r22, r1 \n\t"
2563         "adc r23, r25 \n\t"
2564         "mul r3, r13 \n\t"
2565         "add r24, r0 \n\t"
2566         "adc r22, r1 \n\t"
2567         "adc r23, r25 \n\t"
2568         "mul r4, r12 \n\t"
2569         "add r24, r0 \n\t"
2570         "adc r22, r1 \n\t"
2571         "adc r23, r25 \n\t"
2572         "ld r0, z \n\t"
2573         "add r24, r0 \n\t"
2574         "adc r22, r25 \n\t"
2575         "adc r23, r25 \n\t"
2576         "st z+, r24 \n\t"
2577
2578         "ld r5, x+ \n\t"
2579         "ldi r24, 0 \n\t"
2580         "mul r6, r21 \n\t"
2581         "add r22, r0 \n\t"
2582         "adc r23, r1 \n\t"
2583         "adc r24, r25 \n\t"
2584         "mul r7, r20 \n\t"
2585         "add r22, r0 \n\t"
2586         "adc r23, r1 \n\t"
2587         "adc r24, r25 \n\t"
2588         "mul r8, r19 \n\t"
2589         "add r22, r0 \n\t"
2590         "adc r23, r1 \n\t"
2591         "adc r24, r25 \n\t"
2592         "mul r9, r18 \n\t"
2593         "add r22, r0 \n\t"
2594         "adc r23, r1 \n\t"
2595         "adc r24, r25 \n\t"
2596         "mul r10, r17 \n\t"
2597         "add r22, r0 \n\t"
2598         "adc r23, r1 \n\t"
2599         "adc r24, r25 \n\t"
2600         "mul r11, r16 \n\t"
2601         "add r22, r0 \n\t"
2602         "adc r23, r1 \n\t"
2603         "adc r24, r25 \n\t"
2604         "mul r2, r15 \n\t"
2605         "add r22, r0 \n\t"
2606         "adc r23, r1 \n\t"
2607         "adc r24, r25 \n\t"
2608         "mul r3, r14 \n\t"
2609         "add r22, r0 \n\t"
2610         "adc r23, r1 \n\t"
2611         "adc r24, r25 \n\t"
2612         "mul r4, r13 \n\t"
2613         "add r22, r0 \n\t"
2614         "adc r23, r1 \n\t"
2615         "adc r24, r25 \n\t"
2616         "mul r5, r12 \n\t"
2617         "add r22, r0 \n\t"
2618         "adc r23, r1 \n\t"
2619         "adc r24, r25 \n\t"
2620         "ld r0, z \n\t"
2621         "add r22, r0 \n\t"
2622         "adc r23, r25 \n\t"
2623         "adc r24, r25 \n\t"
2624         "st z+, r22 \n\t"
2625
2626         "ld r12, y+ \n\t"
2627         "ldi r22, 0 \n\t"
2628         "mul r6, r12 \n\t"
2629         "add r23, r0 \n\t"
2630         "adc r24, r1 \n\t"
2631         "adc r22, r25 \n\t"
2632         "mul r7, r21 \n\t"
2633         "add r23, r0 \n\t"
2634         "adc r24, r1 \n\t"
2635         "adc r22, r25 \n\t"
2636         "mul r8, r20 \n\t"
2637         "add r23, r0 \n\t"
2638         "adc r24, r1 \n\t"
2639         "adc r22, r25 \n\t"
2640         "mul r9, r19 \n\t"
2641         "add r23, r0 \n\t"
2642         "adc r24, r1 \n\t"
2643         "adc r22, r25 \n\t"
2644         "mul r10, r18 \n\t"
2645         "add r23, r0 \n\t"
2646         "adc r24, r1 \n\t"
2647         "adc r22, r25 \n\t"
2648         "mul r11, r17 \n\t"
2649         "add r23, r0 \n\t"
2650         "adc r24, r1 \n\t"
2651         "adc r22, r25 \n\t"
2652         "mul r2, r16 \n\t"
2653         "add r23, r0 \n\t"
2654         "adc r24, r1 \n\t"
2655         "adc r22, r25 \n\t"
2656         "mul r3, r15 \n\t"
2657         "add r23, r0 \n\t"
2658         "adc r24, r1 \n\t"
2659         "adc r22, r25 \n\t"
2660         "mul r4, r14 \n\t"
2661         "add r23, r0 \n\t"
2662         "adc r24, r1 \n\t"
2663         "adc r22, r25 \n\t"
2664         "mul r5, r13 \n\t"
2665         "add r23, r0 \n\t"
2666         "adc r24, r1 \n\t"
2667         "adc r22, r25 \n\t"
2668         "ld r0, z \n\t"
2669         "add r23, r0 \n\t"
2670         "adc r24, r25 \n\t"
2671         "adc r22, r25 \n\t"
2672         "st z+, r23 \n\t"
2673
2674         "ld r13, y+ \n\t"
2675         "ldi r23, 0 \n\t"
2676         "mul r6, r13 \n\t"
2677         "add r24, r0 \n\t"
2678         "adc r22, r1 \n\t"
2679         "adc r23, r25 \n\t"
2680         "mul r7, r12 \n\t"
2681         "add r24, r0 \n\t"
2682         "adc r22, r1 \n\t"
2683         "adc r23, r25 \n\t"
2684         "mul r8, r21 \n\t"
2685         "add r24, r0 \n\t"
2686         "adc r22, r1 \n\t"
2687         "adc r23, r25 \n\t"
2688         "mul r9, r20 \n\t"
2689         "add r24, r0 \n\t"
2690         "adc r22, r1 \n\t"
2691         "adc r23, r25 \n\t"
2692         "mul r10, r19 \n\t"
2693         "add r24, r0 \n\t"
2694         "adc r22, r1 \n\t"
2695         "adc r23, r25 \n\t"
2696         "mul r11, r18 \n\t"
2697         "add r24, r0 \n\t"
2698         "adc r22, r1 \n\t"
2699         "adc r23, r25 \n\t"
2700         "mul r2, r17 \n\t"
2701         "add r24, r0 \n\t"
2702         "adc r22, r1 \n\t"
2703         "adc r23, r25 \n\t"
2704         "mul r3, r16 \n\t"
2705         "add r24, r0 \n\t"
2706         "adc r22, r1 \n\t"
2707         "adc r23, r25 \n\t"
2708         "mul r4, r15 \n\t"
2709         "add r24, r0 \n\t"
2710         "adc r22, r1 \n\t"
2711         "adc r23, r25 \n\t"
2712         "mul r5, r14 \n\t"
2713         "add r24, r0 \n\t"
2714         "adc r22, r1 \n\t"
2715         "adc r23, r25 \n\t"
2716         "ld r0, z \n\t"
2717         "add r24, r0 \n\t"
2718         "adc r22, r25 \n\t"
2719         "adc r23, r25 \n\t"
2720         "st z+, r24 \n\t"
2721
2722         "ld r14, y+ \n\t"
2723         "ldi r24, 0 \n\t"
2724         "mul r6, r14 \n\t"
2725         "add r22, r0 \n\t"
2726         "adc r23, r1 \n\t"
2727         "adc r24, r25 \n\t"
2728         "mul r7, r13 \n\t"
2729         "add r22, r0 \n\t"
2730         "adc r23, r1 \n\t"
2731         "adc r24, r25 \n\t"
2732         "mul r8, r12 \n\t"
2733         "add r22, r0 \n\t"
2734         "adc r23, r1 \n\t"
2735         "adc r24, r25 \n\t"
2736         "mul r9, r21 \n\t"
2737         "add r22, r0 \n\t"
2738         "adc r23, r1 \n\t"
2739         "adc r24, r25 \n\t"
2740         "mul r10, r20 \n\t"
2741         "add r22, r0 \n\t"
2742         "adc r23, r1 \n\t"
2743         "adc r24, r25 \n\t"
2744         "mul r11, r19 \n\t"
2745         "add r22, r0 \n\t"
2746         "adc r23, r1 \n\t"
2747         "adc r24, r25 \n\t"
2748         "mul r2, r18 \n\t"
2749         "add r22, r0 \n\t"
2750         "adc r23, r1 \n\t"
2751         "adc r24, r25 \n\t"
2752         "mul r3, r17 \n\t"
2753         "add r22, r0 \n\t"
2754         "adc r23, r1 \n\t"
2755         "adc r24, r25 \n\t"
2756         "mul r4, r16 \n\t"
2757         "add r22, r0 \n\t"
2758         "adc r23, r1 \n\t"
2759         "adc r24, r25 \n\t"
2760         "mul r5, r15 \n\t"
2761         "add r22, r0 \n\t"
2762         "adc r23, r1 \n\t"
2763         "adc r24, r25 \n\t"
2764         "ld r0, z \n\t"
2765         "add r22, r0 \n\t"
2766         "adc r23, r25 \n\t"
2767         "adc r24, r25 \n\t"
2768         "st z+, r22 \n\t"
2769
2770         "ld r15, y+ \n\t"
2771         "ldi r22, 0 \n\t"
2772         "mul r6, r15 \n\t"
2773         "add r23, r0 \n\t"
2774         "adc r24, r1 \n\t"
2775         "adc r22, r25 \n\t"
2776         "mul r7, r14 \n\t"
2777         "add r23, r0 \n\t"
2778         "adc r24, r1 \n\t"
2779         "adc r22, r25 \n\t"
2780         "mul r8, r13 \n\t"
2781         "add r23, r0 \n\t"
2782         "adc r24, r1 \n\t"
2783         "adc r22, r25 \n\t"
2784         "mul r9, r12 \n\t"
2785         "add r23, r0 \n\t"
2786         "adc r24, r1 \n\t"
2787         "adc r22, r25 \n\t"
2788         "mul r10, r21 \n\t"
2789         "add r23, r0 \n\t"
2790         "adc r24, r1 \n\t"
2791         "adc r22, r25 \n\t"
2792         "mul r11, r20 \n\t"
2793         "add r23, r0 \n\t"
2794         "adc r24, r1 \n\t"
2795         "adc r22, r25 \n\t"
2796         "mul r2, r19 \n\t"
2797         "add r23, r0 \n\t"
2798         "adc r24, r1 \n\t"
2799         "adc r22, r25 \n\t"
2800         "mul r3, r18 \n\t"
2801         "add r23, r0 \n\t"
2802         "adc r24, r1 \n\t"
2803         "adc r22, r25 \n\t"
2804         "mul r4, r17 \n\t"
2805         "add r23, r0 \n\t"
2806         "adc r24, r1 \n\t"
2807         "adc r22, r25 \n\t"
2808         "mul r5, r16 \n\t"
2809         "add r23, r0 \n\t"
2810         "adc r24, r1 \n\t"
2811         "adc r22, r25 \n\t"
2812         "ld r0, z \n\t"
2813         "add r23, r0 \n\t"
2814         "adc r24, r25 \n\t"
2815         "adc r22, r25 \n\t"
2816         "st z+, r23 \n\t"
2817
2818         "ldi r23, 0 \n\t"
2819         "mul r7, r15 \n\t"
2820         "add r24, r0 \n\t"
2821         "adc r22, r1 \n\t"
2822         "adc r23, r25 \n\t"
2823         "mul r8, r14 \n\t"
2824         "add r24, r0 \n\t"
2825         "adc r22, r1 \n\t"
2826         "adc r23, r25 \n\t"
2827         "mul r9, r13 \n\t"
2828         "add r24, r0 \n\t"
2829         "adc r22, r1 \n\t"
2830         "adc r23, r25 \n\t"
2831         "mul r10, r12 \n\t"
2832         "add r24, r0 \n\t"
2833         "adc r22, r1 \n\t"
2834         "adc r23, r25 \n\t"
2835         "mul r11, r21 \n\t"
2836         "add r24, r0 \n\t"
2837         "adc r22, r1 \n\t"
2838         "adc r23, r25 \n\t"
2839         "mul r2, r20 \n\t"
2840         "add r24, r0 \n\t"
2841         "adc r22, r1 \n\t"
2842         "adc r23, r25 \n\t"
2843         "mul r3, r19 \n\t"
2844         "add r24, r0 \n\t"
2845         "adc r22, r1 \n\t"
2846         "adc r23, r25 \n\t"
2847         "mul r4, r18 \n\t"
2848         "add r24, r0 \n\t"
2849         "adc r22, r1 \n\t"
2850         "adc r23, r25 \n\t"
2851         "mul r5, r17 \n\t"
2852         "add r24, r0 \n\t"
2853         "adc r22, r1 \n\t"
2854         "adc r23, r25 \n\t"
2855         "st z+, r24 \n\t"
2856
2857         "ldi r24, 0 \n\t"
2858         "mul r8, r15 \n\t"
2859         "add r22, r0 \n\t"
2860         "adc r23, r1 \n\t"
2861         "adc r24, r25 \n\t"
2862         "mul r9, r14 \n\t"
2863         "add r22, r0 \n\t"
2864         "adc r23, r1 \n\t"
2865         "adc r24, r25 \n\t"
2866         "mul r10, r13 \n\t"
2867         "add r22, r0 \n\t"
2868         "adc r23, r1 \n\t"
2869         "adc r24, r25 \n\t"
2870         "mul r11, r12 \n\t"
2871         "add r22, r0 \n\t"
2872         "adc r23, r1 \n\t"
2873         "adc r24, r25 \n\t"
2874         "mul r2, r21 \n\t"
2875         "add r22, r0 \n\t"
2876         "adc r23, r1 \n\t"
2877         "adc r24, r25 \n\t"
2878         "mul r3, r20 \n\t"
2879         "add r22, r0 \n\t"
2880         "adc r23, r1 \n\t"
2881         "adc r24, r25 \n\t"
2882         "mul r4, r19 \n\t"
2883         "add r22, r0 \n\t"
2884         "adc r23, r1 \n\t"
2885         "adc r24, r25 \n\t"
2886         "mul r5, r18 \n\t"
2887         "add r22, r0 \n\t"
2888         "adc r23, r1 \n\t"
2889         "adc r24, r25 \n\t"
2890         "st z+, r22 \n\t"
2891
2892         "ldi r22, 0 \n\t"
2893         "mul r9, r15 \n\t"
2894         "add r23, r0 \n\t"
2895         "adc r24, r1 \n\t"
2896         "adc r22, r25 \n\t"
2897         "mul r10, r14 \n\t"
2898         "add r23, r0 \n\t"
2899         "adc r24, r1 \n\t"
2900         "adc r22, r25 \n\t"
2901         "mul r11, r13 \n\t"
2902         "add r23, r0 \n\t"
2903         "adc r24, r1 \n\t"
2904         "adc r22, r25 \n\t"
2905         "mul r2, r12 \n\t"
2906         "add r23, r0 \n\t"
2907         "adc r24, r1 \n\t"
2908         "adc r22, r25 \n\t"
2909         "mul r3, r21 \n\t"
2910         "add r23, r0 \n\t"
2911         "adc r24, r1 \n\t"
2912         "adc r22, r25 \n\t"
2913         "mul r4, r20 \n\t"
2914         "add r23, r0 \n\t"
2915         "adc r24, r1 \n\t"
2916         "adc r22, r25 \n\t"
2917         "mul r5, r19 \n\t"
2918         "add r23, r0 \n\t"
2919         "adc r24, r1 \n\t"
2920         "adc r22, r25 \n\t"
2921         "st z+, r23 \n\t"
2922
2923         "ldi r23, 0 \n\t"
2924         "mul r10, r15 \n\t"
2925         "add r24, r0 \n\t"
2926         "adc r22, r1 \n\t"
2927         "adc r23, r25 \n\t"
2928         "mul r11, r14 \n\t"
2929         "add r24, r0 \n\t"
2930         "adc r22, r1 \n\t"
2931         "adc r23, r25 \n\t"
2932         "mul r2, r13 \n\t"
2933         "add r24, r0 \n\t"
2934         "adc r22, r1 \n\t"
2935         "adc r23, r25 \n\t"
2936         "mul r3, r12 \n\t"
2937         "add r24, r0 \n\t"
2938         "adc r22, r1 \n\t"
2939         "adc r23, r25 \n\t"
2940         "mul r4, r21 \n\t"
2941         "add r24, r0 \n\t"
2942         "adc r22, r1 \n\t"
2943         "adc r23, r25 \n\t"
2944         "mul r5, r20 \n\t"
2945         "add r24, r0 \n\t"
2946         "adc r22, r1 \n\t"
2947         "adc r23, r25 \n\t"
2948         "st z+, r24 \n\t"
2949
2950         "ldi r24, 0 \n\t"
2951         "mul r11, r15 \n\t"
2952         "add r22, r0 \n\t"
2953         "adc r23, r1 \n\t"
2954         "adc r24, r25 \n\t"
2955         "mul r2, r14 \n\t"
2956         "add r22, r0 \n\t"
2957         "adc r23, r1 \n\t"
2958         "adc r24, r25 \n\t"
2959         "mul r3, r13 \n\t"
2960         "add r22, r0 \n\t"
2961         "adc r23, r1 \n\t"
2962         "adc r24, r25 \n\t"
2963         "mul r4, r12 \n\t"
2964         "add r22, r0 \n\t"
2965         "adc r23, r1 \n\t"
2966         "adc r24, r25 \n\t"
2967         "mul r5, r21 \n\t"
2968         "add r22, r0 \n\t"
2969         "adc r23, r1 \n\t"
2970         "adc r24, r25 \n\t"
2971         "st z+, r22 \n\t"
2972
2973         "ldi r22, 0 \n\t"
2974         "mul r2, r15 \n\t"
2975         "add r23, r0 \n\t"
2976         "adc r24, r1 \n\t"
2977         "adc r22, r25 \n\t"
2978         "mul r3, r14 \n\t"
2979         "add r23, r0 \n\t"
2980         "adc r24, r1 \n\t"
2981         "adc r22, r25 \n\t"
2982         "mul r4, r13 \n\t"
2983         "add r23, r0 \n\t"
2984         "adc r24, r1 \n\t"
2985         "adc r22, r25 \n\t"
2986         "mul r5, r12 \n\t"
2987         "add r23, r0 \n\t"
2988         "adc r24, r1 \n\t"
2989         "adc r22, r25 \n\t"
2990         "st z+, r23 \n\t"
2991
2992         "ldi r23, 0 \n\t"
2993         "mul r3, r15 \n\t"
2994         "add r24, r0 \n\t"
2995         "adc r22, r1 \n\t"
2996         "adc r23, r25 \n\t"
2997         "mul r4, r14 \n\t"
2998         "add r24, r0 \n\t"
2999         "adc r22, r1 \n\t"
3000         "adc r23, r25 \n\t"
3001         "mul r5, r13 \n\t"
3002         "add r24, r0 \n\t"
3003         "adc r22, r1 \n\t"
3004         "adc r23, r25 \n\t"
3005         "st z+, r24 \n\t"
3006
3007         "ldi r24, 0 \n\t"
3008         "mul r4, r15 \n\t"
3009         "add r22, r0 \n\t"
3010         "adc r23, r1 \n\t"
3011         "adc r24, r25 \n\t"
3012         "mul r5, r14 \n\t"
3013         "add r22, r0 \n\t"
3014         "adc r23, r1 \n\t"
3015         "adc r24, r25 \n\t"
3016         "st z+, r22 \n\t"
3017
3018         "mul r5, r15 \n\t"
3019         "add r23, r0 \n\t"
3020         "adc r24, r1 \n\t"
3021         "st z+, r23 \n\t"
3022         "st z+, r24 \n\t"
3023
3024         "sbiw r30, 38 \n\t"
3025         "sbiw r28, 24 \n\t"
3026         "sbiw r26, 14 \n\t"
3027         "ld r2, x+ \n\t"
3028         "ld r12, y+ \n\t"
3029         "ld r3, x+ \n\t"
3030         "ld r13, y+ \n\t"
3031         "ld r4, x+ \n\t"
3032         "ld r14, y+ \n\t"
3033         "ld r5, x+ \n\t"
3034         "ld r15, y+ \n\t"
3035         "ld r6, x+ \n\t"
3036         "ld r16, y+ \n\t"
3037         "ld r7, x+ \n\t"
3038         "ld r17, y+ \n\t"
3039         "ld r8, x+ \n\t"
3040         "ld r18, y+ \n\t"
3041         "ld r9, x+ \n\t"
3042         "ld r19, y+ \n\t"
3043         "ld r10, x+ \n\t"
3044         "ld r20, y+ \n\t"
3045         "ld r11, x+ \n\t"
3046         "ld r21, y+ \n\t"
3047
3048         "ldi r23, 0 \n\t"
3049         "mul r2, r12 \n\t"
3050         "st z+, r0 \n\t"
3051         "mov r22, r1 \n\t"
3052
3053         "ldi r24, 0 \n\t"
3054         "mul r2, r13 \n\t"
3055         "add r22, r0 \n\t"
3056         "adc r23, r1 \n\t"
3057         "mul r3, r12 \n\t"
3058         "add r22, r0 \n\t"
3059         "adc r23, r1 \n\t"
3060         "adc r24, r25 \n\t"
3061         "st z+, r22 \n\t"
3062
3063         "ldi r22, 0 \n\t"
3064         "mul r2, r14 \n\t"
3065         "add r23, r0 \n\t"
3066         "adc r24, r1 \n\t"
3067         "adc r22, r25 \n\t"
3068         "mul r3, r13 \n\t"
3069         "add r23, r0 \n\t"
3070         "adc r24, r1 \n\t"
3071         "adc r22, r25 \n\t"
3072         "mul r4, r12 \n\t"
3073         "add r23, r0 \n\t"
3074         "adc r24, r1 \n\t"
3075         "adc r22, r25 \n\t"
3076         "st z+, r23 \n\t"
3077
3078         "ldi r23, 0 \n\t"
3079         "mul r2, r15 \n\t"
3080         "add r24, r0 \n\t"
3081         "adc r22, r1 \n\t"
3082         "adc r23, r25 \n\t"
3083         "mul r3, r14 \n\t"
3084         "add r24, r0 \n\t"
3085         "adc r22, r1 \n\t"
3086         "adc r23, r25 \n\t"
3087         "mul r4, r13 \n\t"
3088         "add r24, r0 \n\t"
3089         "adc r22, r1 \n\t"
3090         "adc r23, r25 \n\t"
3091         "mul r5, r12 \n\t"
3092         "add r24, r0 \n\t"
3093         "adc r22, r1 \n\t"
3094         "adc r23, r25 \n\t"
3095         "st z+, r24 \n\t"
3096
3097         "ldi r24, 0 \n\t"
3098         "mul r2, r16 \n\t"
3099         "add r22, r0 \n\t"
3100         "adc r23, r1 \n\t"
3101         "adc r24, r25 \n\t"
3102         "mul r3, r15 \n\t"
3103         "add r22, r0 \n\t"
3104         "adc r23, r1 \n\t"
3105         "adc r24, r25 \n\t"
3106         "mul r4, r14 \n\t"
3107         "add r22, r0 \n\t"
3108         "adc r23, r1 \n\t"
3109         "adc r24, r25 \n\t"
3110         "mul r5, r13 \n\t"
3111         "add r22, r0 \n\t"
3112         "adc r23, r1 \n\t"
3113         "adc r24, r25 \n\t"
3114         "mul r6, r12 \n\t"
3115         "add r22, r0 \n\t"
3116         "adc r23, r1 \n\t"
3117         "adc r24, r25 \n\t"
3118         "st z+, r22 \n\t"
3119
3120         "ldi r22, 0 \n\t"
3121         "mul r2, r17 \n\t"
3122         "add r23, r0 \n\t"
3123         "adc r24, r1 \n\t"
3124         "adc r22, r25 \n\t"
3125         "mul r3, r16 \n\t"
3126         "add r23, r0 \n\t"
3127         "adc r24, r1 \n\t"
3128         "adc r22, r25 \n\t"
3129         "mul r4, r15 \n\t"
3130         "add r23, r0 \n\t"
3131         "adc r24, r1 \n\t"
3132         "adc r22, r25 \n\t"
3133         "mul r5, r14 \n\t"
3134         "add r23, r0 \n\t"
3135         "adc r24, r1 \n\t"
3136         "adc r22, r25 \n\t"
3137         "mul r6, r13 \n\t"
3138         "add r23, r0 \n\t"
3139         "adc r24, r1 \n\t"
3140         "adc r22, r25 \n\t"
3141         "mul r7, r12 \n\t"
3142         "add r23, r0 \n\t"
3143         "adc r24, r1 \n\t"
3144         "adc r22, r25 \n\t"
3145         "st z+, r23 \n\t"
3146
3147         "ldi r23, 0 \n\t"
3148         "mul r2, r18 \n\t"
3149         "add r24, r0 \n\t"
3150         "adc r22, r1 \n\t"
3151         "adc r23, r25 \n\t"
3152         "mul r3, r17 \n\t"
3153         "add r24, r0 \n\t"
3154         "adc r22, r1 \n\t"
3155         "adc r23, r25 \n\t"
3156         "mul r4, r16 \n\t"
3157         "add r24, r0 \n\t"
3158         "adc r22, r1 \n\t"
3159         "adc r23, r25 \n\t"
3160         "mul r5, r15 \n\t"
3161         "add r24, r0 \n\t"
3162         "adc r22, r1 \n\t"
3163         "adc r23, r25 \n\t"
3164         "mul r6, r14 \n\t"
3165         "add r24, r0 \n\t"
3166         "adc r22, r1 \n\t"
3167         "adc r23, r25 \n\t"
3168         "mul r7, r13 \n\t"
3169         "add r24, r0 \n\t"
3170         "adc r22, r1 \n\t"
3171         "adc r23, r25 \n\t"
3172         "mul r8, r12 \n\t"
3173         "add r24, r0 \n\t"
3174         "adc r22, r1 \n\t"
3175         "adc r23, r25 \n\t"
3176         "st z+, r24 \n\t"
3177
3178         "ldi r24, 0 \n\t"
3179         "mul r2, r19 \n\t"
3180         "add r22, r0 \n\t"
3181         "adc r23, r1 \n\t"
3182         "adc r24, r25 \n\t"
3183         "mul r3, r18 \n\t"
3184         "add r22, r0 \n\t"
3185         "adc r23, r1 \n\t"
3186         "adc r24, r25 \n\t"
3187         "mul r4, r17 \n\t"
3188         "add r22, r0 \n\t"
3189         "adc r23, r1 \n\t"
3190         "adc r24, r25 \n\t"
3191         "mul r5, r16 \n\t"
3192         "add r22, r0 \n\t"
3193         "adc r23, r1 \n\t"
3194         "adc r24, r25 \n\t"
3195         "mul r6, r15 \n\t"
3196         "add r22, r0 \n\t"
3197         "adc r23, r1 \n\t"
3198         "adc r24, r25 \n\t"
3199         "mul r7, r14 \n\t"
3200         "add r22, r0 \n\t"
3201         "adc r23, r1 \n\t"
3202         "adc r24, r25 \n\t"
3203         "mul r8, r13 \n\t"
3204         "add r22, r0 \n\t"
3205         "adc r23, r1 \n\t"
3206         "adc r24, r25 \n\t"
3207         "mul r9, r12 \n\t"
3208         "add r22, r0 \n\t"
3209         "adc r23, r1 \n\t"
3210         "adc r24, r25 \n\t"
3211         "st z+, r22 \n\t"
3212
3213         "ldi r22, 0 \n\t"
3214         "mul r2, r20 \n\t"
3215         "add r23, r0 \n\t"
3216         "adc r24, r1 \n\t"
3217         "adc r22, r25 \n\t"
3218         "mul r3, r19 \n\t"
3219         "add r23, r0 \n\t"
3220         "adc r24, r1 \n\t"
3221         "adc r22, r25 \n\t"
3222         "mul r4, r18 \n\t"
3223         "add r23, r0 \n\t"
3224         "adc r24, r1 \n\t"
3225         "adc r22, r25 \n\t"
3226         "mul r5, r17 \n\t"
3227         "add r23, r0 \n\t"
3228         "adc r24, r1 \n\t"
3229         "adc r22, r25 \n\t"
3230         "mul r6, r16 \n\t"
3231         "add r23, r0 \n\t"
3232         "adc r24, r1 \n\t"
3233         "adc r22, r25 \n\t"
3234         "mul r7, r15 \n\t"
3235         "add r23, r0 \n\t"
3236         "adc r24, r1 \n\t"
3237         "adc r22, r25 \n\t"
3238         "mul r8, r14 \n\t"
3239         "add r23, r0 \n\t"
3240         "adc r24, r1 \n\t"
3241         "adc r22, r25 \n\t"
3242         "mul r9, r13 \n\t"
3243         "add r23, r0 \n\t"
3244         "adc r24, r1 \n\t"
3245         "adc r22, r25 \n\t"
3246         "mul r10, r12 \n\t"
3247         "add r23, r0 \n\t"
3248         "adc r24, r1 \n\t"
3249         "adc r22, r25 \n\t"
3250         "st z+, r23 \n\t"
3251
3252         "ldi r23, 0 \n\t"
3253         "mul r2, r21 \n\t"
3254         "add r24, r0 \n\t"
3255         "adc r22, r1 \n\t"
3256         "adc r23, r25 \n\t"
3257         "mul r3, r20 \n\t"
3258         "add r24, r0 \n\t"
3259         "adc r22, r1 \n\t"
3260         "adc r23, r25 \n\t"
3261         "mul r4, r19 \n\t"
3262         "add r24, r0 \n\t"
3263         "adc r22, r1 \n\t"
3264         "adc r23, r25 \n\t"
3265         "mul r5, r18 \n\t"
3266         "add r24, r0 \n\t"
3267         "adc r22, r1 \n\t"
3268         "adc r23, r25 \n\t"
3269         "mul r6, r17 \n\t"
3270         "add r24, r0 \n\t"
3271         "adc r22, r1 \n\t"
3272         "adc r23, r25 \n\t"
3273         "mul r7, r16 \n\t"
3274         "add r24, r0 \n\t"
3275         "adc r22, r1 \n\t"
3276         "adc r23, r25 \n\t"
3277         "mul r8, r15 \n\t"
3278         "add r24, r0 \n\t"
3279         "adc r22, r1 \n\t"
3280         "adc r23, r25 \n\t"
3281         "mul r9, r14 \n\t"
3282         "add r24, r0 \n\t"
3283         "adc r22, r1 \n\t"
3284         "adc r23, r25 \n\t"
3285         "mul r10, r13 \n\t"
3286         "add r24, r0 \n\t"
3287         "adc r22, r1 \n\t"
3288         "adc r23, r25 \n\t"
3289         "mul r11, r12 \n\t"
3290         "add r24, r0 \n\t"
3291         "adc r22, r1 \n\t"
3292         "adc r23, r25 \n\t"
3293         "st z+, r24 \n\t"
3294
3295         "ld r2, x+ \n\t"
3296         "ldi r24, 0 \n\t"
3297         "mul r3, r21 \n\t"
3298         "add r22, r0 \n\t"
3299         "adc r23, r1 \n\t"
3300         "adc r24, r25 \n\t"
3301         "mul r4, r20 \n\t"
3302         "add r22, r0 \n\t"
3303         "adc r23, r1 \n\t"
3304         "adc r24, r25 \n\t"
3305         "mul r5, r19 \n\t"
3306         "add r22, r0 \n\t"
3307         "adc r23, r1 \n\t"
3308         "adc r24, r25 \n\t"
3309         "mul r6, r18 \n\t"
3310         "add r22, r0 \n\t"
3311         "adc r23, r1 \n\t"
3312         "adc r24, r25 \n\t"
3313         "mul r7, r17 \n\t"
3314         "add r22, r0 \n\t"
3315         "adc r23, r1 \n\t"
3316         "adc r24, r25 \n\t"
3317         "mul r8, r16 \n\t"
3318         "add r22, r0 \n\t"
3319         "adc r23, r1 \n\t"
3320         "adc r24, r25 \n\t"
3321         "mul r9, r15 \n\t"
3322         "add r22, r0 \n\t"
3323         "adc r23, r1 \n\t"
3324         "adc r24, r25 \n\t"
3325         "mul r10, r14 \n\t"
3326         "add r22, r0 \n\t"
3327         "adc r23, r1 \n\t"
3328         "adc r24, r25 \n\t"
3329         "mul r11, r13 \n\t"
3330         "add r22, r0 \n\t"
3331         "adc r23, r1 \n\t"
3332         "adc r24, r25 \n\t"
3333         "mul r2, r12 \n\t"
3334         "add r22, r0 \n\t"
3335         "adc r23, r1 \n\t"
3336         "adc r24, r25 \n\t"
3337         "ld r0, z \n\t"
3338         "add r22, r0 \n\t"
3339         "adc r23, r25 \n\t"
3340         "adc r24, r25 \n\t"
3341         "st z+, r22 \n\t"
3342
3343         "ld r3, x+ \n\t"
3344         "ldi r22, 0 \n\t"
3345         "mul r4, r21 \n\t"
3346         "add r23, r0 \n\t"
3347         "adc r24, r1 \n\t"
3348         "adc r22, r25 \n\t"
3349         "mul r5, r20 \n\t"
3350         "add r23, r0 \n\t"
3351         "adc r24, r1 \n\t"
3352         "adc r22, r25 \n\t"
3353         "mul r6, r19 \n\t"
3354         "add r23, r0 \n\t"
3355         "adc r24, r1 \n\t"
3356         "adc r22, r25 \n\t"
3357         "mul r7, r18 \n\t"
3358         "add r23, r0 \n\t"
3359         "adc r24, r1 \n\t"
3360         "adc r22, r25 \n\t"
3361         "mul r8, r17 \n\t"
3362         "add r23, r0 \n\t"
3363         "adc r24, r1 \n\t"
3364         "adc r22, r25 \n\t"
3365         "mul r9, r16 \n\t"
3366         "add r23, r0 \n\t"
3367         "adc r24, r1 \n\t"
3368         "adc r22, r25 \n\t"
3369         "mul r10, r15 \n\t"
3370         "add r23, r0 \n\t"
3371         "adc r24, r1 \n\t"
3372         "adc r22, r25 \n\t"
3373         "mul r11, r14 \n\t"
3374         "add r23, r0 \n\t"
3375         "adc r24, r1 \n\t"
3376         "adc r22, r25 \n\t"
3377         "mul r2, r13 \n\t"
3378         "add r23, r0 \n\t"
3379         "adc r24, r1 \n\t"
3380         "adc r22, r25 \n\t"
3381         "mul r3, r12 \n\t"
3382         "add r23, r0 \n\t"
3383         "adc r24, r1 \n\t"
3384         "adc r22, r25 \n\t"
3385         "ld r0, z \n\t"
3386         "add r23, r0 \n\t"
3387         "adc r24, r25 \n\t"
3388         "adc r22, r25 \n\t"
3389         "st z+, r23 \n\t"
3390
3391         "ld r4, x+ \n\t"
3392         "ldi r23, 0 \n\t"
3393         "mul r5, r21 \n\t"
3394         "add r24, r0 \n\t"
3395         "adc r22, r1 \n\t"
3396         "adc r23, r25 \n\t"
3397         "mul r6, r20 \n\t"
3398         "add r24, r0 \n\t"
3399         "adc r22, r1 \n\t"
3400         "adc r23, r25 \n\t"
3401         "mul r7, r19 \n\t"
3402         "add r24, r0 \n\t"
3403         "adc r22, r1 \n\t"
3404         "adc r23, r25 \n\t"
3405         "mul r8, r18 \n\t"
3406         "add r24, r0 \n\t"
3407         "adc r22, r1 \n\t"
3408         "adc r23, r25 \n\t"
3409         "mul r9, r17 \n\t"
3410         "add r24, r0 \n\t"
3411         "adc r22, r1 \n\t"
3412         "adc r23, r25 \n\t"
3413         "mul r10, r16 \n\t"
3414         "add r24, r0 \n\t"
3415         "adc r22, r1 \n\t"
3416         "adc r23, r25 \n\t"
3417         "mul r11, r15 \n\t"
3418         "add r24, r0 \n\t"
3419         "adc r22, r1 \n\t"
3420         "adc r23, r25 \n\t"
3421         "mul r2, r14 \n\t"
3422         "add r24, r0 \n\t"
3423         "adc r22, r1 \n\t"
3424         "adc r23, r25 \n\t"
3425         "mul r3, r13 \n\t"
3426         "add r24, r0 \n\t"
3427         "adc r22, r1 \n\t"
3428         "adc r23, r25 \n\t"
3429         "mul r4, r12 \n\t"
3430         "add r24, r0 \n\t"
3431         "adc r22, r1 \n\t"
3432         "adc r23, r25 \n\t"
3433         "ld r0, z \n\t"
3434         "add r24, r0 \n\t"
3435         "adc r22, r25 \n\t"
3436         "adc r23, r25 \n\t"
3437         "st z+, r24 \n\t"
3438
3439         "ld r5, x+ \n\t"
3440         "ldi r24, 0 \n\t"
3441         "mul r6, r21 \n\t"
3442         "add r22, r0 \n\t"
3443         "adc r23, r1 \n\t"
3444         "adc r24, r25 \n\t"
3445         "mul r7, r20 \n\t"
3446         "add r22, r0 \n\t"
3447         "adc r23, r1 \n\t"
3448         "adc r24, r25 \n\t"
3449         "mul r8, r19 \n\t"
3450         "add r22, r0 \n\t"
3451         "adc r23, r1 \n\t"
3452         "adc r24, r25 \n\t"
3453         "mul r9, r18 \n\t"
3454         "add r22, r0 \n\t"
3455         "adc r23, r1 \n\t"
3456         "adc r24, r25 \n\t"
3457         "mul r10, r17 \n\t"
3458         "add r22, r0 \n\t"
3459         "adc r23, r1 \n\t"
3460         "adc r24, r25 \n\t"
3461         "mul r11, r16 \n\t"
3462         "add r22, r0 \n\t"
3463         "adc r23, r1 \n\t"
3464         "adc r24, r25 \n\t"
3465         "mul r2, r15 \n\t"
3466         "add r22, r0 \n\t"
3467         "adc r23, r1 \n\t"
3468         "adc r24, r25 \n\t"
3469         "mul r3, r14 \n\t"
3470         "add r22, r0 \n\t"
3471         "adc r23, r1 \n\t"
3472         "adc r24, r25 \n\t"
3473         "mul r4, r13 \n\t"
3474         "add r22, r0 \n\t"
3475         "adc r23, r1 \n\t"
3476         "adc r24, r25 \n\t"
3477         "mul r5, r12 \n\t"
3478         "add r22, r0 \n\t"
3479         "adc r23, r1 \n\t"
3480         "adc r24, r25 \n\t"
3481         "ld r0, z \n\t"
3482         "add r22, r0 \n\t"
3483         "adc r23, r25 \n\t"
3484         "adc r24, r25 \n\t"
3485         "st z+, r22 \n\t"
3486
3487         "ld r6, x+ \n\t"
3488         "ldi r22, 0 \n\t"
3489         "mul r7, r21 \n\t"
3490         "add r23, r0 \n\t"
3491         "adc r24, r1 \n\t"
3492         "adc r22, r25 \n\t"
3493         "mul r8, r20 \n\t"
3494         "add r23, r0 \n\t"
3495         "adc r24, r1 \n\t"
3496         "adc r22, r25 \n\t"
3497         "mul r9, r19 \n\t"
3498         "add r23, r0 \n\t"
3499         "adc r24, r1 \n\t"
3500         "adc r22, r25 \n\t"
3501         "mul r10, r18 \n\t"
3502         "add r23, r0 \n\t"
3503         "adc r24, r1 \n\t"
3504         "adc r22, r25 \n\t"
3505         "mul r11, r17 \n\t"
3506         "add r23, r0 \n\t"
3507         "adc r24, r1 \n\t"
3508         "adc r22, r25 \n\t"
3509         "mul r2, r16 \n\t"
3510         "add r23, r0 \n\t"
3511         "adc r24, r1 \n\t"
3512         "adc r22, r25 \n\t"
3513         "mul r3, r15 \n\t"
3514         "add r23, r0 \n\t"
3515         "adc r24, r1 \n\t"
3516         "adc r22, r25 \n\t"
3517         "mul r4, r14 \n\t"
3518         "add r23, r0 \n\t"
3519         "adc r24, r1 \n\t"
3520         "adc r22, r25 \n\t"
3521         "mul r5, r13 \n\t"
3522         "add r23, r0 \n\t"
3523         "adc r24, r1 \n\t"
3524         "adc r22, r25 \n\t"
3525         "mul r6, r12 \n\t"
3526         "add r23, r0 \n\t"
3527         "adc r24, r1 \n\t"
3528         "adc r22, r25 \n\t"
3529         "ld r0, z \n\t"
3530         "add r23, r0 \n\t"
3531         "adc r24, r25 \n\t"
3532         "adc r22, r25 \n\t"
3533         "st z+, r23 \n\t"
3534
3535         "ld r7, x+ \n\t"
3536         "ldi r23, 0 \n\t"
3537         "mul r8, r21 \n\t"
3538         "add r24, r0 \n\t"
3539         "adc r22, r1 \n\t"
3540         "adc r23, r25 \n\t"
3541         "mul r9, r20 \n\t"
3542         "add r24, r0 \n\t"
3543         "adc r22, r1 \n\t"
3544         "adc r23, r25 \n\t"
3545         "mul r10, r19 \n\t"
3546         "add r24, r0 \n\t"
3547         "adc r22, r1 \n\t"
3548         "adc r23, r25 \n\t"
3549         "mul r11, r18 \n\t"
3550         "add r24, r0 \n\t"
3551         "adc r22, r1 \n\t"
3552         "adc r23, r25 \n\t"
3553         "mul r2, r17 \n\t"
3554         "add r24, r0 \n\t"
3555         "adc r22, r1 \n\t"
3556         "adc r23, r25 \n\t"
3557         "mul r3, r16 \n\t"
3558         "add r24, r0 \n\t"
3559         "adc r22, r1 \n\t"
3560         "adc r23, r25 \n\t"
3561         "mul r4, r15 \n\t"
3562         "add r24, r0 \n\t"
3563         "adc r22, r1 \n\t"
3564         "adc r23, r25 \n\t"
3565         "mul r5, r14 \n\t"
3566         "add r24, r0 \n\t"
3567         "adc r22, r1 \n\t"
3568         "adc r23, r25 \n\t"
3569         "mul r6, r13 \n\t"
3570         "add r24, r0 \n\t"
3571         "adc r22, r1 \n\t"
3572         "adc r23, r25 \n\t"
3573         "mul r7, r12 \n\t"
3574         "add r24, r0 \n\t"
3575         "adc r22, r1 \n\t"
3576         "adc r23, r25 \n\t"
3577         "ld r0, z \n\t"
3578         "add r24, r0 \n\t"
3579         "adc r22, r25 \n\t"
3580         "adc r23, r25 \n\t"
3581         "st z+, r24 \n\t"
3582
3583         "ld r8, x+ \n\t"
3584         "ldi r24, 0 \n\t"
3585         "mul r9, r21 \n\t"
3586         "add r22, r0 \n\t"
3587         "adc r23, r1 \n\t"
3588         "adc r24, r25 \n\t"
3589         "mul r10, r20 \n\t"
3590         "add r22, r0 \n\t"
3591         "adc r23, r1 \n\t"
3592         "adc r24, r25 \n\t"
3593         "mul r11, r19 \n\t"
3594         "add r22, r0 \n\t"
3595         "adc r23, r1 \n\t"
3596         "adc r24, r25 \n\t"
3597         "mul r2, r18 \n\t"
3598         "add r22, r0 \n\t"
3599         "adc r23, r1 \n\t"
3600         "adc r24, r25 \n\t"
3601         "mul r3, r17 \n\t"
3602         "add r22, r0 \n\t"
3603         "adc r23, r1 \n\t"
3604         "adc r24, r25 \n\t"
3605         "mul r4, r16 \n\t"
3606         "add r22, r0 \n\t"
3607         "adc r23, r1 \n\t"
3608         "adc r24, r25 \n\t"
3609         "mul r5, r15 \n\t"
3610         "add r22, r0 \n\t"
3611         "adc r23, r1 \n\t"
3612         "adc r24, r25 \n\t"
3613         "mul r6, r14 \n\t"
3614         "add r22, r0 \n\t"
3615         "adc r23, r1 \n\t"
3616         "adc r24, r25 \n\t"
3617         "mul r7, r13 \n\t"
3618         "add r22, r0 \n\t"
3619         "adc r23, r1 \n\t"
3620         "adc r24, r25 \n\t"
3621         "mul r8, r12 \n\t"
3622         "add r22, r0 \n\t"
3623         "adc r23, r1 \n\t"
3624         "adc r24, r25 \n\t"
3625         "ld r0, z \n\t"
3626         "add r22, r0 \n\t"
3627         "adc r23, r25 \n\t"
3628         "adc r24, r25 \n\t"
3629         "st z+, r22 \n\t"
3630
3631         "ld r9, x+ \n\t"
3632         "ldi r22, 0 \n\t"
3633         "mul r10, r21 \n\t"
3634         "add r23, r0 \n\t"
3635         "adc r24, r1 \n\t"
3636         "adc r22, r25 \n\t"
3637         "mul r11, r20 \n\t"
3638         "add r23, r0 \n\t"
3639         "adc r24, r1 \n\t"
3640         "adc r22, r25 \n\t"
3641         "mul r2, r19 \n\t"
3642         "add r23, r0 \n\t"
3643         "adc r24, r1 \n\t"
3644         "adc r22, r25 \n\t"
3645         "mul r3, r18 \n\t"
3646         "add r23, r0 \n\t"
3647         "adc r24, r1 \n\t"
3648         "adc r22, r25 \n\t"
3649         "mul r4, r17 \n\t"
3650         "add r23, r0 \n\t"
3651         "adc r24, r1 \n\t"
3652         "adc r22, r25 \n\t"
3653         "mul r5, r16 \n\t"
3654         "add r23, r0 \n\t"
3655         "adc r24, r1 \n\t"
3656         "adc r22, r25 \n\t"
3657         "mul r6, r15 \n\t"
3658         "add r23, r0 \n\t"
3659         "adc r24, r1 \n\t"
3660         "adc r22, r25 \n\t"
3661         "mul r7, r14 \n\t"
3662         "add r23, r0 \n\t"
3663         "adc r24, r1 \n\t"
3664         "adc r22, r25 \n\t"
3665         "mul r8, r13 \n\t"
3666         "add r23, r0 \n\t"
3667         "adc r24, r1 \n\t"
3668         "adc r22, r25 \n\t"
3669         "mul r9, r12 \n\t"
3670         "add r23, r0 \n\t"
3671         "adc r24, r1 \n\t"
3672         "adc r22, r25 \n\t"
3673         "ld r0, z \n\t"
3674         "add r23, r0 \n\t"
3675         "adc r24, r25 \n\t"
3676         "adc r22, r25 \n\t"
3677         "st z+, r23 \n\t"
3678
3679         "ld r10, x+ \n\t"
3680         "ldi r23, 0 \n\t"
3681         "mul r11, r21 \n\t"
3682         "add r24, r0 \n\t"
3683         "adc r22, r1 \n\t"
3684         "adc r23, r25 \n\t"
3685         "mul r2, r20 \n\t"
3686         "add r24, r0 \n\t"
3687         "adc r22, r1 \n\t"
3688         "adc r23, r25 \n\t"
3689         "mul r3, r19 \n\t"
3690         "add r24, r0 \n\t"
3691         "adc r22, r1 \n\t"
3692         "adc r23, r25 \n\t"
3693         "mul r4, r18 \n\t"
3694         "add r24, r0 \n\t"
3695         "adc r22, r1 \n\t"
3696         "adc r23, r25 \n\t"
3697         "mul r5, r17 \n\t"
3698         "add r24, r0 \n\t"
3699         "adc r22, r1 \n\t"
3700         "adc r23, r25 \n\t"
3701         "mul r6, r16 \n\t"
3702         "add r24, r0 \n\t"
3703         "adc r22, r1 \n\t"
3704         "adc r23, r25 \n\t"
3705         "mul r7, r15 \n\t"
3706         "add r24, r0 \n\t"
3707         "adc r22, r1 \n\t"
3708         "adc r23, r25 \n\t"
3709         "mul r8, r14 \n\t"
3710         "add r24, r0 \n\t"
3711         "adc r22, r1 \n\t"
3712         "adc r23, r25 \n\t"
3713         "mul r9, r13 \n\t"
3714         "add r24, r0 \n\t"
3715         "adc r22, r1 \n\t"
3716         "adc r23, r25 \n\t"
3717         "mul r10, r12 \n\t"
3718         "add r24, r0 \n\t"
3719         "adc r22, r1 \n\t"
3720         "adc r23, r25 \n\t"
3721         "ld r0, z \n\t"
3722         "add r24, r0 \n\t"
3723         "adc r22, r25 \n\t"
3724         "adc r23, r25 \n\t"
3725         "st z+, r24 \n\t"
3726
3727         "ld r11, x+ \n\t"
3728         "ldi r24, 0 \n\t"
3729         "mul r2, r21 \n\t"
3730         "add r22, r0 \n\t"
3731         "adc r23, r1 \n\t"
3732         "adc r24, r25 \n\t"
3733         "mul r3, r20 \n\t"
3734         "add r22, r0 \n\t"
3735         "adc r23, r1 \n\t"
3736         "adc r24, r25 \n\t"
3737         "mul r4, r19 \n\t"
3738         "add r22, r0 \n\t"
3739         "adc r23, r1 \n\t"
3740         "adc r24, r25 \n\t"
3741         "mul r5, r18 \n\t"
3742         "add r22, r0 \n\t"
3743         "adc r23, r1 \n\t"
3744         "adc r24, r25 \n\t"
3745         "mul r6, r17 \n\t"
3746         "add r22, r0 \n\t"
3747         "adc r23, r1 \n\t"
3748         "adc r24, r25 \n\t"
3749         "mul r7, r16 \n\t"
3750         "add r22, r0 \n\t"
3751         "adc r23, r1 \n\t"
3752         "adc r24, r25 \n\t"
3753         "mul r8, r15 \n\t"
3754         "add r22, r0 \n\t"
3755         "adc r23, r1 \n\t"
3756         "adc r24, r25 \n\t"
3757         "mul r9, r14 \n\t"
3758         "add r22, r0 \n\t"
3759         "adc r23, r1 \n\t"
3760         "adc r24, r25 \n\t"
3761         "mul r10, r13 \n\t"
3762         "add r22, r0 \n\t"
3763         "adc r23, r1 \n\t"
3764         "adc r24, r25 \n\t"
3765         "mul r11, r12 \n\t"
3766         "add r22, r0 \n\t"
3767         "adc r23, r1 \n\t"
3768         "adc r24, r25 \n\t"
3769         "ld r0, z \n\t"
3770         "add r22, r0 \n\t"
3771         "adc r23, r25 \n\t"
3772         "adc r24, r25 \n\t"
3773         "st z+, r22 \n\t"
3774
3775         "ld r2, x+ \n\t"
3776         "ldi r22, 0 \n\t"
3777         "mul r3, r21 \n\t"
3778         "add r23, r0 \n\t"
3779         "adc r24, r1 \n\t"
3780         "adc r22, r25 \n\t"
3781         "mul r4, r20 \n\t"
3782         "add r23, r0 \n\t"
3783         "adc r24, r1 \n\t"
3784         "adc r22, r25 \n\t"
3785         "mul r5, r19 \n\t"
3786         "add r23, r0 \n\t"
3787         "adc r24, r1 \n\t"
3788         "adc r22, r25 \n\t"
3789         "mul r6, r18 \n\t"
3790         "add r23, r0 \n\t"
3791         "adc r24, r1 \n\t"
3792         "adc r22, r25 \n\t"
3793         "mul r7, r17 \n\t"
3794         "add r23, r0 \n\t"
3795         "adc r24, r1 \n\t"
3796         "adc r22, r25 \n\t"
3797         "mul r8, r16 \n\t"
3798         "add r23, r0 \n\t"
3799         "adc r24, r1 \n\t"
3800         "adc r22, r25 \n\t"
3801         "mul r9, r15 \n\t"
3802         "add r23, r0 \n\t"
3803         "adc r24, r1 \n\t"
3804         "adc r22, r25 \n\t"
3805         "mul r10, r14 \n\t"
3806         "add r23, r0 \n\t"
3807         "adc r24, r1 \n\t"
3808         "adc r22, r25 \n\t"
3809         "mul r11, r13 \n\t"
3810         "add r23, r0 \n\t"
3811         "adc r24, r1 \n\t"
3812         "adc r22, r25 \n\t"
3813         "mul r2, r12 \n\t"
3814         "add r23, r0 \n\t"
3815         "adc r24, r1 \n\t"
3816         "adc r22, r25 \n\t"
3817         "ld r0, z \n\t"
3818         "add r23, r0 \n\t"
3819         "adc r24, r25 \n\t"
3820         "adc r22, r25 \n\t"
3821         "st z+, r23 \n\t"
3822
3823         "ld r3, x+ \n\t"
3824         "ldi r23, 0 \n\t"
3825         "mul r4, r21 \n\t"
3826         "add r24, r0 \n\t"
3827         "adc r22, r1 \n\t"
3828         "adc r23, r25 \n\t"
3829         "mul r5, r20 \n\t"
3830         "add r24, r0 \n\t"
3831         "adc r22, r1 \n\t"
3832         "adc r23, r25 \n\t"
3833         "mul r6, r19 \n\t"
3834         "add r24, r0 \n\t"
3835         "adc r22, r1 \n\t"
3836         "adc r23, r25 \n\t"
3837         "mul r7, r18 \n\t"
3838         "add r24, r0 \n\t"
3839         "adc r22, r1 \n\t"
3840         "adc r23, r25 \n\t"
3841         "mul r8, r17 \n\t"
3842         "add r24, r0 \n\t"
3843         "adc r22, r1 \n\t"
3844         "adc r23, r25 \n\t"
3845         "mul r9, r16 \n\t"
3846         "add r24, r0 \n\t"
3847         "adc r22, r1 \n\t"
3848         "adc r23, r25 \n\t"
3849         "mul r10, r15 \n\t"
3850         "add r24, r0 \n\t"
3851         "adc r22, r1 \n\t"
3852         "adc r23, r25 \n\t"
3853         "mul r11, r14 \n\t"
3854         "add r24, r0 \n\t"
3855         "adc r22, r1 \n\t"
3856         "adc r23, r25 \n\t"
3857         "mul r2, r13 \n\t"
3858         "add r24, r0 \n\t"
3859         "adc r22, r1 \n\t"
3860         "adc r23, r25 \n\t"
3861         "mul r3, r12 \n\t"
3862         "add r24, r0 \n\t"
3863         "adc r22, r1 \n\t"
3864         "adc r23, r25 \n\t"
3865         "ld r0, z \n\t"
3866         "add r24, r0 \n\t"
3867         "adc r22, r25 \n\t"
3868         "adc r23, r25 \n\t"
3869         "st z+, r24 \n\t"
3870
3871         "ld r4, x+ \n\t"
3872         "ldi r24, 0 \n\t"
3873         "mul r5, r21 \n\t"
3874         "add r22, r0 \n\t"
3875         "adc r23, r1 \n\t"
3876         "adc r24, r25 \n\t"
3877         "mul r6, r20 \n\t"
3878         "add r22, r0 \n\t"
3879         "adc r23, r1 \n\t"
3880         "adc r24, r25 \n\t"
3881         "mul r7, r19 \n\t"
3882         "add r22, r0 \n\t"
3883         "adc r23, r1 \n\t"
3884         "adc r24, r25 \n\t"
3885         "mul r8, r18 \n\t"
3886         "add r22, r0 \n\t"
3887         "adc r23, r1 \n\t"
3888         "adc r24, r25 \n\t"
3889         "mul r9, r17 \n\t"
3890         "add r22, r0 \n\t"
3891         "adc r23, r1 \n\t"
3892         "adc r24, r25 \n\t"
3893         "mul r10, r16 \n\t"
3894         "add r22, r0 \n\t"
3895         "adc r23, r1 \n\t"
3896         "adc r24, r25 \n\t"
3897         "mul r11, r15 \n\t"
3898         "add r22, r0 \n\t"
3899         "adc r23, r1 \n\t"
3900         "adc r24, r25 \n\t"
3901         "mul r2, r14 \n\t"
3902         "add r22, r0 \n\t"
3903         "adc r23, r1 \n\t"
3904         "adc r24, r25 \n\t"
3905         "mul r3, r13 \n\t"
3906         "add r22, r0 \n\t"
3907         "adc r23, r1 \n\t"
3908         "adc r24, r25 \n\t"
3909         "mul r4, r12 \n\t"
3910         "add r22, r0 \n\t"
3911         "adc r23, r1 \n\t"
3912         "adc r24, r25 \n\t"
3913         "ld r0, z \n\t"
3914         "add r22, r0 \n\t"
3915         "adc r23, r25 \n\t"
3916         "adc r24, r25 \n\t"
3917         "st z+, r22 \n\t"
3918
3919         "ld r5, x+ \n\t"
3920         "ldi r22, 0 \n\t"
3921         "mul r6, r21 \n\t"
3922         "add r23, r0 \n\t"
3923         "adc r24, r1 \n\t"
3924         "adc r22, r25 \n\t"
3925         "mul r7, r20 \n\t"
3926         "add r23, r0 \n\t"
3927         "adc r24, r1 \n\t"
3928         "adc r22, r25 \n\t"
3929         "mul r8, r19 \n\t"
3930         "add r23, r0 \n\t"
3931         "adc r24, r1 \n\t"
3932         "adc r22, r25 \n\t"
3933         "mul r9, r18 \n\t"
3934         "add r23, r0 \n\t"
3935         "adc r24, r1 \n\t"
3936         "adc r22, r25 \n\t"
3937         "mul r10, r17 \n\t"
3938         "add r23, r0 \n\t"
3939         "adc r24, r1 \n\t"
3940         "adc r22, r25 \n\t"
3941         "mul r11, r16 \n\t"
3942         "add r23, r0 \n\t"
3943         "adc r24, r1 \n\t"
3944         "adc r22, r25 \n\t"
3945         "mul r2, r15 \n\t"
3946         "add r23, r0 \n\t"
3947         "adc r24, r1 \n\t"
3948         "adc r22, r25 \n\t"
3949         "mul r3, r14 \n\t"
3950         "add r23, r0 \n\t"
3951         "adc r24, r1 \n\t"
3952         "adc r22, r25 \n\t"
3953         "mul r4, r13 \n\t"
3954         "add r23, r0 \n\t"
3955         "adc r24, r1 \n\t"
3956         "adc r22, r25 \n\t"
3957         "mul r5, r12 \n\t"
3958         "add r23, r0 \n\t"
3959         "adc r24, r1 \n\t"
3960         "adc r22, r25 \n\t"
3961         "ld r0, z \n\t"
3962         "add r23, r0 \n\t"
3963         "adc r24, r25 \n\t"
3964         "adc r22, r25 \n\t"
3965         "st z+, r23 \n\t"
3966
3967         "ld r12, y+ \n\t"
3968         "ldi r23, 0 \n\t"
3969         "mul r6, r12 \n\t"
3970         "add r24, r0 \n\t"
3971         "adc r22, r1 \n\t"
3972         "adc r23, r25 \n\t"
3973         "mul r7, r21 \n\t"
3974         "add r24, r0 \n\t"
3975         "adc r22, r1 \n\t"
3976         "adc r23, r25 \n\t"
3977         "mul r8, r20 \n\t"
3978         "add r24, r0 \n\t"
3979         "adc r22, r1 \n\t"
3980         "adc r23, r25 \n\t"
3981         "mul r9, r19 \n\t"
3982         "add r24, r0 \n\t"
3983         "adc r22, r1 \n\t"
3984         "adc r23, r25 \n\t"
3985         "mul r10, r18 \n\t"
3986         "add r24, r0 \n\t"
3987         "adc r22, r1 \n\t"
3988         "adc r23, r25 \n\t"
3989         "mul r11, r17 \n\t"
3990         "add r24, r0 \n\t"
3991         "adc r22, r1 \n\t"
3992         "adc r23, r25 \n\t"
3993         "mul r2, r16 \n\t"
3994         "add r24, r0 \n\t"
3995         "adc r22, r1 \n\t"
3996         "adc r23, r25 \n\t"
3997         "mul r3, r15 \n\t"
3998         "add r24, r0 \n\t"
3999         "adc r22, r1 \n\t"
4000         "adc r23, r25 \n\t"
4001         "mul r4, r14 \n\t"
4002         "add r24, r0 \n\t"
4003         "adc r22, r1 \n\t"
4004         "adc r23, r25 \n\t"
4005         "mul r5, r13 \n\t"
4006         "add r24, r0 \n\t"
4007         "adc r22, r1 \n\t"
4008         "adc r23, r25 \n\t"
4009         "ld r0, z \n\t"
4010         "add r24, r0 \n\t"
4011         "adc r22, r25 \n\t"
4012         "adc r23, r25 \n\t"
4013         "st z+, r24 \n\t"
4014
4015         "ld r13, y+ \n\t"
4016         "ldi r24, 0 \n\t"
4017         "mul r6, r13 \n\t"
4018         "add r22, r0 \n\t"
4019         "adc r23, r1 \n\t"
4020         "adc r24, r25 \n\t"
4021         "mul r7, r12 \n\t"
4022         "add r22, r0 \n\t"
4023         "adc r23, r1 \n\t"
4024         "adc r24, r25 \n\t"
4025         "mul r8, r21 \n\t"
4026         "add r22, r0 \n\t"
4027         "adc r23, r1 \n\t"
4028         "adc r24, r25 \n\t"
4029         "mul r9, r20 \n\t"
4030         "add r22, r0 \n\t"
4031         "adc r23, r1 \n\t"
4032         "adc r24, r25 \n\t"
4033         "mul r10, r19 \n\t"
4034         "add r22, r0 \n\t"
4035         "adc r23, r1 \n\t"
4036         "adc r24, r25 \n\t"
4037         "mul r11, r18 \n\t"
4038         "add r22, r0 \n\t"
4039         "adc r23, r1 \n\t"
4040         "adc r24, r25 \n\t"
4041         "mul r2, r17 \n\t"
4042         "add r22, r0 \n\t"
4043         "adc r23, r1 \n\t"
4044         "adc r24, r25 \n\t"
4045         "mul r3, r16 \n\t"
4046         "add r22, r0 \n\t"
4047         "adc r23, r1 \n\t"
4048         "adc r24, r25 \n\t"
4049         "mul r4, r15 \n\t"
4050         "add r22, r0 \n\t"
4051         "adc r23, r1 \n\t"
4052         "adc r24, r25 \n\t"
4053         "mul r5, r14 \n\t"
4054         "add r22, r0 \n\t"
4055         "adc r23, r1 \n\t"
4056         "adc r24, r25 \n\t"
4057         "ld r0, z \n\t"
4058         "add r22, r0 \n\t"
4059         "adc r23, r25 \n\t"
4060         "adc r24, r25 \n\t"
4061         "st z+, r22 \n\t"
4062
4063         "ld r14, y+ \n\t"
4064         "ldi r22, 0 \n\t"
4065         "mul r6, r14 \n\t"
4066         "add r23, r0 \n\t"
4067         "adc r24, r1 \n\t"
4068         "adc r22, r25 \n\t"
4069         "mul r7, r13 \n\t"
4070         "add r23, r0 \n\t"
4071         "adc r24, r1 \n\t"
4072         "adc r22, r25 \n\t"
4073         "mul r8, r12 \n\t"
4074         "add r23, r0 \n\t"
4075         "adc r24, r1 \n\t"
4076         "adc r22, r25 \n\t"
4077         "mul r9, r21 \n\t"
4078         "add r23, r0 \n\t"
4079         "adc r24, r1 \n\t"
4080         "adc r22, r25 \n\t"
4081         "mul r10, r20 \n\t"
4082         "add r23, r0 \n\t"
4083         "adc r24, r1 \n\t"
4084         "adc r22, r25 \n\t"
4085         "mul r11, r19 \n\t"
4086         "add r23, r0 \n\t"
4087         "adc r24, r1 \n\t"
4088         "adc r22, r25 \n\t"
4089         "mul r2, r18 \n\t"
4090         "add r23, r0 \n\t"
4091         "adc r24, r1 \n\t"
4092         "adc r22, r25 \n\t"
4093         "mul r3, r17 \n\t"
4094         "add r23, r0 \n\t"
4095         "adc r24, r1 \n\t"
4096         "adc r22, r25 \n\t"
4097         "mul r4, r16 \n\t"
4098         "add r23, r0 \n\t"
4099         "adc r24, r1 \n\t"
4100         "adc r22, r25 \n\t"
4101         "mul r5, r15 \n\t"
4102         "add r23, r0 \n\t"
4103         "adc r24, r1 \n\t"
4104         "adc r22, r25 \n\t"
4105         "ld r0, z \n\t"
4106         "add r23, r0 \n\t"
4107         "adc r24, r25 \n\t"
4108         "adc r22, r25 \n\t"
4109         "st z+, r23 \n\t"
4110
4111         "ld r15, y+ \n\t"
4112         "ldi r23, 0 \n\t"
4113         "mul r6, r15 \n\t"
4114         "add r24, r0 \n\t"
4115         "adc r22, r1 \n\t"
4116         "adc r23, r25 \n\t"
4117         "mul r7, r14 \n\t"
4118         "add r24, r0 \n\t"
4119         "adc r22, r1 \n\t"
4120         "adc r23, r25 \n\t"
4121         "mul r8, r13 \n\t"
4122         "add r24, r0 \n\t"
4123         "adc r22, r1 \n\t"
4124         "adc r23, r25 \n\t"
4125         "mul r9, r12 \n\t"
4126         "add r24, r0 \n\t"
4127         "adc r22, r1 \n\t"
4128         "adc r23, r25 \n\t"
4129         "mul r10, r21 \n\t"
4130         "add r24, r0 \n\t"
4131         "adc r22, r1 \n\t"
4132         "adc r23, r25 \n\t"
4133         "mul r11, r20 \n\t"
4134         "add r24, r0 \n\t"
4135         "adc r22, r1 \n\t"
4136         "adc r23, r25 \n\t"
4137         "mul r2, r19 \n\t"
4138         "add r24, r0 \n\t"
4139         "adc r22, r1 \n\t"
4140         "adc r23, r25 \n\t"
4141         "mul r3, r18 \n\t"
4142         "add r24, r0 \n\t"
4143         "adc r22, r1 \n\t"
4144         "adc r23, r25 \n\t"
4145         "mul r4, r17 \n\t"
4146         "add r24, r0 \n\t"
4147         "adc r22, r1 \n\t"
4148         "adc r23, r25 \n\t"
4149         "mul r5, r16 \n\t"
4150         "add r24, r0 \n\t"
4151         "adc r22, r1 \n\t"
4152         "adc r23, r25 \n\t"
4153         "ld r0, z \n\t"
4154         "add r24, r0 \n\t"
4155         "adc r22, r25 \n\t"
4156         "adc r23, r25 \n\t"
4157         "st z+, r24 \n\t"
4158
4159         "ld r16, y+ \n\t"
4160         "ldi r24, 0 \n\t"
4161         "mul r6, r16 \n\t"
4162         "add r22, r0 \n\t"
4163         "adc r23, r1 \n\t"
4164         "adc r24, r25 \n\t"
4165         "mul r7, r15 \n\t"
4166         "add r22, r0 \n\t"
4167         "adc r23, r1 \n\t"
4168         "adc r24, r25 \n\t"
4169         "mul r8, r14 \n\t"
4170         "add r22, r0 \n\t"
4171         "adc r23, r1 \n\t"
4172         "adc r24, r25 \n\t"
4173         "mul r9, r13 \n\t"
4174         "add r22, r0 \n\t"
4175         "adc r23, r1 \n\t"
4176         "adc r24, r25 \n\t"
4177         "mul r10, r12 \n\t"
4178         "add r22, r0 \n\t"
4179         "adc r23, r1 \n\t"
4180         "adc r24, r25 \n\t"
4181         "mul r11, r21 \n\t"
4182         "add r22, r0 \n\t"
4183         "adc r23, r1 \n\t"
4184         "adc r24, r25 \n\t"
4185         "mul r2, r20 \n\t"
4186         "add r22, r0 \n\t"
4187         "adc r23, r1 \n\t"
4188         "adc r24, r25 \n\t"
4189         "mul r3, r19 \n\t"
4190         "add r22, r0 \n\t"
4191         "adc r23, r1 \n\t"
4192         "adc r24, r25 \n\t"
4193         "mul r4, r18 \n\t"
4194         "add r22, r0 \n\t"
4195         "adc r23, r1 \n\t"
4196         "adc r24, r25 \n\t"
4197         "mul r5, r17 \n\t"
4198         "add r22, r0 \n\t"
4199         "adc r23, r1 \n\t"
4200         "adc r24, r25 \n\t"
4201         "ld r0, z \n\t"
4202         "add r22, r0 \n\t"
4203         "adc r23, r25 \n\t"
4204         "adc r24, r25 \n\t"
4205         "st z+, r22 \n\t"
4206
4207         "ld r17, y+ \n\t"
4208         "ldi r22, 0 \n\t"
4209         "mul r6, r17 \n\t"
4210         "add r23, r0 \n\t"
4211         "adc r24, r1 \n\t"
4212         "adc r22, r25 \n\t"
4213         "mul r7, r16 \n\t"
4214         "add r23, r0 \n\t"
4215         "adc r24, r1 \n\t"
4216         "adc r22, r25 \n\t"
4217         "mul r8, r15 \n\t"
4218         "add r23, r0 \n\t"
4219         "adc r24, r1 \n\t"
4220         "adc r22, r25 \n\t"
4221         "mul r9, r14 \n\t"
4222         "add r23, r0 \n\t"
4223         "adc r24, r1 \n\t"
4224         "adc r22, r25 \n\t"
4225         "mul r10, r13 \n\t"
4226         "add r23, r0 \n\t"
4227         "adc r24, r1 \n\t"
4228         "adc r22, r25 \n\t"
4229         "mul r11, r12 \n\t"
4230         "add r23, r0 \n\t"
4231         "adc r24, r1 \n\t"
4232         "adc r22, r25 \n\t"
4233         "mul r2, r21 \n\t"
4234         "add r23, r0 \n\t"
4235         "adc r24, r1 \n\t"
4236         "adc r22, r25 \n\t"
4237         "mul r3, r20 \n\t"
4238         "add r23, r0 \n\t"
4239         "adc r24, r1 \n\t"
4240         "adc r22, r25 \n\t"
4241         "mul r4, r19 \n\t"
4242         "add r23, r0 \n\t"
4243         "adc r24, r1 \n\t"
4244         "adc r22, r25 \n\t"
4245         "mul r5, r18 \n\t"
4246         "add r23, r0 \n\t"
4247         "adc r24, r1 \n\t"
4248         "adc r22, r25 \n\t"
4249         "ld r0, z \n\t"
4250         "add r23, r0 \n\t"
4251         "adc r24, r25 \n\t"
4252         "adc r22, r25 \n\t"
4253         "st z+, r23 \n\t"
4254
4255         "ld r18, y+ \n\t"
4256         "ldi r23, 0 \n\t"
4257         "mul r6, r18 \n\t"
4258         "add r24, r0 \n\t"
4259         "adc r22, r1 \n\t"
4260         "adc r23, r25 \n\t"
4261         "mul r7, r17 \n\t"
4262         "add r24, r0 \n\t"
4263         "adc r22, r1 \n\t"
4264         "adc r23, r25 \n\t"
4265         "mul r8, r16 \n\t"
4266         "add r24, r0 \n\t"
4267         "adc r22, r1 \n\t"
4268         "adc r23, r25 \n\t"
4269         "mul r9, r15 \n\t"
4270         "add r24, r0 \n\t"
4271         "adc r22, r1 \n\t"
4272         "adc r23, r25 \n\t"
4273         "mul r10, r14 \n\t"
4274         "add r24, r0 \n\t"
4275         "adc r22, r1 \n\t"
4276         "adc r23, r25 \n\t"
4277         "mul r11, r13 \n\t"
4278         "add r24, r0 \n\t"
4279         "adc r22, r1 \n\t"
4280         "adc r23, r25 \n\t"
4281         "mul r2, r12 \n\t"
4282         "add r24, r0 \n\t"
4283         "adc r22, r1 \n\t"
4284         "adc r23, r25 \n\t"
4285         "mul r3, r21 \n\t"
4286         "add r24, r0 \n\t"
4287         "adc r22, r1 \n\t"
4288         "adc r23, r25 \n\t"
4289         "mul r4, r20 \n\t"
4290         "add r24, r0 \n\t"
4291         "adc r22, r1 \n\t"
4292         "adc r23, r25 \n\t"
4293         "mul r5, r19 \n\t"
4294         "add r24, r0 \n\t"
4295         "adc r22, r1 \n\t"
4296         "adc r23, r25 \n\t"
4297         "ld r0, z \n\t"
4298         "add r24, r0 \n\t"
4299         "adc r22, r25 \n\t"
4300         "adc r23, r25 \n\t"
4301         "st z+, r24 \n\t"
4302
4303         "ld r19, y+ \n\t"
4304         "ldi r24, 0 \n\t"
4305         "mul r6, r19 \n\t"
4306         "add r22, r0 \n\t"
4307         "adc r23, r1 \n\t"
4308         "adc r24, r25 \n\t"
4309         "mul r7, r18 \n\t"
4310         "add r22, r0 \n\t"
4311         "adc r23, r1 \n\t"
4312         "adc r24, r25 \n\t"
4313         "mul r8, r17 \n\t"
4314         "add r22, r0 \n\t"
4315         "adc r23, r1 \n\t"
4316         "adc r24, r25 \n\t"
4317         "mul r9, r16 \n\t"
4318         "add r22, r0 \n\t"
4319         "adc r23, r1 \n\t"
4320         "adc r24, r25 \n\t"
4321         "mul r10, r15 \n\t"
4322         "add r22, r0 \n\t"
4323         "adc r23, r1 \n\t"
4324         "adc r24, r25 \n\t"
4325         "mul r11, r14 \n\t"
4326         "add r22, r0 \n\t"
4327         "adc r23, r1 \n\t"
4328         "adc r24, r25 \n\t"
4329         "mul r2, r13 \n\t"
4330         "add r22, r0 \n\t"
4331         "adc r23, r1 \n\t"
4332         "adc r24, r25 \n\t"
4333         "mul r3, r12 \n\t"
4334         "add r22, r0 \n\t"
4335         "adc r23, r1 \n\t"
4336         "adc r24, r25 \n\t"
4337         "mul r4, r21 \n\t"
4338         "add r22, r0 \n\t"
4339         "adc r23, r1 \n\t"
4340         "adc r24, r25 \n\t"
4341         "mul r5, r20 \n\t"
4342         "add r22, r0 \n\t"
4343         "adc r23, r1 \n\t"
4344         "adc r24, r25 \n\t"
4345         "ld r0, z \n\t"
4346         "add r22, r0 \n\t"
4347         "adc r23, r25 \n\t"
4348         "adc r24, r25 \n\t"
4349         "st z+, r22 \n\t"
4350
4351         "ld r20, y+ \n\t"
4352         "ldi r22, 0 \n\t"
4353         "mul r6, r20 \n\t"
4354         "add r23, r0 \n\t"
4355         "adc r24, r1 \n\t"
4356         "adc r22, r25 \n\t"
4357         "mul r7, r19 \n\t"
4358         "add r23, r0 \n\t"
4359         "adc r24, r1 \n\t"
4360         "adc r22, r25 \n\t"
4361         "mul r8, r18 \n\t"
4362         "add r23, r0 \n\t"
4363         "adc r24, r1 \n\t"
4364         "adc r22, r25 \n\t"
4365         "mul r9, r17 \n\t"
4366         "add r23, r0 \n\t"
4367         "adc r24, r1 \n\t"
4368         "adc r22, r25 \n\t"
4369         "mul r10, r16 \n\t"
4370         "add r23, r0 \n\t"
4371         "adc r24, r1 \n\t"
4372         "adc r22, r25 \n\t"
4373         "mul r11, r15 \n\t"
4374         "add r23, r0 \n\t"
4375         "adc r24, r1 \n\t"
4376         "adc r22, r25 \n\t"
4377         "mul r2, r14 \n\t"
4378         "add r23, r0 \n\t"
4379         "adc r24, r1 \n\t"
4380         "adc r22, r25 \n\t"
4381         "mul r3, r13 \n\t"
4382         "add r23, r0 \n\t"
4383         "adc r24, r1 \n\t"
4384         "adc r22, r25 \n\t"
4385         "mul r4, r12 \n\t"
4386         "add r23, r0 \n\t"
4387         "adc r24, r1 \n\t"
4388         "adc r22, r25 \n\t"
4389         "mul r5, r21 \n\t"
4390         "add r23, r0 \n\t"
4391         "adc r24, r1 \n\t"
4392         "adc r22, r25 \n\t"
4393         "ld r0, z \n\t"
4394         "add r23, r0 \n\t"
4395         "adc r24, r25 \n\t"
4396         "adc r22, r25 \n\t"
4397         "st z+, r23 \n\t"
4398
4399         "ld r21, y+ \n\t"
4400         "ldi r23, 0 \n\t"
4401         "mul r6, r21 \n\t"
4402         "add r24, r0 \n\t"
4403         "adc r22, r1 \n\t"
4404         "adc r23, r25 \n\t"
4405         "mul r7, r20 \n\t"
4406         "add r24, r0 \n\t"
4407         "adc r22, r1 \n\t"
4408         "adc r23, r25 \n\t"
4409         "mul r8, r19 \n\t"
4410         "add r24, r0 \n\t"
4411         "adc r22, r1 \n\t"
4412         "adc r23, r25 \n\t"
4413         "mul r9, r18 \n\t"
4414         "add r24, r0 \n\t"
4415         "adc r22, r1 \n\t"
4416         "adc r23, r25 \n\t"
4417         "mul r10, r17 \n\t"
4418         "add r24, r0 \n\t"
4419         "adc r22, r1 \n\t"
4420         "adc r23, r25 \n\t"
4421         "mul r11, r16 \n\t"
4422         "add r24, r0 \n\t"
4423         "adc r22, r1 \n\t"
4424         "adc r23, r25 \n\t"
4425         "mul r2, r15 \n\t"
4426         "add r24, r0 \n\t"
4427         "adc r22, r1 \n\t"
4428         "adc r23, r25 \n\t"
4429         "mul r3, r14 \n\t"
4430         "add r24, r0 \n\t"
4431         "adc r22, r1 \n\t"
4432         "adc r23, r25 \n\t"
4433         "mul r4, r13 \n\t"
4434         "add r24, r0 \n\t"
4435         "adc r22, r1 \n\t"
4436         "adc r23, r25 \n\t"
4437         "mul r5, r12 \n\t"
4438         "add r24, r0 \n\t"
4439         "adc r22, r1 \n\t"
4440         "adc r23, r25 \n\t"
4441         "ld r0, z \n\t"
4442         "add r24, r0 \n\t"
4443         "adc r22, r25 \n\t"
4444         "adc r23, r25 \n\t"
4445         "st z+, r24 \n\t"
4446
4447         "ld r12, y+ \n\t"
4448         "ldi r24, 0 \n\t"
4449         "mul r6, r12 \n\t"
4450         "add r22, r0 \n\t"
4451         "adc r23, r1 \n\t"
4452         "adc r24, r25 \n\t"
4453         "mul r7, r21 \n\t"
4454         "add r22, r0 \n\t"
4455         "adc r23, r1 \n\t"
4456         "adc r24, r25 \n\t"
4457         "mul r8, r20 \n\t"
4458         "add r22, r0 \n\t"
4459         "adc r23, r1 \n\t"
4460         "adc r24, r25 \n\t"
4461         "mul r9, r19 \n\t"
4462         "add r22, r0 \n\t"
4463         "adc r23, r1 \n\t"
4464         "adc r24, r25 \n\t"
4465         "mul r10, r18 \n\t"
4466         "add r22, r0 \n\t"
4467         "adc r23, r1 \n\t"
4468         "adc r24, r25 \n\t"
4469         "mul r11, r17 \n\t"
4470         "add r22, r0 \n\t"
4471         "adc r23, r1 \n\t"
4472         "adc r24, r25 \n\t"
4473         "mul r2, r16 \n\t"
4474         "add r22, r0 \n\t"
4475         "adc r23, r1 \n\t"
4476         "adc r24, r25 \n\t"
4477         "mul r3, r15 \n\t"
4478         "add r22, r0 \n\t"
4479         "adc r23, r1 \n\t"
4480         "adc r24, r25 \n\t"
4481         "mul r4, r14 \n\t"
4482         "add r22, r0 \n\t"
4483         "adc r23, r1 \n\t"
4484         "adc r24, r25 \n\t"
4485         "mul r5, r13 \n\t"
4486         "add r22, r0 \n\t"
4487         "adc r23, r1 \n\t"
4488         "adc r24, r25 \n\t"
4489         "ld r0, z \n\t"
4490         "add r22, r0 \n\t"
4491         "adc r23, r25 \n\t"
4492         "adc r24, r25 \n\t"
4493         "st z+, r22 \n\t"
4494
4495         "ld r13, y+ \n\t"
4496         "ldi r22, 0 \n\t"
4497         "mul r6, r13 \n\t"
4498         "add r23, r0 \n\t"
4499         "adc r24, r1 \n\t"
4500         "adc r22, r25 \n\t"
4501         "mul r7, r12 \n\t"
4502         "add r23, r0 \n\t"
4503         "adc r24, r1 \n\t"
4504         "adc r22, r25 \n\t"
4505         "mul r8, r21 \n\t"
4506         "add r23, r0 \n\t"
4507         "adc r24, r1 \n\t"
4508         "adc r22, r25 \n\t"
4509         "mul r9, r20 \n\t"
4510         "add r23, r0 \n\t"
4511         "adc r24, r1 \n\t"
4512         "adc r22, r25 \n\t"
4513         "mul r10, r19 \n\t"
4514         "add r23, r0 \n\t"
4515         "adc r24, r1 \n\t"
4516         "adc r22, r25 \n\t"
4517         "mul r11, r18 \n\t"
4518         "add r23, r0 \n\t"
4519         "adc r24, r1 \n\t"
4520         "adc r22, r25 \n\t"
4521         "mul r2, r17 \n\t"
4522         "add r23, r0 \n\t"
4523         "adc r24, r1 \n\t"
4524         "adc r22, r25 \n\t"
4525         "mul r3, r16 \n\t"
4526         "add r23, r0 \n\t"
4527         "adc r24, r1 \n\t"
4528         "adc r22, r25 \n\t"
4529         "mul r4, r15 \n\t"
4530         "add r23, r0 \n\t"
4531         "adc r24, r1 \n\t"
4532         "adc r22, r25 \n\t"
4533         "mul r5, r14 \n\t"
4534         "add r23, r0 \n\t"
4535         "adc r24, r1 \n\t"
4536         "adc r22, r25 \n\t"
4537         "ld r0, z \n\t"
4538         "add r23, r0 \n\t"
4539         "adc r24, r25 \n\t"
4540         "adc r22, r25 \n\t"
4541         "st z+, r23 \n\t"
4542
4543         "ld r14, y+ \n\t"
4544         "ldi r23, 0 \n\t"
4545         "mul r6, r14 \n\t"
4546         "add r24, r0 \n\t"
4547         "adc r22, r1 \n\t"
4548         "adc r23, r25 \n\t"
4549         "mul r7, r13 \n\t"
4550         "add r24, r0 \n\t"
4551         "adc r22, r1 \n\t"
4552         "adc r23, r25 \n\t"
4553         "mul r8, r12 \n\t"
4554         "add r24, r0 \n\t"
4555         "adc r22, r1 \n\t"
4556         "adc r23, r25 \n\t"
4557         "mul r9, r21 \n\t"
4558         "add r24, r0 \n\t"
4559         "adc r22, r1 \n\t"
4560         "adc r23, r25 \n\t"
4561         "mul r10, r20 \n\t"
4562         "add r24, r0 \n\t"
4563         "adc r22, r1 \n\t"
4564         "adc r23, r25 \n\t"
4565         "mul r11, r19 \n\t"
4566         "add r24, r0 \n\t"
4567         "adc r22, r1 \n\t"
4568         "adc r23, r25 \n\t"
4569         "mul r2, r18 \n\t"
4570         "add r24, r0 \n\t"
4571         "adc r22, r1 \n\t"
4572         "adc r23, r25 \n\t"
4573         "mul r3, r17 \n\t"
4574         "add r24, r0 \n\t"
4575         "adc r22, r1 \n\t"
4576         "adc r23, r25 \n\t"
4577         "mul r4, r16 \n\t"
4578         "add r24, r0 \n\t"
4579         "adc r22, r1 \n\t"
4580         "adc r23, r25 \n\t"
4581         "mul r5, r15 \n\t"
4582         "add r24, r0 \n\t"
4583         "adc r22, r1 \n\t"
4584         "adc r23, r25 \n\t"
4585         "ld r0, z \n\t"
4586         "add r24, r0 \n\t"
4587         "adc r22, r25 \n\t"
4588         "adc r23, r25 \n\t"
4589         "st z+, r24 \n\t"
4590
4591         "ld r15, y+ \n\t"
4592         "ldi r24, 0 \n\t"
4593         "mul r6, r15 \n\t"
4594         "add r22, r0 \n\t"
4595         "adc r23, r1 \n\t"
4596         "adc r24, r25 \n\t"
4597         "mul r7, r14 \n\t"
4598         "add r22, r0 \n\t"
4599         "adc r23, r1 \n\t"
4600         "adc r24, r25 \n\t"
4601         "mul r8, r13 \n\t"
4602         "add r22, r0 \n\t"
4603         "adc r23, r1 \n\t"
4604         "adc r24, r25 \n\t"
4605         "mul r9, r12 \n\t"
4606         "add r22, r0 \n\t"
4607         "adc r23, r1 \n\t"
4608         "adc r24, r25 \n\t"
4609         "mul r10, r21 \n\t"
4610         "add r22, r0 \n\t"
4611         "adc r23, r1 \n\t"
4612         "adc r24, r25 \n\t"
4613         "mul r11, r20 \n\t"
4614         "add r22, r0 \n\t"
4615         "adc r23, r1 \n\t"
4616         "adc r24, r25 \n\t"
4617         "mul r2, r19 \n\t"
4618         "add r22, r0 \n\t"
4619         "adc r23, r1 \n\t"
4620         "adc r24, r25 \n\t"
4621         "mul r3, r18 \n\t"
4622         "add r22, r0 \n\t"
4623         "adc r23, r1 \n\t"
4624         "adc r24, r25 \n\t"
4625         "mul r4, r17 \n\t"
4626         "add r22, r0 \n\t"
4627         "adc r23, r1 \n\t"
4628         "adc r24, r25 \n\t"
4629         "mul r5, r16 \n\t"
4630         "add r22, r0 \n\t"
4631         "adc r23, r1 \n\t"
4632         "adc r24, r25 \n\t"
4633         "ld r0, z \n\t"
4634         "add r22, r0 \n\t"
4635         "adc r23, r25 \n\t"
4636         "adc r24, r25 \n\t"
4637         "st z+, r22 \n\t"
4638
4639         "ldi r22, 0 \n\t"
4640         "mul r7, r15 \n\t"
4641         "add r23, r0 \n\t"
4642         "adc r24, r1 \n\t"
4643         "adc r22, r25 \n\t"
4644         "mul r8, r14 \n\t"
4645         "add r23, r0 \n\t"
4646         "adc r24, r1 \n\t"
4647         "adc r22, r25 \n\t"
4648         "mul r9, r13 \n\t"
4649         "add r23, r0 \n\t"
4650         "adc r24, r1 \n\t"
4651         "adc r22, r25 \n\t"
4652         "mul r10, r12 \n\t"
4653         "add r23, r0 \n\t"
4654         "adc r24, r1 \n\t"
4655         "adc r22, r25 \n\t"
4656         "mul r11, r21 \n\t"
4657         "add r23, r0 \n\t"
4658         "adc r24, r1 \n\t"
4659         "adc r22, r25 \n\t"
4660         "mul r2, r20 \n\t"
4661         "add r23, r0 \n\t"
4662         "adc r24, r1 \n\t"
4663         "adc r22, r25 \n\t"
4664         "mul r3, r19 \n\t"
4665         "add r23, r0 \n\t"
4666         "adc r24, r1 \n\t"
4667         "adc r22, r25 \n\t"
4668         "mul r4, r18 \n\t"
4669         "add r23, r0 \n\t"
4670         "adc r24, r1 \n\t"
4671         "adc r22, r25 \n\t"
4672         "mul r5, r17 \n\t"
4673         "add r23, r0 \n\t"
4674         "adc r24, r1 \n\t"
4675         "adc r22, r25 \n\t"
4676         "st z+, r23 \n\t"
4677
4678         "ldi r23, 0 \n\t"
4679         "mul r8, r15 \n\t"
4680         "add r24, r0 \n\t"
4681         "adc r22, r1 \n\t"
4682         "adc r23, r25 \n\t"
4683         "mul r9, r14 \n\t"
4684         "add r24, r0 \n\t"
4685         "adc r22, r1 \n\t"
4686         "adc r23, r25 \n\t"
4687         "mul r10, r13 \n\t"
4688         "add r24, r0 \n\t"
4689         "adc r22, r1 \n\t"
4690         "adc r23, r25 \n\t"
4691         "mul r11, r12 \n\t"
4692         "add r24, r0 \n\t"
4693         "adc r22, r1 \n\t"
4694         "adc r23, r25 \n\t"
4695         "mul r2, r21 \n\t"
4696         "add r24, r0 \n\t"
4697         "adc r22, r1 \n\t"
4698         "adc r23, r25 \n\t"
4699         "mul r3, r20 \n\t"
4700         "add r24, r0 \n\t"
4701         "adc r22, r1 \n\t"
4702         "adc r23, r25 \n\t"
4703         "mul r4, r19 \n\t"
4704         "add r24, r0 \n\t"
4705         "adc r22, r1 \n\t"
4706         "adc r23, r25 \n\t"
4707         "mul r5, r18 \n\t"
4708         "add r24, r0 \n\t"
4709         "adc r22, r1 \n\t"
4710         "adc r23, r25 \n\t"
4711         "st z+, r24 \n\t"
4712
4713         "ldi r24, 0 \n\t"
4714         "mul r9, r15 \n\t"
4715         "add r22, r0 \n\t"
4716         "adc r23, r1 \n\t"
4717         "adc r24, r25 \n\t"
4718         "mul r10, r14 \n\t"
4719         "add r22, r0 \n\t"
4720         "adc r23, r1 \n\t"
4721         "adc r24, r25 \n\t"
4722         "mul r11, r13 \n\t"
4723         "add r22, r0 \n\t"
4724         "adc r23, r1 \n\t"
4725         "adc r24, r25 \n\t"
4726         "mul r2, r12 \n\t"
4727         "add r22, r0 \n\t"
4728         "adc r23, r1 \n\t"
4729         "adc r24, r25 \n\t"
4730         "mul r3, r21 \n\t"
4731         "add r22, r0 \n\t"
4732         "adc r23, r1 \n\t"
4733         "adc r24, r25 \n\t"
4734         "mul r4, r20 \n\t"
4735         "add r22, r0 \n\t"
4736         "adc r23, r1 \n\t"
4737         "adc r24, r25 \n\t"
4738         "mul r5, r19 \n\t"
4739         "add r22, r0 \n\t"
4740         "adc r23, r1 \n\t"
4741         "adc r24, r25 \n\t"
4742         "st z+, r22 \n\t"
4743
4744         "ldi r22, 0 \n\t"
4745         "mul r10, r15 \n\t"
4746         "add r23, r0 \n\t"
4747         "adc r24, r1 \n\t"
4748         "adc r22, r25 \n\t"
4749         "mul r11, r14 \n\t"
4750         "add r23, r0 \n\t"
4751         "adc r24, r1 \n\t"
4752         "adc r22, r25 \n\t"
4753         "mul r2, r13 \n\t"
4754         "add r23, r0 \n\t"
4755         "adc r24, r1 \n\t"
4756         "adc r22, r25 \n\t"
4757         "mul r3, r12 \n\t"
4758         "add r23, r0 \n\t"
4759         "adc r24, r1 \n\t"
4760         "adc r22, r25 \n\t"
4761         "mul r4, r21 \n\t"
4762         "add r23, r0 \n\t"
4763         "adc r24, r1 \n\t"
4764         "adc r22, r25 \n\t"
4765         "mul r5, r20 \n\t"
4766         "add r23, r0 \n\t"
4767         "adc r24, r1 \n\t"
4768         "adc r22, r25 \n\t"
4769         "st z+, r23 \n\t"
4770
4771         "ldi r23, 0 \n\t"
4772         "mul r11, r15 \n\t"
4773         "add r24, r0 \n\t"
4774         "adc r22, r1 \n\t"
4775         "adc r23, r25 \n\t"
4776         "mul r2, r14 \n\t"
4777         "add r24, r0 \n\t"
4778         "adc r22, r1 \n\t"
4779         "adc r23, r25 \n\t"
4780         "mul r3, r13 \n\t"
4781         "add r24, r0 \n\t"
4782         "adc r22, r1 \n\t"
4783         "adc r23, r25 \n\t"
4784         "mul r4, r12 \n\t"
4785         "add r24, r0 \n\t"
4786         "adc r22, r1 \n\t"
4787         "adc r23, r25 \n\t"
4788         "mul r5, r21 \n\t"
4789         "add r24, r0 \n\t"
4790         "adc r22, r1 \n\t"
4791         "adc r23, r25 \n\t"
4792         "st z+, r24 \n\t"
4793
4794         "ldi r24, 0 \n\t"
4795         "mul r2, r15 \n\t"
4796         "add r22, r0 \n\t"
4797         "adc r23, r1 \n\t"
4798         "adc r24, r25 \n\t"
4799         "mul r3, r14 \n\t"
4800         "add r22, r0 \n\t"
4801         "adc r23, r1 \n\t"
4802         "adc r24, r25 \n\t"
4803         "mul r4, r13 \n\t"
4804         "add r22, r0 \n\t"
4805         "adc r23, r1 \n\t"
4806         "adc r24, r25 \n\t"
4807         "mul r5, r12 \n\t"
4808         "add r22, r0 \n\t"
4809         "adc r23, r1 \n\t"
4810         "adc r24, r25 \n\t"
4811         "st z+, r22 \n\t"
4812
4813         "ldi r22, 0 \n\t"
4814         "mul r3, r15 \n\t"
4815         "add r23, r0 \n\t"
4816         "adc r24, r1 \n\t"
4817         "adc r22, r25 \n\t"
4818         "mul r4, r14 \n\t"
4819         "add r23, r0 \n\t"
4820         "adc r24, r1 \n\t"
4821         "adc r22, r25 \n\t"
4822         "mul r5, r13 \n\t"
4823         "add r23, r0 \n\t"
4824         "adc r24, r1 \n\t"
4825         "adc r22, r25 \n\t"
4826         "st z+, r23 \n\t"
4827
4828         "ldi r23, 0 \n\t"
4829         "mul r4, r15 \n\t"
4830         "add r24, r0 \n\t"
4831         "adc r22, r1 \n\t"
4832         "adc r23, r25 \n\t"
4833         "mul r5, r14 \n\t"
4834         "add r24, r0 \n\t"
4835         "adc r22, r1 \n\t"
4836         "adc r23, r25 \n\t"
4837         "st z+, r24 \n\t"
4838
4839         "mul r5, r15 \n\t"
4840         "add r22, r0 \n\t"
4841         "adc r23, r1 \n\t"
4842         "st z+, r22 \n\t"
4843         "st z+, r23 \n\t"
4844
4845         "eor r1, r1 \n\t"
4846         : "+x" (p_left), "+y" (p_right), "+z" (p_result)
4847         :
4848         : "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12",
4849           "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "cc", "memory"
4850     );
4851 }
4852 #define asm_mult 1
4853 #elif (uECC_BYTES == 32)
4854 __attribute((noinline))
4855 static void vli_mult(uint8_t *p_result, uint8_t *p_left, uint8_t *p_right)
4856 {
4857     __asm__ volatile (
4858         "adiw r30, 30 \n\t"
4859         "adiw r28, 30 \n\t"
4860         "ld r2, x+ \n\t"
4861         "ld r3, x+ \n\t"
4862         "ld r12, y+ \n\t"
4863         "ld r13, y+ \n\t"
4864         "ldi r25, 0 \n\t"
4865
4866         "ldi r23, 0 \n\t"
4867         "mul r2, r12 \n\t"
4868         "st z+, r0 \n\t"
4869         "mov r22, r1 \n\t"
4870
4871         "ldi r24, 0 \n\t"
4872         "mul r2, r13 \n\t"
4873         "add r22, r0 \n\t"
4874         "adc r23, r1 \n\t"
4875         "mul r3, r12 \n\t"
4876         "add r22, r0 \n\t"
4877         "adc r23, r1 \n\t"
4878         "adc r24, r25 \n\t"
4879         "st z+, r22 \n\t"
4880
4881         "mul r3, r13 \n\t"
4882         "add r23, r0 \n\t"
4883         "adc r24, r1 \n\t"
4884         "st z+, r23 \n\t"
4885         "st z+, r24 \n\t"
4886
4887         "sbiw r30, 14 \n\t"
4888         "sbiw r28, 12 \n\t"
4889         "ld r12, y+ \n\t"
4890         "ld r13, y+ \n\t"
4891         "ld r14, y+ \n\t"
4892         "ld r15, y+ \n\t"
4893         "ld r16, y+ \n\t"
4894         "ld r17, y+ \n\t"
4895         "ld r18, y+ \n\t"
4896         "ld r19, y+ \n\t"
4897         "ld r20, y+ \n\t"
4898         "ld r21, y+ \n\t"
4899         "ld r4, x+ \n\t"
4900         "ld r5, x+ \n\t"
4901         "ld r6, x+ \n\t"
4902         "ld r7, x+ \n\t"
4903         "ld r8, x+ \n\t"
4904         "ld r9, x+ \n\t"
4905         "ld r10, x+ \n\t"
4906         "ld r11, x+ \n\t"
4907
4908         "ldi r23, 0 \n\t"
4909         "mul r2, r12 \n\t"
4910         "st z+, r0 \n\t"
4911         "mov r22, r1 \n\t"
4912
4913         "ldi r24, 0 \n\t"
4914         "mul r2, r13 \n\t"
4915         "add r22, r0 \n\t"
4916         "adc r23, r1 \n\t"
4917         "mul r3, r12 \n\t"
4918         "add r22, r0 \n\t"
4919         "adc r23, r1 \n\t"
4920         "adc r24, r25 \n\t"
4921         "st z+, r22 \n\t"
4922
4923         "ldi r22, 0 \n\t"
4924         "mul r2, r14 \n\t"
4925         "add r23, r0 \n\t"
4926         "adc r24, r1 \n\t"
4927         "adc r22, r25 \n\t"
4928         "mul r3, r13 \n\t"
4929         "add r23, r0 \n\t"
4930         "adc r24, r1 \n\t"
4931         "adc r22, r25 \n\t"
4932         "mul r4, r12 \n\t"
4933         "add r23, r0 \n\t"
4934         "adc r24, r1 \n\t"
4935         "adc r22, r25 \n\t"
4936         "st z+, r23 \n\t"
4937
4938         "ldi r23, 0 \n\t"
4939         "mul r2, r15 \n\t"
4940         "add r24, r0 \n\t"
4941         "adc r22, r1 \n\t"
4942         "adc r23, r25 \n\t"
4943         "mul r3, r14 \n\t"
4944         "add r24, r0 \n\t"
4945         "adc r22, r1 \n\t"
4946         "adc r23, r25 \n\t"
4947         "mul r4, r13 \n\t"
4948         "add r24, r0 \n\t"
4949         "adc r22, r1 \n\t"
4950         "adc r23, r25 \n\t"
4951         "mul r5, r12 \n\t"
4952         "add r24, r0 \n\t"
4953         "adc r22, r1 \n\t"
4954         "adc r23, r25 \n\t"
4955         "st z+, r24 \n\t"
4956
4957         "ldi r24, 0 \n\t"
4958         "mul r2, r16 \n\t"
4959         "add r22, r0 \n\t"
4960         "adc r23, r1 \n\t"
4961         "adc r24, r25 \n\t"
4962         "mul r3, r15 \n\t"
4963         "add r22, r0 \n\t"
4964         "adc r23, r1 \n\t"
4965         "adc r24, r25 \n\t"
4966         "mul r4, r14 \n\t"
4967         "add r22, r0 \n\t"
4968         "adc r23, r1 \n\t"
4969         "adc r24, r25 \n\t"
4970         "mul r5, r13 \n\t"
4971         "add r22, r0 \n\t"
4972         "adc r23, r1 \n\t"
4973         "adc r24, r25 \n\t"
4974         "mul r6, r12 \n\t"
4975         "add r22, r0 \n\t"
4976         "adc r23, r1 \n\t"
4977         "adc r24, r25 \n\t"
4978         "st z+, r22 \n\t"
4979
4980         "ldi r22, 0 \n\t"
4981         "mul r2, r17 \n\t"
4982         "add r23, r0 \n\t"
4983         "adc r24, r1 \n\t"
4984         "adc r22, r25 \n\t"
4985         "mul r3, r16 \n\t"
4986         "add r23, r0 \n\t"
4987         "adc r24, r1 \n\t"
4988         "adc r22, r25 \n\t"
4989         "mul r4, r15 \n\t"
4990         "add r23, r0 \n\t"
4991         "adc r24, r1 \n\t"
4992         "adc r22, r25 \n\t"
4993         "mul r5, r14 \n\t"
4994         "add r23, r0 \n\t"
4995         "adc r24, r1 \n\t"
4996         "adc r22, r25 \n\t"
4997         "mul r6, r13 \n\t"
4998         "add r23, r0 \n\t"
4999         "adc r24, r1 \n\t"
5000         "adc r22, r25 \n\t"
5001         "mul r7, r12 \n\t"
5002         "add r23, r0 \n\t"
5003         "adc r24, r1 \n\t"
5004         "adc r22, r25 \n\t"
5005         "st z+, r23 \n\t"
5006
5007         "ldi r23, 0 \n\t"
5008         "mul r2, r18 \n\t"
5009         "add r24, r0 \n\t"
5010         "adc r22, r1 \n\t"
5011         "adc r23, r25 \n\t"
5012         "mul r3, r17 \n\t"
5013         "add r24, r0 \n\t"
5014         "adc r22, r1 \n\t"
5015         "adc r23, r25 \n\t"
5016         "mul r4, r16 \n\t"
5017         "add r24, r0 \n\t"
5018         "adc r22, r1 \n\t"
5019         "adc r23, r25 \n\t"
5020         "mul r5, r15 \n\t"
5021         "add r24, r0 \n\t"
5022         "adc r22, r1 \n\t"
5023         "adc r23, r25 \n\t"
5024         "mul r6, r14 \n\t"
5025         "add r24, r0 \n\t"
5026         "adc r22, r1 \n\t"
5027         "adc r23, r25 \n\t"
5028         "mul r7, r13 \n\t"
5029         "add r24, r0 \n\t"
5030         "adc r22, r1 \n\t"
5031         "adc r23, r25 \n\t"
5032         "mul r8, r12 \n\t"
5033         "add r24, r0 \n\t"
5034         "adc r22, r1 \n\t"
5035         "adc r23, r25 \n\t"
5036         "st z+, r24 \n\t"
5037
5038         "ldi r24, 0 \n\t"
5039         "mul r2, r19 \n\t"
5040         "add r22, r0 \n\t"
5041         "adc r23, r1 \n\t"
5042         "adc r24, r25 \n\t"
5043         "mul r3, r18 \n\t"
5044         "add r22, r0 \n\t"
5045         "adc r23, r1 \n\t"
5046         "adc r24, r25 \n\t"
5047         "mul r4, r17 \n\t"
5048         "add r22, r0 \n\t"
5049         "adc r23, r1 \n\t"
5050         "adc r24, r25 \n\t"
5051         "mul r5, r16 \n\t"
5052         "add r22, r0 \n\t"
5053         "adc r23, r1 \n\t"
5054         "adc r24, r25 \n\t"
5055         "mul r6, r15 \n\t"
5056         "add r22, r0 \n\t"
5057         "adc r23, r1 \n\t"
5058         "adc r24, r25 \n\t"
5059         "mul r7, r14 \n\t"
5060         "add r22, r0 \n\t"
5061         "adc r23, r1 \n\t"
5062         "adc r24, r25 \n\t"
5063         "mul r8, r13 \n\t"
5064         "add r22, r0 \n\t"
5065         "adc r23, r1 \n\t"
5066         "adc r24, r25 \n\t"
5067         "mul r9, r12 \n\t"
5068         "add r22, r0 \n\t"
5069         "adc r23, r1 \n\t"
5070         "adc r24, r25 \n\t"
5071         "st z+, r22 \n\t"
5072
5073         "ldi r22, 0 \n\t"
5074         "mul r2, r20 \n\t"
5075         "add r23, r0 \n\t"
5076         "adc r24, r1 \n\t"
5077         "adc r22, r25 \n\t"
5078         "mul r3, r19 \n\t"
5079         "add r23, r0 \n\t"
5080         "adc r24, r1 \n\t"
5081         "adc r22, r25 \n\t"
5082         "mul r4, r18 \n\t"
5083         "add r23, r0 \n\t"
5084         "adc r24, r1 \n\t"
5085         "adc r22, r25 \n\t"
5086         "mul r5, r17 \n\t"
5087         "add r23, r0 \n\t"
5088         "adc r24, r1 \n\t"
5089         "adc r22, r25 \n\t"
5090         "mul r6, r16 \n\t"
5091         "add r23, r0 \n\t"
5092         "adc r24, r1 \n\t"
5093         "adc r22, r25 \n\t"
5094         "mul r7, r15 \n\t"
5095         "add r23, r0 \n\t"
5096         "adc r24, r1 \n\t"
5097         "adc r22, r25 \n\t"
5098         "mul r8, r14 \n\t"
5099         "add r23, r0 \n\t"
5100         "adc r24, r1 \n\t"
5101         "adc r22, r25 \n\t"
5102         "mul r9, r13 \n\t"
5103         "add r23, r0 \n\t"
5104         "adc r24, r1 \n\t"
5105         "adc r22, r25 \n\t"
5106         "mul r10, r12 \n\t"
5107         "add r23, r0 \n\t"
5108         "adc r24, r1 \n\t"
5109         "adc r22, r25 \n\t"
5110         "st z+, r23 \n\t"
5111
5112         "ldi r23, 0 \n\t"
5113         "mul r2, r21 \n\t"
5114         "add r24, r0 \n\t"
5115         "adc r22, r1 \n\t"
5116         "adc r23, r25 \n\t"
5117         "mul r3, r20 \n\t"
5118         "add r24, r0 \n\t"
5119         "adc r22, r1 \n\t"
5120         "adc r23, r25 \n\t"
5121         "mul r4, r19 \n\t"
5122         "add r24, r0 \n\t"
5123         "adc r22, r1 \n\t"
5124         "adc r23, r25 \n\t"
5125         "mul r5, r18 \n\t"
5126         "add r24, r0 \n\t"
5127         "adc r22, r1 \n\t"
5128         "adc r23, r25 \n\t"
5129         "mul r6, r17 \n\t"
5130         "add r24, r0 \n\t"
5131         "adc r22, r1 \n\t"
5132         "adc r23, r25 \n\t"
5133         "mul r7, r16 \n\t"
5134         "add r24, r0 \n\t"
5135         "adc r22, r1 \n\t"
5136         "adc r23, r25 \n\t"
5137         "mul r8, r15 \n\t"
5138         "add r24, r0 \n\t"
5139         "adc r22, r1 \n\t"
5140         "adc r23, r25 \n\t"
5141         "mul r9, r14 \n\t"
5142         "add r24, r0 \n\t"
5143         "adc r22, r1 \n\t"
5144         "adc r23, r25 \n\t"
5145         "mul r10, r13 \n\t"
5146         "add r24, r0 \n\t"
5147         "adc r22, r1 \n\t"
5148         "adc r23, r25 \n\t"
5149         "mul r11, r12 \n\t"
5150         "add r24, r0 \n\t"
5151         "adc r22, r1 \n\t"
5152         "adc r23, r25 \n\t"
5153         "st z+, r24 \n\t"
5154
5155         "ld r2, x+ \n\t"
5156         "ldi r24, 0 \n\t"
5157         "mul r3, r21 \n\t"
5158         "add r22, r0 \n\t"
5159         "adc r23, r1 \n\t"
5160         "adc r24, r25 \n\t"
5161         "mul r4, r20 \n\t"
5162         "add r22, r0 \n\t"
5163         "adc r23, r1 \n\t"
5164         "adc r24, r25 \n\t"
5165         "mul r5, r19 \n\t"
5166         "add r22, r0 \n\t"
5167         "adc r23, r1 \n\t"
5168         "adc r24, r25 \n\t"
5169         "mul r6, r18 \n\t"
5170         "add r22, r0 \n\t"
5171         "adc r23, r1 \n\t"
5172         "adc r24, r25 \n\t"
5173         "mul r7, r17 \n\t"
5174         "add r22, r0 \n\t"
5175         "adc r23, r1 \n\t"
5176         "adc r24, r25 \n\t"
5177         "mul r8, r16 \n\t"
5178         "add r22, r0 \n\t"
5179         "adc r23, r1 \n\t"
5180         "adc r24, r25 \n\t"
5181         "mul r9, r15 \n\t"
5182         "add r22, r0 \n\t"
5183         "adc r23, r1 \n\t"
5184         "adc r24, r25 \n\t"
5185         "mul r10, r14 \n\t"
5186         "add r22, r0 \n\t"
5187         "adc r23, r1 \n\t"
5188         "adc r24, r25 \n\t"
5189         "mul r11, r13 \n\t"
5190         "add r22, r0 \n\t"
5191         "adc r23, r1 \n\t"
5192         "adc r24, r25 \n\t"
5193         "mul r2, r12 \n\t"
5194         "add r22, r0 \n\t"
5195         "adc r23, r1 \n\t"
5196         "adc r24, r25 \n\t"
5197         "ld r0, z \n\t"
5198         "add r22, r0 \n\t"
5199         "adc r23, r25 \n\t"
5200         "adc r24, r25 \n\t"
5201         "st z+, r22 \n\t"
5202
5203         "ld r3, x+ \n\t"
5204         "ldi r22, 0 \n\t"
5205         "mul r4, r21 \n\t"
5206         "add r23, r0 \n\t"
5207         "adc r24, r1 \n\t"
5208         "adc r22, r25 \n\t"
5209         "mul r5, r20 \n\t"
5210         "add r23, r0 \n\t"
5211         "adc r24, r1 \n\t"
5212         "adc r22, r25 \n\t"
5213         "mul r6, r19 \n\t"
5214         "add r23, r0 \n\t"
5215         "adc r24, r1 \n\t"
5216         "adc r22, r25 \n\t"
5217         "mul r7, r18 \n\t"
5218         "add r23, r0 \n\t"
5219         "adc r24, r1 \n\t"
5220         "adc r22, r25 \n\t"
5221         "mul r8, r17 \n\t"
5222         "add r23, r0 \n\t"
5223         "adc r24, r1 \n\t"
5224         "adc r22, r25 \n\t"
5225         "mul r9, r16 \n\t"
5226         "add r23, r0 \n\t"
5227         "adc r24, r1 \n\t"
5228         "adc r22, r25 \n\t"
5229         "mul r10, r15 \n\t"
5230         "add r23, r0 \n\t"
5231         "adc r24, r1 \n\t"
5232         "adc r22, r25 \n\t"
5233         "mul r11, r14 \n\t"
5234         "add r23, r0 \n\t"
5235         "adc r24, r1 \n\t"
5236         "adc r22, r25 \n\t"
5237         "mul r2, r13 \n\t"
5238         "add r23, r0 \n\t"
5239         "adc r24, r1 \n\t"
5240         "adc r22, r25 \n\t"
5241         "mul r3, r12 \n\t"
5242         "add r23, r0 \n\t"
5243         "adc r24, r1 \n\t"
5244         "adc r22, r25 \n\t"
5245         "ld r0, z \n\t"
5246         "add r23, r0 \n\t"
5247         "adc r24, r25 \n\t"
5248         "adc r22, r25 \n\t"
5249         "st z+, r23 \n\t"
5250
5251         "ld r12, y+ \n\t"
5252         "ldi r23, 0 \n\t"
5253         "mul r4, r12 \n\t"
5254         "add r24, r0 \n\t"
5255         "adc r22, r1 \n\t"
5256         "adc r23, r25 \n\t"
5257         "mul r5, r21 \n\t"
5258         "add r24, r0 \n\t"
5259         "adc r22, r1 \n\t"
5260         "adc r23, r25 \n\t"
5261         "mul r6, r20 \n\t"
5262         "add r24, r0 \n\t"
5263         "adc r22, r1 \n\t"
5264         "adc r23, r25 \n\t"
5265         "mul r7, r19 \n\t"
5266         "add r24, r0 \n\t"
5267         "adc r22, r1 \n\t"
5268         "adc r23, r25 \n\t"
5269         "mul r8, r18 \n\t"
5270         "add r24, r0 \n\t"
5271         "adc r22, r1 \n\t"
5272         "adc r23, r25 \n\t"
5273         "mul r9, r17 \n\t"
5274         "add r24, r0 \n\t"
5275         "adc r22, r1 \n\t"
5276         "adc r23, r25 \n\t"
5277         "mul r10, r16 \n\t"
5278         "add r24, r0 \n\t"
5279         "adc r22, r1 \n\t"
5280         "adc r23, r25 \n\t"
5281         "mul r11, r15 \n\t"
5282         "add r24, r0 \n\t"
5283         "adc r22, r1 \n\t"
5284         "adc r23, r25 \n\t"
5285         "mul r2, r14 \n\t"
5286         "add r24, r0 \n\t"
5287         "adc r22, r1 \n\t"
5288         "adc r23, r25 \n\t"
5289         "mul r3, r13 \n\t"
5290         "add r24, r0 \n\t"
5291         "adc r22, r1 \n\t"
5292         "adc r23, r25 \n\t"
5293         "ld r0, z \n\t"
5294         "add r24, r0 \n\t"
5295         "adc r22, r25 \n\t"
5296         "adc r23, r25 \n\t"
5297         "st z+, r24 \n\t"
5298
5299         "ld r13, y+ \n\t"
5300         "ldi r24, 0 \n\t"
5301         "mul r4, r13 \n\t"
5302         "add r22, r0 \n\t"
5303         "adc r23, r1 \n\t"
5304         "adc r24, r25 \n\t"
5305         "mul r5, r12 \n\t"
5306         "add r22, r0 \n\t"
5307         "adc r23, r1 \n\t"
5308         "adc r24, r25 \n\t"
5309         "mul r6, r21 \n\t"
5310         "add r22, r0 \n\t"
5311         "adc r23, r1 \n\t"
5312         "adc r24, r25 \n\t"
5313         "mul r7, r20 \n\t"
5314         "add r22, r0 \n\t"
5315         "adc r23, r1 \n\t"
5316         "adc r24, r25 \n\t"
5317         "mul r8, r19 \n\t"
5318         "add r22, r0 \n\t"
5319         "adc r23, r1 \n\t"
5320         "adc r24, r25 \n\t"
5321         "mul r9, r18 \n\t"
5322         "add r22, r0 \n\t"
5323         "adc r23, r1 \n\t"
5324         "adc r24, r25 \n\t"
5325         "mul r10, r17 \n\t"
5326         "add r22, r0 \n\t"
5327         "adc r23, r1 \n\t"
5328         "adc r24, r25 \n\t"
5329         "mul r11, r16 \n\t"
5330         "add r22, r0 \n\t"
5331         "adc r23, r1 \n\t"
5332         "adc r24, r25 \n\t"
5333         "mul r2, r15 \n\t"
5334         "add r22, r0 \n\t"
5335         "adc r23, r1 \n\t"
5336         "adc r24, r25 \n\t"
5337         "mul r3, r14 \n\t"
5338         "add r22, r0 \n\t"
5339         "adc r23, r1 \n\t"
5340         "adc r24, r25 \n\t"
5341         "ld r0, z \n\t"
5342         "add r22, r0 \n\t"
5343         "adc r23, r25 \n\t"
5344         "adc r24, r25 \n\t"
5345         "st z+, r22 \n\t"
5346
5347         "ldi r22, 0 \n\t"
5348         "mul r5, r13 \n\t"
5349         "add r23, r0 \n\t"
5350         "adc r24, r1 \n\t"
5351         "adc r22, r25 \n\t"
5352         "mul r6, r12 \n\t"
5353         "add r23, r0 \n\t"
5354         "adc r24, r1 \n\t"
5355         "adc r22, r25 \n\t"
5356         "mul r7, r21 \n\t"
5357         "add r23, r0 \n\t"
5358         "adc r24, r1 \n\t"
5359         "adc r22, r25 \n\t"
5360         "mul r8, r20 \n\t"
5361         "add r23, r0 \n\t"
5362         "adc r24, r1 \n\t"
5363         "adc r22, r25 \n\t"
5364         "mul r9, r19 \n\t"
5365         "add r23, r0 \n\t"
5366         "adc r24, r1 \n\t"
5367         "adc r22, r25 \n\t"
5368         "mul r10, r18 \n\t"
5369         "add r23, r0 \n\t"
5370         "adc r24, r1 \n\t"
5371         "adc r22, r25 \n\t"
5372         "mul r11, r17 \n\t"
5373         "add r23, r0 \n\t"
5374         "adc r24, r1 \n\t"
5375         "adc r22, r25 \n\t"
5376         "mul r2, r16 \n\t"
5377         "add r23, r0 \n\t"
5378         "adc r24, r1 \n\t"
5379         "adc r22, r25 \n\t"
5380         "mul r3, r15 \n\t"
5381         "add r23, r0 \n\t"
5382         "adc r24, r1 \n\t"
5383         "adc r22, r25 \n\t"
5384         "st z+, r23 \n\t"
5385
5386         "ldi r23, 0 \n\t"
5387         "mul r6, r13 \n\t"
5388         "add r24, r0 \n\t"
5389         "adc r22, r1 \n\t"
5390         "adc r23, r25 \n\t"
5391         "mul r7, r12 \n\t"
5392         "add r24, r0 \n\t"
5393         "adc r22, r1 \n\t"
5394         "adc r23, r25 \n\t"
5395         "mul r8, r21 \n\t"
5396         "add r24, r0 \n\t"
5397         "adc r22, r1 \n\t"
5398         "adc r23, r25 \n\t"
5399         "mul r9, r20 \n\t"
5400         "add r24, r0 \n\t"
5401         "adc r22, r1 \n\t"
5402         "adc r23, r25 \n\t"
5403         "mul r10, r19 \n\t"
5404         "add r24, r0 \n\t"
5405         "adc r22, r1 \n\t"
5406         "adc r23, r25 \n\t"
5407         "mul r11, r18 \n\t"
5408         "add r24, r0 \n\t"
5409         "adc r22, r1 \n\t"
5410         "adc r23, r25 \n\t"
5411         "mul r2, r17 \n\t"
5412         "add r24, r0 \n\t"
5413         "adc r22, r1 \n\t"
5414         "adc r23, r25 \n\t"
5415         "mul r3, r16 \n\t"
5416         "add r24, r0 \n\t"
5417         "adc r22, r1 \n\t"
5418         "adc r23, r25 \n\t"
5419         "st z+, r24 \n\t"
5420
5421         "ldi r24, 0 \n\t"
5422         "mul r7, r13 \n\t"
5423         "add r22, r0 \n\t"
5424         "adc r23, r1 \n\t"
5425         "adc r24, r25 \n\t"
5426         "mul r8, r12 \n\t"
5427         "add r22, r0 \n\t"
5428         "adc r23, r1 \n\t"
5429         "adc r24, r25 \n\t"
5430         "mul r9, r21 \n\t"
5431         "add r22, r0 \n\t"
5432         "adc r23, r1 \n\t"
5433         "adc r24, r25 \n\t"
5434         "mul r10, r20 \n\t"
5435         "add r22, r0 \n\t"
5436         "adc r23, r1 \n\t"
5437         "adc r24, r25 \n\t"
5438         "mul r11, r19 \n\t"
5439         "add r22, r0 \n\t"
5440         "adc r23, r1 \n\t"
5441         "adc r24, r25 \n\t"
5442         "mul r2, r18 \n\t"
5443         "add r22, r0 \n\t"
5444         "adc r23, r1 \n\t"
5445         "adc r24, r25 \n\t"
5446         "mul r3, r17 \n\t"
5447         "add r22, r0 \n\t"
5448         "adc r23, r1 \n\t"
5449         "adc r24, r25 \n\t"
5450         "st z+, r22 \n\t"
5451
5452         "ldi r22, 0 \n\t"
5453         "mul r8, r13 \n\t"
5454         "add r23, r0 \n\t"
5455         "adc r24, r1 \n\t"
5456         "adc r22, r25 \n\t"
5457         "mul r9, r12 \n\t"
5458         "add r23, r0 \n\t"
5459         "adc r24, r1 \n\t"
5460         "adc r22, r25 \n\t"
5461         "mul r10, r21 \n\t"
5462         "add r23, r0 \n\t"
5463         "adc r24, r1 \n\t"
5464         "adc r22, r25 \n\t"
5465         "mul r11, r20 \n\t"
5466         "add r23, r0 \n\t"
5467         "adc r24, r1 \n\t"
5468         "adc r22, r25 \n\t"
5469         "mul r2, r19 \n\t"
5470         "add r23, r0 \n\t"
5471         "adc r24, r1 \n\t"
5472         "adc r22, r25 \n\t"
5473         "mul r3, r18 \n\t"
5474         "add r23, r0 \n\t"
5475         "adc r24, r1 \n\t"
5476         "adc r22, r25 \n\t"
5477         "st z+, r23 \n\t"
5478
5479         "ldi r23, 0 \n\t"
5480         "mul r9, r13 \n\t"
5481         "add r24, r0 \n\t"
5482         "adc r22, r1 \n\t"
5483         "adc r23, r25 \n\t"
5484         "mul r10, r12 \n\t"
5485         "add r24, r0 \n\t"
5486         "adc r22, r1 \n\t"
5487         "adc r23, r25 \n\t"
5488         "mul r11, r21 \n\t"
5489         "add r24, r0 \n\t"
5490         "adc r22, r1 \n\t"
5491         "adc r23, r25 \n\t"
5492         "mul r2, r20 \n\t"
5493         "add r24, r0 \n\t"
5494         "adc r22, r1 \n\t"
5495         "adc r23, r25 \n\t"
5496         "mul r3, r19 \n\t"
5497         "add r24, r0 \n\t"
5498         "adc r22, r1 \n\t"
5499         "adc r23, r25 \n\t"
5500         "st z+, r24 \n\t"
5501
5502         "ldi r24, 0 \n\t"
5503         "mul r10, r13 \n\t"
5504         "add r22, r0 \n\t"
5505         "adc r23, r1 \n\t"
5506         "adc r24, r25 \n\t"
5507         "mul r11, r12 \n\t"
5508         "add r22, r0 \n\t"
5509         "adc r23, r1 \n\t"
5510         "adc r24, r25 \n\t"
5511         "mul r2, r21 \n\t"
5512         "add r22, r0 \n\t"
5513         "adc r23, r1 \n\t"
5514         "adc r24, r25 \n\t"
5515         "mul r3, r20 \n\t"
5516         "add r22, r0 \n\t"
5517         "adc r23, r1 \n\t"
5518         "adc r24, r25 \n\t"
5519         "st z+, r22 \n\t"
5520
5521         "ldi r22, 0 \n\t"
5522         "mul r11, r13 \n\t"
5523         "add r23, r0 \n\t"
5524         "adc r24, r1 \n\t"
5525         "adc r22, r25 \n\t"
5526         "mul r2, r12 \n\t"
5527         "add r23, r0 \n\t"
5528         "adc r24, r1 \n\t"
5529         "adc r22, r25 \n\t"
5530         "mul r3, r21 \n\t"
5531         "add r23, r0 \n\t"
5532         "adc r24, r1 \n\t"
5533         "adc r22, r25 \n\t"
5534         "st z+, r23 \n\t"
5535
5536         "ldi r23, 0 \n\t"
5537         "mul r2, r13 \n\t"
5538         "add r24, r0 \n\t"
5539         "adc r22, r1 \n\t"
5540         "adc r23, r25 \n\t"
5541         "mul r3, r12 \n\t"
5542         "add r24, r0 \n\t"
5543         "adc r22, r1 \n\t"
5544         "adc r23, r25 \n\t"
5545         "st z+, r24 \n\t"
5546
5547         "mul r3, r13 \n\t"
5548         "add r22, r0 \n\t"
5549         "adc r23, r1 \n\t"
5550         "st z+, r22 \n\t"
5551         "st z+, r23 \n\t"
5552
5553         "sbiw r30, 34 \n\t"
5554         "sbiw r28, 22 \n\t"
5555         "sbiw r26, 12 \n\t"
5556         "ld r2, x+ \n\t"
5557         "ld r12, y+ \n\t"
5558         "ld r3, x+ \n\t"
5559         "ld r13, y+ \n\t"
5560         "ld r4, x+ \n\t"
5561         "ld r14, y+ \n\t"
5562         "ld r5, x+ \n\t"
5563         "ld r15, y+ \n\t"
5564         "ld r6, x+ \n\t"
5565         "ld r16, y+ \n\t"
5566         "ld r7, x+ \n\t"
5567         "ld r17, y+ \n\t"
5568         "ld r8, x+ \n\t"
5569         "ld r18, y+ \n\t"
5570         "ld r9, x+ \n\t"
5571         "ld r19, y+ \n\t"
5572         "ld r10, x+ \n\t"
5573         "ld r20, y+ \n\t"
5574         "ld r11, x+ \n\t"
5575         "ld r21, y+ \n\t"
5576
5577         "ldi r23, 0 \n\t"
5578         "mul r2, r12 \n\t"
5579         "st z+, r0 \n\t"
5580         "mov r22, r1 \n\t"
5581
5582         "ldi r24, 0 \n\t"
5583         "mul r2, r13 \n\t"
5584         "add r22, r0 \n\t"
5585         "adc r23, r1 \n\t"
5586         "mul r3, r12 \n\t"
5587         "add r22, r0 \n\t"
5588         "adc r23, r1 \n\t"
5589         "adc r24, r25 \n\t"
5590         "st z+, r22 \n\t"
5591
5592         "ldi r22, 0 \n\t"
5593         "mul r2, r14 \n\t"
5594         "add r23, r0 \n\t"
5595         "adc r24, r1 \n\t"
5596         "adc r22, r25 \n\t"
5597         "mul r3, r13 \n\t"
5598         "add r23, r0 \n\t"
5599         "adc r24, r1 \n\t"
5600         "adc r22, r25 \n\t"
5601         "mul r4, r12 \n\t"
5602         "add r23, r0 \n\t"
5603         "adc r24, r1 \n\t"
5604         "adc r22, r25 \n\t"
5605         "st z+, r23 \n\t"
5606
5607         "ldi r23, 0 \n\t"
5608         "mul r2, r15 \n\t"
5609         "add r24, r0 \n\t"
5610         "adc r22, r1 \n\t"
5611         "adc r23, r25 \n\t"
5612         "mul r3, r14 \n\t"
5613         "add r24, r0 \n\t"
5614         "adc r22, r1 \n\t"
5615         "adc r23, r25 \n\t"
5616         "mul r4, r13 \n\t"
5617         "add r24, r0 \n\t"
5618         "adc r22, r1 \n\t"
5619         "adc r23, r25 \n\t"
5620         "mul r5, r12 \n\t"
5621         "add r24, r0 \n\t"
5622         "adc r22, r1 \n\t"
5623         "adc r23, r25 \n\t"
5624         "st z+, r24 \n\t"
5625
5626         "ldi r24, 0 \n\t"
5627         "mul r2, r16 \n\t"
5628         "add r22, r0 \n\t"
5629         "adc r23, r1 \n\t"
5630         "adc r24, r25 \n\t"
5631         "mul r3, r15 \n\t"
5632         "add r22, r0 \n\t"
5633         "adc r23, r1 \n\t"
5634         "adc r24, r25 \n\t"
5635         "mul r4, r14 \n\t"
5636         "add r22, r0 \n\t"
5637         "adc r23, r1 \n\t"
5638         "adc r24, r25 \n\t"
5639         "mul r5, r13 \n\t"
5640         "add r22, r0 \n\t"
5641         "adc r23, r1 \n\t"
5642         "adc r24, r25 \n\t"
5643         "mul r6, r12 \n\t"
5644         "add r22, r0 \n\t"
5645         "adc r23, r1 \n\t"
5646         "adc r24, r25 \n\t"
5647         "st z+, r22 \n\t"
5648
5649         "ldi r22, 0 \n\t"
5650         "mul r2, r17 \n\t"
5651         "add r23, r0 \n\t"
5652         "adc r24, r1 \n\t"
5653         "adc r22, r25 \n\t"
5654         "mul r3, r16 \n\t"
5655         "add r23, r0 \n\t"
5656         "adc r24, r1 \n\t"
5657         "adc r22, r25 \n\t"
5658         "mul r4, r15 \n\t"
5659         "add r23, r0 \n\t"
5660         "adc r24, r1 \n\t"
5661         "adc r22, r25 \n\t"
5662         "mul r5, r14 \n\t"
5663         "add r23, r0 \n\t"
5664         "adc r24, r1 \n\t"
5665         "adc r22, r25 \n\t"
5666         "mul r6, r13 \n\t"
5667         "add r23, r0 \n\t"
5668         "adc r24, r1 \n\t"
5669         "adc r22, r25 \n\t"
5670         "mul r7, r12 \n\t"
5671         "add r23, r0 \n\t"
5672         "adc r24, r1 \n\t"
5673         "adc r22, r25 \n\t"
5674         "st z+, r23 \n\t"
5675
5676         "ldi r23, 0 \n\t"
5677         "mul r2, r18 \n\t"
5678         "add r24, r0 \n\t"
5679         "adc r22, r1 \n\t"
5680         "adc r23, r25 \n\t"
5681         "mul r3, r17 \n\t"
5682         "add r24, r0 \n\t"
5683         "adc r22, r1 \n\t"
5684         "adc r23, r25 \n\t"
5685         "mul r4, r16 \n\t"
5686         "add r24, r0 \n\t"
5687         "adc r22, r1 \n\t"
5688         "adc r23, r25 \n\t"
5689         "mul r5, r15 \n\t"
5690         "add r24, r0 \n\t"
5691         "adc r22, r1 \n\t"
5692         "adc r23, r25 \n\t"
5693         "mul r6, r14 \n\t"
5694         "add r24, r0 \n\t"
5695         "adc r22, r1 \n\t"
5696         "adc r23, r25 \n\t"
5697         "mul r7, r13 \n\t"
5698         "add r24, r0 \n\t"
5699         "adc r22, r1 \n\t"
5700         "adc r23, r25 \n\t"
5701         "mul r8, r12 \n\t"
5702         "add r24, r0 \n\t"
5703         "adc r22, r1 \n\t"
5704         "adc r23, r25 \n\t"
5705         "st z+, r24 \n\t"
5706
5707         "ldi r24, 0 \n\t"
5708         "mul r2, r19 \n\t"
5709         "add r22, r0 \n\t"
5710         "adc r23, r1 \n\t"
5711         "adc r24, r25 \n\t"
5712         "mul r3, r18 \n\t"
5713         "add r22, r0 \n\t"
5714         "adc r23, r1 \n\t"
5715         "adc r24, r25 \n\t"
5716         "mul r4, r17 \n\t"
5717         "add r22, r0 \n\t"
5718         "adc r23, r1 \n\t"
5719         "adc r24, r25 \n\t"
5720         "mul r5, r16 \n\t"
5721         "add r22, r0 \n\t"
5722         "adc r23, r1 \n\t"
5723         "adc r24, r25 \n\t"
5724         "mul r6, r15 \n\t"
5725         "add r22, r0 \n\t"
5726         "adc r23, r1 \n\t"
5727         "adc r24, r25 \n\t"
5728         "mul r7, r14 \n\t"
5729         "add r22, r0 \n\t"
5730         "adc r23, r1 \n\t"
5731         "adc r24, r25 \n\t"
5732         "mul r8, r13 \n\t"
5733         "add r22, r0 \n\t"
5734         "adc r23, r1 \n\t"
5735         "adc r24, r25 \n\t"
5736         "mul r9, r12 \n\t"
5737         "add r22, r0 \n\t"
5738         "adc r23, r1 \n\t"
5739         "adc r24, r25 \n\t"
5740         "st z+, r22 \n\t"
5741
5742         "ldi r22, 0 \n\t"
5743         "mul r2, r20 \n\t"
5744         "add r23, r0 \n\t"
5745         "adc r24, r1 \n\t"
5746         "adc r22, r25 \n\t"
5747         "mul r3, r19 \n\t"
5748         "add r23, r0 \n\t"
5749         "adc r24, r1 \n\t"
5750         "adc r22, r25 \n\t"
5751         "mul r4, r18 \n\t"
5752         "add r23, r0 \n\t"
5753         "adc r24, r1 \n\t"
5754         "adc r22, r25 \n\t"
5755         "mul r5, r17 \n\t"
5756         "add r23, r0 \n\t"
5757         "adc r24, r1 \n\t"
5758         "adc r22, r25 \n\t"
5759         "mul r6, r16 \n\t"
5760         "add r23, r0 \n\t"
5761         "adc r24, r1 \n\t"
5762         "adc r22, r25 \n\t"
5763         "mul r7, r15 \n\t"
5764         "add r23, r0 \n\t"
5765         "adc r24, r1 \n\t"
5766         "adc r22, r25 \n\t"
5767         "mul r8, r14 \n\t"
5768         "add r23, r0 \n\t"
5769         "adc r24, r1 \n\t"
5770         "adc r22, r25 \n\t"
5771         "mul r9, r13 \n\t"
5772         "add r23, r0 \n\t"
5773         "adc r24, r1 \n\t"
5774         "adc r22, r25 \n\t"
5775         "mul r10, r12 \n\t"
5776         "add r23, r0 \n\t"
5777         "adc r24, r1 \n\t"
5778         "adc r22, r25 \n\t"
5779         "st z+, r23 \n\t"
5780
5781         "ldi r23, 0 \n\t"
5782         "mul r2, r21 \n\t"
5783         "add r24, r0 \n\t"
5784         "adc r22, r1 \n\t"
5785         "adc r23, r25 \n\t"
5786         "mul r3, r20 \n\t"
5787         "add r24, r0 \n\t"
5788         "adc r22, r1 \n\t"
5789         "adc r23, r25 \n\t"
5790         "mul r4, r19 \n\t"
5791         "add r24, r0 \n\t"
5792         "adc r22, r1 \n\t"
5793         "adc r23, r25 \n\t"
5794         "mul r5, r18 \n\t"
5795         "add r24, r0 \n\t"
5796         "adc r22, r1 \n\t"
5797         "adc r23, r25 \n\t"
5798         "mul r6, r17 \n\t"
5799         "add r24, r0 \n\t"
5800         "adc r22, r1 \n\t"
5801         "adc r23, r25 \n\t"
5802         "mul r7, r16 \n\t"
5803         "add r24, r0 \n\t"
5804         "adc r22, r1 \n\t"
5805         "adc r23, r25 \n\t"
5806         "mul r8, r15 \n\t"
5807         "add r24, r0 \n\t"
5808         "adc r22, r1 \n\t"
5809         "adc r23, r25 \n\t"
5810         "mul r9, r14 \n\t"
5811         "add r24, r0 \n\t"
5812         "adc r22, r1 \n\t"
5813         "adc r23, r25 \n\t"
5814         "mul r10, r13 \n\t"
5815         "add r24, r0 \n\t"
5816         "adc r22, r1 \n\t"
5817         "adc r23, r25 \n\t"
5818         "mul r11, r12 \n\t"
5819         "add r24, r0 \n\t"
5820         "adc r22, r1 \n\t"
5821         "adc r23, r25 \n\t"
5822         "st z+, r24 \n\t"
5823
5824         "ld r2, x+ \n\t"
5825         "ldi r24, 0 \n\t"
5826         "mul r3, r21 \n\t"
5827         "add r22, r0 \n\t"
5828         "adc r23, r1 \n\t"
5829         "adc r24, r25 \n\t"
5830         "mul r4, r20 \n\t"
5831         "add r22, r0 \n\t"
5832         "adc r23, r1 \n\t"
5833         "adc r24, r25 \n\t"
5834         "mul r5, r19 \n\t"
5835         "add r22, r0 \n\t"
5836         "adc r23, r1 \n\t"
5837         "adc r24, r25 \n\t"
5838         "mul r6, r18 \n\t"
5839         "add r22, r0 \n\t"
5840         "adc r23, r1 \n\t"
5841         "adc r24, r25 \n\t"
5842         "mul r7, r17 \n\t"
5843         "add r22, r0 \n\t"
5844         "adc r23, r1 \n\t"
5845         "adc r24, r25 \n\t"
5846         "mul r8, r16 \n\t"
5847         "add r22, r0 \n\t"
5848         "adc r23, r1 \n\t"
5849         "adc r24, r25 \n\t"
5850         "mul r9, r15 \n\t"
5851         "add r22, r0 \n\t"
5852         "adc r23, r1 \n\t"
5853         "adc r24, r25 \n\t"
5854         "mul r10, r14 \n\t"
5855         "add r22, r0 \n\t"
5856         "adc r23, r1 \n\t"
5857         "adc r24, r25 \n\t"
5858         "mul r11, r13 \n\t"
5859         "add r22, r0 \n\t"
5860         "adc r23, r1 \n\t"
5861         "adc r24, r25 \n\t"
5862         "mul r2, r12 \n\t"
5863         "add r22, r0 \n\t"
5864         "adc r23, r1 \n\t"
5865         "adc r24, r25 \n\t"
5866         "ld r0, z \n\t"
5867         "add r22, r0 \n\t"
5868         "adc r23, r25 \n\t"
5869         "adc r24, r25 \n\t"
5870         "st z+, r22 \n\t"
5871
5872         "ld r3, x+ \n\t"
5873         "ldi r22, 0 \n\t"
5874         "mul r4, r21 \n\t"
5875         "add r23, r0 \n\t"
5876         "adc r24, r1 \n\t"
5877         "adc r22, r25 \n\t"
5878         "mul r5, r20 \n\t"
5879         "add r23, r0 \n\t"
5880         "adc r24, r1 \n\t"
5881         "adc r22, r25 \n\t"
5882         "mul r6, r19 \n\t"
5883         "add r23, r0 \n\t"
5884         "adc r24, r1 \n\t"
5885         "adc r22, r25 \n\t"
5886         "mul r7, r18 \n\t"
5887         "add r23, r0 \n\t"
5888         "adc r24, r1 \n\t"
5889         "adc r22, r25 \n\t"
5890         "mul r8, r17 \n\t"
5891         "add r23, r0 \n\t"
5892         "adc r24, r1 \n\t"
5893         "adc r22, r25 \n\t"
5894         "mul r9, r16 \n\t"
5895         "add r23, r0 \n\t"
5896         "adc r24, r1 \n\t"
5897         "adc r22, r25 \n\t"
5898         "mul r10, r15 \n\t"
5899         "add r23, r0 \n\t"
5900         "adc r24, r1 \n\t"
5901         "adc r22, r25 \n\t"
5902         "mul r11, r14 \n\t"
5903         "add r23, r0 \n\t"
5904         "adc r24, r1 \n\t"
5905         "adc r22, r25 \n\t"
5906         "mul r2, r13 \n\t"
5907         "add r23, r0 \n\t"
5908         "adc r24, r1 \n\t"
5909         "adc r22, r25 \n\t"
5910         "mul r3, r12 \n\t"
5911         "add r23, r0 \n\t"
5912         "adc r24, r1 \n\t"
5913         "adc r22, r25 \n\t"
5914         "ld r0, z \n\t"
5915         "add r23, r0 \n\t"
5916         "adc r24, r25 \n\t"
5917         "adc r22, r25 \n\t"
5918         "st z+, r23 \n\t"
5919
5920         "ld r4, x+ \n\t"
5921         "ldi r23, 0 \n\t"
5922         "mul r5, r21 \n\t"
5923         "add r24, r0 \n\t"
5924         "adc r22, r1 \n\t"
5925         "adc r23, r25 \n\t"
5926         "mul r6, r20 \n\t"
5927         "add r24, r0 \n\t"
5928         "adc r22, r1 \n\t"
5929         "adc r23, r25 \n\t"
5930         "mul r7, r19 \n\t"
5931         "add r24, r0 \n\t"
5932         "adc r22, r1 \n\t"
5933         "adc r23, r25 \n\t"
5934         "mul r8, r18 \n\t"
5935         "add r24, r0 \n\t"
5936         "adc r22, r1 \n\t"
5937         "adc r23, r25 \n\t"
5938         "mul r9, r17 \n\t"
5939         "add r24, r0 \n\t"
5940         "adc r22, r1 \n\t"
5941         "adc r23, r25 \n\t"
5942         "mul r10, r16 \n\t"
5943         "add r24, r0 \n\t"
5944         "adc r22, r1 \n\t"
5945         "adc r23, r25 \n\t"
5946         "mul r11, r15 \n\t"
5947         "add r24, r0 \n\t"
5948         "adc r22, r1 \n\t"
5949         "adc r23, r25 \n\t"
5950         "mul r2, r14 \n\t"
5951         "add r24, r0 \n\t"
5952         "adc r22, r1 \n\t"
5953         "adc r23, r25 \n\t"
5954         "mul r3, r13 \n\t"
5955         "add r24, r0 \n\t"
5956         "adc r22, r1 \n\t"
5957         "adc r23, r25 \n\t"
5958         "mul r4, r12 \n\t"
5959         "add r24, r0 \n\t"
5960         "adc r22, r1 \n\t"
5961         "adc r23, r25 \n\t"
5962         "ld r0, z \n\t"
5963         "add r24, r0 \n\t"
5964         "adc r22, r25 \n\t"
5965         "adc r23, r25 \n\t"
5966         "st z+, r24 \n\t"
5967
5968         "ld r5, x+ \n\t"
5969         "ldi r24, 0 \n\t"
5970         "mul r6, r21 \n\t"
5971         "add r22, r0 \n\t"
5972         "adc r23, r1 \n\t"
5973         "adc r24, r25 \n\t"
5974         "mul r7, r20 \n\t"
5975         "add r22, r0 \n\t"
5976         "adc r23, r1 \n\t"
5977         "adc r24, r25 \n\t"
5978         "mul r8, r19 \n\t"
5979         "add r22, r0 \n\t"
5980         "adc r23, r1 \n\t"
5981         "adc r24, r25 \n\t"
5982         "mul r9, r18 \n\t"
5983         "add r22, r0 \n\t"
5984         "adc r23, r1 \n\t"
5985         "adc r24, r25 \n\t"
5986         "mul r10, r17 \n\t"
5987         "add r22, r0 \n\t"
5988         "adc r23, r1 \n\t"
5989         "adc r24, r25 \n\t"
5990         "mul r11, r16 \n\t"
5991         "add r22, r0 \n\t"
5992         "adc r23, r1 \n\t"
5993         "adc r24, r25 \n\t"
5994         "mul r2, r15 \n\t"
5995         "add r22, r0 \n\t"
5996         "adc r23, r1 \n\t"
5997         "adc r24, r25 \n\t"
5998         "mul r3, r14 \n\t"
5999         "add r22, r0 \n\t"
6000         "adc r23, r1 \n\t"
6001         "adc r24, r25 \n\t"
6002         "mul r4, r13 \n\t"
6003         "add r22, r0 \n\t"
6004         "adc r23, r1 \n\t"
6005         "adc r24, r25 \n\t"
6006         "mul r5, r12 \n\t"
6007         "add r22, r0 \n\t"
6008         "adc r23, r1 \n\t"
6009         "adc r24, r25 \n\t"
6010         "ld r0, z \n\t"
6011         "add r22, r0 \n\t"
6012         "adc r23, r25 \n\t"
6013         "adc r24, r25 \n\t"
6014         "st z+, r22 \n\t"
6015
6016         "ld r6, x+ \n\t"
6017         "ldi r22, 0 \n\t"
6018         "mul r7, r21 \n\t"
6019         "add r23, r0 \n\t"
6020         "adc r24, r1 \n\t"
6021         "adc r22, r25 \n\t"
6022         "mul r8, r20 \n\t"
6023         "add r23, r0 \n\t"
6024         "adc r24, r1 \n\t"
6025         "adc r22, r25 \n\t"
6026         "mul r9, r19 \n\t"
6027         "add r23, r0 \n\t"
6028         "adc r24, r1 \n\t"
6029         "adc r22, r25 \n\t"
6030         "mul r10, r18 \n\t"
6031         "add r23, r0 \n\t"
6032         "adc r24, r1 \n\t"
6033         "adc r22, r25 \n\t"
6034         "mul r11, r17 \n\t"
6035         "add r23, r0 \n\t"
6036         "adc r24, r1 \n\t"
6037         "adc r22, r25 \n\t"
6038         "mul r2, r16 \n\t"
6039         "add r23, r0 \n\t"
6040         "adc r24, r1 \n\t"
6041         "adc r22, r25 \n\t"
6042         "mul r3, r15 \n\t"
6043         "add r23, r0 \n\t"
6044         "adc r24, r1 \n\t"
6045         "adc r22, r25 \n\t"
6046         "mul r4, r14 \n\t"
6047         "add r23, r0 \n\t"
6048         "adc r24, r1 \n\t"
6049         "adc r22, r25 \n\t"
6050         "mul r5, r13 \n\t"
6051         "add r23, r0 \n\t"
6052         "adc r24, r1 \n\t"
6053         "adc r22, r25 \n\t"
6054         "mul r6, r12 \n\t"
6055         "add r23, r0 \n\t"
6056         "adc r24, r1 \n\t"
6057         "adc r22, r25 \n\t"
6058         "ld r0, z \n\t"
6059         "add r23, r0 \n\t"
6060         "adc r24, r25 \n\t"
6061         "adc r22, r25 \n\t"
6062         "st z+, r23 \n\t"
6063
6064         "ld r7, x+ \n\t"
6065         "ldi r23, 0 \n\t"
6066         "mul r8, r21 \n\t"
6067         "add r24, r0 \n\t"
6068         "adc r22, r1 \n\t"
6069         "adc r23, r25 \n\t"
6070         "mul r9, r20 \n\t"
6071         "add r24, r0 \n\t"
6072         "adc r22, r1 \n\t"
6073         "adc r23, r25 \n\t"
6074         "mul r10, r19 \n\t"
6075         "add r24, r0 \n\t"
6076         "adc r22, r1 \n\t"
6077         "adc r23, r25 \n\t"
6078         "mul r11, r18 \n\t"
6079         "add r24, r0 \n\t"
6080         "adc r22, r1 \n\t"
6081         "adc r23, r25 \n\t"
6082         "mul r2, r17 \n\t"
6083         "add r24, r0 \n\t"
6084         "adc r22, r1 \n\t"
6085         "adc r23, r25 \n\t"
6086         "mul r3, r16 \n\t"
6087         "add r24, r0 \n\t"
6088         "adc r22, r1 \n\t"
6089         "adc r23, r25 \n\t"
6090         "mul r4, r15 \n\t"
6091         "add r24, r0 \n\t"
6092         "adc r22, r1 \n\t"
6093         "adc r23, r25 \n\t"
6094         "mul r5, r14 \n\t"
6095         "add r24, r0 \n\t"
6096         "adc r22, r1 \n\t"
6097         "adc r23, r25 \n\t"
6098         "mul r6, r13 \n\t"
6099         "add r24, r0 \n\t"
6100         "adc r22, r1 \n\t"
6101         "adc r23, r25 \n\t"
6102         "mul r7, r12 \n\t"
6103         "add r24, r0 \n\t"
6104         "adc r22, r1 \n\t"
6105         "adc r23, r25 \n\t"
6106         "ld r0, z \n\t"
6107         "add r24, r0 \n\t"
6108         "adc r22, r25 \n\t"
6109         "adc r23, r25 \n\t"
6110         "st z+, r24 \n\t"
6111
6112         "ld r8, x+ \n\t"
6113         "ldi r24, 0 \n\t"
6114         "mul r9, r21 \n\t"
6115         "add r22, r0 \n\t"
6116         "adc r23, r1 \n\t"
6117         "adc r24, r25 \n\t"
6118         "mul r10, r20 \n\t"
6119         "add r22, r0 \n\t"
6120         "adc r23, r1 \n\t"
6121         "adc r24, r25 \n\t"
6122         "mul r11, r19 \n\t"
6123         "add r22, r0 \n\t"
6124         "adc r23, r1 \n\t"
6125         "adc r24, r25 \n\t"
6126         "mul r2, r18 \n\t"
6127         "add r22, r0 \n\t"
6128         "adc r23, r1 \n\t"
6129         "adc r24, r25 \n\t"
6130         "mul r3, r17 \n\t"
6131         "add r22, r0 \n\t"
6132         "adc r23, r1 \n\t"
6133         "adc r24, r25 \n\t"
6134         "mul r4, r16 \n\t"
6135         "add r22, r0 \n\t"
6136         "adc r23, r1 \n\t"
6137         "adc r24, r25 \n\t"
6138         "mul r5, r15 \n\t"
6139         "add r22, r0 \n\t"
6140         "adc r23, r1 \n\t"
6141         "adc r24, r25 \n\t"
6142         "mul r6, r14 \n\t"
6143         "add r22, r0 \n\t"
6144         "adc r23, r1 \n\t"
6145         "adc r24, r25 \n\t"
6146         "mul r7, r13 \n\t"
6147         "add r22, r0 \n\t"
6148         "adc r23, r1 \n\t"
6149         "adc r24, r25 \n\t"
6150         "mul r8, r12 \n\t"
6151         "add r22, r0 \n\t"
6152         "adc r23, r1 \n\t"
6153         "adc r24, r25 \n\t"
6154         "ld r0, z \n\t"
6155         "add r22, r0 \n\t"
6156         "adc r23, r25 \n\t"
6157         "adc r24, r25 \n\t"
6158         "st z+, r22 \n\t"
6159
6160         "ld r9, x+ \n\t"
6161         "ldi r22, 0 \n\t"
6162         "mul r10, r21 \n\t"
6163         "add r23, r0 \n\t"
6164         "adc r24, r1 \n\t"
6165         "adc r22, r25 \n\t"
6166         "mul r11, r20 \n\t"
6167         "add r23, r0 \n\t"
6168         "adc r24, r1 \n\t"
6169         "adc r22, r25 \n\t"
6170         "mul r2, r19 \n\t"
6171         "add r23, r0 \n\t"
6172         "adc r24, r1 \n\t"
6173         "adc r22, r25 \n\t"
6174         "mul r3, r18 \n\t"
6175         "add r23, r0 \n\t"
6176         "adc r24, r1 \n\t"
6177         "adc r22, r25 \n\t"
6178         "mul r4, r17 \n\t"
6179         "add r23, r0 \n\t"
6180         "adc r24, r1 \n\t"
6181         "adc r22, r25 \n\t"
6182         "mul r5, r16 \n\t"
6183         "add r23, r0 \n\t"
6184         "adc r24, r1 \n\t"
6185         "adc r22, r25 \n\t"
6186         "mul r6, r15 \n\t"
6187         "add r23, r0 \n\t"
6188         "adc r24, r1 \n\t"
6189         "adc r22, r25 \n\t"
6190         "mul r7, r14 \n\t"
6191         "add r23, r0 \n\t"
6192         "adc r24, r1 \n\t"
6193         "adc r22, r25 \n\t"
6194         "mul r8, r13 \n\t"
6195         "add r23, r0 \n\t"
6196         "adc r24, r1 \n\t"
6197         "adc r22, r25 \n\t"
6198         "mul r9, r12 \n\t"
6199         "add r23, r0 \n\t"
6200         "adc r24, r1 \n\t"
6201         "adc r22, r25 \n\t"
6202         "ld r0, z \n\t"
6203         "add r23, r0 \n\t"
6204         "adc r24, r25 \n\t"
6205         "adc r22, r25 \n\t"
6206         "st z+, r23 \n\t"
6207
6208         "ld r10, x+ \n\t"
6209         "ldi r23, 0 \n\t"
6210         "mul r11, r21 \n\t"
6211         "add r24, r0 \n\t"
6212         "adc r22, r1 \n\t"
6213         "adc r23, r25 \n\t"
6214         "mul r2, r20 \n\t"
6215         "add r24, r0 \n\t"
6216         "adc r22, r1 \n\t"
6217         "adc r23, r25 \n\t"
6218         "mul r3, r19 \n\t"
6219         "add r24, r0 \n\t"
6220         "adc r22, r1 \n\t"
6221         "adc r23, r25 \n\t"
6222         "mul r4, r18 \n\t"
6223         "add r24, r0 \n\t"
6224         "adc r22, r1 \n\t"
6225         "adc r23, r25 \n\t"
6226         "mul r5, r17 \n\t"
6227         "add r24, r0 \n\t"
6228         "adc r22, r1 \n\t"
6229         "adc r23, r25 \n\t"
6230         "mul r6, r16 \n\t"
6231         "add r24, r0 \n\t"
6232         "adc r22, r1 \n\t"
6233         "adc r23, r25 \n\t"
6234         "mul r7, r15 \n\t"
6235         "add r24, r0 \n\t"
6236         "adc r22, r1 \n\t"
6237         "adc r23, r25 \n\t"
6238         "mul r8, r14 \n\t"
6239         "add r24, r0 \n\t"
6240         "adc r22, r1 \n\t"
6241         "adc r23, r25 \n\t"
6242         "mul r9, r13 \n\t"
6243         "add r24, r0 \n\t"
6244         "adc r22, r1 \n\t"
6245         "adc r23, r25 \n\t"
6246         "mul r10, r12 \n\t"
6247         "add r24, r0 \n\t"
6248         "adc r22, r1 \n\t"
6249         "adc r23, r25 \n\t"
6250         "ld r0, z \n\t"
6251         "add r24, r0 \n\t"
6252         "adc r22, r25 \n\t"
6253         "adc r23, r25 \n\t"
6254         "st z+, r24 \n\t"
6255
6256         "ld r11, x+ \n\t"
6257         "ldi r24, 0 \n\t"
6258         "mul r2, r21 \n\t"
6259         "add r22, r0 \n\t"
6260         "adc r23, r1 \n\t"
6261         "adc r24, r25 \n\t"
6262         "mul r3, r20 \n\t"
6263         "add r22, r0 \n\t"
6264         "adc r23, r1 \n\t"
6265         "adc r24, r25 \n\t"
6266         "mul r4, r19 \n\t"
6267         "add r22, r0 \n\t"
6268         "adc r23, r1 \n\t"
6269         "adc r24, r25 \n\t"
6270         "mul r5, r18 \n\t"
6271         "add r22, r0 \n\t"
6272         "adc r23, r1 \n\t"
6273         "adc r24, r25 \n\t"
6274         "mul r6, r17 \n\t"
6275         "add r22, r0 \n\t"
6276         "adc r23, r1 \n\t"
6277         "adc r24, r25 \n\t"
6278         "mul r7, r16 \n\t"
6279         "add r22, r0 \n\t"
6280         "adc r23, r1 \n\t"
6281         "adc r24, r25 \n\t"
6282         "mul r8, r15 \n\t"
6283         "add r22, r0 \n\t"
6284         "adc r23, r1 \n\t"
6285         "adc r24, r25 \n\t"
6286         "mul r9, r14 \n\t"
6287         "add r22, r0 \n\t"
6288         "adc r23, r1 \n\t"
6289         "adc r24, r25 \n\t"
6290         "mul r10, r13 \n\t"
6291         "add r22, r0 \n\t"
6292         "adc r23, r1 \n\t"
6293         "adc r24, r25 \n\t"
6294         "mul r11, r12 \n\t"
6295         "add r22, r0 \n\t"
6296         "adc r23, r1 \n\t"
6297         "adc r24, r25 \n\t"
6298         "ld r0, z \n\t"
6299         "add r22, r0 \n\t"
6300         "adc r23, r25 \n\t"
6301         "adc r24, r25 \n\t"
6302         "st z+, r22 \n\t"
6303
6304         "ld r2, x+ \n\t"
6305         "ldi r22, 0 \n\t"
6306         "mul r3, r21 \n\t"
6307         "add r23, r0 \n\t"
6308         "adc r24, r1 \n\t"
6309         "adc r22, r25 \n\t"
6310         "mul r4, r20 \n\t"
6311         "add r23, r0 \n\t"
6312         "adc r24, r1 \n\t"
6313         "adc r22, r25 \n\t"
6314         "mul r5, r19 \n\t"
6315         "add r23, r0 \n\t"
6316         "adc r24, r1 \n\t"
6317         "adc r22, r25 \n\t"
6318         "mul r6, r18 \n\t"
6319         "add r23, r0 \n\t"
6320         "adc r24, r1 \n\t"
6321         "adc r22, r25 \n\t"
6322         "mul r7, r17 \n\t"
6323         "add r23, r0 \n\t"
6324         "adc r24, r1 \n\t"
6325         "adc r22, r25 \n\t"
6326         "mul r8, r16 \n\t"
6327         "add r23, r0 \n\t"
6328         "adc r24, r1 \n\t"
6329         "adc r22, r25 \n\t"
6330         "mul r9, r15 \n\t"
6331         "add r23, r0 \n\t"
6332         "adc r24, r1 \n\t"
6333         "adc r22, r25 \n\t"
6334         "mul r10, r14 \n\t"
6335         "add r23, r0 \n\t"
6336         "adc r24, r1 \n\t"
6337         "adc r22, r25 \n\t"
6338         "mul r11, r13 \n\t"
6339         "add r23, r0 \n\t"
6340         "adc r24, r1 \n\t"
6341         "adc r22, r25 \n\t"
6342         "mul r2, r12 \n\t"
6343         "add r23, r0 \n\t"
6344         "adc r24, r1 \n\t"
6345         "adc r22, r25 \n\t"
6346         "ld r0, z \n\t"
6347         "add r23, r0 \n\t"
6348         "adc r24, r25 \n\t"
6349         "adc r22, r25 \n\t"
6350         "st z+, r23 \n\t"
6351
6352         "ld r3, x+ \n\t"
6353         "ldi r23, 0 \n\t"
6354         "mul r4, r21 \n\t"
6355         "add r24, r0 \n\t"
6356         "adc r22, r1 \n\t"
6357         "adc r23, r25 \n\t"
6358         "mul r5, r20 \n\t"
6359         "add r24, r0 \n\t"
6360         "adc r22, r1 \n\t"
6361         "adc r23, r25 \n\t"
6362         "mul r6, r19 \n\t"
6363         "add r24, r0 \n\t"
6364         "adc r22, r1 \n\t"
6365         "adc r23, r25 \n\t"
6366         "mul r7, r18 \n\t"
6367         "add r24, r0 \n\t"
6368         "adc r22, r1 \n\t"
6369         "adc r23, r25 \n\t"
6370         "mul r8, r17 \n\t"
6371         "add r24, r0 \n\t"
6372         "adc r22, r1 \n\t"
6373         "adc r23, r25 \n\t"
6374         "mul r9, r16 \n\t"
6375         "add r24, r0 \n\t"
6376         "adc r22, r1 \n\t"
6377         "adc r23, r25 \n\t"
6378         "mul r10, r15 \n\t"
6379         "add r24, r0 \n\t"
6380         "adc r22, r1 \n\t"
6381         "adc r23, r25 \n\t"
6382         "mul r11, r14 \n\t"
6383         "add r24, r0 \n\t"
6384         "adc r22, r1 \n\t"
6385         "adc r23, r25 \n\t"
6386         "mul r2, r13 \n\t"
6387         "add r24, r0 \n\t"
6388         "adc r22, r1 \n\t"
6389         "adc r23, r25 \n\t"
6390         "mul r3, r12 \n\t"
6391         "add r24, r0 \n\t"
6392         "adc r22, r1 \n\t"
6393         "adc r23, r25 \n\t"
6394         "ld r0, z \n\t"
6395         "add r24, r0 \n\t"
6396         "adc r22, r25 \n\t"
6397         "adc r23, r25 \n\t"
6398         "st z+, r24 \n\t"
6399
6400         "ld r12, y+ \n\t"
6401         "ldi r24, 0 \n\t"
6402         "mul r4, r12 \n\t"
6403         "add r22, r0 \n\t"
6404         "adc r23, r1 \n\t"
6405         "adc r24, r25 \n\t"
6406         "mul r5, r21 \n\t"
6407         "add r22, r0 \n\t"
6408         "adc r23, r1 \n\t"
6409         "adc r24, r25 \n\t"
6410         "mul r6, r20 \n\t"
6411         "add r22, r0 \n\t"
6412         "adc r23, r1 \n\t"
6413         "adc r24, r25 \n\t"
6414         "mul r7, r19 \n\t"
6415         "add r22, r0 \n\t"
6416         "adc r23, r1 \n\t"
6417         "adc r24, r25 \n\t"
6418         "mul r8, r18 \n\t"
6419         "add r22, r0 \n\t"
6420         "adc r23, r1 \n\t"
6421         "adc r24, r25 \n\t"
6422         "mul r9, r17 \n\t"
6423         "add r22, r0 \n\t"
6424         "adc r23, r1 \n\t"
6425         "adc r24, r25 \n\t"
6426         "mul r10, r16 \n\t"
6427         "add r22, r0 \n\t"
6428         "adc r23, r1 \n\t"
6429         "adc r24, r25 \n\t"
6430         "mul r11, r15 \n\t"
6431         "add r22, r0 \n\t"
6432         "adc r23, r1 \n\t"
6433         "adc r24, r25 \n\t"
6434         "mul r2, r14 \n\t"
6435         "add r22, r0 \n\t"
6436         "adc r23, r1 \n\t"
6437         "adc r24, r25 \n\t"
6438         "mul r3, r13 \n\t"
6439         "add r22, r0 \n\t"
6440         "adc r23, r1 \n\t"
6441         "adc r24, r25 \n\t"
6442         "ld r0, z \n\t"
6443         "add r22, r0 \n\t"
6444         "adc r23, r25 \n\t"
6445         "adc r24, r25 \n\t"
6446         "st z+, r22 \n\t"
6447
6448         "ld r13, y+ \n\t"
6449         "ldi r22, 0 \n\t"
6450         "mul r4, r13 \n\t"
6451         "add r23, r0 \n\t"
6452         "adc r24, r1 \n\t"
6453         "adc r22, r25 \n\t"
6454         "mul r5, r12 \n\t"
6455         "add r23, r0 \n\t"
6456         "adc r24, r1 \n\t"
6457         "adc r22, r25 \n\t"
6458         "mul r6, r21 \n\t"
6459         "add r23, r0 \n\t"
6460         "adc r24, r1 \n\t"
6461         "adc r22, r25 \n\t"
6462         "mul r7, r20 \n\t"
6463         "add r23, r0 \n\t"
6464         "adc r24, r1 \n\t"
6465         "adc r22, r25 \n\t"
6466         "mul r8, r19 \n\t"
6467         "add r23, r0 \n\t"
6468         "adc r24, r1 \n\t"
6469         "adc r22, r25 \n\t"
6470         "mul r9, r18 \n\t"
6471         "add r23, r0 \n\t"
6472         "adc r24, r1 \n\t"
6473         "adc r22, r25 \n\t"
6474         "mul r10, r17 \n\t"
6475         "add r23, r0 \n\t"
6476         "adc r24, r1 \n\t"
6477         "adc r22, r25 \n\t"
6478         "mul r11, r16 \n\t"
6479         "add r23, r0 \n\t"
6480         "adc r24, r1 \n\t"
6481         "adc r22, r25 \n\t"
6482         "mul r2, r15 \n\t"
6483         "add r23, r0 \n\t"
6484         "adc r24, r1 \n\t"
6485         "adc r22, r25 \n\t"
6486         "mul r3, r14 \n\t"
6487         "add r23, r0 \n\t"
6488         "adc r24, r1 \n\t"
6489         "adc r22, r25 \n\t"
6490         "ld r0, z \n\t"
6491         "add r23, r0 \n\t"
6492         "adc r24, r25 \n\t"
6493         "adc r22, r25 \n\t"
6494         "st z+, r23 \n\t"
6495
6496         "ld r14, y+ \n\t"
6497         "ldi r23, 0 \n\t"
6498         "mul r4, r14 \n\t"
6499         "add r24, r0 \n\t"
6500         "adc r22, r1 \n\t"
6501         "adc r23, r25 \n\t"
6502         "mul r5, r13 \n\t"
6503         "add r24, r0 \n\t"
6504         "adc r22, r1 \n\t"
6505         "adc r23, r25 \n\t"
6506         "mul r6, r12 \n\t"
6507         "add r24, r0 \n\t"
6508         "adc r22, r1 \n\t"
6509         "adc r23, r25 \n\t"
6510         "mul r7, r21 \n\t"
6511         "add r24, r0 \n\t"
6512         "adc r22, r1 \n\t"
6513         "adc r23, r25 \n\t"
6514         "mul r8, r20 \n\t"
6515         "add r24, r0 \n\t"
6516         "adc r22, r1 \n\t"
6517         "adc r23, r25 \n\t"
6518         "mul r9, r19 \n\t"
6519         "add r24, r0 \n\t"
6520         "adc r22, r1 \n\t"
6521         "adc r23, r25 \n\t"
6522         "mul r10, r18 \n\t"
6523         "add r24, r0 \n\t"
6524         "adc r22, r1 \n\t"
6525         "adc r23, r25 \n\t"
6526         "mul r11, r17 \n\t"
6527         "add r24, r0 \n\t"
6528         "adc r22, r1 \n\t"
6529         "adc r23, r25 \n\t"
6530         "mul r2, r16 \n\t"
6531         "add r24, r0 \n\t"
6532         "adc r22, r1 \n\t"
6533         "adc r23, r25 \n\t"
6534         "mul r3, r15 \n\t"
6535         "add r24, r0 \n\t"
6536         "adc r22, r1 \n\t"
6537         "adc r23, r25 \n\t"
6538         "ld r0, z \n\t"
6539         "add r24, r0 \n\t"
6540         "adc r22, r25 \n\t"
6541         "adc r23, r25 \n\t"
6542         "st z+, r24 \n\t"
6543
6544         "ld r15, y+ \n\t"
6545         "ldi r24, 0 \n\t"
6546         "mul r4, r15 \n\t"
6547         "add r22, r0 \n\t"
6548         "adc r23, r1 \n\t"
6549         "adc r24, r25 \n\t"
6550         "mul r5, r14 \n\t"
6551         "add r22, r0 \n\t"
6552         "adc r23, r1 \n\t"
6553         "adc r24, r25 \n\t"
6554         "mul r6, r13 \n\t"
6555         "add r22, r0 \n\t"
6556         "adc r23, r1 \n\t"
6557         "adc r24, r25 \n\t"
6558         "mul r7, r12 \n\t"
6559         "add r22, r0 \n\t"
6560         "adc r23, r1 \n\t"
6561         "adc r24, r25 \n\t"
6562         "mul r8, r21 \n\t"
6563         "add r22, r0 \n\t"
6564         "adc r23, r1 \n\t"
6565         "adc r24, r25 \n\t"
6566         "mul r9, r20 \n\t"
6567         "add r22, r0 \n\t"
6568         "adc r23, r1 \n\t"
6569         "adc r24, r25 \n\t"
6570         "mul r10, r19 \n\t"
6571         "add r22, r0 \n\t"
6572         "adc r23, r1 \n\t"
6573         "adc r24, r25 \n\t"
6574         "mul r11, r18 \n\t"
6575         "add r22, r0 \n\t"
6576         "adc r23, r1 \n\t"
6577         "adc r24, r25 \n\t"
6578         "mul r2, r17 \n\t"
6579         "add r22, r0 \n\t"
6580         "adc r23, r1 \n\t"
6581         "adc r24, r25 \n\t"
6582         "mul r3, r16 \n\t"
6583         "add r22, r0 \n\t"
6584         "adc r23, r1 \n\t"
6585         "adc r24, r25 \n\t"
6586         "ld r0, z \n\t"
6587         "add r22, r0 \n\t"
6588         "adc r23, r25 \n\t"
6589         "adc r24, r25 \n\t"
6590         "st z+, r22 \n\t"
6591
6592         "ld r16, y+ \n\t"
6593         "ldi r22, 0 \n\t"
6594         "mul r4, r16 \n\t"
6595         "add r23, r0 \n\t"
6596         "adc r24, r1 \n\t"
6597         "adc r22, r25 \n\t"
6598         "mul r5, r15 \n\t"
6599         "add r23, r0 \n\t"
6600         "adc r24, r1 \n\t"
6601         "adc r22, r25 \n\t"
6602         "mul r6, r14 \n\t"
6603         "add r23, r0 \n\t"
6604         "adc r24, r1 \n\t"
6605         "adc r22, r25 \n\t"
6606         "mul r7, r13 \n\t"
6607         "add r23, r0 \n\t"
6608         "adc r24, r1 \n\t"
6609         "adc r22, r25 \n\t"
6610         "mul r8, r12 \n\t"
6611         "add r23, r0 \n\t"
6612         "adc r24, r1 \n\t"
6613         "adc r22, r25 \n\t"
6614         "mul r9, r21 \n\t"
6615         "add r23, r0 \n\t"
6616         "adc r24, r1 \n\t"
6617         "adc r22, r25 \n\t"
6618         "mul r10, r20 \n\t"
6619         "add r23, r0 \n\t"
6620         "adc r24, r1 \n\t"
6621         "adc r22, r25 \n\t"
6622         "mul r11, r19 \n\t"
6623         "add r23, r0 \n\t"
6624         "adc r24, r1 \n\t"
6625         "adc r22, r25 \n\t"
6626         "mul r2, r18 \n\t"
6627         "add r23, r0 \n\t"
6628         "adc r24, r1 \n\t"
6629         "adc r22, r25 \n\t"
6630         "mul r3, r17 \n\t"
6631         "add r23, r0 \n\t"
6632         "adc r24, r1 \n\t"
6633         "adc r22, r25 \n\t"
6634         "ld r0, z \n\t"
6635         "add r23, r0 \n\t"
6636         "adc r24, r25 \n\t"
6637         "adc r22, r25 \n\t"
6638         "st z+, r23 \n\t"
6639
6640         "ld r17, y+ \n\t"
6641         "ldi r23, 0 \n\t"
6642         "mul r4, r17 \n\t"
6643         "add r24, r0 \n\t"
6644         "adc r22, r1 \n\t"
6645         "adc r23, r25 \n\t"
6646         "mul r5, r16 \n\t"
6647         "add r24, r0 \n\t"
6648         "adc r22, r1 \n\t"
6649         "adc r23, r25 \n\t"
6650         "mul r6, r15 \n\t"
6651         "add r24, r0 \n\t"
6652         "adc r22, r1 \n\t"
6653         "adc r23, r25 \n\t"
6654         "mul r7, r14 \n\t"
6655         "add r24, r0 \n\t"
6656         "adc r22, r1 \n\t"
6657         "adc r23, r25 \n\t"
6658         "mul r8, r13 \n\t"
6659         "add r24, r0 \n\t"
6660         "adc r22, r1 \n\t"
6661         "adc r23, r25 \n\t"
6662         "mul r9, r12 \n\t"
6663         "add r24, r0 \n\t"
6664         "adc r22, r1 \n\t"
6665         "adc r23, r25 \n\t"
6666         "mul r10, r21 \n\t"
6667         "add r24, r0 \n\t"
6668         "adc r22, r1 \n\t"
6669         "adc r23, r25 \n\t"
6670         "mul r11, r20 \n\t"
6671         "add r24, r0 \n\t"
6672         "adc r22, r1 \n\t"
6673         "adc r23, r25 \n\t"
6674         "mul r2, r19 \n\t"
6675         "add r24, r0 \n\t"
6676         "adc r22, r1 \n\t"
6677         "adc r23, r25 \n\t"
6678         "mul r3, r18 \n\t"
6679         "add r24, r0 \n\t"
6680         "adc r22, r1 \n\t"
6681         "adc r23, r25 \n\t"
6682         "ld r0, z \n\t"
6683         "add r24, r0 \n\t"
6684         "adc r22, r25 \n\t"
6685         "adc r23, r25 \n\t"
6686         "st z+, r24 \n\t"
6687
6688         "ld r18, y+ \n\t"
6689         "ldi r24, 0 \n\t"
6690         "mul r4, r18 \n\t"
6691         "add r22, r0 \n\t"
6692         "adc r23, r1 \n\t"
6693         "adc r24, r25 \n\t"
6694         "mul r5, r17 \n\t"
6695         "add r22, r0 \n\t"
6696         "adc r23, r1 \n\t"
6697         "adc r24, r25 \n\t"
6698         "mul r6, r16 \n\t"
6699         "add r22, r0 \n\t"
6700         "adc r23, r1 \n\t"
6701         "adc r24, r25 \n\t"
6702         "mul r7, r15 \n\t"
6703         "add r22, r0 \n\t"
6704         "adc r23, r1 \n\t"
6705         "adc r24, r25 \n\t"
6706         "mul r8, r14 \n\t"
6707         "add r22, r0 \n\t"
6708         "adc r23, r1 \n\t"
6709         "adc r24, r25 \n\t"
6710         "mul r9, r13 \n\t"
6711         "add r22, r0 \n\t"
6712         "adc r23, r1 \n\t"
6713         "adc r24, r25 \n\t"
6714         "mul r10, r12 \n\t"
6715         "add r22, r0 \n\t"
6716         "adc r23, r1 \n\t"
6717         "adc r24, r25 \n\t"
6718         "mul r11, r21 \n\t"
6719         "add r22, r0 \n\t"
6720         "adc r23, r1 \n\t"
6721         "adc r24, r25 \n\t"
6722         "mul r2, r20 \n\t"
6723         "add r22, r0 \n\t"
6724         "adc r23, r1 \n\t"
6725         "adc r24, r25 \n\t"
6726         "mul r3, r19 \n\t"
6727         "add r22, r0 \n\t"
6728         "adc r23, r1 \n\t"
6729         "adc r24, r25 \n\t"
6730         "ld r0, z \n\t"
6731         "add r22, r0 \n\t"
6732         "adc r23, r25 \n\t"
6733         "adc r24, r25 \n\t"
6734         "st z+, r22 \n\t"
6735
6736         "ld r19, y+ \n\t"
6737         "ldi r22, 0 \n\t"
6738         "mul r4, r19 \n\t"
6739         "add r23, r0 \n\t"
6740         "adc r24, r1 \n\t"
6741         "adc r22, r25 \n\t"
6742         "mul r5, r18 \n\t"
6743         "add r23, r0 \n\t"
6744         "adc r24, r1 \n\t"
6745         "adc r22, r25 \n\t"
6746         "mul r6, r17 \n\t"
6747         "add r23, r0 \n\t"
6748         "adc r24, r1 \n\t"
6749         "adc r22, r25 \n\t"
6750         "mul r7, r16 \n\t"
6751         "add r23, r0 \n\t"
6752         "adc r24, r1 \n\t"
6753         "adc r22, r25 \n\t"
6754         "mul r8, r15 \n\t"
6755         "add r23, r0 \n\t"
6756         "adc r24, r1 \n\t"
6757         "adc r22, r25 \n\t"
6758         "mul r9, r14 \n\t"
6759         "add r23, r0 \n\t"
6760         "adc r24, r1 \n\t"
6761         "adc r22, r25 \n\t"
6762         "mul r10, r13 \n\t"
6763         "add r23, r0 \n\t"
6764         "adc r24, r1 \n\t"
6765         "adc r22, r25 \n\t"
6766         "mul r11, r12 \n\t"
6767         "add r23, r0 \n\t"
6768         "adc r24, r1 \n\t"
6769         "adc r22, r25 \n\t"
6770         "mul r2, r21 \n\t"
6771         "add r23, r0 \n\t"
6772         "adc r24, r1 \n\t"
6773         "adc r22, r25 \n\t"
6774         "mul r3, r20 \n\t"
6775         "add r23, r0 \n\t"
6776         "adc r24, r1 \n\t"
6777         "adc r22, r25 \n\t"
6778         "ld r0, z \n\t"
6779         "add r23, r0 \n\t"
6780         "adc r24, r25 \n\t"
6781         "adc r22, r25 \n\t"
6782         "st z+, r23 \n\t"
6783
6784         "ld r20, y+ \n\t"
6785         "ldi r23, 0 \n\t"
6786         "mul r4, r20 \n\t"
6787         "add r24, r0 \n\t"
6788         "adc r22, r1 \n\t"
6789         "adc r23, r25 \n\t"
6790         "mul r5, r19 \n\t"
6791         "add r24, r0 \n\t"
6792         "adc r22, r1 \n\t"
6793         "adc r23, r25 \n\t"
6794         "mul r6, r18 \n\t"
6795         "add r24, r0 \n\t"
6796         "adc r22, r1 \n\t"
6797         "adc r23, r25 \n\t"
6798         "mul r7, r17 \n\t"
6799         "add r24, r0 \n\t"
6800         "adc r22, r1 \n\t"
6801         "adc r23, r25 \n\t"
6802         "mul r8, r16 \n\t"
6803         "add r24, r0 \n\t"
6804         "adc r22, r1 \n\t"
6805         "adc r23, r25 \n\t"
6806         "mul r9, r15 \n\t"
6807         "add r24, r0 \n\t"
6808         "adc r22, r1 \n\t"
6809         "adc r23, r25 \n\t"
6810         "mul r10, r14 \n\t"
6811         "add r24, r0 \n\t"
6812         "adc r22, r1 \n\t"
6813         "adc r23, r25 \n\t"
6814         "mul r11, r13 \n\t"
6815         "add r24, r0 \n\t"
6816         "adc r22, r1 \n\t"
6817         "adc r23, r25 \n\t"
6818         "mul r2, r12 \n\t"
6819         "add r24, r0 \n\t"
6820         "adc r22, r1 \n\t"
6821         "adc r23, r25 \n\t"
6822         "mul r3, r21 \n\t"
6823         "add r24, r0 \n\t"
6824         "adc r22, r1 \n\t"
6825         "adc r23, r25 \n\t"
6826         "ld r0, z \n\t"
6827         "add r24, r0 \n\t"
6828         "adc r22, r25 \n\t"
6829         "adc r23, r25 \n\t"
6830         "st z+, r24 \n\t"
6831
6832         "ld r21, y+ \n\t"
6833         "ldi r24, 0 \n\t"
6834         "mul r4, r21 \n\t"
6835         "add r22, r0 \n\t"
6836         "adc r23, r1 \n\t"
6837         "adc r24, r25 \n\t"
6838         "mul r5, r20 \n\t"
6839         "add r22, r0 \n\t"
6840         "adc r23, r1 \n\t"
6841         "adc r24, r25 \n\t"
6842         "mul r6, r19 \n\t"
6843         "add r22, r0 \n\t"
6844         "adc r23, r1 \n\t"
6845         "adc r24, r25 \n\t"
6846         "mul r7, r18 \n\t"
6847         "add r22, r0 \n\t"
6848         "adc r23, r1 \n\t"
6849         "adc r24, r25 \n\t"
6850         "mul r8, r17 \n\t"
6851         "add r22, r0 \n\t"
6852         "adc r23, r1 \n\t"
6853         "adc r24, r25 \n\t"
6854         "mul r9, r16 \n\t"
6855         "add r22, r0 \n\t"
6856         "adc r23, r1 \n\t"
6857         "adc r24, r25 \n\t"
6858         "mul r10, r15 \n\t"
6859         "add r22, r0 \n\t"
6860         "adc r23, r1 \n\t"
6861         "adc r24, r25 \n\t"
6862         "mul r11, r14 \n\t"
6863         "add r22, r0 \n\t"
6864         "adc r23, r1 \n\t"
6865         "adc r24, r25 \n\t"
6866         "mul r2, r13 \n\t"
6867         "add r22, r0 \n\t"
6868         "adc r23, r1 \n\t"
6869         "adc r24, r25 \n\t"
6870         "mul r3, r12 \n\t"
6871         "add r22, r0 \n\t"
6872         "adc r23, r1 \n\t"
6873         "adc r24, r25 \n\t"
6874         "ld r0, z \n\t"
6875         "add r22, r0 \n\t"
6876         "adc r23, r25 \n\t"
6877         "adc r24, r25 \n\t"
6878         "st z+, r22 \n\t"
6879
6880         "ld r12, y+ \n\t"
6881         "ldi r22, 0 \n\t"
6882         "mul r4, r12 \n\t"
6883         "add r23, r0 \n\t"
6884         "adc r24, r1 \n\t"
6885         "adc r22, r25 \n\t"
6886         "mul r5, r21 \n\t"
6887         "add r23, r0 \n\t"
6888         "adc r24, r1 \n\t"
6889         "adc r22, r25 \n\t"
6890         "mul r6, r20 \n\t"
6891         "add r23, r0 \n\t"
6892         "adc r24, r1 \n\t"
6893         "adc r22, r25 \n\t"
6894         "mul r7, r19 \n\t"
6895         "add r23, r0 \n\t"
6896         "adc r24, r1 \n\t"
6897         "adc r22, r25 \n\t"
6898         "mul r8, r18 \n\t"
6899         "add r23, r0 \n\t"
6900         "adc r24, r1 \n\t"
6901         "adc r22, r25 \n\t"
6902         "mul r9, r17 \n\t"
6903         "add r23, r0 \n\t"
6904         "adc r24, r1 \n\t"
6905         "adc r22, r25 \n\t"
6906         "mul r10, r16 \n\t"
6907         "add r23, r0 \n\t"
6908         "adc r24, r1 \n\t"
6909         "adc r22, r25 \n\t"
6910         "mul r11, r15 \n\t"
6911         "add r23, r0 \n\t"
6912         "adc r24, r1 \n\t"
6913         "adc r22, r25 \n\t"
6914         "mul r2, r14 \n\t"
6915         "add r23, r0 \n\t"
6916         "adc r24, r1 \n\t"
6917         "adc r22, r25 \n\t"
6918         "mul r3, r13 \n\t"
6919         "add r23, r0 \n\t"
6920         "adc r24, r1 \n\t"
6921         "adc r22, r25 \n\t"
6922         "ld r0, z \n\t"
6923         "add r23, r0 \n\t"
6924         "adc r24, r25 \n\t"
6925         "adc r22, r25 \n\t"
6926         "st z+, r23 \n\t"
6927
6928         "ld r13, y+ \n\t"
6929         "ldi r23, 0 \n\t"
6930         "mul r4, r13 \n\t"
6931         "add r24, r0 \n\t"
6932         "adc r22, r1 \n\t"
6933         "adc r23, r25 \n\t"
6934         "mul r5, r12 \n\t"
6935         "add r24, r0 \n\t"
6936         "adc r22, r1 \n\t"
6937         "adc r23, r25 \n\t"
6938         "mul r6, r21 \n\t"
6939         "add r24, r0 \n\t"
6940         "adc r22, r1 \n\t"
6941         "adc r23, r25 \n\t"
6942         "mul r7, r20 \n\t"
6943         "add r24, r0 \n\t"
6944         "adc r22, r1 \n\t"
6945         "adc r23, r25 \n\t"
6946         "mul r8, r19 \n\t"
6947         "add r24, r0 \n\t"
6948         "adc r22, r1 \n\t"
6949         "adc r23, r25 \n\t"
6950         "mul r9, r18 \n\t"
6951         "add r24, r0 \n\t"
6952         "adc r22, r1 \n\t"
6953         "adc r23, r25 \n\t"
6954         "mul r10, r17 \n\t"
6955         "add r24, r0 \n\t"
6956         "adc r22, r1 \n\t"
6957         "adc r23, r25 \n\t"
6958         "mul r11, r16 \n\t"
6959         "add r24, r0 \n\t"
6960         "adc r22, r1 \n\t"
6961         "adc r23, r25 \n\t"
6962         "mul r2, r15 \n\t"
6963         "add r24, r0 \n\t"
6964         "adc r22, r1 \n\t"
6965         "adc r23, r25 \n\t"
6966         "mul r3, r14 \n\t"
6967         "add r24, r0 \n\t"
6968         "adc r22, r1 \n\t"
6969         "adc r23, r25 \n\t"
6970         "ld r0, z \n\t"
6971         "add r24, r0 \n\t"
6972         "adc r22, r25 \n\t"
6973         "adc r23, r25 \n\t"
6974         "st z+, r24 \n\t"
6975
6976         "ldi r24, 0 \n\t"
6977         "mul r5, r13 \n\t"
6978         "add r22, r0 \n\t"
6979         "adc r23, r1 \n\t"
6980         "adc r24, r25 \n\t"
6981         "mul r6, r12 \n\t"
6982         "add r22, r0 \n\t"
6983         "adc r23, r1 \n\t"
6984         "adc r24, r25 \n\t"
6985         "mul r7, r21 \n\t"
6986         "add r22, r0 \n\t"
6987         "adc r23, r1 \n\t"
6988         "adc r24, r25 \n\t"
6989         "mul r8, r20 \n\t"
6990         "add r22, r0 \n\t"
6991         "adc r23, r1 \n\t"
6992         "adc r24, r25 \n\t"
6993         "mul r9, r19 \n\t"
6994         "add r22, r0 \n\t"
6995         "adc r23, r1 \n\t"
6996         "adc r24, r25 \n\t"
6997         "mul r10, r18 \n\t"
6998         "add r22, r0 \n\t"
6999         "adc r23, r1 \n\t"
7000         "adc r24, r25 \n\t"
7001         "mul r11, r17 \n\t"
7002         "add r22, r0 \n\t"
7003         "adc r23, r1 \n\t"
7004         "adc r24, r25 \n\t"
7005         "mul r2, r16 \n\t"
7006         "add r22, r0 \n\t"
7007         "adc r23, r1 \n\t"
7008         "adc r24, r25 \n\t"
7009         "mul r3, r15 \n\t"
7010         "add r22, r0 \n\t"
7011         "adc r23, r1 \n\t"
7012         "adc r24, r25 \n\t"
7013         "st z+, r22 \n\t"
7014
7015         "ldi r22, 0 \n\t"
7016         "mul r6, r13 \n\t"
7017         "add r23, r0 \n\t"
7018         "adc r24, r1 \n\t"
7019         "adc r22, r25 \n\t"
7020         "mul r7, r12 \n\t"
7021         "add r23, r0 \n\t"
7022         "adc r24, r1 \n\t"
7023         "adc r22, r25 \n\t"
7024         "mul r8, r21 \n\t"
7025         "add r23, r0 \n\t"
7026         "adc r24, r1 \n\t"
7027         "adc r22, r25 \n\t"
7028         "mul r9, r20 \n\t"
7029         "add r23, r0 \n\t"
7030         "adc r24, r1 \n\t"
7031         "adc r22, r25 \n\t"
7032         "mul r10, r19 \n\t"
7033         "add r23, r0 \n\t"
7034         "adc r24, r1 \n\t"
7035         "adc r22, r25 \n\t"
7036         "mul r11, r18 \n\t"
7037         "add r23, r0 \n\t"
7038         "adc r24, r1 \n\t"
7039         "adc r22, r25 \n\t"
7040         "mul r2, r17 \n\t"
7041         "add r23, r0 \n\t"
7042         "adc r24, r1 \n\t"
7043         "adc r22, r25 \n\t"
7044         "mul r3, r16 \n\t"
7045         "add r23, r0 \n\t"
7046         "adc r24, r1 \n\t"
7047         "adc r22, r25 \n\t"
7048         "st z+, r23 \n\t"
7049
7050         "ldi r23, 0 \n\t"
7051         "mul r7, r13 \n\t"
7052         "add r24, r0 \n\t"
7053         "adc r22, r1 \n\t"
7054         "adc r23, r25 \n\t"
7055         "mul r8, r12 \n\t"
7056         "add r24, r0 \n\t"
7057         "adc r22, r1 \n\t"
7058         "adc r23, r25 \n\t"
7059         "mul r9, r21 \n\t"
7060         "add r24, r0 \n\t"
7061         "adc r22, r1 \n\t"
7062         "adc r23, r25 \n\t"
7063         "mul r10, r20 \n\t"
7064         "add r24, r0 \n\t"
7065         "adc r22, r1 \n\t"
7066         "adc r23, r25 \n\t"
7067         "mul r11, r19 \n\t"
7068         "add r24, r0 \n\t"
7069         "adc r22, r1 \n\t"
7070         "adc r23, r25 \n\t"
7071         "mul r2, r18 \n\t"
7072         "add r24, r0 \n\t"
7073         "adc r22, r1 \n\t"
7074         "adc r23, r25 \n\t"
7075         "mul r3, r17 \n\t"
7076         "add r24, r0 \n\t"
7077         "adc r22, r1 \n\t"
7078         "adc r23, r25 \n\t"
7079         "st z+, r24 \n\t"
7080
7081         "ldi r24, 0 \n\t"
7082         "mul r8, r13 \n\t"
7083         "add r22, r0 \n\t"
7084         "adc r23, r1 \n\t"
7085         "adc r24, r25 \n\t"
7086         "mul r9, r12 \n\t"
7087         "add r22, r0 \n\t"
7088         "adc r23, r1 \n\t"
7089         "adc r24, r25 \n\t"
7090         "mul r10, r21 \n\t"
7091         "add r22, r0 \n\t"
7092         "adc r23, r1 \n\t"
7093         "adc r24, r25 \n\t"
7094         "mul r11, r20 \n\t"
7095         "add r22, r0 \n\t"
7096         "adc r23, r1 \n\t"
7097         "adc r24, r25 \n\t"
7098         "mul r2, r19 \n\t"
7099         "add r22, r0 \n\t"
7100         "adc r23, r1 \n\t"
7101         "adc r24, r25 \n\t"
7102         "mul r3, r18 \n\t"
7103         "add r22, r0 \n\t"
7104         "adc r23, r1 \n\t"
7105         "adc r24, r25 \n\t"
7106         "st z+, r22 \n\t"
7107
7108         "ldi r22, 0 \n\t"
7109         "mul r9, r13 \n\t"
7110         "add r23, r0 \n\t"
7111         "adc r24, r1 \n\t"
7112         "adc r22, r25 \n\t"
7113         "mul r10, r12 \n\t"
7114         "add r23, r0 \n\t"
7115         "adc r24, r1 \n\t"
7116         "adc r22, r25 \n\t"
7117         "mul r11, r21 \n\t"
7118         "add r23, r0 \n\t"
7119         "adc r24, r1 \n\t"
7120         "adc r22, r25 \n\t"
7121         "mul r2, r20 \n\t"
7122         "add r23, r0 \n\t"
7123         "adc r24, r1 \n\t"
7124         "adc r22, r25 \n\t"
7125         "mul r3, r19 \n\t"
7126         "add r23, r0 \n\t"
7127         "adc r24, r1 \n\t"
7128         "adc r22, r25 \n\t"
7129         "st z+, r23 \n\t"
7130
7131         "ldi r23, 0 \n\t"
7132         "mul r10, r13 \n\t"
7133         "add r24, r0 \n\t"
7134         "adc r22, r1 \n\t"
7135         "adc r23, r25 \n\t"
7136         "mul r11, r12 \n\t"
7137         "add r24, r0 \n\t"
7138         "adc r22, r1 \n\t"
7139         "adc r23, r25 \n\t"
7140         "mul r2, r21 \n\t"
7141         "add r24, r0 \n\t"
7142         "adc r22, r1 \n\t"
7143         "adc r23, r25 \n\t"
7144         "mul r3, r20 \n\t"
7145         "add r24, r0 \n\t"
7146         "adc r22, r1 \n\t"
7147         "adc r23, r25 \n\t"
7148         "st z+, r24 \n\t"
7149
7150         "ldi r24, 0 \n\t"
7151         "mul r11, r13 \n\t"
7152         "add r22, r0 \n\t"
7153         "adc r23, r1 \n\t"
7154         "adc r24, r25 \n\t"
7155         "mul r2, r12 \n\t"
7156         "add r22, r0 \n\t"
7157         "adc r23, r1 \n\t"
7158         "adc r24, r25 \n\t"
7159         "mul r3, r21 \n\t"
7160         "add r22, r0 \n\t"
7161         "adc r23, r1 \n\t"
7162         "adc r24, r25 \n\t"
7163         "st z+, r22 \n\t"
7164
7165         "ldi r22, 0 \n\t"
7166         "mul r2, r13 \n\t"
7167         "add r23, r0 \n\t"
7168         "adc r24, r1 \n\t"
7169         "adc r22, r25 \n\t"
7170         "mul r3, r12 \n\t"
7171         "add r23, r0 \n\t"
7172         "adc r24, r1 \n\t"
7173         "adc r22, r25 \n\t"
7174         "st z+, r23 \n\t"
7175
7176         "mul r3, r13 \n\t"
7177         "add r24, r0 \n\t"
7178         "adc r22, r1 \n\t"
7179         "st z+, r24 \n\t"
7180         "st z+, r22 \n\t"
7181
7182         "sbiw r30, 54 \n\t"
7183         "sbiw r28, 32 \n\t"
7184         "sbiw r26, 22 \n\t"
7185         "ld r2, x+ \n\t"
7186         "ld r12, y+ \n\t"
7187         "ld r3, x+ \n\t"
7188         "ld r13, y+ \n\t"
7189         "ld r4, x+ \n\t"
7190         "ld r14, y+ \n\t"
7191         "ld r5, x+ \n\t"
7192         "ld r15, y+ \n\t"
7193         "ld r6, x+ \n\t"
7194         "ld r16, y+ \n\t"
7195         "ld r7, x+ \n\t"
7196         "ld r17, y+ \n\t"
7197         "ld r8, x+ \n\t"
7198         "ld r18, y+ \n\t"
7199         "ld r9, x+ \n\t"
7200         "ld r19, y+ \n\t"
7201         "ld r10, x+ \n\t"
7202         "ld r20, y+ \n\t"
7203         "ld r11, x+ \n\t"
7204         "ld r21, y+ \n\t"
7205
7206         "ldi r23, 0 \n\t"
7207         "mul r2, r12 \n\t"
7208         "st z+, r0 \n\t"
7209         "mov r22, r1 \n\t"
7210
7211         "ldi r24, 0 \n\t"
7212         "mul r2, r13 \n\t"
7213         "add r22, r0 \n\t"
7214         "adc r23, r1 \n\t"
7215         "mul r3, r12 \n\t"
7216         "add r22, r0 \n\t"
7217         "adc r23, r1 \n\t"
7218         "adc r24, r25 \n\t"
7219         "st z+, r22 \n\t"
7220
7221         "ldi r22, 0 \n\t"
7222         "mul r2, r14 \n\t"
7223         "add r23, r0 \n\t"
7224         "adc r24, r1 \n\t"
7225         "adc r22, r25 \n\t"
7226         "mul r3, r13 \n\t"
7227         "add r23, r0 \n\t"
7228         "adc r24, r1 \n\t"
7229         "adc r22, r25 \n\t"
7230         "mul r4, r12 \n\t"
7231         "add r23, r0 \n\t"
7232         "adc r24, r1 \n\t"
7233         "adc r22, r25 \n\t"
7234         "st z+, r23 \n\t"
7235
7236         "ldi r23, 0 \n\t"
7237         "mul r2, r15 \n\t"
7238         "add r24, r0 \n\t"
7239         "adc r22, r1 \n\t"
7240         "adc r23, r25 \n\t"
7241         "mul r3, r14 \n\t"
7242         "add r24, r0 \n\t"
7243         "adc r22, r1 \n\t"
7244         "adc r23, r25 \n\t"
7245         "mul r4, r13 \n\t"
7246         "add r24, r0 \n\t"
7247         "adc r22, r1 \n\t"
7248         "adc r23, r25 \n\t"
7249         "mul r5, r12 \n\t"
7250         "add r24, r0 \n\t"
7251         "adc r22, r1 \n\t"
7252         "adc r23, r25 \n\t"
7253         "st z+, r24 \n\t"
7254
7255         "ldi r24, 0 \n\t"
7256         "mul r2, r16 \n\t"
7257         "add r22, r0 \n\t"
7258         "adc r23, r1 \n\t"
7259         "adc r24, r25 \n\t"
7260         "mul r3, r15 \n\t"
7261         "add r22, r0 \n\t"
7262         "adc r23, r1 \n\t"
7263         "adc r24, r25 \n\t"
7264         "mul r4, r14 \n\t"
7265         "add r22, r0 \n\t"
7266         "adc r23, r1 \n\t"
7267         "adc r24, r25 \n\t"
7268         "mul r5, r13 \n\t"
7269         "add r22, r0 \n\t"
7270         "adc r23, r1 \n\t"
7271         "adc r24, r25 \n\t"
7272         "mul r6, r12 \n\t"
7273         "add r22, r0 \n\t"
7274         "adc r23, r1 \n\t"
7275         "adc r24, r25 \n\t"
7276         "st z+, r22 \n\t"
7277
7278         "ldi r22, 0 \n\t"
7279         "mul r2, r17 \n\t"
7280         "add r23, r0 \n\t"
7281         "adc r24, r1 \n\t"
7282         "adc r22, r25 \n\t"
7283         "mul r3, r16 \n\t"
7284         "add r23, r0 \n\t"
7285         "adc r24, r1 \n\t"
7286         "adc r22, r25 \n\t"
7287         "mul r4, r15 \n\t"
7288         "add r23, r0 \n\t"
7289         "adc r24, r1 \n\t"
7290         "adc r22, r25 \n\t"
7291         "mul r5, r14 \n\t"
7292         "add r23, r0 \n\t"
7293         "adc r24, r1 \n\t"
7294         "adc r22, r25 \n\t"
7295         "mul r6, r13 \n\t"
7296         "add r23, r0 \n\t"
7297         "adc r24, r1 \n\t"
7298         "adc r22, r25 \n\t"
7299         "mul r7, r12 \n\t"
7300         "add r23, r0 \n\t"
7301         "adc r24, r1 \n\t"
7302         "adc r22, r25 \n\t"
7303         "st z+, r23 \n\t"
7304
7305         "ldi r23, 0 \n\t"
7306         "mul r2, r18 \n\t"
7307         "add r24, r0 \n\t"
7308         "adc r22, r1 \n\t"
7309         "adc r23, r25 \n\t"
7310         "mul r3, r17 \n\t"
7311         "add r24, r0 \n\t"
7312         "adc r22, r1 \n\t"
7313         "adc r23, r25 \n\t"
7314         "mul r4, r16 \n\t"
7315         "add r24, r0 \n\t"
7316         "adc r22, r1 \n\t"
7317         "adc r23, r25 \n\t"
7318         "mul r5, r15 \n\t"
7319         "add r24, r0 \n\t"
7320         "adc r22, r1 \n\t"
7321         "adc r23, r25 \n\t"
7322         "mul r6, r14 \n\t"
7323         "add r24, r0 \n\t"
7324         "adc r22, r1 \n\t"
7325         "adc r23, r25 \n\t"
7326         "mul r7, r13 \n\t"
7327         "add r24, r0 \n\t"
7328         "adc r22, r1 \n\t"
7329         "adc r23, r25 \n\t"
7330         "mul r8, r12 \n\t"
7331         "add r24, r0 \n\t"
7332         "adc r22, r1 \n\t"
7333         "adc r23, r25 \n\t"
7334         "st z+, r24 \n\t"
7335
7336         "ldi r24, 0 \n\t"
7337         "mul r2, r19 \n\t"
7338         "add r22, r0 \n\t"
7339         "adc r23, r1 \n\t"
7340         "adc r24, r25 \n\t"
7341         "mul r3, r18 \n\t"
7342         "add r22, r0 \n\t"
7343         "adc r23, r1 \n\t"
7344         "adc r24, r25 \n\t"
7345         "mul r4, r17 \n\t"
7346         "add r22, r0 \n\t"
7347         "adc r23, r1 \n\t"
7348         "adc r24, r25 \n\t"
7349         "mul r5, r16 \n\t"
7350         "add r22, r0 \n\t"
7351         "adc r23, r1 \n\t"
7352         "adc r24, r25 \n\t"
7353         "mul r6, r15 \n\t"
7354         "add r22, r0 \n\t"
7355         "adc r23, r1 \n\t"
7356         "adc r24, r25 \n\t"
7357         "mul r7, r14 \n\t"
7358         "add r22, r0 \n\t"
7359         "adc r23, r1 \n\t"
7360         "adc r24, r25 \n\t"
7361         "mul r8, r13 \n\t"
7362         "add r22, r0 \n\t"
7363         "adc r23, r1 \n\t"
7364         "adc r24, r25 \n\t"
7365         "mul r9, r12 \n\t"
7366         "add r22, r0 \n\t"
7367         "adc r23, r1 \n\t"
7368         "adc r24, r25 \n\t"
7369         "st z+, r22 \n\t"
7370
7371         "ldi r22, 0 \n\t"
7372         "mul r2, r20 \n\t"
7373         "add r23, r0 \n\t"
7374         "adc r24, r1 \n\t"
7375         "adc r22, r25 \n\t"
7376         "mul r3, r19 \n\t"
7377         "add r23, r0 \n\t"
7378         "adc r24, r1 \n\t"
7379         "adc r22, r25 \n\t"
7380         "mul r4, r18 \n\t"
7381         "add r23, r0 \n\t"
7382         "adc r24, r1 \n\t"
7383         "adc r22, r25 \n\t"
7384         "mul r5, r17 \n\t"
7385         "add r23, r0 \n\t"
7386         "adc r24, r1 \n\t"
7387         "adc r22, r25 \n\t"
7388         "mul r6, r16 \n\t"
7389         "add r23, r0 \n\t"
7390         "adc r24, r1 \n\t"
7391         "adc r22, r25 \n\t"
7392         "mul r7, r15 \n\t"
7393         "add r23, r0 \n\t"
7394         "adc r24, r1 \n\t"
7395         "adc r22, r25 \n\t"
7396         "mul r8, r14 \n\t"
7397         "add r23, r0 \n\t"
7398         "adc r24, r1 \n\t"
7399         "adc r22, r25 \n\t"
7400         "mul r9, r13 \n\t"
7401         "add r23, r0 \n\t"
7402         "adc r24, r1 \n\t"
7403         "adc r22, r25 \n\t"
7404         "mul r10, r12 \n\t"
7405         "add r23, r0 \n\t"
7406         "adc r24, r1 \n\t"
7407         "adc r22, r25 \n\t"
7408         "st z+, r23 \n\t"
7409
7410         "ldi r23, 0 \n\t"
7411         "mul r2, r21 \n\t"
7412         "add r24, r0 \n\t"
7413         "adc r22, r1 \n\t"
7414         "adc r23, r25 \n\t"
7415         "mul r3, r20 \n\t"
7416         "add r24, r0 \n\t"
7417         "adc r22, r1 \n\t"
7418         "adc r23, r25 \n\t"
7419         "mul r4, r19 \n\t"
7420         "add r24, r0 \n\t"
7421         "adc r22, r1 \n\t"
7422         "adc r23, r25 \n\t"
7423         "mul r5, r18 \n\t"
7424         "add r24, r0 \n\t"
7425         "adc r22, r1 \n\t"
7426         "adc r23, r25 \n\t"
7427         "mul r6, r17 \n\t"
7428         "add r24, r0 \n\t"
7429         "adc r22, r1 \n\t"
7430         "adc r23, r25 \n\t"
7431         "mul r7, r16 \n\t"
7432         "add r24, r0 \n\t"
7433         "adc r22, r1 \n\t"
7434         "adc r23, r25 \n\t"
7435         "mul r8, r15 \n\t"
7436         "add r24, r0 \n\t"
7437         "adc r22, r1 \n\t"
7438         "adc r23, r25 \n\t"
7439         "mul r9, r14 \n\t"
7440         "add r24, r0 \n\t"
7441         "adc r22, r1 \n\t"
7442         "adc r23, r25 \n\t"
7443         "mul r10, r13 \n\t"
7444         "add r24, r0 \n\t"
7445         "adc r22, r1 \n\t"
7446         "adc r23, r25 \n\t"
7447         "mul r11, r12 \n\t"
7448         "add r24, r0 \n\t"
7449         "adc r22, r1 \n\t"
7450         "adc r23, r25 \n\t"
7451         "st z+, r24 \n\t"
7452
7453         "ld r2, x+ \n\t"
7454         "ldi r24, 0 \n\t"
7455         "mul r3, r21 \n\t"
7456         "add r22, r0 \n\t"
7457         "adc r23, r1 \n\t"
7458         "adc r24, r25 \n\t"
7459         "mul r4, r20 \n\t"
7460         "add r22, r0 \n\t"
7461         "adc r23, r1 \n\t"
7462         "adc r24, r25 \n\t"
7463         "mul r5, r19 \n\t"
7464         "add r22, r0 \n\t"
7465         "adc r23, r1 \n\t"
7466         "adc r24, r25 \n\t"
7467         "mul r6, r18 \n\t"
7468         "add r22, r0 \n\t"
7469         "adc r23, r1 \n\t"
7470         "adc r24, r25 \n\t"
7471         "mul r7, r17 \n\t"
7472         "add r22, r0 \n\t"
7473         "adc r23, r1 \n\t"
7474         "adc r24, r25 \n\t"
7475         "mul r8, r16 \n\t"
7476         "add r22, r0 \n\t"
7477         "adc r23, r1 \n\t"
7478         "adc r24, r25 \n\t"
7479         "mul r9, r15 \n\t"
7480         "add r22, r0 \n\t"
7481         "adc r23, r1 \n\t"
7482         "adc r24, r25 \n\t"
7483         "mul r10, r14 \n\t"
7484         "add r22, r0 \n\t"
7485         "adc r23, r1 \n\t"
7486         "adc r24, r25 \n\t"
7487         "mul r11, r13 \n\t"
7488         "add r22, r0 \n\t"
7489         "adc r23, r1 \n\t"
7490         "adc r24, r25 \n\t"
7491         "mul r2, r12 \n\t"
7492         "add r22, r0 \n\t"
7493         "adc r23, r1 \n\t"
7494         "adc r24, r25 \n\t"
7495         "ld r0, z \n\t"
7496         "add r22, r0 \n\t"
7497         "adc r23, r25 \n\t"
7498         "adc r24, r25 \n\t"
7499         "st z+, r22 \n\t"
7500
7501         "ld r3, x+ \n\t"
7502         "ldi r22, 0 \n\t"
7503         "mul r4, r21 \n\t"
7504         "add r23, r0 \n\t"
7505         "adc r24, r1 \n\t"
7506         "adc r22, r25 \n\t"
7507         "mul r5, r20 \n\t"
7508         "add r23, r0 \n\t"
7509         "adc r24, r1 \n\t"
7510         "adc r22, r25 \n\t"
7511         "mul r6, r19 \n\t"
7512         "add r23, r0 \n\t"
7513         "adc r24, r1 \n\t"
7514         "adc r22, r25 \n\t"
7515         "mul r7, r18 \n\t"
7516         "add r23, r0 \n\t"
7517         "adc r24, r1 \n\t"
7518         "adc r22, r25 \n\t"
7519         "mul r8, r17 \n\t"
7520         "add r23, r0 \n\t"
7521         "adc r24, r1 \n\t"
7522         "adc r22, r25 \n\t"
7523         "mul r9, r16 \n\t"
7524         "add r23, r0 \n\t"
7525         "adc r24, r1 \n\t"
7526         "adc r22, r25 \n\t"
7527         "mul r10, r15 \n\t"
7528         "add r23, r0 \n\t"
7529         "adc r24, r1 \n\t"
7530         "adc r22, r25 \n\t"
7531         "mul r11, r14 \n\t"
7532         "add r23, r0 \n\t"
7533         "adc r24, r1 \n\t"
7534         "adc r22, r25 \n\t"
7535         "mul r2, r13 \n\t"
7536         "add r23, r0 \n\t"
7537         "adc r24, r1 \n\t"
7538         "adc r22, r25 \n\t"
7539         "mul r3, r12 \n\t"
7540         "add r23, r0 \n\t"
7541         "adc r24, r1 \n\t"
7542         "adc r22, r25 \n\t"
7543         "ld r0, z \n\t"
7544         "add r23, r0 \n\t"
7545         "adc r24, r25 \n\t"
7546         "adc r22, r25 \n\t"
7547         "st z+, r23 \n\t"
7548
7549         "ld r4, x+ \n\t"
7550         "ldi r23, 0 \n\t"
7551         "mul r5, r21 \n\t"
7552         "add r24, r0 \n\t"
7553         "adc r22, r1 \n\t"
7554         "adc r23, r25 \n\t"
7555         "mul r6, r20 \n\t"
7556         "add r24, r0 \n\t"
7557         "adc r22, r1 \n\t"
7558         "adc r23, r25 \n\t"
7559         "mul r7, r19 \n\t"
7560         "add r24, r0 \n\t"
7561         "adc r22, r1 \n\t"
7562         "adc r23, r25 \n\t"
7563         "mul r8, r18 \n\t"
7564         "add r24, r0 \n\t"
7565         "adc r22, r1 \n\t"
7566         "adc r23, r25 \n\t"
7567         "mul r9, r17 \n\t"
7568         "add r24, r0 \n\t"
7569         "adc r22, r1 \n\t"
7570         "adc r23, r25 \n\t"
7571         "mul r10, r16 \n\t"
7572         "add r24, r0 \n\t"
7573         "adc r22, r1 \n\t"
7574         "adc r23, r25 \n\t"
7575         "mul r11, r15 \n\t"
7576         "add r24, r0 \n\t"
7577         "adc r22, r1 \n\t"
7578         "adc r23, r25 \n\t"
7579         "mul r2, r14 \n\t"
7580         "add r24, r0 \n\t"
7581         "adc r22, r1 \n\t"
7582         "adc r23, r25 \n\t"
7583         "mul r3, r13 \n\t"
7584         "add r24, r0 \n\t"
7585         "adc r22, r1 \n\t"
7586         "adc r23, r25 \n\t"
7587         "mul r4, r12 \n\t"
7588         "add r24, r0 \n\t"
7589         "adc r22, r1 \n\t"
7590         "adc r23, r25 \n\t"
7591         "ld r0, z \n\t"
7592         "add r24, r0 \n\t"
7593         "adc r22, r25 \n\t"
7594         "adc r23, r25 \n\t"
7595         "st z+, r24 \n\t"
7596
7597         "ld r5, x+ \n\t"
7598         "ldi r24, 0 \n\t"
7599         "mul r6, r21 \n\t"
7600         "add r22, r0 \n\t"
7601         "adc r23, r1 \n\t"
7602         "adc r24, r25 \n\t"
7603         "mul r7, r20 \n\t"
7604         "add r22, r0 \n\t"
7605         "adc r23, r1 \n\t"
7606         "adc r24, r25 \n\t"
7607         "mul r8, r19 \n\t"
7608         "add r22, r0 \n\t"
7609         "adc r23, r1 \n\t"
7610         "adc r24, r25 \n\t"
7611         "mul r9, r18 \n\t"
7612         "add r22, r0 \n\t"
7613         "adc r23, r1 \n\t"
7614         "adc r24, r25 \n\t"
7615         "mul r10, r17 \n\t"
7616         "add r22, r0 \n\t"
7617         "adc r23, r1 \n\t"
7618         "adc r24, r25 \n\t"
7619         "mul r11, r16 \n\t"
7620         "add r22, r0 \n\t"
7621         "adc r23, r1 \n\t"
7622         "adc r24, r25 \n\t"
7623         "mul r2, r15 \n\t"
7624         "add r22, r0 \n\t"
7625         "adc r23, r1 \n\t"
7626         "adc r24, r25 \n\t"
7627         "mul r3, r14 \n\t"
7628         "add r22, r0 \n\t"
7629         "adc r23, r1 \n\t"
7630         "adc r24, r25 \n\t"
7631         "mul r4, r13 \n\t"
7632         "add r22, r0 \n\t"
7633         "adc r23, r1 \n\t"
7634         "adc r24, r25 \n\t"
7635         "mul r5, r12 \n\t"
7636         "add r22, r0 \n\t"
7637         "adc r23, r1 \n\t"
7638         "adc r24, r25 \n\t"
7639         "ld r0, z \n\t"
7640         "add r22, r0 \n\t"
7641         "adc r23, r25 \n\t"
7642         "adc r24, r25 \n\t"
7643         "st z+, r22 \n\t"
7644
7645         "ld r6, x+ \n\t"
7646         "ldi r22, 0 \n\t"
7647         "mul r7, r21 \n\t"
7648         "add r23, r0 \n\t"
7649         "adc r24, r1 \n\t"
7650         "adc r22, r25 \n\t"
7651         "mul r8, r20 \n\t"
7652         "add r23, r0 \n\t"
7653         "adc r24, r1 \n\t"
7654         "adc r22, r25 \n\t"
7655         "mul r9, r19 \n\t"
7656         "add r23, r0 \n\t"
7657         "adc r24, r1 \n\t"
7658         "adc r22, r25 \n\t"
7659         "mul r10, r18 \n\t"
7660         "add r23, r0 \n\t"
7661         "adc r24, r1 \n\t"
7662         "adc r22, r25 \n\t"
7663         "mul r11, r17 \n\t"
7664         "add r23, r0 \n\t"
7665         "adc r24, r1 \n\t"
7666         "adc r22, r25 \n\t"
7667         "mul r2, r16 \n\t"
7668         "add r23, r0 \n\t"
7669         "adc r24, r1 \n\t"
7670         "adc r22, r25 \n\t"
7671         "mul r3, r15 \n\t"
7672         "add r23, r0 \n\t"
7673         "adc r24, r1 \n\t"
7674         "adc r22, r25 \n\t"
7675         "mul r4, r14 \n\t"
7676         "add r23, r0 \n\t"
7677         "adc r24, r1 \n\t"
7678         "adc r22, r25 \n\t"
7679         "mul r5, r13 \n\t"
7680         "add r23, r0 \n\t"
7681         "adc r24, r1 \n\t"
7682         "adc r22, r25 \n\t"
7683         "mul r6, r12 \n\t"
7684         "add r23, r0 \n\t"
7685         "adc r24, r1 \n\t"
7686         "adc r22, r25 \n\t"
7687         "ld r0, z \n\t"
7688         "add r23, r0 \n\t"
7689         "adc r24, r25 \n\t"
7690         "adc r22, r25 \n\t"
7691         "st z+, r23 \n\t"
7692
7693         "ld r7, x+ \n\t"
7694         "ldi r23, 0 \n\t"
7695         "mul r8, r21 \n\t"
7696         "add r24, r0 \n\t"
7697         "adc r22, r1 \n\t"
7698         "adc r23, r25 \n\t"
7699         "mul r9, r20 \n\t"
7700         "add r24, r0 \n\t"
7701         "adc r22, r1 \n\t"
7702         "adc r23, r25 \n\t"
7703         "mul r10, r19 \n\t"
7704         "add r24, r0 \n\t"
7705         "adc r22, r1 \n\t"
7706         "adc r23, r25 \n\t"
7707         "mul r11, r18 \n\t"
7708         "add r24, r0 \n\t"
7709         "adc r22, r1 \n\t"
7710         "adc r23, r25 \n\t"
7711         "mul r2, r17 \n\t"
7712         "add r24, r0 \n\t"
7713         "adc r22, r1 \n\t"
7714         "adc r23, r25 \n\t"
7715         "mul r3, r16 \n\t"
7716         "add r24, r0 \n\t"
7717         "adc r22, r1 \n\t"
7718         "adc r23, r25 \n\t"
7719         "mul r4, r15 \n\t"
7720         "add r24, r0 \n\t"
7721         "adc r22, r1 \n\t"
7722         "adc r23, r25 \n\t"
7723         "mul r5, r14 \n\t"
7724         "add r24, r0 \n\t"
7725         "adc r22, r1 \n\t"
7726         "adc r23, r25 \n\t"
7727         "mul r6, r13 \n\t"
7728         "add r24, r0 \n\t"
7729         "adc r22, r1 \n\t"
7730         "adc r23, r25 \n\t"
7731         "mul r7, r12 \n\t"
7732         "add r24, r0 \n\t"
7733         "adc r22, r1 \n\t"
7734         "adc r23, r25 \n\t"
7735         "ld r0, z \n\t"
7736         "add r24, r0 \n\t"
7737         "adc r22, r25 \n\t"
7738         "adc r23, r25 \n\t"
7739         "st z+, r24 \n\t"
7740
7741         "ld r8, x+ \n\t"
7742         "ldi r24, 0 \n\t"
7743         "mul r9, r21 \n\t"
7744         "add r22, r0 \n\t"
7745         "adc r23, r1 \n\t"
7746         "adc r24, r25 \n\t"
7747         "mul r10, r20 \n\t"
7748         "add r22, r0 \n\t"
7749         "adc r23, r1 \n\t"
7750         "adc r24, r25 \n\t"
7751         "mul r11, r19 \n\t"
7752         "add r22, r0 \n\t"
7753         "adc r23, r1 \n\t"
7754         "adc r24, r25 \n\t"
7755         "mul r2, r18 \n\t"
7756         "add r22, r0 \n\t"
7757         "adc r23, r1 \n\t"
7758         "adc r24, r25 \n\t"
7759         "mul r3, r17 \n\t"
7760         "add r22, r0 \n\t"
7761         "adc r23, r1 \n\t"
7762         "adc r24, r25 \n\t"
7763         "mul r4, r16 \n\t"
7764         "add r22, r0 \n\t"
7765         "adc r23, r1 \n\t"
7766         "adc r24, r25 \n\t"
7767         "mul r5, r15 \n\t"
7768         "add r22, r0 \n\t"
7769         "adc r23, r1 \n\t"
7770         "adc r24, r25 \n\t"
7771         "mul r6, r14 \n\t"
7772         "add r22, r0 \n\t"
7773         "adc r23, r1 \n\t"
7774         "adc r24, r25 \n\t"
7775         "mul r7, r13 \n\t"
7776         "add r22, r0 \n\t"
7777         "adc r23, r1 \n\t"
7778         "adc r24, r25 \n\t"
7779         "mul r8, r12 \n\t"
7780         "add r22, r0 \n\t"
7781         "adc r23, r1 \n\t"
7782         "adc r24, r25 \n\t"
7783         "ld r0, z \n\t"
7784         "add r22, r0 \n\t"
7785         "adc r23, r25 \n\t"
7786         "adc r24, r25 \n\t"
7787         "st z+, r22 \n\t"
7788
7789         "ld r9, x+ \n\t"
7790         "ldi r22, 0 \n\t"
7791         "mul r10, r21 \n\t"
7792         "add r23, r0 \n\t"
7793         "adc r24, r1 \n\t"
7794         "adc r22, r25 \n\t"
7795         "mul r11, r20 \n\t"
7796         "add r23, r0 \n\t"
7797         "adc r24, r1 \n\t"
7798         "adc r22, r25 \n\t"
7799         "mul r2, r19 \n\t"
7800         "add r23, r0 \n\t"
7801         "adc r24, r1 \n\t"
7802         "adc r22, r25 \n\t"
7803         "mul r3, r18 \n\t"
7804         "add r23, r0 \n\t"
7805         "adc r24, r1 \n\t"
7806         "adc r22, r25 \n\t"
7807         "mul r4, r17 \n\t"
7808         "add r23, r0 \n\t"
7809         "adc r24, r1 \n\t"
7810         "adc r22, r25 \n\t"
7811         "mul r5, r16 \n\t"
7812         "add r23, r0 \n\t"
7813         "adc r24, r1 \n\t"
7814         "adc r22, r25 \n\t"
7815         "mul r6, r15 \n\t"
7816         "add r23, r0 \n\t"
7817         "adc r24, r1 \n\t"
7818         "adc r22, r25 \n\t"
7819         "mul r7, r14 \n\t"
7820         "add r23, r0 \n\t"
7821         "adc r24, r1 \n\t"
7822         "adc r22, r25 \n\t"
7823         "mul r8, r13 \n\t"
7824         "add r23, r0 \n\t"
7825         "adc r24, r1 \n\t"
7826         "adc r22, r25 \n\t"
7827         "mul r9, r12 \n\t"
7828         "add r23, r0 \n\t"
7829         "adc r24, r1 \n\t"
7830         "adc r22, r25 \n\t"
7831         "ld r0, z \n\t"
7832         "add r23, r0 \n\t"
7833         "adc r24, r25 \n\t"
7834         "adc r22, r25 \n\t"
7835         "st z+, r23 \n\t"
7836
7837         "ld r10, x+ \n\t"
7838         "ldi r23, 0 \n\t"
7839         "mul r11, r21 \n\t"
7840         "add r24, r0 \n\t"
7841         "adc r22, r1 \n\t"
7842         "adc r23, r25 \n\t"
7843         "mul r2, r20 \n\t"
7844         "add r24, r0 \n\t"
7845         "adc r22, r1 \n\t"
7846         "adc r23, r25 \n\t"
7847         "mul r3, r19 \n\t"
7848         "add r24, r0 \n\t"
7849         "adc r22, r1 \n\t"
7850         "adc r23, r25 \n\t"
7851         "mul r4, r18 \n\t"
7852         "add r24, r0 \n\t"
7853         "adc r22, r1 \n\t"
7854         "adc r23, r25 \n\t"
7855         "mul r5, r17 \n\t"
7856         "add r24, r0 \n\t"
7857         "adc r22, r1 \n\t"
7858         "adc r23, r25 \n\t"
7859         "mul r6, r16 \n\t"
7860         "add r24, r0 \n\t"
7861         "adc r22, r1 \n\t"
7862         "adc r23, r25 \n\t"
7863         "mul r7, r15 \n\t"
7864         "add r24, r0 \n\t"
7865         "adc r22, r1 \n\t"
7866         "adc r23, r25 \n\t"
7867         "mul r8, r14 \n\t"
7868         "add r24, r0 \n\t"
7869         "adc r22, r1 \n\t"
7870         "adc r23, r25 \n\t"
7871         "mul r9, r13 \n\t"
7872         "add r24, r0 \n\t"
7873         "adc r22, r1 \n\t"
7874         "adc r23, r25 \n\t"
7875         "mul r10, r12 \n\t"
7876         "add r24, r0 \n\t"
7877         "adc r22, r1 \n\t"
7878         "adc r23, r25 \n\t"
7879         "ld r0, z \n\t"
7880         "add r24, r0 \n\t"
7881         "adc r22, r25 \n\t"
7882         "adc r23, r25 \n\t"
7883         "st z+, r24 \n\t"
7884
7885         "ld r11, x+ \n\t"
7886         "ldi r24, 0 \n\t"
7887         "mul r2, r21 \n\t"
7888         "add r22, r0 \n\t"
7889         "adc r23, r1 \n\t"
7890         "adc r24, r25 \n\t"
7891         "mul r3, r20 \n\t"
7892         "add r22, r0 \n\t"
7893         "adc r23, r1 \n\t"
7894         "adc r24, r25 \n\t"
7895         "mul r4, r19 \n\t"
7896         "add r22, r0 \n\t"
7897         "adc r23, r1 \n\t"
7898         "adc r24, r25 \n\t"
7899         "mul r5, r18 \n\t"
7900         "add r22, r0 \n\t"
7901         "adc r23, r1 \n\t"
7902         "adc r24, r25 \n\t"
7903         "mul r6, r17 \n\t"
7904         "add r22, r0 \n\t"
7905         "adc r23, r1 \n\t"
7906         "adc r24, r25 \n\t"
7907         "mul r7, r16 \n\t"
7908         "add r22, r0 \n\t"
7909         "adc r23, r1 \n\t"
7910         "adc r24, r25 \n\t"
7911         "mul r8, r15 \n\t"
7912         "add r22, r0 \n\t"
7913         "adc r23, r1 \n\t"
7914         "adc r24, r25 \n\t"
7915         "mul r9, r14 \n\t"
7916         "add r22, r0 \n\t"
7917         "adc r23, r1 \n\t"
7918         "adc r24, r25 \n\t"
7919         "mul r10, r13 \n\t"
7920         "add r22, r0 \n\t"
7921         "adc r23, r1 \n\t"
7922         "adc r24, r25 \n\t"
7923         "mul r11, r12 \n\t"
7924         "add r22, r0 \n\t"
7925         "adc r23, r1 \n\t"
7926         "adc r24, r25 \n\t"
7927         "ld r0, z \n\t"
7928         "add r22, r0 \n\t"
7929         "adc r23, r25 \n\t"
7930         "adc r24, r25 \n\t"
7931         "st z+, r22 \n\t"
7932
7933         "ld r2, x+ \n\t"
7934         "ldi r22, 0 \n\t"
7935         "mul r3, r21 \n\t"
7936         "add r23, r0 \n\t"
7937         "adc r24, r1 \n\t"
7938         "adc r22, r25 \n\t"
7939         "mul r4, r20 \n\t"
7940         "add r23, r0 \n\t"
7941         "adc r24, r1 \n\t"
7942         "adc r22, r25 \n\t"
7943         "mul r5, r19 \n\t"
7944         "add r23, r0 \n\t"
7945         "adc r24, r1 \n\t"
7946         "adc r22, r25 \n\t"
7947         "mul r6, r18 \n\t"
7948         "add r23, r0 \n\t"
7949         "adc r24, r1 \n\t"
7950         "adc r22, r25 \n\t"
7951         "mul r7, r17 \n\t"
7952         "add r23, r0 \n\t"
7953         "adc r24, r1 \n\t"
7954         "adc r22, r25 \n\t"
7955         "mul r8, r16 \n\t"
7956         "add r23, r0 \n\t"
7957         "adc r24, r1 \n\t"
7958         "adc r22, r25 \n\t"
7959         "mul r9, r15 \n\t"
7960         "add r23, r0 \n\t"
7961         "adc r24, r1 \n\t"
7962         "adc r22, r25 \n\t"
7963         "mul r10, r14 \n\t"
7964         "add r23, r0 \n\t"
7965         "adc r24, r1 \n\t"
7966         "adc r22, r25 \n\t"
7967         "mul r11, r13 \n\t"
7968         "add r23, r0 \n\t"
7969         "adc r24, r1 \n\t"
7970         "adc r22, r25 \n\t"
7971         "mul r2, r12 \n\t"
7972         "add r23, r0 \n\t"
7973         "adc r24, r1 \n\t"
7974         "adc r22, r25 \n\t"
7975         "ld r0, z \n\t"
7976         "add r23, r0 \n\t"
7977         "adc r24, r25 \n\t"
7978         "adc r22, r25 \n\t"
7979         "st z+, r23 \n\t"
7980
7981         "ld r3, x+ \n\t"
7982         "ldi r23, 0 \n\t"
7983         "mul r4, r21 \n\t"
7984         "add r24, r0 \n\t"
7985         "adc r22, r1 \n\t"
7986         "adc r23, r25 \n\t"
7987         "mul r5, r20 \n\t"
7988         "add r24, r0 \n\t"
7989         "adc r22, r1 \n\t"
7990         "adc r23, r25 \n\t"
7991         "mul r6, r19 \n\t"
7992         "add r24, r0 \n\t"
7993         "adc r22, r1 \n\t"
7994         "adc r23, r25 \n\t"
7995         "mul r7, r18 \n\t"
7996         "add r24, r0 \n\t"
7997         "adc r22, r1 \n\t"
7998         "adc r23, r25 \n\t"
7999         "mul r8, r17 \n\t"
8000         "add r24, r0 \n\t"
8001         "adc r22, r1 \n\t"
8002         "adc r23, r25 \n\t"
8003         "mul r9, r16 \n\t"
8004         "add r24, r0 \n\t"
8005         "adc r22, r1 \n\t"
8006         "adc r23, r25 \n\t"
8007         "mul r10, r15 \n\t"
8008         "add r24, r0 \n\t"
8009         "adc r22, r1 \n\t"
8010         "adc r23, r25 \n\t"
8011         "mul r11, r14 \n\t"
8012         "add r24, r0 \n\t"
8013         "adc r22, r1 \n\t"
8014         "adc r23, r25 \n\t"
8015         "mul r2, r13 \n\t"
8016         "add r24, r0 \n\t"
8017         "adc r22, r1 \n\t"
8018         "adc r23, r25 \n\t"
8019         "mul r3, r12 \n\t"
8020         "add r24, r0 \n\t"
8021         "adc r22, r1 \n\t"
8022         "adc r23, r25 \n\t"
8023         "ld r0, z \n\t"
8024         "add r24, r0 \n\t"
8025         "adc r22, r25 \n\t"
8026         "adc r23, r25 \n\t"
8027         "st z+, r24 \n\t"
8028
8029         "ld r4, x+ \n\t"
8030         "ldi r24, 0 \n\t"
8031         "mul r5, r21 \n\t"
8032         "add r22, r0 \n\t"
8033         "adc r23, r1 \n\t"
8034         "adc r24, r25 \n\t"
8035         "mul r6, r20 \n\t"
8036         "add r22, r0 \n\t"
8037         "adc r23, r1 \n\t"
8038         "adc r24, r25 \n\t"
8039         "mul r7, r19 \n\t"
8040         "add r22, r0 \n\t"
8041         "adc r23, r1 \n\t"
8042         "adc r24, r25 \n\t"
8043         "mul r8, r18 \n\t"
8044         "add r22, r0 \n\t"
8045         "adc r23, r1 \n\t"
8046         "adc r24, r25 \n\t"
8047         "mul r9, r17 \n\t"
8048         "add r22, r0 \n\t"
8049         "adc r23, r1 \n\t"
8050         "adc r24, r25 \n\t"
8051         "mul r10, r16 \n\t"
8052         "add r22, r0 \n\t"
8053         "adc r23, r1 \n\t"
8054         "adc r24, r25 \n\t"
8055         "mul r11, r15 \n\t"
8056         "add r22, r0 \n\t"
8057         "adc r23, r1 \n\t"
8058         "adc r24, r25 \n\t"
8059         "mul r2, r14 \n\t"
8060         "add r22, r0 \n\t"
8061         "adc r23, r1 \n\t"
8062         "adc r24, r25 \n\t"
8063         "mul r3, r13 \n\t"
8064         "add r22, r0 \n\t"
8065         "adc r23, r1 \n\t"
8066         "adc r24, r25 \n\t"
8067         "mul r4, r12 \n\t"
8068         "add r22, r0 \n\t"
8069         "adc r23, r1 \n\t"
8070         "adc r24, r25 \n\t"
8071         "ld r0, z \n\t"
8072         "add r22, r0 \n\t"
8073         "adc r23, r25 \n\t"
8074         "adc r24, r25 \n\t"
8075         "st z+, r22 \n\t"
8076
8077         "ld r5, x+ \n\t"
8078         "ldi r22, 0 \n\t"
8079         "mul r6, r21 \n\t"
8080         "add r23, r0 \n\t"
8081         "adc r24, r1 \n\t"
8082         "adc r22, r25 \n\t"
8083         "mul r7, r20 \n\t"
8084         "add r23, r0 \n\t"
8085         "adc r24, r1 \n\t"
8086         "adc r22, r25 \n\t"
8087         "mul r8, r19 \n\t"
8088         "add r23, r0 \n\t"
8089         "adc r24, r1 \n\t"
8090         "adc r22, r25 \n\t"
8091         "mul r9, r18 \n\t"
8092         "add r23, r0 \n\t"
8093         "adc r24, r1 \n\t"
8094         "adc r22, r25 \n\t"
8095         "mul r10, r17 \n\t"
8096         "add r23, r0 \n\t"
8097         "adc r24, r1 \n\t"
8098         "adc r22, r25 \n\t"
8099         "mul r11, r16 \n\t"
8100         "add r23, r0 \n\t"
8101         "adc r24, r1 \n\t"
8102         "adc r22, r25 \n\t"
8103         "mul r2, r15 \n\t"
8104         "add r23, r0 \n\t"
8105         "adc r24, r1 \n\t"
8106         "adc r22, r25 \n\t"
8107         "mul r3, r14 \n\t"
8108         "add r23, r0 \n\t"
8109         "adc r24, r1 \n\t"
8110         "adc r22, r25 \n\t"
8111         "mul r4, r13 \n\t"
8112         "add r23, r0 \n\t"
8113         "adc r24, r1 \n\t"
8114         "adc r22, r25 \n\t"
8115         "mul r5, r12 \n\t"
8116         "add r23, r0 \n\t"
8117         "adc r24, r1 \n\t"
8118         "adc r22, r25 \n\t"
8119         "ld r0, z \n\t"
8120         "add r23, r0 \n\t"
8121         "adc r24, r25 \n\t"
8122         "adc r22, r25 \n\t"
8123         "st z+, r23 \n\t"
8124
8125         "ld r6, x+ \n\t"
8126         "ldi r23, 0 \n\t"
8127         "mul r7, r21 \n\t"
8128         "add r24, r0 \n\t"
8129         "adc r22, r1 \n\t"
8130         "adc r23, r25 \n\t"
8131         "mul r8, r20 \n\t"
8132         "add r24, r0 \n\t"
8133         "adc r22, r1 \n\t"
8134         "adc r23, r25 \n\t"
8135         "mul r9, r19 \n\t"
8136         "add r24, r0 \n\t"
8137         "adc r22, r1 \n\t"
8138         "adc r23, r25 \n\t"
8139         "mul r10, r18 \n\t"
8140         "add r24, r0 \n\t"
8141         "adc r22, r1 \n\t"
8142         "adc r23, r25 \n\t"
8143         "mul r11, r17 \n\t"
8144         "add r24, r0 \n\t"
8145         "adc r22, r1 \n\t"
8146         "adc r23, r25 \n\t"
8147         "mul r2, r16 \n\t"
8148         "add r24, r0 \n\t"
8149         "adc r22, r1 \n\t"
8150         "adc r23, r25 \n\t"
8151         "mul r3, r15 \n\t"
8152         "add r24, r0 \n\t"
8153         "adc r22, r1 \n\t"
8154         "adc r23, r25 \n\t"
8155         "mul r4, r14 \n\t"
8156         "add r24, r0 \n\t"
8157         "adc r22, r1 \n\t"
8158         "adc r23, r25 \n\t"
8159         "mul r5, r13 \n\t"
8160         "add r24, r0 \n\t"
8161         "adc r22, r1 \n\t"
8162         "adc r23, r25 \n\t"
8163         "mul r6, r12 \n\t"
8164         "add r24, r0 \n\t"
8165         "adc r22, r1 \n\t"
8166         "adc r23, r25 \n\t"
8167         "ld r0, z \n\t"
8168         "add r24, r0 \n\t"
8169         "adc r22, r25 \n\t"
8170         "adc r23, r25 \n\t"
8171         "st z+, r24 \n\t"
8172
8173         "ld r7, x+ \n\t"
8174         "ldi r24, 0 \n\t"
8175         "mul r8, r21 \n\t"
8176         "add r22, r0 \n\t"
8177         "adc r23, r1 \n\t"
8178         "adc r24, r25 \n\t"
8179         "mul r9, r20 \n\t"
8180         "add r22, r0 \n\t"
8181         "adc r23, r1 \n\t"
8182         "adc r24, r25 \n\t"
8183         "mul r10, r19 \n\t"
8184         "add r22, r0 \n\t"
8185         "adc r23, r1 \n\t"
8186         "adc r24, r25 \n\t"
8187         "mul r11, r18 \n\t"
8188         "add r22, r0 \n\t"
8189         "adc r23, r1 \n\t"
8190         "adc r24, r25 \n\t"
8191         "mul r2, r17 \n\t"
8192         "add r22, r0 \n\t"
8193         "adc r23, r1 \n\t"
8194         "adc r24, r25 \n\t"
8195         "mul r3, r16 \n\t"
8196         "add r22, r0 \n\t"
8197         "adc r23, r1 \n\t"
8198         "adc r24, r25 \n\t"
8199         "mul r4, r15 \n\t"
8200         "add r22, r0 \n\t"
8201         "adc r23, r1 \n\t"
8202         "adc r24, r25 \n\t"
8203         "mul r5, r14 \n\t"
8204         "add r22, r0 \n\t"
8205         "adc r23, r1 \n\t"
8206         "adc r24, r25 \n\t"
8207         "mul r6, r13 \n\t"
8208         "add r22, r0 \n\t"
8209         "adc r23, r1 \n\t"
8210         "adc r24, r25 \n\t"
8211         "mul r7, r12 \n\t"
8212         "add r22, r0 \n\t"
8213         "adc r23, r1 \n\t"
8214         "adc r24, r25 \n\t"
8215         "ld r0, z \n\t"
8216         "add r22, r0 \n\t"
8217         "adc r23, r25 \n\t"
8218         "adc r24, r25 \n\t"
8219         "st z+, r22 \n\t"
8220
8221         "ld r8, x+ \n\t"
8222         "ldi r22, 0 \n\t"
8223         "mul r9, r21 \n\t"
8224         "add r23, r0 \n\t"
8225         "adc r24, r1 \n\t"
8226         "adc r22, r25 \n\t"
8227         "mul r10, r20 \n\t"
8228         "add r23, r0 \n\t"
8229         "adc r24, r1 \n\t"
8230         "adc r22, r25 \n\t"
8231         "mul r11, r19 \n\t"
8232         "add r23, r0 \n\t"
8233         "adc r24, r1 \n\t"
8234         "adc r22, r25 \n\t"
8235         "mul r2, r18 \n\t"
8236         "add r23, r0 \n\t"
8237         "adc r24, r1 \n\t"
8238         "adc r22, r25 \n\t"
8239         "mul r3, r17 \n\t"
8240         "add r23, r0 \n\t"
8241         "adc r24, r1 \n\t"
8242         "adc r22, r25 \n\t"
8243         "mul r4, r16 \n\t"
8244         "add r23, r0 \n\t"
8245         "adc r24, r1 \n\t"
8246         "adc r22, r25 \n\t"
8247         "mul r5, r15 \n\t"
8248         "add r23, r0 \n\t"
8249         "adc r24, r1 \n\t"
8250         "adc r22, r25 \n\t"
8251         "mul r6, r14 \n\t"
8252         "add r23, r0 \n\t"
8253         "adc r24, r1 \n\t"
8254         "adc r22, r25 \n\t"
8255         "mul r7, r13 \n\t"
8256         "add r23, r0 \n\t"
8257         "adc r24, r1 \n\t"
8258         "adc r22, r25 \n\t"
8259         "mul r8, r12 \n\t"
8260         "add r23, r0 \n\t"
8261         "adc r24, r1 \n\t"
8262         "adc r22, r25 \n\t"
8263         "ld r0, z \n\t"
8264         "add r23, r0 \n\t"
8265         "adc r24, r25 \n\t"
8266         "adc r22, r25 \n\t"
8267         "st z+, r23 \n\t"
8268
8269         "ld r9, x+ \n\t"
8270         "ldi r23, 0 \n\t"
8271         "mul r10, r21 \n\t"
8272         "add r24, r0 \n\t"
8273         "adc r22, r1 \n\t"
8274         "adc r23, r25 \n\t"
8275         "mul r11, r20 \n\t"
8276         "add r24, r0 \n\t"
8277         "adc r22, r1 \n\t"
8278         "adc r23, r25 \n\t"
8279         "mul r2, r19 \n\t"
8280         "add r24, r0 \n\t"
8281         "adc r22, r1 \n\t"
8282         "adc r23, r25 \n\t"
8283         "mul r3, r18 \n\t"
8284         "add r24, r0 \n\t"
8285         "adc r22, r1 \n\t"
8286         "adc r23, r25 \n\t"
8287         "mul r4, r17 \n\t"
8288         "add r24, r0 \n\t"
8289         "adc r22, r1 \n\t"
8290         "adc r23, r25 \n\t"
8291         "mul r5, r16 \n\t"
8292         "add r24, r0 \n\t"
8293         "adc r22, r1 \n\t"
8294         "adc r23, r25 \n\t"
8295         "mul r6, r15 \n\t"
8296         "add r24, r0 \n\t"
8297         "adc r22, r1 \n\t"
8298         "adc r23, r25 \n\t"
8299         "mul r7, r14 \n\t"
8300         "add r24, r0 \n\t"
8301         "adc r22, r1 \n\t"
8302         "adc r23, r25 \n\t"
8303         "mul r8, r13 \n\t"
8304         "add r24, r0 \n\t"
8305         "adc r22, r1 \n\t"
8306         "adc r23, r25 \n\t"
8307         "mul r9, r12 \n\t"
8308         "add r24, r0 \n\t"
8309         "adc r22, r1 \n\t"
8310         "adc r23, r25 \n\t"
8311         "ld r0, z \n\t"
8312         "add r24, r0 \n\t"
8313         "adc r22, r25 \n\t"
8314         "adc r23, r25 \n\t"
8315         "st z+, r24 \n\t"
8316
8317         "ld r10, x+ \n\t"
8318         "ldi r24, 0 \n\t"
8319         "mul r11, r21 \n\t"
8320         "add r22, r0 \n\t"
8321         "adc r23, r1 \n\t"
8322         "adc r24, r25 \n\t"
8323         "mul r2, r20 \n\t"
8324         "add r22, r0 \n\t"
8325         "adc r23, r1 \n\t"
8326         "adc r24, r25 \n\t"
8327         "mul r3, r19 \n\t"
8328         "add r22, r0 \n\t"
8329         "adc r23, r1 \n\t"
8330         "adc r24, r25 \n\t"
8331         "mul r4, r18 \n\t"
8332         "add r22, r0 \n\t"
8333         "adc r23, r1 \n\t"
8334         "adc r24, r25 \n\t"
8335         "mul r5, r17 \n\t"
8336         "add r22, r0 \n\t"
8337         "adc r23, r1 \n\t"
8338         "adc r24, r25 \n\t"
8339         "mul r6, r16 \n\t"
8340         "add r22, r0 \n\t"
8341         "adc r23, r1 \n\t"
8342         "adc r24, r25 \n\t"
8343         "mul r7, r15 \n\t"
8344         "add r22, r0 \n\t"
8345         "adc r23, r1 \n\t"
8346         "adc r24, r25 \n\t"
8347         "mul r8, r14 \n\t"
8348         "add r22, r0 \n\t"
8349         "adc r23, r1 \n\t"
8350         "adc r24, r25 \n\t"
8351         "mul r9, r13 \n\t"
8352         "add r22, r0 \n\t"
8353         "adc r23, r1 \n\t"
8354         "adc r24, r25 \n\t"
8355         "mul r10, r12 \n\t"
8356         "add r22, r0 \n\t"
8357         "adc r23, r1 \n\t"
8358         "adc r24, r25 \n\t"
8359         "ld r0, z \n\t"
8360         "add r22, r0 \n\t"
8361         "adc r23, r25 \n\t"
8362         "adc r24, r25 \n\t"
8363         "st z+, r22 \n\t"
8364
8365         "ld r11, x+ \n\t"
8366         "ldi r22, 0 \n\t"
8367         "mul r2, r21 \n\t"
8368         "add r23, r0 \n\t"
8369         "adc r24, r1 \n\t"
8370         "adc r22, r25 \n\t"
8371         "mul r3, r20 \n\t"
8372         "add r23, r0 \n\t"
8373         "adc r24, r1 \n\t"
8374         "adc r22, r25 \n\t"
8375         "mul r4, r19 \n\t"
8376         "add r23, r0 \n\t"
8377         "adc r24, r1 \n\t"
8378         "adc r22, r25 \n\t"
8379         "mul r5, r18 \n\t"
8380         "add r23, r0 \n\t"
8381         "adc r24, r1 \n\t"
8382         "adc r22, r25 \n\t"
8383         "mul r6, r17 \n\t"
8384         "add r23, r0 \n\t"
8385         "adc r24, r1 \n\t"
8386         "adc r22, r25 \n\t"
8387         "mul r7, r16 \n\t"
8388         "add r23, r0 \n\t"
8389         "adc r24, r1 \n\t"
8390         "adc r22, r25 \n\t"
8391         "mul r8, r15 \n\t"
8392         "add r23, r0 \n\t"
8393         "adc r24, r1 \n\t"
8394         "adc r22, r25 \n\t"
8395         "mul r9, r14 \n\t"
8396         "add r23, r0 \n\t"
8397         "adc r24, r1 \n\t"
8398         "adc r22, r25 \n\t"
8399         "mul r10, r13 \n\t"
8400         "add r23, r0 \n\t"
8401         "adc r24, r1 \n\t"
8402         "adc r22, r25 \n\t"
8403         "mul r11, r12 \n\t"
8404         "add r23, r0 \n\t"
8405         "adc r24, r1 \n\t"
8406         "adc r22, r25 \n\t"
8407         "ld r0, z \n\t"
8408         "add r23, r0 \n\t"
8409         "adc r24, r25 \n\t"
8410         "adc r22, r25 \n\t"
8411         "st z+, r23 \n\t"
8412
8413         "ld r2, x+ \n\t"
8414         "ldi r23, 0 \n\t"
8415         "mul r3, r21 \n\t"
8416         "add r24, r0 \n\t"
8417         "adc r22, r1 \n\t"
8418         "adc r23, r25 \n\t"
8419         "mul r4, r20 \n\t"
8420         "add r24, r0 \n\t"
8421         "adc r22, r1 \n\t"
8422         "adc r23, r25 \n\t"
8423         "mul r5, r19 \n\t"
8424         "add r24, r0 \n\t"
8425         "adc r22, r1 \n\t"
8426         "adc r23, r25 \n\t"
8427         "mul r6, r18 \n\t"
8428         "add r24, r0 \n\t"
8429         "adc r22, r1 \n\t"
8430         "adc r23, r25 \n\t"
8431         "mul r7, r17 \n\t"
8432         "add r24, r0 \n\t"
8433         "adc r22, r1 \n\t"
8434         "adc r23, r25 \n\t"
8435         "mul r8, r16 \n\t"
8436         "add r24, r0 \n\t"
8437         "adc r22, r1 \n\t"
8438         "adc r23, r25 \n\t"
8439         "mul r9, r15 \n\t"
8440         "add r24, r0 \n\t"
8441         "adc r22, r1 \n\t"
8442         "adc r23, r25 \n\t"
8443         "mul r10, r14 \n\t"
8444         "add r24, r0 \n\t"
8445         "adc r22, r1 \n\t"
8446         "adc r23, r25 \n\t"
8447         "mul r11, r13 \n\t"
8448         "add r24, r0 \n\t"
8449         "adc r22, r1 \n\t"
8450         "adc r23, r25 \n\t"
8451         "mul r2, r12 \n\t"
8452         "add r24, r0 \n\t"
8453         "adc r22, r1 \n\t"
8454         "adc r23, r25 \n\t"
8455         "ld r0, z \n\t"
8456         "add r24, r0 \n\t"
8457         "adc r22, r25 \n\t"
8458         "adc r23, r25 \n\t"
8459         "st z+, r24 \n\t"
8460
8461         "ld r3, x+ \n\t"
8462         "ldi r24, 0 \n\t"
8463         "mul r4, r21 \n\t"
8464         "add r22, r0 \n\t"
8465         "adc r23, r1 \n\t"
8466         "adc r24, r25 \n\t"
8467         "mul r5, r20 \n\t"
8468         "add r22, r0 \n\t"
8469         "adc r23, r1 \n\t"
8470         "adc r24, r25 \n\t"
8471         "mul r6, r19 \n\t"
8472         "add r22, r0 \n\t"
8473         "adc r23, r1 \n\t"
8474         "adc r24, r25 \n\t"
8475         "mul r7, r18 \n\t"
8476         "add r22, r0 \n\t"
8477         "adc r23, r1 \n\t"
8478         "adc r24, r25 \n\t"
8479         "mul r8, r17 \n\t"
8480         "add r22, r0 \n\t"
8481         "adc r23, r1 \n\t"
8482         "adc r24, r25 \n\t"
8483         "mul r9, r16 \n\t"
8484         "add r22, r0 \n\t"
8485         "adc r23, r1 \n\t"
8486         "adc r24, r25 \n\t"
8487         "mul r10, r15 \n\t"
8488         "add r22, r0 \n\t"
8489         "adc r23, r1 \n\t"
8490         "adc r24, r25 \n\t"
8491         "mul r11, r14 \n\t"
8492         "add r22, r0 \n\t"
8493         "adc r23, r1 \n\t"
8494         "adc r24, r25 \n\t"
8495         "mul r2, r13 \n\t"
8496         "add r22, r0 \n\t"
8497         "adc r23, r1 \n\t"
8498         "adc r24, r25 \n\t"
8499         "mul r3, r12 \n\t"
8500         "add r22, r0 \n\t"
8501         "adc r23, r1 \n\t"
8502         "adc r24, r25 \n\t"
8503         "ld r0, z \n\t"
8504         "add r22, r0 \n\t"
8505         "adc r23, r25 \n\t"
8506         "adc r24, r25 \n\t"
8507         "st z+, r22 \n\t"
8508
8509         "ld r12, y+ \n\t"
8510         "ldi r22, 0 \n\t"
8511         "mul r4, r12 \n\t"
8512         "add r23, r0 \n\t"
8513         "adc r24, r1 \n\t"
8514         "adc r22, r25 \n\t"
8515         "mul r5, r21 \n\t"
8516         "add r23, r0 \n\t"
8517         "adc r24, r1 \n\t"
8518         "adc r22, r25 \n\t"
8519         "mul r6, r20 \n\t"
8520         "add r23, r0 \n\t"
8521         "adc r24, r1 \n\t"
8522         "adc r22, r25 \n\t"
8523         "mul r7, r19 \n\t"
8524         "add r23, r0 \n\t"
8525         "adc r24, r1 \n\t"
8526         "adc r22, r25 \n\t"
8527         "mul r8, r18 \n\t"
8528         "add r23, r0 \n\t"
8529         "adc r24, r1 \n\t"
8530         "adc r22, r25 \n\t"
8531         "mul r9, r17 \n\t"
8532         "add r23, r0 \n\t"
8533         "adc r24, r1 \n\t"
8534         "adc r22, r25 \n\t"
8535         "mul r10, r16 \n\t"
8536         "add r23, r0 \n\t"
8537         "adc r24, r1 \n\t"
8538         "adc r22, r25 \n\t"
8539         "mul r11, r15 \n\t"
8540         "add r23, r0 \n\t"
8541         "adc r24, r1 \n\t"
8542         "adc r22, r25 \n\t"
8543         "mul r2, r14 \n\t"
8544         "add r23, r0 \n\t"
8545         "adc r24, r1 \n\t"
8546         "adc r22, r25 \n\t"
8547         "mul r3, r13 \n\t"
8548         "add r23, r0 \n\t"
8549         "adc r24, r1 \n\t"
8550         "adc r22, r25 \n\t"
8551         "ld r0, z \n\t"
8552         "add r23, r0 \n\t"
8553         "adc r24, r25 \n\t"
8554         "adc r22, r25 \n\t"
8555         "st z+, r23 \n\t"
8556
8557         "ld r13, y+ \n\t"
8558         "ldi r23, 0 \n\t"
8559         "mul r4, r13 \n\t"
8560         "add r24, r0 \n\t"
8561         "adc r22, r1 \n\t"
8562         "adc r23, r25 \n\t"
8563         "mul r5, r12 \n\t"
8564         "add r24, r0 \n\t"
8565         "adc r22, r1 \n\t"
8566         "adc r23, r25 \n\t"
8567         "mul r6, r21 \n\t"
8568         "add r24, r0 \n\t"
8569         "adc r22, r1 \n\t"
8570         "adc r23, r25 \n\t"
8571         "mul r7, r20 \n\t"
8572         "add r24, r0 \n\t"
8573         "adc r22, r1 \n\t"
8574         "adc r23, r25 \n\t"
8575         "mul r8, r19 \n\t"
8576         "add r24, r0 \n\t"
8577         "adc r22, r1 \n\t"
8578         "adc r23, r25 \n\t"
8579         "mul r9, r18 \n\t"
8580         "add r24, r0 \n\t"
8581         "adc r22, r1 \n\t"
8582         "adc r23, r25 \n\t"
8583         "mul r10, r17 \n\t"
8584         "add r24, r0 \n\t"
8585         "adc r22, r1 \n\t"
8586         "adc r23, r25 \n\t"
8587         "mul r11, r16 \n\t"
8588         "add r24, r0 \n\t"
8589         "adc r22, r1 \n\t"
8590         "adc r23, r25 \n\t"
8591         "mul r2, r15 \n\t"
8592         "add r24, r0 \n\t"
8593         "adc r22, r1 \n\t"
8594         "adc r23, r25 \n\t"
8595         "mul r3, r14 \n\t"
8596         "add r24, r0 \n\t"
8597         "adc r22, r1 \n\t"
8598         "adc r23, r25 \n\t"
8599         "ld r0, z \n\t"
8600         "add r24, r0 \n\t"
8601         "adc r22, r25 \n\t"
8602         "adc r23, r25 \n\t"
8603         "st z+, r24 \n\t"
8604
8605         "ld r14, y+ \n\t"
8606         "ldi r24, 0 \n\t"
8607         "mul r4, r14 \n\t"
8608         "add r22, r0 \n\t"
8609         "adc r23, r1 \n\t"
8610         "adc r24, r25 \n\t"
8611         "mul r5, r13 \n\t"
8612         "add r22, r0 \n\t"
8613         "adc r23, r1 \n\t"
8614         "adc r24, r25 \n\t"
8615         "mul r6, r12 \n\t"
8616         "add r22, r0 \n\t"
8617         "adc r23, r1 \n\t"
8618         "adc r24, r25 \n\t"
8619         "mul r7, r21 \n\t"
8620         "add r22, r0 \n\t"
8621         "adc r23, r1 \n\t"
8622         "adc r24, r25 \n\t"
8623         "mul r8, r20 \n\t"
8624         "add r22, r0 \n\t"
8625         "adc r23, r1 \n\t"
8626         "adc r24, r25 \n\t"
8627         "mul r9, r19 \n\t"
8628         "add r22, r0 \n\t"
8629         "adc r23, r1 \n\t"
8630         "adc r24, r25 \n\t"
8631         "mul r10, r18 \n\t"
8632         "add r22, r0 \n\t"
8633         "adc r23, r1 \n\t"
8634         "adc r24, r25 \n\t"
8635         "mul r11, r17 \n\t"
8636         "add r22, r0 \n\t"
8637         "adc r23, r1 \n\t"
8638         "adc r24, r25 \n\t"
8639         "mul r2, r16 \n\t"
8640         "add r22, r0 \n\t"
8641         "adc r23, r1 \n\t"
8642         "adc r24, r25 \n\t"
8643         "mul r3, r15 \n\t"
8644         "add r22, r0 \n\t"
8645         "adc r23, r1 \n\t"
8646         "adc r24, r25 \n\t"
8647         "ld r0, z \n\t"
8648         "add r22, r0 \n\t"
8649         "adc r23, r25 \n\t"
8650         "adc r24, r25 \n\t"
8651         "st z+, r22 \n\t"
8652
8653         "ld r15, y+ \n\t"
8654         "ldi r22, 0 \n\t"
8655         "mul r4, r15 \n\t"
8656         "add r23, r0 \n\t"
8657         "adc r24, r1 \n\t"
8658         "adc r22, r25 \n\t"
8659         "mul r5, r14 \n\t"
8660         "add r23, r0 \n\t"
8661         "adc r24, r1 \n\t"
8662         "adc r22, r25 \n\t"
8663         "mul r6, r13 \n\t"
8664         "add r23, r0 \n\t"
8665         "adc r24, r1 \n\t"
8666         "adc r22, r25 \n\t"
8667         "mul r7, r12 \n\t"
8668         "add r23, r0 \n\t"
8669         "adc r24, r1 \n\t"
8670         "adc r22, r25 \n\t"
8671         "mul r8, r21 \n\t"
8672         "add r23, r0 \n\t"
8673         "adc r24, r1 \n\t"
8674         "adc r22, r25 \n\t"
8675         "mul r9, r20 \n\t"
8676         "add r23, r0 \n\t"
8677         "adc r24, r1 \n\t"
8678         "adc r22, r25 \n\t"
8679         "mul r10, r19 \n\t"
8680         "add r23, r0 \n\t"
8681         "adc r24, r1 \n\t"
8682         "adc r22, r25 \n\t"
8683         "mul r11, r18 \n\t"
8684         "add r23, r0 \n\t"
8685         "adc r24, r1 \n\t"
8686         "adc r22, r25 \n\t"
8687         "mul r2, r17 \n\t"
8688         "add r23, r0 \n\t"
8689         "adc r24, r1 \n\t"
8690         "adc r22, r25 \n\t"
8691         "mul r3, r16 \n\t"
8692         "add r23, r0 \n\t"
8693         "adc r24, r1 \n\t"
8694         "adc r22, r25 \n\t"
8695         "ld r0, z \n\t"
8696         "add r23, r0 \n\t"
8697         "adc r24, r25 \n\t"
8698         "adc r22, r25 \n\t"
8699         "st z+, r23 \n\t"
8700
8701         "ld r16, y+ \n\t"
8702         "ldi r23, 0 \n\t"
8703         "mul r4, r16 \n\t"
8704         "add r24, r0 \n\t"
8705         "adc r22, r1 \n\t"
8706         "adc r23, r25 \n\t"
8707         "mul r5, r15 \n\t"
8708         "add r24, r0 \n\t"
8709         "adc r22, r1 \n\t"
8710         "adc r23, r25 \n\t"
8711         "mul r6, r14 \n\t"
8712         "add r24, r0 \n\t"
8713         "adc r22, r1 \n\t"
8714         "adc r23, r25 \n\t"
8715         "mul r7, r13 \n\t"
8716         "add r24, r0 \n\t"
8717         "adc r22, r1 \n\t"
8718         "adc r23, r25 \n\t"
8719         "mul r8, r12 \n\t"
8720         "add r24, r0 \n\t"
8721         "adc r22, r1 \n\t"
8722         "adc r23, r25 \n\t"
8723         "mul r9, r21 \n\t"
8724         "add r24, r0 \n\t"
8725         "adc r22, r1 \n\t"
8726         "adc r23, r25 \n\t"
8727         "mul r10, r20 \n\t"
8728         "add r24, r0 \n\t"
8729         "adc r22, r1 \n\t"
8730         "adc r23, r25 \n\t"
8731         "mul r11, r19 \n\t"
8732         "add r24, r0 \n\t"
8733         "adc r22, r1 \n\t"
8734         "adc r23, r25 \n\t"
8735         "mul r2, r18 \n\t"
8736         "add r24, r0 \n\t"
8737         "adc r22, r1 \n\t"
8738         "adc r23, r25 \n\t"
8739         "mul r3, r17 \n\t"
8740         "add r24, r0 \n\t"
8741         "adc r22, r1 \n\t"
8742         "adc r23, r25 \n\t"
8743         "ld r0, z \n\t"
8744         "add r24, r0 \n\t"
8745         "adc r22, r25 \n\t"
8746         "adc r23, r25 \n\t"
8747         "st z+, r24 \n\t"
8748
8749         "ld r17, y+ \n\t"
8750         "ldi r24, 0 \n\t"
8751         "mul r4, r17 \n\t"
8752         "add r22, r0 \n\t"
8753         "adc r23, r1 \n\t"
8754         "adc r24, r25 \n\t"
8755         "mul r5, r16 \n\t"
8756         "add r22, r0 \n\t"
8757         "adc r23, r1 \n\t"
8758         "adc r24, r25 \n\t"
8759         "mul r6, r15 \n\t"
8760         "add r22, r0 \n\t"
8761         "adc r23, r1 \n\t"
8762         "adc r24, r25 \n\t"
8763         "mul r7, r14 \n\t"
8764         "add r22, r0 \n\t"
8765         "adc r23, r1 \n\t"
8766         "adc r24, r25 \n\t"
8767         "mul r8, r13 \n\t"
8768         "add r22, r0 \n\t"
8769         "adc r23, r1 \n\t"
8770         "adc r24, r25 \n\t"
8771         "mul r9, r12 \n\t"
8772         "add r22, r0 \n\t"
8773         "adc r23, r1 \n\t"
8774         "adc r24, r25 \n\t"
8775         "mul r10, r21 \n\t"
8776         "add r22, r0 \n\t"
8777         "adc r23, r1 \n\t"
8778         "adc r24, r25 \n\t"
8779         "mul r11, r20 \n\t"
8780         "add r22, r0 \n\t"
8781         "adc r23, r1 \n\t"
8782         "adc r24, r25 \n\t"
8783         "mul r2, r19 \n\t"
8784         "add r22, r0 \n\t"
8785         "adc r23, r1 \n\t"
8786         "adc r24, r25 \n\t"
8787         "mul r3, r18 \n\t"
8788         "add r22, r0 \n\t"
8789         "adc r23, r1 \n\t"
8790         "adc r24, r25 \n\t"
8791         "ld r0, z \n\t"
8792         "add r22, r0 \n\t"
8793         "adc r23, r25 \n\t"
8794         "adc r24, r25 \n\t"
8795         "st z+, r22 \n\t"
8796
8797         "ld r18, y+ \n\t"
8798         "ldi r22, 0 \n\t"
8799         "mul r4, r18 \n\t"
8800         "add r23, r0 \n\t"
8801         "adc r24, r1 \n\t"
8802         "adc r22, r25 \n\t"
8803         "mul r5, r17 \n\t"
8804         "add r23, r0 \n\t"
8805         "adc r24, r1 \n\t"
8806         "adc r22, r25 \n\t"
8807         "mul r6, r16 \n\t"
8808         "add r23, r0 \n\t"
8809         "adc r24, r1 \n\t"
8810         "adc r22, r25 \n\t"
8811         "mul r7, r15 \n\t"
8812         "add r23, r0 \n\t"
8813         "adc r24, r1 \n\t"
8814         "adc r22, r25 \n\t"
8815         "mul r8, r14 \n\t"
8816         "add r23, r0 \n\t"
8817         "adc r24, r1 \n\t"
8818         "adc r22, r25 \n\t"
8819         "mul r9, r13 \n\t"
8820         "add r23, r0 \n\t"
8821         "adc r24, r1 \n\t"
8822         "adc r22, r25 \n\t"
8823         "mul r10, r12 \n\t"
8824         "add r23, r0 \n\t"
8825         "adc r24, r1 \n\t"
8826         "adc r22, r25 \n\t"
8827         "mul r11, r21 \n\t"
8828         "add r23, r0 \n\t"
8829         "adc r24, r1 \n\t"
8830         "adc r22, r25 \n\t"
8831         "mul r2, r20 \n\t"
8832         "add r23, r0 \n\t"
8833         "adc r24, r1 \n\t"
8834         "adc r22, r25 \n\t"
8835         "mul r3, r19 \n\t"
8836         "add r23, r0 \n\t"
8837         "adc r24, r1 \n\t"
8838         "adc r22, r25 \n\t"
8839         "ld r0, z \n\t"
8840         "add r23, r0 \n\t"
8841         "adc r24, r25 \n\t"
8842         "adc r22, r25 \n\t"
8843         "st z+, r23 \n\t"
8844
8845         "ld r19, y+ \n\t"
8846         "ldi r23, 0 \n\t"
8847         "mul r4, r19 \n\t"
8848         "add r24, r0 \n\t"
8849         "adc r22, r1 \n\t"
8850         "adc r23, r25 \n\t"
8851         "mul r5, r18 \n\t"
8852         "add r24, r0 \n\t"
8853         "adc r22, r1 \n\t"
8854         "adc r23, r25 \n\t"
8855         "mul r6, r17 \n\t"
8856         "add r24, r0 \n\t"
8857         "adc r22, r1 \n\t"
8858         "adc r23, r25 \n\t"
8859         "mul r7, r16 \n\t"
8860         "add r24, r0 \n\t"
8861         "adc r22, r1 \n\t"
8862         "adc r23, r25 \n\t"
8863         "mul r8, r15 \n\t"
8864         "add r24, r0 \n\t"
8865         "adc r22, r1 \n\t"
8866         "adc r23, r25 \n\t"
8867         "mul r9, r14 \n\t"
8868         "add r24, r0 \n\t"
8869         "adc r22, r1 \n\t"
8870         "adc r23, r25 \n\t"
8871         "mul r10, r13 \n\t"
8872         "add r24, r0 \n\t"
8873         "adc r22, r1 \n\t"
8874         "adc r23, r25 \n\t"
8875         "mul r11, r12 \n\t"
8876         "add r24, r0 \n\t"
8877         "adc r22, r1 \n\t"
8878         "adc r23, r25 \n\t"
8879         "mul r2, r21 \n\t"
8880         "add r24, r0 \n\t"
8881         "adc r22, r1 \n\t"
8882         "adc r23, r25 \n\t"
8883         "mul r3, r20 \n\t"
8884         "add r24, r0 \n\t"
8885         "adc r22, r1 \n\t"
8886         "adc r23, r25 \n\t"
8887         "ld r0, z \n\t"
8888         "add r24, r0 \n\t"
8889         "adc r22, r25 \n\t"
8890         "adc r23, r25 \n\t"
8891         "st z+, r24 \n\t"
8892
8893         "ld r20, y+ \n\t"
8894         "ldi r24, 0 \n\t"
8895         "mul r4, r20 \n\t"
8896         "add r22, r0 \n\t"
8897         "adc r23, r1 \n\t"
8898         "adc r24, r25 \n\t"
8899         "mul r5, r19 \n\t"
8900         "add r22, r0 \n\t"
8901         "adc r23, r1 \n\t"
8902         "adc r24, r25 \n\t"
8903         "mul r6, r18 \n\t"
8904         "add r22, r0 \n\t"
8905         "adc r23, r1 \n\t"
8906         "adc r24, r25 \n\t"
8907         "mul r7, r17 \n\t"
8908         "add r22, r0 \n\t"
8909         "adc r23, r1 \n\t"
8910         "adc r24, r25 \n\t"
8911         "mul r8, r16 \n\t"
8912         "add r22, r0 \n\t"
8913         "adc r23, r1 \n\t"
8914         "adc r24, r25 \n\t"
8915         "mul r9, r15 \n\t"
8916         "add r22, r0 \n\t"
8917         "adc r23, r1 \n\t"
8918         "adc r24, r25 \n\t"
8919         "mul r10, r14 \n\t"
8920         "add r22, r0 \n\t"
8921         "adc r23, r1 \n\t"
8922         "adc r24, r25 \n\t"
8923         "mul r11, r13 \n\t"
8924         "add r22, r0 \n\t"
8925         "adc r23, r1 \n\t"
8926         "adc r24, r25 \n\t"
8927         "mul r2, r12 \n\t"
8928         "add r22, r0 \n\t"
8929         "adc r23, r1 \n\t"
8930         "adc r24, r25 \n\t"
8931         "mul r3, r21 \n\t"
8932         "add r22, r0 \n\t"
8933         "adc r23, r1 \n\t"
8934         "adc r24, r25 \n\t"
8935         "ld r0, z \n\t"
8936         "add r22, r0 \n\t"
8937         "adc r23, r25 \n\t"
8938         "adc r24, r25 \n\t"
8939         "st z+, r22 \n\t"
8940
8941         "ld r21, y+ \n\t"
8942         "ldi r22, 0 \n\t"
8943         "mul r4, r21 \n\t"
8944         "add r23, r0 \n\t"
8945         "adc r24, r1 \n\t"
8946         "adc r22, r25 \n\t"
8947         "mul r5, r20 \n\t"
8948         "add r23, r0 \n\t"
8949         "adc r24, r1 \n\t"
8950         "adc r22, r25 \n\t"
8951         "mul r6, r19 \n\t"
8952         "add r23, r0 \n\t"
8953         "adc r24, r1 \n\t"
8954         "adc r22, r25 \n\t"
8955         "mul r7, r18 \n\t"
8956         "add r23, r0 \n\t"
8957         "adc r24, r1 \n\t"
8958         "adc r22, r25 \n\t"
8959         "mul r8, r17 \n\t"
8960         "add r23, r0 \n\t"
8961         "adc r24, r1 \n\t"
8962         "adc r22, r25 \n\t"
8963         "mul r9, r16 \n\t"
8964         "add r23, r0 \n\t"
8965         "adc r24, r1 \n\t"
8966         "adc r22, r25 \n\t"
8967         "mul r10, r15 \n\t"
8968         "add r23, r0 \n\t"
8969         "adc r24, r1 \n\t"
8970         "adc r22, r25 \n\t"
8971         "mul r11, r14 \n\t"
8972         "add r23, r0 \n\t"
8973         "adc r24, r1 \n\t"
8974         "adc r22, r25 \n\t"
8975         "mul r2, r13 \n\t"
8976         "add r23, r0 \n\t"
8977         "adc r24, r1 \n\t"
8978         "adc r22, r25 \n\t"
8979         "mul r3, r12 \n\t"
8980         "add r23, r0 \n\t"
8981         "adc r24, r1 \n\t"
8982         "adc r22, r25 \n\t"
8983         "ld r0, z \n\t"
8984         "add r23, r0 \n\t"
8985         "adc r24, r25 \n\t"
8986         "adc r22, r25 \n\t"
8987         "st z+, r23 \n\t"
8988
8989         "ld r12, y+ \n\t"
8990         "ldi r23, 0 \n\t"
8991         "mul r4, r12 \n\t"
8992         "add r24, r0 \n\t"
8993         "adc r22, r1 \n\t"
8994         "adc r23, r25 \n\t"
8995         "mul r5, r21 \n\t"
8996         "add r24, r0 \n\t"
8997         "adc r22, r1 \n\t"
8998         "adc r23, r25 \n\t"
8999         "mul r6, r20 \n\t"
9000         "add r24, r0 \n\t"
9001         "adc r22, r1 \n\t"
9002         "adc r23, r25 \n\t"
9003         "mul r7, r19 \n\t"
9004         "add r24, r0 \n\t"
9005         "adc r22, r1 \n\t"
9006         "adc r23, r25 \n\t"
9007         "mul r8, r18 \n\t"
9008         "add r24, r0 \n\t"
9009         "adc r22, r1 \n\t"
9010         "adc r23, r25 \n\t"
9011         "mul r9, r17 \n\t"
9012         "add r24, r0 \n\t"
9013         "adc r22, r1 \n\t"
9014         "adc r23, r25 \n\t"
9015         "mul r10, r16 \n\t"
9016         "add r24, r0 \n\t"
9017         "adc r22, r1 \n\t"
9018         "adc r23, r25 \n\t"
9019         "mul r11, r15 \n\t"
9020         "add r24, r0 \n\t"
9021         "adc r22, r1 \n\t"
9022         "adc r23, r25 \n\t"
9023         "mul r2, r14 \n\t"
9024         "add r24, r0 \n\t"
9025         "adc r22, r1 \n\t"
9026         "adc r23, r25 \n\t"
9027         "mul r3, r13 \n\t"
9028         "add r24, r0 \n\t"
9029         "adc r22, r1 \n\t"
9030         "adc r23, r25 \n\t"
9031         "ld r0, z \n\t"
9032         "add r24, r0 \n\t"
9033         "adc r22, r25 \n\t"
9034         "adc r23, r25 \n\t"
9035         "st z+, r24 \n\t"
9036
9037         "ld r13, y+ \n\t"
9038         "ldi r24, 0 \n\t"
9039         "mul r4, r13 \n\t"
9040         "add r22, r0 \n\t"
9041         "adc r23, r1 \n\t"
9042         "adc r24, r25 \n\t"
9043         "mul r5, r12 \n\t"
9044         "add r22, r0 \n\t"
9045         "adc r23, r1 \n\t"
9046         "adc r24, r25 \n\t"
9047         "mul r6, r21 \n\t"
9048         "add r22, r0 \n\t"
9049         "adc r23, r1 \n\t"
9050         "adc r24, r25 \n\t"
9051         "mul r7, r20 \n\t"
9052         "add r22, r0 \n\t"
9053         "adc r23, r1 \n\t"
9054         "adc r24, r25 \n\t"
9055         "mul r8, r19 \n\t"
9056         "add r22, r0 \n\t"
9057         "adc r23, r1 \n\t"
9058         "adc r24, r25 \n\t"
9059         "mul r9, r18 \n\t"
9060         "add r22, r0 \n\t"
9061         "adc r23, r1 \n\t"
9062         "adc r24, r25 \n\t"
9063         "mul r10, r17 \n\t"
9064         "add r22, r0 \n\t"
9065         "adc r23, r1 \n\t"
9066         "adc r24, r25 \n\t"
9067         "mul r11, r16 \n\t"
9068         "add r22, r0 \n\t"
9069         "adc r23, r1 \n\t"
9070         "adc r24, r25 \n\t"
9071         "mul r2, r15 \n\t"
9072         "add r22, r0 \n\t"
9073         "adc r23, r1 \n\t"
9074         "adc r24, r25 \n\t"
9075         "mul r3, r14 \n\t"
9076         "add r22, r0 \n\t"
9077         "adc r23, r1 \n\t"
9078         "adc r24, r25 \n\t"
9079         "ld r0, z \n\t"
9080         "add r22, r0 \n\t"
9081         "adc r23, r25 \n\t"
9082         "adc r24, r25 \n\t"
9083         "st z+, r22 \n\t"
9084
9085         "ld r14, y+ \n\t"
9086         "ldi r22, 0 \n\t"
9087         "mul r4, r14 \n\t"
9088         "add r23, r0 \n\t"
9089         "adc r24, r1 \n\t"
9090         "adc r22, r25 \n\t"
9091         "mul r5, r13 \n\t"
9092         "add r23, r0 \n\t"
9093         "adc r24, r1 \n\t"
9094         "adc r22, r25 \n\t"
9095         "mul r6, r12 \n\t"
9096         "add r23, r0 \n\t"
9097         "adc r24, r1 \n\t"
9098         "adc r22, r25 \n\t"
9099         "mul r7, r21 \n\t"
9100         "add r23, r0 \n\t"
9101         "adc r24, r1 \n\t"
9102         "adc r22, r25 \n\t"
9103         "mul r8, r20 \n\t"
9104         "add r23, r0 \n\t"
9105         "adc r24, r1 \n\t"
9106         "adc r22, r25 \n\t"
9107         "mul r9, r19 \n\t"
9108         "add r23, r0 \n\t"
9109         "adc r24, r1 \n\t"
9110         "adc r22, r25 \n\t"
9111         "mul r10, r18 \n\t"
9112         "add r23, r0 \n\t"
9113         "adc r24, r1 \n\t"
9114         "adc r22, r25 \n\t"
9115         "mul r11, r17 \n\t"
9116         "add r23, r0 \n\t"
9117         "adc r24, r1 \n\t"
9118         "adc r22, r25 \n\t"
9119         "mul r2, r16 \n\t"
9120         "add r23, r0 \n\t"
9121         "adc r24, r1 \n\t"
9122         "adc r22, r25 \n\t"
9123         "mul r3, r15 \n\t"
9124         "add r23, r0 \n\t"
9125         "adc r24, r1 \n\t"
9126         "adc r22, r25 \n\t"
9127         "ld r0, z \n\t"
9128         "add r23, r0 \n\t"
9129         "adc r24, r25 \n\t"
9130         "adc r22, r25 \n\t"
9131         "st z+, r23 \n\t"
9132
9133         "ld r15, y+ \n\t"
9134         "ldi r23, 0 \n\t"
9135         "mul r4, r15 \n\t"
9136         "add r24, r0 \n\t"
9137         "adc r22, r1 \n\t"
9138         "adc r23, r25 \n\t"
9139         "mul r5, r14 \n\t"
9140         "add r24, r0 \n\t"
9141         "adc r22, r1 \n\t"
9142         "adc r23, r25 \n\t"
9143         "mul r6, r13 \n\t"
9144         "add r24, r0 \n\t"
9145         "adc r22, r1 \n\t"
9146         "adc r23, r25 \n\t"
9147         "mul r7, r12 \n\t"
9148         "add r24, r0 \n\t"
9149         "adc r22, r1 \n\t"
9150         "adc r23, r25 \n\t"
9151         "mul r8, r21 \n\t"
9152         "add r24, r0 \n\t"
9153         "adc r22, r1 \n\t"
9154         "adc r23, r25 \n\t"
9155         "mul r9, r20 \n\t"
9156         "add r24, r0 \n\t"
9157         "adc r22, r1 \n\t"
9158         "adc r23, r25 \n\t"
9159         "mul r10, r19 \n\t"
9160         "add r24, r0 \n\t"
9161         "adc r22, r1 \n\t"
9162         "adc r23, r25 \n\t"
9163         "mul r11, r18 \n\t"
9164         "add r24, r0 \n\t"
9165         "adc r22, r1 \n\t"
9166         "adc r23, r25 \n\t"
9167         "mul r2, r17 \n\t"
9168         "add r24, r0 \n\t"
9169         "adc r22, r1 \n\t"
9170         "adc r23, r25 \n\t"
9171         "mul r3, r16 \n\t"
9172         "add r24, r0 \n\t"
9173         "adc r22, r1 \n\t"
9174         "adc r23, r25 \n\t"
9175         "ld r0, z \n\t"
9176         "add r24, r0 \n\t"
9177         "adc r22, r25 \n\t"
9178         "adc r23, r25 \n\t"
9179         "st z+, r24 \n\t"
9180
9181         "ld r16, y+ \n\t"
9182         "ldi r24, 0 \n\t"
9183         "mul r4, r16 \n\t"
9184         "add r22, r0 \n\t"
9185         "adc r23, r1 \n\t"
9186         "adc r24, r25 \n\t"
9187         "mul r5, r15 \n\t"
9188         "add r22, r0 \n\t"
9189         "adc r23, r1 \n\t"
9190         "adc r24, r25 \n\t"
9191         "mul r6, r14 \n\t"
9192         "add r22, r0 \n\t"
9193         "adc r23, r1 \n\t"
9194         "adc r24, r25 \n\t"
9195         "mul r7, r13 \n\t"
9196         "add r22, r0 \n\t"
9197         "adc r23, r1 \n\t"
9198         "adc r24, r25 \n\t"
9199         "mul r8, r12 \n\t"
9200         "add r22, r0 \n\t"
9201         "adc r23, r1 \n\t"
9202         "adc r24, r25 \n\t"
9203         "mul r9, r21 \n\t"
9204         "add r22, r0 \n\t"
9205         "adc r23, r1 \n\t"
9206         "adc r24, r25 \n\t"
9207         "mul r10, r20 \n\t"
9208         "add r22, r0 \n\t"
9209         "adc r23, r1 \n\t"
9210         "adc r24, r25 \n\t"
9211         "mul r11, r19 \n\t"
9212         "add r22, r0 \n\t"
9213         "adc r23, r1 \n\t"
9214         "adc r24, r25 \n\t"
9215         "mul r2, r18 \n\t"
9216         "add r22, r0 \n\t"
9217         "adc r23, r1 \n\t"
9218         "adc r24, r25 \n\t"
9219         "mul r3, r17 \n\t"
9220         "add r22, r0 \n\t"
9221         "adc r23, r1 \n\t"
9222         "adc r24, r25 \n\t"
9223         "ld r0, z \n\t"
9224         "add r22, r0 \n\t"
9225         "adc r23, r25 \n\t"
9226         "adc r24, r25 \n\t"
9227         "st z+, r22 \n\t"
9228
9229         "ld r17, y+ \n\t"
9230         "ldi r22, 0 \n\t"
9231         "mul r4, r17 \n\t"
9232         "add r23, r0 \n\t"
9233         "adc r24, r1 \n\t"
9234         "adc r22, r25 \n\t"
9235         "mul r5, r16 \n\t"
9236         "add r23, r0 \n\t"
9237         "adc r24, r1 \n\t"
9238         "adc r22, r25 \n\t"
9239         "mul r6, r15 \n\t"
9240         "add r23, r0 \n\t"
9241         "adc r24, r1 \n\t"
9242         "adc r22, r25 \n\t"
9243         "mul r7, r14 \n\t"
9244         "add r23, r0 \n\t"
9245         "adc r24, r1 \n\t"
9246         "adc r22, r25 \n\t"
9247         "mul r8, r13 \n\t"
9248         "add r23, r0 \n\t"
9249         "adc r24, r1 \n\t"
9250         "adc r22, r25 \n\t"
9251         "mul r9, r12 \n\t"
9252         "add r23, r0 \n\t"
9253         "adc r24, r1 \n\t"
9254         "adc r22, r25 \n\t"
9255         "mul r10, r21 \n\t"
9256         "add r23, r0 \n\t"
9257         "adc r24, r1 \n\t"
9258         "adc r22, r25 \n\t"
9259         "mul r11, r20 \n\t"
9260         "add r23, r0 \n\t"
9261         "adc r24, r1 \n\t"
9262         "adc r22, r25 \n\t"
9263         "mul r2, r19 \n\t"
9264         "add r23, r0 \n\t"
9265         "adc r24, r1 \n\t"
9266         "adc r22, r25 \n\t"
9267         "mul r3, r18 \n\t"
9268         "add r23, r0 \n\t"
9269         "adc r24, r1 \n\t"
9270         "adc r22, r25 \n\t"
9271         "ld r0, z \n\t"
9272         "add r23, r0 \n\t"
9273         "adc r24, r25 \n\t"
9274         "adc r22, r25 \n\t"
9275         "st z+, r23 \n\t"
9276
9277         "ld r18, y+ \n\t"
9278         "ldi r23, 0 \n\t"
9279         "mul r4, r18 \n\t"
9280         "add r24, r0 \n\t"
9281         "adc r22, r1 \n\t"
9282         "adc r23, r25 \n\t"
9283         "mul r5, r17 \n\t"
9284         "add r24, r0 \n\t"
9285         "adc r22, r1 \n\t"
9286         "adc r23, r25 \n\t"
9287         "mul r6, r16 \n\t"
9288         "add r24, r0 \n\t"
9289         "adc r22, r1 \n\t"
9290         "adc r23, r25 \n\t"
9291         "mul r7, r15 \n\t"
9292         "add r24, r0 \n\t"
9293         "adc r22, r1 \n\t"
9294         "adc r23, r25 \n\t"
9295         "mul r8, r14 \n\t"
9296         "add r24, r0 \n\t"
9297         "adc r22, r1 \n\t"
9298         "adc r23, r25 \n\t"
9299         "mul r9, r13 \n\t"
9300         "add r24, r0 \n\t"
9301         "adc r22, r1 \n\t"
9302         "adc r23, r25 \n\t"
9303         "mul r10, r12 \n\t"
9304         "add r24, r0 \n\t"
9305         "adc r22, r1 \n\t"
9306         "adc r23, r25 \n\t"
9307         "mul r11, r21 \n\t"
9308         "add r24, r0 \n\t"
9309         "adc r22, r1 \n\t"
9310         "adc r23, r25 \n\t"
9311         "mul r2, r20 \n\t"
9312         "add r24, r0 \n\t"
9313         "adc r22, r1 \n\t"
9314         "adc r23, r25 \n\t"
9315         "mul r3, r19 \n\t"
9316         "add r24, r0 \n\t"
9317         "adc r22, r1 \n\t"
9318         "adc r23, r25 \n\t"
9319         "ld r0, z \n\t"
9320         "add r24, r0 \n\t"
9321         "adc r22, r25 \n\t"
9322         "adc r23, r25 \n\t"
9323         "st z+, r24 \n\t"
9324
9325         "ld r19, y+ \n\t"
9326         "ldi r24, 0 \n\t"
9327         "mul r4, r19 \n\t"
9328         "add r22, r0 \n\t"
9329         "adc r23, r1 \n\t"
9330         "adc r24, r25 \n\t"
9331         "mul r5, r18 \n\t"
9332         "add r22, r0 \n\t"
9333         "adc r23, r1 \n\t"
9334         "adc r24, r25 \n\t"
9335         "mul r6, r17 \n\t"
9336         "add r22, r0 \n\t"
9337         "adc r23, r1 \n\t"
9338         "adc r24, r25 \n\t"
9339         "mul r7, r16 \n\t"
9340         "add r22, r0 \n\t"
9341         "adc r23, r1 \n\t"
9342         "adc r24, r25 \n\t"
9343         "mul r8, r15 \n\t"
9344         "add r22, r0 \n\t"
9345         "adc r23, r1 \n\t"
9346         "adc r24, r25 \n\t"
9347         "mul r9, r14 \n\t"
9348         "add r22, r0 \n\t"
9349         "adc r23, r1 \n\t"
9350         "adc r24, r25 \n\t"
9351         "mul r10, r13 \n\t"
9352         "add r22, r0 \n\t"
9353         "adc r23, r1 \n\t"
9354         "adc r24, r25 \n\t"
9355         "mul r11, r12 \n\t"
9356         "add r22, r0 \n\t"
9357         "adc r23, r1 \n\t"
9358         "adc r24, r25 \n\t"
9359         "mul r2, r21 \n\t"
9360         "add r22, r0 \n\t"
9361         "adc r23, r1 \n\t"
9362         "adc r24, r25 \n\t"
9363         "mul r3, r20 \n\t"
9364         "add r22, r0 \n\t"
9365         "adc r23, r1 \n\t"
9366         "adc r24, r25 \n\t"
9367         "ld r0, z \n\t"
9368         "add r22, r0 \n\t"
9369         "adc r23, r25 \n\t"
9370         "adc r24, r25 \n\t"
9371         "st z+, r22 \n\t"
9372
9373         "ld r20, y+ \n\t"
9374         "ldi r22, 0 \n\t"
9375         "mul r4, r20 \n\t"
9376         "add r23, r0 \n\t"
9377         "adc r24, r1 \n\t"
9378         "adc r22, r25 \n\t"
9379         "mul r5, r19 \n\t"
9380         "add r23, r0 \n\t"
9381         "adc r24, r1 \n\t"
9382         "adc r22, r25 \n\t"
9383         "mul r6, r18 \n\t"
9384         "add r23, r0 \n\t"
9385         "adc r24, r1 \n\t"
9386         "adc r22, r25 \n\t"
9387         "mul r7, r17 \n\t"
9388         "add r23, r0 \n\t"
9389         "adc r24, r1 \n\t"
9390         "adc r22, r25 \n\t"
9391         "mul r8, r16 \n\t"
9392         "add r23, r0 \n\t"
9393         "adc r24, r1 \n\t"
9394         "adc r22, r25 \n\t"
9395         "mul r9, r15 \n\t"
9396         "add r23, r0 \n\t"
9397         "adc r24, r1 \n\t"
9398         "adc r22, r25 \n\t"
9399         "mul r10, r14 \n\t"
9400         "add r23, r0 \n\t"
9401         "adc r24, r1 \n\t"
9402         "adc r22, r25 \n\t"
9403         "mul r11, r13 \n\t"
9404         "add r23, r0 \n\t"
9405         "adc r24, r1 \n\t"
9406         "adc r22, r25 \n\t"
9407         "mul r2, r12 \n\t"
9408         "add r23, r0 \n\t"
9409         "adc r24, r1 \n\t"
9410         "adc r22, r25 \n\t"
9411         "mul r3, r21 \n\t"
9412         "add r23, r0 \n\t"
9413         "adc r24, r1 \n\t"
9414         "adc r22, r25 \n\t"
9415         "ld r0, z \n\t"
9416         "add r23, r0 \n\t"
9417         "adc r24, r25 \n\t"
9418         "adc r22, r25 \n\t"
9419         "st z+, r23 \n\t"
9420
9421         "ld r21, y+ \n\t"
9422         "ldi r23, 0 \n\t"
9423         "mul r4, r21 \n\t"
9424         "add r24, r0 \n\t"
9425         "adc r22, r1 \n\t"
9426         "adc r23, r25 \n\t"
9427         "mul r5, r20 \n\t"
9428         "add r24, r0 \n\t"
9429         "adc r22, r1 \n\t"
9430         "adc r23, r25 \n\t"
9431         "mul r6, r19 \n\t"
9432         "add r24, r0 \n\t"
9433         "adc r22, r1 \n\t"
9434         "adc r23, r25 \n\t"
9435         "mul r7, r18 \n\t"
9436         "add r24, r0 \n\t"
9437         "adc r22, r1 \n\t"
9438         "adc r23, r25 \n\t"
9439         "mul r8, r17 \n\t"
9440         "add r24, r0 \n\t"
9441         "adc r22, r1 \n\t"
9442         "adc r23, r25 \n\t"
9443         "mul r9, r16 \n\t"
9444         "add r24, r0 \n\t"
9445         "adc r22, r1 \n\t"
9446         "adc r23, r25 \n\t"
9447         "mul r10, r15 \n\t"
9448         "add r24, r0 \n\t"
9449         "adc r22, r1 \n\t"
9450         "adc r23, r25 \n\t"
9451         "mul r11, r14 \n\t"
9452         "add r24, r0 \n\t"
9453         "adc r22, r1 \n\t"
9454         "adc r23, r25 \n\t"
9455         "mul r2, r13 \n\t"
9456         "add r24, r0 \n\t"
9457         "adc r22, r1 \n\t"
9458         "adc r23, r25 \n\t"
9459         "mul r3, r12 \n\t"
9460         "add r24, r0 \n\t"
9461         "adc r22, r1 \n\t"
9462         "adc r23, r25 \n\t"
9463         "ld r0, z \n\t"
9464         "add r24, r0 \n\t"
9465         "adc r22, r25 \n\t"
9466         "adc r23, r25 \n\t"
9467         "st z+, r24 \n\t"
9468
9469         "ld r12, y+ \n\t"
9470         "ldi r24, 0 \n\t"
9471         "mul r4, r12 \n\t"
9472         "add r22, r0 \n\t"
9473         "adc r23, r1 \n\t"
9474         "adc r24, r25 \n\t"
9475         "mul r5, r21 \n\t"
9476         "add r22, r0 \n\t"
9477         "adc r23, r1 \n\t"
9478         "adc r24, r25 \n\t"
9479         "mul r6, r20 \n\t"
9480         "add r22, r0 \n\t"
9481         "adc r23, r1 \n\t"
9482         "adc r24, r25 \n\t"
9483         "mul r7, r19 \n\t"
9484         "add r22, r0 \n\t"
9485         "adc r23, r1 \n\t"
9486         "adc r24, r25 \n\t"
9487         "mul r8, r18 \n\t"
9488         "add r22, r0 \n\t"
9489         "adc r23, r1 \n\t"
9490         "adc r24, r25 \n\t"
9491         "mul r9, r17 \n\t"
9492         "add r22, r0 \n\t"
9493         "adc r23, r1 \n\t"
9494         "adc r24, r25 \n\t"
9495         "mul r10, r16 \n\t"
9496         "add r22, r0 \n\t"
9497         "adc r23, r1 \n\t"
9498         "adc r24, r25 \n\t"
9499         "mul r11, r15 \n\t"
9500         "add r22, r0 \n\t"
9501         "adc r23, r1 \n\t"
9502         "adc r24, r25 \n\t"
9503         "mul r2, r14 \n\t"
9504         "add r22, r0 \n\t"
9505         "adc r23, r1 \n\t"
9506         "adc r24, r25 \n\t"
9507         "mul r3, r13 \n\t"
9508         "add r22, r0 \n\t"
9509         "adc r23, r1 \n\t"
9510         "adc r24, r25 \n\t"
9511         "ld r0, z \n\t"
9512         "add r22, r0 \n\t"
9513         "adc r23, r25 \n\t"
9514         "adc r24, r25 \n\t"
9515         "st z+, r22 \n\t"
9516
9517         "ld r13, y+ \n\t"
9518         "ldi r22, 0 \n\t"
9519         "mul r4, r13 \n\t"
9520         "add r23, r0 \n\t"
9521         "adc r24, r1 \n\t"
9522         "adc r22, r25 \n\t"
9523         "mul r5, r12 \n\t"
9524         "add r23, r0 \n\t"
9525         "adc r24, r1 \n\t"
9526         "adc r22, r25 \n\t"
9527         "mul r6, r21 \n\t"
9528         "add r23, r0 \n\t"
9529         "adc r24, r1 \n\t"
9530         "adc r22, r25 \n\t"
9531         "mul r7, r20 \n\t"
9532         "add r23, r0 \n\t"
9533         "adc r24, r1 \n\t"
9534         "adc r22, r25 \n\t"
9535         "mul r8, r19 \n\t"
9536         "add r23, r0 \n\t"
9537         "adc r24, r1 \n\t"
9538         "adc r22, r25 \n\t"
9539         "mul r9, r18 \n\t"
9540         "add r23, r0 \n\t"
9541         "adc r24, r1 \n\t"
9542         "adc r22, r25 \n\t"
9543         "mul r10, r17 \n\t"
9544         "add r23, r0 \n\t"
9545         "adc r24, r1 \n\t"
9546         "adc r22, r25 \n\t"
9547         "mul r11, r16 \n\t"
9548         "add r23, r0 \n\t"
9549         "adc r24, r1 \n\t"
9550         "adc r22, r25 \n\t"
9551         "mul r2, r15 \n\t"
9552         "add r23, r0 \n\t"
9553         "adc r24, r1 \n\t"
9554         "adc r22, r25 \n\t"
9555         "mul r3, r14 \n\t"
9556         "add r23, r0 \n\t"
9557         "adc r24, r1 \n\t"
9558         "adc r22, r25 \n\t"
9559         "ld r0, z \n\t"
9560         "add r23, r0 \n\t"
9561         "adc r24, r25 \n\t"
9562         "adc r22, r25 \n\t"
9563         "st z+, r23 \n\t"
9564
9565         "ldi r23, 0 \n\t"
9566         "mul r5, r13 \n\t"
9567         "add r24, r0 \n\t"
9568         "adc r22, r1 \n\t"
9569         "adc r23, r25 \n\t"
9570         "mul r6, r12 \n\t"
9571         "add r24, r0 \n\t"
9572         "adc r22, r1 \n\t"
9573         "adc r23, r25 \n\t"
9574         "mul r7, r21 \n\t"
9575         "add r24, r0 \n\t"
9576         "adc r22, r1 \n\t"
9577         "adc r23, r25 \n\t"
9578         "mul r8, r20 \n\t"
9579         "add r24, r0 \n\t"
9580         "adc r22, r1 \n\t"
9581         "adc r23, r25 \n\t"
9582         "mul r9, r19 \n\t"
9583         "add r24, r0 \n\t"
9584         "adc r22, r1 \n\t"
9585         "adc r23, r25 \n\t"
9586         "mul r10, r18 \n\t"
9587         "add r24, r0 \n\t"
9588         "adc r22, r1 \n\t"
9589         "adc r23, r25 \n\t"
9590         "mul r11, r17 \n\t"
9591         "add r24, r0 \n\t"
9592         "adc r22, r1 \n\t"
9593         "adc r23, r25 \n\t"
9594         "mul r2, r16 \n\t"
9595         "add r24, r0 \n\t"
9596         "adc r22, r1 \n\t"
9597         "adc r23, r25 \n\t"
9598         "mul r3, r15 \n\t"
9599         "add r24, r0 \n\t"
9600         "adc r22, r1 \n\t"
9601         "adc r23, r25 \n\t"
9602         "st z+, r24 \n\t"
9603
9604         "ldi r24, 0 \n\t"
9605         "mul r6, r13 \n\t"
9606         "add r22, r0 \n\t"
9607         "adc r23, r1 \n\t"
9608         "adc r24, r25 \n\t"
9609         "mul r7, r12 \n\t"
9610         "add r22, r0 \n\t"
9611         "adc r23, r1 \n\t"
9612         "adc r24, r25 \n\t"
9613         "mul r8, r21 \n\t"
9614         "add r22, r0 \n\t"
9615         "adc r23, r1 \n\t"
9616         "adc r24, r25 \n\t"
9617         "mul r9, r20 \n\t"
9618         "add r22, r0 \n\t"
9619         "adc r23, r1 \n\t"
9620         "adc r24, r25 \n\t"
9621         "mul r10, r19 \n\t"
9622         "add r22, r0 \n\t"
9623         "adc r23, r1 \n\t"
9624         "adc r24, r25 \n\t"
9625         "mul r11, r18 \n\t"
9626         "add r22, r0 \n\t"
9627         "adc r23, r1 \n\t"
9628         "adc r24, r25 \n\t"
9629         "mul r2, r17 \n\t"
9630         "add r22, r0 \n\t"
9631         "adc r23, r1 \n\t"
9632         "adc r24, r25 \n\t"
9633         "mul r3, r16 \n\t"
9634         "add r22, r0 \n\t"
9635         "adc r23, r1 \n\t"
9636         "adc r24, r25 \n\t"
9637         "st z+, r22 \n\t"
9638
9639         "ldi r22, 0 \n\t"
9640         "mul r7, r13 \n\t"
9641         "add r23, r0 \n\t"
9642         "adc r24, r1 \n\t"
9643         "adc r22, r25 \n\t"
9644         "mul r8, r12 \n\t"
9645         "add r23, r0 \n\t"
9646         "adc r24, r1 \n\t"
9647         "adc r22, r25 \n\t"
9648         "mul r9, r21 \n\t"
9649         "add r23, r0 \n\t"
9650         "adc r24, r1 \n\t"
9651         "adc r22, r25 \n\t"
9652         "mul r10, r20 \n\t"
9653         "add r23, r0 \n\t"
9654         "adc r24, r1 \n\t"
9655         "adc r22, r25 \n\t"
9656         "mul r11, r19 \n\t"
9657         "add r23, r0 \n\t"
9658         "adc r24, r1 \n\t"
9659         "adc r22, r25 \n\t"
9660         "mul r2, r18 \n\t"
9661         "add r23, r0 \n\t"
9662         "adc r24, r1 \n\t"
9663         "adc r22, r25 \n\t"
9664         "mul r3, r17 \n\t"
9665         "add r23, r0 \n\t"
9666         "adc r24, r1 \n\t"
9667         "adc r22, r25 \n\t"
9668         "st z+, r23 \n\t"
9669
9670         "ldi r23, 0 \n\t"
9671         "mul r8, r13 \n\t"
9672         "add r24, r0 \n\t"
9673         "adc r22, r1 \n\t"
9674         "adc r23, r25 \n\t"
9675         "mul r9, r12 \n\t"
9676         "add r24, r0 \n\t"
9677         "adc r22, r1 \n\t"
9678         "adc r23, r25 \n\t"
9679         "mul r10, r21 \n\t"
9680         "add r24, r0 \n\t"
9681         "adc r22, r1 \n\t"
9682         "adc r23, r25 \n\t"
9683         "mul r11, r20 \n\t"
9684         "add r24, r0 \n\t"
9685         "adc r22, r1 \n\t"
9686         "adc r23, r25 \n\t"
9687         "mul r2, r19 \n\t"
9688         "add r24, r0 \n\t"
9689         "adc r22, r1 \n\t"
9690         "adc r23, r25 \n\t"
9691         "mul r3, r18 \n\t"
9692         "add r24, r0 \n\t"
9693         "adc r22, r1 \n\t"
9694         "adc r23, r25 \n\t"
9695         "st z+, r24 \n\t"
9696
9697         "ldi r24, 0 \n\t"
9698         "mul r9, r13 \n\t"
9699         "add r22, r0 \n\t"
9700         "adc r23, r1 \n\t"
9701         "adc r24, r25 \n\t"
9702         "mul r10, r12 \n\t"
9703         "add r22, r0 \n\t"
9704         "adc r23, r1 \n\t"
9705         "adc r24, r25 \n\t"
9706         "mul r11, r21 \n\t"
9707         "add r22, r0 \n\t"
9708         "adc r23, r1 \n\t"
9709         "adc r24, r25 \n\t"
9710         "mul r2, r20 \n\t"
9711         "add r22, r0 \n\t"
9712         "adc r23, r1 \n\t"
9713         "adc r24, r25 \n\t"
9714         "mul r3, r19 \n\t"
9715         "add r22, r0 \n\t"
9716         "adc r23, r1 \n\t"
9717         "adc r24, r25 \n\t"
9718         "st z+, r22 \n\t"
9719
9720         "ldi r22, 0 \n\t"
9721         "mul r10, r13 \n\t"
9722         "add r23, r0 \n\t"
9723         "adc r24, r1 \n\t"
9724         "adc r22, r25 \n\t"
9725         "mul r11, r12 \n\t"
9726         "add r23, r0 \n\t"
9727         "adc r24, r1 \n\t"
9728         "adc r22, r25 \n\t"
9729         "mul r2, r21 \n\t"
9730         "add r23, r0 \n\t"
9731         "adc r24, r1 \n\t"
9732         "adc r22, r25 \n\t"
9733         "mul r3, r20 \n\t"
9734         "add r23, r0 \n\t"
9735         "adc r24, r1 \n\t"
9736         "adc r22, r25 \n\t"
9737         "st z+, r23 \n\t"
9738
9739         "ldi r23, 0 \n\t"
9740         "mul r11, r13 \n\t"
9741         "add r24, r0 \n\t"
9742         "adc r22, r1 \n\t"
9743         "adc r23, r25 \n\t"
9744         "mul r2, r12 \n\t"
9745         "add r24, r0 \n\t"
9746         "adc r22, r1 \n\t"
9747         "adc r23, r25 \n\t"
9748         "mul r3, r21 \n\t"
9749         "add r24, r0 \n\t"
9750         "adc r22, r1 \n\t"
9751         "adc r23, r25 \n\t"
9752         "st z+, r24 \n\t"
9753
9754         "ldi r24, 0 \n\t"
9755         "mul r2, r13 \n\t"
9756         "add r22, r0 \n\t"
9757         "adc r23, r1 \n\t"
9758         "adc r24, r25 \n\t"
9759         "mul r3, r12 \n\t"
9760         "add r22, r0 \n\t"
9761         "adc r23, r1 \n\t"
9762         "adc r24, r25 \n\t"
9763         "st z+, r22 \n\t"
9764
9765         "mul r3, r13 \n\t"
9766         "add r23, r0 \n\t"
9767         "adc r24, r1 \n\t"
9768         "st z+, r23 \n\t"
9769         "st z+, r24 \n\t"
9770
9771         "eor r1, r1 \n\t"
9772         : "+x" (p_left), "+y" (p_right), "+z" (p_result)
9773         :
9774         : "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12",
9775           "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "cc", "memory"
9776     );
9777 }
9778 #define asm_mult 1
9779 #endif /* uECC_BYTES == 32 */
9780
9781 #if uECC_SQUARE_FUNC
9782
9783 #if (uECC_BYTES == 20)
9784 static void vli_square(uint8_t *p_result, uint8_t *p_left)
9785 {
9786     __asm__ volatile (
9787         "ld r2, x+ \n\t"
9788         "ld r3, x+ \n\t"
9789         "ld r4, x+ \n\t"
9790         "ld r5, x+ \n\t"
9791         "ld r6, x+ \n\t"
9792         "ld r7, x+ \n\t"
9793         "ld r8, x+ \n\t"
9794         "ld r9, x+ \n\t"
9795         "ld r10, x+ \n\t"
9796         "ld r11, x+ \n\t"
9797         "ld r12, x+ \n\t"
9798         "ld r13, x+ \n\t"
9799         "ld r14, x+ \n\t"
9800         "ld r15, x+ \n\t"
9801         "ld r16, x+ \n\t"
9802         "ld r17, x+ \n\t"
9803         "ld r18, x+ \n\t"
9804         "ld r19, x+ \n\t"
9805         "ld r20, x+ \n\t"
9806         "ld r21, x+ \n\t"
9807         "ldi r27, 0 \n\t"
9808
9809         "ldi r23, 0 \n\t"
9810         "mul r2, r2 \n\t"
9811         "st z+, r0 \n\t"
9812         "mov r22, r1 \n\t"
9813
9814         "ldi r24, 0 \n\t"
9815         "mul r2, r3 \n\t"
9816         "lsl r0 \n\t"
9817         "rol r1 \n\t"
9818         "adc r24, r27 \n\t"
9819         "add r22, r0 \n\t"
9820         "adc r23, r1 \n\t"
9821         "adc r24, r27 \n\t"
9822         "st z+, r22 \n\t"
9823
9824         "ldi r22, 0 \n\t"
9825         "mul r2, r4 \n\t"
9826         "lsl r0 \n\t"
9827         "rol r1 \n\t"
9828         "adc r22, r27 \n\t"
9829         "add r23, r0 \n\t"
9830         "adc r24, r1 \n\t"
9831         "adc r22, r27 \n\t"
9832         "mul r3, r3 \n\t"
9833         "add r23, r0 \n\t"
9834         "adc r24, r1 \n\t"
9835         "adc r22, r27 \n\t"
9836         "st z+, r23 \n\t"
9837
9838         "ldi r26, 0 \n\t"
9839         "mul r2, r5 \n\t"
9840         "mov r23, r0 \n\t"
9841         "mov r25, r1 \n\t"
9842         "mul r3, r4 \n\t"
9843         "add r23, r0 \n\t"
9844         "adc r25, r1 \n\t"
9845         "adc r26, r27 \n\t"
9846         "lsl r23 \n\t"
9847         "rol r25 \n\t"
9848         "rol r26 \n\t"
9849         "add r23, r24 \n\t"
9850         "adc r25, r22 \n\t"
9851         "adc r26, r27 \n\t"
9852         "st z+, r23 \n\t"
9853
9854         "ldi r22, 0 \n\t"
9855         "mul r2, r6 \n\t"
9856         "mov r23, r0 \n\t"
9857         "mov r24, r1 \n\t"
9858         "mul r3, r5 \n\t"
9859         "add r23, r0 \n\t"
9860         "adc r24, r1 \n\t"
9861         "adc r22, r27 \n\t"
9862         "lsl r23 \n\t"
9863         "rol r24 \n\t"
9864         "rol r22 \n\t"
9865         "mul r4, r4 \n\t"
9866         "add r23, r0 \n\t"
9867         "adc r24, r1 \n\t"
9868         "adc r22, r27 \n\t"
9869         "add r23, r25 \n\t"
9870         "adc r24, r26 \n\t"
9871         "adc r22, r27 \n\t"
9872         "st z+, r23 \n\t"
9873
9874         "ldi r26, 0 \n\t"
9875         "mul r2, r7 \n\t"
9876         "mov r23, r0 \n\t"
9877         "mov r25, r1 \n\t"
9878         "mul r3, r6 \n\t"
9879         "add r23, r0 \n\t"
9880         "adc r25, r1 \n\t"
9881         "adc r26, r27 \n\t"
9882         "mul r4, r5 \n\t"
9883         "add r23, r0 \n\t"
9884         "adc r25, r1 \n\t"
9885         "adc r26, r27 \n\t"
9886         "lsl r23 \n\t"
9887         "rol r25 \n\t"
9888         "rol r26 \n\t"
9889         "add r23, r24 \n\t"
9890         "adc r25, r22 \n\t"
9891         "adc r26, r27 \n\t"
9892         "st z+, r23 \n\t"
9893
9894         "ldi r22, 0 \n\t"
9895         "mul r2, r8 \n\t"
9896         "mov r23, r0 \n\t"
9897         "mov r24, r1 \n\t"
9898         "mul r3, r7 \n\t"
9899         "add r23, r0 \n\t"
9900         "adc r24, r1 \n\t"
9901         "adc r22, r27 \n\t"
9902         "mul r4, r6 \n\t"
9903         "add r23, r0 \n\t"
9904         "adc r24, r1 \n\t"
9905         "adc r22, r27 \n\t"
9906         "lsl r23 \n\t"
9907         "rol r24 \n\t"
9908         "rol r22 \n\t"
9909         "mul r5, r5 \n\t"
9910         "add r23, r0 \n\t"
9911         "adc r24, r1 \n\t"
9912         "adc r22, r27 \n\t"
9913         "add r23, r25 \n\t"
9914         "adc r24, r26 \n\t"
9915         "adc r22, r27 \n\t"
9916         "st z+, r23 \n\t"
9917
9918         "ldi r26, 0 \n\t"
9919         "mul r2, r9 \n\t"
9920         "mov r23, r0 \n\t"
9921         "mov r25, r1 \n\t"
9922         "mul r3, r8 \n\t"
9923         "add r23, r0 \n\t"
9924         "adc r25, r1 \n\t"
9925         "adc r26, r27 \n\t"
9926         "mul r4, r7 \n\t"
9927         "add r23, r0 \n\t"
9928         "adc r25, r1 \n\t"
9929         "adc r26, r27 \n\t"
9930         "mul r5, r6 \n\t"
9931         "add r23, r0 \n\t"
9932         "adc r25, r1 \n\t"
9933         "adc r26, r27 \n\t"
9934         "lsl r23 \n\t"
9935         "rol r25 \n\t"
9936         "rol r26 \n\t"
9937         "add r23, r24 \n\t"
9938         "adc r25, r22 \n\t"
9939         "adc r26, r27 \n\t"
9940         "st z+, r23 \n\t"
9941
9942         "ldi r22, 0 \n\t"
9943         "mul r2, r10 \n\t"
9944         "mov r23, r0 \n\t"
9945         "mov r24, r1 \n\t"
9946         "mul r3, r9 \n\t"
9947         "add r23, r0 \n\t"
9948         "adc r24, r1 \n\t"
9949         "adc r22, r27 \n\t"
9950         "mul r4, r8 \n\t"
9951         "add r23, r0 \n\t"
9952         "adc r24, r1 \n\t"
9953         "adc r22, r27 \n\t"
9954         "mul r5, r7 \n\t"
9955         "add r23, r0 \n\t"
9956         "adc r24, r1 \n\t"
9957         "adc r22, r27 \n\t"
9958         "lsl r23 \n\t"
9959         "rol r24 \n\t"
9960         "rol r22 \n\t"
9961         "mul r6, r6 \n\t"
9962         "add r23, r0 \n\t"
9963         "adc r24, r1 \n\t"
9964         "adc r22, r27 \n\t"
9965         "add r23, r25 \n\t"
9966         "adc r24, r26 \n\t"
9967         "adc r22, r27 \n\t"
9968         "st z+, r23 \n\t"
9969
9970         "ldi r26, 0 \n\t"
9971         "mul r2, r11 \n\t"
9972         "mov r23, r0 \n\t"
9973         "mov r25, r1 \n\t"
9974         "mul r3, r10 \n\t"
9975         "add r23, r0 \n\t"
9976         "adc r25, r1 \n\t"
9977         "adc r26, r27 \n\t"
9978         "mul r4, r9 \n\t"
9979         "add r23, r0 \n\t"
9980         "adc r25, r1 \n\t"
9981         "adc r26, r27 \n\t"
9982         "mul r5, r8 \n\t"
9983         "add r23, r0 \n\t"
9984         "adc r25, r1 \n\t"
9985         "adc r26, r27 \n\t"
9986         "mul r6, r7 \n\t"
9987         "add r23, r0 \n\t"
9988         "adc r25, r1 \n\t"
9989         "adc r26, r27 \n\t"
9990         "lsl r23 \n\t"
9991         "rol r25 \n\t"
9992         "rol r26 \n\t"
9993         "add r23, r24 \n\t"
9994         "adc r25, r22 \n\t"
9995         "adc r26, r27 \n\t"
9996         "st z+, r23 \n\t"
9997
9998         "ldi r22, 0 \n\t"
9999         "mul r2, r12 \n\t"
10000         "mov r23, r0 \n\t"
10001         "mov r24, r1 \n\t"
10002         "mul r3, r11 \n\t"
10003         "add r23, r0 \n\t"
10004         "adc r24, r1 \n\t"
10005         "adc r22, r27 \n\t"
10006         "mul r4, r10 \n\t"
10007         "add r23, r0 \n\t"
10008         "adc r24, r1 \n\t"
10009         "adc r22, r27 \n\t"
10010         "mul r5, r9 \n\t"
10011         "add r23, r0 \n\t"
10012         "adc r24, r1 \n\t"
10013         "adc r22, r27 \n\t"
10014         "mul r6, r8 \n\t"
10015         "add r23, r0 \n\t"
10016         "adc r24, r1 \n\t"
10017         "adc r22, r27 \n\t"
10018         "lsl r23 \n\t"
10019         "rol r24 \n\t"
10020         "rol r22 \n\t"
10021         "mul r7, r7 \n\t"
10022         "add r23, r0 \n\t"
10023         "adc r24, r1 \n\t"
10024         "adc r22, r27 \n\t"
10025         "add r23, r25 \n\t"
10026         "adc r24, r26 \n\t"
10027         "adc r22, r27 \n\t"
10028         "st z+, r23 \n\t"
10029
10030         "ldi r26, 0 \n\t"
10031         "mul r2, r13 \n\t"
10032         "mov r23, r0 \n\t"
10033         "mov r25, r1 \n\t"
10034         "mul r3, r12 \n\t"
10035         "add r23, r0 \n\t"
10036         "adc r25, r1 \n\t"
10037         "adc r26, r27 \n\t"
10038         "mul r4, r11 \n\t"
10039         "add r23, r0 \n\t"
10040         "adc r25, r1 \n\t"
10041         "adc r26, r27 \n\t"
10042         "mul r5, r10 \n\t"
10043         "add r23, r0 \n\t"
10044         "adc r25, r1 \n\t"
10045         "adc r26, r27 \n\t"
10046         "mul r6, r9 \n\t"
10047         "add r23, r0 \n\t"
10048         "adc r25, r1 \n\t"
10049         "adc r26, r27 \n\t"
10050         "mul r7, r8 \n\t"
10051         "add r23, r0 \n\t"
10052         "adc r25, r1 \n\t"
10053         "adc r26, r27 \n\t"
10054         "lsl r23 \n\t"
10055         "rol r25 \n\t"
10056         "rol r26 \n\t"
10057         "add r23, r24 \n\t"
10058         "adc r25, r22 \n\t"
10059         "adc r26, r27 \n\t"
10060         "st z+, r23 \n\t"
10061
10062         "ldi r22, 0 \n\t"
10063         "mul r2, r14 \n\t"
10064         "mov r23, r0 \n\t"
10065         "mov r24, r1 \n\t"
10066         "mul r3, r13 \n\t"
10067         "add r23, r0 \n\t"
10068         "adc r24, r1 \n\t"
10069         "adc r22, r27 \n\t"
10070         "mul r4, r12 \n\t"
10071         "add r23, r0 \n\t"
10072         "adc r24, r1 \n\t"
10073         "adc r22, r27 \n\t"
10074         "mul r5, r11 \n\t"
10075         "add r23, r0 \n\t"
10076         "adc r24, r1 \n\t"
10077         "adc r22, r27 \n\t"
10078         "mul r6, r10 \n\t"
10079         "add r23, r0 \n\t"
10080         "adc r24, r1 \n\t"
10081         "adc r22, r27 \n\t"
10082         "mul r7, r9 \n\t"
10083         "add r23, r0 \n\t"
10084         "adc r24, r1 \n\t"
10085         "adc r22, r27 \n\t"
10086         "lsl r23 \n\t"
10087         "rol r24 \n\t"
10088         "rol r22 \n\t"
10089         "mul r8, r8 \n\t"
10090         "add r23, r0 \n\t"
10091         "adc r24, r1 \n\t"
10092         "adc r22, r27 \n\t"
10093         "add r23, r25 \n\t"
10094         "adc r24, r26 \n\t"
10095         "adc r22, r27 \n\t"
10096         "st z+, r23 \n\t"
10097
10098         "ldi r26, 0 \n\t"
10099         "mul r2, r15 \n\t"
10100         "mov r23, r0 \n\t"
10101         "mov r25, r1 \n\t"
10102         "mul r3, r14 \n\t"
10103         "add r23, r0 \n\t"
10104         "adc r25, r1 \n\t"
10105         "adc r26, r27 \n\t"
10106         "mul r4, r13 \n\t"
10107         "add r23, r0 \n\t"
10108         "adc r25, r1 \n\t"
10109         "adc r26, r27 \n\t"
10110         "mul r5, r12 \n\t"
10111         "add r23, r0 \n\t"
10112         "adc r25, r1 \n\t"
10113         "adc r26, r27 \n\t"
10114         "mul r6, r11 \n\t"
10115         "add r23, r0 \n\t"
10116         "adc r25, r1 \n\t"
10117         "adc r26, r27 \n\t"
10118         "mul r7, r10 \n\t"
10119         "add r23, r0 \n\t"
10120         "adc r25, r1 \n\t"
10121         "adc r26, r27 \n\t"
10122         "mul r8, r9 \n\t"
10123         "add r23, r0 \n\t"
10124         "adc r25, r1 \n\t"
10125         "adc r26, r27 \n\t"
10126         "lsl r23 \n\t"
10127         "rol r25 \n\t"
10128         "rol r26 \n\t"
10129         "add r23, r24 \n\t"
10130         "adc r25, r22 \n\t"
10131         "adc r26, r27 \n\t"
10132         "st z+, r23 \n\t"
10133
10134         "ldi r22, 0 \n\t"
10135         "mul r2, r16 \n\t"
10136         "mov r23, r0 \n\t"
10137         "mov r24, r1 \n\t"
10138         "mul r3, r15 \n\t"
10139         "add r23, r0 \n\t"
10140         "adc r24, r1 \n\t"
10141         "adc r22, r27 \n\t"
10142         "mul r4, r14 \n\t"
10143         "add r23, r0 \n\t"
10144         "adc r24, r1 \n\t"
10145         "adc r22, r27 \n\t"
10146         "mul r5, r13 \n\t"
10147         "add r23, r0 \n\t"
10148         "adc r24, r1 \n\t"
10149         "adc r22, r27 \n\t"
10150         "mul r6, r12 \n\t"
10151         "add r23, r0 \n\t"
10152         "adc r24, r1 \n\t"
10153         "adc r22, r27 \n\t"
10154         "mul r7, r11 \n\t"
10155         "add r23, r0 \n\t"
10156         "adc r24, r1 \n\t"
10157         "adc r22, r27 \n\t"
10158         "mul r8, r10 \n\t"
10159         "add r23, r0 \n\t"
10160         "adc r24, r1 \n\t"
10161         "adc r22, r27 \n\t"
10162         "lsl r23 \n\t"
10163         "rol r24 \n\t"
10164         "rol r22 \n\t"
10165         "mul r9, r9 \n\t"
10166         "add r23, r0 \n\t"
10167         "adc r24, r1 \n\t"
10168         "adc r22, r27 \n\t"
10169         "add r23, r25 \n\t"
10170         "adc r24, r26 \n\t"
10171         "adc r22, r27 \n\t"
10172         "st z+, r23 \n\t"
10173
10174         "ldi r26, 0 \n\t"
10175         "mul r2, r17 \n\t"
10176         "mov r23, r0 \n\t"
10177         "mov r25, r1 \n\t"
10178         "mul r3, r16 \n\t"
10179         "add r23, r0 \n\t"
10180         "adc r25, r1 \n\t"
10181         "adc r26, r27 \n\t"
10182         "mul r4, r15 \n\t"
10183         "add r23, r0 \n\t"
10184         "adc r25, r1 \n\t"
10185         "adc r26, r27 \n\t"
10186         "mul r5, r14 \n\t"
10187         "add r23, r0 \n\t"
10188         "adc r25, r1 \n\t"
10189         "adc r26, r27 \n\t"
10190         "mul r6, r13 \n\t"
10191         "add r23, r0 \n\t"
10192         "adc r25, r1 \n\t"
10193         "adc r26, r27 \n\t"
10194         "mul r7, r12 \n\t"
10195         "add r23, r0 \n\t"
10196         "adc r25, r1 \n\t"
10197         "adc r26, r27 \n\t"
10198         "mul r8, r11 \n\t"
10199         "add r23, r0 \n\t"
10200         "adc r25, r1 \n\t"
10201         "adc r26, r27 \n\t"
10202         "mul r9, r10 \n\t"
10203         "add r23, r0 \n\t"
10204         "adc r25, r1 \n\t"
10205         "adc r26, r27 \n\t"
10206         "lsl r23 \n\t"
10207         "rol r25 \n\t"
10208         "rol r26 \n\t"
10209         "add r23, r24 \n\t"
10210         "adc r25, r22 \n\t"
10211         "adc r26, r27 \n\t"
10212         "st z+, r23 \n\t"
10213
10214         "ldi r22, 0 \n\t"
10215         "mul r2, r18 \n\t"
10216         "mov r23, r0 \n\t"
10217         "mov r24, r1 \n\t"
10218         "mul r3, r17 \n\t"
10219         "add r23, r0 \n\t"
10220         "adc r24, r1 \n\t"
10221         "adc r22, r27 \n\t"
10222         "mul r4, r16 \n\t"
10223         "add r23, r0 \n\t"
10224         "adc r24, r1 \n\t"
10225         "adc r22, r27 \n\t"
10226         "mul r5, r15 \n\t"
10227         "add r23, r0 \n\t"
10228         "adc r24, r1 \n\t"
10229         "adc r22, r27 \n\t"
10230         "mul r6, r14 \n\t"
10231         "add r23, r0 \n\t"
10232         "adc r24, r1 \n\t"
10233         "adc r22, r27 \n\t"
10234         "mul r7, r13 \n\t"
10235         "add r23, r0 \n\t"
10236         "adc r24, r1 \n\t"
10237         "adc r22, r27 \n\t"
10238         "mul r8, r12 \n\t"
10239         "add r23, r0 \n\t"
10240         "adc r24, r1 \n\t"
10241         "adc r22, r27 \n\t"
10242         "mul r9, r11 \n\t"
10243         "add r23, r0 \n\t"
10244         "adc r24, r1 \n\t"
10245         "adc r22, r27 \n\t"
10246         "lsl r23 \n\t"
10247         "rol r24 \n\t"
10248         "rol r22 \n\t"
10249         "mul r10, r10 \n\t"
10250         "add r23, r0 \n\t"
10251         "adc r24, r1 \n\t"
10252         "adc r22, r27 \n\t"
10253         "add r23, r25 \n\t"
10254         "adc r24, r26 \n\t"
10255         "adc r22, r27 \n\t"
10256         "st z+, r23 \n\t"
10257
10258         "ldi r26, 0 \n\t"
10259         "mul r2, r19 \n\t"
10260         "mov r23, r0 \n\t"
10261         "mov r25, r1 \n\t"
10262         "mul r3, r18 \n\t"
10263         "add r23, r0 \n\t"
10264         "adc r25, r1 \n\t"
10265         "adc r26, r27 \n\t"
10266         "mul r4, r17 \n\t"
10267         "add r23, r0 \n\t"
10268         "adc r25, r1 \n\t"
10269         "adc r26, r27 \n\t"
10270         "mul r5, r16 \n\t"
10271         "add r23, r0 \n\t"
10272         "adc r25, r1 \n\t"
10273         "adc r26, r27 \n\t"
10274         "mul r6, r15 \n\t"
10275         "add r23, r0 \n\t"
10276         "adc r25, r1 \n\t"
10277         "adc r26, r27 \n\t"
10278         "mul r7, r14 \n\t"
10279         "add r23, r0 \n\t"
10280         "adc r25, r1 \n\t"
10281         "adc r26, r27 \n\t"
10282         "mul r8, r13 \n\t"
10283         "add r23, r0 \n\t"
10284         "adc r25, r1 \n\t"
10285         "adc r26, r27 \n\t"
10286         "mul r9, r12 \n\t"
10287         "add r23, r0 \n\t"
10288         "adc r25, r1 \n\t"
10289         "adc r26, r27 \n\t"
10290         "mul r10, r11 \n\t"
10291         "add r23, r0 \n\t"
10292         "adc r25, r1 \n\t"
10293         "adc r26, r27 \n\t"
10294         "lsl r23 \n\t"
10295         "rol r25 \n\t"
10296         "rol r26 \n\t"
10297         "add r23, r24 \n\t"
10298         "adc r25, r22 \n\t"
10299         "adc r26, r27 \n\t"
10300         "st z+, r23 \n\t"
10301
10302         "ldi r22, 0 \n\t"
10303         "mul r2, r20 \n\t"
10304         "mov r23, r0 \n\t"
10305         "mov r24, r1 \n\t"
10306         "mul r3, r19 \n\t"
10307         "add r23, r0 \n\t"
10308         "adc r24, r1 \n\t"
10309         "adc r22, r27 \n\t"
10310         "mul r4, r18 \n\t"
10311         "add r23, r0 \n\t"
10312         "adc r24, r1 \n\t"
10313         "adc r22, r27 \n\t"
10314         "mul r5, r17 \n\t"
10315         "add r23, r0 \n\t"
10316         "adc r24, r1 \n\t"
10317         "adc r22, r27 \n\t"
10318         "mul r6, r16 \n\t"
10319         "add r23, r0 \n\t"
10320         "adc r24, r1 \n\t"
10321         "adc r22, r27 \n\t"
10322         "mul r7, r15 \n\t"
10323         "add r23, r0 \n\t"
10324         "adc r24, r1 \n\t"
10325         "adc r22, r27 \n\t"
10326         "mul r8, r14 \n\t"
10327         "add r23, r0 \n\t"
10328         "adc r24, r1 \n\t"
10329         "adc r22, r27 \n\t"
10330         "mul r9, r13 \n\t"
10331         "add r23, r0 \n\t"
10332         "adc r24, r1 \n\t"
10333         "adc r22, r27 \n\t"
10334         "mul r10, r12 \n\t"
10335         "add r23, r0 \n\t"
10336         "adc r24, r1 \n\t"
10337         "adc r22, r27 \n\t"
10338         "lsl r23 \n\t"
10339         "rol r24 \n\t"
10340         "rol r22 \n\t"
10341         "mul r11, r11 \n\t"
10342         "add r23, r0 \n\t"
10343         "adc r24, r1 \n\t"
10344         "adc r22, r27 \n\t"
10345         "add r23, r25 \n\t"
10346         "adc r24, r26 \n\t"
10347         "adc r22, r27 \n\t"
10348         "st z+, r23 \n\t"
10349
10350         "ldi r26, 0 \n\t"
10351         "mul r2, r21 \n\t"
10352         "mov r23, r0 \n\t"
10353         "mov r25, r1 \n\t"
10354         "mul r3, r20 \n\t"
10355         "add r23, r0 \n\t"
10356         "adc r25, r1 \n\t"
10357         "adc r26, r27 \n\t"
10358         "mul r4, r19 \n\t"
10359         "add r23, r0 \n\t"
10360         "adc r25, r1 \n\t"
10361         "adc r26, r27 \n\t"
10362         "mul r5, r18 \n\t"
10363         "add r23, r0 \n\t"
10364         "adc r25, r1 \n\t"
10365         "adc r26, r27 \n\t"
10366         "mul r6, r17 \n\t"
10367         "add r23, r0 \n\t"
10368         "adc r25, r1 \n\t"
10369         "adc r26, r27 \n\t"
10370         "mul r7, r16 \n\t"
10371         "add r23, r0 \n\t"
10372         "adc r25, r1 \n\t"
10373         "adc r26, r27 \n\t"
10374         "mul r8, r15 \n\t"
10375         "add r23, r0 \n\t"
10376         "adc r25, r1 \n\t"
10377         "adc r26, r27 \n\t"
10378         "mul r9, r14 \n\t"
10379         "add r23, r0 \n\t"
10380         "adc r25, r1 \n\t"
10381         "adc r26, r27 \n\t"
10382         "mul r10, r13 \n\t"
10383         "add r23, r0 \n\t"
10384         "adc r25, r1 \n\t"
10385         "adc r26, r27 \n\t"
10386         "mul r11, r12 \n\t"
10387         "add r23, r0 \n\t"
10388         "adc r25, r1 \n\t"
10389         "adc r26, r27 \n\t"
10390         "lsl r23 \n\t"
10391         "rol r25 \n\t"
10392         "rol r26 \n\t"
10393         "add r23, r24 \n\t"
10394         "adc r25, r22 \n\t"
10395         "adc r26, r27 \n\t"
10396         "st z+, r23 \n\t"
10397
10398         "ldi r22, 0 \n\t"
10399         "mul r3, r21 \n\t"
10400         "mov r23, r0 \n\t"
10401         "mov r24, r1 \n\t"
10402         "mul r4, r20 \n\t"
10403         "add r23, r0 \n\t"
10404         "adc r24, r1 \n\t"
10405         "adc r22, r27 \n\t"
10406         "mul r5, r19 \n\t"
10407         "add r23, r0 \n\t"
10408         "adc r24, r1 \n\t"
10409         "adc r22, r27 \n\t"
10410         "mul r6, r18 \n\t"
10411         "add r23, r0 \n\t"
10412         "adc r24, r1 \n\t"
10413         "adc r22, r27 \n\t"
10414         "mul r7, r17 \n\t"
10415         "add r23, r0 \n\t"
10416         "adc r24, r1 \n\t"
10417         "adc r22, r27 \n\t"
10418         "mul r8, r16 \n\t"
10419         "add r23, r0 \n\t"
10420         "adc r24, r1 \n\t"
10421         "adc r22, r27 \n\t"
10422         "mul r9, r15 \n\t"
10423         "add r23, r0 \n\t"
10424         "adc r24, r1 \n\t"
10425         "adc r22, r27 \n\t"
10426         "mul r10, r14 \n\t"
10427         "add r23, r0 \n\t"
10428         "adc r24, r1 \n\t"
10429         "adc r22, r27 \n\t"
10430         "mul r11, r13 \n\t"
10431         "add r23, r0 \n\t"
10432         "adc r24, r1 \n\t"
10433         "adc r22, r27 \n\t"
10434         "lsl r23 \n\t"
10435         "rol r24 \n\t"
10436         "rol r22 \n\t"
10437         "mul r12, r12 \n\t"
10438         "add r23, r0 \n\t"
10439         "adc r24, r1 \n\t"
10440         "adc r22, r27 \n\t"
10441         "add r23, r25 \n\t"
10442         "adc r24, r26 \n\t"
10443         "adc r22, r27 \n\t"
10444         "st z+, r23 \n\t"
10445
10446         "ldi r26, 0 \n\t"
10447         "mul r4, r21 \n\t"
10448         "mov r23, r0 \n\t"
10449         "mov r25, r1 \n\t"
10450         "mul r5, r20 \n\t"
10451         "add r23, r0 \n\t"
10452         "adc r25, r1 \n\t"
10453         "adc r26, r27 \n\t"
10454         "mul r6, r19 \n\t"
10455         "add r23, r0 \n\t"
10456         "adc r25, r1 \n\t"
10457         "adc r26, r27 \n\t"
10458         "mul r7, r18 \n\t"
10459         "add r23, r0 \n\t"
10460         "adc r25, r1 \n\t"
10461         "adc r26, r27 \n\t"
10462         "mul r8, r17 \n\t"
10463         "add r23, r0 \n\t"
10464         "adc r25, r1 \n\t"
10465         "adc r26, r27 \n\t"
10466         "mul r9, r16 \n\t"
10467         "add r23, r0 \n\t"
10468         "adc r25, r1 \n\t"
10469         "adc r26, r27 \n\t"
10470         "mul r10, r15 \n\t"
10471         "add r23, r0 \n\t"
10472         "adc r25, r1 \n\t"
10473         "adc r26, r27 \n\t"
10474         "mul r11, r14 \n\t"
10475         "add r23, r0 \n\t"
10476         "adc r25, r1 \n\t"
10477         "adc r26, r27 \n\t"
10478         "mul r12, r13 \n\t"
10479         "add r23, r0 \n\t"
10480         "adc r25, r1 \n\t"
10481         "adc r26, r27 \n\t"
10482         "lsl r23 \n\t"
10483         "rol r25 \n\t"
10484         "rol r26 \n\t"
10485         "add r23, r24 \n\t"
10486         "adc r25, r22 \n\t"
10487         "adc r26, r27 \n\t"
10488         "st z+, r23 \n\t"
10489
10490         "ldi r22, 0 \n\t"
10491         "mul r5, r21 \n\t"
10492         "mov r23, r0 \n\t"
10493         "mov r24, r1 \n\t"
10494         "mul r6, r20 \n\t"
10495         "add r23, r0 \n\t"
10496         "adc r24, r1 \n\t"
10497         "adc r22, r27 \n\t"
10498         "mul r7, r19 \n\t"
10499         "add r23, r0 \n\t"
10500         "adc r24, r1 \n\t"
10501         "adc r22, r27 \n\t"
10502         "mul r8, r18 \n\t"
10503         "add r23, r0 \n\t"
10504         "adc r24, r1 \n\t"
10505         "adc r22, r27 \n\t"
10506         "mul r9, r17 \n\t"
10507         "add r23, r0 \n\t"
10508         "adc r24, r1 \n\t"
10509         "adc r22, r27 \n\t"
10510         "mul r10, r16 \n\t"
10511         "add r23, r0 \n\t"
10512         "adc r24, r1 \n\t"
10513         "adc r22, r27 \n\t"
10514         "mul r11, r15 \n\t"
10515         "add r23, r0 \n\t"
10516         "adc r24, r1 \n\t"
10517         "adc r22, r27 \n\t"
10518         "mul r12, r14 \n\t"
10519         "add r23, r0 \n\t"
10520         "adc r24, r1 \n\t"
10521         "adc r22, r27 \n\t"
10522         "lsl r23 \n\t"
10523         "rol r24 \n\t"
10524         "rol r22 \n\t"
10525         "mul r13, r13 \n\t"
10526         "add r23, r0 \n\t"
10527         "adc r24, r1 \n\t"
10528         "adc r22, r27 \n\t"
10529         "add r23, r25 \n\t"
10530         "adc r24, r26 \n\t"
10531         "adc r22, r27 \n\t"
10532         "st z+, r23 \n\t"
10533
10534         "ldi r26, 0 \n\t"
10535         "mul r6, r21 \n\t"
10536         "mov r23, r0 \n\t"
10537         "mov r25, r1 \n\t"
10538         "mul r7, r20 \n\t"
10539         "add r23, r0 \n\t"
10540         "adc r25, r1 \n\t"
10541         "adc r26, r27 \n\t"
10542         "mul r8, r19 \n\t"
10543         "add r23, r0 \n\t"
10544         "adc r25, r1 \n\t"
10545         "adc r26, r27 \n\t"
10546         "mul r9, r18 \n\t"
10547         "add r23, r0 \n\t"
10548         "adc r25, r1 \n\t"
10549         "adc r26, r27 \n\t"
10550         "mul r10, r17 \n\t"
10551         "add r23, r0 \n\t"
10552         "adc r25, r1 \n\t"
10553         "adc r26, r27 \n\t"
10554         "mul r11, r16 \n\t"
10555         "add r23, r0 \n\t"
10556         "adc r25, r1 \n\t"
10557         "adc r26, r27 \n\t"
10558         "mul r12, r15 \n\t"
10559         "add r23, r0 \n\t"
10560         "adc r25, r1 \n\t"
10561         "adc r26, r27 \n\t"
10562         "mul r13, r14 \n\t"
10563         "add r23, r0 \n\t"
10564         "adc r25, r1 \n\t"
10565         "adc r26, r27 \n\t"
10566         "lsl r23 \n\t"
10567         "rol r25 \n\t"
10568         "rol r26 \n\t"
10569         "add r23, r24 \n\t"
10570         "adc r25, r22 \n\t"
10571         "adc r26, r27 \n\t"
10572         "st z+, r23 \n\t"
10573
10574         "ldi r22, 0 \n\t"
10575         "mul r7, r21 \n\t"
10576         "mov r23, r0 \n\t"
10577         "mov r24, r1 \n\t"
10578         "mul r8, r20 \n\t"
10579         "add r23, r0 \n\t"
10580         "adc r24, r1 \n\t"
10581         "adc r22, r27 \n\t"
10582         "mul r9, r19 \n\t"
10583         "add r23, r0 \n\t"
10584         "adc r24, r1 \n\t"
10585         "adc r22, r27 \n\t"
10586         "mul r10, r18 \n\t"
10587         "add r23, r0 \n\t"
10588         "adc r24, r1 \n\t"
10589         "adc r22, r27 \n\t"
10590         "mul r11, r17 \n\t"
10591         "add r23, r0 \n\t"
10592         "adc r24, r1 \n\t"
10593         "adc r22, r27 \n\t"
10594         "mul r12, r16 \n\t"
10595         "add r23, r0 \n\t"
10596         "adc r24, r1 \n\t"
10597         "adc r22, r27 \n\t"
10598         "mul r13, r15 \n\t"
10599         "add r23, r0 \n\t"
10600         "adc r24, r1 \n\t"
10601         "adc r22, r27 \n\t"
10602         "lsl r23 \n\t"
10603         "rol r24 \n\t"
10604         "rol r22 \n\t"
10605         "mul r14, r14 \n\t"
10606         "add r23, r0 \n\t"
10607         "adc r24, r1 \n\t"
10608         "adc r22, r27 \n\t"
10609         "add r23, r25 \n\t"
10610         "adc r24, r26 \n\t"
10611         "adc r22, r27 \n\t"
10612         "st z+, r23 \n\t"
10613
10614         "ldi r26, 0 \n\t"
10615         "mul r8, r21 \n\t"
10616         "mov r23, r0 \n\t"
10617         "mov r25, r1 \n\t"
10618         "mul r9, r20 \n\t"
10619         "add r23, r0 \n\t"
10620         "adc r25, r1 \n\t"
10621         "adc r26, r27 \n\t"
10622         "mul r10, r19 \n\t"
10623         "add r23, r0 \n\t"
10624         "adc r25, r1 \n\t"
10625         "adc r26, r27 \n\t"
10626         "mul r11, r18 \n\t"
10627         "add r23, r0 \n\t"
10628         "adc r25, r1 \n\t"
10629         "adc r26, r27 \n\t"
10630         "mul r12, r17 \n\t"
10631         "add r23, r0 \n\t"
10632         "adc r25, r1 \n\t"
10633         "adc r26, r27 \n\t"
10634         "mul r13, r16 \n\t"
10635         "add r23, r0 \n\t"
10636         "adc r25, r1 \n\t"
10637         "adc r26, r27 \n\t"
10638         "mul r14, r15 \n\t"
10639         "add r23, r0 \n\t"
10640         "adc r25, r1 \n\t"
10641         "adc r26, r27 \n\t"
10642         "lsl r23 \n\t"
10643         "rol r25 \n\t"
10644         "rol r26 \n\t"
10645         "add r23, r24 \n\t"
10646         "adc r25, r22 \n\t"
10647         "adc r26, r27 \n\t"
10648         "st z+, r23 \n\t"
10649
10650         "ldi r22, 0 \n\t"
10651         "mul r9, r21 \n\t"
10652         "mov r23, r0 \n\t"
10653         "mov r24, r1 \n\t"
10654         "mul r10, r20 \n\t"
10655         "add r23, r0 \n\t"
10656         "adc r24, r1 \n\t"
10657         "adc r22, r27 \n\t"
10658         "mul r11, r19 \n\t"
10659         "add r23, r0 \n\t"
10660         "adc r24, r1 \n\t"
10661         "adc r22, r27 \n\t"
10662         "mul r12, r18 \n\t"
10663         "add r23, r0 \n\t"
10664         "adc r24, r1 \n\t"
10665         "adc r22, r27 \n\t"
10666         "mul r13, r17 \n\t"
10667         "add r23, r0 \n\t"
10668         "adc r24, r1 \n\t"
10669         "adc r22, r27 \n\t"
10670         "mul r14, r16 \n\t"
10671         "add r23, r0 \n\t"
10672         "adc r24, r1 \n\t"
10673         "adc r22, r27 \n\t"
10674         "lsl r23 \n\t"
10675         "rol r24 \n\t"
10676         "rol r22 \n\t"
10677         "mul r15, r15 \n\t"
10678         "add r23, r0 \n\t"
10679         "adc r24, r1 \n\t"
10680         "adc r22, r27 \n\t"
10681         "add r23, r25 \n\t"
10682         "adc r24, r26 \n\t"
10683         "adc r22, r27 \n\t"
10684         "st z+, r23 \n\t"
10685
10686         "ldi r26, 0 \n\t"
10687         "mul r10, r21 \n\t"
10688         "mov r23, r0 \n\t"
10689         "mov r25, r1 \n\t"
10690         "mul r11, r20 \n\t"
10691         "add r23, r0 \n\t"
10692         "adc r25, r1 \n\t"
10693         "adc r26, r27 \n\t"
10694         "mul r12, r19 \n\t"
10695         "add r23, r0 \n\t"
10696         "adc r25, r1 \n\t"
10697         "adc r26, r27 \n\t"
10698         "mul r13, r18 \n\t"
10699         "add r23, r0 \n\t"
10700         "adc r25, r1 \n\t"
10701         "adc r26, r27 \n\t"
10702         "mul r14, r17 \n\t"
10703         "add r23, r0 \n\t"
10704         "adc r25, r1 \n\t"
10705         "adc r26, r27 \n\t"
10706         "mul r15, r16 \n\t"
10707         "add r23, r0 \n\t"
10708         "adc r25, r1 \n\t"
10709         "adc r26, r27 \n\t"
10710         "lsl r23 \n\t"
10711         "rol r25 \n\t"
10712         "rol r26 \n\t"
10713         "add r23, r24 \n\t"
10714         "adc r25, r22 \n\t"
10715         "adc r26, r27 \n\t"
10716         "st z+, r23 \n\t"
10717
10718         "ldi r22, 0 \n\t"
10719         "mul r11, r21 \n\t"
10720         "mov r23, r0 \n\t"
10721         "mov r24, r1 \n\t"
10722         "mul r12, r20 \n\t"
10723         "add r23, r0 \n\t"
10724         "adc r24, r1 \n\t"
10725         "adc r22, r27 \n\t"
10726         "mul r13, r19 \n\t"
10727         "add r23, r0 \n\t"
10728         "adc r24, r1 \n\t"
10729         "adc r22, r27 \n\t"
10730         "mul r14, r18 \n\t"
10731         "add r23, r0 \n\t"
10732         "adc r24, r1 \n\t"
10733         "adc r22, r27 \n\t"
10734         "mul r15, r17 \n\t"
10735         "add r23, r0 \n\t"
10736         "adc r24, r1 \n\t"
10737         "adc r22, r27 \n\t"
10738         "lsl r23 \n\t"
10739         "rol r24 \n\t"
10740         "rol r22 \n\t"
10741         "mul r16, r16 \n\t"
10742         "add r23, r0 \n\t"
10743         "adc r24, r1 \n\t"
10744         "adc r22, r27 \n\t"
10745         "add r23, r25 \n\t"
10746         "adc r24, r26 \n\t"
10747         "adc r22, r27 \n\t"
10748         "st z+, r23 \n\t"
10749
10750         "ldi r26, 0 \n\t"
10751         "mul r12, r21 \n\t"
10752         "mov r23, r0 \n\t"
10753         "mov r25, r1 \n\t"
10754         "mul r13, r20 \n\t"
10755         "add r23, r0 \n\t"
10756         "adc r25, r1 \n\t"
10757         "adc r26, r27 \n\t"
10758         "mul r14, r19 \n\t"
10759         "add r23, r0 \n\t"
10760         "adc r25, r1 \n\t"
10761         "adc r26, r27 \n\t"
10762         "mul r15, r18 \n\t"
10763         "add r23, r0 \n\t"
10764         "adc r25, r1 \n\t"
10765         "adc r26, r27 \n\t"
10766         "mul r16, r17 \n\t"
10767         "add r23, r0 \n\t"
10768         "adc r25, r1 \n\t"
10769         "adc r26, r27 \n\t"
10770         "lsl r23 \n\t"
10771         "rol r25 \n\t"
10772         "rol r26 \n\t"
10773         "add r23, r24 \n\t"
10774         "adc r25, r22 \n\t"
10775         "adc r26, r27 \n\t"
10776         "st z+, r23 \n\t"
10777
10778         "ldi r22, 0 \n\t"
10779         "mul r13, r21 \n\t"
10780         "mov r23, r0 \n\t"
10781         "mov r24, r1 \n\t"
10782         "mul r14, r20 \n\t"
10783         "add r23, r0 \n\t"
10784         "adc r24, r1 \n\t"
10785         "adc r22, r27 \n\t"
10786         "mul r15, r19 \n\t"
10787         "add r23, r0 \n\t"
10788         "adc r24, r1 \n\t"
10789         "adc r22, r27 \n\t"
10790         "mul r16, r18 \n\t"
10791         "add r23, r0 \n\t"
10792         "adc r24, r1 \n\t"
10793         "adc r22, r27 \n\t"
10794         "lsl r23 \n\t"
10795         "rol r24 \n\t"
10796         "rol r22 \n\t"
10797         "mul r17, r17 \n\t"
10798         "add r23, r0 \n\t"
10799         "adc r24, r1 \n\t"
10800         "adc r22, r27 \n\t"
10801         "add r23, r25 \n\t"
10802         "adc r24, r26 \n\t"
10803         "adc r22, r27 \n\t"
10804         "st z+, r23 \n\t"
10805
10806         "ldi r26, 0 \n\t"
10807         "mul r14, r21 \n\t"
10808         "mov r23, r0 \n\t"
10809         "mov r25, r1 \n\t"
10810         "mul r15, r20 \n\t"
10811         "add r23, r0 \n\t"
10812         "adc r25, r1 \n\t"
10813         "adc r26, r27 \n\t"
10814         "mul r16, r19 \n\t"
10815         "add r23, r0 \n\t"
10816         "adc r25, r1 \n\t"
10817         "adc r26, r27 \n\t"
10818         "mul r17, r18 \n\t"
10819         "add r23, r0 \n\t"
10820         "adc r25, r1 \n\t"
10821         "adc r26, r27 \n\t"
10822         "lsl r23 \n\t"
10823         "rol r25 \n\t"
10824         "rol r26 \n\t"
10825         "add r23, r24 \n\t"
10826         "adc r25, r22 \n\t"
10827         "adc r26, r27 \n\t"
10828         "st z+, r23 \n\t"
10829
10830         "ldi r22, 0 \n\t"
10831         "mul r15, r21 \n\t"
10832         "mov r23, r0 \n\t"
10833         "mov r24, r1 \n\t"
10834         "mul r16, r20 \n\t"
10835         "add r23, r0 \n\t"
10836         "adc r24, r1 \n\t"
10837         "adc r22, r27 \n\t"
10838         "mul r17, r19 \n\t"
10839         "add r23, r0 \n\t"
10840         "adc r24, r1 \n\t"
10841         "adc r22, r27 \n\t"
10842         "lsl r23 \n\t"
10843         "rol r24 \n\t"
10844         "rol r22 \n\t"
10845         "mul r18, r18 \n\t"
10846         "add r23, r0 \n\t"
10847         "adc r24, r1 \n\t"
10848         "adc r22, r27 \n\t"
10849         "add r23, r25 \n\t"
10850         "adc r24, r26 \n\t"
10851         "adc r22, r27 \n\t"
10852         "st z+, r23 \n\t"
10853
10854         "ldi r26, 0 \n\t"
10855         "mul r16, r21 \n\t"
10856         "mov r23, r0 \n\t"
10857         "mov r25, r1 \n\t"
10858         "mul r17, r20 \n\t"
10859         "add r23, r0 \n\t"
10860         "adc r25, r1 \n\t"
10861         "adc r26, r27 \n\t"
10862         "mul r18, r19 \n\t"
10863         "add r23, r0 \n\t"
10864         "adc r25, r1 \n\t"
10865         "adc r26, r27 \n\t"
10866         "lsl r23 \n\t"
10867         "rol r25 \n\t"
10868         "rol r26 \n\t"
10869         "add r23, r24 \n\t"
10870         "adc r25, r22 \n\t"
10871         "adc r26, r27 \n\t"
10872         "st z+, r23 \n\t"
10873
10874         "ldi r22, 0 \n\t"
10875         "mul r17, r21 \n\t"
10876         "mov r23, r0 \n\t"
10877         "mov r24, r1 \n\t"
10878         "mul r18, r20 \n\t"
10879         "add r23, r0 \n\t"
10880         "adc r24, r1 \n\t"
10881         "adc r22, r27 \n\t"
10882         "lsl r23 \n\t"
10883         "rol r24 \n\t"
10884         "rol r22 \n\t"
10885         "mul r19, r19 \n\t"
10886         "add r23, r0 \n\t"
10887         "adc r24, r1 \n\t"
10888         "adc r22, r27 \n\t"
10889         "add r23, r25 \n\t"
10890         "adc r24, r26 \n\t"
10891         "adc r22, r27 \n\t"
10892         "st z+, r23 \n\t"
10893
10894         "ldi r26, 0 \n\t"
10895         "mul r18, r21 \n\t"
10896         "mov r23, r0 \n\t"
10897         "mov r25, r1 \n\t"
10898         "mul r19, r20 \n\t"
10899         "add r23, r0 \n\t"
10900         "adc r25, r1 \n\t"
10901         "adc r26, r27 \n\t"
10902         "lsl r23 \n\t"
10903         "rol r25 \n\t"
10904         "rol r26 \n\t"
10905         "add r23, r24 \n\t"
10906         "adc r25, r22 \n\t"
10907         "adc r26, r27 \n\t"
10908         "st z+, r23 \n\t"
10909
10910         "ldi r23, 0 \n\t"
10911         "mul r19, r21 \n\t"
10912         "lsl r0 \n\t"
10913         "rol r1 \n\t"
10914         "adc r23, r27 \n\t"
10915         "add r25, r0 \n\t"
10916         "adc r26, r1 \n\t"
10917         "adc r23, r27 \n\t"
10918         "mul r20, r20 \n\t"
10919         "add r25, r0 \n\t"
10920         "adc r26, r1 \n\t"
10921         "adc r23, r27 \n\t"
10922         "st z+, r25 \n\t"
10923
10924         "ldi r25, 0 \n\t"
10925         "mul r20, r21 \n\t"
10926         "lsl r0 \n\t"
10927         "rol r1 \n\t"
10928         "adc r25, r27 \n\t"
10929         "add r26, r0 \n\t"
10930         "adc r23, r1 \n\t"
10931         "adc r25, r27 \n\t"
10932         "st z+, r26 \n\t"
10933
10934         "mul r21, r21 \n\t"
10935         "add r23, r0 \n\t"
10936         "adc r25, r1 \n\t"
10937         "st z+, r23 \n\t"
10938         "st z+, r25 \n\t"
10939         "eor r1, r1 \n\t"
10940         : "+x" (p_left), "+z" (p_result)
10941         :
10942         : "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12",
10943           "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "cc", "memory"
10944     );
10945 }
10946 #define asm_square 1
10947
10948 #elif (uECC_BYTES == 24)
10949
10950 __attribute((noinline))
10951 static void vli_square(uint8_t *p_result, uint8_t *p_left)
10952 {
10953     __asm__ volatile (
10954         "ldi r25, 0 \n\t"
10955         "movw r28, r26 \n\t"
10956         "ld r2, x+ \n\t"
10957         "ld r3, x+ \n\t"
10958         "adiw r28, 20 \n\t"
10959         "ld r12, y+ \n\t"
10960         "ld r13, y+ \n\t"
10961         "adiw r30, 20 \n\t"
10962         
10963         "ldi r23, 0 \n\t"
10964         "mul 2, 12 \n\t"
10965         "st z+, r0 \n\t"
10966         "mov r22, r1 \n\t"
10967         
10968         "ldi r24, 0 \n\t"
10969         "mul r2, r13 \n\t"
10970         "add r22, r0 \n\t"
10971         "adc r23, r1 \n\t"
10972         "adc r24, r25 \n\t"
10973         "st z+, r22 \n\t"
10974         
10975         "ld r12, y+ \n\t"
10976         "ldi r22, 0 \n\t"
10977         "mul r2, r12 \n\t"
10978         "add r23, r0 \n\t"
10979         "adc r24, r1 \n\t"
10980         "adc r22, r25 \n\t"
10981         "mul r3, r13 \n\t"
10982         "add r23, r0 \n\t"
10983         "adc r24, r1 \n\t"
10984         "adc r22, r25 \n\t"
10985         "st z+, r23 \n\t"
10986         
10987         "ld r13, y+ \n\t"
10988         "ldi r23, 0 \n\t"
10989         "mul r2, r13 \n\t"
10990         "add r24, r0 \n\t"
10991         "adc r22, r1 \n\t"
10992         "adc r23, r25 \n\t"
10993         "mul r3, r12 \n\t"
10994         "add r24, r0 \n\t"
10995         "adc r22, r1 \n\t"
10996         "adc r23, r25 \n\t"
10997         "st z+, r24 \n\t"
10998         
10999         "ld r2, x+ \n\t"
11000         "ldi r24, 0 \n\t"
11001         "mul r3, r13 \n\t"
11002         "add r22, r0 \n\t"
11003         "adc r23, r1 \n\t"
11004         "adc r24, r25 \n\t"
11005         "mul r2, r12 \n\t"
11006         "add r22, r0 \n\t"
11007         "adc r23, r1 \n\t"
11008         "adc r24, r25 \n\t"
11009         "st z+, r22 \n\t"
11010         
11011         "ld r3, x+ \n\t"
11012         "ldi r22, 0 \n\t"
11013         "mul r2, r13 \n\t"
11014         "add r23, r0 \n\t"
11015         "adc r24, r1 \n\t"
11016         "adc r22, r25 \n\t"
11017         "st z+, r23 \n\t"
11018         
11019         "mul r3, r13 \n\t"
11020         "add r24, r0 \n\t"
11021         "adc r22, r1 \n\t"
11022         "st z+, r24 \n\t"
11023         "st z+, r22 \n\t"
11024         
11025         "sbiw r26, 4 \n\t"
11026         "sbiw r30, 28 \n\t"
11027         "ld r2, x+ \n\t"
11028         "ld r3, x+ \n\t"
11029         "ld r4, x+ \n\t"
11030         "ld r5, x+ \n\t"
11031         "ld r6, x+ \n\t"
11032         "ld r7, x+ \n\t"
11033         "ld r8, x+ \n\t"
11034         "ld r9, x+ \n\t"
11035         "ld r10, x+ \n\t"
11036         "ld r11, x+ \n\t"
11037         "ld r12, x+ \n\t"
11038         "ld r13, x+ \n\t"
11039         "ld r14, x+ \n\t"
11040         "ld r15, x+ \n\t"
11041         "ld r16, x+ \n\t"
11042         "ld r17, x+ \n\t"
11043         "ld r18, x+ \n\t"
11044         "ld r19, x+ \n\t"
11045         "ld r20, x+ \n\t"
11046         "ld r21, x+ \n\t"
11047         
11048         "ldi r23, 0 \n\t"
11049         "mul r2, r2 \n\t"
11050         "st z+, r0 \n\t"
11051         "mov r22, r1 \n\t"
11052         
11053         "ldi r24, 0 \n\t"
11054         "mul r2, r3 \n\t"
11055         "add r22, r0 \n\t"
11056         "adc r23, r1 \n\t"
11057         "adc r24, r25 \n\t"
11058         "add r22, r0 \n\t"
11059         "adc r23, r1 \n\t"
11060         "adc r24, r25 \n\t"
11061         "st z+, r22 \n\t"
11062         
11063         "ldi r22, 0 \n\t"
11064         "mul r2, r4 \n\t"
11065         "add r23, r0 \n\t"
11066         "adc r24, r1 \n\t"
11067         "adc r22, r25 \n\t"
11068         "add r23, r0 \n\t"
11069         "adc r24, r1 \n\t"
11070         "adc r22, r25 \n\t"
11071         "mul r3, r3 \n\t"
11072         "add r23, r0 \n\t"
11073         "adc r24, r1 \n\t"
11074         "adc r22, r25 \n\t"
11075         "st z+, r23 \n\t"
11076         
11077         "ldi r29, 0 \n\t"
11078         "mul r2, r5 \n\t"
11079         "mov r23, r0 \n\t"
11080         "mov r28, r1 \n\t"
11081         "mul r3, r4 \n\t"
11082         "add r23, r0 \n\t"
11083         "adc r28, r1 \n\t"
11084         "adc r29, r25 \n\t"
11085         "lsl r23 \n\t"
11086         "rol r28 \n\t"
11087         "rol r29 \n\t"
11088         "add r23, r24 \n\t"
11089         "adc r28, r22 \n\t"
11090         "adc r29, r25 \n\t"
11091         "st z+, r23 \n\t"
11092         
11093         "ldi r22, 0 \n\t"
11094         "mul r2, r6 \n\t"
11095         "mov r23, r0 \n\t"
11096         "mov r24, r1 \n\t"
11097         "mul r3, r5 \n\t"
11098         "add r23, r0 \n\t"
11099         "adc r24, r1 \n\t"
11100         "adc r22, r25 \n\t"
11101         "lsl r23 \n\t"
11102         "rol r24 \n\t"
11103         "rol r22 \n\t"
11104         "mul r4, r4 \n\t"
11105         "add r23, r0 \n\t"
11106         "adc r24, r1 \n\t"
11107         "adc r22, r25 \n\t"
11108         "add r23, r28 \n\t"
11109         "adc r24, r29 \n\t"
11110         "adc r22, r25 \n\t"
11111         "st z+, r23 \n\t"
11112         
11113         "ldi r29, 0 \n\t"
11114         "mul r2, r7 \n\t"
11115         "mov r23, r0 \n\t"
11116         "mov r28, r1 \n\t"
11117         "mul r3, r6 \n\t"
11118         "add r23, r0 \n\t"
11119         "adc r28, r1 \n\t"
11120         "adc r29, r25 \n\t"
11121         "mul r4, r5 \n\t"
11122         "add r23, r0 \n\t"
11123         "adc r28, r1 \n\t"
11124         "adc r29, r25 \n\t"
11125         "lsl r23 \n\t"
11126         "rol r28 \n\t"
11127         "rol r29 \n\t"
11128         "add r23, r24 \n\t"
11129         "adc r28, r22 \n\t"
11130         "adc r29, r25 \n\t"
11131         "st z+, r23 \n\t"
11132         
11133         "ldi r22, 0 \n\t"
11134         "mul r2, r8 \n\t"
11135         "mov r23, r0 \n\t"
11136         "mov r24, r1 \n\t"
11137         "mul r3, r7 \n\t"
11138         "add r23, r0 \n\t"
11139         "adc r24, r1 \n\t"
11140         "adc r22, r25 \n\t"
11141         "mul r4, r6 \n\t"
11142         "add r23, r0 \n\t"
11143         "adc r24, r1 \n\t"
11144         "adc r22, r25 \n\t"
11145         "lsl r23 \n\t"
11146         "rol r24 \n\t"
11147         "rol r22 \n\t"
11148         "mul r5, r5 \n\t"
11149         "add r23, r0 \n\t"
11150         "adc r24, r1 \n\t"
11151         "adc r22, r25 \n\t"
11152         "add r23, r28 \n\t"
11153         "adc r24, r29 \n\t"
11154         "adc r22, r25 \n\t"
11155         "st z+, r23 \n\t"
11156         
11157         "ldi r29, 0 \n\t"
11158         "mul r2, r9 \n\t"
11159         "mov r23, r0 \n\t"
11160         "mov r28, r1 \n\t"
11161         "mul r3, r8 \n\t"
11162         "add r23, r0 \n\t"
11163         "adc r28, r1 \n\t"
11164         "adc r29, r25 \n\t"
11165         "mul r4, r7 \n\t"
11166         "add r23, r0 \n\t"
11167         "adc r28, r1 \n\t"
11168         "adc r29, r25 \n\t"
11169         "mul r5, r6 \n\t"
11170         "add r23, r0 \n\t"
11171         "adc r28, r1 \n\t"
11172         "adc r29, r25 \n\t"
11173         "lsl r23 \n\t"
11174         "rol r28 \n\t"
11175         "rol r29 \n\t"
11176         "add r23, r24 \n\t"
11177         "adc r28, r22 \n\t"
11178         "adc r29, r25 \n\t"
11179         "st z+, r23 \n\t"
11180         
11181         "ldi r22, 0 \n\t"
11182         "mul r2, r10 \n\t"
11183         "mov r23, r0 \n\t"
11184         "mov r24, r1 \n\t"
11185         "mul r3, r9 \n\t"
11186         "add r23, r0 \n\t"
11187         "adc r24, r1 \n\t"
11188         "adc r22, r25 \n\t"
11189         "mul r4, r8 \n\t"
11190         "add r23, r0 \n\t"
11191         "adc r24, r1 \n\t"
11192         "adc r22, r25 \n\t"
11193         "mul r5, r7 \n\t"
11194         "add r23, r0 \n\t"
11195         "adc r24, r1 \n\t"
11196         "adc r22, r25 \n\t"
11197         "lsl r23 \n\t"
11198         "rol r24 \n\t"
11199         "rol r22 \n\t"
11200         "mul r6, r6 \n\t"
11201         "add r23, r0 \n\t"
11202         "adc r24, r1 \n\t"
11203         "adc r22, r25 \n\t"
11204         "add r23, r28 \n\t"
11205         "adc r24, r29 \n\t"
11206         "adc r22, r25 \n\t"
11207         "st z+, r23 \n\t"
11208         
11209         "ldi r29, 0 \n\t"
11210         "mul r2, r11 \n\t"
11211         "mov r23, r0 \n\t"
11212         "mov r28, r1 \n\t"
11213         "mul r3, r10 \n\t"
11214         "add r23, r0 \n\t"
11215         "adc r28, r1 \n\t"
11216         "adc r29, r25 \n\t"
11217         "mul r4, r9 \n\t"
11218         "add r23, r0 \n\t"
11219         "adc r28, r1 \n\t"
11220         "adc r29, r25 \n\t"
11221         "mul r5, r8 \n\t"
11222         "add r23, r0 \n\t"
11223         "adc r28, r1 \n\t"
11224         "adc r29, r25 \n\t"
11225         "mul r6, r7 \n\t"
11226         "add r23, r0 \n\t"
11227         "adc r28, r1 \n\t"
11228         "adc r29, r25 \n\t"
11229         "lsl r23 \n\t"
11230         "rol r28 \n\t"
11231         "rol r29 \n\t"
11232         "add r23, r24 \n\t"
11233         "adc r28, r22 \n\t"
11234         "adc r29, r25 \n\t"
11235         "st z+, r23 \n\t"
11236         
11237         "ldi r22, 0 \n\t"
11238         "mul r2, r12 \n\t"
11239         "mov r23, r0 \n\t"
11240         "mov r24, r1 \n\t"
11241         "mul r3, r11 \n\t"
11242         "add r23, r0 \n\t"
11243         "adc r24, r1 \n\t"
11244         "adc r22, r25 \n\t"
11245         "mul r4, r10 \n\t"
11246         "add r23, r0 \n\t"
11247         "adc r24, r1 \n\t"
11248         "adc r22, r25 \n\t"
11249         "mul r5, r9 \n\t"
11250         "add r23, r0 \n\t"
11251         "adc r24, r1 \n\t"
11252         "adc r22, r25 \n\t"
11253         "mul r6, r8 \n\t"
11254         "add r23, r0 \n\t"
11255         "adc r24, r1 \n\t"
11256         "adc r22, r25 \n\t"
11257         "lsl r23 \n\t"
11258         "rol r24 \n\t"
11259         "rol r22 \n\t"
11260         "mul r7, r7 \n\t"
11261         "add r23, r0 \n\t"
11262         "adc r24, r1 \n\t"
11263         "adc r22, r25 \n\t"
11264         "add r23, r28 \n\t"
11265         "adc r24, r29 \n\t"
11266         "adc r22, r25 \n\t"
11267         "st z+, r23 \n\t"
11268         
11269         "ldi r29, 0 \n\t"
11270         "mul r2, r13 \n\t"
11271         "mov r23, r0 \n\t"
11272         "mov r28, r1 \n\t"
11273         "mul r3, r12 \n\t"
11274         "add r23, r0 \n\t"
11275         "adc r28, r1 \n\t"
11276         "adc r29, r25 \n\t"
11277         "mul r4, r11 \n\t"
11278         "add r23, r0 \n\t"
11279         "adc r28, r1 \n\t"
11280         "adc r29, r25 \n\t"
11281         "mul r5, r10 \n\t"
11282         "add r23, r0 \n\t"
11283         "adc r28, r1 \n\t"
11284         "adc r29, r25 \n\t"
11285         "mul r6, r9 \n\t"
11286         "add r23, r0 \n\t"
11287         "adc r28, r1 \n\t"
11288         "adc r29, r25 \n\t"
11289         "mul r7, r8 \n\t"
11290         "add r23, r0 \n\t"
11291         "adc r28, r1 \n\t"
11292         "adc r29, r25 \n\t"
11293         "lsl r23 \n\t"
11294         "rol r28 \n\t"
11295         "rol r29 \n\t"
11296         "add r23, r24 \n\t"
11297         "adc r28, r22 \n\t"
11298         "adc r29, r25 \n\t"
11299         "st z+, r23 \n\t"
11300         
11301         "ldi r22, 0 \n\t"
11302         "mul r2, r14 \n\t"
11303         "mov r23, r0 \n\t"
11304         "mov r24, r1 \n\t"
11305         "mul r3, r13 \n\t"
11306         "add r23, r0 \n\t"
11307         "adc r24, r1 \n\t"
11308         "adc r22, r25 \n\t"
11309         "mul r4, r12 \n\t"
11310         "add r23, r0 \n\t"
11311         "adc r24, r1 \n\t"
11312         "adc r22, r25 \n\t"
11313         "mul r5, r11 \n\t"
11314         "add r23, r0 \n\t"
11315         "adc r24, r1 \n\t"
11316         "adc r22, r25 \n\t"
11317         "mul r6, r10 \n\t"
11318         "add r23, r0 \n\t"
11319         "adc r24, r1 \n\t"
11320         "adc r22, r25 \n\t"
11321         "mul r7, r9 \n\t"
11322         "add r23, r0 \n\t"
11323         "adc r24, r1 \n\t"
11324         "adc r22, r25 \n\t"
11325         "lsl r23 \n\t"
11326         "rol r24 \n\t"
11327         "rol r22 \n\t"
11328         "mul r8, r8 \n\t"
11329         "add r23, r0 \n\t"
11330         "adc r24, r1 \n\t"
11331         "adc r22, r25 \n\t"
11332         "add r23, r28 \n\t"
11333         "adc r24, r29 \n\t"
11334         "adc r22, r25 \n\t"
11335         "st z+, r23 \n\t"
11336         
11337         "ldi r29, 0 \n\t"
11338         "mul r2, r15 \n\t"
11339         "mov r23, r0 \n\t"
11340         "mov r28, r1 \n\t"
11341         "mul r3, r14 \n\t"
11342         "add r23, r0 \n\t"
11343         "adc r28, r1 \n\t"
11344         "adc r29, r25 \n\t"
11345         "mul r4, r13 \n\t"
11346         "add r23, r0 \n\t"
11347         "adc r28, r1 \n\t"
11348         "adc r29, r25 \n\t"
11349         "mul r5, r12 \n\t"
11350         "add r23, r0 \n\t"
11351         "adc r28, r1 \n\t"
11352         "adc r29, r25 \n\t"
11353         "mul r6, r11 \n\t"
11354         "add r23, r0 \n\t"
11355         "adc r28, r1 \n\t"
11356         "adc r29, r25 \n\t"
11357         "mul r7, r10 \n\t"
11358         "add r23, r0 \n\t"
11359         "adc r28, r1 \n\t"
11360         "adc r29, r25 \n\t"
11361         "mul r8, r9 \n\t"
11362         "add r23, r0 \n\t"
11363         "adc r28, r1 \n\t"
11364         "adc r29, r25 \n\t"
11365         "lsl r23 \n\t"
11366         "rol r28 \n\t"
11367         "rol r29 \n\t"
11368         "add r23, r24 \n\t"
11369         "adc r28, r22 \n\t"
11370         "adc r29, r25 \n\t"
11371         "st z+, r23 \n\t"
11372         
11373         "ldi r22, 0 \n\t"
11374         "mul r2, r16 \n\t"
11375         "mov r23, r0 \n\t"
11376         "mov r24, r1 \n\t"
11377         "mul r3, r15 \n\t"
11378         "add r23, r0 \n\t"
11379         "adc r24, r1 \n\t"
11380         "adc r22, r25 \n\t"
11381         "mul r4, r14 \n\t"
11382         "add r23, r0 \n\t"
11383         "adc r24, r1 \n\t"
11384         "adc r22, r25 \n\t"
11385         "mul r5, r13 \n\t"
11386         "add r23, r0 \n\t"
11387         "adc r24, r1 \n\t"
11388         "adc r22, r25 \n\t"
11389         "mul r6, r12 \n\t"
11390         "add r23, r0 \n\t"
11391         "adc r24, r1 \n\t"
11392         "adc r22, r25 \n\t"
11393         "mul r7, r11 \n\t"
11394         "add r23, r0 \n\t"
11395         "adc r24, r1 \n\t"
11396         "adc r22, r25 \n\t"
11397         "mul r8, r10 \n\t"
11398         "add r23, r0 \n\t"
11399         "adc r24, r1 \n\t"
11400         "adc r22, r25 \n\t"
11401         "lsl r23 \n\t"
11402         "rol r24 \n\t"
11403         "rol r22 \n\t"
11404         "mul r9, r9 \n\t"
11405         "add r23, r0 \n\t"
11406         "adc r24, r1 \n\t"
11407         "adc r22, r25 \n\t"
11408         "add r23, r28 \n\t"
11409         "adc r24, r29 \n\t"
11410         "adc r22, r25 \n\t"
11411         "st z+, r23 \n\t"
11412         
11413         "ldi r29, 0 \n\t"
11414         "mul r2, r17 \n\t"
11415         "mov r23, r0 \n\t"
11416         "mov r28, r1 \n\t"
11417         "mul r3, r16 \n\t"
11418         "add r23, r0 \n\t"
11419         "adc r28, r1 \n\t"
11420         "adc r29, r25 \n\t"
11421         "mul r4, r15 \n\t"
11422         "add r23, r0 \n\t"
11423         "adc r28, r1 \n\t"
11424         "adc r29, r25 \n\t"
11425         "mul r5, r14 \n\t"
11426         "add r23, r0 \n\t"
11427         "adc r28, r1 \n\t"
11428         "adc r29, r25 \n\t"
11429         "mul r6, r13 \n\t"
11430         "add r23, r0 \n\t"
11431         "adc r28, r1 \n\t"
11432         "adc r29, r25 \n\t"
11433         "mul r7, r12 \n\t"
11434         "add r23, r0 \n\t"
11435         "adc r28, r1 \n\t"
11436         "adc r29, r25 \n\t"
11437         "mul r8, r11 \n\t"
11438         "add r23, r0 \n\t"
11439         "adc r28, r1 \n\t"
11440         "adc r29, r25 \n\t"
11441         "mul r9, r10 \n\t"
11442         "add r23, r0 \n\t"
11443         "adc r28, r1 \n\t"
11444         "adc r29, r25 \n\t"
11445         "lsl r23 \n\t"
11446         "rol r28 \n\t"
11447         "rol r29 \n\t"
11448         "add r23, r24 \n\t"
11449         "adc r28, r22 \n\t"
11450         "adc r29, r25 \n\t"
11451         "st z+, r23 \n\t"
11452         
11453         "ldi r22, 0 \n\t"
11454         "mul r2, r18 \n\t"
11455         "mov r23, r0 \n\t"
11456         "mov r24, r1 \n\t"
11457         "mul r3, r17 \n\t"
11458         "add r23, r0 \n\t"
11459         "adc r24, r1 \n\t"
11460         "adc r22, r25 \n\t"
11461         "mul r4, r16 \n\t"
11462         "add r23, r0 \n\t"
11463         "adc r24, r1 \n\t"
11464         "adc r22, r25 \n\t"
11465         "mul r5, r15 \n\t"
11466         "add r23, r0 \n\t"
11467         "adc r24, r1 \n\t"
11468         "adc r22, r25 \n\t"
11469         "mul r6, r14 \n\t"
11470         "add r23, r0 \n\t"
11471         "adc r24, r1 \n\t"
11472         "adc r22, r25 \n\t"
11473         "mul r7, r13 \n\t"
11474         "add r23, r0 \n\t"
11475         "adc r24, r1 \n\t"
11476         "adc r22, r25 \n\t"
11477         "mul r8, r12 \n\t"
11478         "add r23, r0 \n\t"
11479         "adc r24, r1 \n\t"
11480         "adc r22, r25 \n\t"
11481         "mul r9, r11 \n\t"
11482         "add r23, r0 \n\t"
11483         "adc r24, r1 \n\t"
11484         "adc r22, r25 \n\t"
11485         "lsl r23 \n\t"
11486         "rol r24 \n\t"
11487         "rol r22 \n\t"
11488         "mul r10, r10 \n\t"
11489         "add r23, r0 \n\t"
11490         "adc r24, r1 \n\t"
11491         "adc r22, r25 \n\t"
11492         "add r23, r28 \n\t"
11493         "adc r24, r29 \n\t"
11494         "adc r22, r25 \n\t"
11495         "st z+, r23 \n\t"
11496         
11497         "ldi r29, 0 \n\t"
11498         "mul r2, r19 \n\t"
11499         "mov r23, r0 \n\t"
11500         "mov r28, r1 \n\t"
11501         "mul r3, r18 \n\t"
11502         "add r23, r0 \n\t"
11503         "adc r28, r1 \n\t"
11504         "adc r29, r25 \n\t"
11505         "mul r4, r17 \n\t"
11506         "add r23, r0 \n\t"
11507         "adc r28, r1 \n\t"
11508         "adc r29, r25 \n\t"
11509         "mul r5, r16 \n\t"
11510         "add r23, r0 \n\t"
11511         "adc r28, r1 \n\t"
11512         "adc r29, r25 \n\t"
11513         "mul r6, r15 \n\t"
11514         "add r23, r0 \n\t"
11515         "adc r28, r1 \n\t"
11516         "adc r29, r25 \n\t"
11517         "mul r7, r14 \n\t"
11518         "add r23, r0 \n\t"
11519         "adc r28, r1 \n\t"
11520         "adc r29, r25 \n\t"
11521         "mul r8, r13 \n\t"
11522         "add r23, r0 \n\t"
11523         "adc r28, r1 \n\t"
11524         "adc r29, r25 \n\t"
11525         "mul r9, r12 \n\t"
11526         "add r23, r0 \n\t"
11527         "adc r28, r1 \n\t"
11528         "adc r29, r25 \n\t"
11529         "mul r10, r11 \n\t"
11530         "add r23, r0 \n\t"
11531         "adc r28, r1 \n\t"
11532         "adc r29, r25 \n\t"
11533         "lsl r23 \n\t"
11534         "rol r28 \n\t"
11535         "rol r29 \n\t"
11536         "add r23, r24 \n\t"
11537         "adc r28, r22 \n\t"
11538         "adc r29, r25 \n\t"
11539         "st z+, r23 \n\t"
11540         
11541         "ldi r22, 0 \n\t"
11542         "mul r2, r20 \n\t"
11543         "mov r23, r0 \n\t"
11544         "mov r24, r1 \n\t"
11545         "mul r3, r19 \n\t"
11546         "add r23, r0 \n\t"
11547         "adc r24, r1 \n\t"
11548         "adc r22, r25 \n\t"
11549         "mul r4, r18 \n\t"
11550         "add r23, r0 \n\t"
11551         "adc r24, r1 \n\t"
11552         "adc r22, r25 \n\t"
11553         "mul r5, r17 \n\t"
11554         "add r23, r0 \n\t"
11555         "adc r24, r1 \n\t"
11556         "adc r22, r25 \n\t"
11557         "mul r6, r16 \n\t"
11558         "add r23, r0 \n\t"
11559         "adc r24, r1 \n\t"
11560         "adc r22, r25 \n\t"
11561         "mul r7, r15 \n\t"
11562         "add r23, r0 \n\t"
11563         "adc r24, r1 \n\t"
11564         "adc r22, r25 \n\t"
11565         "mul r8, r14 \n\t"
11566         "add r23, r0 \n\t"
11567         "adc r24, r1 \n\t"
11568         "adc r22, r25 \n\t"
11569         "mul r9, r13 \n\t"
11570         "add r23, r0 \n\t"
11571         "adc r24, r1 \n\t"
11572         "adc r22, r25 \n\t"
11573         "mul r10, r12 \n\t"
11574         "add r23, r0 \n\t"
11575         "adc r24, r1 \n\t"
11576         "adc r22, r25 \n\t"
11577         "lsl r23 \n\t"
11578         "rol r24 \n\t"
11579         "rol r22 \n\t"
11580         "mul r11, r11 \n\t"
11581         "add r23, r0 \n\t"
11582         "adc r24, r1 \n\t"
11583         "adc r22, r25 \n\t"
11584         "add r23, r28 \n\t"
11585         "adc r24, r29 \n\t"
11586         "adc r22, r25 \n\t"
11587         "st z+, r23 \n\t"
11588         
11589         "ldi r29, 0 \n\t"
11590         "mul r2, r21 \n\t"
11591         "mov r23, r0 \n\t"
11592         "mov r28, r1 \n\t"
11593         "mul r3, r20 \n\t"
11594         "add r23, r0 \n\t"
11595         "adc r28, r1 \n\t"
11596         "adc r29, r25 \n\t"
11597         "mul r4, r19 \n\t"
11598         "add r23, r0 \n\t"
11599         "adc r28, r1 \n\t"
11600         "adc r29, r25 \n\t"
11601         "mul r5, r18 \n\t"
11602         "add r23, r0 \n\t"
11603         "adc r28, r1 \n\t"
11604         "adc r29, r25 \n\t"
11605         "mul r6, r17 \n\t"
11606         "add r23, r0 \n\t"
11607         "adc r28, r1 \n\t"
11608         "adc r29, r25 \n\t"
11609         "mul r7, r16 \n\t"
11610         "add r23, r0 \n\t"
11611         "adc r28, r1 \n\t"
11612         "adc r29, r25 \n\t"
11613         "mul r8, r15 \n\t"
11614         "add r23, r0 \n\t"
11615         "adc r28, r1 \n\t"
11616         "adc r29, r25 \n\t"
11617         "mul r9, r14 \n\t"
11618         "add r23, r0 \n\t"
11619         "adc r28, r1 \n\t"
11620         "adc r29, r25 \n\t"
11621         "mul r10, r13 \n\t"
11622         "add r23, r0 \n\t"
11623         "adc r28, r1 \n\t"
11624         "adc r29, r25 \n\t"
11625         "mul r11, r12 \n\t"
11626         "add r23, r0 \n\t"
11627         "adc r28, r1 \n\t"
11628         "adc r29, r25 \n\t"
11629         "lsl r23 \n\t"
11630         "rol r28 \n\t"
11631         "rol r29 \n\t"
11632         "add r23, r24 \n\t"
11633         "adc r28, r22 \n\t"
11634         "adc r29, r25 \n\t"
11635         "st z+, r23 \n\t"
11636         
11637         "ld r2, x+ \n\t"
11638         "ldi r22, 0 \n\t"
11639         "mul r3, r21 \n\t"
11640         "mov r23, r0 \n\t"
11641         "mov r24, r1 \n\t"
11642         "mul r4, r20 \n\t"
11643         "add r23, r0 \n\t"
11644         "adc r24, r1 \n\t"
11645         "adc r22, r25 \n\t"
11646         "mul r5, r19 \n\t"
11647         "add r23, r0 \n\t"
11648         "adc r24, r1 \n\t"
11649         "adc r22, r25 \n\t"
11650         "mul r6, r18 \n\t"
11651         "add r23, r0 \n\t"
11652         "adc r24, r1 \n\t"
11653         "adc r22, r25 \n\t"
11654         "mul r7, r17 \n\t"
11655         "add r23, r0 \n\t"
11656         "adc r24, r1 \n\t"
11657         "adc r22, r25 \n\t"
11658         "mul r8, r16 \n\t"
11659         "add r23, r0 \n\t"
11660         "adc r24, r1 \n\t"
11661         "adc r22, r25 \n\t"
11662         "mul r9, r15 \n\t"
11663         "add r23, r0 \n\t"
11664         "adc r24, r1 \n\t"
11665         "adc r22, r25 \n\t"
11666         "mul r10, r14 \n\t"
11667         "add r23, r0 \n\t"
11668         "adc r24, r1 \n\t"
11669         "adc r22, r25 \n\t"
11670         "mul r11, r13 \n\t"
11671         "add r23, r0 \n\t"
11672         "adc r24, r1 \n\t"
11673         "adc r22, r25 \n\t"
11674         "ld r0, z \n\t"
11675         "add r23, r0 \n\t"
11676         "adc r24, r25 \n\t"
11677         "adc r22, r25 \n\t"
11678         "lsl r23 \n\t"
11679         "rol r24 \n\t"
11680         "rol r22 \n\t"
11681         "mul r12, r12 \n\t"
11682         "add r23, r0 \n\t"
11683         "adc r24, r1 \n\t"
11684         "adc r22, r25 \n\t"
11685         "add r23, r28 \n\t"
11686         "adc r24, r29 \n\t"
11687         "adc r22, r25 \n\t"
11688         "st z+, r23 \n\t"
11689         
11690         "ldi r29, 0 \n\t"
11691         "mul r3, r2 \n\t"
11692         "mov r23, r0 \n\t"
11693         "mov r28, r1 \n\t"
11694         "mul r4, r21 \n\t"
11695         "add r23, r0 \n\t"
11696         "adc r28, r1 \n\t"
11697         "adc r29, r25 \n\t"
11698         "mul r5, r20 \n\t"
11699         "add r23, r0 \n\t"
11700         "adc r28, r1 \n\t"
11701         "adc r29, r25 \n\t"
11702         "mul r6, r19 \n\t"
11703         "add r23, r0 \n\t"
11704         "adc r28, r1 \n\t"
11705         "adc r29, r25 \n\t"
11706         "mul r7, r18 \n\t"
11707         "add r23, r0 \n\t"
11708         "adc r28, r1 \n\t"
11709         "adc r29, r25 \n\t"
11710         "mul r8, r17 \n\t"
11711         "add r23, r0 \n\t"
11712         "adc r28, r1 \n\t"
11713         "adc r29, r25 \n\t"
11714         "mul r9, r16 \n\t"
11715         "add r23, r0 \n\t"
11716         "adc r28, r1 \n\t"
11717         "adc r29, r25 \n\t"
11718         "mul r10, r15 \n\t"
11719         "add r23, r0 \n\t"
11720         "adc r28, r1 \n\t"
11721         "adc r29, r25 \n\t"
11722         "mul r11, r14 \n\t"
11723         "add r23, r0 \n\t"
11724         "adc r28, r1 \n\t"
11725         "adc r29, r25 \n\t"
11726         "mul r12, r13 \n\t"
11727         "add r23, r0 \n\t"
11728         "adc r28, r1 \n\t"
11729         "adc r29, r25 \n\t"
11730         "ld r0, z \n\t"
11731         "add r23, r0 \n\t"
11732         "adc r28, r25 \n\t"
11733         "adc r29, r25 \n\t"
11734         "lsl r23 \n\t"
11735         "rol r28 \n\t"
11736         "rol r29 \n\t"
11737         "add r23, r24 \n\t"
11738         "adc r28, r22 \n\t"
11739         "adc r29, r25 \n\t"
11740         "st z+, r23 \n\t"
11741         
11742         "ld r3, x+ \n\t"
11743         "ldi r22, 0 \n\t"
11744         "mul r4, r2 \n\t"
11745         "mov r23, r0 \n\t"
11746         "mov r24, r1 \n\t"
11747         "mul r5, r21 \n\t"
11748         "add r23, r0 \n\t"
11749         "adc r24, r1 \n\t"
11750         "adc r22, r25 \n\t"
11751         "mul r6, r20 \n\t"
11752         "add r23, r0 \n\t"
11753         "adc r24, r1 \n\t"
11754         "adc r22, r25 \n\t"
11755         "mul r7, r19 \n\t"
11756         "add r23, r0 \n\t"
11757         "adc r24, r1 \n\t"
11758         "adc r22, r25 \n\t"
11759         "mul r8, r18 \n\t"
11760         "add r23, r0 \n\t"
11761         "adc r24, r1 \n\t"
11762         "adc r22, r25 \n\t"
11763         "mul r9, r17 \n\t"
11764         "add r23, r0 \n\t"
11765         "adc r24, r1 \n\t"
11766         "adc r22, r25 \n\t"
11767         "mul r10, r16 \n\t"
11768         "add r23, r0 \n\t"
11769         "adc r24, r1 \n\t"
11770         "adc r22, r25 \n\t"
11771         "mul r11, r15 \n\t"
11772         "add r23, r0 \n\t"
11773         "adc r24, r1 \n\t"
11774         "adc r22, r25 \n\t"
11775         "mul r12, r14 \n\t"
11776         "add r23, r0 \n\t"
11777         "adc r24, r1 \n\t"
11778         "adc r22, r25 \n\t"
11779         "ld r0, z \n\t"
11780         "add r23, r0 \n\t"
11781         "adc r24, r25 \n\t"
11782         "adc r22, r25 \n\t"
11783         "lsl r23 \n\t"
11784         "rol r24 \n\t"
11785         "rol r22 \n\t"
11786         "mul r13, r13 \n\t"
11787         "add r23, r0 \n\t"
11788         "adc r24, r1 \n\t"
11789         "adc r22, r25 \n\t"
11790         "add r23, r28 \n\t"
11791         "adc r24, r29 \n\t"
11792         "adc r22, r25 \n\t"
11793         "st z+, r23 \n\t"
11794         
11795         "ldi r29, 0 \n\t"
11796         "mul r4, r3 \n\t"
11797         "mov r23, r0 \n\t"
11798         "mov r28, r1 \n\t"
11799         "mul r5, r2 \n\t"
11800         "add r23, r0 \n\t"
11801         "adc r28, r1 \n\t"
11802         "adc r29, r25 \n\t"
11803         "mul r6, r21 \n\t"
11804         "add r23, r0 \n\t"
11805         "adc r28, r1 \n\t"
11806         "adc r29, r25 \n\t"
11807         "mul r7, r20 \n\t"
11808         "add r23, r0 \n\t"
11809         "adc r28, r1 \n\t"
11810         "adc r29, r25 \n\t"
11811         "mul r8, r19 \n\t"
11812         "add r23, r0 \n\t"
11813         "adc r28, r1 \n\t"
11814         "adc r29, r25 \n\t"
11815         "mul r9, r18 \n\t"
11816         "add r23, r0 \n\t"
11817         "adc r28, r1 \n\t"
11818         "adc r29, r25 \n\t"
11819         "mul r10, r17 \n\t"
11820         "add r23, r0 \n\t"
11821         "adc r28, r1 \n\t"
11822         "adc r29, r25 \n\t"
11823         "mul r11, r16 \n\t"
11824         "add r23, r0 \n\t"
11825         "adc r28, r1 \n\t"
11826         "adc r29, r25 \n\t"
11827         "mul r12, r15 \n\t"
11828         "add r23, r0 \n\t"
11829         "adc r28, r1 \n\t"
11830         "adc r29, r25 \n\t"
11831         "mul r13, r14 \n\t"
11832         "add r23, r0 \n\t"
11833         "adc r28, r1 \n\t"
11834         "adc r29, r25 \n\t"
11835         "ld r0, z \n\t"
11836         "add r23, r0 \n\t"
11837         "adc r28, r25 \n\t"
11838         "adc r29, r25 \n\t"
11839         "lsl r23 \n\t"
11840         "rol r28 \n\t"
11841         "rol r29 \n\t"
11842         "add r23, r24 \n\t"
11843         "adc r28, r22 \n\t"
11844         "adc r29, r25 \n\t"
11845         "st z+, r23 \n\t"
11846         
11847         "ld r4, x+ \n\t"
11848         "ldi r22, 0 \n\t"
11849         "mul r5, r3 \n\t"
11850         "mov r23, r0 \n\t"
11851         "mov r24, r1 \n\t"
11852         "mul r6, r2 \n\t"
11853         "add r23, r0 \n\t"
11854         "adc r24, r1 \n\t"
11855         "adc r22, r25 \n\t"
11856         "mul r7, r21 \n\t"
11857         "add r23, r0 \n\t"
11858         "adc r24, r1 \n\t"
11859         "adc r22, r25 \n\t"
11860         "mul r8, r20 \n\t"
11861         "add r23, r0 \n\t"
11862         "adc r24, r1 \n\t"
11863         "adc r22, r25 \n\t"
11864         "mul r9, r19 \n\t"
11865         "add r23, r0 \n\t"
11866         "adc r24, r1 \n\t"
11867         "adc r22, r25 \n\t"
11868         "mul r10, r18 \n\t"
11869         "add r23, r0 \n\t"
11870         "adc r24, r1 \n\t"
11871         "adc r22, r25 \n\t"
11872         "mul r11, r17 \n\t"
11873         "add r23, r0 \n\t"
11874         "adc r24, r1 \n\t"
11875         "adc r22, r25 \n\t"
11876         "mul r12, r16 \n\t"
11877         "add r23, r0 \n\t"
11878         "adc r24, r1 \n\t"
11879         "adc r22, r25 \n\t"
11880         "mul r13, r15 \n\t"
11881         "add r23, r0 \n\t"
11882         "adc r24, r1 \n\t"
11883         "adc r22, r25 \n\t"
11884         "ld r0, z \n\t"
11885         "add r23, r0 \n\t"
11886         "adc r24, r25 \n\t"
11887         "adc r22, r25 \n\t"
11888         "lsl r23 \n\t"
11889         "rol r24 \n\t"
11890         "rol r22 \n\t"
11891         "mul r14, r14 \n\t"
11892         "add r23, r0 \n\t"
11893         "adc r24, r1 \n\t"
11894         "adc r22, r25 \n\t"
11895         "add r23, r28 \n\t"
11896         "adc r24, r29 \n\t"
11897         "adc r22, r25 \n\t"
11898         "st z+, r23 \n\t"
11899         
11900         "ldi r29, 0 \n\t"
11901         "mul r5, r4 \n\t"
11902         "mov r23, r0 \n\t"
11903         "mov r28, r1 \n\t"
11904         "mul r6, r3 \n\t"
11905         "add r23, r0 \n\t"
11906         "adc r28, r1 \n\t"
11907         "adc r29, r25 \n\t"
11908         "mul r7, r2 \n\t"
11909         "add r23, r0 \n\t"
11910         "adc r28, r1 \n\t"
11911         "adc r29, r25 \n\t"
11912         "mul r8, r21 \n\t"
11913         "add r23, r0 \n\t"
11914         "adc r28, r1 \n\t"
11915         "adc r29, r25 \n\t"
11916         "mul r9, r20 \n\t"
11917         "add r23, r0 \n\t"
11918         "adc r28, r1 \n\t"
11919         "adc r29, r25 \n\t"
11920         "mul r10, r19 \n\t"
11921         "add r23, r0 \n\t"
11922         "adc r28, r1 \n\t"
11923         "adc r29, r25 \n\t"
11924         "mul r11, r18 \n\t"
11925         "add r23, r0 \n\t"
11926         "adc r28, r1 \n\t"
11927         "adc r29, r25 \n\t"
11928         "mul r12, r17 \n\t"
11929         "add r23, r0 \n\t"
11930         "adc r28, r1 \n\t"
11931         "adc r29, r25 \n\t"
11932         "mul r13, r16 \n\t"
11933         "add r23, r0 \n\t"
11934         "adc r28, r1 \n\t"
11935         "adc r29, r25 \n\t"
11936         "mul r14, r15 \n\t"
11937         "add r23, r0 \n\t"
11938         "adc r28, r1 \n\t"
11939         "adc r29, r25 \n\t"
11940         "ld r0, z \n\t"
11941         "add r23, r0 \n\t"
11942         "adc r28, r25 \n\t"
11943         "adc r29, r25 \n\t"
11944         "lsl r23 \n\t"
11945         "rol r28 \n\t"
11946         "rol r29 \n\t"
11947         "add r23, r24 \n\t"
11948         "adc r28, r22 \n\t"
11949         "adc r29, r25 \n\t"
11950         "st z+, r23 \n\t"
11951         
11952         "ld r5, x+ \n\t"
11953         "ldi r22, 0 \n\t"
11954         "mul r6, r4 \n\t"
11955         "mov r23, r0 \n\t"
11956         "mov r24, r1 \n\t"
11957         "mul r7, r3 \n\t"
11958         "add r23, r0 \n\t"
11959         "adc r24, r1 \n\t"
11960         "adc r22, r25 \n\t"
11961         "mul r8, r2 \n\t"
11962         "add r23, r0 \n\t"
11963         "adc r24, r1 \n\t"
11964         "adc r22, r25 \n\t"
11965         "mul r9, r21 \n\t"
11966         "add r23, r0 \n\t"
11967         "adc r24, r1 \n\t"
11968         "adc r22, r25 \n\t"
11969         "mul r10, r20 \n\t"
11970         "add r23, r0 \n\t"
11971         "adc r24, r1 \n\t"
11972         "adc r22, r25 \n\t"
11973         "mul r11, r19 \n\t"
11974         "add r23, r0 \n\t"
11975         "adc r24, r1 \n\t"
11976         "adc r22, r25 \n\t"
11977         "mul r12, r18 \n\t"
11978         "add r23, r0 \n\t"
11979         "adc r24, r1 \n\t"
11980         "adc r22, r25 \n\t"
11981         "mul r13, r17 \n\t"
11982         "add r23, r0 \n\t"
11983         "adc r24, r1 \n\t"
11984         "adc r22, r25 \n\t"
11985         "mul r14, r16 \n\t"
11986         "add r23, r0 \n\t"
11987         "adc r24, r1 \n\t"
11988         "adc r22, r25 \n\t"
11989         "ld r0, z \n\t"
11990         "add r23, r0 \n\t"
11991         "adc r24, r25 \n\t"
11992         "adc r22, r25 \n\t"
11993         "lsl r23 \n\t"
11994         "rol r24 \n\t"
11995         "rol r22 \n\t"
11996         "mul r15, r15 \n\t"
11997         "add r23, r0 \n\t"
11998         "adc r24, r1 \n\t"
11999         "adc r22, r25 \n\t"
12000         "add r23, r28 \n\t"
12001         "adc r24, r29 \n\t"
12002         "adc r22, r25 \n\t"
12003         "st z+, r23 \n\t"
12004         
12005         "ldi r29, 0 \n\t"
12006         "mul r6, r5 \n\t"
12007         "mov r23, r0 \n\t"
12008         "mov r28, r1 \n\t"
12009         "mul r7, r4 \n\t"
12010         "add r23, r0 \n\t"
12011         "adc r28, r1 \n\t"
12012         "adc r29, r25 \n\t"
12013         "mul r8, r3 \n\t"
12014         "add r23, r0 \n\t"
12015         "adc r28, r1 \n\t"
12016         "adc r29, r25 \n\t"
12017         "mul r9, r2 \n\t"
12018         "add r23, r0 \n\t"
12019         "adc r28, r1 \n\t"
12020         "adc r29, r25 \n\t"
12021         "mul r10, r21 \n\t"
12022         "add r23, r0 \n\t"
12023         "adc r28, r1 \n\t"
12024         "adc r29, r25 \n\t"
12025         "mul r11, r20 \n\t"
12026         "add r23, r0 \n\t"
12027         "adc r28, r1 \n\t"
12028         "adc r29, r25 \n\t"
12029         "mul r12, r19 \n\t"
12030         "add r23, r0 \n\t"
12031         "adc r28, r1 \n\t"
12032         "adc r29, r25 \n\t"
12033         "mul r13, r18 \n\t"
12034         "add r23, r0 \n\t"
12035         "adc r28, r1 \n\t"
12036         "adc r29, r25 \n\t"
12037         "mul r14, r17 \n\t"
12038         "add r23, r0 \n\t"
12039         "adc r28, r1 \n\t"
12040         "adc r29, r25 \n\t"
12041         "mul r15, r16 \n\t"
12042         "add r23, r0 \n\t"
12043         "adc r28, r1 \n\t"
12044         "adc r29, r25 \n\t"
12045         "ld r0, z \n\t"
12046         "add r23, r0 \n\t"
12047         "adc r28, r25 \n\t"
12048         "adc r29, r25 \n\t"
12049         "lsl r23 \n\t"
12050         "rol r28 \n\t"
12051         "rol r29 \n\t"
12052         "add r23, r24 \n\t"
12053         "adc r28, r22 \n\t"
12054         "adc r29, r25 \n\t"
12055         "st z+, r23 \n\t"
12056         
12057         "ldi r22, 0 \n\t"
12058         "mul r7, r5 \n\t"
12059         "mov r23, r0 \n\t"
12060         "mov r24, r1 \n\t"
12061         "mul r8, r4 \n\t"
12062         "add r23, r0 \n\t"
12063         "adc r24, r1 \n\t"
12064         "adc r22, r25 \n\t"
12065         "mul r9, r3 \n\t"
12066         "add r23, r0 \n\t"
12067         "adc r24, r1 \n\t"
12068         "adc r22, r25 \n\t"
12069         "mul r10, r2 \n\t"
12070         "add r23, r0 \n\t"
12071         "adc r24, r1 \n\t"
12072         "adc r22, r25 \n\t"
12073         "mul r11, r21 \n\t"
12074         "add r23, r0 \n\t"
12075         "adc r24, r1 \n\t"
12076         "adc r22, r25 \n\t"
12077         "mul r12, r20 \n\t"
12078         "add r23, r0 \n\t"
12079         "adc r24, r1 \n\t"
12080         "adc r22, r25 \n\t"
12081         "mul r13, r19 \n\t"
12082         "add r23, r0 \n\t"
12083         "adc r24, r1 \n\t"
12084         "adc r22, r25 \n\t"
12085         "mul r14, r18 \n\t"
12086         "add r23, r0 \n\t"
12087         "adc r24, r1 \n\t"
12088         "adc r22, r25 \n\t"
12089         "mul r15, r17 \n\t"
12090         "add r23, r0 \n\t"
12091         "adc r24, r1 \n\t"
12092         "adc r22, r25 \n\t"
12093         "lsl r23 \n\t"
12094         "rol r24 \n\t"
12095         "rol r22 \n\t"
12096         "mul r16, r16 \n\t"
12097         "add r23, r0 \n\t"
12098         "adc r24, r1 \n\t"
12099         "adc r22, r25 \n\t"
12100         "add r23, r28 \n\t"
12101         "adc r24, r29 \n\t"
12102         "adc r22, r25 \n\t"
12103         "st z+, r23 \n\t"
12104         
12105         "ldi r29, 0 \n\t"
12106         "mul r8, r5 \n\t"
12107         "mov r23, r0 \n\t"
12108         "mov r28, r1 \n\t"
12109         "mul r9, r4 \n\t"
12110         "add r23, r0 \n\t"
12111         "adc r28, r1 \n\t"
12112         "adc r29, r25 \n\t"
12113         "mul r10, r3 \n\t"
12114         "add r23, r0 \n\t"
12115         "adc r28, r1 \n\t"
12116         "adc r29, r25 \n\t"
12117         "mul r11, r2 \n\t"
12118         "add r23, r0 \n\t"
12119         "adc r28, r1 \n\t"
12120         "adc r29, r25 \n\t"
12121         "mul r12, r21 \n\t"
12122         "add r23, r0 \n\t"
12123         "adc r28, r1 \n\t"
12124         "adc r29, r25 \n\t"
12125         "mul r13, r20 \n\t"
12126         "add r23, r0 \n\t"
12127         "adc r28, r1 \n\t"
12128         "adc r29, r25 \n\t"
12129         "mul r14, r19 \n\t"
12130         "add r23, r0 \n\t"
12131         "adc r28, r1 \n\t"
12132         "adc r29, r25 \n\t"
12133         "mul r15, r18 \n\t"
12134         "add r23, r0 \n\t"
12135         "adc r28, r1 \n\t"
12136         "adc r29, r25 \n\t"
12137         "mul r16, r17 \n\t"
12138         "add r23, r0 \n\t"
12139         "adc r28, r1 \n\t"
12140         "adc r29, r25 \n\t"
12141         "lsl r23 \n\t"
12142         "rol r28 \n\t"
12143         "rol r29 \n\t"
12144         "add r23, r24 \n\t"
12145         "adc r28, r22 \n\t"
12146         "adc r29, r25 \n\t"
12147         "st z+, r23 \n\t"
12148         
12149         "ldi r22, 0 \n\t"
12150         "mul r9, r5 \n\t"
12151         "mov r23, r0 \n\t"
12152         "mov r24, r1 \n\t"
12153         "mul r10, r4 \n\t"
12154         "add r23, r0 \n\t"
12155         "adc r24, r1 \n\t"
12156         "adc r22, r25 \n\t"
12157         "mul r11, r3 \n\t"
12158         "add r23, r0 \n\t"
12159         "adc r24, r1 \n\t"
12160         "adc r22, r25 \n\t"
12161         "mul r12, r2 \n\t"
12162         "add r23, r0 \n\t"
12163         "adc r24, r1 \n\t"
12164         "adc r22, r25 \n\t"
12165         "mul r13, r21 \n\t"
12166         "add r23, r0 \n\t"
12167         "adc r24, r1 \n\t"
12168         "adc r22, r25 \n\t"
12169         "mul r14, r20 \n\t"
12170         "add r23, r0 \n\t"
12171         "adc r24, r1 \n\t"
12172         "adc r22, r25 \n\t"
12173         "mul r15, r19 \n\t"
12174         "add r23, r0 \n\t"
12175         "adc r24, r1 \n\t"
12176         "adc r22, r25 \n\t"
12177         "mul r16, r18 \n\t"
12178         "add r23, r0 \n\t"
12179         "adc r24, r1 \n\t"
12180         "adc r22, r25 \n\t"
12181         "lsl r23 \n\t"
12182         "rol r24 \n\t"
12183         "rol r22 \n\t"
12184         "mul r17, r17 \n\t"
12185         "add r23, r0 \n\t"
12186         "adc r24, r1 \n\t"
12187         "adc r22, r25 \n\t"
12188         "add r23, r28 \n\t"
12189         "adc r24, r29 \n\t"
12190         "adc r22, r25 \n\t"
12191         "st z+, r23 \n\t"
12192         
12193         "ldi r29, 0 \n\t"
12194         "mul r10, r5 \n\t"
12195         "mov r23, r0 \n\t"
12196         "mov r28, r1 \n\t"
12197         "mul r11, r4 \n\t"
12198         "add r23, r0 \n\t"
12199         "adc r28, r1 \n\t"
12200         "adc r29, r25 \n\t"
12201         "mul r12, r3 \n\t"
12202         "add r23, r0 \n\t"
12203         "adc r28, r1 \n\t"
12204         "adc r29, r25 \n\t"
12205         "mul r13, r2 \n\t"
12206         "add r23, r0 \n\t"
12207         "adc r28, r1 \n\t"
12208         "adc r29, r25 \n\t"
12209         "mul r14, r21 \n\t"
12210         "add r23, r0 \n\t"
12211         "adc r28, r1 \n\t"
12212         "adc r29, r25 \n\t"
12213         "mul r15, r20 \n\t"
12214         "add r23, r0 \n\t"
12215         "adc r28, r1 \n\t"
12216         "adc r29, r25 \n\t"
12217         "mul r16, r19 \n\t"
12218         "add r23, r0 \n\t"
12219         "adc r28, r1 \n\t"
12220         "adc r29, r25 \n\t"
12221         "mul r17, r18 \n\t"
12222         "add r23, r0 \n\t"
12223         "adc r28, r1 \n\t"
12224         "adc r29, r25 \n\t"
12225         "lsl r23 \n\t"
12226         "rol r28 \n\t"
12227         "rol r29 \n\t"
12228         "add r23, r24 \n\t"
12229         "adc r28, r22 \n\t"
12230         "adc r29, r25 \n\t"
12231         "st z+, r23 \n\t"
12232         
12233         "ldi r22, 0 \n\t"
12234         "mul r11, r5 \n\t"
12235         "mov r23, r0 \n\t"
12236         "mov r24, r1 \n\t"
12237         "mul r12, r4 \n\t"
12238         "add r23, r0 \n\t"
12239         "adc r24, r1 \n\t"
12240         "adc r22, r25 \n\t"
12241         "mul r13, r3 \n\t"
12242         "add r23, r0 \n\t"
12243         "adc r24, r1 \n\t"
12244         "adc r22, r25 \n\t"
12245         "mul r14, r2 \n\t"
12246         "add r23, r0 \n\t"
12247         "adc r24, r1 \n\t"
12248         "adc r22, r25 \n\t"
12249         "mul r15, r21 \n\t"
12250         "add r23, r0 \n\t"
12251         "adc r24, r1 \n\t"
12252         "adc r22, r25 \n\t"
12253         "mul r16, r20 \n\t"
12254         "add r23, r0 \n\t"
12255         "adc r24, r1 \n\t"
12256         "adc r22, r25 \n\t"
12257         "mul r17, r19 \n\t"
12258         "add r23, r0 \n\t"
12259         "adc r24, r1 \n\t"
12260         "adc r22, r25 \n\t"
12261         "lsl r23 \n\t"
12262         "rol r24 \n\t"
12263         "rol r22 \n\t"
12264         "mul r18, r18 \n\t"
12265         "add r23, r0 \n\t"
12266         "adc r24, r1 \n\t"
12267         "adc r22, r25 \n\t"
12268         "add r23, r28 \n\t"
12269         "adc r24, r29 \n\t"
12270         "adc r22, r25 \n\t"
12271         "st z+, r23 \n\t"
12272         
12273         "ldi r29, 0 \n\t"
12274         "mul r12, r5 \n\t"
12275         "mov r23, r0 \n\t"
12276         "mov r28, r1 \n\t"
12277         "mul r13, r4 \n\t"
12278         "add r23, r0 \n\t"
12279         "adc r28, r1 \n\t"
12280         "adc r29, r25 \n\t"
12281         "mul r14, r3 \n\t"
12282         "add r23, r0 \n\t"
12283         "adc r28, r1 \n\t"
12284         "adc r29, r25 \n\t"
12285         "mul r15, r2 \n\t"
12286         "add r23, r0 \n\t"
12287         "adc r28, r1 \n\t"
12288         "adc r29, r25 \n\t"
12289         "mul r16, r21 \n\t"
12290         "add r23, r0 \n\t"
12291         "adc r28, r1 \n\t"
12292         "adc r29, r25 \n\t"
12293         "mul r17, r20 \n\t"
12294         "add r23, r0 \n\t"
12295         "adc r28, r1 \n\t"
12296         "adc r29, r25 \n\t"
12297         "mul r18, r19 \n\t"
12298         "add r23, r0 \n\t"
12299         "adc r28, r1 \n\t"
12300         "adc r29, r25 \n\t"
12301         "lsl r23 \n\t"
12302         "rol r28 \n\t"
12303         "rol r29 \n\t"
12304         "add r23, r24 \n\t"
12305         "adc r28, r22 \n\t"
12306         "adc r29, r25 \n\t"
12307         "st z+, r23 \n\t"
12308         
12309         "ldi r22, 0 \n\t"
12310         "mul r13, r5 \n\t"
12311         "mov r23, r0 \n\t"
12312         "mov r24, r1 \n\t"
12313         "mul r14, r4 \n\t"
12314         "add r23, r0 \n\t"
12315         "adc r24, r1 \n\t"
12316         "adc r22, r25 \n\t"
12317         "mul r15, r3 \n\t"
12318         "add r23, r0 \n\t"
12319         "adc r24, r1 \n\t"
12320         "adc r22, r25 \n\t"
12321         "mul r16, r2 \n\t"
12322         "add r23, r0 \n\t"
12323         "adc r24, r1 \n\t"
12324         "adc r22, r25 \n\t"
12325         "mul r17, r21 \n\t"
12326         "add r23, r0 \n\t"
12327         "adc r24, r1 \n\t"
12328         "adc r22, r25 \n\t"
12329         "mul r18, r20 \n\t"
12330         "add r23, r0 \n\t"
12331         "adc r24, r1 \n\t"
12332         "adc r22, r25 \n\t"
12333         "lsl r23 \n\t"
12334         "rol r24 \n\t"
12335         "rol r22 \n\t"
12336         "mul r19, r19 \n\t"
12337         "add r23, r0 \n\t"
12338         "adc r24, r1 \n\t"
12339         "adc r22, r25 \n\t"
12340         "add r23, r28 \n\t"
12341         "adc r24, r29 \n\t"
12342         "adc r22, r25 \n\t"
12343         "st z+, r23 \n\t"
12344         
12345         "ldi r29, 0 \n\t"
12346         "mul r14, r5 \n\t"
12347         "mov r23, r0 \n\t"
12348         "mov r28, r1 \n\t"
12349         "mul r15, r4 \n\t"
12350         "add r23, r0 \n\t"
12351         "adc r28, r1 \n\t"
12352         "adc r29, r25 \n\t"
12353         "mul r16, r3 \n\t"
12354         "add r23, r0 \n\t"
12355         "adc r28, r1 \n\t"
12356         "adc r29, r25 \n\t"
12357         "mul r17, r2 \n\t"
12358         "add r23, r0 \n\t"
12359         "adc r28, r1 \n\t"
12360         "adc r29, r25 \n\t"
12361         "mul r18, r21 \n\t"
12362         "add r23, r0 \n\t"
12363         "adc r28, r1 \n\t"
12364         "adc r29, r25 \n\t"
12365         "mul r19, r20 \n\t"
12366         "add r23, r0 \n\t"
12367         "adc r28, r1 \n\t"
12368         "adc r29, r25 \n\t"
12369         "lsl r23 \n\t"
12370         "rol r28 \n\t"
12371         "rol r29 \n\t"
12372         "add r23, r24 \n\t"
12373         "adc r28, r22 \n\t"
12374         "adc r29, r25 \n\t"
12375         "st z+, r23 \n\t"
12376         
12377         "ldi r22, 0 \n\t"
12378         "mul r15, r5 \n\t"
12379         "mov r23, r0 \n\t"
12380         "mov r24, r1 \n\t"
12381         "mul r16, r4 \n\t"
12382         "add r23, r0 \n\t"
12383         "adc r24, r1 \n\t"
12384         "adc r22, r25 \n\t"
12385         "mul r17, r3 \n\t"
12386         "add r23, r0 \n\t"
12387         "adc r24, r1 \n\t"
12388         "adc r22, r25 \n\t"
12389         "mul r18, r2 \n\t"
12390         "add r23, r0 \n\t"
12391         "adc r24, r1 \n\t"
12392         "adc r22, r25 \n\t"
12393         "mul r19, r21 \n\t"
12394         "add r23, r0 \n\t"
12395         "adc r24, r1 \n\t"
12396         "adc r22, r25 \n\t"
12397         "lsl r23 \n\t"
12398         "rol r24 \n\t"
12399         "rol r22 \n\t"
12400         "mul r20, r20 \n\t"
12401         "add r23, r0 \n\t"
12402         "adc r24, r1 \n\t"
12403         "adc r22, r25 \n\t"
12404         "add r23, r28 \n\t"
12405         "adc r24, r29 \n\t"
12406         "adc r22, r25 \n\t"
12407         "st z+, r23 \n\t"
12408         
12409         "ldi r29, 0 \n\t"
12410         "mul r16, r5 \n\t"
12411         "mov r23, r0 \n\t"
12412         "mov r28, r1 \n\t"
12413         "mul r17, r4 \n\t"
12414         "add r23, r0 \n\t"
12415         "adc r28, r1 \n\t"
12416         "adc r29, r25 \n\t"
12417         "mul r18, r3 \n\t"
12418         "add r23, r0 \n\t"
12419         "adc r28, r1 \n\t"
12420         "adc r29, r25 \n\t"
12421         "mul r19, r2 \n\t"
12422         "add r23, r0 \n\t"
12423         "adc r28, r1 \n\t"
12424         "adc r29, r25 \n\t"
12425         "mul r20, r21 \n\t"
12426         "add r23, r0 \n\t"
12427         "adc r28, r1 \n\t"
12428         "adc r29, r25 \n\t"
12429         "lsl r23 \n\t"
12430         "rol r28 \n\t"
12431         "rol r29 \n\t"
12432         "add r23, r24 \n\t"
12433         "adc r28, r22 \n\t"
12434         "adc r29, r25 \n\t"
12435         "st z+, r23 \n\t"
12436         
12437         "ldi r22, 0 \n\t"
12438         "mul r17, r5 \n\t"
12439         "mov r23, r0 \n\t"
12440         "mov r24, r1 \n\t"
12441         "mul r18, r4 \n\t"
12442         "add r23, r0 \n\t"
12443         "adc r24, r1 \n\t"
12444         "adc r22, r25 \n\t"
12445         "mul r19, r3 \n\t"
12446         "add r23, r0 \n\t"
12447         "adc r24, r1 \n\t"
12448         "adc r22, r25 \n\t"
12449         "mul r20, r2 \n\t"
12450         "add r23, r0 \n\t"
12451         "adc r24, r1 \n\t"
12452         "adc r22, r25 \n\t"
12453         "lsl r23 \n\t"
12454         "rol r24 \n\t"
12455         "rol r22 \n\t"
12456         "mul r21, r21 \n\t"
12457         "add r23, r0 \n\t"
12458         "adc r24, r1 \n\t"
12459         "adc r22, r25 \n\t"
12460         "add r23, r28 \n\t"
12461         "adc r24, r29 \n\t"
12462         "adc r22, r25 \n\t"
12463         "st z+, r23 \n\t"
12464         
12465         "ldi r29, 0 \n\t"
12466         "mul r18, r5 \n\t"
12467         "mov r23, r0 \n\t"
12468         "mov r28, r1 \n\t"
12469         "mul r19, r4 \n\t"
12470         "add r23, r0 \n\t"
12471         "adc r28, r1 \n\t"
12472         "adc r29, r25 \n\t"
12473         "mul r20, r3 \n\t"
12474         "add r23, r0 \n\t"
12475         "adc r28, r1 \n\t"
12476         "adc r29, r25 \n\t"
12477         "mul r21, r2 \n\t"
12478         "add r23, r0 \n\t"
12479         "adc r28, r1 \n\t"
12480         "adc r29, r25 \n\t"
12481         "lsl r23 \n\t"
12482         "rol r28 \n\t"
12483         "rol r29 \n\t"
12484         "add r23, r24 \n\t"
12485         "adc r28, r22 \n\t"
12486         "adc r29, r25 \n\t"
12487         "st z+, r23 \n\t"
12488         
12489         "ldi r22, 0 \n\t"
12490         "mul r19, r5 \n\t"
12491         "mov r23, r0 \n\t"
12492         "mov r24, r1 \n\t"
12493         "mul r20, r4 \n\t"
12494         "add r23, r0 \n\t"
12495         "adc r24, r1 \n\t"
12496         "adc r22, r25 \n\t"
12497         "mul r21, r3 \n\t"
12498         "add r23, r0 \n\t"
12499         "adc r24, r1 \n\t"
12500         "adc r22, r25 \n\t"
12501         "lsl r23 \n\t"
12502         "rol r24 \n\t"
12503         "rol r22 \n\t"
12504         "mul r2, r2 \n\t"
12505         "add r23, r0 \n\t"
12506         "adc r24, r1 \n\t"
12507         "adc r22, r25 \n\t"
12508         "add r23, r28 \n\t"
12509         "adc r24, r29 \n\t"
12510         "adc r22, r25 \n\t"
12511         "st z+, r23 \n\t"
12512         
12513         "ldi r29, 0 \n\t"
12514         "mul r20, r5 \n\t"
12515         "mov r23, r0 \n\t"
12516         "mov r28, r1 \n\t"
12517         "mul r21, r4 \n\t"
12518         "add r23, r0 \n\t"
12519         "adc r28, r1 \n\t"
12520         "adc r29, r25 \n\t"
12521         "mul r2, r3 \n\t"
12522         "add r23, r0 \n\t"
12523         "adc r28, r1 \n\t"
12524         "adc r29, r25 \n\t"
12525         "lsl r23 \n\t"
12526         "rol r28 \n\t"
12527         "rol r29 \n\t"
12528         "add r23, r24 \n\t"
12529         "adc r28, r22 \n\t"
12530         "adc r29, r25 \n\t"
12531         "st z+, r23 \n\t"
12532         
12533         "ldi r22, 0 \n\t"
12534         "mul r21, r5 \n\t"
12535         "mov r23, r0 \n\t"
12536         "mov r24, r1 \n\t"
12537         "mul r2, r4 \n\t"
12538         "add r23, r0 \n\t"
12539         "adc r24, r1 \n\t"
12540         "adc r22, r25 \n\t"
12541         "lsl r23 \n\t"
12542         "rol r24 \n\t"
12543         "rol r22 \n\t"
12544         "mul r3, r3 \n\t"
12545         "add r23, r0 \n\t"
12546         "adc r24, r1 \n\t"
12547         "adc r22, r25 \n\t"
12548         "add r23, r28 \n\t"
12549         "adc r24, r29 \n\t"
12550         "adc r22, r25 \n\t"
12551         "st z+, r23 \n\t"
12552         
12553         "ldi r29, 0 \n\t"
12554         "mul r2, r5 \n\t"
12555         "mov r23, r0 \n\t"
12556         "mov r28, r1 \n\t"
12557         "mul r3, r4 \n\t"
12558         "add r23, r0 \n\t"
12559         "adc r28, r1 \n\t"
12560         "adc r29, r25 \n\t"
12561         "lsl r23 \n\t"
12562         "rol r28 \n\t"
12563         "rol r29 \n\t"
12564         "add r23, r24 \n\t"
12565         "adc r28, r22 \n\t"
12566         "adc r29, r25 \n\t"
12567         "st z+, r23 \n\t"
12568         
12569         "ldi r23, 0 \n\t"
12570         "mul r3, r5 \n\t"
12571         "add r28, r0 \n\t"
12572         "adc r29, r1 \n\t"
12573         "adc r23, r25 \n\t"
12574         "add r28, r0 \n\t"
12575         "adc r29, r1 \n\t"
12576         "adc r23, r25 \n\t"
12577         "mul r4, r4 \n\t"
12578         "add r28, r0 \n\t"
12579         "adc r29, r1 \n\t"
12580         "adc r23, r25 \n\t"
12581         "st z+, r28 \n\t"
12582         
12583         "ldi r28, 0 \n\t"
12584         "mul r4, r5 \n\t"
12585         "add r29, r0 \n\t"
12586         "adc r23, r1 \n\t"
12587         "adc r28, r25 \n\t"
12588         "add r29, r0 \n\t"
12589         "adc r23, r1 \n\t"
12590         "adc r28, r25 \n\t"
12591         "st z+, r29 \n\t"
12592         
12593         "mul r5, r5 \n\t"
12594         "add r23, r0 \n\t"
12595         "adc r28, r1 \n\t"
12596         "st z+, r23 \n\t"
12597         "st z+, r28 \n\t"
12598         "eor r1, r1 \n\t"
12599         : "+x" (p_left), "+z" (p_result)
12600         :
12601         : "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12",
12602           "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r28", "r29", "cc", "memory"
12603     );
12604 }
12605 #define asm_square 1
12606
12607 #elif (uECC_BYTES == 32)
12608
12609 __attribute((noinline))
12610 static void vli_square(uint8_t *p_result, uint8_t *p_left)
12611 {
12612     __asm__ volatile (
12613         "ldi r25, 0 \n\t"
12614         "movw r28, r26 \n\t"
12615         "ld r2, x+ \n\t"
12616         "ld r3, x+ \n\t"
12617         "ld r4, x+ \n\t"
12618         "ld r5, x+ \n\t"
12619         "ld r6, x+ \n\t"
12620         "ld r7, x+ \n\t"
12621         "adiw r28, 20 \n\t"
12622         "ld r12, y+ \n\t"
12623         "ld r13, y+ \n\t"
12624         "ld r14, y+ \n\t"
12625         "ld r15, y+ \n\t"
12626         "ld r16, y+ \n\t"
12627         "ld r17, y+ \n\t"
12628         "adiw r30, 20 \n\t"
12629
12630         "ldi r23, 0 \n\t"
12631         "mul 2, 12 \n\t"
12632         "st z+, r0 \n\t"
12633         "mov r22, r1 \n\t"
12634
12635         "ldi r24, 0 \n\t"
12636         "mul r2, r13 \n\t"
12637         "add r22, r0 \n\t"
12638         "adc r23, r1 \n\t"
12639         "adc r24, r25 \n\t"
12640         "st z+, r22 \n\t"
12641
12642         "ldi r22, 0 \n\t"
12643         "mul r2, r14 \n\t"
12644         "add r23, r0 \n\t"
12645         "adc r24, r1 \n\t"
12646         "adc r22, r25 \n\t"
12647         "mul r3, r13 \n\t"
12648         "add r23, r0 \n\t"
12649         "adc r24, r1 \n\t"
12650         "adc r22, r25 \n\t"
12651         "st z+, r23 \n\t"
12652
12653         "ldi r23, 0 \n\t"
12654         "mul r2, r15 \n\t"
12655         "add r24, r0 \n\t"
12656         "adc r22, r1 \n\t"
12657         "adc r23, r25 \n\t"
12658         "mul r3, r14 \n\t"
12659         "add r24, r0 \n\t"
12660         "adc r22, r1 \n\t"
12661         "adc r23, r25 \n\t"
12662         "st z+, r24 \n\t"
12663
12664         "ldi r24, 0 \n\t"
12665         "mul r2, r16 \n\t"
12666         "add r22, r0 \n\t"
12667         "adc r23, r1 \n\t"
12668         "adc r24, r25 \n\t"
12669         "mul r3, r15 \n\t"
12670         "add r22, r0 \n\t"
12671         "adc r23, r1 \n\t"
12672         "adc r24, r25 \n\t"
12673         "mul r4, r14 \n\t"
12674         "add r22, r0 \n\t"
12675         "adc r23, r1 \n\t"
12676         "adc r24, r25 \n\t"
12677         "st z+, r22 \n\t"
12678
12679         "ldi r22, 0 \n\t"
12680         "mul r2, r17 \n\t"
12681         "add r23, r0 \n\t"
12682         "adc r24, r1 \n\t"
12683         "adc r22, r25 \n\t"
12684         "mul r3, r16 \n\t"
12685         "add r23, r0 \n\t"
12686         "adc r24, r1 \n\t"
12687         "adc r22, r25 \n\t"
12688         "mul r4, r15 \n\t"
12689         "add r23, r0 \n\t"
12690         "adc r24, r1 \n\t"
12691         "adc r22, r25 \n\t"
12692         "st z+, r23 \n\t"
12693
12694         "ld r12, y+ \n\t"
12695         "ldi r23, 0 \n\t"
12696         "mul r2, r12 \n\t"
12697         "add r24, r0 \n\t"
12698         "adc r22, r1 \n\t"
12699         "adc r23, r25 \n\t"
12700         "mul r3, r17 \n\t"
12701         "add r24, r0 \n\t"
12702         "adc r22, r1 \n\t"
12703         "adc r23, r25 \n\t"
12704         "mul r4, r16 \n\t"
12705         "add r24, r0 \n\t"
12706         "adc r22, r1 \n\t"
12707         "adc r23, r25 \n\t"
12708         "mul r5, r15 \n\t"
12709         "add r24, r0 \n\t"
12710         "adc r22, r1 \n\t"
12711         "adc r23, r25 \n\t"
12712         "st z+, r24 \n\t"
12713
12714         "ld r13, y+ \n\t"
12715         "ldi r24, 0 \n\t"
12716         "mul r2, r13 \n\t"
12717         "add r22, r0 \n\t"
12718         "adc r23, r1 \n\t"
12719         "adc r24, r25 \n\t"
12720         "mul r3, r12 \n\t"
12721         "add r22, r0 \n\t"
12722         "adc r23, r1 \n\t"
12723         "adc r24, r25 \n\t"
12724         "mul r4, r17 \n\t"
12725         "add r22, r0 \n\t"
12726         "adc r23, r1 \n\t"
12727         "adc r24, r25 \n\t"
12728         "mul r5, r16 \n\t"
12729         "add r22, r0 \n\t"
12730         "adc r23, r1 \n\t"
12731         "adc r24, r25 \n\t"
12732         "st z+, r22 \n\t"
12733
12734         "ld r14, y+ \n\t"
12735         "ldi r22, 0 \n\t"
12736         "mul r2, r14 \n\t"
12737         "add r23, r0 \n\t"
12738         "adc r24, r1 \n\t"
12739         "adc r22, r25 \n\t"
12740         "mul r3, r13 \n\t"
12741         "add r23, r0 \n\t"
12742         "adc r24, r1 \n\t"
12743         "adc r22, r25 \n\t"
12744         "mul r4, r12 \n\t"
12745         "add r23, r0 \n\t"
12746         "adc r24, r1 \n\t"
12747         "adc r22, r25 \n\t"
12748         "mul r5, r17 \n\t"
12749         "add r23, r0 \n\t"
12750         "adc r24, r1 \n\t"
12751         "adc r22, r25 \n\t"
12752         "mul r6, r16 \n\t"
12753         "add r23, r0 \n\t"
12754         "adc r24, r1 \n\t"
12755         "adc r22, r25 \n\t"
12756         "st z+, r23 \n\t"
12757
12758         "ld r15, y+ \n\t"
12759         "ldi r23, 0 \n\t"
12760         "mul r2, r15 \n\t"
12761         "add r24, r0 \n\t"
12762         "adc r22, r1 \n\t"
12763         "adc r23, r25 \n\t"
12764         "mul r3, r14 \n\t"
12765         "add r24, r0 \n\t"
12766         "adc r22, r1 \n\t"
12767         "adc r23, r25 \n\t"
12768         "mul r4, r13 \n\t"
12769         "add r24, r0 \n\t"
12770         "adc r22, r1 \n\t"
12771         "adc r23, r25 \n\t"
12772         "mul r5, r12 \n\t"
12773         "add r24, r0 \n\t"
12774         "adc r22, r1 \n\t"
12775         "adc r23, r25 \n\t"
12776         "mul r6, r17 \n\t"
12777         "add r24, r0 \n\t"
12778         "adc r22, r1 \n\t"
12779         "adc r23, r25 \n\t"
12780         "st z+, r24 \n\t"
12781
12782         "ld r16, y+ \n\t"
12783         "ldi r24, 0 \n\t"
12784         "mul r2, r16 \n\t"
12785         "add r22, r0 \n\t"
12786         "adc r23, r1 \n\t"
12787         "adc r24, r25 \n\t"
12788         "mul r3, r15 \n\t"
12789         "add r22, r0 \n\t"
12790         "adc r23, r1 \n\t"
12791         "adc r24, r25 \n\t"
12792         "mul r4, r14 \n\t"
12793         "add r22, r0 \n\t"
12794         "adc r23, r1 \n\t"
12795         "adc r24, r25 \n\t"
12796         "mul r5, r13 \n\t"
12797         "add r22, r0 \n\t"
12798         "adc r23, r1 \n\t"
12799         "adc r24, r25 \n\t"
12800         "mul r6, r12 \n\t"
12801         "add r22, r0 \n\t"
12802         "adc r23, r1 \n\t"
12803         "adc r24, r25 \n\t"
12804         "mul r7, r17 \n\t"
12805         "add r22, r0 \n\t"
12806         "adc r23, r1 \n\t"
12807         "adc r24, r25 \n\t"
12808         "st z+, r22 \n\t"
12809
12810         "ld r17, y+ \n\t"
12811         "ldi r22, 0 \n\t"
12812         "mul r2, r17 \n\t"
12813         "add r23, r0 \n\t"
12814         "adc r24, r1 \n\t"
12815         "adc r22, r25 \n\t"
12816         "mul r3, r16 \n\t"
12817         "add r23, r0 \n\t"
12818         "adc r24, r1 \n\t"
12819         "adc r22, r25 \n\t"
12820         "mul r4, r15 \n\t"
12821         "add r23, r0 \n\t"
12822         "adc r24, r1 \n\t"
12823         "adc r22, r25 \n\t"
12824         "mul r5, r14 \n\t"
12825         "add r23, r0 \n\t"
12826         "adc r24, r1 \n\t"
12827         "adc r22, r25 \n\t"
12828         "mul r6, r13 \n\t"
12829         "add r23, r0 \n\t"
12830         "adc r24, r1 \n\t"
12831         "adc r22, r25 \n\t"
12832         "mul r7, r12 \n\t"
12833         "add r23, r0 \n\t"
12834         "adc r24, r1 \n\t"
12835         "adc r22, r25 \n\t"
12836         "st z+, r23 \n\t"
12837
12838         "ld r2, x+ \n\t"
12839         "ldi r23, 0 \n\t"
12840         "mul r3, r17 \n\t"
12841         "add r24, r0 \n\t"
12842         "adc r22, r1 \n\t"
12843         "adc r23, r25 \n\t"
12844         "mul r4, r16 \n\t"
12845         "add r24, r0 \n\t"
12846         "adc r22, r1 \n\t"
12847         "adc r23, r25 \n\t"
12848         "mul r5, r15 \n\t"
12849         "add r24, r0 \n\t"
12850         "adc r22, r1 \n\t"
12851         "adc r23, r25 \n\t"
12852         "mul r6, r14 \n\t"
12853         "add r24, r0 \n\t"
12854         "adc r22, r1 \n\t"
12855         "adc r23, r25 \n\t"
12856         "mul r7, r13 \n\t"
12857         "add r24, r0 \n\t"
12858         "adc r22, r1 \n\t"
12859         "adc r23, r25 \n\t"
12860         "mul r2, r12 \n\t"
12861         "add r24, r0 \n\t"
12862         "adc r22, r1 \n\t"
12863         "adc r23, r25 \n\t"
12864         "st z+, r24 \n\t"
12865
12866         "ld r3, x+ \n\t"
12867         "ldi r24, 0 \n\t"
12868         "mul r4, r17 \n\t"
12869         "add r22, r0 \n\t"
12870         "adc r23, r1 \n\t"
12871         "adc r24, r25 \n\t"
12872         "mul r5, r16 \n\t"
12873         "add r22, r0 \n\t"
12874         "adc r23, r1 \n\t"
12875         "adc r24, r25 \n\t"
12876         "mul r6, r15 \n\t"
12877         "add r22, r0 \n\t"
12878         "adc r23, r1 \n\t"
12879         "adc r24, r25 \n\t"
12880         "mul r7, r14 \n\t"
12881         "add r22, r0 \n\t"
12882         "adc r23, r1 \n\t"
12883         "adc r24, r25 \n\t"
12884         "mul r2, r13 \n\t"
12885         "add r22, r0 \n\t"
12886         "adc r23, r1 \n\t"
12887         "adc r24, r25 \n\t"
12888         "st z+, r22 \n\t"
12889
12890         "ld r4, x+ \n\t"
12891         "ldi r22, 0 \n\t"
12892         "mul r5, r17 \n\t"
12893         "add r23, r0 \n\t"
12894         "adc r24, r1 \n\t"
12895         "adc r22, r25 \n\t"
12896         "mul r6, r16 \n\t"
12897         "add r23, r0 \n\t"
12898         "adc r24, r1 \n\t"
12899         "adc r22, r25 \n\t"
12900         "mul r7, r15 \n\t"
12901         "add r23, r0 \n\t"
12902         "adc r24, r1 \n\t"
12903         "adc r22, r25 \n\t"
12904         "mul r2, r14 \n\t"
12905         "add r23, r0 \n\t"
12906         "adc r24, r1 \n\t"
12907         "adc r22, r25 \n\t"
12908         "mul r3, r13 \n\t"
12909         "add r23, r0 \n\t"
12910         "adc r24, r1 \n\t"
12911         "adc r22, r25 \n\t"
12912         "st z+, r23 \n\t"
12913
12914         "ld r5, x+ \n\t"
12915         "ldi r23, 0 \n\t"
12916         "mul r6, r17 \n\t"
12917         "add r24, r0 \n\t"
12918         "adc r22, r1 \n\t"
12919         "adc r23, r25 \n\t"
12920         "mul r7, r16 \n\t"
12921         "add r24, r0 \n\t"
12922         "adc r22, r1 \n\t"
12923         "adc r23, r25 \n\t"
12924         "mul r2, r15 \n\t"
12925         "add r24, r0 \n\t"
12926         "adc r22, r1 \n\t"
12927         "adc r23, r25 \n\t"
12928         "mul r3, r14 \n\t"
12929         "add r24, r0 \n\t"
12930         "adc r22, r1 \n\t"
12931         "adc r23, r25 \n\t"
12932         "st z+, r24 \n\t"
12933
12934         "ld r6, x+ \n\t"
12935         "ldi r24, 0 \n\t"
12936         "mul r7, r17 \n\t"
12937         "add r22, r0 \n\t"
12938         "adc r23, r1 \n\t"
12939         "adc r24, r25 \n\t"
12940         "mul r2, r16 \n\t"
12941         "add r22, r0 \n\t"
12942         "adc r23, r1 \n\t"
12943         "adc r24, r25 \n\t"
12944         "mul r3, r15 \n\t"
12945         "add r22, r0 \n\t"
12946         "adc r23, r1 \n\t"
12947         "adc r24, r25 \n\t"
12948         "mul r4, r14 \n\t"
12949         "add r22, r0 \n\t"
12950         "adc r23, r1 \n\t"
12951         "adc r24, r25 \n\t"
12952         "st z+, r22 \n\t"
12953
12954         "ld r7, x+ \n\t"
12955         "ldi r22, 0 \n\t"
12956         "mul r2, r17 \n\t"
12957         "add r23, r0 \n\t"
12958         "adc r24, r1 \n\t"
12959         "adc r22, r25 \n\t"
12960         "mul r3, r16 \n\t"
12961         "add r23, r0 \n\t"
12962         "adc r24, r1 \n\t"
12963         "adc r22, r25 \n\t"
12964         "mul r4, r15 \n\t"
12965         "add r23, r0 \n\t"
12966         "adc r24, r1 \n\t"
12967         "adc r22, r25 \n\t"
12968         "st z+, r23 \n\t"
12969
12970         "ldi r23, 0 \n\t"
12971         "mul r3, r17 \n\t"
12972         "add r24, r0 \n\t"
12973         "adc r22, r1 \n\t"
12974         "adc r23, r25 \n\t"
12975         "mul r4, r16 \n\t"
12976         "add r24, r0 \n\t"
12977         "adc r22, r1 \n\t"
12978         "adc r23, r25 \n\t"
12979         "mul r5, r15 \n\t"
12980         "add r24, r0 \n\t"
12981         "adc r22, r1 \n\t"
12982         "adc r23, r25 \n\t"
12983         "st z+, r24 \n\t"
12984
12985         "ldi r24, 0 \n\t"
12986         "mul r4, r17 \n\t"
12987         "add r22, r0 \n\t"
12988         "adc r23, r1 \n\t"
12989         "adc r24, r25 \n\t"
12990         "mul r5, r16 \n\t"
12991         "add r22, r0 \n\t"
12992         "adc r23, r1 \n\t"
12993         "adc r24, r25 \n\t"
12994         "st z+, r22 \n\t"
12995
12996         "ldi r22, 0 \n\t"
12997         "mul r5, r17 \n\t"
12998         "add r23, r0 \n\t"
12999         "adc r24, r1 \n\t"
13000         "adc r22, r25 \n\t"
13001         "mul r6, r16 \n\t"
13002         "add r23, r0 \n\t"
13003         "adc r24, r1 \n\t"
13004         "adc r22, r25 \n\t"
13005         "st z+, r23 \n\t"
13006
13007         "ldi r23, 0 \n\t"
13008         "mul r6, r17 \n\t"
13009         "add r24, r0 \n\t"
13010         "adc r22, r1 \n\t"
13011         "adc r23, r25 \n\t"
13012         "st z+, r24 \n\t"
13013
13014         "mul r7, r17 \n\t"
13015         "add r22, r0 \n\t"
13016         "adc r23, r1 \n\t"
13017         "st z+, r22 \n\t"
13018         "st z+, r23 \n\t"
13019
13020         "sbiw r26, 12 \n\t"
13021         "sbiw r30, 44 \n\t"
13022         "ld r2, x+ \n\t"
13023         "ld r3, x+ \n\t"
13024         "ld r4, x+ \n\t"
13025         "ld r5, x+ \n\t"
13026         "ld r6, x+ \n\t"
13027         "ld r7, x+ \n\t"
13028         "ld r8, x+ \n\t"
13029         "ld r9, x+ \n\t"
13030         "ld r10, x+ \n\t"
13031         "ld r11, x+ \n\t"
13032         "ld r12, x+ \n\t"
13033         "ld r13, x+ \n\t"
13034         "ld r14, x+ \n\t"
13035         "ld r15, x+ \n\t"
13036         "ld r16, x+ \n\t"
13037         "ld r17, x+ \n\t"
13038         "ld r18, x+ \n\t"
13039         "ld r19, x+ \n\t"
13040         "ld r20, x+ \n\t"
13041         "ld r21, x+ \n\t"
13042
13043         "ldi r23, 0 \n\t"
13044         "mul r2, r2 \n\t"
13045         "st z+, r0 \n\t"
13046         "mov r22, r1 \n\t"
13047
13048         "ldi r24, 0 \n\t"
13049         "mul r2, r3 \n\t"
13050         "add r22, r0 \n\t"
13051         "adc r23, r1 \n\t"
13052         "adc r24, r25 \n\t"
13053         "add r22, r0 \n\t"
13054         "adc r23, r1 \n\t"
13055         "adc r24, r25 \n\t"
13056         "st z+, r22 \n\t"
13057
13058         "ldi r22, 0 \n\t"
13059         "mul r2, r4 \n\t"
13060         "add r23, r0 \n\t"
13061         "adc r24, r1 \n\t"
13062         "adc r22, r25 \n\t"
13063         "add r23, r0 \n\t"
13064         "adc r24, r1 \n\t"
13065         "adc r22, r25 \n\t"
13066         "mul r3, r3 \n\t"
13067         "add r23, r0 \n\t"
13068         "adc r24, r1 \n\t"
13069         "adc r22, r25 \n\t"
13070         "st z+, r23 \n\t"
13071
13072         "ldi r29, 0 \n\t"
13073         "mul r2, r5 \n\t"
13074         "mov r23, r0 \n\t"
13075         "mov r28, r1 \n\t"
13076         "mul r3, r4 \n\t"
13077         "add r23, r0 \n\t"
13078         "adc r28, r1 \n\t"
13079         "adc r29, r25 \n\t"
13080         "lsl r23 \n\t"
13081         "rol r28 \n\t"
13082         "rol r29 \n\t"
13083         "add r23, r24 \n\t"
13084         "adc r28, r22 \n\t"
13085         "adc r29, r25 \n\t"
13086         "st z+, r23 \n\t"
13087
13088         "ldi r22, 0 \n\t"
13089         "mul r2, r6 \n\t"
13090         "mov r23, r0 \n\t"
13091         "mov r24, r1 \n\t"
13092         "mul r3, r5 \n\t"
13093         "add r23, r0 \n\t"
13094         "adc r24, r1 \n\t"
13095         "adc r22, r25 \n\t"
13096         "lsl r23 \n\t"
13097         "rol r24 \n\t"
13098         "rol r22 \n\t"
13099         "mul r4, r4 \n\t"
13100         "add r23, r0 \n\t"
13101         "adc r24, r1 \n\t"
13102         "adc r22, r25 \n\t"
13103         "add r23, r28 \n\t"
13104         "adc r24, r29 \n\t"
13105         "adc r22, r25 \n\t"
13106         "st z+, r23 \n\t"
13107
13108         "ldi r29, 0 \n\t"
13109         "mul r2, r7 \n\t"
13110         "mov r23, r0 \n\t"
13111         "mov r28, r1 \n\t"
13112         "mul r3, r6 \n\t"
13113         "add r23, r0 \n\t"
13114         "adc r28, r1 \n\t"
13115         "adc r29, r25 \n\t"
13116         "mul r4, r5 \n\t"
13117         "add r23, r0 \n\t"
13118         "adc r28, r1 \n\t"
13119         "adc r29, r25 \n\t"
13120         "lsl r23 \n\t"
13121         "rol r28 \n\t"
13122         "rol r29 \n\t"
13123         "add r23, r24 \n\t"
13124         "adc r28, r22 \n\t"
13125         "adc r29, r25 \n\t"
13126         "st z+, r23 \n\t"
13127
13128         "ldi r22, 0 \n\t"
13129         "mul r2, r8 \n\t"
13130         "mov r23, r0 \n\t"
13131         "mov r24, r1 \n\t"
13132         "mul r3, r7 \n\t"
13133         "add r23, r0 \n\t"
13134         "adc r24, r1 \n\t"
13135         "adc r22, r25 \n\t"
13136         "mul r4, r6 \n\t"
13137         "add r23, r0 \n\t"
13138         "adc r24, r1 \n\t"
13139         "adc r22, r25 \n\t"
13140         "lsl r23 \n\t"
13141         "rol r24 \n\t"
13142         "rol r22 \n\t"
13143         "mul r5, r5 \n\t"
13144         "add r23, r0 \n\t"
13145         "adc r24, r1 \n\t"
13146         "adc r22, r25 \n\t"
13147         "add r23, r28 \n\t"
13148         "adc r24, r29 \n\t"
13149         "adc r22, r25 \n\t"
13150         "st z+, r23 \n\t"
13151
13152         "ldi r29, 0 \n\t"
13153         "mul r2, r9 \n\t"
13154         "mov r23, r0 \n\t"
13155         "mov r28, r1 \n\t"
13156         "mul r3, r8 \n\t"
13157         "add r23, r0 \n\t"
13158         "adc r28, r1 \n\t"
13159         "adc r29, r25 \n\t"
13160         "mul r4, r7 \n\t"
13161         "add r23, r0 \n\t"
13162         "adc r28, r1 \n\t"
13163         "adc r29, r25 \n\t"
13164         "mul r5, r6 \n\t"
13165         "add r23, r0 \n\t"
13166         "adc r28, r1 \n\t"
13167         "adc r29, r25 \n\t"
13168         "lsl r23 \n\t"
13169         "rol r28 \n\t"
13170         "rol r29 \n\t"
13171         "add r23, r24 \n\t"
13172         "adc r28, r22 \n\t"
13173         "adc r29, r25 \n\t"
13174         "st z+, r23 \n\t"
13175
13176         "ldi r22, 0 \n\t"
13177         "mul r2, r10 \n\t"
13178         "mov r23, r0 \n\t"
13179         "mov r24, r1 \n\t"
13180         "mul r3, r9 \n\t"
13181         "add r23, r0 \n\t"
13182         "adc r24, r1 \n\t"
13183         "adc r22, r25 \n\t"
13184         "mul r4, r8 \n\t"
13185         "add r23, r0 \n\t"
13186         "adc r24, r1 \n\t"
13187         "adc r22, r25 \n\t"
13188         "mul r5, r7 \n\t"
13189         "add r23, r0 \n\t"
13190         "adc r24, r1 \n\t"
13191         "adc r22, r25 \n\t"
13192         "lsl r23 \n\t"
13193         "rol r24 \n\t"
13194         "rol r22 \n\t"
13195         "mul r6, r6 \n\t"
13196         "add r23, r0 \n\t"
13197         "adc r24, r1 \n\t"
13198         "adc r22, r25 \n\t"
13199         "add r23, r28 \n\t"
13200         "adc r24, r29 \n\t"
13201         "adc r22, r25 \n\t"
13202         "st z+, r23 \n\t"
13203
13204         "ldi r29, 0 \n\t"
13205         "mul r2, r11 \n\t"
13206         "mov r23, r0 \n\t"
13207         "mov r28, r1 \n\t"
13208         "mul r3, r10 \n\t"
13209         "add r23, r0 \n\t"
13210         "adc r28, r1 \n\t"
13211         "adc r29, r25 \n\t"
13212         "mul r4, r9 \n\t"
13213         "add r23, r0 \n\t"
13214         "adc r28, r1 \n\t"
13215         "adc r29, r25 \n\t"
13216         "mul r5, r8 \n\t"
13217         "add r23, r0 \n\t"
13218         "adc r28, r1 \n\t"
13219         "adc r29, r25 \n\t"
13220         "mul r6, r7 \n\t"
13221         "add r23, r0 \n\t"
13222         "adc r28, r1 \n\t"
13223         "adc r29, r25 \n\t"
13224         "lsl r23 \n\t"
13225         "rol r28 \n\t"
13226         "rol r29 \n\t"
13227         "add r23, r24 \n\t"
13228         "adc r28, r22 \n\t"
13229         "adc r29, r25 \n\t"
13230         "st z+, r23 \n\t"
13231
13232         "ldi r22, 0 \n\t"
13233         "mul r2, r12 \n\t"
13234         "mov r23, r0 \n\t"
13235         "mov r24, r1 \n\t"
13236         "mul r3, r11 \n\t"
13237         "add r23, r0 \n\t"
13238         "adc r24, r1 \n\t"
13239         "adc r22, r25 \n\t"
13240         "mul r4, r10 \n\t"
13241         "add r23, r0 \n\t"
13242         "adc r24, r1 \n\t"
13243         "adc r22, r25 \n\t"
13244         "mul r5, r9 \n\t"
13245         "add r23, r0 \n\t"
13246         "adc r24, r1 \n\t"
13247         "adc r22, r25 \n\t"
13248         "mul r6, r8 \n\t"
13249         "add r23, r0 \n\t"
13250         "adc r24, r1 \n\t"
13251         "adc r22, r25 \n\t"
13252         "lsl r23 \n\t"
13253         "rol r24 \n\t"
13254         "rol r22 \n\t"
13255         "mul r7, r7 \n\t"
13256         "add r23, r0 \n\t"
13257         "adc r24, r1 \n\t"
13258         "adc r22, r25 \n\t"
13259         "add r23, r28 \n\t"
13260         "adc r24, r29 \n\t"
13261         "adc r22, r25 \n\t"
13262         "st z+, r23 \n\t"
13263
13264         "ldi r29, 0 \n\t"
13265         "mul r2, r13 \n\t"
13266         "mov r23, r0 \n\t"
13267         "mov r28, r1 \n\t"
13268         "mul r3, r12 \n\t"
13269         "add r23, r0 \n\t"
13270         "adc r28, r1 \n\t"
13271         "adc r29, r25 \n\t"
13272         "mul r4, r11 \n\t"
13273         "add r23, r0 \n\t"
13274         "adc r28, r1 \n\t"
13275         "adc r29, r25 \n\t"
13276         "mul r5, r10 \n\t"
13277         "add r23, r0 \n\t"
13278         "adc r28, r1 \n\t"
13279         "adc r29, r25 \n\t"
13280         "mul r6, r9 \n\t"
13281         "add r23, r0 \n\t"
13282         "adc r28, r1 \n\t"
13283         "adc r29, r25 \n\t"
13284         "mul r7, r8 \n\t"
13285         "add r23, r0 \n\t"
13286         "adc r28, r1 \n\t"
13287         "adc r29, r25 \n\t"
13288         "lsl r23 \n\t"
13289         "rol r28 \n\t"
13290         "rol r29 \n\t"
13291         "add r23, r24 \n\t"
13292         "adc r28, r22 \n\t"
13293         "adc r29, r25 \n\t"
13294         "st z+, r23 \n\t"
13295
13296         "ldi r22, 0 \n\t"
13297         "mul r2, r14 \n\t"
13298         "mov r23, r0 \n\t"
13299         "mov r24, r1 \n\t"
13300         "mul r3, r13 \n\t"
13301         "add r23, r0 \n\t"
13302         "adc r24, r1 \n\t"
13303         "adc r22, r25 \n\t"
13304         "mul r4, r12 \n\t"
13305         "add r23, r0 \n\t"
13306         "adc r24, r1 \n\t"
13307         "adc r22, r25 \n\t"
13308         "mul r5, r11 \n\t"
13309         "add r23, r0 \n\t"
13310         "adc r24, r1 \n\t"
13311         "adc r22, r25 \n\t"
13312         "mul r6, r10 \n\t"
13313         "add r23, r0 \n\t"
13314         "adc r24, r1 \n\t"
13315         "adc r22, r25 \n\t"
13316         "mul r7, r9 \n\t"
13317         "add r23, r0 \n\t"
13318         "adc r24, r1 \n\t"
13319         "adc r22, r25 \n\t"
13320         "lsl r23 \n\t"
13321         "rol r24 \n\t"
13322         "rol r22 \n\t"
13323         "mul r8, r8 \n\t"
13324         "add r23, r0 \n\t"
13325         "adc r24, r1 \n\t"
13326         "adc r22, r25 \n\t"
13327         "add r23, r28 \n\t"
13328         "adc r24, r29 \n\t"
13329         "adc r22, r25 \n\t"
13330         "st z+, r23 \n\t"
13331
13332         "ldi r29, 0 \n\t"
13333         "mul r2, r15 \n\t"
13334         "mov r23, r0 \n\t"
13335         "mov r28, r1 \n\t"
13336         "mul r3, r14 \n\t"
13337         "add r23, r0 \n\t"
13338         "adc r28, r1 \n\t"
13339         "adc r29, r25 \n\t"
13340         "mul r4, r13 \n\t"
13341         "add r23, r0 \n\t"
13342         "adc r28, r1 \n\t"
13343         "adc r29, r25 \n\t"
13344         "mul r5, r12 \n\t"
13345         "add r23, r0 \n\t"
13346         "adc r28, r1 \n\t"
13347         "adc r29, r25 \n\t"
13348         "mul r6, r11 \n\t"
13349         "add r23, r0 \n\t"
13350         "adc r28, r1 \n\t"
13351         "adc r29, r25 \n\t"
13352         "mul r7, r10 \n\t"
13353         "add r23, r0 \n\t"
13354         "adc r28, r1 \n\t"
13355         "adc r29, r25 \n\t"
13356         "mul r8, r9 \n\t"
13357         "add r23, r0 \n\t"
13358         "adc r28, r1 \n\t"
13359         "adc r29, r25 \n\t"
13360         "lsl r23 \n\t"
13361         "rol r28 \n\t"
13362         "rol r29 \n\t"
13363         "add r23, r24 \n\t"
13364         "adc r28, r22 \n\t"
13365         "adc r29, r25 \n\t"
13366         "st z+, r23 \n\t"
13367
13368         "ldi r22, 0 \n\t"
13369         "mul r2, r16 \n\t"
13370         "mov r23, r0 \n\t"
13371         "mov r24, r1 \n\t"
13372         "mul r3, r15 \n\t"
13373         "add r23, r0 \n\t"
13374         "adc r24, r1 \n\t"
13375         "adc r22, r25 \n\t"
13376         "mul r4, r14 \n\t"
13377         "add r23, r0 \n\t"
13378         "adc r24, r1 \n\t"
13379         "adc r22, r25 \n\t"
13380         "mul r5, r13 \n\t"
13381         "add r23, r0 \n\t"
13382         "adc r24, r1 \n\t"
13383         "adc r22, r25 \n\t"
13384         "mul r6, r12 \n\t"
13385         "add r23, r0 \n\t"
13386         "adc r24, r1 \n\t"
13387         "adc r22, r25 \n\t"
13388         "mul r7, r11 \n\t"
13389         "add r23, r0 \n\t"
13390         "adc r24, r1 \n\t"
13391         "adc r22, r25 \n\t"
13392         "mul r8, r10 \n\t"
13393         "add r23, r0 \n\t"
13394         "adc r24, r1 \n\t"
13395         "adc r22, r25 \n\t"
13396         "lsl r23 \n\t"
13397         "rol r24 \n\t"
13398         "rol r22 \n\t"
13399         "mul r9, r9 \n\t"
13400         "add r23, r0 \n\t"
13401         "adc r24, r1 \n\t"
13402         "adc r22, r25 \n\t"
13403         "add r23, r28 \n\t"
13404         "adc r24, r29 \n\t"
13405         "adc r22, r25 \n\t"
13406         "st z+, r23 \n\t"
13407
13408         "ldi r29, 0 \n\t"
13409         "mul r2, r17 \n\t"
13410         "mov r23, r0 \n\t"
13411         "mov r28, r1 \n\t"
13412         "mul r3, r16 \n\t"
13413         "add r23, r0 \n\t"
13414         "adc r28, r1 \n\t"
13415         "adc r29, r25 \n\t"
13416         "mul r4, r15 \n\t"
13417         "add r23, r0 \n\t"
13418         "adc r28, r1 \n\t"
13419         "adc r29, r25 \n\t"
13420         "mul r5, r14 \n\t"
13421         "add r23, r0 \n\t"
13422         "adc r28, r1 \n\t"
13423         "adc r29, r25 \n\t"
13424         "mul r6, r13 \n\t"
13425         "add r23, r0 \n\t"
13426         "adc r28, r1 \n\t"
13427         "adc r29, r25 \n\t"
13428         "mul r7, r12 \n\t"
13429         "add r23, r0 \n\t"
13430         "adc r28, r1 \n\t"
13431         "adc r29, r25 \n\t"
13432         "mul r8, r11 \n\t"
13433         "add r23, r0 \n\t"
13434         "adc r28, r1 \n\t"
13435         "adc r29, r25 \n\t"
13436         "mul r9, r10 \n\t"
13437         "add r23, r0 \n\t"
13438         "adc r28, r1 \n\t"
13439         "adc r29, r25 \n\t"
13440         "lsl r23 \n\t"
13441         "rol r28 \n\t"
13442         "rol r29 \n\t"
13443         "add r23, r24 \n\t"
13444         "adc r28, r22 \n\t"
13445         "adc r29, r25 \n\t"
13446         "st z+, r23 \n\t"
13447
13448         "ldi r22, 0 \n\t"
13449         "mul r2, r18 \n\t"
13450         "mov r23, r0 \n\t"
13451         "mov r24, r1 \n\t"
13452         "mul r3, r17 \n\t"
13453         "add r23, r0 \n\t"
13454         "adc r24, r1 \n\t"
13455         "adc r22, r25 \n\t"
13456         "mul r4, r16 \n\t"
13457         "add r23, r0 \n\t"
13458         "adc r24, r1 \n\t"
13459         "adc r22, r25 \n\t"
13460         "mul r5, r15 \n\t"
13461         "add r23, r0 \n\t"
13462         "adc r24, r1 \n\t"
13463         "adc r22, r25 \n\t"
13464         "mul r6, r14 \n\t"
13465         "add r23, r0 \n\t"
13466         "adc r24, r1 \n\t"
13467         "adc r22, r25 \n\t"
13468         "mul r7, r13 \n\t"
13469         "add r23, r0 \n\t"
13470         "adc r24, r1 \n\t"
13471         "adc r22, r25 \n\t"
13472         "mul r8, r12 \n\t"
13473         "add r23, r0 \n\t"
13474         "adc r24, r1 \n\t"
13475         "adc r22, r25 \n\t"
13476         "mul r9, r11 \n\t"
13477         "add r23, r0 \n\t"
13478         "adc r24, r1 \n\t"
13479         "adc r22, r25 \n\t"
13480         "lsl r23 \n\t"
13481         "rol r24 \n\t"
13482         "rol r22 \n\t"
13483         "mul r10, r10 \n\t"
13484         "add r23, r0 \n\t"
13485         "adc r24, r1 \n\t"
13486         "adc r22, r25 \n\t"
13487         "add r23, r28 \n\t"
13488         "adc r24, r29 \n\t"
13489         "adc r22, r25 \n\t"
13490         "st z+, r23 \n\t"
13491
13492         "ldi r29, 0 \n\t"
13493         "mul r2, r19 \n\t"
13494         "mov r23, r0 \n\t"
13495         "mov r28, r1 \n\t"
13496         "mul r3, r18 \n\t"
13497         "add r23, r0 \n\t"
13498         "adc r28, r1 \n\t"
13499         "adc r29, r25 \n\t"
13500         "mul r4, r17 \n\t"
13501         "add r23, r0 \n\t"
13502         "adc r28, r1 \n\t"
13503         "adc r29, r25 \n\t"
13504         "mul r5, r16 \n\t"
13505         "add r23, r0 \n\t"
13506         "adc r28, r1 \n\t"
13507         "adc r29, r25 \n\t"
13508         "mul r6, r15 \n\t"
13509         "add r23, r0 \n\t"
13510         "adc r28, r1 \n\t"
13511         "adc r29, r25 \n\t"
13512         "mul r7, r14 \n\t"
13513         "add r23, r0 \n\t"
13514         "adc r28, r1 \n\t"
13515         "adc r29, r25 \n\t"
13516         "mul r8, r13 \n\t"
13517         "add r23, r0 \n\t"
13518         "adc r28, r1 \n\t"
13519         "adc r29, r25 \n\t"
13520         "mul r9, r12 \n\t"
13521         "add r23, r0 \n\t"
13522         "adc r28, r1 \n\t"
13523         "adc r29, r25 \n\t"
13524         "mul r10, r11 \n\t"
13525         "add r23, r0 \n\t"
13526         "adc r28, r1 \n\t"
13527         "adc r29, r25 \n\t"
13528         "lsl r23 \n\t"
13529         "rol r28 \n\t"
13530         "rol r29 \n\t"
13531         "add r23, r24 \n\t"
13532         "adc r28, r22 \n\t"
13533         "adc r29, r25 \n\t"
13534         "st z+, r23 \n\t"
13535
13536         "ldi r22, 0 \n\t"
13537         "mul r2, r20 \n\t"
13538         "mov r23, r0 \n\t"
13539         "mov r24, r1 \n\t"
13540         "mul r3, r19 \n\t"
13541         "add r23, r0 \n\t"
13542         "adc r24, r1 \n\t"
13543         "adc r22, r25 \n\t"
13544         "mul r4, r18 \n\t"
13545         "add r23, r0 \n\t"
13546         "adc r24, r1 \n\t"
13547         "adc r22, r25 \n\t"
13548         "mul r5, r17 \n\t"
13549         "add r23, r0 \n\t"
13550         "adc r24, r1 \n\t"
13551         "adc r22, r25 \n\t"
13552         "mul r6, r16 \n\t"
13553         "add r23, r0 \n\t"
13554         "adc r24, r1 \n\t"
13555         "adc r22, r25 \n\t"
13556         "mul r7, r15 \n\t"
13557         "add r23, r0 \n\t"
13558         "adc r24, r1 \n\t"
13559         "adc r22, r25 \n\t"
13560         "mul r8, r14 \n\t"
13561         "add r23, r0 \n\t"
13562         "adc r24, r1 \n\t"
13563         "adc r22, r25 \n\t"
13564         "mul r9, r13 \n\t"
13565         "add r23, r0 \n\t"
13566         "adc r24, r1 \n\t"
13567         "adc r22, r25 \n\t"
13568         "mul r10, r12 \n\t"
13569         "add r23, r0 \n\t"
13570         "adc r24, r1 \n\t"
13571         "adc r22, r25 \n\t"
13572         "lsl r23 \n\t"
13573         "rol r24 \n\t"
13574         "rol r22 \n\t"
13575         "mul r11, r11 \n\t"
13576         "add r23, r0 \n\t"
13577         "adc r24, r1 \n\t"
13578         "adc r22, r25 \n\t"
13579         "add r23, r28 \n\t"
13580         "adc r24, r29 \n\t"
13581         "adc r22, r25 \n\t"
13582         "st z+, r23 \n\t"
13583
13584         "ldi r29, 0 \n\t"
13585         "mul r2, r21 \n\t"
13586         "mov r23, r0 \n\t"
13587         "mov r28, r1 \n\t"
13588         "mul r3, r20 \n\t"
13589         "add r23, r0 \n\t"
13590         "adc r28, r1 \n\t"
13591         "adc r29, r25 \n\t"
13592         "mul r4, r19 \n\t"
13593         "add r23, r0 \n\t"
13594         "adc r28, r1 \n\t"
13595         "adc r29, r25 \n\t"
13596         "mul r5, r18 \n\t"
13597         "add r23, r0 \n\t"
13598         "adc r28, r1 \n\t"
13599         "adc r29, r25 \n\t"
13600         "mul r6, r17 \n\t"
13601         "add r23, r0 \n\t"
13602         "adc r28, r1 \n\t"
13603         "adc r29, r25 \n\t"
13604         "mul r7, r16 \n\t"
13605         "add r23, r0 \n\t"
13606         "adc r28, r1 \n\t"
13607         "adc r29, r25 \n\t"
13608         "mul r8, r15 \n\t"
13609         "add r23, r0 \n\t"
13610         "adc r28, r1 \n\t"
13611         "adc r29, r25 \n\t"
13612         "mul r9, r14 \n\t"
13613         "add r23, r0 \n\t"
13614         "adc r28, r1 \n\t"
13615         "adc r29, r25 \n\t"
13616         "mul r10, r13 \n\t"
13617         "add r23, r0 \n\t"
13618         "adc r28, r1 \n\t"
13619         "adc r29, r25 \n\t"
13620         "mul r11, r12 \n\t"
13621         "add r23, r0 \n\t"
13622         "adc r28, r1 \n\t"
13623         "adc r29, r25 \n\t"
13624         "lsl r23 \n\t"
13625         "rol r28 \n\t"
13626         "rol r29 \n\t"
13627         "add r23, r24 \n\t"
13628         "adc r28, r22 \n\t"
13629         "adc r29, r25 \n\t"
13630         "st z+, r23 \n\t"
13631
13632         "ld r2, x+ \n\t"
13633         "ldi r22, 0 \n\t"
13634         "mul r3, r21 \n\t"
13635         "mov r23, r0 \n\t"
13636         "mov r24, r1 \n\t"
13637         "mul r4, r20 \n\t"
13638         "add r23, r0 \n\t"
13639         "adc r24, r1 \n\t"
13640         "adc r22, r25 \n\t"
13641         "mul r5, r19 \n\t"
13642         "add r23, r0 \n\t"
13643         "adc r24, r1 \n\t"
13644         "adc r22, r25 \n\t"
13645         "mul r6, r18 \n\t"
13646         "add r23, r0 \n\t"
13647         "adc r24, r1 \n\t"
13648         "adc r22, r25 \n\t"
13649         "mul r7, r17 \n\t"
13650         "add r23, r0 \n\t"
13651         "adc r24, r1 \n\t"
13652         "adc r22, r25 \n\t"
13653         "mul r8, r16 \n\t"
13654         "add r23, r0 \n\t"
13655         "adc r24, r1 \n\t"
13656         "adc r22, r25 \n\t"
13657         "mul r9, r15 \n\t"
13658         "add r23, r0 \n\t"
13659         "adc r24, r1 \n\t"
13660         "adc r22, r25 \n\t"
13661         "mul r10, r14 \n\t"
13662         "add r23, r0 \n\t"
13663         "adc r24, r1 \n\t"
13664         "adc r22, r25 \n\t"
13665         "mul r11, r13 \n\t"
13666         "add r23, r0 \n\t"
13667         "adc r24, r1 \n\t"
13668         "adc r22, r25 \n\t"
13669         "ld r0, z \n\t"
13670         "add r23, r0 \n\t"
13671         "adc r24, r25 \n\t"
13672         "adc r22, r25 \n\t"
13673         "lsl r23 \n\t"
13674         "rol r24 \n\t"
13675         "rol r22 \n\t"
13676         "mul r12, r12 \n\t"
13677         "add r23, r0 \n\t"
13678         "adc r24, r1 \n\t"
13679         "adc r22, r25 \n\t"
13680         "add r23, r28 \n\t"
13681         "adc r24, r29 \n\t"
13682         "adc r22, r25 \n\t"
13683         "st z+, r23 \n\t"
13684
13685         "ldi r29, 0 \n\t"
13686         "mul r3, r2 \n\t"
13687         "mov r23, r0 \n\t"
13688         "mov r28, r1 \n\t"
13689         "mul r4, r21 \n\t"
13690         "add r23, r0 \n\t"
13691         "adc r28, r1 \n\t"
13692         "adc r29, r25 \n\t"
13693         "mul r5, r20 \n\t"
13694         "add r23, r0 \n\t"
13695         "adc r28, r1 \n\t"
13696         "adc r29, r25 \n\t"
13697         "mul r6, r19 \n\t"
13698         "add r23, r0 \n\t"
13699         "adc r28, r1 \n\t"
13700         "adc r29, r25 \n\t"
13701         "mul r7, r18 \n\t"
13702         "add r23, r0 \n\t"
13703         "adc r28, r1 \n\t"
13704         "adc r29, r25 \n\t"
13705         "mul r8, r17 \n\t"
13706         "add r23, r0 \n\t"
13707         "adc r28, r1 \n\t"
13708         "adc r29, r25 \n\t"
13709         "mul r9, r16 \n\t"
13710         "add r23, r0 \n\t"
13711         "adc r28, r1 \n\t"
13712         "adc r29, r25 \n\t"
13713         "mul r10, r15 \n\t"
13714         "add r23, r0 \n\t"
13715         "adc r28, r1 \n\t"
13716         "adc r29, r25 \n\t"
13717         "mul r11, r14 \n\t"
13718         "add r23, r0 \n\t"
13719         "adc r28, r1 \n\t"
13720         "adc r29, r25 \n\t"
13721         "mul r12, r13 \n\t"
13722         "add r23, r0 \n\t"
13723         "adc r28, r1 \n\t"
13724         "adc r29, r25 \n\t"
13725         "ld r0, z \n\t"
13726         "add r23, r0 \n\t"
13727         "adc r28, r25 \n\t"
13728         "adc r29, r25 \n\t"
13729         "lsl r23 \n\t"
13730         "rol r28 \n\t"
13731         "rol r29 \n\t"
13732         "add r23, r24 \n\t"
13733         "adc r28, r22 \n\t"
13734         "adc r29, r25 \n\t"
13735         "st z+, r23 \n\t"
13736
13737         "ld r3, x+ \n\t"
13738         "ldi r22, 0 \n\t"
13739         "mul r4, r2 \n\t"
13740         "mov r23, r0 \n\t"
13741         "mov r24, r1 \n\t"
13742         "mul r5, r21 \n\t"
13743         "add r23, r0 \n\t"
13744         "adc r24, r1 \n\t"
13745         "adc r22, r25 \n\t"
13746         "mul r6, r20 \n\t"
13747         "add r23, r0 \n\t"
13748         "adc r24, r1 \n\t"
13749         "adc r22, r25 \n\t"
13750         "mul r7, r19 \n\t"
13751         "add r23, r0 \n\t"
13752         "adc r24, r1 \n\t"
13753         "adc r22, r25 \n\t"
13754         "mul r8, r18 \n\t"
13755         "add r23, r0 \n\t"
13756         "adc r24, r1 \n\t"
13757         "adc r22, r25 \n\t"
13758         "mul r9, r17 \n\t"
13759         "add r23, r0 \n\t"
13760         "adc r24, r1 \n\t"
13761         "adc r22, r25 \n\t"
13762         "mul r10, r16 \n\t"
13763         "add r23, r0 \n\t"
13764         "adc r24, r1 \n\t"
13765         "adc r22, r25 \n\t"
13766         "mul r11, r15 \n\t"
13767         "add r23, r0 \n\t"
13768         "adc r24, r1 \n\t"
13769         "adc r22, r25 \n\t"
13770         "mul r12, r14 \n\t"
13771         "add r23, r0 \n\t"
13772         "adc r24, r1 \n\t"
13773         "adc r22, r25 \n\t"
13774         "ld r0, z \n\t"
13775         "add r23, r0 \n\t"
13776         "adc r24, r25 \n\t"
13777         "adc r22, r25 \n\t"
13778         "lsl r23 \n\t"
13779         "rol r24 \n\t"
13780         "rol r22 \n\t"
13781         "mul r13, r13 \n\t"
13782         "add r23, r0 \n\t"
13783         "adc r24, r1 \n\t"
13784         "adc r22, r25 \n\t"
13785         "add r23, r28 \n\t"
13786         "adc r24, r29 \n\t"
13787         "adc r22, r25 \n\t"
13788         "st z+, r23 \n\t"
13789
13790         "ldi r29, 0 \n\t"
13791         "mul r4, r3 \n\t"
13792         "mov r23, r0 \n\t"
13793         "mov r28, r1 \n\t"
13794         "mul r5, r2 \n\t"
13795         "add r23, r0 \n\t"
13796         "adc r28, r1 \n\t"
13797         "adc r29, r25 \n\t"
13798         "mul r6, r21 \n\t"
13799         "add r23, r0 \n\t"
13800         "adc r28, r1 \n\t"
13801         "adc r29, r25 \n\t"
13802         "mul r7, r20 \n\t"
13803         "add r23, r0 \n\t"
13804         "adc r28, r1 \n\t"
13805         "adc r29, r25 \n\t"
13806         "mul r8, r19 \n\t"
13807         "add r23, r0 \n\t"
13808         "adc r28, r1 \n\t"
13809         "adc r29, r25 \n\t"
13810         "mul r9, r18 \n\t"
13811         "add r23, r0 \n\t"
13812         "adc r28, r1 \n\t"
13813         "adc r29, r25 \n\t"
13814         "mul r10, r17 \n\t"
13815         "add r23, r0 \n\t"
13816         "adc r28, r1 \n\t"
13817         "adc r29, r25 \n\t"
13818         "mul r11, r16 \n\t"
13819         "add r23, r0 \n\t"
13820         "adc r28, r1 \n\t"
13821         "adc r29, r25 \n\t"
13822         "mul r12, r15 \n\t"
13823         "add r23, r0 \n\t"
13824         "adc r28, r1 \n\t"
13825         "adc r29, r25 \n\t"
13826         "mul r13, r14 \n\t"
13827         "add r23, r0 \n\t"
13828         "adc r28, r1 \n\t"
13829         "adc r29, r25 \n\t"
13830         "ld r0, z \n\t"
13831         "add r23, r0 \n\t"
13832         "adc r28, r25 \n\t"
13833         "adc r29, r25 \n\t"
13834         "lsl r23 \n\t"
13835         "rol r28 \n\t"
13836         "rol r29 \n\t"
13837         "add r23, r24 \n\t"
13838         "adc r28, r22 \n\t"
13839         "adc r29, r25 \n\t"
13840         "st z+, r23 \n\t"
13841
13842         "ld r4, x+ \n\t"
13843         "ldi r22, 0 \n\t"
13844         "mul r5, r3 \n\t"
13845         "mov r23, r0 \n\t"
13846         "mov r24, r1 \n\t"
13847         "mul r6, r2 \n\t"
13848         "add r23, r0 \n\t"
13849         "adc r24, r1 \n\t"
13850         "adc r22, r25 \n\t"
13851         "mul r7, r21 \n\t"
13852         "add r23, r0 \n\t"
13853         "adc r24, r1 \n\t"
13854         "adc r22, r25 \n\t"
13855         "mul r8, r20 \n\t"
13856         "add r23, r0 \n\t"
13857         "adc r24, r1 \n\t"
13858         "adc r22, r25 \n\t"
13859         "mul r9, r19 \n\t"
13860         "add r23, r0 \n\t"
13861         "adc r24, r1 \n\t"
13862         "adc r22, r25 \n\t"
13863         "mul r10, r18 \n\t"
13864         "add r23, r0 \n\t"
13865         "adc r24, r1 \n\t"
13866         "adc r22, r25 \n\t"
13867         "mul r11, r17 \n\t"
13868         "add r23, r0 \n\t"
13869         "adc r24, r1 \n\t"
13870         "adc r22, r25 \n\t"
13871         "mul r12, r16 \n\t"
13872         "add r23, r0 \n\t"
13873         "adc r24, r1 \n\t"
13874         "adc r22, r25 \n\t"
13875         "mul r13, r15 \n\t"
13876         "add r23, r0 \n\t"
13877         "adc r24, r1 \n\t"
13878         "adc r22, r25 \n\t"
13879         "ld r0, z \n\t"
13880         "add r23, r0 \n\t"
13881         "adc r24, r25 \n\t"
13882         "adc r22, r25 \n\t"
13883         "lsl r23 \n\t"
13884         "rol r24 \n\t"
13885         "rol r22 \n\t"
13886         "mul r14, r14 \n\t"
13887         "add r23, r0 \n\t"
13888         "adc r24, r1 \n\t"
13889         "adc r22, r25 \n\t"
13890         "add r23, r28 \n\t"
13891         "adc r24, r29 \n\t"
13892         "adc r22, r25 \n\t"
13893         "st z+, r23 \n\t"
13894
13895         "ldi r29, 0 \n\t"
13896         "mul r5, r4 \n\t"
13897         "mov r23, r0 \n\t"
13898         "mov r28, r1 \n\t"
13899         "mul r6, r3 \n\t"
13900         "add r23, r0 \n\t"
13901         "adc r28, r1 \n\t"
13902         "adc r29, r25 \n\t"
13903         "mul r7, r2 \n\t"
13904         "add r23, r0 \n\t"
13905         "adc r28, r1 \n\t"
13906         "adc r29, r25 \n\t"
13907         "mul r8, r21 \n\t"
13908         "add r23, r0 \n\t"
13909         "adc r28, r1 \n\t"
13910         "adc r29, r25 \n\t"
13911         "mul r9, r20 \n\t"
13912         "add r23, r0 \n\t"
13913         "adc r28, r1 \n\t"
13914         "adc r29, r25 \n\t"
13915         "mul r10, r19 \n\t"
13916         "add r23, r0 \n\t"
13917         "adc r28, r1 \n\t"
13918         "adc r29, r25 \n\t"
13919         "mul r11, r18 \n\t"
13920         "add r23, r0 \n\t"
13921         "adc r28, r1 \n\t"
13922         "adc r29, r25 \n\t"
13923         "mul r12, r17 \n\t"
13924         "add r23, r0 \n\t"
13925         "adc r28, r1 \n\t"
13926         "adc r29, r25 \n\t"
13927         "mul r13, r16 \n\t"
13928         "add r23, r0 \n\t"
13929         "adc r28, r1 \n\t"
13930         "adc r29, r25 \n\t"
13931         "mul r14, r15 \n\t"
13932         "add r23, r0 \n\t"
13933         "adc r28, r1 \n\t"
13934         "adc r29, r25 \n\t"
13935         "ld r0, z \n\t"
13936         "add r23, r0 \n\t"
13937         "adc r28, r25 \n\t"
13938         "adc r29, r25 \n\t"
13939         "lsl r23 \n\t"
13940         "rol r28 \n\t"
13941         "rol r29 \n\t"
13942         "add r23, r24 \n\t"
13943         "adc r28, r22 \n\t"
13944         "adc r29, r25 \n\t"
13945         "st z+, r23 \n\t"
13946
13947         "ld r5, x+ \n\t"
13948         "ldi r22, 0 \n\t"
13949         "mul r6, r4 \n\t"
13950         "mov r23, r0 \n\t"
13951         "mov r24, r1 \n\t"
13952         "mul r7, r3 \n\t"
13953         "add r23, r0 \n\t"
13954         "adc r24, r1 \n\t"
13955         "adc r22, r25 \n\t"
13956         "mul r8, r2 \n\t"
13957         "add r23, r0 \n\t"
13958         "adc r24, r1 \n\t"
13959         "adc r22, r25 \n\t"
13960         "mul r9, r21 \n\t"
13961         "add r23, r0 \n\t"
13962         "adc r24, r1 \n\t"
13963         "adc r22, r25 \n\t"
13964         "mul r10, r20 \n\t"
13965         "add r23, r0 \n\t"
13966         "adc r24, r1 \n\t"
13967         "adc r22, r25 \n\t"
13968         "mul r11, r19 \n\t"
13969         "add r23, r0 \n\t"
13970         "adc r24, r1 \n\t"
13971         "adc r22, r25 \n\t"
13972         "mul r12, r18 \n\t"
13973         "add r23, r0 \n\t"
13974         "adc r24, r1 \n\t"
13975         "adc r22, r25 \n\t"
13976         "mul r13, r17 \n\t"
13977         "add r23, r0 \n\t"
13978         "adc r24, r1 \n\t"
13979         "adc r22, r25 \n\t"
13980         "mul r14, r16 \n\t"
13981         "add r23, r0 \n\t"
13982         "adc r24, r1 \n\t"
13983         "adc r22, r25 \n\t"
13984         "ld r0, z \n\t"
13985         "add r23, r0 \n\t"
13986         "adc r24, r25 \n\t"
13987         "adc r22, r25 \n\t"
13988         "lsl r23 \n\t"
13989         "rol r24 \n\t"
13990         "rol r22 \n\t"
13991         "mul r15, r15 \n\t"
13992         "add r23, r0 \n\t"
13993         "adc r24, r1 \n\t"
13994         "adc r22, r25 \n\t"
13995         "add r23, r28 \n\t"
13996         "adc r24, r29 \n\t"
13997         "adc r22, r25 \n\t"
13998         "st z+, r23 \n\t"
13999
14000         "ldi r29, 0 \n\t"
14001         "mul r6, r5 \n\t"
14002         "mov r23, r0 \n\t"
14003         "mov r28, r1 \n\t"
14004         "mul r7, r4 \n\t"
14005         "add r23, r0 \n\t"
14006         "adc r28, r1 \n\t"
14007         "adc r29, r25 \n\t"
14008         "mul r8, r3 \n\t"
14009         "add r23, r0 \n\t"
14010         "adc r28, r1 \n\t"
14011         "adc r29, r25 \n\t"
14012         "mul r9, r2 \n\t"
14013         "add r23, r0 \n\t"
14014         "adc r28, r1 \n\t"
14015         "adc r29, r25 \n\t"
14016         "mul r10, r21 \n\t"
14017         "add r23, r0 \n\t"
14018         "adc r28, r1 \n\t"
14019         "adc r29, r25 \n\t"
14020         "mul r11, r20 \n\t"
14021         "add r23, r0 \n\t"
14022         "adc r28, r1 \n\t"
14023         "adc r29, r25 \n\t"
14024         "mul r12, r19 \n\t"
14025         "add r23, r0 \n\t"
14026         "adc r28, r1 \n\t"
14027         "adc r29, r25 \n\t"
14028         "mul r13, r18 \n\t"
14029         "add r23, r0 \n\t"
14030         "adc r28, r1 \n\t"
14031         "adc r29, r25 \n\t"
14032         "mul r14, r17 \n\t"
14033         "add r23, r0 \n\t"
14034         "adc r28, r1 \n\t"
14035         "adc r29, r25 \n\t"
14036         "mul r15, r16 \n\t"
14037         "add r23, r0 \n\t"
14038         "adc r28, r1 \n\t"
14039         "adc r29, r25 \n\t"
14040         "ld r0, z \n\t"
14041         "add r23, r0 \n\t"
14042         "adc r28, r25 \n\t"
14043         "adc r29, r25 \n\t"
14044         "lsl r23 \n\t"
14045         "rol r28 \n\t"
14046         "rol r29 \n\t"
14047         "add r23, r24 \n\t"
14048         "adc r28, r22 \n\t"
14049         "adc r29, r25 \n\t"
14050         "st z+, r23 \n\t"
14051
14052         "ld r6, x+ \n\t"
14053         "ldi r22, 0 \n\t"
14054         "mul r7, r5 \n\t"
14055         "mov r23, r0 \n\t"
14056         "mov r24, r1 \n\t"
14057         "mul r8, r4 \n\t"
14058         "add r23, r0 \n\t"
14059         "adc r24, r1 \n\t"
14060         "adc r22, r25 \n\t"
14061         "mul r9, r3 \n\t"
14062         "add r23, r0 \n\t"
14063         "adc r24, r1 \n\t"
14064         "adc r22, r25 \n\t"
14065         "mul r10, r2 \n\t"
14066         "add r23, r0 \n\t"
14067         "adc r24, r1 \n\t"
14068         "adc r22, r25 \n\t"
14069         "mul r11, r21 \n\t"
14070         "add r23, r0 \n\t"
14071         "adc r24, r1 \n\t"
14072         "adc r22, r25 \n\t"
14073         "mul r12, r20 \n\t"
14074         "add r23, r0 \n\t"
14075         "adc r24, r1 \n\t"
14076         "adc r22, r25 \n\t"
14077         "mul r13, r19 \n\t"
14078         "add r23, r0 \n\t"
14079         "adc r24, r1 \n\t"
14080         "adc r22, r25 \n\t"
14081         "mul r14, r18 \n\t"
14082         "add r23, r0 \n\t"
14083         "adc r24, r1 \n\t"
14084         "adc r22, r25 \n\t"
14085         "mul r15, r17 \n\t"
14086         "add r23, r0 \n\t"
14087         "adc r24, r1 \n\t"
14088         "adc r22, r25 \n\t"
14089         "ld r0, z \n\t"
14090         "add r23, r0 \n\t"
14091         "adc r24, r25 \n\t"
14092         "adc r22, r25 \n\t"
14093         "lsl r23 \n\t"
14094         "rol r24 \n\t"
14095         "rol r22 \n\t"
14096         "mul r16, r16 \n\t"
14097         "add r23, r0 \n\t"
14098         "adc r24, r1 \n\t"
14099         "adc r22, r25 \n\t"
14100         "add r23, r28 \n\t"
14101         "adc r24, r29 \n\t"
14102         "adc r22, r25 \n\t"
14103         "st z+, r23 \n\t"
14104
14105         "ldi r29, 0 \n\t"
14106         "mul r7, r6 \n\t"
14107         "mov r23, r0 \n\t"
14108         "mov r28, r1 \n\t"
14109         "mul r8, r5 \n\t"
14110         "add r23, r0 \n\t"
14111         "adc r28, r1 \n\t"
14112         "adc r29, r25 \n\t"
14113         "mul r9, r4 \n\t"
14114         "add r23, r0 \n\t"
14115         "adc r28, r1 \n\t"
14116         "adc r29, r25 \n\t"
14117         "mul r10, r3 \n\t"
14118         "add r23, r0 \n\t"
14119         "adc r28, r1 \n\t"
14120         "adc r29, r25 \n\t"
14121         "mul r11, r2 \n\t"
14122         "add r23, r0 \n\t"
14123         "adc r28, r1 \n\t"
14124         "adc r29, r25 \n\t"
14125         "mul r12, r21 \n\t"
14126         "add r23, r0 \n\t"
14127         "adc r28, r1 \n\t"
14128         "adc r29, r25 \n\t"
14129         "mul r13, r20 \n\t"
14130         "add r23, r0 \n\t"
14131         "adc r28, r1 \n\t"
14132         "adc r29, r25 \n\t"
14133         "mul r14, r19 \n\t"
14134         "add r23, r0 \n\t"
14135         "adc r28, r1 \n\t"
14136         "adc r29, r25 \n\t"
14137         "mul r15, r18 \n\t"
14138         "add r23, r0 \n\t"
14139         "adc r28, r1 \n\t"
14140         "adc r29, r25 \n\t"
14141         "mul r16, r17 \n\t"
14142         "add r23, r0 \n\t"
14143         "adc r28, r1 \n\t"
14144         "adc r29, r25 \n\t"
14145         "ld r0, z \n\t"
14146         "add r23, r0 \n\t"
14147         "adc r28, r25 \n\t"
14148         "adc r29, r25 \n\t"
14149         "lsl r23 \n\t"
14150         "rol r28 \n\t"
14151         "rol r29 \n\t"
14152         "add r23, r24 \n\t"
14153         "adc r28, r22 \n\t"
14154         "adc r29, r25 \n\t"
14155         "st z+, r23 \n\t"
14156
14157         "ld r7, x+ \n\t"
14158         "ldi r22, 0 \n\t"
14159         "mul r8, r6 \n\t"
14160         "mov r23, r0 \n\t"
14161         "mov r24, r1 \n\t"
14162         "mul r9, r5 \n\t"
14163         "add r23, r0 \n\t"
14164         "adc r24, r1 \n\t"
14165         "adc r22, r25 \n\t"
14166         "mul r10, r4 \n\t"
14167         "add r23, r0 \n\t"
14168         "adc r24, r1 \n\t"
14169         "adc r22, r25 \n\t"
14170         "mul r11, r3 \n\t"
14171         "add r23, r0 \n\t"
14172         "adc r24, r1 \n\t"
14173         "adc r22, r25 \n\t"
14174         "mul r12, r2 \n\t"
14175         "add r23, r0 \n\t"
14176         "adc r24, r1 \n\t"
14177         "adc r22, r25 \n\t"
14178         "mul r13, r21 \n\t"
14179         "add r23, r0 \n\t"
14180         "adc r24, r1 \n\t"
14181         "adc r22, r25 \n\t"
14182         "mul r14, r20 \n\t"
14183         "add r23, r0 \n\t"
14184         "adc r24, r1 \n\t"
14185         "adc r22, r25 \n\t"
14186         "mul r15, r19 \n\t"
14187         "add r23, r0 \n\t"
14188         "adc r24, r1 \n\t"
14189         "adc r22, r25 \n\t"
14190         "mul r16, r18 \n\t"
14191         "add r23, r0 \n\t"
14192         "adc r24, r1 \n\t"
14193         "adc r22, r25 \n\t"
14194         "ld r0, z \n\t"
14195         "add r23, r0 \n\t"
14196         "adc r24, r25 \n\t"
14197         "adc r22, r25 \n\t"
14198         "lsl r23 \n\t"
14199         "rol r24 \n\t"
14200         "rol r22 \n\t"
14201         "mul r17, r17 \n\t"
14202         "add r23, r0 \n\t"
14203         "adc r24, r1 \n\t"
14204         "adc r22, r25 \n\t"
14205         "add r23, r28 \n\t"
14206         "adc r24, r29 \n\t"
14207         "adc r22, r25 \n\t"
14208         "st z+, r23 \n\t"
14209
14210         "ldi r29, 0 \n\t"
14211         "mul r8, r7 \n\t"
14212         "mov r23, r0 \n\t"
14213         "mov r28, r1 \n\t"
14214         "mul r9, r6 \n\t"
14215         "add r23, r0 \n\t"
14216         "adc r28, r1 \n\t"
14217         "adc r29, r25 \n\t"
14218         "mul r10, r5 \n\t"
14219         "add r23, r0 \n\t"
14220         "adc r28, r1 \n\t"
14221         "adc r29, r25 \n\t"
14222         "mul r11, r4 \n\t"
14223         "add r23, r0 \n\t"
14224         "adc r28, r1 \n\t"
14225         "adc r29, r25 \n\t"
14226         "mul r12, r3 \n\t"
14227         "add r23, r0 \n\t"
14228         "adc r28, r1 \n\t"
14229         "adc r29, r25 \n\t"
14230         "mul r13, r2 \n\t"
14231         "add r23, r0 \n\t"
14232         "adc r28, r1 \n\t"
14233         "adc r29, r25 \n\t"
14234         "mul r14, r21 \n\t"
14235         "add r23, r0 \n\t"
14236         "adc r28, r1 \n\t"
14237         "adc r29, r25 \n\t"
14238         "mul r15, r20 \n\t"
14239         "add r23, r0 \n\t"
14240         "adc r28, r1 \n\t"
14241         "adc r29, r25 \n\t"
14242         "mul r16, r19 \n\t"
14243         "add r23, r0 \n\t"
14244         "adc r28, r1 \n\t"
14245         "adc r29, r25 \n\t"
14246         "mul r17, r18 \n\t"
14247         "add r23, r0 \n\t"
14248         "adc r28, r1 \n\t"
14249         "adc r29, r25 \n\t"
14250         "ld r0, z \n\t"
14251         "add r23, r0 \n\t"
14252         "adc r28, r25 \n\t"
14253         "adc r29, r25 \n\t"
14254         "lsl r23 \n\t"
14255         "rol r28 \n\t"
14256         "rol r29 \n\t"
14257         "add r23, r24 \n\t"
14258         "adc r28, r22 \n\t"
14259         "adc r29, r25 \n\t"
14260         "st z+, r23 \n\t"
14261
14262         "ld r8, x+ \n\t"
14263         "ldi r22, 0 \n\t"
14264         "mul r9, r7 \n\t"
14265         "mov r23, r0 \n\t"
14266         "mov r24, r1 \n\t"
14267         "mul r10, r6 \n\t"
14268         "add r23, r0 \n\t"
14269         "adc r24, r1 \n\t"
14270         "adc r22, r25 \n\t"
14271         "mul r11, r5 \n\t"
14272         "add r23, r0 \n\t"
14273         "adc r24, r1 \n\t"
14274         "adc r22, r25 \n\t"
14275         "mul r12, r4 \n\t"
14276         "add r23, r0 \n\t"
14277         "adc r24, r1 \n\t"
14278         "adc r22, r25 \n\t"
14279         "mul r13, r3 \n\t"
14280         "add r23, r0 \n\t"
14281         "adc r24, r1 \n\t"
14282         "adc r22, r25 \n\t"
14283         "mul r14, r2 \n\t"
14284         "add r23, r0 \n\t"
14285         "adc r24, r1 \n\t"
14286         "adc r22, r25 \n\t"
14287         "mul r15, r21 \n\t"
14288         "add r23, r0 \n\t"
14289         "adc r24, r1 \n\t"
14290         "adc r22, r25 \n\t"
14291         "mul r16, r20 \n\t"
14292         "add r23, r0 \n\t"
14293         "adc r24, r1 \n\t"
14294         "adc r22, r25 \n\t"
14295         "mul r17, r19 \n\t"
14296         "add r23, r0 \n\t"
14297         "adc r24, r1 \n\t"
14298         "adc r22, r25 \n\t"
14299         "ld r0, z \n\t"
14300         "add r23, r0 \n\t"
14301         "adc r24, r25 \n\t"
14302         "adc r22, r25 \n\t"
14303         "lsl r23 \n\t"
14304         "rol r24 \n\t"
14305         "rol r22 \n\t"
14306         "mul r18, r18 \n\t"
14307         "add r23, r0 \n\t"
14308         "adc r24, r1 \n\t"
14309         "adc r22, r25 \n\t"
14310         "add r23, r28 \n\t"
14311         "adc r24, r29 \n\t"
14312         "adc r22, r25 \n\t"
14313         "st z+, r23 \n\t"
14314
14315         "ldi r29, 0 \n\t"
14316         "mul r9, r8 \n\t"
14317         "mov r23, r0 \n\t"
14318         "mov r28, r1 \n\t"
14319         "mul r10, r7 \n\t"
14320         "add r23, r0 \n\t"
14321         "adc r28, r1 \n\t"
14322         "adc r29, r25 \n\t"
14323         "mul r11, r6 \n\t"
14324         "add r23, r0 \n\t"
14325         "adc r28, r1 \n\t"
14326         "adc r29, r25 \n\t"
14327         "mul r12, r5 \n\t"
14328         "add r23, r0 \n\t"
14329         "adc r28, r1 \n\t"
14330         "adc r29, r25 \n\t"
14331         "mul r13, r4 \n\t"
14332         "add r23, r0 \n\t"
14333         "adc r28, r1 \n\t"
14334         "adc r29, r25 \n\t"
14335         "mul r14, r3 \n\t"
14336         "add r23, r0 \n\t"
14337         "adc r28, r1 \n\t"
14338         "adc r29, r25 \n\t"
14339         "mul r15, r2 \n\t"
14340         "add r23, r0 \n\t"
14341         "adc r28, r1 \n\t"
14342         "adc r29, r25 \n\t"
14343         "mul r16, r21 \n\t"
14344         "add r23, r0 \n\t"
14345         "adc r28, r1 \n\t"
14346         "adc r29, r25 \n\t"
14347         "mul r17, r20 \n\t"
14348         "add r23, r0 \n\t"
14349         "adc r28, r1 \n\t"
14350         "adc r29, r25 \n\t"
14351         "mul r18, r19 \n\t"
14352         "add r23, r0 \n\t"
14353         "adc r28, r1 \n\t"
14354         "adc r29, r25 \n\t"
14355         "ld r0, z \n\t"
14356         "add r23, r0 \n\t"
14357         "adc r28, r25 \n\t"
14358         "adc r29, r25 \n\t"
14359         "lsl r23 \n\t"
14360         "rol r28 \n\t"
14361         "rol r29 \n\t"
14362         "add r23, r24 \n\t"
14363         "adc r28, r22 \n\t"
14364         "adc r29, r25 \n\t"
14365         "st z+, r23 \n\t"
14366
14367         "ld r9, x+ \n\t"
14368         "ldi r22, 0 \n\t"
14369         "mul r10, r8 \n\t"
14370         "mov r23, r0 \n\t"
14371         "mov r24, r1 \n\t"
14372         "mul r11, r7 \n\t"
14373         "add r23, r0 \n\t"
14374         "adc r24, r1 \n\t"
14375         "adc r22, r25 \n\t"
14376         "mul r12, r6 \n\t"
14377         "add r23, r0 \n\t"
14378         "adc r24, r1 \n\t"
14379         "adc r22, r25 \n\t"
14380         "mul r13, r5 \n\t"
14381         "add r23, r0 \n\t"
14382         "adc r24, r1 \n\t"
14383         "adc r22, r25 \n\t"
14384         "mul r14, r4 \n\t"
14385         "add r23, r0 \n\t"
14386         "adc r24, r1 \n\t"
14387         "adc r22, r25 \n\t"
14388         "mul r15, r3 \n\t"
14389         "add r23, r0 \n\t"
14390         "adc r24, r1 \n\t"
14391         "adc r22, r25 \n\t"
14392         "mul r16, r2 \n\t"
14393         "add r23, r0 \n\t"
14394         "adc r24, r1 \n\t"
14395         "adc r22, r25 \n\t"
14396         "mul r17, r21 \n\t"
14397         "add r23, r0 \n\t"
14398         "adc r24, r1 \n\t"
14399         "adc r22, r25 \n\t"
14400         "mul r18, r20 \n\t"
14401         "add r23, r0 \n\t"
14402         "adc r24, r1 \n\t"
14403         "adc r22, r25 \n\t"
14404         "ld r0, z \n\t"
14405         "add r23, r0 \n\t"
14406         "adc r24, r25 \n\t"
14407         "adc r22, r25 \n\t"
14408         "lsl r23 \n\t"
14409         "rol r24 \n\t"
14410         "rol r22 \n\t"
14411         "mul r19, r19 \n\t"
14412         "add r23, r0 \n\t"
14413         "adc r24, r1 \n\t"
14414         "adc r22, r25 \n\t"
14415         "add r23, r28 \n\t"
14416         "adc r24, r29 \n\t"
14417         "adc r22, r25 \n\t"
14418         "st z+, r23 \n\t"
14419
14420         "ldi r29, 0 \n\t"
14421         "mul r10, r9 \n\t"
14422         "mov r23, r0 \n\t"
14423         "mov r28, r1 \n\t"
14424         "mul r11, r8 \n\t"
14425         "add r23, r0 \n\t"
14426         "adc r28, r1 \n\t"
14427         "adc r29, r25 \n\t"
14428         "mul r12, r7 \n\t"
14429         "add r23, r0 \n\t"
14430         "adc r28, r1 \n\t"
14431         "adc r29, r25 \n\t"
14432         "mul r13, r6 \n\t"
14433         "add r23, r0 \n\t"
14434         "adc r28, r1 \n\t"
14435         "adc r29, r25 \n\t"
14436         "mul r14, r5 \n\t"
14437         "add r23, r0 \n\t"
14438         "adc r28, r1 \n\t"
14439         "adc r29, r25 \n\t"
14440         "mul r15, r4 \n\t"
14441         "add r23, r0 \n\t"
14442         "adc r28, r1 \n\t"
14443         "adc r29, r25 \n\t"
14444         "mul r16, r3 \n\t"
14445         "add r23, r0 \n\t"
14446         "adc r28, r1 \n\t"
14447         "adc r29, r25 \n\t"
14448         "mul r17, r2 \n\t"
14449         "add r23, r0 \n\t"
14450         "adc r28, r1 \n\t"
14451         "adc r29, r25 \n\t"
14452         "mul r18, r21 \n\t"
14453         "add r23, r0 \n\t"
14454         "adc r28, r1 \n\t"
14455         "adc r29, r25 \n\t"
14456         "mul r19, r20 \n\t"
14457         "add r23, r0 \n\t"
14458         "adc r28, r1 \n\t"
14459         "adc r29, r25 \n\t"
14460         "ld r0, z \n\t"
14461         "add r23, r0 \n\t"
14462         "adc r28, r25 \n\t"
14463         "adc r29, r25 \n\t"
14464         "lsl r23 \n\t"
14465         "rol r28 \n\t"
14466         "rol r29 \n\t"
14467         "add r23, r24 \n\t"
14468         "adc r28, r22 \n\t"
14469         "adc r29, r25 \n\t"
14470         "st z+, r23 \n\t"
14471
14472         "ld r10, x+ \n\t"
14473         "ldi r22, 0 \n\t"
14474         "mul r11, r9 \n\t"
14475         "mov r23, r0 \n\t"
14476         "mov r24, r1 \n\t"
14477         "mul r12, r8 \n\t"
14478         "add r23, r0 \n\t"
14479         "adc r24, r1 \n\t"
14480         "adc r22, r25 \n\t"
14481         "mul r13, r7 \n\t"
14482         "add r23, r0 \n\t"
14483         "adc r24, r1 \n\t"
14484         "adc r22, r25 \n\t"
14485         "mul r14, r6 \n\t"
14486         "add r23, r0 \n\t"
14487         "adc r24, r1 \n\t"
14488         "adc r22, r25 \n\t"
14489         "mul r15, r5 \n\t"
14490         "add r23, r0 \n\t"
14491         "adc r24, r1 \n\t"
14492         "adc r22, r25 \n\t"
14493         "mul r16, r4 \n\t"
14494         "add r23, r0 \n\t"
14495         "adc r24, r1 \n\t"
14496         "adc r22, r25 \n\t"
14497         "mul r17, r3 \n\t"
14498         "add r23, r0 \n\t"
14499         "adc r24, r1 \n\t"
14500         "adc r22, r25 \n\t"
14501         "mul r18, r2 \n\t"
14502         "add r23, r0 \n\t"
14503         "adc r24, r1 \n\t"
14504         "adc r22, r25 \n\t"
14505         "mul r19, r21 \n\t"
14506         "add r23, r0 \n\t"
14507         "adc r24, r1 \n\t"
14508         "adc r22, r25 \n\t"
14509         "ld r0, z \n\t"
14510         "add r23, r0 \n\t"
14511         "adc r24, r25 \n\t"
14512         "adc r22, r25 \n\t"
14513         "lsl r23 \n\t"
14514         "rol r24 \n\t"
14515         "rol r22 \n\t"
14516         "mul r20, r20 \n\t"
14517         "add r23, r0 \n\t"
14518         "adc r24, r1 \n\t"
14519         "adc r22, r25 \n\t"
14520         "add r23, r28 \n\t"
14521         "adc r24, r29 \n\t"
14522         "adc r22, r25 \n\t"
14523         "st z+, r23 \n\t"
14524
14525         "ldi r29, 0 \n\t"
14526         "mul r11, r10 \n\t"
14527         "mov r23, r0 \n\t"
14528         "mov r28, r1 \n\t"
14529         "mul r12, r9 \n\t"
14530         "add r23, r0 \n\t"
14531         "adc r28, r1 \n\t"
14532         "adc r29, r25 \n\t"
14533         "mul r13, r8 \n\t"
14534         "add r23, r0 \n\t"
14535         "adc r28, r1 \n\t"
14536         "adc r29, r25 \n\t"
14537         "mul r14, r7 \n\t"
14538         "add r23, r0 \n\t"
14539         "adc r28, r1 \n\t"
14540         "adc r29, r25 \n\t"
14541         "mul r15, r6 \n\t"
14542         "add r23, r0 \n\t"
14543         "adc r28, r1 \n\t"
14544         "adc r29, r25 \n\t"
14545         "mul r16, r5 \n\t"
14546         "add r23, r0 \n\t"
14547         "adc r28, r1 \n\t"
14548         "adc r29, r25 \n\t"
14549         "mul r17, r4 \n\t"
14550         "add r23, r0 \n\t"
14551         "adc r28, r1 \n\t"
14552         "adc r29, r25 \n\t"
14553         "mul r18, r3 \n\t"
14554         "add r23, r0 \n\t"
14555         "adc r28, r1 \n\t"
14556         "adc r29, r25 \n\t"
14557         "mul r19, r2 \n\t"
14558         "add r23, r0 \n\t"
14559         "adc r28, r1 \n\t"
14560         "adc r29, r25 \n\t"
14561         "mul r20, r21 \n\t"
14562         "add r23, r0 \n\t"
14563         "adc r28, r1 \n\t"
14564         "adc r29, r25 \n\t"
14565         "ld r0, z \n\t"
14566         "add r23, r0 \n\t"
14567         "adc r28, r25 \n\t"
14568         "adc r29, r25 \n\t"
14569         "lsl r23 \n\t"
14570         "rol r28 \n\t"
14571         "rol r29 \n\t"
14572         "add r23, r24 \n\t"
14573         "adc r28, r22 \n\t"
14574         "adc r29, r25 \n\t"
14575         "st z+, r23 \n\t"
14576
14577         "ld r11, x+ \n\t"
14578         "ldi r22, 0 \n\t"
14579         "mul r12, r10 \n\t"
14580         "mov r23, r0 \n\t"
14581         "mov r24, r1 \n\t"
14582         "mul r13, r9 \n\t"
14583         "add r23, r0 \n\t"
14584         "adc r24, r1 \n\t"
14585         "adc r22, r25 \n\t"
14586         "mul r14, r8 \n\t"
14587         "add r23, r0 \n\t"
14588         "adc r24, r1 \n\t"
14589         "adc r22, r25 \n\t"
14590         "mul r15, r7 \n\t"
14591         "add r23, r0 \n\t"
14592         "adc r24, r1 \n\t"
14593         "adc r22, r25 \n\t"
14594         "mul r16, r6 \n\t"
14595         "add r23, r0 \n\t"
14596         "adc r24, r1 \n\t"
14597         "adc r22, r25 \n\t"
14598         "mul r17, r5 \n\t"
14599         "add r23, r0 \n\t"
14600         "adc r24, r1 \n\t"
14601         "adc r22, r25 \n\t"
14602         "mul r18, r4 \n\t"
14603         "add r23, r0 \n\t"
14604         "adc r24, r1 \n\t"
14605         "adc r22, r25 \n\t"
14606         "mul r19, r3 \n\t"
14607         "add r23, r0 \n\t"
14608         "adc r24, r1 \n\t"
14609         "adc r22, r25 \n\t"
14610         "mul r20, r2 \n\t"
14611         "add r23, r0 \n\t"
14612         "adc r24, r1 \n\t"
14613         "adc r22, r25 \n\t"
14614         "ld r0, z \n\t"
14615         "add r23, r0 \n\t"
14616         "adc r24, r25 \n\t"
14617         "adc r22, r25 \n\t"
14618         "lsl r23 \n\t"
14619         "rol r24 \n\t"
14620         "rol r22 \n\t"
14621         "mul r21, r21 \n\t"
14622         "add r23, r0 \n\t"
14623         "adc r24, r1 \n\t"
14624         "adc r22, r25 \n\t"
14625         "add r23, r28 \n\t"
14626         "adc r24, r29 \n\t"
14627         "adc r22, r25 \n\t"
14628         "st z+, r23 \n\t"
14629
14630         "ldi r29, 0 \n\t"
14631         "mul r12, r11 \n\t"
14632         "mov r23, r0 \n\t"
14633         "mov r28, r1 \n\t"
14634         "mul r13, r10 \n\t"
14635         "add r23, r0 \n\t"
14636         "adc r28, r1 \n\t"
14637         "adc r29, r25 \n\t"
14638         "mul r14, r9 \n\t"
14639         "add r23, r0 \n\t"
14640         "adc r28, r1 \n\t"
14641         "adc r29, r25 \n\t"
14642         "mul r15, r8 \n\t"
14643         "add r23, r0 \n\t"
14644         "adc r28, r1 \n\t"
14645         "adc r29, r25 \n\t"
14646         "mul r16, r7 \n\t"
14647         "add r23, r0 \n\t"
14648         "adc r28, r1 \n\t"
14649         "adc r29, r25 \n\t"
14650         "mul r17, r6 \n\t"
14651         "add r23, r0 \n\t"
14652         "adc r28, r1 \n\t"
14653         "adc r29, r25 \n\t"
14654         "mul r18, r5 \n\t"
14655         "add r23, r0 \n\t"
14656         "adc r28, r1 \n\t"
14657         "adc r29, r25 \n\t"
14658         "mul r19, r4 \n\t"
14659         "add r23, r0 \n\t"
14660         "adc r28, r1 \n\t"
14661         "adc r29, r25 \n\t"
14662         "mul r20, r3 \n\t"
14663         "add r23, r0 \n\t"
14664         "adc r28, r1 \n\t"
14665         "adc r29, r25 \n\t"
14666         "mul r21, r2 \n\t"
14667         "add r23, r0 \n\t"
14668         "adc r28, r1 \n\t"
14669         "adc r29, r25 \n\t"
14670         "ld r0, z \n\t"
14671         "add r23, r0 \n\t"
14672         "adc r28, r25 \n\t"
14673         "adc r29, r25 \n\t"
14674         "lsl r23 \n\t"
14675         "rol r28 \n\t"
14676         "rol r29 \n\t"
14677         "add r23, r24 \n\t"
14678         "adc r28, r22 \n\t"
14679         "adc r29, r25 \n\t"
14680         "st z+, r23 \n\t"
14681
14682         "ld r12, x+ \n\t"
14683         "ldi r22, 0 \n\t"
14684         "mul r13, r11 \n\t"
14685         "mov r23, r0 \n\t"
14686         "mov r24, r1 \n\t"
14687         "mul r14, r10 \n\t"
14688         "add r23, r0 \n\t"
14689         "adc r24, r1 \n\t"
14690         "adc r22, r25 \n\t"
14691         "mul r15, r9 \n\t"
14692         "add r23, r0 \n\t"
14693         "adc r24, r1 \n\t"
14694         "adc r22, r25 \n\t"
14695         "mul r16, r8 \n\t"
14696         "add r23, r0 \n\t"
14697         "adc r24, r1 \n\t"
14698         "adc r22, r25 \n\t"
14699         "mul r17, r7 \n\t"
14700         "add r23, r0 \n\t"
14701         "adc r24, r1 \n\t"
14702         "adc r22, r25 \n\t"
14703         "mul r18, r6 \n\t"
14704         "add r23, r0 \n\t"
14705         "adc r24, r1 \n\t"
14706         "adc r22, r25 \n\t"
14707         "mul r19, r5 \n\t"
14708         "add r23, r0 \n\t"
14709         "adc r24, r1 \n\t"
14710         "adc r22, r25 \n\t"
14711         "mul r20, r4 \n\t"
14712         "add r23, r0 \n\t"
14713         "adc r24, r1 \n\t"
14714         "adc r22, r25 \n\t"
14715         "mul r21, r3 \n\t"
14716         "add r23, r0 \n\t"
14717         "adc r24, r1 \n\t"
14718         "adc r22, r25 \n\t"
14719         "ld r0, z \n\t"
14720         "add r23, r0 \n\t"
14721         "adc r24, r25 \n\t"
14722         "adc r22, r25 \n\t"
14723         "lsl r23 \n\t"
14724         "rol r24 \n\t"
14725         "rol r22 \n\t"
14726         "mul r2, r2 \n\t"
14727         "add r23, r0 \n\t"
14728         "adc r24, r1 \n\t"
14729         "adc r22, r25 \n\t"
14730         "add r23, r28 \n\t"
14731         "adc r24, r29 \n\t"
14732         "adc r22, r25 \n\t"
14733         "st z+, r23 \n\t"
14734
14735         "ldi r29, 0 \n\t"
14736         "mul r13, r12 \n\t"
14737         "mov r23, r0 \n\t"
14738         "mov r28, r1 \n\t"
14739         "mul r14, r11 \n\t"
14740         "add r23, r0 \n\t"
14741         "adc r28, r1 \n\t"
14742         "adc r29, r25 \n\t"
14743         "mul r15, r10 \n\t"
14744         "add r23, r0 \n\t"
14745         "adc r28, r1 \n\t"
14746         "adc r29, r25 \n\t"
14747         "mul r16, r9 \n\t"
14748         "add r23, r0 \n\t"
14749         "adc r28, r1 \n\t"
14750         "adc r29, r25 \n\t"
14751         "mul r17, r8 \n\t"
14752         "add r23, r0 \n\t"
14753         "adc r28, r1 \n\t"
14754         "adc r29, r25 \n\t"
14755         "mul r18, r7 \n\t"
14756         "add r23, r0 \n\t"
14757         "adc r28, r1 \n\t"
14758         "adc r29, r25 \n\t"
14759         "mul r19, r6 \n\t"
14760         "add r23, r0 \n\t"
14761         "adc r28, r1 \n\t"
14762         "adc r29, r25 \n\t"
14763         "mul r20, r5 \n\t"
14764         "add r23, r0 \n\t"
14765         "adc r28, r1 \n\t"
14766         "adc r29, r25 \n\t"
14767         "mul r21, r4 \n\t"
14768         "add r23, r0 \n\t"
14769         "adc r28, r1 \n\t"
14770         "adc r29, r25 \n\t"
14771         "mul r2, r3 \n\t"
14772         "add r23, r0 \n\t"
14773         "adc r28, r1 \n\t"
14774         "adc r29, r25 \n\t"
14775         "ld r0, z \n\t"
14776         "add r23, r0 \n\t"
14777         "adc r28, r25 \n\t"
14778         "adc r29, r25 \n\t"
14779         "lsl r23 \n\t"
14780         "rol r28 \n\t"
14781         "rol r29 \n\t"
14782         "add r23, r24 \n\t"
14783         "adc r28, r22 \n\t"
14784         "adc r29, r25 \n\t"
14785         "st z+, r23 \n\t"
14786
14787         "ld r13, x+ \n\t"
14788         "ldi r22, 0 \n\t"
14789         "mul r14, r12 \n\t"
14790         "mov r23, r0 \n\t"
14791         "mov r24, r1 \n\t"
14792         "mul r15, r11 \n\t"
14793         "add r23, r0 \n\t"
14794         "adc r24, r1 \n\t"
14795         "adc r22, r25 \n\t"
14796         "mul r16, r10 \n\t"
14797         "add r23, r0 \n\t"
14798         "adc r24, r1 \n\t"
14799         "adc r22, r25 \n\t"
14800         "mul r17, r9 \n\t"
14801         "add r23, r0 \n\t"
14802         "adc r24, r1 \n\t"
14803         "adc r22, r25 \n\t"
14804         "mul r18, r8 \n\t"
14805         "add r23, r0 \n\t"
14806         "adc r24, r1 \n\t"
14807         "adc r22, r25 \n\t"
14808         "mul r19, r7 \n\t"
14809         "add r23, r0 \n\t"
14810         "adc r24, r1 \n\t"
14811         "adc r22, r25 \n\t"
14812         "mul r20, r6 \n\t"
14813         "add r23, r0 \n\t"
14814         "adc r24, r1 \n\t"
14815         "adc r22, r25 \n\t"
14816         "mul r21, r5 \n\t"
14817         "add r23, r0 \n\t"
14818         "adc r24, r1 \n\t"
14819         "adc r22, r25 \n\t"
14820         "mul r2, r4 \n\t"
14821         "add r23, r0 \n\t"
14822         "adc r24, r1 \n\t"
14823         "adc r22, r25 \n\t"
14824         "ld r0, z \n\t"
14825         "add r23, r0 \n\t"
14826         "adc r24, r25 \n\t"
14827         "adc r22, r25 \n\t"
14828         "lsl r23 \n\t"
14829         "rol r24 \n\t"
14830         "rol r22 \n\t"
14831         "mul r3, r3 \n\t"
14832         "add r23, r0 \n\t"
14833         "adc r24, r1 \n\t"
14834         "adc r22, r25 \n\t"
14835         "add r23, r28 \n\t"
14836         "adc r24, r29 \n\t"
14837         "adc r22, r25 \n\t"
14838         "st z+, r23 \n\t"
14839
14840         "ldi r29, 0 \n\t"
14841         "mul r14, r13 \n\t"
14842         "mov r23, r0 \n\t"
14843         "mov r28, r1 \n\t"
14844         "mul r15, r12 \n\t"
14845         "add r23, r0 \n\t"
14846         "adc r28, r1 \n\t"
14847         "adc r29, r25 \n\t"
14848         "mul r16, r11 \n\t"
14849         "add r23, r0 \n\t"
14850         "adc r28, r1 \n\t"
14851         "adc r29, r25 \n\t"
14852         "mul r17, r10 \n\t"
14853         "add r23, r0 \n\t"
14854         "adc r28, r1 \n\t"
14855         "adc r29, r25 \n\t"
14856         "mul r18, r9 \n\t"
14857         "add r23, r0 \n\t"
14858         "adc r28, r1 \n\t"
14859         "adc r29, r25 \n\t"
14860         "mul r19, r8 \n\t"
14861         "add r23, r0 \n\t"
14862         "adc r28, r1 \n\t"
14863         "adc r29, r25 \n\t"
14864         "mul r20, r7 \n\t"
14865         "add r23, r0 \n\t"
14866         "adc r28, r1 \n\t"
14867         "adc r29, r25 \n\t"
14868         "mul r21, r6 \n\t"
14869         "add r23, r0 \n\t"
14870         "adc r28, r1 \n\t"
14871         "adc r29, r25 \n\t"
14872         "mul r2, r5 \n\t"
14873         "add r23, r0 \n\t"
14874         "adc r28, r1 \n\t"
14875         "adc r29, r25 \n\t"
14876         "mul r3, r4 \n\t"
14877         "add r23, r0 \n\t"
14878         "adc r28, r1 \n\t"
14879         "adc r29, r25 \n\t"
14880         "ld r0, z \n\t"
14881         "add r23, r0 \n\t"
14882         "adc r28, r25 \n\t"
14883         "adc r29, r25 \n\t"
14884         "lsl r23 \n\t"
14885         "rol r28 \n\t"
14886         "rol r29 \n\t"
14887         "add r23, r24 \n\t"
14888         "adc r28, r22 \n\t"
14889         "adc r29, r25 \n\t"
14890         "st z+, r23 \n\t"
14891
14892         "ldi r22, 0 \n\t"
14893         "mul r15, r13 \n\t"
14894         "mov r23, r0 \n\t"
14895         "mov r24, r1 \n\t"
14896         "mul r16, r12 \n\t"
14897         "add r23, r0 \n\t"
14898         "adc r24, r1 \n\t"
14899         "adc r22, r25 \n\t"
14900         "mul r17, r11 \n\t"
14901         "add r23, r0 \n\t"
14902         "adc r24, r1 \n\t"
14903         "adc r22, r25 \n\t"
14904         "mul r18, r10 \n\t"
14905         "add r23, r0 \n\t"
14906         "adc r24, r1 \n\t"
14907         "adc r22, r25 \n\t"
14908         "mul r19, r9 \n\t"
14909         "add r23, r0 \n\t"
14910         "adc r24, r1 \n\t"
14911         "adc r22, r25 \n\t"
14912         "mul r20, r8 \n\t"
14913         "add r23, r0 \n\t"
14914         "adc r24, r1 \n\t"
14915         "adc r22, r25 \n\t"
14916         "mul r21, r7 \n\t"
14917         "add r23, r0 \n\t"
14918         "adc r24, r1 \n\t"
14919         "adc r22, r25 \n\t"
14920         "mul r2, r6 \n\t"
14921         "add r23, r0 \n\t"
14922         "adc r24, r1 \n\t"
14923         "adc r22, r25 \n\t"
14924         "mul r3, r5 \n\t"
14925         "add r23, r0 \n\t"
14926         "adc r24, r1 \n\t"
14927         "adc r22, r25 \n\t"
14928         "lsl r23 \n\t"
14929         "rol r24 \n\t"
14930         "rol r22 \n\t"
14931         "mul r4, r4 \n\t"
14932         "add r23, r0 \n\t"
14933         "adc r24, r1 \n\t"
14934         "adc r22, r25 \n\t"
14935         "add r23, r28 \n\t"
14936         "adc r24, r29 \n\t"
14937         "adc r22, r25 \n\t"
14938         "st z+, r23 \n\t"
14939
14940         "ldi r29, 0 \n\t"
14941         "mul r16, r13 \n\t"
14942         "mov r23, r0 \n\t"
14943         "mov r28, r1 \n\t"
14944         "mul r17, r12 \n\t"
14945         "add r23, r0 \n\t"
14946         "adc r28, r1 \n\t"
14947         "adc r29, r25 \n\t"
14948         "mul r18, r11 \n\t"
14949         "add r23, r0 \n\t"
14950         "adc r28, r1 \n\t"
14951         "adc r29, r25 \n\t"
14952         "mul r19, r10 \n\t"
14953         "add r23, r0 \n\t"
14954         "adc r28, r1 \n\t"
14955         "adc r29, r25 \n\t"
14956         "mul r20, r9 \n\t"
14957         "add r23, r0 \n\t"
14958         "adc r28, r1 \n\t"
14959         "adc r29, r25 \n\t"
14960         "mul r21, r8 \n\t"
14961         "add r23, r0 \n\t"
14962         "adc r28, r1 \n\t"
14963         "adc r29, r25 \n\t"
14964         "mul r2, r7 \n\t"
14965         "add r23, r0 \n\t"
14966         "adc r28, r1 \n\t"
14967         "adc r29, r25 \n\t"
14968         "mul r3, r6 \n\t"
14969         "add r23, r0 \n\t"
14970         "adc r28, r1 \n\t"
14971         "adc r29, r25 \n\t"
14972         "mul r4, r5 \n\t"
14973         "add r23, r0 \n\t"
14974         "adc r28, r1 \n\t"
14975         "adc r29, r25 \n\t"
14976         "lsl r23 \n\t"
14977         "rol r28 \n\t"
14978         "rol r29 \n\t"
14979         "add r23, r24 \n\t"
14980         "adc r28, r22 \n\t"
14981         "adc r29, r25 \n\t"
14982         "st z+, r23 \n\t"
14983
14984         "ldi r22, 0 \n\t"
14985         "mul r17, r13 \n\t"
14986         "mov r23, r0 \n\t"
14987         "mov r24, r1 \n\t"
14988         "mul r18, r12 \n\t"
14989         "add r23, r0 \n\t"
14990         "adc r24, r1 \n\t"
14991         "adc r22, r25 \n\t"
14992         "mul r19, r11 \n\t"
14993         "add r23, r0 \n\t"
14994         "adc r24, r1 \n\t"
14995         "adc r22, r25 \n\t"
14996         "mul r20, r10 \n\t"
14997         "add r23, r0 \n\t"
14998         "adc r24, r1 \n\t"
14999         "adc r22, r25 \n\t"
15000         "mul r21, r9 \n\t"
15001         "add r23, r0 \n\t"
15002         "adc r24, r1 \n\t"
15003         "adc r22, r25 \n\t"
15004         "mul r2, r8 \n\t"
15005         "add r23, r0 \n\t"
15006         "adc r24, r1 \n\t"
15007         "adc r22, r25 \n\t"
15008         "mul r3, r7 \n\t"
15009         "add r23, r0 \n\t"
15010         "adc r24, r1 \n\t"
15011         "adc r22, r25 \n\t"
15012         "mul r4, r6 \n\t"
15013         "add r23, r0 \n\t"
15014         "adc r24, r1 \n\t"
15015         "adc r22, r25 \n\t"
15016         "lsl r23 \n\t"
15017         "rol r24 \n\t"
15018         "rol r22 \n\t"
15019         "mul r5, r5 \n\t"
15020         "add r23, r0 \n\t"
15021         "adc r24, r1 \n\t"
15022         "adc r22, r25 \n\t"
15023         "add r23, r28 \n\t"
15024         "adc r24, r29 \n\t"
15025         "adc r22, r25 \n\t"
15026         "st z+, r23 \n\t"
15027
15028         "ldi r29, 0 \n\t"
15029         "mul r18, r13 \n\t"
15030         "mov r23, r0 \n\t"
15031         "mov r28, r1 \n\t"
15032         "mul r19, r12 \n\t"
15033         "add r23, r0 \n\t"
15034         "adc r28, r1 \n\t"
15035         "adc r29, r25 \n\t"
15036         "mul r20, r11 \n\t"
15037         "add r23, r0 \n\t"
15038         "adc r28, r1 \n\t"
15039         "adc r29, r25 \n\t"
15040         "mul r21, r10 \n\t"
15041         "add r23, r0 \n\t"
15042         "adc r28, r1 \n\t"
15043         "adc r29, r25 \n\t"
15044         "mul r2, r9 \n\t"
15045         "add r23, r0 \n\t"
15046         "adc r28, r1 \n\t"
15047         "adc r29, r25 \n\t"
15048         "mul r3, r8 \n\t"
15049         "add r23, r0 \n\t"
15050         "adc r28, r1 \n\t"
15051         "adc r29, r25 \n\t"
15052         "mul r4, r7 \n\t"
15053         "add r23, r0 \n\t"
15054         "adc r28, r1 \n\t"
15055         "adc r29, r25 \n\t"
15056         "mul r5, r6 \n\t"
15057         "add r23, r0 \n\t"
15058         "adc r28, r1 \n\t"
15059         "adc r29, r25 \n\t"
15060         "lsl r23 \n\t"
15061         "rol r28 \n\t"
15062         "rol r29 \n\t"
15063         "add r23, r24 \n\t"
15064         "adc r28, r22 \n\t"
15065         "adc r29, r25 \n\t"
15066         "st z+, r23 \n\t"
15067
15068         "ldi r22, 0 \n\t"
15069         "mul r19, r13 \n\t"
15070         "mov r23, r0 \n\t"
15071         "mov r24, r1 \n\t"
15072         "mul r20, r12 \n\t"
15073         "add r23, r0 \n\t"
15074         "adc r24, r1 \n\t"
15075         "adc r22, r25 \n\t"
15076         "mul r21, r11 \n\t"
15077         "add r23, r0 \n\t"
15078         "adc r24, r1 \n\t"
15079         "adc r22, r25 \n\t"
15080         "mul r2, r10 \n\t"
15081         "add r23, r0 \n\t"
15082         "adc r24, r1 \n\t"
15083         "adc r22, r25 \n\t"
15084         "mul r3, r9 \n\t"
15085         "add r23, r0 \n\t"
15086         "adc r24, r1 \n\t"
15087         "adc r22, r25 \n\t"
15088         "mul r4, r8 \n\t"
15089         "add r23, r0 \n\t"
15090         "adc r24, r1 \n\t"
15091         "adc r22, r25 \n\t"
15092         "mul r5, r7 \n\t"
15093         "add r23, r0 \n\t"
15094         "adc r24, r1 \n\t"
15095         "adc r22, r25 \n\t"
15096         "lsl r23 \n\t"
15097         "rol r24 \n\t"
15098         "rol r22 \n\t"
15099         "mul r6, r6 \n\t"
15100         "add r23, r0 \n\t"
15101         "adc r24, r1 \n\t"
15102         "adc r22, r25 \n\t"
15103         "add r23, r28 \n\t"
15104         "adc r24, r29 \n\t"
15105         "adc r22, r25 \n\t"
15106         "st z+, r23 \n\t"
15107
15108         "ldi r29, 0 \n\t"
15109         "mul r20, r13 \n\t"
15110         "mov r23, r0 \n\t"
15111         "mov r28, r1 \n\t"
15112         "mul r21, r12 \n\t"
15113         "add r23, r0 \n\t"
15114         "adc r28, r1 \n\t"
15115         "adc r29, r25 \n\t"
15116         "mul r2, r11 \n\t"
15117         "add r23, r0 \n\t"
15118         "adc r28, r1 \n\t"
15119         "adc r29, r25 \n\t"
15120         "mul r3, r10 \n\t"
15121         "add r23, r0 \n\t"
15122         "adc r28, r1 \n\t"
15123         "adc r29, r25 \n\t"
15124         "mul r4, r9 \n\t"
15125         "add r23, r0 \n\t"
15126         "adc r28, r1 \n\t"
15127         "adc r29, r25 \n\t"
15128         "mul r5, r8 \n\t"
15129         "add r23, r0 \n\t"
15130         "adc r28, r1 \n\t"
15131         "adc r29, r25 \n\t"
15132         "mul r6, r7 \n\t"
15133         "add r23, r0 \n\t"
15134         "adc r28, r1 \n\t"
15135         "adc r29, r25 \n\t"
15136         "lsl r23 \n\t"
15137         "rol r28 \n\t"
15138         "rol r29 \n\t"
15139         "add r23, r24 \n\t"
15140         "adc r28, r22 \n\t"
15141         "adc r29, r25 \n\t"
15142         "st z+, r23 \n\t"
15143
15144         "ldi r22, 0 \n\t"
15145         "mul r21, r13 \n\t"
15146         "mov r23, r0 \n\t"
15147         "mov r24, r1 \n\t"
15148         "mul r2, r12 \n\t"
15149         "add r23, r0 \n\t"
15150         "adc r24, r1 \n\t"
15151         "adc r22, r25 \n\t"
15152         "mul r3, r11 \n\t"
15153         "add r23, r0 \n\t"
15154         "adc r24, r1 \n\t"
15155         "adc r22, r25 \n\t"
15156         "mul r4, r10 \n\t"
15157         "add r23, r0 \n\t"
15158         "adc r24, r1 \n\t"
15159         "adc r22, r25 \n\t"
15160         "mul r5, r9 \n\t"
15161         "add r23, r0 \n\t"
15162         "adc r24, r1 \n\t"
15163         "adc r22, r25 \n\t"
15164         "mul r6, r8 \n\t"
15165         "add r23, r0 \n\t"
15166         "adc r24, r1 \n\t"
15167         "adc r22, r25 \n\t"
15168         "lsl r23 \n\t"
15169         "rol r24 \n\t"
15170         "rol r22 \n\t"
15171         "mul r7, r7 \n\t"
15172         "add r23, r0 \n\t"
15173         "adc r24, r1 \n\t"
15174         "adc r22, r25 \n\t"
15175         "add r23, r28 \n\t"
15176         "adc r24, r29 \n\t"
15177         "adc r22, r25 \n\t"
15178         "st z+, r23 \n\t"
15179
15180         "ldi r29, 0 \n\t"
15181         "mul r2, r13 \n\t"
15182         "mov r23, r0 \n\t"
15183         "mov r28, r1 \n\t"
15184         "mul r3, r12 \n\t"
15185         "add r23, r0 \n\t"
15186         "adc r28, r1 \n\t"
15187         "adc r29, r25 \n\t"
15188         "mul r4, r11 \n\t"
15189         "add r23, r0 \n\t"
15190         "adc r28, r1 \n\t"
15191         "adc r29, r25 \n\t"
15192         "mul r5, r10 \n\t"
15193         "add r23, r0 \n\t"
15194         "adc r28, r1 \n\t"
15195         "adc r29, r25 \n\t"
15196         "mul r6, r9 \n\t"
15197         "add r23, r0 \n\t"
15198         "adc r28, r1 \n\t"
15199         "adc r29, r25 \n\t"
15200         "mul r7, r8 \n\t"
15201         "add r23, r0 \n\t"
15202         "adc r28, r1 \n\t"
15203         "adc r29, r25 \n\t"
15204         "lsl r23 \n\t"
15205         "rol r28 \n\t"
15206         "rol r29 \n\t"
15207         "add r23, r24 \n\t"
15208         "adc r28, r22 \n\t"
15209         "adc r29, r25 \n\t"
15210         "st z+, r23 \n\t"
15211
15212         "ldi r22, 0 \n\t"
15213         "mul r3, r13 \n\t"
15214         "mov r23, r0 \n\t"
15215         "mov r24, r1 \n\t"
15216         "mul r4, r12 \n\t"
15217         "add r23, r0 \n\t"
15218         "adc r24, r1 \n\t"
15219         "adc r22, r25 \n\t"
15220         "mul r5, r11 \n\t"
15221         "add r23, r0 \n\t"
15222         "adc r24, r1 \n\t"
15223         "adc r22, r25 \n\t"
15224         "mul r6, r10 \n\t"
15225         "add r23, r0 \n\t"
15226         "adc r24, r1 \n\t"
15227         "adc r22, r25 \n\t"
15228         "mul r7, r9 \n\t"
15229         "add r23, r0 \n\t"
15230         "adc r24, r1 \n\t"
15231         "adc r22, r25 \n\t"
15232         "lsl r23 \n\t"
15233         "rol r24 \n\t"
15234         "rol r22 \n\t"
15235         "mul r8, r8 \n\t"
15236         "add r23, r0 \n\t"
15237         "adc r24, r1 \n\t"
15238         "adc r22, r25 \n\t"
15239         "add r23, r28 \n\t"
15240         "adc r24, r29 \n\t"
15241         "adc r22, r25 \n\t"
15242         "st z+, r23 \n\t"
15243
15244         "ldi r29, 0 \n\t"
15245         "mul r4, r13 \n\t"
15246         "mov r23, r0 \n\t"
15247         "mov r28, r1 \n\t"
15248         "mul r5, r12 \n\t"
15249         "add r23, r0 \n\t"
15250         "adc r28, r1 \n\t"
15251         "adc r29, r25 \n\t"
15252         "mul r6, r11 \n\t"
15253         "add r23, r0 \n\t"
15254         "adc r28, r1 \n\t"
15255         "adc r29, r25 \n\t"
15256         "mul r7, r10 \n\t"
15257         "add r23, r0 \n\t"
15258         "adc r28, r1 \n\t"
15259         "adc r29, r25 \n\t"
15260         "mul r8, r9 \n\t"
15261         "add r23, r0 \n\t"
15262         "adc r28, r1 \n\t"
15263         "adc r29, r25 \n\t"
15264         "lsl r23 \n\t"
15265         "rol r28 \n\t"
15266         "rol r29 \n\t"
15267         "add r23, r24 \n\t"
15268         "adc r28, r22 \n\t"
15269         "adc r29, r25 \n\t"
15270         "st z+, r23 \n\t"
15271
15272         "ldi r22, 0 \n\t"
15273         "mul r5, r13 \n\t"
15274         "mov r23, r0 \n\t"
15275         "mov r24, r1 \n\t"
15276         "mul r6, r12 \n\t"
15277         "add r23, r0 \n\t"
15278         "adc r24, r1 \n\t"
15279         "adc r22, r25 \n\t"
15280         "mul r7, r11 \n\t"
15281         "add r23, r0 \n\t"
15282         "adc r24, r1 \n\t"
15283         "adc r22, r25 \n\t"
15284         "mul r8, r10 \n\t"
15285         "add r23, r0 \n\t"
15286         "adc r24, r1 \n\t"
15287         "adc r22, r25 \n\t"
15288         "lsl r23 \n\t"
15289         "rol r24 \n\t"
15290         "rol r22 \n\t"
15291         "mul r9, r9 \n\t"
15292         "add r23, r0 \n\t"
15293         "adc r24, r1 \n\t"
15294         "adc r22, r25 \n\t"
15295         "add r23, r28 \n\t"
15296         "adc r24, r29 \n\t"
15297         "adc r22, r25 \n\t"
15298         "st z+, r23 \n\t"
15299
15300         "ldi r29, 0 \n\t"
15301         "mul r6, r13 \n\t"
15302         "mov r23, r0 \n\t"
15303         "mov r28, r1 \n\t"
15304         "mul r7, r12 \n\t"
15305         "add r23, r0 \n\t"
15306         "adc r28, r1 \n\t"
15307         "adc r29, r25 \n\t"
15308         "mul r8, r11 \n\t"
15309         "add r23, r0 \n\t"
15310         "adc r28, r1 \n\t"
15311         "adc r29, r25 \n\t"
15312         "mul r9, r10 \n\t"
15313         "add r23, r0 \n\t"
15314         "adc r28, r1 \n\t"
15315         "adc r29, r25 \n\t"
15316         "lsl r23 \n\t"
15317         "rol r28 \n\t"
15318         "rol r29 \n\t"
15319         "add r23, r24 \n\t"
15320         "adc r28, r22 \n\t"
15321         "adc r29, r25 \n\t"
15322         "st z+, r23 \n\t"
15323
15324         "ldi r22, 0 \n\t"
15325         "mul r7, r13 \n\t"
15326         "mov r23, r0 \n\t"
15327         "mov r24, r1 \n\t"
15328         "mul r8, r12 \n\t"
15329         "add r23, r0 \n\t"
15330         "adc r24, r1 \n\t"
15331         "adc r22, r25 \n\t"
15332         "mul r9, r11 \n\t"
15333         "add r23, r0 \n\t"
15334         "adc r24, r1 \n\t"
15335         "adc r22, r25 \n\t"
15336         "lsl r23 \n\t"
15337         "rol r24 \n\t"
15338         "rol r22 \n\t"
15339         "mul r10, r10 \n\t"
15340         "add r23, r0 \n\t"
15341         "adc r24, r1 \n\t"
15342         "adc r22, r25 \n\t"
15343         "add r23, r28 \n\t"
15344         "adc r24, r29 \n\t"
15345         "adc r22, r25 \n\t"
15346         "st z+, r23 \n\t"
15347
15348         "ldi r29, 0 \n\t"
15349         "mul r8, r13 \n\t"
15350         "mov r23, r0 \n\t"
15351         "mov r28, r1 \n\t"
15352         "mul r9, r12 \n\t"
15353         "add r23, r0 \n\t"
15354         "adc r28, r1 \n\t"
15355         "adc r29, r25 \n\t"
15356         "mul r10, r11 \n\t"
15357         "add r23, r0 \n\t"
15358         "adc r28, r1 \n\t"
15359         "adc r29, r25 \n\t"
15360         "lsl r23 \n\t"
15361         "rol r28 \n\t"
15362         "rol r29 \n\t"
15363         "add r23, r24 \n\t"
15364         "adc r28, r22 \n\t"
15365         "adc r29, r25 \n\t"
15366         "st z+, r23 \n\t"
15367
15368         "ldi r22, 0 \n\t"
15369         "mul r9, r13 \n\t"
15370         "mov r23, r0 \n\t"
15371         "mov r24, r1 \n\t"
15372         "mul r10, r12 \n\t"
15373         "add r23, r0 \n\t"
15374         "adc r24, r1 \n\t"
15375         "adc r22, r25 \n\t"
15376         "lsl r23 \n\t"
15377         "rol r24 \n\t"
15378         "rol r22 \n\t"
15379         "mul r11, r11 \n\t"
15380         "add r23, r0 \n\t"
15381         "adc r24, r1 \n\t"
15382         "adc r22, r25 \n\t"
15383         "add r23, r28 \n\t"
15384         "adc r24, r29 \n\t"
15385         "adc r22, r25 \n\t"
15386         "st z+, r23 \n\t"
15387
15388         "ldi r29, 0 \n\t"
15389         "mul r10, r13 \n\t"
15390         "mov r23, r0 \n\t"
15391         "mov r28, r1 \n\t"
15392         "mul r11, r12 \n\t"
15393         "add r23, r0 \n\t"
15394         "adc r28, r1 \n\t"
15395         "adc r29, r25 \n\t"
15396         "lsl r23 \n\t"
15397         "rol r28 \n\t"
15398         "rol r29 \n\t"
15399         "add r23, r24 \n\t"
15400         "adc r28, r22 \n\t"
15401         "adc r29, r25 \n\t"
15402         "st z+, r23 \n\t"
15403
15404         "ldi r23, 0 \n\t"
15405         "mul r11, r13 \n\t"
15406         "add r28, r0 \n\t"
15407         "adc r29, r1 \n\t"
15408         "adc r23, r25 \n\t"
15409         "add r28, r0 \n\t"
15410         "adc r29, r1 \n\t"
15411         "adc r23, r25 \n\t"
15412         "mul r12, r12 \n\t"
15413         "add r28, r0 \n\t"
15414         "adc r29, r1 \n\t"
15415         "adc r23, r25 \n\t"
15416         "st z+, r28 \n\t"
15417
15418         "ldi r28, 0 \n\t"
15419         "mul r12, r13 \n\t"
15420         "add r29, r0 \n\t"
15421         "adc r23, r1 \n\t"
15422         "adc r28, r25 \n\t"
15423         "add r29, r0 \n\t"
15424         "adc r23, r1 \n\t"
15425         "adc r28, r25 \n\t"
15426         "st z+, r29 \n\t"
15427
15428         "mul r13, r13 \n\t"
15429         "add r23, r0 \n\t"
15430         "adc r28, r1 \n\t"
15431         "st z+, r23 \n\t"
15432         "st z+, r28 \n\t"
15433         "eor r1, r1 \n\t"
15434         : "+x" (p_left), "+z" (p_result)
15435         :
15436         : "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12",
15437           "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r28", "r29", "cc", "memory"
15438     );
15439 }
15440 #define asm_square 1
15441
15442 #endif /* uECC_BYTES == xx */
15443 #endif /* uECC_SQUARE_FUNC */
15444
15445 static void vli_modSub_fast(uint8_t *p_result, uint8_t *p_left, uint8_t *p_right)
15446 {
15447     uint8_t t1, t2;
15448     __asm__ volatile (
15449         "push r28 \n\t" /* Save Y */
15450         "push r29 \n\t"
15451         
15452         "ld %[t1], x+ \n\t"  /* Load left word. */
15453         "ld %[t2], y+ \n\t" /* Load right word. */
15454         "sub %[t1], %[t2] \n\t" /* Subtract the first word. */
15455         "st z+, %[t1] \n\t"  /* Store the first result word. */
15456         
15457         /* Now we just do the remaining words with the carry bit (using SBC) */
15458         REPEAT(DEC(uECC_BYTES), "ld %[t1], x+ \n\t"
15459             "ld %[t2], y+ \n\t"
15460             "sbc %[t1], %[t2] \n\t"
15461             "st z+, %[t1] \n\t")
15462         
15463         "brcs 1f \n\t" /* If borrow is set, then we need to add */
15464         "rjmp done \n\t" /* otherwise we are done */
15465         "1: \n\t"
15466         
15467         "sbiw r30, " STR(uECC_BYTES) " \n\t" /* make z point at p_result again */
15468         "ldi r28, lo8(curve_p) \n\t" /* make y point at curve_p */
15469         "ldi r29, hi8(curve_p) \n\t"
15470         
15471         /* do the addition */
15472         "ld %[t1], z \n\t"
15473         "ld %[t2], y+ \n\t"
15474         "add %[t1], %[t2] \n\t"
15475         "st z+, %[t1] \n\t"
15476         REPEAT(DEC(uECC_BYTES), "ld %[t1], z \n\t"
15477             "ld %[t2], y+ \n\t"
15478             "adc %[t1], %[t2] \n\t"
15479             "st z+, %[t1] \n\t")
15480         
15481         "done: \n\t"
15482         "pop r29 \n\t" /* Restore Y */
15483         "pop r28 \n\t"
15484
15485         : "+z" (p_result), "+x" (p_left),
15486           [t1] "=&r" (t1), [t2] "=&r" (t2)
15487         : "y" (p_right)
15488         : "cc", "memory"
15489     );
15490 }
15491 #define asm_modSub_fast 1
15492
15493 #if uECC_CURVE == uECC_secp160r1
15494 static void vli_mmod_fast(uint8_t *RESTRICT p_result, uint8_t *RESTRICT p_product)
15495 {
15496     uint8_t l_carry = 0;
15497     __asm__ volatile (
15498         "in r30, __SP_L__ \n\t"
15499         "in r31, __SP_H__ \n\t"
15500         "sbiw r30, 24 \n\t"
15501         "in r0, __SREG__ \n\t"
15502         "cli \n\t"
15503         "out __SP_H__, r31 \n\t"
15504         "out __SREG__, r0 \n\t"
15505         "out __SP_L__, r30 \n\t"
15506         
15507         "adiw r30, 25 \n\t" /* we are shifting by 31 bits, so shift over 4 bytes (+ 1 since z initially points below the stack) */
15508         "adiw r26, 40 \n\t" /* end of p_product */
15509         "ld r18, -x \n\t"  /* Load word. */
15510         "lsr r18 \n\t" /* Shift. */
15511         "st -z, r18 \n\t"  /* Store the first result word. */
15512
15513         /* Now we just do the remaining words with the carry bit (using ROR) */
15514         REPEAT(19, "ld r18, -x \n\t"
15515             "ror r18 \n\t"
15516             "st -z, r18 \n\t")
15517
15518         "eor r18, r18 \n\t" /* r18 = 0 */
15519         "ror r18 \n\t" /* get last bit */
15520         "st -z, r18 \n\t" /* store it */
15521
15522         "sbiw r30, 3 \n\t" /* move z back to point at tmp */
15523         /* now we add p_right */
15524         "ld r18, x+ \n\t"
15525         "st z+, r18 \n\t" /* the first 3 bytes do not need to be added */
15526         "ld r18, x+ \n\t"
15527         "st z+, r18 \n\t"
15528         "ld r18, x+ \n\t"
15529         "st z+, r18 \n\t"
15530
15531         "ld r18, x+ \n\t"
15532         "ld r19, z \n\t"
15533         "add r18, r19 \n\t"
15534         "st z+, r18 \n\t"
15535
15536         /* Now we just do the remaining words with the carry bit (using ADC) */
15537         REPEAT(16, "ld r18, x+ \n\t"
15538             "ld r19, z \n\t"
15539             "adc r18, r19 \n\t"
15540             "st z+, r18 \n\t")
15541
15542         /* Propagate over the remaining bytes of p_result */
15543         "ld r18, z \n\t"
15544         "adc r18, r1 \n\t"
15545         "st z+, r18 \n\t"
15546
15547         "ld r18, z \n\t"
15548         "adc r18, r1 \n\t"
15549         "st z+, r18 \n\t"
15550
15551         "ld r18, z \n\t"
15552         "adc r18, r1 \n\t"
15553         "st z+, r18 \n\t"
15554
15555         "ld r18, z \n\t"
15556         "adc r18, r1 \n\t"
15557         "st z+, r18 \n\t"
15558         
15559         "sbiw r30, 24 \n\t" /* move z back to point at tmp */
15560         "sbiw r26, 40 \n\t" /* move x back to point at p_product */
15561         
15562         /* add low bytes of tmp to p_product, storing in p_result */
15563         "ld r18, z+ \n\t"
15564         "ld r19, x+ \n\t"
15565         "add r18, r19 \n\t"
15566         "st y+, r18 \n\t"
15567         REPEAT(19, "ld r18, z+ \n\t"
15568             "ld r19, x+ \n\t"
15569             "adc r18, r19 \n\t"
15570             "st y+, r18 \n\t")
15571         "adc %[carry], __zero_reg__ \n\t"    /* Store carry bit (carry flag is cleared). */
15572         /* at this point x is at the end of p_product, y is at the end of p_result, z is 20 bytes into tmp */
15573         "sbiw r28, 20 \n\t" /* move y back to point at p_result */
15574         "adiw r30, 4 \n\t" /* move z to point to the end of tmp */
15575         
15576         /* do omega_mult again with the 4 relevant bytes */
15577         /* z points to the end of tmp, x points to the end of p_product */
15578         "ld r18, -z \n\t"  /* Load word. */
15579         "lsr r18 \n\t" /* Shift. */
15580         "st -x, r18 \n\t"  /* Store the first result word. */
15581         
15582         "ld r18, -z \n\t"
15583         "ror r18 \n\t"
15584         "st -x, r18 \n\t"
15585         "ld r18, -z \n\t"
15586         "ror r18 \n\t"
15587         "st -x, r18 \n\t"
15588         "ld r18, -z \n\t"
15589         "ror r18 \n\t"
15590         "st -x, r18 \n\t"
15591         
15592         "eor r18, r18 \n\t" /* r18 = 0 */
15593         "ror r18 \n\t" /* get last bit */
15594         "st -x, r18 \n\t" /* store it */
15595         
15596         "sbiw r26, 3 \n\t" /* move x back to point at beginning */
15597         /* now we add a copy of the 4 bytes */
15598         "ld r18, z+ \n\t"
15599         "st x+, r18 \n\t" /* the first 3 bytes do not need to be added */
15600         "ld r18, z+ \n\t"
15601         "st x+, r18 \n\t"
15602         "ld r18, z+ \n\t"
15603         "st x+, r18 \n\t"
15604         
15605         "ld r18, z+ \n\t"
15606         "ld r19, x \n\t"
15607         "add r18, r19 \n\t"
15608         "st x+, r18 \n\t"
15609         
15610         /* Propagate over the remaining bytes */
15611         "ld r18, x \n\t"
15612         "adc r18, r1 \n\t"
15613         "st x+, r18 \n\t"
15614         
15615         "ld r18, x \n\t"
15616         "adc r18, r1 \n\t"
15617         "st x+, r18 \n\t"
15618         
15619         "ld r18, x \n\t"
15620         "adc r18, r1 \n\t"
15621         "st x+, r18 \n\t"
15622         
15623         "ld r18, x \n\t"
15624         "adc r18, r1 \n\t"
15625         "st x+, r18 \n\t"
15626         
15627         /* now z points to the end of tmp, x points to the end of p_product (y still points at p_result) */
15628         "sbiw r26, 8 \n\t" /* move x back to point at beginning of actual data */
15629         /* add into p_result */
15630         "ld r18, x+ \n\t"
15631         "ld r19, y \n\t"
15632         "add r18, r19 \n\t"
15633         "st y+, r18 \n\t"
15634         REPEAT(7, "ld r18, x+ \n\t"
15635             "ld r19, y \n\t"
15636             "adc r18, r19 \n\t"
15637             "st y+, r18 \n\t")
15638         
15639         /* Done adding, now propagate carry bit */
15640         REPEAT(12, "ld r18, y \n\t"
15641             "adc r18, __zero_reg__ \n\t"
15642             "st y+, r18 \n\t")
15643         
15644         "adc %[carry], __zero_reg__ \n\t"    /* Store carry bit (carry flag is cleared). */
15645         "sbiw r28, 20 \n\t" /* move y back to point at p_result */
15646         
15647         "sbiw r30, 1 \n\t" /* fix stack pointer */
15648         "in r0, __SREG__ \n\t"
15649         "cli \n\t"
15650         "out __SP_H__, r31 \n\t"
15651         "out __SREG__, r0 \n\t"
15652         "out __SP_L__, r30 \n\t"
15653         
15654         : "+x" (p_product), [carry] "+r" (l_carry)
15655         : "y" (p_result)
15656         : "r0", "r18", "r19", "r30", "r31", "cc", "memory"
15657     );
15658     
15659     if(l_carry > 0)
15660     {
15661         --l_carry;
15662         vli_sub(p_result, p_result, curve_p);
15663     }
15664     if(l_carry > 0)
15665     {
15666         vli_sub(p_result, p_result, curve_p);
15667     }
15668     
15669     if(vli_cmp(p_result, curve_p) > 0)
15670     {
15671         vli_sub(p_result, p_result, curve_p);
15672     }
15673 }
15674 #define asm_mmod_fast 1
15675
15676 #elif (uECC_CURVE == uECC_secp256k1)
15677 static void vli_mmod_fast(uint8_t *RESTRICT p_result, uint8_t *RESTRICT p_product)
15678 {
15679     uint8_t l_carry = 0;
15680     __asm__ volatile (
15681         "in r30, __SP_L__ \n\t"
15682         "in r31, __SP_H__ \n\t"
15683         "sbiw r30, 37 \n\t"
15684         "in r0, __SREG__ \n\t"
15685         "cli \n\t"
15686         "out __SP_H__, r31 \n\t"
15687         "out __SREG__, r0 \n\t"
15688         "out __SP_L__, r30 \n\t"
15689         
15690         "adiw r30, 1 \n\t" /* add 1 since z initially points below the stack */
15691         "adiw r26, 32 \n\t" /* p_product + uECC_WORDS */
15692         "ldi r25, 0x03 \n\t"
15693         "ldi r24, 0xD1 \n\t"
15694         "ld r18, x+ \n\t"
15695         "ld r19, x+ \n\t"
15696         "ld r20, x+ \n\t"
15697         "ld r21, x+ \n\t"
15698         
15699         "mul r24, r18 \n\t"
15700         "st z+, r0 \n\t"
15701         "mov r22, r1 \n\t"
15702         "ldi r23, 0 \n\t"
15703         
15704         "mul r24, r19 \n\t"
15705         "add r22, r0 \n\t"
15706         "adc r23, r1 \n\t" /* can't overflow */
15707         "mul r25, r18 \n\t"
15708         "add r22, r0 \n\t"
15709         "adc r23, r1 \n\t" /* can't overflow */
15710         "st z+, r22 \n\t"
15711         "ldi r22, 0 \n\t"
15712         
15713         "mul r24, r20 \n\t"
15714         "add r23, r0 \n\t"
15715         "adc r22, r1 \n\t"
15716         "mul r25, r19 \n\t"
15717         "add r23, r0 \n\t"
15718         "adc r22, r1 \n\t"
15719         "st z+, r23 \n\t"
15720         "ldi r23, 0 \n\t"
15721         
15722         "mul r24, r21 \n\t"
15723         "add r22, r0 \n\t"
15724         "adc r23, r1 \n\t"
15725         "mul r25, r20 \n\t"
15726         "add r22, r0 \n\t"
15727         "adc r23, r1 \n\t"
15728         "st z+, r22 \n\t"
15729         "ldi r22, 0 \n\t"
15730         
15731         /* now we start adding the 2^32 part as well */
15732         "add r23, r18 \n\t" // 28
15733         "adc r22, r22 \n\t"
15734         "ld r18, x+ \n\t"
15735         "mul r24, r18 \n\t"
15736         "add r23, r0 \n\t"
15737         "adc r22, r1 \n\t"
15738         "mul r25, r21 \n\t"
15739         "add r23, r0 \n\t"
15740         "adc r22, r1 \n\t"
15741         "st z+, r23 \n\t"
15742         "ldi r23, 0 \n\t"
15743         
15744         "add r22, r19 \n\t" // 27
15745         "adc r23, r23 \n\t"
15746         "ld r19, x+ \n\t"
15747         "mul r24, r19 \n\t"
15748         "add r22, r0 \n\t"
15749         "adc r23, r1 \n\t"
15750         "mul r25, r18 \n\t"
15751         "add r22, r0 \n\t"
15752         "adc r23, r1 \n\t"
15753         "st z+, r22 \n\t"
15754         "ldi r22, 0 \n\t"
15755         
15756         REPEAT(6, // 26 - 3
15757             "add r23, r20 \n\t"
15758             "adc r22, r22 \n\t"
15759             "ld r20, x+ \n\t"
15760             "mul r24, r20 \n\t"
15761             "add r23, r0 \n\t"
15762             "adc r22, r1 \n\t"
15763             "mul r25, r19 \n\t"
15764             "add r23, r0 \n\t"
15765             "adc r22, r1 \n\t"
15766             "st z+, r23 \n\t"
15767             "ldi r23, 0 \n\t"
15768             
15769             "add r22, r21 \n\t"
15770             "adc r23, r23 \n\t"
15771             "ld r21, x+ \n\t"
15772             "mul r24, r21 \n\t"
15773             "add r22, r0 \n\t"
15774             "adc r23, r1 \n\t"
15775             "mul r25, r20 \n\t"
15776             "add r22, r0 \n\t"
15777             "adc r23, r1 \n\t"
15778             "st z+, r22 \n\t"
15779             "ldi r22, 0 \n\t"
15780             
15781             "add r23, r18 \n\t"
15782             "adc r22, r22 \n\t"
15783             "ld r18, x+ \n\t"
15784             "mul r24, r18 \n\t"
15785             "add r23, r0 \n\t"
15786             "adc r22, r1 \n\t"
15787             "mul r25, r21 \n\t"
15788             "add r23, r0 \n\t"
15789             "adc r22, r1 \n\t"
15790             "st z+, r23 \n\t"
15791             "ldi r23, 0 \n\t"
15792             
15793             "add r22, r19 \n\t"
15794             "adc r23, r23 \n\t"
15795             "ld r19, x+ \n\t"
15796             "mul r24, r19 \n\t"
15797             "add r22, r0 \n\t"
15798             "adc r23, r1 \n\t"
15799             "mul r25, r18 \n\t"
15800             "add r22, r0 \n\t"
15801             "adc r23, r1 \n\t"
15802             "st z+, r22 \n\t"
15803             "ldi r22, 0 \n\t")
15804
15805         "add r23, r20 \n\t" // 2
15806         "adc r22, r22 \n\t"
15807         "ld r20, x+ \n\t"
15808         "mul r24, r20 \n\t"
15809         "add r23, r0 \n\t"
15810         "adc r22, r1 \n\t"
15811         "mul r25, r19 \n\t"
15812         "add r23, r0 \n\t"
15813         "adc r22, r1 \n\t"
15814         "st z+, r23 \n\t"
15815         "ldi r23, 0 \n\t"
15816         
15817         "add r22, r21 \n\t" // 1
15818         "adc r23, r23 \n\t"
15819         "ld r21, x+ \n\t"
15820         "mul r24, r21 \n\t"
15821         "add r22, r0 \n\t"
15822         "adc r23, r1 \n\t"
15823         "mul r25, r20 \n\t"
15824         "add r22, r0 \n\t"
15825         "adc r23, r1 \n\t"
15826         "st z+, r22 \n\t"
15827         "ldi r22, 0 \n\t"
15828         
15829         /* Now finish the carries etc */
15830         "add r23, r18 \n\t"
15831         "adc r22, r22 \n\t"
15832         "mul r25, r21 \n\t"
15833         "add r23, r0 \n\t"
15834         "adc r22, r1 \n\t"
15835         "st z+, r23 \n\t"
15836         "ldi r23, 0 \n\t"
15837         
15838         "add r22, r19 \n\t"
15839         "adc r23, r23 \n\t"
15840         "st z+, r22 \n\t"
15841         "ldi r22, 0 \n\t"
15842         
15843         "add r23, r20 \n\t"
15844         "adc r22, r22 \n\t"
15845         "st z+, r23 \n\t"
15846         "ldi r23, 0 \n\t"
15847         
15848         "add r22, r21 \n\t"
15849         "adc r23, r23 \n\t"
15850         "st z+, r22 \n\t"
15851         "st z+, r23 \n\t"
15852         "eor r1, r1 \n\t" /* make r1 be 0 again */
15853         
15854         "sbiw r30, 37 \n\t" /* move z back to point at tmp */
15855         "subi r26, 64 \n\t" /* move x back to point at p_product */
15856         "sbc r27, __zero_reg__ \n\t"
15857         
15858         /* add low bytes of tmp to p_product, storing in p_result */
15859         "ld r18, z+ \n\t"
15860         "ld r19, x+ \n\t"
15861         "add r18, r19 \n\t"
15862         "st y+, r18 \n\t"
15863         REPEAT(31, "ld r18, z+ \n\t"
15864             "ld r19, x+ \n\t"
15865             "adc r18, r19 \n\t"
15866             "st y+, r18 \n\t")
15867         
15868         "adc %[carry], __zero_reg__ \n\t"    /* Store carry bit (carry flag is cleared). */
15869         /* at this point x is at the end of p_product, y is at the end of p_result, z is 32 bytes into tmp */
15870         "sbiw r28, 32 \n\t" /* move y back to point at p_result */
15871
15872         /* do omega_mult again with the 5 relevant bytes */
15873         /* z points to l_tmp + uECC_WORDS, x points to the end of p_product */
15874         "sbiw r26, 32 \n\t" /* shift x back to point into the p_product buffer (we can overwrite it now) */
15875         
15876         "ld r18, z+ \n\t"
15877         "ld r19, z+ \n\t"
15878         "ld r20, z+ \n\t"
15879         "ld r21, z+ \n\t"
15880         
15881         "mul r24, r18 \n\t"
15882         "st x+, r0 \n\t"
15883         "mov r22, r1 \n\t"
15884         "ldi r23, 0 \n\t"
15885         
15886         "mul r24, r19 \n\t"
15887         "add r22, r0 \n\t"
15888         "adc r23, r1 \n\t" /* can't overflow */
15889         "mul r25, r18 \n\t"
15890         "add r22, r0 \n\t"
15891         "adc r23, r1 \n\t" /* can't overflow */
15892         "st x+, r22 \n\t"
15893         "ldi r22, 0 \n\t"
15894         
15895         "mul r24, r20 \n\t"
15896         "add r23, r0 \n\t"
15897         "adc r22, r1 \n\t"
15898         "mul r25, r19 \n\t"
15899         "add r23, r0 \n\t"
15900         "adc r22, r1 \n\t"
15901         "st x+, r23 \n\t"
15902         "ldi r23, 0 \n\t"
15903         
15904         "mul r24, r21 \n\t"
15905         "add r22, r0 \n\t"
15906         "adc r23, r1 \n\t"
15907         "mul r25, r20 \n\t"
15908         "add r22, r0 \n\t"
15909         "adc r23, r1 \n\t"
15910         "st x+, r22 \n\t"
15911         "ldi r22, 0 \n\t"
15912         
15913         "add r23, r18 \n\t"
15914         "adc r22, r22 \n\t"
15915         "ld r18, z+ \n\t"
15916         "mul r24, r18 \n\t"
15917         "add r23, r0 \n\t"
15918         "adc r22, r1 \n\t"
15919         "mul r25, r21 \n\t"
15920         "add r23, r0 \n\t"
15921         "adc r22, r1 \n\t"
15922         "st x+, r23 \n\t"
15923         "ldi r23, 0 \n\t"
15924         
15925         /* Now finish the carries etc */
15926         "add r22, r19 \n\t"
15927         "adc r23, r23 \n\t"
15928         "mul r25, r18 \n\t"
15929         "add r22, r0 \n\t"
15930         "adc r23, r1 \n\t"
15931         "st x+, r22 \n\t"
15932         "ldi r22, 0 \n\t"
15933         
15934         "add r23, r20 \n\t"
15935         "adc r22, r22 \n\t"
15936         "st x+, r23 \n\t"
15937         "ldi r23, 0 \n\t"
15938         
15939         "add r22, r21 \n\t"
15940         "adc r23, r23 \n\t"
15941         "st x+, r22 \n\t"
15942         "ldi r22, 0 \n\t"
15943         
15944         "add r23, r18 \n\t"
15945         "adc r22, r22 \n\t"
15946         "st x+, r23 \n\t"
15947         "st x+, r22 \n\t"
15948         "eor r1, r1 \n\t" /* make r1 be 0 again */
15949         
15950         /* now z points to the end of tmp, x points to the end of p_product (y still points at p_result) */
15951         "sbiw r26, 10 \n\t" /* move x back to point at beginning of actual data */
15952         /* add into p_result */
15953         "ld r18, x+ \n\t"
15954         "ld r19, y \n\t"
15955         "add r18, r19 \n\t"
15956         "st y+, r18 \n\t"
15957         REPEAT(9, "ld r18, x+ \n\t"
15958             "ld r19, y \n\t"
15959             "adc r18, r19 \n\t"
15960             "st y+, r18 \n\t")
15961         
15962         /* Done adding, now propagate carry bit */
15963         REPEAT(22, "ld r18, y \n\t"
15964             "adc r18, __zero_reg__ \n\t"
15965             "st y+, r18 \n\t")
15966         
15967         "adc %[carry], __zero_reg__ \n\t"    /* Store carry bit (carry flag is cleared). */
15968         "sbiw r28, 32 \n\t" /* move y back to point at p_result */
15969         
15970         "sbiw r30, 1 \n\t" /* fix stack pointer */
15971         "in r0, __SREG__ \n\t"
15972         "cli \n\t"
15973         "out __SP_H__, r31 \n\t"
15974         "out __SREG__, r0 \n\t"
15975         "out __SP_L__, r30 \n\t"
15976         
15977         : "+x" (p_product), [carry] "+r" (l_carry)
15978         : "y" (p_result)
15979         : "r0", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r30", "r31", "cc", "memory"
15980     );
15981     
15982     if(l_carry > 0)
15983     {
15984         --l_carry;
15985         vli_sub(p_result, p_result, curve_p);
15986     }
15987     if(l_carry > 0)
15988     {
15989         vli_sub(p_result, p_result, curve_p);
15990     }
15991     
15992     if(vli_cmp(p_result, curve_p) > 0)
15993     {
15994         vli_sub(p_result, p_result, curve_p);
15995     }
15996 }
15997 #define asm_mmod_fast 1
15998
15999 #endif /* (uECC_CURVE == uECC_secp256k1) */
16000
16001 #endif /* (uECC_ASM == uECC_asm_fast) */
16002
16003 #if !asm_rshift1
16004 static void vli_rshift1(uint8_t *p_vli)
16005 {
16006     uint8_t i = uECC_BYTES;
16007     __asm__ volatile (
16008         "adiw r30, " STR(uECC_BYTES) " \n\t"
16009         "clc \n\t"
16010         
16011         "1: \n\t"
16012         "ld r0, -z \n\t"
16013         "ror r0 \n\t"
16014         "st z, r0 \n\t"
16015         "dec %[i] \n\t"
16016         "brne 1b \n\t"
16017
16018         : "+z" (p_vli), [i] "+r" (i)
16019         : 
16020         : "r0", "cc", "memory"
16021     );
16022 }
16023 #define asm_rshift1 1
16024 #endif
16025
16026 #if !asm_add
16027 static uint8_t vli_add(uint8_t *p_result, uint8_t *p_left, uint8_t *p_right)
16028 {
16029     uint8_t i = uECC_BYTES;
16030     uint8_t l_carry = 0;
16031     uint8_t l_left;
16032     uint8_t l_right;
16033
16034     __asm__ volatile (
16035         "clc \n\t"
16036         
16037         "1: \n\t"
16038         "ld %[left], x+ \n\t"  /* Load left byte. */
16039         "ld %[right], y+ \n\t" /* Load right byte. */
16040         "adc %[left], %[right] \n\t" /* Add. */
16041         "st z+, %[left] \n\t"  /* Store the result. */
16042         "dec %[i] \n\t"
16043         "brne 1b \n\t"
16044         
16045         "adc %[carry], %[carry] \n\t"    /* Store carry bit in l_carry. */
16046         
16047         "sbiw r28, " STR(uECC_BYTES) " \n\t" /* Restore Y */
16048
16049         : "+z" (p_result), "+x" (p_left), [i] "+r" (i),
16050             [carry] "+r" (l_carry), [left] "=&r" (l_left), [right] "=&r" (l_right)
16051         : "y" (p_right)
16052         : "cc", "memory"
16053     );
16054     return l_carry;
16055 }
16056 #define asm_add 1
16057 #endif
16058
16059 #if !asm_sub
16060 static uint8_t vli_sub(uint8_t *p_result, uint8_t *p_left, uint8_t *p_right)
16061 {
16062     uint8_t i = uECC_BYTES;
16063     uint8_t l_borrow = 0;
16064     uint8_t l_left;
16065     uint8_t l_right;
16066
16067     __asm__ volatile (
16068         "clc \n\t"
16069         
16070         "1: \n\t"
16071         "ld %[left], x+ \n\t"  /* Load left byte. */
16072         "ld %[right], y+ \n\t" /* Load right byte. */
16073         "sbc %[left], %[right] \n\t" /* Subtract. */
16074         "st z+, %[left] \n\t"  /* Store the result. */
16075         "dec %[i] \n\t"
16076         "brne 1b \n\t"
16077         
16078         "adc %[borrow], %[borrow] \n\t"    /* Store carry bit in l_borrow. */
16079         
16080         "sbiw r28, " STR(uECC_BYTES) " \n\t" /* Restore Y */
16081
16082         : "+z" (p_result), "+x" (p_left), [i] "+r" (i),
16083             [borrow] "+r" (l_borrow), [left] "=&r" (l_left), [right] "=&r" (l_right)
16084         : "y" (p_right)
16085         : "cc", "memory"
16086     );
16087     return l_borrow;
16088 }
16089 #define asm_sub 1
16090 #endif
16091
16092 #if !asm_mult
16093 __attribute((noinline))
16094 static void vli_mult(uint8_t *p_result, uint8_t *p_left, uint8_t *p_right)
16095 {
16096     uint8_t r0 = 0;
16097     uint8_t r1 = 0;
16098     uint8_t r2 = 0;
16099     
16100     uint8_t l_zero = 0;
16101     
16102     uint8_t k, i;
16103     
16104     __asm__ volatile (
16105         "ldi %[k], 1 \n\t" /* k = 1; k < uECC_BYTES; ++k */
16106         
16107         "1: \n\t"
16108         "ldi %[i], 0 \n\t"  /* i=0; i < k; ++i */
16109         
16110         "add r28, %[k] \n\t" /* pre-add right ptr */
16111         "adc r29, %[zero] \n\t"
16112         
16113         "2: \n\t"
16114         "ld r0, x+ \n\t"
16115         "ld r1, -y \n\t"
16116         "mul r0, r1 \n\t"
16117         
16118         "add %[r0], r0 \n\t"
16119         "adc %[r1], r1 \n\t"
16120         "adc %[r2], %[zero] \n\t"
16121         
16122         "inc %[i] \n\t"
16123         "cp %[i], %[k] \n\t"
16124         "brlo 2b \n\t" /* loop if i < k */
16125         
16126         "sub r26, %[k] \n\t" /* fix up left ptr */
16127         "sbc r27, %[zero] \n\t"
16128         
16129         "st z+, %[r0] \n\t"  /* Store the result. */
16130         "mov %[r0], %[r1] \n\t"
16131         "mov %[r1], %[r2] \n\t"
16132         "mov %[r2], %[zero] \n\t"
16133         
16134         "inc %[k] \n\t"
16135         "cpi %[k], " STR(uECC_BYTES) " \n\t"
16136         "brlo 1b \n\t" /* loop if k < uECC_BYTES */
16137         
16138         /* second half */
16139         "ldi %[k], " STR(uECC_BYTES) " \n\t" /* k = uECC_BYTES; k > 0; --k */
16140         "adiw r28, " STR(uECC_BYTES) " \n\t" /* move right ptr to point at the end of p_right */
16141         
16142         "1: \n\t"
16143         "ldi %[i], 0 \n\t" /* i=0; i < k; ++i */
16144         
16145         "2: \n\t"
16146         "ld r0, x+ \n\t"
16147         "ld r1, -y \n\t"
16148         "mul r0, r1 \n\t"
16149         
16150         "add %[r0], r0 \n\t"
16151         "adc %[r1], r1 \n\t"
16152         "adc %[r2], %[zero] \n\t"
16153         
16154         "inc %[i] \n\t"
16155         "cp %[i], %[k] \n\t"
16156         "brlo 2b \n\t" /* loop if i < k */
16157         
16158         "add r28, %[k] \n\t" /* fix up right ptr */
16159         "adc r29, %[zero] \n\t"
16160         
16161         "st z+, %[r0] \n\t"  /* Store the result. */
16162         "mov %[r0], %[r1] \n\t"
16163         "mov %[r1], %[r2] \n\t"
16164         "mov %[r2], %[zero] \n\t"
16165         
16166         "dec %[k] \n\t"
16167         "sub r26, %[k] \n\t" /* fix up left ptr (after k is decremented, so next time we start 1 higher) */
16168         "sbc r27, %[zero] \n\t"
16169         
16170         "cpi %[k], 0 \n\t"
16171         "brne 1b \n\t" /* loop if k > 0 */
16172         
16173         "st z+, %[r0] \n\t"  /* Store last result byte. */
16174         
16175         "eor r1, r1 \n\t" /* fix r1 to be 0 again */
16176         
16177         "sbiw r28, " STR(uECC_BYTES) " \n\t" /* Restore Y */
16178     
16179         : "+z" (p_result), "+x" (p_left),
16180           [r0] "+r" (r0), [r1] "+r" (r1), [r2] "+r" (r2), [zero] "+r" (l_zero),
16181           [k] "=&a" (k), [i] "=&a" (i)
16182         : "y" (p_right)
16183         : "r0", "cc", "memory"
16184     );
16185 }
16186 #define asm_mult 1
16187 #endif
16188
16189 #if uECC_SQUARE_FUNC
16190 #if !asm_square
16191 static void vli_square(uint8_t *p_result, uint8_t *p_left)
16192 {
16193     uint8_t r0 = 0;
16194     uint8_t r1 = 0;
16195     uint8_t r2 = 0;
16196     
16197     uint8_t l_zero = 0;
16198     
16199     uint8_t k;
16200     
16201     __asm__ volatile (
16202         "ldi %[k], 1 \n\t" /* k = 1; k < uECC_BYTES*2; ++k */
16203         
16204         "1: \n\t"
16205         
16206         "movw r26, %[orig] \n\t"  /* copy orig ptr to 'left' ptr */
16207         "movw r30, %[orig] \n\t"  /* copy orig ptr to 'right' ptr */
16208         "cpi %[k], " STR(uECC_BYTES) " \n\t"
16209         "brlo 2f \n\t"
16210         "breq 2f \n\t"
16211         
16212         /* when k > uECC_BYTES, we start from (k - uECC_BYTES) on the 'left' ptr */
16213         "add r26, %[k] \n\t"
16214         "adc r27, %[zero] \n\t"
16215         "subi r26, " STR(uECC_BYTES) " \n\t"
16216         "sbc r27, %[zero] \n\t"
16217         "adiw r30, " STR(uECC_BYTES) " \n\t" /* move right ptr to point at the end */
16218         "rjmp 3f \n\t"
16219         
16220         "2: \n\t" /* when k <= uECC_BYTES, we add k to the 'right' ptr */
16221         "add r30, %[k] \n\t" /* pre-add 'right' ptr */
16222         "adc r31, %[zero] \n\t"
16223         
16224         "3: \n\t"
16225         "ld r0, x+ \n\t"
16226         "cp r26, r30 \n\t" /* if left == right here, then we are done after this mult (and we don't need to double) */
16227         "breq 4f \n\t"
16228         "ld r1, -z \n\t"
16229         "mul r0, r1 \n\t"
16230         
16231         /* add twice since it costs the same as doubling */
16232         "add %[r0], r0 \n\t"
16233         "adc %[r1], r1 \n\t"
16234         "adc %[r2], %[zero] \n\t"
16235         "add %[r0], r0 \n\t"
16236         "adc %[r1], r1 \n\t"
16237         "adc %[r2], %[zero] \n\t"
16238         
16239         "cpse r26, r30 \n\t" /* if left == right here, then we are done */
16240         "rjmp 3b \n\t"
16241         "rjmp 5f \n\t" /* skip code for non-doubled mult */
16242         
16243         "4: \n\t"
16244         "ld r1, -z \n\t"
16245         "mul r0, r1 \n\t"
16246         "add %[r0], r0 \n\t"
16247         "adc %[r1], r1 \n\t"
16248         "adc %[r2], %[zero] \n\t"
16249         
16250         "5: \n\t"
16251         "movw r30, %[result] \n\t"  /* make z point to result */
16252         "st z+, %[r0] \n\t"  /* Store the result. */
16253         "movw %[result], r30 \n\t"  /* update result ptr*/
16254         "mov %[r0], %[r1] \n\t"
16255         "mov %[r1], %[r2] \n\t"
16256         "mov %[r2], %[zero] \n\t"
16257         
16258         "inc %[k] \n\t"
16259         "cpi %[k], %[max] \n\t"
16260         "brlo 1b \n\t" /* loop if k < uECC_BYTES */
16261         
16262         "movw r30, %[result] \n\t"  /* make z point to result */
16263         "st z+, %[r0] \n\t"  /* Store last result byte. */
16264         
16265         "eor r1, r1 \n\t" /* fix r1 to be 0 again */
16266     
16267         : [result] "+r" (p_result),
16268           [r0] "+r" (r0), [r1] "+r" (r1), [r2] "+r" (r2), [zero] "+r" (l_zero),
16269           [k] "=&a" (k)
16270         : [orig] "r" (p_left), [max] "M" (2*uECC_BYTES)
16271         : "r0", "r26", "r27", "r30", "r31", "cc", "memory"
16272     );
16273 }
16274 #define asm_square 1
16275 #endif
16276 #endif /* uECC_SQUARE_FUNC */