From 60df5a4d4438d9b1859a0cd9c5f121d86ce01897 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tiago=20M=C3=BCck?= <tiago.muck@arm.com> Date: Thu, 16 Jul 2020 11:14:40 -0500 Subject: [PATCH] mem-ruby: expose transition info to actions MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 <tiago.muck@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/31420 Reviewed-by: Jason Lowe-Power <power.jg@gmail.com> Maintainer: Jason Lowe-Power <power.jg@gmail.com> Tested-by: kokoro <noreply+kokoro@google.com> --- src/mem/slicc/symbols/StateMachine.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) 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 -- 2.30.2