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);
|