• Milad Farazmand's avatar
    PPC/s390: [wasm-simd] Support returning Simd128 on caller's stack · 9b317d2d
    Milad Farazmand authored
    Port 360c9294
    
    Original Commit Message:
    
        In Liftoff, we were missing kS128 cases to load to/from stack.
    
        For the x64 and ARM64 instruction selector, the calculation of
        reverse_slot is incorrect for 128-bit values:
    
        - reverse_slot += 2 (size of 128-bit values, 2 pointers)
        - this copies from slot -2 into register
        - but the value starts at slot -1, it occupies slots -1 and -2
        - we end up copying slot -2 (most significant half) of the register, and
        also slot -3, which is where rsi was store (Wasm instance addr)
        - the test ends up with a different result every time
    
        The calculation of reverse_slot is changed to follow how ia32 and ARM
        does it, which is to start with
    
        - reverse_slot = 0
        - in the code-generator, add 1 to the slot
        - then after emitting Peek operation, reverse_slot += 2
    
        The fixes for x64 and ARM64 are in both instruction-selector and
        code-generator.
    
        ia32 and ARM didn't support writing kSimd128 values yet, it was only a
        missing check in code-generator, so add that in.
    
        For ARM, the codegen is more involved, vld1 does not support addressing
        with an offset, so we have to do the addition into a scratch register.
    
        Also adding a test for returning multiple v128. V128 is not exposed to
        JavaScript, so we use a Wasm function call, and then an involved chain
        of extract lanes, returning 6 i32 which we verify the values of. It
        extracts the first and last lane of the i32x4 value in order to catch
        bugs where we write or read to a wrong stack slot (off by 1).
    
        The simd-scalar-lowering for kCall was only handling single s128 return,
        we adopt the way i64-lowering handles kCall, so that is can now handle
        any kinds of calls with s128 in the descriptor.
    
    R=zhin@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
    BUG=
    LOG=N
    
    Change-Id: I1ad9595d7820f04687c9d79941ad04c6eb207897
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2363118Reviewed-by: 's avatarJunliang Yan <jyan@ca.ibm.com>
    Reviewed-by: 's avatarZhi An Ng <zhin@chromium.org>
    Commit-Queue: Milad Farazmand <miladfar@ca.ibm.com>
    Cr-Commit-Position: refs/heads/master@{#69461}
    9b317d2d
Name
Last commit
Last update
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.flake8 Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
COMMON_OWNERS Loading commit data...
DEPS Loading commit data...
ENG_REVIEW_OWNERS Loading commit data...
INFRA_OWNERS Loading commit data...
INTL_OWNERS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
MIPS_OWNERS Loading commit data...
OWNERS Loading commit data...
PPC_OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...