< prev index next >

src/hotspot/cpu/ppc/c1_LIRGenerator_ppc.cpp

Print this page




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,


< prev index next >