sltiu
lyszt.net aborda sltiu e outras instruções RISC-V com mais detalhes.
Formato de codificação
Descrição
sltiu combina slti e sltu. Ele compara um registrador com uma constante e trata ambos os valores como não assinados. O nome empilha as partes: set less than, immediate, unsigned. A forma abaixo escreve 1 em rd quando rs1 está abaixo da constante imm, com ambos lidos como números não negativos, e 0 caso contrário.
sltiu rd, rs1, imm
Não assinado, como na página sltu, significa que o bit mais significativo conta como um dígito comum do número, então o intervalo vai de 0 a cerca de 4 bilhões. sltiu lida com verificações de intervalo em valores que não podem ser negativos, como testar se um índice está abaixo do tamanho de um array, em uma única instrução.
A linha abaixo pergunta se o valor está abaixo de 1.
sltiu rd, rs, 1
Zero é o único valor não assinado abaixo de 1, então o resultado é 1 quando rs é zero e 0 caso contrário. Isso testa a igualdade com zero, e o atalho seqz é construído a partir disso. A igualdade entre dois valores decorre disso. Faça XOR dos dois valores, o que dá zero apenas quando eles coincidem, e teste o resultado em relação a zero.
O manual do RISC-V diz que a constante é primeiro estendida com sinal para 32 bits e então tratada como um número não assinado. Uma constante negativa, portanto, se torna um valor não assinado muito grande. O manual apresenta sltiu com a constante 1 como a maneira de testar zero, que é a pseudoinstrução seqz.
Assim como com slti, constantes além do intervalo de 12 bits são carregadas em um registrador com li e comparadas com sltu.
Exemplo
li t0, -1 sltiu t1, t0, 5 # t1 = 0 (t0 read as unsigned is huge)
