From f9ee9d9b8e37d31eb0541862302d578e7286e61f Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Wed, 8 Aug 2018 01:30:47 -0700 Subject: [PATCH] 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 Maintainer: Gabe Black --- src/systemc/core/sc_main.cc | 60 +++++++++++++++++++++++++++++++++ src/systemc/ext/core/sc_main.hh | 4 +++ 2 files changed, 64 insertions(+) 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 + #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__ -- 2.30.2