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
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
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"
00041 #include "boomerang.h"
00042 #include <iostream>
00043
00044 Exp* crBit(int bitNum);
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
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
00087
00088
00089
00090
00091 void PPCDecoder::unused(int x)
00092 {}
00093 void unused(char* x) {}
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113 DecodeResult& PPCDecoder::decodeInstruction (ADDRESS pc, int delta) {
00114 static DecodeResult result;
00115 ADDRESS hostPC = pc+delta;
00116
00117
00118 result.reset();
00119
00120
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) ) {
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) ];
00580 {
00581 char *name = MATCH_name;
00582 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
00583 unsigned rd = (MATCH_w_32_0 >> 21 & 0x1f) ;
00584 int simm =
00585 sign_extend((MATCH_w_32_0 & 0xffff) , 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
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) == 0) {
00609 MATCH_name = "cmpli";
00610 {
00611 char *name = MATCH_name;
00612 unsigned crfd = (MATCH_w_32_0 >> 23 & 0x7) ;
00613 unsigned l = (MATCH_w_32_0 >> 21 & 0x1) ;
00614 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
00615 unsigned uimm = (MATCH_w_32_0 & 0xffff) ;
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 }
00633 else
00634 goto MATCH_label_a0;
00635
00636 break;
00637 case 11:
00638 if ((MATCH_w_32_0 >> 22 & 0x1) == 0) {
00639 MATCH_name = "cmpi";
00640 {
00641 char *name = MATCH_name;
00642 unsigned crfd = (MATCH_w_32_0 >> 23 & 0x7) ;
00643 unsigned l = (MATCH_w_32_0 >> 21 & 0x1) ;
00644 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
00645 int simm =
00646 sign_extend((MATCH_w_32_0 & 0xffff) , 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 }
00662 else
00663 goto MATCH_label_a0;
00664
00665 break;
00666 case 16:
00667 if ((MATCH_w_32_0 >> 1 & 0x1) == 1)
00668 goto MATCH_label_a0;
00669 else
00670 if ((MATCH_w_32_0 & 0x1) == 1)
00671 if ((MATCH_w_32_0 >> 21 & 0x1f) == 20) {
00672 MATCH_name = "ball";
00673 {
00674 char *name = MATCH_name;
00675 unsigned BIcr = (MATCH_w_32_0 >> 18 & 0x7) ;
00676 unsigned reladdr =
00677 4 * (MATCH_w_32_0 >> 2 & 0x3fff) +
00678 addressToPC(MATCH_p);
00679 nextPC = 4 + MATCH_p;
00680
00681 #line 210 "frontend/machine/ppc/decoder.m"
00682
00683
00684 if (reladdr - delta - pc == 4) {
00685
00686
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
00711
00712 newCall->setIsComputed(false);
00713
00714
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 }
00734 else
00735 goto MATCH_label_a0;
00736 else
00737
00738 switch((MATCH_w_32_0 >> 16 & 0x3) ) {
00739 case 0:
00740
00741 switch((MATCH_w_32_0 >> 22 & 0xf) ) {
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 == 20)
00747 goto MATCH_label_a1;
00748 else
00749 goto MATCH_label_a0;
00750
00751 break;
00752 case 2:
00753 MATCH_name =
00754 MATCH_name_BO4_3[(MATCH_w_32_0 >> 22 & 0xf)
00755 ];
00756 {
00757 char *name = MATCH_name;
00758 unsigned BIcr =
00759 (MATCH_w_32_0 >> 18 & 0x7) ;
00760 unsigned reladdr =
00761 4 * (MATCH_w_32_0 >> 2 & 0x3fff)
00762 + 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 ];
00780 {
00781 char *name = MATCH_name;
00782 unsigned BIcr =
00783 (MATCH_w_32_0 >> 18 & 0x7) ;
00784 unsigned reladdr =
00785 4 * (MATCH_w_32_0 >> 2 & 0x3fff)
00786 + 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 }
00802 break;
00803 case 1:
00804
00805 switch((MATCH_w_32_0 >> 22 & 0xf) ) {
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 == 20)
00811 goto MATCH_label_a1;
00812 else
00813 goto MATCH_label_a0;
00814
00815 break;
00816 case 2:
00817 MATCH_name =
00818 MATCH_name_BO4_4[(MATCH_w_32_0 >> 22 & 0xf)
00819 ];
00820 {
00821 char *name = MATCH_name;
00822 unsigned BIcr =
00823 (MATCH_w_32_0 >> 18 & 0x7) ;
00824 unsigned reladdr =
00825 4 * (MATCH_w_32_0 >> 2 & 0x3fff)
00826 + 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 ];
00844 {
00845 char *name = MATCH_name;
00846 unsigned BIcr =
00847 (MATCH_w_32_0 >> 18 & 0x7) ;
00848 unsigned reladdr =
00849 4 * (MATCH_w_32_0 >> 2 & 0x3fff)
00850 + 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
00859
00860
00861
00862
00863
00864
00865 }
00866
00867 break;
00868 default: assert(0);
00869 }
00870 break;
00871 case 2:
00872
00873 switch((MATCH_w_32_0 >> 22 & 0xf) ) {
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 == 20)
00879 goto MATCH_label_a1;
00880 else
00881 goto MATCH_label_a0;
00882
00883 break;
00884 case 2:
00885 MATCH_name =
00886 MATCH_name_BO4_5[(MATCH_w_32_0 >> 22 & 0xf)
00887 ];
00888 {
00889 char *name = MATCH_name;
00890 unsigned BIcr =
00891 (MATCH_w_32_0 >> 18 & 0x7) ;
00892 unsigned reladdr =
00893 4 * (MATCH_w_32_0 >> 2 & 0x3fff)
00894 + 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
00903
00904
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 ];
00916 {
00917 char *name = MATCH_name;
00918 unsigned BIcr =
00919 (MATCH_w_32_0 >> 18 & 0x7) ;
00920 unsigned reladdr =
00921 4 * (MATCH_w_32_0 >> 2 & 0x3fff)
00922 + 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 }
00938 break;
00939 case 3:
00940
00941 switch((MATCH_w_32_0 >> 22 & 0xf) ) {
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 == 20)
00947 goto MATCH_label_a1;
00948 else
00949 goto MATCH_label_a0;
00950
00951 break;
00952 case 2:
00953 MATCH_name =
00954 MATCH_name_BO4_6[(MATCH_w_32_0 >> 22 & 0xf)
00955 ];
00956 {
00957 char *name = MATCH_name;
00958 unsigned BIcr =
00959 (MATCH_w_32_0 >> 18 & 0x7) ;
00960 unsigned reladdr =
00961 4 * (MATCH_w_32_0 >> 2 & 0x3fff)
00962 + 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
00971
00972
00973
00974
00975
00976
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 ];
00990 {
00991 char *name = MATCH_name;
00992 unsigned BIcr =
00993 (MATCH_w_32_0 >> 18 & 0x7) ;
00994 unsigned reladdr =
00995 4 * (MATCH_w_32_0 >> 2 & 0x3fff)
00996 + addressToPC(MATCH_p);
00997 nextPC = 4 + MATCH_p;
00998
00999 #line 285 "frontend/machine/ppc/decoder.m"
01000
01001
01002 PPC_COND_JUMP(name, 4, reladdr, (BRANCH_TYPE)0, BIcr);
01003
01004
01005
01006
01007 }
01008
01009 break;
01010 default: assert(0);
01011 }
01012 break;
01013 default: assert(0);
01014 }
01015 break;
01016 case 18:
01017 if ((MATCH_w_32_0 >> 1 & 0x1) == 1)
01018 goto MATCH_label_a0;
01019 else
01020 if ((MATCH_w_32_0 & 0x1) == 1) {
01021 MATCH_name =
01022 MATCH_name_LK_8[(MATCH_w_32_0 & 0x1) ];
01023 {
01024 char *name = MATCH_name;
01025 unsigned reladdr =
01026 4 * sign_extend(
01027 (MATCH_w_32_0 >> 2 & 0xffffff) ,
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
01041
01042 newCall->setIsComputed(false);
01043
01044
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 }
01066 else {
01067 unsigned reladdr =
01068 4 * sign_extend((MATCH_w_32_0 >> 2 & 0xffffff) ,
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 }
01083 break;
01084 case 19:
01085 if (34 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01086 (MATCH_w_32_0 >> 1 & 0x3ff) < 129 ||
01087 130 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01088 (MATCH_w_32_0 >> 1 & 0x3ff) < 193 ||
01089 290 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01090 (MATCH_w_32_0 >> 1 & 0x3ff) < 417 ||
01091 450 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01092 (MATCH_w_32_0 >> 1 & 0x3ff) < 528 ||
01093 529 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01094 (MATCH_w_32_0 >> 1 & 0x3ff) < 1024)
01095 goto MATCH_label_a0;
01096 else
01097 switch((MATCH_w_32_0 >> 1 & 0x3ff) ) {
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) == 1)
01127 goto MATCH_label_a0;
01128 else
01129 if ((MATCH_w_32_0 >> 11 & 0x1f) == 0)
01130
01131 switch((MATCH_w_32_0 >> 16 & 0x3) ) {
01132 case 0:
01133
01134 switch((MATCH_w_32_0 >> 22 & 0xf)
01135 ) {
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 == 20) {
01141 MATCH_name = "ballr";
01142 goto MATCH_label_a2;
01143
01144 }
01145 else
01146 goto MATCH_label_a0;
01147
01148 break;
01149 case 2:
01150 MATCH_name =
01151 MATCH_name_BO4_10[(MATCH_w_32_0 >> 22 & 0xf)
01152 ];
01153 {
01154 char *name = MATCH_name;
01155 unsigned BIcr =
01156 (MATCH_w_32_0 >> 18 & 0x7)
01157 ;
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 ];
01179 {
01180 char *name = MATCH_name;
01181 unsigned BIcr =
01182 (MATCH_w_32_0 >> 18 & 0x7)
01183 ;
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 }
01203 break;
01204 case 1:
01205
01206 switch((MATCH_w_32_0 >> 22 & 0xf)
01207 ) {
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 == 20) {
01213 MATCH_name = "ballr";
01214 goto MATCH_label_a2;
01215
01216 }
01217 else
01218 goto MATCH_label_a0;
01219
01220 break;
01221 case 2:
01222 MATCH_name =
01223 MATCH_name_BO4_11[(MATCH_w_32_0 >> 22 & 0xf)
01224 ];
01225 {
01226 char *name = MATCH_name;
01227 unsigned BIcr =
01228 (MATCH_w_32_0 >> 18 & 0x7)
01229 ;
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 ];
01251 {
01252 char *name = MATCH_name;
01253 unsigned BIcr =
01254 (MATCH_w_32_0 >> 18 & 0x7)
01255 ;
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 }
01275 break;
01276 case 2:
01277
01278 switch((MATCH_w_32_0 >> 22 & 0xf)
01279 ) {
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 == 20) {
01285 MATCH_name = "ballr";
01286 goto MATCH_label_a2;
01287
01288 }
01289 else
01290 goto MATCH_label_a0;
01291
01292 break;
01293 case 2:
01294 MATCH_name =
01295 MATCH_name_BO4_12[(MATCH_w_32_0 >> 22 & 0xf)
01296 ];
01297 {
01298 char *name = MATCH_name;
01299 unsigned BIcr =
01300 (MATCH_w_32_0 >> 18 & 0x7)
01301 ;
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 ];
01323 {
01324 char *name = MATCH_name;
01325 unsigned BIcr =
01326 (MATCH_w_32_0 >> 18 & 0x7)
01327 ;
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 }
01347 break;
01348 case 3:
01349
01350 switch((MATCH_w_32_0 >> 22 & 0xf)
01351 ) {
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 == 20) {
01357 MATCH_name = "ballr";
01358 goto MATCH_label_a2;
01359
01360 }
01361 else
01362 goto MATCH_label_a0;
01363
01364 break;
01365 case 2:
01366 MATCH_name =
01367 MATCH_name_BO4_13[(MATCH_w_32_0 >> 22 & 0xf)
01368 ];
01369 {
01370 char *name = MATCH_name;
01371 unsigned BIcr =
01372 (MATCH_w_32_0 >> 18 & 0x7)
01373 ;
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 ];
01395 {
01396 char *name = MATCH_name;
01397 unsigned BIcr =
01398 (MATCH_w_32_0 >> 18 & 0x7)
01399 ;
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 }
01419 break;
01420 default: assert(0);
01421 }
01422 else
01423 goto MATCH_label_a0;
01424 break;
01425 case 33:
01426 if ((MATCH_w_32_0 & 0x1) == 0) {
01427 MATCH_name =
01428 MATCH_name_LK_8[(MATCH_w_32_0 & 0x1) ];
01429 goto MATCH_label_a3;
01430
01431 }
01432 else
01433 goto MATCH_label_a0;
01434
01435 break;
01436 case 129:
01437 if ((MATCH_w_32_0 & 0x1) == 0) {
01438 MATCH_name =
01439 MATCH_name_LK_14[(MATCH_w_32_0 & 0x1) ];
01440 goto MATCH_label_a3;
01441
01442 }
01443 else
01444 goto MATCH_label_a0;
01445
01446 break;
01447 case 193:
01448 if ((MATCH_w_32_0 & 0x1) == 0) {
01449 MATCH_name = "crxor";
01450 goto MATCH_label_a3;
01451
01452 }
01453 else
01454 goto MATCH_label_a0;
01455
01456 break;
01457 case 225:
01458 if ((MATCH_w_32_0 & 0x1) == 0) {
01459 MATCH_name = "crnand";
01460 goto MATCH_label_a3;
01461
01462 }
01463 else
01464 goto MATCH_label_a0;
01465
01466 break;
01467 case 257:
01468 if ((MATCH_w_32_0 & 0x1) == 0) {
01469 MATCH_name = "crand";
01470 goto MATCH_label_a3;
01471
01472 }
01473 else
01474 goto MATCH_label_a0;
01475
01476 break;
01477 case 289:
01478 if ((MATCH_w_32_0 & 0x1) == 0) {
01479 MATCH_name = "creqv";
01480 goto MATCH_label_a3;
01481
01482 }
01483 else
01484 goto MATCH_label_a0;
01485
01486 break;
01487 case 417:
01488 if ((MATCH_w_32_0 & 0x1) == 0) {
01489 MATCH_name = "crorc";
01490 goto MATCH_label_a3;
01491
01492 }
01493 else
01494 goto MATCH_label_a0;
01495
01496 break;
01497 case 449:
01498 if ((MATCH_w_32_0 & 0x1) == 0) {
01499 MATCH_name = "cror";
01500 goto MATCH_label_a3;
01501
01502 }
01503 else
01504 goto MATCH_label_a0;
01505
01506 break;
01507 case 528:
01508 if ((MATCH_w_32_0 >> 21 & 0x1f) == 20)
01509 if ((MATCH_w_32_0 >> 11 & 0x1f) == 0)
01510 if ((MATCH_w_32_0 & 0x1) == 1) {
01511 MATCH_name =
01512 MATCH_name_LK_14[(MATCH_w_32_0 & 0x1) ];
01513 {
01514 char *name = MATCH_name;
01515 unsigned BIcr =
01516 (MATCH_w_32_0 >> 18 & 0x7) ;
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 }
01534 else {
01535 MATCH_name = "balctr";
01536 {
01537 char *name = MATCH_name;
01538 unsigned BIcr =
01539 (MATCH_w_32_0 >> 18 & 0x7) ;
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 }
01557 else
01558 goto MATCH_label_a0;
01559 else
01560 goto MATCH_label_a0;
01561 break;
01562 default: assert(0);
01563 }
01564 break;
01565 case 20:
01566 MATCH_name = MATCH_name_Rc_22[(MATCH_w_32_0 & 0x1) ];
01567 goto MATCH_label_a4;
01568
01569 break;
01570 case 21:
01571 MATCH_name = MATCH_name_Rc_23[(MATCH_w_32_0 & 0x1) ];
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) ];
01578 {
01579 char *name = MATCH_name;
01580 unsigned ra = (MATCH_w_32_0 >> 21 & 0x1f) ;
01581 unsigned rd = (MATCH_w_32_0 >> 16 & 0x1f) ;
01582 unsigned uimm = (MATCH_w_32_0 & 0xffff) ;
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) == 1)
01598 if (61 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01599 (MATCH_w_32_0 >> 1 & 0x3ff) < 124 ||
01600 151 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01601 (MATCH_w_32_0 >> 1 & 0x3ff) < 214 ||
01602 215 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01603 (MATCH_w_32_0 >> 1 & 0x3ff) < 284 ||
01604 317 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01605 (MATCH_w_32_0 >> 1 & 0x3ff) < 412 ||
01606 477 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01607 (MATCH_w_32_0 >> 1 & 0x3ff) < 536 ||
01608 540 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01609 (MATCH_w_32_0 >> 1 & 0x3ff) < 792 ||
01610 825 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01611 (MATCH_w_32_0 >> 1 & 0x3ff) < 922 ||
01612 987 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01613 (MATCH_w_32_0 >> 1 & 0x3ff) < 1024)
01614 goto MATCH_label_a0;
01615 else
01616 switch((MATCH_w_32_0 >> 1 & 0x3ff) ) {
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 ];
01668 goto MATCH_label_a8;
01669
01670 break;
01671 case 26:
01672 if ((MATCH_w_32_0 >> 11 & 0x1f) == 0) {
01673 MATCH_name = "cntlzwq";
01674 goto MATCH_label_a9;
01675
01676 }
01677 else
01678 goto MATCH_label_a0;
01679
01680 break;
01681 case 58:
01682 if ((MATCH_w_32_0 >> 11 & 0x1f) == 0) {
01683 MATCH_name = "cntlzdq";
01684 goto MATCH_label_a9;
01685
01686 }
01687 else
01688 goto MATCH_label_a0;
01689
01690 break;
01691 case 150: case 214:
01692 MATCH_name = MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff)
01693 ];
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 ];
01700 {
01701 char *name = MATCH_name;
01702 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
01703 unsigned rs = (MATCH_w_32_0 >> 21 & 0x1f) ;
01704 unsigned uimm = (MATCH_w_32_0 >> 11 & 0x1f) ;
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) == 0) {
01722 MATCH_name = "extshq";
01723 goto MATCH_label_a9;
01724
01725 }
01726 else
01727 goto MATCH_label_a0;
01728
01729 break;
01730 case 954:
01731 if ((MATCH_w_32_0 >> 11 & 0x1f) == 0) {
01732 MATCH_name = "extsbq";
01733 goto MATCH_label_a9;
01734
01735 }
01736 else
01737 goto MATCH_label_a0;
01738
01739 break;
01740 case 986:
01741 if ((MATCH_w_32_0 >> 11 & 0x1f) == 0) {
01742 MATCH_name = "extswq";
01743 goto MATCH_label_a9;
01744
01745 }
01746 else
01747 goto MATCH_label_a0;
01748
01749 break;
01750 default: assert(0);
01751 }
01752 else
01753 if ((MATCH_w_32_0 >> 11 & 0x1f) == 0)
01754 if ((MATCH_w_32_0 >> 10 & 0x1) == 1)
01755 if (477 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01756 (MATCH_w_32_0 >> 1 & 0x3ff) < 533 ||
01757 825 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01758 (MATCH_w_32_0 >> 1 & 0x3ff) < 918 ||
01759 987 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
01760 (MATCH_w_32_0 >> 1 & 0x3ff) < 1024)
01761 goto MATCH_label_a0;
01762 else
01763 switch((MATCH_w_32_0 >> 1 & 0x3ff) ) {
01764 case 0:
01765 if ((MATCH_w_32_0 >> 22 & 0x1) == 0) {
01766 MATCH_name = "cmp";
01767 goto MATCH_label_a5;
01768
01769 }
01770 else
01771 goto MATCH_label_a0;
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) == 0) {
01929 MATCH_name = "mfcr";
01930 goto MATCH_label_a6;
01931
01932 }
01933 else
01934 goto MATCH_label_a0;
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 ];
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 ];
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 ];
01960 goto MATCH_label_a9;
01961
01962 break;
01963 case 32:
01964 if ((MATCH_w_32_0 >> 22 & 0x1) == 0) {
01965 MATCH_name = "cmpl";
01966 goto MATCH_label_a5;
01967
01968 }
01969 else
01970 goto MATCH_label_a0;
01971
01972 break;
01973 case 83:
01974 if ((MATCH_w_32_0 >> 16 & 0x1f) == 0) {
01975 MATCH_name = "mfmsr";
01976 goto MATCH_label_a6;
01977
01978 }
01979 else
01980 goto MATCH_label_a0;
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 ];
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 ];
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 ];
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 ];
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 ];
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 ];
02024 goto MATCH_label_a15;
02025
02026 break;
02027 default: assert(0);
02028 }
02029 else
02030 if (41 <= (MATCH_w_32_0 >> 1 & 0x1ff) &&
02031 (MATCH_w_32_0 >> 1 & 0x1ff) < 104 ||
02032 139 <= (MATCH_w_32_0 >> 1 & 0x1ff) &&
02033 (MATCH_w_32_0 >> 1 & 0x1ff) < 200 ||
02034 267 <= (MATCH_w_32_0 >> 1 & 0x1ff) &&
02035 (MATCH_w_32_0 >> 1 & 0x1ff) < 457)
02036 if (477 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
02037 (MATCH_w_32_0 >> 1 & 0x3ff) < 533 ||
02038 825 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
02039 (MATCH_w_32_0 >> 1 & 0x3ff) < 918 ||
02040 987 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
02041 (MATCH_w_32_0 >> 1 & 0x3ff) < 1024)
02042 goto MATCH_label_a0;
02043 else
02044 switch((MATCH_w_32_0 >> 1 & 0x3ff) ) {
02045 case 0:
02046 if ((MATCH_w_32_0 >> 22 & 0x1) == 0) {
02047 MATCH_name = "cmp";
02048 goto MATCH_label_a5;
02049
02050 }
02051 else
02052 goto MATCH_label_a0;
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) == 0) {
02210 MATCH_name = "mfcr";
02211 goto MATCH_label_a6;
02212
02213 }
02214 else
02215 goto MATCH_label_a0;
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 ];
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 ];
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 ];
02241 goto MATCH_label_a9;
02242
02243 break;
02244 case 32:
02245 if ((MATCH_w_32_0 >> 22 & 0x1) == 0) {
02246 MATCH_name = "cmpl";
02247 goto MATCH_label_a5;
02248
02249 }
02250 else
02251 goto MATCH_label_a0;
02252
02253 break;
02254 case 83:
02255 if ((MATCH_w_32_0 >> 16 & 0x1f) == 0) {
02256 MATCH_name = "mfmsr";
02257 goto MATCH_label_a6;
02258
02259 }
02260 else
02261 goto MATCH_label_a0;
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 ];
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 ];
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 ];
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 ];
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 ];
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 ];
02305 goto MATCH_label_a15;
02306
02307 break;
02308 default: assert(0);
02309 }
02310 else
02311 switch((MATCH_w_32_0 >> 1 & 0x1ff) ) {
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 &&
02349 (MATCH_w_32_0 >> 1 & 0x3ff) < 533 ||
02350 825 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
02351 (MATCH_w_32_0 >> 1 & 0x3ff) < 918 ||
02352 987 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
02353 (MATCH_w_32_0 >> 1 & 0x3ff) < 1024)
02354 goto MATCH_label_a0;
02355 else
02356 switch((MATCH_w_32_0 >> 1 & 0x3ff) ) {
02357 case 0:
02358 if ((MATCH_w_32_0 >> 22 & 0x1)
02359 == 0) {
02360 MATCH_name = "cmp";
02361 goto MATCH_label_a5;
02362
02363 }
02364 else
02365 goto MATCH_label_a0;
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 == 0) {
02527 MATCH_name = "mfcr";
02528 goto MATCH_label_a6;
02529
02530 }
02531 else
02532 goto MATCH_label_a0;
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 ];
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 ];
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 ];
02558 goto MATCH_label_a9;
02559
02560 break;
02561 case 32:
02562 if ((MATCH_w_32_0 >> 22 & 0x1)
02563 == 0) {
02564 MATCH_name = "cmpl";
02565 goto MATCH_label_a5;
02566
02567 }
02568 else
02569 goto MATCH_label_a0;
02570
02571 break;
02572 case 83:
02573 if ((MATCH_w_32_0 >> 16 & 0x1f)
02574 == 0) {
02575 MATCH_name = "mfmsr";
02576 goto MATCH_label_a6;
02577
02578 }
02579 else
02580 goto MATCH_label_a0;
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 ];
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 ];
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 ];
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 ];
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 ];
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 ];
02624 goto MATCH_label_a15;
02625
02626 break;
02627 default: assert(0);
02628 }
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 ];
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 ];
02643 {
02644 char *name = MATCH_name;
02645 unsigned ra =
02646 (MATCH_w_32_0 >> 16 & 0x1f) ;
02647 unsigned rd =
02648 (MATCH_w_32_0 >> 21 & 0x1f) ;
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 }
02664 else
02665 if ((MATCH_w_32_0 >> 10 & 0x1) == 1)
02666 if (477 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
02667 (MATCH_w_32_0 >> 1 & 0x3ff) < 533 ||
02668 825 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
02669 (MATCH_w_32_0 >> 1 & 0x3ff) < 918 ||
02670 919 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
02671 (MATCH_w_32_0 >> 1 & 0x3ff) < 983 ||
02672 984 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
02673 (MATCH_w_32_0 >> 1 & 0x3ff) < 1024)
02674 goto MATCH_label_a0;
02675 else
02676 switch((MATCH_w_32_0 >> 1 & 0x3ff) ) {
02677 case 0:
02678 if ((MATCH_w_32_0 >> 22 & 0x1) == 0) {
02679 MATCH_name = "cmp";
02680 goto MATCH_label_a5;
02681
02682 }
02683 else
02684 goto MATCH_label_a0;
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 ];
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 ];
02844 goto MATCH_label_a8;
02845
02846 break;
02847 case 32:
02848 if ((MATCH_w_32_0 >> 22 & 0x1) == 0) {
02849 MATCH_name = "cmpl";
02850 goto MATCH_label_a5;
02851
02852 }
02853 else
02854 goto MATCH_label_a0;
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 ];
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 ];
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 ];
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 ];
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 ];
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 ];
02898 goto MATCH_label_a15;
02899
02900 break;
02901 default: assert(0);
02902 }
02903 else
02904 if (41 <= (MATCH_w_32_0 >> 1 & 0x1ff) &&
02905 (MATCH_w_32_0 >> 1 & 0x1ff) < 136 ||
02906 139 <= (MATCH_w_32_0 >> 1 & 0x1ff) &&
02907 (MATCH_w_32_0 >> 1 & 0x1ff) < 233 ||
02908 267 <= (MATCH_w_32_0 >> 1 & 0x1ff) &&
02909 (MATCH_w_32_0 >> 1 & 0x1ff) < 457)
02910 if (477 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
02911 (MATCH_w_32_0 >> 1 & 0x3ff) < 533 ||
02912 825 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
02913 (MATCH_w_32_0 >> 1 & 0x3ff) < 918 ||
02914 919 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
02915 (MATCH_w_32_0 >> 1 & 0x3ff) < 983 ||
02916 984 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
02917 (MATCH_w_32_0 >> 1 & 0x3ff) < 1024)
02918 goto MATCH_label_a0;
02919 else
02920 switch((MATCH_w_32_0 >> 1 & 0x3ff) ) {
02921 case 0:
02922 if ((MATCH_w_32_0 >> 22 & 0x1) == 0) {
02923 MATCH_name = "cmp";
02924 goto MATCH_label_a5;
02925
02926 }
02927 else
02928 goto MATCH_label_a0;
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 ];
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 ];
03088 goto MATCH_label_a8;
03089
03090 break;
03091 case 32:
03092 if ((MATCH_w_32_0 >> 22 & 0x1) == 0) {
03093 MATCH_name = "cmpl";
03094 goto MATCH_label_a5;
03095
03096 }
03097 else
03098 goto MATCH_label_a0;
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 ];
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 ];
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 ];
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 ];
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 ];
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 ];
03142 goto MATCH_label_a15;
03143
03144 break;
03145 default: assert(0);
03146 }
03147 else
03148 switch((MATCH_w_32_0 >> 1 & 0x1ff) ) {
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 &&
03174 (MATCH_w_32_0 >> 1 & 0x3ff) < 533 ||
03175 825 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
03176 (MATCH_w_32_0 >> 1 & 0x3ff) < 918 ||
03177 919 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
03178 (MATCH_w_32_0 >> 1 & 0x3ff) < 983 ||
03179 984 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
03180 (MATCH_w_32_0 >> 1 & 0x3ff) < 1024)
03181 goto MATCH_label_a0;
03182 else
03183 switch((MATCH_w_32_0 >> 1 & 0x3ff) ) {
03184 case 0:
03185 if ((MATCH_w_32_0 >> 22 & 0x1)
03186 == 0) {
03187 MATCH_name = "cmp";
03188 goto MATCH_label_a5;
03189
03190 }
03191 else
03192 goto MATCH_label_a0;
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 ];
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 ];
03355 goto MATCH_label_a8;
03356
03357 break;
03358 case 32:
03359 if ((MATCH_w_32_0 >> 22 & 0x1)
03360 == 0) {
03361 MATCH_name = "cmpl";
03362 goto MATCH_label_a5;
03363
03364 }
03365 else
03366 goto MATCH_label_a0;
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 ];
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 ];
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 ];
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 ];
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 ];
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 ];
03410 goto MATCH_label_a15;
03411
03412 break;
03413 default: assert(0);
03414 }
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 ];
03422 goto MATCH_label_a16;
03423
03424 break;
03425 default: assert(0);
03426 }
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) ];
03432 {
03433 char *name = MATCH_name;
03434 int d =
03435 sign_extend((MATCH_w_32_0 & 0xffff) , 16);
03436 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
03437 unsigned rd = (MATCH_w_32_0 >> 21 & 0x1f) ;
03438 nextPC = 4 + MATCH_p;
03439
03440 #line 152 "frontend/machine/ppc/decoder.m"
03441
03442
03443 if (strcmp(name, "lmw") == 0) {
03444
03445
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
03454
03455 #if BCCTR_LONG // Prefer to see bltctr instead of bcctr 12,0
03456
03457
03458
03459
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) ];
03482 {
03483 char *name = MATCH_name;
03484 int d =
03485 sign_extend((MATCH_w_32_0 & 0xffff) , 16);
03486 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
03487 unsigned rs = (MATCH_w_32_0 >> 21 & 0x1f) ;
03488 nextPC = 4 + MATCH_p;
03489
03490 #line 130 "frontend/machine/ppc/decoder.m"
03491
03492
03493 if (strcmp(name, "stmw") == 0) {
03494
03495
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) ];
03514 {
03515 char *name = MATCH_name;
03516 int d =
03517 sign_extend((MATCH_w_32_0 & 0xffff) , 16);
03518 unsigned fd = (MATCH_w_32_0 >> 21 & 0x1f) ;
03519 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
03520 nextPC = 4 + MATCH_p;
03521
03522 #line 243 "frontend/machine/ppc/decoder.m"
03523
03524
03525 stmts = instantiate(pc, name, DIS_FD, DIS_DISP, DIS_RA);
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) ];
03538 {
03539 char *name = MATCH_name;
03540 int d =
03541 sign_extend((MATCH_w_32_0 & 0xffff) , 16);
03542 unsigned fs = (MATCH_w_32_0 >> 21 & 0x1f) ;
03543 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
03544 nextPC = 4 + MATCH_p;
03545
03546 #line 249 "frontend/machine/ppc/decoder.m"
03547
03548
03549 stmts = instantiate(pc, name, DIS_FS, DIS_DISP, DIS_RA);
03550
03551
03552
03553
03554
03555
03556 }
03557
03558 break;
03559 case 59:
03560
03561 switch((MATCH_w_32_0 >> 1 & 0x1f) ) {
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) &&
03569 (MATCH_w_32_0 >> 6 & 0x1f) < 32)
03570 goto MATCH_label_a0;
03571 else {
03572 MATCH_name =
03573 MATCH_name_Rc_36[(MATCH_w_32_0 & 0x1) ];
03574 goto MATCH_label_a17;
03575
03576 }
03577
03578 break;
03579 case 20:
03580 if (1 <= (MATCH_w_32_0 >> 6 & 0x1f) &&
03581 (MATCH_w_32_0 >> 6 & 0x1f) < 32)
03582 goto MATCH_label_a0;
03583 else {
03584 MATCH_name =
03585 MATCH_name_Rc_37[(MATCH_w_32_0 & 0x1) ];
03586 goto MATCH_label_a17;
03587
03588 }
03589
03590 break;
03591 case 21:
03592 if (1 <= (MATCH_w_32_0 >> 6 & 0x1f) &&
03593 (MATCH_w_32_0 >> 6 & 0x1f) < 32)
03594 goto MATCH_label_a0;
03595 else {
03596 MATCH_name =
03597 MATCH_name_Rc_38[(MATCH_w_32_0 & 0x1) ];
03598 goto MATCH_label_a17;
03599
03600 }
03601
03602 break;
03603 default: assert(0);
03604 }
03605 break;
03606 case 63:
03607 if ((MATCH_w_32_0 & 0x1) == 1)
03608 if ((MATCH_w_32_0 >> 16 & 0x1f) == 0)
03609 if (73 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
03610 (MATCH_w_32_0 >> 1 & 0x3ff) < 136 ||
03611 137 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
03612 (MATCH_w_32_0 >> 1 & 0x3ff) < 264 ||
03613 265 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
03614 (MATCH_w_32_0 >> 1 & 0x3ff) < 814 ||
03615 847 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
03616 (MATCH_w_32_0 >> 1 & 0x3ff) < 1024)
03617
03618 switch((MATCH_w_32_0 >> 1 & 0x1f) ) {
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) == 0) {
03627 MATCH_name = "fdivq";
03628 goto MATCH_label_a17;
03629
03630 }
03631 else
03632 goto MATCH_label_a0;
03633
03634 break;
03635 case 20:
03636 if ((MATCH_w_32_0 >> 6 & 0x1f) == 0) {
03637 MATCH_name = "fsubq";
03638 goto MATCH_label_a17;
03639
03640 }
03641 else
03642 goto MATCH_label_a0;
03643
03644 break;
03645 case 21:
03646 if ((MATCH_w_32_0 >> 6 & 0x1f) == 0) {
03647 MATCH_name = "faddq";
03648 goto MATCH_label_a17;
03649
03650 }
03651 else
03652 goto MATCH_label_a0;
03653
03654 break;
03655 default: assert(0);
03656 }
03657 else
03658 switch((MATCH_w_32_0 >> 1 & 0x3ff) ) {
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) ) {
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) == 0) {
03685 MATCH_name = "fdivq";
03686 goto MATCH_label_a17;
03687
03688 }
03689 else
03690 goto MATCH_label_a0;
03691
03692 break;
03693 case 20:
03694 if ((MATCH_w_32_0 >> 6 & 0x1f) == 0) {
03695 MATCH_name = "fsubq";
03696 goto MATCH_label_a17;
03697
03698 }
03699 else
03700 goto MATCH_label_a0;
03701
03702 break;
03703 case 21:
03704 if ((MATCH_w_32_0 >> 6 & 0x1f) == 0) {
03705 MATCH_name = "faddq";
03706 goto MATCH_label_a17;
03707
03708 }
03709 else
03710 goto MATCH_label_a0;
03711
03712 break;
03713 default: assert(0);
03714 }
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 ];
03721 goto MATCH_label_a19;
03722
03723 break;
03724 default: assert(0);
03725 }
03726 else
03727
03728 switch((MATCH_w_32_0 >> 1 & 0x1f) ) {
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) == 0) {
03737 MATCH_name = "fdivq";
03738 goto MATCH_label_a17;
03739
03740 }
03741 else
03742 goto MATCH_label_a0;
03743
03744 break;
03745 case 20:
03746 if ((MATCH_w_32_0 >> 6 & 0x1f) == 0) {
03747 MATCH_name = "fsubq";
03748 goto MATCH_label_a17;
03749
03750 }
03751 else
03752 goto MATCH_label_a0;
03753
03754 break;
03755 case 21:
03756 if ((MATCH_w_32_0 >> 6 & 0x1f) == 0) {
03757 MATCH_name = "faddq";
03758 goto MATCH_label_a17;
03759
03760 }
03761 else
03762 goto MATCH_label_a0;
03763
03764 break;
03765 default: assert(0);
03766 }
03767 else
03768 if ((MATCH_w_32_0 >> 16 & 0x1f) == 0)
03769 if (73 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
03770 (MATCH_w_32_0 >> 1 & 0x3ff) < 136 ||
03771 137 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
03772 (MATCH_w_32_0 >> 1 & 0x3ff) < 264 ||
03773 265 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
03774 (MATCH_w_32_0 >> 1 & 0x3ff) < 814 ||
03775 847 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
03776 (MATCH_w_32_0 >> 1 & 0x3ff) < 1024)
03777
03778 switch((MATCH_w_32_0 >> 1 & 0x1f) ) {
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) == 0) {
03787 MATCH_name = "fdiv";
03788 goto MATCH_label_a17;
03789
03790 }
03791 else
03792 goto MATCH_label_a0;
03793
03794 break;
03795 case 20:
03796 if ((MATCH_w_32_0 >> 6 & 0x1f) == 0) {
03797 MATCH_name = "fsub";
03798 goto MATCH_label_a17;
03799
03800 }
03801 else
03802 goto MATCH_label_a0;
03803
03804 break;
03805 case 21:
03806 if ((MATCH_w_32_0 >> 6 & 0x1f) == 0) {
03807 MATCH_name = "fadd";
03808 goto MATCH_label_a17;
03809
03810 }
03811 else
03812 goto MATCH_label_a0;
03813
03814 break;
03815 default: assert(0);
03816 }
03817 else
03818 switch((MATCH_w_32_0 >> 1 & 0x3ff) ) {
03819 case 0:
03820 if ((MATCH_w_32_0 >> 6 & 0x1f) == 0)
03821 if ((MATCH_w_32_0 >> 21 & 0x1) == 1)
03822 if ((MATCH_w_32_0 >> 1 & 0x1f)
03823 == 18 ||
03824 20 <= (MATCH_w_32_0 >> 1 & 0x1f) &&
03825 (MATCH_w_32_0 >> 1 & 0x1f) < 22) {
03826 MATCH_name =
03827 MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f)
03828 ];
03829 goto MATCH_label_a17;
03830
03831 }
03832 else
03833 goto MATCH_label_a0;
03834 else
03835 if ((MATCH_w_32_0 >> 22 & 0x1) == 1)
03836 if ((MATCH_w_32_0 >> 1 & 0x1f)
03837 == 18 ||
03838 20 <= (MATCH_w_32_0 >> 1 & 0x1f)
03839 &&
03840 (MATCH_w_32_0 >> 1 & 0x1f) < 22) {
03841 MATCH_name =
03842 MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f)
03843 ];
03844 goto MATCH_label_a17;
03845
03846 }
03847 else
03848 goto MATCH_label_a0;
03849 else {
03850 MATCH_name = "fcmpu";
03851 goto MATCH_label_a18;
03852
03853 }
03854 else
03855 if ((MATCH_w_32_0 >> 21 & 0x1) == 0 &&
03856 (MATCH_w_32_0 >> 22 & 0x1) == 1 ||
03857 (MATCH_w_32_0 >> 21 & 0x1) == 1)
03858 goto MATCH_label_a0;
03859 else {
03860 MATCH_name = "fcmpu";
03861 goto MATCH_label_a18;
03862
03863 }
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) ) {
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) == 0) {
03891 MATCH_name = "fdiv";
03892 goto MATCH_label_a17;
03893
03894 }
03895 else
03896 goto MATCH_label_a0;
03897
03898 break;
03899 case 20:
03900 if ((MATCH_w_32_0 >> 6 & 0x1f) == 0) {
03901 MATCH_name = "fsub";
03902 goto MATCH_label_a17;
03903
03904 }
03905 else
03906 goto MATCH_label_a0;
03907
03908 break;
03909 case 21:
03910 if ((MATCH_w_32_0 >> 6 & 0x1f) == 0) {
03911 MATCH_name = "fadd";
03912 goto MATCH_label_a17;
03913
03914 }
03915 else
03916 goto MATCH_label_a0;
03917
03918 break;
03919 default: assert(0);
03920 }
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 ];
03927 goto MATCH_label_a19;
03928
03929 break;
03930 case 32:
03931 if ((MATCH_w_32_0 >> 6 & 0x1f) == 0)
03932 if ((MATCH_w_32_0 >> 21 & 0x1) == 1)
03933 if ((MATCH_w_32_0 >> 1 & 0x1f)
03934 == 18 ||
03935 20 <= (MATCH_w_32_0 >> 1 & 0x1f) &&
03936 (MATCH_w_32_0 >> 1 & 0x1f) < 22) {
03937 MATCH_name =
03938 MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f)
03939 ];
03940 goto MATCH_label_a17;
03941
03942 }
03943 else
03944 goto MATCH_label_a0;
03945 else
03946 if ((MATCH_w_32_0 >> 22 & 0x1) == 1)
03947 if ((MATCH_w_32_0 >> 1 & 0x1f)
03948 == 18 ||
03949 20 <= (MATCH_w_32_0 >> 1 & 0x1f)
03950 &&
03951 (MATCH_w_32_0 >> 1 & 0x1f) < 22) {
03952 MATCH_name =
03953 MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f)
03954 ];
03955 goto MATCH_label_a17;
03956
03957 }
03958 else
03959 goto MATCH_label_a0;
03960 else {
03961 MATCH_name = "fcmpo";
03962 goto MATCH_label_a18;
03963
03964 }
03965 else
03966 if ((MATCH_w_32_0 >> 21 & 0x1) == 0 &&
03967 (MATCH_w_32_0 >> 22 & 0x1) == 1 ||
03968 (MATCH_w_32_0 >> 21 & 0x1) == 1)
03969 goto MATCH_label_a0;
03970 else {
03971 MATCH_name = "fcmpo";
03972 goto MATCH_label_a18;
03973
03974 }
03975 break;
03976 default: assert(0);
03977 }
03978 else
03979 if ((MATCH_w_32_0 >> 6 & 0x1f) == 0)
03980 if ((MATCH_w_32_0 >> 21 & 0x1) == 1)
03981 if ((MATCH_w_32_0 >> 1 & 0x1f) == 18 ||
03982 20 <= (MATCH_w_32_0 >> 1 & 0x1f) &&
03983 (MATCH_w_32_0 >> 1 & 0x1f) < 22) {
03984 MATCH_name = MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f)
03985 ];
03986 goto MATCH_label_a17;
03987
03988 }
03989 else
03990 goto MATCH_label_a0;
03991 else
03992 if ((MATCH_w_32_0 >> 22 & 0x1) == 1)
03993 if ((MATCH_w_32_0 >> 1 & 0x1f) == 18 ||
03994 20 <= (MATCH_w_32_0 >> 1 & 0x1f) &&
03995 (MATCH_w_32_0 >> 1 & 0x1f) < 22) {
03996 MATCH_name =
03997 MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f)
03998 ];
03999 goto MATCH_label_a17;
04000
04001 }
04002 else
04003 goto MATCH_label_a0;
04004 else
04005 if (33 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
04006 (MATCH_w_32_0 >> 1 & 0x3ff) < 1024)
04007 if ((MATCH_w_32_0 >> 1 & 0x1f) == 18 ||
04008 20 <= (MATCH_w_32_0 >> 1 & 0x1f) &&
04009 (MATCH_w_32_0 >> 1 & 0x1f) < 22) {
04010 MATCH_name =
04011 MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f)
04012 ];
04013 goto MATCH_label_a17;
04014
04015 }
04016 else
04017 goto MATCH_label_a0;
04018 else
04019 switch((MATCH_w_32_0 >> 1 & 0x3ff) ) {
04020 case 0: case 32:
04021 MATCH_name =
04022 MATCH_name_Xo1_26[(MATCH_w_32_0 >> 1 & 0x3ff)
04023 ];
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 == 18 ||
04035 20 <= (MATCH_w_32_0 >> 1 & 0x1f)
04036 &&
04037 (MATCH_w_32_0 >> 1 & 0x1f) < 22) {
04038 MATCH_name =
04039 MATCH_name_Xo5_40[(MATCH_w_32_0 >> 1 & 0x1f)
04040 ];
04041 goto MATCH_label_a17;
04042
04043 }
04044 else
04045 goto MATCH_label_a0;
04046
04047 break;
04048 default: assert(0);
04049 }
04050 else
04051 if (33 <= (MATCH_w_32_0 >> 1 & 0x3ff) &&
04052 (MATCH_w_32_0 >> 1 & 0x3ff) < 1024)
04053 goto MATCH_label_a0;
04054 else
04055 switch((MATCH_w_32_0 >> 1 & 0x3ff) ) {
04056 case 0:
04057 if ((MATCH_w_32_0 >> 21 & 0x1) == 0 &&
04058 (MATCH_w_32_0 >> 22 & 0x1) == 1 ||
04059 (MATCH_w_32_0 >> 21 & 0x1) == 1)
04060 goto MATCH_label_a0;
04061 else {
04062 MATCH_name = "fcmpu";
04063 goto MATCH_label_a18;
04064
04065 }
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) == 0 &&
04076 (MATCH_w_32_0 >> 22 & 0x1) == 1 ||
04077 (MATCH_w_32_0 >> 21 & 0x1) == 1)
04078 goto MATCH_label_a0;
04079 else {
04080 MATCH_name = "fcmpo";
04081 goto MATCH_label_a18;
04082
04083 }
04084
04085 break;
04086 default: assert(0);
04087 }
04088 break;
04089 default: assert(0);
04090 }
04091
04092 }goto MATCH_finished_a;
04093
04094 MATCH_label_a0: (void)0;
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;
04113 {
04114 unsigned BIcr = (MATCH_w_32_0 >> 18 & 0x7) ;
04115 unsigned reladdr =
04116 4 * (MATCH_w_32_0 >> 2 & 0x3fff) + 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
04129
04130
04131
04132
04133
04134
04135 }
04136 goto MATCH_finished_a;
04137
04138 MATCH_label_a2: (void)0;
04139 {
04140 char *name = MATCH_name;
04141 unsigned BIcr = (MATCH_w_32_0 >> 18 & 0x7) ;
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
04158
04159
04160
04161
04162 }
04163 goto MATCH_finished_a;
04164
04165 MATCH_label_a3: (void)0;
04166 {
04167 char *name = MATCH_name;
04168 unsigned crbA = (MATCH_w_32_0 >> 16 & 0x1f) ;
04169 unsigned crbB = (MATCH_w_32_0 >> 11 & 0x1f) ;
04170 unsigned crbD = (MATCH_w_32_0 >> 21 & 0x1f) ;
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;
04187 {
04188 char *name = MATCH_name;
04189 unsigned beg = (MATCH_w_32_0 >> 6 & 0x1f) ;
04190 unsigned end = (MATCH_w_32_0 >> 1 & 0x1f) ;
04191 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
04192 unsigned rs = (MATCH_w_32_0 >> 21 & 0x1f) ;
04193 unsigned uimm = (MATCH_w_32_0 >> 11 & 0x1f) ;
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;
04212 {
04213 char *name = MATCH_name;
04214 unsigned crfd = (MATCH_w_32_0 >> 23 & 0x7) ;
04215 unsigned l = (MATCH_w_32_0 >> 21 & 0x1) ;
04216 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
04217 unsigned rb = (MATCH_w_32_0 >> 11 & 0x1f) ;
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;
04234 {
04235 char *name = MATCH_name;
04236 unsigned rd = (MATCH_w_32_0 >> 21 & 0x1f) ;
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;
04253 {
04254 char *name = MATCH_name;
04255 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
04256 unsigned rb = (MATCH_w_32_0 >> 11 & 0x1f) ;
04257 unsigned rd = (MATCH_w_32_0 >> 21 & 0x1f) ;
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;
04272 {
04273 char *name = MATCH_name;
04274 unsigned ra = (MATCH_w_32_0 >> 21 & 0x1f) ;
04275 unsigned rb = (MATCH_w_32_0 >> 11 & 0x1f) ;
04276 unsigned rd = (MATCH_w_32_0 >> 16 & 0x1f) ;
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;
04291 {
04292 char *name = MATCH_name;
04293 unsigned ra = (MATCH_w_32_0 >> 21 & 0x1f) ;
04294 unsigned rd = (MATCH_w_32_0 >> 16 & 0x1f) ;
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
04303
04304
04305
04306
04307
04308
04309
04310
04311 }
04312 goto MATCH_finished_a;
04313
04314 MATCH_label_a10: (void)0;
04315 {
04316 char *name = MATCH_name;
04317 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
04318 unsigned rb = (MATCH_w_32_0 >> 11 & 0x1f) ;
04319 unsigned rd = (MATCH_w_32_0 >> 21 & 0x1f) ;
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
04328
04329
04330
04331
04332 }
04333 goto MATCH_finished_a;
04334
04335 MATCH_label_a11: (void)0;
04336 {
04337 char *name = MATCH_name;
04338 unsigned rd = (MATCH_w_32_0 >> 21 & 0x1f) ;
04339 unsigned uimm =
04340 ((MATCH_w_32_0 >> 11 & 0x1f) << 5) +
04341 (MATCH_w_32_0 >> 16 & 0x1f) ;
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;
04356 {
04357 char *name = MATCH_name;
04358 unsigned rs = (MATCH_w_32_0 >> 21 & 0x1f) ;
04359 unsigned uimm =
04360 ((MATCH_w_32_0 >> 11 & 0x1f) << 5) +
04361 (MATCH_w_32_0 >> 16 & 0x1f) ;
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;
04398 {
04399 char *name = MATCH_name;
04400 unsigned fd = (MATCH_w_32_0 >> 21 & 0x1f) ;
04401 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
04402 unsigned rb = (MATCH_w_32_0 >> 11 & 0x1f) ;
04403 nextPC = 4 + MATCH_p;
04404
04405 #line 246 "frontend/machine/ppc/decoder.m"
04406
04407
04408 stmts = instantiate(pc, name, DIS_FD, DIS_INDEX, DIS_RA);
04409
04410
04411
04412
04413
04414
04415 }
04416 goto MATCH_finished_a;
04417
04418 MATCH_label_a14: (void)0;
04419 {
04420 char *name = MATCH_name;
04421 unsigned fs = (MATCH_w_32_0 >> 21 & 0x1f) ;
04422 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
04423 unsigned rb = (MATCH_w_32_0 >> 11 & 0x1f) ;
04424 nextPC = 4 + MATCH_p;
04425
04426 #line 252 "frontend/machine/ppc/decoder.m"
04427
04428
04429 stmts = instantiate(pc, name, DIS_FS, DIS_INDEX, DIS_RA);
04430
04431
04432
04433
04434
04435
04436
04437
04438 }
04439 goto MATCH_finished_a;
04440
04441 MATCH_label_a15: (void)0;
04442 {
04443 char *name = MATCH_name;
04444 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
04445 unsigned rs = (MATCH_w_32_0 >> 21 & 0x1f) ;
04446 unsigned uimm = (MATCH_w_32_0 >> 11 & 0x1f) ;
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;
04461 {
04462 char *name = MATCH_name;
04463 unsigned ra = (MATCH_w_32_0 >> 16 & 0x1f) ;
04464 unsigned rb = (MATCH_w_32_0 >> 11 & 0x1f) ;
04465 unsigned rd = (MATCH_w_32_0 >> 21 & 0x1f) ;
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;
04480 {
04481 char *name = MATCH_name;
04482 unsigned fa = (MATCH_w_32_0 >> 16 & 0x1f) ;
04483 unsigned fb = (MATCH_w_32_0 >> 11 & 0x1f) ;
04484 unsigned fd = (MATCH_w_32_0 >> 21 & 0x1f) ;
04485 nextPC = 4 + MATCH_p;
04486
04487 #line 262 "frontend/machine/ppc/decoder.m"
04488
04489
04490 stmts = instantiate(pc, name, DIS_FD, DIS_FA, DIS_FB);
04491
04492
04493
04494
04495
04496
04497
04498
04499
04500
04501
04502
04503
04504
04505
04506
04507 }
04508 goto MATCH_finished_a;
04509
04510 MATCH_label_a18: (void)0;
04511 {
04512 char *name = MATCH_name;
04513 unsigned crfd = (MATCH_w_32_0 >> 23 & 0x7) ;
04514 unsigned fa = (MATCH_w_32_0 >> 16 & 0x1f) ;
04515 unsigned fb = (MATCH_w_32_0 >> 11 & 0x1f) ;
04516 nextPC = 4 + MATCH_p;
04517
04518 #line 256 "frontend/machine/ppc/decoder.m"
04519
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;
04532 {
04533 char *name = MATCH_name;
04534 unsigned fb = (MATCH_w_32_0 >> 11 & 0x1f) ;
04535 unsigned fd = (MATCH_w_32_0 >> 21 & 0x1f) ;
04536 nextPC = 4 + MATCH_p;
04537
04538 #line 259 "frontend/machine/ppc/decoder.m"
04539
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;
04552
04553 }
04554
04555 #line 358 "frontend/machine/ppc/decoder.m"
04556
04557 result.numBytes = nextPC - hostPC;
04558 if (result.valid && result.rtl == 0)
04559 result.rtl = new RTL(pc, stmts);
04560
04561 return result;
04562 }
04563
04564
04565
04566
04567
04568
04569
04570
04571
04572
04573
04574
04575
04576 Exp* PPCDecoder::dis_Reg(unsigned r)
04577 {
04578 return Location::regOf(r);
04579 }
04580
04581
04582
04583
04584
04585
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
04597
04598
04599
04600
04601
04602
04603 bool PPCDecoder::isFuncPrologue(ADDRESS hostPC)
04604 {
04605
04606 return false;
04607 }
04608
04609
04610
04611
04612
04613
04614
04615
04616
04617
04618
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
04628
04629
04630
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
04639 int PPCDecoder::decodeAssemblyInstruction(unsigned, int)
04640 { return 0; }
04641
04642
04643
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