< prev index next >

src/hotspot/cpu/x86/c1_CodeStubs_x86.cpp

Print this page
rev 50030 : 8201593: Print array length in ArrayIndexOutOfBoundsException.
Reviewed-by: dholmes, mdoerr, smonteith, shade

*** 86,104 **** ce->add_call_info_here(_info); ce->verify_oop_map(_info); __ jmp(_continuation); } ! RangeCheckStub::RangeCheckStub(CodeEmitInfo* info, LIR_Opr index, ! bool throw_index_out_of_bounds_exception) ! : _throw_index_out_of_bounds_exception(throw_index_out_of_bounds_exception) ! , _index(index) ! { assert(info != NULL, "must have info"); _info = new CodeEmitInfo(info); } void RangeCheckStub::emit_code(LIR_Assembler* ce) { __ bind(_entry); if (_info->deoptimize_on_exception()) { address a = Runtime1::entry_for(Runtime1::predicate_failed_trap_id); --- 86,106 ---- ce->add_call_info_here(_info); ce->verify_oop_map(_info); __ jmp(_continuation); } ! RangeCheckStub::RangeCheckStub(CodeEmitInfo* info, LIR_Opr index, LIR_Opr array) ! : _throw_index_out_of_bounds_exception(false), _index(index), _array(array) { assert(info != NULL, "must have info"); _info = new CodeEmitInfo(info); } + RangeCheckStub::RangeCheckStub(CodeEmitInfo* info, LIR_Opr index) + : _throw_index_out_of_bounds_exception(true), _index(index), _array(NULL) { + assert(info != NULL, "must have info"); + _info = new CodeEmitInfo(info); + } void RangeCheckStub::emit_code(LIR_Assembler* ce) { __ bind(_entry); if (_info->deoptimize_on_exception()) { address a = Runtime1::entry_for(Runtime1::predicate_failed_trap_id);
*** 118,127 **** --- 120,130 ---- Runtime1::StubID stub_id; if (_throw_index_out_of_bounds_exception) { stub_id = Runtime1::throw_index_exception_id; } else { stub_id = Runtime1::throw_range_check_failed_id; + ce->store_parameter(_array->as_pointer_register(), 1); } __ call(RuntimeAddress(Runtime1::entry_for(stub_id))); ce->add_call_info_here(_info); ce->verify_oop_map(_info); debug_only(__ should_not_reach_here());
< prev index next >