6061 const int mirror_offset = in_bytes(Klass::java_mirror_offset());
6062 load_method_holder(mirror, method);
6063 movptr(mirror, Address(mirror, mirror_offset));
6064 resolve_oop_handle(mirror, tmp);
6065 }
6066
6067 void MacroAssembler::load_method_holder_cld(Register rresult, Register rmethod) {
6068 load_method_holder(rresult, rmethod);
6069 movptr(rresult, Address(rresult, InstanceKlass::class_loader_data_offset()));
6070 }
6071
6072 void MacroAssembler::load_method_holder(Register holder, Register method) {
6073 movptr(holder, Address(method, Method::const_offset())); // ConstMethod*
6074 movptr(holder, Address(holder, ConstMethod::constants_offset())); // ConstantPool*
6075 movptr(holder, Address(holder, ConstantPool::pool_holder_offset())); // InstanceKlass*
6076 }
6077
6078 #ifdef _LP64
6079 void MacroAssembler::load_narrow_klass_compact(Register dst, Register src) {
6080 assert(UseCompactObjectHeaders, "expect compact object headers");
6081 movq(dst, Address(src, oopDesc::mark_offset_in_bytes()));
6082 shrq(dst, markWord::klass_shift);
6083 }
6084 #endif
6085
6086 void MacroAssembler::load_klass(Register dst, Register src, Register tmp) {
6087 assert_different_registers(src, tmp);
6088 assert_different_registers(dst, tmp);
6089 #ifdef _LP64
6090 if (UseCompactObjectHeaders) {
6091 load_narrow_klass_compact(dst, src);
6092 decode_klass_not_null(dst, tmp);
6093 } else if (UseCompressedClassPointers) {
6094 movl(dst, Address(src, oopDesc::klass_offset_in_bytes()));
6095 decode_klass_not_null(dst, tmp);
6096 } else
6097 #endif
6098 {
6099 movptr(dst, Address(src, oopDesc::klass_offset_in_bytes()));
6100 }
6101 }
6102
|
6061 const int mirror_offset = in_bytes(Klass::java_mirror_offset());
6062 load_method_holder(mirror, method);
6063 movptr(mirror, Address(mirror, mirror_offset));
6064 resolve_oop_handle(mirror, tmp);
6065 }
6066
6067 void MacroAssembler::load_method_holder_cld(Register rresult, Register rmethod) {
6068 load_method_holder(rresult, rmethod);
6069 movptr(rresult, Address(rresult, InstanceKlass::class_loader_data_offset()));
6070 }
6071
6072 void MacroAssembler::load_method_holder(Register holder, Register method) {
6073 movptr(holder, Address(method, Method::const_offset())); // ConstMethod*
6074 movptr(holder, Address(holder, ConstMethod::constants_offset())); // ConstantPool*
6075 movptr(holder, Address(holder, ConstantPool::pool_holder_offset())); // InstanceKlass*
6076 }
6077
6078 #ifdef _LP64
6079 void MacroAssembler::load_narrow_klass_compact(Register dst, Register src) {
6080 assert(UseCompactObjectHeaders, "expect compact object headers");
6081 movl(dst, Address(src, oopDesc::mark_offset_in_bytes()));
6082 shrl(dst, markWord::klass_shift);
6083 }
6084 #endif
6085
6086 void MacroAssembler::load_klass(Register dst, Register src, Register tmp) {
6087 assert_different_registers(src, tmp);
6088 assert_different_registers(dst, tmp);
6089 #ifdef _LP64
6090 if (UseCompactObjectHeaders) {
6091 load_narrow_klass_compact(dst, src);
6092 decode_klass_not_null(dst, tmp);
6093 } else if (UseCompressedClassPointers) {
6094 movl(dst, Address(src, oopDesc::klass_offset_in_bytes()));
6095 decode_klass_not_null(dst, tmp);
6096 } else
6097 #endif
6098 {
6099 movptr(dst, Address(src, oopDesc::klass_offset_in_bytes()));
6100 }
6101 }
6102
|