(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 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,
|
/* After processing and defining all the values of an enumeration type,
|
||||||
install their decls in the enumeration type and finish it off.
|
install their decls in the enumeration type and finish it off.
|
||||||
ENUMTYPE is the type object and VALUES a list of decl-value pairs.
|
ENUMTYPE is the type object and VALUES a list of decl-value pairs.
|
||||||
|
Loading…
Reference in New Issue
Block a user