diff options
author | Thomas Lively <7121787+tlively@users.noreply.github.com> | 2020-10-28 09:05:03 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-28 09:05:03 -0700 |
commit | 5f7d2636e926e0061e4f07dfd5c864d32a7f6144 (patch) | |
tree | d4b718103203ea8056f645e19b04d1dd939552e2 /src/wasm/wasm-binary.cpp | |
parent | 8fd93ee74150a8783c5118ea9804b508fe67701f (diff) | |
download | binaryen-5f7d2636e926e0061e4f07dfd5c864d32a7f6144.tar.gz binaryen-5f7d2636e926e0061e4f07dfd5c864d32a7f6144.tar.bz2 binaryen-5f7d2636e926e0061e4f07dfd5c864d32a7f6144.zip |
Prototype new SIMD multiplications (#3291)
Including saturating, rounding Q15 multiplication as proposed in
https://github.com/WebAssembly/simd/pull/365 and extending multiplications as
proposed in https://github.com/WebAssembly/simd/pull/376. Since these are just
prototypes, skips adding them to the C or JS APIs and the fuzzer, as well as
implementing them in the interpreter.
Diffstat (limited to 'src/wasm/wasm-binary.cpp')
-rw-r--r-- | src/wasm/wasm-binary.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index 0c56af8e0..46ce205b7 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -4303,6 +4303,26 @@ bool WasmBinaryBuilder::maybeVisitSIMDBinary(Expression*& out, uint32_t code) { curr = allocator.alloc<Binary>(); curr->op = AvgrUVecI16x8; break; + case BinaryConsts::I16x8Q15MulrSatS: + curr = allocator.alloc<Binary>(); + curr->op = Q15MulrSatSVecI16x8; + break; + case BinaryConsts::I16x8ExtMulLowSI8x16: + curr = allocator.alloc<Binary>(); + curr->op = ExtMulLowSVecI16x8; + break; + case BinaryConsts::I16x8ExtMulHighSI8x16: + curr = allocator.alloc<Binary>(); + curr->op = ExtMulHighSVecI16x8; + break; + case BinaryConsts::I16x8ExtMulLowUI8x16: + curr = allocator.alloc<Binary>(); + curr->op = ExtMulLowUVecI16x8; + break; + case BinaryConsts::I16x8ExtMulHighUI8x16: + curr = allocator.alloc<Binary>(); + curr->op = ExtMulHighUVecI16x8; + break; case BinaryConsts::I32x4Add: curr = allocator.alloc<Binary>(); curr->op = AddVecI32x4; @@ -4335,6 +4355,22 @@ bool WasmBinaryBuilder::maybeVisitSIMDBinary(Expression*& out, uint32_t code) { curr = allocator.alloc<Binary>(); curr->op = DotSVecI16x8ToVecI32x4; break; + case BinaryConsts::I32x4ExtMulLowSI16x8: + curr = allocator.alloc<Binary>(); + curr->op = ExtMulLowSVecI32x4; + break; + case BinaryConsts::I32x4ExtMulHighSI16x8: + curr = allocator.alloc<Binary>(); + curr->op = ExtMulHighSVecI32x4; + break; + case BinaryConsts::I32x4ExtMulLowUI16x8: + curr = allocator.alloc<Binary>(); + curr->op = ExtMulLowUVecI32x4; + break; + case BinaryConsts::I32x4ExtMulHighUI16x8: + curr = allocator.alloc<Binary>(); + curr->op = ExtMulHighUVecI32x4; + break; case BinaryConsts::I64x2Add: curr = allocator.alloc<Binary>(); curr->op = AddVecI64x2; @@ -4347,6 +4383,22 @@ bool WasmBinaryBuilder::maybeVisitSIMDBinary(Expression*& out, uint32_t code) { curr = allocator.alloc<Binary>(); curr->op = MulVecI64x2; break; + case BinaryConsts::I64x2ExtMulLowSI32x4: + curr = allocator.alloc<Binary>(); + curr->op = ExtMulLowSVecI64x2; + break; + case BinaryConsts::I64x2ExtMulHighSI32x4: + curr = allocator.alloc<Binary>(); + curr->op = ExtMulHighSVecI64x2; + break; + case BinaryConsts::I64x2ExtMulLowUI32x4: + curr = allocator.alloc<Binary>(); + curr->op = ExtMulLowUVecI64x2; + break; + case BinaryConsts::I64x2ExtMulHighUI32x4: + curr = allocator.alloc<Binary>(); + curr->op = ExtMulHighUVecI64x2; + break; case BinaryConsts::F32x4Add: curr = allocator.alloc<Binary>(); curr->op = AddVecF32x4; |