+2006-02-04 Ben Elliston <bje@au.ibm.com>
+
+ * dfp.c (decimal_real_arithmetic): Change second argument type
+ from int to enum tree_code. Do not always return true, but now
+ return result of any call to decimal_do helper functions.
+ * dfp.h (decimal_real_arithmetic): Update prototype.
+
2006-02-05 Eric Botcazou <ebotcazou@libertysurf.fr>
* config/sparc/sol2-bi.h (SPARC_DEFAULT_CMODEL): Set to CM_MEDMID.
PR ada/25900
* tree-vrp.c (extract_range_from_assert): When merging a VR_RANGE
- with a VR_ANTI_RANGE and the VR_ANTI_RANGEis completely contained
+ with a VR_ANTI_RANGE and the VR_ANTI_RANGE is completely contained
within the VR_RANGE, use the VR_RANGE as the result, not the
VR_ANTI_RANGE.
- (adjust_range_with_scev): Reject ranges from SCEV which are out
- of bounds for the type.
+ (adjust_range_with_scev): Reject ranges from SCEV which are out of
+ bounds for the type.
2006-01-26 Daniel Berlin <dberlin@dberlin.org>
/* Decimal floating point support.
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GCC.
real_to_integer2 (plow, phigh, &to);
}
-/* Perform the decimal floating point operation described by COODE.
- For a unary operation, leave OP1 NULL. This function returns true
- if the result may be inexact due to loss of precision. */
+/* Perform the decimal floating point operation described by CODE.
+ For a unary operation, OP1 will be NULL. This function returns
+ true if the result may be inexact due to loss of precision. */
bool
-decimal_real_arithmetic (REAL_VALUE_TYPE *r, int icode,
+decimal_real_arithmetic (REAL_VALUE_TYPE *r, enum tree_code code,
const REAL_VALUE_TYPE *op0,
const REAL_VALUE_TYPE *op1)
{
- enum tree_code code = icode;
- REAL_VALUE_TYPE a1;
- REAL_VALUE_TYPE b1;
+ REAL_VALUE_TYPE a, b;
- /* If either op is not a decimal, create a temporary decimal
- versions. */
+ /* If either operand is non-decimal, create temporaries. */
if (!op0->decimal)
{
- decimal_from_binary (&a1, op0);
- op0 = &a1;
+ decimal_from_binary (&a, op0);
+ op0 = &a;
}
if (op1 && !op1->decimal)
{
- decimal_from_binary (&b1, op1);
- op1 = &b1;
+ decimal_from_binary (&b, op1);
+ op1 = &b;
}
switch (code)
{
case PLUS_EXPR:
- (void) decimal_do_add (r, op0, op1, 0);
- break;
+ return decimal_do_add (r, op0, op1, 0);
case MINUS_EXPR:
- (void) decimal_do_add (r, op0, op1, 1);
- break;
+ return decimal_do_add (r, op0, op1, 1);
case MULT_EXPR:
- (void) decimal_do_multiply (r, op0, op1);
- break;
+ return decimal_do_multiply (r, op0, op1);
case RDIV_EXPR:
- (void) decimal_do_divide (r, op0, op1);
- break;
+ return decimal_do_divide (r, op0, op1);
case MIN_EXPR:
if (op1->cl == rvc_nan)
*r = *op0;
else
*r = *op1;
- break;
+ return false;
case MAX_EXPR:
if (op1->cl == rvc_nan)
*r = *op1;
else
*r = *op0;
- break;
+ return false;
case NEGATE_EXPR:
{
/* Keep sign field in sync. */
r->sign ^= 1;
}
- break;
+ return false;
case ABS_EXPR:
{
/* Keep sign field in sync. */
r->sign = 0;
}
- break;
+ return false;
case FIX_TRUNC_EXPR:
decimal_do_fix_trunc (r, op0);
- break;
+ return false;
default:
gcc_unreachable ();
}
-
- /* FIXME: Indicate all operations as inexact for now due to unknown
- working precision. */
- return true;
}
/* Fills R with the largest finite value representable in mode MODE.
/* Decimal floating point support functions for GNU compiler.
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GCC.
void decimal_real_convert (REAL_VALUE_TYPE *, enum machine_mode, const REAL_VALUE_TYPE *);
void decimal_real_to_decimal (char *, const REAL_VALUE_TYPE *, size_t, size_t, int);
void decimal_do_fix_trunc (REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *);
-bool decimal_real_arithmetic (REAL_VALUE_TYPE *, int, const REAL_VALUE_TYPE *,
+bool decimal_real_arithmetic (REAL_VALUE_TYPE *, enum tree_code, const REAL_VALUE_TYPE *,
const REAL_VALUE_TYPE *);
void decimal_real_maxval (REAL_VALUE_TYPE *, int, enum machine_mode);
void decimal_real_to_integer2 (HOST_WIDE_INT *, HOST_WIDE_INT *, const REAL_VALUE_TYPE *);