systemc: Add some non-standard sc_trace variants.
authorGabe Black <gabeblack@google.com>
Thu, 14 Jun 2018 01:46:06 +0000 (18:46 -0700)
committerGabe Black <gabeblack@google.com>
Wed, 15 Aug 2018 01:36:35 +0000 (01:36 +0000)
These overloads of sc_trace take the unsigned version of some primitive
types. The compiler thought it was ambiguous how to convert an unsigned
integer value into a signed one since there were several different
functions which took signed integer parameters of various sizes.

These versions of sc_trace aren't in the standard, but they are in the
Accellera implementation and do fix building of the regression tests.

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

src/systemc/ext/utils/sc_trace_file.hh
src/systemc/utils/sc_trace_file.cc

index ec4fd4d6aebbb9c665e294a2b2b11928e85f3395..9e9e75b350a84d2102bfea3ff276e25f633607d6 100644 (file)
@@ -107,6 +107,26 @@ void sc_trace(sc_trace_file *, const sc_dt::sc_fxnum_fast &,
 void sc_trace(sc_trace_file *, const sc_dt::sc_fxnum_fast *,
               const std::string &);
 
+
+// Nonstandard - unsigned versions necessary to avoid ambiguous overload
+// resolution.
+void sc_trace(sc_trace_file *, const unsigned char &,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const unsigned char *,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const unsigned short &,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const unsigned short *,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const unsigned int &,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const unsigned int *,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const unsigned long &,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const unsigned long *,
+              const std::string &, int width=(8 * sizeof(char)));
+
 void sc_trace(sc_trace_file *, const char &,
               const std::string &, int width=(8 * sizeof(char)));
 void sc_trace(sc_trace_file *, const char *,
@@ -132,6 +152,10 @@ void sc_trace(sc_trace_file *, const sc_dt::uint64 &,
 void sc_trace(sc_trace_file *, const sc_dt::uint64 *,
               const std::string &, int width=(8 * sizeof(char)));
 
+// Nonstandard function for enums
+void sc_trace(sc_trace_file *, const unsigned int &,
+              const std::string &, const char **enum_literals);
+
 template <class T>
 void
 sc_trace(sc_trace_file *, const sc_signal_in_if<T> &, const std::string &)
index 3b09d951dc0dae6b2110813d01a7fe465c530ec1..66f7fef060d20dbfc008acf9bb74ff6cfb684d40 100644 (file)
@@ -220,6 +220,60 @@ sc_trace(sc_trace_file *, const sc_dt::sc_fxnum_fast *, const std::string &)
     warn("%s not implemented.\n", __PRETTY_FUNCTION__);
 }
 
+void
+sc_trace(sc_trace_file *, const unsigned char &,
+         const std::string &, int width)
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+void
+sc_trace(sc_trace_file *, const unsigned char *,
+         const std::string &, int width)
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+void
+sc_trace(sc_trace_file *, const unsigned short &,
+         const std::string &, int width)
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+void
+sc_trace(sc_trace_file *, const unsigned short *,
+         const std::string &, int width)
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+void
+sc_trace(sc_trace_file *, const unsigned int &, const std::string &, int width)
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+void
+sc_trace(sc_trace_file *, const unsigned int *, const std::string &, int width)
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+void
+sc_trace(sc_trace_file *, const unsigned long &,
+         const std::string &, int width)
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+void
+sc_trace(sc_trace_file *, const unsigned long *,
+         const std::string &, int width)
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
 void
 sc_trace(sc_trace_file *, const char &, const std::string &, int width)
 {
@@ -322,4 +376,11 @@ sc_trace(sc_trace_file *, const sc_signal_in_if<long> &,
     warn("%s not implemented.\n", __PRETTY_FUNCTION__);
 }
 
+void
+sc_trace(sc_trace_file *, const unsigned int &,
+         const std::string &, const char **enum_literals)
+{
+    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
 } // namespace sc_core