Mercurial > hg > graal-jvmci-8
changeset 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 | 57646377e480 |
children | ea58bbafd5b9 |
files | src/cpu/sparc/vm/jvmciCodeInstaller_sparc.cpp |
diffstat | 1 files changed, 11 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/cpu/sparc/vm/jvmciCodeInstaller_sparc.cpp Wed Oct 21 13:47:47 2015 +0200 +++ b/src/cpu/sparc/vm/jvmciCodeInstaller_sparc.cpp Wed Oct 21 15:05:59 2015 +0200 @@ -186,14 +186,19 @@ // 32..63: Thirty-two single precision float registers // 64..95: Thirty-two double precision float registers // 96..111: Sixteen quad precision float registers - if (jvmci_reg < RegisterImpl::number_of_registers) { + if (jvmci_reg < 32) { return as_Register(jvmci_reg)->as_VMReg(); } else { - jint jvmciFloatRegisterNumber = jvmci_reg - RegisterImpl::number_of_registers; - jint floatRegisterNumber = MIN2(32, jvmciFloatRegisterNumber); - floatRegisterNumber += 2 * MAX2(0, MIN2(32, jvmciFloatRegisterNumber) - 32); - floatRegisterNumber += 4 * MAX2(0, MIN2(32, jvmciFloatRegisterNumber) - 32 - 32); - floatRegisterNumber = floatRegisterNumber % FloatRegisterImpl::number_of_registers; + jint floatRegisterNumber; + if(jvmci_reg < 64) { // Single precision + floatRegisterNumber = jvmci_reg - 32; + } else if(jvmci_reg < 96) { + floatRegisterNumber = 2 * (jvmci_reg - 64); + } else if(jvmci_reg < 112) { + floatRegisterNumber = 4 * (jvmci_reg - 96); + } else { + fatal("Unknown jvmci register"); + } return as_FloatRegister(floatRegisterNumber)->as_VMReg(); } }