5413 // get mirror
5414 const int mirror_offset = in_bytes(Klass::java_mirror_offset());
5415 load_method_holder(mirror, method);
5416 movptr(mirror, Address(mirror, mirror_offset));
5417 resolve_oop_handle(mirror, tmp);
5418 }
5419
5420 void MacroAssembler::load_method_holder_cld(Register rresult, Register rmethod) {
5421 load_method_holder(rresult, rmethod);
5422 movptr(rresult, Address(rresult, InstanceKlass::class_loader_data_offset()));
5423 }
5424
5425 void MacroAssembler::load_method_holder(Register holder, Register method) {
5426 movptr(holder, Address(method, Method::const_offset())); // ConstMethod*
5427 movptr(holder, Address(holder, ConstMethod::constants_offset())); // ConstantPool*
5428 movptr(holder, Address(holder, ConstantPool::pool_holder_offset())); // InstanceKlass*
5429 }
5430
5431 void MacroAssembler::load_narrow_klass_compact(Register dst, Register src) {
5432 assert(UseCompactObjectHeaders, "expect compact object headers");
5433 movq(dst, Address(src, oopDesc::mark_offset_in_bytes()));
5434 shrq(dst, markWord::klass_shift);
5435 }
5436
5437 void MacroAssembler::load_klass(Register dst, Register src, Register tmp) {
5438 assert_different_registers(src, tmp);
5439 assert_different_registers(dst, tmp);
5440
5441 if (UseCompactObjectHeaders) {
5442 load_narrow_klass_compact(dst, src);
5443 decode_klass_not_null(dst, tmp);
5444 } else {
5445 movl(dst, Address(src, oopDesc::klass_offset_in_bytes()));
5446 decode_klass_not_null(dst, tmp);
5447 }
5448 }
5449
5450 void MacroAssembler::store_klass(Register dst, Register src, Register tmp) {
5451 assert(!UseCompactObjectHeaders, "not with compact headers");
5452 assert_different_registers(src, tmp);
5453 assert_different_registers(dst, tmp);
5454 encode_klass_not_null(src, tmp);
|
5413 // get mirror
5414 const int mirror_offset = in_bytes(Klass::java_mirror_offset());
5415 load_method_holder(mirror, method);
5416 movptr(mirror, Address(mirror, mirror_offset));
5417 resolve_oop_handle(mirror, tmp);
5418 }
5419
5420 void MacroAssembler::load_method_holder_cld(Register rresult, Register rmethod) {
5421 load_method_holder(rresult, rmethod);
5422 movptr(rresult, Address(rresult, InstanceKlass::class_loader_data_offset()));
5423 }
5424
5425 void MacroAssembler::load_method_holder(Register holder, Register method) {
5426 movptr(holder, Address(method, Method::const_offset())); // ConstMethod*
5427 movptr(holder, Address(holder, ConstMethod::constants_offset())); // ConstantPool*
5428 movptr(holder, Address(holder, ConstantPool::pool_holder_offset())); // InstanceKlass*
5429 }
5430
5431 void MacroAssembler::load_narrow_klass_compact(Register dst, Register src) {
5432 assert(UseCompactObjectHeaders, "expect compact object headers");
5433 movl(dst, Address(src, oopDesc::mark_offset_in_bytes()));
5434 shrl(dst, markWord::klass_shift);
5435 }
5436
5437 void MacroAssembler::load_klass(Register dst, Register src, Register tmp) {
5438 assert_different_registers(src, tmp);
5439 assert_different_registers(dst, tmp);
5440
5441 if (UseCompactObjectHeaders) {
5442 load_narrow_klass_compact(dst, src);
5443 decode_klass_not_null(dst, tmp);
5444 } else {
5445 movl(dst, Address(src, oopDesc::klass_offset_in_bytes()));
5446 decode_klass_not_null(dst, tmp);
5447 }
5448 }
5449
5450 void MacroAssembler::store_klass(Register dst, Register src, Register tmp) {
5451 assert(!UseCompactObjectHeaders, "not with compact headers");
5452 assert_different_registers(src, tmp);
5453 assert_different_registers(dst, tmp);
5454 encode_klass_not_null(src, tmp);
|