< prev index next >
src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp
Print this page
rev 54706 : 8223244: Fix usage of ARRAYCOPY_DISJOINT decorator
*** 51,67 ****
bool obj_int = type == T_OBJECT LP64_ONLY(&& UseCompressedOops);
bool dest_uninitialized = (decorators & IS_DEST_UNINITIALIZED) != 0;
if (type == T_OBJECT || type == T_ARRAY) {
#ifdef _LP64
! if (!checkcast && !obj_int) {
// Save count for barrier
__ movptr(r11, count);
! } else if (disjoint && obj_int) {
// Save dst in r11 in the disjoint case
__ movq(r11, dst);
}
#else
if (disjoint) {
__ mov(rdx, dst); // save 'to'
}
#endif
--- 51,69 ----
bool obj_int = type == T_OBJECT LP64_ONLY(&& UseCompressedOops);
bool dest_uninitialized = (decorators & IS_DEST_UNINITIALIZED) != 0;
if (type == T_OBJECT || type == T_ARRAY) {
#ifdef _LP64
! if (!checkcast) {
! if (!obj_int) {
// Save count for barrier
__ movptr(r11, count);
! } else if (disjoint) {
// Save dst in r11 in the disjoint case
__ movq(r11, dst);
}
+ }
#else
if (disjoint) {
__ mov(rdx, dst); // save 'to'
}
#endif
*** 121,137 ****
bool obj_int = type == T_OBJECT LP64_ONLY(&& UseCompressedOops);
Register tmp = rax;
if (type == T_OBJECT || type == T_ARRAY) {
#ifdef _LP64
! if (!checkcast && !obj_int) {
// Save count for barrier
count = r11;
} else if (disjoint && obj_int) {
// Use the saved dst in the disjoint case
dst = r11;
! } else if (checkcast) {
tmp = rscratch1;
}
#else
if (disjoint) {
__ mov(dst, rdx); // restore 'to'
--- 123,141 ----
bool obj_int = type == T_OBJECT LP64_ONLY(&& UseCompressedOops);
Register tmp = rax;
if (type == T_OBJECT || type == T_ARRAY) {
#ifdef _LP64
! if (!checkcast) {
! if (!obj_int) {
// Save count for barrier
count = r11;
} else if (disjoint && obj_int) {
// Use the saved dst in the disjoint case
dst = r11;
! }
! } else {
tmp = rscratch1;
}
#else
if (disjoint) {
__ mov(dst, rdx); // restore 'to'
< prev index next >