Jason Lowe-Power has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/58432 )
Change subject: mem-ruby: Use namespaces for protocol types
......................................................................
mem-ruby: Use namespaces for protocol types
Wrap all protocol-specific types in `namespace <protocol>`. This will
facilitate compiling multiple protocols into one binary.
There is a one-time hack to the generated `MachineType.cc` file to use
the namespace for the protocol until we generalize the machine types.
Change-Id: I5947e8ac69afe6f7ed257d7c5980ad65e9338acf
Signed-off-by: Jason Lowe-Power <ja...@lowepower.com>
---
M src/mem/slicc/symbols/StateMachine.py
M src/mem/slicc/symbols/Type.py
2 files changed, 127 insertions(+), 4 deletions(-)
diff --git a/src/mem/slicc/symbols/StateMachine.py
b/src/mem/slicc/symbols/StateMachine.py
index a9f7373..e220731 100644
--- a/src/mem/slicc/symbols/StateMachine.py
+++ b/src/mem/slicc/symbols/StateMachine.py
@@ -246,7 +246,7 @@
class $py_ident(RubyController):
type = '$py_ident'
cxx_header = 'mem/ruby/protocol/${c_ident}.hh'
- cxx_class = 'gem5::ruby::$py_ident'
+ cxx_class = 'gem5::ruby::$protocol::$py_ident'
''')
code.indent()
for param in self.config_parameters:
@@ -306,6 +306,9 @@
namespace ruby
{
+namespace ${protocol}
+{
+
extern std::stringstream ${ident}_transitionComment;
class $c_ident : public AbstractController
@@ -463,6 +466,7 @@
code('''
};
+} // namespace ${protocol}
} // namespace ruby
} // namespace gem5
@@ -550,6 +554,9 @@
namespace ruby
{
+namespace ${protocol}
+{
+
int $c_ident::m_num_controllers = 0;
std::vector<statistics::Vector *> $c_ident::eventVec;
std::vector<std::vector<statistics::Vector *> > $c_ident::transVec;
@@ -827,7 +834,7 @@
AbstractController::regStats();
// For each type of controllers, one controller of that type is picked
- // to aggregate stats of all controllers of that type.
+ // to aggregate stats of all controllers of that type.
if (m_version == 0) {
Profiler *profiler = params().ruby_system->getProfiler();
@@ -1221,6 +1228,7 @@
return read;
}
+} // namespace ${protocol}
} // namespace ruby
} // namespace gem5
''')
@@ -1282,6 +1290,9 @@
namespace ruby
{
+namespace ${protocol}
+{
+
void
${ident}_Controller::wakeup()
{
@@ -1357,6 +1368,7 @@
}
}
+} // namespace ${protocol}
} // namespace ruby
} // namespace gem5
''')
@@ -1395,6 +1407,9 @@
namespace ruby
{
+namespace ${protocol}
+{
+
TransitionResult
${ident}_Controller::doTransition(${ident}_Event event,
''')
@@ -1623,6 +1638,7 @@
return TransitionResult_Valid;
}
+} // namespace ${protocol}
} // namespace ruby
} // namespace gem5
''')
diff --git a/src/mem/slicc/symbols/Type.py b/src/mem/slicc/symbols/Type.py
index a9c5303..bb8ff0c 100644
--- a/src/mem/slicc/symbols/Type.py
+++ b/src/mem/slicc/symbols/Type.py
@@ -228,6 +228,16 @@
namespace ruby
{
+''')
+ # For protocol-specific types, wrap in the protocol namespace
+ if not self.shared:
+ code('''
+
+namespace ${{protocol}}
+{
+''')
+
+ code('''
$klass ${{self.c_ident}}$parent
{
@@ -394,7 +404,15 @@
out << ::std::flush;
return out;
}
+''')
+ # For protocol-specific types, close the protocol namespace
+ if not self.shared:
+ code('''
+} // namespace ${{protocol}}
+''')
+
+ code('''
} // namespace ruby
} // namespace gem5
@@ -418,6 +436,16 @@
namespace ruby
{
+''')
+ # For protocol-specific types, wrap in the protocol namespace
+ if not self.shared:
+ code('''
+
+namespace ${{protocol}}
+{
+''')
+
+ code('''
/** \\brief Print the state of this object */
void
@@ -446,6 +474,13 @@
for item in self.methods:
code(self.methods[item].generateCode())
+ # For protocol-specific types, close the protocol namespace
+ if not self.shared:
+ code('''
+
+} // namespace ${{protocol}}
+''')
+
code('''
} // namespace ruby
} // namespace gem5
@@ -480,6 +515,13 @@
{
''')
+ # For protocol-specific types, wrap in the protocol namespace
+ if not self.shared:
+ code('''
+
+namespace ${{protocol}}
+{
+''')
if self.isMachineType:
code('struct MachineID;')
@@ -545,7 +587,16 @@
::std::ostream&
operator<<(::std::ostream& out, const ${{self.c_ident}}& obj);
+''')
+ # For protocol-specific types, close the protocol namespace
+ if not self.shared:
+ code('''
+
+} // namespace ${{protocol}}
+''')
+
+ code('''
} // namespace ruby
} // namespace gem5
''')
@@ -594,6 +645,16 @@
namespace ruby
{
+''')
+ # For protocol-specific types, wrap in the protocol namespace
+ if not self.shared:
+ code('''
+
+namespace ${{protocol}}
+{
+''')
+
+ code('''
// Code to convert the current state to an access permission
AccessPermission ${{self.c_ident}}_to_permission(const ${{self.c_ident}}&
obj)
@@ -613,6 +674,16 @@
// Appease the compiler since this function has a return value
return AccessPermission_Invalid;
}
+''')
+
+ # For protocol-specific types, close the protocol namespace
+ if not self.shared:
+ code('''
+
+} // namespace ${{protocol}}
+''')
+
+ code('''
} // namespace ruby
} // namespace gem5
@@ -632,6 +703,15 @@
namespace ruby
{
+''')
+ # For protocol-specific types, wrap in the protocol namespace
+ if not self.shared:
+ code('''
+
+namespace ${{protocol}}
+{
+''')
+ code('''
// Code for output operator
::std::ostream&
@@ -772,7 +852,9 @@
for enum in reversed(list(self.enums.values())):
# Check if there is a defined machine with this type
if enum.primary:
- code(' base +=
${{enum.ident}}_Controller::getNumControllers();')
+ code('''
+ base += ${{protocol}}::${{enum.ident}}_Controller::getNumControllers();
+''')
else:
code(' base += 0;')
code(' [[fallthrough]];')
@@ -801,7 +883,9 @@
for enum in self.enums.values():
code('case ${{self.c_ident}}_${{enum.ident}}:')
if enum.primary:
- code('return
${{enum.ident}}_Controller::getNumControllers();')
+ code('''
+ return ${{protocol}}::${{enum.ident}}_Controller::getNumControllers();
+''')
else:
code('return 0;')
@@ -827,6 +911,13 @@
}
''')
+ # For protocol-specific types, close the protocol namespace
+ if not self.shared:
+ code('''
+
+} // namespace ${{protocol}}
+''')
+
code('''
} // namespace ruby
} // namespace gem5
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58432
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I5947e8ac69afe6f7ed257d7c5980ad65e9338acf
Gerrit-Change-Number: 58432
Gerrit-PatchSet: 1
Gerrit-Owner: Jason Lowe-Power <power...@gmail.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s