Changeset 1767 for trunk/lib/idisa_cpp/idisa_neon.cpp
 Timestamp:
 Dec 12, 2011, 12:00:15 PM (8 years ago)
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

trunk/lib/idisa_cpp/idisa_neon.cpp
r1740 r1767 1 2 /* Copyright (c) 2011, Hua Huang and Robert D. Cameron. 3 Licensed under the Academic Free License 3.0. 4 This file is generated by the IDISA+ generator; 5 modifications should be made only by changing the 6 generator configuration and data files. */ 7 1 8 #ifndef IDISA_NEON_CPP 2 9 #define IDISA_NEON_CPP … … 468 475 #define neon_shift_left_64_bits(x) \ 469 476 vextq_u64(vdupq_n_u64(0), (bitblock128_t)(x), 1) 470 //The total number of operations is 2 477 //The total number of operations is 2.0 471 478 IDISA_ALWAYS_INLINE bitblock128_t simd_nor(bitblock128_t arg1, bitblock128_t arg2) 472 479 { … … 474 481 } 475 482 476 //The total number of operations is 1 483 //The total number of operations is 1.0 477 484 IDISA_ALWAYS_INLINE bitblock128_t simd_not(bitblock128_t arg1) 478 485 { … … 480 487 } 481 488 482 //The total number of operations is 1 489 //The total number of operations is 1.0 483 490 IDISA_ALWAYS_INLINE bitblock128_t simd_andc(bitblock128_t arg1, bitblock128_t arg2) 484 491 { … … 486 493 } 487 494 488 //The total number of operations is 1 495 //The total number of operations is 1.0 489 496 IDISA_ALWAYS_INLINE bitblock128_t simd_or(bitblock128_t arg1, bitblock128_t arg2) 490 497 { … … 492 499 } 493 500 494 //The total number of operations is 1 501 //The total number of operations is 1.0 495 502 IDISA_ALWAYS_INLINE bitblock128_t simd_and(bitblock128_t arg1, bitblock128_t arg2) 496 503 { … … 498 505 } 499 506 500 //The total number of operations is 1 507 //The total number of operations is 1.0 501 508 IDISA_ALWAYS_INLINE bitblock128_t simd_xor(bitblock128_t arg1, bitblock128_t arg2) 502 509 { … … 504 511 } 505 512 506 //The total number of operations is 1 513 //The total number of operations is 1.0 507 514 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::max(bitblock128_t arg1, bitblock128_t arg2) 508 515 { … … 510 517 } 511 518 512 //The total number of operations is 13 519 //The total number of operations is 13.0 513 520 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::max(bitblock128_t arg1, bitblock128_t arg2) 514 521 { … … 520 527 } 521 528 522 //The total number of operations is 7529 //The total number of operations is 6.0 523 530 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::max(bitblock128_t arg1, bitblock128_t arg2) 524 531 { … … 526 533 } 527 534 528 //The total number of operations is 1 535 //The total number of operations is 1.0 529 536 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::max(bitblock128_t arg1, bitblock128_t arg2) 530 537 { … … 532 539 } 533 540 534 //The total number of operations is 1 541 //The total number of operations is 1.0 535 542 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::max(bitblock128_t arg1, bitblock128_t arg2) 536 543 { … … 538 545 } 539 546 540 //The total number of operations is 1 547 //The total number of operations is 1.0 541 548 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::max(bitblock128_t arg1, bitblock128_t arg2) 542 549 { … … 544 551 } 545 552 546 //The total number of operations is 1 2553 //The total number of operations is 11.5 547 554 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::max(bitblock128_t arg1, bitblock128_t arg2) 548 555 { 549 bitblock128_t hiAns = simd128<(32)>::max(arg1, arg2); 550 bitblock128_t loAns = simd128<(32)>::umax(arg1, arg2); 551 bitblock128_t eqMask1 = simd128<64>::srli<(32)>(simd128<(32)>::eq(hiAns, arg1)); 552 bitblock128_t eqMask2 = simd128<64>::srli<(32)>(simd128<(32)>::eq(hiAns, arg2)); 553 return simd128<1>::ifh(simd128<64>::himask(), hiAns, simd128<1>::ifh(eqMask1, simd128<1>::ifh(eqMask2, loAns, arg1), arg2)); 554 } 555 556 //The total number of operations is 46 556 return simd128<1>::ifh(simd128<64>::gt(arg1, arg2), arg1, arg2); 557 } 558 559 //The total number of operations is 40.6666666667 557 560 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::max(bitblock128_t arg1, bitblock128_t arg2) 558 561 { 559 bitblock128_t hiAns = simd128<(64)>::max(arg1, arg2); 560 bitblock128_t loAns = simd128<(64)>::umax(arg1, arg2); 561 bitblock128_t eqMask1 = simd128<128>::srli<(64)>(simd128<(64)>::eq(hiAns, arg1)); 562 bitblock128_t eqMask2 = simd128<128>::srli<(64)>(simd128<(64)>::eq(hiAns, arg2)); 563 return simd128<1>::ifh(simd128<128>::himask(), hiAns, simd128<1>::ifh(eqMask1, simd128<1>::ifh(eqMask2, loAns, arg1), arg2)); 564 } 565 566 //The total number of operations is 1 562 return simd128<1>::ifh(simd128<128>::gt(arg1, arg2), arg1, arg2); 563 } 564 565 //The total number of operations is 1.0 567 566 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::mult(bitblock128_t arg1, bitblock128_t arg2) 568 567 { … … 570 569 } 571 570 572 //The total number of operations is 23571 //The total number of operations is 17.6666666667 573 572 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::mult(bitblock128_t arg1, bitblock128_t arg2) 574 573 { … … 578 577 } 579 578 580 //The total number of operations is 8579 //The total number of operations is 7.5 581 580 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::mult(bitblock128_t arg1, bitblock128_t arg2) 582 581 { … … 587 586 } 588 587 589 //The total number of operations is 1 588 //The total number of operations is 1.0 590 589 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::mult(bitblock128_t arg1, bitblock128_t arg2) 591 590 { … … 593 592 } 594 593 595 //The total number of operations is 1 594 //The total number of operations is 1.0 596 595 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::mult(bitblock128_t arg1, bitblock128_t arg2) 597 596 { … … 599 598 } 600 599 601 //The total number of operations is 1 600 //The total number of operations is 1.0 602 601 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::mult(bitblock128_t arg1, bitblock128_t arg2) 603 602 { … … 605 604 } 606 605 607 //The total number of operations is 1 606 //The total number of operations is 1.0 608 607 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::gt(bitblock128_t arg1, bitblock128_t arg2) 609 608 { … … 611 610 } 612 611 613 //The total number of operations is 1 5612 //The total number of operations is 13.5 614 613 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::gt(bitblock128_t arg1, bitblock128_t arg2) 615 614 { 616 bitblock128_t hiAns = simd128<(1)>::gt(arg1, arg2); 617 bitblock128_t loAns = simd128<(1)>::ugt(arg1, arg2); 618 bitblock128_t mask = simd_and(loAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2))); 619 mask = simd_or(mask, simd128<2>::slli<(1)>(mask)); 620 return simd_or(simd128<2>::srai<(1)>(hiAns), mask); 621 } 622 623 //The total number of operations is 6 615 bitblock128_t tmp = simd_not(arg1); 616 bitblock128_t tmpAns = simd_or(simd_and(tmp, arg2), simd_and(simd128<128>::slli<1>(simd_and(arg1, simd_not(arg2))), simd_or(tmp, arg2))); 617 return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns)); 618 } 619 620 //The total number of operations is 5.0 624 621 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::gt(bitblock128_t arg1, bitblock128_t arg2) 625 622 { … … 627 624 } 628 625 629 //The total number of operations is 1 626 //The total number of operations is 1.0 630 627 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::gt(bitblock128_t arg1, bitblock128_t arg2) 631 628 { … … 633 630 } 634 631 635 //The total number of operations is 1 632 //The total number of operations is 1.0 636 633 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::gt(bitblock128_t arg1, bitblock128_t arg2) 637 634 { … … 639 636 } 640 637 641 //The total number of operations is 1 638 //The total number of operations is 1.0 642 639 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::gt(bitblock128_t arg1, bitblock128_t arg2) 643 640 { … … 645 642 } 646 643 647 //The total number of operations is 1 1644 //The total number of operations is 10.5 648 645 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::gt(bitblock128_t arg1, bitblock128_t arg2) 649 646 { … … 655 652 } 656 653 657 //The total number of operations is 48654 //The total number of operations is 39.6666666667 658 655 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::gt(bitblock128_t arg1, bitblock128_t arg2) 659 656 { … … 665 662 } 666 663 667 //The total number of operations is 1 664 //The total number of operations is 1.0 668 665 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ult(bitblock128_t arg1, bitblock128_t arg2) 669 666 { … … 671 668 } 672 669 673 //The total number of operations is 1 4670 //The total number of operations is 12.5 674 671 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ult(bitblock128_t arg1, bitblock128_t arg2) 675 672 { 676 bitblock128_t tmpAns = simd128<(1)>::ult(arg1, arg2); 677 bitblock128_t mask = simd_and(tmpAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2))); 678 mask = simd_or(mask, simd128<2>::slli<(1)>(mask)); 679 return simd_or(simd128<2>::srai<(1)>(tmpAns), mask); 680 } 681 682 //The total number of operations is 8 673 bitblock128_t tmp = simd_not(arg1); 674 bitblock128_t tmpAns = simd_or(simd_and(tmp, arg2), simd_and(simd128<128>::slli<1>(simd_and(tmp, arg2)), simd_or(tmp, arg2))); 675 return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns)); 676 } 677 678 //The total number of operations is 7.0 683 679 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ult(bitblock128_t arg1, bitblock128_t arg2) 684 680 { … … 687 683 } 688 684 689 //The total number of operations is 3 685 //The total number of operations is 3.0 690 686 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ult(bitblock128_t arg1, bitblock128_t arg2) 691 687 { … … 694 690 } 695 691 696 //The total number of operations is 3 692 //The total number of operations is 3.0 697 693 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ult(bitblock128_t arg1, bitblock128_t arg2) 698 694 { … … 701 697 } 702 698 703 //The total number of operations is 3 699 //The total number of operations is 3.0 704 700 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ult(bitblock128_t arg1, bitblock128_t arg2) 705 701 { … … 708 704 } 709 705 710 //The total number of operations is 10706 //The total number of operations is 9.5 711 707 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ult(bitblock128_t arg1, bitblock128_t arg2) 712 708 { … … 717 713 } 718 714 719 //The total number of operations is 37715 //The total number of operations is 29.1666666667 720 716 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ult(bitblock128_t arg1, bitblock128_t arg2) 721 717 { … … 726 722 } 727 723 728 //The total number of operations is 1 724 //The total number of operations is 1.0 729 725 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::lt(bitblock128_t arg1, bitblock128_t arg2) 730 726 { … … 732 728 } 733 729 734 //The total number of operations is 1 5730 //The total number of operations is 13.5 735 731 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::lt(bitblock128_t arg1, bitblock128_t arg2) 736 732 { 737 bitblock128_t hiAns = simd128<(1)>::lt(arg1, arg2); 738 bitblock128_t loAns = simd128<(1)>::ult(arg1, arg2); 739 bitblock128_t mask = simd_and(loAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2))); 740 mask = simd_or(mask, simd128<2>::slli<(1)>(mask)); 741 return simd_or(simd128<2>::srai<(1)>(hiAns), mask); 742 } 743 744 //The total number of operations is 6 733 bitblock128_t tmp = simd_not(arg2); 734 bitblock128_t tmpAns = simd_or(simd_and(arg1, tmp), simd_and(simd128<128>::slli<1>(simd_and(simd_not(arg1), arg2)), simd_or(arg1, tmp))); 735 return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns)); 736 } 737 738 //The total number of operations is 5.0 745 739 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::lt(bitblock128_t arg1, bitblock128_t arg2) 746 740 { … … 748 742 } 749 743 750 //The total number of operations is 1 744 //The total number of operations is 1.0 751 745 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::lt(bitblock128_t arg1, bitblock128_t arg2) 752 746 { … … 754 748 } 755 749 756 //The total number of operations is 1 750 //The total number of operations is 1.0 757 751 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::lt(bitblock128_t arg1, bitblock128_t arg2) 758 752 { … … 760 754 } 761 755 762 //The total number of operations is 1 756 //The total number of operations is 1.0 763 757 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::lt(bitblock128_t arg1, bitblock128_t arg2) 764 758 { … … 766 760 } 767 761 768 //The total number of operations is 1 1762 //The total number of operations is 10.5 769 763 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::lt(bitblock128_t arg1, bitblock128_t arg2) 770 764 { … … 776 770 } 777 771 778 //The total number of operations is 48772 //The total number of operations is 39.6666666667 779 773 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::lt(bitblock128_t arg1, bitblock128_t arg2) 780 774 { … … 786 780 } 787 781 788 //The total number of operations is 2 782 //The total number of operations is 2.0 789 783 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::srli(bitblock128_t arg1) 790 784 { … … 792 786 } 793 787 794 //The total number of operations is 2 788 //The total number of operations is 2.0 795 789 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::srli(bitblock128_t arg1) 796 790 { … … 798 792 } 799 793 800 //The total number of operations is 1 794 //The total number of operations is 1.0 801 795 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::srli(bitblock128_t arg1) 802 796 { … … 804 798 } 805 799 806 //The total number of operations is 1 800 //The total number of operations is 1.0 807 801 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::srli(bitblock128_t arg1) 808 802 { … … 810 804 } 811 805 812 //The total number of operations is 1 806 //The total number of operations is 1.0 813 807 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::srli(bitblock128_t arg1) 814 808 { … … 816 810 } 817 811 818 //The total number of operations is 1 812 //The total number of operations is 1.0 819 813 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::srli(bitblock128_t arg1) 820 814 { … … 822 816 } 823 817 824 //The total number of operations is 5818 //The total number of operations is 3.16666666667 825 819 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::srli(bitblock128_t arg1) 826 820 { … … 828 822 } 829 823 830 //The total number of operations is 1 824 //The total number of operations is 1.0 831 825 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ctz(bitblock128_t arg1) 832 826 { … … 834 828 } 835 829 836 //The total number of operations is 14830 //The total number of operations is 9.5 837 831 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ctz(bitblock128_t arg1) 838 832 { … … 841 835 } 842 836 843 //The total number of operations is 12 837 //The total number of operations is 12.0 844 838 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ctz(bitblock128_t arg1) 845 839 { … … 847 841 } 848 842 849 //The total number of operations is 3 843 //The total number of operations is 3.0 850 844 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ctz(bitblock128_t arg1) 851 845 { … … 853 847 } 854 848 855 //The total number of operations is 6 849 //The total number of operations is 6.0 856 850 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ctz(bitblock128_t arg1) 857 851 { … … 859 853 } 860 854 861 //The total number of operations is 9 855 //The total number of operations is 9.0 862 856 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ctz(bitblock128_t arg1) 863 857 { … … 865 859 } 866 860 867 //The total number of operations is 12 861 //The total number of operations is 12.0 868 862 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ctz(bitblock128_t arg1) 869 863 { … … 871 865 } 872 866 873 //The total number of operations is 30867 //The total number of operations is 25.5 874 868 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ctz(bitblock128_t arg1) 875 869 { … … 877 871 } 878 872 879 //The total number of operations is 1 873 //The total number of operations is 1.0 880 874 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ugt(bitblock128_t arg1, bitblock128_t arg2) 881 875 { … … 883 877 } 884 878 885 //The total number of operations is 1 4879 //The total number of operations is 12.5 886 880 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ugt(bitblock128_t arg1, bitblock128_t arg2) 887 881 { 888 bitblock128_t tmpAns = simd128<(1)>::ugt(arg1, arg2); 889 bitblock128_t mask = simd_and(tmpAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2))); 890 mask = simd_or(mask, simd128<2>::slli<(1)>(mask)); 891 return simd_or(simd128<2>::srai<(1)>(tmpAns), mask); 892 } 893 894 //The total number of operations is 8 882 bitblock128_t tmp = simd_not(arg2); 883 bitblock128_t tmpAns = simd_or(simd_and(arg1, tmp), simd_and(simd128<128>::slli<1>(simd_and(arg1, tmp)), simd_or(arg1, tmp))); 884 return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns)); 885 } 886 887 //The total number of operations is 7.0 895 888 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ugt(bitblock128_t arg1, bitblock128_t arg2) 896 889 { … … 899 892 } 900 893 901 //The total number of operations is 3 894 //The total number of operations is 3.0 902 895 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ugt(bitblock128_t arg1, bitblock128_t arg2) 903 896 { … … 906 899 } 907 900 908 //The total number of operations is 3 901 //The total number of operations is 3.0 909 902 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ugt(bitblock128_t arg1, bitblock128_t arg2) 910 903 { … … 913 906 } 914 907 915 //The total number of operations is 3 908 //The total number of operations is 3.0 916 909 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ugt(bitblock128_t arg1, bitblock128_t arg2) 917 910 { … … 920 913 } 921 914 922 //The total number of operations is 10915 //The total number of operations is 9.5 923 916 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ugt(bitblock128_t arg1, bitblock128_t arg2) 924 917 { … … 929 922 } 930 923 931 //The total number of operations is 37924 //The total number of operations is 29.1666666667 932 925 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ugt(bitblock128_t arg1, bitblock128_t arg2) 933 926 { … … 938 931 } 939 932 940 //The total number of operations is 4 933 //The total number of operations is 4.0 941 934 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::xor_hl(bitblock128_t arg1) 942 935 { … … 944 937 } 945 938 946 //The total number of operations is 4 939 //The total number of operations is 4.0 947 940 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::xor_hl(bitblock128_t arg1) 948 941 { … … 950 943 } 951 944 952 //The total number of operations is 3 945 //The total number of operations is 3.0 953 946 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::xor_hl(bitblock128_t arg1) 954 947 { … … 956 949 } 957 950 958 //The total number of operations is 3 951 //The total number of operations is 3.0 959 952 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::xor_hl(bitblock128_t arg1) 960 953 { … … 962 955 } 963 956 964 //The total number of operations is 3 957 //The total number of operations is 3.0 965 958 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::xor_hl(bitblock128_t arg1) 966 959 { … … 968 961 } 969 962 970 //The total number of operations is 3 963 //The total number of operations is 3.0 971 964 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::xor_hl(bitblock128_t arg1) 972 965 { … … 974 967 } 975 968 976 //The total number of operations is 7969 //The total number of operations is 5.16666666667 977 970 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::xor_hl(bitblock128_t arg1) 978 971 { … … 986 979 } 987 980 988 //The total number of operations is 3 981 //The total number of operations is 3.0 989 982 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::popcount(bitblock128_t arg1) 990 983 { … … 992 985 } 993 986 994 //The total number of operations is 7 987 //The total number of operations is 7.0 995 988 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::popcount(bitblock128_t arg1) 996 989 { … … 998 991 } 999 992 1000 //The total number of operations is 1 993 //The total number of operations is 1.0 1001 994 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::popcount(bitblock128_t arg1) 1002 995 { … … 1004 997 } 1005 998 1006 //The total number of operations is 4 999 //The total number of operations is 4.0 1007 1000 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::popcount(bitblock128_t arg1) 1008 1001 { … … 1010 1003 } 1011 1004 1012 //The total number of operations is 7 1005 //The total number of operations is 7.0 1013 1006 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::popcount(bitblock128_t arg1) 1014 1007 { … … 1016 1009 } 1017 1010 1018 //The total number of operations is 10 1011 //The total number of operations is 10.0 1019 1012 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::popcount(bitblock128_t arg1) 1020 1013 { … … 1022 1015 } 1023 1016 1024 //The total number of operations is 1 71017 //The total number of operations is 15.1666666667 1025 1018 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::popcount(bitblock128_t arg1) 1026 1019 { … … 1029 1022 } 1030 1023 1031 //The total number of operations is 71024 //The total number of operations is 4.33333333333 1032 1025 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::neg(bitblock128_t arg1) 1033 1026 { … … 1035 1028 } 1036 1029 1037 //The total number of operations is 4 1030 //The total number of operations is 4.0 1038 1031 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::neg(bitblock128_t arg1) 1039 1032 { … … 1041 1034 } 1042 1035 1043 //The total number of operations is 1 1036 //The total number of operations is 1.0 1044 1037 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::neg(bitblock128_t arg1) 1045 1038 { … … 1047 1040 } 1048 1041 1049 //The total number of operations is 1 1042 //The total number of operations is 1.0 1050 1043 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::neg(bitblock128_t arg1) 1051 1044 { … … 1053 1046 } 1054 1047 1055 //The total number of operations is 1 1048 //The total number of operations is 1.0 1056 1049 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::neg(bitblock128_t arg1) 1057 1050 { … … 1059 1052 } 1060 1053 1061 //The total number of operations is 1 1054 //The total number of operations is 1.0 1062 1055 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::neg(bitblock128_t arg1) 1063 1056 { … … 1065 1058 } 1066 1059 1067 //The total number of operations is 121060 //The total number of operations is 9.33333333333 1068 1061 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::neg(bitblock128_t arg1) 1069 1062 { … … 1071 1064 } 1072 1065 1073 //The total number of operations is 21066 //The total number of operations is 1.5 1074 1067 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::slli(bitblock128_t arg1) 1075 1068 { … … 1077 1070 } 1078 1071 1079 //The total number of operations is 21072 //The total number of operations is 1.5 1080 1073 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::slli(bitblock128_t arg1) 1081 1074 { … … 1083 1076 } 1084 1077 1085 //The total number of operations is 11078 //The total number of operations is 0.5 1086 1079 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::slli(bitblock128_t arg1) 1087 1080 { … … 1089 1082 } 1090 1083 1091 //The total number of operations is 11084 //The total number of operations is 0.5 1092 1085 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::slli(bitblock128_t arg1) 1093 1086 { … … 1095 1088 } 1096 1089 1097 //The total number of operations is 11090 //The total number of operations is 0.5 1098 1091 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::slli(bitblock128_t arg1) 1099 1092 { … … 1101 1094 } 1102 1095 1103 //The total number of operations is 11096 //The total number of operations is 0.5 1104 1097 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::slli(bitblock128_t arg1) 1105 1098 { … … 1107 1100 } 1108 1101 1109 //The total number of operations is 51102 //The total number of operations is 2.33333333333 1110 1103 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::slli(bitblock128_t arg1) 1111 1104 { … … 1113 1106 } 1114 1107 1115 //The total number of operations is 1 1108 //The total number of operations is 1.0 1116 1109 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1117 1110 { … … 1119 1112 } 1120 1113 1121 //The total number of operations is 4 1114 //The total number of operations is 4.0 1122 1115 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1123 1116 { … … 1125 1118 } 1126 1119 1127 //The total number of operations is 71120 //The total number of operations is 6.0 1128 1121 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1129 1122 { … … 1131 1124 } 1132 1125 1133 //The total number of operations is 2 1126 //The total number of operations is 2.0 1134 1127 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1135 1128 { … … 1137 1130 } 1138 1131 1139 //The total number of operations is 2 1132 //The total number of operations is 2.0 1140 1133 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1141 1134 { … … 1143 1136 } 1144 1137 1145 //The total number of operations is 2 1138 //The total number of operations is 2.0 1146 1139 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1147 1140 { … … 1149 1142 } 1150 1143 1151 //The total number of operations is 4 1144 //The total number of operations is 4.0 1152 1145 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1153 1146 { … … 1155 1148 } 1156 1149 1157 //The total number of operations is 101150 //The total number of operations is 8.16666666667 1158 1151 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1159 1152 { … … 1161 1154 } 1162 1155 1163 //The total number of operations is 1 1156 //The total number of operations is 1.0 1164 1157 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::sub(bitblock128_t arg1, bitblock128_t arg2) 1165 1158 { … … 1167 1160 } 1168 1161 1169 //The total number of operations is 101162 //The total number of operations is 7.33333333333 1170 1163 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::sub(bitblock128_t arg1, bitblock128_t arg2) 1171 1164 { 1172 return simd128<1>::ifh(simd128<(4)>::himask(), simd128<(4)>::sub(arg1, simd_and(simd128<(4)>::himask(), arg2)), simd128<(4)>::sub(arg1, arg2)); 1173 } 1174 1175 //The total number of operations is 4 1165 bitblock128_t tmp = simd_xor(arg1, arg2); 1166 return simd128<1>::ifh(simd128<2>::himask(), simd_xor(tmp, simd128<128>::slli<1>(simd_and(simd_not(arg1), arg2))), tmp); 1167 } 1168 1169 //The total number of operations is 4.0 1176 1170 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::sub(bitblock128_t arg1, bitblock128_t arg2) 1177 1171 { … … 1179 1173 } 1180 1174 1181 //The total number of operations is 1 1175 //The total number of operations is 1.0 1182 1176 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::sub(bitblock128_t arg1, bitblock128_t arg2) 1183 1177 { … … 1185 1179 } 1186 1180 1187 //The total number of operations is 1 1181 //The total number of operations is 1.0 1188 1182 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::sub(bitblock128_t arg1, bitblock128_t arg2) 1189 1183 { … … 1191 1185 } 1192 1186 1193 //The total number of operations is 1 1187 //The total number of operations is 1.0 1194 1188 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::sub(bitblock128_t arg1, bitblock128_t arg2) 1195 1189 { … … 1197 1191 } 1198 1192 1199 //The total number of operations is 1 1193 //The total number of operations is 1.0 1200 1194 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::sub(bitblock128_t arg1, bitblock128_t arg2) 1201 1195 { … … 1203 1197 } 1204 1198 1205 //The total number of operations is 121199 //The total number of operations is 9.33333333333 1206 1200 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::sub(bitblock128_t arg1, bitblock128_t arg2) 1207 1201 { … … 1212 1206 } 1213 1207 1214 //The total number of operations is 3 1208 //The total number of operations is 3.0 1215 1209 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::add_hl(bitblock128_t arg1) 1216 1210 { … … 1218 1212 } 1219 1213 1220 //The total number of operations is 4 1214 //The total number of operations is 4.0 1221 1215 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::add_hl(bitblock128_t arg1) 1222 1216 { … … 1224 1218 } 1225 1219 1226 //The total number of operations is 3 1220 //The total number of operations is 3.0 1227 1221 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::add_hl(bitblock128_t arg1) 1228 1222 { … … 1230 1224 } 1231 1225 1232 //The total number of operations is 3 1226 //The total number of operations is 3.0 1233 1227 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::add_hl(bitblock128_t arg1) 1234 1228 { … … 1236 1230 } 1237 1231 1238 //The total number of operations is 3 1232 //The total number of operations is 3.0 1239 1233 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::add_hl(bitblock128_t arg1) 1240 1234 { … … 1242 1236 } 1243 1237 1244 //The total number of operations is 3 1238 //The total number of operations is 3.0 1245 1239 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::add_hl(bitblock128_t arg1) 1246 1240 { … … 1248 1242 } 1249 1243 1250 //The total number of operations is 1 81244 //The total number of operations is 13.5 1251 1245 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::add_hl(bitblock128_t arg1) 1252 1246 { … … 1302 1296 } 1303 1297 1304 //The total number of operations is 1 1298 //The total number of operations is 1.0 1305 1299 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::min(bitblock128_t arg1, bitblock128_t arg2) 1306 1300 { … … 1308 1302 } 1309 1303 1310 //The total number of operations is 13 1304 //The total number of operations is 13.0 1311 1305 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::min(bitblock128_t arg1, bitblock128_t arg2) 1312 1306 { … … 1318 1312 } 1319 1313 1320 //The total number of operations is 71314 //The total number of operations is 6.0 1321 1315 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::min(bitblock128_t arg1, bitblock128_t arg2) 1322 1316 { … … 1324 1318 } 1325 1319 1326 //The total number of operations is 1 1320 //The total number of operations is 1.0 1327 1321 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::min(bitblock128_t arg1, bitblock128_t arg2) 1328 1322 { … … 1330 1324 } 1331 1325 1332 //The total number of operations is 1 1326 //The total number of operations is 1.0 1333 1327 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::min(bitblock128_t arg1, bitblock128_t arg2) 1334 1328 { … … 1336 1330 } 1337 1331 1338 //The total number of operations is 1 1332 //The total number of operations is 1.0 1339 1333 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::min(bitblock128_t arg1, bitblock128_t arg2) 1340 1334 { … … 1342 1336 } 1343 1337 1344 //The total number of operations is 1 21338 //The total number of operations is 11.5 1345 1339 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::min(bitblock128_t arg1, bitblock128_t arg2) 1346 1340 { 1347 bitblock128_t hiAns = simd128<(32)>::min(arg1, arg2); 1348 bitblock128_t loAns = simd128<(32)>::umin(arg1, arg2); 1349 bitblock128_t eqMask1 = simd128<64>::srli<(32)>(simd128<(32)>::eq(hiAns, arg1)); 1350 bitblock128_t eqMask2 = simd128<64>::srli<(32)>(simd128<(32)>::eq(hiAns, arg2)); 1351 return simd128<1>::ifh(simd128<64>::himask(), hiAns, simd128<1>::ifh(eqMask1, simd128<1>::ifh(eqMask2, loAns, arg1), arg2)); 1352 } 1353 1354 //The total number of operations is 46 1341 return simd128<1>::ifh(simd128<64>::gt(arg1, arg2), arg2, arg1); 1342 } 1343 1344 //The total number of operations is 40.6666666667 1355 1345 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::min(bitblock128_t arg1, bitblock128_t arg2) 1356 1346 { 1357 bitblock128_t hiAns = simd128<(64)>::min(arg1, arg2); 1358 bitblock128_t loAns = simd128<(64)>::umin(arg1, arg2); 1359 bitblock128_t eqMask1 = simd128<128>::srli<(64)>(simd128<(64)>::eq(hiAns, arg1)); 1360 bitblock128_t eqMask2 = simd128<128>::srli<(64)>(simd128<(64)>::eq(hiAns, arg2)); 1361 return simd128<1>::ifh(simd128<128>::himask(), hiAns, simd128<1>::ifh(eqMask1, simd128<1>::ifh(eqMask2, loAns, arg1), arg2)); 1347 return simd128<1>::ifh(simd128<128>::gt(arg1, arg2), arg2, arg1); 1362 1348 } 1363 1349 … … 1404 1390 } 1405 1391 1406 //The total number of operations is 1 1392 //The total number of operations is 1.0 1407 1393 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::umin(bitblock128_t arg1, bitblock128_t arg2) 1408 1394 { … … 1410 1396 } 1411 1397 1412 //The total number of operations is 12 1398 //The total number of operations is 12.0 1413 1399 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::umin(bitblock128_t arg1, bitblock128_t arg2) 1414 1400 { … … 1419 1405 } 1420 1406 1421 //The total number of operations is 101407 //The total number of operations is 9.0 1422 1408 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::umin(bitblock128_t arg1, bitblock128_t arg2) 1423 1409 { … … 1426 1412 } 1427 1413 1428 //The total number of operations is 4 1414 //The total number of operations is 4.0 1429 1415 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::umin(bitblock128_t arg1, bitblock128_t arg2) 1430 1416 { … … 1433 1419 } 1434 1420 1435 //The total number of operations is 4 1421 //The total number of operations is 4.0 1436 1422 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::umin(bitblock128_t arg1, bitblock128_t arg2) 1437 1423 { … … 1440 1426 } 1441 1427 1442 //The total number of operations is 4 1428 //The total number of operations is 4.0 1443 1429 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::umin(bitblock128_t arg1, bitblock128_t arg2) 1444 1430 { … … 1447 1433 } 1448 1434 1449 //The total number of operations is 11 1435 //The total number of operations is 11.0 1450 1436 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::umin(bitblock128_t arg1, bitblock128_t arg2) 1451 1437 { … … 1456 1442 } 1457 1443 1458 //The total number of operations is 341444 //The total number of operations is 29.3333333333 1459 1445 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::umin(bitblock128_t arg1, bitblock128_t arg2) 1460 1446 { … … 1465 1451 } 1466 1452 1467 //The total number of operations is 81453 //The total number of operations is 5.33333333333 1468 1454 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::abs(bitblock128_t arg1) 1469 1455 { … … 1471 1457 } 1472 1458 1473 //The total number of operations is 1 11459 //The total number of operations is 10.0 1474 1460 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::abs(bitblock128_t arg1) 1475 1461 { … … 1478 1464 } 1479 1465 1480 //The total number of operations is 1 1466 //The total number of operations is 1.0 1481 1467 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::abs(bitblock128_t arg1) 1482 1468 { … … 1484 1470 } 1485 1471 1486 //The total number of operations is 1 1472 //The total number of operations is 1.0 1487 1473 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::abs(bitblock128_t arg1) 1488 1474 { … … 1490 1476 } 1491 1477 1492 //The total number of operations is 1 1478 //The total number of operations is 1.0 1493 1479 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::abs(bitblock128_t arg1) 1494 1480 { … … 1496 1482 } 1497 1483 1498 //The total number of operations is 91484 //The total number of operations is 8.5 1499 1485 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::abs(bitblock128_t arg1) 1500 1486 { … … 1503 1489 } 1504 1490 1505 //The total number of operations is 401491 //The total number of operations is 31.8333333333 1506 1492 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::abs(bitblock128_t arg1) 1507 1493 { … … 1510 1496 } 1511 1497 1512 //The total number of operations is 2 1498 //The total number of operations is 2.0 1513 1499 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::eq(bitblock128_t arg1, bitblock128_t arg2) 1514 1500 { … … 1516 1502 } 1517 1503 1518 //The total number of operations is 81504 //The total number of operations is 7.5 1519 1505 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::eq(bitblock128_t arg1, bitblock128_t arg2) 1520 1506 { … … 1525 1511 } 1526 1512 1527 //The total number of operations is 9 1513 //The total number of operations is 9.0 1528 1514 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::eq(bitblock128_t arg1, bitblock128_t arg2) 1529 1515 { … … 1531 1517 } 1532 1518 1533 //The total number of operations is 1 1519 //The total number of operations is 1.0 1534 1520 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::eq(bitblock128_t arg1, bitblock128_t arg2) 1535 1521 { … … 1537 1523 } 1538 1524 1539 //The total number of operations is 1 1525 //The total number of operations is 1.0 1540 1526 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::eq(bitblock128_t arg1, bitblock128_t arg2) 1541 1527 { … … 1543 1529 } 1544 1530 1545 //The total number of operations is 1 1531 //The total number of operations is 1.0 1546 1532 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::eq(bitblock128_t arg1, bitblock128_t arg2) 1547 1533 { … … 1549 1535 } 1550 1536 1551 //The total number of operations is 51537 //The total number of operations is 4.5 1552 1538 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::eq(bitblock128_t arg1, bitblock128_t arg2) 1553 1539 { … … 1558 1544 } 1559 1545 1560 //The total number of operations is 1 71546 //The total number of operations is 12.0 1561 1547 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::eq(bitblock128_t arg1, bitblock128_t arg2) 1562 1548 { … … 1567 1553 } 1568 1554 1569 //The total number of operations is 4 1555 //The total number of operations is 4.0 1570 1556 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::srai(bitblock128_t arg1) 1571 1557 { … … 1573 1559 } 1574 1560 1575 //The total number of operations is 8 1561 //The total number of operations is 8.0 1576 1562 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::srai(bitblock128_t arg1) 1577 1563 { … … 1580 1566 } 1581 1567 1582 //The total number of operations is 1 1568 //The total number of operations is 1.0 1583 1569 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::srai(bitblock128_t arg1) 1584 1570 { … … 1586 1572 } 1587 1573 1588 //The total number of operations is 1 1574 //The total number of operations is 1.0 1589 1575 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::srai(bitblock128_t arg1) 1590 1576 { … … 1592 1578 } 1593 1579 1594 //The total number of operations is 1 1580 //The total number of operations is 1.0 1595 1581 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::srai(bitblock128_t arg1) 1596 1582 { … … 1598 1584 } 1599 1585 1600 //The total number of operations is 1 1586 //The total number of operations is 1.0 1601 1587 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::srai(bitblock128_t arg1) 1602 1588 { … … 1604 1590 } 1605 1591 1606 //The total number of operations is 91592 //The total number of operations is 6.66666666667 1607 1593 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::srai(bitblock128_t arg1) 1608 1594 { … … 1652 1638 } 1653 1639 1654 //The total number of operations is 1 1640 //The total number of operations is 1.0 1655 1641 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::add(bitblock128_t arg1, bitblock128_t arg2) 1656 1642 { … … 1658 1644 } 1659 1645 1660 //The total number of operations is 91646 //The total number of operations is 6.33333333333 1661 1647 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::add(bitblock128_t arg1, bitblock128_t arg2) 1662 1648 { … … 1665 1651 } 1666 1652 1667 //The total number of operations is 4 1653 //The total number of operations is 4.0 1668 1654 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::add(bitblock128_t arg1, bitblock128_t arg2) 1669 1655 { … … 1671 1657 } 1672 1658 1673 //The total number of operations is 1 1659 //The total number of operations is 1.0 1674 1660 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::add(bitblock128_t arg1, bitblock128_t arg2) 1675 1661 { … … 1677 1663 } 1678 1664 1679 //The total number of operations is 1 1665 //The total number of operations is 1.0 1680 1666 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::add(bitblock128_t arg1, bitblock128_t arg2) 1681 1667 { … … 1683 1669 } 1684 1670 1685 //The total number of operations is 1 1671 //The total number of operations is 1.0 1686 1672 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::add(bitblock128_t arg1, bitblock128_t arg2) 1687 1673 { … … 1689 1675 } 1690 1676 1691 //The total number of operations is 1 1677 //The total number of operations is 1.0 1692 1678 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::add(bitblock128_t arg1, bitblock128_t arg2) 1693 1679 { … … 1695 1681 } 1696 1682 1697 //The total number of operations is 121683 //The total number of operations is 9.33333333333 1698 1684 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::add(bitblock128_t arg1, bitblock128_t arg2) 1699 1685 { … … 1704 1690 } 1705 1691 1706 //The total number of operations is 1 1692 //The total number of operations is 1.0 1707 1693 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::umax(bitblock128_t arg1, bitblock128_t arg2) 1708 1694 { … … 1710 1696 } 1711 1697 1712 //The total number of operations is 12 1698 //The total number of operations is 12.0 1713 1699 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::umax(bitblock128_t arg1, bitblock128_t arg2) 1714 1700 { … … 1719 1705 } 1720 1706 1721 //The total number of operations is 101707 //The total number of operations is 9.0 1722 1708 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::umax(bitblock128_t arg1, bitblock128_t arg2) 1723 1709 { … … 1726 1712 } 1727 1713 1728 //The total number of operations is 4 1714 //The total number of operations is 4.0 1729 1715 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::umax(bitblock128_t arg1, bitblock128_t arg2) 1730 1716 { … … 1733 1719 } 1734 1720 1735 //The total number of operations is 4 1721 //The total number of operations is 4.0 1736 1722 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::umax(bitblock128_t arg1, bitblock128_t arg2) 1737 1723 { … … 1740 1726 } 1741 1727 1742 //The total number of operations is 4 1728 //The total number of operations is 4.0 1743 1729 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::umax(bitblock128_t arg1, bitblock128_t arg2) 1744 1730 { … … 1747 1733 } 1748 1734 1749 //The total number of operations is 11 1735 //The total number of operations is 11.0 1750 1736 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::umax(bitblock128_t arg1, bitblock128_t arg2) 1751 1737 { … … 1756 1742 } 1757 1743 1758 //The total number of operations is 341744 //The total number of operations is 29.3333333333 1759 1745 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::umax(bitblock128_t arg1, bitblock128_t arg2) 1760 1746 { … … 1765 1751 } 1766 1752 1767 //The total number of operations is 771753 //The total number of operations is 55.0 1768 1754 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::umin_hl(bitblock128_t arg1, bitblock128_t arg2) 1769 1755 { … … 1771 1757 } 1772 1758 1773 //The total number of operations is 641759 //The total number of operations is 49.3333333333 1774 1760 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::umin_hl(bitblock128_t arg1, bitblock128_t arg2) 1775 1761 { … … 1777 1763 } 1778 1764 1779 //The total number of operations is 381765 //The total number of operations is 29.6666666667 1780 1766 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::umin_hl(bitblock128_t arg1, bitblock128_t arg2) 1781 1767 { … … 1783 1769 } 1784 1770 1785 //The total number of operations is 6 1771 //The total number of operations is 6.0 1786 1772 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::umin_hl(bitblock128_t arg1, bitblock128_t arg2) 1787 1773 { … … 1789 1775 } 1790 1776 1791 //The total number of operations is 6 1777 //The total number of operations is 6.0 1792 1778 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::umin_hl(bitblock128_t arg1, bitblock128_t arg2) 1793 1779 { … … 1795 1781 } 1796 1782 1797 //The total number of operations is 6 1783 //The total number of operations is 6.0 1798 1784 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::umin_hl(bitblock128_t arg1, bitblock128_t arg2) 1799 1785 { … … 1801 1787 } 1802 1788 1803 //The total number of operations is 231789 //The total number of operations is 18.5 1804 1790 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::umin_hl(bitblock128_t arg1, bitblock128_t arg2) 1805 1791 { … … 1807 1793 } 1808 1794 1809 //The total number of operations is 771795 //The total number of operations is 55.0 1810 1796 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::add_hl(bitblock128_t arg1, bitblock128_t arg2) 1811 1797 { … … 1813 1799 } 1814 1800 1815 //The total number of operations is 611801 //The total number of operations is 43.6666666667 1816 1802 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::add_hl(bitblock128_t arg1, bitblock128_t arg2) 1817 1803 { … … 1819 1805 } 1820 1806 1821 //The total number of operations is 321807 //The total number of operations is 24.6666666667 1822 1808 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::add_hl(bitblock128_t arg1, bitblock128_t arg2) 1823 1809 { … … 1825 1811 } 1826 1812 1827 //The total number of operations is 3 1813 //The total number of operations is 3.0 1828 1814 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::add_hl(bitblock128_t arg1, bitblock128_t arg2) 1829 1815 { … … 1831 1817 } 1832 1818 1833 //The total number of operations is 3 1819 //The total number of operations is 3.0 1834 1820 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::add_hl(bitblock128_t arg1, bitblock128_t arg2) 1835 1821 { … … 1837 1823 } 1838 1824 1839 //The total number of operations is 3 1825 //The total number of operations is 3.0 1840 1826 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::add_hl(bitblock128_t arg1, bitblock128_t arg2) 1841 1827 { … … 1843 1829 } 1844 1830 1845 //The total number of operations is 131831 //The total number of operations is 8.5 1846 1832 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::add_hl(bitblock128_t arg1, bitblock128_t arg2) 1847 1833 { … … 1849 1835 } 1850 1836 1851 //The total number of operations is 1041837 //The total number of operations is 87.0 1852 1838 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packss(bitblock128_t arg1, bitblock128_t arg2) 1853 1839 { … … 1857 1843 } 1858 1844 1859 //The total number of operations is 561845 //The total number of operations is 44.6666666667 1860 1846 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packss(bitblock128_t arg1, bitblock128_t arg2) 1861 1847 { … … 1865 1851 } 1866 1852 1867 //The total number of operations is 231853 //The total number of operations is 19.3333333333 1868 1854 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packss(bitblock128_t arg1, bitblock128_t arg2) 1869 1855 { … … 1873 1859 } 1874 1860 1875 //The total number of operations is 11 1861 //The total number of operations is 11.0 1876 1862 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packss(bitblock128_t arg1, bitblock128_t arg2) 1877 1863 { … … 1881 1867 } 1882 1868 1883 //The total number of operations is 11 1869 //The total number of operations is 11.0 1884 1870 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packss(bitblock128_t arg1, bitblock128_t arg2) 1885 1871 { … … 1889 1875 } 1890 1876 1891 //The total number of operations is 511877 //The total number of operations is 49.0 1892 1878 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packss(bitblock128_t arg1, bitblock128_t arg2) 1893 1879 { … … 1897 1883 } 1898 1884 1899 //The total number of operations is 2081885 //The total number of operations is 170.166666667 1900 1886 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packss(bitblock128_t arg1, bitblock128_t arg2) 1901 1887 { … … 1905 1891 } 1906 1892 1907 //The total number of operations is 4 61893 //The total number of operations is 45.0 1908 1894 template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<4>::signmask(bitblock128_t arg1) 1909 1895 { … … 1913 1899 } 1914 1900 1915 //The total number of operations is 18 1901 //The total number of operations is 18.0 1916 1902 template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<8>::signmask(bitblock128_t arg1) 1917 1903 { … … 1921 1907 } 1922 1908 1923 //The total number of operations is 8 1909 //The total number of operations is 8.0 1924 1910 template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<16>::signmask(bitblock128_t arg1) 1925 1911 { … … 1927 1913 } 1928 1914 1929 //The total number of operations is 4 1915 //The total number of operations is 4.0 1930 1916 template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<32>::signmask(bitblock128_t arg1) 1931 1917 { … … 1933 1919 } 1934 1920 1935 //The total number of operations is 2 1921 //The total number of operations is 2.0 1936 1922 template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<64>::signmask(bitblock128_t arg1) 1937 1923 { … … 1939 1925 } 1940 1926 1941 //The total number of operations is 81927 //The total number of operations is 6.16666666667 1942 1928 template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<128>::signmask(bitblock128_t arg1) 1943 1929 { … … 1945 1931 } 1946 1932 1947 //The total number of operations is 371933 //The total number of operations is 26.0 1948 1934 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packl(bitblock128_t arg1, bitblock128_t arg2) 1949 1935 { … … 1951 1937 } 1952 1938 1953 //The total number of operations is 251939 //The total number of operations is 17.6666666667 1954 1940 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packl(bitblock128_t arg1, bitblock128_t arg2) 1955 1941 { … … 1957 1943 } 1958 1944 1959 //The total number of operations is 131945 //The total number of operations is 9.33333333333 1960 1946 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packl(bitblock128_t arg1, bitblock128_t arg2) 1961 1947 { … … 1963 1949 } 1964 1950 1965 //The total number of operations is 1 1951 //The total number of operations is 1.0 1966 1952 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packl(bitblock128_t arg1, bitblock128_t arg2) 1967 1953 { … … 1969 1955 } 1970 1956 1971 //The total number of operations is 1 1957 //The total number of operations is 1.0 1972 1958 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packl(bitblock128_t arg1, bitblock128_t arg2) 1973 1959 { … … 1975 1961 } 1976 1962 1977 //The total number of operations is 1 1963 //The total number of operations is 1.0 1978 1964 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packl(bitblock128_t arg1, bitblock128_t arg2) 1979 1965 { … … 1981 1967 } 1982 1968 1983 //The total number of operations is 61969 //The total number of operations is 3.33333333333 1984 1970 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packl(bitblock128_t arg1, bitblock128_t arg2) 1985 1971 { … … 1987 1973 } 1988 1974 1989 //The total number of operations is 391975 //The total number of operations is 28.0 1990 1976 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packh(bitblock128_t arg1, bitblock128_t arg2) 1991 1977 { … … 1993 1979 } 1994 1980 1995 //The total number of operations is 271981 //The total number of operations is 19.6666666667 1996 1982 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packh(bitblock128_t arg1, bitblock128_t arg2) 1997 1983 { … … 1999 1985 } 2000 1986 2001 //The total number of operations is 1 51987 //The total number of operations is 11.3333333333 2002 1988 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packh(bitblock128_t arg1, bitblock128_t arg2) 2003 1989 { … … 2005 1991 } 2006 1992 2007 //The total number of operations is 1 1993 //The total number of operations is 1.0 2008 1994 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packh(bitblock128_t arg1, bitblock128_t arg2) 2009 1995 { … … 2011 1997 } 2012 1998 2013 //The total number of operations is 1 1999 //The total number of operations is 1.0 2014 2000 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packh(bitblock128_t arg1, bitblock128_t arg2) 2015 2001 { … … 2017 2003 } 2018 2004 2019 //The total number of operations is 1 2005 //The total number of operations is 1.0 2020 2006 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packh(bitblock128_t arg1, bitblock128_t arg2) 2021 2007 { … … 2023 2009 } 2024 2010 2025 //The total number of operations is 62011 //The total number of operations is 4.16666666667 2026 2012 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packh(bitblock128_t arg1, bitblock128_t arg2) 2027 2013 { … … 2029 2015 } 2030 2016 2031 //The total number of operations is 772017 //The total number of operations is 55.0 2032 2018 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::min_hl(bitblock128_t arg1, bitblock128_t arg2) 2033 2019 { … … 2035 2021 } 2036 2022 2037 //The total number of operations is 652023 //The total number of operations is 50.3333333333 2038 2024 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::min_hl(bitblock128_t arg1, bitblock128_t arg2) 2039 2025 { … … 2041 2027 } 2042 2028 2043 //The total number of operations is 352029 //The total number of operations is 26.6666666667 2044 2030 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::min_hl(bitblock128_t arg1, bitblock128_t arg2) 2045 2031 { … … 2047 2033 } 2048 2034 2049 //The total number of operations is 3 2035 //The total number of operations is 3.0 2050 2036 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::min_hl(bitblock128_t arg1, bitblock128_t arg2) 2051 2037 { … … 2053 2039 } 2054 2040 2055 //The total number of operations is 3 2041 //The total number of operations is 3.0 2056 2042 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::min_hl(bitblock128_t arg1, bitblock128_t arg2) 2057 2043 { … … 2059 2045 } 2060 2046 2061 //The total number of operations is 3 2047 //The total number of operations is 3.0 2062 2048 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::min_hl(bitblock128_t arg1, bitblock128_t arg2) 2063 2049 { … … 2065 2051 } 2066 2052 2067 //The total number of operations is 242053 //The total number of operations is 19.0 2068 2054 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::min_hl(bitblock128_t arg1, bitblock128_t arg2) 2069 2055 { … … 2071 2057 } 2072 2058 2073 //The total number of operations is 652059 //The total number of operations is 53.0 2074 2060 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packus(bitblock128_t arg1, bitblock128_t arg2) 2075 2061 { … … 2081 2067 } 2082 2068 2083 //The total number of operations is 612069 //The total number of operations is 51.6666666667 2084 2070 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packus(bitblock128_t arg1, bitblock128_t arg2) 2085 2071 { … … 2091 2077 } 2092 2078 2093 //The total number of operations is 232079 //The total number of operations is 19.3333333333 2094 2080 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packus(bitblock128_t arg1, bitblock128_t arg2) 2095 2081 { … … 2101 2087 } 2102 2088 2103 //The total number of operations is 6 2089 //The total number of operations is 6.0 2104 2090 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packus(bitblock128_t arg1, bitblock128_t arg2) 2105 2091 { … … 2108 2094 } 2109 2095 2110 //The total number of operations is 6 2096 //The total number of operations is 6.0 2111 2097 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packus(bitblock128_t arg1, bitblock128_t arg2) 2112 2098 { … … 2115 2101 } 2116 2102 2117 //The total number of operations is 6 2103 //The total number of operations is 6.0 2118 2104 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packus(bitblock128_t arg1, bitblock128_t arg2) 2119 2105 { … … 2122 2108 } 2123 2109 2124 //The total number of operations is 2 82110 //The total number of operations is 23.0 2125 2111 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packus(bitblock128_t arg1, bitblock128_t arg2) 2126 2112 { … … 2129 2115 } 2130 2116 2131 //The total number of operations is 1 72117 //The total number of operations is 15.5 2132 2118 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::mergel(bitblock128_t arg1, bitblock128_t arg2) 2133 2119 { … … 2135 2121 } 2136 2122 2137 //The total number of operations is 1 12123 //The total number of operations is 10.0 2138 2124 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::mergel(bitblock128_t arg1, bitblock128_t arg2) 2139 2125 { … … 2141 2127 } 2142 2128 2143 //The total number of operations is 52129 //The total number of operations is 4.5 2144 2130 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::mergel(bitblock128_t arg1, bitblock128_t arg2) 2145 2131 { … … 2147 2133 } 2148 2134 2149 //The total number of operations is 1 2135 //The total number of operations is 1.0 2150 2136 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::mergel(bitblock128_t arg1, bitblock128_t arg2) 2151 2137 { … … 2153 2139 } 2154 2140 2155 //The total number of operations is 1 2141 //The total number of operations is 1.0 2156 2142 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::mergel(bitblock128_t arg1, bitblock128_t arg2) 2157 2143 { … … 2159 2145 } 2160 2146 2161 //The total number of operations is 1 2147 //The total number of operations is 1.0 2162 2148 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::mergel(bitblock128_t arg1, bitblock128_t arg2) 2163 2149 { … … 2165 2151 } 2166 2152 2167 //The total number of operations is 3 2153 //The total number of operations is 3.0 2168 2154 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::mergel(bitblock128_t arg1, bitblock128_t arg2) 2169 2155 { … … 2171 2157 } 2172 2158 2173 //The total number of operations is 1 72159 //The total number of operations is 15.5 2174 2160 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::mergeh(bitblock128_t arg1, bitblock128_t arg2) 2175 2161 { … … 2177 2163 } 2178 2164 2179 //The total number of operations is 1 12165 //The total number of operations is 10.0 2180 2166 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::mergeh(bitblock128_t arg1, bitblock128_t arg2) 2181 2167 { … … 2183 2169 } 2184 2170 2185 //The total number of operations is 52171 //The total number of operations is 4.5 2186 2172 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::mergeh(bitblock128_t arg1, bitblock128_t arg2) 2187 2173 { … … 2189 2175 } 2190 2176 2191 //The total number of operations is 1 2177 //The total number of operations is 1.0 2192 2178 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::mergeh(bitblock128_t arg1, bitblock128_t arg2) 2193 2179 { … … 2195 2181 } 2196 2182 2197 //The total number of operations is 1 2183 //The total number of operations is 1.0 2198 2184 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::mergeh(bitblock128_t arg1, bitblock128_t arg2) 2199 2185 { … … 2201 2187 } 2202 2188 2203 //The total number of operations is 1 2189 //The total number of operations is 1.0 2204 2190 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::mergeh(bitblock128_t arg1, bitblock128_t arg2) 2205 2191 { … … 2207 2193 } 2208 2194 2209 //The total number of operations is 3 2195 //The total number of operations is 3.0 2210 2196 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::mergeh(bitblock128_t arg1, bitblock128_t arg2) 2211 2197 { … … 2213 2199 } 2214 2200 2215 //The total number of operations is 1 42201 //The total number of operations is 13.0 2216 2202 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::zeroextendh(bitblock128_t arg1) 2217 2203 { … … 2219 2205 } 2220 2206 2221 //The total number of operations is 82207 //The total number of operations is 7.5 2222 2208 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::zeroextendh(bitblock128_t arg1) 2223 2209 { … … 2225 2211 } 2226 2212 2227 //The total number of operations is 3 2213 //The total number of operations is 3.0 2228 2214 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::zeroextendh(bitblock128_t arg1) 2229 2215 { … … 2231 2217 } 2232 2218 2233 //The total number of operations is 3 2219 //The total number of operations is 3.0 2234 2220 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::zeroextendh(bitblock128_t arg1) 2235 2221 { … … 2237 2223 } 2238 2224 2239 //The total number of operations is 3 2225 //The total number of operations is 3.0 2240 2226 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::zeroextendh(bitblock128_t arg1) 2241 2227 { … … 2243 2229 } 2244 2230 2245 //The total number of operations is 5 2231 //The total number of operations is 5.0 2246 2232 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::zeroextendh(bitblock128_t arg1) 2247 2233 { … … 2249 2235 } 2250 2236 2251 //The total number of operations is 52237 //The total number of operations is 3.16666666667 2252 2238 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::zeroextendh(bitblock128_t arg1) 2253 2239 { … … 2255 2241 } 2256 2242 2257 //The total number of operations is 1 42243 //The total number of operations is 13.0 2258 2244 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::zeroextendl(bitblock128_t arg1) 2259 2245 { … … 2261 2247 } 2262 2248 2263 //The total number of operations is 82249 //The total number of operations is 7.5 2264 2250 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::zeroextendl(bitblock128_t arg1) 2265 2251 { … … 2267 2253 } 2268 2254 2269 //The total number of operations is 3 2255 //The total number of operations is 3.0 2270 2256 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::zeroextendl(bitblock128_t arg1) 2271 2257 { … … 2273 2259 } 2274 2260 2275 //The total number of operations is 3 2261 //The total number of operations is 3.0 2276 2262 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::zeroextendl(bitblock128_t arg1) 2277 2263 { … … 2279 2265 } 2280 2266 2281 //The total number of operations is 3 2267 //The total number of operations is 3.0 2282 2268 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::zeroextendl(bitblock128_t arg1) 2283 2269 { … … 2285 2271 } 2286 2272 2287 //The total number of operations is 5 2273 //The total number of operations is 5.0 2288 2274 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::zeroextendl(bitblock128_t arg1) 2289 2275 { … … 2291 2277 } 2292 2278 2293 //The total number of operations is 1 2279 //The total number of operations is 1.0 2294 2280 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::zeroextendl(bitblock128_t arg1) 2295 2281 { … … 2297 2283 } 2298 2284 2299 //The total number of operations is 212285 //The total number of operations is 19.5 2300 2286 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::signextendh(bitblock128_t arg1) 2301 2287 { … … 2303 2289 } 2304 2290 2305 //The total number of operations is 2 32291 //The total number of operations is 22.0 2306 2292 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::signextendh(bitblock128_t arg1) 2307 2293 { … … 2309 2295 } 2310 2296 2311 //The total number of operations is 42297 //The total number of operations is 3.5 2312 2298 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::signextendh(bitblock128_t arg1) 2313 2299 { … … 2315 2301 } 2316 2302 2317 //The total number of operations is 42303 //The total number of operations is 3.5 2318 2304 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::signextendh(bitblock128_t arg1) 2319 2305 { … … 2321 2307 } 2322 2308 2323 //The total number of operations is 42309 //The total number of operations is 3.5 2324 2310 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::signextendh(bitblock128_t arg1) 2325 2311 { … … 2327 2313 } 2328 2314 2329 //The total number of operations is 62315 //The total number of operations is 5.5 2330 2316 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::signextendh(bitblock128_t arg1) 2331 2317 { … … 2333 2319 } 2334 2320 2335 //The total number of operations is 92321 //The total number of operations is 6.66666666667 2336 2322 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::signextendh(bitblock128_t arg1) 2337 2323 { … … 2339 2325 } 2340 2326 2341 //The total number of operations is 212327 //The total number of operations is 19.5 2342 2328 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::signextendl(bitblock128_t arg1) 2343 2329 { … … 2345 2331 } 2346 2332 2347 //The total number of operations is 2 32333 //The total number of operations is 22.0 2348 2334 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::signextendl(bitblock128_t arg1) 2349 2335 { … … 2351 2337 } 2352 2338 2353 //The total number of operations is 42339 //The total number of operations is 3.5 2354 2340 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::signextendl(bitblock128_t arg1) 2355 2341 { … … 2357 2343 } 2358 2344 2359 //The total number of operations is 42345 //The total number of operations is 3.5 2360 2346 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::signextendl(bitblock128_t arg1) 2361 2347 { … … 2363 2349 } 2364 2350 2365 //The total number of operations is 42351 //The total number of operations is 3.5 2366 2352 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::signextendl(bitblock128_t arg1) 2367 2353 { … … 2369 2355 } 2370 2356 2371 //The total number of operations is 62357 //The total number of operations is 5.5 2372 2358 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::signextendl(bitblock128_t arg1) 2373 2359 { … … 2375 2361 } 2376 2362 2377 //The total number of operations is 142363 //The total number of operations is 9.0 2378 2364 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::signextendl(bitblock128_t arg1) 2379 2365 { … … 2381 2367 } 2382 2368 2383 //The total number of operations is 112369 //The total number of operations is 6.5 2384 2370 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::dsrli(bitblock128_t arg1, bitblock128_t arg2) 2385 2371 { … … 2387 2373 } 2388 2374 2389 //The total number of operations is 112375 //The total number of operations is 6.5 2390 2376 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::dsrli(bitblock128_t arg1, bitblock128_t arg2) 2391 2377 { … … 2393 2379 } 2394 2380 2395 //The total number of operations is 112381 //The total number of operations is 6.5 2396 2382 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::dsrli(bitblock128_t arg1, bitblock128_t arg2) 2397 2383 { … … 2399 2385 } 2400 2386 2401 //The total number of operations is 112387 //The total number of operations is 6.5 2402 2388 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::dsrli(bitblock128_t arg1, bitblock128_t arg2) 2403 2389 { … … 2405 2391 } 2406 2392 2407 //The total number of operations is 112393 //The total number of operations is 6.5 2408 2394 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::dsrli(bitblock128_t arg1, bitblock128_t arg2) 2409 2395 { … … 2411 2397 } 2412 2398 2413 //The total number of operations is 112399 //The total number of operations is 6.5 2414 2400 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::dsrli(bitblock128_t arg1, bitblock128_t arg2) 2415 2401 { … … 2417 2403 } 2418 2404 2419 //The total number of operations is 112405 //The total number of operations is 6.5 2420 2406 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::dsrli(bitblock128_t arg1, bitblock128_t arg2) 2421 2407 { … … 2423 2409 } 2424 2410 2425 //The total number of operations is 1 2411 //The total number of operations is 1.0 2426 2412 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill(uint64_t val1) 2427 2413 { … … 2429 2415 } 2430 2416 2431 //The total number of operations is 1 2417 //The total number of operations is 1.0 2432 2418 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill(uint64_t val1) 2433 2419 { … … 2435 2421 } 2436 2422 2437 //The total number of operations is 1 2423 //The total number of operations is 1.0 2438 2424 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill(uint64_t val1) 2439 2425 { … … 2441 2427 } 2442 2428 2443 //The total number of operations is 1 2429 //The total number of operations is 1.0 2444 2430 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill(uint64_t val1) 2445 2431 { … … 2447 2433 } 2448 2434 2449 //The total number of operations is 1 2435 //The total number of operations is 1.0 2450 2436 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::fill(uint64_t val1) 2451 2437 { … … 2453 2439 } 2454 2440 2455 //The total number of operations is 1 2441 //The total number of operations is 1.0 2456 2442 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::fill(uint64_t val1) 2457 2443 { … … 2459 2445 } 2460 2446 2461 //The total number of operations is 1 2447 //The total number of operations is 1.0 2462 2448 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::fill(uint64_t val1) 2463 2449 { … … 2465 2451 } 2466 2452 2467 //The total number of operations is 1 2453 //The total number of operations is 1.0 2468 2454 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<1>::extract(bitblock128_t arg1) 2469 2455 { … … 2471 2457 } 2472 2458 2473 //The total number of operations is 1 2459 //The total number of operations is 1.0 2474 2460 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<2>::extract(bitblock128_t arg1) 2475 2461 { … … 2477 2463 } 2478 2464 2479 //The total number of operations is 1 2465 //The total number of operations is 1.0 2480 2466 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<4>::extract(bitblock128_t arg1) 2481 2467 { … … 2483 2469 } 2484 2470 2485 //The total number of operations is 1 2471 //The total number of operations is 1.0 2486 2472 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<8>::extract(bitblock128_t arg1) 2487 2473 { … … 2489 2475 } 2490 2476 2491 //The total number of operations is 1 2477 //The total number of operations is 1.0 2492 2478 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<16>::extract(bitblock128_t arg1) 2493 2479 { … … 2495 2481 } 2496 2482 2497 //The total number of operations is 1 2483 //The total number of operations is 1.0 2498 2484 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<32>::extract(bitblock128_t arg1) 2499 2485 { … … 2501 2487 } 2502 2488 2503 //The total number of operations is 1 2489 //The total number of operations is 1.0 2504 2490 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<64>::extract(bitblock128_t arg1) 2505 2491 { … … 2507 2493 } 2508 2494 2509 //The total number of operations is 2 2495 //The total number of operations is 2.0 2510 2496 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::splat(bitblock128_t arg1) 2511 2497 { … … 2513 2499 } 2514 2500 2515 //The total number of operations is 2 2501 //The total number of operations is 2.0 2516 2502 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::splat(bitblock128_t arg1) 2517 2503 { … … 2519 2505 } 2520 2506 2521 //The total number of operations is 2 2507 //The total number of operations is 2.0 2522 2508 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::splat(bitblock128_t arg1) 2523 2509 { … … 2525 2511 } 2526 2512 2527 //The total number of operations is 2 2513 //The total number of operations is 2.0 2528 2514 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::splat(bitblock128_t arg1) 2529 2515 { … … 2531 2517 } 2532 2518 2533 //The total number of operations is 2 2519 //The total number of operations is 2.0 2534 2520 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::splat(bitblock128_t arg1) 2535 2521 { … … 2537 2523 } 2538 2524 2539 //The total number of operations is 2 2525 //The total number of operations is 2.0 2540 2526 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::splat(bitblock128_t arg1) 2541 2527 { … … 2543 2529 } 2544 2530 2545 //The total number of operations is 2 2531 //The total number of operations is 2.0 2546 2532 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::splat(bitblock128_t arg1) 2547 2533 { … … 2549 2535 } 2550 2536 2551 //The total number of operations is 5 2537 //The total number of operations is 5.0 2552 2538 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::splat(bitblock128_t arg1) 2553 2539 { … … 2555 2541 } 2556 2542 2557 //The total number of operations is 15 2543 //The total number of operations is 15.0 2558 2544 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill16(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8, uint64_t val9, uint64_t val10, uint64_t val11, uint64_t val12, uint64_t val13, uint64_t val14, uint64_t val15, uint64_t val16) 2559 2545 { … … 2561 2547 } 2562 2548 2563 //The total number of operations is 15 2549 //The total number of operations is 15.0 2564 2550 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill16(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8, uint64_t val9, uint64_t val10, uint64_t val11, uint64_t val12, uint64_t val13, uint64_t val14, uint64_t val15, uint64_t val16) 2565 2551 { … … 2567 2553 } 2568 2554 2569 //The total number of operations is 15 2555 //The total number of operations is 15.0 2570 2556 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill16(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8, uint64_t val9, uint64_t val10, uint64_t val11, uint64_t val12, uint64_t val13, uint64_t val14, uint64_t val15, uint64_t val16) 2571 2557 { … … 2573 2559 } 2574 2560 2575 //The total number of operations is 15 2561 //The total number of operations is 15.0 2576 2562 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill16(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8, uint64_t val9, uint64_t val10, uint64_t val11, uint64_t val12, uint64_t val13, uint64_t val14, uint64_t val15, uint64_t val16) 2577 2563 { … … 2579 2565 } 2580 2566 2581 //The total number of operations is 3 2567 //The total number of operations is 3.0 2582 2568 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4) 2583 2569 { … … 2585 2571 } 2586 2572 2587 //The total number of operations is 3 2573 //The total number of operations is 3.0 2588 2574 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4) 2589 2575 { … … 2591 2577 } 2592 2578 2593 //The total number of operations is 3 2579 //The total number of operations is 3.0 2594 2580 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4) 2595 2581 { … … 2597 2583 } 2598 2584 2599 //The total number of operations is 3 2585 //The total number of operations is 3.0 2600 2586 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4) 2601 2587 { … … 2603 2589 } 2604 2590 2605 //The total number of operations is 3 2591 //The total number of operations is 3.0 2606 2592 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4) 2607 2593 { … … 2609 2595 } 2610 2596 2611 //The total number of operations is 7 2597 //The total number of operations is 7.0 2612 2598 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4) 2613 2599 { … … 2615 2601 } 2616 2602 2617 //The total number of operations is 52603 //The total number of operations is 3.16666666667 2618 2604 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::srli(bitblock128_t arg1) 2619 2605 { … … 2621 2607 } 2622 2608 2623 //The total number of operations is 52609 //The total number of operations is 3.16666666667 2624 2610 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::srli(bitblock128_t arg1) 2625 2611 { … … 2627 2613 } 2628 2614 2629 //The total number of operations is 52615 //The total number of operations is 3.16666666667 2630 2616 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::srli(bitblock128_t arg1) 2631 2617 { … … 2633 2619 } 2634 2620 2635 //The total number of operations is 52621 //The total number of operations is 3.16666666667 2636 2622 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::srli(bitblock128_t arg1) 2637 2623 { … … 2639 2625 } 2640 2626 2641 //The total number of operations is 52627 //The total number of operations is 3.16666666667 2642 2628 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::srli(bitblock128_t arg1) 2643 2629 { … … 2645 2631 } 2646 2632 2647 //The total number of operations is 52633 //The total number of operations is 3.16666666667 2648 2634 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::srli(bitblock128_t arg1) 2649 2635 { … … 2651 2637 } 2652 2638 2653 //The total number of operations is 52639 //The total number of operations is 3.16666666667 2654 2640 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::srli(bitblock128_t arg1) 2655 2641 { … … 2657 2643 } 2658 2644 2659 //The total number of operations is 1 2645 //The total number of operations is 1.0 2660 2646 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill2(uint64_t val1, uint64_t val2) 2661 2647 { … … 2663 2649 } 2664 2650 2665 //The total number of operations is 1 2651 //The total number of operations is 1.0 2666 2652 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill2(uint64_t val1, uint64_t val2) 2667 2653 { … … 2669 2655 } 2670 2656 2671 //The total number of operations is 1 2657 //The total number of operations is 1.0 2672 2658 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill2(uint64_t val1, uint64_t val2) 2673 2659 { … … 2675 2661 } 2676 2662 2677 //The total number of operations is 1 2663 //The total number of operations is 1.0 2678 2664 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill2(uint64_t val1, uint64_t val2) 2679 2665 { … … 2681 2667 } 2682 2668 2683 //The total number of operations is 1 2669 //The total number of operations is 1.0 2684 2670 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::fill2(uint64_t val1, uint64_t val2) 2685 2671 { … … 2687 2673 } 2688 2674 2689 //The total number of operations is 3 2675 //The total number of operations is 3.0 2690 2676 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::fill2(uint64_t val1, uint64_t val2) 2691 2677 { … … 2693 2679 } 2694 2680 2695 //The total number of operations is 3 2681 //The total number of operations is 3.0 2696 2682 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::fill2(uint64_t val1, uint64_t val2) 2697 2683 { … … 2699 2685 } 2700 2686 2701 //The total number of operations is 112687 //The total number of operations is 6.5 2702 2688 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::dslli(bitblock128_t arg1, bitblock128_t arg2) 2703 2689 { … … 2705 2691 } 2706 2692 2707 //The total number of operations is 112693 //The total number of operations is 6.5 2708 2694 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::dslli(bitblock128_t arg1, bitblock128_t arg2) 2709 2695 { … … 2711 2697 } 2712 2698 2713 //The total number of operations is 112699 //The total number of operations is 6.5 2714 2700 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::dslli(bitblock128_t arg1, bitblock128_t arg2) 2715 2701 { … … 2717 2703 } 2718 2704 2719 //The total number of operations is 112705 //The total number of operations is 6.5 2720 2706 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::dslli(bitblock128_t arg1, bitblock128_t arg2) 2721 2707 { … … 2723 2709 } 2724 2710 2725 //The total number of operations is 112711 //The total number of operations is 6.5 2726 2712 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::dslli(bitblock128_t arg1, bitblock128_t arg2) 2727 2713 { … … 2729 2715 } 2730 2716 2731 //The total number of operations is 112717 //The total number of operations is 6.5 2732 2718 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::dslli(bitblock128_t arg1, bitblock128_t arg2) 2733 2719 { … … 2735 2721 } 2736 2722 2737 //The total number of operations is 112723 //The total number of operations is 6.5 2738 2724 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::dslli(bitblock128_t arg1, bitblock128_t arg2) 2739 2725 { … … 2741 2727 } 2742 2728 2743 //The total number of operations is 52729 //The total number of operations is 2.33333333333 2744 2730 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::slli(bitblock128_t arg1) 2745 2731 { … … 2747 2733 } 2748 2734 2749 //The total number of operations is 52735 //The total number of operations is 2.33333333333 2750 2736 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::slli(bitblock128_t arg1) 2751 2737 { … … 2753 2739 } 2754 2740 2755 //The total number of operations is 52741 //The total number of operations is 2.33333333333 2756 2742 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::slli(bitblock128_t arg1) 2757 2743 { … … 2759 2745 } 2760 2746 2761 //The total number of operations is 52747 //The total number of operations is 2.33333333333 2762 2748 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::slli(bitblock128_t arg1) 2763 2749 { … … 2765 2751 } 2766 2752 2767 //The total number of operations is 52753 //The total number of operations is 2.33333333333 2768 2754 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::slli(bitblock128_t arg1) 2769 2755 { … … 2771 2757 } 2772 2758 2773 //The total number of operations is 52759 //The total number of operations is 2.33333333333 2774 2760 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::slli(bitblock128_t arg1) 2775 2761 { … … 2777 2763 } 2778 2764 2779 //The total number of operations is 52765 //The total number of operations is 2.33333333333 2780 2766 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::slli(bitblock128_t arg1) 2781 2767 { … … 2783 2769 } 2784 2770 2785 //The total number of operations is 7 2771 //The total number of operations is 7.0 2786 2772 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill8(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8) 2787 2773 { … … 2789 2775 } 2790 2776 2791 //The total number of operations is 7 2777 //The total number of operations is 7.0 2792 2778 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill8(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8) 2793 2779 { … … 2795 2781 } 2796 2782 2797 //The total number of operations is 7 2783 //The total number of operations is 7.0 2798 2784 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill8(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8) 2799 2785 { … … 2801 2787 } 2802 2788 2803 //The total number of operations is 7 2789 //The total number of operations is 7.0 2804 2790 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill8(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8) 2805 2791 { … … 2807 2793 } 2808 2794 2809 //The total number of operations is 7 2795 //The total number of operations is 7.0 2810 2796 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::fill8(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8) 2811 2797 { … … 2813 2799 } 2814 2800 2815 //The total number of operations is 1 2801 //The total number of operations is 1.0 2816 2802 IDISA_ALWAYS_INLINE bitblock128_t bitblock128::load_unaligned(uint64_t const* arg1) 2817 2803 { … … 2819 2805 } 2820 2806 2821 //The total number of operations is 52807 //The total number of operations is 3.16666666667 2822 2808 template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t bitblock128::srli(bitblock128_t arg1) 2823 2809 { … … 2825 2811 } 2826 2812 2827 //The total number of operations is 1 2813 //The total number of operations is 1.0 2828 2814 IDISA_ALWAYS_INLINE void bitblock128::store_aligned(uint64_t* arg1, bitblock128_t arg2) 2829 2815 { … … 2831 2817 } 2832 2818 2833 //The total number of operations is 1 82819 //The total number of operations is 16.1666666667 2834 2820 IDISA_ALWAYS_INLINE uint64_t bitblock128::popcount(bitblock128_t arg1) 2835 2821 { … … 2837 2823 } 2838 2824 2839 //The total number of operations is 5 2825 //The total number of operations is 5.0 2840 2826 IDISA_ALWAYS_INLINE bool bitblock128::all(bitblock128_t arg1) 2841 2827 { … … 2843 2829 } 2844 2830 2845 //The total number of operations is 52831 //The total number of operations is 2.33333333333 2846 2832 template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t bitblock128::slli(bitblock128_t arg1) 2847 2833 { … … 2849 2835 } 2850 2836 2851 //The total number of operations is 5 2837 //The total number of operations is 5.0 2852 2838 IDISA_ALWAYS_INLINE bool bitblock128::any(bitblock128_t arg1) 2853 2839 { … … 2855 2841 } 2856 2842 2857 //The total number of operations is 1 2843 //The total number of operations is 1.0 2858 2844 IDISA_ALWAYS_INLINE bitblock128_t bitblock128::load_aligned(uint64_t const* arg1) 2859 2845 { … … 2861 2847 } 2862 2848 2863 //The total number of operations is 1 2849 //The total number of operations is 1.0 2864 2850 IDISA_ALWAYS_INLINE void bitblock128::store_unaligned(uint64_t* arg1, bitblock128_t arg2) 2865 2851 {
Note: See TracChangeset
for help on using the changeset viewer.