< prev index next >

src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp

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


1104         acond = Assembler::EQ;  // unreachable
1105       }
1106     } else {
1107       switch (op->cond()) {
1108         case lir_cond_equal:        acond = Assembler::EQ; break;
1109         case lir_cond_notEqual:     acond = Assembler::NE; break;
1110         case lir_cond_less:         acond = Assembler::LT; break;
1111         case lir_cond_lessEqual:    acond = Assembler::LE; break;
1112         case lir_cond_greaterEqual: acond = Assembler::GE; break;
1113         case lir_cond_greater:      acond = Assembler::GT; break;
1114         case lir_cond_belowEqual:   acond = Assembler::LS; break;
1115         case lir_cond_aboveEqual:   acond = Assembler::HS; break;
1116         default:                    ShouldNotReachHere();
1117           acond = Assembler::EQ;  // unreachable
1118       }
1119     }
1120     __ br(acond,*(op->label()));
1121   }
1122 }
1123 
1124 #if INCLUDE_SHENANDOAHGC
1125 void LIR_Assembler::emit_opShenandoahWriteBarrier(LIR_OpShenandoahWriteBarrier* op) {
1126 
1127   Register obj = op->in_opr()->as_register();
1128   Register res = op->result_opr()->as_register();
1129 
1130   Label done;
1131 
1132   __ block_comment("Shenandoah write barrier {");
1133 
1134   if (res != obj) {
1135     __ mov(res, obj);
1136   }
1137   // Check for null.
1138   if (op->need_null_check()) {
1139     __ cbz(res, done);
1140   }
1141 
1142   __ shenandoah_write_barrier(res);
1143 
1144   __ bind(done);
1145 
1146   __ block_comment("} Shenandoah write barrier");
1147 
1148 }
1149 #endif
1150 
1151 void LIR_Assembler::emit_opConvert(LIR_OpConvert* op) {
1152   LIR_Opr src  = op->in_opr();
1153   LIR_Opr dest = op->result_opr();
1154 
1155   switch (op->bytecode()) {
1156     case Bytecodes::_i2f:
1157       {
1158         __ scvtfws(dest->as_float_reg(), src->as_register());
1159         break;
1160       }
1161     case Bytecodes::_i2d:
1162       {
1163         __ scvtfwd(dest->as_double_reg(), src->as_register());
1164         break;
1165       }
1166     case Bytecodes::_l2d:
1167       {
1168         __ scvtfd(dest->as_double_reg(), src->as_register_lo());
1169         break;




1104         acond = Assembler::EQ;  // unreachable
1105       }
1106     } else {
1107       switch (op->cond()) {
1108         case lir_cond_equal:        acond = Assembler::EQ; break;
1109         case lir_cond_notEqual:     acond = Assembler::NE; break;
1110         case lir_cond_less:         acond = Assembler::LT; break;
1111         case lir_cond_lessEqual:    acond = Assembler::LE; break;
1112         case lir_cond_greaterEqual: acond = Assembler::GE; break;
1113         case lir_cond_greater:      acond = Assembler::GT; break;
1114         case lir_cond_belowEqual:   acond = Assembler::LS; break;
1115         case lir_cond_aboveEqual:   acond = Assembler::HS; break;
1116         default:                    ShouldNotReachHere();
1117           acond = Assembler::EQ;  // unreachable
1118       }
1119     }
1120     __ br(acond,*(op->label()));
1121   }
1122 }
1123 


























1124 
1125 void LIR_Assembler::emit_opConvert(LIR_OpConvert* op) {
1126   LIR_Opr src  = op->in_opr();
1127   LIR_Opr dest = op->result_opr();
1128 
1129   switch (op->bytecode()) {
1130     case Bytecodes::_i2f:
1131       {
1132         __ scvtfws(dest->as_float_reg(), src->as_register());
1133         break;
1134       }
1135     case Bytecodes::_i2d:
1136       {
1137         __ scvtfwd(dest->as_double_reg(), src->as_register());
1138         break;
1139       }
1140     case Bytecodes::_l2d:
1141       {
1142         __ scvtfd(dest->as_double_reg(), src->as_register_lo());
1143         break;


< prev index next >