-
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: Clemens Backes <clemensb@chromium.org> Commit-Queue: Zhi An Ng <zhin@chromium.org> Cr-Commit-Position: refs/heads/master@{#65927}
85990489