LLVM API Documentation

IA64GenAsmWriter.inc

Go to the documentation of this file.
00001 //===- TableGen'erated file -------------------------------------*- C++ -*-===//
00002 //
00003 // Assembly Writer Source Fragment
00004 //
00005 // Automatically generated file, do not edit!
00006 //
00007 //===----------------------------------------------------------------------===//
00008 
00009 /// printInstruction - This method is automatically generated by tablegen
00010 /// from the instruction set description.  This method returns true if the
00011 /// machine instruction was sufficiently described to print it, otherwise
00012 /// it returns false.
00013 bool IA64AsmPrinter::printInstruction(const MachineInstr *MI) {
00014   static const unsigned OpInfo[] = {
00015     0U, // PHI
00016     0U, // INLINEASM
00017     536870921U, // ADD
00018     536903689U, // ADD1
00019     537919502U, // ADDIMM14
00020     538968073U, // ADDIMM22
00021     540016660U, // ADDL_EA
00022     541065236U, // ADDL_GA
00023     537919502U, // ADDS
00024     26U,  // ADJUSTCALLSTACKDOWN
00025     50U,  // ADJUSTCALLSTACKUP
00026     553648200U, // ALLOC
00027     536870991U, // AND
00028     536870996U, // ANDCM
00029     570425435U, // BCMPEQ
00030     1073741923U,  // BRCALL
00031     587202659U, // BRCALL_INDIRECT
00032     1073741923U,  // BRCALL_IPREL_ES
00033     1073741923U,  // BRCALL_IPREL_GA
00034     603979894U, // BRCOND_CALL
00035     620757110U, // BRCOND_NOTCALL
00036     637534326U, // BRLCOND_CALL
00037     654311542U, // BRLCOND_NOTCALL
00038     587202680U, // BRL_NOTCALL
00039     1746927734U,  // CADDIMM22
00040     2298478710U,  // CFMADS0
00041     2315255926U,  // CFMADS1
00042     2332033142U,  // CFMAS1
00043     2885681270U,  // CFMOV
00044     2365587574U,  // CFNMADS1
00045     2382364790U,  // CFNMAS1
00046     2885681270U,  // CMOV
00047     788529243U, // CMPEQ
00048     788529292U, // CMPGE
00049     788529300U, // CMPGEU
00050     788529309U, // CMPGT
00051     788529317U, // CMPGTU
00052     788529326U, // CMPLE
00053     788529334U, // CMPLEU
00054     788529343U, // CMPLT
00055     788529351U, // CMPLTU
00056     788529360U, // CMPNE
00057     536936664U, // DEPZ
00058     536936671U, // EXTRU
00059     537395431U, // FABS
00060     536871149U, // FADD
00061     536871155U, // FADDS
00062     788529403U, // FCMPEQ
00063     788529412U, // FCMPGE
00064     788529421U, // FCMPGEU
00065     788529431U, // FCMPGT
00066     788529440U, // FCMPGTU
00067     788529450U, // FCMPLE
00068     788529459U, // FCMPLEU
00069     788529469U, // FCMPLT
00070     788529478U, // FCMPLTU
00071     788529488U, // FCMPNE
00072     537395546U, // FCVTFX
00073     537395555U, // FCVTFXTRUNC
00074     537395570U, // FCVTFXTRUNCS1
00075     537395588U, // FCVTFXU
00076     537395598U, // FCVTFXUTRUNC
00077     537395614U, // FCVTFXUTRUNCS1
00078     537395633U, // FCVTXF
00079     537395642U, // FCVTXUF
00080     537395652U, // FCVTXUFS1
00081     587203025U, // FILL_ALL_PREDICATES_FROM_GR
00082     536936923U, // FMA
00083     537395680U, // FMOV
00084     536871397U, // FMPY
00085     536936939U, // FMS
00086     537395696U, // FNEG
00087     537395702U, // FNEGABS
00088     536936959U, // FNMA
00089     537395717U, // FNORMD
00090     805306894U, // FRCPAS0
00091     805306904U, // FRCPAS1
00092     536871458U, // FSUB
00093     537395752U, // GETFD
00094     537395760U, // GETFSIG
00095     537395760U, // GETFSIGD
00096     570U, // IDEF
00097     822084163U, // IDEF_FP_D
00098     822084163U, // IDEF_GR_D
00099     822084163U, // IDEF_PR_D
00100     583U, // IUSE
00101     838861392U, // LD1
00102     838861397U, // LD2
00103     838861402U, // LD4
00104     838861407U, // LD8
00105     838861412U, // LDF4
00106     838861418U, // LDF8
00107     838861424U, // LDF_FILL
00108     536871546U, // MIX1L
00109     536871554U, // MIX1R
00110     536871562U, // MIX2L
00111     536871570U, // MIX2R
00112     536871578U, // MIX4L
00113     536871586U, // MIX4R
00114     537395680U, // MOV
00115     542114474U, // MOVL
00116     542114474U, // MOVLIMM64
00117     543162848U, // MOVSIMM14
00118     544735712U, // MOVSIMM22
00119     536871600U, // OR
00120     1929379958U,  // PCMPEQOR
00121     1954545782U,  // PCMPEQUNC
00122     3566207094U,  // PCMPEQUNCR0R0
00123     1971322998U,  // PCMPNE
00124     2885681270U,  // PFMOV
00125     2885681270U,  // PMOV
00126     537395892U, // POPCNT
00127     700U, // PSEUDO_ALLOC
00128     717U, // RET
00129     537395938U, // SETFD
00130     537395946U, // SETFSIG
00131     537395946U, // SETFSIGD
00132     536871668U, // SHL
00133     537002745U, // SHLADD
00134     536871668U, // SHLI
00135     536871681U, // SHRS
00136     536871681U, // SHRSI
00137     536871686U, // SHRU
00138     536871686U, // SHRUI
00139     905970144U, // SPILL_ALL_PREDICATES_TO_GR
00140     922747661U, // ST1
00141     922747667U, // ST2
00142     922747673U, // ST4
00143     922747679U, // ST8
00144     922747685U, // STF4
00145     922747692U, // STF8
00146     922747699U, // STF_SPILL
00147     831U, // STOP
00148     536871747U, // SUB
00149     536904515U, // SUB1
00150     547357507U, // SUBIMM8
00151     537396040U, // SXT1
00152     537396046U, // SXT2
00153     537396052U, // SXT4
00154     2298478710U,  // TCFMADS0
00155     2332033142U,  // TCFMAS1
00156     788529360U, // TCMPNE
00157     2826174582U,  // TPCADDIMM22
00158     3087007862U,  // TPCADDS
00159     2038431862U,  // TPCMPEQ
00160     1929379958U,  // TPCMPEQOR
00161     3650093174U,  // TPCMPEQR0R0
00162     1974468726U,  // TPCMPIMM8NE
00163     1971322998U,  // TPCMPNE
00164     3582984310U,  // TPCMPNER0R0
00165     536937306U, // XMAHD
00166     536937313U, // XMAHUD
00167     536937321U, // XMAL
00168     536937321U, // XMALD
00169     536871792U, // XOR
00170     537396085U, // ZXT1
00171     537396091U, // ZXT2
00172     537396097U, // ZXT4
00173     2046820470U,  // pOR
00174     0U
00175   };
00176 
00177   const char *AsmStrs = 
00178     "PHINODE\n\000add \000adds \000addl \000// ADJUSTCALLSTACKDOWN\n\000// A"
00179     "DJUSTCALLSTACKUP\n\000alloc \000and \000andcm \000cmp.eq \000br.call.sp"
00180     "tk rp = \000(\000(p0) brl.cond.sptk \000cmp.ge \000cmp.geu \000cmp.gt \000"
00181     "cmp.gtu \000cmp.le \000cmp.leu \000cmp.lt \000cmp.ltu \000cmp.ne \000de"
00182     "p.z \000extr.u \000fabs \000fadd \000fadd.s \000fcmp.eq \000fcmp.ge \000"
00183     "fcmp.geu \000fcmp.gt \000fcmp.gtu \000fcmp.le \000fcmp.leu \000fcmp.lt "
00184     "\000fcmp.ltu \000fcmp.neq \000fcvt.fx \000fcvt.fx.trunc \000fcvt.fx.tru"
00185     "nc.s1 \000fcvt.fxu \000fcvt.fxu.trunc \000fcvt.fxu.trunc.s1 \000fcvt.xf"
00186     " \000fcvt.xuf \000fcvt.xuf.s1 \000mov pr = \000fma \000mov \000fmpy \000"
00187     "fms \000fneg \000fnegabs \000fnma \000fnorm.d \000frcpa.s0 \000frcpa.s1"
00188     " \000fsub \000getf.d \000getf.sig \000// IDEF\n\000// \000// IUSE\n\000"
00189     "ld1 \000ld2 \000ld4 \000ld8 \000ldfs \000ldfd \000ldf.fill \000mix1.l \000"
00190     "mix1.r \000mix2.l \000mix2.r \000mix4.l \000mix4.r \000movl \000or \000"
00191     "popcnt \000// PSEUDO_ALLOC\n\000br.ret.sptk.many rp\n\000setf.d \000set"
00192     "f.sig \000shl \000shladd \000shr \000shr.u \000st1 [\000st2 [\000st4 [\000"
00193     "st8 [\000stfs [\000stfd [\000stf.spill [\000;;\n\000sub \000sxt1 \000sx"
00194     "t2 \000sxt4 \000xma.h \000xma.hu \000xma.l \000xor \000zxt1 \000zxt2 \000"
00195     "zxt4 \000";
00196 
00197   if (MI->getOpcode() == TargetInstrInfo::INLINEASM) {
00198     printInlineAsm(MI);
00199     return true;
00200   }
00201 
00202   // Emit the opcode for the instruction.
00203   unsigned Bits = OpInfo[MI->getOpcode()];
00204   if (Bits == 0) return false;
00205   O << AsmStrs+(Bits & 1023);
00206 
00207 
00208   // Fragment 0 encoded into 3 bits for 7 unique commands.
00209   switch ((Bits >> 29) & 7) {
00210   default:   // unreachable.
00211   case 0:
00212     return true;
00213     break;
00214   case 1:
00215     // ADD, ADD1, ADDIMM14, ADDIMM22, ADDL_EA, ADDL_GA, ADDS, ALLOC, AND, AND...
00216     printOperand(MI, 0); 
00217     break;
00218   case 2:
00219     // BRCALL, BRCALL_IPREL_ES, BRCALL_IPREL_GA
00220     printCallOperand(MI, 0); 
00221     O << "\n"; 
00222     return true;
00223     break;
00224   case 3:
00225     // CADDIMM22, PCMPEQOR, PCMPEQUNC, PCMPNE, TPCMPEQ, TPCMPEQOR, TPCMPIMM8N...
00226     printOperand(MI, 3); 
00227     break;
00228   case 4:
00229     // CFMADS0, CFMADS1, CFMAS1, CFNMADS1, CFNMAS1, TCFMADS0, TCFMAS1
00230     printOperand(MI, 4); 
00231     break;
00232   case 5:
00233     // CFMOV, CMOV, PFMOV, PMOV, TPCADDIMM22, TPCADDS
00234     printOperand(MI, 2); 
00235     break;
00236   case 6:
00237     // PCMPEQUNCR0R0, TPCMPEQR0R0, TPCMPNER0R0
00238     printOperand(MI, 1); 
00239     break;
00240   }
00241 
00242 
00243   // Fragment 1 encoded into 5 bits for 27 unique commands.
00244   switch ((Bits >> 24) & 31) {
00245   default:   // unreachable.
00246   case 0:
00247     // ADD, ADD1, ADDIMM14, ADDIMM22, ADDL_EA, ADDL_GA, ADDS, AND, ANDCM, DEP...
00248     O << " = "; 
00249     break;
00250   case 1:
00251     // ALLOC
00252     O << " = ar.pfs,"; 
00253     printOperand(MI, 1); 
00254     O << ","; 
00255     printOperand(MI, 2); 
00256     O << ","; 
00257     printOperand(MI, 3); 
00258     O << ","; 
00259     printOperand(MI, 4); 
00260     O << "\n"; 
00261     return true;
00262     break;
00263   case 2:
00264     // BCMPEQ
00265     O << ", dst2 = "; 
00266     printOperand(MI, 2); 
00267     O << ", "; 
00268     printOperand(MI, 3); 
00269     O << "\n"; 
00270     return true;
00271     break;
00272   case 3:
00273     // BRCALL_INDIRECT, BRL_NOTCALL, FILL_ALL_PREDICATES_FROM_GR
00274     O << "\n"; 
00275     return true;
00276     break;
00277   case 4:
00278     // BRCOND_CALL
00279     O << ") br.cond.call.sptk "; 
00280     printOperand(MI, 1); 
00281     O << "\n"; 
00282     return true;
00283     break;
00284   case 5:
00285     // BRCOND_NOTCALL
00286     O << ") br.cond.sptk "; 
00287     printOperand(MI, 1); 
00288     O << "\n"; 
00289     return true;
00290     break;
00291   case 6:
00292     // BRLCOND_CALL
00293     O << ") brl.cond.call.sptk "; 
00294     printOperand(MI, 1); 
00295     O << "\n"; 
00296     return true;
00297     break;
00298   case 7:
00299     // BRLCOND_NOTCALL
00300     O << ") brl.cond.sptk "; 
00301     printOperand(MI, 1); 
00302     O << "\n"; 
00303     return true;
00304     break;
00305   case 8:
00306     // CADDIMM22, TPCADDIMM22
00307     O << ") add "; 
00308     printOperand(MI, 0); 
00309     O << " = "; 
00310     break;
00311   case 9:
00312     // CFMADS0, TCFMADS0
00313     O << ") fma.d.s0 "; 
00314     printOperand(MI, 0); 
00315     O << " = "; 
00316     printOperand(MI, 1); 
00317     O << ", "; 
00318     printOperand(MI, 2); 
00319     O << ", "; 
00320     printOperand(MI, 3); 
00321     O << "\n"; 
00322     return true;
00323     break;
00324   case 10:
00325     // CFMADS1
00326     O << ") fma.d.s1 "; 
00327     printOperand(MI, 0); 
00328     O << " = "; 
00329     printOperand(MI, 1); 
00330     O << ", "; 
00331     printOperand(MI, 2); 
00332     O << ", "; 
00333     printOperand(MI, 3); 
00334     O << "\n"; 
00335     return true;
00336     break;
00337   case 11:
00338     // CFMAS1, TCFMAS1
00339     O << ") fma.s1 "; 
00340     printOperand(MI, 0); 
00341     O << " = "; 
00342     printOperand(MI, 1); 
00343     O << ", "; 
00344     printOperand(MI, 2); 
00345     O << ", "; 
00346     printOperand(MI, 3); 
00347     O << "\n"; 
00348     return true;
00349     break;
00350   case 12:
00351     // CFMOV, CMOV, PFMOV, PMOV
00352     O << ") mov "; 
00353     printOperand(MI, 0); 
00354     O << " = "; 
00355     printOperand(MI, 1); 
00356     O << "\n"; 
00357     return true;
00358     break;
00359   case 13:
00360     // CFNMADS1
00361     O << ") fnma.d.s1 "; 
00362     printOperand(MI, 0); 
00363     O << " = "; 
00364     printOperand(MI, 1); 
00365     O << ", "; 
00366     printOperand(MI, 2); 
00367     O << ", "; 
00368     printOperand(MI, 3); 
00369     O << "\n"; 
00370     return true;
00371     break;
00372   case 14:
00373     // CFNMAS1
00374     O << ") fnma.s1 "; 
00375     printOperand(MI, 0); 
00376     O << " = "; 
00377     printOperand(MI, 1); 
00378     O << ", "; 
00379     printOperand(MI, 2); 
00380     O << ", "; 
00381     printOperand(MI, 3); 
00382     O << "\n"; 
00383     return true;
00384     break;
00385   case 15:
00386     // CMPEQ, CMPGE, CMPGEU, CMPGT, CMPGTU, CMPLE, CMPLEU, CMPLT, CMPLTU, CMP...
00387     O << ", p0 = "; 
00388     printOperand(MI, 1); 
00389     O << ", "; 
00390     printOperand(MI, 2); 
00391     O << "\n"; 
00392     return true;
00393     break;
00394   case 16:
00395     // FRCPAS0, FRCPAS1
00396     O << ", "; 
00397     printOperand(MI, 1); 
00398     O << " = "; 
00399     printOperand(MI, 2); 
00400     O << ", "; 
00401     printOperand(MI, 3); 
00402     O << "\n"; 
00403     return true;
00404     break;
00405   case 17:
00406     // IDEF_FP_D, IDEF_GR_D, IDEF_PR_D
00407     O << " = IDEF\n"; 
00408     return true;
00409     break;
00410   case 18:
00411     // LD1, LD2, LD4, LD8, LDF4, LDF8, LDF_FILL
00412     O << " = ["; 
00413     printOperand(MI, 1); 
00414     O << "]\n"; 
00415     return true;
00416     break;
00417   case 19:
00418     // PCMPEQOR, TPCMPEQOR
00419     O << ") cmp.eq.or "; 
00420     printOperand(MI, 0); 
00421     O << ", p0 = "; 
00422     printOperand(MI, 1); 
00423     O << ", "; 
00424     printOperand(MI, 2); 
00425     O << "\n"; 
00426     return true;
00427     break;
00428   case 20:
00429     // PCMPEQUNC, PCMPEQUNCR0R0
00430     O << ") cmp.eq.unc "; 
00431     printOperand(MI, 0); 
00432     break;
00433   case 21:
00434     // PCMPNE, TPCMPIMM8NE, TPCMPNE, TPCMPNER0R0
00435     O << ") cmp.ne "; 
00436     printOperand(MI, 0); 
00437     break;
00438   case 22:
00439     // SPILL_ALL_PREDICATES_TO_GR
00440     O << " = pr\n"; 
00441     return true;
00442     break;
00443   case 23:
00444     // ST1, ST2, ST4, ST8, STF4, STF8, STF_SPILL
00445     O << "] = "; 
00446     printOperand(MI, 1); 
00447     O << "\n"; 
00448     return true;
00449     break;
00450   case 24:
00451     // TPCADDS
00452     O << ") adds "; 
00453     printOperand(MI, 0); 
00454     O << " = "; 
00455     printS14ImmOperand(MI, 1); 
00456     O << ", "; 
00457     printOperand(MI, 0); 
00458     O << "\n"; 
00459     return true;
00460     break;
00461   case 25:
00462     // TPCMPEQ, TPCMPEQR0R0
00463     O << ") cmp.eq "; 
00464     printOperand(MI, 0); 
00465     break;
00466   case 26:
00467     // pOR
00468     O << ") or "; 
00469     printOperand(MI, 0); 
00470     O << " = "; 
00471     printOperand(MI, 1); 
00472     O << ", "; 
00473     printOperand(MI, 2); 
00474     O << "\n"; 
00475     return true;
00476     break;
00477   }
00478 
00479 
00480   // Fragment 2 encoded into 4 bits for 12 unique commands.
00481   switch ((Bits >> 20) & 15) {
00482   default:   // unreachable.
00483   case 0:
00484     // ADD, ADD1, AND, ANDCM, DEPZ, EXTRU, FABS, FADD, FADDS, FCVTFX, FCVTFXT...
00485     printOperand(MI, 1); 
00486     break;
00487   case 1:
00488     // ADDIMM14, ADDS
00489     printS14ImmOperand(MI, 2); 
00490     O << ", "; 
00491     printOperand(MI, 1); 
00492     O << "\n"; 
00493     return true;
00494     break;
00495   case 2:
00496     // ADDIMM22, CADDIMM22
00497     printS22ImmOperand(MI, 2); 
00498     O << ", "; 
00499     printOperand(MI, 1); 
00500     O << "\n"; 
00501     return true;
00502     break;
00503   case 3:
00504     // ADDL_EA
00505     printCallOperand(MI, 2); 
00506     O << ", "; 
00507     printOperand(MI, 1); 
00508     O << "\n"; 
00509     return true;
00510     break;
00511   case 4:
00512     // ADDL_GA
00513     printGlobalOperand(MI, 2); 
00514     O << ", "; 
00515     printOperand(MI, 1); 
00516     O << "\n"; 
00517     return true;
00518     break;
00519   case 5:
00520     // MOVL, MOVLIMM64
00521     printS64ImmOperand(MI, 1); 
00522     O << "\n"; 
00523     return true;
00524     break;
00525   case 6:
00526     // MOVSIMM14
00527     printS14ImmOperand(MI, 1); 
00528     O << "\n"; 
00529     return true;
00530     break;
00531   case 7:
00532     // MOVSIMM22, TPCADDIMM22
00533     printS22ImmOperand(MI, 1); 
00534     break;
00535   case 8:
00536     // PCMPEQUNC, PCMPNE, TPCMPEQ, TPCMPNE
00537     O << ", p0 = "; 
00538     printOperand(MI, 1); 
00539     O << ", "; 
00540     printOperand(MI, 2); 
00541     O << "\n"; 
00542     return true;
00543     break;
00544   case 9:
00545     // PCMPEQUNCR0R0, TPCMPEQR0R0, TPCMPNER0R0
00546     O << ", p0 = r0, r0\n"; 
00547     return true;
00548     break;
00549   case 10:
00550     // SUBIMM8
00551     printS8ImmOperand(MI, 1); 
00552     O << ", "; 
00553     printOperand(MI, 2); 
00554     O << "\n"; 
00555     return true;
00556     break;
00557   case 11:
00558     // TPCMPIMM8NE
00559     O << " , p0 = "; 
00560     printS22ImmOperand(MI, 1); 
00561     O << ", "; 
00562     printOperand(MI, 2); 
00563     O << "\n"; 
00564     return true;
00565     break;
00566   }
00567 
00568 
00569   // Fragment 3 encoded into 1 bits for 2 unique commands.
00570   if ((Bits >> 19) & 1) {
00571     // FABS, FCVTFX, FCVTFXTRUNC, FCVTFXTRUNCS1, FCVTFXU, FCVTFXUTRUNC, FCVTF...
00572     O << "\n"; 
00573     return true;
00574   } else {
00575     // ADD, ADD1, AND, ANDCM, DEPZ, EXTRU, FADD, FADDS, FMA, FMPY, FMS, FNMA,...
00576     O << ", "; 
00577   }
00578 
00579 
00580   // Fragment 4 encoded into 2 bits for 3 unique commands.
00581   switch ((Bits >> 17) & 3) {
00582   default:   // unreachable.
00583   case 0:
00584     // ADD, ADD1, AND, ANDCM, DEPZ, EXTRU, FADD, FADDS, FMA, FMPY, FMS, FNMA,...
00585     printOperand(MI, 2); 
00586     break;
00587   case 1:
00588     // SHLADD
00589     printS64ImmOperand(MI, 2); 
00590     O << ", "; 
00591     printOperand(MI, 3); 
00592     O << "\n"; 
00593     return true;
00594     break;
00595   case 2:
00596     // TPCADDIMM22
00597     printOperand(MI, 0); 
00598     O << "\n"; 
00599     return true;
00600     break;
00601   }
00602 
00603 
00604   // Fragment 5 encoded into 2 bits for 3 unique commands.
00605   switch ((Bits >> 15) & 3) {
00606   default:   // unreachable.
00607   case 0:
00608     // ADD, AND, ANDCM, FADD, FADDS, FMPY, FSUB, MIX1L, MIX1R, MIX2L, MIX2R, ...
00609     O << "\n"; 
00610     return true;
00611     break;
00612   case 1:
00613     // ADD1, SUB1
00614     O << ", 1\n"; 
00615     return true;
00616     break;
00617   case 2:
00618     // DEPZ, EXTRU, FMA, FMS, FNMA, XMAHD, XMAHUD, XMAL, XMALD
00619     O << ", "; 
00620     printOperand(MI, 3); 
00621     O << "\n"; 
00622     return true;
00623     break;
00624   }
00625 
00626 }