• bbudge's avatar
    [WASM SIMD] Implement packing and unpacking integer conversions. · dbfc0300
    bbudge authored
    - Adds WASM opcodes I32x4SConvertI16x8Low, I32x4SConvertI16x8High,
      I32x4UConvertI16x8Low, I32x4UConvertI16x8High, which unpack half of
      an I16x8 register into a whole I32x4 register, with signed or unsigned
      extension. Having separate Low/High opcodes works around the difficulty
      of having multiple output registers, which would be necessary if we unpacked
      the entire I16x8 register.
    
    - Adds WASM opcodes I16x8SConvertI8x16Low, I16x8SConvertI8x16High,
      I16x8UConvertI8x16Low, I16x8UConvertI8x16High, similarly to above.
    
    - Adds WASM opcodes I16x8SConvertI32x4, I16x8UConvertI32x4,
      I8x16SConvert16x8, I8x16UConvertI16x8, which pack two source registers
      into a single destination register with signed or unsigned saturation. These
      could have been separated into half operations, but this is simpler to
      implement with SSE, AVX, and is acceptable on ARM. It also avoids adding
      operations that only modify half of their destination register.
    
    - Implements these opcodes for ARM.
    
    LOG=N
    BUG=v8:6020
    
    Review-Url: https://codereview.chromium.org/2800523002
    Cr-Commit-Position: refs/heads/master@{#44541}
    dbfc0300
wasm-compiler.cc 155 KB