sll
lyszt.net aborda sll e outras instruções RISC-V com mais detalhes.
Formato de codificação
Descrição
sll desloca os bits de um número para a esquerda. Um registrador contém 32 bits em sequência, e um deslocamento move toda a sequência para a esquerda ou para a direita por um certo número de posições. O nome significa shift left logical (deslocamento lógico para a esquerda). Na forma abaixo, o valor em rs1 é deslocado para a esquerda pelo número de posições indicado em rs2, e o resultado vai para rd.
sll rd, rs1, rs2
À medida que os bits se movem para a esquerda, zeros preenchem as posições vazias à direita, e os bits empurrados além da borda esquerda são descartados.
Um deslocamento para a esquerda de uma posição dobra um número, da mesma forma que acrescentar um 0 a um número decimal o multiplica por dez. Um deslocamento de 1 multiplica por 2, um deslocamento de 2 multiplica por 4, e um deslocamento de 3 multiplica por 8. Um deslocamento custa menos ao processador do que uma multiplicação, o que o torna o caminho rápido para multiplicar por potências de dois. O acesso a arrays depende disso, porque o endereço de cada elemento fica um número fixo de bytes, potência de dois, após o anterior.
De acordo com o manual do RISC-V, a quantidade de deslocamento é mantida nos 5 bits baixos do registrador rs2. Cinco bits cobrem de 0 a 31 posições, então os bits restantes de rs2 não têm efeito. O manual chama sll de deslocamento lógico para a esquerda, significando que zeros entram nos bits baixos.
Nesta forma, a quantidade de deslocamento vem de um registrador, o que se adequa a uma quantidade calculada enquanto o programa é executado. Use slli para uma quantidade fixa. O exemplo desloca 3 para a esquerda em 2 posições, multiplicando-o por 4 para dar 12.
Exemplo
li t0, 3 li t1, 2 sll t2, t0, t1 # t2 = 12
