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 SparcAsmPrinter::printInstruction(const MachineInstr *MI) { 00014 static const unsigned OpInfo[] = { 00015 0U, // PHI 00016 0U, // INLINEASM 00017 268435465U, // ADDCCri 00018 268435465U, // ADDCCrr 00019 268435472U, // ADDXri 00020 268435472U, // ADDXrr 00021 268435478U, // ADDri 00022 268435478U, // ADDrr 00023 570425371U, // ADJCALLSTACKDOWN 00024 570425390U, // ADJCALLSTACKUP 00025 268435519U, // ANDNri 00026 268435519U, // ANDNrr 00027 268435525U, // ANDri 00028 268435525U, // ANDrr 00029 570425418U, // BA 00030 805306446U, // BCOND 00031 570425424U, // CALL 00032 335544406U, // FABSD 00033 335544413U, // FABSS 00034 268435556U, // FADDD 00035 268435563U, // FADDS 00036 805306482U, // FBCOND 00037 637534325U, // FCMPD 00038 637534332U, // FCMPS 00039 268435587U, // FDIVD 00040 268435594U, // FDIVS 00041 335544465U, // FDTOI 00042 335544472U, // FDTOS 00043 335544479U, // FITOD 00044 335544486U, // FITOS 00045 335544493U, // FMOVD 00046 1207959732U, // FMOVD_FCC 00047 1241514164U, // FMOVD_ICC 00048 335544506U, // FMOVS 00049 1207959745U, // FMOVS_FCC 00050 1241514177U, // FMOVS_ICC 00051 268435655U, // FMULD 00052 268435662U, // FMULS 00053 335544533U, // FNEGD 00054 335544540U, // FNEGS 00055 268435683U, // FSMULD 00056 335544555U, // FSQRTD 00057 335544563U, // FSQRTS 00058 335544571U, // FSTOD 00059 335544578U, // FSTOI 00060 268435721U, // FSUBD 00061 268435728U, // FSUBS 00062 335544599U, // FpABSD 00063 335544608U, // FpMOVD 00064 335544617U, // FpNEGD 00065 570425650U, // IMPLICIT_DEF_DFP 00066 570425650U, // IMPLICIT_DEF_FP 00067 570425650U, // IMPLICIT_DEF_Int 00068 1342177360U, // JMPLri 00069 1342177360U, // JMPLrr 00070 1610613057U, // LDDFri 00071 1610613057U, // LDDFrr 00072 1610613063U, // LDFri 00073 1610613063U, // LDFrr 00074 1610613068U, // LDSBri 00075 1610613068U, // LDSBrr 00076 1610613075U, // LDSHri 00077 1610613075U, // LDSHrr 00078 1610613082U, // LDUBri 00079 1610613082U, // LDUBrr 00080 1610613089U, // LDUHri 00081 1610613089U, // LDUHrr 00082 1610613063U, // LDri 00083 1610613063U, // LDrr 00084 1879048214U, // LEA_ADDri 00085 1207959912U, // MOVFCCri 00086 1207959912U, // MOVFCCrr 00087 1241514344U, // MOVICCri 00088 1241514344U, // MOVICCrr 00089 364U, // NOP 00090 268435825U, // ORNri 00091 268435825U, // ORNrr 00092 268435830U, // ORri 00093 268435830U, // ORrr 00094 335544698U, // POPCrr 00095 570425728U, // RDY 00096 268435848U, // RESTOREri 00097 268435848U, // RESTORErr 00098 401U, // RETL 00099 268435863U, // SAVEri 00100 268435863U, // SAVErr 00101 268435869U, // SDIVri 00102 268435869U, // SDIVrr 00103 419U, // SELECT_CC_DFP_FCC 00104 448U, // SELECT_CC_DFP_ICC 00105 477U, // SELECT_CC_FP_FCC 00106 505U, // SELECT_CC_FP_ICC 00107 533U, // SELECT_CC_Int_FCC 00108 562U, // SELECT_CC_Int_ICC 00109 335544911U, // SETHIi 00110 268436054U, // SLLri 00111 268436054U, // SLLrr 00112 268436059U, // SMULri 00113 268436059U, // SMULrr 00114 268436065U, // SRAri 00115 268436065U, // SRArr 00116 268436070U, // SRLri 00117 268436070U, // SRLrr 00118 2147484267U, // STBri 00119 2147484267U, // STBrr 00120 2147484272U, // STDFri 00121 2147484277U, // STDFrr 00122 2147484283U, // STFri 00123 2147484283U, // STFrr 00124 2147484287U, // STHri 00125 2147484287U, // STHrr 00126 2147484283U, // STri 00127 2147484283U, // STrr 00128 268436100U, // SUBCCri 00129 268436100U, // SUBCCrr 00130 268436107U, // SUBXCCrr 00131 268436115U, // SUBXri 00132 268436115U, // SUBXrr 00133 268436121U, // SUBri 00134 268436121U, // SUBrr 00135 268436126U, // UDIVri 00136 268436126U, // UDIVrr 00137 268436132U, // UMULri 00138 268436132U, // UMULrr 00139 654312106U, // WRYri 00140 654312106U, // WRYrr 00141 268436142U, // XNORri 00142 268436142U, // XNORrr 00143 268436148U, // XORri 00144 268436148U, // XORrr 00145 0U 00146 }; 00147 00148 const char *AsmStrs = 00149 "PHINODE\n\000addcc \000addx \000add \000!ADJCALLSTACKDOWN \000!ADJCALLS" 00150 "TACKUP \000andn \000and \000ba \000b\000call \000fabsd \000fabss \000fa" 00151 "ddd \000fadds \000fb\000fcmpd \000fcmps \000fdivd \000fdivs \000fdtoi \000" 00152 "fdtos \000fitod \000fitos \000fmovd \000fmovd\000fmovs \000fmovs\000fmu" 00153 "ld \000fmuls \000fnegd \000fnegs \000fsmuld \000fsqrtd \000fsqrts \000f" 00154 "stod \000fstoi \000fsubd \000fsubs \000!FpABSD \000!FpMOVD \000!FpNEGD " 00155 "\000!IMPLICIT_DEF \000ldd [\000ld [\000ldsb [\000ldsh [\000ldub [\000ld" 00156 "uh [\000mov\000nop\n\000orn \000or \000popc \000rd %y, \000restore \000" 00157 "retl\n\000save \000sdiv \000; SELECT_CC_DFP_FCC PSEUDO!\n\000; SELECT_C" 00158 "C_DFP_ICC PSEUDO!\n\000; SELECT_CC_FP_FCC PSEUDO!\n\000; SELECT_CC_FP_I" 00159 "CC PSEUDO!\n\000; SELECT_CC_Int_FCC PSEUDO!\n\000; SELECT_CC_Int_ICC PS" 00160 "EUDO!\n\000sethi \000sll \000smul \000sra \000srl \000stb \000std \000s" 00161 "td \000st \000sth \000subcc \000subxcc \000subx \000sub \000udiv \000u" 00162 "mul \000wr \000xnor \000xor \000"; 00163 00164 if (MI->getOpcode() == TargetInstrInfo::INLINEASM) { 00165 printInlineAsm(MI); 00166 return true; 00167 } 00168 00169 // Emit the opcode for the instruction. 00170 unsigned Bits = OpInfo[MI->getOpcode()]; 00171 if (Bits == 0) return false; 00172 O << AsmStrs+(Bits & 1023); 00173 00174 00175 // Fragment 0 encoded into 4 bits for 9 unique commands. 00176 switch ((Bits >> 28) & 15) { 00177 default: // unreachable. 00178 case 0: 00179 return true; 00180 break; 00181 case 1: 00182 // ADDCCri, ADDCCrr, ADDXri, ADDXrr, ADDri, ADDrr, ANDNri, ANDNrr, ANDri,... 00183 printOperand(MI, 1); 00184 O << ", "; 00185 break; 00186 case 2: 00187 // ADJCALLSTACKDOWN, ADJCALLSTACKUP, BA, CALL, FCMPD, FCMPS, IMPLICIT_DEF... 00188 printOperand(MI, 0); 00189 break; 00190 case 3: 00191 // BCOND, FBCOND 00192 printCCOperand(MI, 1); 00193 O << " "; 00194 printOperand(MI, 0); 00195 O << "\n"; 00196 return true; 00197 break; 00198 case 4: 00199 // FMOVD_FCC, FMOVD_ICC, FMOVS_FCC, FMOVS_ICC, MOVFCCri, MOVFCCrr, MOVICC... 00200 printCCOperand(MI, 2); 00201 break; 00202 case 5: 00203 // JMPLri, JMPLrr 00204 printMemOperand(MI, 0); 00205 O << "\n"; 00206 return true; 00207 break; 00208 case 6: 00209 // LDDFri, LDDFrr, LDFri, LDFrr, LDSBri, LDSBrr, LDSHri, LDSHrr, LDUBri, ... 00210 printMemOperand(MI, 1); 00211 O << "], "; 00212 printOperand(MI, 0); 00213 O << "\n"; 00214 return true; 00215 break; 00216 case 7: 00217 // LEA_ADDri 00218 printMemOperand(MI, 1, "arith"); 00219 O << ", "; 00220 printOperand(MI, 0); 00221 O << "\n"; 00222 return true; 00223 break; 00224 case 8: 00225 // STBri, STBrr, STDFri, STDFrr, STFri, STFrr, STHri, STHrr, STri, STrr 00226 printOperand(MI, 2); 00227 O << ", ["; 00228 printMemOperand(MI, 0); 00229 O << "]\n"; 00230 return true; 00231 break; 00232 } 00233 00234 00235 // Fragment 1 encoded into 3 bits for 6 unique commands. 00236 switch ((Bits >> 25) & 7) { 00237 default: // unreachable. 00238 case 0: 00239 // ADDCCri, ADDCCrr, ADDXri, ADDXrr, ADDri, ADDrr, ANDNri, ANDNrr, ANDri,... 00240 printOperand(MI, 2); 00241 O << ", "; 00242 printOperand(MI, 0); 00243 O << "\n"; 00244 return true; 00245 break; 00246 case 1: 00247 // ADJCALLSTACKDOWN, ADJCALLSTACKUP, BA, CALL, IMPLICIT_DEF_DFP, IMPLICIT... 00248 O << "\n"; 00249 return true; 00250 break; 00251 case 2: 00252 // FABSD, FABSS, FDTOI, FDTOS, FITOD, FITOS, FMOVD, FMOVS, FNEGD, FNEGS, ... 00253 printOperand(MI, 0); 00254 O << "\n"; 00255 return true; 00256 break; 00257 case 3: 00258 // FCMPD, FCMPS, WRYri, WRYrr 00259 O << ", "; 00260 printOperand(MI, 1); 00261 break; 00262 case 4: 00263 // FMOVD_FCC, FMOVS_FCC, MOVFCCri, MOVFCCrr 00264 O << " %fcc0, "; 00265 printOperand(MI, 1); 00266 O << ", "; 00267 printOperand(MI, 0); 00268 O << "\n"; 00269 return true; 00270 break; 00271 case 5: 00272 // FMOVD_ICC, FMOVS_ICC, MOVICCri, MOVICCrr 00273 O << " %icc, "; 00274 printOperand(MI, 1); 00275 O << ", "; 00276 printOperand(MI, 0); 00277 O << "\n"; 00278 return true; 00279 break; 00280 } 00281 00282 00283 // Fragment 2 encoded into 1 bits for 2 unique commands. 00284 if ((Bits >> 24) & 1) { 00285 // WRYri, WRYrr 00286 O << ", %y\n"; 00287 return true; 00288 } else { 00289 // FCMPD, FCMPS 00290 O << "\n\tnop\n"; 00291 return true; 00292 } 00293 00294 }