diff options
Diffstat (limited to 'src/wasm-interpreter.h')
-rw-r--r-- | src/wasm-interpreter.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index d0e64c91e..5e3011282 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -455,7 +455,14 @@ private: case TruncSFloat64: return truncSFloat(curr, value); case TruncUFloat64: return truncUFloat(curr, value); case ReinterpretFloat: return value.castToI64(); - case DemoteFloat64: return value.truncateToF32(); + case DemoteFloat64: { + double val = value.getFloat(); + if (std::isnan(val)) return Literal(float(val)); + if (std::isinf(val)) return Literal(float(val)); + if (val < -std::numeric_limits<float>::max()) return Literal(-std::numeric_limits<float>::infinity()); + if (val > std::numeric_limits<float>::max()) return Literal(std::numeric_limits<float>::infinity()); + return value.truncateToF32(); + } default: abort(); } } |