notpseudo

not

pseudo
Assembleur RISC-V Référence

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

Description

not inverse tous les bits d'un registre. Un 0 devient 1, et un 1 devient 0. La forme ci-dessous lit le registre source rs, inverse les 32 bits et écrit le résultat dans le registre de destination rd. Cette opération est le complément bit à bit.

not rd, rs

not est une pseudo-instruction : un nom lisible que l'assembleur réécrit en une véritable instruction. Elle devient l'instruction ci-dessous, qui est un XOR avec un masque de tous les 1.

xori rd, rs, -1

XOR inverse un bit partout où le masque contient un 1, donc un masque de tous les 1 inverse tous les bits. La valeur -1 correspond à tous les bits à 1, c'est pourquoi elle fonctionne comme masque. RISC-V n'a pas d'instruction d'inversion dédiée car cette réécriture s'en charge.

not produit l'opposé d'un masque. Si un motif sélectionne certains bits, not produit le motif qui sélectionne le reste. Faire suivre not de and efface les bits nommés par le masque d'origine, ce qui désactive un ensemble de drapeaux.

Le manuel RISC-V définit not comme une pseudo-instruction d'assembleur pour xori avec la constante -1, et décrit ce xori comme une inversion logique bit à bit du registre rs1.

not et neg donnent des résultats différents. not inverse les bits, et neg inverse le signe. not de 5 vaut -6, et neg de 5 vaut -5. La trace du simulateur montre le xori qui s'exécute à la place de not.

Se développe en

xori rd, rs, -1

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

Exemple

li t0, 0
not t1, t0       # t1 = -1 (every bit flipped)