aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>1998-04-04 09:46:06 -0800
committerRichard Henderson <rth@gcc.gnu.org>1998-04-04 09:46:06 -0800
commit896cced482d766c5d1d07ce1c71c191ac8864dd3 (patch)
tree732571c84a2af807ac7242046fc7cc2b2ae49b19
parent8983c7160410e7b865cd27a02b34fa506c8c2620 (diff)
downloadgcc-896cced482d766c5d1d07ce1c71c191ac8864dd3.zip
gcc-896cced482d766c5d1d07ce1c71c191ac8864dd3.tar.gz
gcc-896cced482d766c5d1d07ce1c71c191ac8864dd3.tar.bz2
tree.h (sizetype_tab[2], [...]): Merge all of these into a single struct, with additional [us]sizetype entries.
* 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. From-SVN: r18994
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/fold-const.c4
-rw-r--r--gcc/stor-layout.c33
-rw-r--r--gcc/tree.h18
4 files changed, 48 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 789c87c..4cd6303 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+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.
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 648dc3b..afdd26b 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -1444,14 +1444,14 @@ size_int_wide (number, high, bit_p)
/* 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;
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index 8aaf2f6..365826d 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -32,10 +32,9 @@ Boston, MA 02111-1307, USA. */
#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. */
@@ -1103,14 +1102,14 @@ make_unsigned_type (precision)
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;
@@ -1124,18 +1123,32 @@ set_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,
diff --git a/gcc/tree.h b/gcc/tree.h
index 8fee521..667cab9 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -1435,9 +1435,21 @@ extern void put_pending_sizes PROTO((tree));
+ (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;