Index: src/mips/lithium-codegen-mips.h |
diff --git a/src/mips/lithium-codegen-mips.h b/src/mips/lithium-codegen-mips.h |
index 7363eb8efe26f0fd9b5fb47721d3c7c01fe5ca6d..36f8b6468c0bdadf0b7976543080c5a4e11ab9d3 100644 |
--- a/src/mips/lithium-codegen-mips.h |
+++ b/src/mips/lithium-codegen-mips.h |
@@ -61,6 +61,7 @@ class LCodeGen BASE_EMBEDDED { |
deferred_(8, info->zone()), |
osr_pc_offset_(-1), |
last_lazy_deopt_pc_(0), |
+ frame_is_built_(false), |
safepoints_(info->zone()), |
resolver_(this), |
expected_safepoint_kind_(Safepoint::kSimple) { |
@@ -76,6 +77,15 @@ class LCodeGen BASE_EMBEDDED { |
Heap* heap() const { return isolate()->heap(); } |
Zone* zone() const { return zone_; } |
+ bool NeedsEagerFrame() const { |
+ return GetStackSlotCount() > 0 || |
+ info()->is_non_deferred_calling() || |
+ !info()->IsStub(); |
+ } |
+ bool NeedsDeferredFrame() const { |
+ return !NeedsEagerFrame() && info()->is_deferred_calling(); |
+ } |
+ |
// Support for converting LOperands to assembler types. |
// LOperand must be a register. |
Register ToRegister(LOperand* op) const; |
@@ -189,7 +199,7 @@ class LCodeGen BASE_EMBEDDED { |
Register temporary2); |
int GetStackSlotCount() const { return chunk()->spill_slot_count(); } |
- int GetParameterCount() const { return scope()->num_parameters(); } |
+ int GetParameterCount() const { return info()->num_parameters(); } |
void Abort(const char* reason); |
void Comment(const char* format, ...); |
@@ -368,11 +378,15 @@ class LCodeGen BASE_EMBEDDED { |
int* offset); |
struct JumpTableEntry { |
- explicit inline JumpTableEntry(Address entry) |
+ inline JumpTableEntry(Address entry, bool frame, bool is_lazy) |
: label(), |
- address(entry) { } |
+ address(entry), |
+ needs_frame(frame), |
+ is_lazy_deopt(is_lazy) { } |
Label label; |
Address address; |
+ bool needs_frame; |
+ bool is_lazy_deopt; |
}; |
void EnsureSpaceForLazyDeopt(); |
@@ -401,6 +415,7 @@ class LCodeGen BASE_EMBEDDED { |
ZoneList<LDeferredCode*> deferred_; |
int osr_pc_offset_; |
int last_lazy_deopt_pc_; |
+ bool frame_is_built_; |
// Builder that keeps track of safepoints in the code. The table |
// itself is emitted at the end of the generated code. |
@@ -416,6 +431,7 @@ class LCodeGen BASE_EMBEDDED { |
PushSafepointRegistersScope(LCodeGen* codegen, |
Safepoint::Kind kind) |
: codegen_(codegen) { |
+ ASSERT(codegen_->info()->is_calling()); |
ASSERT(codegen_->expected_safepoint_kind_ == Safepoint::kSimple); |
codegen_->expected_safepoint_kind_ = kind; |