summaryrefslogtreecommitdiff
path: root/src/arch/x86/isa/decoder/decoder.isa
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2009-04-19 04:57:28 -0700
committerGabe Black <gblack@eecs.umich.edu>2009-04-19 04:57:28 -0700
commit0a6ff60caa27d2117438d0c6750977684252886a (patch)
tree77194a0c93b48197c3f376235c34a4543e8d28c1 /src/arch/x86/isa/decoder/decoder.isa
parent61edc9ba66f4ce42c7cc4aab0f26d060470cdb14 (diff)
downloadgem5-0a6ff60caa27d2117438d0c6750977684252886a.tar.xz
X86: Recognize and handle the lock legacy prefix.
Diffstat (limited to 'src/arch/x86/isa/decoder/decoder.isa')
-rw-r--r--src/arch/x86/isa/decoder/decoder.isa52
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"
}