Thu, 10 Mar 2011 14:56:11 -0500
7011490: Wrong computation results in Test6880034
Summary: incorrect handling of c2i deoptimization on little endian architectures
Reviewed-by: never
src/share/vm/c1/c1_LinearScan.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/share/vm/c1/c1_LinearScan.cpp Mon Mar 07 16:03:28 2011 -0500 1.2 +++ b/src/share/vm/c1/c1_LinearScan.cpp Thu Mar 10 14:56:11 2011 -0500 1.3 @@ -2703,7 +2703,7 @@ 1.4 assert(_fpu_stack_allocator != NULL, "must be present"); 1.5 opr = _fpu_stack_allocator->to_fpu_stack(opr); 1.6 1.7 - assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation (only fpu_regnrHi is used)"); 1.8 + assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation (only fpu_regnrLo is used)"); 1.9 #endif 1.10 #ifdef SPARC 1.11 assert(opr->fpu_regnrLo() == opr->fpu_regnrHi() + 1, "assumed in calculation (only fpu_regnrHi is used)"); 1.12 @@ -2715,7 +2715,12 @@ 1.13 assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation (only fpu_regnrHi is used)"); 1.14 #endif 1.15 1.16 +#ifdef VM_LITTLE_ENDIAN 1.17 + VMReg rname_first = frame_map()->fpu_regname(opr->fpu_regnrLo()); 1.18 +#else 1.19 VMReg rname_first = frame_map()->fpu_regname(opr->fpu_regnrHi()); 1.20 +#endif 1.21 + 1.22 #ifdef _LP64 1.23 first = new LocationValue(Location::new_reg_loc(Location::dbl, rname_first)); 1.24 second = &_int_0_scope_value;