< prev index next >

src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp

Print this page




 658   ldr(esp,
 659       Address(rfp, frame::interpreter_frame_sender_sp_offset * wordSize));
 660 
 661   if (StackReservedPages > 0) {
 662     // testing if reserved zone needs to be re-enabled
 663     Label no_reserved_zone_enabling;
 664 
 665     ldr(rscratch1, Address(rthread, JavaThread::reserved_stack_activation_offset()));
 666     cmp(esp, rscratch1);
 667     br(Assembler::LS, no_reserved_zone_enabling);
 668 
 669     call_VM_leaf(
 670       CAST_FROM_FN_PTR(address, SharedRuntime::enable_stack_reserved_zone), rthread);
 671     call_VM(noreg, CAST_FROM_FN_PTR(address,
 672                    InterpreterRuntime::throw_delayed_StackOverflowError));
 673     should_not_reach_here();
 674 
 675     bind(no_reserved_zone_enabling);
 676   }
 677 


























 678   // remove frame anchor
 679   leave();
 680   // If we're returning to interpreted code we will shortly be
 681   // adjusting SP to allow some space for ESP.  If we're returning to
 682   // compiled code the saved sender SP was saved in sender_sp, so this
 683   // restores it.
 684   andr(sp, esp, -16);
 685 }
 686 
 687 // Lock object
 688 //
 689 // Args:
 690 //      c_rarg1: BasicObjectLock to be used for locking
 691 //
 692 // Kills:
 693 //      r0
 694 //      c_rarg0, c_rarg1, c_rarg2, c_rarg3, .. (param regs)
 695 //      rscratch1, rscratch2 (scratch regs)
 696 void InterpreterMacroAssembler::lock_object(Register lock_reg)
 697 {




 658   ldr(esp,
 659       Address(rfp, frame::interpreter_frame_sender_sp_offset * wordSize));
 660 
 661   if (StackReservedPages > 0) {
 662     // testing if reserved zone needs to be re-enabled
 663     Label no_reserved_zone_enabling;
 664 
 665     ldr(rscratch1, Address(rthread, JavaThread::reserved_stack_activation_offset()));
 666     cmp(esp, rscratch1);
 667     br(Assembler::LS, no_reserved_zone_enabling);
 668 
 669     call_VM_leaf(
 670       CAST_FROM_FN_PTR(address, SharedRuntime::enable_stack_reserved_zone), rthread);
 671     call_VM(noreg, CAST_FROM_FN_PTR(address,
 672                    InterpreterRuntime::throw_delayed_StackOverflowError));
 673     should_not_reach_here();
 674 
 675     bind(no_reserved_zone_enabling);
 676   }
 677 
 678 
 679   if (state == atos && ValueTypeReturnedAsFields) {
 680     Label skip;
 681     // Test if the return type is a value type
 682     ldr(rscratch1, Address(rfp, frame::interpreter_frame_method_offset * wordSize));
 683     ldr(rscratch1, Address(rscratch1, Method::const_offset()));
 684     ldrb(rscratch1, Address(rscratch1, ConstMethod::result_type_offset()));
 685     cmpw(rscratch1, (u1) T_VALUETYPE);
 686     br(Assembler::NE, skip);
 687 
 688     // We are returning a value type, load its fields into registers
 689     // Load fields from a buffered value with a value class specific handler
 690 
 691     load_klass(rscratch1 /*dst*/, r0 /*src*/);
 692     ldr(rscratch1, Address(rscratch1, InstanceKlass::adr_valueklass_fixed_block_offset()));
 693     ldr(rscratch1, Address(rscratch1, ValueKlass::unpack_handler_offset()));
 694     cbz(rscratch1, skip); 
 695 
 696     blr(rscratch1);
 697 
 698     // call above kills the value in r1. Reload it.
 699     ldr(r1, Address(rfp, frame::interpreter_frame_sender_sp_offset * wordSize));
 700     bind(skip);
 701   }
 702 
 703 
 704   // remove frame anchor
 705   leave();
 706   // If we're returning to interpreted code we will shortly be
 707   // adjusting SP to allow some space for ESP.  If we're returning to
 708   // compiled code the saved sender SP was saved in sender_sp, so this
 709   // restores it.
 710   andr(sp, esp, -16);
 711 }
 712 
 713 // Lock object
 714 //
 715 // Args:
 716 //      c_rarg1: BasicObjectLock to be used for locking
 717 //
 718 // Kills:
 719 //      r0
 720 //      c_rarg0, c_rarg1, c_rarg2, c_rarg3, .. (param regs)
 721 //      rscratch1, rscratch2 (scratch regs)
 722 void InterpreterMacroAssembler::lock_object(Register lock_reg)
 723 {


< prev index next >