sltu
lyszt.net aborda sltu e outras instruções RISC-V com mais detalhes.
Formato de codificação
Descrição
sltu define o registrador de destino como 1 ou 0, assim como slt, e compara dois números como valores sem sinal. O nome significa set less than, unsigned. A página slt aborda o armazenamento de um resultado de comparação como 1 ou 0.
Os mesmos 32 bits podem ser lidos como um número com sinal, com o bit mais significativo indicando negativo e um intervalo de aproximadamente -2 bilhões a +2 bilhões, ou como um número sem sinal, sem negativos e com um intervalo de 0 a cerca de 4 bilhões. slt lê o valor com sinal e sltu lê o sem sinal. Um registrador com todos os bits definidos como 1 é -1 para slt e o maior valor possível para sltu, então as duas instruções podem discordar em entradas idênticas.
Use sltu para quantidades que não podem ser negativas, como endereços de memória, tamanhos, contagens e posições. Comparar dois endereços de memória com o slt com sinal dá um resultado errado quando um endereço é grande o suficiente para definir seu bit mais significativo, já que a leitura com sinal o trata como negativo.
O manual do RISC-V descreve slt e sltu juntos como as comparações com e sem sinal que escrevem 1 em rd se rs1 for menor que rs2 e 0 caso contrário. Ele fornece a linha abaixo como a maneira de testar se é diferente de zero, que é a pseudoinstrução snez.
sltu rd, x0, rs2
A forma de sltu é mostrada abaixo.
sltu rd, rs1, rs2
No caso especial abaixo, rd se torna 1 sempre que rs for qualquer coisa diferente de zero, já que 0 é menor que qualquer outro valor sem sinal. Isso reduz qualquer número a 1 ou 0.
sltu rd, zero, rs
Exemplo
li t0, -1 li t1, 1 sltu t2, t0, t1 # t2 = 0 (t0 read as unsigned is huge)
