Mercurial > hg > truffle
diff src/cpu/sparc/vm/vtableStubs_sparc.cpp @ 6725:da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author | coleenp |
---|---|
date | Sat, 01 Sep 2012 13:25:18 -0400 |
parents | 1d7922586cf6 |
children | 8e47bac5643a |
line wrap: on
line diff
--- a/src/cpu/sparc/vm/vtableStubs_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/vtableStubs_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -69,12 +69,12 @@ address npe_addr = __ pc(); __ load_klass(O0, G3_scratch); - // set methodOop (in case of interpreted method), and destination address + // set Method* (in case of interpreted method), and destination address #ifndef PRODUCT if (DebugVtables) { Label L; // check offset vs vtable length - __ ld(G3_scratch, instanceKlass::vtable_length_offset()*wordSize, G5); + __ ld(G3_scratch, InstanceKlass::vtable_length_offset()*wordSize, G5); __ cmp_and_br_short(G5, vtable_index*vtableEntry::size(), Assembler::greaterUnsigned, Assembler::pt, L); __ set(vtable_index, O2); __ call_VM(noreg, CAST_FROM_FN_PTR(address, bad_compiled_vtable_index), O0, O2); @@ -96,11 +96,11 @@ address ame_addr = __ pc(); // if the vtable entry is null, the method is abstract // NOTE: for vtable dispatches, the vtable entry will never be null. - __ ld_ptr(G5_method, in_bytes(methodOopDesc::from_compiled_offset()), G3_scratch); + __ ld_ptr(G5_method, in_bytes(Method::from_compiled_offset()), G3_scratch); // jump to target (either compiled code or c2iadapter) __ JMP(G3_scratch, 0); - // load methodOop (in case we call c2iadapter) + // load Method* (in case we call c2iadapter) __ delayed()->nop(); masm->flush(); @@ -130,7 +130,7 @@ CodeBuffer cb(s->entry_point(), sparc_code_length); MacroAssembler* masm = new MacroAssembler(&cb); - Register G3_klassOop = G3_scratch; + Register G3_Klass = G3_scratch; Register G5_interface = G5; // Passed in as an argument Label search; @@ -141,8 +141,7 @@ // get receiver klass (also an implicit null-check) address npe_addr = __ pc(); - __ load_klass(O0, G3_klassOop); - __ verify_oop(G3_klassOop); + __ load_klass(O0, G3_Klass); // Push a new window to get some temp registers. This chops the head of all // my 64-bit %o registers in the LION build, but this is OK because no longs @@ -160,7 +159,7 @@ Register L5_method = L5; __ lookup_interface_method(// inputs: rec. class, interface, itable index - G3_klassOop, G5_interface, itable_index, + G3_Klass, G5_interface, itable_index, // outputs: method, scan temp. reg L5_method, L2, L3, throw_icce); @@ -169,9 +168,8 @@ if (DebugVtables) { Label L01; __ br_notnull_short(L5_method, Assembler::pt, L01); - __ stop("methodOop is null"); + __ stop("Method* is null"); __ bind(L01); - __ verify_oop(L5_method); } #endif @@ -182,9 +180,9 @@ // Restore registers *before* the AME point. address ame_addr = __ pc(); // if the vtable entry is null, the method is abstract - __ ld_ptr(G5_method, in_bytes(methodOopDesc::from_compiled_offset()), G3_scratch); + __ ld_ptr(G5_method, in_bytes(Method::from_compiled_offset()), G3_scratch); - // G5_method: methodOop + // G5_method: Method* // O0: Receiver // G3_scratch: entry point __ JMP(G3_scratch, 0); @@ -221,13 +219,13 @@ // ld;ld;ld,jmp,nop const int basic = 5*BytesPerInstWord + // shift;add for load_klass (only shift with zero heap based) - (UseCompressedOops ? + (UseCompressedKlassPointers ? ((Universe::narrow_oop_base() == NULL) ? BytesPerInstWord : 2*BytesPerInstWord) : 0); return basic + slop; } else { const int basic = (28 LP64_ONLY(+ 6)) * BytesPerInstWord + // shift;add for load_klass (only shift with zero heap based) - (UseCompressedOops ? + (UseCompressedKlassPointers ? ((Universe::narrow_oop_base() == NULL) ? BytesPerInstWord : 2*BytesPerInstWord) : 0); return (basic + slop); }