• bmeurer's avatar
    [crankshaft] Address the deoptimization loops of Math.floor, Math.round and Math.ceil. · 978ad03b
    bmeurer authored
    Fix and re-enable the flexible representation for Math.floor (which is used to
    implement Math.ceil) and Math.round, which allows Math.floor and Math.round to
    return double results instead of int32, and therefore allows values outside
    the int32 range, especially -0 is now a valid result, which doesn't deopt.
    
    Also port this feature to x64 and ia32 when the CPU supports the SSE4.1
    extension.
    
    This addresses all the known deoptimization loops related to Math.round
    in the Kraken benchmark suite, and seems to also address most of the
    deoptimization loops related to Math.floor in the Oort Online benchmark.
    
    Drive-by-fix: Import the regression tests for the broken HMathFloorOfDiv
    optimization that caused the initial revert of the feature (for arm64 only
    back then).
    
    BUG=chromium:476477,v8:2890,v8:4059
    R=jarin@chromium.org
    LOG=n
    
    Review URL: https://codereview.chromium.org/1841513003
    
    Cr-Commit-Position: refs/heads/master@{#35094}
    978ad03b
regress-crbug-476477-1.js 476 Bytes