-
Bug
-
Resolution: Fixed
-
P3
-
11, 16, 17
-
b15
-
aarch64
-
generic
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8266893 | 13.0.8 | Sergey Nazarkin | P3 | Resolved | Fixed | b02 |
JDK-8264432 | 11.0.12-oracle | Dukebot | P3 | Resolved | Fixed | b01 |
JDK-8264630 | 11.0.12 | Fei Yang | P3 | Resolved | Fixed | b01 |
Noticed this issue when I am trying to backport: https://bugs.openjdk.java.net/browse/JDK-8263425
Around line 180 we have:
__ add(index, LIR_OprFact::intptrConst(large_disp), tmp);
index = tmp;
} else {
__ move(tmp, LIR_OprFact::intptrConst(large_disp)); <========
__ add(tmp, index, tmp);
index = tmp;
}
This is supposed to be calculating "tmp = large_disp" but it actually does "large_disp = tmp".
Looks like this is missed byJDK-8263425.
Proposed patch:
diff --git a/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp b/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp
index 0056e4c7d36..a6c6dbe856f 100644
--- a/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp
+++ b/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp
@@ -177,7 +177,7 @@ LIR_Address* LIRGenerator::generate_address(LIR_Opr base, LIR_Opr index,
__ add(index, LIR_OprFact::intptrConst(large_disp), tmp);
index = tmp;
} else {
- __ move(tmp, LIR_OprFact::intptrConst(large_disp));
+ __ move(LIR_OprFact::intptrConst(large_disp), tmp);
__ add(tmp, index, tmp);
index = tmp;
}
Around line 180 we have:
__ add(index, LIR_OprFact::intptrConst(large_disp), tmp);
index = tmp;
} else {
__ move(tmp, LIR_OprFact::intptrConst(large_disp)); <========
__ add(tmp, index, tmp);
index = tmp;
}
This is supposed to be calculating "tmp = large_disp" but it actually does "large_disp = tmp".
Looks like this is missed by
Proposed patch:
diff --git a/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp b/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp
index 0056e4c7d36..a6c6dbe856f 100644
--- a/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp
+++ b/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp
@@ -177,7 +177,7 @@ LIR_Address* LIRGenerator::generate_address(LIR_Opr base, LIR_Opr index,
__ add(index, LIR_OprFact::intptrConst(large_disp), tmp);
index = tmp;
} else {
- __ move(tmp, LIR_OprFact::intptrConst(large_disp));
+ __ move(LIR_OprFact::intptrConst(large_disp), tmp);
__ add(tmp, index, tmp);
index = tmp;
}
- backported by
-
JDK-8264432 AArch64: one potential bug in C1 LIRGenerator::generate_address()
-
- Resolved
-
-
JDK-8264630 AArch64: one potential bug in C1 LIRGenerator::generate_address()
-
- Resolved
-
-
JDK-8266893 AArch64: one potential bug in C1 LIRGenerator::generate_address()
-
- Resolved
-
- links to
-
Commit openjdk/jdk13u-dev/36717352
-
Commit openjdk/jdk/81ba5784
-
Review openjdk/jdk13u-dev/203
-
Review openjdk/jdk/3040
(2 links to)