LLVM API Documentation
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 }