From: Tiago Mück Date: Thu, 16 Jul 2020 16:14:40 +0000 (-0500) Subject: mem-ruby: expose transition info to actions X-Git-Tag: develop-gem5-snapshot~641 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=60df5a4d4438d9b1859a0cd9c5f121d86ce01897;p=gem5.git mem-ruby: expose transition info to actions SLICC compiler generates the curTransitionEvent and curTransitionNextState functions, which allows actions to check which event triggered the current transition and what's the next state. Change-Id: I79c8c4f2839633b7fb3b23cbbdbb32f25db90eab Signed-off-by: Tiago Mück Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/31420 Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power Tested-by: kokoro --- diff --git a/src/mem/slicc/symbols/StateMachine.py b/src/mem/slicc/symbols/StateMachine.py index 1399d0040..c019e1b3c 100644 --- a/src/mem/slicc/symbols/StateMachine.py +++ b/src/mem/slicc/symbols/StateMachine.py @@ -380,6 +380,12 @@ TransitionResult doTransitionWorker(${ident}_Event event, code(''' Addr addr); +${ident}_Event m_curTransitionEvent; +${ident}_State m_curTransitionNextState; + +${ident}_Event curTransitionEvent() { return m_curTransitionEvent; } +${ident}_State curTransitionNextState() { return m_curTransitionNextState; } + int m_counters[${ident}_State_NUM][${ident}_Event_NUM]; int m_event_counters[${ident}_Event_NUM]; bool m_possible[${ident}_State_NUM][${ident}_Event_NUM]; @@ -1407,6 +1413,8 @@ ${ident}_Controller::doTransitionWorker(${ident}_Event event, code(''' Addr addr) { + m_curTransitionEvent = event; + m_curTransitionNextState = next_state; switch(HASH_FUN(state, event)) { ''') @@ -1427,10 +1435,12 @@ ${ident}_Controller::doTransitionWorker(${ident}_Event event, # is determined before any actions of the transition # execute, and therefore the next state calculation cannot # depend on any of the transitionactions. - case('next_state = getNextState(addr);') + case('next_state = getNextState(addr); ' + 'm_curTransitionNextState = next_state;') else: ns_ident = trans.nextState.ident - case('next_state = ${ident}_State_${ns_ident};') + case('next_state = ${ident}_State_${ns_ident}; ' + 'm_curTransitionNextState = next_state;') actions = trans.actions request_types = trans.request_types