1. 16 Dec, 2020 1 commit
    • 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
  2. 15 Dec, 2020 23 commits
  3. 14 Dec, 2020 16 commits