109 @Override
110 public RegisterAttributes[] getAttributesMap() {
111 return attributesMap.clone();
112 }
113
114 private final RegisterArray javaGeneralParameterRegisters = new RegisterArray(r1, r2, r3, r4, r5, r6, r7, r0);
115 private final RegisterArray nativeGeneralParameterRegisters = new RegisterArray(r0, r1, r2, r3, r4, r5, r6, r7);
116 private final RegisterArray simdParameterRegisters = new RegisterArray(v0, v1, v2, v3, v4, v5, v6, v7);
117
118 public static final Register inlineCacheRegister = rscratch2;
119
120 /**
121 * Vtable stubs expect the metaspace Method in r12.
122 */
123 public static final Register metaspaceMethodRegister = r12;
124
125 public static final Register heapBaseRegister = r27;
126 public static final Register threadRegister = r28;
127 public static final Register fp = r29;
128
129 private static final RegisterArray reservedRegisters
130 = new RegisterArray(rscratch1, rscratch2, threadRegister, fp, lr, r31, zr, sp);
131
132 private static RegisterArray initAllocatable(Architecture arch, boolean reserveForHeapBase) {
133 RegisterArray allRegisters = arch.getAvailableValueRegisters();
134 Register[] registers = new Register[allRegisters.size() - reservedRegisters.size() - (reserveForHeapBase ? 1 : 0)];
135 List<Register> reservedRegistersList = reservedRegisters.asList();
136
137 int idx = 0;
138 for (Register reg : allRegisters) {
139 if (reservedRegistersList.contains(reg)) {
140 // skip reserved registers
141 continue;
142 }
143 assert !(reg.equals(threadRegister) || reg.equals(fp) || reg.equals(lr) || reg.equals(r31) || reg.equals(zr) || reg.equals(sp));
144 if (reserveForHeapBase && reg.equals(heapBaseRegister)) {
145 // skip heap base register
146 continue;
147 }
148
149 registers[idx++] = reg;
150 }
|
109 @Override
110 public RegisterAttributes[] getAttributesMap() {
111 return attributesMap.clone();
112 }
113
114 private final RegisterArray javaGeneralParameterRegisters = new RegisterArray(r1, r2, r3, r4, r5, r6, r7, r0);
115 private final RegisterArray nativeGeneralParameterRegisters = new RegisterArray(r0, r1, r2, r3, r4, r5, r6, r7);
116 private final RegisterArray simdParameterRegisters = new RegisterArray(v0, v1, v2, v3, v4, v5, v6, v7);
117
118 public static final Register inlineCacheRegister = rscratch2;
119
120 /**
121 * Vtable stubs expect the metaspace Method in r12.
122 */
123 public static final Register metaspaceMethodRegister = r12;
124
125 public static final Register heapBaseRegister = r27;
126 public static final Register threadRegister = r28;
127 public static final Register fp = r29;
128
129 private static final RegisterArray reservedRegisters = new RegisterArray(rscratch1, rscratch2, threadRegister, fp, lr, r31, zr, sp);
130
131 private static RegisterArray initAllocatable(Architecture arch, boolean reserveForHeapBase) {
132 RegisterArray allRegisters = arch.getAvailableValueRegisters();
133 Register[] registers = new Register[allRegisters.size() - reservedRegisters.size() - (reserveForHeapBase ? 1 : 0)];
134 List<Register> reservedRegistersList = reservedRegisters.asList();
135
136 int idx = 0;
137 for (Register reg : allRegisters) {
138 if (reservedRegistersList.contains(reg)) {
139 // skip reserved registers
140 continue;
141 }
142 assert !(reg.equals(threadRegister) || reg.equals(fp) || reg.equals(lr) || reg.equals(r31) || reg.equals(zr) || reg.equals(sp));
143 if (reserveForHeapBase && reg.equals(heapBaseRegister)) {
144 // skip heap base register
145 continue;
146 }
147
148 registers[idx++] = reg;
149 }
|