< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.cpp

Print this page

 5356   // get mirror
 5357   const int mirror_offset = in_bytes(Klass::java_mirror_offset());
 5358   load_method_holder(mirror, method);
 5359   movptr(mirror, Address(mirror, mirror_offset));
 5360   resolve_oop_handle(mirror, tmp);
 5361 }
 5362 
 5363 void MacroAssembler::load_method_holder_cld(Register rresult, Register rmethod) {
 5364   load_method_holder(rresult, rmethod);
 5365   movptr(rresult, Address(rresult, InstanceKlass::class_loader_data_offset()));
 5366 }
 5367 
 5368 void MacroAssembler::load_method_holder(Register holder, Register method) {
 5369   movptr(holder, Address(method, Method::const_offset()));                      // ConstMethod*
 5370   movptr(holder, Address(holder, ConstMethod::constants_offset()));             // ConstantPool*
 5371   movptr(holder, Address(holder, ConstantPool::pool_holder_offset()));          // InstanceKlass*
 5372 }
 5373 
 5374 void MacroAssembler::load_narrow_klass_compact(Register dst, Register src) {
 5375   assert(UseCompactObjectHeaders, "expect compact object headers");
 5376   movq(dst, Address(src, oopDesc::mark_offset_in_bytes()));
 5377   shrq(dst, markWord::klass_shift);
 5378 }
 5379 
 5380 void MacroAssembler::load_klass(Register dst, Register src, Register tmp) {
 5381   assert_different_registers(src, tmp);
 5382   assert_different_registers(dst, tmp);
 5383 
 5384   if (UseCompactObjectHeaders) {
 5385     load_narrow_klass_compact(dst, src);
 5386     decode_klass_not_null(dst, tmp);
 5387   } else if (UseCompressedClassPointers) {
 5388     movl(dst, Address(src, oopDesc::klass_offset_in_bytes()));
 5389     decode_klass_not_null(dst, tmp);
 5390   } else {
 5391     movptr(dst, Address(src, oopDesc::klass_offset_in_bytes()));
 5392   }
 5393 }
 5394 
 5395 void MacroAssembler::store_klass(Register dst, Register src, Register tmp) {
 5396   assert(!UseCompactObjectHeaders, "not with compact headers");
 5397   assert_different_registers(src, tmp);

 5356   // get mirror
 5357   const int mirror_offset = in_bytes(Klass::java_mirror_offset());
 5358   load_method_holder(mirror, method);
 5359   movptr(mirror, Address(mirror, mirror_offset));
 5360   resolve_oop_handle(mirror, tmp);
 5361 }
 5362 
 5363 void MacroAssembler::load_method_holder_cld(Register rresult, Register rmethod) {
 5364   load_method_holder(rresult, rmethod);
 5365   movptr(rresult, Address(rresult, InstanceKlass::class_loader_data_offset()));
 5366 }
 5367 
 5368 void MacroAssembler::load_method_holder(Register holder, Register method) {
 5369   movptr(holder, Address(method, Method::const_offset()));                      // ConstMethod*
 5370   movptr(holder, Address(holder, ConstMethod::constants_offset()));             // ConstantPool*
 5371   movptr(holder, Address(holder, ConstantPool::pool_holder_offset()));          // InstanceKlass*
 5372 }
 5373 
 5374 void MacroAssembler::load_narrow_klass_compact(Register dst, Register src) {
 5375   assert(UseCompactObjectHeaders, "expect compact object headers");
 5376   movl(dst, Address(src, oopDesc::mark_offset_in_bytes()));
 5377   shrl(dst, markWord::klass_shift);
 5378 }
 5379 
 5380 void MacroAssembler::load_klass(Register dst, Register src, Register tmp) {
 5381   assert_different_registers(src, tmp);
 5382   assert_different_registers(dst, tmp);
 5383 
 5384   if (UseCompactObjectHeaders) {
 5385     load_narrow_klass_compact(dst, src);
 5386     decode_klass_not_null(dst, tmp);
 5387   } else if (UseCompressedClassPointers) {
 5388     movl(dst, Address(src, oopDesc::klass_offset_in_bytes()));
 5389     decode_klass_not_null(dst, tmp);
 5390   } else {
 5391     movptr(dst, Address(src, oopDesc::klass_offset_in_bytes()));
 5392   }
 5393 }
 5394 
 5395 void MacroAssembler::store_klass(Register dst, Register src, Register tmp) {
 5396   assert(!UseCompactObjectHeaders, "not with compact headers");
 5397   assert_different_registers(src, tmp);
< prev index next >