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