comparison jvmci/jdk.vm.ci.hotspot.amd64/src/jdk/vm/ci/hotspot/amd64/AMD64HotSpotRegisterConfig.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
43 43
44 import java.util.ArrayList; 44 import java.util.ArrayList;
45 import java.util.Arrays; 45 import java.util.Arrays;
46 import java.util.Collections; 46 import java.util.Collections;
47 import java.util.HashSet; 47 import java.util.HashSet;
48 import java.util.List;
48 import java.util.Set; 49 import java.util.Set;
49 50
50 import jdk.vm.ci.code.Architecture; 51 import jdk.vm.ci.code.Architecture;
51 import jdk.vm.ci.code.CallingConvention; 52 import jdk.vm.ci.code.CallingConvention;
52 import jdk.vm.ci.code.CallingConvention.Type; 53 import jdk.vm.ci.code.CallingConvention.Type;
117 * Some ABIs (e.g. Windows) require a so-called "home space", that is a save area on the stack 118 * Some ABIs (e.g. Windows) require a so-called "home space", that is a save area on the stack
118 * to store the argument registers 119 * to store the argument registers
119 */ 120 */
120 private final boolean needsNativeStackHomeSpace; 121 private final boolean needsNativeStackHomeSpace;
121 122
123 private static final Register[] reservedRegisters = {rsp, r15};
124
122 private static Register[] initAllocatable(Architecture arch, boolean reserveForHeapBase) { 125 private static Register[] initAllocatable(Architecture arch, boolean reserveForHeapBase) {
123 Register[] allRegisters = arch.getAvailableValueRegisters(); 126 Register[] allRegisters = arch.getAvailableValueRegisters();
124 Register[] registers = new Register[allRegisters.length - (reserveForHeapBase ? 3 : 2)]; 127 Register[] registers = new Register[allRegisters.length - reservedRegisters.length - (reserveForHeapBase ? 1 : 0)];
128 List<Register> reservedRegistersList = Arrays.asList(reservedRegisters);
125 129
126 int idx = 0; 130 int idx = 0;
127 for (Register reg : allRegisters) { 131 for (Register reg : allRegisters) {
128 if (reg.equals(rsp) || reg.equals(r15)) { 132 if (reservedRegistersList.contains(reg)) {
129 // skip stack pointer and thread register 133 // skip reserved registers
130 continue; 134 continue;
131 } 135 }
132 if (reserveForHeapBase && reg.equals(r12)) { 136 if (reserveForHeapBase && reg.equals(r12)) {
133 // skip heap base register 137 // skip heap base register
134 continue; 138 continue;