hotspot/src/cpu/ppc/vm/ppc.ad
changeset 35086 bbf32241d851
parent 35085 839c8ba29724
child 35093 57f50e045064
equal deleted inserted replaced
35085:839c8ba29724 35086:bbf32241d851
  3394           ciEnv::current()->record_out_of_memory_failure();
  3394           ciEnv::current()->record_out_of_memory_failure();
  3395           return;
  3395           return;
  3396         }
  3396         }
  3397         const int     entry_point_toc_offset = __ offset_to_method_toc(entry_point_toc_addr);
  3397         const int     entry_point_toc_offset = __ offset_to_method_toc(entry_point_toc_addr);
  3398 
  3398 
       
  3399 
  3399         // Emit the trampoline stub which will be related to the branch-and-link below.
  3400         // Emit the trampoline stub which will be related to the branch-and-link below.
  3400         CallStubImpl::emit_trampoline_stub(_masm, entry_point_toc_offset, start_offset);
  3401         CallStubImpl::emit_trampoline_stub(_masm, entry_point_toc_offset, start_offset);
  3401         if (ciEnv::current()->failing()) { return; } // Code cache may be full.
  3402         if (ciEnv::current()->failing()) { return; } // Code cache may be full.
  3402         __ relocate(_optimized_virtual ?
  3403         int method_index = resolved_method_index(cbuf);
  3403                     relocInfo::opt_virtual_call_type : relocInfo::static_call_type);
  3404         __ relocate(_optimized_virtual ? opt_virtual_call_Relocate::spec(method_index)
       
  3405                                        : static_call_Relocate::spec(method_index));
  3404       }
  3406       }
  3405 
  3407 
  3406       // The real call.
  3408       // The real call.
  3407       // Note: At this point we do not have the address of the trampoline
  3409       // Note: At this point we do not have the address of the trampoline
  3408       // stub, and the entry point might be too far away for bl, so __ pc()
  3410       // stub, and the entry point might be too far away for bl, so __ pc()
  3448         ? _load_ic_hi_node->_cbuf_insts_offset
  3450         ? _load_ic_hi_node->_cbuf_insts_offset
  3449         : _load_ic_node->_cbuf_insts_offset;
  3451         : _load_ic_node->_cbuf_insts_offset;
  3450       const address virtual_call_oop_addr = __ addr_at(virtual_call_oop_addr_offset);
  3452       const address virtual_call_oop_addr = __ addr_at(virtual_call_oop_addr_offset);
  3451       assert(MacroAssembler::is_load_const_from_method_toc_at(virtual_call_oop_addr),
  3453       assert(MacroAssembler::is_load_const_from_method_toc_at(virtual_call_oop_addr),
  3452              "should be load from TOC");
  3454              "should be load from TOC");
  3453 
  3455       int method_index = resolved_method_index(cbuf);
  3454       __ relocate(virtual_call_Relocation::spec(virtual_call_oop_addr));
  3456       __ relocate(virtual_call_Relocation::spec(virtual_call_oop_addr, method_index));
  3455     }
  3457     }
  3456 
  3458 
  3457     // At this point I do not have the address of the trampoline stub,
  3459     // At this point I do not have the address of the trampoline stub,
  3458     // and the entry point might be too far away for bl. Pc() serves
  3460     // and the entry point might be too far away for bl. Pc() serves
  3459     // as dummy and bl will be patched later.
  3461     // as dummy and bl will be patched later.