diff options
Diffstat (limited to 'gas/config/tc-ppc.c')
-rw-r--r-- | gas/config/tc-ppc.c | 26 |
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 (); } } |