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