< prev index next >

src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp

Print this page




 725   __ push(rbx);        // save Method*
 726   // Get mirror and store it in the frame as GC root for this Method*
 727   __ load_mirror(rdx, rbx);
 728   __ push(rdx);
 729   if (ProfileInterpreter) {
 730     Label method_data_continue;
 731     __ movptr(rdx, Address(rbx, in_bytes(Method::method_data_offset())));
 732     __ testptr(rdx, rdx);
 733     __ jcc(Assembler::zero, method_data_continue);
 734     __ addptr(rdx, in_bytes(MethodData::data_offset()));
 735     __ bind(method_data_continue);
 736     __ push(rdx);      // set the mdp (method data pointer)
 737   } else {
 738     __ push(0);
 739   }
 740 
 741   __ movptr(rdx, Address(rbx, Method::const_offset()));
 742   __ movptr(rdx, Address(rdx, ConstMethod::constants_offset()));
 743   __ movptr(rdx, Address(rdx, ConstantPool::cache_offset_in_bytes()));
 744   __ push(rdx); // set constant pool cache
 745   const Register thread1 = NOT_LP64(rdx) LP64_ONLY(r15_thread);
 746   NOT_LP64(__ get_thread(thread1));
 747   __ movptr(rdx, Address(thread1, JavaThread::vt_alloc_ptr_offset()));
 748   __ push(rdx); // value type allocation pointer when activation is created
 749   __ push(rlocals); // set locals pointer
 750   if (native_call) {
 751     __ push(0); // no bcp
 752   } else {
 753     __ push(rbcp); // set bcp
 754   }
 755   __ push(0); // reserve word for pointer to expression stack bottom
 756   __ movptr(Address(rsp, 0), rsp); // set expression stack bottom
 757 }
 758 
 759 // End of helpers
 760 
 761 // Method entry for java.lang.ref.Reference.get.
 762 address TemplateInterpreterGenerator::generate_Reference_get_entry(void) {
 763   // Code: _aload_0, _getfield, _areturn
 764   // parameter size = 1
 765   //
 766   // The code that gets generated by this routine is split into 2 parts:
 767   //    1. The "intrinsified" code performing an ON_WEAK_OOP_REF load,
 768   //    2. The slow path - which is an expansion of the regular method entry.




 725   __ push(rbx);        // save Method*
 726   // Get mirror and store it in the frame as GC root for this Method*
 727   __ load_mirror(rdx, rbx);
 728   __ push(rdx);
 729   if (ProfileInterpreter) {
 730     Label method_data_continue;
 731     __ movptr(rdx, Address(rbx, in_bytes(Method::method_data_offset())));
 732     __ testptr(rdx, rdx);
 733     __ jcc(Assembler::zero, method_data_continue);
 734     __ addptr(rdx, in_bytes(MethodData::data_offset()));
 735     __ bind(method_data_continue);
 736     __ push(rdx);      // set the mdp (method data pointer)
 737   } else {
 738     __ push(0);
 739   }
 740 
 741   __ movptr(rdx, Address(rbx, Method::const_offset()));
 742   __ movptr(rdx, Address(rdx, ConstMethod::constants_offset()));
 743   __ movptr(rdx, Address(rdx, ConstantPool::cache_offset_in_bytes()));
 744   __ push(rdx); // set constant pool cache




 745   __ push(rlocals); // set locals pointer
 746   if (native_call) {
 747     __ push(0); // no bcp
 748   } else {
 749     __ push(rbcp); // set bcp
 750   }
 751   __ push(0); // reserve word for pointer to expression stack bottom
 752   __ movptr(Address(rsp, 0), rsp); // set expression stack bottom
 753 }
 754 
 755 // End of helpers
 756 
 757 // Method entry for java.lang.ref.Reference.get.
 758 address TemplateInterpreterGenerator::generate_Reference_get_entry(void) {
 759   // Code: _aload_0, _getfield, _areturn
 760   // parameter size = 1
 761   //
 762   // The code that gets generated by this routine is split into 2 parts:
 763   //    1. The "intrinsified" code performing an ON_WEAK_OOP_REF load,
 764   //    2. The slow path - which is an expansion of the regular method entry.


< prev index next >