AMDGPU 指令修飾符語法¶
慣例¶
以下符號貫穿本文檔
符號
描述
{0..N}
從 0 到 N(包含)範圍內的任何整數值。
<x>
x 的語法和含義在其他地方解釋。
修飾符¶
DS 修飾符¶
offset0¶
指定第一個 8 位元偏移量,以位元組為單位。預設值為 0。
與需要兩個位址的 DS 指令一起使用。
範例
offset0:0xff
offset0:2-x
offset0:-x-y
offset1¶
指定第二個 8 位元偏移量,以位元組為單位。預設值為 0。
與需要兩個位址的 DS 指令一起使用。
範例
offset1:0xff
offset1:2-x
offset1:-x-y
offset¶
指定一個 16 位元偏移量,以位元組為單位。預設值為 0。
與需要單個位址的 DS 指令一起使用。
範例
offset:65535
offset:0xffff
offset:-x-y
混洗模式¶
這是一個特殊的修飾符,只能與 ds_swizzle_b32 指令一起使用。它以數字或符號形式指定混洗模式。預設值為 0。
語法
描述
offset:{0..0xFFFF}
指定一個 16 位元混洗模式。
offset:swizzle(QUAD_PERM,{0..3},{0..3},{0..3},{0..3})
指定四路排列模式
每個數字都是一個通道id。
offset:swizzle(BITMASK_PERM, “<mask>”)
指定一個位元遮罩排列模式。
該模式將一個 5 位元通道id 轉換為另一個通道id,該通道與之互動。
遮罩是一個 5 個字元的序列,用於指定如何轉換通道id的位元。
允許使用以下字元
“0” - 將位元設定為 0。
“1” - 將位元設定為 1。
“p” - 保留位元。
“i” - 反轉位元。
offset:swizzle(BROADCAST,{2..32},{0..N})
指定廣播模式。
將任何特定通道的值廣播到其群組中的所有通道。
第一個數字參數是群組大小,必須等於 2、4、8、16 或 32。
第二個數字參數是要廣播的通道的索引。
索引不得超過群組大小。
offset:swizzle(SWAP,{1..16})
指定交換模式。
交換相鄰的 1、2、4、8 或 16 個通道群組。
offset:swizzle(REVERSE,{2..32})
指定反轉模式。
反轉 2、4、8、16 或 32 個通道群組的通道。
範例
offset:255
offset:0xffff
offset:swizzle(QUAD_PERM, 0, 1, 2, 3)
offset:swizzle(BITMASK_PERM, "01pi0")
offset:swizzle(BROADCAST, 2, 0)
offset:swizzle(SWAP, 8)
offset:swizzle(REVERSE, 30 + 2)
gds¶
指定是否使用 GDS 或 LDS 記憶體(預設為 LDS)。
語法
描述
gds
使用 GDS 記憶體。
EXP 修飾符¶
done¶
指定這是否是從著色器到目標的最後一次匯出。預設情況下,export 指令不會完成匯出序列。
語法
描述
done
指示最後一個匯出操作。
compr¶
指示資料是否已壓縮(預設情況下資料未壓縮)。
語法
描述
compr
資料已壓縮。
vm¶
指定exec 遮罩對於此 export 指令是否有效(預設情況下遮罩無效)。
語法
描述
vm
設定標誌,指示有效的exec 遮罩。
row_en¶
指定是匯出一行資料還是多行資料。
語法
描述
row_en
使用來自 M0 的列索引匯出多行。
FLAT 修飾符¶
offset12¶
指定一個立即無號 12 位元偏移量,以位元組為單位。預設值為 0。
範例
offset:4095
offset:x-0xff
offset13s¶
指定一個立即帶號 13 位元偏移量,以位元組為單位。預設值為 0。
範例
offset:-4000
offset:0x10
offset:-x
offset12s¶
指定一個立即帶號 12 位元偏移量,以位元組為單位。預設值為 0。
範例
offset:-2000
offset:0x10
offset:-x+y
offset11¶
指定一個立即無號 11 位元偏移量,以位元組為單位。預設值為 0。
範例
offset:2047
offset:x+0xff
dlc¶
請參閱此處的描述。
glc¶
請參閱此處的描述。
lds¶
請參閱此處的描述。
slc¶
請參閱此處的描述。
tfe¶
請參閱此處的描述。
nv¶
請參閱此處的描述。
sc0¶
請參閱此處的描述。
sc1¶
請參閱此處的描述。
nt¶
請參閱此處的描述。
MIMG 修飾符¶
dmask¶
指定操作使用哪些通道(影像組件)。預設情況下,不使用任何通道。
此修飾符根據指令類型有一些限制
指令類型
有效的 dmask 值
32 位元原子 cmpswap
0x3
32 位元原子指令,cmpswap 除外
0x1
64 位元原子 cmpswap
0xF
64 位元原子指令,cmpswap 除外
0x3
gather4
0x1, 0x2, 0x4, 0x8
GFX11+ msaa_load
0x1, 0x2, 0x4, 0x8
其他指令
任何值
範例
dmask:0xf
dmask:0b1111
dmask:x|y|z
unorm¶
指定位址是否已正規化(預設情況下位址已正規化)。
語法
描述
unorm
強制位址不正規化。
glc¶
請參閱此處的描述。
slc¶
請參閱此處的描述。
r128¶
指定紋理資源大小。預設大小為 256 位元。
語法
描述
r128
指定 128 位元紋理資源大小。
警告
使用此修飾符應將 rsrc 運算元大小從 8 個 dword 減少到 4 個,但組譯器目前不支援此功能。
tfe¶
請參閱此處的描述。
lwe¶
指定 LOD 警告狀態(預設情況下停用 LOD 警告)。
語法
描述
lwe
啟用 LOD 警告。
da¶
指定是否必須將陣列索引發送到 TA。預設情況下,不發送陣列索引。
語法
描述
da
將陣列索引發送到 TA。
d16¶
指定資料大小:16 或 32 位元(預設為 32 位元)。
語法
描述
d16
啟用 16 位元資料模式。
在載入時,在將記憶體中的資料儲存到 VGPR 之前,將其轉換為 16 位元格式。
對於儲存,在將 VGPR 中的 16 位元資料寫入記憶體之前,將其轉換為 32 位元。
請注意,GFX8.0 不支援資料封裝。每個 16 位元資料元素佔用 1 個 VGPR。
GFX8.1 和 GFX9+ 支援資料封裝。每對 16 位元資料元素佔用 1 個 VGPR。
a16¶
指定影像位址組件的大小:16 或 32 位元(預設為 32 位元)。
語法
描述
a16
啟用 16 位元影像位址組件。
dim¶
指定表面維度。這是一個強制性修飾符。沒有預設值。
語法
描述
dim:1D
一維影像。
dim:2D
二維影像。
dim:3D
三維影像。
dim:CUBE
立方體貼圖陣列。
dim:1D_ARRAY
一維影像陣列。
dim:2D_ARRAY
二維影像陣列。
dim:2D_MSAA
二維多重採樣反鋸齒影像。
dim:2D_MSAA_ARRAY
二維多重採樣反鋸齒影像陣列。
下表定義了與 SP3 組譯器相容的替代語法
語法
描述
dim:SQ_RSRC_IMG_1D
一維影像。
dim:SQ_RSRC_IMG_2D
二維影像。
dim:SQ_RSRC_IMG_3D
三維影像。
dim:SQ_RSRC_IMG_CUBE
立方體貼圖陣列。
dim:SQ_RSRC_IMG_1D_ARRAY
一維影像陣列。
dim:SQ_RSRC_IMG_2D_ARRAY
二維影像陣列。
dim:SQ_RSRC_IMG_2D_MSAA
二維多重採樣反鋸齒影像。
dim:SQ_RSRC_IMG_2D_MSAA_ARRAY
二維多重採樣反鋸齒影像陣列。
dlc¶
請參閱此處的描述。
其他修飾符¶
dlc¶
控制記憶體操作的裝置級快取策略。用於同步。指定後,強制操作繞過裝置級快取,使操作在裝置級保持一致性。預設情況下,指令使用裝置級快取。
語法
描述
dlc
繞過裝置級快取。
glc¶
對於原子運算碼,此修飾符指示指令傳回操作前記憶體中的值。對於其他運算碼,它與slc 一起使用以指定快取策略。
預設值為關閉 (0)。
語法
描述
glc
將 glc 位元設定為 1。
lds¶
指定結果的儲存位置:VGPR 或 LDS(預設為 VGPR)。
語法
描述
lds
將結果儲存在 LDS 中。
nv¶
指定指令是否在非揮發性記憶體上操作。預設情況下,記憶體是揮發性的。
語法
描述
nv
指示指令在非揮發性記憶體上操作。
slc¶
控制 L2 快取的行為。預設值為關閉 (0)。
語法
描述
slc
將 slc 位元設定為 1。
tfe¶
控制對部分駐留紋理的存取。預設值為關閉 (0)。
語法
描述
tfe
將 tfe 位元設定為 1。
sc0¶
對於原子運算碼,此修飾符指示指令傳回操作前記憶體中的值。對於其他運算碼,它與sc1 一起使用以指定快取策略。
語法
描述
sc0
將 sc0 位元設定為 1。
sc1¶
此修飾符與sc0 一起使用以指定快取策略。
語法
描述
sc1
將 sc1 位元設定為 1。
nt¶
指示對非暫時性資料的操作。
語法
描述
nt
將 nt 位元設定為 1。
MUBUF/MTBUF 修飾符¶
idxen¶
指定位址組件是否包含索引。預設情況下,不使用索引。
可以與offen 一起使用。
不能與addr64 一起使用。
語法
描述
idxen
位址組件包含索引。
offen¶
指定位址組件是否包含偏移量。預設情況下,不使用偏移量。
可以與idxen 一起使用。
不能與addr64 一起使用。
語法
描述
offen
位址組件包含偏移量。
addr64¶
指定是否使用 64 位元位址。預設情況下,不使用位址。
語法
描述
addr64
使用 64 位元位址。
offset12¶
指定一個立即無號 12 位元偏移量,以位元組為單位。預設值為 0。
範例
offset:x+y
offset:0x10
glc¶
請參閱此處的描述。
slc¶
請參閱此處的描述。
lds¶
請參閱此處的描述。
dlc¶
請參閱此處的描述。
tfe¶
請參閱此處的描述。
fmt¶
指定操作使用的資料和數值格式。預設數值格式為 BUF_NUM_FORMAT_UNORM。預設資料格式為 BUF_DATA_FORMAT_8。
下表定義了支援的資料格式
語法
注意
BUF_DATA_FORMAT_INVALID
BUF_DATA_FORMAT_8
預設值。
BUF_DATA_FORMAT_16
BUF_DATA_FORMAT_8_8
BUF_DATA_FORMAT_32
BUF_DATA_FORMAT_16_16
BUF_DATA_FORMAT_10_11_11
BUF_DATA_FORMAT_11_11_10
BUF_DATA_FORMAT_10_10_10_2
BUF_DATA_FORMAT_2_10_10_10
BUF_DATA_FORMAT_8_8_8_8
BUF_DATA_FORMAT_32_32
BUF_DATA_FORMAT_16_16_16_16
BUF_DATA_FORMAT_32_32_32
BUF_DATA_FORMAT_32_32_32_32
BUF_DATA_FORMAT_RESERVED_15
以下定義了支援的數值格式
語法
注意
BUF_NUM_FORMAT_UNORM
預設值。
BUF_NUM_FORMAT_SNORM
BUF_NUM_FORMAT_USCALED
BUF_NUM_FORMAT_SSCALED
BUF_NUM_FORMAT_UINT
BUF_NUM_FORMAT_SINT
BUF_NUM_FORMAT_SNORM_OGL
僅限 GFX7。
BUF_NUM_FORMAT_RESERVED_6
僅限 GFX8 和 GFX9。
BUF_NUM_FORMAT_FLOAT
範例
format:0
format:127
format:[BUF_DATA_FORMAT_16]
format:[BUF_DATA_FORMAT_16,BUF_NUM_FORMAT_SSCALED]
format:[BUF_NUM_FORMAT_FLOAT]
ufmt¶
指定操作使用的統一格式。預設格式為 BUF_FMT_8_UNORM。
統一格式是資料和數值格式的替代品。為了與較舊的 ISA 相容,仍然接受具有資料和數值格式的語法,前提是格式的組合可以對應到統一格式。
以下定義了支援的統一格式以及等效的資料和數值格式組合
統一格式語法
等效資料格式
等效數值格式
注意
BUF_FMT_INVALID
BUF_DATA_FORMAT_INVALID
BUF_NUM_FORMAT_UNORM
BUF_FMT_8_UNORM
BUF_DATA_FORMAT_8
BUF_NUM_FORMAT_UNORM
BUF_FMT_8_SNORM
BUF_DATA_FORMAT_8
BUF_NUM_FORMAT_SNORM
BUF_FMT_8_USCALED
BUF_DATA_FORMAT_8
BUF_NUM_FORMAT_USCALED
BUF_FMT_8_SSCALED
BUF_DATA_FORMAT_8
BUF_NUM_FORMAT_SSCALED
BUF_FMT_8_UINT
BUF_DATA_FORMAT_8
BUF_NUM_FORMAT_UINT
BUF_FMT_8_SINT
BUF_DATA_FORMAT_8
BUF_NUM_FORMAT_SINT
BUF_FMT_16_UNORM
BUF_DATA_FORMAT_16
BUF_NUM_FORMAT_UNORM
BUF_FMT_16_SNORM
BUF_DATA_FORMAT_16
BUF_NUM_FORMAT_SNORM
BUF_FMT_16_USCALED
BUF_DATA_FORMAT_16
BUF_NUM_FORMAT_USCALED
BUF_FMT_16_SSCALED
BUF_DATA_FORMAT_16
BUF_NUM_FORMAT_SSCALED
BUF_FMT_16_UINT
BUF_DATA_FORMAT_16
BUF_NUM_FORMAT_UINT
BUF_FMT_16_SINT
BUF_DATA_FORMAT_16
BUF_NUM_FORMAT_SINT
BUF_FMT_16_FLOAT
BUF_DATA_FORMAT_16
BUF_NUM_FORMAT_FLOAT
BUF_FMT_8_8_UNORM
BUF_DATA_FORMAT_8_8
BUF_NUM_FORMAT_UNORM
BUF_FMT_8_8_SNORM
BUF_DATA_FORMAT_8_8
BUF_NUM_FORMAT_SNORM
BUF_FMT_8_8_USCALED
BUF_DATA_FORMAT_8_8
BUF_NUM_FORMAT_USCALED
BUF_FMT_8_8_SSCALED
BUF_DATA_FORMAT_8_8
BUF_NUM_FORMAT_SSCALED
BUF_FMT_8_8_UINT
BUF_DATA_FORMAT_8_8
BUF_NUM_FORMAT_UINT
BUF_FMT_8_8_SINT
BUF_DATA_FORMAT_8_8
BUF_NUM_FORMAT_SINT
BUF_FMT_32_UINT
BUF_DATA_FORMAT_32
BUF_NUM_FORMAT_UINT
BUF_FMT_32_SINT
BUF_DATA_FORMAT_32
BUF_NUM_FORMAT_SINT
BUF_FMT_32_FLOAT
BUF_DATA_FORMAT_32
BUF_NUM_FORMAT_FLOAT
BUF_FMT_16_16_UNORM
BUF_DATA_FORMAT_16_16
BUF_NUM_FORMAT_UNORM
BUF_FMT_16_16_SNORM
BUF_DATA_FORMAT_16_16
BUF_NUM_FORMAT_SNORM
BUF_FMT_16_16_USCALED
BUF_DATA_FORMAT_16_16
BUF_NUM_FORMAT_USCALED
BUF_FMT_16_16_SSCALED
BUF_DATA_FORMAT_16_16
BUF_NUM_FORMAT_SSCALED
BUF_FMT_16_16_UINT
BUF_DATA_FORMAT_16_16
BUF_NUM_FORMAT_UINT
BUF_FMT_16_16_SINT
BUF_DATA_FORMAT_16_16
BUF_NUM_FORMAT_SINT
BUF_FMT_16_16_FLOAT
BUF_DATA_FORMAT_16_16
BUF_NUM_FORMAT_FLOAT
BUF_FMT_10_11_11_UNORM
BUF_DATA_FORMAT_10_11_11
BUF_NUM_FORMAT_UNORM
僅限 GFX10
BUF_FMT_10_11_11_SNORM
BUF_DATA_FORMAT_10_11_11
BUF_NUM_FORMAT_SNORM
僅限 GFX10
BUF_FMT_10_11_11_USCALED
BUF_DATA_FORMAT_10_11_11
BUF_NUM_FORMAT_USCALED
僅限 GFX10
BUF_FMT_10_11_11_SSCALED
BUF_DATA_FORMAT_10_11_11
BUF_NUM_FORMAT_SSCALED
僅限 GFX10
BUF_FMT_10_11_11_UINT
BUF_DATA_FORMAT_10_11_11
BUF_NUM_FORMAT_UINT
僅限 GFX10
BUF_FMT_10_11_11_SINT
BUF_DATA_FORMAT_10_11_11
BUF_NUM_FORMAT_SINT
僅限 GFX10
BUF_FMT_10_11_11_FLOAT
BUF_DATA_FORMAT_10_11_11
BUF_NUM_FORMAT_FLOAT
BUF_FMT_11_11_10_UNORM
BUF_DATA_FORMAT_11_11_10
BUF_NUM_FORMAT_UNORM
僅限 GFX10
BUF_FMT_11_11_10_SNORM
BUF_DATA_FORMAT_11_11_10
BUF_NUM_FORMAT_SNORM
僅限 GFX10
BUF_FMT_11_11_10_USCALED
BUF_DATA_FORMAT_11_11_10
BUF_NUM_FORMAT_USCALED
僅限 GFX10
BUF_FMT_11_11_10_SSCALED
BUF_DATA_FORMAT_11_11_10
BUF_NUM_FORMAT_SSCALED
僅限 GFX10
BUF_FMT_11_11_10_UINT
BUF_DATA_FORMAT_11_11_10
BUF_NUM_FORMAT_UINT
僅限 GFX10
BUF_FMT_11_11_10_SINT
BUF_DATA_FORMAT_11_11_10
BUF_NUM_FORMAT_SINT
僅限 GFX10
BUF_FMT_11_11_10_FLOAT
BUF_DATA_FORMAT_11_11_10
BUF_NUM_FORMAT_FLOAT
BUF_FMT_10_10_10_2_UNORM
BUF_DATA_FORMAT_10_10_10_2
BUF_NUM_FORMAT_UNORM
BUF_FMT_10_10_10_2_SNORM
BUF_DATA_FORMAT_10_10_10_2
BUF_NUM_FORMAT_SNORM
BUF_FMT_10_10_10_2_USCALED
BUF_DATA_FORMAT_10_10_10_2
BUF_NUM_FORMAT_USCALED
僅限 GFX10
BUF_FMT_10_10_10_2_SSCALED
BUF_DATA_FORMAT_10_10_10_2
BUF_NUM_FORMAT_SSCALED
僅限 GFX10
BUF_FMT_10_10_10_2_UINT
BUF_DATA_FORMAT_10_10_10_2
BUF_NUM_FORMAT_UINT
BUF_FMT_10_10_10_2_SINT
BUF_DATA_FORMAT_10_10_10_2
BUF_NUM_FORMAT_SINT
BUF_FMT_2_10_10_10_UNORM
BUF_DATA_FORMAT_2_10_10_10
BUF_NUM_FORMAT_UNORM
BUF_FMT_2_10_10_10_SNORM
BUF_DATA_FORMAT_2_10_10_10
BUF_NUM_FORMAT_SNORM
BUF_FMT_2_10_10_10_USCALED
BUF_DATA_FORMAT_2_10_10_10
BUF_NUM_FORMAT_USCALED
BUF_FMT_2_10_10_10_SSCALED
BUF_DATA_FORMAT_2_10_10_10
BUF_NUM_FORMAT_SSCALED
BUF_FMT_2_10_10_10_UINT
BUF_DATA_FORMAT_2_10_10_10
BUF_NUM_FORMAT_UINT
BUF_FMT_2_10_10_10_SINT
BUF_DATA_FORMAT_2_10_10_10
BUF_NUM_FORMAT_SINT
BUF_FMT_8_8_8_8_UNORM
BUF_DATA_FORMAT_8_8_8_8
BUF_NUM_FORMAT_UNORM
BUF_FMT_8_8_8_8_SNORM
BUF_DATA_FORMAT_8_8_8_8
BUF_NUM_FORMAT_SNORM
BUF_FMT_8_8_8_8_USCALED
BUF_DATA_FORMAT_8_8_8_8
BUF_NUM_FORMAT_USCALED
BUF_FMT_8_8_8_8_SSCALED
BUF_DATA_FORMAT_8_8_8_8
BUF_NUM_FORMAT_SSCALED
BUF_FMT_8_8_8_8_UINT
BUF_DATA_FORMAT_8_8_8_8
BUF_NUM_FORMAT_UINT
BUF_FMT_8_8_8_8_SINT
BUF_DATA_FORMAT_8_8_8_8
BUF_NUM_FORMAT_SINT
BUF_FMT_32_32_UINT
BUF_DATA_FORMAT_32_32
BUF_NUM_FORMAT_UINT
BUF_FMT_32_32_SINT
BUF_DATA_FORMAT_32_32
BUF_NUM_FORMAT_SINT
BUF_FMT_32_32_FLOAT
BUF_DATA_FORMAT_32_32
BUF_NUM_FORMAT_FLOAT
BUF_FMT_16_16_16_16_UNORM
BUF_DATA_FORMAT_16_16_16_16
BUF_NUM_FORMAT_UNORM
BUF_FMT_16_16_16_16_SNORM
BUF_DATA_FORMAT_16_16_16_16
BUF_NUM_FORMAT_SNORM
BUF_FMT_16_16_16_16_USCALED
BUF_DATA_FORMAT_16_16_16_16
BUF_NUM_FORMAT_USCALED
BUF_FMT_16_16_16_16_SSCALED
BUF_DATA_FORMAT_16_16_16_16
BUF_NUM_FORMAT_SSCALED
BUF_FMT_16_16_16_16_UINT
BUF_DATA_FORMAT_16_16_16_16
BUF_NUM_FORMAT_UINT
BUF_FMT_16_16_16_16_SINT
BUF_DATA_FORMAT_16_16_16_16
BUF_NUM_FORMAT_SINT
BUF_FMT_16_16_16_16_FLOAT
BUF_DATA_FORMAT_16_16_16_16
BUF_NUM_FORMAT_FLOAT
BUF_FMT_32_32_32_UINT
BUF_DATA_FORMAT_32_32_32
BUF_NUM_FORMAT_UINT
BUF_FMT_32_32_32_SINT
BUF_DATA_FORMAT_32_32_32
BUF_NUM_FORMAT_SINT
BUF_FMT_32_32_32_FLOAT
BUF_DATA_FORMAT_32_32_32
BUF_NUM_FORMAT_FLOAT
BUF_FMT_32_32_32_32_UINT
BUF_DATA_FORMAT_32_32_32_32
BUF_NUM_FORMAT_UINT
BUF_FMT_32_32_32_32_SINT
BUF_DATA_FORMAT_32_32_32_32
BUF_NUM_FORMAT_SINT
BUF_FMT_32_32_32_32_FLOAT
BUF_DATA_FORMAT_32_32_32_32
BUF_NUM_FORMAT_FLOAT
範例
format:0
format:[BUF_FMT_32_UINT]
SMRD/SMEM 修飾符¶
glc¶
請參閱此處的描述。
nv¶
請參閱此處的描述。
dlc¶
請參閱此處的描述。
offset20u¶
指定一個無號 20 位元偏移量,以位元組為單位。預設值為 0。
範例
offset:1
offset:0xfffff
offset:x-y
offset21s¶
指定一個帶號 21 位元偏移量,以位元組為單位。預設值為 0。
範例
offset:-1
offset:0xfffff
offset:-x
VINTRP/VINTERP/LDSDIR 修飾符¶
high¶
指定要使用 LDS 字組的哪一半。預設情況下使用 LDS 字組的低半部分。
語法
描述
high
使用 LDS 字組的高半部分。
neg¶
請參閱此處的描述。
wait_exp¶
指定在發出當前指令之前等待 EXP 計數器。計數器必須小於或等於此值,然後才能發出指令。如果設定為 7,則不執行任何等待。
預設值為零。這是一個安全值,但可能不是最佳值。
語法
描述
wait_exp:{0..7}
在發出此指令之前,額外等待 EXP 計數器。
wait_vdst¶
指定在發出當前指令之前等待 VA_VDST 計數器。計數器必須小於或等於此值,然後才能發出指令。如果設定為 15,則不執行任何等待。
預設值為零。這是一個安全值,但可能不是最佳值。
語法
描述
wait_vdst:{0..15}
在發出此指令之前,額外等待 VA_VDST 計數器。
DPP8 修飾符¶
dpp8_sel¶
在 8 個通道的群組中,選擇要從哪些通道提取資料。這是一個強制性修飾符。沒有預設值。
dpp8_sel 修飾符必須明確指定 8 個值。第一個值選擇要從哪個 lane 讀取資料以提供給 lane 0。第二個值控制 lane 1,依此類推。
語法
描述
dpp8:[{0..7},{0..7},{0..7},{0..7},{0..7},{0..7},{0..7},{0..7}]
選擇要從哪個 lane 讀取。
範例
dpp8:[7,6,5,4,3,2,1,0]
dpp8:[0,1,0,1,0,1,0,1]
fi¶
控制與 dpp8 指令的非作用中 lane 的互動。預設值為零。
注意:非作用中 lane 是指其 exec 遮罩位元為零的 lane。
語法
描述
fi:0
從非作用中 lane 存取資料時,提取零。
fi:1
從非作用中 lane 提取先前存在的值。
DPP 修飾符¶
dpp_ctrl¶
指定如何在執行緒之間共享資料。這是強制性修飾符。沒有預設值。
注意:wavefront 的 lane 排列成四個列和四個bank。
語法
描述
quad_perm:[{0..3},{0..3},{0..3},{0..3}]
4 個執行緒的完整置換。
row_mirror
在列內鏡像執行緒。
row_half_mirror
在 1/2 列(8 個執行緒)內鏡像執行緒。
row_bcast:15
將每列的第 15 個執行緒廣播到下一列。
row_bcast:31
將執行緒 31 廣播到第 2 列和第 3 列。
wave_shl:1
Wavefront 向左位移 1 個執行緒。
wave_rol:1
Wavefront 向左旋轉 1 個執行緒。
wave_shr:1
Wavefront 向右位移 1 個執行緒。
wave_ror:1
Wavefront 向右旋轉 1 個執行緒。
row_shl:{1..15}
列向左位移 1-15 個執行緒。
row_shr:{1..15}
列向右位移 1-15 個執行緒。
row_ror:{1..15}
列向右旋轉 1-15 個執行緒。
範例
quad_perm:[0, 1, 2, 3]
row_shl:3
dpp16_ctrl¶
指定如何在執行緒之間共享資料。這是強制性修飾符。沒有預設值。
注意:wavefront 的 lane 排列成四個列和四個bank。(在 wave32 模式中只有兩列。)
語法
描述
quad_perm:[{0..3},{0..3},{0..3},{0..3}]
4 個執行緒的完整置換。
row_mirror
在列內鏡像執行緒。
row_half_mirror
在 1/2 列(8 個執行緒)內鏡像執行緒。
row_share:{0..15}
與列中的其他 lane 共享來自指定 lane 的值。
row_xmask:{0..15}
從 XOR(<current lane id>,<specified lane id>) 提取。
row_shl:{1..15}
列向左位移 1-15 個執行緒。
row_shr:{1..15}
列向右位移 1-15 個執行緒。
row_ror:{1..15}
列向右旋轉 1-15 個執行緒。
範例
quad_perm:[0, 1, 2, 3]
row_shl:3
dpp32_ctrl¶
指定如何在執行緒之間共享資料。這是強制性修飾符。沒有預設值。
注意:wavefront 的 lane 排列成四個列和四個bank。
語法
描述
quad_perm:[{0..3},{0..3},{0..3},{0..3}]
4 個執行緒的完整置換。
row_mirror
在列內鏡像執行緒。
row_half_mirror
在 1/2 列(8 個執行緒)內鏡像執行緒。
row_bcast:15
將每列的第 15 個執行緒廣播到下一列。
row_bcast:31
將執行緒 31 廣播到第 2 列和第 3 列。
wave_shl:1
Wavefront 向左位移 1 個執行緒。
wave_rol:1
Wavefront 向左旋轉 1 個執行緒。
wave_shr:1
Wavefront 向右位移 1 個執行緒。
wave_ror:1
Wavefront 向右旋轉 1 個執行緒。
row_shl:{1..15}
列向左位移 1-15 個執行緒。
row_shr:{1..15}
列向右位移 1-15 個執行緒。
row_ror:{1..15}
列向右旋轉 1-15 個執行緒。
row_newbcast:{1..15}
將列中的一個執行緒廣播到整個列。
範例
quad_perm:[0, 1, 2, 3]
row_shl:3
dpp64_ctrl¶
指定如何在執行緒之間共享資料。這是強制性修飾符。沒有預設值。
注意:wavefront 的 lane 排列成四個列和四個bank。
語法
描述
row_newbcast:{1..15}
將列中的一個執行緒廣播到整個列。
範例
row_newbcast:3
row_mask¶
控制哪些列啟用資料共享。預設情況下,所有列都已啟用。
注意:wavefront 的 lane 排列成四個列和四個bank。(在 wave32 模式中只有兩列。)
範例
row_mask:0xf
row_mask:0b1010
row_mask:x|y
bank_mask¶
控制哪些 bank 啟用資料共享。預設情況下,所有 bank 都已啟用。
注意:wavefront 的 lane 排列成四個列和四個bank。(在 wave32 模式中只有兩列。)
範例
bank_mask:0x3
bank_mask:0b0011
bank_mask:x&y
bound_ctrl¶
控制存取無效 lane 時的資料共享。預設情況下,與無效 lane 的資料共享已停用。
語法
描述
bound_ctrl:1
啟用與無效 lane 的資料共享。
從無效 lane 存取資料將傳回零。
bound_ctrl:0 (GFX11+)
停用與無效 lane 的資料共享。
警告
由於歷史原因,對於較舊的架構,bound_ctrl:0 與 bound_ctrl:1 具有相同的含義。
fi¶
控制與 dpp16 指令的非作用中 lane 的互動。預設值為零。
注意:非作用中 lane 是指其 exec 遮罩位元為零的 lane。
語法
描述
fi:0
與非作用中 lane 的互動由 bound_ctrl 控制。
fi:1
從非作用中 lane 提取先前存在的值。
SDWA 修飾符¶
clamp¶
請參閱此處的描述。
omod¶
請參閱此處的描述。
dst_sel¶
選擇目的地中受影響的位元。預設情況下,所有位元都會受到影響。
語法
描述
dst_sel:DWORD
使用位元 31:0。
dst_sel:BYTE_0
使用位元 7:0。
dst_sel:BYTE_1
使用位元 15:8。
dst_sel:BYTE_2
使用位元 23:16。
dst_sel:BYTE_3
使用位元 31:24。
dst_sel:WORD_0
使用位元 15:0。
dst_sel:WORD_1
使用位元 31:16。
dst_unused¶
控制如何處理目的地中未被 dst_sel 選取的位元。預設情況下,未使用的位元會被保留。
語法
描述
dst_unused:UNUSED_PAD
以零填充。
dst_unused:UNUSED_SEXT
符號擴展高位元,零填充低位元。
dst_unused:UNUSED_PRESERVE
保留位元。
src0_sel¶
控制使用 src0 中的哪些位元。預設情況下,所有位元都會被使用。
語法
描述
src0_sel:DWORD
使用位元 31:0。
src0_sel:BYTE_0
使用位元 7:0。
src0_sel:BYTE_1
使用位元 15:8。
src0_sel:BYTE_2
使用位元 23:16。
src0_sel:BYTE_3
使用位元 31:24。
src0_sel:WORD_0
使用位元 15:0。
src0_sel:WORD_1
使用位元 31:16。
src1_sel¶
控制使用 src1 中的哪些位元。預設情況下,所有位元都會被使用。
語法
描述
src1_sel:DWORD
使用位元 31:0。
src1_sel:BYTE_0
使用位元 7:0。
src1_sel:BYTE_1
使用位元 15:8。
src1_sel:BYTE_2
使用位元 23:16。
src1_sel:BYTE_3
使用位元 31:24。
src1_sel:WORD_0
使用位元 15:0。
src1_sel:WORD_1
使用位元 31:16。
SDWA 運算元修飾符¶
運算元修飾符不會單獨使用。它們應用於來源運算元。
abs¶
請參閱此處的描述。
neg¶
請參閱此處的描述。
sext¶
符號擴展(子dword)整數運算元的值以填滿所有 32 位元。
僅對整數運算元有效。
語法
描述
sext(<operand>)
符號擴展運算元值。
範例
sext(v4)
sext(v255)
VOP3 修飾符¶
op_sel¶
為來源和目的地運算元選擇低 [15:0] 或高 [31:16] 運算元位元。預設情況下,所有運算元都使用低位元。
與 op_sel 修飾符一起指定的值數量必須與指令運算元(來源和目的地)的數量相符。第一個值控制 src0,第二個值控制 src1,依此類推,但最後一個值控制目的地。值 0 選擇低位元,而 1 選擇高位元。
注意:op_sel 修飾符僅影響 16 位元運算元。對於 32 位元運算元,op_sel 指定的值必須為 0。
語法
描述
op_sel:[{0..1},{0..1}]
為具有 1 個來源運算元的指令選擇運算元位元。
op_sel:[{0..1},{0..1},{0..1}]
為具有 2 個來源運算元的指令選擇運算元位元。
op_sel:[{0..1},{0..1},{0..1},{0..1}]
為具有 3 個來源運算元的指令選擇運算元位元。
範例
op_sel:[0,0]
op_sel:[0,1]
dpp_op_sel¶
這是 op_sel 的特殊版本,用於 permlane 運算碼,以指定類似 dpp 的模式位元 - fi 和 bound_ctrl。
語法
描述
op_sel:[{0..1},{0..1}]
第一個位元指定 fi,第二個位元指定 bound_ctrl。
範例
op_sel:[0,0]
clamp¶
Clamp 的含義取決於指令。
對於 v_cmp 指令,clamp 修飾符指示如果發生浮點異常,則發出訊號。預設情況下,訊號發出功能已停用。
對於整數運算,clamp 修飾符指示結果必須 clamp 到最大和最小可表示值。預設情況下,沒有 clamping。
對於浮點運算,clamp 修飾符指示結果必須 clamp 到範圍 [0.0, 1.0]。預設情況下,沒有 clamping。
注意:clamp 修飾符在 輸出修飾符(如果有)之後應用。
語法
描述
clamp
啟用 clamping(或訊號發出)。
omod¶
指定是否必須將輸出修飾符應用於結果。假設結果是浮點數。
預設情況下,不應用輸出修飾符。
注意:輸出修飾符在 clamping(如果有)之前應用。
語法
描述
mul:2
將結果乘以 2。
mul:4
將結果乘以 4。
div:2
將結果乘以 0.5。
範例
mul:2
mul:x // x must be equal to 2 or 4
VOP3 運算元修飾符¶
運算元修飾符不會單獨使用。它們應用於來源運算元。
abs¶
計算其運算元的絕對值。必須在 neg(如果有)之前應用。僅對浮點運算元有效。
語法
描述
abs(<operand>)
取得浮點運算元的絕對值。
|<operand>|
與上述相同(SP3 語法)。
注意:避免將 SP3 語法與指定為表達式的運算元一起使用,因為尾隨的 ‘|’ 可能會被誤解。此類運算元應括在額外的括號中,如下例所示。
範例
abs(v36) |v36| abs(x|y) // ok |(x|y)| // additional parentheses are required
neg¶
計算其運算元的負值。必須在 abs(如果有)之後應用。僅對浮點運算元有效。
語法
描述
neg(<operand>)
取得浮點運算元的負值。可選的 abs 修飾符可以在否定之前應用於運算元。
-<operand>
與上述相同(SP3 語法)。
注意:由於潛在的歧義,SP3 語法受到限制地支援。目前,在以下情況下允許使用
在所有其他情況下,“-” 都被視為表達式的一部分,該表達式跟在符號後面。
範例
// Operands with negate modifiers neg(v[0]) neg(1.0) neg(abs(v0)) -v5 -abs(v5) -|v5| // Expressions where "-" has a different meaning -1 -x+y
VOP3P 修飾符¶
本節介紹常規 VOP3P 指令的修飾符。
v_mad_mix* 和 v_fma_mix* 指令以特殊方式使用這些修飾符。
op_sel¶
選擇低 [15:0] 或高 [31:16] 運算元位元作為運算的輸入,這會導致目的地的下半部分。預設情況下,所有運算元都使用低 16 位元。
由 op_sel 修飾符指定的值數量必須與來源運算元的數量相符。第一個值控制 src0,第二個值控制 src1,依此類推。
值 0 選擇低位元,而 1 選擇高位元。
語法
描述
op_sel:[{0..1}]
為具有 1 個來源運算元的指令選擇運算元位元。
op_sel:[{0..1},{0..1}]
為具有 2 個來源運算元的指令選擇運算元位元。
op_sel:[{0..1},{0..1},{0..1}]
為具有 3 個來源運算元的指令選擇運算元位元。
範例
op_sel:[0,0]
op_sel:[0,1,0]
op_sel_hi¶
選擇低 [15:0] 或高 [31:16] 運算元位元作為運算的輸入,這會導致目的地的上半部分。預設情況下,所有運算元都使用高 16 位元。
由 op_sel_hi 修飾符指定的值數量必須與來源運算元的數量相符。第一個值控制 src0,第二個值控制 src1,依此類推。
值 0 選擇低位元,而 1 選擇高位元。
語法
描述
op_sel_hi:[{0..1}]
為具有 1 個來源運算元的指令選擇運算元位元。
op_sel_hi:[{0..1},{0..1}]
為具有 2 個來源運算元的指令選擇運算元位元。
op_sel_hi:[{0..1},{0..1},{0..1}]
為具有 3 個來源運算元的指令選擇運算元位元。
範例
op_sel_hi:[0,0]
op_sel_hi:[0,0,1]
neg_lo¶
指定是否更改由 op_sel 選取的運算元值的符號。這些值隨後用作運算的輸入,這會導致目的地的上半部分。
由此修飾符指定的值數量必須與來源運算元的數量相符。第一個值控制 src0,第二個值控制 src1,依此類推。
值 0 表示使用對應的運算元值未修改,值 1 表示必須使用運算元的負值。
預設情況下,運算元值未修改地使用。
此修飾符僅對浮點運算元有效。
語法
描述
neg_lo:[{0..1}]
為具有 1 個來源運算元的指令選擇受影響的運算元。
neg_lo:[{0..1},{0..1}]
為具有 2 個來源運算元的指令選擇受影響的運算元。
neg_lo:[{0..1},{0..1},{0..1}]
為具有 3 個來源運算元的指令選擇受影響的運算元。
範例
neg_lo:[0]
neg_lo:[0,1]
neg_hi¶
指定是否更改由 op_sel_hi 選取的運算元值的符號。這些值隨後用作運算的輸入,這會導致目的地的上半部分。
由此修飾符指定的值數量必須與來源運算元的數量相符。第一個值控制 src0,第二個值控制 src1,依此類推。
值 0 表示使用對應的運算元值未修改,值 1 表示必須使用運算元的負值。
預設情況下,運算元值未修改地使用。
此修飾符僅對浮點運算元有效。
語法
描述
neg_hi:[{0..1}]
為具有 1 個來源運算元的指令選擇受影響的運算元。
neg_hi:[{0..1},{0..1}]
為具有 2 個來源運算元的指令選擇受影響的運算元。
neg_hi:[{0..1},{0..1},{0..1}]
為具有 3 個來源運算元的指令選擇受影響的運算元。
範例
neg_hi:[1,0]
neg_hi:[0,1,1]
clamp¶
請參閱此處的描述。
VOP3P MAD_MIX/FMA_MIX 修飾符¶
v_mad_mix* 和 v_fma_mix* 指令以與常規 VOP3P 指令不同的方式使用 op_sel 和 op_sel_hi 修飾符。
請參閱以下描述。
m_op_sel¶
此運算元僅對 16 位元來源運算元有意義,如 m_op_sel_hi 所示。它指定選擇低 [15:0] 或高 [31:16] 運算元位元作為運算的輸入。
由 op_sel 修飾符指定的值數量必須與來源運算元的數量相符。第一個值控制 src0,第二個值控制 src1,依此類推。
值 0 表示低位元,值 1 表示高 16 位元。
預設情況下,所有運算元都使用低位元。
語法
描述
op_sel:[{0..1},{0..1},{0..1}]
選擇每個 16 位元來源運算元的位置。
範例
op_sel:[0,1]
m_op_sel_hi¶
選擇來源運算元的大小:32 位元或 16 位元。預設情況下,所有來源運算元都使用 32 位元。
由 op_sel_hi 修飾符指定的值數量必須與來源運算元的數量相符。第一個值控制 src0,第二個值控制 src1,依此類推。
值 0 表示 32 位元,值 1 表示 16 位元。
運算元中 16 位元的位置可以由 m_op_sel 指定。
語法
描述
op_sel_hi:[{0..1},{0..1},{0..1}]
選擇每個來源運算元的大小。
範例
op_sel_hi:[1,1,1]
abs¶
請參閱此處的描述。
neg¶
請參閱此處的描述。
clamp¶
請參閱此處的描述。
VOP3P MFMA 修飾符¶
cbsz¶
指定廣播模式。
語法
描述
cbsz:[{0..7}]
廣播模式。
abid¶
指定矩陣 A 群組選擇。
語法
描述
abid:[{0..15}]
矩陣 A 群組選擇 id。
blgp¶
指定矩陣 B lane 群組模式。
語法
描述
blgp:[{0..7}]
矩陣 B lane 群組模式。
neg¶
指示在運算之前必須否定的運算元。由此修飾符指定的值數量必須與來源運算元的數量相符。第一個值控制 src0,第二個值控制 src1,依此類推。
值 0 表示使用對應的運算元值未修改,值 1 表示在運算之前必須否定運算元值。
預設情況下,運算元值未修改地使用。
語法
描述
neg:[{0..1},{0..1},{0..1}]
選擇在運算之前必須否定的運算元。
範例
neg:[0,1,1]