1.1 --- a/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Thu Sep 02 11:40:02 2010 -0700 1.2 +++ b/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Fri Sep 03 17:51:07 2010 -0700 1.3 @@ -3331,10 +3331,8 @@ 1.4 __ stf(FloatRegisterImpl::D, Freturn0, saved_Freturn0_addr); 1.5 #if !defined(_LP64) 1.6 #if defined(COMPILER2) 1.7 - if (!TieredCompilation) { 1.8 - // 32-bit 1-register longs return longs in G1 1.9 - __ stx(Greturn1, saved_Greturn1_addr); 1.10 - } 1.11 + // 32-bit 1-register longs return longs in G1 1.12 + __ stx(Greturn1, saved_Greturn1_addr); 1.13 #endif 1.14 __ set_last_Java_frame(SP, noreg); 1.15 __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, Deoptimization::unpack_frames), G2_thread, G4deopt_mode); 1.16 @@ -3347,24 +3345,15 @@ 1.17 __ reset_last_Java_frame(); 1.18 __ ldf(FloatRegisterImpl::D, saved_Freturn0_addr, Freturn0); 1.19 1.20 - // In tiered we never use C2 to compile methods returning longs so 1.21 - // the result is where we expect it already. 1.22 - 1.23 #if !defined(_LP64) && defined(COMPILER2) 1.24 // In 32 bit, C2 returns longs in G1 so restore the saved G1 into 1.25 - // I0/I1 if the return value is long. In the tiered world there is 1.26 - // a mismatch between how C1 and C2 return longs compiles and so 1.27 - // currently compilation of methods which return longs is disabled 1.28 - // for C2 and so is this code. Eventually C1 and C2 will do the 1.29 - // same thing for longs in the tiered world. 1.30 - if (!TieredCompilation) { 1.31 - Label not_long; 1.32 - __ cmp(O0,T_LONG); 1.33 - __ br(Assembler::notEqual, false, Assembler::pt, not_long); 1.34 - __ delayed()->nop(); 1.35 - __ ldd(saved_Greturn1_addr,I0); 1.36 - __ bind(not_long); 1.37 - } 1.38 + // I0/I1 if the return value is long. 1.39 + Label not_long; 1.40 + __ cmp(O0,T_LONG); 1.41 + __ br(Assembler::notEqual, false, Assembler::pt, not_long); 1.42 + __ delayed()->nop(); 1.43 + __ ldd(saved_Greturn1_addr,I0); 1.44 + __ bind(not_long); 1.45 #endif 1.46 __ ret(); 1.47 __ delayed()->restore();