1
//===- TableGen'erated file -------------------------------------*- C++ -*-===//
3
// Calling Convention Implementation Fragment
5
// Automatically generated file, do not edit!
7
//===----------------------------------------------------------------------===//
9
static bool CC_X86_32_C(unsigned ValNo, EVT ValVT,
10
EVT LocVT, CCValAssign::LocInfo LocInfo,
11
ISD::ArgFlagsTy ArgFlags, CCState &State);
12
static bool CC_X86_32_Common(unsigned ValNo, EVT ValVT,
13
EVT LocVT, CCValAssign::LocInfo LocInfo,
14
ISD::ArgFlagsTy ArgFlags, CCState &State);
15
static bool CC_X86_32_FastCC(unsigned ValNo, EVT ValVT,
16
EVT LocVT, CCValAssign::LocInfo LocInfo,
17
ISD::ArgFlagsTy ArgFlags, CCState &State);
18
static bool CC_X86_32_FastCall(unsigned ValNo, EVT ValVT,
19
EVT LocVT, CCValAssign::LocInfo LocInfo,
20
ISD::ArgFlagsTy ArgFlags, CCState &State);
21
static bool CC_X86_64_C(unsigned ValNo, EVT ValVT,
22
EVT LocVT, CCValAssign::LocInfo LocInfo,
23
ISD::ArgFlagsTy ArgFlags, CCState &State);
24
static bool CC_X86_Win64_C(unsigned ValNo, EVT ValVT,
25
EVT LocVT, CCValAssign::LocInfo LocInfo,
26
ISD::ArgFlagsTy ArgFlags, CCState &State);
27
static bool RetCC_X86(unsigned ValNo, EVT ValVT,
28
EVT LocVT, CCValAssign::LocInfo LocInfo,
29
ISD::ArgFlagsTy ArgFlags, CCState &State);
30
static bool RetCC_X86Common(unsigned ValNo, EVT ValVT,
31
EVT LocVT, CCValAssign::LocInfo LocInfo,
32
ISD::ArgFlagsTy ArgFlags, CCState &State);
33
static bool RetCC_X86_32(unsigned ValNo, EVT ValVT,
34
EVT LocVT, CCValAssign::LocInfo LocInfo,
35
ISD::ArgFlagsTy ArgFlags, CCState &State);
36
static bool RetCC_X86_32_C(unsigned ValNo, EVT ValVT,
37
EVT LocVT, CCValAssign::LocInfo LocInfo,
38
ISD::ArgFlagsTy ArgFlags, CCState &State);
39
static bool RetCC_X86_32_Fast(unsigned ValNo, EVT ValVT,
40
EVT LocVT, CCValAssign::LocInfo LocInfo,
41
ISD::ArgFlagsTy ArgFlags, CCState &State);
42
static bool RetCC_X86_64(unsigned ValNo, EVT ValVT,
43
EVT LocVT, CCValAssign::LocInfo LocInfo,
44
ISD::ArgFlagsTy ArgFlags, CCState &State);
45
static bool RetCC_X86_64_C(unsigned ValNo, EVT ValVT,
46
EVT LocVT, CCValAssign::LocInfo LocInfo,
47
ISD::ArgFlagsTy ArgFlags, CCState &State);
48
static bool RetCC_X86_Win64_C(unsigned ValNo, EVT ValVT,
49
EVT LocVT, CCValAssign::LocInfo LocInfo,
50
ISD::ArgFlagsTy ArgFlags, CCState &State);
53
static bool CC_X86_32_C(unsigned ValNo, EVT ValVT,
54
EVT LocVT, CCValAssign::LocInfo LocInfo,
55
ISD::ArgFlagsTy ArgFlags, CCState &State) {
57
if (LocVT == MVT::i8 ||
60
if (ArgFlags.isSExt())
61
LocInfo = CCValAssign::SExt;
62
else if (ArgFlags.isZExt())
63
LocInfo = CCValAssign::ZExt;
65
LocInfo = CCValAssign::AExt;
68
if (ArgFlags.isNest()) {
69
if (unsigned Reg = State.AllocateReg(X86::ECX)) {
70
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
75
if (!State.isVarArg()) {
76
if (ArgFlags.isInReg()) {
77
if (LocVT == MVT::i32) {
78
static const unsigned RegList1[] = {
79
X86::EAX, X86::EDX, X86::ECX
81
if (unsigned Reg = State.AllocateReg(RegList1, 3)) {
82
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
89
if (!CC_X86_32_Common(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
92
return true; // CC didn't match.
96
static bool CC_X86_32_Common(unsigned ValNo, EVT ValVT,
97
EVT LocVT, CCValAssign::LocInfo LocInfo,
98
ISD::ArgFlagsTy ArgFlags, CCState &State) {
100
if (ArgFlags.isByVal()) {
101
State.HandleByVal(ValNo, ValVT, LocVT, LocInfo, 4, 4, ArgFlags);
105
if (!State.isVarArg()) {
106
if (ArgFlags.isInReg()) {
107
if (LocVT == MVT::f32 ||
109
if (State.getTarget().getSubtarget<X86Subtarget>().hasSSE2()) {
110
static const unsigned RegList1[] = {
111
X86::XMM0, X86::XMM1, X86::XMM2
113
if (unsigned Reg = State.AllocateReg(RegList1, 3)) {
114
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
122
if (!State.isVarArg()) {
123
if (LocVT == MVT::v8i8 ||
124
LocVT == MVT::v4i16 ||
125
LocVT == MVT::v2i32 ||
126
LocVT == MVT::v2f32) {
127
static const unsigned RegList2[] = {
128
X86::MM0, X86::MM1, X86::MM2
130
if (unsigned Reg = State.AllocateReg(RegList2, 3)) {
131
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
137
if (LocVT == MVT::i32 ||
139
unsigned Offset3 = State.AllocateStack(4, 4);
140
State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset3, LocVT, LocInfo));
144
if (LocVT == MVT::f64) {
145
unsigned Offset4 = State.AllocateStack(8, 4);
146
State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset4, LocVT, LocInfo));
150
if (LocVT == MVT::f80) {
151
unsigned Offset5 = State.AllocateStack(
152
State.getTarget().getTargetData()->getTypeAllocSize(LocVT.getTypeForEVT(State.getContext())), 4);
153
State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset5, LocVT, LocInfo));
157
if (!State.isVarArg()) {
158
if (LocVT == MVT::v16i8 ||
159
LocVT == MVT::v8i16 ||
160
LocVT == MVT::v4i32 ||
161
LocVT == MVT::v2i64 ||
162
LocVT == MVT::v4f32 ||
163
LocVT == MVT::v2f64) {
164
static const unsigned RegList6[] = {
165
X86::XMM0, X86::XMM1, X86::XMM2, X86::XMM3
167
if (unsigned Reg = State.AllocateReg(RegList6, 4)) {
168
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
174
if (LocVT == MVT::v16i8 ||
175
LocVT == MVT::v8i16 ||
176
LocVT == MVT::v4i32 ||
177
LocVT == MVT::v2i64 ||
178
LocVT == MVT::v4f32 ||
179
LocVT == MVT::v2f64) {
180
unsigned Offset7 = State.AllocateStack(16, 16);
181
State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset7, LocVT, LocInfo));
185
if (LocVT == MVT::v8i8 ||
186
LocVT == MVT::v4i16 ||
187
LocVT == MVT::v2i32 ||
188
LocVT == MVT::v1i64) {
189
unsigned Offset8 = State.AllocateStack(8, 4);
190
State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset8, LocVT, LocInfo));
194
return true; // CC didn't match.
198
static bool CC_X86_32_FastCC(unsigned ValNo, EVT ValVT,
199
EVT LocVT, CCValAssign::LocInfo LocInfo,
200
ISD::ArgFlagsTy ArgFlags, CCState &State) {
202
if (ArgFlags.isByVal()) {
203
State.HandleByVal(ValNo, ValVT, LocVT, LocInfo, 4, 4, ArgFlags);
207
if (LocVT == MVT::i8 ||
210
if (ArgFlags.isSExt())
211
LocInfo = CCValAssign::SExt;
212
else if (ArgFlags.isZExt())
213
LocInfo = CCValAssign::ZExt;
215
LocInfo = CCValAssign::AExt;
218
if (ArgFlags.isNest()) {
219
if (unsigned Reg = State.AllocateReg(X86::EAX)) {
220
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
225
if (LocVT == MVT::i32) {
226
static const unsigned RegList1[] = {
229
if (unsigned Reg = State.AllocateReg(RegList1, 2)) {
230
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
235
if (!State.isVarArg()) {
236
if (LocVT == MVT::f32 ||
238
if (State.getTarget().getSubtarget<X86Subtarget>().hasSSE2()) {
239
static const unsigned RegList2[] = {
240
X86::XMM0, X86::XMM1, X86::XMM2
242
if (unsigned Reg = State.AllocateReg(RegList2, 3)) {
243
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
250
if (LocVT == MVT::f64) {
251
unsigned Offset3 = State.AllocateStack(8, 8);
252
State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset3, LocVT, LocInfo));
256
if (!CC_X86_32_Common(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
259
return true; // CC didn't match.
263
static bool CC_X86_32_FastCall(unsigned ValNo, EVT ValVT,
264
EVT LocVT, CCValAssign::LocInfo LocInfo,
265
ISD::ArgFlagsTy ArgFlags, CCState &State) {
267
if (LocVT == MVT::i8 ||
270
if (ArgFlags.isSExt())
271
LocInfo = CCValAssign::SExt;
272
else if (ArgFlags.isZExt())
273
LocInfo = CCValAssign::ZExt;
275
LocInfo = CCValAssign::AExt;
278
if (ArgFlags.isNest()) {
279
if (unsigned Reg = State.AllocateReg(X86::EAX)) {
280
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
285
if (LocVT == MVT::i32) {
286
static const unsigned RegList1[] = {
289
if (unsigned Reg = State.AllocateReg(RegList1, 2)) {
290
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
295
if (!CC_X86_32_Common(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
298
return true; // CC didn't match.
302
static bool CC_X86_64_C(unsigned ValNo, EVT ValVT,
303
EVT LocVT, CCValAssign::LocInfo LocInfo,
304
ISD::ArgFlagsTy ArgFlags, CCState &State) {
306
if (ArgFlags.isByVal()) {
307
State.HandleByVal(ValNo, ValVT, LocVT, LocInfo, 8, 8, ArgFlags);
311
if (LocVT == MVT::i8 ||
314
if (ArgFlags.isSExt())
315
LocInfo = CCValAssign::SExt;
316
else if (ArgFlags.isZExt())
317
LocInfo = CCValAssign::ZExt;
319
LocInfo = CCValAssign::AExt;
322
if (ArgFlags.isNest()) {
323
if (unsigned Reg = State.AllocateReg(X86::R10)) {
324
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
329
if (LocVT == MVT::v1i64) {
330
if (State.getTarget().getSubtarget<X86Subtarget>().isTargetDarwin()) {
332
LocInfo = CCValAssign::BCvt;
336
if (LocVT == MVT::i32) {
337
static const unsigned RegList1[] = {
338
X86::EDI, X86::ESI, X86::EDX, X86::ECX, X86::R8D, X86::R9D
340
if (unsigned Reg = State.AllocateReg(RegList1, 6)) {
341
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
346
if (LocVT == MVT::i64) {
347
static const unsigned RegList2[] = {
348
X86::RDI, X86::RSI, X86::RDX, X86::RCX, X86::R8, X86::R9
350
if (unsigned Reg = State.AllocateReg(RegList2, 6)) {
351
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
356
if (LocVT == MVT::v8i8 ||
357
LocVT == MVT::v4i16 ||
358
LocVT == MVT::v2i32 ||
359
LocVT == MVT::v2f32) {
360
if (State.getTarget().getSubtarget<X86Subtarget>().isTargetDarwin()) {
361
if (State.getTarget().getSubtarget<X86Subtarget>().hasSSE2()) {
363
if (ArgFlags.isSExt())
364
LocInfo = CCValAssign::SExt;
365
else if (ArgFlags.isZExt())
366
LocInfo = CCValAssign::ZExt;
368
LocInfo = CCValAssign::AExt;
373
if (LocVT == MVT::f32 ||
375
LocVT == MVT::v16i8 ||
376
LocVT == MVT::v8i16 ||
377
LocVT == MVT::v4i32 ||
378
LocVT == MVT::v2i64 ||
379
LocVT == MVT::v4f32 ||
380
LocVT == MVT::v2f64) {
381
if (State.getTarget().getSubtarget<X86Subtarget>().hasSSE1()) {
382
static const unsigned RegList3[] = {
383
X86::XMM0, X86::XMM1, X86::XMM2, X86::XMM3, X86::XMM4, X86::XMM5, X86::XMM6, X86::XMM7
385
if (unsigned Reg = State.AllocateReg(RegList3, 8)) {
386
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
392
if (LocVT == MVT::i32 ||
396
unsigned Offset4 = State.AllocateStack(8, 8);
397
State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset4, LocVT, LocInfo));
401
if (LocVT == MVT::f80) {
402
unsigned Offset5 = State.AllocateStack(
403
State.getTarget().getTargetData()->getTypeAllocSize(LocVT.getTypeForEVT(State.getContext())),
404
State.getTarget().getTargetData()->getABITypeAlignment(LocVT.getTypeForEVT(State.getContext())));
405
State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset5, LocVT, LocInfo));
409
if (LocVT == MVT::v16i8 ||
410
LocVT == MVT::v8i16 ||
411
LocVT == MVT::v4i32 ||
412
LocVT == MVT::v2i64 ||
413
LocVT == MVT::v4f32 ||
414
LocVT == MVT::v2f64) {
415
unsigned Offset6 = State.AllocateStack(16, 16);
416
State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset6, LocVT, LocInfo));
420
if (LocVT == MVT::v8i8 ||
421
LocVT == MVT::v4i16 ||
422
LocVT == MVT::v2i32 ||
423
LocVT == MVT::v1i64 ||
424
LocVT == MVT::v2f32) {
425
unsigned Offset7 = State.AllocateStack(8, 8);
426
State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset7, LocVT, LocInfo));
430
return true; // CC didn't match.
434
static bool CC_X86_Win64_C(unsigned ValNo, EVT ValVT,
435
EVT LocVT, CCValAssign::LocInfo LocInfo,
436
ISD::ArgFlagsTy ArgFlags, CCState &State) {
438
if (LocVT == MVT::i8 ||
441
if (ArgFlags.isSExt())
442
LocInfo = CCValAssign::SExt;
443
else if (ArgFlags.isZExt())
444
LocInfo = CCValAssign::ZExt;
446
LocInfo = CCValAssign::AExt;
449
if (ArgFlags.isNest()) {
450
if (unsigned Reg = State.AllocateReg(X86::R10)) {
451
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
456
if (LocVT == MVT::v16i8 ||
457
LocVT == MVT::v8i16 ||
458
LocVT == MVT::v4i32 ||
459
LocVT == MVT::v2i64 ||
460
LocVT == MVT::v4f32 ||
461
LocVT == MVT::v2f64) {
463
LocInfo = CCValAssign::Indirect;
466
if (LocVT == MVT::v8i8 ||
467
LocVT == MVT::v4i16 ||
468
LocVT == MVT::v2i32 ||
469
LocVT == MVT::v1i64 ||
470
LocVT == MVT::v2f32) {
472
LocInfo = CCValAssign::BCvt;
475
if (LocVT == MVT::i32) {
476
static const unsigned RegList1[] = {
477
X86::ECX, X86::EDX, X86::R8D, X86::R9D
479
static const unsigned RegList2[] = {
480
X86::XMM0, X86::XMM1, X86::XMM2, X86::XMM3
482
if (unsigned Reg = State.AllocateReg(RegList1, RegList2, 4)) {
483
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
488
if (LocVT == MVT::i64) {
489
static const unsigned RegList3[] = {
490
X86::RCX, X86::RDX, X86::R8, X86::R9
492
static const unsigned RegList4[] = {
493
X86::XMM0, X86::XMM1, X86::XMM2, X86::XMM3
495
if (unsigned Reg = State.AllocateReg(RegList3, RegList4, 4)) {
496
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
501
if (LocVT == MVT::f32 ||
503
LocVT == MVT::v16i8 ||
504
LocVT == MVT::v8i16 ||
505
LocVT == MVT::v4i32 ||
506
LocVT == MVT::v2i64 ||
507
LocVT == MVT::v4f32 ||
508
LocVT == MVT::v2f64) {
509
static const unsigned RegList5[] = {
510
X86::XMM0, X86::XMM1, X86::XMM2, X86::XMM3
512
static const unsigned RegList6[] = {
513
X86::RCX, X86::RDX, X86::R8, X86::R9
515
if (unsigned Reg = State.AllocateReg(RegList5, RegList6, 4)) {
516
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
521
if (LocVT == MVT::i32 ||
525
unsigned Offset7 = State.AllocateStack(8, 8);
526
State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset7, LocVT, LocInfo));
530
if (LocVT == MVT::f80) {
531
unsigned Offset8 = State.AllocateStack(
532
State.getTarget().getTargetData()->getTypeAllocSize(LocVT.getTypeForEVT(State.getContext())),
533
State.getTarget().getTargetData()->getABITypeAlignment(LocVT.getTypeForEVT(State.getContext())));
534
State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset8, LocVT, LocInfo));
538
if (LocVT == MVT::v8i8 ||
539
LocVT == MVT::v4i16 ||
540
LocVT == MVT::v2i32 ||
541
LocVT == MVT::v1i64) {
542
unsigned Offset9 = State.AllocateStack(8, 8);
543
State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset9, LocVT, LocInfo));
547
return true; // CC didn't match.
551
static bool RetCC_X86(unsigned ValNo, EVT ValVT,
552
EVT LocVT, CCValAssign::LocInfo LocInfo,
553
ISD::ArgFlagsTy ArgFlags, CCState &State) {
555
if (State.getTarget().getSubtarget<X86Subtarget>().is64Bit()) {
556
if (!RetCC_X86_64(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
560
if (!RetCC_X86_32(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
563
return true; // CC didn't match.
567
static bool RetCC_X86Common(unsigned ValNo, EVT ValVT,
568
EVT LocVT, CCValAssign::LocInfo LocInfo,
569
ISD::ArgFlagsTy ArgFlags, CCState &State) {
571
if (LocVT == MVT::i8) {
572
static const unsigned RegList1[] = {
575
if (unsigned Reg = State.AllocateReg(RegList1, 2)) {
576
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
581
if (LocVT == MVT::i16) {
582
static const unsigned RegList2[] = {
585
if (unsigned Reg = State.AllocateReg(RegList2, 2)) {
586
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
591
if (LocVT == MVT::i32) {
592
static const unsigned RegList3[] = {
595
if (unsigned Reg = State.AllocateReg(RegList3, 2)) {
596
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
601
if (LocVT == MVT::i64) {
602
static const unsigned RegList4[] = {
605
if (unsigned Reg = State.AllocateReg(RegList4, 2)) {
606
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
611
if (LocVT == MVT::v16i8 ||
612
LocVT == MVT::v8i16 ||
613
LocVT == MVT::v4i32 ||
614
LocVT == MVT::v2i64 ||
615
LocVT == MVT::v4f32 ||
616
LocVT == MVT::v2f64) {
617
static const unsigned RegList5[] = {
618
X86::XMM0, X86::XMM1, X86::XMM2, X86::XMM3
620
if (unsigned Reg = State.AllocateReg(RegList5, 4)) {
621
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
626
if (LocVT == MVT::v8i8 ||
627
LocVT == MVT::v4i16 ||
628
LocVT == MVT::v2i32 ||
629
LocVT == MVT::v1i64 ||
630
LocVT == MVT::v2f32) {
631
if (unsigned Reg = State.AllocateReg(X86::MM0)) {
632
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
637
if (LocVT == MVT::f80) {
638
static const unsigned RegList6[] = {
641
if (unsigned Reg = State.AllocateReg(RegList6, 2)) {
642
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
647
return true; // CC didn't match.
651
static bool RetCC_X86_32(unsigned ValNo, EVT ValVT,
652
EVT LocVT, CCValAssign::LocInfo LocInfo,
653
ISD::ArgFlagsTy ArgFlags, CCState &State) {
655
if (State.getCallingConv() == CallingConv::Fast) {
656
if (!RetCC_X86_32_Fast(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
660
if (!RetCC_X86_32_C(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
663
return true; // CC didn't match.
667
static bool RetCC_X86_32_C(unsigned ValNo, EVT ValVT,
668
EVT LocVT, CCValAssign::LocInfo LocInfo,
669
ISD::ArgFlagsTy ArgFlags, CCState &State) {
671
if (ArgFlags.isInReg()) {
672
if (State.getTarget().getSubtarget<X86Subtarget>().hasSSE2()) {
673
if (LocVT == MVT::f32 ||
675
static const unsigned RegList1[] = {
676
X86::XMM0, X86::XMM1, X86::XMM2
678
if (unsigned Reg = State.AllocateReg(RegList1, 3)) {
679
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
686
if (LocVT == MVT::f32 ||
688
static const unsigned RegList2[] = {
691
if (unsigned Reg = State.AllocateReg(RegList2, 2)) {
692
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
697
if (!RetCC_X86Common(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
700
return true; // CC didn't match.
704
static bool RetCC_X86_32_Fast(unsigned ValNo, EVT ValVT,
705
EVT LocVT, CCValAssign::LocInfo LocInfo,
706
ISD::ArgFlagsTy ArgFlags, CCState &State) {
708
if (LocVT == MVT::f32) {
709
if (State.getTarget().getSubtarget<X86Subtarget>().hasSSE2()) {
710
static const unsigned RegList1[] = {
711
X86::XMM0, X86::XMM1, X86::XMM2
713
if (unsigned Reg = State.AllocateReg(RegList1, 3)) {
714
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
720
if (LocVT == MVT::f64) {
721
if (State.getTarget().getSubtarget<X86Subtarget>().hasSSE2()) {
722
static const unsigned RegList2[] = {
723
X86::XMM0, X86::XMM1, X86::XMM2
725
if (unsigned Reg = State.AllocateReg(RegList2, 3)) {
726
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
732
if (LocVT == MVT::i8) {
733
static const unsigned RegList3[] = {
734
X86::AL, X86::DL, X86::CL
736
if (unsigned Reg = State.AllocateReg(RegList3, 3)) {
737
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
742
if (LocVT == MVT::i16) {
743
static const unsigned RegList4[] = {
744
X86::AX, X86::DX, X86::CX
746
if (unsigned Reg = State.AllocateReg(RegList4, 3)) {
747
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
752
if (LocVT == MVT::i32) {
753
static const unsigned RegList5[] = {
754
X86::EAX, X86::EDX, X86::ECX
756
if (unsigned Reg = State.AllocateReg(RegList5, 3)) {
757
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
762
if (!RetCC_X86Common(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
765
return true; // CC didn't match.
769
static bool RetCC_X86_64(unsigned ValNo, EVT ValVT,
770
EVT LocVT, CCValAssign::LocInfo LocInfo,
771
ISD::ArgFlagsTy ArgFlags, CCState &State) {
773
if (State.getTarget().getSubtarget<X86Subtarget>().isTargetWin64()) {
774
if (!RetCC_X86_Win64_C(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
778
if (!RetCC_X86_64_C(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
781
return true; // CC didn't match.
785
static bool RetCC_X86_64_C(unsigned ValNo, EVT ValVT,
786
EVT LocVT, CCValAssign::LocInfo LocInfo,
787
ISD::ArgFlagsTy ArgFlags, CCState &State) {
789
if (LocVT == MVT::f32) {
790
static const unsigned RegList1[] = {
793
if (unsigned Reg = State.AllocateReg(RegList1, 2)) {
794
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
799
if (LocVT == MVT::f64) {
800
static const unsigned RegList2[] = {
803
if (unsigned Reg = State.AllocateReg(RegList2, 2)) {
804
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
809
if (LocVT == MVT::v1i64) {
810
if (unsigned Reg = State.AllocateReg(X86::RAX)) {
811
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
816
if (LocVT == MVT::v8i8 ||
817
LocVT == MVT::v4i16 ||
818
LocVT == MVT::v2i32 ||
819
LocVT == MVT::v2f32) {
820
static const unsigned RegList3[] = {
823
if (unsigned Reg = State.AllocateReg(RegList3, 2)) {
824
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
829
if (!RetCC_X86Common(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
832
return true; // CC didn't match.
836
static bool RetCC_X86_Win64_C(unsigned ValNo, EVT ValVT,
837
EVT LocVT, CCValAssign::LocInfo LocInfo,
838
ISD::ArgFlagsTy ArgFlags, CCState &State) {
840
if (LocVT == MVT::v8i8 ||
841
LocVT == MVT::v4i16 ||
842
LocVT == MVT::v2i32 ||
843
LocVT == MVT::v1i64) {
845
LocInfo = CCValAssign::BCvt;
848
if (LocVT == MVT::f32) {
849
if (unsigned Reg = State.AllocateReg(X86::XMM0)) {
850
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
855
if (LocVT == MVT::f64) {
856
if (unsigned Reg = State.AllocateReg(X86::XMM0)) {
857
State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
862
if (!RetCC_X86_64_C(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))
865
return true; // CC didn't match.