Skip to content

Instruction set reference

The assembler accepts the mnemonics below. The v0.4 specification defines their execution semantics. Instructions contain one or two 32-bit words; see Binary encoding for field layouts.

NameMeaning
rdDestination general-purpose register
rs1 through rs4Source registers or addresses, as defined by the instruction
pdDestination predicate register
psSource predicate register
imm3232-bit immediate
labelLabel resolved by the assembler
scopeMemory scope
optional_rdOptional atomic result register
special_registerNamed special register

General-purpose registers range from r0 through r255. Predicate registers range from p0 through p3. Prefix an instruction with @p1 or @!p1 to predicate it. A zero predicate selector with no negation means unpredicated execution; it does not make the writable register p0 constant.

Memory suffixes select access width. Conversion names put the destination type first: cvt_f32_i32 converts an integer to a float.

MnemonicOpcodeOperands
iadd0x00rd, rs1, rs2
isub0x01rd, rs1, rs2
imul0x02rd, rs1, rs2
imul_hi0x03rd, rs1, rs2
imad0x04rd, rs1, rs2, rs3
idiv0x05rd, rs1, rs2
imod0x06rd, rs1, rs2
ineg0x07rd, rs1
iabs0x08rd, rs1
imin0x09rd, rs1, rs2
imax0x0Ard, rs1, rs2
iclamp0x0Brd, rs1, rs2, rs3
MnemonicOpcodeOperands
fadd0x10rd, rs1, rs2
fsub0x11rd, rs1, rs2
fmul0x12rd, rs1, rs2
fma0x13rd, rs1, rs2, rs3
fdiv0x14rd, rs1, rs2
fneg0x15rd, rs1
fabs0x16rd, rs1
fmin0x17rd, rs1, rs2
fmax0x18rd, rs1, rs2
fclamp0x19rd, rs1, rs2, rs3
fsqrt0x1Ard, rs1
fceil0x1Brd, rs1
fcos0x1Brd, rs1
fexp20x1Brd, rs1
ffloor0x1Brd, rs1
ffract0x1Brd, rs1
flog20x1Brd, rs1
frcp0x1Brd, rs1
fround0x1Brd, rs1
frsqrt0x1Brd, rs1
fsat0x1Brd, rs1
fsin0x1Brd, rs1
ftrunc0x1Brd, rs1
hadd0x1Crd, rs1, rs2
hma0x1Crd, rs1, rs2, rs3
hmul0x1Crd, rs1, rs2
hsub0x1Crd, rs1, rs2
hadd20x1Drd, rs1, rs2
hma20x1Drd, rs1, rs2, rs3
hmul20x1Drd, rs1, rs2
dadd0x1Erd, rs1, rs2
dma0x1Erd, rs1, rs2, rs3
dmul0x1Erd, rs1, rs2
dsub0x1Erd, rs1, rs2
ddiv0x1Frd, rs1, rs2
dsqrt0x1Frd, rs1
badd0x2Drd, rs1, rs2
bma0x2Drd, rs1, rs2, rs3
bmul0x2Drd, rs1, rs2
bsub0x2Drd, rs1, rs2
badd20x2Erd, rs1, rs2
bma20x2Erd, rs1, rs2, rs3
bmul20x2Erd, rs1, rs2
MnemonicOpcodeOperands
and0x20rd, rs1, rs2
or0x21rd, rs1, rs2
xor0x22rd, rs1, rs2
not0x23rd, rs1
shl0x24rd, rs1, rs2
shr0x25rd, rs1, rs2
sar0x26rd, rs1, rs2
bfe0x27rd, rs1, rs2, rs3
bfi0x27rd, rs1, rs2, rs3, rs4
bitcount0x27rd, rs1
bitfind0x27rd, rs1
bitrev0x27rd, rs1
MnemonicOpcodeOperands
icmp_eq0x28pd, rs1, rs2
icmp_ge0x28pd, rs1, rs2
icmp_gt0x28pd, rs1, rs2
icmp_le0x28pd, rs1, rs2
icmp_lt0x28pd, rs1, rs2
icmp_ne0x28pd, rs1, rs2
ucmp_le0x29pd, rs1, rs2
ucmp_lt0x29pd, rs1, rs2
fcmp_eq0x2Apd, rs1, rs2
fcmp_gt0x2Apd, rs1, rs2
fcmp_le0x2Apd, rs1, rs2
fcmp_lt0x2Apd, rs1, rs2
fcmp_ne0x2Apd, rs1, rs2
fcmp_ord0x2Apd, rs1, rs2
fcmp_unord0x2Apd, rs1, rs2
select0x2Brd, ps, rs1, rs2
MnemonicOpcodeOperands
cvt_bf16_f320x2Crd, rs1
cvt_f16_f320x2Crd, rs1
cvt_f32_bf160x2Crd, rs1
cvt_f32_f160x2Crd, rs1
cvt_f32_f640x2Crd, rs1
cvt_f32_i320x2Crd, rs1
cvt_f32_u320x2Crd, rs1
cvt_f64_f320x2Crd, rs1
cvt_i32_f320x2Crd, rs1
cvt_u32_f320x2Crd, rs1
MnemonicOpcodeOperands
local_load_u160x30rd, rs1
local_load_u320x30rd, rs1
local_load_u640x30rd, rs1
local_load_u80x30rd, rs1
local_store_u160x31rs1, rs2
local_store_u320x31rs1, rs2
local_store_u640x31rs1, rs2
local_store_u80x31rs1, rs2
device_load_u1280x38rd, rs1
device_load_u160x38rd, rs1
device_load_u320x38rd, rs1
device_load_u640x38rd, rs1
device_load_u80x38rd, rs1
device_store_u1280x39rs1, rs2
device_store_u160x39rs1, rs2
device_store_u320x39rs1, rs2
device_store_u640x39rs1, rs2
device_store_u80x39rs1, rs2
local_atomic_add0x3Coptional_rd, rs1, rs2
local_atomic_and0x3Coptional_rd, rs1, rs2
local_atomic_cas0x3Coptional_rd, rs1, rs2, rs3
local_atomic_exchange0x3Coptional_rd, rs1, rs2
local_atomic_max0x3Coptional_rd, rs1, rs2
local_atomic_min0x3Coptional_rd, rs1, rs2
local_atomic_or0x3Coptional_rd, rs1, rs2
local_atomic_sub0x3Coptional_rd, rs1, rs2
local_atomic_xor0x3Coptional_rd, rs1, rs2
atomic_add0x3Doptional_rd, rs1, rs2, scope
atomic_and0x3Doptional_rd, rs1, rs2, scope
atomic_cas0x3Doptional_rd, rs1, rs2, rs3, scope
atomic_exchange0x3Doptional_rd, rs1, rs2, scope
atomic_max0x3Doptional_rd, rs1, rs2, scope
atomic_min0x3Doptional_rd, rs1, rs2, scope
atomic_or0x3Doptional_rd, rs1, rs2, scope
atomic_sub0x3Doptional_rd, rs1, rs2, scope
atomic_xor0x3Doptional_rd, rs1, rs2, scope
MnemonicOpcodeOperands
wave_all0x3Epd, ps
wave_any0x3Epd, ps
wave_ballot0x3Erd, ps
wave_broadcast0x3Erd, rs1, rs2
wave_prefix_sum0x3Erd, rs1
wave_reduce_add0x3Erd, rs1
wave_reduce_max0x3Erd, rs1
wave_reduce_min0x3Erd, rs1
wave_shuffle0x3Erd, rs1, rs2
wave_shuffle_down0x3Erd, rs1, rs2
wave_shuffle_up0x3Erd, rs1, rs2
wave_shuffle_xor0x3Erd, rs1, rs2
MnemonicOpcodeOperands
barrier0x3FNone
break0x3Fps
call0x3Flabel
continue0x3Fps
else0x3FNone
endif0x3FNone
endloop0x3FNone
fence_acq_rel0x3Fscope
fence_acquire0x3Fscope
fence_release0x3Fscope
halt0x3FNone
if0x3Fps
loop0x3FNone
nop0x3FNone
return0x3FNone
wait0x3FNone
MnemonicOpcodeOperands
mma_compute0x40rd, rs1, rs2
mma_load_a0x40rd, rs1, rs2
mma_load_b0x40rd, rs1, rs2
mma_store_c0x40rd, rs1, rs2
MnemonicOpcodeOperands
mov0x41rd, rs1
mov_imm0x41rd, imm32
mov_sr0x41rd, special_register