summaryrefslogtreecommitdiff
path: root/src/arch/x86/isa/decoder
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2007-12-01 23:03:39 -0800
committerGabe Black <gblack@eecs.umich.edu>2007-12-01 23:03:39 -0800
commitdc6f96017135da7f3beae5055195de3cf8e47c6c (patch)
treeb8fad747c652fe34db462bf585be4d184da02d6b /src/arch/x86/isa/decoder
parenta548067b01ed99d4abc9483ca11466d3d9d4ceca (diff)
downloadgem5-dc6f96017135da7f3beae5055195de3cf8e47c6c.tar.xz
X86: Reorganize segmentation and implement segment selector movs.
--HG-- extra : convert_revision : 553c3ffeda1f5312cf02493f602e7d4ba2fe66e8
Diffstat (limited to 'src/arch/x86/isa/decoder')
-rw-r--r--src/arch/x86/isa/decoder/one_byte_opcodes.isa16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/arch/x86/isa/decoder/one_byte_opcodes.isa b/src/arch/x86/isa/decoder/one_byte_opcodes.isa
index 62b8c8d59..0d1d7aacd 100644
--- a/src/arch/x86/isa/decoder/one_byte_opcodes.isa
+++ b/src/arch/x86/isa/decoder/one_byte_opcodes.isa
@@ -292,9 +292,21 @@
0x1: MOV(Ev,Gv);
0x2: MOV(Gb,Eb);
0x3: MOV(Gv,Ev);
- 0x4: WarnUnimpl::mov_MwRv_Sw(); //What to do with this one?
+ 0x4: decode MODRM_REG {
+ 0x0, 0x1, 0x2,
+ 0x3, 0x4, 0x5: MOV(Ev,Sv);
+ }
0x5: LEA(Gv,M);
- 0x6: WarnUnimpl::mov_Sw_MwRv();
+ 0x6: decode MODE_SUBMODE {
+ 0x3, 0x4: MOV_REAL(Sv,Ev);
+ default: decode MODRM_REG {
+ 0x1: UD2(); // Moving to the CS selector is illegal.
+ 0x2: MOVSS(Sv,Ev);
+ 0x0, 0x3,
+ 0x4, 0x5: MOV(Sv,Ev);
+ default: UD2();
+ }
+ }
//0x7: group10_Ev();
0x7: decode MODRM_REG {
0x0: POP(Ev);