Skip to content

Commit 0e9b1df

Browse files
committed
8351997: AArch64: Interpreter volatile reference stores with G1 are not sequentially consistent
Reviewed-by: eosterlund, adinn Backport-of: 83b15da2eb3cb6c8937f517c9b75eaa9eeece314
1 parent 2f8944c commit 0e9b1df

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

src/hotspot/cpu/aarch64/templateTable_aarch64.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,6 +1136,7 @@ void TemplateTable::aastore() {
11361136
// Get the value we will store
11371137
__ ldr(r0, at_tos());
11381138
// Now store using the appropriate barrier
1139+
// Clobbers: r10, r11, r3
11391140
do_oop_store(_masm, element_address, r0, IS_ARRAY);
11401141
__ b(done);
11411142

@@ -1144,6 +1145,7 @@ void TemplateTable::aastore() {
11441145
__ profile_null_seen(r2);
11451146

11461147
// Store a NULL
1148+
// Clobbers: r10, r11, r3
11471149
do_oop_store(_masm, element_address, noreg, IS_ARRAY);
11481150

11491151
// Pop stack arguments
@@ -2706,6 +2708,7 @@ void TemplateTable::putfield_or_static(int byte_no, bool is_static, RewriteContr
27062708
__ pop(atos);
27072709
if (!is_static) pop_and_check_object(obj);
27082710
// Store into the field
2711+
// Clobbers: r10, r11, r3
27092712
do_oop_store(_masm, field, r0, IN_HEAP);
27102713
if (rc == may_rewrite) {
27112714
patch_bytecode(Bytecodes::_fast_aputfield, bc, r1, true, byte_no);
@@ -2905,16 +2908,16 @@ void TemplateTable::fast_storefield(TosState state)
29052908
// Must prevent reordering of the following cp cache loads with bytecode load
29062909
__ membar(MacroAssembler::LoadLoad);
29072910

2908-
// test for volatile with r3
2909-
__ ldrw(r3, Address(r2, in_bytes(base +
2911+
// test for volatile with r5
2912+
__ ldrw(r5, Address(r2, in_bytes(base +
29102913
ConstantPoolCacheEntry::flags_offset())));
29112914

29122915
// replace index with field offset from cache entry
29132916
__ ldr(r1, Address(r2, in_bytes(base + ConstantPoolCacheEntry::f2_offset())));
29142917

29152918
{
29162919
Label notVolatile;
2917-
__ tbz(r3, ConstantPoolCacheEntry::is_volatile_shift, notVolatile);
2920+
__ tbz(r5, ConstantPoolCacheEntry::is_volatile_shift, notVolatile);
29182921
__ membar(MacroAssembler::StoreStore | MacroAssembler::LoadStore);
29192922
__ bind(notVolatile);
29202923
}
@@ -2930,6 +2933,7 @@ void TemplateTable::fast_storefield(TosState state)
29302933
// access field
29312934
switch (bytecode()) {
29322935
case Bytecodes::_fast_aputfield:
2936+
// Clobbers: r10, r11, r3
29332937
do_oop_store(_masm, field, r0, IN_HEAP);
29342938
break;
29352939
case Bytecodes::_fast_lputfield:
@@ -2962,7 +2966,7 @@ void TemplateTable::fast_storefield(TosState state)
29622966

29632967
{
29642968
Label notVolatile;
2965-
__ tbz(r3, ConstantPoolCacheEntry::is_volatile_shift, notVolatile);
2969+
__ tbz(r5, ConstantPoolCacheEntry::is_volatile_shift, notVolatile);
29662970
__ membar(MacroAssembler::StoreLoad | MacroAssembler::StoreStore);
29672971
__ bind(notVolatile);
29682972
}

0 commit comments

Comments
 (0)