AMDGPU 指令修飾符語法

慣例

以下符號貫穿本文檔

符號

描述

{0..N}

從 0 到 N(包含)範圍內的任何整數值。

<x>

x 的語法和含義在其他地方解釋。

修飾符

DS 修飾符

offset0

指定第一個 8 位元偏移量,以位元組為單位。預設值為 0。

與需要兩個位址的 DS 指令一起使用。

語法

描述

offset0:{0..0xFF}

將一個無號 8 位元偏移量指定為正整數數字絕對表達式

範例

offset0:0xff
offset0:2-x
offset0:-x-y

offset1

指定第二個 8 位元偏移量,以位元組為單位。預設值為 0。

與需要兩個位址的 DS 指令一起使用。

語法

描述

offset1:{0..0xFF}

將一個無號 8 位元偏移量指定為正整數數字絕對表達式

範例

offset1:0xff
offset1:2-x
offset1:-x-y

offset

指定一個 16 位元偏移量,以位元組為單位。預設值為 0。

與需要單個位址的 DS 指令一起使用。

語法

描述

offset:{0..0xFFFF}

將一個無號 16 位元偏移量指定為正整數數字絕對表達式

範例

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:{0..4095}

將一個 12 位元無號偏移量指定為正整數數字絕對表達式

範例

offset:4095
offset:x-0xff

offset13s

指定一個立即帶號 13 位元偏移量,以位元組為單位。預設值為 0。

語法

描述

offset:{-4096..4095}

將一個 13 位元帶號偏移量指定為整數數字絕對表達式

範例

offset:-4000
offset:0x10
offset:-x

offset12s

指定一個立即帶號 12 位元偏移量,以位元組為單位。預設值為 0。

語法

描述

offset:{-2048..2047}

將一個 12 位元帶號偏移量指定為整數數字絕對表達式

範例

offset:-2000
offset:0x10
offset:-x+y

offset11

指定一個立即無號 11 位元偏移量,以位元組為單位。預設值為 0。

語法

描述

offset:{0..2047}

將一個 11 位元無號偏移量指定為正整數數字絕對表達式

範例

offset:2047
offset:x+0xff

dlc

請參閱此處的描述

glc

請參閱此處的描述

lds

請參閱此處的描述

slc

請參閱此處的描述

tfe

請參閱此處的描述

nv

請參閱此處的描述

sc0

請參閱此處的描述

sc1

請參閱此處的描述

nt

請參閱此處的描述

MIMG 修飾符

dmask

指定操作使用哪些通道(影像組件)。預設情況下,不使用任何通道。

語法

描述

dmask:{0..15}

將影像通道指定為正整數數字絕對表達式

每個位元對應於 4 個影像組件(RGBA)之一。

如果指定的位元值為 0,則不使用影像組件,而值 1 表示使用該組件。

此修飾符根據指令類型有一些限制

指令類型

有效的 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 位元位址。預設情況下,不使用位址。

不能與offenidxen 修飾符一起使用。

語法

描述

addr64

使用 64 位元位址。

offset12

指定一個立即無號 12 位元偏移量,以位元組為單位。預設值為 0。

語法

描述

offset:{0..0xFFF}

將一個 12 位元無號偏移量指定為正整數數字絕對表達式

範例

offset:x+y
offset:0x10

glc

請參閱此處的描述

slc

請參閱此處的描述

lds

請參閱此處的描述

dlc

請參閱此處的描述

tfe

請參閱此處的描述

fmt

指定操作使用的資料和數值格式。預設數值格式為 BUF_NUM_FORMAT_UNORM。預設資料格式為 BUF_DATA_FORMAT_8。

語法

描述

format:{0..127}

使用以整數數字絕對表達式指定的格式。

format:[<資料格式>]

使用指定的資料格式和預設數值格式。

format:[<數值格式>]

使用指定的數值格式和預設資料格式。

format:[<資料格式>,<數值格式>]

使用指定的資料和數值格式。

format:[<數值格式>,<資料格式>]

使用指定的資料和數值格式。

下表定義了支援的資料格式

語法

注意

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。

語法

描述

format:{0..127}

使用以整數數字絕對表達式指定的統一格式。請注意,統一格式數字與用於 pre-GFX10 ISA 的格式數字不相容。

format:[<統一格式>]

使用指定的統一格式。

統一格式是資料數值格式的替代品。為了與較舊的 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:{0..0xFFFFF}

將偏移量指定為正整數數字絕對表達式

範例

offset:1
offset:0xfffff
offset:x-y

offset21s

指定一個帶號 21 位元偏移量,以位元組為單位。預設值為 0。

語法

描述

offset:{-0x100000..0xFFFFF}

將偏移量指定為整數數字絕對表達式

範例

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:{0..15}

列遮罩指定為正整數數字絕對表達式

遮罩中的 4 個位元中的每一個都控制一列(0 - 停用,1 - 啟用)。

wave32 模式中,值應限制為 {0..7}。

範例

row_mask:0xf
row_mask:0b1010
row_mask:x|y

bank_mask

控制哪些 bank 啟用資料共享。預設情況下,所有 bank 都已啟用。

注意:wavefront 的 lane 排列成四個和四個bank。(在 wave32 模式中只有兩列。)

語法

描述

bank_mask:{0..15}

bank 遮罩指定為正整數數字絕對表達式

遮罩中的 4 個位元中的每一個都控制一個 bank(0 - 停用,1 - 啟用)。

範例

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:0bound_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 的模式位元 - fibound_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 語法受到限制地支援。目前,在以下情況下允許使用

  • 在暫存器之前。

  • abs 修飾符之前。

  • 在 SP3 abs 修飾符之前。

在所有其他情況下,“-” 都被視為表達式的一部分,該表達式跟在符號後面。

範例

// 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_selop_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]