| OLD | NEW |
| 1 /* | 1 /* |
| 2 * DO NOT EDIT: GENERATED CODE | 2 * DO NOT EDIT: GENERATED CODE |
| 3 */ | 3 */ |
| 4 #include <stdio.h> | 4 #include <stdio.h> |
| 5 #include "native_client/src/trusted/validator_mips/decode.h" | 5 #include "native_client/src/trusted/validator_mips/decode.h" |
| 6 | 6 |
| 7 namespace nacl_mips_dec { | 7 namespace nacl_mips_dec { |
| 8 | 8 |
| 9 /* | 9 /* |
| 10 * This beast holds a bunch of pre-created ClassDecoder instances, which | 10 * This beast holds a bunch of pre-created ClassDecoder instances, which |
| 11 * we create in init_decode(). Because ClassDecoders are stateless, we | 11 * we create in init_decode(). Because ClassDecoders are stateless, we |
| 12 * can freely reuse them -- even across threads -- and avoid allocating | 12 * can freely reuse them -- even across threads -- and avoid allocating |
| 13 * in the inner decoder loop. | 13 * in the inner decoder loop. |
| 14 */ | 14 */ |
| 15 struct DecoderState { | 15 struct DecoderState { |
| 16 const Load _Load_instance; | 16 const Load _Load_instance; |
| 17 const JalImm _JalImm_instance; | 17 const JalImm _JalImm_instance; |
| 18 const FPLoadStore _FPLoadStore_instance; | 18 const Branch _Branch_instance; |
| 19 const Arithm2 _Arithm2_instance; | 19 const Arithm2 _Arithm2_instance; |
| 20 const Arithm3 _Arithm3_instance; | 20 const Arithm3 _Arithm3_instance; |
| 21 const Forbidden _Forbidden_instance; | 21 const Forbidden _Forbidden_instance; |
| 22 const Safe _Safe_instance; | 22 const Safe _Safe_instance; |
| 23 const BranchAndLink _BranchAndLink_instance; | 23 const BranchAndLink _BranchAndLink_instance; |
| 24 const JalReg _JalReg_instance; | 24 const JalReg _JalReg_instance; |
| 25 const NaClHalt _NaClHalt_instance; | 25 const NaClHalt _NaClHalt_instance; |
| 26 const StoreConditional _StoreConditional_instance; | 26 const StoreConditional _StoreConditional_instance; |
| 27 const Branch _Branch_instance; | 27 const FPLoadStore _FPLoadStore_instance; |
| 28 const JmpImm _JmpImm_instance; | 28 const JmpImm _JmpImm_instance; |
| 29 const JmpReg _JmpReg_instance; | 29 const JmpReg _JmpReg_instance; |
| 30 const Store _Store_instance; | 30 const Store _Store_instance; |
| 31 const ExtIns _ExtIns_instance; | 31 const ExtIns _ExtIns_instance; |
| 32 DecoderState() : | 32 DecoderState() : |
| 33 _Load_instance() | 33 _Load_instance() |
| 34 ,_JalImm_instance() | 34 ,_JalImm_instance() |
| 35 ,_FPLoadStore_instance() | 35 ,_Branch_instance() |
| 36 ,_Arithm2_instance() | 36 ,_Arithm2_instance() |
| 37 ,_Arithm3_instance() | 37 ,_Arithm3_instance() |
| 38 ,_Forbidden_instance() | 38 ,_Forbidden_instance() |
| 39 ,_Safe_instance() | 39 ,_Safe_instance() |
| 40 ,_BranchAndLink_instance() | 40 ,_BranchAndLink_instance() |
| 41 ,_JalReg_instance() | 41 ,_JalReg_instance() |
| 42 ,_NaClHalt_instance() | 42 ,_NaClHalt_instance() |
| 43 ,_StoreConditional_instance() | 43 ,_StoreConditional_instance() |
| 44 ,_Branch_instance() | 44 ,_FPLoadStore_instance() |
| 45 ,_JmpImm_instance() | 45 ,_JmpImm_instance() |
| 46 ,_JmpReg_instance() | 46 ,_JmpReg_instance() |
| 47 ,_Store_instance() | 47 ,_Store_instance() |
| 48 ,_ExtIns_instance() | 48 ,_ExtIns_instance() |
| 49 {} | 49 {} |
| 50 }; | 50 }; |
| 51 | 51 |
| 52 /* | 52 /* |
| 53 * Prototypes for static table-matching functions. | 53 * Prototypes for static table-matching functions. |
| 54 */ | 54 */ |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 } | 263 } |
| 264 | 264 |
| 265 if (((insn & 0x0000003F) == 0x00000008)) { | 265 if (((insn & 0x0000003F) == 0x00000008)) { |
| 266 return decode_jr(insn, state); | 266 return decode_jr(insn, state); |
| 267 } | 267 } |
| 268 | 268 |
| 269 if (((insn & 0x0000003F) == 0x00000009)) { | 269 if (((insn & 0x0000003F) == 0x00000009)) { |
| 270 return decode_jalr(insn, state); | 270 return decode_jalr(insn, state); |
| 271 } | 271 } |
| 272 | 272 |
| 273 if (((insn & 0x0000003F) == 0x0000000D)) { |
| 274 return state->_NaClHalt_instance; |
| 275 } |
| 276 |
| 273 if (((insn & 0x0000003F) == 0x0000000F)) { | 277 if (((insn & 0x0000003F) == 0x0000000F)) { |
| 274 return decode_sync(insn, state); | 278 return decode_sync(insn, state); |
| 275 } | 279 } |
| 276 | 280 |
| 277 if (((insn & 0x00000037) == 0x00000005)) { | 281 if (((insn & 0x0000003F) == 0x0000003F)) { |
| 278 return state->_Forbidden_instance; | 282 return state->_Forbidden_instance; |
| 279 } | 283 } |
| 280 | 284 |
| 285 if (((insn & 0x0000001F) == 0x0000001E)) { |
| 286 return state->_Forbidden_instance; |
| 287 } |
| 288 |
| 289 if (((insn & 0x0000002F) == 0x00000005)) { |
| 290 return state->_Forbidden_instance; |
| 291 } |
| 292 |
| 293 if (((insn & 0x00000037) == 0x00000017)) { |
| 294 return state->_Forbidden_instance; |
| 295 } |
| 296 |
| 281 if (((insn & 0x0000003D) == 0x0000000C)) { | 297 if (((insn & 0x0000003D) == 0x0000000C)) { |
| 282 return state->_Forbidden_instance; | 298 return state->_Forbidden_instance; |
| 283 } | 299 } |
| 284 | 300 |
| 285 if (((insn & 0x0000003D) == 0x00000010)) { | 301 if (((insn & 0x0000003D) == 0x00000010)) { |
| 286 return decode_mfhi(insn, state); | 302 return decode_mfhi(insn, state); |
| 287 } | 303 } |
| 288 | 304 |
| 289 if (((insn & 0x0000003D) == 0x00000011)) { | 305 if (((insn & 0x0000003D) == 0x00000011)) { |
| 290 return decode_mthi(insn, state); | 306 return decode_mthi(insn, state); |
| 291 } | 307 } |
| 292 | 308 |
| 309 if (((insn & 0x0000003D) == 0x00000014)) { |
| 310 return state->_Forbidden_instance; |
| 311 } |
| 312 |
| 293 if (((insn & 0x0000003E) == 0x0000000A)) { | 313 if (((insn & 0x0000003E) == 0x0000000A)) { |
| 294 return decode_arithm3_2(insn, state); | 314 return decode_arithm3_2(insn, state); |
| 295 } | 315 } |
| 296 | 316 |
| 297 if (((insn & 0x0000003E) == 0x0000002A)) { | 317 if (((insn & 0x0000003E) == 0x0000002A)) { |
| 298 return decode_arithm3_3(insn, state); | 318 return decode_arithm3_3(insn, state); |
| 299 } | 319 } |
| 300 | 320 |
| 301 if (((insn & 0x0000003E) == 0x0000003C)) { | 321 if (((insn & 0x0000003E) == 0x0000002E)) { |
| 302 return state->_Forbidden_instance; | 322 return state->_Forbidden_instance; |
| 303 } | 323 } |
| 304 | 324 |
| 305 if (((insn & 0x0000002E) == 0x0000002E)) { | 325 if (((insn & 0x0000001E) == 0x0000001C)) { |
| 306 return state->_Forbidden_instance; | 326 return state->_Forbidden_instance; |
| 307 } | 327 } |
| 308 | 328 |
| 309 if (((insn & 0x0000003A) == 0x00000028)) { | 329 if (((insn & 0x0000003A) == 0x00000028)) { |
| 310 return state->_Forbidden_instance; | 330 return state->_Forbidden_instance; |
| 311 } | 331 } |
| 312 | 332 |
| 313 if (((insn & 0x0000003C) == 0x00000018)) { | 333 if (((insn & 0x0000003C) == 0x00000018)) { |
| 314 return decode_mult(insn, state); | 334 return decode_mult(insn, state); |
| 315 } | 335 } |
| 316 | 336 |
| 317 if (((insn & 0x0000003C) == 0x00000038)) { | 337 if (((insn & 0x0000003C) == 0x00000038)) { |
| 318 return state->_Forbidden_instance; | 338 return state->_Forbidden_instance; |
| 319 } | 339 } |
| 320 | 340 |
| 321 if (((insn & 0x00000034) == 0x00000014)) { | |
| 322 return state->_Forbidden_instance; | |
| 323 } | |
| 324 | |
| 325 if (((insn & 0x00000038) == 0x00000020)) { | 341 if (((insn & 0x00000038) == 0x00000020)) { |
| 326 return decode_arithm3_3(insn, state); | 342 return decode_arithm3_3(insn, state); |
| 327 } | 343 } |
| 328 | 344 |
| 329 if (((insn & 0x00000038) == 0x00000030)) { | 345 if (((insn & 0x00000038) == 0x00000030)) { |
| 330 return state->_Forbidden_instance; | 346 return state->_Forbidden_instance; |
| 331 } | 347 } |
| 332 | 348 |
| 333 // Catch any attempt to fall through... | 349 // Catch any attempt to fall through... |
| 334 fprintf(stderr, "TABLE IS INCOMPLETE: special could not parse %08X",insn.Bits(
31,0)); | 350 fprintf(stderr, "TABLE IS INCOMPLETE: special could not parse %08X",insn.Bits(
31,0)); |
| (...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1045 // Catch any attempt to fall through... | 1061 // Catch any attempt to fall through... |
| 1046 fprintf(stderr, "TABLE IS INCOMPLETE: arithm3_2 could not parse %08X",insn.Bit
s(31,0)); | 1062 fprintf(stderr, "TABLE IS INCOMPLETE: arithm3_2 could not parse %08X",insn.Bit
s(31,0)); |
| 1047 return state->_Forbidden_instance; | 1063 return state->_Forbidden_instance; |
| 1048 } | 1064 } |
| 1049 | 1065 |
| 1050 /* | 1066 /* |
| 1051 * Implementation of table jr. | 1067 * Implementation of table jr. |
| 1052 * Specified by: jr. | 1068 * Specified by: jr. |
| 1053 */ | 1069 */ |
| 1054 static inline const ClassDecoder &decode_jr(const Instruction insn, const Decode
rState *state) { | 1070 static inline const ClassDecoder &decode_jr(const Instruction insn, const Decode
rState *state) { |
| 1055 if (((insn & 0x03E00000) != 0x00000000) && ((insn & 0x001FFFC0) == 0x00000000)
) { | 1071 if (((insn & 0x001FFFC0) != 0x00000000)) { |
| 1072 return state->_Forbidden_instance; |
| 1073 } |
| 1074 |
| 1075 if (((insn & 0x001FFFC0) == 0x00000000)) { |
| 1056 return state->_JmpReg_instance; | 1076 return state->_JmpReg_instance; |
| 1057 } | 1077 } |
| 1058 | 1078 |
| 1059 if (((insn & 0x03E00000) == 0x00000000) && ((insn & 0x001FFFC0) == 0x00000000)
) { | |
| 1060 return state->_NaClHalt_instance; | |
| 1061 } | |
| 1062 | |
| 1063 if ((true) && ((insn & 0x001FFFC0) != 0x00000000)) { | |
| 1064 return state->_Forbidden_instance; | |
| 1065 } | |
| 1066 | |
| 1067 // Catch any attempt to fall through... | 1079 // Catch any attempt to fall through... |
| 1068 fprintf(stderr, "TABLE IS INCOMPLETE: jr could not parse %08X",insn.Bits(31,0)
); | 1080 fprintf(stderr, "TABLE IS INCOMPLETE: jr could not parse %08X",insn.Bits(31,0)
); |
| 1069 return state->_Forbidden_instance; | 1081 return state->_Forbidden_instance; |
| 1070 } | 1082 } |
| 1071 | 1083 |
| 1072 /* | 1084 /* |
| 1073 * Implementation of table jalr. | 1085 * Implementation of table jalr. |
| 1074 * Specified by: jalr. | 1086 * Specified by: jalr. |
| 1075 */ | 1087 */ |
| 1076 static inline const ClassDecoder &decode_jalr(const Instruction insn, const Deco
derState *state) { | 1088 static inline const ClassDecoder &decode_jalr(const Instruction insn, const Deco
derState *state) { |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1296 } | 1308 } |
| 1297 void delete_state(const DecoderState *state) { | 1309 void delete_state(const DecoderState *state) { |
| 1298 delete (DecoderState *)state; | 1310 delete (DecoderState *)state; |
| 1299 } | 1311 } |
| 1300 | 1312 |
| 1301 const ClassDecoder &decode(const Instruction insn, const DecoderState *state) { | 1313 const ClassDecoder &decode(const Instruction insn, const DecoderState *state) { |
| 1302 return decode_MIPS32(insn, (DecoderState *)state); | 1314 return decode_MIPS32(insn, (DecoderState *)state); |
| 1303 } | 1315 } |
| 1304 | 1316 |
| 1305 } // namespace | 1317 } // namespace |
| OLD | NEW |