< prev index next >

src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp

Print this page

5240     stop("null oop passed to encode_heap_oop_not_null2");
5241     bind(ok);
5242   }
5243 #endif
5244   verify_oop_msg(src, "broken oop in encode_heap_oop_not_null2");
5245 
5246   Register data = src;
5247   if (CompressedOops::base() != nullptr) {
5248     sub(dst, src, rheapbase);
5249     data = dst;
5250   }
5251   if (CompressedOops::shift() != 0) {
5252     assert (LogMinObjAlignmentInBytes == CompressedOops::shift(), "decode alg wrong");
5253     lsr(dst, data, LogMinObjAlignmentInBytes);
5254     data = dst;
5255   }
5256   if (data == src)
5257     mov(dst, src);
5258 }
5259 
5260 void  MacroAssembler::decode_heap_oop(Register d, Register s) {
5261 #ifdef ASSERT
5262   verify_heapbase("MacroAssembler::decode_heap_oop: heap base corrupted?");
5263 #endif
5264   if (CompressedOops::base() == nullptr) {
5265     if (CompressedOops::shift() != 0) {
5266       lsl(d, s, CompressedOops::shift());
5267     } else if (d != s) {
5268       mov(d, s);
5269     }



5270   } else {
5271     Label done;
5272     if (d != s)
5273       mov(d, s);
5274     cbz(s, done);
5275     add(d, rheapbase, s, Assembler::LSL, LogMinObjAlignmentInBytes);
5276     bind(done);
5277   }
5278   verify_oop_msg(d, "broken oop in decode_heap_oop");
5279 }
5280 
5281 void  MacroAssembler::decode_heap_oop_not_null(Register r) {
5282   assert (UseCompressedOops, "should only be used for compressed headers");
5283   assert (Universe::heap() != nullptr, "java heap should be initialized");
5284   // Cannot assert, unverified entry point counts instructions (see .ad file)
5285   // vtableStubs also counts instructions in pd_code_size_limit.
5286   // Also do not verify_oop as this is called by verify_oop.
5287   if (CompressedOops::shift() != 0) {
5288     assert(LogMinObjAlignmentInBytes == CompressedOops::shift(), "decode alg wrong");
5289     if (CompressedOops::base() != nullptr) {
5290       add(r, rheapbase, r, Assembler::LSL, LogMinObjAlignmentInBytes);
5291     } else {
5292       add(r, zr, r, Assembler::LSL, LogMinObjAlignmentInBytes);
5293     }
5294   } else {

5240     stop("null oop passed to encode_heap_oop_not_null2");
5241     bind(ok);
5242   }
5243 #endif
5244   verify_oop_msg(src, "broken oop in encode_heap_oop_not_null2");
5245 
5246   Register data = src;
5247   if (CompressedOops::base() != nullptr) {
5248     sub(dst, src, rheapbase);
5249     data = dst;
5250   }
5251   if (CompressedOops::shift() != 0) {
5252     assert (LogMinObjAlignmentInBytes == CompressedOops::shift(), "decode alg wrong");
5253     lsr(dst, data, LogMinObjAlignmentInBytes);
5254     data = dst;
5255   }
5256   if (data == src)
5257     mov(dst, src);
5258 }
5259 
5260 void  MacroAssembler::decode_heap_oop(Register d, Register s, Label* L_null_target) {
5261 #ifdef ASSERT
5262   verify_heapbase("MacroAssembler::decode_heap_oop: heap base corrupted?");
5263 #endif
5264   if (CompressedOops::base() == nullptr) {
5265     if (CompressedOops::shift() != 0) {
5266       lsl(d, s, CompressedOops::shift());
5267     } else if (d != s) {
5268       mov(d, s);
5269     }
5270     if (L_null_target != nullptr) {
5271       cbz(d, *L_null_target);
5272     }
5273   } else {
5274     Label done;
5275     if (d != s)
5276       mov(d, s);
5277     cbz(d, L_null_target != nullptr ? *L_null_target : done);
5278     add(d, rheapbase, s, Assembler::LSL, LogMinObjAlignmentInBytes);
5279     bind(done);
5280   }
5281   verify_oop_msg(d, "broken oop in decode_heap_oop");
5282 }
5283 
5284 void  MacroAssembler::decode_heap_oop_not_null(Register r) {
5285   assert (UseCompressedOops, "should only be used for compressed headers");
5286   assert (Universe::heap() != nullptr, "java heap should be initialized");
5287   // Cannot assert, unverified entry point counts instructions (see .ad file)
5288   // vtableStubs also counts instructions in pd_code_size_limit.
5289   // Also do not verify_oop as this is called by verify_oop.
5290   if (CompressedOops::shift() != 0) {
5291     assert(LogMinObjAlignmentInBytes == CompressedOops::shift(), "decode alg wrong");
5292     if (CompressedOops::base() != nullptr) {
5293       add(r, rheapbase, r, Assembler::LSL, LogMinObjAlignmentInBytes);
5294     } else {
5295       add(r, zr, r, Assembler::LSL, LogMinObjAlignmentInBytes);
5296     }
5297   } else {
< prev index next >