hotspot/src/share/vm/c1/c1_LIR.cpp
changeset 42063 dca9294d9f59
parent 41323 ddd5600d4762
child 42877 6cbcb55d5232
equal deleted inserted replaced
42062:473286891dd8 42063:dca9294d9f59
   207       assert(!result_opr()->is_register() || !result_opr()->is_oop_register(),
   207       assert(!result_opr()->is_register() || !result_opr()->is_oop_register(),
   208              "can't produce oops from arith");
   208              "can't produce oops from arith");
   209   }
   209   }
   210 
   210 
   211   if (TwoOperandLIRForm) {
   211   if (TwoOperandLIRForm) {
       
   212 
       
   213 #ifdef ASSERT
       
   214     bool threeOperandForm = false;
       
   215 #ifdef S390
       
   216     // There are 3 operand shifts on S390 (see LIR_Assembler::shift_op()).
       
   217     threeOperandForm =
       
   218       code() == lir_shl ||
       
   219       ((code() == lir_shr || code() == lir_ushr) && (result_opr()->is_double_cpu() || in_opr1()->type() == T_OBJECT));
       
   220 #endif
       
   221 #endif
       
   222 
   212     switch (code()) {
   223     switch (code()) {
   213     case lir_add:
   224     case lir_add:
   214     case lir_sub:
   225     case lir_sub:
   215     case lir_mul:
   226     case lir_mul:
   216     case lir_mul_strictfp:
   227     case lir_mul_strictfp:
   220     case lir_logic_and:
   231     case lir_logic_and:
   221     case lir_logic_or:
   232     case lir_logic_or:
   222     case lir_logic_xor:
   233     case lir_logic_xor:
   223     case lir_shl:
   234     case lir_shl:
   224     case lir_shr:
   235     case lir_shr:
   225       assert(in_opr1() == result_opr(), "opr1 and result must match");
   236       assert(in_opr1() == result_opr() || threeOperandForm, "opr1 and result must match");
   226       assert(in_opr1()->is_valid() && in_opr2()->is_valid(), "must be valid");
   237       assert(in_opr1()->is_valid() && in_opr2()->is_valid(), "must be valid");
   227       break;
   238       break;
   228 
   239 
   229     // special handling for lir_ushr because of write barriers
   240     // special handling for lir_ushr because of write barriers
   230     case lir_ushr:
   241     case lir_ushr:
   231       assert(in_opr1() == result_opr() || in_opr2()->is_constant(), "opr1 and result must match or shift count is constant");
   242       assert(in_opr1() == result_opr() || in_opr2()->is_constant() || threeOperandForm, "opr1 and result must match or shift count is constant");
   232       assert(in_opr1()->is_valid() && in_opr2()->is_valid(), "must be valid");
   243       assert(in_opr1()->is_valid() && in_opr2()->is_valid(), "must be valid");
   233       break;
   244       break;
   234 
   245 
   235     }
   246     }
   236   }
   247   }