summaryrefslogtreecommitdiff
path: root/test/example/c-api-kitchen-sink.c
diff options
context:
space:
mode:
authorThomas Lively <7121787+tlively@users.noreply.github.com>2019-11-22 12:46:04 -0800
committerGitHub <noreply@github.com>2019-11-22 12:46:04 -0800
commite2587f30827cd3d35dd409c2958b25a6c5517092 (patch)
tree22a372a3986cbfbc6db09df45bffe00631083f69 /test/example/c-api-kitchen-sink.c
parenta0c423ef501ea7267c24c46e645296e713b2ea42 (diff)
downloadbinaryen-e2587f30827cd3d35dd409c2958b25a6c5517092.tar.gz
binaryen-e2587f30827cd3d35dd409c2958b25a6c5517092.tar.bz2
binaryen-e2587f30827cd3d35dd409c2958b25a6c5517092.zip
Multivalue type creation and inspection (#2459)
Adds the ability to create multivalue types from vectors of concrete value types. All types are transparently interned, so their representation is still a single uint32_t. Types can be extracted into vectors of their component parts, and all the single value types expand into vectors containing themselves. Multivalue types are not yet used in the IR, but their creation and inspection functionality is exposed and tested in the C and JS APIs. Also makes common type predicates methods of Type and improves the ergonomics of type printing.
Diffstat (limited to 'test/example/c-api-kitchen-sink.c')
-rw-r--r--test/example/c-api-kitchen-sink.c525
1 files changed, 297 insertions, 228 deletions
diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c
index f5fe5dc50..68d7e82ea 100644
--- a/test/example/c-api-kitchen-sink.c
+++ b/test/example/c-api-kitchen-sink.c
@@ -149,16 +149,78 @@ BinaryenExpressionRef makeMemoryFill(BinaryenModuleRef module) {
// tests
void test_types() {
- printf("BinaryenTypeNone: %d\n", BinaryenTypeNone());
- printf("BinaryenTypeInt32: %d\n", BinaryenTypeInt32());
- printf("BinaryenTypeInt64: %d\n", BinaryenTypeInt64());
- printf("BinaryenTypeFloat32: %d\n", BinaryenTypeFloat32());
- printf("BinaryenTypeFloat64: %d\n", BinaryenTypeFloat64());
- printf("BinaryenTypeVec128: %d\n", BinaryenTypeVec128());
- printf("BinaryenTypeAnyref: %d\n", BinaryenTypeAnyref());
- printf("BinaryenTypeExnref: %d\n", BinaryenTypeExnref());
- printf("BinaryenTypeUnreachable: %d\n", BinaryenTypeUnreachable());
- printf("BinaryenTypeAuto: %d\n", BinaryenTypeAuto());
+ BinaryenType valueType = 0xdeadbeef;
+
+ BinaryenType none = BinaryenTypeNone();
+ printf(" // BinaryenTypeNone: %d\n", none);
+ assert(BinaryenTypeArity(none) == 0);
+ BinaryenTypeExpand(none, &valueType);
+ assert(valueType == 0xdeadbeef);
+
+ BinaryenType unreachable = BinaryenTypeUnreachable();
+ printf(" // BinaryenTypeUnreachable: %d\n", unreachable);
+ assert(BinaryenTypeArity(unreachable) == 0);
+ BinaryenTypeExpand(unreachable, &valueType);
+ assert(valueType == 0xdeadbeef);
+
+ BinaryenType i32 = BinaryenTypeInt32();
+ printf(" // BinaryenTypeInt32: %d\n", i32);
+ assert(BinaryenTypeArity(i32) == 1);
+ BinaryenTypeExpand(i32, &valueType);
+ assert(valueType == i32);
+
+ BinaryenType i64 = BinaryenTypeInt64();
+ printf(" // BinaryenTypeInt64: %d\n", i64);
+ assert(BinaryenTypeArity(i64) == 1);
+ BinaryenTypeExpand(i64, &valueType);
+ assert(valueType == i64);
+
+ BinaryenType f32 = BinaryenTypeFloat32();
+ printf(" // BinaryenTypeFloat32: %d\n", f32);
+ assert(BinaryenTypeArity(f32) == 1);
+ BinaryenTypeExpand(f32, &valueType);
+ assert(valueType == f32);
+
+ BinaryenType f64 = BinaryenTypeFloat64();
+ printf(" // BinaryenTypeFloat64: %d\n", f64);
+ assert(BinaryenTypeArity(f64) == 1);
+ BinaryenTypeExpand(f64, &valueType);
+ assert(valueType == f64);
+
+ BinaryenType v128 = BinaryenTypeVec128();
+ printf(" // BinaryenTypeVec128: %d\n", v128);
+ assert(BinaryenTypeArity(v128) == 1);
+ BinaryenTypeExpand(v128, &valueType);
+ assert(valueType == v128);
+
+ BinaryenType anyref = BinaryenTypeAnyref();
+ printf(" // BinaryenTypeAnyref: %d\n", anyref);
+ assert(BinaryenTypeArity(anyref) == 1);
+ BinaryenTypeExpand(anyref, &valueType);
+ assert(valueType == anyref);
+
+ BinaryenType exnref = BinaryenTypeExnref();
+ printf(" // BinaryenTypeExnref: %d\n", exnref);
+ assert(BinaryenTypeArity(exnref) == 1);
+ BinaryenTypeExpand(exnref, &valueType);
+ assert(valueType == exnref);
+
+ printf(" // BinaryenTypeAuto: %d\n", BinaryenTypeAuto());
+
+ BinaryenType pair[] = {i32, i32};
+
+ BinaryenType i32_pair = BinaryenTypeCreate(pair, 2);
+ assert(BinaryenTypeArity(i32_pair) == 2);
+ pair[0] = pair[1] = none;
+ BinaryenTypeExpand(i32_pair, pair);
+ assert(pair[0] == i32 && pair[1] == i32);
+
+ BinaryenType duplicate_pair = BinaryenTypeCreate(pair, 2);
+ assert(duplicate_pair == i32_pair);
+
+ pair[0] = pair[1] = f32;
+ BinaryenType float_pair = BinaryenTypeCreate(pair, 2);
+ assert(float_pair != i32_pair);
}
void test_features() {
@@ -254,221 +316,227 @@ void test_core() {
2,
BinaryenTypeNone());
+ BinaryenType i32 = BinaryenTypeInt32();
+ BinaryenType i64 = BinaryenTypeInt64();
+ BinaryenType f32 = BinaryenTypeFloat32();
+ BinaryenType f64 = BinaryenTypeFloat64();
+ BinaryenType v128 = BinaryenTypeVec128();
+
BinaryenExpressionRef valueList[] = {
// Unary
- makeUnary(module, BinaryenClzInt32(), 1),
- makeUnary(module, BinaryenCtzInt64(), 2),
- makeUnary(module, BinaryenPopcntInt32(), 1),
- makeUnary(module, BinaryenNegFloat32(), 3),
- makeUnary(module, BinaryenAbsFloat64(), 4),
- makeUnary(module, BinaryenCeilFloat32(), 3),
- makeUnary(module, BinaryenFloorFloat64(), 4),
- makeUnary(module, BinaryenTruncFloat32(), 3),
- makeUnary(module, BinaryenNearestFloat32(), 3),
- makeUnary(module, BinaryenSqrtFloat64(), 4),
- makeUnary(module, BinaryenEqZInt32(), 1),
- makeUnary(module, BinaryenExtendSInt32(), 1),
- makeUnary(module, BinaryenExtendUInt32(), 1),
- makeUnary(module, BinaryenWrapInt64(), 2),
- makeUnary(module, BinaryenTruncSFloat32ToInt32(), 3),
- makeUnary(module, BinaryenTruncSFloat32ToInt64(), 3),
- makeUnary(module, BinaryenTruncUFloat32ToInt32(), 3),
- makeUnary(module, BinaryenTruncUFloat32ToInt64(), 3),
- makeUnary(module, BinaryenTruncSFloat64ToInt32(), 4),
- makeUnary(module, BinaryenTruncSFloat64ToInt64(), 4),
- makeUnary(module, BinaryenTruncUFloat64ToInt32(), 4),
- makeUnary(module, BinaryenTruncUFloat64ToInt64(), 4),
- makeUnary(module, BinaryenTruncSatSFloat32ToInt32(), 3),
- makeUnary(module, BinaryenTruncSatSFloat32ToInt64(), 3),
- makeUnary(module, BinaryenTruncSatUFloat32ToInt32(), 3),
- makeUnary(module, BinaryenTruncSatUFloat32ToInt64(), 3),
- makeUnary(module, BinaryenTruncSatSFloat64ToInt32(), 4),
- makeUnary(module, BinaryenTruncSatSFloat64ToInt64(), 4),
- makeUnary(module, BinaryenTruncSatUFloat64ToInt32(), 4),
- makeUnary(module, BinaryenTruncSatUFloat64ToInt64(), 4),
- makeUnary(module, BinaryenReinterpretFloat32(), 3),
- makeUnary(module, BinaryenReinterpretFloat64(), 4),
- makeUnary(module, BinaryenConvertSInt32ToFloat32(), 1),
- makeUnary(module, BinaryenConvertSInt32ToFloat64(), 1),
- makeUnary(module, BinaryenConvertUInt32ToFloat32(), 1),
- makeUnary(module, BinaryenConvertUInt32ToFloat64(), 1),
- makeUnary(module, BinaryenConvertSInt64ToFloat32(), 2),
- makeUnary(module, BinaryenConvertSInt64ToFloat64(), 2),
- makeUnary(module, BinaryenConvertUInt64ToFloat32(), 2),
- makeUnary(module, BinaryenConvertUInt64ToFloat64(), 2),
- makeUnary(module, BinaryenPromoteFloat32(), 3),
- makeUnary(module, BinaryenDemoteFloat64(), 4),
- makeUnary(module, BinaryenReinterpretInt32(), 1),
- makeUnary(module, BinaryenReinterpretInt64(), 2),
- makeUnary(module, BinaryenSplatVecI8x16(), 1),
- makeUnary(module, BinaryenSplatVecI16x8(), 1),
- makeUnary(module, BinaryenSplatVecI32x4(), 1),
- makeUnary(module, BinaryenSplatVecI64x2(), 2),
- makeUnary(module, BinaryenSplatVecF32x4(), 3),
- makeUnary(module, BinaryenSplatVecF64x2(), 4),
- makeUnary(module, BinaryenNotVec128(), 5),
- makeUnary(module, BinaryenNegVecI8x16(), 5),
- makeUnary(module, BinaryenAnyTrueVecI8x16(), 5),
- makeUnary(module, BinaryenAllTrueVecI8x16(), 5),
- makeUnary(module, BinaryenNegVecI16x8(), 5),
- makeUnary(module, BinaryenAnyTrueVecI16x8(), 5),
- makeUnary(module, BinaryenAllTrueVecI16x8(), 5),
- makeUnary(module, BinaryenNegVecI32x4(), 5),
- makeUnary(module, BinaryenAnyTrueVecI32x4(), 5),
- makeUnary(module, BinaryenAllTrueVecI32x4(), 5),
- makeUnary(module, BinaryenNegVecI64x2(), 5),
- makeUnary(module, BinaryenAnyTrueVecI64x2(), 5),
- makeUnary(module, BinaryenAllTrueVecI64x2(), 5),
- makeUnary(module, BinaryenAbsVecF32x4(), 5),
- makeUnary(module, BinaryenNegVecF32x4(), 5),
- makeUnary(module, BinaryenSqrtVecF32x4(), 5),
- makeUnary(module, BinaryenAbsVecF64x2(), 5),
- makeUnary(module, BinaryenNegVecF64x2(), 5),
- makeUnary(module, BinaryenSqrtVecF64x2(), 5),
- makeUnary(module, BinaryenTruncSatSVecF32x4ToVecI32x4(), 5),
- makeUnary(module, BinaryenTruncSatUVecF32x4ToVecI32x4(), 5),
- makeUnary(module, BinaryenTruncSatSVecF64x2ToVecI64x2(), 5),
- makeUnary(module, BinaryenTruncSatUVecF64x2ToVecI64x2(), 5),
- makeUnary(module, BinaryenConvertSVecI32x4ToVecF32x4(), 5),
- makeUnary(module, BinaryenConvertUVecI32x4ToVecF32x4(), 5),
- makeUnary(module, BinaryenConvertSVecI64x2ToVecF64x2(), 5),
- makeUnary(module, BinaryenConvertUVecI64x2ToVecF64x2(), 5),
- makeUnary(module, BinaryenWidenLowSVecI8x16ToVecI16x8(), 5),
- makeUnary(module, BinaryenWidenHighSVecI8x16ToVecI16x8(), 5),
- makeUnary(module, BinaryenWidenLowUVecI8x16ToVecI16x8(), 5),
- makeUnary(module, BinaryenWidenHighUVecI8x16ToVecI16x8(), 5),
- makeUnary(module, BinaryenWidenLowSVecI16x8ToVecI32x4(), 5),
- makeUnary(module, BinaryenWidenHighSVecI16x8ToVecI32x4(), 5),
- makeUnary(module, BinaryenWidenLowUVecI16x8ToVecI32x4(), 5),
- makeUnary(module, BinaryenWidenHighUVecI16x8ToVecI32x4(), 5),
+ makeUnary(module, BinaryenClzInt32(), i32),
+ makeUnary(module, BinaryenCtzInt64(), i64),
+ makeUnary(module, BinaryenPopcntInt32(), i32),
+ makeUnary(module, BinaryenNegFloat32(), f32),
+ makeUnary(module, BinaryenAbsFloat64(), f64),
+ makeUnary(module, BinaryenCeilFloat32(), f32),
+ makeUnary(module, BinaryenFloorFloat64(), f64),
+ makeUnary(module, BinaryenTruncFloat32(), f32),
+ makeUnary(module, BinaryenNearestFloat32(), f32),
+ makeUnary(module, BinaryenSqrtFloat64(), f64),
+ makeUnary(module, BinaryenEqZInt32(), i32),
+ makeUnary(module, BinaryenExtendSInt32(), i32),
+ makeUnary(module, BinaryenExtendUInt32(), i32),
+ makeUnary(module, BinaryenWrapInt64(), i64),
+ makeUnary(module, BinaryenTruncSFloat32ToInt32(), f32),
+ makeUnary(module, BinaryenTruncSFloat32ToInt64(), f32),
+ makeUnary(module, BinaryenTruncUFloat32ToInt32(), f32),
+ makeUnary(module, BinaryenTruncUFloat32ToInt64(), f32),
+ makeUnary(module, BinaryenTruncSFloat64ToInt32(), f64),
+ makeUnary(module, BinaryenTruncSFloat64ToInt64(), f64),
+ makeUnary(module, BinaryenTruncUFloat64ToInt32(), f64),
+ makeUnary(module, BinaryenTruncUFloat64ToInt64(), f64),
+ makeUnary(module, BinaryenTruncSatSFloat32ToInt32(), f32),
+ makeUnary(module, BinaryenTruncSatSFloat32ToInt64(), f32),
+ makeUnary(module, BinaryenTruncSatUFloat32ToInt32(), f32),
+ makeUnary(module, BinaryenTruncSatUFloat32ToInt64(), f32),
+ makeUnary(module, BinaryenTruncSatSFloat64ToInt32(), f64),
+ makeUnary(module, BinaryenTruncSatSFloat64ToInt64(), f64),
+ makeUnary(module, BinaryenTruncSatUFloat64ToInt32(), f64),
+ makeUnary(module, BinaryenTruncSatUFloat64ToInt64(), f64),
+ makeUnary(module, BinaryenReinterpretFloat32(), f32),
+ makeUnary(module, BinaryenReinterpretFloat64(), f64),
+ makeUnary(module, BinaryenConvertSInt32ToFloat32(), i32),
+ makeUnary(module, BinaryenConvertSInt32ToFloat64(), i32),
+ makeUnary(module, BinaryenConvertUInt32ToFloat32(), i32),
+ makeUnary(module, BinaryenConvertUInt32ToFloat64(), i32),
+ makeUnary(module, BinaryenConvertSInt64ToFloat32(), i64),
+ makeUnary(module, BinaryenConvertSInt64ToFloat64(), i64),
+ makeUnary(module, BinaryenConvertUInt64ToFloat32(), i64),
+ makeUnary(module, BinaryenConvertUInt64ToFloat64(), i64),
+ makeUnary(module, BinaryenPromoteFloat32(), f32),
+ makeUnary(module, BinaryenDemoteFloat64(), f64),
+ makeUnary(module, BinaryenReinterpretInt32(), i32),
+ makeUnary(module, BinaryenReinterpretInt64(), i64),
+ makeUnary(module, BinaryenSplatVecI8x16(), i32),
+ makeUnary(module, BinaryenSplatVecI16x8(), i32),
+ makeUnary(module, BinaryenSplatVecI32x4(), i32),
+ makeUnary(module, BinaryenSplatVecI64x2(), i64),
+ makeUnary(module, BinaryenSplatVecF32x4(), f32),
+ makeUnary(module, BinaryenSplatVecF64x2(), f64),
+ makeUnary(module, BinaryenNotVec128(), v128),
+ makeUnary(module, BinaryenNegVecI8x16(), v128),
+ makeUnary(module, BinaryenAnyTrueVecI8x16(), v128),
+ makeUnary(module, BinaryenAllTrueVecI8x16(), v128),
+ makeUnary(module, BinaryenNegVecI16x8(), v128),
+ makeUnary(module, BinaryenAnyTrueVecI16x8(), v128),
+ makeUnary(module, BinaryenAllTrueVecI16x8(), v128),
+ makeUnary(module, BinaryenNegVecI32x4(), v128),
+ makeUnary(module, BinaryenAnyTrueVecI32x4(), v128),
+ makeUnary(module, BinaryenAllTrueVecI32x4(), v128),
+ makeUnary(module, BinaryenNegVecI64x2(), v128),
+ makeUnary(module, BinaryenAnyTrueVecI64x2(), v128),
+ makeUnary(module, BinaryenAllTrueVecI64x2(), v128),
+ makeUnary(module, BinaryenAbsVecF32x4(), v128),
+ makeUnary(module, BinaryenNegVecF32x4(), v128),
+ makeUnary(module, BinaryenSqrtVecF32x4(), v128),
+ makeUnary(module, BinaryenAbsVecF64x2(), v128),
+ makeUnary(module, BinaryenNegVecF64x2(), v128),
+ makeUnary(module, BinaryenSqrtVecF64x2(), v128),
+ makeUnary(module, BinaryenTruncSatSVecF32x4ToVecI32x4(), v128),
+ makeUnary(module, BinaryenTruncSatUVecF32x4ToVecI32x4(), v128),
+ makeUnary(module, BinaryenTruncSatSVecF64x2ToVecI64x2(), v128),
+ makeUnary(module, BinaryenTruncSatUVecF64x2ToVecI64x2(), v128),
+ makeUnary(module, BinaryenConvertSVecI32x4ToVecF32x4(), v128),
+ makeUnary(module, BinaryenConvertUVecI32x4ToVecF32x4(), v128),
+ makeUnary(module, BinaryenConvertSVecI64x2ToVecF64x2(), v128),
+ makeUnary(module, BinaryenConvertUVecI64x2ToVecF64x2(), v128),
+ makeUnary(module, BinaryenWidenLowSVecI8x16ToVecI16x8(), v128),
+ makeUnary(module, BinaryenWidenHighSVecI8x16ToVecI16x8(), v128),
+ makeUnary(module, BinaryenWidenLowUVecI8x16ToVecI16x8(), v128),
+ makeUnary(module, BinaryenWidenHighUVecI8x16ToVecI16x8(), v128),
+ makeUnary(module, BinaryenWidenLowSVecI16x8ToVecI32x4(), v128),
+ makeUnary(module, BinaryenWidenHighSVecI16x8ToVecI32x4(), v128),
+ makeUnary(module, BinaryenWidenLowUVecI16x8ToVecI32x4(), v128),
+ makeUnary(module, BinaryenWidenHighUVecI16x8ToVecI32x4(), v128),
// Binary
- makeBinary(module, BinaryenAddInt32(), 1),
- makeBinary(module, BinaryenSubFloat64(), 4),
- makeBinary(module, BinaryenDivSInt32(), 1),
- makeBinary(module, BinaryenDivUInt64(), 2),
- makeBinary(module, BinaryenRemSInt64(), 2),
- makeBinary(module, BinaryenRemUInt32(), 1),
- makeBinary(module, BinaryenAndInt32(), 1),
- makeBinary(module, BinaryenOrInt64(), 2),
- makeBinary(module, BinaryenXorInt32(), 1),
- makeBinary(module, BinaryenShlInt64(), 2),
- makeBinary(module, BinaryenShrUInt64(), 2),
- makeBinary(module, BinaryenShrSInt32(), 1),
- makeBinary(module, BinaryenRotLInt32(), 1),
- makeBinary(module, BinaryenRotRInt64(), 2),
- makeBinary(module, BinaryenDivFloat32(), 3),
- makeBinary(module, BinaryenCopySignFloat64(), 4),
- makeBinary(module, BinaryenMinFloat32(), 3),
- makeBinary(module, BinaryenMaxFloat64(), 4),
- makeBinary(module, BinaryenEqInt32(), 1),
- makeBinary(module, BinaryenNeFloat32(), 3),
- makeBinary(module, BinaryenLtSInt32(), 1),
- makeBinary(module, BinaryenLtUInt64(), 2),
- makeBinary(module, BinaryenLeSInt64(), 2),
- makeBinary(module, BinaryenLeUInt32(), 1),
- makeBinary(module, BinaryenGtSInt64(), 2),
- makeBinary(module, BinaryenGtUInt32(), 1),
- makeBinary(module, BinaryenGeSInt32(), 1),
- makeBinary(module, BinaryenGeUInt64(), 2),
- makeBinary(module, BinaryenLtFloat32(), 3),
- makeBinary(module, BinaryenLeFloat64(), 4),
- makeBinary(module, BinaryenGtFloat64(), 4),
- makeBinary(module, BinaryenGeFloat32(), 3),
- makeBinary(module, BinaryenEqVecI8x16(), 5),
- makeBinary(module, BinaryenNeVecI8x16(), 5),
- makeBinary(module, BinaryenLtSVecI8x16(), 5),
- makeBinary(module, BinaryenLtUVecI8x16(), 5),
- makeBinary(module, BinaryenGtSVecI8x16(), 5),
- makeBinary(module, BinaryenGtUVecI8x16(), 5),
- makeBinary(module, BinaryenLeSVecI8x16(), 5),
- makeBinary(module, BinaryenLeUVecI8x16(), 5),
- makeBinary(module, BinaryenGeSVecI8x16(), 5),
- makeBinary(module, BinaryenGeUVecI8x16(), 5),
- makeBinary(module, BinaryenEqVecI16x8(), 5),
- makeBinary(module, BinaryenNeVecI16x8(), 5),
- makeBinary(module, BinaryenLtSVecI16x8(), 5),
- makeBinary(module, BinaryenLtUVecI16x8(), 5),
- makeBinary(module, BinaryenGtSVecI16x8(), 5),
- makeBinary(module, BinaryenGtUVecI16x8(), 5),
- makeBinary(module, BinaryenLeSVecI16x8(), 5),
- makeBinary(module, BinaryenLeUVecI16x8(), 5),
- makeBinary(module, BinaryenGeSVecI16x8(), 5),
- makeBinary(module, BinaryenGeUVecI16x8(), 5),
- makeBinary(module, BinaryenEqVecI32x4(), 5),
- makeBinary(module, BinaryenNeVecI32x4(), 5),
- makeBinary(module, BinaryenLtSVecI32x4(), 5),
- makeBinary(module, BinaryenLtUVecI32x4(), 5),
- makeBinary(module, BinaryenGtSVecI32x4(), 5),
- makeBinary(module, BinaryenGtUVecI32x4(), 5),
- makeBinary(module, BinaryenLeSVecI32x4(), 5),
- makeBinary(module, BinaryenLeUVecI32x4(), 5),
- makeBinary(module, BinaryenGeSVecI32x4(), 5),
- makeBinary(module, BinaryenGeUVecI32x4(), 5),
- makeBinary(module, BinaryenEqVecF32x4(), 5),
- makeBinary(module, BinaryenNeVecF32x4(), 5),
- makeBinary(module, BinaryenLtVecF32x4(), 5),
- makeBinary(module, BinaryenGtVecF32x4(), 5),
- makeBinary(module, BinaryenLeVecF32x4(), 5),
- makeBinary(module, BinaryenGeVecF32x4(), 5),
- makeBinary(module, BinaryenEqVecF64x2(), 5),
- makeBinary(module, BinaryenNeVecF64x2(), 5),
- makeBinary(module, BinaryenLtVecF64x2(), 5),
- makeBinary(module, BinaryenGtVecF64x2(), 5),
- makeBinary(module, BinaryenLeVecF64x2(), 5),
- makeBinary(module, BinaryenGeVecF64x2(), 5),
- makeBinary(module, BinaryenAndVec128(), 5),
- makeBinary(module, BinaryenOrVec128(), 5),
- makeBinary(module, BinaryenXorVec128(), 5),
- makeBinary(module, BinaryenAndNotVec128(), 5),
- makeBinary(module, BinaryenAddVecI8x16(), 5),
- makeBinary(module, BinaryenAddSatSVecI8x16(), 5),
- makeBinary(module, BinaryenAddSatUVecI8x16(), 5),
- makeBinary(module, BinaryenSubVecI8x16(), 5),
- makeBinary(module, BinaryenSubSatSVecI8x16(), 5),
- makeBinary(module, BinaryenSubSatUVecI8x16(), 5),
- makeBinary(module, BinaryenMulVecI8x16(), 5),
- makeBinary(module, BinaryenAddVecI16x8(), 5),
- makeBinary(module, BinaryenAddSatSVecI16x8(), 5),
- makeBinary(module, BinaryenAddSatUVecI16x8(), 5),
- makeBinary(module, BinaryenSubVecI16x8(), 5),
- makeBinary(module, BinaryenSubSatSVecI16x8(), 5),
- makeBinary(module, BinaryenSubSatUVecI16x8(), 5),
- makeBinary(module, BinaryenMulVecI16x8(), 5),
- makeBinary(module, BinaryenMinSVecI16x8(), 5),
- makeBinary(module, BinaryenMinUVecI16x8(), 5),
- makeBinary(module, BinaryenMaxSVecI16x8(), 5),
- makeBinary(module, BinaryenMaxUVecI16x8(), 5),
- makeBinary(module, BinaryenAddVecI32x4(), 5),
- makeBinary(module, BinaryenSubVecI32x4(), 5),
- makeBinary(module, BinaryenMulVecI32x4(), 5),
- makeBinary(module, BinaryenMinSVecI8x16(), 5),
- makeBinary(module, BinaryenMinUVecI8x16(), 5),
- makeBinary(module, BinaryenMaxSVecI8x16(), 5),
- makeBinary(module, BinaryenMaxUVecI8x16(), 5),
- makeBinary(module, BinaryenAddVecI64x2(), 5),
- makeBinary(module, BinaryenSubVecI64x2(), 5),
- makeBinary(module, BinaryenAddVecF32x4(), 5),
- makeBinary(module, BinaryenSubVecF32x4(), 5),
- makeBinary(module, BinaryenMulVecF32x4(), 5),
- makeBinary(module, BinaryenMinSVecI32x4(), 5),
- makeBinary(module, BinaryenMinUVecI32x4(), 5),
- makeBinary(module, BinaryenMaxSVecI32x4(), 5),
- makeBinary(module, BinaryenMaxUVecI32x4(), 5),
- makeBinary(module, BinaryenDotSVecI16x8ToVecI32x4(), 5),
- makeBinary(module, BinaryenDivVecF32x4(), 5),
- makeBinary(module, BinaryenMinVecF32x4(), 5),
- makeBinary(module, BinaryenMaxVecF32x4(), 5),
- makeBinary(module, BinaryenAddVecF64x2(), 5),
- makeBinary(module, BinaryenSubVecF64x2(), 5),
- makeBinary(module, BinaryenMulVecF64x2(), 5),
- makeBinary(module, BinaryenDivVecF64x2(), 5),
- makeBinary(module, BinaryenMinVecF64x2(), 5),
- makeBinary(module, BinaryenMaxVecF64x2(), 5),
- makeBinary(module, BinaryenNarrowSVecI16x8ToVecI8x16(), 5),
- makeBinary(module, BinaryenNarrowUVecI16x8ToVecI8x16(), 5),
- makeBinary(module, BinaryenNarrowSVecI32x4ToVecI16x8(), 5),
- makeBinary(module, BinaryenNarrowUVecI32x4ToVecI16x8(), 5),
- makeBinary(module, BinaryenSwizzleVec8x16(), 5),
+ makeBinary(module, BinaryenAddInt32(), i32),
+ makeBinary(module, BinaryenSubFloat64(), f64),
+ makeBinary(module, BinaryenDivSInt32(), i32),
+ makeBinary(module, BinaryenDivUInt64(), i64),
+ makeBinary(module, BinaryenRemSInt64(), i64),
+ makeBinary(module, BinaryenRemUInt32(), i32),
+ makeBinary(module, BinaryenAndInt32(), i32),
+ makeBinary(module, BinaryenOrInt64(), i64),
+ makeBinary(module, BinaryenXorInt32(), i32),
+ makeBinary(module, BinaryenShlInt64(), i64),
+ makeBinary(module, BinaryenShrUInt64(), i64),
+ makeBinary(module, BinaryenShrSInt32(), i32),
+ makeBinary(module, BinaryenRotLInt32(), i32),
+ makeBinary(module, BinaryenRotRInt64(), i64),
+ makeBinary(module, BinaryenDivFloat32(), f32),
+ makeBinary(module, BinaryenCopySignFloat64(), f64),
+ makeBinary(module, BinaryenMinFloat32(), f32),
+ makeBinary(module, BinaryenMaxFloat64(), f64),
+ makeBinary(module, BinaryenEqInt32(), i32),
+ makeBinary(module, BinaryenNeFloat32(), f32),
+ makeBinary(module, BinaryenLtSInt32(), i32),
+ makeBinary(module, BinaryenLtUInt64(), i64),
+ makeBinary(module, BinaryenLeSInt64(), i64),
+ makeBinary(module, BinaryenLeUInt32(), i32),
+ makeBinary(module, BinaryenGtSInt64(), i64),
+ makeBinary(module, BinaryenGtUInt32(), i32),
+ makeBinary(module, BinaryenGeSInt32(), i32),
+ makeBinary(module, BinaryenGeUInt64(), i64),
+ makeBinary(module, BinaryenLtFloat32(), f32),
+ makeBinary(module, BinaryenLeFloat64(), f64),
+ makeBinary(module, BinaryenGtFloat64(), f64),
+ makeBinary(module, BinaryenGeFloat32(), f32),
+ makeBinary(module, BinaryenEqVecI8x16(), v128),
+ makeBinary(module, BinaryenNeVecI8x16(), v128),
+ makeBinary(module, BinaryenLtSVecI8x16(), v128),
+ makeBinary(module, BinaryenLtUVecI8x16(), v128),
+ makeBinary(module, BinaryenGtSVecI8x16(), v128),
+ makeBinary(module, BinaryenGtUVecI8x16(), v128),
+ makeBinary(module, BinaryenLeSVecI8x16(), v128),
+ makeBinary(module, BinaryenLeUVecI8x16(), v128),
+ makeBinary(module, BinaryenGeSVecI8x16(), v128),
+ makeBinary(module, BinaryenGeUVecI8x16(), v128),
+ makeBinary(module, BinaryenEqVecI16x8(), v128),
+ makeBinary(module, BinaryenNeVecI16x8(), v128),
+ makeBinary(module, BinaryenLtSVecI16x8(), v128),
+ makeBinary(module, BinaryenLtUVecI16x8(), v128),
+ makeBinary(module, BinaryenGtSVecI16x8(), v128),
+ makeBinary(module, BinaryenGtUVecI16x8(), v128),
+ makeBinary(module, BinaryenLeSVecI16x8(), v128),
+ makeBinary(module, BinaryenLeUVecI16x8(), v128),
+ makeBinary(module, BinaryenGeSVecI16x8(), v128),
+ makeBinary(module, BinaryenGeUVecI16x8(), v128),
+ makeBinary(module, BinaryenEqVecI32x4(), v128),
+ makeBinary(module, BinaryenNeVecI32x4(), v128),
+ makeBinary(module, BinaryenLtSVecI32x4(), v128),
+ makeBinary(module, BinaryenLtUVecI32x4(), v128),
+ makeBinary(module, BinaryenGtSVecI32x4(), v128),
+ makeBinary(module, BinaryenGtUVecI32x4(), v128),
+ makeBinary(module, BinaryenLeSVecI32x4(), v128),
+ makeBinary(module, BinaryenLeUVecI32x4(), v128),
+ makeBinary(module, BinaryenGeSVecI32x4(), v128),
+ makeBinary(module, BinaryenGeUVecI32x4(), v128),
+ makeBinary(module, BinaryenEqVecF32x4(), v128),
+ makeBinary(module, BinaryenNeVecF32x4(), v128),
+ makeBinary(module, BinaryenLtVecF32x4(), v128),
+ makeBinary(module, BinaryenGtVecF32x4(), v128),
+ makeBinary(module, BinaryenLeVecF32x4(), v128),
+ makeBinary(module, BinaryenGeVecF32x4(), v128),
+ makeBinary(module, BinaryenEqVecF64x2(), v128),
+ makeBinary(module, BinaryenNeVecF64x2(), v128),
+ makeBinary(module, BinaryenLtVecF64x2(), v128),
+ makeBinary(module, BinaryenGtVecF64x2(), v128),
+ makeBinary(module, BinaryenLeVecF64x2(), v128),
+ makeBinary(module, BinaryenGeVecF64x2(), v128),
+ makeBinary(module, BinaryenAndVec128(), v128),
+ makeBinary(module, BinaryenOrVec128(), v128),
+ makeBinary(module, BinaryenXorVec128(), v128),
+ makeBinary(module, BinaryenAndNotVec128(), v128),
+ makeBinary(module, BinaryenAddVecI8x16(), v128),
+ makeBinary(module, BinaryenAddSatSVecI8x16(), v128),
+ makeBinary(module, BinaryenAddSatUVecI8x16(), v128),
+ makeBinary(module, BinaryenSubVecI8x16(), v128),
+ makeBinary(module, BinaryenSubSatSVecI8x16(), v128),
+ makeBinary(module, BinaryenSubSatUVecI8x16(), v128),
+ makeBinary(module, BinaryenMulVecI8x16(), v128),
+ makeBinary(module, BinaryenAddVecI16x8(), v128),
+ makeBinary(module, BinaryenAddSatSVecI16x8(), v128),
+ makeBinary(module, BinaryenAddSatUVecI16x8(), v128),
+ makeBinary(module, BinaryenSubVecI16x8(), v128),
+ makeBinary(module, BinaryenSubSatSVecI16x8(), v128),
+ makeBinary(module, BinaryenSubSatUVecI16x8(), v128),
+ makeBinary(module, BinaryenMulVecI16x8(), v128),
+ makeBinary(module, BinaryenMinSVecI16x8(), v128),
+ makeBinary(module, BinaryenMinUVecI16x8(), v128),
+ makeBinary(module, BinaryenMaxSVecI16x8(), v128),
+ makeBinary(module, BinaryenMaxUVecI16x8(), v128),
+ makeBinary(module, BinaryenAddVecI32x4(), v128),
+ makeBinary(module, BinaryenSubVecI32x4(), v128),
+ makeBinary(module, BinaryenMulVecI32x4(), v128),
+ makeBinary(module, BinaryenMinSVecI8x16(), v128),
+ makeBinary(module, BinaryenMinUVecI8x16(), v128),
+ makeBinary(module, BinaryenMaxSVecI8x16(), v128),
+ makeBinary(module, BinaryenMaxUVecI8x16(), v128),
+ makeBinary(module, BinaryenAddVecI64x2(), v128),
+ makeBinary(module, BinaryenSubVecI64x2(), v128),
+ makeBinary(module, BinaryenAddVecF32x4(), v128),
+ makeBinary(module, BinaryenSubVecF32x4(), v128),
+ makeBinary(module, BinaryenMulVecF32x4(), v128),
+ makeBinary(module, BinaryenMinSVecI32x4(), v128),
+ makeBinary(module, BinaryenMinUVecI32x4(), v128),
+ makeBinary(module, BinaryenMaxSVecI32x4(), v128),
+ makeBinary(module, BinaryenMaxUVecI32x4(), v128),
+ makeBinary(module, BinaryenDotSVecI16x8ToVecI32x4(), v128),
+ makeBinary(module, BinaryenDivVecF32x4(), v128),
+ makeBinary(module, BinaryenMinVecF32x4(), v128),
+ makeBinary(module, BinaryenMaxVecF32x4(), v128),
+ makeBinary(module, BinaryenAddVecF64x2(), v128),
+ makeBinary(module, BinaryenSubVecF64x2(), v128),
+ makeBinary(module, BinaryenMulVecF64x2(), v128),
+ makeBinary(module, BinaryenDivVecF64x2(), v128),
+ makeBinary(module, BinaryenMinVecF64x2(), v128),
+ makeBinary(module, BinaryenMaxVecF64x2(), v128),
+ makeBinary(module, BinaryenNarrowSVecI16x8ToVecI8x16(), v128),
+ makeBinary(module, BinaryenNarrowUVecI16x8ToVecI8x16(), v128),
+ makeBinary(module, BinaryenNarrowSVecI32x4ToVecI16x8(), v128),
+ makeBinary(module, BinaryenNarrowUVecI32x4ToVecI16x8(), v128),
+ makeBinary(module, BinaryenSwizzleVec8x16(), v128),
// SIMD lane manipulation
makeSIMDExtract(module, BinaryenExtractLaneSVecI8x16()),
makeSIMDExtract(module, BinaryenExtractLaneUVecI8x16()),
@@ -478,12 +546,12 @@ void test_core() {
makeSIMDExtract(module, BinaryenExtractLaneVecI64x2()),
makeSIMDExtract(module, BinaryenExtractLaneVecF32x4()),
makeSIMDExtract(module, BinaryenExtractLaneVecF64x2()),
- makeSIMDReplace(module, BinaryenReplaceLaneVecI8x16(), 1),
- makeSIMDReplace(module, BinaryenReplaceLaneVecI16x8(), 1),
- makeSIMDReplace(module, BinaryenReplaceLaneVecI32x4(), 1),
- makeSIMDReplace(module, BinaryenReplaceLaneVecI64x2(), 2),
- makeSIMDReplace(module, BinaryenReplaceLaneVecF32x4(), 3),
- makeSIMDReplace(module, BinaryenReplaceLaneVecF64x2(), 4),
+ makeSIMDReplace(module, BinaryenReplaceLaneVecI8x16(), i32),
+ makeSIMDReplace(module, BinaryenReplaceLaneVecI16x8(), i32),
+ makeSIMDReplace(module, BinaryenReplaceLaneVecI32x4(), i32),
+ makeSIMDReplace(module, BinaryenReplaceLaneVecI64x2(), i64),
+ makeSIMDReplace(module, BinaryenReplaceLaneVecF32x4(), f32),
+ makeSIMDReplace(module, BinaryenReplaceLaneVecF64x2(), f64),
// SIMD shift
makeSIMDShift(module, BinaryenShlVecI8x16()),
makeSIMDShift(module, BinaryenShrSVecI8x16()),
@@ -990,6 +1058,7 @@ void test_tracing() {
BinaryenSetAPITracing(1);
test_core();
test_relooper();
+ test_types();
BinaryenSetAPITracing(0);
}