인라인 어셈블리
소개
Wave의 인라인 어셈블리는 asm { ... } 블록으로 작성합니다.
Wave 코드 안에서 레지스터, 메모리, 시스템 호출 경로를 직접 제어할 수 있습니다.
현재 지원 타깃:
- Linux
x86_64 - macOS (Darwin)
arm64
Windows는 아직 지원하지 않습니다.
기본 형태
asm은 문(statement) 으로도, 식(expression) 으로도 사용할 수 있습니다.
asm {
"instruction"
in("constraint_or_reg") value
out("constraint_or_reg") target
clobber("item")
}
구성 요소:
- 문자열 줄: 실제 어셈블리 명령어
in(...): 입력 오퍼랜드out(...): 출력 오퍼랜드clobber(...): 파괴되는 레지스터/상태/메모리 힌트
asm 문 (Statement)
반환값이 없어도 되는 경우 일반 문장으로 사용합니다.
var ret: i64 = 0;
asm {
"mov rax, 1"
"syscall"
in("rdi") 1
in("rsi") msg_ptr
in("rdx") 20
out("rax") ret
}
out(...)은 여러 개를 둘 수 있습니다.
asm 식 (Expression)
값을 직접 생성하는 식으로 사용할 수 있습니다.
var result: i64 = asm {
"mov rax, 123"
out("rax") result
};
주의:
asm식은 정확히 1개의out(...)만 허용합니다.