650
651 // Check if safepoint requested and if so branch
652 void safepoint_poll(Label& slow_path, Register temp_reg);
653
654 void resolve_jobject(Register value, Register tmp1, Register tmp2, bool needs_frame);
655
656 // Support for managing the JavaThread pointer (i.e.; the reference to
657 // thread-local information).
658
659 // Support for last Java frame (but use call_VM instead where possible):
660 // access R16_thread->last_Java_sp.
661 void set_last_Java_frame(Register last_java_sp, Register last_Java_pc);
662 void reset_last_Java_frame(void);
663 void set_top_ijava_frame_at_SP_as_last_Java_frame(Register sp, Register tmp1);
664
665 // Read vm result from thread: oop_result = R16_thread->result;
666 void get_vm_result (Register oop_result);
667 void get_vm_result_2(Register metadata_result);
668
669 static bool needs_explicit_null_check(intptr_t offset);
670
671 // Trap-instruction-based checks.
672 // Range checks can be distinguished from zero checks as they check 32 bit,
673 // zero checks all 64 bits (tw, td).
674 inline void trap_null_check(Register a, trap_to_bits cmp = traptoEqual);
675 static bool is_trap_null_check(int x) {
676 return is_tdi(x, traptoEqual, -1/*any reg*/, 0) ||
677 is_tdi(x, traptoGreaterThanUnsigned, -1/*any reg*/, 0);
678 }
679
680 inline void trap_zombie_not_entrant();
681 static bool is_trap_zombie_not_entrant(int x) { return is_tdi(x, traptoUnconditional, 0/*reg 0*/, 1); }
682
683 inline void trap_should_not_reach_here();
684 static bool is_trap_should_not_reach_here(int x) { return is_tdi(x, traptoUnconditional, 0/*reg 0*/, 2); }
685
686 inline void trap_ic_miss_check(Register a, Register b);
687 static bool is_trap_ic_miss_check(int x) {
688 return is_td(x, traptoGreaterThanUnsigned | traptoLessThanUnsigned, -1/*any reg*/, -1/*any reg*/);
689 }
|
650
651 // Check if safepoint requested and if so branch
652 void safepoint_poll(Label& slow_path, Register temp_reg);
653
654 void resolve_jobject(Register value, Register tmp1, Register tmp2, bool needs_frame);
655
656 // Support for managing the JavaThread pointer (i.e.; the reference to
657 // thread-local information).
658
659 // Support for last Java frame (but use call_VM instead where possible):
660 // access R16_thread->last_Java_sp.
661 void set_last_Java_frame(Register last_java_sp, Register last_Java_pc);
662 void reset_last_Java_frame(void);
663 void set_top_ijava_frame_at_SP_as_last_Java_frame(Register sp, Register tmp1);
664
665 // Read vm result from thread: oop_result = R16_thread->result;
666 void get_vm_result (Register oop_result);
667 void get_vm_result_2(Register metadata_result);
668
669 static bool needs_explicit_null_check(intptr_t offset);
670 static bool uses_implicit_null_check(void* address);
671
672 // Trap-instruction-based checks.
673 // Range checks can be distinguished from zero checks as they check 32 bit,
674 // zero checks all 64 bits (tw, td).
675 inline void trap_null_check(Register a, trap_to_bits cmp = traptoEqual);
676 static bool is_trap_null_check(int x) {
677 return is_tdi(x, traptoEqual, -1/*any reg*/, 0) ||
678 is_tdi(x, traptoGreaterThanUnsigned, -1/*any reg*/, 0);
679 }
680
681 inline void trap_zombie_not_entrant();
682 static bool is_trap_zombie_not_entrant(int x) { return is_tdi(x, traptoUnconditional, 0/*reg 0*/, 1); }
683
684 inline void trap_should_not_reach_here();
685 static bool is_trap_should_not_reach_here(int x) { return is_tdi(x, traptoUnconditional, 0/*reg 0*/, 2); }
686
687 inline void trap_ic_miss_check(Register a, Register b);
688 static bool is_trap_ic_miss_check(int x) {
689 return is_td(x, traptoGreaterThanUnsigned | traptoLessThanUnsigned, -1/*any reg*/, -1/*any reg*/);
690 }
|