< prev index next >
src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot.amd64/src/jdk/vm/ci/hotspot/amd64/AMD64HotSpotRegisterConfig.java
Print this page
@@ -43,10 +43,11 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import jdk.vm.ci.code.Architecture;
import jdk.vm.ci.code.CallingConvention;
import jdk.vm.ci.code.CallingConvention.Type;
@@ -117,18 +118,21 @@
* Some ABIs (e.g. Windows) require a so-called "home space", that is a save area on the stack
* to store the argument registers
*/
private final boolean needsNativeStackHomeSpace;
+ private static final Register[] reservedRegisters = {rsp, r15};
+
private static Register[] initAllocatable(Architecture arch, boolean reserveForHeapBase) {
Register[] allRegisters = arch.getAvailableValueRegisters();
- Register[] registers = new Register[allRegisters.length - (reserveForHeapBase ? 3 : 2)];
+ Register[] registers = new Register[allRegisters.length - reservedRegisters.length - (reserveForHeapBase ? 1 : 0)];
+ List<Register> reservedRegistersList = Arrays.asList(reservedRegisters);
int idx = 0;
for (Register reg : allRegisters) {
- if (reg.equals(rsp) || reg.equals(r15)) {
- // skip stack pointer and thread register
+ if (reservedRegistersList.contains(reg)) {
+ // skip reserved registers
continue;
}
if (reserveForHeapBase && reg.equals(r12)) {
// skip heap base register
continue;
< prev index next >