slli
lyszt.net aborda slli e outras instruções RISC-V com mais detalhes.
Formato de codificação
Descrição
slli desloca os bits para a esquerda por uma quantidade fixa. A operação corresponde a sll: os bits deslizam para a esquerda, zeros preenchem o lado direito, os bits que ultrapassam a borda esquerda são perdidos, e cada posição movida dobra o valor (a página sll cobre a mecânica). A instrução mantém a distância de deslocamento como uma constante, então nenhum registrador a fornece. O i significa imediato, que é o termo para uma constante escrita na instrução.
A forma de slli aparece abaixo, onde amount é um número fixo de 0 a 31.
slli rd, rs1, amount
A próxima linha desloca t0 para a esquerda em 3 posições, o que o multiplica por 8.
slli t1, t0, 3
Arrays tornam esta instrução comum. Um valor de 32 bits em um array ocupa 4 bytes, então o item número i fica a i vezes 4 bytes do início, e um deslocamento à esquerda por 2 multiplica por 4. O padrão usual desloca o índice para produzir um deslocamento em bytes, adiciona o endereço inicial do array, e então carrega o valor. Identificar essa sequência de deslocamento, adição e carregamento ajuda ao ler assembly escrito por outros.
O manual do RISC-V codifica deslocamentos por uma constante como uma especialização do formato tipo I, um dos layouts de instrução padrão. rs1 contém o operando a ser deslocado, e os 5 bits inferiores do campo imediato contêm a quantidade de deslocamento. slli realiza um deslocamento lógico à esquerda, e zeros entram nos bits inferiores.
Use slli quando a distância de deslocamento é conhecida enquanto você escreve o código. Use sll quando a quantidade é calculada enquanto o programa executa. O exemplo desloca 5 para a esquerda em 3, o que dá 5 vezes 8, ou 40.
Exemplo
li t0, 5 slli t1, t0, 3 # t1 = 5 << 3 = 40 (5 * 8)
