summaryrefslogtreecommitdiff
path: root/src/arch/x86/isa/decoder
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2007-06-19 22:40:10 +0000
committerGabe Black <gblack@eecs.umich.edu>2007-06-19 22:40:10 +0000
commitd2ccf5e50917701a4eab9f1848c8d524ccf0c7cc (patch)
tree19cfdd9b70857361f756ff8f86fa70b3ef87a4b9 /src/arch/x86/isa/decoder
parentcc796de96201754b3e3a38996090ed633307aa8c (diff)
downloadgem5-d2ccf5e50917701a4eab9f1848c8d524ccf0c7cc.tar.xz
More faithfulness to what instructions should work in what modes, and added the MOVSXD instruction.
--HG-- extra : convert_revision : 38b9bf6cd4bdec6355b1158967c7d3562715cacd
Diffstat (limited to 'src/arch/x86/isa/decoder')
-rw-r--r--src/arch/x86/isa/decoder/one_byte_opcodes.isa51
1 files changed, 31 insertions, 20 deletions
diff --git a/src/arch/x86/isa/decoder/one_byte_opcodes.isa b/src/arch/x86/isa/decoder/one_byte_opcodes.isa
index 78270e782..c3f95137a 100644
--- a/src/arch/x86/isa/decoder/one_byte_opcodes.isa
+++ b/src/arch/x86/isa/decoder/one_byte_opcodes.isa
@@ -172,25 +172,33 @@
default: aas();
}
}
- 0x08: decode OPCODE_OP_BOTTOM3 {
- 0x0: inc_eAX();
- 0x1: inc_eCX();
- 0x2: inc_eDX();
- 0x3: inc_eBX();
- 0x4: inc_eSP();
- 0x5: inc_eBP();
- 0x6: inc_eSI();
- 0x7: inc_eDI();
+ 0x08: decode MODE_SUBMODE {
+ 0x0: M5InternalError::error (
+ {{"Tried to execute an REX prefix!"}});
+ default: decode OPCODE_OP_BOTTOM3 {
+ 0x0: inc_eAX();
+ 0x1: inc_eCX();
+ 0x2: inc_eDX();
+ 0x3: inc_eBX();
+ 0x4: inc_eSP();
+ 0x5: inc_eBP();
+ 0x6: inc_eSI();
+ 0x7: inc_eDI();
+ }
}
- 0x09: decode OPCODE_OP_BOTTOM3 {
- 0x0: dec_eAX();
- 0x1: dec_eCX();
- 0x2: dec_eDX();
- 0x3: dec_eBX();
- 0x4: dec_eSP();
- 0x5: dec_eBP();
- 0x6: dec_eSI();
- 0x7: dec_eDI();
+ 0x09: decode MODE_SUBMODE {
+ 0x0: M5InternalError::error (
+ {{"Tried to execute an REX prefix!"}});
+ default: decode OPCODE_OP_BOTTOM3 {
+ 0x0: dec_eAX();
+ 0x1: dec_eCX();
+ 0x2: dec_eDX();
+ 0x3: dec_eBX();
+ 0x4: dec_eSP();
+ 0x5: dec_eBP();
+ 0x6: dec_eSI();
+ 0x7: dec_eDI();
+ }
}
format Inst {
0x0A: decode OPCODE_OP_BOTTOM3 {
@@ -227,7 +235,10 @@
0x0: This_should_be_an_illegal_instruction();
default: bound_Gv_Ma();
}
- 0x3: arpl_Ew_Gw();
+ 0x3: decode MODE_SUBMODE {
+ 0x0: Inst::MOVSXD(Gv,Ed);
+ default: arpl_Ew_Gw();
+ }
0x4: M5InternalError::error(
{{"Tried to execute the FS segment override prefix!"}});
0x5: M5InternalError::error(
@@ -301,7 +312,7 @@
0x7: group10_Ev(); //Make sure this is Ev
}
0x12: decode OPCODE_OP_BOTTOM3 {
- 0x0: nop_or_pause(); //Check for repe prefix
+ default: nop_or_pause(); //Check for repe prefix
0x1: xchg_rCX_rAX();
0x2: xchg_rDX_rAX();
0x3: xchg_rVX_rAX();