< prev index next >

src/cpu/aarch64/vm/stubGenerator_aarch64.cpp

Print this page
rev 10234 : 8149907: aarch64: use load/store pair instructions in call_stub
Summary: aarch64: make use of load/store pair instructions in call_stub to save space
Reviewed-by: duke
Contributed-by: felix.yang@linaro.org

*** 161,194 **** // Call stub stack layout word offsets from fp enum call_stub_layout { sp_after_call_off = -26, d15_off = -26, - d14_off = -25, d13_off = -24, - d12_off = -23, d11_off = -22, - d10_off = -21, d9_off = -20, - d8_off = -19, r28_off = -18, - r27_off = -17, r26_off = -16, - r25_off = -15, r24_off = -14, - r23_off = -13, r22_off = -12, - r21_off = -11, r20_off = -10, - r19_off = -9, call_wrapper_off = -8, result_off = -7, result_type_off = -6, method_off = -5, entry_point_off = -4, - parameters_off = -3, parameter_size_off = -2, thread_off = -1, fp_f = 0, retaddr_off = 1, }; --- 161,184 ----
*** 206,239 **** const Address call_wrapper (rfp, call_wrapper_off * wordSize); const Address result (rfp, result_off * wordSize); const Address result_type (rfp, result_type_off * wordSize); const Address method (rfp, method_off * wordSize); const Address entry_point (rfp, entry_point_off * wordSize); - const Address parameters (rfp, parameters_off * wordSize); const Address parameter_size(rfp, parameter_size_off * wordSize); const Address thread (rfp, thread_off * wordSize); const Address d15_save (rfp, d15_off * wordSize); - const Address d14_save (rfp, d14_off * wordSize); const Address d13_save (rfp, d13_off * wordSize); - const Address d12_save (rfp, d12_off * wordSize); const Address d11_save (rfp, d11_off * wordSize); - const Address d10_save (rfp, d10_off * wordSize); const Address d9_save (rfp, d9_off * wordSize); - const Address d8_save (rfp, d8_off * wordSize); const Address r28_save (rfp, r28_off * wordSize); - const Address r27_save (rfp, r27_off * wordSize); const Address r26_save (rfp, r26_off * wordSize); - const Address r25_save (rfp, r25_off * wordSize); const Address r24_save (rfp, r24_off * wordSize); - const Address r23_save (rfp, r23_off * wordSize); const Address r22_save (rfp, r22_off * wordSize); - const Address r21_save (rfp, r21_off * wordSize); const Address r20_save (rfp, r20_off * wordSize); - const Address r19_save (rfp, r19_off * wordSize); // stub code // we need a C prolog to bootstrap the x86 caller into the sim __ c_stub_prolog(8, 0, MacroAssembler::ret_type_void); --- 196,219 ----
*** 252,286 **** // save register parameters and Java scratch/global registers // n.b. we save thread even though it gets installed in // rthread because we want to sanity check rthread later __ str(c_rarg7, thread); __ strw(c_rarg6, parameter_size); ! __ str(c_rarg5, parameters); ! __ str(c_rarg4, entry_point); ! __ str(c_rarg3, method); ! __ str(c_rarg2, result_type); ! __ str(c_rarg1, result); ! __ str(c_rarg0, call_wrapper); ! __ str(r19, r19_save); ! __ str(r20, r20_save); ! __ str(r21, r21_save); ! __ str(r22, r22_save); ! __ str(r23, r23_save); ! __ str(r24, r24_save); ! __ str(r25, r25_save); ! __ str(r26, r26_save); ! __ str(r27, r27_save); ! __ str(r28, r28_save); ! ! __ strd(v8, d8_save); ! __ strd(v9, d9_save); ! __ strd(v10, d10_save); ! __ strd(v11, d11_save); ! __ strd(v12, d12_save); ! __ strd(v13, d13_save); ! __ strd(v14, d14_save); ! __ strd(v15, d15_save); // install Java thread in global register now we have saved // whatever value it held __ mov(rthread, c_rarg7); // And method --- 232,255 ---- // save register parameters and Java scratch/global registers // n.b. we save thread even though it gets installed in // rthread because we want to sanity check rthread later __ str(c_rarg7, thread); __ strw(c_rarg6, parameter_size); ! __ stp(c_rarg4, c_rarg5, entry_point); ! __ stp(c_rarg2, c_rarg3, result_type); ! __ stp(c_rarg0, c_rarg1, call_wrapper); ! ! __ stp(r20, r19, r20_save); ! __ stp(r22, r21, r22_save); ! __ stp(r24, r23, r24_save); ! __ stp(r26, r25, r26_save); ! __ stp(r28, r27, r28_save); ! ! __ stpd(v9, v8, d9_save); ! __ stpd(v11, v10, d11_save); ! __ stpd(v13, v12, d13_save); ! __ stpd(v15, v14, d15_save); // install Java thread in global register now we have saved // whatever value it held __ mov(rthread, c_rarg7); // And method
*** 383,419 **** __ BIND(L); } #endif // restore callee-save registers ! __ ldrd(v15, d15_save); ! __ ldrd(v14, d14_save); ! __ ldrd(v13, d13_save); ! __ ldrd(v12, d12_save); ! __ ldrd(v11, d11_save); ! __ ldrd(v10, d10_save); ! __ ldrd(v9, d9_save); ! __ ldrd(v8, d8_save); ! ! __ ldr(r28, r28_save); ! __ ldr(r27, r27_save); ! __ ldr(r26, r26_save); ! __ ldr(r25, r25_save); ! __ ldr(r24, r24_save); ! __ ldr(r23, r23_save); ! __ ldr(r22, r22_save); ! __ ldr(r21, r21_save); ! __ ldr(r20, r20_save); ! __ ldr(r19, r19_save); ! __ ldr(c_rarg0, call_wrapper); ! __ ldr(c_rarg1, result); __ ldrw(c_rarg2, result_type); __ ldr(c_rarg3, method); ! __ ldr(c_rarg4, entry_point); ! __ ldr(c_rarg5, parameters); ! __ ldr(c_rarg6, parameter_size); ! __ ldr(c_rarg7, thread); #ifndef PRODUCT // tell the simulator we are about to end Java execution if (NotifySimulator) { __ notify(Assembler::method_exit); --- 352,377 ---- __ BIND(L); } #endif // restore callee-save registers ! __ ldpd(v15, v14, d15_save); ! __ ldpd(v13, v12, d13_save); ! __ ldpd(v11, v10, d11_save); ! __ ldpd(v9, v8, d9_save); ! ! __ ldp(r28, r27, r28_save); ! __ ldp(r26, r25, r26_save); ! __ ldp(r24, r23, r24_save); ! __ ldp(r22, r21, r22_save); ! __ ldp(r20, r19, r20_save); ! ! __ ldp(c_rarg0, c_rarg1, call_wrapper); __ ldrw(c_rarg2, result_type); __ ldr(c_rarg3, method); ! __ ldp(c_rarg4, c_rarg5, entry_point); ! __ ldp(c_rarg6, c_rarg7, parameter_size); #ifndef PRODUCT // tell the simulator we are about to end Java execution if (NotifySimulator) { __ notify(Assembler::method_exit);
< prev index next >