default.cc=amd64

# win64 passes argument N in rcx/rdx/r8/r9 OR xmm0-3 depending on its type: one
# sequence with per-type homes, not two parallel sequences like sysv. A separate
# fparg sequence would invent extra arguments, so this cc must not define one.
ms=cc
cc.ms.arg0=rcx
cc.ms.arg1=rdx
cc.ms.arg2=r8
cc.ms.arg3=r9
cc.ms.argn=stack
cc.ms.shadow=32
cc.ms.pop=caller
cc.ms.clobber=rax,rcx,rdx,r8,r9,r10,r11,xmm0,xmm1,xmm2,xmm3,xmm4,xmm5
cc.ms.preserve=rbx,rbp,rdi,rsi,rsp,r12,r13,r14,r15,xmm6,xmm7,xmm8,xmm9,xmm10,xmm11,xmm12,xmm13,xmm14,xmm15
cc.ms.ret0=rax

amd64=cc
cc.amd64.arg0=rdi
cc.amd64.arg1=rsi
cc.amd64.arg2=rdx
cc.amd64.arg3=rcx
cc.amd64.arg4=r8
cc.amd64.arg5=r9
cc.amd64.argn=stack
cc.amd64.fparg0=xmm0
cc.amd64.fparg1=xmm1
cc.amd64.fparg2=xmm2
cc.amd64.fparg3=xmm3
cc.amd64.fparg4=xmm4
cc.amd64.fparg5=xmm5
cc.amd64.fparg6=xmm6
cc.amd64.fparg7=xmm7
cc.amd64.pop=caller
cc.amd64.clobber=rax,rcx,rdx,rsi,rdi,r8,r9,r10,r11,xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7,xmm8,xmm9,xmm10,xmm11,xmm12,xmm13,xmm14,xmm15
cc.amd64.preserve=rbx,rbp,rsp,r12,r13,r14,r15
cc.amd64.ret0=rax

swift=cc
cc.swift.arg0=rdi
cc.swift.arg1=rsi
cc.swift.arg2=rdx
cc.swift.arg3=rcx
cc.swift.arg4=r8
cc.swift.arg5=r9
cc.swift.argn=stack
cc.swift.fparg0=xmm0
cc.swift.fparg1=xmm1
cc.swift.fparg2=xmm2
cc.swift.fparg3=xmm3
cc.swift.fparg4=xmm4
cc.swift.fparg5=xmm5
cc.swift.fparg6=xmm6
cc.swift.fparg7=xmm7
cc.swift.self=r13
cc.swift.error=r12
cc.swift.pop=caller
cc.swift.ret0=rax

amd64syscall=cc
cc.amd64syscall.arg0=rdi
cc.amd64syscall.arg1=rsi
cc.amd64syscall.arg2=rdx
cc.amd64syscall.arg3=r10
cc.amd64syscall.arg4=r8
cc.amd64syscall.arg5=r9
cc.amd64syscall.pop=caller
cc.amd64syscall.ret0=rax

p9=cc
cc.p9.arg0=rbp
cc.p9.argn=stack
cc.p9.pop=caller
cc.p9.ret0=rax

dlang=cc
cc.dlang.ret0=rax
cc.dlang.ret1=rdx
cc.dlang.retn=2
cc.dlang.arg0=rdi
cc.dlang.arg1=rsi
cc.dlang.arg2=rdx
cc.dlang.arg3=rcx
cc.dlang.arg4=r8d
cc.dlang.arg5=r9d
cc.dlang.argn=stack
cc.dlang.pop=caller
