mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
8256973: Intrinsic creation for VectorMask query (lastTrue,firstTrue,trueCount) APIs
Reviewed-by: psandoz, vlivanov
This commit is contained in:
parent
65a8bf58be
commit
7aa65685b8
81 changed files with 1817 additions and 33 deletions
|
@ -114,36 +114,6 @@ abstract class AbstractMask<E> extends VectorMask<E> {
|
|||
return (VectorMask<F>) this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int trueCount() {
|
||||
//FIXME: use a population count intrinsic here
|
||||
int c = 0;
|
||||
for (boolean i : getBits()) {
|
||||
if (i) c++;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int firstTrue() {
|
||||
//FIXME: use a count trailing zeros intrinsic here
|
||||
boolean[] bits = getBits();
|
||||
for (int i = 0; i < bits.length; i++) {
|
||||
if (bits[i]) return i;
|
||||
}
|
||||
return bits.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int lastTrue() {
|
||||
//FIXME: use a count leading zeros intrinsic here
|
||||
boolean[] bits = getBits();
|
||||
for (int i = bits.length-1; i >= 0; i--) {
|
||||
if (bits[i]) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VectorMask<E> eq(VectorMask<E> m) {
|
||||
// FIXME: Generate good code here.
|
||||
|
@ -173,6 +143,31 @@ abstract class AbstractMask<E> extends VectorMask<E> {
|
|||
return true;
|
||||
}
|
||||
|
||||
/*package-private*/
|
||||
static int trueCountHelper(boolean[] bits) {
|
||||
int c = 0;
|
||||
for (boolean i : bits) {
|
||||
if (i) c++;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
/*package-private*/
|
||||
static int firstTrueHelper(boolean[] bits) {
|
||||
for (int i = 0; i < bits.length; i++) {
|
||||
if (bits[i]) return i;
|
||||
}
|
||||
return bits.length;
|
||||
}
|
||||
|
||||
/*package-private*/
|
||||
static int lastTrueHelper(boolean[] bits) {
|
||||
for (int i = bits.length-1; i >= 0; i--) {
|
||||
if (bits[i]) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public VectorMask<E> indexInRange(int offset, int limit) {
|
||||
|
|
|
@ -666,6 +666,29 @@ final class Byte128Vector extends ByteVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Byte128Mask.class, byte.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Byte128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Byte128Mask.class, byte.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Byte128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Byte128Mask.class, byte.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Byte128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -698,6 +698,29 @@ final class Byte256Vector extends ByteVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Byte256Mask.class, byte.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Byte256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Byte256Mask.class, byte.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Byte256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Byte256Mask.class, byte.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Byte256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -762,6 +762,29 @@ final class Byte512Vector extends ByteVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Byte512Mask.class, byte.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Byte512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Byte512Mask.class, byte.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Byte512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Byte512Mask.class, byte.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Byte512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -650,6 +650,29 @@ final class Byte64Vector extends ByteVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Byte64Mask.class, byte.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Byte64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Byte64Mask.class, byte.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Byte64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Byte64Mask.class, byte.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Byte64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -636,6 +636,29 @@ final class ByteMaxVector extends ByteVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, ByteMaxMask.class, byte.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((ByteMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, ByteMaxMask.class, byte.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((ByteMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, ByteMaxMask.class, byte.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((ByteMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -634,6 +634,29 @@ final class Double128Vector extends DoubleVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Double128Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Double128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Double128Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Double128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Double128Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Double128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -638,6 +638,29 @@ final class Double256Vector extends DoubleVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Double256Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Double256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Double256Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Double256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Double256Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Double256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -646,6 +646,29 @@ final class Double512Vector extends DoubleVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Double512Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Double512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Double512Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Double512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Double512Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Double512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -632,6 +632,29 @@ final class Double64Vector extends DoubleVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Double64Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Double64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Double64Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Double64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Double64Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Double64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -631,6 +631,29 @@ final class DoubleMaxVector extends DoubleVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, DoubleMaxMask.class, long.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((DoubleMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, DoubleMaxMask.class, long.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((DoubleMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, DoubleMaxMask.class, long.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((DoubleMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -638,6 +638,29 @@ final class Float128Vector extends FloatVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Float128Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Float128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Float128Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Float128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Float128Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Float128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -646,6 +646,29 @@ final class Float256Vector extends FloatVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Float256Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Float256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Float256Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Float256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Float256Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Float256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -662,6 +662,29 @@ final class Float512Vector extends FloatVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Float512Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Float512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Float512Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Float512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Float512Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Float512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -634,6 +634,29 @@ final class Float64Vector extends FloatVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Float64Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Float64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Float64Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Float64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Float64Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Float64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -631,6 +631,29 @@ final class FloatMaxVector extends FloatVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, FloatMaxMask.class, int.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((FloatMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, FloatMaxMask.class, int.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((FloatMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, FloatMaxMask.class, int.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((FloatMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -642,6 +642,29 @@ final class Int128Vector extends IntVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Int128Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Int128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Int128Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Int128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Int128Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Int128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -650,6 +650,29 @@ final class Int256Vector extends IntVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Int256Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Int256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Int256Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Int256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Int256Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Int256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -666,6 +666,29 @@ final class Int512Vector extends IntVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Int512Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Int512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Int512Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Int512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Int512Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Int512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -638,6 +638,29 @@ final class Int64Vector extends IntVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Int64Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Int64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Int64Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Int64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Int64Mask.class, int.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Int64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -636,6 +636,29 @@ final class IntMaxVector extends IntVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, IntMaxMask.class, int.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((IntMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, IntMaxMask.class, int.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((IntMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, IntMaxMask.class, int.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((IntMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -628,6 +628,29 @@ final class Long128Vector extends LongVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Long128Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Long128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Long128Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Long128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Long128Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Long128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -632,6 +632,29 @@ final class Long256Vector extends LongVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Long256Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Long256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Long256Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Long256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Long256Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Long256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -640,6 +640,29 @@ final class Long512Vector extends LongVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Long512Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Long512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Long512Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Long512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Long512Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Long512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -626,6 +626,29 @@ final class Long64Vector extends LongVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Long64Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Long64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Long64Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Long64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Long64Mask.class, long.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Long64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -626,6 +626,29 @@ final class LongMaxVector extends LongVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, LongMaxMask.class, long.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((LongMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, LongMaxMask.class, long.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((LongMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, LongMaxMask.class, long.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((LongMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -650,6 +650,29 @@ final class Short128Vector extends ShortVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Short128Mask.class, short.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Short128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Short128Mask.class, short.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Short128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Short128Mask.class, short.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Short128Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -666,6 +666,29 @@ final class Short256Vector extends ShortVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Short256Mask.class, short.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Short256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Short256Mask.class, short.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Short256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Short256Mask.class, short.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Short256Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -698,6 +698,29 @@ final class Short512Vector extends ShortVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Short512Mask.class, short.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Short512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Short512Mask.class, short.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Short512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Short512Mask.class, short.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Short512Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -642,6 +642,29 @@ final class Short64Vector extends ShortVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, Short64Mask.class, short.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((Short64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, Short64Mask.class, short.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((Short64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, Short64Mask.class, short.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((Short64Mask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -636,6 +636,29 @@ final class ShortMaxVector extends ShortVector {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, ShortMaxMask.class, short.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper(((ShortMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, ShortMaxMask.class, short.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper(((ShortMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, ShortMaxMask.class, short.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper(((ShortMaxMask)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
|
@ -909,6 +909,29 @@ final class $vectortype$ extends $abstractvectortype$ {
|
|||
(m1, m2) -> m1.bOp(m2, (i, a, b) -> a ^ b));
|
||||
}
|
||||
|
||||
// Mask Query operations
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int trueCount() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_TRUECOUNT, $masktype$.class, $bitstype$.class, VLENGTH, this,
|
||||
(m) -> trueCountHelper((($masktype$)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int firstTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_FIRSTTRUE, $masktype$.class, $bitstype$.class, VLENGTH, this,
|
||||
(m) -> firstTrueHelper((($masktype$)m).getBits()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ForceInline
|
||||
public int lastTrue() {
|
||||
return VectorSupport.maskReductionCoerced(VECTOR_OP_MASK_LASTTRUE, $masktype$.class, $bitstype$.class, VLENGTH, this,
|
||||
(m) -> lastTrueHelper((($masktype$)m).getBits()));
|
||||
}
|
||||
|
||||
// Reductions
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue