指令¶
这些类型描述了指令弹出的具有操作数类型
注意
例如,指令
类型推导扩展到指令序列
对于某些指令,类型规则没有完全约束类型,因此允许多种类型。这样的指令称为多态指令。可以区分两种多态性
在这两种情况下,只要满足程序周围部分施加的约束,就可以任意选择不受约束的类型或类型序列。
注意
例如,
和
都是有效的,其中
通过为
是无效的,因为没有可以为
附录 描述了一种类型检查算法,该算法有效地实现了此处给定规则规定的指令序列验证。
数值指令¶
¶
该指令对于类型
是有效的。
¶
该指令对于类型
是有效的。
¶
该指令对于类型
是有效的。
¶
该指令对于类型
是有效的。
¶
该指令对于类型
是有效的。
¶
该指令对于类型
是有效的。
引用指令¶
¶
该指令对于类型
是有效的。
注意
在 WebAssembly 的未来版本中,可能存在不允许空引用的引用类型。
¶
该指令对于类型
是有效的,其中 为任何引用类型。
¶
上下文必须定义函数
。函数索引
必须包含在 中。该指令的类型有效,为
。
向量指令¶
向量指令可以带前缀来描述操作数的形状。打包数值类型,
以下辅助函数表示向量形状的车道数,即其维度
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
。
¶
对于所有
,在 中, 必须小于 。该指令的类型有效,为
。
¶
令
为 。该指令的类型有效,为
。
¶
车道索引
必须小于 。该指令的类型有效,为
。
¶
车道索引
必须小于 。令
为 。该指令的类型有效,为
。
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
。
参数化指令¶
¶
该指令对于任何操作数类型
,其类型有效值为 。
注意
未带注释的
¶
注意
在 WebAssembly 的未来版本中,
变量指令¶
¶
局部变量
必须在上下文中定义。令
为值类型 。则该指令类型有效值为
。
¶
局部变量
必须在上下文中定义。令
为值类型 。则该指令类型有效值为
。
¶
局部变量
必须在上下文中定义。令
为值类型 。则该指令类型有效值为
。
¶
全局变量
必须在上下文中定义。令
为全局类型 。则该指令类型有效值为
。
¶
全局变量
必须在上下文中定义。令
为全局类型 。可变性
必须为 。则该指令类型有效值为
。
表指令¶
¶
表
必须在上下文中定义。令
为表类型 。则该指令类型有效值为
。
¶
表
必须在上下文中定义。令
为表类型 。则该指令的类型为
时有效。
¶
表
必须在上下文中定义。则该指令的类型为
时有效。
¶
表
必须在上下文中定义。令
为表类型 。则该指令的类型为
时有效。
¶
表
必须在上下文中定义。令
为表类型 。则该指令的类型为
时有效。
¶
¶
¶
元素段
必须在上下文中定义。则该指令的类型为
时有效。
内存指令¶
¶
内存
必须在上下文中定义。对齐
不能大于 的 位宽 除以 。则该指令类型有效值为
。
¶
内存
必须在上下文中定义。对齐
不能大于 。则该指令类型有效值为
。
¶
内存
必须在上下文中定义。对齐
不能大于 的 位宽 除以 。则该指令的类型为
时有效。
¶
内存
必须在上下文中定义。对齐
不能大于 。则该指令的类型为
时有效。
¶
内存
必须在上下文中定义。对齐
不能大于 。则该指令的类型为
时有效。
¶
内存
必须在上下文中定义。对齐
不能大于 。则该指令的类型为
时有效。
¶
内存
必须在上下文中定义。对齐
不能大于 。则该指令的类型为
时有效。
¶
通道索引
必须小于 。内存
必须在上下文中定义。对齐
不能大于 。然后,该指令的类型有效,为
。
¶
通道索引
必须小于 。内存
必须在上下文中定义。对齐
不能大于 。然后,该指令的类型有效,为
。
¶
内存
必须在上下文中定义。则该指令的类型为
时有效。
¶
内存
必须在上下文中定义。然后,该指令的类型有效,为
。
¶
内存
必须在上下文中定义。则该指令的类型为
时有效。
¶
内存
必须在上下文中定义。则该指令的类型为
时有效。
¶
内存
必须在上下文中定义。数据段
必须在上下文中定义。则该指令的类型为
时有效。
¶
数据段
必须在上下文中定义。则该指令的类型为
时有效。
控制指令¶
¶
该指令的类型有效,为
。
¶
该指令的类型有效,为
,对于任何操作数类型序列 operand types 和 。
注意
¶
块类型必须作为某个函数类型 function type
有效。令
与 为相同的上下文 context,但将结果类型 result type 添加到 向量的前端。在上下文
下,指令序列 必须 有效,其类型为 。然后,复合指令的类型有效,为
。
注意
符号
¶
块类型必须作为某个函数类型 function type
有效。令
与 为相同的上下文 context,但将结果类型 result type 添加到 向量的前端。在上下文
下,指令序列 必须 有效,其类型为 。然后,复合指令的类型有效,为
。
注意
符号
¶
块类型必须作为某个函数类型 function type
有效。令
与 为相同的上下文 context,但将结果类型 result type 添加到 向量的前端。在上下文
下,指令序列 必须 有效,其类型为 。在上下文
下,指令序列 必须 有效,其类型为 。然后,复合指令的类型有效,为
。
注意
符号
¶
标签
必须在上下文中定义。令
为 结果类型 。则该指令对于任何操作数类型序列
和 ,其类型有效,为 。
¶
标签
必须在上下文中定义。令
为 结果类型 。则该指令类型有效,为
。
注意
上下文
¶
标签
必须在上下文中定义。对于
中的每个标签 ,标签 必须在上下文中定义。必须存在一个 操作数类型 序列
,使得则该指令对于任何操作数类型序列
和 ,其类型有效,为 。
¶
返回类型
在上下文中不能缺失。令
为 的 结果类型。则该指令对于任何操作数类型序列
和 ,其类型有效,为 。
¶
上下文必须定义函数
。则该指令类型有效,为
。
¶
指令序列¶
指令序列的类型化是递归定义的。
空指令序列: ¶
空指令序列对于任何 操作数类型 序列
,其类型有效,为 。
非空指令序列: ¶
指令序列
必须对于某些 操作数类型 序列 和 ,其类型有效,为 。指令
必须对于某些 操作数类型 序列 和 ,其类型有效,为 。必须存在一个 操作数类型 序列
,使得 ,其中类型序列 与 一样长。则组合后的指令序列类型有效,为
。
表达式¶
表达式
¶
常量表达式¶
在常量表达式
中, 中的所有指令都必须是常量。常量指令
必须是形式为
,或形式为
,或形式为
,或形式为
,在这种情况下, 必须是形式为 的 全局类型。