> On Tue, 5 Jul 2016, Richard Biener wrote: > > >given widest_int has only precision of TImode on x86_64? > > Is that the case? The comments say: > > It is really finite precision math where the precision is 4 times the > size of the largest integer that the target port can represent. > > And the target has > > /* 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) > > I would thus expect widest_int to have at 512 bits on x86_64 > (possibly more depending on the exact definition of largest > integer).
I think that comment is just confusing. (I got trapped by it, too) /* The MAX_BITSIZE_MODE_ANY_INT is automatically generated by a very early examination of the target's mode file. The WIDE_INT_MAX_ELTS can accomodate at least 1 more bit so that unsigned numbers of that mode can be represented as a signed value. Note that it is still possible to create fixed_wide_ints that have precisions greater than MAX_BITSIZE_MODE_ANY_INT. This can be useful when representing a double-width multiplication result, for example. */ #define WIDE_INT_MAX_ELTS \ ((MAX_BITSIZE_MODE_ANY_INT + HOST_BITS_PER_WIDE_INT) / HOST_BITS_PER_WIDE_INT) #define WIDE_INT_MAX_PRECISION (WIDE_INT_MAX_ELTS * HOST_BITS_PER_WIDE_INT) typedef FIXED_WIDE_INT (WIDE_INT_MAX_PRECISION) widest_int; My reading is that the type will end up being 128+64 bits, but there is only one extra bit guarnatee in general, which is taken by sign. Honza > > -- > Marc Glisse