diff options
author | Gabe Black <gabeblack@google.com> | 2018-08-08 01:30:47 -0700 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2018-09-20 01:42:09 +0000 |
commit | f9ee9d9b8e37d31eb0541862302d578e7286e61f (patch) | |
tree | 2b91a5d877728d7170602ced56f1e1f8d5d54f8a /src/systemc | |
parent | b8aefea27654edb2e37f335914e643c7ae35cd8f (diff) | |
download | gem5-f9ee9d9b8e37d31eb0541862302d578e7286e61f.tar.xz |
systemc: Add a nonstandard sc_status pretty printer operator.
This operator exists in the Accellera implementation, and is necessary
to make the test output match.
Change-Id: I266629d6c936d4846e88e35af36555fb392b181c
Reviewed-on: https://gem5-review.googlesource.com/12074
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc')
-rw-r--r-- | src/systemc/core/sc_main.cc | 60 | ||||
-rw-r--r-- | src/systemc/ext/core/sc_main.hh | 4 |
2 files changed, 64 insertions, 0 deletions
diff --git a/src/systemc/core/sc_main.cc b/src/systemc/core/sc_main.cc index 446b7377d..641e0d066 100644 --- a/src/systemc/core/sc_main.cc +++ b/src/systemc/core/sc_main.cc @@ -244,4 +244,64 @@ sc_get_status() return ::sc_gem5::kernel ? ::sc_gem5::kernel->status() : SC_ELABORATION; } +std::ostream & +operator << (std::ostream &os, sc_status s) +{ + switch (s) { + case SC_ELABORATION: + os << "SC_ELABORATION"; + break; + case SC_BEFORE_END_OF_ELABORATION: + os << "SC_BEFORE_END_OF_ELABORATION"; + break; + case SC_END_OF_ELABORATION: + os << "SC_END_OF_ELABORATION"; + break; + case SC_START_OF_SIMULATION: + os << "SC_START_OF_SIMULATION"; + break; + case SC_RUNNING: + os << "SC_RUNNING"; + break; + case SC_PAUSED: + os << "SC_PAUSED"; + break; + case SC_STOPPED: + os << "SC_STOPPED"; + break; + case SC_END_OF_SIMULATION: + os << "SC_END_OF_SIMULATION"; + break; + + // Nonstandard + case SC_END_OF_INITIALIZATION: + os << "SC_END_OF_INITIALIZATION"; + break; + case SC_END_OF_UPDATE: + os << "SC_END_OF_UPDATE"; + break; + case SC_BEFORE_TIMESTEP: + os << "SC_BEFORE_TIMESTEP"; + break; + + default: + if (s & SC_STATUS_ANY) { + const char *prefix = "("; + for (sc_status m = (sc_status)0x1; + m < SC_STATUS_ANY; m = (sc_status)(m << 1)) { + if (m & s) { + os << prefix; + prefix = "|"; + os << m; + } + } + os << ")"; + } else { + ccprintf(os, "%#x", s); + } + } + + return os; +} + } // namespace sc_core diff --git a/src/systemc/ext/core/sc_main.hh b/src/systemc/ext/core/sc_main.hh index b6f5ea13e..10a68ca15 100644 --- a/src/systemc/ext/core/sc_main.hh +++ b/src/systemc/ext/core/sc_main.hh @@ -30,6 +30,8 @@ #ifndef __SYSTEMC_EXT_CORE_SC_MAIN_HH__ #define __SYSTEMC_EXT_CORE_SC_MAIN_HH__ +#include <iostream> + #include "../dt/int/sc_nbdefs.hh" #include "sc_time.hh" @@ -97,6 +99,8 @@ namespace sc_core }; sc_status sc_get_status(); + + std::ostream &operator << (std::ostream &os, sc_status s); } // namespace sc_core #endif //__SYSTEMC_EXT_CORE_SC_MAIN_HH__ |