diff options
Diffstat (limited to 'deps/v8/src/compiler/frame.cc')
-rw-r--r-- | deps/v8/src/compiler/frame.cc | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/deps/v8/src/compiler/frame.cc b/deps/v8/src/compiler/frame.cc index b08030b8c6..3d93e1528f 100644 --- a/deps/v8/src/compiler/frame.cc +++ b/deps/v8/src/compiler/frame.cc @@ -13,17 +13,32 @@ namespace internal { namespace compiler { Frame::Frame(int fixed_frame_size_in_slots, const CallDescriptor* descriptor) - : needs_frame_((descriptor != nullptr) && - descriptor->RequiresFrameAsIncoming()), - frame_slot_count_(fixed_frame_size_in_slots), + : frame_slot_count_(fixed_frame_size_in_slots), callee_saved_slot_count_(0), spill_slot_count_(0), allocated_registers_(nullptr), allocated_double_registers_(nullptr) {} +int Frame::AlignFrame(int alignment) { + DCHECK_EQ(0, callee_saved_slot_count_); + int alignment_slots = alignment / kPointerSize; + int delta = alignment_slots - (frame_slot_count_ & (alignment_slots - 1)); + if (delta != alignment_slots) { + frame_slot_count_ += delta; + if (spill_slot_count_ != 0) { + spill_slot_count_ += delta; + } + } + return delta; +} + +void FrameAccessState::MarkHasFrame(bool state) { + has_frame_ = state; + SetFrameAccessToDefault(); +} void FrameAccessState::SetFrameAccessToDefault() { - if (frame()->needs_frame() && !FLAG_turbo_sp_frame_access) { + if (has_frame() && !FLAG_turbo_sp_frame_access) { SetFrameAccessToFP(); } else { SetFrameAccessToSP(); @@ -32,16 +47,12 @@ void FrameAccessState::SetFrameAccessToDefault() { FrameOffset FrameAccessState::GetFrameOffset(int spill_slot) const { - const int offset = - (StandardFrameConstants::kFixedSlotCountAboveFp - spill_slot - 1) * - kPointerSize; + const int frame_offset = FrameSlotToFPOffset(spill_slot); if (access_frame_with_fp()) { - DCHECK(frame()->needs_frame()); - return FrameOffset::FromFramePointer(offset); + return FrameOffset::FromFramePointer(frame_offset); } else { // No frame. Retrieve all parameters relative to stack pointer. - int sp_offset = - offset + ((frame()->GetSpToFpSlotCount() + sp_delta()) * kPointerSize); + int sp_offset = frame_offset + GetSPToFPOffset(); return FrameOffset::FromStackPointer(sp_offset); } } |