23 lines
981 B
Diff
23 lines
981 B
Diff
diff --git a/hotspot/src/cpu/aarch64/vm/c1_LIRGenerator_aarch64.cpp b/hotspot/src/cpu/aarch64/vm/c1_LIRGenerator_aarch64.cpp
|
|
index 6d0b4acbd..ecd4bd4a6 100644
|
|
--- a/hotspot/src/cpu/aarch64/vm/c1_LIRGenerator_aarch64.cpp
|
|
+++ b/hotspot/src/cpu/aarch64/vm/c1_LIRGenerator_aarch64.cpp
|
|
@@ -607,12 +607,12 @@ void LIRGenerator::do_ArithmeticOp_Int(ArithmeticOp* x) {
|
|
} else {
|
|
assert (x->op() == Bytecodes::_imul, "expect imul");
|
|
if (right.is_constant()) {
|
|
- int c = right.get_jint_constant();
|
|
- if (! is_power_of_2(c) && ! is_power_of_2(c + 1) && ! is_power_of_2(c - 1)) {
|
|
- // Cannot use constant op.
|
|
- right.load_item();
|
|
+ jint c = right.get_jint_constant();
|
|
+ if (c > 0 && c < max_jint && (is_power_of_2(c) || is_power_of_2(c - 1) || is_power_of_2(c + 1))) {
|
|
+ right_arg->dont_load_item();
|
|
} else {
|
|
- right.dont_load_item();
|
|
+ // Cannot use constant op.
|
|
+ right_arg->load_item();
|
|
}
|
|
} else {
|
|
right.load_item();
|