comparison src/cpu/sparc/vm/jvmciCodeInstaller_sparc.cpp @ 22698:37505a836aaf

[SPARC] Fix VMReg number caluclation in CodeInstaller::get_hotspot_reg
author Stefan Anzinger <stefan.anzinger@oracle.com>
date Wed, 21 Oct 2015 15:05:59 +0200
parents 3da4f19cf93b
children 316e768645c0
comparison
equal deleted inserted replaced
22697:57646377e480 22698:37505a836aaf
184 // JVMCI Registers are numbered as follows: 184 // JVMCI Registers are numbered as follows:
185 // 0..31: Thirty-two General Purpose registers (CPU Registers) 185 // 0..31: Thirty-two General Purpose registers (CPU Registers)
186 // 32..63: Thirty-two single precision float registers 186 // 32..63: Thirty-two single precision float registers
187 // 64..95: Thirty-two double precision float registers 187 // 64..95: Thirty-two double precision float registers
188 // 96..111: Sixteen quad precision float registers 188 // 96..111: Sixteen quad precision float registers
189 if (jvmci_reg < RegisterImpl::number_of_registers) { 189 if (jvmci_reg < 32) {
190 return as_Register(jvmci_reg)->as_VMReg(); 190 return as_Register(jvmci_reg)->as_VMReg();
191 } else { 191 } else {
192 jint jvmciFloatRegisterNumber = jvmci_reg - RegisterImpl::number_of_registers; 192 jint floatRegisterNumber;
193 jint floatRegisterNumber = MIN2(32, jvmciFloatRegisterNumber); 193 if(jvmci_reg < 64) { // Single precision
194 floatRegisterNumber += 2 * MAX2(0, MIN2(32, jvmciFloatRegisterNumber) - 32); 194 floatRegisterNumber = jvmci_reg - 32;
195 floatRegisterNumber += 4 * MAX2(0, MIN2(32, jvmciFloatRegisterNumber) - 32 - 32); 195 } else if(jvmci_reg < 96) {
196 floatRegisterNumber = floatRegisterNumber % FloatRegisterImpl::number_of_registers; 196 floatRegisterNumber = 2 * (jvmci_reg - 64);
197 } else if(jvmci_reg < 112) {
198 floatRegisterNumber = 4 * (jvmci_reg - 96);
199 } else {
200 fatal("Unknown jvmci register");
201 }
197 return as_FloatRegister(floatRegisterNumber)->as_VMReg(); 202 return as_FloatRegister(floatRegisterNumber)->as_VMReg();
198 } 203 }
199 } 204 }
200 205
201 bool CodeInstaller::is_general_purpose_reg(VMReg hotspotRegister) { 206 bool CodeInstaller::is_general_purpose_reg(VMReg hotspotRegister) {