sparc/disassembler.cpp

Go to the documentation of this file.
00001 #define sign_extend(N,SIZE) (((int)((N) << (sizeof(unsigned)*8-(SIZE)))) >> (sizeof(unsigned)*8-(SIZE)))
00002 #include <assert.h>
00003 
00004 #line 2 "machine/sparc/disassembler.m"
00005 /*==============================================================================
00006  * FILE:       disassembler.m
00007  * OVERVIEW:   Skeleton file for a disassembler of SPARC instructions. 
00008  *============================================================================*/
00009 
00010 /*
00011  * $Revision: 1.1 $
00012  *
00013  *    Apr 01 - Cristina: Created
00014  * 18 May 01 - Mike: Slight mods to accomodate other disassemblers; moved
00015  *              default NJMCDecoder constructor to disasm.cc
00016  */
00017 
00018 #include "global.h"
00019 #include "decoder.h"
00020 #include "sparc-names.h"
00021 #include "BinaryFile.h"         // For SymbolByAddress()
00022 
00023 // Globals in driver disasm.cc file
00024 extern  char _assembly[81];
00025 
00026 
00027 // Need to provide the fetch routines for this machine (32-bits only
00028 // on SPARC)
00029 
00030 /*
00031  * FUNCTION:        getDword
00032  * OVERVIEW:        Returns the double starting at the given address.
00033  * PARAMETERS:      lc - address at which to decode the double
00034  * RETURNS:         the decoded double
00035  */
00036 
00037 DWord getDword(ADDRESS lc)
00038 {
00039   Byte* p = (Byte*)lc;
00040   return (p[0] << 24) + (p[1] << 16) + (p[2] << 8) + p[3];
00041 }
00042 
00043 
00044 
00045 /* 
00046  * FUNCTION:        dis_RegImm
00047  * OVERVIEW:        decodes a register or an immediate value
00048  * PARAMETERS:      address pointer to be decoded
00049  * RETURNS:         string with information about register or immediate 
00050  */
00051 
00052 char *NJMCDecoder::dis_RegImm (ADDRESS pc)
00053 {
00054     static char _buffer[11]; 
00055 
00056 
00057 
00058 #line 54 "machine/sparc/disassembler.m"
00059 { 
00060   dword MATCH_p = 
00061     
00062     #line 54 "machine/sparc/disassembler.m"
00063     pc
00064     ;
00065   unsigned MATCH_w_32_0;
00066   { 
00067     MATCH_w_32_0 = getDword(MATCH_p); 
00068     if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
00069       int /* [~4096..4095] */ i = 
00070         sign_extend((MATCH_w_32_0 & 0x1fff) /* simm13 at 0 */, 13);
00071       
00072       #line 55 "machine/sparc/disassembler.m"
00073         sprintf (_buffer, "%d", i); 
00074 
00075       
00076       
00077       
00078     } /*opt-block*//*opt-block+*/
00079     else { 
00080       unsigned rs2 = (MATCH_w_32_0 & 0x1f) /* rs2 at 0 */;
00081       
00082       #line 56 "machine/sparc/disassembler.m"
00083        sprintf (_buffer, "%s", DIS_RS2); 
00084 
00085       
00086       
00087       
00088     } /*opt-block*//*opt-block+*/
00089     
00090   }goto MATCH_finished_c; 
00091   
00092   MATCH_finished_c: (void)0; /*placeholder for label*/
00093   
00094 }
00095 
00096 #line 59 "machine/sparc/disassembler.m"
00097     return _buffer;
00098 }
00099 
00100 
00101 /* 
00102  * FUNCTION:        dis_Eaddr
00103  * OVERVIEW:        decodes an effective address
00104  * PARAMETERS:      address pointer to be decoded
00105  * RETURNS:         string with effective address in assembly format
00106  */
00107 
00108 char* NJMCDecoder::dis_Eaddr (ADDRESS pc)
00109 {
00110     static char _buffer[21]; 
00111 
00112 
00113 
00114 #line 73 "machine/sparc/disassembler.m"
00115 { 
00116   dword MATCH_p = 
00117     
00118     #line 73 "machine/sparc/disassembler.m"
00119     pc
00120     ;
00121   unsigned MATCH_w_32_0;
00122   { 
00123     MATCH_w_32_0 = getDword(MATCH_p); 
00124     if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) 
00125       if ((MATCH_w_32_0 >> 14 & 0x1f) /* rs1 at 0 */ == 0) { 
00126         int /* [~4096..4095] */ i = 
00127           sign_extend((MATCH_w_32_0 & 0x1fff) /* simm13 at 0 */, 13);
00128         
00129         #line 78 "machine/sparc/disassembler.m"
00130             sprintf (_buffer, "[0x%x]", i); 
00131 
00132                                 strcat(constrName, "absoluteA ");
00133 
00134         
00135         
00136         
00137       } /*opt-block*//*opt-block+*/
00138       else { 
00139         int /* [~4096..4095] */ i = 
00140           sign_extend((MATCH_w_32_0 & 0x1fff) /* simm13 at 0 */, 13);
00141         unsigned rs1 = (MATCH_w_32_0 >> 14 & 0x1f) /* rs1 at 0 */;
00142         
00143         #line 80 "machine/sparc/disassembler.m"
00144             sprintf (_buffer, "[%s+%d]", DIS_RS1, i); 
00145 
00146                                 strcat(constrName, "dispA ");
00147 
00148         
00149         
00150         
00151       } /*opt-block*//*opt-block+*/ /*opt-block+*/
00152     else 
00153       if ((MATCH_w_32_0 & 0x1f) /* rs2 at 0 */ == 0) { 
00154         unsigned rs1 = (MATCH_w_32_0 >> 14 & 0x1f) /* rs1 at 0 */;
00155         
00156         #line 74 "machine/sparc/disassembler.m"
00157             sprintf (_buffer, "[%s]", DIS_RS1);
00158 
00159                                 strcat(constrName, "indirectA ");
00160 
00161         
00162         
00163         
00164       } /*opt-block*//*opt-block+*/
00165       else { 
00166         unsigned rs1 = (MATCH_w_32_0 >> 14 & 0x1f) /* rs1 at 0 */;
00167         unsigned rs2 = (MATCH_w_32_0 & 0x1f) /* rs2 at 0 */;
00168         
00169         #line 76 "machine/sparc/disassembler.m"
00170             sprintf (_buffer, "%s[%s]", DIS_RS1, DIS_RS2); 
00171 
00172                                 strcat(constrName, "indexA ");
00173 
00174         
00175         
00176         
00177       } /*opt-block*//*opt-block+*/ /*opt-block+*/
00178     
00179   }goto MATCH_finished_b; 
00180   
00181   MATCH_finished_b: (void)0; /*placeholder for label*/
00182   
00183 }
00184 
00185 #line 84 "machine/sparc/disassembler.m"
00186     return _buffer;
00187 }
00188 
00189 /*==============================================================================
00190  * FUNCTION:       NJMCDecoder::decodeAssemblyInstruction
00191  * OVERVIEW:       Decodes a machine instruction and displays its assembly
00192  *                 representation onto the external array _assembly[].
00193  * PARAMETERS:     pc - the native address of the pc
00194  *                 delta - the difference between the native address and 
00195  *                  the host address of the pc
00196  * RETURNS:        number of bytes taken up by the decoded instruction 
00197  *                  (i.e. number of bytes processed)
00198  *============================================================================*/
00199 
00200 int NJMCDecoder::decodeAssemblyInstruction (ADDRESS pc, int delta)
00201 {
00202     ADDRESS hostPC = pc + delta; 
00203     ADDRESS nextPC;
00204 
00205     sprintf(_assembly, "%X: %08X  ", pc, getDword(hostPC) );
00206     char* str = _assembly + strlen(_assembly);
00207 
00208 
00209 
00210 #line 105 "machine/sparc/disassembler.m"
00211 { 
00212   dword MATCH_p = 
00213     
00214     #line 105 "machine/sparc/disassembler.m"
00215     hostPC
00216     ;
00217   char *MATCH_name;
00218   static char *MATCH_name_cond_1[] = {
00219     "BN", "BE", "BLE", "BL", "BLEU", "BCS", "BNEG", "BVS", "BA", "BNE", "BG", 
00220     "BGE", "BGU", "BCC", "BPOS", "BVC", 
00221   };
00222   static char *MATCH_name_cond_2[] = {
00223     "BN,a", "BE,a", "BLE,a", "BL,a", "BLEU,a", "BCS,a", "BNEG,a", "BVS,a", 
00224     "BA,a", "BNE,a", "BG,a", "BGE,a", "BGU,a", "BCC,a", "BPOS,a", "BVC,a", 
00225   };
00226   static char *MATCH_name_cond_3[] = {
00227     "FBN", "FBNE", "FBLG", "FBUL", "FBL", "FBUG", "FBG", "FBU", "FBA", "FBE", 
00228     "FBUE", "FBGE", "FBUGE", "FBLE", "FBULE", "FBO", 
00229   };
00230   static char *MATCH_name_cond_4[] = {
00231     "FBN,a", "FBNE,a", "FBLG,a", "FBUL,a", "FBL,a", "FBUG,a", "FBG,a", 
00232     "FBU,a", "FBA,a", "FBE,a", "FBUE,a", "FBGE,a", "FBUGE,a", "FBLE,a", 
00233     "FBULE,a", "FBO,a", 
00234   };
00235   static char *MATCH_name_cond_5[] = {
00236     "CBN", "CB123", "CB12", "CB13", "CB1", "CB23", "CB2", "CB3", "CBA", 
00237     "CB0", "CB03", "CB02", "CB023", "CB01", "CB013", "CB012", 
00238   };
00239   static char *MATCH_name_cond_6[] = {
00240     "CBN,a", "CB123,a", "CB12,a", "CB13,a", "CB1,a", "CB23,a", "CB2,a", 
00241     "CB3,a", "CBA,a", "CB0,a", "CB03,a", "CB02,a", "CB023,a", "CB01,a", 
00242     "CB013,a", "CB012,a", 
00243   };
00244   static char *MATCH_name_rs1_43[] = {
00245     "RDY", "JMPL", "JMPL", "JMPL", "JMPL", "JMPL", "JMPL", "JMPL", "JMPL", 
00246     "JMPL", "JMPL", "JMPL", "JMPL", "JMPL", "JMPL", (char *)0, "JMPL", 
00247     "JMPL", "JMPL", "JMPL", "JMPL", "JMPL", "JMPL", "JMPL", "JMPL", "JMPL", 
00248     "JMPL", "JMPL", "JMPL", "JMPL", "JMPL", 
00249   };
00250   static char *MATCH_name_op3_44[] = {
00251     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00252     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00253     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00254     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00255     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00256     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00257     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "RDPSR", "RDWIM", 
00258     "RDTBR", 
00259   };
00260   static char *MATCH_name_opf_49[] = {
00261     (char *)0, "FMOVs", (char *)0, (char *)0, (char *)0, "FNEGs", (char *)0, 
00262     (char *)0, (char *)0, "FABSs", (char *)0, (char *)0, (char *)0, 
00263     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00264     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00265     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00266     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00267     (char *)0, (char *)0, (char *)0, (char *)0, "FSQRTs", (char *)0, 
00268     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00269     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00270     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00271     (char *)0, (char *)0, (char *)0, (char *)0, "FADDs", "FADDd", "FADDq", 
00272     (char *)0, "FSUBs", "FSUBd", "FSUBq", (char *)0, "FMULs", "FMULd", 
00273     "FMULq", (char *)0, "FDIVs", "FDIVd", "FDIVq", (char *)0, "FCMPs", 
00274     "FCMPd", "FCMPq", (char *)0, "FCMPEs", "FCMPEd", "FCMPEq", (char *)0, 
00275     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00276     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00277     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00278     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00279     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00280     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00281     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00282     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00283     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00284     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00285     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00286     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00287     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00288     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00289     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00290     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00291     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00292     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "FiTOs", 
00293     (char *)0, "FdTOs", "FqTOs", "FiTOd", "FsTOd", (char *)0, "FqTOd", 
00294     "FiTOq", "FsTOq", "FdTOq", (char *)0, (char *)0, "FsTOi", "FdTOi", 
00295     "FqTOi", 
00296   };
00297   static char *MATCH_name_i_50[] = {"JMPL", "RETT", };
00298   static char *MATCH_name_rs1_51[] = {
00299     "JMPL", "SAVE", "SAVE", "SAVE", "SAVE", "SAVE", "SAVE", "SAVE", "SAVE", 
00300     "SAVE", "SAVE", "SAVE", "SAVE", "SAVE", "SAVE", "SAVE", "SAVE", "SAVE", 
00301     "SAVE", "SAVE", "SAVE", "SAVE", "SAVE", "SAVE", "SAVE", "SAVE", "SAVE", 
00302     "SAVE", "SAVE", "SAVE", "SAVE", "SAVE", 
00303   };
00304   static char *MATCH_name_i_54[] = {"RETT", "SAVE", };
00305   static char *MATCH_name_cond_55[] = {
00306     "TN", "TE", "TLE", "TL", "TLEU", "TCS", "TNEG", "TVS", "TA", "TNE", "TG", 
00307     "TGE", "TGU", "TCC", "TPOS", "TVC", 
00308   };
00309   static char *MATCH_name_i_61[] = {"LD", "RESTORE", };
00310   static char *MATCH_name_i_62[] = {"LDUB", "LD", };
00311   static char *MATCH_name_i_63[] = {"LDUH", "LDUB", };
00312   static char *MATCH_name_i_64[] = {"LDD", "LDUH", };
00313   static char *MATCH_name_i_65[] = {"ST", "LDD", };
00314   static char *MATCH_name_i_66[] = {"STB", "ST", };
00315   static char *MATCH_name_i_67[] = {"STH", "STB", };
00316   static char *MATCH_name_i_68[] = {"STD", "STH", };
00317   static char *MATCH_name_i_69[] = {"LDSB", "STD", };
00318   static char *MATCH_name_i_70[] = {"LDSH", "LDSB", };
00319   static char *MATCH_name_i_71[] = {"LDSTUB", "LDSH", };
00320   static char *MATCH_name_i_72[] = {"SWAP.", "LDSTUB", };
00321   static char *MATCH_name_i_73[] = {"LDA", "SWAP.", };
00322   static char *MATCH_name_i_74[] = {"LDUBA", "LDF", };
00323   static char *MATCH_name_i_75[] = {"LDUHA", "LDFSR", };
00324   static char *MATCH_name_i_76[] = {"LDDA", "LDDF", };
00325   static char *MATCH_name_i_77[] = {"STA", "STF", };
00326   static char *MATCH_name_i_78[] = {"STBA", "STFSR", };
00327   static char *MATCH_name_i_79[] = {"STHA", "STDFQ", };
00328   static char *MATCH_name_i_80[] = {"STDA", "STDF", };
00329   static char *MATCH_name_i_81[] = {"LDSBA", "LDC", };
00330   static char *MATCH_name_i_82[] = {"LDSHA", "LDCSR", };
00331   static char *MATCH_name_i_83[] = {"LDSTUBA", "LDDC", };
00332   static char *MATCH_name_i_84[] = {"SWAPA", "STC", };
00333   static char *MATCH_name_i_85[] = {"LDF", "STCSR", };
00334   static char *MATCH_name_i_86[] = {"LDFSR", "STDCQ", };
00335   static char *MATCH_name_i_87[] = {"LDDF", "STDC", };
00336   unsigned MATCH_w_32_0;
00337   { 
00338     MATCH_w_32_0 = getDword(MATCH_p); 
00339     
00340       switch((MATCH_w_32_0 >> 30 & 0x3) /* op at 0 */) {
00341         case 0: 
00342           
00343             switch((MATCH_w_32_0 >> 22 & 0x7) /* op2 at 0 */) {
00344               case 0: 
00345                 MATCH_name = "UNIMP"; 
00346                 { 
00347                   char *name = MATCH_name;
00348                   unsigned n = (MATCH_w_32_0 & 0x3fffff) /* imm22 at 0 */;
00349                   nextPC = 4 + MATCH_p; 
00350                   
00351                   #line 276 "machine/sparc/disassembler.m"
00352                    
00353 
00354                         sprintf (str, "%s %d", name, n);
00355 
00356                   
00357 
00358                   
00359                   
00360                   
00361                 }
00362                 
00363                 break;
00364               case 1: case 3: case 5: 
00365                 goto MATCH_label_a0; break;
00366               case 2: 
00367                 if ((MATCH_w_32_0 >> 29 & 0x1) /* a at 0 */ == 1 && 
00368                   (0 <= (MATCH_w_32_0 >> 25 & 0xf) /* cond at 0 */ && 
00369                   (MATCH_w_32_0 >> 25 & 0xf) /* cond at 0 */ < 16)) { 
00370                   MATCH_name = MATCH_name_cond_2[(MATCH_w_32_0 >> 25 & 0xf) 
00371                         /* cond at 0 */]; 
00372                   goto MATCH_label_a2; 
00373                   
00374                 } /*opt-block*/
00375                 else { 
00376                   MATCH_name = MATCH_name_cond_1[(MATCH_w_32_0 >> 25 & 0xf) 
00377                         /* cond at 0 */]; 
00378                   goto MATCH_label_a1; 
00379                   
00380                 } /*opt-block*/
00381                 
00382                 break;
00383               case 4: 
00384                 if ((MATCH_w_32_0 & 0x3fffff) /* imm22 at 0 */ == 0 && 
00385                   (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */ == 0) { 
00386                   nextPC = 4 + MATCH_p; 
00387                   
00388                   #line 108 "machine/sparc/disassembler.m"
00389                   
00390 
00391                         sprintf (str, "NOP");
00392 
00393                   
00394 
00395                   
00396                   
00397                   
00398                 } /*opt-block*//*opt-block+*/
00399                 else 
00400                   goto MATCH_label_a3;  /*opt-block+*/
00401                 
00402                 break;
00403               case 6: 
00404                 if ((MATCH_w_32_0 >> 29 & 0x1) /* a at 0 */ == 1 && 
00405                   (0 <= (MATCH_w_32_0 >> 25 & 0xf) /* cond at 0 */ && 
00406                   (MATCH_w_32_0 >> 25 & 0xf) /* cond at 0 */ < 16)) { 
00407                   MATCH_name = MATCH_name_cond_4[(MATCH_w_32_0 >> 25 & 0xf) 
00408                         /* cond at 0 */]; 
00409                   goto MATCH_label_a2; 
00410                   
00411                 } /*opt-block*/
00412                 else { 
00413                   MATCH_name = MATCH_name_cond_3[(MATCH_w_32_0 >> 25 & 0xf) 
00414                         /* cond at 0 */]; 
00415                   goto MATCH_label_a1; 
00416                   
00417                 } /*opt-block*/
00418                 
00419                 break;
00420               case 7: 
00421                 if ((MATCH_w_32_0 >> 29 & 0x1) /* a at 0 */ == 1 && 
00422                   (0 <= (MATCH_w_32_0 >> 25 & 0xf) /* cond at 0 */ && 
00423                   (MATCH_w_32_0 >> 25 & 0xf) /* cond at 0 */ < 16)) { 
00424                   MATCH_name = MATCH_name_cond_6[(MATCH_w_32_0 >> 25 & 0xf) 
00425                         /* cond at 0 */]; 
00426                   goto MATCH_label_a2; 
00427                   
00428                 } /*opt-block*/
00429                 else { 
00430                   MATCH_name = MATCH_name_cond_5[(MATCH_w_32_0 >> 25 & 0xf) 
00431                         /* cond at 0 */]; 
00432                   goto MATCH_label_a1; 
00433                   
00434                 } /*opt-block*/
00435                 
00436                 break;
00437               default: assert(0);
00438             } /* (MATCH_w_32_0 >> 22 & 0x7) -- op2 at 0 --*/ 
00439           break;
00440         case 1: 
00441           { 
00442             unsigned tgt = 
00443               4 * sign_extend((MATCH_w_32_0 & 0x3fffffff) /* disp30 at 0 */, 
00444                           30) + addressToPC(MATCH_p);
00445             nextPC = 4 + MATCH_p; 
00446             
00447             #line 207 "machine/sparc/disassembler.m"
00448              {
00449 
00450                     // Get the actual destination
00451 
00452                     ADDRESS dest = tgt - delta;
00453 
00454                     // Get a symbol for it, if possible
00455 
00456                     const char* dsym = pBF->SymbolByAddress(dest);
00457 
00458                     char hexsym[128];
00459 
00460                     if (dsym == 0)
00461 
00462                         sprintf(hexsym, "0x%x", dest);
00463 
00464                     sprintf (str, "%s %s", "call", (dsym ? dsym : hexsym));
00465 
00466                 }
00467 
00468             
00469 
00470             
00471             
00472             
00473           }
00474           
00475           break;
00476         case 2: 
00477           
00478             switch((MATCH_w_32_0 >> 19 & 0x3f) /* op3 at 0 */) {
00479               case 0: 
00480                 MATCH_name = "ADD"; goto MATCH_label_a4; break;
00481               case 1: 
00482                 MATCH_name = "AND"; goto MATCH_label_a4; break;
00483               case 2: 
00484                 MATCH_name = "OR"; goto MATCH_label_a4; break;
00485               case 3: 
00486                 MATCH_name = "XOR"; goto MATCH_label_a4; break;
00487               case 4: 
00488                 MATCH_name = "SUB"; goto MATCH_label_a4; break;
00489               case 5: 
00490                 MATCH_name = "ANDN"; goto MATCH_label_a4; break;
00491               case 6: 
00492                 MATCH_name = "ORN"; goto MATCH_label_a4; break;
00493               case 7: 
00494                 MATCH_name = "XNOR"; goto MATCH_label_a4; break;
00495               case 8: 
00496                 MATCH_name = "ADDX"; goto MATCH_label_a4; break;
00497               case 9: case 13: case 25: case 29: case 44: case 45: case 46: 
00498               case 47: case 54: case 55: case 59: case 62: case 63: 
00499                 goto MATCH_label_a0; break;
00500               case 10: 
00501                 MATCH_name = "UMUL"; goto MATCH_label_a4; break;
00502               case 11: 
00503                 MATCH_name = "SMUL"; goto MATCH_label_a4; break;
00504               case 12: 
00505                 MATCH_name = "SUBX"; goto MATCH_label_a4; break;
00506               case 14: 
00507                 MATCH_name = "UDIV"; goto MATCH_label_a4; break;
00508               case 15: 
00509                 MATCH_name = "SDIV"; goto MATCH_label_a4; break;
00510               case 16: 
00511                 MATCH_name = "ADDcc"; goto MATCH_label_a4; break;
00512               case 17: 
00513                 MATCH_name = "ANDcc"; goto MATCH_label_a4; break;
00514               case 18: 
00515                 MATCH_name = "ORcc"; goto MATCH_label_a4; break;
00516               case 19: 
00517                 MATCH_name = "XORcc"; goto MATCH_label_a4; break;
00518               case 20: 
00519                 MATCH_name = "SUBcc"; goto MATCH_label_a4; break;
00520               case 21: 
00521                 MATCH_name = "ANDNcc"; goto MATCH_label_a4; break;
00522               case 22: 
00523                 MATCH_name = "ORNcc"; goto MATCH_label_a4; break;
00524               case 23: 
00525                 MATCH_name = "XNORcc"; goto MATCH_label_a4; break;
00526               case 24: 
00527                 MATCH_name = "ADDXcc"; goto MATCH_label_a4; break;
00528               case 26: 
00529                 MATCH_name = "UMULcc"; goto MATCH_label_a4; break;
00530               case 27: 
00531                 MATCH_name = "SMULcc"; goto MATCH_label_a4; break;
00532               case 28: 
00533                 MATCH_name = "SUBXcc"; goto MATCH_label_a4; break;
00534               case 30: 
00535                 MATCH_name = "UDIVcc"; goto MATCH_label_a4; break;
00536               case 31: 
00537                 MATCH_name = "SDIVcc"; goto MATCH_label_a4; break;
00538               case 32: 
00539                 MATCH_name = "TADDcc"; goto MATCH_label_a4; break;
00540               case 33: 
00541                 MATCH_name = "TSUBcc"; goto MATCH_label_a4; break;
00542               case 34: 
00543                 MATCH_name = "TADDccTV"; goto MATCH_label_a4; break;
00544               case 35: 
00545                 MATCH_name = "TSUBccTV"; goto MATCH_label_a4; break;
00546               case 36: 
00547                 MATCH_name = "MULScc"; goto MATCH_label_a4; break;
00548               case 37: 
00549                 MATCH_name = "SLL"; goto MATCH_label_a4; break;
00550               case 38: 
00551                 MATCH_name = "SRL"; goto MATCH_label_a4; break;
00552               case 39: 
00553                 MATCH_name = "SRA"; goto MATCH_label_a4; break;
00554               case 40: 
00555                 if ((MATCH_w_32_0 >> 14 & 0x1f) /* rs1 at 0 */ == 0) { 
00556                   MATCH_name = MATCH_name_rs1_43[(MATCH_w_32_0 >> 14 & 0x1f) 
00557                         /* rs1 at 0 */]; 
00558                   { 
00559                     char *name = MATCH_name;
00560                     unsigned rd = (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */;
00561                     nextPC = 4 + MATCH_p; 
00562                     
00563                     #line 174 "machine/sparc/disassembler.m"
00564                      
00565 
00566                             sprintf (str, "%s %s", name, DIS_RD);
00567 
00568                     
00569 
00570                     
00571                     
00572                     
00573                   }
00574                   
00575                 } /*opt-block*/
00576                 else 
00577                   goto MATCH_label_a0;  /*opt-block+*/
00578                 
00579                 break;
00580               case 41: 
00581                 MATCH_name = MATCH_name_op3_44[(MATCH_w_32_0 >> 19 & 0x3f) 
00582                       /* op3 at 0 */]; 
00583                 { 
00584                   char *name = MATCH_name;
00585                   unsigned rd = (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */;
00586                   nextPC = 4 + MATCH_p; 
00587                   
00588                   #line 177 "machine/sparc/disassembler.m"
00589                    
00590 
00591                         sprintf (str, "%s %s", name, DIS_RD);
00592 
00593                   
00594 
00595                   
00596                   
00597                   
00598                 }
00599                 
00600                 break;
00601               case 42: 
00602                 MATCH_name = MATCH_name_op3_44[(MATCH_w_32_0 >> 19 & 0x3f) 
00603                       /* op3 at 0 */]; 
00604                 { 
00605                   char *name = MATCH_name;
00606                   unsigned rd = (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */;
00607                   nextPC = 4 + MATCH_p; 
00608                   
00609                   #line 180 "machine/sparc/disassembler.m"
00610                    
00611 
00612                         sprintf (str, "%s %s", name, DIS_RD);
00613 
00614                   
00615 
00616                   
00617                   
00618                   
00619                 }
00620                 
00621                 break;
00622               case 43: 
00623                 MATCH_name = MATCH_name_op3_44[(MATCH_w_32_0 >> 19 & 0x3f) 
00624                       /* op3 at 0 */]; 
00625                 { 
00626                   char *name = MATCH_name;
00627                   unsigned rd = (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */;
00628                   nextPC = 4 + MATCH_p; 
00629                   
00630                   #line 183 "machine/sparc/disassembler.m"
00631                    
00632 
00633                         sprintf (str, "%s %s", name, DIS_RD);
00634 
00635                   
00636 
00637                   
00638                   
00639                   
00640                 }
00641                 
00642                 break;
00643               case 48: 
00644                 if (1 <= (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */ && 
00645                   (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */ < 32) 
00646                   goto MATCH_label_a0;  /*opt-block+*/
00647                 else { 
00648                   MATCH_name = "WRY"; 
00649                   { 
00650                     char *name = MATCH_name;
00651                     unsigned roi = addressToPC(MATCH_p);
00652                     unsigned rs1 = (MATCH_w_32_0 >> 14 & 0x1f) /* rs1 at 0 */;
00653                     nextPC = 4 + MATCH_p; 
00654                     
00655                     #line 186 "machine/sparc/disassembler.m"
00656                      
00657 
00658                             sprintf (str, "%s %s,%s", name, DIS_RS1, DIS_ROI);
00659 
00660                     
00661 
00662                     
00663                     
00664                     
00665                   }
00666                   
00667                 } /*opt-block*/
00668                 
00669                 break;
00670               case 49: 
00671                 MATCH_name = "WRPSR"; 
00672                 { 
00673                   char *name = MATCH_name;
00674                   unsigned roi = addressToPC(MATCH_p);
00675                   unsigned rs1 = (MATCH_w_32_0 >> 14 & 0x1f) /* rs1 at 0 */;
00676                   nextPC = 4 + MATCH_p; 
00677                   
00678                   #line 189 "machine/sparc/disassembler.m"
00679                    
00680 
00681                         sprintf (str, "%s %s,%s", name, DIS_RS1, DIS_ROI);
00682 
00683                   
00684 
00685                   
00686                   
00687                   
00688                 }
00689                 
00690                 break;
00691               case 50: 
00692                 MATCH_name = "WRWIM"; 
00693                 { 
00694                   char *name = MATCH_name;
00695                   unsigned roi = addressToPC(MATCH_p);
00696                   unsigned rs1 = (MATCH_w_32_0 >> 14 & 0x1f) /* rs1 at 0 */;
00697                   nextPC = 4 + MATCH_p; 
00698                   
00699                   #line 192 "machine/sparc/disassembler.m"
00700                    
00701 
00702                         sprintf (str, "%s %s,%s", name, DIS_RS1, DIS_ROI);
00703 
00704                   
00705 
00706                   
00707                   
00708                   
00709                 }
00710                 
00711                 break;
00712               case 51: 
00713                 MATCH_name = "WRTBR"; 
00714                 { 
00715                   char *name = MATCH_name;
00716                   unsigned roi = addressToPC(MATCH_p);
00717                   unsigned rs1 = (MATCH_w_32_0 >> 14 & 0x1f) /* rs1 at 0 */;
00718                   nextPC = 4 + MATCH_p; 
00719                   
00720                   #line 195 "machine/sparc/disassembler.m"
00721                    
00722 
00723                         sprintf (str, "%s %s,%s", name, DIS_RS1, DIS_ROI);
00724 
00725                   
00726 
00727                   
00728                   
00729                   
00730                 }
00731                 
00732                 break;
00733               case 52: 
00734                 if (80 <= (MATCH_w_32_0 >> 5 & 0x1ff) /* opf at 0 */ && 
00735                   (MATCH_w_32_0 >> 5 & 0x1ff) /* opf at 0 */ < 196 || 
00736                   212 <= (MATCH_w_32_0 >> 5 & 0x1ff) /* opf at 0 */ && 
00737                   (MATCH_w_32_0 >> 5 & 0x1ff) /* opf at 0 */ < 512) 
00738                   goto MATCH_label_a0;  /*opt-block+*/
00739                 else 
00740                   switch((MATCH_w_32_0 >> 5 & 0x1ff) /* opf at 0 */) {
00741                     case 0: case 2: case 3: case 4: case 6: case 7: case 8: 
00742                     case 10: case 11: case 12: case 13: case 14: case 15: 
00743                     case 16: case 17: case 18: case 19: case 20: case 21: 
00744                     case 22: case 23: case 24: case 25: case 26: case 27: 
00745                     case 28: case 29: case 30: case 31: case 32: case 33: 
00746                     case 34: case 35: case 36: case 37: case 38: case 39: 
00747                     case 40: case 42: case 43: case 44: case 45: case 46: 
00748                     case 47: case 48: case 49: case 50: case 51: case 52: 
00749                     case 53: case 54: case 55: case 56: case 57: case 58: 
00750                     case 59: case 60: case 61: case 62: case 63: case 64: 
00751                     case 68: case 72: case 76: case 197: case 202: case 207: 
00752                     case 208: 
00753                       goto MATCH_label_a0; break;
00754                     case 1: case 5: case 9: case 41: 
00755                       MATCH_name = 
00756                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
00757                             /* opf at 0 */]; 
00758                       { 
00759                         char *name = MATCH_name;
00760                         unsigned fds = 
00761                           (MATCH_w_32_0 >> 25 & 0x1f) /* fds at 0 */;
00762                         unsigned fs2s = (MATCH_w_32_0 & 0x1f) /* fs2s at 0 */;
00763                         nextPC = 4 + MATCH_p; 
00764                         
00765                         #line 218 "machine/sparc/disassembler.m"
00766                          
00767 
00768                                 sprintf (str, "%s %s,%s", name, DIS_FS2S, DIS_FDS);
00769 
00770                         
00771 
00772                         
00773                         
00774                         
00775                       }
00776                       
00777                       break;
00778                     case 65: case 69: case 73: case 77: 
00779                       MATCH_name = 
00780                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
00781                             /* opf at 0 */]; 
00782                       { 
00783                         char *name = MATCH_name;
00784                         unsigned fds = 
00785                           (MATCH_w_32_0 >> 25 & 0x1f) /* fds at 0 */;
00786                         unsigned fs1s = 
00787                           (MATCH_w_32_0 >> 14 & 0x1f) /* fs1s at 0 */;
00788                         unsigned fs2s = (MATCH_w_32_0 & 0x1f) /* fs2s at 0 */;
00789                         nextPC = 4 + MATCH_p; 
00790                         
00791                         #line 221 "machine/sparc/disassembler.m"
00792                          
00793 
00794                                 sprintf (str, "%s %s,%s,%s", name, DIS_FS1S, DIS_FS2S, DIS_FDS);
00795 
00796                          
00797 
00798                         
00799                         
00800                         
00801                       }
00802                       
00803                       break;
00804                     case 66: case 70: case 74: case 78: 
00805                       MATCH_name = 
00806                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
00807                             /* opf at 0 */]; 
00808                       { 
00809                         char *name = MATCH_name;
00810                         unsigned fdd = 
00811                           (MATCH_w_32_0 >> 25 & 0x1f) /* fdd at 0 */;
00812                         unsigned fs1d = 
00813                           (MATCH_w_32_0 >> 14 & 0x1f) /* fs1d at 0 */;
00814                         unsigned fs2d = (MATCH_w_32_0 & 0x1f) /* fs2d at 0 */;
00815                         nextPC = 4 + MATCH_p; 
00816                         
00817                         #line 224 "machine/sparc/disassembler.m"
00818                          
00819 
00820                                 sprintf (str, "%s %s,%s,%s", name, DIS_FS1D, DIS_FS2D, DIS_FDD);
00821 
00822                          
00823 
00824                         
00825                         
00826                         
00827                       }
00828                       
00829                       break;
00830                     case 67: case 71: case 75: case 79: 
00831                       MATCH_name = 
00832                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
00833                             /* opf at 0 */]; 
00834                       { 
00835                         char *name = MATCH_name;
00836                         unsigned fdq = 
00837                           (MATCH_w_32_0 >> 25 & 0x1f) /* fdq at 0 */;
00838                         unsigned fs1q = 
00839                           (MATCH_w_32_0 >> 14 & 0x1f) /* fs1q at 0 */;
00840                         unsigned fs2q = (MATCH_w_32_0 & 0x1f) /* fs2q at 0 */;
00841                         nextPC = 4 + MATCH_p; 
00842                         
00843                         #line 227 "machine/sparc/disassembler.m"
00844                          
00845 
00846                                 sprintf (str, "%s %s,%s,%s", name, DIS_FS1Q, DIS_FS2Q, DIS_FDQ);
00847 
00848                          
00849 
00850                         
00851                         
00852                         
00853                       }
00854                       
00855                       break;
00856                     case 196: case 209: 
00857                       MATCH_name = 
00858                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
00859                             /* opf at 0 */]; 
00860                       { 
00861                         char *name = MATCH_name;
00862                         unsigned fds = 
00863                           (MATCH_w_32_0 >> 25 & 0x1f) /* fds at 0 */;
00864                         unsigned fs2s = (MATCH_w_32_0 & 0x1f) /* fs2s at 0 */;
00865                         nextPC = 4 + MATCH_p; 
00866                         
00867                         #line 239 "machine/sparc/disassembler.m"
00868                         
00869 
00870                                 sprintf (str, "%s %s,%s", name, DIS_FS2S, DIS_FDS);
00871 
00872                         
00873 
00874                         
00875                         
00876                         
00877                       }
00878                       
00879                       break;
00880                     case 198: 
00881                       MATCH_name = 
00882                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
00883                             /* opf at 0 */]; 
00884                       { 
00885                         char *name = MATCH_name;
00886                         unsigned fds = 
00887                           (MATCH_w_32_0 >> 25 & 0x1f) /* fds at 0 */;
00888                         unsigned fs2d = (MATCH_w_32_0 & 0x1f) /* fs2d at 0 */;
00889                         nextPC = 4 + MATCH_p; 
00890                         
00891                         #line 254 "machine/sparc/disassembler.m"
00892                         
00893 
00894                                 sprintf (str, "%s %s,%s", name, DIS_FS2D, DIS_FDS);
00895 
00896                         
00897 
00898                         
00899                         
00900                         
00901                       }
00902                       
00903                       break;
00904                     case 199: 
00905                       MATCH_name = 
00906                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
00907                             /* opf at 0 */]; 
00908                       { 
00909                         char *name = MATCH_name;
00910                         unsigned fds = 
00911                           (MATCH_w_32_0 >> 25 & 0x1f) /* fds at 0 */;
00912                         unsigned fs2q = (MATCH_w_32_0 & 0x1f) /* fs2q at 0 */;
00913                         nextPC = 4 + MATCH_p; 
00914                         
00915                         #line 259 "machine/sparc/disassembler.m"
00916                         
00917 
00918                                 sprintf (str, "%s %s,%s", name, DIS_FS2Q, DIS_FDS);
00919 
00920                         
00921 
00922                         
00923                         
00924                         
00925                       }
00926                       
00927                       break;
00928                     case 200: 
00929                       MATCH_name = 
00930                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
00931                             /* opf at 0 */]; 
00932                       { 
00933                         char *name = MATCH_name;
00934                         unsigned fdd = 
00935                           (MATCH_w_32_0 >> 25 & 0x1f) /* fdd at 0 */;
00936                         unsigned fs2s = (MATCH_w_32_0 & 0x1f) /* fs2s at 0 */;
00937                         nextPC = 4 + MATCH_p; 
00938                         
00939                         #line 241 "machine/sparc/disassembler.m"
00940                         
00941 
00942                                 sprintf (str, "%s %s,%s", name, DIS_FS2S, DIS_FDD);
00943 
00944                         
00945                         
00946                         
00947                       }
00948                       
00949                       break;
00950                     case 201: 
00951                       MATCH_name = 
00952                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
00953                             /* opf at 0 */]; 
00954                       { 
00955                         char *name = MATCH_name;
00956                         unsigned fdd = 
00957                           (MATCH_w_32_0 >> 25 & 0x1f) /* fdd at 0 */;
00958                         unsigned fs2s = (MATCH_w_32_0 & 0x1f) /* fs2s at 0 */;
00959                         nextPC = 4 + MATCH_p; 
00960                         
00961                         #line 251 "machine/sparc/disassembler.m"
00962                         
00963 
00964                                 sprintf (str, "%s %s,%s", name, DIS_FS2S, DIS_FDD);
00965 
00966                         
00967                         
00968                         
00969                       }
00970                       
00971                       break;
00972                     case 203: 
00973                       MATCH_name = 
00974                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
00975                             /* opf at 0 */]; 
00976                       { 
00977                         char *name = MATCH_name;
00978                         unsigned fdd = 
00979                           (MATCH_w_32_0 >> 25 & 0x1f) /* fdd at 0 */;
00980                         unsigned fs2q = (MATCH_w_32_0 & 0x1f) /* fs2q at 0 */;
00981                         nextPC = 4 + MATCH_p; 
00982                         
00983                         #line 264 "machine/sparc/disassembler.m"
00984                         
00985 
00986                                 sprintf (str, "%s %s,%s", name, DIS_FS2Q, DIS_FDD);
00987 
00988                         
00989 
00990                         
00991                         
00992                         
00993                       }
00994                       
00995                       break;
00996                     case 204: 
00997                       MATCH_name = 
00998                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
00999                             /* opf at 0 */]; 
01000                       { 
01001                         char *name = MATCH_name;
01002                         unsigned fdq = 
01003                           (MATCH_w_32_0 >> 25 & 0x1f) /* fdq at 0 */;
01004                         unsigned fs2s = (MATCH_w_32_0 & 0x1f) /* fs2s at 0 */;
01005                         nextPC = 4 + MATCH_p; 
01006                         
01007                         #line 246 "machine/sparc/disassembler.m"
01008                         
01009 
01010                                 sprintf (str, "%s %s,%s", name, DIS_FS2S, DIS_FDQ);
01011 
01012                         
01013                         
01014                         
01015                       }
01016                       
01017                       break;
01018                     case 205: 
01019                       MATCH_name = 
01020                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
01021                             /* opf at 0 */]; 
01022                       { 
01023                         char *name = MATCH_name;
01024                         unsigned fdq = 
01025                           (MATCH_w_32_0 >> 25 & 0x1f) /* fdq at 0 */;
01026                         unsigned fs2s = (MATCH_w_32_0 & 0x1f) /* fs2s at 0 */;
01027                         nextPC = 4 + MATCH_p; 
01028                         
01029                         #line 256 "machine/sparc/disassembler.m"
01030                         
01031 
01032                                 sprintf (str, "%s %s,%s", name, DIS_FS2S, DIS_FDQ);
01033 
01034                         
01035                         
01036                         
01037                       }
01038                       
01039                       break;
01040                     case 206: 
01041                       MATCH_name = 
01042                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
01043                             /* opf at 0 */]; 
01044                       { 
01045                         char *name = MATCH_name;
01046                         unsigned fdq = 
01047                           (MATCH_w_32_0 >> 25 & 0x1f) /* fdq at 0 */;
01048                         unsigned fs2d = (MATCH_w_32_0 & 0x1f) /* fs2d at 0 */;
01049                         nextPC = 4 + MATCH_p; 
01050                         
01051                         #line 261 "machine/sparc/disassembler.m"
01052                         
01053 
01054                                 sprintf (str, "%s %s,%s", name, DIS_FS2D, DIS_FDQ);
01055 
01056                         
01057                         
01058                         
01059                       }
01060                       
01061                       break;
01062                     case 210: 
01063                       MATCH_name = 
01064                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
01065                             /* opf at 0 */]; 
01066                       { 
01067                         char *name = MATCH_name;
01068                         unsigned fds = 
01069                           (MATCH_w_32_0 >> 25 & 0x1f) /* fds at 0 */;
01070                         unsigned fs2d = (MATCH_w_32_0 & 0x1f) /* fs2d at 0 */;
01071                         nextPC = 4 + MATCH_p; 
01072                         
01073                         #line 244 "machine/sparc/disassembler.m"
01074                         
01075 
01076                                 sprintf (str, "%s %s,%s", name, DIS_FS2D, DIS_FDS);
01077 
01078                         
01079 
01080                         
01081                         
01082                         
01083                       }
01084                       
01085                       break;
01086                     case 211: 
01087                       MATCH_name = 
01088                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
01089                             /* opf at 0 */]; 
01090                       { 
01091                         char *name = MATCH_name;
01092                         unsigned fds = 
01093                           (MATCH_w_32_0 >> 25 & 0x1f) /* fds at 0 */;
01094                         unsigned fs2q = (MATCH_w_32_0 & 0x1f) /* fs2q at 0 */;
01095                         nextPC = 4 + MATCH_p; 
01096                         
01097                         #line 249 "machine/sparc/disassembler.m"
01098                         
01099 
01100                                 sprintf (str, "%s %s,%s", name, DIS_FS2Q, DIS_FDS);
01101 
01102                         
01103 
01104                         
01105                         
01106                         
01107                       }
01108                       
01109                       break;
01110                     default: assert(0);
01111                   } /* (MATCH_w_32_0 >> 5 & 0x1ff) -- opf at 0 --*/ 
01112                 break;
01113               case 53: 
01114                 if (0 <= (MATCH_w_32_0 >> 5 & 0x1ff) /* opf at 0 */ && 
01115                   (MATCH_w_32_0 >> 5 & 0x1ff) /* opf at 0 */ < 81 || 
01116                   88 <= (MATCH_w_32_0 >> 5 & 0x1ff) /* opf at 0 */ && 
01117                   (MATCH_w_32_0 >> 5 & 0x1ff) /* opf at 0 */ < 512) 
01118                   goto MATCH_label_a0;  /*opt-block+*/
01119                 else 
01120                   switch((MATCH_w_32_0 >> 5 & 0x1ff) /* opf at 0 */) {
01121                     case 84: 
01122                       goto MATCH_label_a0; break;
01123                     case 81: case 85: 
01124                       MATCH_name = 
01125                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
01126                             /* opf at 0 */]; 
01127                       { 
01128                         char *name = MATCH_name;
01129                         unsigned fs1s = 
01130                           (MATCH_w_32_0 >> 14 & 0x1f) /* fs1s at 0 */;
01131                         unsigned fs2s = (MATCH_w_32_0 & 0x1f) /* fs2s at 0 */;
01132                         nextPC = 4 + MATCH_p; 
01133                         
01134                         #line 230 "machine/sparc/disassembler.m"
01135                          
01136 
01137                                 sprintf (str, "%s %s,%s", name, DIS_FS1S, DIS_FS2S);
01138 
01139                         
01140 
01141                         
01142                         
01143                         
01144                       }
01145                       
01146                       break;
01147                     case 82: case 86: 
01148                       MATCH_name = 
01149                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
01150                             /* opf at 0 */]; 
01151                       { 
01152                         char *name = MATCH_name;
01153                         unsigned fs1d = 
01154                           (MATCH_w_32_0 >> 14 & 0x1f) /* fs1d at 0 */;
01155                         unsigned fs2d = (MATCH_w_32_0 & 0x1f) /* fs2d at 0 */;
01156                         nextPC = 4 + MATCH_p; 
01157                         
01158                         #line 233 "machine/sparc/disassembler.m"
01159                          
01160 
01161                                 sprintf (str, "%s %s,%s", name, DIS_FS1D, DIS_FS2D);
01162 
01163                         
01164 
01165                         
01166                         
01167                         
01168                       }
01169                       
01170                       break;
01171                     case 83: case 87: 
01172                       MATCH_name = 
01173                         MATCH_name_opf_49[(MATCH_w_32_0 >> 5 & 0x1ff) 
01174                             /* opf at 0 */]; 
01175                       { 
01176                         char *name = MATCH_name;
01177                         unsigned fs1q = 
01178                           (MATCH_w_32_0 >> 14 & 0x1f) /* fs1q at 0 */;
01179                         unsigned fs2q = (MATCH_w_32_0 & 0x1f) /* fs2q at 0 */;
01180                         nextPC = 4 + MATCH_p; 
01181                         
01182                         #line 236 "machine/sparc/disassembler.m"
01183                          
01184 
01185                                 sprintf (str, "%s %s,%s", name, DIS_FS1Q, DIS_FS2Q);
01186 
01187                         
01188 
01189                         
01190                         
01191                         
01192                       }
01193                       
01194                       break;
01195                     default: assert(0);
01196                   } /* (MATCH_w_32_0 >> 5 & 0x1ff) -- opf at 0 --*/ 
01197                 break;
01198               case 56: 
01199                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) 
01200                   
01201                     switch((MATCH_w_32_0 >> 14 & 0x1f) /* rs1 at 0 */) {
01202                       case 0: 
01203                         MATCH_name = 
01204                           MATCH_name_rs1_51[(MATCH_w_32_0 >> 14 & 0x1f) 
01205                               /* rs1 at 0 */]; 
01206                         goto MATCH_label_a5; 
01207                         
01208                         break;
01209                       case 1: case 2: case 3: case 4: case 5: case 6: case 7: 
01210                       case 8: case 9: case 10: case 11: case 12: case 13: 
01211                       case 14: case 16: case 17: case 18: case 19: case 20: 
01212                       case 21: case 22: case 23: case 24: case 25: case 26: 
01213                       case 27: case 28: case 29: case 30: 
01214                         MATCH_name = 
01215                           MATCH_name_rs1_43[(MATCH_w_32_0 >> 14 & 0x1f) 
01216                               /* rs1 at 0 */]; 
01217                         goto MATCH_label_a5; 
01218                         
01219                         break;
01220                       case 15: 
01221                         if ((MATCH_w_32_0 & 0x1fff) /* simm13 at 0 */ == 8 && 
01222                           (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */ == 0) { 
01223                           nextPC = 4 + MATCH_p; 
01224                           
01225                           #line 120 "machine/sparc/disassembler.m"
01226                           
01227 
01228                                   sprintf (str, "retl");
01229 
01230                           
01231 
01232                           
01233                           
01234                           
01235                         } /*opt-block*//*opt-block+*/
01236                         else { 
01237                           MATCH_name = "JMPL"; 
01238                           goto MATCH_label_a5; 
01239                           
01240                         } /*opt-block*/
01241                         
01242                         break;
01243                       case 31: 
01244                         if ((MATCH_w_32_0 & 0x1fff) /* simm13 at 0 */ == 8 && 
01245                           (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */ == 0) { 
01246                           nextPC = 4 + MATCH_p; 
01247                           
01248                           #line 117 "machine/sparc/disassembler.m"
01249                           
01250 
01251                                   sprintf (str, "ret");
01252 
01253                           
01254 
01255                           
01256                           
01257                           
01258                         } /*opt-block*//*opt-block+*/
01259                         else { 
01260                           MATCH_name = "JMPL"; 
01261                           goto MATCH_label_a5; 
01262                           
01263                         } /*opt-block*/
01264                         
01265                         break;
01266                       default: assert(0);
01267                     } /* (MATCH_w_32_0 >> 14 & 0x1f) -- rs1 at 0 --*/  
01268                 else { 
01269                   MATCH_name = 
01270                     MATCH_name_i_50[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01271                   goto MATCH_label_a5; 
01272                   
01273                 } /*opt-block*/
01274                 break;
01275               case 57: 
01276                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01277                   MATCH_name = 
01278                     MATCH_name_i_54[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01279                   goto MATCH_label_a6; 
01280                   
01281                 } /*opt-block*/
01282                 else { 
01283                   MATCH_name = 
01284                     MATCH_name_i_50[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01285                   goto MATCH_label_a6; 
01286                   
01287                 } /*opt-block*/
01288                 
01289                 break;
01290               case 58: 
01291                 MATCH_name = MATCH_name_cond_55[(MATCH_w_32_0 >> 25 & 0xf) 
01292                       /* cond at 0 */]; 
01293                 { 
01294                   char *name = MATCH_name;
01295                   unsigned addr = addressToPC(MATCH_p);
01296                   nextPC = 4 + MATCH_p; 
01297                   
01298                   #line 273 "machine/sparc/disassembler.m"
01299                    
01300 
01301                         sprintf (str, "%s %s", name, DIS_ADDR);
01302 
01303                   
01304 
01305                   
01306                   
01307                   
01308                 }
01309                 
01310                 break;
01311               case 60: 
01312                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01313                   MATCH_name = 
01314                     MATCH_name_i_54[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01315                   goto MATCH_label_a4; 
01316                   
01317                 } /*opt-block*/
01318                 else 
01319                   if ((MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */ == 0) 
01320                     if ((MATCH_w_32_0 >> 14 & 0x1f) /* rs1 at 0 */ == 0) 
01321                       if ((MATCH_w_32_0 & 0x1f) /* rs2 at 0 */ == 0) { 
01322                         MATCH_name = "SAVE"; 
01323                         { 
01324                           char *name = MATCH_name;
01325                           nextPC = 4 + MATCH_p; 
01326                           
01327                           #line 123 "machine/sparc/disassembler.m"
01328                           
01329 
01330                                 sprintf (str, "%s %s,%s", name, "%g0", "%g0", "%g0");
01331 
01332                           
01333 
01334                           
01335                           
01336                           
01337                         }
01338                         
01339                       } /*opt-block*/
01340                       else { 
01341                         MATCH_name = "SAVE"; 
01342                         goto MATCH_label_a4; 
01343                         
01344                       } /*opt-block*/ /*opt-block+*/
01345                     else { 
01346                       MATCH_name = 
01347                         MATCH_name_rs1_51[(MATCH_w_32_0 >> 14 & 0x1f) 
01348                             /* rs1 at 0 */]; 
01349                       goto MATCH_label_a4; 
01350                       
01351                     } /*opt-block*/ 
01352                   else { 
01353                     MATCH_name = "SAVE"; 
01354                     goto MATCH_label_a4; 
01355                     
01356                   } /*opt-block*/ 
01357                 break;
01358               case 61: 
01359                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01360                   MATCH_name = 
01361                     MATCH_name_i_61[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01362                   goto MATCH_label_a4; 
01363                   
01364                 } /*opt-block*/
01365                 else 
01366                   if ((MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */ == 0 && 
01367                     (MATCH_w_32_0 >> 14 & 0x1f) /* rs1 at 0 */ == 0 && 
01368                     (MATCH_w_32_0 & 0x1f) /* rs2 at 0 */ == 0) { 
01369                     nextPC = 4 + MATCH_p; 
01370                     
01371                     #line 114 "machine/sparc/disassembler.m"
01372                     
01373 
01374                             sprintf (str, "restore");
01375 
01376                     
01377 
01378                     
01379                     
01380                     
01381                   } /*opt-block*//*opt-block+*/
01382                   else { 
01383                     MATCH_name = "RESTORE"; 
01384                     goto MATCH_label_a4; 
01385                     
01386                   } /*opt-block*/ /*opt-block+*/
01387                 break;
01388               default: assert(0);
01389             } /* (MATCH_w_32_0 >> 19 & 0x3f) -- op3 at 0 --*/ 
01390           break;
01391         case 3: 
01392           
01393             switch((MATCH_w_32_0 >> 19 & 0x3f) /* op3 at 0 */) {
01394               case 0: 
01395                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01396                   MATCH_name = 
01397                     MATCH_name_i_62[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01398                   goto MATCH_label_a7; 
01399                   
01400                 } /*opt-block*/
01401                 else { 
01402                   MATCH_name = 
01403                     MATCH_name_i_61[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01404                   goto MATCH_label_a7; 
01405                   
01406                 } /*opt-block*/
01407                 
01408                 break;
01409               case 1: 
01410                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01411                   MATCH_name = 
01412                     MATCH_name_i_63[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01413                   goto MATCH_label_a7; 
01414                   
01415                 } /*opt-block*/
01416                 else { 
01417                   MATCH_name = 
01418                     MATCH_name_i_62[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01419                   goto MATCH_label_a7; 
01420                   
01421                 } /*opt-block*/
01422                 
01423                 break;
01424               case 2: 
01425                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01426                   MATCH_name = 
01427                     MATCH_name_i_64[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01428                   goto MATCH_label_a7; 
01429                   
01430                 } /*opt-block*/
01431                 else { 
01432                   MATCH_name = 
01433                     MATCH_name_i_63[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01434                   goto MATCH_label_a7; 
01435                   
01436                 } /*opt-block*/
01437                 
01438                 break;
01439               case 3: 
01440                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01441                   MATCH_name = 
01442                     MATCH_name_i_65[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01443                   goto MATCH_label_a7; 
01444                   
01445                 } /*opt-block*/
01446                 else { 
01447                   MATCH_name = 
01448                     MATCH_name_i_64[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01449                   goto MATCH_label_a7; 
01450                   
01451                 } /*opt-block*/
01452                 
01453                 break;
01454               case 4: 
01455                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01456                   MATCH_name = 
01457                     MATCH_name_i_66[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01458                   goto MATCH_label_a8; 
01459                   
01460                 } /*opt-block*/
01461                 else { 
01462                   MATCH_name = 
01463                     MATCH_name_i_65[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01464                   goto MATCH_label_a8; 
01465                   
01466                 } /*opt-block*/
01467                 
01468                 break;
01469               case 5: 
01470                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01471                   MATCH_name = 
01472                     MATCH_name_i_67[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01473                   goto MATCH_label_a8; 
01474                   
01475                 } /*opt-block*/
01476                 else { 
01477                   MATCH_name = 
01478                     MATCH_name_i_66[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01479                   goto MATCH_label_a8; 
01480                   
01481                 } /*opt-block*/
01482                 
01483                 break;
01484               case 6: 
01485                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01486                   MATCH_name = 
01487                     MATCH_name_i_68[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01488                   goto MATCH_label_a8; 
01489                   
01490                 } /*opt-block*/
01491                 else { 
01492                   MATCH_name = 
01493                     MATCH_name_i_67[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01494                   goto MATCH_label_a8; 
01495                   
01496                 } /*opt-block*/
01497                 
01498                 break;
01499               case 7: 
01500                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01501                   MATCH_name = 
01502                     MATCH_name_i_69[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01503                   goto MATCH_label_a8; 
01504                   
01505                 } /*opt-block*/
01506                 else { 
01507                   MATCH_name = 
01508                     MATCH_name_i_68[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01509                   goto MATCH_label_a8; 
01510                   
01511                 } /*opt-block*/
01512                 
01513                 break;
01514               case 8: case 11: case 12: case 14: case 24: case 27: case 28: 
01515               case 30: case 34: case 40: case 41: case 42: case 43: case 44: 
01516               case 45: case 46: case 47: case 50: case 56: case 57: case 58: 
01517               case 59: case 60: case 61: case 62: case 63: 
01518                 goto MATCH_label_a0; break;
01519               case 9: 
01520                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01521                   MATCH_name = 
01522                     MATCH_name_i_70[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01523                   goto MATCH_label_a7; 
01524                   
01525                 } /*opt-block*/
01526                 else { 
01527                   MATCH_name = 
01528                     MATCH_name_i_69[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01529                   goto MATCH_label_a7; 
01530                   
01531                 } /*opt-block*/
01532                 
01533                 break;
01534               case 10: 
01535                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01536                   MATCH_name = 
01537                     MATCH_name_i_71[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01538                   goto MATCH_label_a7; 
01539                   
01540                 } /*opt-block*/
01541                 else { 
01542                   MATCH_name = 
01543                     MATCH_name_i_70[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01544                   goto MATCH_label_a7; 
01545                   
01546                 } /*opt-block*/
01547                 
01548                 break;
01549               case 13: 
01550                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01551                   MATCH_name = 
01552                     MATCH_name_i_72[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01553                   goto MATCH_label_a7; 
01554                   
01555                 } /*opt-block*/
01556                 else { 
01557                   MATCH_name = 
01558                     MATCH_name_i_71[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01559                   goto MATCH_label_a7; 
01560                   
01561                 } /*opt-block*/
01562                 
01563                 break;
01564               case 15: 
01565                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01566                   MATCH_name = 
01567                     MATCH_name_i_73[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01568                   goto MATCH_label_a7; 
01569                   
01570                 } /*opt-block*/
01571                 else { 
01572                   MATCH_name = 
01573                     MATCH_name_i_72[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01574                   goto MATCH_label_a7; 
01575                   
01576                 } /*opt-block*/
01577                 
01578                 break;
01579               case 16: 
01580                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01581                   MATCH_name = 
01582                     MATCH_name_i_73[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01583                   goto MATCH_label_a9; 
01584                   
01585                 } /*opt-block*/
01586                 else 
01587                   goto MATCH_label_a0;  /*opt-block+*/
01588                 
01589                 break;
01590               case 17: 
01591                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01592                   MATCH_name = 
01593                     MATCH_name_i_74[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01594                   goto MATCH_label_a9; 
01595                   
01596                 } /*opt-block*/
01597                 else 
01598                   goto MATCH_label_a0;  /*opt-block+*/
01599                 
01600                 break;
01601               case 18: 
01602                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01603                   MATCH_name = 
01604                     MATCH_name_i_75[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01605                   goto MATCH_label_a9; 
01606                   
01607                 } /*opt-block*/
01608                 else 
01609                   goto MATCH_label_a0;  /*opt-block+*/
01610                 
01611                 break;
01612               case 19: 
01613                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01614                   MATCH_name = 
01615                     MATCH_name_i_76[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01616                   goto MATCH_label_a9; 
01617                   
01618                 } /*opt-block*/
01619                 else 
01620                   goto MATCH_label_a0;  /*opt-block+*/
01621                 
01622                 break;
01623               case 20: 
01624                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01625                   MATCH_name = 
01626                     MATCH_name_i_77[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01627                   goto MATCH_label_a10; 
01628                   
01629                 } /*opt-block*/
01630                 else 
01631                   goto MATCH_label_a0;  /*opt-block+*/
01632                 
01633                 break;
01634               case 21: 
01635                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01636                   MATCH_name = 
01637                     MATCH_name_i_78[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01638                   goto MATCH_label_a10; 
01639                   
01640                 } /*opt-block*/
01641                 else 
01642                   goto MATCH_label_a0;  /*opt-block+*/
01643                 
01644                 break;
01645               case 22: 
01646                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01647                   MATCH_name = 
01648                     MATCH_name_i_79[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01649                   goto MATCH_label_a10; 
01650                   
01651                 } /*opt-block*/
01652                 else 
01653                   goto MATCH_label_a0;  /*opt-block+*/
01654                 
01655                 break;
01656               case 23: 
01657                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01658                   MATCH_name = 
01659                     MATCH_name_i_80[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01660                   goto MATCH_label_a10; 
01661                   
01662                 } /*opt-block*/
01663                 else 
01664                   goto MATCH_label_a0;  /*opt-block+*/
01665                 
01666                 break;
01667               case 25: 
01668                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01669                   MATCH_name = 
01670                     MATCH_name_i_81[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01671                   goto MATCH_label_a9; 
01672                   
01673                 } /*opt-block*/
01674                 else 
01675                   goto MATCH_label_a0;  /*opt-block+*/
01676                 
01677                 break;
01678               case 26: 
01679                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01680                   MATCH_name = 
01681                     MATCH_name_i_82[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01682                   goto MATCH_label_a9; 
01683                   
01684                 } /*opt-block*/
01685                 else 
01686                   goto MATCH_label_a0;  /*opt-block+*/
01687                 
01688                 break;
01689               case 29: 
01690                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01691                   MATCH_name = 
01692                     MATCH_name_i_83[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01693                   goto MATCH_label_a9; 
01694                   
01695                 } /*opt-block*/
01696                 else 
01697                   goto MATCH_label_a0;  /*opt-block+*/
01698                 
01699                 break;
01700               case 31: 
01701                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01702                   MATCH_name = 
01703                     MATCH_name_i_84[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01704                   goto MATCH_label_a9; 
01705                   
01706                 } /*opt-block*/
01707                 else 
01708                   goto MATCH_label_a0;  /*opt-block+*/
01709                 
01710                 break;
01711               case 32: 
01712                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01713                   MATCH_name = 
01714                     MATCH_name_i_85[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01715                   goto MATCH_label_a11; 
01716                   
01717                 } /*opt-block*/
01718                 else { 
01719                   MATCH_name = 
01720                     MATCH_name_i_74[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01721                   goto MATCH_label_a11; 
01722                   
01723                 } /*opt-block*/
01724                 
01725                 break;
01726               case 33: 
01727                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01728                   MATCH_name = 
01729                     MATCH_name_i_86[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01730                   goto MATCH_label_a12; 
01731                   
01732                 } /*opt-block*/
01733                 else { 
01734                   MATCH_name = 
01735                     MATCH_name_i_75[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01736                   goto MATCH_label_a12; 
01737                   
01738                 } /*opt-block*/
01739                 
01740                 break;
01741               case 35: 
01742                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 0) { 
01743                   MATCH_name = 
01744                     MATCH_name_i_87[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01745                   goto MATCH_label_a13; 
01746                   
01747                 } /*opt-block*/
01748                 else { 
01749                   MATCH_name = 
01750                     MATCH_name_i_76[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01751                   goto MATCH_label_a13; 
01752                   
01753                 } /*opt-block*/
01754                 
01755                 break;
01756               case 36: 
01757                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01758                   MATCH_name = 
01759                     MATCH_name_i_77[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01760                   goto MATCH_label_a14; 
01761                   
01762                 } /*opt-block*/
01763                 else { 
01764                   MATCH_name = "STF"; 
01765                   goto MATCH_label_a14; 
01766                   
01767                 } /*opt-block*/
01768                 
01769                 break;
01770               case 37: 
01771                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01772                   MATCH_name = 
01773                     MATCH_name_i_78[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01774                   goto MATCH_label_a15; 
01775                   
01776                 } /*opt-block*/
01777                 else { 
01778                   MATCH_name = "STFSR"; 
01779                   goto MATCH_label_a15; 
01780                   
01781                 } /*opt-block*/
01782                 
01783                 break;
01784               case 38: 
01785                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01786                   MATCH_name = 
01787                     MATCH_name_i_79[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01788                   goto MATCH_label_a16; 
01789                   
01790                 } /*opt-block*/
01791                 else { 
01792                   MATCH_name = "STDFQ"; 
01793                   goto MATCH_label_a16; 
01794                   
01795                 } /*opt-block*/
01796                 
01797                 break;
01798               case 39: 
01799                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01800                   MATCH_name = 
01801                     MATCH_name_i_80[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01802                   goto MATCH_label_a17; 
01803                   
01804                 } /*opt-block*/
01805                 else { 
01806                   MATCH_name = "STDF"; 
01807                   goto MATCH_label_a17; 
01808                   
01809                 } /*opt-block*/
01810                 
01811                 break;
01812               case 48: 
01813                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01814                   MATCH_name = 
01815                     MATCH_name_i_81[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01816                   goto MATCH_label_a18; 
01817                   
01818                 } /*opt-block*/
01819                 else { 
01820                   MATCH_name = "LDC"; 
01821                   goto MATCH_label_a18; 
01822                   
01823                 } /*opt-block*/
01824                 
01825                 break;
01826               case 49: 
01827                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01828                   MATCH_name = 
01829                     MATCH_name_i_82[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01830                   goto MATCH_label_a19; 
01831                   
01832                 } /*opt-block*/
01833                 else { 
01834                   MATCH_name = "LDCSR"; 
01835                   goto MATCH_label_a19; 
01836                   
01837                 } /*opt-block*/
01838                 
01839                 break;
01840               case 51: 
01841                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01842                   MATCH_name = 
01843                     MATCH_name_i_83[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01844                   goto MATCH_label_a18; 
01845                   
01846                 } /*opt-block*/
01847                 else { 
01848                   MATCH_name = "LDDC"; 
01849                   goto MATCH_label_a18; 
01850                   
01851                 } /*opt-block*/
01852                 
01853                 break;
01854               case 52: 
01855                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01856                   MATCH_name = 
01857                     MATCH_name_i_84[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01858                   goto MATCH_label_a20; 
01859                   
01860                 } /*opt-block*/
01861                 else { 
01862                   MATCH_name = "STC"; 
01863                   goto MATCH_label_a20; 
01864                   
01865                 } /*opt-block*/
01866                 
01867                 break;
01868               case 53: 
01869                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01870                   MATCH_name = 
01871                     MATCH_name_i_85[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01872                   goto MATCH_label_a21; 
01873                   
01874                 } /*opt-block*/
01875                 else { 
01876                   MATCH_name = "STCSR"; 
01877                   goto MATCH_label_a21; 
01878                   
01879                 } /*opt-block*/
01880                 
01881                 break;
01882               case 54: 
01883                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01884                   MATCH_name = 
01885                     MATCH_name_i_86[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01886                   goto MATCH_label_a22; 
01887                   
01888                 } /*opt-block*/
01889                 else { 
01890                   MATCH_name = "STDCQ"; 
01891                   goto MATCH_label_a22; 
01892                   
01893                 } /*opt-block*/
01894                 
01895                 break;
01896               case 55: 
01897                 if ((MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */ == 1) { 
01898                   MATCH_name = 
01899                     MATCH_name_i_87[(MATCH_w_32_0 >> 13 & 0x1) /* i at 0 */]; 
01900                   goto MATCH_label_a20; 
01901                   
01902                 } /*opt-block*/
01903                 else { 
01904                   MATCH_name = "STDC"; 
01905                   goto MATCH_label_a20; 
01906                   
01907                 } /*opt-block*/
01908                 
01909                 break;
01910               default: assert(0);
01911             } /* (MATCH_w_32_0 >> 19 & 0x3f) -- op3 at 0 --*/ 
01912           break;
01913         default: assert(0);
01914       } /* (MATCH_w_32_0 >> 30 & 0x3) -- op at 0 --*/ 
01915     
01916   }goto MATCH_finished_a; 
01917   
01918   MATCH_label_a0: (void)0; /*placeholder for label*/ 
01919     { 
01920       unsigned n = MATCH_w_32_0 /* inst at 0 */;
01921       nextPC = 4 + MATCH_p; 
01922       
01923       #line 279 "machine/sparc/disassembler.m"
01924        
01925 
01926               // What does this mean?
01927 
01928             NULL;
01929 
01930       
01931 
01932       
01933       
01934       
01935     } 
01936     goto MATCH_finished_a; 
01937     
01938   MATCH_label_a1: (void)0; /*placeholder for label*/ 
01939     { 
01940       char *name = MATCH_name;
01941       unsigned tgt = 
01942         4 * sign_extend((MATCH_w_32_0 & 0x3fffff) /* disp22 at 0 */, 22) + 
01943         addressToPC(MATCH_p);
01944       nextPC = 4 + MATCH_p; 
01945       
01946       #line 204 "machine/sparc/disassembler.m"
01947        
01948 
01949             sprintf (str, "%s %X", name, tgt-delta);
01950 
01951       
01952 
01953       
01954       
01955       
01956     } 
01957     goto MATCH_finished_a; 
01958     
01959   MATCH_label_a2: (void)0; /*placeholder for label*/ 
01960     { 
01961       char *name = MATCH_name;
01962       unsigned tgt = 
01963         4 * sign_extend((MATCH_w_32_0 & 0x3fffff) /* disp22 at 0 */, 22) + 
01964         addressToPC(MATCH_p);
01965       nextPC = 4 + MATCH_p; 
01966       
01967       #line 201 "machine/sparc/disassembler.m"
01968        
01969 
01970             sprintf (str, "%s %X", name, tgt-delta);
01971 
01972       
01973 
01974       
01975       
01976       
01977     } 
01978     goto MATCH_finished_a; 
01979     
01980   MATCH_label_a3: (void)0; /*placeholder for label*/ 
01981     { 
01982       unsigned imm22 = (MATCH_w_32_0 & 0x3fffff) /* imm22 at 0 */ << 10;
01983       unsigned rd = (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */;
01984       nextPC = 4 + MATCH_p; 
01985       
01986       #line 111 "machine/sparc/disassembler.m"
01987        
01988 
01989             sprintf (str, "%s 0x%X,%s", "sethi", (imm22), DIS_RD);
01990 
01991       
01992 
01993       
01994       
01995       
01996     } 
01997     goto MATCH_finished_a; 
01998     
01999   MATCH_label_a4: (void)0; /*placeholder for label*/ 
02000     { 
02001       char *name = MATCH_name;
02002       unsigned rd = (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */;
02003       unsigned roi = addressToPC(MATCH_p);
02004       unsigned rs1 = (MATCH_w_32_0 >> 14 & 0x1f) /* rs1 at 0 */;
02005       nextPC = 4 + MATCH_p; 
02006       
02007       #line 198 "machine/sparc/disassembler.m"
02008        
02009 
02010             sprintf (str, "%s %s,%s,%s", name, DIS_RS1, DIS_ROI, DIS_RD);
02011 
02012       
02013 
02014       
02015       
02016       
02017     } 
02018     goto MATCH_finished_a; 
02019     
02020   MATCH_label_a5: (void)0; /*placeholder for label*/ 
02021     { 
02022       char *name = MATCH_name;
02023       unsigned addr = addressToPC(MATCH_p);
02024       unsigned rd = (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */;
02025       nextPC = 4 + MATCH_p; 
02026       
02027       #line 267 "machine/sparc/disassembler.m"
02028        
02029 
02030             sprintf (str, "%s %s,%s", name, DIS_ADDR, DIS_RD);
02031 
02032       
02033 
02034       
02035       
02036       
02037     } 
02038     goto MATCH_finished_a; 
02039     
02040   MATCH_label_a6: (void)0; /*placeholder for label*/ 
02041     { 
02042       char *name = MATCH_name;
02043       unsigned addr = addressToPC(MATCH_p);
02044       nextPC = 4 + MATCH_p; 
02045       
02046       #line 270 "machine/sparc/disassembler.m"
02047        
02048 
02049             sprintf (str, "%s", name);
02050 
02051       
02052 
02053       
02054       
02055       
02056     } 
02057     goto MATCH_finished_a; 
02058     
02059   MATCH_label_a7: (void)0; /*placeholder for label*/ 
02060     { 
02061       char *name = MATCH_name;
02062       unsigned addr = addressToPC(MATCH_p);
02063       unsigned rd = (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */;
02064       nextPC = 4 + MATCH_p; 
02065       
02066       #line 126 "machine/sparc/disassembler.m"
02067        
02068 
02069             sprintf (str, "%s %s,%s", name, DIS_ADDR, DIS_RD);
02070 
02071       
02072 
02073       
02074       
02075       
02076     } 
02077     goto MATCH_finished_a; 
02078     
02079   MATCH_label_a8: (void)0; /*placeholder for label*/ 
02080     { 
02081       char *name = MATCH_name;
02082       unsigned addr = addressToPC(MATCH_p);
02083       unsigned rd = (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */;
02084       nextPC = 4 + MATCH_p; 
02085       
02086       #line 141 "machine/sparc/disassembler.m"
02087        
02088 
02089             sprintf (str, "%s %s,%s", name, DIS_RD, DIS_ADDR);
02090 
02091       
02092 
02093       
02094       
02095       
02096     } 
02097     goto MATCH_finished_a; 
02098     
02099   MATCH_label_a9: (void)0; /*placeholder for label*/ 
02100     { 
02101       char *name = MATCH_name;
02102       unsigned addr = addressToPC(MATCH_p);
02103       unsigned asi = (MATCH_w_32_0 >> 5 & 0xff) /* asi at 0 */;
02104       unsigned rd = (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */;
02105       nextPC = 4 + MATCH_p; 
02106       
02107       #line 138 "machine/sparc/disassembler.m"
02108        
02109 
02110             sprintf (str, "%s %s,%s", name, DIS_RD, DIS_ADDR);
02111 
02112       
02113 
02114       
02115       
02116       
02117     } 
02118     goto MATCH_finished_a; 
02119     
02120   MATCH_label_a10: (void)0; /*placeholder for label*/ 
02121     { 
02122       char *name = MATCH_name;
02123       unsigned addr = addressToPC(MATCH_p);
02124       unsigned asi = (MATCH_w_32_0 >> 5 & 0xff) /* asi at 0 */;
02125       unsigned rd = (MATCH_w_32_0 >> 25 & 0x1f) /* rd at 0 */;
02126       nextPC = 4 + MATCH_p; 
02127       
02128       #line 153 "machine/sparc/disassembler.m"
02129        
02130 
02131             sprintf (str, "%s %s,%s", name, DIS_RD, DIS_ADDR);
02132 
02133       
02134 
02135       
02136       
02137       
02138     } 
02139     goto MATCH_finished_a; 
02140     
02141   MATCH_label_a11: (void)0; /*placeholder for label*/ 
02142     { 
02143       char *name = MATCH_name;
02144       unsigned addr = addressToPC(MATCH_p);
02145       unsigned fds = (MATCH_w_32_0 >> 25 & 0x1f) /* fds at 0 */;
02146       nextPC = 4 + MATCH_p; 
02147       
02148       #line 129 "machine/sparc/disassembler.m"
02149        
02150 
02151             sprintf (str, "%s %s,%s", name, DIS_ADDR, DIS_FDS);
02152 
02153       
02154 
02155       
02156       
02157       
02158     } 
02159     goto MATCH_finished_a; 
02160     
02161   MATCH_label_a12: (void)0; /*placeholder for label*/ 
02162     { 
02163       char *name = MATCH_name;
02164       unsigned addr = addressToPC(MATCH_p);
02165       nextPC = 4 + MATCH_p; 
02166       
02167       #line 156 "machine/sparc/disassembler.m"
02168        
02169 
02170             sprintf (str, "%s %s", name, DIS_ADDR);
02171 
02172       
02173 
02174       
02175       
02176       
02177     } 
02178     goto MATCH_finished_a; 
02179     
02180   MATCH_label_a13: (void)0; /*placeholder for label*/ 
02181     { 
02182       char *name = MATCH_name;
02183       unsigned addr = addressToPC(MATCH_p);
02184       unsigned fdd = (MATCH_w_32_0 >> 25 & 0x1f) /* fdd at 0 */;
02185       nextPC = 4 + MATCH_p; 
02186       
02187       #line 132 "machine/sparc/disassembler.m"
02188        
02189 
02190             sprintf (str, "%s %s,%s", name, DIS_ADDR, DIS_FDD);
02191 
02192       
02193 
02194       
02195       
02196       
02197     } 
02198     goto MATCH_finished_a; 
02199     
02200   MATCH_label_a14: (void)0; /*placeholder for label*/ 
02201     { 
02202       char *name = MATCH_name;
02203       unsigned addr = addressToPC(MATCH_p);
02204       unsigned fds = (MATCH_w_32_0 >> 25 & 0x1f) /* fds at 0 */;
02205       nextPC = 4 + MATCH_p; 
02206       
02207       #line 144 "machine/sparc/disassembler.m"
02208        
02209 
02210             sprintf (str, "%s %s,%s", name, DIS_FDS, DIS_ADDR);
02211 
02212       
02213 
02214       
02215       
02216       
02217     } 
02218     goto MATCH_finished_a; 
02219     
02220   MATCH_label_a15: (void)0; /*placeholder for label*/ 
02221     { 
02222       char *name = MATCH_name;
02223       unsigned addr = addressToPC(MATCH_p);
02224       nextPC = 4 + MATCH_p; 
02225       
02226       #line 162 "machine/sparc/disassembler.m"
02227        
02228 
02229             sprintf (str, "%s %s", name, DIS_ADDR);
02230 
02231       
02232 
02233       
02234       
02235       
02236     } 
02237     goto MATCH_finished_a; 
02238     
02239   MATCH_label_a16: (void)0; /*placeholder for label*/ 
02240     { 
02241       char *name = MATCH_name;
02242       unsigned addr = addressToPC(MATCH_p);
02243       nextPC = 4 + MATCH_p; 
02244       
02245       #line 168 "machine/sparc/disassembler.m"
02246        
02247 
02248             sprintf (str, "%s %s", name, DIS_ADDR);
02249 
02250       
02251 
02252       
02253       
02254       
02255     } 
02256     goto MATCH_finished_a; 
02257     
02258   MATCH_label_a17: (void)0; /*placeholder for label*/ 
02259     { 
02260       char *name = MATCH_name;
02261       unsigned addr = addressToPC(MATCH_p);
02262       unsigned fdd = (MATCH_w_32_0 >> 25 & 0x1f) /* fdd at 0 */;
02263       nextPC = 4 + MATCH_p; 
02264       
02265       #line 147 "machine/sparc/disassembler.m"
02266        
02267 
02268             sprintf (str, "%s %s,%s", name, DIS_FDD, DIS_ADDR);
02269 
02270       
02271 
02272       
02273       
02274       
02275     } 
02276     goto MATCH_finished_a; 
02277     
02278   MATCH_label_a18: (void)0; /*placeholder for label*/ 
02279     { 
02280       char *name = MATCH_name;
02281       unsigned addr = addressToPC(MATCH_p);
02282       unsigned cd = (MATCH_w_32_0 >> 25 & 0x1f) /* cd at 0 */;
02283       nextPC = 4 + MATCH_p; 
02284       
02285       #line 135 "machine/sparc/disassembler.m"
02286        
02287 
02288             sprintf (str, "%s %s,%s", name, DIS_ADDR, DIS_CD);
02289 
02290             
02291 
02292       
02293       
02294       
02295     } 
02296     goto MATCH_finished_a; 
02297     
02298   MATCH_label_a19: (void)0; /*placeholder for label*/ 
02299     { 
02300       char *name = MATCH_name;
02301       unsigned addr = addressToPC(MATCH_p);
02302       nextPC = 4 + MATCH_p; 
02303       
02304       #line 159 "machine/sparc/disassembler.m"
02305        
02306 
02307             sprintf (str, "%s %s", name, DIS_ADDR);
02308 
02309       
02310 
02311       
02312       
02313       
02314     } 
02315     goto MATCH_finished_a; 
02316     
02317   MATCH_label_a20: (void)0; /*placeholder for label*/ 
02318     { 
02319       char *name = MATCH_name;
02320       unsigned addr = addressToPC(MATCH_p);
02321       unsigned cd = (MATCH_w_32_0 >> 25 & 0x1f) /* cd at 0 */;
02322       nextPC = 4 + MATCH_p; 
02323       
02324       #line 150 "machine/sparc/disassembler.m"
02325        
02326 
02327             sprintf (str, "%s %s,%s", name, DIS_CD, DIS_ADDR);
02328 
02329       
02330 
02331       
02332       
02333       
02334     } 
02335     goto MATCH_finished_a; 
02336     
02337   MATCH_label_a21: (void)0; /*placeholder for label*/ 
02338     { 
02339       char *name = MATCH_name;
02340       unsigned addr = addressToPC(MATCH_p);
02341       nextPC = 4 + MATCH_p; 
02342       
02343       #line 165 "machine/sparc/disassembler.m"
02344        
02345 
02346             sprintf (str, "%s %s", name, DIS_ADDR);
02347 
02348       
02349 
02350       
02351       
02352       
02353     } 
02354     goto MATCH_finished_a; 
02355     
02356   MATCH_label_a22: (void)0; /*placeholder for label*/ 
02357     { 
02358       char *name = MATCH_name;
02359       unsigned addr = addressToPC(MATCH_p);
02360       nextPC = 4 + MATCH_p; 
02361       
02362       #line 171 "machine/sparc/disassembler.m"
02363        
02364 
02365             sprintf (str, "%s %s", name, DIS_ADDR);
02366 
02367       
02368 
02369       
02370       
02371       
02372     } 
02373     goto MATCH_finished_a; 
02374     
02375   MATCH_finished_a: (void)0; /*placeholder for label*/
02376   
02377 }
02378 
02379 #line 287 "machine/sparc/disassembler.m"
02380 
02381     return (nextPC - hostPC);
02382 }
02383 
02384 
02385 

Generated on Tue Sep 19 21:18:22 2006 for Boomerang by  doxygen 1.4.6