5944 const int mirror_offset = in_bytes(Klass::java_mirror_offset());
5945 load_method_holder(mirror, method);
5946 movptr(mirror, Address(mirror, mirror_offset));
5947 resolve_oop_handle(mirror, tmp);
5948 }
5949
5950 void MacroAssembler::load_method_holder_cld(Register rresult, Register rmethod) {
5951 load_method_holder(rresult, rmethod);
5952 movptr(rresult, Address(rresult, InstanceKlass::class_loader_data_offset()));
5953 }
5954
5955 void MacroAssembler::load_method_holder(Register holder, Register method) {
5956 movptr(holder, Address(method, Method::const_offset())); // ConstMethod*
5957 movptr(holder, Address(holder, ConstMethod::constants_offset())); // ConstantPool*
5958 movptr(holder, Address(holder, ConstantPool::pool_holder_offset())); // InstanceKlass*
5959 }
5960
5961 #ifdef _LP64
5962 void MacroAssembler::load_narrow_klass_compact(Register dst, Register src) {
5963 assert(UseCompactObjectHeaders, "expect compact object headers");
5964 movq(dst, Address(src, oopDesc::mark_offset_in_bytes()));
5965 shrq(dst, markWord::klass_shift);
5966 }
5967 #endif
5968
5969 void MacroAssembler::load_klass(Register dst, Register src, Register tmp) {
5970 assert_different_registers(src, tmp);
5971 assert_different_registers(dst, tmp);
5972 #ifdef _LP64
5973 if (UseCompactObjectHeaders) {
5974 load_narrow_klass_compact(dst, src);
5975 decode_klass_not_null(dst, tmp);
5976 } else if (UseCompressedClassPointers) {
5977 movl(dst, Address(src, oopDesc::klass_offset_in_bytes()));
5978 decode_klass_not_null(dst, tmp);
5979 } else
5980 #endif
5981 {
5982 movptr(dst, Address(src, oopDesc::klass_offset_in_bytes()));
5983 }
5984 }
5985
|
5944 const int mirror_offset = in_bytes(Klass::java_mirror_offset());
5945 load_method_holder(mirror, method);
5946 movptr(mirror, Address(mirror, mirror_offset));
5947 resolve_oop_handle(mirror, tmp);
5948 }
5949
5950 void MacroAssembler::load_method_holder_cld(Register rresult, Register rmethod) {
5951 load_method_holder(rresult, rmethod);
5952 movptr(rresult, Address(rresult, InstanceKlass::class_loader_data_offset()));
5953 }
5954
5955 void MacroAssembler::load_method_holder(Register holder, Register method) {
5956 movptr(holder, Address(method, Method::const_offset())); // ConstMethod*
5957 movptr(holder, Address(holder, ConstMethod::constants_offset())); // ConstantPool*
5958 movptr(holder, Address(holder, ConstantPool::pool_holder_offset())); // InstanceKlass*
5959 }
5960
5961 #ifdef _LP64
5962 void MacroAssembler::load_narrow_klass_compact(Register dst, Register src) {
5963 assert(UseCompactObjectHeaders, "expect compact object headers");
5964 movl(dst, Address(src, oopDesc::mark_offset_in_bytes()));
5965 shrl(dst, markWord::klass_shift);
5966 }
5967 #endif
5968
5969 void MacroAssembler::load_klass(Register dst, Register src, Register tmp) {
5970 assert_different_registers(src, tmp);
5971 assert_different_registers(dst, tmp);
5972 #ifdef _LP64
5973 if (UseCompactObjectHeaders) {
5974 load_narrow_klass_compact(dst, src);
5975 decode_klass_not_null(dst, tmp);
5976 } else if (UseCompressedClassPointers) {
5977 movl(dst, Address(src, oopDesc::klass_offset_in_bytes()));
5978 decode_klass_not_null(dst, tmp);
5979 } else
5980 #endif
5981 {
5982 movptr(dst, Address(src, oopDesc::klass_offset_in_bytes()));
5983 }
5984 }
5985
|