14514f5e3Sopenharmony_ci/* 24514f5e3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License. 54514f5e3Sopenharmony_ci * You may obtain a copy of the License at 64514f5e3Sopenharmony_ci * 74514f5e3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84514f5e3Sopenharmony_ci * 94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and 134514f5e3Sopenharmony_ci * limitations under the License. 144514f5e3Sopenharmony_ci */ 154514f5e3Sopenharmony_ci 164514f5e3Sopenharmony_ci#ifndef ECMASCRIPT_COMPILER_MCR_OPCODE_H 174514f5e3Sopenharmony_ci#define ECMASCRIPT_COMPILER_MCR_OPCODE_H 184514f5e3Sopenharmony_ci 194514f5e3Sopenharmony_cinamespace panda::ecmascript::kungfu { 204514f5e3Sopenharmony_ci 214514f5e3Sopenharmony_ci#define MCR_BINARY_GATE_META_DATA_CACHE_LIST(V) \ 224514f5e3Sopenharmony_ci V(Int32CheckRightIsZero, INT32_CHECK_RIGHT_IS_ZERO, GateFlags::CHECKABLE, 1, 1, 1) \ 234514f5e3Sopenharmony_ci V(RemainderIsNegativeZero, REMAINDER_IS_NEGATIVE_ZERO, GateFlags::CHECKABLE, 1, 1, 2) \ 244514f5e3Sopenharmony_ci V(Float64CheckRightIsZero, FLOAT64_CHECK_RIGHT_IS_ZERO, GateFlags::CHECKABLE, 1, 1, 1) \ 254514f5e3Sopenharmony_ci V(ValueCheckNegOverflow, VALUE_CHECK_NEG_OVERFLOW, GateFlags::CHECKABLE, 1, 1, 1) \ 264514f5e3Sopenharmony_ci V(OverflowCheck, OVERFLOW_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 274514f5e3Sopenharmony_ci V(Int32UnsignedUpperBoundCheck, INT32_UNSIGNED_UPPER_BOUND_CHECK, GateFlags::CHECKABLE, 1, 1, 2) \ 284514f5e3Sopenharmony_ci V(Int32DivWithCheck, INT32_DIV_WITH_CHECK, GateFlags::CHECKABLE, 1, 1, 2) \ 294514f5e3Sopenharmony_ci V(LexVarIsHoleCheck, LEX_VAR_IS_HOLE_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 304514f5e3Sopenharmony_ci V(IsUndefinedOrHoleCheck, IS_UNDEFINED_OR_HOLE_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 314514f5e3Sopenharmony_ci V(IsNotUndefinedOrHoleCheck, IS_NOT_UNDEFINED_OR_HOLE_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 324514f5e3Sopenharmony_ci V(IsDataViewCheck, IS_DATA_VIEW_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 334514f5e3Sopenharmony_ci V(TaggedIsHeapObject, TAGGED_IS_HEAP_OBJECT, GateFlags::NO_WRITE, 1, 1, 1) \ 344514f5e3Sopenharmony_ci V(IsMarkerCellValid, IS_MARKER_CELL_VALID, GateFlags::NO_WRITE, 1, 1, 1) \ 354514f5e3Sopenharmony_ci V(StringEqual, STRING_EQUAL, GateFlags::NO_WRITE, 1, 1, 2) \ 364514f5e3Sopenharmony_ci V(IsCallableCheck, IS_CALLABLE_CHECK, GateFlags::CHECKABLE, 1, 1, 1) 374514f5e3Sopenharmony_ci 384514f5e3Sopenharmony_ci#define MCR_IMMUTABLE_META_DATA_CACHE_LIST(V) \ 394514f5e3Sopenharmony_ci V(ArrayGuardianCheck, ARRAY_GUARDIAN_CHECK, GateFlags::CHECKABLE, 1, 1, 0) \ 404514f5e3Sopenharmony_ci V(COWArrayCheck, COW_ARRAY_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 414514f5e3Sopenharmony_ci V(ConvertHoleAsUndefined, CONVERT_HOLE_AS_UNDEFINED, GateFlags::NO_WRITE, 1, 1, 1) \ 424514f5e3Sopenharmony_ci V(EcmaStringCheck, ECMA_STRING_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 434514f5e3Sopenharmony_ci V(EcmaMapCheck, ECMA_MAP_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 444514f5e3Sopenharmony_ci V(FinishAllocate, FINISH_ALLOCATE, GateFlags::NONE_FLAG, 0, 1, 1) \ 454514f5e3Sopenharmony_ci V(FlattenTreeStringCheck, FLATTEN_TREE_STRING_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 464514f5e3Sopenharmony_ci V(HeapObjectCheck, HEAP_OBJECT_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 474514f5e3Sopenharmony_ci V(EcmaObjectCheck, ECMA_OBJECT_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 484514f5e3Sopenharmony_ci V(ProtoChangeMarkerCheck, PROTO_CHANGE_MARKER_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 494514f5e3Sopenharmony_ci V(LookUpHolder, LOOK_UP_HOLDER, GateFlags::CHECKABLE, 1, 1, 3) \ 504514f5e3Sopenharmony_ci V(LoadGetter, LOAD_GETTER, GateFlags::NO_WRITE, 0, 1, 2) \ 514514f5e3Sopenharmony_ci V(LoadSetter, LOAD_SETTER, GateFlags::NO_WRITE, 0, 1, 2) \ 524514f5e3Sopenharmony_ci V(LoadStringLength, LOAD_STRING_LENGTH, GateFlags::NO_WRITE, 1, 1, 1) \ 534514f5e3Sopenharmony_ci V(LoadMapSize, LOAD_MAP_SIZE, GateFlags::NO_WRITE, 1, 1, 1) \ 544514f5e3Sopenharmony_ci V(StartAllocate, START_ALLOCATE, GateFlags::NONE_FLAG, 0, 1, 0) \ 554514f5e3Sopenharmony_ci V(StorePropertyNoBarrier, STORE_PROPERTY_NO_BARRIER, GateFlags::NONE_FLAG, 1, 1, 3) \ 564514f5e3Sopenharmony_ci V(TypedNewAllocateThis, TYPED_NEW_ALLOCATE_THIS, GateFlags::CHECKABLE, 1, 1, 3) \ 574514f5e3Sopenharmony_ci V(TypedSuperAllocateThis, TYPED_SUPER_ALLOCATE_THIS, GateFlags::CHECKABLE, 1, 1, 2) \ 584514f5e3Sopenharmony_ci V(ArrayConstructorCheck, ARRAY_CONSTRUCTOR_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 594514f5e3Sopenharmony_ci V(ObjectConstructorCheck, OBJECT_CONSTRUCTOR_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 604514f5e3Sopenharmony_ci V(BooleanConstructorCheck, BOOLEAN_CONSTRUCTOR_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 614514f5e3Sopenharmony_ci V(IndexCheck, INDEX_CHECK, GateFlags::CHECKABLE, 1, 1, 2) \ 624514f5e3Sopenharmony_ci V(MonoLoadPropertyOnProto, MONO_LOAD_PROPERTY_ON_PROTO, GateFlags::CHECKABLE, 1, 1, 4) \ 634514f5e3Sopenharmony_ci V(StringFromSingleCharCode, STRING_FROM_SINGLE_CHAR_CODE, GateFlags::NO_WRITE, 1, 1, 1) \ 644514f5e3Sopenharmony_ci V(StringCharCodeAt, STRING_CHAR_CODE_AT, GateFlags::NO_WRITE, 1, 1, 2) \ 654514f5e3Sopenharmony_ci V(StringSubstring, STRING_SUB_STRING, GateFlags::NO_WRITE, 1, 1, 3) \ 664514f5e3Sopenharmony_ci V(StringSubStr, STRING_SUB_STR, GateFlags::NO_WRITE, 1, 1, 3) \ 674514f5e3Sopenharmony_ci V(StringSlice, STRING_SLICE, GateFlags::NO_WRITE, 1, 1, 3) \ 684514f5e3Sopenharmony_ci V(TypedArrayEntries, TYPED_ARRAY_ENTRIES, GateFlags::NO_WRITE, 1, 1, 1) \ 694514f5e3Sopenharmony_ci V(TypedArrayKeys, TYPED_ARRAY_KEYS, GateFlags::NO_WRITE, 1, 1, 1) \ 704514f5e3Sopenharmony_ci V(TypedArrayValues, TYPED_ARRAY_VALUES, GateFlags::NO_WRITE, 1, 1, 1) \ 714514f5e3Sopenharmony_ci V(Float32ArrayConstructorCheck, FLOAT32_ARRAY_CONSTRUCTOR_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 724514f5e3Sopenharmony_ci V(MigrateFromRawValueToHeapValues, MIGRATE_FROM_RAWVALUE_TO_HEAPVALUES, GateFlags::NONE_FLAG, 1, 1, 3) \ 734514f5e3Sopenharmony_ci V(MigrateFromHeapValueToRawValue, MIGRATE_FROM_HEAPVALUE_TO_RAWVALUE, GateFlags::NONE_FLAG, 1, 1, 3) \ 744514f5e3Sopenharmony_ci V(MigrateFromHoleIntToHoleNumber, MIGRATE_FROM_HOLEINT_TO_HOLENUMBER, GateFlags::NONE_FLAG, 1, 1, 1) \ 754514f5e3Sopenharmony_ci V(MigrateFromHoleNumberToHoleInt, MIGRATE_FROM_HOLENUMBER_TO_HOLEINT, GateFlags::NONE_FLAG, 1, 1, 1) \ 764514f5e3Sopenharmony_ci V(NumberIsFinite, NUMBER_IS_FINITE, GateFlags::NO_WRITE, 1, 1, 1) \ 774514f5e3Sopenharmony_ci V(NumberIsInteger, NUMBER_IS_INTEGER, GateFlags::NO_WRITE, 1, 1, 1) \ 784514f5e3Sopenharmony_ci V(NumberIsNaN, NUMBER_IS_NAN, GateFlags::NO_WRITE, 1, 1, 1) \ 794514f5e3Sopenharmony_ci V(NumberIsSafeInteger, NUMBER_IS_SAFEINTEGER, GateFlags::NO_WRITE, 1, 1, 1) \ 804514f5e3Sopenharmony_ci V(NumberParseFloat, NUMBER_PARSE_FLOAT, GateFlags::CHECKABLE, 1, 1, 1) \ 814514f5e3Sopenharmony_ci V(NumberParseInt, NUMBER_PARSE_INT, GateFlags::NO_WRITE, 1, 1, 2) \ 824514f5e3Sopenharmony_ci V(MathAcos, MATH_ACOS, GateFlags::NO_WRITE, 1, 1, 1) \ 834514f5e3Sopenharmony_ci V(MathAcosh, MATH_ACOSH, GateFlags::NO_WRITE, 1, 1, 1) \ 844514f5e3Sopenharmony_ci V(MathAsin, MATH_ASIN, GateFlags::NO_WRITE, 1, 1, 1) \ 854514f5e3Sopenharmony_ci V(MathAsinh, MATH_ASINH, GateFlags::NO_WRITE, 1, 1, 1) \ 864514f5e3Sopenharmony_ci V(MathAtan, MATH_ATAN, GateFlags::NO_WRITE, 1, 1, 1) \ 874514f5e3Sopenharmony_ci V(MathAtan2, MATH_ATAN2, GateFlags::NO_WRITE, 1, 1, 2) \ 884514f5e3Sopenharmony_ci V(MathAtanh, MATH_ATANH, GateFlags::NO_WRITE, 1, 1, 1) \ 894514f5e3Sopenharmony_ci V(MathCos, MATH_COS, GateFlags::NO_WRITE, 1, 1, 1) \ 904514f5e3Sopenharmony_ci V(MathCosh, MATH_COSH, GateFlags::NO_WRITE, 1, 1, 1) \ 914514f5e3Sopenharmony_ci V(MathSign, MATH_SIGN, GateFlags::NO_WRITE, 1, 1, 1) \ 924514f5e3Sopenharmony_ci V(MathSignTagged, MATH_SIGN_TAGGED, GateFlags::NO_WRITE, 1, 1, 1) \ 934514f5e3Sopenharmony_ci V(MathSin, MATH_SIN, GateFlags::NO_WRITE, 1, 1, 1) \ 944514f5e3Sopenharmony_ci V(MathSinh, MATH_SINH, GateFlags::NO_WRITE, 1, 1, 1) \ 954514f5e3Sopenharmony_ci V(MathSqrt, MATH_SQRT, GateFlags::NO_WRITE, 1, 1, 1) \ 964514f5e3Sopenharmony_ci V(MathTan, MATH_TAN, GateFlags::NO_WRITE, 1, 1, 1) \ 974514f5e3Sopenharmony_ci V(MathTanh, MATH_TANH, GateFlags::NO_WRITE, 1, 1, 1) \ 984514f5e3Sopenharmony_ci V(MathTrunc, MATH_TRUNC, GateFlags::NO_WRITE, 1, 1, 1) \ 994514f5e3Sopenharmony_ci V(MathLog, MATH_LOG, GateFlags::NO_WRITE, 1, 1, 1) \ 1004514f5e3Sopenharmony_ci V(MathLog2, MATH_LOG2, GateFlags::NO_WRITE, 1, 1, 1) \ 1014514f5e3Sopenharmony_ci V(MathLog10, MATH_LOG10, GateFlags::NO_WRITE, 1, 1, 1) \ 1024514f5e3Sopenharmony_ci V(MathLog1p, MATH_LOG1P, GateFlags::NO_WRITE, 1, 1, 1) \ 1034514f5e3Sopenharmony_ci V(MathExp, MATH_EXP, GateFlags::NO_WRITE, 1, 1, 1) \ 1044514f5e3Sopenharmony_ci V(MathExpm1, MATH_EXPM1, GateFlags::NO_WRITE, 1, 1, 1) \ 1054514f5e3Sopenharmony_ci V(MathClz32, MATH_CLZ32, GateFlags::NO_WRITE, 1, 1, 1) \ 1064514f5e3Sopenharmony_ci V(MathClz32Double, MATH_CLZ32_DOUBLE, GateFlags::NO_WRITE, 1, 1, 1) \ 1074514f5e3Sopenharmony_ci V(MathClz32Int32, MATH_CLZ32_INT32, GateFlags::NO_WRITE, 1, 1, 1) \ 1084514f5e3Sopenharmony_ci V(MathAbs, MATH_ABS, GateFlags::CHECKABLE, 1, 1, 1) \ 1094514f5e3Sopenharmony_ci V(MathAbsInt32, MATH_ABS_INT32, GateFlags::CHECKABLE, 1, 1, 1) \ 1104514f5e3Sopenharmony_ci V(MathAbsDouble, MATH_ABS_DOUBLE, GateFlags::CHECKABLE, 1, 1, 1) \ 1114514f5e3Sopenharmony_ci V(MathPow, MATH_POW, GateFlags::NO_WRITE, 1, 1, 2) \ 1124514f5e3Sopenharmony_ci V(MathCbrt, MATH_CBRT, GateFlags::NO_WRITE, 1, 1, 1) \ 1134514f5e3Sopenharmony_ci V(MathMin, MATH_MIN, GateFlags::NO_WRITE, 1, 1, 2) \ 1144514f5e3Sopenharmony_ci V(MathMinInt32, MATH_MIN_INT32, GateFlags::NO_WRITE, 1, 1, 2) \ 1154514f5e3Sopenharmony_ci V(MathMinDouble, MATH_MIN_DOUBLE, GateFlags::NO_WRITE, 1, 1, 2) \ 1164514f5e3Sopenharmony_ci V(MathMax, MATH_MAX, GateFlags::NO_WRITE, 1, 1, 2) \ 1174514f5e3Sopenharmony_ci V(MathMaxInt32, MATH_MAX_INT32, GateFlags::NO_WRITE, 1, 1, 2) \ 1184514f5e3Sopenharmony_ci V(MathMaxDouble, MATH_MAX_DOUBLE, GateFlags::NO_WRITE, 1, 1, 2) \ 1194514f5e3Sopenharmony_ci V(MathRound, MATH_ROUND, GateFlags::NO_WRITE, 1, 1, 1) \ 1204514f5e3Sopenharmony_ci V(MathRoundDouble, MATH_ROUND_DOUBLE, GateFlags::NO_WRITE, 1, 1, 1) \ 1214514f5e3Sopenharmony_ci V(MathFRound, MATH_FROUND, GateFlags::NO_WRITE, 1, 1, 1) \ 1224514f5e3Sopenharmony_ci V(MathCeil, MATH_CEIL, GateFlags::NO_WRITE, 1, 1, 1) \ 1234514f5e3Sopenharmony_ci V(MathFloor, MATH_FLOOR, GateFlags::NO_WRITE, 1, 1, 1) \ 1244514f5e3Sopenharmony_ci V(MathImul, MATH_IMUL, GateFlags::NO_WRITE, 1, 1, 2) \ 1254514f5e3Sopenharmony_ci V(NewNumber, NEW_NUMBER, GateFlags::CHECKABLE, 1, 1, 2) \ 1264514f5e3Sopenharmony_ci V(GlobalIsFinite, GLOBAL_IS_FINITE, GateFlags::NO_WRITE, 1, 1, 1) \ 1274514f5e3Sopenharmony_ci V(GlobalIsNan, GLOBAL_IS_NAN, GateFlags::NO_WRITE, 1, 1, 1) \ 1284514f5e3Sopenharmony_ci V(BigIntConstructor, BIGINT_CONSTRUCTOR, GateFlags::NO_WRITE, 1, 1, 1) \ 1294514f5e3Sopenharmony_ci V(BigIntConstructorInt32, BIGINT_CONSTRUCTOR_INT32, GateFlags::NO_WRITE, 1, 1, 1) \ 1304514f5e3Sopenharmony_ci V(BigIntConstructorUint32, BIGINT_CONSTRUCTOR_UINT32, GateFlags::NO_WRITE, 1, 1, 1) \ 1314514f5e3Sopenharmony_ci V(ArrayBufferIsView, ARRAY_BUFFER_IS_VIEW, GateFlags::NO_WRITE, 1, 1, 1) \ 1324514f5e3Sopenharmony_ci V(DataViewGet, DATA_VIEW_GET, GateFlags::NO_WRITE, 1, 1, 5) \ 1334514f5e3Sopenharmony_ci V(DataViewSet, DATA_VIEW_SET, GateFlags::NONE_FLAG, 1, 1, 6) \ 1344514f5e3Sopenharmony_ci V(BigIntAsIntN, BIGINT_ASINTN, GateFlags::NO_WRITE, 1, 1, 3) \ 1354514f5e3Sopenharmony_ci V(BigIntAsUintN, BIGINT_ASUINTN, GateFlags::NO_WRITE, 1, 1, 3) \ 1364514f5e3Sopenharmony_ci V(MapGet, MAP_GET, GateFlags::NO_WRITE, 1, 1, 2) \ 1374514f5e3Sopenharmony_ci V(DateGetTime, DATE_GET_TIME, GateFlags::NO_WRITE, 1, 1, 1) \ 1384514f5e3Sopenharmony_ci V(MapHas, MAP_HAS, GateFlags::NO_WRITE, 1, 1, 2) \ 1394514f5e3Sopenharmony_ci V(MapKeys, MAP_KEYS, GateFlags::NO_WRITE, 1, 1, 1) \ 1404514f5e3Sopenharmony_ci V(MapValues, MAP_VALUES, GateFlags::NO_WRITE, 1, 1, 1) \ 1414514f5e3Sopenharmony_ci V(MapEntries, MAP_ENTRIES, GateFlags::NO_WRITE, 1, 1, 1) \ 1424514f5e3Sopenharmony_ci V(SetHas, SET_HAS, GateFlags::NO_WRITE, 1, 1, 2) \ 1434514f5e3Sopenharmony_ci V(SetAdd, SET_ADD, GateFlags::NONE_FLAG, 1, 1, 2) \ 1444514f5e3Sopenharmony_ci V(MapDelete, MAP_DELETE, GateFlags::NONE_FLAG, 1, 1, 2) \ 1454514f5e3Sopenharmony_ci V(SetDelete, SET_DELETE, GateFlags::NONE_FLAG, 1, 1, 2) \ 1464514f5e3Sopenharmony_ci V(DateNow, DATE_NOW, GateFlags::NONE_FLAG, 1, 1, 0) \ 1474514f5e3Sopenharmony_ci V(SetValues, SET_VALUES, GateFlags::NO_WRITE, 1, 1, 1) \ 1484514f5e3Sopenharmony_ci V(SetEntries, SET_ENTRIES, GateFlags::NO_WRITE, 1, 1, 1) \ 1494514f5e3Sopenharmony_ci V(MapClear, MAP_CLEAR, GateFlags::NONE_FLAG, 1, 1, 1) \ 1504514f5e3Sopenharmony_ci V(SetClear, SET_CLEAR, GateFlags::NONE_FLAG, 1, 1, 1) \ 1514514f5e3Sopenharmony_ci V(ObjectIs, OBJECT_IS, GateFlags::NO_WRITE, 1, 1, 2) \ 1524514f5e3Sopenharmony_ci V(ObjectGetPrototypeOf, OBJECT_GET_PROTOTYPE_OF, GateFlags::NO_WRITE, 1, 1, 1) \ 1534514f5e3Sopenharmony_ci V(ObjectCreate, OBJECT_CREATE, GateFlags::NONE_FLAG, 1, 1, 1) \ 1544514f5e3Sopenharmony_ci V(ObjectIsPrototypeOf, OBJECT_IS_PROTOTYPE_OF, GateFlags::NO_WRITE, 1, 1, 2) \ 1554514f5e3Sopenharmony_ci V(ObjectHasOwnProperty, OBJECT_HAS_OWN_PROPERTY, GateFlags::NO_WRITE, 1, 1, 2) \ 1564514f5e3Sopenharmony_ci V(ReflectGetPrototypeOf, REFLECT_GET_PROTOTYPE_OF, GateFlags::NO_WRITE, 1, 1, 1) \ 1574514f5e3Sopenharmony_ci V(ReflectGet, REFLECT_GET, GateFlags::NONE_FLAG, 1, 1, 2) \ 1584514f5e3Sopenharmony_ci V(ReflectHas, REFLECT_HAS, GateFlags::NO_WRITE, 1, 1, 2) \ 1594514f5e3Sopenharmony_ci V(ReflectConstruct, REFLECT_CONSTRUCT, GateFlags::NONE_FLAG, 1, 1, 1) \ 1604514f5e3Sopenharmony_ci V(ReflectApply, REFLECT_APPLY, GateFlags::NONE_FLAG, 1, 1, 3) \ 1614514f5e3Sopenharmony_ci V(FunctionPrototypeApply, FUNCTION_PROTOTYPE_APPLY, GateFlags::NONE_FLAG, 1, 1, 3) \ 1624514f5e3Sopenharmony_ci V(FunctionPrototypeBind, FUNCTION_PROTOTYPE_BIND, GateFlags::NONE_FLAG, 1, 1, 2) \ 1634514f5e3Sopenharmony_ci V(HeapObjectIsEcmaObjectCheck, HEAP_OBJECT_IS_ECMA_OBJECT, GateFlags::CHECKABLE, 1, 1, 1) \ 1644514f5e3Sopenharmony_ci V(ArrayIncludesIndexOf, ARRAY_INCLUDES_INDEXOF, GateFlags::NO_WRITE, 1, 1, 5) \ 1654514f5e3Sopenharmony_ci V(ArrayIteratorBuiltin, ARRAY_ITERATOR_BUILTIN, GateFlags::NONE_FLAG, 1, 1, 2) \ 1664514f5e3Sopenharmony_ci V(ArrayPop, ARRAY_POP, GateFlags::NONE_FLAG, 1, 1, 2) \ 1674514f5e3Sopenharmony_ci V(ArraySlice, ARRAY_SLICE, GateFlags::NONE_FLAG, 1, 1, 4) \ 1684514f5e3Sopenharmony_ci V(ArraySort, ARRAY_SORT, GateFlags::NONE_FLAG, 1, 1, 2) \ 1694514f5e3Sopenharmony_ci MCR_BINARY_GATE_META_DATA_CACHE_LIST(V) 1704514f5e3Sopenharmony_ci 1714514f5e3Sopenharmony_ci#define MCR_GATE_META_DATA_LIST_WITH_PC_OFFSET(V) \ 1724514f5e3Sopenharmony_ci V(TypedCallBuiltin, TYPED_CALL_BUILTIN, GateFlags::CHECKABLE, 1, 1, value) \ 1734514f5e3Sopenharmony_ci V(TypedCallBuiltinSideEffect, TYPED_CALL_BUILTIN_SIDE_EFFECT, GateFlags::HAS_FRAME_STATE, 1, 1, value) 1744514f5e3Sopenharmony_ci 1754514f5e3Sopenharmony_ci#define MCR_GATE_META_DATA_LIST_FOR_CALL(V) \ 1764514f5e3Sopenharmony_ci V(TypedCall, TYPEDCALL, GateFlags::HAS_FRAME_STATE, 1, 1, value) \ 1774514f5e3Sopenharmony_ci V(TypedFastCall, TYPEDFASTCALL, GateFlags::HAS_FRAME_STATE, 1, 1, value) 1784514f5e3Sopenharmony_ci 1794514f5e3Sopenharmony_ci#define MCR_GATE_META_DATA_LIST_WITH_VALUE(V) \ 1804514f5e3Sopenharmony_ci V(LoadConstOffset, LOAD_CONST_OFFSET, GateFlags::NO_WRITE, 0, 1, 1) \ 1814514f5e3Sopenharmony_ci V(LoadHClassFromConstpool, LOAD_HCLASS_FROM_CONSTPOOL, GateFlags::NO_WRITE, 0, 1, 1) \ 1824514f5e3Sopenharmony_ci V(StoreConstOffset, STORE_CONST_OFFSET, GateFlags::NONE_FLAG, 0, 1, 2) \ 1834514f5e3Sopenharmony_ci V(LoadElement, LOAD_ELEMENT, GateFlags::NO_WRITE, 1, 1, 2) \ 1844514f5e3Sopenharmony_ci V(StoreElement, STORE_ELEMENT, GateFlags::NONE_FLAG, 1, 1, 3) \ 1854514f5e3Sopenharmony_ci V(StoreMemory, STORE_MEMORY, GateFlags::NONE_FLAG, 1, 1, 3) \ 1864514f5e3Sopenharmony_ci V(ObjectTypeCheck, OBJECT_TYPE_CHECK, GateFlags::CHECKABLE, 1, 1, 2) \ 1874514f5e3Sopenharmony_ci V(StableArrayCheck, STABLE_ARRAY_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 1884514f5e3Sopenharmony_ci V(LoadArrayLength, LOAD_ARRAY_LENGTH, GateFlags::NO_WRITE, 1, 1, 1) \ 1894514f5e3Sopenharmony_ci V(ElementsKindCheck, ELEMENTSKIND_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 1904514f5e3Sopenharmony_ci V(StoreProperty, STORE_PROPERTY, GateFlags::NONE_FLAG, 1, 1, 3) \ 1914514f5e3Sopenharmony_ci V(PrototypeCheck, PROTOTYPE_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 1924514f5e3Sopenharmony_ci V(RangeGuard, RANGE_GUARD, GateFlags::NO_WRITE, 1, 1, 1) \ 1934514f5e3Sopenharmony_ci V(GetGlobalEnvObj, GET_GLOBAL_ENV_OBJ, GateFlags::NO_WRITE, 0, 1, 1) \ 1944514f5e3Sopenharmony_ci V(GetGlobalEnvObjHClass, GET_GLOBAL_ENV_OBJ_HCLASS, GateFlags::NO_WRITE, 0, 1, 1) \ 1954514f5e3Sopenharmony_ci V(GetGlobalConstantValue, GET_GLOBAL_CONSTANT_VALUE, GateFlags::NO_WRITE, 0, 1, 0) \ 1964514f5e3Sopenharmony_ci V(HClassStableArrayCheck, HCLASS_STABLE_ARRAY_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 1974514f5e3Sopenharmony_ci V(HeapAlloc, HEAP_ALLOC, GateFlags::NONE_FLAG, 0, 1, 2) \ 1984514f5e3Sopenharmony_ci V(RangeCheckPredicate, RANGE_CHECK_PREDICATE, GateFlags::CHECKABLE, 1, 1, 2) \ 1994514f5e3Sopenharmony_ci V(BuiltinPrototypeHClassCheck, BUILTIN_PROTOTYPE_HCLASS_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 2004514f5e3Sopenharmony_ci V(IsSpecificObjectType, IS_SPECIFIC_OBJECT_TYPE, GateFlags::NO_WRITE, 1, 1, 1) \ 2014514f5e3Sopenharmony_ci V(LoadBuiltinObject, LOAD_BUILTIN_OBJECT, GateFlags::CHECKABLE, 1, 1, 0) \ 2024514f5e3Sopenharmony_ci V(StringAdd, STRING_ADD, GateFlags::NO_WRITE, 1, 1, 2) \ 2034514f5e3Sopenharmony_ci V(ArrayForEach, ARRAY_FOR_EACH, GateFlags::NONE_FLAG, 1, 1, 3) \ 2044514f5e3Sopenharmony_ci V(ArrayFilter, ARRAY_FILTER, GateFlags::NONE_FLAG, 1, 1, 4) \ 2054514f5e3Sopenharmony_ci V(ArrayFindOrFindIndex, ARRAY_FIND_OR_FINDINDEX, GateFlags::NONE_FLAG, 1, 1, 4) \ 2064514f5e3Sopenharmony_ci V(ArrayMap, ARRAY_MAP, GateFlags::NONE_FLAG, 1, 1, 4) \ 2074514f5e3Sopenharmony_ci V(ArraySome, ARRAY_SOME, GateFlags::NONE_FLAG, 1, 1, 3) \ 2084514f5e3Sopenharmony_ci V(ArrayEvery, ARRAY_EVERY, GateFlags::NONE_FLAG, 1, 1, 3) 2094514f5e3Sopenharmony_ci 2104514f5e3Sopenharmony_ci#define MCR_GATE_META_DATA_LIST_WITH_BOOL(V) \ 2114514f5e3Sopenharmony_ci V(LoadProperty, LOAD_PROPERTY, GateFlags::NO_WRITE, 1, 1, 2) \ 2124514f5e3Sopenharmony_ci V(MonoStorePropertyLookUpProto, MONO_STORE_PROPERTY_LOOK_UP_PROTO, GateFlags::HAS_FRAME_STATE, 1, 1, 5) \ 2134514f5e3Sopenharmony_ci V(MonoStoreProperty, MONO_STORE_PROPERTY, GateFlags::HAS_FRAME_STATE, 1, 1, 6) 2144514f5e3Sopenharmony_ci 2154514f5e3Sopenharmony_ci#define MCR_GATE_META_DATA_LIST_WITH_GATE_TYPE(V) \ 2164514f5e3Sopenharmony_ci V(PrimitiveTypeCheck, PRIMITIVE_TYPE_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 2174514f5e3Sopenharmony_ci V(TypedArrayCheck, TYPED_ARRAY_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 2184514f5e3Sopenharmony_ci V(LoadTypedArrayLength, LOAD_TYPED_ARRAY_LENGTH, GateFlags::NO_WRITE, 1, 1, 1) \ 2194514f5e3Sopenharmony_ci V(TypedBinaryOp, TYPED_BINARY_OP, GateFlags::NO_WRITE, 1, 1, 2) \ 2204514f5e3Sopenharmony_ci V(TypedUnaryOp, TYPED_UNARY_OP, GateFlags::NO_WRITE, 1, 1, 1) \ 2214514f5e3Sopenharmony_ci V(TypedConditionJump, TYPED_CONDITION_JUMP, GateFlags::NO_WRITE, 1, 1, 1) \ 2224514f5e3Sopenharmony_ci V(TypedConvert, TYPE_CONVERT, GateFlags::NO_WRITE, 1, 1, 1) \ 2234514f5e3Sopenharmony_ci V(CheckAndConvert, CHECK_AND_CONVERT, GateFlags::CHECKABLE, 1, 1, 1) \ 2244514f5e3Sopenharmony_ci V(Convert, CONVERT, GateFlags::NONE_FLAG, 0, 0, 1) \ 2254514f5e3Sopenharmony_ci V(JSInlineTargetTypeCheck, JSINLINETARGET_TYPE_CHECK, GateFlags::CHECKABLE, 1, 1, 2) \ 2264514f5e3Sopenharmony_ci V(TypeOfCheck, TYPE_OF_CHECK, GateFlags::CHECKABLE, 1, 1, 1) \ 2274514f5e3Sopenharmony_ci V(TypeOf, TYPE_OF, GateFlags::NO_WRITE, 1, 1, 0) \ 2284514f5e3Sopenharmony_ci V(TypedCallTargetCheckOp, TYPED_CALLTARGETCHECK_OP, GateFlags::CHECKABLE, 1, 1, 2) 2294514f5e3Sopenharmony_ci 2304514f5e3Sopenharmony_ci// NOTICE-PGO: wx typedcalltargetcheckop can adopt different number of valueIn 2314514f5e3Sopenharmony_ci 2324514f5e3Sopenharmony_ci#define MCR_GATE_META_DATA_LIST_WITH_ONE_PARAMETER(V) \ 2334514f5e3Sopenharmony_ci MCR_GATE_META_DATA_LIST_WITH_VALUE(V) \ 2344514f5e3Sopenharmony_ci MCR_GATE_META_DATA_LIST_WITH_GATE_TYPE(V) 2354514f5e3Sopenharmony_ci 2364514f5e3Sopenharmony_ci#define MCR_GATE_META_DATA_LIST_WITH_VALUE_IN(V) \ 2374514f5e3Sopenharmony_ci V(TypedCreateObjWithBuffer, TYPED_CREATE_OBJ_WITH_BUFFER, GateFlags::CHECKABLE, 1, 1, value) \ 2384514f5e3Sopenharmony_ci V(TypedCallCheck, TYPED_CALL_CHECK, GateFlags::CHECKABLE, 1, 1, value) \ 2394514f5e3Sopenharmony_ci V(FunctionPrototypeCall, FUNCTION_PROTOTYPE_CALL, GateFlags::NONE_FLAG, 1, 1, value) 2404514f5e3Sopenharmony_ci 2414514f5e3Sopenharmony_ci#define MCR_GATE_META_DATA_LIST_WITH_SIZE(V) \ 2424514f5e3Sopenharmony_ci MCR_GATE_META_DATA_LIST_WITH_VALUE_IN(V) 2434514f5e3Sopenharmony_ci} 2444514f5e3Sopenharmony_ci 2454514f5e3Sopenharmony_ci#endif // ECMASCRIPT_COMPILER_MCR_OPCODE_H 246