equal
deleted
inserted
replaced
2827 __ movl(c_rarg1, Address(r15_thread, in_bytes(JavaThread::pending_deoptimization_offset()))); |
2827 __ movl(c_rarg1, Address(r15_thread, in_bytes(JavaThread::pending_deoptimization_offset()))); |
2828 __ movl(Address(r15_thread, in_bytes(JavaThread::pending_deoptimization_offset())), -1); |
2828 __ movl(Address(r15_thread, in_bytes(JavaThread::pending_deoptimization_offset())), -1); |
2829 |
2829 |
2830 __ movl(r14, (int32_t)Deoptimization::Unpack_reexecute); |
2830 __ movl(r14, (int32_t)Deoptimization::Unpack_reexecute); |
2831 __ mov(c_rarg0, r15_thread); |
2831 __ mov(c_rarg0, r15_thread); |
|
2832 __ movl(c_rarg2, r14); // exec mode |
2832 __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::uncommon_trap))); |
2833 __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::uncommon_trap))); |
2833 oop_maps->add_gc_map( __ pc()-start, map->deep_copy()); |
2834 oop_maps->add_gc_map( __ pc()-start, map->deep_copy()); |
2834 |
2835 |
2835 __ reset_last_Java_frame(false, false); |
2836 __ reset_last_Java_frame(false, false); |
2836 |
2837 |
2913 __ stop("SharedRuntime::generate_deopt_blob: last_Java_fp not cleared"); |
2914 __ stop("SharedRuntime::generate_deopt_blob: last_Java_fp not cleared"); |
2914 __ bind(L); |
2915 __ bind(L); |
2915 } |
2916 } |
2916 #endif // ASSERT |
2917 #endif // ASSERT |
2917 __ mov(c_rarg0, r15_thread); |
2918 __ mov(c_rarg0, r15_thread); |
|
2919 __ movl(c_rarg1, r14); // exec_mode |
2918 __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::fetch_unroll_info))); |
2920 __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::fetch_unroll_info))); |
2919 |
2921 |
2920 // Need to have an oopmap that tells fetch_unroll_info where to |
2922 // Need to have an oopmap that tells fetch_unroll_info where to |
2921 // find any register it might need. |
2923 // find any register it might need. |
2922 oop_maps->add_gc_map(__ pc() - start, map); |
2924 oop_maps->add_gc_map(__ pc() - start, map); |
2930 #endif |
2932 #endif |
2931 |
2933 |
2932 // Load UnrollBlock* into rdi |
2934 // Load UnrollBlock* into rdi |
2933 __ mov(rdi, rax); |
2935 __ mov(rdi, rax); |
2934 |
2936 |
|
2937 __ movl(r14, Address(rdi, Deoptimization::UnrollBlock::unpack_kind_offset_in_bytes())); |
2935 Label noException; |
2938 Label noException; |
2936 __ cmpl(r14, Deoptimization::Unpack_exception); // Was exception pending? |
2939 __ cmpl(r14, Deoptimization::Unpack_exception); // Was exception pending? |
2937 __ jcc(Assembler::notEqual, noException); |
2940 __ jcc(Assembler::notEqual, noException); |
2938 __ movptr(rax, Address(r15_thread, JavaThread::exception_oop_offset())); |
2941 __ movptr(rax, Address(r15_thread, JavaThread::exception_oop_offset())); |
2939 // QQQ this is useless it was NULL above |
2942 // QQQ this is useless it was NULL above |
3148 // Thread is in rdi already. |
3151 // Thread is in rdi already. |
3149 // |
3152 // |
3150 // UnrollBlock* uncommon_trap(JavaThread* thread, jint unloaded_class_index); |
3153 // UnrollBlock* uncommon_trap(JavaThread* thread, jint unloaded_class_index); |
3151 |
3154 |
3152 __ mov(c_rarg0, r15_thread); |
3155 __ mov(c_rarg0, r15_thread); |
|
3156 __ movl(c_rarg2, Deoptimization::Unpack_uncommon_trap); |
3153 __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::uncommon_trap))); |
3157 __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::uncommon_trap))); |
3154 |
3158 |
3155 // Set an oopmap for the call site |
3159 // Set an oopmap for the call site |
3156 OopMapSet* oop_maps = new OopMapSet(); |
3160 OopMapSet* oop_maps = new OopMapSet(); |
3157 OopMap* map = new OopMap(SimpleRuntimeFrame::framesize, 0); |
3161 OopMap* map = new OopMap(SimpleRuntimeFrame::framesize, 0); |
3162 |
3166 |
3163 __ reset_last_Java_frame(false, false); |
3167 __ reset_last_Java_frame(false, false); |
3164 |
3168 |
3165 // Load UnrollBlock* into rdi |
3169 // Load UnrollBlock* into rdi |
3166 __ mov(rdi, rax); |
3170 __ mov(rdi, rax); |
|
3171 |
|
3172 #ifdef ASSERT |
|
3173 { Label L; |
|
3174 __ cmpptr(Address(rdi, Deoptimization::UnrollBlock::unpack_kind_offset_in_bytes()), |
|
3175 (int32_t)Deoptimization::Unpack_uncommon_trap); |
|
3176 __ jcc(Assembler::equal, L); |
|
3177 __ stop("SharedRuntime::generate_deopt_blob: expected Unpack_uncommon_trap"); |
|
3178 __ bind(L); |
|
3179 } |
|
3180 #endif |
3167 |
3181 |
3168 // Pop all the frames we must move/replace. |
3182 // Pop all the frames we must move/replace. |
3169 // |
3183 // |
3170 // Frame picture (youngest to oldest) |
3184 // Frame picture (youngest to oldest) |
3171 // 1: self-frame (no frame link) |
3185 // 1: self-frame (no frame link) |