682 bl(pc());
683 }
684 }
685
686
687 // Emit a trampoline stub for a call to a target which is too far away.
688 //
689 // code sequences:
690 //
691 // call-site:
692 // branch-and-link to <destination> or <trampoline stub>
693 //
694 // Related trampoline stub for this call site in the stub section:
695 // load the call target from the constant pool
696 // branch (LR still points to the call site above)
697
698 void MacroAssembler::emit_trampoline_stub(int insts_call_instruction_offset,
699 address dest) {
700 address stub = start_a_stub(Compile::MAX_stubs_size/2);
701 if (stub == NULL) {
702 start_a_stub(Compile::MAX_stubs_size/2);
703 Compile::current()->env()->record_out_of_memory_failure();
704 return;
705 }
706
707 // Create a trampoline stub relocation which relates this trampoline stub
708 // with the call instruction at insts_call_instruction_offset in the
709 // instructions code-section.
710 align(wordSize);
711 relocate(trampoline_stub_Relocation::spec(code()->insts()->start()
712 + insts_call_instruction_offset));
713 const int stub_start_offset = offset();
714
715 // Now, create the trampoline stub's code:
716 // - load the call
717 // - call
718 Label target;
719 ldr(rscratch1, target);
720 br(rscratch1);
721 bind(target);
722 assert(offset() - stub_start_offset == NativeCallTrampolineStub::data_offset,
|
682 bl(pc());
683 }
684 }
685
686
687 // Emit a trampoline stub for a call to a target which is too far away.
688 //
689 // code sequences:
690 //
691 // call-site:
692 // branch-and-link to <destination> or <trampoline stub>
693 //
694 // Related trampoline stub for this call site in the stub section:
695 // load the call target from the constant pool
696 // branch (LR still points to the call site above)
697
698 void MacroAssembler::emit_trampoline_stub(int insts_call_instruction_offset,
699 address dest) {
700 address stub = start_a_stub(Compile::MAX_stubs_size/2);
701 if (stub == NULL) {
702 Compile::current()->env()->record_out_of_memory_failure();
703 return;
704 }
705
706 // Create a trampoline stub relocation which relates this trampoline stub
707 // with the call instruction at insts_call_instruction_offset in the
708 // instructions code-section.
709 align(wordSize);
710 relocate(trampoline_stub_Relocation::spec(code()->insts()->start()
711 + insts_call_instruction_offset));
712 const int stub_start_offset = offset();
713
714 // Now, create the trampoline stub's code:
715 // - load the call
716 // - call
717 Label target;
718 ldr(rscratch1, target);
719 br(rscratch1);
720 bind(target);
721 assert(offset() - stub_start_offset == NativeCallTrampolineStub::data_offset,
|