| 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
 | 
| 
 |