• ahaas's avatar
    [wasm] Refactor the non-determinism detection in the interpreter. · ac187c03
    ahaas authored
    Apparently it happens quite easily that different NaNs are produced in
    the interpreter than in the execution of the compiled code. This
    non-determinism caused problems for the fuzzer which compares the
    equality of the results of the interpreter and the compiled code.
    
    I decided therefore to refactor the detection of non-determinism in the
    interpreter. Instead of tracking whether potentially non-deterministic
    NaNs were produced, I track now whether potentially non-deterministic
    NaNs could have been observed. The only way the NaN non-determinism can
    be observed is by observing the non-deterministic bit pattern of the
    NaN. AFAICT the only way to observe the bit pattern is with a
    I(32|64)_REINTERPRET_F(32|64) instruction or with a F(32|64)_STORE
    followed by a load. Therefore I flag an execution as potentially
    non-deterministic when either a NaN is reinterpreted to an int, or when
    a NaN is stored to memory.
    
    R=titzer@chromium.org, eholk@chromium.org
    BUG=682180
    
    Review-Url: https://codereview.chromium.org/2671803002
    Cr-Commit-Position: refs/heads/master@{#42917}
    ac187c03
wasm-interpreter.cc 64.7 KB