src/cpu/x86/vm/c1_LIRGenerator_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File c1-coops Cdiff src/cpu/x86/vm/c1_LIRGenerator_x86.cpp

src/cpu/x86/vm/c1_LIRGenerator_x86.cpp

Print this page

        

*** 1137,1149 **** stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception); } else { stub = new SimpleExceptionStub(Runtime1::throw_class_cast_exception_id, obj.result(), info_for_exception); } LIR_Opr reg = rlock_result(x); __ checkcast(reg, obj.result(), x->klass(), ! new_register(objectType), new_register(objectType), ! !x->klass()->is_loaded() ? new_register(objectType) : LIR_OprFact::illegalOpr, x->direct_compare(), info_for_exception, patching_info, stub, x->profiled_method(), x->profiled_bci()); } --- 1137,1152 ---- stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception); } else { stub = new SimpleExceptionStub(Runtime1::throw_class_cast_exception_id, obj.result(), info_for_exception); } LIR_Opr reg = rlock_result(x); + LIR_Opr tmp3 = LIR_OprFact::illegalOpr; + if (!x->klass()->is_loaded() || LP64_ONLY(UseCompressedOops) NOT_LP64(false)) { + tmp3 = new_register(objectType); + } __ checkcast(reg, obj.result(), x->klass(), ! new_register(objectType), new_register(objectType), tmp3, x->direct_compare(), info_for_exception, patching_info, stub, x->profiled_method(), x->profiled_bci()); }
*** 1156,1168 **** if ((!x->klass()->is_loaded() || PatchALot)) { // must do this before locking the destination register as an oop register patching_info = state_for(x, x->state_before()); } obj.load_item(); __ instanceof(reg, obj.result(), x->klass(), ! new_register(objectType), new_register(objectType), ! !x->klass()->is_loaded() ? new_register(objectType) : LIR_OprFact::illegalOpr, x->direct_compare(), patching_info, x->profiled_method(), x->profiled_bci()); } void LIRGenerator::do_If(If* x) { --- 1159,1174 ---- if ((!x->klass()->is_loaded() || PatchALot)) { // must do this before locking the destination register as an oop register patching_info = state_for(x, x->state_before()); } obj.load_item(); + LIR_Opr tmp3 = LIR_OprFact::illegalOpr; + if (!x->klass()->is_loaded() || LP64_ONLY(UseCompressedOops) NOT_LP64(false)) { + tmp3 = new_register(objectType); + } __ instanceof(reg, obj.result(), x->klass(), ! new_register(objectType), new_register(objectType), tmp3, x->direct_compare(), patching_info, x->profiled_method(), x->profiled_bci()); } void LIRGenerator::do_If(If* x) {
src/cpu/x86/vm/c1_LIRGenerator_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File