@@ -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
20812084LeafRuntimeScope::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 ) *
0 commit comments