991 patching_info = state_for (x, x->state_before()); |
991 patching_info = state_for (x, x->state_before()); |
992 } |
992 } |
993 obj.load_item(); |
993 obj.load_item(); |
994 |
994 |
995 // info for exceptions |
995 // info for exceptions |
996 CodeEmitInfo* info_for_exception = state_for (x); |
996 CodeEmitInfo* info_for_exception = |
|
997 (x->needs_exception_state() ? state_for(x) : |
|
998 state_for(x, x->state_before(), true /*ignore_xhandler*/)); |
997 |
999 |
998 CodeStub* stub; |
1000 CodeStub* stub; |
999 if (x->is_incompatible_class_change_check()) { |
1001 if (x->is_incompatible_class_change_check()) { |
1000 assert(patching_info == NULL, "can't patch this"); |
1002 assert(patching_info == NULL, "can't patch this"); |
1001 stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception); |
1003 stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception); |
|
1004 } else if (x->is_invokespecial_receiver_check()) { |
|
1005 assert(patching_info == NULL, "can't patch this"); |
|
1006 stub = new DeoptimizeStub(info_for_exception, |
|
1007 Deoptimization::Reason_class_check, |
|
1008 Deoptimization::Action_none); |
1002 } else { |
1009 } else { |
1003 stub = new SimpleExceptionStub(Runtime1::throw_class_cast_exception_id, obj.result(), info_for_exception); |
1010 stub = new SimpleExceptionStub(Runtime1::throw_class_cast_exception_id, obj.result(), info_for_exception); |
1004 } |
1011 } |
1005 LIR_Opr reg = rlock_result(x); |
1012 LIR_Opr reg = rlock_result(x); |
1006 LIR_Opr tmp1 = new_register(objectType); |
1013 LIR_Opr tmp1 = new_register(objectType); |