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..d16029bb3139c22cd54fe14c3d457f7bf73bb992 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; |
Mark Seaborn
2012/09/26 16:59:24
Why do Branch and FPLoadStore get swapped? Does t
petarj
2012/09/28 17:55:02
Validator's generator will produce deterministic o
|
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->_Safe_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); |
} |