aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-ppc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/config/tc-ppc.c')
-rw-r--r--gas/config/tc-ppc.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c
index 8f7ecae..6144d10 100644
--- a/gas/config/tc-ppc.c
+++ b/gas/config/tc-ppc.c
@@ -350,15 +350,23 @@ md_begin ()
retval = hash_insert (ppc_hash, op->name, (PTR) op);
if (retval != (const char *) NULL)
{
- /* When using -many, the comparison instructions are a
- harmless special case. */
- if (ppc_cpu != (PPC_OPCODE_POWER
- | PPC_OPCODE_POWER2
- | PPC_OPCODE_PPC)
- || (strcmp (op->name, "cmpli") != 0
- && strcmp (op->name, "cmpi") != 0
- && strcmp (op->name, "cmp") != 0
- && strcmp (op->name, "cmpl") != 0))
+ /* We permit a duplication of the mfdec instruction on
+ the 601, because it seems to have one value on the
+ 601 and a different value on other PowerPC
+ processors. It's easier to permit a duplication than
+ to define a new instruction type flag. When using
+ -many, the comparison instructions are a harmless
+ special case. */
+ if (strcmp (retval, "exists") != 0
+ || (((ppc_cpu & PPC_OPCODE_601) == 0
+ || strcmp (op->name, "mfdec") != 0)
+ && (ppc_cpu != (PPC_OPCODE_POWER
+ | PPC_OPCODE_POWER2
+ | PPC_OPCODE_PPC)
+ || (strcmp (op->name, "cmpli") != 0
+ && strcmp (op->name, "cmpi") != 0
+ && strcmp (op->name, "cmp") != 0
+ && strcmp (op->name, "cmpl") != 0))))
abort ();
}
}