• Zhi An Ng's avatar
    [wasm-simd][x64] Fix definition of Shufps · 5f4b0e47
    Zhi An Ng authored
    The definition of Shufps is wrong, we are incorrectly passing 0 as the
    immediate in all cases. No tests broke because we only used Shufps for
    splats, which has imm8 == 0 anyway.
    
    Also, it was using movss, which only moves a single 32-bit. Because we
    were using it only for f32x4 splat, this ended up being enough (imm8 ==
    0 meant that we only shuffled the low 32-bit). This is fixed to use
    movaps, which moves the entire 128-bit register.
    
    Also tweak the definition of Shufps to take 4 arguments. `vshufps dst,
    src1, src2, imm8` shuffles src1 and src2 into dst. `shufps dst, src,
    imm8`, shuffles dst and src into dst.
    
    So `Shufps(dst, src, imm8)` is ambiguous in the AVX case, it could be:
    1. vshufps(dst, src, src, imm8), or
    2. vshufps(dst, dst, src, imm8)
    
    2. is more likely to be the intended behavior, but it introduces a false
    dependency on the value of dst.
    
    With `Shufps(dst, src1, src2, imm8)`, it is clearer what the behavior
    should be:
    1. shufps(dst, src2, imm8) matches the AVX behavior IFF dst == src1.
    
    Change-Id: I60dc4ec868023d28d00f2b09d2c53b82a729bc4d
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2591849Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
    Commit-Queue: Zhi An Ng <zhin@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#71775}
    5f4b0e47
macro-assembler-x64.h 43.7 KB