--- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp Thu Sep 22 18:23:15 2016 +0200
+++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp Thu Sep 22 18:29:15 2016 +0200
@@ -606,7 +606,10 @@
void LIRGenerator::shift_op(Bytecodes::Code code, LIR_Opr result_op, LIR_Opr value, LIR_Opr count, LIR_Opr tmp) {
- if (TwoOperandLIRForm && value != result_op) {
+
+ if (TwoOperandLIRForm && value != result_op
+ // Only 32bit right shifts require two operand form on S390.
+ S390_ONLY(&& (code == Bytecodes::_ishr || code == Bytecodes::_iushr))) {
assert(count != result_op, "malformed");
__ move(value, result_op);
value = result_op;