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 } |