hwreg

Bits d’un registre matériel auquel on est en train d’accéder.

Les bits de cet opérande signifient :

Bits

Description

Plage de valeurs

5:0

ID du registre.

0..63

10:6

Premier bit de décalage.

0..31

15:11

Taille en bits.

1..32

Cet opérande peut prendre plusieurs formes :

  • Un nombre entier ou une expression absolue. La valeur doit être comprise entre 0 et 0xFFFF.

  • Une valeur hwreg décrite ci-dessous.

    Syntaxe des valeurs hwreg

    Description

    hwreg({0..63})

    Tous les bits du registre associé à l”ID.

    hwreg(<nom>)

    Tous les bits du registre associé au nom.

    hwreg({0..63}, {0..31}, {1..32})

    Bits du registre associé à l”ID, le premier bit de décalage et la taille.

    hwreg(<nom>, {0..31}, {1..32})

    Bits du registre associé au nom, le premier bit de décalage et la taille.

Les valeurs numériques peuvent être renseignées sous la forme de nombre entiers positifs ou d”expressions absolues.

Les noms de registre prédéfinis comprennent :

Nom

Description

HW_REG_MODE

Bits en mode écriture du nuanceur (shader).

HW_REG_STATUS

Statut en lecture seule du nuanceur (shader).

HW_REG_TRAPSTS

Statut du piège.

HW_REG_HW_ID

ID de la vague, simd, unité de calcul, etc.

HW_REG_GPR_ALLOC

Allocation du SPGR et VGPR par vague.

HW_REG_LDS_ALLOC

Allocation LDS par vague.

HW_REG_IB_STS

Compteurs du nombre d’instructions en cours.

Exemples :

reg = 1
offset = 2
size = 4
hwreg_enc = reg | (offset << 6) | ((size - 1) << 11)

s_getreg_b32 s2, 0x1881
s_getreg_b32 s2, hwreg_enc                     // the same as above
s_getreg_b32 s2, hwreg(1, 2, 4)                // the same as above
s_getreg_b32 s2, hwreg(reg, offset, size)      // the same as above

s_getreg_b32 s2, hwreg(15)
s_getreg_b32 s2, hwreg(51, 1, 31)
s_getreg_b32 s2, hwreg(HW_REG_LDS_ALLOC, 0, 1)