< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.cpp

Print this page




5235   if (reachable(src)) {
5236     vxorps(dst, nds, as_Address(src), vector_len);
5237   } else {
5238     lea(rscratch1, src);
5239     vxorps(dst, nds, Address(rscratch1, 0), vector_len);
5240   }
5241 }
5242 
5243 
5244 void MacroAssembler::resolve_jobject(Register value,
5245                                      Register thread,
5246                                      Register tmp) {
5247   assert_different_registers(value, thread, tmp);
5248   Label done, not_weak;
5249   testptr(value, value);
5250   jcc(Assembler::zero, done);                // Use NULL as-is.
5251   testptr(value, JNIHandles::weak_tag_mask); // Test for jweak tag.
5252   jcc(Assembler::zero, not_weak);
5253   // Resolve jweak.
5254 #if INCLUDE_ALL_GCS
5255   if (UseLoadBarrier) {
5256     load_barrier(value, Address(value, -JNIHandles::weak_tag_value), false /* expand call */, LoadBarrierOnPhantomOopRef);
5257   } else
5258 #endif
5259   {
5260     movptr(value, Address(value, -JNIHandles::weak_tag_value));
5261   }
5262   verify_oop(value);
5263 #if INCLUDE_ALL_GCS
5264   if (UseG1GC) {
5265     g1_write_barrier_pre(noreg /* obj */,
5266                          value /* pre_val */,
5267                          thread /* thread */,
5268                          tmp /* tmp */,
5269                          true /* tosca_live */,
5270                          true /* expand_call */);
5271   }
5272 #endif // INCLUDE_ALL_GCS
5273   jmp(done);
5274   bind(not_weak);
5275   // Resolve (untagged) jobject.


6703   if (ref == rax) {
6704     addptr(rsp, wordSize);
6705   } else {
6706     movptr(ref, rax);
6707     pop(rax);
6708   }
6709 
6710   bind(done);
6711 
6712   // Restore temp register
6713   pop(resolved_ref_addr);
6714 
6715   BLOCK_COMMENT("} load_barrier");
6716 }
6717 
6718 #endif
6719 
6720 void MacroAssembler::load_heap_oop(Register dst, Address src, bool expand_call, LoadBarrierOn on) {
6721 #ifdef _LP64
6722 #if INCLUDE_ALL_GCS
6723   if (UseLoadBarrier) {
6724     load_barrier(dst, src, expand_call, on);
6725   } else
6726 #endif
6727   if (UseCompressedOops) {
6728     movl(dst, src);
6729     decode_heap_oop(dst);
6730   } else
6731 #endif
6732     movptr(dst, src);
6733 }
6734 
6735 // Doesn't do verfication, generates fixed size code
6736 void MacroAssembler::load_heap_oop_not_null(Register dst, Address src) {
6737 #ifdef _LP64
6738   if (UseCompressedOops) {
6739     movl(dst, src);
6740     decode_heap_oop_not_null(dst);
6741   } else
6742 #endif
6743     movptr(dst, src);
6744 }
6745 
6746 void MacroAssembler::store_heap_oop(Address dst, Register src) {
6747 #ifdef ASSERT
6748   if (VerifyOops && UseLoadBarrier) {
6749     // Check if mask is good
6750     Label done;
6751     testptr(src, Address(r15_thread, JavaThread::zaddress_bad_mask_offset()));
6752     jcc(Assembler::zero, done);
6753     STOP("Writing broken oop");
6754     should_not_reach_here();
6755     bind(done);
6756   }
6757 #endif
6758 
6759 #ifdef _LP64
6760   if (UseCompressedOops) {
6761     assert(!dst.uses(src), "not enough registers");
6762     encode_heap_oop(src);
6763     movl(dst, src);
6764   } else
6765 #endif
6766     movptr(dst, src);
6767 }
6768 




5235   if (reachable(src)) {
5236     vxorps(dst, nds, as_Address(src), vector_len);
5237   } else {
5238     lea(rscratch1, src);
5239     vxorps(dst, nds, Address(rscratch1, 0), vector_len);
5240   }
5241 }
5242 
5243 
5244 void MacroAssembler::resolve_jobject(Register value,
5245                                      Register thread,
5246                                      Register tmp) {
5247   assert_different_registers(value, thread, tmp);
5248   Label done, not_weak;
5249   testptr(value, value);
5250   jcc(Assembler::zero, done);                // Use NULL as-is.
5251   testptr(value, JNIHandles::weak_tag_mask); // Test for jweak tag.
5252   jcc(Assembler::zero, not_weak);
5253   // Resolve jweak.
5254 #if INCLUDE_ALL_GCS
5255   if (UseZGC) {
5256     load_barrier(value, Address(value, -JNIHandles::weak_tag_value), false /* expand call */, LoadBarrierOnPhantomOopRef);
5257   } else
5258 #endif
5259   {
5260     movptr(value, Address(value, -JNIHandles::weak_tag_value));
5261   }
5262   verify_oop(value);
5263 #if INCLUDE_ALL_GCS
5264   if (UseG1GC) {
5265     g1_write_barrier_pre(noreg /* obj */,
5266                          value /* pre_val */,
5267                          thread /* thread */,
5268                          tmp /* tmp */,
5269                          true /* tosca_live */,
5270                          true /* expand_call */);
5271   }
5272 #endif // INCLUDE_ALL_GCS
5273   jmp(done);
5274   bind(not_weak);
5275   // Resolve (untagged) jobject.


6703   if (ref == rax) {
6704     addptr(rsp, wordSize);
6705   } else {
6706     movptr(ref, rax);
6707     pop(rax);
6708   }
6709 
6710   bind(done);
6711 
6712   // Restore temp register
6713   pop(resolved_ref_addr);
6714 
6715   BLOCK_COMMENT("} load_barrier");
6716 }
6717 
6718 #endif
6719 
6720 void MacroAssembler::load_heap_oop(Register dst, Address src, bool expand_call, LoadBarrierOn on) {
6721 #ifdef _LP64
6722 #if INCLUDE_ALL_GCS
6723   if (UseZGC) {
6724     load_barrier(dst, src, expand_call, on);
6725   } else
6726 #endif
6727   if (UseCompressedOops) {
6728     movl(dst, src);
6729     decode_heap_oop(dst);
6730   } else
6731 #endif
6732     movptr(dst, src);
6733 }
6734 
6735 // Doesn't do verfication, generates fixed size code
6736 void MacroAssembler::load_heap_oop_not_null(Register dst, Address src) {
6737 #ifdef _LP64
6738   if (UseCompressedOops) {
6739     movl(dst, src);
6740     decode_heap_oop_not_null(dst);
6741   } else
6742 #endif
6743     movptr(dst, src);
6744 }
6745 
6746 void MacroAssembler::store_heap_oop(Address dst, Register src) {
6747 #ifdef ASSERT
6748   if (VerifyOops && UseZGC) {
6749     // Check if mask is good
6750     Label done;
6751     testptr(src, Address(r15_thread, JavaThread::zaddress_bad_mask_offset()));
6752     jcc(Assembler::zero, done);
6753     STOP("Writing broken oop");
6754     should_not_reach_here();
6755     bind(done);
6756   }
6757 #endif
6758 
6759 #ifdef _LP64
6760   if (UseCompressedOops) {
6761     assert(!dst.uses(src), "not enough registers");
6762     encode_heap_oop(src);
6763     movl(dst, src);
6764   } else
6765 #endif
6766     movptr(dst, src);
6767 }
6768 


< prev index next >