ruby: slicc: donot prefix machine name to variables

This changeset does away with prefixing of member variables of state machines
with the identity of the machine itself.
This commit is contained in:
Nilay Vaish
2014-09-01 16:55:43 -05:00
parent 6ceb1aadc2
commit 557200725c
4 changed files with 58 additions and 57 deletions

View File

@@ -201,7 +201,7 @@ machine(L1Cache, "Token protocol")
// Constant that provides hysteresis for calculated the estimated average
int averageLatencyHysteresis, default="(8)";
Cycles averageLatencyCounter,
default="(Cycles(500) << (*m_L1Cache_averageLatencyHysteresis_ptr))";
default="(Cycles(500) << (*m_averageLatencyHysteresis_ptr))";
Cycles averageLatencyEstimate() {
DPRINTF(RubySlicc, "%d\n",

View File

@@ -70,8 +70,6 @@ class ObjDeclAST(DeclAST):
c_code = "m_machineID"
elif self.ident == "clusterID":
c_code = "m_clusterID"
elif machine:
c_code = "(*m_%s_%s_ptr)" % (machine.ident, self.ident)
else:
c_code = "(*m_%s_ptr)" % (self.ident)

View File

@@ -383,7 +383,7 @@ void unset_tbe(${{self.TBEType.c_ident}}*& m_tbe_ptr);
''')
for var in self.objects:
th = var.get("template", "")
code('${{var.type.c_ident}}$th* m_${{var.c_ident}}_ptr;')
code('${{var.type.c_ident}}$th* m_${{var.ident}}_ptr;')
code.dedent()
code('};')
@@ -488,17 +488,17 @@ $c_ident::$c_ident(const Params *p)
for var in self.objects:
if var.ident.find("mandatoryQueue") >= 0:
code('''
m_${{var.c_ident}}_ptr = new ${{var.type.c_ident}}();
m_${{var.c_ident}}_ptr->setReceiver(this);
m_${{var.ident}}_ptr = new ${{var.type.c_ident}}();
m_${{var.ident}}_ptr->setReceiver(this);
''')
else:
if "network" in var and "physical_network" in var and \
var["network"] == "To":
has_peer = True
code('''
m_${{var.c_ident}}_ptr = new ${{var.type.c_ident}}();
peerQueueMap[${{var["physical_network"]}}] = m_${{var.c_ident}}_ptr;
m_${{var.c_ident}}_ptr->setSender(this);
m_${{var.ident}}_ptr = new ${{var.type.c_ident}}();
peerQueueMap[${{var["physical_network"]}}] = m_${{var.ident}}_ptr;
m_${{var.ident}}_ptr->setSender(this);
''')
code('''
@@ -532,7 +532,7 @@ $c_ident::init()
code.indent()
for var in self.objects:
vtype = var.type
vid = "m_%s_ptr" % var.c_ident
vid = "m_%s_ptr" % var.ident
if "network" not in var:
# Not a network port object
if "primitive" in vtype:
@@ -626,7 +626,7 @@ if (m_buffer_size > 0) {
# set description (may be overriden later by port def)
code('''
$vid->setDescription("[Version " + to_string(m_version) + ", ${ident}, name=${{var.c_ident}}]");
$vid->setDescription("[Version " + to_string(m_version) + ", ${ident}, name=${{var.ident}}]");
''')
@@ -674,7 +674,7 @@ $vid->setDescription("[Version " + to_string(m_version) + ", ${ident}, name=${{v
mq_ident = "NULL"
for port in self.in_ports:
if port.code.find("mandatoryQueue_ptr") >= 0:
mq_ident = "m_%s_mandatoryQueue_ptr" % self.ident
mq_ident = "m_mandatoryQueue_ptr"
seq_ident = "NULL"
for param in self.config_parameters:
@@ -955,7 +955,7 @@ $c_ident::functionalReadBuffers(PacketPtr& pkt)
for var in self.objects:
vtype = var.type
if vtype.isBuffer:
vid = "m_%s_ptr" % var.c_ident
vid = "m_%s_ptr" % var.ident
code('if ($vid->functionalRead(pkt)) { return true; }')
code('''
return false;
@@ -972,7 +972,7 @@ $c_ident::functionalWriteBuffers(PacketPtr& pkt)
for var in self.objects:
vtype = var.type
if vtype.isBuffer:
vid = "m_%s_ptr" % var.c_ident
vid = "m_%s_ptr" % var.ident
code('num_functional_writes += $vid->functionalWrite(pkt);')
code('''
return num_functional_writes;
@@ -992,9 +992,9 @@ $c_ident::getQueuesFromPeer(AbstractController *peer)
if "network" in var and "physical_network" in var and \
var["network"] == "From":
code('''
m_${{var.c_ident}}_ptr = peer->getPeerQueue(${{var["physical_network"]}});
assert(m_${{var.c_ident}}_ptr != NULL);
m_${{var.c_ident}}_ptr->setReceiver(this);
m_${{var.ident}}_ptr = peer->getPeerQueue(${{var["physical_network"]}});
assert(m_${{var.ident}}_ptr != NULL);
m_${{var.ident}}_ptr->setReceiver(this);
''')
code('}')
@@ -1131,6 +1131,8 @@ ${ident}_Controller::doTransition(${ident}_Event event,
const Address addr)
{
''')
code.indent()
if self.TBEType != None and self.EntryType != None:
code('${ident}_State state = getState(m_tbe_ptr, m_cache_entry_ptr, addr);')
elif self.TBEType != None:
@@ -1141,13 +1143,13 @@ ${ident}_Controller::doTransition(${ident}_Event event,
code('${ident}_State state = getState(addr);')
code('''
${ident}_State next_state = state;
${ident}_State next_state = state;
DPRINTF(RubyGenerated, "%s, Time: %lld, state: %s, event: %s, addr: %s\\n",
*this, curCycle(), ${ident}_State_to_string(state),
${ident}_Event_to_string(event), addr);
DPRINTF(RubyGenerated, "%s, Time: %lld, state: %s, event: %s, addr: %s\\n",
*this, curCycle(), ${ident}_State_to_string(state),
${ident}_Event_to_string(event), addr);
TransitionResult result =
TransitionResult result =
''')
if self.TBEType != None and self.EntryType != None:
code('doTransitionWorker(event, state, next_state, m_tbe_ptr, m_cache_entry_ptr, addr);')
@@ -1159,18 +1161,20 @@ ${ident}_Controller::doTransition(${ident}_Event event,
code('doTransitionWorker(event, state, next_state, addr);')
code('''
if (result == TransitionResult_Valid) {
DPRINTF(RubyGenerated, "next_state: %s\\n",
${ident}_State_to_string(next_state));
countTransition(state, event);
DPRINTFR(ProtocolTrace, "%15d %3s %10s%20s %6s>%-6s %s %s\\n",
curTick(), m_version, "${ident}",
${ident}_Event_to_string(event),
${ident}_State_to_string(state),
${ident}_State_to_string(next_state),
addr, GET_TRANSITION_COMMENT());
CLEAR_TRANSITION_COMMENT();
if (result == TransitionResult_Valid) {
DPRINTF(RubyGenerated, "next_state: %s\\n",
${ident}_State_to_string(next_state));
countTransition(state, event);
DPRINTFR(ProtocolTrace, "%15d %3s %10s%20s %6s>%-6s %s %s\\n",
curTick(), m_version, "${ident}",
${ident}_Event_to_string(event),
${ident}_State_to_string(state),
${ident}_State_to_string(next_state),
addr, GET_TRANSITION_COMMENT());
CLEAR_TRANSITION_COMMENT();
''')
if self.TBEType != None and self.EntryType != None:
code('setState(m_tbe_ptr, m_cache_entry_ptr, addr, next_state);')
@@ -1186,24 +1190,27 @@ ${ident}_Controller::doTransition(${ident}_Event event,
code('setAccessPermission(addr, next_state);')
code('''
} else if (result == TransitionResult_ResourceStall) {
DPRINTFR(ProtocolTrace, "%15s %3s %10s%20s %6s>%-6s %s %s\\n",
curTick(), m_version, "${ident}",
${ident}_Event_to_string(event),
${ident}_State_to_string(state),
${ident}_State_to_string(next_state),
addr, "Resource Stall");
} else if (result == TransitionResult_ProtocolStall) {
DPRINTF(RubyGenerated, "stalling\\n");
DPRINTFR(ProtocolTrace, "%15s %3s %10s%20s %6s>%-6s %s %s\\n",
curTick(), m_version, "${ident}",
${ident}_Event_to_string(event),
${ident}_State_to_string(state),
${ident}_State_to_string(next_state),
addr, "Protocol Stall");
}
} else if (result == TransitionResult_ResourceStall) {
DPRINTFR(ProtocolTrace, "%15s %3s %10s%20s %6s>%-6s %s %s\\n",
curTick(), m_version, "${ident}",
${ident}_Event_to_string(event),
${ident}_State_to_string(state),
${ident}_State_to_string(next_state),
addr, "Resource Stall");
} else if (result == TransitionResult_ProtocolStall) {
DPRINTF(RubyGenerated, "stalling\\n");
DPRINTFR(ProtocolTrace, "%15s %3s %10s%20s %6s>%-6s %s %s\\n",
curTick(), m_version, "${ident}",
${ident}_Event_to_string(event),
${ident}_State_to_string(state),
${ident}_State_to_string(next_state),
addr, "Protocol Stall");
}
return result;
return result;
''')
code.dedent()
code('''
}
TransitionResult
@@ -1310,7 +1317,7 @@ if (!checkResourceAvailable(%s_RequestType_%s, addr)) {
# the same code
for trans in transitions:
code(' case HASH_FUN($trans):')
code(' $case')
code(' $case\n')
code('''
default:
@@ -1318,6 +1325,7 @@ if (!checkResourceAvailable(%s_RequestType_%s, addr)) {
"%s time: %d addr: %s event: %s state: %s\\n",
name(), curCycle(), addr, event, state);
}
return TransitionResult_Valid;
}
''')

View File

@@ -32,17 +32,12 @@ class Var(Symbol):
machine=None):
super(Var, self).__init__(symtab, ident, location, pairs)
if machine:
self.c_ident = "%s_%s" % (machine, ident)
else:
self.c_ident = ident
self.machine = machine
self.type = type
self.code = code
def __repr__(self):
return "[Var id: %s]" % (self.c_ident)
return "[Var id: %s]" % (self.ident)
def writeCodeFiles(self, path, includes):
pass