Skip to content

Commit 08964e2

Browse files
rmacnak-googleCommit Queue
authored andcommitted
[vm, compiler] Make the leaf runtime call spill set more consistent between architectures.
Remove unnecessary spill of FpuTMP. Remove unnecessary spill of TMP on x64. TEST=ci Change-Id: I6e56e4dfe1a817ff2c1f53229be305640b89eee6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/446740 Reviewed-by: Alexander Markov <[email protected]> Commit-Queue: Ryan Macnak <[email protected]>
1 parent d513ebb commit 08964e2

File tree

6 files changed

+11
-9
lines changed

6 files changed

+11
-9
lines changed

runtime/vm/compiler/assembler/assembler_arm64.cc

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1864,10 +1864,8 @@ void Assembler::CallRuntime(const RuntimeEntry& entry,
18641864
}
18651865
}
18661866

1867-
// FPU: Only the bottom 64-bits of v8-v15 are preserved by the caller. The upper
1868-
// bits might be in use by Dart, so we save the whole register.
18691867
static const RegisterSet kRuntimeCallSavedRegisters(kDartVolatileCpuRegs,
1870-
kAllFpuRegistersList);
1868+
kDartVolatileFpuRegs);
18711869

18721870
#undef __
18731871
#define __ assembler_->

runtime/vm/compiler/assembler/assembler_riscv.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4889,7 +4889,7 @@ void Assembler::CallRuntime(const RuntimeEntry& entry,
48894889
}
48904890

48914891
static const RegisterSet kRuntimeCallSavedRegisters(kDartVolatileCpuRegs,
4892-
kAbiVolatileFpuRegs);
4892+
kDartVolatileFpuRegs);
48934893

48944894
#define __ assembler_->
48954895

runtime/vm/compiler/assembler/assembler_x64.cc

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2076,6 +2076,9 @@ void Assembler::CallRuntime(const RuntimeEntry& entry,
20762076
}
20772077
}
20782078

2079+
static const RegisterSet kRuntimeCallSavedRegisters(kDartVolatileCpuRegs,
2080+
kDartVolatileFpuRegs);
2081+
20792082
#define __ assembler_->
20802083

20812084
LeafRuntimeScope::LeafRuntimeScope(Assembler* assembler,
@@ -2086,8 +2089,7 @@ LeafRuntimeScope::LeafRuntimeScope(Assembler* assembler,
20862089
__ EnterFrame(0);
20872090

20882091
if (preserve_registers_) {
2089-
// TODO(vegorov): avoid saving FpuTMP, it is used only as scratch.
2090-
__ PushRegisters(kVolatileRegisterSet);
2092+
__ PushRegisters(kRuntimeCallSavedRegisters);
20912093
} else {
20922094
// These registers must always be preserved.
20932095
ASSERT(IsCalleeSavedRegister(THR));
@@ -2115,10 +2117,9 @@ LeafRuntimeScope::~LeafRuntimeScope() {
21152117
// RSP might have been modified to reserve space for arguments
21162118
// and ensure proper alignment of the stack frame.
21172119
// We need to restore it before restoring registers.
2118-
__ leaq(RSP, Address(RBP, -kVolatileRegisterSet.SpillSize()));
2120+
__ leaq(RSP, Address(RBP, -kRuntimeCallSavedRegisters.SpillSize()));
21192121

2120-
// TODO(vegorov): avoid saving FpuTMP, it is used only as scratch.
2121-
__ PopRegisters(kVolatileRegisterSet);
2122+
__ PopRegisters(kRuntimeCallSavedRegisters);
21222123
} else {
21232124
const intptr_t kPushedRegistersSize =
21242125
(target::frame_layout.dart_fixed_frame_size - 2) *

runtime/vm/constants_arm64.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,7 @@ const RegList kAbiPartiallyVolatileFpuRegs =
556556
R(V8) | R(V9) | R(V10) | R(V11) | R(V12) | R(V13) | R(V14) | R(V15);
557557
const RegList kAbiVolatileFpuRegs =
558558
kAbiFullyVolatileFpuRegs | kAbiPartiallyVolatileFpuRegs;
559+
const RegList kDartVolatileFpuRegs = kAbiVolatileFpuRegs & ~R(FpuTMP);
559560

560561
constexpr int kStoreBufferWrapperSize = 32;
561562

runtime/vm/constants_riscv.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,7 @@ constexpr RegList kAbiPreservedFpuRegs = R(FS0) | R(FS1) | R(FS2) | R(FS3) |
530530
constexpr int kAbiPreservedFpuRegCount = 12;
531531
constexpr intptr_t kReservedFpuRegisters = 0;
532532
constexpr intptr_t kNumberOfReservedFpuRegisters = 0;
533+
constexpr RegList kDartVolatileFpuRegs = kAbiVolatileFpuRegs & ~R(FpuTMP);
533534

534535
constexpr int kStoreBufferWrapperSize = 26;
535536

runtime/vm/constants_x64.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,7 @@ const RegList kAbiVolatileFpuRegs = kAllFpuRegistersList;
474474
// Registers available to Dart that are not preserved by runtime calls.
475475
const RegList kDartVolatileCpuRegs =
476476
kDartAvailableCpuRegs & ~kAbiPreservedCpuRegs;
477+
const RegList kDartVolatileFpuRegs = kAbiVolatileFpuRegs & ~R(FpuTMP);
477478

478479
enum ScaleFactor {
479480
TIMES_1 = 0,

0 commit comments

Comments
 (0)