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