< prev index next >

src/hotspot/cpu/ppc/macroAssembler_ppc.cpp

Print this page
rev 56646 : 8231757: [ppc] Fix VerifyOops. Errors show since 8231058.
Summary: Also make the checks print the wrong value and where a failure occurred.


3103   load_const_optimized(tmp1, entry);
3104 
3105   set_last_Java_frame(/*sp=*/sp, /*pc=*/tmp1);
3106 }
3107 
3108 void MacroAssembler::get_vm_result(Register oop_result) {
3109   // Read:
3110   //   R16_thread
3111   //   R16_thread->in_bytes(JavaThread::vm_result_offset())
3112   //
3113   // Updated:
3114   //   oop_result
3115   //   R16_thread->in_bytes(JavaThread::vm_result_offset())
3116 
3117   verify_thread();
3118 
3119   ld(oop_result, in_bytes(JavaThread::vm_result_offset()), R16_thread);
3120   li(R0, 0);
3121   std(R0, in_bytes(JavaThread::vm_result_offset()), R16_thread);
3122 
3123   verify_oop(oop_result);
3124 }
3125 
3126 void MacroAssembler::get_vm_result_2(Register metadata_result) {
3127   // Read:
3128   //   R16_thread
3129   //   R16_thread->in_bytes(JavaThread::vm_result_2_offset())
3130   //
3131   // Updated:
3132   //   metadata_result
3133   //   R16_thread->in_bytes(JavaThread::vm_result_2_offset())
3134 
3135   ld(metadata_result, in_bytes(JavaThread::vm_result_2_offset()), R16_thread);
3136   li(R0, 0);
3137   std(R0, in_bytes(JavaThread::vm_result_2_offset()), R16_thread);
3138 }
3139 
3140 Register MacroAssembler::encode_klass_not_null(Register dst, Register src) {
3141   Register current = (src != noreg) ? src : dst; // Klass is in dst if no src provided.
3142   if (CompressedKlassPointers::base() != 0) {
3143     // Use dst as temp if it is free.


4898   switch (size) {
4899     case 4:
4900       lwz(R0, mem_offset, mem_base);
4901       cmpwi(CCR0, R0, 0);
4902       break;
4903     case 8:
4904       ld(R0, mem_offset, mem_base);
4905       cmpdi(CCR0, R0, 0);
4906       break;
4907     default:
4908       ShouldNotReachHere();
4909   }
4910   asm_assert(check_equal, msg, id);
4911 #endif // ASSERT
4912 }
4913 
4914 void MacroAssembler::verify_thread() {
4915   if (VerifyThread) {
4916     unimplemented("'VerifyThread' currently not implemented on PPC");
4917   }







4918 }
4919 
4920 // READ: oop. KILL: R0. Volatile floats perhaps.
4921 void MacroAssembler::verify_oop(Register oop, const char* msg) {
4922   if (!VerifyOops) {
4923     return;
4924   }
4925 
4926   address/* FunctionDescriptor** */fd = StubRoutines::verify_oop_subroutine_entry_address();
4927   const Register tmp = R11; // Will be preserved.
4928   const int nbytes_save = MacroAssembler::num_volatile_regs * 8;
4929   save_volatile_gprs(R1_SP, -nbytes_save); // except R0
4930 
4931   mr_if_needed(R4_ARG2, oop);
4932   save_LR_CR(tmp); // save in old frame
4933   push_frame_reg_args(nbytes_save, tmp);
4934   // load FunctionDescriptor** / entry_address *
4935   load_const_optimized(tmp, fd, R0);
4936   // load FunctionDescriptor* / entry_address
4937   ld(tmp, 0, tmp);




3103   load_const_optimized(tmp1, entry);
3104 
3105   set_last_Java_frame(/*sp=*/sp, /*pc=*/tmp1);
3106 }
3107 
3108 void MacroAssembler::get_vm_result(Register oop_result) {
3109   // Read:
3110   //   R16_thread
3111   //   R16_thread->in_bytes(JavaThread::vm_result_offset())
3112   //
3113   // Updated:
3114   //   oop_result
3115   //   R16_thread->in_bytes(JavaThread::vm_result_offset())
3116 
3117   verify_thread();
3118 
3119   ld(oop_result, in_bytes(JavaThread::vm_result_offset()), R16_thread);
3120   li(R0, 0);
3121   std(R0, in_bytes(JavaThread::vm_result_offset()), R16_thread);
3122 
3123   verify_oop(oop_result, FILE_AND_LINE);
3124 }
3125 
3126 void MacroAssembler::get_vm_result_2(Register metadata_result) {
3127   // Read:
3128   //   R16_thread
3129   //   R16_thread->in_bytes(JavaThread::vm_result_2_offset())
3130   //
3131   // Updated:
3132   //   metadata_result
3133   //   R16_thread->in_bytes(JavaThread::vm_result_2_offset())
3134 
3135   ld(metadata_result, in_bytes(JavaThread::vm_result_2_offset()), R16_thread);
3136   li(R0, 0);
3137   std(R0, in_bytes(JavaThread::vm_result_2_offset()), R16_thread);
3138 }
3139 
3140 Register MacroAssembler::encode_klass_not_null(Register dst, Register src) {
3141   Register current = (src != noreg) ? src : dst; // Klass is in dst if no src provided.
3142   if (CompressedKlassPointers::base() != 0) {
3143     // Use dst as temp if it is free.


4898   switch (size) {
4899     case 4:
4900       lwz(R0, mem_offset, mem_base);
4901       cmpwi(CCR0, R0, 0);
4902       break;
4903     case 8:
4904       ld(R0, mem_offset, mem_base);
4905       cmpdi(CCR0, R0, 0);
4906       break;
4907     default:
4908       ShouldNotReachHere();
4909   }
4910   asm_assert(check_equal, msg, id);
4911 #endif // ASSERT
4912 }
4913 
4914 void MacroAssembler::verify_thread() {
4915   if (VerifyThread) {
4916     unimplemented("'VerifyThread' currently not implemented on PPC");
4917   }
4918 }
4919 
4920 void MacroAssembler::verify_coop(Register coop, const char* msg) {
4921   if (!VerifyOops) { return; }
4922   if (UseCompressedOops) { decode_heap_oop(coop); }
4923   verify_oop(coop, msg);
4924   if (UseCompressedOops) { encode_heap_oop(coop, coop); }
4925 }
4926 
4927 // READ: oop. KILL: R0. Volatile floats perhaps.
4928 void MacroAssembler::verify_oop(Register oop, const char* msg) {
4929   if (!VerifyOops) {
4930     return;
4931   }
4932 
4933   address/* FunctionDescriptor** */fd = StubRoutines::verify_oop_subroutine_entry_address();
4934   const Register tmp = R11; // Will be preserved.
4935   const int nbytes_save = MacroAssembler::num_volatile_regs * 8;
4936   save_volatile_gprs(R1_SP, -nbytes_save); // except R0
4937 
4938   mr_if_needed(R4_ARG2, oop);
4939   save_LR_CR(tmp); // save in old frame
4940   push_frame_reg_args(nbytes_save, tmp);
4941   // load FunctionDescriptor** / entry_address *
4942   load_const_optimized(tmp, fd, R0);
4943   // load FunctionDescriptor* / entry_address
4944   ld(tmp, 0, tmp);


< prev index next >