PR binutils/23013: Assembler not recognizing 3-opt dcbt instruction form on Power systems

Peter Bergner bergner@vnet.ibm.com
Sun Apr 1 20:28:00 GMT 2018


On 4/1/18 11:17 AM, Gunther Nikl wrote:
> Hello,
> 
>> 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;
> 
> Don't you need parentheses to not change the logic?

In the end, I went with:

-       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_parse_cpu (ppc_cpu, &sticky, "power8");

Peter



More information about the Binutils mailing list