default.cc=arm64

arm64=cc
cc.arm64.arg0=x0
cc.arm64.arg1=x1
cc.arm64.arg2=x2
cc.arm64.arg3=x3
cc.arm64.arg4=x4
cc.arm64.arg5=x5
cc.arm64.arg6=x6
cc.arm64.arg7=x7
cc.arm64.argn=stack
# an fp arg slot is one v register, spelled s/d/v/q by operand width
cc.arm64.fparg0={d0,s0,v0,q0}
cc.arm64.fparg1={d1,s1,v1,q1}
cc.arm64.fparg2={d2,s2,v2,q2}
cc.arm64.fparg3={d3,s3,v3,q3}
cc.arm64.fparg4={d4,s4,v4,q4}
cc.arm64.fparg5={d5,s5,v5,q5}
cc.arm64.fparg6={d6,s6,v6,q6}
cc.arm64.fparg7={d7,s7,v7,q7}
cc.arm64.stackalloc=lower
cc.arm64.ret0=x0
cc.arm64.fpret0={d0,s0,v0,q0}
cc.arm64.clobber=x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x30,v0,v1,v2,v3,v4,v5,v6,v7,v16,v17,v18,v19,v20,v21,v22,v23,v24,v25,v26,v27,v28,v29,v30,v31
cc.arm64.preserve=x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,sp,v8,v9,v10,v11,v12,v13,v14,v15

swift=cc
cc.swift.arg0=x0
cc.swift.arg1=x1
cc.swift.arg2=x2
cc.swift.arg3=x3
cc.swift.arg4=x4
cc.swift.arg5=x5
cc.swift.arg6=x6
cc.swift.arg7=x7
cc.swift.argn=stack
cc.swift.fparg0={d0,s0,v0,q0}
cc.swift.fparg1={d1,s1,v1,q1}
cc.swift.fparg2={d2,s2,v2,q2}
cc.swift.fparg3={d3,s3,v3,q3}
cc.swift.fparg4={d4,s4,v4,q4}
cc.swift.fparg5={d5,s5,v5,q5}
cc.swift.fparg6={d6,s6,v6,q6}
cc.swift.fparg7={d7,s7,v7,q7}
cc.swift.stackalloc=lower
cc.swift.clobber=x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x21,x30,v0,v1,v2,v3,v4,v5,v6,v7,v16,v17,v18,v19,v20,v21,v22,v23,v24,v25,v26,v27,v28,v29,v30,v31
cc.swift.preserve=x19,x20,x22,x23,x24,x25,x26,x27,x28,x29,sp,v8,v9,v10,v11,v12,v13,v14,v15
cc.swift.self=x20
cc.swift.error=x21
cc.swift.ret0=x0
cc.swift.fpret0={d0,s0,v0,q0}

p9=cc
cc.p9.arg0=x0
cc.p9.argn=stack
cc.p9.stackalloc=lower
cc.p9.ret0=x0

dlang=cc
cc.dlang.arg0=x0
cc.dlang.arg1=x1
cc.dlang.arg2=x2
cc.dlang.arg3=x3
cc.dlang.arg4=x4
cc.dlang.arg5=x5
cc.dlang.arg6=x6
cc.dlang.arg7=x7
cc.dlang.argn=stack
cc.dlang.stackalloc=lower
cc.dlang.self=x20
cc.dlang.error=x21
cc.dlang.ret0=x0

# Go ABIInternal: X28 holds the goroutine pointer, not a receiver.
golang=cc
cc.golang.arg0=x0
cc.golang.arg1=x1
cc.golang.arg2=x2
cc.golang.arg3=x3
cc.golang.arg4=x4
cc.golang.arg5=x5
cc.golang.arg6=x6
cc.golang.arg7=x7
cc.golang.arg8=x8
cc.golang.arg9=x9
cc.golang.arg10=x10
cc.golang.arg11=x11
cc.golang.arg12=x12
cc.golang.arg13=x13
cc.golang.arg14=x14
cc.golang.arg15=x15
cc.golang.argn=stack
cc.golang.fparg0={d0,s0,v0,q0}
cc.golang.fparg1={d1,s1,v1,q1}
cc.golang.fparg2={d2,s2,v2,q2}
cc.golang.fparg3={d3,s3,v3,q3}
cc.golang.fparg4={d4,s4,v4,q4}
cc.golang.fparg5={d5,s5,v5,q5}
cc.golang.fparg6={d6,s6,v6,q6}
cc.golang.fparg7={d7,s7,v7,q7}
cc.golang.fparg8={d8,s8,v8,q8}
cc.golang.fparg9={d9,s9,v9,q9}
cc.golang.fparg10={d10,s10,v10,q10}
cc.golang.fparg11={d11,s11,v11,q11}
cc.golang.fparg12={d12,s12,v12,q12}
cc.golang.fparg13={d13,s13,v13,q13}
cc.golang.fparg14={d14,s14,v14,q14}
cc.golang.fparg15={d15,s15,v15,q15}
cc.golang.stackalloc=lower
cc.golang.pop=caller
cc.golang.ret0=x0
cc.golang.ret1=x1
cc.golang.ret2=x2
cc.golang.ret3=x3
cc.golang.ret4=x4
cc.golang.ret5=x5
cc.golang.ret6=x6
cc.golang.ret7=x7
cc.golang.ret8=x8
cc.golang.ret9=x9
cc.golang.ret10=x10
cc.golang.ret11=x11
cc.golang.ret12=x12
cc.golang.ret13=x13
cc.golang.ret14=x14
cc.golang.ret15=x15
cc.golang.retn=16
cc.golang.fpret0={d0,s0,v0,q0}
