===================================================================
@@ -288,7 +288,7 @@
inline _Tp operator _Op(_Tp __rhs) \
{ \
_Tp __tmp; \
- __tmp.__setval(0 _Op __rhs.__getval()); \
+ __tmp.__setval(_Op __rhs.__getval()); \
return __tmp; \
}
===================================================================
@@ -0,0 +1,56 @@
+#include <decimal/decimal>
+using namespace std;
+
+decimal::decimal32
+__attribute__ ((noinline))
+my_nan32 (void)
+{
+ decimal::decimal32 z = 0;
+ decimal::decimal32 v = z/z;
+ return v;
+}
+
+decimal::decimal32
+__attribute__ ((noinline))
+my_inf32 (void)
+{
+ decimal::decimal32 o = 1;
+ decimal::decimal32 z = 0;
+ decimal::decimal32 v = o/z;
+ return v;
+}
+
+int
+main (void)
+{
+ decimal::decimal32 v;
+
+ v = my_nan32 ();
+ if (!__builtin_isnand32 (v.__getval ()))
+ __builtin_abort ();
+ if (__builtin_signbitd32 (v.__getval ()))
+ __builtin_abort ();
+
+ v = -v;
+
+ if (!__builtin_isnand32 (v.__getval ()))
+ __builtin_abort ();
+ if (!__builtin_signbitd32 (v.__getval ()))
+ __builtin_abort ();
+
+ v = my_inf32 ();
+ if (!__builtin_isinfd32 (v.__getval ()))
+ __builtin_abort ();
+ if (__builtin_signbitd32 (v.__getval ()))
+ __builtin_abort ();
+
+ v = -v;
+
+ if (!__builtin_isinfd32 (v.__getval ()))
+ __builtin_abort ();
+ if (!__builtin_signbitd32 (v.__getval ()))
+ __builtin_abort ();
+
+ return 0;
+}
+
===================================================================
@@ -0,0 +1,56 @@
+#include <decimal/decimal>
+using namespace std;
+
+decimal::decimal64
+__attribute__ ((noinline))
+my_nan64 (void)
+{
+ decimal::decimal64 z = 0;
+ decimal::decimal64 v = z/z;
+ return v;
+}
+
+decimal::decimal64
+__attribute__ ((noinline))
+my_inf64 (void)
+{
+ decimal::decimal64 o = 1;
+ decimal::decimal64 z = 0;
+ decimal::decimal64 v = o/z;
+ return v;
+}
+
+int
+main (void)
+{
+ decimal::decimal64 v;
+
+ v = my_nan64 ();
+ if (!__builtin_isnand64 (v.__getval ()))
+ __builtin_abort ();
+ if (__builtin_signbitd64 (v.__getval ()))
+ __builtin_abort ();
+
+ v = -v;
+
+ if (!__builtin_isnand64 (v.__getval ()))
+ __builtin_abort ();
+ if (!__builtin_signbitd64 (v.__getval ()))
+ __builtin_abort ();
+
+ v = my_inf64 ();
+ if (!__builtin_isinfd64 (v.__getval ()))
+ __builtin_abort ();
+ if (__builtin_signbitd64 (v.__getval ()))
+ __builtin_abort ();
+
+ v = -v;
+
+ if (!__builtin_isinfd64 (v.__getval ()))
+ __builtin_abort ();
+ if (!__builtin_signbitd64 (v.__getval ()))
+ __builtin_abort ();
+
+ return 0;
+}
+
===================================================================
@@ -0,0 +1,56 @@
+#include <decimal/decimal>
+using namespace std;
+
+decimal::decimal128
+__attribute__ ((noinline))
+my_nan128 (void)
+{
+ decimal::decimal128 z = 0;
+ decimal::decimal128 v = z/z;
+ return v;
+}
+
+decimal::decimal128
+__attribute__ ((noinline))
+my_inf128 (void)
+{
+ decimal::decimal128 o = 1;
+ decimal::decimal128 z = 0;
+ decimal::decimal128 v = o/z;
+ return v;
+}
+
+int
+main (void)
+{
+ decimal::decimal128 v;
+
+ v = my_nan128 ();
+ if (!__builtin_isnand128 (v.__getval ()))
+ __builtin_abort ();
+ if (__builtin_signbitd128 (v.__getval ()))
+ __builtin_abort ();
+
+ v = -v;
+
+ if (!__builtin_isnand128 (v.__getval ()))
+ __builtin_abort ();
+ if (!__builtin_signbitd128 (v.__getval ()))
+ __builtin_abort ();
+
+ v = my_inf128 ();
+ if (!__builtin_isinfd128 (v.__getval ()))
+ __builtin_abort ();
+ if (__builtin_signbitd128 (v.__getval ()))
+ __builtin_abort ();
+
+ v = -v;
+
+ if (!__builtin_isinfd128 (v.__getval ()))
+ __builtin_abort ();
+ if (!__builtin_signbitd128 (v.__getval ()))
+ __builtin_abort ();
+
+ return 0;
+}
+