aboutsummaryrefslogtreecommitdiff
path: root/gas/config
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2007-09-06 12:28:12 +0000
committerH.J. Lu <hjl.tools@gmail.com>2007-09-06 12:28:12 +0000
commit26186d7440dcc84fd70c92e43d547591b136a6b0 (patch)
treea6b70f9a9a07166db7a6fefbf8fa054b3f16118a /gas/config
parenta8231e4eda8c5f8b59722bb0ffcd88828048b663 (diff)
downloadgdb-26186d7440dcc84fd70c92e43d547591b136a6b0.zip
gdb-26186d7440dcc84fd70c92e43d547591b136a6b0.tar.gz
gdb-26186d7440dcc84fd70c92e43d547591b136a6b0.tar.bz2
gas/
2007-09-06 H.J. Lu <hongjiu.lu@intel.com> * config/tc-i386.c (match_template): Handle invlpga, vmload, vmrun and vmsave in SVME. (process_suffix): Likewise. gas/testsuite/ 2007-09-06 H.J. Lu <hongjiu.lu@intel.com> * gas/i386/svme.s: Updated to allow eax in 64bit. * gas/i386/svme.d: Updated. * gas/i386/svme64.d: Likewise. opcodes/ 2007-09-06 H.J. Lu <hongjiu.lu@intel.com> * i386-opc.tbl: Correct SVME instructions to allow 32bit register operand in 64bit mode. * i386-tbl.h: Regenerated.
Diffstat (limited to 'gas/config')
-rw-r--r--gas/config/tc-i386.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index a5ac843..54841b1 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -2664,9 +2664,15 @@ match_template (void)
|| !MATCH (overlap1, i.types[1], operand_types[1])
/* monitor in SSE3 is a very special case. The first
register and the second register may have different
- sizes. The same applies to crc32 in SSE4.2. */
+ sizes. The same applies to crc32 in SSE4.2. It is
+ also true for invlpga, vmload, vmrun and vmsave in
+ SVME. */
|| !((t->base_opcode == 0x0f01
- && t->extension_opcode == 0xc8)
+ && (t->extension_opcode == 0xc8
+ || t->extension_opcode == 0xd8
+ || t->extension_opcode == 0xda
+ || t->extension_opcode == 0xdb
+ || t->extension_opcode == 0xdf))
|| t->base_opcode == 0xf20f38f1
|| CONSISTENT_REGISTER_MATCH (overlap0, i.types[0],
operand_types[0],
@@ -3000,11 +3006,17 @@ process_suffix (void)
/* Now select between word & dword operations via the operand
size prefix, except for instructions that will ignore this
prefix anyway. */
- if (i.tm.base_opcode == 0x0f01 && i.tm.extension_opcode == 0xc8)
+ if (i.tm.base_opcode == 0x0f01
+ && (i.tm.extension_opcode == 0xc8
+ || i.tm.extension_opcode == 0xd8
+ || i.tm.extension_opcode == 0xda
+ || i.tm.extension_opcode == 0xdb
+ || i.tm.extension_opcode == 0xdf))
{
/* monitor in SSE3 is a very special case. The default size
of AX is the size of mode. The address size override
- prefix will change the size of AX. */
+ prefix will change the size of AX. It is also true for
+ invlpga, vmload, vmrun and vmsave in SVME. */
if (i.op->regs[0].reg_type &
(flag_code == CODE_32BIT ? Reg16 : Reg32))
if (!add_prefix (ADDR_PREFIX_OPCODE))