mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-13 07:14:25 +08:00
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
This commit is contained in:
parent
8983c71604
commit
896cced482
@ -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.
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
18
gcc/tree.h
18
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;
|
||||
|
Loading…
Reference in New Issue
Block a user