LLVM API Documentation

PPCGenCallingConv.inc

Go to the documentation of this file.
00001 //===- TableGen'erated file -------------------------------------*- C++ -*-===//
00002 //
00003 // Calling Convention Implementation Fragment
00004 //
00005 // Automatically generated file, do not edit!
00006 //
00007 //===----------------------------------------------------------------------===//
00008 
00009 static bool RetCC_PPC(unsigned ValNo, MVT ValVT,
00010                       MVT LocVT, CCValAssign::LocInfo LocInfo,
00011                       ISD::ArgFlagsTy ArgFlags, CCState &State);
00012 
00013 
00014 static bool RetCC_PPC(unsigned ValNo, MVT ValVT,
00015                       MVT LocVT, CCValAssign::LocInfo LocInfo,
00016                       ISD::ArgFlagsTy ArgFlags, CCState &State) {
00017 
00018   if (LocVT == MVT::i32) {
00019     static const unsigned RegList1[] = {
00020       PPC::R3, PPC::R4, PPC::R5, PPC::R6, PPC::R7, PPC::R8, PPC::R9, PPC::R10
00021     };
00022     if (unsigned Reg = State.AllocateReg(RegList1, 8)) {
00023       State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
00024       return false;
00025     }
00026   }
00027 
00028   if (LocVT == MVT::i64) {
00029     static const unsigned RegList2[] = {
00030       PPC::X3, PPC::X4, PPC::X5, PPC::X6
00031     };
00032     if (unsigned Reg = State.AllocateReg(RegList2, 4)) {
00033       State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
00034       return false;
00035     }
00036   }
00037 
00038   if (LocVT == MVT::f32) {
00039     if (unsigned Reg = State.AllocateReg(PPC::F1)) {
00040       State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
00041       return false;
00042     }
00043   }
00044 
00045   if (LocVT == MVT::f64) {
00046     static const unsigned RegList3[] = {
00047       PPC::F1, PPC::F2
00048     };
00049     if (unsigned Reg = State.AllocateReg(RegList3, 2)) {
00050       State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
00051       return false;
00052     }
00053   }
00054 
00055   if (LocVT == MVT::v16i8 ||
00056       LocVT == MVT::v8i16 ||
00057       LocVT == MVT::v4i32 ||
00058       LocVT == MVT::v4f32) {
00059     if (unsigned Reg = State.AllocateReg(PPC::V2)) {
00060       State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
00061       return false;
00062     }
00063   }
00064 
00065   return true;  // CC didn't match.
00066 }