Perakitan sebaris
Menjelaskan kontrak string perintah blok asm, operan in/out, dan clobber.
Wave Foundation
asm blok
asm adalah sintaks tingkat rendah untuk memasukkan instruksi arsitektur target secara langsung.
fun read_value() -> i64 {
var result: i64 = 0;
asm {
"mov rax, 123"
out("rax") result
}
return result;
}
String literal dalam satu blok diteruskan sebagai daftar instruksi perakitan.
masukan dan keluaran
var result: i64 = 0;
asm {
"mov rax, rdi"
in("rdi") 123
out("rax") result
}
in("reg") expressionmenyambungkan nilai Wave ke operan input.out("reg") targetmenulis nilai keluaran ke target Wave yang dapat ditetapkan.- Nama register dapat ditulis sebagai string atau pengidentifikasi.
Operan masukan dapat mencakup variabel, literal integer/string, &identifier, deref identifier, dan angka negatif.
clobber
Jika sebuah blok mengubah status register atau memori selain output eksplisit, maka blok tersebut dicatat di clobber(...).
asm {
"nop"
clobber("rax", "rcx", "memory")
}
Periksa saat menggunakan
- Sintaks instruksi harus sesuai dengan arsitektur target dan kontrak perakitan inline LLVM.
- Jangan sembarangan memusnahkan register yang harus disimpan sesuai dengan konvensi pemanggilan.
- Untuk blok yang membaca atau menulis memori, deklarasikan clobber, termasuk
memory. - Jika memungkinkan, pisahkan asm khusus arsitektur di belakang fungsi kecil.
Perilaku dan portabilitas perakitan inline tidak dijamin hanya berdasarkan jenis bahasa saja.