• ahaas's avatar
    [wasm] Detect unrepresentability in the float32-to-int32 conversion correctly on arm. · de369129
    ahaas authored
    In the current implementation of wasm an unrepresentable input of the
    float32-to-int32 conversion is detected by first truncating the input, then
    converting the truncated input to int32 and back to float32, and then checking
    whether the result is the same as the truncated input.
    
    This input check does not work on arm and arm64 for an input of (INT32_MAX + 1)
    because on these platforms the float32-to-int32 conversion results in INT32_MAX
    if the input is greater than INT32_MAX.  When INT32_MAX is converted back to
    float32, then the result is (INT32_MAX + 1) again because INT32_MAX cannot be
    represented precisely as float32, and rounding-to-nearest results in (INT32_MAX
    + 1). Since (INT32_MAX + 1) equals the truncated input value, the input appears
    to be representable.
    
    With the changes in this CL, the result of the float32-to-int32 conversion is
    incremented by 1 if the original result was INT32_MAX. Thereby the detection of
    unrepresenable inputs in wasm works. Note that since INT32_MAX cannot be
    represented precisely in float32, it can also never be a valid result of the
    float32-to-int32 conversion.
    
    @v8-mips-ports, can you do a similar implementation for mips?
    
    R=titzer@chromium.org, Rodolph.Perfetta@arm.com
    
    Review-Url: https://codereview.chromium.org/2105313002
    Cr-Commit-Position: refs/heads/master@{#37448}
    de369129
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
docs Loading commit data...
gni Loading commit data...
gypfiles Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party/binutils Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
Makefile Loading commit data...
Makefile.android Loading commit data...
Makefile.nacl Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...