< prev index next >
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteMaxVector.java
Print this page
rev 55891 : 8222897: [vector] Renaming of shift, rotate operations. Few other api changes.
Summary: Renaming of shift, rotate operations. Few other api changes.
Reviewed-by: jrose, briangoetz
rev 55894 : 8222897: [vector] Renaming of shift, rotate operations. Few other api changes.
Summary: Renaming of shift, rotate operations. Few other api changes.
Reviewed-by: jrose, briangoetz
*** 152,162 ****
throw new IllegalArgumentException("Vector length this species length differ");
return VectorIntrinsics.cast(
ByteMaxVector.class,
byte.class, LENGTH,
! s.boxType(),
s.elementType(), LENGTH,
this, s,
(species, vector) -> vector.castDefault(species)
);
}
--- 152,162 ----
throw new IllegalArgumentException("Vector length this species length differ");
return VectorIntrinsics.cast(
ByteMaxVector.class,
byte.class, LENGTH,
! s.vectorType(),
s.elementType(), LENGTH,
this, s,
(species, vector) -> vector.castDefault(species)
);
}
*** 290,337 ****
@Override
@ForceInline
public ByteVector reshape(VectorSpecies<Byte> s) {
Objects.requireNonNull(s);
! if (s.bitSize() == 64 && (s.boxType() == Byte64Vector.class)) {
return VectorIntrinsics.reinterpret(
ByteMaxVector.class,
byte.class, LENGTH,
Byte64Vector.class,
byte.class, Byte64Vector.LENGTH,
this, s,
(species, vector) -> (ByteVector) vector.defaultReinterpret(species)
);
! } else if (s.bitSize() == 128 && (s.boxType() == Byte128Vector.class)) {
return VectorIntrinsics.reinterpret(
ByteMaxVector.class,
byte.class, LENGTH,
Byte128Vector.class,
byte.class, Byte128Vector.LENGTH,
this, s,
(species, vector) -> (ByteVector) vector.defaultReinterpret(species)
);
! } else if (s.bitSize() == 256 && (s.boxType() == Byte256Vector.class)) {
return VectorIntrinsics.reinterpret(
ByteMaxVector.class,
byte.class, LENGTH,
Byte256Vector.class,
byte.class, Byte256Vector.LENGTH,
this, s,
(species, vector) -> (ByteVector) vector.defaultReinterpret(species)
);
! } else if (s.bitSize() == 512 && (s.boxType() == Byte512Vector.class)) {
return VectorIntrinsics.reinterpret(
ByteMaxVector.class,
byte.class, LENGTH,
Byte512Vector.class,
byte.class, Byte512Vector.LENGTH,
this, s,
(species, vector) -> (ByteVector) vector.defaultReinterpret(species)
);
} else if ((s.bitSize() > 0) && (s.bitSize() <= 2048)
! && (s.bitSize() % 128 == 0) && (s.boxType() == ByteMaxVector.class)) {
return VectorIntrinsics.reinterpret(
ByteMaxVector.class,
byte.class, LENGTH,
ByteMaxVector.class,
byte.class, ByteMaxVector.LENGTH,
--- 290,337 ----
@Override
@ForceInline
public ByteVector reshape(VectorSpecies<Byte> s) {
Objects.requireNonNull(s);
! if (s.bitSize() == 64 && (s.vectorType() == Byte64Vector.class)) {
return VectorIntrinsics.reinterpret(
ByteMaxVector.class,
byte.class, LENGTH,
Byte64Vector.class,
byte.class, Byte64Vector.LENGTH,
this, s,
(species, vector) -> (ByteVector) vector.defaultReinterpret(species)
);
! } else if (s.bitSize() == 128 && (s.vectorType() == Byte128Vector.class)) {
return VectorIntrinsics.reinterpret(
ByteMaxVector.class,
byte.class, LENGTH,
Byte128Vector.class,
byte.class, Byte128Vector.LENGTH,
this, s,
(species, vector) -> (ByteVector) vector.defaultReinterpret(species)
);
! } else if (s.bitSize() == 256 && (s.vectorType() == Byte256Vector.class)) {
return VectorIntrinsics.reinterpret(
ByteMaxVector.class,
byte.class, LENGTH,
Byte256Vector.class,
byte.class, Byte256Vector.LENGTH,
this, s,
(species, vector) -> (ByteVector) vector.defaultReinterpret(species)
);
! } else if (s.bitSize() == 512 && (s.vectorType() == Byte512Vector.class)) {
return VectorIntrinsics.reinterpret(
ByteMaxVector.class,
byte.class, LENGTH,
Byte512Vector.class,
byte.class, Byte512Vector.LENGTH,
this, s,
(species, vector) -> (ByteVector) vector.defaultReinterpret(species)
);
} else if ((s.bitSize() > 0) && (s.bitSize() <= 2048)
! && (s.bitSize() % 128 == 0) && (s.vectorType() == ByteMaxVector.class)) {
return VectorIntrinsics.reinterpret(
ByteMaxVector.class,
byte.class, LENGTH,
ByteMaxVector.class,
byte.class, ByteMaxVector.LENGTH,
*** 654,815 ****
return blend(xor(v), m);
}
@Override
@ForceInline
! public ByteMaxVector shiftL(int s) {
return VectorIntrinsics.broadcastInt(
VECTOR_OP_LSHIFT, ByteMaxVector.class, byte.class, LENGTH,
this, s,
! (v, i) -> v.uOp((__, a) -> (byte) (a << (i & 7))));
}
@Override
@ForceInline
! public ByteMaxVector shiftL(int s, VectorMask<Byte> m) {
! return blend(shiftL(s), m);
}
@Override
@ForceInline
! public ByteMaxVector shiftR(int s) {
return VectorIntrinsics.broadcastInt(
VECTOR_OP_URSHIFT, ByteMaxVector.class, byte.class, LENGTH,
this, s,
! (v, i) -> v.uOp((__, a) -> (byte) ((a & 0xFF) >>> (i & 7))));
}
@Override
@ForceInline
! public ByteMaxVector shiftR(int s, VectorMask<Byte> m) {
! return blend(shiftR(s), m);
}
@Override
@ForceInline
! public ByteMaxVector aShiftR(int s) {
return VectorIntrinsics.broadcastInt(
VECTOR_OP_RSHIFT, ByteMaxVector.class, byte.class, LENGTH,
this, s,
! (v, i) -> v.uOp((__, a) -> (byte) (a >> (i & 7))));
}
@Override
@ForceInline
! public ByteMaxVector aShiftR(int s, VectorMask<Byte> m) {
! return blend(aShiftR(s), m);
}
// Ternary operations
// Type specific horizontal reductions
@Override
@ForceInline
! public byte addAll() {
return (byte) VectorIntrinsics.reductionCoerced(
VECTOR_OP_ADD, ByteMaxVector.class, byte.class, LENGTH,
this,
v -> (long) v.rOp((byte) 0, (i, a, b) -> (byte) (a + b)));
}
@Override
@ForceInline
! public byte andAll() {
return (byte) VectorIntrinsics.reductionCoerced(
VECTOR_OP_AND, ByteMaxVector.class, byte.class, LENGTH,
this,
v -> (long) v.rOp((byte) -1, (i, a, b) -> (byte) (a & b)));
}
@Override
@ForceInline
! public byte andAll(VectorMask<Byte> m) {
! return ByteVector.broadcast(SPECIES, (byte) -1).blend(this, m).andAll();
}
@Override
@ForceInline
! public byte minAll() {
return (byte) VectorIntrinsics.reductionCoerced(
VECTOR_OP_MIN, ByteMaxVector.class, byte.class, LENGTH,
this,
v -> (long) v.rOp(Byte.MAX_VALUE , (i, a, b) -> (byte) Math.min(a, b)));
}
@Override
@ForceInline
! public byte maxAll() {
return (byte) VectorIntrinsics.reductionCoerced(
VECTOR_OP_MAX, ByteMaxVector.class, byte.class, LENGTH,
this,
v -> (long) v.rOp(Byte.MIN_VALUE , (i, a, b) -> (byte) Math.max(a, b)));
}
@Override
@ForceInline
! public byte mulAll() {
return (byte) VectorIntrinsics.reductionCoerced(
VECTOR_OP_MUL, ByteMaxVector.class, byte.class, LENGTH,
this,
v -> (long) v.rOp((byte) 1, (i, a, b) -> (byte) (a * b)));
}
@Override
@ForceInline
! public byte orAll() {
return (byte) VectorIntrinsics.reductionCoerced(
VECTOR_OP_OR, ByteMaxVector.class, byte.class, LENGTH,
this,
v -> (long) v.rOp((byte) 0, (i, a, b) -> (byte) (a | b)));
}
@Override
@ForceInline
! public byte orAll(VectorMask<Byte> m) {
! return ByteVector.broadcast(SPECIES, (byte) 0).blend(this, m).orAll();
}
@Override
@ForceInline
! public byte xorAll() {
return (byte) VectorIntrinsics.reductionCoerced(
VECTOR_OP_XOR, ByteMaxVector.class, byte.class, LENGTH,
this,
v -> (long) v.rOp((byte) 0, (i, a, b) -> (byte) (a ^ b)));
}
@Override
@ForceInline
! public byte xorAll(VectorMask<Byte> m) {
! return ByteVector.broadcast(SPECIES, (byte) 0).blend(this, m).xorAll();
}
@Override
@ForceInline
! public byte addAll(VectorMask<Byte> m) {
! return ByteVector.broadcast(SPECIES, (byte) 0).blend(this, m).addAll();
}
@Override
@ForceInline
! public byte mulAll(VectorMask<Byte> m) {
! return ByteVector.broadcast(SPECIES, (byte) 1).blend(this, m).mulAll();
}
@Override
@ForceInline
! public byte minAll(VectorMask<Byte> m) {
! return ByteVector.broadcast(SPECIES, Byte.MAX_VALUE).blend(this, m).minAll();
}
@Override
@ForceInline
! public byte maxAll(VectorMask<Byte> m) {
! return ByteVector.broadcast(SPECIES, Byte.MIN_VALUE).blend(this, m).maxAll();
}
@Override
@ForceInline
public VectorShuffle<Byte> toShuffle() {
--- 654,843 ----
return blend(xor(v), m);
}
@Override
@ForceInline
! public ByteMaxVector shiftLeft(int s) {
return VectorIntrinsics.broadcastInt(
VECTOR_OP_LSHIFT, ByteMaxVector.class, byte.class, LENGTH,
this, s,
! (v, i) -> v.uOp((__, a) -> (byte) (a << (i & 0x7))));
}
@Override
@ForceInline
! public ByteMaxVector shiftLeft(int s, VectorMask<Byte> m) {
! return blend(shiftLeft(s), m);
}
@Override
@ForceInline
! public ByteMaxVector shiftLeft(Vector<Byte> s) {
! ByteMaxVector shiftv = (ByteMaxVector)s;
! // As per shift specification for Java, mask the shift count.
! shiftv = shiftv.and(ByteVector.broadcast(SPECIES, (byte) 0x7));
! return this.bOp(shiftv, (i, a, b) -> (byte) (a << (b & 0x7)));
! }
!
! @Override
! @ForceInline
! public ByteMaxVector shiftRight(int s) {
return VectorIntrinsics.broadcastInt(
VECTOR_OP_URSHIFT, ByteMaxVector.class, byte.class, LENGTH,
this, s,
! (v, i) -> v.uOp((__, a) -> (byte) ((a & 0xFF) >>> (i & 0x7))));
}
@Override
@ForceInline
! public ByteMaxVector shiftRight(int s, VectorMask<Byte> m) {
! return blend(shiftRight(s), m);
}
@Override
@ForceInline
! public ByteMaxVector shiftRight(Vector<Byte> s) {
! ByteMaxVector shiftv = (ByteMaxVector)s;
! // As per shift specification for Java, mask the shift count.
! shiftv = shiftv.and(ByteVector.broadcast(SPECIES, (byte) 0x7));
! return this.bOp(shiftv, (i, a, b) -> (byte) (a >>> (b & 0x7)));
! }
!
! @Override
! @ForceInline
! public ByteMaxVector shiftArithmeticRight(int s) {
return VectorIntrinsics.broadcastInt(
VECTOR_OP_RSHIFT, ByteMaxVector.class, byte.class, LENGTH,
this, s,
! (v, i) -> v.uOp((__, a) -> (byte) (a >> (i & 0x7))));
! }
!
! @Override
! @ForceInline
! public ByteMaxVector shiftArithmeticRight(int s, VectorMask<Byte> m) {
! return blend(shiftArithmeticRight(s), m);
}
@Override
@ForceInline
! public ByteMaxVector shiftArithmeticRight(Vector<Byte> s) {
! ByteMaxVector shiftv = (ByteMaxVector)s;
! // As per shift specification for Java, mask the shift count.
! shiftv = shiftv.and(ByteVector.broadcast(SPECIES, (byte) 0x7));
! return this.bOp(shiftv, (i, a, b) -> (byte) (a >> (b & 0x7)));
}
+
// Ternary operations
// Type specific horizontal reductions
@Override
@ForceInline
! public byte addLanes() {
return (byte) VectorIntrinsics.reductionCoerced(
VECTOR_OP_ADD, ByteMaxVector.class, byte.class, LENGTH,
this,
v -> (long) v.rOp((byte) 0, (i, a, b) -> (byte) (a + b)));
}
@Override
@ForceInline
! public byte andLanes() {
return (byte) VectorIntrinsics.reductionCoerced(
VECTOR_OP_AND, ByteMaxVector.class, byte.class, LENGTH,
this,
v -> (long) v.rOp((byte) -1, (i, a, b) -> (byte) (a & b)));
}
@Override
@ForceInline
! public byte andLanes(VectorMask<Byte> m) {
! return ByteVector.broadcast(SPECIES, (byte) -1).blend(this, m).andLanes();
}
@Override
@ForceInline
! public byte minLanes() {
return (byte) VectorIntrinsics.reductionCoerced(
VECTOR_OP_MIN, ByteMaxVector.class, byte.class, LENGTH,
this,
v -> (long) v.rOp(Byte.MAX_VALUE , (i, a, b) -> (byte) Math.min(a, b)));
}
@Override
@ForceInline
! public byte maxLanes() {
return (byte) VectorIntrinsics.reductionCoerced(
VECTOR_OP_MAX, ByteMaxVector.class, byte.class, LENGTH,
this,
v -> (long) v.rOp(Byte.MIN_VALUE , (i, a, b) -> (byte) Math.max(a, b)));
}
@Override
@ForceInline
! public byte mulLanes() {
return (byte) VectorIntrinsics.reductionCoerced(
VECTOR_OP_MUL, ByteMaxVector.class, byte.class, LENGTH,
this,
v -> (long) v.rOp((byte) 1, (i, a, b) -> (byte) (a * b)));
}
@Override
@ForceInline
! public byte orLanes() {
return (byte) VectorIntrinsics.reductionCoerced(
VECTOR_OP_OR, ByteMaxVector.class, byte.class, LENGTH,
this,
v -> (long) v.rOp((byte) 0, (i, a, b) -> (byte) (a | b)));
}
@Override
@ForceInline
! public byte orLanes(VectorMask<Byte> m) {
! return ByteVector.broadcast(SPECIES, (byte) 0).blend(this, m).orLanes();
}
@Override
@ForceInline
! public byte xorLanes() {
return (byte) VectorIntrinsics.reductionCoerced(
VECTOR_OP_XOR, ByteMaxVector.class, byte.class, LENGTH,
this,
v -> (long) v.rOp((byte) 0, (i, a, b) -> (byte) (a ^ b)));
}
@Override
@ForceInline
! public byte xorLanes(VectorMask<Byte> m) {
! return ByteVector.broadcast(SPECIES, (byte) 0).blend(this, m).xorLanes();
}
@Override
@ForceInline
! public byte addLanes(VectorMask<Byte> m) {
! return ByteVector.broadcast(SPECIES, (byte) 0).blend(this, m).addLanes();
}
@Override
@ForceInline
! public byte mulLanes(VectorMask<Byte> m) {
! return ByteVector.broadcast(SPECIES, (byte) 1).blend(this, m).mulLanes();
}
@Override
@ForceInline
! public byte minLanes(VectorMask<Byte> m) {
! return ByteVector.broadcast(SPECIES, Byte.MAX_VALUE).blend(this, m).minLanes();
}
@Override
@ForceInline
! public byte maxLanes(VectorMask<Byte> m) {
! return ByteVector.broadcast(SPECIES, Byte.MIN_VALUE).blend(this, m).maxLanes();
}
@Override
@ForceInline
public VectorShuffle<Byte> toShuffle() {
*** 1026,1046 ****
}
@Override
! public ByteMaxVector rotateEL(int j) {
byte[] vec = getElements();
byte[] res = new byte[length()];
for (int i = 0; i < length(); i++){
res[(j + i) % length()] = vec[i];
}
return new ByteMaxVector(res);
}
@Override
! public ByteMaxVector rotateER(int j) {
byte[] vec = getElements();
byte[] res = new byte[length()];
for (int i = 0; i < length(); i++){
int z = i - j;
if(j < 0) {
--- 1054,1074 ----
}
@Override
! public ByteMaxVector rotateLanesLeft(int j) {
byte[] vec = getElements();
byte[] res = new byte[length()];
for (int i = 0; i < length(); i++){
res[(j + i) % length()] = vec[i];
}
return new ByteMaxVector(res);
}
@Override
! public ByteMaxVector rotateLanesRight(int j) {
byte[] vec = getElements();
byte[] res = new byte[length()];
for (int i = 0; i < length(); i++){
int z = i - j;
if(j < 0) {
*** 1051,1071 ****
}
return new ByteMaxVector(res);
}
@Override
! public ByteMaxVector shiftEL(int j) {
byte[] vec = getElements();
byte[] res = new byte[length()];
for (int i = 0; i < length() - j; i++) {
res[i] = vec[i + j];
}
return new ByteMaxVector(res);
}
@Override
! public ByteMaxVector shiftER(int j) {
byte[] vec = getElements();
byte[] res = new byte[length()];
for (int i = 0; i < length() - j; i++){
res[i + j] = vec[i];
}
--- 1079,1099 ----
}
return new ByteMaxVector(res);
}
@Override
! public ByteMaxVector shiftLanesLeft(int j) {
byte[] vec = getElements();
byte[] res = new byte[length()];
for (int i = 0; i < length() - j; i++) {
res[i] = vec[i + j];
}
return new ByteMaxVector(res);
}
@Override
! public ByteMaxVector shiftLanesRight(int j) {
byte[] vec = getElements();
byte[] res = new byte[length()];
for (int i = 0; i < length() - j; i++){
res[i + j] = vec[i];
}
< prev index next >