1051 __ call_runtime(Runtime1::entry_for(Runtime1::new_multi_array_id),
1052 LIR_OprFact::illegalOpr,
1053 reg, args, info);
1054
1055 // Must prevent reordering of stores for object initialization
1056 // with stores that publish the new object.
1057 __ membar_storestore();
1058 LIR_Opr result = rlock_result(x);
1059 __ move(reg, result);
1060 }
1061
1062
1063 void LIRGenerator::do_BlockBegin(BlockBegin* x) {
1064 // nothing to do for now
1065 }
1066
1067
1068 void LIRGenerator::do_CheckCast(CheckCast* x) {
1069 LIRItem obj(x->obj(), this);
1070 CodeEmitInfo* patching_info = NULL;
1071 if (!x->klass()->is_loaded() || (PatchALot && !x->is_incompatible_class_change_check())) {
1072 // Must do this before locking the destination register as
1073 // an oop register, and before the obj is loaded (so x->obj()->item()
1074 // is valid for creating a debug info location).
1075 patching_info = state_for(x, x->state_before());
1076 }
1077 obj.load_item();
1078 LIR_Opr out_reg = rlock_result(x);
1079 CodeStub* stub;
1080 CodeEmitInfo* info_for_exception =
1081 (x->needs_exception_state() ? state_for(x) :
1082 state_for(x, x->state_before(), true /*ignore_xhandler*/));
1083
1084 if (x->is_incompatible_class_change_check()) {
1085 assert(patching_info == NULL, "can't patch this");
1086 stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id,
1087 LIR_OprFact::illegalOpr, info_for_exception);
1088 } else if (x->is_invokespecial_receiver_check()) {
1089 assert(patching_info == NULL, "can't patch this");
1090 stub = new DeoptimizeStub(info_for_exception,
1091 Deoptimization::Reason_class_check,
|
1051 __ call_runtime(Runtime1::entry_for(Runtime1::new_multi_array_id),
1052 LIR_OprFact::illegalOpr,
1053 reg, args, info);
1054
1055 // Must prevent reordering of stores for object initialization
1056 // with stores that publish the new object.
1057 __ membar_storestore();
1058 LIR_Opr result = rlock_result(x);
1059 __ move(reg, result);
1060 }
1061
1062
1063 void LIRGenerator::do_BlockBegin(BlockBegin* x) {
1064 // nothing to do for now
1065 }
1066
1067
1068 void LIRGenerator::do_CheckCast(CheckCast* x) {
1069 LIRItem obj(x->obj(), this);
1070 CodeEmitInfo* patching_info = NULL;
1071 if (!x->klass()->is_loaded() || (PatchALot && !x->is_incompatible_class_change_check() && !x->is_invokespecial_receiver_check())) {
1072 // Must do this before locking the destination register as
1073 // an oop register, and before the obj is loaded (so x->obj()->item()
1074 // is valid for creating a debug info location).
1075 patching_info = state_for(x, x->state_before());
1076 }
1077 obj.load_item();
1078 LIR_Opr out_reg = rlock_result(x);
1079 CodeStub* stub;
1080 CodeEmitInfo* info_for_exception =
1081 (x->needs_exception_state() ? state_for(x) :
1082 state_for(x, x->state_before(), true /*ignore_xhandler*/));
1083
1084 if (x->is_incompatible_class_change_check()) {
1085 assert(patching_info == NULL, "can't patch this");
1086 stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id,
1087 LIR_OprFact::illegalOpr, info_for_exception);
1088 } else if (x->is_invokespecial_receiver_check()) {
1089 assert(patching_info == NULL, "can't patch this");
1090 stub = new DeoptimizeStub(info_for_exception,
1091 Deoptimization::Reason_class_check,
|