< prev index next >
src/share/vm/c1/c1_LIR.cpp
Print this page
rev 12121 : [mq]: all_changes.patch
*** 207,216 ****
--- 207,227 ----
assert(!result_opr()->is_register() || !result_opr()->is_oop_register(),
"can't produce oops from arith");
}
if (TwoOperandLIRForm) {
+
+ #ifdef ASSERT
+ bool threeOperandForm = false;
+ #ifdef S390
+ // There are 3 operand shifts on S390 (see LIR_Assembler::shift_op()).
+ threeOperandForm =
+ code() == lir_shl ||
+ ((code() == lir_shr || code() == lir_ushr) && (result_opr()->is_double_cpu() || in_opr1()->type() == T_OBJECT));
+ #endif
+ #endif
+
switch (code()) {
case lir_add:
case lir_sub:
case lir_mul:
case lir_mul_strictfp:
*** 220,236 ****
case lir_logic_and:
case lir_logic_or:
case lir_logic_xor:
case lir_shl:
case lir_shr:
! assert(in_opr1() == result_opr(), "opr1 and result must match");
assert(in_opr1()->is_valid() && in_opr2()->is_valid(), "must be valid");
break;
// special handling for lir_ushr because of write barriers
case lir_ushr:
! assert(in_opr1() == result_opr() || in_opr2()->is_constant(), "opr1 and result must match or shift count is constant");
assert(in_opr1()->is_valid() && in_opr2()->is_valid(), "must be valid");
break;
}
}
--- 231,247 ----
case lir_logic_and:
case lir_logic_or:
case lir_logic_xor:
case lir_shl:
case lir_shr:
! assert(in_opr1() == result_opr() || threeOperandForm, "opr1 and result must match");
assert(in_opr1()->is_valid() && in_opr2()->is_valid(), "must be valid");
break;
// special handling for lir_ushr because of write barriers
case lir_ushr:
! assert(in_opr1() == result_opr() || in_opr2()->is_constant() || threeOperandForm, "opr1 and result must match or shift count is constant");
assert(in_opr1()->is_valid() && in_opr2()->is_valid(), "must be valid");
break;
}
}
< prev index next >