GCC Middle and Back End API Reference
|
#include "tree.h"
|
static |
@verbatim Operations with long integers.
Copyright (C) 2006-2013 Free Software Foundation, Inc.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see http://www.gnu.org/licenses/.
Add two doubleword integers with doubleword result. Return nonzero if the operation overflows according to UNSIGNED_P. Each argument is given as two `HOST_WIDE_INT' pieces. One argument is L1 and H1; the other, L2 and H2. The value is stored as two `HOST_WIDE_INT' pieces in *LV and *HV.
References HOST_WIDE_INT.
Referenced by double_int::add_with_sign().
|
static |
Pack an array of 4 words into a two-word integer. WORDS points to the array of words. The integer is stored into *LOW and *HI as two `HOST_WIDE_INT' pieces.
Referenced by div_and_round_double(), and mul_double_wide_with_sign().
|
static |
Divide doubleword integer LNUM, HNUM by doubleword integer LDEN, HDEN for a quotient (stored in *LQUO, *HQUO) and remainder (in *LREM, *HREM). CODE is a tree code for a kind of division, one of TRUNC_DIV_EXPR, FLOOR_DIV_EXPR, CEIL_DIV_EXPR, ROUND_DIV_EXPR or EXACT_DIV_EXPR It controls how the quotient is rounded to an integer. Return nonzero if the operation overflows. UNS nonzero says do unsigned division.
References decode(), encode(), HOST_WIDE_INT, memset(), and neg_double().
Referenced by double_int::divmod(), double_int::divmod_with_overflow(), and double_int_split_digit().
|
static |
Splits last digit of *CST (taken as unsigned) in BASE and returns it.
References div_and_round_double(), double_int::high, HOST_WIDE_INT, and double_int::low.
Referenced by dump_double_int().
void dump_double_int | ( | ) |
Dumps CST to FILE. If UNS is true, CST is considered to be unsigned, otherwise it is signed.
References double_int_split_digit(), double_int::is_negative(), and double_int::is_zero().
Referenced by all_phi_incrs_profitable(), discover_iteration_bound_by_body_walk(), dump_candidate(), dump_dref(), dump_incr_vec(), number_of_iterations_cond(), print_aff(), print_loop(), and record_estimate().
|
static |
Unpack a two-word integer into 4 words. LOW and HI are the integer, as two `HOST_WIDE_INT' pieces. WORDS points to the array of HOST_WIDE_INTs.
Referenced by div_and_round_double(), and mul_double_wide_with_sign().
|
static |
Shift the doubleword integer in L1, H1 left by COUNT places keeping only PREC bits of result. Shift right if COUNT is negative. ARITH nonzero specifies arithmetic shifting; otherwise use logical shift. Store the value as two `HOST_WIDE_INT' pieces in *LV and *HV.
References count, HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT, and HOST_WIDE_INT_M1U.
Referenced by double_int::alshift(), double_int::arshift(), double_int::llshift(), double_int::lrshift(), double_int::lshift(), and double_int::rshift().
double_int mpz_get_double_int | ( | ) |
Returns VAL converted to TYPE. If WRAP is true, then out-of-range values of VAL will be wrapped; otherwise, they will be set to the appropriate minimum or maximum TYPE bound.
References count, double_int::ext(), get_type_static_bounds(), double_int::high, HOST_WIDE_INT, and double_int::low.
Referenced by gmp_cst_to_tree(), number_of_iterations_lt(), and number_of_iterations_ne().
void mpz_set_double_int | ( | ) |
Sets RESULT to VAL, taken unsigned if UNS is true and as signed otherwise.
References double_int::high, HOST_WIDE_INT, double_int::is_negative(), and double_int::low.
Referenced by assert_loop_rolls_lt(), bound_difference_of_offsetted_base(), bounds_add(), build_loop_iteration_domains(), get_type_static_bounds(), number_of_iterations_lt(), number_of_iterations_lt_to_ne(), number_of_iterations_ne_max(), split_to_var_and_offset(), and tree_int_to_gmp().
|
static |
Multiply two doubleword integers with quadword result. Return nonzero if the operation overflows according to UNSIGNED_P. Each argument is given as two `HOST_WIDE_INT' pieces. One argument is L1 and H1; the other, L2 and H2. The value is stored as four `HOST_WIDE_INT' pieces in *LV and *HV, *LW and *HW. If lw is NULL then only the low part and no overflow is computed.
References decode(), encode(), HOST_WIDE_INT, memset(), and neg_double().
Referenced by double_int::mul_with_sign(), and double_int::wide_mul_with_sign().
|
static |
Negate a doubleword integer with doubleword result. Return nonzero if the operation overflows, assuming it's signed. The argument is given as two `HOST_WIDE_INT' pieces in L1 and H1. The value is stored as two `HOST_WIDE_INT' pieces in *LV and *HV.
Referenced by div_and_round_double(), mul_double_wide_with_sign(), double_int::neg_with_overflow(), double_int::operator-(), double_int::operator-=(), and double_int::sub_with_overflow().
|
static |
Shift the doubleword integer in L1, H1 right by COUNT places keeping only PREC bits of result. ARITH nonzero specifies arithmetic shifting; otherwise use logical shift. Store the value as two `HOST_WIDE_INT' pieces in *LV and *HV.
References count, HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT, and HOST_WIDE_INT_M1U.
Referenced by double_int::alshift(), double_int::arshift(), double_int::llshift(), double_int::lrshift(), double_int::lshift(), and double_int::rshift().