seqz
pseudolyszt.net couvre seqz et d'autres instructions RISC-V plus en détail.
Description
seqz teste si un registre contient zéro. Le nom signifie « set if equal to zero » (mettre à un si égal à zéro). Lorsque le registre source rs vaut zéro, la forme ci-dessous écrit 1 dans le registre de destination rd, et 0 lorsque rs contient toute autre valeur.
seqz rd, rs
Le résultat est 1 ou 0, répondant à la question de savoir si la valeur est zéro.
seqz est une pseudo-instruction : un nom lisible que l'assembleur réécrit en une instruction réelle. Le résultat est l'instruction ci-dessous, qui demande si la valeur est inférieure à 1.
sltiu rd, rs, 1
Parmi les nombres non signés, 0 est la seule valeur inférieure à 1. Vous écrivez seqz, et l'assembleur effectue la traduction.
Aucune instruction RISC-V ne demande si deux valeurs sont égales, donc seqz est utilisé pour construire des tests d'égalité. Faites un XOR des deux valeurs, ce qui donne zéro lorsqu'elles correspondent et un résultat non nul lorsqu'elles diffèrent, puis appliquez seqz à ce résultat. Un 1 signifie que les originales étaient égales. La page xor explique pourquoi XOR détecte l'égalité.
Le manuel RISC-V définit seqz comme une pseudo-instruction d'assembleur pour sltiu avec la constante 1, qui met rd à 1 si rs1 est égal à zéro et à 0 sinon.
seqz inverse aussi le sens d'une valeur vraie ou fausse. Un registre contenant 0 devient 1, et toute valeur non nulle devient 0. La réponse est un nombre ordinaire, donc elle peut alimenter d'autres calculs arithmétiques, par exemple en multipliant par elle pour annuler une valeur sous condition. Son pendant est snez, qui teste si la valeur est non nulle.
Se développe en
sltiu rd, rs, 1
L'assembleur remplace cette pseudo-instruction par la ou les instructions réelles listées ci-dessus.
Exemple
li t0, 0 seqz t1, t0 # t1 = 1
