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