xori
lyszt.net aborda xori e outras instruções RISC-V com mais detalhes.
Formato de codificação
Descrição
xori realiza XOR bit a bit com uma constante. Juntamente com andi e ori, ela completa as instruções lógicas com imediato. O i significa imediato: um valor fixo codificado na instrução, então um segundo registrador é desnecessário. XOR resulta em 1 em uma posição de bit quando os dois bits diferem (veja a página xor). Dada uma máscara constante, um 1 na máscara inverte o bit correspondente e um 0 deixa esse bit inalterado.
A sintaxe de xori aparece abaixo. Ela faz XOR do valor em rs1 com a constante imm e escreve o resultado em rd.
xori rd, rs1, imm
andi limpa bits selecionados, ori os define, e xori os inverte. Inverter duas vezes retorna o valor original.
xori também fornece a instrução not. Inverter todos os bits de um valor significa XOR com uma máscara de todos os 1s, e not é uma abreviação para a linha abaixo, porque -1 em bits é todos os 1s. RISC-V não tem uma instrução dedicada que inverta todos os bits.
xori rd, rs, -1
O manual do RISC-V afirma que o imediato de 12 bits é estendido com sinal para 32 bits antes da operação, então a constante -1 se torna uma máscara de todos os 1s. Ele lista xori com a constante -1 como a inversão lógica bit a bit de um registrador, que é a pseudoinstrução not.
Um uso pequeno comum alterna um valor sim ou não mantido como 0 ou 1. A linha seguinte o alterna para o outro estado sempre que é executada.
xori t0, t0, 1
A constante é limitada a 12 bits. Para padrões mais amplos, carregue a máscara em um registrador e use xor.
Exemplo
li t0, 0 xori t1, t0, -1 # t1 = -1 (every bit flipped)
