aboutsummaryrefslogtreecommitdiff
path: root/gcc/sreal.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/sreal.h')
-rw-r--r--gcc/sreal.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/sreal.h b/gcc/sreal.h
index 730f49c..6314cea 100644
--- a/gcc/sreal.h
+++ b/gcc/sreal.h
@@ -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);