--- old/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short256Vector.java 2019-04-23 10:51:50.423744000 -0700 +++ new/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short256Vector.java 2019-04-23 10:51:50.001964700 -0700 @@ -155,7 +155,7 @@ return VectorIntrinsics.cast( Short256Vector.class, short.class, LENGTH, - s.boxType(), + s.vectorType(), s.elementType(), LENGTH, this, s, (species, vector) -> vector.castDefault(species) @@ -293,7 +293,7 @@ @ForceInline public ShortVector reshape(VectorSpecies s) { Objects.requireNonNull(s); - if (s.bitSize() == 64 && (s.boxType() == Short64Vector.class)) { + if (s.bitSize() == 64 && (s.vectorType() == Short64Vector.class)) { return VectorIntrinsics.reinterpret( Short256Vector.class, short.class, LENGTH, @@ -302,7 +302,7 @@ this, s, (species, vector) -> (ShortVector) vector.defaultReinterpret(species) ); - } else if (s.bitSize() == 128 && (s.boxType() == Short128Vector.class)) { + } else if (s.bitSize() == 128 && (s.vectorType() == Short128Vector.class)) { return VectorIntrinsics.reinterpret( Short256Vector.class, short.class, LENGTH, @@ -311,7 +311,7 @@ this, s, (species, vector) -> (ShortVector) vector.defaultReinterpret(species) ); - } else if (s.bitSize() == 256 && (s.boxType() == Short256Vector.class)) { + } else if (s.bitSize() == 256 && (s.vectorType() == Short256Vector.class)) { return VectorIntrinsics.reinterpret( Short256Vector.class, short.class, LENGTH, @@ -320,7 +320,7 @@ this, s, (species, vector) -> (ShortVector) vector.defaultReinterpret(species) ); - } else if (s.bitSize() == 512 && (s.boxType() == Short512Vector.class)) { + } else if (s.bitSize() == 512 && (s.vectorType() == Short512Vector.class)) { return VectorIntrinsics.reinterpret( Short256Vector.class, short.class, LENGTH, @@ -330,7 +330,7 @@ (species, vector) -> (ShortVector) vector.defaultReinterpret(species) ); } else if ((s.bitSize() > 0) && (s.bitSize() <= 2048) - && (s.bitSize() % 128 == 0) && (s.boxType() == ShortMaxVector.class)) { + && (s.bitSize() % 128 == 0) && (s.vectorType() == ShortMaxVector.class)) { return VectorIntrinsics.reinterpret( Short256Vector.class, short.class, LENGTH, @@ -657,47 +657,74 @@ @Override @ForceInline - public Short256Vector shiftL(int s) { + public Short256Vector shiftLeft(int s) { return VectorIntrinsics.broadcastInt( VECTOR_OP_LSHIFT, Short256Vector.class, short.class, LENGTH, this, s, - (v, i) -> v.uOp((__, a) -> (short) (a << (i & 15)))); + (v, i) -> v.uOp((__, a) -> (short) (a << (i & 0xF)))); } @Override @ForceInline - public Short256Vector shiftL(int s, VectorMask m) { - return blend(shiftL(s), m); + public Short256Vector shiftLeft(int s, VectorMask m) { + return blend(shiftLeft(s), m); } @Override @ForceInline - public Short256Vector shiftR(int s) { + public Short256Vector shiftLeft(Vector s) { + Short256Vector shiftv = (Short256Vector)s; + // As per shift specification for Java, mask the shift count. + shiftv = shiftv.and(ShortVector.broadcast(SPECIES, (short) 0xF)); + return this.bOp(shiftv, (i, a, b) -> (short) (a << (b & 0xF))); + } + + @Override + @ForceInline + public Short256Vector shiftRight(int s) { return VectorIntrinsics.broadcastInt( VECTOR_OP_URSHIFT, Short256Vector.class, short.class, LENGTH, this, s, - (v, i) -> v.uOp((__, a) -> (short) ((a & 0xFFFF) >>> (i & 15)))); + (v, i) -> v.uOp((__, a) -> (short) ((a & 0xFFFF) >>> (i & 0xF)))); + } + + @Override + @ForceInline + public Short256Vector shiftRight(int s, VectorMask m) { + return blend(shiftRight(s), m); } @Override @ForceInline - public Short256Vector shiftR(int s, VectorMask m) { - return blend(shiftR(s), m); + public Short256Vector shiftRight(Vector s) { + Short256Vector shiftv = (Short256Vector)s; + // As per shift specification for Java, mask the shift count. + shiftv = shiftv.and(ShortVector.broadcast(SPECIES, (short) 0xF)); + return this.bOp(shiftv, (i, a, b) -> (short) (a >>> (b & 0xF))); } @Override @ForceInline - public Short256Vector aShiftR(int s) { + public Short256Vector shiftArithmeticRight(int s) { return VectorIntrinsics.broadcastInt( VECTOR_OP_RSHIFT, Short256Vector.class, short.class, LENGTH, this, s, - (v, i) -> v.uOp((__, a) -> (short) (a >> (i & 15)))); + (v, i) -> v.uOp((__, a) -> (short) (a >> (i & 0xF)))); + } + + @Override + @ForceInline + public Short256Vector shiftArithmeticRight(int s, VectorMask m) { + return blend(shiftArithmeticRight(s), m); } @Override @ForceInline - public Short256Vector aShiftR(int s, VectorMask m) { - return blend(aShiftR(s), m); + public Short256Vector shiftArithmeticRight(Vector s) { + Short256Vector shiftv = (Short256Vector)s; + // As per shift specification for Java, mask the shift count. + shiftv = shiftv.and(ShortVector.broadcast(SPECIES, (short) 0xF)); + return this.bOp(shiftv, (i, a, b) -> (short) (a >> (b & 0xF))); } // Ternary operations @@ -1029,7 +1056,7 @@ @Override - public Short256Vector rotateEL(int j) { + public Short256Vector rotateLanesLeft(int j) { short[] vec = getElements(); short[] res = new short[length()]; for (int i = 0; i < length(); i++){ @@ -1039,7 +1066,7 @@ } @Override - public Short256Vector rotateER(int j) { + public Short256Vector rotateLanesRight(int j) { short[] vec = getElements(); short[] res = new short[length()]; for (int i = 0; i < length(); i++){ @@ -1054,7 +1081,7 @@ } @Override - public Short256Vector shiftEL(int j) { + public Short256Vector shiftLanesLeft(int j) { short[] vec = getElements(); short[] res = new short[length()]; for (int i = 0; i < length() - j; i++) { @@ -1064,7 +1091,7 @@ } @Override - public Short256Vector shiftER(int j) { + public Short256Vector shiftLanesRight(int j) { short[] vec = getElements(); short[] res = new short[length()]; for (int i = 0; i < length() - j; i++){