< prev index next >

src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp

Print this page
*** 84,20 ***
      bool     check_exceptions          // whether to check for pending exceptions after return
    );
  
    void call_VM_helper(Register oop_result, address entry_point, int number_of_arguments, bool check_exceptions = true);
  
    enum KlassDecodeMode {
      KlassDecodeNone,
      KlassDecodeZero,
      KlassDecodeXor,
      KlassDecodeMovk
    };
  
!   KlassDecodeMode klass_decode_mode();
  
   private:
    static KlassDecodeMode _klass_decode_mode;
  
   public:
    MacroAssembler(CodeBuffer* code) : Assembler(code) {}
  
--- 84,31 ---
      bool     check_exceptions          // whether to check for pending exceptions after return
    );
  
    void call_VM_helper(Register oop_result, address entry_point, int number_of_arguments, bool check_exceptions = true);
  
+  public:
+ 
    enum KlassDecodeMode {
      KlassDecodeNone,
      KlassDecodeZero,
      KlassDecodeXor,
      KlassDecodeMovk
    };
  
!   // Return the current narrow Klass pointer decode mode. Initialized on first call.
+   static KlassDecodeMode klass_decode_mode();
+ 
+   // Given an arbitrary base address, return the KlassDecodeMode that would be used. Return KlassDecodeNone
+   // if base address is not valid for encoding.
+   static KlassDecodeMode klass_decode_mode_for_base(address base);
+ 
+   // Returns a static string
+   static const char* describe_klass_decode_mode(KlassDecodeMode mode);
  
   private:
+ 
    static KlassDecodeMode _klass_decode_mode;
  
   public:
    MacroAssembler(CodeBuffer* code) : Assembler(code) {}
  

*** 837,12 ***
  
    void load_method_holder_cld(Register rresult, Register rmethod);
    void load_method_holder(Register holder, Register method);
  
    // oop manipulations
    void load_klass(Register dst, Register src);
-   void store_klass(Register dst, Register src);
    void cmp_klass(Register oop, Register trial_klass, Register tmp);
  
    void resolve_weak_handle(Register result, Register tmp1, Register tmp2);
    void resolve_oop_handle(Register result, Register tmp1, Register tmp2);
    void load_mirror(Register dst, Register method, Register tmp1, Register tmp2);
--- 848,12 ---
  
    void load_method_holder_cld(Register rresult, Register rmethod);
    void load_method_holder(Register holder, Register method);
  
    // oop manipulations
+   void load_nklass(Register dst, Register src);
    void load_klass(Register dst, Register src);
    void cmp_klass(Register oop, Register trial_klass, Register tmp);
  
    void resolve_weak_handle(Register result, Register tmp1, Register tmp2);
    void resolve_oop_handle(Register result, Register tmp1, Register tmp2);
    void load_mirror(Register dst, Register method, Register tmp1, Register tmp2);

*** 864,12 ***
    // currently unimplemented
    // Used for storing NULL. All other oop constants should be
    // stored using routines that take a jobject.
    void store_heap_oop_null(Address dst);
  
-   void store_klass_gap(Register dst, Register src);
- 
    // This dummy is to prevent a call to store_heap_oop from
    // converting a zero (like NULL) into a Register by giving
    // the compiler two choices it can't resolve
  
    void store_heap_oop(Address dst, void* dummy);
--- 875,10 ---

*** 1556,10 ***
--- 1565,13 ---
  
  private:
    // Check the current thread doesn't need a cross modify fence.
    void verify_cross_modify_fence_not_required() PRODUCT_RETURN;
  
+ public:
+   void fast_lock(Register obj, Register hdr, Register t1, Register t2, Register t3, Label& slow);
+   void fast_unlock(Register obj, Register hdr, Register t1, Register t2, Label& slow);
  };
  
  #ifdef ASSERT
  inline bool AbstractAssembler::pd_check_instruction_mark() { return false; }
  #endif
< prev index next >