• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
Frame(int fixed_frame_size_in_slots,const CallDescriptor * descriptor)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 
SetFrameAccessToDefault()25 void FrameAccessState::SetFrameAccessToDefault() {
26   if (frame()->needs_frame() && !FLAG_turbo_sp_frame_access) {
27     SetFrameAccessToFP();
28   } else {
29     SetFrameAccessToSP();
30   }
31 }
32 
33 
GetFrameOffset(int spill_slot) const34 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