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