| // export friendly API methods |
| |
| function preserveStack(func) { |
| try { |
| var stack = stackSave(); |
| return func(); |
| } finally { |
| stackRestore(stack); |
| } |
| } |
| |
| function strToStack(str) { |
| if (!str) return 0; |
| return allocate(intArrayFromString(str), 'i8', ALLOC_STACK); |
| } |
| |
| function i32sToStack(i32s) { |
| var ret = stackAlloc(i32s.length << 2); |
| for (var i = 0; i < i32s.length; i++) { |
| HEAP32[ret + (i << 2) >> 2] = i32s[i]; |
| } |
| return ret; |
| } |
| |
| function i8sToStack(i8s) { |
| var ret = stackAlloc(i8s.length); |
| for (var i = 0; i < i8s.length; i++) { |
| HEAP8[ret + i] = i8s[i]; |
| } |
| 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'](); |
| |
| // 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['SIMDBitselectId'] = Module['_BinaryenSIMDBitselectId'](); |
| Module['SIMDShiftId'] = Module['_BinaryenSIMDShiftId'](); |
| 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']() |
| }; |
| |
| // 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['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['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['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['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['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['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'](); |
| |
| // 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(); |
| |
| // 'Module' interface |
| Module['Module'] = function(module) { |
| assert(!module); // guard against incorrect old API usage |
| var module = Module['_BinaryenModuleCreate'](); |
| |
| wrapModule(module, this); |
| }; |
| |
| // Receives a C pointer to a C Module and a JS object, and creates |
| // the JS wrappings on the object to access the C data. |
| // This is meant for internal use only, and is necessary as we |
| // want to access Module from JS that were perhaps not created |
| // from JS. |
| function wrapModule(module, self) { |
| assert(module); // guard against incorrect old API usage |
| if (!self) self = {}; |
| |
| self['ptr'] = module; |
| |
| // 'Expression' creation |
| self['block'] = function(name, children, type) { |
| return preserveStack(function() { |
| return Module['_BinaryenBlock'](module, name ? strToStack(name) : 0, |
| i32sToStack(children), children.length, |
| typeof type !== 'undefined' ? type : Module['none']); |
| }); |
| }; |
| self['if'] = function(condition, ifTrue, ifFalse) { |
| return Module['_BinaryenIf'](module, condition, ifTrue, ifFalse); |
| }; |
| self['loop'] = function(label, body) { |
| return preserveStack(function() { |
| return Module['_BinaryenLoop'](module, strToStack(label), body); |
| }); |
| }; |
| self['break'] = self['br'] = function(label, condition, value) { |
| return preserveStack(function() { |
| return Module['_BinaryenBreak'](module, strToStack(label), condition, value); |
| }); |
| }; |
| self['br_if'] = function(label, condition, value) { |
| return self['br'](label, condition, value); |
| }; |
| self['switch'] = function(names, defaultName, condition, value) { |
| return preserveStack(function() { |
| var namei32s = []; |
| names.forEach(function(name) { |
| namei32s.push(strToStack(name)); |
| }); |
| return Module['_BinaryenSwitch'](module, i32sToStack(namei32s), namei32s.length, |
| strToStack(defaultName), condition, value); |
| }); |
| }; |
| self['call'] = function(name, operands, type) { |
| return preserveStack(function() { |
| return Module['_BinaryenCall'](module, strToStack(name), i32sToStack(operands), operands.length, type); |
| }); |
| }; |
| self['callIndirect'] = self['call_indirect'] = function(target, operands, type) { |
| return preserveStack(function() { |
| return Module['_BinaryenCallIndirect'](module, target, i32sToStack(operands), operands.length, strToStack(type)); |
| }); |
| }; |
| self['returnCall'] = function(name, operands, type) { |
| return preserveStack(function() { |
| return Module['_BinaryenReturnCall'](module, strToStack(name), i32sToStack(operands), operands.length, type); |
| }); |
| }; |
| self['returnCallIndirect'] = function(target, operands, type) { |
| return preserveStack(function() { |
| return Module['_BinaryenReturnCallIndirect'](module, target, i32sToStack(operands), operands.length, strToStack(type)); |
| }); |
| }; |
| |
| self['local'] = { |
| 'get': function(index, type) { |
| return Module['_BinaryenLocalGet'](module, index, type); |
| }, |
| 'set': function(index, value) { |
| return Module['_BinaryenLocalSet'](module, index, value); |
| }, |
| 'tee': function(index, value) { |
| return Module['_BinaryenLocalTee'](module, index, value); |
| } |
| } |
| |
| self['global'] = { |
| 'get': function(name, type) { |
| return Module['_BinaryenGlobalGet'](module, strToStack(name), type); |
| }, |
| 'set': function(name, value) { |
| return Module['_BinaryenGlobalSet'](module, strToStack(name), value); |
| } |
| } |
| |
| self['memory'] = { |
| 'size': function() { |
| return Module['_BinaryenHost'](module, Module['MemorySize']); |
| }, |
| 'grow': function(value) { |
| return Module['_BinaryenHost'](module, Module['MemoryGrow'], null, i32sToStack([value]), 1); |
| }, |
| 'init': function(segment, dest, offset, size) { |
| return Module['_BinaryenMemoryInit'](module, segment, dest, offset, size); |
| }, |
| 'copy': function(dest, source, size) { |
| return Module['_BinaryenMemoryCopy'](module, dest, source, size); |
| }, |
| 'fill': function(dest, value, size) { |
| return Module['_BinaryenMemoryFill'](module, dest, value, size); |
| } |
| } |
| |
| self['data'] = { |
| 'drop': function(segment) { |
| return Module['_BinaryenDataDrop'](module, segment); |
| } |
| } |
| |
| self['i32'] = { |
| 'load': function(offset, align, ptr) { |
| return Module['_BinaryenLoad'](module, 4, true, offset, align, Module['i32'], ptr); |
| }, |
| 'load8_s': function(offset, align, ptr) { |
| return Module['_BinaryenLoad'](module, 1, true, offset, align, Module['i32'], ptr); |
| }, |
| 'load8_u': function(offset, align, ptr) { |
| return Module['_BinaryenLoad'](module, 1, false, offset, align, Module['i32'], ptr); |
| }, |
| 'load16_s': function(offset, align, ptr) { |
| return Module['_BinaryenLoad'](module, 2, true, offset, align, Module['i32'], ptr); |
| }, |
| 'load16_u': function(offset, align, ptr) { |
| return Module['_BinaryenLoad'](module, 2, false, offset, align, Module['i32'], ptr); |
| }, |
| 'store': function(offset, align, ptr, value) { |
| return Module['_BinaryenStore'](module, 4, offset, align, ptr, value, Module['i32']); |
| }, |
| 'store8': function(offset, align, ptr, value) { |
| return Module['_BinaryenStore'](module, 1, offset, align, ptr, value, Module['i32']); |
| }, |
| 'store16': function(offset, align, ptr, value) { |
| return Module['_BinaryenStore'](module, 2, offset, align, ptr, value, Module['i32']); |
| }, |
| 'const': function(x) { |
| return preserveStack(function() { |
| var tempLiteral = stackAlloc(sizeOfLiteral); |
| Module['_BinaryenLiteralInt32'](tempLiteral, x); |
| return Module['_BinaryenConst'](module, tempLiteral); |
| }); |
| }, |
| 'clz': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ClzInt32'], value); |
| }, |
| 'ctz': function(value) { |
| return Module['_BinaryenUnary'](module, Module['CtzInt32'], value); |
| }, |
| 'popcnt': function(value) { |
| return Module['_BinaryenUnary'](module, Module['PopcntInt32'], value); |
| }, |
| 'eqz': function(value) { |
| return Module['_BinaryenUnary'](module, Module['EqZInt32'], value); |
| }, |
| 'trunc_s': { |
| 'f32': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSFloat32ToInt32'], value); |
| }, |
| 'f64': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSFloat64ToInt32'], value); |
| }, |
| }, |
| 'trunc_u': { |
| 'f32': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncUFloat32ToInt32'], value); |
| }, |
| 'f64': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncUFloat64ToInt32'], value); |
| }, |
| }, |
| 'trunc_s_sat': { |
| 'f32': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSatSFloat32ToInt32'], value); |
| }, |
| 'f64': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSatSFloat64ToInt32'], value); |
| }, |
| }, |
| 'trunc_u_sat': { |
| 'f32': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSatUFloat32ToInt32'], value); |
| }, |
| 'f64': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSatUFloat64ToInt32'], value); |
| }, |
| }, |
| 'reinterpret': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ReinterpretFloat32'], value); |
| }, |
| 'extend8_s': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ExtendS8Int32'], value); |
| }, |
| 'extend16_s': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ExtendS16Int32'], value); |
| }, |
| 'wrap': function(value) { |
| return Module['_BinaryenUnary'](module, Module['WrapInt64'], value); |
| }, |
| 'add': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AddInt32'], left, right); |
| }, |
| 'sub': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['SubInt32'], left, right); |
| }, |
| 'mul': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MulInt32'], left, right); |
| }, |
| 'div_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['DivSInt32'], left, right); |
| }, |
| 'div_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['DivUInt32'], left, right); |
| }, |
| 'rem_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['RemSInt32'], left, right); |
| }, |
| 'rem_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['RemUInt32'], left, right); |
| }, |
| 'and': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AndInt32'], left, right); |
| }, |
| 'or': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['OrInt32'], left, right); |
| }, |
| 'xor': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['XorInt32'], left, right); |
| }, |
| 'shl': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['ShlInt32'], left, right); |
| }, |
| 'shr_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['ShrUInt32'], left, right); |
| }, |
| 'shr_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['ShrSInt32'], left, right); |
| }, |
| 'rotl': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['RotLInt32'], left, right); |
| }, |
| 'rotr': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['RotRInt32'], left, right); |
| }, |
| 'eq': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['EqInt32'], left, right); |
| }, |
| 'ne': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['NeInt32'], left, right); |
| }, |
| 'lt_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LtSInt32'], left, right); |
| }, |
| 'lt_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LtUInt32'], left, right); |
| }, |
| 'le_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LeSInt32'], left, right); |
| }, |
| 'le_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LeUInt32'], left, right); |
| }, |
| 'gt_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GtSInt32'], left, right); |
| }, |
| 'gt_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GtUInt32'], left, right); |
| }, |
| 'ge_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GeSInt32'], left, right); |
| }, |
| 'ge_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GeUInt32'], left, right); |
| }, |
| 'atomic': { |
| 'load': function(offset, ptr) { |
| return Module['_BinaryenAtomicLoad'](module, 4, offset, Module['i32'], ptr); |
| }, |
| 'load8_u': function(offset, ptr) { |
| return Module['_BinaryenAtomicLoad'](module, 1, offset, Module['i32'], ptr); |
| }, |
| 'load16_u': function(offset, ptr) { |
| return Module['_BinaryenAtomicLoad'](module, 2, offset, Module['i32'], ptr); |
| }, |
| 'store': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicStore'](module, 4, offset, ptr, value, Module['i32']); |
| }, |
| 'store8': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicStore'](module, 1, offset, ptr, value, Module['i32']); |
| }, |
| 'store16': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicStore'](module, 2, offset, ptr, value, Module['i32']); |
| }, |
| 'rmw': { |
| 'add': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 4, offset, ptr, value, Module['i32']); |
| }, |
| 'sub': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 4, offset, ptr, value, Module['i32']); |
| }, |
| 'and': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 4, offset, ptr, value, Module['i32']); |
| }, |
| 'or': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 4, offset, ptr, value, Module['i32']); |
| }, |
| 'xor': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 4, offset, ptr, value, Module['i32']); |
| }, |
| 'xchg': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 4, offset, ptr, value, Module['i32']); |
| }, |
| 'cmpxchg': function(offset, ptr, expected, replacement) { |
| return Module['_BinaryenAtomicCmpxchg'](module, 4, offset, ptr, expected, replacement, Module['i32']) |
| }, |
| }, |
| 'rmw8_u': { |
| 'add': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 1, offset, ptr, value, Module['i32']); |
| }, |
| 'sub': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 1, offset, ptr, value, Module['i32']); |
| }, |
| 'and': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 1, offset, ptr, value, Module['i32']); |
| }, |
| 'or': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 1, offset, ptr, value, Module['i32']); |
| }, |
| 'xor': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 1, offset, ptr, value, Module['i32']); |
| }, |
| 'xchg': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 1, offset, ptr, value, Module['i32']); |
| }, |
| 'cmpxchg': function(offset, ptr, expected, replacement) { |
| return Module['_BinaryenAtomicCmpxchg'](module, 1, offset, ptr, expected, replacement, Module['i32']) |
| }, |
| }, |
| 'rmw16_u': { |
| 'add': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 2, offset, ptr, value, Module['i32']); |
| }, |
| 'sub': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 2, offset, ptr, value, Module['i32']); |
| }, |
| 'and': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 2, offset, ptr, value, Module['i32']); |
| }, |
| 'or': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 2, offset, ptr, value, Module['i32']); |
| }, |
| 'xor': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 2, offset, ptr, value, Module['i32']); |
| }, |
| 'xchg': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 2, offset, ptr, value, Module['i32']); |
| }, |
| 'cmpxchg': function(offset, ptr, expected, replacement) { |
| return Module['_BinaryenAtomicCmpxchg'](module, 2, offset, ptr, expected, replacement, Module['i32']) |
| }, |
| }, |
| 'wait': function(ptr, expected, timeout) { |
| return Module['_BinaryenAtomicWait'](module, ptr, expected, timeout, Module['i32']); |
| } |
| }, |
| 'pop': function() { |
| return Module['_BinaryenPop'](module, Module['i32']); |
| } |
| }; |
| |
| self['i64'] = { |
| 'load': function(offset, align, ptr) { |
| return Module['_BinaryenLoad'](module, 8, true, offset, align, Module['i64'], ptr); |
| }, |
| 'load8_s': function(offset, align, ptr) { |
| return Module['_BinaryenLoad'](module, 1, true, offset, align, Module['i64'], ptr); |
| }, |
| 'load8_u': function(offset, align, ptr) { |
| return Module['_BinaryenLoad'](module, 1, false, offset, align, Module['i64'], ptr); |
| }, |
| 'load16_s': function(offset, align, ptr) { |
| return Module['_BinaryenLoad'](module, 2, true, offset, align, Module['i64'], ptr); |
| }, |
| 'load16_u': function(offset, align, ptr) { |
| return Module['_BinaryenLoad'](module, 2, false, offset, align, Module['i64'], ptr); |
| }, |
| 'load32_s': function(offset, align, ptr) { |
| return Module['_BinaryenLoad'](module, 4, true, offset, align, Module['i64'], ptr); |
| }, |
| 'load32_u': function(offset, align, ptr) { |
| return Module['_BinaryenLoad'](module, 4, false, offset, align, Module['i64'], ptr); |
| }, |
| 'store': function(offset, align, ptr, value) { |
| return Module['_BinaryenStore'](module, 8, offset, align, ptr, value, Module['i64']); |
| }, |
| 'store8': function(offset, align, ptr, value) { |
| return Module['_BinaryenStore'](module, 1, offset, align, ptr, value, Module['i64']); |
| }, |
| 'store16': function(offset, align, ptr, value) { |
| return Module['_BinaryenStore'](module, 2, offset, align, ptr, value, Module['i64']); |
| }, |
| 'store32': function(offset, align, ptr, value) { |
| return Module['_BinaryenStore'](module, 4, offset, align, ptr, value, Module['i64']); |
| }, |
| 'const': function(x, y) { |
| return preserveStack(function() { |
| var tempLiteral = stackAlloc(sizeOfLiteral); |
| Module['_BinaryenLiteralInt64'](tempLiteral, x, y); |
| return Module['_BinaryenConst'](module, tempLiteral); |
| }); |
| }, |
| 'clz': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ClzInt64'], value); |
| }, |
| 'ctz': function(value) { |
| return Module['_BinaryenUnary'](module, Module['CtzInt64'], value); |
| }, |
| 'popcnt': function(value) { |
| return Module['_BinaryenUnary'](module, Module['PopcntInt64'], value); |
| }, |
| 'eqz': function(value) { |
| return Module['_BinaryenUnary'](module, Module['EqZInt64'], value); |
| }, |
| 'trunc_s': { |
| 'f32': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSFloat32ToInt64'], value); |
| }, |
| 'f64': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSFloat64ToInt64'], value); |
| }, |
| }, |
| 'trunc_u': { |
| 'f32': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncUFloat32ToInt64'], value); |
| }, |
| 'f64': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncUFloat64ToInt64'], value); |
| }, |
| }, |
| 'trunc_s_sat': { |
| 'f32': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSatSFloat32ToInt64'], value); |
| }, |
| 'f64': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSatSFloat64ToInt64'], value); |
| }, |
| }, |
| 'trunc_u_sat': { |
| 'f32': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSatUFloat32ToInt64'], value); |
| }, |
| 'f64': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSatUFloat64ToInt64'], value); |
| }, |
| }, |
| 'reinterpret': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ReinterpretFloat64'], value); |
| }, |
| 'extend8_s': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ExtendS8Int64'], value); |
| }, |
| 'extend16_s': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ExtendS16Int64'], value); |
| }, |
| 'extend32_s': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ExtendS32Int64'], value); |
| }, |
| 'extend_s': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ExtendSInt32'], value); |
| }, |
| 'extend_u': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ExtendUInt32'], value); |
| }, |
| 'add': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AddInt64'], left, right); |
| }, |
| 'sub': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['SubInt64'], left, right); |
| }, |
| 'mul': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MulInt64'], left, right); |
| }, |
| 'div_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['DivSInt64'], left, right); |
| }, |
| 'div_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['DivUInt64'], left, right); |
| }, |
| 'rem_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['RemSInt64'], left, right); |
| }, |
| 'rem_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['RemUInt64'], left, right); |
| }, |
| 'and': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AndInt64'], left, right); |
| }, |
| 'or': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['OrInt64'], left, right); |
| }, |
| 'xor': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['XorInt64'], left, right); |
| }, |
| 'shl': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['ShlInt64'], left, right); |
| }, |
| 'shr_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['ShrUInt64'], left, right); |
| }, |
| 'shr_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['ShrSInt64'], left, right); |
| }, |
| 'rotl': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['RotLInt64'], left, right); |
| }, |
| 'rotr': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['RotRInt64'], left, right); |
| }, |
| 'eq': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['EqInt64'], left, right); |
| }, |
| 'ne': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['NeInt64'], left, right); |
| }, |
| 'lt_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LtSInt64'], left, right); |
| }, |
| 'lt_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LtUInt64'], left, right); |
| }, |
| 'le_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LeSInt64'], left, right); |
| }, |
| 'le_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LeUInt64'], left, right); |
| }, |
| 'gt_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GtSInt64'], left, right); |
| }, |
| 'gt_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GtUInt64'], left, right); |
| }, |
| 'ge_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GeSInt64'], left, right); |
| }, |
| 'ge_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GeUInt64'], left, right); |
| }, |
| 'atomic': { |
| 'load': function(offset, ptr) { |
| return Module['_BinaryenAtomicLoad'](module, 8, offset, Module['i64'], ptr); |
| }, |
| 'load8_u': function(offset, ptr) { |
| return Module['_BinaryenAtomicLoad'](module, 1, offset, Module['i64'], ptr); |
| }, |
| 'load16_u': function(offset, ptr) { |
| return Module['_BinaryenAtomicLoad'](module, 2, offset, Module['i64'], ptr); |
| }, |
| 'load32_u': function(offset, ptr) { |
| return Module['_BinaryenAtomicLoad'](module, 4, offset, Module['i64'], ptr); |
| }, |
| 'store': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicStore'](module, 8, offset, ptr, value, Module['i64']); |
| }, |
| 'store8': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicStore'](module, 1, offset, ptr, value, Module['i64']); |
| }, |
| 'store16': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicStore'](module, 2, offset, ptr, value, Module['i64']); |
| }, |
| 'store32': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicStore'](module, 4, offset, ptr, value, Module['i64']); |
| }, |
| 'rmw': { |
| 'add': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 8, offset, ptr, value, Module['i64']); |
| }, |
| 'sub': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 8, offset, ptr, value, Module['i64']); |
| }, |
| 'and': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 8, offset, ptr, value, Module['i64']); |
| }, |
| 'or': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 8, offset, ptr, value, Module['i64']); |
| }, |
| 'xor': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 8, offset, ptr, value, Module['i64']); |
| }, |
| 'xchg': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 8, offset, ptr, value, Module['i64']); |
| }, |
| 'cmpxchg': function(offset, ptr, expected, replacement) { |
| return Module['_BinaryenAtomicCmpxchg'](module, 8, offset, ptr, expected, replacement, Module['i64']) |
| }, |
| }, |
| 'rmw8_u': { |
| 'add': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 1, offset, ptr, value, Module['i64']); |
| }, |
| 'sub': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 1, offset, ptr, value, Module['i64']); |
| }, |
| 'and': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 1, offset, ptr, value, Module['i64']); |
| }, |
| 'or': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 1, offset, ptr, value, Module['i64']); |
| }, |
| 'xor': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 1, offset, ptr, value, Module['i64']); |
| }, |
| 'xchg': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 1, offset, ptr, value, Module['i64']); |
| }, |
| 'cmpxchg': function(offset, ptr, expected, replacement) { |
| return Module['_BinaryenAtomicCmpxchg'](module, 1, offset, ptr, expected, replacement, Module['i64']) |
| }, |
| }, |
| 'rmw16_u': { |
| 'add': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 2, offset, ptr, value, Module['i64']); |
| }, |
| 'sub': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 2, offset, ptr, value, Module['i64']); |
| }, |
| 'and': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 2, offset, ptr, value, Module['i64']); |
| }, |
| 'or': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 2, offset, ptr, value, Module['i64']); |
| }, |
| 'xor': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 2, offset, ptr, value, Module['i64']); |
| }, |
| 'xchg': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 2, offset, ptr, value, Module['i64']); |
| }, |
| 'cmpxchg': function(offset, ptr, expected, replacement) { |
| return Module['_BinaryenAtomicCmpxchg'](module, 2, offset, ptr, expected, replacement, Module['i64']) |
| }, |
| }, |
| 'rmw32_u': { |
| 'add': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 4, offset, ptr, value, Module['i64']); |
| }, |
| 'sub': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 4, offset, ptr, value, Module['i64']); |
| }, |
| 'and': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 4, offset, ptr, value, Module['i64']); |
| }, |
| 'or': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 4, offset, ptr, value, Module['i64']); |
| }, |
| 'xor': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 4, offset, ptr, value, Module['i64']); |
| }, |
| 'xchg': function(offset, ptr, value) { |
| return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 4, offset, ptr, value, Module['i64']); |
| }, |
| 'cmpxchg': function(offset, ptr, expected, replacement) { |
| return Module['_BinaryenAtomicCmpxchg'](module, 4, offset, ptr, expected, replacement, Module['i64']) |
| }, |
| }, |
| 'wait': function(ptr, expected, timeout) { |
| return Module['_BinaryenAtomicWait'](module, ptr, expected, timeout, Module['i64']); |
| } |
| }, |
| 'pop': function() { |
| return Module['_BinaryenPop'](module, Module['i64']); |
| } |
| }; |
| |
| self['f32'] = { |
| 'load': function(offset, align, ptr) { |
| return Module['_BinaryenLoad'](module, 4, true, offset, align, Module['f32'], ptr); |
| }, |
| 'store': function(offset, align, ptr, value) { |
| return Module['_BinaryenStore'](module, 4, offset, align, ptr, value, Module['f32']); |
| }, |
| 'const': function(x) { |
| return preserveStack(function() { |
| var tempLiteral = stackAlloc(sizeOfLiteral); |
| Module['_BinaryenLiteralFloat32'](tempLiteral, x); |
| return Module['_BinaryenConst'](module, tempLiteral); |
| }); |
| }, |
| 'const_bits': function(x) { |
| return preserveStack(function() { |
| var tempLiteral = stackAlloc(sizeOfLiteral); |
| Module['_BinaryenLiteralFloat32Bits'](tempLiteral, x); |
| return Module['_BinaryenConst'](module, tempLiteral); |
| }); |
| }, |
| 'neg': function(value) { |
| return Module['_BinaryenUnary'](module, Module['NegFloat32'], value); |
| }, |
| 'abs': function(value) { |
| return Module['_BinaryenUnary'](module, Module['AbsFloat32'], value); |
| }, |
| 'ceil': function(value) { |
| return Module['_BinaryenUnary'](module, Module['CeilFloat32'], value); |
| }, |
| 'floor': function(value) { |
| return Module['_BinaryenUnary'](module, Module['FloorFloat32'], value); |
| }, |
| 'trunc': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncFloat32'], value); |
| }, |
| 'nearest': function(value) { |
| return Module['_BinaryenUnary'](module, Module['NearestFloat32'], value); |
| }, |
| 'sqrt': function(value) { |
| return Module['_BinaryenUnary'](module, Module['SqrtFloat32'], value); |
| }, |
| 'reinterpret': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ReinterpretInt32'], value); |
| }, |
| 'convert_s': { |
| 'i32': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ConvertSInt32ToFloat32'], value); |
| }, |
| 'i64': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ConvertSInt64ToFloat32'], value); |
| }, |
| }, |
| 'convert_u': { |
| 'i32': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ConvertUInt32ToFloat32'], value); |
| }, |
| 'i64': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ConvertUInt64ToFloat32'], value); |
| }, |
| }, |
| 'demote': function(value) { |
| return Module['_BinaryenUnary'](module, Module['DemoteFloat64'], value); |
| }, |
| 'add': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AddFloat32'], left, right); |
| }, |
| 'sub': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['SubFloat32'], left, right); |
| }, |
| 'mul': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MulFloat32'], left, right); |
| }, |
| 'div': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['DivFloat32'], left, right); |
| }, |
| 'copysign': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['CopySignFloat32'], left, right); |
| }, |
| 'min': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MinFloat32'], left, right); |
| }, |
| 'max': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MaxFloat32'], left, right); |
| }, |
| 'eq': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['EqFloat32'], left, right); |
| }, |
| 'ne': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['NeFloat32'], left, right); |
| }, |
| 'lt': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LtFloat32'], left, right); |
| }, |
| 'le': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LeFloat32'], left, right); |
| }, |
| 'gt': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GtFloat32'], left, right); |
| }, |
| 'ge': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GeFloat32'], left, right); |
| }, |
| 'pop': function() { |
| return Module['_BinaryenPop'](module, Module['f32']); |
| } |
| }; |
| |
| self['f64'] = { |
| 'load': function(offset, align, ptr) { |
| return Module['_BinaryenLoad'](module, 8, true, offset, align, Module['f64'], ptr); |
| }, |
| 'store': function(offset, align, ptr, value) { |
| return Module['_BinaryenStore'](module, 8, offset, align, ptr, value, Module['f64']); |
| }, |
| 'const': function(x) { |
| return preserveStack(function() { |
| var tempLiteral = stackAlloc(sizeOfLiteral); |
| Module['_BinaryenLiteralFloat64'](tempLiteral, x); |
| return Module['_BinaryenConst'](module, tempLiteral); |
| }); |
| }, |
| 'const_bits': function(x, y) { |
| return preserveStack(function() { |
| var tempLiteral = stackAlloc(sizeOfLiteral); |
| Module['_BinaryenLiteralFloat64Bits'](tempLiteral, x, y); |
| return Module['_BinaryenConst'](module, tempLiteral); |
| }); |
| }, |
| 'neg': function(value) { |
| return Module['_BinaryenUnary'](module, Module['NegFloat64'], value); |
| }, |
| 'abs': function(value) { |
| return Module['_BinaryenUnary'](module, Module['AbsFloat64'], value); |
| }, |
| 'ceil': function(value) { |
| return Module['_BinaryenUnary'](module, Module['CeilFloat64'], value); |
| }, |
| 'floor': function(value) { |
| return Module['_BinaryenUnary'](module, Module['FloorFloat64'], value); |
| }, |
| 'trunc': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncFloat64'], value); |
| }, |
| 'nearest': function(value) { |
| return Module['_BinaryenUnary'](module, Module['NearestFloat64'], value); |
| }, |
| 'sqrt': function(value) { |
| return Module['_BinaryenUnary'](module, Module['SqrtFloat64'], value); |
| }, |
| 'reinterpret': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ReinterpretInt64'], value); |
| }, |
| 'convert_s': { |
| 'i32': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ConvertSInt32ToFloat64'], value); |
| }, |
| 'i64': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ConvertSInt64ToFloat64'], value); |
| }, |
| }, |
| 'convert_u': { |
| 'i32': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ConvertUInt32ToFloat64'], value); |
| }, |
| 'i64': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ConvertUInt64ToFloat64'], value); |
| }, |
| }, |
| 'promote': function(value) { |
| return Module['_BinaryenUnary'](module, Module['PromoteFloat32'], value); |
| }, |
| 'add': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AddFloat64'], left, right); |
| }, |
| 'sub': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['SubFloat64'], left, right); |
| }, |
| 'mul': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MulFloat64'], left, right); |
| }, |
| 'div': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['DivFloat64'], left, right); |
| }, |
| 'copysign': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['CopySignFloat64'], left, right); |
| }, |
| 'min': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MinFloat64'], left, right); |
| }, |
| 'max': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MaxFloat64'], left, right); |
| }, |
| 'eq': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['EqFloat64'], left, right); |
| }, |
| 'ne': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['NeFloat64'], left, right); |
| }, |
| 'lt': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LtFloat64'], left, right); |
| }, |
| 'le': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LeFloat64'], left, right); |
| }, |
| 'gt': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GtFloat64'], left, right); |
| }, |
| 'ge': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GeFloat64'], left, right); |
| }, |
| 'pop': function() { |
| return Module['_BinaryenPop'](module, Module['f64']); |
| } |
| }; |
| |
| self['v128'] = { |
| 'load': function(offset, align, ptr) { |
| return Module['_BinaryenLoad'](module, 16, false, offset, align, Module['v128'], ptr); |
| }, |
| 'store': function(offset, align, ptr, value) { |
| return Module['_BinaryenStore'](module, 16, offset, align, ptr, value, Module['v128']); |
| }, |
| 'const': function(i8s) { |
| return preserveStack(function() { |
| var tempLiteral = stackAlloc(sizeOfLiteral); |
| Module['_BinaryenLiteralVec128'](tempLiteral, i8sToStack(i8s)); |
| return Module['_BinaryenConst'](module, tempLiteral); |
| }); |
| }, |
| 'not': function(value) { |
| return Module['_BinaryenUnary'](module, Module['NotVec128'], value); |
| }, |
| 'and': function(value) { |
| return Module['_BinaryenUnary'](module, Module['AndVec128'], value); |
| }, |
| 'or': function(value) { |
| return Module['_BinaryenUnary'](module, Module['OrVec128'], value); |
| }, |
| 'xor': function(value) { |
| return Module['_BinaryenUnary'](module, Module['XorVec128'], value); |
| }, |
| 'bitselect': function(left, right, cond) { |
| return Module['_BinaryenSIMDBitselect'](module, left, right, cond); |
| }, |
| 'pop': function() { |
| return Module['_BinaryenPop'](module, Module['v128']); |
| } |
| }; |
| |
| self['v8x16'] = { |
| 'shuffle': function(left, right, mask) { |
| return preserveStack(function() { |
| return Module['_BinaryenSIMDShuffle'](module, left, right, i8sToStack(mask)); |
| }); |
| }, |
| }; |
| |
| self['i8x16'] = { |
| 'splat': function(value) { |
| return Module['_BinaryenUnary'](module, Module['SplatVecI8x16'], value); |
| }, |
| 'extract_lane_s': function(vec, index) { |
| return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneSVecI8x16'], vec, index); |
| }, |
| 'extract_lane_u': function(vec, index) { |
| return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneUVecI8x16'], vec, index); |
| }, |
| 'replace_lane': function(vec, index, value) { |
| return Module['_BinaryenSIMDReplace'](module, Module['ReplaceLaneVecI8x16'], vec, index, value); |
| }, |
| 'eq': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['EqVecI8x16'], left, right); |
| }, |
| 'ne': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['NeVecI8x16'], left, right); |
| }, |
| 'lt_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LtSVecI8x16'], left, right); |
| }, |
| 'lt_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LtUVecI8x16'], left, right); |
| }, |
| 'gt_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GtSVecI8x16'], left, right); |
| }, |
| 'gt_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GtUVecI8x16'], left, right); |
| }, |
| 'le_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LeSVecI8x16'], left, right); |
| }, |
| 'le_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LeUVecI8x16'], left, right); |
| }, |
| 'ge_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GeSVecI8x16'], left, right); |
| }, |
| 'ge_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GeUVecI8x16'], left, right); |
| }, |
| 'neg': function(value) { |
| return Module['_BinaryenUnary'](module, Module['NegVecI8x16'], value); |
| }, |
| 'any_true': function(value) { |
| return Module['_BinaryenUnary'](module, Module['AnyTrueVecI8x16'], value); |
| }, |
| 'all_true': function(value) { |
| return Module['_BinaryenUnary'](module, Module['AllTrueVecI8x16'], value); |
| }, |
| 'shl': function(vec, shift) { |
| return Module['_BinaryenSIMDShift'](module, Module['ShlVecI8x16'], vec, shift); |
| }, |
| 'shr_s': function(vec, shift) { |
| return Module['_BinaryenSIMDShift'](module, Module['ShrSVecI8x16'], vec, shift); |
| }, |
| 'shr_u': function(vec, shift) { |
| return Module['_BinaryenSIMDShift'](module, Module['ShrUVecI8x16'], vec, shift); |
| }, |
| 'add': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AddVecI8x16'], left, right); |
| }, |
| 'add_saturate_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AddSatSVecI8x16'], left, right); |
| }, |
| 'add_saturate_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AddSatUVecI8x16'], left, right); |
| }, |
| 'sub': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['SubVecI8x16'], left, right); |
| }, |
| 'sub_saturate_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['SubSatSVecI8x16'], left, right); |
| }, |
| 'sub_saturate_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['SubSatUVecI8x16'], left, right); |
| }, |
| 'mul': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MulVecI8x16'], left, right); |
| }, |
| }; |
| |
| self['i16x8'] = { |
| 'splat': function(value) { |
| return Module['_BinaryenUnary'](module, Module['SplatVecI16x8'], value); |
| }, |
| 'extract_lane_s': function(vec, index) { |
| return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneSVecI16x8'], vec, index); |
| }, |
| 'extract_lane_u': function(vec, index) { |
| return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneUVecI16x8'], vec, index); |
| }, |
| 'replace_lane': function(vec, index, value) { |
| return Module['_BinaryenSIMDReplace'](module, Module['ReplaceLaneVecI16x8'], vec, index, value); |
| }, |
| 'eq': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['EqVecI16x8'], left, right); |
| }, |
| 'ne': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['NeVecI16x8'], left, right); |
| }, |
| 'lt_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LtSVecI16x8'], left, right); |
| }, |
| 'lt_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LtUVecI16x8'], left, right); |
| }, |
| 'gt_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GtSVecI16x8'], left, right); |
| }, |
| 'gt_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GtUVecI16x8'], left, right); |
| }, |
| 'le_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LeSVecI16x8'], left, right); |
| }, |
| 'le_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LeUVecI16x8'], left, right); |
| }, |
| 'ge_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GeSVecI16x8'], left, right); |
| }, |
| 'ge_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GeUVecI16x8'], left, right); |
| }, |
| 'neg': function(value) { |
| return Module['_BinaryenUnary'](module, Module['NegVecI16x8'], value); |
| }, |
| 'any_true': function(value) { |
| return Module['_BinaryenUnary'](module, Module['AnyTrueVecI16x8'], value); |
| }, |
| 'all_true': function(value) { |
| return Module['_BinaryenUnary'](module, Module['AllTrueVecI16x8'], value); |
| }, |
| 'shl': function(vec, shift) { |
| return Module['_BinaryenSIMDShift'](module, Module['ShlVecI16x8'], vec, shift); |
| }, |
| 'shr_s': function(vec, shift) { |
| return Module['_BinaryenSIMDShift'](module, Module['ShrSVecI16x8'], vec, shift); |
| }, |
| 'shr_u': function(vec, shift) { |
| return Module['_BinaryenSIMDShift'](module, Module['ShrUVecI16x8'], vec, shift); |
| }, |
| 'add': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AddVecI16x8'], left, right); |
| }, |
| 'add_saturate_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AddSatSVecI16x8'], left, right); |
| }, |
| 'add_saturate_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AddSatUVecI16x8'], left, right); |
| }, |
| 'sub': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['SubVecI16x8'], left, right); |
| }, |
| 'sub_saturate_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['SubSatSVecI16x8'], left, right); |
| }, |
| 'sub_saturate_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['SubSatUVecI16x8'], left, right); |
| }, |
| 'mul': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MulVecI16x8'], left, right); |
| }, |
| }; |
| |
| self['i32x4'] = { |
| 'splat': function(value) { |
| return Module['_BinaryenUnary'](module, Module['SplatVecI32x4'], value); |
| }, |
| 'extract_lane': function(vec, index) { |
| return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneVecI32x4'], vec, index); |
| }, |
| 'replace_lane': function(vec, index, value) { |
| return Module['_BinaryenSIMDReplace'](module, Module['ReplaceLaneVecI32x4'], vec, index, value); |
| }, |
| 'eq': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['EqVecI32x4'], left, right); |
| }, |
| 'ne': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['NeVecI32x4'], left, right); |
| }, |
| 'lt_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LtSVecI32x4'], left, right); |
| }, |
| 'lt_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LtUVecI32x4'], left, right); |
| }, |
| 'gt_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GtSVecI32x4'], left, right); |
| }, |
| 'gt_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GtUVecI32x4'], left, right); |
| }, |
| 'le_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LeSVecI32x4'], left, right); |
| }, |
| 'le_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LeUVecI32x4'], left, right); |
| }, |
| 'ge_s': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GeSVecI32x4'], left, right); |
| }, |
| 'ge_u': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GeUVecI32x4'], left, right); |
| }, |
| 'neg': function(value) { |
| return Module['_BinaryenUnary'](module, Module['NegVecI32x4'], value); |
| }, |
| 'any_true': function(value) { |
| return Module['_BinaryenUnary'](module, Module['AnyTrueVecI32x4'], value); |
| }, |
| 'all_true': function(value) { |
| return Module['_BinaryenUnary'](module, Module['AllTrueVecI32x4'], value); |
| }, |
| 'shl': function(vec, shift) { |
| return Module['_BinaryenSIMDShift'](module, Module['ShlVecI32x4'], vec, shift); |
| }, |
| 'shr_s': function(vec, shift) { |
| return Module['_BinaryenSIMDShift'](module, Module['ShrSVecI32x4'], vec, shift); |
| }, |
| 'shr_u': function(vec, shift) { |
| return Module['_BinaryenSIMDShift'](module, Module['ShrUVecI32x4'], vec, shift); |
| }, |
| 'add': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AddVecI32x4'], left, right); |
| }, |
| 'sub': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['SubVecI32x4'], left, right); |
| }, |
| 'mul': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MulVecI32x4'], left, right); |
| }, |
| 'trunc_s/f32x4:sat': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSatSVecF32x4ToVecI32x4'], value); |
| }, |
| 'trunc_u/f32x4:sat': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSatUVecF32x4ToVecI32x4'], value); |
| }, |
| }; |
| |
| self['i64x2'] = { |
| 'splat': function(value) { |
| return Module['_BinaryenUnary'](module, Module['SplatVecI64x2'], value); |
| }, |
| 'extract_lane': function(vec, index) { |
| return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneVecI64x2'], vec, index); |
| }, |
| 'replace_lane': function(vec, index, value) { |
| return Module['_BinaryenSIMDReplace'](module, Module['ReplaceLaneVecI64x2'], vec, index, value); |
| }, |
| 'neg': function(value) { |
| return Module['_BinaryenUnary'](module, Module['NegVecI64x2'], value); |
| }, |
| 'any_true': function(value) { |
| return Module['_BinaryenUnary'](module, Module['AnyTrueVecI64x2'], value); |
| }, |
| 'all_true': function(value) { |
| return Module['_BinaryenUnary'](module, Module['AllTrueVecI64x2'], value); |
| }, |
| 'shl': function(vec, shift) { |
| return Module['_BinaryenSIMDShift'](module, Module['ShlVecI64x2'], vec, shift); |
| }, |
| 'shr_s': function(vec, shift) { |
| return Module['_BinaryenSIMDShift'](module, Module['ShrSVecI64x2'], vec, shift); |
| }, |
| 'shr_u': function(vec, shift) { |
| return Module['_BinaryenSIMDShift'](module, Module['ShrUVecI64x2'], vec, shift); |
| }, |
| 'add': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AddVecI64x2'], left, right); |
| }, |
| 'sub': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['SubVecI64x2'], left, right); |
| }, |
| 'trunc_s/f64x2:sat': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSatSVecF64x2ToVecI64x2'], value); |
| }, |
| 'trunc_u/f64x2:sat': function(value) { |
| return Module['_BinaryenUnary'](module, Module['TruncSatUVecF64x2ToVecI64x2'], value); |
| }, |
| }; |
| |
| self['f32x4'] = { |
| 'splat': function(value) { |
| return Module['_BinaryenUnary'](module, Module['SplatVecF32x4'], value); |
| }, |
| 'extract_lane': function(vec, index) { |
| return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneVecF32x4'], vec, index); |
| }, |
| 'replace_lane': function(vec, index, value) { |
| return Module['_BinaryenSIMDReplace'](module, Module['ReplaceLaneVecF32x4'], vec, index, value); |
| }, |
| 'eq': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['EqVecF32x4'], left, right); |
| }, |
| 'ne': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['NeVecF32x4'], left, right); |
| }, |
| 'lt': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LtVecF32x4'], left, right); |
| }, |
| 'gt': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GtVecF32x4'], left, right); |
| }, |
| 'le': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LeVecF32x4'], left, right); |
| }, |
| 'ge': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GeVecF32x4'], left, right); |
| }, |
| 'abs': function(value) { |
| return Module['_BinaryenUnary'](module, Module['AbsVecF32x4'], value); |
| }, |
| 'neg': function(value) { |
| return Module['_BinaryenUnary'](module, Module['NegVecF32x4'], value); |
| }, |
| 'sqrt': function(value) { |
| return Module['_BinaryenUnary'](module, Module['SqrtVecF32x4'], value); |
| }, |
| 'add': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AddVecF32x4'], left, right); |
| }, |
| 'sub': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['SubVecF32x4'], left, right); |
| }, |
| 'mul': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MulVecF32x4'], left, right); |
| }, |
| 'div': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['DivVecF32x4'], left, right); |
| }, |
| 'min': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MinVecF32x4'], left, right); |
| }, |
| 'max': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MaxVecF32x4'], left, right); |
| }, |
| 'convert_s/i32x4': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ConvertSVecI32x4ToVecF32x4'], value); |
| }, |
| 'convert_u/i32x4': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ConvertUVecI32x4ToVecF32x4'], value); |
| }, |
| }; |
| |
| self['f64x2'] = { |
| 'splat': function(value) { |
| return Module['_BinaryenUnary'](module, Module['SplatVecF64x2'], value); |
| }, |
| 'extract_lane': function(vec, index) { |
| return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneVecF64x2'], vec, index); |
| }, |
| 'replace_lane': function(vec, index, value) { |
| return Module['_BinaryenSIMDReplace'](module, Module['ReplaceLaneVecF64x2'], vec, index, value); |
| }, |
| 'eq': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['EqVecF64x2'], left, right); |
| }, |
| 'ne': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['NeVecF64x2'], left, right); |
| }, |
| 'lt': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LtVecF64x2'], left, right); |
| }, |
| 'gt': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GtVecF64x2'], left, right); |
| }, |
| 'le': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['LeVecF64x2'], left, right); |
| }, |
| 'ge': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['GeVecF64x2'], left, right); |
| }, |
| 'abs': function(value) { |
| return Module['_BinaryenUnary'](module, Module['AbsVecF64x2'], value); |
| }, |
| 'neg': function(value) { |
| return Module['_BinaryenUnary'](module, Module['NegVecF64x2'], value); |
| }, |
| 'sqrt': function(value) { |
| return Module['_BinaryenUnary'](module, Module['SqrtVecF64x2'], value); |
| }, |
| 'add': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['AddVecF64x2'], left, right); |
| }, |
| 'sub': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['SubVecF64x2'], left, right); |
| }, |
| 'mul': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MulVecF64x2'], left, right); |
| }, |
| 'div': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['DivVecF64x2'], left, right); |
| }, |
| 'min': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MinVecF64x2'], left, right); |
| }, |
| 'max': function(left, right) { |
| return Module['_BinaryenBinary'](module, Module['MaxVecF64x2'], left, right); |
| }, |
| 'convert_s/i64x2': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ConvertSVecI64x2ToVecF64x2'], value); |
| }, |
| 'convert_u/i64x2': function(value) { |
| return Module['_BinaryenUnary'](module, Module['ConvertUVecI64x2ToVecF64x2'], value); |
| }, |
| }; |
| |
| self['exnref'] = { |
| 'pop': function() { |
| return Module['_BinaryenPop'](module, Module['exnref']); |
| } |
| }; |
| |
| self['select'] = function(condition, ifTrue, ifFalse) { |
| return Module['_BinaryenSelect'](module, condition, ifTrue, ifFalse); |
| }; |
| self['drop'] = function(value) { |
| return Module['_BinaryenDrop'](module, value); |
| }; |
| self['return'] = function(value) { |
| return Module['_BinaryenReturn'](module, value); |
| }; |
| self['host'] = function(op, name, operands) { |
| if (!operands) operands = []; |
| return preserveStack(function() { |
| return Module['_BinaryenHost'](module, op, strToStack(name), i32sToStack(operands), operands.length); |
| }); |
| }; |
| self['nop'] = function() { |
| return Module['_BinaryenNop'](module); |
| }; |
| self['unreachable'] = function() { |
| return Module['_BinaryenUnreachable'](module); |
| }; |
| |
| self['atomic'] = { |
| 'notify': function(ptr, notifyCount) { |
| return Module['_BinaryenAtomicNotify'](module, ptr, notifyCount); |
| }, |
| 'fence': function() { |
| return Module['_BinaryenAtomicFence'](module); |
| } |
| }; |
| |
| self['try'] = function(body, catchBody) { |
| return Module['_BinaryenTry'](module, body, catchBody); |
| }; |
| self['throw'] = function(event_, operands) { |
| return preserveStack(function() { |
| return Module['_BinaryenThrow'](module, strToStack(event_), i32sToStack(operands), operands.length); |
| }); |
| }; |
| self['rethrow'] = function(exnref) { |
| return Module['_BinaryenRethrow'](module, exnref); |
| }; |
| self['br_on_exn'] = function(label, event_, exnref) { |
| return preserveStack(function() { |
| return Module['_BinaryenBrOnExn'](module, strToStack(label), strToStack(event_), exnref); |
| }); |
| }; |
| self['push'] = function(value) { |
| return Module['_BinaryenPush'](module, value); |
| }; |
| |
| // 'Module' operations |
| self['addFunctionType'] = function(name, result, paramTypes) { |
| if (!paramTypes) paramTypes = []; |
| return preserveStack(function() { |
| return Module['_BinaryenAddFunctionType'](module, strToStack(name), result, |
| i32sToStack(paramTypes), paramTypes.length); |
| }); |
| }; |
| self['getFunctionTypeBySignature'] = function(result, paramTypes) { |
| if (!paramTypes) paramTypes = []; |
| return preserveStack(function() { |
| return Module['_BinaryenGetFunctionTypeBySignature'](module, result, |
| i32sToStack(paramTypes), paramTypes.length); |
| }); |
| }; |
| self['removeFunctionType'] = function(name) { |
| return preserveStack(function() { |
| return Module['_BinaryenRemoveFunctionType'](module, strToStack(name)); |
| }); |
| }; |
| self['addFunction'] = function(name, functionType, varTypes, body) { |
| return preserveStack(function() { |
| return Module['_BinaryenAddFunction'](module, strToStack(name), functionType, i32sToStack(varTypes), varTypes.length, body); |
| }); |
| }; |
| self['getFunction'] = function(name) { |
| return preserveStack(function() { |
| return Module['_BinaryenGetFunction'](module, strToStack(name)); |
| }); |
| }; |
| self['removeFunction'] = function(name) { |
| return preserveStack(function() { |
| return Module['_BinaryenRemoveFunction'](module, strToStack(name)); |
| }); |
| }; |
| self['addGlobal'] = function(name, type, mutable, init) { |
| return preserveStack(function() { |
| return Module['_BinaryenAddGlobal'](module, strToStack(name), type, mutable, init); |
| }); |
| } |
| self['getGlobal'] = function(name) { |
| return preserveStack(function() { |
| return Module['_BinaryenGetGlobal'](module, strToStack(name)); |
| }); |
| }; |
| self['removeGlobal'] = function(name) { |
| return preserveStack(function() { |
| return Module['_BinaryenRemoveGlobal'](module, strToStack(name)); |
| }); |
| } |
| self['addEvent'] = function(name, attribute, eventType) { |
| return preserveStack(function() { |
| return Module['_BinaryenAddEvent'](module, strToStack(name), attribute, eventType); |
| }); |
| }; |
| self['getEvent'] = function(name) { |
| return preserveStack(function() { |
| return Module['_BinaryenGetEvent'](module, strToStack(name)); |
| }); |
| }; |
| self['removeEvent'] = function(name) { |
| return preserveStack(function() { |
| return Module['_BinaryenRemoveEvent'](module, strToStack(name)); |
| }); |
| }; |
| self['addFunctionImport'] = function(internalName, externalModuleName, externalBaseName, functionType) { |
| return preserveStack(function() { |
| return Module['_BinaryenAddFunctionImport'](module, strToStack(internalName), strToStack(externalModuleName), strToStack(externalBaseName), functionType); |
| }); |
| }; |
| self['addTableImport'] = function(internalName, externalModuleName, externalBaseName) { |
| return preserveStack(function() { |
| return Module['_BinaryenAddTableImport'](module, strToStack(internalName), strToStack(externalModuleName), strToStack(externalBaseName)); |
| }); |
| }; |
| self['addMemoryImport'] = function(internalName, externalModuleName, externalBaseName, shared) { |
| return preserveStack(function() { |
| return Module['_BinaryenAddMemoryImport'](module, strToStack(internalName), strToStack(externalModuleName), strToStack(externalBaseName), shared); |
| }); |
| }; |
| self['addGlobalImport'] = function(internalName, externalModuleName, externalBaseName, globalType) { |
| return preserveStack(function() { |
| return Module['_BinaryenAddGlobalImport'](module, strToStack(internalName), strToStack(externalModuleName), strToStack(externalBaseName), globalType); |
| }); |
| }; |
| self['addEventImport'] = function(internalName, externalModuleName, externalBaseName, attribute, eventType) { |
| return preserveStack(function() { |
| return Module['_BinaryenAddEventImport'](module, strToStack(internalName), strToStack(externalModuleName), strToStack(externalBaseName), attribute, eventType); |
| }); |
| }; |
| self['addExport'] = // deprecated |
| self['addFunctionExport'] = function(internalName, externalName) { |
| return preserveStack(function() { |
| return Module['_BinaryenAddFunctionExport'](module, strToStack(internalName), strToStack(externalName)); |
| }); |
| }; |
| self['addTableExport'] = function(internalName, externalName) { |
| return preserveStack(function() { |
| return Module['_BinaryenAddTableExport'](module, strToStack(internalName), strToStack(externalName)); |
| }); |
| }; |
| self['addMemoryExport'] = function(internalName, externalName) { |
| return preserveStack(function() { |
| return Module['_BinaryenAddMemoryExport'](module, strToStack(internalName), strToStack(externalName)); |
| }); |
| }; |
| self['addGlobalExport'] = function(internalName, externalName) { |
| return preserveStack(function() { |
| return Module['_BinaryenAddGlobalExport'](module, strToStack(internalName), strToStack(externalName)); |
| }); |
| }; |
| self['addEventExport'] = function(internalName, externalName) { |
| return preserveStack(function() { |
| return Module['_BinaryenAddEventExport'](module, strToStack(internalName), strToStack(externalName)); |
| }); |
| }; |
| self['removeExport'] = function(externalName) { |
| return preserveStack(function() { |
| return Module['_BinaryenRemoveExport'](module, strToStack(externalName)); |
| }); |
| }; |
| self['setFunctionTable'] = function(initial, maximum, funcNames) { |
| return preserveStack(function() { |
| return Module['_BinaryenSetFunctionTable'](module, initial, maximum, |
| i32sToStack(funcNames.map(strToStack)), |
| funcNames.length |
| ); |
| }); |
| }; |
| self['setMemory'] = function(initial, maximum, exportName, segments, shared) { |
| // segments are assumed to be { passive: bool, offset: expression ref, data: array of 8-bit data } |
| if (!segments) segments = []; |
| return preserveStack(function() { |
| return Module['_BinaryenSetMemory']( |
| module, initial, maximum, strToStack(exportName), |
| i32sToStack( |
| segments.map(function(segment) { |
| return allocate(segment.data, 'i8', ALLOC_STACK); |
| }) |
| ), |
| i8sToStack( |
| segments.map(function(segment) { |
| return segment.passive; |
| }) |
| ), |
| i32sToStack( |
| segments.map(function(segment) { |
| return segment.offset; |
| }) |
| ), |
| i32sToStack( |
| segments.map(function(segment) { |
| return segment.data.length; |
| }) |
| ), |
| segments.length, |
| shared |
| ); |
| }); |
| }; |
| self['setStart'] = function(start) { |
| return Module['_BinaryenSetStart'](module, start); |
| }; |
| self['getFeatures'] = function() { |
| return Module['_BinaryenModuleGetFeatures'](module); |
| }; |
| self['setFeatures'] = function(features) { |
| Module['_BinaryenModuleSetFeatures'](module, features); |
| }; |
| self['emitText'] = function() { |
| var old = out; |
| var ret = ''; |
| out = function(x) { ret += x + '\n' }; |
| Module['_BinaryenModulePrint'](module); |
| out = old; |
| return ret; |
| }; |
| self['emitStackIR'] = function(optimize) { |
| self['runPasses'](['generate-stack-ir']); |
| if (optimize) self['runPasses'](['optimize-stack-ir']); |
| var old = out; |
| var ret = ''; |
| out = function(x) { ret += x + '\n' }; |
| self['runPasses'](['print-stack-ir']); |
| out = old; |
| return ret; |
| }; |
| self['emitAsmjs'] = function() { |
| var old = out; |
| var ret = ''; |
| out = function(x) { ret += x + '\n' }; |
| Module['_BinaryenModulePrintAsmjs'](module); |
| out = old; |
| return ret; |
| }; |
| self['validate'] = function() { |
| return Module['_BinaryenModuleValidate'](module); |
| }; |
| self['optimize'] = function() { |
| return Module['_BinaryenModuleOptimize'](module); |
| }; |
| self['optimizeFunction'] = function(func) { |
| if (typeof func === 'string') func = self['getFunction'](func); |
| return Module['_BinaryenFunctionOptimize'](func, module); |
| }; |
| self['runPasses'] = function(passes) { |
| return preserveStack(function() { |
| return Module['_BinaryenModuleRunPasses'](module, i32sToStack( |
| passes.map(strToStack) |
| ), passes.length); |
| }); |
| }; |
| self['runPassesOnFunction'] = function(func, passes) { |
| if (typeof func === 'string') func = self['getFunction'](func); |
| return preserveStack(function() { |
| return Module['_BinaryenFunctionRunPasses'](func, module, i32sToStack( |
| passes.map(strToStack) |
| ), passes.length); |
| }); |
| }; |
| self['autoDrop'] = function() { |
| return Module['_BinaryenModuleAutoDrop'](module); |
| }; |
| self['dispose'] = function() { |
| Module['_BinaryenModuleDispose'](module); |
| }; |
| self['emitBinary'] = function(sourceMapUrl) { |
| return preserveStack(function() { |
| var tempBuffer = stackAlloc(_BinaryenSizeofAllocateAndWriteResult()); |
| Module['_BinaryenModuleAllocateAndWrite'](tempBuffer, module, strToStack(sourceMapUrl)); |
| var binaryPtr = HEAPU32[ tempBuffer >>> 2 ]; |
| var binaryBytes = HEAPU32[(tempBuffer >>> 2) + 1]; |
| var sourceMapPtr = HEAPU32[(tempBuffer >>> 2) + 2]; |
| try { |
| var buffer = new Uint8Array(binaryBytes); |
| buffer.set(HEAPU8.subarray(binaryPtr, binaryPtr + binaryBytes)); |
| return typeof sourceMapUrl === 'undefined' |
| ? buffer |
| : { 'binary': buffer, 'sourceMap': UTF8ToString(sourceMapPtr) }; |
| } finally { |
| _free(binaryPtr); |
| if (sourceMapPtr) _free(sourceMapPtr); |
| } |
| }); |
| }; |
| self['interpret'] = function() { |
| return Module['_BinaryenModuleInterpret'](module); |
| }; |
| self['addDebugInfoFileName'] = function(filename) { |
| return preserveStack(function() { |
| return Module['_BinaryenModuleAddDebugInfoFileName'](module, strToStack(filename)); |
| }); |
| }; |
| self['getDebugInfoFileName'] = function(index) { |
| return UTF8ToString(Module['_BinaryenModuleGetDebugInfoFileName'](module, index)); |
| }; |
| self['setDebugLocation'] = function(func, expr, fileIndex, lineNumber, columnNumber) { |
| return Module['_BinaryenFunctionSetDebugLocation'](func, expr, fileIndex, lineNumber, columnNumber); |
| }; |
| |
| return self; |
| } |
| Module['wrapModule'] = wrapModule; |
| |
| // 'Relooper' interface |
| Module['Relooper'] = function(module) { |
| assert(module && typeof module === 'object' && module['ptr'] && module['block'] && module['if']); // guard against incorrect old API usage |
| var relooper = Module['_RelooperCreate'](module['ptr']); |
| this['ptr'] = relooper; |
| |
| this['addBlock'] = function(code) { |
| return Module['_RelooperAddBlock'](relooper, code); |
| }; |
| this['addBranch'] = function(from, to, condition, code) { |
| return Module['_RelooperAddBranch'](from, to, condition, code); |
| }; |
| this['addBlockWithSwitch'] = function(code, condition) { |
| return Module['_RelooperAddBlockWithSwitch'](relooper, code, condition); |
| }; |
| this['addBranchForSwitch'] = function(from, to, indexes, code) { |
| return preserveStack(function() { |
| return Module['_RelooperAddBranchForSwitch'](from, to, i32sToStack(indexes), indexes.length, code); |
| }); |
| }; |
| this['renderAndDispose'] = function(entry, labelHelper) { |
| return Module['_RelooperRenderAndDispose'](relooper, entry, labelHelper); |
| }; |
| }; |
| |
| function getAllNested(ref, numFn, getFn) { |
| var num = numFn(ref); |
| var ret = new Array(num); |
| for (var i = 0; i < num; ++i) ret[i] = getFn(ref, i); |
| return ret; |
| } |
| |
| // Gets the specific id of an 'Expression' |
| Module['getExpressionId'] = function(expr) { |
| return Module['_BinaryenExpressionGetId'](expr); |
| }; |
| |
| // Gets the result type of an 'Expression' |
| Module['getExpressionType'] = function(expr) { |
| return Module['_BinaryenExpressionGetType'](expr); |
| }; |
| |
| // Obtains information about an 'Expression' |
| Module['getExpressionInfo'] = function(expr) { |
| var id = Module['_BinaryenExpressionGetId'](expr); |
| var type = Module['_BinaryenExpressionGetType'](expr); |
| switch (id) { |
| case Module['BlockId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'name': UTF8ToString(Module['_BinaryenBlockGetName'](expr)), |
| 'children': getAllNested(expr, Module['_BinaryenBlockGetNumChildren'], Module['_BinaryenBlockGetChild']) |
| }; |
| case Module['IfId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'condition': Module['_BinaryenIfGetCondition'](expr), |
| 'ifTrue': Module['_BinaryenIfGetIfTrue'](expr), |
| 'ifFalse': Module['_BinaryenIfGetIfFalse'](expr) |
| }; |
| case Module['LoopId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'name': UTF8ToString(Module['_BinaryenLoopGetName'](expr)), |
| 'body': Module['_BinaryenLoopGetBody'](expr) |
| }; |
| case Module['BreakId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'name': UTF8ToString(Module['_BinaryenBreakGetName'](expr)), |
| 'condition': Module['_BinaryenBreakGetCondition'](expr), |
| 'value': Module['_BinaryenBreakGetValue'](expr) |
| }; |
| case Module['SwitchId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'names': getAllNested(expr, Module['_BinaryenSwitchGetNumNames'], Module['_BinaryenSwitchGetName']).map(Pointer_stringify), |
| 'defaultName': UTF8ToString(Module['_BinaryenSwitchGetDefaultName'](expr)), |
| 'condition': Module['_BinaryenSwitchGetCondition'](expr), |
| 'value': Module['_BinaryenSwitchGetValue'](expr) |
| }; |
| case Module['CallId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'target': UTF8ToString(Module['_BinaryenCallGetTarget'](expr)), |
| 'operands': getAllNested(expr, Module[ '_BinaryenCallGetNumOperands'], Module['_BinaryenCallGetOperand']) |
| }; |
| case Module['CallIndirectId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'target': Module['_BinaryenCallIndirectGetTarget'](expr), |
| 'operands': getAllNested(expr, Module['_BinaryenCallIndirectGetNumOperands'], Module['_BinaryenCallIndirectGetOperand']) |
| }; |
| case Module['LocalGetId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'index': Module['_BinaryenLocalGetGetIndex'](expr) |
| }; |
| case Module['LocalSetId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'isTee': Boolean(Module['_BinaryenLocalSetIsTee'](expr)), |
| 'index': Module['_BinaryenLocalSetGetIndex'](expr), |
| 'value': Module['_BinaryenLocalSetGetValue'](expr) |
| }; |
| case Module['GlobalGetId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'name': UTF8ToString(Module['_BinaryenGlobalGetGetName'](expr)) |
| }; |
| case Module['GlobalSetId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'name': UTF8ToString(Module['_BinaryenGlobalSetGetName'](expr)), |
| 'value': Module['_BinaryenGlobalSetGetValue'](expr) |
| }; |
| case Module['LoadId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'isAtomic': Boolean(Module['_BinaryenLoadIsAtomic'](expr)), |
| 'isSigned': Boolean(Module['_BinaryenLoadIsSigned'](expr)), |
| 'offset': Module['_BinaryenLoadGetOffset'](expr), |
| 'bytes': Module['_BinaryenLoadGetBytes'](expr), |
| 'align': Module['_BinaryenLoadGetAlign'](expr), |
| 'ptr': Module['_BinaryenLoadGetPtr'](expr) |
| }; |
| case Module['StoreId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'isAtomic': Boolean(Module['_BinaryenStoreIsAtomic'](expr)), |
| 'offset': Module['_BinaryenStoreGetOffset'](expr), |
| 'bytes': Module['_BinaryenStoreGetBytes'](expr), |
| 'align': Module['_BinaryenStoreGetAlign'](expr), |
| 'ptr': Module['_BinaryenStoreGetPtr'](expr), |
| 'value': Module['_BinaryenStoreGetValue'](expr) |
| }; |
| case Module['ConstId']: { |
| var value; |
| switch (type) { |
| case Module['i32']: value = Module['_BinaryenConstGetValueI32'](expr); break; |
| case Module['i64']: value = { 'low': Module['_BinaryenConstGetValueI64Low'](expr), 'high': Module['_BinaryenConstGetValueI64High'](expr) }; break; |
| case Module['f32']: value = Module['_BinaryenConstGetValueF32'](expr); break; |
| case Module['f64']: value = Module['_BinaryenConstGetValueF64'](expr); break; |
| case Module['v128']: { |
| preserveStack(function() { |
| var tempBuffer = stackAlloc(16); |
| Module['_BinaryenConstGetValueV128'](expr, tempBuffer); |
| value = new Array(16); |
| for (var i = 0 ; i < 16; i++) { |
| value[i] = HEAPU8[tempBuffer + i]; |
| } |
| }); |
| break; |
| } |
| default: throw Error('unexpected type: ' + type); |
| } |
| return { |
| 'id': id, |
| 'type': type, |
| 'value': value |
| }; |
| } |
| case Module['UnaryId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'op': Module['_BinaryenUnaryGetOp'](expr), |
| 'value': Module['_BinaryenUnaryGetValue'](expr) |
| }; |
| case Module['BinaryId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'op': Module['_BinaryenBinaryGetOp'](expr), |
| 'left': Module['_BinaryenBinaryGetLeft'](expr), |
| 'right': Module['_BinaryenBinaryGetRight'](expr) |
| }; |
| case Module['SelectId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'ifTrue': Module['_BinaryenSelectGetIfTrue'](expr), |
| 'ifFalse': Module['_BinaryenSelectGetIfFalse'](expr), |
| 'condition': Module['_BinaryenSelectGetCondition'](expr) |
| }; |
| case Module['DropId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'value': Module['_BinaryenDropGetValue'](expr) |
| }; |
| case Module['ReturnId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'value': Module['_BinaryenReturnGetValue'](expr) |
| }; |
| case Module['NopId']: |
| case Module['UnreachableId']: |
| case Module['PopId']: |
| return { |
| 'id': id, |
| 'type': type |
| }; |
| case Module['HostId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'op': Module['_BinaryenHostGetOp'](expr), |
| 'nameOperand': UTF8ToString(Module['_BinaryenHostGetNameOperand'](expr)), |
| 'operands': getAllNested(expr, Module['_BinaryenHostGetNumOperands'], Module['_BinaryenHostGetOperand']) |
| }; |
| case Module['AtomicRMWId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'op': Module['_BinaryenAtomicRMWGetOp'](expr), |
| 'bytes': Module['_BinaryenAtomicRMWGetBytes'](expr), |
| 'offset': Module['_BinaryenAtomicRMWGetOffset'](expr), |
| 'ptr': Module['_BinaryenAtomicRMWGetPtr'](expr), |
| 'value': Module['_BinaryenAtomicRMWGetValue'](expr) |
| }; |
| case Module['AtomicCmpxchgId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'bytes': Module['_BinaryenAtomicCmpxchgGetBytes'](expr), |
| 'offset': Module['_BinaryenAtomicCmpxchgGetOffset'](expr), |
| 'ptr': Module['_BinaryenAtomicCmpxchgGetPtr'](expr), |
| 'expected': Module['_BinaryenAtomicCmpxchgGetExpected'](expr), |
| 'replacement': Module['_BinaryenAtomicCmpxchgGetReplacement'](expr) |
| }; |
| case Module['AtomicWaitId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'ptr': Module['_BinaryenAtomicWaitGetPtr'](expr), |
| 'expected': Module['_BinaryenAtomicWaitGetExpected'](expr), |
| 'timeout': Module['_BinaryenAtomicWaitGetTimeout'](expr), |
| 'expectedType': Module['_BinaryenAtomicWaitGetExpectedType'](expr) |
| }; |
| case Module['AtomicNotifyId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'ptr': Module['_BinaryenAtomicNotifyGetPtr'](expr), |
| 'notifyCount': Module['_BinaryenAtomicNotifyGetNotifyCount'](expr) |
| }; |
| case Module['AtomicFenceId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'order': Module['_BinaryenAtomicFenceGetOrder'](expr) |
| }; |
| case Module['SIMDExtractId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'op': Module['_BinaryenSIMDExtractGetOp'](expr), |
| 'vec': Module['_BinaryenSIMDExtractGetVec'](expr), |
| 'index': Module['_BinaryenSIMDExtractGetIndex'](expr) |
| }; |
| case Module['SIMDReplaceId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'op': Module['_BinaryenSIMDReplaceGetOp'](expr), |
| 'vec': Module['_BinaryenSIMDReplaceGetVec'](expr), |
| 'index': Module['_BinaryenSIMDReplaceGetIndex'](expr), |
| 'value': Module['_BinaryenSIMDReplaceGetValue'](expr) |
| }; |
| case Module['SIMDShuffleId']: |
| return preserveStack(function() { |
| var tempBuffer = stackAlloc(16); |
| Module['_BinaryenSIMDShuffleGetMask'](expr, tempBuffer); |
| var mask = new Array(16); |
| for (var i = 0 ; i < 16; i++) { |
| mask[i] = HEAPU8[tempBuffer + i]; |
| } |
| return { |
| 'id': id, |
| 'type': type, |
| 'left': Module['_BinaryenSIMDShuffleGetLeft'](expr), |
| 'right': Module['_BinaryenSIMDShuffleGetRight'](expr), |
| 'mask': mask |
| }; |
| }); |
| case Module['SIMDBitselectId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'left': Module['_BinaryenSIMDBitselectGetLeft'](expr), |
| 'right': Module['_BinaryenSIMDBitselectGetRight'](expr), |
| 'cond': Module['_BinaryenSIMDBitselectGetCond'](expr) |
| }; |
| case Module['SIMDShiftId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'op': Module['_BinaryenSIMDShiftGetOp'](expr), |
| 'vec': Module['_BinaryenSIMDShiftGetVec'](expr), |
| 'shift': Module['_BinaryenSIMDShiftGetShift'](expr) |
| }; |
| case Module['MemoryInitId']: |
| return { |
| 'id': id, |
| 'segment': Module['_BinaryenMemoryInitGetSegment'](expr), |
| 'dest': Module['_BinaryenMemoryInitGetDest'](expr), |
| 'offset': Module['_BinaryenMemoryInitGetOffset'](expr), |
| 'size': Module['_BinaryenMemoryInitGetSize'](expr) |
| }; |
| case Module['DataDropId']: |
| return { |
| 'id': id, |
| 'segment': Module['_BinaryenDataDropGetSegment'](expr), |
| }; |
| case Module['MemoryCopyId']: |
| return { |
| 'id': id, |
| 'dest': Module['_BinaryenMemoryCopyGetDest'](expr), |
| 'source': Module['_BinaryenMemoryCopyGetSource'](expr), |
| 'size': Module['_BinaryenMemoryCopyGetSize'](expr) |
| }; |
| case Module['MemoryFillId']: |
| return { |
| 'id': id, |
| 'dest': Module['_BinaryenMemoryFillGetDest'](expr), |
| 'value': Module['_BinaryenMemoryFillGetValue'](expr), |
| 'size': Module['_BinaryenMemoryFillGetSize'](expr) |
| }; |
| case Module['TryId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'body': Module['_BinaryenTryGetBody'](expr), |
| 'catchBody': Module['_BinaryenTryGetCatchBody'](expr) |
| }; |
| case Module['ThrowId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'event': UTF8ToString(Module['_BinaryenThrowGetEvent'](expr)), |
| 'operands': getAllNested(expr, Module['_BinaryenThrowGetNumOperands'], Module['_BinaryenThrowGetOperand']) |
| }; |
| case Module['RethrowId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'exnref': Module['_BinaryenRethrowGetExnref'](expr) |
| }; |
| case Module['BrOnExnId']: |
| return { |
| 'id': id, |
| 'type': type, |
| 'name': UTF8ToString(Module['_BinaryenBrOnExnGetName'](expr)), |
| 'event': UTF8ToString(Module['_BinaryenBrOnExnGetEvent'](expr)), |
| 'exnref': Module['_BinaryenBrOnExnGetExnref'](expr) |
| }; |
| case Module['PushId']: |
| return { |
| 'id': id, |
| 'value': Module['_BinaryenPushGetValue'](expr) |
| }; |
| |
| default: |
| throw Error('unexpected id: ' + id); |
| } |
| }; |
| |
| // Obtains information about a 'FunctionType' |
| Module['getFunctionTypeInfo'] = function(func) { |
| return { |
| 'name': UTF8ToString(Module['_BinaryenFunctionTypeGetName'](func)), |
| 'params': getAllNested(func, Module['_BinaryenFunctionTypeGetNumParams'], Module['_BinaryenFunctionTypeGetParam']), |
| 'result': Module['_BinaryenFunctionTypeGetResult'](func) |
| }; |
| }; |
| |
| // Obtains information about a 'Function' |
| Module['getFunctionInfo'] = function(func) { |
| return { |
| 'name': UTF8ToString(Module['_BinaryenFunctionGetName'](func)), |
| 'module': UTF8ToString(Module['_BinaryenFunctionImportGetModule'](func)), |
| 'base': UTF8ToString(Module['_BinaryenFunctionImportGetBase'](func)), |
| 'type': UTF8ToString(Module['_BinaryenFunctionGetType'](func)), |
| 'params': getAllNested(func, Module['_BinaryenFunctionGetNumParams'], Module['_BinaryenFunctionGetParam']), |
| 'result': Module['_BinaryenFunctionGetResult'](func), |
| 'vars': getAllNested(func, Module['_BinaryenFunctionGetNumVars'], Module['_BinaryenFunctionGetVar']), |
| 'body': Module['_BinaryenFunctionGetBody'](func) |
| }; |
| }; |
| |
| // Obtains information about a 'Global' |
| Module['getGlobalInfo'] = function(global) { |
| return { |
| 'name': UTF8ToString(Module['_BinaryenGlobalGetName'](global)), |
| 'module': UTF8ToString(Module['_BinaryenGlobalImportGetModule'](global)), |
| 'base': UTF8ToString(Module['_BinaryenGlobalImportGetBase'](global)), |
| 'type': Module['_BinaryenGlobalGetType'](global), |
| 'mutable': Boolean(Module['_BinaryenGlobalIsMutable'](global)), |
| 'init': Module['_BinaryenGlobalGetInitExpr'](global) |
| }; |
| }; |
| |
| // Obtains information about a 'Event' |
| Module['getEventInfo'] = function(event_) { |
| return { |
| 'name': UTF8ToString(Module['_BinaryenEventGetName'](event_)), |
| 'module': UTF8ToString(Module['_BinaryenEventImportGetModule'](event_)), |
| 'base': UTF8ToString(Module['_BinaryenEventImportGetBase'](event_)), |
| 'attribute': Module['_BinaryenEventGetAttribute'](event_), |
| 'type': UTF8ToString(Module['_BinaryenEventGetType'](event_)) |
| }; |
| }; |
| |
| // Obtains information about an 'Export' |
| Module['getExportInfo'] = function(export_) { |
| return { |
| 'kind': Module['_BinaryenExportGetKind'](export_), |
| 'name': UTF8ToString(Module['_BinaryenExportGetName'](export_)), |
| 'value': UTF8ToString(Module['_BinaryenExportGetValue'](export_)) |
| }; |
| }; |
| |
| // Emits text format of an expression or a module |
| Module['emitText'] = function(expr) { |
| if (typeof expr === 'object') { |
| return expr.emitText(); |
| } |
| var old = out; |
| var ret = ''; |
| out = function(x) { ret += x + '\n' }; |
| Module['_BinaryenExpressionPrint'](expr); |
| out = old; |
| return ret; |
| }; |
| |
| // Parses a binary to a module |
| Module['readBinary'] = function(data) { |
| var buffer = allocate(data, 'i8', ALLOC_NORMAL); |
| var ptr = Module['_BinaryenModuleRead'](buffer, data.length); |
| _free(buffer); |
| return wrapModule(ptr); |
| }; |
| |
| // Parses text format to a module |
| Module['parseText'] = function(text) { |
| var buffer = _malloc(text.length + 1); |
| writeAsciiToMemory(text, buffer); |
| var ptr = Module['_BinaryenModuleParse'](buffer); |
| _free(buffer); |
| return wrapModule(ptr); |
| }; |
| |
| // Gets the currently set optimize level. 0, 1, 2 correspond to -O0, -O1, -O2, etc. |
| Module['getOptimizeLevel'] = function() { |
| return Module['_BinaryenGetOptimizeLevel'](); |
| }; |
| |
| // Sets the optimization level to use. 0, 1, 2 correspond to -O0, -O1, -O2, etc. |
| Module['setOptimizeLevel'] = function(level) { |
| return Module['_BinaryenSetOptimizeLevel'](level); |
| }; |
| |
| // Gets the currently set shrink level. 0, 1, 2 correspond to -O0, -Os, -Oz. |
| Module['getShrinkLevel'] = function() { |
| return Module['_BinaryenGetShrinkLevel'](); |
| }; |
| |
| // Sets the shrink level to use. 0, 1, 2 correspond to -O0, -Os, -Oz. |
| Module['setShrinkLevel'] = function(level) { |
| return Module['_BinaryenSetShrinkLevel'](level); |
| }; |
| |
| // Gets whether generating debug information is currently enabled or not. |
| Module['getDebugInfo'] = function() { |
| return Boolean(Module['_BinaryenGetDebugInfo']()); |
| }; |
| |
| // Enables or disables debug information in emitted binaries. |
| Module['setDebugInfo'] = function(on) { |
| return Module['_BinaryenSetDebugInfo'](on); |
| }; |
| |
| // Enables or disables C-API tracing |
| Module['setAPITracing'] = function(on) { |
| return Module['_BinaryenSetAPITracing'](on); |
| }; |
| |
| // Additional customizations |
| |
| Module['exit'] = function(status) { |
| // Instead of exiting silently on errors, always show an error with |
| // a stack trace, for debuggability. |
| if (status != 0) throw new Error('exiting due to error: ' + status); |
| }; |