407 __ ld(O0, 0, O1);
408 __ inc(O1);
409 __ st(O1, 0, O0);
410 #endif
411
412 __ br(Assembler::always, false, Assembler::pt, _continuation);
413 __ delayed()->nop();
414 }
415
416
417 ///////////////////////////////////////////////////////////////////////////////////
418 #ifndef SERIALGC
419
420 void G1PreBarrierStub::emit_code(LIR_Assembler* ce) {
421 __ bind(_entry);
422
423 assert(pre_val()->is_register(), "Precondition.");
424
425 Register pre_val_reg = pre_val()->as_register();
426
427 ce->mem2reg(addr(), pre_val(), T_OBJECT, patch_code(), info(), false);
428 if (__ is_in_wdisp16_range(_continuation)) {
429 __ br_on_reg_cond(Assembler::rc_z, /*annul*/false, Assembler::pt,
430 pre_val_reg, _continuation);
431 } else {
432 __ cmp(pre_val_reg, G0);
433 __ brx(Assembler::equal, false, Assembler::pn, _continuation);
434 }
435 __ delayed()->nop();
436
437 __ call(Runtime1::entry_for(Runtime1::Runtime1::g1_pre_barrier_slow_id));
438 __ delayed()->mov(pre_val_reg, G4);
439 __ br(Assembler::always, false, Assembler::pt, _continuation);
440 __ delayed()->nop();
441
442 }
443
444 jbyte* G1PostBarrierStub::_byte_map_base = NULL;
445
446 jbyte* G1PostBarrierStub::byte_map_base_slow() {
447 BarrierSet* bs = Universe::heap()->barrier_set();
|
407 __ ld(O0, 0, O1);
408 __ inc(O1);
409 __ st(O1, 0, O0);
410 #endif
411
412 __ br(Assembler::always, false, Assembler::pt, _continuation);
413 __ delayed()->nop();
414 }
415
416
417 ///////////////////////////////////////////////////////////////////////////////////
418 #ifndef SERIALGC
419
420 void G1PreBarrierStub::emit_code(LIR_Assembler* ce) {
421 __ bind(_entry);
422
423 assert(pre_val()->is_register(), "Precondition.");
424
425 Register pre_val_reg = pre_val()->as_register();
426
427 ce->mem2reg(addr(), pre_val(), T_OBJECT, patch_code(), info(), false /*unaligned*/, false /*wide*/);
428 if (__ is_in_wdisp16_range(_continuation)) {
429 __ br_on_reg_cond(Assembler::rc_z, /*annul*/false, Assembler::pt,
430 pre_val_reg, _continuation);
431 } else {
432 __ cmp(pre_val_reg, G0);
433 __ brx(Assembler::equal, false, Assembler::pn, _continuation);
434 }
435 __ delayed()->nop();
436
437 __ call(Runtime1::entry_for(Runtime1::Runtime1::g1_pre_barrier_slow_id));
438 __ delayed()->mov(pre_val_reg, G4);
439 __ br(Assembler::always, false, Assembler::pt, _continuation);
440 __ delayed()->nop();
441
442 }
443
444 jbyte* G1PostBarrierStub::_byte_map_base = NULL;
445
446 jbyte* G1PostBarrierStub::byte_map_base_slow() {
447 BarrierSet* bs = Universe::heap()->barrier_set();
|