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 |
index dd45a08159b3bdc81aca5a83fef3be090a84df1a..0996810fa72e459d5eca3142b6e3100141d43116 100644 |
--- a/src/trusted/validator_mips/gen/decode.cc |
+++ b/src/trusted/validator_mips/gen/decode.cc |
@@ -15,7 +15,7 @@ namespace nacl_mips_dec { |
struct DecoderState { |
const Load _Load_instance; |
const JalImm _JalImm_instance; |
- const FPLoadStore _FPLoadStore_instance; |
+ const Branch _Branch_instance; |
const Arithm2 _Arithm2_instance; |
const Arithm3 _Arithm3_instance; |
const Forbidden _Forbidden_instance; |
@@ -24,7 +24,7 @@ struct DecoderState { |
const JalReg _JalReg_instance; |
const NaClHalt _NaClHalt_instance; |
const StoreConditional _StoreConditional_instance; |
- const Branch _Branch_instance; |
+ const FPLoadStore _FPLoadStore_instance; |
const JmpImm _JmpImm_instance; |
const JmpReg _JmpReg_instance; |
const Store _Store_instance; |
@@ -32,7 +32,7 @@ struct DecoderState { |
DecoderState() : |
_Load_instance() |
,_JalImm_instance() |
- ,_FPLoadStore_instance() |
+ ,_Branch_instance() |
,_Arithm2_instance() |
,_Arithm3_instance() |
,_Forbidden_instance() |
@@ -41,7 +41,7 @@ struct DecoderState { |
,_JalReg_instance() |
,_NaClHalt_instance() |
,_StoreConditional_instance() |
- ,_Branch_instance() |
+ ,_FPLoadStore_instance() |
,_JmpImm_instance() |
,_JmpReg_instance() |
,_Store_instance() |
@@ -270,11 +270,27 @@ static inline const ClassDecoder &decode_special(const Instruction insn, const D |
return decode_jalr(insn, state); |
} |
+ if (((insn & 0x0000003F) == 0x0000000D)) { |
+ return state->_NaClHalt_instance; |
+ } |
+ |
if (((insn & 0x0000003F) == 0x0000000F)) { |
return decode_sync(insn, state); |
} |
- if (((insn & 0x00000037) == 0x00000005)) { |
+ if (((insn & 0x0000003F) == 0x0000003F)) { |
+ return state->_Forbidden_instance; |
+ } |
+ |
+ if (((insn & 0x0000001F) == 0x0000001E)) { |
+ return state->_Forbidden_instance; |
+ } |
+ |
+ if (((insn & 0x0000002F) == 0x00000005)) { |
+ return state->_Forbidden_instance; |
+ } |
+ |
+ if (((insn & 0x00000037) == 0x00000017)) { |
return state->_Forbidden_instance; |
} |
@@ -290,6 +306,10 @@ static inline const ClassDecoder &decode_special(const Instruction insn, const D |
return decode_mthi(insn, state); |
} |
+ if (((insn & 0x0000003D) == 0x00000014)) { |
+ return state->_Forbidden_instance; |
+ } |
+ |
if (((insn & 0x0000003E) == 0x0000000A)) { |
return decode_arithm3_2(insn, state); |
} |
@@ -298,11 +318,11 @@ static inline const ClassDecoder &decode_special(const Instruction insn, const D |
return decode_arithm3_3(insn, state); |
} |
- if (((insn & 0x0000003E) == 0x0000003C)) { |
+ if (((insn & 0x0000003E) == 0x0000002E)) { |
return state->_Forbidden_instance; |
} |
- if (((insn & 0x0000002E) == 0x0000002E)) { |
+ if (((insn & 0x0000001E) == 0x0000001C)) { |
return state->_Forbidden_instance; |
} |
@@ -318,10 +338,6 @@ static inline const ClassDecoder &decode_special(const Instruction insn, const D |
return state->_Forbidden_instance; |
} |
- if (((insn & 0x00000034) == 0x00000014)) { |
- return state->_Forbidden_instance; |
- } |
- |
if (((insn & 0x00000038) == 0x00000020)) { |
return decode_arithm3_3(insn, state); |
} |
@@ -1052,16 +1068,12 @@ static inline const ClassDecoder &decode_arithm3_2(const Instruction insn, const |
* 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 (((insn & 0x001FFFC0) != 0x00000000)) { |
+ return state->_Forbidden_instance; |
} |
- if ((true) && ((insn & 0x001FFFC0) != 0x00000000)) { |
- return state->_Forbidden_instance; |
+ if (((insn & 0x001FFFC0) == 0x00000000)) { |
+ return state->_JmpReg_instance; |
} |
// Catch any attempt to fall through... |