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