< prev index next >
src/hotspot/cpu/x86/templateTable_x86.cpp
Print this page
rev 50538 : [mq]: JDK-8204941.patch
@@ -4011,15 +4011,11 @@
__ get_thread(thread);
}
#endif // _LP64
if (UseTLAB) {
- __ movptr(rax, Address(thread, in_bytes(JavaThread::tlab_top_offset())));
- __ lea(rbx, Address(rax, rdx, Address::times_1));
- __ cmpptr(rbx, Address(thread, in_bytes(JavaThread::tlab_end_offset())));
- __ jcc(Assembler::above, slow_case);
- __ movptr(Address(thread, in_bytes(JavaThread::tlab_top_offset())), rbx);
+ __ tlab_allocate(rax, rdx, 0, rcx, rbx, slow_case);
if (ZeroTLAB) {
// the fields have been already cleared
__ jmp(initialize_header);
} else {
// initialize both the header and fields
@@ -4028,32 +4024,11 @@
} else {
// Allocation in the shared Eden, if allowed.
//
// rdx: instance size in bytes
if (allow_shared_alloc) {
- ExternalAddress heap_top((address)Universe::heap()->top_addr());
- ExternalAddress heap_end((address)Universe::heap()->end_addr());
-
- Label retry;
- __ bind(retry);
- __ movptr(rax, heap_top);
- __ lea(rbx, Address(rax, rdx, Address::times_1));
- __ cmpptr(rbx, heap_end);
- __ jcc(Assembler::above, slow_case);
-
- // Compare rax, with the top addr, and if still equal, store the new
- // top addr in rbx, at the address of the top addr pointer. Sets ZF if was
- // equal, and clears it otherwise. Use lock prefix for atomicity on MPs.
- //
- // rax,: object begin
- // rbx,: object end
- // rdx: instance size in bytes
- __ locked_cmpxchgptr(rbx, heap_top);
-
- // if someone beat us on the allocation, try again, otherwise continue
- __ jcc(Assembler::notEqual, retry);
-
+ __ eden_allocate(rax, rdx, 0, rbx, slow_case);
__ incr_allocated_bytes(thread, rdx, 0);
}
}
// If UseTLAB or allow_shared_alloc are true, the object is created above and
< prev index next >