__asm(<# asm_text #>, <# outputs #>, <# inputs #>, <# clobbers #>)
// tests/asm/src/main.m
import "libc/stdio"
func sum64 (a: Int64, b: Int64) -> Int64 {
var sum: Int64
__asm("add %0, %1, %2", [["=r", sum]], [["r", a], ["r", b]], ["cc"])
return sum
}
func sub64 (a: Int64, b: Int64) -> Int64 {
var sub: Int64
__asm("sub %0, %1, %2", [["=r", sub]], [["r", a], ["r", b]], ["cc"])
return sub
}
func sumsub64 (a: Int64, b: Int64) -> Unit {
var sum: Int64
var sub: Int64
__asm("add %0, %2, %3\nsub %1, %2, %3\n", [["=&r", sum], ["=&r", sub]], [["r", a], ["r", b]], ["cc"])
printf("sumsub64 sum = %lld\n", sum)
printf("sumsub64 sub = %lld\n", sub)
}
public func main () -> Int {
printf("inline asm test\n")
var a: Int64 = 10
var b: Int64 = 20
let sum = sum64(a, b)
let sub = sub64(a, b)
printf("sum(%lld, %lld) = %lld\n", a, b, sum)
printf("sub(%lld, %lld) = %lld\n", a, b, sub)
sumsub64(a, b)
return 0
}
Result:
inline asm test
sum(10, 20) = 30
sub(10, 20) = -10
sumsub64 sum = 30
sumsub64 sub = -10