< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.hpp

Print this page




 298   // thread in the default location (r15_thread on 64bit)
 299   void reset_last_Java_frame(bool clear_fp);
 300 
 301   // jobjects
 302   void clear_jweak_tag(Register possibly_jweak);
 303   void resolve_jobject(Register value, Register thread, Register tmp);
 304 
 305   // C 'boolean' to Java boolean: x == 0 ? 0 : 1
 306   void c2bool(Register x);
 307 
 308   // C++ bool manipulation
 309 
 310   void movbool(Register dst, Address src);
 311   void movbool(Address dst, bool boolconst);
 312   void movbool(Address dst, Register src);
 313   void testbool(Register dst);
 314 
 315   void resolve_oop_handle(Register result, Register tmp = rscratch2);
 316   void load_mirror(Register mirror, Register method, Register tmp = rscratch2);
 317 


 318   // oop manipulations
 319   void load_klass(Register dst, Register src);
 320   void store_klass(Register dst, Register src);
 321 
 322   void access_load_at(BasicType type, DecoratorSet decorators, Register dst, Address src,
 323                       Register tmp1, Register thread_tmp);
 324   void access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register src,
 325                        Register tmp1, Register tmp2);
 326 
 327   // Resolves obj access. Result is placed in the same register.
 328   // All other registers are preserved.
 329   void resolve(DecoratorSet decorators, Register obj);
 330 
 331   void load_heap_oop(Register dst, Address src, Register tmp1 = noreg,
 332                      Register thread_tmp = noreg, DecoratorSet decorators = 0);
 333   void load_heap_oop_not_null(Register dst, Address src, Register tmp1 = noreg,
 334                               Register thread_tmp = noreg, DecoratorSet decorators = 0);
 335   void store_heap_oop(Address dst, Register src, Register tmp1 = noreg,
 336                       Register tmp2 = noreg, DecoratorSet decorators = 0);
 337 


 562   // The rest of the type check; must be wired to a corresponding fast path.
 563   // It does not repeat the fast path logic, so don't use it standalone.
 564   // The temp_reg and temp2_reg can be noreg, if no temps are available.
 565   // Updates the sub's secondary super cache as necessary.
 566   // If set_cond_codes, condition codes will be Z on success, NZ on failure.
 567   void check_klass_subtype_slow_path(Register sub_klass,
 568                                      Register super_klass,
 569                                      Register temp_reg,
 570                                      Register temp2_reg,
 571                                      Label* L_success,
 572                                      Label* L_failure,
 573                                      bool set_cond_codes = false);
 574 
 575   // Simplified, combined version, good for typical uses.
 576   // Falls through on failure.
 577   void check_klass_subtype(Register sub_klass,
 578                            Register super_klass,
 579                            Register temp_reg,
 580                            Label& L_success);
 581 





 582   // method handles (JSR 292)
 583   Address argument_address(RegisterOrConstant arg_slot, int extra_slot_offset = 0);
 584 
 585   //----
 586   void set_word_if_not_zero(Register reg); // sets reg to 1 if not zero, otherwise 0
 587 
 588   // Debugging
 589 
 590   // only if +VerifyOops
 591   // TODO: Make these macros with file and line like sparc version!
 592   void verify_oop(Register reg, const char* s = "broken oop");
 593   void verify_oop_addr(Address addr, const char * s = "broken oop addr");
 594 
 595   // TODO: verify method and klass metadata (compare against vptr?)
 596   void _verify_method_ptr(Register reg, const char * msg, const char * file, int line) {}
 597   void _verify_klass_ptr(Register reg, const char * msg, const char * file, int line){}
 598 
 599 #define verify_method_ptr(reg) _verify_method_ptr(reg, "broken method " #reg, __FILE__, __LINE__)
 600 #define verify_klass_ptr(reg) _verify_klass_ptr(reg, "broken klass " #reg, __FILE__, __LINE__)
 601 




 298   // thread in the default location (r15_thread on 64bit)
 299   void reset_last_Java_frame(bool clear_fp);
 300 
 301   // jobjects
 302   void clear_jweak_tag(Register possibly_jweak);
 303   void resolve_jobject(Register value, Register thread, Register tmp);
 304 
 305   // C 'boolean' to Java boolean: x == 0 ? 0 : 1
 306   void c2bool(Register x);
 307 
 308   // C++ bool manipulation
 309 
 310   void movbool(Register dst, Address src);
 311   void movbool(Address dst, bool boolconst);
 312   void movbool(Address dst, Register src);
 313   void testbool(Register dst);
 314 
 315   void resolve_oop_handle(Register result, Register tmp = rscratch2);
 316   void load_mirror(Register mirror, Register method, Register tmp = rscratch2);
 317 
 318   void load_method_holder(Register holder, Register method);
 319 
 320   // oop manipulations
 321   void load_klass(Register dst, Register src);
 322   void store_klass(Register dst, Register src);
 323 
 324   void access_load_at(BasicType type, DecoratorSet decorators, Register dst, Address src,
 325                       Register tmp1, Register thread_tmp);
 326   void access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register src,
 327                        Register tmp1, Register tmp2);
 328 
 329   // Resolves obj access. Result is placed in the same register.
 330   // All other registers are preserved.
 331   void resolve(DecoratorSet decorators, Register obj);
 332 
 333   void load_heap_oop(Register dst, Address src, Register tmp1 = noreg,
 334                      Register thread_tmp = noreg, DecoratorSet decorators = 0);
 335   void load_heap_oop_not_null(Register dst, Address src, Register tmp1 = noreg,
 336                               Register thread_tmp = noreg, DecoratorSet decorators = 0);
 337   void store_heap_oop(Address dst, Register src, Register tmp1 = noreg,
 338                       Register tmp2 = noreg, DecoratorSet decorators = 0);
 339 


 564   // The rest of the type check; must be wired to a corresponding fast path.
 565   // It does not repeat the fast path logic, so don't use it standalone.
 566   // The temp_reg and temp2_reg can be noreg, if no temps are available.
 567   // Updates the sub's secondary super cache as necessary.
 568   // If set_cond_codes, condition codes will be Z on success, NZ on failure.
 569   void check_klass_subtype_slow_path(Register sub_klass,
 570                                      Register super_klass,
 571                                      Register temp_reg,
 572                                      Register temp2_reg,
 573                                      Label* L_success,
 574                                      Label* L_failure,
 575                                      bool set_cond_codes = false);
 576 
 577   // Simplified, combined version, good for typical uses.
 578   // Falls through on failure.
 579   void check_klass_subtype(Register sub_klass,
 580                            Register super_klass,
 581                            Register temp_reg,
 582                            Label& L_success);
 583 
 584   void clinit_barrier(Register klass,
 585                       Register thread,
 586                       Label* L_fast_path = NULL,
 587                       Label* L_slow_path = NULL);
 588 
 589   // method handles (JSR 292)
 590   Address argument_address(RegisterOrConstant arg_slot, int extra_slot_offset = 0);
 591 
 592   //----
 593   void set_word_if_not_zero(Register reg); // sets reg to 1 if not zero, otherwise 0
 594 
 595   // Debugging
 596 
 597   // only if +VerifyOops
 598   // TODO: Make these macros with file and line like sparc version!
 599   void verify_oop(Register reg, const char* s = "broken oop");
 600   void verify_oop_addr(Address addr, const char * s = "broken oop addr");
 601 
 602   // TODO: verify method and klass metadata (compare against vptr?)
 603   void _verify_method_ptr(Register reg, const char * msg, const char * file, int line) {}
 604   void _verify_klass_ptr(Register reg, const char * msg, const char * file, int line){}
 605 
 606 #define verify_method_ptr(reg) _verify_method_ptr(reg, "broken method " #reg, __FILE__, __LINE__)
 607 #define verify_klass_ptr(reg) _verify_klass_ptr(reg, "broken klass " #reg, __FILE__, __LINE__)
 608 


< prev index next >