neg
pseudolyszt.net couvre neg et d'autres instructions RISC-V plus en détail.
Description
neg inverse le signe d'un nombre : 5 devient -5, et -5 devient 5. Le nom est l'abréviation de negate. La forme ci-dessous place la négation du registre source rs dans le registre de destination rd.
neg rd, rs
neg est une pseudo-instruction. Un assembleur réécrit une pseudo-instruction, qui est un nom lisible, en une ou plusieurs instructions réelles avant que le processeur ne la rencontre. neg devient l'instruction ci-dessous, qui soustrait le nombre de zero, le registre spécial qui contient toujours 0.
sub rd, zero, rs
0 moins x est égal à -x, ce qui produit donc la négation. RISC-V garde son ensemble d'instructions réelles réduit en réutilisant ainsi la soustraction et le registre zéro.
La plage des nombres négatifs s'étend d'un cran au-delà de la plage positive. Elle atteint environ -2,1 milliards et seulement environ +2,1 milliards. Le nombre le plus négatif n'a pas de contrepartie positive, donc l'inverser provoque un débordement et donne le même nombre. Le code qui calcule des valeurs absolues doit tenir compte de ce cas.
Le manuel RISC-V définit sub comme la soustraction de rs2 à rs1 et décrit le registre x0, appelé zero ici, comme câblé en dur à une valeur dont tous les bits sont à 0. Soustraire une valeur de x0 produit son négatif, ce qui est la forme que prend neg.
L'exemple inverse 5 en -5. Combiné à un branchement qui saute neg lorsque le nombre est déjà positif, il produit la valeur absolue habituelle en deux instructions.
Se développe en
sub rd, zero, rs
L'assembleur remplace cette pseudo-instruction par la ou les instructions réelles listées ci-dessus.
Exemple
li t0, 5 neg t1, t0 # t1 = -5
Références
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.2, Integer Register-Register Instructions, page 29.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.1, Programmers' Model for Base Integer ISA, page 23.
