Index: src/arm/lithium-codegen-arm.h |
diff --git a/src/arm/lithium-codegen-arm.h b/src/arm/lithium-codegen-arm.h |
index 921285b0d228c8d023038e2422e9772d735135b3..e7afcbf1bbc675f86b59b364581ee88dc8025e0d 100644 |
--- a/src/arm/lithium-codegen-arm.h |
+++ b/src/arm/lithium-codegen-arm.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; |
@@ -84,12 +94,12 @@ class LCodeGen BASE_EMBEDDED { |
Register EmitLoadRegister(LOperand* op, Register scratch); |
// LOperand must be a double register. |
- DoubleRegister ToDoubleRegister(LOperand* op) const; |
+ DwVfpRegister ToDoubleRegister(LOperand* op) const; |
// LOperand is loaded into dbl_scratch, unless already a double register. |
- DoubleRegister EmitLoadDoubleRegister(LOperand* op, |
- SwVfpRegister flt_scratch, |
- DoubleRegister dbl_scratch); |
+ DwVfpRegister EmitLoadDoubleRegister(LOperand* op, |
+ SwVfpRegister flt_scratch, |
+ DwVfpRegister dbl_scratch); |
int ToInteger32(LConstantOperand* op) const; |
double ToDouble(LConstantOperand* op) const; |
Operand ToOperand(LOperand* op); |
@@ -193,7 +203,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, ...); |
@@ -275,7 +285,7 @@ class LCodeGen BASE_EMBEDDED { |
void PopulateDeoptimizationLiteralsWithInlinedFunctions(); |
Register ToRegister(int index) const; |
- DoubleRegister ToDoubleRegister(int index) const; |
+ DwVfpRegister ToDoubleRegister(int index) const; |
// Specific math operations - used from DoUnaryMathOperation. |
void EmitIntegerMathAbs(LUnaryMathOperation* instr); |
@@ -308,7 +318,7 @@ class LCodeGen BASE_EMBEDDED { |
void EmitGoto(int block); |
void EmitBranch(int left_block, int right_block, Condition cc); |
void EmitNumberUntagD(Register input, |
- DoubleRegister result, |
+ DwVfpRegister result, |
bool deoptimize_on_undefined, |
bool deoptimize_on_minus_zero, |
LEnvironment* env); |
@@ -369,11 +379,15 @@ class LCodeGen BASE_EMBEDDED { |
LEnvironment* environment); |
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(); |
@@ -402,6 +416,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. |
@@ -417,6 +432,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; |