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