792 ByteVector av = ByteVector.fromArray(SPECIES, a, i);
793 av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i);
794 }
795 }
796
797 bh.consume(r);
798 }
799
800 @Benchmark
801 public void extract(Blackhole bh) {
802 byte[] a = fa.apply(SPECIES.length());
803 byte[] r = fr.apply(SPECIES.length());
804
805 for (int ic = 0; ic < INVOC_COUNT; ic++) {
806 for (int i = 0; i < a.length; i += SPECIES.length()) {
807 ByteVector av = ByteVector.fromArray(SPECIES, a, i);
808 int num_lanes = SPECIES.length();
809 // Manually unroll because full unroll happens after intrinsification.
810 // Unroll is needed because get intrinsic requires for index to be a known constant.
811 if (num_lanes == 1) {
812 r[i]=av.get(0);
813 } else if (num_lanes == 2) {
814 r[i]=av.get(0);
815 r[i+1]=av.get(1);
816 } else if (num_lanes == 4) {
817 r[i]=av.get(0);
818 r[i+1]=av.get(1);
819 r[i+2]=av.get(2);
820 r[i+3]=av.get(3);
821 } else if (num_lanes == 8) {
822 r[i]=av.get(0);
823 r[i+1]=av.get(1);
824 r[i+2]=av.get(2);
825 r[i+3]=av.get(3);
826 r[i+4]=av.get(4);
827 r[i+5]=av.get(5);
828 r[i+6]=av.get(6);
829 r[i+7]=av.get(7);
830 } else if (num_lanes == 16) {
831 r[i]=av.get(0);
832 r[i+1]=av.get(1);
833 r[i+2]=av.get(2);
834 r[i+3]=av.get(3);
835 r[i+4]=av.get(4);
836 r[i+5]=av.get(5);
837 r[i+6]=av.get(6);
838 r[i+7]=av.get(7);
839 r[i+8]=av.get(8);
840 r[i+9]=av.get(9);
841 r[i+10]=av.get(10);
842 r[i+11]=av.get(11);
843 r[i+12]=av.get(12);
844 r[i+13]=av.get(13);
845 r[i+14]=av.get(14);
846 r[i+15]=av.get(15);
847 } else if (num_lanes == 32) {
848 r[i]=av.get(0);
849 r[i+1]=av.get(1);
850 r[i+2]=av.get(2);
851 r[i+3]=av.get(3);
852 r[i+4]=av.get(4);
853 r[i+5]=av.get(5);
854 r[i+6]=av.get(6);
855 r[i+7]=av.get(7);
856 r[i+8]=av.get(8);
857 r[i+9]=av.get(9);
858 r[i+10]=av.get(10);
859 r[i+11]=av.get(11);
860 r[i+12]=av.get(12);
861 r[i+13]=av.get(13);
862 r[i+14]=av.get(14);
863 r[i+15]=av.get(15);
864 r[i+16]=av.get(16);
865 r[i+17]=av.get(17);
866 r[i+18]=av.get(18);
867 r[i+19]=av.get(19);
868 r[i+20]=av.get(20);
869 r[i+21]=av.get(21);
870 r[i+22]=av.get(22);
871 r[i+23]=av.get(23);
872 r[i+24]=av.get(24);
873 r[i+25]=av.get(25);
874 r[i+26]=av.get(26);
875 r[i+27]=av.get(27);
876 r[i+28]=av.get(28);
877 r[i+29]=av.get(29);
878 r[i+30]=av.get(30);
879 r[i+31]=av.get(31);
880 } else if (num_lanes == 64) {
881 r[i]=av.get(0);
882 r[i+1]=av.get(1);
883 r[i+2]=av.get(2);
884 r[i+3]=av.get(3);
885 r[i+4]=av.get(4);
886 r[i+5]=av.get(5);
887 r[i+6]=av.get(6);
888 r[i+7]=av.get(7);
889 r[i+8]=av.get(8);
890 r[i+9]=av.get(9);
891 r[i+10]=av.get(10);
892 r[i+11]=av.get(11);
893 r[i+12]=av.get(12);
894 r[i+13]=av.get(13);
895 r[i+14]=av.get(14);
896 r[i+15]=av.get(15);
897 r[i+16]=av.get(16);
898 r[i+17]=av.get(17);
899 r[i+18]=av.get(18);
900 r[i+19]=av.get(19);
901 r[i+20]=av.get(20);
902 r[i+21]=av.get(21);
903 r[i+22]=av.get(22);
904 r[i+23]=av.get(23);
905 r[i+24]=av.get(24);
906 r[i+25]=av.get(25);
907 r[i+26]=av.get(26);
908 r[i+27]=av.get(27);
909 r[i+28]=av.get(28);
910 r[i+29]=av.get(29);
911 r[i+30]=av.get(30);
912 r[i+31]=av.get(31);
913 r[i+32]=av.get(32);
914 r[i+33]=av.get(33);
915 r[i+34]=av.get(34);
916 r[i+35]=av.get(35);
917 r[i+36]=av.get(36);
918 r[i+37]=av.get(37);
919 r[i+38]=av.get(38);
920 r[i+39]=av.get(39);
921 r[i+40]=av.get(40);
922 r[i+41]=av.get(41);
923 r[i+42]=av.get(42);
924 r[i+43]=av.get(43);
925 r[i+44]=av.get(44);
926 r[i+45]=av.get(45);
927 r[i+46]=av.get(46);
928 r[i+47]=av.get(47);
929 r[i+48]=av.get(48);
930 r[i+49]=av.get(49);
931 r[i+50]=av.get(50);
932 r[i+51]=av.get(51);
933 r[i+52]=av.get(52);
934 r[i+53]=av.get(53);
935 r[i+54]=av.get(54);
936 r[i+55]=av.get(55);
937 r[i+56]=av.get(56);
938 r[i+57]=av.get(57);
939 r[i+58]=av.get(58);
940 r[i+59]=av.get(59);
941 r[i+60]=av.get(60);
942 r[i+61]=av.get(61);
943 r[i+62]=av.get(62);
944 r[i+63]=av.get(63);
945 } else {
946 for (int j = 0; j < SPECIES.length(); j++) {
947 r[i+j]=av.get(j);
948 }
949 }
950 }
951 }
952
953 bh.consume(r);
954 }
955
956
957
958
959
960
961
962
963
964
965
966
967
|
792 ByteVector av = ByteVector.fromArray(SPECIES, a, i);
793 av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i);
794 }
795 }
796
797 bh.consume(r);
798 }
799
800 @Benchmark
801 public void extract(Blackhole bh) {
802 byte[] a = fa.apply(SPECIES.length());
803 byte[] r = fr.apply(SPECIES.length());
804
805 for (int ic = 0; ic < INVOC_COUNT; ic++) {
806 for (int i = 0; i < a.length; i += SPECIES.length()) {
807 ByteVector av = ByteVector.fromArray(SPECIES, a, i);
808 int num_lanes = SPECIES.length();
809 // Manually unroll because full unroll happens after intrinsification.
810 // Unroll is needed because get intrinsic requires for index to be a known constant.
811 if (num_lanes == 1) {
812 r[i]=av.lane(0);
813 } else if (num_lanes == 2) {
814 r[i]=av.lane(0);
815 r[i+1]=av.lane(1);
816 } else if (num_lanes == 4) {
817 r[i]=av.lane(0);
818 r[i+1]=av.lane(1);
819 r[i+2]=av.lane(2);
820 r[i+3]=av.lane(3);
821 } else if (num_lanes == 8) {
822 r[i]=av.lane(0);
823 r[i+1]=av.lane(1);
824 r[i+2]=av.lane(2);
825 r[i+3]=av.lane(3);
826 r[i+4]=av.lane(4);
827 r[i+5]=av.lane(5);
828 r[i+6]=av.lane(6);
829 r[i+7]=av.lane(7);
830 } else if (num_lanes == 16) {
831 r[i]=av.lane(0);
832 r[i+1]=av.lane(1);
833 r[i+2]=av.lane(2);
834 r[i+3]=av.lane(3);
835 r[i+4]=av.lane(4);
836 r[i+5]=av.lane(5);
837 r[i+6]=av.lane(6);
838 r[i+7]=av.lane(7);
839 r[i+8]=av.lane(8);
840 r[i+9]=av.lane(9);
841 r[i+10]=av.lane(10);
842 r[i+11]=av.lane(11);
843 r[i+12]=av.lane(12);
844 r[i+13]=av.lane(13);
845 r[i+14]=av.lane(14);
846 r[i+15]=av.lane(15);
847 } else if (num_lanes == 32) {
848 r[i]=av.lane(0);
849 r[i+1]=av.lane(1);
850 r[i+2]=av.lane(2);
851 r[i+3]=av.lane(3);
852 r[i+4]=av.lane(4);
853 r[i+5]=av.lane(5);
854 r[i+6]=av.lane(6);
855 r[i+7]=av.lane(7);
856 r[i+8]=av.lane(8);
857 r[i+9]=av.lane(9);
858 r[i+10]=av.lane(10);
859 r[i+11]=av.lane(11);
860 r[i+12]=av.lane(12);
861 r[i+13]=av.lane(13);
862 r[i+14]=av.lane(14);
863 r[i+15]=av.lane(15);
864 r[i+16]=av.lane(16);
865 r[i+17]=av.lane(17);
866 r[i+18]=av.lane(18);
867 r[i+19]=av.lane(19);
868 r[i+20]=av.lane(20);
869 r[i+21]=av.lane(21);
870 r[i+22]=av.lane(22);
871 r[i+23]=av.lane(23);
872 r[i+24]=av.lane(24);
873 r[i+25]=av.lane(25);
874 r[i+26]=av.lane(26);
875 r[i+27]=av.lane(27);
876 r[i+28]=av.lane(28);
877 r[i+29]=av.lane(29);
878 r[i+30]=av.lane(30);
879 r[i+31]=av.lane(31);
880 } else if (num_lanes == 64) {
881 r[i]=av.lane(0);
882 r[i+1]=av.lane(1);
883 r[i+2]=av.lane(2);
884 r[i+3]=av.lane(3);
885 r[i+4]=av.lane(4);
886 r[i+5]=av.lane(5);
887 r[i+6]=av.lane(6);
888 r[i+7]=av.lane(7);
889 r[i+8]=av.lane(8);
890 r[i+9]=av.lane(9);
891 r[i+10]=av.lane(10);
892 r[i+11]=av.lane(11);
893 r[i+12]=av.lane(12);
894 r[i+13]=av.lane(13);
895 r[i+14]=av.lane(14);
896 r[i+15]=av.lane(15);
897 r[i+16]=av.lane(16);
898 r[i+17]=av.lane(17);
899 r[i+18]=av.lane(18);
900 r[i+19]=av.lane(19);
901 r[i+20]=av.lane(20);
902 r[i+21]=av.lane(21);
903 r[i+22]=av.lane(22);
904 r[i+23]=av.lane(23);
905 r[i+24]=av.lane(24);
906 r[i+25]=av.lane(25);
907 r[i+26]=av.lane(26);
908 r[i+27]=av.lane(27);
909 r[i+28]=av.lane(28);
910 r[i+29]=av.lane(29);
911 r[i+30]=av.lane(30);
912 r[i+31]=av.lane(31);
913 r[i+32]=av.lane(32);
914 r[i+33]=av.lane(33);
915 r[i+34]=av.lane(34);
916 r[i+35]=av.lane(35);
917 r[i+36]=av.lane(36);
918 r[i+37]=av.lane(37);
919 r[i+38]=av.lane(38);
920 r[i+39]=av.lane(39);
921 r[i+40]=av.lane(40);
922 r[i+41]=av.lane(41);
923 r[i+42]=av.lane(42);
924 r[i+43]=av.lane(43);
925 r[i+44]=av.lane(44);
926 r[i+45]=av.lane(45);
927 r[i+46]=av.lane(46);
928 r[i+47]=av.lane(47);
929 r[i+48]=av.lane(48);
930 r[i+49]=av.lane(49);
931 r[i+50]=av.lane(50);
932 r[i+51]=av.lane(51);
933 r[i+52]=av.lane(52);
934 r[i+53]=av.lane(53);
935 r[i+54]=av.lane(54);
936 r[i+55]=av.lane(55);
937 r[i+56]=av.lane(56);
938 r[i+57]=av.lane(57);
939 r[i+58]=av.lane(58);
940 r[i+59]=av.lane(59);
941 r[i+60]=av.lane(60);
942 r[i+61]=av.lane(61);
943 r[i+62]=av.lane(62);
944 r[i+63]=av.lane(63);
945 } else {
946 for (int j = 0; j < SPECIES.length(); j++) {
947 r[i+j]=av.lane(j);
948 }
949 }
950 }
951 }
952
953 bh.consume(r);
954 }
955
956
957
958
959
960
961
962
963
964
965
966
967
|