The hot path of VectorShuffle checkIndexes, wrapIndexes and laneIsValid methods can be implemented using Vector API methods.
For the attached jmh TestSlice.java, performance improves as below.
Before:
Benchmark (size) Mode Cnt Score Error Units
TestSlice.vectorSliceOrigin 1024 thrpt 5 1224.698 ± 53.825 ops/ms
TestSlice.vectorSliceUnsliceOrigin 1024 thrpt 5 657.895 ± 31.945 ops/ms
After:
Benchmark (size) Mode Cnt Score Error Units
TestSlice.vectorSliceOrigin 1024 thrpt 5 11221.532 ± 88.616 ops/ms
TestSlice.vectorSliceUnsliceOrigin 1024 thrpt 5 6509.519 ± 18.102 ops/ms
For the attached jmh TestSlice.java, performance improves as below.
Before:
Benchmark (size) Mode Cnt Score Error Units
TestSlice.vectorSliceOrigin 1024 thrpt 5 1224.698 ± 53.825 ops/ms
TestSlice.vectorSliceUnsliceOrigin 1024 thrpt 5 657.895 ± 31.945 ops/ms
After:
Benchmark (size) Mode Cnt Score Error Units
TestSlice.vectorSliceOrigin 1024 thrpt 5 11221.532 ± 88.616 ops/ms
TestSlice.vectorSliceUnsliceOrigin 1024 thrpt 5 6509.519 ± 18.102 ops/ms