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>
This commit is contained in:
Gabe Black
2018-08-08 01:30:47 -07:00
parent b8aefea276
commit f9ee9d9b8e
2 changed files with 64 additions and 0 deletions

View File

@@ -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

View File

@@ -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__