8223244: Fix usage of ARRAYCOPY_DISJOINT decorator
Reviewed-by: eosterlund, shade
--- a/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp Wed May 08 08:15:04 2019 +0100
+++ b/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp Wed May 08 11:59:14 2019 +0200
@@ -1788,7 +1788,7 @@
}
#endif //ASSERT
- DecoratorSet decorators = IN_HEAP | IS_ARRAY | ARRAYCOPY_CHECKCAST;
+ DecoratorSet decorators = IN_HEAP | IS_ARRAY | ARRAYCOPY_CHECKCAST | ARRAYCOPY_DISJOINT;
bool is_oop = true;
if (dest_uninitialized) {
decorators |= IS_DEST_UNINITIALIZED;
--- a/src/hotspot/cpu/x86/gc/shared/modRefBarrierSetAssembler_x86.cpp Wed May 08 08:15:04 2019 +0100
+++ b/src/hotspot/cpu/x86/gc/shared/modRefBarrierSetAssembler_x86.cpp Wed May 08 11:59:14 2019 +0200
@@ -36,12 +36,14 @@
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);
+ 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) {
@@ -61,13 +63,15 @@
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) {
+ if (!checkcast) {
+ if (!obj_int) {
+ // Save count for barrier
+ count = r11;
+ } else if (disjoint) {
+ // Use the saved dst in the disjoint case
+ dst = r11;
+ }
+ } else {
tmp = rscratch1;
}
#else
--- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp Wed May 08 08:15:04 2019 +0100
+++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp Wed May 08 11:59:14 2019 +0200
@@ -53,12 +53,14 @@
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);
+ 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) {
@@ -123,13 +125,15 @@
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) {
+ 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
--- a/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp Wed May 08 08:15:04 2019 +0100
+++ b/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp Wed May 08 11:59:14 2019 +0200
@@ -2183,7 +2183,7 @@
// r9 is used to save r15_thread
// 'from', 'to' and 'qword_count' are now valid
- DecoratorSet decorators = IN_HEAP | IS_ARRAY | ARRAYCOPY_DISJOINT;
+ DecoratorSet decorators = IN_HEAP | IS_ARRAY;
if (dest_uninitialized) {
decorators |= IS_DEST_UNINITIALIZED;
}
@@ -2377,7 +2377,7 @@
Address from_element_addr(end_from, count, TIMES_OOP, 0);
Address to_element_addr(end_to, count, TIMES_OOP, 0);
- DecoratorSet decorators = IN_HEAP | IS_ARRAY | ARRAYCOPY_CHECKCAST;
+ DecoratorSet decorators = IN_HEAP | IS_ARRAY | ARRAYCOPY_CHECKCAST | ARRAYCOPY_DISJOINT;
if (dest_uninitialized) {
decorators |= IS_DEST_UNINITIALIZED;
}