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
|