blob: 4bad19850a0e77853f8919aea5eb588fbbcfe53b [file] [log] [blame]
Scott Michel6e22c652007-12-04 22:23:35 +00001//===- SPUCallingConv.td - Calling Conventions for CellSPU ------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattnerf3ebc3f2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Scott Michel6e22c652007-12-04 22:23:35 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This describes the calling conventions for the STI Cell SPU architecture.
11//
12//===----------------------------------------------------------------------===//
13
14/// CCIfSubtarget - Match if the current subtarget has a feature F.
15class CCIfSubtarget<string F, CCAction A>
16 : CCIf<!strconcat("State.getTarget().getSubtarget<PPCSubtarget>().", F), A>;
17
18//===----------------------------------------------------------------------===//
19// Return Value Calling Convention
20//===----------------------------------------------------------------------===//
21
22// Return-value convention for Cell SPU: Everything can be passed back via $3:
23def RetCC_SPU : CallingConv<[
Scott Michel73640252008-12-02 19:53:53 +000024 CCIfType<[i8], CCAssignToReg<[R3]>>,
25 CCIfType<[i16], CCAssignToReg<[R3]>>,
Scott Michel6e22c652007-12-04 22:23:35 +000026 CCIfType<[i32], CCAssignToReg<[R3]>>,
27 CCIfType<[i64], CCAssignToReg<[R3]>>,
28 CCIfType<[f32, f64], CCAssignToReg<[R3]>>,
29 CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCAssignToReg<[R3]>>
30]>;
31
32
33//===----------------------------------------------------------------------===//
34// CellSPU Argument Calling Conventions
Scott Michel73640252008-12-02 19:53:53 +000035// (note: this isn't used, but presumably should be at some point when other
36// targets do.)
Scott Michel6e22c652007-12-04 22:23:35 +000037//===----------------------------------------------------------------------===//
38/*
39def CC_SPU : CallingConv<[
Scott Michel73640252008-12-02 19:53:53 +000040 CCIfType<[i8], CCAssignToReg<[R3, R4, R5, R6, R7, R8, R9, R10, R11,
41 R12, R13, R14, R15, R16, R17, R18, R19, R20,
42 R21, R22, R23, R24, R25, R26, R27, R28, R29,
43 R30, R31, R32, R33, R34, R35, R36, R37, R38,
44 R39, R40, R41, R42, R43, R44, R45, R46, R47,
45 R48, R49, R50, R51, R52, R53, R54, R55, R56,
46 R57, R58, R59, R60, R61, R62, R63, R64, R65,
47 R66, R67, R68, R69, R70, R71, R72, R73, R74,
48 R75, R76, R77, R78, R79]>>,
49 CCIfType<[i16], CCAssignToReg<[R3, R4, R5, R6, R7, R8, R9, R10, R11,
50 R12, R13, R14, R15, R16, R17, R18, R19, R20,
51 R21, R22, R23, R24, R25, R26, R27, R28, R29,
52 R30, R31, R32, R33, R34, R35, R36, R37, R38,
53 R39, R40, R41, R42, R43, R44, R45, R46, R47,
54 R48, R49, R50, R51, R52, R53, R54, R55, R56,
55 R57, R58, R59, R60, R61, R62, R63, R64, R65,
56 R66, R67, R68, R69, R70, R71, R72, R73, R74,
57 R75, R76, R77, R78, R79]>>,
58 CCIfType<[i32], CCAssignToReg<[R3, R4, R5, R6, R7, R8, R9, R10, R11,
59 R12, R13, R14, R15, R16, R17, R18, R19, R20,
60 R21, R22, R23, R24, R25, R26, R27, R28, R29,
61 R30, R31, R32, R33, R34, R35, R36, R37, R38,
62 R39, R40, R41, R42, R43, R44, R45, R46, R47,
63 R48, R49, R50, R51, R52, R53, R54, R55, R56,
64 R57, R58, R59, R60, R61, R62, R63, R64, R65,
65 R66, R67, R68, R69, R70, R71, R72, R73, R74,
66 R75, R76, R77, R78, R79]>>,
67 CCIfType<[f32], CCAssignToReg<[R3, R4, R5, R6, R7, R8, R9, R10, R11,
68 R12, R13, R14, R15, R16, R17, R18, R19, R20,
69 R21, R22, R23, R24, R25, R26, R27, R28, R29,
70 R30, R31, R32, R33, R34, R35, R36, R37, R38,
71 R39, R40, R41, R42, R43, R44, R45, R46, R47,
72 R48, R49, R50, R51, R52, R53, R54, R55, R56,
73 R57, R58, R59, R60, R61, R62, R63, R64, R65,
74 R66, R67, R68, R69, R70, R71, R72, R73, R74,
75 R75, R76, R77, R78, R79]>>,
76 CCIfType<[i64], CCAssignToReg<[R3, R4, R5, R6, R7, R8, R9, R10, R11,
77 R12, R13, R14, R15, R16, R17, R18, R19, R20,
78 R21, R22, R23, R24, R25, R26, R27, R28, R29,
79 R30, R31, R32, R33, R34, R35, R36, R37, R38,
80 R39, R40, R41, R42, R43, R44, R45, R46, R47,
81 R48, R49, R50, R51, R52, R53, R54, R55, R56,
82 R57, R58, R59, R60, R61, R62, R63, R64, R65,
83 R66, R67, R68, R69, R70, R71, R72, R73, R74,
84 R75, R76, R77, R78, R79]>>,
85 CCIfType<[f64], CCAssignToReg<[R3, R4, R5, R6, R7, R8, R9, R10, R11,
86 R12, R13, R14, R15, R16, R17, R18, R19, R20,
87 R21, R22, R23, R24, R25, R26, R27, R28, R29,
88 R30, R31, R32, R33, R34, R35, R36, R37, R38,
89 R39, R40, R41, R42, R43, R44, R45, R46, R47,
90 R48, R49, R50, R51, R52, R53, R54, R55, R56,
91 R57, R58, R59, R60, R61, R62, R63, R64, R65,
92 R66, R67, R68, R69, R70, R71, R72, R73, R74,
93 R75, R76, R77, R78, R79]>>,
94 CCIfType<[v16i8, v8i16, v4i32, v4f32, v2i64, v2f64],
95 CCAssignToReg<[R3, R4, R5, R6, R7, R8, R9, R10, R11,
96 R12, R13, R14, R15, R16, R17, R18, R19, R20,
97 R21, R22, R23, R24, R25, R26, R27, R28, R29,
98 R30, R31, R32, R33, R34, R35, R36, R37, R38,
99 R39, R40, R41, R42, R43, R44, R45, R46, R47,
100 R48, R49, R50, R51, R52, R53, R54, R55, R56,
101 R57, R58, R59, R60, R61, R62, R63, R64, R65,
102 R66, R67, R68, R69, R70, R71, R72, R73, R74,
103 R75, R76, R77, R78, R79]>>,
Scott Michel6e22c652007-12-04 22:23:35 +0000104
Scott Michel6e22c652007-12-04 22:23:35 +0000105 // Integer/FP values get stored in stack slots that are 8 bytes in size and
106 // 8-byte aligned if there are no more registers to hold them.
107 CCIfType<[i32, i64, f32, f64], CCAssignToStack<8, 8>>,
108
109 // Vectors get 16-byte stack slots that are 16-byte aligned.
110 CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64],
Scott Michel73640252008-12-02 19:53:53 +0000111 CCAssignToStack<16, 16>>
Scott Michel6e22c652007-12-04 22:23:35 +0000112]>;
Scott Michel73640252008-12-02 19:53:53 +0000113*/