< prev index next >

src/cpu/ppc/vm/macroAssembler_ppc.cpp

Print this page




3355   if (Universe::narrow_klass_shift() != 0 ||
3356       Universe::narrow_klass_base() == 0 && src != dst) {  // Move required.
3357     shifted_src = dst;
3358     sldi(shifted_src, src, Universe::narrow_klass_shift());
3359   }
3360   if (Universe::narrow_klass_base() != 0) {
3361     add_const_optimized(dst, shifted_src, Universe::narrow_klass_base(), R0);
3362   }
3363 }
3364 
3365 void MacroAssembler::load_klass(Register dst, Register src) {
3366   if (UseCompressedClassPointers) {
3367     lwz(dst, oopDesc::klass_offset_in_bytes(), src);
3368     // Attention: no null check here!
3369     decode_klass_not_null(dst, dst);
3370   } else {
3371     ld(dst, oopDesc::klass_offset_in_bytes(), src);
3372   }
3373 }
3374 






3375 void MacroAssembler::load_mirror_from_const_method(Register mirror, Register const_method) {
3376   ld(mirror, in_bytes(ConstMethod::constants_offset()), const_method);
3377   ld(mirror, ConstantPool::pool_holder_offset_in_bytes(), mirror);
3378   ld(mirror, in_bytes(Klass::java_mirror_offset()), mirror);
3379 }
3380 
3381 // Clear Array
3382 // For very short arrays. tmp == R0 is allowed.
3383 void MacroAssembler::clear_memory_unrolled(Register base_ptr, int cnt_dwords, Register tmp, int offset) {
3384   if (cnt_dwords > 0) { li(tmp, 0); }
3385   for (int i = 0; i < cnt_dwords; ++i) { std(tmp, offset + i * 8, base_ptr); }
3386 }
3387 
3388 // Version for constant short array length. Kills base_ptr. tmp == R0 is allowed.
3389 void MacroAssembler::clear_memory_constlen(Register base_ptr, int cnt_dwords, Register tmp) {
3390   if (cnt_dwords < 8) {
3391     clear_memory_unrolled(base_ptr, cnt_dwords, tmp);
3392     return;
3393   }
3394 




3355   if (Universe::narrow_klass_shift() != 0 ||
3356       Universe::narrow_klass_base() == 0 && src != dst) {  // Move required.
3357     shifted_src = dst;
3358     sldi(shifted_src, src, Universe::narrow_klass_shift());
3359   }
3360   if (Universe::narrow_klass_base() != 0) {
3361     add_const_optimized(dst, shifted_src, Universe::narrow_klass_base(), R0);
3362   }
3363 }
3364 
3365 void MacroAssembler::load_klass(Register dst, Register src) {
3366   if (UseCompressedClassPointers) {
3367     lwz(dst, oopDesc::klass_offset_in_bytes(), src);
3368     // Attention: no null check here!
3369     decode_klass_not_null(dst, dst);
3370   } else {
3371     ld(dst, oopDesc::klass_offset_in_bytes(), src);
3372   }
3373 }
3374 
3375 // ((OopHandle)result).resolve();
3376 void MacroAssembler::resolve_oop_handle(Register result) {
3377   // OopHandle::resolve is an indirection.
3378   ld(result, 0, result);
3379 }
3380 
3381 void MacroAssembler::load_mirror_from_const_method(Register mirror, Register const_method) {
3382   ld(mirror, in_bytes(ConstMethod::constants_offset()), const_method);
3383   ld(mirror, ConstantPool::pool_holder_offset_in_bytes(), mirror);
3384   ld(mirror, in_bytes(Klass::java_mirror_offset()), mirror);
3385 }
3386 
3387 // Clear Array
3388 // For very short arrays. tmp == R0 is allowed.
3389 void MacroAssembler::clear_memory_unrolled(Register base_ptr, int cnt_dwords, Register tmp, int offset) {
3390   if (cnt_dwords > 0) { li(tmp, 0); }
3391   for (int i = 0; i < cnt_dwords; ++i) { std(tmp, offset + i * 8, base_ptr); }
3392 }
3393 
3394 // Version for constant short array length. Kills base_ptr. tmp == R0 is allowed.
3395 void MacroAssembler::clear_memory_constlen(Register base_ptr, int cnt_dwords, Register tmp) {
3396   if (cnt_dwords < 8) {
3397     clear_memory_unrolled(base_ptr, cnt_dwords, tmp);
3398     return;
3399   }
3400 


< prev index next >