+Sat Apr 4 17:42:05 1998 Richard Henderson <rth@cygnus.com>
+
+ * tree.h (sizetype_tab[2], sbitsizetype, ubitsizetype): Merge all
+ of these into a single struct, with additional [us]sizetype entries.
+ * stor-layout.c (set_sizetype): Initialize [us]sizetype.
+ * fold-const.c (size_int_wide): Don't rely on sizetype_tab being
+ an array.
+
Sat Apr 4 17:04:41 1998 Richard Henderson <rth@cygnus.com>
* configure.in (alpha-*-linux-*): Undo tm_file changes from gcc2 merge.
/* Make this a permanent node. */
end_temporary_allocation ();
t = build_int_2 (number, 0);
- TREE_TYPE (t) = sizetype_tab[bit_p];
+ TREE_TYPE (t) = bit_p ? bitsizetype : sizetype;
size_table[number][bit_p] = t;
pop_obstacks ();
}
else
{
t = build_int_2 (number, high);
- TREE_TYPE (t) = sizetype_tab[bit_p];
+ TREE_TYPE (t) = bit_p ? bitsizetype : sizetype;
TREE_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (t) = force_fit_type (t, 0);
}
return t;
#define CEIL(x,y) (((x) + (y) - 1) / (y))
/* Data type for the expressions representing sizes of data types.
- It is the first integer type laid out.
- In C, this is int. */
+ It is the first integer type laid out. */
-tree sizetype_tab[2], sbitsizetype, ubitsizetype;
+struct sizetype_tab sizetype_tab;
/* An integer constant with value 0 whose type is sizetype. */
return type;
}
-/* Set sizetype to TYPE, and initialize *bitsizetype accordingly.
+/* Set sizetype to TYPE, and initialize *sizetype accordingly.
Also update the type of any standard type's sizes made so far. */
void
set_sizetype (type)
tree type;
{
- int precision = TYPE_PRECISION (type);
+ int oprecision = TYPE_PRECISION (type), precision;
sizetype = type;
if (! bitsizetype)
bitsizetype = make_node (INTEGER_TYPE);
- precision += BITS_PER_UNIT_LOG + 1;
+ precision = oprecision + BITS_PER_UNIT_LOG + 1;
/* However, when cross-compiling from a 32 bit to a 64 bit host,
we are limited to 64 bit precision. */
if (precision > 2 * HOST_BITS_PER_WIDE_INT)
precision = 2 * HOST_BITS_PER_WIDE_INT;
TYPE_PRECISION (bitsizetype) = precision;
- (TREE_UNSIGNED (type) ? fixup_unsigned_type : fixup_signed_type)
- (bitsizetype);
+ if (TREE_UNSIGNED (type))
+ fixup_unsigned_type (bitsizetype);
+ else
+ fixup_signed_type (bitsizetype);
layout_type (bitsizetype);
- sbitsizetype = make_signed_type (precision);
- ubitsizetype = make_unsigned_type (precision);
+ if (TREE_UNSIGNED (type))
+ {
+ usizetype = sizetype;
+ ubitsizetype = bitsizetype;
+ ssizetype = make_signed_type (oprecision);
+ sbitsizetype = make_signed_type (precision);
+ }
+ else
+ {
+ ssizetype = sizetype;
+ sbitsizetype = bitsizetype;
+ usizetype = make_unsigned_type (oprecision);
+ ubitsizetype = make_unsigned_type (precision);
+ }
}
/* Set the extreme values of TYPE based on its precision in bits,
+ (BITS_PER_UNIT > 8) + (BITS_PER_UNIT > 16) + (BITS_PER_UNIT > 32) \
+ (BITS_PER_UNIT > 64) + (BITS_PER_UNIT > 128) + (BITS_PER_UNIT > 256))
-extern tree sizetype_tab[2], sbitsizetype, ubitsizetype;
-#define sizetype sizetype_tab[0]
-#define bitsizetype sizetype_tab[1]
+struct sizetype_tab
+{
+ tree xsizetype, xbitsizetype;
+ tree ssizetype, usizetype;
+ tree sbitsizetype, ubitsizetype;
+};
+
+extern struct sizetype_tab sizetype_tab;
+
+#define sizetype sizetype_tab.xsizetype
+#define bitsizetype sizetype_tab.xbitsizetype
+#define ssizetype sizetype_tab.ssizetype
+#define usizetype sizetype_tab.usizetype
+#define sbitsizetype sizetype_tab.sbitsizetype
+#define ubitsizetype sizetype_tab.ubitsizetype
/* If nonzero, an upper limit on alignment of structure fields, in bits. */
extern int maximum_field_alignment;