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