diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2013-04-02 04:09:02 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2013-04-02 04:09:02 +0000 |
commit | 0b21f35aca7251ec7953e384d60bffe7632728c1 (patch) | |
tree | 593818e4119bb55ef4603b3f5b4f5f12b62a8b55 /llvm/lib/Target/Sparc/SparcCallingConv.td | |
parent | 5ad3b35377bbadedf946ea797ff49e8ae5166221 (diff) | |
download | bcm5719-llvm-0b21f35aca7251ec7953e384d60bffe7632728c1.tar.gz bcm5719-llvm-0b21f35aca7251ec7953e384d60bffe7632728c1.zip |
Add support for 64-bit calling convention.
This is far from complete, but it is enough to make it possible to write
test cases using i64 arguments.
Missing features:
- Floating point arguments.
- Receiving arguments on the stack.
- Calls.
llvm-svn: 178523
Diffstat (limited to 'llvm/lib/Target/Sparc/SparcCallingConv.td')
-rw-r--r-- | llvm/lib/Target/Sparc/SparcCallingConv.td | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/lib/Target/Sparc/SparcCallingConv.td b/llvm/lib/Target/Sparc/SparcCallingConv.td index d4712208126..b38ac616dcf 100644 --- a/llvm/lib/Target/Sparc/SparcCallingConv.td +++ b/llvm/lib/Target/Sparc/SparcCallingConv.td @@ -22,6 +22,14 @@ def RetCC_Sparc32 : CallingConv<[ CCIfType<[f64], CCAssignToReg<[D0, D1]>> ]>; +// Sparc 64-bit C return-value convention. +def RetCC_Sparc64 : CallingConv<[ + CCIfType<[i32], CCPromoteToType<i64>>, + CCIfType<[i64], CCAssignToReg<[I0, I1, I2, I3, I4, I5]>>, + CCIfType<[f32], CCAssignToReg<[F0, F1, F2, F3]>>, + CCIfType<[f64], CCAssignToReg<[D0, D1]>> +]>; + // Sparc 32-bit C Calling convention. def CC_Sparc32 : CallingConv<[ //Custom assign SRet to [sp+64]. @@ -34,3 +42,15 @@ def CC_Sparc32 : CallingConv<[ // Alternatively, they are assigned to the stack in 4-byte aligned units. CCAssignToStack<4, 4> ]>; + +// Sparc 64-bit C Calling convention. +def CC_Sparc64 : CallingConv<[ + // All integers are promoted to i64 by the caller. + CCIfType<[i32], CCPromoteToType<i64>>, + // Integer arguments get passed in integer registers if there is space. + CCIfType<[i64], CCAssignToReg<[I0, I1, I2, I3, I4, I5]>>, + // FIXME: Floating point arguments. + + // Alternatively, they are assigned to the stack in 8-byte aligned units. + CCAssignToStack<8, 8> +]>; |