これは RISC-V Instruction Set Manual Volume 2, Privileged Spec v. 20211203 の二次的著作物です。 この 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。
-
-
Save kotet/bef84a682e4aff7a8a5e51a2bbe64379 to your computer and use it in GitHub Desktop.
Svinval拡張はハイパフォーマンス実装の一定のクラスにおいてバッチ化/パイプライン化をより効率的にするためにSFENCE.VMA
, HFENCE.VMA
,HFENCE.GVMA
命令をより細粒度のインバリデーション/オーダリング操作に分割する。
31 .. 25 | 24 .. 20 | 19 .. 15 | 14 .. 12 | 11 .. 7 | 6 .. 0 |
---|---|---|---|---|---|
funct7 | rs2 | rs1 | funct3 | rd | opcode |
SINVAL.VMA | asid | vaddr | PRIV | 0 | SYSTEM |
SINVAL.VMA
命令はアドレス変換キャッシュエントリを、SFENCE.VMA
命令を同様のrs1,rs2で実行したときにインバリデートされるのと同じものをインバリデートする。
しかし、SFENCE.VMA
と違い、SINVAL.VMA
命令はSFENCE.VMA
や、後述するSFENCE.W.INVAL
, SFENCE.INVAL.IR
命令のみに順序付けられる。
31 .. 25 | 24 .. 20 | 19 .. 15 | 14 .. 12 | 11 .. 7 | 6 .. 0 |
---|---|---|---|---|---|
funct7 | rs2 | rs1 | funct3 | rd | opcode |
SFENCE.INVAL | 0 | 0 | PRIV | 0 | SYSTEM |
31 .. 25 | 24 .. 20 | 19 .. 15 | 14 .. 12 | 11 .. 7 | 6 .. 0 |
---|---|---|---|---|---|
funct7 | rs2 | rs1 | funct3 | rd | opcode |
SFENCE.INVAL.IR | 1 | 0 | PRIV | 0 | SYSTEM |
SFENCE.W.INVAL
命令は現在のRISC-V hartから可視である任意のストアが、同じhartでそれに続いて実行されるSINVAL.VMA
命令より前に順序付けられることを保証する。
SFENCE.INVAL.IR
命令は現在のhartで実行されたSINVAL.VMA
命令がそれに続くメモリ管理データ構造への暗黙的参照よりも前に順序付けられることを保証する。
1つのhartにおいてインオーダーで(ただし連続である必要はない)実行された時、SFENCE.W.INVAL
, SINVAL.VMA
, SFENCE.INVAL.IR
の命令列は以下のようなSFENCE.VMA
命令と同じ効果を持つ。
- rs1とrs2の値は
SFENCE.VMA
とSINVAL.VMA
で同じように使われる SFENCE.W.INVAL
より前の読み書きはそのようなSFENCE.VMA
の前にあると扱われ、SFENCE.INVAL.IR
に続く読み書きはそのようなSFENCE.VMA
より後にあると扱われる。
31 .. 25 | 24 .. 20 | 19 .. 15 | 14 .. 12 | 11 .. 7 | 6 .. 0 |
---|---|---|---|---|---|
funct7 | rs2 | rs1 | funct3 | rd | opcode |
HINVAL.VVMA | asid | vaddr | PRIV | 0 | SYSTEM |
31 .. 25 | 24 .. 20 | 19 .. 15 | 14 .. 12 | 11 .. 7 | 6 .. 0 |
---|---|---|---|---|---|
funct7 | rs2 | rs1 | funct3 | rd | opcode |
HINVAL.GVMA | vmid | gaddr | PRIV | 0 | SYSTEM |
ハイパーバイザ拡張が実装されているなら、Svinval拡張はさらにHINVAL.VVMA
とHINVAL.GVMA
の2つの命令を提供する。
これらはSINVAL.VMA
と同じセマンティクスを持つが、SFENCE.VMA
の代わりに、SFENCE.W.INVAL
とSFENCE.INVAL.IR
をそれぞれHFENCE.VVMA
とHFENCE.GVMA
に置き換える。
加えて、HINVAL.GVMA
はASIDではなくVMIDを使う。
SINVAL.VMA
, HINVAL.VVMA
, HINVAL.GVMA
はSFENCE.VMA
, HFENCE.VVMA
, HFENCE.GVMA
と同じパーミッションを必要とし、同じ例外を発生させる。
特に、これらの命令をUモードで実行しようとすると常に不正命令例外を発生させ、SINVAL.VMA
やHINVAL.GVMA
をSモードかmstatus.TVM==1
のHSモードで実行しようとする試みもまた不正命令例外を発生させる。
HINVAL.VVMA
やHINVAL.GVMA
をVSモードやVUモードで実行しようとする、またはSINVAL.VMA
をVUモードで実行しようとすると、仮想命令例外が発生する。
hstatus.VTVM==1
のとき、SINVAL.VMA
をVSモードで実行しようとしても仮想命令例外が発生する。
SFENCE.W.INVAL
とSFENCE.INVAL.IR
命令は順序付けのみに影響し、観測可能な副作用がないため、mstatus.TVM==1
やhstatus.VTVM==1
の時にトラップする必要はない。
SINVAL.VMA
命令をトラップすればTLB管理機能全体をエミュレーションするのに十分である。
典型的な使用法において、ソフトウェアはSFENCE.W.INVAL
命令の実行によってアドレス変換キャッシュ内の仮想アドレスのある範囲をインバリデートし、問題のアドレス(に加えて、必要に応じてASIDやVMID)にSINVAL.VMA
, HINVAL.VVMA
, HINVAL.GVMA
命令を実行し、それからSFENCE.INVAL.IR
命令を実行する。
ハイパフォーマンス実装はアドレス変換キャッシュのインバリデート操作をパイプライン化し、SFENCE.W.INVAL
, SFENCE.INVAL.IR
, SFENCE.VMA
, HFENCE.GVMA
, HFENCE.VVMA
命令が実行されるまでパイプラインストールやメモリオーダリング強制を遅延させる。
よりシンプルな実装はSINVAL.VMA
, HINVAL.VVMA
, HINVAL.GVMA
をそれぞれSFENCE.VMA
, HFENCE.VVMA
, HFENCE.GVMA
と同じように実装し、SFENCE.W.INVAL
とSFENCE.INVAL.IR
命令を何もしない命令として実装できる。