Coverage Report

Created: 2024-01-17 10:31

/src/build/lib/Target/SystemZ/SystemZGenCallingConv.inc
Line
Count
Source (jump to first uncovered line)
1
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2
|*                                                                            *|
3
|* Calling Convention Implementation Fragment                                 *|
4
|*                                                                            *|
5
|* Automatically generated file, do not edit!                                 *|
6
|*                                                                            *|
7
\*===----------------------------------------------------------------------===*/
8
9
#ifndef GET_CC_REGISTER_LISTS
10
11
static bool CC_SystemZ(unsigned ValNo, MVT ValVT,
12
                       MVT LocVT, CCValAssign::LocInfo LocInfo,
13
                       ISD::ArgFlagsTy ArgFlags, CCState &State);
14
static bool CC_SystemZ_ELF(unsigned ValNo, MVT ValVT,
15
                           MVT LocVT, CCValAssign::LocInfo LocInfo,
16
                           ISD::ArgFlagsTy ArgFlags, CCState &State);
17
static bool CC_SystemZ_GHC(unsigned ValNo, MVT ValVT,
18
                           MVT LocVT, CCValAssign::LocInfo LocInfo,
19
                           ISD::ArgFlagsTy ArgFlags, CCState &State);
20
static bool CC_SystemZ_XPLINK64(unsigned ValNo, MVT ValVT,
21
                                MVT LocVT, CCValAssign::LocInfo LocInfo,
22
                                ISD::ArgFlagsTy ArgFlags, CCState &State);
23
static bool RetCC_SystemZ(unsigned ValNo, MVT ValVT,
24
                          MVT LocVT, CCValAssign::LocInfo LocInfo,
25
                          ISD::ArgFlagsTy ArgFlags, CCState &State);
26
static bool RetCC_SystemZ_ELF(unsigned ValNo, MVT ValVT,
27
                              MVT LocVT, CCValAssign::LocInfo LocInfo,
28
                              ISD::ArgFlagsTy ArgFlags, CCState &State);
29
static bool RetCC_SystemZ_XPLINK64(unsigned ValNo, MVT ValVT,
30
                                   MVT LocVT, CCValAssign::LocInfo LocInfo,
31
                                   ISD::ArgFlagsTy ArgFlags, CCState &State);
32
33
34
static bool CC_SystemZ(unsigned ValNo, MVT ValVT,
35
                       MVT LocVT, CCValAssign::LocInfo LocInfo,
36
0
                       ISD::ArgFlagsTy ArgFlags, CCState &State) {
37
38
0
  if (static_cast<const SystemZSubtarget&>(State.getMachineFunction().getSubtarget()).isTargetXPLINK64()) {
39
0
    if (!CC_SystemZ_XPLINK64(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
40
0
      return false;
41
0
  }
42
43
0
  if (static_cast<const SystemZSubtarget&>(State.getMachineFunction().getSubtarget()).isTargetELF()) {
44
0
    if (!CC_SystemZ_ELF(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
45
0
      return false;
46
0
  }
47
48
0
  return true; // CC didn't match.
49
0
}
50
51
52
static bool CC_SystemZ_ELF(unsigned ValNo, MVT ValVT,
53
                           MVT LocVT, CCValAssign::LocInfo LocInfo,
54
0
                           ISD::ArgFlagsTy ArgFlags, CCState &State) {
55
56
0
  if (State.getCallingConv() == CallingConv::GHC) {
57
0
    if (!CC_SystemZ_GHC(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
58
0
      return false;
59
0
  }
60
61
0
  if (LocVT == MVT::i32) {
62
0
    if (ArgFlags.isSExt() || ArgFlags.isZExt()) {
63
0
      LocVT = MVT::i64;
64
0
      if (ArgFlags.isSExt())
65
0
        LocInfo = CCValAssign::SExt;
66
0
      else if (ArgFlags.isZExt())
67
0
        LocInfo = CCValAssign::ZExt;
68
0
      else
69
0
        LocInfo = CCValAssign::AExt;
70
0
    }
71
0
  }
72
73
0
  if (ArgFlags.isSwiftSelf()) {
74
0
    if (LocVT == MVT::i64) {
75
0
      if (unsigned Reg = State.AllocateReg(SystemZ::R10D)) {
76
0
        State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
77
0
        return false;
78
0
      }
79
0
    }
80
0
  }
81
82
0
  if (ArgFlags.isSwiftError()) {
83
0
    if (LocVT == MVT::i64) {
84
0
      if (unsigned Reg = State.AllocateReg(SystemZ::R9D)) {
85
0
        State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
86
0
        return false;
87
0
      }
88
0
    }
89
0
  }
90
91
0
  if (LocVT == MVT::i128 ||
92
0
      LocVT == MVT::f128) {
93
0
    LocVT = MVT::i64;
94
0
    LocInfo = CCValAssign::Indirect;
95
0
  }
96
97
0
  if (LocVT == MVT::i64) {
98
0
    if (CC_SystemZ_I128Indirect(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
99
0
      return false;
100
0
  }
101
102
0
  if (LocVT == MVT::i32) {
103
0
    static const MCPhysReg RegList1[] = {
104
0
      SystemZ::R2L, SystemZ::R3L, SystemZ::R4L, SystemZ::R5L, SystemZ::R6L
105
0
    };
106
0
    if (unsigned Reg = State.AllocateReg(RegList1)) {
107
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
108
0
      return false;
109
0
    }
110
0
  }
111
112
0
  if (LocVT == MVT::i64) {
113
0
    static const MCPhysReg RegList2[] = {
114
0
      SystemZ::R2D, SystemZ::R3D, SystemZ::R4D, SystemZ::R5D, SystemZ::R6D
115
0
    };
116
0
    if (unsigned Reg = State.AllocateReg(RegList2)) {
117
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
118
0
      return false;
119
0
    }
120
0
  }
121
122
0
  if (LocVT == MVT::f32) {
123
0
    static const MCPhysReg RegList3[] = {
124
0
      SystemZ::F0S, SystemZ::F2S, SystemZ::F4S, SystemZ::F6S
125
0
    };
126
0
    if (unsigned Reg = State.AllocateReg(RegList3)) {
127
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
128
0
      return false;
129
0
    }
130
0
  }
131
132
0
  if (LocVT == MVT::f64) {
133
0
    static const MCPhysReg RegList4[] = {
134
0
      SystemZ::F0D, SystemZ::F2D, SystemZ::F4D, SystemZ::F6D
135
0
    };
136
0
    if (unsigned Reg = State.AllocateReg(RegList4)) {
137
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
138
0
      return false;
139
0
    }
140
0
  }
141
142
0
  if (static_cast<const SystemZSubtarget&>(State.getMachineFunction().getSubtarget()).hasVector()) {
143
0
    if (LocVT == MVT::v16i8 ||
144
0
        LocVT == MVT::v8i16 ||
145
0
        LocVT == MVT::v4i32 ||
146
0
        LocVT == MVT::v2i64 ||
147
0
        LocVT == MVT::v4f32 ||
148
0
        LocVT == MVT::v2f64) {
149
0
      if (static_cast<SystemZCCState *>(&State)->IsFixed(ValNo)) {
150
0
        static const MCPhysReg RegList5[] = {
151
0
          SystemZ::V24, SystemZ::V26, SystemZ::V28, SystemZ::V30, SystemZ::V25, SystemZ::V27, SystemZ::V29, SystemZ::V31
152
0
        };
153
0
        if (unsigned Reg = State.AllocateReg(RegList5)) {
154
0
          State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
155
0
          return false;
156
0
        }
157
0
      }
158
0
    }
159
0
  }
160
161
0
  if (static_cast<const SystemZSubtarget&>(State.getMachineFunction().getSubtarget()).hasVector()) {
162
0
    if (LocVT == MVT::v16i8 ||
163
0
        LocVT == MVT::v8i16 ||
164
0
        LocVT == MVT::v4i32 ||
165
0
        LocVT == MVT::v2i64 ||
166
0
        LocVT == MVT::v4f32 ||
167
0
        LocVT == MVT::v2f64) {
168
0
      if (static_cast<SystemZCCState *>(&State)->IsShortVector(ValNo)) {
169
0
        LocVT = MVT::i64;
170
0
        LocInfo = CCValAssign::BCvt;
171
0
      }
172
0
    }
173
0
  }
174
175
0
  if (static_cast<const SystemZSubtarget&>(State.getMachineFunction().getSubtarget()).hasVector()) {
176
0
    if (LocVT == MVT::v16i8 ||
177
0
        LocVT == MVT::v8i16 ||
178
0
        LocVT == MVT::v4i32 ||
179
0
        LocVT == MVT::v2i64 ||
180
0
        LocVT == MVT::v4f32 ||
181
0
        LocVT == MVT::v2f64) {
182
0
      int64_t Offset6 = State.AllocateStack(16, Align(8));
183
0
      State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset6, LocVT, LocInfo));
184
0
      return false;
185
0
    }
186
0
  }
187
188
0
  if (LocVT == MVT::i32 ||
189
0
      LocVT == MVT::i64 ||
190
0
      LocVT == MVT::f32 ||
191
0
      LocVT == MVT::f64) {
192
0
    int64_t Offset7 = State.AllocateStack(8, Align(8));
193
0
    State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset7, LocVT, LocInfo));
194
0
    return false;
195
0
  }
196
197
0
  return true; // CC didn't match.
198
0
}
199
200
201
static bool CC_SystemZ_GHC(unsigned ValNo, MVT ValVT,
202
                           MVT LocVT, CCValAssign::LocInfo LocInfo,
203
0
                           ISD::ArgFlagsTy ArgFlags, CCState &State) {
204
205
0
  if (LocVT == MVT::i64) {
206
0
    static const MCPhysReg RegList1[] = {
207
0
      SystemZ::R7D, SystemZ::R8D, SystemZ::R10D, SystemZ::R11D, SystemZ::R12D, SystemZ::R13D, SystemZ::R6D, SystemZ::R2D, SystemZ::R3D, SystemZ::R4D, SystemZ::R5D, SystemZ::R9D
208
0
    };
209
0
    if (unsigned Reg = State.AllocateReg(RegList1)) {
210
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
211
0
      return false;
212
0
    }
213
0
  }
214
215
0
  if (LocVT == MVT::f32) {
216
0
    static const MCPhysReg RegList2[] = {
217
0
      SystemZ::F8S, SystemZ::F9S, SystemZ::F10S, SystemZ::F11S, SystemZ::F0S, SystemZ::F1S
218
0
    };
219
0
    if (unsigned Reg = State.AllocateReg(RegList2)) {
220
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
221
0
      return false;
222
0
    }
223
0
  }
224
225
0
  if (LocVT == MVT::f64) {
226
0
    static const MCPhysReg RegList3[] = {
227
0
      SystemZ::F12D, SystemZ::F13D, SystemZ::F14D, SystemZ::F15D, SystemZ::F2D, SystemZ::F3D
228
0
    };
229
0
    if (unsigned Reg = State.AllocateReg(RegList3)) {
230
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
231
0
      return false;
232
0
    }
233
0
  }
234
235
0
  if (static_cast<const SystemZSubtarget&>(State.getMachineFunction().getSubtarget()).hasVector()) {
236
0
    if (LocVT == MVT::v16i8 ||
237
0
        LocVT == MVT::v8i16 ||
238
0
        LocVT == MVT::v4i32 ||
239
0
        LocVT == MVT::v2i64 ||
240
0
        LocVT == MVT::v4f32 ||
241
0
        LocVT == MVT::v2f64) {
242
0
      if (static_cast<SystemZCCState *>(&State)->IsFixed(ValNo)) {
243
0
        static const MCPhysReg RegList4[] = {
244
0
          SystemZ::V16, SystemZ::V17, SystemZ::V18, SystemZ::V19, SystemZ::V20, SystemZ::V21
245
0
        };
246
0
        if (unsigned Reg = State.AllocateReg(RegList4)) {
247
0
          State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
248
0
          return false;
249
0
        }
250
0
      }
251
0
    }
252
0
  }
253
254
0
  if (CC_SystemZ_GHC_Error(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
255
0
    return false;
256
257
0
  return true; // CC didn't match.
258
0
}
259
260
261
static bool CC_SystemZ_XPLINK64(unsigned ValNo, MVT ValVT,
262
                                MVT LocVT, CCValAssign::LocInfo LocInfo,
263
0
                                ISD::ArgFlagsTy ArgFlags, CCState &State) {
264
265
0
  if (LocVT == MVT::i32) {
266
0
    if (ArgFlags.isSExt() || ArgFlags.isZExt()) {
267
0
      LocVT = MVT::i64;
268
0
      if (ArgFlags.isSExt())
269
0
        LocInfo = CCValAssign::SExt;
270
0
      else if (ArgFlags.isZExt())
271
0
        LocInfo = CCValAssign::ZExt;
272
0
      else
273
0
        LocInfo = CCValAssign::AExt;
274
0
    }
275
0
  }
276
277
0
  if (LocVT == MVT::f32 ||
278
0
      LocVT == MVT::f64) {
279
0
    if (!(static_cast<SystemZCCState *>(&State)->IsFixed(ValNo))) {
280
0
      LocVT = MVT::i64;
281
0
      LocInfo = CCValAssign::BCvt;
282
0
    }
283
0
  }
284
285
0
  if (LocVT == MVT::f128) {
286
0
    if (!(static_cast<SystemZCCState *>(&State)->IsFixed(ValNo))) {
287
0
      if (CC_XPLINK64_Allocate128BitVararg(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
288
0
        return false;
289
0
    }
290
0
  }
291
292
0
  if (static_cast<const SystemZSubtarget&>(State.getMachineFunction().getSubtarget()).hasVector()) {
293
0
    if (LocVT == MVT::v16i8 ||
294
0
        LocVT == MVT::v8i16 ||
295
0
        LocVT == MVT::v4i32 ||
296
0
        LocVT == MVT::v2i64 ||
297
0
        LocVT == MVT::v4f32 ||
298
0
        LocVT == MVT::v2f64) {
299
0
      if (!(static_cast<SystemZCCState *>(&State)->IsFixed(ValNo))) {
300
0
        if (CC_XPLINK64_Allocate128BitVararg(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
301
0
          return false;
302
0
      }
303
0
    }
304
0
  }
305
306
0
  if (ArgFlags.isSwiftSelf()) {
307
0
    if (LocVT == MVT::i64) {
308
0
      if (unsigned Reg = State.AllocateReg(SystemZ::R10D)) {
309
0
        State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
310
0
        return false;
311
0
      }
312
0
    }
313
0
  }
314
315
0
  if (ArgFlags.isSwiftError()) {
316
0
    if (LocVT == MVT::i64) {
317
0
      if (unsigned Reg = State.AllocateReg(SystemZ::R0D)) {
318
0
        State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
319
0
        return false;
320
0
      }
321
0
    }
322
0
  }
323
324
0
  if (LocVT == MVT::i128) {
325
0
    LocVT = MVT::i64;
326
0
    LocInfo = CCValAssign::Indirect;
327
0
  }
328
329
0
  if (LocVT == MVT::i64) {
330
0
    if (CC_SystemZ_I128Indirect(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
331
0
      return false;
332
0
  }
333
334
0
  if (LocVT == MVT::i64) {
335
0
    static const MCPhysReg RegList1[] = {
336
0
      SystemZ::R1D, SystemZ::R2D, SystemZ::R3D
337
0
    };
338
0
    if (unsigned Reg = State.AllocateReg(RegList1)) {
339
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
340
0
      (void)State.AllocateStack(8, Align(8));
341
0
      return false;
342
0
    }
343
0
  }
344
345
0
  if (static_cast<const SystemZSubtarget&>(State.getMachineFunction().getSubtarget()).hasVector()) {
346
0
    if (LocVT == MVT::v16i8 ||
347
0
        LocVT == MVT::v8i16 ||
348
0
        LocVT == MVT::v4i32 ||
349
0
        LocVT == MVT::v2i64 ||
350
0
        LocVT == MVT::v4f32 ||
351
0
        LocVT == MVT::v2f64) {
352
0
      if (static_cast<SystemZCCState *>(&State)->IsFixed(ValNo)) {
353
0
        if (CC_XPLINK64_Shadow_Reg(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
354
0
          return false;
355
0
      }
356
0
    }
357
0
  }
358
359
0
  if (static_cast<const SystemZSubtarget&>(State.getMachineFunction().getSubtarget()).hasVector()) {
360
0
    if (LocVT == MVT::v16i8 ||
361
0
        LocVT == MVT::v8i16 ||
362
0
        LocVT == MVT::v4i32 ||
363
0
        LocVT == MVT::v2i64 ||
364
0
        LocVT == MVT::v4f32 ||
365
0
        LocVT == MVT::v2f64) {
366
0
      if (static_cast<SystemZCCState *>(&State)->IsFixed(ValNo)) {
367
0
        static const MCPhysReg RegList2[] = {
368
0
          SystemZ::V24, SystemZ::V25, SystemZ::V26, SystemZ::V27, SystemZ::V28, SystemZ::V29, SystemZ::V30, SystemZ::V31
369
0
        };
370
0
        if (unsigned Reg = State.AllocateReg(RegList2)) {
371
0
          State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
372
0
          (void)State.AllocateStack(16, Align(8));
373
0
          return false;
374
0
        }
375
0
      }
376
0
    }
377
0
  }
378
379
0
  if (LocVT == MVT::f32 ||
380
0
      LocVT == MVT::f64) {
381
0
    if (static_cast<SystemZCCState *>(&State)->IsFixed(ValNo)) {
382
0
      if (CC_XPLINK64_Shadow_Reg(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
383
0
        return false;
384
0
    }
385
0
  }
386
387
0
  if (LocVT == MVT::f32) {
388
0
    if (static_cast<SystemZCCState *>(&State)->IsFixed(ValNo)) {
389
0
      static const MCPhysReg RegList3[] = {
390
0
        SystemZ::F0S, SystemZ::F2S, SystemZ::F4S, SystemZ::F6S
391
0
      };
392
0
      if (unsigned Reg = State.AllocateReg(RegList3)) {
393
0
        State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
394
0
        (void)State.AllocateStack(4, Align(8));
395
0
        return false;
396
0
      }
397
0
    }
398
0
  }
399
400
0
  if (LocVT == MVT::f64) {
401
0
    if (static_cast<SystemZCCState *>(&State)->IsFixed(ValNo)) {
402
0
      static const MCPhysReg RegList4[] = {
403
0
        SystemZ::F0D, SystemZ::F2D, SystemZ::F4D, SystemZ::F6D
404
0
      };
405
0
      if (unsigned Reg = State.AllocateReg(RegList4)) {
406
0
        State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
407
0
        (void)State.AllocateStack(8, Align(8));
408
0
        return false;
409
0
      }
410
0
    }
411
0
  }
412
413
0
  if (LocVT == MVT::f128) {
414
0
    if (static_cast<SystemZCCState *>(&State)->IsFixed(ValNo)) {
415
0
      if (CC_XPLINK64_Shadow_Reg(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
416
0
        return false;
417
0
    }
418
0
  }
419
420
0
  if (LocVT == MVT::f128) {
421
0
    if (static_cast<SystemZCCState *>(&State)->IsFixed(ValNo)) {
422
0
      static const MCPhysReg RegList5[] = {
423
0
        SystemZ::F0Q, SystemZ::F4Q
424
0
      };
425
0
      if (unsigned Reg = State.AllocateReg(RegList5)) {
426
0
        State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
427
0
        (void)State.AllocateStack(16, Align(8));
428
0
        return false;
429
0
      }
430
0
    }
431
0
  }
432
433
0
  if (LocVT == MVT::i32 ||
434
0
      LocVT == MVT::i64 ||
435
0
      LocVT == MVT::f32 ||
436
0
      LocVT == MVT::f64) {
437
0
    int64_t Offset6 = State.AllocateStack(8, Align(8));
438
0
    State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset6, LocVT, LocInfo));
439
0
    return false;
440
0
  }
441
442
0
  if (LocVT == MVT::f128) {
443
0
    int64_t Offset7 = State.AllocateStack(16, Align(8));
444
0
    State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset7, LocVT, LocInfo));
445
0
    return false;
446
0
  }
447
448
0
  if (static_cast<const SystemZSubtarget&>(State.getMachineFunction().getSubtarget()).hasVector()) {
449
0
    if (LocVT == MVT::v16i8 ||
450
0
        LocVT == MVT::v8i16 ||
451
0
        LocVT == MVT::v4i32 ||
452
0
        LocVT == MVT::v2i64 ||
453
0
        LocVT == MVT::v4f32 ||
454
0
        LocVT == MVT::v2f64) {
455
0
      int64_t Offset8 = State.AllocateStack(16, Align(8));
456
0
      State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset8, LocVT, LocInfo));
457
0
      return false;
458
0
    }
459
0
  }
460
461
0
  return true; // CC didn't match.
462
0
}
463
464
465
static bool RetCC_SystemZ(unsigned ValNo, MVT ValVT,
466
                          MVT LocVT, CCValAssign::LocInfo LocInfo,
467
0
                          ISD::ArgFlagsTy ArgFlags, CCState &State) {
468
469
0
  if (static_cast<const SystemZSubtarget&>(State.getMachineFunction().getSubtarget()).isTargetXPLINK64()) {
470
0
    if (!RetCC_SystemZ_XPLINK64(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
471
0
      return false;
472
0
  }
473
474
0
  if (static_cast<const SystemZSubtarget&>(State.getMachineFunction().getSubtarget()).isTargetELF()) {
475
0
    if (!RetCC_SystemZ_ELF(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
476
0
      return false;
477
0
  }
478
479
0
  return true; // CC didn't match.
480
0
}
481
482
483
static bool RetCC_SystemZ_ELF(unsigned ValNo, MVT ValVT,
484
                              MVT LocVT, CCValAssign::LocInfo LocInfo,
485
0
                              ISD::ArgFlagsTy ArgFlags, CCState &State) {
486
487
0
  if (LocVT == MVT::i32) {
488
0
    if (ArgFlags.isSExt() || ArgFlags.isZExt()) {
489
0
      LocVT = MVT::i64;
490
0
      if (ArgFlags.isSExt())
491
0
        LocInfo = CCValAssign::SExt;
492
0
      else if (ArgFlags.isZExt())
493
0
        LocInfo = CCValAssign::ZExt;
494
0
      else
495
0
        LocInfo = CCValAssign::AExt;
496
0
    }
497
0
  }
498
499
0
  if (ArgFlags.isSwiftError()) {
500
0
    if (LocVT == MVT::i64) {
501
0
      if (unsigned Reg = State.AllocateReg(SystemZ::R9D)) {
502
0
        State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
503
0
        return false;
504
0
      }
505
0
    }
506
0
  }
507
508
0
  if (LocVT == MVT::i32) {
509
0
    static const MCPhysReg RegList1[] = {
510
0
      SystemZ::R2L, SystemZ::R3L, SystemZ::R4L, SystemZ::R5L
511
0
    };
512
0
    if (unsigned Reg = State.AllocateReg(RegList1)) {
513
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
514
0
      return false;
515
0
    }
516
0
  }
517
518
0
  if (LocVT == MVT::i64) {
519
0
    static const MCPhysReg RegList2[] = {
520
0
      SystemZ::R2D, SystemZ::R3D, SystemZ::R4D, SystemZ::R5D
521
0
    };
522
0
    if (unsigned Reg = State.AllocateReg(RegList2)) {
523
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
524
0
      return false;
525
0
    }
526
0
  }
527
528
0
  if (LocVT == MVT::f32) {
529
0
    static const MCPhysReg RegList3[] = {
530
0
      SystemZ::F0S, SystemZ::F2S, SystemZ::F4S, SystemZ::F6S
531
0
    };
532
0
    if (unsigned Reg = State.AllocateReg(RegList3)) {
533
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
534
0
      return false;
535
0
    }
536
0
  }
537
538
0
  if (LocVT == MVT::f64) {
539
0
    static const MCPhysReg RegList4[] = {
540
0
      SystemZ::F0D, SystemZ::F2D, SystemZ::F4D, SystemZ::F6D
541
0
    };
542
0
    if (unsigned Reg = State.AllocateReg(RegList4)) {
543
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
544
0
      return false;
545
0
    }
546
0
  }
547
548
0
  if (static_cast<const SystemZSubtarget&>(State.getMachineFunction().getSubtarget()).hasVector()) {
549
0
    if (LocVT == MVT::v16i8 ||
550
0
        LocVT == MVT::v8i16 ||
551
0
        LocVT == MVT::v4i32 ||
552
0
        LocVT == MVT::v2i64 ||
553
0
        LocVT == MVT::v4f32 ||
554
0
        LocVT == MVT::v2f64) {
555
0
      static const MCPhysReg RegList5[] = {
556
0
        SystemZ::V24, SystemZ::V26, SystemZ::V28, SystemZ::V30, SystemZ::V25, SystemZ::V27, SystemZ::V29, SystemZ::V31
557
0
      };
558
0
      if (unsigned Reg = State.AllocateReg(RegList5)) {
559
0
        State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
560
0
        return false;
561
0
      }
562
0
    }
563
0
  }
564
565
0
  return true; // CC didn't match.
566
0
}
567
568
569
static bool RetCC_SystemZ_XPLINK64(unsigned ValNo, MVT ValVT,
570
                                   MVT LocVT, CCValAssign::LocInfo LocInfo,
571
0
                                   ISD::ArgFlagsTy ArgFlags, CCState &State) {
572
573
0
  if (LocVT == MVT::i32) {
574
0
    LocVT = MVT::i64;
575
0
    if (ArgFlags.isSExt())
576
0
      LocInfo = CCValAssign::SExt;
577
0
    else if (ArgFlags.isZExt())
578
0
      LocInfo = CCValAssign::ZExt;
579
0
    else
580
0
      LocInfo = CCValAssign::AExt;
581
0
  }
582
583
0
  if (LocVT == MVT::i64) {
584
0
    if (ArgFlags.isInReg()) {
585
0
      static const MCPhysReg RegList1[] = {
586
0
        SystemZ::R1D, SystemZ::R2D, SystemZ::R3D
587
0
      };
588
0
      if (unsigned Reg = State.AllocateReg(RegList1)) {
589
0
        State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
590
0
        return false;
591
0
      }
592
0
    }
593
0
  }
594
595
0
  if (LocVT == MVT::i64) {
596
0
    static const MCPhysReg RegList2[] = {
597
0
      SystemZ::R3D, SystemZ::R2D, SystemZ::R1D
598
0
    };
599
0
    if (unsigned Reg = State.AllocateReg(RegList2)) {
600
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
601
0
      return false;
602
0
    }
603
0
  }
604
605
0
  if (LocVT == MVT::f32) {
606
0
    static const MCPhysReg RegList3[] = {
607
0
      SystemZ::F0S, SystemZ::F2S, SystemZ::F4S, SystemZ::F6S
608
0
    };
609
0
    if (unsigned Reg = State.AllocateReg(RegList3)) {
610
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
611
0
      return false;
612
0
    }
613
0
  }
614
615
0
  if (LocVT == MVT::f64) {
616
0
    static const MCPhysReg RegList4[] = {
617
0
      SystemZ::F0D, SystemZ::F2D, SystemZ::F4D, SystemZ::F6D
618
0
    };
619
0
    if (unsigned Reg = State.AllocateReg(RegList4)) {
620
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
621
0
      return false;
622
0
    }
623
0
  }
624
625
0
  if (LocVT == MVT::f128) {
626
0
    static const MCPhysReg RegList5[] = {
627
0
      SystemZ::F0Q, SystemZ::F4Q
628
0
    };
629
0
    if (unsigned Reg = State.AllocateReg(RegList5)) {
630
0
      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
631
0
      return false;
632
0
    }
633
0
  }
634
635
0
  if (static_cast<const SystemZSubtarget&>(State.getMachineFunction().getSubtarget()).hasVector()) {
636
0
    if (LocVT == MVT::v16i8 ||
637
0
        LocVT == MVT::v8i16 ||
638
0
        LocVT == MVT::v4i32 ||
639
0
        LocVT == MVT::v2i64 ||
640
0
        LocVT == MVT::v4f32 ||
641
0
        LocVT == MVT::v2f64) {
642
0
      static const MCPhysReg RegList6[] = {
643
0
        SystemZ::V24, SystemZ::V25, SystemZ::V26, SystemZ::V27, SystemZ::V28, SystemZ::V29, SystemZ::V30, SystemZ::V31
644
0
      };
645
0
      if (unsigned Reg = State.AllocateReg(RegList6)) {
646
0
        State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
647
0
        return false;
648
0
      }
649
0
    }
650
0
  }
651
652
0
  return true; // CC didn't match.
653
0
}
654
655
#else
656
657
const MCRegister CC_SystemZ_ArgRegs[] = { 0 };
658
const MCRegister CC_SystemZ_ELF_ArgRegs[] = { SystemZ::F0D, SystemZ::F0S, SystemZ::F2D, SystemZ::F2S, SystemZ::F4D, SystemZ::F4S, SystemZ::F6D, SystemZ::F6S, SystemZ::R2D, SystemZ::R2L, SystemZ::R3D, SystemZ::R3L, SystemZ::R4D, SystemZ::R4L, SystemZ::R5D, SystemZ::R5L, SystemZ::R6D, SystemZ::R6L, SystemZ::V24, SystemZ::V25, SystemZ::V26, SystemZ::V27, SystemZ::V28, SystemZ::V29, SystemZ::V30, SystemZ::V31 };
659
const MCRegister CC_SystemZ_GHC_ArgRegs[] = { SystemZ::F0S, SystemZ::F10S, SystemZ::F11S, SystemZ::F12D, SystemZ::F13D, SystemZ::F14D, SystemZ::F15D, SystemZ::F1S, SystemZ::F2D, SystemZ::F3D, SystemZ::F8S, SystemZ::F9S, SystemZ::R10D, SystemZ::R11D, SystemZ::R12D, SystemZ::R13D, SystemZ::R2D, SystemZ::R3D, SystemZ::R4D, SystemZ::R5D, SystemZ::R6D, SystemZ::R7D, SystemZ::R8D, SystemZ::R9D, SystemZ::V16, SystemZ::V17, SystemZ::V18, SystemZ::V19, SystemZ::V20, SystemZ::V21 };
660
const MCRegister CC_SystemZ_XPLINK64_ArgRegs[] = { SystemZ::F0D, SystemZ::F0Q, SystemZ::F0S, SystemZ::F2D, SystemZ::F2S, SystemZ::F4D, SystemZ::F4Q, SystemZ::F4S, SystemZ::F6D, SystemZ::F6S, SystemZ::R1D, SystemZ::R2D, SystemZ::R3D, SystemZ::V24, SystemZ::V25, SystemZ::V26, SystemZ::V27, SystemZ::V28, SystemZ::V29, SystemZ::V30, SystemZ::V31 };
661
const MCRegister RetCC_SystemZ_ArgRegs[] = { 0 };
662
const MCRegister RetCC_SystemZ_ELF_ArgRegs[] = { SystemZ::F0D, SystemZ::F0S, SystemZ::F2D, SystemZ::F2S, SystemZ::F4D, SystemZ::F4S, SystemZ::F6D, SystemZ::F6S, SystemZ::R2D, SystemZ::R2L, SystemZ::R3D, SystemZ::R3L, SystemZ::R4D, SystemZ::R4L, SystemZ::R5D, SystemZ::R5L, SystemZ::V24, SystemZ::V25, SystemZ::V26, SystemZ::V27, SystemZ::V28, SystemZ::V29, SystemZ::V30, SystemZ::V31 };
663
const MCRegister RetCC_SystemZ_XPLINK64_ArgRegs[] = { SystemZ::F0D, SystemZ::F0Q, SystemZ::F0S, SystemZ::F2D, SystemZ::F2S, SystemZ::F4D, SystemZ::F4Q, SystemZ::F4S, SystemZ::F6D, SystemZ::F6S, SystemZ::R1D, SystemZ::R2D, SystemZ::R3D, SystemZ::V24, SystemZ::V25, SystemZ::V26, SystemZ::V27, SystemZ::V28, SystemZ::V29, SystemZ::V30, SystemZ::V31 };
664
665
// Registers used by Swift.
666
const MCRegister CC_SystemZ_ELF_Swift_ArgRegs[] = { SystemZ::R10D, SystemZ::R9D };
667
const MCRegister CC_SystemZ_XPLINK64_Swift_ArgRegs[] = { SystemZ::R0D, SystemZ::R10D };
668
const MCRegister RetCC_SystemZ_ELF_Swift_ArgRegs[] = { SystemZ::R9D };
669
670
#endif // CC_REGISTER_LIST