Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp	(revision 106)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp	(revision 107)
@@ -422,5 +422,13 @@
 
 	      // In all case : update good_take
-	      reg_UPDATE_PREDICTION_TABLE [context][depth]._good_take = good_take;
+	      reg_UPDATE_PREDICTION_TABLE [context][depth]._good_take    = good_take;
+
+              // Write address_dest if need read register
+              Tbranch_condition_t condition = reg_UPDATE_PREDICTION_TABLE [context][depth]._condition;
+              
+              if ((condition == BRANCH_CONDITION_READ_REGISTER_WITHOUT_WRITE_STACK) or
+                  (condition == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK   ) or
+                  (condition == BRANCH_CONDITION_READ_STACK                       ) )
+                reg_UPDATE_PREDICTION_TABLE [context][depth]._address_dest = good_addr;
             }
 
@@ -599,13 +607,12 @@
 	      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * BRANCH_EVENT [%d] - Accepted",i);
 
-#ifdef DEBUG_TEST
-              if (reg_EVENT_STATE [i] != EVENT_STATE_UPDATE_CONTEXT)
-                throw ERRORMORPHEO(FUNCTION,_("Decod : invalid event state."));
-#endif
-              
-              // Change state
-              log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_WAIT_END_EVENT (branch_event)",i);
-              
-              reg_EVENT_STATE [i] = EVENT_STATE_WAIT_END_EVENT;
+              // if different : an other branch is occured
+              if (reg_EVENT_STATE [i] == EVENT_STATE_UPDATE_CONTEXT)
+                {
+                  // Change state
+                  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_WAIT_END_EVENT (branch_event)",i);
+                  
+                  reg_EVENT_STATE [i] = EVENT_STATE_WAIT_END_EVENT;
+                }
             }
 
@@ -866,13 +873,16 @@
 	log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UFPT_NB_UPDATE      : %d",reg_UFPT_NB_UPDATE      [i]);
 	for (uint32_t j=0; j<_param->_size_ufpt_queue[i]; j++)
-	  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"        [%d] %.4d, %.8x %.8x, %.1d   %.1d, %.8d %.8x %.4d - %s",
+	  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"        [%d] %.4d, %.8x (%.8x) %.8x (%.8x), %.1d   %.1d, %.8d %.8x (%.8x) %.4d - %s",
                      j,
                      reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._condition,
                      reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_src,
+                     reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_src<<2,
                      reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_dest,
+                     reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_dest<<2,
                      reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._last_take,
                      reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._is_accurate,
                      reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._history,
                      reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_ras,
+                     reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_ras<<2,
                      reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._index_ras,
                      toString(reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._state).c_str()
@@ -886,9 +896,11 @@
 	log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UPT_EMPTY           : %d",reg_UPT_EMPTY          [i]);
 	for (uint32_t j=0; j<_param->_size_upt_queue[i]; j++)
-	  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"        [%d] %.4d, %.8x %.8x, %.1d %.1d %.1d, %.8d %.8x %.4d - %s",
+	  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"        [%d] %.4d, %.8x (%.8x) %.8x (%.8x), %.1d %.1d %.1d, %.8d %.8x (%.8x) %.4d - %s",
                      j,
                      reg_UPDATE_PREDICTION_TABLE [i][j]._condition,
                      reg_UPDATE_PREDICTION_TABLE [i][j]._address_src,
+                     reg_UPDATE_PREDICTION_TABLE [i][j]._address_src<<2,
                      reg_UPDATE_PREDICTION_TABLE [i][j]._address_dest,
+                     reg_UPDATE_PREDICTION_TABLE [i][j]._address_dest<<2,
                      reg_UPDATE_PREDICTION_TABLE [i][j]._last_take,
                      reg_UPDATE_PREDICTION_TABLE [i][j]._good_take,
@@ -896,4 +908,5 @@
                      reg_UPDATE_PREDICTION_TABLE [i][j]._history,
                      reg_UPDATE_PREDICTION_TABLE [i][j]._address_ras,
+                     reg_UPDATE_PREDICTION_TABLE [i][j]._address_ras<<2,
                      reg_UPDATE_PREDICTION_TABLE [i][j]._index_ras,
                      toString(reg_UPDATE_PREDICTION_TABLE [i][j]._state).c_str()
