1213 bh.consume(r);
1214 }
1215
1216 @Benchmark
1217 public void rearrange(Blackhole bh) {
1218 long[] a = fa.apply(SPECIES.length());
1219 int[] order = fs.apply(a.length, SPECIES.length());
1220 long[] r = fr.apply(SPECIES.length());
1221
1222 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1223 for (int i = 0; i < a.length; i += SPECIES.length()) {
1224 LongVector av = LongVector.fromArray(SPECIES, a, i);
1225 av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i);
1226 }
1227 }
1228
1229 bh.consume(r);
1230 }
1231
1232 @Benchmark
1233 public void extract(Blackhole bh) {
1234 long[] a = fa.apply(SPECIES.length());
1235 long[] r = fr.apply(SPECIES.length());
1236
1237 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1238 for (int i = 0; i < a.length; i += SPECIES.length()) {
1239 LongVector av = LongVector.fromArray(SPECIES, a, i);
1240 int num_lanes = SPECIES.length();
1241 // Manually unroll because full unroll happens after intrinsification.
1242 // Unroll is needed because get intrinsic requires for index to be a known constant.
1243 if (num_lanes == 1) {
1244 r[i]=av.lane(0);
1245 } else if (num_lanes == 2) {
1246 r[i]=av.lane(0);
1247 r[i+1]=av.lane(1);
1248 } else if (num_lanes == 4) {
1249 r[i]=av.lane(0);
1250 r[i+1]=av.lane(1);
1251 r[i+2]=av.lane(2);
1252 r[i+3]=av.lane(3);
1253 } else if (num_lanes == 8) {
|
1213 bh.consume(r);
1214 }
1215
1216 @Benchmark
1217 public void rearrange(Blackhole bh) {
1218 long[] a = fa.apply(SPECIES.length());
1219 int[] order = fs.apply(a.length, SPECIES.length());
1220 long[] r = fr.apply(SPECIES.length());
1221
1222 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1223 for (int i = 0; i < a.length; i += SPECIES.length()) {
1224 LongVector av = LongVector.fromArray(SPECIES, a, i);
1225 av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i);
1226 }
1227 }
1228
1229 bh.consume(r);
1230 }
1231
1232 @Benchmark
1233 public void laneextract(Blackhole bh) {
1234 long[] a = fa.apply(SPECIES.length());
1235 long[] r = fr.apply(SPECIES.length());
1236
1237 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1238 for (int i = 0; i < a.length; i += SPECIES.length()) {
1239 LongVector av = LongVector.fromArray(SPECIES, a, i);
1240 int num_lanes = SPECIES.length();
1241 // Manually unroll because full unroll happens after intrinsification.
1242 // Unroll is needed because get intrinsic requires for index to be a known constant.
1243 if (num_lanes == 1) {
1244 r[i]=av.lane(0);
1245 } else if (num_lanes == 2) {
1246 r[i]=av.lane(0);
1247 r[i+1]=av.lane(1);
1248 } else if (num_lanes == 4) {
1249 r[i]=av.lane(0);
1250 r[i+1]=av.lane(1);
1251 r[i+2]=av.lane(2);
1252 r[i+3]=av.lane(3);
1253 } else if (num_lanes == 8) {
|