813 // Clear rest.
814 __ bind(restloop);
815 __ std(zero_reg, 0, base_ptr_reg); // Clear 8byte aligned block.
816 __ std(zero_reg, 8, base_ptr_reg); // Clear 8byte aligned block.
817 __ addi(base_ptr_reg, base_ptr_reg, 16);
818 __ bdnz(restloop);
819
820 __ bind(lastdword);
821 __ beq(CCR1, done);
822 __ std(zero_reg, 0, base_ptr_reg);
823 __ bind(done);
824 __ blr(); // return
825
826 return start;
827 }
828
829 #if !defined(PRODUCT)
830 // Wrapper which calls oopDesc::is_oop_or_null()
831 // Only called by MacroAssembler::verify_oop
832 static void verify_oop_helper(const char* message, oop o) {
833 if (!o->is_oop_or_null()) {
834 fatal("%s", message);
835 }
836 ++ StubRoutines::_verify_oop_count;
837 }
838 #endif
839
840 // Return address of code to be called from code generated by
841 // MacroAssembler::verify_oop.
842 //
843 // Don't generate, rather use C++ code.
844 address generate_verify_oop() {
845 // this is actually a `FunctionDescriptor*'.
846 address start = 0;
847
848 #if !defined(PRODUCT)
849 start = CAST_FROM_FN_PTR(address, verify_oop_helper);
850 #endif
851
852 return start;
853 }
|
813 // Clear rest.
814 __ bind(restloop);
815 __ std(zero_reg, 0, base_ptr_reg); // Clear 8byte aligned block.
816 __ std(zero_reg, 8, base_ptr_reg); // Clear 8byte aligned block.
817 __ addi(base_ptr_reg, base_ptr_reg, 16);
818 __ bdnz(restloop);
819
820 __ bind(lastdword);
821 __ beq(CCR1, done);
822 __ std(zero_reg, 0, base_ptr_reg);
823 __ bind(done);
824 __ blr(); // return
825
826 return start;
827 }
828
829 #if !defined(PRODUCT)
830 // Wrapper which calls oopDesc::is_oop_or_null()
831 // Only called by MacroAssembler::verify_oop
832 static void verify_oop_helper(const char* message, oop o) {
833 if (!oopDesc::is_oop_or_null(o)) {
834 fatal("%s", message);
835 }
836 ++ StubRoutines::_verify_oop_count;
837 }
838 #endif
839
840 // Return address of code to be called from code generated by
841 // MacroAssembler::verify_oop.
842 //
843 // Don't generate, rather use C++ code.
844 address generate_verify_oop() {
845 // this is actually a `FunctionDescriptor*'.
846 address start = 0;
847
848 #if !defined(PRODUCT)
849 start = CAST_FROM_FN_PTR(address, verify_oop_helper);
850 #endif
851
852 return start;
853 }
|