• Ng Zhi An's avatar
    [wasm-simd][liftoff] Add S128 case for stack movements · 5cfe053e
    Ng Zhi An authored
    The two cases we are fixing here are Construct and
    LoadCallerFrameSlot, which are closely related.
    
    Construct is called during PrepareCall, where we build up
    LiftoffStackSlots when we need to move an arg from caller's stack frame
    into callee's stack frame. LoadCallerFrameSlot is the parallel to
    this, called in ProcessParameter during decoding of the callee's
    function body.
    
    In most cases, Construct needs a new case to handle kWasmS128, and calls
    the relevant assembler to push a s128 onto the stack.
    
    ARM64 requires 16-byte alignment of sp, so we need to Claim the right
    number of kXRegSize slots first, which requires
    us traversing the list of slots to figure out how many s128 values there
    are. This is a straightforward way to fix this, if efficiency is a
    problem, we can change LiftOffStackSlots::Add to sum up the slot sizes.
    
    On IA32, pushing s128 values will require 4 calls to push. Instead, we
    use a sub and two movdqu, which will generate less code in most cases.
    
    On x64, there is no 128-bit push, so we call push twice.
    
    Bug: v8:9909
    Change-Id: I3af35b8462ea9c3b9b2d90800c37d11b5e95be59
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2015945
    Commit-Queue: Zhi An Ng <zhin@chromium.org>
    Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#65956}
    5cfe053e
Name
Last commit
Last update
..
api Loading commit data...
asmjs Loading commit data...
ast Loading commit data...
base Loading commit data...
builtins Loading commit data...
codegen Loading commit data...
common Loading commit data...
compiler Loading commit data...
compiler-dispatcher Loading commit data...
d8 Loading commit data...
date Loading commit data...
debug Loading commit data...
deoptimizer Loading commit data...
diagnostics Loading commit data...
execution Loading commit data...
extensions Loading commit data...
flags Loading commit data...
handles Loading commit data...
heap Loading commit data...
ic Loading commit data...
init Loading commit data...
inspector Loading commit data...
interpreter Loading commit data...
json Loading commit data...
libplatform Loading commit data...
libsampler Loading commit data...
logging Loading commit data...
numbers Loading commit data...
objects Loading commit data...
parsing Loading commit data...
profiler Loading commit data...
protobuf Loading commit data...
regexp Loading commit data...
roots Loading commit data...
runtime Loading commit data...
sanitizer Loading commit data...
snapshot Loading commit data...
strings Loading commit data...
tasks Loading commit data...
third_party Loading commit data...
torque Loading commit data...
tracing Loading commit data...
trap-handler Loading commit data...
utils Loading commit data...
wasm Loading commit data...
zone Loading commit data...
DEPS Loading commit data...
OWNERS Loading commit data...