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

 1 edited
Legend:
 Unmodified
 Added
 Removed

trunk/lib/idisa_cpp/idisa_ssse3.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_SSSE3_CPP 2 9 #define IDISA_SSSE3_CPP … … 499 506 #define shufflemask8_to_shufflemask4(msk) \ 500 507 ((msk&3)  (((msk>>3)&3)<<2)  (((msk>>6)&3)<<4)  (((msk>>9)&3)<<6)  (((msk>>12)&3)<<8)  (((msk>>15)&3)<<10)  (((msk>>18)&3)<<12)  (((msk>>21)&3)<<14)) 501 //The total number of operations is 2 508 //The total number of operations is 2.0 502 509 IDISA_ALWAYS_INLINE bitblock128_t simd_nor(bitblock128_t arg1, bitblock128_t arg2) 503 510 { … … 505 512 } 506 513 507 //The total number of operations is 1 514 //The total number of operations is 1.0 508 515 IDISA_ALWAYS_INLINE bitblock128_t simd_not(bitblock128_t arg1) 509 516 { … … 511 518 } 512 519 513 //The total number of operations is 1 520 //The total number of operations is 1.0 514 521 IDISA_ALWAYS_INLINE bitblock128_t simd_andc(bitblock128_t arg1, bitblock128_t arg2) 515 522 { … … 517 524 } 518 525 519 //The total number of operations is 1 526 //The total number of operations is 1.0 520 527 IDISA_ALWAYS_INLINE bitblock128_t simd_or(bitblock128_t arg1, bitblock128_t arg2) 521 528 { … … 523 530 } 524 531 525 //The total number of operations is 1 532 //The total number of operations is 1.0 526 533 IDISA_ALWAYS_INLINE bitblock128_t simd_and(bitblock128_t arg1, bitblock128_t arg2) 527 534 { … … 529 536 } 530 537 531 //The total number of operations is 1 538 //The total number of operations is 1.0 532 539 IDISA_ALWAYS_INLINE bitblock128_t simd_xor(bitblock128_t arg1, bitblock128_t arg2) 533 540 { … … 535 542 } 536 543 537 //The total number of operations is 1 544 //The total number of operations is 1.0 538 545 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::max(bitblock128_t arg1, bitblock128_t arg2) 539 546 { … … 541 548 } 542 549 543 //The total number of operations is 1 8550 //The total number of operations is 15.6666666667 544 551 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::max(bitblock128_t arg1, bitblock128_t arg2) 545 552 { 546 return simd128<1>::ifh(simd128<2>:: lt(arg1, arg2), arg2, arg1);547 } 548 549 //The total number of operations is 9 553 return simd128<1>::ifh(simd128<2>::himask(), simd_and(arg1, arg2), simd_or(simd_and(arg2, simd128<128>::srli<1>(simd_or(arg1, simd_not(arg2)))), simd_and(arg1, simd128<128>::srli<1>(simd_or(simd_not(arg1), arg2))))); 554 } 555 556 //The total number of operations is 9.0 550 557 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::max(bitblock128_t arg1, bitblock128_t arg2) 551 558 { … … 554 561 } 555 562 556 //The total number of operations is 4 563 //The total number of operations is 4.0 557 564 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::max(bitblock128_t arg1, bitblock128_t arg2) 558 565 { … … 560 567 } 561 568 562 //The total number of operations is 1 569 //The total number of operations is 1.0 563 570 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::max(bitblock128_t arg1, bitblock128_t arg2) 564 571 { … … 566 573 } 567 574 568 //The total number of operations is 4 575 //The total number of operations is 4.0 569 576 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::max(bitblock128_t arg1, bitblock128_t arg2) 570 577 { … … 572 579 } 573 580 574 //The total number of operations is 1 8581 //The total number of operations is 17.5 575 582 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::max(bitblock128_t arg1, bitblock128_t arg2) 576 583 { … … 578 585 } 579 586 580 //The total number of operations is 64587 //The total number of operations is 54.75 581 588 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::max(bitblock128_t arg1, bitblock128_t arg2) 582 589 { … … 584 591 } 585 592 586 //The total number of operations is 1 593 //The total number of operations is 1.0 587 594 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::mult(bitblock128_t arg1, bitblock128_t arg2) 588 595 { … … 590 597 } 591 598 592 //The total number of operations is 23599 //The total number of operations is 19.6666666667 593 600 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::mult(bitblock128_t arg1, bitblock128_t arg2) 594 601 { … … 598 605 } 599 606 600 //The total number of operations is 31 607 //The total number of operations is 31.0 601 608 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::mult(bitblock128_t arg1, bitblock128_t arg2) 602 609 { … … 607 614 } 608 615 609 //The total number of operations is 10 616 //The total number of operations is 10.0 610 617 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::mult(bitblock128_t arg1, bitblock128_t arg2) 611 618 { … … 616 623 } 617 624 618 //The total number of operations is 1 625 //The total number of operations is 1.0 619 626 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::mult(bitblock128_t arg1, bitblock128_t arg2) 620 627 { … … 622 629 } 623 630 624 //The total number of operations is 30 631 //The total number of operations is 30.0 625 632 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::mult(bitblock128_t arg1, bitblock128_t arg2) 626 633 { … … 631 638 } 632 639 633 //The total number of operations is 11 640 //The total number of operations is 11.0 634 641 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::mult(bitblock128_t arg1, bitblock128_t arg2) 635 642 { … … 645 652 } 646 653 647 //The total number of operations is 205654 //The total number of operations is 165.0 648 655 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::mult(bitblock128_t arg1, bitblock128_t arg2) 649 656 { … … 659 666 } 660 667 661 //The total number of operations is 1 668 //The total number of operations is 1.0 662 669 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::gt(bitblock128_t arg1, bitblock128_t arg2) 663 670 { … … 665 672 } 666 673 667 //The total number of operations is 1 5674 //The total number of operations is 14.6666666667 668 675 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::gt(bitblock128_t arg1, bitblock128_t arg2) 669 676 { 670 bitblock128_t hiAns = simd128<(1)>::gt(arg1, arg2); 671 bitblock128_t loAns = simd128<(1)>::ugt(arg1, arg2); 672 bitblock128_t mask = simd_and(loAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2))); 673 mask = simd_or(mask, simd128<2>::slli<(1)>(mask)); 674 return simd_or(simd128<2>::srai<(1)>(hiAns), mask); 675 } 676 677 //The total number of operations is 10 677 bitblock128_t tmp = simd_not(arg1); 678 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))); 679 return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns)); 680 } 681 682 //The total number of operations is 10.0 678 683 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::gt(bitblock128_t arg1, bitblock128_t arg2) 679 684 { … … 681 686 } 682 687 683 //The total number of operations is 1 688 //The total number of operations is 1.0 684 689 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::gt(bitblock128_t arg1, bitblock128_t arg2) 685 690 { … … 687 692 } 688 693 689 //The total number of operations is 1 694 //The total number of operations is 1.0 690 695 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::gt(bitblock128_t arg1, bitblock128_t arg2) 691 696 { … … 693 698 } 694 699 695 //The total number of operations is 1 700 //The total number of operations is 1.0 696 701 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::gt(bitblock128_t arg1, bitblock128_t arg2) 697 702 { … … 699 704 } 700 705 701 //The total number of operations is 1 5706 //The total number of operations is 14.5 702 707 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::gt(bitblock128_t arg1, bitblock128_t arg2) 703 708 { … … 709 714 } 710 715 711 //The total number of operations is 61716 //The total number of operations is 51.75 712 717 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::gt(bitblock128_t arg1, bitblock128_t arg2) 713 718 { … … 719 724 } 720 725 721 //The total number of operations is 289 726 //The total number of operations is 289.0 722 727 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::umult(bitblock128_t arg1, bitblock128_t arg2) 723 728 { … … 728 733 } 729 734 730 //The total number of operations is 139 735 //The total number of operations is 139.0 731 736 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::umult(bitblock128_t arg1, bitblock128_t arg2) 732 737 { … … 737 742 } 738 743 739 //The total number of operations is 64 744 //The total number of operations is 64.0 740 745 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::umult(bitblock128_t arg1, bitblock128_t arg2) 741 746 { … … 746 751 } 747 752 748 //The total number of operations is 28 753 //The total number of operations is 28.0 749 754 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::umult(bitblock128_t arg1, bitblock128_t arg2) 750 755 { … … 755 760 } 756 761 757 //The total number of operations is 10 762 //The total number of operations is 10.0 758 763 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::umult(bitblock128_t arg1, bitblock128_t arg2) 759 764 { … … 764 769 } 765 770 766 //The total number of operations is 1 771 //The total number of operations is 1.0 767 772 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::umult(bitblock128_t arg1, bitblock128_t arg2) 768 773 { … … 770 775 } 771 776 772 //The total number of operations is 55777 //The total number of operations is 45.0 773 778 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::umult(bitblock128_t arg1, bitblock128_t arg2) 774 779 { … … 788 793 } 789 794 790 //The total number of operations is 1 795 //The total number of operations is 1.0 791 796 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ult(bitblock128_t arg1, bitblock128_t arg2) 792 797 { … … 794 799 } 795 800 796 //The total number of operations is 1 4801 //The total number of operations is 13.6666666667 797 802 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ult(bitblock128_t arg1, bitblock128_t arg2) 798 803 { 799 bitblock128_t tmpAns = simd128<(1)>::ult(arg1, arg2); 800 bitblock128_t mask = simd_and(tmpAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2))); 801 mask = simd_or(mask, simd128<2>::slli<(1)>(mask)); 802 return simd_or(simd128<2>::srai<(1)>(tmpAns), mask); 803 } 804 805 //The total number of operations is 20 804 bitblock128_t tmp = simd_not(arg1); 805 bitblock128_t tmpAns = simd_or(simd_and(tmp, arg2), simd_and(simd128<128>::slli<1>(simd_and(tmp, arg2)), simd_or(tmp, arg2))); 806 return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns)); 807 } 808 809 //The total number of operations is 20.0 806 810 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ult(bitblock128_t arg1, bitblock128_t arg2) 807 811 { … … 809 813 } 810 814 811 //The total number of operations is 7 815 //The total number of operations is 7.0 812 816 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ult(bitblock128_t arg1, bitblock128_t arg2) 813 817 { … … 816 820 } 817 821 818 //The total number of operations is 7 822 //The total number of operations is 7.0 819 823 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ult(bitblock128_t arg1, bitblock128_t arg2) 820 824 { … … 823 827 } 824 828 825 //The total number of operations is 7 829 //The total number of operations is 7.0 826 830 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ult(bitblock128_t arg1, bitblock128_t arg2) 827 831 { … … 830 834 } 831 835 832 //The total number of operations is 1 8836 //The total number of operations is 17.5 833 837 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ult(bitblock128_t arg1, bitblock128_t arg2) 834 838 { … … 839 843 } 840 844 841 //The total number of operations is 50845 //The total number of operations is 40.0833333333 842 846 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ult(bitblock128_t arg1, bitblock128_t arg2) 843 847 { … … 845 849 } 846 850 847 //The total number of operations is 1 851 //The total number of operations is 1.0 848 852 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::lt(bitblock128_t arg1, bitblock128_t arg2) 849 853 { … … 851 855 } 852 856 853 //The total number of operations is 1 5857 //The total number of operations is 14.6666666667 854 858 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::lt(bitblock128_t arg1, bitblock128_t arg2) 855 859 { 856 bitblock128_t hiAns = simd128<(1)>::lt(arg1, arg2); 857 bitblock128_t loAns = simd128<(1)>::ult(arg1, arg2); 858 bitblock128_t mask = simd_and(loAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2))); 859 mask = simd_or(mask, simd128<2>::slli<(1)>(mask)); 860 return simd_or(simd128<2>::srai<(1)>(hiAns), mask); 861 } 862 863 //The total number of operations is 18 860 bitblock128_t tmp = simd_not(arg2); 861 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))); 862 return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns)); 863 } 864 865 //The total number of operations is 18.0 864 866 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::lt(bitblock128_t arg1, bitblock128_t arg2) 865 867 { … … 867 869 } 868 870 869 //The total number of operations is 5 871 //The total number of operations is 5.0 870 872 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::lt(bitblock128_t arg1, bitblock128_t arg2) 871 873 { … … 873 875 } 874 876 875 //The total number of operations is 5 877 //The total number of operations is 5.0 876 878 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::lt(bitblock128_t arg1, bitblock128_t arg2) 877 879 { … … 879 881 } 880 882 881 //The total number of operations is 5 883 //The total number of operations is 5.0 882 884 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::lt(bitblock128_t arg1, bitblock128_t arg2) 883 885 { … … 885 887 } 886 888 887 //The total number of operations is 20889 //The total number of operations is 19.5 888 890 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::lt(bitblock128_t arg1, bitblock128_t arg2) 889 891 { … … 892 894 } 893 895 894 //The total number of operations is 70896 //The total number of operations is 60.75 895 897 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::lt(bitblock128_t arg1, bitblock128_t arg2) 896 898 { … … 902 904 } 903 905 904 //The total number of operations is 2 906 //The total number of operations is 2.0 905 907 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::srli(bitblock128_t arg1) 906 908 { … … 908 910 } 909 911 910 //The total number of operations is 2 912 //The total number of operations is 2.0 911 913 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::srli(bitblock128_t arg1) 912 914 { … … 914 916 } 915 917 916 //The total number of operations is 2 918 //The total number of operations is 2.0 917 919 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::srli(bitblock128_t arg1) 918 920 { … … 920 922 } 921 923 922 //The total number of operations is 1 924 //The total number of operations is 1.0 923 925 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::srli(bitblock128_t arg1) 924 926 { … … 926 928 } 927 929 928 //The total number of operations is 1 930 //The total number of operations is 1.0 929 931 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::srli(bitblock128_t arg1) 930 932 { … … 932 934 } 933 935 934 //The total number of operations is 1 936 //The total number of operations is 1.0 935 937 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::srli(bitblock128_t arg1) 936 938 { … … 938 940 } 939 941 940 //The total number of operations is 4942 //The total number of operations is 2.33333333333 941 943 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::srli(bitblock128_t arg1) 942 944 { … … 944 946 } 945 947 946 //The total number of operations is 1 948 //The total number of operations is 1.0 947 949 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ctz(bitblock128_t arg1) 948 950 { … … 950 952 } 951 953 952 //The total number of operations is 1 4954 //The total number of operations is 10.6666666667 953 955 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ctz(bitblock128_t arg1) 954 956 { … … 957 959 } 958 960 959 //The total number of operations is 14 961 //The total number of operations is 14.0 960 962 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ctz(bitblock128_t arg1) 961 963 { … … 963 965 } 964 966 965 //The total number of operations is 13 967 //The total number of operations is 13.0 966 968 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ctz(bitblock128_t arg1) 967 969 { … … 969 971 } 970 972 971 //The total number of operations is 16 973 //The total number of operations is 16.0 972 974 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ctz(bitblock128_t arg1) 973 975 { … … 975 977 } 976 978 977 //The total number of operations is 19 979 //The total number of operations is 19.0 978 980 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ctz(bitblock128_t arg1) 979 981 { … … 981 983 } 982 984 983 //The total number of operations is 14 985 //The total number of operations is 14.0 984 986 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ctz(bitblock128_t arg1) 985 987 { … … 987 989 } 988 990 989 //The total number of operations is 30991 //The total number of operations is 26.6666666667 990 992 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ctz(bitblock128_t arg1) 991 993 { … … 993 995 } 994 996 995 //The total number of operations is 7 997 //The total number of operations is 7.0 996 998 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::sll(bitblock128_t arg1, bitblock128_t shift_mask) 997 999 { … … 999 1001 } 1000 1002 1001 //The total number of operations is 11 1003 //The total number of operations is 11.0 1002 1004 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::sll(bitblock128_t arg1, bitblock128_t shift_mask) 1003 1005 { … … 1005 1007 } 1006 1008 1007 //The total number of operations is 1 1009 //The total number of operations is 1.0 1008 1010 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ugt(bitblock128_t arg1, bitblock128_t arg2) 1009 1011 { … … 1011 1013 } 1012 1014 1013 //The total number of operations is 1 41015 //The total number of operations is 13.6666666667 1014 1016 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ugt(bitblock128_t arg1, bitblock128_t arg2) 1015 1017 { 1016 bitblock128_t tmpAns = simd128<(1)>::ugt(arg1, arg2); 1017 bitblock128_t mask = simd_and(tmpAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2))); 1018 mask = simd_or(mask, simd128<2>::slli<(1)>(mask)); 1019 return simd_or(simd128<2>::srai<(1)>(tmpAns), mask); 1020 } 1021 1022 //The total number of operations is 12 1018 bitblock128_t tmp = simd_not(arg2); 1019 bitblock128_t tmpAns = simd_or(simd_and(arg1, tmp), simd_and(simd128<128>::slli<1>(simd_and(arg1, tmp)), simd_or(arg1, tmp))); 1020 return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns)); 1021 } 1022 1023 //The total number of operations is 12.0 1023 1024 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ugt(bitblock128_t arg1, bitblock128_t arg2) 1024 1025 { … … 1026 1027 } 1027 1028 1028 //The total number of operations is 3 1029 //The total number of operations is 3.0 1029 1030 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ugt(bitblock128_t arg1, bitblock128_t arg2) 1030 1031 { … … 1033 1034 } 1034 1035 1035 //The total number of operations is 3 1036 //The total number of operations is 3.0 1036 1037 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ugt(bitblock128_t arg1, bitblock128_t arg2) 1037 1038 { … … 1040 1041 } 1041 1042 1042 //The total number of operations is 3 1043 //The total number of operations is 3.0 1043 1044 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ugt(bitblock128_t arg1, bitblock128_t arg2) 1044 1045 { … … 1047 1048 } 1048 1049 1049 //The total number of operations is 1 41050 //The total number of operations is 13.5 1050 1051 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ugt(bitblock128_t arg1, bitblock128_t arg2) 1051 1052 { … … 1056 1057 } 1057 1058 1058 //The total number of operations is 461059 //The total number of operations is 37.25 1059 1060 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ugt(bitblock128_t arg1, bitblock128_t arg2) 1060 1061 { … … 1065 1066 } 1066 1067 1067 //The total number of operations is 4 1068 //The total number of operations is 4.0 1068 1069 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::xor_hl(bitblock128_t arg1) 1069 1070 { … … 1071 1072 } 1072 1073 1073 //The total number of operations is 4 1074 //The total number of operations is 4.0 1074 1075 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::xor_hl(bitblock128_t arg1) 1075 1076 { … … 1077 1078 } 1078 1079 1079 //The total number of operations is 4 1080 //The total number of operations is 4.0 1080 1081 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::xor_hl(bitblock128_t arg1) 1081 1082 { … … 1083 1084 } 1084 1085 1085 //The total number of operations is 3 1086 //The total number of operations is 3.0 1086 1087 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::xor_hl(bitblock128_t arg1) 1087 1088 { … … 1089 1090 } 1090 1091 1091 //The total number of operations is 3 1092 //The total number of operations is 3.0 1092 1093 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::xor_hl(bitblock128_t arg1) 1093 1094 { … … 1095 1096 } 1096 1097 1097 //The total number of operations is 3 1098 //The total number of operations is 3.0 1098 1099 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::xor_hl(bitblock128_t arg1) 1099 1100 { … … 1101 1102 } 1102 1103 1103 //The total number of operations is 61104 //The total number of operations is 4.33333333333 1104 1105 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::xor_hl(bitblock128_t arg1) 1105 1106 { … … 1113 1114 } 1114 1115 1115 //The total number of operations is 3 1116 //The total number of operations is 3.0 1116 1117 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::popcount(bitblock128_t arg1) 1117 1118 { … … 1119 1120 } 1120 1121 1121 //The total number of operations is 7 1122 //The total number of operations is 7.0 1122 1123 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::popcount(bitblock128_t arg1) 1123 1124 { … … 1125 1126 } 1126 1127 1127 //The total number of operations is 11 1128 //The total number of operations is 11.0 1128 1129 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::popcount(bitblock128_t arg1) 1129 1130 { … … 1131 1132 } 1132 1133 1133 //The total number of operations is 14 1134 //The total number of operations is 14.0 1134 1135 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::popcount(bitblock128_t arg1) 1135 1136 { … … 1137 1138 } 1138 1139 1139 //The total number of operations is 17 1140 //The total number of operations is 17.0 1140 1141 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::popcount(bitblock128_t arg1) 1141 1142 { … … 1143 1144 } 1144 1145 1145 //The total number of operations is 12 1146 //The total number of operations is 12.0 1146 1147 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::popcount(bitblock128_t arg1) 1147 1148 { … … 1149 1150 } 1150 1151 1151 //The total number of operations is 1 81152 //The total number of operations is 16.3333333333 1152 1153 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::popcount(bitblock128_t arg1) 1153 1154 { … … 1156 1157 } 1157 1158 1158 //The total number of operations is 81159 //The total number of operations is 6.33333333333 1159 1160 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::neg(bitblock128_t arg1) 1160 1161 { … … 1162 1163 } 1163 1164 1164 //The total number of operations is 6 1165 //The total number of operations is 6.0 1165 1166 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::neg(bitblock128_t arg1) 1166 1167 { … … 1168 1169 } 1169 1170 1170 //The total number of operations is 1 1171 //The total number of operations is 1.0 1171 1172 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::neg(bitblock128_t arg1) 1172 1173 { … … 1174 1175 } 1175 1176 1176 //The total number of operations is 1 1177 //The total number of operations is 1.0 1177 1178 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::neg(bitblock128_t arg1) 1178 1179 { … … 1180 1181 } 1181 1182 1182 //The total number of operations is 1 1183 //The total number of operations is 1.0 1183 1184 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::neg(bitblock128_t arg1) 1184 1185 { … … 1186 1187 } 1187 1188 1188 //The total number of operations is 1 1189 //The total number of operations is 1.0 1189 1190 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::neg(bitblock128_t arg1) 1190 1191 { … … 1192 1193 } 1193 1194 1194 //The total number of operations is 111195 //The total number of operations is 9.33333333333 1195 1196 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::neg(bitblock128_t arg1) 1196 1197 { … … 1198 1199 } 1199 1200 1200 //The total number of operations is 2 1201 //The total number of operations is 2.0 1201 1202 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::slli(bitblock128_t arg1) 1202 1203 { … … 1204 1205 } 1205 1206 1206 //The total number of operations is 2 1207 //The total number of operations is 2.0 1207 1208 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::slli(bitblock128_t arg1) 1208 1209 { … … 1210 1211 } 1211 1212 1212 //The total number of operations is 2 1213 //The total number of operations is 2.0 1213 1214 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::slli(bitblock128_t arg1) 1214 1215 { … … 1216 1217 } 1217 1218 1218 //The total number of operations is 1 1219 //The total number of operations is 1.0 1219 1220 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::slli(bitblock128_t arg1) 1220 1221 { … … 1222 1223 } 1223 1224 1224 //The total number of operations is 1 1225 //The total number of operations is 1.0 1225 1226 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::slli(bitblock128_t arg1) 1226 1227 { … … 1228 1229 } 1229 1230 1230 //The total number of operations is 1 1231 //The total number of operations is 1.0 1231 1232 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::slli(bitblock128_t arg1) 1232 1233 { … … 1234 1235 } 1235 1236 1236 //The total number of operations is 41237 //The total number of operations is 2.33333333333 1237 1238 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::slli(bitblock128_t arg1) 1238 1239 { … … 1240 1241 } 1241 1242 1242 //The total number of operations is 3 1243 //The total number of operations is 3.0 1243 1244 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1244 1245 { … … 1246 1247 } 1247 1248 1248 //The total number of operations is 8 1249 //The total number of operations is 8.0 1249 1250 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1250 1251 { … … 1252 1253 } 1253 1254 1254 //The total number of operations is 13 1255 //The total number of operations is 13.0 1255 1256 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1256 1257 { … … 1258 1259 } 1259 1260 1260 //The total number of operations is 4 1261 //The total number of operations is 4.0 1261 1262 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1262 1263 { … … 1264 1265 } 1265 1266 1266 //The total number of operations is 4 1267 //The total number of operations is 4.0 1267 1268 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1268 1269 { … … 1270 1271 } 1271 1272 1272 //The total number of operations is 4 1273 //The total number of operations is 4.0 1273 1274 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1274 1275 { … … 1276 1277 } 1277 1278 1278 //The total number of operations is 8 1279 //The total number of operations is 8.0 1279 1280 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1280 1281 { … … 1282 1283 } 1283 1284 1284 //The total number of operations is 1 51285 //The total number of operations is 13.3333333333 1285 1286 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3) 1286 1287 { … … 1288 1289 } 1289 1290 1290 //The total number of operations is 1 1291 //The total number of operations is 1.0 1291 1292 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::sub(bitblock128_t arg1, bitblock128_t arg2) 1292 1293 { … … 1294 1295 } 1295 1296 1296 //The total number of operations is 111297 //The total number of operations is 9.33333333333 1297 1298 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::sub(bitblock128_t arg1, bitblock128_t arg2) 1298 1299 { … … 1301 1302 } 1302 1303 1303 //The total number of operations is 6 1304 //The total number of operations is 6.0 1304 1305 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::sub(bitblock128_t arg1, bitblock128_t arg2) 1305 1306 { … … 1307 1308 } 1308 1309 1309 //The total number of operations is 1 1310 //The total number of operations is 1.0 1310 1311 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::sub(bitblock128_t arg1, bitblock128_t arg2) 1311 1312 { … … 1313 1314 } 1314 1315 1315 //The total number of operations is 1 1316 //The total number of operations is 1.0 1316 1317 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::sub(bitblock128_t arg1, bitblock128_t arg2) 1317 1318 { … … 1319 1320 } 1320 1321 1321 //The total number of operations is 1 1322 //The total number of operations is 1.0 1322 1323 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::sub(bitblock128_t arg1, bitblock128_t arg2) 1323 1324 { … … 1325 1326 } 1326 1327 1327 //The total number of operations is 1 1328 //The total number of operations is 1.0 1328 1329 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::sub(bitblock128_t arg1, bitblock128_t arg2) 1329 1330 { … … 1331 1332 } 1332 1333 1333 //The total number of operations is 111334 //The total number of operations is 9.33333333333 1334 1335 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::sub(bitblock128_t arg1, bitblock128_t arg2) 1335 1336 { … … 1340 1341 } 1341 1342 1342 //The total number of operations is 3 1343 //The total number of operations is 3.0 1343 1344 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::add_hl(bitblock128_t arg1) 1344 1345 { … … 1346 1347 } 1347 1348 1348 //The total number of operations is 4 1349 //The total number of operations is 4.0 1349 1350 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::add_hl(bitblock128_t arg1) 1350 1351 { … … 1352 1353 } 1353 1354 1354 //The total number of operations is 4 1355 //The total number of operations is 4.0 1355 1356 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::add_hl(bitblock128_t arg1) 1356 1357 { … … 1358 1359 } 1359 1360 1360 //The total number of operations is 3 1361 //The total number of operations is 3.0 1361 1362 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::add_hl(bitblock128_t arg1) 1362 1363 { … … 1364 1365 } 1365 1366 1366 //The total number of operations is 3 1367 //The total number of operations is 3.0 1367 1368 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::add_hl(bitblock128_t arg1) 1368 1369 { … … 1370 1371 } 1371 1372 1372 //The total number of operations is 3 1373 //The total number of operations is 3.0 1373 1374 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::add_hl(bitblock128_t arg1) 1374 1375 { … … 1376 1377 } 1377 1378 1378 //The total number of operations is 1 61379 //The total number of operations is 12.6666666667 1379 1380 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::add_hl(bitblock128_t arg1) 1380 1381 { … … 1382 1383 } 1383 1384 1384 //The total number of operations is 7 1385 //The total number of operations is 7.0 1385 1386 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::srl(bitblock128_t arg1, bitblock128_t shift_mask) 1386 1387 { … … 1388 1389 } 1389 1390 1390 //The total number of operations is 11 1391 //The total number of operations is 11.0 1391 1392 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::srl(bitblock128_t arg1, bitblock128_t shift_mask) 1392 1393 { … … 1442 1443 } 1443 1444 1444 //The total number of operations is 1 1445 //The total number of operations is 1.0 1445 1446 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::min(bitblock128_t arg1, bitblock128_t arg2) 1446 1447 { … … 1448 1449 } 1449 1450 1450 //The total number of operations is 1 81451 //The total number of operations is 16.6666666667 1451 1452 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::min(bitblock128_t arg1, bitblock128_t arg2) 1452 1453 { 1453 return simd128<1>::ifh(simd128<2>::lt(arg1, arg2), arg1, arg2); 1454 } 1455 1456 //The total number of operations is 9 1454 bitblock128_t tmp1 = simd128<128>::srli<1>(arg1); 1455 bitblock128_t tmp2 = simd128<128>::srli<1>(arg2); 1456 return simd128<1>::ifh(simd128<2>::himask(), simd_or(arg1, arg2), simd_or(simd_and(arg1, simd_and(tmp1, simd_not(tmp2))), simd_and(arg2, simd_or(simd_and(simd_not(tmp1), tmp2), arg1)))); 1457 } 1458 1459 //The total number of operations is 9.0 1457 1460 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::min(bitblock128_t arg1, bitblock128_t arg2) 1458 1461 { … … 1461 1464 } 1462 1465 1463 //The total number of operations is 4 1466 //The total number of operations is 4.0 1464 1467 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::min(bitblock128_t arg1, bitblock128_t arg2) 1465 1468 { … … 1467 1470 } 1468 1471 1469 //The total number of operations is 1 1472 //The total number of operations is 1.0 1470 1473 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::min(bitblock128_t arg1, bitblock128_t arg2) 1471 1474 { … … 1473 1476 } 1474 1477 1475 //The total number of operations is 4 1478 //The total number of operations is 4.0 1476 1479 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::min(bitblock128_t arg1, bitblock128_t arg2) 1477 1480 { … … 1479 1482 } 1480 1483 1481 //The total number of operations is 1 81484 //The total number of operations is 17.5 1482 1485 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::min(bitblock128_t arg1, bitblock128_t arg2) 1483 1486 { … … 1485 1488 } 1486 1489 1487 //The total number of operations is 641490 //The total number of operations is 54.75 1488 1491 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::min(bitblock128_t arg1, bitblock128_t arg2) 1489 1492 { … … 1533 1536 } 1534 1537 1535 //The total number of operations is 1 1538 //The total number of operations is 1.0 1536 1539 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::umin(bitblock128_t arg1, bitblock128_t arg2) 1537 1540 { … … 1539 1542 } 1540 1543 1541 //The total number of operations is 16 1544 //The total number of operations is 16.0 1542 1545 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::umin(bitblock128_t arg1, bitblock128_t arg2) 1543 1546 { … … 1545 1548 } 1546 1549 1547 //The total number of operations is 6 1550 //The total number of operations is 6.0 1548 1551 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::umin(bitblock128_t arg1, bitblock128_t arg2) 1549 1552 { … … 1551 1554 } 1552 1555 1553 //The total number of operations is 1 1556 //The total number of operations is 1.0 1554 1557 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::umin(bitblock128_t arg1, bitblock128_t arg2) 1555 1558 { … … 1557 1560 } 1558 1561 1559 //The total number of operations is 4 1562 //The total number of operations is 4.0 1560 1563 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::umin(bitblock128_t arg1, bitblock128_t arg2) 1561 1564 { … … 1564 1567 } 1565 1568 1566 //The total number of operations is 7 1569 //The total number of operations is 7.0 1567 1570 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::umin(bitblock128_t arg1, bitblock128_t arg2) 1568 1571 { … … 1571 1574 } 1572 1575 1573 //The total number of operations is 20 1576 //The total number of operations is 20.0 1574 1577 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::umin(bitblock128_t arg1, bitblock128_t arg2) 1575 1578 { … … 1580 1583 } 1581 1584 1582 //The total number of operations is 4 71585 //The total number of operations is 43.6666666667 1583 1586 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::umin(bitblock128_t arg1, bitblock128_t arg2) 1584 1587 { … … 1589 1592 } 1590 1593 1591 //The total number of operations is 91594 //The total number of operations is 7.33333333333 1592 1595 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::abs(bitblock128_t arg1) 1593 1596 { … … 1595 1598 } 1596 1599 1597 //The total number of operations is 19 1600 //The total number of operations is 19.0 1598 1601 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::abs(bitblock128_t arg1) 1599 1602 { … … 1602 1605 } 1603 1606 1604 //The total number of operations is 1 1607 //The total number of operations is 1.0 1605 1608 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::abs(bitblock128_t arg1) 1606 1609 { … … 1608 1611 } 1609 1612 1610 //The total number of operations is 1 1613 //The total number of operations is 1.0 1611 1614 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::abs(bitblock128_t arg1) 1612 1615 { … … 1614 1617 } 1615 1618 1616 //The total number of operations is 1 1619 //The total number of operations is 1.0 1617 1620 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::abs(bitblock128_t arg1) 1618 1621 { … … 1620 1623 } 1621 1624 1622 //The total number of operations is 13 1625 //The total number of operations is 13.0 1623 1626 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::abs(bitblock128_t arg1) 1624 1627 { … … 1627 1630 } 1628 1631 1629 //The total number of operations is 4 51632 //The total number of operations is 40.0 1630 1633 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::abs(bitblock128_t arg1) 1631 1634 { … … 1634 1637 } 1635 1638 1636 //The total number of operations is 2 1639 //The total number of operations is 2.0 1637 1640 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::eq(bitblock128_t arg1, bitblock128_t arg2) 1638 1641 { … … 1640 1643 } 1641 1644 1642 //The total number of operations is 8 1645 //The total number of operations is 8.0 1643 1646 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::eq(bitblock128_t arg1, bitblock128_t arg2) 1644 1647 { … … 1649 1652 } 1650 1653 1651 //The total number of operations is 9 1654 //The total number of operations is 9.0 1652 1655 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::eq(bitblock128_t arg1, bitblock128_t arg2) 1653 1656 { … … 1655 1658 } 1656 1659 1657 //The total number of operations is 1 1660 //The total number of operations is 1.0 1658 1661 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::eq(bitblock128_t arg1, bitblock128_t arg2) 1659 1662 { … … 1661 1664 } 1662 1665 1663 //The total number of operations is 1 1666 //The total number of operations is 1.0 1664 1667 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::eq(bitblock128_t arg1, bitblock128_t arg2) 1665 1668 { … … 1667 1670 } 1668 1671 1669 //The total number of operations is 1 1672 //The total number of operations is 1.0 1670 1673 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::eq(bitblock128_t arg1, bitblock128_t arg2) 1671 1674 { … … 1673 1676 } 1674 1677 1675 //The total number of operations is 5 1678 //The total number of operations is 5.0 1676 1679 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::eq(bitblock128_t arg1, bitblock128_t arg2) 1677 1680 { … … 1682 1685 } 1683 1686 1684 //The total number of operations is 1 51687 //The total number of operations is 11.6666666667 1685 1688 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::eq(bitblock128_t arg1, bitblock128_t arg2) 1686 1689 { … … 1691 1694 } 1692 1695 1693 //The total number of operations is 4 1696 //The total number of operations is 4.0 1694 1697 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::srai(bitblock128_t arg1) 1695 1698 { … … 1697 1700 } 1698 1701 1699 //The total number of operations is 10 1702 //The total number of operations is 10.0 1700 1703 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::srai(bitblock128_t arg1) 1701 1704 { … … 1704 1707 } 1705 1708 1706 //The total number of operations is 5 1709 //The total number of operations is 5.0 1707 1710 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::srai(bitblock128_t arg1) 1708 1711 { … … 1711 1714 } 1712 1715 1713 //The total number of operations is 1 1716 //The total number of operations is 1.0 1714 1717 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::srai(bitblock128_t arg1) 1715 1718 { … … 1717 1720 } 1718 1721 1719 //The total number of operations is 1 1722 //The total number of operations is 1.0 1720 1723 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::srai(bitblock128_t arg1) 1721 1724 { … … 1723 1726 } 1724 1727 1725 //The total number of operations is 51728 //The total number of operations is 4.5 1726 1729 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::srai(bitblock128_t arg1) 1727 1730 { … … 1729 1732 } 1730 1733 1731 //The total number of operations is 1 61734 //The total number of operations is 11.0833333333 1732 1735 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::srai(bitblock128_t arg1) 1733 1736 { … … 1777 1780 } 1778 1781 1779 //The total number of operations is 1 1782 //The total number of operations is 1.0 1780 1783 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::add(bitblock128_t arg1, bitblock128_t arg2) 1781 1784 { … … 1783 1786 } 1784 1787 1785 //The total number of operations is 101788 //The total number of operations is 8.33333333333 1786 1789 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::add(bitblock128_t arg1, bitblock128_t arg2) 1787 1790 { … … 1790 1793 } 1791 1794 1792 //The total number of operations is 6 1795 //The total number of operations is 6.0 1793 1796 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::add(bitblock128_t arg1, bitblock128_t arg2) 1794 1797 { … … 1796 1799 } 1797 1800 1798 //The total number of operations is 1 1801 //The total number of operations is 1.0 1799 1802 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::add(bitblock128_t arg1, bitblock128_t arg2) 1800 1803 { … … 1802 1805 } 1803 1806 1804 //The total number of operations is 1 1807 //The total number of operations is 1.0 1805 1808 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::add(bitblock128_t arg1, bitblock128_t arg2) 1806 1809 { … … 1808 1811 } 1809 1812 1810 //The total number of operations is 1 1813 //The total number of operations is 1.0 1811 1814 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::add(bitblock128_t arg1, bitblock128_t arg2) 1812 1815 { … … 1814 1817 } 1815 1818 1816 //The total number of operations is 1 1819 //The total number of operations is 1.0 1817 1820 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::add(bitblock128_t arg1, bitblock128_t arg2) 1818 1821 { … … 1820 1823 } 1821 1824 1822 //The total number of operations is 111825 //The total number of operations is 9.33333333333 1823 1826 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::add(bitblock128_t arg1, bitblock128_t arg2) 1824 1827 { … … 1829 1832 } 1830 1833 1831 //The total number of operations is 1 1834 //The total number of operations is 1.0 1832 1835 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::umax(bitblock128_t arg1, bitblock128_t arg2) 1833 1836 { … … 1835 1838 } 1836 1839 1837 //The total number of operations is 1 61840 //The total number of operations is 15.6666666667 1838 1841 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::umax(bitblock128_t arg1, bitblock128_t arg2) 1839 1842 { 1840 return simd _or(simd_and(simd128<(4)>::himask(), simd128<(4)>::umax(arg1, arg2)), simd128<(4)>::umax(simd_and(simd128<(4)>::lomask(), arg1), simd_and(simd128<(4)>::lomask(), arg2)));1841 } 1842 1843 //The total number of operations is 6 1843 return simd128<1>::ifh(simd128<2>::himask(), simd_or(arg1, arg2), simd_or(simd_and(arg2, simd128<128>::srli<1>(simd_or(simd_not(arg1), arg2))), simd_and(arg1, simd128<128>::srli<1>(simd_or(arg1, simd_not(arg2)))))); 1844 } 1845 1846 //The total number of operations is 6.0 1844 1847 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::umax(bitblock128_t arg1, bitblock128_t arg2) 1845 1848 { … … 1847 1850 } 1848 1851 1849 //The total number of operations is 1 1852 //The total number of operations is 1.0 1850 1853 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::umax(bitblock128_t arg1, bitblock128_t arg2) 1851 1854 { … … 1853 1856 } 1854 1857 1855 //The total number of operations is 4 1858 //The total number of operations is 4.0 1856 1859 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::umax(bitblock128_t arg1, bitblock128_t arg2) 1857 1860 { … … 1860 1863 } 1861 1864 1862 //The total number of operations is 7 1865 //The total number of operations is 7.0 1863 1866 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::umax(bitblock128_t arg1, bitblock128_t arg2) 1864 1867 { … … 1867 1870 } 1868 1871 1869 //The total number of operations is 20 1872 //The total number of operations is 20.0 1870 1873 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::umax(bitblock128_t arg1, bitblock128_t arg2) 1871 1874 { … … 1876 1879 } 1877 1880 1878 //The total number of operations is 4 71881 //The total number of operations is 43.6666666667 1879 1882 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::umax(bitblock128_t arg1, bitblock128_t arg2) 1880 1883 { … … 1885 1888 } 1886 1889 1887 //The total number of operations is 931890 //The total number of operations is 73.0 1888 1891 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::umin_hl(bitblock128_t arg1, bitblock128_t arg2) 1889 1892 { … … 1891 1894 } 1892 1895 1893 //The total number of operations is 801896 //The total number of operations is 66.6666666667 1894 1897 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::umin_hl(bitblock128_t arg1, bitblock128_t arg2) 1895 1898 { … … 1897 1900 } 1898 1901 1899 //The total number of operations is 421902 //The total number of operations is 35.3333333333 1900 1903 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::umin_hl(bitblock128_t arg1, bitblock128_t arg2) 1901 1904 { … … 1903 1906 } 1904 1907 1905 //The total number of operations is 7 1908 //The total number of operations is 7.0 1906 1909 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::umin_hl(bitblock128_t arg1, bitblock128_t arg2) 1907 1910 { … … 1909 1912 } 1910 1913 1911 //The total number of operations is 10 1914 //The total number of operations is 10.0 1912 1915 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::umin_hl(bitblock128_t arg1, bitblock128_t arg2) 1913 1916 { … … 1915 1918 } 1916 1919 1917 //The total number of operations is 13 1920 //The total number of operations is 13.0 1918 1921 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::umin_hl(bitblock128_t arg1, bitblock128_t arg2) 1919 1922 { … … 1921 1924 } 1922 1925 1923 //The total number of operations is 3 41926 //The total number of operations is 30.6666666667 1924 1927 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::umin_hl(bitblock128_t arg1, bitblock128_t arg2) 1925 1928 { … … 1927 1930 } 1928 1931 1929 //The total number of operations is 931932 //The total number of operations is 73.0 1930 1933 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::add_hl(bitblock128_t arg1, bitblock128_t arg2) 1931 1934 { … … 1933 1936 } 1934 1937 1935 //The total number of operations is 741938 //The total number of operations is 59.0 1936 1939 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::add_hl(bitblock128_t arg1, bitblock128_t arg2) 1937 1940 { … … 1939 1942 } 1940 1943 1941 //The total number of operations is 421944 //The total number of operations is 35.3333333333 1942 1945 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::add_hl(bitblock128_t arg1, bitblock128_t arg2) 1943 1946 { … … 1945 1948 } 1946 1949 1947 //The total number of operations is 7 1950 //The total number of operations is 7.0 1948 1951 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::add_hl(bitblock128_t arg1, bitblock128_t arg2) 1949 1952 { … … 1951 1954 } 1952 1955 1953 //The total number of operations is 1 1956 //The total number of operations is 1.0 1954 1957 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::add_hl(bitblock128_t arg1, bitblock128_t arg2) 1955 1958 { … … 1957 1960 } 1958 1961 1959 //The total number of operations is 1 1962 //The total number of operations is 1.0 1960 1963 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::add_hl(bitblock128_t arg1, bitblock128_t arg2) 1961 1964 { … … 1963 1966 } 1964 1967 1965 //The total number of operations is 1 51968 //The total number of operations is 11.6666666667 1966 1969 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::add_hl(bitblock128_t arg1, bitblock128_t arg2) 1967 1970 { … … 1969 1972 } 1970 1973 1971 //The total number of operations is 1 201974 //The total number of operations is 108.666666667 1972 1975 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packss(bitblock128_t arg1, bitblock128_t arg2) 1973 1976 { … … 1977 1980 } 1978 1981 1979 //The total number of operations is 861982 //The total number of operations is 79.3333333333 1980 1983 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packss(bitblock128_t arg1, bitblock128_t arg2) 1981 1984 { … … 1985 1988 } 1986 1989 1987 //The total number of operations is 3 61990 //The total number of operations is 32.6666666667 1988 1991 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packss(bitblock128_t arg1, bitblock128_t arg2) 1989 1992 { … … 1993 1996 } 1994 1997 1995 //The total number of operations is 1 1998 //The total number of operations is 1.0 1996 1999 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packss(bitblock128_t arg1, bitblock128_t arg2) 1997 2000 { … … 1999 2002 } 2000 2003 2001 //The total number of operations is 1 2004 //The total number of operations is 1.0 2002 2005 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packss(bitblock128_t arg1, bitblock128_t arg2) 2003 2006 { … … 2005 2008 } 2006 2009 2007 //The total number of operations is 7 72010 //The total number of operations is 75.0 2008 2011 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packss(bitblock128_t arg1, bitblock128_t arg2) 2009 2012 { … … 2013 2016 } 2014 2017 2015 //The total number of operations is 2 682018 //The total number of operations is 227.666666667 2016 2019 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packss(bitblock128_t arg1, bitblock128_t arg2) 2017 2020 { … … 2021 2024 } 2022 2025 2023 //The total number of operations is 24 2026 //The total number of operations is 24.0 2024 2027 template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<4>::signmask(bitblock128_t arg1) 2025 2028 { … … 2029 2032 } 2030 2033 2031 //The total number of operations is 1 2034 //The total number of operations is 1.0 2032 2035 template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<8>::signmask(bitblock128_t arg1) 2033 2036 { … … 2035 2038 } 2036 2039 2037 //The total number of operations is 4 2040 //The total number of operations is 4.0 2038 2041 template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<16>::signmask(bitblock128_t arg1) 2039 2042 { … … 2041 2044 } 2042 2045 2043 //The total number of operations is 7 2046 //The total number of operations is 7.0 2044 2047 template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<32>::signmask(bitblock128_t arg1) 2045 2048 { … … 2047 2050 } 2048 2051 2049 //The total number of operations is 8 2052 //The total number of operations is 8.0 2050 2053 template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<64>::signmask(bitblock128_t arg1) 2051 2054 { … … 2053 2056 } 2054 2057 2055 //The total number of operations is 1 52058 //The total number of operations is 13.3333333333 2056 2059 template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<128>::signmask(bitblock128_t arg1) 2057 2060 { … … 2059 2062 } 2060 2063 2061 //The total number of operations is 452064 //The total number of operations is 35.0 2062 2065 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packl(bitblock128_t arg1, bitblock128_t arg2) 2063 2066 { … … 2065 2068 } 2066 2069 2067 //The total number of operations is 312070 //The total number of operations is 24.3333333333 2068 2071 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packl(bitblock128_t arg1, bitblock128_t arg2) 2069 2072 { … … 2071 2074 } 2072 2075 2073 //The total number of operations is 1 72076 //The total number of operations is 13.6666666667 2074 2077 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packl(bitblock128_t arg1, bitblock128_t arg2) 2075 2078 { … … 2077 2080 } 2078 2081 2079 //The total number of operations is 3 2082 //The total number of operations is 3.0 2080 2083 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packl(bitblock128_t arg1, bitblock128_t arg2) 2081 2084 { … … 2083 2086 } 2084 2087 2085 //The total number of operations is 3 2088 //The total number of operations is 3.0 2086 2089 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packl(bitblock128_t arg1, bitblock128_t arg2) 2087 2090 { … … 2089 2092 } 2090 2093 2091 //The total number of operations is 3 2094 //The total number of operations is 3.0 2092 2095 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packl(bitblock128_t arg1, bitblock128_t arg2) 2093 2096 { … … 2095 2098 } 2096 2099 2097 //The total number of operations is 72100 //The total number of operations is 5.33333333333 2098 2101 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packl(bitblock128_t arg1, bitblock128_t arg2) 2099 2102 { … … 2101 2104 } 2102 2105 2103 //The total number of operations is 472106 //The total number of operations is 37.0 2104 2107 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packh(bitblock128_t arg1, bitblock128_t arg2) 2105 2108 { … … 2107 2110 } 2108 2111 2109 //The total number of operations is 332112 //The total number of operations is 26.3333333333 2110 2113 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packh(bitblock128_t arg1, bitblock128_t arg2) 2111 2114 { … … 2113 2116 } 2114 2117 2115 //The total number of operations is 1 92118 //The total number of operations is 15.6666666667 2116 2119 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packh(bitblock128_t arg1, bitblock128_t arg2) 2117 2120 { … … 2119 2122 } 2120 2123 2121 //The total number of operations is 3 2124 //The total number of operations is 3.0 2122 2125 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packh(bitblock128_t arg1, bitblock128_t arg2) 2123 2126 { … … 2125 2128 } 2126 2129 2127 //The total number of operations is 3 2130 //The total number of operations is 3.0 2128 2131 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packh(bitblock128_t arg1, bitblock128_t arg2) 2129 2132 { … … 2131 2134 } 2132 2135 2133 //The total number of operations is 3 2136 //The total number of operations is 3.0 2134 2137 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packh(bitblock128_t arg1, bitblock128_t arg2) 2135 2138 { … … 2137 2140 } 2138 2141 2139 //The total number of operations is 72142 //The total number of operations is 5.33333333333 2140 2143 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packh(bitblock128_t arg1, bitblock128_t arg2) 2141 2144 { … … 2143 2146 } 2144 2147 2145 //The total number of operations is 932148 //The total number of operations is 73.0 2146 2149 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::min_hl(bitblock128_t arg1, bitblock128_t arg2) 2147 2150 { … … 2149 2152 } 2150 2153 2151 //The total number of operations is 822154 //The total number of operations is 67.3333333333 2152 2155 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::min_hl(bitblock128_t arg1, bitblock128_t arg2) 2153 2156 { … … 2155 2158 } 2156 2159 2157 //The total number of operations is 452160 //The total number of operations is 38.3333333333 2158 2161 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::min_hl(bitblock128_t arg1, bitblock128_t arg2) 2159 2162 { … … 2161 2164 } 2162 2165 2163 //The total number of operations is 10 2166 //The total number of operations is 10.0 2164 2167 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::min_hl(bitblock128_t arg1, bitblock128_t arg2) 2165 2168 { … … 2167 2170 } 2168 2171 2169 //The total number of operations is 7 2172 //The total number of operations is 7.0 2170 2173 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::min_hl(bitblock128_t arg1, bitblock128_t arg2) 2171 2174 { … … 2173 2176 } 2174 2177 2175 //The total number of operations is 10 2178 //The total number of operations is 10.0 2176 2179 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::min_hl(bitblock128_t arg1, bitblock128_t arg2) 2177 2180 { … … 2179 2182 } 2180 2183 2181 //The total number of operations is 322184 //The total number of operations is 28.1666666667 2182 2185 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::min_hl(bitblock128_t arg1, bitblock128_t arg2) 2183 2186 { … … 2185 2188 } 2186 2189 2187 //The total number of operations is 852190 //The total number of operations is 75.0 2188 2191 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packus(bitblock128_t arg1, bitblock128_t arg2) 2189 2192 { … … 2195 2198 } 2196 2199 2197 //The total number of operations is 832200 //The total number of operations is 74.3333333333 2198 2201 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packus(bitblock128_t arg1, bitblock128_t arg2) 2199 2202 { 2200 bitblock128_t arg11 = simd128<4>::ifh(arg1, simd128<4>::constant<0>(), arg1); 2201 bitblock128_t arg12 = simd_and(simd128<4>::lomask(), arg11); 2202 bitblock128_t arg21 = simd128<4>::ifh(arg2, simd128<4>::constant<0>(), arg2); 2203 bitblock128_t arg22 = simd_and(simd128<4>::lomask(), arg21); 2204 return hsimd128<4>::packl(simd128<1>::ifh(simd128<4>::eq(arg12, arg11), arg12, simd128<4>::lomask()), simd128<1>::ifh(simd128<4>::eq(arg22, arg21), arg22, simd128<4>::lomask())); 2205 } 2206 2207 //The total number of operations is 35 2203 bitblock128_t hiPart = hsimd128<4>::packh(arg1, arg2); 2204 return simd128<(2)>::ifh(hiPart, simd128<(2)>::constant<0>(), simd_or(simd128<(2)>::gt(hiPart, simd128<(2)>::constant<0>()), hsimd128<4>::packl(arg1, arg2))); 2205 } 2206 2207 //The total number of operations is 31.6666666667 2208 2208 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packus(bitblock128_t arg1, bitblock128_t arg2) 2209 2209 { … … 2215 2215 } 2216 2216 2217 //The total number of operations is 1 2217 //The total number of operations is 1.0 2218 2218 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packus(bitblock128_t arg1, bitblock128_t arg2) 2219 2219 { … … 2221 2221 } 2222 2222 2223 //The total number of operations is 12 2223 //The total number of operations is 12.0 2224 2224 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packus(bitblock128_t arg1, bitblock128_t arg2) 2225 2225 { … … 2228 2228 } 2229 2229 2230 //The total number of operations is 12 2230 //The total number of operations is 12.0 2231 2231 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packus(bitblock128_t arg1, bitblock128_t arg2) 2232 2232 { … … 2235 2235 } 2236 2236 2237 //The total number of operations is 3 82237 //The total number of operations is 34.1666666667 2238 2238 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packus(bitblock128_t arg1, bitblock128_t arg2) 2239 2239 { … … 2242 2242 } 2243 2243 2244 //The total number of operations is 31 2244 //The total number of operations is 31.0 2245 2245 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::mergel(bitblock128_t arg1, bitblock128_t arg2) 2246 2246 { … … 2248 2248 } 2249 2249 2250 //The total number of operations is 21 2250 //The total number of operations is 21.0 2251 2251 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::mergel(bitblock128_t arg1, bitblock128_t arg2) 2252 2252 { … … 2254 2254 } 2255 2255 2256 //The total number of operations is 11 2256 //The total number of operations is 11.0 2257 2257 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::mergel(bitblock128_t arg1, bitblock128_t arg2) 2258 2258 { … … 2260 2260 } 2261 2261 2262 //The total number of operations is 1 2262 //The total number of operations is 1.0 2263 2263 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::mergel(bitblock128_t arg1, bitblock128_t arg2) 2264 2264 { … … 2266 2266 } 2267 2267 2268 //The total number of operations is 1 2268 //The total number of operations is 1.0 2269 2269 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::mergel(bitblock128_t arg1, bitblock128_t arg2) 2270 2270 { … … 2272 2272 } 2273 2273 2274 //The total number of operations is 1 2274 //The total number of operations is 1.0 2275 2275 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::mergel(bitblock128_t arg1, bitblock128_t arg2) 2276 2276 { … … 2278 2278 } 2279 2279 2280 //The total number of operations is 1 2280 //The total number of operations is 1.0 2281 2281 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::mergel(bitblock128_t arg1, bitblock128_t arg2) 2282 2282 { … … 2284 2284 } 2285 2285 2286 //The total number of operations is 31 2286 //The total number of operations is 31.0 2287 2287 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::mergeh(bitblock128_t arg1, bitblock128_t arg2) 2288 2288 { … … 2290 2290 } 2291 2291 2292 //The total number of operations is 21 2292 //The total number of operations is 21.0 2293 2293 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::mergeh(bitblock128_t arg1, bitblock128_t arg2) 2294 2294 { … … 2296 2296 } 2297 2297 2298 //The total number of operations is 11 2298 //The total number of operations is 11.0 2299 2299 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::mergeh(bitblock128_t arg1, bitblock128_t arg2) 2300 2300 { … … 2302 2302 } 2303 2303 2304 //The total number of operations is 1 2304 //The total number of operations is 1.0 2305 2305 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::mergeh(bitblock128_t arg1, bitblock128_t arg2) 2306 2306 { … … 2308 2308 } 2309 2309 2310 //The total number of operations is 1 2310 //The total number of operations is 1.0 2311 2311 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::mergeh(bitblock128_t arg1, bitblock128_t arg2) 2312 2312 { … … 2314 2314 } 2315 2315 2316 //The total number of operations is 1 2316 //The total number of operations is 1.0 2317 2317 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::mergeh(bitblock128_t arg1, bitblock128_t arg2) 2318 2318 { … … 2320 2320 } 2321 2321 2322 //The total number of operations is 1 2322 //The total number of operations is 1.0 2323 2323 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::mergeh(bitblock128_t arg1, bitblock128_t arg2) 2324 2324 { … … 2326 2326 } 2327 2327 2328 //The total number of operations is 24 2328 //The total number of operations is 24.0 2329 2329 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::zeroextendh(bitblock128_t arg1) 2330 2330 { … … 2332 2332 } 2333 2333 2334 //The total number of operations is 14 2334 //The total number of operations is 14.0 2335 2335 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::zeroextendh(bitblock128_t arg1) 2336 2336 { … … 2338 2338 } 2339 2339 2340 //The total number of operations is 4 2340 //The total number of operations is 4.0 2341 2341 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::zeroextendh(bitblock128_t arg1) 2342 2342 { … … 2344 2344 } 2345 2345 2346 //The total number of operations is 3 2346 //The total number of operations is 3.0 2347 2347 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::zeroextendh(bitblock128_t arg1) 2348 2348 { … … 2350 2350 } 2351 2351 2352 //The total number of operations is 3 2352 //The total number of operations is 3.0 2353 2353 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::zeroextendh(bitblock128_t arg1) 2354 2354 { … … 2356 2356 } 2357 2357 2358 //The total number of operations is 3 2358 //The total number of operations is 3.0 2359 2359 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::zeroextendh(bitblock128_t arg1) 2360 2360 { … … 2362 2362 } 2363 2363 2364 //The total number of operations is 42364 //The total number of operations is 2.33333333333 2365 2365 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::zeroextendh(bitblock128_t arg1) 2366 2366 { … … 2368 2368 } 2369 2369 2370 //The total number of operations is 24 2370 //The total number of operations is 24.0 2371 2371 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::zeroextendl(bitblock128_t arg1) 2372 2372 { … … 2374 2374 } 2375 2375 2376 //The total number of operations is 14 2376 //The total number of operations is 14.0 2377 2377 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::zeroextendl(bitblock128_t arg1) 2378 2378 { … … 2380 2380 } 2381 2381 2382 //The total number of operations is 4 2382 //The total number of operations is 4.0 2383 2383 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::zeroextendl(bitblock128_t arg1) 2384 2384 { … … 2386 2386 } 2387 2387 2388 //The total number of operations is 3 2388 //The total number of operations is 3.0 2389 2389 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::zeroextendl(bitblock128_t arg1) 2390 2390 { … … 2392 2392 } 2393 2393 2394 //The total number of operations is 3 2394 //The total number of operations is 3.0 2395 2395 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::zeroextendl(bitblock128_t arg1) 2396 2396 { … … 2398 2398 } 2399 2399 2400 //The total number of operations is 3 2400 //The total number of operations is 3.0 2401 2401 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::zeroextendl(bitblock128_t arg1) 2402 2402 { … … 2404 2404 } 2405 2405 2406 //The total number of operations is 1 2406 //The total number of operations is 1.0 2407 2407 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::zeroextendl(bitblock128_t arg1) 2408 2408 { … … 2410 2410 } 2411 2411 2412 //The total number of operations is 31 2412 //The total number of operations is 31.0 2413 2413 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::signextendh(bitblock128_t arg1) 2414 2414 { … … 2416 2416 } 2417 2417 2418 //The total number of operations is 33 2418 //The total number of operations is 33.0 2419 2419 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::signextendh(bitblock128_t arg1) 2420 2420 { … … 2422 2422 } 2423 2423 2424 //The total number of operations is 13 2424 //The total number of operations is 13.0 2425 2425 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::signextendh(bitblock128_t arg1) 2426 2426 { … … 2428 2428 } 2429 2429 2430 //The total number of operations is 4 2430 //The total number of operations is 4.0 2431 2431 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::signextendh(bitblock128_t arg1) 2432 2432 { … … 2434 2434 } 2435 2435 2436 //The total number of operations is 4 2436 //The total number of operations is 4.0 2437 2437 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::signextendh(bitblock128_t arg1) 2438 2438 { … … 2440 2440 } 2441 2441 2442 //The total number of operations is 1 22442 //The total number of operations is 11.0 2443 2443 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::signextendh(bitblock128_t arg1) 2444 2444 { … … 2446 2446 } 2447 2447 2448 //The total number of operations is 1 62448 //The total number of operations is 11.0833333333 2449 2449 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::signextendh(bitblock128_t arg1) 2450 2450 { … … 2452 2452 } 2453 2453 2454 //The total number of operations is 31 2454 //The total number of operations is 31.0 2455 2455 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::signextendl(bitblock128_t arg1) 2456 2456 { … … 2458 2458 } 2459 2459 2460 //The total number of operations is 33 2460 //The total number of operations is 33.0 2461 2461 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::signextendl(bitblock128_t arg1) 2462 2462 { … … 2464 2464 } 2465 2465 2466 //The total number of operations is 13 2466 //The total number of operations is 13.0 2467 2467 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::signextendl(bitblock128_t arg1) 2468 2468 { … … 2470 2470 } 2471 2471 2472 //The total number of operations is 4 2472 //The total number of operations is 4.0 2473 2473 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::signextendl(bitblock128_t arg1) 2474 2474 { … … 2476 2476 } 2477 2477 2478 //The total number of operations is 4 2478 //The total number of operations is 4.0 2479 2479 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::signextendl(bitblock128_t arg1) 2480 2480 { … … 2482 2482 } 2483 2483 2484 //The total number of operations is 1 22484 //The total number of operations is 11.0 2485 2485 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::signextendl(bitblock128_t arg1) 2486 2486 { … … 2488 2488 } 2489 2489 2490 //The total number of operations is 202490 //The total number of operations is 13.4166666667 2491 2491 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::signextendl(bitblock128_t arg1) 2492 2492 { … … 2494 2494 } 2495 2495 2496 //The total number of operations is 1 72496 //The total number of operations is 13.6666666667 2497 2497 template <> template <uint64_t msk> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::shufflei(bitblock128_t arg1) 2498 2498 { … … 2512 2512 } 2513 2513 2514 //The total number of operations is 1 2514 //The total number of operations is 1.0 2515 2515 template <> template <uint64_t msk> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::shufflei(bitblock128_t arg1) 2516 2516 { … … 2518 2518 } 2519 2519 2520 //The total number of operations is 1 2520 //The total number of operations is 1.0 2521 2521 template <> template <uint64_t msk> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::shufflei(bitblock128_t arg1) 2522 2522 { … … 2524 2524 } 2525 2525 2526 //The total number of operations is 92526 //The total number of operations is 5.66666666667 2527 2527 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::dsrli(bitblock128_t arg1, bitblock128_t arg2) 2528 2528 { … … 2530 2530 } 2531 2531 2532 //The total number of operations is 92532 //The total number of operations is 5.66666666667 2533 2533 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::dsrli(bitblock128_t arg1, bitblock128_t arg2) 2534 2534 { … … 2536 2536 } 2537 2537 2538 //The total number of operations is 92538 //The total number of operations is 3.0 2539 2539 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::dsrli(bitblock128_t arg1, bitblock128_t arg2) 2540 2540 { … … 2542 2542 } 2543 2543 2544 //The total number of operations is 92544 //The total number of operations is 3.0 2545 2545 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::dsrli(bitblock128_t arg1, bitblock128_t arg2) 2546 2546 { … … 2548 2548 } 2549 2549 2550 //The total number of operations is 92550 //The total number of operations is 3.0 2551 2551 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::dsrli(bitblock128_t arg1, bitblock128_t arg2) 2552 2552 { … … 2554 2554 } 2555 2555 2556 //The total number of operations is 92556 //The total number of operations is 3.0 2557 2557 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::dsrli(bitblock128_t arg1, bitblock128_t arg2) 2558 2558 { … … 2560 2560 } 2561 2561 2562 //The total number of operations is 92562 //The total number of operations is 3.0 2563 2563 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::dsrli(bitblock128_t arg1, bitblock128_t arg2) 2564 2564 { … … 2566 2566 } 2567 2567 2568 //The total number of operations is 1 2568 //The total number of operations is 1.0 2569 2569 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill(uint64_t val1) 2570 2570 { … … 2572 2572 } 2573 2573 2574 //The total number of operations is 1 2574 //The total number of operations is 1.0 2575 2575 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill(uint64_t val1) 2576 2576 { … … 2578 2578 } 2579 2579 2580 //The total number of operations is 1 2580 //The total number of operations is 1.0 2581 2581 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill(uint64_t val1) 2582 2582 { … … 2584 2584 } 2585 2585 2586 //The total number of operations is 1 2586 //The total number of operations is 1.0 2587 2587 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill(uint64_t val1) 2588 2588 { … … 2590 2590 } 2591 2591 2592 //The total number of operations is 1 2592 //The total number of operations is 1.0 2593 2593 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::fill(uint64_t val1) 2594 2594 { … … 2596 2596 } 2597 2597 2598 //The total number of operations is 1 2598 //The total number of operations is 1.0 2599 2599 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::fill(uint64_t val1) 2600 2600 { … … 2602 2602 } 2603 2603 2604 //The total number of operations is 1 2604 //The total number of operations is 1.0 2605 2605 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::fill(uint64_t val1) 2606 2606 { … … 2608 2608 } 2609 2609 2610 //The total number of operations is 1 2610 //The total number of operations is 1.0 2611 2611 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::fill(uint64_t val1) 2612 2612 { … … 2614 2614 } 2615 2615 2616 //The total number of operations is 1 2616 //The total number of operations is 1.0 2617 2617 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::shuffle(bitblock128_t arg1, bitblock128_t arg2) 2618 2618 { … … 2620 2620 } 2621 2621 2622 //The total number of operations is 10 2622 //The total number of operations is 10.0 2623 2623 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::shuffle(bitblock128_t arg1, bitblock128_t arg2) 2624 2624 { … … 2630 2630 } 2631 2631 2632 //The total number of operations is 19 2632 //The total number of operations is 19.0 2633 2633 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::shuffle(bitblock128_t arg1, bitblock128_t arg2) 2634 2634 { … … 2640 2640 } 2641 2641 2642 //The total number of operations is 32 2642 //The total number of operations is 32.0 2643 2643 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::shuffle(bitblock128_t arg1, bitblock128_t arg2) 2644 2644 { … … 2650 2650 } 2651 2651 2652 //The total number of operations is 1 2652 //The total number of operations is 1.0 2653 2653 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<1>::extract(bitblock128_t arg1) 2654 2654 { … … 2656 2656 } 2657 2657 2658 //The total number of operations is 1 2658 //The total number of operations is 1.0 2659 2659 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<2>::extract(bitblock128_t arg1) 2660 2660 { … … 2662 2662 } 2663 2663 2664 //The total number of operations is 1 2664 //The total number of operations is 1.0 2665 2665 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<4>::extract(bitblock128_t arg1) 2666 2666 { … … 2668 2668 } 2669 2669 2670 //The total number of operations is 1 2670 //The total number of operations is 1.0 2671 2671 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<8>::extract(bitblock128_t arg1) 2672 2672 { … … 2674 2674 } 2675 2675 2676 //The total number of operations is 1 2676 //The total number of operations is 1.0 2677 2677 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<16>::extract(bitblock128_t arg1) 2678 2678 { … … 2680 2680 } 2681 2681 2682 //The total number of operations is 2 2682 //The total number of operations is 2.0 2683 2683 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<32>::extract(bitblock128_t arg1) 2684 2684 { … … 2686 2686 } 2687 2687 2688 //The total number of operations is 4 2688 //The total number of operations is 4.0 2689 2689 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<64>::extract(bitblock128_t arg1) 2690 2690 { … … 2692 2692 } 2693 2693 2694 //The total number of operations is 1 62694 //The total number of operations is 12.6666666667 2695 2695 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::splat(bitblock128_t arg1) 2696 2696 { … … 2698 2698 } 2699 2699 2700 //The total number of operations is 13 2700 //The total number of operations is 13.0 2701 2701 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::splat(bitblock128_t arg1) 2702 2702 { … … 2706 2706 } 2707 2707 2708 //The total number of operations is 9 2708 //The total number of operations is 9.0 2709 2709 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::splat(bitblock128_t arg1) 2710 2710 { … … 2714 2714 } 2715 2715 2716 //The total number of operations is 5 2716 //The total number of operations is 5.0 2717 2717 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::splat(bitblock128_t arg1) 2718 2718 { … … 2722 2722 } 2723 2723 2724 //The total number of operations is 2 2724 //The total number of operations is 2.0 2725 2725 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::splat(bitblock128_t arg1) 2726 2726 { … … 2728 2728 } 2729 2729 2730 //The total number of operations is 1 2730 //The total number of operations is 1.0 2731 2731 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::splat(bitblock128_t arg1) 2732 2732 { … … 2734 2734 } 2735 2735 2736 //The total number of operations is 5 2736 //The total number of operations is 5.0 2737 2737 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::splat(bitblock128_t arg1) 2738 2738 { … … 2740 2740 } 2741 2741 2742 //The total number of operations is 13 2742 //The total number of operations is 13.0 2743 2743 template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::splat(bitblock128_t arg1) 2744 2744 { … … 2746 2746 } 2747 2747 2748 //The total number of operations is 15 2748 //The total number of operations is 15.0 2749 2749 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) 2750 2750 { … … 2752 2752 } 2753 2753 2754 //The total number of operations is 7 2754 //The total number of operations is 7.0 2755 2755 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) 2756 2756 { … … 2758 2758 } 2759 2759 2760 //The total number of operations is 3 2760 //The total number of operations is 3.0 2761 2761 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) 2762 2762 { … … 2764 2764 } 2765 2765 2766 //The total number of operations is 1 2766 //The total number of operations is 1.0 2767 2767 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) 2768 2768 { … … 2770 2770 } 2771 2771 2772 //The total number of operations is 5 2772 //The total number of operations is 5.0 2773 2773 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4) 2774 2774 { … … 2776 2776 } 2777 2777 2778 //The total number of operations is 5 2778 //The total number of operations is 5.0 2779 2779 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4) 2780 2780 { … … 2782 2782 } 2783 2783 2784 //The total number of operations is 5 2784 //The total number of operations is 5.0 2785 2785 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4) 2786 2786 { … … 2788 2788 } 2789 2789 2790 //The total number of operations is 5 2790 //The total number of operations is 5.0 2791 2791 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4) 2792 2792 { … … 2794 2794 } 2795 2795 2796 //The total number of operations is 3 2796 //The total number of operations is 3.0 2797 2797 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4) 2798 2798 { … … 2800 2800 } 2801 2801 2802 //The total number of operations is 1 2802 //The total number of operations is 1.0 2803 2803 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4) 2804 2804 { … … 2806 2806 } 2807 2807 2808 //The total number of operations is 42808 //The total number of operations is 2.33333333333 2809 2809 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::srli(bitblock128_t arg1) 2810 2810 { … … 2812 2812 } 2813 2813 2814 //The total number of operations is 42814 //The total number of operations is 2.33333333333 2815 2815 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::srli(bitblock128_t arg1) 2816 2816 { … … 2818 2818 } 2819 2819 2820 //The total number of operations is 42820 //The total number of operations is 1.0 2821 2821 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::srli(bitblock128_t arg1) 2822 2822 { 2823 return simd128<128>::srli<(sh*8)>(arg1);2824 } 2825 2826 //The total number of operations is 42823 return _mm_srli_si128(arg1, (int32_t)(sh)); 2824 } 2825 2826 //The total number of operations is 1.0 2827 2827 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::srli(bitblock128_t arg1) 2828 2828 { 2829 return simd128<128>::srli<(sh*16)>(arg1);2830 } 2831 2832 //The total number of operations is 42829 return mvmd128<(8)>::srli<(sh*2)>(arg1); 2830 } 2831 2832 //The total number of operations is 1.0 2833 2833 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::srli(bitblock128_t arg1) 2834 2834 { 2835 return simd128<128>::srli<(sh*32)>(arg1);2836 } 2837 2838 //The total number of operations is 42835 return mvmd128<(16)>::srli<(sh*2)>(arg1); 2836 } 2837 2838 //The total number of operations is 1.0 2839 2839 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::srli(bitblock128_t arg1) 2840 2840 { 2841 return simd128<128>::srli<(sh*64)>(arg1);2842 } 2843 2844 //The total number of operations is 42841 return mvmd128<(32)>::srli<(sh*2)>(arg1); 2842 } 2843 2844 //The total number of operations is 1.0 2845 2845 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::srli(bitblock128_t arg1) 2846 2846 { 2847 return simd128<128>::srli<(sh*128)>(arg1);2848 } 2849 2850 //The total number of operations is 1 2847 return mvmd128<(64)>::srli<(sh*2)>(arg1); 2848 } 2849 2850 //The total number of operations is 1.0 2851 2851 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill2(uint64_t val1, uint64_t val2) 2852 2852 { … … 2854 2854 } 2855 2855 2856 //The total number of operations is 1 2856 //The total number of operations is 1.0 2857 2857 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill2(uint64_t val1, uint64_t val2) 2858 2858 { … … 2860 2860 } 2861 2861 2862 //The total number of operations is 1 2862 //The total number of operations is 1.0 2863 2863 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill2(uint64_t val1, uint64_t val2) 2864 2864 { … … 2866 2866 } 2867 2867 2868 //The total number of operations is 1 2868 //The total number of operations is 1.0 2869 2869 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill2(uint64_t val1, uint64_t val2) 2870 2870 { … … 2872 2872 } 2873 2873 2874 //The total number of operations is 1 2874 //The total number of operations is 1.0 2875 2875 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::fill2(uint64_t val1, uint64_t val2) 2876 2876 { … … 2878 2878 } 2879 2879 2880 //The total number of operations is 5 2880 //The total number of operations is 5.0 2881 2881 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::fill2(uint64_t val1, uint64_t val2) 2882 2882 { … … 2884 2884 } 2885 2885 2886 //The total number of operations is 5 2886 //The total number of operations is 5.0 2887 2887 template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::fill2(uint64_t val1, uint64_t val2) 2888 2888 { … … 2890 2890 } 2891 2891 2892 //The total number of operations is 92892 //The total number of operations is 5.66666666667 2893 2893 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::dslli(bitblock128_t arg1, bitblock128_t arg2) 2894 2894 { … … 2896 2896 } 2897 2897 2898 //The total number of operations is 92898 //The total number of operations is 5.66666666667 2899 2899 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::dslli(bitblock128_t arg1, bitblock128_t arg2) 2900 2900 { … … 2902 2902 } 2903 2903 2904 //The total number of operations is 92904 //The total number of operations is 3.0 2905 2905 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::dslli(bitblock128_t arg1, bitblock128_t arg2) 2906 2906 { … … 2908 2908 } 2909 2909 2910 //The total number of operations is 92910 //The total number of operations is 3.0 2911 2911 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::dslli(bitblock128_t arg1, bitblock128_t arg2) 2912 2912 { … … 2914 2914 } 2915 2915 2916 //The total number of operations is 92916 //The total number of operations is 3.0 2917 2917 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::dslli(bitblock128_t arg1, bitblock128_t arg2) 2918 2918 { … … 2920 2920 } 2921 2921 2922 //The total number of operations is 92922 //The total number of operations is 3.0 2923 2923 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::dslli(bitblock128_t arg1, bitblock128_t arg2) 2924 2924 { … … 2926 2926 } 2927 2927 2928 //The total number of operations is 92928 //The total number of operations is 3.0 2929 2929 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::dslli(bitblock128_t arg1, bitblock128_t arg2) 2930 2930 { … … 2932 2932 } 2933 2933 2934 //The total number of operations is 42934 //The total number of operations is 2.33333333333 2935 2935 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::slli(bitblock128_t arg1) 2936 2936 { … … 2938 2938 } 2939 2939 2940 //The total number of operations is 42940 //The total number of operations is 2.33333333333 2941 2941 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::slli(bitblock128_t arg1) 2942 2942 { … … 2944 2944 } 2945 2945 2946 //The total number of operations is 42946 //The total number of operations is 1.0 2947 2947 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::slli(bitblock128_t arg1) 2948 2948 { 2949 return simd128<128>::slli<(sh*8)>(arg1);2950 } 2951 2952 //The total number of operations is 42949 return _mm_slli_si128(arg1, (int32_t)(sh)); 2950 } 2951 2952 //The total number of operations is 1.0 2953 2953 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::slli(bitblock128_t arg1) 2954 2954 { … … 2956 2956 } 2957 2957 2958 //The total number of operations is 42958 //The total number of operations is 1.0 2959 2959 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::slli(bitblock128_t arg1) 2960 2960 { 2961 return simd128<128>::slli<(sh*32)>(arg1);2962 } 2963 2964 //The total number of operations is 42961 return mvmd128<(16)>::slli<(sh*2)>(arg1); 2962 } 2963 2964 //The total number of operations is 1.0 2965 2965 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::slli(bitblock128_t arg1) 2966 2966 { … … 2968 2968 } 2969 2969 2970 //The total number of operations is 42970 //The total number of operations is 1.0 2971 2971 template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::slli(bitblock128_t arg1) 2972 2972 { 2973 return simd128<128>::slli<(sh*128)>(arg1);2974 } 2975 2976 //The total number of operations is 13 2973 return mvmd128<(64)>::slli<(sh*2)>(arg1); 2974 } 2975 2976 //The total number of operations is 13.0 2977 2977 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) 2978 2978 { … … 2980 2980 } 2981 2981 2982 //The total number of operations is 13 2982 //The total number of operations is 13.0 2983 2983 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) 2984 2984 { … … 2986 2986 } 2987 2987 2988 //The total number of operations is 7 2988 //The total number of operations is 7.0 2989 2989 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) 2990 2990 { … … 2992 2992 } 2993 2993 2994 //The total number of operations is 3 2994 //The total number of operations is 3.0 2995 2995 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) 2996 2996 { … … 2998 2998 } 2999 2999 3000 //The total number of operations is 1 3000 //The total number of operations is 1.0 3001 3001 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) 3002 3002 { … … 3004 3004 } 3005 3005 3006 //The total number of operations is 11 3006 //The total number of operations is 11.0 3007 3007 IDISA_ALWAYS_INLINE bitblock128_t bitblock128::sll(bitblock128_t arg1, bitblock128_t arg2) 3008 3008 { … … 3010 3010 } 3011 3011 3012 //The total number of operations is 1 3012 //The total number of operations is 1.0 3013 3013 IDISA_ALWAYS_INLINE bitblock128_t bitblock128::load_unaligned(bitblock128_t* arg1) 3014 3014 { … … 3016 3016 } 3017 3017 3018 //The total number of operations is 43018 //The total number of operations is 2.33333333333 3019 3019 template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t bitblock128::srli(bitblock128_t arg1) 3020 3020 { … … 3022 3022 } 3023 3023 3024 //The total number of operations is 1 3024 //The total number of operations is 1.0 3025 3025 IDISA_ALWAYS_INLINE void bitblock128::store_aligned(bitblock128_t* arg1, bitblock128_t arg2) 3026 3026 { … … 3028 3028 } 3029 3029 3030 //The total number of operations is 2 23030 //The total number of operations is 20.3333333333 3031 3031 IDISA_ALWAYS_INLINE uint64_t bitblock128::popcount(bitblock128_t arg1) 3032 3032 { … … 3034 3034 } 3035 3035 3036 //The total number of operations is 2 3036 //The total number of operations is 2.0 3037 3037 IDISA_ALWAYS_INLINE bool bitblock128::all(bitblock128_t arg1) 3038 3038 { … … 3040 3040 } 3041 3041 3042 //The total number of operations is 11 3042 //The total number of operations is 11.0 3043 3043 IDISA_ALWAYS_INLINE bitblock128_t bitblock128::srl(bitblock128_t arg1, bitblock128_t arg2) 3044 3044 { … … 3046 3046 } 3047 3047 3048 //The total number of operations is 43048 //The total number of operations is 2.33333333333 3049 3049 template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t bitblock128::slli(bitblock128_t arg1) 3050 3050 { … … 3052 3052 } 3053 3053 3054 //The total number of operations is 2 3054 //The total number of operations is 2.0 3055 3055 IDISA_ALWAYS_INLINE bool bitblock128::any(bitblock128_t arg1) 3056 3056 { … … 3058 3058 } 3059 3059 3060 //The total number of operations is 1 3060 //The total number of operations is 1.0 3061 3061 IDISA_ALWAYS_INLINE bitblock128_t bitblock128::load_aligned(bitblock128_t* arg1) 3062 3062 { … … 3064 3064 } 3065 3065 3066 //The total number of operations is 1 3066 //The total number of operations is 1.0 3067 3067 IDISA_ALWAYS_INLINE void bitblock128::store_unaligned(bitblock128_t* arg1, bitblock128_t arg2) 3068 3068 {
Note: See TracChangeset
for help on using the changeset viewer.