Home | History | Annotate | Download | only in compiler
      1 // Copyright 2015 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "src/compiler/frame.h"
      6 
      7 #include "src/compiler/linkage.h"
      8 #include "src/compiler/register-allocator.h"
      9 #include "src/macro-assembler.h"
     10 
     11 namespace v8 {
     12 namespace internal {
     13 namespace compiler {
     14 
     15 Frame::Frame(int fixed_frame_size_in_slots, const CallDescriptor* descriptor)
     16     : needs_frame_((descriptor != nullptr) &&
     17                    descriptor->RequiresFrameAsIncoming()),
     18       frame_slot_count_(fixed_frame_size_in_slots),
     19       callee_saved_slot_count_(0),
     20       spill_slot_count_(0),
     21       allocated_registers_(nullptr),
     22       allocated_double_registers_(nullptr) {}
     23 
     24 
     25 void FrameAccessState::SetFrameAccessToDefault() {
     26   if (frame()->needs_frame() && !FLAG_turbo_sp_frame_access) {
     27     SetFrameAccessToFP();
     28   } else {
     29     SetFrameAccessToSP();
     30   }
     31 }
     32 
     33 
     34 FrameOffset FrameAccessState::GetFrameOffset(int spill_slot) const {
     35   const int offset =
     36       (StandardFrameConstants::kFixedSlotCountAboveFp - spill_slot - 1) *
     37       kPointerSize;
     38   if (access_frame_with_fp()) {
     39     DCHECK(frame()->needs_frame());
     40     return FrameOffset::FromFramePointer(offset);
     41   } else {
     42     // No frame. Retrieve all parameters relative to stack pointer.
     43     int sp_offset =
     44         offset + ((frame()->GetSpToFpSlotCount() + sp_delta()) * kPointerSize);
     45     return FrameOffset::FromStackPointer(sp_offset);
     46   }
     47 }
     48 
     49 
     50 }  // namespace compiler
     51 }  // namespace internal
     52 }  // namespace v8
     53