RISC-V命令リスト
RISC -V命令セットとは、RISC-V互換マイクロプロセッサがサポートする命令セットを指します。これらの命令は通常、実行可能プログラムの一部であり、多くの場合、コンピュータファイルとして保存され、プロセッサ上で実行されます。
RISC-V 整数命令
以下の表はRV整数命令の一覧です。[ 1 ]整数命令セットはISAのベースI部分に分かれており、32ビットRV32版と64ビットRV64版、そしてM、B、Zicond拡張版が用意されています。また、アトミック命令用のA拡張版と、浮動小数点演算用のFおよびD命令も用意されています。
| 命令 | 名前 | 形式 | 拡大 | RV64 |
|---|---|---|---|---|
| ポンド | バイトをロード | rd、imm12(rs) | 私 | |
| 左 | 半分をロード | rd、imm12(rs) | 私 | |
| 左 | 単語を読み込む | rd、imm12(rs) | 私 | |
| ld | ダブルロード | rd、imm12(rs) | 私 | × |
| lbu | ロードバイト(U) | rd、imm12(rs) | 私 | |
| ルフ | 半分をロード(U) | rd、imm12(rs) | 私 | |
| lwu | ワードをロード (U) | rd、imm12(rs) | 私 | × |
| sb | ストアバイト | rs1、imm12(rs2) | 私 | |
| シュ | ストアハーフ | rs1、imm12(rs2) | 私 | |
| sw | ストアワード | rs1、imm12(rs2) | 私 | |
| sd | ストアダブル | rs1、imm12(rs2) | 私 | × |
| 李 | 即時ロード | rd、imm | 私[注1 ] | |
| ルイ | 上位即値をロード | rd、imm20 | 私 | |
| auipc | プログラムカウンタに上位即値を加算する | rd、imm20 | 私 | |
| 動画 | 動く | rd、rs | 私[注2 ] | |
| セクストb | 符号拡張最下位バイトを移動 | rd、rs | B | |
| セクスト.h | 移動符号拡張最下位半分 | rd、rs | B | |
| セクストw | 移動符号拡張最下位ワード | rd、rs | 私[注2 ] | × |
| ゼクストb | ゼロを移動 EXTEND 最下位バイト | rd、rs | 私[注2 ] | |
| zext.h | ゼロを移動 EXTEND 最下位半分 | rd、rs | B | |
| ゼクスト | ゼロを移動 EXTEND 最下位ワード | rd、rs | B [注2 ] | × |
| rev8 | 逆バイト順で移動する | rd、rs | B | |
| czero.eqz | ゼロ条件付きゼロまたは移動 | rd、rs1、rs2 | ジコンド | |
| czero.nez | ゼロと等しくない条件付きゼロまたは移動 | rd、rs1、rs2 | ジコンド | |
| アディ | 即時追加 | rd、rs、imm12 | 私 | |
| 追加 | 追加 | rd、rs1、rs2 | 私 | |
| sh1add | シフト1 追加 | rd、rs1、rs2 | B | |
| sh2add | シフト2 追加 | rd、rs1、rs2 | B | |
| sh3add | シフト3 追加 | rd、rs1、rs2 | B | |
| 追加.wu | 単語の追加(Uを2倍にする) | rd、rs1、rs2 | B | × |
| sh1add.wu | SHift1 Word(U in double) 倍精度加算 | rd、rs1、rs2 | B | × |
| sh2add.wu | SHift2 Word(U in double) 倍精度加算 | rd、rs1、rs2 | B | × |
| sh3add.wu | SHift3 Word(U in double) 倍精度加算 | rd、rs1、rs2 | B | × |
| アディウ | 単語を単語に即時追加 | rd、rs、imm12 | 私 | × |
| 追加 | 単語を追加 | rd、rs1、rs2 | 私 | × |
| サブ | 減算 | rd、rs1、rs2 | 私 | |
| サブw | 単語の減算 | rd、rs1、rs2 | 私 | × |
| 否定的 | ネガティブ。 | rd、rs | 私[注2 ] | |
| ネガティブ | 否定語 | rd、rs | 私[注2 ] | × |
| マル | マルチプライ | rd、rs1、rs2 | M | |
| マルウ | 単語の掛け算 | rd、rs1、rs2 | M | × |
| マルチ | 高い部分を乗算する | rd、rs1、rs2 | M | |
| ムルフ | 上位部分を符号なし乗算する | rd、rs1、rs2 | M | |
| ムルス | 上位部分を符号なしと符号付きの乗算 | rd、rs1、rs2 | M | |
| 分割 | 分ける | rd、rs1、rs2 | M | |
| divu | 割り算(U) | rd、rs1、rs2 | M | |
| レム | 残り | rd、rs1、rs2 | M | |
| レム | 残り(U) | rd、rs1、rs2 | M | |
| 分 | 最小 | rd、rs1、rs2 | B | |
| 最大 | 最大 | rd、rs1、rs2 | B | |
| マイナス | 最小値(U) | rd、rs1、rs2 | B | |
| マクシュ | マキシマム(U) | rd、rs1、rs2 | B | |
| シーケンス | EQual to Zeroのときにビットを設定する | rd、rs | 私[注2 ] | |
| くしゃみ | ゼロと等しくない場合にビットを設定する | rd、rs | 私[注2 ] | |
| slti | 即値未満の場合にビットを設定する | rd、rs、imm12 | 私 | |
| slt | より小さい場合にビットを設定する | rd、rs1、rs2 | 私 | |
| sltiu | 即値未満の場合にビットを設定する(U) | rd、rs、imm12 | 私 | |
| sltu | より小さい場合にビットを設定する (U) | rd、rs1、rs2 | 私 | |
| ベクスティ | ビット抽出即時 | rd、rs、imm5/6 | B | |
| 次へ | ビット抽出 | rd、rs1、rs2 | B | |
| アンディ | そして即時 | rd、rs、imm12 | 私 | |
| そして | そして | rd、rs1、rs2 | 私 | |
| そして | そして、そうではない | rd、rs1、rs2 | B | |
| bclri | ビットCLeaR即時 | rd、rs、imm5/6 | B | |
| bclr | ビットクリア | rd、rs1、rs2 | B | |
| オリ | または即時 | rd、rs、imm12 | 私 | |
| または | または | rd、rs1、rs2 | 私 | |
| オーン | か否か | rd、rs1、rs2 | B | |
| ブセティ | ビットSET即時 | rd、rs、imm5/6 | B | |
| bset | ビットセット | rd、rs1、rs2 | B | |
| ゾリ | 排他的論理和即時 | rd、rs、imm12 | 私 | |
| xor | 排他的論理和 | rd、rs1、rs2 | 私 | |
| xnor | XORではない | rd、rs1、rs2 | B | |
| ビンビ | ビット反転即時 | rd、rs、imm5/6 | B | |
| ビンヴ | ビット反転 | rd、rs1、rs2 | B | |
| ない | ない | rd、rs | 私[注2 ] | |
| オーク.b | またはバイト内で結合 | rd、rs | B | |
| スリ | 論理即値左シフト | rd、rs、imm5/6 | 私 | |
| sll | 左シフト論理 | rd、rs1、rs2 | 私 | |
| ゆっくりと | 論理ワードの左シフト(即値) | rd、rs、imm5 | 私 | × |
| sllw | 論理ワードを左にシフト | rd、rs1、rs2 | 私 | × |
| slli.wu | 論理ワードの左シフト(doubleのU)即値 | rd、rs、imm5/6 | 私 | × |
| srli | 右シフト論理即値 | rd、rs、imm5/6 | 私 | |
| srl | 右シフト論理 | rd、rs1、rs2 | 私 | |
| srliw | 論理ワードの右シフト即値 | rd、rs、imm5 | 私 | × |
| srlw | 論理ワードを右にシフト | rd、rs1、rs2 | 私 | × |
| スライ | 右シフト算術即値 | rd、rs、imm5/6 | 私 | |
| スラ | 右シフト演算 | rd、rs1、rs2 | 私 | |
| スライウ | 右シフト算術ワード即値 | rd、rs、imm5 | 私 | × |
| 生の | 算術ワードの右シフト | rd、rs1、rs2 | 私 | × |
| ロリ | 右に即時回転 | rd、rs、imm5/6 | B | |
| ロー | 右回転 | rd、rs1、rs2 | B | |
| ロール | 左に回転 | rd、rs1、rs2 | B | |
| ロリウ | 右回転(即時単語) | rd、rs、imm5 | B | × |
| ロウ | 単語を右に回転 | rd、rs1、rs2 | B | × |
| ロール | 単語を左に回転 | rd、rs1、rs2 | B | × |
| クルズ | 先頭のゼロを数える | rd、rs | B | |
| クリズ | Wordの先頭のゼロを数える | rd、rs | B | × |
| ctz | 末尾のゼロを数える | rd、rs | B | |
| ctzw | Wordで末尾のゼロを数える | rd、rs | B | × |
| cポップ | 1の人口を数える | rd、rs | B | |
| cpopw | Wordで1の個数を数える | rd、rs | B | × |
| j | ジャンプ | ラベル | 私[注2 ] | |
| JAL | ジャンプアンドリンク | rd、imm20 | 私 | |
| ジュニア | ジャンプレジスタ | rs [, imm12] | 私[注2 ] | |
| ジャール | ジャンプアンドリンク登録 | rd rs [, imm12] | 私 | |
| 電話 | 電話 | シンボル | 私[注3 ] | |
| しっぽ | TAILコール | シンボル | 私[注4 ] | |
| ret | 戻る | - | 私[注5 ] | |
| ベック | ブランチ == | rs1、rs2、ラベル | 私 | |
| bne | ブランチ != | rs1、rs2、ラベル | 私 | |
| blt | ブランチ < | rs1、rs2、ラベル | 私 | |
| bgt | 支店 > | rs1、rs2、ラベル | 私[注2 ] | |
| bge | ブランチ >= | rs1、rs2、ラベル | 私 | |
| ble | ブランチ <= | rs1、rs2、ラベル | 私[注2 ] | |
| bltu | ブランチ < (U) | rs1、rs2、ラベル | 私 | |
| bgtu | ブランチ > (U) | rs1、rs2、ラベル | 私[注2 ] | |
| bgeu | ブランチ >= (U) | rs1、rs2、ラベル | 私 | |
| ブルー | ブランチ <= (U) | rs1、rs2、ラベル | 私[注2 ] | |
| いいえ | 操作なし | - | 私 | |
| 呼び出し | 環境コール | - | 私 | |
| ブレーク | 環境ブレイク | - | 私 | |
備考
- ^アセンブラマクロ、12ビット未満の即値が必要な場合は、addi rd zero imm に展開されます。
- ^ a b c d e f g h i j k l m n o疑似命令。単一命令に展開されます。
- ^アセンブラマクロ ra を上書きする。ローダーシンボルの再配置と相互作用する。jal ra, imm または auipc ra, imm; jalr ra, ra imm の組み合わせに展開される。
- ^アセンブラマクロ。t1 を上書きする可能性があります。ローダーシンボルの再配置と相互作用します。jal zero imm または auipc t1, imm; jalr zero t1, imm の組み合わせに展開されます。
- ^ raを上書きする擬似命令。jal zero, ra, 0に展開される。
参照
参考文献
- ^ 「RISC-V命令セットマニュアル 第1巻」(PDF) . RISC-V. 2024年4月11日. 2025年2月4日閲覧。