-
Ng Zhi An authored
This relands commit 5cfe053e. Original change's description: > [wasm-simd][liftoff] Add S128 case for stack movements > > 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: Clemens Backes <clemensb@chromium.org> > Cr-Commit-Position: refs/heads/master@{#65956} Bug: v8:9909 Change-Id: Icdaead289abe13faf75bb9e049929f7fd7c59a08 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2036760 Commit-Queue: Zhi An Ng <zhin@chromium.org> Reviewed-by: Clemens Backes <clemensb@chromium.org> Cr-Commit-Position: refs/heads/master@{#66119}
06594a8d