1//===- TableGen'erated file -------------------------------------*- C++ -*-===//
2//
3// Calling Convention Implementation Fragment
4//
5// Automatically generated file, do not edit!
6//
7//===----------------------------------------------------------------------===//
8
9static bool CC_PPC_SVR4(unsigned ValNo, EVT ValVT,
10                        EVT LocVT, CCValAssign::LocInfo LocInfo,
11                        ISD::ArgFlagsTy ArgFlags, CCState &State);
12static bool CC_PPC_SVR4_ByVal(unsigned ValNo, EVT ValVT,
13                              EVT LocVT, CCValAssign::LocInfo LocInfo,
14                              ISD::ArgFlagsTy ArgFlags, CCState &State);
15static bool CC_PPC_SVR4_Common(unsigned ValNo, EVT ValVT,
16                               EVT LocVT, CCValAssign::LocInfo LocInfo,
17                               ISD::ArgFlagsTy ArgFlags, CCState &State);
18static bool CC_PPC_SVR4_VarArg(unsigned ValNo, EVT ValVT,
19                               EVT LocVT, CCValAssign::LocInfo LocInfo,
20                               ISD::ArgFlagsTy ArgFlags, CCState &State);
21static bool RetCC_PPC(unsigned ValNo, EVT ValVT,
22                      EVT LocVT, CCValAssign::LocInfo LocInfo,
23                      ISD::ArgFlagsTy ArgFlags, CCState &State);
24
25
26static bool CC_PPC_SVR4(unsigned ValNo, EVT ValVT,
27                        EVT LocVT, CCValAssign::LocInfo LocInfo,
28                        ISD::ArgFlagsTy ArgFlags, CCState &State) {
29
30  if (LocVT == MVT::v16i8 ||
31      LocVT == MVT::v8i16 ||
32      LocVT == MVT::v4i32 ||
33      LocVT == MVT::v4f32) {
34    static const unsigned RegList1[] = {
35      PPC::V2, PPC::V3, PPC::V4, PPC::V5, PPC::V6, PPC::V7, PPC::V8, PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13
36    };
37    if (unsigned Reg = State.AllocateReg(RegList1, 12)) {
38      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
39      return false;
40    }
41  }
42
43  if (!CC_PPC_SVR4_Common(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
44    return false;
45
46  return true;  // CC didn't match.
47}
48
49
50static bool CC_PPC_SVR4_ByVal(unsigned ValNo, EVT ValVT,
51                              EVT LocVT, CCValAssign::LocInfo LocInfo,
52                              ISD::ArgFlagsTy ArgFlags, CCState &State) {
53
54  if (ArgFlags.isByVal()) {
55    State.HandleByVal(ValNo, ValVT, LocVT, LocInfo, 4, 4, ArgFlags);
56    return false;
57  }
58
59  if (CC_PPC_SVR4_Custom_Dummy(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
60    return false;
61
62  return true;  // CC didn't match.
63}
64
65
66static bool CC_PPC_SVR4_Common(unsigned ValNo, EVT ValVT,
67                               EVT LocVT, CCValAssign::LocInfo LocInfo,
68                               ISD::ArgFlagsTy ArgFlags, CCState &State) {
69
70  if (LocVT == MVT::i32) {
71    if (ArgFlags.isSplit()) {
72      if (CC_PPC_SVR4_Custom_AlignArgRegs(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
73            return false;
74    }
75  }
76
77  if (LocVT == MVT::i32) {
78    static const unsigned RegList1[] = {
79      PPC::R3, PPC::R4, PPC::R5, PPC::R6, PPC::R7, PPC::R8, PPC::R9, PPC::R10
80    };
81    if (unsigned Reg = State.AllocateReg(RegList1, 8)) {
82      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
83      return false;
84    }
85  }
86
87  if (LocVT == MVT::f64) {
88    if (ArgFlags.isSplit()) {
89      if (CC_PPC_SVR4_Custom_AlignFPArgRegs(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
90            return false;
91    }
92  }
93
94  if (LocVT == MVT::f32 ||
95      LocVT == MVT::f64) {
96    static const unsigned RegList2[] = {
97      PPC::F1, PPC::F2, PPC::F3, PPC::F4, PPC::F5, PPC::F6, PPC::F7, PPC::F8
98    };
99    if (unsigned Reg = State.AllocateReg(RegList2, 8)) {
100      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
101      return false;
102    }
103  }
104
105  if (LocVT == MVT::i32) {
106    if (ArgFlags.isSplit()) {
107      unsigned Offset3 = State.AllocateStack(4, 8);
108      State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset3, LocVT, LocInfo));
109      return false;
110    }
111  }
112
113  if (LocVT == MVT::i32) {
114    unsigned Offset4 = State.AllocateStack(4, 4);
115    State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset4, LocVT, LocInfo));
116    return false;
117  }
118
119  if (LocVT == MVT::f32 ||
120      LocVT == MVT::f64) {
121    unsigned Offset5 = State.AllocateStack(8, 8);
122    State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset5, LocVT, LocInfo));
123    return false;
124  }
125
126  if (LocVT == MVT::v16i8 ||
127      LocVT == MVT::v8i16 ||
128      LocVT == MVT::v4i32 ||
129      LocVT == MVT::v4f32) {
130    unsigned Offset6 = State.AllocateStack(16, 16);
131    State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset6, LocVT, LocInfo));
132    return false;
133  }
134
135  return true;  // CC didn't match.
136}
137
138
139static bool CC_PPC_SVR4_VarArg(unsigned ValNo, EVT ValVT,
140                               EVT LocVT, CCValAssign::LocInfo LocInfo,
141                               ISD::ArgFlagsTy ArgFlags, CCState &State) {
142
143  if (!CC_PPC_SVR4_Common(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
144    return false;
145
146  return true;  // CC didn't match.
147}
148
149
150static bool RetCC_PPC(unsigned ValNo, EVT ValVT,
151                      EVT LocVT, CCValAssign::LocInfo LocInfo,
152                      ISD::ArgFlagsTy ArgFlags, CCState &State) {
153
154  if (LocVT == MVT::i32) {
155    static const unsigned RegList1[] = {
156      PPC::R3, PPC::R4, PPC::R5, PPC::R6, PPC::R7, PPC::R8, PPC::R9, PPC::R10
157    };
158    if (unsigned Reg = State.AllocateReg(RegList1, 8)) {
159      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
160      return false;
161    }
162  }
163
164  if (LocVT == MVT::i64) {
165    static const unsigned RegList2[] = {
166      PPC::X3, PPC::X4, PPC::X5, PPC::X6
167    };
168    if (unsigned Reg = State.AllocateReg(RegList2, 4)) {
169      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
170      return false;
171    }
172  }
173
174  if (LocVT == MVT::f32) {
175    if (unsigned Reg = State.AllocateReg(PPC::F1)) {
176      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
177      return false;
178    }
179  }
180
181  if (LocVT == MVT::f64) {
182    static const unsigned RegList3[] = {
183      PPC::F1, PPC::F2
184    };
185    if (unsigned Reg = State.AllocateReg(RegList3, 2)) {
186      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
187      return false;
188    }
189  }
190
191  if (LocVT == MVT::v16i8 ||
192      LocVT == MVT::v8i16 ||
193      LocVT == MVT::v4i32 ||
194      LocVT == MVT::v4f32) {
195    if (unsigned Reg = State.AllocateReg(PPC::V2)) {
196      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
197      return false;
198    }
199  }
200
201  return true;  // CC didn't match.
202}
203