hotspot/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp
changeset 40643 49539fc14e5a
parent 38259 b495d1cfe673
child 41084 fc5db29fa08e
equal deleted inserted replaced
40642:7f337136f657 40643:49539fc14e5a
  2028     __ ldrb(rscratch1, Address(rscratch1, offset));
  2028     __ ldrb(rscratch1, Address(rscratch1, offset));
  2029     __ cbnzw(rscratch1, dtrace_method_exit);
  2029     __ cbnzw(rscratch1, dtrace_method_exit);
  2030     __ bind(dtrace_method_exit_done);
  2030     __ bind(dtrace_method_exit_done);
  2031   }
  2031   }
  2032 
  2032 
  2033   __ reset_last_Java_frame(false, true);
  2033   __ reset_last_Java_frame(false);
  2034 
  2034 
  2035   // Unpack oop result
  2035   // Unpack oop result
  2036   if (ret_type == T_OBJECT || ret_type == T_ARRAY) {
  2036   if (ret_type == T_OBJECT || ret_type == T_ARRAY) {
  2037       Label L;
  2037       Label L;
  2038       __ cbz(r0, L);
  2038       __ cbz(r0, L);
  2368                                            Deoptimization::uncommon_trap)));
  2368                                            Deoptimization::uncommon_trap)));
  2369     __ blrt(rscratch1, 2, 0, MacroAssembler::ret_type_integral);
  2369     __ blrt(rscratch1, 2, 0, MacroAssembler::ret_type_integral);
  2370     __ bind(retaddr);
  2370     __ bind(retaddr);
  2371     oop_maps->add_gc_map( __ pc()-start, map->deep_copy());
  2371     oop_maps->add_gc_map( __ pc()-start, map->deep_copy());
  2372 
  2372 
  2373     __ reset_last_Java_frame(false, false);
  2373     __ reset_last_Java_frame(false);
  2374 
  2374 
  2375     __ b(after_fetch_unroll_info_call);
  2375     __ b(after_fetch_unroll_info_call);
  2376   } // EnableJVMCI
  2376   } // EnableJVMCI
  2377 #endif // INCLUDE_JVMCI
  2377 #endif // INCLUDE_JVMCI
  2378 
  2378 
  2463 
  2463 
  2464   // Need to have an oopmap that tells fetch_unroll_info where to
  2464   // Need to have an oopmap that tells fetch_unroll_info where to
  2465   // find any register it might need.
  2465   // find any register it might need.
  2466   oop_maps->add_gc_map(__ pc() - start, map);
  2466   oop_maps->add_gc_map(__ pc() - start, map);
  2467 
  2467 
  2468   __ reset_last_Java_frame(false, true);
  2468   __ reset_last_Java_frame(false);
  2469 
  2469 
  2470 #if INCLUDE_JVMCI
  2470 #if INCLUDE_JVMCI
  2471   if (EnableJVMCI) {
  2471   if (EnableJVMCI) {
  2472     __ bind(after_fetch_unroll_info_call);
  2472     __ bind(after_fetch_unroll_info_call);
  2473   }
  2473   }
  2604   // Use the same PC we used for the last java frame
  2604   // Use the same PC we used for the last java frame
  2605   oop_maps->add_gc_map(the_pc - start,
  2605   oop_maps->add_gc_map(the_pc - start,
  2606                        new OopMap( frame_size_in_words, 0 ));
  2606                        new OopMap( frame_size_in_words, 0 ));
  2607 
  2607 
  2608   // Clear fp AND pc
  2608   // Clear fp AND pc
  2609   __ reset_last_Java_frame(true, true);
  2609   __ reset_last_Java_frame(true);
  2610 
  2610 
  2611   // Collect return values
  2611   // Collect return values
  2612   __ ldrd(v0, Address(sp, RegisterSaver::v0_offset_in_bytes()));
  2612   __ ldrd(v0, Address(sp, RegisterSaver::v0_offset_in_bytes()));
  2613   __ ldr(r0, Address(sp, RegisterSaver::r0_offset_in_bytes()));
  2613   __ ldr(r0, Address(sp, RegisterSaver::r0_offset_in_bytes()));
  2614   // I think this is useless (throwing pc?)
  2614   // I think this is useless (throwing pc?)
  2707 
  2707 
  2708   // location of rfp is known implicitly by the frame sender code
  2708   // location of rfp is known implicitly by the frame sender code
  2709 
  2709 
  2710   oop_maps->add_gc_map(__ pc() - start, map);
  2710   oop_maps->add_gc_map(__ pc() - start, map);
  2711 
  2711 
  2712   __ reset_last_Java_frame(false, true);
  2712   __ reset_last_Java_frame(false);
  2713 
  2713 
  2714   // move UnrollBlock* into r4
  2714   // move UnrollBlock* into r4
  2715   __ mov(r4, r0);
  2715   __ mov(r4, r0);
  2716 
  2716 
  2717 #ifdef ASSERT
  2717 #ifdef ASSERT
  2826   // Set an oopmap for the call site
  2826   // Set an oopmap for the call site
  2827   // Use the same PC we used for the last java frame
  2827   // Use the same PC we used for the last java frame
  2828   oop_maps->add_gc_map(the_pc - start, new OopMap(SimpleRuntimeFrame::framesize, 0));
  2828   oop_maps->add_gc_map(the_pc - start, new OopMap(SimpleRuntimeFrame::framesize, 0));
  2829 
  2829 
  2830   // Clear fp AND pc
  2830   // Clear fp AND pc
  2831   __ reset_last_Java_frame(true, true);
  2831   __ reset_last_Java_frame(true);
  2832 
  2832 
  2833   // Pop self-frame.
  2833   // Pop self-frame.
  2834   __ leave();                 // Epilog
  2834   __ leave();                 // Epilog
  2835 
  2835 
  2836   // Jump to interpreter
  2836   // Jump to interpreter
  2904 
  2904 
  2905   oop_maps->add_gc_map( __ pc() - start, map);
  2905   oop_maps->add_gc_map( __ pc() - start, map);
  2906 
  2906 
  2907   Label noException;
  2907   Label noException;
  2908 
  2908 
  2909   __ reset_last_Java_frame(false, true);
  2909   __ reset_last_Java_frame(false);
  2910 
  2910 
  2911   __ maybe_isb();
  2911   __ maybe_isb();
  2912   __ membar(Assembler::LoadLoad | Assembler::LoadStore);
  2912   __ membar(Assembler::LoadLoad | Assembler::LoadStore);
  2913 
  2913 
  2914   __ ldr(rscratch1, Address(rthread, Thread::pending_exception_offset()));
  2914   __ ldr(rscratch1, Address(rthread, Thread::pending_exception_offset()));
  2983   __ maybe_isb();
  2983   __ maybe_isb();
  2984 
  2984 
  2985   // r0 contains the address we are going to jump to assuming no exception got installed
  2985   // r0 contains the address we are going to jump to assuming no exception got installed
  2986 
  2986 
  2987   // clear last_Java_sp
  2987   // clear last_Java_sp
  2988   __ reset_last_Java_frame(false, true);
  2988   __ reset_last_Java_frame(false);
  2989   // check for pending exceptions
  2989   // check for pending exceptions
  2990   Label pending;
  2990   Label pending;
  2991   __ ldr(rscratch1, Address(rthread, Thread::pending_exception_offset()));
  2991   __ ldr(rscratch1, Address(rthread, Thread::pending_exception_offset()));
  2992   __ cbnz(rscratch1, pending);
  2992   __ cbnz(rscratch1, pending);
  2993 
  2993 
  3114 
  3114 
  3115   OopMapSet* oop_maps = new OopMapSet();
  3115   OopMapSet* oop_maps = new OopMapSet();
  3116 
  3116 
  3117   oop_maps->add_gc_map(the_pc - start, new OopMap(SimpleRuntimeFrame::framesize, 0));
  3117   oop_maps->add_gc_map(the_pc - start, new OopMap(SimpleRuntimeFrame::framesize, 0));
  3118 
  3118 
  3119   __ reset_last_Java_frame(false, true);
  3119   __ reset_last_Java_frame(false);
  3120 
  3120 
  3121   // Restore callee-saved registers
  3121   // Restore callee-saved registers
  3122 
  3122 
  3123   // rfp is an implicitly saved callee saved register (i.e. the calling
  3123   // rfp is an implicitly saved callee saved register (i.e. the calling
  3124   // convention will save restore it in prolog/epilog) Other than that
  3124   // convention will save restore it in prolog/epilog) Other than that