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