Instructions

Instructions are encoded by opcodes. Each opcode is represented by a single byte, and is followed by the instruction’s immediate arguments, where present. The only exception are structured control instructions, which consist of several opcodes bracketing their nested instruction sequences.

Note

Gaps in the byte code ranges for encoding instructions are reserved for future extensions.

Control Instructions

Control instructions have varying encodings. For structured instructions, the instruction sequences forming nested blocks are terminated with explicit opcodes for \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\) and \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}\).

Block types are encoded in special compressed form, by either the byte \(\def\mathdef760#1{\mathtt{0x#1}}\mathdef760{40}\) indicating the empty type, as a single value type, or as a type index encoded as a positive signed integer.

\[\begin{split}\begin{array}{llcllll} \def\mathdef723#1{{}}\mathdef723{block type} & \href{../binary/instructions.html#binary-blocktype}{\mathtt{blocktype}} &::=& \def\mathdef761#1{\mathtt{0x#1}}\mathdef761{40} &\Rightarrow& \epsilon \\ &&|& t{:}\href{../binary/types.html#binary-valtype}{\mathtt{valtype}} &\Rightarrow& t \\ &&|& x{:}\href{../binary/values.html#binary-int}{\def\mathdef733#1{{\mathtt{s}#1}}\mathdef733{\mathtt{33}}} &\Rightarrow& x & (\mathrel{\mbox{if}} x \geq 0) \\ \def\mathdef723#1{{}}\mathdef723{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \def\mathdef762#1{\mathtt{0x#1}}\mathdef762{00} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}} \\ &&|& \def\mathdef763#1{\mathtt{0x#1}}\mathdef763{01} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{nop}} \\ &&|& \def\mathdef764#1{\mathtt{0x#1}}\mathdef764{02}~~\mathit{bt}{:}\href{../binary/instructions.html#binary-blocktype}{\mathtt{blocktype}}~~(\mathit{in}{:}\href{../binary/instructions.html#binary-instr}{\mathtt{instr}})^\ast~~\def\mathdef765#1{\mathtt{0x#1}}\mathdef765{0B} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}~\mathit{bt}~\mathit{in}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ &&|& \def\mathdef766#1{\mathtt{0x#1}}\mathdef766{03}~~\mathit{bt}{:}\href{../binary/instructions.html#binary-blocktype}{\mathtt{blocktype}}~~(\mathit{in}{:}\href{../binary/instructions.html#binary-instr}{\mathtt{instr}})^\ast~~\def\mathdef767#1{\mathtt{0x#1}}\mathdef767{0B} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{loop}}~\mathit{bt}~\mathit{in}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ &&|& \def\mathdef768#1{\mathtt{0x#1}}\mathdef768{04}~~\mathit{bt}{:}\href{../binary/instructions.html#binary-blocktype}{\mathtt{blocktype}}~~(\mathit{in}{:}\href{../binary/instructions.html#binary-instr}{\mathtt{instr}})^\ast~~\def\mathdef769#1{\mathtt{0x#1}}\mathdef769{0B} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}~\mathit{bt}~\mathit{in}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}~\epsilon~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ &&|& \def\mathdef770#1{\mathtt{0x#1}}\mathdef770{04}~~\mathit{bt}{:}\href{../binary/instructions.html#binary-blocktype}{\mathtt{blocktype}}~~(\mathit{in}_1{:}\href{../binary/instructions.html#binary-instr}{\mathtt{instr}})^\ast~~ \def\mathdef771#1{\mathtt{0x#1}}\mathdef771{05}~~(\mathit{in}_2{:}\href{../binary/instructions.html#binary-instr}{\mathtt{instr}})^\ast~~\def\mathdef772#1{\mathtt{0x#1}}\mathdef772{0B} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}~\mathit{bt}~\mathit{in}_1^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}~\mathit{in}_2^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ &&|& \def\mathdef773#1{\mathtt{0x#1}}\mathdef773{0C}~~l{:}\href{../binary/modules.html#binary-labelidx}{\mathtt{labelidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~l \\ &&|& \def\mathdef774#1{\mathtt{0x#1}}\mathdef774{0D}~~l{:}\href{../binary/modules.html#binary-labelidx}{\mathtt{labelidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_if}}~l \\ &&|& \def\mathdef775#1{\mathtt{0x#1}}\mathdef775{0E}~~l^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-labelidx}{\mathtt{labelidx}})~~l_N{:}\href{../binary/modules.html#binary-labelidx}{\mathtt{labelidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_table}}~l^\ast~l_N \\ &&|& \def\mathdef776#1{\mathtt{0x#1}}\mathdef776{0F} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{return}} \\ &&|& \def\mathdef777#1{\mathtt{0x#1}}\mathdef777{10}~~x{:}\href{../binary/modules.html#binary-funcidx}{\mathtt{funcidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call}}~x \\ &&|& \def\mathdef778#1{\mathtt{0x#1}}\mathdef778{11}~~y{:}\href{../binary/modules.html#binary-typeidx}{\mathtt{typeidx}}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call\_indirect}}~x~y \\ \end{array}\end{split}\]

Note

The \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}\) opcode \(\def\mathdef779#1{\mathtt{0x#1}}\mathdef779{05}\) in the encoding of an \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}\) instruction can be omitted if the following instruction sequence is empty.

Unlike any other occurrence, the type index in a block type is encoded as a positive signed integer, so that its signed LEB128 bit pattern cannot collide with the encoding of value types or the special code \(\def\mathdef780#1{\mathtt{0x#1}}\mathdef780{40}\), which correspond to the LEB128 encoding of negative integers. To avoid any loss in the range of allowed indices, it is treated as a 33 bit signed integer.

In future versions of WebAssembly, the zero byte occurring in the encoding of the \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call\_indirect}}\) instruction may be used to index additional tables.

Reference Instructions

Reference instructions are represented by single byte codes.

\[\begin{split}\begin{array}{llclll} \def\mathdef723#1{{}}\mathdef723{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\ &&|& \def\mathdef781#1{\mathtt{0x#1}}\mathdef781{D0}~~t{:}\href{../binary/types.html#binary-reftype}{\mathtt{reftype}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t \\ &&|& \def\mathdef782#1{\mathtt{0x#1}}\mathdef782{D1} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}is\_null}} \\ &&|& \def\mathdef783#1{\mathtt{0x#1}}\mathdef783{D2}~~x{:}\href{../binary/modules.html#binary-funcidx}{\mathtt{funcidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}~x \\ \end{array}\end{split}\]

Note

These opcode assignments are preliminary.

Parametric Instructions

Parametric instructions are represented by single byte codes, possibly followed by a type annotation.

\[\begin{split}\begin{array}{llclll} \def\mathdef723#1{{}}\mathdef723{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\ &&|& \def\mathdef784#1{\mathtt{0x#1}}\mathdef784{1A} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{drop}} \\ &&|& \def\mathdef785#1{\mathtt{0x#1}}\mathdef785{1B} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}} \\ &&|& \def\mathdef786#1{\mathtt{0x#1}}\mathdef786{1C}~~t^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/types.html#binary-valtype}{\mathtt{valtype}}) &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}~t^\ast \\ \end{array}\end{split}\]

Variable Instructions

Variable instructions are represented by byte codes followed by the encoding of the respective index.

\[\begin{split}\begin{array}{llclll} \def\mathdef723#1{{}}\mathdef723{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\ &&|& \def\mathdef787#1{\mathtt{0x#1}}\mathdef787{20}~~x{:}\href{../binary/modules.html#binary-localidx}{\mathtt{localidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.get}}~x \\ &&|& \def\mathdef788#1{\mathtt{0x#1}}\mathdef788{21}~~x{:}\href{../binary/modules.html#binary-localidx}{\mathtt{localidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.set}}~x \\ &&|& \def\mathdef789#1{\mathtt{0x#1}}\mathdef789{22}~~x{:}\href{../binary/modules.html#binary-localidx}{\mathtt{localidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.tee}}~x \\ &&|& \def\mathdef790#1{\mathtt{0x#1}}\mathdef790{23}~~x{:}\href{../binary/modules.html#binary-globalidx}{\mathtt{globalidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.get}}~x \\ &&|& \def\mathdef791#1{\mathtt{0x#1}}\mathdef791{24}~~x{:}\href{../binary/modules.html#binary-globalidx}{\mathtt{globalidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.set}}~x \\ \end{array}\end{split}\]

Table Instructions

Table instructions are represented by either single byte or two byte codes.

\[\begin{split}\begin{array}{llclll} \def\mathdef723#1{{}}\mathdef723{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\ &&|& \def\mathdef792#1{\mathtt{0x#1}}\mathdef792{25}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}~x \\ &&|& \def\mathdef793#1{\mathtt{0x#1}}\mathdef793{26}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x \\ &&|& \def\mathdef794#1{\mathtt{0x#1}}\mathdef794{FC}~~12{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}}~~y{:}\href{../binary/modules.html#binary-elemidx}{\mathtt{elemidx}}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}~x~y \\ &&|& \def\mathdef795#1{\mathtt{0x#1}}\mathdef795{FC}~~13{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}}~~x{:}\href{../binary/modules.html#binary-elemidx}{\mathtt{elemidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{elem.drop}}~x \\ &&|& \def\mathdef796#1{\mathtt{0x#1}}\mathdef796{FC}~~14{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}}~~y{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}~x~y \\ &&|& \def\mathdef797#1{\mathtt{0x#1}}\mathdef797{FC}~~15{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.grow}}~x \\ &&|& \def\mathdef798#1{\mathtt{0x#1}}\mathdef798{FC}~~16{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.size}}~x \\ &&|& \def\mathdef799#1{\mathtt{0x#1}}\mathdef799{FC}~~17{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.fill}}~x \\ \end{array}\end{split}\]

Memory Instructions

Each variant of memory instruction is encoded with a different byte code. Loads and stores are followed by the encoding of their \(\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\) immediate.

\[\begin{split}\begin{array}{llclll} \def\mathdef723#1{{}}\mathdef723{memory argument} & \href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &::=& a{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}}~~o{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}} &\Rightarrow& \{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~a,~\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~o \} \\ \def\mathdef723#1{{}}\mathdef723{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\ &&|& \def\mathdef800#1{\mathtt{0x#1}}\mathdef800{28}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~m \\ &&|& \def\mathdef801#1{\mathtt{0x#1}}\mathdef801{29}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~m \\ &&|& \def\mathdef802#1{\mathtt{0x#1}}\mathdef802{2A}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~m \\ &&|& \def\mathdef803#1{\mathtt{0x#1}}\mathdef803{2B}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~m \\ &&|& \def\mathdef804#1{\mathtt{0x#1}}\mathdef804{2C}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_s}~m \\ &&|& \def\mathdef805#1{\mathtt{0x#1}}\mathdef805{2D}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_u}~m \\ &&|& \def\mathdef806#1{\mathtt{0x#1}}\mathdef806{2E}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_s}~m \\ &&|& \def\mathdef807#1{\mathtt{0x#1}}\mathdef807{2F}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_u}~m \\ &&|& \def\mathdef808#1{\mathtt{0x#1}}\mathdef808{30}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_s}~m \\ &&|& \def\mathdef809#1{\mathtt{0x#1}}\mathdef809{31}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_u}~m \\ &&|& \def\mathdef810#1{\mathtt{0x#1}}\mathdef810{32}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_s}~m \\ &&|& \def\mathdef811#1{\mathtt{0x#1}}\mathdef811{33}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_u}~m \\ &&|& \def\mathdef812#1{\mathtt{0x#1}}\mathdef812{34}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_s}~m \\ &&|& \def\mathdef813#1{\mathtt{0x#1}}\mathdef813{35}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_u}~m \\ &&|& \def\mathdef814#1{\mathtt{0x#1}}\mathdef814{36}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~m \\ &&|& \def\mathdef815#1{\mathtt{0x#1}}\mathdef815{37}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~m \\ &&|& \def\mathdef816#1{\mathtt{0x#1}}\mathdef816{38}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~m \\ &&|& \def\mathdef817#1{\mathtt{0x#1}}\mathdef817{39}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~m \\ &&|& \def\mathdef818#1{\mathtt{0x#1}}\mathdef818{3A}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~m \\ &&|& \def\mathdef819#1{\mathtt{0x#1}}\mathdef819{3B}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{16}~m \\ &&|& \def\mathdef820#1{\mathtt{0x#1}}\mathdef820{3C}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~m \\ &&|& \def\mathdef821#1{\mathtt{0x#1}}\mathdef821{3D}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{16}~m \\ &&|& \def\mathdef822#1{\mathtt{0x#1}}\mathdef822{3E}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{32}~m \\ &&|& \def\mathdef823#1{\mathtt{0x#1}}\mathdef823{3F}~~\def\mathdef824#1{\mathtt{0x#1}}\mathdef824{00} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.size}} \\ &&|& \def\mathdef825#1{\mathtt{0x#1}}\mathdef825{40}~~\def\mathdef826#1{\mathtt{0x#1}}\mathdef826{00} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.grow}} \\ &&|& \def\mathdef827#1{\mathtt{0x#1}}\mathdef827{FC}~~8{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}}~~x{:}\href{../binary/modules.html#binary-dataidx}{\mathtt{dataidx}}~\def\mathdef828#1{\mathtt{0x#1}}\mathdef828{00} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~x \\ &&|& \def\mathdef829#1{\mathtt{0x#1}}\mathdef829{FC}~~9{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}}~~x{:}\href{../binary/modules.html#binary-dataidx}{\mathtt{dataidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{data.drop}}~x \\ &&|& \def\mathdef830#1{\mathtt{0x#1}}\mathdef830{FC}~~10{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}}~~\def\mathdef831#1{\mathtt{0x#1}}\mathdef831{00}~~\def\mathdef832#1{\mathtt{0x#1}}\mathdef832{00} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}} \\ &&|& \def\mathdef833#1{\mathtt{0x#1}}\mathdef833{FC}~~11{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}}~~\def\mathdef834#1{\mathtt{0x#1}}\mathdef834{00} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}} \\ \end{array}\end{split}\]

Note

In future versions of WebAssembly, the additional zero bytes occurring in the encoding of the \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.size}}\), \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.grow}}\), \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}}\), and \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}}\) instructions may be used to index additional memories.

Numeric Instructions

All variants of numeric instructions are represented by separate byte codes.

The \(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}\) instructions are followed by the respective literal.

\[\begin{split}\begin{array}{llclll} \def\mathdef723#1{{}}\mathdef723{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\&&|& \def\mathdef835#1{\mathtt{0x#1}}\mathdef835{41}~~n{:}\href{../binary/values.html#binary-int}{\def\mathdef736#1{{\mathtt{i}#1}}\mathdef736{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n \\ &&|& \def\mathdef836#1{\mathtt{0x#1}}\mathdef836{42}~~n{:}\href{../binary/values.html#binary-int}{\def\mathdef737#1{{\mathtt{i}#1}}\mathdef737{\mathtt{64}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n \\ &&|& \def\mathdef837#1{\mathtt{0x#1}}\mathdef837{43}~~z{:}\href{../binary/values.html#binary-float}{\def\mathdef739#1{{\mathtt{f}#1}}\mathdef739{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~z \\ &&|& \def\mathdef838#1{\mathtt{0x#1}}\mathdef838{44}~~z{:}\href{../binary/values.html#binary-float}{\def\mathdef740#1{{\mathtt{f}#1}}\mathdef740{\mathtt{64}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~z \\ \end{array}\end{split}\]

All other numeric instructions are plain opcodes without any immediates.

\[\begin{split}\begin{array}{llclll} \def\mathdef723#1{{}}\mathdef723{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots && \phantom{thisshouldbeenough} \\&&|& \def\mathdef839#1{\mathtt{0x#1}}\mathdef839{45} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eqz}} \\ &&|& \def\mathdef840#1{\mathtt{0x#1}}\mathdef840{46} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}} \\ &&|& \def\mathdef841#1{\mathtt{0x#1}}\mathdef841{47} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}} \\ &&|& \def\mathdef842#1{\mathtt{0x#1}}\mathdef842{48} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_s} \\ &&|& \def\mathdef843#1{\mathtt{0x#1}}\mathdef843{49} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_u} \\ &&|& \def\mathdef844#1{\mathtt{0x#1}}\mathdef844{4A} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_s} \\ &&|& \def\mathdef845#1{\mathtt{0x#1}}\mathdef845{4B} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_u} \\ &&|& \def\mathdef846#1{\mathtt{0x#1}}\mathdef846{4C} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_s} \\ &&|& \def\mathdef847#1{\mathtt{0x#1}}\mathdef847{4D} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_u} \\ &&|& \def\mathdef848#1{\mathtt{0x#1}}\mathdef848{4E} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_s} \\ &&|& \def\mathdef849#1{\mathtt{0x#1}}\mathdef849{4F} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_u} \\ \end{array}\end{split}\]
\[\begin{split}\begin{array}{llclll} \phantom{\def\mathdef723#1{{}}\mathdef723{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& \def\mathdef850#1{\mathtt{0x#1}}\mathdef850{50} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eqz}} \\ &&|& \def\mathdef851#1{\mathtt{0x#1}}\mathdef851{51} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}} \\ &&|& \def\mathdef852#1{\mathtt{0x#1}}\mathdef852{52} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}} \\ &&|& \def\mathdef853#1{\mathtt{0x#1}}\mathdef853{53} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_s} \\ &&|& \def\mathdef854#1{\mathtt{0x#1}}\mathdef854{54} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_u} \\ &&|& \def\mathdef855#1{\mathtt{0x#1}}\mathdef855{55} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_s} \\ &&|& \def\mathdef856#1{\mathtt{0x#1}}\mathdef856{56} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_u} \\ &&|& \def\mathdef857#1{\mathtt{0x#1}}\mathdef857{57} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_s} \\ &&|& \def\mathdef858#1{\mathtt{0x#1}}\mathdef858{58} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_u} \\ &&|& \def\mathdef859#1{\mathtt{0x#1}}\mathdef859{59} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_s} \\ &&|& \def\mathdef860#1{\mathtt{0x#1}}\mathdef860{5A} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_u} \\ \end{array}\end{split}\]
\[\begin{split}\begin{array}{llclll} \phantom{\def\mathdef723#1{{}}\mathdef723{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& \def\mathdef861#1{\mathtt{0x#1}}\mathdef861{5B} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}} \\ &&|& \def\mathdef862#1{\mathtt{0x#1}}\mathdef862{5C} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}} \\ &&|& \def\mathdef863#1{\mathtt{0x#1}}\mathdef863{5D} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}} \\ &&|& \def\mathdef864#1{\mathtt{0x#1}}\mathdef864{5E} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}} \\ &&|& \def\mathdef865#1{\mathtt{0x#1}}\mathdef865{5F} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}} \\ &&|& \def\mathdef866#1{\mathtt{0x#1}}\mathdef866{60} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}} \\ \end{array}\end{split}\]
\[\begin{split}\begin{array}{llclll} \phantom{\def\mathdef723#1{{}}\mathdef723{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& \def\mathdef867#1{\mathtt{0x#1}}\mathdef867{61} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}} \\ &&|& \def\mathdef868#1{\mathtt{0x#1}}\mathdef868{62} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}} \\ &&|& \def\mathdef869#1{\mathtt{0x#1}}\mathdef869{63} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}} \\ &&|& \def\mathdef870#1{\mathtt{0x#1}}\mathdef870{64} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}} \\ &&|& \def\mathdef871#1{\mathtt{0x#1}}\mathdef871{65} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}} \\ &&|& \def\mathdef872#1{\mathtt{0x#1}}\mathdef872{66} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}} \\ \end{array}\end{split}\]
\[\begin{split}\begin{array}{llclll} \phantom{\def\mathdef723#1{{}}\mathdef723{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& \def\mathdef873#1{\mathtt{0x#1}}\mathdef873{67} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{clz}} \\ &&|& \def\mathdef874#1{\mathtt{0x#1}}\mathdef874{68} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ctz}} \\ &&|& \def\mathdef875#1{\mathtt{0x#1}}\mathdef875{69} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{popcnt}} \\ &&|& \def\mathdef876#1{\mathtt{0x#1}}\mathdef876{6A} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}} \\ &&|& \def\mathdef877#1{\mathtt{0x#1}}\mathdef877{6B} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}} \\ &&|& \def\mathdef878#1{\mathtt{0x#1}}\mathdef878{6C} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}} \\ &&|& \def\mathdef879#1{\mathtt{0x#1}}\mathdef879{6D} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_s} \\ &&|& \def\mathdef880#1{\mathtt{0x#1}}\mathdef880{6E} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_u} \\ &&|& \def\mathdef881#1{\mathtt{0x#1}}\mathdef881{6F} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_s} \\ &&|& \def\mathdef882#1{\mathtt{0x#1}}\mathdef882{70} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_u} \\ &&|& \def\mathdef883#1{\mathtt{0x#1}}\mathdef883{71} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{and}} \\ &&|& \def\mathdef884#1{\mathtt{0x#1}}\mathdef884{72} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{or}} \\ &&|& \def\mathdef885#1{\mathtt{0x#1}}\mathdef885{73} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{xor}} \\ &&|& \def\mathdef886#1{\mathtt{0x#1}}\mathdef886{74} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shl}} \\ &&|& \def\mathdef887#1{\mathtt{0x#1}}\mathdef887{75} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_s} \\ &&|& \def\mathdef888#1{\mathtt{0x#1}}\mathdef888{76} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_u} \\ &&|& \def\mathdef889#1{\mathtt{0x#1}}\mathdef889{77} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotl}} \\ &&|& \def\mathdef890#1{\mathtt{0x#1}}\mathdef890{78} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotr}} \\ \end{array}\end{split}\]
\[\begin{split}\begin{array}{llclll} \phantom{\def\mathdef723#1{{}}\mathdef723{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& \def\mathdef891#1{\mathtt{0x#1}}\mathdef891{79} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{clz}} \\ &&|& \def\mathdef892#1{\mathtt{0x#1}}\mathdef892{7A} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ctz}} \\ &&|& \def\mathdef893#1{\mathtt{0x#1}}\mathdef893{7B} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{popcnt}} \\ &&|& \def\mathdef894#1{\mathtt{0x#1}}\mathdef894{7C} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}} \\ &&|& \def\mathdef895#1{\mathtt{0x#1}}\mathdef895{7D} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}} \\ &&|& \def\mathdef896#1{\mathtt{0x#1}}\mathdef896{7E} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}} \\ &&|& \def\mathdef897#1{\mathtt{0x#1}}\mathdef897{7F} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_s} \\ &&|& \def\mathdef898#1{\mathtt{0x#1}}\mathdef898{80} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_u} \\ &&|& \def\mathdef899#1{\mathtt{0x#1}}\mathdef899{81} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_s} \\ &&|& \def\mathdef900#1{\mathtt{0x#1}}\mathdef900{82} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_u} \\ &&|& \def\mathdef901#1{\mathtt{0x#1}}\mathdef901{83} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{and}} \\ &&|& \def\mathdef902#1{\mathtt{0x#1}}\mathdef902{84} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{or}} \\ &&|& \def\mathdef903#1{\mathtt{0x#1}}\mathdef903{85} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{xor}} \\ &&|& \def\mathdef904#1{\mathtt{0x#1}}\mathdef904{86} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shl}} \\ &&|& \def\mathdef905#1{\mathtt{0x#1}}\mathdef905{87} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_s} \\ &&|& \def\mathdef906#1{\mathtt{0x#1}}\mathdef906{88} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_u} \\ &&|& \def\mathdef907#1{\mathtt{0x#1}}\mathdef907{89} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotl}} \\ &&|& \def\mathdef908#1{\mathtt{0x#1}}\mathdef908{8A} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotr}} \\ \end{array}\end{split}\]
\[\begin{split}\begin{array}{llclll} \phantom{\def\mathdef723#1{{}}\mathdef723{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& \def\mathdef909#1{\mathtt{0x#1}}\mathdef909{8B} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{abs}} \\ &&|& \def\mathdef910#1{\mathtt{0x#1}}\mathdef910{8C} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{neg}} \\ &&|& \def\mathdef911#1{\mathtt{0x#1}}\mathdef911{8D} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ceil}} \\ &&|& \def\mathdef912#1{\mathtt{0x#1}}\mathdef912{8E} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{floor}} \\ &&|& \def\mathdef913#1{\mathtt{0x#1}}\mathdef913{8F} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}} \\ &&|& \def\mathdef914#1{\mathtt{0x#1}}\mathdef914{90} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{nearest}} \\ &&|& \def\mathdef915#1{\mathtt{0x#1}}\mathdef915{91} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sqrt}} \\ &&|& \def\mathdef916#1{\mathtt{0x#1}}\mathdef916{92} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}} \\ &&|& \def\mathdef917#1{\mathtt{0x#1}}\mathdef917{93} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}} \\ &&|& \def\mathdef918#1{\mathtt{0x#1}}\mathdef918{94} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}} \\ &&|& \def\mathdef919#1{\mathtt{0x#1}}\mathdef919{95} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}} \\ &&|& \def\mathdef920#1{\mathtt{0x#1}}\mathdef920{96} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{min}} \\ &&|& \def\mathdef921#1{\mathtt{0x#1}}\mathdef921{97} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{max}} \\ &&|& \def\mathdef922#1{\mathtt{0x#1}}\mathdef922{98} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{copysign}} \\ \end{array}\end{split}\]
\[\begin{split}\begin{array}{llclll} \phantom{\def\mathdef723#1{{}}\mathdef723{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& \def\mathdef923#1{\mathtt{0x#1}}\mathdef923{99} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{abs}} \\ &&|& \def\mathdef924#1{\mathtt{0x#1}}\mathdef924{9A} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{neg}} \\ &&|& \def\mathdef925#1{\mathtt{0x#1}}\mathdef925{9B} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ceil}} \\ &&|& \def\mathdef926#1{\mathtt{0x#1}}\mathdef926{9C} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{floor}} \\ &&|& \def\mathdef927#1{\mathtt{0x#1}}\mathdef927{9D} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}} \\ &&|& \def\mathdef928#1{\mathtt{0x#1}}\mathdef928{9E} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{nearest}} \\ &&|& \def\mathdef929#1{\mathtt{0x#1}}\mathdef929{9F} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sqrt}} \\ &&|& \def\mathdef930#1{\mathtt{0x#1}}\mathdef930{A0} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}} \\ &&|& \def\mathdef931#1{\mathtt{0x#1}}\mathdef931{A1} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}} \\ &&|& \def\mathdef932#1{\mathtt{0x#1}}\mathdef932{A2} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}} \\ &&|& \def\mathdef933#1{\mathtt{0x#1}}\mathdef933{A3} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}} \\ &&|& \def\mathdef934#1{\mathtt{0x#1}}\mathdef934{A4} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{min}} \\ &&|& \def\mathdef935#1{\mathtt{0x#1}}\mathdef935{A5} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{max}} \\ &&|& \def\mathdef936#1{\mathtt{0x#1}}\mathdef936{A6} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{copysign}} \\ \end{array}\end{split}\]
\[\begin{split}\begin{array}{llclll} \phantom{\def\mathdef723#1{{}}\mathdef723{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& \def\mathdef937#1{\mathtt{0x#1}}\mathdef937{A7} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{wrap}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}} \\ &&|& \def\mathdef938#1{\mathtt{0x#1}}\mathdef938{A8} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s} \\ &&|& \def\mathdef939#1{\mathtt{0x#1}}\mathdef939{A9} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u} \\ &&|& \def\mathdef940#1{\mathtt{0x#1}}\mathdef940{AA} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s} \\ &&|& \def\mathdef941#1{\mathtt{0x#1}}\mathdef941{AB} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u} \\ &&|& \def\mathdef942#1{\mathtt{0x#1}}\mathdef942{AC} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_s} \\ &&|& \def\mathdef943#1{\mathtt{0x#1}}\mathdef943{AD} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_u} \\ &&|& \def\mathdef944#1{\mathtt{0x#1}}\mathdef944{AE} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s} \\ &&|& \def\mathdef945#1{\mathtt{0x#1}}\mathdef945{AF} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u} \\ &&|& \def\mathdef946#1{\mathtt{0x#1}}\mathdef946{B0} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s} \\ &&|& \def\mathdef947#1{\mathtt{0x#1}}\mathdef947{B1} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u} \\ &&|& \def\mathdef948#1{\mathtt{0x#1}}\mathdef948{B2} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_s} \\ &&|& \def\mathdef949#1{\mathtt{0x#1}}\mathdef949{B3} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_u} \\ &&|& \def\mathdef950#1{\mathtt{0x#1}}\mathdef950{B4} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_s} \\ &&|& \def\mathdef951#1{\mathtt{0x#1}}\mathdef951{B5} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_u} \\ &&|& \def\mathdef952#1{\mathtt{0x#1}}\mathdef952{B6} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{demote}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}} \\ &&|& \def\mathdef953#1{\mathtt{0x#1}}\mathdef953{B7} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_s} \\ &&|& \def\mathdef954#1{\mathtt{0x#1}}\mathdef954{B8} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_u} \\ &&|& \def\mathdef955#1{\mathtt{0x#1}}\mathdef955{B9} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_s} \\ &&|& \def\mathdef956#1{\mathtt{0x#1}}\mathdef956{BA} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_u} \\ &&|& \def\mathdef957#1{\mathtt{0x#1}}\mathdef957{BB} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{promote}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}} \\ &&|& \def\mathdef958#1{\mathtt{0x#1}}\mathdef958{BC} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}} \\ &&|& \def\mathdef959#1{\mathtt{0x#1}}\mathdef959{BD} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}} \\ &&|& \def\mathdef960#1{\mathtt{0x#1}}\mathdef960{BE} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}} \\ &&|& \def\mathdef961#1{\mathtt{0x#1}}\mathdef961{BF} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}} \\ \end{array}\end{split}\]
\[\begin{split}\begin{array}{llclll} \phantom{\def\mathdef723#1{{}}\mathdef723{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& \def\mathdef962#1{\mathtt{0x#1}}\mathdef962{C0} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{8\_s} \\ &&|& \def\mathdef963#1{\mathtt{0x#1}}\mathdef963{C1} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{16\_s} \\ &&|& \def\mathdef964#1{\mathtt{0x#1}}\mathdef964{C2} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{8\_s} \\ &&|& \def\mathdef965#1{\mathtt{0x#1}}\mathdef965{C3} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{16\_s} \\ &&|& \def\mathdef966#1{\mathtt{0x#1}}\mathdef966{C4} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{32\_s} \\ \end{array}\end{split}\]

The saturating truncation instructions all have a one byte prefix, whereas the actual opcode is encoded by a variable-length unsigned integer.

\[\begin{split}\begin{array}{llclll} \def\mathdef723#1{{}}\mathdef723{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots && \phantom{thisshouldbeenough} \\&&|& \def\mathdef967#1{\mathtt{0x#1}}\mathdef967{FC}~~0{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s} \\ &&|& \def\mathdef968#1{\mathtt{0x#1}}\mathdef968{FC}~~1{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u} \\ &&|& \def\mathdef969#1{\mathtt{0x#1}}\mathdef969{FC}~~2{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s} \\ &&|& \def\mathdef970#1{\mathtt{0x#1}}\mathdef970{FC}~~3{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u} \\ &&|& \def\mathdef971#1{\mathtt{0x#1}}\mathdef971{FC}~~4{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s} \\ &&|& \def\mathdef972#1{\mathtt{0x#1}}\mathdef972{FC}~~5{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u} \\ &&|& \def\mathdef973#1{\mathtt{0x#1}}\mathdef973{FC}~~6{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s} \\ &&|& \def\mathdef974#1{\mathtt{0x#1}}\mathdef974{FC}~~7{:}\href{../binary/values.html#binary-int}{\def\mathdef728#1{{\mathtt{u}#1}}\mathdef728{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u} \\ \end{array}\end{split}\]

Expressions

Expressions are encoded by their instruction sequence terminated with an explicit \(\def\mathdef975#1{\mathtt{0x#1}}\mathdef975{0B}\) opcode for \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\).

\[\begin{split}\begin{array}{llclll} \def\mathdef723#1{{}}\mathdef723{expression} & \href{../binary/instructions.html#binary-expr}{\mathtt{expr}} &::=& (\mathit{in}{:}\href{../binary/instructions.html#binary-instr}{\mathtt{instr}})^\ast~~\def\mathdef976#1{\mathtt{0x#1}}\mathdef976{0B} &\Rightarrow& \mathit{in}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ \end{array}\end{split}\]