xori
lyszt.netはxoriおよびその他のRISC-V命令をより詳しく扱っています。
エンコーディング形式
説明
xori は定数とのビット単位 XOR を実行します。andi と ori とともに、即値論理命令を完成させます。i は即値 (immediate) を意味します。つまり命令にエンコードされた固定値であり、2 つ目のレジスタは不要です。XOR は 2 つのビットが異なるとき、そのビット位置で 1 を返します (xor ページを参照)。定数マスクが与えられたとき、マスクの 1 は対応するビットを反転させ、0 はそのビットを変更しません。
xori の構文を以下に示します。rs1 の値と定数 imm を XOR し、結果を rd に書き込みます。
xori rd, rs1, imm
andi は選択したビットをクリアし、ori はそれらをセットし、xori はそれらを反転させます。2 回反転すると元の値に戻ります。
xori は not 命令も提供します。値のすべてのビットを反転させることは、すべて 1 のマスクとの XOR を意味し、not は以下の行の省略形です。なぜならビットで -1 はすべて 1 だからです。RISC-V にはすべてのビットを反転させる専用命令はありません。
xori rd, rs, -1
RISC-V マニュアルには、12 ビットの即値は演算の前に 32 ビットに符号拡張されると記載されているため、定数 -1 はすべて 1 のマスクになります。マニュアルは定数 -1 を伴う xori をレジスタのビット単位論理反転として挙げており、これが not 疑似命令です。
よくある小さな用途は、0 または 1 として保持される yes または no の値をトグルすることです。次の行は、実行されるたびにそれを反対の状態に切り替えます。
xori t0, t0, 1
定数は 12 ビットに制限されています。より広いパターンには、マスクをレジスタにロードして xor を使用してください。
例
li t0, 0 xori t1, t0, -1 # t1 = -1 (every bit flipped)
