• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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