systemc: Ensure SC_LONG_64 is defined and available.
authorGabe Black <gabeblack@google.com>
Tue, 11 Sep 2018 06:34:49 +0000 (23:34 -0700)
committerGabe Black <gabeblack@google.com>
Tue, 9 Oct 2018 21:46:04 +0000 (21:46 +0000)
The datatype code was checking if SC_LONG_64 was defined to determine
if a long was 64 bits. The code that would define that value was
dropped when porting over from the Accellera implementation, and so
the wrong code was being included. This change both makes those checks
look at the *value* of SC_LONG_64 to ensure that it's not missing by
accident, and assigns it a value in sc_fxdefs.hh.

Change-Id: Ie9bb1146452a3db1d9d99c0db575098bb06463ff
Reviewed-on: https://gem5-review.googlesource.com/c/12616
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/systemc/dt/fx/scfx_rep.cc
src/systemc/ext/dt/bit/sc_proxy.hh
src/systemc/ext/dt/fx/sc_fxdefs.hh
src/systemc/ext/dt/fx/scfx_utils.hh

index 3d10fb3f63374914c86fe6b8f58b9d7e234f2add..ae19fabe0380a4c990dbf9669c447ca2045379fd 100644 (file)
@@ -147,7 +147,7 @@ scfx_rep::scfx_rep(long a) :
             a = -a;
             m_sign = -1;
         }
-#       if defined(SC_LONG_64)
+#       if SC_LONG_64
             m_wp = 1;
             m_mant[1] = static_cast<word>(a);
             m_mant[2] = static_cast<word>(a >> bits_in_word);
@@ -171,7 +171,7 @@ scfx_rep::scfx_rep(unsigned long a) :
         m_mant.clear();
         m_wp = m_msw = m_lsw = 2;
         m_state = normal;
-#       if defined(SC_LONG_64)
+#       if SC_LONG_64
             m_wp = 1;
             m_mant[1] = static_cast<word>(a);
             m_mant[2] = static_cast<word>(a >> bits_in_word);
@@ -1057,6 +1057,7 @@ print_other(scfx_string &s, const scfx_rep &a, sc_numrep numrep, int w_prefix,
 
             lsb = (b.m_lsw - b.m_wp) * bits_in_word +
                 scfx_find_lsb(b.m_mant[b.m_lsw]);
+
         }
     }
 
index cf7bcbfc9507f0b0ac79ee1312a2bc37e0192a9a..12e10725a43323eb33c9dc7992a4ac8b08d177f1 100644 (file)
@@ -816,7 +816,7 @@ sc_proxy<X>::assign_(int a)
     return x;
 }
 
-#if defined(SC_LONG_64)
+#if SC_LONG_64
 template <class X>
 inline X &
 sc_proxy<X>::assign_(unsigned long a)
index 8acfabfa58ecb67c57320e22794beed468c96d18..c72a45afc21d4bbfee9808d68edaa7f9d8d019c9 100644 (file)
 #include "../../utils/sc_report_handler.hh"
 #include "../int/sc_nbutils.hh"
 
+#if ULONG_MAX > 0xffffffffUL
+#   define SC_LONG_64 1
+#else
+#   define SC_LONG_64 0
+#endif
+
 namespace sc_dt
 {
 
index 37c57844c89766fb1894de62121114107e00779d..ec186c68f954b084af0a2635c8f47a1a10b61158 100644 (file)
@@ -67,9 +67,9 @@ inline int
 scfx_find_msb(unsigned long x)
 {
     int i = 0;
-#   if defined(SC_LONG_64)
+#   if SC_LONG_64
         MSB_STATEMENT(32);
-#   endif // defined(SC_LONG_64)
+#   endif // SC_LONG_64
     MSB_STATEMENT(16);
     MSB_STATEMENT(8);
     MSB_STATEMENT(4);
@@ -86,12 +86,12 @@ inline int
 scfx_find_lsb(unsigned long x)
 {
     int i;
-#   if defined(SC_LONG_64)
+#   if SC_LONG_64
         i = 63;
         LSB_STATEMENT(32);
 #   else
         i = 31;
-#   endif // defined(SC_LONG_64)
+#   endif // SC_LONG_64
     LSB_STATEMENT(16);
     LSB_STATEMENT(8);
     LSB_STATEMENT(4);