Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle srem properly when avoid_div_traps is false. #2763

Merged
merged 1 commit into from
Mar 25, 2021

Commits on Mar 25, 2021

  1. Handle srem properly when avoid_div_traps is false.

    The codegen for div/rem ops has two modes, depending on the
    `avoid_div_traps` flag: it can either do all checks for trapping
    conditions explicitly, and use explicit trap instructions, then use a
    hardware divide instruction that will not trap (`avoid_div_traps ==
    true`); or it can run in a mode where a hardware FP fault on the divide
    instruction implies a Wasm trap (`avoid_div_traps == false`). Wasmtime
    uses the former while Lucet (for example) uses the latter.
    
    It turns out that because we run all our spec tests run under Wasmtime,
    we missed a spec corner case that fails in the latter: INT_MIN % -1 == 0
    per the spec, but causes a trap with the x86 signed divide/remainder
    instruction. Hence, in Lucet, this specific remainder computation would
    incorrectly result in a Wasm trap.
    
    This PR fixes the issue by just forcing use of the explicit-checks
    implementation for `srem` even when `avoid_div_traps` is false.
    cfallin committed Mar 25, 2021
    Configuration menu
    Copy the full SHA
    b429f77 View commit details
    Browse the repository at this point in the history