sreal.h (to_double): New method.

* sreal.h (to_double): New method.
	(shift): Do not ICE on 0.
	* sreal.c: Include math.h
	(sreal::to_double): New.

From-SVN: r218765
This commit is contained in:
Jan Hubicka 2014-12-15 23:03:11 +01:00 committed by Jan Hubicka
parent 426bcc95cb
commit 2bef63e105
3 changed files with 26 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2014-12-15 Jan Hubicka <hubicka@ucw.cz>
* sreal.h (to_double): New method.
(shift): Do not ICE on 0.
* sreal.c: Include math.h
(sreal::to_double): New.
2014-12-15 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/64316

View File

@ -47,6 +47,7 @@ along with GCC; see the file COPYING3. If not see
sig == 0 && exp == -SREAL_MAX_EXP
*/
#include <math.h>
#include "config.h"
#include "system.h"
#include "coretypes.h"
@ -171,6 +172,18 @@ sreal::to_int () const
return m_sig;
}
/* Return value of *this as double.
This should be used for debug output only. */
double
sreal::to_double () const
{
double val = m_sig;
if (m_exp)
val *= exp2 (m_exp);
return val;
}
/* Return *this + other. */
sreal

View File

@ -46,6 +46,7 @@ public:
void dump (FILE *) const;
int64_t to_int () const;
double to_double () const;
sreal operator+ (const sreal &other) const;
sreal operator- (const sreal &other) const;
sreal operator* (const sreal &other) const;
@ -83,12 +84,14 @@ public:
sreal shift (int s) const
{
/* Zero needs no shifting. */
if (!m_sig)
return *this;
gcc_checking_assert (s <= SREAL_BITS);
gcc_checking_assert (s >= -SREAL_BITS);
/* Exponent should never be so large because shift_right is used only by
sreal_add and sreal_sub ant thus the number cannot be shifted out from
exponent range. */
/* Overflows/drop to 0 could be handled gracefully, but hopefully we do not
need to do so. */
gcc_checking_assert (m_exp + s <= SREAL_MAX_EXP);
gcc_checking_assert (m_exp + s >= -SREAL_MAX_EXP);