1427 patching_info = state_for(x, x->state_before()); |
1427 patching_info = state_for(x, x->state_before()); |
1428 } |
1428 } |
1429 obj.load_item(); |
1429 obj.load_item(); |
1430 |
1430 |
1431 // info for exceptions |
1431 // info for exceptions |
1432 CodeEmitInfo* info_for_exception = state_for(x); |
1432 CodeEmitInfo* info_for_exception = |
|
1433 (x->needs_exception_state() ? state_for(x) : |
|
1434 state_for(x, x->state_before(), true /*ignore_xhandler*/)); |
1433 |
1435 |
1434 CodeStub* stub; |
1436 CodeStub* stub; |
1435 if (x->is_incompatible_class_change_check()) { |
1437 if (x->is_incompatible_class_change_check()) { |
1436 assert(patching_info == NULL, "can't patch this"); |
1438 assert(patching_info == NULL, "can't patch this"); |
1437 stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception); |
1439 stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception); |
|
1440 } else if (x->is_invokespecial_receiver_check()) { |
|
1441 assert(patching_info == NULL, "can't patch this"); |
|
1442 stub = new DeoptimizeStub(info_for_exception, Deoptimization::Reason_class_check, Deoptimization::Action_none); |
1438 } else { |
1443 } else { |
1439 stub = new SimpleExceptionStub(Runtime1::throw_class_cast_exception_id, obj.result(), info_for_exception); |
1444 stub = new SimpleExceptionStub(Runtime1::throw_class_cast_exception_id, obj.result(), info_for_exception); |
1440 } |
1445 } |
1441 LIR_Opr reg = rlock_result(x); |
1446 LIR_Opr reg = rlock_result(x); |
1442 LIR_Opr tmp3 = LIR_OprFact::illegalOpr; |
1447 LIR_Opr tmp3 = LIR_OprFact::illegalOpr; |