< prev index next >

src/cpu/ppc/vm/ppc.ad

Print this page

        

*** 1169,1179 **** void CallStubImpl::emit_trampoline_stub(MacroAssembler &_masm, int destination_toc_offset, int insts_call_instruction_offset) { // Start the stub. address stub = __ start_a_stub(Compile::MAX_stubs_size/2); if (stub == NULL) { ! Compile::current()->env()->record_out_of_memory_failure(); return; } // For java_to_interp stubs we use R11_scratch1 as scratch register // and in call trampoline stubs we use R12_scratch2. This way we --- 1169,1179 ---- void CallStubImpl::emit_trampoline_stub(MacroAssembler &_masm, int destination_toc_offset, int insts_call_instruction_offset) { // Start the stub. address stub = __ start_a_stub(Compile::MAX_stubs_size/2); if (stub == NULL) { ! ciEnv::current()->record_failure("CodeCache is full"); return; } // For java_to_interp stubs we use R11_scratch1 as scratch register // and in call trampoline stubs we use R12_scratch2. This way we
*** 1247,1257 **** const address entry_point_toc_addr = __ address_constant(entry_point, RelocationHolder::none); const int entry_point_toc_offset = __ offset_to_method_toc(entry_point_toc_addr); // Emit the trampoline stub which will be related to the branch-and-link below. CallStubImpl::emit_trampoline_stub(_masm, entry_point_toc_offset, offsets.insts_call_instruction_offset); ! if (Compile::current()->env()->failing()) { return offsets; } // Code cache may be full. __ relocate(rtype); } // Note: At this point we do not have the address of the trampoline // stub, and the entry point might be too far away for bl, so __ pc() --- 1247,1257 ---- const address entry_point_toc_addr = __ address_constant(entry_point, RelocationHolder::none); const int entry_point_toc_offset = __ offset_to_method_toc(entry_point_toc_addr); // Emit the trampoline stub which will be related to the branch-and-link below. CallStubImpl::emit_trampoline_stub(_masm, entry_point_toc_offset, offsets.insts_call_instruction_offset); ! if (ciEnv::current()->failing()) { return offsets; } // Code cache may be full. __ relocate(rtype); } // Note: At this point we do not have the address of the trampoline // stub, and the entry point might be too far away for bl, so __ pc()
*** 3486,3496 **** const address entry_point_toc_addr = __ address_constant(entry_point, RelocationHolder::none); const int entry_point_toc_offset = __ offset_to_method_toc(entry_point_toc_addr); // Emit the trampoline stub which will be related to the branch-and-link below. CallStubImpl::emit_trampoline_stub(_masm, entry_point_toc_offset, start_offset); ! if (Compile::current()->env()->failing()) { return; } // Code cache may be full. __ relocate(_optimized_virtual ? relocInfo::opt_virtual_call_type : relocInfo::static_call_type); } // The real call. --- 3486,3496 ---- const address entry_point_toc_addr = __ address_constant(entry_point, RelocationHolder::none); const int entry_point_toc_offset = __ offset_to_method_toc(entry_point_toc_addr); // Emit the trampoline stub which will be related to the branch-and-link below. CallStubImpl::emit_trampoline_stub(_masm, entry_point_toc_offset, start_offset); ! if (ciEnv::current()->failing()) { return; } // Code cache may be full. __ relocate(_optimized_virtual ? relocInfo::opt_virtual_call_type : relocInfo::static_call_type); } // The real call.
*** 3499,3509 **** // serves as dummy and the bl will be patched later. cbuf.set_insts_mark(); __ bl(__ pc()); // Emits a relocation. // The stub for call to interpreter. ! CompiledStaticCall::emit_to_interp_stub(cbuf); } %} // Emit a method handle call. // --- 3499,3513 ---- // serves as dummy and the bl will be patched later. cbuf.set_insts_mark(); __ bl(__ pc()); // Emits a relocation. // The stub for call to interpreter. ! address stub = CompiledStaticCall::emit_to_interp_stub(cbuf); ! if (stub == NULL) { ! ciEnv::current()->record_failure("CodeCache is full"); ! return; ! } } %} // Emit a method handle call. //
*** 3544,3554 **** cbuf.set_insts_mark(); __ bl(__ pc()); // Emits a relocation. assert(_method, "execute next statement conditionally"); // The stub for call to interpreter. ! CompiledStaticCall::emit_to_interp_stub(cbuf); // Restore original sp. __ ld(R11_scratch1, 0, R1_SP); // Load caller sp. const long framesize = ra_->C->frame_slots() << LogBytesPerInt; unsigned int bytes = (unsigned int)framesize; --- 3548,3562 ---- cbuf.set_insts_mark(); __ bl(__ pc()); // Emits a relocation. assert(_method, "execute next statement conditionally"); // The stub for call to interpreter. ! address stub = CompiledStaticCall::emit_to_interp_stub(cbuf); ! if (stub == NULL) { ! ciEnv::current()->record_failure("CodeCache is full"); ! return; ! } // Restore original sp. __ ld(R11_scratch1, 0, R1_SP); // Load caller sp. const long framesize = ra_->C->frame_slots() << LogBytesPerInt; unsigned int bytes = (unsigned int)framesize;
< prev index next >