hotspot/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp
changeset 34173 01bb07d23a5b
parent 33472 4300fda0e8bb
child 34185 ee71c590a456
equal deleted inserted replaced
34172:19299c8b7c81 34173:01bb07d23a5b
  2382     __ stop("SharedRuntime::generate_deopt_blob: last_Java_fp not cleared");
  2382     __ stop("SharedRuntime::generate_deopt_blob: last_Java_fp not cleared");
  2383     __ bind(L);
  2383     __ bind(L);
  2384   }
  2384   }
  2385 #endif // ASSERT
  2385 #endif // ASSERT
  2386   __ mov(c_rarg0, rthread);
  2386   __ mov(c_rarg0, rthread);
       
  2387   __ mov(c_rarg1, rcpool);
  2387   __ lea(rscratch1, RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::fetch_unroll_info)));
  2388   __ lea(rscratch1, RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::fetch_unroll_info)));
  2388   __ blrt(rscratch1, 1, 0, 1);
  2389   __ blrt(rscratch1, 1, 0, 1);
  2389   __ bind(retaddr);
  2390   __ bind(retaddr);
  2390 
  2391 
  2391   // Need to have an oopmap that tells fetch_unroll_info where to
  2392   // Need to have an oopmap that tells fetch_unroll_info where to
  2395   __ reset_last_Java_frame(false, true);
  2396   __ reset_last_Java_frame(false, true);
  2396 
  2397 
  2397   // Load UnrollBlock* into rdi
  2398   // Load UnrollBlock* into rdi
  2398   __ mov(r5, r0);
  2399   __ mov(r5, r0);
  2399 
  2400 
       
  2401   __ ldrw(rcpool, Address(r5, Deoptimization::UnrollBlock::unpack_kind_offset_in_bytes()));
  2400    Label noException;
  2402    Label noException;
  2401   __ cmpw(rcpool, Deoptimization::Unpack_exception);   // Was exception pending?
  2403   __ cmpw(rcpool, Deoptimization::Unpack_exception);   // Was exception pending?
  2402   __ br(Assembler::NE, noException);
  2404   __ br(Assembler::NE, noException);
  2403   __ ldr(r0, Address(rthread, JavaThread::exception_oop_offset()));
  2405   __ ldr(r0, Address(rthread, JavaThread::exception_oop_offset()));
  2404   // QQQ this is useless it was NULL above
  2406   // QQQ this is useless it was NULL above
  2607   // UnrollBlock* uncommon_trap(JavaThread* thread, jint unloaded_class_index);
  2609   // UnrollBlock* uncommon_trap(JavaThread* thread, jint unloaded_class_index);
  2608   //
  2610   //
  2609   // n.b. 2 gp args, 0 fp args, integral return type
  2611   // n.b. 2 gp args, 0 fp args, integral return type
  2610 
  2612 
  2611   __ mov(c_rarg0, rthread);
  2613   __ mov(c_rarg0, rthread);
       
  2614   __ movw(c_rarg2, (unsigned)Deoptimization::Unpack_uncommon_trap);
  2612   __ lea(rscratch1,
  2615   __ lea(rscratch1,
  2613          RuntimeAddress(CAST_FROM_FN_PTR(address,
  2616          RuntimeAddress(CAST_FROM_FN_PTR(address,
  2614                                          Deoptimization::uncommon_trap)));
  2617                                          Deoptimization::uncommon_trap)));
  2615   __ blrt(rscratch1, 2, 0, MacroAssembler::ret_type_integral);
  2618   __ blrt(rscratch1, 2, 0, MacroAssembler::ret_type_integral);
  2616   __ bind(retaddr);
  2619   __ bind(retaddr);
  2625 
  2628 
  2626   __ reset_last_Java_frame(false, true);
  2629   __ reset_last_Java_frame(false, true);
  2627 
  2630 
  2628   // move UnrollBlock* into r4
  2631   // move UnrollBlock* into r4
  2629   __ mov(r4, r0);
  2632   __ mov(r4, r0);
       
  2633 
       
  2634 #ifdef ASSERT
       
  2635   { Label L;
       
  2636     __ ldrw(rscratch1, Address(r4, Deoptimization::UnrollBlock::unpack_kind_offset_in_bytes()));
       
  2637     __ cmpw(rscratch1, (unsigned)Deoptimization::Unpack_uncommon_trap);
       
  2638     __ br(Assembler::EQ, L);
       
  2639     __ stop("SharedRuntime::generate_deopt_blob: last_Java_fp not cleared");
       
  2640     __ bind(L);
       
  2641   }
       
  2642 #endif
  2630 
  2643 
  2631   // Pop all the frames we must move/replace.
  2644   // Pop all the frames we must move/replace.
  2632   //
  2645   //
  2633   // Frame picture (youngest to oldest)
  2646   // Frame picture (youngest to oldest)
  2634   // 1: self-frame (no frame link)
  2647   // 1: self-frame (no frame link)