Skip to content

Commit f75a299

Browse files
committed
Avoid using Vector API's saturating addition and substraction
1 parent 1c8929a commit f75a299

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

wasm/src/org.graalvm.wasm.jdk25/src/org/graalvm/wasm/api/Vector128OpsVectorAPI.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -441,11 +441,11 @@ public ByteVector binary(ByteVector xVec, ByteVector yVec, int vectorOpcode) {
441441
case Bytecode.VECTOR_I8X16_NARROW_I16X8_S -> narrow(x, y, I16X8, I8X16, Byte.MIN_VALUE, Byte.MAX_VALUE);
442442
case Bytecode.VECTOR_I8X16_NARROW_I16X8_U -> narrow(x, y, I16X8, I8X16, (short) 0, (short) 0xff);
443443
case Bytecode.VECTOR_I8X16_ADD -> binop(x, y, I8X16, VectorOperators.ADD);
444-
case Bytecode.VECTOR_I8X16_ADD_SAT_S -> binop(x, y, I8X16, VectorOperators.SADD);
445-
case Bytecode.VECTOR_I8X16_ADD_SAT_U -> binop_sat_u(x, y, I8X16, I16X8, VectorOperators.ZERO_EXTEND_B2S, VectorOperators.ADD, 0, 0xff);
444+
case Bytecode.VECTOR_I8X16_ADD_SAT_S -> binop_sat(x, y, I8X16, I16X8, VectorOperators.B2S, VectorOperators.ADD, Byte.MIN_VALUE, Byte.MAX_VALUE); // GR-68891
445+
case Bytecode.VECTOR_I8X16_ADD_SAT_U -> binop_sat(x, y, I8X16, I16X8, VectorOperators.ZERO_EXTEND_B2S, VectorOperators.ADD, 0, 0xff); // GR-68891
446446
case Bytecode.VECTOR_I8X16_SUB -> binop(x, y, I8X16, VectorOperators.SUB);
447-
case Bytecode.VECTOR_I8X16_SUB_SAT_S -> binop(x, y, I8X16, VectorOperators.SSUB);
448-
case Bytecode.VECTOR_I8X16_SUB_SAT_U -> binop_sat_u(x, y, I8X16, I16X8, VectorOperators.ZERO_EXTEND_B2S, VectorOperators.SUB, 0, 0xff);
447+
case Bytecode.VECTOR_I8X16_SUB_SAT_S -> binop_sat(x, y, I8X16, I16X8, VectorOperators.B2S, VectorOperators.SUB, Byte.MIN_VALUE, Byte.MAX_VALUE); // GR-68891
448+
case Bytecode.VECTOR_I8X16_SUB_SAT_U -> binop_sat(x, y, I8X16, I16X8, VectorOperators.ZERO_EXTEND_B2S, VectorOperators.SUB, 0, 0xff); // GR-68891
449449
case Bytecode.VECTOR_I8X16_MIN_S -> binop(x, y, I8X16, VectorOperators.MIN);
450450
case Bytecode.VECTOR_I8X16_MIN_U -> binop(x, y, I8X16, VectorOperators.UMIN);
451451
case Bytecode.VECTOR_I8X16_MAX_S -> binop(x, y, I8X16, VectorOperators.MAX);
@@ -455,11 +455,11 @@ public ByteVector binary(ByteVector xVec, ByteVector yVec, int vectorOpcode) {
455455
case Bytecode.VECTOR_I16X8_NARROW_I32X4_U -> narrow(x, y, I32X4, I16X8, 0, 0xffff);
456456
case Bytecode.VECTOR_I16X8_Q15MULR_SAT_S, Bytecode.VECTOR_I16X8_RELAXED_Q15MULR_S -> i16x8_q15mulr_sat_s(x, y);
457457
case Bytecode.VECTOR_I16X8_ADD -> binop(x, y, I16X8, VectorOperators.ADD);
458-
case Bytecode.VECTOR_I16X8_ADD_SAT_S -> binop(x, y, I16X8, VectorOperators.SADD);
459-
case Bytecode.VECTOR_I16X8_ADD_SAT_U -> binop_sat_u(x, y, I16X8, I32X4, VectorOperators.ZERO_EXTEND_S2I, VectorOperators.ADD, 0, 0xffff);
458+
case Bytecode.VECTOR_I16X8_ADD_SAT_S -> binop_sat(x, y, I16X8, I32X4, VectorOperators.S2I, VectorOperators.ADD, Short.MIN_VALUE, Short.MAX_VALUE); // GR-68891
459+
case Bytecode.VECTOR_I16X8_ADD_SAT_U -> binop_sat(x, y, I16X8, I32X4, VectorOperators.ZERO_EXTEND_S2I, VectorOperators.ADD, 0, 0xffff); // GR-68891
460460
case Bytecode.VECTOR_I16X8_SUB -> binop(x, y, I16X8, VectorOperators.SUB);
461-
case Bytecode.VECTOR_I16X8_SUB_SAT_S -> binop(x, y, I16X8, VectorOperators.SSUB);
462-
case Bytecode.VECTOR_I16X8_SUB_SAT_U -> binop_sat_u(x, y, I16X8, I32X4, VectorOperators.ZERO_EXTEND_S2I, VectorOperators.SUB, 0, 0xffff);
461+
case Bytecode.VECTOR_I16X8_SUB_SAT_S -> binop_sat(x, y, I16X8, I32X4, VectorOperators.S2I, VectorOperators.SUB, Short.MIN_VALUE, Short.MAX_VALUE); // GR-68891
462+
case Bytecode.VECTOR_I16X8_SUB_SAT_U -> binop_sat(x, y, I16X8, I32X4, VectorOperators.ZERO_EXTEND_S2I, VectorOperators.SUB, 0, 0xffff); // GR-68891
463463
case Bytecode.VECTOR_I16X8_MUL -> binop(x, y, I16X8, VectorOperators.MUL);
464464
case Bytecode.VECTOR_I16X8_MIN_S -> binop(x, y, I16X8, VectorOperators.MIN);
465465
case Bytecode.VECTOR_I16X8_MIN_U -> binop(x, y, I16X8, VectorOperators.UMIN);
@@ -1020,7 +1020,7 @@ private static <E, F> ByteVector narrow(ByteVector xBytes, ByteVector yBytes, Sh
10201020
return result.reinterpretAsBytes();
10211021
}
10221022

1023-
private static <E, F> ByteVector binop_sat_u(ByteVector xBytes, ByteVector yBytes,
1023+
private static <E, F> ByteVector binop_sat(ByteVector xBytes, ByteVector yBytes,
10241024
Shape<E> shape, Shape<F> extendedShape,
10251025
VectorOperators.Conversion<E, F> upcast,
10261026
VectorOperators.Binary op, long min, long max) {

0 commit comments

Comments
 (0)