< prev index next >

src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp

Print this page
rev 49665 : 8201326: Renaming ThreadLocalAllocationBuffer end to current_end
Summary: Rename the TLAB end field to a better name
Contributed-by: jcbeyler@google.com
rev 49666 : [mq]: renaming2


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


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




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


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


< prev index next >