Skip to content

Commit e19c1f4

Browse files
ioannadkeithwgahaasbackesPhosra
authored
Merge upstream spec (#207)
* [test] Add test for init expr with missing end marker (#1645) * Add test for the module size limit (#1642) * Add test for the module size limit The limits test did not test the maximum supported module size of 1GB yet. This PR adds tests which create modules consisting of a single custom section. The first test checks if a module of size 1GB is allowed, the second test checks that a module of size 1GB + 1 byte gets rejected. * Some cleanup * [test] Disable tests that become valid with memory64 (#1648) * Remove duplicated binary tests (#1649) * Remove duplicated binary tests Those tests were moved to `binary-leb128.wast` in #1019, but #1287 brought them back. * Remove more duplicated tests * Make binary-leb128 test memory64-ready (#1650) This merges part of WebAssembly/memory64#14 to make the tests fail both before and after memory64. This allows engines to enable memory64 without failing spec tests. * Move more LEB128 tests to binary-leb128 (#1651) Tests for LEB128 should be in the separate `binary-leb128.wast` test file. * Allow test for module size limit to fail (#1653) * Allow test for module size limit to fail Allocating a 1GB Uint8Array can fail. In particular, it will always fail on 32-bit systems in V8, where the maximum size of a TypedArray is 2^30-1, thus 1 byte too little. * [spec] Fix table_alloc signature (#1658) * [interpreter] Tweak parser * [spec] Include reftype in inline element segment abbreviations (#1657) * [spec] Fix copypaste error for V128.Load*_Zero instructions in index (#1662) * [interpreter] Use explicit bounds checks instead Invalid_argument (#1659) * [interpreter] Makefile tweak * [spec] Tweak math layout * [spec] Some tweaks to layout and SIMD ops (#1667) * [spec] Add missing type to elem.drop and store soundness (#1668) * [test] Add tests for out-of-range NaN payloads (#1670) * [spec] Fix typo (#1671) depended → dependent * [spec] Remark about the convention of using a pattern for attribute variable * [interpreter] Bump version to 2.0.1 * [interpreter] Makefile support for opam releases * [interpreter] Makefile tweaks * [interpreter] Makefile tweaks * [interpreter] Tune opam file to fix opam repo CI * [interpreter] Use dune instead of ocamlbuild (#1665) --------- Co-authored-by: Keith Winstein <keithw@cs.stanford.edu> Co-authored-by: gahaas <ahaas@google.com> Co-authored-by: Clemens Backes <clemensb@google.com> Co-authored-by: Phosra <phosra@tutanota.de> Co-authored-by: Andreas Rossberg <rossberg@mpi-sws.org> Co-authored-by: Tom Stuart <hi@tomstu.art> Co-authored-by: Reuben Dunnington <rdunnington@users.noreply.github.com> Co-authored-by: zapashcanon <leo@ndrs.fr> Co-authored-by: Andreas Rossberg <rossberg@chromium.org> Co-authored-by: Ben Visness <bvisness@users.noreply.github.com> Co-authored-by: Dan Gohman <dev@sunfishcode.online> Co-authored-by: Patrick Dubroy <pdubroy@gmail.com>
1 parent 321a751 commit e19c1f4

35 files changed

Lines changed: 493 additions & 1174 deletions

document/core/appendix/embedding.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ Tables
323323

324324
.. _embed-table-alloc:
325325

326-
:math:`\F{table\_alloc}(\store, \tabletype) : (\store, \tableaddr, \reff)`
326+
:math:`\F{table\_alloc}(\store, \tabletype, \reff) : (\store, \tableaddr)`
327327
..........................................................................
328328

329329
1. Pre-condition: :math:`\tabletype` is :ref:`valid <valid-tabletype>`.

document/core/appendix/index-instructions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,8 +431,8 @@ def Instruction(name, opcode, type=None, validation=None, execution=None, operat
431431
Instruction(r'\V128.\STORE\K{16\_lane}~\memarg~\laneidx', r'\hex{FD}~~\hex{59}', r'[\I32~\V128] \to []', r'valid-store-lane', r'exec-store-lane'),
432432
Instruction(r'\V128.\STORE\K{32\_lane}~\memarg~\laneidx', r'\hex{FD}~~\hex{5A}', r'[\I32~\V128] \to []', r'valid-store-lane', r'exec-store-lane'),
433433
Instruction(r'\V128.\STORE\K{64\_lane}~\memarg~\laneidx', r'\hex{FD}~~\hex{5B}', r'[\I32~\V128] \to []', r'valid-store-lane', r'exec-store-lane'),
434-
Instruction(r'\V128.\LOAD\K{32\_zero}~\memarg~\laneidx', r'\hex{FD}~~\hex{5C}', r'[\I32] \to [\V128]', r'valid-load-zero', r'exec-load-zero'),
435-
Instruction(r'\V128.\LOAD\K{64\_zero}~\memarg~\laneidx', r'\hex{FD}~~\hex{5D}', r'[\I32] \to [\V128]', r'valid-load-zero', r'exec-load-zero'),
434+
Instruction(r'\V128.\LOAD\K{32\_zero}~\memarg', r'\hex{FD}~~\hex{5C}', r'[\I32] \to [\V128]', r'valid-load-zero', r'exec-load-zero'),
435+
Instruction(r'\V128.\LOAD\K{64\_zero}~\memarg', r'\hex{FD}~~\hex{5D}', r'[\I32] \to [\V128]', r'valid-load-zero', r'exec-load-zero'),
436436
Instruction(r'\F32X4.\VDEMOTE\K{\_f64x2\_zero}', r'\hex{FD}~~\hex{5E}', r'[\V128] \to [\V128]', r'valid-vcvtop', r'exec-vcvtop', r'op-demote'),
437437
Instruction(r'\F64X2.\VPROMOTE\K{\_low\_f32x4}', r'\hex{FD}~~\hex{5F}', r'[\V128] \to [\V128]', r'valid-vcvtop', r'exec-vcvtop', r'op-promote'),
438438
Instruction(r'\I8X16.\VABS', r'\hex{FD}~~\hex{60}', r'[\V128] \to [\V128]', r'valid-vunop', r'exec-vunop', r'op-iabs'),

document/core/appendix/properties.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,8 @@ Module instances are classified by *module contexts*, which are regular :ref:`co
257257
.. index:: element instance, reference
258258
.. _valid-eleminst:
259259

260-
:ref:`Element Instances <syntax-eleminst>` :math:`\{ \EIELEM~\X{fa}^\ast \}`
261-
............................................................................
260+
:ref:`Element Instances <syntax-eleminst>` :math:`\{ \EITYPE~t, \EIELEM~\reff^\ast \}`
261+
......................................................................................
262262

263263
* For each :ref:`reference <syntax-ref>` :math:`\reff_i` in the elements :math:`\reff^n`:
264264

document/core/binary/conventions.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ In order to distinguish symbols of the binary syntax from symbols of the abstrac
5454
(This is a shorthand for :math:`B^n` where :math:`n \leq 1`.)
5555

5656
* :math:`x{:}B` denotes the same language as the nonterminal :math:`B`, but also binds the variable :math:`x` to the attribute synthesized for :math:`B`.
57+
A pattern may also be used instead of a variable, e.g., :math:`7{:}B`.
5758

5859
* Productions are written :math:`\B{sym} ::= B_1 \Rightarrow A_1 ~|~ \dots ~|~ B_n \Rightarrow A_n`, where each :math:`A_i` is the attribute that is synthesized for :math:`\B{sym}` in the given case, usually from attribute variables bound in :math:`B_i`.
5960

document/core/binary/modules.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ Each section consists of
6060

6161
* a one-byte section *id*,
6262
* the |U32| *size* of the contents, in bytes,
63-
* the actual *contents*, whose structure is depended on the section id.
63+
* the actual *contents*, whose structure is dependent on the section id.
6464

6565
Every section is optional; an omitted section is equivalent to the section being present with empty contents.
6666

document/core/exec/instructions.rst

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ The mapping of numeric instructions to their underlying operators is expressed b
2020

2121
.. math::
2222
\begin{array}{lll@{\qquad}l}
23-
\X{op}_{\K{i}N}(n_1,\dots,n_k) &=& \F{i}\X{op}_N(n_1,\dots,n_k) \\
24-
\X{op}_{\K{f}N}(z_1,\dots,z_k) &=& \F{f}\X{op}_N(z_1,\dots,z_k) \\
23+
\X{op}_{\IN}(i_1,\dots,i_k) &=& \F{i}\X{op}_N(i_1,\dots,i_k) \\
24+
\X{op}_{\FN}(z_1,\dots,z_k) &=& \F{f}\X{op}_N(z_1,\dots,z_k) \\
25+
\X{op}_{\VN}(i_1,\dots,i_k) &=& \F{i}\X{op}_N(i_1,\dots,i_k) \\
2526
\end{array}
2627
2728
And for :ref:`conversion operators <exec-cvtop>`:
@@ -292,14 +293,14 @@ Most vector instructions are defined in terms of generic numeric operators appli
292293

293294
2. Pop the value :math:`\V128.\VCONST~c_1` from the stack.
294295

295-
3. Let :math:`c` be the result of computing :math:`\vvunop_{\I128}(c_1)`.
296+
3. Let :math:`c` be the result of computing :math:`\vvunop_{\V128}(c_1)`.
296297

297298
4. Push the value :math:`\V128.\VCONST~c` to the stack.
298299

299300
.. math::
300301
\begin{array}{lcl@{\qquad}l}
301302
(\V128\K{.}\VCONST~c_1)~\V128\K{.}\vvunop &\stepto& (\V128\K{.}\VCONST~c)
302-
& (\iff c = \vvunop_{\I128}(c_1)) \\
303+
& (\iff c = \vvunop_{\V128}(c_1)) \\
303304
\end{array}
304305
305306
@@ -314,14 +315,14 @@ Most vector instructions are defined in terms of generic numeric operators appli
314315

315316
3. Pop the value :math:`\V128.\VCONST~c_1` from the stack.
316317

317-
4. Let :math:`c` be the result of computing :math:`\vvbinop_{\I128}(c_1, c_2)`.
318+
4. Let :math:`c` be the result of computing :math:`\vvbinop_{\V128}(c_1, c_2)`.
318319

319320
5. Push the value :math:`\V128.\VCONST~c` to the stack.
320321

321322
.. math::
322323
\begin{array}{lcl@{\qquad}l}
323324
(\V128\K{.}\VCONST~c_1)~(\V128\K{.}\VCONST~c_2)~\V128\K{.}\vvbinop &\stepto& (\V128\K{.}\VCONST~c)
324-
& (\iff c = \vvbinop_{\I128}(c_1, c_2)) \\
325+
& (\iff c = \vvbinop_{\V128}(c_1, c_2)) \\
325326
\end{array}
326327
327328
@@ -338,14 +339,14 @@ Most vector instructions are defined in terms of generic numeric operators appli
338339

339340
4. Pop the value :math:`\V128.\VCONST~c_1` from the stack.
340341

341-
5. Let :math:`c` be the result of computing :math:`\vvternop_{\I128}(c_1, c_2, c_3)`.
342+
5. Let :math:`c` be the result of computing :math:`\vvternop_{\V128}(c_1, c_2, c_3)`.
342343

343344
6. Push the value :math:`\V128.\VCONST~c` to the stack.
344345

345346
.. math::
346347
\begin{array}{lcl@{\qquad}l}
347348
(\V128\K{.}\VCONST~c_1)~(\V128\K{.}\VCONST~c_2)~(\V128\K{.}\VCONST~c_3)~\V128\K{.}\vvternop &\stepto& (\V128\K{.}\VCONST~c)
348-
& (\iff c = \vvternop_{\I128}(c_1, c_2, c_3)) \\
349+
& (\iff c = \vvternop_{\V128}(c_1, c_2, c_3)) \\
349350
\end{array}
350351
351352
@@ -379,15 +380,15 @@ Most vector instructions are defined in terms of generic numeric operators appli
379380

380381
2. Pop the value :math:`\V128.\VCONST~c_2` from the stack.
381382

382-
3. Let :math:`i^\ast` be the result of computing :math:`\lanes_{i8x16}(c_2)`.
383+
3. Let :math:`i^\ast` be the result of computing :math:`\lanes_{\I8X16}(c_2)`.
383384

384385
4. Pop the value :math:`\V128.\VCONST~c_1` from the stack.
385386

386-
5. Let :math:`j^\ast` be the result of computing :math:`\lanes_{i8x16}(c_1)`.
387+
5. Let :math:`j^\ast` be the result of computing :math:`\lanes_{\I8X16}(c_1)`.
387388

388389
6. Let :math:`c^\ast` be the concatenation of the two sequences :math:`j^\ast` and :math:`0^{240}`.
389390

390-
7. Let :math:`c'` be the result of computing :math:`\lanes^{-1}_{i8x16}(c^\ast[ i^\ast[0] ] \dots c^\ast[ i^\ast[15] ])`.
391+
7. Let :math:`c'` be the result of computing :math:`\lanes^{-1}_{\I8X16}(c^\ast[ i^\ast[0] ] \dots c^\ast[ i^\ast[15] ])`.
391392

392393
8. Push the value :math:`\V128.\VCONST~c'` onto the stack.
393394

@@ -398,9 +399,9 @@ Most vector instructions are defined in terms of generic numeric operators appli
398399
\end{array}
399400
\\ \qquad
400401
\begin{array}[t]{@{}r@{~}l@{}}
401-
(\iff & i^\ast = \lanes_{i8x16}(c_2) \\
402-
\wedge & c^\ast = \lanes_{i8x16}(c_1)~0^{240} \\
403-
\wedge & c' = \lanes^{-1}_{i8x16}(c^\ast[ i^\ast[0] ] \dots c^\ast[ i^\ast[15] ]))
402+
(\iff & i^\ast = \lanes_{\I8X16}(c_2) \\
403+
\wedge & c^\ast = \lanes_{\I8X16}(c_1)~0^{240} \\
404+
\wedge & c' = \lanes^{-1}_{\I8X16}(c^\ast[ i^\ast[0] ] \dots c^\ast[ i^\ast[15] ]))
404405
\end{array}
405406
\end{array}
406407
@@ -416,15 +417,15 @@ Most vector instructions are defined in terms of generic numeric operators appli
416417

417418
3. Pop the value :math:`\V128.\VCONST~c_2` from the stack.
418419

419-
4. Let :math:`i_2^\ast` be the result of computing :math:`\lanes_{i8x16}(c_2)`.
420+
4. Let :math:`i_2^\ast` be the result of computing :math:`\lanes_{\I8X16}(c_2)`.
420421

421422
5. Pop the value :math:`\V128.\VCONST~c_1` from the stack.
422423

423-
6. Let :math:`i_1^\ast` be the result of computing :math:`\lanes_{i8x16}(c_1)`.
424+
6. Let :math:`i_1^\ast` be the result of computing :math:`\lanes_{\I8X16}(c_1)`.
424425

425426
7. Let :math:`i^\ast` be the concatenation of the two sequences :math:`i_1^\ast` and :math:`i_2^\ast`.
426427

427-
8. Let :math:`c` be the result of computing :math:`\lanes^{-1}_{i8x16}(i^\ast[x^\ast[0]] \dots i^\ast[x^\ast[15]])`.
428+
8. Let :math:`c` be the result of computing :math:`\lanes^{-1}_{\I8X16}(i^\ast[x^\ast[0]] \dots i^\ast[x^\ast[15]])`.
428429

429430
9. Push the value :math:`\V128.\VCONST~c` onto the stack.
430431

@@ -435,8 +436,8 @@ Most vector instructions are defined in terms of generic numeric operators appli
435436
\end{array}
436437
\\ \qquad
437438
\begin{array}[t]{@{}r@{~}l@{}}
438-
(\iff & i^\ast = \lanes_{i8x16}(c_1)~\lanes_{i8x16}(c_2) \\
439-
\wedge & c = \lanes^{-1}_{i8x16}(i^\ast[x^\ast[0]] \dots i^\ast[x^\ast[15]]))
439+
(\iff & i^\ast = \lanes_{\I8X16}(c_1)~\lanes_{\I8X16}(c_2) \\
440+
\wedge & c = \lanes^{-1}_{\I8X16}(i^\ast[x^\ast[0]] \dots i^\ast[x^\ast[15]]))
440441
\end{array}
441442
\end{array}
442443
@@ -1681,7 +1682,7 @@ Table Instructions
16811682

16821683
4. Assert: due to :ref:`validation <valid-elem.drop>`, :math:`S.\SELEMS[a]` exists.
16831684

1684-
5. Replace :math:`S.\SELEMS[a]` with the :ref:`element instance <syntax-eleminst>` :math:`\{\EIELEM~\epsilon\}`.
1685+
5. Replace :math:`S.\SELEMS[a].\EIELEM` with :math:`\epsilon`.
16851686

16861687
.. math::
16871688
~\\[-1ex]
@@ -1690,7 +1691,7 @@ Table Instructions
16901691
S; F; (\ELEMDROP~x) &\stepto& S'; F; \epsilon
16911692
\end{array}
16921693
\\ \qquad
1693-
(\iff S' = S \with \SELEMS[F.\AMODULE.\MIELEMS[x]] = \{ \EIELEM~\epsilon \}) \\
1694+
(\iff S' = S \with \SELEMS[F.\AMODULE.\MIELEMS[x]].\EIELEM = \epsilon) \\
16941695
\end{array}
16951696
16961697
@@ -1875,7 +1876,7 @@ Memory Instructions
18751876

18761877
14. Let :math:`n_k` be the result of computing :math:`\extend^{\sx}_{M,W}(m_k)`.
18771878

1878-
15. Let :math:`c` be the result of computing :math:`\lanes^{-1}_{\X{i}W\K{x}N}(n_0 \dots n_{N-1})`.
1879+
15. Let :math:`c` be the result of computing :math:`\lanes^{-1}_{\K{i}W\K{x}N}(n_0 \dots n_{N-1})`.
18791880

18801881
16. Push the value :math:`\V128.\CONST~c` to the stack.
18811882

@@ -1891,7 +1892,7 @@ Memory Instructions
18911892
(\iff & \X{mem}.\MITYPE = \limits~\UNSHARED \\
18921893
\wedge & \X{ea} + M \cdot N / 8 \leq |\X{mem}.\MIDATA| \\
18931894
\wedge & \bytes_{\iM}(m_k) = \X{mem}.\MIDATA[\X{ea} + k \cdot M/8 \slice M/8] \\
1894-
\wedge & c = \lanes^{-1}_{\X{i}W\K{x}N}(\extend^{\sx}_{M,W}(m_0) \dots \extend^{\sx}_{M,W}(m_{N-1}))) \\[1ex]
1895+
\wedge & c = \lanes^{-1}_{\K{i}W\K{x}N}(\extend^{\sx}_{M,W}(m_0) \dots \extend^{\sx}_{M,W}(m_{N-1}))) \\[1ex]
18951896
\end{array}
18961897
\\[1ex]
18971898
\begin{array}{lcl@{\qquad}l}
@@ -1910,7 +1911,7 @@ Memory Instructions
19101911
(\iff & \X{mem}.\MITYPE = \limits~\SHARED \\
19111912
\wedge & \X{ea} + M \cdot N / 8 \leq n \\
19121913
\wedge & \bytes_{\iM}(m_k) = b^\ast[k \cdot M/8 \slice M/8] \\
1913-
\wedge & c = \lanes^{-1}_{\X{i}W\K{x}N}(\extend^{\sx}_{M,W}(m_0) \dots \extend^{\sx}_{M,W}(m_{N-1}))) \\[1ex]
1914+
\wedge & c = \lanes^{-1}_{\K{i}W\K{x}N}(\extend^{\sx}_{M,W}(m_0) \dots \extend^{\sx}_{M,W}(m_{N-1}))) \\[1ex]
19141915
\end{array}
19151916
\\[1ex]
19161917
\begin{array}{lcl@{\qquad}l}
@@ -1980,7 +1981,7 @@ Memory Instructions
19801981

19811982
13. Let :math:`L` be the integer :math:`128 / N`.
19821983

1983-
14. Let :math:`c` be the result of computing :math:`\lanes^{-1}_{\iN\K{x}L}(n^L)`.
1984+
14. Let :math:`c` be the result of computing :math:`\lanes^{-1}_{\IN\K{x}L}(n^L)`.
19841985

19851986
15. Push the value :math:`\V128.\CONST~c` to the stack.
19861987

@@ -1995,7 +1996,7 @@ Memory Instructions
19951996
(\iff & \X{mem}.\MITYPE = \limits~\UNSHARED \\
19961997
\wedge & \X{ea} + N/8 \leq |\X{mem}.\MIDATA| \\
19971998
\wedge & \bytes_{\iN}(n) = \X{mem}.\MIDATA[\X{ea} \slice N/8] \\
1998-
\wedge & c = \lanes^{-1}_{\iN\K{x}L}(n^L)) \\[1ex]
1999+
\wedge & c = \lanes^{-1}_{\IN\K{x}L}(n^L)) \\[1ex]
19992000
\end{array}
20002001
\\[1ex]
20012002
\begin{array}{lcl@{\qquad}l}
@@ -2015,7 +2016,7 @@ Memory Instructions
20152016
(\iff & \X{mem}.\MITYPE = \limits~\SHARED \\
20162017
\wedge & \X{ea} + N/8 \leq n \\
20172018
\wedge & \bytes_{\iN}(n) = b^\ast \\
2018-
\wedge & c = \lanes^{-1}_{\iN\K{x}L}(n^L)) \\[1ex]
2019+
\wedge & c = \lanes^{-1}_{\IN\K{x}L}(n^L)) \\[1ex]
20192020
\end{array}
20202021
\\[1ex]
20212022
\begin{array}{lcl@{\qquad}l}
@@ -2193,9 +2194,9 @@ Memory Instructions
21932194

21942195
15. Let :math:`L` be :math:`128 / N`.
21952196

2196-
16. Let :math:`j^\ast` be the result of computing :math:`\lanes_{\K{i}N\K{x}L}(v)`.
2197+
16. Let :math:`j^\ast` be the result of computing :math:`\lanes_{\IN\K{x}L}(v)`.
21972198

2198-
17. Let :math:`c` be the result of computing :math:`\lanes^{-1}_{\K{i}N\K{x}L}(j^\ast \with [x] = r)`.
2199+
17. Let :math:`c` be the result of computing :math:`\lanes_{\IN\K{x}L}(j^\ast \with [x] = r)`.
21992200

22002201
18. Push the value :math:`\V128.\CONST~c` to the stack.
22012202

@@ -2210,7 +2211,7 @@ Memory Instructions
22102211
(\iff & \X{mem}.\MITYPE = \limits~\UNSHARED \\
22112212
\wedge & \X{ea} + N/8 \leq |\X{mem}.\MIDATA| \\
22122213
\wedge & \bytes_{\iN}(n) = \X{mem}.\MIDATA[\X{ea} \slice N/8] \\
2213-
\wedge & c = \lanes^{-1}_{\K{i}N\K{x}L}(\lanes_{\K{i}N\K{x}L}(v) \with [x] = r)) \\[1ex]
2214+
\wedge & c = \lanes^{-1}_{\IN\K{x}L}(\lanes_{\IN\K{x}L}(v) \with [x] = r)) \\[1ex]
22142215
\end{array}
22152216
\\[1ex]
22162217
\begin{array}{lcl@{\qquad}l}
@@ -2230,7 +2231,7 @@ Memory Instructions
22302231
(\iff & \X{mem}.\MITYPE = \limits~\SHARED \\
22312232
\wedge & \X{ea} + N/8 \leq n \\
22322233
\wedge & \bytes_{\iN}(n) = b^\ast \\
2233-
\wedge & c = \lanes^{-1}_{\K{i}N\K{x}L}(\lanes_{\K{i}N\K{x}L}(v) \with [x] = r)) \\[1ex]
2234+
\wedge & c = \lanes^{-1}_{\IN\K{x}L}(\lanes_{\IN\K{x}L}(v) \with [x] = r)) \\[1ex]
22342235
\end{array}
22352236
\\[1ex]
22362237
\begin{array}{lcl@{\qquad}l}
@@ -2402,7 +2403,7 @@ Memory Instructions
24022403

24032404
12. Let :math:`L` be :math:`128/N`.
24042405

2405-
13. Let :math:`j^\ast` be the result of computing :math:`\lanes_{\K{i}N\K{x}L}(c)`.
2406+
13. Let :math:`j^\ast` be the result of computing :math:`\lanes_{\IN\K{x}L}(c)`.
24062407

24072408
14. Let :math:`b^\ast` be the result of computing :math:`\bytes_{\iN}(j^\ast[x])`.
24082409

@@ -2434,7 +2435,7 @@ Memory Instructions
24342435
\begin{array}[t]{@{}r@{~}l@{}}
24352436
(\iff & \X{mem}.\MITYPE = \limits~\UNSHARED \\
24362437
\wedge & \X{ea} + N/8 \leq |\X{mem}.\MIDATA| \\
2437-
\wedge & S' = S \with \SMEMS[F.\AMODULE.\MIMEMS[0]].\MIDATA[\X{ea} \slice N/8] = \bytes_{\iN}(\lanes_{\K{i}N\K{x}L}(c)[x])) \\[1ex]
2438+
\wedge & S' = S \with \SMEMS[F.\AMODULE.\MIMEMS[0]].\MIDATA[\X{ea} \slice N/8] = \bytes_{\iN}(\lanes_{\IN\K{x}L}(c)[x])) \\[1ex]
24382439
\end{array}
24392440
\\[1ex]
24402441
\begin{array}{lcl@{\qquad}l}
@@ -2453,7 +2454,7 @@ Memory Instructions
24532454
\begin{array}[t]{@{}r@{~}l@{}}
24542455
(\iff & \X{mem}.\MITYPE = \limits~\SHARED \\
24552456
\wedge & \X{ea} + N/8 \leq n \\
2456-
\wedge & b^\ast = \bytes_{\iN}(\lanes_{\K{i}N\K{x}L}(c)[x])) \\[1ex]
2457+
\wedge & b^\ast = \bytes_{\iN}(\lanes_{\IN\K{x}L}(c)[x])) \\[1ex]
24572458
\end{array}
24582459
\\[1ex]
24592460
\begin{array}{lcl@{\qquad}l}

0 commit comments

Comments
 (0)