< prev index next >

src/cpu/aarch64/vm/macroAssembler_aarch64.cpp

Print this page




3262     cbz(rscratch2, L_already_dirty);
3263     strb(zr, Address(obj, rscratch1));
3264     bind(L_already_dirty);
3265   } else {
3266     if (UseConcMarkSweepGC && CMSPrecleaningEnabled) {
3267       membar(StoreStore);
3268     }
3269     strb(zr, Address(obj, rscratch1));
3270   }
3271 }
3272 
3273 void MacroAssembler::load_klass(Register dst, Register src) {
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 void MacroAssembler::load_mirror(Register dst, Register method) {
3283   const int mirror_offset = in_bytes(Klass::java_mirror_offset());
3284   ldr(dst, Address(rmethod, Method::const_offset()));
3285   ldr(dst, Address(dst, ConstMethod::constants_offset()));
3286   ldr(dst, Address(dst, ConstantPool::pool_holder_offset_in_bytes()));
3287   ldr(dst, Address(dst, mirror_offset));
3288 }
3289 
3290 void MacroAssembler::cmp_klass(Register oop, Register trial_klass, Register tmp) {
3291   if (UseCompressedClassPointers) {
3292     ldrw(tmp, Address(oop, oopDesc::klass_offset_in_bytes()));
3293     if (Universe::narrow_klass_base() == NULL) {
3294       cmp(trial_klass, tmp, LSL, Universe::narrow_klass_shift());
3295       return;
3296     } else if (((uint64_t)Universe::narrow_klass_base() & 0xffffffff) == 0
3297                && Universe::narrow_klass_shift() == 0) {
3298       // Only the bottom 32 bits matter
3299       cmpw(trial_klass, tmp);
3300       return;
3301     }




3262     cbz(rscratch2, L_already_dirty);
3263     strb(zr, Address(obj, rscratch1));
3264     bind(L_already_dirty);
3265   } else {
3266     if (UseConcMarkSweepGC && CMSPrecleaningEnabled) {
3267       membar(StoreStore);
3268     }
3269     strb(zr, Address(obj, rscratch1));
3270   }
3271 }
3272 
3273 void MacroAssembler::load_klass(Register dst, Register src) {
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     }


< prev index next >