< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.cpp

Print this page

5122   // get mirror
5123   const int mirror_offset = in_bytes(Klass::java_mirror_offset());
5124   load_method_holder(mirror, method);
5125   movptr(mirror, Address(mirror, mirror_offset));
5126   resolve_oop_handle(mirror, tmp);
5127 }
5128 
5129 void MacroAssembler::load_method_holder_cld(Register rresult, Register rmethod) {
5130   load_method_holder(rresult, rmethod);
5131   movptr(rresult, Address(rresult, InstanceKlass::class_loader_data_offset()));
5132 }
5133 
5134 void MacroAssembler::load_method_holder(Register holder, Register method) {
5135   movptr(holder, Address(method, Method::const_offset()));                      // ConstMethod*
5136   movptr(holder, Address(holder, ConstMethod::constants_offset()));             // ConstantPool*
5137   movptr(holder, Address(holder, ConstantPool::pool_holder_offset()));          // InstanceKlass*
5138 }
5139 
5140 void MacroAssembler::load_narrow_klass_compact(Register dst, Register src) {
5141   assert(UseCompactObjectHeaders, "expect compact object headers");
5142   movq(dst, Address(src, oopDesc::mark_offset_in_bytes()));
5143   shrq(dst, markWord::klass_shift);
5144 }
5145 
5146 void MacroAssembler::load_klass(Register dst, Register src, Register tmp) {
5147   assert_different_registers(src, tmp);
5148   assert_different_registers(dst, tmp);
5149 
5150   if (UseCompactObjectHeaders) {
5151     load_narrow_klass_compact(dst, src);
5152     decode_klass_not_null(dst, tmp);
5153   } else if (UseCompressedClassPointers) {
5154     movl(dst, Address(src, oopDesc::klass_offset_in_bytes()));
5155     decode_klass_not_null(dst, tmp);
5156   } else {
5157     movptr(dst, Address(src, oopDesc::klass_offset_in_bytes()));
5158   }
5159 }
5160 
5161 void MacroAssembler::store_klass(Register dst, Register src, Register tmp) {
5162   assert(!UseCompactObjectHeaders, "not with compact headers");
5163   assert_different_registers(src, tmp);

5122   // get mirror
5123   const int mirror_offset = in_bytes(Klass::java_mirror_offset());
5124   load_method_holder(mirror, method);
5125   movptr(mirror, Address(mirror, mirror_offset));
5126   resolve_oop_handle(mirror, tmp);
5127 }
5128 
5129 void MacroAssembler::load_method_holder_cld(Register rresult, Register rmethod) {
5130   load_method_holder(rresult, rmethod);
5131   movptr(rresult, Address(rresult, InstanceKlass::class_loader_data_offset()));
5132 }
5133 
5134 void MacroAssembler::load_method_holder(Register holder, Register method) {
5135   movptr(holder, Address(method, Method::const_offset()));                      // ConstMethod*
5136   movptr(holder, Address(holder, ConstMethod::constants_offset()));             // ConstantPool*
5137   movptr(holder, Address(holder, ConstantPool::pool_holder_offset()));          // InstanceKlass*
5138 }
5139 
5140 void MacroAssembler::load_narrow_klass_compact(Register dst, Register src) {
5141   assert(UseCompactObjectHeaders, "expect compact object headers");
5142   movl(dst, Address(src, oopDesc::mark_offset_in_bytes()));
5143   shrl(dst, markWord::klass_shift);
5144 }
5145 
5146 void MacroAssembler::load_klass(Register dst, Register src, Register tmp) {
5147   assert_different_registers(src, tmp);
5148   assert_different_registers(dst, tmp);
5149 
5150   if (UseCompactObjectHeaders) {
5151     load_narrow_klass_compact(dst, src);
5152     decode_klass_not_null(dst, tmp);
5153   } else if (UseCompressedClassPointers) {
5154     movl(dst, Address(src, oopDesc::klass_offset_in_bytes()));
5155     decode_klass_not_null(dst, tmp);
5156   } else {
5157     movptr(dst, Address(src, oopDesc::klass_offset_in_bytes()));
5158   }
5159 }
5160 
5161 void MacroAssembler::store_klass(Register dst, Register src, Register tmp) {
5162   assert(!UseCompactObjectHeaders, "not with compact headers");
5163   assert_different_registers(src, tmp);
< prev index next >