diff options
Diffstat (limited to 'src/arch/x86/isa/decoder/decoder.isa')
-rw-r--r-- | src/arch/x86/isa/decoder/decoder.isa | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/src/arch/x86/isa/decoder/decoder.isa b/src/arch/x86/isa/decoder/decoder.isa index 20f31f882..dcf6ce089 100644 --- a/src/arch/x86/isa/decoder/decoder.isa +++ b/src/arch/x86/isa/decoder/decoder.isa @@ -58,32 +58,38 @@ // The actual decoder specification // -decode OPCODE_NUM default Unknown::unknown() +decode LEGACY_LOCK default Unknown::unknown() { - 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(); + //No lock prefix + 0x0: decode OPCODE_NUM default Unknown::unknown() + { + 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 second opcode byte in three byte opcode!"}}); + {{"Unexpected first opcode byte in three byte opcode!"}}); } - default: M5InternalError::error( - {{"Unexpected first opcode byte in three byte opcode!"}}); } + //Lock prefix + ##include "locked_opcodes.isa" } |