(min_precision): Move to c-common.c
From-SVN: r8021
This commit is contained in:
parent
6acfe908e3
commit
29226a190a
31
gcc/c-decl.c
31
gcc/c-decl.c
@ -5647,37 +5647,6 @@ start_enum (name)
|
||||
return enumtype;
|
||||
}
|
||||
|
||||
/* Return the minimum number of bits needed to represent VALUE in a
|
||||
signed or unsigned type, UNSIGNEDP says which. */
|
||||
|
||||
static int
|
||||
min_precision (value, unsignedp)
|
||||
tree value;
|
||||
int unsignedp;
|
||||
{
|
||||
int log;
|
||||
|
||||
/* If the value is negative, compute its negative minus 1. The latter
|
||||
adjustment is because the absolute value of the largest negative value
|
||||
is one larger than the largest positive value. This is equivalent to
|
||||
a bit-wise negation, so use that operation instead. */
|
||||
|
||||
if (tree_int_cst_sgn (value) < 0)
|
||||
value = fold (build1 (BIT_NOT_EXPR, TREE_TYPE (value), value));
|
||||
|
||||
/* Return the number of bits needed, taking into account the fact
|
||||
that we need one more bit for a signed than unsigned type. */
|
||||
|
||||
if (integer_zerop (value))
|
||||
log = 0;
|
||||
else if (TREE_INT_CST_HIGH (value) != 0)
|
||||
log = HOST_BITS_PER_WIDE_INT + floor_log2 (TREE_INT_CST_HIGH (value));
|
||||
else
|
||||
log = floor_log2 (TREE_INT_CST_LOW (value));
|
||||
|
||||
return log + 1 + ! unsignedp;
|
||||
}
|
||||
|
||||
/* After processing and defining all the values of an enumeration type,
|
||||
install their decls in the enumeration type and finish it off.
|
||||
ENUMTYPE is the type object and VALUES a list of decl-value pairs.
|
||||
|
Loading…
Reference in New Issue
Block a user