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