neg
疑似lyszt.netはnegおよびその他のRISC-V命令をより詳しく扱っています。
説明
neg は数値の符号を反転します。5 は -5 になり、-5 は 5 になります。この名前は negate を短縮したものです。以下の形式は、ソースレジスタ rs の否定をデスティネーションレジスタ rd に配置します。
neg rd, rs
neg は疑似命令です。アセンブラは、読みやすい名前である疑似命令を、プロセッサがそれを処理する前に 1 つ以上の実際の命令に書き換えます。neg は以下の命令になり、これは数値を、常に 0 を保持する特殊レジスタである zero から減算します。
sub rd, zero, rs
0 から x を引くと -x になるため、これで否定が生成されます。RISC-V は、このように減算とゼロレジスタを再利用することで、実際の命令のセットを小さく保っています。
負の数の範囲は正の範囲より 1 段階だけ広がっています。約 -21 億に達し、正の側は約 +21 億までしかありません。最も負の数には正の対応する値がないため、それを否定するとラップアラウンドして同じ数になります。絶対値を計算するコードはこのケースを考慮しなければなりません。
RISC-V マニュアルは sub を rs1 から rs2 を減算するものと定義し、ここでは zero と呼ばれるレジスタ x0 を、すべてのビットが 0 である値にハードワイヤードされているものとして説明しています。x0 から値を減算するとその負の値が生成され、これが neg が変換される形式です。
この例では 5 を -5 に否定します。数値がすでに正の場合に neg をスキップする分岐と組み合わせることで、通常の 2 命令の絶対値が生成されます。
展開先
sub rd, zero, rs
アセンブラはこの疑似命令を、上記に示された実際の命令または複数の命令に置き換えます。
例
li t0, 5 neg t1, t0 # t1 = -5
電子
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.2, Integer Register-Register Instructions, page 29.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.1, Programmers' Model for Base Integer ISA, page 23.
