< prev index next >

src/hotspot/cpu/sparc/c1_LIRGenerator_sparc.cpp

Print this page




1107   args->append(klass_reg);
1108   args->append(rank);
1109   args->append(varargs);
1110   const LIR_Opr reg = result_register_for(x->type());
1111   __ call_runtime(Runtime1::entry_for(Runtime1::new_multi_array_id),
1112                   LIR_OprFact::illegalOpr,
1113                   reg, args, info);
1114 
1115   LIR_Opr result = rlock_result(x);
1116   __ move(reg, result);
1117 }
1118 
1119 
1120 void LIRGenerator::do_BlockBegin(BlockBegin* x) {
1121 }
1122 
1123 
1124 void LIRGenerator::do_CheckCast(CheckCast* x) {
1125   LIRItem obj(x->obj(), this);
1126   CodeEmitInfo* patching_info = NULL;
1127   if (!x->klass()->is_loaded() || (PatchALot && !x->is_incompatible_class_change_check())) {
1128     // must do this before locking the destination register as an oop register,
1129     // and before the obj is loaded (so x->obj()->item() is valid for creating a debug info location)
1130     patching_info = state_for(x, x->state_before());
1131   }
1132   obj.load_item();
1133   LIR_Opr out_reg = rlock_result(x);
1134   CodeStub* stub;
1135   CodeEmitInfo* info_for_exception =
1136       (x->needs_exception_state() ? state_for(x) :
1137                                     state_for(x, x->state_before(), true /*ignore_xhandler*/));
1138 
1139   if (x->is_incompatible_class_change_check()) {
1140     assert(patching_info == NULL, "can't patch this");
1141     stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception);
1142   } else if (x->is_invokespecial_receiver_check()) {
1143     assert(patching_info == NULL, "can't patch this");
1144     stub = new DeoptimizeStub(info_for_exception,
1145                               Deoptimization::Reason_class_check,
1146                               Deoptimization::Action_none);
1147   } else {




1107   args->append(klass_reg);
1108   args->append(rank);
1109   args->append(varargs);
1110   const LIR_Opr reg = result_register_for(x->type());
1111   __ call_runtime(Runtime1::entry_for(Runtime1::new_multi_array_id),
1112                   LIR_OprFact::illegalOpr,
1113                   reg, args, info);
1114 
1115   LIR_Opr result = rlock_result(x);
1116   __ move(reg, result);
1117 }
1118 
1119 
1120 void LIRGenerator::do_BlockBegin(BlockBegin* x) {
1121 }
1122 
1123 
1124 void LIRGenerator::do_CheckCast(CheckCast* x) {
1125   LIRItem obj(x->obj(), this);
1126   CodeEmitInfo* patching_info = NULL;
1127   if (!x->klass()->is_loaded() || (PatchALot && !x->is_incompatible_class_change_check() && !x->is_invokespecial_receiver_check())) {
1128     // must do this before locking the destination register as an oop register,
1129     // and before the obj is loaded (so x->obj()->item() is valid for creating a debug info location)
1130     patching_info = state_for(x, x->state_before());
1131   }
1132   obj.load_item();
1133   LIR_Opr out_reg = rlock_result(x);
1134   CodeStub* stub;
1135   CodeEmitInfo* info_for_exception =
1136       (x->needs_exception_state() ? state_for(x) :
1137                                     state_for(x, x->state_before(), true /*ignore_xhandler*/));
1138 
1139   if (x->is_incompatible_class_change_check()) {
1140     assert(patching_info == NULL, "can't patch this");
1141     stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception);
1142   } else if (x->is_invokespecial_receiver_check()) {
1143     assert(patching_info == NULL, "can't patch this");
1144     stub = new DeoptimizeStub(info_for_exception,
1145                               Deoptimization::Reason_class_check,
1146                               Deoptimization::Action_none);
1147   } else {


< prev index next >