--- old/src/cpu/sparc/vm/sharedRuntime_sparc.cpp 2009-09-21 07:26:41.800819190 -0700 +++ new/src/cpu/sparc/vm/sharedRuntime_sparc.cpp 2009-09-21 07:26:41.609228201 -0700 @@ -1109,8 +1109,14 @@ // 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;