sra
lyszt.net aborda sra e outras instruções RISC-V com mais detalhes.
Formato de codificação
Descrição
sra é o segundo deslocamento à direita, ao lado de srl. O nome significa shift right arithmetic (deslocamento aritmético à direita). A forma abaixo desloca rs1 para a direita pela quantidade contida em rs2.
sra rd, rs1, rs2
Como qualquer deslocamento à direita, ele move os bits em direção à extremidade inferior e descarta os que caem. Seu tratamento das posições superiores vazias difere do srl.
O RISC-V usa um esquema com sinal no qual o bit superior marca o sinal, e um 1 ali significa que o número é negativo. O srl preenche o topo com 0s, o que apaga o marcador de sinal e transforma um número negativo em um grande número positivo. O sra preenche o topo com cópias do bit de sinal existente, então o preenchimento é de 1s para um número negativo e de 0s para um positivo. O número mantém seu sinal.
sra divide um número com sinal por uma potência de dois. Um deslocamento de 1 o divide pela metade, um deslocamento de 3 o divide por 8, e números negativos permanecem negativos. O resultado arredonda para baixo, em direção ao valor mais negativo, então -7 deslocado à direita por 1 dá -4, enquanto a instrução div dá -3. Código de gráficos e áudio geralmente aceita o arredondamento para baixo.
O manual do RISC-V mantém a quantidade de deslocamento nos 5 bits inferiores do registrador rs2. Cinco bits cobrem 0 a 31 posições, então os outros bits de rs2 não têm efeito. O manual descreve sra como um deslocamento aritmético à direita, que copia o bit de sinal original para os bits superiores vagos.
Use sra para números com sinal e srl para padrões de bits brutos ou números que nunca são negativos. Para uma quantidade fixa, use a forma constante srai.
Exemplo
li t0, -8 li t1, 1 sra t2, t0, t1 # t2 = -4 (sign-filled)
