src/cpu/sparc/vm/vtableStubs_sparc.cpp

changeset 548
ba764ed4b6f2
parent 451
f8236e79048a
child 631
d1605aabd0a1
     1.1 --- a/src/cpu/sparc/vm/vtableStubs_sparc.cpp	Fri Apr 11 09:56:35 2008 -0400
     1.2 +++ b/src/cpu/sparc/vm/vtableStubs_sparc.cpp	Sun Apr 13 17:43:42 2008 -0400
     1.3 @@ -60,7 +60,7 @@
     1.4  
     1.5    // get receiver klass
     1.6    address npe_addr = __ pc();
     1.7 -  __ ld_ptr(O0, oopDesc::klass_offset_in_bytes(), G3_scratch);
     1.8 +  __ load_klass(O0, G3_scratch);
     1.9  
    1.10    // set methodOop (in case of interpreted method), and destination address
    1.11    int entry_offset = instanceKlass::vtable_start_offset() + vtable_index*vtableEntry::size();
    1.12 @@ -131,7 +131,7 @@
    1.13  
    1.14    // get receiver klass (also an implicit null-check)
    1.15    address npe_addr = __ pc();
    1.16 -  __ ld_ptr(O0, oopDesc::klass_offset_in_bytes(), G3_klassOop);
    1.17 +  __ load_klass(O0, G3_klassOop);
    1.18    __ verify_oop(G3_klassOop);
    1.19  
    1.20    // Push a new window to get some temp registers.  This chops the head of all
    1.21 @@ -237,11 +237,16 @@
    1.22    else {
    1.23      const int slop = 2*BytesPerInstWord; // sethi;add  (needed for long offsets)
    1.24      if (is_vtable_stub) {
    1.25 -      const int basic = 5*BytesPerInstWord; // ld;ld;ld,jmp,nop
    1.26 +      // ld;ld;ld,jmp,nop
    1.27 +      const int basic = 5*BytesPerInstWord +
    1.28 +                        // shift;add for load_klass
    1.29 +                        (UseCompressedOops ? 2*BytesPerInstWord : 0);
    1.30        return basic + slop;
    1.31      } else {
    1.32        // save, ld, ld, sll, and, add, add, ld, cmp, br, add, ld, add, ld, ld, jmp, restore, sethi, jmpl, restore
    1.33 -      const int basic = (20 LP64_ONLY(+ 6)) * BytesPerInstWord;
    1.34 +      const int basic = (20 LP64_ONLY(+ 6)) * BytesPerInstWord +
    1.35 +                        // shift;add for load_klass
    1.36 +                        (UseCompressedOops ? 2*BytesPerInstWord : 0);
    1.37        return (basic + slop);
    1.38      }
    1.39    }

mercurial