You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<p>Shared memory accesses (reads and writes) are divided into two groups, atomic accesses and data accesses, defined below. Atomic accesses are sequentially consistent, i.e., there is a strict total ordering of events agreed upon by all agents in an agent cluster. Non-atomic accesses do not have a strict total ordering agreed upon by all agents, i.e., unordered.</p>
1065
+
<emu-note>
1066
+
<p>No orderings weaker than sequentially consistent and stronger than unordered, such as release-acquire, are supported.</p>
1067
+
</emu-note>
1068
+
<ins class="block">
1069
+
<p>A <dfn variants="SharedMemoryStorageRecords">Shared Memory Storage Record</dfn> is either a <dfn>SharedBlockStorage</dfn> or <dfn>SharedStructStorage</dfn> Record.</p>
<td>The field that is accessed in [[Struct]].</td>
1115
+
</tr>
1116
+
</thead>
1117
+
</table>
1118
+
</emu-table>
1119
+
</ins>
1120
+
1121
+
<p>A <dfn variants="SharedDataBlockevents">Shared Data Block event</dfn> is either a <dfn>ReadSharedMemory</dfn>, <dfn>WriteSharedMemory</dfn>, or <dfn>ReadModifyWriteSharedMemory</dfn> Record.</p>
<td>An abstract closure that returns a modified List of byte values from a read List of byte values and [[Payload]].</td>
1260
+
</tr>
1261
+
</table>
1262
+
</emu-table>
1263
+
1264
+
<p>These events are introduced by abstract operations or by methods on the Atomics object.</p>
1265
+
<p>Some operations may also introduce <dfn>Synchronize</dfn> events. A <dfn variants="Synchronizeevents">Synchronize event</dfn> has no fields, and exists purely to directly constrain the permitted orderings of other events.</p>
1266
+
<p>In addition to Shared Data Block and Synchronize events, there are host-specific events.</p>
1267
+
<p><ins>If the [[Storage]] field of a ReadSharedMemory, WriteSharedMemory, or ReadModifyWriteSharedMemory event is a SharedBlockStorage, then </ins><del>L</del><ins>l</ins>et <del>the</del><ins>its</ins> range of <del>a ReadSharedMemory, WriteSharedMemory, or ReadModifyWriteSharedMemory event</del> be the Set of contiguous integers from its <ins>[[Storage]].</ins>[[ByteIndex]] to <ins>[[Storage]].</ins>[[ByteIndex]] + <ins>[[Storage]].</ins>[[ElementSize]] - 1. Two events' ranges are equal when the events <ins>have a SharedBlockStorage in their [[Storage]] field,</ins> have the same <ins>[[Storage]].</ins>[[Block]], and the ranges are element-wise equal. Two events' ranges are overlapping when the events have the same <ins>[[Storage]].</ins>[[Block]], the ranges are not equal and their intersection is non-empty. Two events' ranges are disjoint when the events do not <ins>both have a SharedBlockStorage in their [[Storage]] field, do not</ins> have the same <ins>[[Storage]].</ins>[[Block]]<ins>,</ins> or their ranges are neither equal nor overlapping.</p>
1268
+
<p><ins>If the [[Storage]] field of a ReadSharedMemory, WriteSharedMemory, or ReadModifyWriteSharedMemory event is a SharedStructStorage, then let its range be the value of the [[Storage]] field. Two events' ranges are equal when the events have a SharedStructStorage in their [[Storage]] field, have the same [[Storage]].[[Struct]] and the same [[Storage]].[[Field]]. Two events' ranges that both have a SharedStructStorage in their [[Storage]] field are never overlapping. Two events' ranges are disjoint when the events do not both have a SharedStructStorage in their [[Storage]] Field, or do not have the same [[Storage]].[[Struct]] or the same [[Storage]].[[Field]].</ins></p>
1269
+
</emu-clause>
1270
+
</emu-clause>
1271
+
<p>For brevity, the refactoring of the memory model relations to use SharedStructStorage and the modified definition of event ranges is omitted.</p>
0 commit comments