diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2007-07-20 23:16:03 -0700 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2007-07-20 23:16:03 -0700 |
commit | fc1b7d62b7e8e5cf59956875720dbd1deb68af93 (patch) | |
tree | 72af2ec10ae733a6dea67a39141602c2f379ba32 /src/arch/x86/isa/decoder/one_byte_opcodes.isa | |
parent | 009df5ff1e19276433975fddd43a306ff653a20e (diff) | |
download | gem5-fc1b7d62b7e8e5cf59956875720dbd1deb68af93.tar.xz |
Fixed the distinction between far and near versions of jmp, call and ret. Implemented some shifts, rotates, and pushes.
--HG--
extra : convert_revision : fcb06189ff213e82da16ac43231feb308cb3a285
Diffstat (limited to 'src/arch/x86/isa/decoder/one_byte_opcodes.isa')
-rw-r--r-- | src/arch/x86/isa/decoder/one_byte_opcodes.isa | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/src/arch/x86/isa/decoder/one_byte_opcodes.isa b/src/arch/x86/isa/decoder/one_byte_opcodes.isa index 2c2d68785..329a03f40 100644 --- a/src/arch/x86/isa/decoder/one_byte_opcodes.isa +++ b/src/arch/x86/isa/decoder/one_byte_opcodes.isa @@ -306,7 +306,7 @@ 0x1: cwd_or_cdq_or_cqo_rAX_rDX(); 0x2: decode MODE_SUBMODE { 0x0: Inst::UD2(); - default: call_Ap(); + default: call_far_Ap(); } 0x3: fwait(); //aka wait 0x4: pushf_Fv(); @@ -356,25 +356,25 @@ 0x18: decode OPCODE_OP_BOTTOM3 { //0x0: group2_Eb_Ib(); 0x0: decode MODRM_REG { - 0x0: rol_Eb_Ib(); - 0x1: ror_Eb_Ib(); + 0x0: Inst::ROL(Eb,Ib); + 0x1: Inst::ROR(Eb,Ib); 0x2: rcl_Eb_Ib(); 0x3: rcr_Eb_Ib(); 0x4: Inst::SAL(Eb,Ib); - 0x5: shr_Eb_Ib(); + 0x5: Inst::SHR(Eb,Ib); 0x6: Inst::SAL(Eb,Ib); - 0x7: sar_Eb_Ib(); + 0x7: Inst::SAR(Eb,Ib); } //0x1: group2_Ev_Ib(); 0x1: decode MODRM_REG { - 0x0: rol_Ev_Ib(); - 0x1: ror_Ev_Ib(); + 0x0: Inst::ROL(Ev,Ib); + 0x1: Inst::ROR(Ev,Ib); 0x2: rcl_Ev_Ib(); 0x3: rcr_Ev_Ib(); 0x4: Inst::SAL(Ev,Ib); - 0x5: shr_Ev_Ib(); + 0x5: Inst::SHR(Ev,Ib); 0x6: Inst::SAL(Ev,Ib); - 0x7: sar_Ev_Ib(); + 0x7: Inst::SAR(Ev,Ib); } 0x2: ret_near_Iw(); 0x3: Inst::RET_NEAR(); @@ -452,7 +452,7 @@ 0x1: Inst::JMP(Jz); 0x2: decode MODE_SUBMODE { 0x0: Inst::UD2(); - default: jmp_Ap(); + default: jmp_far_Ap(); } 0x3: Inst::JMP(Jb); 0x4: in_Al_Dx(); @@ -480,22 +480,24 @@ 0x3: sti(); 0x4: cld(); 0x5: std(); - //0x6: group4(); - 0x6: decode MODRM_REG { - 0x0: Inst::INC(Eb); - 0x1: Inst::DEC(Eb); - default: Inst::UD2(); - } - //0x7: group5(); - 0x7: decode MODRM_REG { - 0x0: Inst::INC(Ev); - 0x1: Inst::DEC(Ev); - 0x2: call_Ev(); - 0x3: call_Mp(); - 0x4: jmp_Ev(); - 0x5: jmp_Mp(); - 0x6: push_Ev(); - 0x7: Inst::UD2(); + format Inst { + //0x6: group4(); + 0x6: decode MODRM_REG { + 0x0: INC(Eb); + 0x1: DEC(Eb); + default: UD2(); + } + //0x7: group5(); + 0x7: decode MODRM_REG { + 0x0: INC(Ev); + 0x1: DEC(Ev); + 0x2: CALL_NEAR(Ev); + 0x3: WarnUnimpl::call_far_Mp(); + 0x4: JMP(Ev); + 0x5: WarnUnimpl::jmp_far_Mp(); + 0x6: PUSH(Ev); + 0x7: UD2(); + } } } } |