< prev index next >

src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp

Print this page
rev 49650 : 8201326: Renaming ThreadLocalAllocationBuffer end to current_end
Summary: Rename the TLAB end field to a better name
Contributed-by: jcbeyler@google.com


4251 
4252 // Defines obj, preserves var_size_in_bytes, okay for t2 == var_size_in_bytes.
4253 void MacroAssembler::tlab_allocate(Register obj,
4254                                    Register var_size_in_bytes,
4255                                    int con_size_in_bytes,
4256                                    Register t1,
4257                                    Register t2,
4258                                    Label& slow_case) {
4259   assert_different_registers(obj, t2);
4260   assert_different_registers(obj, var_size_in_bytes);
4261   Register end = t2;
4262 
4263   // verify_tlab();
4264 
4265   ldr(obj, Address(rthread, JavaThread::tlab_top_offset()));
4266   if (var_size_in_bytes == noreg) {
4267     lea(end, Address(obj, con_size_in_bytes));
4268   } else {
4269     lea(end, Address(obj, var_size_in_bytes));
4270   }
4271   ldr(rscratch1, Address(rthread, JavaThread::tlab_end_offset()));
4272   cmp(end, rscratch1);
4273   br(Assembler::HI, slow_case);
4274 
4275   // update the tlab top pointer
4276   str(end, Address(rthread, JavaThread::tlab_top_offset()));
4277 
4278   // recover var_size_in_bytes if necessary
4279   if (var_size_in_bytes == end) {
4280     sub(var_size_in_bytes, var_size_in_bytes, obj);
4281   }
4282   // verify_tlab();
4283 }
4284 
4285 // Zero words; len is in bytes
4286 // Destroys all registers except addr
4287 // len must be a nonzero multiple of wordSize
4288 void MacroAssembler::zero_memory(Register addr, Register len, Register t1) {
4289   assert_different_registers(addr, len, t1, rscratch1, rscratch2);
4290 
4291 #ifdef ASSERT


4397     stlxr(rscratch2, end, rscratch1);
4398     cbnzw(rscratch2, retry);
4399   }
4400 }
4401 
4402 void MacroAssembler::verify_tlab() {
4403 #ifdef ASSERT
4404   if (UseTLAB && VerifyOops) {
4405     Label next, ok;
4406 
4407     stp(rscratch2, rscratch1, Address(pre(sp, -16)));
4408 
4409     ldr(rscratch2, Address(rthread, in_bytes(JavaThread::tlab_top_offset())));
4410     ldr(rscratch1, Address(rthread, in_bytes(JavaThread::tlab_start_offset())));
4411     cmp(rscratch2, rscratch1);
4412     br(Assembler::HS, next);
4413     STOP("assert(top >= start)");
4414     should_not_reach_here();
4415 
4416     bind(next);
4417     ldr(rscratch2, Address(rthread, in_bytes(JavaThread::tlab_end_offset())));
4418     ldr(rscratch1, Address(rthread, in_bytes(JavaThread::tlab_top_offset())));
4419     cmp(rscratch2, rscratch1);
4420     br(Assembler::HS, ok);
4421     STOP("assert(top <= end)");
4422     should_not_reach_here();
4423 
4424     bind(ok);
4425     ldp(rscratch2, rscratch1, Address(post(sp, 16)));
4426   }
4427 #endif
4428 }
4429 
4430 // Writes to stack successive pages until offset reached to check for
4431 // stack overflow + shadow pages.  This clobbers tmp.
4432 void MacroAssembler::bang_stack_size(Register size, Register tmp) {
4433   assert_different_registers(tmp, size, rscratch1);
4434   mov(tmp, sp);
4435   // Bang stack for total size given plus shadow page size.
4436   // Bang one page at a time because large size can bang beyond yellow and
4437   // red zones.




4251 
4252 // Defines obj, preserves var_size_in_bytes, okay for t2 == var_size_in_bytes.
4253 void MacroAssembler::tlab_allocate(Register obj,
4254                                    Register var_size_in_bytes,
4255                                    int con_size_in_bytes,
4256                                    Register t1,
4257                                    Register t2,
4258                                    Label& slow_case) {
4259   assert_different_registers(obj, t2);
4260   assert_different_registers(obj, var_size_in_bytes);
4261   Register end = t2;
4262 
4263   // verify_tlab();
4264 
4265   ldr(obj, Address(rthread, JavaThread::tlab_top_offset()));
4266   if (var_size_in_bytes == noreg) {
4267     lea(end, Address(obj, con_size_in_bytes));
4268   } else {
4269     lea(end, Address(obj, var_size_in_bytes));
4270   }
4271   ldr(rscratch1, Address(rthread, JavaThread::tlab_current_end_offset()));
4272   cmp(end, rscratch1);
4273   br(Assembler::HI, slow_case);
4274 
4275   // update the tlab top pointer
4276   str(end, Address(rthread, JavaThread::tlab_top_offset()));
4277 
4278   // recover var_size_in_bytes if necessary
4279   if (var_size_in_bytes == end) {
4280     sub(var_size_in_bytes, var_size_in_bytes, obj);
4281   }
4282   // verify_tlab();
4283 }
4284 
4285 // Zero words; len is in bytes
4286 // Destroys all registers except addr
4287 // len must be a nonzero multiple of wordSize
4288 void MacroAssembler::zero_memory(Register addr, Register len, Register t1) {
4289   assert_different_registers(addr, len, t1, rscratch1, rscratch2);
4290 
4291 #ifdef ASSERT


4397     stlxr(rscratch2, end, rscratch1);
4398     cbnzw(rscratch2, retry);
4399   }
4400 }
4401 
4402 void MacroAssembler::verify_tlab() {
4403 #ifdef ASSERT
4404   if (UseTLAB && VerifyOops) {
4405     Label next, ok;
4406 
4407     stp(rscratch2, rscratch1, Address(pre(sp, -16)));
4408 
4409     ldr(rscratch2, Address(rthread, in_bytes(JavaThread::tlab_top_offset())));
4410     ldr(rscratch1, Address(rthread, in_bytes(JavaThread::tlab_start_offset())));
4411     cmp(rscratch2, rscratch1);
4412     br(Assembler::HS, next);
4413     STOP("assert(top >= start)");
4414     should_not_reach_here();
4415 
4416     bind(next);
4417     ldr(rscratch2, Address(rthread, in_bytes(JavaThread::tlab_current_end_offset())));
4418     ldr(rscratch1, Address(rthread, in_bytes(JavaThread::tlab_top_offset())));
4419     cmp(rscratch2, rscratch1);
4420     br(Assembler::HS, ok);
4421     STOP("assert(top <= end)");
4422     should_not_reach_here();
4423 
4424     bind(ok);
4425     ldp(rscratch2, rscratch1, Address(post(sp, 16)));
4426   }
4427 #endif
4428 }
4429 
4430 // Writes to stack successive pages until offset reached to check for
4431 // stack overflow + shadow pages.  This clobbers tmp.
4432 void MacroAssembler::bang_stack_size(Register size, Register tmp) {
4433   assert_different_registers(tmp, size, rscratch1);
4434   mov(tmp, sp);
4435   // Bang stack for total size given plus shadow page size.
4436   // Bang one page at a time because large size can bang beyond yellow and
4437   // red zones.


< prev index next >