> > Otherwise, I don't see what moving the test would accomplish. If > > "long" is never 128 bits, it doesn't matter if the int128 test is > > before or after it, and the other intN are never the same size as > > standard types, > > I don't see how you can assert that these will never happen.
It's checked specifically in toplev.c - if the backend *does* request a type that matches a standard size, they won't get it: +static bool +standard_type_bitsize (int bitsize) +{ + /* As a special exception, we always want __int128 enabled if possible. */ + if (bitsize == 128) + return false; + if (bitsize == CHAR_TYPE_SIZE + || bitsize == SHORT_TYPE_SIZE + || bitsize == INT_TYPE_SIZE + || bitsize == LONG_TYPE_SIZE + || (bitsize == LONG_LONG_TYPE_SIZE && LONG_LONG_TYPE_SIZE < GET_MODE_BITSIZE (TImode))) + return true; + return false; +} + /* This must happen after the backend has a chance to process + command line options, but before the parsers are + initialized. */ + for (i = 0; i < NUM_INT_N_ENTS; i ++) + if (targetm.scalar_mode_supported_p (int_n_data[i].m) + && ! standard_type_bitsize (int_n_data[i].bitsize) + && int_n_data[i].bitsize <= HOST_BITS_PER_WIDE_INT * 2) + int_n_enabled_p[i] = true; + else + int_n_enabled_p[i] = false; +