> > 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;
+

Reply via email to