seqz
pseudolyszt.net tratta seqz e altre istruzioni RISC-V in modo più dettagliato.
Descrizione
seqz verifica se un registro contiene zero. Il nome significa "set if equal to zero" (imposta a uno se uguale a zero). Quando il registro sorgente rs è zero, la forma seguente scrive 1 nel registro di destinazione rd, e 0 quando rs contiene qualsiasi altro valore.
seqz rd, rs
L'output è 1 o 0, rispondendo alla domanda se il valore è zero.
seqz è una pseudoistruzione: un nome leggibile che l'assembler riscrive in un'istruzione reale. Il risultato è l'istruzione seguente, che chiede se il valore è inferiore a 1.
sltiu rd, rs, 1
Tra i numeri senza segno, 0 è l'unico valore inferiore a 1. Si scrive seqz, e l'assembler esegue la traduzione.
Nessuna istruzione RISC-V chiede se due valori sono uguali, quindi seqz viene usato per costruire test di uguaglianza. Esegui lo XOR dei due valori, che dà zero quando coincidono e un risultato diverso da zero quando differiscono, poi applica seqz a quel risultato. Un 1 significa che gli originali erano uguali. La pagina xor spiega perché lo XOR rileva l'uguaglianza.
Il manuale RISC-V definisce seqz come una pseudoistruzione dell'assembler per sltiu con la costante 1, che imposta rd a 1 se rs1 è uguale a zero e a 0 altrimenti.
seqz inverte anche il senso di un valore vero o falso. Un registro contenente 0 diventa 1, e qualsiasi valore diverso da zero diventa 0. La risposta è un numero ordinario, quindi può alimentare ulteriori calcoli aritmetici, ad esempio moltiplicandolo per azzerare un valore sotto una condizione. La sua controparte è snez, che verifica se il valore è diverso da zero.
Si espande in
sltiu rd, rs, 1
L'assembler sostituisce questa pseudoistruzione con la o le istruzioni reali elencate sopra.
Esempio
li t0, 0 seqz t1, t0 # t1 = 1
