Skip to content

Commit 83b15da

Browse files
committed
8351997: AArch64: Interpreter volatile reference stores with G1 are not sequentially consistent
Reviewed-by: shade, aph, fbredberg
1 parent c22af0c commit 83b15da

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
@@ -1144,6 +1144,7 @@ void TemplateTable::aastore() {
11441144
// Get the value we will store
11451145
__ ldr(r0, at_tos());
11461146
// Now store using the appropriate barrier
1147+
// Clobbers: r10, r11, r3
11471148
do_oop_store(_masm, element_address, r0, IS_ARRAY);
11481149
__ b(done);
11491150

@@ -1152,6 +1153,7 @@ void TemplateTable::aastore() {
11521153
__ profile_null_seen(r2);
11531154

11541155
// Store a null
1156+
// Clobbers: r10, r11, r3
11551157
do_oop_store(_masm, element_address, noreg, IS_ARRAY);
11561158

11571159
// Pop stack arguments
@@ -2882,6 +2884,7 @@ void TemplateTable::putfield_or_static(int byte_no, bool is_static, RewriteContr
28822884
__ pop(atos);
28832885
if (!is_static) pop_and_check_object(obj);
28842886
// Store into the field
2887+
// Clobbers: r10, r11, r3
28852888
do_oop_store(_masm, field, r0, IN_HEAP);
28862889
if (rc == may_rewrite) {
28872890
patch_bytecode(Bytecodes::_fast_aputfield, bc, r1, true, byte_no);
@@ -3077,12 +3080,12 @@ void TemplateTable::fast_storefield(TosState state)
30773080
// access constant pool cache
30783081
__ load_field_entry(r2, r1);
30793082

3080-
// R1: field offset, R2: field holder, R3: flags
3081-
load_resolved_field_entry(r2, r2, noreg, r1, r3);
3083+
// R1: field offset, R2: field holder, R5: flags
3084+
load_resolved_field_entry(r2, r2, noreg, r1, r5);
30823085

30833086
{
30843087
Label notVolatile;
3085-
__ tbz(r3, ResolvedFieldEntry::is_volatile_shift, notVolatile);
3088+
__ tbz(r5, ResolvedFieldEntry::is_volatile_shift, notVolatile);
30863089
__ membar(MacroAssembler::StoreStore | MacroAssembler::LoadStore);
30873090
__ bind(notVolatile);
30883091
}
@@ -3098,6 +3101,7 @@ void TemplateTable::fast_storefield(TosState state)
30983101
// access field
30993102
switch (bytecode()) {
31003103
case Bytecodes::_fast_aputfield:
3104+
// Clobbers: r10, r11, r3
31013105
do_oop_store(_masm, field, r0, IN_HEAP);
31023106
break;
31033107
case Bytecodes::_fast_lputfield:
@@ -3130,7 +3134,7 @@ void TemplateTable::fast_storefield(TosState state)
31303134

31313135
{
31323136
Label notVolatile;
3133-
__ tbz(r3, ResolvedFieldEntry::is_volatile_shift, notVolatile);
3137+
__ tbz(r5, ResolvedFieldEntry::is_volatile_shift, notVolatile);
31343138
__ membar(MacroAssembler::StoreLoad | MacroAssembler::StoreStore);
31353139
__ bind(notVolatile);
31363140
}

0 commit comments

Comments
 (0)