ppcdecoder.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 0 "frontend/machine/ppc/decoder.m"
00005 /*
00006  * Copyright (C) 2004, The University of Queensland
00007  *
00008  * See the file "LICENSE.TERMS" for information on usage and
00009  * redistribution of this file, and for a DISCLAIMER OF ALL
00010  * WARRANTIES.
00011  *
00012  */
00013 
00014 /*==============================================================================
00015  * FILE:       decoder.m
00016  * OVERVIEW:   Implementation of the PPC specific parts of the PPCDecoder class.
00017  *============================================================================*/
00018 
00019 /* $Revision: 1.28 $    // 1.24.2.1
00020  *
00021  * 23/Nov/04 - Jay Sweeney and Alajandro Dubrovsky: Created
00022  * 26/Sep/05 - Mike: Added Xsab_, Xsax_; DIS_INDEX uses RAZ not RA now; A2c_ -> Ac_ (does single as well as double prec)
00023  **/
00024 
00025 /*==============================================================================
00026  * Dependencies.
00027  *============================================================================*/
00028 
00029 #include <assert.h>
00030 #if defined(_MSC_VER) && _MSC_VER <= 1100
00031 #include "signature.h"
00032 #endif
00033 
00034 #include "exp.h"
00035 #include "prog.h"
00036 #include "proc.h"
00037 #include "decoder.h"
00038 #include "ppcdecoder.h"
00039 #include "rtl.h"
00040 #include "BinaryFile.h"     // For SymbolByAddress()
00041 #include "boomerang.h"
00042 #include <iostream>
00043 
00044 Exp*    crBit(int bitNum);  // Get an expression for a CR bit access
00045 
00046 #define DIS_UIMM    (new Const(uimm))
00047 #define DIS_SIMM    (new Const(simm))
00048 #define DIS_RS      (dis_Reg(rs))
00049 #define DIS_RD      (dis_Reg(rd))
00050 //#define DIS_CRFD  (dis_Reg(64/* condition registers start*/ + crfd))
00051 #define DIS_CRFD    (new Const(crfd))
00052 #define DIS_RDR     (dis_Reg(rd))
00053 #define DIS_RA      (dis_Reg(ra))
00054 #define DIS_RAZ     (dis_RAmbz(ra))     // As above, but May Be constant Zero
00055 #define DIS_RB      (dis_Reg(rb))
00056 #define DIS_D       (new Const(d))
00057 #define DIS_NZRA    (dis_Reg(ra))
00058 #define DIS_NZRB    (dis_Reg(rb))
00059 #define DIS_ADDR    (new Const(addr))
00060 #define DIS_RELADDR (new Const(reladdr - delta))
00061 #define DIS_CRBD    (crBit(crbD))
00062 #define DIS_CRBA    (crBit(crbA))
00063 #define DIS_CRBB    (crBit(crbB))
00064 #define DIS_DISP    (new Binary(opPlus, dis_RAmbz(ra), new Const(d)))
00065 #define DIS_INDEX   (new Binary(opPlus, DIS_RAZ, DIS_NZRB))
00066 #define DIS_BICR    (new Const(BIcr))
00067 #define DIS_RS_NUM  (new Const(rs))
00068 #define DIS_RD_NUM  (new Const(rd))
00069 #define DIS_BEG     (new Const(beg))
00070 #define DIS_END     (new Const(end))
00071 #define DIS_FD      (dis_Reg(fd+32))
00072 #define DIS_FS      (dis_Reg(fs+32))
00073 #define DIS_FA      (dis_Reg(fa+32))
00074 #define DIS_FB      (dis_Reg(fb+32))
00075 
00076 #define PPC_COND_JUMP(name, size, relocd, cond, BIcr) \
00077     result.rtl = new RTL(pc, stmts); \
00078     BranchStatement* jump = new BranchStatement; \
00079     result.rtl->appendStmt(jump); \
00080     result.numBytes = size; \
00081     jump->setDest(relocd-delta); \
00082     jump->setCondType(cond); \
00083     SHOW_ASM(name<<" "<<BIcr<<", 0x"<<std::hex<<relocd-delta)
00084 
00085 /*==============================================================================
00086  * FUNCTION:       unused
00087  * OVERVIEW:       A dummy function to suppress "unused local variable" messages
00088  * PARAMETERS:     x: integer variable to be "used"
00089  * RETURNS:        Nothing
00090  *============================================================================*/
00091 void PPCDecoder::unused(int x)
00092 {}
00093 void unused(char* x) {}
00094 
00095 
00096 /*==============================================================================
00097  * FUNCTION:       PPCDecoder::decodeInstruction
00098  * OVERVIEW:       Attempt to decode the high level instruction at a given
00099  *                 address and return the corresponding HL type (e.g. CallStatement,
00100  *                 GotoStatement etc). If no high level instruction exists at the
00101  *                 given address, then simply return the RTL for the low level
00102  *                 instruction at this address. There is an option to also
00103  *                 include the low level statements for a HL instruction.
00104  * PARAMETERS:     pc - the native address of the pc
00105  *                 delta - the difference between the above address and the
00106  *                   host address of the pc (i.e. the address that the pc is at
00107  *                   in the loaded object file)
00108  *                 proc - the enclosing procedure. This can be NULL for
00109  *                   those of us who are using this method in an interpreter
00110  * RETURNS:        a DecodeResult structure containing all the information
00111  *                   gathered during decoding
00112  *============================================================================*/
00113 DecodeResult& PPCDecoder::decodeInstruction (ADDRESS pc, int delta) { 
00114     static DecodeResult result;
00115     ADDRESS hostPC = pc+delta;
00116 
00117     // Clear the result structure;
00118     result.reset();
00119 
00120     // The actual list of instantiated statements
00121     std::list<Statement*>* stmts = NULL;
00122 
00123     ADDRESS nextPC = NO_ADDRESS;
00124 
00125 
00126 
00127 #line 119 "frontend/machine/ppc/decoder.m"
00128 { 
00129   dword MATCH_p = 
00130     
00131 #line 119 "frontend/machine/ppc/decoder.m"
00132     hostPC
00133     ;
00134   char *MATCH_name;
00135   static char *MATCH_name_OPCD_0[] = {
00136     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00137     (char *)0, "mulli", "subfic", (char *)0, (char *)0, (char *)0, "addic", 
00138     "addicq", "addi", "addis", (char *)0, (char *)0, (char *)0, (char *)0, 
00139     (char *)0, (char *)0, (char *)0, (char *)0, "ori", "oris", "xori", 
00140     "xoris", "andiq", "andisq", (char *)0, (char *)0, "lwz", "lwzu", "lbz", 
00141     "lbzu", "stw", "stwu", "stb", "stbu", "lhz", "lhzu", "lha", "lhau", 
00142     "sth", "sthu", "lmw", "stmw", "lfs", "lfsu", "lfd", "lfdu", "stfs", 
00143     "stfsu", "stfd", "stfdu", 
00144   };
00145   static char *MATCH_name_BO4_3[] = {
00146     (char *)0, (char *)0, "bge", (char *)0, (char *)0, (char *)0, "blt", 
00147   };
00148   static char *MATCH_name_BO4_4[] = {
00149     (char *)0, (char *)0, "ble", (char *)0, (char *)0, (char *)0, "bgt", 
00150   };
00151   static char *MATCH_name_BO4_5[] = {
00152     (char *)0, (char *)0, "bne", (char *)0, (char *)0, (char *)0, "beq", 
00153   };
00154   static char *MATCH_name_BO4_6[] = {
00155     (char *)0, (char *)0, "bns", (char *)0, (char *)0, (char *)0, "bso", 
00156   };
00157   static char *MATCH_name_LK_8[] = {"crnor", "bl", };
00158   static char *MATCH_name_BO4_10[] = {
00159     (char *)0, (char *)0, "bgelr", (char *)0, (char *)0, (char *)0, "bltlr", 
00160   };
00161   static char *MATCH_name_BO4_11[] = {
00162     (char *)0, (char *)0, "blelr", (char *)0, (char *)0, (char *)0, "bgtlr", 
00163   };
00164   static char *MATCH_name_BO4_12[] = {
00165     (char *)0, (char *)0, "bnelr", (char *)0, (char *)0, (char *)0, "beqlr", 
00166   };
00167   static char *MATCH_name_BO4_13[] = {
00168     (char *)0, (char *)0, "bnslr", (char *)0, (char *)0, (char *)0, "bsolr", 
00169   };
00170   static char *MATCH_name_LK_14[] = {"crandc", "balctrl", };
00171   static char *MATCH_name_Rc_22[] = {"rlwimi", "rlwimiq", };
00172   static char *MATCH_name_Rc_23[] = {"rlwinm", "rlwinmq", };
00173   static char *MATCH_name_Xo1_26[] = {
00174     "fcmpu", (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00175     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "frsp", 
00176     (char *)0, "fctiw", "fctiwz", (char *)0, (char *)0, (char *)0, (char *)0, 
00177     "lwarx", "ldx", (char *)0, "lwzx", "slw", (char *)0, "cntlzw", "sld", 
00178     "and", (char *)0, (char *)0, (char *)0, "fcmpo", (char *)0, (char *)0, 
00179     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "fneg", (char *)0, 
00180     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00181     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "ldux", (char *)0, 
00182     "lwzux", (char *)0, (char *)0, "cntlzd", (char *)0, "andc", (char *)0, 
00183     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00184     (char *)0, (char *)0, (char *)0, (char *)0, "fmr", (char *)0, (char *)0, 
00185     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00186     (char *)0, (char *)0, (char *)0, "ldarx", (char *)0, (char *)0, "lbzx", 
00187     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00188     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00189     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00190     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00191     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00192     (char *)0, "lbzux", (char *)0, (char *)0, (char *)0, (char *)0, "nor", 
00193     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00194     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "fnabs", 
00195     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00196     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "stdx", 
00197     "stwcxq", "stwx", (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00198     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00199     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00200     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00201     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00202     "stdux", (char *)0, "stwux", (char *)0, (char *)0, (char *)0, (char *)0, 
00203     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00204     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00205     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00206     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00207     (char *)0, (char *)0, "stdcxq", "stbx", (char *)0, (char *)0, (char *)0, 
00208     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00209     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00210     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00211     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00212     (char *)0, (char *)0, (char *)0, (char *)0, "stbux", (char *)0, 
00213     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00214     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00215     (char *)0, (char *)0, (char *)0, "fabs", (char *)0, (char *)0, (char *)0, 
00216     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00217     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "lhzx", (char *)0, 
00218     (char *)0, (char *)0, (char *)0, "eqv", (char *)0, (char *)0, (char *)0, 
00219     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00220     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00221     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00222     (char *)0, (char *)0, (char *)0, (char *)0, "eciwx", "lhzux", (char *)0, 
00223     (char *)0, (char *)0, (char *)0, "xor", (char *)0, (char *)0, (char *)0, 
00224     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00225     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00226     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00227     (char *)0, "mfspr", (char *)0, "lwax", (char *)0, "lhax", (char *)0, 
00228     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00229     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00230     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00231     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00232     (char *)0, (char *)0, (char *)0, (char *)0, "lwaux", (char *)0, "lhaux", 
00233     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00234     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00235     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00236     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00237     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00238     (char *)0, "sthx", (char *)0, (char *)0, (char *)0, (char *)0, "orc", 
00239     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00240     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00241     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00242     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00243     (char *)0, "ecowx", "sthux", (char *)0, (char *)0, (char *)0, (char *)0, 
00244     "or", (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00245     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00246     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00247     (char *)0, (char *)0, (char *)0, (char *)0, "mtspr", (char *)0, 
00248     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00249     (char *)0, "nand", (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00250     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
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, (char *)0, 
00258     (char *)0, (char *)0, (char *)0, "lswx", "lwbrx", "lfsx", "srw", 
00259     (char *)0, (char *)0, "srd", (char *)0, (char *)0, (char *)0, (char *)0, 
00260     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00261     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00262     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00263     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "lfsux", 
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, (char *)0, (char *)0, 
00268     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00269     (char *)0, "lfdx", (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, (char *)0, (char *)0, 
00272     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00273     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00274     (char *)0, (char *)0, "lfdux", (char *)0, (char *)0, (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, "stswx", "stwbrx", "stfsx", (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, "stfsux", 
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, "stfdx", (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, (char *)0, 
00293     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00294     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00295     (char *)0, (char *)0, (char *)0, "stfdux", (char *)0, (char *)0, 
00296     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00297     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00298     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00299     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00300     (char *)0, (char *)0, (char *)0, (char *)0, "lhbrx", (char *)0, "sraw", 
00301     (char *)0, "srad", (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00302     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00303     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00304     (char *)0, (char *)0, "fctid", "fctidz", (char *)0, (char *)0, (char *)0, 
00305     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "srawi", 
00306     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00307     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00308     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00309     (char *)0, (char *)0, (char *)0, "fcfid", (char *)0, (char *)0, 
00310     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00311     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00312     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00313     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00314     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00315     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00316     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00317     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00318     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00319     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00320     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00321     (char *)0, (char *)0, (char *)0, "sthbrx", (char *)0, (char *)0, 
00322     (char *)0, "extsh", (char *)0, (char *)0, (char *)0, (char *)0, 
00323     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00324     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00325     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00326     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00327     (char *)0, (char *)0, (char *)0, "extsb", (char *)0, (char *)0, 
00328     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00329     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00330     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00331     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00332     (char *)0, (char *)0, "stfiwx", (char *)0, (char *)0, "extsw", 
00333   };
00334   static char *MATCH_name_Xo9_29[] = {
00335     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00336     (char *)0, (char *)0, "subfc", (char *)0, "addc", (char *)0, (char *)0, 
00337     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00338     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00339     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00340     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00341     (char *)0, (char *)0, (char *)0, "subf", (char *)0, (char *)0, (char *)0, 
00342     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00343     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00344     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00345     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00346     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00347     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00348     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00349     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00350     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00351     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "neg", 
00352     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00353     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00354     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00355     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00356     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00357     (char *)0, "subfe", (char *)0, "adde", (char *)0, (char *)0, (char *)0, 
00358     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00359     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00360     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00361     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00362     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00363     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00364     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00365     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00366     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00367     (char *)0, (char *)0, (char *)0, (char *)0, "subfze", (char *)0, "addze", 
00368     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00369     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00370     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00371     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00372     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "subfme", "mulld", 
00373     "addme", "mullw", (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00374     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00375     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00376     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00377     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00378     (char *)0, "add", (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00379     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00380     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00381     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00382     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00383     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00384     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00385     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00386     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00387     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00388     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00389     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00390     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00391     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00392     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00393     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00394     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00395     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00396     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00397     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00398     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00399     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00400     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00401     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00402     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00403     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00404     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00405     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00406     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00407     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00408     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00409     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "divdu", 
00410     (char *)0, "divwu", (char *)0, (char *)0, (char *)0, (char *)0, 
00411     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00412     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00413     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00414     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00415     (char *)0, "divd", (char *)0, "divw", 
00416   };
00417   static char *MATCH_name_Xo1_30[] = {
00418     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00419     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00420     "frspq", (char *)0, "fctiwq", "fctiwzq", (char *)0, (char *)0, (char *)0, 
00421     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "slwq", (char *)0, 
00422     (char *)0, "sldq", "andq", (char *)0, (char *)0, (char *)0, (char *)0, 
00423     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00424     (char *)0, "fnegq", (char *)0, (char *)0, (char *)0, (char *)0, 
00425     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00426     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00427     (char *)0, (char *)0, (char *)0, "andcq", (char *)0, (char *)0, 
00428     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00429     (char *)0, (char *)0, (char *)0, "fmrq", (char *)0, (char *)0, (char *)0, 
00430     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00431     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00432     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00433     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00434     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00435     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00436     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00437     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "norq", 
00438     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00439     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "fnabsq", 
00440     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00441     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00442     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00443     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00444     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00445     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00446     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00447     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00448     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00449     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00450     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00451     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00452     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00453     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00454     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00455     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00456     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00457     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00458     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00459     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00460     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00461     (char *)0, "fabsq", (char *)0, (char *)0, (char *)0, (char *)0, 
00462     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00463     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00464     (char *)0, (char *)0, (char *)0, "eqvq", (char *)0, (char *)0, (char *)0, 
00465     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00466     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00467     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00468     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00469     (char *)0, (char *)0, (char *)0, (char *)0, "xorq", (char *)0, (char *)0, 
00470     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00471     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00472     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00473     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00474     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00475     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00476     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00477     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00478     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00479     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00480     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00481     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00482     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00483     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00484     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00485     (char *)0, (char *)0, (char *)0, "orcq", (char *)0, (char *)0, (char *)0, 
00486     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00487     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00488     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00489     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00490     (char *)0, (char *)0, (char *)0, (char *)0, "orq", (char *)0, (char *)0, 
00491     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00492     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00493     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00494     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00495     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "nandq", 
00496     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00497     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00498     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00499     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00500     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00501     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00502     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00503     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00504     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00505     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "srwq", (char *)0, 
00506     (char *)0, "srdq", (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00507     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00508     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00509     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00510     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00511     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00512     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00513     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00514     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00515     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00516     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00517     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00518     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00519     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00520     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00521     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00522     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00523     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00524     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00525     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00526     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00527     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00528     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00529     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00530     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00531     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00532     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00533     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00534     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00535     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00536     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00537     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00538     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00539     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00540     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00541     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00542     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00543     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00544     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00545     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00546     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00547     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00548     (char *)0, "srawq", (char *)0, "sradq", (char *)0, (char *)0, (char *)0, 
00549     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00550     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00551     (char *)0, (char *)0, (char *)0, (char *)0, "fctidq", "fctidzq", 
00552     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00553     (char *)0, (char *)0, "srawiq", (char *)0, (char *)0, (char *)0, 
00554     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00555     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00556     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00557     "fcfidq", 
00558   };
00559   static char *MATCH_name_Rc_36[] = {"fdivs", "fdivsq", };
00560   static char *MATCH_name_Rc_37[] = {"fsubs", "fsubsq", };
00561   static char *MATCH_name_Rc_38[] = {"fadds", "faddsq", };
00562   static char *MATCH_name_Xo5_40[] = {
00563     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00564     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, 
00565     (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "fdiv", 
00566     (char *)0, "fsub", "fadd", 
00567   };
00568   unsigned MATCH_w_32_0;
00569   { 
00570     MATCH_w_32_0 = getDword(MATCH_p); 
00571     
00572       switch((MATCH_w_32_0 >> 26 & 0x3f) /* OPCD at 0 */) {
00573         case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 9: 
00574         case 17: case 22: case 23: case 30: case 56: case 57: case 58: 
00575         case 60: case 61: case 62: 
00576           goto MATCH_label_a0; break;
00577         case 7: case 8: case 12: case 13: case 14: case 15: 
00578           MATCH_name = 
00579             MATCH_name_OPCD_0[(MATCH_w_32_0 >> 26 & 0x3f) /* OPCD at 0 */]; 
00580           { 
00581             char *name = MATCH_name;
00582             unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
00583             unsigned rd = (MATCH_w_32_0 >> 21 & 0x1f) /* D at 0 */;
00584             int /* [~32768..32767] */ simm = 
00585               sign_extend((MATCH_w_32_0 & 0xffff) /* SIMM at 0 */, 16);
00586             nextPC = 4 + MATCH_p; 
00587             
00588 #line 139 "frontend/machine/ppc/decoder.m"
00589             
00590 
00591                     if (strcmp(name, "addi") == 0 || strcmp(name, "addis") == 0) {
00592 
00593                         // Note the DIS_RAZ, since rA could be constant zero
00594 
00595                         stmts = instantiate(pc, name, DIS_RD, DIS_RAZ, DIS_SIMM);
00596 
00597                     } else
00598 
00599                         stmts = instantiate(pc, name, DIS_RD, DIS_RA , DIS_SIMM);
00600 
00601             
00602             
00603             
00604           }
00605           
00606           break;
00607         case 10: 
00608           if ((MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 0) { 
00609             MATCH_name = "cmpli"; 
00610             { 
00611               char *name = MATCH_name;
00612               unsigned crfd = (MATCH_w_32_0 >> 23 & 0x7) /* crfD at 0 */;
00613               unsigned l = (MATCH_w_32_0 >> 21 & 0x1) /* L at 0 */;
00614               unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
00615               unsigned uimm = (MATCH_w_32_0 & 0xffff) /* UIMM at 0 */;
00616               nextPC = 4 + MATCH_p; 
00617               
00618 #line 239 "frontend/machine/ppc/decoder.m"
00619               
00620 
00621                     stmts = instantiate(pc, name, DIS_CRFD, DIS_NZRA, DIS_UIMM);
00622 
00623                     unused(l);
00624 
00625               
00626 
00627               
00628               
00629               
00630             }
00631             
00632           } /*opt-block*/
00633           else 
00634             goto MATCH_label_a0;  /*opt-block+*/
00635           
00636           break;
00637         case 11: 
00638           if ((MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 0) { 
00639             MATCH_name = "cmpi"; 
00640             { 
00641               char *name = MATCH_name;
00642               unsigned crfd = (MATCH_w_32_0 >> 23 & 0x7) /* crfD at 0 */;
00643               unsigned l = (MATCH_w_32_0 >> 21 & 0x1) /* L at 0 */;
00644               unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
00645               int /* [~32768..32767] */ simm = 
00646                 sign_extend((MATCH_w_32_0 & 0xffff) /* SIMM at 0 */, 16);
00647               nextPC = 4 + MATCH_p; 
00648               
00649 #line 236 "frontend/machine/ppc/decoder.m"
00650               
00651 
00652                     stmts = instantiate(pc, name, DIS_CRFD, DIS_NZRA, DIS_SIMM);
00653 
00654                     unused(l);
00655 
00656               
00657               
00658               
00659             }
00660             
00661           } /*opt-block*/
00662           else 
00663             goto MATCH_label_a0;  /*opt-block+*/
00664           
00665           break;
00666         case 16: 
00667           if ((MATCH_w_32_0 >> 1 & 0x1) /* AA at 0 */ == 1) 
00668             goto MATCH_label_a0;  /*opt-block+*/
00669           else 
00670             if ((MATCH_w_32_0 & 0x1) /* LK at 0 */ == 1) 
00671               if ((MATCH_w_32_0 >> 21 & 0x1f) /* BO at 0 */ == 20) { 
00672                 MATCH_name = "ball"; 
00673                 { 
00674                   char *name = MATCH_name;
00675                   unsigned BIcr = (MATCH_w_32_0 >> 18 & 0x7) /* BIcr at 0 */;
00676                   unsigned reladdr = 
00677                     4 * (MATCH_w_32_0 >> 2 & 0x3fff) /* BD at 0 */ + 
00678                     addressToPC(MATCH_p);
00679                   nextPC = 4 + MATCH_p; 
00680                   
00681 #line 210 "frontend/machine/ppc/decoder.m"
00682                         // Always "conditional" branch with link, test/OSX/hello has this
00683 
00684                         if (reladdr - delta - pc == 4) {    // Branch to next instr?
00685 
00686                             // Effectively %LR = %pc+4, but give the actual value for %pc
00687 
00688                             Assign* as = new Assign(
00689 
00690                                 new IntegerType,
00691 
00692                                 new Unary(opMachFtr, new Const("%LR")),
00693 
00694                                 new Const(pc+4));
00695 
00696                             stmts = new std::list<Statement*>;
00697 
00698                             stmts->push_back(as);
00699 
00700                             SHOW_ASM(name<<" "<<BIcr<<", .+4"<<" %LR = %pc+4")
00701 
00702                         } else {
00703 
00704                             Exp* dest = DIS_RELADDR;
00705 
00706                             stmts = instantiate(pc, name, dest);
00707 
00708                             CallStatement* newCall = new CallStatement;
00709 
00710                             // Record the fact that this is not a computed call
00711 
00712                             newCall->setIsComputed(false);
00713 
00714                             // Set the destination expression
00715 
00716                             newCall->setDest(dest);
00717 
00718                             result.rtl = new RTL(pc, stmts);
00719 
00720                             result.rtl->appendStmt(newCall);
00721 
00722                         }
00723 
00724                         unused(BIcr);
00725 
00726                   
00727 
00728                   
00729                   
00730                   
00731                 }
00732                 
00733               } /*opt-block*/
00734               else 
00735                 goto MATCH_label_a0;  /*opt-block+*/ /*opt-block+*/
00736             else 
00737               
00738                 switch((MATCH_w_32_0 >> 16 & 0x3) /* BIcc at 0 */) {
00739                   case 0: 
00740                     
00741                       switch((MATCH_w_32_0 >> 22 & 0xf) /* BO4 at 0 */) {
00742                         case 0: case 1: case 3: case 4: case 5: case 7: 
00743                         case 8: case 9: case 10: case 11: case 12: case 13: 
00744                         case 14: case 15: 
00745                           if ((MATCH_w_32_0 >> 21 & 0x1f) 
00746                                   /* BO at 0 */ == 20) 
00747                             goto MATCH_label_a1;  /*opt-block+*/
00748                           else 
00749                             goto MATCH_label_a0;  /*opt-block+*/
00750                           
00751                           break;
00752                         case 2: 
00753                           MATCH_name = 
00754                             MATCH_name_BO4_3[(MATCH_w_32_0 >> 22 & 0xf) 
00755                                 /* BO4 at 0 */]; 
00756                           { 
00757                             char *name = MATCH_name;
00758                             unsigned BIcr = 
00759                               (MATCH_w_32_0 >> 18 & 0x7) /* BIcr at 0 */;
00760                             unsigned reladdr = 
00761                               4 * (MATCH_w_32_0 >> 2 & 0x3fff) 
00762                                     /* BD at 0 */ + addressToPC(MATCH_p);
00763                             nextPC = 4 + MATCH_p; 
00764                             
00765 #line 275 "frontend/machine/ppc/decoder.m"
00766                             
00767 
00768                                     PPC_COND_JUMP(name, 4, reladdr, BRANCH_JSGE, BIcr);
00769 
00770                             
00771                             
00772                             
00773                           }
00774                           
00775                           break;
00776                         case 6: 
00777                           MATCH_name = 
00778                             MATCH_name_BO4_3[(MATCH_w_32_0 >> 22 & 0xf) 
00779                                 /* BO4 at 0 */]; 
00780                           { 
00781                             char *name = MATCH_name;
00782                             unsigned BIcr = 
00783                               (MATCH_w_32_0 >> 18 & 0x7) /* BIcr at 0 */;
00784                             unsigned reladdr = 
00785                               4 * (MATCH_w_32_0 >> 2 & 0x3fff) 
00786                                     /* BD at 0 */ + addressToPC(MATCH_p);
00787                             nextPC = 4 + MATCH_p; 
00788                             
00789 #line 269 "frontend/machine/ppc/decoder.m"
00790                             
00791 
00792                                     PPC_COND_JUMP(name, 4, reladdr, BRANCH_JSL, BIcr);
00793 
00794                             
00795                             
00796                             
00797                           }
00798                           
00799                           break;
00800                         default: assert(0);
00801                       } /* (MATCH_w_32_0 >> 22 & 0xf) -- BO4 at 0 --*/ 
00802                     break;
00803                   case 1: 
00804                     
00805                       switch((MATCH_w_32_0 >> 22 & 0xf) /* BO4 at 0 */) {
00806                         case 0: case 1: case 3: case 4: case 5: case 7: 
00807                         case 8: case 9: case 10: case 11: case 12: case 13: 
00808                         case 14: case 15: 
00809                           if ((MATCH_w_32_0 >> 21 & 0x1f) 
00810                                   /* BO at 0 */ == 20) 
00811                             goto MATCH_label_a1;  /*opt-block+*/
00812                           else 
00813                             goto MATCH_label_a0;  /*opt-block+*/
00814                           
00815                           break;
00816                         case 2: 
00817                           MATCH_name = 
00818                             MATCH_name_BO4_4[(MATCH_w_32_0 >> 22 & 0xf) 
00819                                 /* BO4 at 0 */]; 
00820                           { 
00821                             char *name = MATCH_name;
00822                             unsigned BIcr = 
00823                               (MATCH_w_32_0 >> 18 & 0x7) /* BIcr at 0 */;
00824                             unsigned reladdr = 
00825                               4 * (MATCH_w_32_0 >> 2 & 0x3fff) 
00826                                     /* BD at 0 */ + addressToPC(MATCH_p);
00827                             nextPC = 4 + MATCH_p; 
00828                             
00829 #line 271 "frontend/machine/ppc/decoder.m"
00830                             
00831 
00832                                     PPC_COND_JUMP(name, 4, reladdr, BRANCH_JSLE, BIcr);
00833 
00834                             
00835                             
00836                             
00837                           }
00838                           
00839                           break;
00840                         case 6: 
00841                           MATCH_name = 
00842                             MATCH_name_BO4_4[(MATCH_w_32_0 >> 22 & 0xf) 
00843                                 /* BO4 at 0 */]; 
00844                           { 
00845                             char *name = MATCH_name;
00846                             unsigned BIcr = 
00847                               (MATCH_w_32_0 >> 18 & 0x7) /* BIcr at 0 */;
00848                             unsigned reladdr = 
00849                               4 * (MATCH_w_32_0 >> 2 & 0x3fff) 
00850                                     /* BD at 0 */ + addressToPC(MATCH_p);
00851                             nextPC = 4 + MATCH_p; 
00852                             
00853 #line 278 "frontend/machine/ppc/decoder.m"
00854                             
00855 
00856                                     PPC_COND_JUMP(name, 4, reladdr, BRANCH_JSG, BIcr);
00857 
00858                             //  | bnl(BIcr, reladdr) [name] =>                              // bnl same as bge
00859 
00860                             //      PPC_COND_JUMP(name, 4, reladdr, BRANCH_JSGE, BIcr);
00861 
00862                             
00863                             
00864                             
00865                           }
00866                           
00867                           break;
00868                         default: assert(0);
00869                       } /* (MATCH_w_32_0 >> 22 & 0xf) -- BO4 at 0 --*/ 
00870                     break;
00871                   case 2: 
00872                     
00873                       switch((MATCH_w_32_0 >> 22 & 0xf) /* BO4 at 0 */) {
00874                         case 0: case 1: case 3: case 4: case 5: case 7: 
00875                         case 8: case 9: case 10: case 11: case 12: case 13: 
00876                         case 14: case 15: 
00877                           if ((MATCH_w_32_0 >> 21 & 0x1f) 
00878                                   /* BO at 0 */ == 20) 
00879                             goto MATCH_label_a1;  /*opt-block+*/
00880                           else 
00881                             goto MATCH_label_a0;  /*opt-block+*/
00882                           
00883                           break;
00884                         case 2: 
00885                           MATCH_name = 
00886                             MATCH_name_BO4_5[(MATCH_w_32_0 >> 22 & 0xf) 
00887                                 /* BO4 at 0 */]; 
00888                           { 
00889                             char *name = MATCH_name;
00890                             unsigned BIcr = 
00891                               (MATCH_w_32_0 >> 18 & 0x7) /* BIcr at 0 */;
00892                             unsigned reladdr = 
00893                               4 * (MATCH_w_32_0 >> 2 & 0x3fff) 
00894                                     /* BD at 0 */ + addressToPC(MATCH_p);
00895                             nextPC = 4 + MATCH_p; 
00896                             
00897 #line 282 "frontend/machine/ppc/decoder.m"
00898                             
00899 
00900                                     PPC_COND_JUMP(name, 4, reladdr, BRANCH_JNE, BIcr);
00901 
00902                             //  | bng(BIcr, reladdr) [name] =>                              // bng same as blt
00903 
00904                             //      PPC_COND_JUMP(name, 4, reladdr, BRANCH_JSLE, BIcr);
00905 
00906                             
00907                             
00908                             
00909                           }
00910                           
00911                           break;
00912                         case 6: 
00913                           MATCH_name = 
00914                             MATCH_name_BO4_5[(MATCH_w_32_0 >> 22 & 0xf) 
00915                                 /* BO4 at 0 */]; 
00916                           { 
00917                             char *name = MATCH_name;
00918                             unsigned BIcr = 
00919                               (MATCH_w_32_0 >> 18 & 0x7) /* BIcr at 0 */;
00920                             unsigned reladdr = 
00921                               4 * (MATCH_w_32_0 >> 2 & 0x3fff) 
00922                                     /* BD at 0 */ + addressToPC(MATCH_p);
00923                             nextPC = 4 + MATCH_p; 
00924                             
00925 #line 273 "frontend/machine/ppc/decoder.m"
00926                             
00927 
00928                                     PPC_COND_JUMP(name, 4, reladdr, BRANCH_JE, BIcr);
00929 
00930                             
00931                             
00932                             
00933                           }
00934                           
00935                           break;
00936                         default: assert(0);
00937                       } /* (MATCH_w_32_0 >> 22 & 0xf) -- BO4 at 0 --*/ 
00938                     break;
00939                   case 3: 
00940                     
00941                       switch((MATCH_w_32_0 >> 22 & 0xf) /* BO4 at 0 */) {
00942                         case 0: case 1: case 3: case 4: case 5: case 7: 
00943                         case 8: case 9: case 10: case 11: case 12: case 13: 
00944                         case 14: case 15: 
00945                           if ((MATCH_w_32_0 >> 21 & 0x1f) 
00946                                   /* BO at 0 */ == 20) 
00947                             goto MATCH_label_a1;  /*opt-block+*/
00948                           else 
00949                             goto MATCH_label_a0;  /*opt-block+*/
00950                           
00951                           break;
00952                         case 2: 
00953                           MATCH_name = 
00954                             MATCH_name_BO4_6[(MATCH_w_32_0 >> 22 & 0xf) 
00955                                 /* BO4 at 0 */]; 
00956                           { 
00957                             char *name = MATCH_name;
00958                             unsigned BIcr = 
00959                               (MATCH_w_32_0 >> 18 & 0x7) /* BIcr at 0 */;
00960                             unsigned reladdr = 
00961                               4 * (MATCH_w_32_0 >> 2 & 0x3fff) 
00962                                     /* BD at 0 */ + addressToPC(MATCH_p);
00963                             nextPC = 4 + MATCH_p; 
00964                             
00965 #line 288 "frontend/machine/ppc/decoder.m"
00966                             
00967 
00968                                     PPC_COND_JUMP(name, 4, reladdr, (BRANCH_TYPE)0, BIcr);
00969 
00970                             //  | bun(BIcr, reladdr) [name] =>
00971 
00972                             //      PPC_COND_JUMP(name, 4, reladdr, (BRANCH_TYPE)0, BIcr);
00973 
00974                             //  | bnu(BIcr, reladdr) [name] =>
00975 
00976                             //      PPC_COND_JUMP(name, 4, reladdr, (BRANCH_TYPE)0, BIcr);
00977 
00978                             
00979 
00980                             
00981                             
00982                             
00983                           }
00984                           
00985                           break;
00986                         case 6: 
00987                           MATCH_name = 
00988                             MATCH_name_BO4_6[(MATCH_w_32_0 >> 22 & 0xf) 
00989                                 /* BO4 at 0 */]; 
00990                           { 
00991                             char *name = MATCH_name;
00992                             unsigned BIcr = 
00993                               (MATCH_w_32_0 >> 18 & 0x7) /* BIcr at 0 */;
00994                             unsigned reladdr = 
00995                               4 * (MATCH_w_32_0 >> 2 & 0x3fff) 
00996                                     /* BD at 0 */ + addressToPC(MATCH_p);
00997                             nextPC = 4 + MATCH_p; 
00998                             
00999 #line 285 "frontend/machine/ppc/decoder.m"
01000                                                             // Branch on summary overflow
01001 
01002                                     PPC_COND_JUMP(name, 4, reladdr, (BRANCH_TYPE)0, BIcr);  // MVE: Don't know these last 4 yet
01003 
01004                             
01005                             
01006                             
01007                           }
01008                           
01009                           break;
01010                         default: assert(0);
01011                       } /* (MATCH_w_32_0 >> 22 & 0xf) -- BO4 at 0 --*/ 
01012                     break;
01013                   default: assert(0);
01014                 } /* (MATCH_w_32_0 >> 16 & 0x3) -- BIcc at 0 --*/   
01015           break;
01016         case 18: 
01017           if ((MATCH_w_32_0 >> 1 & 0x1) /* AA at 0 */ == 1) 
01018             goto MATCH_label_a0;  /*opt-block+*/
01019           else 
01020             if ((MATCH_w_32_0 & 0x1) /* LK at 0 */ == 1) { 
01021               MATCH_name = 
01022                 MATCH_name_LK_8[(MATCH_w_32_0 & 0x1) /* LK at 0 */]; 
01023               { 
01024                 char *name = MATCH_name;
01025                 unsigned reladdr = 
01026                   4 * sign_extend(
01027                               (MATCH_w_32_0 >> 2 & 0xffffff) /* LI at 0 */, 
01028                               24) + addressToPC(MATCH_p);
01029                 nextPC = 4 + MATCH_p; 
01030                 
01031 #line 193 "frontend/machine/ppc/decoder.m"
01032                 
01033 
01034                         Exp* dest = DIS_RELADDR;
01035 
01036                         stmts = instantiate(pc, name, dest);
01037 
01038                         CallStatement* newCall = new CallStatement;
01039 
01040                         // Record the fact that this is not a computed call
01041 
01042                         newCall->setIsComputed(false);
01043 
01044                         // Set the destination expression
01045 
01046                         newCall->setDest(dest);
01047 
01048                         result.rtl = new RTL(pc, stmts);
01049 
01050                         result.rtl->appendStmt(newCall);
01051 
01052                         Proc* destProc = prog->setNewProc(reladdr-delta);
01053 
01054                         if (destProc == (Proc*)-1) destProc = NULL;
01055 
01056                         newCall->setDestProc(destProc);
01057 
01058                 
01059 
01060                 
01061                 
01062                 
01063               }
01064               
01065             } /*opt-block*/
01066             else { 
01067               unsigned reladdr = 
01068                 4 * sign_extend((MATCH_w_32_0 >> 2 & 0xffffff) /* LI at 0 */, 
01069                             24) + addressToPC(MATCH_p);
01070               nextPC = 4 + MATCH_p; 
01071               
01072 #line 207 "frontend/machine/ppc/decoder.m"
01073               
01074 
01075                     unconditionalJump("b", 4, reladdr, delta, pc, stmts, result);
01076 
01077               
01078 
01079               
01080               
01081               
01082             } /*opt-block*//*opt-block+*/ /*opt-block+*/
01083           break;
01084         case 19: 
01085           if (34 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01086             (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 129 || 
01087             130 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01088             (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 193 || 
01089             290 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01090             (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 417 || 
01091             450 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01092             (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 528 || 
01093             529 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01094             (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 1024) 
01095             goto MATCH_label_a0;  /*opt-block+*/
01096           else 
01097             switch((MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */) {
01098               case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: 
01099               case 8: case 9: case 10: case 11: case 12: case 13: case 14: 
01100               case 15: case 17: case 18: case 19: case 20: case 21: case 22: 
01101               case 23: case 24: case 25: case 26: case 27: case 28: case 29: 
01102               case 30: case 31: case 32: case 194: case 195: case 196: 
01103               case 197: case 198: case 199: case 200: case 201: case 202: 
01104               case 203: case 204: case 205: case 206: case 207: case 208: 
01105               case 209: case 210: case 211: case 212: case 213: case 214: 
01106               case 215: case 216: case 217: case 218: case 219: case 220: 
01107               case 221: case 222: case 223: case 224: case 226: case 227: 
01108               case 228: case 229: case 230: case 231: case 232: case 233: 
01109               case 234: case 235: case 236: case 237: case 238: case 239: 
01110               case 240: case 241: case 242: case 243: case 244: case 245: 
01111               case 246: case 247: case 248: case 249: case 250: case 251: 
01112               case 252: case 253: case 254: case 255: case 256: case 258: 
01113               case 259: case 260: case 261: case 262: case 263: case 264: 
01114               case 265: case 266: case 267: case 268: case 269: case 270: 
01115               case 271: case 272: case 273: case 274: case 275: case 276: 
01116               case 277: case 278: case 279: case 280: case 281: case 282: 
01117               case 283: case 284: case 285: case 286: case 287: case 288: 
01118               case 418: case 419: case 420: case 421: case 422: case 423: 
01119               case 424: case 425: case 426: case 427: case 428: case 429: 
01120               case 430: case 431: case 432: case 433: case 434: case 435: 
01121               case 436: case 437: case 438: case 439: case 440: case 441: 
01122               case 442: case 443: case 444: case 445: case 446: case 447: 
01123               case 448: 
01124                 goto MATCH_label_a0; break;
01125               case 16: 
01126                 if ((MATCH_w_32_0 & 0x1) /* LK at 0 */ == 1) 
01127                   goto MATCH_label_a0;  /*opt-block+*/
01128                 else 
01129                   if ((MATCH_w_32_0 >> 11 & 0x1f) /* crbB at 0 */ == 0) 
01130                     
01131                       switch((MATCH_w_32_0 >> 16 & 0x3) /* BIcc at 0 */) {
01132                         case 0: 
01133                           
01134                             switch((MATCH_w_32_0 >> 22 & 0xf) 
01135                                   /* BO4 at 0 */) {
01136                               case 0: case 1: case 3: case 4: case 5: case 7: 
01137                               case 8: case 9: case 10: case 11: case 12: 
01138                               case 13: case 14: case 15: 
01139                                 if ((MATCH_w_32_0 >> 21 & 0x1f) 
01140                                         /* BO at 0 */ == 20) { 
01141                                   MATCH_name = "ballr"; 
01142                                   goto MATCH_label_a2; 
01143                                   
01144                                 } /*opt-block*/
01145                                 else 
01146                                   goto MATCH_label_a0;  /*opt-block+*/
01147                                 
01148                                 break;
01149                               case 2: 
01150                                 MATCH_name = 
01151                                   MATCH_name_BO4_10[(MATCH_w_32_0 >> 22 & 0xf) 
01152                                       /* BO4 at 0 */]; 
01153                                 { 
01154                                   char *name = MATCH_name;
01155                                   unsigned BIcr = 
01156                                     (MATCH_w_32_0 >> 18 & 0x7) 
01157                                           /* BIcr at 0 */;
01158                                   nextPC = 4 + MATCH_p; 
01159                                   
01160 #line 321 "frontend/machine/ppc/decoder.m"
01161                                   
01162 
01163                                         PPC_COND_JUMP(name, 4, hostPC+4, BRANCH_JSL, BIcr);
01164 
01165                                         result.rtl->appendStmt(new ReturnStatement);
01166 
01167                                   
01168 
01169                                   
01170                                   
01171                                   
01172                                 }
01173                                 
01174                                 break;
01175                               case 6: 
01176                                 MATCH_name = 
01177                                   MATCH_name_BO4_10[(MATCH_w_32_0 >> 22 & 0xf) 
01178                                       /* BO4 at 0 */]; 
01179                                 { 
01180                                   char *name = MATCH_name;
01181                                   unsigned BIcr = 
01182                                     (MATCH_w_32_0 >> 18 & 0x7) 
01183                                           /* BIcr at 0 */;
01184                                   nextPC = 4 + MATCH_p; 
01185                                   
01186 #line 309 "frontend/machine/ppc/decoder.m"
01187                                   
01188 
01189                                         PPC_COND_JUMP(name, 4, hostPC+4, BRANCH_JSGE, BIcr);
01190 
01191                                         result.rtl->appendStmt(new ReturnStatement);
01192 
01193                                   
01194 
01195                                   
01196                                   
01197                                   
01198                                 }
01199                                 
01200                                 break;
01201                               default: assert(0);
01202                             } /* (MATCH_w_32_0 >> 22 & 0xf) -- BO4 at 0 --*/ 
01203                           break;
01204                         case 1: 
01205                           
01206                             switch((MATCH_w_32_0 >> 22 & 0xf) 
01207                                   /* BO4 at 0 */) {
01208                               case 0: case 1: case 3: case 4: case 5: case 7: 
01209                               case 8: case 9: case 10: case 11: case 12: 
01210                               case 13: case 14: case 15: 
01211                                 if ((MATCH_w_32_0 >> 21 & 0x1f) 
01212                                         /* BO at 0 */ == 20) { 
01213                                   MATCH_name = "ballr"; 
01214                                   goto MATCH_label_a2; 
01215                                   
01216                                 } /*opt-block*/
01217                                 else 
01218                                   goto MATCH_label_a0;  /*opt-block+*/
01219                                 
01220                                 break;
01221                               case 2: 
01222                                 MATCH_name = 
01223                                   MATCH_name_BO4_11[(MATCH_w_32_0 >> 22 & 0xf) 
01224                                       /* BO4 at 0 */]; 
01225                                 { 
01226                                   char *name = MATCH_name;
01227                                   unsigned BIcr = 
01228                                     (MATCH_w_32_0 >> 18 & 0x7) 
01229                                           /* BIcr at 0 */;
01230                                   nextPC = 4 + MATCH_p; 
01231                                   
01232 #line 313 "frontend/machine/ppc/decoder.m"
01233                                   
01234 
01235                                         PPC_COND_JUMP(name, 4, hostPC+4, BRANCH_JSG, BIcr);
01236 
01237                                         result.rtl->appendStmt(new ReturnStatement);
01238 
01239                                   
01240 
01241                                   
01242                                   
01243                                   
01244                                 }
01245                                 
01246                                 break;
01247                               case 6: 
01248                                 MATCH_name = 
01249                                   MATCH_name_BO4_11[(MATCH_w_32_0 >> 22 & 0xf) 
01250                                       /* BO4 at 0 */]; 
01251                                 { 
01252                                   char *name = MATCH_name;
01253                                   unsigned BIcr = 
01254                                     (MATCH_w_32_0 >> 18 & 0x7) 
01255                                           /* BIcr at 0 */;
01256                                   nextPC = 4 + MATCH_p; 
01257                                   
01258 #line 325 "frontend/machine/ppc/decoder.m"
01259                                   
01260 
01261                                         PPC_COND_JUMP(name, 4, hostPC+4, BRANCH_JSLE, BIcr);
01262 
01263                                         result.rtl->appendStmt(new ReturnStatement);
01264 
01265                                   
01266 
01267                                   
01268                                   
01269                                   
01270                                 }
01271                                 
01272                                 break;
01273                               default: assert(0);
01274                             } /* (MATCH_w_32_0 >> 22 & 0xf) -- BO4 at 0 --*/ 
01275                           break;
01276                         case 2: 
01277                           
01278                             switch((MATCH_w_32_0 >> 22 & 0xf) 
01279                                   /* BO4 at 0 */) {
01280                               case 0: case 1: case 3: case 4: case 5: case 7: 
01281                               case 8: case 9: case 10: case 11: case 12: 
01282                               case 13: case 14: case 15: 
01283                                 if ((MATCH_w_32_0 >> 21 & 0x1f) 
01284                                         /* BO at 0 */ == 20) { 
01285                                   MATCH_name = "ballr"; 
01286                                   goto MATCH_label_a2; 
01287                                   
01288                                 } /*opt-block*/
01289                                 else 
01290                                   goto MATCH_label_a0;  /*opt-block+*/
01291                                 
01292                                 break;
01293                               case 2: 
01294                                 MATCH_name = 
01295                                   MATCH_name_BO4_12[(MATCH_w_32_0 >> 22 & 0xf) 
01296                                       /* BO4 at 0 */]; 
01297                                 { 
01298                                   char *name = MATCH_name;
01299                                   unsigned BIcr = 
01300                                     (MATCH_w_32_0 >> 18 & 0x7) 
01301                                           /* BIcr at 0 */;
01302                                   nextPC = 4 + MATCH_p; 
01303                                   
01304 #line 329 "frontend/machine/ppc/decoder.m"
01305                                   
01306 
01307                                         PPC_COND_JUMP(name, 4, hostPC+4, BRANCH_JE, BIcr);
01308 
01309                                         result.rtl->appendStmt(new ReturnStatement);
01310 
01311                                   
01312 
01313                                   
01314                                   
01315                                   
01316                                 }
01317                                 
01318                                 break;
01319                               case 6: 
01320                                 MATCH_name = 
01321                                   MATCH_name_BO4_12[(MATCH_w_32_0 >> 22 & 0xf) 
01322                                       /* BO4 at 0 */]; 
01323                                 { 
01324                                   char *name = MATCH_name;
01325                                   unsigned BIcr = 
01326                                     (MATCH_w_32_0 >> 18 & 0x7) 
01327                                           /* BIcr at 0 */;
01328                                   nextPC = 4 + MATCH_p; 
01329                                   
01330 #line 317 "frontend/machine/ppc/decoder.m"
01331                                   
01332 
01333                                         PPC_COND_JUMP(name, 4, hostPC+4, BRANCH_JNE, BIcr);
01334 
01335                                         result.rtl->appendStmt(new ReturnStatement);
01336 
01337                                   
01338 
01339                                   
01340                                   
01341                                   
01342                                 }
01343                                 
01344                                 break;
01345                               default: assert(0);
01346                             } /* (MATCH_w_32_0 >> 22 & 0xf) -- BO4 at 0 --*/ 
01347                           break;
01348                         case 3: 
01349                           
01350                             switch((MATCH_w_32_0 >> 22 & 0xf) 
01351                                   /* BO4 at 0 */) {
01352                               case 0: case 1: case 3: case 4: case 5: case 7: 
01353                               case 8: case 9: case 10: case 11: case 12: 
01354                               case 13: case 14: case 15: 
01355                                 if ((MATCH_w_32_0 >> 21 & 0x1f) 
01356                                         /* BO at 0 */ == 20) { 
01357                                   MATCH_name = "ballr"; 
01358                                   goto MATCH_label_a2; 
01359                                   
01360                                 } /*opt-block*/
01361                                 else 
01362                                   goto MATCH_label_a0;  /*opt-block+*/
01363                                 
01364                                 break;
01365                               case 2: 
01366                                 MATCH_name = 
01367                                   MATCH_name_BO4_13[(MATCH_w_32_0 >> 22 & 0xf) 
01368                                       /* BO4 at 0 */]; 
01369                                 { 
01370                                   char *name = MATCH_name;
01371                                   unsigned BIcr = 
01372                                     (MATCH_w_32_0 >> 18 & 0x7) 
01373                                           /* BIcr at 0 */;
01374                                   nextPC = 4 + MATCH_p; 
01375                                   
01376 #line 337 "frontend/machine/ppc/decoder.m"
01377                                   
01378 
01379                                         PPC_COND_JUMP(name, 4, hostPC+4, (BRANCH_TYPE)0, BIcr);
01380 
01381                                         result.rtl->appendStmt(new ReturnStatement);
01382 
01383                                   
01384 
01385                                   
01386                                   
01387                                   
01388                                 }
01389                                 
01390                                 break;
01391                               case 6: 
01392                                 MATCH_name = 
01393                                   MATCH_name_BO4_13[(MATCH_w_32_0 >> 22 & 0xf) 
01394                                       /* BO4 at 0 */]; 
01395                                 { 
01396                                   char *name = MATCH_name;
01397                                   unsigned BIcr = 
01398                                     (MATCH_w_32_0 >> 18 & 0x7) 
01399                                           /* BIcr at 0 */;
01400                                   nextPC = 4 + MATCH_p; 
01401                                   
01402 #line 333 "frontend/machine/ppc/decoder.m"
01403                                   
01404 
01405                                         PPC_COND_JUMP(name, 4, hostPC+4, (BRANCH_TYPE)0, BIcr);
01406 
01407                                         result.rtl->appendStmt(new ReturnStatement);
01408 
01409                                   
01410 
01411                                   
01412                                   
01413                                   
01414                                 }
01415                                 
01416                                 break;
01417                               default: assert(0);
01418                             } /* (MATCH_w_32_0 >> 22 & 0xf) -- BO4 at 0 --*/ 
01419                           break;
01420                         default: assert(0);
01421                       } /* (MATCH_w_32_0 >> 16 & 0x3) -- BIcc at 0 --*/  
01422                   else 
01423                     goto MATCH_label_a0;  /*opt-block+*/ 
01424                 break;
01425               case 33: 
01426                 if ((MATCH_w_32_0 & 0x1) /* LK at 0 */ == 0) { 
01427                   MATCH_name = 
01428                     MATCH_name_LK_8[(MATCH_w_32_0 & 0x1) /* LK at 0 */]; 
01429                   goto MATCH_label_a3; 
01430                   
01431                 } /*opt-block*/
01432                 else 
01433                   goto MATCH_label_a0;  /*opt-block+*/
01434                 
01435                 break;
01436               case 129: 
01437                 if ((MATCH_w_32_0 & 0x1) /* LK at 0 */ == 0) { 
01438                   MATCH_name = 
01439                     MATCH_name_LK_14[(MATCH_w_32_0 & 0x1) /* LK at 0 */]; 
01440                   goto MATCH_label_a3; 
01441                   
01442                 } /*opt-block*/
01443                 else 
01444                   goto MATCH_label_a0;  /*opt-block+*/
01445                 
01446                 break;
01447               case 193: 
01448                 if ((MATCH_w_32_0 & 0x1) /* LK at 0 */ == 0) { 
01449                   MATCH_name = "crxor"; 
01450                   goto MATCH_label_a3; 
01451                   
01452                 } /*opt-block*/
01453                 else 
01454                   goto MATCH_label_a0;  /*opt-block+*/
01455                 
01456                 break;
01457               case 225: 
01458                 if ((MATCH_w_32_0 & 0x1) /* LK at 0 */ == 0) { 
01459                   MATCH_name = "crnand"; 
01460                   goto MATCH_label_a3; 
01461                   
01462                 } /*opt-block*/
01463                 else 
01464                   goto MATCH_label_a0;  /*opt-block+*/
01465                 
01466                 break;
01467               case 257: 
01468                 if ((MATCH_w_32_0 & 0x1) /* LK at 0 */ == 0) { 
01469                   MATCH_name = "crand"; 
01470                   goto MATCH_label_a3; 
01471                   
01472                 } /*opt-block*/
01473                 else 
01474                   goto MATCH_label_a0;  /*opt-block+*/
01475                 
01476                 break;
01477               case 289: 
01478                 if ((MATCH_w_32_0 & 0x1) /* LK at 0 */ == 0) { 
01479                   MATCH_name = "creqv"; 
01480                   goto MATCH_label_a3; 
01481                   
01482                 } /*opt-block*/
01483                 else 
01484                   goto MATCH_label_a0;  /*opt-block+*/
01485                 
01486                 break;
01487               case 417: 
01488                 if ((MATCH_w_32_0 & 0x1) /* LK at 0 */ == 0) { 
01489                   MATCH_name = "crorc"; 
01490                   goto MATCH_label_a3; 
01491                   
01492                 } /*opt-block*/
01493                 else 
01494                   goto MATCH_label_a0;  /*opt-block+*/
01495                 
01496                 break;
01497               case 449: 
01498                 if ((MATCH_w_32_0 & 0x1) /* LK at 0 */ == 0) { 
01499                   MATCH_name = "cror"; 
01500                   goto MATCH_label_a3; 
01501                   
01502                 } /*opt-block*/
01503                 else 
01504                   goto MATCH_label_a0;  /*opt-block+*/
01505                 
01506                 break;
01507               case 528: 
01508                 if ((MATCH_w_32_0 >> 21 & 0x1f) /* BO at 0 */ == 20) 
01509                   if ((MATCH_w_32_0 >> 11 & 0x1f) /* crbB at 0 */ == 0) 
01510                     if ((MATCH_w_32_0 & 0x1) /* LK at 0 */ == 1) { 
01511                       MATCH_name = 
01512                         MATCH_name_LK_14[(MATCH_w_32_0 & 0x1) /* LK at 0 */]; 
01513                       { 
01514                         char *name = MATCH_name;
01515                         unsigned BIcr = 
01516                           (MATCH_w_32_0 >> 18 & 0x7) /* BIcr at 0 */;
01517                         nextPC = 4 + MATCH_p; 
01518                         
01519 #line 299 "frontend/machine/ppc/decoder.m"
01520                         
01521 
01522                                 computedCall(name, 4, new Unary(opMachFtr, new Const("%CTR")), pc, stmts, result);
01523 
01524                                 unused(BIcr);
01525 
01526                                 
01527 
01528                         
01529                         
01530                         
01531                       }
01532                       
01533                     } /*opt-block*/
01534                     else { 
01535                       MATCH_name = "balctr"; 
01536                       { 
01537                         char *name = MATCH_name;
01538                         unsigned BIcr = 
01539                           (MATCH_w_32_0 >> 18 & 0x7) /* BIcr at 0 */;
01540                         nextPC = 4 + MATCH_p; 
01541                         
01542 #line 295 "frontend/machine/ppc/decoder.m"
01543                         
01544 
01545                                 computedJump(name, 4, new Unary(opMachFtr, new Const("%CTR")), pc, stmts, result);
01546 
01547                                 unused(BIcr);
01548 
01549                                 
01550 
01551                         
01552                         
01553                         
01554                       }
01555                       
01556                     } /*opt-block*/ /*opt-block+*/
01557                   else 
01558                     goto MATCH_label_a0;  /*opt-block+*/ 
01559                 else 
01560                   goto MATCH_label_a0;  /*opt-block+*/
01561                 break;
01562               default: assert(0);
01563             } /* (MATCH_w_32_0 >> 1 & 0x3ff) -- Xo1 at 0 --*/ 
01564           break;
01565         case 20: 
01566           MATCH_name = MATCH_name_Rc_22[(MATCH_w_32_0 & 0x1) /* Rc at 0 */]; 
01567           goto MATCH_label_a4; 
01568           
01569           break;
01570         case 21: 
01571           MATCH_name = MATCH_name_Rc_23[(MATCH_w_32_0 & 0x1) /* Rc at 0 */]; 
01572           goto MATCH_label_a4; 
01573           
01574           break;
01575         case 24: case 25: case 26: case 27: case 28: case 29: 
01576           MATCH_name = 
01577             MATCH_name_OPCD_0[(MATCH_w_32_0 >> 26 & 0x3f) /* OPCD at 0 */]; 
01578           { 
01579             char *name = MATCH_name;
01580             unsigned ra = (MATCH_w_32_0 >> 21 & 0x1f) /* S at 0 */;
01581             unsigned rd = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
01582             unsigned uimm = (MATCH_w_32_0 & 0xffff) /* UIMM at 0 */;
01583             nextPC = 4 + MATCH_p; 
01584             
01585 #line 136 "frontend/machine/ppc/decoder.m"
01586             
01587 
01588                     stmts = instantiate(pc, name, DIS_RD, DIS_RA, DIS_UIMM);
01589 
01590             
01591             
01592             
01593           }
01594           
01595           break;
01596         case 31: 
01597           if ((MATCH_w_32_0 & 0x1) /* Rc at 0 */ == 1) 
01598             if (61 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01599               (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 124 || 
01600               151 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01601               (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 214 || 
01602               215 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01603               (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 284 || 
01604               317 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01605               (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 412 || 
01606               477 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01607               (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 536 || 
01608               540 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01609               (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 792 || 
01610               825 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01611               (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 922 || 
01612               987 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01613               (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 1024) 
01614               goto MATCH_label_a0;  /*opt-block+*/
01615             else 
01616               switch((MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */) {
01617                 case 0: case 1: case 2: case 3: case 4: case 5: case 6: 
01618                 case 7: case 8: case 9: case 10: case 11: case 12: case 13: 
01619                 case 14: case 15: case 16: case 17: case 18: case 19: 
01620                 case 20: case 21: case 22: case 23: case 25: case 29: 
01621                 case 30: case 31: case 32: case 33: case 34: case 35: 
01622                 case 36: case 37: case 38: case 39: case 40: case 41: 
01623                 case 42: case 43: case 44: case 45: case 46: case 47: 
01624                 case 48: case 49: case 50: case 51: case 52: case 53: 
01625                 case 54: case 55: case 56: case 57: case 59: case 125: 
01626                 case 126: case 127: case 128: case 129: case 130: case 131: 
01627                 case 132: case 133: case 134: case 135: case 136: case 137: 
01628                 case 138: case 139: case 140: case 141: case 142: case 143: 
01629                 case 144: case 145: case 146: case 147: case 148: case 149: 
01630                 case 285: case 286: case 287: case 288: case 289: case 290: 
01631                 case 291: case 292: case 293: case 294: case 295: case 296: 
01632                 case 297: case 298: case 299: case 300: case 301: case 302: 
01633                 case 303: case 304: case 305: case 306: case 307: case 308: 
01634                 case 309: case 310: case 311: case 312: case 313: case 314: 
01635                 case 315: case 413: case 414: case 415: case 416: case 417: 
01636                 case 418: case 419: case 420: case 421: case 422: case 423: 
01637                 case 424: case 425: case 426: case 427: case 428: case 429: 
01638                 case 430: case 431: case 432: case 433: case 434: case 435: 
01639                 case 436: case 437: case 438: case 439: case 440: case 441: 
01640                 case 442: case 443: case 445: case 446: case 447: case 448: 
01641                 case 449: case 450: case 451: case 452: case 453: case 454: 
01642                 case 455: case 456: case 457: case 458: case 459: case 460: 
01643                 case 461: case 462: case 463: case 464: case 465: case 466: 
01644                 case 467: case 468: case 469: case 470: case 471: case 472: 
01645                 case 473: case 474: case 475: case 537: case 538: case 793: 
01646                 case 795: case 796: case 797: case 798: case 799: case 800: 
01647                 case 801: case 802: case 803: case 804: case 805: case 806: 
01648                 case 807: case 808: case 809: case 810: case 811: case 812: 
01649                 case 813: case 814: case 815: case 816: case 817: case 818: 
01650                 case 819: case 820: case 821: case 822: case 823: case 923: 
01651                 case 924: case 925: case 926: case 927: case 928: case 929: 
01652                 case 930: case 931: case 932: case 933: case 934: case 935: 
01653                 case 936: case 937: case 938: case 939: case 940: case 941: 
01654                 case 942: case 943: case 944: case 945: case 946: case 947: 
01655                 case 948: case 949: case 950: case 951: case 952: case 953: 
01656                 case 955: case 956: case 957: case 958: case 959: case 960: 
01657                 case 961: case 962: case 963: case 964: case 965: case 966: 
01658                 case 967: case 968: case 969: case 970: case 971: case 972: 
01659                 case 973: case 974: case 975: case 976: case 977: case 978: 
01660                 case 979: case 980: case 981: case 982: case 983: case 984: 
01661                 case 985: 
01662                   goto MATCH_label_a0; break;
01663                 case 24: case 27: case 28: case 60: case 124: case 284: 
01664                 case 316: case 412: case 444: case 476: case 536: case 539: 
01665                 case 792: case 794: 
01666                   MATCH_name = MATCH_name_Xo1_30[(MATCH_w_32_0 >> 1 & 0x3ff) 
01667                         /* Xo1 at 0 */]; 
01668                   goto MATCH_label_a8; 
01669                   
01670                   break;
01671                 case 26: 
01672                   if ((MATCH_w_32_0 >> 11 & 0x1f) /* B at 0 */ == 0) { 
01673                     MATCH_name = "cntlzwq"; 
01674                     goto MATCH_label_a9; 
01675                     
01676                   } /*opt-block*/
01677                   else 
01678                     goto MATCH_label_a0;  /*opt-block+*/
01679                   
01680                   break;
01681                 case 58: 
01682                   if ((MATCH_w_32_0 >> 11 & 0x1f) /* B at 0 */ == 0) { 
01683                     MATCH_name = "cntlzdq"; 
01684                     goto MATCH_label_a9; 
01685                     
01686                   } /*opt-block*/
01687                   else 
01688                     goto MATCH_label_a0;  /*opt-block+*/
01689                   
01690                   break;
01691                 case 150: case 214: 
01692                   MATCH_name = MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
01693                         /* Xo1 at 0 */]; 
01694                   goto MATCH_label_a10; 
01695                   
01696                   break;
01697                 case 824: 
01698                   MATCH_name = MATCH_name_Xo1_30[(MATCH_w_32_0 >> 1 & 0x3ff) 
01699                         /* Xo1 at 0 */]; 
01700                   { 
01701                     char *name = MATCH_name;
01702                     unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
01703                     unsigned rs = (MATCH_w_32_0 >> 21 & 0x1f) /* S at 0 */;
01704                     unsigned uimm = (MATCH_w_32_0 >> 11 & 0x1f) /* SH at 0 */;
01705                     nextPC = 4 + MATCH_p; 
01706                     
01707 #line 350 "frontend/machine/ppc/decoder.m"
01708                     
01709 
01710                             stmts = instantiate(pc,  name, DIS_RA, DIS_RS, DIS_UIMM);
01711 
01712                             
01713 
01714                     
01715                     
01716                     
01717                   }
01718                   
01719                   break;
01720                 case 922: 
01721                   if ((MATCH_w_32_0 >> 11 & 0x1f) /* B at 0 */ == 0) { 
01722                     MATCH_name = "extshq"; 
01723                     goto MATCH_label_a9; 
01724                     
01725                   } /*opt-block*/
01726                   else 
01727                     goto MATCH_label_a0;  /*opt-block+*/
01728                   
01729                   break;
01730                 case 954: 
01731                   if ((MATCH_w_32_0 >> 11 & 0x1f) /* B at 0 */ == 0) { 
01732                     MATCH_name = "extsbq"; 
01733                     goto MATCH_label_a9; 
01734                     
01735                   } /*opt-block*/
01736                   else 
01737                     goto MATCH_label_a0;  /*opt-block+*/
01738                   
01739                   break;
01740                 case 986: 
01741                   if ((MATCH_w_32_0 >> 11 & 0x1f) /* B at 0 */ == 0) { 
01742                     MATCH_name = "extswq"; 
01743                     goto MATCH_label_a9; 
01744                     
01745                   } /*opt-block*/
01746                   else 
01747                     goto MATCH_label_a0;  /*opt-block+*/
01748                   
01749                   break;
01750                 default: assert(0);
01751               } /* (MATCH_w_32_0 >> 1 & 0x3ff) -- Xo1 at 0 --*/  
01752           else 
01753             if ((MATCH_w_32_0 >> 11 & 0x1f) /* B at 0 */ == 0) 
01754               if ((MATCH_w_32_0 >> 10 & 0x1) /* OE at 0 */ == 1) 
01755                 if (477 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01756                   (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 533 || 
01757                   825 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01758                   (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 918 || 
01759                   987 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
01760                   (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 1024) 
01761                   goto MATCH_label_a0;  /*opt-block+*/
01762                 else 
01763                   switch((MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */) {
01764                     case 0: 
01765                       if ((MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 0) { 
01766                         MATCH_name = "cmp"; 
01767                         goto MATCH_label_a5; 
01768                         
01769                       } /*opt-block*/
01770                       else 
01771                         goto MATCH_label_a0;  /*opt-block+*/
01772                       
01773                       break;
01774                     case 1: case 2: case 3: case 4: case 5: case 6: case 7: 
01775                     case 8: case 9: case 10: case 11: case 12: case 13: 
01776                     case 14: case 15: case 16: case 17: case 18: case 22: 
01777                     case 25: case 29: case 30: case 31: case 33: case 34: 
01778                     case 35: case 36: case 37: case 38: case 39: case 40: 
01779                     case 41: case 42: case 43: case 44: case 45: case 46: 
01780                     case 47: case 48: case 49: case 50: case 51: case 52: 
01781                     case 54: case 56: case 57: case 59: case 61: case 62: 
01782                     case 63: case 64: case 65: case 66: case 67: case 68: 
01783                     case 69: case 70: case 71: case 72: case 73: case 74: 
01784                     case 75: case 76: case 77: case 78: case 79: case 80: 
01785                     case 81: case 82: case 85: case 86: case 88: case 89: 
01786                     case 90: case 91: case 92: case 93: case 94: case 95: 
01787                     case 96: case 97: case 98: case 99: case 100: case 101: 
01788                     case 102: case 103: case 104: case 105: case 106: 
01789                     case 107: case 108: case 109: case 110: case 111: 
01790                     case 112: case 113: case 114: case 115: case 116: 
01791                     case 117: case 118: case 120: case 121: case 122: 
01792                     case 123: case 125: case 126: case 127: case 128: 
01793                     case 129: case 130: case 131: case 132: case 133: 
01794                     case 134: case 135: case 136: case 137: case 138: 
01795                     case 139: case 140: case 141: case 142: case 143: 
01796                     case 144: case 145: case 146: case 147: case 148: 
01797                     case 150: case 152: case 153: case 154: case 155: 
01798                     case 156: case 157: case 158: case 159: case 160: 
01799                     case 161: case 162: case 163: case 164: case 165: 
01800                     case 166: case 167: case 168: case 169: case 170: 
01801                     case 171: case 172: case 173: case 174: case 175: 
01802                     case 176: case 177: case 178: case 179: case 180: 
01803                     case 182: case 184: case 185: case 186: case 187: 
01804                     case 188: case 189: case 190: case 191: case 192: 
01805                     case 193: case 194: case 195: case 196: case 197: 
01806                     case 198: case 199: case 200: case 201: case 202: 
01807                     case 203: case 204: case 205: case 206: case 207: 
01808                     case 208: case 209: case 210: case 211: case 212: 
01809                     case 213: case 214: case 216: case 217: case 218: 
01810                     case 219: case 220: case 221: case 222: case 223: 
01811                     case 224: case 225: case 226: case 227: case 228: 
01812                     case 229: case 230: case 231: case 232: case 233: 
01813                     case 234: case 235: case 236: case 237: case 238: 
01814                     case 239: case 240: case 241: case 242: case 243: 
01815                     case 244: case 245: case 246: case 248: case 249: 
01816                     case 250: case 251: case 252: case 253: case 254: 
01817                     case 255: case 256: case 257: case 258: case 259: 
01818                     case 260: case 261: case 262: case 263: case 264: 
01819                     case 265: case 266: case 267: case 268: case 269: 
01820                     case 270: case 271: case 272: case 273: case 274: 
01821                     case 275: case 276: case 277: case 278: case 280: 
01822                     case 281: case 282: case 283: case 285: case 286: 
01823                     case 287: case 288: case 289: case 290: case 291: 
01824                     case 292: case 293: case 294: case 295: case 296: 
01825                     case 297: case 298: case 299: case 300: case 301: 
01826                     case 302: case 303: case 304: case 305: case 306: 
01827                     case 307: case 308: case 309: case 312: case 313: 
01828                     case 314: case 315: case 317: case 318: case 319: 
01829                     case 320: case 321: case 322: case 323: case 324: 
01830                     case 325: case 326: case 327: case 328: case 329: 
01831                     case 330: case 331: case 332: case 333: case 334: 
01832                     case 335: case 336: case 337: case 338: case 340: 
01833                     case 342: case 344: case 345: case 346: case 347: 
01834                     case 348: case 349: case 350: case 351: case 352: 
01835                     case 353: case 354: case 355: case 356: case 357: 
01836                     case 358: case 359: case 360: case 361: case 362: 
01837                     case 363: case 364: case 365: case 366: case 367: 
01838                     case 368: case 369: case 370: case 371: case 372: 
01839                     case 374: case 376: case 377: case 378: case 379: 
01840                     case 380: case 381: case 382: case 383: case 384: 
01841                     case 385: case 386: case 387: case 388: case 389: 
01842                     case 390: case 391: case 392: case 393: case 394: 
01843                     case 395: case 396: case 397: case 398: case 399: 
01844                     case 400: case 401: case 402: case 403: case 404: 
01845                     case 405: case 406: case 408: case 409: case 410: 
01846                     case 411: case 413: case 414: case 415: case 416: 
01847                     case 417: case 418: case 419: case 420: case 421: 
01848                     case 422: case 423: case 424: case 425: case 426: 
01849                     case 427: case 428: case 429: case 430: case 431: 
01850                     case 432: case 433: case 434: case 435: case 436: 
01851                     case 437: case 440: case 441: case 442: case 443: 
01852                     case 445: case 446: case 447: case 448: case 449: 
01853                     case 450: case 451: case 452: case 453: case 454: 
01854                     case 455: case 456: case 457: case 458: case 459: 
01855                     case 460: case 461: case 462: case 463: case 464: 
01856                     case 465: case 466: case 468: case 469: case 470: 
01857                     case 471: case 472: case 473: case 474: case 475: 
01858                     case 537: case 538: case 540: case 541: case 542: 
01859                     case 543: case 544: case 545: case 546: case 547: 
01860                     case 548: case 549: case 550: case 551: case 552: 
01861                     case 553: case 554: case 555: case 556: case 557: 
01862                     case 558: case 559: case 560: case 561: case 562: 
01863                     case 563: case 564: case 565: case 566: case 568: 
01864                     case 569: case 570: case 571: case 572: case 573: 
01865                     case 574: case 575: case 576: case 577: case 578: 
01866                     case 579: case 580: case 581: case 582: case 583: 
01867                     case 584: case 585: case 586: case 587: case 588: 
01868                     case 589: case 590: case 591: case 592: case 593: 
01869                     case 594: case 595: case 596: case 597: case 598: 
01870                     case 600: case 601: case 602: case 603: case 604: 
01871                     case 605: case 606: case 607: case 608: case 609: 
01872                     case 610: case 611: case 612: case 613: case 614: 
01873                     case 615: case 616: case 617: case 618: case 619: 
01874                     case 620: case 621: case 622: case 623: case 624: 
01875                     case 625: case 626: case 627: case 628: case 629: 
01876                     case 630: case 632: case 633: case 634: case 635: 
01877                     case 636: case 637: case 638: case 639: case 640: 
01878                     case 641: case 642: case 643: case 644: case 645: 
01879                     case 646: case 647: case 648: case 649: case 650: 
01880                     case 651: case 652: case 653: case 654: case 655: 
01881                     case 656: case 657: case 658: case 659: case 660: 
01882                     case 664: case 665: case 666: case 667: case 668: 
01883                     case 669: case 670: case 671: case 672: case 673: 
01884                     case 674: case 675: case 676: case 677: case 678: 
01885                     case 679: case 680: case 681: case 682: case 683: 
01886                     case 684: case 685: case 686: case 687: case 688: 
01887                     case 689: case 690: case 691: case 692: case 693: 
01888                     case 694: case 696: case 697: case 698: case 699: 
01889                     case 700: case 701: case 702: case 703: case 704: 
01890                     case 705: case 706: case 707: case 708: case 709: 
01891                     case 710: case 711: case 712: case 713: case 714: 
01892                     case 715: case 716: case 717: case 718: case 719: 
01893                     case 720: case 721: case 722: case 723: case 724: 
01894                     case 725: case 726: case 728: case 729: case 730: 
01895                     case 731: case 732: case 733: case 734: case 735: 
01896                     case 736: case 737: case 738: case 739: case 740: 
01897                     case 741: case 742: case 743: case 744: case 745: 
01898                     case 746: case 747: case 748: case 749: case 750: 
01899                     case 751: case 752: case 753: case 754: case 755: 
01900                     case 756: case 757: case 758: case 760: case 761: 
01901                     case 762: case 763: case 764: case 765: case 766: 
01902                     case 767: case 768: case 769: case 770: case 771: 
01903                     case 772: case 773: case 774: case 775: case 776: 
01904                     case 777: case 778: case 779: case 780: case 781: 
01905                     case 782: case 783: case 784: case 785: case 786: 
01906                     case 787: case 788: case 789: case 791: case 793: 
01907                     case 795: case 796: case 797: case 798: case 799: 
01908                     case 800: case 801: case 802: case 803: case 804: 
01909                     case 805: case 806: case 807: case 808: case 809: 
01910                     case 810: case 811: case 812: case 813: case 814: 
01911                     case 815: case 816: case 817: case 818: case 819: 
01912                     case 820: case 821: case 822: case 823: case 919: 
01913                     case 920: case 921: case 923: case 924: case 925: 
01914                     case 926: case 927: case 928: case 929: case 930: 
01915                     case 931: case 932: case 933: case 934: case 935: 
01916                     case 936: case 937: case 938: case 939: case 940: 
01917                     case 941: case 942: case 943: case 944: case 945: 
01918                     case 946: case 947: case 948: case 949: case 950: 
01919                     case 951: case 952: case 953: case 955: case 956: 
01920                     case 957: case 958: case 959: case 960: case 961: 
01921                     case 962: case 963: case 964: case 965: case 966: 
01922                     case 967: case 968: case 969: case 970: case 971: 
01923                     case 972: case 973: case 974: case 975: case 976: 
01924                     case 977: case 978: case 979: case 980: case 981: 
01925                     case 982: case 984: case 985: 
01926                       goto MATCH_label_a0; break;
01927                     case 19: 
01928                       if ((MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */ == 0) { 
01929                         MATCH_name = "mfcr"; 
01930                         goto MATCH_label_a6; 
01931                         
01932                       } /*opt-block*/
01933                       else 
01934                         goto MATCH_label_a0;  /*opt-block+*/
01935                       
01936                       break;
01937                     case 20: case 21: case 23: case 53: case 55: case 84: 
01938                     case 87: case 119: case 279: case 310: case 311: 
01939                     case 341: case 343: case 373: case 375: case 533: 
01940                     case 534: case 790: 
01941                       MATCH_name = 
01942                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
01943                             /* Xo1 at 0 */]; 
01944                       goto MATCH_label_a7; 
01945                       
01946                       break;
01947                     case 24: case 27: case 28: case 60: case 124: case 284: 
01948                     case 316: case 412: case 444: case 476: case 536: 
01949                     case 539: case 792: case 794: 
01950                       MATCH_name = 
01951                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
01952                             /* Xo1 at 0 */]; 
01953                       goto MATCH_label_a8; 
01954                       
01955                       break;
01956                     case 26: case 58: case 922: case 954: case 986: 
01957                       MATCH_name = 
01958                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
01959                             /* Xo1 at 0 */]; 
01960                       goto MATCH_label_a9; 
01961                       
01962                       break;
01963                     case 32: 
01964                       if ((MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 0) { 
01965                         MATCH_name = "cmpl"; 
01966                         goto MATCH_label_a5; 
01967                         
01968                       } /*opt-block*/
01969                       else 
01970                         goto MATCH_label_a0;  /*opt-block+*/
01971                       
01972                       break;
01973                     case 83: 
01974                       if ((MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */ == 0) { 
01975                         MATCH_name = "mfmsr"; 
01976                         goto MATCH_label_a6; 
01977                         
01978                       } /*opt-block*/
01979                       else 
01980                         goto MATCH_label_a0;  /*opt-block+*/
01981                       
01982                       break;
01983                     case 149: case 151: case 181: case 183: case 215: 
01984                     case 247: case 407: case 438: case 439: case 661: 
01985                     case 662: case 918: 
01986                       MATCH_name = 
01987                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
01988                             /* Xo1 at 0 */]; 
01989                       goto MATCH_label_a10; 
01990                       
01991                       break;
01992                     case 339: 
01993                       MATCH_name = 
01994                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
01995                             /* Xo1 at 0 */]; 
01996                       goto MATCH_label_a11; 
01997                       
01998                       break;
01999                     case 467: 
02000                       MATCH_name = 
02001                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02002                             /* Xo1 at 0 */]; 
02003                       goto MATCH_label_a12; 
02004                       
02005                       break;
02006                     case 535: case 567: case 599: case 631: 
02007                       MATCH_name = 
02008                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02009                             /* Xo1 at 0 */]; 
02010                       goto MATCH_label_a13; 
02011                       
02012                       break;
02013                     case 663: case 695: case 727: case 759: case 983: 
02014                       MATCH_name = 
02015                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02016                             /* Xo1 at 0 */]; 
02017                       goto MATCH_label_a14; 
02018                       
02019                       break;
02020                     case 824: 
02021                       MATCH_name = 
02022                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02023                             /* Xo1 at 0 */]; 
02024                       goto MATCH_label_a15; 
02025                       
02026                       break;
02027                     default: assert(0);
02028                   } /* (MATCH_w_32_0 >> 1 & 0x3ff) -- Xo1 at 0 --*/  
02029               else 
02030                 if (41 <= (MATCH_w_32_0 >> 1 & 0x1ff) /* Xo9 at 0 */ && 
02031                   (MATCH_w_32_0 >> 1 & 0x1ff) /* Xo9 at 0 */ < 104 || 
02032                   139 <= (MATCH_w_32_0 >> 1 & 0x1ff) /* Xo9 at 0 */ && 
02033                   (MATCH_w_32_0 >> 1 & 0x1ff) /* Xo9 at 0 */ < 200 || 
02034                   267 <= (MATCH_w_32_0 >> 1 & 0x1ff) /* Xo9 at 0 */ && 
02035                   (MATCH_w_32_0 >> 1 & 0x1ff) /* Xo9 at 0 */ < 457) 
02036                   if (477 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
02037                     (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 533 || 
02038                     825 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
02039                     (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 918 || 
02040                     987 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
02041                     (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 1024) 
02042                     goto MATCH_label_a0;  /*opt-block+*/
02043                   else 
02044                     switch((MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */) {
02045                       case 0: 
02046                         if ((MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 0) { 
02047                           MATCH_name = "cmp"; 
02048                           goto MATCH_label_a5; 
02049                           
02050                         } /*opt-block*/
02051                         else 
02052                           goto MATCH_label_a0;  /*opt-block+*/
02053                         
02054                         break;
02055                       case 1: case 2: case 3: case 4: case 5: case 6: case 7: 
02056                       case 8: case 9: case 10: case 11: case 12: case 13: 
02057                       case 14: case 15: case 16: case 17: case 18: case 22: 
02058                       case 25: case 29: case 30: case 31: case 33: case 34: 
02059                       case 35: case 36: case 37: case 38: case 39: case 40: 
02060                       case 41: case 42: case 43: case 44: case 45: case 46: 
02061                       case 47: case 48: case 49: case 50: case 51: case 52: 
02062                       case 54: case 56: case 57: case 59: case 61: case 62: 
02063                       case 63: case 64: case 65: case 66: case 67: case 68: 
02064                       case 69: case 70: case 71: case 72: case 73: case 74: 
02065                       case 75: case 76: case 77: case 78: case 79: case 80: 
02066                       case 81: case 82: case 85: case 86: case 88: case 89: 
02067                       case 90: case 91: case 92: case 93: case 94: case 95: 
02068                       case 96: case 97: case 98: case 99: case 100: case 101: 
02069                       case 102: case 103: case 104: case 105: case 106: 
02070                       case 107: case 108: case 109: case 110: case 111: 
02071                       case 112: case 113: case 114: case 115: case 116: 
02072                       case 117: case 118: case 120: case 121: case 122: 
02073                       case 123: case 125: case 126: case 127: case 128: 
02074                       case 129: case 130: case 131: case 132: case 133: 
02075                       case 134: case 135: case 136: case 137: case 138: 
02076                       case 139: case 140: case 141: case 142: case 143: 
02077                       case 144: case 145: case 146: case 147: case 148: 
02078                       case 150: case 152: case 153: case 154: case 155: 
02079                       case 156: case 157: case 158: case 159: case 160: 
02080                       case 161: case 162: case 163: case 164: case 165: 
02081                       case 166: case 167: case 168: case 169: case 170: 
02082                       case 171: case 172: case 173: case 174: case 175: 
02083                       case 176: case 177: case 178: case 179: case 180: 
02084                       case 182: case 184: case 185: case 186: case 187: 
02085                       case 188: case 189: case 190: case 191: case 192: 
02086                       case 193: case 194: case 195: case 196: case 197: 
02087                       case 198: case 199: case 200: case 201: case 202: 
02088                       case 203: case 204: case 205: case 206: case 207: 
02089                       case 208: case 209: case 210: case 211: case 212: 
02090                       case 213: case 214: case 216: case 217: case 218: 
02091                       case 219: case 220: case 221: case 222: case 223: 
02092                       case 224: case 225: case 226: case 227: case 228: 
02093                       case 229: case 230: case 231: case 232: case 233: 
02094                       case 234: case 235: case 236: case 237: case 238: 
02095                       case 239: case 240: case 241: case 242: case 243: 
02096                       case 244: case 245: case 246: case 248: case 249: 
02097                       case 250: case 251: case 252: case 253: case 254: 
02098                       case 255: case 256: case 257: case 258: case 259: 
02099                       case 260: case 261: case 262: case 263: case 264: 
02100                       case 265: case 266: case 267: case 268: case 269: 
02101                       case 270: case 271: case 272: case 273: case 274: 
02102                       case 275: case 276: case 277: case 278: case 280: 
02103                       case 281: case 282: case 283: case 285: case 286: 
02104                       case 287: case 288: case 289: case 290: case 291: 
02105                       case 292: case 293: case 294: case 295: case 296: 
02106                       case 297: case 298: case 299: case 300: case 301: 
02107                       case 302: case 303: case 304: case 305: case 306: 
02108                       case 307: case 308: case 309: case 312: case 313: 
02109                       case 314: case 315: case 317: case 318: case 319: 
02110                       case 320: case 321: case 322: case 323: case 324: 
02111                       case 325: case 326: case 327: case 328: case 329: 
02112                       case 330: case 331: case 332: case 333: case 334: 
02113                       case 335: case 336: case 337: case 338: case 340: 
02114                       case 342: case 344: case 345: case 346: case 347: 
02115                       case 348: case 349: case 350: case 351: case 352: 
02116                       case 353: case 354: case 355: case 356: case 357: 
02117                       case 358: case 359: case 360: case 361: case 362: 
02118                       case 363: case 364: case 365: case 366: case 367: 
02119                       case 368: case 369: case 370: case 371: case 372: 
02120                       case 374: case 376: case 377: case 378: case 379: 
02121                       case 380: case 381: case 382: case 383: case 384: 
02122                       case 385: case 386: case 387: case 388: case 389: 
02123                       case 390: case 391: case 392: case 393: case 394: 
02124                       case 395: case 396: case 397: case 398: case 399: 
02125                       case 400: case 401: case 402: case 403: case 404: 
02126                       case 405: case 406: case 408: case 409: case 410: 
02127                       case 411: case 413: case 414: case 415: case 416: 
02128                       case 417: case 418: case 419: case 420: case 421: 
02129                       case 422: case 423: case 424: case 425: case 426: 
02130                       case 427: case 428: case 429: case 430: case 431: 
02131                       case 432: case 433: case 434: case 435: case 436: 
02132                       case 437: case 440: case 441: case 442: case 443: 
02133                       case 445: case 446: case 447: case 448: case 449: 
02134                       case 450: case 451: case 452: case 453: case 454: 
02135                       case 455: case 456: case 457: case 458: case 459: 
02136                       case 460: case 461: case 462: case 463: case 464: 
02137                       case 465: case 466: case 468: case 469: case 470: 
02138                       case 471: case 472: case 473: case 474: case 475: 
02139                       case 537: case 538: case 540: case 541: case 542: 
02140                       case 543: case 544: case 545: case 546: case 547: 
02141                       case 548: case 549: case 550: case 551: case 552: 
02142                       case 553: case 554: case 555: case 556: case 557: 
02143                       case 558: case 559: case 560: case 561: case 562: 
02144                       case 563: case 564: case 565: case 566: case 568: 
02145                       case 569: case 570: case 571: case 572: case 573: 
02146                       case 574: case 575: case 576: case 577: case 578: 
02147                       case 579: case 580: case 581: case 582: case 583: 
02148                       case 584: case 585: case 586: case 587: case 588: 
02149                       case 589: case 590: case 591: case 592: case 593: 
02150                       case 594: case 595: case 596: case 597: case 598: 
02151                       case 600: case 601: case 602: case 603: case 604: 
02152                       case 605: case 606: case 607: case 608: case 609: 
02153                       case 610: case 611: case 612: case 613: case 614: 
02154                       case 615: case 616: case 617: case 618: case 619: 
02155                       case 620: case 621: case 622: case 623: case 624: 
02156                       case 625: case 626: case 627: case 628: case 629: 
02157                       case 630: case 632: case 633: case 634: case 635: 
02158                       case 636: case 637: case 638: case 639: case 640: 
02159                       case 641: case 642: case 643: case 644: case 645: 
02160                       case 646: case 647: case 648: case 649: case 650: 
02161                       case 651: case 652: case 653: case 654: case 655: 
02162                       case 656: case 657: case 658: case 659: case 660: 
02163                       case 664: case 665: case 666: case 667: case 668: 
02164                       case 669: case 670: case 671: case 672: case 673: 
02165                       case 674: case 675: case 676: case 677: case 678: 
02166                       case 679: case 680: case 681: case 682: case 683: 
02167                       case 684: case 685: case 686: case 687: case 688: 
02168                       case 689: case 690: case 691: case 692: case 693: 
02169                       case 694: case 696: case 697: case 698: case 699: 
02170                       case 700: case 701: case 702: case 703: case 704: 
02171                       case 705: case 706: case 707: case 708: case 709: 
02172                       case 710: case 711: case 712: case 713: case 714: 
02173                       case 715: case 716: case 717: case 718: case 719: 
02174                       case 720: case 721: case 722: case 723: case 724: 
02175                       case 725: case 726: case 728: case 729: case 730: 
02176                       case 731: case 732: case 733: case 734: case 735: 
02177                       case 736: case 737: case 738: case 739: case 740: 
02178                       case 741: case 742: case 743: case 744: case 745: 
02179                       case 746: case 747: case 748: case 749: case 750: 
02180                       case 751: case 752: case 753: case 754: case 755: 
02181                       case 756: case 757: case 758: case 760: case 761: 
02182                       case 762: case 763: case 764: case 765: case 766: 
02183                       case 767: case 768: case 769: case 770: case 771: 
02184                       case 772: case 773: case 774: case 775: case 776: 
02185                       case 777: case 778: case 779: case 780: case 781: 
02186                       case 782: case 783: case 784: case 785: case 786: 
02187                       case 787: case 788: case 789: case 791: case 793: 
02188                       case 795: case 796: case 797: case 798: case 799: 
02189                       case 800: case 801: case 802: case 803: case 804: 
02190                       case 805: case 806: case 807: case 808: case 809: 
02191                       case 810: case 811: case 812: case 813: case 814: 
02192                       case 815: case 816: case 817: case 818: case 819: 
02193                       case 820: case 821: case 822: case 823: case 919: 
02194                       case 920: case 921: case 923: case 924: case 925: 
02195                       case 926: case 927: case 928: case 929: case 930: 
02196                       case 931: case 932: case 933: case 934: case 935: 
02197                       case 936: case 937: case 938: case 939: case 940: 
02198                       case 941: case 942: case 943: case 944: case 945: 
02199                       case 946: case 947: case 948: case 949: case 950: 
02200                       case 951: case 952: case 953: case 955: case 956: 
02201                       case 957: case 958: case 959: case 960: case 961: 
02202                       case 962: case 963: case 964: case 965: case 966: 
02203                       case 967: case 968: case 969: case 970: case 971: 
02204                       case 972: case 973: case 974: case 975: case 976: 
02205                       case 977: case 978: case 979: case 980: case 981: 
02206                       case 982: case 984: case 985: 
02207                         goto MATCH_label_a0; break;
02208                       case 19: 
02209                         if ((MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */ == 0) { 
02210                           MATCH_name = "mfcr"; 
02211                           goto MATCH_label_a6; 
02212                           
02213                         } /*opt-block*/
02214                         else 
02215                           goto MATCH_label_a0;  /*opt-block+*/
02216                         
02217                         break;
02218                       case 20: case 21: case 23: case 53: case 55: case 84: 
02219                       case 87: case 119: case 279: case 310: case 311: 
02220                       case 341: case 343: case 373: case 375: case 533: 
02221                       case 534: case 790: 
02222                         MATCH_name = 
02223                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02224                               /* Xo1 at 0 */]; 
02225                         goto MATCH_label_a7; 
02226                         
02227                         break;
02228                       case 24: case 27: case 28: case 60: case 124: case 284: 
02229                       case 316: case 412: case 444: case 476: case 536: 
02230                       case 539: case 792: case 794: 
02231                         MATCH_name = 
02232                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02233                               /* Xo1 at 0 */]; 
02234                         goto MATCH_label_a8; 
02235                         
02236                         break;
02237                       case 26: case 58: case 922: case 954: case 986: 
02238                         MATCH_name = 
02239                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02240                               /* Xo1 at 0 */]; 
02241                         goto MATCH_label_a9; 
02242                         
02243                         break;
02244                       case 32: 
02245                         if ((MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 0) { 
02246                           MATCH_name = "cmpl"; 
02247                           goto MATCH_label_a5; 
02248                           
02249                         } /*opt-block*/
02250                         else 
02251                           goto MATCH_label_a0;  /*opt-block+*/
02252                         
02253                         break;
02254                       case 83: 
02255                         if ((MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */ == 0) { 
02256                           MATCH_name = "mfmsr"; 
02257                           goto MATCH_label_a6; 
02258                           
02259                         } /*opt-block*/
02260                         else 
02261                           goto MATCH_label_a0;  /*opt-block+*/
02262                         
02263                         break;
02264                       case 149: case 151: case 181: case 183: case 215: 
02265                       case 247: case 407: case 438: case 439: case 661: 
02266                       case 662: case 918: 
02267                         MATCH_name = 
02268                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02269                               /* Xo1 at 0 */]; 
02270                         goto MATCH_label_a10; 
02271                         
02272                         break;
02273                       case 339: 
02274                         MATCH_name = 
02275                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02276                               /* Xo1 at 0 */]; 
02277                         goto MATCH_label_a11; 
02278                         
02279                         break;
02280                       case 467: 
02281                         MATCH_name = 
02282                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02283                               /* Xo1 at 0 */]; 
02284                         goto MATCH_label_a12; 
02285                         
02286                         break;
02287                       case 535: case 567: case 599: case 631: 
02288                         MATCH_name = 
02289                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02290                               /* Xo1 at 0 */]; 
02291                         goto MATCH_label_a13; 
02292                         
02293                         break;
02294                       case 663: case 695: case 727: case 759: case 983: 
02295                         MATCH_name = 
02296                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02297                               /* Xo1 at 0 */]; 
02298                         goto MATCH_label_a14; 
02299                         
02300                         break;
02301                       case 824: 
02302                         MATCH_name = 
02303                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02304                               /* Xo1 at 0 */]; 
02305                         goto MATCH_label_a15; 
02306                         
02307                         break;
02308                       default: assert(0);
02309                     } /* (MATCH_w_32_0 >> 1 & 0x3ff) -- Xo1 at 0 --*/  
02310                 else 
02311                   switch((MATCH_w_32_0 >> 1 & 0x1ff) /* Xo9 at 0 */) {
02312                     case 0: case 1: case 2: case 3: case 4: case 5: case 6: 
02313                     case 7: case 9: case 11: case 12: case 13: case 14: 
02314                     case 15: case 16: case 17: case 18: case 19: case 20: 
02315                     case 21: case 22: case 23: case 24: case 25: case 26: 
02316                     case 27: case 28: case 29: case 30: case 31: case 32: 
02317                     case 33: case 34: case 35: case 36: case 37: case 38: 
02318                     case 39: case 105: case 106: case 107: case 108: 
02319                     case 109: case 110: case 111: case 112: case 113: 
02320                     case 114: case 115: case 116: case 117: case 118: 
02321                     case 119: case 120: case 121: case 122: case 123: 
02322                     case 124: case 125: case 126: case 127: case 128: 
02323                     case 129: case 130: case 131: case 132: case 133: 
02324                     case 134: case 135: case 137: case 201: case 203: 
02325                     case 204: case 205: case 206: case 207: case 208: 
02326                     case 209: case 210: case 211: case 212: case 213: 
02327                     case 214: case 215: case 216: case 217: case 218: 
02328                     case 219: case 220: case 221: case 222: case 223: 
02329                     case 224: case 225: case 226: case 227: case 228: 
02330                     case 229: case 230: case 231: case 236: case 237: 
02331                     case 238: case 239: case 240: case 241: case 242: 
02332                     case 243: case 244: case 245: case 246: case 247: 
02333                     case 248: case 249: case 250: case 251: case 252: 
02334                     case 253: case 254: case 255: case 256: case 257: 
02335                     case 258: case 259: case 260: case 261: case 262: 
02336                     case 263: case 264: case 265: case 458: case 460: 
02337                     case 461: case 462: case 463: case 464: case 465: 
02338                     case 466: case 467: case 468: case 469: case 470: 
02339                     case 471: case 472: case 473: case 474: case 475: 
02340                     case 476: case 477: case 478: case 479: case 480: 
02341                     case 481: case 482: case 483: case 484: case 485: 
02342                     case 486: case 487: case 488: case 490: case 492: 
02343                     case 493: case 494: case 495: case 496: case 497: 
02344                     case 498: case 499: case 500: case 501: case 502: 
02345                     case 503: case 504: case 505: case 506: case 507: 
02346                     case 508: case 509: case 510: case 511: 
02347                       if (477 <= (MATCH_w_32_0 >> 1 & 0x3ff) 
02348                               /* Xo1 at 0 */ && 
02349                         (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 533 || 
02350                         825 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
02351                         (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 918 || 
02352                         987 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
02353                         (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 1024) 
02354                         goto MATCH_label_a0;  /*opt-block+*/
02355                       else 
02356                         switch((MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */) {
02357                           case 0: 
02358                             if ((MATCH_w_32_0 >> 22 & 0x1) 
02359                                     /* Lz at 0 */ == 0) { 
02360                               MATCH_name = "cmp"; 
02361                               goto MATCH_label_a5; 
02362                               
02363                             } /*opt-block*/
02364                             else 
02365                               goto MATCH_label_a0;  /*opt-block+*/
02366                             
02367                             break;
02368                           case 1: case 2: case 3: case 4: case 5: case 6: 
02369                           case 7: case 8: case 9: case 10: case 11: case 12: 
02370                           case 13: case 14: case 15: case 16: case 17: 
02371                           case 18: case 22: case 25: case 29: case 30: 
02372                           case 31: case 33: case 34: case 35: case 36: 
02373                           case 37: case 38: case 39: case 40: case 41: 
02374                           case 42: case 43: case 44: case 45: case 46: 
02375                           case 47: case 48: case 49: case 50: case 51: 
02376                           case 52: case 54: case 56: case 57: case 59: 
02377                           case 61: case 62: case 63: case 64: case 65: 
02378                           case 66: case 67: case 68: case 69: case 70: 
02379                           case 71: case 72: case 73: case 74: case 75: 
02380                           case 76: case 77: case 78: case 79: case 80: 
02381                           case 81: case 82: case 85: case 86: case 88: 
02382                           case 89: case 90: case 91: case 92: case 93: 
02383                           case 94: case 95: case 96: case 97: case 98: 
02384                           case 99: case 100: case 101: case 102: case 103: 
02385                           case 104: case 105: case 106: case 107: case 108: 
02386                           case 109: case 110: case 111: case 112: case 113: 
02387                           case 114: case 115: case 116: case 117: case 118: 
02388                           case 120: case 121: case 122: case 123: case 125: 
02389                           case 126: case 127: case 128: case 129: case 130: 
02390                           case 131: case 132: case 133: case 134: case 135: 
02391                           case 136: case 137: case 138: case 139: case 140: 
02392                           case 141: case 142: case 143: case 144: case 145: 
02393                           case 146: case 147: case 148: case 150: case 152: 
02394                           case 153: case 154: case 155: case 156: case 157: 
02395                           case 158: case 159: case 160: case 161: case 162: 
02396                           case 163: case 164: case 165: case 166: case 167: 
02397                           case 168: case 169: case 170: case 171: case 172: 
02398                           case 173: case 174: case 175: case 176: case 177: 
02399                           case 178: case 179: case 180: case 182: case 184: 
02400                           case 185: case 186: case 187: case 188: case 189: 
02401                           case 190: case 191: case 192: case 193: case 194: 
02402                           case 195: case 196: case 197: case 198: case 199: 
02403                           case 200: case 201: case 202: case 203: case 204: 
02404                           case 205: case 206: case 207: case 208: case 209: 
02405                           case 210: case 211: case 212: case 213: case 214: 
02406                           case 216: case 217: case 218: case 219: case 220: 
02407                           case 221: case 222: case 223: case 224: case 225: 
02408                           case 226: case 227: case 228: case 229: case 230: 
02409                           case 231: case 232: case 233: case 234: case 235: 
02410                           case 236: case 237: case 238: case 239: case 240: 
02411                           case 241: case 242: case 243: case 244: case 245: 
02412                           case 246: case 248: case 249: case 250: case 251: 
02413                           case 252: case 253: case 254: case 255: case 256: 
02414                           case 257: case 258: case 259: case 260: case 261: 
02415                           case 262: case 263: case 264: case 265: case 266: 
02416                           case 267: case 268: case 269: case 270: case 271: 
02417                           case 272: case 273: case 274: case 275: case 276: 
02418                           case 277: case 278: case 280: case 281: case 282: 
02419                           case 283: case 285: case 286: case 287: case 288: 
02420                           case 289: case 290: case 291: case 292: case 293: 
02421                           case 294: case 295: case 296: case 297: case 298: 
02422                           case 299: case 300: case 301: case 302: case 303: 
02423                           case 304: case 305: case 306: case 307: case 308: 
02424                           case 309: case 312: case 313: case 314: case 315: 
02425                           case 317: case 318: case 319: case 320: case 321: 
02426                           case 322: case 323: case 324: case 325: case 326: 
02427                           case 327: case 328: case 329: case 330: case 331: 
02428                           case 332: case 333: case 334: case 335: case 336: 
02429                           case 337: case 338: case 340: case 342: case 344: 
02430                           case 345: case 346: case 347: case 348: case 349: 
02431                           case 350: case 351: case 352: case 353: case 354: 
02432                           case 355: case 356: case 357: case 358: case 359: 
02433                           case 360: case 361: case 362: case 363: case 364: 
02434                           case 365: case 366: case 367: case 368: case 369: 
02435                           case 370: case 371: case 372: case 374: case 376: 
02436                           case 377: case 378: case 379: case 380: case 381: 
02437                           case 382: case 383: case 384: case 385: case 386: 
02438                           case 387: case 388: case 389: case 390: case 391: 
02439                           case 392: case 393: case 394: case 395: case 396: 
02440                           case 397: case 398: case 399: case 400: case 401: 
02441                           case 402: case 403: case 404: case 405: case 406: 
02442                           case 408: case 409: case 410: case 411: case 413: 
02443                           case 414: case 415: case 416: case 417: case 418: 
02444                           case 419: case 420: case 421: case 422: case 423: 
02445                           case 424: case 425: case 426: case 427: case 428: 
02446                           case 429: case 430: case 431: case 432: case 433: 
02447                           case 434: case 435: case 436: case 437: case 440: 
02448                           case 441: case 442: case 443: case 445: case 446: 
02449                           case 447: case 448: case 449: case 450: case 451: 
02450                           case 452: case 453: case 454: case 455: case 456: 
02451                           case 457: case 458: case 459: case 460: case 461: 
02452                           case 462: case 463: case 464: case 465: case 466: 
02453                           case 468: case 469: case 470: case 471: case 472: 
02454                           case 473: case 474: case 475: case 537: case 538: 
02455                           case 540: case 541: case 542: case 543: case 544: 
02456                           case 545: case 546: case 547: case 548: case 549: 
02457                           case 550: case 551: case 552: case 553: case 554: 
02458                           case 555: case 556: case 557: case 558: case 559: 
02459                           case 560: case 561: case 562: case 563: case 564: 
02460                           case 565: case 566: case 568: case 569: case 570: 
02461                           case 571: case 572: case 573: case 574: case 575: 
02462                           case 576: case 577: case 578: case 579: case 580: 
02463                           case 581: case 582: case 583: case 584: case 585: 
02464                           case 586: case 587: case 588: case 589: case 590: 
02465                           case 591: case 592: case 593: case 594: case 595: 
02466                           case 596: case 597: case 598: case 600: case 601: 
02467                           case 602: case 603: case 604: case 605: case 606: 
02468                           case 607: case 608: case 609: case 610: case 611: 
02469                           case 612: case 613: case 614: case 615: case 616: 
02470                           case 617: case 618: case 619: case 620: case 621: 
02471                           case 622: case 623: case 624: case 625: case 626: 
02472                           case 627: case 628: case 629: case 630: case 632: 
02473                           case 633: case 634: case 635: case 636: case 637: 
02474                           case 638: case 639: case 640: case 641: case 642: 
02475                           case 643: case 644: case 645: case 646: case 647: 
02476                           case 648: case 649: case 650: case 651: case 652: 
02477                           case 653: case 654: case 655: case 656: case 657: 
02478                           case 658: case 659: case 660: case 664: case 665: 
02479                           case 666: case 667: case 668: case 669: case 670: 
02480                           case 671: case 672: case 673: case 674: case 675: 
02481                           case 676: case 677: case 678: case 679: case 680: 
02482                           case 681: case 682: case 683: case 684: case 685: 
02483                           case 686: case 687: case 688: case 689: case 690: 
02484                           case 691: case 692: case 693: case 694: case 696: 
02485                           case 697: case 698: case 699: case 700: case 701: 
02486                           case 702: case 703: case 704: case 705: case 706: 
02487                           case 707: case 708: case 709: case 710: case 711: 
02488                           case 712: case 713: case 714: case 715: case 716: 
02489                           case 717: case 718: case 719: case 720: case 721: 
02490                           case 722: case 723: case 724: case 725: case 726: 
02491                           case 728: case 729: case 730: case 731: case 732: 
02492                           case 733: case 734: case 735: case 736: case 737: 
02493                           case 738: case 739: case 740: case 741: case 742: 
02494                           case 743: case 744: case 745: case 746: case 747: 
02495                           case 748: case 749: case 750: case 751: case 752: 
02496                           case 753: case 754: case 755: case 756: case 757: 
02497                           case 758: case 760: case 761: case 762: case 763: 
02498                           case 764: case 765: case 766: case 767: case 768: 
02499                           case 769: case 770: case 771: case 772: case 773: 
02500                           case 774: case 775: case 776: case 777: case 778: 
02501                           case 779: case 780: case 781: case 782: case 783: 
02502                           case 784: case 785: case 786: case 787: case 788: 
02503                           case 789: case 791: case 793: case 795: case 796: 
02504                           case 797: case 798: case 799: case 800: case 801: 
02505                           case 802: case 803: case 804: case 805: case 806: 
02506                           case 807: case 808: case 809: case 810: case 811: 
02507                           case 812: case 813: case 814: case 815: case 816: 
02508                           case 817: case 818: case 819: case 820: case 821: 
02509                           case 822: case 823: case 919: case 920: case 921: 
02510                           case 923: case 924: case 925: case 926: case 927: 
02511                           case 928: case 929: case 930: case 931: case 932: 
02512                           case 933: case 934: case 935: case 936: case 937: 
02513                           case 938: case 939: case 940: case 941: case 942: 
02514                           case 943: case 944: case 945: case 946: case 947: 
02515                           case 948: case 949: case 950: case 951: case 952: 
02516                           case 953: case 955: case 956: case 957: case 958: 
02517                           case 959: case 960: case 961: case 962: case 963: 
02518                           case 964: case 965: case 966: case 967: case 968: 
02519                           case 969: case 970: case 971: case 972: case 973: 
02520                           case 974: case 975: case 976: case 977: case 978: 
02521                           case 979: case 980: case 981: case 982: case 984: 
02522                           case 985: 
02523                             goto MATCH_label_a0; break;
02524                           case 19: 
02525                             if ((MATCH_w_32_0 >> 16 & 0x1f) 
02526                                     /* A at 0 */ == 0) { 
02527                               MATCH_name = "mfcr"; 
02528                               goto MATCH_label_a6; 
02529                               
02530                             } /*opt-block*/
02531                             else 
02532                               goto MATCH_label_a0;  /*opt-block+*/
02533                             
02534                             break;
02535                           case 20: case 21: case 23: case 53: case 55: 
02536                           case 84: case 87: case 119: case 279: case 310: 
02537                           case 311: case 341: case 343: case 373: case 375: 
02538                           case 533: case 534: case 790: 
02539                             MATCH_name = 
02540                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02541                                   /* Xo1 at 0 */]; 
02542                             goto MATCH_label_a7; 
02543                             
02544                             break;
02545                           case 24: case 27: case 28: case 60: case 124: 
02546                           case 284: case 316: case 412: case 444: case 476: 
02547                           case 536: case 539: case 792: case 794: 
02548                             MATCH_name = 
02549                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02550                                   /* Xo1 at 0 */]; 
02551                             goto MATCH_label_a8; 
02552                             
02553                             break;
02554                           case 26: case 58: case 922: case 954: case 986: 
02555                             MATCH_name = 
02556                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02557                                   /* Xo1 at 0 */]; 
02558                             goto MATCH_label_a9; 
02559                             
02560                             break;
02561                           case 32: 
02562                             if ((MATCH_w_32_0 >> 22 & 0x1) 
02563                                     /* Lz at 0 */ == 0) { 
02564                               MATCH_name = "cmpl"; 
02565                               goto MATCH_label_a5; 
02566                               
02567                             } /*opt-block*/
02568                             else 
02569                               goto MATCH_label_a0;  /*opt-block+*/
02570                             
02571                             break;
02572                           case 83: 
02573                             if ((MATCH_w_32_0 >> 16 & 0x1f) 
02574                                     /* A at 0 */ == 0) { 
02575                               MATCH_name = "mfmsr"; 
02576                               goto MATCH_label_a6; 
02577                               
02578                             } /*opt-block*/
02579                             else 
02580                               goto MATCH_label_a0;  /*opt-block+*/
02581                             
02582                             break;
02583                           case 149: case 151: case 181: case 183: case 215: 
02584                           case 247: case 407: case 438: case 439: case 661: 
02585                           case 662: case 918: 
02586                             MATCH_name = 
02587                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02588                                   /* Xo1 at 0 */]; 
02589                             goto MATCH_label_a10; 
02590                             
02591                             break;
02592                           case 339: 
02593                             MATCH_name = 
02594                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02595                                   /* Xo1 at 0 */]; 
02596                             goto MATCH_label_a11; 
02597                             
02598                             break;
02599                           case 467: 
02600                             MATCH_name = 
02601                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02602                                   /* Xo1 at 0 */]; 
02603                             goto MATCH_label_a12; 
02604                             
02605                             break;
02606                           case 535: case 567: case 599: case 631: 
02607                             MATCH_name = 
02608                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02609                                   /* Xo1 at 0 */]; 
02610                             goto MATCH_label_a13; 
02611                             
02612                             break;
02613                           case 663: case 695: case 727: case 759: case 983: 
02614                             MATCH_name = 
02615                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02616                                   /* Xo1 at 0 */]; 
02617                             goto MATCH_label_a14; 
02618                             
02619                             break;
02620                           case 824: 
02621                             MATCH_name = 
02622                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02623                                   /* Xo1 at 0 */]; 
02624                             goto MATCH_label_a15; 
02625                             
02626                             break;
02627                           default: assert(0);
02628                         } /* (MATCH_w_32_0 >> 1 & 0x3ff) -- Xo1 at 0 --*/ 
02629                       break;
02630                     case 8: case 10: case 40: case 136: case 138: case 233: 
02631                     case 235: case 266: case 457: case 459: case 489: 
02632                     case 491: 
02633                       MATCH_name = 
02634                         MATCH_name_Xo9_29[(MATCH_w_32_0 >> 1 & 0x1ff) 
02635                             /* Xo9 at 0 */]; 
02636                       goto MATCH_label_a16; 
02637                       
02638                       break;
02639                     case 104: case 200: case 202: case 232: case 234: 
02640                       MATCH_name = 
02641                         MATCH_name_Xo9_29[(MATCH_w_32_0 >> 1 & 0x1ff) 
02642                             /* Xo9 at 0 */]; 
02643                       { 
02644                         char *name = MATCH_name;
02645                         unsigned ra = 
02646                           (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
02647                         unsigned rd = 
02648                           (MATCH_w_32_0 >> 21 & 0x1f) /* D at 0 */;
02649                         nextPC = 4 + MATCH_p; 
02650                         
02651 #line 122 "frontend/machine/ppc/decoder.m"
02652                         
02653 
02654                                 stmts = instantiate(pc, name, DIS_RD, DIS_RA);
02655 
02656                         
02657                         
02658                         
02659                       }
02660                       
02661                       break;
02662                     default: assert(0);
02663                   } /* (MATCH_w_32_0 >> 1 & 0x1ff) -- Xo9 at 0 --*/   
02664             else 
02665               if ((MATCH_w_32_0 >> 10 & 0x1) /* OE at 0 */ == 1) 
02666                 if (477 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
02667                   (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 533 || 
02668                   825 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
02669                   (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 918 || 
02670                   919 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
02671                   (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 983 || 
02672                   984 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
02673                   (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 1024) 
02674                   goto MATCH_label_a0;  /*opt-block+*/
02675                 else 
02676                   switch((MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */) {
02677                     case 0: 
02678                       if ((MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 0) { 
02679                         MATCH_name = "cmp"; 
02680                         goto MATCH_label_a5; 
02681                         
02682                       } /*opt-block*/
02683                       else 
02684                         goto MATCH_label_a0;  /*opt-block+*/
02685                       
02686                       break;
02687                     case 1: case 2: case 3: case 4: case 5: case 6: case 7: 
02688                     case 8: case 9: case 10: case 11: case 12: case 13: 
02689                     case 14: case 15: case 16: case 17: case 18: case 19: 
02690                     case 22: case 25: case 26: case 29: case 30: case 31: 
02691                     case 33: case 34: case 35: case 36: case 37: case 38: 
02692                     case 39: case 40: case 41: case 42: case 43: case 44: 
02693                     case 45: case 46: case 47: case 48: case 49: case 50: 
02694                     case 51: case 52: case 54: case 56: case 57: case 58: 
02695                     case 59: case 61: case 62: case 63: case 64: case 65: 
02696                     case 66: case 67: case 68: case 69: case 70: case 71: 
02697                     case 72: case 73: case 74: case 75: case 76: case 77: 
02698                     case 78: case 79: case 80: case 81: case 82: case 83: 
02699                     case 85: case 86: case 88: case 89: case 90: case 91: 
02700                     case 92: case 93: case 94: case 95: case 96: case 97: 
02701                     case 98: case 99: case 100: case 101: case 102: case 103: 
02702                     case 104: case 105: case 106: case 107: case 108: 
02703                     case 109: case 110: case 111: case 112: case 113: 
02704                     case 114: case 115: case 116: case 117: case 118: 
02705                     case 120: case 121: case 122: case 123: case 125: 
02706                     case 126: case 127: case 128: case 129: case 130: 
02707                     case 131: case 132: case 133: case 134: case 135: 
02708                     case 136: case 137: case 138: case 139: case 140: 
02709                     case 141: case 142: case 143: case 144: case 145: 
02710                     case 146: case 147: case 148: case 150: case 152: 
02711                     case 153: case 154: case 155: case 156: case 157: 
02712                     case 158: case 159: case 160: case 161: case 162: 
02713                     case 163: case 164: case 165: case 166: case 167: 
02714                     case 168: case 169: case 170: case 171: case 172: 
02715                     case 173: case 174: case 175: case 176: case 177: 
02716                     case 178: case 179: case 180: case 182: case 184: 
02717                     case 185: case 186: case 187: case 188: case 189: 
02718                     case 190: case 191: case 192: case 193: case 194: 
02719                     case 195: case 196: case 197: case 198: case 199: 
02720                     case 200: case 201: case 202: case 203: case 204: 
02721                     case 205: case 206: case 207: case 208: case 209: 
02722                     case 210: case 211: case 212: case 213: case 214: 
02723                     case 216: case 217: case 218: case 219: case 220: 
02724                     case 221: case 222: case 223: case 224: case 225: 
02725                     case 226: case 227: case 228: case 229: case 230: 
02726                     case 231: case 232: case 233: case 234: case 235: 
02727                     case 236: case 237: case 238: case 239: case 240: 
02728                     case 241: case 242: case 243: case 244: case 245: 
02729                     case 246: case 248: case 249: case 250: case 251: 
02730                     case 252: case 253: case 254: case 255: case 256: 
02731                     case 257: case 258: case 259: case 260: case 261: 
02732                     case 262: case 263: case 264: case 265: case 266: 
02733                     case 267: case 268: case 269: case 270: case 271: 
02734                     case 272: case 273: case 274: case 275: case 276: 
02735                     case 277: case 278: case 280: case 281: case 282: 
02736                     case 283: case 285: case 286: case 287: case 288: 
02737                     case 289: case 290: case 291: case 292: case 293: 
02738                     case 294: case 295: case 296: case 297: case 298: 
02739                     case 299: case 300: case 301: case 302: case 303: 
02740                     case 304: case 305: case 306: case 307: case 308: 
02741                     case 309: case 312: case 313: case 314: case 315: 
02742                     case 317: case 318: case 319: case 320: case 321: 
02743                     case 322: case 323: case 324: case 325: case 326: 
02744                     case 327: case 328: case 329: case 330: case 331: 
02745                     case 332: case 333: case 334: case 335: case 336: 
02746                     case 337: case 338: case 340: case 342: case 344: 
02747                     case 345: case 346: case 347: case 348: case 349: 
02748                     case 350: case 351: case 352: case 353: case 354: 
02749                     case 355: case 356: case 357: case 358: case 359: 
02750                     case 360: case 361: case 362: case 363: case 364: 
02751                     case 365: case 366: case 367: case 368: case 369: 
02752                     case 370: case 371: case 372: case 374: case 376: 
02753                     case 377: case 378: case 379: case 380: case 381: 
02754                     case 382: case 383: case 384: case 385: case 386: 
02755                     case 387: case 388: case 389: case 390: case 391: 
02756                     case 392: case 393: case 394: case 395: case 396: 
02757                     case 397: case 398: case 399: case 400: case 401: 
02758                     case 402: case 403: case 404: case 405: case 406: 
02759                     case 408: case 409: case 410: case 411: case 413: 
02760                     case 414: case 415: case 416: case 417: case 418: 
02761                     case 419: case 420: case 421: case 422: case 423: 
02762                     case 424: case 425: case 426: case 427: case 428: 
02763                     case 429: case 430: case 431: case 432: case 433: 
02764                     case 434: case 435: case 436: case 437: case 440: 
02765                     case 441: case 442: case 443: case 445: case 446: 
02766                     case 447: case 448: case 449: case 450: case 451: 
02767                     case 452: case 453: case 454: case 455: case 456: 
02768                     case 457: case 458: case 459: case 460: case 461: 
02769                     case 462: case 463: case 464: case 465: case 466: 
02770                     case 468: case 469: case 470: case 471: case 472: 
02771                     case 473: case 474: case 475: case 537: case 538: 
02772                     case 540: case 541: case 542: case 543: case 544: 
02773                     case 545: case 546: case 547: case 548: case 549: 
02774                     case 550: case 551: case 552: case 553: case 554: 
02775                     case 555: case 556: case 557: case 558: case 559: 
02776                     case 560: case 561: case 562: case 563: case 564: 
02777                     case 565: case 566: case 568: case 569: case 570: 
02778                     case 571: case 572: case 573: case 574: case 575: 
02779                     case 576: case 577: case 578: case 579: case 580: 
02780                     case 581: case 582: case 583: case 584: case 585: 
02781                     case 586: case 587: case 588: case 589: case 590: 
02782                     case 591: case 592: case 593: case 594: case 595: 
02783                     case 596: case 597: case 598: case 600: case 601: 
02784                     case 602: case 603: case 604: case 605: case 606: 
02785                     case 607: case 608: case 609: case 610: case 611: 
02786                     case 612: case 613: case 614: case 615: case 616: 
02787                     case 617: case 618: case 619: case 620: case 621: 
02788                     case 622: case 623: case 624: case 625: case 626: 
02789                     case 627: case 628: case 629: case 630: case 632: 
02790                     case 633: case 634: case 635: case 636: case 637: 
02791                     case 638: case 639: case 640: case 641: case 642: 
02792                     case 643: case 644: case 645: case 646: case 647: 
02793                     case 648: case 649: case 650: case 651: case 652: 
02794                     case 653: case 654: case 655: case 656: case 657: 
02795                     case 658: case 659: case 660: case 664: case 665: 
02796                     case 666: case 667: case 668: case 669: case 670: 
02797                     case 671: case 672: case 673: case 674: case 675: 
02798                     case 676: case 677: case 678: case 679: case 680: 
02799                     case 681: case 682: case 683: case 684: case 685: 
02800                     case 686: case 687: case 688: case 689: case 690: 
02801                     case 691: case 692: case 693: case 694: case 696: 
02802                     case 697: case 698: case 699: case 700: case 701: 
02803                     case 702: case 703: case 704: case 705: case 706: 
02804                     case 707: case 708: case 709: case 710: case 711: 
02805                     case 712: case 713: case 714: case 715: case 716: 
02806                     case 717: case 718: case 719: case 720: case 721: 
02807                     case 722: case 723: case 724: case 725: case 726: 
02808                     case 728: case 729: case 730: case 731: case 732: 
02809                     case 733: case 734: case 735: case 736: case 737: 
02810                     case 738: case 739: case 740: case 741: case 742: 
02811                     case 743: case 744: case 745: case 746: case 747: 
02812                     case 748: case 749: case 750: case 751: case 752: 
02813                     case 753: case 754: case 755: case 756: case 757: 
02814                     case 758: case 760: case 761: case 762: case 763: 
02815                     case 764: case 765: case 766: case 767: case 768: 
02816                     case 769: case 770: case 771: case 772: case 773: 
02817                     case 774: case 775: case 776: case 777: case 778: 
02818                     case 779: case 780: case 781: case 782: case 783: 
02819                     case 784: case 785: case 786: case 787: case 788: 
02820                     case 789: case 791: case 793: case 795: case 796: 
02821                     case 797: case 798: case 799: case 800: case 801: 
02822                     case 802: case 803: case 804: case 805: case 806: 
02823                     case 807: case 808: case 809: case 810: case 811: 
02824                     case 812: case 813: case 814: case 815: case 816: 
02825                     case 817: case 818: case 819: case 820: case 821: 
02826                     case 822: case 823: 
02827                       goto MATCH_label_a0; break;
02828                     case 20: case 21: case 23: case 53: case 55: case 84: 
02829                     case 87: case 119: case 279: case 310: case 311: 
02830                     case 341: case 343: case 373: case 375: case 533: 
02831                     case 534: case 790: 
02832                       MATCH_name = 
02833                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02834                             /* Xo1 at 0 */]; 
02835                       goto MATCH_label_a7; 
02836                       
02837                       break;
02838                     case 24: case 27: case 28: case 60: case 124: case 284: 
02839                     case 316: case 412: case 444: case 476: case 536: 
02840                     case 539: case 792: case 794: 
02841                       MATCH_name = 
02842                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02843                             /* Xo1 at 0 */]; 
02844                       goto MATCH_label_a8; 
02845                       
02846                       break;
02847                     case 32: 
02848                       if ((MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 0) { 
02849                         MATCH_name = "cmpl"; 
02850                         goto MATCH_label_a5; 
02851                         
02852                       } /*opt-block*/
02853                       else 
02854                         goto MATCH_label_a0;  /*opt-block+*/
02855                       
02856                       break;
02857                     case 149: case 151: case 181: case 183: case 215: 
02858                     case 247: case 407: case 438: case 439: case 661: 
02859                     case 662: case 918: 
02860                       MATCH_name = 
02861                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02862                             /* Xo1 at 0 */]; 
02863                       goto MATCH_label_a10; 
02864                       
02865                       break;
02866                     case 339: 
02867                       MATCH_name = 
02868                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02869                             /* Xo1 at 0 */]; 
02870                       goto MATCH_label_a11; 
02871                       
02872                       break;
02873                     case 467: 
02874                       MATCH_name = 
02875                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02876                             /* Xo1 at 0 */]; 
02877                       goto MATCH_label_a12; 
02878                       
02879                       break;
02880                     case 535: case 567: case 599: case 631: 
02881                       MATCH_name = 
02882                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02883                             /* Xo1 at 0 */]; 
02884                       goto MATCH_label_a13; 
02885                       
02886                       break;
02887                     case 663: case 695: case 727: case 759: case 983: 
02888                       MATCH_name = 
02889                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02890                             /* Xo1 at 0 */]; 
02891                       goto MATCH_label_a14; 
02892                       
02893                       break;
02894                     case 824: 
02895                       MATCH_name = 
02896                         MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
02897                             /* Xo1 at 0 */]; 
02898                       goto MATCH_label_a15; 
02899                       
02900                       break;
02901                     default: assert(0);
02902                   } /* (MATCH_w_32_0 >> 1 & 0x3ff) -- Xo1 at 0 --*/  
02903               else 
02904                 if (41 <= (MATCH_w_32_0 >> 1 & 0x1ff) /* Xo9 at 0 */ && 
02905                   (MATCH_w_32_0 >> 1 & 0x1ff) /* Xo9 at 0 */ < 136 || 
02906                   139 <= (MATCH_w_32_0 >> 1 & 0x1ff) /* Xo9 at 0 */ && 
02907                   (MATCH_w_32_0 >> 1 & 0x1ff) /* Xo9 at 0 */ < 233 || 
02908                   267 <= (MATCH_w_32_0 >> 1 & 0x1ff) /* Xo9 at 0 */ && 
02909                   (MATCH_w_32_0 >> 1 & 0x1ff) /* Xo9 at 0 */ < 457) 
02910                   if (477 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
02911                     (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 533 || 
02912                     825 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
02913                     (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 918 || 
02914                     919 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
02915                     (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 983 || 
02916                     984 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
02917                     (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 1024) 
02918                     goto MATCH_label_a0;  /*opt-block+*/
02919                   else 
02920                     switch((MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */) {
02921                       case 0: 
02922                         if ((MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 0) { 
02923                           MATCH_name = "cmp"; 
02924                           goto MATCH_label_a5; 
02925                           
02926                         } /*opt-block*/
02927                         else 
02928                           goto MATCH_label_a0;  /*opt-block+*/
02929                         
02930                         break;
02931                       case 1: case 2: case 3: case 4: case 5: case 6: case 7: 
02932                       case 8: case 9: case 10: case 11: case 12: case 13: 
02933                       case 14: case 15: case 16: case 17: case 18: case 19: 
02934                       case 22: case 25: case 26: case 29: case 30: case 31: 
02935                       case 33: case 34: case 35: case 36: case 37: case 38: 
02936                       case 39: case 40: case 41: case 42: case 43: case 44: 
02937                       case 45: case 46: case 47: case 48: case 49: case 50: 
02938                       case 51: case 52: case 54: case 56: case 57: case 58: 
02939                       case 59: case 61: case 62: case 63: case 64: case 65: 
02940                       case 66: case 67: case 68: case 69: case 70: case 71: 
02941                       case 72: case 73: case 74: case 75: case 76: case 77: 
02942                       case 78: case 79: case 80: case 81: case 82: case 83: 
02943                       case 85: case 86: case 88: case 89: case 90: case 91: 
02944                       case 92: case 93: case 94: case 95: case 96: case 97: 
02945                       case 98: case 99: case 100: case 101: case 102: 
02946                       case 103: case 104: case 105: case 106: case 107: 
02947                       case 108: case 109: case 110: case 111: case 112: 
02948                       case 113: case 114: case 115: case 116: case 117: 
02949                       case 118: case 120: case 121: case 122: case 123: 
02950                       case 125: case 126: case 127: case 128: case 129: 
02951                       case 130: case 131: case 132: case 133: case 134: 
02952                       case 135: case 136: case 137: case 138: case 139: 
02953                       case 140: case 141: case 142: case 143: case 144: 
02954                       case 145: case 146: case 147: case 148: case 150: 
02955                       case 152: case 153: case 154: case 155: case 156: 
02956                       case 157: case 158: case 159: case 160: case 161: 
02957                       case 162: case 163: case 164: case 165: case 166: 
02958                       case 167: case 168: case 169: case 170: case 171: 
02959                       case 172: case 173: case 174: case 175: case 176: 
02960                       case 177: case 178: case 179: case 180: case 182: 
02961                       case 184: case 185: case 186: case 187: case 188: 
02962                       case 189: case 190: case 191: case 192: case 193: 
02963                       case 194: case 195: case 196: case 197: case 198: 
02964                       case 199: case 200: case 201: case 202: case 203: 
02965                       case 204: case 205: case 206: case 207: case 208: 
02966                       case 209: case 210: case 211: case 212: case 213: 
02967                       case 214: case 216: case 217: case 218: case 219: 
02968                       case 220: case 221: case 222: case 223: case 224: 
02969                       case 225: case 226: case 227: case 228: case 229: 
02970                       case 230: case 231: case 232: case 233: case 234: 
02971                       case 235: case 236: case 237: case 238: case 239: 
02972                       case 240: case 241: case 242: case 243: case 244: 
02973                       case 245: case 246: case 248: case 249: case 250: 
02974                       case 251: case 252: case 253: case 254: case 255: 
02975                       case 256: case 257: case 258: case 259: case 260: 
02976                       case 261: case 262: case 263: case 264: case 265: 
02977                       case 266: case 267: case 268: case 269: case 270: 
02978                       case 271: case 272: case 273: case 274: case 275: 
02979                       case 276: case 277: case 278: case 280: case 281: 
02980                       case 282: case 283: case 285: case 286: case 287: 
02981                       case 288: case 289: case 290: case 291: case 292: 
02982                       case 293: case 294: case 295: case 296: case 297: 
02983                       case 298: case 299: case 300: case 301: case 302: 
02984                       case 303: case 304: case 305: case 306: case 307: 
02985                       case 308: case 309: case 312: case 313: case 314: 
02986                       case 315: case 317: case 318: case 319: case 320: 
02987                       case 321: case 322: case 323: case 324: case 325: 
02988                       case 326: case 327: case 328: case 329: case 330: 
02989                       case 331: case 332: case 333: case 334: case 335: 
02990                       case 336: case 337: case 338: case 340: case 342: 
02991                       case 344: case 345: case 346: case 347: case 348: 
02992                       case 349: case 350: case 351: case 352: case 353: 
02993                       case 354: case 355: case 356: case 357: case 358: 
02994                       case 359: case 360: case 361: case 362: case 363: 
02995                       case 364: case 365: case 366: case 367: case 368: 
02996                       case 369: case 370: case 371: case 372: case 374: 
02997                       case 376: case 377: case 378: case 379: case 380: 
02998                       case 381: case 382: case 383: case 384: case 385: 
02999                       case 386: case 387: case 388: case 389: case 390: 
03000                       case 391: case 392: case 393: case 394: case 395: 
03001                       case 396: case 397: case 398: case 399: case 400: 
03002                       case 401: case 402: case 403: case 404: case 405: 
03003                       case 406: case 408: case 409: case 410: case 411: 
03004                       case 413: case 414: case 415: case 416: case 417: 
03005                       case 418: case 419: case 420: case 421: case 422: 
03006                       case 423: case 424: case 425: case 426: case 427: 
03007                       case 428: case 429: case 430: case 431: case 432: 
03008                       case 433: case 434: case 435: case 436: case 437: 
03009                       case 440: case 441: case 442: case 443: case 445: 
03010                       case 446: case 447: case 448: case 449: case 450: 
03011                       case 451: case 452: case 453: case 454: case 455: 
03012                       case 456: case 457: case 458: case 459: case 460: 
03013                       case 461: case 462: case 463: case 464: case 465: 
03014                       case 466: case 468: case 469: case 470: case 471: 
03015                       case 472: case 473: case 474: case 475: case 537: 
03016                       case 538: case 540: case 541: case 542: case 543: 
03017                       case 544: case 545: case 546: case 547: case 548: 
03018                       case 549: case 550: case 551: case 552: case 553: 
03019                       case 554: case 555: case 556: case 557: case 558: 
03020                       case 559: case 560: case 561: case 562: case 563: 
03021                       case 564: case 565: case 566: case 568: case 569: 
03022                       case 570: case 571: case 572: case 573: case 574: 
03023                       case 575: case 576: case 577: case 578: case 579: 
03024                       case 580: case 581: case 582: case 583: case 584: 
03025                       case 585: case 586: case 587: case 588: case 589: 
03026                       case 590: case 591: case 592: case 593: case 594: 
03027                       case 595: case 596: case 597: case 598: case 600: 
03028                       case 601: case 602: case 603: case 604: case 605: 
03029                       case 606: case 607: case 608: case 609: case 610: 
03030                       case 611: case 612: case 613: case 614: case 615: 
03031                       case 616: case 617: case 618: case 619: case 620: 
03032                       case 621: case 622: case 623: case 624: case 625: 
03033                       case 626: case 627: case 628: case 629: case 630: 
03034                       case 632: case 633: case 634: case 635: case 636: 
03035                       case 637: case 638: case 639: case 640: case 641: 
03036                       case 642: case 643: case 644: case 645: case 646: 
03037                       case 647: case 648: case 649: case 650: case 651: 
03038                       case 652: case 653: case 654: case 655: case 656: 
03039                       case 657: case 658: case 659: case 660: case 664: 
03040                       case 665: case 666: case 667: case 668: case 669: 
03041                       case 670: case 671: case 672: case 673: case 674: 
03042                       case 675: case 676: case 677: case 678: case 679: 
03043                       case 680: case 681: case 682: case 683: case 684: 
03044                       case 685: case 686: case 687: case 688: case 689: 
03045                       case 690: case 691: case 692: case 693: case 694: 
03046                       case 696: case 697: case 698: case 699: case 700: 
03047                       case 701: case 702: case 703: case 704: case 705: 
03048                       case 706: case 707: case 708: case 709: case 710: 
03049                       case 711: case 712: case 713: case 714: case 715: 
03050                       case 716: case 717: case 718: case 719: case 720: 
03051                       case 721: case 722: case 723: case 724: case 725: 
03052                       case 726: case 728: case 729: case 730: case 731: 
03053                       case 732: case 733: case 734: case 735: case 736: 
03054                       case 737: case 738: case 739: case 740: case 741: 
03055                       case 742: case 743: case 744: case 745: case 746: 
03056                       case 747: case 748: case 749: case 750: case 751: 
03057                       case 752: case 753: case 754: case 755: case 756: 
03058                       case 757: case 758: case 760: case 761: case 762: 
03059                       case 763: case 764: case 765: case 766: case 767: 
03060                       case 768: case 769: case 770: case 771: case 772: 
03061                       case 773: case 774: case 775: case 776: case 777: 
03062                       case 778: case 779: case 780: case 781: case 782: 
03063                       case 783: case 784: case 785: case 786: case 787: 
03064                       case 788: case 789: case 791: case 793: case 795: 
03065                       case 796: case 797: case 798: case 799: case 800: 
03066                       case 801: case 802: case 803: case 804: case 805: 
03067                       case 806: case 807: case 808: case 809: case 810: 
03068                       case 811: case 812: case 813: case 814: case 815: 
03069                       case 816: case 817: case 818: case 819: case 820: 
03070                       case 821: case 822: case 823: 
03071                         goto MATCH_label_a0; break;
03072                       case 20: case 21: case 23: case 53: case 55: case 84: 
03073                       case 87: case 119: case 279: case 310: case 311: 
03074                       case 341: case 343: case 373: case 375: case 533: 
03075                       case 534: case 790: 
03076                         MATCH_name = 
03077                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03078                               /* Xo1 at 0 */]; 
03079                         goto MATCH_label_a7; 
03080                         
03081                         break;
03082                       case 24: case 27: case 28: case 60: case 124: case 284: 
03083                       case 316: case 412: case 444: case 476: case 536: 
03084                       case 539: case 792: case 794: 
03085                         MATCH_name = 
03086                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03087                               /* Xo1 at 0 */]; 
03088                         goto MATCH_label_a8; 
03089                         
03090                         break;
03091                       case 32: 
03092                         if ((MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 0) { 
03093                           MATCH_name = "cmpl"; 
03094                           goto MATCH_label_a5; 
03095                           
03096                         } /*opt-block*/
03097                         else 
03098                           goto MATCH_label_a0;  /*opt-block+*/
03099                         
03100                         break;
03101                       case 149: case 151: case 181: case 183: case 215: 
03102                       case 247: case 407: case 438: case 439: case 661: 
03103                       case 662: case 918: 
03104                         MATCH_name = 
03105                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03106                               /* Xo1 at 0 */]; 
03107                         goto MATCH_label_a10; 
03108                         
03109                         break;
03110                       case 339: 
03111                         MATCH_name = 
03112                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03113                               /* Xo1 at 0 */]; 
03114                         goto MATCH_label_a11; 
03115                         
03116                         break;
03117                       case 467: 
03118                         MATCH_name = 
03119                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03120                               /* Xo1 at 0 */]; 
03121                         goto MATCH_label_a12; 
03122                         
03123                         break;
03124                       case 535: case 567: case 599: case 631: 
03125                         MATCH_name = 
03126                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03127                               /* Xo1 at 0 */]; 
03128                         goto MATCH_label_a13; 
03129                         
03130                         break;
03131                       case 663: case 695: case 727: case 759: case 983: 
03132                         MATCH_name = 
03133                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03134                               /* Xo1 at 0 */]; 
03135                         goto MATCH_label_a14; 
03136                         
03137                         break;
03138                       case 824: 
03139                         MATCH_name = 
03140                           MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03141                               /* Xo1 at 0 */]; 
03142                         goto MATCH_label_a15; 
03143                         
03144                         break;
03145                       default: assert(0);
03146                     } /* (MATCH_w_32_0 >> 1 & 0x3ff) -- Xo1 at 0 --*/  
03147                 else 
03148                   switch((MATCH_w_32_0 >> 1 & 0x1ff) /* Xo9 at 0 */) {
03149                     case 0: case 1: case 2: case 3: case 4: case 5: case 6: 
03150                     case 7: case 9: case 11: case 12: case 13: case 14: 
03151                     case 15: case 16: case 17: case 18: case 19: case 20: 
03152                     case 21: case 22: case 23: case 24: case 25: case 26: 
03153                     case 27: case 28: case 29: case 30: case 31: case 32: 
03154                     case 33: case 34: case 35: case 36: case 37: case 38: 
03155                     case 39: case 137: case 234: case 236: case 237: 
03156                     case 238: case 239: case 240: case 241: case 242: 
03157                     case 243: case 244: case 245: case 246: case 247: 
03158                     case 248: case 249: case 250: case 251: case 252: 
03159                     case 253: case 254: case 255: case 256: case 257: 
03160                     case 258: case 259: case 260: case 261: case 262: 
03161                     case 263: case 264: case 265: case 458: case 460: 
03162                     case 461: case 462: case 463: case 464: case 465: 
03163                     case 466: case 467: case 468: case 469: case 470: 
03164                     case 471: case 472: case 473: case 474: case 475: 
03165                     case 476: case 477: case 478: case 479: case 480: 
03166                     case 481: case 482: case 483: case 484: case 485: 
03167                     case 486: case 487: case 488: case 490: case 492: 
03168                     case 493: case 494: case 495: case 496: case 497: 
03169                     case 498: case 499: case 500: case 501: case 502: 
03170                     case 503: case 504: case 505: case 506: case 507: 
03171                     case 508: case 509: case 510: case 511: 
03172                       if (477 <= (MATCH_w_32_0 >> 1 & 0x3ff) 
03173                               /* Xo1 at 0 */ && 
03174                         (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 533 || 
03175                         825 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
03176                         (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 918 || 
03177                         919 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
03178                         (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 983 || 
03179                         984 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
03180                         (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 1024) 
03181                         goto MATCH_label_a0;  /*opt-block+*/
03182                       else 
03183                         switch((MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */) {
03184                           case 0: 
03185                             if ((MATCH_w_32_0 >> 22 & 0x1) 
03186                                     /* Lz at 0 */ == 0) { 
03187                               MATCH_name = "cmp"; 
03188                               goto MATCH_label_a5; 
03189                               
03190                             } /*opt-block*/
03191                             else 
03192                               goto MATCH_label_a0;  /*opt-block+*/
03193                             
03194                             break;
03195                           case 1: case 2: case 3: case 4: case 5: case 6: 
03196                           case 7: case 8: case 9: case 10: case 11: case 12: 
03197                           case 13: case 14: case 15: case 16: case 17: 
03198                           case 18: case 19: case 22: case 25: case 26: 
03199                           case 29: case 30: case 31: case 33: case 34: 
03200                           case 35: case 36: case 37: case 38: case 39: 
03201                           case 40: case 41: case 42: case 43: case 44: 
03202                           case 45: case 46: case 47: case 48: case 49: 
03203                           case 50: case 51: case 52: case 54: case 56: 
03204                           case 57: case 58: case 59: case 61: case 62: 
03205                           case 63: case 64: case 65: case 66: case 67: 
03206                           case 68: case 69: case 70: case 71: case 72: 
03207                           case 73: case 74: case 75: case 76: case 77: 
03208                           case 78: case 79: case 80: case 81: case 82: 
03209                           case 83: case 85: case 86: case 88: case 89: 
03210                           case 90: case 91: case 92: case 93: case 94: 
03211                           case 95: case 96: case 97: case 98: case 99: 
03212                           case 100: case 101: case 102: case 103: case 104: 
03213                           case 105: case 106: case 107: case 108: case 109: 
03214                           case 110: case 111: case 112: case 113: case 114: 
03215                           case 115: case 116: case 117: case 118: case 120: 
03216                           case 121: case 122: case 123: case 125: case 126: 
03217                           case 127: case 128: case 129: case 130: case 131: 
03218                           case 132: case 133: case 134: case 135: case 136: 
03219                           case 137: case 138: case 139: case 140: case 141: 
03220                           case 142: case 143: case 144: case 145: case 146: 
03221                           case 147: case 148: case 150: case 152: case 153: 
03222                           case 154: case 155: case 156: case 157: case 158: 
03223                           case 159: case 160: case 161: case 162: case 163: 
03224                           case 164: case 165: case 166: case 167: case 168: 
03225                           case 169: case 170: case 171: case 172: case 173: 
03226                           case 174: case 175: case 176: case 177: case 178: 
03227                           case 179: case 180: case 182: case 184: case 185: 
03228                           case 186: case 187: case 188: case 189: case 190: 
03229                           case 191: case 192: case 193: case 194: case 195: 
03230                           case 196: case 197: case 198: case 199: case 200: 
03231                           case 201: case 202: case 203: case 204: case 205: 
03232                           case 206: case 207: case 208: case 209: case 210: 
03233                           case 211: case 212: case 213: case 214: case 216: 
03234                           case 217: case 218: case 219: case 220: case 221: 
03235                           case 222: case 223: case 224: case 225: case 226: 
03236                           case 227: case 228: case 229: case 230: case 231: 
03237                           case 232: case 233: case 234: case 235: case 236: 
03238                           case 237: case 238: case 239: case 240: case 241: 
03239                           case 242: case 243: case 244: case 245: case 246: 
03240                           case 248: case 249: case 250: case 251: case 252: 
03241                           case 253: case 254: case 255: case 256: case 257: 
03242                           case 258: case 259: case 260: case 261: case 262: 
03243                           case 263: case 264: case 265: case 266: case 267: 
03244                           case 268: case 269: case 270: case 271: case 272: 
03245                           case 273: case 274: case 275: case 276: case 277: 
03246                           case 278: case 280: case 281: case 282: case 283: 
03247                           case 285: case 286: case 287: case 288: case 289: 
03248                           case 290: case 291: case 292: case 293: case 294: 
03249                           case 295: case 296: case 297: case 298: case 299: 
03250                           case 300: case 301: case 302: case 303: case 304: 
03251                           case 305: case 306: case 307: case 308: case 309: 
03252                           case 312: case 313: case 314: case 315: case 317: 
03253                           case 318: case 319: case 320: case 321: case 322: 
03254                           case 323: case 324: case 325: case 326: case 327: 
03255                           case 328: case 329: case 330: case 331: case 332: 
03256                           case 333: case 334: case 335: case 336: case 337: 
03257                           case 338: case 340: case 342: case 344: case 345: 
03258                           case 346: case 347: case 348: case 349: case 350: 
03259                           case 351: case 352: case 353: case 354: case 355: 
03260                           case 356: case 357: case 358: case 359: case 360: 
03261                           case 361: case 362: case 363: case 364: case 365: 
03262                           case 366: case 367: case 368: case 369: case 370: 
03263                           case 371: case 372: case 374: case 376: case 377: 
03264                           case 378: case 379: case 380: case 381: case 382: 
03265                           case 383: case 384: case 385: case 386: case 387: 
03266                           case 388: case 389: case 390: case 391: case 392: 
03267                           case 393: case 394: case 395: case 396: case 397: 
03268                           case 398: case 399: case 400: case 401: case 402: 
03269                           case 403: case 404: case 405: case 406: case 408: 
03270                           case 409: case 410: case 411: case 413: case 414: 
03271                           case 415: case 416: case 417: case 418: case 419: 
03272                           case 420: case 421: case 422: case 423: case 424: 
03273                           case 425: case 426: case 427: case 428: case 429: 
03274                           case 430: case 431: case 432: case 433: case 434: 
03275                           case 435: case 436: case 437: case 440: case 441: 
03276                           case 442: case 443: case 445: case 446: case 447: 
03277                           case 448: case 449: case 450: case 451: case 452: 
03278                           case 453: case 454: case 455: case 456: case 457: 
03279                           case 458: case 459: case 460: case 461: case 462: 
03280                           case 463: case 464: case 465: case 466: case 468: 
03281                           case 469: case 470: case 471: case 472: case 473: 
03282                           case 474: case 475: case 537: case 538: case 540: 
03283                           case 541: case 542: case 543: case 544: case 545: 
03284                           case 546: case 547: case 548: case 549: case 550: 
03285                           case 551: case 552: case 553: case 554: case 555: 
03286                           case 556: case 557: case 558: case 559: case 560: 
03287                           case 561: case 562: case 563: case 564: case 565: 
03288                           case 566: case 568: case 569: case 570: case 571: 
03289                           case 572: case 573: case 574: case 575: case 576: 
03290                           case 577: case 578: case 579: case 580: case 581: 
03291                           case 582: case 583: case 584: case 585: case 586: 
03292                           case 587: case 588: case 589: case 590: case 591: 
03293                           case 592: case 593: case 594: case 595: case 596: 
03294                           case 597: case 598: case 600: case 601: case 602: 
03295                           case 603: case 604: case 605: case 606: case 607: 
03296                           case 608: case 609: case 610: case 611: case 612: 
03297                           case 613: case 614: case 615: case 616: case 617: 
03298                           case 618: case 619: case 620: case 621: case 622: 
03299                           case 623: case 624: case 625: case 626: case 627: 
03300                           case 628: case 629: case 630: case 632: case 633: 
03301                           case 634: case 635: case 636: case 637: case 638: 
03302                           case 639: case 640: case 641: case 642: case 643: 
03303                           case 644: case 645: case 646: case 647: case 648: 
03304                           case 649: case 650: case 651: case 652: case 653: 
03305                           case 654: case 655: case 656: case 657: case 658: 
03306                           case 659: case 660: case 664: case 665: case 666: 
03307                           case 667: case 668: case 669: case 670: case 671: 
03308                           case 672: case 673: case 674: case 675: case 676: 
03309                           case 677: case 678: case 679: case 680: case 681: 
03310                           case 682: case 683: case 684: case 685: case 686: 
03311                           case 687: case 688: case 689: case 690: case 691: 
03312                           case 692: case 693: case 694: case 696: case 697: 
03313                           case 698: case 699: case 700: case 701: case 702: 
03314                           case 703: case 704: case 705: case 706: case 707: 
03315                           case 708: case 709: case 710: case 711: case 712: 
03316                           case 713: case 714: case 715: case 716: case 717: 
03317                           case 718: case 719: case 720: case 721: case 722: 
03318                           case 723: case 724: case 725: case 726: case 728: 
03319                           case 729: case 730: case 731: case 732: case 733: 
03320                           case 734: case 735: case 736: case 737: case 738: 
03321                           case 739: case 740: case 741: case 742: case 743: 
03322                           case 744: case 745: case 746: case 747: case 748: 
03323                           case 749: case 750: case 751: case 752: case 753: 
03324                           case 754: case 755: case 756: case 757: case 758: 
03325                           case 760: case 761: case 762: case 763: case 764: 
03326                           case 765: case 766: case 767: case 768: case 769: 
03327                           case 770: case 771: case 772: case 773: case 774: 
03328                           case 775: case 776: case 777: case 778: case 779: 
03329                           case 780: case 781: case 782: case 783: case 784: 
03330                           case 785: case 786: case 787: case 788: case 789: 
03331                           case 791: case 793: case 795: case 796: case 797: 
03332                           case 798: case 799: case 800: case 801: case 802: 
03333                           case 803: case 804: case 805: case 806: case 807: 
03334                           case 808: case 809: case 810: case 811: case 812: 
03335                           case 813: case 814: case 815: case 816: case 817: 
03336                           case 818: case 819: case 820: case 821: case 822: 
03337                           case 823: 
03338                             goto MATCH_label_a0; break;
03339                           case 20: case 21: case 23: case 53: case 55: 
03340                           case 84: case 87: case 119: case 279: case 310: 
03341                           case 311: case 341: case 343: case 373: case 375: 
03342                           case 533: case 534: case 790: 
03343                             MATCH_name = 
03344                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03345                                   /* Xo1 at 0 */]; 
03346                             goto MATCH_label_a7; 
03347                             
03348                             break;
03349                           case 24: case 27: case 28: case 60: case 124: 
03350                           case 284: case 316: case 412: case 444: case 476: 
03351                           case 536: case 539: case 792: case 794: 
03352                             MATCH_name = 
03353                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03354                                   /* Xo1 at 0 */]; 
03355                             goto MATCH_label_a8; 
03356                             
03357                             break;
03358                           case 32: 
03359                             if ((MATCH_w_32_0 >> 22 & 0x1) 
03360                                     /* Lz at 0 */ == 0) { 
03361                               MATCH_name = "cmpl"; 
03362                               goto MATCH_label_a5; 
03363                               
03364                             } /*opt-block*/
03365                             else 
03366                               goto MATCH_label_a0;  /*opt-block+*/
03367                             
03368                             break;
03369                           case 149: case 151: case 181: case 183: case 215: 
03370                           case 247: case 407: case 438: case 439: case 661: 
03371                           case 662: case 918: 
03372                             MATCH_name = 
03373                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03374                                   /* Xo1 at 0 */]; 
03375                             goto MATCH_label_a10; 
03376                             
03377                             break;
03378                           case 339: 
03379                             MATCH_name = 
03380                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03381                                   /* Xo1 at 0 */]; 
03382                             goto MATCH_label_a11; 
03383                             
03384                             break;
03385                           case 467: 
03386                             MATCH_name = 
03387                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03388                                   /* Xo1 at 0 */]; 
03389                             goto MATCH_label_a12; 
03390                             
03391                             break;
03392                           case 535: case 567: case 599: case 631: 
03393                             MATCH_name = 
03394                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03395                                   /* Xo1 at 0 */]; 
03396                             goto MATCH_label_a13; 
03397                             
03398                             break;
03399                           case 663: case 695: case 727: case 759: case 983: 
03400                             MATCH_name = 
03401                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03402                                   /* Xo1 at 0 */]; 
03403                             goto MATCH_label_a14; 
03404                             
03405                             break;
03406                           case 824: 
03407                             MATCH_name = 
03408                               MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03409                                   /* Xo1 at 0 */]; 
03410                             goto MATCH_label_a15; 
03411                             
03412                             break;
03413                           default: assert(0);
03414                         } /* (MATCH_w_32_0 >> 1 & 0x3ff) -- Xo1 at 0 --*/ 
03415                       break;
03416                     case 8: case 10: case 40: case 136: case 138: case 233: 
03417                     case 235: case 266: case 457: case 459: case 489: 
03418                     case 491: 
03419                       MATCH_name = 
03420                         MATCH_name_Xo9_29[(MATCH_w_32_0 >> 1 & 0x1ff) 
03421                             /* Xo9 at 0 */]; 
03422                       goto MATCH_label_a16; 
03423                       
03424                       break;
03425                     default: assert(0);
03426                   } /* (MATCH_w_32_0 >> 1 & 0x1ff) -- Xo9 at 0 --*/    
03427           break;
03428         case 32: case 33: case 34: case 35: case 40: case 41: case 42: 
03429         case 43: case 46: 
03430           MATCH_name = 
03431             MATCH_name_OPCD_0[(MATCH_w_32_0 >> 26 & 0x3f) /* OPCD at 0 */]; 
03432           { 
03433             char *name = MATCH_name;
03434             int /* [~32768..32767] */ d = 
03435               sign_extend((MATCH_w_32_0 & 0xffff) /* d at 0 */, 16);
03436             unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
03437             unsigned rd = (MATCH_w_32_0 >> 21 & 0x1f) /* D at 0 */;
03438             nextPC = 4 + MATCH_p; 
03439             
03440 #line 152 "frontend/machine/ppc/decoder.m"
03441             
03442 
03443                     if (strcmp(name, "lmw") == 0) {
03444 
03445                         // Needs the third param d, which is the register number from rd
03446 
03447                         stmts = instantiate(pc, name, DIS_RD, DIS_DISP, DIS_RD_NUM);
03448 
03449                     } else
03450 
03451                         stmts = instantiate(pc, name, DIS_RD, DIS_DISP, DIS_NZRA);
03452 
03453             //  | XLb_ (b0, b1) [name] =>
03454 
03455             #if BCCTR_LONG  // Prefer to see bltctr instead of bcctr 12,0
03456 
03457                             // But also affects return instructions (bclr)
03458 
03459                     /*FIXME: since this is used for returns, do a jump to LR instead (ie ignoring control registers) */
03460 
03461                     stmts = instantiate(pc,  name);
03462 
03463                     result.rtl = new RTL(pc, stmts);
03464 
03465                     result.rtl->appendStmt(new ReturnStatement);
03466 
03467                     unused(b0);
03468 
03469                     unused(b1);
03470 
03471             #endif
03472 
03473             
03474             
03475             
03476           }
03477           
03478           break;
03479         case 36: case 37: case 38: case 39: case 44: case 45: case 47: 
03480           MATCH_name = 
03481             MATCH_name_OPCD_0[(MATCH_w_32_0 >> 26 & 0x3f) /* OPCD at 0 */]; 
03482           { 
03483             char *name = MATCH_name;
03484             int /* [~32768..32767] */ d = 
03485               sign_extend((MATCH_w_32_0 & 0xffff) /* d at 0 */, 16);
03486             unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
03487             unsigned rs = (MATCH_w_32_0 >> 21 & 0x1f) /* S at 0 */;
03488             nextPC = 4 + MATCH_p; 
03489             
03490 #line 130 "frontend/machine/ppc/decoder.m"
03491             
03492 
03493                     if (strcmp(name, "stmw") == 0) {
03494 
03495                         // Needs the last param s, which is the register number from rs
03496 
03497                         stmts = instantiate(pc, name, DIS_RS, DIS_DISP, DIS_RS_NUM);
03498 
03499                     } else
03500 
03501                         stmts = instantiate(pc, name, DIS_RS, DIS_DISP, DIS_NZRA);
03502 
03503                     
03504 
03505             
03506             
03507             
03508           }
03509           
03510           break;
03511         case 48: case 49: case 50: case 51: 
03512           MATCH_name = 
03513             MATCH_name_OPCD_0[(MATCH_w_32_0 >> 26 & 0x3f) /* OPCD at 0 */]; 
03514           { 
03515             char *name = MATCH_name;
03516             int /* [~32768..32767] */ d = 
03517               sign_extend((MATCH_w_32_0 & 0xffff) /* d at 0 */, 16);
03518             unsigned fd = (MATCH_w_32_0 >> 21 & 0x1f) /* fD at 0 */;
03519             unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
03520             nextPC = 4 + MATCH_p; 
03521             
03522 #line 243 "frontend/machine/ppc/decoder.m"
03523                                                 // Floating point loads (non indexed)
03524 
03525                     stmts = instantiate(pc, name, DIS_FD, DIS_DISP, DIS_RA);    // Pass RA twice (needed for update)
03526 
03527             
03528 
03529             
03530             
03531             
03532           }
03533           
03534           break;
03535         case 52: case 53: case 54: case 55: 
03536           MATCH_name = 
03537             MATCH_name_OPCD_0[(MATCH_w_32_0 >> 26 & 0x3f) /* OPCD at 0 */]; 
03538           { 
03539             char *name = MATCH_name;
03540             int /* [~32768..32767] */ d = 
03541               sign_extend((MATCH_w_32_0 & 0xffff) /* d at 0 */, 16);
03542             unsigned fs = (MATCH_w_32_0 >> 21 & 0x1f) /* fS at 0 */;
03543             unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
03544             nextPC = 4 + MATCH_p; 
03545             
03546 #line 249 "frontend/machine/ppc/decoder.m"
03547                                                 // Floating point stores (non indexed)
03548 
03549                     stmts = instantiate(pc, name, DIS_FS, DIS_DISP, DIS_RA);    // Pass RA twice (needed for update)
03550 
03551             
03552 
03553             
03554             
03555             
03556           }
03557           
03558           break;
03559         case 59: 
03560           
03561             switch((MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */) {
03562               case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: 
03563               case 8: case 9: case 10: case 11: case 12: case 13: case 14: 
03564               case 15: case 16: case 17: case 19: case 22: case 23: case 24: 
03565               case 25: case 26: case 27: case 28: case 29: case 30: case 31: 
03566                 goto MATCH_label_a0; break;
03567               case 18: 
03568                 if (1 <= (MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ && 
03569                   (MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ < 32) 
03570                   goto MATCH_label_a0;  /*opt-block+*/
03571                 else { 
03572                   MATCH_name = 
03573                     MATCH_name_Rc_36[(MATCH_w_32_0 & 0x1) /* Rc at 0 */]; 
03574                   goto MATCH_label_a17; 
03575                   
03576                 } /*opt-block*/
03577                 
03578                 break;
03579               case 20: 
03580                 if (1 <= (MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ && 
03581                   (MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ < 32) 
03582                   goto MATCH_label_a0;  /*opt-block+*/
03583                 else { 
03584                   MATCH_name = 
03585                     MATCH_name_Rc_37[(MATCH_w_32_0 & 0x1) /* Rc at 0 */]; 
03586                   goto MATCH_label_a17; 
03587                   
03588                 } /*opt-block*/
03589                 
03590                 break;
03591               case 21: 
03592                 if (1 <= (MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ && 
03593                   (MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ < 32) 
03594                   goto MATCH_label_a0;  /*opt-block+*/
03595                 else { 
03596                   MATCH_name = 
03597                     MATCH_name_Rc_38[(MATCH_w_32_0 & 0x1) /* Rc at 0 */]; 
03598                   goto MATCH_label_a17; 
03599                   
03600                 } /*opt-block*/
03601                 
03602                 break;
03603               default: assert(0);
03604             } /* (MATCH_w_32_0 >> 1 & 0x1f) -- Xo5 at 0 --*/ 
03605           break;
03606         case 63: 
03607           if ((MATCH_w_32_0 & 0x1) /* Rc at 0 */ == 1) 
03608             if ((MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */ == 0) 
03609               if (73 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
03610                 (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 136 || 
03611                 137 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
03612                 (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 264 || 
03613                 265 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
03614                 (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 814 || 
03615                 847 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
03616                 (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 1024) 
03617                 
03618                   switch((MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */) {
03619                     case 0: case 1: case 2: case 3: case 4: case 5: case 6: 
03620                     case 7: case 8: case 9: case 10: case 11: case 12: 
03621                     case 13: case 14: case 15: case 16: case 17: case 19: 
03622                     case 22: case 23: case 24: case 25: case 26: case 27: 
03623                     case 28: case 29: case 30: case 31: 
03624                       goto MATCH_label_a0; break;
03625                     case 18: 
03626                       if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) { 
03627                         MATCH_name = "fdivq"; 
03628                         goto MATCH_label_a17; 
03629                         
03630                       } /*opt-block*/
03631                       else 
03632                         goto MATCH_label_a0;  /*opt-block+*/
03633                       
03634                       break;
03635                     case 20: 
03636                       if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) { 
03637                         MATCH_name = "fsubq"; 
03638                         goto MATCH_label_a17; 
03639                         
03640                       } /*opt-block*/
03641                       else 
03642                         goto MATCH_label_a0;  /*opt-block+*/
03643                       
03644                       break;
03645                     case 21: 
03646                       if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) { 
03647                         MATCH_name = "faddq"; 
03648                         goto MATCH_label_a17; 
03649                         
03650                       } /*opt-block*/
03651                       else 
03652                         goto MATCH_label_a0;  /*opt-block+*/
03653                       
03654                       break;
03655                     default: assert(0);
03656                   } /* (MATCH_w_32_0 >> 1 & 0x1f) -- Xo5 at 0 --*/  
03657               else 
03658                 switch((MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */) {
03659                   case 0: case 1: case 2: case 3: case 4: case 5: case 6: 
03660                   case 7: case 8: case 9: case 10: case 11: case 13: case 16: 
03661                   case 17: case 18: case 19: case 20: case 21: case 22: 
03662                   case 23: case 24: case 25: case 26: case 27: case 28: 
03663                   case 29: case 30: case 31: case 32: case 33: case 34: 
03664                   case 35: case 36: case 37: case 38: case 39: case 41: 
03665                   case 42: case 43: case 44: case 45: case 46: case 47: 
03666                   case 48: case 49: case 50: case 51: case 52: case 53: 
03667                   case 54: case 55: case 56: case 57: case 58: case 59: 
03668                   case 60: case 61: case 62: case 63: case 64: case 65: 
03669                   case 66: case 67: case 68: case 69: case 70: case 71: 
03670                   case 816: case 817: case 818: case 819: case 820: case 821: 
03671                   case 822: case 823: case 824: case 825: case 826: case 827: 
03672                   case 828: case 829: case 830: case 831: case 832: case 833: 
03673                   case 834: case 835: case 836: case 837: case 838: case 839: 
03674                   case 840: case 841: case 842: case 843: case 844: case 845: 
03675                     
03676                       switch((MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */) {
03677                         case 0: case 1: case 2: case 3: case 4: case 5: 
03678                         case 6: case 7: case 8: case 9: case 10: case 11: 
03679                         case 12: case 13: case 14: case 15: case 16: case 17: 
03680                         case 19: case 22: case 23: case 24: case 25: case 26: 
03681                         case 27: case 28: case 29: case 30: case 31: 
03682                           goto MATCH_label_a0; break;
03683                         case 18: 
03684                           if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) { 
03685                             MATCH_name = "fdivq"; 
03686                             goto MATCH_label_a17; 
03687                             
03688                           } /*opt-block*/
03689                           else 
03690                             goto MATCH_label_a0;  /*opt-block+*/
03691                           
03692                           break;
03693                         case 20: 
03694                           if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) { 
03695                             MATCH_name = "fsubq"; 
03696                             goto MATCH_label_a17; 
03697                             
03698                           } /*opt-block*/
03699                           else 
03700                             goto MATCH_label_a0;  /*opt-block+*/
03701                           
03702                           break;
03703                         case 21: 
03704                           if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) { 
03705                             MATCH_name = "faddq"; 
03706                             goto MATCH_label_a17; 
03707                             
03708                           } /*opt-block*/
03709                           else 
03710                             goto MATCH_label_a0;  /*opt-block+*/
03711                           
03712                           break;
03713                         default: assert(0);
03714                       } /* (MATCH_w_32_0 >> 1 & 0x1f) -- Xo5 at 0 --*/ 
03715                     break;
03716                   case 12: case 14: case 15: case 40: case 72: case 136: 
03717                   case 264: case 814: case 815: case 846: 
03718                     MATCH_name = 
03719                       MATCH_name_Xo1_30[(MATCH_w_32_0 >> 1 & 0x3ff) 
03720                           /* Xo1 at 0 */]; 
03721                     goto MATCH_label_a19; 
03722                     
03723                     break;
03724                   default: assert(0);
03725                 } /* (MATCH_w_32_0 >> 1 & 0x3ff) -- Xo1 at 0 --*/  
03726             else 
03727               
03728                 switch((MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */) {
03729                   case 0: case 1: case 2: case 3: case 4: case 5: case 6: 
03730                   case 7: case 8: case 9: case 10: case 11: case 12: case 13: 
03731                   case 14: case 15: case 16: case 17: case 19: case 22: 
03732                   case 23: case 24: case 25: case 26: case 27: case 28: 
03733                   case 29: case 30: case 31: 
03734                     goto MATCH_label_a0; break;
03735                   case 18: 
03736                     if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) { 
03737                       MATCH_name = "fdivq"; 
03738                       goto MATCH_label_a17; 
03739                       
03740                     } /*opt-block*/
03741                     else 
03742                       goto MATCH_label_a0;  /*opt-block+*/
03743                     
03744                     break;
03745                   case 20: 
03746                     if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) { 
03747                       MATCH_name = "fsubq"; 
03748                       goto MATCH_label_a17; 
03749                       
03750                     } /*opt-block*/
03751                     else 
03752                       goto MATCH_label_a0;  /*opt-block+*/
03753                     
03754                     break;
03755                   case 21: 
03756                     if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) { 
03757                       MATCH_name = "faddq"; 
03758                       goto MATCH_label_a17; 
03759                       
03760                     } /*opt-block*/
03761                     else 
03762                       goto MATCH_label_a0;  /*opt-block+*/
03763                     
03764                     break;
03765                   default: assert(0);
03766                 } /* (MATCH_w_32_0 >> 1 & 0x1f) -- Xo5 at 0 --*/   
03767           else 
03768             if ((MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */ == 0) 
03769               if (73 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
03770                 (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 136 || 
03771                 137 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
03772                 (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 264 || 
03773                 265 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
03774                 (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 814 || 
03775                 847 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
03776                 (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 1024) 
03777                 
03778                   switch((MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */) {
03779                     case 0: case 1: case 2: case 3: case 4: case 5: case 6: 
03780                     case 7: case 8: case 9: case 10: case 11: case 12: 
03781                     case 13: case 14: case 15: case 16: case 17: case 19: 
03782                     case 22: case 23: case 24: case 25: case 26: case 27: 
03783                     case 28: case 29: case 30: case 31: 
03784                       goto MATCH_label_a0; break;
03785                     case 18: 
03786                       if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) { 
03787                         MATCH_name = "fdiv"; 
03788                         goto MATCH_label_a17; 
03789                         
03790                       } /*opt-block*/
03791                       else 
03792                         goto MATCH_label_a0;  /*opt-block+*/
03793                       
03794                       break;
03795                     case 20: 
03796                       if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) { 
03797                         MATCH_name = "fsub"; 
03798                         goto MATCH_label_a17; 
03799                         
03800                       } /*opt-block*/
03801                       else 
03802                         goto MATCH_label_a0;  /*opt-block+*/
03803                       
03804                       break;
03805                     case 21: 
03806                       if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) { 
03807                         MATCH_name = "fadd"; 
03808                         goto MATCH_label_a17; 
03809                         
03810                       } /*opt-block*/
03811                       else 
03812                         goto MATCH_label_a0;  /*opt-block+*/
03813                       
03814                       break;
03815                     default: assert(0);
03816                   } /* (MATCH_w_32_0 >> 1 & 0x1f) -- Xo5 at 0 --*/  
03817               else 
03818                 switch((MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */) {
03819                   case 0: 
03820                     if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) 
03821                       if ((MATCH_w_32_0 >> 21 & 0x1) /* L at 0 */ == 1) 
03822                         if ((MATCH_w_32_0 >> 1 & 0x1f) 
03823                                 /* Xo5 at 0 */ == 18 || 
03824                           20 <= (MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ && 
03825                           (MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ < 22) { 
03826                           MATCH_name = 
03827                             MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f) 
03828                                 /* Xo5 at 0 */]; 
03829                           goto MATCH_label_a17; 
03830                           
03831                         } /*opt-block*/
03832                         else 
03833                           goto MATCH_label_a0;  /*opt-block+*/ /*opt-block+*/
03834                       else 
03835                         if ((MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 1) 
03836                           if ((MATCH_w_32_0 >> 1 & 0x1f) 
03837                                   /* Xo5 at 0 */ == 18 || 
03838                             20 <= (MATCH_w_32_0 >> 1 & 0x1f) 
03839                                   /* Xo5 at 0 */ && 
03840                             (MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ < 22) { 
03841                             MATCH_name = 
03842                               MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f) 
03843                                   /* Xo5 at 0 */]; 
03844                             goto MATCH_label_a17; 
03845                             
03846                           } /*opt-block*/
03847                           else 
03848                             goto MATCH_label_a0;  /*opt-block+*/ /*opt-block+*/
03849                         else { 
03850                           MATCH_name = "fcmpu"; 
03851                           goto MATCH_label_a18; 
03852                           
03853                         } /*opt-block*/  
03854                     else 
03855                       if ((MATCH_w_32_0 >> 21 & 0x1) /* L at 0 */ == 0 && 
03856                         (MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 1 || 
03857                         (MATCH_w_32_0 >> 21 & 0x1) /* L at 0 */ == 1) 
03858                         goto MATCH_label_a0;  /*opt-block+*/
03859                       else { 
03860                         MATCH_name = "fcmpu"; 
03861                         goto MATCH_label_a18; 
03862                         
03863                       } /*opt-block*/ /*opt-block+*/
03864                     break;
03865                   case 1: case 2: case 3: case 4: case 5: case 6: case 7: 
03866                   case 8: case 9: case 10: case 11: case 13: case 16: 
03867                   case 17: case 18: case 19: case 20: case 21: case 22: 
03868                   case 23: case 24: case 25: case 26: case 27: case 28: 
03869                   case 29: case 30: case 31: case 33: case 34: case 35: 
03870                   case 36: case 37: case 38: case 39: case 41: case 42: 
03871                   case 43: case 44: case 45: case 46: case 47: case 48: 
03872                   case 49: case 50: case 51: case 52: case 53: case 54: 
03873                   case 55: case 56: case 57: case 58: case 59: case 60: 
03874                   case 61: case 62: case 63: case 64: case 65: case 66: 
03875                   case 67: case 68: case 69: case 70: case 71: case 816: 
03876                   case 817: case 818: case 819: case 820: case 821: case 822: 
03877                   case 823: case 824: case 825: case 826: case 827: case 828: 
03878                   case 829: case 830: case 831: case 832: case 833: case 834: 
03879                   case 835: case 836: case 837: case 838: case 839: case 840: 
03880                   case 841: case 842: case 843: case 844: case 845: 
03881                     
03882                       switch((MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */) {
03883                         case 0: case 1: case 2: case 3: case 4: case 5: 
03884                         case 6: case 7: case 8: case 9: case 10: case 11: 
03885                         case 12: case 13: case 14: case 15: case 16: case 17: 
03886                         case 19: case 22: case 23: case 24: case 25: case 26: 
03887                         case 27: case 28: case 29: case 30: case 31: 
03888                           goto MATCH_label_a0; break;
03889                         case 18: 
03890                           if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) { 
03891                             MATCH_name = "fdiv"; 
03892                             goto MATCH_label_a17; 
03893                             
03894                           } /*opt-block*/
03895                           else 
03896                             goto MATCH_label_a0;  /*opt-block+*/
03897                           
03898                           break;
03899                         case 20: 
03900                           if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) { 
03901                             MATCH_name = "fsub"; 
03902                             goto MATCH_label_a17; 
03903                             
03904                           } /*opt-block*/
03905                           else 
03906                             goto MATCH_label_a0;  /*opt-block+*/
03907                           
03908                           break;
03909                         case 21: 
03910                           if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) { 
03911                             MATCH_name = "fadd"; 
03912                             goto MATCH_label_a17; 
03913                             
03914                           } /*opt-block*/
03915                           else 
03916                             goto MATCH_label_a0;  /*opt-block+*/
03917                           
03918                           break;
03919                         default: assert(0);
03920                       } /* (MATCH_w_32_0 >> 1 & 0x1f) -- Xo5 at 0 --*/ 
03921                     break;
03922                   case 12: case 14: case 15: case 40: case 72: case 136: 
03923                   case 264: case 814: case 815: case 846: 
03924                     MATCH_name = 
03925                       MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
03926                           /* Xo1 at 0 */]; 
03927                     goto MATCH_label_a19; 
03928                     
03929                     break;
03930                   case 32: 
03931                     if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) 
03932                       if ((MATCH_w_32_0 >> 21 & 0x1) /* L at 0 */ == 1) 
03933                         if ((MATCH_w_32_0 >> 1 & 0x1f) 
03934                                 /* Xo5 at 0 */ == 18 || 
03935                           20 <= (MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ && 
03936                           (MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ < 22) { 
03937                           MATCH_name = 
03938                             MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f) 
03939                                 /* Xo5 at 0 */]; 
03940                           goto MATCH_label_a17; 
03941                           
03942                         } /*opt-block*/
03943                         else 
03944                           goto MATCH_label_a0;  /*opt-block+*/ /*opt-block+*/
03945                       else 
03946                         if ((MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 1) 
03947                           if ((MATCH_w_32_0 >> 1 & 0x1f) 
03948                                   /* Xo5 at 0 */ == 18 || 
03949                             20 <= (MATCH_w_32_0 >> 1 & 0x1f) 
03950                                   /* Xo5 at 0 */ && 
03951                             (MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ < 22) { 
03952                             MATCH_name = 
03953                               MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f) 
03954                                   /* Xo5 at 0 */]; 
03955                             goto MATCH_label_a17; 
03956                             
03957                           } /*opt-block*/
03958                           else 
03959                             goto MATCH_label_a0;  /*opt-block+*/ /*opt-block+*/
03960                         else { 
03961                           MATCH_name = "fcmpo"; 
03962                           goto MATCH_label_a18; 
03963                           
03964                         } /*opt-block*/  
03965                     else 
03966                       if ((MATCH_w_32_0 >> 21 & 0x1) /* L at 0 */ == 0 && 
03967                         (MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 1 || 
03968                         (MATCH_w_32_0 >> 21 & 0x1) /* L at 0 */ == 1) 
03969                         goto MATCH_label_a0;  /*opt-block+*/
03970                       else { 
03971                         MATCH_name = "fcmpo"; 
03972                         goto MATCH_label_a18; 
03973                         
03974                       } /*opt-block*/ /*opt-block+*/
03975                     break;
03976                   default: assert(0);
03977                 } /* (MATCH_w_32_0 >> 1 & 0x3ff) -- Xo1 at 0 --*/  
03978             else 
03979               if ((MATCH_w_32_0 >> 6 & 0x1f) /* C at 0 */ == 0) 
03980                 if ((MATCH_w_32_0 >> 21 & 0x1) /* L at 0 */ == 1) 
03981                   if ((MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ == 18 || 
03982                     20 <= (MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ && 
03983                     (MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ < 22) { 
03984                     MATCH_name = MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f) 
03985                           /* Xo5 at 0 */]; 
03986                     goto MATCH_label_a17; 
03987                     
03988                   } /*opt-block*/
03989                   else 
03990                     goto MATCH_label_a0;  /*opt-block+*/ /*opt-block+*/
03991                 else 
03992                   if ((MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 1) 
03993                     if ((MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ == 18 || 
03994                       20 <= (MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ && 
03995                       (MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ < 22) { 
03996                       MATCH_name = 
03997                         MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f) 
03998                             /* Xo5 at 0 */]; 
03999                       goto MATCH_label_a17; 
04000                       
04001                     } /*opt-block*/
04002                     else 
04003                       goto MATCH_label_a0;  /*opt-block+*/ /*opt-block+*/
04004                   else 
04005                     if (33 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
04006                       (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 1024) 
04007                       if ((MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ == 18 || 
04008                         20 <= (MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ && 
04009                         (MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ < 22) { 
04010                         MATCH_name = 
04011                           MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f) 
04012                               /* Xo5 at 0 */]; 
04013                         goto MATCH_label_a17; 
04014                         
04015                       } /*opt-block*/
04016                       else 
04017                         goto MATCH_label_a0;  /*opt-block+*/ /*opt-block+*/
04018                     else 
04019                       switch((MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */) {
04020                         case 0: case 32: 
04021                           MATCH_name = 
04022                             MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff) 
04023                                 /* Xo1 at 0 */]; 
04024                           goto MATCH_label_a18; 
04025                           
04026                           break;
04027                         case 1: case 2: case 3: case 4: case 5: case 6: 
04028                         case 7: case 8: case 9: case 10: case 11: case 12: 
04029                         case 13: case 14: case 15: case 16: case 17: case 18: 
04030                         case 19: case 20: case 21: case 22: case 23: case 24: 
04031                         case 25: case 26: case 27: case 28: case 29: case 30: 
04032                         case 31: 
04033                           if ((MATCH_w_32_0 >> 1 & 0x1f) 
04034                                   /* Xo5 at 0 */ == 18 || 
04035                             20 <= (MATCH_w_32_0 >> 1 & 0x1f) 
04036                                   /* Xo5 at 0 */ && 
04037                             (MATCH_w_32_0 >> 1 & 0x1f) /* Xo5 at 0 */ < 22) { 
04038                             MATCH_name = 
04039                               MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f) 
04040                                   /* Xo5 at 0 */]; 
04041                             goto MATCH_label_a17; 
04042                             
04043                           } /*opt-block*/
04044                           else 
04045                             goto MATCH_label_a0;  /*opt-block+*/
04046                           
04047                           break;
04048                         default: assert(0);
04049                       } /* (MATCH_w_32_0 >> 1 & 0x3ff) -- Xo1 at 0 --*/    
04050               else 
04051                 if (33 <= (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ && 
04052                   (MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */ < 1024) 
04053                   goto MATCH_label_a0;  /*opt-block+*/
04054                 else 
04055                   switch((MATCH_w_32_0 >> 1 & 0x3ff) /* Xo1 at 0 */) {
04056                     case 0: 
04057                       if ((MATCH_w_32_0 >> 21 & 0x1) /* L at 0 */ == 0 && 
04058                         (MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 1 || 
04059                         (MATCH_w_32_0 >> 21 & 0x1) /* L at 0 */ == 1) 
04060                         goto MATCH_label_a0;  /*opt-block+*/
04061                       else { 
04062                         MATCH_name = "fcmpu"; 
04063                         goto MATCH_label_a18; 
04064                         
04065                       } /*opt-block*/
04066                       
04067                       break;
04068                     case 1: case 2: case 3: case 4: case 5: case 6: case 7: 
04069                     case 8: case 9: case 10: case 11: case 12: case 13: 
04070                     case 14: case 15: case 16: case 17: case 18: case 19: 
04071                     case 20: case 21: case 22: case 23: case 24: case 25: 
04072                     case 26: case 27: case 28: case 29: case 30: case 31: 
04073                       goto MATCH_label_a0; break;
04074                     case 32: 
04075                       if ((MATCH_w_32_0 >> 21 & 0x1) /* L at 0 */ == 0 && 
04076                         (MATCH_w_32_0 >> 22 & 0x1) /* Lz at 0 */ == 1 || 
04077                         (MATCH_w_32_0 >> 21 & 0x1) /* L at 0 */ == 1) 
04078                         goto MATCH_label_a0;  /*opt-block+*/
04079                       else { 
04080                         MATCH_name = "fcmpo"; 
04081                         goto MATCH_label_a18; 
04082                         
04083                       } /*opt-block*/
04084                       
04085                       break;
04086                     default: assert(0);
04087                   } /* (MATCH_w_32_0 >> 1 & 0x3ff) -- Xo1 at 0 --*/    
04088           break;
04089         default: assert(0);
04090       } /* (MATCH_w_32_0 >> 26 & 0x3f) -- OPCD at 0 --*/ 
04091     
04092   }goto MATCH_finished_a; 
04093   
04094   MATCH_label_a0: (void)0; /*placeholder for label*/ 
04095     { 
04096       nextPC = MATCH_p; 
04097       
04098 #line 353 "frontend/machine/ppc/decoder.m"
04099       
04100             stmts = NULL;
04101 
04102             result.valid = false;
04103 
04104             result.numBytes = 4;      
04105 
04106       
04107       
04108       
04109     } 
04110     goto MATCH_finished_a; 
04111     
04112   MATCH_label_a1: (void)0; /*placeholder for label*/ 
04113     { 
04114       unsigned BIcr = (MATCH_w_32_0 >> 18 & 0x7) /* BIcr at 0 */;
04115       unsigned reladdr = 
04116         4 * (MATCH_w_32_0 >> 2 & 0x3fff) /* BD at 0 */ + addressToPC(MATCH_p);
04117       nextPC = 4 + MATCH_p; 
04118       
04119 #line 303 "frontend/machine/ppc/decoder.m"
04120       
04121 
04122             unconditionalJump("bal", 4, reladdr, delta, pc, stmts, result);
04123 
04124             unused(BIcr);
04125 
04126       
04127 
04128         // b<cond>lr: Branch conditionally to the link register. Model this as a conditional branch around a return
04129 
04130         // statement.
04131 
04132       
04133       
04134       
04135     } 
04136     goto MATCH_finished_a; 
04137     
04138   MATCH_label_a2: (void)0; /*placeholder for label*/ 
04139     { 
04140       char *name = MATCH_name;
04141       unsigned BIcr = (MATCH_w_32_0 >> 18 & 0x7) /* BIcr at 0 */;
04142       nextPC = 4 + MATCH_p; 
04143       
04144 #line 341 "frontend/machine/ppc/decoder.m"
04145       
04146 
04147             result.rtl = new RTL(pc, stmts);
04148 
04149             result.rtl->appendStmt(new ReturnStatement);
04150 
04151             SHOW_ASM(name<<"\n");
04152 
04153             unused(BIcr);
04154 
04155       
04156 
04157         // Shift right arithmetic
04158 
04159       
04160       
04161       
04162     } 
04163     goto MATCH_finished_a; 
04164     
04165   MATCH_label_a3: (void)0; /*placeholder for label*/ 
04166     { 
04167       char *name = MATCH_name;
04168       unsigned crbA = (MATCH_w_32_0 >> 16 & 0x1f) /* crbA at 0 */;
04169       unsigned crbB = (MATCH_w_32_0 >> 11 & 0x1f) /* crbB at 0 */;
04170       unsigned crbD = (MATCH_w_32_0 >> 21 & 0x1f) /* crbD at 0 */;
04171       nextPC = 4 + MATCH_p; 
04172       
04173 #line 168 "frontend/machine/ppc/decoder.m"
04174       
04175 
04176             stmts = instantiate(pc, name, DIS_CRBD, DIS_CRBA, DIS_CRBB);
04177 
04178             
04179 
04180       
04181       
04182       
04183     } 
04184     goto MATCH_finished_a; 
04185     
04186   MATCH_label_a4: (void)0; /*placeholder for label*/ 
04187     { 
04188       char *name = MATCH_name;
04189       unsigned beg = (MATCH_w_32_0 >> 6 & 0x1f) /* MB at 0 */;
04190       unsigned end = (MATCH_w_32_0 >> 1 & 0x1f) /* ME at 0 */;
04191       unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
04192       unsigned rs = (MATCH_w_32_0 >> 21 & 0x1f) /* S at 0 */;
04193       unsigned uimm = (MATCH_w_32_0 >> 11 & 0x1f) /* SH at 0 */;
04194       nextPC = 4 + MATCH_p; 
04195       
04196 #line 189 "frontend/machine/ppc/decoder.m"
04197       
04198 
04199             stmts = instantiate(pc, name, DIS_RA, DIS_RS, DIS_UIMM, DIS_BEG, DIS_END);
04200 
04201       
04202 
04203       
04204 
04205       
04206       
04207       
04208     } 
04209     goto MATCH_finished_a; 
04210     
04211   MATCH_label_a5: (void)0; /*placeholder for label*/ 
04212     { 
04213       char *name = MATCH_name;
04214       unsigned crfd = (MATCH_w_32_0 >> 23 & 0x7) /* crfD at 0 */;
04215       unsigned l = (MATCH_w_32_0 >> 21 & 0x1) /* L at 0 */;
04216       unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
04217       unsigned rb = (MATCH_w_32_0 >> 11 & 0x1f) /* B at 0 */;
04218       nextPC = 4 + MATCH_p; 
04219       
04220 #line 233 "frontend/machine/ppc/decoder.m"
04221       
04222 
04223             stmts = instantiate(pc, name, DIS_CRFD, DIS_NZRA, DIS_NZRB);
04224 
04225             unused(l);
04226 
04227       
04228       
04229       
04230     } 
04231     goto MATCH_finished_a; 
04232     
04233   MATCH_label_a6: (void)0; /*placeholder for label*/ 
04234     { 
04235       char *name = MATCH_name;
04236       unsigned rd = (MATCH_w_32_0 >> 21 & 0x1f) /* D at 0 */;
04237       nextPC = 4 + MATCH_p; 
04238       
04239 #line 186 "frontend/machine/ppc/decoder.m"
04240       
04241 
04242             stmts = instantiate(pc, name, DIS_RD);
04243 
04244       
04245 
04246       
04247       
04248       
04249     } 
04250     goto MATCH_finished_a; 
04251     
04252   MATCH_label_a7: (void)0; /*placeholder for label*/ 
04253     { 
04254       char *name = MATCH_name;
04255       unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
04256       unsigned rb = (MATCH_w_32_0 >> 11 & 0x1f) /* B at 0 */;
04257       unsigned rd = (MATCH_w_32_0 >> 21 & 0x1f) /* D at 0 */;
04258       nextPC = 4 + MATCH_p; 
04259       
04260 #line 146 "frontend/machine/ppc/decoder.m"
04261       
04262 
04263             stmts = instantiate(pc, name, DIS_RD, DIS_INDEX);
04264 
04265       
04266       
04267       
04268     } 
04269     goto MATCH_finished_a; 
04270     
04271   MATCH_label_a8: (void)0; /*placeholder for label*/ 
04272     { 
04273       char *name = MATCH_name;
04274       unsigned ra = (MATCH_w_32_0 >> 21 & 0x1f) /* S at 0 */;
04275       unsigned rb = (MATCH_w_32_0 >> 11 & 0x1f) /* B at 0 */;
04276       unsigned rd = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
04277       nextPC = 4 + MATCH_p; 
04278       
04279 #line 144 "frontend/machine/ppc/decoder.m"
04280       
04281 
04282             stmts = instantiate(pc, name, DIS_RD, DIS_RA, DIS_RB);
04283 
04284       
04285       
04286       
04287     } 
04288     goto MATCH_finished_a; 
04289     
04290   MATCH_label_a9: (void)0; /*placeholder for label*/ 
04291     { 
04292       char *name = MATCH_name;
04293       unsigned ra = (MATCH_w_32_0 >> 21 & 0x1f) /* S at 0 */;
04294       unsigned rd = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
04295       nextPC = 4 + MATCH_p; 
04296       
04297 #line 125 "frontend/machine/ppc/decoder.m"
04298       
04299 
04300             stmts = instantiate(pc, name, DIS_RD, DIS_RA);
04301 
04302         // The number of parameters in these matcher arms has to agree with the number in core.spec
04303 
04304         // The number of parameters passed to instantiate() after pc and name has to agree with ppc.ssl
04305 
04306         // Stores and loads pass rA to instantiate twice: as part of DIS_DISP, and separately as DIS_NZRA
04307 
04308       
04309       
04310       
04311     } 
04312     goto MATCH_finished_a; 
04313     
04314   MATCH_label_a10: (void)0; /*placeholder for label*/ 
04315     { 
04316       char *name = MATCH_name;
04317       unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
04318       unsigned rb = (MATCH_w_32_0 >> 11 & 0x1f) /* B at 0 */;
04319       unsigned rd = (MATCH_w_32_0 >> 21 & 0x1f) /* S at 0 */;
04320       nextPC = 4 + MATCH_p; 
04321       
04322 #line 149 "frontend/machine/ppc/decoder.m"
04323       
04324 
04325             stmts = instantiate(pc, name, DIS_RD, DIS_INDEX);
04326 
04327         // Load instructions
04328 
04329       
04330       
04331       
04332     } 
04333     goto MATCH_finished_a; 
04334     
04335   MATCH_label_a11: (void)0; /*placeholder for label*/ 
04336     { 
04337       char *name = MATCH_name;
04338       unsigned rd = (MATCH_w_32_0 >> 21 & 0x1f) /* D at 0 */;
04339       unsigned uimm = 
04340         ((MATCH_w_32_0 >> 11 & 0x1f) /* sprH at 0 */ << 5) + 
04341         (MATCH_w_32_0 >> 16 & 0x1f) /* sprL at 0 */;
04342       nextPC = 4 + MATCH_p; 
04343       
04344 #line 170 "frontend/machine/ppc/decoder.m"
04345       
04346 
04347             stmts = instantiate(pc, name, DIS_RD, DIS_UIMM);
04348 
04349       
04350       
04351       
04352     } 
04353     goto MATCH_finished_a; 
04354     
04355   MATCH_label_a12: (void)0; /*placeholder for label*/ 
04356     { 
04357       char *name = MATCH_name;
04358       unsigned rs = (MATCH_w_32_0 >> 21 & 0x1f) /* S at 0 */;
04359       unsigned uimm = 
04360         ((MATCH_w_32_0 >> 11 & 0x1f) /* sprH at 0 */ << 5) + 
04361         (MATCH_w_32_0 >> 16 & 0x1f) /* sprL at 0 */;
04362       nextPC = 4 + MATCH_p; 
04363       
04364 #line 173 "frontend/machine/ppc/decoder.m"
04365       
04366 
04367             switch (uimm) {
04368 
04369                 case 1:
04370 
04371                     stmts = instantiate(pc, "MTXER" , DIS_RS); break;
04372 
04373                 case 8:
04374 
04375                     stmts = instantiate(pc, "MTLR" , DIS_RS); break;
04376 
04377                 case 9:
04378 
04379                     stmts = instantiate(pc, "MTCTR" , DIS_RS); break;
04380 
04381                 default:
04382 
04383                     std::cerr << "ERROR: MTSPR instruction with invalid S field: " << uimm << "\n";
04384 
04385             }
04386 
04387       		::unused(name);
04388 
04389       
04390 
04391       
04392       
04393       
04394     } 
04395     goto MATCH_finished_a; 
04396     
04397   MATCH_label_a13: (void)0; /*placeholder for label*/ 
04398     { 
04399       char *name = MATCH_name;
04400       unsigned fd = (MATCH_w_32_0 >> 21 & 0x1f) /* fD at 0 */;
04401       unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
04402       unsigned rb = (MATCH_w_32_0 >> 11 & 0x1f) /* B at 0 */;
04403       nextPC = 4 + MATCH_p; 
04404       
04405 #line 246 "frontend/machine/ppc/decoder.m"
04406                                         // Floating point loads (indexed)
04407 
04408             stmts = instantiate(pc, name, DIS_FD, DIS_INDEX, DIS_RA);   // Pass RA twice (needed for update)
04409 
04410       
04411 
04412       
04413       
04414       
04415     } 
04416     goto MATCH_finished_a; 
04417     
04418   MATCH_label_a14: (void)0; /*placeholder for label*/ 
04419     { 
04420       char *name = MATCH_name;
04421       unsigned fs = (MATCH_w_32_0 >> 21 & 0x1f) /* fS at 0 */;
04422       unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
04423       unsigned rb = (MATCH_w_32_0 >> 11 & 0x1f) /* B at 0 */;
04424       nextPC = 4 + MATCH_p; 
04425       
04426 #line 252 "frontend/machine/ppc/decoder.m"
04427                                         // Floating point stores (indexed)
04428 
04429             stmts = instantiate(pc, name, DIS_FS, DIS_INDEX, DIS_RA);   // Pass RA twice (needed for update)
04430 
04431       
04432 
04433       
04434 
04435       
04436       
04437       
04438     } 
04439     goto MATCH_finished_a; 
04440     
04441   MATCH_label_a15: (void)0; /*placeholder for label*/ 
04442     { 
04443       char *name = MATCH_name;
04444       unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
04445       unsigned rs = (MATCH_w_32_0 >> 21 & 0x1f) /* S at 0 */;
04446       unsigned uimm = (MATCH_w_32_0 >> 11 & 0x1f) /* SH at 0 */;
04447       nextPC = 4 + MATCH_p; 
04448       
04449 #line 347 "frontend/machine/ppc/decoder.m"
04450       
04451 
04452             stmts = instantiate(pc,  name, DIS_RA, DIS_RS, DIS_UIMM);
04453 
04454       
04455       
04456       
04457     } 
04458     goto MATCH_finished_a; 
04459     
04460   MATCH_label_a16: (void)0; /*placeholder for label*/ 
04461     { 
04462       char *name = MATCH_name;
04463       unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) /* A at 0 */;
04464       unsigned rb = (MATCH_w_32_0 >> 11 & 0x1f) /* B at 0 */;
04465       unsigned rd = (MATCH_w_32_0 >> 21 & 0x1f) /* D at 0 */;
04466       nextPC = 4 + MATCH_p; 
04467       
04468 #line 120 "frontend/machine/ppc/decoder.m"
04469       
04470 
04471             stmts = instantiate(pc,  name, DIS_RD, DIS_RA, DIS_RB);
04472 
04473       
04474       
04475       
04476     } 
04477     goto MATCH_finished_a; 
04478     
04479   MATCH_label_a17: (void)0; /*placeholder for label*/ 
04480     { 
04481       char *name = MATCH_name;
04482       unsigned fa = (MATCH_w_32_0 >> 16 & 0x1f) /* fA at 0 */;
04483       unsigned fb = (MATCH_w_32_0 >> 11 & 0x1f) /* fB at 0 */;
04484       unsigned fd = (MATCH_w_32_0 >> 21 & 0x1f) /* fD at 0 */;
04485       nextPC = 4 + MATCH_p; 
04486       
04487 #line 262 "frontend/machine/ppc/decoder.m"
04488                                         // Floating point binary
04489 
04490             stmts = instantiate(pc, name, DIS_FD, DIS_FA, DIS_FB);
04491 
04492       
04493 
04494       
04495 
04496             
04497 
04498       
04499 
04500         // Conditional branches
04501 
04502         // bcc_ is blt | ble | beq | bge | bgt | bnl | bne | bng | bso | bns | bun | bnu | bal (branch always)
04503 
04504       
04505       
04506       
04507     } 
04508     goto MATCH_finished_a; 
04509     
04510   MATCH_label_a18: (void)0; /*placeholder for label*/ 
04511     { 
04512       char *name = MATCH_name;
04513       unsigned crfd = (MATCH_w_32_0 >> 23 & 0x7) /* crfD at 0 */;
04514       unsigned fa = (MATCH_w_32_0 >> 16 & 0x1f) /* fA at 0 */;
04515       unsigned fb = (MATCH_w_32_0 >> 11 & 0x1f) /* fB at 0 */;
04516       nextPC = 4 + MATCH_p; 
04517       
04518 #line 256 "frontend/machine/ppc/decoder.m"
04519                                         // Floating point compare
04520 
04521             stmts = instantiate(pc, name, DIS_CRFD, DIS_FA, DIS_FB);
04522 
04523       
04524 
04525       
04526       
04527       
04528     } 
04529     goto MATCH_finished_a; 
04530     
04531   MATCH_label_a19: (void)0; /*placeholder for label*/ 
04532     { 
04533       char *name = MATCH_name;
04534       unsigned fb = (MATCH_w_32_0 >> 11 & 0x1f) /* fB at 0 */;
04535       unsigned fd = (MATCH_w_32_0 >> 21 & 0x1f) /* fD at 0 */;
04536       nextPC = 4 + MATCH_p; 
04537       
04538 #line 259 "frontend/machine/ppc/decoder.m"
04539                                         // Floating point unary
04540 
04541             stmts = instantiate(pc, name, DIS_FD, DIS_FB);
04542 
04543       
04544 
04545       
04546       
04547       
04548     } 
04549     goto MATCH_finished_a; 
04550     
04551   MATCH_finished_a: (void)0; /*placeholder for label*/
04552   
04553 }
04554 
04555 #line 358 "frontend/machine/ppc/decoder.m"
04556 
04557     result.numBytes = nextPC - hostPC;
04558     if (result.valid && result.rtl == 0)    // Don't override higher level res
04559         result.rtl = new RTL(pc, stmts);
04560 
04561     return result;
04562 }
04563 
04564 
04565 /***********************************************************************
04566  * These are functions used to decode instruction operands into
04567  * expressions (Exp*s).
04568  **********************************************************************/
04569 
04570 /*==============================================================================
04571  * FUNCTION:        PPCDecoder::dis_Reg
04572  * OVERVIEW:        Decode the register
04573  * PARAMETERS:      r - register (0-31)
04574  * RETURNS:         the expression representing the register
04575  *============================================================================*/
04576 Exp* PPCDecoder::dis_Reg(unsigned r)
04577 {
04578     return Location::regOf(r);
04579 }
04580 
04581 /*==============================================================================
04582  * FUNCTION:        PPCDecoder::dis_RAmbz
04583  * OVERVIEW:        Decode the register rA when rA represents constant 0 if r == 0
04584  * PARAMETERS:      r - register (0-31)
04585  * RETURNS:         the expression representing the register
04586  *============================================================================*/
04587 Exp* PPCDecoder::dis_RAmbz(unsigned r)
04588 {
04589     if (r == 0)
04590         return new Const(0);
04591     return Location::regOf(r);
04592 }
04593 
04594 
04595 /*==============================================================================
04596  * FUNCTION:      isFuncPrologue()
04597  * OVERVIEW:      Check to see if the instructions at the given offset match
04598  *                  any callee prologue, i.e. does it look like this offset
04599  *                  is a pointer to a function?
04600  * PARAMETERS:    hostPC - pointer to the code in question (host address)
04601  * RETURNS:       True if a match found
04602  *============================================================================*/
04603 bool PPCDecoder::isFuncPrologue(ADDRESS hostPC)
04604 {
04605 
04606     return false;
04607 }
04608 
04609 
04610  /**********************************
04611  * These are the fetch routines.
04612  **********************************/
04613 
04614 /*==============================================================================
04615  * FUNCTION:        getDword
04616  * OVERVIEW:        Returns the double starting at the given address.
04617  * PARAMETERS:      lc - address at which to decode the double
04618  * RETURNS:         the decoded double
04619  *============================================================================*/
04620 DWord PPCDecoder::getDword(ADDRESS lc)
04621 {
04622   Byte* p = (Byte*)lc;
04623   return (p[0] << 24) + (p[1] << 16) + (p[2] << 8) + p[3];
04624 }
04625 
04626 /*==============================================================================
04627  * FUNCTION:       PPCDecoder::PPCDecoder
04628  * OVERVIEW:       
04629  * PARAMETERS:     None
04630  * RETURNS:        N/A
04631  *============================================================================*/
04632 PPCDecoder::PPCDecoder(Prog* prog) : NJMCDecoder(prog)
04633 {
04634   std::string file = Boomerang::get()->getProgPath() + "frontend/machine/ppc/ppc.ssl";
04635   RTLDict.readSSLFile(file.c_str());
04636 }
04637 
04638 // For now...
04639 int PPCDecoder::decodeAssemblyInstruction(unsigned, int)
04640 { return 0; }
04641 
04642 // Get an expression for a CR bit. For example, if bitNum is 6, return r65@[2:2]
04643 // (r64 .. r71 are the %cr0 .. %cr7 flag sets)
04644 Exp* crBit(int bitNum) {
04645     int     crNum = bitNum / 4;
04646     bitNum = bitNum & 3;
04647     return new Ternary(opAt,
04648         Location::regOf(64 + crNum),
04649         new Const(bitNum),
04650         new Const(bitNum));
04651 }
04652 
04653 
04654 

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