1219 patching_info = state_for(x, x->state_before()); |
1219 patching_info = state_for(x, x->state_before()); |
1220 } |
1220 } |
1221 obj.load_item(); |
1221 obj.load_item(); |
1222 |
1222 |
1223 // info for exceptions |
1223 // info for exceptions |
1224 CodeEmitInfo* info_for_exception = state_for(x); |
1224 CodeEmitInfo* info_for_exception = |
|
1225 (x->needs_exception_state() ? state_for(x) : |
|
1226 state_for(x, x->state_before(), true /*ignore_xhandler*/)); |
1225 |
1227 |
1226 CodeStub* stub; |
1228 CodeStub* stub; |
1227 if (x->is_incompatible_class_change_check()) { |
1229 if (x->is_incompatible_class_change_check()) { |
1228 assert(patching_info == NULL, "can't patch this"); |
1230 assert(patching_info == NULL, "can't patch this"); |
1229 stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception); |
1231 stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception); |
|
1232 } else if (x->is_invokespecial_receiver_check()) { |
|
1233 assert(patching_info == NULL, "can't patch this"); |
|
1234 stub = new DeoptimizeStub(info_for_exception, |
|
1235 Deoptimization::Reason_class_check, |
|
1236 Deoptimization::Action_none); |
1230 } else { |
1237 } else { |
1231 stub = new SimpleExceptionStub(Runtime1::throw_class_cast_exception_id, obj.result(), info_for_exception); |
1238 stub = new SimpleExceptionStub(Runtime1::throw_class_cast_exception_id, obj.result(), info_for_exception); |
1232 } |
1239 } |
1233 LIR_Opr reg = rlock_result(x); |
1240 LIR_Opr reg = rlock_result(x); |
1234 LIR_Opr tmp3 = LIR_OprFact::illegalOpr; |
1241 LIR_Opr tmp3 = LIR_OprFact::illegalOpr; |