diff options
-rw-r--r-- | src/binaryen-c.cpp | 36 | ||||
-rw-r--r-- | src/binaryen-c.h | 20 | ||||
-rw-r--r-- | src/js/binaryen.js-post.js | 20 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.c | 20 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.txt | 125 |
5 files changed, 221 insertions, 0 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index 113b2faa9..72b0e26ca 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -788,6 +788,17 @@ BinaryenOp BinaryenOrVec128(void) { return OrVec128; } BinaryenOp BinaryenXorVec128(void) { return XorVec128; } BinaryenOp BinaryenAndNotVec128(void) { return AndNotVec128; } BinaryenOp BinaryenBitselectVec128(void) { return Bitselect; } +BinaryenOp BinaryenRelaxedFmaVecF32x4(void) { return RelaxedFmaVecF32x4; } +BinaryenOp BinaryenRelaxedFmsVecF32x4(void) { return RelaxedFmsVecF32x4; } +BinaryenOp BinaryenRelaxedFmaVecF64x2(void) { return RelaxedFmaVecF64x2; } +BinaryenOp BinaryenRelaxedFmsVecF64x2(void) { return RelaxedFmsVecF64x2; } +BinaryenOp BinaryenLaneselectI8x16(void) { return LaneselectI8x16; } +BinaryenOp BinaryenLaneselectI16x8(void) { return LaneselectI16x8; } +BinaryenOp BinaryenLaneselectI32x4(void) { return LaneselectI32x4; } +BinaryenOp BinaryenLaneselectI64x2(void) { return LaneselectI64x2; } +BinaryenOp BinaryenDotI8x16I7x16AddSToVecI32x4(void) { + return DotI8x16I7x16AddSToVecI32x4; +} BinaryenOp BinaryenAnyTrueVec128(void) { return AnyTrueVec128; } BinaryenOp BinaryenAbsVecI8x16(void) { return AbsVecI8x16; } BinaryenOp BinaryenNegVecI8x16(void) { return NegVecI8x16; } @@ -1007,7 +1018,32 @@ BinaryenOp BinaryenDemoteZeroVecF64x2ToVecF32x4(void) { BinaryenOp BinaryenPromoteLowVecF32x4ToVecF64x2(void) { return PromoteLowVecF32x4ToVecF64x2; } +BinaryenOp BinaryenRelaxedTruncSVecF32x4ToVecI32x4(void) { + return RelaxedTruncSVecF32x4ToVecI32x4; +} +BinaryenOp BinaryenRelaxedTruncUVecF32x4ToVecI32x4(void) { + return RelaxedTruncUVecF32x4ToVecI32x4; +} +BinaryenOp BinaryenRelaxedTruncZeroSVecF64x2ToVecI32x4(void) { + return RelaxedTruncZeroSVecF64x2ToVecI32x4; +} +BinaryenOp BinaryenRelaxedTruncZeroUVecF64x2ToVecI32x4(void) { + return RelaxedTruncZeroUVecF64x2ToVecI32x4; +} BinaryenOp BinaryenSwizzleVecI8x16(void) { return SwizzleVecI8x16; } +BinaryenOp BinaryenRelaxedSwizzleVecI8x16(void) { + return RelaxedSwizzleVecI8x16; +} +BinaryenOp BinaryenRelaxedMinVecF32x4(void) { return RelaxedMinVecF32x4; } +BinaryenOp BinaryenRelaxedMaxVecF32x4(void) { return RelaxedMaxVecF32x4; } +BinaryenOp BinaryenRelaxedMinVecF64x2(void) { return RelaxedMinVecF64x2; } +BinaryenOp BinaryenRelaxedMaxVecF64x2(void) { return RelaxedMaxVecF64x2; } +BinaryenOp BinaryenRelaxedQ15MulrSVecI16x8(void) { + return RelaxedQ15MulrSVecI16x8; +} +BinaryenOp BinaryenDotI8x16I7x16SToVecI16x8(void) { + return DotI8x16I7x16SToVecI16x8; +} BinaryenOp BinaryenRefAsNonNull(void) { return RefAsNonNull; } BinaryenOp BinaryenRefAsExternInternalize(void) { return ExternInternalize; } BinaryenOp BinaryenRefAsExternExternalize(void) { return ExternExternalize; } diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 32e3af460..94743d259 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -512,6 +512,15 @@ BINARYEN_API BinaryenOp BinaryenOrVec128(void); BINARYEN_API BinaryenOp BinaryenXorVec128(void); BINARYEN_API BinaryenOp BinaryenAndNotVec128(void); BINARYEN_API BinaryenOp BinaryenBitselectVec128(void); +BINARYEN_API BinaryenOp BinaryenRelaxedFmaVecF32x4(void); +BINARYEN_API BinaryenOp BinaryenRelaxedFmsVecF32x4(void); +BINARYEN_API BinaryenOp BinaryenRelaxedFmaVecF64x2(void); +BINARYEN_API BinaryenOp BinaryenRelaxedFmsVecF64x2(void); +BINARYEN_API BinaryenOp BinaryenLaneselectI8x16(void); +BINARYEN_API BinaryenOp BinaryenLaneselectI16x8(void); +BINARYEN_API BinaryenOp BinaryenLaneselectI32x4(void); +BINARYEN_API BinaryenOp BinaryenLaneselectI64x2(void); +BINARYEN_API BinaryenOp BinaryenDotI8x16I7x16AddSToVecI32x4(void); BINARYEN_API BinaryenOp BinaryenAnyTrueVec128(void); BINARYEN_API BinaryenOp BinaryenPopcntVecI8x16(void); BINARYEN_API BinaryenOp BinaryenAbsVecI8x16(void); @@ -669,7 +678,18 @@ BINARYEN_API BinaryenOp BinaryenTruncSatZeroSVecF64x2ToVecI32x4(void); BINARYEN_API BinaryenOp BinaryenTruncSatZeroUVecF64x2ToVecI32x4(void); BINARYEN_API BinaryenOp BinaryenDemoteZeroVecF64x2ToVecF32x4(void); BINARYEN_API BinaryenOp BinaryenPromoteLowVecF32x4ToVecF64x2(void); +BINARYEN_API BinaryenOp BinaryenRelaxedTruncSVecF32x4ToVecI32x4(void); +BINARYEN_API BinaryenOp BinaryenRelaxedTruncUVecF32x4ToVecI32x4(void); +BINARYEN_API BinaryenOp BinaryenRelaxedTruncZeroSVecF64x2ToVecI32x4(void); +BINARYEN_API BinaryenOp BinaryenRelaxedTruncZeroUVecF64x2ToVecI32x4(void); BINARYEN_API BinaryenOp BinaryenSwizzleVecI8x16(void); +BINARYEN_API BinaryenOp BinaryenRelaxedSwizzleVecI8x16(void); +BINARYEN_API BinaryenOp BinaryenRelaxedMinVecF32x4(void); +BINARYEN_API BinaryenOp BinaryenRelaxedMaxVecF32x4(void); +BINARYEN_API BinaryenOp BinaryenRelaxedMinVecF64x2(void); +BINARYEN_API BinaryenOp BinaryenRelaxedMaxVecF64x2(void); +BINARYEN_API BinaryenOp BinaryenRelaxedQ15MulrSVecI16x8(void); +BINARYEN_API BinaryenOp BinaryenDotI8x16I7x16SToVecI16x8(void); BINARYEN_API BinaryenOp BinaryenRefAsNonNull(void); BINARYEN_API BinaryenOp BinaryenRefAsExternInternalize(void); BINARYEN_API BinaryenOp BinaryenRefAsExternExternalize(void); diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js index 5bd5e5505..3fe73f179 100644 --- a/src/js/binaryen.js-post.js +++ b/src/js/binaryen.js-post.js @@ -391,6 +391,15 @@ function initializeConstants() { 'XorVec128', 'AndNotVec128', 'BitselectVec128', + 'RelaxedFmaVecF32x4', + 'RelaxedFmsVecF32x4', + 'RelaxedFmaVecF64x2', + 'RelaxedFmsVecF64x2', + 'LaneselectI8x16', + 'LaneselectI16x8', + 'LaneselectI32x4', + 'LaneselectI64x2', + 'DotI8x16I7x16AddSToVecI32x4', 'AnyTrueVec128', 'PopcntVecI8x16', 'AbsVecI8x16', @@ -548,7 +557,18 @@ function initializeConstants() { 'TruncSatZeroUVecF64x2ToVecI32x4', 'DemoteZeroVecF64x2ToVecF32x4', 'PromoteLowVecF32x4ToVecF64x2', + 'RelaxedTruncSVecF32x4ToVecI32x4', + 'RelaxedTruncUVecF32x4ToVecI32x4', + 'RelaxedTruncZeroSVecF64x2ToVecI32x4', + 'RelaxedTruncZeroUVecF64x2ToVecI32x4', 'SwizzleVecI8x16', + 'RelaxedSwizzleVecI8x16', + 'RelaxedMinVecF32x4', + 'RelaxedMaxVecF32x4', + 'RelaxedMinVecF64x2', + 'RelaxedMaxVecF64x2', + 'RelaxedQ15MulrSVecI16x8', + 'DotI8x16I7x16SToVecI16x8', 'RefAsNonNull', 'RefAsExternInternalize', 'RefAsExternExternalize', diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c index 4a1f53e3c..a8d07d717 100644 --- a/test/example/c-api-kitchen-sink.c +++ b/test/example/c-api-kitchen-sink.c @@ -647,6 +647,10 @@ void test_core() { makeUnary(module, BinaryenTruncSatZeroUVecF64x2ToVecI32x4(), v128), makeUnary(module, BinaryenDemoteZeroVecF64x2ToVecF32x4(), v128), makeUnary(module, BinaryenPromoteLowVecF32x4ToVecF64x2(), v128), + makeUnary(module, BinaryenRelaxedTruncSVecF32x4ToVecI32x4(), v128), + makeUnary(module, BinaryenRelaxedTruncUVecF32x4ToVecI32x4(), v128), + makeUnary(module, BinaryenRelaxedTruncZeroSVecF64x2ToVecI32x4(), v128), + makeUnary(module, BinaryenRelaxedTruncZeroUVecF64x2ToVecI32x4(), v128), // Binary makeBinary(module, BinaryenAddInt32(), i32), makeBinary(module, BinaryenSubFloat64(), f64), @@ -812,6 +816,13 @@ void test_core() { makeBinary(module, BinaryenNarrowSVecI32x4ToVecI16x8(), v128), makeBinary(module, BinaryenNarrowUVecI32x4ToVecI16x8(), v128), makeBinary(module, BinaryenSwizzleVecI8x16(), v128), + makeBinary(module, BinaryenRelaxedSwizzleVecI8x16(), v128), + makeBinary(module, BinaryenRelaxedMinVecF32x4(), v128), + makeBinary(module, BinaryenRelaxedMaxVecF32x4(), v128), + makeBinary(module, BinaryenRelaxedMinVecF64x2(), v128), + makeBinary(module, BinaryenRelaxedMaxVecF64x2(), v128), + makeBinary(module, BinaryenRelaxedQ15MulrSVecI16x8(), v128), + makeBinary(module, BinaryenDotI8x16I7x16SToVecI16x8(), v128), // SIMD lane manipulation makeSIMDExtract(module, BinaryenExtractLaneSVecI8x16()), makeSIMDExtract(module, BinaryenExtractLaneUVecI8x16()), @@ -933,6 +944,15 @@ void test_core() { // Other SIMD makeSIMDShuffle(module), makeSIMDTernary(module, BinaryenBitselectVec128()), + makeSIMDTernary(module, BinaryenRelaxedFmaVecF32x4()), + makeSIMDTernary(module, BinaryenRelaxedFmsVecF32x4()), + makeSIMDTernary(module, BinaryenRelaxedFmaVecF64x2()), + makeSIMDTernary(module, BinaryenRelaxedFmsVecF64x2()), + makeSIMDTernary(module, BinaryenLaneselectI8x16()), + makeSIMDTernary(module, BinaryenLaneselectI16x8()), + makeSIMDTernary(module, BinaryenLaneselectI32x4()), + makeSIMDTernary(module, BinaryenLaneselectI64x2()), + makeSIMDTernary(module, BinaryenDotI8x16I7x16AddSToVecI32x4()), // Bulk memory makeMemoryInit(module), makeDataDrop(module), diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt index bd0d0e16f..ecfdfc081 100644 --- a/test/example/c-api-kitchen-sink.txt +++ b/test/example/c-api-kitchen-sink.txt @@ -592,6 +592,26 @@ BinaryenFeatureAll: 126975 ) ) (drop + (i32x4.relaxed_trunc_f32x4_s + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i32x4.relaxed_trunc_f32x4_u + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i32x4.relaxed_trunc_f64x2_s_zero + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i32x4.relaxed_trunc_f64x2_u_zero + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop (i32.add (i32.const -10) (i32.const -11) @@ -1564,6 +1584,48 @@ BinaryenFeatureAll: 126975 ) ) (drop + (i8x16.relaxed_swizzle + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (f32x4.relaxed_min + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (f32x4.relaxed_max + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (f64x2.relaxed_min + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (f64x2.relaxed_max + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i16x8.relaxed_q15mulr_s + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i16x8.dot_i8x16_i7x16_s + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop (i8x16.extract_lane_s 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) @@ -1824,6 +1886,69 @@ BinaryenFeatureAll: 126975 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) + (drop + (f32x4.relaxed_fma + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (f32x4.relaxed_fms + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (f64x2.relaxed_fma + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (f64x2.relaxed_fms + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i8x16.laneselect + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i16x8.laneselect + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i32x4.laneselect + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i64x2.laneselect + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i32x4.dot_i8x16_i7x16_add_s + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) (memory.init 0 (i32.const 1024) (i32.const 0) |