WebGL Tutorial
and more

Numeric Instructions

撰写时间:2025-01-20

修订时间:2025-01-24

数值类型

Wasm数值类型 (number types) 只有4种:

numtype ::= i32 | i64 | f32 | f64

其中前缀i表示integer,即整数;前缀f表示floating-point,即浮点数。

整数是否有符号,不由该数据类型来指定,但可以通过调用该数据类型相应的有符号指令或无符号指令来指定。

使用|t|来表示一个数值类型的位域 (bit width,也称位宽),因此,上面各个数值类型的位域分别为:

|i32| = |f32| = 32 |i64| = |f64| = 64

32位为4个字节,64位为8个字节。

值域

整数的值域公式如下:

\[ \begin{align} _uN &::= 0|1| ... | 2^{N}-1 \tag{unsigned} \\ _sN &::= -2^{N-1} | ... |-1|0|1| ... | 2^{N-1}-1 \tag{signed} \\ _iN &::= _uN \tag{uninterpreted} \end{align} \]

具体值域如下:

const { DOMUtils } = await import('/js/esm/DOMUtils.js'); let ths = ['位域', '符号', '最小值', '最大值']; let cells = [ [['32 bits', 2], 'unsigned', 0, Math.pow(2, 32) - 1], ['signed', -Math.pow(2, 31), Math.pow(2, 31) - 1], [['64 bits', 2], 'unsigned', 0, Math.pow(2, 64) - 1], ['signed', -Math.pow(2, 63), Math.pow(2, 63) - 1], ]; let str = DOMUtils.GenTableStr(ths, cells); pc.log('%o', str);

数值指令总表

所有数值指令如下:

nn, mm ::= 32 | 64 sx ::= u | s instr ::= inn.const unn | fnn.const fnn | inn.iunop | fnn.funop | inn.ibinop | fnn.fbinop | inn.itestop | inn.irelop | fnn.frelop | inn.extend8_s | inn.extend16_s | i64.extend32_s | i32.wrap_i64 | i64.exend_i32_sx | inn.trunc_fmm_sx | inn.trunc_sat_fmm_sx | f32.demote_f64 | f64.promote_f32 | fnn.convert_imm_sx | inn.reinterpret_fnn | fnn.reinterpret_inn | ... iunop ::= clz | ctz | popcnt ibinop ::= add | sub | mul | div_sx | rem_sx | and | or | xor | shl | shr_sx | rotl | rotr funop ::= abs | neg | sqrt | ceil | floor | trunc | nearest fbinop ::= add | sub | mul | div | min | max | copysign itestop ::= eqz irelop ::= eq | ne | lt_sx | gt_sx | le_sx | ge_sx frelop ::= eq | ne | lt | gt | le | ge

在表中,nnmm的用法如下:

  1. nnmm均可指代32位或64位的数据类型
  2. 指令名称中若只出现一个数据类型,使用nn来表示
  3. 指令名称中若同时出现两个数据类型时:
    • 如果后面的数据类型须与前面的一致,指令名称后面的数据类型使用nn来表示
    • 如果后面的数据类型无须与前面的一致,指令名称后面的数据类型使用mm来表示

参考资源

Main

  1. W3C version (single page)
  2. Doc version (webassembly.org)

Number

  1. Integers
  2. Number Types
  3. Numeric Instructions
  4. Numerics
  5. WebAssembly Numeric Instructions (MDN)

MathJax

  1. MathJax-demos-web
  2. Tex input, HTML output test
  3. MathML input, HTML output test
  4. TEX Commands Available in MathJax