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