sll
lyszt.net cubre sll y otras instrucciones RISC-V con más detalle.
Formato de codificación
Descripción
sll mueve los bits de un número hacia la izquierda. Un registro contiene 32 bits en una fila, y un desplazamiento mueve toda la fila hacia la izquierda o hacia la derecha una cierta cantidad de posiciones. El nombre significa shift left logical (desplazamiento lógico a la izquierda). En la forma que se muestra a continuación, el valor en rs1 se desplaza a la izquierda la cantidad de posiciones indicada en rs2, y el resultado va a rd.
sll rd, rs1, rs2
A medida que los bits se mueven hacia la izquierda, los ceros llenan las posiciones vacías de la derecha, y los bits que se desplazan más allá del borde izquierdo se descartan.
Un desplazamiento a la izquierda de una posición duplica un número, del mismo modo que añadir un 0 a un número decimal lo multiplica por diez. Un desplazamiento de 1 multiplica por 2, un desplazamiento de 2 multiplica por 4 y un desplazamiento de 3 multiplica por 8. Un desplazamiento le cuesta menos al procesador que una multiplicación, lo que lo convierte en la vía rápida para multiplicar por potencias de dos. El acceso a arrays depende de esto, porque la dirección de cada elemento se encuentra una cantidad fija de bytes, potencia de dos, más allá de la anterior.
Según el manual de RISC-V, la cantidad de desplazamiento se guarda en los 5 bits bajos del registro rs2. Cinco bits cubren de 0 a 31 posiciones, por lo que los bits restantes de rs2 no tienen efecto. El manual llama a sll un desplazamiento lógico a la izquierda, lo que significa que entran ceros en los bits bajos.
En esta forma la cantidad de desplazamiento proviene de un registro, lo que se ajusta a una cantidad calculada mientras el programa se ejecuta. Use slli para una cantidad fija. El ejemplo desplaza 3 a la izquierda 2 posiciones, multiplicándolo por 4 para dar 12.
Ejemplo
li t0, 3 li t1, 2 sll t2, t0, t1 # t2 = 12
