digraph finite_state_machine { // A4 : 210 x 297 mm // 8.3 x 11.7 inches size="8.3,11.7"; rotate=90; // rankdir=state; node [shape = doublecircle]; state_empty; node [shape = none ]; state_none; node [shape = circle ]; state_none [ label = "" ]; state_empty [ label = "EMPTY" ]; state_branch_wait_end [ label = "BRANCH_WAIT_END" ]; state_branch_complete [ label = "BRANCH_COMPLETE" ]; state_store_wait_head_ok [ label = "STORE_WAIT_HEAD_OK" ]; state_store_head_ok [ label = "STORE_HEAD_OK" ]; state_store_head_ko [ label = "STORE_HEAD_KO" ]; state_other_wait_end [ label = "OTHER_WAIT_END" ]; state_miss_wait_end [ label = "MISS_WAIT_END" ]; state_end_miss [ label = "END_MISS" ]; state_end_ok_speculative [ label = "END_OK_SPECULATIVE" ]; state_end_ok [ label = "END_OK" ]; state_end_ko_speculative [ label = "END_KO_SPECULATIVE" ]; state_end_ko [ label = "END_KO" ]; state_end_exception_wait_head [ label = "END_EXCEPTION_WAIT_HEAD" ]; state_end_exception [ label = "END_EXCEPTION" ]; state_none -> state_empty [ label = " /NRESET" ]; state_empty -> state_empty [ label = " /INSERT" ]; state_empty -> state_branch_wait_end [ label = " INSERT and /EXCEPTION and TYPE_BRANCH" ]; state_empty -> state_store_wait_head_ok [ label = " INSERT and /EXCEPTION and TYPE_STORE" ]; state_empty -> state_other_wait_end [ label = " INSERT and /EXCEPTION and TYPE_OTHER" ]; state_empty -> state_end_exception_wait_head [ label = " INSERT and EXCEPTION" ]; state_branch_wait_end -> state_branch_wait_end [ label = " /PREVIOUS_MISS_SPECULATION and /COMMIT" ]; state_branch_wait_end -> state_branch_complete [ label = " /PREVIOUS_MISS_SPECULATION and COMMIT and /EXCEPTION" ]; state_branch_wait_end -> state_end_exception_wait_head [ label = " /PREVIOUS_MISS_SPECULATION and COMMIT and EXCEPTION" ]; state_branch_wait_end -> state_miss_wait_end [ label = " PREVIOUS_MISS_SPECULATION" ]; state_branch_complete -> state_branch_complete [ label = " /PREVIOUS_MISS_SPECULATION and /BRANCH_COMPLETE" ]; state_branch_complete -> state_end_ok_speculative [ label = " /PREVIOUS_MISS_SPECULATION and BRANCH_COMPLETE" ]; state_branch_complete -> state_end_miss [ label = " PREVIOUS_MISS_SPECULATION" ]; state_store_wait_head_ok -> state_store_wait_head_ok [ label = " /PREVIOUS_MISS_SPECULATION and /HEAD" ]; state_store_wait_head_ok -> state_store_head_ok [ label = " /PREVIOUS_MISS_SPECULATION and HEAD" ]; state_store_wait_head_ok -> state_store_head_ko [ label = " PREVIOUS_MISS_SPECULATION" ]; state_store_head_ok -> state_store_head_ok [ label = " /REEXECUTE" ]; state_store_head_ok -> state_other_wait_end [ label = " REEXECUTE" ]; state_store_head_ko -> state_store_head_ko [ label = " /REEXECUTE" ]; state_store_head_ko -> state_miss_wait_end [ label = " REEXECUTE" ]; state_other_wait_end -> state_other_wait_end [ label = " /PREVIOUS_MISS_SPECULATION and /COMMIT" ]; state_other_wait_end -> state_end_ok_speculative [ label = " /PREVIOUS_MISS_SPECULATION and COMMIT and /EXCEPTION" ]; state_other_wait_end -> state_end_exception_wait_head [ label = " /PREVIOUS_MISS_SPECULATION and COMMIT and EXCEPTION" ]; state_other_wait_end -> state_miss_wait_end [ label = " PREVIOUS_MISS_SPECULATION" ]; state_miss_wait_end -> state_miss_wait_end [ label = " /COMMIT" ]; state_miss_wait_end -> state_end_miss [ label = " COMMIT" ]; state_end_miss -> state_end_miss [ label = " /RETIRE" ]; state_end_miss -> state_empty [ label = " RETIRE" ]; state_end_ok_speculative -> state_end_ok_speculative [ label = " /PREVIOUS_MISS_SPECULATION and SPECULATIVE" ]; state_end_ok_speculative -> state_end_ok [ label = " /PREVIOUS_MISS_SPECULATION and /SPECULATIVE" ]; state_end_ok_speculative -> state_end_miss [ label = " PREVIOUS_MISS_SPECULATION" ]; state_end_ok -> state_end_ok [ label = " /RETIRE" ]; state_end_ok -> state_empty [ label = " RETIRE" ]; state_end_ko_speculative -> state_end_ko_speculative [ label = " /PREVIOUS_MISS_SPECULATION and SPECULATIVE" ]; state_end_ko_speculative -> state_end_ko [ label = " /PREVIOUS_MISS_SPECULATION and /SPECULATIVE" ]; state_end_ko_speculative -> state_end_miss [ label = " PREVIOUS_MISS_SPECULATION" ]; state_end_ko -> state_end_ko [ label = " /RETIRE" ]; state_end_ko -> state_empty [ label = " RETIRE" ]; state_end_exception_wait_head -> state_end_exception_wait_head [ label = " /PREVIOUS_MISS_SPECULATION and /HEAD" ]; state_end_exception_wait_head -> state_end_exception [ label = " /PREVIOUS_MISS_SPECULATION and HEAD" ]; state_end_exception_wait_head -> state_end_miss [ label = " PREVIOUS_MISS_SPECULATION" ]; state_end_exception -> state_end_exception [ label = " /EVENT" ]; state_end_exception -> state_end_ko [ label = " EVENT" ]; }