seqzpseudo

seqz

pseudo
Ensamblador RISC-V Referencia

lyszt.net cubre seqz y otras instrucciones RISC-V con más detalle.

Descripción

seqz comprueba si un registro contiene cero. El nombre significa "set if equal to zero" (establecer si es igual a cero). Cuando el registro fuente rs es cero, la forma siguiente escribe 1 en el registro destino rd, y 0 cuando rs contiene cualquier otro valor.

seqz rd, rs

La salida es 1 o 0, respondiendo si el valor es cero.

seqz es una pseudoinstrucción: un nombre legible que el ensamblador reescribe como una instrucción real. El resultado es la instrucción siguiente, que pregunta si el valor es menor que 1.

sltiu rd, rs, 1

Entre los números sin signo, 0 es el único valor menor que 1. Tú escribes seqz, y el ensamblador realiza la traducción.

Ninguna instrucción de RISC-V pregunta si dos valores son iguales, así que seqz se usa para construir pruebas de igualdad. Aplica XOR a los dos valores, lo que da cero cuando coinciden y un resultado distinto de cero cuando difieren, y luego aplica seqz a ese resultado. Un 1 significa que los originales eran iguales. La página de xor explica por qué XOR detecta la igualdad.

El manual de RISC-V define seqz como una pseudoinstrucción del ensamblador para sltiu con la constante 1, que establece rd a 1 si rs1 es igual a cero y a 0 en caso contrario.

seqz también invierte el sentido de un valor verdadero o falso. Un registro que contiene 0 se convierte en 1, y cualquier valor distinto de cero se convierte en 0. La respuesta es un número ordinario, así que puede alimentar más aritmética, por ejemplo multiplicándolo para anular un valor según una condición. Su contraparte es snez, que comprueba si es distinto de cero.

Se expande a

sltiu rd, rs, 1

El ensamblador reemplaza esta pseudoinstrucción con la instrucción o instrucciones reales enumeradas arriba.

Ejemplo

li t0, 0
seqz t1, t0       # t1 = 1