On Dec 13, 2013, at 5:11 AM, Richard Biener <rguent...@suse.de> wrote:

> On Fri, 13 Dec 2013, Uros Bizjak wrote:
> 
>> Hello!
>> 
>>> In addition, this target also changes the way that MAX_BITSIZE_MODE_ANY_INT 
>>> is calculated.
>>> The value is heavily used on the wide-int branch to allocate buffers that 
>>> are used to hold large
>>> integer values. The change in the way it is computed was motivated by the 
>>> i386 port, but there
>>> may be other ports that have the same problem. The i386 port defines two 
>>> very large integer
>>> modes that are only used as containers for large vectors. They are never 
>>> used for large integers.
>>> The new way of computing this allows a port to say (very early) that some 
>>> of these integer modes
>>> are never used to hold numbers and so smaller buffers can be used for 
>>> integer calculations. Other
>>> ports that play the same game should follow suit.
>> 
>> Index: gcc/config/i386/i386-modes.def
>> ===================================================================
>> --- gcc/config/i386/i386-modes.def (revision 205895)
>> +++ gcc/config/i386/i386-modes.def (working copy)
>> @@ -90,5 +90,10 @@ VECTOR_MODE (INT, QI, 2);     /*
>> INT_MODE (OI, 32);
>> INT_MODE (XI, 64);
>> 
>> +/* Keep the OI and XI modes from confusing the compiler into thinking
>> +   that these modes could actually be used for computation.  They are
>> +   only holders for vectors during data movement.  */
>> +#define MAX_BITSIZE_MODE_ANY_INT (128)
>> +
>> /* The symbol Pmode stands for one of the above machine modes (usually 
>> SImode).
>>    The tm.h file specifies which one.  It is not a distinct mode.  */
>> 
>> __int128 is avaialble only for x86_64 - 64bit targets, so:
>> 
>> #define MAX_BITSIZE_MODE_ANY_INT (TARGET_64BIT ? 128 : 64)
> 
> It needs to be a compile-time constant.
> 
> Richard.
I will add a line to the effect to the doc before checking it in.

Reply via email to