summaryrefslogtreecommitdiff
path: root/src/arch/x86/isa/decoder/one_byte_opcodes.isa
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/x86/isa/decoder/one_byte_opcodes.isa')
-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);