blob: 00ccf16f6b5893ec1c8c490256a1deb61df09428 [file]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
// Default all macro to nothing
#ifndef DEF2
#define DEF2(process, op, func)
#endif
#ifndef DEF3
#define DEF3(process, op, func, y)
#endif
#ifndef DEF2_WMS
#define DEF2_WMS(process, op, func)
#endif
#ifndef DEF3_WMS
#define DEF3_WMS(process, op, func, y)
#endif
#ifndef DEF4_WMS
#define DEF4_WMS(process, op, func, y, t)
#endif
#ifndef EXDEF2
#define EXDEF2(process, op, func)
#endif
#ifndef EXDEF3
#define EXDEF3(process, op, func, y)
#endif
#ifndef EXDEF2_WMS
#define EXDEF2_WMS(process, op, func)
#endif
#ifndef EXDEF3_WMS
#define EXDEF3_WMS(process, op, func, y)
#endif
#ifndef EXDEF4_WMS
#define EXDEF4_WMS(process, op, func, y, t)
#endif
#if defined(INTERPRETER_ASMJS)
#include "InterpreterHandlerAsmJs.inl"
#else
DEF2 (FALLTHROUGH, EndSwitch, /* Common case with Br */)
DEF2 (BR, Br, OP_Br)
#ifdef BYTECODE_BRANCH_ISLAND
EXDEF2 (BRLONG, BrLong, OP_Br)
#endif
DEF3 (CUSTOM, StartCall, OP_StartCall, StartCall)
DEF2 (NOP, Nop, Empty)
DEF2_WMS(NOP, Unused, Reg1)
DEF2_WMS(IP_TARG, ProfiledLoopStart, OP_ProfiledLoopStart)
DEF2_WMS(FALLTHROUGH, LoopBodyStart, /* Common case with ProfiledLoopBodyStart */)
DEF2_WMS(IP_TARG, ProfiledLoopBodyStart, OP_ProfiledLoopBodyStart)
DEF2_WMS(IP_TARG, ProfiledLoopEnd, OP_ProfiledLoopEnd)
DEF2_WMS(BRCMem, BrEq_A, JavascriptOperators::Equal)
DEF2_WMS(BRCMem, BrGt_A, JavascriptOperators::Greater)
DEF2_WMS(BRCMem, BrGe_A, JavascriptOperators::GreaterEqual)
DEF2_WMS(BRCMem, BrLt_A, JavascriptOperators::Less)
DEF2_WMS(BRCMem, BrLe_A, JavascriptOperators::LessEqual)
DEF2_WMS(BRCMem, BrNeq_A, JavascriptOperators::NotEqual)
DEF2_WMS(BRBMem_ALLOW_STACK, BrFalse_A, OP_BrFalse_A)
DEF2_WMS(BRBMem_ALLOW_STACK, BrTrue_A, OP_BrTrue_A)
DEF2_WMS(BRB_ALLOW_STACK, BrOnObject_A, JavascriptOperators::IsObject)
DEF2_WMS(BRB, BrNotNull_A, OP_BrNotNull_A)
//Not emitted for byte code, keep it here for completeness
//EXDEF2_WMS(BRB, BrUndecl_A, OP_BrUndecl_A)
EXDEF2_WMS(BRB, BrNotUndecl_A, OP_BrNotUndecl_A)
DEF2_WMS(FALLTHROUGH, Case, /* Common case with BrSrEq_A */)
DEF2_WMS(BRCMem, BrSrEq_A, JavascriptOperators::StrictEqual)
DEF2_WMS(BRCMem, BrSrNeq_A, JavascriptOperators::NotStrictEqual)
//Not emitted for byte code, keep it here for completeness
//DEF2 (BRS, BrHasSideEffects, JavascriptOperators::OP_BrHasSideEffects)
DEF2 (BRS, BrNotHasSideEffects, JavascriptOperators::OP_BrNotHasSideEffects)
EXDEF2 (BRPROP, BrOnHasProperty, OP_BrOnHasProperty)
DEF2 (BRPROP, BrOnNoProperty, OP_BrOnNoProperty)
DEF2 (BRLOCALPROP, BrOnNoLocalProperty, OP_BrOnNoProperty)
DEF2 (BRENVPROP, BrOnNoEnvProperty, OP_BrOnNoEnvProperty)
DEF2_WMS(BRBS, BrFncNeqApply, JavascriptOperators::OP_BrFncNeqApply)
//Not emitted for byte code, keep it here for completeness
//DEF2_WMS(BRBS, BrFncEqApply, JavascriptOperators::OP_BrFncEqApply)
DEF3_WMS(CALL_FLAGS_None, CallI, OP_CallI, CallI)
DEF3_WMS(CALL_FLAGS_None, CallIExtended, OP_CallIExtended, CallIExtended)
DEF3_WMS(CALL_FLAGS_None, CallIExtendedFlags, OP_CallIExtendedFlags, CallIExtendedFlags)
DEF3_WMS(CALL_FLAGS_None, CallIFlags, OP_CallIFlags, CallIFlags)
DEF3_WMS(CALL_FLAGS_None, ProfiledCallI, PROFILEDOP(OP_ProfiledCallI, OP_CallI), ProfiledCallI)
DEF3_WMS(CALL_FLAGS_None, ProfiledCallIExtended, PROFILEDOP(OP_ProfiledCallIExtended, OP_CallIExtended), ProfiledCallIExtended)
DEF3_WMS(CALL_FLAGS_None, ProfiledCallIExtendedFlags, PROFILEDOP(OP_ProfiledCallIExtendedFlags, OP_CallIExtendedFlags), ProfiledCallIExtendedFlags)
DEF3_WMS(CALL_FLAGS_None, ProfiledCallIWithICIndex, PROFILEDOP(OP_ProfiledCallIWithICIndex, OP_CallI), ProfiledCallIWithICIndex)
DEF3_WMS(CALL_FLAGS_Value, ProfiledCallIExtendedWithICIndex, PROFILEDOP(OP_ProfiledCallIExtendedWithICIndex, OP_CallIExtended), ProfiledCallIExtendedWithICIndex)
DEF3_WMS(CALL_FLAGS_None, ProfiledCallIExtendedFlagsWithICIndex, PROFILEDOP(OP_ProfiledCallIExtendedFlagsWithICIndex, OP_CallIExtendedFlags), ProfiledCallIExtendedFlagsWithICIndex)
DEF3_WMS(CALL_FLAGS_None, ProfiledCallIFlagsWithICIndex, PROFILEDOP(OP_ProfiledCallIFlags, OP_CallIFlags), ProfiledCallIFlagsWithICIndex)
DEF3_WMS(CALL_FLAGS_None, ProfiledCallIFlags, PROFILEDOP(OP_ProfiledCallIFlags, OP_CallIFlags), ProfiledCallIFlags)
DEF3_WMS(CALL_FLAGS_None, ProfiledReturnTypeCallI, PROFILEDOP(OP_ProfiledReturnTypeCallI, OP_CallI), ProfiledCallI)
DEF3_WMS(CALL_FLAGS_None, ProfiledReturnTypeCallIExtended, PROFILEDOP(OP_ProfiledReturnTypeCallIExtended, OP_CallIExtended), ProfiledCallIExtended)
DEF3_WMS(CALL_FLAGS_None, ProfiledReturnTypeCallIExtendedFlags, PROFILEDOP(OP_ProfiledReturnTypeCallIExtendedFlags, OP_CallIExtendedFlags), ProfiledCallIExtendedFlags)
DEF3_WMS(CALL_FLAGS_None, ProfiledReturnTypeCallIFlags, PROFILEDOP(OP_ProfiledReturnTypeCallIFlags, OP_CallIFlags), ProfiledCallIFlags)
EXDEF2_WMS(A1toA1Mem, Conv_Str, JavascriptConversion::ToString)
DEF2_WMS(A1toA1Mem, Conv_Obj, JavascriptOperators::ToObject)
EXDEF2_WMS(A1toA1Mem, NewWithObject, JavascriptOperators::ToWithObject)
DEF2_WMS(A1toA1Mem, Conv_Num, JavascriptOperators::ToNumber)
DEF2_WMS(A1toA1Mem, Incr_A, JavascriptMath::Increment)
DEF2_WMS(A1toA1Mem, Decr_A, JavascriptMath::Decrement)
DEF2_WMS(A1toA1Mem, Neg_A, JavascriptMath::Negate)
DEF2_WMS(A1toA1Mem, Not_A, JavascriptMath::Not)
DEF2_WMS(A1toA1Mem, Typeof, JavascriptOperators::Typeof)
DEF2_WMS(A1toA1Mem, Delete_A, JavascriptOperators::Delete)
DEF2_WMS(GET_ELEM_IMem, TypeofElem, JavascriptOperators::TypeofElem)
DEF2_WMS(A3toA1Mem, Concat3, JavascriptOperators::Concat3)
DEF2_WMS(A2I1toA1Mem, NewConcatStrMulti, JavascriptOperators::NewConcatStrMulti)
DEF2_WMS(A2I1toXXMem, SetConcatStrMultiItem, JavascriptOperators::SetConcatStrMultiItem)
DEF2_WMS(A3I1toXXMem, SetConcatStrMultiItem2, JavascriptOperators::SetConcatStrMultiItem2)
DEF2_WMS(A2toA1Mem, Add_A, JavascriptMath::Add)
DEF2_WMS(A2toA1Mem, Div_A, JavascriptMath::Divide)
DEF2_WMS(A2toA1MemProfiled, ProfiledDiv_A, PROFILEDOP(ProfiledDivide<true>, ProfiledDivide<false>))
DEF2_WMS(A2toA1Mem, Mul_A, JavascriptMath::Multiply)
DEF2_WMS(A2toA1Mem, Expo_A, JavascriptMath::Exponentiation)
DEF2_WMS(A2toA1Mem, Rem_A, JavascriptMath::Modulus)
DEF2_WMS(A2toA1MemProfiled, ProfiledRem_A, PROFILEDOP(ProfileModulus<true>, ProfileModulus<false>))
DEF2_WMS(A2toA1Mem, Sub_A, JavascriptMath::Subtract)
DEF2_WMS(A2toA1Mem, And_A, JavascriptMath::And)
DEF2_WMS(A2toA1Mem, Or_A, JavascriptMath::Or)
DEF2_WMS(A2toA1Mem, Xor_A, JavascriptMath::Xor)
DEF2_WMS(A2toA1Mem, Shl_A, JavascriptMath::ShiftLeft)
DEF2_WMS(A2toA1Mem, Shr_A, JavascriptMath::ShiftRight)
DEF2_WMS(A2toA1Mem, ShrU_A, JavascriptMath::ShiftRightU)
DEF2_WMS(CMMem, CmEq_A, JavascriptOperators::Equal)
DEF2_WMS(CMMem, CmGt_A, JavascriptOperators::Greater)
DEF2_WMS(CMMem, CmGe_A, JavascriptOperators::GreaterEqual)
DEF2_WMS(CMMem, CmLt_A, JavascriptOperators::Less)
DEF2_WMS(CMMem, CmLe_A, JavascriptOperators::LessEqual)
DEF2_WMS(CMMem, CmNeq_A, JavascriptOperators::NotEqual)
DEF2_WMS(CMMem, CmSrEq_A, JavascriptOperators::StrictEqual)
DEF2_WMS(CMMem, CmSrNeq_A, JavascriptOperators::NotStrictEqual)
DEF2_WMS(FALLTHROUGH, BeginSwitch, /* Common case with Ld_A */)
DEF2_WMS(FALLTHROUGH, InitConst, /* Common case with Ld_A */)
DEF2_WMS(A1toA1_ALLOW_STACK, Ld_A, OP_Ld_A)
DEF2_WMS(INNERtoA1, LdInnerScope, OP_Ld_A)
DEF2_WMS(XXtoA1, LdLocalObj, OP_LdLocalObj)
EXDEF2_WMS(XXtoA1, LdParamObj, OP_LdParamObj)
EXDEF2_WMS(A1toA1_ALLOW_STACK, UnwrapWithObj, JavascriptOperators::OP_UnwrapWithObj)
EXDEF2_WMS(A2toXX, SetComputedNameVar, JavascriptOperators::OP_SetComputedNameVar)
DEF2_WMS(A1toXX_ALLOW_STACK, ChkUndecl, OP_ChkUndecl)
DEF2_WMS(XXtoA1, InitUndecl, OP_InitUndecl)
DEF2_WMS(ELEM_RtU_to_XX, EnsureNoRootFld, OP_EnsureNoRootProperty)
DEF2_WMS(ELEM_RtU_to_XX, EnsureNoRootRedeclFld, OP_EnsureNoRootRedeclProperty)
DEF2_WMS(ELEM_C2_to_XX, ScopedEnsureNoRedeclFld, OP_ScopedEnsureNoRedeclProperty)
DEF2_WMS(A1toA1Profiled, ProfiledBeginSwitch, PROFILEDOP(ProfiledSwitch<true>, ProfiledSwitch<false>))
DEF2_WMS(XXtoA1Mem, LdC_A_Null, JavascriptOperators::OP_LdNull)
DEF2_WMS(XXtoA1, ArgIn0, OP_ArgIn0)
DEF2_WMS(CUSTOM_ArgNoSrc, ArgOut_Env, OP_ArgOut_Env)
#if DBG
DEF2_WMS(CUSTOM_L_Arg, ArgOut_ANonVar, OP_ArgOut_ANonVar)
#else
DEF2_WMS(FALLTHROUGH, ArgOut_ANonVar, /* Common case with ArgOUt_A in fre build */)
#endif
DEF2_WMS(CUSTOM_L_Arg, ArgOut_A, OP_ArgOut_A)
DEF3_WMS(CUSTOM_L_Arg2, ProfiledArgOut_A, PROFILEDOP(OP_ProfiledArgOut_A, OP_ArgOut_A), ProfiledArg)
DEF3_WMS(CUSTOM_L_Value, LdFld, OP_GetProperty, ElementCP)
DEF3_WMS(CUSTOM_L_Value, LdLocalFld, OP_GetLocalProperty, ElementP)
EXDEF3_WMS(CUSTOM_L_Value, LdSuperFld, OP_GetSuperProperty, ElementC2)
DEF3_WMS(CUSTOM_L_Value, LdFldForTypeOf, OP_GetPropertyForTypeOf, ElementCP)
EXDEF3_WMS(CUSTOM_L_Value, LdRootFldForTypeOf, OP_GetRootPropertyForTypeOf, ElementRootCP)
DEF3_WMS(CUSTOM_L_Value, LdFldForCallApplyTarget, OP_GetProperty, ElementCP)
DEF3_WMS(CUSTOM_L_Value, ProfiledLdFld, PROFILEDOP(OP_ProfiledGetProperty, OP_GetProperty), ElementCP)
DEF3_WMS(CUSTOM_L_Value, ProfiledLdLocalFld, PROFILEDOP(OP_ProfiledGetLocalProperty, OP_GetLocalProperty), ElementP)
EXDEF3_WMS(CUSTOM_L_Value, ProfiledLdSuperFld, PROFILEDOP(OP_ProfiledGetSuperProperty, OP_GetSuperProperty), ElementC2)
DEF3_WMS(CUSTOM_L_Value, ProfiledLdFldForTypeOf, PROFILEDOP(OP_ProfiledGetPropertyForTypeOf, OP_GetPropertyForTypeOf), ElementCP)
EXDEF3_WMS(CUSTOM_L_Value, ProfiledLdRootFldForTypeOf, PROFILEDOP(OP_ProfiledGetRootPropertyForTypeOf, OP_GetRootPropertyForTypeOf), ElementRootCP)
DEF3_WMS(CUSTOM_L_Value, ProfiledLdFldForCallApplyTarget,PROFILEDOP(OP_ProfiledGetPropertyCallApplyTarget, OP_GetProperty), ElementCP)
DEF3_WMS(CUSTOM_L_Value, LdRootFld, OP_GetRootProperty, ElementRootCP)
DEF3_WMS(CUSTOM_L_Value, ProfiledLdRootFld, PROFILEDOP(OP_ProfiledGetRootProperty, OP_GetRootProperty), ElementRootCP)
DEF3_WMS(CUSTOM_L_Value, LdMethodFld, OP_GetMethodProperty, ElementCP)
DEF3_WMS(CUSTOM_L_Value, ProfiledLdMethodFld, PROFILEDOP(OP_ProfiledGetMethodProperty, OP_GetMethodProperty), ElementCP)
EXDEF3_WMS(CUSTOM_L_Value, LdLocalMethodFld, OP_GetLocalMethodProperty, ElementP)
EXDEF3_WMS(CUSTOM_L_Value, ProfiledLdLocalMethodFld, PROFILEDOP(OP_ProfiledGetLocalMethodProperty, OP_GetLocalMethodProperty), ElementP)
DEF3_WMS(CUSTOM_L_Value, LdRootMethodFld, OP_GetRootMethodProperty, ElementRootCP)
DEF3_WMS(CUSTOM_L_Value, ProfiledLdRootMethodFld, PROFILEDOP(OP_ProfiledGetRootMethodProperty, OP_GetRootMethodProperty), ElementRootCP)
DEF3_WMS(CUSTOM_L_Value, DeleteFld, OP_DeleteFld, ElementC)
EXDEF3_WMS(CUSTOM_L_Value, DeleteLocalFld, OP_DeleteLocalFld, ElementU)
DEF3_WMS(CUSTOM_L_Value, DeleteRootFld, OP_DeleteRootFld, ElementC)
DEF3_WMS(CUSTOM_L_Value, DeleteFldStrict, OP_DeleteFldStrict, ElementC)
DEF3_WMS(CUSTOM_L_Value, DeleteRootFldStrict, OP_DeleteRootFldStrict, ElementC)
DEF3_WMS(CUSTOM, StFld, OP_SetProperty, ElementCP)
DEF3_WMS(CUSTOM, StLocalFld, OP_SetLocalProperty, ElementP)
EXDEF3_WMS(CUSTOM_L_Value, StSuperFld, OP_SetSuperProperty, ElementC2)
DEF3_WMS(CUSTOM, ProfiledStFld, PROFILEDOP(OP_ProfiledSetProperty, OP_SetProperty), ElementCP)
DEF3_WMS(CUSTOM, ProfiledStLocalFld, PROFILEDOP(OP_ProfiledSetLocalProperty, OP_SetLocalProperty), ElementP)
EXDEF3_WMS(CUSTOM_L_Value, ProfiledStSuperFld, PROFILEDOP(OP_ProfiledSetSuperProperty, OP_SetSuperProperty), ElementC2)
DEF3_WMS(CUSTOM, StRootFld, OP_SetRootProperty, ElementRootCP)
DEF3_WMS(CUSTOM, ProfiledStRootFld, PROFILEDOP(OP_ProfiledSetRootProperty, OP_SetRootProperty), ElementRootCP)
DEF3_WMS(CUSTOM, StFldStrict, OP_SetPropertyStrict, ElementCP)
DEF3_WMS(CUSTOM, ProfiledStFldStrict, PROFILEDOP(OP_ProfiledSetPropertyStrict, OP_SetPropertyStrict), ElementCP)
DEF3_WMS(CUSTOM, StRootFldStrict, OP_SetRootPropertyStrict, ElementRootCP)
DEF3_WMS(CUSTOM, ProfiledStRootFldStrict, PROFILEDOP(OP_ProfiledSetRootPropertyStrict, OP_SetRootPropertyStrict), ElementRootCP)
DEF3_WMS(CUSTOM, InitFld, OP_InitProperty, ElementCP)
DEF3_WMS(CUSTOM, ProfiledInitFld, PROFILEDOP(OP_ProfiledInitProperty, OP_InitProperty), ElementCP)
DEF3_WMS(CUSTOM, InitLocalFld, OP_InitLocalProperty, ElementP)
DEF3_WMS(CUSTOM, ProfiledInitLocalFld, PROFILEDOP(OP_ProfiledInitLocalProperty, OP_InitLocalProperty), ElementP)
DEF3_WMS(CUSTOM, InitRootFld, OP_InitRootProperty, ElementRootCP)
DEF3_WMS(CUSTOM, ProfiledInitRootFld, PROFILEDOP(OP_ProfiledInitRootProperty, OP_InitRootProperty), ElementRootCP)
DEF3_WMS(CUSTOM, InitUndeclLetFld, OP_InitUndeclLetProperty, ElementPIndexed)
EXDEF3_WMS(CUSTOM, InitUndeclLocalLetFld, OP_InitUndeclLocalLetProperty, ElementP)
DEF3_WMS(CUSTOM, InitUndeclConstFld, OP_InitUndeclConstProperty, ElementPIndexed)
EXDEF3_WMS(CUSTOM, InitUndeclLocalConstFld, OP_InitUndeclLocalConstProperty, ElementP)
DEF3_WMS(CUSTOM, InitLetFld, OP_InitLetFld, ElementCP)
EXDEF3_WMS(CUSTOM, InitLocalLetFld, OP_InitLocalLetFld, ElementP)
EXDEF3_WMS(CUSTOM, InitInnerFld, OP_InitInnerFld, ElementPIndexed)
EXDEF3_WMS(CUSTOM, InitInnerLetFld, OP_InitInnerLetFld, ElementPIndexed)
DEF3_WMS(CUSTOM, InitRootLetFld, OP_InitRootLetFld, ElementRootCP)
DEF3_WMS(CUSTOM, InitConstFld, OP_InitConstFld, ElementCP)
DEF3_WMS(CUSTOM, InitRootConstFld, OP_InitRootConstFld, ElementRootCP)
DEF2_WMS(ELEM_RtU_to_XX, InitUndeclRootLetFld, OP_InitUndeclRootLetProperty)
DEF2_WMS(ELEM_RtU_to_XX, InitUndeclRootConstFld, OP_InitUndeclRootConstProperty)
EXDEF3_WMS(CUSTOM, InitUndeclConsoleLetFld, OP_InitUndeclConsoleLetProperty, ElementScopedU)
EXDEF3_WMS(CUSTOM, InitUndeclConsoleConstFld, OP_InitUndeclConsoleConstProperty, ElementScopedU)
DEF3_WMS(CUSTOM, InitClassMember, OP_InitClassMember, ElementCP)
EXDEF3_WMS(CUSTOM, InitClassMemberComputedName,OP_InitClassMemberComputedName, ElementI)
EXDEF3_WMS(CUSTOM, InitClassMemberSet, OP_InitClassMemberSet, ElementC)
EXDEF3_WMS(CUSTOM, InitClassMemberGetComputedName, OP_InitClassMemberGetComputedName, ElementI)
EXDEF3_WMS(CUSTOM, InitClassMemberGet, OP_InitClassMemberGet, ElementC)
EXDEF3_WMS(CUSTOM, InitClassMemberSetComputedName, OP_InitClassMemberSetComputedName, ElementI)
EXDEF2_WMS(BRB, BrOnClassConstructor, OP_BrOnClassConstructor)
EXDEF2_WMS(BRB, BrOnBaseConstructorKind, OP_BrOnBaseConstructorKind)
DEF3_WMS(GET_ELEM_LOCALSLOTNonVar,LdLocalSlot, OP_LdSlot, ElementSlotI1)
EXDEF3_WMS(GET_ELEM_PARAMSLOTNonVar,LdParamSlot, OP_LdSlot, ElementSlotI1)
DEF3_WMS(GET_ELEM_INNERSLOTNonVar,LdInnerSlot, OP_LdInnerSlot, ElementSlotI2)
EXDEF3_WMS(GET_ELEM_INNERSLOTNonVar,LdInnerObjSlot, OP_LdInnerObjSlot, ElementSlotI2)
DEF3_WMS(GET_ELEM_ENVSLOTNonVar, LdEnvSlot, OP_LdEnvSlot, ElementSlotI2)
DEF3_WMS(GET_ELEM_ENVSLOTNonVar, LdEnvObj, OP_LdEnvObj, ElementSlotI1)
EXDEF3_WMS(GET_ELEM_ENVSLOTNonVar, LdEnvObjSlot, OP_LdEnvObjSlot, ElementSlotI2)
EXDEF3_WMS(GET_ELEM_ENVSLOTNonVar, LdModuleSlot, OP_LdModuleSlot, ElementSlotI2)
EXDEF2_WMS(SET_ELEM_ENVSLOTNonVar, StModuleSlot, OP_StModuleSlot)
DEF3_WMS(GET_ELEM_SLOTNonVar, ProfiledLdSlot, PROFILEDOP(OP_ProfiledLdSlot, OP_LdSlot), ProfiledElementSlot)
DEF3_WMS(GET_ELEM_INNERSLOTNonVar,ProfiledLdInnerSlot, PROFILEDOP(OP_ProfiledLdInnerSlot, OP_LdInnerSlot), ProfiledElementSlotI2)
EXDEF3_WMS(GET_ELEM_INNERSLOTNonVar,ProfiledLdInnerObjSlot, PROFILEDOP(OP_ProfiledLdInnerObjSlot, OP_LdInnerObjSlot), ProfiledElementSlotI2)
DEF3_WMS(GET_ELEM_LOCALSLOTNonVar,ProfiledLdLocalSlot, PROFILEDOP(OP_ProfiledLdSlot, OP_LdSlot), ProfiledElementSlotI1)
EXDEF3_WMS(GET_ELEM_PARAMSLOTNonVar,ProfiledLdParamSlot, PROFILEDOP(OP_ProfiledLdSlot, OP_LdSlot), ProfiledElementSlotI1)
DEF3_WMS(GET_ELEM_ENVSLOTNonVar, ProfiledLdEnvSlot, PROFILEDOP(OP_ProfiledLdEnvSlot, OP_LdEnvSlot), ProfiledElementSlotI2)
EXDEF3_WMS(GET_ELEM_ENVSLOTNonVar, ProfiledLdEnvObjSlot, PROFILEDOP(OP_ProfiledLdEnvObjSlot, OP_LdEnvObjSlot), ProfiledElementSlotI2)
EXDEF3_WMS(GET_ELEM_SLOTNonVar, LdObjSlot, OP_LdObjSlot, ElementSlot)
EXDEF3_WMS(GET_ELEM_SLOTNonVar, ProfiledLdObjSlot, PROFILEDOP(OP_ProfiledLdObjSlot, OP_LdObjSlot), ProfiledElementSlot)
EXDEF3_WMS(GET_ELEM_LOCALSLOTNonVar,LdLocalObjSlot, OP_LdObjSlot, ElementSlotI1)
EXDEF3_WMS(GET_ELEM_PARAMSLOTNonVar,LdParamObjSlot, OP_LdObjSlot, ElementSlotI1)
EXDEF3_WMS(GET_ELEM_LOCALSLOTNonVar,ProfiledLdLocalObjSlot, PROFILEDOP(OP_ProfiledLdObjSlot, OP_LdObjSlot), ProfiledElementSlotI1)
EXDEF3_WMS(GET_ELEM_PARAMSLOTNonVar,ProfiledLdParamObjSlot, PROFILEDOP(OP_ProfiledLdObjSlot, OP_LdObjSlot), ProfiledElementSlotI1)
DEF2_WMS(SET_ELEM_LOCALSLOTNonVar,StLocalSlot, OP_StSlot)
EXDEF2_WMS(SET_ELEM_PARAMSLOTNonVar,StParamSlot, OP_StSlot)
EXDEF2_WMS(SET_ELEM_LOCALSLOTNonVar,StLocalSlotChkUndecl, OP_StSlotChkUndecl)
EXDEF2_WMS(SET_ELEM_PARAMSLOTNonVar,StParamSlotChkUndecl, OP_StSlotChkUndecl)
DEF2_WMS(SET_ELEM_INNERSLOTNonVar,StInnerSlot, OP_StSlot)
EXDEF2_WMS(SET_ELEM_INNERSLOTNonVar,StInnerSlotChkUndecl, OP_StSlotChkUndecl)
EXDEF2_WMS(SET_ELEM_INNERSLOTNonVar,StInnerObjSlot, OP_StObjSlot)
EXDEF2_WMS(SET_ELEM_INNERSLOTNonVar,StInnerObjSlotChkUndecl, OP_StObjSlotChkUndecl)
DEF2_WMS(SET_ELEM_ENVSLOTNonVar, StEnvSlot, OP_StEnvSlot)
EXDEF2_WMS(SET_ELEM_ENVSLOTNonVar, StEnvSlotChkUndecl, OP_StEnvSlotChkUndecl)
EXDEF2_WMS(SET_ELEM_SLOTNonVar, StObjSlot, OP_StObjSlot)
EXDEF2_WMS(SET_ELEM_LOCALSLOTNonVar,StLocalObjSlot, OP_StObjSlot)
EXDEF2_WMS(SET_ELEM_PARAMSLOTNonVar,StParamObjSlot, OP_StObjSlot)
EXDEF2_WMS(SET_ELEM_LOCALSLOTNonVar,StLocalObjSlotChkUndecl, OP_StObjSlotChkUndecl)
EXDEF2_WMS(SET_ELEM_PARAMSLOTNonVar,StParamObjSlotChkUndecl, OP_StObjSlotChkUndecl)
EXDEF2_WMS(SET_ELEM_ENVSLOTNonVar, StEnvObjSlot, OP_StEnvObjSlot)
EXDEF2_WMS(SET_ELEM_SLOTNonVar, StObjSlotChkUndecl, OP_StObjSlotChkUndecl)
EXDEF2_WMS(SET_ELEM_ENVSLOTNonVar, StEnvObjSlotChkUndecl, OP_StEnvObjSlotChkUndecl)
DEF3_WMS(CUSTOM_L_Value, LdElemI_A, OP_GetElementI, ElementI)
DEF3_WMS(CUSTOM_L_Value, ProfiledLdElemI_A, PROFILEDOP(OP_ProfiledGetElementI, OP_GetElementI), ProfiledElementI)
DEF2_WMS(GET_ELEM_IMem, LdMethodElem, JavascriptOperators::OP_GetMethodElement)
DEF3_WMS(CUSTOM, StElemI_A, OP_SetElementI, ElementI)
DEF3_WMS(CUSTOM, StElemI_A_Strict, OP_SetElementIStrict, ElementI)
DEF3_WMS(CUSTOM_L_Value, ProfiledStElemI_A, PROFILEDOP(OP_ProfiledSetElementI, OP_SetElementI), ProfiledElementI)
DEF3_WMS(CUSTOM_L_Value, ProfiledStElemI_A_Strict, PROFILEDOP(OP_ProfiledSetElementIStrict, OP_SetElementIStrict), ProfiledElementI)
DEF3_WMS(CUSTOM, StArrItemI_CI4, OP_SetArrayItemI_CI4, ElementUnsigned1)
DEF2_WMS(FALLTHROUGH, StArrInlineItem_CI4, /*Common case with StArrItemC_CI4 */)
DEF3_WMS(CUSTOM, StArrItemC_CI4, OP_SetArrayItemC_CI4, ElementUnsigned1)
DEF3_WMS(CUSTOM_L_R0, LdArrHead, OP_LdArrayHeadSegment, Reg2)
DEF3_WMS(CUSTOM, StArrSegItem_CI4, OP_SetArraySegmentItem_CI4, ElementUnsigned1)
DEF3 (CUSTOM, StArrSegItem_A, OP_SetArraySegmentVars, Auxiliary)
DEF3_WMS(CALL, NewScObject, OP_NewScObject, CallI)
DEF3_WMS(CUSTOM_L_R0, NewScObjectNoCtorFull, OP_NewScObjectNoCtorFull, Reg2)
EXDEF2_WMS(A1toA1Mem, LdCustomSpreadIteratorList, JavascriptOperators::OP_LdCustomSpreadIteratorList)
EXDEF3_WMS(CALL, NewScObjectSpread, OP_NewScObjectSpread, CallIExtended)
DEF3_WMS(CALL, NewScObjArray, OP_NewScObjArray, CallI)
DEF3_WMS(CALL, NewScObjArraySpread, OP_NewScObjArraySpread, CallIExtended)
DEF3_WMS(CALL, ProfiledNewScObject, PROFILEDOP(OP_ProfiledNewScObject, OP_NewScObject), ProfiledCallI)
EXDEF3_WMS(CALL, ProfiledNewScObjectSpread, PROFILEDOP(OP_ProfiledNewScObjectSpread, OP_NewScObjectSpread), ProfiledCallIExtended)
DEF3_WMS(CALL, ProfiledNewScObjectWithICIndex, PROFILEDOP(OP_ProfiledNewScObjectWithICIndex, OP_NewScObject), ProfiledCallIWithICIndex)
DEF3_WMS(CALL, ProfiledNewScObjArray, PROFILEDOP(OP_ProfiledNewScObjArray, OP_ProfiledNewScObjArray_NoProfile), Profiled2CallI)
DEF3_WMS(CALL, ProfiledNewScObjArraySpread,PROFILEDOP(OP_ProfiledNewScObjArraySpread, OP_ProfiledNewScObjArraySpread_NoProfile), Profiled2CallIExtended)
DEF2_WMS(XXtoA1NonVar, LdArgCnt, OP_LdArgCnt)
DEF3_WMS(CUSTOM_L_R0, LdLen_A, OP_LdLen, Reg2)
DEF3_WMS(CUSTOM_L_R0, ProfiledLdLen_A, PROFILEDOP(OP_ProfiledLdLen, OP_LdLen), ProfiledReg2)
DEF2_WMS(XXtoA1Mem, LdUndef, JavascriptOperators::OP_LdUndef)
DEF2_WMS(XXtoA1Mem, LdNaN, JavascriptOperators::OP_LdNaN)
DEF2_WMS(XXtoA1Mem, LdInfinity, JavascriptOperators::OP_LdInfinity)
DEF2_WMS(XXtoA1Mem, LdTrue, JavascriptBoolean::OP_LdTrue)
DEF2_WMS(XXtoA1Mem, LdFalse, JavascriptBoolean::OP_LdFalse)
EXDEF2_WMS(XXtoA1Mem, LdChakraLib, JavascriptOperators::OP_LdChakraLib)
DEF2_WMS(A1I1toA1Mem, LdThis, JavascriptOperators::OP_GetThisNoFastPath)
EXDEF2_WMS(XXtoA1Mem, LdHomeObj, OP_LdHomeObj)
EXDEF2_WMS(XXtoA1Mem, LdFuncObj, OP_LdFuncObj)
EXDEF2_WMS(XXtoA1Mem, ScopedLdHomeObj, OP_ScopedLdHomeObj)
EXDEF2_WMS(XXtoA1Mem, ScopedLdFuncObj, OP_ScopedLdFuncObj)
EXDEF2_WMS(A1toA1Mem, LdHomeObjProto, JavascriptOperators::OP_LdHomeObjProto)
EXDEF2_WMS(A1toA1Mem, LdFuncObjProto, JavascriptOperators::OP_LdFuncObjProto)
EXDEF2_WMS(A1toA1Mem, ImportCall, OP_ImportCall)
EXDEF2_WMS(A2toXX, SetHomeObj, JavascriptOperators::OP_SetHomeObj)
DEF2_WMS(A1toA1Mem, StrictLdThis, JavascriptOperators::OP_StrictGetThis)
DEF2_WMS(A1I1toA1Mem, ProfiledLdThis, PROFILEDOP(OP_ProfiledLdThis, JavascriptOperators::OP_GetThisNoFastPath))
DEF2_WMS(A1toA1Mem, ProfiledStrictLdThis, PROFILEDOP(OP_ProfiledStrictLdThis, JavascriptOperators::OP_StrictGetThis))
DEF2_WMS(XXtoA1Mem, LdHeapArgsCached, OP_LdHeapArgsCached)
EXDEF2_WMS(XXtoA1Mem, LdLetHeapArgsCached, OP_LdLetHeapArgsCached)
EXDEF2_WMS(XXtoA1NonVar, LdStackArgPtr, OP_LdStackArgPtr)
EXDEF3_WMS(CUSTOM, InitSetFld, OP_InitSetFld, ElementC)
EXDEF3_WMS(CUSTOM, InitGetFld, OP_InitGetFld, ElementC)
EXDEF3_WMS(CUSTOM, InitSetElemI, OP_InitSetElemI, ElementI)
EXDEF3_WMS(CUSTOM, InitGetElemI, OP_InitGetElemI, ElementI)
EXDEF3_WMS(CUSTOM, InitComputedProperty, OP_InitComputedProperty, ElementI)
EXDEF3_WMS(CUSTOM, InitProto, OP_InitProto, ElementC)
DEF3_WMS(CUSTOM, LdElemUndefScoped, OP_LdElementUndefinedScoped, ElementScopedU)
DEF3_WMS(CUSTOM_L_R0, LdFuncExpr, OP_LdFunctionExpression, Reg1)
DEF3_WMS(CUSTOM, StFuncExpr, OP_StFunctionExpression, ElementC)
DEF3_WMS(CUSTOM, StLocalFuncExpr, OP_StLocalFunctionExpression, ElementU)
EXDEF3_WMS(CUSTOM_L_R0, LdNewTarget, OP_LdNewTarget, Reg1)
EXDEF2 (EMPTY, ChkNewCallFlag, OP_ChkNewCallFlag)
DEF2_WMS(U1toINNERMemNonVar, NewBlockScope, JavascriptOperators::OP_NewBlockScope)
DEF3_WMS(CUSTOM, CloneBlockScope, OP_CloneBlockScope, Unsigned1)
DEF2_WMS(U1toINNERMemNonVar, NewPseudoScope, JavascriptOperators::OP_NewPseudoScope)
DEF3_WMS(CUSTOM_L_Value, NewStackScFunc, OP_NewStackScFunc, ElementSlotI1)
DEF2_WMS(GET_SLOT_FB, NewScFunc, ScriptFunction::OP_NewScFunc)
DEF2_WMS(GET_SLOT_FB, NewScGenFunc, JavascriptGeneratorFunction::OP_NewScGenFunc)
EXDEF3_WMS(CUSTOM_L_Value, NewInnerStackScFunc, OP_NewInnerStackScFunc, ElementSlot)
EXDEF2_WMS(GET_ELEM_SLOT_FB, NewInnerScFunc, ScriptFunction::OP_NewScFunc)
EXDEF2_WMS(GET_ELEM_SLOT_FB, NewInnerScGenFunc, JavascriptGeneratorFunction::OP_NewScGenFunc)
DEF2_WMS(A1U1toXX, InitForInEnumerator, OP_InitForInEnumerator)
DEF2_WMS(A1U1toXXWithCache, ProfiledInitForInEnumerator,OP_InitForInEnumeratorWithCache)
DEF2_WMS(A1toXXMem, Throw, JavascriptExceptionOperators::OP_Throw)
DEF2_WMS(XXtoA1NonVar, LdArgumentsFromFrame, OP_LdArgumentsFromFrame)
DEF2_WMS(XXtoA1Mem, LdHeapArguments, OP_LdHeapArguments)
DEF2_WMS(XXtoA1Mem, LdLetHeapArguments, OP_LdLetHeapArguments)
DEF2_WMS(A2toA1MemNonVar, LdInnerFrameDisplay, OP_LdInnerFrameDisplay)
DEF2_WMS(A1toA1MemNonVar, LdInnerFrameDisplayNoParent,OP_LdInnerFrameDisplayNoParent)
DEF2_WMS(A1INNERtoA1MemNonVar, LdIndexedFrameDisplay, OP_LdFrameDisplay)
DEF2_WMS(XXINNERtoA1MemNonVar, LdIndexedFrameDisplayNoParent,OP_LdFrameDisplayNoParent<true>)
DEF2_WMS(A2toXXMemNonVar, LdFuncExprFrameDisplay, OP_LdFuncExprFrameDisplaySetLocal)
DEF3_WMS(CUSTOM_L_R0, IsInst, OP_IsInst, Reg3C)
DEF2_WMS(A2toA1Mem, IsIn, JavascriptOperators::IsIn)
DEF3_WMS(CUSTOM_L_Value, ScopedLdFld, OP_GetPropertyScoped, ElementP)
EXDEF3_WMS(CUSTOM_L_Value, ScopedLdFldForTypeOf, OP_GetPropertyForTypeOfScoped, ElementP)
DEF3_WMS(CUSTOM_L_Value, ScopedLdMethodFld, OP_GetMethodPropertyScoped, ElementCP)
DEF3_WMS(CUSTOM, ScopedStFld, OP_SetPropertyScoped, ElementP)
EXDEF3_WMS(CUSTOM, ConsoleScopedStFld, OP_ConsoleSetPropertyScoped, ElementP)
DEF3_WMS(CUSTOM, ScopedStFldStrict, OP_SetPropertyScopedStrict, ElementP)
DEF2_WMS(GET_ELEM_IMem, DeleteElemI_A, JavascriptOperators::OP_DeleteElementI)
DEF2_WMS(GET_ELEM_IMem_Strict, DeleteElemIStrict_A, JavascriptOperators::OP_DeleteElementI)
DEF3_WMS(CUSTOM_L_Value, ScopedLdInst, OP_ScopedLdInst, ElementScopedC2)
DEF3_WMS(CUSTOM, ScopedInitFunc, OP_ScopedInitFunc, ElementScopedC)
DEF3_WMS(CUSTOM_L_Value, ScopedDeleteFld, OP_ScopedDeleteFld, ElementScopedC)
DEF3_WMS(CUSTOM_L_Value, ScopedDeleteFldStrict, OP_ScopedDeleteFldStrict, ElementScopedC)
DEF3_WMS(CUSTOM, LdElemUndef, OP_LdElementUndefined, ElementU)
EXDEF3_WMS(CUSTOM, LdLocalElemUndef, OP_LdLocalElementUndefined, ElementRootU)
DEF2_WMS(XXtoA1, NewScObjectSimple, OP_NewScObjectSimple)
DEF3 (CUSTOM, NewScObject_A, OP_NewScObject_A, Auxiliary)
DEF3 (CUSTOM, NewScObjectLiteral, OP_NewScObjectLiteral, Auxiliary)
DEF3 (CUSTOM_L_R0, LdPropIds, OP_LdPropIds, Auxiliary)
DEF3 (CUSTOM, InitCachedFuncs, OP_InitCachedFuncs, AuxNoReg)
DEF2_WMS(LOCALI1toA1, GetCachedFunc, OP_GetCachedFunc)
DEF2_WMS(EnvU1toXX, InvalCachedScope, JavascriptOperators::OP_InvalidateCachedScope)
DEF2 (EMPTY, CommitScope, OP_CommitScope)
DEF2_WMS(A1I2toXXNonVar_FuncBody, NewInnerScopeSlots, OP_NewInnerScopeSlots)
DEF3_WMS(CUSTOM, CloneInnerScopeSlots, OP_CloneInnerScopeSlots, Unsigned1)
DEF3_WMS(CUSTOM_L_R0, NewScArray, OP_NewScArray, Reg1Unsigned1)
DEF2_WMS(U1toA1, NewScArrayWithMissingValues,JavascriptArray::OP_NewScArrayWithMissingValues)
DEF3 (CUSTOM_L_R0, NewScIntArray, OP_NewScIntArray, Auxiliary)
DEF3 (CUSTOM_L_R0, NewScFltArray, OP_NewScFltArray, Auxiliary)
DEF3_WMS(CUSTOM_L_R0, ProfiledNewScArray, PROFILEDOP(OP_ProfiledNewScArray, OP_ProfiledNewScArray_NoProfile), ProfiledReg1Unsigned1)
DEF3 (CUSTOM_L_R0, ProfiledNewScIntArray, PROFILEDOP(OP_ProfiledNewScIntArray, OP_NewScIntArray), ProfiledAuxiliary)
DEF3 (CUSTOM_L_R0, ProfiledNewScFltArray, PROFILEDOP(OP_ProfiledNewScFltArray, OP_NewScFltArray), ProfiledAuxiliary)
DEF2_WMS(RegextoA1, NewRegEx, JavascriptRegExp::OP_NewRegEx)
EXDEF3_WMS(CUSTOM, InitClass, OP_InitClass, Class)
DEF2_WMS(BRBReturnP1toA1, BrOnEmpty, JavascriptOperators::OP_BrOnEmpty)
DEF2 (TRY, TryCatch, OP_TryCatch)
DEF2 (TRY, TryFinally, OP_TryFinally)
EXDEF2_WMS(TRYBR2, TryFinallyWithYield, OP_TryFinallyWithYield)
EXDEF2 (EMPTY, ResumeCatch, OP_ResumeCatch)
EXDEF2_WMS(TRYBR2, ResumeFinally, OP_ResumeFinally)
DEF2_WMS(A1NonVarToA1, ResumeYield, OP_ResumeYield)
DEF2_WMS(A2NonVarToA1Reg, ResumeYieldStar, OP_ResumeYield)
EXDEF2 (W1, RuntimeTypeError, JavascriptExceptionOperators::OP_RuntimeTypeError)
EXDEF2 (W1, RuntimeReferenceError, JavascriptExceptionOperators::OP_RuntimeReferenceError)
DEF3 (CUSTOM_L_R0, SpreadArrayLiteral, OP_SpreadArrayLiteral, Reg2Aux)
EXDEF2_WMS(A1toXX, ObjectFreeze, JavascriptOperators::OP_Freeze)
EXDEF3_WMS(CUSTOM, ClearAttributes, OP_ClearAttributes, ElementU)
DEF3_WMS(CUSTOM, ApplyArgs, OP_ApplyArgs, Reg5)
EXDEF3_WMS(CUSTOM, EmitTmpRegCount, OP_EmitTmpRegCount, Unsigned1)
EXDEF2 (EMPTY, BeginBodyScope, OP_BeginBodyScope)
#endif
// help the caller to undefine all the macros
#undef DEF2
#undef DEF3
#undef DEF2_WMS
#undef DEF3_WMS
#undef DEF4_WMS
#undef EXDEF2
#undef EXDEF3
#undef EXDEF2_WMS
#undef EXDEF3_WMS
#undef EXDEF4_WMS