Gabe Black has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/45366 )

Change subject: base: Stop using macros to handle nan in stats/text.cc.
......................................................................

base: Stop using macros to handle nan in stats/text.cc.

c++ provides a standard way to retrieve the value of nan. Use that
instead of a function to compute it, or macros defined for c.

Change-Id: I483e8642d28cc3187682ce6bb7457b5e796cf61c
---
M src/base/stats/text.cc
1 file changed, 26 insertions(+), 41 deletions(-)



diff --git a/src/base/stats/text.cc b/src/base/stats/text.cc
index 718b65c..17d1e3b 100644
--- a/src/base/stats/text.cc
+++ b/src/base/stats/text.cc
@@ -48,6 +48,7 @@
 #include <cmath>
 #include <fstream>
 #include <iostream>
+#include <limits>
 #include <sstream>
 #include <string>

@@ -56,28 +57,12 @@
 #include "base/stats/info.hh"
 #include "base/str.hh"

-#ifndef NAN
-float __nan();
-/** Define Not a number. */
-#define NAN (__nan())
-/** Need to define __nan() */
-#define __M5_NAN
-#endif
-
-#ifdef __M5_NAN
-float
-__nan()
+namespace
 {
-    union
-    {
-        uint32_t ui;
-        float f;
-    } nan;

-    nan.ui = 0x7fc00000;
-    return nan.f;
-}
-#endif
+constexpr auto Nan = std::numeric_limits<float>::quiet_NaN();
+
+} // anonymous namespace

 namespace Stats {

@@ -342,8 +327,8 @@
     print.descriptions = descriptions;
     print.units = units;
     print.flags = flags;
-    print.pdf = _total ? 0.0 : NAN;
-    print.cdf = _total ? 0.0 : NAN;
+    print.pdf = _total ? 0.0 : Nan;
+    print.cdf = _total ? 0.0 : Nan;

     bool havesub = !subnames.empty();

@@ -389,8 +374,8 @@
     }

     if (flags.isSet(::Stats::total)) {
-        print.pdf = NAN;
-        print.cdf = NAN;
+        print.pdf = Nan;
+        print.cdf = Nan;
         print.name = base + "total";
         print.desc = desc;
         print.unitStr = unitStr;
@@ -472,8 +457,8 @@
     print.descriptions = descriptions;
     print.desc = desc;
     print.unitStr = unitStr;
-    print.pdf = NAN;
-    print.cdf = NAN;
+    print.pdf = Nan;
+    print.cdf = Nan;

     if (flags.isSet(oneline)) {
         print.name = base + "bucket_size";
@@ -494,16 +479,16 @@
     print(stream);

     print.name = base + "mean";
-    print.value = data.samples ? data.sum / data.samples : NAN;
+    print.value = data.samples ? data.sum / data.samples : Nan;
     print(stream);

     if (data.type == Hist) {
         print.name = base + "gmean";
-        print.value = data.samples ? exp(data.logs / data.samples) : NAN;
+        print.value = data.samples ? exp(data.logs / data.samples) : Nan;
         print(stream);
     }

-    Result stdev = NAN;
+    Result stdev = Nan;
     if (data.samples)
         stdev = sqrt((data.samples * data.squares - data.sum * data.sum) /
                      (data.samples * (data.samples - 1.0)));
@@ -517,11 +502,11 @@
     size_t size = data.cvec.size();

     Result total = 0.0;
-    if (data.type == Dist && data.underflow != NAN)
+    if (data.type == Dist && data.underflow != Nan)
         total += data.underflow;
     for (off_type i = 0; i < size; ++i)
         total += data.cvec[i];
-    if (data.type == Dist && data.overflow != NAN)
+    if (data.type == Dist && data.overflow != Nan)
         total += data.overflow;

     if (total) {
@@ -529,7 +514,7 @@
         print.cdf = 0.0;
     }

-    if (data.type == Dist && data.underflow != NAN) {
+    if (data.type == Dist && data.underflow != Nan) {
         print.name = base + "underflows";
         print.update(data.underflow, total);
         print(stream);
@@ -565,22 +550,22 @@
         stream << std::endl;
     }

-    if (data.type == Dist && data.overflow != NAN) {
+    if (data.type == Dist && data.overflow != Nan) {
         print.name = base + "overflows";
         print.update(data.overflow, total);
         print(stream);
     }

-    print.pdf = NAN;
-    print.cdf = NAN;
+    print.pdf = Nan;
+    print.cdf = Nan;

-    if (data.type == Dist && data.min_val != NAN) {
+    if (data.type == Dist && data.min_val != Nan) {
         print.name = base + "min_value";
         print.value = data.min_val;
         print(stream);
     }

-    if (data.type == Dist && data.max_val != NAN) {
+    if (data.type == Dist && data.max_val != Nan) {
         print.name = base + "max_value";
         print.value = data.max_val;
         print(stream);
@@ -606,8 +591,8 @@
     print.descriptions = descriptions;
     print.units = units;
     print.precision = info.precision;
-    print.pdf = NAN;
-    print.cdf = NAN;
+    print.pdf = Nan;
+    print.cdf = Nan;

     print(*stream);
 }
@@ -810,8 +795,8 @@
     print.units = units;
     print.desc = desc;
     print.unitStr = unitStr;
-    print.pdf = NAN;
-    print.cdf = NAN;
+    print.pdf = Nan;
+    print.cdf = Nan;

     print.name = base + "samples";
     print.value = data.samples;

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/45366
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I483e8642d28cc3187682ce6bb7457b5e796cf61c
Gerrit-Change-Number: 45366
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to