5960 const int mirror_offset = in_bytes(Klass::java_mirror_offset());
5961 load_method_holder(mirror, method);
5962 movptr(mirror, Address(mirror, mirror_offset));
5963 resolve_oop_handle(mirror, tmp);
5964 }
5965
5966 void MacroAssembler::load_method_holder_cld(Register rresult, Register rmethod) {
5967 load_method_holder(rresult, rmethod);
5968 movptr(rresult, Address(rresult, InstanceKlass::class_loader_data_offset()));
5969 }
5970
5971 void MacroAssembler::load_method_holder(Register holder, Register method) {
5972 movptr(holder, Address(method, Method::const_offset())); // ConstMethod*
5973 movptr(holder, Address(holder, ConstMethod::constants_offset())); // ConstantPool*
5974 movptr(holder, Address(holder, ConstantPool::pool_holder_offset())); // InstanceKlass*
5975 }
5976
5977 #ifdef _LP64
5978 void MacroAssembler::load_narrow_klass_compact(Register dst, Register src) {
5979 assert(UseCompactObjectHeaders, "expect compact object headers");
5980 movq(dst, Address(src, oopDesc::mark_offset_in_bytes()));
5981 shrq(dst, markWord::klass_shift);
5982 }
5983 #endif
5984
5985 void MacroAssembler::load_klass(Register dst, Register src, Register tmp) {
5986 assert_different_registers(src, tmp);
5987 assert_different_registers(dst, tmp);
5988 #ifdef _LP64
5989 if (UseCompactObjectHeaders) {
5990 load_narrow_klass_compact(dst, src);
5991 decode_klass_not_null(dst, tmp);
5992 } else if (UseCompressedClassPointers) {
5993 movl(dst, Address(src, oopDesc::klass_offset_in_bytes()));
5994 decode_klass_not_null(dst, tmp);
5995 } else
5996 #endif
5997 {
5998 movptr(dst, Address(src, oopDesc::klass_offset_in_bytes()));
5999 }
6000 }
6001
|
5960 const int mirror_offset = in_bytes(Klass::java_mirror_offset());
5961 load_method_holder(mirror, method);
5962 movptr(mirror, Address(mirror, mirror_offset));
5963 resolve_oop_handle(mirror, tmp);
5964 }
5965
5966 void MacroAssembler::load_method_holder_cld(Register rresult, Register rmethod) {
5967 load_method_holder(rresult, rmethod);
5968 movptr(rresult, Address(rresult, InstanceKlass::class_loader_data_offset()));
5969 }
5970
5971 void MacroAssembler::load_method_holder(Register holder, Register method) {
5972 movptr(holder, Address(method, Method::const_offset())); // ConstMethod*
5973 movptr(holder, Address(holder, ConstMethod::constants_offset())); // ConstantPool*
5974 movptr(holder, Address(holder, ConstantPool::pool_holder_offset())); // InstanceKlass*
5975 }
5976
5977 #ifdef _LP64
5978 void MacroAssembler::load_narrow_klass_compact(Register dst, Register src) {
5979 assert(UseCompactObjectHeaders, "expect compact object headers");
5980 movl(dst, Address(src, oopDesc::mark_offset_in_bytes()));
5981 shrl(dst, markWord::klass_shift);
5982 }
5983 #endif
5984
5985 void MacroAssembler::load_klass(Register dst, Register src, Register tmp) {
5986 assert_different_registers(src, tmp);
5987 assert_different_registers(dst, tmp);
5988 #ifdef _LP64
5989 if (UseCompactObjectHeaders) {
5990 load_narrow_klass_compact(dst, src);
5991 decode_klass_not_null(dst, tmp);
5992 } else if (UseCompressedClassPointers) {
5993 movl(dst, Address(src, oopDesc::klass_offset_in_bytes()));
5994 decode_klass_not_null(dst, tmp);
5995 } else
5996 #endif
5997 {
5998 movptr(dst, Address(src, oopDesc::klass_offset_in_bytes()));
5999 }
6000 }
6001
|