changeset 8038b47efe64 in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=8038b47efe64
description:
X86: Make larger blocks of instructions use the Inst format by default.
diffstat:
1 file changed, 331 insertions(+), 323 deletions(-)
src/arch/x86/isa/decoder/two_byte_opcodes.isa | 654 ++++++++++++-------------
diffs (truncated from 721 to 300 lines):
diff -r e5a3ae40c4d0 -r 8038b47efe64
src/arch/x86/isa/decoder/two_byte_opcodes.isa
--- a/src/arch/x86/isa/decoder/two_byte_opcodes.isa Mon Aug 17 20:04:03
2009 -0700
+++ b/src/arch/x86/isa/decoder/two_byte_opcodes.isa Mon Aug 17 20:04:03
2009 -0700
@@ -285,86 +285,88 @@
0x6: FailUnimpl::femms();
0x7: FailUnimpl::threednow();
}
- 0x02: decode LEGACY_DECODEVAL {
- // no prefix
- 0x0: decode OPCODE_OP_BOTTOM3 {
- 0x0: Inst::MOVUPS(Vo,Wo);
- 0x1: Inst::MOVUPS(Wo,Vo);
- 0x2: decode MODRM_MOD {
- 0x3: Inst::MOVHLPS(Vq,VRq);
- default: Inst::MOVLPS(Vq,Mq);
+ format Inst{
+ 0x02: decode LEGACY_DECODEVAL {
+ // no prefix
+ 0x0: decode OPCODE_OP_BOTTOM3 {
+ 0x0: MOVUPS(Vo,Wo);
+ 0x1: MOVUPS(Wo,Vo);
+ 0x2: decode MODRM_MOD {
+ 0x3: MOVHLPS(Vq,VRq);
+ default: MOVLPS(Vq,Mq);
+ }
+ 0x3: MOVLPS(Mq,Vq);
+ 0x4: UNPCKLPS(Vps,Wq);
+ 0x5: UNPCKHPS(Vpd,Wq);
+ 0x6: decode MODRM_MOD {
+ 0x3: MOVLHPS(Vq,VRq);
+ default: MOVHPS(Vq,Mq);
+ }
+ 0x7: MOVHPS(Mq,Vq);
}
- 0x3: Inst::MOVLPS(Mq,Vq);
- 0x4: Inst::UNPCKLPS(Vps,Wq);
- 0x5: Inst::UNPCKHPS(Vpd,Wq);
- 0x6: decode MODRM_MOD {
- 0x3: Inst::MOVLHPS(Vq,VRq);
- default: Inst::MOVHPS(Vq,Mq);
+ // repe (0xF3)
+ 0x4: decode OPCODE_OP_BOTTOM3 {
+ 0x0: WarnUnimpl::movss_Vd_Wd();
+ 0x1: WarnUnimpl::movss_Wd_Vd();
+ 0x2: WarnUnimpl::movsldup_Vo_Wo();
+ 0x6: WarnUnimpl::movshdup_Vo_Wo();
+ default: UD2();
}
- 0x7: Inst::MOVHPS(Mq,Vq);
+ // operand size (0x66)
+ 0x1: decode OPCODE_OP_BOTTOM3 {
+ 0x0: MOVUPD(Vo,Wo);
+ 0x1: MOVUPD(Wo,Vo);
+ 0x2: MOVLPD(Vq,Mq);
+ 0x3: MOVLPD(Mq,Vq);
+ 0x4: UNPCKLPD(Vo,Wq);
+ 0x5: UNPCKHPD(Vo,Wo);
+ 0x6: MOVHPD(Vq,Mq);
+ 0x7: MOVHPD(Mq,Vq);
+ }
+ // repne (0xF2)
+ 0x8: decode OPCODE_OP_BOTTOM3 {
+ 0x0: MOVSD(Vq,Wq);
+ 0x1: MOVSD(Wq,Vq);
+ 0x2: MOVDDUP(Vo,Wq);
+ default: UD2();
+ }
+ default: UD2();
}
- // repe (0xF3)
- 0x4: decode OPCODE_OP_BOTTOM3 {
- 0x0: movss_Vd_Wd();
- 0x1: movss_Wd_Vd();
- 0x2: movsldup_Vo_Wo();
- 0x6: movshdup_Vo_Wo();
- default: Inst::UD2();
+ 0x03: decode OPCODE_OP_BOTTOM3 {
+ //group17();
+ 0x0: decode MODRM_REG {
+ 0x0: WarnUnimpl::prefetch_nta();
+ 0x1: PREFETCH_T0(Mb);
+ 0x2: WarnUnimpl::prefetch_t1();
+ 0x3: WarnUnimpl::prefetch_t2();
+ default: HINT_NOP();
+ }
+ 0x1: HINT_NOP();
+ 0x2: HINT_NOP();
+ 0x3: HINT_NOP();
+ 0x4: HINT_NOP();
+ 0x5: HINT_NOP();
+ 0x6: HINT_NOP();
+ 0x7: HINT_NOP();
}
- // operand size (0x66)
- 0x1: decode OPCODE_OP_BOTTOM3 {
- 0x0: Inst::MOVUPD(Vo,Wo);
- 0x1: Inst::MOVUPD(Wo,Vo);
- 0x2: Inst::MOVLPD(Vq,Mq);
- 0x3: Inst::MOVLPD(Mq,Vq);
- 0x4: Inst::UNPCKLPD(Vo,Wq);
- 0x5: Inst::UNPCKHPD(Vo,Wo);
- 0x6: Inst::MOVHPD(Vq,Mq);
- 0x7: Inst::MOVHPD(Mq,Vq);
+ 0x04: decode LEGACY_DECODEVAL {
+ // no prefix
+ 0x0: decode OPCODE_OP_BOTTOM3 {
+ 0x0: MOV(Rd,Cd);
+ 0x1: MOV(Rd,Dd);
+ 0x2: MOV(Cd,Rd);
+ 0x3: MOV(Dd,Rd);
+ 0x4: WarnUnimpl::mov_Rd_Td();
+ 0x6: WarnUnimpl::mov_Td_Rd();
+ default: UD2();
+ }
+ // lock prefix (0xF0)
+ 0x2: decode OPCODE_OP_BOTTOM3 {
+ 0x0: WarnUnimpl::mov_Rd_CR8D();
+ 0x2: WarnUnimpl::mov_CR8D_Rd();
+ }
+ default: UD2();
}
- // repne (0xF2)
- 0x8: decode OPCODE_OP_BOTTOM3 {
- 0x0: Inst::MOVSD(Vq,Wq);
- 0x1: Inst::MOVSD(Wq,Vq);
- 0x2: Inst::MOVDDUP(Vo,Wq);
- default: Inst::UD2();
- }
- default: Inst::UD2();
- }
- 0x03: decode OPCODE_OP_BOTTOM3 {
- //group17();
- 0x0: decode MODRM_REG {
- 0x0: prefetch_nta();
- 0x1: Inst::PREFETCH_T0(Mb);
- 0x2: prefetch_t1();
- 0x3: prefetch_t2();
- default: Inst::HINT_NOP();
- }
- 0x1: Inst::HINT_NOP();
- 0x2: Inst::HINT_NOP();
- 0x3: Inst::HINT_NOP();
- 0x4: Inst::HINT_NOP();
- 0x5: Inst::HINT_NOP();
- 0x6: Inst::HINT_NOP();
- 0x7: Inst::HINT_NOP();
- }
- 0x04: decode LEGACY_DECODEVAL {
- // no prefix
- 0x0: decode OPCODE_OP_BOTTOM3 {
- 0x0: Inst::MOV(Rd,Cd);
- 0x1: Inst::MOV(Rd,Dd);
- 0x2: Inst::MOV(Cd,Rd);
- 0x3: Inst::MOV(Dd,Rd);
- 0x4: mov_Rd_Td();
- 0x6: mov_Td_Rd();
- default: Inst::UD2();
- }
- // lock prefix (0xF0)
- 0x2: decode OPCODE_OP_BOTTOM3 {
- 0x0: mov_Rd_CR8D();
- 0x2: mov_CR8D_Rd();
- }
- default: Inst::UD2();
}
0x05: decode LEGACY_DECODEVAL {
// no prefix
@@ -454,147 +456,145 @@
0x6: CMOVLE(Gv,Ev);
0x7: CMOVNLE(Gv,Ev);
}
- }
- 0x0A: decode LEGACY_DECODEVAL {
- // no prefix
- 0x0: decode OPCODE_OP_BOTTOM3 {
- 0x0: movmskps_Gd_VRo();
- 0x1: Inst::SQRTPS(Vo,Wo);
- 0x2: rqsrtps_Vo_Wo();
- 0x3: rcpps_Vo_Wo();
- 0x4: Inst::ANDPS(Vo,Wo);
- 0x5: Inst::ANDNPS(Vo,Wo);
- 0x6: Inst::ORPS(Vo,Wo);
- 0x7: Inst::XORPS(Vo,Wo);
- }
- // repe (0xF3)
- 0x4: decode OPCODE_OP_BOTTOM3 {
- 0x1: Inst::SQRTSS(Vd,Wd);
- 0x2: rsqrtss_Vd_Wd();
- 0x3: rcpss_Vd_Wd();
- default: Inst::UD2();
- }
- // operand size (0x66)
- 0x1: decode OPCODE_OP_BOTTOM3 {
- 0x0: movmskpd_Gd_VRo();
- 0x1: Inst::SQRTPD(Vo,Wo);
- 0x4: Inst::ANDPD(Vo,Wo);
- 0x5: Inst::ANDNPD(Vo,Wo);
- 0x6: Inst::ORPD(Vo,Wo);
- //This really should be type o, but it works on q sized
- //chunks at a time.
- 0x7: Inst::XORPD(Vq,Wq);
- default: Inst::UD2();
- }
- format Inst {
+ 0x0A: decode LEGACY_DECODEVAL {
+ // no prefix
+ 0x0: decode OPCODE_OP_BOTTOM3 {
+ 0x0: WarnUnimpl::movmskps_Gd_VRo();
+ 0x1: SQRTPS(Vo,Wo);
+ 0x2: WarnUnimpl::rqsrtps_Vo_Wo();
+ 0x3: WarnUnimpl::rcpps_Vo_Wo();
+ 0x4: ANDPS(Vo,Wo);
+ 0x5: ANDNPS(Vo,Wo);
+ 0x6: ORPS(Vo,Wo);
+ 0x7: XORPS(Vo,Wo);
+ }
+ // repe (0xF3)
+ 0x4: decode OPCODE_OP_BOTTOM3 {
+ 0x1: SQRTSS(Vd,Wd);
+ 0x2: WarnUnimpl::rsqrtss_Vd_Wd();
+ 0x3: WarnUnimpl::rcpss_Vd_Wd();
+ default: UD2();
+ }
+ // operand size (0x66)
+ 0x1: decode OPCODE_OP_BOTTOM3 {
+ 0x0: WarnUnimpl::movmskpd_Gd_VRo();
+ 0x1: SQRTPD(Vo,Wo);
+ 0x4: ANDPD(Vo,Wo);
+ 0x5: ANDNPD(Vo,Wo);
+ 0x6: ORPD(Vo,Wo);
+ //This really should be type o, but it works on q sized
+ //chunks at a time.
+ 0x7: XORPD(Vq,Wq);
+ default: UD2();
+ }
// repne (0xF2)
0x8: decode OPCODE_OP_BOTTOM3 {
- 0x1: Inst::SQRTSD(Vq,Wq);
+ 0x1: SQRTSD(Vq,Wq);
default: UD2();
}
default: UD2();
}
- }
- 0x0B: decode LEGACY_DECODEVAL {
- // no prefix
- 0x0: decode OPCODE_OP_BOTTOM3 {
- 0x0: Inst::ADDPS(Vo,Wo);
- 0x1: Inst::MULPS(Vo,Wo);
- 0x2: Inst::CVTPS2PD(Vo,Wq);
- 0x3: Inst::CVTDQ2PS(Vo,Wo);
- 0x4: Inst::SUBPS(Vo,Wo);
- 0x5: Inst::MINPS(Vo,Wo);
- 0x6: Inst::DIVPS(Vo,Wo);
- 0x7: Inst::MAXPS(Vo,Wo);
+ 0x0B: decode LEGACY_DECODEVAL {
+ // no prefix
+ 0x0: decode OPCODE_OP_BOTTOM3 {
+ 0x0: ADDPS(Vo,Wo);
+ 0x1: MULPS(Vo,Wo);
+ 0x2: CVTPS2PD(Vo,Wq);
+ 0x3: CVTDQ2PS(Vo,Wo);
+ 0x4: SUBPS(Vo,Wo);
+ 0x5: MINPS(Vo,Wo);
+ 0x6: DIVPS(Vo,Wo);
+ 0x7: MAXPS(Vo,Wo);
+ }
+ // repe (0xF3)
+ 0x4: decode OPCODE_OP_BOTTOM3 {
+ 0x0: ADDSS(Vd,Wd);
+ 0x1: MULSS(Vd,Wd);
+ 0x2: CVTSS2SD(Vq,Wd);
+ 0x3: WarnUnimpl::cvttps2dq_Vo_Wo();
+ 0x4: SUBSS(Vd,Wd);
+ 0x5: MINSS(Vd,Wd);
+ 0x6: DIVSS(Vd,Wd);
+ 0x7: MAXSS(Vd,Wd);
+ }
+ // operand size (0x66)
+ 0x1: decode OPCODE_OP_BOTTOM3 {
+ 0x0: ADDPD(Vo,Wo);
+ 0x1: MULPD(Vo,Wo);
+ 0x2: CVTPD2PS(Vo,Wo);
+ 0x3: WarnUnimpl::cvtps2dq_Vo_Wo();
+ 0x4: SUBPD(Vo,Wo);
+ 0x5: MINPD(Vo,Wo);
+ 0x6: DIVPD(Vo,Wo);
+ 0x7: MAXPD(Vo,Wo);
+ }
+ // repne (0xF2)
+ 0x8: decode OPCODE_OP_BOTTOM3 {
+ 0x0: ADDSD(Vq,Wq);
+ 0x1: MULSD(Vq,Wq);
+ 0x2: CVTSD2SS(Vd,Wq);
+ 0x4: SUBSD(Vq,Wq);
+ 0x5: MINSD(Vq,Wq);
+ 0x6: DIVSD(Vq,Wq);
+ 0x7: MAXSD(Vq,Wq);
+ default: UD2();
+ }
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev