|
7 | 7 | #error BAIL_OUT_KIND, BAIL_OUT_KIND_VALUE, and BAIL_OUT_KIND_VALUE_LAST must be defined before including this file. |
8 | 8 | #endif |
9 | 9 | /* kind */ /* allowed bits */ |
10 | | -BAIL_OUT_KIND(BailOutInvalid, IR::BailOutOnResultConditions | IR::BailOutForArrayBits | IR::BailOutForDebuggerBits | IR::BailOutMarkTempObject) |
| 10 | +BAIL_OUT_KIND(BailOutInvalid, IR::BailOutOnResultConditions | IR::BailOutForArrayBits | IR::BailOutForDebuggerBits | IR::BailOutMarkTempObject | IR::LazyBailOut) |
11 | 11 | BAIL_OUT_KIND(BailOutIntOnly, IR::BailOutMarkTempObject) |
12 | 12 | BAIL_OUT_KIND(BailOutNumberOnly, IR::BailOutMarkTempObject) |
13 | 13 | BAIL_OUT_KIND(BailOutPrimitiveButString, IR::BailOutMarkTempObject) |
14 | | -BAIL_OUT_KIND(BailOutOnImplicitCalls, IR::BailOutForArrayBits) |
15 | | -BAIL_OUT_KIND(BailOutOnImplicitCallsPreOp, (IR::BailOutOnResultConditions | IR::BailOutForArrayBits | IR::BailOutMarkTempObject) & ~IR::BailOutOnArrayAccessHelperCall ) |
| 14 | +BAIL_OUT_KIND(BailOutOnImplicitCalls, IR::BailOutForArrayBits | IR::LazyBailOut) |
| 15 | +BAIL_OUT_KIND(BailOutOnImplicitCallsPreOp, (IR::BailOutOnResultConditions | IR::BailOutForArrayBits | IR::BailOutMarkTempObject | IR::LazyBailOut) & ~IR::BailOutOnArrayAccessHelperCall ) |
16 | 16 | BAIL_OUT_KIND(BailOutOnNotPrimitive, IR::BailOutMarkTempObject) |
17 | 17 | BAIL_OUT_KIND(BailOutOnMemOpError, IR::BailOutForArrayBits) |
18 | 18 | BAIL_OUT_KIND(BailOutOnInlineFunction, 0) |
19 | 19 | BAIL_OUT_KIND(BailOutOnNoProfile, 0) |
20 | 20 | BAIL_OUT_KIND(BailOutOnPolymorphicInlineFunction, 0) |
21 | 21 | BAIL_OUT_KIND(BailOutOnFailedPolymorphicInlineTypeCheck, 0) |
22 | 22 | BAIL_OUT_KIND(BailOutShared, 0) |
23 | | -BAIL_OUT_KIND(BailOutOnNotArray, IR::BailOutOnMissingValue) |
24 | | -BAIL_OUT_KIND(BailOutOnNotNativeArray, IR::BailOutOnMissingValue) |
25 | | -BAIL_OUT_KIND(BailOutConventionalTypedArrayAccessOnly, IR::BailOutMarkTempObject) |
26 | | -BAIL_OUT_KIND(BailOutOnIrregularLength, IR::BailOutMarkTempObject) |
| 23 | +BAIL_OUT_KIND(BailOutOnNotArray, IR::BailOutOnMissingValue | IR::LazyBailOut) |
| 24 | +BAIL_OUT_KIND(BailOutOnNotNativeArray, IR::BailOutOnMissingValue | IR::LazyBailOut) |
| 25 | +BAIL_OUT_KIND(BailOutConventionalTypedArrayAccessOnly, IR::BailOutMarkTempObject | IR::LazyBailOut) |
| 26 | +BAIL_OUT_KIND(BailOutOnIrregularLength, IR::BailOutMarkTempObject | IR::LazyBailOut) |
27 | 27 | BAIL_OUT_KIND(BailOutCheckThis, 0) |
28 | 28 | BAIL_OUT_KIND(BailOutOnTaggedValue, 0) |
29 | | -BAIL_OUT_KIND(BailOutFailedTypeCheck, IR::BailOutMarkTempObject) |
30 | | -BAIL_OUT_KIND(BailOutFailedEquivalentTypeCheck, IR::BailOutMarkTempObject) |
| 29 | +BAIL_OUT_KIND(BailOutFailedTypeCheck, IR::BailOutMarkTempObject | IR::LazyBailOut) |
| 30 | +BAIL_OUT_KIND(BailOutFailedEquivalentTypeCheck, IR::BailOutMarkTempObject | IR::LazyBailOut) |
31 | 31 | BAIL_OUT_KIND(BailOutInjected, 0) |
32 | 32 | BAIL_OUT_KIND(BailOutExpectingInteger, 0) |
33 | 33 | BAIL_OUT_KIND(BailOutExpectingString, 0) |
34 | 34 | BAIL_OUT_KIND(BailOutFailedInlineTypeCheck, IR::BailOutMarkTempObject) |
35 | | -BAIL_OUT_KIND(BailOutFailedFixedFieldTypeCheck, IR::BailOutMarkTempObject) |
36 | | -BAIL_OUT_KIND(BailOutFailedFixedFieldCheck, 0) |
37 | | -BAIL_OUT_KIND(BailOutFailedEquivalentFixedFieldTypeCheck, IR::BailOutMarkTempObject) |
| 35 | +BAIL_OUT_KIND(BailOutFailedFixedFieldTypeCheck, IR::BailOutMarkTempObject | IR::LazyBailOut) |
| 36 | +BAIL_OUT_KIND(BailOutFailedFixedFieldCheck, IR::LazyBailOut) |
| 37 | +BAIL_OUT_KIND(BailOutFailedEquivalentFixedFieldTypeCheck, IR::BailOutMarkTempObject | IR::LazyBailOut) |
38 | 38 | BAIL_OUT_KIND(BailOutOnFloor, 0) |
39 | 39 | BAIL_OUT_KIND(BailOnModByPowerOf2, 0) |
40 | 40 | BAIL_OUT_KIND(BailOnIntMin, 0) |
41 | 41 | BAIL_OUT_KIND(BailOnDivResultNotInt, IR::BailOutOnDivByZero | IR::BailOutOnDivOfMinInt | IR::BailOutOnNegativeZero) |
42 | 42 | BAIL_OUT_KIND(BailOnSimpleJitToFullJitLoopBody, 0) |
43 | 43 | BAIL_OUT_KIND(BailOutFailedCtorGuardCheck, 0) |
44 | 44 | BAIL_OUT_KIND(BailOutOnFailedHoistedBoundCheck, 0) |
45 | | -BAIL_OUT_KIND(LazyBailOut, 0) |
46 | 45 | BAIL_OUT_KIND(BailOutOnFailedHoistedLoopCountBasedBoundCheck, 0) |
47 | 46 | BAIL_OUT_KIND(BailOutForGeneratorYield, 0) |
48 | 47 | BAIL_OUT_KIND(BailOutOnException, 0) |
@@ -110,9 +109,11 @@ BAIL_OUT_KIND_VALUE(BailOutOnDivSrcConditions, BailOutOnDivByZero | BailOutOnDiv |
110 | 109 |
|
111 | 110 | #define BAIL_OUT_KIND_MISC_BIT_START BAIL_OUT_KIND_DIV_SRC_CONDITIONS_BIT_START + 2 |
112 | 111 | BAIL_OUT_KIND_VALUE(BailOutMarkTempObject, 1 << (BAIL_OUT_KIND_MISC_BIT_START + 0)) |
| 112 | +// this is the most significant bit, must cast it to unsigned int so that the compiler knows we are not using a negative number |
| 113 | +BAIL_OUT_KIND_VALUE(LazyBailOut, (uint) 1 << (BAIL_OUT_KIND_MISC_BIT_START + 1)) |
| 114 | +BAIL_OUT_KIND_VALUE(BailOutMisc, BailOutMarkTempObject | LazyBailOut) |
113 | 115 |
|
114 | | - |
115 | | -BAIL_OUT_KIND_VALUE_LAST(BailOutKindBits, BailOutMarkTempObject | BailOutOnDivSrcConditions | BailOutOnResultConditions | BailOutForArrayBits | BailOutForDebuggerBits) |
| 116 | +BAIL_OUT_KIND_VALUE_LAST(BailOutKindBits, BailOutMisc | BailOutOnDivSrcConditions | BailOutOnResultConditions | BailOutForArrayBits | BailOutForDebuggerBits) |
116 | 117 |
|
117 | 118 | // Help caller undefine the macros |
118 | 119 | #undef BAIL_OUT_KIND |
|
0 commit comments