インラインアセンブリ
紹介
このドキュメントでは、Wave言語のインラインアセンブリについて説明します。 インラインアセンブリはWaveが提供する機能の一つで、高級言語の利便性を保ちながらも低レベルハードウェア制御に直接アクセスできる極端なレベルの文法です。
つまり、一般的なWaveコードでは扱いにくいレジスタ操作、メモリ直接アクセス、特殊命令の実行などを可能にし、性能最適化やハードウェア依存の作業が必要なときに利用されます。
基本文法
asm {
"アセンブリ命令" // 実際のアセンブリコード (1行に1命令)
...
in("レジスタ") 値 // 入力レジスタのマッピング
out("レジスタ") 変数 // 出力レジスタのマッピング
}
文法要素
-
アセンブリ命令
"..."
文字列形式で記述し、実際のCPUで実行される低レベルアセンブリ命令です。- 複数行の記述が可能であり、1行に1つの命令を書きます。
- 例:
"mov rax, 1"
"syscall"
-
in("レジスタ") 値
- 変数(または式)の値を指定されたレジスタにロードします。
- 例:
-> 変数
in("rdi") s
s
の値をx86-64規約の最初のsyscall引数レジスタであるrdi
に入れる。
-
out("レジスタ") 変数
- 指定されたレジスタの値をWave変数に取得します。
- 例:
->
out("rax") ret
syscall
の戻り値が保存されたrax
レジスタの値を変数ret
に保存する。