aboutsummaryrefslogtreecommitdiff
path: root/gcc/java
diff options
context:
space:
mode:
authorLawrence Crowl <crowl@google.com>2012-09-24 18:22:31 +0000
committerLawrence Crowl <crowl@gcc.gnu.org>2012-09-24 18:22:31 +0000
commit9be0ac8c9e638bc1b52b83d34a98e8176af645e1 (patch)
tree023b0bf502c0f425e346dd501e463d522b3de28e /gcc/java
parentee38ecd4066dc3af0b893f2f4cda42d7938fa951 (diff)
downloadgcc-9be0ac8c9e638bc1b52b83d34a98e8176af645e1.zip
gcc-9be0ac8c9e638bc1b52b83d34a98e8176af645e1.tar.gz
gcc-9be0ac8c9e638bc1b52b83d34a98e8176af645e1.tar.bz2
Finish conversion of uses of double_int to the new API.
Some old functionality required new interfaces, and these have been added to double-int.[hc]: double_int::from_pair - static constructor function wide_mul_with_sign - double-wide multiply instruction sub_with_overflow - subtraction with overlow testing neg_with_overflow - negation with overlow testing divmod_with_overflow - div and mod with overlow testing This patch corrects the bootstrap problem on HPPA, via the addition of sub_with_overflow. (The overflow properties of negation and addition are different from subtraction.) The prior two generations of the interface have been removed. Some of these old interfaces are still used as static implementation in double-int.c. The changed compiler appears 0.321% faster with 80% confidence of being faster. Tested on x86_64, HPPA, and SPARC. However, there are changes to the avr config files, and I have not tested those. Index: gcc/java/ChangeLog 2012-09-24 Lawrence Crowl <crowl@google.com> * decl.c (java_init_decl_processing): Change to new double_int API. * jcf-parse.c (get_constant): Likewise. * boehm.c (mark_reference_fields): Likewise. (get_boehm_type_descriptor): Likewise. Index: gcc/ChangeLog 2012-09-24 Lawrence Crowl <crowl@google.com> * double-int.h (double_int::from_pair): New. (double_int::wide_mul_with_sign): New. (double_int::sub_with_overflow): New. (double_int::neg_with_overflow): New. (double_int::divmod_with_overflow): New. (shwi_to_double_int): Remove. (uhwi_to_double_int): Remove. (double_int_to_shwi): Remove. (double_int_to_uhwi): Remove. (double_int_fits_in_uhwi_p): Remove. (double_int_fits_in_shwi_p): Remove. (double_int_fits_in_hwi_p): Remove. (double_int_mul): Remove. (double_int_mul_with_sign): Remove. (double_int_add): Remove. (double_int_sub): Remove. (double_int_neg): Remove. (double_int_div): Remove. (double_int_sdiv): Remove. (double_int_udiv): Remove. (double_int_mod): Remove. (double_int_smod): Remove. (double_int_umod): Remove. (double_int_divmod): Remove. (double_int_sdivmod): Remove. (double_int_udivmod): Remove. (double_int_multiple_of): Remove. (double_int_setbit): Remove. (double_int_ctz): Remove. (double_int_not): Remove. (double_int_ior): Remove. (double_int_and): Remove. (double_int_and_not): Remove. (double_int_xor): Remove. (double_int_lshift): Remove. (double_int_rshift): Remove. (double_int_lrotate): Remove. (double_int_rrotate): Remove. (double_int_negative_p): Remove. (double_int_cmp): Remove. (double_int_scmp): Remove. (double_int_ucmp): Remove. (double_int_max): Remove. (double_int_smax): Remove. (double_int_umax): Remove. (double_int_min): Remove. (double_int_smin): Remove. (double_int_umin): Remove. (double_int_ext): Remove. (double_int_sext): Remove. (double_int_zext): Remove. (double_int_mask): Remove. (double_int_max_value): Remove. (double_int_min_value): Remove. (double_int_zero_p): Remove. (double_int_one_p): Remove. (double_int_minus_one_p): Remove. (double_int_equal_p): Remove. (double_int_popcount): Remove. (extern add_double_with_sign): Remove. (#define add_double): Remove. (extern neg_double): Remove. (extern mul_double_with_sign): Remove. (extern mul_double_wide_with_sign): Remove. (#define mul_double): Remove. (extern lshift_double): Remove. (extern div_and_round_double): Remove. * double-int.c (add_double_with_sign): Make static. (#defined add_double): Localized from header. (neg_double): Make static. (mul_double_with_sign): Make static. (mul_double_wide_with_sign): Make static. (#defined mul_double): Localized from header. (lshift_double): Make static. (div_and_round_double): Make static. (double_int::wide_mul_with_sign): New. (double_int::sub_with_overflow): New. (double_int::neg_with_overflow): New. (double_int::divmod_with_overflow): New. * emit-rtl.c (init_emit_once): Change to new double_int API. * explow.c (plus_constant): Likewise. * expmed.c (choose_multiplier): Likewise. * fold-const.c (#define OVERFLOW_SUM_SIGN): Remove. (int_const_binop_1): Change to new double_int API. (fold_div_compare): Likewise. (maybe_canonicalize_comparison): Likewise. (pointer_may_wrap_p): Likewise. (fold_negate_const): Likewise. (fold_abs_const): Likewise. * simplify-rtx.c (simplify_const_unary_operation): Likewise. (simplify_const_binary_operation): Likewise. * tree-chrec.c (tree_fold_binomial): Likewise. * tree-vrp.c (extract_range_from_binary_expr_1): Likewise. * config/sparc/sparc.c (sparc_fold_builtin): Likewise. * config/avr/avr.c (avr_double_int_push_digit): Likewise. (avr_map): Likewise. (avr_map_decompose): Likewise. (avr_out_insert_bits): Likewise. Index: gcc/cp/ChangeLog 2012-09-24 Lawrence Crowl <crowl@google.com> * init.c (build_new_1): Change to new double_int API. * decl.c (build_enumerator): Likewise. * typeck2.c (process_init_constructor_array): Likewise. * mangle.c (write_array_type): Likewise. Index: gcc/fortran/ChangeLog 2012-09-24 Lawrence Crowl <crowl@google.com> * trans-expr.c (gfc_conv_cst_int_power): Change to new double_int API. * target-memory.c (gfc_interpret_logical): Likewise. From-SVN: r191675
Diffstat (limited to 'gcc/java')
-rw-r--r--gcc/java/ChangeLog7
-rw-r--r--gcc/java/boehm.c6
-rw-r--r--gcc/java/decl.c2
-rw-r--r--gcc/java/jcf-parse.c4
4 files changed, 13 insertions, 6 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index 8fd18aa..96c9df9 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,10 @@
+2012-09-24 Lawrence Crowl <crowl@google.com>
+
+ * decl.c (java_init_decl_processing): Change to new double_int API.
+ * jcf-parse.c (get_constant): Likewise.
+ * boehm.c (mark_reference_fields): Likewise.
+ (get_boehm_type_descriptor): Likewise.
+
2012-07-30 Laurynas Biveinis <laurynas.biveinis@gmail.com>
* jcf.h (CPool): Use the "atomic" GTY option for the tags field.
diff --git a/gcc/java/boehm.c b/gcc/java/boehm.c
index 07dfb61..0fa8964 100644
--- a/gcc/java/boehm.c
+++ b/gcc/java/boehm.c
@@ -108,7 +108,7 @@ mark_reference_fields (tree field,
bits for all words in the record. This is conservative, but the
size_words != 1 case is impossible in regular java code. */
for (i = 0; i < size_words; ++i)
- *mask = double_int_setbit (*mask, ubit - count - i - 1);
+ *mask = (*mask).set_bit (ubit - count - i - 1);
if (count >= ubit - 2)
*pointer_after_end = 1;
@@ -200,7 +200,7 @@ get_boehm_type_descriptor (tree type)
while (last_set_index)
{
if ((last_set_index & 1))
- mask = double_int_setbit (mask, log2_size + count);
+ mask = mask.set_bit (log2_size + count);
last_set_index >>= 1;
++count;
}
@@ -209,7 +209,7 @@ get_boehm_type_descriptor (tree type)
else if (! pointer_after_end)
{
/* Bottom two bits for bitmap mark type are 01. */
- mask = double_int_setbit (mask, 0);
+ mask = mask.set_bit (0);
value = double_int_to_tree (value_type, mask);
}
else
diff --git a/gcc/java/decl.c b/gcc/java/decl.c
index e22b0fd..30048fd 100644
--- a/gcc/java/decl.c
+++ b/gcc/java/decl.c
@@ -617,7 +617,7 @@ java_init_decl_processing (void)
decimal_int_max = build_int_cstu (unsigned_int_type_node, 0x80000000);
decimal_long_max
= double_int_to_tree (unsigned_long_type_node,
- double_int_setbit (double_int_zero, 64));
+ double_int_zero.set_bit (64));
long_zero_node = build_int_cst (long_type_node, 0);
diff --git a/gcc/java/jcf-parse.c b/gcc/java/jcf-parse.c
index c799676..92f032cb 100644
--- a/gcc/java/jcf-parse.c
+++ b/gcc/java/jcf-parse.c
@@ -1043,9 +1043,9 @@ get_constant (JCF *jcf, int index)
double_int val;
num = JPOOL_UINT (jcf, index);
- val = double_int_lshift (uhwi_to_double_int (num), 32, 64, false);
+ val = double_int::from_uhwi (num).llshift (32, 64);
num = JPOOL_UINT (jcf, index + 1);
- val = double_int_ior (val, uhwi_to_double_int (num));
+ val |= double_int::from_uhwi (num);
value = double_int_to_tree (long_type_node, val);
break;