< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.hpp

Print this page

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



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








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

2019   void convert_f2i(Register dst, XMMRegister src);
2020   void convert_d2i(Register dst, XMMRegister src);
2021   void convert_f2l(Register dst, XMMRegister src);
2022   void convert_d2l(Register dst, XMMRegister src);
2023   void round_double(Register dst, XMMRegister src, Register rtmp, Register rcx);
2024   void round_float(Register dst, XMMRegister src, Register rtmp, Register rcx);
2025 
2026   void cache_wb(Address line);
2027   void cache_wbsync(bool is_pre);
2028 
2029 #ifdef COMPILER2_OR_JVMCI
2030   void generate_fill_avx3(BasicType type, Register to, Register value,
2031                           Register count, Register rtmp, XMMRegister xtmp);
2032 #endif // COMPILER2_OR_JVMCI
2033 #endif // _LP64
2034 
2035   void vallones(XMMRegister dst, int vector_len);
2036 
2037   void check_stack_alignment(Register sp, const char* msg, unsigned bias = 0, Register tmp = noreg);
2038 
2039   void lightweight_lock(Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2040   void lightweight_unlock(Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2041 };
2042 
2043 /**
2044  * class SkipIfEqual:
2045  *
2046  * Instantiating this class will result in assembly code being output that will
2047  * jump around any code emitted between the creation of the instance and it's
2048  * automatic destruction at the end of a scope block, depending on the value of
2049  * the flag passed to the constructor, which will be checked at run-time.
2050  */
2051 class SkipIfEqual {
2052  private:
2053   MacroAssembler* _masm;
2054   Label _label;
2055 
2056  public:
2057    SkipIfEqual(MacroAssembler*, const bool* flag_addr, bool value, Register rscratch);
2058    ~SkipIfEqual();
2059 };

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

2030   void convert_f2i(Register dst, XMMRegister src);
2031   void convert_d2i(Register dst, XMMRegister src);
2032   void convert_f2l(Register dst, XMMRegister src);
2033   void convert_d2l(Register dst, XMMRegister src);
2034   void round_double(Register dst, XMMRegister src, Register rtmp, Register rcx);
2035   void round_float(Register dst, XMMRegister src, Register rtmp, Register rcx);
2036 
2037   void cache_wb(Address line);
2038   void cache_wbsync(bool is_pre);
2039 
2040 #ifdef COMPILER2_OR_JVMCI
2041   void generate_fill_avx3(BasicType type, Register to, Register value,
2042                           Register count, Register rtmp, XMMRegister xtmp);
2043 #endif // COMPILER2_OR_JVMCI
2044 #endif // _LP64
2045 
2046   void vallones(XMMRegister dst, int vector_len);
2047 
2048   void check_stack_alignment(Register sp, const char* msg, unsigned bias = 0, Register tmp = noreg);
2049 
2050   void lightweight_lock(Register basic_lock, Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2051   void lightweight_unlock(Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2052 };
2053 
2054 /**
2055  * class SkipIfEqual:
2056  *
2057  * Instantiating this class will result in assembly code being output that will
2058  * jump around any code emitted between the creation of the instance and it's
2059  * automatic destruction at the end of a scope block, depending on the value of
2060  * the flag passed to the constructor, which will be checked at run-time.
2061  */
2062 class SkipIfEqual {
2063  private:
2064   MacroAssembler* _masm;
2065   Label _label;
2066 
2067  public:
2068    SkipIfEqual(MacroAssembler*, const bool* flag_addr, bool value, Register rscratch);
2069    ~SkipIfEqual();
2070 };
< prev index next >