33#define SIGNIFICAND_BITS (128 + HOST_BITS_PER_LONG)
34#define EXP_BITS (32 - 6)
35#define MAX_EXP ((1 << (EXP_BITS - 1)) - 1)
36#define SIGSZ (SIGNIFICAND_BITS / HOST_BITS_PER_LONG)
37#define SIG_MSB ((unsigned long)1 << (HOST_BITS_PER_LONG - 1))
59#define REAL_EXP(REAL) \
60 ((int)((REAL)->uexp ^ (unsigned int)(1 << (EXP_BITS - 1))) \
61 - (1 << (EXP_BITS - 1)))
62#define SET_REAL_EXP(REAL, EXP) \
63 ((REAL)->uexp = ((unsigned int)(EXP) & (unsigned int)((1 << EXP_BITS) - 1)))
68#define REAL_VALUE_TYPE struct real_value
74#define REAL_VALUE_TYPE_SIZE (SIGNIFICAND_BITS + 32)
76 (REAL_VALUE_TYPE_SIZE/HOST_BITS_PER_WIDE_INT \
77 + (REAL_VALUE_TYPE_SIZE%HOST_BITS_PER_WIDE_INT ? 1 : 0))
91# define CONST_DOUBLE_FORMAT "ww"
94# define CONST_DOUBLE_FORMAT "ww"
97# define CONST_DOUBLE_FORMAT "www"
100# define CONST_DOUBLE_FORMAT "wwww"
103# define CONST_DOUBLE_FORMAT "wwwww"
106# define CONST_DOUBLE_FORMAT "wwwwww"
108 #error "REAL_WIDTH > 6 not supported"
183#define REAL_MODE_FORMAT(MODE) \
184 (real_format_for_mode[DECIMAL_FLOAT_MODE_P (MODE) \
185 ? (((MODE) - MIN_MODE_DECIMAL_FLOAT) \
187 : GET_MODE_CLASS (MODE) == MODE_FLOAT \
188 ? ((MODE) - MIN_MODE_FLOAT) \
189 : (gcc_unreachable (), 0)])
191#define FLOAT_MODE_FORMAT(MODE) \
192 (REAL_MODE_FORMAT (as_a <scalar_float_mode> (GET_MODE_INNER (MODE))))
197#define MODE_COMPOSITE_P(MODE) \
198 (FLOAT_MODE_P (MODE) \
199 && FLOAT_MODE_FORMAT (MODE)->pnan < FLOAT_MODE_FORMAT (MODE)->p)
202#define MODE_HAS_NANS(MODE) \
203 (FLOAT_MODE_P (MODE) && FLOAT_MODE_FORMAT (MODE)->has_nans)
204#define MODE_HAS_INFINITIES(MODE) \
205 (FLOAT_MODE_P (MODE) && FLOAT_MODE_FORMAT (MODE)->has_inf)
206#define MODE_HAS_SIGNED_ZEROS(MODE) \
207 (FLOAT_MODE_P (MODE) && FLOAT_MODE_FORMAT (MODE)->has_signed_zero)
208#define MODE_HAS_SIGN_DEPENDENT_ROUNDING(MODE) \
209 (FLOAT_MODE_P (MODE) \
210 && FLOAT_MODE_FORMAT (MODE)->has_sign_dependent_rounding)
332 size_t,
int, machine_mode);
336 size_t,
size_t,
int);
395#define REAL_VALUE_ISINF(x) real_isinf (&(x))
398#define REAL_VALUE_ISNAN(x) real_isnan (&(x))
401#define REAL_VALUE_ISSIGNALING_NAN(x) real_issignaling_nan (&(x))
404#define REAL_VALUE_NEGATIVE(x) real_isneg (&(x))
407#define REAL_VALUE_MINUS_ZERO(x) real_isnegzero (&(x))
410#define REAL_VALUE_TO_TARGET_LONG_DOUBLE(IN, OUT) \
411 real_to_target (OUT, &(IN), \
412 float_mode_for_size (TYPE_PRECISION \
413 (long_double_type_node)).require ())
415#define REAL_VALUE_TO_TARGET_DOUBLE(IN, OUT) \
416 real_to_target (OUT, &(IN), float_mode_for_size (64).require ())
419#define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) \
420 ((OUT) = real_to_target (NULL, &(IN), float_mode_for_size (32).require ()))
425#define REAL_VALUE_TO_TARGET_DECIMAL128(IN, OUT) \
426 real_to_target (OUT, &(IN), decimal_float_mode_for_size (128).require ())
428#define REAL_VALUE_TO_TARGET_DECIMAL64(IN, OUT) \
429 real_to_target (OUT, &(IN), decimal_float_mode_for_size (64).require ())
432#define REAL_VALUE_TO_TARGET_DECIMAL32(IN, OUT) \
433 ((OUT) = real_to_target (NULL, &(IN), \
434 decimal_float_mode_for_size (32).require ()))
445#define REAL_VALUE_ATOF(s, m) \
446 real_from_string2 (s, m)
448#define CONST_DOUBLE_ATOF(s, m) \
449 const_double_from_real_value (real_from_string2 (s, m), m)
451#define REAL_VALUE_FIX(r) \
452 real_to_integer (&(r))
455#define REAL_VALUE_UNSIGNED_FIX(r) \
456 real_to_integer (&(r))
479#define dconst_e() (*dconst_e_ptr ())
480#define dconst_third() (*dconst_third_ptr ())
481#define dconst_quarter() (*dconst_quarter_ptr ())
482#define dconst_sixth() (*dconst_sixth_ptr ())
483#define dconst_ninth() (*dconst_ninth_ptr ())
484#define dconst_sqrt2() (*dconst_sqrt2_ptr ())
485#define dconst_pi() (*dconst_pi_ptr ())
555#ifndef GENERATOR_FILE
Definition value-range.h:291
struct rtx_def * rtx
Definition coretypes.h:57
const struct rtx_def * const_rtx
Definition coretypes.h:58
const union tree_node * const_tree
Definition coretypes.h:98
#define GTY(x)
Definition coretypes.h:41
union tree_node * tree
Definition coretypes.h:97
REAL_VALUE_TYPE dconstm0
Definition emit-rtl.cc:109
REAL_VALUE_TYPE dconst1
Definition emit-rtl.cc:107
REAL_VALUE_TYPE dconstm1
Definition emit-rtl.cc:110
REAL_VALUE_TYPE dconstninf
Definition emit-rtl.cc:113
REAL_VALUE_TYPE dconst0
Definition emit-rtl.cc:106
REAL_VALUE_TYPE dconstinf
Definition emit-rtl.cc:112
rtx const_double_from_real_value(REAL_VALUE_TYPE value, machine_mode mode)
Definition emit-rtl.cc:573
REAL_VALUE_TYPE dconst2
Definition emit-rtl.cc:108
REAL_VALUE_TYPE dconsthalf
Definition emit-rtl.cc:111
poly_int< N, C > r
Definition poly-int.h:774
void real_from_target(REAL_VALUE_TYPE *r, const long *buf, format_helper fmt)
Definition real.cc:2929
void real_2expN(REAL_VALUE_TYPE *r, int n, format_helper fmt)
Definition real.cc:2704
void build_sinatan_real(REAL_VALUE_TYPE *r, tree type)
Definition real.cc:5651
bool real_less(const REAL_VALUE_TYPE *op0, const REAL_VALUE_TYPE *op1)
Definition real.cc:1149
const struct real_format mips_single_format
Definition real.cc:3141
bool real_compare(int icode, const REAL_VALUE_TYPE *op0, const REAL_VALUE_TYPE *op1)
Definition real.cc:1155
void real_trunc(REAL_VALUE_TYPE *r, format_helper fmt, const REAL_VALUE_TYPE *x)
Definition real.cc:5173
const struct real_format ibm_extended_format
Definition real.cc:3961
const struct real_format vax_g_format
Definition real.cc:4620
const struct real_format real_internal_format
Definition real.cc:5093
long real_to_target(long *buf, const REAL_VALUE_TYPE *r_orig, format_helper fmt)
Definition real.cc:2908
void real_roundeven(REAL_VALUE_TYPE *r, format_helper fmt, const REAL_VALUE_TYPE *x)
Definition real.cc:5296
bool HONOR_SIGN_DEPENDENT_ROUNDING(machine_mode m)
Definition real.cc:5630
const struct real_format ieee_extended_intel_128_format
Definition real.cc:3846
bool real_isfinite(const REAL_VALUE_TYPE *r)
Definition real.cc:1280
void real_to_hexadecimal(char *str, const REAL_VALUE_TYPE *r, size_t buf_size, size_t digits, int crop_trailing_zeros)
Definition real.cc:1944
void real_ldexp(REAL_VALUE_TYPE *r, const REAL_VALUE_TYPE *op0, int exp)
Definition real.cc:1218
bool real_equal(const REAL_VALUE_TYPE *op0, const REAL_VALUE_TYPE *op1)
Definition real.cc:1141
const REAL_VALUE_TYPE * dconst_e_ptr(void)
Definition real.cc:2492
const struct real_format arm_bfloat_half_format
Definition real.cc:5045
void real_maxval(REAL_VALUE_TYPE *r, int sign, machine_mode mode)
Definition real.cc:2669
int real_from_string(REAL_VALUE_TYPE *r, const char *str)
Definition real.cc:2019
const struct real_format mips_double_format
Definition real.cc:3432
REAL_VALUE_TYPE real_value_abs(const REAL_VALUE_TYPE *op0)
Definition real.cc:1131
REAL_VALUE_TYPE real_from_string2(const char *s, format_helper fmt)
Definition real.cc:2208
bool real_nextafter(REAL_VALUE_TYPE *r, format_helper fmt, const REAL_VALUE_TYPE *x, const REAL_VALUE_TYPE *y)
Definition real.cc:5363
void real_copysign(REAL_VALUE_TYPE *r, const REAL_VALUE_TYPE *x)
Definition real.cc:5324
void real_from_integer(REAL_VALUE_TYPE *r, format_helper fmt, const wide_int_ref &val_in, signop sgn)
Definition real.cc:2237
const struct real_format mips_quad_format
Definition real.cc:4272
bool real_issignaling_nan(const REAL_VALUE_TYPE *r)
Definition real.cc:1272
const struct real_format spu_single_format
Definition real.cc:3198
const struct real_format ieee_single_format
Definition real.cc:3118
bool real_can_shorten_arithmetic(machine_mode imode, machine_mode tmode)
Definition real.cc:1403
bool exact_real_inverse(format_helper fmt, REAL_VALUE_TYPE *r)
Definition real.cc:1365
bool real_isnegzero(const REAL_VALUE_TYPE *r)
Definition real.cc:1312
bool HONOR_NANS(machine_mode m)
Definition real.cc:5547
void real_floor(REAL_VALUE_TYPE *r, format_helper fmt, const REAL_VALUE_TYPE *x)
Definition real.cc:5185
const struct real_format motorola_single_format
Definition real.cc:3164
void real_convert(REAL_VALUE_TYPE *r, format_helper fmt, const REAL_VALUE_TYPE *a)
Definition real.cc:2852
REAL_VALUE_TYPE real_value_negate(const REAL_VALUE_TYPE *op0)
Definition real.cc:1123
const struct real_format decimal_quad_format
Definition real.cc:4746
void real_round(REAL_VALUE_TYPE *r, format_helper fmt, const REAL_VALUE_TYPE *x)
Definition real.cc:5221
int significand_size(format_helper fmt)
Definition real.cc:2939
const struct real_format decimal_single_format
Definition real.cc:4698
void real_to_decimal(char *str, const REAL_VALUE_TYPE *r_orig, size_t buf_size, size_t digits, int crop_trailing_zeros)
Definition real.cc:1923
const struct real_format ieee_quad_format
Definition real.cc:4249
bool real_isneg(const REAL_VALUE_TYPE *r)
Definition real.cc:1288
bool real_isinf(const REAL_VALUE_TYPE *r)
Definition real.cc:1250
HOST_WIDE_INT real_to_integer(const REAL_VALUE_TYPE *r)
Definition real.cc:1430
unsigned int real_hash(const REAL_VALUE_TYPE *r)
Definition real.cc:2961
const REAL_VALUE_TYPE * dconst_sqrt2_ptr(void)
Definition real.cc:2553
const struct real_format ieee_extended_intel_96_round_53_format
Definition real.cc:3871
bool real_arithmetic(REAL_VALUE_TYPE *r, int icode, const REAL_VALUE_TYPE *op0, const REAL_VALUE_TYPE *op1)
Definition real.cc:1040
bool HONOR_SNANS(machine_mode m)
Definition real.cc:5567
const struct real_format ieee_double_format
Definition real.cc:3409
const struct real_format decimal_double_format
Definition real.cc:4722
bool real_identical(const REAL_VALUE_TYPE *a, const REAL_VALUE_TYPE *b)
Definition real.cc:1320
void real_to_decimal_for_mode(char *str, const REAL_VALUE_TYPE *r_orig, size_t buf_size, size_t digits, int crop_trailing_zeros, machine_mode mode)
Definition real.cc:1614
bool exact_real_truncate(format_helper fmt, const REAL_VALUE_TYPE *a)
Definition real.cc:2886
void real_inf(REAL_VALUE_TYPE *r, bool sign)
Definition real.cc:2571
const struct real_format motorola_double_format
Definition real.cc:3455
REAL_VALUE_TYPE real_value_truncate(format_helper fmt, REAL_VALUE_TYPE a)
Definition real.cc:2876
const struct real_format ieee_extended_motorola_format
Definition real.cc:3800
const struct real_format ieee_extended_intel_96_format
Definition real.cc:3823
const struct real_format mips_extended_format
Definition real.cc:3984
void real_from_string3(REAL_VALUE_TYPE *r, const char *s, format_helper fmt)
Definition real.cc:2222
bool real_isinteger(const REAL_VALUE_TYPE *c, format_helper fmt)
Definition real.cc:5333
const struct real_format ieee_half_format
Definition real.cc:4993
bool real_nan(REAL_VALUE_TYPE *r, const char *str, int quiet, format_helper fmt)
Definition real.cc:2582
bool HONOR_INFINITIES(machine_mode m)
Definition real.cc:5588
bool HONOR_SIGNED_ZEROS(machine_mode m)
Definition real.cc:5609
const struct real_format vax_f_format
Definition real.cc:4574
int real_exponent(const REAL_VALUE_TYPE *r)
Definition real.cc:1199
const struct real_format vax_d_format
Definition real.cc:4597
bool real_iszero(const REAL_VALUE_TYPE *r)
Definition real.cc:1296
bool real_isnan(const REAL_VALUE_TYPE *r)
Definition real.cc:1266
const REAL_VALUE_TYPE * dconst_pi_ptr(void)
Definition real.cc:2512
bool real_powi(REAL_VALUE_TYPE *r, format_helper fmt, const REAL_VALUE_TYPE *x, HOST_WIDE_INT n)
Definition real.cc:5123
void get_max_float(const struct real_format *fmt, char *buf, size_t len, bool norm_max)
Definition real.cc:5465
void real_ceil(REAL_VALUE_TYPE *r, format_helper fmt, const REAL_VALUE_TYPE *x)
Definition real.cc:5203
const struct real_format arm_half_format
Definition real.cc:5019
bool real_isdenormal(const REAL_VALUE_TYPE *r, machine_mode mode)
Definition real.h:293
char test_real_width[sizeof(REAL_VALUE_TYPE)<=REAL_WIDTH *sizeof(HOST_WIDE_INT) ? 1 :-1]
#define EXP_BITS
Definition real.h:34
#define REAL_MODE_FORMAT(MODE)
Definition real.h:183
const REAL_VALUE_TYPE * dconst_ninth_ptr(void)
tree build_real(tree, REAL_VALUE_TYPE)
Definition tree.cc:2510
const REAL_VALUE_TYPE * dconst_third_ptr(void)
const REAL_VALUE_TYPE * dconst_quarter_ptr(void)
REAL_VALUE_TYPE real_value_from_int_cst(const_tree, const_tree)
Definition tree.cc:2566
#define REAL_EXP(REAL)
Definition real.h:59
#define REAL_VALUE_TYPE
Definition real.h:68
const REAL_VALUE_TYPE * dconst_sixth_ptr(void)
const struct real_format * real_format_for_mode[NUM_MODE_FLOAT+NUM_MODE_DECIMAL_FLOAT]
tree build_real_truncate(tree, REAL_VALUE_TYPE)
Definition tree.cc:2557
real_value_class
Definition real.h:26
@ rvc_nan
Definition real.h:30
@ rvc_inf
Definition real.h:29
@ rvc_normal
Definition real.h:28
@ rvc_zero
Definition real.h:27
#define SIGSZ
Definition real.h:36
#define REAL_WIDTH
Definition real.h:75
signop
Definition signop.h:28
unsigned int cl
Definition real.h:43
unsigned int signalling
Definition real.h:49
unsigned int sign
Definition real.h:47
unsigned int decimal
Definition real.h:45
unsigned int uexp
Definition real.h:54
unsigned long sig[SIGSZ]
Definition real.h:56
unsigned int canonical
Definition real.h:52
Definition gengtype.h:252
generic_wide_int< wide_int_ref_storage< false > > wide_int_ref
Definition wide-int.h:353
generic_wide_int< wide_int_storage > wide_int
Definition wide-int.h:343