1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef ECMASCRIPT_COMPILER_MCR_OPCODE_H 17 #define ECMASCRIPT_COMPILER_MCR_OPCODE_H 18 19 namespace panda::ecmascript::kungfu { 20 21 #define MCR_BINARY_GATE_META_DATA_CACHE_LIST(V) \ 22 V(Int32CheckRightIsZero, INT32_CHECK_RIGHT_IS_ZERO, GateFlags::CHECKABLE, 1, 1, 1) \ 23 V(RemainderIsNegativeZero, REMAINDER_IS_NEGATIVE_ZERO, GateFlags::CHECKABLE, 1, 1, 2) \ 24 V(Float64CheckRightIsZero, FLOAT64_CHECK_RIGHT_IS_ZERO, GateFlags::CHECKABLE, 1, 1, 1) \ 25 V(ValueCheckNegOverflow, VALUE_CHECK_NEG_OVERFLOW, GateFlags::CHECKABLE, 1, 1, 1) \ 26 V(OverflowCheck, OVERFLOW_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 27 V(Int32UnsignedUpperBoundCheck, INT32_UNSIGNED_UPPER_BOUND_CHECK, GateFlags::CHECKABLE, 1, 1, 2) \ 28 V(Int32DivWithCheck, INT32_DIV_WITH_CHECK, GateFlags::CHECKABLE, 1, 1, 2) \ 29 V(LexVarIsHoleCheck, LEX_VAR_IS_HOLE_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 30 V(IsUndefinedOrHoleCheck, IS_UNDEFINED_OR_HOLE_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 31 V(IsNotUndefinedOrHoleCheck, IS_NOT_UNDEFINED_OR_HOLE_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 32 V(IsDataViewCheck, IS_DATA_VIEW_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 33 V(TaggedIsHeapObject, TAGGED_IS_HEAP_OBJECT, GateFlags::NO_WRITE, 1, 1, 1) \ 34 V(IsMarkerCellValid, IS_MARKER_CELL_VALID, GateFlags::NO_WRITE, 1, 1, 1) \ 35 V(StringEqual, STRING_EQUAL, GateFlags::NO_WRITE, 1, 1, 2) \ 36 V(IsCallableCheck, IS_CALLABLE_CHECK, GateFlags::CHECKABLE, 1, 1, 1) 37 38 #define MCR_IMMUTABLE_META_DATA_CACHE_LIST(V) \ 39 V(ArrayGuardianCheck, ARRAY_GUARDIAN_CHECK, GateFlags::CHECKABLE, 1, 1, 0) \ 40 V(COWArrayCheck, COW_ARRAY_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 41 V(ConvertHoleAsUndefined, CONVERT_HOLE_AS_UNDEFINED, GateFlags::NO_WRITE, 1, 1, 1) \ 42 V(EcmaStringCheck, ECMA_STRING_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 43 V(EcmaMapCheck, ECMA_MAP_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 44 V(FinishAllocate, FINISH_ALLOCATE, GateFlags::NONE_FLAG, 0, 1, 1) \ 45 V(FlattenTreeStringCheck, FLATTEN_TREE_STRING_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 46 V(HeapObjectCheck, HEAP_OBJECT_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 47 V(EcmaObjectCheck, ECMA_OBJECT_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 48 V(ProtoChangeMarkerCheck, PROTO_CHANGE_MARKER_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 49 V(LookUpHolder, LOOK_UP_HOLDER, GateFlags::CHECKABLE, 1, 1, 3) \ 50 V(LoadGetter, LOAD_GETTER, GateFlags::NO_WRITE, 0, 1, 2) \ 51 V(LoadSetter, LOAD_SETTER, GateFlags::NO_WRITE, 0, 1, 2) \ 52 V(LoadStringLength, LOAD_STRING_LENGTH, GateFlags::NO_WRITE, 1, 1, 1) \ 53 V(LoadMapSize, LOAD_MAP_SIZE, GateFlags::NO_WRITE, 1, 1, 1) \ 54 V(StartAllocate, START_ALLOCATE, GateFlags::NONE_FLAG, 0, 1, 0) \ 55 V(StorePropertyNoBarrier, STORE_PROPERTY_NO_BARRIER, GateFlags::NONE_FLAG, 1, 1, 3) \ 56 V(TypedNewAllocateThis, TYPED_NEW_ALLOCATE_THIS, GateFlags::CHECKABLE, 1, 1, 3) \ 57 V(TypedSuperAllocateThis, TYPED_SUPER_ALLOCATE_THIS, GateFlags::CHECKABLE, 1, 1, 2) \ 58 V(ArrayConstructorCheck, ARRAY_CONSTRUCTOR_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 59 V(ObjectConstructorCheck, OBJECT_CONSTRUCTOR_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 60 V(BooleanConstructorCheck, BOOLEAN_CONSTRUCTOR_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 61 V(IndexCheck, INDEX_CHECK, GateFlags::CHECKABLE, 1, 1, 2) \ 62 V(MonoLoadPropertyOnProto, MONO_LOAD_PROPERTY_ON_PROTO, GateFlags::CHECKABLE, 1, 1, 4) \ 63 V(StringFromSingleCharCode, STRING_FROM_SINGLE_CHAR_CODE, GateFlags::NO_WRITE, 1, 1, 1) \ 64 V(StringCharCodeAt, STRING_CHAR_CODE_AT, GateFlags::NO_WRITE, 1, 1, 2) \ 65 V(StringSubstring, STRING_SUB_STRING, GateFlags::NO_WRITE, 1, 1, 3) \ 66 V(StringSubStr, STRING_SUB_STR, GateFlags::NO_WRITE, 1, 1, 3) \ 67 V(StringSlice, STRING_SLICE, GateFlags::NO_WRITE, 1, 1, 3) \ 68 V(TypedArrayEntries, TYPED_ARRAY_ENTRIES, GateFlags::NO_WRITE, 1, 1, 1) \ 69 V(TypedArrayKeys, TYPED_ARRAY_KEYS, GateFlags::NO_WRITE, 1, 1, 1) \ 70 V(TypedArrayValues, TYPED_ARRAY_VALUES, GateFlags::NO_WRITE, 1, 1, 1) \ 71 V(Float32ArrayConstructorCheck, FLOAT32_ARRAY_CONSTRUCTOR_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 72 V(MigrateFromRawValueToHeapValues, MIGRATE_FROM_RAWVALUE_TO_HEAPVALUES, GateFlags::NONE_FLAG, 1, 1, 3) \ 73 V(MigrateFromHeapValueToRawValue, MIGRATE_FROM_HEAPVALUE_TO_RAWVALUE, GateFlags::NONE_FLAG, 1, 1, 3) \ 74 V(MigrateFromHoleIntToHoleNumber, MIGRATE_FROM_HOLEINT_TO_HOLENUMBER, GateFlags::NONE_FLAG, 1, 1, 1) \ 75 V(MigrateFromHoleNumberToHoleInt, MIGRATE_FROM_HOLENUMBER_TO_HOLEINT, GateFlags::NONE_FLAG, 1, 1, 1) \ 76 V(NumberIsFinite, NUMBER_IS_FINITE, GateFlags::NO_WRITE, 1, 1, 1) \ 77 V(NumberIsInteger, NUMBER_IS_INTEGER, GateFlags::NO_WRITE, 1, 1, 1) \ 78 V(NumberIsNaN, NUMBER_IS_NAN, GateFlags::NO_WRITE, 1, 1, 1) \ 79 V(NumberIsSafeInteger, NUMBER_IS_SAFEINTEGER, GateFlags::NO_WRITE, 1, 1, 1) \ 80 V(NumberParseFloat, NUMBER_PARSE_FLOAT, GateFlags::CHECKABLE, 1, 1, 1) \ 81 V(NumberParseInt, NUMBER_PARSE_INT, GateFlags::NO_WRITE, 1, 1, 2) \ 82 V(MathAcos, MATH_ACOS, GateFlags::NO_WRITE, 1, 1, 1) \ 83 V(MathAcosh, MATH_ACOSH, GateFlags::NO_WRITE, 1, 1, 1) \ 84 V(MathAsin, MATH_ASIN, GateFlags::NO_WRITE, 1, 1, 1) \ 85 V(MathAsinh, MATH_ASINH, GateFlags::NO_WRITE, 1, 1, 1) \ 86 V(MathAtan, MATH_ATAN, GateFlags::NO_WRITE, 1, 1, 1) \ 87 V(MathAtan2, MATH_ATAN2, GateFlags::NO_WRITE, 1, 1, 2) \ 88 V(MathAtanh, MATH_ATANH, GateFlags::NO_WRITE, 1, 1, 1) \ 89 V(MathCos, MATH_COS, GateFlags::NO_WRITE, 1, 1, 1) \ 90 V(MathCosh, MATH_COSH, GateFlags::NO_WRITE, 1, 1, 1) \ 91 V(MathSign, MATH_SIGN, GateFlags::NO_WRITE, 1, 1, 1) \ 92 V(MathSignTagged, MATH_SIGN_TAGGED, GateFlags::NO_WRITE, 1, 1, 1) \ 93 V(MathSin, MATH_SIN, GateFlags::NO_WRITE, 1, 1, 1) \ 94 V(MathSinh, MATH_SINH, GateFlags::NO_WRITE, 1, 1, 1) \ 95 V(MathSqrt, MATH_SQRT, GateFlags::NO_WRITE, 1, 1, 1) \ 96 V(MathTan, MATH_TAN, GateFlags::NO_WRITE, 1, 1, 1) \ 97 V(MathTanh, MATH_TANH, GateFlags::NO_WRITE, 1, 1, 1) \ 98 V(MathTrunc, MATH_TRUNC, GateFlags::NO_WRITE, 1, 1, 1) \ 99 V(MathLog, MATH_LOG, GateFlags::NO_WRITE, 1, 1, 1) \ 100 V(MathLog2, MATH_LOG2, GateFlags::NO_WRITE, 1, 1, 1) \ 101 V(MathLog10, MATH_LOG10, GateFlags::NO_WRITE, 1, 1, 1) \ 102 V(MathLog1p, MATH_LOG1P, GateFlags::NO_WRITE, 1, 1, 1) \ 103 V(MathExp, MATH_EXP, GateFlags::NO_WRITE, 1, 1, 1) \ 104 V(MathExpm1, MATH_EXPM1, GateFlags::NO_WRITE, 1, 1, 1) \ 105 V(MathClz32, MATH_CLZ32, GateFlags::NO_WRITE, 1, 1, 1) \ 106 V(MathClz32Double, MATH_CLZ32_DOUBLE, GateFlags::NO_WRITE, 1, 1, 1) \ 107 V(MathClz32Int32, MATH_CLZ32_INT32, GateFlags::NO_WRITE, 1, 1, 1) \ 108 V(MathAbs, MATH_ABS, GateFlags::CHECKABLE, 1, 1, 1) \ 109 V(MathAbsInt32, MATH_ABS_INT32, GateFlags::CHECKABLE, 1, 1, 1) \ 110 V(MathAbsDouble, MATH_ABS_DOUBLE, GateFlags::CHECKABLE, 1, 1, 1) \ 111 V(MathPow, MATH_POW, GateFlags::NO_WRITE, 1, 1, 2) \ 112 V(MathCbrt, MATH_CBRT, GateFlags::NO_WRITE, 1, 1, 1) \ 113 V(MathMin, MATH_MIN, GateFlags::NO_WRITE, 1, 1, 2) \ 114 V(MathMinInt32, MATH_MIN_INT32, GateFlags::NO_WRITE, 1, 1, 2) \ 115 V(MathMinDouble, MATH_MIN_DOUBLE, GateFlags::NO_WRITE, 1, 1, 2) \ 116 V(MathMax, MATH_MAX, GateFlags::NO_WRITE, 1, 1, 2) \ 117 V(MathMaxInt32, MATH_MAX_INT32, GateFlags::NO_WRITE, 1, 1, 2) \ 118 V(MathMaxDouble, MATH_MAX_DOUBLE, GateFlags::NO_WRITE, 1, 1, 2) \ 119 V(MathRound, MATH_ROUND, GateFlags::NO_WRITE, 1, 1, 1) \ 120 V(MathRoundDouble, MATH_ROUND_DOUBLE, GateFlags::NO_WRITE, 1, 1, 1) \ 121 V(MathFRound, MATH_FROUND, GateFlags::NO_WRITE, 1, 1, 1) \ 122 V(MathCeil, MATH_CEIL, GateFlags::NO_WRITE, 1, 1, 1) \ 123 V(MathFloor, MATH_FLOOR, GateFlags::NO_WRITE, 1, 1, 1) \ 124 V(MathImul, MATH_IMUL, GateFlags::NO_WRITE, 1, 1, 2) \ 125 V(NewNumber, NEW_NUMBER, GateFlags::CHECKABLE, 1, 1, 2) \ 126 V(GlobalIsFinite, GLOBAL_IS_FINITE, GateFlags::NO_WRITE, 1, 1, 1) \ 127 V(GlobalIsNan, GLOBAL_IS_NAN, GateFlags::NO_WRITE, 1, 1, 1) \ 128 V(BigIntConstructor, BIGINT_CONSTRUCTOR, GateFlags::NO_WRITE, 1, 1, 1) \ 129 V(BigIntConstructorInt32, BIGINT_CONSTRUCTOR_INT32, GateFlags::NO_WRITE, 1, 1, 1) \ 130 V(BigIntConstructorUint32, BIGINT_CONSTRUCTOR_UINT32, GateFlags::NO_WRITE, 1, 1, 1) \ 131 V(ArrayBufferIsView, ARRAY_BUFFER_IS_VIEW, GateFlags::NO_WRITE, 1, 1, 1) \ 132 V(DataViewGet, DATA_VIEW_GET, GateFlags::NO_WRITE, 1, 1, 5) \ 133 V(DataViewSet, DATA_VIEW_SET, GateFlags::NONE_FLAG, 1, 1, 6) \ 134 V(BigIntAsIntN, BIGINT_ASINTN, GateFlags::NO_WRITE, 1, 1, 3) \ 135 V(BigIntAsUintN, BIGINT_ASUINTN, GateFlags::NO_WRITE, 1, 1, 3) \ 136 V(MapGet, MAP_GET, GateFlags::NO_WRITE, 1, 1, 2) \ 137 V(DateGetTime, DATE_GET_TIME, GateFlags::NO_WRITE, 1, 1, 1) \ 138 V(MapHas, MAP_HAS, GateFlags::NO_WRITE, 1, 1, 2) \ 139 V(MapKeys, MAP_KEYS, GateFlags::NO_WRITE, 1, 1, 1) \ 140 V(MapValues, MAP_VALUES, GateFlags::NO_WRITE, 1, 1, 1) \ 141 V(MapEntries, MAP_ENTRIES, GateFlags::NO_WRITE, 1, 1, 1) \ 142 V(SetHas, SET_HAS, GateFlags::NO_WRITE, 1, 1, 2) \ 143 V(SetAdd, SET_ADD, GateFlags::NONE_FLAG, 1, 1, 2) \ 144 V(MapDelete, MAP_DELETE, GateFlags::NONE_FLAG, 1, 1, 2) \ 145 V(SetDelete, SET_DELETE, GateFlags::NONE_FLAG, 1, 1, 2) \ 146 V(DateNow, DATE_NOW, GateFlags::NONE_FLAG, 1, 1, 0) \ 147 V(SetValues, SET_VALUES, GateFlags::NO_WRITE, 1, 1, 1) \ 148 V(SetEntries, SET_ENTRIES, GateFlags::NO_WRITE, 1, 1, 1) \ 149 V(MapClear, MAP_CLEAR, GateFlags::NONE_FLAG, 1, 1, 1) \ 150 V(SetClear, SET_CLEAR, GateFlags::NONE_FLAG, 1, 1, 1) \ 151 V(ObjectIs, OBJECT_IS, GateFlags::NO_WRITE, 1, 1, 2) \ 152 V(ObjectGetPrototypeOf, OBJECT_GET_PROTOTYPE_OF, GateFlags::NO_WRITE, 1, 1, 1) \ 153 V(ObjectCreate, OBJECT_CREATE, GateFlags::NONE_FLAG, 1, 1, 1) \ 154 V(ObjectIsPrototypeOf, OBJECT_IS_PROTOTYPE_OF, GateFlags::NO_WRITE, 1, 1, 2) \ 155 V(ObjectHasOwnProperty, OBJECT_HAS_OWN_PROPERTY, GateFlags::NO_WRITE, 1, 1, 2) \ 156 V(ReflectGetPrototypeOf, REFLECT_GET_PROTOTYPE_OF, GateFlags::NO_WRITE, 1, 1, 1) \ 157 V(ReflectGet, REFLECT_GET, GateFlags::NONE_FLAG, 1, 1, 2) \ 158 V(ReflectHas, REFLECT_HAS, GateFlags::NO_WRITE, 1, 1, 2) \ 159 V(ReflectConstruct, REFLECT_CONSTRUCT, GateFlags::NONE_FLAG, 1, 1, 1) \ 160 V(ReflectApply, REFLECT_APPLY, GateFlags::NONE_FLAG, 1, 1, 3) \ 161 V(FunctionPrototypeApply, FUNCTION_PROTOTYPE_APPLY, GateFlags::NONE_FLAG, 1, 1, 3) \ 162 V(FunctionPrototypeBind, FUNCTION_PROTOTYPE_BIND, GateFlags::NONE_FLAG, 1, 1, 2) \ 163 V(HeapObjectIsEcmaObjectCheck, HEAP_OBJECT_IS_ECMA_OBJECT, GateFlags::CHECKABLE, 1, 1, 1) \ 164 V(ArrayIncludesIndexOf, ARRAY_INCLUDES_INDEXOF, GateFlags::NO_WRITE, 1, 1, 5) \ 165 V(ArrayIteratorBuiltin, ARRAY_ITERATOR_BUILTIN, GateFlags::NONE_FLAG, 1, 1, 2) \ 166 V(ArrayPop, ARRAY_POP, GateFlags::NONE_FLAG, 1, 1, 2) \ 167 V(ArraySlice, ARRAY_SLICE, GateFlags::NONE_FLAG, 1, 1, 4) \ 168 V(ArraySort, ARRAY_SORT, GateFlags::NONE_FLAG, 1, 1, 2) \ 169 MCR_BINARY_GATE_META_DATA_CACHE_LIST(V) 170 171 #define MCR_GATE_META_DATA_LIST_WITH_PC_OFFSET(V) \ 172 V(TypedCallBuiltin, TYPED_CALL_BUILTIN, GateFlags::CHECKABLE, 1, 1, value) \ 173 V(TypedCallBuiltinSideEffect, TYPED_CALL_BUILTIN_SIDE_EFFECT, GateFlags::HAS_FRAME_STATE, 1, 1, value) 174 175 #define MCR_GATE_META_DATA_LIST_FOR_CALL(V) \ 176 V(TypedCall, TYPEDCALL, GateFlags::HAS_FRAME_STATE, 1, 1, value) \ 177 V(TypedFastCall, TYPEDFASTCALL, GateFlags::HAS_FRAME_STATE, 1, 1, value) 178 179 #define MCR_GATE_META_DATA_LIST_WITH_VALUE(V) \ 180 V(LoadConstOffset, LOAD_CONST_OFFSET, GateFlags::NO_WRITE, 0, 1, 1) \ 181 V(LoadHClassFromConstpool, LOAD_HCLASS_FROM_CONSTPOOL, GateFlags::NO_WRITE, 0, 1, 1) \ 182 V(StoreConstOffset, STORE_CONST_OFFSET, GateFlags::NONE_FLAG, 0, 1, 2) \ 183 V(LoadElement, LOAD_ELEMENT, GateFlags::NO_WRITE, 1, 1, 2) \ 184 V(StoreElement, STORE_ELEMENT, GateFlags::NONE_FLAG, 1, 1, 3) \ 185 V(StoreMemory, STORE_MEMORY, GateFlags::NONE_FLAG, 1, 1, 3) \ 186 V(ObjectTypeCheck, OBJECT_TYPE_CHECK, GateFlags::CHECKABLE, 1, 1, 2) \ 187 V(StableArrayCheck, STABLE_ARRAY_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 188 V(LoadArrayLength, LOAD_ARRAY_LENGTH, GateFlags::NO_WRITE, 1, 1, 1) \ 189 V(ElementsKindCheck, ELEMENTSKIND_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 190 V(StoreProperty, STORE_PROPERTY, GateFlags::NONE_FLAG, 1, 1, 3) \ 191 V(PrototypeCheck, PROTOTYPE_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 192 V(RangeGuard, RANGE_GUARD, GateFlags::NO_WRITE, 1, 1, 1) \ 193 V(GetGlobalEnvObj, GET_GLOBAL_ENV_OBJ, GateFlags::NO_WRITE, 0, 1, 1) \ 194 V(GetGlobalEnvObjHClass, GET_GLOBAL_ENV_OBJ_HCLASS, GateFlags::NO_WRITE, 0, 1, 1) \ 195 V(GetGlobalConstantValue, GET_GLOBAL_CONSTANT_VALUE, GateFlags::NO_WRITE, 0, 1, 0) \ 196 V(HClassStableArrayCheck, HCLASS_STABLE_ARRAY_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 197 V(HeapAlloc, HEAP_ALLOC, GateFlags::NONE_FLAG, 0, 1, 2) \ 198 V(RangeCheckPredicate, RANGE_CHECK_PREDICATE, GateFlags::CHECKABLE, 1, 1, 2) \ 199 V(BuiltinPrototypeHClassCheck, BUILTIN_PROTOTYPE_HCLASS_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 200 V(IsSpecificObjectType, IS_SPECIFIC_OBJECT_TYPE, GateFlags::NO_WRITE, 1, 1, 1) \ 201 V(LoadBuiltinObject, LOAD_BUILTIN_OBJECT, GateFlags::CHECKABLE, 1, 1, 0) \ 202 V(StringAdd, STRING_ADD, GateFlags::NO_WRITE, 1, 1, 2) \ 203 V(ArrayForEach, ARRAY_FOR_EACH, GateFlags::NONE_FLAG, 1, 1, 3) \ 204 V(ArrayFilter, ARRAY_FILTER, GateFlags::NONE_FLAG, 1, 1, 4) \ 205 V(ArrayFindOrFindIndex, ARRAY_FIND_OR_FINDINDEX, GateFlags::NONE_FLAG, 1, 1, 4) \ 206 V(ArrayMap, ARRAY_MAP, GateFlags::NONE_FLAG, 1, 1, 4) \ 207 V(ArraySome, ARRAY_SOME, GateFlags::NONE_FLAG, 1, 1, 3) \ 208 V(ArrayEvery, ARRAY_EVERY, GateFlags::NONE_FLAG, 1, 1, 3) 209 210 #define MCR_GATE_META_DATA_LIST_WITH_BOOL(V) \ 211 V(LoadProperty, LOAD_PROPERTY, GateFlags::NO_WRITE, 1, 1, 2) \ 212 V(MonoStorePropertyLookUpProto, MONO_STORE_PROPERTY_LOOK_UP_PROTO, GateFlags::HAS_FRAME_STATE, 1, 1, 5) \ 213 V(MonoStoreProperty, MONO_STORE_PROPERTY, GateFlags::HAS_FRAME_STATE, 1, 1, 6) 214 215 #define MCR_GATE_META_DATA_LIST_WITH_GATE_TYPE(V) \ 216 V(PrimitiveTypeCheck, PRIMITIVE_TYPE_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 217 V(TypedArrayCheck, TYPED_ARRAY_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 218 V(LoadTypedArrayLength, LOAD_TYPED_ARRAY_LENGTH, GateFlags::NO_WRITE, 1, 1, 1) \ 219 V(TypedBinaryOp, TYPED_BINARY_OP, GateFlags::NO_WRITE, 1, 1, 2) \ 220 V(TypedUnaryOp, TYPED_UNARY_OP, GateFlags::NO_WRITE, 1, 1, 1) \ 221 V(TypedConditionJump, TYPED_CONDITION_JUMP, GateFlags::NO_WRITE, 1, 1, 1) \ 222 V(TypedConvert, TYPE_CONVERT, GateFlags::NO_WRITE, 1, 1, 1) \ 223 V(CheckAndConvert, CHECK_AND_CONVERT, GateFlags::CHECKABLE, 1, 1, 1) \ 224 V(Convert, CONVERT, GateFlags::NONE_FLAG, 0, 0, 1) \ 225 V(JSInlineTargetTypeCheck, JSINLINETARGET_TYPE_CHECK, GateFlags::CHECKABLE, 1, 1, 2) \ 226 V(TypeOfCheck, TYPE_OF_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 227 V(TypeOf, TYPE_OF, GateFlags::NO_WRITE, 1, 1, 0) \ 228 V(TypedCallTargetCheckOp, TYPED_CALLTARGETCHECK_OP, GateFlags::CHECKABLE, 1, 1, 2) 229 230 // NOTICE-PGO: wx typedcalltargetcheckop can adopt different number of valueIn 231 232 #define MCR_GATE_META_DATA_LIST_WITH_ONE_PARAMETER(V) \ 233 MCR_GATE_META_DATA_LIST_WITH_VALUE(V) \ 234 MCR_GATE_META_DATA_LIST_WITH_GATE_TYPE(V) 235 236 #define MCR_GATE_META_DATA_LIST_WITH_VALUE_IN(V) \ 237 V(TypedCreateObjWithBuffer, TYPED_CREATE_OBJ_WITH_BUFFER, GateFlags::CHECKABLE, 1, 1, value) \ 238 V(TypedCallCheck, TYPED_CALL_CHECK, GateFlags::CHECKABLE, 1, 1, value) \ 239 V(FunctionPrototypeCall, FUNCTION_PROTOTYPE_CALL, GateFlags::NONE_FLAG, 1, 1, value) 240 241 #define MCR_GATE_META_DATA_LIST_WITH_SIZE(V) \ 242 MCR_GATE_META_DATA_LIST_WITH_VALUE_IN(V) 243 } 244 245 #endif // ECMASCRIPT_COMPILER_MCR_OPCODE_H 246