360 } 361 __ call(target, relocInfo::runtime_call_type); 362 __ delayed()->nop(); 363 assert(_patch_info_offset == (patch_info_pc - __ pc()), "must not change"); 364 ce->add_call_info_here(_info); 365 __ br(Assembler::always, false, Assembler::pt, _patch_site_entry); 366 __ delayed()->nop(); 367 if (_id == load_klass_id) { 368 CodeSection* cs = __ code_section(); 369 address pc = (address)_pc_start; 370 RelocIterator iter(cs, pc, pc + 1); 371 relocInfo::change_reloc_info_for_address(&iter, (address) pc, relocInfo::oop_type, relocInfo::none); 372 373 pc = (address)(_pc_start + NativeMovConstReg::add_offset); 374 RelocIterator iter2(cs, pc, pc+1); 375 relocInfo::change_reloc_info_for_address(&iter2, (address) pc, relocInfo::oop_type, relocInfo::none); 376 } 377 378 } 379 380 void ArrayCopyStub::emit_code(LIR_Assembler* ce) { 381 //---------------slow case: call to native----------------- 382 __ bind(_entry); 383 __ mov(src()->as_register(), O0); 384 __ mov(src_pos()->as_register(), O1); 385 __ mov(dst()->as_register(), O2); 386 __ mov(dst_pos()->as_register(), O3); 387 __ mov(length()->as_register(), O4); 388 389 ce->emit_static_call_stub(); 390 391 __ call(SharedRuntime::get_resolve_static_call_stub(), relocInfo::static_call_type); 392 __ delayed()->nop(); 393 ce->add_call_info_here(info()); 394 ce->verify_oop_map(info()); 395 396 #ifndef PRODUCT 397 __ set((intptr_t)&Runtime1::_arraycopy_slowcase_cnt, O0); 398 __ ld(O0, 0, O1); 399 __ inc(O1); | 360 } 361 __ call(target, relocInfo::runtime_call_type); 362 __ delayed()->nop(); 363 assert(_patch_info_offset == (patch_info_pc - __ pc()), "must not change"); 364 ce->add_call_info_here(_info); 365 __ br(Assembler::always, false, Assembler::pt, _patch_site_entry); 366 __ delayed()->nop(); 367 if (_id == load_klass_id) { 368 CodeSection* cs = __ code_section(); 369 address pc = (address)_pc_start; 370 RelocIterator iter(cs, pc, pc + 1); 371 relocInfo::change_reloc_info_for_address(&iter, (address) pc, relocInfo::oop_type, relocInfo::none); 372 373 pc = (address)(_pc_start + NativeMovConstReg::add_offset); 374 RelocIterator iter2(cs, pc, pc+1); 375 relocInfo::change_reloc_info_for_address(&iter2, (address) pc, relocInfo::oop_type, relocInfo::none); 376 } 377 378 } 379 380 381 void DeoptimizeStub::emit_code(LIR_Assembler* ce) { 382 __ bind(_entry); 383 __ call(SharedRuntime::deopt_blob()->unpack_with_reexecution()); 384 ce->add_call_info_here(_info); 385 debug_only(__ should_not_reach_here()); 386 } 387 388 389 void ArrayCopyStub::emit_code(LIR_Assembler* ce) { 390 //---------------slow case: call to native----------------- 391 __ bind(_entry); 392 __ mov(src()->as_register(), O0); 393 __ mov(src_pos()->as_register(), O1); 394 __ mov(dst()->as_register(), O2); 395 __ mov(dst_pos()->as_register(), O3); 396 __ mov(length()->as_register(), O4); 397 398 ce->emit_static_call_stub(); 399 400 __ call(SharedRuntime::get_resolve_static_call_stub(), relocInfo::static_call_type); 401 __ delayed()->nop(); 402 ce->add_call_info_here(info()); 403 ce->verify_oop_map(info()); 404 405 #ifndef PRODUCT 406 __ set((intptr_t)&Runtime1::_arraycopy_slowcase_cnt, O0); 407 __ ld(O0, 0, O1); 408 __ inc(O1); |