From 670ae7e9ade1caea4bc242d8adb4701b60dc88d9 Mon Sep 17 00:00:00 2001 From: Andreas Rossberg Date: Sat, 21 Sep 2024 10:49:49 +0200 Subject: [PATCH] [spec] Tweak format of changes list --- document/core/appendix/changes.rst | 207 +++++++++++++++++++++++------ 1 file changed, 170 insertions(+), 37 deletions(-) diff --git a/document/core/appendix/changes.rst b/document/core/appendix/changes.rst index 339cb25f9d..0e569e82ac 100644 --- a/document/core/appendix/changes.rst +++ b/document/core/appendix/changes.rst @@ -17,7 +17,9 @@ Sign extension instructions Added new numeric instructions for performing sign extension within integer representations [#proposal-signext]_. -* New :ref:`numeric instructions `: :math:`\K{i}\X{nn}\K{.}\EXTEND\X{N}\K{\_s}` +* New :ref:`numeric instructions `: + + - :math:`\K{i}\X{nn}\K{.}\EXTEND\X{N}\K{\_s}` .. index:: instruction, trap, floating-point, integer @@ -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 `: :math:`\K{i}\X{nn}\K{.}\TRUNC\K{\_sat\_f}\X{mm}\K{\_}\sx` +* New :ref:`numeric instructions `: + + - :math:`\K{i}\X{nn}\K{.}\TRUNC\K{\_sat\_f}\X{mm}\K{\_}\sx` .. index:: block, function, value type, result type @@ -49,11 +53,20 @@ Reference types Added |FUNCREF| and |EXTERNREF| as new value types and respective instructions [#proposal-reftype]_. -* New :ref:`value types `: :ref:`reference types ` |FUNCREF| and |EXTERNREF| +* New :ref:`reference ` :ref:`value types `: + + - |FUNCREF| + - |EXTERNREF| -* New :ref:`reference instructions `: |REFNULL|, |REFFUNC|, |REFISNULL| +* New :ref:`reference instructions `: -* Enrich :ref:`parametric instruction `: |SELECT| with optional type immediate + - |REFNULL| + - |REFFUNC| + - |REFISNULL| + +* Enrich :ref:`parametric instruction `: + + - |SELECT| with optional type immediate * New :ref:`declarative ` form of :ref:`element segment ` @@ -67,7 +80,12 @@ Added instructions to directly access and modify tables [#proposal-reftype]_. * :ref:`Table types ` allow any :ref:`reference type ` as element type -* New :ref:`table instructions `: |TABLEGET|, |TABLESET|, |TABLESIZE|, |TABLEGROW| +* New :ref:`table instructions `: + + - |TABLEGET| + - |TABLESET| + - |TABLESIZE| + - |TABLEGROW| .. index:: table, instruction, table index, element segment @@ -77,9 +95,19 @@ Multiple tables Added the ability to use multiple tables per module [#proposal-reftype]_. -* :ref:`Modules ` may :ref:`define `, :ref:`import `, and :ref:`export ` multiple tables +* :ref:`Modules ` may -* :ref:`Table instructions ` take a :ref:`table index ` immediate: |TABLEGET|, |TABLESET|, |TABLESIZE|, |TABLEGROW|, |CALLINDIRECT| + - :ref:`define ` multiple tables + - :ref:`import ` multiple tables + - :ref:`export ` multiple tables + +* :ref:`Table instructions ` take a :ref:`table index ` immediate: + + - |TABLEGET| + - |TABLESET| + - |TABLESIZE| + - |TABLEGROW| + - |CALLINDIRECT| * :ref:`Element segments ` take a :ref:`table index ` @@ -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 `: |MEMORYFILL|, |MEMORYINIT|, |MEMORYCOPY|, |DATADROP| +* New :ref:`memory instructions `: + + - |MEMORYFILL| + - |MEMORYINIT| + - |MEMORYCOPY| + - |DATADROP| -* New :ref:`table instructions `: |TABLEFILL|, |TABLEINIT|, |TABLECOPY|, |ELEMDROP| +* New :ref:`table instructions `: + + - |TABLEFILL| + - |TABLEINIT| + - |TABLECOPY| + - |ELEMDROP| * New :ref:`passive ` form of :ref:`data segment ` @@ -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 `: |V128| - -* New :ref:`memory instructions `: :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 `: :math:`\K{v128.}\VCONST` - -* New unary :ref:`vector instructions `: :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 `: :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 `: :math:`\K{v128.bitselect}` - -* New test :ref:`vector instructions `: :math:`\K{v128.any\_true}`, :math:`\K{i}\!N\!\K{x}\!M\!\K{.all\_true}` - -* New relational :ref:`vector instructions `: :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 `::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 `: :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 `: :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 `: :math:`\K{i8x16.shuffle}`, :math:`\K{i8x16.swizzle}` - -* New injection/projection :ref:`vector instructions `: :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 `: + + - |V128| + +* New :ref:`memory instructions `: + + - :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 `: + + - :math:`\K{v128.}\VCONST` + +* New unary :ref:`vector instructions `: + + - :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 `: + + - :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 `: + + - :math:`\K{v128.bitselect}` + +* New test :ref:`vector instructions `: + + - :math:`\K{v128.any\_true}` + - :math:`\K{i}\!N\!\K{x}\!M\!\K{.all\_true}` + +* New relational :ref:`vector instructions `: + + - :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 `: + + - :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 `: + + - :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 `: + + - :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 `: + + - :math:`\K{i8x16.shuffle}` + - :math:`\K{i8x16.swizzle}` + +* New injection/projection :ref:`vector instructions `: + + - :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]