< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.hpp

Print this page
*** 77,10 ***
--- 77,32 ---
    // helpers for FPU flag access
    // tmp is a temporary register, if none is available use noreg
    void save_rax   (Register tmp);
    void restore_rax(Register tmp);
  
+  public:
+ 
+   enum KlassDecodeMode {
+     KlassDecodeNone,
+     KlassDecodeZero,
+     KlassDecodeXor,
+     KlassDecodeAdd
+   };
+ 
+   // 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) {}
  
   // These routines should emit JVMTI PopFrame and ForceEarlyReturn handling code.
   // The implementation is only non-empty for the InterpreterMacroAssembler,

*** 361,13 ***
--- 383,24 ---
    void load_method_holder_cld(Register rresult, Register rmethod);
  
    void load_method_holder(Register holder, Register method);
  
    // oop manipulations
+ #ifdef _LP64
+   void load_nklass(Register dst, Register src);
+ #endif
    void load_klass(Register dst, Register src, Register tmp);
    void store_klass(Register dst, Register src, Register tmp);
  
+   // Compares the Klass pointer of an object to a given Klass (which might be narrow,
+   // depending on UseCompressedClassPointers).
+   void cmp_klass(Register klass, Register dst, Register tmp);
+ 
+   // Compares the Klass pointer of two objects o1 and o2. Result is in the condition flags.
+   // Uses t1 and t2 as temporary registers.
+   void cmp_klass(Register src, Register dst, Register tmp1, Register tmp2);
+ 
    void access_load_at(BasicType type, DecoratorSet decorators, Register dst, Address src,
                        Register tmp1, Register thread_tmp);
    void access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register val,
                         Register tmp1, Register tmp2, Register tmp3);
  
< prev index next >