3274 if (UseCompressedClassPointers) {
3275 ldrw(dst, Address(src, oopDesc::klass_offset_in_bytes()));
3276 decode_klass_not_null(dst);
3277 } else {
3278 ldr(dst, Address(src, oopDesc::klass_offset_in_bytes()));
3279 }
3280 }
3281
3282 // ((OopHandle)result).resolve();
3283 void MacroAssembler::resolve_oop_handle(Register result) {
3284 // OopHandle::resolve is an indirection.
3285 ldr(result, Address(result, 0));
3286 }
3287
3288 void MacroAssembler::load_mirror(Register dst, Register method) {
3289 const int mirror_offset = in_bytes(Klass::java_mirror_offset());
3290 ldr(dst, Address(rmethod, Method::const_offset()));
3291 ldr(dst, Address(dst, ConstMethod::constants_offset()));
3292 ldr(dst, Address(dst, ConstantPool::pool_holder_offset_in_bytes()));
3293 ldr(dst, Address(dst, mirror_offset));
3294 }
3295
3296 void MacroAssembler::cmp_klass(Register oop, Register trial_klass, Register tmp) {
3297 if (UseCompressedClassPointers) {
3298 ldrw(tmp, Address(oop, oopDesc::klass_offset_in_bytes()));
3299 if (Universe::narrow_klass_base() == NULL) {
3300 cmp(trial_klass, tmp, LSL, Universe::narrow_klass_shift());
3301 return;
3302 } else if (((uint64_t)Universe::narrow_klass_base() & 0xffffffff) == 0
3303 && Universe::narrow_klass_shift() == 0) {
3304 // Only the bottom 32 bits matter
3305 cmpw(trial_klass, tmp);
3306 return;
3307 }
3308 decode_klass_not_null(tmp);
3309 } else {
3310 ldr(tmp, Address(oop, oopDesc::klass_offset_in_bytes()));
3311 }
3312 cmp(trial_klass, tmp);
3313 }
|
3274 if (UseCompressedClassPointers) {
3275 ldrw(dst, Address(src, oopDesc::klass_offset_in_bytes()));
3276 decode_klass_not_null(dst);
3277 } else {
3278 ldr(dst, Address(src, oopDesc::klass_offset_in_bytes()));
3279 }
3280 }
3281
3282 // ((OopHandle)result).resolve();
3283 void MacroAssembler::resolve_oop_handle(Register result) {
3284 // OopHandle::resolve is an indirection.
3285 ldr(result, Address(result, 0));
3286 }
3287
3288 void MacroAssembler::load_mirror(Register dst, Register method) {
3289 const int mirror_offset = in_bytes(Klass::java_mirror_offset());
3290 ldr(dst, Address(rmethod, Method::const_offset()));
3291 ldr(dst, Address(dst, ConstMethod::constants_offset()));
3292 ldr(dst, Address(dst, ConstantPool::pool_holder_offset_in_bytes()));
3293 ldr(dst, Address(dst, mirror_offset));
3294 resolve_oop_handle(dst);
3295 }
3296
3297 void MacroAssembler::cmp_klass(Register oop, Register trial_klass, Register tmp) {
3298 if (UseCompressedClassPointers) {
3299 ldrw(tmp, Address(oop, oopDesc::klass_offset_in_bytes()));
3300 if (Universe::narrow_klass_base() == NULL) {
3301 cmp(trial_klass, tmp, LSL, Universe::narrow_klass_shift());
3302 return;
3303 } else if (((uint64_t)Universe::narrow_klass_base() & 0xffffffff) == 0
3304 && Universe::narrow_klass_shift() == 0) {
3305 // Only the bottom 32 bits matter
3306 cmpw(trial_klass, tmp);
3307 return;
3308 }
3309 decode_klass_not_null(tmp);
3310 } else {
3311 ldr(tmp, Address(oop, oopDesc::klass_offset_in_bytes()));
3312 }
3313 cmp(trial_klass, tmp);
3314 }
|