sra
lyszt.net couvre sra et d'autres instructions RISC-V plus en détail.
Format d'encodage
Description
sra est le deuxième décalage à droite, à côté de srl. Le nom signifie « shift right arithmetic » (décalage arithmétique à droite). La forme ci-dessous décale rs1 vers la droite du nombre de positions indiqué dans rs2.
sra rd, rs1, rs2
Comme tout décalage à droite, il déplace les bits vers le poids faible et élimine ceux qui sortent. Son traitement des positions hautes libérées diffère de celui de srl.
RISC-V utilise un schéma signé dans lequel le bit de poids fort marque le signe, et un 1 à cet endroit signifie que le nombre est négatif. srl remplit le haut avec des 0, ce qui efface le marqueur de signe et transforme un nombre négatif en un grand nombre positif. sra remplit le haut avec des copies du bit de signe existant, donc le remplissage est constitué de 1 pour un nombre négatif et de 0 pour un nombre positif. Le nombre conserve son signe.
sra divise un nombre signé par une puissance de deux. Un décalage de 1 le divise par deux, un décalage de 3 le divise par 8, et les nombres négatifs restent négatifs. Le résultat arrondit vers le bas, vers la valeur la plus négative, donc -7 décalé à droite de 1 donne -4 tandis que l'instruction div donne -3. Le code graphique et audio accepte généralement cet arrondi vers le bas.
Le manuel RISC-V place la quantité de décalage dans les 5 bits de poids faible du registre rs2. Cinq bits couvrent 0 à 31 positions, donc les autres bits de rs2 n'ont aucun effet. Le manuel décrit sra comme un décalage arithmétique à droite, qui copie le bit de signe d'origine dans les bits supérieurs libérés.
Utilisez sra pour les nombres signés et srl pour les motifs de bits bruts ou les nombres qui ne sont jamais négatifs. Pour une quantité fixe, utilisez la forme constante srai.
Exemple
li t0, -8 li t1, 1 sra t2, t0, t1 # t2 = -4 (sign-filled)
