| Index: runtime/vm/flow_graph_compiler_arm.cc
|
| diff --git a/runtime/vm/flow_graph_compiler_arm.cc b/runtime/vm/flow_graph_compiler_arm.cc
|
| index c918bed2408b7b6d0d9b5e6e17572a427c003cb5..78d4fd68b1b1c58cdd1aafdb47703194fc6dea0e 100644
|
| --- a/runtime/vm/flow_graph_compiler_arm.cc
|
| +++ b/runtime/vm/flow_graph_compiler_arm.cc
|
| @@ -1446,23 +1446,25 @@ void FlowGraphCompiler::SaveLiveRegisters(LocationSummary* locs) {
|
| ASSERT(offset == (fpu_regs_count * kFpuRegisterSize));
|
| }
|
|
|
| - // Store general purpose registers with the lowest register number at the
|
| + // Store general purpose registers with the highest register number at the
|
| // lowest address.
|
| - const intptr_t cpu_registers = locs->live_registers()->cpu_registers();
|
| - ASSERT((cpu_registers & ~kAllCpuRegistersList) == 0);
|
| - if (cpu_registers != 0) {
|
| - __ PushList(cpu_registers);
|
| + for (intptr_t reg_idx = 0; reg_idx < kNumberOfCpuRegisters; ++reg_idx) {
|
| + Register reg = static_cast<Register>(reg_idx);
|
| + if (locs->live_registers()->ContainsRegister(reg)) {
|
| + __ Push(reg);
|
| + }
|
| }
|
| }
|
|
|
|
|
| void FlowGraphCompiler::RestoreLiveRegisters(LocationSummary* locs) {
|
| - // General purpose registers have the lowest register number at the
|
| + // General purpose registers have the highest register number at the
|
| // lowest address.
|
| - const intptr_t cpu_registers = locs->live_registers()->cpu_registers();
|
| - ASSERT((cpu_registers & ~kAllCpuRegistersList) == 0);
|
| - if (cpu_registers != 0) {
|
| - __ PopList(cpu_registers);
|
| + for (intptr_t reg_idx = kNumberOfCpuRegisters - 1; reg_idx >= 0; --reg_idx) {
|
| + Register reg = static_cast<Register>(reg_idx);
|
| + if (locs->live_registers()->ContainsRegister(reg)) {
|
| + __ Pop(reg);
|
| + }
|
| }
|
|
|
| const intptr_t fpu_regs_count = locs->live_registers()->FpuRegisterCount();
|
|
|