Canonicalize NANs produced by f.trunc and f.nearby.

This commit is contained in:
Nick Lewycky
2020-03-16 11:36:17 -07:00
parent ae9b321365
commit 29b5223b3e
2 changed files with 5 additions and 11 deletions

View File

@ -3701,7 +3701,7 @@ impl<'ctx> FunctionCodeGenerator<CodegenError> for LLVMFunctionCodeGenerator<'ct
.try_as_basic_value() .try_as_basic_value()
.left() .left()
.unwrap(); .unwrap();
state.push1_extra(res, i); state.push1_extra(res, i | ExtraInfo::pending_f32_nan());
} }
Operator::F64Trunc => { Operator::F64Trunc => {
let (v, i) = state.pop1_extra()?; let (v, i) = state.pop1_extra()?;
@ -3714,7 +3714,7 @@ impl<'ctx> FunctionCodeGenerator<CodegenError> for LLVMFunctionCodeGenerator<'ct
.try_as_basic_value() .try_as_basic_value()
.left() .left()
.unwrap(); .unwrap();
state.push1_extra(res, i); state.push1_extra(res, i | ExtraInfo::pending_f64_nan());
} }
Operator::F32Nearest => { Operator::F32Nearest => {
let (v, i) = state.pop1_extra()?; let (v, i) = state.pop1_extra()?;
@ -3727,7 +3727,7 @@ impl<'ctx> FunctionCodeGenerator<CodegenError> for LLVMFunctionCodeGenerator<'ct
.try_as_basic_value() .try_as_basic_value()
.left() .left()
.unwrap(); .unwrap();
state.push1_extra(res, i); state.push1_extra(res, i | ExtraInfo::pending_f32_nan());
} }
Operator::F64Nearest => { Operator::F64Nearest => {
let (v, i) = state.pop1_extra()?; let (v, i) = state.pop1_extra()?;
@ -3740,7 +3740,7 @@ impl<'ctx> FunctionCodeGenerator<CodegenError> for LLVMFunctionCodeGenerator<'ct
.try_as_basic_value() .try_as_basic_value()
.left() .left()
.unwrap(); .unwrap();
state.push1_extra(res, i); state.push1_extra(res, i | ExtraInfo::pending_f64_nan());
} }
Operator::F32Abs => { Operator::F32Abs => {
let (v, i) = state.pop1_extra()?; let (v, i) = state.pop1_extra()?;

View File

@ -326,12 +326,6 @@ llvm:skip:unwind.wast:*:windows
llvm:skip:simd.wast:352:unix # Module - caught panic Any llvm:skip:simd.wast:352:unix # Module - caught panic Any
llvm:skip:simd_binaryen.wast:*:unix # Module - caught panic Any llvm:skip:simd_binaryen.wast:*:unix # Module - caught panic Any
# NaN canonicalization
llvm:fail:wasmer.wast:111 # AssertReturn - result I32(2143289345) ("0x7fc00001") does not match expected I32(2143289344) ("0x7fc00000")
llvm:fail:wasmer.wast:114 # AssertReturn - result I32(2143289345) ("0x7fc00001") does not match expected I32(2143289344) ("0x7fc00000")
llvm:fail:wasmer.wast:123 # AssertReturn - result I64(9221120237041090561) ("0x7ff8000000000001") does not match expected I64(9221120237041090560) ("0x7ff8000000000000")
llvm:fail:wasmer.wast:126 # AssertReturn - result I64(9221120237041090561) ("0x7ff8000000000001") does not match expected I64(9221120237041090560) ("0x7ff8000000000000")
# Singlepass # Singlepass
singlepass:skip:simd.wast:* # SIMD not implemented singlepass:skip:simd.wast:* # SIMD not implemented
singlepass:skip:simd_binaryen.wast:* # SIMD not implemented singlepass:skip:simd_binaryen.wast:* # SIMD not implemented
@ -515,4 +509,4 @@ singlepass:fail:traps.wast:53:*:aarch64 # AssertTrap - expected trap, got []
singlepass:fail:traps.wast:54:*:aarch64 # AssertTrap - expected trap, got [] singlepass:fail:traps.wast:54:*:aarch64 # AssertTrap - expected trap, got []
singlepass:fail:traps.wast:55:*:aarch64 # AssertTrap - expected trap, got [] singlepass:fail:traps.wast:55:*:aarch64 # AssertTrap - expected trap, got []
singlepass:fail:traps.wast:56:*:aarch64 # AssertTrap - expected trap, got [] singlepass:fail:traps.wast:56:*:aarch64 # AssertTrap - expected trap, got []
singlepass:fail:traps.wast:57:*:aarch64 # AssertTrap - expected trap, got [] singlepass:fail:traps.wast:57:*:aarch64 # AssertTrap - expected trap, got []