1117 patching_info = state_for(x, x->state_before()); |
1117 patching_info = state_for(x, x->state_before()); |
1118 } |
1118 } |
1119 obj.load_item(); |
1119 obj.load_item(); |
1120 LIR_Opr out_reg = rlock_result(x); |
1120 LIR_Opr out_reg = rlock_result(x); |
1121 CodeStub* stub; |
1121 CodeStub* stub; |
1122 CodeEmitInfo* info_for_exception = state_for(x); |
1122 CodeEmitInfo* info_for_exception = |
|
1123 (x->needs_exception_state() ? state_for(x) : |
|
1124 state_for(x, x->state_before(), true /*ignore_xhandler*/)); |
1123 |
1125 |
1124 if (x->is_incompatible_class_change_check()) { |
1126 if (x->is_incompatible_class_change_check()) { |
1125 assert(patching_info == NULL, "can't patch this"); |
1127 assert(patching_info == NULL, "can't patch this"); |
1126 stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, |
1128 stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, |
1127 LIR_OprFact::illegalOpr, info_for_exception); |
1129 LIR_OprFact::illegalOpr, info_for_exception); |
|
1130 } else if (x->is_invokespecial_receiver_check()) { |
|
1131 assert(patching_info == NULL, "can't patch this"); |
|
1132 stub = new DeoptimizeStub(info_for_exception, |
|
1133 Deoptimization::Reason_class_check, |
|
1134 Deoptimization::Action_none); |
1128 } else { |
1135 } else { |
1129 stub = new SimpleExceptionStub(Runtime1::throw_class_cast_exception_id, obj.result(), info_for_exception); |
1136 stub = new SimpleExceptionStub(Runtime1::throw_class_cast_exception_id, obj.result(), info_for_exception); |
1130 } |
1137 } |
1131 // Following registers are used by slow_subtype_check: |
1138 // Following registers are used by slow_subtype_check: |
1132 LIR_Opr tmp1 = FrameMap::R4_oop_opr; // super_klass |
1139 LIR_Opr tmp1 = FrameMap::R4_oop_opr; // super_klass |