< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.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


5576                                    Register var_size_in_bytes,
5577                                    int con_size_in_bytes,
5578                                    Register t1,
5579                                    Register t2,
5580                                    Label& slow_case) {
5581   assert_different_registers(obj, t1, t2);
5582   assert_different_registers(obj, var_size_in_bytes, t1);
5583   Register end = t2;
5584   Register thread = NOT_LP64(t1) LP64_ONLY(r15_thread);
5585 
5586   verify_tlab();
5587 
5588   NOT_LP64(get_thread(thread));
5589 
5590   movptr(obj, Address(thread, JavaThread::tlab_top_offset()));
5591   if (var_size_in_bytes == noreg) {
5592     lea(end, Address(obj, con_size_in_bytes));
5593   } else {
5594     lea(end, Address(obj, var_size_in_bytes, Address::times_1));
5595   }
5596   cmpptr(end, Address(thread, JavaThread::tlab_end_offset()));
5597   jcc(Assembler::above, slow_case);
5598 
5599   // update the tlab top pointer
5600   movptr(Address(thread, JavaThread::tlab_top_offset()), end);
5601 
5602   // recover var_size_in_bytes if necessary
5603   if (var_size_in_bytes == end) {
5604     subptr(var_size_in_bytes, obj);
5605   }
5606   verify_tlab();
5607 }
5608 
5609 // Preserves the contents of address, destroys the contents length_in_bytes and temp.
5610 void MacroAssembler::zero_memory(Register address, Register length_in_bytes, int offset_in_bytes, Register temp) {
5611   assert(address != length_in_bytes && address != temp && temp != length_in_bytes, "registers must be different");
5612   assert((offset_in_bytes & (BytesPerWord - 1)) == 0, "offset must be a multiple of BytesPerWord");
5613   Label done;
5614 
5615   testptr(length_in_bytes, length_in_bytes);
5616   jcc(Assembler::zero, done);


6144 }
6145 
6146 void MacroAssembler::verify_tlab() {
6147 #ifdef ASSERT
6148   if (UseTLAB && VerifyOops) {
6149     Label next, ok;
6150     Register t1 = rsi;
6151     Register thread_reg = NOT_LP64(rbx) LP64_ONLY(r15_thread);
6152 
6153     push(t1);
6154     NOT_LP64(push(thread_reg));
6155     NOT_LP64(get_thread(thread_reg));
6156 
6157     movptr(t1, Address(thread_reg, in_bytes(JavaThread::tlab_top_offset())));
6158     cmpptr(t1, Address(thread_reg, in_bytes(JavaThread::tlab_start_offset())));
6159     jcc(Assembler::aboveEqual, next);
6160     STOP("assert(top >= start)");
6161     should_not_reach_here();
6162 
6163     bind(next);
6164     movptr(t1, Address(thread_reg, in_bytes(JavaThread::tlab_end_offset())));
6165     cmpptr(t1, Address(thread_reg, in_bytes(JavaThread::tlab_top_offset())));
6166     jcc(Assembler::aboveEqual, ok);
6167     STOP("assert(top <= end)");
6168     should_not_reach_here();
6169 
6170     bind(ok);
6171     NOT_LP64(pop(thread_reg));
6172     pop(t1);
6173   }
6174 #endif
6175 }
6176 
6177 class ControlWord {
6178  public:
6179   int32_t _value;
6180 
6181   int  rounding_control() const        { return  (_value >> 10) & 3      ; }
6182   int  precision_control() const       { return  (_value >>  8) & 3      ; }
6183   bool precision() const               { return ((_value >>  5) & 1) != 0; }
6184   bool underflow() const               { return ((_value >>  4) & 1) != 0; }




5576                                    Register var_size_in_bytes,
5577                                    int con_size_in_bytes,
5578                                    Register t1,
5579                                    Register t2,
5580                                    Label& slow_case) {
5581   assert_different_registers(obj, t1, t2);
5582   assert_different_registers(obj, var_size_in_bytes, t1);
5583   Register end = t2;
5584   Register thread = NOT_LP64(t1) LP64_ONLY(r15_thread);
5585 
5586   verify_tlab();
5587 
5588   NOT_LP64(get_thread(thread));
5589 
5590   movptr(obj, Address(thread, JavaThread::tlab_top_offset()));
5591   if (var_size_in_bytes == noreg) {
5592     lea(end, Address(obj, con_size_in_bytes));
5593   } else {
5594     lea(end, Address(obj, var_size_in_bytes, Address::times_1));
5595   }
5596   cmpptr(end, Address(thread, JavaThread::tlab_fast_path_end_offset()));
5597   jcc(Assembler::above, slow_case);
5598 
5599   // update the tlab top pointer
5600   movptr(Address(thread, JavaThread::tlab_top_offset()), end);
5601 
5602   // recover var_size_in_bytes if necessary
5603   if (var_size_in_bytes == end) {
5604     subptr(var_size_in_bytes, obj);
5605   }
5606   verify_tlab();
5607 }
5608 
5609 // Preserves the contents of address, destroys the contents length_in_bytes and temp.
5610 void MacroAssembler::zero_memory(Register address, Register length_in_bytes, int offset_in_bytes, Register temp) {
5611   assert(address != length_in_bytes && address != temp && temp != length_in_bytes, "registers must be different");
5612   assert((offset_in_bytes & (BytesPerWord - 1)) == 0, "offset must be a multiple of BytesPerWord");
5613   Label done;
5614 
5615   testptr(length_in_bytes, length_in_bytes);
5616   jcc(Assembler::zero, done);


6144 }
6145 
6146 void MacroAssembler::verify_tlab() {
6147 #ifdef ASSERT
6148   if (UseTLAB && VerifyOops) {
6149     Label next, ok;
6150     Register t1 = rsi;
6151     Register thread_reg = NOT_LP64(rbx) LP64_ONLY(r15_thread);
6152 
6153     push(t1);
6154     NOT_LP64(push(thread_reg));
6155     NOT_LP64(get_thread(thread_reg));
6156 
6157     movptr(t1, Address(thread_reg, in_bytes(JavaThread::tlab_top_offset())));
6158     cmpptr(t1, Address(thread_reg, in_bytes(JavaThread::tlab_start_offset())));
6159     jcc(Assembler::aboveEqual, next);
6160     STOP("assert(top >= start)");
6161     should_not_reach_here();
6162 
6163     bind(next);
6164     movptr(t1, Address(thread_reg, in_bytes(JavaThread::tlab_fast_path_end_offset())));
6165     cmpptr(t1, Address(thread_reg, in_bytes(JavaThread::tlab_top_offset())));
6166     jcc(Assembler::aboveEqual, ok);
6167     STOP("assert(top <= end)");
6168     should_not_reach_here();
6169 
6170     bind(ok);
6171     NOT_LP64(pop(thread_reg));
6172     pop(t1);
6173   }
6174 #endif
6175 }
6176 
6177 class ControlWord {
6178  public:
6179   int32_t _value;
6180 
6181   int  rounding_control() const        { return  (_value >> 10) & 3      ; }
6182   int  precision_control() const       { return  (_value >>  8) & 3      ; }
6183   bool precision() const               { return ((_value >>  5) & 1) != 0; }
6184   bool underflow() const               { return ((_value >>  4) & 1) != 0; }


< prev index next >