snezpseudo

snez

pseudo
Assembleur RISC-V Référence

lyszt.net couvre snez et d'autres instructions RISC-V plus en détail.

Description

snez teste si un registre contient une valeur différente de zéro, l'inverse de seqz. Le nom signifie « set if not equal to zero » (mettre à 1 si différent de zéro). Lorsque rs est non nul, la forme ci-dessous écrit 1 dans rd, et lorsque rs est nul elle écrit 0.

snez rd, rs

snez est une pseudo-instruction, comme seqz, et l'assembleur la développe en une véritable instruction. Cette instruction demande si zéro est inférieur à la valeur.

sltu rd, zero, rs

Ceci est vrai pour toute valeur sauf zéro. L'assembleur effectue la traduction lorsque vous écrivez snez.

Un calcul produit souvent une valeur dont la seule propriété utile est de savoir si elle est nulle, comme un nombre d'éléments restants, la différence entre deux choses ou un groupe de drapeaux. snez réduit cette valeur à 1 lorsqu'elle est non nulle et à 0 lorsqu'elle est nulle, la forme standard pour une fonction qui renvoie une réponse par oui ou non.

Le manuel RISC-V définit snez comme une pseudo-instruction d'assembleur pour sltu avec x0 comme première source. Elle met rd à 1 si rs2 est différent de zéro et à 0 sinon.

snez fonctionne avec XOR pour tester l'inégalité. Appliquez un XOR aux deux valeurs, ce qui donne un résultat non nul uniquement lorsqu'elles diffèrent, puis appliquez snez pour obtenir 1 lorsqu'elles sont différentes. Avec seqz, cela produit un résultat vrai ou faux pour l'égalité et pour la non-égalité, que vous pouvez combiner avec and et or en conditions plus larges sans saut.

Se développe en

sltu rd, zero, rs

L'assembleur remplace cette pseudo-instruction par la ou les instructions réelles listées ci-dessus.

Exemple

li t0, 5
snez t1, t0       # t1 = 1