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
7 TEXT ·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
177 adx:
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
288 TEXT ·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
538 adx:
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
697 TEXT ·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
1027 adx:
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
View as plain text