hotspot/src/cpu/sparc/vm/assembler_sparc.hpp
changeset 13728 882756847a04
parent 13391 30245956af37
child 13743 154102966e74
--- a/hotspot/src/cpu/sparc/vm/assembler_sparc.hpp	Fri Aug 31 16:39:35 2012 -0700
+++ b/hotspot/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