]> CyberLeo.Net >> Repos - FreeBSD/releng/9.0.git/blob - contrib/llvm/lib/Target/SystemZ/SystemZCallingConv.td
Copy stable/9 to releng/9.0 as part of the FreeBSD 9.0-RELEASE release
[FreeBSD/releng/9.0.git] / contrib / llvm / lib / Target / SystemZ / SystemZCallingConv.td
1 //=- SystemZCallingConv.td - Calling Conventions for SystemZ -*- 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 // This describes the calling conventions for SystemZ architecture.
10 //===----------------------------------------------------------------------===//
11
12 //===----------------------------------------------------------------------===//
13 // SystemZ Return Value Calling Convention
14 //===----------------------------------------------------------------------===//
15 def RetCC_SystemZ : CallingConv<[
16   // Promote i8/i16/i32 arguments to i64.
17   CCIfType<[i8, i16, i32], CCPromoteToType<i64>>,
18
19   // i64 is returned in register R2
20   CCIfType<[i64], CCAssignToReg<[R2D, R3D, R4D, R5D]>>,
21
22   // f32 / f64 are returned in F0
23   CCIfType<[f32], CCAssignToReg<[F0S, F2S, F4S, F6S]>>,
24   CCIfType<[f64], CCAssignToReg<[F0L, F2L, F4L, F6L]>>
25 ]>;
26
27 //===----------------------------------------------------------------------===//
28 // SystemZ Argument Calling Conventions
29 //===----------------------------------------------------------------------===//
30 def CC_SystemZ : CallingConv<[
31   // Promote i8/i16/i32 arguments to i64.
32   CCIfType<[i8, i16, i32], CCPromoteToType<i64>>,
33
34   // The first 5 integer arguments of non-varargs functions are passed in
35   // integer registers.
36   CCIfType<[i64], CCAssignToReg<[R2D, R3D, R4D, R5D, R6D]>>,
37
38   // The first 4 floating point arguments of non-varargs functions are passed
39   // in FP registers.
40   CCIfType<[f32], CCAssignToReg<[F0S, F2S, F4S, F6S]>>,
41   CCIfType<[f64], CCAssignToReg<[F0L, F2L, F4L, F6L]>>,
42
43   // Integer values get stored in stack slots that are 8 bytes in
44   // size and 8-byte aligned.
45   CCIfType<[i64, f32, f64], CCAssignToStack<8, 8>>
46 ]>;