SUGGESTED FIX
diff -r 6a8ccac44f41 src/cpu/sparc/vm/sharedRuntime_sparc.cpp
--- a/src/cpu/sparc/vm/sharedRuntime_sparc.cpp
+++ b/src/cpu/sparc/vm/sharedRuntime_sparc.cpp
@@ -1109,8 +1109,14 @@ void AdapterGenerator::gen_i2c_adapter(
// Convert stack slot to an SP offset
int st_off = reg2offset(regs[i].first()) + STACK_BIAS;
// Store down the shuffled stack word. Target address _is_ aligned.
- if (!r_2->is_valid()) __ stf(FloatRegisterImpl::S, r_1->as_FloatRegister(), SP, st_off);
- else __ stf(FloatRegisterImpl::D, r_1->as_FloatRegister(), SP, st_off);
+ if (Assembler::is_simm13(st_off)) {
+ if (!r_2->is_valid()) __ stf(FloatRegisterImpl::S, r_1->as_FloatRegister(), SP, st_off);
+ else __ stf(FloatRegisterImpl::D, r_1->as_FloatRegister(), SP, st_off);
+ } else {
+ __ set(st_off, Rdisp);
+ if (!r_2->is_valid()) __ stf(FloatRegisterImpl::S, r_1->as_FloatRegister(), SP, Rdisp);
+ else __ stf(FloatRegisterImpl::D, r_1->as_FloatRegister(), SP, Rdisp);
+ }
}
}
bool made_space = false;
|