< prev index next >

src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp

Print this page




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 }


< prev index next >