< prev index next >
src/hotspot/cpu/aarch64/compiledIC_aarch64.cpp
Print this page
*** 81,90 ****
--- 81,145 ----
// Relocation entries for call stub, compiled java to interpreter.
int CompiledStaticCall::reloc_to_interp_stub() {
return 4; // 3 in emit_to_interp_stub + 1 in emit_call
}
+ #if INCLUDE_AOT
+ #define __ _masm.
+ void CompiledStaticCall::emit_to_aot_stub(CodeBuffer &cbuf, address mark) {
+ if (!UseAOT) {
+ return;
+ }
+ // Stub is fixed up when the corresponding call is converted from
+ // calling compiled code to calling aot code.
+ // mov r, imm64_aot_code_address
+ // jmp r
+
+ if (mark == NULL) {
+ mark = cbuf.insts_mark(); // Get mark within main instrs section.
+ }
+
+ // Note that the code buffer's insts_mark is always relative to insts.
+ // That's why we must use the macroassembler to generate a stub.
+ MacroAssembler _masm(&cbuf);
+
+ address base =
+ __ start_a_stub(to_aot_stub_size());
+ guarantee(base != NULL, "out of space");
+
+ // Static stub relocation stores the instruction address of the call.
+ __ relocate(static_stub_Relocation::spec(mark, true /* is_aot */));
+ // Load destination AOT code address.
+ __ movptr(rscratch1, 0); // address is zapped till fixup time.
+ // This is recognized as unresolved by relocs/nativeinst/ic code.
+ __ br(rscratch1);
+
+ assert(__ pc() - base <= to_aot_stub_size(), "wrong stub size");
+
+ // Update current stubs pointer and restore insts_end.
+ __ end_a_stub();
+ }
+ #undef __
+
+ int CompiledStaticCall::to_aot_stub_size() {
+ if (UseAOT) {
+ return 5 * 4; // movz; movk; movk; movk; br
+ } else {
+ return 0;
+ }
+ }
+
+ // Relocation entries for call stub, compiled java to aot.
+ int CompiledStaticCall::reloc_to_aot_stub() {
+ if (UseAOT) {
+ return 5 * 4; // movz; movk; movk; movk; br
+ } else {
+ return 0;
+ }
+ }
+ #endif // INCLUDE_AOT
+
void CompiledDirectStaticCall::set_to_interpreted(const methodHandle& callee, address entry) {
address stub = find_stub(false /* is_aot */);
guarantee(stub != NULL, "stub not found");
if (TraceICs) {
< prev index next >