equal
deleted
inserted
replaced
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 } |