sll

sll

Assembleur RISC-V Référence

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

Format d'encodage

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

Description

sll décale les bits d'un nombre vers la gauche. Un registre contient 32 bits à la suite, et un décalage déplace toute la rangée vers la gauche ou la droite d'un certain nombre de positions. Le nom signifie shift left logical (décalage logique vers la gauche). Dans la forme ci-dessous, la valeur dans rs1 est décalée vers la gauche du nombre de places indiqué dans rs2, et le résultat va dans rd.

sll rd, rs1, rs2

À mesure que les bits se déplacent vers la gauche, des zéros remplissent les positions vides à droite, et les bits poussés au-delà du bord gauche sont perdus.

Un décalage vers la gauche d'une place double un nombre, de la même manière qu'ajouter un 0 à un nombre décimal le multiplie par dix. Un décalage de 1 multiplie par 2, un décalage de 2 multiplie par 4, et un décalage de 3 multiplie par 8. Un décalage coûte moins cher au processeur qu'une multiplication, ce qui en fait la voie rapide pour multiplier par des puissances de deux. L'accès aux tableaux repose sur ce principe, car l'adresse de chaque élément se trouve à un nombre fixe d'octets, puissance de deux, après la précédente.

Selon le manuel RISC-V, la quantité de décalage est contenue dans les 5 bits de poids faible du registre rs2. Cinq bits couvrent 0 à 31 places, donc les bits restants de rs2 n'ont aucun effet. Le manuel appelle sll un décalage logique vers la gauche, ce qui signifie que des zéros entrent dans les bits de poids faible.

Dans cette forme, la quantité de décalage provient d'un registre, ce qui convient à une quantité calculée pendant l'exécution du programme. Utilisez slli pour une quantité fixe. L'exemple décale 3 vers la gauche de 2 places, le multipliant par 4 pour donner 12.

Exemple

li t0, 3
li t1, 2
sll t2, t0, t1   # t2 = 12