seqz
pseudolyszt.net aborda seqz e outras instruções RISC-V com mais detalhes.
Descrição
seqz testa se um registrador contém zero. O nome significa "set if equal to zero" (define como um se igual a zero). Quando o registrador de origem rs é zero, a forma abaixo escreve 1 no registrador de destino rd, e 0 quando rs contém qualquer outro valor.
seqz rd, rs
A saída é 1 ou 0, respondendo se o valor é zero.
seqz é uma pseudoinstrução: um nome legível que o montador reescreve como uma instrução real. O resultado é a instrução abaixo, que pergunta se o valor é menor que 1.
sltiu rd, rs, 1
Entre números sem sinal, 0 é o único valor menor que 1. Você escreve seqz, e o montador realiza a tradução.
Nenhuma instrução RISC-V pergunta se dois valores são iguais, então seqz é usado para construir testes de igualdade. Faça XOR dos dois valores, o que resulta em zero quando eles coincidem e um resultado diferente de zero quando diferem, depois aplique seqz a esse resultado. Um 1 significa que os originais eram iguais. A página xor explica por que o XOR detecta igualdade.
O manual RISC-V define seqz como uma pseudoinstrução de montador para sltiu com a constante 1, que define rd como 1 se rs1 for igual a zero e como 0 caso contrário.
seqz também inverte o sentido de um valor verdadeiro ou falso. Um registrador contendo 0 torna-se 1, e qualquer valor diferente de zero torna-se 0. A resposta é um número comum, então pode alimentar mais aritmética, por exemplo multiplicando por ele para zerar um valor sob uma condição. Sua contraparte é snez, que testa se o valor é diferente de zero.
Expande para
sltiu rd, rs, 1
O montador substitui esta pseudoinstrução pela instrução ou instruções reais listadas acima.
Exemplo
li t0, 0 seqz t1, t0 # t1 = 1
