< prev index next >

src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp

Print this page
rev 51327 : Make C1 write-barrier use a stub instead of dedicated instruction


 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: {


< prev index next >