summaryrefslogtreecommitdiff
path: root/src/js/binaryen.js-post.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js/binaryen.js-post.js')
-rw-r--r--src/js/binaryen.js-post.js926
1 files changed, 498 insertions, 428 deletions
diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js
index fa415ad0d..96562e6e0 100644
--- a/src/js/binaryen.js-post.js
+++ b/src/js/binaryen.js-post.js
@@ -29,444 +29,435 @@ function i8sToStack(i8s) {
return ret;
}
-// Types
-Module['none'] = Module['_BinaryenTypeNone']();
-Module['i32'] = Module['_BinaryenTypeInt32']();
-Module['i64'] = Module['_BinaryenTypeInt64']();
-Module['f32'] = Module['_BinaryenTypeFloat32']();
-Module['f64'] = Module['_BinaryenTypeFloat64']();
-Module['v128'] = Module['_BinaryenTypeVec128']();
-Module['anyref'] = Module['_BinaryenTypeAnyref']();
-Module['exnref'] = Module['_BinaryenTypeExnref']();
-Module['unreachable'] = Module['_BinaryenTypeUnreachable']();
-Module['auto'] = /* deprecated */ Module['undefined'] = Module['_BinaryenTypeAuto']();
+function initializeConstants() {
+
+ // Types
+ [ ['none', 'None'],
+ ['i32', 'Int32'],
+ ['i64', 'Int64'],
+ ['f32', 'Float32'],
+ ['f64', 'Float64'],
+ ['v128', 'Vec128'],
+ ['anyref', 'Anyref'],
+ ['exnref', 'Exnref'],
+ ['unreachable', 'Unreachable'],
+ ['auto', 'Auto']
+ ].forEach(function(entry) {
+ Module[entry[0]] = Module['_BinaryenType' + entry[1]]();
+ });
-Module['createType'] = function(types) {
- return preserveStack(function() {
- var array = i32sToStack(types);
- return Module['_BinaryenTypeCreate'](array, types.length);
+ // Expression ids
+ Module['ExpressionIds'] = {};
+ [ 'Invalid',
+ 'Block',
+ 'If',
+ 'Loop',
+ 'Break',
+ 'Switch',
+ 'Call',
+ 'CallIndirect',
+ 'LocalGet',
+ 'LocalSet',
+ 'GlobalGet',
+ 'GlobalSet',
+ 'Load',
+ 'Store',
+ 'Const',
+ 'Unary',
+ 'Binary',
+ 'Select',
+ 'Drop',
+ 'Return',
+ 'Host',
+ 'Nop',
+ 'Unreachable',
+ 'AtomicCmpxchg',
+ 'AtomicRMW',
+ 'AtomicWait',
+ 'AtomicNotify',
+ 'AtomicFence',
+ 'SIMDExtract',
+ 'SIMDReplace',
+ 'SIMDShuffle',
+ 'SIMDTernary',
+ 'SIMDShift',
+ 'SIMDLoad',
+ 'MemoryInit',
+ 'DataDrop',
+ 'MemoryCopy',
+ 'MemoryFill',
+ 'Try',
+ 'Throw',
+ 'Rethrow',
+ 'BrOnExn',
+ 'Push',
+ 'Pop'
+ ].forEach(function(name) {
+ Module['ExpressionIds'][name] = Module[name + 'Id'] = Module['_Binaryen' + name + 'Id']();
});
-};
-Module['expandType'] = function(ty) {
- return preserveStack(function() {
- var numTypes = Module['_BinaryenTypeArity'](ty);
- var array = stackAlloc(numTypes << 2);
- Module['_BinaryenTypeExpand'](ty, array);
- var types = [];
- for (var i = 0; i < numTypes; i++) {
- types.push(HEAPU32[(array >>> 2) + i]);
- }
- return types;
+ // External kinds
+ Module['ExternalKinds'] = {};
+ [ 'Function',
+ 'Table',
+ 'Memory',
+ 'Global',
+ 'Event'
+ ].forEach(function(name) {
+ Module['ExternalKinds'][name] = Module['External' + name] = Module['_BinaryenExternal' + name]();
});
-};
-// Expression ids
-Module['InvalidId'] = Module['_BinaryenInvalidId']();
-Module['BlockId'] = Module['_BinaryenBlockId']();
-Module['IfId'] = Module['_BinaryenIfId']();
-Module['LoopId'] = Module['_BinaryenLoopId']();
-Module['BreakId'] = Module['_BinaryenBreakId']();
-Module['SwitchId'] = Module['_BinaryenSwitchId']();
-Module['CallId'] = Module['_BinaryenCallId']();
-Module['CallIndirectId'] = Module['_BinaryenCallIndirectId']();
-Module['LocalGetId'] = Module['_BinaryenLocalGetId']();
-Module['LocalSetId'] = Module['_BinaryenLocalSetId']();
-Module['GlobalGetId'] = Module['_BinaryenGlobalGetId']();
-Module['GlobalSetId'] = Module['_BinaryenGlobalSetId']();
-Module['LoadId'] = Module['_BinaryenLoadId']();
-Module['StoreId'] = Module['_BinaryenStoreId']();
-Module['ConstId'] = Module['_BinaryenConstId']();
-Module['UnaryId'] = Module['_BinaryenUnaryId']();
-Module['BinaryId'] = Module['_BinaryenBinaryId']();
-Module['SelectId'] = Module['_BinaryenSelectId']();
-Module['DropId'] = Module['_BinaryenDropId']();
-Module['ReturnId'] = Module['_BinaryenReturnId']();
-Module['HostId'] = Module['_BinaryenHostId']();
-Module['NopId'] = Module['_BinaryenNopId']();
-Module['UnreachableId'] = Module['_BinaryenUnreachableId']();
-Module['AtomicCmpxchgId'] = Module['_BinaryenAtomicCmpxchgId']();
-Module['AtomicRMWId'] = Module['_BinaryenAtomicRMWId']();
-Module['AtomicWaitId'] = Module['_BinaryenAtomicWaitId']();
-Module['AtomicNotifyId'] = Module['_BinaryenAtomicNotifyId']();
-Module['AtomicFenceId'] = Module['_BinaryenAtomicFenceId']();
-Module['SIMDExtractId'] = Module['_BinaryenSIMDExtractId']();
-Module['SIMDReplaceId'] = Module['_BinaryenSIMDReplaceId']();
-Module['SIMDShuffleId'] = Module['_BinaryenSIMDShuffleId']();
-Module['SIMDTernaryId'] = Module['_BinaryenSIMDTernaryId']();
-Module['SIMDShiftId'] = Module['_BinaryenSIMDShiftId']();
-Module['SIMDLoadId'] = Module['_BinaryenSIMDLoadId']();
-Module['MemoryInitId'] = Module['_BinaryenMemoryInitId']();
-Module['DataDropId'] = Module['_BinaryenDataDropId']();
-Module['MemoryCopyId'] = Module['_BinaryenMemoryCopyId']();
-Module['MemoryFillId'] = Module['_BinaryenMemoryFillId']();
-Module['TryId'] = Module['_BinaryenTryId']();
-Module['ThrowId'] = Module['_BinaryenThrowId']();
-Module['RethrowId'] = Module['_BinaryenRethrowId']();
-Module['BrOnExnId'] = Module['_BinaryenBrOnExnId']();
-Module['PushId'] = Module['_BinaryenPushId']();
-Module['PopId'] = Module['_BinaryenPopId']();
-
-// External kinds
-Module['ExternalFunction'] = Module['_BinaryenExternalFunction']();
-Module['ExternalTable'] = Module['_BinaryenExternalTable']();
-Module['ExternalMemory'] = Module['_BinaryenExternalMemory']();
-Module['ExternalGlobal'] = Module['_BinaryenExternalGlobal']();
-Module['ExternalEvent'] = Module['_BinaryenExternalEvent']();
-
-// Features
-Module['Features'] = {
- 'MVP': Module['_BinaryenFeatureMVP'](),
- 'Atomics': Module['_BinaryenFeatureAtomics'](),
- 'BulkMemory': Module['_BinaryenFeatureBulkMemory'](),
- 'MutableGlobals': Module['_BinaryenFeatureMutableGlobals'](),
- 'NontrappingFPToInt': Module['_BinaryenFeatureNontrappingFPToInt'](),
- 'SignExt': Module['_BinaryenFeatureSignExt'](),
- 'SIMD128': Module['_BinaryenFeatureSIMD128'](),
- 'ExceptionHandling': Module['_BinaryenFeatureExceptionHandling'](),
- 'TailCall': Module['_BinaryenFeatureTailCall'](),
- 'ReferenceTypes': Module['_BinaryenFeatureReferenceTypes'](),
- 'All': Module['_BinaryenFeatureAll']()
-};
+ // Features
+ Module['Features'] = {};
+ [ 'MVP',
+ 'Atomics',
+ 'BulkMemory',
+ 'MutableGlobals',
+ 'NontrappingFPToInt',
+ 'SignExt',
+ 'SIMD128',
+ 'ExceptionHandling',
+ 'TailCall',
+ 'ReferenceTypes',
+ 'All'
+ ].forEach(function(name) {
+ Module['Features'][name] = Module['_BinaryenFeature' + name]();
+ });
-// Operations
-Module['ClzInt32'] = Module['_BinaryenClzInt32']();
-Module['CtzInt32'] = Module['_BinaryenCtzInt32']();
-Module['PopcntInt32'] = Module['_BinaryenPopcntInt32']();
-Module['NegFloat32'] = Module['_BinaryenNegFloat32']();
-Module['AbsFloat32'] = Module['_BinaryenAbsFloat32']();
-Module['CeilFloat32'] = Module['_BinaryenCeilFloat32']();
-Module['FloorFloat32'] = Module['_BinaryenFloorFloat32']();
-Module['TruncFloat32'] = Module['_BinaryenTruncFloat32']();
-Module['NearestFloat32'] = Module['_BinaryenNearestFloat32']();
-Module['SqrtFloat32'] = Module['_BinaryenSqrtFloat32']();
-Module['EqZInt32'] = Module['_BinaryenEqZInt32']();
-Module['ClzInt64'] = Module['_BinaryenClzInt64']();
-Module['CtzInt64'] = Module['_BinaryenCtzInt64']();
-Module['PopcntInt64'] = Module['_BinaryenPopcntInt64']();
-Module['NegFloat64'] = Module['_BinaryenNegFloat64']();
-Module['AbsFloat64'] = Module['_BinaryenAbsFloat64']();
-Module['CeilFloat64'] = Module['_BinaryenCeilFloat64']();
-Module['FloorFloat64'] = Module['_BinaryenFloorFloat64']();
-Module['TruncFloat64'] = Module['_BinaryenTruncFloat64']();
-Module['NearestFloat64'] = Module['_BinaryenNearestFloat64']();
-Module['SqrtFloat64'] = Module['_BinaryenSqrtFloat64']();
-Module['EqZInt64'] = Module['_BinaryenEqZInt64']();
-Module['ExtendSInt32'] = Module['_BinaryenExtendSInt32']();
-Module['ExtendUInt32'] = Module['_BinaryenExtendUInt32']();
-Module['WrapInt64'] = Module['_BinaryenWrapInt64']();
-Module['TruncSFloat32ToInt32'] = Module['_BinaryenTruncSFloat32ToInt32']();
-Module['TruncSFloat32ToInt64'] = Module['_BinaryenTruncSFloat32ToInt64']();
-Module['TruncUFloat32ToInt32'] = Module['_BinaryenTruncUFloat32ToInt32']();
-Module['TruncUFloat32ToInt64'] = Module['_BinaryenTruncUFloat32ToInt64']();
-Module['TruncSFloat64ToInt32'] = Module['_BinaryenTruncSFloat64ToInt32']();
-Module['TruncSFloat64ToInt64'] = Module['_BinaryenTruncSFloat64ToInt64']();
-Module['TruncUFloat64ToInt32'] = Module['_BinaryenTruncUFloat64ToInt32']();
-Module['TruncUFloat64ToInt64'] = Module['_BinaryenTruncUFloat64ToInt64']();
-Module['TruncSatSFloat32ToInt32'] = Module['_BinaryenTruncSatSFloat32ToInt32']();
-Module['TruncSatSFloat32ToInt64'] = Module['_BinaryenTruncSatSFloat32ToInt64']();
-Module['TruncSatUFloat32ToInt32'] = Module['_BinaryenTruncSatUFloat32ToInt32']();
-Module['TruncSatUFloat32ToInt64'] = Module['_BinaryenTruncSatUFloat32ToInt64']();
-Module['TruncSatSFloat64ToInt32'] = Module['_BinaryenTruncSatSFloat64ToInt32']();
-Module['TruncSatSFloat64ToInt64'] = Module['_BinaryenTruncSatSFloat64ToInt64']();
-Module['TruncSatUFloat64ToInt32'] = Module['_BinaryenTruncSatUFloat64ToInt32']();
-Module['TruncSatUFloat64ToInt64'] = Module['_BinaryenTruncSatUFloat64ToInt64']();
-Module['ReinterpretFloat32'] = Module['_BinaryenReinterpretFloat32']();
-Module['ReinterpretFloat64'] = Module['_BinaryenReinterpretFloat64']();
-Module['ConvertSInt32ToFloat32'] = Module['_BinaryenConvertSInt32ToFloat32']();
-Module['ConvertSInt32ToFloat64'] = Module['_BinaryenConvertSInt32ToFloat64']();
-Module['ConvertUInt32ToFloat32'] = Module['_BinaryenConvertUInt32ToFloat32']();
-Module['ConvertUInt32ToFloat64'] = Module['_BinaryenConvertUInt32ToFloat64']();
-Module['ConvertSInt64ToFloat32'] = Module['_BinaryenConvertSInt64ToFloat32']();
-Module['ConvertSInt64ToFloat64'] = Module['_BinaryenConvertSInt64ToFloat64']();
-Module['ConvertUInt64ToFloat32'] = Module['_BinaryenConvertUInt64ToFloat32']();
-Module['ConvertUInt64ToFloat64'] = Module['_BinaryenConvertUInt64ToFloat64']();
-Module['PromoteFloat32'] = Module['_BinaryenPromoteFloat32']();
-Module['DemoteFloat64'] = Module['_BinaryenDemoteFloat64']();
-Module['ReinterpretInt32'] = Module['_BinaryenReinterpretInt32']();
-Module['ReinterpretInt64'] = Module['_BinaryenReinterpretInt64']();
-Module['ExtendS8Int32'] = Module['_BinaryenExtendS8Int32']();
-Module['ExtendS16Int32'] = Module['_BinaryenExtendS16Int32']();
-Module['ExtendS8Int64'] = Module['_BinaryenExtendS8Int64']();
-Module['ExtendS16Int64'] = Module['_BinaryenExtendS16Int64']();
-Module['ExtendS32Int64'] = Module['_BinaryenExtendS32Int64']();
-Module['AddInt32'] = Module['_BinaryenAddInt32']();
-Module['SubInt32'] = Module['_BinaryenSubInt32']();
-Module['MulInt32'] = Module['_BinaryenMulInt32']();
-Module['DivSInt32'] = Module['_BinaryenDivSInt32']();
-Module['DivUInt32'] = Module['_BinaryenDivUInt32']();
-Module['RemSInt32'] = Module['_BinaryenRemSInt32']();
-Module['RemUInt32'] = Module['_BinaryenRemUInt32']();
-Module['AndInt32'] = Module['_BinaryenAndInt32']();
-Module['OrInt32'] = Module['_BinaryenOrInt32']();
-Module['XorInt32'] = Module['_BinaryenXorInt32']();
-Module['ShlInt32'] = Module['_BinaryenShlInt32']();
-Module['ShrUInt32'] = Module['_BinaryenShrUInt32']();
-Module['ShrSInt32'] = Module['_BinaryenShrSInt32']();
-Module['RotLInt32'] = Module['_BinaryenRotLInt32']();
-Module['RotRInt32'] = Module['_BinaryenRotRInt32']();
-Module['EqInt32'] = Module['_BinaryenEqInt32']();
-Module['NeInt32'] = Module['_BinaryenNeInt32']();
-Module['LtSInt32'] = Module['_BinaryenLtSInt32']();
-Module['LtUInt32'] = Module['_BinaryenLtUInt32']();
-Module['LeSInt32'] = Module['_BinaryenLeSInt32']();
-Module['LeUInt32'] = Module['_BinaryenLeUInt32']();
-Module['GtSInt32'] = Module['_BinaryenGtSInt32']();
-Module['GtUInt32'] = Module['_BinaryenGtUInt32']();
-Module['GeSInt32'] = Module['_BinaryenGeSInt32']();
-Module['GeUInt32'] = Module['_BinaryenGeUInt32']();
-Module['AddInt64'] = Module['_BinaryenAddInt64']();
-Module['SubInt64'] = Module['_BinaryenSubInt64']();
-Module['MulInt64'] = Module['_BinaryenMulInt64']();
-Module['DivSInt64'] = Module['_BinaryenDivSInt64']();
-Module['DivUInt64'] = Module['_BinaryenDivUInt64']();
-Module['RemSInt64'] = Module['_BinaryenRemSInt64']();
-Module['RemUInt64'] = Module['_BinaryenRemUInt64']();
-Module['AndInt64'] = Module['_BinaryenAndInt64']();
-Module['OrInt64'] = Module['_BinaryenOrInt64']();
-Module['XorInt64'] = Module['_BinaryenXorInt64']();
-Module['ShlInt64'] = Module['_BinaryenShlInt64']();
-Module['ShrUInt64'] = Module['_BinaryenShrUInt64']();
-Module['ShrSInt64'] = Module['_BinaryenShrSInt64']();
-Module['RotLInt64'] = Module['_BinaryenRotLInt64']();
-Module['RotRInt64'] = Module['_BinaryenRotRInt64']();
-Module['EqInt64'] = Module['_BinaryenEqInt64']();
-Module['NeInt64'] = Module['_BinaryenNeInt64']();
-Module['LtSInt64'] = Module['_BinaryenLtSInt64']();
-Module['LtUInt64'] = Module['_BinaryenLtUInt64']();
-Module['LeSInt64'] = Module['_BinaryenLeSInt64']();
-Module['LeUInt64'] = Module['_BinaryenLeUInt64']();
-Module['GtSInt64'] = Module['_BinaryenGtSInt64']();
-Module['GtUInt64'] = Module['_BinaryenGtUInt64']();
-Module['GeSInt64'] = Module['_BinaryenGeSInt64']();
-Module['GeUInt64'] = Module['_BinaryenGeUInt64']();
-Module['AddFloat32'] = Module['_BinaryenAddFloat32']();
-Module['SubFloat32'] = Module['_BinaryenSubFloat32']();
-Module['MulFloat32'] = Module['_BinaryenMulFloat32']();
-Module['DivFloat32'] = Module['_BinaryenDivFloat32']();
-Module['CopySignFloat32'] = Module['_BinaryenCopySignFloat32']();
-Module['MinFloat32'] = Module['_BinaryenMinFloat32']();
-Module['MaxFloat32'] = Module['_BinaryenMaxFloat32']();
-Module['EqFloat32'] = Module['_BinaryenEqFloat32']();
-Module['NeFloat32'] = Module['_BinaryenNeFloat32']();
-Module['LtFloat32'] = Module['_BinaryenLtFloat32']();
-Module['LeFloat32'] = Module['_BinaryenLeFloat32']();
-Module['GtFloat32'] = Module['_BinaryenGtFloat32']();
-Module['GeFloat32'] = Module['_BinaryenGeFloat32']();
-Module['AddFloat64'] = Module['_BinaryenAddFloat64']();
-Module['SubFloat64'] = Module['_BinaryenSubFloat64']();
-Module['MulFloat64'] = Module['_BinaryenMulFloat64']();
-Module['DivFloat64'] = Module['_BinaryenDivFloat64']();
-Module['CopySignFloat64'] = Module['_BinaryenCopySignFloat64']();
-Module['MinFloat64'] = Module['_BinaryenMinFloat64']();
-Module['MaxFloat64'] = Module['_BinaryenMaxFloat64']();
-Module['EqFloat64'] = Module['_BinaryenEqFloat64']();
-Module['NeFloat64'] = Module['_BinaryenNeFloat64']();
-Module['LtFloat64'] = Module['_BinaryenLtFloat64']();
-Module['LeFloat64'] = Module['_BinaryenLeFloat64']();
-Module['GtFloat64'] = Module['_BinaryenGtFloat64']();
-Module['GeFloat64'] = Module['_BinaryenGeFloat64']();
-Module['MemorySize'] = Module['_BinaryenMemorySize']();
-Module['MemoryGrow'] = Module['_BinaryenMemoryGrow']();
-Module['AtomicRMWAdd'] = Module['_BinaryenAtomicRMWAdd']();
-Module['AtomicRMWSub'] = Module['_BinaryenAtomicRMWSub']();
-Module['AtomicRMWAnd'] = Module['_BinaryenAtomicRMWAnd']();
-Module['AtomicRMWOr'] = Module['_BinaryenAtomicRMWOr']();
-Module['AtomicRMWXor'] = Module['_BinaryenAtomicRMWXor']();
-Module['AtomicRMWXchg'] = Module['_BinaryenAtomicRMWXchg']();
-Module['SplatVecI8x16'] = Module['_BinaryenSplatVecI8x16']();
-Module['ExtractLaneSVecI8x16'] = Module['_BinaryenExtractLaneSVecI8x16']();
-Module['ExtractLaneUVecI8x16'] = Module['_BinaryenExtractLaneUVecI8x16']();
-Module['ReplaceLaneVecI8x16'] = Module['_BinaryenReplaceLaneVecI8x16']();
-Module['SplatVecI16x8'] = Module['_BinaryenSplatVecI16x8']();
-Module['ExtractLaneSVecI16x8'] = Module['_BinaryenExtractLaneSVecI16x8']();
-Module['ExtractLaneUVecI16x8'] = Module['_BinaryenExtractLaneUVecI16x8']();
-Module['ReplaceLaneVecI16x8'] = Module['_BinaryenReplaceLaneVecI16x8']();
-Module['SplatVecI32x4'] = Module['_BinaryenSplatVecI32x4']();
-Module['ExtractLaneVecI32x4'] = Module['_BinaryenExtractLaneVecI32x4']();
-Module['ReplaceLaneVecI32x4'] = Module['_BinaryenReplaceLaneVecI32x4']();
-Module['SplatVecI64x2'] = Module['_BinaryenSplatVecI64x2']();
-Module['ExtractLaneVecI64x2'] = Module['_BinaryenExtractLaneVecI64x2']();
-Module['ReplaceLaneVecI64x2'] = Module['_BinaryenReplaceLaneVecI64x2']();
-Module['SplatVecF32x4'] = Module['_BinaryenSplatVecF32x4']();
-Module['ExtractLaneVecF32x4'] = Module['_BinaryenExtractLaneVecF32x4']();
-Module['ReplaceLaneVecF32x4'] = Module['_BinaryenReplaceLaneVecF32x4']();
-Module['SplatVecF64x2'] = Module['_BinaryenSplatVecF64x2']();
-Module['ExtractLaneVecF64x2'] = Module['_BinaryenExtractLaneVecF64x2']();
-Module['ReplaceLaneVecF64x2'] = Module['_BinaryenReplaceLaneVecF64x2']();
-Module['EqVecI8x16'] = Module['_BinaryenEqVecI8x16']();
-Module['NeVecI8x16'] = Module['_BinaryenNeVecI8x16']();
-Module['LtSVecI8x16'] = Module['_BinaryenLtSVecI8x16']();
-Module['LtUVecI8x16'] = Module['_BinaryenLtUVecI8x16']();
-Module['GtSVecI8x16'] = Module['_BinaryenGtSVecI8x16']();
-Module['GtUVecI8x16'] = Module['_BinaryenGtUVecI8x16']();
-Module['LeSVecI8x16'] = Module['_BinaryenLeSVecI8x16']();
-Module['LeUVecI8x16'] = Module['_BinaryenLeUVecI8x16']();
-Module['GeSVecI8x16'] = Module['_BinaryenGeSVecI8x16']();
-Module['GeUVecI8x16'] = Module['_BinaryenGeUVecI8x16']();
-Module['EqVecI16x8'] = Module['_BinaryenEqVecI16x8']();
-Module['NeVecI16x8'] = Module['_BinaryenNeVecI16x8']();
-Module['LtSVecI16x8'] = Module['_BinaryenLtSVecI16x8']();
-Module['LtUVecI16x8'] = Module['_BinaryenLtUVecI16x8']();
-Module['GtSVecI16x8'] = Module['_BinaryenGtSVecI16x8']();
-Module['GtUVecI16x8'] = Module['_BinaryenGtUVecI16x8']();
-Module['LeSVecI16x8'] = Module['_BinaryenLeSVecI16x8']();
-Module['LeUVecI16x8'] = Module['_BinaryenLeUVecI16x8']();
-Module['GeSVecI16x8'] = Module['_BinaryenGeSVecI16x8']();
-Module['GeUVecI16x8'] = Module['_BinaryenGeUVecI16x8']();
-Module['EqVecI32x4'] = Module['_BinaryenEqVecI32x4']();
-Module['NeVecI32x4'] = Module['_BinaryenNeVecI32x4']();
-Module['LtSVecI32x4'] = Module['_BinaryenLtSVecI32x4']();
-Module['LtUVecI32x4'] = Module['_BinaryenLtUVecI32x4']();
-Module['GtSVecI32x4'] = Module['_BinaryenGtSVecI32x4']();
-Module['GtUVecI32x4'] = Module['_BinaryenGtUVecI32x4']();
-Module['LeSVecI32x4'] = Module['_BinaryenLeSVecI32x4']();
-Module['LeUVecI32x4'] = Module['_BinaryenLeUVecI32x4']();
-Module['GeSVecI32x4'] = Module['_BinaryenGeSVecI32x4']();
-Module['GeUVecI32x4'] = Module['_BinaryenGeUVecI32x4']();
-Module['EqVecF32x4'] = Module['_BinaryenEqVecF32x4']();
-Module['NeVecF32x4'] = Module['_BinaryenNeVecF32x4']();
-Module['LtVecF32x4'] = Module['_BinaryenLtVecF32x4']();
-Module['GtVecF32x4'] = Module['_BinaryenGtVecF32x4']();
-Module['LeVecF32x4'] = Module['_BinaryenLeVecF32x4']();
-Module['GeVecF32x4'] = Module['_BinaryenGeVecF32x4']();
-Module['EqVecF64x2'] = Module['_BinaryenGeVecF32x4']();
-Module['NeVecF64x2'] = Module['_BinaryenNeVecF64x2']();
-Module['LtVecF64x2'] = Module['_BinaryenLtVecF64x2']();
-Module['GtVecF64x2'] = Module['_BinaryenGtVecF64x2']();
-Module['LeVecF64x2'] = Module['_BinaryenLeVecF64x2']();
-Module['GeVecF64x2'] = Module['_BinaryenGeVecF64x2']();
-Module['NotVec128'] = Module['_BinaryenNotVec128']();
-Module['AndVec128'] = Module['_BinaryenAndVec128']();
-Module['OrVec128'] = Module['_BinaryenOrVec128']();
-Module['XorVec128'] = Module['_BinaryenXorVec128']();
-Module['AndNotVec128'] = Module['_BinaryenAndNotVec128']();
-Module['BitselectVec128'] = Module['_BinaryenBitselectVec128']();
-Module['NegVecI8x16'] = Module['_BinaryenNegVecI8x16']();
-Module['AnyTrueVecI8x16'] = Module['_BinaryenAnyTrueVecI8x16']();
-Module['AllTrueVecI8x16'] = Module['_BinaryenAllTrueVecI8x16']();
-Module['ShlVecI8x16'] = Module['_BinaryenShlVecI8x16']();
-Module['ShrSVecI8x16'] = Module['_BinaryenShrSVecI8x16']();
-Module['ShrUVecI8x16'] = Module['_BinaryenShrUVecI8x16']();
-Module['AddVecI8x16'] = Module['_BinaryenAddVecI8x16']();
-Module['AddSatSVecI8x16'] = Module['_BinaryenAddSatSVecI8x16']();
-Module['AddSatUVecI8x16'] = Module['_BinaryenAddSatUVecI8x16']();
-Module['SubVecI8x16'] = Module['_BinaryenSubVecI8x16']();
-Module['SubSatSVecI8x16'] = Module['_BinaryenSubSatSVecI8x16']();
-Module['SubSatUVecI8x16'] = Module['_BinaryenSubSatUVecI8x16']();
-Module['MulVecI8x16'] = Module['_BinaryenMulVecI8x16']();
-Module['MinSVecI8x16'] = Module['_BinaryenMinSVecI8x16']();
-Module['MinUVecI8x16'] = Module['_BinaryenMinUVecI8x16']();
-Module['MaxSVecI8x16'] = Module['_BinaryenMaxSVecI8x16']();
-Module['MaxUVecI8x16'] = Module['_BinaryenMaxUVecI8x16']();
-Module['AvgrUVecI8x16'] = Module['_BinaryenAvgrUVecI8x16']();
-Module['NegVecI16x8'] = Module['_BinaryenNegVecI16x8']();
-Module['AnyTrueVecI16x8'] = Module['_BinaryenAnyTrueVecI16x8']();
-Module['AllTrueVecI16x8'] = Module['_BinaryenAllTrueVecI16x8']();
-Module['ShlVecI16x8'] = Module['_BinaryenShlVecI16x8']();
-Module['ShrSVecI16x8'] = Module['_BinaryenShrSVecI16x8']();
-Module['ShrUVecI16x8'] = Module['_BinaryenShrUVecI16x8']();
-Module['AddVecI16x8'] = Module['_BinaryenAddVecI16x8']();
-Module['AddSatSVecI16x8'] = Module['_BinaryenAddSatSVecI16x8']();
-Module['AddSatUVecI16x8'] = Module['_BinaryenAddSatUVecI16x8']();
-Module['SubVecI16x8'] = Module['_BinaryenSubVecI16x8']();
-Module['SubSatSVecI16x8'] = Module['_BinaryenSubSatSVecI16x8']();
-Module['SubSatUVecI16x8'] = Module['_BinaryenSubSatUVecI16x8']();
-Module['MulVecI16x8'] = Module['_BinaryenMulVecI16x8']();
-Module['MinSVecI16x8'] = Module['_BinaryenMinSVecI16x8']();
-Module['MinUVecI16x8'] = Module['_BinaryenMinUVecI16x8']();
-Module['MaxSVecI16x8'] = Module['_BinaryenMaxSVecI16x8']();
-Module['MaxUVecI16x8'] = Module['_BinaryenMaxUVecI16x8']();
-Module['AvgrUVecI16x8'] = Module['_BinaryenAvgrUVecI16x8']();
-Module['DotSVecI16x8ToVecI32x4'] = Module['_BinaryenDotSVecI16x8ToVecI32x4']();
-Module['NegVecI32x4'] = Module['_BinaryenNegVecI32x4']();
-Module['AnyTrueVecI32x4'] = Module['_BinaryenAnyTrueVecI32x4']();
-Module['AllTrueVecI32x4'] = Module['_BinaryenAllTrueVecI32x4']();
-Module['ShlVecI32x4'] = Module['_BinaryenShlVecI32x4']();
-Module['ShrSVecI32x4'] = Module['_BinaryenShrSVecI32x4']();
-Module['ShrUVecI32x4'] = Module['_BinaryenShrUVecI32x4']();
-Module['AddVecI32x4'] = Module['_BinaryenAddVecI32x4']();
-Module['SubVecI32x4'] = Module['_BinaryenSubVecI32x4']();
-Module['MulVecI32x4'] = Module['_BinaryenMulVecI32x4']();
-Module['MinSVecI32x4'] = Module['_BinaryenMinSVecI32x4']();
-Module['MinUVecI32x4'] = Module['_BinaryenMinUVecI32x4']();
-Module['MaxSVecI32x4'] = Module['_BinaryenMaxSVecI32x4']();
-Module['MaxUVecI32x4'] = Module['_BinaryenMaxUVecI32x4']();
-Module['NegVecI64x2'] = Module['_BinaryenNegVecI64x2']();
-Module['AnyTrueVecI64x2'] = Module['_BinaryenAnyTrueVecI64x2']();
-Module['AllTrueVecI64x2'] = Module['_BinaryenAllTrueVecI64x2']();
-Module['ShlVecI64x2'] = Module['_BinaryenShlVecI64x2']();
-Module['ShrSVecI64x2'] = Module['_BinaryenShrSVecI64x2']();
-Module['ShrUVecI64x2'] = Module['_BinaryenShrUVecI64x2']();
-Module['AddVecI64x2'] = Module['_BinaryenAddVecI64x2']();
-Module['SubVecI64x2'] = Module['_BinaryenSubVecI64x2']();
-Module['AbsVecF32x4'] = Module['_BinaryenAbsVecF32x4']();
-Module['NegVecF32x4'] = Module['_BinaryenNegVecF32x4']();
-Module['SqrtVecF32x4'] = Module['_BinaryenSqrtVecF32x4']();
-Module['QFMAVecF32x4'] = Module['_BinaryenQFMAVecF32x4']();
-Module['QFMSVecF32x4'] = Module['_BinaryenQFMSVecF32x4']();
-Module['AddVecF32x4'] = Module['_BinaryenAddVecF32x4']();
-Module['SubVecF32x4'] = Module['_BinaryenSubVecF32x4']();
-Module['MulVecF32x4'] = Module['_BinaryenMulVecF32x4']();
-Module['DivVecF32x4'] = Module['_BinaryenDivVecF32x4']();
-Module['MinVecF32x4'] = Module['_BinaryenMinVecF32x4']();
-Module['MaxVecF32x4'] = Module['_BinaryenMaxVecF32x4']();
-Module['AbsVecF64x2'] = Module['_BinaryenAbsVecF64x2']();
-Module['NegVecF64x2'] = Module['_BinaryenNegVecF64x2']();
-Module['SqrtVecF64x2'] = Module['_BinaryenSqrtVecF64x2']();
-Module['QFMAVecF64x2'] = Module['_BinaryenQFMAVecF64x2']();
-Module['QFMSVecF64x2'] = Module['_BinaryenQFMSVecF64x2']();
-Module['AddVecF64x2'] = Module['_BinaryenAddVecF64x2']();
-Module['SubVecF64x2'] = Module['_BinaryenSubVecF64x2']();
-Module['MulVecF64x2'] = Module['_BinaryenMulVecF64x2']();
-Module['DivVecF64x2'] = Module['_BinaryenDivVecF64x2']();
-Module['MinVecF64x2'] = Module['_BinaryenMinVecF64x2']();
-Module['MaxVecF64x2'] = Module['_BinaryenMaxVecF64x2']();
-Module['TruncSatSVecF32x4ToVecI32x4'] = Module['_BinaryenTruncSatSVecF32x4ToVecI32x4']();
-Module['TruncSatUVecF32x4ToVecI32x4'] = Module['_BinaryenTruncSatUVecF32x4ToVecI32x4']();
-Module['TruncSatSVecF64x2ToVecI64x2'] = Module['_BinaryenTruncSatSVecF64x2ToVecI64x2']();
-Module['TruncSatUVecF64x2ToVecI64x2'] = Module['_BinaryenTruncSatUVecF64x2ToVecI64x2']();
-Module['ConvertSVecI32x4ToVecF32x4'] = Module['_BinaryenConvertSVecI32x4ToVecF32x4']();
-Module['ConvertUVecI32x4ToVecF32x4'] = Module['_BinaryenConvertUVecI32x4ToVecF32x4']();
-Module['ConvertSVecI64x2ToVecF64x2'] = Module['_BinaryenConvertSVecI64x2ToVecF64x2']();
-Module['ConvertUVecI64x2ToVecF64x2'] = Module['_BinaryenConvertUVecI64x2ToVecF64x2']();
-Module['LoadSplatVec8x16'] = Module['_BinaryenLoadSplatVec8x16']();
-Module['LoadSplatVec16x8'] = Module['_BinaryenLoadSplatVec16x8']();
-Module['LoadSplatVec32x4'] = Module['_BinaryenLoadSplatVec32x4']();
-Module['LoadSplatVec64x2'] = Module['_BinaryenLoadSplatVec64x2']();
-Module['LoadExtSVec8x8ToVecI16x8'] = Module['_BinaryenLoadExtSVec8x8ToVecI16x8']();
-Module['LoadExtUVec8x8ToVecI16x8'] = Module['_BinaryenLoadExtUVec8x8ToVecI16x8']();
-Module['LoadExtSVec16x4ToVecI32x4'] = Module['_BinaryenLoadExtSVec16x4ToVecI32x4']();
-Module['LoadExtUVec16x4ToVecI32x4'] = Module['_BinaryenLoadExtUVec16x4ToVecI32x4']();
-Module['LoadExtSVec32x2ToVecI64x2'] = Module['_BinaryenLoadExtSVec32x2ToVecI64x2']();
-Module['LoadExtUVec32x2ToVecI64x2'] = Module['_BinaryenLoadExtUVec32x2ToVecI64x2']();
-Module['NarrowSVecI16x8ToVecI8x16'] = Module['_BinaryenNarrowSVecI16x8ToVecI8x16']();
-Module['NarrowUVecI16x8ToVecI8x16'] = Module['_BinaryenNarrowUVecI16x8ToVecI8x16']();
-Module['NarrowSVecI32x4ToVecI16x8'] = Module['_BinaryenNarrowSVecI32x4ToVecI16x8']();
-Module['NarrowUVecI32x4ToVecI16x8'] = Module['_BinaryenNarrowUVecI32x4ToVecI16x8']();
-Module['WidenLowSVecI8x16ToVecI16x8'] = Module['_BinaryenWidenLowSVecI8x16ToVecI16x8']();
-Module['WidenHighSVecI8x16ToVecI16x8'] = Module['_BinaryenWidenHighSVecI8x16ToVecI16x8']();
-Module['WidenLowUVecI8x16ToVecI16x8'] = Module['_BinaryenWidenLowUVecI8x16ToVecI16x8']();
-Module['WidenHighUVecI8x16ToVecI16x8'] = Module['_BinaryenWidenHighUVecI8x16ToVecI16x8']();
-Module['WidenLowSVecI16x8ToVecI32x4'] = Module['_BinaryenWidenLowSVecI16x8ToVecI32x4']();
-Module['WidenHighSVecI16x8ToVecI32x4'] = Module['_BinaryenWidenHighSVecI16x8ToVecI32x4']();
-Module['WidenLowUVecI16x8ToVecI32x4'] = Module['_BinaryenWidenLowUVecI16x8ToVecI32x4']();
-Module['WidenHighUVecI16x8ToVecI32x4'] = Module['_BinaryenWidenHighUVecI16x8ToVecI32x4']();
-Module['SwizzleVec8x16'] = Module['_BinaryenSwizzleVec8x16']();
-
-// The size of a single literal in memory as used in Const creation,
-// which is a little different: we don't want users to need to make
-// their own Literals, as the C API handles them by value, which means
-// we would leak them. Instead, Const creation is fused together with
-// an intermediate stack allocation of this size to pass the value.
-var sizeOfLiteral = _BinaryenSizeofLiteral();
+ // Operations
+ Module['Operations'] = {};
+ [ 'ClzInt32',
+ 'CtzInt32',
+ 'PopcntInt32',
+ 'NegFloat32',
+ 'AbsFloat32',
+ 'CeilFloat32',
+ 'FloorFloat32',
+ 'TruncFloat32',
+ 'NearestFloat32',
+ 'SqrtFloat32',
+ 'EqZInt32',
+ 'ClzInt64',
+ 'CtzInt64',
+ 'PopcntInt64',
+ 'NegFloat64',
+ 'AbsFloat64',
+ 'CeilFloat64',
+ 'FloorFloat64',
+ 'TruncFloat64',
+ 'NearestFloat64',
+ 'SqrtFloat64',
+ 'EqZInt64',
+ 'ExtendSInt32',
+ 'ExtendUInt32',
+ 'WrapInt64',
+ 'TruncSFloat32ToInt32',
+ 'TruncSFloat32ToInt64',
+ 'TruncUFloat32ToInt32',
+ 'TruncUFloat32ToInt64',
+ 'TruncSFloat64ToInt32',
+ 'TruncSFloat64ToInt64',
+ 'TruncUFloat64ToInt32',
+ 'TruncUFloat64ToInt64',
+ 'TruncSatSFloat32ToInt32',
+ 'TruncSatSFloat32ToInt64',
+ 'TruncSatUFloat32ToInt32',
+ 'TruncSatUFloat32ToInt64',
+ 'TruncSatSFloat64ToInt32',
+ 'TruncSatSFloat64ToInt64',
+ 'TruncSatUFloat64ToInt32',
+ 'TruncSatUFloat64ToInt64',
+ 'ReinterpretFloat32',
+ 'ReinterpretFloat64',
+ 'ConvertSInt32ToFloat32',
+ 'ConvertSInt32ToFloat64',
+ 'ConvertUInt32ToFloat32',
+ 'ConvertUInt32ToFloat64',
+ 'ConvertSInt64ToFloat32',
+ 'ConvertSInt64ToFloat64',
+ 'ConvertUInt64ToFloat32',
+ 'ConvertUInt64ToFloat64',
+ 'PromoteFloat32',
+ 'DemoteFloat64',
+ 'ReinterpretInt32',
+ 'ReinterpretInt64',
+ 'ExtendS8Int32',
+ 'ExtendS16Int32',
+ 'ExtendS8Int64',
+ 'ExtendS16Int64',
+ 'ExtendS32Int64',
+ 'AddInt32',
+ 'SubInt32',
+ 'MulInt32',
+ 'DivSInt32',
+ 'DivUInt32',
+ 'RemSInt32',
+ 'RemUInt32',
+ 'AndInt32',
+ 'OrInt32',
+ 'XorInt32',
+ 'ShlInt32',
+ 'ShrUInt32',
+ 'ShrSInt32',
+ 'RotLInt32',
+ 'RotRInt32',
+ 'EqInt32',
+ 'NeInt32',
+ 'LtSInt32',
+ 'LtUInt32',
+ 'LeSInt32',
+ 'LeUInt32',
+ 'GtSInt32',
+ 'GtUInt32',
+ 'GeSInt32',
+ 'GeUInt32',
+ 'AddInt64',
+ 'SubInt64',
+ 'MulInt64',
+ 'DivSInt64',
+ 'DivUInt64',
+ 'RemSInt64',
+ 'RemUInt64',
+ 'AndInt64',
+ 'OrInt64',
+ 'XorInt64',
+ 'ShlInt64',
+ 'ShrUInt64',
+ 'ShrSInt64',
+ 'RotLInt64',
+ 'RotRInt64',
+ 'EqInt64',
+ 'NeInt64',
+ 'LtSInt64',
+ 'LtUInt64',
+ 'LeSInt64',
+ 'LeUInt64',
+ 'GtSInt64',
+ 'GtUInt64',
+ 'GeSInt64',
+ 'GeUInt64',
+ 'AddFloat32',
+ 'SubFloat32',
+ 'MulFloat32',
+ 'DivFloat32',
+ 'CopySignFloat32',
+ 'MinFloat32',
+ 'MaxFloat32',
+ 'EqFloat32',
+ 'NeFloat32',
+ 'LtFloat32',
+ 'LeFloat32',
+ 'GtFloat32',
+ 'GeFloat32',
+ 'AddFloat64',
+ 'SubFloat64',
+ 'MulFloat64',
+ 'DivFloat64',
+ 'CopySignFloat64',
+ 'MinFloat64',
+ 'MaxFloat64',
+ 'EqFloat64',
+ 'NeFloat64',
+ 'LtFloat64',
+ 'LeFloat64',
+ 'GtFloat64',
+ 'GeFloat64',
+ 'MemorySize',
+ 'MemoryGrow',
+ 'AtomicRMWAdd',
+ 'AtomicRMWSub',
+ 'AtomicRMWAnd',
+ 'AtomicRMWOr',
+ 'AtomicRMWXor',
+ 'AtomicRMWXchg',
+ 'SplatVecI8x16',
+ 'ExtractLaneSVecI8x16',
+ 'ExtractLaneUVecI8x16',
+ 'ReplaceLaneVecI8x16',
+ 'SplatVecI16x8',
+ 'ExtractLaneSVecI16x8',
+ 'ExtractLaneUVecI16x8',
+ 'ReplaceLaneVecI16x8',
+ 'SplatVecI32x4',
+ 'ExtractLaneVecI32x4',
+ 'ReplaceLaneVecI32x4',
+ 'SplatVecI64x2',
+ 'ExtractLaneVecI64x2',
+ 'ReplaceLaneVecI64x2',
+ 'SplatVecF32x4',
+ 'ExtractLaneVecF32x4',
+ 'ReplaceLaneVecF32x4',
+ 'SplatVecF64x2',
+ 'ExtractLaneVecF64x2',
+ 'ReplaceLaneVecF64x2',
+ 'EqVecI8x16',
+ 'NeVecI8x16',
+ 'LtSVecI8x16',
+ 'LtUVecI8x16',
+ 'GtSVecI8x16',
+ 'GtUVecI8x16',
+ 'LeSVecI8x16',
+ 'LeUVecI8x16',
+ 'GeSVecI8x16',
+ 'GeUVecI8x16',
+ 'EqVecI16x8',
+ 'NeVecI16x8',
+ 'LtSVecI16x8',
+ 'LtUVecI16x8',
+ 'GtSVecI16x8',
+ 'GtUVecI16x8',
+ 'LeSVecI16x8',
+ 'LeUVecI16x8',
+ 'GeSVecI16x8',
+ 'GeUVecI16x8',
+ 'EqVecI32x4',
+ 'NeVecI32x4',
+ 'LtSVecI32x4',
+ 'LtUVecI32x4',
+ 'GtSVecI32x4',
+ 'GtUVecI32x4',
+ 'LeSVecI32x4',
+ 'LeUVecI32x4',
+ 'GeSVecI32x4',
+ 'GeUVecI32x4',
+ 'EqVecF32x4',
+ 'NeVecF32x4',
+ 'LtVecF32x4',
+ 'GtVecF32x4',
+ 'LeVecF32x4',
+ 'GeVecF32x4',
+ 'EqVecF64x2',
+ 'NeVecF64x2',
+ 'LtVecF64x2',
+ 'GtVecF64x2',
+ 'LeVecF64x2',
+ 'GeVecF64x2',
+ 'NotVec128',
+ 'AndVec128',
+ 'OrVec128',
+ 'XorVec128',
+ 'AndNotVec128',
+ 'BitselectVec128',
+ 'NegVecI8x16',
+ 'AnyTrueVecI8x16',
+ 'AllTrueVecI8x16',
+ 'ShlVecI8x16',
+ 'ShrSVecI8x16',
+ 'ShrUVecI8x16',
+ 'AddVecI8x16',
+ 'AddSatSVecI8x16',
+ 'AddSatUVecI8x16',
+ 'SubVecI8x16',
+ 'SubSatSVecI8x16',
+ 'SubSatUVecI8x16',
+ 'MulVecI8x16',
+ 'MinSVecI8x16',
+ 'MinUVecI8x16',
+ 'MaxSVecI8x16',
+ 'MaxUVecI8x16',
+ 'AvgrUVecI8x16',
+ 'NegVecI16x8',
+ 'AnyTrueVecI16x8',
+ 'AllTrueVecI16x8',
+ 'ShlVecI16x8',
+ 'ShrSVecI16x8',
+ 'ShrUVecI16x8',
+ 'AddVecI16x8',
+ 'AddSatSVecI16x8',
+ 'AddSatUVecI16x8',
+ 'SubVecI16x8',
+ 'SubSatSVecI16x8',
+ 'SubSatUVecI16x8',
+ 'MulVecI16x8',
+ 'MinSVecI16x8',
+ 'MinUVecI16x8',
+ 'MaxSVecI16x8',
+ 'MaxUVecI16x8',
+ 'AvgrUVecI16x8',
+ 'DotSVecI16x8ToVecI32x4',
+ 'NegVecI32x4',
+ 'AnyTrueVecI32x4',
+ 'AllTrueVecI32x4',
+ 'ShlVecI32x4',
+ 'ShrSVecI32x4',
+ 'ShrUVecI32x4',
+ 'AddVecI32x4',
+ 'SubVecI32x4',
+ 'MulVecI32x4',
+ 'MinSVecI32x4',
+ 'MinUVecI32x4',
+ 'MaxSVecI32x4',
+ 'MaxUVecI32x4',
+ 'NegVecI64x2',
+ 'AnyTrueVecI64x2',
+ 'AllTrueVecI64x2',
+ 'ShlVecI64x2',
+ 'ShrSVecI64x2',
+ 'ShrUVecI64x2',
+ 'AddVecI64x2',
+ 'SubVecI64x2',
+ 'AbsVecF32x4',
+ 'NegVecF32x4',
+ 'SqrtVecF32x4',
+ 'QFMAVecF32x4',
+ 'QFMSVecF32x4',
+ 'AddVecF32x4',
+ 'SubVecF32x4',
+ 'MulVecF32x4',
+ 'DivVecF32x4',
+ 'MinVecF32x4',
+ 'MaxVecF32x4',
+ 'AbsVecF64x2',
+ 'NegVecF64x2',
+ 'SqrtVecF64x2',
+ 'QFMAVecF64x2',
+ 'QFMSVecF64x2',
+ 'AddVecF64x2',
+ 'SubVecF64x2',
+ 'MulVecF64x2',
+ 'DivVecF64x2',
+ 'MinVecF64x2',
+ 'MaxVecF64x2',
+ 'TruncSatSVecF32x4ToVecI32x4',
+ 'TruncSatUVecF32x4ToVecI32x4',
+ 'TruncSatSVecF64x2ToVecI64x2',
+ 'TruncSatUVecF64x2ToVecI64x2',
+ 'ConvertSVecI32x4ToVecF32x4',
+ 'ConvertUVecI32x4ToVecF32x4',
+ 'ConvertSVecI64x2ToVecF64x2',
+ 'ConvertUVecI64x2ToVecF64x2',
+ 'LoadSplatVec8x16',
+ 'LoadSplatVec16x8',
+ 'LoadSplatVec32x4',
+ 'LoadSplatVec64x2',
+ 'LoadExtSVec8x8ToVecI16x8',
+ 'LoadExtUVec8x8ToVecI16x8',
+ 'LoadExtSVec16x4ToVecI32x4',
+ 'LoadExtUVec16x4ToVecI32x4',
+ 'LoadExtSVec32x2ToVecI64x2',
+ 'LoadExtUVec32x2ToVecI64x2',
+ 'NarrowSVecI16x8ToVecI8x16',
+ 'NarrowUVecI16x8ToVecI8x16',
+ 'NarrowSVecI32x4ToVecI16x8',
+ 'NarrowUVecI32x4ToVecI16x8',
+ 'WidenLowSVecI8x16ToVecI16x8',
+ 'WidenHighSVecI8x16ToVecI16x8',
+ 'WidenLowUVecI8x16ToVecI16x8',
+ 'WidenHighUVecI8x16ToVecI16x8',
+ 'WidenLowSVecI16x8ToVecI32x4',
+ 'WidenHighSVecI16x8ToVecI32x4',
+ 'WidenLowUVecI16x8ToVecI32x4',
+ 'WidenHighUVecI16x8ToVecI32x4',
+ 'SwizzleVec8x16',
+ ].forEach(function(name) {
+ Module['Operations'][name] = Module[name] = Module['_Binaryen' + name]();
+ });
+}
// 'Module' interface
Module['Module'] = function(module) {
assert(!module); // guard against incorrect old API usage
- var module = Module['_BinaryenModuleCreate']();
-
- wrapModule(module, this);
+ wrapModule(Module['_BinaryenModuleCreate'](), this);
};
// Receives a C pointer to a C Module and a JS object, and creates
@@ -480,6 +471,13 @@ function wrapModule(module, self) {
self['ptr'] = module;
+ // The size of a single literal in memory as used in Const creation,
+ // which is a little different: we don't want users to need to make
+ // their own Literals, as the C API handles them by value, which means
+ // we would leak them. Instead, Const creation is fused together with
+ // an intermediate stack allocation of this size to pass the value.
+ var sizeOfLiteral = _BinaryenSizeofLiteral();
+
// 'Expression' creation
self['block'] = function(name, children, type) {
return preserveStack(function() {
@@ -2689,6 +2687,26 @@ Module['getExpressionInfo'] = function(expr) {
}
};
+Module['createType'] = function(types) {
+ return preserveStack(function() {
+ var array = i32sToStack(types);
+ return Module['_BinaryenTypeCreate'](array, types.length);
+ });
+};
+
+Module['expandType'] = function(ty) {
+ return preserveStack(function() {
+ var numTypes = Module['_BinaryenTypeArity'](ty);
+ var array = stackAlloc(numTypes << 2);
+ Module['_BinaryenTypeExpand'](ty, array);
+ var types = [];
+ for (var i = 0; i < numTypes; i++) {
+ types.push(HEAPU32[(array >>> 2) + i]);
+ }
+ return types;
+ });
+};
+
// Obtains information about a 'Function'
Module['getFunctionInfo'] = function(func) {
return {
@@ -2813,3 +2831,55 @@ Module['exit'] = function(status) {
// a stack trace, for debuggability.
if (status != 0) throw new Error('exiting due to error: ' + status);
};
+
+// Indicates if Binaryen has been loaded and is ready
+Module['isReady'] = runtimeInitialized;
+
+// Provide a mechanism to tell when the module is ready
+//
+// if (!binaryen.isReady) await binaryen.ready;
+// ...
+//
+var pendingPromises = [];
+var initializeError = null;
+Object.defineProperty(Module, 'ready', {
+ get: function() {
+ return new Promise(function(resolve, reject) {
+ if (initializeError) {
+ reject(initializeError);
+ } else if (runtimeInitialized) {
+ resolve(Module);
+ } else {
+ pendingPromises.push({
+ resolve: resolve,
+ reject: reject
+ });
+ }
+ });
+ }
+});
+
+// Intercept the onRuntimeInitialized hook if necessary
+if (runtimeInitialized) {
+ initializeConstants();
+} else {
+ Module['onRuntimeInitialized'] = (function(super_) {
+ return function() {
+ try {
+ initializeConstants();
+ if (super_) super_();
+ Module['isReady'] = true;
+ pendingPromises.forEach(function(p) {
+ p.resolve(Module);
+ });
+ } catch (e) {
+ initializeError = e;
+ pendingPromises.forEach(function(p) {
+ p.reject(e);
+ });
+ } finally {
+ pendingPromises = [];
+ }
+ };
+ })(Module['onRuntimeInitialized']);
+}