diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/fuzzing.h | 4 | ||||
-rw-r--r-- | src/wasm-interpreter.h | 31 |
2 files changed, 20 insertions, 15 deletions
diff --git a/src/tools/fuzzing.h b/src/tools/fuzzing.h index 982a94114..be12b561a 100644 --- a/src/tools/fuzzing.h +++ b/src/tools/fuzzing.h @@ -1070,7 +1070,7 @@ private: switch (type) { case i32: { switch (upTo(4)) { - case 0: return makeUnary({ pick(EqZInt32, ClzInt32, CtzInt32, PopcntInt32), make(i32) }); + case 0: return makeUnary({ pick(EqZInt32, ClzInt32, CtzInt32, PopcntInt32, ExtendS8Int32, ExtendS16Int32), make(i32) }); case 1: return makeUnary({ pick(EqZInt64, WrapInt64), make(i64) }); case 2: return makeUnary({ pick(TruncSFloat32ToInt32, TruncUFloat32ToInt32, ReinterpretFloat32), make(f32) }); case 3: return makeUnary({ pick(TruncSFloat64ToInt32, TruncUFloat64ToInt32), make(f64) }); @@ -1079,7 +1079,7 @@ private: } case i64: { switch (upTo(4)) { - case 0: return makeUnary({ pick(ClzInt64, CtzInt64, PopcntInt64), make(i64) }); + case 0: return makeUnary({ pick(ClzInt64, CtzInt64, PopcntInt64, ExtendS8Int64, ExtendS16Int64, ExtendS32Int64), make(i64) }); case 1: return makeUnary({ pick(ExtendSInt32, ExtendUInt32), make(i32) }); case 2: return makeUnary({ pick(TruncSFloat32ToInt64, TruncUFloat32ToInt64), make(f32) }); case 3: return makeUnary({ pick(TruncSFloat64ToInt64, TruncUFloat64ToInt64, ReinterpretFloat64), make(f64) }); diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index b3fa3f265..c8b48e477 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -239,32 +239,37 @@ public: NOTE_EVAL1(value); if (value.type == i32) { switch (curr->op) { - case ClzInt32: return value.countLeadingZeroes(); - case CtzInt32: return value.countTrailingZeroes(); - case PopcntInt32: return value.popCount(); - case EqZInt32: return Literal(int32_t(value == Literal(int32_t(0)))); - case ReinterpretInt32: return value.castToF32(); - case ExtendSInt32: return value.extendToSI64(); - case ExtendUInt32: return value.extendToUI64(); + case ClzInt32: return value.countLeadingZeroes(); + case CtzInt32: return value.countTrailingZeroes(); + case PopcntInt32: return value.popCount(); + case EqZInt32: return Literal(int32_t(value == Literal(int32_t(0)))); + case ReinterpretInt32: return value.castToF32(); + case ExtendSInt32: return value.extendToSI64(); + case ExtendUInt32: return value.extendToUI64(); case ConvertUInt32ToFloat32: return value.convertUToF32(); case ConvertUInt32ToFloat64: return value.convertUToF64(); case ConvertSInt32ToFloat32: return value.convertSToF32(); case ConvertSInt32ToFloat64: return value.convertSToF64(); + case ExtendS8Int32: return Literal(int32_t(int8_t(value.geti32() & 0xFF))); + case ExtendS16Int32: return Literal(int32_t(int16_t(value.geti32() & 0xFFFF))); default: WASM_UNREACHABLE(); } } if (value.type == i64) { switch (curr->op) { - case ClzInt64: return value.countLeadingZeroes(); - case CtzInt64: return value.countTrailingZeroes(); - case PopcntInt64: return value.popCount(); - case EqZInt64: return Literal(int32_t(value == Literal(int64_t(0)))); - case WrapInt64: return value.truncateToI32(); - case ReinterpretInt64: return value.castToF64(); + case ClzInt64: return value.countLeadingZeroes(); + case CtzInt64: return value.countTrailingZeroes(); + case PopcntInt64: return value.popCount(); + case EqZInt64: return Literal(int32_t(value == Literal(int64_t(0)))); + case WrapInt64: return value.truncateToI32(); + case ReinterpretInt64: return value.castToF64(); case ConvertUInt64ToFloat32: return value.convertUToF32(); case ConvertUInt64ToFloat64: return value.convertUToF64(); case ConvertSInt64ToFloat32: return value.convertSToF32(); case ConvertSInt64ToFloat64: return value.convertSToF64(); + case ExtendS8Int64: return Literal(int64_t(int8_t(value.geti64() & 0xFF))); + case ExtendS16Int64: return Literal(int64_t(int16_t(value.geti64() & 0xFFFF))); + case ExtendS32Int64: return Literal(int64_t(int32_t(value.geti64() & 0xFFFFFFFF))); default: WASM_UNREACHABLE(); } } |