This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
PR binutils/23013: Assembler not recognizing 3-opt dcbt instruction form on Power systems
- From: Peter Bergner <bergner at vnet dot ibm dot com>
- To: Alan Modra <amodra at gmail dot com>
- Cc: binutils <binutils at sourceware dot org>, Michael Godfrey <7mg5 at queensu dot ca>
- Date: Thu, 29 Mar 2018 14:56:24 -0500
- Subject: PR binutils/23013: Assembler not recognizing 3-opt dcbt instruction form on Power systems
The 3 operand dcbt instruction was added to the Power (server) ISA in the
power4 time frame. The problem is that gas defaults to assembling for an
older cpu than power4, so you need to pass -mpower4 (or newer) to assemble
the 3 operand form of dcbt.
That said, Michael was trying to assemble on a 64-bit LE system and those
system's minimum support cpu is power8, therefore, gas really should default
to power8 when we're targeting powerpc64le-*. The following patch accomplishes
that with no testsuite regressions.
Alan, does this look reasonable to you?
Peter
diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c
index ff76221..e3d5d84 100644
--- a/gas/config/tc-ppc.c
+++ b/gas/config/tc-ppc.c
@@ -1403,7 +1403,14 @@ ppc_set_cpu (void)
if ((ppc_cpu & ~(ppc_cpu_t) PPC_OPCODE_ANY) == 0)
{
if (ppc_obj64)
- ppc_cpu |= PPC_OPCODE_PPC | PPC_OPCODE_64;
+ if (target_big_endian)
+ ppc_cpu |= PPC_OPCODE_PPC | PPC_OPCODE_64;
+ else
+ /* The minimum supported cpu for 64-bit little-endian is power8. */
+ ppc_cpu |= PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64
+ | PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6
+ | PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8
+ | PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX;
else if (strncmp (default_os, "aix", 3) == 0
&& default_os[3] >= '4' && default_os[3] <= '9')
ppc_cpu |= PPC_OPCODE_COMMON;