Files
sdk/runtime/vm/stack_frame_arm64.h
T
Vyacheslav Egorov 9e81e4bfe5 [vm/compiler] Move BlockBuilder from graph_intrinsifier.cc to a header.
This helper class can be used for building IL in SSA form. It was
previously used to build intrinsic IL, but it can also be used to
build IL for tests.

This move required introducing a constant that describes offset
of the last parameter from SP value on entry (kLastParamFrom

This CL also changes the meaning of ParameterInstr(index, SPREG) to be
[SP + index + kLastParamSlotFromEntrySp], where previously it was
something like [SP + (index - 1) + kLastParamSlotFromEntrySp].

Change-Id: Ib75ecb3a94f9cde74d6f91028d3cbea8f5e4bc42
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98336
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-04-03 15:42:56 +00:00

55 lines
2.0 KiB
C++

// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#ifndef RUNTIME_VM_STACK_FRAME_ARM64_H_
#define RUNTIME_VM_STACK_FRAME_ARM64_H_
namespace dart {
/* ARM64 Dart Frame Layout
| | <- TOS
Callee frame | ... |
| saved PP |
| code object |
| saved FP | (FP of current frame)
| saved PC | (PC of current frame)
+--------------------+
Current frame | ... T| <- SP of current frame
| first local T|
| caller's PP T|
| code object T| (current frame's code object)
| caller's FP | <- FP of current frame
| caller's LR | (PC of caller frame)
+--------------------+
Caller frame | last parameter | <- SP of caller frame
| ... |
T against a slot indicates it needs to be traversed during GC.
*/
static const int kDartFrameFixedSize = 4; // PP, FP, LR, PC marker.
static const int kSavedPcSlotFromSp = -1;
static const int kFirstObjectSlotFromFp = -1; // Used by GC to traverse stack.
static const int kLastFixedObjectSlotFromFp = -2;
static const int kFirstLocalSlotFromFp = -3;
static const int kSavedCallerPpSlotFromFp = -2;
static const int kPcMarkerSlotFromFp = -1;
static const int kSavedCallerFpSlotFromFp = 0;
static const int kSavedCallerPcSlotFromFp = 1;
static const int kParamEndSlotFromFp = 1; // One slot past last parameter.
static const int kCallerSpSlotFromFp = 2;
static const int kLastParamSlotFromEntrySp = 0;
// Entry and exit frame layout.
static const int kExitLinkSlotFromEntryFp = -22;
COMPILE_ASSERT(kAbiPreservedCpuRegCount == 10);
COMPILE_ASSERT(kAbiPreservedFpuRegCount == 8);
} // namespace dart
#endif // RUNTIME_VM_STACK_FRAME_ARM64_H_