equal
deleted
inserted
replaced
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) |