1// Code generated by command: go run nat_amd64_asm.go -out ../nat_amd64.s -pkg bigmod. DO NOT EDIT.
2
3//go:build !purego
4
5// func addMulVVW1024(z *uint, x *uint, y uint) (c uint)
6// Requires: ADX, BMI2
7TEXT ·addMulVVW1024(SB), $0-32
8	CMPB ·supportADX+0(SB), $0x01
9	JEQ  adx
10	MOVQ z+0(FP), CX
11	MOVQ x+8(FP), BX
12	MOVQ y+16(FP), SI
13	XORQ DI, DI
14
15	// Iteration 0
16	MOVQ (BX), AX
17	MULQ SI
18	ADDQ (CX), AX
19	ADCQ $0x00, DX
20	ADDQ DI, AX
21	ADCQ $0x00, DX
22	MOVQ DX, DI
23	MOVQ AX, (CX)
24
25	// Iteration 1
26	MOVQ 8(BX), AX
27	MULQ SI
28	ADDQ 8(CX), AX
29	ADCQ $0x00, DX
30	ADDQ DI, AX
31	ADCQ $0x00, DX
32	MOVQ DX, DI
33	MOVQ AX, 8(CX)
34
35	// Iteration 2
36	MOVQ 16(BX), AX
37	MULQ SI
38	ADDQ 16(CX), AX
39	ADCQ $0x00, DX
40	ADDQ DI, AX
41	ADCQ $0x00, DX
42	MOVQ DX, DI
43	MOVQ AX, 16(CX)
44
45	// Iteration 3
46	MOVQ 24(BX), AX
47	MULQ SI
48	ADDQ 24(CX), AX
49	ADCQ $0x00, DX
50	ADDQ DI, AX
51	ADCQ $0x00, DX
52	MOVQ DX, DI
53	MOVQ AX, 24(CX)
54
55	// Iteration 4
56	MOVQ 32(BX), AX
57	MULQ SI
58	ADDQ 32(CX), AX
59	ADCQ $0x00, DX
60	ADDQ DI, AX
61	ADCQ $0x00, DX
62	MOVQ DX, DI
63	MOVQ AX, 32(CX)
64
65	// Iteration 5
66	MOVQ 40(BX), AX
67	MULQ SI
68	ADDQ 40(CX), AX
69	ADCQ $0x00, DX
70	ADDQ DI, AX
71	ADCQ $0x00, DX
72	MOVQ DX, DI
73	MOVQ AX, 40(CX)
74
75	// Iteration 6
76	MOVQ 48(BX), AX
77	MULQ SI
78	ADDQ 48(CX), AX
79	ADCQ $0x00, DX
80	ADDQ DI, AX
81	ADCQ $0x00, DX
82	MOVQ DX, DI
83	MOVQ AX, 48(CX)
84
85	// Iteration 7
86	MOVQ 56(BX), AX
87	MULQ SI
88	ADDQ 56(CX), AX
89	ADCQ $0x00, DX
90	ADDQ DI, AX
91	ADCQ $0x00, DX
92	MOVQ DX, DI
93	MOVQ AX, 56(CX)
94
95	// Iteration 8
96	MOVQ 64(BX), AX
97	MULQ SI
98	ADDQ 64(CX), AX
99	ADCQ $0x00, DX
100	ADDQ DI, AX
101	ADCQ $0x00, DX
102	MOVQ DX, DI
103	MOVQ AX, 64(CX)
104
105	// Iteration 9
106	MOVQ 72(BX), AX
107	MULQ SI
108	ADDQ 72(CX), AX
109	ADCQ $0x00, DX
110	ADDQ DI, AX
111	ADCQ $0x00, DX
112	MOVQ DX, DI
113	MOVQ AX, 72(CX)
114
115	// Iteration 10
116	MOVQ 80(BX), AX
117	MULQ SI
118	ADDQ 80(CX), AX
119	ADCQ $0x00, DX
120	ADDQ DI, AX
121	ADCQ $0x00, DX
122	MOVQ DX, DI
123	MOVQ AX, 80(CX)
124
125	// Iteration 11
126	MOVQ 88(BX), AX
127	MULQ SI
128	ADDQ 88(CX), AX
129	ADCQ $0x00, DX
130	ADDQ DI, AX
131	ADCQ $0x00, DX
132	MOVQ DX, DI
133	MOVQ AX, 88(CX)
134
135	// Iteration 12
136	MOVQ 96(BX), AX
137	MULQ SI
138	ADDQ 96(CX), AX
139	ADCQ $0x00, DX
140	ADDQ DI, AX
141	ADCQ $0x00, DX
142	MOVQ DX, DI
143	MOVQ AX, 96(CX)
144
145	// Iteration 13
146	MOVQ 104(BX), AX
147	MULQ SI
148	ADDQ 104(CX), AX
149	ADCQ $0x00, DX
150	ADDQ DI, AX
151	ADCQ $0x00, DX
152	MOVQ DX, DI
153	MOVQ AX, 104(CX)
154
155	// Iteration 14
156	MOVQ 112(BX), AX
157	MULQ SI
158	ADDQ 112(CX), AX
159	ADCQ $0x00, DX
160	ADDQ DI, AX
161	ADCQ $0x00, DX
162	MOVQ DX, DI
163	MOVQ AX, 112(CX)
164
165	// Iteration 15
166	MOVQ 120(BX), AX
167	MULQ SI
168	ADDQ 120(CX), AX
169	ADCQ $0x00, DX
170	ADDQ DI, AX
171	ADCQ $0x00, DX
172	MOVQ DX, DI
173	MOVQ AX, 120(CX)
174	MOVQ DI, c+24(FP)
175	RET
176
177adx:
178	MOVQ z+0(FP), AX
179	MOVQ x+8(FP), CX
180	MOVQ y+16(FP), DX
181	XORQ BX, BX
182	XORQ SI, SI
183
184	// Iteration 0
185	MULXQ (CX), R8, DI
186	ADCXQ BX, R8
187	ADOXQ (AX), R8
188	MOVQ  R8, (AX)
189
190	// Iteration 1
191	MULXQ 8(CX), R8, BX
192	ADCXQ DI, R8
193	ADOXQ 8(AX), R8
194	MOVQ  R8, 8(AX)
195
196	// Iteration 2
197	MULXQ 16(CX), R8, DI
198	ADCXQ BX, R8
199	ADOXQ 16(AX), R8
200	MOVQ  R8, 16(AX)
201
202	// Iteration 3
203	MULXQ 24(CX), R8, BX
204	ADCXQ DI, R8
205	ADOXQ 24(AX), R8
206	MOVQ  R8, 24(AX)
207
208	// Iteration 4
209	MULXQ 32(CX), R8, DI
210	ADCXQ BX, R8
211	ADOXQ 32(AX), R8
212	MOVQ  R8, 32(AX)
213
214	// Iteration 5
215	MULXQ 40(CX), R8, BX
216	ADCXQ DI, R8
217	ADOXQ 40(AX), R8
218	MOVQ  R8, 40(AX)
219
220	// Iteration 6
221	MULXQ 48(CX), R8, DI
222	ADCXQ BX, R8
223	ADOXQ 48(AX), R8
224	MOVQ  R8, 48(AX)
225
226	// Iteration 7
227	MULXQ 56(CX), R8, BX
228	ADCXQ DI, R8
229	ADOXQ 56(AX), R8
230	MOVQ  R8, 56(AX)
231
232	// Iteration 8
233	MULXQ 64(CX), R8, DI
234	ADCXQ BX, R8
235	ADOXQ 64(AX), R8
236	MOVQ  R8, 64(AX)
237
238	// Iteration 9
239	MULXQ 72(CX), R8, BX
240	ADCXQ DI, R8
241	ADOXQ 72(AX), R8
242	MOVQ  R8, 72(AX)
243
244	// Iteration 10
245	MULXQ 80(CX), R8, DI
246	ADCXQ BX, R8
247	ADOXQ 80(AX), R8
248	MOVQ  R8, 80(AX)
249
250	// Iteration 11
251	MULXQ 88(CX), R8, BX
252	ADCXQ DI, R8
253	ADOXQ 88(AX), R8
254	MOVQ  R8, 88(AX)
255
256	// Iteration 12
257	MULXQ 96(CX), R8, DI
258	ADCXQ BX, R8
259	ADOXQ 96(AX), R8
260	MOVQ  R8, 96(AX)
261
262	// Iteration 13
263	MULXQ 104(CX), R8, BX
264	ADCXQ DI, R8
265	ADOXQ 104(AX), R8
266	MOVQ  R8, 104(AX)
267
268	// Iteration 14
269	MULXQ 112(CX), R8, DI
270	ADCXQ BX, R8
271	ADOXQ 112(AX), R8
272	MOVQ  R8, 112(AX)
273
274	// Iteration 15
275	MULXQ 120(CX), R8, BX
276	ADCXQ DI, R8
277	ADOXQ 120(AX), R8
278	MOVQ  R8, 120(AX)
279
280	// Add back carry flags and return
281	ADCXQ SI, BX
282	ADOXQ SI, BX
283	MOVQ  BX, c+24(FP)
284	RET
285
286// func addMulVVW1536(z *uint, x *uint, y uint) (c uint)
287// Requires: ADX, BMI2
288TEXT ·addMulVVW1536(SB), $0-32
289	CMPB ·supportADX+0(SB), $0x01
290	JEQ  adx
291	MOVQ z+0(FP), CX
292	MOVQ x+8(FP), BX
293	MOVQ y+16(FP), SI
294	XORQ DI, DI
295
296	// Iteration 0
297	MOVQ (BX), AX
298	MULQ SI
299	ADDQ (CX), AX
300	ADCQ $0x00, DX
301	ADDQ DI, AX
302	ADCQ $0x00, DX
303	MOVQ DX, DI
304	MOVQ AX, (CX)
305
306	// Iteration 1
307	MOVQ 8(BX), AX
308	MULQ SI
309	ADDQ 8(CX), AX
310	ADCQ $0x00, DX
311	ADDQ DI, AX
312	ADCQ $0x00, DX
313	MOVQ DX, DI
314	MOVQ AX, 8(CX)
315
316	// Iteration 2
317	MOVQ 16(BX), AX
318	MULQ SI
319	ADDQ 16(CX), AX
320	ADCQ $0x00, DX
321	ADDQ DI, AX
322	ADCQ $0x00, DX
323	MOVQ DX, DI
324	MOVQ AX, 16(CX)
325
326	// Iteration 3
327	MOVQ 24(BX), AX
328	MULQ SI
329	ADDQ 24(CX), AX
330	ADCQ $0x00, DX
331	ADDQ DI, AX
332	ADCQ $0x00, DX
333	MOVQ DX, DI
334	MOVQ AX, 24(CX)
335
336	// Iteration 4
337	MOVQ 32(BX), AX
338	MULQ SI
339	ADDQ 32(CX), AX
340	ADCQ $0x00, DX
341	ADDQ DI, AX
342	ADCQ $0x00, DX
343	MOVQ DX, DI
344	MOVQ AX, 32(CX)
345
346	// Iteration 5
347	MOVQ 40(BX), AX
348	MULQ SI
349	ADDQ 40(CX), AX
350	ADCQ $0x00, DX
351	ADDQ DI, AX
352	ADCQ $0x00, DX
353	MOVQ DX, DI
354	MOVQ AX, 40(CX)
355
356	// Iteration 6
357	MOVQ 48(BX), AX
358	MULQ SI
359	ADDQ 48(CX), AX
360	ADCQ $0x00, DX
361	ADDQ DI, AX
362	ADCQ $0x00, DX
363	MOVQ DX, DI
364	MOVQ AX, 48(CX)
365
366	// Iteration 7
367	MOVQ 56(BX), AX
368	MULQ SI
369	ADDQ 56(CX), AX
370	ADCQ $0x00, DX
371	ADDQ DI, AX
372	ADCQ $0x00, DX
373	MOVQ DX, DI
374	MOVQ AX, 56(CX)
375
376	// Iteration 8
377	MOVQ 64(BX), AX
378	MULQ SI
379	ADDQ 64(CX), AX
380	ADCQ $0x00, DX
381	ADDQ DI, AX
382	ADCQ $0x00, DX
383	MOVQ DX, DI
384	MOVQ AX, 64(CX)
385
386	// Iteration 9
387	MOVQ 72(BX), AX
388	MULQ SI
389	ADDQ 72(CX), AX
390	ADCQ $0x00, DX
391	ADDQ DI, AX
392	ADCQ $0x00, DX
393	MOVQ DX, DI
394	MOVQ AX, 72(CX)
395
396	// Iteration 10
397	MOVQ 80(BX), AX
398	MULQ SI
399	ADDQ 80(CX), AX
400	ADCQ $0x00, DX
401	ADDQ DI, AX
402	ADCQ $0x00, DX
403	MOVQ DX, DI
404	MOVQ AX, 80(CX)
405
406	// Iteration 11
407	MOVQ 88(BX), AX
408	MULQ SI
409	ADDQ 88(CX), AX
410	ADCQ $0x00, DX
411	ADDQ DI, AX
412	ADCQ $0x00, DX
413	MOVQ DX, DI
414	MOVQ AX, 88(CX)
415
416	// Iteration 12
417	MOVQ 96(BX), AX
418	MULQ SI
419	ADDQ 96(CX), AX
420	ADCQ $0x00, DX
421	ADDQ DI, AX
422	ADCQ $0x00, DX
423	MOVQ DX, DI
424	MOVQ AX, 96(CX)
425
426	// Iteration 13
427	MOVQ 104(BX), AX
428	MULQ SI
429	ADDQ 104(CX), AX
430	ADCQ $0x00, DX
431	ADDQ DI, AX
432	ADCQ $0x00, DX
433	MOVQ DX, DI
434	MOVQ AX, 104(CX)
435
436	// Iteration 14
437	MOVQ 112(BX), AX
438	MULQ SI
439	ADDQ 112(CX), AX
440	ADCQ $0x00, DX
441	ADDQ DI, AX
442	ADCQ $0x00, DX
443	MOVQ DX, DI
444	MOVQ AX, 112(CX)
445
446	// Iteration 15
447	MOVQ 120(BX), AX
448	MULQ SI
449	ADDQ 120(CX), AX
450	ADCQ $0x00, DX
451	ADDQ DI, AX
452	ADCQ $0x00, DX
453	MOVQ DX, DI
454	MOVQ AX, 120(CX)
455
456	// Iteration 16
457	MOVQ 128(BX), AX
458	MULQ SI
459	ADDQ 128(CX), AX
460	ADCQ $0x00, DX
461	ADDQ DI, AX
462	ADCQ $0x00, DX
463	MOVQ DX, DI
464	MOVQ AX, 128(CX)
465
466	// Iteration 17
467	MOVQ 136(BX), AX
468	MULQ SI
469	ADDQ 136(CX), AX
470	ADCQ $0x00, DX
471	ADDQ DI, AX
472	ADCQ $0x00, DX
473	MOVQ DX, DI
474	MOVQ AX, 136(CX)
475
476	// Iteration 18
477	MOVQ 144(BX), AX
478	MULQ SI
479	ADDQ 144(CX), AX
480	ADCQ $0x00, DX
481	ADDQ DI, AX
482	ADCQ $0x00, DX
483	MOVQ DX, DI
484	MOVQ AX, 144(CX)
485
486	// Iteration 19
487	MOVQ 152(BX), AX
488	MULQ SI
489	ADDQ 152(CX), AX
490	ADCQ $0x00, DX
491	ADDQ DI, AX
492	ADCQ $0x00, DX
493	MOVQ DX, DI
494	MOVQ AX, 152(CX)
495
496	// Iteration 20
497	MOVQ 160(BX), AX
498	MULQ SI
499	ADDQ 160(CX), AX
500	ADCQ $0x00, DX
501	ADDQ DI, AX
502	ADCQ $0x00, DX
503	MOVQ DX, DI
504	MOVQ AX, 160(CX)
505
506	// Iteration 21
507	MOVQ 168(BX), AX
508	MULQ SI
509	ADDQ 168(CX), AX
510	ADCQ $0x00, DX
511	ADDQ DI, AX
512	ADCQ $0x00, DX
513	MOVQ DX, DI
514	MOVQ AX, 168(CX)
515
516	// Iteration 22
517	MOVQ 176(BX), AX
518	MULQ SI
519	ADDQ 176(CX), AX
520	ADCQ $0x00, DX
521	ADDQ DI, AX
522	ADCQ $0x00, DX
523	MOVQ DX, DI
524	MOVQ AX, 176(CX)
525
526	// Iteration 23
527	MOVQ 184(BX), AX
528	MULQ SI
529	ADDQ 184(CX), AX
530	ADCQ $0x00, DX
531	ADDQ DI, AX
532	ADCQ $0x00, DX
533	MOVQ DX, DI
534	MOVQ AX, 184(CX)
535	MOVQ DI, c+24(FP)
536	RET
537
538adx:
539	MOVQ z+0(FP), AX
540	MOVQ x+8(FP), CX
541	MOVQ y+16(FP), DX
542	XORQ BX, BX
543	XORQ SI, SI
544
545	// Iteration 0
546	MULXQ (CX), R8, DI
547	ADCXQ BX, R8
548	ADOXQ (AX), R8
549	MOVQ  R8, (AX)
550
551	// Iteration 1
552	MULXQ 8(CX), R8, BX
553	ADCXQ DI, R8
554	ADOXQ 8(AX), R8
555	MOVQ  R8, 8(AX)
556
557	// Iteration 2
558	MULXQ 16(CX), R8, DI
559	ADCXQ BX, R8
560	ADOXQ 16(AX), R8
561	MOVQ  R8, 16(AX)
562
563	// Iteration 3
564	MULXQ 24(CX), R8, BX
565	ADCXQ DI, R8
566	ADOXQ 24(AX), R8
567	MOVQ  R8, 24(AX)
568
569	// Iteration 4
570	MULXQ 32(CX), R8, DI
571	ADCXQ BX, R8
572	ADOXQ 32(AX), R8
573	MOVQ  R8, 32(AX)
574
575	// Iteration 5
576	MULXQ 40(CX), R8, BX
577	ADCXQ DI, R8
578	ADOXQ 40(AX), R8
579	MOVQ  R8, 40(AX)
580
581	// Iteration 6
582	MULXQ 48(CX), R8, DI
583	ADCXQ BX, R8
584	ADOXQ 48(AX), R8
585	MOVQ  R8, 48(AX)
586
587	// Iteration 7
588	MULXQ 56(CX), R8, BX
589	ADCXQ DI, R8
590	ADOXQ 56(AX), R8
591	MOVQ  R8, 56(AX)
592
593	// Iteration 8
594	MULXQ 64(CX), R8, DI
595	ADCXQ BX, R8
596	ADOXQ 64(AX), R8
597	MOVQ  R8, 64(AX)
598
599	// Iteration 9
600	MULXQ 72(CX), R8, BX
601	ADCXQ DI, R8
602	ADOXQ 72(AX), R8
603	MOVQ  R8, 72(AX)
604
605	// Iteration 10
606	MULXQ 80(CX), R8, DI
607	ADCXQ BX, R8
608	ADOXQ 80(AX), R8
609	MOVQ  R8, 80(AX)
610
611	// Iteration 11
612	MULXQ 88(CX), R8, BX
613	ADCXQ DI, R8
614	ADOXQ 88(AX), R8
615	MOVQ  R8, 88(AX)
616
617	// Iteration 12
618	MULXQ 96(CX), R8, DI
619	ADCXQ BX, R8
620	ADOXQ 96(AX), R8
621	MOVQ  R8, 96(AX)
622
623	// Iteration 13
624	MULXQ 104(CX), R8, BX
625	ADCXQ DI, R8
626	ADOXQ 104(AX), R8
627	MOVQ  R8, 104(AX)
628
629	// Iteration 14
630	MULXQ 112(CX), R8, DI
631	ADCXQ BX, R8
632	ADOXQ 112(AX), R8
633	MOVQ  R8, 112(AX)
634
635	// Iteration 15
636	MULXQ 120(CX), R8, BX
637	ADCXQ DI, R8
638	ADOXQ 120(AX), R8
639	MOVQ  R8, 120(AX)
640
641	// Iteration 16
642	MULXQ 128(CX), R8, DI
643	ADCXQ BX, R8
644	ADOXQ 128(AX), R8
645	MOVQ  R8, 128(AX)
646
647	// Iteration 17
648	MULXQ 136(CX), R8, BX
649	ADCXQ DI, R8
650	ADOXQ 136(AX), R8
651	MOVQ  R8, 136(AX)
652
653	// Iteration 18
654	MULXQ 144(CX), R8, DI
655	ADCXQ BX, R8
656	ADOXQ 144(AX), R8
657	MOVQ  R8, 144(AX)
658
659	// Iteration 19
660	MULXQ 152(CX), R8, BX
661	ADCXQ DI, R8
662	ADOXQ 152(AX), R8
663	MOVQ  R8, 152(AX)
664
665	// Iteration 20
666	MULXQ 160(CX), R8, DI
667	ADCXQ BX, R8
668	ADOXQ 160(AX), R8
669	MOVQ  R8, 160(AX)
670
671	// Iteration 21
672	MULXQ 168(CX), R8, BX
673	ADCXQ DI, R8
674	ADOXQ 168(AX), R8
675	MOVQ  R8, 168(AX)
676
677	// Iteration 22
678	MULXQ 176(CX), R8, DI
679	ADCXQ BX, R8
680	ADOXQ 176(AX), R8
681	MOVQ  R8, 176(AX)
682
683	// Iteration 23
684	MULXQ 184(CX), R8, BX
685	ADCXQ DI, R8
686	ADOXQ 184(AX), R8
687	MOVQ  R8, 184(AX)
688
689	// Add back carry flags and return
690	ADCXQ SI, BX
691	ADOXQ SI, BX
692	MOVQ  BX, c+24(FP)
693	RET
694
695// func addMulVVW2048(z *uint, x *uint, y uint) (c uint)
696// Requires: ADX, BMI2
697TEXT ·addMulVVW2048(SB), $0-32
698	CMPB ·supportADX+0(SB), $0x01
699	JEQ  adx
700	MOVQ z+0(FP), CX
701	MOVQ x+8(FP), BX
702	MOVQ y+16(FP), SI
703	XORQ DI, DI
704
705	// Iteration 0
706	MOVQ (BX), AX
707	MULQ SI
708	ADDQ (CX), AX
709	ADCQ $0x00, DX
710	ADDQ DI, AX
711	ADCQ $0x00, DX
712	MOVQ DX, DI
713	MOVQ AX, (CX)
714
715	// Iteration 1
716	MOVQ 8(BX), AX
717	MULQ SI
718	ADDQ 8(CX), AX
719	ADCQ $0x00, DX
720	ADDQ DI, AX
721	ADCQ $0x00, DX
722	MOVQ DX, DI
723	MOVQ AX, 8(CX)
724
725	// Iteration 2
726	MOVQ 16(BX), AX
727	MULQ SI
728	ADDQ 16(CX), AX
729	ADCQ $0x00, DX
730	ADDQ DI, AX
731	ADCQ $0x00, DX
732	MOVQ DX, DI
733	MOVQ AX, 16(CX)
734
735	// Iteration 3
736	MOVQ 24(BX), AX
737	MULQ SI
738	ADDQ 24(CX), AX
739	ADCQ $0x00, DX
740	ADDQ DI, AX
741	ADCQ $0x00, DX
742	MOVQ DX, DI
743	MOVQ AX, 24(CX)
744
745	// Iteration 4
746	MOVQ 32(BX), AX
747	MULQ SI
748	ADDQ 32(CX), AX
749	ADCQ $0x00, DX
750	ADDQ DI, AX
751	ADCQ $0x00, DX
752	MOVQ DX, DI
753	MOVQ AX, 32(CX)
754
755	// Iteration 5
756	MOVQ 40(BX), AX
757	MULQ SI
758	ADDQ 40(CX), AX
759	ADCQ $0x00, DX
760	ADDQ DI, AX
761	ADCQ $0x00, DX
762	MOVQ DX, DI
763	MOVQ AX, 40(CX)
764
765	// Iteration 6
766	MOVQ 48(BX), AX
767	MULQ SI
768	ADDQ 48(CX), AX
769	ADCQ $0x00, DX
770	ADDQ DI, AX
771	ADCQ $0x00, DX
772	MOVQ DX, DI
773	MOVQ AX, 48(CX)
774
775	// Iteration 7
776	MOVQ 56(BX), AX
777	MULQ SI
778	ADDQ 56(CX), AX
779	ADCQ $0x00, DX
780	ADDQ DI, AX
781	ADCQ $0x00, DX
782	MOVQ DX, DI
783	MOVQ AX, 56(CX)
784
785	// Iteration 8
786	MOVQ 64(BX), AX
787	MULQ SI
788	ADDQ 64(CX), AX
789	ADCQ $0x00, DX
790	ADDQ DI, AX
791	ADCQ $0x00, DX
792	MOVQ DX, DI
793	MOVQ AX, 64(CX)
794
795	// Iteration 9
796	MOVQ 72(BX), AX
797	MULQ SI
798	ADDQ 72(CX), AX
799	ADCQ $0x00, DX
800	ADDQ DI, AX
801	ADCQ $0x00, DX
802	MOVQ DX, DI
803	MOVQ AX, 72(CX)
804
805	// Iteration 10
806	MOVQ 80(BX), AX
807	MULQ SI
808	ADDQ 80(CX), AX
809	ADCQ $0x00, DX
810	ADDQ DI, AX
811	ADCQ $0x00, DX
812	MOVQ DX, DI
813	MOVQ AX, 80(CX)
814
815	// Iteration 11
816	MOVQ 88(BX), AX
817	MULQ SI
818	ADDQ 88(CX), AX
819	ADCQ $0x00, DX
820	ADDQ DI, AX
821	ADCQ $0x00, DX
822	MOVQ DX, DI
823	MOVQ AX, 88(CX)
824
825	// Iteration 12
826	MOVQ 96(BX), AX
827	MULQ SI
828	ADDQ 96(CX), AX
829	ADCQ $0x00, DX
830	ADDQ DI, AX
831	ADCQ $0x00, DX
832	MOVQ DX, DI
833	MOVQ AX, 96(CX)
834
835	// Iteration 13
836	MOVQ 104(BX), AX
837	MULQ SI
838	ADDQ 104(CX), AX
839	ADCQ $0x00, DX
840	ADDQ DI, AX
841	ADCQ $0x00, DX
842	MOVQ DX, DI
843	MOVQ AX, 104(CX)
844
845	// Iteration 14
846	MOVQ 112(BX), AX
847	MULQ SI
848	ADDQ 112(CX), AX
849	ADCQ $0x00, DX
850	ADDQ DI, AX
851	ADCQ $0x00, DX
852	MOVQ DX, DI
853	MOVQ AX, 112(CX)
854
855	// Iteration 15
856	MOVQ 120(BX), AX
857	MULQ SI
858	ADDQ 120(CX), AX
859	ADCQ $0x00, DX
860	ADDQ DI, AX
861	ADCQ $0x00, DX
862	MOVQ DX, DI
863	MOVQ AX, 120(CX)
864
865	// Iteration 16
866	MOVQ 128(BX), AX
867	MULQ SI
868	ADDQ 128(CX), AX
869	ADCQ $0x00, DX
870	ADDQ DI, AX
871	ADCQ $0x00, DX
872	MOVQ DX, DI
873	MOVQ AX, 128(CX)
874
875	// Iteration 17
876	MOVQ 136(BX), AX
877	MULQ SI
878	ADDQ 136(CX), AX
879	ADCQ $0x00, DX
880	ADDQ DI, AX
881	ADCQ $0x00, DX
882	MOVQ DX, DI
883	MOVQ AX, 136(CX)
884
885	// Iteration 18
886	MOVQ 144(BX), AX
887	MULQ SI
888	ADDQ 144(CX), AX
889	ADCQ $0x00, DX
890	ADDQ DI, AX
891	ADCQ $0x00, DX
892	MOVQ DX, DI
893	MOVQ AX, 144(CX)
894
895	// Iteration 19
896	MOVQ 152(BX), AX
897	MULQ SI
898	ADDQ 152(CX), AX
899	ADCQ $0x00, DX
900	ADDQ DI, AX
901	ADCQ $0x00, DX
902	MOVQ DX, DI
903	MOVQ AX, 152(CX)
904
905	// Iteration 20
906	MOVQ 160(BX), AX
907	MULQ SI
908	ADDQ 160(CX), AX
909	ADCQ $0x00, DX
910	ADDQ DI, AX
911	ADCQ $0x00, DX
912	MOVQ DX, DI
913	MOVQ AX, 160(CX)
914
915	// Iteration 21
916	MOVQ 168(BX), AX
917	MULQ SI
918	ADDQ 168(CX), AX
919	ADCQ $0x00, DX
920	ADDQ DI, AX
921	ADCQ $0x00, DX
922	MOVQ DX, DI
923	MOVQ AX, 168(CX)
924
925	// Iteration 22
926	MOVQ 176(BX), AX
927	MULQ SI
928	ADDQ 176(CX), AX
929	ADCQ $0x00, DX
930	ADDQ DI, AX
931	ADCQ $0x00, DX
932	MOVQ DX, DI
933	MOVQ AX, 176(CX)
934
935	// Iteration 23
936	MOVQ 184(BX), AX
937	MULQ SI
938	ADDQ 184(CX), AX
939	ADCQ $0x00, DX
940	ADDQ DI, AX
941	ADCQ $0x00, DX
942	MOVQ DX, DI
943	MOVQ AX, 184(CX)
944
945	// Iteration 24
946	MOVQ 192(BX), AX
947	MULQ SI
948	ADDQ 192(CX), AX
949	ADCQ $0x00, DX
950	ADDQ DI, AX
951	ADCQ $0x00, DX
952	MOVQ DX, DI
953	MOVQ AX, 192(CX)
954
955	// Iteration 25
956	MOVQ 200(BX), AX
957	MULQ SI
958	ADDQ 200(CX), AX
959	ADCQ $0x00, DX
960	ADDQ DI, AX
961	ADCQ $0x00, DX
962	MOVQ DX, DI
963	MOVQ AX, 200(CX)
964
965	// Iteration 26
966	MOVQ 208(BX), AX
967	MULQ SI
968	ADDQ 208(CX), AX
969	ADCQ $0x00, DX
970	ADDQ DI, AX
971	ADCQ $0x00, DX
972	MOVQ DX, DI
973	MOVQ AX, 208(CX)
974
975	// Iteration 27
976	MOVQ 216(BX), AX
977	MULQ SI
978	ADDQ 216(CX), AX
979	ADCQ $0x00, DX
980	ADDQ DI, AX
981	ADCQ $0x00, DX
982	MOVQ DX, DI
983	MOVQ AX, 216(CX)
984
985	// Iteration 28
986	MOVQ 224(BX), AX
987	MULQ SI
988	ADDQ 224(CX), AX
989	ADCQ $0x00, DX
990	ADDQ DI, AX
991	ADCQ $0x00, DX
992	MOVQ DX, DI
993	MOVQ AX, 224(CX)
994
995	// Iteration 29
996	MOVQ 232(BX), AX
997	MULQ SI
998	ADDQ 232(CX), AX
999	ADCQ $0x00, DX
1000	ADDQ DI, AX
1001	ADCQ $0x00, DX
1002	MOVQ DX, DI
1003	MOVQ AX, 232(CX)
1004
1005	// Iteration 30
1006	MOVQ 240(BX), AX
1007	MULQ SI
1008	ADDQ 240(CX), AX
1009	ADCQ $0x00, DX
1010	ADDQ DI, AX
1011	ADCQ $0x00, DX
1012	MOVQ DX, DI
1013	MOVQ AX, 240(CX)
1014
1015	// Iteration 31
1016	MOVQ 248(BX), AX
1017	MULQ SI
1018	ADDQ 248(CX), AX
1019	ADCQ $0x00, DX
1020	ADDQ DI, AX
1021	ADCQ $0x00, DX
1022	MOVQ DX, DI
1023	MOVQ AX, 248(CX)
1024	MOVQ DI, c+24(FP)
1025	RET
1026
1027adx:
1028	MOVQ z+0(FP), AX
1029	MOVQ x+8(FP), CX
1030	MOVQ y+16(FP), DX
1031	XORQ BX, BX
1032	XORQ SI, SI
1033
1034	// Iteration 0
1035	MULXQ (CX), R8, DI
1036	ADCXQ BX, R8
1037	ADOXQ (AX), R8
1038	MOVQ  R8, (AX)
1039
1040	// Iteration 1
1041	MULXQ 8(CX), R8, BX
1042	ADCXQ DI, R8
1043	ADOXQ 8(AX), R8
1044	MOVQ  R8, 8(AX)
1045
1046	// Iteration 2
1047	MULXQ 16(CX), R8, DI
1048	ADCXQ BX, R8
1049	ADOXQ 16(AX), R8
1050	MOVQ  R8, 16(AX)
1051
1052	// Iteration 3
1053	MULXQ 24(CX), R8, BX
1054	ADCXQ DI, R8
1055	ADOXQ 24(AX), R8
1056	MOVQ  R8, 24(AX)
1057
1058	// Iteration 4
1059	MULXQ 32(CX), R8, DI
1060	ADCXQ BX, R8
1061	ADOXQ 32(AX), R8
1062	MOVQ  R8, 32(AX)
1063
1064	// Iteration 5
1065	MULXQ 40(CX), R8, BX
1066	ADCXQ DI, R8
1067	ADOXQ 40(AX), R8
1068	MOVQ  R8, 40(AX)
1069
1070	// Iteration 6
1071	MULXQ 48(CX), R8, DI
1072	ADCXQ BX, R8
1073	ADOXQ 48(AX), R8
1074	MOVQ  R8, 48(AX)
1075
1076	// Iteration 7
1077	MULXQ 56(CX), R8, BX
1078	ADCXQ DI, R8
1079	ADOXQ 56(AX), R8
1080	MOVQ  R8, 56(AX)
1081
1082	// Iteration 8
1083	MULXQ 64(CX), R8, DI
1084	ADCXQ BX, R8
1085	ADOXQ 64(AX), R8
1086	MOVQ  R8, 64(AX)
1087
1088	// Iteration 9
1089	MULXQ 72(CX), R8, BX
1090	ADCXQ DI, R8
1091	ADOXQ 72(AX), R8
1092	MOVQ  R8, 72(AX)
1093
1094	// Iteration 10
1095	MULXQ 80(CX), R8, DI
1096	ADCXQ BX, R8
1097	ADOXQ 80(AX), R8
1098	MOVQ  R8, 80(AX)
1099
1100	// Iteration 11
1101	MULXQ 88(CX), R8, BX
1102	ADCXQ DI, R8
1103	ADOXQ 88(AX), R8
1104	MOVQ  R8, 88(AX)
1105
1106	// Iteration 12
1107	MULXQ 96(CX), R8, DI
1108	ADCXQ BX, R8
1109	ADOXQ 96(AX), R8
1110	MOVQ  R8, 96(AX)
1111
1112	// Iteration 13
1113	MULXQ 104(CX), R8, BX
1114	ADCXQ DI, R8
1115	ADOXQ 104(AX), R8
1116	MOVQ  R8, 104(AX)
1117
1118	// Iteration 14
1119	MULXQ 112(CX), R8, DI
1120	ADCXQ BX, R8
1121	ADOXQ 112(AX), R8
1122	MOVQ  R8, 112(AX)
1123
1124	// Iteration 15
1125	MULXQ 120(CX), R8, BX
1126	ADCXQ DI, R8
1127	ADOXQ 120(AX), R8
1128	MOVQ  R8, 120(AX)
1129
1130	// Iteration 16
1131	MULXQ 128(CX), R8, DI
1132	ADCXQ BX, R8
1133	ADOXQ 128(AX), R8
1134	MOVQ  R8, 128(AX)
1135
1136	// Iteration 17
1137	MULXQ 136(CX), R8, BX
1138	ADCXQ DI, R8
1139	ADOXQ 136(AX), R8
1140	MOVQ  R8, 136(AX)
1141
1142	// Iteration 18
1143	MULXQ 144(CX), R8, DI
1144	ADCXQ BX, R8
1145	ADOXQ 144(AX), R8
1146	MOVQ  R8, 144(AX)
1147
1148	// Iteration 19
1149	MULXQ 152(CX), R8, BX
1150	ADCXQ DI, R8
1151	ADOXQ 152(AX), R8
1152	MOVQ  R8, 152(AX)
1153
1154	// Iteration 20
1155	MULXQ 160(CX), R8, DI
1156	ADCXQ BX, R8
1157	ADOXQ 160(AX), R8
1158	MOVQ  R8, 160(AX)
1159
1160	// Iteration 21
1161	MULXQ 168(CX), R8, BX
1162	ADCXQ DI, R8
1163	ADOXQ 168(AX), R8
1164	MOVQ  R8, 168(AX)
1165
1166	// Iteration 22
1167	MULXQ 176(CX), R8, DI
1168	ADCXQ BX, R8
1169	ADOXQ 176(AX), R8
1170	MOVQ  R8, 176(AX)
1171
1172	// Iteration 23
1173	MULXQ 184(CX), R8, BX
1174	ADCXQ DI, R8
1175	ADOXQ 184(AX), R8
1176	MOVQ  R8, 184(AX)
1177
1178	// Iteration 24
1179	MULXQ 192(CX), R8, DI
1180	ADCXQ BX, R8
1181	ADOXQ 192(AX), R8
1182	MOVQ  R8, 192(AX)
1183
1184	// Iteration 25
1185	MULXQ 200(CX), R8, BX
1186	ADCXQ DI, R8
1187	ADOXQ 200(AX), R8
1188	MOVQ  R8, 200(AX)
1189
1190	// Iteration 26
1191	MULXQ 208(CX), R8, DI
1192	ADCXQ BX, R8
1193	ADOXQ 208(AX), R8
1194	MOVQ  R8, 208(AX)
1195
1196	// Iteration 27
1197	MULXQ 216(CX), R8, BX
1198	ADCXQ DI, R8
1199	ADOXQ 216(AX), R8
1200	MOVQ  R8, 216(AX)
1201
1202	// Iteration 28
1203	MULXQ 224(CX), R8, DI
1204	ADCXQ BX, R8
1205	ADOXQ 224(AX), R8
1206	MOVQ  R8, 224(AX)
1207
1208	// Iteration 29
1209	MULXQ 232(CX), R8, BX
1210	ADCXQ DI, R8
1211	ADOXQ 232(AX), R8
1212	MOVQ  R8, 232(AX)
1213
1214	// Iteration 30
1215	MULXQ 240(CX), R8, DI
1216	ADCXQ BX, R8
1217	ADOXQ 240(AX), R8
1218	MOVQ  R8, 240(AX)
1219
1220	// Iteration 31
1221	MULXQ 248(CX), R8, BX
1222	ADCXQ DI, R8
1223	ADOXQ 248(AX), R8
1224	MOVQ  R8, 248(AX)
1225
1226	// Add back carry flags and return
1227	ADCXQ SI, BX
1228	ADOXQ SI, BX
1229	MOVQ  BX, c+24(FP)
1230	RET
1231