456
457 #ifndef PRODUCT
458 __ incrementl(ExternalAddress((address)&Runtime1::_arraycopy_slowcase_cnt));
459 #endif
460
461 __ jmp(_continuation);
462 }
463
464 /////////////////////////////////////////////////////////////////////////////
465 #ifndef SERIALGC
466
467 void G1PreBarrierStub::emit_code(LIR_Assembler* ce) {
468
469 // At this point we know that marking is in progress
470
471 __ bind(_entry);
472 assert(pre_val()->is_register(), "Precondition.");
473
474 Register pre_val_reg = pre_val()->as_register();
475
476 ce->mem2reg(addr(), pre_val(), T_OBJECT, patch_code(), info(), false);
477
478 __ cmpptr(pre_val_reg, (int32_t) NULL_WORD);
479 __ jcc(Assembler::equal, _continuation);
480 ce->store_parameter(pre_val()->as_register(), 0);
481 __ call(RuntimeAddress(Runtime1::entry_for(Runtime1::g1_pre_barrier_slow_id)));
482 __ jmp(_continuation);
483
484 }
485
486 jbyte* G1PostBarrierStub::_byte_map_base = NULL;
487
488 jbyte* G1PostBarrierStub::byte_map_base_slow() {
489 BarrierSet* bs = Universe::heap()->barrier_set();
490 assert(bs->is_a(BarrierSet::G1SATBCTLogging),
491 "Must be if we're using this.");
492 return ((G1SATBCardTableModRefBS*)bs)->byte_map_base;
493 }
494
495 void G1PostBarrierStub::emit_code(LIR_Assembler* ce) {
496 __ bind(_entry);
|
456
457 #ifndef PRODUCT
458 __ incrementl(ExternalAddress((address)&Runtime1::_arraycopy_slowcase_cnt));
459 #endif
460
461 __ jmp(_continuation);
462 }
463
464 /////////////////////////////////////////////////////////////////////////////
465 #ifndef SERIALGC
466
467 void G1PreBarrierStub::emit_code(LIR_Assembler* ce) {
468
469 // At this point we know that marking is in progress
470
471 __ bind(_entry);
472 assert(pre_val()->is_register(), "Precondition.");
473
474 Register pre_val_reg = pre_val()->as_register();
475
476 ce->mem2reg(addr(), pre_val(), T_OBJECT, patch_code(), info(), false /*unaligned*/, false /*wide*/);
477
478 __ cmpptr(pre_val_reg, (int32_t) NULL_WORD);
479 __ jcc(Assembler::equal, _continuation);
480 ce->store_parameter(pre_val()->as_register(), 0);
481 __ call(RuntimeAddress(Runtime1::entry_for(Runtime1::g1_pre_barrier_slow_id)));
482 __ jmp(_continuation);
483
484 }
485
486 jbyte* G1PostBarrierStub::_byte_map_base = NULL;
487
488 jbyte* G1PostBarrierStub::byte_map_base_slow() {
489 BarrierSet* bs = Universe::heap()->barrier_set();
490 assert(bs->is_a(BarrierSet::G1SATBCTLogging),
491 "Must be if we're using this.");
492 return ((G1SATBCardTableModRefBS*)bs)->byte_map_base;
493 }
494
495 void G1PostBarrierStub::emit_code(LIR_Assembler* ce) {
496 __ bind(_entry);
|