< prev index next >

src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp

Print this page




 855     __ stp(zr, zr, Address(sp, 12 * wordSize));
 856   } else {
 857     __ sub(esp, sp, 12 *  wordSize);
 858     __ ldr(rscratch1, Address(rmethod, Method::const_offset()));      // get ConstMethod
 859     __ add(rbcp, rscratch1, in_bytes(ConstMethod::codes_offset())); // get codebase
 860     __ stp(esp, rbcp, Address(__ pre(sp, -12 * wordSize)));
 861   }
 862 
 863   if (ProfileInterpreter) {
 864     Label method_data_continue;
 865     __ ldr(rscratch1, Address(rmethod, Method::method_data_offset()));
 866     __ cbz(rscratch1, method_data_continue);
 867     __ lea(rscratch1, Address(rscratch1, in_bytes(MethodData::data_offset())));
 868     __ bind(method_data_continue);
 869     __ stp(rscratch1, rmethod, Address(sp, 6 * wordSize));  // save Method* and mdp (method data pointer)
 870   } else {
 871     __ stp(zr, rmethod, Address(sp, 6 * wordSize));        // save Method* (no mdp)
 872   }
 873 
 874   // Get mirror and store it in the frame as GC root for this Method*
 875   __ load_mirror(rscratch1, rmethod);
 876   __ stp(rscratch1, zr, Address(sp, 4 * wordSize));
 877 
 878   __ ldr(rcpool, Address(rmethod, Method::const_offset()));
 879   __ ldr(rcpool, Address(rcpool, ConstMethod::constants_offset()));
 880   __ ldr(rcpool, Address(rcpool, ConstantPool::cache_offset_in_bytes()));
 881   __ stp(rlocals, rcpool, Address(sp, 2 * wordSize));
 882 
 883   __ stp(rfp, lr, Address(sp, 10 * wordSize));
 884   __ lea(rfp, Address(sp, 10 * wordSize));
 885 
 886   // set sender sp
 887   // leave last_sp as null
 888   __ stp(zr, r13, Address(sp, 8 * wordSize));
 889 
 890   // Move SP out of the way
 891   if (! native_call) {
 892     __ ldr(rscratch1, Address(rmethod, Method::const_offset()));
 893     __ ldrh(rscratch1, Address(rscratch1, ConstMethod::max_stack_offset()));
 894     __ add(rscratch1, rscratch1, frame::interpreter_frame_monitor_size() + 2);
 895     __ sub(rscratch1, sp, rscratch1, ext::uxtw, 3);
 896     __ andr(sp, rscratch1, -16);




 855     __ stp(zr, zr, Address(sp, 12 * wordSize));
 856   } else {
 857     __ sub(esp, sp, 12 *  wordSize);
 858     __ ldr(rscratch1, Address(rmethod, Method::const_offset()));      // get ConstMethod
 859     __ add(rbcp, rscratch1, in_bytes(ConstMethod::codes_offset())); // get codebase
 860     __ stp(esp, rbcp, Address(__ pre(sp, -12 * wordSize)));
 861   }
 862 
 863   if (ProfileInterpreter) {
 864     Label method_data_continue;
 865     __ ldr(rscratch1, Address(rmethod, Method::method_data_offset()));
 866     __ cbz(rscratch1, method_data_continue);
 867     __ lea(rscratch1, Address(rscratch1, in_bytes(MethodData::data_offset())));
 868     __ bind(method_data_continue);
 869     __ stp(rscratch1, rmethod, Address(sp, 6 * wordSize));  // save Method* and mdp (method data pointer)
 870   } else {
 871     __ stp(zr, rmethod, Address(sp, 6 * wordSize));        // save Method* (no mdp)
 872   }
 873 
 874   // Get mirror and store it in the frame as GC root for this Method*
 875   __ load_mirror(r10, rmethod);
 876   __ stp(r10, zr, Address(sp, 4 * wordSize));
 877 
 878   __ ldr(rcpool, Address(rmethod, Method::const_offset()));
 879   __ ldr(rcpool, Address(rcpool, ConstMethod::constants_offset()));
 880   __ ldr(rcpool, Address(rcpool, ConstantPool::cache_offset_in_bytes()));
 881   __ stp(rlocals, rcpool, Address(sp, 2 * wordSize));
 882 
 883   __ stp(rfp, lr, Address(sp, 10 * wordSize));
 884   __ lea(rfp, Address(sp, 10 * wordSize));
 885 
 886   // set sender sp
 887   // leave last_sp as null
 888   __ stp(zr, r13, Address(sp, 8 * wordSize));
 889 
 890   // Move SP out of the way
 891   if (! native_call) {
 892     __ ldr(rscratch1, Address(rmethod, Method::const_offset()));
 893     __ ldrh(rscratch1, Address(rscratch1, ConstMethod::max_stack_offset()));
 894     __ add(rscratch1, rscratch1, frame::interpreter_frame_monitor_size() + 2);
 895     __ sub(rscratch1, sp, rscratch1, ext::uxtw, 3);
 896     __ andr(sp, rscratch1, -16);


< prev index next >