summaryrefslogtreecommitdiff
path: root/lib/Target/X86/X86CallingConv.td
diff options
context:
space:
mode:
authorTilmann Scheller <tilmann.scheller@googlemail.com>2011-03-02 19:29:22 +0000
committerTilmann Scheller <tilmann.scheller@googlemail.com>2011-03-02 19:29:22 +0000
commitf1cc70ca9356b23369b689e17b89c5596d4c913f (patch)
treed6b4920eec7c5fcaf760fc47949faa3eba18970e /lib/Target/X86/X86CallingConv.td
parent0dddbc3d1be415afafffff8c95b8e1d7a1631106 (diff)
downloadllvm-f1cc70ca9356b23369b689e17b89c5596d4c913f.tar.gz
llvm-f1cc70ca9356b23369b689e17b89c5596d4c913f.tar.bz2
llvm-f1cc70ca9356b23369b689e17b89c5596d4c913f.tar.xz
Add Win64 thiscall calling convention.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126862 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86CallingConv.td')
-rw-r--r--lib/Target/X86/X86CallingConv.td7
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/Target/X86/X86CallingConv.td b/lib/Target/X86/X86CallingConv.td
index a44fb694e7..ad71d8fd22 100644
--- a/lib/Target/X86/X86CallingConv.td
+++ b/lib/Target/X86/X86CallingConv.td
@@ -215,6 +215,13 @@ def CC_X86_Win64_C : CallingConv<[
// The first 4 integer arguments are passed in integer registers.
CCIfType<[i32], CCAssignToRegWithShadow<[ECX , EDX , R8D , R9D ],
[XMM0, XMM1, XMM2, XMM3]>>,
+
+ // Do not pass the sret argument in RCX, the Win64 thiscall calling
+ // convention requires "this" to be passed in RCX.
+ CCIfCC<"CallingConv::Win64_ThisCall",
+ CCIfSRet<CCIfType<[i64], CCAssignToRegWithShadow<[RDX , R8 , R9 ],
+ [XMM1, XMM2, XMM3]>>>>,
+
CCIfType<[i64], CCAssignToRegWithShadow<[RCX , RDX , R8 , R9 ],
[XMM0, XMM1, XMM2, XMM3]>>,