diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2007-08-28 19:36:51 -0700 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2007-08-28 19:36:51 -0700 |
commit | c593cfbdebda398930fa5dc290baac42e63eea51 (patch) | |
tree | e64285ab0660e83e0532dc556a45844376390397 /src/arch | |
parent | fbab5c9bd33428a8b6b9590c6667c7a3124b67d2 (diff) | |
download | gem5-c593cfbdebda398930fa5dc290baac42e63eea51.tar.xz |
X86: More two byte opcode decoding. I missed two groups in the last changeset.
--HG--
extra : convert_revision : 1a2813b2e7d3e0e02c8f1474f372de5cf16e7d7b
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/x86/isa/decoder/two_byte_opcodes.isa | 79 |
1 files changed, 62 insertions, 17 deletions
diff --git a/src/arch/x86/isa/decoder/two_byte_opcodes.isa b/src/arch/x86/isa/decoder/two_byte_opcodes.isa index 412e168f7..810398ddc 100644 --- a/src/arch/x86/isa/decoder/two_byte_opcodes.isa +++ b/src/arch/x86/isa/decoder/two_byte_opcodes.isa @@ -637,15 +637,40 @@ } default: Inst::UD2(); } - 0x1C: decode OPCODE_OP_BOTTOM3 { - 0x0: holder(); - 0x1: holder(); - 0x2: holder(); - 0x3: holder(); - 0x4: holder(); - 0x5: holder(); - 0x6: holder(); - 0x7: holder(); + 0x1C: decode LEGACY_DECODEVAL { + // no prefix + 0x0: decode OPCODE_OP_BOTTOM3 { + 0x0: pavgb_Pq_Qq(); + 0x1: psraw_Pq_Qq(); + 0x2: psrad_Pq_Qq(); + 0x3: pavgw_Pq_Qq(); + 0x4: pmulhuw_Pq_Qq(); + 0x5: pmulhw_Pq_Qq(); + 0x7: movntq_Mq_Pq(); + default: Inst::UD2(); + } + // repe (0xF3) + 0x4: decode OPCODE_OP_BOTTOM3 { + 0x6: cvtdq2pd_Vo_Wq(); + default: Inst::UD2(); + } + // operand size (0x66) + 0x1: decode OPCODE_OP_BOTTOM3 { + 0x0: pavgb_Vo_Wo(); + 0x1: psraw_Vo_Wo(); + 0x2: psrad_Vo_Wo(); + 0x3: pavgw_Vo_Wo(); + 0x4: pmulhuw_Vo_Wo(); + 0x5: pmulhw_Vo_Wo(); + 0x6: cvttpd2dq_Vo_Wo(); + 0x7: movntdq_Mo_Vo(); + } + // repne (0xF2) + 0x8: decode OPCODE_OP_BOTTOM3 { + 0x6: cvtpd2dq_Vo_Wo(); + default: Inst::UD2(); + } + default: Inst::UD2(); } 0x1D: decode LEGACY_DECODEVAL { // no prefix @@ -673,14 +698,34 @@ default: Inst::UD2(); } 0x1E: decode OPCODE_OP_BOTTOM3 { - 0x0: holder(); - 0x1: holder(); - 0x2: holder(); - 0x3: holder(); - 0x4: holder(); - 0x5: holder(); - 0x6: holder(); - 0x7: holder(); + // no prefix + 0x0: decode OPCODE_OP_BOTTOM3 { + 0x1: psllw_Pq_Qq(); + 0x2: pslld_Pq_Qq(); + 0x3: psllq_Pq_Qq(); + 0x4: pmuludq_Pq_Qq(); + 0x5: pmaddwd_Pq_Qq(); + 0x6: psadbw_Pq_Qq(); + 0x7: maskmovq_Pq_PRq(); + default: Inst::UD2(); + } + // operand size (0x66) + 0x1: decode OPCODE_OP_BOTTOM3 { + 0x1: psllw_Vo_Wo(); + 0x2: pslld_Vo_Wo(); + 0x3: psllq_Vo_Wo(); + 0x4: pmuludq_Vo_Wo(); + 0x5: pmaddwd_Vo_Wo(); + 0x6: psadbw_Vo_Wo(); + 0x7: maskmovdqu_Vo_VRo(); + default: Inst::UD2(); + } + // repne (0xF2) + 0x8: decode OPCODE_OP_BOTTOM3 { + 0x0: lddqu_Vo_Mo(); + default: Inst::UD2(); + } + default: Inst::UD2(); } 0x1F: decode LEGACY_DECODEVAL { // no prefix |