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.