< prev index next >

src/hotspot/cpu/aarch64/templateTable_aarch64.cpp

Print this page

        

*** 1119,1129 **** Address element_address(r3, r4, Address::uxtw(LogBytesPerHeapOop)); index_check(r3, r2); // kills r1 ! // DMS CHECK: what does line below do? __ add(r4, r2, arrayOopDesc::base_offset_in_bytes(T_OBJECT) >> LogBytesPerHeapOop); // do array store check - check for NULL value first __ cbz(r0, is_null); --- 1119,1129 ---- Address element_address(r3, r4, Address::uxtw(LogBytesPerHeapOop)); index_check(r3, r2); // kills r1 ! // FIXME: Could we remove the line below? __ add(r4, r2, arrayOopDesc::base_offset_in_bytes(T_OBJECT) >> LogBytesPerHeapOop); // do array store check - check for NULL value first __ cbz(r0, is_null);
*** 1209,1220 **** __ profile_typecheck_failed(r2); __ b(ExternalAddress(Interpreter::_throw_ArrayStoreException_entry)); __ bind(is_type_ok); ! // DMS CHECK: Reload from TOS to be safe, because of profile_typecheck that blows r2 and r0. ! // Should we really do it? __ ldr(r1, at_tos()); // value __ mov(r2, r3); // array, ldr(r2, at_tos_p2()); __ ldr(r3, at_tos_p1()); // index __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::value_array_store), r1, r2, r3); } --- 1209,1220 ---- __ profile_typecheck_failed(r2); __ b(ExternalAddress(Interpreter::_throw_ArrayStoreException_entry)); __ bind(is_type_ok); ! // Reload from TOS to be safe, because of profile_typecheck that blows r2 and r0. ! // FIXME: Should we really do it? __ ldr(r1, at_tos()); // value __ mov(r2, r3); // array, ldr(r2, at_tos_p2()); __ ldr(r3, at_tos_p1()); // index __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::value_array_store), r1, r2, r3); }
*** 2102,2112 **** __ pop_ptr(r1); Register is_value_mask = rscratch1; __ mov(is_value_mask, markOopDesc::always_locked_pattern); ! if (EnableValhalla && ACmpOnValues == 3) { __ cmp(r1, r0); __ br(Assembler::EQ, (cc == equal) ? taken : not_taken); // might be substitutable, test if either r0 or r1 is null __ andr(r2, r0, r1); --- 2102,2112 ---- __ pop_ptr(r1); Register is_value_mask = rscratch1; __ mov(is_value_mask, markOopDesc::always_locked_pattern); ! if (EnableValhalla) { __ cmp(r1, r0); __ br(Assembler::EQ, (cc == equal) ? taken : not_taken); // might be substitutable, test if either r0 or r1 is null __ andr(r2, r0, r1);
*** 2134,2165 **** invoke_is_substitutable(r0, r1, not_taken, taken); } __ stop("Not reachable"); } - if (EnableValhalla && ACmpOnValues == 1) { - Label is_null; - __ cbz(r1, is_null); - __ ldr(r2, Address(r1, oopDesc::mark_offset_in_bytes())); - __ andr(r2, r2, is_value_mask); - __ cmp(r2, is_value_mask); - __ cset(r2, Assembler::EQ); - __ orr(r1, r1, r2); - __ bind(is_null); - } - __ cmpoop(r1, r0); - - if (EnableValhalla && ACmpOnValues == 2) { - __ br(Assembler::NE, (cc == not_equal) ? taken : not_taken); - __ cbz(r1, (cc == equal) ? taken : not_taken); - __ ldr(r2, Address(r1, oopDesc::mark_offset_in_bytes())); - __ andr(r2, r2, is_value_mask); - __ cmp(r2, is_value_mask); - cc = (cc == equal) ? not_equal : equal; - } - __ br(j_not(cc), not_taken); __ bind(taken); branch(false, false); __ bind(not_taken); __ profile_not_taken_branch(r0); --- 2134,2144 ----
*** 3345,3355 **** // access field switch (bytecode()) { case Bytecodes::_fast_qgetfield: { Label isFlattened, isInitialized, Done; ! // DMS CHECK: We don't need to reload multiple times, but stay close to original code __ ldrw(r9, Address(r2, in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()))); __ test_field_is_flattened(r9, r8 /* temp */, isFlattened); // Non-flattened field case __ mov(r9, r0); __ load_heap_oop(r0, field); --- 3324,3334 ---- // access field switch (bytecode()) { case Bytecodes::_fast_qgetfield: { Label isFlattened, isInitialized, Done; ! // FIXME: We don't need to reload registers multiple times, but stay close to x86 code __ ldrw(r9, Address(r2, in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()))); __ test_field_is_flattened(r9, r8 /* temp */, isFlattened); // Non-flattened field case __ mov(r9, r0); __ load_heap_oop(r0, field);
< prev index next >