< prev index next >

src/hotspot/cpu/x86/templateTable_x86.cpp

Print this page

        

*** 820,837 **** noreg, noreg); } void TemplateTable::aaload() { transition(itos, atos); ! ! Register array = rcx; Register index = rax; index_check(array, index); // kills rbx ! ! __ profile_array(rbx, array, rdx); ! if (ValueArrayFlatten) { Label is_flat_array, done; __ test_flattened_array_oop(array, rbx, is_flat_array); do_oop_load(_masm, Address(array, index, --- 820,834 ---- noreg, noreg); } void TemplateTable::aaload() { transition(itos, atos); ! Register array = rdx; Register index = rax; index_check(array, index); // kills rbx ! __ profile_array(rbx, array, rcx); if (ValueArrayFlatten) { Label is_flat_array, done; __ test_flattened_array_oop(array, rbx, is_flat_array); do_oop_load(_masm, Address(array, index,
*** 839,860 **** arrayOopDesc::base_offset_in_bytes(T_OBJECT)), rax, IS_ARRAY); __ jmp(done); __ bind(is_flat_array); ! __ call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::value_array_load), array, index); __ bind(done); } else { do_oop_load(_masm, Address(array, index, UseCompressedOops ? Address::times_4 : Address::times_ptr, arrayOopDesc::base_offset_in_bytes(T_OBJECT)), rax, IS_ARRAY); } ! ! __ profile_element(rbx, rax, rdx); } void TemplateTable::baload() { transition(itos, itos); // rax: index --- 836,856 ---- arrayOopDesc::base_offset_in_bytes(T_OBJECT)), rax, IS_ARRAY); __ jmp(done); __ bind(is_flat_array); ! __ read_flattened_element(array, index, rbx, rcx, rax); __ bind(done); } else { do_oop_load(_masm, Address(array, index, UseCompressedOops ? Address::times_4 : Address::times_ptr, arrayOopDesc::base_offset_in_bytes(T_OBJECT)), rax, IS_ARRAY); } ! __ profile_element(rbx, rax, rcx); } void TemplateTable::baload() { transition(itos, itos); // rax: index
*** 1222,1234 **** __ jccb(Assembler::equal, is_type_ok); __ jump(ExternalAddress(Interpreter::_throw_ArrayStoreException_entry)); __ bind(is_type_ok); ! __ movptr(rax, at_tos()); // value ! __ movl(rcx, at_tos_p1()); // index ! __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::value_array_store), rax, rdx, rcx); } // Pop stack arguments __ bind(done); __ addptr(rsp, 3 * Interpreter::stackElementSize); } --- 1218,1241 ---- __ jccb(Assembler::equal, is_type_ok); __ jump(ExternalAddress(Interpreter::_throw_ArrayStoreException_entry)); __ bind(is_type_ok); ! // rbx: value's klass ! // rdx: array ! // rdi: array klass ! __ test_klass_is_empty_value(rbx, rax, done); ! ! // calc dst for copy ! __ movl(rax, at_tos_p1()); // index ! __ data_for_value_array_index(rdx, rdi, rax, rax); ! ! // ...and src for copy ! __ movptr(rcx, at_tos()); // value ! __ data_for_oop(rcx, rcx, rbx); ! ! __ access_value_copy(IN_HEAP, rcx, rax, rbx); } // Pop stack arguments __ bind(done); __ addptr(rsp, 3 * Interpreter::stackElementSize); }
< prev index next >