8037149: C1: getThreadTemp should return a T_LONG register on 64bit
Summary: Fix the type of the register returned by getThreadTemp() to depend on bitness
Reviewed-by: kvn, twisti
--- a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp Mon Mar 10 12:58:02 2014 +0100
+++ b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp Thu Mar 13 14:55:10 2014 -0700
@@ -3320,7 +3320,7 @@
// if tmp is invalid, then the function being called doesn't destroy the thread
if (tmp->is_valid()) {
- __ save_thread(tmp->as_register());
+ __ save_thread(tmp->as_pointer_register());
}
__ call(dest, relocInfo::runtime_call_type);
__ delayed()->nop();
@@ -3328,7 +3328,7 @@
add_call_info_here(info);
}
if (tmp->is_valid()) {
- __ restore_thread(tmp->as_register());
+ __ restore_thread(tmp->as_pointer_register());
}
#ifdef ASSERT
--- a/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp Mon Mar 10 12:58:02 2014 +0100
+++ b/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp Thu Mar 13 14:55:10 2014 -0700
@@ -69,7 +69,7 @@
LIR_Opr LIRGenerator::exceptionOopOpr() { return FrameMap::Oexception_opr; }
LIR_Opr LIRGenerator::exceptionPcOpr() { return FrameMap::Oissuing_pc_opr; }
LIR_Opr LIRGenerator::syncTempOpr() { return new_register(T_OBJECT); }
-LIR_Opr LIRGenerator::getThreadTemp() { return rlock_callee_saved(T_INT); }
+LIR_Opr LIRGenerator::getThreadTemp() { return rlock_callee_saved(NOT_LP64(T_INT) LP64_ONLY(T_LONG)); }
LIR_Opr LIRGenerator::result_register_for(ValueType* type, bool callee) {
LIR_Opr opr;