| Index: runtime/vm/flow_graph_compiler.cc
|
| ===================================================================
|
| --- runtime/vm/flow_graph_compiler.cc (revision 21565)
|
| +++ runtime/vm/flow_graph_compiler.cc (working copy)
|
| @@ -729,20 +729,15 @@
|
| bool blocked_registers[kNumberOfCpuRegisters];
|
|
|
| // Mark all available registers free.
|
| - for (intptr_t i = 0; i < kFirstFreeCpuRegister; i++) {
|
| - blocked_registers[i] = true;
|
| - }
|
| - for (intptr_t i = kFirstFreeCpuRegister; i <= kLastFreeCpuRegister; i++) {
|
| + for (intptr_t i = 0; i < kNumberOfCpuRegisters; i++) {
|
| blocked_registers[i] = false;
|
| }
|
| - for (intptr_t i = kLastFreeCpuRegister + 1; i < kNumberOfCpuRegisters; i++) {
|
| - blocked_registers[i] = true;
|
| - }
|
|
|
| // Mark all fixed input, temp and output registers as used.
|
| for (intptr_t i = 0; i < locs->input_count(); i++) {
|
| Location loc = locs->in(i);
|
| if (loc.IsRegister()) {
|
| + // Check that a register is not specified twice in the summary.
|
| ASSERT(!blocked_registers[loc.reg()]);
|
| blocked_registers[loc.reg()] = true;
|
| }
|
| @@ -751,6 +746,7 @@
|
| for (intptr_t i = 0; i < locs->temp_count(); i++) {
|
| Location loc = locs->temp(i);
|
| if (loc.IsRegister()) {
|
| + // Check that a register is not specified twice in the summary.
|
| ASSERT(!blocked_registers[loc.reg()]);
|
| blocked_registers[loc.reg()] = true;
|
| }
|
| @@ -773,6 +769,14 @@
|
| blocked_registers[PP] = true;
|
| }
|
|
|
| + // Block all non-free registers.
|
| + for (intptr_t i = 0; i < kFirstFreeCpuRegister; i++) {
|
| + blocked_registers[i] = true;
|
| + }
|
| + for (intptr_t i = kLastFreeCpuRegister + 1; i < kNumberOfCpuRegisters; i++) {
|
| + blocked_registers[i] = true;
|
| + }
|
| +
|
| // Allocate all unallocated input locations.
|
| const bool should_pop = !instr->IsPushArgument();
|
| for (intptr_t i = locs->input_count() - 1; i >= 0; i--) {
|
|
|