Mercurial > hg > graal-jvmci-8
diff src/cpu/sparc/vm/graalCodeInstaller_sparc.cpp @ 17024:4e2d34d7715b
[SPARC/AMD64] Splitting up oopmap generation for Intel XMM and SPARC Floatingpoint registers
author | Stefan Anzinger <stefan.anzinger@oracle.com> |
---|---|
date | Tue, 02 Sep 2014 17:16:26 -0700 |
parents | 0e34c7fbd288 |
children | c2270ad35f57 |
line wrap: on
line diff
--- a/src/cpu/sparc/vm/graalCodeInstaller_sparc.cpp Tue Sep 02 17:08:14 2014 -0700 +++ b/src/cpu/sparc/vm/graalCodeInstaller_sparc.cpp Tue Sep 02 17:16:26 2014 -0700 @@ -25,6 +25,7 @@ #include "graal/graalRuntime.hpp" #include "graal/graalCompilerToVM.hpp" #include "graal/graalJavaAccess.hpp" +#include "vmreg_sparc.inline.hpp" jint CodeInstaller::pd_next_offset(NativeInstruction* inst, jint pc_offset, oop method) { if (inst->is_call() || inst->is_jump()) { @@ -146,3 +147,22 @@ break; } } + +// convert Graal register indices (as used in oop maps) to HotSpot registers +VMReg CodeInstaller::get_hotspot_reg(jint graal_reg) { + if (graal_reg < RegisterImpl::number_of_registers) { + return as_Register(graal_reg)->as_VMReg(); + } else { + jint floatRegisterNumber = graal_reg - RegisterImpl::number_of_registers; + floatRegisterNumber += MAX2(0, floatRegisterNumber-32); // Beginning with f32, only every second register is going to be addressed + if (floatRegisterNumber < FloatRegisterImpl::number_of_registers) { + return as_FloatRegister(floatRegisterNumber)->as_VMReg(); + } + ShouldNotReachHere(); + return NULL; + } +} + +bool CodeInstaller::is_general_purpose_reg(VMReg hotspotRegister) { + return !hotspotRegister->is_FloatRegister(); +}