Skip to main content

3. 编码格式

位图中的范围是 [msb:lsb]。opcode、fN 等固定字段由 YAML 指令项决定;没有作为操作数或固定字段的位必须为零。

格式宽度位图(高位到低位)用途
R32f4[31:28] rs2[27:21] rs1[20:14] rd[13:7] opcode[6:0]三向量源。
RU32f5[31:27] rs2[26:21] rs1[20:14] rd[13:7] opcode[6:0]向量加 uniform 源。
I832imm[31:24] f3[23:21] rs1[20:14] rd[13:7] opcode[6:0]8-bit 立即数。
R132f11[31:21] rs1[20:14] rd[13:7] opcode[6:0]向量一元。
R1U32f12[31:20] rs1[19:14] rd[13:7] opcode[6:0]向量目的、uniform 源。
LI32imm[31:14] rd[13:7] opcode[6:0]向量立即数。
C32f5[31:27] rs2[26:20] rs1[19:13] rd[12:7] opcode[6:0]向量到 uniform 比较/归约。
CU32f6[31:26] rs2[25:20] rs1[19:13] rd[12:7] opcode[6:0]向量加 uniform 到 uniform。
CI32imm[31:24] f4[23:20] rs1[19:13] rd[12:7] opcode[6:0]uniform 结果加立即数。
UR32f7[31:25] rs2[24:19] rs1[18:13] rd[12:7] opcode[6:0]三 uniform 源。
UI32imm[31:22] f3[21:19] rs1[18:13] rd[12:7] opcode[6:0]uniform + 10-bit 立即数。
U132f13[31:19] rs1[18:13] rd[12:7] opcode[6:0]uniform 一元/EXEC/片段控制。
ULI32imm[31:15] f2[14:13] rd[12:7] opcode[6:0]uniform 立即数或 PC 相对值。
J32imm[31:10] f3[9:7] opcode[6:0]无条件 PC 相对跳转。
JL32imm[31:13] rd[12:7] opcode[6:0]跳转并链接。
B32imm[31:15] f2[14:13] rs1[12:7] opcode[6:0]uniform 条件分支。
JR32imm[31:22] f3[21:19] rs1[18:13] rd[12:7] opcode[6:0]间接跳转/返回。
SYS32imm[31:12] f5[11:7] opcode[6:0]系统、屏障、cache 控制。
WAIT32sm[31:30] sfu[29:27] ls[26:23] vst[22:18] tex[17:13] vm[12:7] opcode[6:0]多计数器 waitcnt。
CSR32csr[31:22] f3[21:19] rs1[18:13] rd[12:7] opcode[6:0]CSR 访问。
X64z[63:55] sat[54] abs[53:51] neg[50:48] rm[47:45] f10[44:35] rs3[34:28] rs2[27:21] rs1[20:14] rd[13:7] opcode[6:0]三源 VALU 与 FP 修饰。
XL64imm[63:32] f11[31:21] rs1[20:14] rd[13:7] opcode[6:0]VALU + 32-bit literal。
H64z[63:59] sat[58] abs[57:55] neg[54:52] rm[51:49] f10[48:39] rs3[38:31] rs2[30:23] rs1[22:15] rd[14:7] opcode[6:0]half/b16 VALU。
HC64z1[63:41] f10[40:31] rs2[30:23] rs1[22:15] z0[14:13] rd[12:7] opcode[6:0]half 比较到 uniform 掩码。
UL64imm[63:32] f13[31:19] rs1[18:13] rd[12:7] opcode[6:0]uniform + 32-bit literal。
M64imm[63:40] f2[39:38] cpol[37:35] sp[34:32] f5[31:27] rs2[26:21] rs1[20:14] rd[13:7] opcode[6:0]向量内存。
UM64z[63:59] cpol[58:56] imm[55:32] f7[31:25] rs2[24:19] rs1[18:13] rd[12:7] opcode[6:0]uniform 标量内存。
T64toff[63:52] z[51:50] d16[49] a16[48] rsd[47] voff[46] dmask[45:42] dim[41:38] rs3[37:32] f5[31:27] rs2[26:21] rs1[20:14] rd[13:7] opcode[6:0]texture/image。

立即数类型、缩放、对齐和枚举值以 YAML operand_kinds 为准;例如 br22/br19/br17 是有符号且左移 2 的 PC 相对偏移,toff7 是以 4 字节为单位的 tile 偏移,rm 支持 rne、rtz、rdn、rup、rmm、dyn。