Mercurial > hg > truffle
diff src/cpu/sparc/vm/assembler_sparc.hpp @ 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 | 75f33eecc1b3 |
line wrap: on
line diff
--- a/src/cpu/sparc/vm/assembler_sparc.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/assembler_sparc.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -152,7 +152,7 @@ // is added and removed as needed in the frame code. // Interface to signature handler REGISTER_DECLARATION(Register, Llocals , L7); // pointer to locals for signature handler -REGISTER_DECLARATION(Register, Lmethod , L6); // methodOop when calling signature handler +REGISTER_DECLARATION(Register, Lmethod , L6); // Method* when calling signature handler #else REGISTER_DECLARATION(Register, Lesp , L0); // expression stack pointer @@ -351,7 +351,7 @@ // Convert the raw encoding form into the form expected by the // constructor for Address. - static Address make_raw(int base, int index, int scale, int disp, bool disp_is_oop); + static Address make_raw(int base, int index, int scale, int disp, relocInfo::relocType disp_reloc); friend class Assembler; }; @@ -438,11 +438,11 @@ _rspec(rspec_from_rtype(rtype, (address) addr)) {} #endif - AddressLiteral(oop addr, relocInfo::relocType rtype = relocInfo::none) + AddressLiteral(Metadata* addr, relocInfo::relocType rtype = relocInfo::none) : _address((address) addr), _rspec(rspec_from_rtype(rtype, (address) addr)) {} - AddressLiteral(oop* addr, relocInfo::relocType rtype = relocInfo::none) + AddressLiteral(Metadata** addr, relocInfo::relocType rtype = relocInfo::none) : _address((address) addr), _rspec(rspec_from_rtype(rtype, (address) addr)) {} @@ -478,7 +478,7 @@ public: ExternalAddress(address target) : AddressLiteral(target, reloc_for_target( target)) {} - ExternalAddress(oop* target) : AddressLiteral(target, reloc_for_target((address) target)) {} + ExternalAddress(Metadata** target) : AddressLiteral(target, reloc_for_target((address) target)) {} }; inline Address RegisterImpl::address_in_saved_window() const { @@ -2311,11 +2311,14 @@ void call_VM_leaf(Register thread_cache, address entry_point, Register arg_1, Register arg_2, Register arg_3); void get_vm_result (Register oop_result); - void get_vm_result_2(Register oop_result); + void get_vm_result_2(Register metadata_result); // vm result is currently getting hijacked to for oop preservation void set_vm_result(Register oop_result); + // Emit the CompiledIC call idiom + void ic_call(address entry, bool emit_delay = true); + // if call_VM_base was called with check_exceptions=false, then call // check_and_forward_exception to handle exceptions when it is safe void check_and_forward_exception(Register scratch_reg); @@ -2392,6 +2395,13 @@ inline void set_oop_constant (jobject obj, Register d); // uses constant_oop_address inline void set_oop (const AddressLiteral& obj_addr, Register d); // same as load_address + // metadata in code that we have to keep track of + AddressLiteral allocate_metadata_address(Metadata* obj); // allocate_index + AddressLiteral constant_metadata_address(Metadata* obj); // find_index + inline void set_metadata (Metadata* obj, Register d); // uses allocate_metadata_address + inline void set_metadata_constant (Metadata* obj, Register d); // uses constant_metadata_address + inline void set_metadata (const AddressLiteral& obj_addr, Register d); // same as load_address + void set_narrow_oop( jobject obj, Register d ); // nop padding