Mercurial > hg > graal-jvmci-8
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; |