double-int.h (double_int_ior): New function.

* double-int.h (double_int_ior): New function.
	* tree.h (build_int_cst_wide_type): Remove.
	* tree.c (build_int_cst_wide_type): Remove.
	* fold-const.c (native_interpret_int): Use double_int_to_tree instead
	of build_int_cst_wide_type.
	* stor-layout.c (set_sizetype): (Ditto.).
	* dojump.c (do_jump): Use build_int_cstu instead of
	build_int_cst_wide_type.

/java
	* jcf-parse.c (get_constant): Use double_int_to_tree instead of
	build_int_cst_wide_type.

From-SVN: r159595
This commit is contained in:
Anatoly Sokolov 2010-05-20 00:09:57 +04:00 committed by Anatoly Sokolov
parent 9908949ca6
commit 1961ffb8cd
9 changed files with 48 additions and 32 deletions

View File

@ -1,3 +1,14 @@
2010-05-19 Anatoly Sokolov <aesok@post.ru>
* double-int.h (double_int_ior): New function.
* tree.h (build_int_cst_wide_type): Remove.
* tree.c (build_int_cst_wide_type): Remove.
* fold-const.c (native_interpret_int): Use double_int_to_tree instead
of build_int_cst_wide_type.
* stor-layout.c (set_sizetype): (Ditto.).
* dojump.c (do_jump): Use build_int_cstu instead of
build_int_cst_wide_type.
2010-05-19 Eric Botcazou <ebotcazou@adacore.com>
* langhooks.h (struct lang_hooks): Add new field deep_unsharing.

View File

@ -542,7 +542,7 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label, int prob)
unsigned HOST_WIDE_INT mask
= (unsigned HOST_WIDE_INT) 1 << TREE_INT_CST_LOW (shift);
do_jump (build2 (BIT_AND_EXPR, argtype, arg,
build_int_cst_wide_type (argtype, mask, 0)),
build_int_cstu (argtype, mask)),
clr_label, set_label, setclr_prob);
break;
}

View File

@ -126,6 +126,9 @@ double_int double_int_udivmod (double_int, double_int, unsigned, double_int *);
double_int double_int_setbit (double_int, unsigned);
/* Logical operations. */
/* Returns ~A. */
static inline double_int
double_int_not (double_int a)
{
@ -134,6 +137,16 @@ double_int_not (double_int a)
return a;
}
/* Returns A | B. */
static inline double_int
double_int_ior (double_int a, double_int b)
{
a.low |= b.low;
a.high |= b.high;
return a;
}
/* Shift operations. */
double_int double_int_lshift (double_int, HOST_WIDE_INT, unsigned int, bool);
double_int double_int_rshift (double_int, HOST_WIDE_INT, unsigned int, bool);

View File

@ -7408,13 +7408,14 @@ native_interpret_int (tree type, const unsigned char *ptr, int len)
int total_bytes = GET_MODE_SIZE (TYPE_MODE (type));
int byte, offset, word, words;
unsigned char value;
unsigned int HOST_WIDE_INT lo = 0;
HOST_WIDE_INT hi = 0;
double_int result;
if (total_bytes > len)
return NULL_TREE;
if (total_bytes * BITS_PER_UNIT > 2 * HOST_BITS_PER_WIDE_INT)
return NULL_TREE;
result = double_int_zero;
words = total_bytes / UNITS_PER_WORD;
for (byte = 0; byte < total_bytes; byte++)
@ -7436,13 +7437,13 @@ native_interpret_int (tree type, const unsigned char *ptr, int len)
value = ptr[offset];
if (bitpos < HOST_BITS_PER_WIDE_INT)
lo |= (unsigned HOST_WIDE_INT) value << bitpos;
result.low |= (unsigned HOST_WIDE_INT) value << bitpos;
else
hi |= (unsigned HOST_WIDE_INT) value
<< (bitpos - HOST_BITS_PER_WIDE_INT);
result.high |= (unsigned HOST_WIDE_INT) value
<< (bitpos - HOST_BITS_PER_WIDE_INT);
}
return build_int_cst_wide_type (type, lo, hi);
return double_int_to_tree (type, result);
}

View File

@ -1,3 +1,8 @@
2010-05-19 Anatoly Sokolov <aesok@post.ru>
* jcf-parse.c (get_constant): Use double_int_to_tree instead of
build_int_cst_wide_type.
2010-05-18 Nathan Froyd <froydnj@codesourcery.com>
* expr.c (pop_arguments): Fix use of undeclared variable.

View File

@ -1,6 +1,6 @@
/* Parser for Java(TM) .class files.
Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
This file is part of GCC.
@ -1040,14 +1040,15 @@ get_constant (JCF *jcf, int index)
}
case CONSTANT_Long:
{
unsigned HOST_WIDE_INT num = JPOOL_UINT (jcf, index);
unsigned HOST_WIDE_INT lo;
HOST_WIDE_INT hi;
lshift_double (num, 0, 32, 64, &lo, &hi, 0);
num = JPOOL_UINT (jcf, index+1);
add_double (lo, hi, num, 0, &lo, &hi);
value = build_int_cst_wide_type (long_type_node, lo, hi);
unsigned HOST_WIDE_INT num;
double_int val;
num = JPOOL_UINT (jcf, index);
val = double_int_lshift (uhwi_to_double_int (num), 32, 64, false);
num = JPOOL_UINT (jcf, index + 1);
val = double_int_ior (val, uhwi_to_double_int (num));
value = double_int_to_tree (long_type_node, val);
break;
}

View File

@ -2275,9 +2275,7 @@ set_sizetype (tree type)
sign-extended in a way consistent with force_fit_type. */
max = TYPE_MAX_VALUE (sizetype);
TYPE_MAX_VALUE (sizetype)
= build_int_cst_wide_type (sizetype,
TREE_INT_CST_LOW (max),
TREE_INT_CST_HIGH (max));
= double_int_to_tree (sizetype, tree_to_double_int (max));
t = make_node (INTEGER_TYPE);
TYPE_NAME (t) = get_identifier ("bit_size_type");

View File

@ -1063,17 +1063,6 @@ build_int_cst_type (tree type, HOST_WIDE_INT low)
return build_int_cst_wide (type, low1, hi);
}
/* Create an INT_CST node of TYPE and value HI:LOW. The value is truncated
and sign extended according to the value range of TYPE. */
tree
build_int_cst_wide_type (tree type,
unsigned HOST_WIDE_INT low, HOST_WIDE_INT high)
{
fit_double_type (low, high, &low, &high, type);
return build_int_cst_wide (type, low, high);
}
/* Constructs tree in type TYPE from with value given by CST. Signedness
of CST is assumed to be the same as the signedness of TYPE. */

View File

@ -4012,8 +4012,6 @@ build_int_cstu (tree type, unsigned HOST_WIDE_INT cst)
extern tree build_int_cst (tree, HOST_WIDE_INT);
extern tree build_int_cst_type (tree, HOST_WIDE_INT);
extern tree build_int_cst_wide (tree, unsigned HOST_WIDE_INT, HOST_WIDE_INT);
extern tree build_int_cst_wide_type (tree,
unsigned HOST_WIDE_INT, HOST_WIDE_INT);
extern tree build_vector (tree, tree);
extern tree build_vector_from_ctor (tree, VEC(constructor_elt,gc) *);
extern tree build_constructor (tree, VEC(constructor_elt,gc) *);