3331 assert_different_registers(top, t1, t2, t3, G4, G5 /* preserve G4 and G5 */); |
3331 assert_different_registers(top, t1, t2, t3, G4, G5 /* preserve G4 and G5 */); |
3332 Label do_refill, discard_tlab; |
3332 Label do_refill, discard_tlab; |
3333 |
3333 |
3334 if (CMSIncrementalMode || !Universe::heap()->supports_inline_contig_alloc()) { |
3334 if (CMSIncrementalMode || !Universe::heap()->supports_inline_contig_alloc()) { |
3335 // No allocation in the shared eden. |
3335 // No allocation in the shared eden. |
3336 ba_short(slow_case); |
3336 ba(slow_case); |
|
3337 delayed()->nop(); |
3337 } |
3338 } |
3338 |
3339 |
3339 ld_ptr(G2_thread, in_bytes(JavaThread::tlab_top_offset()), top); |
3340 ld_ptr(G2_thread, in_bytes(JavaThread::tlab_top_offset()), top); |
3340 ld_ptr(G2_thread, in_bytes(JavaThread::tlab_end_offset()), t1); |
3341 ld_ptr(G2_thread, in_bytes(JavaThread::tlab_end_offset()), t1); |
3341 ld_ptr(G2_thread, in_bytes(JavaThread::tlab_refill_waste_limit_offset()), t2); |
3342 ld_ptr(G2_thread, in_bytes(JavaThread::tlab_refill_waste_limit_offset()), t2); |
3356 // increment number of slow_allocations |
3357 // increment number of slow_allocations |
3357 ld(G2_thread, in_bytes(JavaThread::tlab_slow_allocations_offset()), t2); |
3358 ld(G2_thread, in_bytes(JavaThread::tlab_slow_allocations_offset()), t2); |
3358 add(t2, 1, t2); |
3359 add(t2, 1, t2); |
3359 stw(t2, G2_thread, in_bytes(JavaThread::tlab_slow_allocations_offset())); |
3360 stw(t2, G2_thread, in_bytes(JavaThread::tlab_slow_allocations_offset())); |
3360 } |
3361 } |
3361 ba_short(try_eden); |
3362 ba(try_eden); |
|
3363 delayed()->nop(); |
3362 |
3364 |
3363 bind(discard_tlab); |
3365 bind(discard_tlab); |
3364 if (TLABStats) { |
3366 if (TLABStats) { |
3365 // increment number of refills |
3367 // increment number of refills |
3366 ld(G2_thread, in_bytes(JavaThread::tlab_number_of_refills_offset()), t2); |
3368 ld(G2_thread, in_bytes(JavaThread::tlab_number_of_refills_offset()), t2); |
3418 #endif // ASSERT |
3420 #endif // ASSERT |
3419 add(top, t1, top); // t1 is tlab_size |
3421 add(top, t1, top); // t1 is tlab_size |
3420 sub(top, ThreadLocalAllocBuffer::alignment_reserve_in_bytes(), top); |
3422 sub(top, ThreadLocalAllocBuffer::alignment_reserve_in_bytes(), top); |
3421 st_ptr(top, G2_thread, in_bytes(JavaThread::tlab_end_offset())); |
3423 st_ptr(top, G2_thread, in_bytes(JavaThread::tlab_end_offset())); |
3422 verify_tlab(); |
3424 verify_tlab(); |
3423 ba_short(retry); |
3425 ba(retry); |
|
3426 delayed()->nop(); |
3424 } |
3427 } |
3425 |
3428 |
3426 void MacroAssembler::incr_allocated_bytes(RegisterOrConstant size_in_bytes, |
3429 void MacroAssembler::incr_allocated_bytes(RegisterOrConstant size_in_bytes, |
3427 Register t1, Register t2) { |
3430 Register t1, Register t2) { |
3428 // Bump total bytes allocated by this thread |
3431 // Bump total bytes allocated by this thread |