src/cpu/x86/vm/assembler_x86.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6864914 Sdiff src/cpu/x86/vm

src/cpu/x86/vm/assembler_x86.cpp

Print this page




8318   Label done;
8319   shlq(r, LogMinObjAlignmentInBytes);
8320   jccb(Assembler::equal, done);
8321   addq(r, r12_heapbase);
8322 #if 0
8323    // alternate decoding probably a wash.
8324    testq(r, r);
8325    jccb(Assembler::equal, done);
8326    leaq(r, Address(r12_heapbase, r, Address::times_8, 0));
8327 #endif
8328   bind(done);
8329   verify_oop(r, "broken oop in decode_heap_oop");
8330 }
8331 
8332 void  MacroAssembler::decode_heap_oop_not_null(Register r) {
8333   assert (UseCompressedOops, "should only be used for compressed headers");
8334   assert (Universe::heap() != NULL, "java heap should be initialized");
8335   // Cannot assert, unverified entry point counts instructions (see .ad file)
8336   // vtableStubs also counts instructions in pd_code_size_limit.
8337   // Also do not verify_oop as this is called by verify_oop.
8338   if (Universe::narrow_oop_base() == NULL) {
8339     if (Universe::narrow_oop_shift() != 0) {
8340       assert (LogMinObjAlignmentInBytes == Universe::narrow_oop_shift(), "decode alg wrong");
8341       shlq(r, LogMinObjAlignmentInBytes);
8342     }
8343   } else {
8344       assert (Address::times_8 == LogMinObjAlignmentInBytes &&
8345               Address::times_8 == Universe::narrow_oop_shift(), "decode alg wrong");

8346     leaq(r, Address(r12_heapbase, r, Address::times_8, 0));


8347   }
8348 }
8349 
8350 void  MacroAssembler::decode_heap_oop_not_null(Register dst, Register src) {
8351   assert (UseCompressedOops, "should only be used for compressed headers");
8352   assert (Universe::heap() != NULL, "java heap should be initialized");
8353   // Cannot assert, unverified entry point counts instructions (see .ad file)
8354   // vtableStubs also counts instructions in pd_code_size_limit.
8355   // Also do not verify_oop as this is called by verify_oop.
8356   if (Universe::narrow_oop_shift() != 0) {
8357     assert (Address::times_8 == LogMinObjAlignmentInBytes &&
8358             Address::times_8 == Universe::narrow_oop_shift(), "decode alg wrong");
8359     leaq(dst, Address(r12_heapbase, src, Address::times_8, 0));
8360   } else if (dst != src) {

8361     movq(dst, src);
8362   }
8363 }
8364 
8365 void  MacroAssembler::set_narrow_oop(Register dst, jobject obj) {
8366   assert (UseCompressedOops, "should only be used for compressed headers");
8367   assert (Universe::heap() != NULL, "java heap should be initialized");
8368   assert (oop_recorder() != NULL, "this assembler needs an OopRecorder");
8369   int oop_index = oop_recorder()->find_index(obj);
8370   RelocationHolder rspec = oop_Relocation::spec(oop_index);
8371   mov_narrow_oop(dst, oop_index, rspec);
8372 }
8373 
8374 void  MacroAssembler::set_narrow_oop(Address dst, jobject obj) {
8375   assert (UseCompressedOops, "should only be used for compressed headers");
8376   assert (Universe::heap() != NULL, "java heap should be initialized");
8377   assert (oop_recorder() != NULL, "this assembler needs an OopRecorder");
8378   int oop_index = oop_recorder()->find_index(obj);
8379   RelocationHolder rspec = oop_Relocation::spec(oop_index);
8380   mov_narrow_oop(dst, oop_index, rspec);




8318   Label done;
8319   shlq(r, LogMinObjAlignmentInBytes);
8320   jccb(Assembler::equal, done);
8321   addq(r, r12_heapbase);
8322 #if 0
8323    // alternate decoding probably a wash.
8324    testq(r, r);
8325    jccb(Assembler::equal, done);
8326    leaq(r, Address(r12_heapbase, r, Address::times_8, 0));
8327 #endif
8328   bind(done);
8329   verify_oop(r, "broken oop in decode_heap_oop");
8330 }
8331 
8332 void  MacroAssembler::decode_heap_oop_not_null(Register r) {
8333   assert (UseCompressedOops, "should only be used for compressed headers");
8334   assert (Universe::heap() != NULL, "java heap should be initialized");
8335   // Cannot assert, unverified entry point counts instructions (see .ad file)
8336   // vtableStubs also counts instructions in pd_code_size_limit.
8337   // Also do not verify_oop as this is called by verify_oop.

8338   if (Universe::narrow_oop_shift() != 0) {




8339     assert (Address::times_8 == LogMinObjAlignmentInBytes &&
8340             Address::times_8 == Universe::narrow_oop_shift(), "decode alg wrong");
8341     // Don't use Shift since it modifies flags.
8342     leaq(r, Address(r12_heapbase, r, Address::times_8, 0));
8343   } else {
8344     assert (Universe::narrow_oop_base() == NULL, "sanity");
8345   }
8346 }
8347 
8348 void  MacroAssembler::decode_heap_oop_not_null(Register dst, Register src) {
8349   assert (UseCompressedOops, "should only be used for compressed headers");
8350   assert (Universe::heap() != NULL, "java heap should be initialized");
8351   // Cannot assert, unverified entry point counts instructions (see .ad file)
8352   // vtableStubs also counts instructions in pd_code_size_limit.
8353   // Also do not verify_oop as this is called by verify_oop.
8354   if (Universe::narrow_oop_shift() != 0) {
8355     assert (Address::times_8 == LogMinObjAlignmentInBytes &&
8356             Address::times_8 == Universe::narrow_oop_shift(), "decode alg wrong");
8357     leaq(dst, Address(r12_heapbase, src, Address::times_8, 0));
8358   } else if (dst != src) {
8359     assert (Universe::narrow_oop_base() == NULL, "sanity");
8360     movq(dst, src);
8361   }
8362 }
8363 
8364 void  MacroAssembler::set_narrow_oop(Register dst, jobject obj) {
8365   assert (UseCompressedOops, "should only be used for compressed headers");
8366   assert (Universe::heap() != NULL, "java heap should be initialized");
8367   assert (oop_recorder() != NULL, "this assembler needs an OopRecorder");
8368   int oop_index = oop_recorder()->find_index(obj);
8369   RelocationHolder rspec = oop_Relocation::spec(oop_index);
8370   mov_narrow_oop(dst, oop_index, rspec);
8371 }
8372 
8373 void  MacroAssembler::set_narrow_oop(Address dst, jobject obj) {
8374   assert (UseCompressedOops, "should only be used for compressed headers");
8375   assert (Universe::heap() != NULL, "java heap should be initialized");
8376   assert (oop_recorder() != NULL, "this assembler needs an OopRecorder");
8377   int oop_index = oop_recorder()->find_index(obj);
8378   RelocationHolder rspec = oop_Relocation::spec(oop_index);
8379   mov_narrow_oop(dst, oop_index, rspec);


src/cpu/x86/vm/assembler_x86.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File