summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl@lucon.org>2007-09-04 14:44:35 +0000
committerH.J. Lu <hjl@lucon.org>2007-09-04 14:44:35 +0000
commite49c82b2ccb2e498868a97dfa5119cd07f43638c (patch)
treee08aa8fd1e45b6da45aa2e50d783a9e70dd87a56
parent20e0fcc1ef31b3580455cc4f5135ec4305cd2510 (diff)
downloadbinutils-redhat-e49c82b2ccb2e498868a97dfa5119cd07f43638c.tar.gz
2007-09-04 H.J. Lu <hongjiu.lu@intel.com>
* config/tc-i386.c (process_operands): Remove segment override check on SVME instructions. (i386_index_check): Remove memory operand check on SVME instructions.
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/config/tc-i386.c31
2 files changed, 11 insertions, 27 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 6fb28930ed..1df3e4d63f 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,10 @@
+2007-09-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (process_operands): Remove segment override
+ check on SVME instructions.
+ (i386_index_check): Remove memory operand check on SVME
+ instructions.
+
2007-09-04 Alan Modra <amodra@bigpond.net.au>
* config/tc-spu.c (struct spu_insn): Delete "flag". Add "reloc".
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 0f6396ff03..9a39d4309b 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -3477,9 +3477,9 @@ process_operands (void)
default_seg = &ds;
}
- if ((i.tm.base_opcode == 0x8d /* lea */
- || (i.tm.cpu_flags & CpuSVME))
- && i.seg[0] && !quiet_warnings)
+ if (i.tm.base_opcode == 0x8d /* lea */
+ && i.seg[0]
+ && !quiet_warnings)
as_warn (_("segment override on `%s' is ineffectual"), i.tm.name);
/* If a segment was explicitly specified, and the specified segment
@@ -4962,30 +4962,7 @@ i386_index_check (const char *operand_string)
tryprefix:
#endif
ok = 1;
- if ((current_templates->start->cpu_flags & CpuSVME)
- && current_templates->end[-1].operand_types[0] == AnyMem)
- {
- /* Memory operands of SVME insns are special in that they only allow
- rAX as their memory address and ignore any segment override. */
- unsigned RegXX;
-
- /* SKINIT is even more restrictive: it always requires EAX. */
- if (strcmp (current_templates->start->name, "skinit") == 0)
- RegXX = Reg32;
- else if (flag_code == CODE_64BIT)
- RegXX = i.prefix[ADDR_PREFIX] == 0 ? Reg64 : Reg32;
- else
- RegXX = ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0)
- ? Reg16
- : Reg32);
- if (!i.base_reg
- || !(i.base_reg->reg_type & Acc)
- || !(i.base_reg->reg_type & RegXX)
- || i.index_reg
- || (i.types[0] & Disp))
- ok = 0;
- }
- else if (flag_code == CODE_64BIT)
+ if (flag_code == CODE_64BIT)
{
unsigned RegXX = (i.prefix[ADDR_PREFIX] == 0 ? Reg64 : Reg32);