mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 01:40:39 +08:00
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:
parent
426bcc95cb
commit
2bef63e105
@ -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
|
||||
|
13
gcc/sreal.c
13
gcc/sreal.c
@ -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
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user