Index: src/compiler/linkage.cc |
diff --git a/src/compiler/linkage.cc b/src/compiler/linkage.cc |
index 3880f2fa088e2e14ae236b3a678009a8cfd7495d..eaab6aefe40ac8f0c5ddd3fc53e3507bbc26e445 100644 |
--- a/src/compiler/linkage.cc |
+++ b/src/compiler/linkage.cc |
@@ -63,6 +63,9 @@ std::ostream& operator<<(std::ostream& os, const CallDescriptor::Kind& k) { |
case CallDescriptor::kCallAddress: |
os << "Addr"; |
break; |
+ case CallDescriptor::kLazyBailout: |
+ os << "LazyBail"; |
+ break; |
} |
return os; |
} |
@@ -351,6 +354,31 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor( |
} |
+CallDescriptor* Linkage::GetLazyBailoutDescriptor(Zone* zone) { |
+ const size_t return_count = 0; |
+ const size_t parameter_count = 0; |
+ |
+ LocationSignature::Builder locations(zone, return_count, parameter_count); |
+ MachineSignature::Builder types(zone, return_count, parameter_count); |
+ |
+ // The target is ignored, but we need to give some values here. |
+ MachineType target_type = kMachAnyTagged; |
+ LinkageLocation target_loc = regloc(kJSFunctionRegister); |
+ return new (zone) CallDescriptor( // -- |
+ CallDescriptor::kLazyBailout, // kind |
+ target_type, // target MachineType |
+ target_loc, // target location |
+ types.Build(), // machine_sig |
+ locations.Build(), // location_sig |
+ 0, // stack_parameter_count |
+ Operator::kNoThrow, // properties |
+ kNoCalleeSaved, // callee-saved |
+ kNoCalleeSaved, // callee-saved fp |
+ CallDescriptor::kNeedsFrameState, // flags |
+ "lazy-bailout"); |
+} |
+ |
+ |
CallDescriptor* Linkage::GetJSCallDescriptor(Zone* zone, bool is_osr, |
int js_parameter_count, |
CallDescriptor::Flags flags) { |