1021 patching_info = state_for(x, x->state_before()); |
1021 patching_info = state_for(x, x->state_before()); |
1022 } |
1022 } |
1023 obj.load_item(); |
1023 obj.load_item(); |
1024 LIR_Opr out_reg = rlock_result(x); |
1024 LIR_Opr out_reg = rlock_result(x); |
1025 CodeStub* stub; |
1025 CodeStub* stub; |
1026 CodeEmitInfo* info_for_exception = state_for(x); |
1026 CodeEmitInfo* info_for_exception = |
|
1027 (x->needs_exception_state() ? state_for(x) : |
|
1028 state_for(x, x->state_before(), true /*ignore_xhandler*/)); |
1027 |
1029 |
1028 if (x->is_incompatible_class_change_check()) { |
1030 if (x->is_incompatible_class_change_check()) { |
1029 assert(patching_info == NULL, "can't patch this"); |
1031 assert(patching_info == NULL, "can't patch this"); |
1030 stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception); |
1032 stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception); |
|
1033 } else if (x->is_invokespecial_receiver_check()) { |
|
1034 assert(patching_info == NULL, "can't patch this"); |
|
1035 stub = new DeoptimizeStub(info_for_exception); |
1031 } else { |
1036 } else { |
1032 stub = new SimpleExceptionStub(Runtime1::throw_class_cast_exception_id, obj.result(), info_for_exception); |
1037 stub = new SimpleExceptionStub(Runtime1::throw_class_cast_exception_id, obj.result(), info_for_exception); |
1033 } |
1038 } |
1034 LIR_Opr tmp1 = FrameMap::G1_oop_opr; |
1039 LIR_Opr tmp1 = FrameMap::G1_oop_opr; |
1035 LIR_Opr tmp2 = FrameMap::G3_oop_opr; |
1040 LIR_Opr tmp2 = FrameMap::G3_oop_opr; |