• Ng Zhi An's avatar
    [wasm-simd][liftoff] Fix load from stack into reg for PrepareCall · 85990489
    Ng Zhi An authored
    Take care of the case when loading from stack slot into registers during
    PrepareCall. register_loads_ knows nothing of fp pair (it calls
    liftoff_code, which is nonsense for an fp pair), so we pass it dst.low().
    
    Earlier on in LoadStackSlot, we call load_dst_regs_.set(dst). This is
    implement to set both dst.low() and dst.high(). Later when we iterate
    over load_dst_regs_ (in ExecuteLoads), we special case loads of
    kWasmS128, and reconstruct a LiftoffRegister that is a fp pair (only
    when required), since LiftoffAssembler::Fill knows how to handle loading
    of s128 values. However, since we also set dst.high(), we will iterate
    over it too, but end up getting a RegisterLoad of nonsense values. This
    is not handled in the switch cases at all, so it works.
    
    Instead of this, we could transform a s128 load into two f64 load, and
    PrepareCall will be the only place that does this, since other callers
    of Fill will use kWasmS128. And we would have to do 2 loads instead of
    1 add and 1 load.
    
    Bug: v8:9909
    Change-Id: I20f69de48a650b457a199fde02c8e58641b2c176
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2013920Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
    Commit-Queue: Zhi An Ng <zhin@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#65927}
    85990489
liftoff-assembler.cc 34.1 KB