comparison jvmci/jdk.vm.ci.hotspot.sparc/src/jdk/vm/ci/hotspot/sparc/SPARCHotSpotRegisterConfig.java @ 22786:ac649db7fec4

Use a reserved registers array in initAllocatable.
author twisti
date Fri, 22 Jan 2016 12:48:57 -1000
parents 0ab4d816a7f0
children a920338dd4d4
comparison
equal deleted inserted replaced
22785:7d014b014ce7 22786:ac649db7fec4
66 66
67 import java.util.ArrayList; 67 import java.util.ArrayList;
68 import java.util.Arrays; 68 import java.util.Arrays;
69 import java.util.Collections; 69 import java.util.Collections;
70 import java.util.HashSet; 70 import java.util.HashSet;
71 import java.util.List;
71 72
72 import jdk.vm.ci.code.Architecture; 73 import jdk.vm.ci.code.Architecture;
73 import jdk.vm.ci.code.CallingConvention; 74 import jdk.vm.ci.code.CallingConvention;
74 import jdk.vm.ci.code.CallingConvention.Type; 75 import jdk.vm.ci.code.CallingConvention.Type;
75 import jdk.vm.ci.code.Register; 76 import jdk.vm.ci.code.Register;
138 private final Register[] calleeSaveRegisters = { 139 private final Register[] calleeSaveRegisters = {
139 l0, l1, l2, l3, l4, l5, l6, l7, 140 l0, l1, l2, l3, l4, l5, l6, l7,
140 i0, i1, i2, i3, i4, i5, i6, i7}; 141 i0, i1, i2, i3, i4, i5, i6, i7};
141 // @formatter:on 142 // @formatter:on
142 143
144 private static final Register[] reservedRegisters = {sp, g0, g2};
145
143 private static Register[] initAllocatable(Architecture arch, boolean reserveForHeapBase) { 146 private static Register[] initAllocatable(Architecture arch, boolean reserveForHeapBase) {
144 Register[] allRegisters = arch.getAvailableValueRegisters(); 147 Register[] allRegisters = arch.getAvailableValueRegisters();
145 Register[] registers = new Register[allRegisters.length - (reserveForHeapBase ? 4 : 3)]; 148 Register[] registers = new Register[allRegisters.length - reservedRegisters.length - (reserveForHeapBase ? 1 : 0)];
149 List<Register> reservedRegistersList = Arrays.asList(reservedRegisters);
146 150
147 int idx = 0; 151 int idx = 0;
148 for (Register reg : allRegisters) { 152 for (Register reg : allRegisters) {
149 if (reg.equals(sp) || reg.equals(g2) || reg.equals(g0)) { 153 if (reservedRegistersList.contains(reg)) {
150 // skip g0, stack pointer and thread register 154 // skip reserved registers
151 continue; 155 continue;
152 } 156 }
153 if (reserveForHeapBase && reg.equals(g6)) { 157 if (reserveForHeapBase && reg.equals(g6)) {
154 // skip heap base register 158 // skip heap base register
155 continue; 159 continue;