< prev index next >

src/hotspot/cpu/arm/templateTable_arm.cpp

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


 776   __ ldr(R0_tos, local);
 777 }
 778 
 779 void TemplateTable::index_check(Register array, Register index) {
 780   // Pop ptr into array
 781   __ pop_ptr(array);
 782   index_check_without_pop(array, index);
 783 }
 784 
 785 void TemplateTable::index_check_without_pop(Register array, Register index) {
 786   assert_different_registers(array, index, Rtemp);
 787   // check array
 788   __ null_check(array, Rtemp, arrayOopDesc::length_offset_in_bytes());
 789   // check index
 790   __ ldr_s32(Rtemp, Address(array, arrayOopDesc::length_offset_in_bytes()));
 791   __ cmp_32(index, Rtemp);
 792   if (index != R4_ArrayIndexOutOfBounds_index) {
 793     // convention with generate_ArrayIndexOutOfBounds_handler()
 794     __ mov(R4_ArrayIndexOutOfBounds_index, index, hs);
 795   }

 796   __ b(Interpreter::_throw_ArrayIndexOutOfBoundsException_entry, hs);
 797 }
 798 
 799 
 800 void TemplateTable::iaload() {
 801   transition(itos, itos);
 802   const Register Rarray = R1_tmp;
 803   const Register Rindex = R0_tos;
 804 
 805   index_check(Rarray, Rindex);
 806   __ ldr_s32(R0_tos, get_array_elem_addr(T_INT, Rarray, Rindex, Rtemp));
 807 }
 808 
 809 
 810 void TemplateTable::laload() {
 811   transition(itos, ltos);
 812   const Register Rarray = R1_tmp;
 813   const Register Rindex = R0_tos;
 814 
 815   index_check(Rarray, Rindex);




 776   __ ldr(R0_tos, local);
 777 }
 778 
 779 void TemplateTable::index_check(Register array, Register index) {
 780   // Pop ptr into array
 781   __ pop_ptr(array);
 782   index_check_without_pop(array, index);
 783 }
 784 
 785 void TemplateTable::index_check_without_pop(Register array, Register index) {
 786   assert_different_registers(array, index, Rtemp);
 787   // check array
 788   __ null_check(array, Rtemp, arrayOopDesc::length_offset_in_bytes());
 789   // check index
 790   __ ldr_s32(Rtemp, Address(array, arrayOopDesc::length_offset_in_bytes()));
 791   __ cmp_32(index, Rtemp);
 792   if (index != R4_ArrayIndexOutOfBounds_index) {
 793     // convention with generate_ArrayIndexOutOfBounds_handler()
 794     __ mov(R4_ArrayIndexOutOfBounds_index, index, hs);
 795   }
 796   __ mov(R1, array, hs);
 797   __ b(Interpreter::_throw_ArrayIndexOutOfBoundsException_entry, hs);
 798 }
 799 
 800 
 801 void TemplateTable::iaload() {
 802   transition(itos, itos);
 803   const Register Rarray = R1_tmp;
 804   const Register Rindex = R0_tos;
 805 
 806   index_check(Rarray, Rindex);
 807   __ ldr_s32(R0_tos, get_array_elem_addr(T_INT, Rarray, Rindex, Rtemp));
 808 }
 809 
 810 
 811 void TemplateTable::laload() {
 812   transition(itos, ltos);
 813   const Register Rarray = R1_tmp;
 814   const Register Rindex = R0_tos;
 815 
 816   index_check(Rarray, Rindex);


< prev index next >