48a49
>
64a66,67
> self.TBEType = None
> self.EntryType = None
109a113,127
> def addType(self, type):
> type_ident = '%s' % type.c_ident
>
> if type_ident == "%s_TBE" %self.ident:
> if self.TBEType != None:
> self.error("Multiple Transaction Buffer types in a " \
> "single machine.");
> self.TBEType = type
>
> elif "interface" in type and "AbstractCacheEntry" == type["interface"]:
> if self.EntryType != None:
> self.error("Multiple AbstractCacheEntry types in a " \
> "single machine.");
> self.EntryType = type
>
267c285,296
< ${ident}_State state,
---
> ''')
>
> if self.EntryType != None:
> code('''
> ${{self.EntryType.c_ident}}* m_cache_entry_ptr,
> ''')
> if self.TBEType != None:
> code('''
> ${{self.TBEType.c_ident}}* m_tbe_ptr,
> ''')
>
> code('''
272a302,313
> ''')
>
> if self.TBEType != None:
> code('''
> ${{self.TBEType.c_ident}}*& m_tbe_ptr,
> ''')
> if self.EntryType != None:
> code('''
> ${{self.EntryType.c_ident}}*& m_cache_entry_ptr,
> ''')
>
> code('''
301a343,358
> if self.EntryType != None:
> code('''
>
> // Set and Reset for cache_entry variable
> void set_cache_entry(${{self.EntryType.c_ident}}*& m_cache_entry_ptr, AbstractCacheEntry* m_new_cache_entry);
> void unset_cache_entry(${{self.EntryType.c_ident}}*& m_cache_entry_ptr);
> ''')
>
> if self.TBEType != None:
> code('''
>
> // Set and Reset for tbe variable
> void set_tbe(${{self.TBEType.c_ident}}*& m_tbe_ptr, ${ident}_TBE* m_new_tbe);
> void unset_tbe(${{self.TBEType.c_ident}}*& m_tbe_ptr);
> ''')
>
306,308c363,378
< for action in self.actions.itervalues():
< code('/** \\brief ${{action.desc}} */')
< code('void ${{action.ident}}(const Address& addr);')
---
> if self.TBEType != None and self.EntryType != None:
> for action in self.actions.itervalues():
> code('/** \\brief ${{action.desc}} */')
> code('void ${{action.ident}}(${{self.TBEType.c_ident}}*& m_tbe_ptr, ${{self.EntryType.c_ident}}*& m_cache_entry_ptr, const Address& addr);')
> elif self.TBEType != None:
> for action in self.actions.itervalues():
> code('/** \\brief ${{action.desc}} */')
> code('void ${{action.ident}}(${{self.TBEType.c_ident}}*& m_tbe_ptr, const Address& addr);')
> elif self.EntryType != None:
> for action in self.actions.itervalues():
> code('/** \\brief ${{action.desc}} */')
> code('void ${{action.ident}}(${{self.EntryType.c_ident}}*& m_cache_entry_ptr, const Address& addr);')
> else:
> for action in self.actions.itervalues():
> code('/** \\brief ${{action.desc}} */')
> code('void ${{action.ident}}(const Address& addr);')
733a804
> ''')
734a806,841
> if self.EntryType != None:
> code('''
>
> // Set and Reset for cache_entry variable
> void
> $c_ident::set_cache_entry(${{self.EntryType.c_ident}}*& m_cache_entry_ptr, AbstractCacheEntry* m_new_cache_entry)
> {
> m_cache_entry_ptr = (${{self.EntryType.c_ident}}*)m_new_cache_entry;
> }
>
> void
> $c_ident::unset_cache_entry(${{self.EntryType.c_ident}}*& m_cache_entry_ptr)
> {
> m_cache_entry_ptr = 0;
> }
> ''')
>
> if self.TBEType != None:
> code('''
>
> // Set and Reset for tbe variable
> void
> $c_ident::set_tbe(${{self.TBEType.c_ident}}*& m_tbe_ptr, ${{self.TBEType.c_ident}}* m_new_tbe)
> {
> m_tbe_ptr = m_new_tbe;
> }
>
> void
> $c_ident::unset_tbe(${{self.TBEType.c_ident}}*& m_tbe_ptr)
> {
> m_tbe_ptr = NULL;
> }
> ''')
>
> code('''
>
736a844,847
> if self.TBEType != None and self.EntryType != None:
> for action in self.actions.itervalues():
> if "c_code" not in action:
> continue
738,740c849,856
< for action in self.actions.itervalues():
< if "c_code" not in action:
< continue
---
> code('''
> /** \\brief ${{action.desc}} */
> void
> $c_ident::${{action.ident}}(${{self.TBEType.c_ident}}*& m_tbe_ptr, ${{self.EntryType.c_ident}}*& m_cache_entry_ptr, const Address& addr)
> {
> DPRINTF(RubyGenerated, "executing\\n");
> ${{action["c_code"]}}
> }
742c858,864
< code('''
---
> ''')
> elif self.TBEType != None:
> for action in self.actions.itervalues():
> if "c_code" not in action:
> continue
>
> code('''
744a867,896
> $c_ident::${{action.ident}}(${{self.TBEType.c_ident}}*& m_tbe_ptr, const Address& addr)
> {
> DPRINTF(RubyGenerated, "executing\\n");
> ${{action["c_code"]}}
> }
>
> ''')
> elif self.EntryType != None:
> for action in self.actions.itervalues():
> if "c_code" not in action:
> continue
>
> code('''
> /** \\brief ${{action.desc}} */
> void
> $c_ident::${{action.ident}}(${{self.EntryType.c_ident}}*& m_cache_entry_ptr, const Address& addr)
> {
> DPRINTF(RubyGenerated, "executing\\n");
> ${{action["c_code"]}}
> }
>
> ''')
> else:
> for action in self.actions.itervalues():
> if "c_code" not in action:
> continue
>
> code('''
> /** \\brief ${{action.desc}} */
> void
780,782d931
< // DEBUG_EXPR(GENERATED_COMP, MedPrio, *this);
< // DEBUG_EXPR(GENERATED_COMP, MedPrio, g_eventQueue_ptr->getTime());
<
853c1002,1011
< ${ident}_State state,
---
> ''')
> if self.EntryType != None:
> code('''
> ${{self.EntryType.c_ident}}* m_cache_entry_ptr,
> ''')
> if self.TBEType != None:
> code('''
> ${{self.TBEType.c_ident}}* m_tbe_ptr,
> ''')
> code('''
855a1014,1024
> ''')
> if self.TBEType != None and self.EntryType != None:
> code('${ident}_State state = ${ident}_getState(m_tbe_ptr, m_cache_entry_ptr, addr);')
> elif self.TBEType != None:
> code('${ident}_State state = ${ident}_getState(m_tbe_ptr, addr);')
> elif self.EntryType != None:
> code('${ident}_State state = ${ident}_getState(m_cache_entry_ptr, addr);')
> else:
> code('${ident}_State state = ${ident}_getState(addr);')
>
> code('''
866c1035,1043
< doTransitionWorker(event, state, next_state, addr);
---
> ''')
> if self.TBEType != None and self.EntryType != None:
> code('doTransitionWorker(event, state, next_state, m_tbe_ptr, m_cache_entry_ptr, addr);')
> elif self.TBEType != None:
> code('doTransitionWorker(event, state, next_state, m_tbe_ptr, addr);')
> elif self.EntryType != None:
> code('doTransitionWorker(event, state, next_state, m_cache_entry_ptr, addr);')
> else:
> code('doTransitionWorker(event, state, next_state, addr);')
867a1045
> code('''
880c1058,1068
< ${ident}_setState(addr, next_state);
---
> ''')
> if self.TBEType != None and self.EntryType != None:
> code('${ident}_setState(m_tbe_ptr, m_cache_entry_ptr, addr, next_state);')
> elif self.TBEType != None:
> code('${ident}_setState(m_tbe_ptr, addr, next_state);')
> elif self.EntryType != None:
> code('${ident}_setState(m_cache_entry_ptr, addr, next_state);')
> else:
> code('${ident}_setState(addr, next_state);')
>
> code('''
904a1093,1103
> ''')
>
> if self.TBEType != None:
> code('''
> ${{self.TBEType.c_ident}}*& m_tbe_ptr,
> ''')
> if self.EntryType != None:
> code('''
> ${{self.EntryType.c_ident}}*& m_cache_entry_ptr,
> ''')
> code('''
953,954c1152,1163
< for action in actions:
< case('${{action.ident}}(addr);')
---
> if self.TBEType != None and self.EntryType != None:
> for action in actions:
> case('${{action.ident}}(m_tbe_ptr, m_cache_entry_ptr, addr);')
> elif self.TBEType != None:
> for action in actions:
> case('${{action.ident}}(m_tbe_ptr, addr);')
> elif self.EntryType != None:
> for action in actions:
> case('${{action.ident}}(m_cache_entry_ptr, addr);')
> else:
> for action in actions:
> case('${{action.ident}}(addr);')