| Index: src/trusted/validator_mips/gen/decode.cc | 
| diff --git a/src/trusted/validator_mips/gen/decode.cc b/src/trusted/validator_mips/gen/decode.cc | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..dd45a08159b3bdc81aca5a83fef3be090a84df1a | 
| --- /dev/null | 
| +++ b/src/trusted/validator_mips/gen/decode.cc | 
| @@ -0,0 +1,1305 @@ | 
| +/* | 
| + * DO NOT EDIT: GENERATED CODE | 
| + */ | 
| +#include <stdio.h> | 
| +#include "native_client/src/trusted/validator_mips/decode.h" | 
| + | 
| +namespace nacl_mips_dec { | 
| + | 
| +/* | 
| + * This beast holds a bunch of pre-created ClassDecoder instances, which | 
| + * we create in init_decode().  Because ClassDecoders are stateless, we | 
| + * can freely reuse them -- even across threads -- and avoid allocating | 
| + * in the inner decoder loop. | 
| + */ | 
| +struct DecoderState { | 
| +  const Load _Load_instance; | 
| +  const JalImm _JalImm_instance; | 
| +  const FPLoadStore _FPLoadStore_instance; | 
| +  const Arithm2 _Arithm2_instance; | 
| +  const Arithm3 _Arithm3_instance; | 
| +  const Forbidden _Forbidden_instance; | 
| +  const Safe _Safe_instance; | 
| +  const BranchAndLink _BranchAndLink_instance; | 
| +  const JalReg _JalReg_instance; | 
| +  const NaClHalt _NaClHalt_instance; | 
| +  const StoreConditional _StoreConditional_instance; | 
| +  const Branch _Branch_instance; | 
| +  const JmpImm _JmpImm_instance; | 
| +  const JmpReg _JmpReg_instance; | 
| +  const Store _Store_instance; | 
| +  const ExtIns _ExtIns_instance; | 
| +  DecoderState() : | 
| +  _Load_instance() | 
| +  ,_JalImm_instance() | 
| +  ,_FPLoadStore_instance() | 
| +  ,_Arithm2_instance() | 
| +  ,_Arithm3_instance() | 
| +  ,_Forbidden_instance() | 
| +  ,_Safe_instance() | 
| +  ,_BranchAndLink_instance() | 
| +  ,_JalReg_instance() | 
| +  ,_NaClHalt_instance() | 
| +  ,_StoreConditional_instance() | 
| +  ,_Branch_instance() | 
| +  ,_JmpImm_instance() | 
| +  ,_JmpReg_instance() | 
| +  ,_Store_instance() | 
| +  ,_ExtIns_instance() | 
| +  {} | 
| +}; | 
| + | 
| +/* | 
| + * Prototypes for static table-matching functions. | 
| + */ | 
| +static inline const ClassDecoder &decode_MIPS32(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_special(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_regimm(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_special2(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_special3(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_movci(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_srl(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_srlv(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_bshfl(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_cop0(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_c0(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_cop1(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_c1(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_movcf(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_cop2(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_cop1x(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_branch_1(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_arithm2_1(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_arithm3_1(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_arithm3_2(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_jr(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_jalr(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_sync(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_mfhi(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_mthi(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_mult(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_arithm3_3(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_mfmc0(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_mfc1(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_mtc1(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_bc1(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_fp(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_bc2(const Instruction insn, const DecoderState *state); | 
| +static inline const ClassDecoder &decode_c_cond_fmt(const Instruction insn, const DecoderState *state); | 
| + | 
| +/* | 
| + * Table-matching function implementations. | 
| + */ | 
| + | 
| +/* | 
| + * Implementation of table MIPS32. | 
| + * Specified by: See Table A.2. | 
| + */ | 
| +static inline const ClassDecoder &decode_MIPS32(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0xFC000000) == 0x00000000)) { | 
| +    return decode_special(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0x04000000)) { | 
| +    return decode_regimm(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0x08000000)) { | 
| +    return state->_JmpImm_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0x0C000000)) { | 
| +    return state->_JalImm_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0x38000000)) { | 
| +    return state->_Arithm2_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0x3C000000)) { | 
| +    return decode_arithm2_1(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0x40000000)) { | 
| +    return decode_cop0(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0x44000000)) { | 
| +    return decode_cop1(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0x48000000)) { | 
| +    return decode_cop2(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0x4C000000)) { | 
| +    return decode_cop1x(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0x70000000)) { | 
| +    return decode_special2(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0x74000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0x78000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0x7C000000)) { | 
| +    return decode_special3(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0x98000000)) { | 
| +    return state->_Load_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0xB8000000)) { | 
| +    return state->_Store_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0xC0000000)) { | 
| +    return state->_Load_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xFC000000) == 0xE0000000)) { | 
| +    return state->_StoreConditional_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xDC000000) == 0x9C000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xDC000000) == 0xD0000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xF8000000) == 0x30000000)) { | 
| +    return state->_Arithm2_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xF8000000) == 0x90000000)) { | 
| +    return state->_Load_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xF8000000) == 0xB0000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xB8000000) == 0x10000000)) { | 
| +    return state->_Branch_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xB8000000) == 0x18000000)) { | 
| +    return decode_branch_1(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0xCC000000) == 0xC4000000)) { | 
| +    return state->_FPLoadStore_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xCC000000) == 0xC8000000)) { | 
| +    return state->_FPLoadStore_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xCC000000) == 0xCC000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xF0000000) == 0x20000000)) { | 
| +    return state->_Arithm2_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xF0000000) == 0x60000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xF0000000) == 0x80000000)) { | 
| +    return state->_Load_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0xF0000000) == 0xA0000000)) { | 
| +    return state->_Store_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: MIPS32 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table special. | 
| + * Specified by: See Table A.3. | 
| + */ | 
| +static inline const ClassDecoder &decode_special(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x0000003F) == 0x00000000)) { | 
| +    return decode_arithm3_1(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x00000001)) { | 
| +    return decode_movci(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x00000002)) { | 
| +    return decode_srl(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x00000003)) { | 
| +    return decode_arithm3_1(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x00000004)) { | 
| +    return decode_arithm3_2(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x00000006)) { | 
| +    return decode_srlv(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x00000007)) { | 
| +    return decode_arithm3_2(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x00000008)) { | 
| +    return decode_jr(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x00000009)) { | 
| +    return decode_jalr(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x0000000F)) { | 
| +    return decode_sync(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x00000037) == 0x00000005)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003D) == 0x0000000C)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003D) == 0x00000010)) { | 
| +    return decode_mfhi(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003D) == 0x00000011)) { | 
| +    return decode_mthi(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003E) == 0x0000000A)) { | 
| +    return decode_arithm3_2(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003E) == 0x0000002A)) { | 
| +    return decode_arithm3_3(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003E) == 0x0000003C)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000002E) == 0x0000002E)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003A) == 0x00000028)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003C) == 0x00000018)) { | 
| +    return decode_mult(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003C) == 0x00000038)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000034) == 0x00000014)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000038) == 0x00000020)) { | 
| +    return decode_arithm3_3(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x00000038) == 0x00000030)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: special could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table regimm. | 
| + * Specified by: See Table A.4. | 
| + */ | 
| +static inline const ClassDecoder &decode_regimm(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x001C0000) == 0x00000000)) { | 
| +    return state->_Branch_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x001C0000) == 0x00100000)) { | 
| +    return state->_BranchAndLink_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x000C0000) == 0x00080000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00040000) == 0x00040000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: regimm could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table special2. | 
| + * Specified by: See Table A.5. | 
| + */ | 
| +static inline const ClassDecoder &decode_special2(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x0000003F) == 0x00000002)) { | 
| +    return decode_arithm3_2(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x0000003F)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000001F) == 0x0000001E)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000002F) == 0x0000000F)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000037) == 0x00000006)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003B) == 0x00000003)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003E) == 0x00000020)) { | 
| +    return decode_arithm3_2(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003E) == 0x0000002E)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003E) == 0x0000003C)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000002E) == 0x0000000C)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000036) == 0x00000024)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003A) == 0x00000000)) { | 
| +    return decode_mult(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003A) == 0x00000022)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000000C) == 0x00000008)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000018) == 0x00000010)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: special2 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table special3. | 
| + * Specified by: See Table A.6. | 
| + */ | 
| +static inline const ClassDecoder &decode_special3(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x0000003F) == 0x00000020)) { | 
| +    return decode_bshfl(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x0000003F)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000002F) == 0x0000002E)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000037) == 0x00000027)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003B) == 0x00000000)) { | 
| +    return state->_ExtIns_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003D) == 0x00000021)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003E) == 0x0000003C)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000001B) == 0x00000002)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000036) == 0x00000024)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000039) == 0x00000001)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000002C) == 0x00000028)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000018) == 0x00000010)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000028) == 0x00000008)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: special3 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table movci. | 
| + * Specified by: See Table A.7. | 
| + */ | 
| +static inline const ClassDecoder &decode_movci(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x00020000) == 0x00000000) && ((insn & 0x000007C0) == 0x00000000)) { | 
| +    return state->_Arithm3_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00020000) == 0x00020000) && ((insn & 0x000007C0) == 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if ((true) && ((insn & 0x000007C0) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: movci could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table srl. | 
| + * Specified by: See Table A.8. | 
| + */ | 
| +static inline const ClassDecoder &decode_srl(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x03C00000) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03C00000) == 0x00000000)) { | 
| +    return state->_Arithm3_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: srl could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table srlv. | 
| + * Specified by: See Table A.9. | 
| + */ | 
| +static inline const ClassDecoder &decode_srlv(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x00000780) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000780) == 0x00000000)) { | 
| +    return state->_Arithm3_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: srlv could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table bshfl. | 
| + * Specified by: See Table A.10. | 
| + */ | 
| +static inline const ClassDecoder &decode_bshfl(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x000007C0) == 0x00000080)) { | 
| +    return decode_arithm3_1(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x000007C0) == 0x000005C0)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x000003C0) == 0x000003C0)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x000005C0) == 0x00000180)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x000005C0) == 0x00000400)) { | 
| +    return decode_arithm3_1(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x000006C0) == 0x000000C0)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000780) == 0x00000500)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000380) == 0x00000300)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x000004C0) == 0x00000480)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000540) == 0x00000440)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000680) == 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000700) == 0x00000200)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: bshfl could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table cop0. | 
| + * Specified by: See Table A.11. | 
| + */ | 
| +static inline const ClassDecoder &decode_cop0(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x03E00000) == 0x01600000)) { | 
| +    return decode_mfmc0(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x03E00000) == 0x02000000)) { | 
| +    return decode_c0(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x03E00000) == 0x02E00000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03E00000) == 0x03C00000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x01E00000) == 0x01E00000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03600000) == 0x01400000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03600000) == 0x02400000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03A00000) == 0x02200000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x02C00000) == 0x02800000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03400000) == 0x01000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03800000) == 0x03000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03000000) == 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: cop0 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table c0. | 
| + * Specified by: See Table A.12. | 
| + */ | 
| +static inline const ClassDecoder &decode_c0(const Instruction insn, const DecoderState *state) { | 
| +  if ((true)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: c0 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table cop1. | 
| + * Specified by: See Table A.13. | 
| + */ | 
| +static inline const ClassDecoder &decode_cop1(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x03E00000) == 0x00000000)) { | 
| +    return decode_mfc1(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x03E00000) == 0x00600000)) { | 
| +    return decode_mfc1(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x03E00000) == 0x00800000)) { | 
| +    return decode_mtc1(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x03E00000) == 0x00E00000)) { | 
| +    return decode_mtc1(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x03E00000) == 0x01000000)) { | 
| +    return decode_bc1(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x03E00000) == 0x01E00000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03600000) == 0x00200000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03A00000) == 0x01200000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03C00000) == 0x01800000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03C00000) == 0x02400000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03C00000) == 0x03800000)) { | 
| +    return decode_c1(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x02600000) == 0x00400000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x02C00000) == 0x02C00000)) { | 
| +    return decode_c1(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x03400000) == 0x02000000)) { | 
| +    return decode_c1(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x03800000) == 0x03000000)) { | 
| +    return decode_c1(insn, state); | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: cop1 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table c1. | 
| + * Specified by: See Table A.14, A.15, A.16, A.17. | 
| + */ | 
| +static inline const ClassDecoder &decode_c1(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x0000003F) == 0x00000011)) { | 
| +    return decode_movcf(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x00000015)) { | 
| +    return decode_fp(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x00000016)) { | 
| +    return decode_fp(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x0000001E)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x00000027)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x00000028)) { | 
| +    return decode_fp(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x0000002A)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x0000002F)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000037) == 0x00000017)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000037) == 0x00000026)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003B) == 0x00000010)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003D) == 0x00000029)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003E) == 0x00000012)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003E) == 0x0000001C)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003E) == 0x00000022)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003E) == 0x0000002C)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003A) == 0x00000020)) { | 
| +    return decode_fp(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003C) == 0x00000000)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003C) == 0x00000008)) { | 
| +    return decode_fp(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003C) == 0x00000018)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000034) == 0x00000004)) { | 
| +    return decode_fp(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x00000030) == 0x00000030)) { | 
| +    return decode_c_cond_fmt(insn, state); | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: c1 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table movcf. | 
| + * Specified by: See Table A.18. | 
| + */ | 
| +static inline const ClassDecoder &decode_movcf(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x00020000) == 0x00000000)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00020000) == 0x00020000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: movcf could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table cop2. | 
| + * Specified by: See Table A.19. | 
| + */ | 
| +static inline const ClassDecoder &decode_cop2(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x03E00000) == 0x01000000)) { | 
| +    return decode_bc2(insn, state); | 
| +  } | 
| + | 
| +  if (((insn & 0x03E00000) == 0x03C00000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x01E00000) == 0x01E00000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03600000) == 0x01400000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03A00000) == 0x01200000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x01C00000) == 0x01800000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03800000) == 0x03000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x01000000) == 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: cop2 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table cop1x. | 
| + * Specified by: See Table A.20. | 
| + */ | 
| +static inline const ClassDecoder &decode_cop1x(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x0000003F) == 0x00000036)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003F) == 0x00000037)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000001F) == 0x0000001E)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000001F) == 0x0000001F)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000037) == 0x00000026)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000037) == 0x00000027)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003E) == 0x00000034)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000001E) == 0x0000001C)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000036) == 0x00000024)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000003C) == 0x00000018)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000026) == 0x00000020)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000026) == 0x00000022)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000038) == 0x00000010)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x00000030) == 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: cop1x could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table branch_1. | 
| + * Specified by: blez, bgtz, blezl, bgtzl. | 
| + */ | 
| +static inline const ClassDecoder &decode_branch_1(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x001F0000) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x001F0000) == 0x00000000)) { | 
| +    return state->_Branch_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: branch_1 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table arithm2_1. | 
| + * Specified by: lui. | 
| + */ | 
| +static inline const ClassDecoder &decode_arithm2_1(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x03E00000) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03E00000) == 0x00000000)) { | 
| +    return state->_Arithm2_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: arithm2_1 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table arithm3_1. | 
| + * Specified by: sll, sra, wsbh, seb, seh. | 
| + */ | 
| +static inline const ClassDecoder &decode_arithm3_1(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x03E00000) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03E00000) == 0x00000000)) { | 
| +    return state->_Arithm3_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: arithm3_1 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table arithm3_2. | 
| + * Specified by: sllv, srav, movz, movn, mul, clz, clo. | 
| + */ | 
| +static inline const ClassDecoder &decode_arithm3_2(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x000007C0) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x000007C0) == 0x00000000)) { | 
| +    return state->_Arithm3_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: arithm3_2 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table jr. | 
| + * Specified by: jr. | 
| + */ | 
| +static inline const ClassDecoder &decode_jr(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x03E00000) != 0x00000000) && ((insn & 0x001FFFC0) == 0x00000000)) { | 
| +    return state->_JmpReg_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03E00000) == 0x00000000) && ((insn & 0x001FFFC0) == 0x00000000)) { | 
| +    return state->_NaClHalt_instance; | 
| +  } | 
| + | 
| +  if ((true) && ((insn & 0x001FFFC0) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: jr could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table jalr. | 
| + * Specified by: jalr. | 
| + */ | 
| +static inline const ClassDecoder &decode_jalr(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x001F0000) != 0x00000000) && ((insn & 0x000007C0) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x001F0000) == 0x00000000) && ((insn & 0x000007C0) == 0x00000000)) { | 
| +    return state->_JalReg_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: jalr could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table sync. | 
| + * Specified by: sync. | 
| + */ | 
| +static inline const ClassDecoder &decode_sync(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x03FFFFC0) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03FFFFC0) == 0x00000000)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: sync could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table mfhi. | 
| + * Specified by: mfhi, mflo. | 
| + */ | 
| +static inline const ClassDecoder &decode_mfhi(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x03FF0000) != 0x00000000) && ((insn & 0x000007C0) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x03FF0000) == 0x00000000) && ((insn & 0x000007C0) == 0x00000000)) { | 
| +    return state->_Arithm3_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: mfhi could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table mthi. | 
| + * Specified by: mthi, mtlo. | 
| + */ | 
| +static inline const ClassDecoder &decode_mthi(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x001FFFC0) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x001FFFC0) == 0x00000000)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: mthi could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table mult. | 
| + * Specified by: mult, multu, div, divu, madd, maddu, msub, msubu. | 
| + */ | 
| +static inline const ClassDecoder &decode_mult(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x0000FFC0) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x0000FFC0) == 0x00000000)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: mult could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table arithm3_3. | 
| + * Specified by: add, addu, sub, subu, and, or, xor, nor, slt, sltu. | 
| + */ | 
| +static inline const ClassDecoder &decode_arithm3_3(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x000007C0) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x000007C0) == 0x00000000)) { | 
| +    return state->_Arithm3_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: arithm3_3 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table mfmc0. | 
| + * Specified by: di, ei. | 
| + */ | 
| +static inline const ClassDecoder &decode_mfmc0(const Instruction insn, const DecoderState *state) { | 
| +  if ((true)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: mfmc0 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table mfc1. | 
| + * Specified by: mfc1, mfhc1. | 
| + */ | 
| +static inline const ClassDecoder &decode_mfc1(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x000007FF) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x000007FF) == 0x00000000)) { | 
| +    return state->_Arithm2_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: mfc1 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table mtc1. | 
| + * Specified by: mtc1, mthc1. | 
| + */ | 
| +static inline const ClassDecoder &decode_mtc1(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x000007FF) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x000007FF) == 0x00000000)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: mtc1 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table bc1. | 
| + * Specified by: bc1f, bc1t, bc1fl, bc1tl. | 
| + */ | 
| +static inline const ClassDecoder &decode_bc1(const Instruction insn, const DecoderState *state) { | 
| +  if ((true)) { | 
| +    return state->_Branch_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: bc1 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table fp. | 
| + * Specified by: sqrt.fmt, abs.fmt, mov.fmt, neg.fmt, round.l.fmt, trunc.l.fmt, ceil.l.fmt, floor.l.fmt, round.w.fmt, trunc.w.fmt, ceil.w.fmt, floor.w.fmt, recip.fmt, rsqrt.fmt, cvt.s.fmt, cvt.d.fmt, cvt.w.fmt, cvt.l.fmt, cvt.s.pl. | 
| + */ | 
| +static inline const ClassDecoder &decode_fp(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x001F0000) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x001F0000) == 0x00000000)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: fp could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table bc2. | 
| + * Specified by: bc2f, bc2t, bc2fl, bc2tl. | 
| + */ | 
| +static inline const ClassDecoder &decode_bc2(const Instruction insn, const DecoderState *state) { | 
| +  if ((true)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: bc2 could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +/* | 
| + * Implementation of table c_cond_fmt. | 
| + * Specified by: c.cond.fmt. | 
| + */ | 
| +static inline const ClassDecoder &decode_c_cond_fmt(const Instruction insn, const DecoderState *state) { | 
| +  if (((insn & 0x000000C0) != 0x00000000)) { | 
| +    return state->_Forbidden_instance; | 
| +  } | 
| + | 
| +  if (((insn & 0x000000C0) == 0x00000000)) { | 
| +    return state->_Safe_instance; | 
| +  } | 
| + | 
| +  // Catch any attempt to fall through... | 
| +  fprintf(stderr, "TABLE IS INCOMPLETE: c_cond_fmt could not parse %08X",insn.Bits(31,0)); | 
| +  return state->_Forbidden_instance; | 
| +} | 
| + | 
| +const DecoderState *init_decode() { | 
| +  return new DecoderState; | 
| +} | 
| +void delete_state(const DecoderState *state) { | 
| +  delete (DecoderState *)state; | 
| +} | 
| + | 
| +const ClassDecoder &decode(const Instruction insn, const DecoderState *state) { | 
| +  return decode_MIPS32(insn, (DecoderState *)state); | 
| +} | 
| + | 
| +}  // namespace | 
|  |