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)

Uros.

Reply via email to