diff -r 473286891dd8 -r dca9294d9f59 hotspot/src/share/vm/c1/c1_LIRGenerator.cpp --- 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;