471 case lir_cond_aboveEqual: assert(op->code() != lir_cond_float_branch, ""); // fallthru
472 case lir_cond_greaterEqual: positive = false; cond = Assembler::less ; break;
473 default: ShouldNotReachHere();
474 }
475 int bo = positive ? Assembler::bcondCRbiIs1 : Assembler::bcondCRbiIs0;
476 int bi = Assembler::bi0(BOOL_RESULT, cond);
477 if (is_unordered) {
478 if (positive) {
479 if (op->ublock() == op->block()) {
480 __ bc_far_optimized(Assembler::bcondCRbiIs1, __ bi0(BOOL_RESULT, Assembler::summary_overflow), *L);
481 }
482 } else {
483 if (op->ublock() != op->block()) { __ bso(BOOL_RESULT, done); }
484 }
485 }
486 __ bc_far_optimized(bo, bi, *L);
487 __ bind(done);
488 }
489 }
490
491 #if INCLUDE_SHENANDOAHGC
492 void LIR_Assembler::emit_opShenandoahWriteBarrier(LIR_OpShenandoahWriteBarrier* op) {
493 Unimplemented();
494 }
495 #endif
496
497 void LIR_Assembler::emit_opConvert(LIR_OpConvert* op) {
498 Bytecodes::Code code = op->bytecode();
499 LIR_Opr src = op->in_opr(),
500 dst = op->result_opr();
501
502 switch(code) {
503 case Bytecodes::_i2l: {
504 __ extsw(dst->as_register_lo(), src->as_register());
505 break;
506 }
507 case Bytecodes::_l2i: {
508 __ mr_if_needed(dst->as_register(), src->as_register_lo()); // high bits are garbage
509 break;
510 }
511 case Bytecodes::_i2b: {
512 __ extsb(dst->as_register(), src->as_register());
513 break;
514 }
515 case Bytecodes::_i2c: {
|
471 case lir_cond_aboveEqual: assert(op->code() != lir_cond_float_branch, ""); // fallthru
472 case lir_cond_greaterEqual: positive = false; cond = Assembler::less ; break;
473 default: ShouldNotReachHere();
474 }
475 int bo = positive ? Assembler::bcondCRbiIs1 : Assembler::bcondCRbiIs0;
476 int bi = Assembler::bi0(BOOL_RESULT, cond);
477 if (is_unordered) {
478 if (positive) {
479 if (op->ublock() == op->block()) {
480 __ bc_far_optimized(Assembler::bcondCRbiIs1, __ bi0(BOOL_RESULT, Assembler::summary_overflow), *L);
481 }
482 } else {
483 if (op->ublock() != op->block()) { __ bso(BOOL_RESULT, done); }
484 }
485 }
486 __ bc_far_optimized(bo, bi, *L);
487 __ bind(done);
488 }
489 }
490
491
492 void LIR_Assembler::emit_opConvert(LIR_OpConvert* op) {
493 Bytecodes::Code code = op->bytecode();
494 LIR_Opr src = op->in_opr(),
495 dst = op->result_opr();
496
497 switch(code) {
498 case Bytecodes::_i2l: {
499 __ extsw(dst->as_register_lo(), src->as_register());
500 break;
501 }
502 case Bytecodes::_l2i: {
503 __ mr_if_needed(dst->as_register(), src->as_register_lo()); // high bits are garbage
504 break;
505 }
506 case Bytecodes::_i2b: {
507 __ extsb(dst->as_register(), src->as_register());
508 break;
509 }
510 case Bytecodes::_i2c: {
|