@@ -168,6 +168,7 @@ void TemplateTable::patch_bytecode(Bytecodes::Code bc, Register bc_reg,
168168 Register temp_reg, bool load_bc_into_bc_reg/* =true*/ ,
169169 int byte_no)
170170{
171+ assert_different_registers (bc_reg, temp_reg);
171172 if (!RewriteBytecodes) return ;
172173 Label L_patch_done;
173174
@@ -231,9 +232,12 @@ void TemplateTable::patch_bytecode(Bytecodes::Code bc, Register bc_reg,
231232 __ stop (" patching the wrong bytecode" );
232233 __ bind (L_okay);
233234#endif
234-
235- // patch bytecode
236- __ strb (bc_reg, at_bcp (0 ));
235+ // Patch bytecode with release store to coordinate with ResolvedFieldEntry loads
236+ // in fast bytecode codelets. load_field_entry has a memory barrier that gains
237+ // the needed ordering, together with control dependency on entering the fast codelet
238+ // itself.
239+ __ lea (temp_reg, at_bcp (0 ));
240+ __ stlrb (bc_reg, temp_reg);
237241 __ bind (L_patch_done);
238242}
239243
@@ -3094,6 +3098,7 @@ void TemplateTable::fast_storefield(TosState state)
30943098
30953099 // R1: field offset, R2: field holder, R5: flags
30963100 load_resolved_field_entry (r2, r2, noreg, r1, r5);
3101+ __ verify_field_offset (r1);
30973102
30983103 {
30993104 Label notVolatile;
@@ -3183,6 +3188,8 @@ void TemplateTable::fast_accessfield(TosState state)
31833188 __ load_field_entry (r2, r1);
31843189
31853190 __ load_sized_value (r1, Address (r2, in_bytes (ResolvedFieldEntry::field_offset_offset ())), sizeof (int ), true /* is_signed*/ );
3191+ __ verify_field_offset (r1);
3192+
31863193 __ load_unsigned_byte (r3, Address (r2, in_bytes (ResolvedFieldEntry::flags_offset ())));
31873194
31883195 // r0: object
@@ -3249,7 +3256,9 @@ void TemplateTable::fast_xaccess(TosState state)
32493256 __ ldr (r0, aaddress (0 ));
32503257 // access constant pool cache
32513258 __ load_field_entry (r2, r3, 2 );
3259+
32523260 __ load_sized_value (r1, Address (r2, in_bytes (ResolvedFieldEntry::field_offset_offset ())), sizeof (int ), true /* is_signed*/ );
3261+ __ verify_field_offset (r1);
32533262
32543263 // 8179954: We need to make sure that the code generated for
32553264 // volatile accesses forms a sequentially-consistent set of
0 commit comments