PTX: Finish new calling convention implementation
[oota-llvm.git] / lib / Target / PTX / PTXCallingConv.td
1 //===--- PTXCallingConv.td - Calling Conventions -----------*- tablegen -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This describes the calling conventions for the PTX architecture.
11 //
12 //===----------------------------------------------------------------------===//
13
14 // Currently, we reserve one register of each type for return values and let
15 // the rest be used for parameters.  This is a dirty hack, but I am not sure
16 // how to tell LLVM that registers used for parameter passing cannot be used
17 // for return values.
18
19 // PTX Calling Conventions
20 def CC_PTX : CallingConv<[
21   CCIfType<[i1], CCAssignToReg<[P1, P2, P3, P4, P5, P6, P7]>>,
22   CCIfType<[i16], CCAssignToReg<[RH1, RH2, RH3, RH4, RH5, RH6, RH7]>>,
23   CCIfType<[i32, f32], CCAssignToReg<[R1, R2, R3, R4, R5, R6, R7]>>,
24   CCIfType<[i64, f64], CCAssignToReg<[RD1, RD2, RD3, RD4, RD5, RD6, RD7]>>
25 ]>;
26
27 //===----------------------------------------------------------------------===//
28 // Return Value Calling Conventions
29 //===----------------------------------------------------------------------===//
30
31 def RetCC_PTX : CallingConv<[
32   CCIfType<[i1], CCAssignToReg<[P0]>>,
33   CCIfType<[i16], CCAssignToReg<[RH0]>>,
34   CCIfType<[i32, f32], CCAssignToReg<[R0]>>,
35   CCIfType<[i64, f64], CCAssignToReg<[RD0]>>
36 ]>;