1 /* 2 * Copyright (c) 2024 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_DEOPT_TYPE_H 17 #define ECMASCRIPT_COMPILER_DEOPT_TYPE_H 18 19 #include <cstdint> 20 21 namespace panda::ecmascript::kungfu { 22 23 // Don't add before LazyDeopt. 24 #define GATE_META_DATA_DEOPT_REASON(V) \ 25 V(LazyDeopt, LAZYDEOPT) \ 26 V(NotInt1, NOTINT1) \ 27 V(NotInt2, NOTINT2) \ 28 V(NotInt3, NOTINT3) \ 29 V(NotInt4, NOTINT4) \ 30 V(NotInt5, NOTINT5) \ 31 V(NotInt6, NOTINT6) \ 32 V(NotInt7, NOTINT7) \ 33 V(NotDouble1, NOTDOUBLE1) \ 34 V(NotDouble2, NOTDOUBLE2) \ 35 V(NotDouble3, NOTDOUBLE3) \ 36 V(NotNumber1, NOTNUMBER1) \ 37 V(NotNumber2, NOTNUMBER2) \ 38 V(NotNumberOrString, NOTNUMBERORSTRING) \ 39 V(CannotStoreSpecailHole, CANNOTSTORESPECAILHOLE) \ 40 V(NotBool1, NOTBOOL1) \ 41 V(NotBool2, NOTBOOL2) \ 42 V(NotHeapObject1, NOTHEAPOBJECT1) \ 43 V(NotStableArray1, NOTSARRAY1) \ 44 V(NotStableArray2, NOTSARRAY2) \ 45 V(NotStableArray3, NOTSARRAY3) \ 46 V(ElementsKindMismatchedAtLoad, ELEMENSKINDMISMATCHEDATLOAD) \ 47 V(ElementsKindMismatchedAtStore, ELEMENSKINDMISMATCHEDATSTORE) \ 48 V(InconsistentElementsKind, INCONSISTENTELEMENTSKIND) \ 49 V(NotArray1, NOTARRAY1) \ 50 V(NotArray2, NOTARRAY2) \ 51 V(InconsistentOnHeap1, INCONSISTENTONHEAP1) \ 52 V(InconsistentHClass1, INCONSISTENTHCLASS1) \ 53 V(InconsistentHClass2, INCONSISTENTHCLASS2) \ 54 V(InconsistentHClass3, INCONSISTENTHCLASS3) \ 55 V(InconsistentHClass4, INCONSISTENTHCLASS4) \ 56 V(InconsistentHClass5, INCONSISTENTHCLASS5) \ 57 V(InconsistentHClass6, INCONSISTENTHCLASS6) \ 58 V(InconsistentHClass7, INCONSISTENTHCLASS7) \ 59 V(InconsistentHClass8, INCONSISTENTHCLASS8) \ 60 V(InconsistentHClass9, INCONSISTENTHCLASS9) \ 61 V(InconsistentHClass10, INCONSISTENTHCLASS10) \ 62 V(InconsistentHClass11, INCONSISTENTHCLASS11) \ 63 V(InconsistentHClass12, INCONSISTENTHCLASS12) \ 64 V(InconsistentHClass13, INCONSISTENTHCLASS13) \ 65 V(InconsistentHClass14, INCONSISTENTHCLASS14) \ 66 V(NotEcmaObject1, NOTECMAOBJECT1) \ 67 V(NotNewObj1, NOTNEWOBJ1) \ 68 V(NotNewObj2, NOTNEWOBJ2) \ 69 V(NotNewObj3, NOTNEWOBJ3) \ 70 V(NotLegalIndex1, NOTLEGALIDX1) \ 71 V(NotNegativeOverflow1, NOTNEGOV1) \ 72 V(NotCallTargetHeapObject, NOTCALLTARGETHEAPOBJECT) \ 73 V(NotCallTarget1, NOTCALLTGT1) \ 74 V(NotJSCallTarget1, NOTJSCALLTGT1) \ 75 V(NotJSCallTarget2, NOTJSCALLTGT2) \ 76 V(NotJSCallTarget3, NOTJSCALLTGT3) \ 77 V(NotJSCallTarget4, NOTJSCALLTGT4) \ 78 V(NotJSNewCallTarget, NOTJSNEWCALLTGT) \ 79 V(DivideZero1, DIVZERO1) \ 80 V(DivideZero2, DIVZERO2) \ 81 V(InlineFail1, INLINEFAIL1) \ 82 V(InlineFail2, INLINEFAIL2) \ 83 V(InlineSuperFail, INLINESUPERFAIL) \ 84 V(NotJSFastCallTarget1, NOTJSFASTCALLTGT1) \ 85 V(NotJSFastCallTarget2, NOTJSFASTCALLTGT2) \ 86 V(NotJSFastCallTarget3, NOTJSFASTCALLTGT3) \ 87 V(LexVarIsHole1, LEXVARISHOLE1) \ 88 V(ProductIsNegativeZero, PRODUCTISNEGATIVEZERO) \ 89 V(ModZero1, MODZERO1) \ 90 V(RemainderIsNegativeZero, REMAINDERISNEGATIVEZERO) \ 91 V(Int32Overflow1, INT32OVERFLOW1) \ 92 V(NotString1, NOTSTRING1) \ 93 V(NotInternString1, NOTINTERNSTRING1) \ 94 V(InconsistentType1, INCONSISTENTTYPE1) \ 95 V(NotNull1, NOTNULL1) \ 96 V(NotNull2, NOTNULL2) \ 97 V(BuiltinInstanceHClassMismatch, BUILTININSTANCEHCLASSMISMATCH) \ 98 V(BuiltinInstanceHClassMismatch2, BUILTININSTANCEHCLASSMISMATCH2) \ 99 V(BuiltinPrototypeHClassMismatch1, BUILTINPROTOHCLASSMISMATCH1) \ 100 V(BuiltinPrototypeHClassMismatch2, BUILTINPROTOHCLASSMISMATCH2) \ 101 V(PrototypeChanged1, PROTOTYPECHANGED1) \ 102 V(PrototypeChanged2, PROTOTYPECHANGED2) \ 103 V(PrototypeChanged3, PROTOTYPECHANGED3) \ 104 V(PrototypeChanged4, PROTOTYPECHANGED4) \ 105 V(PrimTypePrototypeChanged, PRIMTYPEPROTOTYPECHANGED) \ 106 V(BuiltinIsHole1, BUILTINISHOLE1) \ 107 V(NewBuiltinCtorFail1, NEWBUILTINCTORFAIL1) \ 108 V(NewBuiltinCtorObject, NEWBUILTINCTOROBJECT) \ 109 V(NewBuiltinCtorArray, NEWBUILTINCTORARRAY) \ 110 V(NewBuiltinCtorFloat32Array, NEWBUILTINCTORFLOAT32ARRAY) \ 111 V(NewBuiltinCtorBoolean, NEWBUILTINCTORBOOLEAN) \ 112 V(NewBuiltinCtorMap, NEWBUILTINCTORMAP) \ 113 V(NewBuiltinCtorSet, NEWBUILTINCTORSET) \ 114 V(NewBuiltinCtorDate, NEWBUILTINCTORDATE) \ 115 V(NewBuiltinCtorError, NEWBUILTINCTORERROR) \ 116 V(IsUndefinedOrHole, ISUNDEFINEDORHOLE) \ 117 V(IsNotUndefinedOrHole, ISNOTUNDEFINEDORHOLE) \ 118 V(BuiltinInliningTypeGuard, BUILTIN_INLINING_TYPE_GUARD) \ 119 V(RangeError, RANGE_ERROR) \ 120 V(NotBigInt, NOT_BIG_INT) \ 121 V(OsrLoopExit, OSRLOOPEXIT) \ 122 V(IsNotMap, ISNOTMAP) \ 123 V(IsNotEcmaObject, ISNOTECMAOBJECT) \ 124 V(IsNotDataView, ISNOTDATAVIEW) \ 125 V(IndexLessZero, INDEXLESSZERO) \ 126 V(ArrayBufferIsDetached, ARRAYBUFFERISDETACHED) \ 127 V(TotalSizeOverflow, TOTALSIZEOVERFLOW) \ 128 V(NotJSFunction, NOTJSFUNCTION) \ 129 V(NotSymbol, NOTSYMBOL) \ 130 V(IndexNotInt, INDEXNOTINT) \ 131 V(InitAotFailed, INIT_AOT_FAILED) \ 132 V(NotEcmaObject, NOT_ECMA_OBJECT) \ 133 V(NotCallable, NOTCALLABLE) \ 134 V(ArrayLengthOverMax, ARRAYLENGTHOVERMAX) \ 135 V(ArrayLengthNotWritable, ARRAYLENGTHNOTWRITABLE) \ 136 V(InsufficientProfile, INSUFFICIENTPROFILE) \ 137 V(CallTargetNotCompiled, CALLTARGETNOTCOMPILED) \ 138 V(PropertyBoxInvalid, PROPERTYBOXINVALID) \ 139 V(KeyMissmatch, KEYMISSMATCH) \ 140 V(HotReloadPatchMain, HOTRELOAD_PATCHMAIN) 141 142 enum class DeoptType : uint8_t { 143 NONE = 0, 144 #define DECLARE_DEOPT_TYPE(NAME, TYPE) TYPE, 145 GATE_META_DATA_DEOPT_REASON(DECLARE_DEOPT_TYPE) 146 #undef DECLARE_DEOPT_TYPE 147 }; 148 149 static_assert(static_cast<uint32_t>(DeoptType::LAZYDEOPT) == 1); 150 151 } // namespace panda::ecmascript::kungfu 152 153 #endif // ECMASCRIPT_COMPILER_DEOPT_TYPE_H 154