diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2007-03-21 19:19:53 +0000 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2007-03-21 19:19:53 +0000 |
commit | 0a80d06deaaf6fc574abacc2fed9b74d0bca1085 (patch) | |
tree | 070b5addf386a199fb9837c07eabe85191b5d3ba /src/arch/x86/isa/decoder/decoder.isa | |
parent | 3efec59fc55a439353adbd859722d8a5d170c18d (diff) | |
download | gem5-0a80d06deaaf6fc574abacc2fed9b74d0bca1085.tar.xz |
Break out the one and two byte opcodes into different files. Also change what bits decode is done on to reflect where clumps of instructions are.
--HG--
extra : convert_revision : 8768676eac25e6a4f0dc50ce2dc576bdcdd6e025
Diffstat (limited to 'src/arch/x86/isa/decoder/decoder.isa')
-rw-r--r-- | src/arch/x86/isa/decoder/decoder.isa | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/arch/x86/isa/decoder/decoder.isa b/src/arch/x86/isa/decoder/decoder.isa index 85f376b49..20f31f882 100644 --- a/src/arch/x86/isa/decoder/decoder.isa +++ b/src/arch/x86/isa/decoder/decoder.isa @@ -58,7 +58,32 @@ // The actual decoder specification // -decode EXAMPLE default Unknown::unknown() +decode OPCODE_NUM default Unknown::unknown() { - 0x0: Unknown::unknown2(); + 0x0: M5InternalError::error( + {{"Saw an ExtMachInst with zero opcode bytes!"}}); + //1 byte opcodes + ##include "one_byte_opcodes.isa" + //2 byte opcodes + ##include "two_byte_opcodes.isa" + //3 byte opcodes + 0x3: decode OPCODE_PREFIXA { + 0xF0: decode OPCODE_PREFIXB { + //We don't handle these properly in the predecoder yet, so there's + //no reason to implement them for now. + 0x38: decode OPCODE_OP { + default: FailUnimpl::sseThreeEight(); + } + 0x3A: decode OPCODE_OP { + default: FailUnimpl::sseThreeA(); + } + 0xF0: decode OPCODE_OP { + default: FailUnimpl::threednow(); + } + default: M5InternalError::error( + {{"Unexpected second opcode byte in three byte opcode!"}}); + } + default: M5InternalError::error( + {{"Unexpected first opcode byte in three byte opcode!"}}); + } } |