aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/frame.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/compiler/frame.cc')
-rw-r--r--deps/v8/src/compiler/frame.cc33
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);
}
}