390
391 ce->emit_static_call_stub();
392
393 __ call(SharedRuntime::get_resolve_static_call_stub(), relocInfo::static_call_type);
394 __ delayed()->nop();
395 ce->add_call_info_here(info());
396 ce->verify_oop_map(info());
397
398 #ifndef PRODUCT
399 __ set((intptr_t)&Runtime1::_arraycopy_slowcase_cnt, O0);
400 __ ld(O0, 0, O1);
401 __ inc(O1);
402 __ st(O1, 0, O0);
403 #endif
404
405 __ br(Assembler::always, false, Assembler::pt, _continuation);
406 __ delayed()->nop();
407 }
408
409
410 #undef __
411
|
390
391 ce->emit_static_call_stub();
392
393 __ call(SharedRuntime::get_resolve_static_call_stub(), relocInfo::static_call_type);
394 __ delayed()->nop();
395 ce->add_call_info_here(info());
396 ce->verify_oop_map(info());
397
398 #ifndef PRODUCT
399 __ set((intptr_t)&Runtime1::_arraycopy_slowcase_cnt, O0);
400 __ ld(O0, 0, O1);
401 __ inc(O1);
402 __ st(O1, 0, O0);
403 #endif
404
405 __ br(Assembler::always, false, Assembler::pt, _continuation);
406 __ delayed()->nop();
407 }
408
409
410 ///////////////////////////////////////////////////////////////////////////////////
411 #ifndef SERIALGC
412
413 void G1PreBarrierStub::emit_code(LIR_Assembler* ce) {
414 __ bind(_entry);
415
416 assert(pre_val()->is_register(), "Precondition.");
417
418 Register pre_val_reg = pre_val()->as_register();
419
420 ce->mem2reg(addr(), pre_val(), T_OBJECT, patch_code(), info(), false);
421 __ br_on_reg_cond(Assembler::rc_z, /*annul*/false, Assembler::pt,
422 pre_val_reg, _continuation);
423 __ delayed()->nop();
424
425 __ call(Runtime1::entry_for(Runtime1::Runtime1::g1_pre_barrier_slow_id));
426 __ delayed()->mov(pre_val_reg, G4);
427 __ br(Assembler::always, false, Assembler::pt, _continuation);
428 __ delayed()->nop();
429
430 }
431
432 jbyte* G1PostBarrierStub::_byte_map_base = NULL;
433
434 jbyte* G1PostBarrierStub::byte_map_base_slow() {
435 BarrierSet* bs = Universe::heap()->barrier_set();
436 assert(bs->is_a(BarrierSet::G1SATBCTLogging),
437 "Must be if we're using this.");
438 return ((G1SATBCardTableModRefBS*)bs)->byte_map_base;
439 }
440
441 void G1PostBarrierStub::emit_code(LIR_Assembler* ce) {
442 __ bind(_entry);
443
444 assert(addr()->is_register(), "Precondition.");
445 assert(new_val()->is_register(), "Precondition.");
446 Register addr_reg = addr()->as_pointer_register();
447 Register new_val_reg = new_val()->as_register();
448 __ br_on_reg_cond(Assembler::rc_z, /*annul*/false, Assembler::pt,
449 new_val_reg, _continuation);
450 __ delayed()->nop();
451
452 __ call(Runtime1::entry_for(Runtime1::Runtime1::g1_post_barrier_slow_id));
453 __ delayed()->mov(addr_reg, G4);
454 __ br(Assembler::always, false, Assembler::pt, _continuation);
455 __ delayed()->nop();
456 }
457
458 #endif // SERIALGC
459 ///////////////////////////////////////////////////////////////////////////////////
460
461 #undef __
462
|