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