Skip to content

Commit

Permalink
[spec] Tweak format of changes list
Browse files Browse the repository at this point in the history
  • Loading branch information
rossberg committed Sep 21, 2024
1 parent 04a39c5 commit 670ae7e
Showing 1 changed file with 170 additions and 37 deletions.
207 changes: 170 additions & 37 deletions document/core/appendix/changes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ Sign extension instructions

Added new numeric instructions for performing sign extension within integer representations [#proposal-signext]_.

* New :ref:`numeric instructions <syntax-instr-numeric>`: :math:`\K{i}\X{nn}\K{.}\EXTEND\X{N}\K{\_s}`
* New :ref:`numeric instructions <syntax-instr-numeric>`:

- :math:`\K{i}\X{nn}\K{.}\EXTEND\X{N}\K{\_s}`


.. index:: instruction, trap, floating-point, integer
Expand All @@ -27,7 +29,9 @@ Non-trapping float-to-int conversions

Added new conversion instructions that avoid trapping when converting a floating-point number to an integer [#proposal-cvtsat]_.

* New :ref:`numeric instructions <syntax-instr-numeric>`: :math:`\K{i}\X{nn}\K{.}\TRUNC\K{\_sat\_f}\X{mm}\K{\_}\sx`
* New :ref:`numeric instructions <syntax-instr-numeric>`:

- :math:`\K{i}\X{nn}\K{.}\TRUNC\K{\_sat\_f}\X{mm}\K{\_}\sx`


.. index:: block, function, value type, result type
Expand All @@ -49,11 +53,20 @@ Reference types

Added |FUNCREF| and |EXTERNREF| as new value types and respective instructions [#proposal-reftype]_.

* New :ref:`value types <syntax-valtype>`: :ref:`reference types <syntax-reftype>` |FUNCREF| and |EXTERNREF|
* New :ref:`reference <syntax-reftype>` :ref:`value types <syntax-valtype>`:

- |FUNCREF|
- |EXTERNREF|

* New :ref:`reference instructions <syntax-instr-ref>`: |REFNULL|, |REFFUNC|, |REFISNULL|
* New :ref:`reference instructions <syntax-instr-ref>`:

* Enrich :ref:`parametric instruction <syntax-instr-parametric>`: |SELECT| with optional type immediate
- |REFNULL|
- |REFFUNC|
- |REFISNULL|

* Enrich :ref:`parametric instruction <syntax-instr-parametric>`:

- |SELECT| with optional type immediate

* New :ref:`declarative <syntax-elemmode>` form of :ref:`element segment <syntax-elem>`

Expand All @@ -67,7 +80,12 @@ Added instructions to directly access and modify tables [#proposal-reftype]_.

* :ref:`Table types <syntax-tabletype>` allow any :ref:`reference type <syntax-reftype>` as element type

* New :ref:`table instructions <syntax-instr-table>`: |TABLEGET|, |TABLESET|, |TABLESIZE|, |TABLEGROW|
* New :ref:`table instructions <syntax-instr-table>`:

- |TABLEGET|
- |TABLESET|
- |TABLESIZE|
- |TABLEGROW|


.. index:: table, instruction, table index, element segment
Expand All @@ -77,9 +95,19 @@ Multiple tables

Added the ability to use multiple tables per module [#proposal-reftype]_.

* :ref:`Modules <syntax-module>` may :ref:`define <syntax-table>`, :ref:`import <syntax-import>`, and :ref:`export <syntax-export>` multiple tables
* :ref:`Modules <syntax-module>` may

* :ref:`Table instructions <syntax-instr-table>` take a :ref:`table index <syntax-tableidx>` immediate: |TABLEGET|, |TABLESET|, |TABLESIZE|, |TABLEGROW|, |CALLINDIRECT|
- :ref:`define <syntax-table>` multiple tables
- :ref:`import <syntax-import>` multiple tables
- :ref:`export <syntax-export>` multiple tables

* :ref:`Table instructions <syntax-instr-table>` take a :ref:`table index <syntax-tableidx>` immediate:

- |TABLEGET|
- |TABLESET|
- |TABLESIZE|
- |TABLEGROW|
- |CALLINDIRECT|

* :ref:`Element segments <syntax-elem>` take a :ref:`table index <syntax-tableidx>`

Expand All @@ -91,9 +119,19 @@ Bulk memory and table instructions

Added instructions that modify ranges of memory or table entries [#proposal-reftype]_ [#proposal-bulk]_

* New :ref:`memory instructions <syntax-instr-memory>`: |MEMORYFILL|, |MEMORYINIT|, |MEMORYCOPY|, |DATADROP|
* New :ref:`memory instructions <syntax-instr-memory>`:

- |MEMORYFILL|
- |MEMORYINIT|
- |MEMORYCOPY|
- |DATADROP|

* New :ref:`table instructions <syntax-instr-table>`: |TABLEFILL|, |TABLEINIT|, |TABLECOPY|, |ELEMDROP|
* New :ref:`table instructions <syntax-instr-table>`:

- |TABLEFILL|
- |TABLEINIT|
- |TABLECOPY|
- |ELEMDROP|

* New :ref:`passive <syntax-datamode>` form of :ref:`data segment <syntax-data>`

Expand All @@ -109,33 +147,128 @@ Added instructions that modify ranges of memory or table entries [#proposal-reft
Vector instructions
...................

Added vector type and instructions that manipulate multiple numeric values in parallel (also known as *SIMD*, single instruction multiple data) [#proposal-vectype]_

* New :ref:`value type <syntax-valtype>`: |V128|

* New :ref:`memory instructions <syntax-instr-memory>`: :math:`\K{v128.}\LOAD`, :math:`\K{v128.}\LOAD{}\!N\!\K{x}\!M\!\K{\_}\sx`, :math:`\K{v128.}\LOAD{}N\K{\_zero}`, :math:`\K{v128.}\LOAD{}N\K{\_splat}`, :math:`\K{v128.}\LOAD{}N\K{\_lane}`, :math:`\K{v128.}\STORE`, :math:`\K{v128.}\STORE{}N\K{\_lane}`

* New constant :ref:`vector instruction <syntax-instr-vec>`: :math:`\K{v128.}\VCONST`

* New unary :ref:`vector instructions <syntax-instr-vec>`: :math:`\K{v128.not}`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.abs}`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.neg}`, :math:`\K{i8x16.popcnt}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.abs}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.neg}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.sqrt}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.ceil}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.floor}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.trunc}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.nearest}`

* New binary :ref:`vector instructions <syntax-instr-vec>`: :math:`\K{v128.and}`, :math:`\K{v128.andnot}`, :math:`\K{v128.or}`, :math:`\K{v128.xor}`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.add}`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.sub}`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.mul}`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.add\_sat\_}\sx`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.sub\_sat\_}\sx`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.min\_}\sx`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.max\_}\sx`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.shl}`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.shr\_}\sx`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.add}`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.extmul\_}\half\K{\_i}\!N'\!\K{x}\!M'\!\K{\_}\sx`, :math:`\K{i16x8.q15mulr\_sat\_s}`, :math:`\K{i32x4.dot\_i16x8\_s}`, :math:`\K{i16x8.extadd\_pairwise\_i8x16\_}\sx`, :math:`\K{i32x4.extadd\_pairwise\_i16x8\_}\sx`, :math:`\K{i8x16.avgr\_u}`, :math:`\K{i16x8.avgr\_u}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.sub}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.mul}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.div}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.min}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.max}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.pmin}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.pmax}`

* New ternary :ref:`vector instruction <syntax-instr-vec>`: :math:`\K{v128.bitselect}`

* New test :ref:`vector instructions <syntax-instr-vec>`: :math:`\K{v128.any\_true}`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.all\_true}`

* New relational :ref:`vector instructions <syntax-instr-vec>`: :math:`\K{i}\!N\!\K{x}\!M\!\K{.eq}`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.ne}`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.lt\_}\sx`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.gt\_}\sx`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.le\_}\sx`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.ge\_}\sx`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.eq}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.ne}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.lt}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.gt}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.le}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.ge}`

* New conversion :ref:`vector instructions <syntax-instr-vec>`::math:`\K{i32x4.trunc\_sat\_f32x4\_}\sx`, :math:`\K{i32x4.trunc\_sat\_f64x2\_}\sx\K{\_zero}`, :math:`\K{f32x4.convert\_i32x4\_}\sx`, :math:`\K{f32x4.demote\_f64x2\_zero}`, :math:`\K{f64x2.convert\_low\_i32x4\_}\sx`, :math:`\K{f64x2.promote\_low\_f32x4}`

* New lane access :ref:`vector instructions <syntax-instr-vec>`: :math:`\K{i}\!N\!\K{x}\!M\!\K{.extract\_lane\_}\sx^?`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.replace\_lane}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.extract\_lane}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.replace\_lane}`

* New lane splitting/combining :ref:`vector instructions <syntax-instr-vec>`: :math:`\K{i}\!N\!\K{x}\!M\!\K{.extend\_}\half\K{\_i}\!N'\!\K{x}\!M'\!\K{\_}\sx`, :math:`\K{i8x16.narrow\_i16x8\_}\sx`, :math:`\K{i16x8.narrow\_i32x4\_}\sx`

* New byte reordering :ref:`vector instructions <syntax-instr-vec>`: :math:`\K{i8x16.shuffle}`, :math:`\K{i8x16.swizzle}`

* New injection/projection :ref:`vector instructions <syntax-instr-vec>`: :math:`\K{i}\!N\!\K{x}\!M\!\K{.splat}`, :math:`\K{f}\!N\!\K{x}\!M\!\K{.splat}`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.bitmask}`
Added vector type and instructions that manipulate multiple numeric values in parallel
(also known as *SIMD*, single instruction multiple data) [#proposal-vectype]_

* New :ref:`value type <syntax-valtype>`:

- |V128|

* New :ref:`memory instructions <syntax-instr-memory>`:

- :math:`\K{v128.}\LOAD`
- :math:`\K{v128.}\LOAD{}\!N\!\K{x}\!M\!\K{\_}\sx`
- :math:`\K{v128.}\LOAD{}N\K{\_zero}`
- :math:`\K{v128.}\LOAD{}N\K{\_splat}`
- :math:`\K{v128.}\LOAD{}N\K{\_lane}`
- :math:`\K{v128.}\STORE`
- :math:`\K{v128.}\STORE{}N\K{\_lane}`

* New constant :ref:`vector instruction <syntax-instr-vec>`:

- :math:`\K{v128.}\VCONST`

* New unary :ref:`vector instructions <syntax-instr-vec>`:

- :math:`\K{v128.not}`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.abs}`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.neg}`
- :math:`\K{i8x16.popcnt}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.abs}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.neg}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.sqrt}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.ceil}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.floor}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.trunc}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.nearest}`

* New binary :ref:`vector instructions <syntax-instr-vec>`:

- :math:`\K{v128.and}`
- :math:`\K{v128.andnot}`
- :math:`\K{v128.or}`
- :math:`\K{v128.xor}`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.add}`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.sub}`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.mul}`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.add\_sat\_}\sx`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.sub\_sat\_}\sx`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.min\_}\sx`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.max\_}\sx`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.shl}`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.shr\_}\sx`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.add}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.sub}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.mul}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.div}`
- :math:`\K{i16x8.extadd\_pairwise\_i8x16\_}\sx`
- :math:`\K{i32x4.extadd\_pairwise\_i16x8\_}\sx`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.extmul\_}\half\K{\_i}\!N'\!\K{x}\!M'\!\K{\_}\sx`
- :math:`\K{i16x8.q15mulr\_sat\_s}`
- :math:`\K{i32x4.dot\_i16x8\_s}`
- :math:`\K{i8x16.avgr\_u}`
- :math:`\K{i16x8.avgr\_u}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.min}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.max}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.pmin}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.pmax}`

* New ternary :ref:`vector instruction <syntax-instr-vec>`:

- :math:`\K{v128.bitselect}`

* New test :ref:`vector instructions <syntax-instr-vec>`:

- :math:`\K{v128.any\_true}`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.all\_true}`

* New relational :ref:`vector instructions <syntax-instr-vec>`:

- :math:`\K{i}\!N\!\K{x}\!M\!\K{.eq}`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.ne}`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.lt\_}\sx`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.gt\_}\sx`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.le\_}\sx`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.ge\_}\sx`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.eq}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.ne}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.lt}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.gt}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.le}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.ge}`

* New conversion :ref:`vector instructions <syntax-instr-vec>`:

- :math:`\K{i32x4.trunc\_sat\_f32x4\_}\sx`
- :math:`\K{i32x4.trunc\_sat\_f64x2\_}\sx\K{\_zero}`
- :math:`\K{f32x4.convert\_i32x4\_}\sx`
- :math:`\K{f32x4.demote\_f64x2\_zero}`
- :math:`\K{f64x2.convert\_low\_i32x4\_}\sx`
- :math:`\K{f64x2.promote\_low\_f32x4}`

* New lane access :ref:`vector instructions <syntax-instr-vec>`:

- :math:`\K{i}\!N\!\K{x}\!M\!\K{.extract\_lane\_}\sx^?`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.replace\_lane}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.extract\_lane}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.replace\_lane}`

* New lane splitting/combining :ref:`vector instructions <syntax-instr-vec>`:

- :math:`\K{i}\!N\!\K{x}\!M\!\K{.extend\_}\half\K{\_i}\!N'\!\K{x}\!M'\!\K{\_}\sx`
- :math:`\K{i8x16.narrow\_i16x8\_}\sx`
- :math:`\K{i16x8.narrow\_i32x4\_}\sx`

* New byte reordering :ref:`vector instructions <syntax-instr-vec>`:

- :math:`\K{i8x16.shuffle}`
- :math:`\K{i8x16.swizzle}`

* New injection/projection :ref:`vector instructions <syntax-instr-vec>`:

- :math:`\K{i}\!N\!\K{x}\!M\!\K{.splat}`
- :math:`\K{f}\!N\!\K{x}\!M\!\K{.splat}`
- :math:`\K{i}\!N\!\K{x}\!M\!\K{.bitmask}`


.. [#proposal-signext]
Expand Down

0 comments on commit 670ae7e

Please sign in to comment.