7011490: Wrong computation results in Test6880034

Thu, 10 Mar 2011 14:56:11 -0500

author
vladidan
date
Thu, 10 Mar 2011 14:56:11 -0500
changeset 2627
b9684d5ccb52
parent 2618
df1347358fe6
child 2628
bc57bfb5bfad

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;

mercurial