3372 const bool allow_shared_alloc = |
3372 const bool allow_shared_alloc = |
3373 Universe::heap()->supports_inline_contig_alloc() && !CMSIncrementalMode; |
3373 Universe::heap()->supports_inline_contig_alloc() && !CMSIncrementalMode; |
3374 |
3374 |
3375 if(UseTLAB) { |
3375 if(UseTLAB) { |
3376 Register RoldTopValue = RallocatedObject; |
3376 Register RoldTopValue = RallocatedObject; |
3377 Register RtopAddr = G3_scratch, RtlabWasteLimitValue = G3_scratch; |
3377 Register RtlabWasteLimitValue = G3_scratch; |
3378 Register RnewTopValue = G1_scratch; |
3378 Register RnewTopValue = G1_scratch; |
3379 Register RendValue = Rscratch; |
3379 Register RendValue = Rscratch; |
3380 Register RfreeValue = RnewTopValue; |
3380 Register RfreeValue = RnewTopValue; |
3381 |
3381 |
3382 // check if we can allocate in the TLAB |
3382 // check if we can allocate in the TLAB |
3453 __ deccc(Roffset, sizeof(oopDesc)); |
3453 __ deccc(Roffset, sizeof(oopDesc)); |
3454 __ br(Assembler::zero, false, Assembler::pt, initialize_header); |
3454 __ br(Assembler::zero, false, Assembler::pt, initialize_header); |
3455 __ delayed()->add(RallocatedObject, sizeof(oopDesc), G3_scratch); |
3455 __ delayed()->add(RallocatedObject, sizeof(oopDesc), G3_scratch); |
3456 |
3456 |
3457 // initialize remaining object fields |
3457 // initialize remaining object fields |
3458 { Label loop; |
3458 if (UseBlockZeroing) { |
|
3459 // Use BIS for zeroing |
|
3460 __ bis_zeroing(G3_scratch, Roffset, G1_scratch, initialize_header); |
|
3461 } else { |
|
3462 Label loop; |
3459 __ subcc(Roffset, wordSize, Roffset); |
3463 __ subcc(Roffset, wordSize, Roffset); |
3460 __ bind(loop); |
3464 __ bind(loop); |
3461 //__ subcc(Roffset, wordSize, Roffset); // executed above loop or in delay slot |
3465 //__ subcc(Roffset, wordSize, Roffset); // executed above loop or in delay slot |
3462 __ st_ptr(G0, G3_scratch, Roffset); |
3466 __ st_ptr(G0, G3_scratch, Roffset); |
3463 __ br(Assembler::notEqual, false, Assembler::pt, loop); |
3467 __ br(Assembler::notEqual, false, Assembler::pt, loop); |