This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [wide-int] Add fast path for hosts with HWI widening multiplication


Kenneth Zadeck <zadeck@naturalbridge.com> writes:
> everyone who has a private port will hate you forever.   note that i 
> have 2 of them.

Got any other ideas though?  I suppose if we're prepared to break
compatibility with whatever the upstream of longlong.h is, we could
make more use of intN_t and uintN_t.

Having a whitelist of hosts seems like the best fix though.
I'm not sure the default umul_ppmm is going to be any better
than not defining it.

Thanks,
Richard

> On 05/08/2014 02:31 PM, Richard Sandiford wrote:
>> "Joseph S. Myers" <joseph@codesourcery.com> writes:
>>> On Thu, 8 May 2014, Ramana Radhakrishnan wrote:
>>>
>>>> <DATE>  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
>>>>
>>>>         * wide-int.cc (UTItype): Define.
>>>>         (UDWtype): Define for appropriate W_TYPE_SIZE.
>>> This breaks builds for 32-bit hosts, where TImode isn't supported.  You
>>> can only use TImode on the host if it's 64-bit.
>>>
>>> wide-int.cc:37:56: error: unable to emulate 'TI'
>> The longlong.h interface seems to be designed to be as difficult to use
>> as possible :-(  So maybe we really do need to limit it to hosts that are
>> known to work and benefit from it.
>>
>> How about the following?  I tested that it produces identical
>> wide-int.o .text for x86_64.
>>
>> I think additions to or removals from the list should be treated as
>> pre-approved.
>>
>> Thanks,
>> Richard
>>
>>
>> gcc/
>> 	* wide-int.cc: Only include longlong.h for certain targets.
>>
>> Index: gcc/wide-int.cc
>> ===================================================================
>> --- gcc/wide-int.cc	2014-05-08 19:13:15.782158808 +0100
>> +++ gcc/wide-int.cc	2014-05-08 19:28:52.880742385 +0100
>> @@ -27,19 +27,20 @@ along with GCC; see the file COPYING3.
>>   #include "tree.h"
>>   #include "dumpfile.h"
>>   
>> -#if GCC_VERSION >= 3000
>> +#if (GCC_VERSION >= 3000 \
>> +     && (defined __aarch64 \
>> +         || defined __alpha \
>> +         || defined __ia64 \
>> +         || defined __powerpc64__ \
>> +         || defined __sparcv9 \
>> +         || defined __x86_64__))
>>   #define W_TYPE_SIZE HOST_BITS_PER_WIDE_INT
>> -typedef unsigned HOST_HALF_WIDE_INT UHWtype;
>> -typedef unsigned HOST_WIDE_INT UWtype;
>>   typedef unsigned int UQItype __attribute__ ((mode (QI)));
>>   typedef unsigned int USItype __attribute__ ((mode (SI)));
>>   typedef unsigned int UDItype __attribute__ ((mode (DI)));
>> -typedef unsigned int UTItype __attribute__ ((mode (TI)));
>> -#if W_TYPE_SIZE == 32
>> -# define UDWtype       UDItype
>> -#elif W_TYPE_SIZE == 64
>> -# define UDWtype       UTItype
>> -#endif
>> +typedef unsigned HOST_HALF_WIDE_INT UHWtype;
>> +typedef unsigned HOST_WIDE_INT UWtype;
>> +typedef unsigned int UDWtype __attribute__ ((mode (TI)));
>>   #include "longlong.h"
>>   #endif
>>   


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]