< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.hpp

Print this page

 346   void resolve_global_jobject(Register value, Register thread, Register tmp);
 347 
 348   // C 'boolean' to Java boolean: x == 0 ? 0 : 1
 349   void c2bool(Register x);
 350 
 351   // C++ bool manipulation
 352 
 353   void movbool(Register dst, Address src);
 354   void movbool(Address dst, bool boolconst);
 355   void movbool(Address dst, Register src);
 356   void testbool(Register dst);
 357 
 358   void resolve_oop_handle(Register result, Register tmp);
 359   void resolve_weak_handle(Register result, Register tmp);
 360   void load_mirror(Register mirror, Register method, Register tmp);
 361   void load_method_holder_cld(Register rresult, Register rmethod);
 362 
 363   void load_method_holder(Register holder, Register method);
 364 
 365   // oop manipulations



 366   void load_klass(Register dst, Register src, Register tmp);
 367   void store_klass(Register dst, Register src, Register tmp);
 368 








 369   void access_load_at(BasicType type, DecoratorSet decorators, Register dst, Address src,
 370                       Register tmp1, Register thread_tmp);
 371   void access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register val,
 372                        Register tmp1, Register tmp2, Register tmp3);
 373 
 374   void load_heap_oop(Register dst, Address src, Register tmp1 = noreg,
 375                      Register thread_tmp = noreg, DecoratorSet decorators = 0);
 376   void load_heap_oop_not_null(Register dst, Address src, Register tmp1 = noreg,
 377                               Register thread_tmp = noreg, DecoratorSet decorators = 0);
 378   void store_heap_oop(Address dst, Register val, Register tmp1 = noreg,
 379                       Register tmp2 = noreg, Register tmp3 = noreg, DecoratorSet decorators = 0);
 380 
 381   // Used for storing null. All other oop constants should be
 382   // stored using routines that take a jobject.
 383   void store_heap_oop_null(Address dst);
 384 
 385 #ifdef _LP64
 386   void store_klass_gap(Register dst, Register src);
 387 
 388   // This dummy is to prevent a call to store_heap_oop from

2131   void convert_f2i(Register dst, XMMRegister src);
2132   void convert_d2i(Register dst, XMMRegister src);
2133   void convert_f2l(Register dst, XMMRegister src);
2134   void convert_d2l(Register dst, XMMRegister src);
2135   void round_double(Register dst, XMMRegister src, Register rtmp, Register rcx);
2136   void round_float(Register dst, XMMRegister src, Register rtmp, Register rcx);
2137 
2138   void cache_wb(Address line);
2139   void cache_wbsync(bool is_pre);
2140 
2141 #ifdef COMPILER2_OR_JVMCI
2142   void generate_fill_avx3(BasicType type, Register to, Register value,
2143                           Register count, Register rtmp, XMMRegister xtmp);
2144 #endif // COMPILER2_OR_JVMCI
2145 #endif // _LP64
2146 
2147   void vallones(XMMRegister dst, int vector_len);
2148 
2149   void check_stack_alignment(Register sp, const char* msg, unsigned bias = 0, Register tmp = noreg);
2150 
2151   void lightweight_lock(Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2152   void lightweight_unlock(Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2153 };
2154 
2155 /**
2156  * class SkipIfEqual:
2157  *
2158  * Instantiating this class will result in assembly code being output that will
2159  * jump around any code emitted between the creation of the instance and it's
2160  * automatic destruction at the end of a scope block, depending on the value of
2161  * the flag passed to the constructor, which will be checked at run-time.
2162  */
2163 class SkipIfEqual {
2164  private:
2165   MacroAssembler* _masm;
2166   Label _label;
2167 
2168  public:
2169    SkipIfEqual(MacroAssembler*, const bool* flag_addr, bool value, Register rscratch);
2170    ~SkipIfEqual();
2171 };

 346   void resolve_global_jobject(Register value, Register thread, Register tmp);
 347 
 348   // C 'boolean' to Java boolean: x == 0 ? 0 : 1
 349   void c2bool(Register x);
 350 
 351   // C++ bool manipulation
 352 
 353   void movbool(Register dst, Address src);
 354   void movbool(Address dst, bool boolconst);
 355   void movbool(Address dst, Register src);
 356   void testbool(Register dst);
 357 
 358   void resolve_oop_handle(Register result, Register tmp);
 359   void resolve_weak_handle(Register result, Register tmp);
 360   void load_mirror(Register mirror, Register method, Register tmp);
 361   void load_method_holder_cld(Register rresult, Register rmethod);
 362 
 363   void load_method_holder(Register holder, Register method);
 364 
 365   // oop manipulations
 366 #ifdef _LP64
 367   void load_nklass_compact(Register dst, Register src);
 368 #endif
 369   void load_klass(Register dst, Register src, Register tmp);
 370   void store_klass(Register dst, Register src, Register tmp);
 371 
 372   // Compares the Klass pointer of an object to a given Klass (which might be narrow,
 373   // depending on UseCompressedClassPointers).
 374   void cmp_klass(Register klass, Register dst, Register tmp);
 375 
 376   // Compares the Klass pointer of two objects o1 and o2. Result is in the condition flags.
 377   // Uses tmp1 and tmp2 as temporary registers.
 378   void cmp_klass(Register src, Register dst, Register tmp1, Register tmp2);
 379 
 380   void access_load_at(BasicType type, DecoratorSet decorators, Register dst, Address src,
 381                       Register tmp1, Register thread_tmp);
 382   void access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register val,
 383                        Register tmp1, Register tmp2, Register tmp3);
 384 
 385   void load_heap_oop(Register dst, Address src, Register tmp1 = noreg,
 386                      Register thread_tmp = noreg, DecoratorSet decorators = 0);
 387   void load_heap_oop_not_null(Register dst, Address src, Register tmp1 = noreg,
 388                               Register thread_tmp = noreg, DecoratorSet decorators = 0);
 389   void store_heap_oop(Address dst, Register val, Register tmp1 = noreg,
 390                       Register tmp2 = noreg, Register tmp3 = noreg, DecoratorSet decorators = 0);
 391 
 392   // Used for storing null. All other oop constants should be
 393   // stored using routines that take a jobject.
 394   void store_heap_oop_null(Address dst);
 395 
 396 #ifdef _LP64
 397   void store_klass_gap(Register dst, Register src);
 398 
 399   // This dummy is to prevent a call to store_heap_oop from

2142   void convert_f2i(Register dst, XMMRegister src);
2143   void convert_d2i(Register dst, XMMRegister src);
2144   void convert_f2l(Register dst, XMMRegister src);
2145   void convert_d2l(Register dst, XMMRegister src);
2146   void round_double(Register dst, XMMRegister src, Register rtmp, Register rcx);
2147   void round_float(Register dst, XMMRegister src, Register rtmp, Register rcx);
2148 
2149   void cache_wb(Address line);
2150   void cache_wbsync(bool is_pre);
2151 
2152 #ifdef COMPILER2_OR_JVMCI
2153   void generate_fill_avx3(BasicType type, Register to, Register value,
2154                           Register count, Register rtmp, XMMRegister xtmp);
2155 #endif // COMPILER2_OR_JVMCI
2156 #endif // _LP64
2157 
2158   void vallones(XMMRegister dst, int vector_len);
2159 
2160   void check_stack_alignment(Register sp, const char* msg, unsigned bias = 0, Register tmp = noreg);
2161 
2162   void lightweight_lock(Register basic_lock, Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2163   void lightweight_unlock(Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2164 };
2165 
2166 /**
2167  * class SkipIfEqual:
2168  *
2169  * Instantiating this class will result in assembly code being output that will
2170  * jump around any code emitted between the creation of the instance and it's
2171  * automatic destruction at the end of a scope block, depending on the value of
2172  * the flag passed to the constructor, which will be checked at run-time.
2173  */
2174 class SkipIfEqual {
2175  private:
2176   MacroAssembler* _masm;
2177   Label _label;
2178 
2179  public:
2180    SkipIfEqual(MacroAssembler*, const bool* flag_addr, bool value, Register rscratch);
2181    ~SkipIfEqual();
2182 };
< prev index next >